Repository: potree/PotreeDesktop Branch: master Commit: 9849498432dc Files: 223 Total size: 30.5 MB Directory structure: gitextract_1c2985fr/ ├── .gitignore ├── .vscode/ │ ├── keybindings.json │ └── settings.json ├── LICENSE ├── PotreeDesktop.bat ├── README.md ├── index.html ├── libs/ │ ├── MeshLine/ │ │ ├── LICENSE │ │ ├── README.md │ │ └── src/ │ │ └── THREE.MeshLine.js │ ├── PotreeConverter/ │ │ └── LICENSE_laszip │ ├── PotreeConverter2/ │ │ ├── README.md │ │ └── licenses/ │ │ ├── license_brotli.txt │ │ ├── license_json.txt │ │ ├── license_laszip.txt │ │ └── license_potree_converter.txt │ ├── ZoomableSlider/ │ │ ├── ZoomableSlider.css │ │ ├── ZoomableSlider.html │ │ └── ZoomableSlider.js │ ├── brotli/ │ │ ├── BUILD │ │ ├── LICENSE │ │ ├── WORKSPACE │ │ ├── decode.js │ │ ├── decode_test.js │ │ └── polyfill.js │ ├── d3/ │ │ ├── LICENSE │ │ └── d3.js │ ├── ept/ │ │ └── ParseBuffer.js │ ├── geopackage/ │ │ ├── LICENSE │ │ ├── README.md │ │ └── geopackage.js │ ├── i18next/ │ │ └── i18next.js │ ├── jquery/ │ │ └── jquery-3.1.1.js │ ├── jquery-ui/ │ │ ├── AUTHORS.txt │ │ ├── LICENSE.txt │ │ ├── index.html │ │ ├── jquery-ui.css │ │ ├── jquery-ui.structure.css │ │ ├── jquery-ui.theme.css │ │ └── package.json │ ├── json5-2.1.3/ │ │ ├── LICENSE.md │ │ ├── README.md │ │ └── json5.mjs │ ├── jstree/ │ │ ├── LICENSE-MIT │ │ ├── README.md │ │ ├── jstree.js │ │ └── themes/ │ │ └── mixed/ │ │ └── style.css │ ├── openlayers3/ │ │ ├── LICENSE │ │ ├── ol-deps.js │ │ ├── ol.css │ │ └── ol.js │ ├── other/ │ │ ├── BinaryHeap.js │ │ └── stats.js │ ├── plasio/ │ │ ├── LICENSE │ │ ├── js/ │ │ │ └── laslaz.js │ │ ├── vendor/ │ │ │ └── bluebird.js │ │ └── workers/ │ │ ├── laz-loader-worker.js │ │ └── laz-perf.js │ ├── potree/ │ │ ├── LICENSE │ │ ├── lazylibs/ │ │ │ ├── geopackage/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ └── geopackage.js │ │ │ └── sql.js/ │ │ │ ├── AUTHORS │ │ │ ├── LICENSE │ │ │ ├── README.md │ │ │ ├── sql-wasm.js │ │ │ └── sql-wasm.wasm │ │ ├── potree.css │ │ ├── potree.js │ │ ├── profile.html │ │ ├── resources/ │ │ │ ├── LICENSE │ │ │ ├── icons/ │ │ │ │ ├── image_preview.php │ │ │ │ └── index.html │ │ │ ├── lang/ │ │ │ │ ├── de/ │ │ │ │ │ └── translation.json │ │ │ │ ├── dev/ │ │ │ │ │ ├── ns.common.json │ │ │ │ │ ├── ns.special.json │ │ │ │ │ └── translation.json │ │ │ │ ├── en/ │ │ │ │ │ ├── ns.common.json │ │ │ │ │ ├── ns.special.json │ │ │ │ │ └── translation.json │ │ │ │ ├── en-US/ │ │ │ │ │ ├── ns.common.json │ │ │ │ │ ├── ns.special.json │ │ │ │ │ └── translation.json │ │ │ │ ├── es/ │ │ │ │ │ └── translation.json │ │ │ │ ├── fr/ │ │ │ │ │ └── translation.json │ │ │ │ ├── it/ │ │ │ │ │ └── translation.json │ │ │ │ ├── jp/ │ │ │ │ │ └── translation.json │ │ │ │ ├── se/ │ │ │ │ │ └── translation.json │ │ │ │ └── zh/ │ │ │ │ └── translation.json │ │ │ ├── models/ │ │ │ │ ├── stanford_bunny_reduced.mtl │ │ │ │ ├── stanford_bunny_reduced.obj │ │ │ │ └── stanford_bunny_reduced.ply │ │ │ ├── shapefiles/ │ │ │ │ ├── south_sorvilier.dbf │ │ │ │ └── south_sorvilier.shp │ │ │ └── textures/ │ │ │ ├── LICENSE │ │ │ ├── matcap/ │ │ │ │ └── blender_matcap_license.txt │ │ │ ├── skybox/ │ │ │ │ └── skyboxsun25degtest.txt │ │ │ ├── skybox2/ │ │ │ │ └── README.TXT │ │ │ └── skyboxsun25degtest.txt │ │ ├── sidebar.html │ │ └── workers/ │ │ ├── 2.0/ │ │ │ ├── DecoderWorker.js │ │ │ └── DecoderWorker_brotli.js │ │ ├── BinaryDecoderWorker.js │ │ ├── EptBinaryDecoderWorker.js │ │ ├── EptLaszipDecoderWorker.js │ │ ├── EptZstandardDecoderWorker.js │ │ ├── LASDecoderWorker.js │ │ └── LASLAZWorker.js │ ├── proj4/ │ │ ├── LICENSE.md │ │ ├── README.md │ │ └── proj4.js │ ├── shapefile/ │ │ └── shapefile.js │ ├── spectrum/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── spectrum.css │ │ └── spectrum.js │ ├── sql.js/ │ │ ├── AUTHORS │ │ ├── LICENSE │ │ ├── README.md │ │ ├── sql-wasm.js │ │ └── sql-wasm.wasm │ ├── three.js/ │ │ ├── LICENSE │ │ ├── README.md │ │ ├── build/ │ │ │ ├── three.js │ │ │ └── three.module.js │ │ ├── extra/ │ │ │ ├── GLTFLoader.js │ │ │ ├── VRButton.js │ │ │ ├── XRControllerModelFactory.js │ │ │ ├── lines/ │ │ │ │ ├── Line2.js │ │ │ │ ├── LineGeometry.js │ │ │ │ ├── LineMaterial.js │ │ │ │ ├── LineSegments2.js │ │ │ │ ├── LineSegmentsGeometry.js │ │ │ │ ├── Wireframe.js │ │ │ │ └── WireframeGeometry2.js │ │ │ └── lines.js │ │ ├── libs/ │ │ │ ├── dat.gui.module.js │ │ │ ├── meshopt_decoder.module.js │ │ │ ├── mmdparser.module.js │ │ │ ├── motion-controllers.module.js │ │ │ ├── stats.module.js │ │ │ └── zstddec.module.js │ │ ├── lines/ │ │ │ ├── Line2.js │ │ │ ├── LineGeometry.js │ │ │ ├── LineMaterial.js │ │ │ ├── LineSegments2.js │ │ │ ├── LineSegmentsGeometry.js │ │ │ ├── Wireframe.js │ │ │ └── WireframeGeometry2.js │ │ ├── loaders/ │ │ │ ├── 3DMLoader.js │ │ │ ├── 3MFLoader.js │ │ │ ├── AMFLoader.js │ │ │ ├── AssimpLoader.js │ │ │ ├── BVHLoader.js │ │ │ ├── BasisTextureLoader.js │ │ │ ├── ColladaLoader.js │ │ │ ├── DDSLoader.js │ │ │ ├── DRACOLoader.js │ │ │ ├── EXRLoader.js │ │ │ ├── FBXLoader.js │ │ │ ├── GCodeLoader.js │ │ │ ├── GLTFLoader.js │ │ │ ├── HDRCubeTextureLoader.js │ │ │ ├── KMZLoader.js │ │ │ ├── KTX2Loader.js │ │ │ ├── KTXLoader.js │ │ │ ├── LDrawLoader.js │ │ │ ├── LUT3dlLoader.js │ │ │ ├── LUTCubeLoader.js │ │ │ ├── LWOLoader.js │ │ │ ├── LottieLoader.js │ │ │ ├── MD2Loader.js │ │ │ ├── MDDLoader.js │ │ │ ├── MMDLoader.js │ │ │ ├── MTLLoader.js │ │ │ ├── NRRDLoader.js │ │ │ ├── NodeMaterialLoader.js │ │ │ ├── OBJLoader.js │ │ │ ├── OBJLoader2.js │ │ │ ├── OBJLoader2Parallel.js │ │ │ ├── PCDLoader.js │ │ │ ├── PDBLoader.js │ │ │ ├── PLYLoader.js │ │ │ ├── PRWMLoader.js │ │ │ ├── PVRLoader.js │ │ │ ├── RGBELoader.js │ │ │ ├── STLLoader.js │ │ │ ├── SVGLoader.js │ │ │ ├── TDSLoader.js │ │ │ ├── TGALoader.js │ │ │ ├── TTFLoader.js │ │ │ ├── TiltLoader.js │ │ │ ├── VOXLoader.js │ │ │ ├── VRMLLoader.js │ │ │ ├── VRMLoader.js │ │ │ ├── VTKLoader.js │ │ │ ├── XLoader.js │ │ │ ├── XYZLoader.js │ │ │ ├── lwo/ │ │ │ │ ├── IFFParser.js │ │ │ │ ├── LWO2Parser.js │ │ │ │ └── LWO3Parser.js │ │ │ └── obj2/ │ │ │ ├── OBJLoader2Parser.js │ │ │ ├── bridge/ │ │ │ │ └── MtlObjBridge.js │ │ │ ├── shared/ │ │ │ │ ├── MaterialHandler.js │ │ │ │ └── MeshReceiver.js │ │ │ ├── utils/ │ │ │ │ └── CodeSerializer.js │ │ │ └── worker/ │ │ │ ├── main/ │ │ │ │ └── WorkerExecutionSupport.js │ │ │ └── parallel/ │ │ │ ├── OBJLoader2JsmWorker.js │ │ │ └── WorkerRunner.js │ │ └── webxr/ │ │ ├── ARButton.js │ │ ├── VRButton.js │ │ ├── XRControllerModelFactory.js │ │ ├── XRHandModelFactory.js │ │ ├── XRHandOculusMeshModel.js │ │ └── XRHandPrimitiveModel.js │ ├── tween/ │ │ ├── LICENSE.txt │ │ ├── README.txt │ │ └── Tween.js │ └── zstd-codec/ │ └── bundle.js ├── main.js ├── package.json └── src/ ├── desktop.css └── desktop.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ node_modules package-lock.json libs/Cesium ================================================ FILE: .vscode/keybindings.json ================================================ // Place your key bindings in this file to overwrite the defaults [ { "key": "ctrl+l", "command": "editor.action.deleteLines", "when": "editorTextFocus && !editorReadonly" },{ "key": "ctrl+shift+i", "command": "editor.action.toggleRenderWhitespace" },{ "key": "ctrl+d", "command": "editor.action.copyLinesDownAction", "when": "editorTextFocus" },{ "key": "alt+2", "command": "type", "args": { "text": "`" } } ] ================================================ FILE: .vscode/settings.json ================================================ { "workbench.editor.enablePreview": false, "files.associations": { "*.vs": "cpp", "*.fs": "cpp" }, "files.trimTrailingWhitespace": false, "editor.fontSize": 28, "editor.autoIndent": "advanced", "editor.detectIndentation": false, "editor.insertSpaces": false, "editor.minimap.enabled": false, "editor.autoClosingBrackets": "never", "editor.formatOnType": false, "editor.acceptSuggestionOnEnter": "off", "editor.acceptSuggestionOnCommitCharacter": false, "editor.mouseWheelZoom": true, "editor.renderWhitespace": "all", "editor.autoClosingQuotes": "never", "editor.autoSurround": "never", } ================================================ FILE: LICENSE ================================================ ============ == POTREE == ============ http://potree.org Copyright (c) 2011-2020, Markus Schütz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. ================================================ FILE: PotreeDesktop.bat ================================================ start ./node_modules/electron/dist/electron.exe ./main ================================================ FILE: README.md ================================================ # About A desktop/portable version of the web-based point cloud viewer [Potree](https://github.com/potree/potree), thanks to [Electron](https://electronjs.org/). * This version allows you to load [converted point clouds](https://github.com/potree/PotreeConverter) from your hard disc or USB drive. It's also portable so you can put your models together with the viewer on a USB drive and open it wherever you go. * It's only been tested on windows at the moment. It may not work on other systems or you may only be able to use it on the same Operating System that you've initially built it on. * Modify index.html to change which point cloud should be loaded by default. * You can also drag&drop cloud.js files into the window to add point clouds to the scene. * This desktop version is in a prototype state and as such it may be a bit awkward to use at times. In order to reset the viewer, you'll have to click "window->reload". # LICENSE * BSD 2-clause license. (free to use, preservation of copyright notice/attribute when redistributing) # Getting Started * Install [Node.js](https://nodejs.org/en/) * Execute PotreeDesktop.bat * Drag and Drop a las or laz file to convert and load it. * Drag and Drop a previously converted point cloud to load it. ================================================ FILE: index.html ================================================ Potree Viewer

Convert and/or Load point clouds

  • Drop LAS/LAZ files to convert and load them.
  • Drop folders to convert and load all files inside.
  • Drop previously converted cloud.js, metadata.json or containing directy to load.
Target Directory:
 
Input Files:
file 1
file 2
file 3
file 4
file 5
file 6
file 7
file 8

Choose a Converter:

================================================ FILE: libs/MeshLine/LICENSE ================================================ MIT License Copyright (c) 2016 Jaume Sanchez 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. ================================================ FILE: libs/MeshLine/README.md ================================================ # MeshLine Mesh replacement for ```THREE.Line``` Instead of using GL_LINE, it uses a strip of triangles billboarded. Some examples: [![Demo](screenshots/demo.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html) [![Graph](screenshots/graph.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html) [![Spinner](screenshots/spinner.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html) [![SVG](screenshots/svg.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html) [![Shape](screenshots/shape.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html) [![Shape](screenshots/birds.jpg)](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html) * [Demo](https://www.clicktorelease.com/code/THREE.MeshLine/demo/index.html): play with the different settings of materials * [Graph](https://www.clicktorelease.com/code/THREE.MeshLine/demo/graph.html): example of using ```MeshLine``` to plot graphs * [Spinner](https://www.clicktorelease.com/code/THREE.MeshLine/demo/spinner.html): example of dynamic ```MeshLine``` with texture * [SVG](https://www.clicktorelease.com/code/THREE.MeshLine/demo/svg.html): example of ```MeshLine``` rendering SVG Paths * [Shape](https://www.clicktorelease.com/code/THREE.MeshLine/demo/shape.html): example of ```MeshLine``` created from a mesh * [Birds](https://www.clicktorelease.com/code/THREE.MeshLine/demo/birds.html): example of ```MeshLine.advance()``` by @caramelcode (Jared Sprague) and @mwcz (Michael Clayton) ### How to use #### * Include script * Create and populate a geometry * Create a MeshLine and assign the geometry * Create a MeshLineMaterial * Use MeshLine and MeshLineMaterial to create a THREE.Mesh #### Include the script Include script after THREE is included ```js ``` or use npm to install it ``` npm i three.meshline ``` and include it in your code (don't forget to require three.js) ```js var THREE = require( 'three' ); var MeshLine = require( 'three.meshline' ); ``` ##### Create and populate a geometry ##### First, create the list of vertices that will define the line. ```MeshLine``` accepts ```THREE.Geometry``` (looking up the ```.vertices``` in it) and ```Array```/```Float32Array```. ```THREE.BufferGeometry``` coming soon, and may be others like ```Array``` of ```THREE.Vector3```. ```js var geometry = new THREE.Geometry(); for( var j = 0; j < Math.PI; j += 2 * Math.PI / 100 ) { var v = new THREE.Vector3( Math.cos( j ), Math.sin( j ), 0 ); geometry.vertices.push( v ); } ``` ##### Create a MeshLine and assign the geometry ##### Once you have that, you can create a new ```MeshLine```, and call ```.setGeometry()``` passing the vertices. ```js var line = new MeshLine(); line.setGeometry( geometry ); ``` Note: ```.setGeometry``` accepts a second parameter, which is a function to define the width in each point along the line. By default that value is 1, making the line width 1 * lineWidth. ```js line.setGeometry( geometry, function( p ) { return 2; } ); // makes width 2 * lineWidth line.setGeometry( geometry, function( p ) { return 1 - p; } ); // makes width taper line.setGeometry( geometry, function( p ) { return 2 + Math.sin( 50 * p ); } ); // makes width sinusoidal ``` ##### Create a MeshLineMaterial ##### A ```MeshLine``` needs a ```MeshLineMaterial```: ```js var material = new MeshLineMaterial(); ``` By default it's a white material of width 1 unit. ```MeshLineMaterial``` has several attributes to control the appereance of the ```MeshLine```: * ```map``` - a ```THREE.Texture``` to paint along the line (requires ```useMap``` set to true) * ```useMap``` - tells the material to use ```map``` (0 - solid color, 1 use texture) * ```alphaMap``` - a ```THREE.Texture``` to use as alpha along the line (requires ```useAlphaMap``` set to true) * ```useAlphaMap``` - tells the material to use ```alphaMap``` (0 - no alpha, 1 modulate alpha) * ```repeat``` - THREE.Vector2 to define the texture tiling (applies to map and alphaMap - MIGHT CHANGE IN THE FUTURE) * ```color``` - ```THREE.Color``` to paint the line width, or tint the texture with * ```opacity``` - alpha value from 0 to 1 (requires ```transparent``` set to ```true```) * ```alphaTest``` - cutoff value from 0 to 1 * ```dashArray``` - THREE.Vector2 to define the dashing (NOT IMPLEMENTED YET) * ```resolution``` - ```THREE.Vector2``` specifying the canvas size (REQUIRED) * ```sizeAttenuation``` - makes the line width constant regardless distance (1 unit is 1px on screen) (0 - attenuate, 1 - don't attenuate) * ```lineWidth``` - float defining width (if ```sizeAttenuation``` is true, it's world units; else is screen pixels) * ```near``` - camera near clip plane distance (REQUIRED if ```sizeAttenuation``` set to false) * ```far``` - camera far clip plane distance (REQUIRED if ```sizeAttenuation``` set to false) If you're rendering transparent lines or using a texture with alpha map, you should set ```depthTest``` to ```false```, ```transparent``` to ```true``` and ```blending``` to an appropriate blending mode, or use ```alphaTest```. ##### Use MeshLine and MeshLineMaterial to create a THREE.Mesh ##### Finally, we create a mesh and add it to the scene: ```js var mesh = new THREE.Mesh( line.geometry, material ); // this syntax could definitely be improved! scene.add( mesh ); ``` ### TODO ### * Better miters * Proper sizes * Support for dashArray ### Support ### Tested successfully on * Chrome OSX, Windows, Android * Firefox OSX, Windows, Anroid * Safari OSX, iOS * Internet Explorer 11 (SVG and Shape demo won't work because they use Promises) * Opera OSX, Windows ### References ### * [Drawing lines is hard](http://mattdesl.svbtle.com/drawing-lines-is-hard) * [WebGL rendering of solid trails](http://codeflow.org/entries/2012/aug/05/webgl-rendering-of-solid-trails/) * [Drawing Antialiased Lines with OpenGL](https://www.mapbox.com/blog/drawing-antialiased-lines/) #### License #### MIT licensed Copyright (C) 2015-2016 Jaume Sanchez Elias, http://www.clicktorelease.com ================================================ FILE: libs/MeshLine/src/THREE.MeshLine.js ================================================ ;(function() { "use strict"; var root = this var has_require = typeof require !== 'undefined' var THREE = root.THREE || has_require && require('three') if( !THREE ) throw new Error( 'MeshLine requires three.js' ) function MeshLine() { this.positions = []; this.previous = []; this.next = []; this.side = []; this.width = []; this.indices_array = []; this.uvs = []; this.counters = []; this.geometry = new THREE.BufferGeometry(); this.widthCallback = null; } MeshLine.prototype.setGeometry = function( g, c ) { this.widthCallback = c; this.positions = []; this.counters = []; if( g instanceof THREE.Geometry ) { for( var j = 0; j < g.vertices.length; j++ ) { var v = g.vertices[ j ]; var c = j/g.vertices.length; this.positions.push( v.x, v.y, v.z ); this.positions.push( v.x, v.y, v.z ); this.counters.push(c); this.counters.push(c); } } if( g instanceof THREE.BufferGeometry ) { // read attribute positions ? } if( g instanceof Float32Array || g instanceof Array ) { for( var j = 0; j < g.length; j += 3 ) { var c = j/g.length; this.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] ); this.positions.push( g[ j ], g[ j + 1 ], g[ j + 2 ] ); this.counters.push(c); this.counters.push(c); } } this.process(); } MeshLine.prototype.compareV3 = function( a, b ) { var aa = a * 6; var ab = b * 6; return ( this.positions[ aa ] === this.positions[ ab ] ) && ( this.positions[ aa + 1 ] === this.positions[ ab + 1 ] ) && ( this.positions[ aa + 2 ] === this.positions[ ab + 2 ] ); } MeshLine.prototype.copyV3 = function( a ) { var aa = a * 6; return [ this.positions[ aa ], this.positions[ aa + 1 ], this.positions[ aa + 2 ] ]; } MeshLine.prototype.process = function() { var l = this.positions.length / 6; this.previous = []; this.next = []; this.side = []; this.width = []; this.indices_array = []; this.uvs = []; for( var j = 0; j < l; j++ ) { this.side.push( 1 ); this.side.push( -1 ); } var w; for( var j = 0; j < l; j++ ) { if( this.widthCallback ) w = this.widthCallback( j / ( l -1 ) ); else w = 1; this.width.push( w ); this.width.push( w ); } for( var j = 0; j < l; j++ ) { this.uvs.push( j / ( l - 1 ), 0 ); this.uvs.push( j / ( l - 1 ), 1 ); } var v; if( this.compareV3( 0, l - 1 ) ){ v = this.copyV3( l - 2 ); } else { v = this.copyV3( 0 ); } this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); for( var j = 0; j < l - 1; j++ ) { v = this.copyV3( j ); this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); this.previous.push( v[ 0 ], v[ 1 ], v[ 2 ] ); } for( var j = 1; j < l; j++ ) { v = this.copyV3( j ); this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); } if( this.compareV3( l - 1, 0 ) ){ v = this.copyV3( 1 ); } else { v = this.copyV3( l - 1 ); } this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); this.next.push( v[ 0 ], v[ 1 ], v[ 2 ] ); for( var j = 0; j < l - 1; j++ ) { var n = j * 2; this.indices_array.push( n, n + 1, n + 2 ); this.indices_array.push( n + 2, n + 1, n + 3 ); } if (!this.attributes) { this.attributes = { position: new THREE.BufferAttribute( new Float32Array( this.positions ), 3 ), previous: new THREE.BufferAttribute( new Float32Array( this.previous ), 3 ), next: new THREE.BufferAttribute( new Float32Array( this.next ), 3 ), side: new THREE.BufferAttribute( new Float32Array( this.side ), 1 ), width: new THREE.BufferAttribute( new Float32Array( this.width ), 1 ), uv: new THREE.BufferAttribute( new Float32Array( this.uvs ), 2 ), index: new THREE.BufferAttribute( new Uint16Array( this.indices_array ), 1 ), counters: new THREE.BufferAttribute( new Float32Array( this.counters ), 1 ) } } else { this.attributes.position.copyArray(new Float32Array(this.positions)); this.attributes.position.needsUpdate = true; this.attributes.previous.copyArray(new Float32Array(this.previous)); this.attributes.previous.needsUpdate = true; this.attributes.next.copyArray(new Float32Array(this.next)); this.attributes.next.needsUpdate = true; this.attributes.side.copyArray(new Float32Array(this.side)); this.attributes.side.needsUpdate = true; this.attributes.width.copyArray(new Float32Array(this.width)); this.attributes.width.needsUpdate = true; this.attributes.uv.copyArray(new Float32Array(this.uvs)); this.attributes.uv.needsUpdate = true; this.attributes.index.copyArray(new Uint16Array(this.indices_array)); this.attributes.index.needsUpdate = true; } this.geometry.addAttribute( 'position', this.attributes.position ); this.geometry.addAttribute( 'previous', this.attributes.previous ); this.geometry.addAttribute( 'next', this.attributes.next ); this.geometry.addAttribute( 'side', this.attributes.side ); this.geometry.addAttribute( 'width', this.attributes.width ); this.geometry.addAttribute( 'uv', this.attributes.uv ); this.geometry.addAttribute( 'counters', this.attributes.counters ); this.geometry.setIndex( this.attributes.index ); } function memcpy (src, srcOffset, dst, dstOffset, length) { var i src = src.subarray || src.slice ? src : src.buffer dst = dst.subarray || dst.slice ? dst : dst.buffer src = srcOffset ? src.subarray ? src.subarray(srcOffset, length && srcOffset + length) : src.slice(srcOffset, length && srcOffset + length) : src if (dst.set) { dst.set(src, dstOffset) } else { for (i=0; i -o ``` * Optionally specify the sampling strategy: * Poisson-disk sampling (default): ```PotreeConverter.exe -o -m poisson``` * Random sampling: ```PotreeConverter.exe -o -m random``` In Potree, modify one of the examples with following load command: ```javascript let url = "../pointclouds/D/temp/test/metadata.json"; Potree.loadPointCloud(url).then(e => { let pointcloud = e.pointcloud; let material = pointcloud.material; material.activeAttributeName = "rgba"; material.minSize = 2; material.pointSizeType = Potree.PointSizeType.ADAPTIVE; viewer.scene.addPointCloud(pointcloud); viewer.fitToScreen(); }); ``` # Alternatives PotreeConverter 2.0 produces a very different format than previous iterations. If you find issues, you can still try previous converters or alternatives:
PotreeConverter 2.0 PotreeConverter 1.7 Entwine
license free, BSD 2-clause free, BSD 2-clause free, LGPL
#generated files 3 files total 1 per node 1 per node
compression none (TODO) LAZ (optional) LAZ
Performance comparison (Ryzen 2700, NVMe SSD): ![](./docs/images/performance_chart.png) # License PotreeConverter is available under the [BSD 2-clause license](./LICENSE). ================================================ FILE: libs/PotreeConverter2/licenses/license_brotli.txt ================================================ Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. 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. ================================================ FILE: libs/PotreeConverter2/licenses/license_json.txt ================================================ MIT License Copyright (c) 2013-2020 Niels Lohmann 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. ================================================ FILE: libs/PotreeConverter2/licenses/license_laszip.txt ================================================ GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! ================================================ FILE: libs/PotreeConverter2/licenses/license_potree_converter.txt ================================================ Copyright 2020 Markus Schütz Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ================================================ FILE: libs/ZoomableSlider/ZoomableSlider.css ================================================ .zs_widget{ padding: 2px; height: 30px; border: 1px solid green; user-select: none; } .zs_core{ overflow: hidden; position: relative; height: 100%; } .zs_handle{ position: absolute; top: 0px; bottom: 0px; border: 1px solid green; background-color: green; width: 8px; user-select: none; } .zs_handle:hover{ background-color: lightgreen; } .zs_inside{ position: absolute; } .zs_outside{ position: absolute !important; width: 100%; height: 2px; background-color: black; top: 50%; } .zs_visible_range_label{ position: absolute; bottom: 0px; } .zs_visible_range_label_left{ left: 0px; } .zs_visible_range_label_right{ right: 0px; } .zs_chosen_range_label{ position: absolute; } ================================================ FILE: libs/ZoomableSlider/ZoomableSlider.html ================================================ Document
================================================ FILE: libs/ZoomableSlider/ZoomableSlider.js ================================================ class ZoomableSlider{ constructor(){ this.visibleRange = [0, 10]; this.chosenRange = [2, 7]; this.step = 0.01; this.clipDragToVisible = true; this.element = document.createElement("div"); this.element.innerHTML = `
       
`; this.elCore = this.element.querySelector('[name=core]'); this.elLeft = this.element.querySelector('[name=left]'); this.elRight = this.element.querySelector('[name=right]'); this.elInside = this.element.querySelector('[name=inside]'); this.elOutside = this.element.querySelector('[name=outside]'); this.elLabelVisibleLeft = this.element.querySelector('[name=label_visible_left]'); this.elLabelVisibleRight = this.element.querySelector('[name=label_visible_right]'); this.elLabelChosenLeft = this.element.querySelector('[name=label_chosen_left]'); this.elLabelChosenRight = this.element.querySelector('[name=label_chosen_right]'); this.elRight.style.left = "100px"; let dragStart = null; let onMouseDown = (e) => { e.preventDefault(); let value = (e.target === this.elLeft) ? this.chosenRange[0] : this.chosenRange[1]; dragStart = { x: e.clientX, y: e.clientY, handle: e.target, value: value, }; document.onmouseup = onMouseUp; document.onmousemove = onMouseMove; }; let onMouseUp = (e) => { document.onmouseup = null; document.onmousemove = null; }; let onMouseMove = (e) => { let dx = e.clientX - dragStart.x; let dy = e.clientY - dragStart.y; let normalizedDelta = dx / this.elCore.clientWidth; let valueDelta = (this.visibleRange[1] - this.visibleRange[0]) * normalizedDelta; let newValue = dragStart.value + valueDelta; newValue = Math.round(newValue / this.step) * this.step; let newRange; if(dragStart.handle === this.elLeft){ newRange = [newValue, this.chosenRange[1]]; }else{ newRange = [this.chosenRange[0], newValue]; } if(this.clipDragToVisible){ newRange[0] = Math.max(newRange[0], this.visibleRange[0]); newRange[1] = Math.min(newRange[1], this.visibleRange[1]); } this.setRange(newRange); }; for(let handle of [this.elLeft, this.elRight]){ handle.onmousedown = onMouseDown; } let onWheel = (e) => { e.preventDefault(); let delta = Math.sign(e.deltaY); let zoom = 1; if(delta < 0){ zoom = 0.8; }else if(delta > 0){ zoom = 1.2; } let oldRangeWidth = this.visibleRange[1] - this.visibleRange[0]; let rect = this.elCore.getBoundingClientRect(); let pivotPixels = e.clientX - rect.left; let pivotNormalized = (pivotPixels / this.elCore.clientWidth); let pivot = (oldRangeWidth * pivotNormalized) + this.visibleRange[0]; let leftRatio = (pivot - this.visibleRange[0]) / oldRangeWidth; let rightRatio = (this.visibleRange[1] - pivot) / oldRangeWidth; let newRangeWidth = oldRangeWidth * zoom; let newVisibleRange = [ pivot - (newRangeWidth * leftRatio), pivot + (newRangeWidth * rightRatio), ]; this.setVisibleRange(newVisibleRange); }; this.elCore.onmousewheel = onWheel; this.update(); } setRange(range){ this.chosenRange = range; this.update(); } setVisibleRange(range){ this.visibleRange = range; this.update(); } update(){ let {elLeft, elRight, visibleRange, chosenRange} = this; let pixelWidth = this.elCore.clientWidth; let normalizedLeft = (chosenRange[0] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]); let normalizedRight = (chosenRange[1] - visibleRange[0]) / (visibleRange[1] - visibleRange[0]); let pixelLeft = Math.round(normalizedLeft * pixelWidth) - elLeft.clientWidth; let pixelRight = Math.round(normalizedRight * pixelWidth) - elRight.clientWidth; elLeft.style.left = `${pixelLeft}px`; elRight.style.left = `${pixelRight}px`; let precision = Math.ceil(Math.log(1 / this.step) / Math.log(10)); this.elLabelVisibleLeft.style.left = "0px"; this.elLabelVisibleLeft.innerHTML = `${visibleRange[0].toFixed(precision)}`; this.elLabelVisibleRight.style.right = "0px"; this.elLabelVisibleRight.innerHTML = `${visibleRange[1].toFixed(precision)}`; this.elLabelChosenLeft.style.left = `${pixelLeft}px`; this.elLabelChosenLeft.innerHTML = `${chosenRange[0].toFixed(precision)}`; this.elLabelChosenRight.style.left = `${pixelRight}px`; this.elLabelChosenRight.innerHTML = `${chosenRange[1].toFixed(precision)}`; } }; ================================================ FILE: libs/brotli/BUILD ================================================ package( default_visibility = ["//visibility:public"], ) licenses(["notice"]) # MIT load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_library") # Not a real polyfill. Do NOT use for anything, but tests. closure_js_library( name = "polyfill", srcs = ["polyfill.js"], suppress = [ "JSC_INVALID_OPERAND_TYPE", "JSC_MISSING_JSDOC", "JSC_STRICT_INEXISTENT_PROPERTY", "JSC_TYPE_MISMATCH", "JSC_UNKNOWN_EXPR_TYPE", ], ) # Do NOT use this artifact; it is for test purposes only. closure_js_library( name = "decode", srcs = ["decode.js"], suppress = [ "JSC_DUP_VAR_DECLARATION", "JSC_USELESS_BLOCK", ], deps = [":polyfill"], ) load("@io_bazel_rules_closure//closure:defs.bzl", "closure_js_test") closure_js_test( name = "all_tests", srcs = ["decode_test.js"], deps = [ ":decode", ":polyfill", "@io_bazel_rules_closure//closure/library:testing", ], ) ================================================ FILE: libs/brotli/LICENSE ================================================ Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. 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. ================================================ FILE: libs/brotli/WORKSPACE ================================================ workspace(name = "org_brotli_js") load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") git_repository( name = "io_bazel_rules_closure", commit = "29ec97e7c85d607ba9e41cab3993fbb13f812c4b", remote = "https://github.com/bazelbuild/rules_closure.git", ) load("@io_bazel_rules_closure//closure:defs.bzl", "closure_repositories") closure_repositories() ================================================ FILE: libs/brotli/decode.js ================================================ /* Copyright 2017 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** @return {function(!Int8Array):!Int8Array} */ function BrotliDecodeClosure() { "use strict"; /** @type {!Int8Array} */ var DICTIONARY_DATA = new Int8Array(0); /** * @constructor * @param {!Int8Array} bytes * @struct */ function InputStream(bytes) { /** @type {!Int8Array} */ this.data = bytes; /** @type {!number} */ this.offset = 0; } var MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]); var CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]); var DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); var DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); var FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); var DICTIONARY_OFFSETS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, 122016]); var DICTIONARY_SIZE_BITS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5]); var BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]); var BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]); var INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]); var COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]); var CMD_LOOKUP = new Int16Array(2816); { unpackCommandLookupTable(CMD_LOOKUP); } /** * @param {number} i * @return {number} */ function log2floor(i) { var /** number */ result = -1; var /** number */ step = 16; while (step > 0) { if ((i >>> step) != 0) { result += step; i = i >>> step; } step = step >> 1; } return result + i; } /** * @param {number} npostfix * @param {number} ndirect * @param {number} maxndistbits * @return {number} */ function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { return 16 + ndirect + 2 * (maxndistbits << npostfix); } /** * @param {number} maxDistance * @param {number} npostfix * @param {number} ndirect * @return {number} */ function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { if (maxDistance < ndirect + (2 << npostfix)) { throw "maxDistance is too small"; } var /** number */ offset = ((maxDistance - ndirect) >> npostfix) + 4; var /** number */ ndistbits = log2floor(offset) - 1; var /** number */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; } /** * @param {!Int16Array} cmdLookup * @return {void} */ function unpackCommandLookupTable(cmdLookup) { var /** !Int16Array */ insertLengthOffsets = new Int16Array(24); var /** !Int16Array */ copyLengthOffsets = new Int16Array(24); copyLengthOffsets[0] = 2; for (var /** number */ i = 0; i < 23; ++i) { insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); } for (var /** number */ cmdCode = 0; cmdCode < 704; ++cmdCode) { var /** number */ rangeIdx = cmdCode >>> 6; var /** number */ distanceContextOffset = -4; if (rangeIdx >= 2) { rangeIdx -= 2; distanceContextOffset = 0; } var /** number */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); var /** number */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); var /** number */ copyLengthOffset = copyLengthOffsets[copyCode]; var /** number */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); var /** number */ index = cmdCode * 4; cmdLookup[index + 0] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); cmdLookup[index + 1] = insertLengthOffsets[insertCode]; cmdLookup[index + 2] = copyLengthOffsets[copyCode]; cmdLookup[index + 3] = distanceContext; } } /** * @param {!State} s * @return {number} */ function decodeWindowBits(s) { var /** number */ largeWindowEnabled = s.isLargeWindow; s.isLargeWindow = 0; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) == 0) { return 16; } var /** number */ n = readFewBits(s, 3); if (n != 0) { return 17 + n; } n = readFewBits(s, 3); if (n != 0) { if (n == 1) { if (largeWindowEnabled == 0) { return -1; } s.isLargeWindow = 1; if (readFewBits(s, 1) == 1) { return -1; } n = readFewBits(s, 6); if (n < 10 || n > 30) { return -1; } return n; } else { return 8 + n; } } return 17; } /** * @param {!State} s * @return {void} */ function enableEagerOutput(s) { if (s.runningState != 1) { throw "State MUST be freshly initialized"; } s.isEager = 1; } /** * @param {!State} s * @return {void} */ function enableLargeWindow(s) { if (s.runningState != 1) { throw "State MUST be freshly initialized"; } s.isLargeWindow = 1; } /** * @param {!State} s * @param {!InputStream} input * @return {void} */ function initState(s, input) { if (s.runningState != 0) { throw "State MUST be uninitialized"; } s.blockTrees = new Int32Array(3091); s.blockTrees[0] = 7; s.distRbIdx = 3; var /** number */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 15 << 3); s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); s.distOffset = new Int32Array(maxDistanceAlphabetLimit); s.input = input; initBitReader(s); s.runningState = 1; } /** * @param {!State} s * @return {void} */ function close(s) { if (s.runningState == 0) { throw "State MUST be initialized"; } if (s.runningState == 11) { return; } s.runningState = 11; if (s.input != null) { closeInput(s.input); s.input = null; } } /** * @param {!State} s * @return {number} */ function decodeVarLenUnsignedByte(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) != 0) { var /** number */ n = readFewBits(s, 3); if (n == 0) { return 1; } else { return readFewBits(s, n) + (1 << n); } } return 0; } /** * @param {!State} s * @return {void} */ function decodeMetaBlockLength(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.inputEnd = readFewBits(s, 1); s.metaBlockLength = 0; s.isUncompressed = 0; s.isMetadata = 0; if ((s.inputEnd != 0) && readFewBits(s, 1) != 0) { return; } var /** number */ sizeNibbles = readFewBits(s, 2) + 4; if (sizeNibbles == 7) { s.isMetadata = 1; if (readFewBits(s, 1) != 0) { throw "Corrupted reserved bit"; } var /** number */ sizeBytes = readFewBits(s, 2); if (sizeBytes == 0) { return; } for (var /** number */ i = 0; i < sizeBytes; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ bits = readFewBits(s, 8); if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) { throw "Exuberant nibble"; } s.metaBlockLength |= bits << (i * 8); } } else { for (var /** number */ i = 0; i < sizeNibbles; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ bits = readFewBits(s, 4); if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) { throw "Exuberant nibble"; } s.metaBlockLength |= bits << (i * 4); } } s.metaBlockLength++; if (s.inputEnd == 0) { s.isUncompressed = readFewBits(s, 1); } } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSymbol(tableGroup, tableIdx, s) { var /** number */ offset = tableGroup[tableIdx]; var /** number */ val = (s.accumulator32 >>> s.bitOffset); offset += val & 0xFF; var /** number */ bits = tableGroup[offset] >> 16; var /** number */ sym = tableGroup[offset] & 0xFFFF; if (bits <= 8) { s.bitOffset += bits; return sym; } offset += sym; var /** number */ mask = (1 << bits) - 1; offset += (val & mask) >>> 8; s.bitOffset += ((tableGroup[offset] >> 16) + 8); return tableGroup[offset] & 0xFFFF; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readBlockLength(tableGroup, tableIdx, s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ code = readSymbol(tableGroup, tableIdx, s); var /** number */ n = BLOCK_LENGTH_N_BITS[code]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); } /** * @param {!Int32Array} v * @param {number} index * @return {void} */ function moveToFront(v, index) { var /** number */ value = v[index]; for (; index > 0; index--) { v[index] = v[index - 1]; } v[0] = value; } /** * @param {!Int8Array} v * @param {number} vLen * @return {void} */ function inverseMoveToFrontTransform(v, vLen) { var /** !Int32Array */ mtf = new Int32Array(256); for (var /** number */ i = 0; i < 256; i++) { mtf[i] = i; } for (var /** number */ i = 0; i < vLen; i++) { var /** number */ index = v[i] & 0xFF; v[i] = mtf[index]; if (index != 0) { moveToFront(mtf, index); } } } /** * @param {!Int32Array} codeLengthCodeLengths * @param {number} numSymbols * @param {!Int32Array} codeLengths * @param {!State} s * @return {void} */ function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { var /** number */ symbol = 0; var /** number */ prevCodeLen = 8; var /** number */ repeat = 0; var /** number */ repeatCodeLen = 0; var /** number */ space = 32768; var /** !Int32Array */ table = new Int32Array(32 + 1); var /** number */ tableIdx = table.length - 1; buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); while (symbol < numSymbols && space > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 31; s.bitOffset += table[p] >> 16; var /** number */ codeLen = table[p] & 0xFFFF; if (codeLen < 16) { repeat = 0; codeLengths[symbol++] = codeLen; if (codeLen != 0) { prevCodeLen = codeLen; space -= 32768 >> codeLen; } } else { var /** number */ extraBits = codeLen - 14; var /** number */ newLen = 0; if (codeLen == 16) { newLen = prevCodeLen; } if (repeatCodeLen != newLen) { repeat = 0; repeatCodeLen = newLen; } var /** number */ oldRepeat = repeat; if (repeat > 0) { repeat -= 2; repeat <<= extraBits; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } repeat += readFewBits(s, extraBits) + 3; var /** number */ repeatDelta = repeat - oldRepeat; if (symbol + repeatDelta > numSymbols) { throw "symbol + repeatDelta > numSymbols"; } for (var /** number */ i = 0; i < repeatDelta; i++) { codeLengths[symbol++] = repeatCodeLen; } if (repeatCodeLen != 0) { space -= repeatDelta << (15 - repeatCodeLen); } } } if (space != 0) { throw "Unused space"; } codeLengths.fill(0, symbol, numSymbols); } /** * @param {!Int32Array} symbols * @param {number} length * @return {void} */ function checkDupes(symbols, length) { for (var /** number */ i = 0; i < length - 1; ++i) { for (var /** number */ j = i + 1; j < length; ++j) { if (symbols[i] == symbols[j]) { throw "Duplicate simple Huffman code symbol"; } } } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); var /** !Int32Array */ symbols = new Int32Array(4); var /** number */ maxBits = 1 + log2floor(alphabetSizeMax - 1); var /** number */ numSymbols = readFewBits(s, 2) + 1; for (var /** number */ i = 0; i < numSymbols; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ symbol = readFewBits(s, maxBits); if (symbol >= alphabetSizeLimit) { throw "Can't readHuffmanCode"; } symbols[i] = symbol; } checkDupes(symbols, numSymbols); var /** number */ histogramId = numSymbols; if (numSymbols == 4) { histogramId += readFewBits(s, 1); } switch(histogramId) { case 1: codeLengths[symbols[0]] = 1; break; case 2: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 1; break; case 3: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; break; case 4: codeLengths[symbols[0]] = 2; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; codeLengths[symbols[3]] = 2; break; case 5: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 3; codeLengths[symbols[3]] = 3; break; default: break; } return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeLimit * @param {number} skip * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); var /** !Int32Array */ codeLengthCodeLengths = new Int32Array(18); var /** number */ space = 32; var /** number */ numCodes = 0; for (var /** number */ i = skip; i < 18 && space > 0; i++) { var /** number */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 15; s.bitOffset += FIXED_TABLE[p] >> 16; var /** number */ v = FIXED_TABLE[p] & 0xFFFF; codeLengthCodeLengths[codeLenIdx] = v; if (v != 0) { space -= (32 >> v); numCodes++; } } if (space != 0 && numCodes != 1) { throw "Corrupted Huffman code histogram"; } readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ simpleCodeOrSkip = readFewBits(s, 2); if (simpleCodeOrSkip == 1) { return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); } else { return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); } } /** * @param {number} contextMapSize * @param {!Int8Array} contextMap * @param {!State} s * @return {number} */ function decodeContextMap(contextMapSize, contextMap, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } var /** number */ numTrees = decodeVarLenUnsignedByte(s) + 1; if (numTrees == 1) { contextMap.fill(0, 0, contextMapSize); return numTrees; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ useRleForZeros = readFewBits(s, 1); var /** number */ maxRunLengthPrefix = 0; if (useRleForZeros != 0) { maxRunLengthPrefix = readFewBits(s, 4) + 1; } var /** number */ alphabetSize = numTrees + maxRunLengthPrefix; var /** number */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; var /** !Int32Array */ table = new Int32Array(tableSize + 1); var /** number */ tableIdx = table.length - 1; readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); for (var /** number */ i = 0; i < contextMapSize; ) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ code = readSymbol(table, tableIdx, s); if (code == 0) { contextMap[i] = 0; i++; } else if (code <= maxRunLengthPrefix) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ reps = (1 << code) + readFewBits(s, code); while (reps != 0) { if (i >= contextMapSize) { throw "Corrupted context map"; } contextMap[i] = 0; i++; reps--; } } else { contextMap[i] = (code - maxRunLengthPrefix); i++; } } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) == 1) { inverseMoveToFrontTransform(contextMap, contextMapSize); } return numTrees; } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { var /** !Int32Array */ ringBuffers = s.rings; var /** number */ offset = 4 + treeType * 2; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); var /** number */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); if (blockType == 1) { blockType = ringBuffers[offset + 1] + 1; } else if (blockType == 0) { blockType = ringBuffers[offset]; } else { blockType -= 2; } if (blockType >= numBlockTypes) { blockType -= numBlockTypes; } ringBuffers[offset] = ringBuffers[offset + 1]; ringBuffers[offset + 1] = blockType; return result; } /** * @param {!State} s * @return {void} */ function decodeLiteralBlockSwitch(s) { s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); var /** number */ literalBlockType = s.rings[5]; s.contextMapSlice = literalBlockType << 6; s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; var /** number */ contextMode = s.contextModes[literalBlockType]; s.contextLookupOffset1 = contextMode << 9; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; } /** * @param {!State} s * @return {void} */ function decodeCommandBlockSwitch(s) { s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); s.commandTreeIdx = s.rings[7]; } /** * @param {!State} s * @return {void} */ function decodeDistanceBlockSwitch(s) { s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); s.distContextMapSlice = s.rings[9] << 2; } /** * @param {!State} s * @return {void} */ function maybeReallocateRingBuffer(s) { var /** number */ newSize = s.maxRingBufferSize; if (newSize > s.expectedTotalSize) { var /** number */ minimalNewSize = s.expectedTotalSize; while ((newSize >> 1) > minimalNewSize) { newSize >>= 1; } if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { newSize = 16384; } } if (newSize <= s.ringBufferSize) { return; } var /** number */ ringBufferSizeWithSlack = newSize + 37; var /** !Int8Array */ newBuffer = new Int8Array(ringBufferSizeWithSlack); if (s.ringBuffer.length != 0) { newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0); } s.ringBuffer = newBuffer; s.ringBufferSize = newSize; } /** * @param {!State} s * @return {void} */ function readNextMetablockHeader(s) { if (s.inputEnd != 0) { s.nextRunningState = 10; s.runningState = 12; return; } s.literalTreeGroup = new Int32Array(0); s.commandTreeGroup = new Int32Array(0); s.distanceTreeGroup = new Int32Array(0); if (s.halfOffset > 2030) { doReadMoreInput(s); } decodeMetaBlockLength(s); if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) { return; } if ((s.isUncompressed != 0) || (s.isMetadata != 0)) { jumpToByteBoundary(s); s.runningState = (s.isMetadata != 0) ? 5 : 6; } else { s.runningState = 3; } if (s.isMetadata != 0) { return; } s.expectedTotalSize += s.metaBlockLength; if (s.expectedTotalSize > 1 << 30) { s.expectedTotalSize = 1 << 30; } if (s.ringBufferSize < s.maxRingBufferSize) { maybeReallocateRingBuffer(s); } } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function readMetablockPartition(s, treeType, numBlockTypes) { var /** number */ offset = s.blockTrees[2 * treeType]; if (numBlockTypes <= 1) { s.blockTrees[2 * treeType + 1] = offset; s.blockTrees[2 * treeType + 2] = offset; return 1 << 28; } var /** number */ blockTypeAlphabetSize = numBlockTypes + 2; offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); s.blockTrees[2 * treeType + 1] = offset; var /** number */ blockLengthAlphabetSize = 26; offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); s.blockTrees[2 * treeType + 2] = offset; return readBlockLength(s.blockTrees, 2 * treeType + 1, s); } /** * @param {!State} s * @param {number} alphabetSizeLimit * @return {void} */ function calculateDistanceLut(s, alphabetSizeLimit) { var /** !Int8Array */ distExtraBits = s.distExtraBits; var /** !Int32Array */ distOffset = s.distOffset; var /** number */ npostfix = s.distancePostfixBits; var /** number */ ndirect = s.numDirectDistanceCodes; var /** number */ postfix = 1 << npostfix; var /** number */ bits = 1; var /** number */ half = 0; var /** number */ i = 16; for (var /** number */ j = 0; j < ndirect; ++j) { distExtraBits[i] = 0; distOffset[i] = j + 1; ++i; } while (i < alphabetSizeLimit) { var /** number */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; for (var /** number */ j = 0; j < postfix; ++j) { distExtraBits[i] = bits; distOffset[i] = base + j; ++i; } bits = bits + half; half = half ^ 1; } } /** * @param {!State} s * @return {void} */ function readMetablockHuffmanCodesAndContextMaps(s) { s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.distancePostfixBits = readFewBits(s, 2); s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; s.distancePostfixMask = (1 << s.distancePostfixBits) - 1; s.contextModes = new Int8Array(s.numLiteralBlockTypes); for (var /** number */ i = 0; i < s.numLiteralBlockTypes; ) { var /** number */ limit = min(i + 96, s.numLiteralBlockTypes); for (; i < limit; ++i) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.contextModes[i] = readFewBits(s, 2); } if (s.halfOffset > 2030) { doReadMoreInput(s); } } s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); var /** number */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); s.trivialLiteralContext = 1; for (var /** number */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { if (s.contextMap[j] != j >> 6) { s.trivialLiteralContext = 0; break; } } s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); var /** number */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); var /** number */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); var /** number */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; if (s.isLargeWindow == 1) { distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); } s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); calculateDistanceLut(s, distanceAlphabetSizeLimit); s.contextMapSlice = 0; s.distContextMapSlice = 0; s.contextLookupOffset1 = s.contextModes[0] * 512; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; s.literalTreeIdx = 0; s.commandTreeIdx = 0; s.rings[4] = 1; s.rings[5] = 0; s.rings[6] = 1; s.rings[7] = 0; s.rings[8] = 1; s.rings[9] = 0; } /** * @param {!State} s * @return {void} */ function copyUncompressedData(s) { var /** !Int8Array */ ringBuffer = s.ringBuffer; if (s.metaBlockLength <= 0) { reload(s); s.runningState = 2; return; } var /** number */ chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength); copyBytes(s, ringBuffer, s.pos, chunkLength); s.metaBlockLength -= chunkLength; s.pos += chunkLength; if (s.pos == s.ringBufferSize) { s.nextRunningState = 6; s.runningState = 12; return; } reload(s); s.runningState = 2; } /** * @param {!State} s * @return {number} */ function writeRingBuffer(s) { var /** number */ toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); if (toWrite != 0) { s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); s.outputUsed += toWrite; s.ringBufferBytesWritten += toWrite; } if (s.outputUsed < s.outputLength) { return 1; } else { return 0; } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {number} n * @param {!State} s * @return {!Int32Array} */ function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { var /** number */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; var /** !Int32Array */ group = new Int32Array(n + n * maxTableSize); var /** number */ next = n; for (var /** number */ i = 0; i < n; ++i) { group[i] = next; next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); } return group; } /** * @param {!State} s * @return {number} */ function calculateFence(s) { var /** number */ result = s.ringBufferSize; if (s.isEager != 0) { result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); } return result; } /** * @param {!State} s * @return {void} */ function decompress(s) { if (s.runningState == 0) { throw "Can't decompress until initialized"; } if (s.runningState == 11) { throw "Can't decompress after close"; } if (s.runningState == 1) { var /** number */ windowBits = decodeWindowBits(s); if (windowBits == -1) { throw "Invalid 'windowBits' code"; } s.maxRingBufferSize = 1 << windowBits; s.maxBackwardDistance = s.maxRingBufferSize - 16; s.runningState = 2; } var /** number */ fence = calculateFence(s); var /** number */ ringBufferMask = s.ringBufferSize - 1; var /** !Int8Array */ ringBuffer = s.ringBuffer; while (s.runningState != 10) { switch(s.runningState) { case 2: if (s.metaBlockLength < 0) { throw "Invalid metablock length"; } readNextMetablockHeader(s); fence = calculateFence(s); ringBufferMask = s.ringBufferSize - 1; ringBuffer = s.ringBuffer; continue; case 3: readMetablockHuffmanCodesAndContextMaps(s); s.runningState = 4; case 4: if (s.metaBlockLength <= 0) { s.runningState = 2; continue; } if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.commandBlockLength == 0) { decodeCommandBlockSwitch(s); } s.commandBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; var /** number */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; var /** number */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; var /** number */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; s.distanceCode = CMD_LOOKUP[cmdCode + 3]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ extraBits = insertAndCopyExtraBits & 0xFF; s.insertLength = insertLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ extraBits = insertAndCopyExtraBits >> 8; s.copyLength = copyLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); s.j = 0; s.runningState = 7; case 7: if (s.trivialLiteralContext != 0) { while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength == 0) { decodeLiteralBlockSwitch(s); } s.literalBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } else { var /** number */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; var /** number */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength == 0) { decodeLiteralBlockSwitch(s); } var /** number */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; var /** number */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; s.literalBlockLength--; prevByte2 = prevByte1; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); ringBuffer[s.pos] = prevByte1; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } if (s.runningState != 7) { continue; } s.metaBlockLength -= s.insertLength; if (s.metaBlockLength <= 0) { s.runningState = 4; continue; } var /** number */ distanceCode = s.distanceCode; if (distanceCode < 0) { s.distance = s.rings[s.distRbIdx]; } else { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.distanceBlockLength == 0) { decodeDistanceBlockSwitch(s); } s.distanceBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); if (distanceCode < 16) { var /** number */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; if (s.distance < 0) { throw "Negative distance"; } } else { var /** number */ extraBits = s.distExtraBits[distanceCode]; var /** number */ bits; if (s.bitOffset + extraBits <= 32) { bits = readFewBits(s, extraBits); } else { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } bits = ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); } s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); } } if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { s.maxDistance = s.pos; } else { s.maxDistance = s.maxBackwardDistance; } if (s.distance > s.maxDistance) { s.runningState = 9; continue; } if (distanceCode > 0) { s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; } if (s.copyLength > s.metaBlockLength) { throw "Invalid backward reference"; } s.j = 0; s.runningState = 8; case 8: var /** number */ src = (s.pos - s.distance) & ringBufferMask; var /** number */ dst = s.pos; var /** number */ copyLength = s.copyLength - s.j; var /** number */ srcEnd = src + copyLength; var /** number */ dstEnd = dst + copyLength; if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { for (var /** number */ k = 0; k < copyLength; k += 4) { ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; } } else { ringBuffer.copyWithin(dst, src, srcEnd); } s.j += copyLength; s.metaBlockLength -= copyLength; s.pos += copyLength; } else { for (; s.j < s.copyLength; ) { ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; s.metaBlockLength--; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 8; s.runningState = 12; break; } } } if (s.runningState == 8) { s.runningState = 4; } continue; case 9: if (s.distance > 0x7FFFFFFC) { throw "Invalid backward reference"; } if (s.copyLength >= 4 && s.copyLength <= 24) { var /** number */ offset = DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength]; var /** number */ wordId = s.distance - s.maxDistance - 1; var /** number */ shift = DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength]; var /** number */ mask = (1 << shift) - 1; var /** number */ wordIdx = wordId & mask; var /** number */ transformIdx = wordId >>> shift; offset += wordIdx * s.copyLength; if (transformIdx < 121) { var /** number */ len = transformDictionaryWord(ringBuffer, s.pos, DICTIONARY_DATA, offset, s.copyLength, RFC_TRANSFORMS, transformIdx); s.pos += len; s.metaBlockLength -= len; if (s.pos >= fence) { s.nextRunningState = 4; s.runningState = 12; continue; } } else { throw "Invalid backward reference"; } } else { throw "Invalid backward reference"; } s.runningState = 4; continue; case 5: while (s.metaBlockLength > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } readFewBits(s, 8); s.metaBlockLength--; } s.runningState = 2; continue; case 6: copyUncompressedData(s); continue; case 12: s.ringBufferBytesReady = min(s.pos, s.ringBufferSize); s.runningState = 13; case 13: if (writeRingBuffer(s) == 0) { return; } if (s.pos >= s.maxBackwardDistance) { s.maxDistance = s.maxBackwardDistance; } if (s.pos >= s.ringBufferSize) { if (s.pos > s.ringBufferSize) { ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); } s.pos &= ringBufferMask; s.ringBufferBytesWritten = 0; } s.runningState = s.nextRunningState; continue; default: throw "Unexpected state " + s.runningState; } } if (s.runningState == 10) { if (s.metaBlockLength < 0) { throw "Invalid metablock length"; } jumpToByteBoundary(s); checkHealth(s, 1); } } /** * @constructor * @param {number} numTransforms * @param {number} prefixSuffixLen * @param {number} prefixSuffixCount * @struct */ function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { /** @type {!number} */ this.numTransforms = 0; /** @type {!Int32Array} */ this.triplets = new Int32Array(0); /** @type {!Int8Array} */ this.prefixSuffixStorage = new Int8Array(0); /** @type {!Int32Array} */ this.prefixSuffixHeads = new Int32Array(0); /** @type {!Int16Array} */ this.params = new Int16Array(0); this.numTransforms = numTransforms; this.triplets = new Int32Array(numTransforms * 3); this.params = new Int16Array(numTransforms); this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); } var RFC_TRANSFORMS = new Transforms(121, 167, 50); /** * @param {!Int8Array} prefixSuffix * @param {!Int32Array} prefixSuffixHeads * @param {!Int32Array} transforms * @param {!string} prefixSuffixSrc * @param {!string} transformsSrc * @return {void} */ function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { var /** number */ n = prefixSuffixSrc.length; var /** number */ index = 1; var /** number */ j = 0; for (var /** number */ i = 0; i < n; ++i) { var /** number */ c = prefixSuffixSrc.charCodeAt(i); if (c == 35) { prefixSuffixHeads[index++] = j; } else { prefixSuffix[j++] = c; } } for (var /** number */ i = 0; i < 363; ++i) { transforms[i] = transformsSrc.charCodeAt(i) - 32; } } { unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, "# #s #, #e #.# the #.com/#\u00C2\u00A0# of # and # in # to #\"#\">#\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #=\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #", " !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K"); } /** * @param {!Int8Array} dst * @param {number} dstOffset * @param {!Int8Array} src * @param {number} srcOffset * @param {number} len * @param {!Transforms} transforms * @param {number} transformIndex * @return {number} */ function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { var /** number */ offset = dstOffset; var /** !Int32Array */ triplets = transforms.triplets; var /** !Int8Array */ prefixSuffixStorage = transforms.prefixSuffixStorage; var /** !Int32Array */ prefixSuffixHeads = transforms.prefixSuffixHeads; var /** number */ transformOffset = 3 * transformIndex; var /** number */ prefixIdx = triplets[transformOffset]; var /** number */ transformType = triplets[transformOffset + 1]; var /** number */ suffixIdx = triplets[transformOffset + 2]; var /** number */ prefix = prefixSuffixHeads[prefixIdx]; var /** number */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; var /** number */ suffix = prefixSuffixHeads[suffixIdx]; var /** number */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; var /** number */ omitFirst = transformType - 11; var /** number */ omitLast = transformType - 0; if (omitFirst < 1 || omitFirst > 9) { omitFirst = 0; } if (omitLast < 1 || omitLast > 9) { omitLast = 0; } while (prefix != prefixEnd) { dst[offset++] = prefixSuffixStorage[prefix++]; } if (omitFirst > len) { omitFirst = len; } srcOffset += omitFirst; len -= omitFirst; len -= omitLast; var /** number */ i = len; while (i > 0) { dst[offset++] = src[srcOffset++]; i--; } if (transformType == 10 || transformType == 11) { var /** number */ uppercaseOffset = offset - len; if (transformType == 10) { len = 1; } while (len > 0) { var /** number */ c0 = dst[uppercaseOffset] & 0xFF; if (c0 < 0xC0) { if (c0 >= 97 && c0 <= 122) { dst[uppercaseOffset] ^= 32; } uppercaseOffset += 1; len -= 1; } else if (c0 < 0xE0) { dst[uppercaseOffset + 1] ^= 32; uppercaseOffset += 2; len -= 2; } else { dst[uppercaseOffset + 2] ^= 5; uppercaseOffset += 3; len -= 3; } } } else if (transformType == 21 || transformType == 22) { var /** number */ shiftOffset = offset - len; var /** number */ param = transforms.params[transformIndex]; var /** number */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); while (len > 0) { var /** number */ step = 1; var /** number */ c0 = dst[shiftOffset] & 0xFF; if (c0 < 0x80) { scalar += c0; dst[shiftOffset] = (scalar & 0x7F); } else if (c0 < 0xC0) { } else if (c0 < 0xE0) { if (len >= 2) { var /** number */ c1 = dst[shiftOffset + 1]; scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); step = 2; } else { step = len; } } else if (c0 < 0xF0) { if (len >= 3) { var /** number */ c1 = dst[shiftOffset + 1]; var /** number */ c2 = dst[shiftOffset + 2]; scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); step = 3; } else { step = len; } } else if (c0 < 0xF8) { if (len >= 4) { var /** number */ c1 = dst[shiftOffset + 1]; var /** number */ c2 = dst[shiftOffset + 2]; var /** number */ c3 = dst[shiftOffset + 3]; scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); step = 4; } else { step = len; } } shiftOffset += step; len -= step; if (transformType == 21) { len = 0; } } } while (suffix != suffixEnd) { dst[offset++] = prefixSuffixStorage[suffix++]; } return offset - dstOffset; } /** * @param {number} key * @param {number} len * @return {number} */ function getNextKey(key, len) { var /** number */ step = 1 << (len - 1); while ((key & step) != 0) { step >>= 1; } return (key & (step - 1)) + step; } /** * @param {!Int32Array} table * @param {number} offset * @param {number} step * @param {number} end * @param {number} item * @return {void} */ function replicateValue(table, offset, step, end, item) { do { end -= step; table[offset + end] = item; } while (end > 0); } /** * @param {!Int32Array} count * @param {number} len * @param {number} rootBits * @return {number} */ function nextTableBitSize(count, len, rootBits) { var /** number */ left = 1 << (len - rootBits); while (len < 15) { left -= count[len]; if (left <= 0) { break; } len++; left <<= 1; } return len - rootBits; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {number} rootBits * @param {!Int32Array} codeLengths * @param {number} codeLengthsSize * @return {number} */ function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { var /** number */ tableOffset = tableGroup[tableIdx]; var /** number */ key; var /** !Int32Array */ sorted = new Int32Array(codeLengthsSize); var /** !Int32Array */ count = new Int32Array(16); var /** !Int32Array */ offset = new Int32Array(16); var /** number */ symbol; for (symbol = 0; symbol < codeLengthsSize; symbol++) { count[codeLengths[symbol]]++; } offset[1] = 0; for (var /** number */ len = 1; len < 15; len++) { offset[len + 1] = offset[len] + count[len]; } for (symbol = 0; symbol < codeLengthsSize; symbol++) { if (codeLengths[symbol] != 0) { sorted[offset[codeLengths[symbol]]++] = symbol; } } var /** number */ tableBits = rootBits; var /** number */ tableSize = 1 << tableBits; var /** number */ totalSize = tableSize; if (offset[15] == 1) { for (key = 0; key < totalSize; key++) { tableGroup[tableOffset + key] = sorted[0]; } return totalSize; } key = 0; symbol = 0; for (var /** number */ len = 1, step = 2; len <= rootBits; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); key = getNextKey(key, len); } } var /** number */ mask = totalSize - 1; var /** number */ low = -1; var /** number */ currentOffset = tableOffset; for (var /** number */ len = rootBits + 1, step = 2; len <= 15; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { if ((key & mask) != low) { currentOffset += tableSize; tableBits = nextTableBitSize(count, len, rootBits); tableSize = 1 << tableBits; totalSize += tableSize; low = key & mask; tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); } replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); key = getNextKey(key, len); } } return totalSize; } /** * @param {!State} s * @return {void} */ function doReadMoreInput(s) { if (s.endOfStreamReached != 0) { if (halfAvailable(s) >= -2) { return; } throw "No more input"; } var /** number */ readOffset = s.halfOffset << 1; var /** number */ bytesInBuffer = 4096 - readOffset; s.byteBuffer.copyWithin(0, readOffset, 4096); s.halfOffset = 0; while (bytesInBuffer < 4096) { var /** number */ spaceLeft = 4096 - bytesInBuffer; var /** number */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); if (len <= 0) { s.endOfStreamReached = 1; s.tailBytes = bytesInBuffer; bytesInBuffer += 1; break; } bytesInBuffer += len; } bytesToNibbles(s, bytesInBuffer); } /** * @param {!State} s * @param {number} endOfStream * @return {void} */ function checkHealth(s, endOfStream) { if (s.endOfStreamReached == 0) { return; } var /** number */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; if (byteOffset > s.tailBytes) { throw "Read after end"; } if ((endOfStream != 0) && (byteOffset != s.tailBytes)) { throw "Unused bytes after end"; } } /** * @param {!State} s * @return {void} */ function assertAccumulatorHealthy(s) { if (s.bitOffset > 32) { throw "Accumulator underloaded: " + s.bitOffset; } } /** * @param {!State} s * @param {number} n * @return {number} */ function readFewBits(s, n) { var /** number */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); s.bitOffset += n; return val; } /** * @param {!State} s * @param {number} n * @return {number} */ function readManyBits(s, n) { var /** number */ low = readFewBits(s, 16); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; return low | (readFewBits(s, n - 16) << 16); } /** * @param {!State} s * @return {void} */ function initBitReader(s) { s.byteBuffer = new Int8Array(4160); s.accumulator32 = 0; s.shortBuffer = new Int16Array(2080); s.bitOffset = 32; s.halfOffset = 2048; s.endOfStreamReached = 0; prepare(s); } /** * @param {!State} s * @return {void} */ function prepare(s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } checkHealth(s, 0); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } /** * @param {!State} s * @return {void} */ function reload(s) { if (s.bitOffset == 32) { prepare(s); } } /** * @param {!State} s * @return {void} */ function jumpToByteBoundary(s) { var /** number */ padding = (32 - s.bitOffset) & 7; if (padding != 0) { var /** number */ paddingBits = readFewBits(s, padding); if (paddingBits != 0) { throw "Corrupted padding bits"; } } } /** * @param {!State} s * @return {number} */ function halfAvailable(s) { var /** number */ limit = 2048; if (s.endOfStreamReached != 0) { limit = (s.tailBytes + 1) >> 1; } return limit - s.halfOffset; } /** * @param {!State} s * @param {!Int8Array} data * @param {number} offset * @param {number} length * @return {void} */ function copyBytes(s, data, offset, length) { if ((s.bitOffset & 7) != 0) { throw "Unaligned copyBytes"; } while ((s.bitOffset != 32) && (length != 0)) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } if (length == 0) { return; } var /** number */ copyNibbles = min(halfAvailable(s), length >> 1); if (copyNibbles > 0) { var /** number */ readOffset = s.halfOffset << 1; var /** number */ delta = copyNibbles << 1; data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); offset += delta; length -= delta; s.halfOffset += copyNibbles; } if (length == 0) { return; } if (halfAvailable(s) > 0) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } while (length != 0) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } checkHealth(s, 0); return; } while (length > 0) { var /** number */ len = readInput(s.input, data, offset, length); if (len == -1) { throw "Unexpected end of input"; } offset += len; length -= len; } } /** * @param {!State} s * @param {number} byteLen * @return {void} */ function bytesToNibbles(s, byteLen) { var /** !Int8Array */ byteBuffer = s.byteBuffer; var /** number */ halfLen = byteLen >> 1; var /** !Int16Array */ shortBuffer = s.shortBuffer; for (var /** number */ i = 0; i < halfLen; ++i) { shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); } } var LOOKUP = new Int32Array(2048); /** * @param {!Int32Array} lookup * @param {!string} map * @param {!string} rle * @return {void} */ function unpackLookupTable(lookup, map, rle) { for (var /** number */ i = 0; i < 256; ++i) { lookup[i] = i & 0x3F; lookup[512 + i] = i >> 2; lookup[1792 + i] = 2 + (i >> 6); } for (var /** number */ i = 0; i < 128; ++i) { lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); } for (var /** number */ i = 0; i < 64; ++i) { lookup[1152 + i] = i & 1; lookup[1216 + i] = 2 + (i & 1); } var /** number */ offset = 1280; for (var /** number */ k = 0; k < 19; ++k) { var /** number */ value = k & 3; var /** number */ rep = rle.charCodeAt(k) - 32; for (var /** number */ i = 0; i < rep; ++i) { lookup[offset++] = value; } } for (var /** number */ i = 0; i < 16; ++i) { lookup[1792 + i] = 1; lookup[2032 + i] = 6; } lookup[1792] = 0; lookup[2047] = 7; for (var /** number */ i = 0; i < 256; ++i) { lookup[1536 + i] = lookup[1792 + i] << 3; } } { unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \u0081 @"); } /** * @constructor * @struct */ function State() { /** @type {!Int8Array} */ this.ringBuffer = new Int8Array(0); /** @type {!Int8Array} */ this.contextModes = new Int8Array(0); /** @type {!Int8Array} */ this.contextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distContextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distExtraBits = new Int8Array(0); /** @type {!Int8Array} */ this.output = new Int8Array(0); /** @type {!Int8Array} */ this.byteBuffer = new Int8Array(0); /** @type {!Int16Array} */ this.shortBuffer = new Int16Array(0); /** @type {!Int32Array} */ this.intBuffer = new Int32Array(0); /** @type {!Int32Array} */ this.rings = new Int32Array(0); /** @type {!Int32Array} */ this.blockTrees = new Int32Array(0); /** @type {!Int32Array} */ this.literalTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.commandTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distanceTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distOffset = new Int32Array(0); /** @type {!number} */ this.runningState = 0; /** @type {!number} */ this.nextRunningState = 0; /** @type {!number} */ this.accumulator32 = 0; /** @type {!number} */ this.bitOffset = 0; /** @type {!number} */ this.halfOffset = 0; /** @type {!number} */ this.tailBytes = 0; /** @type {!number} */ this.endOfStreamReached = 0; /** @type {!number} */ this.metaBlockLength = 0; /** @type {!number} */ this.inputEnd = 0; /** @type {!number} */ this.isUncompressed = 0; /** @type {!number} */ this.isMetadata = 0; /** @type {!number} */ this.literalBlockLength = 0; /** @type {!number} */ this.numLiteralBlockTypes = 0; /** @type {!number} */ this.commandBlockLength = 0; /** @type {!number} */ this.numCommandBlockTypes = 0; /** @type {!number} */ this.distanceBlockLength = 0; /** @type {!number} */ this.numDistanceBlockTypes = 0; /** @type {!number} */ this.pos = 0; /** @type {!number} */ this.maxDistance = 0; /** @type {!number} */ this.distRbIdx = 0; /** @type {!number} */ this.trivialLiteralContext = 0; /** @type {!number} */ this.literalTreeIdx = 0; /** @type {!number} */ this.commandTreeIdx = 0; /** @type {!number} */ this.j = 0; /** @type {!number} */ this.insertLength = 0; /** @type {!number} */ this.contextMapSlice = 0; /** @type {!number} */ this.distContextMapSlice = 0; /** @type {!number} */ this.contextLookupOffset1 = 0; /** @type {!number} */ this.contextLookupOffset2 = 0; /** @type {!number} */ this.distanceCode = 0; /** @type {!number} */ this.numDirectDistanceCodes = 0; /** @type {!number} */ this.distancePostfixMask = 0; /** @type {!number} */ this.distancePostfixBits = 0; /** @type {!number} */ this.distance = 0; /** @type {!number} */ this.copyLength = 0; /** @type {!number} */ this.maxBackwardDistance = 0; /** @type {!number} */ this.maxRingBufferSize = 0; /** @type {!number} */ this.ringBufferSize = 0; /** @type {!number} */ this.expectedTotalSize = 0; /** @type {!number} */ this.outputOffset = 0; /** @type {!number} */ this.outputLength = 0; /** @type {!number} */ this.outputUsed = 0; /** @type {!number} */ this.ringBufferBytesWritten = 0; /** @type {!number} */ this.ringBufferBytesReady = 0; /** @type {!number} */ this.isEager = 0; /** @type {!number} */ this.isLargeWindow = 0; /** @type {!InputStream|null} */ this.input = null; this.ringBuffer = new Int8Array(0); this.rings = new Int32Array(10); this.rings[0] = 16; this.rings[1] = 15; this.rings[2] = 11; this.rings[3] = 4; } /** * @param {!Int8Array} dictionary * @param {!string} data0 * @param {!string} data1 * @param {!string} skipFlip * @return {void} */ function unpackDictionaryData(dictionary, data0, data1, skipFlip) { var /** !Int8Array */ dict = toUsAsciiBytes(data0 + data1); if (dict.length != dictionary.length) { throw "Corrupted brotli dictionary"; } var /** number */ offset = 0; var /** number */ n = skipFlip.length; for (var /** number */ i = 0; i < n; i += 2) { var /** number */ skip = skipFlip.charCodeAt(i) - 36; var /** number */ flip = skipFlip.charCodeAt(i + 1) - 36; offset += skip; for (var /** number */ j = 0; j < flip; ++j) { dict[offset] |= 0x80; offset++; } } dictionary.set(dict); } { var /** !Int8Array */ dictionary = new Int8Array(122784); unpackDictionaryData(dictionary, "timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0\"stopelseliestourpack.gifpastcss?graymean>rideshotlatesaidroadvar feeljohnrickportfast'UA-deadpoorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml\"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid=\"sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnearironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees

json', 'contT21: RSSloopasiamoon

soulLINEfortcartT14:

80px!--<9px;T04:mike:46ZniceinchYorkricezh:d'));puremageparatonebond:37Z_of_']);000,zh:gtankyardbowlbush:56ZJava30px\n|}\n%C3%:34ZjeffEXPIcashvisagolfsnowzh:iquer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;\n}\nexit:35Zvarsbeat'});diet999;anne}}sonyguysfuckpipe|-\n!002)ndow[1];[];\nLog salt\r\n\t\tbangtrimbath){\r\n00px\n});ko:lfeesad>\rs:// [];tollplug(){\n{\r\n .js'200pdualboat.JPG);\n}quot);\n\n');\n\r\n}\r201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comomC!sesteestaperotodohacecadaaC1obiendC-aasC-vidacasootroforosolootracualdijosidograntipotemadebealgoquC)estonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasiP7P0P=P0P>PP>Q\u0002P8P7P=P>P4P>Q\u0002P>P6P5P>P=P8Q\u0005P\u001DP0P5P5P1Q\u000BPP2Q\u000BP2P>P\u001DP>P>P1P\u001FP>P;P8P=P8P P$P\u001DP5P\u001CQ\u000BQ\u0002Q\u000BP\u001EP=P8Pthing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue\"crossspentblogsbox\">notedleavechinasizesguest

robotheavytrue,sevengrandcrimesignsawaredancephase>\n\n\r\nname=diegopage swiss-->\n\n#fff;\">Log.com\"treatsheet) && 14px;sleepntentfiledja:c\u0003id=\"cName\"worseshots-box-delta\n<bears:48Z spendbakershops= \"\";php\">ction13px;brianhellosize=o=%2F joinmaybe, fjsimg\" \")[0]MTopBType\"newlyDanskczechtrailknowsfaq\">zh-cn10);\n-1\");type=bluestrulydavis.js';>\r\n\r\nform jesus100% menu.\r\n\t\r\nwalesrisksumentddingb-likteachgif\" vegasdanskeestishqipsuomisobredesdeentretodospuedeaC1osestC!tienehastaotrospartedondenuevohacerformamismomejormundoaquC-dC-assC3loayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspaC-snuevasaludforosmedioquienmesespoderchileserC!vecesdecirjosC)estarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegocC3moenerojuegoperC:haberestoynuncamujervalorfueralibrogustaigualvotoscasosguC-apuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasleC3nplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacenC!readiscopedrocercapuedapapelmenorC:tilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoniC1oquedapasarbancohijosviajepabloC)stevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaallC-jovendichaestantalessalirsuelopesosfinesllamabuscoC)stalleganegroplazahumorpagarjuntadobleislasbolsabaC1ohablaluchaC\u0001readicenjugarnotasvalleallC!cargadolorabajoestC)gustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas"domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo\">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother\" id=\"marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo\" bottomlist\">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed courseAbout island: The dialoghousesBEGIN MexicostartscentreheightaddingIslandassetsEmpireSchooleffortdirectnearlymanualSelect.\n\nOnejoinedmenu\">PhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunitedbeyond-scaleacceptservedmarineFootercamera\n_form\"leavesstress\" />\r\n.gif\" onloadloaderOxfordsistersurvivlistenfemaleDesignsize=\"appealtext\">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople
wonderpricesturned|| {};main\">inlinesundaywrap\">failedcensusminutebeaconquotes150px|estateremoteemail\"linkedright;signalformal1.htmlsignupprincefloat:.png\" forum.AccesspaperssoundsextendHeightsliderUTF-8\"& Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome\">headerensurebranchpiecesblock;statedtop\">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline\">body\">\n* TheThoughseeingjerseyNews\nSystem DavidcancertablesprovedApril reallydriveritem\">more\">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php\" assumelayerswilsonstoresreliefswedenCustomeasily your String\n\nWhiltaylorclear:resortfrenchthough\") + \"buyingbrandsMembername\">oppingsector5px;\">vspacepostermajor coffeemartinmaturehappenkansaslink\">Images=falsewhile hspace0& \n\nIn powerPolski-colorjordanBottomStart -count2.htmlnews\">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml\" rights.html-blockregExp:hoverwithinvirginphones\rusing \n\tvar >');\n\t\n\nbahasabrasilgalegomagyarpolskisrpskiX1X/Y\u0008d8-f\u0016\u0007g.\u0000d=\u0013g9\u0001i+\u0014d?!f\u0001/d8-e\u001B=f\u0008\u0011d;,d8\u0000d8*e\u0005,e\u000F8g.!g\u0010\u0006h.:e\u001D\u001Be\u000F/d;%f\u001C\re\n!f\u00176i\u00174d8*d::d:'e\u0013\u0001h\u0007*e71d<\u0001d8\u001Af\u001F%g\u001C\u000Be7%d=\u001Ch\u0001\u0014g3;f2!f\u001C\tg=\u0011g+\u0019f\t\u0000f\u001C\th/\u0004h.:d8-e?\u0003f\u0016\u0007g+ g\u0014(f\u00087i&\u0016i!5d=\u001Ch\u0000\u0005f\n\u0000f\u001C/i\u0017.i\"\u0018g\u001B8e\u00053d8\u000Bh==f\u0010\u001Cg4\"d=?g\u0014(h=/d;6e\u001C(g:?d8;i\"\u0018h5\u0004f\u0016\u0019h'\u0006i\"\u0011e\u001B\u001Ee$\rf3(e\u0006\u000Cg=\u0011g;\u001Cf\u00146h\u0017\u000Fe\u0006\u0005e.9f\u000E(h\r\u0010e8\u0002e\u001C:f6\u0008f\u0001/g):i\u00174e\u000F\u0011e8\u0003d;\u0000d9\u0008e%=e\u000F\u000Bg\u0014\u001Ff4;e\u001B>g\t\u0007e\u000F\u0011e1\u0015e&\u0002f\u001E\u001Cf\t\u000Bf\u001C:f\u00160i\u0017;f\u001C\u0000f\u00160f\u00169e<\u000Fe\u000C\u0017d:,f\u000F\u0010d>\u001Be\u00053d:\u000Ef\u001B4e$\u001Ah?\u0019d8*g3;g;\u001Fg\u001F%i\u0001\u0013f88f\u0008\u000Fe9?e\u0011\ne\u00056d;\u0016e\u000F\u0011h!(e.\te\u0005(g,,d8\u0000d<\u001Ae\u0011\u0018h?\u001Bh!\u000Cg\u00029e\u0007;g\t\u0008f\u001D\u0003g\u00145e-\u0010d8\u0016g\u0015\u000Ch.>h.!e\u0005\rh49f\u0015\u0019h\u00022e\n e\u0005%f4;e\n(d;\u0016d;,e\u0015\u0006e\u0013\u0001e\r\u001Ae.\"g\u000E0e\u001C(d8\nf57e&\u0002d=\u0015e72g;\u000Fg\u0015\u0019h(\u0000h/&g;\u0006g$>e\u000C:g\u0019;e=\u0015f\u001C,g+\u0019i\u001C\u0000h&\u0001d;7f f\u000E%e\u001B=e.6e;:h.>f\u001C\u000Be\u000F\u000Bi\u0018\u0005h/;f3\u0015e>\u000Bd=\rg=.g;\u000Ff5\u000Ei\u0000\tf\u000B)h?\u0019f 7e=\u0013e\t\re\u0008\u0006g1;f\u000E\u0012h!\u000Ce\u001B d8:d:$f\u0018\u0013f\u001C\u0000e\u0010\u000Ei\u001F3d9\u0010d8\rh\u0003=i\u0000\u001Ah?\u0007h!\u000Cd8\u001Ag'\u0011f\n\u0000e\u000F/h\u0003=h.>e$\u0007e\u0010\u0008d=\u001Ce$'e.6g$>d<\u001Ag \u0014g)6d8\u0013d8\u001Ae\u0005(i\u0003(i!9g\u001B.h?\u0019i\u0007\u000Ch?\u0018f\u0018/e<\u0000e'\u000Bf\u0003\u0005e\u00065g\u00145h\u0004\u0011f\u0016\u0007d;6e\u0013\u0001g\t\u000Ce8.e\n)f\u0016\u0007e\u000C\u0016h5\u0004f:\u0010e$'e-&e-&d9 e\u001C0e\u001D\u0000f5\u000Fh'\u0008f\n\u0015h5\u0004e7%g(\u000Bh&\u0001f1\u0002f\u0000\u000Ed9\u0008f\u00176e\u0000\u0019e\n\u001Fh\u0003=d8;h&\u0001g\u001B.e\t\rh5\u0004h./e\u001F\u000Ee8\u0002f\u00169f3\u0015g\u00145e=1f\u000B\u001Bh\u0001\u0018e#0f\u0018\u000Ed;;d=\u0015e\u0001%e:7f\u00150f\r.g>\u000Ee\u001B=f1=h=&d;\u000Bg;\rd=\u0006f\u0018/d:$f5\u0001g\u0014\u001Fd:'f\t\u0000d;%g\u00145h/\u001Df\u0018>g$:d8\u0000d:\u001Be\r\u0015d=\rd::e\u0011\u0018e\u0008\u0006f\u001E\u0010e\u001C0e\u001B>f\u0017\u0005f88e7%e\u00057e-&g\u0014\u001Fg3;e\u0008\u0017g=\u0011e\u000F\u000Be8\u0016e-\u0010e/\u0006g \u0001i\"\u0011i\u0001\u0013f\u000E'e\u00086e\u001C0e\u000C:e\u001F:f\u001C,e\u0005(e\u001B=g=\u0011d8\ni\u0007\rh&\u0001g,,d:\u000Ce\u0016\u001Cf,\"h?\u001Be\u0005%e\u000F\u000Bf\u0003\u0005h?\u0019d:\u001Bh\u0000\u0003h/\u0015e\u000F\u0011g\u000E0e\u001F9h.-d;%d8\nf\u0014?e:\u001Cf\u0008\u0010d8:g\u000E/e\"\u0003i&\u0019f8/e\u0010\u000Cf\u00176e(1d9\u0010e\u000F\u0011i\u0000\u0001d8\u0000e.\u001Ae<\u0000e\u000F\u0011d=\u001Ce\u0013\u0001f \u0007e\u0007\u0006f,\"h?\u000Eh'#e\u00063e\u001C0f\u00169d8\u0000d8\u000Bd;%e\u000F\nh4#d;;f\u0008\u0016h\u0000\u0005e.\"f\u00087d;#h!(g'/e\u0008\u0006e%3d::f\u00150g \u0001i\u0014\u0000e\u0014.e\u0007:g\u000E0g&;g:?e:\u0014g\u0014(e\u0008\u0017h!(d8\re\u0010\u000Cg<\u0016h>\u0011g;\u001Fh.!f\u001F%h/\"d8\rh&\u0001f\u001C\te\u00053f\u001C:f\u001E\u0004e>\u0008e$\u001Af\u0012-f\u0014>g;\u0004g;\u0007f\u0014?g-\u0016g\u001B4f\u000E%h\u0003=e\n\u001Bf\u001D%f:\u0010f\u0019\u0002i\u0016\u0013g\u001C\u000Be\u00080g\u0003-i\u0017(e\u00053i\u0014.d8\u0013e\u000C:i\u001D\u001Ee88h\u000B1h/-g\u0019>e:&e8\u000Cf\u001C\u001Bg>\u000Ee%3f/\u0014h>\u0003g\u001F%h/\u0006h'\u0004e.\u001Ae;:h..i\u0003(i\u0017(f\u0004\u000Fh'\u0001g2>e=)f\u0017%f\u001C,f\u000F\u0010i+\u0018e\u000F\u0011h(\u0000f\u00169i\u001D\"e\u001F:i\u0007\u0011e$\u0004g\u0010\u0006f\u001D\u0003i\u0019\u0010e=1g\t\u0007i\u00136h!\u000Ch?\u0018f\u001C\te\u0008\u0006d:+g\t)e\u0013\u0001g;\u000Fh\u0010%f7;e\n d8\u0013e.6h?\u0019g'\rh/\u001Di\"\u0018h57f\u001D%d8\u001Ae\n!e\u0005,e\u0011\nh.0e=\u0015g.\u0000d;\u000Bh4(i\u0007\u000Fg\u00147d::e=1e\u0013\re<\u0015g\u0014(f\n%e\u0011\ni\u0003(e\u0008\u0006e?+i\u0000\u001Fe\u0012(h/\"f\u00176e0\u001Af3(f\u0004\u000Fg\u00143h/7e-&f !e:\u0014h/%e\u000E\u0006e\u000F2e\u000F*f\u0018/h?\u0014e\u001B\u001Eh4-d90e\u0010\rg'0d8:d:\u0006f\u0008\u0010e\n\u001Fh/4f\u0018\u000Ed>\u001Be:\u0014e-)e-\u0010d8\u0013i\"\u0018g(\u000Be:\u000Fd8\u0000h\u0008,f\u001C\u0003e\u0013!e\u000F*f\u001C\te\u00056e.\u0003d?\u001Df\n$h\u0000\u000Cd8\u0014d;\ne$)g*\u0017e\u000F#e\n(f\u0000\u0001g\n6f\u0000\u0001g\t9e\u0008+h.$d8:e?\u0005i!;f\u001B4f\u00160e0\u000Fh/4f\u0008\u0011e\u0000\u0011d=\u001Cd8:e*\u0012d=\u0013e\u000C\u0005f\u000B,i\u0002#d9\u0008d8\u0000f 7e\u001B=e\u0006\u0005f\u0018/e\u0010&f 9f\r.g\u00145h'\u0006e-&i\u0019\"e\u00057f\u001C\th?\u0007g(\u000Bg\u00141d:\u000Ed::f\t\re\u0007:f\u001D%d8\rh?\u0007f-#e\u001C(f\u0018\u000Ef\u0018\u001Ff\u0015\u0005d:\u000Be\u00053g3;f \u0007i\"\u0018e\u0015\u0006e\n!h>\u0013e\u0005%d8\u0000g\u001B4e\u001F:g!\u0000f\u0015\u0019e-&d:\u0006h'#e;:g-\u0011g;\u0013f\u001E\u001Ce\u0005(g\u0010\u0003i\u0000\u001Ag\u001F%h.!e\u0008\u0012e/9d:\u000Eh\t:f\u001C/g\u001B8e\u0006\u000Ce\u000F\u0011g\u0014\u001Fg\u001C\u001Fg\u001A\u0004e;:g+\u000Bg-\tg:'g1;e\u001E\u000Bg;\u000Fi*\u000Ce.\u001Eg\u000E0e\u00086d=\u001Cf\u001D%h\u0007*f \u0007g->d;%d8\u000Be\u000E\u001Fe\u0008\u001Bf\u0017 f3\u0015e\u00056d8-e\u0000\u000Bd::d8\u0000e\u0008\u0007f\u000C\u0007e\r\u0017e\u00053i\u0017-i\u001B\u0006e\u001B\"g,,d8\te\u00053f3(e\u001B f-$g\u0005'g\t\u0007f71e\u001C3e\u0015\u0006d8\u001Ae9?e7\u001Ef\u0017%f\u001C\u001Fi+\u0018g:'f\u001C\u0000h?\u0011g;\u0011h!\u000Cd8:d:$i\u0000\u001Ah/\u0004d;7h'\te>\u0017g2>e\r\u000Ee.6e:-e.\u000Cf\u0008\u0010f\u0004\u001Fh'\te.\th#\u0005e>\u0017e\u00080i\u0002.d;6e\u00086e:&i#\u001Fe\u0013\u0001h\u0019=g\u00046h=,h==f\n%d;7h.0h\u0000\u0005f\u00169f!\u0008h!\u000Cf\u0014?d::f0\u0011g\u0014(e\u0013\u0001d8\u001Ch%?f\u000F\u0010e\u0007:i\u0005\u0012e:\u0017g\u00046e\u0010\u000Ed;\u0018f,>g\u0003-g\u00029d;%e\t\re.\u000Ce\u0005(e\u000F\u0011e8\u0016h.>g=.i\"\u0006e/g%\u001Eh\u000E7e>\u0017e\u0008)g\u0014(g;'g;-d= d;,h?\u0019d9\u0008f(!e<\u000Fh/-h(\u0000h\u0003=e$\u001Fi\u001B\u0005h\u0019\u000Ef\u0013\rd=\u001Ci#\u000Ef d9&f\u001C\tf\u0015\u0008f5\u000Bh/\u0015g';e\n(f\t\rh\u0003=e\u00063e.\u001Ah\u0002!g%(d8\rf\u0016-i\u001C\u0000f1\u0002d8\re>\u0017e\n\u001Ef3\u0015d9\u000Bi\u00174i\u0007\u0007g\u0014(h\u0010%i\u0014\u0000f\n\u0015h/\tg\u001B.f \u0007g\u00081f\u0003\u0005f\u0011\u0004e=1f\u001C\td:\u001Bh$\u0007h#=f\u0016\u0007e-&f\u001C:d<\u001Af\u00150e-\u0017h#\u0005d?.h4-g\t)e\u0006\u001Cf\u001D\u0011e\u0005(i\u001D\"g2>e\u0013\u0001e\u00056e.\u001Ed:\u000Bf\u0003\u0005f04e93f\u000F\u0010g$:d8\ne8\u0002h0\"h0\"f\u0019.i\u0000\u001Af\u0015\u0019e8\u0008d8\nd< g1;e\u0008+f-\u000Cf\u001B2f\u000B%f\u001C\te\u0008\u001Bf\u00160i\u0005\rd;6e\u000F*h&\u0001f\u00176d;#h3\u0007h(\nh>>e\u00080d::g\u0014\u001Fh.\"i\u0018\u0005h\u0000\u0001e8\u0008e1\u0015g$:e?\u0003g\u0010\u0006h44e-\u0010g62g+\u0019d8;i!\u000Ch\u0007*g\u00046g:'e\u0008+g.\u0000e\r\u0015f\u00149i\u001D)i\u0002#d:\u001Bf\u001D%h/4f\t\u0013e<\u0000d;#g \u0001e\u0008 i\u0019$h/\u0001e\u00088h\n\u0002g\u001B.i\u0007\rg\u00029f,!f\u00158e$\u001Ae0\u0011h'\u0004e\u0008\u0012h5\u0004i\u0007\u0011f\t>e\u00080d;%e\u0010\u000Ee$'e\u0005(d8;i!5f\u001C\u0000d=3e\u001B\u001Eg-\u0014e$)d8\u000Bd?\u001Di\u001A\u001Cg\u000E0d;#f#\u0000f\u001F%f\n\u0015g%(e0\u000Ff\u00176f2\u0012f\u001C\tf-#e88g\u0014\u001Ah\u00073d;#g\u0010\u0006g\u001B.e=\u0015e\u0005,e<\u0000e$\re\u00086i\u0007\u0011h\u001E\re98g&\u000Fg\t\u0008f\u001C,e=\"f\u0008\u0010e\u0007\u0006e$\u0007h!\u000Cf\u0003\u0005e\u001B\u001Ee\u00080f\u0000\u001Df\u00033f\u0000\u000Ef 7e\r\u000Fh..h.$h/\u0001f\u001C\u0000e%=d:'g\u0014\u001Ff\u000C\tg\u0005'f\u001C\rh#\u0005e9?d8\u001Ce\n(f<+i\u0007\u0007h4-f\u00160f\t\u000Bg;\u0004e\u001B>i\u001D\"f\u001D?e\u000F\u0002h\u0000\u0003f\u0014?f2;e.9f\u0018\u0013e$)e\u001C0e\n*e\n\u001Bd::d;,e\r\u0007g:'i\u0000\u001Fe:&d::g\t)h0\u0003f\u00154f5\u0001h!\u000Ci\u0000 f\u0008\u0010f\u0016\u0007e-\u0017i\u001F)e\u001B=h48f\u0018\u0013e<\u0000e1\u0015g\u001B8i\u0017\u001Ch!(g\u000E0e=1h'\u0006e&\u0002f-$g>\u000Ee.9e$'e0\u000Ff\n%i\u0001\u0013f\u001D!f,>e?\u0003f\u0003\u0005h.8e$\u001Af3\u0015h'\u0004e.6e1\u0005d9&e:\u0017h?\u001Ef\u000E%g+\u000Be\r3d8>f\n%f\n\u0000e7'e%%h?\u0010g\u0019;e\u0005%d;%f\u001D%g\u0010\u0006h.:d:\u000Bd;6h\u0007*g\u00141d8-e\r\u000Ee\n\u001Ee\u0005,e&\u0008e&\u0008g\u001C\u001Ff-#d8\ri\u0014\u0019e\u0005(f\u0016\u0007e\u0010\u0008e\u0010\u000Cd;7e\u0000e7&e\u000F3h\u0002!d;=g-\u0014f!\u0008e.\u001Ei\u0019\u0005g\u00145d?!g;\u000Fg\u0010\u0006g\u0014\u001Fe\u0011=e.#d< d;;e\n!f-#e<\u000Fg\t9h\t2d8\u000Bf\u001D%e\r\u000Fd<\u001Ae\u000F*h\u0003=e=\u0013g\u00046i\u0007\rf\u00160e\u0005'e.9f\u000C\u0007e/g(\u000Be\u000C;g\u0016\u0017g;\u000Fh?\u0007h?\u0007e\u000E;d9\u000Be\t\rf\u00146e\u0005%e94e:&f\u001D\u0002e?\u0017g>\u000Ed8=f\u001C\u0000i+\u0018g\u0019;i\u0019\u0006f\u001C*f\u001D%e\n e7%e\u0005\rh4#f\u0015\u0019g(\u000Bg\t\u0008e\u001D\u0017h:+d=\u0013i\u0007\re:\u0006e\u0007:e\u0014.f\u0008\u0010f\u001C,e=\"e<\u000Fe\u001C\u001Fh1\u0006e\u0007:e\u00039d8\u001Cf\u00169i\u0002.g.1e\r\u0017d:,f1\u0002h\u0001\u000Ce\u000F\u0016e>\u0017h\u0001\u000Cd=\rg\u001B8d?!i!5i\u001D\"e\u0008\u0006i\u0012\u001Fg=\u0011i!5g!.e.\u001Ae\u001B>d>\u000Bg=\u0011e\u001D\u0000g'/f\u001E\u0001i\u0014\u0019h//g\u001B.g\u001A\u0004e.\u001Dh4\u001Df\u001C:e\u00053i#\u000Ei\u0019)f\u000E\u0008f\u001D\u0003g\u0017\u0005f/\u0012e. g\t)i\u0019$d:\u0006h)\u0015h+\u0016g\u0016>g\u0017\u0005e\u000F\nf\u00176f1\u0002h4-g+\u0019g\u00029e\u0004?g+%f/\u000Fe$)d8-e$.h.$h/\u0006f/\u000Fd8*e$)f4%e-\u0017d=\u0013e\u000F0g\u0001#g;4f\n$f\u001C,i!5d8*f\u0000'e.\u0018f\u00169e88h'\u0001g\u001B8f\u001C:f\u0008\u0018g\u0015%e:\u0014e=\u0013e>\u000Be8\u0008f\u00169d>?f !e\u001B-h\u0002!e8\u0002f\u0008?e1\u000Bf \u000Fg\u001B.e\u0011\u0018e7%e/\u000Ee\u0005\u0003e<\u0015h57f\u00149e\u000F\u0018g,,e\u001B\u001Bd<\u001Ah.!h**f\u0018\u000Ei\u001A\u0010g'\u0001e.\u001De.\u001Dh'\u0004h\u000C\u0003f6\u0008h49e\u00051e\u0010\u000Ce?\u0018h.0d=\u0013g3;e8&f\u001D%e\u0010\re-\u0017g\u0019e\n g\u001B\u001Fe\u000F\u0017e\u00080d:\u000Cf\t\u000Be$'i\u0007\u000Ff\u0008\u0010d::f\u00150i\u0007\u000Fe\u00051d:+e\u000C:e\u001F\u001Fe%3e-)e\u000E\u001Fe\u0008\u0019f\t\u0000e\u001C(g;\u0013f\u001D\u001Fi\u0000\u001Ad?!h6\u0005g:'i\u0005\rg=.e=\u0013f\u00176d<\u0018g'\u0000f\u0000'f\u0004\u001Ff\u0008?d:'i\u0001\nf\u00082e\u0007:e\u000F#f\u000F\u0010d:$e01d8\u001Ad?\u001De\u0001%g(\u000Be:&e\u000F\u0002f\u00150d:\u000Bd8\u001Af\u00154d8*e11d8\u001Cf\u0003\u0005f\u0004\u001Fg\t9f.\ne\u0008\u0006i!\u001Ef\u0010\u001Ce0\u000Be1\u001Ed:\u000Ei\u0017(f\u00087h4\"e\n!e#0i\u001F3e\u000F\ne\u00056h4\"g;\u000Fe\u001D\u001Af\u000C\u0001e92i\u0003(f\u0008\u0010g+\u000Be\u0008)g\u001B\nh\u0000\u0003h\u0019\u0011f\u0008\u0010i\u0003=e\u000C\u0005h#\u0005g\u0014(f\u00086f/\u0014h5\u001Bf\u0016\u0007f\u0018\u000Ef\u000B\u001Be\u0015\u0006e.\u000Cf\u00154g\u001C\u001Ff\u0018/g\u001Ce/\u0006g\"\u000Ei#\u001Fg;?h\t2g(3e.\u001Ag;\u0008d:\u000Eg\u0014\u001Fg\t)d>\u001Bf1\u0002f\u0010\u001Cg\u000B\u0010e\n\u001Bi\u0007\u000Fd8%i\u0007\rf08h?\u001Ce\u0006\u0019g\u001C\u001Ff\u001C\ti\u0019\u0010g+\u001Ed:\te/9h1!h49g\u0014(d8\re%=g;\u001De/9e\r\u0001e\u0008\u0006d?\u0003h?\u001Bg\u00029h/\u0004e=1i\u001F3d<\u0018e\n?d8\re0\u0011f,#h5\u000Fe96d8\u0014f\u001C\tg\u00029f\u00169e\u0010\u0011e\u0005(f\u00160d?!g\u0014(h.>f\u0016=e=\"h1!h5\u0004f \u000Ee\u0015\u0006e\u001F\u000Eg;\u001Fd8\u0000e\u0007:g\t\u0008f\t\u0013i\u0000 g\u0014\"e\u0013\u0001f&\u0002e\u00065g\u0014(d:\u000Ed?\u001Dg\u0015\u0019e\u001B g4 d8-e\u001C\u000Be-\u0018e\u0002(h44e\u001B>f\u001C\u0000f\u0004\u001Bi\u0015?f\u001C\u001Fe\u000F#d;7g\u0010\u0006h4\"e\u001F:e\u001C0e.\tf\u000E\u0012f-&f1\ti\u0007\u000Ci\u001D\"e\u0008\u001Be;:e$)g):i&\u0016e\u0005\u0008e.\u000Ce\u0016\u0004i)1e\n(d8\u000Bi\u001D\"d8\re\u0006\rh/\u001Ad?!f\u0004\u000Fd9\ti\u00183e\u0005\th\u000B1e\u001B=f<\u0002d:.e\u0006\u001Bd:\u000Bg\u000E)e.6g>$d<\u0017e\u0006\u001Cf0\u0011e\r3e\u000F/e\u0010\rg(1e.6e\u00057e\n(g\u0014;f\u00033e\u00080f3(f\u0018\u000Ee0\u000Fe-&f\u0000'h\u0003=h\u0000\u0003g \u0014g!,d;6h'\u0002g\u001C\u000Bf8\u0005f%\u001Af\u0010\u001Eg,\u0011i&\u0016i \u0001i;\u0004i\u0007\u0011i\u0000\u0002g\u0014(f1\u001Fh\u000B\u000Fg\u001C\u001Fe.\u001Ed8;g.!i\u00186f.5h(;e\u0006\ng?;h/\u0011f\u001D\u0003e\u0008)e\u0001\u001Ae%=d<P:P0P:P8P;P8Q\rQ\u0002P>P2Q\u0001P5P5P3P>P?Q\u0000P8Q\u0002P0P:P5Q\tP5Q\u0003P6P5P\u001AP0P:P1P5P7P1Q\u000BP;P>P=P8P\u0012Q\u0001P5P?P>P4P-Q\u0002P>Q\u0002P>PP=P0P3P4P5PP3P>P4P2P>Q\u0002Q\u0002P0PP2P0Q\u0001P2P0PQ\u0002Q\u0003Q\u0002P=P0P4P4P=Q\u000FP\u0012P>Q\u0002Q\u0002Q\u0000P8P=P5P9P\u0012P0Q\u0001P=P8PQ\u0002Q\u0000Q\u0003P1P\u001EP=P8PPP9P4P2P5P>P=P>Q\u0001Q\u0003P4`$\u0015`%\u0007`$9`%\u0008`$\u0015`%\u0000`$8`%\u0007`$\u0015`$>`$\u0015`%\u000B`$\u0014`$0`$*`$0`$(`%\u0007`$\u000F`$\u0015`$\u0015`$?`$-`%\u0000`$\u0007`$8`$\u0015`$0`$$`%\u000B`$9`%\u000B`$\u0006`$*`$9`%\u0000`$/`$9`$/`$>`$$`$\u0015`$%`$>jagran`$\u0006`$\u001C`$\u001C`%\u000B`$\u0005`$,`$&`%\u000B`$\u0017`$\u0008`$\u001C`$>`$\u0017`$\u000F`$9`$.`$\u0007`$(`$5`$9`$/`%\u0007`$%`%\u0007`$%`%\u0000`$\u0018`$0`$\u001C`$,`$&`%\u0000`$\u0015`$\u0008`$\u001C`%\u0000`$5`%\u0007`$(`$\u0008`$(`$\u000F`$9`$0`$\t`$8`$.`%\u0007`$\u0015`$.`$5`%\u000B`$2`%\u0007`$8`$,`$.`$\u0008`$&`%\u0007`$\u0013`$0`$\u0006`$.`$,`$8`$-`$0`$,`$(`$\u001A`$2`$.`$(`$\u0006`$\u0017`$8`%\u0000`$2`%\u0000X9Y\u0004Y\tX%Y\u0004Y\tY\u0007X0X'X\"X.X1X9X/X/X'Y\u0004Y\tY\u0007X0Y\u0007X5Y\u0008X1X:Y\nX1Y\u0003X'Y\u0006Y\u0008Y\u0004X'X(Y\nY\u0006X9X1X6X0Y\u0004Y\u0003Y\u0007Y\u0006X'Y\nY\u0008Y\u0005Y\u0002X'Y\u0004X9Y\u0004Y\nX'Y\u0006X'Y\u0004Y\u0003Y\u0006X-X*Y\tY\u0002X(Y\u0004Y\u0008X-X)X'X.X1Y\u0001Y\u0002X7X9X(X/X1Y\u0003Y\u0006X%X0X'Y\u0003Y\u0005X'X'X-X/X%Y\u0004X'Y\u0001Y\nY\u0007X(X9X6Y\u0003Y\nY\u0001X(X-X+Y\u0008Y\u0005Y\u0006Y\u0008Y\u0007Y\u0008X#Y\u0006X'X,X/X'Y\u0004Y\u0007X'X3Y\u0004Y\u0005X9Y\u0006X/Y\u0004Y\nX3X9X(X1X5Y\u0004Y\tY\u0005Y\u0006X0X(Y\u0007X'X#Y\u0006Y\u0007Y\u0005X+Y\u0004Y\u0003Y\u0006X*X'Y\u0004X'X-Y\nX+Y\u0005X5X1X4X1X-X-Y\u0008Y\u0004Y\u0008Y\u0001Y\nX'X0X'Y\u0004Y\u0003Y\u0004Y\u0005X1X)X'Y\u0006X*X'Y\u0004Y\u0001X#X(Y\u0008X.X'X5X#Y\u0006X*X'Y\u0006Y\u0007X'Y\u0004Y\nX9X6Y\u0008Y\u0008Y\u0002X/X'X(Y\u0006X.Y\nX1X(Y\u0006X*Y\u0004Y\u0003Y\u0005X4X'X!Y\u0008Y\u0007Y\nX'X(Y\u0008Y\u0002X5X5Y\u0008Y\u0005X'X1Y\u0002Y\u0005X#X-X/Y\u0006X-Y\u0006X9X/Y\u0005X1X#Y\nX'X-X)Y\u0003X*X(X/Y\u0008Y\u0006Y\nX,X(Y\u0005Y\u0006Y\u0007X*X-X*X,Y\u0007X)X3Y\u0006X)Y\nX*Y\u0005Y\u0003X1X)X:X2X)Y\u0006Y\u0001X3X(Y\nX*Y\u0004Y\u0004Y\u0007Y\u0004Y\u0006X'X*Y\u0004Y\u0003Y\u0002Y\u0004X(Y\u0004Y\u0005X'X9Y\u0006Y\u0007X#Y\u0008Y\u0004X4Y\nX!Y\u0006Y\u0008X1X#Y\u0005X'Y\u0001Y\nY\u0003X(Y\u0003Y\u0004X0X'X*X1X*X(X(X#Y\u0006Y\u0007Y\u0005X3X'Y\u0006Y\u0003X(Y\nX9Y\u0001Y\u0002X/X-X3Y\u0006Y\u0004Y\u0007Y\u0005X4X9X1X#Y\u0007Y\u0004X4Y\u0007X1Y\u0002X7X1X7Y\u0004X(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashioncountryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture",journalprojectsurfaces"expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\r\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular & animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit<!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle=\"Mobile killingshowingItaliandroppedheavilyeffects-1']);\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,"animatefeelingarrivedpassingnaturalroughly.\n\nThe but notdensityBritainChineselack oftributeIreland\" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang=\"return leadersplannedpremiumpackageAmericaEdition]"Messageneed tovalue=\"complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling."AccountEdward segmentRobert effortsPacificlearnedup withheight:we haveAngelesnations_searchappliedacquiremassivegranted: falsetreatedbiggestbenefitdrivingStudiesminimumperhapsmorningsellingis usedreversevariant role=\"missingachievepromotestudentsomeoneextremerestorebottom:evolvedall thesitemapenglishway to AugustsymbolsCompanymattersmusicalagainstserving})();\r\npaymenttroubleconceptcompareparentsplayersregionsmonitor ''The winningexploreadaptedGalleryproduceabilityenhancecareers). The collectSearch ancientexistedfooter handlerprintedconsoleEasternexportswindowsChannelillegalneutralsuggest_headersigning.html\">settledwesterncausing-webkitclaimedJusticechaptervictimsThomas mozillapromisepartieseditionoutside:false,hundredOlympic_buttonauthorsreachedchronicdemandssecondsprotectadoptedprepareneithergreatlygreateroverallimprovecommandspecialsearch.worshipfundingthoughthighestinsteadutilityquarterCulturetestingclearlyexposedBrowserliberal} catchProjectexamplehide();FloridaanswersallowedEmperordefenseseriousfreedomSeveral-buttonFurtherout of != nulltrainedDenmarkvoid(0)/all.jspreventRequestStephen\n\nWhen observe</h2>\r\nModern provide\" alt=\"borders.\n\nFor \n\nMany artistspoweredperformfictiontype ofmedicalticketsopposedCouncilwitnessjusticeGeorge Belgium...</a>twitternotablywaitingwarfare Other rankingphrasesmentionsurvivescholar</p>\r\n Countryignoredloss ofjust asGeorgiastrange<head><stopped1']);\r\nislandsnotableborder:list ofcarried100,000</h3>\n severalbecomesselect wedding00.htmlmonarchoff theteacherhighly biologylife ofor evenrise of»plusonehunting(thoughDouglasjoiningcirclesFor theAncientVietnamvehiclesuch ascrystalvalue =Windowsenjoyeda smallassumed<a id=\"foreign All rihow theDisplayretiredhoweverhidden;battlesseekingcabinetwas notlook atconductget theJanuaryhappensturninga:hoverOnline French lackingtypicalextractenemieseven ifgeneratdecidedare not/searchbeliefs-image:locatedstatic.login\">convertviolententeredfirst\">circuitFinlandchemistshe was10px;\">as suchdivided</span>will beline ofa greatmystery/index.fallingdue to railwaycollegemonsterdescentit withnuclearJewish protestBritishflowerspredictreformsbutton who waslectureinstantsuicidegenericperiodsmarketsSocial fishingcombinegraphicwinners<br /><by the NaturalPrivacycookiesoutcomeresolveSwedishbrieflyPersianso muchCenturydepictscolumnshousingscriptsnext tobearingmappingrevisedjQuery(-width:title\">tooltipSectiondesignsTurkishyounger.match(})();\n\nburningoperatedegreessource=Richardcloselyplasticentries</tr>\r\ncolor:#ul id=\"possessrollingphysicsfailingexecutecontestlink toDefault<br />\n: true,chartertourismclassicproceedexplain</h1>\r\nonline.?xml vehelpingdiamonduse theairlineend -->).attr(readershosting#ffffffrealizeVincentsignals src=\"/ProductdespitediversetellingPublic held inJoseph theatreaffects<style>a largedoesn'tlater, ElementfaviconcreatorHungaryAirportsee theso thatMichaelSystemsPrograms, and width=e"tradingleft\">\npersonsGolden Affairsgrammarformingdestroyidea ofcase ofoldest this is.src = cartoonregistrCommonsMuslimsWhat isin manymarkingrevealsIndeed,equally/show_aoutdoorescape(Austriageneticsystem,In the sittingHe alsoIslandsAcademy\n\t\t<!--Daniel bindingblock\">imposedutilizeAbraham(except{width:putting).html(|| [];\nDATA[ *kitchenmountedactual dialectmainly _blank'installexpertsif(typeIt also© \">Termsborn inOptionseasterntalkingconcerngained ongoingjustifycriticsfactoryits ownassaultinvitedlastinghis ownhref=\"/\" rel=\"developconcertdiagramdollarsclusterphp?id=alcohol);})();using a><span>vesselsrevivalAddressamateurandroidallegedillnesswalkingcentersqualifymatchesunifiedextinctDefensedied in\n\t<!-- customslinkingLittle Book ofeveningmin.js?are thekontakttoday's.html\" target=wearingAll Rig;\n})();raising Also, crucialabout\">declare-->\n<scfirefoxas muchappliesindex, s, but type = \n\r\n<!--towardsRecordsPrivateForeignPremierchoicesVirtualreturnsCommentPoweredinline;povertychamberLiving volumesAnthonylogin\" RelatedEconomyreachescuttinggravitylife inChapter-shadowNotable</td>\r\n returnstadiumwidgetsvaryingtravelsheld bywho arework infacultyangularwho hadairporttown of\n\nSome 'click'chargeskeywordit willcity of(this);Andrew unique checkedor more300px; return;rsion=\"pluginswithin herselfStationFederalventurepublishsent totensionactresscome tofingersDuke ofpeople,exploitwhat isharmonya major\":\"httpin his menu\">\nmonthlyofficercouncilgainingeven inSummarydate ofloyaltyfitnessand wasemperorsupremeSecond hearingRussianlongestAlbertalateralset of small\">.appenddo withfederalbank ofbeneathDespiteCapitalgrounds), and percentit fromclosingcontainInsteadfifteenas well.yahoo.respondfighterobscurereflectorganic= Math.editingonline paddinga wholeonerroryear ofend of barrierwhen itheader home ofresumedrenamedstrong>heatingretainscloudfrway of March 1knowingin partBetweenlessonsclosestvirtuallinks\">crossedEND -->famous awardedLicenseHealth fairly wealthyminimalAfricancompetelabel\">singingfarmersBrasil)discussreplaceGregoryfont copursuedappearsmake uproundedboth ofblockedsaw theofficescoloursif(docuwhen heenforcepush(fuAugust UTF-8\">Fantasyin mostinjuredUsuallyfarmingclosureobject defenceuse of Medical<body>\nevidentbe usedkeyCodesixteenIslamic#000000entire widely active (typeofone cancolor =speakerextendsPhysicsterrain<tbody>funeralviewingmiddle cricketprophetshifteddoctorsRussell targetcompactalgebrasocial-bulk ofman and</td>\n he left).val()false);logicalbankinghome tonaming Arizonacredits);\n});\nfounderin turnCollinsbefore But thechargedTitle\">CaptainspelledgoddessTag -->Adding:but wasRecent patientback in=false&Lincolnwe knowCounterJudaismscript altered']);\n has theunclearEvent',both innot all\n\n<!-- placinghard to centersort ofclientsstreetsBernardassertstend tofantasydown inharbourFreedomjewelry/about..searchlegendsis mademodern only ononly toimage\" linear painterand notrarely acronymdelivershorter00&as manywidth=\"/* <![Ctitle =of the lowest picked escapeduses ofpeoples PublicMatthewtacticsdamagedway forlaws ofeasy to windowstrong simple}catch(seventhinfoboxwent topaintedcitizenI don'tretreat. Some ww.\");\nbombingmailto:made in. Many carries||{};wiwork ofsynonymdefeatsfavoredopticalpageTraunless sendingleft\"><comScorAll thejQuery.touristClassicfalse\" Wilhelmsuburbsgenuinebishops.split(global followsbody ofnominalContactsecularleft tochiefly-hidden-banner</li>\n\n. When in bothdismissExplorealways via thespaC1olwelfareruling arrangecaptainhis sonrule ofhe tookitself,=0&(calledsamplesto makecom/pagMartin Kennedyacceptsfull ofhandledBesides//--></able totargetsessencehim to its by common.mineralto takeways tos.org/ladvisedpenaltysimple:if theyLettersa shortHerbertstrikes groups.lengthflightsoverlapslowly lesser social </p>\n\t\tit intoranked rate oful>\r\n attemptpair ofmake itKontaktAntoniohaving ratings activestreamstrapped\").css(hostilelead tolittle groups,Picture-->\r\n\r\n rows=\" objectinverse<footerCustomV><\\/scrsolvingChamberslaverywoundedwhereas!= 'undfor allpartly -right:Arabianbacked centuryunit ofmobile-Europe,is homerisk ofdesiredClintoncost ofage of become none ofp"Middle ead')[0Criticsstudios>©group\">assemblmaking pressedwidget.ps:\" ? rebuiltby someFormer editorsdelayedCanonichad thepushingclass=\"but arepartialBabylonbottom carrierCommandits useAs withcoursesa thirddenotesalso inHouston20px;\">accuseddouble goal ofFamous ).bind(priests Onlinein Julyst + \"gconsultdecimalhelpfulrevivedis veryr'+'iptlosing femalesis alsostringsdays ofarrivalfuture <objectforcingString(\" />\n\t\there isencoded. The balloondone by/commonbgcolorlaw of Indianaavoidedbut the2px 3pxjquery.after apolicy.men andfooter-= true;for usescreen.Indian image =family,http://  driverseternalsame asnoticedviewers})();\n is moreseasonsformer the newis justconsent Searchwas thewhy theshippedbr><br>width: height=made ofcuisineis thata very Admiral fixed;normal MissionPress, ontariocharsettry to invaded=\"true\"spacingis mosta more totallyfall of});\r\n immensetime inset outsatisfyto finddown tolot of Playersin Junequantumnot thetime todistantFinnishsrc = (single help ofGerman law andlabeledforestscookingspace\">header-well asStanleybridges/globalCroatia About [0];\n it, andgroupedbeing a){throwhe madelighterethicalFFFFFF\"bottom\"like a employslive inas seenprintermost ofub-linkrejectsand useimage\">succeedfeedingNuclearinformato helpWomen'sNeitherMexicanprotein<table by manyhealthylawsuitdevised.push({sellerssimply Through.cookie Image(older\">us.js\"> Since universlarger open to!-- endlies in']);\r\n marketwho is (\"DOMComanagedone fortypeof Kingdomprofitsproposeto showcenter;made itdressedwere inmixtureprecisearisingsrc = 'make a securedBaptistvoting \n\t\tvar March 2grew upClimate.removeskilledway the</head>face ofacting right\">to workreduceshas haderectedshow();action=book ofan area== \"htt<header\n<html>conformfacing cookie.rely onhosted .customhe wentbut forspread Family a meansout theforums.footage\">MobilClements\" id=\"as highintense--><!--female is seenimpliedset thea stateand hisfastestbesidesbutton_bounded\"><img Infoboxevents,a youngand areNative cheaperTimeoutand hasengineswon the(mostlyright: find a -bottomPrince area ofmore ofsearch_nature,legallyperiod,land ofor withinducedprovingmissilelocallyAgainstthe wayk"px;\">\r\npushed abandonnumeralCertainIn thismore inor somename isand, incrownedISBN 0-createsOctobermay notcenter late inDefenceenactedwish tobroadlycoolingonload=it. TherecoverMembersheight assumes<html>\npeople.in one =windowfooter_a good reklamaothers,to this_cookiepanel\">London,definescrushedbaptismcoastalstatus title\" move tolost inbetter impliesrivalryservers SystemPerhapses and contendflowinglasted rise inGenesisview ofrising seem tobut in backinghe willgiven agiving cities.flow of Later all butHighwayonly bysign ofhe doesdiffersbattery&lasinglesthreatsintegertake onrefusedcalled =US&See thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\r\nAtlantanucleusCounty,purely count\">easily build aonclicka givenpointerh"events else {\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m"renewedDetroitamongsteither them inSenatorUs</a><King ofFrancis-produche usedart andhim andused byscoringat hometo haverelatesibilityfactionBuffalolink\"><what hefree toCity ofcome insectorscountedone daynervoussquare };if(goin whatimg\" alis onlysearch/tuesdaylooselySolomonsexual - <a hrmedium\"DO NOT France,with a war andsecond take a >\r\n\r\n\r\nmarket.highwaydone inctivity\"last\">obligedrise to\"undefimade to Early praisedin its for hisathleteJupiterYahoo! termed so manyreally s. The a woman?value=direct right\" bicycleacing=\"day andstatingRather,higher Office are nowtimes, when a pay foron this-link\">;borderaround annual the Newput the.com\" takin toa brief(in thegroups.; widthenzymessimple in late{returntherapya pointbanninginks\">\n();\" rea place\\u003Caabout atr>\r\n\t\tccount gives a<SCRIPTRailwaythemes/toolboxById(\"xhumans,watchesin some if (wicoming formats Under but hashanded made bythan infear ofdenoted/iframeleft involtagein eacha"base ofIn manyundergoregimesaction </p>\r\n<ustomVa;></importsor thatmostly &re size=\"</a></ha classpassiveHost = WhetherfertileVarious=[];(fucameras/></td>acts asIn some>\r\n\r\n<!organis <br />BeijingcatalC deutscheuropeueuskaragaeilgesvenskaespaC1amensajeusuariotrabajomC)xicopC!ginasiempresistemaoctubreduranteaC1adirempresamomentonuestroprimeratravC)sgraciasnuestraprocesoestadoscalidadpersonanC:meroacuerdomC:sicamiembroofertasalgunospaC-sesejemploderechoademC!sprivadoagregarenlacesposiblehotelessevillaprimeroC:ltimoeventosarchivoculturamujeresentradaanuncioembargomercadograndesestudiomejoresfebrerodiseC1oturismocC3digoportadaespaciofamiliaantoniopermiteguardaralgunaspreciosalguiensentidovisitastC-tuloconocersegundoconsejofranciaminutossegundatenemosefectosmC!lagasesiC3nrevistagranadacompraringresogarcC-aacciC3necuadorquienesinclusodeberC!materiahombresmuestrapodrC-amaC1anaC:ltimaestamosoficialtambienningC:nsaludospodemosmejorarpositionbusinesshomepagesecuritylanguagestandardcampaignfeaturescategoryexternalchildrenreservedresearchexchangefavoritetemplatemilitaryindustryservicesmaterialproductsz-index:commentssoftwarecompletecalendarplatformarticlesrequiredmovementquestionbuildingpoliticspossiblereligionphysicalfeedbackregisterpicturesdisabledprotocolaudiencesettingsactivityelementslearninganythingabstractprogressoverviewmagazineeconomictrainingpressurevarious <strong>propertyshoppingtogetheradvancedbehaviordownloadfeaturedfootballselectedLanguagedistanceremembertrackingpasswordmodifiedstudentsdirectlyfightingnortherndatabasefestivalbreakinglocationinternetdropdownpracticeevidencefunctionmarriageresponseproblemsnegativeprogramsanalysisreleasedbanner\">purchasepoliciesregionalcreativeargumentbookmarkreferrerchemicaldivisioncallbackseparateprojectsconflicthardwareinterestdeliverymountainobtained= false;for(var acceptedcapacitycomputeridentityaircraftemployedproposeddomesticincludesprovidedhospitalverticalcollapseapproachpartnerslogo\"><adaughterauthor\" culturalfamilies/images/assemblypowerfulteachingfinisheddistrictcriticalcgi-bin/purposesrequireselectionbecomingprovidesacademicexerciseactuallymedicineconstantaccidentMagazinedocumentstartingbottom\">observed: "extendedpreviousSoftwarecustomerdecisionstrengthdetailedslightlyplanningtextareacurrencyeveryonestraighttransferpositiveproducedheritageshippingabsolutereceivedrelevantbutton\" violenceanywherebenefitslaunchedrecentlyalliancefollowedmultiplebulletinincludedoccurredinternal$(this).republic><tr><tdcongressrecordedultimatesolution<ul id=\"discoverHome</a>websitesnetworksalthoughentirelymemorialmessagescontinueactive\">somewhatvictoriaWestern title=\"LocationcontractvisitorsDownloadwithout right\">\nmeasureswidth = variableinvolvedvirginianormallyhappenedaccountsstandingnationalRegisterpreparedcontrolsaccuratebirthdaystrategyofficialgraphicscriminalpossiblyconsumerPersonalspeakingvalidateachieved.jpg\" />machines</h2>\n keywordsfriendlybrotherscombinedoriginalcomposedexpectedadequatepakistanfollow\" valuable</label>relativebringingincreasegovernorplugins/List of Header\">\" name=\" ("graduate</head>\ncommercemalaysiadirectormaintain;height:schedulechangingback to catholicpatternscolor: #greatestsuppliesreliable</ul>\n\t\t<select citizensclothingwatching<li id=\"specificcarryingsentence<center>contrastthinkingcatch(e)southernMichael merchantcarouselpadding:interior.split(\"lizationOctober ){returnimproved-->\n\ncoveragechairman.png\" />subjectsRichard whateverprobablyrecoverybaseballjudgmentconnect..css\" /> websitereporteddefault\"/></a>\r\nelectricscotlandcreationquantity. ISBN 0did not instance-search-\" lang=\"speakersComputercontainsarchivesministerreactiondiscountItalianocriteriastrongly: 'http:'script'coveringofferingappearedBritish identifyFacebooknumerousvehiclesconcernsAmericanhandlingdiv id=\"William provider_contentaccuracysection andersonflexibleCategorylawrence<script>layout=\"approved maximumheader\"></table>Serviceshamiltoncurrent canadianchannels/themes//articleoptionalportugalvalue=\"\"intervalwirelessentitledagenciesSearch\" measuredthousandspending…new Date\" size=\"pageNamemiddle\" \" /></a>hidden\">sequencepersonaloverflowopinionsillinoislinks\">\n\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal=\"false\"EspaC1olreleasessubmit\" er"additionsymptomsorientedresourceright\"><pleasurestationshistory.leaving border=contentscenter\">.\n\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal\"><span>search\">operatorrequestsa "allowingDocumentrevision. \n\nThe yourselfContact michiganEnglish columbiapriorityprintingdrinkingfacilityreturnedContent officersRussian generate-8859-1\"indicatefamiliar qualitymargin:0 contentviewportcontacts-title\">portable.length eligibleinvolvesatlanticonload=\"default.suppliedpaymentsglossary\n\nAfter guidance</td><tdencodingmiddle\">came to displaysscottishjonathanmajoritywidgets.clinicalthailandteachers<head>\n\taffectedsupportspointer;toString</small>oklahomawill be investor0\" alt=\"holidaysResourcelicensed (which . After considervisitingexplorerprimary search\" android\"quickly meetingsestimate;return ;color:# height=approval, " checked.min.js\"magnetic></a></hforecast. While thursdaydvertiseéhasClassevaluateorderingexistingpatients Online coloradoOptions\"campbell<!-- end</span><<br />\r\n_popups|sciences," quality Windows assignedheight: <b classle" value=\" Companyexamples<iframe believespresentsmarshallpart of properly).\n\nThe taxonomymuch of </span>\n\" data-srtuguC*sscrollTo project<head>\r\nattorneyemphasissponsorsfancyboxworld's wildlifechecked=sessionsprogrammpx;font- Projectjournalsbelievedvacationthompsonlightingand the special border=0checking</tbody><button Completeclearfix\n<head>\narticle <sectionfindingsrole in popular Octoberwebsite exposureused to changesoperatedclickingenteringcommandsinformed numbers </div>creatingonSubmitmarylandcollegesanalyticlistingscontact.loggedInadvisorysiblingscontent\"s")s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton\">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth=\"2lazyloadnovemberused in height=\"cript\">\n </<tr><td height:2/productcountry include footer\" <!-- title\"></jquery.</form>\n(g.\u0000d=\u0013)(g9\u0001i+\u0014)hrvatskiitalianoromC\"nD\u0003tC<rkC'eX'X1X/Y\u0008tambiC)nnoticiasmensajespersonasderechosnacionalserviciocontactousuariosprogramagobiernoempresasanunciosvalenciacolombiadespuC)sdeportesproyectoproductopC:bliconosotroshistoriapresentemillonesmediantepreguntaanteriorrecursosproblemasantiagonuestrosopiniC3nimprimirmientrasamC)ricavendedorsociedadrespectorealizarregistropalabrasinterC)sentoncesespecialmiembrosrealidadcC3rdobazaragozapC!ginassocialesbloqueargestiC3nalquilersistemascienciascompletoversiC3ncompletaestudiospC:blicaobjetivoalicantebuscadorcantidadentradasaccionesarchivossuperiormayorC-aalemaniafunciC3nC:ltimoshaciendoaquellosediciC3nfernandoambientefacebooknuestrasclientesprocesosbastantepresentareportarcongresopublicarcomerciocontratojC3venesdistritotC)cnicaconjuntoenergC-atrabajarasturiasrecienteutilizarboletC-nsalvadorcorrectatrabajosprimerosnegocioslibertaddetallespantallaprC3ximoalmerC-aanimalesquiC)nescorazC3nsecciC3nbuscandoopcionesexteriorconceptotodavC-agalerC-aescribirmedicinalicenciaconsultaaspectoscrC-ticadC3laresjusticiadeberC!nperC-odonecesitamantenerpequeC1orecibidatribunaltenerifecanciC3ncanariasdescargadiversosmallorcarequieretC)cnicodeberC-aviviendafinanzasadelantefuncionaconsejosdifC-cilciudadesantiguasavanzadatC)rminounidadessC!nchezcampaC1asoftonicrevistascontienesectoresmomentosfacultadcrC)ditodiversassupuestofactoressegundospequeC1aP3P>P4P0P5Q\u0001P;P8P5Q\u0001Q\u0002Q\u000CP1Q\u000BP;P>P1Q\u000BQ\u0002Q\u000CQ\rQ\u0002P>P<P\u0015Q\u0001P;P8Q\u0002P>P3P>P<P5P=Q\u000FP2Q\u0001P5Q\u0005Q\rQ\u0002P>P9P4P0P6P5P1Q\u000BP;P8P3P>P4Q\u0003P4P5P=Q\u000CQ\rQ\u0002P>Q\u0002P1Q\u000BP;P0Q\u0001P5P1Q\u000FP>P4P8P=Q\u0001P5P1P5P=P0P4P>Q\u0001P0P9Q\u0002Q\u0004P>Q\u0002P>P=P5P3P>Q\u0001P2P>P8Q\u0001P2P>P9P8P3Q\u0000Q\u000BQ\u0002P>P6P5P2Q\u0001P5P<Q\u0001P2P>Q\u000EP;P8Q\u0008Q\u000CQ\rQ\u0002P8Q\u0005P?P>P:P0P4P=P5P9P4P>P<P0P<P8Q\u0000P0P;P8P1P>Q\u0002P5P<Q\u0003Q\u0005P>Q\u0002Q\u000FP4P2Q\u0003Q\u0005Q\u0001P5Q\u0002P8P;Q\u000EP4P8P4P5P;P>P<P8Q\u0000P5Q\u0002P5P1Q\u000FQ\u0001P2P>P5P2P8P4P5Q\u0007P5P3P>Q\rQ\u0002P8P<Q\u0001Q\u0007P5Q\u0002Q\u0002P5P<Q\u000BQ\u0006P5P=Q\u000BQ\u0001Q\u0002P0P;P2P5P4Q\u000CQ\u0002P5P<P5P2P>P4Q\u000BQ\u0002P5P1P5P2Q\u000BQ\u0008P5P=P0P<P8Q\u0002P8P?P0Q\u0002P>P<Q\u0003P?Q\u0000P0P2P;P8Q\u0006P0P>P4P=P0P3P>P4Q\u000BP7P=P0Q\u000EP<P>P3Q\u0003P4Q\u0000Q\u0003P3P2Q\u0001P5P9P8P4P5Q\u0002P:P8P=P>P>P4P=P>P4P5P;P0P4P5P;P5Q\u0001Q\u0000P>P:P8Q\u000EP=Q\u000FP2P5Q\u0001Q\u000CP\u0015Q\u0001Q\u0002Q\u000CQ\u0000P0P7P0P=P0Q\u0008P8X'Y\u0004Y\u0004Y\u0007X'Y\u0004X*Y\nX,Y\u0005Y\nX9X.X'X5X)X'Y\u0004X0Y\nX9Y\u0004Y\nY\u0007X,X/Y\nX/X'Y\u0004X\"Y\u0006X'Y\u0004X1X/X*X-Y\u0003Y\u0005X5Y\u0001X-X)Y\u0003X'Y\u0006X*X'Y\u0004Y\u0004Y\nY\nY\u0003Y\u0008Y\u0006X4X(Y\u0003X)Y\u0001Y\nY\u0007X'X(Y\u0006X'X*X-Y\u0008X'X!X#Y\u0003X+X1X.Y\u0004X'Y\u0004X'Y\u0004X-X(X/Y\u0004Y\nY\u0004X/X1Y\u0008X3X'X6X:X7X*Y\u0003Y\u0008Y\u0006Y\u0007Y\u0006X'Y\u0003X3X'X-X)Y\u0006X'X/Y\nX'Y\u0004X7X(X9Y\u0004Y\nY\u0003X4Y\u0003X1X'Y\nY\u0005Y\u0003Y\u0006Y\u0005Y\u0006Y\u0007X'X4X1Y\u0003X)X1X&Y\nX3Y\u0006X4Y\nX7Y\u0005X'X0X'X'Y\u0004Y\u0001Y\u0006X4X(X'X(X*X9X(X1X1X-Y\u0005X)Y\u0003X'Y\u0001X)Y\nY\u0002Y\u0008Y\u0004Y\u0005X1Y\u0003X2Y\u0003Y\u0004Y\u0005X)X#X-Y\u0005X/Y\u0002Y\u0004X(Y\nY\nX9Y\u0006Y\nX5Y\u0008X1X)X7X1Y\nY\u0002X4X'X1Y\u0003X,Y\u0008X'Y\u0004X#X.X1Y\tY\u0005X9Y\u0006X'X'X(X-X+X9X1Y\u0008X6X(X4Y\u0003Y\u0004Y\u0005X3X,Y\u0004X(Y\u0006X'Y\u0006X.X'Y\u0004X/Y\u0003X*X'X(Y\u0003Y\u0004Y\nX)X(X/Y\u0008Y\u0006X#Y\nX6X'Y\nY\u0008X,X/Y\u0001X1Y\nY\u0002Y\u0003X*X(X*X#Y\u0001X6Y\u0004Y\u0005X7X(X.X'Y\u0003X+X1X(X'X1Y\u0003X'Y\u0001X6Y\u0004X'X-Y\u0004Y\tY\u0006Y\u0001X3Y\u0007X#Y\nX'Y\u0005X1X/Y\u0008X/X#Y\u0006Y\u0007X'X/Y\nY\u0006X'X'Y\u0004X'Y\u0006Y\u0005X9X1X6X*X9Y\u0004Y\u0005X/X'X.Y\u0004Y\u0005Y\u0005Y\u0003Y\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0004\u0000\u0004\u0000\u0004\u0000\u0004\u0000\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0007\u0006\u0005\u0004\u0003\u0002\u0001\u0000\u0008\t\n\u000B\u000C\r\u000E\u000F\u000F\u000E\r\u000C\u000B\n\t\u0008\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0017\u0016\u0015\u0014\u0013\u0012\u0011\u0010\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u001F\u001E\u001D\u001C\u001B\u001A\u0019\u0018\u007F\u007F\u007F\u007F\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u007F\u007F\u007F\u007F\u0001\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u007F\u007F\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u007F\u007F\u0000\u0001\u0000\u0000\u0000\u0008\u0000\u0008\u0000\u0008\u0000\u0008\u0000\u0000\u0000\u0001\u0000\u0002\u0000\u0003\u0000\u0004\u0000\u0005\u0000\u0006\u0000\u0007resourcescountriesquestionsequipmentcommunityavailablehighlightDTD/xhtmlmarketingknowledgesomethingcontainerdirectionsubscribeadvertisecharacter\" value=\"</select>Australia\" class=\"situationauthorityfollowingprimarilyoperationchallengedevelopedanonymousfunction functionscompaniesstructureagreement\" title=\"potentialeducationargumentssecondarycopyrightlanguagesexclusivecondition</form>\r\nstatementattentionBiography} else {\nsolutionswhen the Analyticstemplatesdangeroussatellitedocumentspublisherimportantprototypeinfluence»</effectivegenerallytransformbeautifultransportorganizedpublishedprominentuntil thethumbnailNational .focus();over the migrationannouncedfooter\">\nexceptionless thanexpensiveformationframeworkterritoryndicationcurrentlyclassNamecriticismtraditionelsewhereAlexanderappointedmaterialsbroadcastmentionedaffiliate</option>treatmentdifferent/default.Presidentonclick=\"biographyotherwisepermanentFranC'aisHollywoodexpansionstandards</style>\nreductionDecember preferredCambridgeopponentsBusiness confusion>\n<title>presentedexplaineddoes not worldwideinterfacepositionsnewspaper</table>\nmountainslike the essentialfinancialselectionaction=\"/abandonedEducationparseInt(stabilityunable to\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper\">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabethdiscoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inheritedCommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish\nsuspectedmargin: 0spiritual\n\nmicrosoftgraduallydiscussedhe becameexecutivejquery.jshouseholdconfirmedpurchasedliterallydestroyedup to thevariationremainingit is notcenturiesJapanese among thecompletedalgorithminterestsrebellionundefinedencourageresizableinvolvingsensitiveuniversalprovision(althoughfeaturingconducted), which continued-header\">February numerous overflow:componentfragmentsexcellentcolspan=\"technicalnear the Advanced source ofexpressedHong Kong Facebookmultiple mechanismelevationoffensive\n\tsponsoreddocument.or "there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting\" width=\".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper\"enough toalong thedelivered-->\r\n\n\r\n
Archbishop class=\"nobeing usedapproachesprivilegesnoscript>\nresults inmay be theEaster eggmechanismsreasonablePopulationCollectionselected\">noscript>\r/index.phparrival of-jssdk'));managed toincompletecasualtiescompletionChristiansSeptember arithmeticproceduresmight haveProductionit appearsPhilosophyfriendshipleading togiving thetoward theguaranteeddocumentedcolor:#000video gamecommissionreflectingchange theassociatedsans-serifonkeypress; padding:He was theunderlyingtypically , and the srcElementsuccessivesince the should be networkingaccountinguse of thelower thanshows that\n\t\tcomplaintscontinuousquantitiesastronomerhe did notdue to itsapplied toan averageefforts tothe futureattempt toTherefore,capabilityRepublicanwas formedElectronickilometerschallengespublishingthe formerindigenousdirectionssubsidiaryconspiracydetails ofand in theaffordablesubstancesreason forconventionitemtype=\"absolutelysupposedlyremained aattractivetravellingseparatelyfocuses onelementaryapplicablefound thatstylesheetmanuscriptstands for no-repeat(sometimesCommercialin Americaundertakenquarter ofan examplepersonallyindex.php?\npercentagebest-knowncreating a\" dir=\"ltrLieutenant\n
is said tostructuralreferendummost oftena separate->\n
soundtracksearchFormtend to beinput id=\"opening ofrestrictedadopted byaddressingtheologianmethods ofvariant ofChristian very largeautomotiveby far therange frompursuit offollow thebrought toin Englandagree thataccused ofcomes frompreventingdiv style=his or hertremendousfreedom ofconcerning0 1em 1em;Basketball/style.cssan earliereven after/\" title=\".com/indextaking thepittsburghcontent\">\rimplementedcan be seenthere was ademonstratecontainer\">connectionsthe Britishwas written!important;px; margin-followed byability to complicatedduring the immigrationalso called

\n

acquisitioncalled the persecutiondesignation{font-size:appeared ininvestigateexperiencedmost likelywidely useddiscussionspresence of (document.extensivelyIt has beenit does notcontrary toinhabitantsimprovementscholarshipconsumptioninstructionfor exampleone or morepx; paddingthe currenta series ofare usuallyrole in thepreviously derivativesevidence ofexperiencescolorschemestated thatcertificate
\n selected=\"high schoolresponse tocomfortableadoption ofthree yearsthe countryin Februaryso that thepeople who provided by\nhaving been\r\n\r\n< "The compilationhe had beenproduced byphilosopherconstructedintended toamong othercompared toto say thatEngineeringa differentreferred todifferencesbelief thatphotographsidentifyingHistory of Republic ofnecessarilyprobabilitytechnicallyleaving thespectacularfraction ofelectricityhead of therestaurantspartnershipemphasis onmost recentshare with saying thatfilled withdesigned toit is often\">as follows:merged withthrough thecommercial pointed outopportunityview of therequirementdivision ofprogramminghe receivedsetInterval\">maintainingChristopherMuch of thewritings of\" height=\"2size of theversion of mixture of between theExamples ofeducationalcompetitive onsubmit=\"director ofdistinctive/DTD XHTML relating totendency toprovince ofwhich woulddespite thescientific legislature.innerHTML allegationsAgriculturewas used inapproach tointelligentyears later,sans-serifdeterminingPerformanceappearances, which is foundationsabbreviatedhigher thans from the individual composed ofsupposed toclaims thatattributionfont-size:1elements ofHistorical his brotherat the timeanniversarygoverned byrelated to ultimately innovationsit is stillcan only bedefinitionstoGMTStringA number ofimg class=\"Eventually,was changedoccurred inneighboringdistinguishwhen he wasintroducingterrestrialMany of theargues thatan Americanconquest ofwidespread were killedscreen and In order toexpected todescendantsare locatedlegislativegenerations backgroundmost peopleyears afterthere is nothe highestfrequently they do notargued thatshowed thatpredominanttheologicalby the timeconsideringshort-livedcan be usedvery littleone of the had alreadyinterpretedcommunicatefeatures ofgovernment,entered the\" height=\"3Independentpopulationslarge-scale. Although used in thedestructionpossibilitystarting intwo or moreexpressionssubordinatelarger thanhistory and\r\nContinentaleliminatingwill not bepractice ofin front ofsite of theensure thatto create amississippipotentiallyoutstandingbetter thanwhat is nowsituated inmeta name=\"TraditionalsuggestionsTranslationthe form ofatmosphericideologicalenterprisescalculatingeast of theremnants ofpluginspage/index.php?remained intransformedHe was alsowas alreadystatisticalin favor ofMinistry ofmovement offormulationis required\nquestion ofwas electedto become abecause of some peopleinspired bysuccessful a time whenmore commonamongst thean officialwidth:100%;technology,was adoptedto keep thesettlementslive birthsindex.html\"Connecticutassigned to&times;account foralign=rightthe companyalways beenreturned toinvolvementBecause thethis period\" name=\"q\" confined toa result ofvalue=\"\" />is actuallyEnvironment\r\n\r\nConversely,>\n
this is notthe presentif they areand finallya matter of\r\n\t
\r\n\r\nfaster thanmajority ofafter whichcomparativeto maintainimprove theawarded theer\" class=\"frameborderrestorationin the sameanalysis oftheir firstDuring the continentalsequence offunction(){font-size: work on the\nadopted theproperty ofdirected byeffectivelywas broughtchildren ofProgramminglonger thanmanuscriptswar againstby means ofand most ofsimilar to proprietaryoriginatingprestigiousgrammaticalexperience.to make theIt was alsois found incompetitorsin the U.S.replace thebrought thecalculationfall of thethe generalpracticallyin honor ofreleased inresidentialand some ofking of thereaction to1st Earl ofculture andprincipally\n they can beback to thesome of hisexposure toare similarform of theaddFavoritecitizenshippart in thepeople within practiceto continue&minus;approved by the first allowed theand for thefunctioningplaying thesolution toheight=\"0\" in his bookmore than afollows thecreated thepresence in nationalistthe idea ofa characterwere forced class=\"btndays of thefeatured inshowing theinterest inin place ofturn of thethe head ofLord of thepoliticallyhas its ownEducationalapproval ofsome of theeach other,behavior ofand becauseand anotherappeared onrecorded inblack"may includethe world'scan lead torefers to aborder=\"0\" government winning theresulted in while the Washington,the subjectcity in the>\r\n\t\treflect theto completebecame moreradioactiverejected bywithout anyhis father,which couldcopy of theto indicatea politicalaccounts ofconstitutesworked wither
of his lifeaccompaniedclientWidthprevent theLegislativedifferentlytogether inhas severalfor anothertext of thefounded thee with the is used forchanged theusually theplace wherewhereas the> \nHowever thelead to the\tThe currentthe site ofsubstantialexperience,in the Westthey shouldslovenD\rinacomentariosuniversidadcondicionesactividadesexperienciatecnologC-aproducciC3npuntuaciC3naplicaciC3ncontraseC1acategorC-asregistrarseprofesionaltratamientoregC-stratesecretarC-aprincipalesprotecciC3nimportantesimportanciaposibilidadinteresantecrecimientonecesidadessuscribirseasociaciC3ndisponiblesevaluaciC3nestudiantesresponsableresoluciC3nguadalajararegistradosoportunidadcomercialesfotografC-aautoridadesingenierC-atelevisiC3ncompetenciaoperacionesestablecidosimplementeactualmentenavegaciC3nconformidadline-height:font-family:\" : \"http://applicationslink\" href=\"specifically//\n/index.html\"window.open( !important;application/independence//www.googleorganizationautocompleterequirementsconservative
most notably/>notification'undefined')Furthermore,believe thatinnerHTML = prior to thedramaticallyreferring tonegotiationsheadquartersSouth AfricaunsuccessfulPennsylvaniaAs a result,\npadding-top:experimentalgetAttributeinstructionstechnologiespart of the =function(){subscriptionl.dtd\">\r\nEnglish (US)appendChild(transmissions. However, intelligence\" tabindex=\"float:right;Commonwealthranging fromin which theat least onereproductionencyclopedia;font-size:1jurisdictionat that time\">compensationchampionshipmedia=\"all\" violation ofreference toreturn true;Strict//EN\" transactionsinterventionverificationInformation difficultiesChampionshipcapabilities}\n\nChristianityfor example,Professionalrestrictionssuggest thatwas released(such as theremoveClass(unemploymentthe Americanstructure of/index.html published inspan class=\"\">\n\nf (document.border: 1px {font-size:1treatment of0\" height=\"1modificationIndependencedivided intogreater thanachievementsestablishingJavaScript\" neverthelesssignificanceBroadcasting> container\">\nsuch as the influence ofa particularsrc='http://navigation\" half of the substantial  advantage ofdiscovery offundamental metropolitanthe opposite\" xml:lang=\"deliberatelyalign=centerevolution ofpreservationimprovementsbeginning inJesus ChristPublicationsdisagreementtext-align:r, function()similaritiesbody>is currentlyalphabeticalis sometimestype=\"image/many of the flow:hidden;available indescribe theexistence ofall over thethe Internet\t"); this.element.attr('aria-activedescendant','j'+this._id+'_loading'); } this.load_node($.jstree.root, function (o, s) { if(s) { this.get_container_ul()[0].className = c; if(this._firstChild(this.get_container_ul()[0])) { this.element.attr('aria-activedescendant',this._firstChild(this.get_container_ul()[0]).id); } this.set_state($.extend(true, {}, this._data.core.state), function () { /** * triggered when a `refresh` call completes * @event * @name refresh.jstree */ this.trigger('refresh'); }); } this._data.core.state = null; }); }, /** * refreshes a node in the tree (reload its children) all opened nodes inside that node are reloaded with calls to `load_node`. * @name refresh_node(obj) * @param {mixed} obj the node * @trigger refresh_node.jstree */ refresh_node : function (obj) { obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } var opened = [], to_load = [], s = this._data.core.selected.concat([]); to_load.push(obj.id); if(obj.state.opened === true) { opened.push(obj.id); } this.get_node(obj, true).find('.jstree-open').each(function() { to_load.push(this.id); opened.push(this.id); }); this._load_nodes(to_load, $.proxy(function (nodes) { this.open_node(opened, false, 0); this.select_node(s); /** * triggered when a node is refreshed * @event * @name refresh_node.jstree * @param {Object} node - the refreshed node * @param {Array} nodes - an array of the IDs of the nodes that were reloaded */ this.trigger('refresh_node', { 'node' : obj, 'nodes' : nodes }); }, this), false, true); }, /** * set (change) the ID of a node * @name set_id(obj, id) * @param {mixed} obj the node * @param {String} id the new ID * @return {Boolean} * @trigger set_id.jstree */ set_id : function (obj, id) { obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } var i, j, m = this._model.data, old = obj.id; id = id.toString(); // update parents (replace current ID with new one in children and children_d) m[obj.parent].children[$.inArray(obj.id, m[obj.parent].children)] = id; for(i = 0, j = obj.parents.length; i < j; i++) { m[obj.parents[i]].children_d[$.inArray(obj.id, m[obj.parents[i]].children_d)] = id; } // update children (replace current ID with new one in parent and parents) for(i = 0, j = obj.children.length; i < j; i++) { m[obj.children[i]].parent = id; } for(i = 0, j = obj.children_d.length; i < j; i++) { m[obj.children_d[i]].parents[$.inArray(obj.id, m[obj.children_d[i]].parents)] = id; } i = $.inArray(obj.id, this._data.core.selected); if(i !== -1) { this._data.core.selected[i] = id; } // update model and obj itself (obj.id, this._model.data[KEY]) i = this.get_node(obj.id, true); if(i) { i.attr('id', id); //.children('.jstree-anchor').attr('id', id + '_anchor').end().attr('aria-labelledby', id + '_anchor'); if(this.element.attr('aria-activedescendant') === obj.id) { this.element.attr('aria-activedescendant', id); } } delete m[obj.id]; obj.id = id; obj.li_attr.id = id; m[id] = obj; /** * triggered when a node id value is changed * @event * @name set_id.jstree * @param {Object} node * @param {String} old the old id */ this.trigger('set_id',{ "node" : obj, "new" : obj.id, "old" : old }); return true; }, /** * get the text value of a node * @name get_text(obj) * @param {mixed} obj the node * @return {String} */ get_text : function (obj) { obj = this.get_node(obj); return (!obj || obj.id === $.jstree.root) ? false : obj.text; }, /** * set the text value of a node. Used internally, please use `rename_node(obj, val)`. * @private * @name set_text(obj, val) * @param {mixed} obj the node, you can pass an array to set the text on multiple nodes * @param {String} val the new text value * @return {Boolean} * @trigger set_text.jstree */ set_text : function (obj, val) { var t1, t2; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.set_text(obj[t1], val); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } obj.text = val; if(this.get_node(obj, true).length) { this.redraw_node(obj.id); } /** * triggered when a node text value is changed * @event * @name set_text.jstree * @param {Object} obj * @param {String} text the new value */ this.trigger('set_text',{ "obj" : obj, "text" : val }); return true; }, /** * gets a JSON representation of a node (or the whole tree) * @name get_json([obj, options]) * @param {mixed} obj * @param {Object} options * @param {Boolean} options.no_state do not return state information * @param {Boolean} options.no_id do not return ID * @param {Boolean} options.no_children do not include children * @param {Boolean} options.no_data do not include node data * @param {Boolean} options.no_li_attr do not include LI attributes * @param {Boolean} options.no_a_attr do not include A attributes * @param {Boolean} options.flat return flat JSON instead of nested * @return {Object} */ get_json : function (obj, options, flat) { obj = this.get_node(obj || $.jstree.root); if(!obj) { return false; } if(options && options.flat && !flat) { flat = []; } var tmp = { 'id' : obj.id, 'text' : obj.text, 'icon' : this.get_icon(obj), 'li_attr' : $.extend(true, {}, obj.li_attr), 'a_attr' : $.extend(true, {}, obj.a_attr), 'state' : {}, 'data' : options && options.no_data ? false : $.extend(true, $.isArray(obj.data)?[]:{}, obj.data) //( this.get_node(obj, true).length ? this.get_node(obj, true).data() : obj.data ), }, i, j; if(options && options.flat) { tmp.parent = obj.parent; } else { tmp.children = []; } if(!options || !options.no_state) { for(i in obj.state) { if(obj.state.hasOwnProperty(i)) { tmp.state[i] = obj.state[i]; } } } else { delete tmp.state; } if(options && options.no_li_attr) { delete tmp.li_attr; } if(options && options.no_a_attr) { delete tmp.a_attr; } if(options && options.no_id) { delete tmp.id; if(tmp.li_attr && tmp.li_attr.id) { delete tmp.li_attr.id; } if(tmp.a_attr && tmp.a_attr.id) { delete tmp.a_attr.id; } } if(options && options.flat && obj.id !== $.jstree.root) { flat.push(tmp); } if(!options || !options.no_children) { for(i = 0, j = obj.children.length; i < j; i++) { if(options && options.flat) { this.get_json(obj.children[i], options, flat); } else { tmp.children.push(this.get_json(obj.children[i], options)); } } } return options && options.flat ? flat : (obj.id === $.jstree.root ? tmp.children : tmp); }, /** * create a new node (do not confuse with load_node) * @name create_node([par, node, pos, callback, is_loaded]) * @param {mixed} par the parent node (to create a root node use either "#" (string) or `null`) * @param {mixed} node the data for the new node (a valid JSON object, or a simple string with the name) * @param {mixed} pos the index at which to insert the node, "first" and "last" are also supported, default is "last" * @param {Function} callback a function to be called once the node is created * @param {Boolean} is_loaded internal argument indicating if the parent node was succesfully loaded * @return {String} the ID of the newly create node * @trigger model.jstree, create_node.jstree */ create_node : function (par, node, pos, callback, is_loaded) { if(par === null) { par = $.jstree.root; } par = this.get_node(par); if(!par) { return false; } pos = pos === undefined ? "last" : pos; if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return this.load_node(par, function () { this.create_node(par, node, pos, callback, true); }); } if(!node) { node = { "text" : this.get_string('New node') }; } if(typeof node === "string") { node = { "text" : node }; } else { node = $.extend(true, {}, node); } if(node.text === undefined) { node.text = this.get_string('New node'); } var tmp, dpc, i, j; if(par.id === $.jstree.root) { if(pos === "before") { pos = "first"; } if(pos === "after") { pos = "last"; } } switch(pos) { case "before": tmp = this.get_node(par.parent); pos = $.inArray(par.id, tmp.children); par = tmp; break; case "after" : tmp = this.get_node(par.parent); pos = $.inArray(par.id, tmp.children) + 1; par = tmp; break; case "inside": case "first": pos = 0; break; case "last": pos = par.children.length; break; default: if(!pos) { pos = 0; } break; } if(pos > par.children.length) { pos = par.children.length; } if(!node.id) { node.id = true; } if(!this.check("create_node", node, par, pos)) { this.settings.core.error.call(this, this._data.core.last_error); return false; } if(node.id === true) { delete node.id; } node = this._parse_model_from_json(node, par.id, par.parents.concat()); if(!node) { return false; } tmp = this.get_node(node); dpc = []; dpc.push(node); dpc = dpc.concat(tmp.children_d); this.trigger('model', { "nodes" : dpc, "parent" : par.id }); par.children_d = par.children_d.concat(dpc); for(i = 0, j = par.parents.length; i < j; i++) { this._model.data[par.parents[i]].children_d = this._model.data[par.parents[i]].children_d.concat(dpc); } node = tmp; tmp = []; for(i = 0, j = par.children.length; i < j; i++) { tmp[i >= pos ? i+1 : i] = par.children[i]; } tmp[pos] = node.id; par.children = tmp; this.redraw_node(par, true); /** * triggered when a node is created * @event * @name create_node.jstree * @param {Object} node * @param {String} parent the parent's ID * @param {Number} position the position of the new node among the parent's children */ this.trigger('create_node', { "node" : this.get_node(node), "parent" : par.id, "position" : pos }); if(callback) { callback.call(this, this.get_node(node)); } return node.id; }, /** * set the text value of a node * @name rename_node(obj, val) * @param {mixed} obj the node, you can pass an array to rename multiple nodes to the same name * @param {String} val the new text value * @return {Boolean} * @trigger rename_node.jstree */ rename_node : function (obj, val) { var t1, t2, old; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.rename_node(obj[t1], val); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } old = obj.text; if(!this.check("rename_node", obj, this.get_parent(obj), val)) { this.settings.core.error.call(this, this._data.core.last_error); return false; } this.set_text(obj, val); // .apply(this, Array.prototype.slice.call(arguments)) /** * triggered when a node is renamed * @event * @name rename_node.jstree * @param {Object} node * @param {String} text the new value * @param {String} old the old value */ this.trigger('rename_node', { "node" : obj, "text" : val, "old" : old }); return true; }, /** * remove a node * @name delete_node(obj) * @param {mixed} obj the node, you can pass an array to delete multiple nodes * @return {Boolean} * @trigger delete_node.jstree, changed.jstree */ delete_node : function (obj) { var t1, t2, par, pos, tmp, i, j, k, l, c, top, lft; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.delete_node(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } par = this.get_node(obj.parent); pos = $.inArray(obj.id, par.children); c = false; if(!this.check("delete_node", obj, par, pos)) { this.settings.core.error.call(this, this._data.core.last_error); return false; } if(pos !== -1) { par.children = $.vakata.array_remove(par.children, pos); } tmp = obj.children_d.concat([]); tmp.push(obj.id); for(i = 0, j = obj.parents.length; i < j; i++) { this._model.data[obj.parents[i]].children_d = $.vakata.array_filter(this._model.data[obj.parents[i]].children_d, function (v) { return $.inArray(v, tmp) === -1; }); } for(k = 0, l = tmp.length; k < l; k++) { if(this._model.data[tmp[k]].state.selected) { c = true; break; } } if (c) { this._data.core.selected = $.vakata.array_filter(this._data.core.selected, function (v) { return $.inArray(v, tmp) === -1; }); } /** * triggered when a node is deleted * @event * @name delete_node.jstree * @param {Object} node * @param {String} parent the parent's ID */ this.trigger('delete_node', { "node" : obj, "parent" : par.id }); if(c) { this.trigger('changed', { 'action' : 'delete_node', 'node' : obj, 'selected' : this._data.core.selected, 'parent' : par.id }); } for(k = 0, l = tmp.length; k < l; k++) { delete this._model.data[tmp[k]]; } if($.inArray(this._data.core.focused, tmp) !== -1) { this._data.core.focused = null; top = this.element[0].scrollTop; lft = this.element[0].scrollLeft; if(par.id === $.jstree.root) { if (this._model.data[$.jstree.root].children[0]) { this.get_node(this._model.data[$.jstree.root].children[0], true).children('.jstree-anchor').focus(); } } else { this.get_node(par, true).children('.jstree-anchor').focus(); } this.element[0].scrollTop = top; this.element[0].scrollLeft = lft; } this.redraw_node(par, true); return true; }, /** * check if an operation is premitted on the tree. Used internally. * @private * @name check(chk, obj, par, pos) * @param {String} chk the operation to check, can be "create_node", "rename_node", "delete_node", "copy_node" or "move_node" * @param {mixed} obj the node * @param {mixed} par the parent * @param {mixed} pos the position to insert at, or if "rename_node" - the new name * @param {mixed} more some various additional information, for example if a "move_node" operations is triggered by DND this will be the hovered node * @return {Boolean} */ check : function (chk, obj, par, pos, more) { obj = obj && obj.id ? obj : this.get_node(obj); par = par && par.id ? par : this.get_node(par); var tmp = chk.match(/^move_node|copy_node|create_node$/i) ? par : obj, chc = this.settings.core.check_callback; if(chk === "move_node" || chk === "copy_node") { if((!more || !more.is_multi) && (chk === "move_node" && $.inArray(obj.id, par.children) === pos)) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_08', 'reason' : 'Moving node to its current position', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } if((!more || !more.is_multi) && (obj.id === par.id || (chk === "move_node" && $.inArray(obj.id, par.children) === pos) || $.inArray(par.id, obj.children_d) !== -1)) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_01', 'reason' : 'Moving parent inside child', 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } } if(tmp && tmp.data) { tmp = tmp.data; } if(tmp && tmp.functions && (tmp.functions[chk] === false || tmp.functions[chk] === true)) { if(tmp.functions[chk] === false) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_02', 'reason' : 'Node data prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return tmp.functions[chk]; } if(chc === false || ($.isFunction(chc) && chc.call(this, chk, obj, par, pos, more) === false) || (chc && chc[chk] === false)) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'core', 'id' : 'core_03', 'reason' : 'User config for core.check_callback prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } return true; }, /** * get the last error * @name last_error() * @return {Object} */ last_error : function () { return this._data.core.last_error; }, /** * move a node to a new parent * @name move_node(obj, par [, pos, callback, is_loaded]) * @param {mixed} obj the node to move, pass an array to move multiple nodes * @param {mixed} par the new parent * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn * @param {Boolean} instance internal parameter indicating if the node comes from another instance * @trigger move_node.jstree */ move_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { var t1, t2, old_par, old_pos, new_par, old_ins, is_multi, dpc, tmp, i, j, k, l, p; par = this.get_node(par); pos = pos === undefined ? 0 : pos; if(!par) { return false; } if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return this.load_node(par, function () { this.move_node(obj, par, pos, callback, true, false, origin); }); } if($.isArray(obj)) { if(obj.length === 1) { obj = obj[0]; } else { //obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { if((tmp = this.move_node(obj[t1], par, pos, callback, is_loaded, false, origin))) { par = tmp; pos = "after"; } } this.redraw(); return true; } } obj = obj && obj.id ? obj : this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } old_par = (obj.parent || $.jstree.root).toString(); new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); old_pos = old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1; if(old_ins && old_ins._id) { obj = old_ins._model.data[obj.id]; } if(is_multi) { if((tmp = this.copy_node(obj, par, pos, callback, is_loaded, false, origin))) { if(old_ins) { old_ins.delete_node(obj); } return tmp; } return false; } //var m = this._model.data; if(par.id === $.jstree.root) { if(pos === "before") { pos = "first"; } if(pos === "after") { pos = "last"; } } switch(pos) { case "before": pos = $.inArray(par.id, new_par.children); break; case "after" : pos = $.inArray(par.id, new_par.children) + 1; break; case "inside": case "first": pos = 0; break; case "last": pos = new_par.children.length; break; default: if(!pos) { pos = 0; } break; } if(pos > new_par.children.length) { pos = new_par.children.length; } if(!this.check("move_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { this.settings.core.error.call(this, this._data.core.last_error); return false; } if(obj.parent === new_par.id) { dpc = new_par.children.concat(); tmp = $.inArray(obj.id, dpc); if(tmp !== -1) { dpc = $.vakata.array_remove(dpc, tmp); if(pos > tmp) { pos--; } } tmp = []; for(i = 0, j = dpc.length; i < j; i++) { tmp[i >= pos ? i+1 : i] = dpc[i]; } tmp[pos] = obj.id; new_par.children = tmp; this._node_changed(new_par.id); this.redraw(new_par.id === $.jstree.root); } else { // clean old parent and up tmp = obj.children_d.concat(); tmp.push(obj.id); for(i = 0, j = obj.parents.length; i < j; i++) { dpc = []; p = old_ins._model.data[obj.parents[i]].children_d; for(k = 0, l = p.length; k < l; k++) { if($.inArray(p[k], tmp) === -1) { dpc.push(p[k]); } } old_ins._model.data[obj.parents[i]].children_d = dpc; } old_ins._model.data[old_par].children = $.vakata.array_remove_item(old_ins._model.data[old_par].children, obj.id); // insert into new parent and up for(i = 0, j = new_par.parents.length; i < j; i++) { this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(tmp); } dpc = []; for(i = 0, j = new_par.children.length; i < j; i++) { dpc[i >= pos ? i+1 : i] = new_par.children[i]; } dpc[pos] = obj.id; new_par.children = dpc; new_par.children_d.push(obj.id); new_par.children_d = new_par.children_d.concat(obj.children_d); // update object obj.parent = new_par.id; tmp = new_par.parents.concat(); tmp.unshift(new_par.id); p = obj.parents.length; obj.parents = tmp; // update object children tmp = tmp.concat(); for(i = 0, j = obj.children_d.length; i < j; i++) { this._model.data[obj.children_d[i]].parents = this._model.data[obj.children_d[i]].parents.slice(0,p*-1); Array.prototype.push.apply(this._model.data[obj.children_d[i]].parents, tmp); } if(old_par === $.jstree.root || new_par.id === $.jstree.root) { this._model.force_full_redraw = true; } if(!this._model.force_full_redraw) { this._node_changed(old_par); this._node_changed(new_par.id); } if(!skip_redraw) { this.redraw(); } } if(callback) { callback.call(this, obj, new_par, pos); } /** * triggered when a node is moved * @event * @name move_node.jstree * @param {Object} node * @param {String} parent the parent's ID * @param {Number} position the position of the node among the parent's children * @param {String} old_parent the old parent of the node * @param {Number} old_position the old position of the node * @param {Boolean} is_multi do the node and new parent belong to different instances * @param {jsTree} old_instance the instance the node came from * @param {jsTree} new_instance the instance of the new parent */ this.trigger('move_node', { "node" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_pos, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); return obj.id; }, /** * copy a node to a new parent * @name copy_node(obj, par [, pos, callback, is_loaded]) * @param {mixed} obj the node to copy, pass an array to copy multiple nodes * @param {mixed} par the new parent * @param {mixed} pos the position to insert at (besides integer values, "first" and "last" are supported, as well as "before" and "after"), defaults to integer `0` * @param {function} callback a function to call once the move is completed, receives 3 arguments - the node, the new parent and the position * @param {Boolean} is_loaded internal parameter indicating if the parent node has been loaded * @param {Boolean} skip_redraw internal parameter indicating if the tree should be redrawn * @param {Boolean} instance internal parameter indicating if the node comes from another instance * @trigger model.jstree copy_node.jstree */ copy_node : function (obj, par, pos, callback, is_loaded, skip_redraw, origin) { var t1, t2, dpc, tmp, i, j, node, old_par, new_par, old_ins, is_multi; par = this.get_node(par); pos = pos === undefined ? 0 : pos; if(!par) { return false; } if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return this.load_node(par, function () { this.copy_node(obj, par, pos, callback, true, false, origin); }); } if($.isArray(obj)) { if(obj.length === 1) { obj = obj[0]; } else { //obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { if((tmp = this.copy_node(obj[t1], par, pos, callback, is_loaded, true, origin))) { par = tmp; pos = "after"; } } this.redraw(); return true; } } obj = obj && obj.id ? obj : this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } old_par = (obj.parent || $.jstree.root).toString(); new_par = (!pos.toString().match(/^(before|after)$/) || par.id === $.jstree.root) ? par : this.get_node(par.parent); old_ins = origin ? origin : (this._model.data[obj.id] ? this : $.jstree.reference(obj.id)); is_multi = !old_ins || !old_ins._id || (this._id !== old_ins._id); if(old_ins && old_ins._id) { obj = old_ins._model.data[obj.id]; } if(par.id === $.jstree.root) { if(pos === "before") { pos = "first"; } if(pos === "after") { pos = "last"; } } switch(pos) { case "before": pos = $.inArray(par.id, new_par.children); break; case "after" : pos = $.inArray(par.id, new_par.children) + 1; break; case "inside": case "first": pos = 0; break; case "last": pos = new_par.children.length; break; default: if(!pos) { pos = 0; } break; } if(pos > new_par.children.length) { pos = new_par.children.length; } if(!this.check("copy_node", obj, new_par, pos, { 'core' : true, 'origin' : origin, 'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id) })) { this.settings.core.error.call(this, this._data.core.last_error); return false; } node = old_ins ? old_ins.get_json(obj, { no_id : true, no_data : true, no_state : true }) : obj; if(!node) { return false; } if(node.id === true) { delete node.id; } node = this._parse_model_from_json(node, new_par.id, new_par.parents.concat()); if(!node) { return false; } tmp = this.get_node(node); if(obj && obj.state && obj.state.loaded === false) { tmp.state.loaded = false; } dpc = []; dpc.push(node); dpc = dpc.concat(tmp.children_d); this.trigger('model', { "nodes" : dpc, "parent" : new_par.id }); // insert into new parent and up for(i = 0, j = new_par.parents.length; i < j; i++) { this._model.data[new_par.parents[i]].children_d = this._model.data[new_par.parents[i]].children_d.concat(dpc); } dpc = []; for(i = 0, j = new_par.children.length; i < j; i++) { dpc[i >= pos ? i+1 : i] = new_par.children[i]; } dpc[pos] = tmp.id; new_par.children = dpc; new_par.children_d.push(tmp.id); new_par.children_d = new_par.children_d.concat(tmp.children_d); if(new_par.id === $.jstree.root) { this._model.force_full_redraw = true; } if(!this._model.force_full_redraw) { this._node_changed(new_par.id); } if(!skip_redraw) { this.redraw(new_par.id === $.jstree.root); } if(callback) { callback.call(this, tmp, new_par, pos); } /** * triggered when a node is copied * @event * @name copy_node.jstree * @param {Object} node the copied node * @param {Object} original the original node * @param {String} parent the parent's ID * @param {Number} position the position of the node among the parent's children * @param {String} old_parent the old parent of the node * @param {Number} old_position the position of the original node * @param {Boolean} is_multi do the node and new parent belong to different instances * @param {jsTree} old_instance the instance the node came from * @param {jsTree} new_instance the instance of the new parent */ this.trigger('copy_node', { "node" : tmp, "original" : obj, "parent" : new_par.id, "position" : pos, "old_parent" : old_par, "old_position" : old_ins && old_ins._id && old_par && old_ins._model.data[old_par] && old_ins._model.data[old_par].children ? $.inArray(obj.id, old_ins._model.data[old_par].children) : -1,'is_multi' : (old_ins && old_ins._id && old_ins._id !== this._id), 'is_foreign' : (!old_ins || !old_ins._id), 'old_instance' : old_ins, 'new_instance' : this }); return tmp.id; }, /** * cut a node (a later call to `paste(obj)` would move the node) * @name cut(obj) * @param {mixed} obj multiple objects can be passed using an array * @trigger cut.jstree */ cut : function (obj) { if(!obj) { obj = this._data.core.selected.concat(); } if(!$.isArray(obj)) { obj = [obj]; } if(!obj.length) { return false; } var tmp = [], o, t1, t2; for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { o = this.get_node(obj[t1]); if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } } if(!tmp.length) { return false; } ccp_node = tmp; ccp_inst = this; ccp_mode = 'move_node'; /** * triggered when nodes are added to the buffer for moving * @event * @name cut.jstree * @param {Array} node */ this.trigger('cut', { "node" : obj }); }, /** * copy a node (a later call to `paste(obj)` would copy the node) * @name copy(obj) * @param {mixed} obj multiple objects can be passed using an array * @trigger copy.jstree */ copy : function (obj) { if(!obj) { obj = this._data.core.selected.concat(); } if(!$.isArray(obj)) { obj = [obj]; } if(!obj.length) { return false; } var tmp = [], o, t1, t2; for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { o = this.get_node(obj[t1]); if(o && o.id && o.id !== $.jstree.root) { tmp.push(o); } } if(!tmp.length) { return false; } ccp_node = tmp; ccp_inst = this; ccp_mode = 'copy_node'; /** * triggered when nodes are added to the buffer for copying * @event * @name copy.jstree * @param {Array} node */ this.trigger('copy', { "node" : obj }); }, /** * get the current buffer (any nodes that are waiting for a paste operation) * @name get_buffer() * @return {Object} an object consisting of `mode` ("copy_node" or "move_node"), `node` (an array of objects) and `inst` (the instance) */ get_buffer : function () { return { 'mode' : ccp_mode, 'node' : ccp_node, 'inst' : ccp_inst }; }, /** * check if there is something in the buffer to paste * @name can_paste() * @return {Boolean} */ can_paste : function () { return ccp_mode !== false && ccp_node !== false; // && ccp_inst._model.data[ccp_node]; }, /** * copy or move the previously cut or copied nodes to a new parent * @name paste(obj [, pos]) * @param {mixed} obj the new parent * @param {mixed} pos the position to insert at (besides integer, "first" and "last" are supported), defaults to integer `0` * @trigger paste.jstree */ paste : function (obj, pos) { obj = this.get_node(obj); if(!obj || !ccp_mode || !ccp_mode.match(/^(copy_node|move_node)$/) || !ccp_node) { return false; } if(this[ccp_mode](ccp_node, obj, pos, false, false, false, ccp_inst)) { /** * triggered when paste is invoked * @event * @name paste.jstree * @param {String} parent the ID of the receiving node * @param {Array} node the nodes in the buffer * @param {String} mode the performed operation - "copy_node" or "move_node" */ this.trigger('paste', { "parent" : obj.id, "node" : ccp_node, "mode" : ccp_mode }); } ccp_node = false; ccp_mode = false; ccp_inst = false; }, /** * clear the buffer of previously copied or cut nodes * @name clear_buffer() * @trigger clear_buffer.jstree */ clear_buffer : function () { ccp_node = false; ccp_mode = false; ccp_inst = false; /** * triggered when the copy / cut buffer is cleared * @event * @name clear_buffer.jstree */ this.trigger('clear_buffer'); }, /** * put a node in edit mode (input field to rename the node) * @name edit(obj [, default_text, callback]) * @param {mixed} obj * @param {String} default_text the text to populate the input with (if omitted or set to a non-string value the node's text value is used) * @param {Function} callback a function to be called once the text box is blurred, it is called in the instance's scope and receives the node, a status parameter (true if the rename is successful, false otherwise) and a boolean indicating if the user cancelled the edit. You can access the node's title using .text */ edit : function (obj, default_text, callback) { var rtl, w, a, s, t, h1, h2, fn, tmp, cancel = false; obj = this.get_node(obj); if(!obj) { return false; } if(!this.check("edit", obj, this.get_parent(obj))) { this.settings.core.error.call(this, this._data.core.last_error); return false; } tmp = obj; default_text = typeof default_text === 'string' ? default_text : obj.text; this.set_text(obj, ""); obj = this._open_to(obj); tmp.text = default_text; rtl = this._data.core.rtl; w = this.element.width(); this._data.core.focused = tmp.id; a = obj.children('.jstree-anchor').focus(); s = $(''); /*! oi = obj.children("i:visible"), ai = a.children("i:visible"), w1 = oi.width() * oi.length, w2 = ai.width() * ai.length, */ t = default_text; h1 = $("<"+"div />", { css : { "position" : "absolute", "top" : "-200px", "left" : (rtl ? "0px" : "-1000px"), "visibility" : "hidden" } }).appendTo(document.body); h2 = $("<"+"input />", { "value" : t, "class" : "jstree-rename-input", // "size" : t.length, "css" : { "padding" : "0", "border" : "1px solid silver", "box-sizing" : "border-box", "display" : "inline-block", "height" : (this._data.core.li_height) + "px", "lineHeight" : (this._data.core.li_height) + "px", "width" : "150px" // will be set a bit further down }, "blur" : $.proxy(function (e) { e.stopImmediatePropagation(); e.preventDefault(); var i = s.children(".jstree-rename-input"), v = i.val(), f = this.settings.core.force_text, nv; if(v === "") { v = t; } h1.remove(); s.replaceWith(a); s.remove(); t = f ? t : $('
').append($.parseHTML(t)).html(); obj = this.get_node(obj); this.set_text(obj, t); nv = !!this.rename_node(obj, f ? $('
').text(v).text() : $('
').append($.parseHTML(v)).html()); if(!nv) { this.set_text(obj, t); // move this up? and fix #483 } this._data.core.focused = tmp.id; setTimeout($.proxy(function () { var node = this.get_node(tmp.id, true); if(node.length) { this._data.core.focused = tmp.id; node.children('.jstree-anchor').focus(); } }, this), 0); if(callback) { callback.call(this, tmp, nv, cancel); } h2 = null; }, this), "keydown" : function (e) { var key = e.which; if(key === 27) { cancel = true; this.value = t; } if(key === 27 || key === 13 || key === 37 || key === 38 || key === 39 || key === 40 || key === 32) { e.stopImmediatePropagation(); } if(key === 27 || key === 13) { e.preventDefault(); this.blur(); } }, "click" : function (e) { e.stopImmediatePropagation(); }, "mousedown" : function (e) { e.stopImmediatePropagation(); }, "keyup" : function (e) { h2.width(Math.min(h1.text("pW" + this.value).width(),w)); }, "keypress" : function(e) { if(e.which === 13) { return false; } } }); fn = { fontFamily : a.css('fontFamily') || '', fontSize : a.css('fontSize') || '', fontWeight : a.css('fontWeight') || '', fontStyle : a.css('fontStyle') || '', fontStretch : a.css('fontStretch') || '', fontVariant : a.css('fontVariant') || '', letterSpacing : a.css('letterSpacing') || '', wordSpacing : a.css('wordSpacing') || '' }; s.attr('class', a.attr('class')).append(a.contents().clone()).append(h2); a.replaceWith(s); h1.css(fn); h2.css(fn).width(Math.min(h1.text("pW" + h2[0].value).width(),w))[0].select(); $(document).one('mousedown.jstree touchstart.jstree dnd_start.vakata', function (e) { if (h2 && e.target !== h2) { $(h2).blur(); } }); }, /** * changes the theme * @name set_theme(theme_name [, theme_url]) * @param {String} theme_name the name of the new theme to apply * @param {mixed} theme_url the location of the CSS file for this theme. Omit or set to `false` if you manually included the file. Set to `true` to autoload from the `core.themes.dir` directory. * @trigger set_theme.jstree */ set_theme : function (theme_name, theme_url) { if(!theme_name) { return false; } if(theme_url === true) { var dir = this.settings.core.themes.dir; if(!dir) { dir = $.jstree.path + '/themes'; } theme_url = dir + '/' + theme_name + '/style.css'; } if(theme_url && $.inArray(theme_url, themes_loaded) === -1) { $('head').append('<'+'link rel="stylesheet" href="' + theme_url + '" type="text/css" />'); themes_loaded.push(theme_url); } if(this._data.core.themes.name) { this.element.removeClass('jstree-' + this._data.core.themes.name); } this._data.core.themes.name = theme_name; this.element.addClass('jstree-' + theme_name); this.element[this.settings.core.themes.responsive ? 'addClass' : 'removeClass' ]('jstree-' + theme_name + '-responsive'); /** * triggered when a theme is set * @event * @name set_theme.jstree * @param {String} theme the new theme */ this.trigger('set_theme', { 'theme' : theme_name }); }, /** * gets the name of the currently applied theme name * @name get_theme() * @return {String} */ get_theme : function () { return this._data.core.themes.name; }, /** * changes the theme variant (if the theme has variants) * @name set_theme_variant(variant_name) * @param {String|Boolean} variant_name the variant to apply (if `false` is used the current variant is removed) */ set_theme_variant : function (variant_name) { if(this._data.core.themes.variant) { this.element.removeClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); } this._data.core.themes.variant = variant_name; if(variant_name) { this.element.addClass('jstree-' + this._data.core.themes.name + '-' + this._data.core.themes.variant); } }, /** * gets the name of the currently applied theme variant * @name get_theme() * @return {String} */ get_theme_variant : function () { return this._data.core.themes.variant; }, /** * shows a striped background on the container (if the theme supports it) * @name show_stripes() */ show_stripes : function () { this._data.core.themes.stripes = true; this.get_container_ul().addClass("jstree-striped"); /** * triggered when stripes are shown * @event * @name show_stripes.jstree */ this.trigger('show_stripes'); }, /** * hides the striped background on the container * @name hide_stripes() */ hide_stripes : function () { this._data.core.themes.stripes = false; this.get_container_ul().removeClass("jstree-striped"); /** * triggered when stripes are hidden * @event * @name hide_stripes.jstree */ this.trigger('hide_stripes'); }, /** * toggles the striped background on the container * @name toggle_stripes() */ toggle_stripes : function () { if(this._data.core.themes.stripes) { this.hide_stripes(); } else { this.show_stripes(); } }, /** * shows the connecting dots (if the theme supports it) * @name show_dots() */ show_dots : function () { this._data.core.themes.dots = true; this.get_container_ul().removeClass("jstree-no-dots"); /** * triggered when dots are shown * @event * @name show_dots.jstree */ this.trigger('show_dots'); }, /** * hides the connecting dots * @name hide_dots() */ hide_dots : function () { this._data.core.themes.dots = false; this.get_container_ul().addClass("jstree-no-dots"); /** * triggered when dots are hidden * @event * @name hide_dots.jstree */ this.trigger('hide_dots'); }, /** * toggles the connecting dots * @name toggle_dots() */ toggle_dots : function () { if(this._data.core.themes.dots) { this.hide_dots(); } else { this.show_dots(); } }, /** * show the node icons * @name show_icons() */ show_icons : function () { this._data.core.themes.icons = true; this.get_container_ul().removeClass("jstree-no-icons"); /** * triggered when icons are shown * @event * @name show_icons.jstree */ this.trigger('show_icons'); }, /** * hide the node icons * @name hide_icons() */ hide_icons : function () { this._data.core.themes.icons = false; this.get_container_ul().addClass("jstree-no-icons"); /** * triggered when icons are hidden * @event * @name hide_icons.jstree */ this.trigger('hide_icons'); }, /** * toggle the node icons * @name toggle_icons() */ toggle_icons : function () { if(this._data.core.themes.icons) { this.hide_icons(); } else { this.show_icons(); } }, /** * show the node ellipsis * @name show_icons() */ show_ellipsis : function () { this._data.core.themes.ellipsis = true; this.get_container_ul().addClass("jstree-ellipsis"); /** * triggered when ellisis is shown * @event * @name show_ellipsis.jstree */ this.trigger('show_ellipsis'); }, /** * hide the node ellipsis * @name hide_ellipsis() */ hide_ellipsis : function () { this._data.core.themes.ellipsis = false; this.get_container_ul().removeClass("jstree-ellipsis"); /** * triggered when ellisis is hidden * @event * @name hide_ellipsis.jstree */ this.trigger('hide_ellipsis'); }, /** * toggle the node ellipsis * @name toggle_icons() */ toggle_ellipsis : function () { if(this._data.core.themes.ellipsis) { this.hide_ellipsis(); } else { this.show_ellipsis(); } }, /** * set the node icon for a node * @name set_icon(obj, icon) * @param {mixed} obj * @param {String} icon the new icon - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class */ set_icon : function (obj, icon) { var t1, t2, dom, old; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.set_icon(obj[t1], icon); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } old = obj.icon; obj.icon = icon === true || icon === null || icon === undefined || icon === '' ? true : icon; dom = this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon"); if(icon === false) { dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); this.hide_icon(obj); } else if(icon === true || icon === null || icon === undefined || icon === '') { dom.removeClass('jstree-themeicon-custom ' + old).css("background","").removeAttr("rel"); if(old === false) { this.show_icon(obj); } } else if(icon.indexOf("/") === -1 && icon.indexOf(".") === -1) { dom.removeClass(old).css("background",""); dom.addClass(icon + ' jstree-themeicon-custom').attr("rel",icon); if(old === false) { this.show_icon(obj); } } else { dom.removeClass(old).css("background",""); dom.addClass('jstree-themeicon-custom').css("background", "url('" + icon + "') center center no-repeat").attr("rel",icon); if(old === false) { this.show_icon(obj); } } return true; }, /** * get the node icon for a node * @name get_icon(obj) * @param {mixed} obj * @return {String} */ get_icon : function (obj) { obj = this.get_node(obj); return (!obj || obj.id === $.jstree.root) ? false : obj.icon; }, /** * hide the icon on an individual node * @name hide_icon(obj) * @param {mixed} obj */ hide_icon : function (obj) { var t1, t2; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.hide_icon(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj === $.jstree.root) { return false; } obj.icon = false; this.get_node(obj, true).children(".jstree-anchor").children(".jstree-themeicon").addClass('jstree-themeicon-hidden'); return true; }, /** * show the icon on an individual node * @name show_icon(obj) * @param {mixed} obj */ show_icon : function (obj) { var t1, t2, dom; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.show_icon(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj === $.jstree.root) { return false; } dom = this.get_node(obj, true); obj.icon = dom.length ? dom.children(".jstree-anchor").children(".jstree-themeicon").attr('rel') : true; if(!obj.icon) { obj.icon = true; } dom.children(".jstree-anchor").children(".jstree-themeicon").removeClass('jstree-themeicon-hidden'); return true; } }; // helpers $.vakata = {}; // collect attributes $.vakata.attributes = function(node, with_values) { node = $(node)[0]; var attr = with_values ? {} : []; if(node && node.attributes) { $.each(node.attributes, function (i, v) { if($.inArray(v.name.toLowerCase(),['style','contenteditable','hasfocus','tabindex']) !== -1) { return; } if(v.value !== null && $.trim(v.value) !== '') { if(with_values) { attr[v.name] = v.value; } else { attr.push(v.name); } } }); } return attr; }; $.vakata.array_unique = function(array) { var a = [], i, j, l, o = {}; for(i = 0, l = array.length; i < l; i++) { if(o[array[i]] === undefined) { a.push(array[i]); o[array[i]] = true; } } return a; }; // remove item from array $.vakata.array_remove = function(array, from) { array.splice(from, 1); return array; //var rest = array.slice((to || from) + 1 || array.length); //array.length = from < 0 ? array.length + from : from; //array.push.apply(array, rest); //return array; }; // remove item from array $.vakata.array_remove_item = function(array, item) { var tmp = $.inArray(item, array); return tmp !== -1 ? $.vakata.array_remove(array, tmp) : array; }; $.vakata.array_filter = function(c,a,b,d,e) { if (c.filter) { return c.filter(a, b); } d=[]; for (e in c) { if (~~e+''===e+'' && e>=0 && a.call(b,c[e],+e,c)) { d.push(c[e]); } } return d; }; /** * ### Changed plugin * * This plugin adds more information to the `changed.jstree` event. The new data is contained in the `changed` event data property, and contains a lists of `selected` and `deselected` nodes. */ $.jstree.plugins.changed = function (options, parent) { var last = []; this.trigger = function (ev, data) { var i, j; if(!data) { data = {}; } if(ev.replace('.jstree','') === 'changed') { data.changed = { selected : [], deselected : [] }; var tmp = {}; for(i = 0, j = last.length; i < j; i++) { tmp[last[i]] = 1; } for(i = 0, j = data.selected.length; i < j; i++) { if(!tmp[data.selected[i]]) { data.changed.selected.push(data.selected[i]); } else { tmp[data.selected[i]] = 2; } } for(i = 0, j = last.length; i < j; i++) { if(tmp[last[i]] === 1) { data.changed.deselected.push(last[i]); } } last = data.selected.slice(); } /** * triggered when selection changes (the "changed" plugin enhances the original event with more data) * @event * @name changed.jstree * @param {Object} node * @param {Object} action the action that caused the selection to change * @param {Array} selected the current selection * @param {Object} changed an object containing two properties `selected` and `deselected` - both arrays of node IDs, which were selected or deselected since the last changed event * @param {Object} event the event (if any) that triggered this changed event * @plugin changed */ parent.trigger.call(this, ev, data); }; this.refresh = function (skip_loading, forget_state) { last = []; return parent.refresh.apply(this, arguments); }; }; /** * ### Checkbox plugin * * This plugin renders checkbox icons in front of each node, making multiple selection much easier. * It also supports tri-state behavior, meaning that if a node has a few of its children checked it will be rendered as undetermined, and state will be propagated up. */ var _i = document.createElement('I'); _i.className = 'jstree-icon jstree-checkbox'; _i.setAttribute('role', 'presentation'); /** * stores all defaults for the checkbox plugin * @name $.jstree.defaults.checkbox * @plugin checkbox */ $.jstree.defaults.checkbox = { /** * a boolean indicating if checkboxes should be visible (can be changed at a later time using `show_checkboxes()` and `hide_checkboxes`). Defaults to `true`. * @name $.jstree.defaults.checkbox.visible * @plugin checkbox */ visible : true, /** * a boolean indicating if checkboxes should cascade down and have an undetermined state. Defaults to `true`. * @name $.jstree.defaults.checkbox.three_state * @plugin checkbox */ three_state : true, /** * a boolean indicating if clicking anywhere on the node should act as clicking on the checkbox. Defaults to `true`. * @name $.jstree.defaults.checkbox.whole_node * @plugin checkbox */ whole_node : true, /** * a boolean indicating if the selected style of a node should be kept, or removed. Defaults to `true`. * @name $.jstree.defaults.checkbox.keep_selected_style * @plugin checkbox */ keep_selected_style : true, /** * This setting controls how cascading and undetermined nodes are applied. * If 'up' is in the string - cascading up is enabled, if 'down' is in the string - cascading down is enabled, if 'undetermined' is in the string - undetermined nodes will be used. * If `three_state` is set to `true` this setting is automatically set to 'up+down+undetermined'. Defaults to ''. * @name $.jstree.defaults.checkbox.cascade * @plugin checkbox */ cascade : '', /** * This setting controls if checkbox are bound to the general tree selection or to an internal array maintained by the checkbox plugin. Defaults to `true`, only set to `false` if you know exactly what you are doing. * @name $.jstree.defaults.checkbox.tie_selection * @plugin checkbox */ tie_selection : true, /** * This setting controls if cascading down affects disabled checkboxes * @name $.jstree.defaults.checkbox.cascade_to_disabled * @plugin checkbox */ cascade_to_disabled : true, /** * This setting controls if cascading down affects hidden checkboxes * @name $.jstree.defaults.checkbox.cascade_to_hidden * @plugin checkbox */ cascade_to_hidden : true }; $.jstree.plugins.checkbox = function (options, parent) { this.bind = function () { parent.bind.call(this); this._data.checkbox.uto = false; this._data.checkbox.selected = []; if(this.settings.checkbox.three_state) { this.settings.checkbox.cascade = 'up+down+undetermined'; } this.element .on("init.jstree", $.proxy(function () { this._data.checkbox.visible = this.settings.checkbox.visible; if(!this.settings.checkbox.keep_selected_style) { this.element.addClass('jstree-checkbox-no-clicked'); } if(this.settings.checkbox.tie_selection) { this.element.addClass('jstree-checkbox-selection'); } }, this)) .on("loading.jstree", $.proxy(function () { this[ this._data.checkbox.visible ? 'show_checkboxes' : 'hide_checkboxes' ](); }, this)); if(this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { this.element .on('changed.jstree uncheck_node.jstree check_node.jstree uncheck_all.jstree check_all.jstree move_node.jstree copy_node.jstree redraw.jstree open_node.jstree', $.proxy(function () { // only if undetermined is in setting if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); }, this)); } if(!this.settings.checkbox.tie_selection) { this.element .on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, p = m[data.parent], dpc = data.nodes, i, j; for(i = 0, j = dpc.length; i < j; i++) { m[dpc[i]].state.checked = m[dpc[i]].state.checked || (m[dpc[i]].original && m[dpc[i]].original.state && m[dpc[i]].original.state.checked); if(m[dpc[i]].state.checked) { this._data.checkbox.selected.push(dpc[i]); } } }, this)); } if(this.settings.checkbox.cascade.indexOf('up') !== -1 || this.settings.checkbox.cascade.indexOf('down') !== -1) { this.element .on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, p = m[data.parent], dpc = data.nodes, chd = [], c, i, j, k, l, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection; if(s.indexOf('down') !== -1) { // apply down if(p.state[ t ? 'selected' : 'checked' ]) { for(i = 0, j = dpc.length; i < j; i++) { m[dpc[i]].state[ t ? 'selected' : 'checked' ] = true; } this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(dpc); } else { for(i = 0, j = dpc.length; i < j; i++) { if(m[dpc[i]].state[ t ? 'selected' : 'checked' ]) { for(k = 0, l = m[dpc[i]].children_d.length; k < l; k++) { m[m[dpc[i]].children_d[k]].state[ t ? 'selected' : 'checked' ] = true; } this._data[ t ? 'core' : 'checkbox' ].selected = this._data[ t ? 'core' : 'checkbox' ].selected.concat(m[dpc[i]].children_d); } } } } if(s.indexOf('up') !== -1) { // apply up for(i = 0, j = p.children_d.length; i < j; i++) { if(!m[p.children_d[i]].children.length) { chd.push(m[p.children_d[i]].parent); } } chd = $.vakata.array_unique(chd); for(k = 0, l = chd.length; k < l; k++) { p = m[chd[k]]; while(p && p.id !== $.jstree.root) { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.attr('aria-selected', true).children('.jstree-anchor').addClass( t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } p = this.get_node(p.parent); } } } this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected); }, this)) .on(this.settings.checkbox.tie_selection ? 'select_node.jstree' : 'check_node.jstree', $.proxy(function (e, data) { var self = this, obj = data.node, m = this._model.data, par = this.get_node(obj.parent), i, j, c, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, sel = {}, cur = this._data[ t ? 'core' : 'checkbox' ].selected; for (i = 0, j = cur.length; i < j; i++) { sel[cur[i]] = true; } // apply down if(s.indexOf('down') !== -1) { //this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_unique(this._data[ t ? 'core' : 'checkbox' ].selected.concat(obj.children_d)); var selectedIds = this._cascade_new_checked_state(obj.id, true); var temp = obj.children_d.concat(obj.id); for (i = 0, j = temp.length; i < j; i++) { if (selectedIds.indexOf(temp[i]) > -1) { sel[temp[i]] = true; } else { delete sel[temp[i]]; } } } // apply up if(s.indexOf('up') !== -1) { while(par && par.id !== $.jstree.root) { c = 0; for(i = 0, j = par.children.length; i < j; i++) { c += m[par.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { par.state[ t ? 'selected' : 'checked' ] = true; sel[par.id] = true; //this._data[ t ? 'core' : 'checkbox' ].selected.push(par.id); tmp = this.get_node(par, true); if(tmp && tmp.length) { tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } par = this.get_node(par.parent); } } cur = []; for (i in sel) { if (sel.hasOwnProperty(i)) { cur.push(i); } } this._data[ t ? 'core' : 'checkbox' ].selected = cur; }, this)) .on(this.settings.checkbox.tie_selection ? 'deselect_all.jstree' : 'uncheck_all.jstree', $.proxy(function (e, data) { var obj = this.get_node($.jstree.root), m = this._model.data, i, j, tmp; for(i = 0, j = obj.children_d.length; i < j; i++) { tmp = m[obj.children_d[i]]; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } } }, this)) .on(this.settings.checkbox.tie_selection ? 'deselect_node.jstree' : 'uncheck_node.jstree', $.proxy(function (e, data) { var self = this, obj = data.node, dom = this.get_node(obj, true), i, j, tmp, s = this.settings.checkbox.cascade, t = this.settings.checkbox.tie_selection, cur = this._data[ t ? 'core' : 'checkbox' ].selected, sel = {}, stillSelectedIds = [], allIds = obj.children_d.concat(obj.id); // apply down if(s.indexOf('down') !== -1) { var selectedIds = this._cascade_new_checked_state(obj.id, false); cur = $.vakata.array_filter(cur, function(id) { return allIds.indexOf(id) === -1 || selectedIds.indexOf(id) > -1; }); } // only apply up if cascade up is enabled and if this node is not selected // (if all child nodes are disabled and cascade_to_disabled === false then this node will till be selected). if(s.indexOf('up') !== -1 && cur.indexOf(obj.id) === -1) { for(i = 0, j = obj.parents.length; i < j; i++) { tmp = this._model.data[obj.parents[i]]; tmp.state[ t ? 'selected' : 'checked' ] = false; if(tmp && tmp.original && tmp.original.state && tmp.original.state.undetermined) { tmp.original.state.undetermined = false; } tmp = this.get_node(obj.parents[i], true); if(tmp && tmp.length) { tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } } cur = $.vakata.array_filter(cur, function(id) { return obj.parents.indexOf(id) === -1; }); } this._data[ t ? 'core' : 'checkbox' ].selected = cur; }, this)); } if(this.settings.checkbox.cascade.indexOf('up') !== -1) { this.element .on('delete_node.jstree', $.proxy(function (e, data) { // apply up (whole handler) var p = this.get_node(data.parent), m = this._model.data, i, j, c, tmp, t = this.settings.checkbox.tie_selection; while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(j > 0 && c === j) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } p = this.get_node(p.parent); } }, this)) .on('move_node.jstree', $.proxy(function (e, data) { // apply up (whole handler) var is_multi = data.is_multi, old_par = data.old_parent, new_par = this.get_node(data.parent), m = this._model.data, p, c, i, j, tmp, t = this.settings.checkbox.tie_selection; if(!is_multi) { p = this.get_node(old_par); while(p && p.id !== $.jstree.root && !p.state[ t ? 'selected' : 'checked' ]) { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(j > 0 && c === j) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } p = this.get_node(p.parent); } } p = new_par; while(p && p.id !== $.jstree.root) { c = 0; for(i = 0, j = p.children.length; i < j; i++) { c += m[p.children[i]].state[ t ? 'selected' : 'checked' ]; } if(c === j) { if(!p.state[ t ? 'selected' : 'checked' ]) { p.state[ t ? 'selected' : 'checked' ] = true; this._data[ t ? 'core' : 'checkbox' ].selected.push(p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } } } else { if(p.state[ t ? 'selected' : 'checked' ]) { p.state[ t ? 'selected' : 'checked' ] = false; this._data[ t ? 'core' : 'checkbox' ].selected = $.vakata.array_remove_item(this._data[ t ? 'core' : 'checkbox' ].selected, p.id); tmp = this.get_node(p, true); if(tmp && tmp.length) { tmp.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { break; } } p = this.get_node(p.parent); } }, this)); } }; /** * get an array of all nodes whose state is "undetermined" * @name get_undetermined([full]) * @param {boolean} full: if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} * @plugin checkbox */ this.get_undetermined = function (full) { if (this.settings.checkbox.cascade.indexOf('undetermined') === -1) { return []; } var i, j, k, l, o = {}, m = this._model.data, t = this.settings.checkbox.tie_selection, s = this._data[ t ? 'core' : 'checkbox' ].selected, p = [], tt = this, r = []; for(i = 0, j = s.length; i < j; i++) { if(m[s[i]] && m[s[i]].parents) { for(k = 0, l = m[s[i]].parents.length; k < l; k++) { if(o[m[s[i]].parents[k]] !== undefined) { break; } if(m[s[i]].parents[k] !== $.jstree.root) { o[m[s[i]].parents[k]] = true; p.push(m[s[i]].parents[k]); } } } } // attempt for server side undetermined state this.element.find('.jstree-closed').not(':has(.jstree-children)') .each(function () { var tmp = tt.get_node(this), tmp2; if(!tmp) { return; } if(!tmp.state.loaded) { if(tmp.original && tmp.original.state && tmp.original.state.undetermined && tmp.original.state.undetermined === true) { if(o[tmp.id] === undefined && tmp.id !== $.jstree.root) { o[tmp.id] = true; p.push(tmp.id); } for(k = 0, l = tmp.parents.length; k < l; k++) { if(o[tmp.parents[k]] === undefined && tmp.parents[k] !== $.jstree.root) { o[tmp.parents[k]] = true; p.push(tmp.parents[k]); } } } } else { for(i = 0, j = tmp.children_d.length; i < j; i++) { tmp2 = m[tmp.children_d[i]]; if(!tmp2.state.loaded && tmp2.original && tmp2.original.state && tmp2.original.state.undetermined && tmp2.original.state.undetermined === true) { if(o[tmp2.id] === undefined && tmp2.id !== $.jstree.root) { o[tmp2.id] = true; p.push(tmp2.id); } for(k = 0, l = tmp2.parents.length; k < l; k++) { if(o[tmp2.parents[k]] === undefined && tmp2.parents[k] !== $.jstree.root) { o[tmp2.parents[k]] = true; p.push(tmp2.parents[k]); } } } } } }); for (i = 0, j = p.length; i < j; i++) { if(!m[p[i]].state[ t ? 'selected' : 'checked' ]) { r.push(full ? m[p[i]] : p[i]); } } return r; }; /** * set the undetermined state where and if necessary. Used internally. * @private * @name _undetermined() * @plugin checkbox */ this._undetermined = function () { if(this.element === null) { return; } var p = this.get_undetermined(false), i, j, s; this.element.find('.jstree-undetermined').removeClass('jstree-undetermined'); for (i = 0, j = p.length; i < j; i++) { s = this.get_node(p[i], true); if(s && s.length) { s.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-undetermined'); } } }; this.redraw_node = function(obj, deep, is_callback, force_render) { obj = parent.redraw_node.apply(this, arguments); if(obj) { var i, j, tmp = null, icon = null; for(i = 0, j = obj.childNodes.length; i < j; i++) { if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { tmp = obj.childNodes[i]; break; } } if(tmp) { if(!this.settings.checkbox.tie_selection && this._model.data[obj.id].state.checked) { tmp.className += ' jstree-checked'; } icon = _i.cloneNode(false); if(this._model.data[obj.id].state.checkbox_disabled) { icon.className += ' jstree-checkbox-disabled'; } tmp.insertBefore(icon, tmp.childNodes[0]); } } if(!is_callback && this.settings.checkbox.cascade.indexOf('undetermined') !== -1) { if(this._data.checkbox.uto) { clearTimeout(this._data.checkbox.uto); } this._data.checkbox.uto = setTimeout($.proxy(this._undetermined, this), 50); } return obj; }; /** * show the node checkbox icons * @name show_checkboxes() * @plugin checkbox */ this.show_checkboxes = function () { this._data.core.themes.checkboxes = true; this.get_container_ul().removeClass("jstree-no-checkboxes"); }; /** * hide the node checkbox icons * @name hide_checkboxes() * @plugin checkbox */ this.hide_checkboxes = function () { this._data.core.themes.checkboxes = false; this.get_container_ul().addClass("jstree-no-checkboxes"); }; /** * toggle the node icons * @name toggle_checkboxes() * @plugin checkbox */ this.toggle_checkboxes = function () { if(this._data.core.themes.checkboxes) { this.hide_checkboxes(); } else { this.show_checkboxes(); } }; /** * checks if a node is in an undetermined state * @name is_undetermined(obj) * @param {mixed} obj * @return {Boolean} */ this.is_undetermined = function (obj) { obj = this.get_node(obj); var s = this.settings.checkbox.cascade, i, j, t = this.settings.checkbox.tie_selection, d = this._data[ t ? 'core' : 'checkbox' ].selected, m = this._model.data; if(!obj || obj.state[ t ? 'selected' : 'checked' ] === true || s.indexOf('undetermined') === -1 || (s.indexOf('down') === -1 && s.indexOf('up') === -1)) { return false; } if(!obj.state.loaded && obj.original.state.undetermined === true) { return true; } for(i = 0, j = obj.children_d.length; i < j; i++) { if($.inArray(obj.children_d[i], d) !== -1 || (!m[obj.children_d[i]].state.loaded && m[obj.children_d[i]].original.state.undetermined)) { return true; } } return false; }; /** * disable a node's checkbox * @name disable_checkbox(obj) * @param {mixed} obj an array can be used too * @trigger disable_checkbox.jstree * @plugin checkbox */ this.disable_checkbox = function (obj) { var t1, t2, dom; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.disable_checkbox(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } dom = this.get_node(obj, true); if(!obj.state.checkbox_disabled) { obj.state.checkbox_disabled = true; if(dom && dom.length) { dom.children('.jstree-anchor').children('.jstree-checkbox').addClass('jstree-checkbox-disabled'); } /** * triggered when an node's checkbox is disabled * @event * @name disable_checkbox.jstree * @param {Object} node * @plugin checkbox */ this.trigger('disable_checkbox', { 'node' : obj }); } }; /** * enable a node's checkbox * @name enable_checkbox(obj) * @param {mixed} obj an array can be used too * @trigger enable_checkbox.jstree * @plugin checkbox */ this.enable_checkbox = function (obj) { var t1, t2, dom; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.enable_checkbox(obj[t1]); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } dom = this.get_node(obj, true); if(obj.state.checkbox_disabled) { obj.state.checkbox_disabled = false; if(dom && dom.length) { dom.children('.jstree-anchor').children('.jstree-checkbox').removeClass('jstree-checkbox-disabled'); } /** * triggered when an node's checkbox is enabled * @event * @name enable_checkbox.jstree * @param {Object} node * @plugin checkbox */ this.trigger('enable_checkbox', { 'node' : obj }); } }; this.activate_node = function (obj, e) { if($(e.target).hasClass('jstree-checkbox-disabled')) { return false; } if(this.settings.checkbox.tie_selection && (this.settings.checkbox.whole_node || $(e.target).hasClass('jstree-checkbox'))) { e.ctrlKey = true; } if(this.settings.checkbox.tie_selection || (!this.settings.checkbox.whole_node && !$(e.target).hasClass('jstree-checkbox'))) { return parent.activate_node.call(this, obj, e); } if(this.is_disabled(obj)) { return false; } if(this.is_checked(obj)) { this.uncheck_node(obj, e); } else { this.check_node(obj, e); } this.trigger('activate_node', { 'node' : this.get_node(obj) }); }; /** * Cascades checked state to a node and all its descendants. This function does NOT affect hidden and disabled nodes (or their descendants). * However if these unaffected nodes are already selected their ids will be included in the returned array. * @private * @param {string} id the node ID * @param {bool} checkedState should the nodes be checked or not * @returns {Array} Array of all node id's (in this tree branch) that are checked. */ this._cascade_new_checked_state = function (id, checkedState) { var self = this; var t = this.settings.checkbox.tie_selection; var node = this._model.data[id]; var selectedNodeIds = []; var selectedChildrenIds = [], i, j, selectedChildIds; if ( (this.settings.checkbox.cascade_to_disabled || !node.state.disabled) && (this.settings.checkbox.cascade_to_hidden || !node.state.hidden) ) { //First try and check/uncheck the children if (node.children) { for (i = 0, j = node.children.length; i < j; i++) { var childId = node.children[i]; selectedChildIds = self._cascade_new_checked_state(childId, checkedState); selectedNodeIds = selectedNodeIds.concat(selectedChildIds); if (selectedChildIds.indexOf(childId) > -1) { selectedChildrenIds.push(childId); } } } var dom = self.get_node(node, true); //A node's state is undetermined if some but not all of it's children are checked/selected . var undetermined = selectedChildrenIds.length > 0 && selectedChildrenIds.length < node.children.length; if(node.original && node.original.state && node.original.state.undetermined) { node.original.state.undetermined = undetermined; } //If a node is undetermined then remove selected class if (undetermined) { node.state[ t ? 'selected' : 'checked' ] = false; dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } //Otherwise, if the checkedState === true (i.e. the node is being checked now) and all of the node's children are checked (if it has any children), //check the node and style it correctly. else if (checkedState && selectedChildrenIds.length === node.children.length) { node.state[ t ? 'selected' : 'checked' ] = checkedState; selectedNodeIds.push(node.id); dom.attr('aria-selected', true).children('.jstree-anchor').addClass(t ? 'jstree-clicked' : 'jstree-checked'); } else { node.state[ t ? 'selected' : 'checked' ] = false; dom.attr('aria-selected', false).children('.jstree-anchor').removeClass(t ? 'jstree-clicked' : 'jstree-checked'); } } else { selectedChildIds = this.get_checked_descendants(id); if (node.state[ t ? 'selected' : 'checked' ]) { selectedChildIds.push(node.id); } selectedNodeIds = selectedNodeIds.concat(selectedChildIds); } return selectedNodeIds; }; /** * Gets ids of nodes selected in branch (of tree) specified by id (does not include the node specified by id) * @name get_checked_descendants(obj) * @param {string} id the node ID * @return {Array} array of IDs * @plugin checkbox */ this.get_checked_descendants = function (id) { var self = this; var t = self.settings.checkbox.tie_selection; var node = self._model.data[id]; return $.vakata.array_filter(node.children_d, function(_id) { return self._model.data[_id].state[ t ? 'selected' : 'checked' ]; }); }; /** * check a node (only if tie_selection in checkbox settings is false, otherwise select_node will be called internally) * @name check_node(obj) * @param {mixed} obj an array can be used to check multiple nodes * @trigger check_node.jstree * @plugin checkbox */ this.check_node = function (obj, e) { if(this.settings.checkbox.tie_selection) { return this.select_node(obj, false, true, e); } var dom, t1, t2, th; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.check_node(obj[t1], e); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } dom = this.get_node(obj, true); if(!obj.state.checked) { obj.state.checked = true; this._data.checkbox.selected.push(obj.id); if(dom && dom.length) { dom.children('.jstree-anchor').addClass('jstree-checked'); } /** * triggered when an node is checked (only if tie_selection in checkbox settings is false) * @event * @name check_node.jstree * @param {Object} node * @param {Array} selected the current selection * @param {Object} event the event (if any) that triggered this check_node * @plugin checkbox */ this.trigger('check_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); } }; /** * uncheck a node (only if tie_selection in checkbox settings is false, otherwise deselect_node will be called internally) * @name uncheck_node(obj) * @param {mixed} obj an array can be used to uncheck multiple nodes * @trigger uncheck_node.jstree * @plugin checkbox */ this.uncheck_node = function (obj, e) { if(this.settings.checkbox.tie_selection) { return this.deselect_node(obj, false, e); } var t1, t2, dom; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.uncheck_node(obj[t1], e); } return true; } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } dom = this.get_node(obj, true); if(obj.state.checked) { obj.state.checked = false; this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, obj.id); if(dom.length) { dom.children('.jstree-anchor').removeClass('jstree-checked'); } /** * triggered when an node is unchecked (only if tie_selection in checkbox settings is false) * @event * @name uncheck_node.jstree * @param {Object} node * @param {Array} selected the current selection * @param {Object} event the event (if any) that triggered this uncheck_node * @plugin checkbox */ this.trigger('uncheck_node', { 'node' : obj, 'selected' : this._data.checkbox.selected, 'event' : e }); } }; /** * checks all nodes in the tree (only if tie_selection in checkbox settings is false, otherwise select_all will be called internally) * @name check_all() * @trigger check_all.jstree, changed.jstree * @plugin checkbox */ this.check_all = function () { if(this.settings.checkbox.tie_selection) { return this.select_all(); } var tmp = this._data.checkbox.selected.concat([]), i, j; this._data.checkbox.selected = this._model.data[$.jstree.root].children_d.concat(); for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { if(this._model.data[this._data.checkbox.selected[i]]) { this._model.data[this._data.checkbox.selected[i]].state.checked = true; } } this.redraw(true); /** * triggered when all nodes are checked (only if tie_selection in checkbox settings is false) * @event * @name check_all.jstree * @param {Array} selected the current selection * @plugin checkbox */ this.trigger('check_all', { 'selected' : this._data.checkbox.selected }); }; /** * uncheck all checked nodes (only if tie_selection in checkbox settings is false, otherwise deselect_all will be called internally) * @name uncheck_all() * @trigger uncheck_all.jstree * @plugin checkbox */ this.uncheck_all = function () { if(this.settings.checkbox.tie_selection) { return this.deselect_all(); } var tmp = this._data.checkbox.selected.concat([]), i, j; for(i = 0, j = this._data.checkbox.selected.length; i < j; i++) { if(this._model.data[this._data.checkbox.selected[i]]) { this._model.data[this._data.checkbox.selected[i]].state.checked = false; } } this._data.checkbox.selected = []; this.element.find('.jstree-checked').removeClass('jstree-checked'); /** * triggered when all nodes are unchecked (only if tie_selection in checkbox settings is false) * @event * @name uncheck_all.jstree * @param {Object} node the previous selection * @param {Array} selected the current selection * @plugin checkbox */ this.trigger('uncheck_all', { 'selected' : this._data.checkbox.selected, 'node' : tmp }); }; /** * checks if a node is checked (if tie_selection is on in the settings this function will return the same as is_selected) * @name is_checked(obj) * @param {mixed} obj * @return {Boolean} * @plugin checkbox */ this.is_checked = function (obj) { if(this.settings.checkbox.tie_selection) { return this.is_selected(obj); } obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } return obj.state.checked; }; /** * get an array of all checked nodes (if tie_selection is on in the settings this function will return the same as get_selected) * @name get_checked([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} * @plugin checkbox */ this.get_checked = function (full) { if(this.settings.checkbox.tie_selection) { return this.get_selected(full); } return full ? $.map(this._data.checkbox.selected, $.proxy(function (i) { return this.get_node(i); }, this)) : this._data.checkbox.selected.slice(); }; /** * get an array of all top level checked nodes (ignoring children of checked nodes) (if tie_selection is on in the settings this function will return the same as get_top_selected) * @name get_top_checked([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} * @plugin checkbox */ this.get_top_checked = function (full) { if(this.settings.checkbox.tie_selection) { return this.get_top_selected(full); } var tmp = this.get_checked(true), obj = {}, i, j, k, l; for(i = 0, j = tmp.length; i < j; i++) { obj[tmp[i].id] = tmp[i]; } for(i = 0, j = tmp.length; i < j; i++) { for(k = 0, l = tmp[i].children_d.length; k < l; k++) { if(obj[tmp[i].children_d[k]]) { delete obj[tmp[i].children_d[k]]; } } } tmp = []; for(i in obj) { if(obj.hasOwnProperty(i)) { tmp.push(i); } } return full ? $.map(tmp, $.proxy(function (i) { return this.get_node(i); }, this)) : tmp; }; /** * get an array of all bottom level checked nodes (ignoring selected parents) (if tie_selection is on in the settings this function will return the same as get_bottom_selected) * @name get_bottom_checked([full]) * @param {mixed} full if set to `true` the returned array will consist of the full node objects, otherwise - only IDs will be returned * @return {Array} * @plugin checkbox */ this.get_bottom_checked = function (full) { if(this.settings.checkbox.tie_selection) { return this.get_bottom_selected(full); } var tmp = this.get_checked(true), obj = [], i, j; for(i = 0, j = tmp.length; i < j; i++) { if(!tmp[i].children.length) { obj.push(tmp[i].id); } } return full ? $.map(obj, $.proxy(function (i) { return this.get_node(i); }, this)) : obj; }; this.load_node = function (obj, callback) { var k, l, i, j, c, tmp; if(!$.isArray(obj) && !this.settings.checkbox.tie_selection) { tmp = this.get_node(obj); if(tmp && tmp.state.loaded) { for(k = 0, l = tmp.children_d.length; k < l; k++) { if(this._model.data[tmp.children_d[k]].state.checked) { c = true; this._data.checkbox.selected = $.vakata.array_remove_item(this._data.checkbox.selected, tmp.children_d[k]); } } } } return parent.load_node.apply(this, arguments); }; this.get_state = function () { var state = parent.get_state.apply(this, arguments); if(this.settings.checkbox.tie_selection) { return state; } state.checkbox = this._data.checkbox.selected.slice(); return state; }; this.set_state = function (state, callback) { var res = parent.set_state.apply(this, arguments); if(res && state.checkbox) { if(!this.settings.checkbox.tie_selection) { this.uncheck_all(); var _this = this; $.each(state.checkbox, function (i, v) { _this.check_node(v); }); } delete state.checkbox; this.set_state(state, callback); return false; } return res; }; this.refresh = function (skip_loading, forget_state) { if(this.settings.checkbox.tie_selection) { this._data.checkbox.selected = []; } return parent.refresh.apply(this, arguments); }; }; // include the checkbox plugin by default // $.jstree.defaults.plugins.push("checkbox"); /** * ### Conditionalselect plugin * * This plugin allows defining a callback to allow or deny node selection by user input (activate node method). */ /** * a callback (function) which is invoked in the instance's scope and receives two arguments - the node and the event that triggered the `activate_node` call. Returning false prevents working with the node, returning true allows invoking activate_node. Defaults to returning `true`. * @name $.jstree.defaults.checkbox.visible * @plugin checkbox */ $.jstree.defaults.conditionalselect = function () { return true; }; $.jstree.plugins.conditionalselect = function (options, parent) { // own function this.activate_node = function (obj, e) { if(this.settings.conditionalselect.call(this, this.get_node(obj), e)) { return parent.activate_node.call(this, obj, e); } }; }; /** * ### Contextmenu plugin * * Shows a context menu when a node is right-clicked. */ /** * stores all defaults for the contextmenu plugin * @name $.jstree.defaults.contextmenu * @plugin contextmenu */ $.jstree.defaults.contextmenu = { /** * a boolean indicating if the node should be selected when the context menu is invoked on it. Defaults to `true`. * @name $.jstree.defaults.contextmenu.select_node * @plugin contextmenu */ select_node : true, /** * a boolean indicating if the menu should be shown aligned with the node. Defaults to `true`, otherwise the mouse coordinates are used. * @name $.jstree.defaults.contextmenu.show_at_node * @plugin contextmenu */ show_at_node : true, /** * an object of actions, or a function that accepts a node and a callback function and calls the callback function with an object of actions available for that node (you can also return the items too). * * Each action consists of a key (a unique name) and a value which is an object with the following properties (only label and action are required). Once a menu item is activated the `action` function will be invoked with an object containing the following keys: item - the contextmenu item definition as seen below, reference - the DOM node that was used (the tree node), element - the contextmenu DOM element, position - an object with x/y properties indicating the position of the menu. * * * `separator_before` - a boolean indicating if there should be a separator before this item * * `separator_after` - a boolean indicating if there should be a separator after this item * * `_disabled` - a boolean indicating if this action should be disabled * * `label` - a string - the name of the action (could be a function returning a string) * * `title` - a string - an optional tooltip for the item * * `action` - a function to be executed if this item is chosen, the function will receive * * `icon` - a string, can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class * * `shortcut` - keyCode which will trigger the action if the menu is open (for example `113` for rename, which equals F2) * * `shortcut_label` - shortcut label (like for example `F2` for rename) * * `submenu` - an object with the same structure as $.jstree.defaults.contextmenu.items which can be used to create a submenu - each key will be rendered as a separate option in a submenu that will appear once the current item is hovered * * @name $.jstree.defaults.contextmenu.items * @plugin contextmenu */ items : function (o, cb) { // Could be an object directly return { "create" : { "separator_before" : false, "separator_after" : true, "_disabled" : false, //(this.check("create_node", data.reference, {}, "last")), "label" : "Create", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); inst.create_node(obj, {}, "last", function (new_node) { try { inst.edit(new_node); } catch (ex) { setTimeout(function () { inst.edit(new_node); },0); } }); } }, "rename" : { "separator_before" : false, "separator_after" : false, "_disabled" : false, //(this.check("rename_node", data.reference, this.get_parent(data.reference), "")), "label" : "Rename", /*! "shortcut" : 113, "shortcut_label" : 'F2', "icon" : "glyphicon glyphicon-leaf", */ "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); inst.edit(obj); } }, "remove" : { "separator_before" : false, "icon" : false, "separator_after" : false, "_disabled" : false, //(this.check("delete_node", data.reference, this.get_parent(data.reference), "")), "label" : "Delete", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); if(inst.is_selected(obj)) { inst.delete_node(inst.get_selected()); } else { inst.delete_node(obj); } } }, "ccp" : { "separator_before" : true, "icon" : false, "separator_after" : false, "label" : "Edit", "action" : false, "submenu" : { "cut" : { "separator_before" : false, "separator_after" : false, "label" : "Cut", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); if(inst.is_selected(obj)) { inst.cut(inst.get_top_selected()); } else { inst.cut(obj); } } }, "copy" : { "separator_before" : false, "icon" : false, "separator_after" : false, "label" : "Copy", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); if(inst.is_selected(obj)) { inst.copy(inst.get_top_selected()); } else { inst.copy(obj); } } }, "paste" : { "separator_before" : false, "icon" : false, "_disabled" : function (data) { return !$.jstree.reference(data.reference).can_paste(); }, "separator_after" : false, "label" : "Paste", "action" : function (data) { var inst = $.jstree.reference(data.reference), obj = inst.get_node(data.reference); inst.paste(obj); } } } } }; } }; $.jstree.plugins.contextmenu = function (options, parent) { this.bind = function () { parent.bind.call(this); var last_ts = 0, cto = null, ex, ey; this.element .on("init.jstree loading.jstree ready.jstree", $.proxy(function () { this.get_container_ul().addClass('jstree-contextmenu'); }, this)) .on("contextmenu.jstree", ".jstree-anchor", $.proxy(function (e, data) { if (e.target.tagName.toLowerCase() === 'input') { return; } e.preventDefault(); last_ts = e.ctrlKey ? +new Date() : 0; if(data || cto) { last_ts = (+new Date()) + 10000; } if(cto) { clearTimeout(cto); } if(!this.is_loading(e.currentTarget)) { this.show_contextmenu(e.currentTarget, e.pageX, e.pageY, e); } }, this)) .on("click.jstree", ".jstree-anchor", $.proxy(function (e) { if(this._data.contextmenu.visible && (!last_ts || (+new Date()) - last_ts > 250)) { // work around safari & macOS ctrl+click $.vakata.context.hide(); } last_ts = 0; }, this)) .on("touchstart.jstree", ".jstree-anchor", function (e) { if(!e.originalEvent || !e.originalEvent.changedTouches || !e.originalEvent.changedTouches[0]) { return; } ex = e.originalEvent.changedTouches[0].clientX; ey = e.originalEvent.changedTouches[0].clientY; cto = setTimeout(function () { $(e.currentTarget).trigger('contextmenu', true); }, 750); }) .on('touchmove.vakata.jstree', function (e) { if(cto && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0] && (Math.abs(ex - e.originalEvent.changedTouches[0].clientX) > 10 || Math.abs(ey - e.originalEvent.changedTouches[0].clientY) > 10)) { clearTimeout(cto); $.vakata.context.hide(); } }) .on('touchend.vakata.jstree', function (e) { if(cto) { clearTimeout(cto); } }); /*! if(!('oncontextmenu' in document.body) && ('ontouchstart' in document.body)) { var el = null, tm = null; this.element .on("touchstart", ".jstree-anchor", function (e) { el = e.currentTarget; tm = +new Date(); $(document).one("touchend", function (e) { e.target = document.elementFromPoint(e.originalEvent.targetTouches[0].pageX - window.pageXOffset, e.originalEvent.targetTouches[0].pageY - window.pageYOffset); e.currentTarget = e.target; tm = ((+(new Date())) - tm); if(e.target === el && tm > 600 && tm < 1000) { e.preventDefault(); $(el).trigger('contextmenu', e); } el = null; tm = null; }); }); } */ $(document).on("context_hide.vakata.jstree", $.proxy(function (e, data) { this._data.contextmenu.visible = false; $(data.reference).removeClass('jstree-context'); }, this)); }; this.teardown = function () { if(this._data.contextmenu.visible) { $.vakata.context.hide(); } parent.teardown.call(this); }; /** * prepare and show the context menu for a node * @name show_contextmenu(obj [, x, y]) * @param {mixed} obj the node * @param {Number} x the x-coordinate relative to the document to show the menu at * @param {Number} y the y-coordinate relative to the document to show the menu at * @param {Object} e the event if available that triggered the contextmenu * @plugin contextmenu * @trigger show_contextmenu.jstree */ this.show_contextmenu = function (obj, x, y, e) { obj = this.get_node(obj); if(!obj || obj.id === $.jstree.root) { return false; } var s = this.settings.contextmenu, d = this.get_node(obj, true), a = d.children(".jstree-anchor"), o = false, i = false; if(s.show_at_node || x === undefined || y === undefined) { o = a.offset(); x = o.left; y = o.top + this._data.core.li_height; } if(this.settings.contextmenu.select_node && !this.is_selected(obj)) { this.activate_node(obj, e); } i = s.items; if($.isFunction(i)) { i = i.call(this, obj, $.proxy(function (i) { this._show_contextmenu(obj, x, y, i); }, this)); } if($.isPlainObject(i)) { this._show_contextmenu(obj, x, y, i); } }; /** * show the prepared context menu for a node * @name _show_contextmenu(obj, x, y, i) * @param {mixed} obj the node * @param {Number} x the x-coordinate relative to the document to show the menu at * @param {Number} y the y-coordinate relative to the document to show the menu at * @param {Number} i the object of items to show * @plugin contextmenu * @trigger show_contextmenu.jstree * @private */ this._show_contextmenu = function (obj, x, y, i) { var d = this.get_node(obj, true), a = d.children(".jstree-anchor"); $(document).one("context_show.vakata.jstree", $.proxy(function (e, data) { var cls = 'jstree-contextmenu jstree-' + this.get_theme() + '-contextmenu'; $(data.element).addClass(cls); a.addClass('jstree-context'); }, this)); this._data.contextmenu.visible = true; $.vakata.context.show(a, { 'x' : x, 'y' : y }, i); /** * triggered when the contextmenu is shown for a node * @event * @name show_contextmenu.jstree * @param {Object} node the node * @param {Number} x the x-coordinate of the menu relative to the document * @param {Number} y the y-coordinate of the menu relative to the document * @plugin contextmenu */ this.trigger('show_contextmenu', { "node" : obj, "x" : x, "y" : y }); }; }; // contextmenu helper (function ($) { var right_to_left = false, vakata_context = { element : false, reference : false, position_x : 0, position_y : 0, items : [], html : "", is_visible : false }; $.vakata.context = { settings : { hide_onmouseleave : 0, icons : true }, _trigger : function (event_name) { $(document).triggerHandler("context_" + event_name + ".vakata", { "reference" : vakata_context.reference, "element" : vakata_context.element, "position" : { "x" : vakata_context.position_x, "y" : vakata_context.position_y } }); }, _execute : function (i) { i = vakata_context.items[i]; return i && (!i._disabled || ($.isFunction(i._disabled) && !i._disabled({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }))) && i.action ? i.action.call(null, { "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element, "position" : { "x" : vakata_context.position_x, "y" : vakata_context.position_y } }) : false; }, _parse : function (o, is_callback) { if(!o) { return false; } if(!is_callback) { vakata_context.html = ""; vakata_context.items = []; } var str = "", sep = false, tmp; if(is_callback) { str += "<"+"ul>"; } $.each(o, function (i, val) { if(!val) { return true; } vakata_context.items.push(val); if(!sep && val.separator_before) { str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>"; } sep = false; str += "<"+"li class='" + (val._class || "") + (val._disabled === true || ($.isFunction(val._disabled) && val._disabled({ "item" : val, "reference" : vakata_context.reference, "element" : vakata_context.element })) ? " vakata-contextmenu-disabled " : "") + "' "+(val.shortcut?" data-shortcut='"+val.shortcut+"' ":'')+">"; str += "<"+"a href='#' rel='" + (vakata_context.items.length - 1) + "' " + (val.title ? "title='" + val.title + "'" : "") + ">"; if($.vakata.context.settings.icons) { str += "<"+"i "; if(val.icon) { if(val.icon.indexOf("/") !== -1 || val.icon.indexOf(".") !== -1) { str += " style='background:url(\"" + val.icon + "\") center center no-repeat' "; } else { str += " class='" + val.icon + "' "; } } str += "><"+"/i><"+"span class='vakata-contextmenu-sep'> <"+"/span>"; } str += ($.isFunction(val.label) ? val.label({ "item" : i, "reference" : vakata_context.reference, "element" : vakata_context.element }) : val.label) + (val.shortcut?' '+ (val.shortcut_label || '') +'':'') + "<"+"/a>"; if(val.submenu) { tmp = $.vakata.context._parse(val.submenu, true); if(tmp) { str += tmp; } } str += "<"+"/li>"; if(val.separator_after) { str += "<"+"li class='vakata-context-separator'><"+"a href='#' " + ($.vakata.context.settings.icons ? '' : 'style="margin-left:0px;"') + "> <"+"/a><"+"/li>"; sep = true; } }); str = str.replace(/
  • <\/li\>$/,""); if(is_callback) { str += ""; } /** * triggered on the document when the contextmenu is parsed (HTML is built) * @event * @plugin contextmenu * @name context_parse.vakata * @param {jQuery} reference the element that was right clicked * @param {jQuery} element the DOM element of the menu itself * @param {Object} position the x & y coordinates of the menu */ if(!is_callback) { vakata_context.html = str; $.vakata.context._trigger("parse"); } return str.length > 10 ? str : false; }, _show_submenu : function (o) { o = $(o); if(!o.length || !o.children("ul").length) { return; } var e = o.children("ul"), xl = o.offset().left, x = xl + o.outerWidth(), y = o.offset().top, w = e.width(), h = e.height(), dw = $(window).width() + $(window).scrollLeft(), dh = $(window).height() + $(window).scrollTop(); // може да се спести е една проверка - дали няма някой от класовете вече нагоре if(right_to_left) { o[x - (w + 10 + o.outerWidth()) < 0 ? "addClass" : "removeClass"]("vakata-context-left"); } else { o[x + w > dw && xl > dw - x ? "addClass" : "removeClass"]("vakata-context-right"); } if(y + h + 10 > dh) { e.css("bottom","-1px"); } //if does not fit - stick it to the side if (o.hasClass('vakata-context-right')) { if (xl < w) { e.css("margin-right", xl - w); } } else { if (dw - x < w) { e.css("margin-left", dw - x - w); } } e.show(); }, show : function (reference, position, data) { var o, e, x, y, w, h, dw, dh, cond = true; if(vakata_context.element && vakata_context.element.length) { vakata_context.element.width(''); } switch(cond) { case (!position && !reference): return false; case (!!position && !!reference): vakata_context.reference = reference; vakata_context.position_x = position.x; vakata_context.position_y = position.y; break; case (!position && !!reference): vakata_context.reference = reference; o = reference.offset(); vakata_context.position_x = o.left + reference.outerHeight(); vakata_context.position_y = o.top; break; case (!!position && !reference): vakata_context.position_x = position.x; vakata_context.position_y = position.y; break; } if(!!reference && !data && $(reference).data('vakata_contextmenu')) { data = $(reference).data('vakata_contextmenu'); } if($.vakata.context._parse(data)) { vakata_context.element.html(vakata_context.html); } if(vakata_context.items.length) { vakata_context.element.appendTo(document.body); e = vakata_context.element; x = vakata_context.position_x; y = vakata_context.position_y; w = e.width(); h = e.height(); dw = $(window).width() + $(window).scrollLeft(); dh = $(window).height() + $(window).scrollTop(); if(right_to_left) { x -= (e.outerWidth() - $(reference).outerWidth()); if(x < $(window).scrollLeft() + 20) { x = $(window).scrollLeft() + 20; } } if(x + w + 20 > dw) { x = dw - (w + 20); } if(y + h + 20 > dh) { y = dh - (h + 20); } vakata_context.element .css({ "left" : x, "top" : y }) .show() .find('a').first().focus().parent().addClass("vakata-context-hover"); vakata_context.is_visible = true; /** * triggered on the document when the contextmenu is shown * @event * @plugin contextmenu * @name context_show.vakata * @param {jQuery} reference the element that was right clicked * @param {jQuery} element the DOM element of the menu itself * @param {Object} position the x & y coordinates of the menu */ $.vakata.context._trigger("show"); } }, hide : function () { if(vakata_context.is_visible) { vakata_context.element.hide().find("ul").hide().end().find(':focus').blur().end().detach(); vakata_context.is_visible = false; /** * triggered on the document when the contextmenu is hidden * @event * @plugin contextmenu * @name context_hide.vakata * @param {jQuery} reference the element that was right clicked * @param {jQuery} element the DOM element of the menu itself * @param {Object} position the x & y coordinates of the menu */ $.vakata.context._trigger("hide"); } } }; $(function () { right_to_left = $(document.body).css("direction") === "rtl"; var to = false; vakata_context.element = $("
      "); vakata_context.element .on("mouseenter", "li", function (e) { e.stopImmediatePropagation(); if($.contains(this, e.relatedTarget)) { // премахнато заради delegate mouseleave по-долу // $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); return; } if(to) { clearTimeout(to); } vakata_context.element.find(".vakata-context-hover").removeClass("vakata-context-hover").end(); $(this) .siblings().find("ul").hide().end().end() .parentsUntil(".vakata-context", "li").addBack().addClass("vakata-context-hover"); $.vakata.context._show_submenu(this); }) // тестово - дали не натоварва? .on("mouseleave", "li", function (e) { if($.contains(this, e.relatedTarget)) { return; } $(this).find(".vakata-context-hover").addBack().removeClass("vakata-context-hover"); }) .on("mouseleave", function (e) { $(this).find(".vakata-context-hover").removeClass("vakata-context-hover"); if($.vakata.context.settings.hide_onmouseleave) { to = setTimeout( (function (t) { return function () { $.vakata.context.hide(); }; }(this)), $.vakata.context.settings.hide_onmouseleave); } }) .on("click", "a", function (e) { e.preventDefault(); //}) //.on("mouseup", "a", function (e) { if(!$(this).blur().parent().hasClass("vakata-context-disabled") && $.vakata.context._execute($(this).attr("rel")) !== false) { $.vakata.context.hide(); } }) .on('keydown', 'a', function (e) { var o = null; switch(e.which) { case 13: case 32: e.type = "click"; e.preventDefault(); $(e.currentTarget).trigger(e); break; case 37: if(vakata_context.is_visible) { vakata_context.element.find(".vakata-context-hover").last().closest("li").first().find("ul").hide().find(".vakata-context-hover").removeClass("vakata-context-hover").end().end().children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 38: if(vakata_context.is_visible) { o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").prevAll("li:not(.vakata-context-separator)").first(); if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").last(); } o.addClass("vakata-context-hover").children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 39: if(vakata_context.is_visible) { vakata_context.element.find(".vakata-context-hover").last().children("ul").show().children("li:not(.vakata-context-separator)").removeClass("vakata-context-hover").first().addClass("vakata-context-hover").children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 40: if(vakata_context.is_visible) { o = vakata_context.element.find("ul:visible").addBack().last().children(".vakata-context-hover").removeClass("vakata-context-hover").nextAll("li:not(.vakata-context-separator)").first(); if(!o.length) { o = vakata_context.element.find("ul:visible").addBack().last().children("li:not(.vakata-context-separator)").first(); } o.addClass("vakata-context-hover").children('a').focus(); e.stopImmediatePropagation(); e.preventDefault(); } break; case 27: $.vakata.context.hide(); e.preventDefault(); break; default: //console.log(e.which); break; } }) .on('keydown', function (e) { e.preventDefault(); var a = vakata_context.element.find('.vakata-contextmenu-shortcut-' + e.which).parent(); if(a.parent().not('.vakata-context-disabled')) { a.click(); } }); $(document) .on("mousedown.vakata.jstree", function (e) { if(vakata_context.is_visible && vakata_context.element[0] !== e.target && !$.contains(vakata_context.element[0], e.target)) { $.vakata.context.hide(); } }) .on("context_show.vakata.jstree", function (e, data) { vakata_context.element.find("li:has(ul)").children("a").addClass("vakata-context-parent"); if(right_to_left) { vakata_context.element.addClass("vakata-context-rtl").css("direction", "rtl"); } // also apply a RTL class? vakata_context.element.find("ul").hide().end(); }); }); }($)); // $.jstree.defaults.plugins.push("contextmenu"); /** * ### Drag'n'drop plugin * * Enables dragging and dropping of nodes in the tree, resulting in a move or copy operations. */ /** * stores all defaults for the drag'n'drop plugin * @name $.jstree.defaults.dnd * @plugin dnd */ $.jstree.defaults.dnd = { /** * a boolean indicating if a copy should be possible while dragging (by pressint the meta key or Ctrl). Defaults to `true`. * @name $.jstree.defaults.dnd.copy * @plugin dnd */ copy : true, /** * a number indicating how long a node should remain hovered while dragging to be opened. Defaults to `500`. * @name $.jstree.defaults.dnd.open_timeout * @plugin dnd */ open_timeout : 500, /** * a function invoked each time a node is about to be dragged, invoked in the tree's scope and receives the nodes about to be dragged as an argument (array) and the event that started the drag - return `false` to prevent dragging * @name $.jstree.defaults.dnd.is_draggable * @plugin dnd */ is_draggable : true, /** * a boolean indicating if checks should constantly be made while the user is dragging the node (as opposed to checking only on drop), default is `true` * @name $.jstree.defaults.dnd.check_while_dragging * @plugin dnd */ check_while_dragging : true, /** * a boolean indicating if nodes from this tree should only be copied with dnd (as opposed to moved), default is `false` * @name $.jstree.defaults.dnd.always_copy * @plugin dnd */ always_copy : false, /** * when dropping a node "inside", this setting indicates the position the node should go to - it can be an integer or a string: "first" (same as 0) or "last", default is `0` * @name $.jstree.defaults.dnd.inside_pos * @plugin dnd */ inside_pos : 0, /** * when starting the drag on a node that is selected this setting controls if all selected nodes are dragged or only the single node, default is `true`, which means all selected nodes are dragged when the drag is started on a selected node * @name $.jstree.defaults.dnd.drag_selection * @plugin dnd */ drag_selection : true, /** * controls whether dnd works on touch devices. If left as boolean true dnd will work the same as in desktop browsers, which in some cases may impair scrolling. If set to boolean false dnd will not work on touch devices. There is a special third option - string "selected" which means only selected nodes can be dragged on touch devices. * @name $.jstree.defaults.dnd.touch * @plugin dnd */ touch : true, /** * controls whether items can be dropped anywhere on the node, not just on the anchor, by default only the node anchor is a valid drop target. Works best with the wholerow plugin. If enabled on mobile depending on the interface it might be hard for the user to cancel the drop, since the whole tree container will be a valid drop target. * @name $.jstree.defaults.dnd.large_drop_target * @plugin dnd */ large_drop_target : false, /** * controls whether a drag can be initiated from any part of the node and not just the text/icon part, works best with the wholerow plugin. Keep in mind it can cause problems with tree scrolling on mobile depending on the interface - in that case set the touch option to "selected". * @name $.jstree.defaults.dnd.large_drag_target * @plugin dnd */ large_drag_target : false, /** * controls whether use HTML5 dnd api instead of classical. That will allow better integration of dnd events with other HTML5 controls. * @reference http://caniuse.com/#feat=dragndrop * @name $.jstree.defaults.dnd.use_html5 * @plugin dnd */ use_html5: false }; var drg, elm; // TODO: now check works by checking for each node individually, how about max_children, unique, etc? $.jstree.plugins.dnd = function (options, parent) { this.init = function (el, options) { parent.init.call(this, el, options); this.settings.dnd.use_html5 = this.settings.dnd.use_html5 && ('draggable' in document.createElement('span')); }; this.bind = function () { parent.bind.call(this); this.element .on(this.settings.dnd.use_html5 ? 'dragstart.jstree' : 'mousedown.jstree touchstart.jstree', this.settings.dnd.large_drag_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) { if(this.settings.dnd.large_drag_target && $(e.target).closest('.jstree-node')[0] !== e.currentTarget) { return true; } if(e.type === "touchstart" && (!this.settings.dnd.touch || (this.settings.dnd.touch === 'selected' && !$(e.currentTarget).closest('.jstree-node').children('.jstree-anchor').hasClass('jstree-clicked')))) { return true; } var obj = this.get_node(e.target), mlt = this.is_selected(obj) && this.settings.dnd.drag_selection ? this.get_top_selected().length : 1, txt = (mlt > 1 ? mlt + ' ' + this.get_string('nodes') : this.get_text(e.currentTarget)); if(this.settings.core.force_text) { txt = $.vakata.html.escape(txt); } if(obj && obj.id && obj.id !== $.jstree.root && (e.which === 1 || e.type === "touchstart" || e.type === "dragstart") && (this.settings.dnd.is_draggable === true || ($.isFunction(this.settings.dnd.is_draggable) && this.settings.dnd.is_draggable.call(this, (mlt > 1 ? this.get_top_selected(true) : [obj]), e))) ) { drg = { 'jstree' : true, 'origin' : this, 'obj' : this.get_node(obj,true), 'nodes' : mlt > 1 ? this.get_top_selected() : [obj.id] }; elm = e.currentTarget; if (this.settings.dnd.use_html5) { $.vakata.dnd._trigger('start', e, { 'helper': $(), 'element': elm, 'data': drg }); } else { this.element.trigger('mousedown.jstree'); return $.vakata.dnd.start(e, drg, '
      ' + txt + '
      '); } } }, this)); if (this.settings.dnd.use_html5) { this.element .on('dragover.jstree', function (e) { e.preventDefault(); $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); return false; }) //.on('dragenter.jstree', this.settings.dnd.large_drop_target ? '.jstree-node' : '.jstree-anchor', $.proxy(function (e) { // e.preventDefault(); // $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); // return false; // }, this)) .on('drop.jstree', $.proxy(function (e) { e.preventDefault(); $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); return false; }, this)); } }; this.redraw_node = function(obj, deep, callback, force_render) { obj = parent.redraw_node.apply(this, arguments); if (obj && this.settings.dnd.use_html5) { if (this.settings.dnd.large_drag_target) { obj.setAttribute('draggable', true); } else { var i, j, tmp = null; for(i = 0, j = obj.childNodes.length; i < j; i++) { if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { tmp = obj.childNodes[i]; break; } } if(tmp) { tmp.setAttribute('draggable', true); } } } return obj; }; }; $(function() { // bind only once for all instances var lastmv = false, laster = false, lastev = false, opento = false, marker = $('
       
      ').hide(); //.appendTo('body'); $(document) .on('dragover.vakata.jstree', function (e) { if (elm) { $.vakata.dnd._trigger('move', e, { 'helper': $(), 'element': elm, 'data': drg }); } }) .on('drop.vakata.jstree', function (e) { if (elm) { $.vakata.dnd._trigger('stop', e, { 'helper': $(), 'element': elm, 'data': drg }); elm = null; drg = null; } }) .on('dnd_start.vakata.jstree', function (e, data) { lastmv = false; lastev = false; if(!data || !data.data || !data.data.jstree) { return; } marker.appendTo(document.body); //.show(); }) .on('dnd_move.vakata.jstree', function (e, data) { var isDifferentNode = data.event.target !== lastev.target; if(opento) { if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { clearTimeout(opento); } } if(!data || !data.data || !data.data.jstree) { return; } // if we are hovering the marker image do nothing (can happen on "inside" drags) if(data.event.target.id && data.event.target.id === 'jstree-marker') { return; } lastev = data.event; var ins = $.jstree.reference(data.event.target), ref = false, off = false, rel = false, tmp, l, t, h, p, i, o, ok, t1, t2, op, ps, pr, ip, tm, is_copy, pn; // if we are over an instance if(ins && ins._data && ins._data.dnd) { marker.attr('class', 'jstree-' + ins.get_theme() + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )); is_copy = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))); data.helper .children().attr('class', 'jstree-' + ins.get_theme() + ' jstree-' + ins.get_theme() + '-' + ins.get_theme_variant() + ' ' + ( ins.settings.core.themes.responsive ? ' jstree-dnd-responsive' : '' )) .find('.jstree-copy').first()[ is_copy ? 'show' : 'hide' ](); // if are hovering the container itself add a new root node //console.log(data.event); if( (data.event.target === ins.element[0] || data.event.target === ins.get_container_ul()[0]) && ins.get_container_ul().children().length === 0) { ok = true; for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { ok = ok && ins.check( (data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey)) ) ? "copy_node" : "move_node"), (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), $.jstree.root, 'last', { 'dnd' : true, 'ref' : ins.get_node($.jstree.root), 'pos' : 'i', 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }); if(!ok) { break; } } if(ok) { lastmv = { 'ins' : ins, 'par' : $.jstree.root, 'pos' : 'last' }; marker.hide(); data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; } return; } } else { // if we are hovering a tree node ref = ins.settings.dnd.large_drop_target ? $(data.event.target).closest('.jstree-node').children('.jstree-anchor') : $(data.event.target).closest('.jstree-anchor'); if(ref && ref.length && ref.parent().is('.jstree-closed, .jstree-open, .jstree-leaf')) { off = ref.offset(); rel = (data.event.pageY !== undefined ? data.event.pageY : data.event.originalEvent.pageY) - off.top; h = ref.outerHeight(); if(rel < h / 3) { o = ['b', 'i', 'a']; } else if(rel > h - h / 3) { o = ['a', 'i', 'b']; } else { o = rel > h / 2 ? ['i', 'a', 'b'] : ['i', 'b', 'a']; } $.each(o, function (j, v) { switch(v) { case 'b': l = off.left - 6; t = off.top; p = ins.get_parent(ref); i = ref.parent().index(); break; case 'i': ip = ins.settings.dnd.inside_pos; tm = ins.get_node(ref.parent()); l = off.left - 2; t = off.top + h / 2 + 1; p = tm.id; i = ip === 'first' ? 0 : (ip === 'last' ? tm.children.length : Math.min(ip, tm.children.length)); break; case 'a': l = off.left - 6; t = off.top + h; p = ins.get_parent(ref); i = ref.parent().index() + 1; break; } ok = true; for(t1 = 0, t2 = data.data.nodes.length; t1 < t2; t1++) { op = data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? "copy_node" : "move_node"; ps = i; if(op === "move_node" && v === 'a' && (data.data.origin && data.data.origin === ins) && p === ins.get_parent(data.data.nodes[t1])) { pr = ins.get_node(p); if(ps > $.inArray(data.data.nodes[t1], pr.children)) { ps -= 1; } } ok = ok && ( (ins && ins.settings && ins.settings.dnd && ins.settings.dnd.check_while_dragging === false) || ins.check(op, (data.data.origin && data.data.origin !== ins ? data.data.origin.get_node(data.data.nodes[t1]) : data.data.nodes[t1]), p, ps, { 'dnd' : true, 'ref' : ins.get_node(ref.parent()), 'pos' : v, 'origin' : data.data.origin, 'is_multi' : (data.data.origin && data.data.origin !== ins), 'is_foreign' : (!data.data.origin) }) ); if(!ok) { if(ins && ins.last_error) { laster = ins.last_error(); } break; } } if(v === 'i' && ref.parent().is('.jstree-closed') && ins.settings.dnd.open_timeout) { if (!data.event || data.event.type !== 'dragover' || isDifferentNode) { if (opento) { clearTimeout(opento); } opento = setTimeout((function (x, z) { return function () { x.open_node(z); }; }(ins, ref)), ins.settings.dnd.open_timeout); } } if(ok) { pn = ins.get_node(p, true); if (!pn.hasClass('.jstree-dnd-parent')) { $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); pn.addClass('jstree-dnd-parent'); } lastmv = { 'ins' : ins, 'par' : p, 'pos' : v === 'i' && ip === 'last' && i === 0 && !ins.is_loaded(tm) ? 'last' : i }; marker.css({ 'left' : l + 'px', 'top' : t + 'px' }).show(); data.helper.find('.jstree-icon').first().removeClass('jstree-er').addClass('jstree-ok'); if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { data.event.originalEvent.dataTransfer.dropEffect = is_copy ? 'copy' : 'move'; } laster = {}; o = true; return false; } }); if(o === true) { return; } } } } $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); lastmv = false; data.helper.find('.jstree-icon').removeClass('jstree-ok').addClass('jstree-er'); if (data.event.originalEvent && data.event.originalEvent.dataTransfer) { //data.event.originalEvent.dataTransfer.dropEffect = 'none'; } marker.hide(); }) .on('dnd_scroll.vakata.jstree', function (e, data) { if(!data || !data.data || !data.data.jstree) { return; } marker.hide(); lastmv = false; lastev = false; data.helper.find('.jstree-icon').first().removeClass('jstree-ok').addClass('jstree-er'); }) .on('dnd_stop.vakata.jstree', function (e, data) { $('.jstree-dnd-parent').removeClass('jstree-dnd-parent'); if(opento) { clearTimeout(opento); } if(!data || !data.data || !data.data.jstree) { return; } marker.hide().detach(); var i, j, nodes = []; if(lastmv) { for(i = 0, j = data.data.nodes.length; i < j; i++) { nodes[i] = data.data.origin ? data.data.origin.get_node(data.data.nodes[i]) : data.data.nodes[i]; } lastmv.ins[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (data.event.metaKey || data.event.ctrlKey))) ? 'copy_node' : 'move_node' ](nodes, lastmv.par, lastmv.pos, false, false, false, data.data.origin); } else { i = $(data.event.target).closest('.jstree'); if(i.length && laster && laster.error && laster.error === 'check') { i = i.jstree(true); if(i) { i.settings.core.error.call(this, laster); } } } lastev = false; lastmv = false; }) .on('keyup.jstree keydown.jstree', function (e, data) { data = $.vakata.dnd._get(); if(data && data.data && data.data.jstree) { if (e.type === "keyup" && e.which === 27) { if (opento) { clearTimeout(opento); } lastmv = false; laster = false; lastev = false; opento = false; marker.hide().detach(); $.vakata.dnd._clean(); } else { data.helper.find('.jstree-copy').first()[ data.data.origin && (data.data.origin.settings.dnd.always_copy || (data.data.origin.settings.dnd.copy && (e.metaKey || e.ctrlKey))) ? 'show' : 'hide' ](); if(lastev) { lastev.metaKey = e.metaKey; lastev.ctrlKey = e.ctrlKey; $.vakata.dnd._trigger('move', lastev); } } } }); }); // helpers (function ($) { $.vakata.html = { div : $('
      '), escape : function (str) { return $.vakata.html.div.text(str).html(); }, strip : function (str) { return $.vakata.html.div.empty().append($.parseHTML(str)).text(); } }; // private variable var vakata_dnd = { element : false, target : false, is_down : false, is_drag : false, helper : false, helper_w: 0, data : false, init_x : 0, init_y : 0, scroll_l: 0, scroll_t: 0, scroll_e: false, scroll_i: false, is_touch: false }; $.vakata.dnd = { settings : { scroll_speed : 10, scroll_proximity : 20, helper_left : 5, helper_top : 10, threshold : 5, threshold_touch : 10 }, _trigger : function (event_name, e, data) { if (data === undefined) { data = $.vakata.dnd._get(); } data.event = e; $(document).triggerHandler("dnd_" + event_name + ".vakata", data); }, _get : function () { return { "data" : vakata_dnd.data, "element" : vakata_dnd.element, "helper" : vakata_dnd.helper }; }, _clean : function () { if(vakata_dnd.helper) { vakata_dnd.helper.remove(); } if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } vakata_dnd = { element : false, target : false, is_down : false, is_drag : false, helper : false, helper_w: 0, data : false, init_x : 0, init_y : 0, scroll_l: 0, scroll_t: 0, scroll_e: false, scroll_i: false, is_touch: false }; $(document).off("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); $(document).off("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); }, _scroll : function (init_only) { if(!vakata_dnd.scroll_e || (!vakata_dnd.scroll_l && !vakata_dnd.scroll_t)) { if(vakata_dnd.scroll_i) { clearInterval(vakata_dnd.scroll_i); vakata_dnd.scroll_i = false; } return false; } if(!vakata_dnd.scroll_i) { vakata_dnd.scroll_i = setInterval($.vakata.dnd._scroll, 100); return false; } if(init_only === true) { return false; } var i = vakata_dnd.scroll_e.scrollTop(), j = vakata_dnd.scroll_e.scrollLeft(); vakata_dnd.scroll_e.scrollTop(i + vakata_dnd.scroll_t * $.vakata.dnd.settings.scroll_speed); vakata_dnd.scroll_e.scrollLeft(j + vakata_dnd.scroll_l * $.vakata.dnd.settings.scroll_speed); if(i !== vakata_dnd.scroll_e.scrollTop() || j !== vakata_dnd.scroll_e.scrollLeft()) { /** * triggered on the document when a drag causes an element to scroll * @event * @plugin dnd * @name dnd_scroll.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {jQuery} event the element that is scrolling */ $.vakata.dnd._trigger("scroll", vakata_dnd.scroll_e); } }, start : function (e, data, html) { if(e.type === "touchstart" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { e.pageX = e.originalEvent.changedTouches[0].pageX; e.pageY = e.originalEvent.changedTouches[0].pageY; e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); } if(vakata_dnd.is_drag) { $.vakata.dnd.stop({}); } try { e.currentTarget.unselectable = "on"; e.currentTarget.onselectstart = function() { return false; }; if(e.currentTarget.style) { e.currentTarget.style.touchAction = "none"; e.currentTarget.style.msTouchAction = "none"; e.currentTarget.style.MozUserSelect = "none"; } } catch(ignore) { } vakata_dnd.init_x = e.pageX; vakata_dnd.init_y = e.pageY; vakata_dnd.data = data; vakata_dnd.is_down = true; vakata_dnd.element = e.currentTarget; vakata_dnd.target = e.target; vakata_dnd.is_touch = e.type === "touchstart"; if(html !== false) { vakata_dnd.helper = $("
      ").html(html).css({ "display" : "block", "margin" : "0", "padding" : "0", "position" : "absolute", "top" : "-2000px", "lineHeight" : "16px", "zIndex" : "10000" }); } $(document).on("mousemove.vakata.jstree touchmove.vakata.jstree", $.vakata.dnd.drag); $(document).on("mouseup.vakata.jstree touchend.vakata.jstree", $.vakata.dnd.stop); return false; }, drag : function (e) { if(e.type === "touchmove" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { e.pageX = e.originalEvent.changedTouches[0].pageX; e.pageY = e.originalEvent.changedTouches[0].pageY; e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); } if(!vakata_dnd.is_down) { return; } if(!vakata_dnd.is_drag) { if( Math.abs(e.pageX - vakata_dnd.init_x) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) || Math.abs(e.pageY - vakata_dnd.init_y) > (vakata_dnd.is_touch ? $.vakata.dnd.settings.threshold_touch : $.vakata.dnd.settings.threshold) ) { if(vakata_dnd.helper) { vakata_dnd.helper.appendTo(document.body); vakata_dnd.helper_w = vakata_dnd.helper.outerWidth(); } vakata_dnd.is_drag = true; $(vakata_dnd.target).one('click.vakata', false); /** * triggered on the document when a drag starts * @event * @plugin dnd * @name dnd_start.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {Object} event the event that caused the start (probably mousemove) */ $.vakata.dnd._trigger("start", e); } else { return; } } var d = false, w = false, dh = false, wh = false, dw = false, ww = false, dt = false, dl = false, ht = false, hl = false; vakata_dnd.scroll_t = 0; vakata_dnd.scroll_l = 0; vakata_dnd.scroll_e = false; $($(e.target).parentsUntil("body").addBack().get().reverse()) .filter(function () { return (/^auto|scroll$/).test($(this).css("overflow")) && (this.scrollHeight > this.offsetHeight || this.scrollWidth > this.offsetWidth); }) .each(function () { var t = $(this), o = t.offset(); if(this.scrollHeight > this.offsetHeight) { if(o.top + t.height() - e.pageY < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } if(e.pageY - o.top < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } } if(this.scrollWidth > this.offsetWidth) { if(o.left + t.width() - e.pageX < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } if(e.pageX - o.left < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } } if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { vakata_dnd.scroll_e = $(this); return false; } }); if(!vakata_dnd.scroll_e) { d = $(document); w = $(window); dh = d.height(); wh = w.height(); dw = d.width(); ww = w.width(); dt = d.scrollTop(); dl = d.scrollLeft(); if(dh > wh && e.pageY - dt < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = -1; } if(dh > wh && wh - (e.pageY - dt) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_t = 1; } if(dw > ww && e.pageX - dl < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = -1; } if(dw > ww && ww - (e.pageX - dl) < $.vakata.dnd.settings.scroll_proximity) { vakata_dnd.scroll_l = 1; } if(vakata_dnd.scroll_t || vakata_dnd.scroll_l) { vakata_dnd.scroll_e = d; } } if(vakata_dnd.scroll_e) { $.vakata.dnd._scroll(true); } if(vakata_dnd.helper) { ht = parseInt(e.pageY + $.vakata.dnd.settings.helper_top, 10); hl = parseInt(e.pageX + $.vakata.dnd.settings.helper_left, 10); if(dh && ht + 25 > dh) { ht = dh - 50; } if(dw && hl + vakata_dnd.helper_w > dw) { hl = dw - (vakata_dnd.helper_w + 2); } vakata_dnd.helper.css({ left : hl + "px", top : ht + "px" }); } /** * triggered on the document when a drag is in progress * @event * @plugin dnd * @name dnd_move.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {Object} event the event that caused this to trigger (most likely mousemove) */ $.vakata.dnd._trigger("move", e); return false; }, stop : function (e) { if(e.type === "touchend" && e.originalEvent && e.originalEvent.changedTouches && e.originalEvent.changedTouches[0]) { e.pageX = e.originalEvent.changedTouches[0].pageX; e.pageY = e.originalEvent.changedTouches[0].pageY; e.target = document.elementFromPoint(e.originalEvent.changedTouches[0].pageX - window.pageXOffset, e.originalEvent.changedTouches[0].pageY - window.pageYOffset); } if(vakata_dnd.is_drag) { /** * triggered on the document when a drag stops (the dragged element is dropped) * @event * @plugin dnd * @name dnd_stop.vakata * @param {Mixed} data any data supplied with the call to $.vakata.dnd.start * @param {DOM} element the DOM element being dragged * @param {jQuery} helper the helper shown next to the mouse * @param {Object} event the event that caused the stop */ if (e.target !== vakata_dnd.target) { $(vakata_dnd.target).off('click.vakata'); } $.vakata.dnd._trigger("stop", e); } else { if(e.type === "touchend" && e.target === vakata_dnd.target) { var to = setTimeout(function () { $(e.target).click(); }, 100); $(e.target).one('click', function() { if(to) { clearTimeout(to); } }); } } $.vakata.dnd._clean(); return false; } }; }($)); // include the dnd plugin by default // $.jstree.defaults.plugins.push("dnd"); /** * ### Massload plugin * * Adds massload functionality to jsTree, so that multiple nodes can be loaded in a single request (only useful with lazy loading). */ /** * massload configuration * * It is possible to set this to a standard jQuery-like AJAX config. * In addition to the standard jQuery ajax options here you can supply functions for `data` and `url`, the functions will be run in the current instance's scope and a param will be passed indicating which node IDs need to be loaded, the return value of those functions will be used. * * You can also set this to a function, that function will receive the node IDs being loaded as argument and a second param which is a function (callback) which should be called with the result. * * Both the AJAX and the function approach rely on the same return value - an object where the keys are the node IDs, and the value is the children of that node as an array. * * { * "id1" : [{ "text" : "Child of ID1", "id" : "c1" }, { "text" : "Another child of ID1", "id" : "c2" }], * "id2" : [{ "text" : "Child of ID2", "id" : "c3" }] * } * * @name $.jstree.defaults.massload * @plugin massload */ $.jstree.defaults.massload = null; $.jstree.plugins.massload = function (options, parent) { this.init = function (el, options) { this._data.massload = {}; parent.init.call(this, el, options); }; this._load_nodes = function (nodes, callback, is_callback, force_reload) { var s = this.settings.massload, nodesString = JSON.stringify(nodes), toLoad = [], m = this._model.data, i, j, dom; if (!is_callback) { for(i = 0, j = nodes.length; i < j; i++) { if(!m[nodes[i]] || ( (!m[nodes[i]].state.loaded && !m[nodes[i]].state.failed) || force_reload) ) { toLoad.push(nodes[i]); dom = this.get_node(nodes[i], true); if (dom && dom.length) { dom.addClass("jstree-loading").attr('aria-busy',true); } } } this._data.massload = {}; if (toLoad.length) { if($.isFunction(s)) { return s.call(this, toLoad, $.proxy(function (data) { var i, j; if(data) { for(i in data) { if(data.hasOwnProperty(i)) { this._data.massload[i] = data[i]; } } } for(i = 0, j = nodes.length; i < j; i++) { dom = this.get_node(nodes[i], true); if (dom && dom.length) { dom.removeClass("jstree-loading").attr('aria-busy',false); } } parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); }, this)); } if(typeof s === 'object' && s && s.url) { s = $.extend(true, {}, s); if($.isFunction(s.url)) { s.url = s.url.call(this, toLoad); } if($.isFunction(s.data)) { s.data = s.data.call(this, toLoad); } return $.ajax(s) .done($.proxy(function (data,t,x) { var i, j; if(data) { for(i in data) { if(data.hasOwnProperty(i)) { this._data.massload[i] = data[i]; } } } for(i = 0, j = nodes.length; i < j; i++) { dom = this.get_node(nodes[i], true); if (dom && dom.length) { dom.removeClass("jstree-loading").attr('aria-busy',false); } } parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); }, this)) .fail($.proxy(function (f) { parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); }, this)); } } } return parent._load_nodes.call(this, nodes, callback, is_callback, force_reload); }; this._load_node = function (obj, callback) { var data = this._data.massload[obj.id], rslt = null, dom; if(data) { rslt = this[typeof data === 'string' ? '_append_html_data' : '_append_json_data']( obj, typeof data === 'string' ? $($.parseHTML(data)).filter(function () { return this.nodeType !== 3; }) : data, function (status) { callback.call(this, status); } ); dom = this.get_node(obj.id, true); if (dom && dom.length) { dom.removeClass("jstree-loading").attr('aria-busy',false); } delete this._data.massload[obj.id]; return rslt; } return parent._load_node.call(this, obj, callback); }; }; /** * ### Search plugin * * Adds search functionality to jsTree. */ /** * stores all defaults for the search plugin * @name $.jstree.defaults.search * @plugin search */ $.jstree.defaults.search = { /** * a jQuery-like AJAX config, which jstree uses if a server should be queried for results. * * A `str` (which is the search string) parameter will be added with the request, an optional `inside` parameter will be added if the search is limited to a node id. The expected result is a JSON array with nodes that need to be opened so that matching nodes will be revealed. * Leave this setting as `false` to not query the server. You can also set this to a function, which will be invoked in the instance's scope and receive 3 parameters - the search string, the callback to call with the array of nodes to load, and the optional node ID to limit the search to * @name $.jstree.defaults.search.ajax * @plugin search */ ajax : false, /** * Indicates if the search should be fuzzy or not (should `chnd3` match `child node 3`). Default is `false`. * @name $.jstree.defaults.search.fuzzy * @plugin search */ fuzzy : false, /** * Indicates if the search should be case sensitive. Default is `false`. * @name $.jstree.defaults.search.case_sensitive * @plugin search */ case_sensitive : false, /** * Indicates if the tree should be filtered (by default) to show only matching nodes (keep in mind this can be a heavy on large trees in old browsers). * This setting can be changed at runtime when calling the search method. Default is `false`. * @name $.jstree.defaults.search.show_only_matches * @plugin search */ show_only_matches : false, /** * Indicates if the children of matched element are shown (when show_only_matches is true) * This setting can be changed at runtime when calling the search method. Default is `false`. * @name $.jstree.defaults.search.show_only_matches_children * @plugin search */ show_only_matches_children : false, /** * Indicates if all nodes opened to reveal the search result, should be closed when the search is cleared or a new search is performed. Default is `true`. * @name $.jstree.defaults.search.close_opened_onclear * @plugin search */ close_opened_onclear : true, /** * Indicates if only leaf nodes should be included in search results. Default is `false`. * @name $.jstree.defaults.search.search_leaves_only * @plugin search */ search_leaves_only : false, /** * If set to a function it wil be called in the instance's scope with two arguments - search string and node (where node will be every node in the structure, so use with caution). * If the function returns a truthy value the node will be considered a match (it might not be displayed if search_only_leaves is set to true and the node is not a leaf). Default is `false`. * @name $.jstree.defaults.search.search_callback * @plugin search */ search_callback : false }; $.jstree.plugins.search = function (options, parent) { this.bind = function () { parent.bind.call(this); this._data.search.str = ""; this._data.search.dom = $(); this._data.search.res = []; this._data.search.opn = []; this._data.search.som = false; this._data.search.smc = false; this._data.search.hdn = []; this.element .on("search.jstree", $.proxy(function (e, data) { if(this._data.search.som && data.res.length) { var m = this._model.data, i, j, p = [], k, l; for(i = 0, j = data.res.length; i < j; i++) { if(m[data.res[i]] && !m[data.res[i]].state.hidden) { p.push(data.res[i]); p = p.concat(m[data.res[i]].parents); if(this._data.search.smc) { for (k = 0, l = m[data.res[i]].children_d.length; k < l; k++) { if (m[m[data.res[i]].children_d[k]] && !m[m[data.res[i]].children_d[k]].state.hidden) { p.push(m[data.res[i]].children_d[k]); } } } } } p = $.vakata.array_remove_item($.vakata.array_unique(p), $.jstree.root); this._data.search.hdn = this.hide_all(true); this.show_node(p, true); this.redraw(true); } }, this)) .on("clear_search.jstree", $.proxy(function (e, data) { if(this._data.search.som && data.res.length) { this.show_node(this._data.search.hdn, true); this.redraw(true); } }, this)); }; /** * used to search the tree nodes for a given string * @name search(str [, skip_async]) * @param {String} str the search string * @param {Boolean} skip_async if set to true server will not be queried even if configured * @param {Boolean} show_only_matches if set to true only matching nodes will be shown (keep in mind this can be very slow on large trees or old browsers) * @param {mixed} inside an optional node to whose children to limit the search * @param {Boolean} append if set to true the results of this search are appended to the previous search * @plugin search * @trigger search.jstree */ this.search = function (str, skip_async, show_only_matches, inside, append, show_only_matches_children) { if(str === false || $.trim(str.toString()) === "") { return this.clear_search(); } inside = this.get_node(inside); inside = inside && inside.id ? inside.id : null; str = str.toString(); var s = this.settings.search, a = s.ajax ? s.ajax : false, m = this._model.data, f = null, r = [], p = [], i, j; if(this._data.search.res.length && !append) { this.clear_search(); } if(show_only_matches === undefined) { show_only_matches = s.show_only_matches; } if(show_only_matches_children === undefined) { show_only_matches_children = s.show_only_matches_children; } if(!skip_async && a !== false) { if($.isFunction(a)) { return a.call(this, str, $.proxy(function (d) { if(d && d.d) { d = d.d; } this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () { this.search(str, true, show_only_matches, inside, append, show_only_matches_children); }); }, this), inside); } else { a = $.extend({}, a); if(!a.data) { a.data = {}; } a.data.str = str; if(inside) { a.data.inside = inside; } if (this._data.search.lastRequest) { this._data.search.lastRequest.abort(); } this._data.search.lastRequest = $.ajax(a) .fail($.proxy(function () { this._data.core.last_error = { 'error' : 'ajax', 'plugin' : 'search', 'id' : 'search_01', 'reason' : 'Could not load search parents', 'data' : JSON.stringify(a) }; this.settings.core.error.call(this, this._data.core.last_error); }, this)) .done($.proxy(function (d) { if(d && d.d) { d = d.d; } this._load_nodes(!$.isArray(d) ? [] : $.vakata.array_unique(d), function () { this.search(str, true, show_only_matches, inside, append, show_only_matches_children); }); }, this)); return this._data.search.lastRequest; } } if(!append) { this._data.search.str = str; this._data.search.dom = $(); this._data.search.res = []; this._data.search.opn = []; this._data.search.som = show_only_matches; this._data.search.smc = show_only_matches_children; } f = new $.vakata.search(str, true, { caseSensitive : s.case_sensitive, fuzzy : s.fuzzy }); $.each(m[inside ? inside : $.jstree.root].children_d, function (ii, i) { var v = m[i]; if(v.text && !v.state.hidden && (!s.search_leaves_only || (v.state.loaded && v.children.length === 0)) && ( (s.search_callback && s.search_callback.call(this, str, v)) || (!s.search_callback && f.search(v.text).isMatch) ) ) { r.push(i); p = p.concat(v.parents); } }); if(r.length) { p = $.vakata.array_unique(p); for(i = 0, j = p.length; i < j; i++) { if(p[i] !== $.jstree.root && m[p[i]] && this.open_node(p[i], null, 0) === true) { this._data.search.opn.push(p[i]); } } if(!append) { this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))); this._data.search.res = r; } else { this._data.search.dom = this._data.search.dom.add($(this.element[0].querySelectorAll('#' + $.map(r, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #')))); this._data.search.res = $.vakata.array_unique(this._data.search.res.concat(r)); } this._data.search.dom.children(".jstree-anchor").addClass('jstree-search'); } /** * triggered after search is complete * @event * @name search.jstree * @param {jQuery} nodes a jQuery collection of matching nodes * @param {String} str the search string * @param {Array} res a collection of objects represeing the matching nodes * @plugin search */ this.trigger('search', { nodes : this._data.search.dom, str : str, res : this._data.search.res, show_only_matches : show_only_matches }); }; /** * used to clear the last search (removes classes and shows all nodes if filtering is on) * @name clear_search() * @plugin search * @trigger clear_search.jstree */ this.clear_search = function () { if(this.settings.search.close_opened_onclear) { this.close_node(this._data.search.opn, 0); } /** * triggered after search is complete * @event * @name clear_search.jstree * @param {jQuery} nodes a jQuery collection of matching nodes (the result from the last search) * @param {String} str the search string (the last search string) * @param {Array} res a collection of objects represeing the matching nodes (the result from the last search) * @plugin search */ this.trigger('clear_search', { 'nodes' : this._data.search.dom, str : this._data.search.str, res : this._data.search.res }); if(this._data.search.res.length) { this._data.search.dom = $(this.element[0].querySelectorAll('#' + $.map(this._data.search.res, function (v) { return "0123456789".indexOf(v[0]) !== -1 ? '\\3' + v[0] + ' ' + v.substr(1).replace($.jstree.idregex,'\\$&') : v.replace($.jstree.idregex,'\\$&'); }).join(', #'))); this._data.search.dom.children(".jstree-anchor").removeClass("jstree-search"); } this._data.search.str = ""; this._data.search.res = []; this._data.search.opn = []; this._data.search.dom = $(); }; this.redraw_node = function(obj, deep, callback, force_render) { obj = parent.redraw_node.apply(this, arguments); if(obj) { if($.inArray(obj.id, this._data.search.res) !== -1) { var i, j, tmp = null; for(i = 0, j = obj.childNodes.length; i < j; i++) { if(obj.childNodes[i] && obj.childNodes[i].className && obj.childNodes[i].className.indexOf("jstree-anchor") !== -1) { tmp = obj.childNodes[i]; break; } } if(tmp) { tmp.className += ' jstree-search'; } } } return obj; }; }; // helpers (function ($) { // from http://kiro.me/projects/fuse.html $.vakata.search = function(pattern, txt, options) { options = options || {}; options = $.extend({}, $.vakata.search.defaults, options); if(options.fuzzy !== false) { options.fuzzy = true; } pattern = options.caseSensitive ? pattern : pattern.toLowerCase(); var MATCH_LOCATION = options.location, MATCH_DISTANCE = options.distance, MATCH_THRESHOLD = options.threshold, patternLen = pattern.length, matchmask, pattern_alphabet, match_bitapScore, search; if(patternLen > 32) { options.fuzzy = false; } if(options.fuzzy) { matchmask = 1 << (patternLen - 1); pattern_alphabet = (function () { var mask = {}, i = 0; for (i = 0; i < patternLen; i++) { mask[pattern.charAt(i)] = 0; } for (i = 0; i < patternLen; i++) { mask[pattern.charAt(i)] |= 1 << (patternLen - i - 1); } return mask; }()); match_bitapScore = function (e, x) { var accuracy = e / patternLen, proximity = Math.abs(MATCH_LOCATION - x); if(!MATCH_DISTANCE) { return proximity ? 1.0 : accuracy; } return accuracy + (proximity / MATCH_DISTANCE); }; } search = function (text) { text = options.caseSensitive ? text : text.toLowerCase(); if(pattern === text || text.indexOf(pattern) !== -1) { return { isMatch: true, score: 0 }; } if(!options.fuzzy) { return { isMatch: false, score: 1 }; } var i, j, textLen = text.length, scoreThreshold = MATCH_THRESHOLD, bestLoc = text.indexOf(pattern, MATCH_LOCATION), binMin, binMid, binMax = patternLen + textLen, lastRd, start, finish, rd, charMatch, score = 1, locations = []; if (bestLoc !== -1) { scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); bestLoc = text.lastIndexOf(pattern, MATCH_LOCATION + patternLen); if (bestLoc !== -1) { scoreThreshold = Math.min(match_bitapScore(0, bestLoc), scoreThreshold); } } bestLoc = -1; for (i = 0; i < patternLen; i++) { binMin = 0; binMid = binMax; while (binMin < binMid) { if (match_bitapScore(i, MATCH_LOCATION + binMid) <= scoreThreshold) { binMin = binMid; } else { binMax = binMid; } binMid = Math.floor((binMax - binMin) / 2 + binMin); } binMax = binMid; start = Math.max(1, MATCH_LOCATION - binMid + 1); finish = Math.min(MATCH_LOCATION + binMid, textLen) + patternLen; rd = new Array(finish + 2); rd[finish + 1] = (1 << i) - 1; for (j = finish; j >= start; j--) { charMatch = pattern_alphabet[text.charAt(j - 1)]; if (i === 0) { rd[j] = ((rd[j + 1] << 1) | 1) & charMatch; } else { rd[j] = ((rd[j + 1] << 1) | 1) & charMatch | (((lastRd[j + 1] | lastRd[j]) << 1) | 1) | lastRd[j + 1]; } if (rd[j] & matchmask) { score = match_bitapScore(i, j - 1); if (score <= scoreThreshold) { scoreThreshold = score; bestLoc = j - 1; locations.push(bestLoc); if (bestLoc > MATCH_LOCATION) { start = Math.max(1, 2 * MATCH_LOCATION - bestLoc); } else { break; } } } } if (match_bitapScore(i + 1, MATCH_LOCATION) > scoreThreshold) { break; } lastRd = rd; } return { isMatch: bestLoc >= 0, score: score }; }; return txt === true ? { 'search' : search } : search(txt); }; $.vakata.search.defaults = { location : 0, distance : 100, threshold : 0.6, fuzzy : false, caseSensitive : false }; }($)); // include the search plugin by default // $.jstree.defaults.plugins.push("search"); /** * ### Sort plugin * * Automatically sorts all siblings in the tree according to a sorting function. */ /** * the settings function used to sort the nodes. * It is executed in the tree's context, accepts two nodes as arguments and should return `1` or `-1`. * @name $.jstree.defaults.sort * @plugin sort */ $.jstree.defaults.sort = function (a, b) { //return this.get_type(a) === this.get_type(b) ? (this.get_text(a) > this.get_text(b) ? 1 : -1) : this.get_type(a) >= this.get_type(b); return this.get_text(a) > this.get_text(b) ? 1 : -1; }; $.jstree.plugins.sort = function (options, parent) { this.bind = function () { parent.bind.call(this); this.element .on("model.jstree", $.proxy(function (e, data) { this.sort(data.parent, true); }, this)) .on("rename_node.jstree create_node.jstree", $.proxy(function (e, data) { this.sort(data.parent || data.node.parent, false); this.redraw_node(data.parent || data.node.parent, true); }, this)) .on("move_node.jstree copy_node.jstree", $.proxy(function (e, data) { this.sort(data.parent, false); this.redraw_node(data.parent, true); }, this)); }; /** * used to sort a node's children * @private * @name sort(obj [, deep]) * @param {mixed} obj the node * @param {Boolean} deep if set to `true` nodes are sorted recursively. * @plugin sort * @trigger search.jstree */ this.sort = function (obj, deep) { var i, j; obj = this.get_node(obj); if(obj && obj.children && obj.children.length) { obj.children.sort($.proxy(this.settings.sort, this)); if(deep) { for(i = 0, j = obj.children_d.length; i < j; i++) { this.sort(obj.children_d[i], false); } } } }; }; // include the sort plugin by default // $.jstree.defaults.plugins.push("sort"); /** * ### State plugin * * Saves the state of the tree (selected nodes, opened nodes) on the user's computer using available options (localStorage, cookies, etc) */ var to = false; /** * stores all defaults for the state plugin * @name $.jstree.defaults.state * @plugin state */ $.jstree.defaults.state = { /** * A string for the key to use when saving the current tree (change if using multiple trees in your project). Defaults to `jstree`. * @name $.jstree.defaults.state.key * @plugin state */ key : 'jstree', /** * A space separated list of events that trigger a state save. Defaults to `changed.jstree open_node.jstree close_node.jstree`. * @name $.jstree.defaults.state.events * @plugin state */ events : 'changed.jstree open_node.jstree close_node.jstree check_node.jstree uncheck_node.jstree', /** * Time in milliseconds after which the state will expire. Defaults to 'false' meaning - no expire. * @name $.jstree.defaults.state.ttl * @plugin state */ ttl : false, /** * A function that will be executed prior to restoring state with one argument - the state object. Can be used to clear unwanted parts of the state. * @name $.jstree.defaults.state.filter * @plugin state */ filter : false, /** * Should loaded nodes be restored (setting this to true means that it is possible that the whole tree will be loaded for some users - use with caution). Defaults to `false` * @name $.jstree.defaults.state.preserve_loaded * @plugin state */ preserve_loaded : false }; $.jstree.plugins.state = function (options, parent) { this.bind = function () { parent.bind.call(this); var bind = $.proxy(function () { this.element.on(this.settings.state.events, $.proxy(function () { if(to) { clearTimeout(to); } to = setTimeout($.proxy(function () { this.save_state(); }, this), 100); }, this)); /** * triggered when the state plugin is finished restoring the state (and immediately after ready if there is no state to restore). * @event * @name state_ready.jstree * @plugin state */ this.trigger('state_ready'); }, this); this.element .on("ready.jstree", $.proxy(function (e, data) { this.element.one("restore_state.jstree", bind); if(!this.restore_state()) { bind(); } }, this)); }; /** * save the state * @name save_state() * @plugin state */ this.save_state = function () { var tm = this.get_state(); if (!this.settings.state.preserve_loaded) { delete tm.core.loaded; } var st = { 'state' : tm, 'ttl' : this.settings.state.ttl, 'sec' : +(new Date()) }; $.vakata.storage.set(this.settings.state.key, JSON.stringify(st)); }; /** * restore the state from the user's computer * @name restore_state() * @plugin state */ this.restore_state = function () { var k = $.vakata.storage.get(this.settings.state.key); if(!!k) { try { k = JSON.parse(k); } catch(ex) { return false; } } if(!!k && k.ttl && k.sec && +(new Date()) - k.sec > k.ttl) { return false; } if(!!k && k.state) { k = k.state; } if(!!k && $.isFunction(this.settings.state.filter)) { k = this.settings.state.filter.call(this, k); } if(!!k) { if (!this.settings.state.preserve_loaded) { delete k.core.loaded; } this.element.one("set_state.jstree", function (e, data) { data.instance.trigger('restore_state', { 'state' : $.extend(true, {}, k) }); }); this.set_state(k); return true; } return false; }; /** * clear the state on the user's computer * @name clear_state() * @plugin state */ this.clear_state = function () { return $.vakata.storage.del(this.settings.state.key); }; }; (function ($, undefined) { $.vakata.storage = { // simply specifying the functions in FF throws an error set : function (key, val) { return window.localStorage.setItem(key, val); }, get : function (key) { return window.localStorage.getItem(key); }, del : function (key) { return window.localStorage.removeItem(key); } }; }($)); // include the state plugin by default // $.jstree.defaults.plugins.push("state"); /** * ### Types plugin * * Makes it possible to add predefined types for groups of nodes, which make it possible to easily control nesting rules and icon for each group. */ /** * An object storing all types as key value pairs, where the key is the type name and the value is an object that could contain following keys (all optional). * * * `max_children` the maximum number of immediate children this node type can have. Do not specify or set to `-1` for unlimited. * * `max_depth` the maximum number of nesting this node type can have. A value of `1` would mean that the node can have children, but no grandchildren. Do not specify or set to `-1` for unlimited. * * `valid_children` an array of node type strings, that nodes of this type can have as children. Do not specify or set to `-1` for no limits. * * `icon` a string - can be a path to an icon or a className, if using an image that is in the current directory use a `./` prefix, otherwise it will be detected as a class. Omit to use the default icon from your theme. * * `li_attr` an object of values which will be used to add HTML attributes on the resulting LI DOM node (merged with the node's own data) * * `a_attr` an object of values which will be used to add HTML attributes on the resulting A DOM node (merged with the node's own data) * * There are two predefined types: * * * `#` represents the root of the tree, for example `max_children` would control the maximum number of root nodes. * * `default` represents the default node - any settings here will be applied to all nodes that do not have a type specified. * * @name $.jstree.defaults.types * @plugin types */ $.jstree.defaults.types = { 'default' : {} }; $.jstree.defaults.types[$.jstree.root] = {}; $.jstree.plugins.types = function (options, parent) { this.init = function (el, options) { var i, j; if(options && options.types && options.types['default']) { for(i in options.types) { if(i !== "default" && i !== $.jstree.root && options.types.hasOwnProperty(i)) { for(j in options.types['default']) { if(options.types['default'].hasOwnProperty(j) && options.types[i][j] === undefined) { options.types[i][j] = options.types['default'][j]; } } } } } parent.init.call(this, el, options); this._model.data[$.jstree.root].type = $.jstree.root; }; this.refresh = function (skip_loading, forget_state) { parent.refresh.call(this, skip_loading, forget_state); this._model.data[$.jstree.root].type = $.jstree.root; }; this.bind = function () { this.element .on('model.jstree', $.proxy(function (e, data) { var m = this._model.data, dpc = data.nodes, t = this.settings.types, i, j, c = 'default', k; for(i = 0, j = dpc.length; i < j; i++) { c = 'default'; if(m[dpc[i]].original && m[dpc[i]].original.type && t[m[dpc[i]].original.type]) { c = m[dpc[i]].original.type; } if(m[dpc[i]].data && m[dpc[i]].data.jstree && m[dpc[i]].data.jstree.type && t[m[dpc[i]].data.jstree.type]) { c = m[dpc[i]].data.jstree.type; } m[dpc[i]].type = c; if(m[dpc[i]].icon === true && t[c].icon !== undefined) { m[dpc[i]].icon = t[c].icon; } if(t[c].li_attr !== undefined && typeof t[c].li_attr === 'object') { for (k in t[c].li_attr) { if (t[c].li_attr.hasOwnProperty(k)) { if (k === 'id') { continue; } else if (m[dpc[i]].li_attr[k] === undefined) { m[dpc[i]].li_attr[k] = t[c].li_attr[k]; } else if (k === 'class') { m[dpc[i]].li_attr['class'] = t[c].li_attr['class'] + ' ' + m[dpc[i]].li_attr['class']; } } } } if(t[c].a_attr !== undefined && typeof t[c].a_attr === 'object') { for (k in t[c].a_attr) { if (t[c].a_attr.hasOwnProperty(k)) { if (k === 'id') { continue; } else if (m[dpc[i]].a_attr[k] === undefined) { m[dpc[i]].a_attr[k] = t[c].a_attr[k]; } else if (k === 'href' && m[dpc[i]].a_attr[k] === '#') { m[dpc[i]].a_attr['href'] = t[c].a_attr['href']; } else if (k === 'class') { m[dpc[i]].a_attr['class'] = t[c].a_attr['class'] + ' ' + m[dpc[i]].a_attr['class']; } } } } } m[$.jstree.root].type = $.jstree.root; }, this)); parent.bind.call(this); }; this.get_json = function (obj, options, flat) { var i, j, m = this._model.data, opt = options ? $.extend(true, {}, options, {no_id:false}) : {}, tmp = parent.get_json.call(this, obj, opt, flat); if(tmp === false) { return false; } if($.isArray(tmp)) { for(i = 0, j = tmp.length; i < j; i++) { tmp[i].type = tmp[i].id && m[tmp[i].id] && m[tmp[i].id].type ? m[tmp[i].id].type : "default"; if(options && options.no_id) { delete tmp[i].id; if(tmp[i].li_attr && tmp[i].li_attr.id) { delete tmp[i].li_attr.id; } if(tmp[i].a_attr && tmp[i].a_attr.id) { delete tmp[i].a_attr.id; } } } } else { tmp.type = tmp.id && m[tmp.id] && m[tmp.id].type ? m[tmp.id].type : "default"; if(options && options.no_id) { tmp = this._delete_ids(tmp); } } return tmp; }; this._delete_ids = function (tmp) { if($.isArray(tmp)) { for(var i = 0, j = tmp.length; i < j; i++) { tmp[i] = this._delete_ids(tmp[i]); } return tmp; } delete tmp.id; if(tmp.li_attr && tmp.li_attr.id) { delete tmp.li_attr.id; } if(tmp.a_attr && tmp.a_attr.id) { delete tmp.a_attr.id; } if(tmp.children && $.isArray(tmp.children)) { tmp.children = this._delete_ids(tmp.children); } return tmp; }; this.check = function (chk, obj, par, pos, more) { if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } obj = obj && obj.id ? obj : this.get_node(obj); par = par && par.id ? par : this.get_node(par); var m = obj && obj.id ? (more && more.origin ? more.origin : $.jstree.reference(obj.id)) : null, tmp, d, i, j; m = m && m._model && m._model.data ? m._model.data : null; switch(chk) { case "create_node": case "move_node": case "copy_node": if(chk !== 'move_node' || $.inArray(obj.id, par.children) === -1) { tmp = this.get_rules(par); if(tmp.max_children !== undefined && tmp.max_children !== -1 && tmp.max_children === par.children.length) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_01', 'reason' : 'max_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } if(tmp.valid_children !== undefined && tmp.valid_children !== -1 && $.inArray((obj.type || 'default'), tmp.valid_children) === -1) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_02', 'reason' : 'valid_children prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } if(m && obj.children_d && obj.parents) { d = 0; for(i = 0, j = obj.children_d.length; i < j; i++) { d = Math.max(d, m[obj.children_d[i]].parents.length); } d = d - obj.parents.length + 1; } if(d <= 0 || d === undefined) { d = 1; } do { if(tmp.max_depth !== undefined && tmp.max_depth !== -1 && tmp.max_depth < d) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'types', 'id' : 'types_03', 'reason' : 'max_depth prevents function: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; return false; } par = this.get_node(par.parent); tmp = this.get_rules(par); d++; } while(par); } break; } return true; }; /** * used to retrieve the type settings object for a node * @name get_rules(obj) * @param {mixed} obj the node to find the rules for * @return {Object} * @plugin types */ this.get_rules = function (obj) { obj = this.get_node(obj); if(!obj) { return false; } var tmp = this.get_type(obj, true); if(tmp.max_depth === undefined) { tmp.max_depth = -1; } if(tmp.max_children === undefined) { tmp.max_children = -1; } if(tmp.valid_children === undefined) { tmp.valid_children = -1; } return tmp; }; /** * used to retrieve the type string or settings object for a node * @name get_type(obj [, rules]) * @param {mixed} obj the node to find the rules for * @param {Boolean} rules if set to `true` instead of a string the settings object will be returned * @return {String|Object} * @plugin types */ this.get_type = function (obj, rules) { obj = this.get_node(obj); return (!obj) ? false : ( rules ? $.extend({ 'type' : obj.type }, this.settings.types[obj.type]) : obj.type); }; /** * used to change a node's type * @name set_type(obj, type) * @param {mixed} obj the node to change * @param {String} type the new type * @plugin types */ this.set_type = function (obj, type) { var m = this._model.data, t, t1, t2, old_type, old_icon, k, d, a; if($.isArray(obj)) { obj = obj.slice(); for(t1 = 0, t2 = obj.length; t1 < t2; t1++) { this.set_type(obj[t1], type); } return true; } t = this.settings.types; obj = this.get_node(obj); if(!t[type] || !obj) { return false; } d = this.get_node(obj, true); if (d && d.length) { a = d.children('.jstree-anchor'); } old_type = obj.type; old_icon = this.get_icon(obj); obj.type = type; if(old_icon === true || !t[old_type] || (t[old_type].icon !== undefined && old_icon === t[old_type].icon)) { this.set_icon(obj, t[type].icon !== undefined ? t[type].icon : true); } // remove old type props if(t[old_type] && t[old_type].li_attr !== undefined && typeof t[old_type].li_attr === 'object') { for (k in t[old_type].li_attr) { if (t[old_type].li_attr.hasOwnProperty(k)) { if (k === 'id') { continue; } else if (k === 'class') { m[obj.id].li_attr['class'] = (m[obj.id].li_attr['class'] || '').replace(t[old_type].li_attr[k], ''); if (d) { d.removeClass(t[old_type].li_attr[k]); } } else if (m[obj.id].li_attr[k] === t[old_type].li_attr[k]) { m[obj.id].li_attr[k] = null; if (d) { d.removeAttr(k); } } } } } if(t[old_type] && t[old_type].a_attr !== undefined && typeof t[old_type].a_attr === 'object') { for (k in t[old_type].a_attr) { if (t[old_type].a_attr.hasOwnProperty(k)) { if (k === 'id') { continue; } else if (k === 'class') { m[obj.id].a_attr['class'] = (m[obj.id].a_attr['class'] || '').replace(t[old_type].a_attr[k], ''); if (a) { a.removeClass(t[old_type].a_attr[k]); } } else if (m[obj.id].a_attr[k] === t[old_type].a_attr[k]) { if (k === 'href') { m[obj.id].a_attr[k] = '#'; if (a) { a.attr('href', '#'); } } else { delete m[obj.id].a_attr[k]; if (a) { a.removeAttr(k); } } } } } } // add new props if(t[type].li_attr !== undefined && typeof t[type].li_attr === 'object') { for (k in t[type].li_attr) { if (t[type].li_attr.hasOwnProperty(k)) { if (k === 'id') { continue; } else if (m[obj.id].li_attr[k] === undefined) { m[obj.id].li_attr[k] = t[type].li_attr[k]; if (d) { if (k === 'class') { d.addClass(t[type].li_attr[k]); } else { d.attr(k, t[type].li_attr[k]); } } } else if (k === 'class') { m[obj.id].li_attr['class'] = t[type].li_attr[k] + ' ' + m[obj.id].li_attr['class']; if (d) { d.addClass(t[type].li_attr[k]); } } } } } if(t[type].a_attr !== undefined && typeof t[type].a_attr === 'object') { for (k in t[type].a_attr) { if (t[type].a_attr.hasOwnProperty(k)) { if (k === 'id') { continue; } else if (m[obj.id].a_attr[k] === undefined) { m[obj.id].a_attr[k] = t[type].a_attr[k]; if (a) { if (k === 'class') { a.addClass(t[type].a_attr[k]); } else { a.attr(k, t[type].a_attr[k]); } } } else if (k === 'href' && m[obj.id].a_attr[k] === '#') { m[obj.id].a_attr['href'] = t[type].a_attr['href']; if (a) { a.attr('href', t[type].a_attr['href']); } } else if (k === 'class') { m[obj.id].a_attr['class'] = t[type].a_attr['class'] + ' ' + m[obj.id].a_attr['class']; if (a) { a.addClass(t[type].a_attr[k]); } } } } } return true; }; }; // include the types plugin by default // $.jstree.defaults.plugins.push("types"); /** * ### Unique plugin * * Enforces that no nodes with the same name can coexist as siblings. */ /** * stores all defaults for the unique plugin * @name $.jstree.defaults.unique * @plugin unique */ $.jstree.defaults.unique = { /** * Indicates if the comparison should be case sensitive. Default is `false`. * @name $.jstree.defaults.unique.case_sensitive * @plugin unique */ case_sensitive : false, /** * Indicates if white space should be trimmed before the comparison. Default is `false`. * @name $.jstree.defaults.unique.trim_whitespace * @plugin unique */ trim_whitespace : false, /** * A callback executed in the instance's scope when a new node is created and the name is already taken, the two arguments are the conflicting name and the counter. The default will produce results like `New node (2)`. * @name $.jstree.defaults.unique.duplicate * @plugin unique */ duplicate : function (name, counter) { return name + ' (' + counter + ')'; } }; $.jstree.plugins.unique = function (options, parent) { this.check = function (chk, obj, par, pos, more) { if(parent.check.call(this, chk, obj, par, pos, more) === false) { return false; } obj = obj && obj.id ? obj : this.get_node(obj); par = par && par.id ? par : this.get_node(par); if(!par || !par.children) { return true; } var n = chk === "rename_node" ? pos : obj.text, c = [], s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, m = this._model.data, i, j, t; for(i = 0, j = par.children.length; i < j; i++) { t = m[par.children[i]].text; if (!s) { t = t.toLowerCase(); } if (w) { t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } c.push(t); } if(!s) { n = n.toLowerCase(); } if (w) { n = n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } switch(chk) { case "delete_node": return true; case "rename_node": t = obj.text || ''; if (!s) { t = t.toLowerCase(); } if (w) { t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } i = ($.inArray(n, c) === -1 || (obj.text && t === n)); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_01', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; case "create_node": i = ($.inArray(n, c) === -1); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_04', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; case "copy_node": i = ($.inArray(n, c) === -1); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_02', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; case "move_node": i = ( (obj.parent === par.id && (!more || !more.is_multi)) || $.inArray(n, c) === -1); if(!i) { this._data.core.last_error = { 'error' : 'check', 'plugin' : 'unique', 'id' : 'unique_03', 'reason' : 'Child with name ' + n + ' already exists. Preventing: ' + chk, 'data' : JSON.stringify({ 'chk' : chk, 'pos' : pos, 'obj' : obj && obj.id ? obj.id : false, 'par' : par && par.id ? par.id : false }) }; } return i; } return true; }; this.create_node = function (par, node, pos, callback, is_loaded) { if(!node || node.text === undefined) { if(par === null) { par = $.jstree.root; } par = this.get_node(par); if(!par) { return parent.create_node.call(this, par, node, pos, callback, is_loaded); } pos = pos === undefined ? "last" : pos; if(!pos.toString().match(/^(before|after)$/) && !is_loaded && !this.is_loaded(par)) { return parent.create_node.call(this, par, node, pos, callback, is_loaded); } if(!node) { node = {}; } var tmp, n, dpc, i, j, m = this._model.data, s = this.settings.unique.case_sensitive, w = this.settings.unique.trim_whitespace, cb = this.settings.unique.duplicate, t; n = tmp = this.get_string('New node'); dpc = []; for(i = 0, j = par.children.length; i < j; i++) { t = m[par.children[i]].text; if (!s) { t = t.toLowerCase(); } if (w) { t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } dpc.push(t); } i = 1; t = n; if (!s) { t = t.toLowerCase(); } if (w) { t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } while($.inArray(t, dpc) !== -1) { n = cb.call(this, tmp, (++i)).toString(); t = n; if (!s) { t = t.toLowerCase(); } if (w) { t = t.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); } } node.text = n; } return parent.create_node.call(this, par, node, pos, callback, is_loaded); }; }; // include the unique plugin by default // $.jstree.defaults.plugins.push("unique"); /** * ### Wholerow plugin * * Makes each node appear block level. Making selection easier. May cause slow down for large trees in old browsers. */ var div = document.createElement('DIV'); div.setAttribute('unselectable','on'); div.setAttribute('role','presentation'); div.className = 'jstree-wholerow'; div.innerHTML = ' '; $.jstree.plugins.wholerow = function (options, parent) { this.bind = function () { parent.bind.call(this); this.element .on('ready.jstree set_state.jstree', $.proxy(function () { this.hide_dots(); }, this)) .on("init.jstree loading.jstree ready.jstree", $.proxy(function () { //div.style.height = this._data.core.li_height + 'px'; this.get_container_ul().addClass('jstree-wholerow-ul'); }, this)) .on("deselect_all.jstree", $.proxy(function (e, data) { this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); }, this)) .on("changed.jstree", $.proxy(function (e, data) { this.element.find('.jstree-wholerow-clicked').removeClass('jstree-wholerow-clicked'); var tmp = false, i, j; for(i = 0, j = data.selected.length; i < j; i++) { tmp = this.get_node(data.selected[i], true); if(tmp && tmp.length) { tmp.children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); } } }, this)) .on("open_node.jstree", $.proxy(function (e, data) { this.get_node(data.node, true).find('.jstree-clicked').parent().children('.jstree-wholerow').addClass('jstree-wholerow-clicked'); }, this)) .on("hover_node.jstree dehover_node.jstree", $.proxy(function (e, data) { if(e.type === "hover_node" && this.is_disabled(data.node)) { return; } this.get_node(data.node, true).children('.jstree-wholerow')[e.type === "hover_node"?"addClass":"removeClass"]('jstree-wholerow-hovered'); }, this)) .on("contextmenu.jstree", ".jstree-wholerow", $.proxy(function (e) { if (this._data.contextmenu) { e.preventDefault(); var tmp = $.Event('contextmenu', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey, pageX : e.pageX, pageY : e.pageY }); $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp); } }, this)) /*! .on("mousedown.jstree touchstart.jstree", ".jstree-wholerow", function (e) { if(e.target === e.currentTarget) { var a = $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor"); e.target = a[0]; a.trigger(e); } }) */ .on("click.jstree", ".jstree-wholerow", function (e) { e.stopImmediatePropagation(); var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus(); }) .on("dblclick.jstree", ".jstree-wholerow", function (e) { e.stopImmediatePropagation(); var tmp = $.Event('dblclick', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus(); }) .on("click.jstree", ".jstree-leaf > .jstree-ocl", $.proxy(function (e) { e.stopImmediatePropagation(); var tmp = $.Event('click', { metaKey : e.metaKey, ctrlKey : e.ctrlKey, altKey : e.altKey, shiftKey : e.shiftKey }); $(e.currentTarget).closest(".jstree-node").children(".jstree-anchor").first().trigger(tmp).focus(); }, this)) .on("mouseover.jstree", ".jstree-wholerow, .jstree-icon", $.proxy(function (e) { e.stopImmediatePropagation(); if(!this.is_disabled(e.currentTarget)) { this.hover_node(e.currentTarget); } return false; }, this)) .on("mouseleave.jstree", ".jstree-node", $.proxy(function (e) { this.dehover_node(e.currentTarget); }, this)); }; this.teardown = function () { if(this.settings.wholerow) { this.element.find(".jstree-wholerow").remove(); } parent.teardown.call(this); }; this.redraw_node = function(obj, deep, callback, force_render) { obj = parent.redraw_node.apply(this, arguments); if(obj) { var tmp = div.cloneNode(true); //tmp.style.height = this._data.core.li_height + 'px'; if($.inArray(obj.id, this._data.core.selected) !== -1) { tmp.className += ' jstree-wholerow-clicked'; } if(this._data.core.focused && this._data.core.focused === obj.id) { tmp.className += ' jstree-wholerow-hovered'; } obj.insertBefore(tmp, obj.childNodes[0]); } return obj; }; }; // include the wholerow plugin by default // $.jstree.defaults.plugins.push("wholerow"); if(window.customElements && Object && Object.create) { var proto = Object.create(HTMLElement.prototype); proto.createdCallback = function () { var c = { core : {}, plugins : [] }, i; for(i in $.jstree.plugins) { if($.jstree.plugins.hasOwnProperty(i) && this.attributes[i]) { c.plugins.push(i); if(this.getAttribute(i) && JSON.parse(this.getAttribute(i))) { c[i] = JSON.parse(this.getAttribute(i)); } } } for(i in $.jstree.defaults.core) { if($.jstree.defaults.core.hasOwnProperty(i) && this.attributes[i]) { c.core[i] = JSON.parse(this.getAttribute(i)) || this.getAttribute(i); } } $(this).jstree(c); }; // proto.attributeChangedCallback = function (name, previous, value) { }; try { window.customElements.define("vakata-jstree", function() {}, { prototype: proto }); } catch (ignore) { } } })); ================================================ FILE: libs/jstree/themes/mixed/style.css ================================================ /* jsTree default theme */ .jstree-node, .jstree-children, .jstree-container-ul { display: block; margin: 0; padding: 0; list-style-type: none; list-style-image: none; } .jstree-node { white-space: nowrap; } .jstree-anchor { display: inline-block; color: black; white-space: nowrap; padding: 0 4px 0 1px; margin: 0; vertical-align: top; } .jstree-anchor:focus { outline: 0; } .jstree-anchor, .jstree-anchor:link, .jstree-anchor:visited, .jstree-anchor:hover, .jstree-anchor:active { text-decoration: none; color: inherit; } .jstree-icon { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-icon:empty { display: inline-block; text-decoration: none; margin: 0; padding: 0; vertical-align: top; text-align: center; } .jstree-ocl { cursor: pointer; } .jstree-leaf > .jstree-ocl { cursor: default; } .jstree .jstree-open > .jstree-children { display: block; } .jstree .jstree-closed > .jstree-children, .jstree .jstree-leaf > .jstree-children { display: none; } .jstree-anchor > .jstree-themeicon { margin-right: 2px; } .jstree-no-icons .jstree-themeicon, .jstree-anchor > .jstree-themeicon-hidden { display: none; } .jstree-hidden, .jstree-node.jstree-hidden { display: none; } .jstree-rtl .jstree-anchor { padding: 0 1px 0 4px; } .jstree-rtl .jstree-anchor > .jstree-themeicon { margin-left: 2px; margin-right: 0; } .jstree-rtl .jstree-node { margin-left: 0; } .jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-wholerow-ul { position: relative; display: inline-block; min-width: 100%; } .jstree-wholerow-ul .jstree-leaf > .jstree-ocl { cursor: pointer; } .jstree-wholerow-ul .jstree-anchor, .jstree-wholerow-ul .jstree-icon { position: relative; } .jstree-wholerow-ul .jstree-wholerow { width: 100%; cursor: pointer; position: absolute; left: 0; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .jstree-contextmenu .jstree-anchor { -webkit-user-select: none; /* disable selection/Copy of UIWebView */ -webkit-touch-callout: none; /* disable the IOS popup when long-press on a link */ } .vakata-context { display: none; } .vakata-context, .vakata-context ul { margin: 0; padding: 2px; position: absolute; background: #f5f5f5; border: 1px solid #979797; box-shadow: 2px 2px 2px #999999; } .vakata-context ul { list-style: none; left: 100%; margin-top: -2.7em; margin-left: -4px; } .vakata-context .vakata-context-right ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context li { list-style: none; } .vakata-context li > a { display: block; padding: 0 2em 0 2em; text-decoration: none; width: auto; color: black; white-space: nowrap; line-height: 2.4em; text-shadow: 1px 1px 0 white; border-radius: 1px; } .vakata-context li > a:hover { position: relative; background-color: #e8eff7; box-shadow: 0 0 2px #0a6aa1; } .vakata-context li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAIORI4JlrqN1oMSnmmZDQUAOw=="); background-position: right center; background-repeat: no-repeat; } .vakata-context li > a:focus { outline: 0; } .vakata-context .vakata-context-hover > a { position: relative; background-color: #e8eff7; box-shadow: 0 0 2px #0a6aa1; } .vakata-context .vakata-context-separator > a, .vakata-context .vakata-context-separator > a:hover { background: white; border: 0; border-top: 1px solid #e2e3e3; height: 1px; min-height: 1px; max-height: 1px; padding: 0; margin: 0 0 0 2.4em; border-left: 1px solid #e0e0e0; text-shadow: 0 0 0 transparent; box-shadow: 0 0 0 transparent; border-radius: 0; } .vakata-context .vakata-contextmenu-disabled a, .vakata-context .vakata-contextmenu-disabled a:hover { color: silver; background-color: transparent; border: 0; box-shadow: 0 0 0; } .vakata-context li > a > i { text-decoration: none; display: inline-block; width: 2.4em; height: 2.4em; background: transparent; margin: 0 0 0 -2em; vertical-align: top; text-align: center; line-height: 2.4em; } .vakata-context li > a > i:empty { width: 2.4em; line-height: 2.4em; } .vakata-context li > a .vakata-contextmenu-sep { display: inline-block; width: 1px; height: 2.4em; background: white; margin: 0 0.5em 0 0; border-left: 1px solid #e2e3e3; } .vakata-context .vakata-contextmenu-shortcut { font-size: 0.8em; color: silver; opacity: 0.5; display: none; } .vakata-context-rtl ul { left: auto; right: 100%; margin-left: auto; margin-right: -4px; } .vakata-context-rtl li > a.vakata-context-parent { background-image: url("data:image/gif;base64,R0lGODlhCwAHAIAAACgoKP///yH5BAEAAAEALAAAAAALAAcAAAINjI+AC7rWHIsPtmoxLAA7"); background-position: left center; background-repeat: no-repeat; } .vakata-context-rtl .vakata-context-separator > a { margin: 0 2.4em 0 0; border-left: 0; border-right: 1px solid #e2e3e3; } .vakata-context-rtl .vakata-context-left ul { right: auto; left: 100%; margin-left: -4px; margin-right: auto; } .vakata-context-rtl li > a > i { margin: 0 -2em 0 0; } .vakata-context-rtl li > a .vakata-contextmenu-sep { margin: 0 0 0 0.5em; border-left-color: white; background: #e2e3e3; } #jstree-marker { position: absolute; top: 0; left: 0; margin: -5px 0 0 0; padding: 0; border-right: 0; border-top: 5px solid transparent; border-bottom: 5px solid transparent; border-left: 5px solid; width: 0; height: 0; font-size: 0; line-height: 0; } #jstree-dnd { line-height: 16px; margin: 0; padding: 4px; } #jstree-dnd .jstree-icon, #jstree-dnd .jstree-copy { display: inline-block; text-decoration: none; margin: 0 2px 0 0; padding: 0; width: 16px; height: 16px; } #jstree-dnd .jstree-ok { background: green; } #jstree-dnd .jstree-er { background: red; } #jstree-dnd .jstree-copy { margin: 0 2px 0 2px; } .jstree-default .jstree-node, .jstree-default .jstree-icon { background-repeat: no-repeat; background-color: transparent; } .jstree-default .jstree-anchor, .jstree-default .jstree-animated, .jstree-default .jstree-wholerow { transition: background-color 0.15s, box-shadow 0.15s; } .jstree-default .jstree-hovered { background: #e7f4f9; border-radius: 2px; box-shadow: inset 0 0 1px #cccccc; } .jstree-default .jstree-context { background: #e7f4f9; border-radius: 2px; box-shadow: inset 0 0 1px #cccccc; } .jstree-default .jstree-clicked { background: #beebff; border-radius: 2px; box-shadow: inset 0 0 1px #999999; } .jstree-default .jstree-no-icons .jstree-anchor > .jstree-themeicon { display: none; } .jstree-default .jstree-disabled { background: transparent; color: #666666; } .jstree-default .jstree-disabled.jstree-hovered { background: transparent; box-shadow: none; } .jstree-default .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default .jstree-disabled > .jstree-icon { opacity: 0.8; filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } .jstree-default .jstree-search { font-style: italic; color: #8b0000; font-weight: bold; } .jstree-default .jstree-no-checkboxes .jstree-checkbox { display: none !important; } .jstree-default.jstree-checkbox-no-clicked .jstree-clicked { background: transparent; box-shadow: none; } .jstree-default.jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered { background: #e7f4f9; } .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked { background: transparent; } .jstree-default.jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default > .jstree-striped { min-width: 100%; display: inline-block; background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAMAAAB/qqA+AAAABlBMVEUAAAAAAAClZ7nPAAAAAnRSTlMNAMM9s3UAAAAXSURBVHjajcEBAQAAAIKg/H/aCQZ70AUBjAATb6YPDgAAAABJRU5ErkJggg==") left top repeat; } .jstree-default > .jstree-wholerow-ul .jstree-hovered, .jstree-default > .jstree-wholerow-ul .jstree-clicked { background: transparent; box-shadow: none; border-radius: 0; } .jstree-default .jstree-wholerow { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } .jstree-default .jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default .jstree-wholerow-clicked { background: #beebff; background: -webkit-linear-gradient(top, #beebff 0%, #a8e4ff 100%); background: linear-gradient(to bottom, #beebff 0%, #a8e4ff 100%); } .jstree-default .jstree-node { min-height: 24px; line-height: 24px; margin-left: 24px; min-width: 24px; } .jstree-default .jstree-anchor { line-height: 24px; height: 24px; } .jstree-default .jstree-icon { width: 24px; height: 24px; line-height: 24px; } .jstree-default .jstree-icon:empty { width: 24px; height: 24px; line-height: 24px; } .jstree-default.jstree-rtl .jstree-node { margin-right: 24px; } .jstree-default .jstree-wholerow { height: 24px; } .jstree-default .jstree-node, .jstree-default .jstree-icon { background-image: url("32px.png"); } .jstree-default .jstree-node { background-position: -292px -4px; background-repeat: repeat-y; } .jstree-default .jstree-last { background: transparent; } .jstree-default .jstree-open > .jstree-ocl { background-position: -132px -4px; } .jstree-default .jstree-closed > .jstree-ocl { background-position: -100px -4px; } .jstree-default .jstree-leaf > .jstree-ocl { background-position: -68px -4px; } .jstree-default .jstree-themeicon { background-position: -260px -4px; } .jstree-default > .jstree-no-dots .jstree-node, .jstree-default > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -36px -4px; } .jstree-default > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -4px -4px; } .jstree-default .jstree-disabled { background: transparent; } .jstree-default .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default .jstree-checkbox { background-position: -164px -4px; } .jstree-default .jstree-checkbox:hover { background-position: -164px -36px; } .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default .jstree-checked > .jstree-checkbox { background-position: -228px -4px; } .jstree-default.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default .jstree-checked > .jstree-checkbox:hover { background-position: -228px -36px; } .jstree-default .jstree-anchor > .jstree-undetermined { background-position: -196px -4px; } .jstree-default .jstree-anchor > .jstree-undetermined:hover { background-position: -196px -36px; } .jstree-default .jstree-checkbox-disabled { opacity: 0.8; filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } .jstree-default > .jstree-striped { background-size: auto 48px; } .jstree-default.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default.jstree-rtl .jstree-last { background: transparent; } .jstree-default.jstree-rtl .jstree-open > .jstree-ocl { background-position: -132px -36px; } .jstree-default.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -100px -36px; } .jstree-default.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -68px -36px; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -36px -36px; } .jstree-default.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -4px -36px; } .jstree-default .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-default .jstree-file { background: url("32px.png") -100px -68px no-repeat; } .jstree-default .jstree-folder { background: url("32px.png") -260px -4px no-repeat; } .jstree-default > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default { line-height: 24px; padding: 0 4px; } #jstree-dnd.jstree-default .jstree-ok, #jstree-dnd.jstree-default .jstree-er { background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default i { background: transparent; width: 24px; height: 24px; line-height: 24px; } #jstree-dnd.jstree-default .jstree-ok { background-position: -4px -68px; } #jstree-dnd.jstree-default .jstree-er { background-position: -36px -68px; } .jstree-default .jstree-ellipsis { overflow: hidden; } .jstree-default .jstree-ellipsis .jstree-anchor { width: calc(100% - 29px); text-overflow: ellipsis; overflow: hidden; } .jstree-default .jstree-ellipsis.jstree-no-icons .jstree-anchor { width: calc(100% - 5px); } .jstree-default.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); } .jstree-default.jstree-rtl .jstree-last { background: transparent; } .jstree-default-small .jstree-node { min-height: 18px; line-height: 18px; margin-left: 18px; min-width: 18px; } .jstree-default-small .jstree-anchor { line-height: 18px; height: 18px; } .jstree-default-small .jstree-icon { width: 18px; height: 18px; line-height: 18px; } .jstree-default-small .jstree-icon:empty { width: 18px; height: 18px; line-height: 18px; } .jstree-default-small.jstree-rtl .jstree-node { margin-right: 18px; } .jstree-default-small .jstree-wholerow { height: 18px; } .jstree-default-small .jstree-node, .jstree-default-small .jstree-icon { background-image: url("32px.png"); } .jstree-default-small .jstree-node { background-position: -295px -7px; background-repeat: repeat-y; } .jstree-default-small .jstree-last { background: transparent; } .jstree-default-small .jstree-open > .jstree-ocl { background-position: -135px -7px; } .jstree-default-small .jstree-closed > .jstree-ocl { background-position: -103px -7px; } .jstree-default-small .jstree-leaf > .jstree-ocl { background-position: -71px -7px; } .jstree-default-small .jstree-themeicon { background-position: -263px -7px; } .jstree-default-small > .jstree-no-dots .jstree-node, .jstree-default-small > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-small > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -7px; } .jstree-default-small > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -7px; } .jstree-default-small .jstree-disabled { background: transparent; } .jstree-default-small .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default-small .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default-small .jstree-checkbox { background-position: -167px -7px; } .jstree-default-small .jstree-checkbox:hover { background-position: -167px -39px; } .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-small .jstree-checked > .jstree-checkbox { background-position: -231px -7px; } .jstree-default-small.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-small .jstree-checked > .jstree-checkbox:hover { background-position: -231px -39px; } .jstree-default-small .jstree-anchor > .jstree-undetermined { background-position: -199px -7px; } .jstree-default-small .jstree-anchor > .jstree-undetermined:hover { background-position: -199px -39px; } .jstree-default-small .jstree-checkbox-disabled { opacity: 0.8; filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } .jstree-default-small > .jstree-striped { background-size: auto 36px; } .jstree-default-small.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default-small.jstree-rtl .jstree-last { background: transparent; } .jstree-default-small.jstree-rtl .jstree-open > .jstree-ocl { background-position: -135px -39px; } .jstree-default-small.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -103px -39px; } .jstree-default-small.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -71px -39px; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -39px -39px; } .jstree-default-small.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: -7px -39px; } .jstree-default-small .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-small > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-default-small .jstree-file { background: url("32px.png") -103px -71px no-repeat; } .jstree-default-small .jstree-folder { background: url("32px.png") -263px -7px no-repeat; } .jstree-default-small > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default-small { line-height: 18px; padding: 0 4px; } #jstree-dnd.jstree-default-small .jstree-ok, #jstree-dnd.jstree-default-small .jstree-er { background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default-small i { background: transparent; width: 18px; height: 18px; line-height: 18px; } #jstree-dnd.jstree-default-small .jstree-ok { background-position: -7px -71px; } #jstree-dnd.jstree-default-small .jstree-er { background-position: -39px -71px; } .jstree-default-small .jstree-ellipsis { overflow: hidden; } .jstree-default-small .jstree-ellipsis .jstree-anchor { width: calc(100% - 23px); text-overflow: ellipsis; overflow: hidden; } .jstree-default-small .jstree-ellipsis.jstree-no-icons .jstree-anchor { width: calc(100% - 5px); } .jstree-default-small.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAACAQMAAABv1h6PAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMHBgAAiABBI4gz9AAAAABJRU5ErkJggg=="); } .jstree-default-small.jstree-rtl .jstree-last { background: transparent; } .jstree-default-large .jstree-node { min-height: 32px; line-height: 32px; margin-left: 32px; min-width: 32px; } .jstree-default-large .jstree-anchor { line-height: 32px; height: 32px; } .jstree-default-large .jstree-icon { width: 32px; height: 32px; line-height: 32px; } .jstree-default-large .jstree-icon:empty { width: 32px; height: 32px; line-height: 32px; } .jstree-default-large.jstree-rtl .jstree-node { margin-right: 32px; } .jstree-default-large .jstree-wholerow { height: 32px; } .jstree-default-large .jstree-node, .jstree-default-large .jstree-icon { background-image: url("32px.png"); } .jstree-default-large .jstree-node { background-position: -288px 0px; background-repeat: repeat-y; } .jstree-default-large .jstree-last { background: transparent; } .jstree-default-large .jstree-open > .jstree-ocl { background-position: -128px 0px; } .jstree-default-large .jstree-closed > .jstree-ocl { background-position: -96px 0px; } .jstree-default-large .jstree-leaf > .jstree-ocl { background-position: -64px 0px; } .jstree-default-large .jstree-themeicon { background-position: -256px 0px; } .jstree-default-large > .jstree-no-dots .jstree-node, .jstree-default-large > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-large > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px 0px; } .jstree-default-large > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px 0px; } .jstree-default-large .jstree-disabled { background: transparent; } .jstree-default-large .jstree-disabled.jstree-hovered { background: transparent; } .jstree-default-large .jstree-disabled.jstree-clicked { background: #efefef; } .jstree-default-large .jstree-checkbox { background-position: -160px 0px; } .jstree-default-large .jstree-checkbox:hover { background-position: -160px -32px; } .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-large .jstree-checked > .jstree-checkbox { background-position: -224px 0px; } .jstree-default-large.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-large .jstree-checked > .jstree-checkbox:hover { background-position: -224px -32px; } .jstree-default-large .jstree-anchor > .jstree-undetermined { background-position: -192px 0px; } .jstree-default-large .jstree-anchor > .jstree-undetermined:hover { background-position: -192px -32px; } .jstree-default-large .jstree-checkbox-disabled { opacity: 0.8; filter: url("data:image/svg+xml;utf8,#jstree-grayscale"); /* Firefox 10+ */ filter: gray; /* IE6-9 */ -webkit-filter: grayscale(100%); /* Chrome 19+ & Safari 6+ */ } .jstree-default-large > .jstree-striped { background-size: auto 64px; } .jstree-default-large.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAACAQMAAAB49I5GAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjAAMOBgAAGAAJMwQHdQAAAABJRU5ErkJggg=="); background-position: 100% 1px; background-repeat: repeat-y; } .jstree-default-large.jstree-rtl .jstree-last { background: transparent; } .jstree-default-large.jstree-rtl .jstree-open > .jstree-ocl { background-position: -128px -32px; } .jstree-default-large.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -96px -32px; } .jstree-default-large.jstree-rtl .jstree-leaf > .jstree-ocl { background-position: -64px -32px; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-node, .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-open > .jstree-ocl { background-position: -32px -32px; } .jstree-default-large.jstree-rtl > .jstree-no-dots .jstree-closed > .jstree-ocl { background-position: 0px -32px; } .jstree-default-large .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-large > .jstree-container-ul .jstree-loading > .jstree-ocl { background: url("throbber.gif") center center no-repeat; } .jstree-default-large .jstree-file { background: url("32px.png") -96px -64px no-repeat; } .jstree-default-large .jstree-folder { background: url("32px.png") -256px 0px no-repeat; } .jstree-default-large > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } #jstree-dnd.jstree-default-large { line-height: 32px; padding: 0 4px; } #jstree-dnd.jstree-default-large .jstree-ok, #jstree-dnd.jstree-default-large .jstree-er { background-image: url("32px.png"); background-repeat: no-repeat; background-color: transparent; } #jstree-dnd.jstree-default-large i { background: transparent; width: 32px; height: 32px; line-height: 32px; } #jstree-dnd.jstree-default-large .jstree-ok { background-position: 0px -64px; } #jstree-dnd.jstree-default-large .jstree-er { background-position: -32px -64px; } .jstree-default-large .jstree-ellipsis { overflow: hidden; } .jstree-default-large .jstree-ellipsis .jstree-anchor { width: calc(100% - 37px); text-overflow: ellipsis; overflow: hidden; } .jstree-default-large .jstree-ellipsis.jstree-no-icons .jstree-anchor { width: calc(100% - 5px); } .jstree-default-large.jstree-rtl .jstree-node { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAACAQMAAAAD0EyKAAAABlBMVEUAAAAdHRvEkCwcAAAAAXRSTlMAQObYZgAAAAxJREFUCNdjgIIGBgABCgCBvVLXcAAAAABJRU5ErkJggg=="); } .jstree-default-large.jstree-rtl .jstree-last { background: transparent; } @media (max-width: 768px) { #jstree-dnd.jstree-dnd-responsive { line-height: 40px; font-weight: bold; font-size: 1.1em; text-shadow: 1px 1px white; } #jstree-dnd.jstree-dnd-responsive > i { background: transparent; width: 40px; height: 40px; } #jstree-dnd.jstree-dnd-responsive > .jstree-ok { background-image: url("40px.png"); background-position: 0 -200px; background-size: 120px 240px; } #jstree-dnd.jstree-dnd-responsive > .jstree-er { background-image: url("40px.png"); background-position: -40px -200px; background-size: 120px 240px; } #jstree-marker.jstree-dnd-responsive { border-left-width: 10px; border-top-width: 10px; border-bottom-width: 10px; margin-top: -10px; } } @media (max-width: 768px) { .jstree-default-responsive { /* .jstree-open > .jstree-ocl, .jstree-closed > .jstree-ocl { border-radius:20px; background-color:white; } */ } .jstree-default-responsive .jstree-icon { background-image: url("40px.png"); } .jstree-default-responsive .jstree-node, .jstree-default-responsive .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-responsive .jstree-node { min-height: 40px; line-height: 40px; margin-left: 40px; min-width: 40px; white-space: nowrap; } .jstree-default-responsive .jstree-anchor { line-height: 40px; height: 40px; } .jstree-default-responsive .jstree-icon, .jstree-default-responsive .jstree-icon:empty { width: 40px; height: 40px; line-height: 40px; } .jstree-default-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; } .jstree-default-responsive.jstree-rtl .jstree-node { margin-left: 0; margin-right: 40px; background: transparent; } .jstree-default-responsive.jstree-rtl .jstree-container-ul > .jstree-node { margin-right: 0; } .jstree-default-responsive .jstree-ocl, .jstree-default-responsive .jstree-themeicon, .jstree-default-responsive .jstree-checkbox { background-size: 120px 240px; } .jstree-default-responsive .jstree-leaf > .jstree-ocl, .jstree-default-responsive.jstree-rtl .jstree-leaf > .jstree-ocl { background: transparent; } .jstree-default-responsive .jstree-open > .jstree-ocl { background-position: 0 0px !important; } .jstree-default-responsive .jstree-closed > .jstree-ocl { background-position: 0 -40px !important; } .jstree-default-responsive.jstree-rtl .jstree-closed > .jstree-ocl { background-position: -40px 0px !important; } .jstree-default-responsive .jstree-themeicon { background-position: -40px -40px; } .jstree-default-responsive .jstree-checkbox, .jstree-default-responsive .jstree-checkbox:hover { background-position: -40px -80px; } .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox, .jstree-default-responsive.jstree-checkbox-selection .jstree-clicked > .jstree-checkbox:hover, .jstree-default-responsive .jstree-checked > .jstree-checkbox, .jstree-default-responsive .jstree-checked > .jstree-checkbox:hover { background-position: 0 -80px; } .jstree-default-responsive .jstree-anchor > .jstree-undetermined, .jstree-default-responsive .jstree-anchor > .jstree-undetermined:hover { background-position: 0 -120px; } .jstree-default-responsive .jstree-anchor { font-weight: bold; font-size: 1.1em; text-shadow: 1px 1px white; } .jstree-default-responsive > .jstree-striped { background: transparent; } .jstree-default-responsive .jstree-wholerow { border-top: 1px solid rgba(255, 255, 255, 0.7); border-bottom: 1px solid rgba(64, 64, 64, 0.2); background: #ebebeb; height: 40px; } .jstree-default-responsive .jstree-wholerow-hovered { background: #e7f4f9; } .jstree-default-responsive .jstree-wholerow-clicked { background: #beebff; } .jstree-default-responsive .jstree-children .jstree-last > .jstree-wholerow { box-shadow: inset 0 -6px 3px -5px #666666; } .jstree-default-responsive .jstree-children .jstree-open > .jstree-wholerow { box-shadow: inset 0 6px 3px -5px #666666; border-top: 0; } .jstree-default-responsive .jstree-children .jstree-open + .jstree-open { box-shadow: none; } .jstree-default-responsive .jstree-node, .jstree-default-responsive .jstree-icon, .jstree-default-responsive .jstree-node > .jstree-ocl, .jstree-default-responsive .jstree-themeicon, .jstree-default-responsive .jstree-checkbox { background-image: url("40px.png"); background-size: 120px 240px; } .jstree-default-responsive .jstree-node { background-position: -80px 0; background-repeat: repeat-y; } .jstree-default-responsive .jstree-last { background: transparent; } .jstree-default-responsive .jstree-leaf > .jstree-ocl { background-position: -40px -120px; } .jstree-default-responsive .jstree-last > .jstree-ocl { background-position: -40px -160px; } .jstree-default-responsive .jstree-themeicon-custom { background-color: transparent; background-image: none; background-position: 0 0; } .jstree-default-responsive .jstree-file { background: url("40px.png") 0 -160px no-repeat; background-size: 120px 240px; } .jstree-default-responsive .jstree-folder { background: url("40px.png") -40px -40px no-repeat; background-size: 120px 240px; } .jstree-default-responsive > .jstree-container-ul > .jstree-node { margin-left: 0; margin-right: 0; } } ================================================ FILE: libs/openlayers3/LICENSE ================================================ http://openlayers.org/ Code licensed under the 2-Clause BSD. All documentation CC BY 3.0. Thanks to our sponsors. https://tldrlegal.com/license/bsd-2-clause-license-(freebsd) ================================================ FILE: libs/openlayers3/ol-deps.js ================================================ // This file was autogenerated by depswriter.py. // Please do not edit. goog.addDependency('../../../ol.ext/pbf.js', ['ol.ext.pbf'], [], false); goog.addDependency('../../../ol.ext/pixelworks.js', ['ol.ext.pixelworks'], [], false); goog.addDependency('../../../ol.ext/rbush.js', ['ol.ext.rbush'], [], false); goog.addDependency('../../../ol.ext/vectortile.js', ['ol.ext.vectortile'], [], false); goog.addDependency('../../../ol/ol/animation.js', ['ol.animation'], ['ol', 'ol.PreRenderFunction', 'ol.ViewHint', 'ol.coordinate', 'ol.easing'], false); goog.addDependency('../../../ol/ol/array.js', ['ol.array'], ['goog.array', 'goog.asserts'], false); goog.addDependency('../../../ol/ol/attribution.js', ['ol.Attribution'], ['goog.math', 'ol.TileRange'], false); goog.addDependency('../../../ol/ol/canvasfunction.js', ['ol.CanvasFunctionType'], [], false); goog.addDependency('../../../ol/ol/centerconstraint.js', ['ol.CenterConstraint', 'ol.CenterConstraintType'], ['ol.math'], false); goog.addDependency('../../../ol/ol/collection.js', ['ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType'], ['goog.array', 'goog.events.Event', 'ol.Object'], false); goog.addDependency('../../../ol/ol/color/color.js', ['ol.Color', 'ol.color'], ['goog.asserts', 'goog.color', 'goog.color.names', 'goog.vec.Mat4', 'ol', 'ol.math'], false); goog.addDependency('../../../ol/ol/constraints.js', ['ol.Constraints'], ['ol.CenterConstraintType', 'ol.ResolutionConstraintType', 'ol.RotationConstraintType'], false); goog.addDependency('../../../ol/ol/control/attributioncontrol.js', ['ol.control.Attribution'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.object', 'goog.style', 'ol', 'ol.Attribution', 'ol.control.Control', 'ol.css', 'ol.source.Tile'], false); goog.addDependency('../../../ol/ol/control/control.js', ['ol.control.Control'], ['goog.dom', 'goog.events', 'ol', 'ol.MapEventType', 'ol.Object'], false); goog.addDependency('../../../ol/ol/control/controldefaults.js', ['ol.control'], ['ol', 'ol.Collection', 'ol.control.Attribution', 'ol.control.Rotate', 'ol.control.Zoom'], false); goog.addDependency('../../../ol/ol/control/fullscreencontrol.js', ['ol.control.FullScreen'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.dom.fullscreen', 'goog.dom.fullscreen.EventType', 'goog.events', 'goog.events.EventType', 'ol', 'ol.control.Control', 'ol.css'], false); goog.addDependency('../../../ol/ol/control/mousepositioncontrol.js', ['ol.control.MousePosition'], ['goog.dom', 'goog.events', 'goog.events.EventType', 'ol.CoordinateFormatType', 'ol.Object', 'ol.Pixel', 'ol.TransformFunction', 'ol.control.Control', 'ol.proj', 'ol.proj.Projection'], false); goog.addDependency('../../../ol/ol/control/overviewmapcontrol.js', ['ol.control.OverviewMap'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.math.Size', 'goog.style', 'ol', 'ol.Collection', 'ol.Map', 'ol.MapEventType', 'ol.Object', 'ol.ObjectEventType', 'ol.Overlay', 'ol.OverlayPositioning', 'ol.View', 'ol.ViewProperty', 'ol.control.Control', 'ol.coordinate', 'ol.css', 'ol.extent'], false); goog.addDependency('../../../ol/ol/control/rotatecontrol.js', ['ol.control.Rotate'], ['goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'ol', 'ol.animation', 'ol.control.Control', 'ol.css', 'ol.easing'], false); goog.addDependency('../../../ol/ol/control/scalelinecontrol.js', ['ol.control.ScaleLine', 'ol.control.ScaleLineProperty', 'ol.control.ScaleLineUnits'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.style', 'ol', 'ol.Object', 'ol.TransformFunction', 'ol.control.Control', 'ol.css', 'ol.math', 'ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Units', 'ol.sphere.NORMAL'], false); goog.addDependency('../../../ol/ol/control/zoomcontrol.js', ['ol.control.Zoom'], ['goog.dom', 'goog.events', 'goog.events.EventType', 'ol.animation', 'ol.control.Control', 'ol.css', 'ol.easing'], false); goog.addDependency('../../../ol/ol/control/zoomslidercontrol.js', ['ol.control.ZoomSlider'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.fx.DragEvent', 'goog.fx.Dragger', 'goog.fx.Dragger.EventType', 'goog.math.Rect', 'goog.style', 'ol.Size', 'ol.ViewHint', 'ol.animation', 'ol.control.Control', 'ol.css', 'ol.easing', 'ol.math'], false); goog.addDependency('../../../ol/ol/control/zoomtoextentcontrol.js', ['ol.control.ZoomToExtent'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.events.EventType', 'ol.control.Control', 'ol.css'], false); goog.addDependency('../../../ol/ol/coordinate.js', ['ol.Coordinate', 'ol.CoordinateFormatType', 'ol.coordinate'], ['goog.math', 'goog.string'], false); goog.addDependency('../../../ol/ol/css.js', ['ol.css'], [], false); goog.addDependency('../../../ol/ol/deviceorientation.js', ['ol.DeviceOrientation', 'ol.DeviceOrientationProperty'], ['goog.events', 'ol', 'ol.Object', 'ol.has', 'ol.math'], false); goog.addDependency('../../../ol/ol/dom/dom.js', ['ol.dom', 'ol.dom.BrowserFeature'], ['goog.asserts', 'goog.dom', 'goog.userAgent', 'goog.vec.Mat4', 'ol'], false); goog.addDependency('../../../ol/ol/easing.js', ['ol.easing'], [], false); goog.addDependency('../../../ol/ol/events/condition.js', ['ol.events.ConditionType', 'ol.events.condition'], ['goog.asserts', 'goog.functions', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserPointerEvent'], false); goog.addDependency('../../../ol/ol/extent.js', ['ol.Extent', 'ol.extent', 'ol.extent.Corner', 'ol.extent.Relationship'], ['goog.asserts', 'goog.vec.Mat4', 'ol.Coordinate', 'ol.Size', 'ol.TransformFunction'], false); goog.addDependency('../../../ol/ol/feature.js', ['ol.Feature', 'ol.FeatureStyleFunction'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'ol', 'ol.Object', 'ol.geom.Geometry', 'ol.style.Style'], false); goog.addDependency('../../../ol/ol/featureloader.js', ['ol.FeatureLoader', 'ol.FeatureUrlFunction', 'ol.featureloader'], ['goog.asserts', 'goog.events', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrIo.ResponseType', 'ol.TileState', 'ol.format.FormatType', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/esrijsonformat.js', ['ol.format.EsriJSON'], ['goog.array', 'goog.asserts', 'goog.object', 'ol.Feature', 'ol.extent', 'ol.format.Feature', 'ol.format.JSONFeature', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.geom.flat.orient', 'ol.proj'], false); goog.addDependency('../../../ol/ol/format/featureformat.js', ['ol.format.Feature'], ['ol.geom.Geometry', 'ol.proj'], false); goog.addDependency('../../../ol/ol/format/format.js', ['ol.format.FormatType'], [], false); goog.addDependency('../../../ol/ol/format/geojsonformat.js', ['ol.format.GeoJSON'], ['goog.asserts', 'goog.object', 'ol.Feature', 'ol.format.Feature', 'ol.format.JSONFeature', 'ol.geom.GeometryCollection', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj'], false); goog.addDependency('../../../ol/ol/format/gml/gml2format.js', ['ol.format.GML2'], ['goog.asserts', 'goog.dom.NodeType', 'ol.extent', 'ol.format.GMLBase', 'ol.format.XSD', 'ol.proj', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/gml/gml3format.js', ['ol.format.GML', 'ol.format.GML3'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.Feature', 'ol.extent', 'ol.format.Feature', 'ol.format.GMLBase', 'ol.format.XSD', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/gml/gmlbaseformat.js', ['ol.format.GMLBase'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'goog.string', 'ol.Feature', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/gpxformat.js', ['ol.format.GPX'], ['goog.asserts', 'goog.dom.NodeType', 'ol.Feature', 'ol.array', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.format.XSD', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.Point', 'ol.proj', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/igcformat.js', ['ol.format.IGC', 'ol.format.IGCZ'], ['goog.asserts', 'goog.string', 'goog.string.newlines', 'ol.Feature', 'ol.format.Feature', 'ol.format.TextFeature', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.proj'], false); goog.addDependency('../../../ol/ol/format/jsonfeatureformat.js', ['ol.format.JSONFeature'], ['goog.asserts', 'goog.json', 'ol.format.Feature', 'ol.format.FormatType'], false); goog.addDependency('../../../ol/ol/format/kmlformat.js', ['ol.format.KML'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.Feature', 'ol.FeatureStyleFunction', 'ol.array', 'ol.color', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.format.XSD', 'ol.geom.Geometry', 'ol.geom.GeometryCollection', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.LinearRing', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.math', 'ol.proj', 'ol.style.Fill', 'ol.style.Icon', 'ol.style.IconAnchorUnits', 'ol.style.IconOrigin', 'ol.style.Image', 'ol.style.Stroke', 'ol.style.Style', 'ol.style.Text', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/mvtformat.js', ['ol.format.MVT'], ['goog.asserts', 'ol.Feature', 'ol.ext.pbf', 'ol.ext.vectortile', 'ol.format.Feature', 'ol.format.FormatType', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.proj.Projection', 'ol.proj.Units', 'ol.render.Feature'], false); goog.addDependency('../../../ol/ol/format/osmxmlformat.js', ['ol.format.OSMXML'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol.Feature', 'ol.format.Feature', 'ol.format.XMLFeature', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/owsformat.js', ['ol.format.OWS'], ['goog.asserts', 'goog.dom.NodeType', 'ol.format.XLink', 'ol.format.XML', 'ol.format.XSD', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/polylineformat.js', ['ol.format.Polyline'], ['goog.asserts', 'ol.Feature', 'ol.format.Feature', 'ol.format.TextFeature', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.SimpleGeometry', 'ol.geom.flat.flip', 'ol.geom.flat.inflate', 'ol.proj'], false); goog.addDependency('../../../ol/ol/format/textfeatureformat.js', ['ol.format.TextFeature'], ['goog.asserts', 'ol.format.Feature', 'ol.format.FormatType'], false); goog.addDependency('../../../ol/ol/format/topojsonformat.js', ['ol.format.TopoJSON'], ['goog.asserts', 'goog.object', 'ol.Feature', 'ol.format.Feature', 'ol.format.JSONFeature', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.proj'], false); goog.addDependency('../../../ol/ol/format/wfsformat.js', ['ol.format.WFS'], ['goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.format.GML3', 'ol.format.GMLBase', 'ol.format.XMLFeature', 'ol.format.XSD', 'ol.geom.Geometry', 'ol.proj', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/wktformat.js', ['ol.format.WKT'], ['goog.asserts', 'ol', 'ol.Feature', 'ol.format.Feature', 'ol.format.TextFeature', 'ol.geom.Geometry', 'ol.geom.GeometryCollection', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon'], false); goog.addDependency('../../../ol/ol/format/wmscapabilitiesformat.js', ['ol.format.WMSCapabilities'], ['goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol', 'ol.format.XLink', 'ol.format.XML', 'ol.format.XSD', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/wmsgetfeatureinfoformat.js', ['ol.format.WMSGetFeatureInfo'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.object', 'ol.format.GML2', 'ol.format.XMLFeature', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/wmtscapabilitiesformat.js', ['ol.format.WMTSCapabilities'], ['goog.asserts', 'goog.dom.NodeType', 'ol.extent', 'ol.format.OWS', 'ol.format.XLink', 'ol.format.XML', 'ol.format.XSD', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/xlinkformat.js', ['ol.format.XLink'], [], false); goog.addDependency('../../../ol/ol/format/xmlfeatureformat.js', ['ol.format.XMLFeature'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.xml', 'ol.format.Feature', 'ol.format.FormatType', 'ol.proj', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/xmlformat.js', ['ol.format.XML'], ['goog.asserts', 'ol.xml'], false); goog.addDependency('../../../ol/ol/format/xsdformat.js', ['ol.format.XSD'], ['goog.asserts', 'goog.string', 'ol', 'ol.xml'], false); goog.addDependency('../../../ol/ol/framestate.js', ['ol.PostRenderFunction', 'ol.PreRenderFunction'], [], false); goog.addDependency('../../../ol/ol/geolocation.js', ['ol.Geolocation', 'ol.GeolocationProperty'], ['goog.events', 'goog.events.EventType', 'ol.Coordinate', 'ol.Object', 'ol.geom.Geometry', 'ol.geom.Polygon', 'ol.has', 'ol.math', 'ol.proj', 'ol.sphere.WGS84'], false); goog.addDependency('../../../ol/ol/geom/circle.js', ['ol.geom.Circle'], ['goog.asserts', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.deflate', 'ol.proj'], false); goog.addDependency('../../../ol/ol/geom/flat/areaflatgeom.js', ['ol.geom.flat.area'], [], false); goog.addDependency('../../../ol/ol/geom/flat/centerflatgeom.js', ['ol.geom.flat.center'], ['ol.extent'], false); goog.addDependency('../../../ol/ol/geom/flat/closestflatgeom.js', ['ol.geom.flat.closest'], ['goog.asserts', 'goog.math', 'ol.math'], false); goog.addDependency('../../../ol/ol/geom/flat/containsflatgeom.js', ['ol.geom.flat.contains'], ['goog.asserts', 'ol.extent'], false); goog.addDependency('../../../ol/ol/geom/flat/deflateflatgeom.js', ['ol.geom.flat.deflate'], ['goog.asserts'], false); goog.addDependency('../../../ol/ol/geom/flat/flipflatgeom.js', ['ol.geom.flat.flip'], ['goog.asserts'], false); goog.addDependency('../../../ol/ol/geom/flat/geodesicflatgeom.js', ['ol.geom.flat.geodesic'], ['goog.asserts', 'goog.object', 'ol.TransformFunction', 'ol.math', 'ol.proj'], false); goog.addDependency('../../../ol/ol/geom/flat/inflateflatgeom.js', ['ol.geom.flat.inflate'], [], false); goog.addDependency('../../../ol/ol/geom/flat/interiorpointflatgeom.js', ['ol.geom.flat.interiorpoint'], ['goog.asserts', 'ol.geom.flat.contains'], false); goog.addDependency('../../../ol/ol/geom/flat/interpolateflatgeom.js', ['ol.geom.flat.interpolate'], ['goog.array', 'goog.asserts', 'goog.math'], false); goog.addDependency('../../../ol/ol/geom/flat/intersectsextent.js', ['ol.geom.flat.intersectsextent'], ['goog.asserts', 'ol.extent', 'ol.geom.flat.contains', 'ol.geom.flat.segments'], false); goog.addDependency('../../../ol/ol/geom/flat/lengthflatgeom.js', ['ol.geom.flat.length'], [], false); goog.addDependency('../../../ol/ol/geom/flat/orientflatgeom.js', ['ol.geom.flat.orient'], ['ol', 'ol.geom.flat.reverse'], false); goog.addDependency('../../../ol/ol/geom/flat/reverseflatgeom.js', ['ol.geom.flat.reverse'], [], false); goog.addDependency('../../../ol/ol/geom/flat/segmentsflatgeom.js', ['ol.geom.flat.segments'], [], false); goog.addDependency('../../../ol/ol/geom/flat/simplifyflatgeom.js', ['ol.geom.flat.simplify'], ['ol.math'], false); goog.addDependency('../../../ol/ol/geom/flat/transformflatgeom.js', ['ol.geom.flat.transform'], ['goog.vec.Mat4'], false); goog.addDependency('../../../ol/ol/geom/geometry.js', ['ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType'], ['goog.asserts', 'goog.functions', 'ol.Object', 'ol.extent', 'ol.proj', 'ol.proj.Units'], false); goog.addDependency('../../../ol/ol/geom/geometrycollection.js', ['ol.geom.GeometryCollection'], ['goog.events', 'goog.events.EventType', 'goog.object', 'ol.extent', 'ol.geom.Geometry', 'ol.geom.GeometryType'], false); goog.addDependency('../../../ol/ol/geom/linearring.js', ['ol.geom.LinearRing'], ['ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.area', 'ol.geom.flat.closest', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.simplify'], false); goog.addDependency('../../../ol/ol/geom/linestring.js', ['ol.geom.LineString'], ['goog.array', 'goog.asserts', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.closest', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interpolate', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.length', 'ol.geom.flat.segments', 'ol.geom.flat.simplify'], false); goog.addDependency('../../../ol/ol/geom/multilinestring.js', ['ol.geom.MultiLineString'], ['goog.array', 'goog.asserts', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.SimpleGeometry', 'ol.geom.flat.closest', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interpolate', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.simplify'], false); goog.addDependency('../../../ol/ol/geom/multipoint.js', ['ol.geom.MultiPoint'], ['goog.array', 'goog.asserts', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.Point', 'ol.geom.SimpleGeometry', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.math'], false); goog.addDependency('../../../ol/ol/geom/multipolygon.js', ['ol.geom.MultiPolygon'], ['goog.array', 'goog.asserts', 'goog.object', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.MultiPoint', 'ol.geom.Polygon', 'ol.geom.SimpleGeometry', 'ol.geom.flat.area', 'ol.geom.flat.center', 'ol.geom.flat.closest', 'ol.geom.flat.contains', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interiorpoint', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.orient', 'ol.geom.flat.simplify'], false); goog.addDependency('../../../ol/ol/geom/point.js', ['ol.geom.Point'], ['ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.SimpleGeometry', 'ol.geom.flat.deflate', 'ol.math'], false); goog.addDependency('../../../ol/ol/geom/polygon.js', ['ol.geom.Polygon'], ['goog.array', 'goog.asserts', 'goog.math', 'ol', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.GeometryType', 'ol.geom.LinearRing', 'ol.geom.Point', 'ol.geom.SimpleGeometry', 'ol.geom.flat.area', 'ol.geom.flat.closest', 'ol.geom.flat.contains', 'ol.geom.flat.deflate', 'ol.geom.flat.inflate', 'ol.geom.flat.interiorpoint', 'ol.geom.flat.intersectsextent', 'ol.geom.flat.orient', 'ol.geom.flat.simplify'], false); goog.addDependency('../../../ol/ol/geom/simplegeometry.js', ['ol.geom.SimpleGeometry'], ['goog.asserts', 'goog.functions', 'goog.object', 'ol.extent', 'ol.geom.Geometry', 'ol.geom.GeometryLayout', 'ol.geom.flat.transform'], false); goog.addDependency('../../../ol/ol/graticule.js', ['ol.Graticule'], ['goog.asserts', 'ol.extent', 'ol.geom.GeometryLayout', 'ol.geom.LineString', 'ol.geom.flat.geodesic', 'ol.math', 'ol.proj', 'ol.render.EventType', 'ol.style.Stroke'], false); goog.addDependency('../../../ol/ol/has.js', ['ol.has'], ['goog.dom', 'ol', 'ol.dom', 'ol.webgl'], false); goog.addDependency('../../../ol/ol/image.js', ['ol.Image'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.ImageBase', 'ol.ImageState', 'ol.extent'], false); goog.addDependency('../../../ol/ol/imagebase.js', ['ol.ImageBase', 'ol.ImageState'], ['goog.asserts', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.Attribution', 'ol.Extent'], false); goog.addDependency('../../../ol/ol/imagecanvas.js', ['ol.ImageCanvas'], ['goog.asserts', 'ol.ImageBase', 'ol.ImageState'], false); goog.addDependency('../../../ol/ol/imageloadfunction.js', ['ol.ImageLoadFunctionType'], [], false); goog.addDependency('../../../ol/ol/imagetile.js', ['ol.ImageTile'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.Tile', 'ol.TileCoord', 'ol.TileLoadFunctionType', 'ol.TileState'], false); goog.addDependency('../../../ol/ol/imageurlfunction.js', ['ol.ImageUrlFunction', 'ol.ImageUrlFunctionType'], ['ol.Size'], false); goog.addDependency('../../../ol/ol/interaction/doubleclickzoominteraction.js', ['ol.interaction.DoubleClickZoom'], ['goog.asserts', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.interaction.Interaction'], false); goog.addDependency('../../../ol/ol/interaction/draganddropinteraction.js', ['ol.interaction.DragAndDrop', 'ol.interaction.DragAndDropEvent'], ['goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.FileDropHandler', 'goog.events.FileDropHandler.EventType', 'goog.fs.FileReader', 'goog.functions', 'ol.interaction.Interaction', 'ol.proj'], false); goog.addDependency('../../../ol/ol/interaction/dragboxinteraction.js', ['ol.DragBoxEvent', 'ol.interaction.DragBox'], ['goog.events.Event', 'ol', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Pointer', 'ol.render.Box'], false); goog.addDependency('../../../ol/ol/interaction/dragpaninteraction.js', ['ol.interaction.DragPan'], ['goog.asserts', 'ol.Kinetic', 'ol.Pixel', 'ol.PreRenderFunction', 'ol.ViewHint', 'ol.coordinate', 'ol.events.condition', 'ol.interaction.Pointer'], false); goog.addDependency('../../../ol/ol/interaction/dragrotateandzoominteraction.js', ['ol.interaction.DragRotateAndZoom'], ['goog.math.Vec2', 'ol', 'ol.ViewHint', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false); goog.addDependency('../../../ol/ol/interaction/dragrotateinteraction.js', ['ol.interaction.DragRotate'], ['ol', 'ol.ViewHint', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false); goog.addDependency('../../../ol/ol/interaction/dragzoominteraction.js', ['ol.interaction.DragZoom'], ['goog.asserts', 'ol.animation', 'ol.easing', 'ol.events.condition', 'ol.extent', 'ol.interaction.DragBox'], false); goog.addDependency('../../../ol/ol/interaction/drawinteraction.js', ['ol.interaction.Draw', 'ol.interaction.DrawEvent', 'ol.interaction.DrawEventType', 'ol.interaction.DrawGeometryFunctionType', 'ol.interaction.DrawMode'], ['goog.asserts', 'goog.events', 'goog.events.Event', 'ol.Collection', 'ol.Coordinate', 'ol.Feature', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.Object', 'ol.coordinate', 'ol.events.condition', 'ol.geom.Circle', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.geom.SimpleGeometry', 'ol.interaction.InteractionProperty', 'ol.interaction.Pointer', 'ol.layer.Vector', 'ol.source.Vector'], false); goog.addDependency('../../../ol/ol/interaction/interaction.js', ['ol.interaction.Interaction', 'ol.interaction.InteractionProperty'], ['ol', 'ol.MapBrowserEvent', 'ol.Object', 'ol.animation', 'ol.easing'], false); goog.addDependency('../../../ol/ol/interaction/interactiondefaults.js', ['ol.interaction'], ['ol', 'ol.Collection', 'ol.Kinetic', 'ol.interaction.DoubleClickZoom', 'ol.interaction.DragPan', 'ol.interaction.DragRotate', 'ol.interaction.DragZoom', 'ol.interaction.KeyboardPan', 'ol.interaction.KeyboardZoom', 'ol.interaction.MouseWheelZoom', 'ol.interaction.PinchRotate', 'ol.interaction.PinchZoom'], false); goog.addDependency('../../../ol/ol/interaction/keyboardpaninteraction.js', ['ol.interaction.KeyboardPan'], ['goog.asserts', 'goog.events.KeyCodes', 'goog.events.KeyHandler.EventType', 'goog.functions', 'ol', 'ol.coordinate', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction'], false); goog.addDependency('../../../ol/ol/interaction/keyboardzoominteraction.js', ['ol.interaction.KeyboardZoom'], ['goog.asserts', 'goog.events.KeyHandler.EventType', 'ol.events.ConditionType', 'ol.events.condition', 'ol.interaction.Interaction'], false); goog.addDependency('../../../ol/ol/interaction/modifyinteraction.js', ['ol.interaction.Modify', 'ol.interaction.ModifyEvent'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.functions', 'ol', 'ol.Collection', 'ol.CollectionEventType', 'ol.Feature', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserPointerEvent', 'ol.ViewHint', 'ol.coordinate', 'ol.events.condition', 'ol.extent', 'ol.geom.GeometryType', 'ol.geom.LineString', 'ol.geom.MultiLineString', 'ol.geom.MultiPoint', 'ol.geom.MultiPolygon', 'ol.geom.Point', 'ol.geom.Polygon', 'ol.interaction.Pointer', 'ol.layer.Vector', 'ol.source.Vector', 'ol.structs.RBush'], false); goog.addDependency('../../../ol/ol/interaction/mousewheelzoominteraction.js', ['ol.interaction.MouseWheelZoom'], ['goog.asserts', 'goog.events.MouseWheelEvent', 'goog.events.MouseWheelHandler.EventType', 'ol', 'ol.Coordinate', 'ol.interaction.Interaction', 'ol.math'], false); goog.addDependency('../../../ol/ol/interaction/pinchrotateinteraction.js', ['ol.interaction.PinchRotate'], ['goog.asserts', 'goog.functions', 'goog.style', 'ol', 'ol.Coordinate', 'ol.ViewHint', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false); goog.addDependency('../../../ol/ol/interaction/pinchzoominteraction.js', ['ol.interaction.PinchZoom'], ['goog.asserts', 'goog.functions', 'goog.style', 'ol', 'ol.Coordinate', 'ol.ViewHint', 'ol.interaction.Interaction', 'ol.interaction.Pointer'], false); goog.addDependency('../../../ol/ol/interaction/pointerinteraction.js', ['ol.interaction.Pointer'], ['goog.functions', 'goog.object', 'ol', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserPointerEvent', 'ol.Pixel', 'ol.interaction.Interaction'], false); goog.addDependency('../../../ol/ol/interaction/selectinteraction.js', ['ol.interaction.Select', 'ol.interaction.SelectEvent', 'ol.interaction.SelectEventType', 'ol.interaction.SelectFilterFunction'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.functions', 'goog.object', 'ol.CollectionEventType', 'ol.Feature', 'ol.array', 'ol.events.condition', 'ol.geom.GeometryType', 'ol.interaction.Interaction', 'ol.layer.Vector', 'ol.source.Vector'], false); goog.addDependency('../../../ol/ol/interaction/snapinteraction.js', ['ol.interaction.Snap', 'ol.interaction.SnapProperty'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType', 'ol.Extent', 'ol.Feature', 'ol.Object', 'ol.Observable', 'ol.coordinate', 'ol.extent', 'ol.geom.Geometry', 'ol.interaction.Pointer', 'ol.source.Vector', 'ol.source.VectorEvent', 'ol.source.VectorEventType', 'ol.structs.RBush'], false); goog.addDependency('../../../ol/ol/interaction/translateinteraction.js', ['ol.interaction.Translate', 'ol.interaction.TranslateEvent'], ['goog.events', 'goog.events.Event', 'ol.array', 'ol.interaction.Pointer'], false); goog.addDependency('../../../ol/ol/kinetic.js', ['ol.Kinetic'], ['ol.Coordinate', 'ol.PreRenderFunction', 'ol.animation'], false); goog.addDependency('../../../ol/ol/layer/heatmaplayer.js', ['ol.layer.Heatmap'], ['goog.asserts', 'goog.events', 'goog.object', 'ol', 'ol.Object', 'ol.dom', 'ol.layer.Vector', 'ol.math', 'ol.render.EventType', 'ol.style.Icon', 'ol.style.Style'], false); goog.addDependency('../../../ol/ol/layer/imagelayer.js', ['ol.layer.Image'], ['ol.layer.Layer'], false); goog.addDependency('../../../ol/ol/layer/layer.js', ['ol.layer.Layer'], ['goog.events', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Object', 'ol.layer.Base', 'ol.layer.LayerProperty', 'ol.render.EventType', 'ol.source.State'], false); goog.addDependency('../../../ol/ol/layer/layerbase.js', ['ol.layer.Base', 'ol.layer.LayerProperty', 'ol.layer.LayerState'], ['goog.object', 'ol', 'ol.Object', 'ol.math', 'ol.source.State'], false); goog.addDependency('../../../ol/ol/layer/layergroup.js', ['ol.layer.Group'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.Collection', 'ol.CollectionEvent', 'ol.CollectionEventType', 'ol.Object', 'ol.ObjectEventType', 'ol.extent', 'ol.layer.Base', 'ol.source.State'], false); goog.addDependency('../../../ol/ol/layer/tilelayer.js', ['ol.layer.Tile'], ['goog.object', 'ol', 'ol.layer.Layer'], false); goog.addDependency('../../../ol/ol/layer/vectorlayer.js', ['ol.layer.Vector'], ['goog.asserts', 'goog.object', 'ol', 'ol.layer.Layer', 'ol.style.Style'], false); goog.addDependency('../../../ol/ol/layer/vectortilelayer.js', ['ol.layer.VectorTile'], ['goog.object', 'ol.layer.Vector'], false); goog.addDependency('../../../ol/ol/loadingstrategy.js', ['ol.LoadingStrategy', 'ol.loadingstrategy'], ['ol.TileCoord'], false); goog.addDependency('../../../ol/ol/map.js', ['ol.Map', 'ol.MapProperty'], ['goog.array', 'goog.asserts', 'goog.async.AnimationDelay', 'goog.async.nextTick', 'goog.debug.Console', 'goog.dom', 'goog.dom.ViewportSizeMonitor', 'goog.dom.classlist', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.events.KeyHandler.EventType', 'goog.events.MouseWheelHandler', 'goog.events.MouseWheelHandler.EventType', 'goog.functions', 'goog.log', 'goog.log.Level', 'goog.object', 'goog.style', 'goog.vec.Mat4', 'ol.Collection', 'ol.CollectionEventType', 'ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserEventHandler', 'ol.MapEvent', 'ol.MapEventType', 'ol.Object', 'ol.ObjectEvent', 'ol.ObjectEventType', 'ol.Pixel', 'ol.PostRenderFunction', 'ol.PreRenderFunction', 'ol.RendererType', 'ol.Size', 'ol.TileQueue', 'ol.View', 'ol.ViewHint', 'ol.control', 'ol.extent', 'ol.has', 'ol.interaction', 'ol.layer.Base', 'ol.layer.Group', 'ol.proj', 'ol.proj.common', 'ol.renderer.Map', 'ol.renderer.canvas.Map', 'ol.renderer.dom.Map', 'ol.renderer.webgl.Map', 'ol.size', 'ol.structs.PriorityQueue', 'ol.tilecoord', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/mapbrowserevent.js', ['ol.MapBrowserEvent', 'ol.MapBrowserEvent.EventType', 'ol.MapBrowserEventHandler', 'ol.MapBrowserPointerEvent'], ['goog.asserts', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Coordinate', 'ol.MapEvent', 'ol.Pixel', 'ol.pointer.PointerEvent', 'ol.pointer.PointerEventHandler'], false); goog.addDependency('../../../ol/ol/mapevent.js', ['ol.MapEvent', 'ol.MapEventType'], ['goog.events.Event'], false); goog.addDependency('../../../ol/ol/math.js', ['ol.math'], ['goog.asserts'], false); goog.addDependency('../../../ol/ol/object.js', ['ol.Object', 'ol.ObjectEvent', 'ol.ObjectEventType'], ['goog.events', 'goog.events.Event', 'ol.Observable'], false); goog.addDependency('../../../ol/ol/observable.js', ['ol.Observable'], ['goog.events', 'goog.events.EventTarget', 'goog.events.EventType'], false); goog.addDependency('../../../ol/ol/ol.js', ['ol'], [], false); goog.addDependency('../../../ol/ol/overlay.js', ['ol.Overlay', 'ol.OverlayPositioning', 'ol.OverlayProperty'], ['goog.asserts', 'goog.dom', 'goog.events', 'goog.style', 'ol.Coordinate', 'ol.Map', 'ol.MapEventType', 'ol.Object', 'ol.animation', 'ol.dom', 'ol.extent'], false); goog.addDependency('../../../ol/ol/pixel.js', ['ol.Pixel'], [], false); goog.addDependency('../../../ol/ol/pointer/eventsource.js', ['ol.pointer.EventSource'], ['goog.events.BrowserEvent'], false); goog.addDependency('../../../ol/ol/pointer/mousesource.js', ['ol.pointer.MouseSource'], ['ol.pointer.EventSource'], false); goog.addDependency('../../../ol/ol/pointer/mssource.js', ['ol.pointer.MsSource'], ['ol.pointer.EventSource'], false); goog.addDependency('../../../ol/ol/pointer/nativesource.js', ['ol.pointer.NativeSource'], ['ol.pointer.EventSource'], false); goog.addDependency('../../../ol/ol/pointer/pointerevent.js', ['ol.pointer.PointerEvent'], ['goog.events', 'goog.events.Event'], false); goog.addDependency('../../../ol/ol/pointer/pointereventhandler.js', ['ol.pointer.PointerEventHandler'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'ol.has', 'ol.pointer.MouseSource', 'ol.pointer.MsSource', 'ol.pointer.NativeSource', 'ol.pointer.PointerEvent', 'ol.pointer.TouchSource'], false); goog.addDependency('../../../ol/ol/pointer/touchsource.js', ['ol.pointer.TouchSource'], ['goog.array', 'goog.object', 'ol', 'ol.pointer.EventSource', 'ol.pointer.MouseSource'], false); goog.addDependency('../../../ol/ol/proj/common.js', ['ol.proj.common'], ['ol.proj', 'ol.proj.EPSG3857', 'ol.proj.EPSG4326'], false); goog.addDependency('../../../ol/ol/proj/epsg3857projection.js', ['ol.proj.EPSG3857'], ['goog.asserts', 'ol.math', 'ol.proj', 'ol.proj.Projection', 'ol.proj.Units'], false); goog.addDependency('../../../ol/ol/proj/epsg4326projection.js', ['ol.proj.EPSG4326'], ['ol.proj', 'ol.proj.Projection', 'ol.proj.Units'], false); goog.addDependency('../../../ol/ol/proj/proj.js', ['ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Projection', 'ol.proj.ProjectionLike', 'ol.proj.Units'], ['goog.asserts', 'goog.object', 'ol', 'ol.Extent', 'ol.TransformFunction', 'ol.extent', 'ol.sphere.NORMAL'], false); goog.addDependency('../../../ol/ol/raster/operation.js', ['ol.raster.Operation', 'ol.raster.OperationType'], [], false); goog.addDependency('../../../ol/ol/raster/pixel.js', ['ol.raster.Pixel'], [], false); goog.addDependency('../../../ol/ol/render/box.js', ['ol.render.Box'], ['goog.Disposable', 'goog.asserts', 'ol.geom.Polygon'], false); goog.addDependency('../../../ol/ol/render/canvas/canvas.js', ['ol.render.canvas'], [], false); goog.addDependency('../../../ol/ol/render/canvas/canvasimmediate.js', ['ol.render.canvas.Immediate'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'ol.color', 'ol.extent', 'ol.geom.flat.transform', 'ol.has', 'ol.render.VectorContext', 'ol.render.canvas', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/render/canvas/canvasreplay.js', ['ol.render.canvas.ImageReplay', 'ol.render.canvas.LineStringReplay', 'ol.render.canvas.PolygonReplay', 'ol.render.canvas.Replay', 'ol.render.canvas.ReplayGroup', 'ol.render.canvas.TextReplay'], ['goog.array', 'goog.asserts', 'goog.object', 'goog.vec.Mat4', 'ol', 'ol.array', 'ol.color', 'ol.dom', 'ol.extent', 'ol.extent.Relationship', 'ol.geom.flat.simplify', 'ol.geom.flat.transform', 'ol.has', 'ol.render.IReplayGroup', 'ol.render.VectorContext', 'ol.render.canvas', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/render/ireplay.js', ['ol.render.IReplayGroup'], ['ol.render.VectorContext'], false); goog.addDependency('../../../ol/ol/render/renderevent.js', ['ol.render.Event', 'ol.render.EventType'], ['goog.events.Event', 'ol.render.VectorContext'], false); goog.addDependency('../../../ol/ol/render/renderfeature.js', ['ol.render.Feature'], ['goog.asserts', 'goog.functions', 'ol.extent', 'ol.geom.GeometryType'], false); goog.addDependency('../../../ol/ol/render/vector.js', ['ol.renderer.vector'], ['goog.asserts', 'ol.render.Feature', 'ol.render.IReplayGroup', 'ol.style.ImageState', 'ol.style.Style'], false); goog.addDependency('../../../ol/ol/render/vectorcontext.js', ['ol.render.VectorContext'], [], false); goog.addDependency('../../../ol/ol/render/webgl/webglimagedefaultshader.js', ['ol.render.webgl.imagereplay.shader.Default', 'ol.render.webgl.imagereplay.shader.Default.Locations', 'ol.render.webgl.imagereplay.shader.DefaultFragment', 'ol.render.webgl.imagereplay.shader.DefaultVertex'], ['ol.webgl.shader'], false); goog.addDependency('../../../ol/ol/render/webgl/webglimmediate.js', ['ol.render.webgl.Immediate'], ['goog.array', 'ol.extent', 'ol.render.VectorContext', 'ol.render.webgl.ImageReplay', 'ol.render.webgl.ReplayGroup'], false); goog.addDependency('../../../ol/ol/render/webgl/webglreplay.js', ['ol.render.webgl.ImageReplay', 'ol.render.webgl.ReplayGroup'], ['goog.asserts', 'goog.functions', 'goog.object', 'goog.vec.Mat4', 'ol.extent', 'ol.render.IReplayGroup', 'ol.render.VectorContext', 'ol.render.webgl.imagereplay.shader.Default', 'ol.render.webgl.imagereplay.shader.Default.Locations', 'ol.render.webgl.imagereplay.shader.DefaultFragment', 'ol.render.webgl.imagereplay.shader.DefaultVertex', 'ol.vec.Mat4', 'ol.webgl.Buffer', 'ol.webgl.Context'], false); goog.addDependency('../../../ol/ol/renderer/canvas/canvasimagelayerrenderer.js', ['ol.renderer.canvas.ImageLayer'], ['goog.asserts', 'goog.functions', 'goog.vec.Mat4', 'ol.ImageBase', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Image', 'ol.proj', 'ol.renderer.canvas.Layer', 'ol.source.ImageVector', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/canvas/canvaslayerrenderer.js', ['ol.renderer.canvas.Layer'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'ol.dom', 'ol.extent', 'ol.layer.Layer', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.renderer.Layer', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/canvas/canvasmaprenderer.js', ['ol.renderer.canvas.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.style', 'goog.vec.Mat4', 'ol', 'ol.RendererType', 'ol.css', 'ol.dom', 'ol.layer.Image', 'ol.layer.Layer', 'ol.layer.Tile', 'ol.layer.Vector', 'ol.layer.VectorTile', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.renderer.Map', 'ol.renderer.canvas.ImageLayer', 'ol.renderer.canvas.Layer', 'ol.renderer.canvas.TileLayer', 'ol.renderer.canvas.VectorLayer', 'ol.renderer.canvas.VectorTileLayer', 'ol.source.State', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/canvas/canvastilelayerrenderer.js', ['ol.renderer.canvas.TileLayer'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'ol.Size', 'ol.TileRange', 'ol.TileState', 'ol.dom', 'ol.extent', 'ol.layer.Tile', 'ol.renderer.canvas.Layer', 'ol.size', 'ol.tilecoord', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/canvas/canvasvectorlayerrenderer.js', ['ol.renderer.canvas.VectorLayer'], ['goog.array', 'goog.asserts', 'goog.events', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Vector', 'ol.render.EventType', 'ol.render.canvas.ReplayGroup', 'ol.renderer.canvas.Layer', 'ol.renderer.vector', 'ol.source.Vector'], false); goog.addDependency('../../../ol/ol/renderer/canvas/canvasvectortilelayerrenderer.js', ['ol.renderer.canvas.VectorTileLayer'], ['goog.asserts', 'goog.events', 'goog.vec.Mat4', 'ol.Feature', 'ol.TileRange', 'ol.TileState', 'ol.VectorTile', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.VectorTile', 'ol.proj.Units', 'ol.render.EventType', 'ol.render.canvas.ReplayGroup', 'ol.renderer.canvas.Layer', 'ol.renderer.vector', 'ol.size', 'ol.source.VectorTile', 'ol.tilecoord', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/dom/domimagelayerrenderer.js', ['ol.renderer.dom.ImageLayer'], ['goog.asserts', 'goog.dom', 'goog.vec.Mat4', 'ol.ImageBase', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Image', 'ol.proj', 'ol.renderer.dom.Layer', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/dom/domlayerrenderer.js', ['ol.renderer.dom.Layer'], ['ol', 'ol.layer.Layer', 'ol.renderer.Layer'], false); goog.addDependency('../../../ol/ol/renderer/dom/dommaprenderer.js', ['ol.renderer.dom.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.style', 'goog.vec.Mat4', 'ol', 'ol.RendererType', 'ol.css', 'ol.dom', 'ol.layer.Image', 'ol.layer.Layer', 'ol.layer.Tile', 'ol.layer.Vector', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.renderer.Map', 'ol.renderer.dom.ImageLayer', 'ol.renderer.dom.Layer', 'ol.renderer.dom.TileLayer', 'ol.renderer.dom.VectorLayer', 'ol.source.State', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/dom/domtilelayerrenderer.js', ['ol.renderer.dom.TileLayer'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.style', 'goog.vec.Mat4', 'ol', 'ol.Coordinate', 'ol.TileCoord', 'ol.TileRange', 'ol.TileState', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Tile', 'ol.renderer.dom.Layer', 'ol.size', 'ol.tilecoord', 'ol.tilegrid.TileGrid', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/dom/domvectorlayerrenderer.js', ['ol.renderer.dom.VectorLayer'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.vec.Mat4', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Vector', 'ol.render.Event', 'ol.render.EventType', 'ol.render.canvas.Immediate', 'ol.render.canvas.ReplayGroup', 'ol.renderer.dom.Layer', 'ol.renderer.vector', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/layerrenderer.js', ['ol.renderer.Layer'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.functions', 'ol', 'ol.ImageState', 'ol.Observable', 'ol.TileRange', 'ol.TileState', 'ol.layer.Layer', 'ol.source.Source', 'ol.source.State', 'ol.source.Tile', 'ol.tilecoord', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/maprenderer.js', ['ol.RendererType', 'ol.renderer.Map'], ['goog.Disposable', 'goog.asserts', 'goog.dispose', 'goog.events', 'goog.events.EventType', 'goog.functions', 'goog.object', 'goog.vec.Mat4', 'ol', 'ol.extent', 'ol.layer.Layer', 'ol.renderer.Layer', 'ol.style.IconImageCache', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/renderer/webgl/webglimagelayerrenderer.js', ['ol.renderer.webgl.ImageLayer'], ['goog.asserts', 'goog.functions', 'goog.vec.Mat4', 'goog.webgl', 'ol.Coordinate', 'ol.Extent', 'ol.ImageBase', 'ol.ViewHint', 'ol.dom', 'ol.extent', 'ol.layer.Image', 'ol.proj', 'ol.renderer.webgl.Layer', 'ol.source.ImageVector', 'ol.vec.Mat4', 'ol.webgl.Context'], false); goog.addDependency('../../../ol/ol/renderer/webgl/webgllayerrenderer.js', ['ol.renderer.webgl.Layer'], ['goog.vec.Mat4', 'goog.webgl', 'ol.layer.Layer', 'ol.render.Event', 'ol.render.EventType', 'ol.render.webgl.Immediate', 'ol.renderer.Layer', 'ol.renderer.webgl.map.shader.Default', 'ol.renderer.webgl.map.shader.Default.Locations', 'ol.renderer.webgl.map.shader.DefaultFragment', 'ol.renderer.webgl.map.shader.DefaultVertex', 'ol.webgl.Buffer', 'ol.webgl.Context'], false); goog.addDependency('../../../ol/ol/renderer/webgl/webglmapdefaultshader.js', ['ol.renderer.webgl.map.shader.Default', 'ol.renderer.webgl.map.shader.Default.Locations', 'ol.renderer.webgl.map.shader.DefaultFragment', 'ol.renderer.webgl.map.shader.DefaultVertex'], ['ol.webgl.shader'], false); goog.addDependency('../../../ol/ol/renderer/webgl/webglmaprenderer.js', ['ol.renderer.webgl.Map'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.log', 'goog.log.Logger', 'goog.object', 'goog.style', 'goog.webgl', 'ol', 'ol.RendererType', 'ol.css', 'ol.dom', 'ol.layer.Image', 'ol.layer.Layer', 'ol.layer.Tile', 'ol.layer.Vector', 'ol.render.Event', 'ol.render.EventType', 'ol.render.webgl.Immediate', 'ol.renderer.Map', 'ol.renderer.webgl.ImageLayer', 'ol.renderer.webgl.Layer', 'ol.renderer.webgl.TileLayer', 'ol.renderer.webgl.VectorLayer', 'ol.source.State', 'ol.structs.LRUCache', 'ol.structs.PriorityQueue', 'ol.webgl', 'ol.webgl.Context', 'ol.webgl.WebGLContextEventType'], false); goog.addDependency('../../../ol/ol/renderer/webgl/webgltilelayerrenderer.js', ['ol.renderer.webgl.TileLayer'], ['goog.array', 'goog.asserts', 'goog.vec.Mat4', 'goog.vec.Vec4', 'goog.webgl', 'ol.TileRange', 'ol.TileState', 'ol.extent', 'ol.layer.Tile', 'ol.math', 'ol.renderer.webgl.Layer', 'ol.renderer.webgl.tilelayer.shader.Fragment', 'ol.renderer.webgl.tilelayer.shader.Locations', 'ol.renderer.webgl.tilelayer.shader.Vertex', 'ol.size', 'ol.tilecoord', 'ol.vec.Mat4', 'ol.webgl.Buffer'], false); goog.addDependency('../../../ol/ol/renderer/webgl/webgltilelayershader.js', ['ol.renderer.webgl.tilelayer.shader', 'ol.renderer.webgl.tilelayer.shader.Fragment', 'ol.renderer.webgl.tilelayer.shader.Locations', 'ol.renderer.webgl.tilelayer.shader.Vertex'], ['ol.webgl.shader'], false); goog.addDependency('../../../ol/ol/renderer/webgl/webglvectorlayerrenderer.js', ['ol.renderer.webgl.VectorLayer'], ['goog.array', 'goog.asserts', 'goog.events', 'ol.ViewHint', 'ol.extent', 'ol.layer.Vector', 'ol.render.webgl.ReplayGroup', 'ol.renderer.vector', 'ol.renderer.webgl.Layer', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/reproj/image.js', ['ol.reproj.Image', 'ol.reproj.ImageFunctionType'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'ol.ImageBase', 'ol.ImageState', 'ol.extent', 'ol.proj', 'ol.reproj', 'ol.reproj.Triangulation'], false); goog.addDependency('../../../ol/ol/reproj/reproj.js', ['ol.reproj'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.platform', 'goog.math', 'ol.dom', 'ol.extent', 'ol.math', 'ol.proj'], false); goog.addDependency('../../../ol/ol/reproj/tile.js', ['ol.reproj.Tile', 'ol.reproj.TileFunctionType'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.math', 'goog.object', 'ol.Tile', 'ol.TileState', 'ol.extent', 'ol.math', 'ol.proj', 'ol.reproj', 'ol.reproj.Triangulation'], false); goog.addDependency('../../../ol/ol/reproj/triangulation.js', ['ol.reproj.Triangulation'], ['goog.asserts', 'goog.math', 'ol.extent', 'ol.proj'], false); goog.addDependency('../../../ol/ol/resolutionconstraint.js', ['ol.ResolutionConstraint', 'ol.ResolutionConstraintType'], ['ol.array', 'ol.math'], false); goog.addDependency('../../../ol/ol/rotationconstraint.js', ['ol.RotationConstraint', 'ol.RotationConstraintType'], ['ol.math'], false); goog.addDependency('../../../ol/ol/size.js', ['ol.Size', 'ol.size'], ['goog.asserts'], false); goog.addDependency('../../../ol/ol/source/bingmapssource.js', ['ol.source.BingMaps'], ['goog.Uri', 'goog.asserts', 'goog.net.Jsonp', 'ol.Attribution', 'ol.TileRange', 'ol.TileUrlFunction', 'ol.extent', 'ol.proj', 'ol.source.State', 'ol.source.TileImage', 'ol.tilecoord'], false); goog.addDependency('../../../ol/ol/source/clustersource.js', ['ol.source.Cluster'], ['goog.asserts', 'goog.events.EventType', 'goog.object', 'ol.Feature', 'ol.coordinate', 'ol.extent', 'ol.geom.Point', 'ol.source.Vector'], false); goog.addDependency('../../../ol/ol/source/imagecanvassource.js', ['ol.source.ImageCanvas'], ['ol.CanvasFunctionType', 'ol.ImageCanvas', 'ol.extent', 'ol.source.Image'], false); goog.addDependency('../../../ol/ol/source/imagemapguidesource.js', ['ol.source.ImageMapGuide'], ['goog.events', 'goog.events.EventType', 'goog.object', 'goog.uri.utils', 'ol.Image', 'ol.ImageLoadFunctionType', 'ol.ImageUrlFunction', 'ol.extent', 'ol.source.Image'], false); goog.addDependency('../../../ol/ol/source/imagesource.js', ['ol.source.Image', 'ol.source.ImageEvent'], ['goog.array', 'goog.asserts', 'goog.events.Event', 'ol.Attribution', 'ol.ImageState', 'ol.array', 'ol.extent', 'ol.proj', 'ol.reproj.Image', 'ol.source.Source'], false); goog.addDependency('../../../ol/ol/source/imagestaticsource.js', ['ol.source.ImageStatic'], ['goog.events', 'goog.events.EventType', 'ol.Image', 'ol.ImageLoadFunctionType', 'ol.extent', 'ol.proj', 'ol.source.Image'], false); goog.addDependency('../../../ol/ol/source/imagevectorsource.js', ['ol.source.ImageVector'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.vec.Mat4', 'ol.dom', 'ol.extent', 'ol.render.canvas.ReplayGroup', 'ol.renderer.vector', 'ol.source.ImageCanvas', 'ol.source.Vector', 'ol.style.Style', 'ol.vec.Mat4'], false); goog.addDependency('../../../ol/ol/source/imagewmssource.js', ['ol.source.ImageWMS'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'goog.string', 'goog.uri.utils', 'ol', 'ol.Image', 'ol.ImageLoadFunctionType', 'ol.extent', 'ol.proj', 'ol.source.Image', 'ol.source.wms', 'ol.source.wms.ServerType'], false); goog.addDependency('../../../ol/ol/source/mapquestsource.js', ['ol.source.MapQuest'], ['goog.asserts', 'ol.Attribution', 'ol.source.OSM', 'ol.source.XYZ'], false); goog.addDependency('../../../ol/ol/source/osmsource.js', ['ol.source.OSM'], ['ol.Attribution', 'ol.source.XYZ'], false); goog.addDependency('../../../ol/ol/source/rastersource.js', ['ol.source.Raster', 'ol.source.RasterEvent', 'ol.source.RasterEventType'], ['goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.object', 'goog.vec.Mat4', 'ol.ImageCanvas', 'ol.TileQueue', 'ol.dom', 'ol.ext.pixelworks', 'ol.extent', 'ol.layer.Image', 'ol.layer.Tile', 'ol.raster.OperationType', 'ol.renderer.canvas.ImageLayer', 'ol.renderer.canvas.TileLayer', 'ol.source.Image', 'ol.source.State', 'ol.source.Tile'], false); goog.addDependency('../../../ol/ol/source/source.js', ['ol.source.Source', 'ol.source.State'], ['ol', 'ol.Attribution', 'ol.Object', 'ol.proj'], false); goog.addDependency('../../../ol/ol/source/stamensource.js', ['ol.source.Stamen'], ['goog.asserts', 'ol.Attribution', 'ol.source.OSM', 'ol.source.XYZ'], false); goog.addDependency('../../../ol/ol/source/tilearcgisrestsource.js', ['ol.source.TileArcGISRest'], ['goog.asserts', 'goog.math', 'goog.object', 'goog.string', 'goog.uri.utils', 'ol', 'ol.TileCoord', 'ol.extent', 'ol.proj', 'ol.size', 'ol.source.TileImage', 'ol.tilecoord'], false); goog.addDependency('../../../ol/ol/source/tiledebugsource.js', ['ol.source.TileDebug'], ['ol.Tile', 'ol.TileCoord', 'ol.TileState', 'ol.dom', 'ol.size', 'ol.source.Tile', 'ol.tilecoord'], false); goog.addDependency('../../../ol/ol/source/tileimagesource.js', ['ol.source.TileImage'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'goog.object', 'ol.ImageTile', 'ol.TileCache', 'ol.TileState', 'ol.proj', 'ol.reproj.Tile', 'ol.source.UrlTile'], false); goog.addDependency('../../../ol/ol/source/tilejsonsource.js', ['ol.source.TileJSON', 'ol.tilejson'], ['goog.asserts', 'goog.net.Jsonp', 'ol.Attribution', 'ol.TileRange', 'ol.TileUrlFunction', 'ol.extent', 'ol.proj', 'ol.source.State', 'ol.source.TileImage'], false); goog.addDependency('../../../ol/ol/source/tilesource.js', ['ol.source.Tile', 'ol.source.TileEvent', 'ol.source.TileOptions'], ['goog.asserts', 'goog.events.Event', 'ol', 'ol.Attribution', 'ol.Extent', 'ol.TileCache', 'ol.TileRange', 'ol.TileState', 'ol.proj', 'ol.size', 'ol.source.Source', 'ol.tilecoord', 'ol.tilegrid.TileGrid'], false); goog.addDependency('../../../ol/ol/source/tileutfgridsource.js', ['ol.source.TileUTFGrid'], ['goog.asserts', 'goog.async.nextTick', 'goog.events', 'goog.events.EventType', 'goog.net.Jsonp', 'ol.Attribution', 'ol.Tile', 'ol.TileState', 'ol.TileUrlFunction', 'ol.extent', 'ol.proj', 'ol.source.State', 'ol.source.Tile'], false); goog.addDependency('../../../ol/ol/source/tilewmssource.js', ['ol.source.TileWMS'], ['goog.asserts', 'goog.math', 'goog.object', 'goog.string', 'goog.uri.utils', 'ol', 'ol.TileCoord', 'ol.extent', 'ol.proj', 'ol.size', 'ol.source.TileImage', 'ol.source.wms', 'ol.source.wms.ServerType', 'ol.tilecoord'], false); goog.addDependency('../../../ol/ol/source/urltilesource.js', ['ol.source.UrlTile'], ['goog.events', 'ol.TileLoadFunctionType', 'ol.TileState', 'ol.TileUrlFunction', 'ol.TileUrlFunctionType', 'ol.proj', 'ol.source.Tile', 'ol.source.TileEvent'], false); goog.addDependency('../../../ol/ol/source/vectorsource.js', ['ol.source.Vector', 'ol.source.VectorEvent', 'ol.source.VectorEventType'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.object', 'ol', 'ol.Collection', 'ol.CollectionEventType', 'ol.Extent', 'ol.Feature', 'ol.FeatureLoader', 'ol.LoadingStrategy', 'ol.ObjectEventType', 'ol.extent', 'ol.featureloader', 'ol.loadingstrategy', 'ol.proj', 'ol.source.Source', 'ol.source.State', 'ol.structs.RBush'], false); goog.addDependency('../../../ol/ol/source/vectortilesource.js', ['ol.source.VectorTile'], ['goog.asserts', 'goog.events', 'goog.events.EventType', 'ol.TileState', 'ol.VectorTile', 'ol.featureloader', 'ol.source.UrlTile'], false); goog.addDependency('../../../ol/ol/source/wmssource.js', ['ol.source.wms', 'ol.source.wms.ServerType'], [], false); goog.addDependency('../../../ol/ol/source/wmtssource.js', ['ol.source.WMTS', 'ol.source.WMTSRequestEncoding'], ['goog.array', 'goog.asserts', 'goog.object', 'goog.uri.utils', 'ol.TileUrlFunction', 'ol.TileUrlFunctionType', 'ol.array', 'ol.extent', 'ol.proj', 'ol.source.TileImage', 'ol.tilegrid.WMTS'], false); goog.addDependency('../../../ol/ol/source/xyzsource.js', ['ol.source.XYZ'], ['ol.source.TileImage'], false); goog.addDependency('../../../ol/ol/source/zoomifysource.js', ['ol.source.Zoomify'], ['goog.asserts', 'ol', 'ol.ImageTile', 'ol.TileCoord', 'ol.TileState', 'ol.dom', 'ol.extent', 'ol.proj', 'ol.source.TileImage', 'ol.tilegrid.TileGrid'], false); goog.addDependency('../../../ol/ol/sphere/normal.js', ['ol.sphere.NORMAL'], ['ol.Sphere'], false); goog.addDependency('../../../ol/ol/sphere/sphere.js', ['ol.Sphere'], ['ol.math'], false); goog.addDependency('../../../ol/ol/sphere/wgs84sphere.js', ['ol.sphere.WGS84'], ['ol.Sphere'], false); goog.addDependency('../../../ol/ol/structs/checksum.js', ['ol.structs.IHasChecksum'], [], false); goog.addDependency('../../../ol/ol/structs/lrucache.js', ['ol.structs.LRUCache'], ['goog.asserts', 'goog.object'], false); goog.addDependency('../../../ol/ol/structs/priorityqueue.js', ['ol.structs.PriorityQueue'], ['goog.asserts', 'goog.object'], false); goog.addDependency('../../../ol/ol/structs/rbush.js', ['ol.structs.RBush'], ['goog.asserts', 'goog.object', 'ol.ext.rbush', 'ol.extent'], false); goog.addDependency('../../../ol/ol/style/atlasmanager.js', ['ol.style.Atlas', 'ol.style.AtlasManager'], ['goog.asserts', 'goog.dom', 'goog.functions', 'goog.object', 'ol'], false); goog.addDependency('../../../ol/ol/style/circlestyle.js', ['ol.style.Circle'], ['goog.asserts', 'goog.dom', 'ol', 'ol.color', 'ol.has', 'ol.render.canvas', 'ol.structs.IHasChecksum', 'ol.style.Fill', 'ol.style.Image', 'ol.style.ImageState', 'ol.style.Stroke'], false); goog.addDependency('../../../ol/ol/style/fillstyle.js', ['ol.style.Fill'], ['ol.color', 'ol.structs.IHasChecksum'], false); goog.addDependency('../../../ol/ol/style/iconstyle.js', ['ol.style.Icon', 'ol.style.IconAnchorUnits', 'ol.style.IconImageCache', 'ol.style.IconOrigin'], ['goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.dom', 'ol.style.Image', 'ol.style.ImageState'], false); goog.addDependency('../../../ol/ol/style/imagestyle.js', ['ol.style.Image', 'ol.style.ImageState'], [], false); goog.addDependency('../../../ol/ol/style/regularshapestyle.js', ['ol.style.RegularShape'], ['goog.asserts', 'goog.dom', 'ol', 'ol.color', 'ol.has', 'ol.render.canvas', 'ol.structs.IHasChecksum', 'ol.style.AtlasManager', 'ol.style.Fill', 'ol.style.Image', 'ol.style.ImageState', 'ol.style.Stroke'], false); goog.addDependency('../../../ol/ol/style/strokestyle.js', ['ol.style.Stroke'], ['goog.crypt', 'goog.crypt.Md5', 'ol.color', 'ol.structs.IHasChecksum'], false); goog.addDependency('../../../ol/ol/style/style.js', ['ol.style.GeometryFunction', 'ol.style.Style', 'ol.style.StyleFunction', 'ol.style.defaultGeometryFunction'], ['goog.asserts', 'ol.geom.Geometry', 'ol.geom.GeometryType', 'ol.style.Circle', 'ol.style.Fill', 'ol.style.Image', 'ol.style.Stroke'], false); goog.addDependency('../../../ol/ol/style/textstyle.js', ['ol.style.Text'], ['ol.style.Fill'], false); goog.addDependency('../../../ol/ol/tile.js', ['ol.Tile', 'ol.TileState'], ['goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'ol.TileCoord'], false); goog.addDependency('../../../ol/ol/tilecache.js', ['ol.TileCache'], ['ol', 'ol.TileRange', 'ol.structs.LRUCache', 'ol.tilecoord'], false); goog.addDependency('../../../ol/ol/tilecoord.js', ['ol.TileCoord', 'ol.tilecoord'], ['goog.asserts', 'ol.extent'], false); goog.addDependency('../../../ol/ol/tilegrid/tilegrid.js', ['ol.tilegrid.TileGrid'], ['goog.array', 'goog.asserts', 'goog.object', 'ol', 'ol.Coordinate', 'ol.TileCoord', 'ol.TileRange', 'ol.array', 'ol.extent', 'ol.extent.Corner', 'ol.math', 'ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Projection', 'ol.proj.Units', 'ol.size', 'ol.tilecoord'], false); goog.addDependency('../../../ol/ol/tilegrid/wmtstilegrid.js', ['ol.tilegrid.WMTS'], ['goog.array', 'goog.asserts', 'ol.proj', 'ol.tilegrid.TileGrid'], false); goog.addDependency('../../../ol/ol/tileloadfunction.js', ['ol.TileLoadFunctionType', 'ol.TileVectorLoadFunctionType'], [], false); goog.addDependency('../../../ol/ol/tilequeue.js', ['ol.TilePriorityFunction', 'ol.TileQueue'], ['goog.events', 'goog.events.EventType', 'ol.Coordinate', 'ol.TileState', 'ol.structs.PriorityQueue'], false); goog.addDependency('../../../ol/ol/tilerange.js', ['ol.TileRange'], ['goog.asserts', 'ol.Size', 'ol.TileCoord'], false); goog.addDependency('../../../ol/ol/tileurlfunction.js', ['ol.TileUrlFunction', 'ol.TileUrlFunctionType'], ['goog.asserts', 'goog.math', 'ol.TileCoord', 'ol.tilecoord'], false); goog.addDependency('../../../ol/ol/transformfunction.js', ['ol.TransformFunction'], [], false); goog.addDependency('../../../ol/ol/vec/mat4.js', ['ol.vec.Mat4', 'ol.vec.Mat4.Number'], ['goog.vec.Mat4'], false); goog.addDependency('../../../ol/ol/vectortile.js', ['ol.VectorTile'], ['ol.Tile', 'ol.TileCoord', 'ol.TileLoadFunctionType', 'ol.TileState'], false); goog.addDependency('../../../ol/ol/view.js', ['ol.View', 'ol.ViewHint', 'ol.ViewProperty'], ['goog.asserts', 'ol', 'ol.CenterConstraint', 'ol.Constraints', 'ol.Object', 'ol.ResolutionConstraint', 'ol.RotationConstraint', 'ol.RotationConstraintType', 'ol.Size', 'ol.coordinate', 'ol.extent', 'ol.geom.Polygon', 'ol.geom.SimpleGeometry', 'ol.proj', 'ol.proj.METERS_PER_UNIT', 'ol.proj.Projection', 'ol.proj.Units'], false); goog.addDependency('../../../ol/ol/webgl/buffer.js', ['ol.webgl.Buffer'], ['goog.webgl', 'ol'], false); goog.addDependency('../../../ol/ol/webgl/context.js', ['ol.webgl.Context'], ['goog.asserts', 'goog.events', 'goog.log', 'goog.object', 'ol', 'ol.array', 'ol.webgl.Buffer', 'ol.webgl.WebGLContextEventType'], false); goog.addDependency('../../../ol/ol/webgl/shader.js', ['ol.webgl.Fragment', 'ol.webgl.Shader', 'ol.webgl.Vertex', 'ol.webgl.shader'], ['goog.functions', 'goog.webgl', 'ol.webgl'], false); goog.addDependency('../../../ol/ol/webgl/webgl.js', ['ol.webgl', 'ol.webgl.WebGLContextEventType'], [], false); goog.addDependency('../../../ol/ol/xml.js', ['ol.xml'], ['goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.xml', 'goog.object', 'goog.userAgent'], false); goog.addDependency('../../third_party/closure/goog/caja/string/html/htmlparser.js', ['goog.string.html', 'goog.string.html.HtmlParser', 'goog.string.html.HtmlParser.EFlags', 'goog.string.html.HtmlParser.Elements', 'goog.string.html.HtmlParser.Entities', 'goog.string.html.HtmlSaxHandler'], [], false); goog.addDependency('../../third_party/closure/goog/caja/string/html/htmlsanitizer.js', ['goog.string.html.HtmlSanitizer', 'goog.string.html.HtmlSanitizer.AttributeType', 'goog.string.html.HtmlSanitizer.Attributes', 'goog.string.html.htmlSanitize'], ['goog.string.StringBuffer', 'goog.string.html.HtmlParser', 'goog.string.html.HtmlSaxHandler'], false); goog.addDependency('../../third_party/closure/goog/dojo/dom/query.js', ['goog.dom.query'], ['goog.array', 'goog.dom', 'goog.functions', 'goog.string', 'goog.userAgent'], false); goog.addDependency('../../third_party/closure/goog/jpeg_encoder/jpeg_encoder_basic.js', ['goog.crypt.JpegEncoder'], ['goog.crypt.base64'], false); goog.addDependency('../../third_party/closure/goog/loremipsum/text/loremipsum.js', ['goog.text.LoremIpsum'], ['goog.array', 'goog.math', 'goog.string', 'goog.structs.Map', 'goog.structs.Set'], false); goog.addDependency('../../third_party/closure/goog/mochikit/async/deferred.js', ['goog.async.Deferred', 'goog.async.Deferred.AlreadyCalledError', 'goog.async.Deferred.CanceledError'], ['goog.Promise', 'goog.Thenable', 'goog.array', 'goog.asserts', 'goog.debug.Error'], false); goog.addDependency('../../third_party/closure/goog/mochikit/async/deferredlist.js', ['goog.async.DeferredList'], ['goog.async.Deferred'], false); goog.addDependency('../../third_party/closure/goog/osapi/osapi.js', ['goog.osapi'], [], false); goog.addDependency('../../third_party/closure/goog/svgpan/svgpan.js', ['svgpan.SvgPan'], ['goog.Disposable', 'goog.events', 'goog.events.EventType', 'goog.events.MouseWheelHandler'], false); goog.addDependency('a11y/aria/announcer.js', ['goog.a11y.aria.Announcer'], ['goog.Disposable', 'goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.LivePriority', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.object'], false); goog.addDependency('a11y/aria/announcer_test.js', ['goog.a11y.aria.AnnouncerTest'], ['goog.a11y.aria', 'goog.a11y.aria.Announcer', 'goog.a11y.aria.LivePriority', 'goog.a11y.aria.State', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.iframe', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('a11y/aria/aria.js', ['goog.a11y.aria'], ['goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.a11y.aria.datatables', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.object', 'goog.string'], false); goog.addDependency('a11y/aria/aria_test.js', ['goog.a11y.ariaTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit'], false); goog.addDependency('a11y/aria/attributes.js', ['goog.a11y.aria.AutoCompleteValues', 'goog.a11y.aria.CheckedValues', 'goog.a11y.aria.DropEffectValues', 'goog.a11y.aria.ExpandedValues', 'goog.a11y.aria.GrabbedValues', 'goog.a11y.aria.InvalidValues', 'goog.a11y.aria.LivePriority', 'goog.a11y.aria.OrientationValues', 'goog.a11y.aria.PressedValues', 'goog.a11y.aria.RelevantValues', 'goog.a11y.aria.SelectedValues', 'goog.a11y.aria.SortValues', 'goog.a11y.aria.State'], [], false); goog.addDependency('a11y/aria/datatables.js', ['goog.a11y.aria.datatables'], ['goog.a11y.aria.State', 'goog.object'], false); goog.addDependency('a11y/aria/roles.js', ['goog.a11y.aria.Role'], [], false); goog.addDependency('array/array.js', ['goog.array', 'goog.array.ArrayLike'], ['goog.asserts'], false); goog.addDependency('array/array_test.js', ['goog.arrayTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('asserts/asserts.js', ['goog.asserts', 'goog.asserts.AssertionError'], ['goog.debug.Error', 'goog.dom.NodeType', 'goog.string'], false); goog.addDependency('asserts/asserts_test.js', ['goog.assertsTest'], ['goog.asserts', 'goog.asserts.AssertionError', 'goog.dom', 'goog.dom.TagName', 'goog.string', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('async/animationdelay.js', ['goog.async.AnimationDelay'], ['goog.Disposable', 'goog.events', 'goog.functions'], false); goog.addDependency('async/animationdelay_test.js', ['goog.async.AnimationDelayTest'], ['goog.Timer', 'goog.async.AnimationDelay', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.testing.testSuite'], true); goog.addDependency('async/conditionaldelay.js', ['goog.async.ConditionalDelay'], ['goog.Disposable', 'goog.async.Delay'], false); goog.addDependency('async/conditionaldelay_test.js', ['goog.async.ConditionalDelayTest'], ['goog.async.ConditionalDelay', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('async/debouncer.js', ['goog.async.Debouncer'], ['goog.Disposable', 'goog.Timer'], false); goog.addDependency('async/debouncer_test.js', ['goog.async.DebouncerTest'], ['goog.array', 'goog.async.Debouncer', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('async/delay.js', ['goog.Delay', 'goog.async.Delay'], ['goog.Disposable', 'goog.Timer'], false); goog.addDependency('async/delay_test.js', ['goog.async.DelayTest'], ['goog.async.Delay', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('async/freelist.js', ['goog.async.FreeList'], [], false); goog.addDependency('async/freelist_test.js', ['goog.async.FreeListTest'], ['goog.async.FreeList', 'goog.testing.jsunit'], false); goog.addDependency('async/nexttick.js', ['goog.async.nextTick', 'goog.async.throwException'], ['goog.debug.entryPointRegistry', 'goog.dom.TagName', 'goog.functions', 'goog.labs.userAgent.browser', 'goog.labs.userAgent.engine'], false); goog.addDependency('async/nexttick_test.js', ['goog.async.nextTickTest'], ['goog.Promise', 'goog.Timer', 'goog.async.nextTick', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.dom', 'goog.dom.TagName', 'goog.labs.userAgent.browser', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('async/run.js', ['goog.async.run'], ['goog.async.WorkQueue', 'goog.async.nextTick', 'goog.async.throwException', 'goog.testing.watchers'], false); goog.addDependency('async/run_test.js', ['goog.async.runTest'], ['goog.async.run', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('async/throttle.js', ['goog.Throttle', 'goog.async.Throttle'], ['goog.Disposable', 'goog.Timer'], false); goog.addDependency('async/throttle_test.js', ['goog.async.ThrottleTest'], ['goog.async.Throttle', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('async/workqueue.js', ['goog.async.WorkItem', 'goog.async.WorkQueue'], ['goog.asserts', 'goog.async.FreeList'], false); goog.addDependency('async/workqueue_test.js', ['goog.async.WorkQueueTest'], ['goog.async.WorkQueue', 'goog.testing.jsunit'], false); goog.addDependency('base.js', ['goog'], [], false); goog.addDependency('base_module_test.js', ['goog.baseModuleTest'], ['goog.Timer', 'goog.test_module', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.testSuite'], true); goog.addDependency('base_test.js', ['an.existing.path', 'dup.base', 'far.out', 'goog.baseTest', 'goog.explicit', 'goog.implicit.explicit', 'goog.test', 'goog.test.name', 'goog.test.name.space', 'goog.xy', 'goog.xy.z', 'ns', 'testDep.bar'], ['goog.Promise', 'goog.Timer', 'goog.dom.TagName', 'goog.functions', 'goog.test_module', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('color/alpha.js', ['goog.color.alpha'], ['goog.color'], false); goog.addDependency('color/alpha_test.js', ['goog.color.alphaTest'], ['goog.array', 'goog.color', 'goog.color.alpha', 'goog.testing.jsunit'], false); goog.addDependency('color/color.js', ['goog.color', 'goog.color.Hsl', 'goog.color.Hsv', 'goog.color.Rgb'], ['goog.color.names', 'goog.math'], false); goog.addDependency('color/color_test.js', ['goog.colorTest'], ['goog.array', 'goog.color', 'goog.color.names', 'goog.testing.jsunit'], false); goog.addDependency('color/names.js', ['goog.color.names'], [], false); goog.addDependency('crypt/aes.js', ['goog.crypt.Aes'], ['goog.asserts', 'goog.crypt.BlockCipher'], false); goog.addDependency('crypt/aes_test.js', ['goog.crypt.AesTest'], ['goog.crypt', 'goog.crypt.Aes', 'goog.testing.jsunit'], false); goog.addDependency('crypt/arc4.js', ['goog.crypt.Arc4'], ['goog.asserts'], false); goog.addDependency('crypt/arc4_test.js', ['goog.crypt.Arc4Test'], ['goog.array', 'goog.crypt.Arc4', 'goog.testing.jsunit'], false); goog.addDependency('crypt/base64.js', ['goog.crypt.base64'], ['goog.asserts', 'goog.crypt', 'goog.userAgent'], false); goog.addDependency('crypt/base64_test.js', ['goog.crypt.base64Test'], ['goog.crypt', 'goog.crypt.base64', 'goog.testing.jsunit'], false); goog.addDependency('crypt/basen.js', ['goog.crypt.baseN'], [], false); goog.addDependency('crypt/basen_test.js', ['goog.crypt.baseNTest'], ['goog.crypt.baseN', 'goog.testing.jsunit'], false); goog.addDependency('crypt/blobhasher.js', ['goog.crypt.BlobHasher', 'goog.crypt.BlobHasher.EventType'], ['goog.asserts', 'goog.events.EventTarget', 'goog.fs', 'goog.log'], false); goog.addDependency('crypt/blobhasher_test.js', ['goog.crypt.BlobHasherTest'], ['goog.crypt', 'goog.crypt.BlobHasher', 'goog.crypt.Md5', 'goog.events', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('crypt/blockcipher.js', ['goog.crypt.BlockCipher'], [], false); goog.addDependency('crypt/bytestring_perf.js', ['goog.crypt.byteArrayToStringPerf'], ['goog.array', 'goog.dom', 'goog.testing.PerformanceTable'], false); goog.addDependency('crypt/cbc.js', ['goog.crypt.Cbc'], ['goog.array', 'goog.asserts', 'goog.crypt'], false); goog.addDependency('crypt/cbc_test.js', ['goog.crypt.CbcTest'], ['goog.crypt', 'goog.crypt.Aes', 'goog.crypt.Cbc', 'goog.testing.jsunit'], false); goog.addDependency('crypt/crypt.js', ['goog.crypt'], ['goog.array', 'goog.asserts'], false); goog.addDependency('crypt/crypt_test.js', ['goog.cryptTest'], ['goog.crypt', 'goog.string', 'goog.testing.jsunit'], false); goog.addDependency('crypt/hash.js', ['goog.crypt.Hash'], [], false); goog.addDependency('crypt/hash32.js', ['goog.crypt.hash32'], ['goog.crypt'], false); goog.addDependency('crypt/hash32_test.js', ['goog.crypt.hash32Test'], ['goog.crypt.hash32', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('crypt/hashtester.js', ['goog.crypt.hashTester'], ['goog.array', 'goog.crypt', 'goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTable', 'goog.testing.PseudoRandom', 'goog.testing.asserts'], false); goog.addDependency('crypt/hmac.js', ['goog.crypt.Hmac'], ['goog.crypt.Hash'], false); goog.addDependency('crypt/hmac_test.js', ['goog.crypt.HmacTest'], ['goog.crypt.Hmac', 'goog.crypt.Sha1', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); goog.addDependency('crypt/md5.js', ['goog.crypt.Md5'], ['goog.crypt.Hash'], false); goog.addDependency('crypt/md5_test.js', ['goog.crypt.Md5Test'], ['goog.crypt', 'goog.crypt.Md5', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); goog.addDependency('crypt/pbkdf2.js', ['goog.crypt.pbkdf2'], ['goog.array', 'goog.asserts', 'goog.crypt', 'goog.crypt.Hmac', 'goog.crypt.Sha1'], false); goog.addDependency('crypt/pbkdf2_test.js', ['goog.crypt.pbkdf2Test'], ['goog.crypt', 'goog.crypt.pbkdf2', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('crypt/sha1.js', ['goog.crypt.Sha1'], ['goog.crypt.Hash'], false); goog.addDependency('crypt/sha1_test.js', ['goog.crypt.Sha1Test'], ['goog.crypt', 'goog.crypt.Sha1', 'goog.crypt.hashTester', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('crypt/sha2.js', ['goog.crypt.Sha2'], ['goog.array', 'goog.asserts', 'goog.crypt.Hash'], false); goog.addDependency('crypt/sha224.js', ['goog.crypt.Sha224'], ['goog.crypt.Sha2'], false); goog.addDependency('crypt/sha224_test.js', ['goog.crypt.Sha224Test'], ['goog.crypt', 'goog.crypt.Sha224', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); goog.addDependency('crypt/sha256.js', ['goog.crypt.Sha256'], ['goog.crypt.Sha2'], false); goog.addDependency('crypt/sha256_test.js', ['goog.crypt.Sha256Test'], ['goog.crypt', 'goog.crypt.Sha256', 'goog.crypt.hashTester', 'goog.testing.jsunit'], false); goog.addDependency('crypt/sha2_64bit.js', ['goog.crypt.Sha2_64bit'], ['goog.array', 'goog.asserts', 'goog.crypt.Hash', 'goog.math.Long'], false); goog.addDependency('crypt/sha2_64bit_test.js', ['goog.crypt.Sha2_64bit_test'], ['goog.array', 'goog.crypt', 'goog.crypt.Sha384', 'goog.crypt.Sha512', 'goog.crypt.Sha512_256', 'goog.crypt.hashTester', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('crypt/sha384.js', ['goog.crypt.Sha384'], ['goog.crypt.Sha2_64bit'], false); goog.addDependency('crypt/sha512.js', ['goog.crypt.Sha512'], ['goog.crypt.Sha2_64bit'], false); goog.addDependency('crypt/sha512_256.js', ['goog.crypt.Sha512_256'], ['goog.crypt.Sha2_64bit'], false); goog.addDependency('cssom/cssom.js', ['goog.cssom', 'goog.cssom.CssRuleType'], ['goog.array', 'goog.dom', 'goog.dom.TagName'], false); goog.addDependency('cssom/cssom_test.js', ['goog.cssomTest'], ['goog.array', 'goog.cssom', 'goog.cssom.CssRuleType', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('cssom/iframe/style.js', ['goog.cssom.iframe.style'], ['goog.asserts', 'goog.cssom', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.string', 'goog.style', 'goog.userAgent'], false); goog.addDependency('cssom/iframe/style_test.js', ['goog.cssom.iframe.styleTest'], ['goog.cssom', 'goog.cssom.iframe.style', 'goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('datasource/datamanager.js', ['goog.ds.DataManager'], ['goog.ds.BasicNodeList', 'goog.ds.DataNode', 'goog.ds.Expr', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.Map'], false); goog.addDependency('datasource/datasource.js', ['goog.ds.BaseDataNode', 'goog.ds.BasicNodeList', 'goog.ds.DataNode', 'goog.ds.DataNodeList', 'goog.ds.EmptyNodeList', 'goog.ds.LoadState', 'goog.ds.SortedNodeList', 'goog.ds.Util', 'goog.ds.logger'], ['goog.array', 'goog.log'], false); goog.addDependency('datasource/datasource_test.js', ['goog.ds.JsDataSourceTest'], ['goog.dom.xml', 'goog.ds.DataManager', 'goog.ds.JsDataSource', 'goog.ds.SortedNodeList', 'goog.ds.XmlDataSource', 'goog.testing.jsunit'], false); goog.addDependency('datasource/expr.js', ['goog.ds.Expr'], ['goog.ds.BasicNodeList', 'goog.ds.EmptyNodeList', 'goog.string'], false); goog.addDependency('datasource/expr_test.js', ['goog.ds.ExprTest'], ['goog.ds.DataManager', 'goog.ds.Expr', 'goog.ds.JsDataSource', 'goog.testing.jsunit'], false); goog.addDependency('datasource/fastdatanode.js', ['goog.ds.AbstractFastDataNode', 'goog.ds.FastDataNode', 'goog.ds.FastListNode', 'goog.ds.PrimitiveFastDataNode'], ['goog.ds.DataManager', 'goog.ds.DataNodeList', 'goog.ds.EmptyNodeList', 'goog.string'], false); goog.addDependency('datasource/fastdatanode_test.js', ['goog.ds.FastDataNodeTest'], ['goog.array', 'goog.ds.DataManager', 'goog.ds.Expr', 'goog.ds.FastDataNode', 'goog.testing.jsunit'], false); goog.addDependency('datasource/jsdatasource.js', ['goog.ds.JsDataSource', 'goog.ds.JsPropertyDataSource'], ['goog.ds.BaseDataNode', 'goog.ds.BasicNodeList', 'goog.ds.DataManager', 'goog.ds.DataNode', 'goog.ds.EmptyNodeList', 'goog.ds.LoadState'], false); goog.addDependency('datasource/jsondatasource.js', ['goog.ds.JsonDataSource'], ['goog.Uri', 'goog.dom', 'goog.dom.TagName', 'goog.ds.DataManager', 'goog.ds.JsDataSource', 'goog.ds.LoadState', 'goog.ds.logger', 'goog.log'], false); goog.addDependency('datasource/jsxmlhttpdatasource.js', ['goog.ds.JsXmlHttpDataSource'], ['goog.Uri', 'goog.ds.DataManager', 'goog.ds.FastDataNode', 'goog.ds.LoadState', 'goog.ds.logger', 'goog.events', 'goog.log', 'goog.net.EventType', 'goog.net.XhrIo'], false); goog.addDependency('datasource/jsxmlhttpdatasource_test.js', ['goog.ds.JsXmlHttpDataSourceTest'], ['goog.ds.JsXmlHttpDataSource', 'goog.testing.TestQueue', 'goog.testing.jsunit', 'goog.testing.net.XhrIo'], false); goog.addDependency('datasource/xmldatasource.js', ['goog.ds.XmlDataSource', 'goog.ds.XmlHttpDataSource'], ['goog.Uri', 'goog.dom.NodeType', 'goog.dom.xml', 'goog.ds.BasicNodeList', 'goog.ds.DataManager', 'goog.ds.DataNode', 'goog.ds.LoadState', 'goog.ds.logger', 'goog.net.XhrIo', 'goog.string'], false); goog.addDependency('date/date.js', ['goog.date', 'goog.date.Date', 'goog.date.DateTime', 'goog.date.Interval', 'goog.date.month', 'goog.date.weekDay'], ['goog.asserts', 'goog.date.DateLike', 'goog.i18n.DateTimeSymbols', 'goog.string'], false); goog.addDependency('date/date_test.js', ['goog.dateTest'], ['goog.array', 'goog.date', 'goog.date.Date', 'goog.date.DateTime', 'goog.date.Interval', 'goog.date.month', 'goog.date.weekDay', 'goog.i18n.DateTimeSymbols', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.platform', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('date/datelike.js', ['goog.date.DateLike'], [], false); goog.addDependency('date/daterange.js', ['goog.date.DateRange', 'goog.date.DateRange.Iterator', 'goog.date.DateRange.StandardDateRangeKeys'], ['goog.date.Date', 'goog.date.Interval', 'goog.iter.Iterator', 'goog.iter.StopIteration'], false); goog.addDependency('date/daterange_test.js', ['goog.date.DateRangeTest'], ['goog.date.Date', 'goog.date.DateRange', 'goog.date.Interval', 'goog.i18n.DateTimeSymbols', 'goog.testing.jsunit'], false); goog.addDependency('date/duration.js', ['goog.date.duration'], ['goog.i18n.DateTimeFormat', 'goog.i18n.MessageFormat'], false); goog.addDependency('date/duration_test.js', ['goog.date.durationTest'], ['goog.date.duration', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_bn', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_fa', 'goog.testing.jsunit'], false); goog.addDependency('date/relative.js', ['goog.date.relative', 'goog.date.relative.TimeDeltaFormatter', 'goog.date.relative.Unit'], ['goog.i18n.DateTimeFormat', 'goog.i18n.DateTimePatterns'], false); goog.addDependency('date/relative_test.js', ['goog.date.relativeTest'], ['goog.date.DateTime', 'goog.date.relative', 'goog.i18n.DateTimeFormat', 'goog.testing.jsunit'], false); goog.addDependency('date/relativewithplurals.js', ['goog.date.relativeWithPlurals'], ['goog.date.relative', 'goog.date.relative.Unit', 'goog.i18n.MessageFormat'], false); goog.addDependency('date/relativewithplurals_test.js', ['goog.date.relativeWithPluralsTest'], ['goog.date.relative', 'goog.date.relativeTest', 'goog.date.relativeWithPlurals', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_bn', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.NumberFormatSymbols', 'goog.i18n.NumberFormatSymbols_bn', 'goog.i18n.NumberFormatSymbols_en', 'goog.i18n.NumberFormatSymbols_fa'], false); goog.addDependency('date/utcdatetime.js', ['goog.date.UtcDateTime'], ['goog.date', 'goog.date.Date', 'goog.date.DateTime', 'goog.date.Interval'], false); goog.addDependency('date/utcdatetime_test.js', ['goog.date.UtcDateTimeTest'], ['goog.date.Interval', 'goog.date.UtcDateTime', 'goog.date.month', 'goog.date.weekDay', 'goog.testing.jsunit'], false); goog.addDependency('db/cursor.js', ['goog.db.Cursor'], ['goog.async.Deferred', 'goog.db.Error', 'goog.debug', 'goog.events.EventTarget'], false); goog.addDependency('db/db.js', ['goog.db', 'goog.db.BlockedCallback', 'goog.db.UpgradeNeededCallback'], ['goog.asserts', 'goog.async.Deferred', 'goog.db.Error', 'goog.db.IndexedDb', 'goog.db.Transaction'], false); goog.addDependency('db/db_test.js', ['goog.dbTest'], ['goog.Disposable', 'goog.Promise', 'goog.array', 'goog.db', 'goog.db.Cursor', 'goog.db.Error', 'goog.db.IndexedDb', 'goog.db.KeyRange', 'goog.db.Transaction', 'goog.events', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent.product'], false); goog.addDependency('db/error.js', ['goog.db.Error', 'goog.db.Error.ErrorCode', 'goog.db.Error.ErrorName', 'goog.db.Error.VersionChangeBlockedError'], ['goog.debug.Error'], false); goog.addDependency('db/index.js', ['goog.db.Index'], ['goog.async.Deferred', 'goog.db.Cursor', 'goog.db.Error', 'goog.debug'], false); goog.addDependency('db/indexeddb.js', ['goog.db.IndexedDb'], ['goog.db.Error', 'goog.db.ObjectStore', 'goog.db.Transaction', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget'], false); goog.addDependency('db/keyrange.js', ['goog.db.KeyRange'], [], false); goog.addDependency('db/objectstore.js', ['goog.db.ObjectStore'], ['goog.async.Deferred', 'goog.db.Cursor', 'goog.db.Error', 'goog.db.Index', 'goog.debug', 'goog.events'], false); goog.addDependency('db/transaction.js', ['goog.db.Transaction', 'goog.db.Transaction.TransactionMode'], ['goog.async.Deferred', 'goog.db.Error', 'goog.db.ObjectStore', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget'], false); goog.addDependency('debug/console.js', ['goog.debug.Console'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.debug.TextFormatter'], false); goog.addDependency('debug/console_test.js', ['goog.debug.ConsoleTest'], ['goog.debug.Console', 'goog.debug.LogRecord', 'goog.debug.Logger', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('debug/debug.js', ['goog.debug'], ['goog.array', 'goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.uncheckedconversions', 'goog.string.Const', 'goog.structs.Set', 'goog.userAgent'], false); goog.addDependency('debug/debug_test.js', ['goog.debugTest'], ['goog.debug', 'goog.html.SafeHtml', 'goog.structs.Set', 'goog.testing.jsunit'], false); goog.addDependency('debug/debugwindow.js', ['goog.debug.DebugWindow'], ['goog.debug.HtmlFormatter', 'goog.debug.LogManager', 'goog.debug.Logger', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.SafeStyleSheet', 'goog.string.Const', 'goog.structs.CircularBuffer', 'goog.userAgent'], false); goog.addDependency('debug/debugwindow_test.js', ['goog.debug.DebugWindowTest'], ['goog.debug.DebugWindow', 'goog.testing.jsunit'], false); goog.addDependency('debug/devcss/devcss.js', ['goog.debug.DevCss', 'goog.debug.DevCss.UserAgent'], ['goog.asserts', 'goog.cssom', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.string', 'goog.userAgent'], false); goog.addDependency('debug/devcss/devcss_test.js', ['goog.debug.DevCssTest'], ['goog.debug.DevCss', 'goog.style', 'goog.testing.jsunit'], false); goog.addDependency('debug/devcss/devcssrunner.js', ['goog.debug.devCssRunner'], ['goog.debug.DevCss'], false); goog.addDependency('debug/divconsole.js', ['goog.debug.DivConsole'], ['goog.debug.HtmlFormatter', 'goog.debug.LogManager', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.style'], false); goog.addDependency('debug/enhanceerror_test.js', ['goog.debugEnhanceErrorTest'], ['goog.debug', 'goog.testing.jsunit'], false); goog.addDependency('debug/entrypointregistry.js', ['goog.debug.EntryPointMonitor', 'goog.debug.entryPointRegistry'], ['goog.asserts'], false); goog.addDependency('debug/entrypointregistry_test.js', ['goog.debug.entryPointRegistryTest'], ['goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.testing.jsunit'], false); goog.addDependency('debug/error.js', ['goog.debug.Error'], [], false); goog.addDependency('debug/error_test.js', ['goog.debug.ErrorTest'], ['goog.debug.Error', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('debug/errorhandler.js', ['goog.debug.ErrorHandler', 'goog.debug.ErrorHandler.ProtectedFunctionError'], ['goog.Disposable', 'goog.asserts', 'goog.debug', 'goog.debug.EntryPointMonitor', 'goog.debug.Error', 'goog.debug.Trace'], false); goog.addDependency('debug/errorhandler_async_test.js', ['goog.debug.ErrorHandlerAsyncTest'], ['goog.Promise', 'goog.debug.ErrorHandler', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('debug/errorhandler_test.js', ['goog.debug.ErrorHandlerTest'], ['goog.debug.ErrorHandler', 'goog.testing.MockControl', 'goog.testing.jsunit'], false); goog.addDependency('debug/errorhandlerweakdep.js', ['goog.debug.errorHandlerWeakDep'], [], false); goog.addDependency('debug/errorreporter.js', ['goog.debug.ErrorReporter', 'goog.debug.ErrorReporter.ExceptionEvent'], ['goog.asserts', 'goog.debug', 'goog.debug.Error', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.log', 'goog.net.XhrIo', 'goog.object', 'goog.string', 'goog.uri.utils', 'goog.userAgent'], false); goog.addDependency('debug/errorreporter_test.js', ['goog.debug.ErrorReporterTest'], ['goog.debug.Error', 'goog.debug.ErrorReporter', 'goog.events', 'goog.functions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('debug/fancywindow.js', ['goog.debug.FancyWindow'], ['goog.array', 'goog.debug.DebugWindow', 'goog.debug.LogManager', 'goog.debug.Logger', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.SafeStyleSheet', 'goog.object', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false); goog.addDependency('debug/formatter.js', ['goog.debug.Formatter', 'goog.debug.HtmlFormatter', 'goog.debug.TextFormatter'], ['goog.debug', 'goog.debug.Logger', 'goog.debug.RelativeTimeProvider', 'goog.html.SafeHtml'], false); goog.addDependency('debug/formatter_test.js', ['goog.debug.FormatterTest'], ['goog.debug.HtmlFormatter', 'goog.debug.LogRecord', 'goog.debug.Logger', 'goog.html.SafeHtml', 'goog.testing.jsunit'], false); goog.addDependency('debug/fpsdisplay.js', ['goog.debug.FpsDisplay'], ['goog.asserts', 'goog.async.AnimationDelay', 'goog.dom', 'goog.dom.TagName', 'goog.ui.Component'], false); goog.addDependency('debug/fpsdisplay_test.js', ['goog.debug.FpsDisplayTest'], ['goog.Timer', 'goog.debug.FpsDisplay', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('debug/logbuffer.js', ['goog.debug.LogBuffer'], ['goog.asserts', 'goog.debug.LogRecord'], false); goog.addDependency('debug/logbuffer_test.js', ['goog.debug.LogBufferTest'], ['goog.debug.LogBuffer', 'goog.debug.Logger', 'goog.testing.jsunit'], false); goog.addDependency('debug/logger.js', ['goog.debug.LogManager', 'goog.debug.Loggable', 'goog.debug.Logger', 'goog.debug.Logger.Level'], ['goog.array', 'goog.asserts', 'goog.debug', 'goog.debug.LogBuffer', 'goog.debug.LogRecord'], false); goog.addDependency('debug/logger_test.js', ['goog.debug.LoggerTest'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.testing.jsunit'], false); goog.addDependency('debug/logrecord.js', ['goog.debug.LogRecord'], [], false); goog.addDependency('debug/logrecordserializer.js', ['goog.debug.logRecordSerializer'], ['goog.debug.LogRecord', 'goog.debug.Logger', 'goog.json', 'goog.object'], false); goog.addDependency('debug/logrecordserializer_test.js', ['goog.debug.logRecordSerializerTest'], ['goog.debug.LogRecord', 'goog.debug.Logger', 'goog.debug.logRecordSerializer', 'goog.testing.jsunit'], false); goog.addDependency('debug/relativetimeprovider.js', ['goog.debug.RelativeTimeProvider'], [], false); goog.addDependency('debug/tracer.js', ['goog.debug.Trace'], ['goog.array', 'goog.debug.Logger', 'goog.iter', 'goog.log', 'goog.structs.Map', 'goog.structs.SimplePool'], false); goog.addDependency('debug/tracer_test.js', ['goog.debug.TraceTest'], ['goog.debug.Trace', 'goog.testing.jsunit'], false); goog.addDependency('defineclass_test.js', ['goog.defineClassTest'], ['goog.testing.jsunit'], false); goog.addDependency('demos/editor/helloworld.js', ['goog.demos.editor.HelloWorld'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Plugin'], false); goog.addDependency('demos/editor/helloworlddialog.js', ['goog.demos.editor.HelloWorldDialog', 'goog.demos.editor.HelloWorldDialog.OkEvent'], ['goog.dom.TagName', 'goog.events.Event', 'goog.string', 'goog.ui.editor.AbstractDialog'], false); goog.addDependency('demos/editor/helloworlddialogplugin.js', ['goog.demos.editor.HelloWorldDialogPlugin', 'goog.demos.editor.HelloWorldDialogPlugin.Command'], ['goog.demos.editor.HelloWorldDialog', 'goog.dom.TagName', 'goog.editor.plugins.AbstractDialogPlugin', 'goog.editor.range', 'goog.functions', 'goog.ui.editor.AbstractDialog'], false); goog.addDependency('demos/samplecomponent.js', ['goog.demos.SampleComponent'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.ui.Component'], false); goog.addDependency('demos/xpc/xpcdemo.js', ['xpcdemo'], ['goog.Uri', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.html.SafeHtml', 'goog.json', 'goog.log', 'goog.log.Level', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel'], false); goog.addDependency('disposable/disposable.js', ['goog.Disposable', 'goog.dispose', 'goog.disposeAll'], ['goog.disposable.IDisposable'], false); goog.addDependency('disposable/disposable_test.js', ['goog.DisposableTest'], ['goog.Disposable', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('disposable/idisposable.js', ['goog.disposable.IDisposable'], [], false); goog.addDependency('dom/abstractmultirange.js', ['goog.dom.AbstractMultiRange'], ['goog.array', 'goog.dom', 'goog.dom.AbstractRange'], false); goog.addDependency('dom/abstractrange.js', ['goog.dom.AbstractRange', 'goog.dom.RangeIterator', 'goog.dom.RangeType'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.SavedCaretRange', 'goog.dom.TagIterator', 'goog.userAgent'], false); goog.addDependency('dom/abstractrange_test.js', ['goog.dom.AbstractRangeTest'], ['goog.dom', 'goog.dom.AbstractRange', 'goog.dom.Range', 'goog.dom.TagName', 'goog.testing.jsunit'], false); goog.addDependency('dom/animationframe/animationframe.js', ['goog.dom.animationFrame', 'goog.dom.animationFrame.Spec', 'goog.dom.animationFrame.State'], ['goog.dom.animationFrame.polyfill'], false); goog.addDependency('dom/animationframe/polyfill.js', ['goog.dom.animationFrame.polyfill'], [], false); goog.addDependency('dom/annotate.js', ['goog.dom.annotate', 'goog.dom.annotate.AnnotateFn'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml'], false); goog.addDependency('dom/annotate_test.js', ['goog.dom.annotateTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.annotate', 'goog.html.SafeHtml', 'goog.testing.jsunit'], false); goog.addDependency('dom/browserfeature.js', ['goog.dom.BrowserFeature'], ['goog.userAgent'], false); goog.addDependency('dom/browserrange/abstractrange.js', ['goog.dom.browserrange.AbstractRange'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.TextRangeIterator', 'goog.iter', 'goog.math.Coordinate', 'goog.string', 'goog.string.StringBuffer', 'goog.userAgent'], false); goog.addDependency('dom/browserrange/browserrange.js', ['goog.dom.browserrange', 'goog.dom.browserrange.Error'], ['goog.dom', 'goog.dom.BrowserFeature', 'goog.dom.NodeType', 'goog.dom.browserrange.GeckoRange', 'goog.dom.browserrange.IeRange', 'goog.dom.browserrange.OperaRange', 'goog.dom.browserrange.W3cRange', 'goog.dom.browserrange.WebKitRange', 'goog.userAgent'], false); goog.addDependency('dom/browserrange/browserrange_test.js', ['goog.dom.browserrangeTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.browserrange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('dom/browserrange/geckorange.js', ['goog.dom.browserrange.GeckoRange'], ['goog.dom.browserrange.W3cRange'], false); goog.addDependency('dom/browserrange/ierange.js', ['goog.dom.browserrange.IeRange'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.browserrange.AbstractRange', 'goog.log', 'goog.string'], false); goog.addDependency('dom/browserrange/operarange.js', ['goog.dom.browserrange.OperaRange'], ['goog.dom.browserrange.W3cRange'], false); goog.addDependency('dom/browserrange/w3crange.js', ['goog.dom.browserrange.W3cRange'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeEndpoint', 'goog.dom.TagName', 'goog.dom.browserrange.AbstractRange', 'goog.string', 'goog.userAgent'], false); goog.addDependency('dom/browserrange/webkitrange.js', ['goog.dom.browserrange.WebKitRange'], ['goog.dom.RangeEndpoint', 'goog.dom.browserrange.W3cRange', 'goog.userAgent'], false); goog.addDependency('dom/bufferedviewportsizemonitor.js', ['goog.dom.BufferedViewportSizeMonitor'], ['goog.asserts', 'goog.async.Delay', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType'], false); goog.addDependency('dom/bufferedviewportsizemonitor_test.js', ['goog.dom.BufferedViewportSizeMonitorTest'], ['goog.dom.BufferedViewportSizeMonitor', 'goog.dom.ViewportSizeMonitor', 'goog.events', 'goog.events.EventType', 'goog.math.Size', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit'], false); goog.addDependency('dom/classes.js', ['goog.dom.classes'], ['goog.array'], false); goog.addDependency('dom/classes_test.js', ['goog.dom.classes_test'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classes', 'goog.testing.jsunit'], false); goog.addDependency('dom/classlist.js', ['goog.dom.classlist'], ['goog.array'], false); goog.addDependency('dom/classlist_test.js', ['goog.dom.classlist_test'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit'], false); goog.addDependency('dom/controlrange.js', ['goog.dom.ControlRange', 'goog.dom.ControlRangeIterator'], ['goog.array', 'goog.dom', 'goog.dom.AbstractMultiRange', 'goog.dom.AbstractRange', 'goog.dom.RangeIterator', 'goog.dom.RangeType', 'goog.dom.SavedRange', 'goog.dom.TagWalkType', 'goog.dom.TextRange', 'goog.iter.StopIteration', 'goog.userAgent'], false); goog.addDependency('dom/controlrange_test.js', ['goog.dom.ControlRangeTest'], ['goog.dom', 'goog.dom.ControlRange', 'goog.dom.RangeType', 'goog.dom.TagName', 'goog.dom.TextRange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('dom/dataset.js', ['goog.dom.dataset'], ['goog.string', 'goog.userAgent.product'], false); goog.addDependency('dom/dataset_test.js', ['goog.dom.datasetTest'], ['goog.dom', 'goog.dom.dataset', 'goog.testing.jsunit'], false); goog.addDependency('dom/dom.js', ['goog.dom', 'goog.dom.Appendable', 'goog.dom.DomHelper'], ['goog.array', 'goog.asserts', 'goog.dom.BrowserFeature', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.math.Coordinate', 'goog.math.Size', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.userAgent'], false); goog.addDependency('dom/dom_test.js', ['goog.dom.dom_test'], ['goog.dom', 'goog.dom.BrowserFeature', 'goog.dom.DomHelper', 'goog.dom.InputType', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.functions', 'goog.html.testing', 'goog.object', 'goog.string.Unicode', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('dom/fontsizemonitor.js', ['goog.dom.FontSizeMonitor', 'goog.dom.FontSizeMonitor.EventType'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.userAgent'], false); goog.addDependency('dom/fontsizemonitor_test.js', ['goog.dom.FontSizeMonitorTest'], ['goog.dom', 'goog.dom.FontSizeMonitor', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('dom/forms.js', ['goog.dom.forms'], ['goog.dom.InputType', 'goog.dom.TagName', 'goog.structs.Map'], false); goog.addDependency('dom/forms_test.js', ['goog.dom.formsTest'], ['goog.dom', 'goog.dom.forms', 'goog.testing.jsunit'], false); goog.addDependency('dom/fullscreen.js', ['goog.dom.fullscreen', 'goog.dom.fullscreen.EventType'], ['goog.dom', 'goog.userAgent'], false); goog.addDependency('dom/fullscreen_test.js', ['goog.dom.fullscreen_test'], ['goog.dom.DomHelper', 'goog.dom.fullscreen', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit'], false); goog.addDependency('dom/iframe.js', ['goog.dom.iframe'], ['goog.dom', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.legacyconversions', 'goog.userAgent'], false); goog.addDependency('dom/iframe_test.js', ['goog.dom.iframeTest'], ['goog.dom', 'goog.dom.iframe', 'goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('dom/inputtype.js', ['goog.dom.InputType'], [], false); goog.addDependency('dom/inputtype_test.js', ['goog.dom.InputTypeTest'], ['goog.dom.InputType', 'goog.object'], false); goog.addDependency('dom/iter.js', ['goog.dom.iter.AncestorIterator', 'goog.dom.iter.ChildIterator', 'goog.dom.iter.SiblingIterator'], ['goog.iter.Iterator', 'goog.iter.StopIteration'], false); goog.addDependency('dom/iter_test.js', ['goog.dom.iterTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.iter.AncestorIterator', 'goog.dom.iter.ChildIterator', 'goog.dom.iter.SiblingIterator', 'goog.testing.dom', 'goog.testing.jsunit'], false); goog.addDependency('dom/multirange.js', ['goog.dom.MultiRange', 'goog.dom.MultiRangeIterator'], ['goog.array', 'goog.dom.AbstractMultiRange', 'goog.dom.AbstractRange', 'goog.dom.RangeIterator', 'goog.dom.RangeType', 'goog.dom.SavedRange', 'goog.dom.TextRange', 'goog.iter.StopIteration', 'goog.log'], false); goog.addDependency('dom/multirange_test.js', ['goog.dom.MultiRangeTest'], ['goog.dom', 'goog.dom.MultiRange', 'goog.dom.Range', 'goog.iter', 'goog.testing.jsunit'], false); goog.addDependency('dom/nodeiterator.js', ['goog.dom.NodeIterator'], ['goog.dom.TagIterator'], false); goog.addDependency('dom/nodeiterator_test.js', ['goog.dom.NodeIteratorTest'], ['goog.dom', 'goog.dom.NodeIterator', 'goog.testing.dom', 'goog.testing.jsunit'], false); goog.addDependency('dom/nodeoffset.js', ['goog.dom.NodeOffset'], ['goog.Disposable', 'goog.dom.TagName'], false); goog.addDependency('dom/nodeoffset_test.js', ['goog.dom.NodeOffsetTest'], ['goog.dom', 'goog.dom.NodeOffset', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.testing.jsunit'], false); goog.addDependency('dom/nodetype.js', ['goog.dom.NodeType'], [], false); goog.addDependency('dom/pattern/abstractpattern.js', ['goog.dom.pattern.AbstractPattern'], ['goog.dom.pattern.MatchType'], false); goog.addDependency('dom/pattern/allchildren.js', ['goog.dom.pattern.AllChildren'], ['goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); goog.addDependency('dom/pattern/callback/callback.js', ['goog.dom.pattern.callback'], ['goog.dom', 'goog.dom.TagWalkType', 'goog.iter'], false); goog.addDependency('dom/pattern/callback/counter.js', ['goog.dom.pattern.callback.Counter'], [], false); goog.addDependency('dom/pattern/callback/test.js', ['goog.dom.pattern.callback.Test'], ['goog.iter.StopIteration'], false); goog.addDependency('dom/pattern/childmatches.js', ['goog.dom.pattern.ChildMatches'], ['goog.dom.pattern.AllChildren', 'goog.dom.pattern.MatchType'], false); goog.addDependency('dom/pattern/endtag.js', ['goog.dom.pattern.EndTag'], ['goog.dom.TagWalkType', 'goog.dom.pattern.Tag'], false); goog.addDependency('dom/pattern/fulltag.js', ['goog.dom.pattern.FullTag'], ['goog.dom.pattern.MatchType', 'goog.dom.pattern.StartTag', 'goog.dom.pattern.Tag'], false); goog.addDependency('dom/pattern/matcher.js', ['goog.dom.pattern.Matcher'], ['goog.dom.TagIterator', 'goog.dom.pattern.MatchType', 'goog.iter'], false); goog.addDependency('dom/pattern/matcher_test.js', ['goog.dom.pattern.matcherTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.pattern.EndTag', 'goog.dom.pattern.FullTag', 'goog.dom.pattern.Matcher', 'goog.dom.pattern.Repeat', 'goog.dom.pattern.Sequence', 'goog.dom.pattern.StartTag', 'goog.dom.pattern.callback.Counter', 'goog.dom.pattern.callback.Test', 'goog.iter.StopIteration', 'goog.testing.jsunit'], false); goog.addDependency('dom/pattern/nodetype.js', ['goog.dom.pattern.NodeType'], ['goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); goog.addDependency('dom/pattern/pattern.js', ['goog.dom.pattern', 'goog.dom.pattern.MatchType'], [], false); goog.addDependency('dom/pattern/pattern_test.js', ['goog.dom.patternTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagWalkType', 'goog.dom.pattern.AllChildren', 'goog.dom.pattern.ChildMatches', 'goog.dom.pattern.EndTag', 'goog.dom.pattern.FullTag', 'goog.dom.pattern.MatchType', 'goog.dom.pattern.NodeType', 'goog.dom.pattern.Repeat', 'goog.dom.pattern.Sequence', 'goog.dom.pattern.StartTag', 'goog.dom.pattern.Text', 'goog.testing.jsunit'], false); goog.addDependency('dom/pattern/repeat.js', ['goog.dom.pattern.Repeat'], ['goog.dom.NodeType', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); goog.addDependency('dom/pattern/sequence.js', ['goog.dom.pattern.Sequence'], ['goog.dom.NodeType', 'goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); goog.addDependency('dom/pattern/starttag.js', ['goog.dom.pattern.StartTag'], ['goog.dom.TagWalkType', 'goog.dom.pattern.Tag'], false); goog.addDependency('dom/pattern/tag.js', ['goog.dom.pattern.Tag'], ['goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType', 'goog.object'], false); goog.addDependency('dom/pattern/text.js', ['goog.dom.pattern.Text'], ['goog.dom.NodeType', 'goog.dom.pattern', 'goog.dom.pattern.AbstractPattern', 'goog.dom.pattern.MatchType'], false); goog.addDependency('dom/range.js', ['goog.dom.Range'], ['goog.dom', 'goog.dom.AbstractRange', 'goog.dom.BrowserFeature', 'goog.dom.ControlRange', 'goog.dom.MultiRange', 'goog.dom.NodeType', 'goog.dom.TextRange'], false); goog.addDependency('dom/range_test.js', ['goog.dom.RangeTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.RangeType', 'goog.dom.TagName', 'goog.dom.TextRange', 'goog.dom.browserrange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('dom/rangeendpoint.js', ['goog.dom.RangeEndpoint'], [], false); goog.addDependency('dom/safe.js', ['goog.dom.safe', 'goog.dom.safe.InsertAdjacentHtmlPosition'], ['goog.asserts', 'goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.string', 'goog.string.Const'], false); goog.addDependency('dom/safe_test.js', ['goog.dom.safeTest'], ['goog.dom.safe', 'goog.dom.safe.InsertAdjacentHtmlPosition', 'goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.testing', 'goog.string.Const', 'goog.testing', 'goog.testing.jsunit'], false); goog.addDependency('dom/savedcaretrange.js', ['goog.dom.SavedCaretRange'], ['goog.array', 'goog.dom', 'goog.dom.SavedRange', 'goog.dom.TagName', 'goog.string'], false); goog.addDependency('dom/savedcaretrange_test.js', ['goog.dom.SavedCaretRangeTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.SavedCaretRange', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('dom/savedrange.js', ['goog.dom.SavedRange'], ['goog.Disposable', 'goog.log'], false); goog.addDependency('dom/savedrange_test.js', ['goog.dom.SavedRangeTest'], ['goog.dom', 'goog.dom.Range', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('dom/selection.js', ['goog.dom.selection'], ['goog.dom.InputType', 'goog.string', 'goog.userAgent'], false); goog.addDependency('dom/selection_test.js', ['goog.dom.selectionTest'], ['goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.selection', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('dom/tagiterator.js', ['goog.dom.TagIterator', 'goog.dom.TagWalkType'], ['goog.dom', 'goog.dom.NodeType', 'goog.iter.Iterator', 'goog.iter.StopIteration'], false); goog.addDependency('dom/tagiterator_test.js', ['goog.dom.TagIteratorTest'], ['goog.dom', 'goog.dom.TagIterator', 'goog.dom.TagName', 'goog.dom.TagWalkType', 'goog.iter', 'goog.iter.StopIteration', 'goog.testing.dom', 'goog.testing.jsunit'], false); goog.addDependency('dom/tagname.js', ['goog.dom.TagName'], [], false); goog.addDependency('dom/tagname_test.js', ['goog.dom.TagNameTest'], ['goog.dom.TagName', 'goog.object', 'goog.testing.jsunit'], false); goog.addDependency('dom/tags.js', ['goog.dom.tags'], ['goog.object'], false); goog.addDependency('dom/tags_test.js', ['goog.dom.tagsTest'], ['goog.dom.tags', 'goog.testing.jsunit'], false); goog.addDependency('dom/textrange.js', ['goog.dom.TextRange'], ['goog.array', 'goog.dom', 'goog.dom.AbstractRange', 'goog.dom.RangeType', 'goog.dom.SavedRange', 'goog.dom.TagName', 'goog.dom.TextRangeIterator', 'goog.dom.browserrange', 'goog.string', 'goog.userAgent'], false); goog.addDependency('dom/textrange_test.js', ['goog.dom.TextRangeTest'], ['goog.dom', 'goog.dom.ControlRange', 'goog.dom.Range', 'goog.dom.TextRange', 'goog.math.Coordinate', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('dom/textrangeiterator.js', ['goog.dom.TextRangeIterator'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.RangeIterator', 'goog.dom.TagName', 'goog.iter.StopIteration'], false); goog.addDependency('dom/textrangeiterator_test.js', ['goog.dom.TextRangeIteratorTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.TextRangeIterator', 'goog.iter.StopIteration', 'goog.testing.dom', 'goog.testing.jsunit'], false); goog.addDependency('dom/vendor.js', ['goog.dom.vendor'], ['goog.string', 'goog.userAgent'], false); goog.addDependency('dom/vendor_test.js', ['goog.dom.vendorTest'], ['goog.array', 'goog.dom.vendor', 'goog.labs.userAgent.util', 'goog.testing.MockUserAgent', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgentTestUtil'], false); goog.addDependency('dom/viewportsizemonitor.js', ['goog.dom.ViewportSizeMonitor'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Size'], false); goog.addDependency('dom/viewportsizemonitor_test.js', ['goog.dom.ViewportSizeMonitorTest'], ['goog.dom.ViewportSizeMonitor', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Size', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('dom/xml.js', ['goog.dom.xml'], ['goog.dom', 'goog.dom.NodeType', 'goog.userAgent'], false); goog.addDependency('dom/xml_test.js', ['goog.dom.xmlTest'], ['goog.dom.TagName', 'goog.dom.xml', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/browserfeature.js', ['goog.editor.BrowserFeature'], ['goog.editor.defines', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('editor/browserfeature_test.js', ['goog.editor.BrowserFeatureTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit'], false); goog.addDependency('editor/clicktoeditwrapper.js', ['goog.editor.ClickToEditWrapper'], ['goog.Disposable', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.range', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventType'], false); goog.addDependency('editor/clicktoeditwrapper_test.js', ['goog.editor.ClickToEditWrapperTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.ClickToEditWrapper', 'goog.editor.SeamlessField', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('editor/command.js', ['goog.editor.Command'], [], false); goog.addDependency('editor/contenteditablefield.js', ['goog.editor.ContentEditableField'], ['goog.asserts', 'goog.editor.Field', 'goog.log'], false); goog.addDependency('editor/contenteditablefield_test.js', ['goog.editor.ContentEditableFieldTest'], ['goog.dom', 'goog.editor.ContentEditableField', 'goog.editor.field_test', 'goog.testing.jsunit'], false); goog.addDependency('editor/defines.js', ['goog.editor.defines'], [], false); goog.addDependency('editor/field.js', ['goog.editor.Field', 'goog.editor.Field.EventType'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.array', 'goog.asserts', 'goog.async.Delay', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Plugin', 'goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo', 'goog.editor.node', 'goog.editor.range', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.functions', 'goog.log', 'goog.log.Level', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('editor/field_test.js', ['goog.editor.field_test'], ['goog.array', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.range', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.functions', 'goog.testing.LooseMock', 'goog.testing.MockClock', 'goog.testing.dom', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('editor/focus.js', ['goog.editor.focus'], ['goog.dom.selection'], false); goog.addDependency('editor/focus_test.js', ['goog.editor.focusTest'], ['goog.dom.selection', 'goog.editor.BrowserFeature', 'goog.editor.focus', 'goog.testing.jsunit'], false); goog.addDependency('editor/icontent.js', ['goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo'], ['goog.dom', 'goog.editor.BrowserFeature', 'goog.style', 'goog.userAgent'], false); goog.addDependency('editor/icontent_test.js', ['goog.editor.icontentTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/link.js', ['goog.editor.Link'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.node', 'goog.editor.range', 'goog.string', 'goog.string.Unicode', 'goog.uri.utils', 'goog.uri.utils.ComponentIndex'], false); goog.addDependency('editor/link_test.js', ['goog.editor.LinkTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Link', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/node.js', ['goog.editor.node'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.iter.ChildIterator', 'goog.dom.iter.SiblingIterator', 'goog.iter', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.userAgent'], false); goog.addDependency('editor/node_test.js', ['goog.editor.nodeTest'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.editor.node', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugin.js', ['goog.editor.Plugin'], ['goog.events.EventTarget', 'goog.functions', 'goog.log', 'goog.object', 'goog.reflect', 'goog.userAgent'], false); goog.addDependency('editor/plugin_test.js', ['goog.editor.PluginTest'], ['goog.editor.Field', 'goog.editor.Plugin', 'goog.functions', 'goog.testing.StrictMock', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/abstractbubbleplugin.js', ['goog.editor.plugins.AbstractBubblePlugin'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.Plugin', 'goog.editor.style', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.actionEventWrapper', 'goog.functions', 'goog.string.Unicode', 'goog.ui.Component', 'goog.ui.editor.Bubble', 'goog.userAgent'], false); goog.addDependency('editor/plugins/abstractbubbleplugin_test.js', ['goog.editor.plugins.AbstractBubblePluginTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.plugins.AbstractBubblePlugin', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.functions', 'goog.style', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.editor.Bubble', 'goog.userAgent'], false); goog.addDependency('editor/plugins/abstractdialogplugin.js', ['goog.editor.plugins.AbstractDialogPlugin', 'goog.editor.plugins.AbstractDialogPlugin.EventType'], ['goog.dom', 'goog.dom.Range', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.range', 'goog.events', 'goog.ui.editor.AbstractDialog'], false); goog.addDependency('editor/plugins/abstractdialogplugin_test.js', ['goog.editor.plugins.AbstractDialogPluginTest'], ['goog.dom.SavedRange', 'goog.dom.TagName', 'goog.editor.Field', 'goog.editor.plugins.AbstractDialogPlugin', 'goog.events.Event', 'goog.events.EventHandler', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.ui.editor.AbstractDialog', 'goog.userAgent'], false); goog.addDependency('editor/plugins/abstracttabhandler.js', ['goog.editor.plugins.AbstractTabHandler'], ['goog.editor.Plugin', 'goog.events.KeyCodes', 'goog.userAgent'], false); goog.addDependency('editor/plugins/abstracttabhandler_test.js', ['goog.editor.plugins.AbstractTabHandlerTest'], ['goog.editor.Field', 'goog.editor.plugins.AbstractTabHandler', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.testing.StrictMock', 'goog.testing.editor.FieldMock', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/basictextformatter.js', ['goog.editor.plugins.BasicTextFormatter', 'goog.editor.plugins.BasicTextFormatter.COMMAND'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Link', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.range', 'goog.editor.style', 'goog.iter', 'goog.iter.StopIteration', 'goog.log', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.ui.editor.messages', 'goog.userAgent'], false); goog.addDependency('editor/plugins/basictextformatter_test.js', ['goog.editor.plugins.BasicTextFormatterTest'], ['goog.array', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.plugins.BasicTextFormatter', 'goog.object', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.LooseMock', 'goog.testing.PropertyReplacer', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.userAgent'], false); goog.addDependency('editor/plugins/blockquote.js', ['goog.editor.plugins.Blockquote'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Plugin', 'goog.editor.node', 'goog.functions', 'goog.log'], false); goog.addDependency('editor/plugins/blockquote_test.js', ['goog.editor.plugins.BlockquoteTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.plugins.Blockquote', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit'], false); goog.addDependency('editor/plugins/emoticons.js', ['goog.editor.plugins.Emoticons'], ['goog.dom.TagName', 'goog.editor.Plugin', 'goog.editor.range', 'goog.functions', 'goog.ui.emoji.Emoji', 'goog.userAgent'], false); goog.addDependency('editor/plugins/emoticons_test.js', ['goog.editor.plugins.EmoticonsTest'], ['goog.Uri', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.editor.Field', 'goog.editor.plugins.Emoticons', 'goog.testing.jsunit', 'goog.ui.emoji.Emoji', 'goog.userAgent'], false); goog.addDependency('editor/plugins/enterhandler.js', ['goog.editor.plugins.EnterHandler'], ['goog.dom', 'goog.dom.NodeOffset', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.plugins.Blockquote', 'goog.editor.range', 'goog.editor.style', 'goog.events.KeyCodes', 'goog.functions', 'goog.object', 'goog.string', 'goog.userAgent'], false); goog.addDependency('editor/plugins/enterhandler_test.js', ['goog.editor.plugins.EnterHandlerTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.plugins.Blockquote', 'goog.editor.plugins.EnterHandler', 'goog.editor.range', 'goog.events', 'goog.events.KeyCodes', 'goog.testing.ExpectedFailures', 'goog.testing.MockClock', 'goog.testing.dom', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/firststrong.js', ['goog.editor.plugins.FirstStrong'], ['goog.dom.NodeType', 'goog.dom.TagIterator', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.range', 'goog.i18n.bidi', 'goog.i18n.uChar', 'goog.iter', 'goog.userAgent'], false); goog.addDependency('editor/plugins/firststrong_test.js', ['goog.editor.plugins.FirstStrongTest'], ['goog.dom.Range', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.plugins.FirstStrong', 'goog.editor.range', 'goog.events.KeyCodes', 'goog.testing.MockClock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/headerformatter.js', ['goog.editor.plugins.HeaderFormatter'], ['goog.editor.Command', 'goog.editor.Plugin', 'goog.userAgent'], false); goog.addDependency('editor/plugins/headerformatter_test.js', ['goog.editor.plugins.HeaderFormatterTest'], ['goog.dom', 'goog.editor.Command', 'goog.editor.plugins.BasicTextFormatter', 'goog.editor.plugins.HeaderFormatter', 'goog.events.BrowserEvent', 'goog.testing.LooseMock', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/linkbubble.js', ['goog.editor.plugins.LinkBubble', 'goog.editor.plugins.LinkBubble.Action'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.Link', 'goog.editor.plugins.AbstractBubblePlugin', 'goog.editor.range', 'goog.functions', 'goog.string', 'goog.style', 'goog.ui.editor.messages', 'goog.uri.utils', 'goog.window'], false); goog.addDependency('editor/plugins/linkbubble_test.js', ['goog.editor.plugins.LinkBubbleTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.Link', 'goog.editor.plugins.LinkBubble', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.string', 'goog.style', 'goog.testing.FunctionMock', 'goog.testing.PropertyReplacer', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/linkdialogplugin.js', ['goog.editor.plugins.LinkDialogPlugin'], ['goog.array', 'goog.dom', 'goog.editor.Command', 'goog.editor.plugins.AbstractDialogPlugin', 'goog.events.EventHandler', 'goog.functions', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.LinkDialog', 'goog.uri.utils'], false); goog.addDependency('editor/plugins/linkdialogplugin_test.js', ['goog.ui.editor.plugins.LinkDialogTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Link', 'goog.editor.plugins.LinkDialogPlugin', 'goog.string', 'goog.string.Unicode', 'goog.testing.MockControl', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.editor.dom', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.LinkDialog', 'goog.userAgent'], false); goog.addDependency('editor/plugins/linkshortcutplugin.js', ['goog.editor.plugins.LinkShortcutPlugin'], ['goog.editor.Command', 'goog.editor.Plugin'], false); goog.addDependency('editor/plugins/linkshortcutplugin_test.js', ['goog.editor.plugins.LinkShortcutPluginTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Field', 'goog.editor.plugins.BasicTextFormatter', 'goog.editor.plugins.LinkBubble', 'goog.editor.plugins.LinkShortcutPlugin', 'goog.events.KeyCodes', 'goog.testing.PropertyReplacer', 'goog.testing.dom', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent.product'], false); goog.addDependency('editor/plugins/listtabhandler.js', ['goog.editor.plugins.ListTabHandler'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.plugins.AbstractTabHandler', 'goog.iter'], false); goog.addDependency('editor/plugins/listtabhandler_test.js', ['goog.editor.plugins.ListTabHandlerTest'], ['goog.dom', 'goog.editor.Command', 'goog.editor.plugins.ListTabHandler', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.functions', 'goog.testing.StrictMock', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit'], false); goog.addDependency('editor/plugins/loremipsum.js', ['goog.editor.plugins.LoremIpsum'], ['goog.asserts', 'goog.dom', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.node', 'goog.functions', 'goog.userAgent'], false); goog.addDependency('editor/plugins/loremipsum_test.js', ['goog.editor.plugins.LoremIpsumTest'], ['goog.dom', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.plugins.LoremIpsum', 'goog.string.Unicode', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/removeformatting.js', ['goog.editor.plugins.RemoveFormatting'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.range', 'goog.string', 'goog.userAgent'], false); goog.addDependency('editor/plugins/removeformatting_test.js', ['goog.editor.plugins.RemoveFormattingTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.plugins.RemoveFormatting', 'goog.string', 'goog.testing.ExpectedFailures', 'goog.testing.dom', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/spacestabhandler.js', ['goog.editor.plugins.SpacesTabHandler'], ['goog.dom.TagName', 'goog.editor.plugins.AbstractTabHandler', 'goog.editor.range'], false); goog.addDependency('editor/plugins/spacestabhandler_test.js', ['goog.editor.plugins.SpacesTabHandlerTest'], ['goog.dom', 'goog.dom.Range', 'goog.editor.plugins.SpacesTabHandler', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.functions', 'goog.testing.StrictMock', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit'], false); goog.addDependency('editor/plugins/tableeditor.js', ['goog.editor.plugins.TableEditor'], ['goog.array', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Plugin', 'goog.editor.Table', 'goog.editor.node', 'goog.editor.range', 'goog.object', 'goog.userAgent'], false); goog.addDependency('editor/plugins/tableeditor_test.js', ['goog.editor.plugins.TableEditorTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.plugins.TableEditor', 'goog.object', 'goog.string', 'goog.testing.ExpectedFailures', 'goog.testing.JsUnitException', 'goog.testing.editor.FieldMock', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/tagonenterhandler.js', ['goog.editor.plugins.TagOnEnterHandler'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.Command', 'goog.editor.node', 'goog.editor.plugins.EnterHandler', 'goog.editor.range', 'goog.editor.style', 'goog.events.KeyCodes', 'goog.functions', 'goog.string.Unicode', 'goog.style', 'goog.userAgent'], false); goog.addDependency('editor/plugins/tagonenterhandler_test.js', ['goog.editor.plugins.TagOnEnterHandlerTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.plugins.TagOnEnterHandler', 'goog.events.KeyCodes', 'goog.string.Unicode', 'goog.testing.dom', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/plugins/undoredo.js', ['goog.editor.plugins.UndoRedo'], ['goog.dom', 'goog.dom.NodeOffset', 'goog.dom.Range', 'goog.editor.BrowserFeature', 'goog.editor.Command', 'goog.editor.Field', 'goog.editor.Plugin', 'goog.editor.node', 'goog.editor.plugins.UndoRedoManager', 'goog.editor.plugins.UndoRedoState', 'goog.events', 'goog.events.EventHandler', 'goog.log', 'goog.object'], false); goog.addDependency('editor/plugins/undoredo_test.js', ['goog.editor.plugins.UndoRedoTest'], ['goog.array', 'goog.dom', 'goog.dom.browserrange', 'goog.editor.Field', 'goog.editor.plugins.LoremIpsum', 'goog.editor.plugins.UndoRedo', 'goog.events', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock', 'goog.testing.jsunit'], false); goog.addDependency('editor/plugins/undoredomanager.js', ['goog.editor.plugins.UndoRedoManager', 'goog.editor.plugins.UndoRedoManager.EventType'], ['goog.editor.plugins.UndoRedoState', 'goog.events', 'goog.events.EventTarget'], false); goog.addDependency('editor/plugins/undoredomanager_test.js', ['goog.editor.plugins.UndoRedoManagerTest'], ['goog.editor.plugins.UndoRedoManager', 'goog.editor.plugins.UndoRedoState', 'goog.events', 'goog.testing.StrictMock', 'goog.testing.jsunit'], false); goog.addDependency('editor/plugins/undoredostate.js', ['goog.editor.plugins.UndoRedoState'], ['goog.events.EventTarget'], false); goog.addDependency('editor/plugins/undoredostate_test.js', ['goog.editor.plugins.UndoRedoStateTest'], ['goog.editor.plugins.UndoRedoState', 'goog.testing.jsunit'], false); goog.addDependency('editor/range.js', ['goog.editor.range', 'goog.editor.range.Point'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.dom.RangeEndpoint', 'goog.dom.SavedCaretRange', 'goog.editor.node', 'goog.editor.style', 'goog.iter', 'goog.userAgent'], false); goog.addDependency('editor/range_test.js', ['goog.editor.rangeTest'], ['goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.range', 'goog.editor.range.Point', 'goog.string', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('editor/seamlessfield.js', ['goog.editor.SeamlessField'], ['goog.cssom.iframe.style', 'goog.dom', 'goog.dom.Range', 'goog.dom.TagName', 'goog.dom.safe', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.icontent', 'goog.editor.icontent.FieldFormatInfo', 'goog.editor.icontent.FieldStyleInfo', 'goog.editor.node', 'goog.events', 'goog.events.EventType', 'goog.html.uncheckedconversions', 'goog.log', 'goog.string.Const', 'goog.style'], false); goog.addDependency('editor/seamlessfield_test.js', ['goog.editor.seamlessfield_test'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.Range', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Field', 'goog.editor.SeamlessField', 'goog.events', 'goog.functions', 'goog.style', 'goog.testing.MockClock', 'goog.testing.MockRange', 'goog.testing.jsunit'], false); goog.addDependency('editor/style.js', ['goog.editor.style'], ['goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.events.EventType', 'goog.object', 'goog.style', 'goog.userAgent'], false); goog.addDependency('editor/style_test.js', ['goog.editor.styleTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.style', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.style', 'goog.testing.LooseMock', 'goog.testing.jsunit', 'goog.testing.mockmatchers'], false); goog.addDependency('editor/table.js', ['goog.editor.Table', 'goog.editor.TableCell', 'goog.editor.TableRow'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.log', 'goog.string.Unicode', 'goog.style'], false); goog.addDependency('editor/table_test.js', ['goog.editor.TableTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.Table', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/actioneventwrapper.js', ['goog.events.actionEventWrapper'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.EventWrapper', 'goog.events.KeyCodes', 'goog.userAgent'], false); goog.addDependency('events/actioneventwrapper_test.js', ['goog.events.actionEventWrapperTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.events', 'goog.events.EventHandler', 'goog.events.KeyCodes', 'goog.events.actionEventWrapper', 'goog.testing.events', 'goog.testing.jsunit'], false); goog.addDependency('events/actionhandler.js', ['goog.events.ActionEvent', 'goog.events.ActionHandler', 'goog.events.ActionHandler.EventType', 'goog.events.BeforeActionEvent'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.userAgent'], false); goog.addDependency('events/actionhandler_test.js', ['goog.events.ActionHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.ActionHandler', 'goog.testing.events', 'goog.testing.jsunit'], false); goog.addDependency('events/browserevent.js', ['goog.events.BrowserEvent', 'goog.events.BrowserEvent.MouseButton'], ['goog.events.BrowserFeature', 'goog.events.Event', 'goog.events.EventType', 'goog.reflect', 'goog.userAgent'], false); goog.addDependency('events/browserevent_test.js', ['goog.events.BrowserEventTest'], ['goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.math.Coordinate', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/browserfeature.js', ['goog.events.BrowserFeature'], ['goog.userAgent'], false); goog.addDependency('events/event.js', ['goog.events.Event', 'goog.events.EventLike'], ['goog.Disposable', 'goog.events.EventId'], false); goog.addDependency('events/event_test.js', ['goog.events.EventTest'], ['goog.events.Event', 'goog.events.EventId', 'goog.events.EventTarget', 'goog.testing.jsunit'], false); goog.addDependency('events/eventhandler.js', ['goog.events.EventHandler'], ['goog.Disposable', 'goog.events', 'goog.object'], false); goog.addDependency('events/eventhandler_test.js', ['goog.events.EventHandlerTest'], ['goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('events/eventid.js', ['goog.events.EventId'], [], false); goog.addDependency('events/events.js', ['goog.events', 'goog.events.CaptureSimulationMode', 'goog.events.Key', 'goog.events.ListenableType'], ['goog.asserts', 'goog.debug.entryPointRegistry', 'goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.events.Listenable', 'goog.events.ListenerMap'], false); goog.addDependency('events/events_test.js', ['goog.eventsTest'], ['goog.asserts.AssertionError', 'goog.debug.EntryPointMonitor', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.BrowserFeature', 'goog.events.CaptureSimulationMode', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.Listener', 'goog.functions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('events/eventtarget.js', ['goog.events.EventTarget'], ['goog.Disposable', 'goog.asserts', 'goog.events', 'goog.events.Event', 'goog.events.Listenable', 'goog.events.ListenerMap', 'goog.object'], false); goog.addDependency('events/eventtarget_test.js', ['goog.events.EventTargetTest'], ['goog.events.EventTarget', 'goog.events.Listenable', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.testing.jsunit'], false); goog.addDependency('events/eventtarget_via_googevents_test.js', ['goog.events.EventTargetGoogEventsTest'], ['goog.events', 'goog.events.EventTarget', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.testing', 'goog.testing.jsunit'], false); goog.addDependency('events/eventtarget_via_w3cinterface_test.js', ['goog.events.EventTargetW3CTest'], ['goog.events.EventTarget', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.testing.jsunit'], false); goog.addDependency('events/eventtargettester.js', ['goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType'], ['goog.array', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.testing.asserts', 'goog.testing.recordFunction'], false); goog.addDependency('events/eventtype.js', ['goog.events.EventType'], ['goog.userAgent'], false); goog.addDependency('events/eventwrapper.js', ['goog.events.EventWrapper'], [], false); goog.addDependency('events/filedrophandler.js', ['goog.events.FileDropHandler', 'goog.events.FileDropHandler.EventType'], ['goog.array', 'goog.dom', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.log', 'goog.log.Level'], false); goog.addDependency('events/filedrophandler_test.js', ['goog.events.FileDropHandlerTest'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.FileDropHandler', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/focushandler.js', ['goog.events.FocusHandler', 'goog.events.FocusHandler.EventType'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.userAgent'], false); goog.addDependency('events/imehandler.js', ['goog.events.ImeHandler', 'goog.events.ImeHandler.Event', 'goog.events.ImeHandler.EventType'], ['goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.userAgent'], false); goog.addDependency('events/imehandler_test.js', ['goog.events.ImeHandlerTest'], ['goog.array', 'goog.dom', 'goog.events', 'goog.events.ImeHandler', 'goog.events.KeyCodes', 'goog.object', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/inputhandler.js', ['goog.events.InputHandler', 'goog.events.InputHandler.EventType'], ['goog.Timer', 'goog.dom.TagName', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.KeyCodes', 'goog.userAgent'], false); goog.addDependency('events/inputhandler_test.js', ['goog.events.InputHandlerTest'], ['goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('events/keycodes.js', ['goog.events.KeyCodes'], ['goog.userAgent'], false); goog.addDependency('events/keycodes_test.js', ['goog.events.KeyCodesTest'], ['goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/keyhandler.js', ['goog.events.KeyEvent', 'goog.events.KeyHandler', 'goog.events.KeyHandler.EventType'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.userAgent'], false); goog.addDependency('events/keyhandler_test.js', ['goog.events.KeyEventTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/keynames.js', ['goog.events.KeyNames'], [], false); goog.addDependency('events/listenable.js', ['goog.events.Listenable', 'goog.events.ListenableKey'], ['goog.events.EventId'], false); goog.addDependency('events/listenable_test.js', ['goog.events.ListenableTest'], ['goog.events.Listenable', 'goog.testing.jsunit'], false); goog.addDependency('events/listener.js', ['goog.events.Listener'], ['goog.events.ListenableKey'], false); goog.addDependency('events/listenermap.js', ['goog.events.ListenerMap'], ['goog.array', 'goog.events.Listener', 'goog.object'], false); goog.addDependency('events/listenermap_test.js', ['goog.events.ListenerMapTest'], ['goog.dispose', 'goog.events', 'goog.events.EventId', 'goog.events.EventTarget', 'goog.events.ListenerMap', 'goog.testing.jsunit'], false); goog.addDependency('events/mousewheelhandler.js', ['goog.events.MouseWheelEvent', 'goog.events.MouseWheelHandler', 'goog.events.MouseWheelHandler.EventType'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.math', 'goog.style', 'goog.userAgent'], false); goog.addDependency('events/mousewheelhandler_test.js', ['goog.events.MouseWheelHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.MouseWheelEvent', 'goog.events.MouseWheelHandler', 'goog.functions', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/onlinehandler.js', ['goog.events.OnlineHandler', 'goog.events.OnlineHandler.EventType'], ['goog.Timer', 'goog.events.BrowserFeature', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.net.NetworkStatusMonitor'], false); goog.addDependency('events/onlinelistener_test.js', ['goog.events.OnlineHandlerTest'], ['goog.events', 'goog.events.BrowserFeature', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.OnlineHandler', 'goog.net.NetworkStatusMonitor', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('events/pastehandler.js', ['goog.events.PasteHandler', 'goog.events.PasteHandler.EventType', 'goog.events.PasteHandler.State'], ['goog.Timer', 'goog.async.ConditionalDelay', 'goog.events.BrowserEvent', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.log', 'goog.userAgent'], false); goog.addDependency('events/pastehandler_test.js', ['goog.events.PasteHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.PasteHandler', 'goog.testing.MockClock', 'goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('events/wheelevent.js', ['goog.events.WheelEvent'], ['goog.asserts', 'goog.events.BrowserEvent'], false); goog.addDependency('events/wheelhandler.js', ['goog.events.WheelHandler'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.WheelEvent', 'goog.style', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('events/wheelhandler_test.js', ['goog.events.WheelHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.WheelEvent', 'goog.events.WheelHandler', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('format/emailaddress.js', ['goog.format.EmailAddress'], ['goog.string'], false); goog.addDependency('format/emailaddress_test.js', ['goog.format.EmailAddressTest'], ['goog.array', 'goog.format.EmailAddress', 'goog.testing.jsunit'], false); goog.addDependency('format/format.js', ['goog.format'], ['goog.i18n.GraphemeBreak', 'goog.string', 'goog.userAgent'], false); goog.addDependency('format/format_test.js', ['goog.formatTest'], ['goog.dom', 'goog.dom.TagName', 'goog.format', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('format/htmlprettyprinter.js', ['goog.format.HtmlPrettyPrinter', 'goog.format.HtmlPrettyPrinter.Buffer'], ['goog.dom.TagName', 'goog.object', 'goog.string.StringBuffer'], false); goog.addDependency('format/htmlprettyprinter_test.js', ['goog.format.HtmlPrettyPrinterTest'], ['goog.format.HtmlPrettyPrinter', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('format/internationalizedemailaddress.js', ['goog.format.InternationalizedEmailAddress'], ['goog.format.EmailAddress', 'goog.string'], false); goog.addDependency('format/internationalizedemailaddress_test.js', ['goog.format.InternationalizedEmailAddressTest'], ['goog.array', 'goog.format.InternationalizedEmailAddress', 'goog.testing.jsunit'], false); goog.addDependency('format/jsonprettyprinter.js', ['goog.format.JsonPrettyPrinter', 'goog.format.JsonPrettyPrinter.HtmlDelimiters', 'goog.format.JsonPrettyPrinter.TextDelimiters'], ['goog.json', 'goog.json.Serializer', 'goog.string', 'goog.string.StringBuffer', 'goog.string.format'], false); goog.addDependency('format/jsonprettyprinter_test.js', ['goog.format.JsonPrettyPrinterTest'], ['goog.format.JsonPrettyPrinter', 'goog.testing.jsunit'], false); goog.addDependency('fs/entry.js', ['goog.fs.DirectoryEntry', 'goog.fs.DirectoryEntry.Behavior', 'goog.fs.Entry', 'goog.fs.FileEntry'], [], false); goog.addDependency('fs/entryimpl.js', ['goog.fs.DirectoryEntryImpl', 'goog.fs.EntryImpl', 'goog.fs.FileEntryImpl'], ['goog.array', 'goog.async.Deferred', 'goog.fs.DirectoryEntry', 'goog.fs.Entry', 'goog.fs.Error', 'goog.fs.FileEntry', 'goog.fs.FileWriter', 'goog.functions', 'goog.string'], false); goog.addDependency('fs/error.js', ['goog.fs.Error', 'goog.fs.Error.ErrorCode'], ['goog.debug.Error', 'goog.object', 'goog.string'], false); goog.addDependency('fs/filereader.js', ['goog.fs.FileReader', 'goog.fs.FileReader.EventType', 'goog.fs.FileReader.ReadyState'], ['goog.async.Deferred', 'goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.ProgressEvent'], false); goog.addDependency('fs/filesaver.js', ['goog.fs.FileSaver', 'goog.fs.FileSaver.EventType', 'goog.fs.FileSaver.ReadyState'], ['goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.ProgressEvent'], false); goog.addDependency('fs/filesystem.js', ['goog.fs.FileSystem'], [], false); goog.addDependency('fs/filesystemimpl.js', ['goog.fs.FileSystemImpl'], ['goog.fs.DirectoryEntryImpl', 'goog.fs.FileSystem'], false); goog.addDependency('fs/filewriter.js', ['goog.fs.FileWriter'], ['goog.fs.Error', 'goog.fs.FileSaver'], false); goog.addDependency('fs/fs.js', ['goog.fs'], ['goog.array', 'goog.async.Deferred', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.fs.FileSystemImpl', 'goog.fs.url', 'goog.userAgent'], false); goog.addDependency('fs/fs_test.js', ['goog.fsTest'], ['goog.Promise', 'goog.array', 'goog.dom', 'goog.events', 'goog.fs', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.fs.FileSaver', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('fs/progressevent.js', ['goog.fs.ProgressEvent'], ['goog.events.Event'], false); goog.addDependency('fs/url.js', ['goog.fs.url'], [], false); goog.addDependency('fs/url_test.js', ['goog.urlTest'], ['goog.fs.url', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('functions/functions.js', ['goog.functions'], [], false); goog.addDependency('functions/functions_test.js', ['goog.functionsTest'], ['goog.array', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('fx/abstractdragdrop.js', ['goog.fx.AbstractDragDrop', 'goog.fx.AbstractDragDrop.EventType', 'goog.fx.DragDropEvent', 'goog.fx.DragDropItem'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style'], false); goog.addDependency('fx/abstractdragdrop_test.js', ['goog.fx.AbstractDragDropTest'], ['goog.array', 'goog.dom.TagName', 'goog.events.EventType', 'goog.functions', 'goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit'], false); goog.addDependency('fx/anim/anim.js', ['goog.fx.anim', 'goog.fx.anim.Animated'], ['goog.async.AnimationDelay', 'goog.async.Delay', 'goog.object'], false); goog.addDependency('fx/anim/anim_test.js', ['goog.fx.animTest'], ['goog.async.AnimationDelay', 'goog.async.Delay', 'goog.events', 'goog.functions', 'goog.fx.Animation', 'goog.fx.anim', 'goog.object', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('fx/animation.js', ['goog.fx.Animation', 'goog.fx.Animation.EventType', 'goog.fx.Animation.State', 'goog.fx.AnimationEvent'], ['goog.array', 'goog.events.Event', 'goog.fx.Transition', 'goog.fx.TransitionBase', 'goog.fx.anim', 'goog.fx.anim.Animated'], false); goog.addDependency('fx/animation_test.js', ['goog.fx.AnimationTest'], ['goog.events', 'goog.fx.Animation', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('fx/animationqueue.js', ['goog.fx.AnimationParallelQueue', 'goog.fx.AnimationQueue', 'goog.fx.AnimationSerialQueue'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.fx.Transition', 'goog.fx.TransitionBase'], false); goog.addDependency('fx/animationqueue_test.js', ['goog.fx.AnimationQueueTest'], ['goog.events', 'goog.fx.Animation', 'goog.fx.AnimationParallelQueue', 'goog.fx.AnimationSerialQueue', 'goog.fx.Transition', 'goog.fx.anim', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('fx/css3/fx.js', ['goog.fx.css3'], ['goog.fx.css3.Transition'], false); goog.addDependency('fx/css3/transition.js', ['goog.fx.css3.Transition'], ['goog.Timer', 'goog.asserts', 'goog.fx.TransitionBase', 'goog.style', 'goog.style.transition'], false); goog.addDependency('fx/css3/transition_test.js', ['goog.fx.css3.TransitionTest'], ['goog.dispose', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.fx.Transition', 'goog.fx.css3.Transition', 'goog.style.transition', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('fx/cssspriteanimation.js', ['goog.fx.CssSpriteAnimation'], ['goog.fx.Animation'], false); goog.addDependency('fx/cssspriteanimation_test.js', ['goog.fx.CssSpriteAnimationTest'], ['goog.fx.CssSpriteAnimation', 'goog.math.Box', 'goog.math.Size', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('fx/dom.js', ['goog.fx.dom', 'goog.fx.dom.BgColorTransform', 'goog.fx.dom.ColorTransform', 'goog.fx.dom.Fade', 'goog.fx.dom.FadeIn', 'goog.fx.dom.FadeInAndShow', 'goog.fx.dom.FadeOut', 'goog.fx.dom.FadeOutAndHide', 'goog.fx.dom.PredefinedEffect', 'goog.fx.dom.Resize', 'goog.fx.dom.ResizeHeight', 'goog.fx.dom.ResizeWidth', 'goog.fx.dom.Scroll', 'goog.fx.dom.Slide', 'goog.fx.dom.SlideFrom', 'goog.fx.dom.Swipe'], ['goog.color', 'goog.events', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.style', 'goog.style.bidi'], false); goog.addDependency('fx/dragdrop.js', ['goog.fx.DragDrop'], ['goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem'], false); goog.addDependency('fx/dragdropgroup.js', ['goog.fx.DragDropGroup'], ['goog.dom', 'goog.fx.AbstractDragDrop', 'goog.fx.DragDropItem'], false); goog.addDependency('fx/dragdropgroup_test.js', ['goog.fx.DragDropGroupTest'], ['goog.events', 'goog.fx.DragDropGroup', 'goog.testing.jsunit'], false); goog.addDependency('fx/dragger.js', ['goog.fx.DragEvent', 'goog.fx.Dragger', 'goog.fx.Dragger.EventType'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.style', 'goog.style.bidi', 'goog.userAgent'], false); goog.addDependency('fx/dragger_test.js', ['goog.fx.DraggerTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Rect', 'goog.style.bidi', 'goog.testing.StrictMock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('fx/draglistgroup.js', ['goog.fx.DragListDirection', 'goog.fx.DragListGroup', 'goog.fx.DragListGroup.EventType', 'goog.fx.DragListGroupEvent'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Coordinate', 'goog.string', 'goog.style'], false); goog.addDependency('fx/draglistgroup_test.js', ['goog.fx.DragListGroupTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.events.Event', 'goog.events.EventType', 'goog.fx.DragEvent', 'goog.fx.DragListDirection', 'goog.fx.DragListGroup', 'goog.fx.Dragger', 'goog.math.Coordinate', 'goog.object', 'goog.testing.events', 'goog.testing.jsunit'], false); goog.addDependency('fx/dragscrollsupport.js', ['goog.fx.DragScrollSupport'], ['goog.Disposable', 'goog.Timer', 'goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.style'], false); goog.addDependency('fx/dragscrollsupport_test.js', ['goog.fx.DragScrollSupportTest'], ['goog.fx.DragScrollSupport', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit'], false); goog.addDependency('fx/easing.js', ['goog.fx.easing'], [], false); goog.addDependency('fx/easing_test.js', ['goog.fx.easingTest'], ['goog.fx.easing', 'goog.testing.jsunit'], false); goog.addDependency('fx/fx.js', ['goog.fx'], ['goog.asserts', 'goog.fx.Animation', 'goog.fx.Animation.EventType', 'goog.fx.Animation.State', 'goog.fx.AnimationEvent', 'goog.fx.Transition.EventType', 'goog.fx.easing'], false); goog.addDependency('fx/fx_test.js', ['goog.fxTest'], ['goog.fx.Animation', 'goog.object', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('fx/transition.js', ['goog.fx.Transition', 'goog.fx.Transition.EventType'], [], false); goog.addDependency('fx/transitionbase.js', ['goog.fx.TransitionBase', 'goog.fx.TransitionBase.State'], ['goog.events.EventTarget', 'goog.fx.Transition'], false); goog.addDependency('graphics/abstractgraphics.js', ['goog.graphics.AbstractGraphics'], ['goog.dom', 'goog.graphics.Path', 'goog.math.Coordinate', 'goog.math.Size', 'goog.style', 'goog.ui.Component'], false); goog.addDependency('graphics/affinetransform.js', ['goog.graphics.AffineTransform'], ['goog.math'], false); goog.addDependency('graphics/canvaselement.js', ['goog.graphics.CanvasEllipseElement', 'goog.graphics.CanvasGroupElement', 'goog.graphics.CanvasImageElement', 'goog.graphics.CanvasPathElement', 'goog.graphics.CanvasRectElement', 'goog.graphics.CanvasTextElement'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.graphics.EllipseElement', 'goog.graphics.GroupElement', 'goog.graphics.ImageElement', 'goog.graphics.Path', 'goog.graphics.PathElement', 'goog.graphics.RectElement', 'goog.graphics.TextElement', 'goog.html.SafeHtml', 'goog.html.uncheckedconversions', 'goog.math', 'goog.string', 'goog.string.Const'], false); goog.addDependency('graphics/canvasgraphics.js', ['goog.graphics.CanvasGraphics'], ['goog.dom.TagName', 'goog.events.EventType', 'goog.graphics.AbstractGraphics', 'goog.graphics.CanvasEllipseElement', 'goog.graphics.CanvasGroupElement', 'goog.graphics.CanvasImageElement', 'goog.graphics.CanvasPathElement', 'goog.graphics.CanvasRectElement', 'goog.graphics.CanvasTextElement', 'goog.graphics.SolidFill', 'goog.math.Size', 'goog.style'], false); goog.addDependency('graphics/canvasgraphics_test.js', ['goog.graphics.CanvasGraphicsTest'], ['goog.dom', 'goog.graphics.CanvasGraphics', 'goog.graphics.SolidFill', 'goog.graphics.Stroke', 'goog.testing.jsunit'], false); goog.addDependency('graphics/element.js', ['goog.graphics.Element'], ['goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.events.Listenable', 'goog.graphics.AffineTransform', 'goog.math'], false); goog.addDependency('graphics/ellipseelement.js', ['goog.graphics.EllipseElement'], ['goog.graphics.StrokeAndFillElement'], false); goog.addDependency('graphics/ext/coordinates.js', ['goog.graphics.ext.coordinates'], ['goog.string'], false); goog.addDependency('graphics/ext/element.js', ['goog.graphics.ext.Element'], ['goog.events.EventTarget', 'goog.functions', 'goog.graphics.ext.coordinates'], false); goog.addDependency('graphics/ext/ellipse.js', ['goog.graphics.ext.Ellipse'], ['goog.graphics.ext.StrokeAndFillElement'], false); goog.addDependency('graphics/ext/ext.js', ['goog.graphics.ext'], ['goog.graphics.ext.Ellipse', 'goog.graphics.ext.Graphics', 'goog.graphics.ext.Group', 'goog.graphics.ext.Image', 'goog.graphics.ext.Rectangle', 'goog.graphics.ext.Shape', 'goog.graphics.ext.coordinates'], false); goog.addDependency('graphics/ext/graphics.js', ['goog.graphics.ext.Graphics'], ['goog.events', 'goog.events.EventType', 'goog.graphics', 'goog.graphics.ext.Group'], false); goog.addDependency('graphics/ext/group.js', ['goog.graphics.ext.Group'], ['goog.array', 'goog.graphics.ext.Element'], false); goog.addDependency('graphics/ext/image.js', ['goog.graphics.ext.Image'], ['goog.graphics.ext.Element'], false); goog.addDependency('graphics/ext/path.js', ['goog.graphics.ext.Path'], ['goog.graphics.AffineTransform', 'goog.graphics.Path', 'goog.math.Rect'], false); goog.addDependency('graphics/ext/rectangle.js', ['goog.graphics.ext.Rectangle'], ['goog.graphics.ext.StrokeAndFillElement'], false); goog.addDependency('graphics/ext/shape.js', ['goog.graphics.ext.Shape'], ['goog.graphics.ext.StrokeAndFillElement'], false); goog.addDependency('graphics/ext/strokeandfillelement.js', ['goog.graphics.ext.StrokeAndFillElement'], ['goog.graphics.ext.Element'], false); goog.addDependency('graphics/fill.js', ['goog.graphics.Fill'], [], false); goog.addDependency('graphics/font.js', ['goog.graphics.Font'], [], false); goog.addDependency('graphics/graphics.js', ['goog.graphics'], ['goog.dom', 'goog.graphics.CanvasGraphics', 'goog.graphics.SvgGraphics', 'goog.graphics.VmlGraphics', 'goog.userAgent'], false); goog.addDependency('graphics/groupelement.js', ['goog.graphics.GroupElement'], ['goog.graphics.Element'], false); goog.addDependency('graphics/imageelement.js', ['goog.graphics.ImageElement'], ['goog.graphics.Element'], false); goog.addDependency('graphics/lineargradient.js', ['goog.graphics.LinearGradient'], ['goog.asserts', 'goog.graphics.Fill'], false); goog.addDependency('graphics/path.js', ['goog.graphics.Path', 'goog.graphics.Path.Segment'], ['goog.array', 'goog.math'], false); goog.addDependency('graphics/pathelement.js', ['goog.graphics.PathElement'], ['goog.graphics.StrokeAndFillElement'], false); goog.addDependency('graphics/paths.js', ['goog.graphics.paths'], ['goog.graphics.Path', 'goog.math.Coordinate'], false); goog.addDependency('graphics/rectelement.js', ['goog.graphics.RectElement'], ['goog.graphics.StrokeAndFillElement'], false); goog.addDependency('graphics/solidfill.js', ['goog.graphics.SolidFill'], ['goog.graphics.Fill'], false); goog.addDependency('graphics/stroke.js', ['goog.graphics.Stroke'], [], false); goog.addDependency('graphics/strokeandfillelement.js', ['goog.graphics.StrokeAndFillElement'], ['goog.graphics.Element'], false); goog.addDependency('graphics/svgelement.js', ['goog.graphics.SvgEllipseElement', 'goog.graphics.SvgGroupElement', 'goog.graphics.SvgImageElement', 'goog.graphics.SvgPathElement', 'goog.graphics.SvgRectElement', 'goog.graphics.SvgTextElement'], ['goog.dom', 'goog.graphics.EllipseElement', 'goog.graphics.GroupElement', 'goog.graphics.ImageElement', 'goog.graphics.PathElement', 'goog.graphics.RectElement', 'goog.graphics.TextElement'], false); goog.addDependency('graphics/svggraphics.js', ['goog.graphics.SvgGraphics'], ['goog.Timer', 'goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.graphics.AbstractGraphics', 'goog.graphics.LinearGradient', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.graphics.Stroke', 'goog.graphics.SvgEllipseElement', 'goog.graphics.SvgGroupElement', 'goog.graphics.SvgImageElement', 'goog.graphics.SvgPathElement', 'goog.graphics.SvgRectElement', 'goog.graphics.SvgTextElement', 'goog.math', 'goog.math.Size', 'goog.style', 'goog.userAgent'], false); goog.addDependency('graphics/textelement.js', ['goog.graphics.TextElement'], ['goog.graphics.StrokeAndFillElement'], false); goog.addDependency('graphics/vmlelement.js', ['goog.graphics.VmlEllipseElement', 'goog.graphics.VmlGroupElement', 'goog.graphics.VmlImageElement', 'goog.graphics.VmlPathElement', 'goog.graphics.VmlRectElement', 'goog.graphics.VmlTextElement'], ['goog.dom', 'goog.graphics.EllipseElement', 'goog.graphics.GroupElement', 'goog.graphics.ImageElement', 'goog.graphics.PathElement', 'goog.graphics.RectElement', 'goog.graphics.TextElement'], false); goog.addDependency('graphics/vmlgraphics.js', ['goog.graphics.VmlGraphics'], ['goog.array', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.graphics.AbstractGraphics', 'goog.graphics.LinearGradient', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.graphics.VmlEllipseElement', 'goog.graphics.VmlGroupElement', 'goog.graphics.VmlImageElement', 'goog.graphics.VmlPathElement', 'goog.graphics.VmlRectElement', 'goog.graphics.VmlTextElement', 'goog.html.uncheckedconversions', 'goog.math', 'goog.math.Size', 'goog.string', 'goog.string.Const', 'goog.style'], false); goog.addDependency('history/event.js', ['goog.history.Event'], ['goog.events.Event', 'goog.history.EventType'], false); goog.addDependency('history/eventtype.js', ['goog.history.EventType'], [], false); goog.addDependency('history/history.js', ['goog.History', 'goog.History.Event', 'goog.History.EventType'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.safe', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.history.Event', 'goog.history.EventType', 'goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.legacyconversions', 'goog.labs.userAgent.device', 'goog.memoize', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false); goog.addDependency('history/history_test.js', ['goog.HistoryTest'], ['goog.History', 'goog.dispose', 'goog.dom', 'goog.html.TrustedResourceUrl', 'goog.string.Const', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('history/html5history.js', ['goog.history.Html5History', 'goog.history.Html5History.TokenTransformer'], ['goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.history.Event'], false); goog.addDependency('history/html5history_test.js', ['goog.history.Html5HistoryTest'], ['goog.Timer', 'goog.events', 'goog.events.EventType', 'goog.history.EventType', 'goog.history.Html5History', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.recordFunction'], false); goog.addDependency('html/flash.js', ['goog.html.flash'], ['goog.asserts', 'goog.html.SafeHtml'], false); goog.addDependency('html/flash_test.js', ['goog.html.flashTest'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/legacyconversions.js', ['goog.html.legacyconversions'], ['goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl'], false); goog.addDependency('html/legacyconversions_test.js', ['goog.html.legacyconversionsTest'], ['goog.html.SafeHtml', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.legacyconversions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('html/safehtml.js', ['goog.html.SafeHtml'], ['goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.tags', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.object', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false); goog.addDependency('html/safehtml_test.js', ['goog.html.safeHtmlTest'], ['goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.testing', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/safescript.js', ['goog.html.SafeScript'], ['goog.asserts', 'goog.string.Const', 'goog.string.TypedString'], false); goog.addDependency('html/safescript_test.js', ['goog.html.safeScriptTest'], ['goog.html.SafeScript', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/safestyle.js', ['goog.html.SafeStyle'], ['goog.array', 'goog.asserts', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false); goog.addDependency('html/safestyle_test.js', ['goog.html.safeStyleTest'], ['goog.html.SafeStyle', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/safestylesheet.js', ['goog.html.SafeStyleSheet'], ['goog.array', 'goog.asserts', 'goog.string', 'goog.string.Const', 'goog.string.TypedString'], false); goog.addDependency('html/safestylesheet_test.js', ['goog.html.safeStyleSheetTest'], ['goog.html.SafeStyleSheet', 'goog.string', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/safeurl.js', ['goog.html.SafeUrl'], ['goog.asserts', 'goog.fs.url', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.string.Const', 'goog.string.TypedString'], false); goog.addDependency('html/safeurl_test.js', ['goog.html.safeUrlTest'], ['goog.html.SafeUrl', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('html/silverlight.js', ['goog.html.silverlight'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.string.Const'], false); goog.addDependency('html/silverlight_test.js', ['goog.html.silverlightTest'], ['goog.html.SafeHtml', 'goog.html.TrustedResourceUrl', 'goog.html.silverlight', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/testing.js', ['goog.html.testing'], ['goog.html.SafeHtml', 'goog.html.SafeScript', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl'], false); goog.addDependency('html/trustedresourceurl.js', ['goog.html.TrustedResourceUrl'], ['goog.asserts', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.string.Const', 'goog.string.TypedString'], false); goog.addDependency('html/trustedresourceurl_test.js', ['goog.html.trustedResourceUrlTest'], ['goog.html.TrustedResourceUrl', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/uncheckedconversions.js', ['goog.html.uncheckedconversions'], ['goog.asserts', 'goog.html.SafeHtml', 'goog.html.SafeScript', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.string', 'goog.string.Const'], false); goog.addDependency('html/uncheckedconversions_test.js', ['goog.html.uncheckedconversionsTest'], ['goog.html.SafeHtml', 'goog.html.SafeScript', 'goog.html.SafeStyle', 'goog.html.SafeStyleSheet', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.uncheckedconversions', 'goog.i18n.bidi.Dir', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('html/utils.js', ['goog.html.utils'], ['goog.string'], false); goog.addDependency('html/utils_test.js', ['goog.html.UtilsTest'], ['goog.array', 'goog.dom.TagName', 'goog.html.utils', 'goog.object', 'goog.testing.jsunit'], false); goog.addDependency('i18n/bidi.js', ['goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.DirectionalString', 'goog.i18n.bidi.Format'], [], false); goog.addDependency('i18n/bidi_test.js', ['goog.i18n.bidiTest'], ['goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.testing.jsunit'], false); goog.addDependency('i18n/bidiformatter.js', ['goog.i18n.BidiFormatter'], ['goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.i18n.bidi', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.Format'], false); goog.addDependency('i18n/bidiformatter_test.js', ['goog.i18n.BidiFormatterTest'], ['goog.html.SafeHtml', 'goog.i18n.BidiFormatter', 'goog.i18n.bidi.Dir', 'goog.i18n.bidi.Format', 'goog.testing.jsunit'], false); goog.addDependency('i18n/charlistdecompressor.js', ['goog.i18n.CharListDecompressor'], ['goog.array', 'goog.i18n.uChar'], false); goog.addDependency('i18n/charlistdecompressor_test.js', ['goog.i18n.CharListDecompressorTest'], ['goog.i18n.CharListDecompressor', 'goog.testing.jsunit'], false); goog.addDependency('i18n/charpickerdata.js', ['goog.i18n.CharPickerData'], [], false); goog.addDependency('i18n/collation.js', ['goog.i18n.collation'], [], false); goog.addDependency('i18n/collation_test.js', ['goog.i18n.collationTest'], ['goog.i18n.collation', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('i18n/compactnumberformatsymbols.js', ['goog.i18n.CompactNumberFormatSymbols', 'goog.i18n.CompactNumberFormatSymbols_af', 'goog.i18n.CompactNumberFormatSymbols_af_ZA', 'goog.i18n.CompactNumberFormatSymbols_am', 'goog.i18n.CompactNumberFormatSymbols_am_ET', 'goog.i18n.CompactNumberFormatSymbols_ar', 'goog.i18n.CompactNumberFormatSymbols_ar_001', 'goog.i18n.CompactNumberFormatSymbols_ar_EG', 'goog.i18n.CompactNumberFormatSymbols_az', 'goog.i18n.CompactNumberFormatSymbols_az_Latn', 'goog.i18n.CompactNumberFormatSymbols_az_Latn_AZ', 'goog.i18n.CompactNumberFormatSymbols_be', 'goog.i18n.CompactNumberFormatSymbols_be_BY', 'goog.i18n.CompactNumberFormatSymbols_bg', 'goog.i18n.CompactNumberFormatSymbols_bg_BG', 'goog.i18n.CompactNumberFormatSymbols_bn', 'goog.i18n.CompactNumberFormatSymbols_bn_BD', 'goog.i18n.CompactNumberFormatSymbols_br', 'goog.i18n.CompactNumberFormatSymbols_br_FR', 'goog.i18n.CompactNumberFormatSymbols_bs', 'goog.i18n.CompactNumberFormatSymbols_bs_Latn', 'goog.i18n.CompactNumberFormatSymbols_bs_Latn_BA', 'goog.i18n.CompactNumberFormatSymbols_ca', 'goog.i18n.CompactNumberFormatSymbols_ca_AD', 'goog.i18n.CompactNumberFormatSymbols_ca_ES', 'goog.i18n.CompactNumberFormatSymbols_ca_ES_VALENCIA', 'goog.i18n.CompactNumberFormatSymbols_ca_FR', 'goog.i18n.CompactNumberFormatSymbols_ca_IT', 'goog.i18n.CompactNumberFormatSymbols_chr', 'goog.i18n.CompactNumberFormatSymbols_chr_US', 'goog.i18n.CompactNumberFormatSymbols_cs', 'goog.i18n.CompactNumberFormatSymbols_cs_CZ', 'goog.i18n.CompactNumberFormatSymbols_cy', 'goog.i18n.CompactNumberFormatSymbols_cy_GB', 'goog.i18n.CompactNumberFormatSymbols_da', 'goog.i18n.CompactNumberFormatSymbols_da_DK', 'goog.i18n.CompactNumberFormatSymbols_da_GL', 'goog.i18n.CompactNumberFormatSymbols_de', 'goog.i18n.CompactNumberFormatSymbols_de_AT', 'goog.i18n.CompactNumberFormatSymbols_de_BE', 'goog.i18n.CompactNumberFormatSymbols_de_CH', 'goog.i18n.CompactNumberFormatSymbols_de_DE', 'goog.i18n.CompactNumberFormatSymbols_de_LU', 'goog.i18n.CompactNumberFormatSymbols_el', 'goog.i18n.CompactNumberFormatSymbols_el_CY', 'goog.i18n.CompactNumberFormatSymbols_el_GR', 'goog.i18n.CompactNumberFormatSymbols_en', 'goog.i18n.CompactNumberFormatSymbols_en_001', 'goog.i18n.CompactNumberFormatSymbols_en_AS', 'goog.i18n.CompactNumberFormatSymbols_en_AU', 'goog.i18n.CompactNumberFormatSymbols_en_CA', 'goog.i18n.CompactNumberFormatSymbols_en_DG', 'goog.i18n.CompactNumberFormatSymbols_en_FM', 'goog.i18n.CompactNumberFormatSymbols_en_GB', 'goog.i18n.CompactNumberFormatSymbols_en_GU', 'goog.i18n.CompactNumberFormatSymbols_en_IE', 'goog.i18n.CompactNumberFormatSymbols_en_IN', 'goog.i18n.CompactNumberFormatSymbols_en_IO', 'goog.i18n.CompactNumberFormatSymbols_en_MH', 'goog.i18n.CompactNumberFormatSymbols_en_MP', 'goog.i18n.CompactNumberFormatSymbols_en_PR', 'goog.i18n.CompactNumberFormatSymbols_en_PW', 'goog.i18n.CompactNumberFormatSymbols_en_SG', 'goog.i18n.CompactNumberFormatSymbols_en_TC', 'goog.i18n.CompactNumberFormatSymbols_en_UM', 'goog.i18n.CompactNumberFormatSymbols_en_US', 'goog.i18n.CompactNumberFormatSymbols_en_VG', 'goog.i18n.CompactNumberFormatSymbols_en_VI', 'goog.i18n.CompactNumberFormatSymbols_en_ZA', 'goog.i18n.CompactNumberFormatSymbols_en_ZW', 'goog.i18n.CompactNumberFormatSymbols_es', 'goog.i18n.CompactNumberFormatSymbols_es_419', 'goog.i18n.CompactNumberFormatSymbols_es_EA', 'goog.i18n.CompactNumberFormatSymbols_es_ES', 'goog.i18n.CompactNumberFormatSymbols_es_IC', 'goog.i18n.CompactNumberFormatSymbols_es_MX', 'goog.i18n.CompactNumberFormatSymbols_es_US', 'goog.i18n.CompactNumberFormatSymbols_et', 'goog.i18n.CompactNumberFormatSymbols_et_EE', 'goog.i18n.CompactNumberFormatSymbols_eu', 'goog.i18n.CompactNumberFormatSymbols_eu_ES', 'goog.i18n.CompactNumberFormatSymbols_fa', 'goog.i18n.CompactNumberFormatSymbols_fa_IR', 'goog.i18n.CompactNumberFormatSymbols_fi', 'goog.i18n.CompactNumberFormatSymbols_fi_FI', 'goog.i18n.CompactNumberFormatSymbols_fil', 'goog.i18n.CompactNumberFormatSymbols_fil_PH', 'goog.i18n.CompactNumberFormatSymbols_fr', 'goog.i18n.CompactNumberFormatSymbols_fr_BL', 'goog.i18n.CompactNumberFormatSymbols_fr_CA', 'goog.i18n.CompactNumberFormatSymbols_fr_FR', 'goog.i18n.CompactNumberFormatSymbols_fr_GF', 'goog.i18n.CompactNumberFormatSymbols_fr_GP', 'goog.i18n.CompactNumberFormatSymbols_fr_MC', 'goog.i18n.CompactNumberFormatSymbols_fr_MF', 'goog.i18n.CompactNumberFormatSymbols_fr_MQ', 'goog.i18n.CompactNumberFormatSymbols_fr_PM', 'goog.i18n.CompactNumberFormatSymbols_fr_RE', 'goog.i18n.CompactNumberFormatSymbols_fr_YT', 'goog.i18n.CompactNumberFormatSymbols_ga', 'goog.i18n.CompactNumberFormatSymbols_ga_IE', 'goog.i18n.CompactNumberFormatSymbols_gl', 'goog.i18n.CompactNumberFormatSymbols_gl_ES', 'goog.i18n.CompactNumberFormatSymbols_gsw', 'goog.i18n.CompactNumberFormatSymbols_gsw_CH', 'goog.i18n.CompactNumberFormatSymbols_gsw_LI', 'goog.i18n.CompactNumberFormatSymbols_gu', 'goog.i18n.CompactNumberFormatSymbols_gu_IN', 'goog.i18n.CompactNumberFormatSymbols_haw', 'goog.i18n.CompactNumberFormatSymbols_haw_US', 'goog.i18n.CompactNumberFormatSymbols_he', 'goog.i18n.CompactNumberFormatSymbols_he_IL', 'goog.i18n.CompactNumberFormatSymbols_hi', 'goog.i18n.CompactNumberFormatSymbols_hi_IN', 'goog.i18n.CompactNumberFormatSymbols_hr', 'goog.i18n.CompactNumberFormatSymbols_hr_HR', 'goog.i18n.CompactNumberFormatSymbols_hu', 'goog.i18n.CompactNumberFormatSymbols_hu_HU', 'goog.i18n.CompactNumberFormatSymbols_hy', 'goog.i18n.CompactNumberFormatSymbols_hy_AM', 'goog.i18n.CompactNumberFormatSymbols_id', 'goog.i18n.CompactNumberFormatSymbols_id_ID', 'goog.i18n.CompactNumberFormatSymbols_in', 'goog.i18n.CompactNumberFormatSymbols_is', 'goog.i18n.CompactNumberFormatSymbols_is_IS', 'goog.i18n.CompactNumberFormatSymbols_it', 'goog.i18n.CompactNumberFormatSymbols_it_IT', 'goog.i18n.CompactNumberFormatSymbols_it_SM', 'goog.i18n.CompactNumberFormatSymbols_iw', 'goog.i18n.CompactNumberFormatSymbols_ja', 'goog.i18n.CompactNumberFormatSymbols_ja_JP', 'goog.i18n.CompactNumberFormatSymbols_ka', 'goog.i18n.CompactNumberFormatSymbols_ka_GE', 'goog.i18n.CompactNumberFormatSymbols_kk', 'goog.i18n.CompactNumberFormatSymbols_kk_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_kk_Cyrl_KZ', 'goog.i18n.CompactNumberFormatSymbols_km', 'goog.i18n.CompactNumberFormatSymbols_km_KH', 'goog.i18n.CompactNumberFormatSymbols_kn', 'goog.i18n.CompactNumberFormatSymbols_kn_IN', 'goog.i18n.CompactNumberFormatSymbols_ko', 'goog.i18n.CompactNumberFormatSymbols_ko_KR', 'goog.i18n.CompactNumberFormatSymbols_ky', 'goog.i18n.CompactNumberFormatSymbols_ky_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_ky_Cyrl_KG', 'goog.i18n.CompactNumberFormatSymbols_ln', 'goog.i18n.CompactNumberFormatSymbols_ln_CD', 'goog.i18n.CompactNumberFormatSymbols_lo', 'goog.i18n.CompactNumberFormatSymbols_lo_LA', 'goog.i18n.CompactNumberFormatSymbols_lt', 'goog.i18n.CompactNumberFormatSymbols_lt_LT', 'goog.i18n.CompactNumberFormatSymbols_lv', 'goog.i18n.CompactNumberFormatSymbols_lv_LV', 'goog.i18n.CompactNumberFormatSymbols_mk', 'goog.i18n.CompactNumberFormatSymbols_mk_MK', 'goog.i18n.CompactNumberFormatSymbols_ml', 'goog.i18n.CompactNumberFormatSymbols_ml_IN', 'goog.i18n.CompactNumberFormatSymbols_mn', 'goog.i18n.CompactNumberFormatSymbols_mn_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_mn_Cyrl_MN', 'goog.i18n.CompactNumberFormatSymbols_mr', 'goog.i18n.CompactNumberFormatSymbols_mr_IN', 'goog.i18n.CompactNumberFormatSymbols_ms', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn_MY', 'goog.i18n.CompactNumberFormatSymbols_mt', 'goog.i18n.CompactNumberFormatSymbols_mt_MT', 'goog.i18n.CompactNumberFormatSymbols_my', 'goog.i18n.CompactNumberFormatSymbols_my_MM', 'goog.i18n.CompactNumberFormatSymbols_nb', 'goog.i18n.CompactNumberFormatSymbols_nb_NO', 'goog.i18n.CompactNumberFormatSymbols_nb_SJ', 'goog.i18n.CompactNumberFormatSymbols_ne', 'goog.i18n.CompactNumberFormatSymbols_ne_NP', 'goog.i18n.CompactNumberFormatSymbols_nl', 'goog.i18n.CompactNumberFormatSymbols_nl_NL', 'goog.i18n.CompactNumberFormatSymbols_no', 'goog.i18n.CompactNumberFormatSymbols_no_NO', 'goog.i18n.CompactNumberFormatSymbols_or', 'goog.i18n.CompactNumberFormatSymbols_or_IN', 'goog.i18n.CompactNumberFormatSymbols_pa', 'goog.i18n.CompactNumberFormatSymbols_pa_Guru', 'goog.i18n.CompactNumberFormatSymbols_pa_Guru_IN', 'goog.i18n.CompactNumberFormatSymbols_pl', 'goog.i18n.CompactNumberFormatSymbols_pl_PL', 'goog.i18n.CompactNumberFormatSymbols_pt', 'goog.i18n.CompactNumberFormatSymbols_pt_BR', 'goog.i18n.CompactNumberFormatSymbols_pt_PT', 'goog.i18n.CompactNumberFormatSymbols_ro', 'goog.i18n.CompactNumberFormatSymbols_ro_RO', 'goog.i18n.CompactNumberFormatSymbols_ru', 'goog.i18n.CompactNumberFormatSymbols_ru_RU', 'goog.i18n.CompactNumberFormatSymbols_si', 'goog.i18n.CompactNumberFormatSymbols_si_LK', 'goog.i18n.CompactNumberFormatSymbols_sk', 'goog.i18n.CompactNumberFormatSymbols_sk_SK', 'goog.i18n.CompactNumberFormatSymbols_sl', 'goog.i18n.CompactNumberFormatSymbols_sl_SI', 'goog.i18n.CompactNumberFormatSymbols_sq', 'goog.i18n.CompactNumberFormatSymbols_sq_AL', 'goog.i18n.CompactNumberFormatSymbols_sr', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_RS', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_RS', 'goog.i18n.CompactNumberFormatSymbols_sv', 'goog.i18n.CompactNumberFormatSymbols_sv_SE', 'goog.i18n.CompactNumberFormatSymbols_sw', 'goog.i18n.CompactNumberFormatSymbols_sw_TZ', 'goog.i18n.CompactNumberFormatSymbols_ta', 'goog.i18n.CompactNumberFormatSymbols_ta_IN', 'goog.i18n.CompactNumberFormatSymbols_te', 'goog.i18n.CompactNumberFormatSymbols_te_IN', 'goog.i18n.CompactNumberFormatSymbols_th', 'goog.i18n.CompactNumberFormatSymbols_th_TH', 'goog.i18n.CompactNumberFormatSymbols_tl', 'goog.i18n.CompactNumberFormatSymbols_tr', 'goog.i18n.CompactNumberFormatSymbols_tr_TR', 'goog.i18n.CompactNumberFormatSymbols_uk', 'goog.i18n.CompactNumberFormatSymbols_uk_UA', 'goog.i18n.CompactNumberFormatSymbols_ur', 'goog.i18n.CompactNumberFormatSymbols_ur_PK', 'goog.i18n.CompactNumberFormatSymbols_uz', 'goog.i18n.CompactNumberFormatSymbols_uz_Latn', 'goog.i18n.CompactNumberFormatSymbols_uz_Latn_UZ', 'goog.i18n.CompactNumberFormatSymbols_vi', 'goog.i18n.CompactNumberFormatSymbols_vi_VN', 'goog.i18n.CompactNumberFormatSymbols_zh', 'goog.i18n.CompactNumberFormatSymbols_zh_CN', 'goog.i18n.CompactNumberFormatSymbols_zh_HK', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_CN', 'goog.i18n.CompactNumberFormatSymbols_zh_TW', 'goog.i18n.CompactNumberFormatSymbols_zu', 'goog.i18n.CompactNumberFormatSymbols_zu_ZA'], [], false); goog.addDependency('i18n/compactnumberformatsymbols_ext.js', ['goog.i18n.CompactNumberFormatSymbolsExt', 'goog.i18n.CompactNumberFormatSymbols_af_NA', 'goog.i18n.CompactNumberFormatSymbols_agq', 'goog.i18n.CompactNumberFormatSymbols_agq_CM', 'goog.i18n.CompactNumberFormatSymbols_ak', 'goog.i18n.CompactNumberFormatSymbols_ak_GH', 'goog.i18n.CompactNumberFormatSymbols_ar_AE', 'goog.i18n.CompactNumberFormatSymbols_ar_BH', 'goog.i18n.CompactNumberFormatSymbols_ar_DJ', 'goog.i18n.CompactNumberFormatSymbols_ar_DZ', 'goog.i18n.CompactNumberFormatSymbols_ar_EH', 'goog.i18n.CompactNumberFormatSymbols_ar_ER', 'goog.i18n.CompactNumberFormatSymbols_ar_IL', 'goog.i18n.CompactNumberFormatSymbols_ar_IQ', 'goog.i18n.CompactNumberFormatSymbols_ar_JO', 'goog.i18n.CompactNumberFormatSymbols_ar_KM', 'goog.i18n.CompactNumberFormatSymbols_ar_KW', 'goog.i18n.CompactNumberFormatSymbols_ar_LB', 'goog.i18n.CompactNumberFormatSymbols_ar_LY', 'goog.i18n.CompactNumberFormatSymbols_ar_MA', 'goog.i18n.CompactNumberFormatSymbols_ar_MR', 'goog.i18n.CompactNumberFormatSymbols_ar_OM', 'goog.i18n.CompactNumberFormatSymbols_ar_PS', 'goog.i18n.CompactNumberFormatSymbols_ar_QA', 'goog.i18n.CompactNumberFormatSymbols_ar_SA', 'goog.i18n.CompactNumberFormatSymbols_ar_SD', 'goog.i18n.CompactNumberFormatSymbols_ar_SO', 'goog.i18n.CompactNumberFormatSymbols_ar_SS', 'goog.i18n.CompactNumberFormatSymbols_ar_SY', 'goog.i18n.CompactNumberFormatSymbols_ar_TD', 'goog.i18n.CompactNumberFormatSymbols_ar_TN', 'goog.i18n.CompactNumberFormatSymbols_ar_YE', 'goog.i18n.CompactNumberFormatSymbols_as', 'goog.i18n.CompactNumberFormatSymbols_as_IN', 'goog.i18n.CompactNumberFormatSymbols_asa', 'goog.i18n.CompactNumberFormatSymbols_asa_TZ', 'goog.i18n.CompactNumberFormatSymbols_ast', 'goog.i18n.CompactNumberFormatSymbols_ast_ES', 'goog.i18n.CompactNumberFormatSymbols_az_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_az_Cyrl_AZ', 'goog.i18n.CompactNumberFormatSymbols_bas', 'goog.i18n.CompactNumberFormatSymbols_bas_CM', 'goog.i18n.CompactNumberFormatSymbols_bem', 'goog.i18n.CompactNumberFormatSymbols_bem_ZM', 'goog.i18n.CompactNumberFormatSymbols_bez', 'goog.i18n.CompactNumberFormatSymbols_bez_TZ', 'goog.i18n.CompactNumberFormatSymbols_bm', 'goog.i18n.CompactNumberFormatSymbols_bm_Latn', 'goog.i18n.CompactNumberFormatSymbols_bm_Latn_ML', 'goog.i18n.CompactNumberFormatSymbols_bn_IN', 'goog.i18n.CompactNumberFormatSymbols_bo', 'goog.i18n.CompactNumberFormatSymbols_bo_CN', 'goog.i18n.CompactNumberFormatSymbols_bo_IN', 'goog.i18n.CompactNumberFormatSymbols_brx', 'goog.i18n.CompactNumberFormatSymbols_brx_IN', 'goog.i18n.CompactNumberFormatSymbols_bs_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_bs_Cyrl_BA', 'goog.i18n.CompactNumberFormatSymbols_cgg', 'goog.i18n.CompactNumberFormatSymbols_cgg_UG', 'goog.i18n.CompactNumberFormatSymbols_ckb', 'goog.i18n.CompactNumberFormatSymbols_ckb_Arab', 'goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IQ', 'goog.i18n.CompactNumberFormatSymbols_ckb_Arab_IR', 'goog.i18n.CompactNumberFormatSymbols_ckb_IQ', 'goog.i18n.CompactNumberFormatSymbols_ckb_IR', 'goog.i18n.CompactNumberFormatSymbols_ckb_Latn', 'goog.i18n.CompactNumberFormatSymbols_ckb_Latn_IQ', 'goog.i18n.CompactNumberFormatSymbols_dav', 'goog.i18n.CompactNumberFormatSymbols_dav_KE', 'goog.i18n.CompactNumberFormatSymbols_de_LI', 'goog.i18n.CompactNumberFormatSymbols_dje', 'goog.i18n.CompactNumberFormatSymbols_dje_NE', 'goog.i18n.CompactNumberFormatSymbols_dsb', 'goog.i18n.CompactNumberFormatSymbols_dsb_DE', 'goog.i18n.CompactNumberFormatSymbols_dua', 'goog.i18n.CompactNumberFormatSymbols_dua_CM', 'goog.i18n.CompactNumberFormatSymbols_dyo', 'goog.i18n.CompactNumberFormatSymbols_dyo_SN', 'goog.i18n.CompactNumberFormatSymbols_dz', 'goog.i18n.CompactNumberFormatSymbols_dz_BT', 'goog.i18n.CompactNumberFormatSymbols_ebu', 'goog.i18n.CompactNumberFormatSymbols_ebu_KE', 'goog.i18n.CompactNumberFormatSymbols_ee', 'goog.i18n.CompactNumberFormatSymbols_ee_GH', 'goog.i18n.CompactNumberFormatSymbols_ee_TG', 'goog.i18n.CompactNumberFormatSymbols_en_150', 'goog.i18n.CompactNumberFormatSymbols_en_AG', 'goog.i18n.CompactNumberFormatSymbols_en_AI', 'goog.i18n.CompactNumberFormatSymbols_en_BB', 'goog.i18n.CompactNumberFormatSymbols_en_BE', 'goog.i18n.CompactNumberFormatSymbols_en_BM', 'goog.i18n.CompactNumberFormatSymbols_en_BS', 'goog.i18n.CompactNumberFormatSymbols_en_BW', 'goog.i18n.CompactNumberFormatSymbols_en_BZ', 'goog.i18n.CompactNumberFormatSymbols_en_CC', 'goog.i18n.CompactNumberFormatSymbols_en_CK', 'goog.i18n.CompactNumberFormatSymbols_en_CM', 'goog.i18n.CompactNumberFormatSymbols_en_CX', 'goog.i18n.CompactNumberFormatSymbols_en_DM', 'goog.i18n.CompactNumberFormatSymbols_en_ER', 'goog.i18n.CompactNumberFormatSymbols_en_FJ', 'goog.i18n.CompactNumberFormatSymbols_en_FK', 'goog.i18n.CompactNumberFormatSymbols_en_GD', 'goog.i18n.CompactNumberFormatSymbols_en_GG', 'goog.i18n.CompactNumberFormatSymbols_en_GH', 'goog.i18n.CompactNumberFormatSymbols_en_GI', 'goog.i18n.CompactNumberFormatSymbols_en_GM', 'goog.i18n.CompactNumberFormatSymbols_en_GY', 'goog.i18n.CompactNumberFormatSymbols_en_HK', 'goog.i18n.CompactNumberFormatSymbols_en_IM', 'goog.i18n.CompactNumberFormatSymbols_en_JE', 'goog.i18n.CompactNumberFormatSymbols_en_JM', 'goog.i18n.CompactNumberFormatSymbols_en_KE', 'goog.i18n.CompactNumberFormatSymbols_en_KI', 'goog.i18n.CompactNumberFormatSymbols_en_KN', 'goog.i18n.CompactNumberFormatSymbols_en_KY', 'goog.i18n.CompactNumberFormatSymbols_en_LC', 'goog.i18n.CompactNumberFormatSymbols_en_LR', 'goog.i18n.CompactNumberFormatSymbols_en_LS', 'goog.i18n.CompactNumberFormatSymbols_en_MG', 'goog.i18n.CompactNumberFormatSymbols_en_MO', 'goog.i18n.CompactNumberFormatSymbols_en_MS', 'goog.i18n.CompactNumberFormatSymbols_en_MT', 'goog.i18n.CompactNumberFormatSymbols_en_MU', 'goog.i18n.CompactNumberFormatSymbols_en_MW', 'goog.i18n.CompactNumberFormatSymbols_en_MY', 'goog.i18n.CompactNumberFormatSymbols_en_NA', 'goog.i18n.CompactNumberFormatSymbols_en_NF', 'goog.i18n.CompactNumberFormatSymbols_en_NG', 'goog.i18n.CompactNumberFormatSymbols_en_NR', 'goog.i18n.CompactNumberFormatSymbols_en_NU', 'goog.i18n.CompactNumberFormatSymbols_en_NZ', 'goog.i18n.CompactNumberFormatSymbols_en_PG', 'goog.i18n.CompactNumberFormatSymbols_en_PH', 'goog.i18n.CompactNumberFormatSymbols_en_PK', 'goog.i18n.CompactNumberFormatSymbols_en_PN', 'goog.i18n.CompactNumberFormatSymbols_en_RW', 'goog.i18n.CompactNumberFormatSymbols_en_SB', 'goog.i18n.CompactNumberFormatSymbols_en_SC', 'goog.i18n.CompactNumberFormatSymbols_en_SD', 'goog.i18n.CompactNumberFormatSymbols_en_SH', 'goog.i18n.CompactNumberFormatSymbols_en_SL', 'goog.i18n.CompactNumberFormatSymbols_en_SS', 'goog.i18n.CompactNumberFormatSymbols_en_SX', 'goog.i18n.CompactNumberFormatSymbols_en_SZ', 'goog.i18n.CompactNumberFormatSymbols_en_TK', 'goog.i18n.CompactNumberFormatSymbols_en_TO', 'goog.i18n.CompactNumberFormatSymbols_en_TT', 'goog.i18n.CompactNumberFormatSymbols_en_TV', 'goog.i18n.CompactNumberFormatSymbols_en_TZ', 'goog.i18n.CompactNumberFormatSymbols_en_UG', 'goog.i18n.CompactNumberFormatSymbols_en_VC', 'goog.i18n.CompactNumberFormatSymbols_en_VU', 'goog.i18n.CompactNumberFormatSymbols_en_WS', 'goog.i18n.CompactNumberFormatSymbols_en_ZM', 'goog.i18n.CompactNumberFormatSymbols_eo', 'goog.i18n.CompactNumberFormatSymbols_eo_001', 'goog.i18n.CompactNumberFormatSymbols_es_AR', 'goog.i18n.CompactNumberFormatSymbols_es_BO', 'goog.i18n.CompactNumberFormatSymbols_es_CL', 'goog.i18n.CompactNumberFormatSymbols_es_CO', 'goog.i18n.CompactNumberFormatSymbols_es_CR', 'goog.i18n.CompactNumberFormatSymbols_es_CU', 'goog.i18n.CompactNumberFormatSymbols_es_DO', 'goog.i18n.CompactNumberFormatSymbols_es_EC', 'goog.i18n.CompactNumberFormatSymbols_es_GQ', 'goog.i18n.CompactNumberFormatSymbols_es_GT', 'goog.i18n.CompactNumberFormatSymbols_es_HN', 'goog.i18n.CompactNumberFormatSymbols_es_NI', 'goog.i18n.CompactNumberFormatSymbols_es_PA', 'goog.i18n.CompactNumberFormatSymbols_es_PE', 'goog.i18n.CompactNumberFormatSymbols_es_PH', 'goog.i18n.CompactNumberFormatSymbols_es_PR', 'goog.i18n.CompactNumberFormatSymbols_es_PY', 'goog.i18n.CompactNumberFormatSymbols_es_SV', 'goog.i18n.CompactNumberFormatSymbols_es_UY', 'goog.i18n.CompactNumberFormatSymbols_es_VE', 'goog.i18n.CompactNumberFormatSymbols_ewo', 'goog.i18n.CompactNumberFormatSymbols_ewo_CM', 'goog.i18n.CompactNumberFormatSymbols_fa_AF', 'goog.i18n.CompactNumberFormatSymbols_ff', 'goog.i18n.CompactNumberFormatSymbols_ff_CM', 'goog.i18n.CompactNumberFormatSymbols_ff_GN', 'goog.i18n.CompactNumberFormatSymbols_ff_MR', 'goog.i18n.CompactNumberFormatSymbols_ff_SN', 'goog.i18n.CompactNumberFormatSymbols_fo', 'goog.i18n.CompactNumberFormatSymbols_fo_FO', 'goog.i18n.CompactNumberFormatSymbols_fr_BE', 'goog.i18n.CompactNumberFormatSymbols_fr_BF', 'goog.i18n.CompactNumberFormatSymbols_fr_BI', 'goog.i18n.CompactNumberFormatSymbols_fr_BJ', 'goog.i18n.CompactNumberFormatSymbols_fr_CD', 'goog.i18n.CompactNumberFormatSymbols_fr_CF', 'goog.i18n.CompactNumberFormatSymbols_fr_CG', 'goog.i18n.CompactNumberFormatSymbols_fr_CH', 'goog.i18n.CompactNumberFormatSymbols_fr_CI', 'goog.i18n.CompactNumberFormatSymbols_fr_CM', 'goog.i18n.CompactNumberFormatSymbols_fr_DJ', 'goog.i18n.CompactNumberFormatSymbols_fr_DZ', 'goog.i18n.CompactNumberFormatSymbols_fr_GA', 'goog.i18n.CompactNumberFormatSymbols_fr_GN', 'goog.i18n.CompactNumberFormatSymbols_fr_GQ', 'goog.i18n.CompactNumberFormatSymbols_fr_HT', 'goog.i18n.CompactNumberFormatSymbols_fr_KM', 'goog.i18n.CompactNumberFormatSymbols_fr_LU', 'goog.i18n.CompactNumberFormatSymbols_fr_MA', 'goog.i18n.CompactNumberFormatSymbols_fr_MG', 'goog.i18n.CompactNumberFormatSymbols_fr_ML', 'goog.i18n.CompactNumberFormatSymbols_fr_MR', 'goog.i18n.CompactNumberFormatSymbols_fr_MU', 'goog.i18n.CompactNumberFormatSymbols_fr_NC', 'goog.i18n.CompactNumberFormatSymbols_fr_NE', 'goog.i18n.CompactNumberFormatSymbols_fr_PF', 'goog.i18n.CompactNumberFormatSymbols_fr_RW', 'goog.i18n.CompactNumberFormatSymbols_fr_SC', 'goog.i18n.CompactNumberFormatSymbols_fr_SN', 'goog.i18n.CompactNumberFormatSymbols_fr_SY', 'goog.i18n.CompactNumberFormatSymbols_fr_TD', 'goog.i18n.CompactNumberFormatSymbols_fr_TG', 'goog.i18n.CompactNumberFormatSymbols_fr_TN', 'goog.i18n.CompactNumberFormatSymbols_fr_VU', 'goog.i18n.CompactNumberFormatSymbols_fr_WF', 'goog.i18n.CompactNumberFormatSymbols_fur', 'goog.i18n.CompactNumberFormatSymbols_fur_IT', 'goog.i18n.CompactNumberFormatSymbols_fy', 'goog.i18n.CompactNumberFormatSymbols_fy_NL', 'goog.i18n.CompactNumberFormatSymbols_gd', 'goog.i18n.CompactNumberFormatSymbols_gd_GB', 'goog.i18n.CompactNumberFormatSymbols_gsw_FR', 'goog.i18n.CompactNumberFormatSymbols_guz', 'goog.i18n.CompactNumberFormatSymbols_guz_KE', 'goog.i18n.CompactNumberFormatSymbols_gv', 'goog.i18n.CompactNumberFormatSymbols_gv_IM', 'goog.i18n.CompactNumberFormatSymbols_ha', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn_GH', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn_NE', 'goog.i18n.CompactNumberFormatSymbols_ha_Latn_NG', 'goog.i18n.CompactNumberFormatSymbols_hr_BA', 'goog.i18n.CompactNumberFormatSymbols_hsb', 'goog.i18n.CompactNumberFormatSymbols_hsb_DE', 'goog.i18n.CompactNumberFormatSymbols_ig', 'goog.i18n.CompactNumberFormatSymbols_ig_NG', 'goog.i18n.CompactNumberFormatSymbols_ii', 'goog.i18n.CompactNumberFormatSymbols_ii_CN', 'goog.i18n.CompactNumberFormatSymbols_it_CH', 'goog.i18n.CompactNumberFormatSymbols_jgo', 'goog.i18n.CompactNumberFormatSymbols_jgo_CM', 'goog.i18n.CompactNumberFormatSymbols_jmc', 'goog.i18n.CompactNumberFormatSymbols_jmc_TZ', 'goog.i18n.CompactNumberFormatSymbols_kab', 'goog.i18n.CompactNumberFormatSymbols_kab_DZ', 'goog.i18n.CompactNumberFormatSymbols_kam', 'goog.i18n.CompactNumberFormatSymbols_kam_KE', 'goog.i18n.CompactNumberFormatSymbols_kde', 'goog.i18n.CompactNumberFormatSymbols_kde_TZ', 'goog.i18n.CompactNumberFormatSymbols_kea', 'goog.i18n.CompactNumberFormatSymbols_kea_CV', 'goog.i18n.CompactNumberFormatSymbols_khq', 'goog.i18n.CompactNumberFormatSymbols_khq_ML', 'goog.i18n.CompactNumberFormatSymbols_ki', 'goog.i18n.CompactNumberFormatSymbols_ki_KE', 'goog.i18n.CompactNumberFormatSymbols_kkj', 'goog.i18n.CompactNumberFormatSymbols_kkj_CM', 'goog.i18n.CompactNumberFormatSymbols_kl', 'goog.i18n.CompactNumberFormatSymbols_kl_GL', 'goog.i18n.CompactNumberFormatSymbols_kln', 'goog.i18n.CompactNumberFormatSymbols_kln_KE', 'goog.i18n.CompactNumberFormatSymbols_ko_KP', 'goog.i18n.CompactNumberFormatSymbols_kok', 'goog.i18n.CompactNumberFormatSymbols_kok_IN', 'goog.i18n.CompactNumberFormatSymbols_ks', 'goog.i18n.CompactNumberFormatSymbols_ks_Arab', 'goog.i18n.CompactNumberFormatSymbols_ks_Arab_IN', 'goog.i18n.CompactNumberFormatSymbols_ksb', 'goog.i18n.CompactNumberFormatSymbols_ksb_TZ', 'goog.i18n.CompactNumberFormatSymbols_ksf', 'goog.i18n.CompactNumberFormatSymbols_ksf_CM', 'goog.i18n.CompactNumberFormatSymbols_ksh', 'goog.i18n.CompactNumberFormatSymbols_ksh_DE', 'goog.i18n.CompactNumberFormatSymbols_kw', 'goog.i18n.CompactNumberFormatSymbols_kw_GB', 'goog.i18n.CompactNumberFormatSymbols_lag', 'goog.i18n.CompactNumberFormatSymbols_lag_TZ', 'goog.i18n.CompactNumberFormatSymbols_lb', 'goog.i18n.CompactNumberFormatSymbols_lb_LU', 'goog.i18n.CompactNumberFormatSymbols_lg', 'goog.i18n.CompactNumberFormatSymbols_lg_UG', 'goog.i18n.CompactNumberFormatSymbols_lkt', 'goog.i18n.CompactNumberFormatSymbols_lkt_US', 'goog.i18n.CompactNumberFormatSymbols_ln_AO', 'goog.i18n.CompactNumberFormatSymbols_ln_CF', 'goog.i18n.CompactNumberFormatSymbols_ln_CG', 'goog.i18n.CompactNumberFormatSymbols_lu', 'goog.i18n.CompactNumberFormatSymbols_lu_CD', 'goog.i18n.CompactNumberFormatSymbols_luo', 'goog.i18n.CompactNumberFormatSymbols_luo_KE', 'goog.i18n.CompactNumberFormatSymbols_luy', 'goog.i18n.CompactNumberFormatSymbols_luy_KE', 'goog.i18n.CompactNumberFormatSymbols_mas', 'goog.i18n.CompactNumberFormatSymbols_mas_KE', 'goog.i18n.CompactNumberFormatSymbols_mas_TZ', 'goog.i18n.CompactNumberFormatSymbols_mer', 'goog.i18n.CompactNumberFormatSymbols_mer_KE', 'goog.i18n.CompactNumberFormatSymbols_mfe', 'goog.i18n.CompactNumberFormatSymbols_mfe_MU', 'goog.i18n.CompactNumberFormatSymbols_mg', 'goog.i18n.CompactNumberFormatSymbols_mg_MG', 'goog.i18n.CompactNumberFormatSymbols_mgh', 'goog.i18n.CompactNumberFormatSymbols_mgh_MZ', 'goog.i18n.CompactNumberFormatSymbols_mgo', 'goog.i18n.CompactNumberFormatSymbols_mgo_CM', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn_BN', 'goog.i18n.CompactNumberFormatSymbols_ms_Latn_SG', 'goog.i18n.CompactNumberFormatSymbols_mua', 'goog.i18n.CompactNumberFormatSymbols_mua_CM', 'goog.i18n.CompactNumberFormatSymbols_naq', 'goog.i18n.CompactNumberFormatSymbols_naq_NA', 'goog.i18n.CompactNumberFormatSymbols_nd', 'goog.i18n.CompactNumberFormatSymbols_nd_ZW', 'goog.i18n.CompactNumberFormatSymbols_ne_IN', 'goog.i18n.CompactNumberFormatSymbols_nl_AW', 'goog.i18n.CompactNumberFormatSymbols_nl_BE', 'goog.i18n.CompactNumberFormatSymbols_nl_BQ', 'goog.i18n.CompactNumberFormatSymbols_nl_CW', 'goog.i18n.CompactNumberFormatSymbols_nl_SR', 'goog.i18n.CompactNumberFormatSymbols_nl_SX', 'goog.i18n.CompactNumberFormatSymbols_nmg', 'goog.i18n.CompactNumberFormatSymbols_nmg_CM', 'goog.i18n.CompactNumberFormatSymbols_nn', 'goog.i18n.CompactNumberFormatSymbols_nn_NO', 'goog.i18n.CompactNumberFormatSymbols_nnh', 'goog.i18n.CompactNumberFormatSymbols_nnh_CM', 'goog.i18n.CompactNumberFormatSymbols_nus', 'goog.i18n.CompactNumberFormatSymbols_nus_SD', 'goog.i18n.CompactNumberFormatSymbols_nyn', 'goog.i18n.CompactNumberFormatSymbols_nyn_UG', 'goog.i18n.CompactNumberFormatSymbols_om', 'goog.i18n.CompactNumberFormatSymbols_om_ET', 'goog.i18n.CompactNumberFormatSymbols_om_KE', 'goog.i18n.CompactNumberFormatSymbols_os', 'goog.i18n.CompactNumberFormatSymbols_os_GE', 'goog.i18n.CompactNumberFormatSymbols_os_RU', 'goog.i18n.CompactNumberFormatSymbols_pa_Arab', 'goog.i18n.CompactNumberFormatSymbols_pa_Arab_PK', 'goog.i18n.CompactNumberFormatSymbols_ps', 'goog.i18n.CompactNumberFormatSymbols_ps_AF', 'goog.i18n.CompactNumberFormatSymbols_pt_AO', 'goog.i18n.CompactNumberFormatSymbols_pt_CV', 'goog.i18n.CompactNumberFormatSymbols_pt_GW', 'goog.i18n.CompactNumberFormatSymbols_pt_MO', 'goog.i18n.CompactNumberFormatSymbols_pt_MZ', 'goog.i18n.CompactNumberFormatSymbols_pt_ST', 'goog.i18n.CompactNumberFormatSymbols_pt_TL', 'goog.i18n.CompactNumberFormatSymbols_qu', 'goog.i18n.CompactNumberFormatSymbols_qu_BO', 'goog.i18n.CompactNumberFormatSymbols_qu_EC', 'goog.i18n.CompactNumberFormatSymbols_qu_PE', 'goog.i18n.CompactNumberFormatSymbols_rm', 'goog.i18n.CompactNumberFormatSymbols_rm_CH', 'goog.i18n.CompactNumberFormatSymbols_rn', 'goog.i18n.CompactNumberFormatSymbols_rn_BI', 'goog.i18n.CompactNumberFormatSymbols_ro_MD', 'goog.i18n.CompactNumberFormatSymbols_rof', 'goog.i18n.CompactNumberFormatSymbols_rof_TZ', 'goog.i18n.CompactNumberFormatSymbols_ru_BY', 'goog.i18n.CompactNumberFormatSymbols_ru_KG', 'goog.i18n.CompactNumberFormatSymbols_ru_KZ', 'goog.i18n.CompactNumberFormatSymbols_ru_MD', 'goog.i18n.CompactNumberFormatSymbols_ru_UA', 'goog.i18n.CompactNumberFormatSymbols_rw', 'goog.i18n.CompactNumberFormatSymbols_rw_RW', 'goog.i18n.CompactNumberFormatSymbols_rwk', 'goog.i18n.CompactNumberFormatSymbols_rwk_TZ', 'goog.i18n.CompactNumberFormatSymbols_sah', 'goog.i18n.CompactNumberFormatSymbols_sah_RU', 'goog.i18n.CompactNumberFormatSymbols_saq', 'goog.i18n.CompactNumberFormatSymbols_saq_KE', 'goog.i18n.CompactNumberFormatSymbols_sbp', 'goog.i18n.CompactNumberFormatSymbols_sbp_TZ', 'goog.i18n.CompactNumberFormatSymbols_se', 'goog.i18n.CompactNumberFormatSymbols_se_FI', 'goog.i18n.CompactNumberFormatSymbols_se_NO', 'goog.i18n.CompactNumberFormatSymbols_se_SE', 'goog.i18n.CompactNumberFormatSymbols_seh', 'goog.i18n.CompactNumberFormatSymbols_seh_MZ', 'goog.i18n.CompactNumberFormatSymbols_ses', 'goog.i18n.CompactNumberFormatSymbols_ses_ML', 'goog.i18n.CompactNumberFormatSymbols_sg', 'goog.i18n.CompactNumberFormatSymbols_sg_CF', 'goog.i18n.CompactNumberFormatSymbols_shi', 'goog.i18n.CompactNumberFormatSymbols_shi_Latn', 'goog.i18n.CompactNumberFormatSymbols_shi_Latn_MA', 'goog.i18n.CompactNumberFormatSymbols_shi_Tfng', 'goog.i18n.CompactNumberFormatSymbols_shi_Tfng_MA', 'goog.i18n.CompactNumberFormatSymbols_smn', 'goog.i18n.CompactNumberFormatSymbols_smn_FI', 'goog.i18n.CompactNumberFormatSymbols_sn', 'goog.i18n.CompactNumberFormatSymbols_sn_ZW', 'goog.i18n.CompactNumberFormatSymbols_so', 'goog.i18n.CompactNumberFormatSymbols_so_DJ', 'goog.i18n.CompactNumberFormatSymbols_so_ET', 'goog.i18n.CompactNumberFormatSymbols_so_KE', 'goog.i18n.CompactNumberFormatSymbols_so_SO', 'goog.i18n.CompactNumberFormatSymbols_sq_MK', 'goog.i18n.CompactNumberFormatSymbols_sq_XK', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_BA', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_ME', 'goog.i18n.CompactNumberFormatSymbols_sr_Cyrl_XK', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_BA', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_ME', 'goog.i18n.CompactNumberFormatSymbols_sr_Latn_XK', 'goog.i18n.CompactNumberFormatSymbols_sv_AX', 'goog.i18n.CompactNumberFormatSymbols_sv_FI', 'goog.i18n.CompactNumberFormatSymbols_sw_CD', 'goog.i18n.CompactNumberFormatSymbols_sw_KE', 'goog.i18n.CompactNumberFormatSymbols_sw_UG', 'goog.i18n.CompactNumberFormatSymbols_ta_LK', 'goog.i18n.CompactNumberFormatSymbols_ta_MY', 'goog.i18n.CompactNumberFormatSymbols_ta_SG', 'goog.i18n.CompactNumberFormatSymbols_teo', 'goog.i18n.CompactNumberFormatSymbols_teo_KE', 'goog.i18n.CompactNumberFormatSymbols_teo_UG', 'goog.i18n.CompactNumberFormatSymbols_ti', 'goog.i18n.CompactNumberFormatSymbols_ti_ER', 'goog.i18n.CompactNumberFormatSymbols_ti_ET', 'goog.i18n.CompactNumberFormatSymbols_to', 'goog.i18n.CompactNumberFormatSymbols_to_TO', 'goog.i18n.CompactNumberFormatSymbols_tr_CY', 'goog.i18n.CompactNumberFormatSymbols_twq', 'goog.i18n.CompactNumberFormatSymbols_twq_NE', 'goog.i18n.CompactNumberFormatSymbols_tzm', 'goog.i18n.CompactNumberFormatSymbols_tzm_Latn', 'goog.i18n.CompactNumberFormatSymbols_tzm_Latn_MA', 'goog.i18n.CompactNumberFormatSymbols_ug', 'goog.i18n.CompactNumberFormatSymbols_ug_Arab', 'goog.i18n.CompactNumberFormatSymbols_ug_Arab_CN', 'goog.i18n.CompactNumberFormatSymbols_ur_IN', 'goog.i18n.CompactNumberFormatSymbols_uz_Arab', 'goog.i18n.CompactNumberFormatSymbols_uz_Arab_AF', 'goog.i18n.CompactNumberFormatSymbols_uz_Cyrl', 'goog.i18n.CompactNumberFormatSymbols_uz_Cyrl_UZ', 'goog.i18n.CompactNumberFormatSymbols_vai', 'goog.i18n.CompactNumberFormatSymbols_vai_Latn', 'goog.i18n.CompactNumberFormatSymbols_vai_Latn_LR', 'goog.i18n.CompactNumberFormatSymbols_vai_Vaii', 'goog.i18n.CompactNumberFormatSymbols_vai_Vaii_LR', 'goog.i18n.CompactNumberFormatSymbols_vun', 'goog.i18n.CompactNumberFormatSymbols_vun_TZ', 'goog.i18n.CompactNumberFormatSymbols_wae', 'goog.i18n.CompactNumberFormatSymbols_wae_CH', 'goog.i18n.CompactNumberFormatSymbols_xog', 'goog.i18n.CompactNumberFormatSymbols_xog_UG', 'goog.i18n.CompactNumberFormatSymbols_yav', 'goog.i18n.CompactNumberFormatSymbols_yav_CM', 'goog.i18n.CompactNumberFormatSymbols_yi', 'goog.i18n.CompactNumberFormatSymbols_yi_001', 'goog.i18n.CompactNumberFormatSymbols_yo', 'goog.i18n.CompactNumberFormatSymbols_yo_BJ', 'goog.i18n.CompactNumberFormatSymbols_yo_NG', 'goog.i18n.CompactNumberFormatSymbols_zgh', 'goog.i18n.CompactNumberFormatSymbols_zgh_MA', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_HK', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_MO', 'goog.i18n.CompactNumberFormatSymbols_zh_Hans_SG', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant_HK', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant_MO', 'goog.i18n.CompactNumberFormatSymbols_zh_Hant_TW'], [], false); goog.addDependency('i18n/currency.js', ['goog.i18n.currency', 'goog.i18n.currency.CurrencyInfo', 'goog.i18n.currency.CurrencyInfoTier2'], [], false); goog.addDependency('i18n/currency_test.js', ['goog.i18n.currencyTest'], ['goog.i18n.NumberFormat', 'goog.i18n.currency', 'goog.i18n.currency.CurrencyInfo', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('i18n/currencycodemap.js', ['goog.i18n.currencyCodeMap', 'goog.i18n.currencyCodeMapTier2'], [], false); goog.addDependency('i18n/datetimeformat.js', ['goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeFormat.Format'], ['goog.asserts', 'goog.date', 'goog.i18n.DateTimeSymbols', 'goog.i18n.TimeZone', 'goog.string'], false); goog.addDependency('i18n/datetimeformat_test.js', ['goog.i18n.DateTimeFormatTest'], ['goog.date.Date', 'goog.date.DateTime', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimePatterns', 'goog.i18n.DateTimePatterns_ar', 'goog.i18n.DateTimePatterns_de', 'goog.i18n.DateTimePatterns_en', 'goog.i18n.DateTimePatterns_fa', 'goog.i18n.DateTimePatterns_fr', 'goog.i18n.DateTimePatterns_ja', 'goog.i18n.DateTimePatterns_sv', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_ar', 'goog.i18n.DateTimeSymbols_ar_AE', 'goog.i18n.DateTimeSymbols_ar_SA', 'goog.i18n.DateTimeSymbols_bn_BD', 'goog.i18n.DateTimeSymbols_de', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_en_GB', 'goog.i18n.DateTimeSymbols_en_IE', 'goog.i18n.DateTimeSymbols_en_IN', 'goog.i18n.DateTimeSymbols_en_US', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.DateTimeSymbols_fr', 'goog.i18n.DateTimeSymbols_fr_DJ', 'goog.i18n.DateTimeSymbols_he_IL', 'goog.i18n.DateTimeSymbols_ja', 'goog.i18n.DateTimeSymbols_ro_RO', 'goog.i18n.DateTimeSymbols_sv', 'goog.i18n.TimeZone', 'goog.testing.jsunit'], false); goog.addDependency('i18n/datetimeparse.js', ['goog.i18n.DateTimeParse'], ['goog.date', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeSymbols'], false); goog.addDependency('i18n/datetimeparse_test.js', ['goog.i18n.DateTimeParseTest'], ['goog.date.Date', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeParse', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.DateTimeSymbols_fr', 'goog.i18n.DateTimeSymbols_pl', 'goog.i18n.DateTimeSymbols_zh', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('i18n/datetimepatterns.js', ['goog.i18n.DateTimePatterns', 'goog.i18n.DateTimePatterns_af', 'goog.i18n.DateTimePatterns_am', 'goog.i18n.DateTimePatterns_ar', 'goog.i18n.DateTimePatterns_az', 'goog.i18n.DateTimePatterns_be', 'goog.i18n.DateTimePatterns_bg', 'goog.i18n.DateTimePatterns_bn', 'goog.i18n.DateTimePatterns_br', 'goog.i18n.DateTimePatterns_bs', 'goog.i18n.DateTimePatterns_ca', 'goog.i18n.DateTimePatterns_chr', 'goog.i18n.DateTimePatterns_cs', 'goog.i18n.DateTimePatterns_cy', 'goog.i18n.DateTimePatterns_da', 'goog.i18n.DateTimePatterns_de', 'goog.i18n.DateTimePatterns_de_AT', 'goog.i18n.DateTimePatterns_de_CH', 'goog.i18n.DateTimePatterns_el', 'goog.i18n.DateTimePatterns_en', 'goog.i18n.DateTimePatterns_en_AU', 'goog.i18n.DateTimePatterns_en_CA', 'goog.i18n.DateTimePatterns_en_GB', 'goog.i18n.DateTimePatterns_en_IE', 'goog.i18n.DateTimePatterns_en_IN', 'goog.i18n.DateTimePatterns_en_SG', 'goog.i18n.DateTimePatterns_en_US', 'goog.i18n.DateTimePatterns_en_ZA', 'goog.i18n.DateTimePatterns_es', 'goog.i18n.DateTimePatterns_es_419', 'goog.i18n.DateTimePatterns_es_ES', 'goog.i18n.DateTimePatterns_es_MX', 'goog.i18n.DateTimePatterns_es_US', 'goog.i18n.DateTimePatterns_et', 'goog.i18n.DateTimePatterns_eu', 'goog.i18n.DateTimePatterns_fa', 'goog.i18n.DateTimePatterns_fi', 'goog.i18n.DateTimePatterns_fil', 'goog.i18n.DateTimePatterns_fr', 'goog.i18n.DateTimePatterns_fr_CA', 'goog.i18n.DateTimePatterns_ga', 'goog.i18n.DateTimePatterns_gl', 'goog.i18n.DateTimePatterns_gsw', 'goog.i18n.DateTimePatterns_gu', 'goog.i18n.DateTimePatterns_haw', 'goog.i18n.DateTimePatterns_he', 'goog.i18n.DateTimePatterns_hi', 'goog.i18n.DateTimePatterns_hr', 'goog.i18n.DateTimePatterns_hu', 'goog.i18n.DateTimePatterns_hy', 'goog.i18n.DateTimePatterns_id', 'goog.i18n.DateTimePatterns_in', 'goog.i18n.DateTimePatterns_is', 'goog.i18n.DateTimePatterns_it', 'goog.i18n.DateTimePatterns_iw', 'goog.i18n.DateTimePatterns_ja', 'goog.i18n.DateTimePatterns_ka', 'goog.i18n.DateTimePatterns_kk', 'goog.i18n.DateTimePatterns_km', 'goog.i18n.DateTimePatterns_kn', 'goog.i18n.DateTimePatterns_ko', 'goog.i18n.DateTimePatterns_ky', 'goog.i18n.DateTimePatterns_ln', 'goog.i18n.DateTimePatterns_lo', 'goog.i18n.DateTimePatterns_lt', 'goog.i18n.DateTimePatterns_lv', 'goog.i18n.DateTimePatterns_mk', 'goog.i18n.DateTimePatterns_ml', 'goog.i18n.DateTimePatterns_mn', 'goog.i18n.DateTimePatterns_mo', 'goog.i18n.DateTimePatterns_mr', 'goog.i18n.DateTimePatterns_ms', 'goog.i18n.DateTimePatterns_mt', 'goog.i18n.DateTimePatterns_my', 'goog.i18n.DateTimePatterns_nb', 'goog.i18n.DateTimePatterns_ne', 'goog.i18n.DateTimePatterns_nl', 'goog.i18n.DateTimePatterns_no', 'goog.i18n.DateTimePatterns_no_NO', 'goog.i18n.DateTimePatterns_or', 'goog.i18n.DateTimePatterns_pa', 'goog.i18n.DateTimePatterns_pl', 'goog.i18n.DateTimePatterns_pt', 'goog.i18n.DateTimePatterns_pt_BR', 'goog.i18n.DateTimePatterns_pt_PT', 'goog.i18n.DateTimePatterns_ro', 'goog.i18n.DateTimePatterns_ru', 'goog.i18n.DateTimePatterns_sh', 'goog.i18n.DateTimePatterns_si', 'goog.i18n.DateTimePatterns_sk', 'goog.i18n.DateTimePatterns_sl', 'goog.i18n.DateTimePatterns_sq', 'goog.i18n.DateTimePatterns_sr', 'goog.i18n.DateTimePatterns_sr_Latn', 'goog.i18n.DateTimePatterns_sv', 'goog.i18n.DateTimePatterns_sw', 'goog.i18n.DateTimePatterns_ta', 'goog.i18n.DateTimePatterns_te', 'goog.i18n.DateTimePatterns_th', 'goog.i18n.DateTimePatterns_tl', 'goog.i18n.DateTimePatterns_tr', 'goog.i18n.DateTimePatterns_uk', 'goog.i18n.DateTimePatterns_ur', 'goog.i18n.DateTimePatterns_uz', 'goog.i18n.DateTimePatterns_vi', 'goog.i18n.DateTimePatterns_zh', 'goog.i18n.DateTimePatterns_zh_CN', 'goog.i18n.DateTimePatterns_zh_HK', 'goog.i18n.DateTimePatterns_zh_TW', 'goog.i18n.DateTimePatterns_zu'], [], false); goog.addDependency('i18n/datetimepatternsext.js', ['goog.i18n.DateTimePatternsExt', 'goog.i18n.DateTimePatterns_af_NA', 'goog.i18n.DateTimePatterns_af_ZA', 'goog.i18n.DateTimePatterns_agq', 'goog.i18n.DateTimePatterns_agq_CM', 'goog.i18n.DateTimePatterns_ak', 'goog.i18n.DateTimePatterns_ak_GH', 'goog.i18n.DateTimePatterns_am_ET', 'goog.i18n.DateTimePatterns_ar_001', 'goog.i18n.DateTimePatterns_ar_AE', 'goog.i18n.DateTimePatterns_ar_BH', 'goog.i18n.DateTimePatterns_ar_DJ', 'goog.i18n.DateTimePatterns_ar_DZ', 'goog.i18n.DateTimePatterns_ar_EG', 'goog.i18n.DateTimePatterns_ar_EH', 'goog.i18n.DateTimePatterns_ar_ER', 'goog.i18n.DateTimePatterns_ar_IL', 'goog.i18n.DateTimePatterns_ar_IQ', 'goog.i18n.DateTimePatterns_ar_JO', 'goog.i18n.DateTimePatterns_ar_KM', 'goog.i18n.DateTimePatterns_ar_KW', 'goog.i18n.DateTimePatterns_ar_LB', 'goog.i18n.DateTimePatterns_ar_LY', 'goog.i18n.DateTimePatterns_ar_MA', 'goog.i18n.DateTimePatterns_ar_MR', 'goog.i18n.DateTimePatterns_ar_OM', 'goog.i18n.DateTimePatterns_ar_PS', 'goog.i18n.DateTimePatterns_ar_QA', 'goog.i18n.DateTimePatterns_ar_SA', 'goog.i18n.DateTimePatterns_ar_SD', 'goog.i18n.DateTimePatterns_ar_SO', 'goog.i18n.DateTimePatterns_ar_SS', 'goog.i18n.DateTimePatterns_ar_SY', 'goog.i18n.DateTimePatterns_ar_TD', 'goog.i18n.DateTimePatterns_ar_TN', 'goog.i18n.DateTimePatterns_ar_YE', 'goog.i18n.DateTimePatterns_as', 'goog.i18n.DateTimePatterns_as_IN', 'goog.i18n.DateTimePatterns_asa', 'goog.i18n.DateTimePatterns_asa_TZ', 'goog.i18n.DateTimePatterns_az_Cyrl', 'goog.i18n.DateTimePatterns_az_Cyrl_AZ', 'goog.i18n.DateTimePatterns_az_Latn', 'goog.i18n.DateTimePatterns_az_Latn_AZ', 'goog.i18n.DateTimePatterns_bas', 'goog.i18n.DateTimePatterns_bas_CM', 'goog.i18n.DateTimePatterns_be_BY', 'goog.i18n.DateTimePatterns_bem', 'goog.i18n.DateTimePatterns_bem_ZM', 'goog.i18n.DateTimePatterns_bez', 'goog.i18n.DateTimePatterns_bez_TZ', 'goog.i18n.DateTimePatterns_bg_BG', 'goog.i18n.DateTimePatterns_bm', 'goog.i18n.DateTimePatterns_bm_Latn', 'goog.i18n.DateTimePatterns_bm_Latn_ML', 'goog.i18n.DateTimePatterns_bn_BD', 'goog.i18n.DateTimePatterns_bn_IN', 'goog.i18n.DateTimePatterns_bo', 'goog.i18n.DateTimePatterns_bo_CN', 'goog.i18n.DateTimePatterns_bo_IN', 'goog.i18n.DateTimePatterns_br_FR', 'goog.i18n.DateTimePatterns_brx', 'goog.i18n.DateTimePatterns_brx_IN', 'goog.i18n.DateTimePatterns_bs_Cyrl', 'goog.i18n.DateTimePatterns_bs_Cyrl_BA', 'goog.i18n.DateTimePatterns_bs_Latn', 'goog.i18n.DateTimePatterns_bs_Latn_BA', 'goog.i18n.DateTimePatterns_ca_AD', 'goog.i18n.DateTimePatterns_ca_ES', 'goog.i18n.DateTimePatterns_ca_FR', 'goog.i18n.DateTimePatterns_ca_IT', 'goog.i18n.DateTimePatterns_cgg', 'goog.i18n.DateTimePatterns_cgg_UG', 'goog.i18n.DateTimePatterns_chr_US', 'goog.i18n.DateTimePatterns_cs_CZ', 'goog.i18n.DateTimePatterns_cy_GB', 'goog.i18n.DateTimePatterns_da_DK', 'goog.i18n.DateTimePatterns_da_GL', 'goog.i18n.DateTimePatterns_dav', 'goog.i18n.DateTimePatterns_dav_KE', 'goog.i18n.DateTimePatterns_de_BE', 'goog.i18n.DateTimePatterns_de_DE', 'goog.i18n.DateTimePatterns_de_LI', 'goog.i18n.DateTimePatterns_de_LU', 'goog.i18n.DateTimePatterns_dje', 'goog.i18n.DateTimePatterns_dje_NE', 'goog.i18n.DateTimePatterns_dsb', 'goog.i18n.DateTimePatterns_dsb_DE', 'goog.i18n.DateTimePatterns_dua', 'goog.i18n.DateTimePatterns_dua_CM', 'goog.i18n.DateTimePatterns_dyo', 'goog.i18n.DateTimePatterns_dyo_SN', 'goog.i18n.DateTimePatterns_dz', 'goog.i18n.DateTimePatterns_dz_BT', 'goog.i18n.DateTimePatterns_ebu', 'goog.i18n.DateTimePatterns_ebu_KE', 'goog.i18n.DateTimePatterns_ee', 'goog.i18n.DateTimePatterns_ee_GH', 'goog.i18n.DateTimePatterns_ee_TG', 'goog.i18n.DateTimePatterns_el_CY', 'goog.i18n.DateTimePatterns_el_GR', 'goog.i18n.DateTimePatterns_en_001', 'goog.i18n.DateTimePatterns_en_150', 'goog.i18n.DateTimePatterns_en_AG', 'goog.i18n.DateTimePatterns_en_AI', 'goog.i18n.DateTimePatterns_en_AS', 'goog.i18n.DateTimePatterns_en_BB', 'goog.i18n.DateTimePatterns_en_BE', 'goog.i18n.DateTimePatterns_en_BM', 'goog.i18n.DateTimePatterns_en_BS', 'goog.i18n.DateTimePatterns_en_BW', 'goog.i18n.DateTimePatterns_en_BZ', 'goog.i18n.DateTimePatterns_en_CC', 'goog.i18n.DateTimePatterns_en_CK', 'goog.i18n.DateTimePatterns_en_CM', 'goog.i18n.DateTimePatterns_en_CX', 'goog.i18n.DateTimePatterns_en_DG', 'goog.i18n.DateTimePatterns_en_DM', 'goog.i18n.DateTimePatterns_en_ER', 'goog.i18n.DateTimePatterns_en_FJ', 'goog.i18n.DateTimePatterns_en_FK', 'goog.i18n.DateTimePatterns_en_FM', 'goog.i18n.DateTimePatterns_en_GD', 'goog.i18n.DateTimePatterns_en_GG', 'goog.i18n.DateTimePatterns_en_GH', 'goog.i18n.DateTimePatterns_en_GI', 'goog.i18n.DateTimePatterns_en_GM', 'goog.i18n.DateTimePatterns_en_GU', 'goog.i18n.DateTimePatterns_en_GY', 'goog.i18n.DateTimePatterns_en_HK', 'goog.i18n.DateTimePatterns_en_IM', 'goog.i18n.DateTimePatterns_en_IO', 'goog.i18n.DateTimePatterns_en_JE', 'goog.i18n.DateTimePatterns_en_JM', 'goog.i18n.DateTimePatterns_en_KE', 'goog.i18n.DateTimePatterns_en_KI', 'goog.i18n.DateTimePatterns_en_KN', 'goog.i18n.DateTimePatterns_en_KY', 'goog.i18n.DateTimePatterns_en_LC', 'goog.i18n.DateTimePatterns_en_LR', 'goog.i18n.DateTimePatterns_en_LS', 'goog.i18n.DateTimePatterns_en_MG', 'goog.i18n.DateTimePatterns_en_MH', 'goog.i18n.DateTimePatterns_en_MO', 'goog.i18n.DateTimePatterns_en_MP', 'goog.i18n.DateTimePatterns_en_MS', 'goog.i18n.DateTimePatterns_en_MT', 'goog.i18n.DateTimePatterns_en_MU', 'goog.i18n.DateTimePatterns_en_MW', 'goog.i18n.DateTimePatterns_en_MY', 'goog.i18n.DateTimePatterns_en_NA', 'goog.i18n.DateTimePatterns_en_NF', 'goog.i18n.DateTimePatterns_en_NG', 'goog.i18n.DateTimePatterns_en_NR', 'goog.i18n.DateTimePatterns_en_NU', 'goog.i18n.DateTimePatterns_en_NZ', 'goog.i18n.DateTimePatterns_en_PG', 'goog.i18n.DateTimePatterns_en_PH', 'goog.i18n.DateTimePatterns_en_PK', 'goog.i18n.DateTimePatterns_en_PN', 'goog.i18n.DateTimePatterns_en_PR', 'goog.i18n.DateTimePatterns_en_PW', 'goog.i18n.DateTimePatterns_en_RW', 'goog.i18n.DateTimePatterns_en_SB', 'goog.i18n.DateTimePatterns_en_SC', 'goog.i18n.DateTimePatterns_en_SD', 'goog.i18n.DateTimePatterns_en_SH', 'goog.i18n.DateTimePatterns_en_SL', 'goog.i18n.DateTimePatterns_en_SS', 'goog.i18n.DateTimePatterns_en_SX', 'goog.i18n.DateTimePatterns_en_SZ', 'goog.i18n.DateTimePatterns_en_TC', 'goog.i18n.DateTimePatterns_en_TK', 'goog.i18n.DateTimePatterns_en_TO', 'goog.i18n.DateTimePatterns_en_TT', 'goog.i18n.DateTimePatterns_en_TV', 'goog.i18n.DateTimePatterns_en_TZ', 'goog.i18n.DateTimePatterns_en_UG', 'goog.i18n.DateTimePatterns_en_UM', 'goog.i18n.DateTimePatterns_en_US_POSIX', 'goog.i18n.DateTimePatterns_en_VC', 'goog.i18n.DateTimePatterns_en_VG', 'goog.i18n.DateTimePatterns_en_VI', 'goog.i18n.DateTimePatterns_en_VU', 'goog.i18n.DateTimePatterns_en_WS', 'goog.i18n.DateTimePatterns_en_ZM', 'goog.i18n.DateTimePatterns_en_ZW', 'goog.i18n.DateTimePatterns_eo', 'goog.i18n.DateTimePatterns_es_AR', 'goog.i18n.DateTimePatterns_es_BO', 'goog.i18n.DateTimePatterns_es_CL', 'goog.i18n.DateTimePatterns_es_CO', 'goog.i18n.DateTimePatterns_es_CR', 'goog.i18n.DateTimePatterns_es_CU', 'goog.i18n.DateTimePatterns_es_DO', 'goog.i18n.DateTimePatterns_es_EA', 'goog.i18n.DateTimePatterns_es_EC', 'goog.i18n.DateTimePatterns_es_GQ', 'goog.i18n.DateTimePatterns_es_GT', 'goog.i18n.DateTimePatterns_es_HN', 'goog.i18n.DateTimePatterns_es_IC', 'goog.i18n.DateTimePatterns_es_NI', 'goog.i18n.DateTimePatterns_es_PA', 'goog.i18n.DateTimePatterns_es_PE', 'goog.i18n.DateTimePatterns_es_PH', 'goog.i18n.DateTimePatterns_es_PR', 'goog.i18n.DateTimePatterns_es_PY', 'goog.i18n.DateTimePatterns_es_SV', 'goog.i18n.DateTimePatterns_es_UY', 'goog.i18n.DateTimePatterns_es_VE', 'goog.i18n.DateTimePatterns_et_EE', 'goog.i18n.DateTimePatterns_eu_ES', 'goog.i18n.DateTimePatterns_ewo', 'goog.i18n.DateTimePatterns_ewo_CM', 'goog.i18n.DateTimePatterns_fa_AF', 'goog.i18n.DateTimePatterns_fa_IR', 'goog.i18n.DateTimePatterns_ff', 'goog.i18n.DateTimePatterns_ff_CM', 'goog.i18n.DateTimePatterns_ff_GN', 'goog.i18n.DateTimePatterns_ff_MR', 'goog.i18n.DateTimePatterns_ff_SN', 'goog.i18n.DateTimePatterns_fi_FI', 'goog.i18n.DateTimePatterns_fil_PH', 'goog.i18n.DateTimePatterns_fo', 'goog.i18n.DateTimePatterns_fo_FO', 'goog.i18n.DateTimePatterns_fr_BE', 'goog.i18n.DateTimePatterns_fr_BF', 'goog.i18n.DateTimePatterns_fr_BI', 'goog.i18n.DateTimePatterns_fr_BJ', 'goog.i18n.DateTimePatterns_fr_BL', 'goog.i18n.DateTimePatterns_fr_CD', 'goog.i18n.DateTimePatterns_fr_CF', 'goog.i18n.DateTimePatterns_fr_CG', 'goog.i18n.DateTimePatterns_fr_CH', 'goog.i18n.DateTimePatterns_fr_CI', 'goog.i18n.DateTimePatterns_fr_CM', 'goog.i18n.DateTimePatterns_fr_DJ', 'goog.i18n.DateTimePatterns_fr_DZ', 'goog.i18n.DateTimePatterns_fr_FR', 'goog.i18n.DateTimePatterns_fr_GA', 'goog.i18n.DateTimePatterns_fr_GF', 'goog.i18n.DateTimePatterns_fr_GN', 'goog.i18n.DateTimePatterns_fr_GP', 'goog.i18n.DateTimePatterns_fr_GQ', 'goog.i18n.DateTimePatterns_fr_HT', 'goog.i18n.DateTimePatterns_fr_KM', 'goog.i18n.DateTimePatterns_fr_LU', 'goog.i18n.DateTimePatterns_fr_MA', 'goog.i18n.DateTimePatterns_fr_MC', 'goog.i18n.DateTimePatterns_fr_MF', 'goog.i18n.DateTimePatterns_fr_MG', 'goog.i18n.DateTimePatterns_fr_ML', 'goog.i18n.DateTimePatterns_fr_MQ', 'goog.i18n.DateTimePatterns_fr_MR', 'goog.i18n.DateTimePatterns_fr_MU', 'goog.i18n.DateTimePatterns_fr_NC', 'goog.i18n.DateTimePatterns_fr_NE', 'goog.i18n.DateTimePatterns_fr_PF', 'goog.i18n.DateTimePatterns_fr_PM', 'goog.i18n.DateTimePatterns_fr_RE', 'goog.i18n.DateTimePatterns_fr_RW', 'goog.i18n.DateTimePatterns_fr_SC', 'goog.i18n.DateTimePatterns_fr_SN', 'goog.i18n.DateTimePatterns_fr_SY', 'goog.i18n.DateTimePatterns_fr_TD', 'goog.i18n.DateTimePatterns_fr_TG', 'goog.i18n.DateTimePatterns_fr_TN', 'goog.i18n.DateTimePatterns_fr_VU', 'goog.i18n.DateTimePatterns_fr_WF', 'goog.i18n.DateTimePatterns_fr_YT', 'goog.i18n.DateTimePatterns_fur', 'goog.i18n.DateTimePatterns_fur_IT', 'goog.i18n.DateTimePatterns_fy', 'goog.i18n.DateTimePatterns_fy_NL', 'goog.i18n.DateTimePatterns_ga_IE', 'goog.i18n.DateTimePatterns_gd', 'goog.i18n.DateTimePatterns_gd_GB', 'goog.i18n.DateTimePatterns_gl_ES', 'goog.i18n.DateTimePatterns_gsw_CH', 'goog.i18n.DateTimePatterns_gsw_FR', 'goog.i18n.DateTimePatterns_gsw_LI', 'goog.i18n.DateTimePatterns_gu_IN', 'goog.i18n.DateTimePatterns_guz', 'goog.i18n.DateTimePatterns_guz_KE', 'goog.i18n.DateTimePatterns_gv', 'goog.i18n.DateTimePatterns_gv_IM', 'goog.i18n.DateTimePatterns_ha', 'goog.i18n.DateTimePatterns_ha_Latn', 'goog.i18n.DateTimePatterns_ha_Latn_GH', 'goog.i18n.DateTimePatterns_ha_Latn_NE', 'goog.i18n.DateTimePatterns_ha_Latn_NG', 'goog.i18n.DateTimePatterns_haw_US', 'goog.i18n.DateTimePatterns_he_IL', 'goog.i18n.DateTimePatterns_hi_IN', 'goog.i18n.DateTimePatterns_hr_BA', 'goog.i18n.DateTimePatterns_hr_HR', 'goog.i18n.DateTimePatterns_hsb', 'goog.i18n.DateTimePatterns_hsb_DE', 'goog.i18n.DateTimePatterns_hu_HU', 'goog.i18n.DateTimePatterns_hy_AM', 'goog.i18n.DateTimePatterns_id_ID', 'goog.i18n.DateTimePatterns_ig', 'goog.i18n.DateTimePatterns_ig_NG', 'goog.i18n.DateTimePatterns_ii', 'goog.i18n.DateTimePatterns_ii_CN', 'goog.i18n.DateTimePatterns_is_IS', 'goog.i18n.DateTimePatterns_it_CH', 'goog.i18n.DateTimePatterns_it_IT', 'goog.i18n.DateTimePatterns_it_SM', 'goog.i18n.DateTimePatterns_ja_JP', 'goog.i18n.DateTimePatterns_jgo', 'goog.i18n.DateTimePatterns_jgo_CM', 'goog.i18n.DateTimePatterns_jmc', 'goog.i18n.DateTimePatterns_jmc_TZ', 'goog.i18n.DateTimePatterns_ka_GE', 'goog.i18n.DateTimePatterns_kab', 'goog.i18n.DateTimePatterns_kab_DZ', 'goog.i18n.DateTimePatterns_kam', 'goog.i18n.DateTimePatterns_kam_KE', 'goog.i18n.DateTimePatterns_kde', 'goog.i18n.DateTimePatterns_kde_TZ', 'goog.i18n.DateTimePatterns_kea', 'goog.i18n.DateTimePatterns_kea_CV', 'goog.i18n.DateTimePatterns_khq', 'goog.i18n.DateTimePatterns_khq_ML', 'goog.i18n.DateTimePatterns_ki', 'goog.i18n.DateTimePatterns_ki_KE', 'goog.i18n.DateTimePatterns_kk_Cyrl', 'goog.i18n.DateTimePatterns_kk_Cyrl_KZ', 'goog.i18n.DateTimePatterns_kkj', 'goog.i18n.DateTimePatterns_kkj_CM', 'goog.i18n.DateTimePatterns_kl', 'goog.i18n.DateTimePatterns_kl_GL', 'goog.i18n.DateTimePatterns_kln', 'goog.i18n.DateTimePatterns_kln_KE', 'goog.i18n.DateTimePatterns_km_KH', 'goog.i18n.DateTimePatterns_kn_IN', 'goog.i18n.DateTimePatterns_ko_KP', 'goog.i18n.DateTimePatterns_ko_KR', 'goog.i18n.DateTimePatterns_kok', 'goog.i18n.DateTimePatterns_kok_IN', 'goog.i18n.DateTimePatterns_ks', 'goog.i18n.DateTimePatterns_ks_Arab', 'goog.i18n.DateTimePatterns_ks_Arab_IN', 'goog.i18n.DateTimePatterns_ksb', 'goog.i18n.DateTimePatterns_ksb_TZ', 'goog.i18n.DateTimePatterns_ksf', 'goog.i18n.DateTimePatterns_ksf_CM', 'goog.i18n.DateTimePatterns_ksh', 'goog.i18n.DateTimePatterns_ksh_DE', 'goog.i18n.DateTimePatterns_kw', 'goog.i18n.DateTimePatterns_kw_GB', 'goog.i18n.DateTimePatterns_ky_Cyrl', 'goog.i18n.DateTimePatterns_ky_Cyrl_KG', 'goog.i18n.DateTimePatterns_lag', 'goog.i18n.DateTimePatterns_lag_TZ', 'goog.i18n.DateTimePatterns_lb', 'goog.i18n.DateTimePatterns_lb_LU', 'goog.i18n.DateTimePatterns_lg', 'goog.i18n.DateTimePatterns_lg_UG', 'goog.i18n.DateTimePatterns_lkt', 'goog.i18n.DateTimePatterns_lkt_US', 'goog.i18n.DateTimePatterns_ln_AO', 'goog.i18n.DateTimePatterns_ln_CD', 'goog.i18n.DateTimePatterns_ln_CF', 'goog.i18n.DateTimePatterns_ln_CG', 'goog.i18n.DateTimePatterns_lo_LA', 'goog.i18n.DateTimePatterns_lt_LT', 'goog.i18n.DateTimePatterns_lu', 'goog.i18n.DateTimePatterns_lu_CD', 'goog.i18n.DateTimePatterns_luo', 'goog.i18n.DateTimePatterns_luo_KE', 'goog.i18n.DateTimePatterns_luy', 'goog.i18n.DateTimePatterns_luy_KE', 'goog.i18n.DateTimePatterns_lv_LV', 'goog.i18n.DateTimePatterns_mas', 'goog.i18n.DateTimePatterns_mas_KE', 'goog.i18n.DateTimePatterns_mas_TZ', 'goog.i18n.DateTimePatterns_mer', 'goog.i18n.DateTimePatterns_mer_KE', 'goog.i18n.DateTimePatterns_mfe', 'goog.i18n.DateTimePatterns_mfe_MU', 'goog.i18n.DateTimePatterns_mg', 'goog.i18n.DateTimePatterns_mg_MG', 'goog.i18n.DateTimePatterns_mgh', 'goog.i18n.DateTimePatterns_mgh_MZ', 'goog.i18n.DateTimePatterns_mgo', 'goog.i18n.DateTimePatterns_mgo_CM', 'goog.i18n.DateTimePatterns_mk_MK', 'goog.i18n.DateTimePatterns_ml_IN', 'goog.i18n.DateTimePatterns_mn_Cyrl', 'goog.i18n.DateTimePatterns_mn_Cyrl_MN', 'goog.i18n.DateTimePatterns_mr_IN', 'goog.i18n.DateTimePatterns_ms_Latn', 'goog.i18n.DateTimePatterns_ms_Latn_BN', 'goog.i18n.DateTimePatterns_ms_Latn_MY', 'goog.i18n.DateTimePatterns_ms_Latn_SG', 'goog.i18n.DateTimePatterns_mt_MT', 'goog.i18n.DateTimePatterns_mua', 'goog.i18n.DateTimePatterns_mua_CM', 'goog.i18n.DateTimePatterns_my_MM', 'goog.i18n.DateTimePatterns_naq', 'goog.i18n.DateTimePatterns_naq_NA', 'goog.i18n.DateTimePatterns_nb_NO', 'goog.i18n.DateTimePatterns_nb_SJ', 'goog.i18n.DateTimePatterns_nd', 'goog.i18n.DateTimePatterns_nd_ZW', 'goog.i18n.DateTimePatterns_ne_IN', 'goog.i18n.DateTimePatterns_ne_NP', 'goog.i18n.DateTimePatterns_nl_AW', 'goog.i18n.DateTimePatterns_nl_BE', 'goog.i18n.DateTimePatterns_nl_BQ', 'goog.i18n.DateTimePatterns_nl_CW', 'goog.i18n.DateTimePatterns_nl_NL', 'goog.i18n.DateTimePatterns_nl_SR', 'goog.i18n.DateTimePatterns_nl_SX', 'goog.i18n.DateTimePatterns_nmg', 'goog.i18n.DateTimePatterns_nmg_CM', 'goog.i18n.DateTimePatterns_nn', 'goog.i18n.DateTimePatterns_nn_NO', 'goog.i18n.DateTimePatterns_nnh', 'goog.i18n.DateTimePatterns_nnh_CM', 'goog.i18n.DateTimePatterns_nus', 'goog.i18n.DateTimePatterns_nus_SD', 'goog.i18n.DateTimePatterns_nyn', 'goog.i18n.DateTimePatterns_nyn_UG', 'goog.i18n.DateTimePatterns_om', 'goog.i18n.DateTimePatterns_om_ET', 'goog.i18n.DateTimePatterns_om_KE', 'goog.i18n.DateTimePatterns_or_IN', 'goog.i18n.DateTimePatterns_os', 'goog.i18n.DateTimePatterns_os_GE', 'goog.i18n.DateTimePatterns_os_RU', 'goog.i18n.DateTimePatterns_pa_Arab', 'goog.i18n.DateTimePatterns_pa_Arab_PK', 'goog.i18n.DateTimePatterns_pa_Guru', 'goog.i18n.DateTimePatterns_pa_Guru_IN', 'goog.i18n.DateTimePatterns_pl_PL', 'goog.i18n.DateTimePatterns_ps', 'goog.i18n.DateTimePatterns_ps_AF', 'goog.i18n.DateTimePatterns_pt_AO', 'goog.i18n.DateTimePatterns_pt_CV', 'goog.i18n.DateTimePatterns_pt_GW', 'goog.i18n.DateTimePatterns_pt_MO', 'goog.i18n.DateTimePatterns_pt_MZ', 'goog.i18n.DateTimePatterns_pt_ST', 'goog.i18n.DateTimePatterns_pt_TL', 'goog.i18n.DateTimePatterns_qu', 'goog.i18n.DateTimePatterns_qu_BO', 'goog.i18n.DateTimePatterns_qu_EC', 'goog.i18n.DateTimePatterns_qu_PE', 'goog.i18n.DateTimePatterns_rm', 'goog.i18n.DateTimePatterns_rm_CH', 'goog.i18n.DateTimePatterns_rn', 'goog.i18n.DateTimePatterns_rn_BI', 'goog.i18n.DateTimePatterns_ro_MD', 'goog.i18n.DateTimePatterns_ro_RO', 'goog.i18n.DateTimePatterns_rof', 'goog.i18n.DateTimePatterns_rof_TZ', 'goog.i18n.DateTimePatterns_ru_BY', 'goog.i18n.DateTimePatterns_ru_KG', 'goog.i18n.DateTimePatterns_ru_KZ', 'goog.i18n.DateTimePatterns_ru_MD', 'goog.i18n.DateTimePatterns_ru_RU', 'goog.i18n.DateTimePatterns_ru_UA', 'goog.i18n.DateTimePatterns_rw', 'goog.i18n.DateTimePatterns_rw_RW', 'goog.i18n.DateTimePatterns_rwk', 'goog.i18n.DateTimePatterns_rwk_TZ', 'goog.i18n.DateTimePatterns_sah', 'goog.i18n.DateTimePatterns_sah_RU', 'goog.i18n.DateTimePatterns_saq', 'goog.i18n.DateTimePatterns_saq_KE', 'goog.i18n.DateTimePatterns_sbp', 'goog.i18n.DateTimePatterns_sbp_TZ', 'goog.i18n.DateTimePatterns_se', 'goog.i18n.DateTimePatterns_se_FI', 'goog.i18n.DateTimePatterns_se_NO', 'goog.i18n.DateTimePatterns_se_SE', 'goog.i18n.DateTimePatterns_seh', 'goog.i18n.DateTimePatterns_seh_MZ', 'goog.i18n.DateTimePatterns_ses', 'goog.i18n.DateTimePatterns_ses_ML', 'goog.i18n.DateTimePatterns_sg', 'goog.i18n.DateTimePatterns_sg_CF', 'goog.i18n.DateTimePatterns_shi', 'goog.i18n.DateTimePatterns_shi_Latn', 'goog.i18n.DateTimePatterns_shi_Latn_MA', 'goog.i18n.DateTimePatterns_shi_Tfng', 'goog.i18n.DateTimePatterns_shi_Tfng_MA', 'goog.i18n.DateTimePatterns_si_LK', 'goog.i18n.DateTimePatterns_sk_SK', 'goog.i18n.DateTimePatterns_sl_SI', 'goog.i18n.DateTimePatterns_smn', 'goog.i18n.DateTimePatterns_smn_FI', 'goog.i18n.DateTimePatterns_sn', 'goog.i18n.DateTimePatterns_sn_ZW', 'goog.i18n.DateTimePatterns_so', 'goog.i18n.DateTimePatterns_so_DJ', 'goog.i18n.DateTimePatterns_so_ET', 'goog.i18n.DateTimePatterns_so_KE', 'goog.i18n.DateTimePatterns_so_SO', 'goog.i18n.DateTimePatterns_sq_AL', 'goog.i18n.DateTimePatterns_sq_MK', 'goog.i18n.DateTimePatterns_sq_XK', 'goog.i18n.DateTimePatterns_sr_Cyrl', 'goog.i18n.DateTimePatterns_sr_Cyrl_BA', 'goog.i18n.DateTimePatterns_sr_Cyrl_ME', 'goog.i18n.DateTimePatterns_sr_Cyrl_RS', 'goog.i18n.DateTimePatterns_sr_Cyrl_XK', 'goog.i18n.DateTimePatterns_sr_Latn_BA', 'goog.i18n.DateTimePatterns_sr_Latn_ME', 'goog.i18n.DateTimePatterns_sr_Latn_RS', 'goog.i18n.DateTimePatterns_sr_Latn_XK', 'goog.i18n.DateTimePatterns_sv_AX', 'goog.i18n.DateTimePatterns_sv_FI', 'goog.i18n.DateTimePatterns_sv_SE', 'goog.i18n.DateTimePatterns_sw_CD', 'goog.i18n.DateTimePatterns_sw_KE', 'goog.i18n.DateTimePatterns_sw_TZ', 'goog.i18n.DateTimePatterns_sw_UG', 'goog.i18n.DateTimePatterns_ta_IN', 'goog.i18n.DateTimePatterns_ta_LK', 'goog.i18n.DateTimePatterns_ta_MY', 'goog.i18n.DateTimePatterns_ta_SG', 'goog.i18n.DateTimePatterns_te_IN', 'goog.i18n.DateTimePatterns_teo', 'goog.i18n.DateTimePatterns_teo_KE', 'goog.i18n.DateTimePatterns_teo_UG', 'goog.i18n.DateTimePatterns_th_TH', 'goog.i18n.DateTimePatterns_ti', 'goog.i18n.DateTimePatterns_ti_ER', 'goog.i18n.DateTimePatterns_ti_ET', 'goog.i18n.DateTimePatterns_to', 'goog.i18n.DateTimePatterns_to_TO', 'goog.i18n.DateTimePatterns_tr_CY', 'goog.i18n.DateTimePatterns_tr_TR', 'goog.i18n.DateTimePatterns_twq', 'goog.i18n.DateTimePatterns_twq_NE', 'goog.i18n.DateTimePatterns_tzm', 'goog.i18n.DateTimePatterns_tzm_Latn', 'goog.i18n.DateTimePatterns_tzm_Latn_MA', 'goog.i18n.DateTimePatterns_ug', 'goog.i18n.DateTimePatterns_ug_Arab', 'goog.i18n.DateTimePatterns_ug_Arab_CN', 'goog.i18n.DateTimePatterns_uk_UA', 'goog.i18n.DateTimePatterns_ur_IN', 'goog.i18n.DateTimePatterns_ur_PK', 'goog.i18n.DateTimePatterns_uz_Arab', 'goog.i18n.DateTimePatterns_uz_Arab_AF', 'goog.i18n.DateTimePatterns_uz_Cyrl', 'goog.i18n.DateTimePatterns_uz_Cyrl_UZ', 'goog.i18n.DateTimePatterns_uz_Latn', 'goog.i18n.DateTimePatterns_uz_Latn_UZ', 'goog.i18n.DateTimePatterns_vai', 'goog.i18n.DateTimePatterns_vai_Latn', 'goog.i18n.DateTimePatterns_vai_Latn_LR', 'goog.i18n.DateTimePatterns_vai_Vaii', 'goog.i18n.DateTimePatterns_vai_Vaii_LR', 'goog.i18n.DateTimePatterns_vi_VN', 'goog.i18n.DateTimePatterns_vun', 'goog.i18n.DateTimePatterns_vun_TZ', 'goog.i18n.DateTimePatterns_wae', 'goog.i18n.DateTimePatterns_wae_CH', 'goog.i18n.DateTimePatterns_xog', 'goog.i18n.DateTimePatterns_xog_UG', 'goog.i18n.DateTimePatterns_yav', 'goog.i18n.DateTimePatterns_yav_CM', 'goog.i18n.DateTimePatterns_yi', 'goog.i18n.DateTimePatterns_yi_001', 'goog.i18n.DateTimePatterns_yo', 'goog.i18n.DateTimePatterns_yo_BJ', 'goog.i18n.DateTimePatterns_yo_NG', 'goog.i18n.DateTimePatterns_zgh', 'goog.i18n.DateTimePatterns_zgh_MA', 'goog.i18n.DateTimePatterns_zh_Hans', 'goog.i18n.DateTimePatterns_zh_Hans_CN', 'goog.i18n.DateTimePatterns_zh_Hans_HK', 'goog.i18n.DateTimePatterns_zh_Hans_MO', 'goog.i18n.DateTimePatterns_zh_Hans_SG', 'goog.i18n.DateTimePatterns_zh_Hant', 'goog.i18n.DateTimePatterns_zh_Hant_HK', 'goog.i18n.DateTimePatterns_zh_Hant_MO', 'goog.i18n.DateTimePatterns_zh_Hant_TW', 'goog.i18n.DateTimePatterns_zu_ZA'], ['goog.i18n.DateTimePatterns'], false); goog.addDependency('i18n/datetimesymbols.js', ['goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_af', 'goog.i18n.DateTimeSymbols_am', 'goog.i18n.DateTimeSymbols_ar', 'goog.i18n.DateTimeSymbols_az', 'goog.i18n.DateTimeSymbols_be', 'goog.i18n.DateTimeSymbols_bg', 'goog.i18n.DateTimeSymbols_bn', 'goog.i18n.DateTimeSymbols_br', 'goog.i18n.DateTimeSymbols_bs', 'goog.i18n.DateTimeSymbols_ca', 'goog.i18n.DateTimeSymbols_chr', 'goog.i18n.DateTimeSymbols_cs', 'goog.i18n.DateTimeSymbols_cy', 'goog.i18n.DateTimeSymbols_da', 'goog.i18n.DateTimeSymbols_de', 'goog.i18n.DateTimeSymbols_de_AT', 'goog.i18n.DateTimeSymbols_de_CH', 'goog.i18n.DateTimeSymbols_el', 'goog.i18n.DateTimeSymbols_en', 'goog.i18n.DateTimeSymbols_en_AU', 'goog.i18n.DateTimeSymbols_en_CA', 'goog.i18n.DateTimeSymbols_en_GB', 'goog.i18n.DateTimeSymbols_en_IE', 'goog.i18n.DateTimeSymbols_en_IN', 'goog.i18n.DateTimeSymbols_en_ISO', 'goog.i18n.DateTimeSymbols_en_SG', 'goog.i18n.DateTimeSymbols_en_US', 'goog.i18n.DateTimeSymbols_en_ZA', 'goog.i18n.DateTimeSymbols_es', 'goog.i18n.DateTimeSymbols_es_419', 'goog.i18n.DateTimeSymbols_es_ES', 'goog.i18n.DateTimeSymbols_es_MX', 'goog.i18n.DateTimeSymbols_es_US', 'goog.i18n.DateTimeSymbols_et', 'goog.i18n.DateTimeSymbols_eu', 'goog.i18n.DateTimeSymbols_fa', 'goog.i18n.DateTimeSymbols_fi', 'goog.i18n.DateTimeSymbols_fil', 'goog.i18n.DateTimeSymbols_fr', 'goog.i18n.DateTimeSymbols_fr_CA', 'goog.i18n.DateTimeSymbols_ga', 'goog.i18n.DateTimeSymbols_gl', 'goog.i18n.DateTimeSymbols_gsw', 'goog.i18n.DateTimeSymbols_gu', 'goog.i18n.DateTimeSymbols_haw', 'goog.i18n.DateTimeSymbols_he', 'goog.i18n.DateTimeSymbols_hi', 'goog.i18n.DateTimeSymbols_hr', 'goog.i18n.DateTimeSymbols_hu', 'goog.i18n.DateTimeSymbols_hy', 'goog.i18n.DateTimeSymbols_id', 'goog.i18n.DateTimeSymbols_in', 'goog.i18n.DateTimeSymbols_is', 'goog.i18n.DateTimeSymbols_it', 'goog.i18n.DateTimeSymbols_iw', 'goog.i18n.DateTimeSymbols_ja', 'goog.i18n.DateTimeSymbols_ka', 'goog.i18n.DateTimeSymbols_kk', 'goog.i18n.DateTimeSymbols_km', 'goog.i18n.DateTimeSymbols_kn', 'goog.i18n.DateTimeSymbols_ko', 'goog.i18n.DateTimeSymbols_ky', 'goog.i18n.DateTimeSymbols_ln', 'goog.i18n.DateTimeSymbols_lo', 'goog.i18n.DateTimeSymbols_lt', 'goog.i18n.DateTimeSymbols_lv', 'goog.i18n.DateTimeSymbols_mk', 'goog.i18n.DateTimeSymbols_ml', 'goog.i18n.DateTimeSymbols_mn', 'goog.i18n.DateTimeSymbols_mr', 'goog.i18n.DateTimeSymbols_ms', 'goog.i18n.DateTimeSymbols_mt', 'goog.i18n.DateTimeSymbols_my', 'goog.i18n.DateTimeSymbols_nb', 'goog.i18n.DateTimeSymbols_ne', 'goog.i18n.DateTimeSymbols_nl', 'goog.i18n.DateTimeSymbols_no', 'goog.i18n.DateTimeSymbols_no_NO', 'goog.i18n.DateTimeSymbols_or', 'goog.i18n.DateTimeSymbols_pa', 'goog.i18n.DateTimeSymbols_pl', 'goog.i18n.DateTimeSymbols_pt', 'goog.i18n.DateTimeSymbols_pt_BR', 'goog.i18n.DateTimeSymbols_pt_PT', 'goog.i18n.DateTimeSymbols_ro', 'goog.i18n.DateTimeSymbols_ru', 'goog.i18n.DateTimeSymbols_si', 'goog.i18n.DateTimeSymbols_sk', 'goog.i18n.DateTimeSymbols_sl', 'goog.i18n.DateTimeSymbols_sq', 'goog.i18n.DateTimeSymbols_sr', 'goog.i18n.DateTimeSymbols_sr_Latn', 'goog.i18n.DateTimeSymbols_sv', 'goog.i18n.DateTimeSymbols_sw', 'goog.i18n.DateTimeSymbols_ta', 'goog.i18n.DateTimeSymbols_te', 'goog.i18n.DateTimeSymbols_th', 'goog.i18n.DateTimeSymbols_tl', 'goog.i18n.DateTimeSymbols_tr', 'goog.i18n.DateTimeSymbols_uk', 'goog.i18n.DateTimeSymbols_ur', 'goog.i18n.DateTimeSymbols_uz', 'goog.i18n.DateTimeSymbols_vi', 'goog.i18n.DateTimeSymbols_zh', 'goog.i18n.DateTimeSymbols_zh_CN', 'goog.i18n.DateTimeSymbols_zh_HK', 'goog.i18n.DateTimeSymbols_zh_TW', 'goog.i18n.DateTimeSymbols_zu'], [], false); goog.addDependency('i18n/datetimesymbolsext.js', ['goog.i18n.DateTimeSymbolsExt', 'goog.i18n.DateTimeSymbols_af_NA', 'goog.i18n.DateTimeSymbols_af_ZA', 'goog.i18n.DateTimeSymbols_agq', 'goog.i18n.DateTimeSymbols_agq_CM', 'goog.i18n.DateTimeSymbols_ak', 'goog.i18n.DateTimeSymbols_ak_GH', 'goog.i18n.DateTimeSymbols_am_ET', 'goog.i18n.DateTimeSymbols_ar_001', 'goog.i18n.DateTimeSymbols_ar_AE', 'goog.i18n.DateTimeSymbols_ar_BH', 'goog.i18n.DateTimeSymbols_ar_DJ', 'goog.i18n.DateTimeSymbols_ar_DZ', 'goog.i18n.DateTimeSymbols_ar_EG', 'goog.i18n.DateTimeSymbols_ar_EH', 'goog.i18n.DateTimeSymbols_ar_ER', 'goog.i18n.DateTimeSymbols_ar_IL', 'goog.i18n.DateTimeSymbols_ar_IQ', 'goog.i18n.DateTimeSymbols_ar_JO', 'goog.i18n.DateTimeSymbols_ar_KM', 'goog.i18n.DateTimeSymbols_ar_KW', 'goog.i18n.DateTimeSymbols_ar_LB', 'goog.i18n.DateTimeSymbols_ar_LY', 'goog.i18n.DateTimeSymbols_ar_MA', 'goog.i18n.DateTimeSymbols_ar_MR', 'goog.i18n.DateTimeSymbols_ar_OM', 'goog.i18n.DateTimeSymbols_ar_PS', 'goog.i18n.DateTimeSymbols_ar_QA', 'goog.i18n.DateTimeSymbols_ar_SA', 'goog.i18n.DateTimeSymbols_ar_SD', 'goog.i18n.DateTimeSymbols_ar_SO', 'goog.i18n.DateTimeSymbols_ar_SS', 'goog.i18n.DateTimeSymbols_ar_SY', 'goog.i18n.DateTimeSymbols_ar_TD', 'goog.i18n.DateTimeSymbols_ar_TN', 'goog.i18n.DateTimeSymbols_ar_YE', 'goog.i18n.DateTimeSymbols_as', 'goog.i18n.DateTimeSymbols_as_IN', 'goog.i18n.DateTimeSymbols_asa', 'goog.i18n.DateTimeSymbols_asa_TZ', 'goog.i18n.DateTimeSymbols_ast', 'goog.i18n.DateTimeSymbols_ast_ES', 'goog.i18n.DateTimeSymbols_az_Cyrl', 'goog.i18n.DateTimeSymbols_az_Cyrl_AZ', 'goog.i18n.DateTimeSymbols_az_Latn', 'goog.i18n.DateTimeSymbols_az_Latn_AZ', 'goog.i18n.DateTimeSymbols_bas', 'goog.i18n.DateTimeSymbols_bas_CM', 'goog.i18n.DateTimeSymbols_be_BY', 'goog.i18n.DateTimeSymbols_bem', 'goog.i18n.DateTimeSymbols_bem_ZM', 'goog.i18n.DateTimeSymbols_bez', 'goog.i18n.DateTimeSymbols_bez_TZ', 'goog.i18n.DateTimeSymbols_bg_BG', 'goog.i18n.DateTimeSymbols_bm', 'goog.i18n.DateTimeSymbols_bm_Latn', 'goog.i18n.DateTimeSymbols_bm_Latn_ML', 'goog.i18n.DateTimeSymbols_bn_BD', 'goog.i18n.DateTimeSymbols_bn_IN', 'goog.i18n.DateTimeSymbols_bo', 'goog.i18n.DateTimeSymbols_bo_CN', 'goog.i18n.DateTimeSymbols_bo_IN', 'goog.i18n.DateTimeSymbols_br_FR', 'goog.i18n.DateTimeSymbols_brx', 'goog.i18n.DateTimeSymbols_brx_IN', 'goog.i18n.DateTimeSymbols_bs_Cyrl', 'goog.i18n.DateTimeSymbols_bs_Cyrl_BA', 'goog.i18n.DateTimeSymbols_bs_Latn', 'goog.i18n.DateTimeSymbols_bs_Latn_BA', 'goog.i18n.DateTimeSymbols_ca_AD', 'goog.i18n.DateTimeSymbols_ca_ES', 'goog.i18n.DateTimeSymbols_ca_ES_VALENCIA', 'goog.i18n.DateTimeSymbols_ca_FR', 'goog.i18n.DateTimeSymbols_ca_IT', 'goog.i18n.DateTimeSymbols_cgg', 'goog.i18n.DateTimeSymbols_cgg_UG', 'goog.i18n.DateTimeSymbols_chr_US', 'goog.i18n.DateTimeSymbols_ckb', 'goog.i18n.DateTimeSymbols_ckb_Arab', 'goog.i18n.DateTimeSymbols_ckb_Arab_IQ', 'goog.i18n.DateTimeSymbols_ckb_Arab_IR', 'goog.i18n.DateTimeSymbols_ckb_IQ', 'goog.i18n.DateTimeSymbols_ckb_IR', 'goog.i18n.DateTimeSymbols_ckb_Latn', 'goog.i18n.DateTimeSymbols_ckb_Latn_IQ', 'goog.i18n.DateTimeSymbols_cs_CZ', 'goog.i18n.DateTimeSymbols_cy_GB', 'goog.i18n.DateTimeSymbols_da_DK', 'goog.i18n.DateTimeSymbols_da_GL', 'goog.i18n.DateTimeSymbols_dav', 'goog.i18n.DateTimeSymbols_dav_KE', 'goog.i18n.DateTimeSymbols_de_BE', 'goog.i18n.DateTimeSymbols_de_DE', 'goog.i18n.DateTimeSymbols_de_LI', 'goog.i18n.DateTimeSymbols_de_LU', 'goog.i18n.DateTimeSymbols_dje', 'goog.i18n.DateTimeSymbols_dje_NE', 'goog.i18n.DateTimeSymbols_dsb', 'goog.i18n.DateTimeSymbols_dsb_DE', 'goog.i18n.DateTimeSymbols_dua', 'goog.i18n.DateTimeSymbols_dua_CM', 'goog.i18n.DateTimeSymbols_dyo', 'goog.i18n.DateTimeSymbols_dyo_SN', 'goog.i18n.DateTimeSymbols_dz', 'goog.i18n.DateTimeSymbols_dz_BT', 'goog.i18n.DateTimeSymbols_ebu', 'goog.i18n.DateTimeSymbols_ebu_KE', 'goog.i18n.DateTimeSymbols_ee', 'goog.i18n.DateTimeSymbols_ee_GH', 'goog.i18n.DateTimeSymbols_ee_TG', 'goog.i18n.DateTimeSymbols_el_CY', 'goog.i18n.DateTimeSymbols_el_GR', 'goog.i18n.DateTimeSymbols_en_001', 'goog.i18n.DateTimeSymbols_en_150', 'goog.i18n.DateTimeSymbols_en_AG', 'goog.i18n.DateTimeSymbols_en_AI', 'goog.i18n.DateTimeSymbols_en_AS', 'goog.i18n.DateTimeSymbols_en_BB', 'goog.i18n.DateTimeSymbols_en_BE', 'goog.i18n.DateTimeSymbols_en_BM', 'goog.i18n.DateTimeSymbols_en_BS', 'goog.i18n.DateTimeSymbols_en_BW', 'goog.i18n.DateTimeSymbols_en_BZ', 'goog.i18n.DateTimeSymbols_en_CC', 'goog.i18n.DateTimeSymbols_en_CK', 'goog.i18n.DateTimeSymbols_en_CM', 'goog.i18n.DateTimeSymbols_en_CX', 'goog.i18n.DateTimeSymbols_en_DG', 'goog.i18n.DateTimeSymbols_en_DM', 'goog.i18n.DateTimeSymbols_en_ER', 'goog.i18n.DateTimeSymbols_en_FJ', 'goog.i18n.DateTimeSymbols_en_FK', 'goog.i18n.DateTimeSymbols_en_FM', 'goog.i18n.DateTimeSymbols_en_GD', 'goog.i18n.DateTimeSymbols_en_GG', 'goog.i18n.DateTimeSymbols_en_GH', 'goog.i18n.DateTimeSymbols_en_GI', 'goog.i18n.DateTimeSymbols_en_GM', 'goog.i18n.DateTimeSymbols_en_GU', 'goog.i18n.DateTimeSymbols_en_GY', 'goog.i18n.DateTimeSymbols_en_HK', 'goog.i18n.DateTimeSymbols_en_IM', 'goog.i18n.DateTimeSymbols_en_IO', 'goog.i18n.DateTimeSymbols_en_JE', 'goog.i18n.DateTimeSymbols_en_JM', 'goog.i18n.DateTimeSymbols_en_KE', 'goog.i18n.DateTimeSymbols_en_KI', 'goog.i18n.DateTimeSymbols_en_KN', 'goog.i18n.DateTimeSymbols_en_KY', 'goog.i18n.DateTimeSymbols_en_LC', 'goog.i18n.DateTimeSymbols_en_LR', 'goog.i18n.DateTimeSymbols_en_LS', 'goog.i18n.DateTimeSymbols_en_MG', 'goog.i18n.DateTimeSymbols_en_MH', 'goog.i18n.DateTimeSymbols_en_MO', 'goog.i18n.DateTimeSymbols_en_MP', 'goog.i18n.DateTimeSymbols_en_MS', 'goog.i18n.DateTimeSymbols_en_MT', 'goog.i18n.DateTimeSymbols_en_MU', 'goog.i18n.DateTimeSymbols_en_MW', 'goog.i18n.DateTimeSymbols_en_MY', 'goog.i18n.DateTimeSymbols_en_NA', 'goog.i18n.DateTimeSymbols_en_NF', 'goog.i18n.DateTimeSymbols_en_NG', 'goog.i18n.DateTimeSymbols_en_NR', 'goog.i18n.DateTimeSymbols_en_NU', 'goog.i18n.DateTimeSymbols_en_NZ', 'goog.i18n.DateTimeSymbols_en_PG', 'goog.i18n.DateTimeSymbols_en_PH', 'goog.i18n.DateTimeSymbols_en_PK', 'goog.i18n.DateTimeSymbols_en_PN', 'goog.i18n.DateTimeSymbols_en_PR', 'goog.i18n.DateTimeSymbols_en_PW', 'goog.i18n.DateTimeSymbols_en_RW', 'goog.i18n.DateTimeSymbols_en_SB', 'goog.i18n.DateTimeSymbols_en_SC', 'goog.i18n.DateTimeSymbols_en_SD', 'goog.i18n.DateTimeSymbols_en_SH', 'goog.i18n.DateTimeSymbols_en_SL', 'goog.i18n.DateTimeSymbols_en_SS', 'goog.i18n.DateTimeSymbols_en_SX', 'goog.i18n.DateTimeSymbols_en_SZ', 'goog.i18n.DateTimeSymbols_en_TC', 'goog.i18n.DateTimeSymbols_en_TK', 'goog.i18n.DateTimeSymbols_en_TO', 'goog.i18n.DateTimeSymbols_en_TT', 'goog.i18n.DateTimeSymbols_en_TV', 'goog.i18n.DateTimeSymbols_en_TZ', 'goog.i18n.DateTimeSymbols_en_UG', 'goog.i18n.DateTimeSymbols_en_UM', 'goog.i18n.DateTimeSymbols_en_VC', 'goog.i18n.DateTimeSymbols_en_VG', 'goog.i18n.DateTimeSymbols_en_VI', 'goog.i18n.DateTimeSymbols_en_VU', 'goog.i18n.DateTimeSymbols_en_WS', 'goog.i18n.DateTimeSymbols_en_ZM', 'goog.i18n.DateTimeSymbols_en_ZW', 'goog.i18n.DateTimeSymbols_eo', 'goog.i18n.DateTimeSymbols_eo_001', 'goog.i18n.DateTimeSymbols_es_AR', 'goog.i18n.DateTimeSymbols_es_BO', 'goog.i18n.DateTimeSymbols_es_CL', 'goog.i18n.DateTimeSymbols_es_CO', 'goog.i18n.DateTimeSymbols_es_CR', 'goog.i18n.DateTimeSymbols_es_CU', 'goog.i18n.DateTimeSymbols_es_DO', 'goog.i18n.DateTimeSymbols_es_EA', 'goog.i18n.DateTimeSymbols_es_EC', 'goog.i18n.DateTimeSymbols_es_GQ', 'goog.i18n.DateTimeSymbols_es_GT', 'goog.i18n.DateTimeSymbols_es_HN', 'goog.i18n.DateTimeSymbols_es_IC', 'goog.i18n.DateTimeSymbols_es_NI', 'goog.i18n.DateTimeSymbols_es_PA', 'goog.i18n.DateTimeSymbols_es_PE', 'goog.i18n.DateTimeSymbols_es_PH', 'goog.i18n.DateTimeSymbols_es_PR', 'goog.i18n.DateTimeSymbols_es_PY', 'goog.i18n.DateTimeSymbols_es_SV', 'goog.i18n.DateTimeSymbols_es_UY', 'goog.i18n.DateTimeSymbols_es_VE', 'goog.i18n.DateTimeSymbols_et_EE', 'goog.i18n.DateTimeSymbols_eu_ES', 'goog.i18n.DateTimeSymbols_ewo', 'goog.i18n.DateTimeSymbols_ewo_CM', 'goog.i18n.DateTimeSymbols_fa_AF', 'goog.i18n.DateTimeSymbols_fa_IR', 'goog.i18n.DateTimeSymbols_ff', 'goog.i18n.DateTimeSymbols_ff_CM', 'goog.i18n.DateTimeSymbols_ff_GN', 'goog.i18n.DateTimeSymbols_ff_MR', 'goog.i18n.DateTimeSymbols_ff_SN', 'goog.i18n.DateTimeSymbols_fi_FI', 'goog.i18n.DateTimeSymbols_fil_PH', 'goog.i18n.DateTimeSymbols_fo', 'goog.i18n.DateTimeSymbols_fo_FO', 'goog.i18n.DateTimeSymbols_fr_BE', 'goog.i18n.DateTimeSymbols_fr_BF', 'goog.i18n.DateTimeSymbols_fr_BI', 'goog.i18n.DateTimeSymbols_fr_BJ', 'goog.i18n.DateTimeSymbols_fr_BL', 'goog.i18n.DateTimeSymbols_fr_CD', 'goog.i18n.DateTimeSymbols_fr_CF', 'goog.i18n.DateTimeSymbols_fr_CG', 'goog.i18n.DateTimeSymbols_fr_CH', 'goog.i18n.DateTimeSymbols_fr_CI', 'goog.i18n.DateTimeSymbols_fr_CM', 'goog.i18n.DateTimeSymbols_fr_DJ', 'goog.i18n.DateTimeSymbols_fr_DZ', 'goog.i18n.DateTimeSymbols_fr_FR', 'goog.i18n.DateTimeSymbols_fr_GA', 'goog.i18n.DateTimeSymbols_fr_GF', 'goog.i18n.DateTimeSymbols_fr_GN', 'goog.i18n.DateTimeSymbols_fr_GP', 'goog.i18n.DateTimeSymbols_fr_GQ', 'goog.i18n.DateTimeSymbols_fr_HT', 'goog.i18n.DateTimeSymbols_fr_KM', 'goog.i18n.DateTimeSymbols_fr_LU', 'goog.i18n.DateTimeSymbols_fr_MA', 'goog.i18n.DateTimeSymbols_fr_MC', 'goog.i18n.DateTimeSymbols_fr_MF', 'goog.i18n.DateTimeSymbols_fr_MG', 'goog.i18n.DateTimeSymbols_fr_ML', 'goog.i18n.DateTimeSymbols_fr_MQ', 'goog.i18n.DateTimeSymbols_fr_MR', 'goog.i18n.DateTimeSymbols_fr_MU', 'goog.i18n.DateTimeSymbols_fr_NC', 'goog.i18n.DateTimeSymbols_fr_NE', 'goog.i18n.DateTimeSymbols_fr_PF', 'goog.i18n.DateTimeSymbols_fr_PM', 'goog.i18n.DateTimeSymbols_fr_RE', 'goog.i18n.DateTimeSymbols_fr_RW', 'goog.i18n.DateTimeSymbols_fr_SC', 'goog.i18n.DateTimeSymbols_fr_SN', 'goog.i18n.DateTimeSymbols_fr_SY', 'goog.i18n.DateTimeSymbols_fr_TD', 'goog.i18n.DateTimeSymbols_fr_TG', 'goog.i18n.DateTimeSymbols_fr_TN', 'goog.i18n.DateTimeSymbols_fr_VU', 'goog.i18n.DateTimeSymbols_fr_WF', 'goog.i18n.DateTimeSymbols_fr_YT', 'goog.i18n.DateTimeSymbols_fur', 'goog.i18n.DateTimeSymbols_fur_IT', 'goog.i18n.DateTimeSymbols_fy', 'goog.i18n.DateTimeSymbols_fy_NL', 'goog.i18n.DateTimeSymbols_ga_IE', 'goog.i18n.DateTimeSymbols_gd', 'goog.i18n.DateTimeSymbols_gd_GB', 'goog.i18n.DateTimeSymbols_gl_ES', 'goog.i18n.DateTimeSymbols_gsw_CH', 'goog.i18n.DateTimeSymbols_gsw_FR', 'goog.i18n.DateTimeSymbols_gsw_LI', 'goog.i18n.DateTimeSymbols_gu_IN', 'goog.i18n.DateTimeSymbols_guz', 'goog.i18n.DateTimeSymbols_guz_KE', 'goog.i18n.DateTimeSymbols_gv', 'goog.i18n.DateTimeSymbols_gv_IM', 'goog.i18n.DateTimeSymbols_ha', 'goog.i18n.DateTimeSymbols_ha_Latn', 'goog.i18n.DateTimeSymbols_ha_Latn_GH', 'goog.i18n.DateTimeSymbols_ha_Latn_NE', 'goog.i18n.DateTimeSymbols_ha_Latn_NG', 'goog.i18n.DateTimeSymbols_haw_US', 'goog.i18n.DateTimeSymbols_he_IL', 'goog.i18n.DateTimeSymbols_hi_IN', 'goog.i18n.DateTimeSymbols_hr_BA', 'goog.i18n.DateTimeSymbols_hr_HR', 'goog.i18n.DateTimeSymbols_hsb', 'goog.i18n.DateTimeSymbols_hsb_DE', 'goog.i18n.DateTimeSymbols_hu_HU', 'goog.i18n.DateTimeSymbols_hy_AM', 'goog.i18n.DateTimeSymbols_id_ID', 'goog.i18n.DateTimeSymbols_ig', 'goog.i18n.DateTimeSymbols_ig_NG', 'goog.i18n.DateTimeSymbols_ii', 'goog.i18n.DateTimeSymbols_ii_CN', 'goog.i18n.DateTimeSymbols_is_IS', 'goog.i18n.DateTimeSymbols_it_CH', 'goog.i18n.DateTimeSymbols_it_IT', 'goog.i18n.DateTimeSymbols_it_SM', 'goog.i18n.DateTimeSymbols_ja_JP', 'goog.i18n.DateTimeSymbols_jgo', 'goog.i18n.DateTimeSymbols_jgo_CM', 'goog.i18n.DateTimeSymbols_jmc', 'goog.i18n.DateTimeSymbols_jmc_TZ', 'goog.i18n.DateTimeSymbols_ka_GE', 'goog.i18n.DateTimeSymbols_kab', 'goog.i18n.DateTimeSymbols_kab_DZ', 'goog.i18n.DateTimeSymbols_kam', 'goog.i18n.DateTimeSymbols_kam_KE', 'goog.i18n.DateTimeSymbols_kde', 'goog.i18n.DateTimeSymbols_kde_TZ', 'goog.i18n.DateTimeSymbols_kea', 'goog.i18n.DateTimeSymbols_kea_CV', 'goog.i18n.DateTimeSymbols_khq', 'goog.i18n.DateTimeSymbols_khq_ML', 'goog.i18n.DateTimeSymbols_ki', 'goog.i18n.DateTimeSymbols_ki_KE', 'goog.i18n.DateTimeSymbols_kk_Cyrl', 'goog.i18n.DateTimeSymbols_kk_Cyrl_KZ', 'goog.i18n.DateTimeSymbols_kkj', 'goog.i18n.DateTimeSymbols_kkj_CM', 'goog.i18n.DateTimeSymbols_kl', 'goog.i18n.DateTimeSymbols_kl_GL', 'goog.i18n.DateTimeSymbols_kln', 'goog.i18n.DateTimeSymbols_kln_KE', 'goog.i18n.DateTimeSymbols_km_KH', 'goog.i18n.DateTimeSymbols_kn_IN', 'goog.i18n.DateTimeSymbols_ko_KP', 'goog.i18n.DateTimeSymbols_ko_KR', 'goog.i18n.DateTimeSymbols_kok', 'goog.i18n.DateTimeSymbols_kok_IN', 'goog.i18n.DateTimeSymbols_ks', 'goog.i18n.DateTimeSymbols_ks_Arab', 'goog.i18n.DateTimeSymbols_ks_Arab_IN', 'goog.i18n.DateTimeSymbols_ksb', 'goog.i18n.DateTimeSymbols_ksb_TZ', 'goog.i18n.DateTimeSymbols_ksf', 'goog.i18n.DateTimeSymbols_ksf_CM', 'goog.i18n.DateTimeSymbols_ksh', 'goog.i18n.DateTimeSymbols_ksh_DE', 'goog.i18n.DateTimeSymbols_kw', 'goog.i18n.DateTimeSymbols_kw_GB', 'goog.i18n.DateTimeSymbols_ky_Cyrl', 'goog.i18n.DateTimeSymbols_ky_Cyrl_KG', 'goog.i18n.DateTimeSymbols_lag', 'goog.i18n.DateTimeSymbols_lag_TZ', 'goog.i18n.DateTimeSymbols_lb', 'goog.i18n.DateTimeSymbols_lb_LU', 'goog.i18n.DateTimeSymbols_lg', 'goog.i18n.DateTimeSymbols_lg_UG', 'goog.i18n.DateTimeSymbols_lkt', 'goog.i18n.DateTimeSymbols_lkt_US', 'goog.i18n.DateTimeSymbols_ln_AO', 'goog.i18n.DateTimeSymbols_ln_CD', 'goog.i18n.DateTimeSymbols_ln_CF', 'goog.i18n.DateTimeSymbols_ln_CG', 'goog.i18n.DateTimeSymbols_lo_LA', 'goog.i18n.DateTimeSymbols_lt_LT', 'goog.i18n.DateTimeSymbols_lu', 'goog.i18n.DateTimeSymbols_lu_CD', 'goog.i18n.DateTimeSymbols_luo', 'goog.i18n.DateTimeSymbols_luo_KE', 'goog.i18n.DateTimeSymbols_luy', 'goog.i18n.DateTimeSymbols_luy_KE', 'goog.i18n.DateTimeSymbols_lv_LV', 'goog.i18n.DateTimeSymbols_mas', 'goog.i18n.DateTimeSymbols_mas_KE', 'goog.i18n.DateTimeSymbols_mas_TZ', 'goog.i18n.DateTimeSymbols_mer', 'goog.i18n.DateTimeSymbols_mer_KE', 'goog.i18n.DateTimeSymbols_mfe', 'goog.i18n.DateTimeSymbols_mfe_MU', 'goog.i18n.DateTimeSymbols_mg', 'goog.i18n.DateTimeSymbols_mg_MG', 'goog.i18n.DateTimeSymbols_mgh', 'goog.i18n.DateTimeSymbols_mgh_MZ', 'goog.i18n.DateTimeSymbols_mgo', 'goog.i18n.DateTimeSymbols_mgo_CM', 'goog.i18n.DateTimeSymbols_mk_MK', 'goog.i18n.DateTimeSymbols_ml_IN', 'goog.i18n.DateTimeSymbols_mn_Cyrl', 'goog.i18n.DateTimeSymbols_mn_Cyrl_MN', 'goog.i18n.DateTimeSymbols_mr_IN', 'goog.i18n.DateTimeSymbols_ms_Latn', 'goog.i18n.DateTimeSymbols_ms_Latn_BN', 'goog.i18n.DateTimeSymbols_ms_Latn_MY', 'goog.i18n.DateTimeSymbols_ms_Latn_SG', 'goog.i18n.DateTimeSymbols_mt_MT', 'goog.i18n.DateTimeSymbols_mua', 'goog.i18n.DateTimeSymbols_mua_CM', 'goog.i18n.DateTimeSymbols_my_MM', 'goog.i18n.DateTimeSymbols_naq', 'goog.i18n.DateTimeSymbols_naq_NA', 'goog.i18n.DateTimeSymbols_nb_NO', 'goog.i18n.DateTimeSymbols_nb_SJ', 'goog.i18n.DateTimeSymbols_nd', 'goog.i18n.DateTimeSymbols_nd_ZW', 'goog.i18n.DateTimeSymbols_ne_IN', 'goog.i18n.DateTimeSymbols_ne_NP', 'goog.i18n.DateTimeSymbols_nl_AW', 'goog.i18n.DateTimeSymbols_nl_BE', 'goog.i18n.DateTimeSymbols_nl_BQ', 'goog.i18n.DateTimeSymbols_nl_CW', 'goog.i18n.DateTimeSymbols_nl_NL', 'goog.i18n.DateTimeSymbols_nl_SR', 'goog.i18n.DateTimeSymbols_nl_SX', 'goog.i18n.DateTimeSymbols_nmg', 'goog.i18n.DateTimeSymbols_nmg_CM', 'goog.i18n.DateTimeSymbols_nn', 'goog.i18n.DateTimeSymbols_nn_NO', 'goog.i18n.DateTimeSymbols_nnh', 'goog.i18n.DateTimeSymbols_nnh_CM', 'goog.i18n.DateTimeSymbols_nus', 'goog.i18n.DateTimeSymbols_nus_SD', 'goog.i18n.DateTimeSymbols_nyn', 'goog.i18n.DateTimeSymbols_nyn_UG', 'goog.i18n.DateTimeSymbols_om', 'goog.i18n.DateTimeSymbols_om_ET', 'goog.i18n.DateTimeSymbols_om_KE', 'goog.i18n.DateTimeSymbols_or_IN', 'goog.i18n.DateTimeSymbols_os', 'goog.i18n.DateTimeSymbols_os_GE', 'goog.i18n.DateTimeSymbols_os_RU', 'goog.i18n.DateTimeSymbols_pa_Arab', 'goog.i18n.DateTimeSymbols_pa_Arab_PK', 'goog.i18n.DateTimeSymbols_pa_Guru', 'goog.i18n.DateTimeSymbols_pa_Guru_IN', 'goog.i18n.DateTimeSymbols_pl_PL', 'goog.i18n.DateTimeSymbols_ps', 'goog.i18n.DateTimeSymbols_ps_AF', 'goog.i18n.DateTimeSymbols_pt_AO', 'goog.i18n.DateTimeSymbols_pt_CV', 'goog.i18n.DateTimeSymbols_pt_GW', 'goog.i18n.DateTimeSymbols_pt_MO', 'goog.i18n.DateTimeSymbols_pt_MZ', 'goog.i18n.DateTimeSymbols_pt_ST', 'goog.i18n.DateTimeSymbols_pt_TL', 'goog.i18n.DateTimeSymbols_qu', 'goog.i18n.DateTimeSymbols_qu_BO', 'goog.i18n.DateTimeSymbols_qu_EC', 'goog.i18n.DateTimeSymbols_qu_PE', 'goog.i18n.DateTimeSymbols_rm', 'goog.i18n.DateTimeSymbols_rm_CH', 'goog.i18n.DateTimeSymbols_rn', 'goog.i18n.DateTimeSymbols_rn_BI', 'goog.i18n.DateTimeSymbols_ro_MD', 'goog.i18n.DateTimeSymbols_ro_RO', 'goog.i18n.DateTimeSymbols_rof', 'goog.i18n.DateTimeSymbols_rof_TZ', 'goog.i18n.DateTimeSymbols_ru_BY', 'goog.i18n.DateTimeSymbols_ru_KG', 'goog.i18n.DateTimeSymbols_ru_KZ', 'goog.i18n.DateTimeSymbols_ru_MD', 'goog.i18n.DateTimeSymbols_ru_RU', 'goog.i18n.DateTimeSymbols_ru_UA', 'goog.i18n.DateTimeSymbols_rw', 'goog.i18n.DateTimeSymbols_rw_RW', 'goog.i18n.DateTimeSymbols_rwk', 'goog.i18n.DateTimeSymbols_rwk_TZ', 'goog.i18n.DateTimeSymbols_sah', 'goog.i18n.DateTimeSymbols_sah_RU', 'goog.i18n.DateTimeSymbols_saq', 'goog.i18n.DateTimeSymbols_saq_KE', 'goog.i18n.DateTimeSymbols_sbp', 'goog.i18n.DateTimeSymbols_sbp_TZ', 'goog.i18n.DateTimeSymbols_se', 'goog.i18n.DateTimeSymbols_se_FI', 'goog.i18n.DateTimeSymbols_se_NO', 'goog.i18n.DateTimeSymbols_se_SE', 'goog.i18n.DateTimeSymbols_seh', 'goog.i18n.DateTimeSymbols_seh_MZ', 'goog.i18n.DateTimeSymbols_ses', 'goog.i18n.DateTimeSymbols_ses_ML', 'goog.i18n.DateTimeSymbols_sg', 'goog.i18n.DateTimeSymbols_sg_CF', 'goog.i18n.DateTimeSymbols_shi', 'goog.i18n.DateTimeSymbols_shi_Latn', 'goog.i18n.DateTimeSymbols_shi_Latn_MA', 'goog.i18n.DateTimeSymbols_shi_Tfng', 'goog.i18n.DateTimeSymbols_shi_Tfng_MA', 'goog.i18n.DateTimeSymbols_si_LK', 'goog.i18n.DateTimeSymbols_sk_SK', 'goog.i18n.DateTimeSymbols_sl_SI', 'goog.i18n.DateTimeSymbols_smn', 'goog.i18n.DateTimeSymbols_smn_FI', 'goog.i18n.DateTimeSymbols_sn', 'goog.i18n.DateTimeSymbols_sn_ZW', 'goog.i18n.DateTimeSymbols_so', 'goog.i18n.DateTimeSymbols_so_DJ', 'goog.i18n.DateTimeSymbols_so_ET', 'goog.i18n.DateTimeSymbols_so_KE', 'goog.i18n.DateTimeSymbols_so_SO', 'goog.i18n.DateTimeSymbols_sq_AL', 'goog.i18n.DateTimeSymbols_sq_MK', 'goog.i18n.DateTimeSymbols_sq_XK', 'goog.i18n.DateTimeSymbols_sr_Cyrl', 'goog.i18n.DateTimeSymbols_sr_Cyrl_BA', 'goog.i18n.DateTimeSymbols_sr_Cyrl_ME', 'goog.i18n.DateTimeSymbols_sr_Cyrl_RS', 'goog.i18n.DateTimeSymbols_sr_Cyrl_XK', 'goog.i18n.DateTimeSymbols_sr_Latn_BA', 'goog.i18n.DateTimeSymbols_sr_Latn_ME', 'goog.i18n.DateTimeSymbols_sr_Latn_RS', 'goog.i18n.DateTimeSymbols_sr_Latn_XK', 'goog.i18n.DateTimeSymbols_sv_AX', 'goog.i18n.DateTimeSymbols_sv_FI', 'goog.i18n.DateTimeSymbols_sv_SE', 'goog.i18n.DateTimeSymbols_sw_CD', 'goog.i18n.DateTimeSymbols_sw_KE', 'goog.i18n.DateTimeSymbols_sw_TZ', 'goog.i18n.DateTimeSymbols_sw_UG', 'goog.i18n.DateTimeSymbols_ta_IN', 'goog.i18n.DateTimeSymbols_ta_LK', 'goog.i18n.DateTimeSymbols_ta_MY', 'goog.i18n.DateTimeSymbols_ta_SG', 'goog.i18n.DateTimeSymbols_te_IN', 'goog.i18n.DateTimeSymbols_teo', 'goog.i18n.DateTimeSymbols_teo_KE', 'goog.i18n.DateTimeSymbols_teo_UG', 'goog.i18n.DateTimeSymbols_th_TH', 'goog.i18n.DateTimeSymbols_ti', 'goog.i18n.DateTimeSymbols_ti_ER', 'goog.i18n.DateTimeSymbols_ti_ET', 'goog.i18n.DateTimeSymbols_to', 'goog.i18n.DateTimeSymbols_to_TO', 'goog.i18n.DateTimeSymbols_tr_CY', 'goog.i18n.DateTimeSymbols_tr_TR', 'goog.i18n.DateTimeSymbols_twq', 'goog.i18n.DateTimeSymbols_twq_NE', 'goog.i18n.DateTimeSymbols_tzm', 'goog.i18n.DateTimeSymbols_tzm_Latn', 'goog.i18n.DateTimeSymbols_tzm_Latn_MA', 'goog.i18n.DateTimeSymbols_ug', 'goog.i18n.DateTimeSymbols_ug_Arab', 'goog.i18n.DateTimeSymbols_ug_Arab_CN', 'goog.i18n.DateTimeSymbols_uk_UA', 'goog.i18n.DateTimeSymbols_ur_IN', 'goog.i18n.DateTimeSymbols_ur_PK', 'goog.i18n.DateTimeSymbols_uz_Arab', 'goog.i18n.DateTimeSymbols_uz_Arab_AF', 'goog.i18n.DateTimeSymbols_uz_Cyrl', 'goog.i18n.DateTimeSymbols_uz_Cyrl_UZ', 'goog.i18n.DateTimeSymbols_uz_Latn', 'goog.i18n.DateTimeSymbols_uz_Latn_UZ', 'goog.i18n.DateTimeSymbols_vai', 'goog.i18n.DateTimeSymbols_vai_Latn', 'goog.i18n.DateTimeSymbols_vai_Latn_LR', 'goog.i18n.DateTimeSymbols_vai_Vaii', 'goog.i18n.DateTimeSymbols_vai_Vaii_LR', 'goog.i18n.DateTimeSymbols_vi_VN', 'goog.i18n.DateTimeSymbols_vun', 'goog.i18n.DateTimeSymbols_vun_TZ', 'goog.i18n.DateTimeSymbols_wae', 'goog.i18n.DateTimeSymbols_wae_CH', 'goog.i18n.DateTimeSymbols_xog', 'goog.i18n.DateTimeSymbols_xog_UG', 'goog.i18n.DateTimeSymbols_yav', 'goog.i18n.DateTimeSymbols_yav_CM', 'goog.i18n.DateTimeSymbols_yi', 'goog.i18n.DateTimeSymbols_yi_001', 'goog.i18n.DateTimeSymbols_yo', 'goog.i18n.DateTimeSymbols_yo_BJ', 'goog.i18n.DateTimeSymbols_yo_NG', 'goog.i18n.DateTimeSymbols_zgh', 'goog.i18n.DateTimeSymbols_zgh_MA', 'goog.i18n.DateTimeSymbols_zh_Hans', 'goog.i18n.DateTimeSymbols_zh_Hans_CN', 'goog.i18n.DateTimeSymbols_zh_Hans_HK', 'goog.i18n.DateTimeSymbols_zh_Hans_MO', 'goog.i18n.DateTimeSymbols_zh_Hans_SG', 'goog.i18n.DateTimeSymbols_zh_Hant', 'goog.i18n.DateTimeSymbols_zh_Hant_HK', 'goog.i18n.DateTimeSymbols_zh_Hant_MO', 'goog.i18n.DateTimeSymbols_zh_Hant_TW', 'goog.i18n.DateTimeSymbols_zu_ZA'], ['goog.i18n.DateTimeSymbols'], false); goog.addDependency('i18n/graphemebreak.js', ['goog.i18n.GraphemeBreak'], ['goog.structs.InversionMap'], false); goog.addDependency('i18n/graphemebreak_test.js', ['goog.i18n.GraphemeBreakTest'], ['goog.i18n.GraphemeBreak', 'goog.testing.jsunit'], false); goog.addDependency('i18n/messageformat.js', ['goog.i18n.MessageFormat'], ['goog.asserts', 'goog.i18n.NumberFormat', 'goog.i18n.ordinalRules', 'goog.i18n.pluralRules'], false); goog.addDependency('i18n/messageformat_test.js', ['goog.i18n.MessageFormatTest'], ['goog.i18n.MessageFormat', 'goog.i18n.NumberFormatSymbols_hr', 'goog.i18n.pluralRules', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('i18n/mime.js', ['goog.i18n.mime', 'goog.i18n.mime.encode'], ['goog.array'], false); goog.addDependency('i18n/mime_test.js', ['goog.i18n.mime.encodeTest'], ['goog.i18n.mime.encode', 'goog.testing.jsunit'], false); goog.addDependency('i18n/numberformat.js', ['goog.i18n.NumberFormat', 'goog.i18n.NumberFormat.CurrencyStyle', 'goog.i18n.NumberFormat.Format'], ['goog.asserts', 'goog.i18n.CompactNumberFormatSymbols', 'goog.i18n.NumberFormatSymbols', 'goog.i18n.currency', 'goog.math'], false); goog.addDependency('i18n/numberformat_test.js', ['goog.i18n.NumberFormatTest'], ['goog.i18n.CompactNumberFormatSymbols', 'goog.i18n.CompactNumberFormatSymbols_de', 'goog.i18n.CompactNumberFormatSymbols_en', 'goog.i18n.CompactNumberFormatSymbols_fr', 'goog.i18n.NumberFormat', 'goog.i18n.NumberFormatSymbols', 'goog.i18n.NumberFormatSymbols_de', 'goog.i18n.NumberFormatSymbols_en', 'goog.i18n.NumberFormatSymbols_fr', 'goog.i18n.NumberFormatSymbols_pl', 'goog.i18n.NumberFormatSymbols_ro', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('i18n/numberformatsymbols.js', ['goog.i18n.NumberFormatSymbols', 'goog.i18n.NumberFormatSymbols_af', 'goog.i18n.NumberFormatSymbols_af_ZA', 'goog.i18n.NumberFormatSymbols_am', 'goog.i18n.NumberFormatSymbols_am_ET', 'goog.i18n.NumberFormatSymbols_ar', 'goog.i18n.NumberFormatSymbols_ar_001', 'goog.i18n.NumberFormatSymbols_ar_EG', 'goog.i18n.NumberFormatSymbols_az', 'goog.i18n.NumberFormatSymbols_az_Latn', 'goog.i18n.NumberFormatSymbols_az_Latn_AZ', 'goog.i18n.NumberFormatSymbols_be', 'goog.i18n.NumberFormatSymbols_be_BY', 'goog.i18n.NumberFormatSymbols_bg', 'goog.i18n.NumberFormatSymbols_bg_BG', 'goog.i18n.NumberFormatSymbols_bn', 'goog.i18n.NumberFormatSymbols_bn_BD', 'goog.i18n.NumberFormatSymbols_br', 'goog.i18n.NumberFormatSymbols_br_FR', 'goog.i18n.NumberFormatSymbols_bs', 'goog.i18n.NumberFormatSymbols_bs_Latn', 'goog.i18n.NumberFormatSymbols_bs_Latn_BA', 'goog.i18n.NumberFormatSymbols_ca', 'goog.i18n.NumberFormatSymbols_ca_AD', 'goog.i18n.NumberFormatSymbols_ca_ES', 'goog.i18n.NumberFormatSymbols_ca_ES_VALENCIA', 'goog.i18n.NumberFormatSymbols_ca_FR', 'goog.i18n.NumberFormatSymbols_ca_IT', 'goog.i18n.NumberFormatSymbols_chr', 'goog.i18n.NumberFormatSymbols_chr_US', 'goog.i18n.NumberFormatSymbols_cs', 'goog.i18n.NumberFormatSymbols_cs_CZ', 'goog.i18n.NumberFormatSymbols_cy', 'goog.i18n.NumberFormatSymbols_cy_GB', 'goog.i18n.NumberFormatSymbols_da', 'goog.i18n.NumberFormatSymbols_da_DK', 'goog.i18n.NumberFormatSymbols_da_GL', 'goog.i18n.NumberFormatSymbols_de', 'goog.i18n.NumberFormatSymbols_de_AT', 'goog.i18n.NumberFormatSymbols_de_BE', 'goog.i18n.NumberFormatSymbols_de_CH', 'goog.i18n.NumberFormatSymbols_de_DE', 'goog.i18n.NumberFormatSymbols_de_LU', 'goog.i18n.NumberFormatSymbols_el', 'goog.i18n.NumberFormatSymbols_el_CY', 'goog.i18n.NumberFormatSymbols_el_GR', 'goog.i18n.NumberFormatSymbols_en', 'goog.i18n.NumberFormatSymbols_en_001', 'goog.i18n.NumberFormatSymbols_en_AS', 'goog.i18n.NumberFormatSymbols_en_AU', 'goog.i18n.NumberFormatSymbols_en_CA', 'goog.i18n.NumberFormatSymbols_en_DG', 'goog.i18n.NumberFormatSymbols_en_FM', 'goog.i18n.NumberFormatSymbols_en_GB', 'goog.i18n.NumberFormatSymbols_en_GU', 'goog.i18n.NumberFormatSymbols_en_IE', 'goog.i18n.NumberFormatSymbols_en_IN', 'goog.i18n.NumberFormatSymbols_en_IO', 'goog.i18n.NumberFormatSymbols_en_MH', 'goog.i18n.NumberFormatSymbols_en_MP', 'goog.i18n.NumberFormatSymbols_en_PR', 'goog.i18n.NumberFormatSymbols_en_PW', 'goog.i18n.NumberFormatSymbols_en_SG', 'goog.i18n.NumberFormatSymbols_en_TC', 'goog.i18n.NumberFormatSymbols_en_UM', 'goog.i18n.NumberFormatSymbols_en_US', 'goog.i18n.NumberFormatSymbols_en_VG', 'goog.i18n.NumberFormatSymbols_en_VI', 'goog.i18n.NumberFormatSymbols_en_ZA', 'goog.i18n.NumberFormatSymbols_en_ZW', 'goog.i18n.NumberFormatSymbols_es', 'goog.i18n.NumberFormatSymbols_es_419', 'goog.i18n.NumberFormatSymbols_es_EA', 'goog.i18n.NumberFormatSymbols_es_ES', 'goog.i18n.NumberFormatSymbols_es_IC', 'goog.i18n.NumberFormatSymbols_es_MX', 'goog.i18n.NumberFormatSymbols_es_US', 'goog.i18n.NumberFormatSymbols_et', 'goog.i18n.NumberFormatSymbols_et_EE', 'goog.i18n.NumberFormatSymbols_eu', 'goog.i18n.NumberFormatSymbols_eu_ES', 'goog.i18n.NumberFormatSymbols_fa', 'goog.i18n.NumberFormatSymbols_fa_IR', 'goog.i18n.NumberFormatSymbols_fi', 'goog.i18n.NumberFormatSymbols_fi_FI', 'goog.i18n.NumberFormatSymbols_fil', 'goog.i18n.NumberFormatSymbols_fil_PH', 'goog.i18n.NumberFormatSymbols_fr', 'goog.i18n.NumberFormatSymbols_fr_BL', 'goog.i18n.NumberFormatSymbols_fr_CA', 'goog.i18n.NumberFormatSymbols_fr_FR', 'goog.i18n.NumberFormatSymbols_fr_GF', 'goog.i18n.NumberFormatSymbols_fr_GP', 'goog.i18n.NumberFormatSymbols_fr_MC', 'goog.i18n.NumberFormatSymbols_fr_MF', 'goog.i18n.NumberFormatSymbols_fr_MQ', 'goog.i18n.NumberFormatSymbols_fr_PM', 'goog.i18n.NumberFormatSymbols_fr_RE', 'goog.i18n.NumberFormatSymbols_fr_YT', 'goog.i18n.NumberFormatSymbols_ga', 'goog.i18n.NumberFormatSymbols_ga_IE', 'goog.i18n.NumberFormatSymbols_gl', 'goog.i18n.NumberFormatSymbols_gl_ES', 'goog.i18n.NumberFormatSymbols_gsw', 'goog.i18n.NumberFormatSymbols_gsw_CH', 'goog.i18n.NumberFormatSymbols_gsw_LI', 'goog.i18n.NumberFormatSymbols_gu', 'goog.i18n.NumberFormatSymbols_gu_IN', 'goog.i18n.NumberFormatSymbols_haw', 'goog.i18n.NumberFormatSymbols_haw_US', 'goog.i18n.NumberFormatSymbols_he', 'goog.i18n.NumberFormatSymbols_he_IL', 'goog.i18n.NumberFormatSymbols_hi', 'goog.i18n.NumberFormatSymbols_hi_IN', 'goog.i18n.NumberFormatSymbols_hr', 'goog.i18n.NumberFormatSymbols_hr_HR', 'goog.i18n.NumberFormatSymbols_hu', 'goog.i18n.NumberFormatSymbols_hu_HU', 'goog.i18n.NumberFormatSymbols_hy', 'goog.i18n.NumberFormatSymbols_hy_AM', 'goog.i18n.NumberFormatSymbols_id', 'goog.i18n.NumberFormatSymbols_id_ID', 'goog.i18n.NumberFormatSymbols_in', 'goog.i18n.NumberFormatSymbols_is', 'goog.i18n.NumberFormatSymbols_is_IS', 'goog.i18n.NumberFormatSymbols_it', 'goog.i18n.NumberFormatSymbols_it_IT', 'goog.i18n.NumberFormatSymbols_it_SM', 'goog.i18n.NumberFormatSymbols_iw', 'goog.i18n.NumberFormatSymbols_ja', 'goog.i18n.NumberFormatSymbols_ja_JP', 'goog.i18n.NumberFormatSymbols_ka', 'goog.i18n.NumberFormatSymbols_ka_GE', 'goog.i18n.NumberFormatSymbols_kk', 'goog.i18n.NumberFormatSymbols_kk_Cyrl', 'goog.i18n.NumberFormatSymbols_kk_Cyrl_KZ', 'goog.i18n.NumberFormatSymbols_km', 'goog.i18n.NumberFormatSymbols_km_KH', 'goog.i18n.NumberFormatSymbols_kn', 'goog.i18n.NumberFormatSymbols_kn_IN', 'goog.i18n.NumberFormatSymbols_ko', 'goog.i18n.NumberFormatSymbols_ko_KR', 'goog.i18n.NumberFormatSymbols_ky', 'goog.i18n.NumberFormatSymbols_ky_Cyrl', 'goog.i18n.NumberFormatSymbols_ky_Cyrl_KG', 'goog.i18n.NumberFormatSymbols_ln', 'goog.i18n.NumberFormatSymbols_ln_CD', 'goog.i18n.NumberFormatSymbols_lo', 'goog.i18n.NumberFormatSymbols_lo_LA', 'goog.i18n.NumberFormatSymbols_lt', 'goog.i18n.NumberFormatSymbols_lt_LT', 'goog.i18n.NumberFormatSymbols_lv', 'goog.i18n.NumberFormatSymbols_lv_LV', 'goog.i18n.NumberFormatSymbols_mk', 'goog.i18n.NumberFormatSymbols_mk_MK', 'goog.i18n.NumberFormatSymbols_ml', 'goog.i18n.NumberFormatSymbols_ml_IN', 'goog.i18n.NumberFormatSymbols_mn', 'goog.i18n.NumberFormatSymbols_mn_Cyrl', 'goog.i18n.NumberFormatSymbols_mn_Cyrl_MN', 'goog.i18n.NumberFormatSymbols_mr', 'goog.i18n.NumberFormatSymbols_mr_IN', 'goog.i18n.NumberFormatSymbols_ms', 'goog.i18n.NumberFormatSymbols_ms_Latn', 'goog.i18n.NumberFormatSymbols_ms_Latn_MY', 'goog.i18n.NumberFormatSymbols_mt', 'goog.i18n.NumberFormatSymbols_mt_MT', 'goog.i18n.NumberFormatSymbols_my', 'goog.i18n.NumberFormatSymbols_my_MM', 'goog.i18n.NumberFormatSymbols_nb', 'goog.i18n.NumberFormatSymbols_nb_NO', 'goog.i18n.NumberFormatSymbols_nb_SJ', 'goog.i18n.NumberFormatSymbols_ne', 'goog.i18n.NumberFormatSymbols_ne_NP', 'goog.i18n.NumberFormatSymbols_nl', 'goog.i18n.NumberFormatSymbols_nl_NL', 'goog.i18n.NumberFormatSymbols_no', 'goog.i18n.NumberFormatSymbols_no_NO', 'goog.i18n.NumberFormatSymbols_or', 'goog.i18n.NumberFormatSymbols_or_IN', 'goog.i18n.NumberFormatSymbols_pa', 'goog.i18n.NumberFormatSymbols_pa_Guru', 'goog.i18n.NumberFormatSymbols_pa_Guru_IN', 'goog.i18n.NumberFormatSymbols_pl', 'goog.i18n.NumberFormatSymbols_pl_PL', 'goog.i18n.NumberFormatSymbols_pt', 'goog.i18n.NumberFormatSymbols_pt_BR', 'goog.i18n.NumberFormatSymbols_pt_PT', 'goog.i18n.NumberFormatSymbols_ro', 'goog.i18n.NumberFormatSymbols_ro_RO', 'goog.i18n.NumberFormatSymbols_ru', 'goog.i18n.NumberFormatSymbols_ru_RU', 'goog.i18n.NumberFormatSymbols_si', 'goog.i18n.NumberFormatSymbols_si_LK', 'goog.i18n.NumberFormatSymbols_sk', 'goog.i18n.NumberFormatSymbols_sk_SK', 'goog.i18n.NumberFormatSymbols_sl', 'goog.i18n.NumberFormatSymbols_sl_SI', 'goog.i18n.NumberFormatSymbols_sq', 'goog.i18n.NumberFormatSymbols_sq_AL', 'goog.i18n.NumberFormatSymbols_sr', 'goog.i18n.NumberFormatSymbols_sr_Cyrl', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_RS', 'goog.i18n.NumberFormatSymbols_sr_Latn', 'goog.i18n.NumberFormatSymbols_sr_Latn_RS', 'goog.i18n.NumberFormatSymbols_sv', 'goog.i18n.NumberFormatSymbols_sv_SE', 'goog.i18n.NumberFormatSymbols_sw', 'goog.i18n.NumberFormatSymbols_sw_TZ', 'goog.i18n.NumberFormatSymbols_ta', 'goog.i18n.NumberFormatSymbols_ta_IN', 'goog.i18n.NumberFormatSymbols_te', 'goog.i18n.NumberFormatSymbols_te_IN', 'goog.i18n.NumberFormatSymbols_th', 'goog.i18n.NumberFormatSymbols_th_TH', 'goog.i18n.NumberFormatSymbols_tl', 'goog.i18n.NumberFormatSymbols_tr', 'goog.i18n.NumberFormatSymbols_tr_TR', 'goog.i18n.NumberFormatSymbols_uk', 'goog.i18n.NumberFormatSymbols_uk_UA', 'goog.i18n.NumberFormatSymbols_ur', 'goog.i18n.NumberFormatSymbols_ur_PK', 'goog.i18n.NumberFormatSymbols_uz', 'goog.i18n.NumberFormatSymbols_uz_Latn', 'goog.i18n.NumberFormatSymbols_uz_Latn_UZ', 'goog.i18n.NumberFormatSymbols_vi', 'goog.i18n.NumberFormatSymbols_vi_VN', 'goog.i18n.NumberFormatSymbols_zh', 'goog.i18n.NumberFormatSymbols_zh_CN', 'goog.i18n.NumberFormatSymbols_zh_HK', 'goog.i18n.NumberFormatSymbols_zh_Hans', 'goog.i18n.NumberFormatSymbols_zh_Hans_CN', 'goog.i18n.NumberFormatSymbols_zh_TW', 'goog.i18n.NumberFormatSymbols_zu', 'goog.i18n.NumberFormatSymbols_zu_ZA'], [], false); goog.addDependency('i18n/numberformatsymbolsext.js', ['goog.i18n.NumberFormatSymbolsExt', 'goog.i18n.NumberFormatSymbols_af_NA', 'goog.i18n.NumberFormatSymbols_agq', 'goog.i18n.NumberFormatSymbols_agq_CM', 'goog.i18n.NumberFormatSymbols_ak', 'goog.i18n.NumberFormatSymbols_ak_GH', 'goog.i18n.NumberFormatSymbols_ar_AE', 'goog.i18n.NumberFormatSymbols_ar_BH', 'goog.i18n.NumberFormatSymbols_ar_DJ', 'goog.i18n.NumberFormatSymbols_ar_DZ', 'goog.i18n.NumberFormatSymbols_ar_EH', 'goog.i18n.NumberFormatSymbols_ar_ER', 'goog.i18n.NumberFormatSymbols_ar_IL', 'goog.i18n.NumberFormatSymbols_ar_IQ', 'goog.i18n.NumberFormatSymbols_ar_JO', 'goog.i18n.NumberFormatSymbols_ar_KM', 'goog.i18n.NumberFormatSymbols_ar_KW', 'goog.i18n.NumberFormatSymbols_ar_LB', 'goog.i18n.NumberFormatSymbols_ar_LY', 'goog.i18n.NumberFormatSymbols_ar_MA', 'goog.i18n.NumberFormatSymbols_ar_MR', 'goog.i18n.NumberFormatSymbols_ar_OM', 'goog.i18n.NumberFormatSymbols_ar_PS', 'goog.i18n.NumberFormatSymbols_ar_QA', 'goog.i18n.NumberFormatSymbols_ar_SA', 'goog.i18n.NumberFormatSymbols_ar_SD', 'goog.i18n.NumberFormatSymbols_ar_SO', 'goog.i18n.NumberFormatSymbols_ar_SS', 'goog.i18n.NumberFormatSymbols_ar_SY', 'goog.i18n.NumberFormatSymbols_ar_TD', 'goog.i18n.NumberFormatSymbols_ar_TN', 'goog.i18n.NumberFormatSymbols_ar_YE', 'goog.i18n.NumberFormatSymbols_as', 'goog.i18n.NumberFormatSymbols_as_IN', 'goog.i18n.NumberFormatSymbols_asa', 'goog.i18n.NumberFormatSymbols_asa_TZ', 'goog.i18n.NumberFormatSymbols_ast', 'goog.i18n.NumberFormatSymbols_ast_ES', 'goog.i18n.NumberFormatSymbols_az_Cyrl', 'goog.i18n.NumberFormatSymbols_az_Cyrl_AZ', 'goog.i18n.NumberFormatSymbols_bas', 'goog.i18n.NumberFormatSymbols_bas_CM', 'goog.i18n.NumberFormatSymbols_bem', 'goog.i18n.NumberFormatSymbols_bem_ZM', 'goog.i18n.NumberFormatSymbols_bez', 'goog.i18n.NumberFormatSymbols_bez_TZ', 'goog.i18n.NumberFormatSymbols_bm', 'goog.i18n.NumberFormatSymbols_bm_Latn', 'goog.i18n.NumberFormatSymbols_bm_Latn_ML', 'goog.i18n.NumberFormatSymbols_bn_IN', 'goog.i18n.NumberFormatSymbols_bo', 'goog.i18n.NumberFormatSymbols_bo_CN', 'goog.i18n.NumberFormatSymbols_bo_IN', 'goog.i18n.NumberFormatSymbols_brx', 'goog.i18n.NumberFormatSymbols_brx_IN', 'goog.i18n.NumberFormatSymbols_bs_Cyrl', 'goog.i18n.NumberFormatSymbols_bs_Cyrl_BA', 'goog.i18n.NumberFormatSymbols_cgg', 'goog.i18n.NumberFormatSymbols_cgg_UG', 'goog.i18n.NumberFormatSymbols_ckb', 'goog.i18n.NumberFormatSymbols_ckb_Arab', 'goog.i18n.NumberFormatSymbols_ckb_Arab_IQ', 'goog.i18n.NumberFormatSymbols_ckb_Arab_IR', 'goog.i18n.NumberFormatSymbols_ckb_IQ', 'goog.i18n.NumberFormatSymbols_ckb_IR', 'goog.i18n.NumberFormatSymbols_ckb_Latn', 'goog.i18n.NumberFormatSymbols_ckb_Latn_IQ', 'goog.i18n.NumberFormatSymbols_dav', 'goog.i18n.NumberFormatSymbols_dav_KE', 'goog.i18n.NumberFormatSymbols_de_LI', 'goog.i18n.NumberFormatSymbols_dje', 'goog.i18n.NumberFormatSymbols_dje_NE', 'goog.i18n.NumberFormatSymbols_dsb', 'goog.i18n.NumberFormatSymbols_dsb_DE', 'goog.i18n.NumberFormatSymbols_dua', 'goog.i18n.NumberFormatSymbols_dua_CM', 'goog.i18n.NumberFormatSymbols_dyo', 'goog.i18n.NumberFormatSymbols_dyo_SN', 'goog.i18n.NumberFormatSymbols_dz', 'goog.i18n.NumberFormatSymbols_dz_BT', 'goog.i18n.NumberFormatSymbols_ebu', 'goog.i18n.NumberFormatSymbols_ebu_KE', 'goog.i18n.NumberFormatSymbols_ee', 'goog.i18n.NumberFormatSymbols_ee_GH', 'goog.i18n.NumberFormatSymbols_ee_TG', 'goog.i18n.NumberFormatSymbols_en_150', 'goog.i18n.NumberFormatSymbols_en_AG', 'goog.i18n.NumberFormatSymbols_en_AI', 'goog.i18n.NumberFormatSymbols_en_BB', 'goog.i18n.NumberFormatSymbols_en_BE', 'goog.i18n.NumberFormatSymbols_en_BM', 'goog.i18n.NumberFormatSymbols_en_BS', 'goog.i18n.NumberFormatSymbols_en_BW', 'goog.i18n.NumberFormatSymbols_en_BZ', 'goog.i18n.NumberFormatSymbols_en_CC', 'goog.i18n.NumberFormatSymbols_en_CK', 'goog.i18n.NumberFormatSymbols_en_CM', 'goog.i18n.NumberFormatSymbols_en_CX', 'goog.i18n.NumberFormatSymbols_en_DM', 'goog.i18n.NumberFormatSymbols_en_ER', 'goog.i18n.NumberFormatSymbols_en_FJ', 'goog.i18n.NumberFormatSymbols_en_FK', 'goog.i18n.NumberFormatSymbols_en_GD', 'goog.i18n.NumberFormatSymbols_en_GG', 'goog.i18n.NumberFormatSymbols_en_GH', 'goog.i18n.NumberFormatSymbols_en_GI', 'goog.i18n.NumberFormatSymbols_en_GM', 'goog.i18n.NumberFormatSymbols_en_GY', 'goog.i18n.NumberFormatSymbols_en_HK', 'goog.i18n.NumberFormatSymbols_en_IM', 'goog.i18n.NumberFormatSymbols_en_JE', 'goog.i18n.NumberFormatSymbols_en_JM', 'goog.i18n.NumberFormatSymbols_en_KE', 'goog.i18n.NumberFormatSymbols_en_KI', 'goog.i18n.NumberFormatSymbols_en_KN', 'goog.i18n.NumberFormatSymbols_en_KY', 'goog.i18n.NumberFormatSymbols_en_LC', 'goog.i18n.NumberFormatSymbols_en_LR', 'goog.i18n.NumberFormatSymbols_en_LS', 'goog.i18n.NumberFormatSymbols_en_MG', 'goog.i18n.NumberFormatSymbols_en_MO', 'goog.i18n.NumberFormatSymbols_en_MS', 'goog.i18n.NumberFormatSymbols_en_MT', 'goog.i18n.NumberFormatSymbols_en_MU', 'goog.i18n.NumberFormatSymbols_en_MW', 'goog.i18n.NumberFormatSymbols_en_MY', 'goog.i18n.NumberFormatSymbols_en_NA', 'goog.i18n.NumberFormatSymbols_en_NF', 'goog.i18n.NumberFormatSymbols_en_NG', 'goog.i18n.NumberFormatSymbols_en_NR', 'goog.i18n.NumberFormatSymbols_en_NU', 'goog.i18n.NumberFormatSymbols_en_NZ', 'goog.i18n.NumberFormatSymbols_en_PG', 'goog.i18n.NumberFormatSymbols_en_PH', 'goog.i18n.NumberFormatSymbols_en_PK', 'goog.i18n.NumberFormatSymbols_en_PN', 'goog.i18n.NumberFormatSymbols_en_RW', 'goog.i18n.NumberFormatSymbols_en_SB', 'goog.i18n.NumberFormatSymbols_en_SC', 'goog.i18n.NumberFormatSymbols_en_SD', 'goog.i18n.NumberFormatSymbols_en_SH', 'goog.i18n.NumberFormatSymbols_en_SL', 'goog.i18n.NumberFormatSymbols_en_SS', 'goog.i18n.NumberFormatSymbols_en_SX', 'goog.i18n.NumberFormatSymbols_en_SZ', 'goog.i18n.NumberFormatSymbols_en_TK', 'goog.i18n.NumberFormatSymbols_en_TO', 'goog.i18n.NumberFormatSymbols_en_TT', 'goog.i18n.NumberFormatSymbols_en_TV', 'goog.i18n.NumberFormatSymbols_en_TZ', 'goog.i18n.NumberFormatSymbols_en_UG', 'goog.i18n.NumberFormatSymbols_en_VC', 'goog.i18n.NumberFormatSymbols_en_VU', 'goog.i18n.NumberFormatSymbols_en_WS', 'goog.i18n.NumberFormatSymbols_en_ZM', 'goog.i18n.NumberFormatSymbols_eo', 'goog.i18n.NumberFormatSymbols_eo_001', 'goog.i18n.NumberFormatSymbols_es_AR', 'goog.i18n.NumberFormatSymbols_es_BO', 'goog.i18n.NumberFormatSymbols_es_CL', 'goog.i18n.NumberFormatSymbols_es_CO', 'goog.i18n.NumberFormatSymbols_es_CR', 'goog.i18n.NumberFormatSymbols_es_CU', 'goog.i18n.NumberFormatSymbols_es_DO', 'goog.i18n.NumberFormatSymbols_es_EC', 'goog.i18n.NumberFormatSymbols_es_GQ', 'goog.i18n.NumberFormatSymbols_es_GT', 'goog.i18n.NumberFormatSymbols_es_HN', 'goog.i18n.NumberFormatSymbols_es_NI', 'goog.i18n.NumberFormatSymbols_es_PA', 'goog.i18n.NumberFormatSymbols_es_PE', 'goog.i18n.NumberFormatSymbols_es_PH', 'goog.i18n.NumberFormatSymbols_es_PR', 'goog.i18n.NumberFormatSymbols_es_PY', 'goog.i18n.NumberFormatSymbols_es_SV', 'goog.i18n.NumberFormatSymbols_es_UY', 'goog.i18n.NumberFormatSymbols_es_VE', 'goog.i18n.NumberFormatSymbols_ewo', 'goog.i18n.NumberFormatSymbols_ewo_CM', 'goog.i18n.NumberFormatSymbols_fa_AF', 'goog.i18n.NumberFormatSymbols_ff', 'goog.i18n.NumberFormatSymbols_ff_CM', 'goog.i18n.NumberFormatSymbols_ff_GN', 'goog.i18n.NumberFormatSymbols_ff_MR', 'goog.i18n.NumberFormatSymbols_ff_SN', 'goog.i18n.NumberFormatSymbols_fo', 'goog.i18n.NumberFormatSymbols_fo_FO', 'goog.i18n.NumberFormatSymbols_fr_BE', 'goog.i18n.NumberFormatSymbols_fr_BF', 'goog.i18n.NumberFormatSymbols_fr_BI', 'goog.i18n.NumberFormatSymbols_fr_BJ', 'goog.i18n.NumberFormatSymbols_fr_CD', 'goog.i18n.NumberFormatSymbols_fr_CF', 'goog.i18n.NumberFormatSymbols_fr_CG', 'goog.i18n.NumberFormatSymbols_fr_CH', 'goog.i18n.NumberFormatSymbols_fr_CI', 'goog.i18n.NumberFormatSymbols_fr_CM', 'goog.i18n.NumberFormatSymbols_fr_DJ', 'goog.i18n.NumberFormatSymbols_fr_DZ', 'goog.i18n.NumberFormatSymbols_fr_GA', 'goog.i18n.NumberFormatSymbols_fr_GN', 'goog.i18n.NumberFormatSymbols_fr_GQ', 'goog.i18n.NumberFormatSymbols_fr_HT', 'goog.i18n.NumberFormatSymbols_fr_KM', 'goog.i18n.NumberFormatSymbols_fr_LU', 'goog.i18n.NumberFormatSymbols_fr_MA', 'goog.i18n.NumberFormatSymbols_fr_MG', 'goog.i18n.NumberFormatSymbols_fr_ML', 'goog.i18n.NumberFormatSymbols_fr_MR', 'goog.i18n.NumberFormatSymbols_fr_MU', 'goog.i18n.NumberFormatSymbols_fr_NC', 'goog.i18n.NumberFormatSymbols_fr_NE', 'goog.i18n.NumberFormatSymbols_fr_PF', 'goog.i18n.NumberFormatSymbols_fr_RW', 'goog.i18n.NumberFormatSymbols_fr_SC', 'goog.i18n.NumberFormatSymbols_fr_SN', 'goog.i18n.NumberFormatSymbols_fr_SY', 'goog.i18n.NumberFormatSymbols_fr_TD', 'goog.i18n.NumberFormatSymbols_fr_TG', 'goog.i18n.NumberFormatSymbols_fr_TN', 'goog.i18n.NumberFormatSymbols_fr_VU', 'goog.i18n.NumberFormatSymbols_fr_WF', 'goog.i18n.NumberFormatSymbols_fur', 'goog.i18n.NumberFormatSymbols_fur_IT', 'goog.i18n.NumberFormatSymbols_fy', 'goog.i18n.NumberFormatSymbols_fy_NL', 'goog.i18n.NumberFormatSymbols_gd', 'goog.i18n.NumberFormatSymbols_gd_GB', 'goog.i18n.NumberFormatSymbols_gsw_FR', 'goog.i18n.NumberFormatSymbols_guz', 'goog.i18n.NumberFormatSymbols_guz_KE', 'goog.i18n.NumberFormatSymbols_gv', 'goog.i18n.NumberFormatSymbols_gv_IM', 'goog.i18n.NumberFormatSymbols_ha', 'goog.i18n.NumberFormatSymbols_ha_Latn', 'goog.i18n.NumberFormatSymbols_ha_Latn_GH', 'goog.i18n.NumberFormatSymbols_ha_Latn_NE', 'goog.i18n.NumberFormatSymbols_ha_Latn_NG', 'goog.i18n.NumberFormatSymbols_hr_BA', 'goog.i18n.NumberFormatSymbols_hsb', 'goog.i18n.NumberFormatSymbols_hsb_DE', 'goog.i18n.NumberFormatSymbols_ig', 'goog.i18n.NumberFormatSymbols_ig_NG', 'goog.i18n.NumberFormatSymbols_ii', 'goog.i18n.NumberFormatSymbols_ii_CN', 'goog.i18n.NumberFormatSymbols_it_CH', 'goog.i18n.NumberFormatSymbols_jgo', 'goog.i18n.NumberFormatSymbols_jgo_CM', 'goog.i18n.NumberFormatSymbols_jmc', 'goog.i18n.NumberFormatSymbols_jmc_TZ', 'goog.i18n.NumberFormatSymbols_kab', 'goog.i18n.NumberFormatSymbols_kab_DZ', 'goog.i18n.NumberFormatSymbols_kam', 'goog.i18n.NumberFormatSymbols_kam_KE', 'goog.i18n.NumberFormatSymbols_kde', 'goog.i18n.NumberFormatSymbols_kde_TZ', 'goog.i18n.NumberFormatSymbols_kea', 'goog.i18n.NumberFormatSymbols_kea_CV', 'goog.i18n.NumberFormatSymbols_khq', 'goog.i18n.NumberFormatSymbols_khq_ML', 'goog.i18n.NumberFormatSymbols_ki', 'goog.i18n.NumberFormatSymbols_ki_KE', 'goog.i18n.NumberFormatSymbols_kkj', 'goog.i18n.NumberFormatSymbols_kkj_CM', 'goog.i18n.NumberFormatSymbols_kl', 'goog.i18n.NumberFormatSymbols_kl_GL', 'goog.i18n.NumberFormatSymbols_kln', 'goog.i18n.NumberFormatSymbols_kln_KE', 'goog.i18n.NumberFormatSymbols_ko_KP', 'goog.i18n.NumberFormatSymbols_kok', 'goog.i18n.NumberFormatSymbols_kok_IN', 'goog.i18n.NumberFormatSymbols_ks', 'goog.i18n.NumberFormatSymbols_ks_Arab', 'goog.i18n.NumberFormatSymbols_ks_Arab_IN', 'goog.i18n.NumberFormatSymbols_ksb', 'goog.i18n.NumberFormatSymbols_ksb_TZ', 'goog.i18n.NumberFormatSymbols_ksf', 'goog.i18n.NumberFormatSymbols_ksf_CM', 'goog.i18n.NumberFormatSymbols_ksh', 'goog.i18n.NumberFormatSymbols_ksh_DE', 'goog.i18n.NumberFormatSymbols_kw', 'goog.i18n.NumberFormatSymbols_kw_GB', 'goog.i18n.NumberFormatSymbols_lag', 'goog.i18n.NumberFormatSymbols_lag_TZ', 'goog.i18n.NumberFormatSymbols_lb', 'goog.i18n.NumberFormatSymbols_lb_LU', 'goog.i18n.NumberFormatSymbols_lg', 'goog.i18n.NumberFormatSymbols_lg_UG', 'goog.i18n.NumberFormatSymbols_lkt', 'goog.i18n.NumberFormatSymbols_lkt_US', 'goog.i18n.NumberFormatSymbols_ln_AO', 'goog.i18n.NumberFormatSymbols_ln_CF', 'goog.i18n.NumberFormatSymbols_ln_CG', 'goog.i18n.NumberFormatSymbols_lu', 'goog.i18n.NumberFormatSymbols_lu_CD', 'goog.i18n.NumberFormatSymbols_luo', 'goog.i18n.NumberFormatSymbols_luo_KE', 'goog.i18n.NumberFormatSymbols_luy', 'goog.i18n.NumberFormatSymbols_luy_KE', 'goog.i18n.NumberFormatSymbols_mas', 'goog.i18n.NumberFormatSymbols_mas_KE', 'goog.i18n.NumberFormatSymbols_mas_TZ', 'goog.i18n.NumberFormatSymbols_mer', 'goog.i18n.NumberFormatSymbols_mer_KE', 'goog.i18n.NumberFormatSymbols_mfe', 'goog.i18n.NumberFormatSymbols_mfe_MU', 'goog.i18n.NumberFormatSymbols_mg', 'goog.i18n.NumberFormatSymbols_mg_MG', 'goog.i18n.NumberFormatSymbols_mgh', 'goog.i18n.NumberFormatSymbols_mgh_MZ', 'goog.i18n.NumberFormatSymbols_mgo', 'goog.i18n.NumberFormatSymbols_mgo_CM', 'goog.i18n.NumberFormatSymbols_ms_Latn_BN', 'goog.i18n.NumberFormatSymbols_ms_Latn_SG', 'goog.i18n.NumberFormatSymbols_mua', 'goog.i18n.NumberFormatSymbols_mua_CM', 'goog.i18n.NumberFormatSymbols_naq', 'goog.i18n.NumberFormatSymbols_naq_NA', 'goog.i18n.NumberFormatSymbols_nd', 'goog.i18n.NumberFormatSymbols_nd_ZW', 'goog.i18n.NumberFormatSymbols_ne_IN', 'goog.i18n.NumberFormatSymbols_nl_AW', 'goog.i18n.NumberFormatSymbols_nl_BE', 'goog.i18n.NumberFormatSymbols_nl_BQ', 'goog.i18n.NumberFormatSymbols_nl_CW', 'goog.i18n.NumberFormatSymbols_nl_SR', 'goog.i18n.NumberFormatSymbols_nl_SX', 'goog.i18n.NumberFormatSymbols_nmg', 'goog.i18n.NumberFormatSymbols_nmg_CM', 'goog.i18n.NumberFormatSymbols_nn', 'goog.i18n.NumberFormatSymbols_nn_NO', 'goog.i18n.NumberFormatSymbols_nnh', 'goog.i18n.NumberFormatSymbols_nnh_CM', 'goog.i18n.NumberFormatSymbols_nus', 'goog.i18n.NumberFormatSymbols_nus_SD', 'goog.i18n.NumberFormatSymbols_nyn', 'goog.i18n.NumberFormatSymbols_nyn_UG', 'goog.i18n.NumberFormatSymbols_om', 'goog.i18n.NumberFormatSymbols_om_ET', 'goog.i18n.NumberFormatSymbols_om_KE', 'goog.i18n.NumberFormatSymbols_os', 'goog.i18n.NumberFormatSymbols_os_GE', 'goog.i18n.NumberFormatSymbols_os_RU', 'goog.i18n.NumberFormatSymbols_pa_Arab', 'goog.i18n.NumberFormatSymbols_pa_Arab_PK', 'goog.i18n.NumberFormatSymbols_ps', 'goog.i18n.NumberFormatSymbols_ps_AF', 'goog.i18n.NumberFormatSymbols_pt_AO', 'goog.i18n.NumberFormatSymbols_pt_CV', 'goog.i18n.NumberFormatSymbols_pt_GW', 'goog.i18n.NumberFormatSymbols_pt_MO', 'goog.i18n.NumberFormatSymbols_pt_MZ', 'goog.i18n.NumberFormatSymbols_pt_ST', 'goog.i18n.NumberFormatSymbols_pt_TL', 'goog.i18n.NumberFormatSymbols_qu', 'goog.i18n.NumberFormatSymbols_qu_BO', 'goog.i18n.NumberFormatSymbols_qu_EC', 'goog.i18n.NumberFormatSymbols_qu_PE', 'goog.i18n.NumberFormatSymbols_rm', 'goog.i18n.NumberFormatSymbols_rm_CH', 'goog.i18n.NumberFormatSymbols_rn', 'goog.i18n.NumberFormatSymbols_rn_BI', 'goog.i18n.NumberFormatSymbols_ro_MD', 'goog.i18n.NumberFormatSymbols_rof', 'goog.i18n.NumberFormatSymbols_rof_TZ', 'goog.i18n.NumberFormatSymbols_ru_BY', 'goog.i18n.NumberFormatSymbols_ru_KG', 'goog.i18n.NumberFormatSymbols_ru_KZ', 'goog.i18n.NumberFormatSymbols_ru_MD', 'goog.i18n.NumberFormatSymbols_ru_UA', 'goog.i18n.NumberFormatSymbols_rw', 'goog.i18n.NumberFormatSymbols_rw_RW', 'goog.i18n.NumberFormatSymbols_rwk', 'goog.i18n.NumberFormatSymbols_rwk_TZ', 'goog.i18n.NumberFormatSymbols_sah', 'goog.i18n.NumberFormatSymbols_sah_RU', 'goog.i18n.NumberFormatSymbols_saq', 'goog.i18n.NumberFormatSymbols_saq_KE', 'goog.i18n.NumberFormatSymbols_sbp', 'goog.i18n.NumberFormatSymbols_sbp_TZ', 'goog.i18n.NumberFormatSymbols_se', 'goog.i18n.NumberFormatSymbols_se_FI', 'goog.i18n.NumberFormatSymbols_se_NO', 'goog.i18n.NumberFormatSymbols_se_SE', 'goog.i18n.NumberFormatSymbols_seh', 'goog.i18n.NumberFormatSymbols_seh_MZ', 'goog.i18n.NumberFormatSymbols_ses', 'goog.i18n.NumberFormatSymbols_ses_ML', 'goog.i18n.NumberFormatSymbols_sg', 'goog.i18n.NumberFormatSymbols_sg_CF', 'goog.i18n.NumberFormatSymbols_shi', 'goog.i18n.NumberFormatSymbols_shi_Latn', 'goog.i18n.NumberFormatSymbols_shi_Latn_MA', 'goog.i18n.NumberFormatSymbols_shi_Tfng', 'goog.i18n.NumberFormatSymbols_shi_Tfng_MA', 'goog.i18n.NumberFormatSymbols_smn', 'goog.i18n.NumberFormatSymbols_smn_FI', 'goog.i18n.NumberFormatSymbols_sn', 'goog.i18n.NumberFormatSymbols_sn_ZW', 'goog.i18n.NumberFormatSymbols_so', 'goog.i18n.NumberFormatSymbols_so_DJ', 'goog.i18n.NumberFormatSymbols_so_ET', 'goog.i18n.NumberFormatSymbols_so_KE', 'goog.i18n.NumberFormatSymbols_so_SO', 'goog.i18n.NumberFormatSymbols_sq_MK', 'goog.i18n.NumberFormatSymbols_sq_XK', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_BA', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_ME', 'goog.i18n.NumberFormatSymbols_sr_Cyrl_XK', 'goog.i18n.NumberFormatSymbols_sr_Latn_BA', 'goog.i18n.NumberFormatSymbols_sr_Latn_ME', 'goog.i18n.NumberFormatSymbols_sr_Latn_XK', 'goog.i18n.NumberFormatSymbols_sv_AX', 'goog.i18n.NumberFormatSymbols_sv_FI', 'goog.i18n.NumberFormatSymbols_sw_CD', 'goog.i18n.NumberFormatSymbols_sw_KE', 'goog.i18n.NumberFormatSymbols_sw_UG', 'goog.i18n.NumberFormatSymbols_ta_LK', 'goog.i18n.NumberFormatSymbols_ta_MY', 'goog.i18n.NumberFormatSymbols_ta_SG', 'goog.i18n.NumberFormatSymbols_teo', 'goog.i18n.NumberFormatSymbols_teo_KE', 'goog.i18n.NumberFormatSymbols_teo_UG', 'goog.i18n.NumberFormatSymbols_ti', 'goog.i18n.NumberFormatSymbols_ti_ER', 'goog.i18n.NumberFormatSymbols_ti_ET', 'goog.i18n.NumberFormatSymbols_to', 'goog.i18n.NumberFormatSymbols_to_TO', 'goog.i18n.NumberFormatSymbols_tr_CY', 'goog.i18n.NumberFormatSymbols_twq', 'goog.i18n.NumberFormatSymbols_twq_NE', 'goog.i18n.NumberFormatSymbols_tzm', 'goog.i18n.NumberFormatSymbols_tzm_Latn', 'goog.i18n.NumberFormatSymbols_tzm_Latn_MA', 'goog.i18n.NumberFormatSymbols_ug', 'goog.i18n.NumberFormatSymbols_ug_Arab', 'goog.i18n.NumberFormatSymbols_ug_Arab_CN', 'goog.i18n.NumberFormatSymbols_ur_IN', 'goog.i18n.NumberFormatSymbols_uz_Arab', 'goog.i18n.NumberFormatSymbols_uz_Arab_AF', 'goog.i18n.NumberFormatSymbols_uz_Cyrl', 'goog.i18n.NumberFormatSymbols_uz_Cyrl_UZ', 'goog.i18n.NumberFormatSymbols_vai', 'goog.i18n.NumberFormatSymbols_vai_Latn', 'goog.i18n.NumberFormatSymbols_vai_Latn_LR', 'goog.i18n.NumberFormatSymbols_vai_Vaii', 'goog.i18n.NumberFormatSymbols_vai_Vaii_LR', 'goog.i18n.NumberFormatSymbols_vun', 'goog.i18n.NumberFormatSymbols_vun_TZ', 'goog.i18n.NumberFormatSymbols_wae', 'goog.i18n.NumberFormatSymbols_wae_CH', 'goog.i18n.NumberFormatSymbols_xog', 'goog.i18n.NumberFormatSymbols_xog_UG', 'goog.i18n.NumberFormatSymbols_yav', 'goog.i18n.NumberFormatSymbols_yav_CM', 'goog.i18n.NumberFormatSymbols_yi', 'goog.i18n.NumberFormatSymbols_yi_001', 'goog.i18n.NumberFormatSymbols_yo', 'goog.i18n.NumberFormatSymbols_yo_BJ', 'goog.i18n.NumberFormatSymbols_yo_NG', 'goog.i18n.NumberFormatSymbols_zgh', 'goog.i18n.NumberFormatSymbols_zgh_MA', 'goog.i18n.NumberFormatSymbols_zh_Hans_HK', 'goog.i18n.NumberFormatSymbols_zh_Hans_MO', 'goog.i18n.NumberFormatSymbols_zh_Hans_SG', 'goog.i18n.NumberFormatSymbols_zh_Hant', 'goog.i18n.NumberFormatSymbols_zh_Hant_HK', 'goog.i18n.NumberFormatSymbols_zh_Hant_MO', 'goog.i18n.NumberFormatSymbols_zh_Hant_TW'], ['goog.i18n.NumberFormatSymbols'], false); goog.addDependency('i18n/ordinalrules.js', ['goog.i18n.ordinalRules'], [], false); goog.addDependency('i18n/pluralrules.js', ['goog.i18n.pluralRules'], [], false); goog.addDependency('i18n/pluralrules_test.js', ['goog.i18n.pluralRulesTest'], ['goog.i18n.pluralRules', 'goog.testing.jsunit'], false); goog.addDependency('i18n/timezone.js', ['goog.i18n.TimeZone'], ['goog.array', 'goog.date.DateLike', 'goog.object', 'goog.string'], false); goog.addDependency('i18n/timezone_test.js', ['goog.i18n.TimeZoneTest'], ['goog.i18n.TimeZone', 'goog.testing.jsunit'], false); goog.addDependency('i18n/uchar.js', ['goog.i18n.uChar'], [], false); goog.addDependency('i18n/uchar/localnamefetcher.js', ['goog.i18n.uChar.LocalNameFetcher'], ['goog.i18n.uChar.NameFetcher', 'goog.i18n.uCharNames', 'goog.log'], false); goog.addDependency('i18n/uchar/localnamefetcher_test.js', ['goog.i18n.uChar.LocalNameFetcherTest'], ['goog.i18n.uChar.LocalNameFetcher', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('i18n/uchar/namefetcher.js', ['goog.i18n.uChar.NameFetcher'], [], false); goog.addDependency('i18n/uchar/remotenamefetcher.js', ['goog.i18n.uChar.RemoteNameFetcher'], ['goog.Disposable', 'goog.Uri', 'goog.i18n.uChar', 'goog.i18n.uChar.NameFetcher', 'goog.log', 'goog.net.XhrIo', 'goog.structs.Map'], false); goog.addDependency('i18n/uchar/remotenamefetcher_test.js', ['goog.i18n.uChar.RemoteNameFetcherTest'], ['goog.i18n.uChar.RemoteNameFetcher', 'goog.net.XhrIo', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction'], false); goog.addDependency('i18n/uchar_test.js', ['goog.i18n.uCharTest'], ['goog.i18n.uChar', 'goog.testing.jsunit'], false); goog.addDependency('i18n/ucharnames.js', ['goog.i18n.uCharNames'], ['goog.i18n.uChar'], false); goog.addDependency('i18n/ucharnames_test.js', ['goog.i18n.uCharNamesTest'], ['goog.i18n.uCharNames', 'goog.testing.jsunit'], false); goog.addDependency('iter/iter.js', ['goog.iter', 'goog.iter.Iterable', 'goog.iter.Iterator', 'goog.iter.StopIteration'], ['goog.array', 'goog.asserts', 'goog.functions', 'goog.math'], false); goog.addDependency('iter/iter_test.js', ['goog.iterTest'], ['goog.iter', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.testing.jsunit'], false); goog.addDependency('json/evaljsonprocessor.js', ['goog.json.EvalJsonProcessor'], ['goog.json', 'goog.json.Processor', 'goog.json.Serializer'], false); goog.addDependency('json/hybrid.js', ['goog.json.hybrid'], ['goog.asserts', 'goog.json'], false); goog.addDependency('json/hybrid_test.js', ['goog.json.hybridTest'], ['goog.json', 'goog.json.hybrid', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('json/hybridjsonprocessor.js', ['goog.json.HybridJsonProcessor'], ['goog.json.Processor', 'goog.json.hybrid'], false); goog.addDependency('json/hybridjsonprocessor_test.js', ['goog.json.HybridJsonProcessorTest'], ['goog.json.HybridJsonProcessor', 'goog.json.hybrid', 'goog.testing.jsunit'], false); goog.addDependency('json/json.js', ['goog.json', 'goog.json.Replacer', 'goog.json.Reviver', 'goog.json.Serializer'], [], false); goog.addDependency('json/json_perf.js', ['goog.jsonPerf'], ['goog.dom', 'goog.json', 'goog.math', 'goog.string', 'goog.testing.PerformanceTable', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('json/json_test.js', ['goog.jsonTest'], ['goog.functions', 'goog.json', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('json/nativejsonprocessor.js', ['goog.json.NativeJsonProcessor'], ['goog.asserts', 'goog.json.Processor'], false); goog.addDependency('json/processor.js', ['goog.json.Processor'], ['goog.string.Parser', 'goog.string.Stringifier'], false); goog.addDependency('json/processor_test.js', ['goog.json.processorTest'], ['goog.json.EvalJsonProcessor', 'goog.json.NativeJsonProcessor', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('labs/dom/pagevisibilitymonitor.js', ['goog.labs.dom.PageVisibilityEvent', 'goog.labs.dom.PageVisibilityMonitor', 'goog.labs.dom.PageVisibilityState'], ['goog.dom', 'goog.dom.vendor', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.memoize'], false); goog.addDependency('labs/dom/pagevisibilitymonitor_test.js', ['goog.labs.dom.PageVisibilityMonitorTest'], ['goog.events', 'goog.functions', 'goog.labs.dom.PageVisibilityMonitor', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('labs/events/nondisposableeventtarget.js', ['goog.labs.events.NonDisposableEventTarget'], ['goog.array', 'goog.asserts', 'goog.events.Event', 'goog.events.Listenable', 'goog.events.ListenerMap', 'goog.object'], false); goog.addDependency('labs/events/nondisposableeventtarget_test.js', ['goog.labs.events.NonDisposableEventTargetTest'], ['goog.events.Listenable', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.labs.events.NonDisposableEventTarget', 'goog.testing.jsunit'], false); goog.addDependency('labs/events/nondisposableeventtarget_via_googevents_test.js', ['goog.labs.events.NonDisposableEventTargetGoogEventsTest'], ['goog.events', 'goog.events.eventTargetTester', 'goog.events.eventTargetTester.KeyType', 'goog.events.eventTargetTester.UnlistenReturnType', 'goog.labs.events.NonDisposableEventTarget', 'goog.testing', 'goog.testing.jsunit'], false); goog.addDependency('labs/events/touch.js', ['goog.labs.events.touch', 'goog.labs.events.touch.TouchData'], ['goog.array', 'goog.asserts', 'goog.events.EventType', 'goog.string'], false); goog.addDependency('labs/events/touch_test.js', ['goog.labs.events.touchTest'], ['goog.labs.events.touch', 'goog.testing.jsunit'], false); goog.addDependency('labs/format/csv.js', ['goog.labs.format.csv', 'goog.labs.format.csv.ParseError', 'goog.labs.format.csv.Token'], ['goog.array', 'goog.asserts', 'goog.debug.Error', 'goog.object', 'goog.string', 'goog.string.newlines'], false); goog.addDependency('labs/format/csv_test.js', ['goog.labs.format.csvTest'], ['goog.labs.format.csv', 'goog.labs.format.csv.ParseError', 'goog.object', 'goog.testing.asserts', 'goog.testing.jsunit'], false); goog.addDependency('labs/html/attribute_rewriter.js', ['goog.labs.html.AttributeRewriter', 'goog.labs.html.AttributeValue', 'goog.labs.html.attributeRewriterPresubmitWorkaround'], [], false); goog.addDependency('labs/html/sanitizer.js', ['goog.labs.html.Sanitizer'], ['goog.asserts', 'goog.html.SafeUrl', 'goog.labs.html.attributeRewriterPresubmitWorkaround', 'goog.labs.html.scrubber', 'goog.object', 'goog.string'], false); goog.addDependency('labs/html/sanitizer_test.js', ['goog.labs.html.SanitizerTest'], ['goog.html.SafeUrl', 'goog.labs.html.Sanitizer', 'goog.string', 'goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('labs/html/scrubber.js', ['goog.labs.html.scrubber'], ['goog.array', 'goog.dom.tags', 'goog.labs.html.attributeRewriterPresubmitWorkaround', 'goog.string'], false); goog.addDependency('labs/html/scrubber_test.js', ['goog.html.ScrubberTest'], ['goog.labs.html.scrubber', 'goog.object', 'goog.string', 'goog.testing.jsunit'], false); goog.addDependency('labs/i18n/listformat.js', ['goog.labs.i18n.GenderInfo', 'goog.labs.i18n.GenderInfo.Gender', 'goog.labs.i18n.ListFormat'], ['goog.asserts', 'goog.labs.i18n.ListFormatSymbols'], false); goog.addDependency('labs/i18n/listformat_test.js', ['goog.labs.i18n.ListFormatTest'], ['goog.labs.i18n.GenderInfo', 'goog.labs.i18n.ListFormat', 'goog.labs.i18n.ListFormatSymbols', 'goog.labs.i18n.ListFormatSymbols_el', 'goog.labs.i18n.ListFormatSymbols_en', 'goog.labs.i18n.ListFormatSymbols_fr', 'goog.labs.i18n.ListFormatSymbols_ml', 'goog.labs.i18n.ListFormatSymbols_zu', 'goog.testing.jsunit'], false); goog.addDependency('labs/i18n/listsymbols.js', ['goog.labs.i18n.ListFormatSymbols', 'goog.labs.i18n.ListFormatSymbols_af', 'goog.labs.i18n.ListFormatSymbols_am', 'goog.labs.i18n.ListFormatSymbols_ar', 'goog.labs.i18n.ListFormatSymbols_az', 'goog.labs.i18n.ListFormatSymbols_be', 'goog.labs.i18n.ListFormatSymbols_bg', 'goog.labs.i18n.ListFormatSymbols_bn', 'goog.labs.i18n.ListFormatSymbols_br', 'goog.labs.i18n.ListFormatSymbols_bs', 'goog.labs.i18n.ListFormatSymbols_ca', 'goog.labs.i18n.ListFormatSymbols_chr', 'goog.labs.i18n.ListFormatSymbols_cs', 'goog.labs.i18n.ListFormatSymbols_cy', 'goog.labs.i18n.ListFormatSymbols_da', 'goog.labs.i18n.ListFormatSymbols_de', 'goog.labs.i18n.ListFormatSymbols_de_AT', 'goog.labs.i18n.ListFormatSymbols_de_CH', 'goog.labs.i18n.ListFormatSymbols_el', 'goog.labs.i18n.ListFormatSymbols_en', 'goog.labs.i18n.ListFormatSymbols_en_AU', 'goog.labs.i18n.ListFormatSymbols_en_CA', 'goog.labs.i18n.ListFormatSymbols_en_GB', 'goog.labs.i18n.ListFormatSymbols_en_IE', 'goog.labs.i18n.ListFormatSymbols_en_IN', 'goog.labs.i18n.ListFormatSymbols_en_SG', 'goog.labs.i18n.ListFormatSymbols_en_US', 'goog.labs.i18n.ListFormatSymbols_en_ZA', 'goog.labs.i18n.ListFormatSymbols_es', 'goog.labs.i18n.ListFormatSymbols_es_419', 'goog.labs.i18n.ListFormatSymbols_es_ES', 'goog.labs.i18n.ListFormatSymbols_es_MX', 'goog.labs.i18n.ListFormatSymbols_es_US', 'goog.labs.i18n.ListFormatSymbols_et', 'goog.labs.i18n.ListFormatSymbols_eu', 'goog.labs.i18n.ListFormatSymbols_fa', 'goog.labs.i18n.ListFormatSymbols_fi', 'goog.labs.i18n.ListFormatSymbols_fil', 'goog.labs.i18n.ListFormatSymbols_fr', 'goog.labs.i18n.ListFormatSymbols_fr_CA', 'goog.labs.i18n.ListFormatSymbols_ga', 'goog.labs.i18n.ListFormatSymbols_gl', 'goog.labs.i18n.ListFormatSymbols_gsw', 'goog.labs.i18n.ListFormatSymbols_gu', 'goog.labs.i18n.ListFormatSymbols_haw', 'goog.labs.i18n.ListFormatSymbols_he', 'goog.labs.i18n.ListFormatSymbols_hi', 'goog.labs.i18n.ListFormatSymbols_hr', 'goog.labs.i18n.ListFormatSymbols_hu', 'goog.labs.i18n.ListFormatSymbols_hy', 'goog.labs.i18n.ListFormatSymbols_id', 'goog.labs.i18n.ListFormatSymbols_in', 'goog.labs.i18n.ListFormatSymbols_is', 'goog.labs.i18n.ListFormatSymbols_it', 'goog.labs.i18n.ListFormatSymbols_iw', 'goog.labs.i18n.ListFormatSymbols_ja', 'goog.labs.i18n.ListFormatSymbols_ka', 'goog.labs.i18n.ListFormatSymbols_kk', 'goog.labs.i18n.ListFormatSymbols_km', 'goog.labs.i18n.ListFormatSymbols_kn', 'goog.labs.i18n.ListFormatSymbols_ko', 'goog.labs.i18n.ListFormatSymbols_ky', 'goog.labs.i18n.ListFormatSymbols_ln', 'goog.labs.i18n.ListFormatSymbols_lo', 'goog.labs.i18n.ListFormatSymbols_lt', 'goog.labs.i18n.ListFormatSymbols_lv', 'goog.labs.i18n.ListFormatSymbols_mk', 'goog.labs.i18n.ListFormatSymbols_ml', 'goog.labs.i18n.ListFormatSymbols_mn', 'goog.labs.i18n.ListFormatSymbols_mo', 'goog.labs.i18n.ListFormatSymbols_mr', 'goog.labs.i18n.ListFormatSymbols_ms', 'goog.labs.i18n.ListFormatSymbols_mt', 'goog.labs.i18n.ListFormatSymbols_my', 'goog.labs.i18n.ListFormatSymbols_nb', 'goog.labs.i18n.ListFormatSymbols_ne', 'goog.labs.i18n.ListFormatSymbols_nl', 'goog.labs.i18n.ListFormatSymbols_no', 'goog.labs.i18n.ListFormatSymbols_no_NO', 'goog.labs.i18n.ListFormatSymbols_or', 'goog.labs.i18n.ListFormatSymbols_pa', 'goog.labs.i18n.ListFormatSymbols_pl', 'goog.labs.i18n.ListFormatSymbols_pt', 'goog.labs.i18n.ListFormatSymbols_pt_BR', 'goog.labs.i18n.ListFormatSymbols_pt_PT', 'goog.labs.i18n.ListFormatSymbols_ro', 'goog.labs.i18n.ListFormatSymbols_ru', 'goog.labs.i18n.ListFormatSymbols_sh', 'goog.labs.i18n.ListFormatSymbols_si', 'goog.labs.i18n.ListFormatSymbols_sk', 'goog.labs.i18n.ListFormatSymbols_sl', 'goog.labs.i18n.ListFormatSymbols_sq', 'goog.labs.i18n.ListFormatSymbols_sr', 'goog.labs.i18n.ListFormatSymbols_sr_Latn', 'goog.labs.i18n.ListFormatSymbols_sv', 'goog.labs.i18n.ListFormatSymbols_sw', 'goog.labs.i18n.ListFormatSymbols_ta', 'goog.labs.i18n.ListFormatSymbols_te', 'goog.labs.i18n.ListFormatSymbols_th', 'goog.labs.i18n.ListFormatSymbols_tl', 'goog.labs.i18n.ListFormatSymbols_tr', 'goog.labs.i18n.ListFormatSymbols_uk', 'goog.labs.i18n.ListFormatSymbols_ur', 'goog.labs.i18n.ListFormatSymbols_uz', 'goog.labs.i18n.ListFormatSymbols_vi', 'goog.labs.i18n.ListFormatSymbols_zh', 'goog.labs.i18n.ListFormatSymbols_zh_CN', 'goog.labs.i18n.ListFormatSymbols_zh_HK', 'goog.labs.i18n.ListFormatSymbols_zh_TW', 'goog.labs.i18n.ListFormatSymbols_zu'], [], false); goog.addDependency('labs/i18n/listsymbolsext.js', ['goog.labs.i18n.ListFormatSymbolsExt', 'goog.labs.i18n.ListFormatSymbols_af_NA', 'goog.labs.i18n.ListFormatSymbols_af_ZA', 'goog.labs.i18n.ListFormatSymbols_agq', 'goog.labs.i18n.ListFormatSymbols_agq_CM', 'goog.labs.i18n.ListFormatSymbols_ak', 'goog.labs.i18n.ListFormatSymbols_ak_GH', 'goog.labs.i18n.ListFormatSymbols_am_ET', 'goog.labs.i18n.ListFormatSymbols_ar_001', 'goog.labs.i18n.ListFormatSymbols_ar_AE', 'goog.labs.i18n.ListFormatSymbols_ar_BH', 'goog.labs.i18n.ListFormatSymbols_ar_DJ', 'goog.labs.i18n.ListFormatSymbols_ar_DZ', 'goog.labs.i18n.ListFormatSymbols_ar_EG', 'goog.labs.i18n.ListFormatSymbols_ar_EH', 'goog.labs.i18n.ListFormatSymbols_ar_ER', 'goog.labs.i18n.ListFormatSymbols_ar_IL', 'goog.labs.i18n.ListFormatSymbols_ar_IQ', 'goog.labs.i18n.ListFormatSymbols_ar_JO', 'goog.labs.i18n.ListFormatSymbols_ar_KM', 'goog.labs.i18n.ListFormatSymbols_ar_KW', 'goog.labs.i18n.ListFormatSymbols_ar_LB', 'goog.labs.i18n.ListFormatSymbols_ar_LY', 'goog.labs.i18n.ListFormatSymbols_ar_MA', 'goog.labs.i18n.ListFormatSymbols_ar_MR', 'goog.labs.i18n.ListFormatSymbols_ar_OM', 'goog.labs.i18n.ListFormatSymbols_ar_PS', 'goog.labs.i18n.ListFormatSymbols_ar_QA', 'goog.labs.i18n.ListFormatSymbols_ar_SA', 'goog.labs.i18n.ListFormatSymbols_ar_SD', 'goog.labs.i18n.ListFormatSymbols_ar_SO', 'goog.labs.i18n.ListFormatSymbols_ar_SS', 'goog.labs.i18n.ListFormatSymbols_ar_SY', 'goog.labs.i18n.ListFormatSymbols_ar_TD', 'goog.labs.i18n.ListFormatSymbols_ar_TN', 'goog.labs.i18n.ListFormatSymbols_ar_YE', 'goog.labs.i18n.ListFormatSymbols_as', 'goog.labs.i18n.ListFormatSymbols_as_IN', 'goog.labs.i18n.ListFormatSymbols_asa', 'goog.labs.i18n.ListFormatSymbols_asa_TZ', 'goog.labs.i18n.ListFormatSymbols_az_Cyrl', 'goog.labs.i18n.ListFormatSymbols_az_Cyrl_AZ', 'goog.labs.i18n.ListFormatSymbols_az_Latn', 'goog.labs.i18n.ListFormatSymbols_az_Latn_AZ', 'goog.labs.i18n.ListFormatSymbols_bas', 'goog.labs.i18n.ListFormatSymbols_bas_CM', 'goog.labs.i18n.ListFormatSymbols_be_BY', 'goog.labs.i18n.ListFormatSymbols_bem', 'goog.labs.i18n.ListFormatSymbols_bem_ZM', 'goog.labs.i18n.ListFormatSymbols_bez', 'goog.labs.i18n.ListFormatSymbols_bez_TZ', 'goog.labs.i18n.ListFormatSymbols_bg_BG', 'goog.labs.i18n.ListFormatSymbols_bm', 'goog.labs.i18n.ListFormatSymbols_bm_Latn', 'goog.labs.i18n.ListFormatSymbols_bm_Latn_ML', 'goog.labs.i18n.ListFormatSymbols_bn_BD', 'goog.labs.i18n.ListFormatSymbols_bn_IN', 'goog.labs.i18n.ListFormatSymbols_bo', 'goog.labs.i18n.ListFormatSymbols_bo_CN', 'goog.labs.i18n.ListFormatSymbols_bo_IN', 'goog.labs.i18n.ListFormatSymbols_br_FR', 'goog.labs.i18n.ListFormatSymbols_brx', 'goog.labs.i18n.ListFormatSymbols_brx_IN', 'goog.labs.i18n.ListFormatSymbols_bs_Cyrl', 'goog.labs.i18n.ListFormatSymbols_bs_Cyrl_BA', 'goog.labs.i18n.ListFormatSymbols_bs_Latn', 'goog.labs.i18n.ListFormatSymbols_bs_Latn_BA', 'goog.labs.i18n.ListFormatSymbols_ca_AD', 'goog.labs.i18n.ListFormatSymbols_ca_ES', 'goog.labs.i18n.ListFormatSymbols_ca_FR', 'goog.labs.i18n.ListFormatSymbols_ca_IT', 'goog.labs.i18n.ListFormatSymbols_cgg', 'goog.labs.i18n.ListFormatSymbols_cgg_UG', 'goog.labs.i18n.ListFormatSymbols_chr_US', 'goog.labs.i18n.ListFormatSymbols_cs_CZ', 'goog.labs.i18n.ListFormatSymbols_cy_GB', 'goog.labs.i18n.ListFormatSymbols_da_DK', 'goog.labs.i18n.ListFormatSymbols_da_GL', 'goog.labs.i18n.ListFormatSymbols_dav', 'goog.labs.i18n.ListFormatSymbols_dav_KE', 'goog.labs.i18n.ListFormatSymbols_de_BE', 'goog.labs.i18n.ListFormatSymbols_de_DE', 'goog.labs.i18n.ListFormatSymbols_de_LI', 'goog.labs.i18n.ListFormatSymbols_de_LU', 'goog.labs.i18n.ListFormatSymbols_dje', 'goog.labs.i18n.ListFormatSymbols_dje_NE', 'goog.labs.i18n.ListFormatSymbols_dsb', 'goog.labs.i18n.ListFormatSymbols_dsb_DE', 'goog.labs.i18n.ListFormatSymbols_dua', 'goog.labs.i18n.ListFormatSymbols_dua_CM', 'goog.labs.i18n.ListFormatSymbols_dyo', 'goog.labs.i18n.ListFormatSymbols_dyo_SN', 'goog.labs.i18n.ListFormatSymbols_dz', 'goog.labs.i18n.ListFormatSymbols_dz_BT', 'goog.labs.i18n.ListFormatSymbols_ebu', 'goog.labs.i18n.ListFormatSymbols_ebu_KE', 'goog.labs.i18n.ListFormatSymbols_ee', 'goog.labs.i18n.ListFormatSymbols_ee_GH', 'goog.labs.i18n.ListFormatSymbols_ee_TG', 'goog.labs.i18n.ListFormatSymbols_el_CY', 'goog.labs.i18n.ListFormatSymbols_el_GR', 'goog.labs.i18n.ListFormatSymbols_en_001', 'goog.labs.i18n.ListFormatSymbols_en_150', 'goog.labs.i18n.ListFormatSymbols_en_AG', 'goog.labs.i18n.ListFormatSymbols_en_AI', 'goog.labs.i18n.ListFormatSymbols_en_AS', 'goog.labs.i18n.ListFormatSymbols_en_BB', 'goog.labs.i18n.ListFormatSymbols_en_BE', 'goog.labs.i18n.ListFormatSymbols_en_BM', 'goog.labs.i18n.ListFormatSymbols_en_BS', 'goog.labs.i18n.ListFormatSymbols_en_BW', 'goog.labs.i18n.ListFormatSymbols_en_BZ', 'goog.labs.i18n.ListFormatSymbols_en_CC', 'goog.labs.i18n.ListFormatSymbols_en_CK', 'goog.labs.i18n.ListFormatSymbols_en_CM', 'goog.labs.i18n.ListFormatSymbols_en_CX', 'goog.labs.i18n.ListFormatSymbols_en_DG', 'goog.labs.i18n.ListFormatSymbols_en_DM', 'goog.labs.i18n.ListFormatSymbols_en_ER', 'goog.labs.i18n.ListFormatSymbols_en_FJ', 'goog.labs.i18n.ListFormatSymbols_en_FK', 'goog.labs.i18n.ListFormatSymbols_en_FM', 'goog.labs.i18n.ListFormatSymbols_en_GD', 'goog.labs.i18n.ListFormatSymbols_en_GG', 'goog.labs.i18n.ListFormatSymbols_en_GH', 'goog.labs.i18n.ListFormatSymbols_en_GI', 'goog.labs.i18n.ListFormatSymbols_en_GM', 'goog.labs.i18n.ListFormatSymbols_en_GU', 'goog.labs.i18n.ListFormatSymbols_en_GY', 'goog.labs.i18n.ListFormatSymbols_en_HK', 'goog.labs.i18n.ListFormatSymbols_en_IM', 'goog.labs.i18n.ListFormatSymbols_en_IO', 'goog.labs.i18n.ListFormatSymbols_en_JE', 'goog.labs.i18n.ListFormatSymbols_en_JM', 'goog.labs.i18n.ListFormatSymbols_en_KE', 'goog.labs.i18n.ListFormatSymbols_en_KI', 'goog.labs.i18n.ListFormatSymbols_en_KN', 'goog.labs.i18n.ListFormatSymbols_en_KY', 'goog.labs.i18n.ListFormatSymbols_en_LC', 'goog.labs.i18n.ListFormatSymbols_en_LR', 'goog.labs.i18n.ListFormatSymbols_en_LS', 'goog.labs.i18n.ListFormatSymbols_en_MG', 'goog.labs.i18n.ListFormatSymbols_en_MH', 'goog.labs.i18n.ListFormatSymbols_en_MO', 'goog.labs.i18n.ListFormatSymbols_en_MP', 'goog.labs.i18n.ListFormatSymbols_en_MS', 'goog.labs.i18n.ListFormatSymbols_en_MT', 'goog.labs.i18n.ListFormatSymbols_en_MU', 'goog.labs.i18n.ListFormatSymbols_en_MW', 'goog.labs.i18n.ListFormatSymbols_en_MY', 'goog.labs.i18n.ListFormatSymbols_en_NA', 'goog.labs.i18n.ListFormatSymbols_en_NF', 'goog.labs.i18n.ListFormatSymbols_en_NG', 'goog.labs.i18n.ListFormatSymbols_en_NR', 'goog.labs.i18n.ListFormatSymbols_en_NU', 'goog.labs.i18n.ListFormatSymbols_en_NZ', 'goog.labs.i18n.ListFormatSymbols_en_PG', 'goog.labs.i18n.ListFormatSymbols_en_PH', 'goog.labs.i18n.ListFormatSymbols_en_PK', 'goog.labs.i18n.ListFormatSymbols_en_PN', 'goog.labs.i18n.ListFormatSymbols_en_PR', 'goog.labs.i18n.ListFormatSymbols_en_PW', 'goog.labs.i18n.ListFormatSymbols_en_RW', 'goog.labs.i18n.ListFormatSymbols_en_SB', 'goog.labs.i18n.ListFormatSymbols_en_SC', 'goog.labs.i18n.ListFormatSymbols_en_SD', 'goog.labs.i18n.ListFormatSymbols_en_SH', 'goog.labs.i18n.ListFormatSymbols_en_SL', 'goog.labs.i18n.ListFormatSymbols_en_SS', 'goog.labs.i18n.ListFormatSymbols_en_SX', 'goog.labs.i18n.ListFormatSymbols_en_SZ', 'goog.labs.i18n.ListFormatSymbols_en_TC', 'goog.labs.i18n.ListFormatSymbols_en_TK', 'goog.labs.i18n.ListFormatSymbols_en_TO', 'goog.labs.i18n.ListFormatSymbols_en_TT', 'goog.labs.i18n.ListFormatSymbols_en_TV', 'goog.labs.i18n.ListFormatSymbols_en_TZ', 'goog.labs.i18n.ListFormatSymbols_en_UG', 'goog.labs.i18n.ListFormatSymbols_en_UM', 'goog.labs.i18n.ListFormatSymbols_en_US_POSIX', 'goog.labs.i18n.ListFormatSymbols_en_VC', 'goog.labs.i18n.ListFormatSymbols_en_VG', 'goog.labs.i18n.ListFormatSymbols_en_VI', 'goog.labs.i18n.ListFormatSymbols_en_VU', 'goog.labs.i18n.ListFormatSymbols_en_WS', 'goog.labs.i18n.ListFormatSymbols_en_ZM', 'goog.labs.i18n.ListFormatSymbols_en_ZW', 'goog.labs.i18n.ListFormatSymbols_eo', 'goog.labs.i18n.ListFormatSymbols_es_AR', 'goog.labs.i18n.ListFormatSymbols_es_BO', 'goog.labs.i18n.ListFormatSymbols_es_CL', 'goog.labs.i18n.ListFormatSymbols_es_CO', 'goog.labs.i18n.ListFormatSymbols_es_CR', 'goog.labs.i18n.ListFormatSymbols_es_CU', 'goog.labs.i18n.ListFormatSymbols_es_DO', 'goog.labs.i18n.ListFormatSymbols_es_EA', 'goog.labs.i18n.ListFormatSymbols_es_EC', 'goog.labs.i18n.ListFormatSymbols_es_GQ', 'goog.labs.i18n.ListFormatSymbols_es_GT', 'goog.labs.i18n.ListFormatSymbols_es_HN', 'goog.labs.i18n.ListFormatSymbols_es_IC', 'goog.labs.i18n.ListFormatSymbols_es_NI', 'goog.labs.i18n.ListFormatSymbols_es_PA', 'goog.labs.i18n.ListFormatSymbols_es_PE', 'goog.labs.i18n.ListFormatSymbols_es_PH', 'goog.labs.i18n.ListFormatSymbols_es_PR', 'goog.labs.i18n.ListFormatSymbols_es_PY', 'goog.labs.i18n.ListFormatSymbols_es_SV', 'goog.labs.i18n.ListFormatSymbols_es_UY', 'goog.labs.i18n.ListFormatSymbols_es_VE', 'goog.labs.i18n.ListFormatSymbols_et_EE', 'goog.labs.i18n.ListFormatSymbols_eu_ES', 'goog.labs.i18n.ListFormatSymbols_ewo', 'goog.labs.i18n.ListFormatSymbols_ewo_CM', 'goog.labs.i18n.ListFormatSymbols_fa_AF', 'goog.labs.i18n.ListFormatSymbols_fa_IR', 'goog.labs.i18n.ListFormatSymbols_ff', 'goog.labs.i18n.ListFormatSymbols_ff_CM', 'goog.labs.i18n.ListFormatSymbols_ff_GN', 'goog.labs.i18n.ListFormatSymbols_ff_MR', 'goog.labs.i18n.ListFormatSymbols_ff_SN', 'goog.labs.i18n.ListFormatSymbols_fi_FI', 'goog.labs.i18n.ListFormatSymbols_fil_PH', 'goog.labs.i18n.ListFormatSymbols_fo', 'goog.labs.i18n.ListFormatSymbols_fo_FO', 'goog.labs.i18n.ListFormatSymbols_fr_BE', 'goog.labs.i18n.ListFormatSymbols_fr_BF', 'goog.labs.i18n.ListFormatSymbols_fr_BI', 'goog.labs.i18n.ListFormatSymbols_fr_BJ', 'goog.labs.i18n.ListFormatSymbols_fr_BL', 'goog.labs.i18n.ListFormatSymbols_fr_CD', 'goog.labs.i18n.ListFormatSymbols_fr_CF', 'goog.labs.i18n.ListFormatSymbols_fr_CG', 'goog.labs.i18n.ListFormatSymbols_fr_CH', 'goog.labs.i18n.ListFormatSymbols_fr_CI', 'goog.labs.i18n.ListFormatSymbols_fr_CM', 'goog.labs.i18n.ListFormatSymbols_fr_DJ', 'goog.labs.i18n.ListFormatSymbols_fr_DZ', 'goog.labs.i18n.ListFormatSymbols_fr_FR', 'goog.labs.i18n.ListFormatSymbols_fr_GA', 'goog.labs.i18n.ListFormatSymbols_fr_GF', 'goog.labs.i18n.ListFormatSymbols_fr_GN', 'goog.labs.i18n.ListFormatSymbols_fr_GP', 'goog.labs.i18n.ListFormatSymbols_fr_GQ', 'goog.labs.i18n.ListFormatSymbols_fr_HT', 'goog.labs.i18n.ListFormatSymbols_fr_KM', 'goog.labs.i18n.ListFormatSymbols_fr_LU', 'goog.labs.i18n.ListFormatSymbols_fr_MA', 'goog.labs.i18n.ListFormatSymbols_fr_MC', 'goog.labs.i18n.ListFormatSymbols_fr_MF', 'goog.labs.i18n.ListFormatSymbols_fr_MG', 'goog.labs.i18n.ListFormatSymbols_fr_ML', 'goog.labs.i18n.ListFormatSymbols_fr_MQ', 'goog.labs.i18n.ListFormatSymbols_fr_MR', 'goog.labs.i18n.ListFormatSymbols_fr_MU', 'goog.labs.i18n.ListFormatSymbols_fr_NC', 'goog.labs.i18n.ListFormatSymbols_fr_NE', 'goog.labs.i18n.ListFormatSymbols_fr_PF', 'goog.labs.i18n.ListFormatSymbols_fr_PM', 'goog.labs.i18n.ListFormatSymbols_fr_RE', 'goog.labs.i18n.ListFormatSymbols_fr_RW', 'goog.labs.i18n.ListFormatSymbols_fr_SC', 'goog.labs.i18n.ListFormatSymbols_fr_SN', 'goog.labs.i18n.ListFormatSymbols_fr_SY', 'goog.labs.i18n.ListFormatSymbols_fr_TD', 'goog.labs.i18n.ListFormatSymbols_fr_TG', 'goog.labs.i18n.ListFormatSymbols_fr_TN', 'goog.labs.i18n.ListFormatSymbols_fr_VU', 'goog.labs.i18n.ListFormatSymbols_fr_WF', 'goog.labs.i18n.ListFormatSymbols_fr_YT', 'goog.labs.i18n.ListFormatSymbols_fur', 'goog.labs.i18n.ListFormatSymbols_fur_IT', 'goog.labs.i18n.ListFormatSymbols_fy', 'goog.labs.i18n.ListFormatSymbols_fy_NL', 'goog.labs.i18n.ListFormatSymbols_ga_IE', 'goog.labs.i18n.ListFormatSymbols_gd', 'goog.labs.i18n.ListFormatSymbols_gd_GB', 'goog.labs.i18n.ListFormatSymbols_gl_ES', 'goog.labs.i18n.ListFormatSymbols_gsw_CH', 'goog.labs.i18n.ListFormatSymbols_gsw_FR', 'goog.labs.i18n.ListFormatSymbols_gsw_LI', 'goog.labs.i18n.ListFormatSymbols_gu_IN', 'goog.labs.i18n.ListFormatSymbols_guz', 'goog.labs.i18n.ListFormatSymbols_guz_KE', 'goog.labs.i18n.ListFormatSymbols_gv', 'goog.labs.i18n.ListFormatSymbols_gv_IM', 'goog.labs.i18n.ListFormatSymbols_ha', 'goog.labs.i18n.ListFormatSymbols_ha_Latn', 'goog.labs.i18n.ListFormatSymbols_ha_Latn_GH', 'goog.labs.i18n.ListFormatSymbols_ha_Latn_NE', 'goog.labs.i18n.ListFormatSymbols_ha_Latn_NG', 'goog.labs.i18n.ListFormatSymbols_haw_US', 'goog.labs.i18n.ListFormatSymbols_he_IL', 'goog.labs.i18n.ListFormatSymbols_hi_IN', 'goog.labs.i18n.ListFormatSymbols_hr_BA', 'goog.labs.i18n.ListFormatSymbols_hr_HR', 'goog.labs.i18n.ListFormatSymbols_hsb', 'goog.labs.i18n.ListFormatSymbols_hsb_DE', 'goog.labs.i18n.ListFormatSymbols_hu_HU', 'goog.labs.i18n.ListFormatSymbols_hy_AM', 'goog.labs.i18n.ListFormatSymbols_id_ID', 'goog.labs.i18n.ListFormatSymbols_ig', 'goog.labs.i18n.ListFormatSymbols_ig_NG', 'goog.labs.i18n.ListFormatSymbols_ii', 'goog.labs.i18n.ListFormatSymbols_ii_CN', 'goog.labs.i18n.ListFormatSymbols_is_IS', 'goog.labs.i18n.ListFormatSymbols_it_CH', 'goog.labs.i18n.ListFormatSymbols_it_IT', 'goog.labs.i18n.ListFormatSymbols_it_SM', 'goog.labs.i18n.ListFormatSymbols_ja_JP', 'goog.labs.i18n.ListFormatSymbols_jgo', 'goog.labs.i18n.ListFormatSymbols_jgo_CM', 'goog.labs.i18n.ListFormatSymbols_jmc', 'goog.labs.i18n.ListFormatSymbols_jmc_TZ', 'goog.labs.i18n.ListFormatSymbols_ka_GE', 'goog.labs.i18n.ListFormatSymbols_kab', 'goog.labs.i18n.ListFormatSymbols_kab_DZ', 'goog.labs.i18n.ListFormatSymbols_kam', 'goog.labs.i18n.ListFormatSymbols_kam_KE', 'goog.labs.i18n.ListFormatSymbols_kde', 'goog.labs.i18n.ListFormatSymbols_kde_TZ', 'goog.labs.i18n.ListFormatSymbols_kea', 'goog.labs.i18n.ListFormatSymbols_kea_CV', 'goog.labs.i18n.ListFormatSymbols_khq', 'goog.labs.i18n.ListFormatSymbols_khq_ML', 'goog.labs.i18n.ListFormatSymbols_ki', 'goog.labs.i18n.ListFormatSymbols_ki_KE', 'goog.labs.i18n.ListFormatSymbols_kk_Cyrl', 'goog.labs.i18n.ListFormatSymbols_kk_Cyrl_KZ', 'goog.labs.i18n.ListFormatSymbols_kkj', 'goog.labs.i18n.ListFormatSymbols_kkj_CM', 'goog.labs.i18n.ListFormatSymbols_kl', 'goog.labs.i18n.ListFormatSymbols_kl_GL', 'goog.labs.i18n.ListFormatSymbols_kln', 'goog.labs.i18n.ListFormatSymbols_kln_KE', 'goog.labs.i18n.ListFormatSymbols_km_KH', 'goog.labs.i18n.ListFormatSymbols_kn_IN', 'goog.labs.i18n.ListFormatSymbols_ko_KP', 'goog.labs.i18n.ListFormatSymbols_ko_KR', 'goog.labs.i18n.ListFormatSymbols_kok', 'goog.labs.i18n.ListFormatSymbols_kok_IN', 'goog.labs.i18n.ListFormatSymbols_ks', 'goog.labs.i18n.ListFormatSymbols_ks_Arab', 'goog.labs.i18n.ListFormatSymbols_ks_Arab_IN', 'goog.labs.i18n.ListFormatSymbols_ksb', 'goog.labs.i18n.ListFormatSymbols_ksb_TZ', 'goog.labs.i18n.ListFormatSymbols_ksf', 'goog.labs.i18n.ListFormatSymbols_ksf_CM', 'goog.labs.i18n.ListFormatSymbols_ksh', 'goog.labs.i18n.ListFormatSymbols_ksh_DE', 'goog.labs.i18n.ListFormatSymbols_kw', 'goog.labs.i18n.ListFormatSymbols_kw_GB', 'goog.labs.i18n.ListFormatSymbols_ky_Cyrl', 'goog.labs.i18n.ListFormatSymbols_ky_Cyrl_KG', 'goog.labs.i18n.ListFormatSymbols_lag', 'goog.labs.i18n.ListFormatSymbols_lag_TZ', 'goog.labs.i18n.ListFormatSymbols_lb', 'goog.labs.i18n.ListFormatSymbols_lb_LU', 'goog.labs.i18n.ListFormatSymbols_lg', 'goog.labs.i18n.ListFormatSymbols_lg_UG', 'goog.labs.i18n.ListFormatSymbols_lkt', 'goog.labs.i18n.ListFormatSymbols_lkt_US', 'goog.labs.i18n.ListFormatSymbols_ln_AO', 'goog.labs.i18n.ListFormatSymbols_ln_CD', 'goog.labs.i18n.ListFormatSymbols_ln_CF', 'goog.labs.i18n.ListFormatSymbols_ln_CG', 'goog.labs.i18n.ListFormatSymbols_lo_LA', 'goog.labs.i18n.ListFormatSymbols_lt_LT', 'goog.labs.i18n.ListFormatSymbols_lu', 'goog.labs.i18n.ListFormatSymbols_lu_CD', 'goog.labs.i18n.ListFormatSymbols_luo', 'goog.labs.i18n.ListFormatSymbols_luo_KE', 'goog.labs.i18n.ListFormatSymbols_luy', 'goog.labs.i18n.ListFormatSymbols_luy_KE', 'goog.labs.i18n.ListFormatSymbols_lv_LV', 'goog.labs.i18n.ListFormatSymbols_mas', 'goog.labs.i18n.ListFormatSymbols_mas_KE', 'goog.labs.i18n.ListFormatSymbols_mas_TZ', 'goog.labs.i18n.ListFormatSymbols_mer', 'goog.labs.i18n.ListFormatSymbols_mer_KE', 'goog.labs.i18n.ListFormatSymbols_mfe', 'goog.labs.i18n.ListFormatSymbols_mfe_MU', 'goog.labs.i18n.ListFormatSymbols_mg', 'goog.labs.i18n.ListFormatSymbols_mg_MG', 'goog.labs.i18n.ListFormatSymbols_mgh', 'goog.labs.i18n.ListFormatSymbols_mgh_MZ', 'goog.labs.i18n.ListFormatSymbols_mgo', 'goog.labs.i18n.ListFormatSymbols_mgo_CM', 'goog.labs.i18n.ListFormatSymbols_mk_MK', 'goog.labs.i18n.ListFormatSymbols_ml_IN', 'goog.labs.i18n.ListFormatSymbols_mn_Cyrl', 'goog.labs.i18n.ListFormatSymbols_mn_Cyrl_MN', 'goog.labs.i18n.ListFormatSymbols_mr_IN', 'goog.labs.i18n.ListFormatSymbols_ms_Latn', 'goog.labs.i18n.ListFormatSymbols_ms_Latn_BN', 'goog.labs.i18n.ListFormatSymbols_ms_Latn_MY', 'goog.labs.i18n.ListFormatSymbols_ms_Latn_SG', 'goog.labs.i18n.ListFormatSymbols_mt_MT', 'goog.labs.i18n.ListFormatSymbols_mua', 'goog.labs.i18n.ListFormatSymbols_mua_CM', 'goog.labs.i18n.ListFormatSymbols_my_MM', 'goog.labs.i18n.ListFormatSymbols_naq', 'goog.labs.i18n.ListFormatSymbols_naq_NA', 'goog.labs.i18n.ListFormatSymbols_nb_NO', 'goog.labs.i18n.ListFormatSymbols_nb_SJ', 'goog.labs.i18n.ListFormatSymbols_nd', 'goog.labs.i18n.ListFormatSymbols_nd_ZW', 'goog.labs.i18n.ListFormatSymbols_ne_IN', 'goog.labs.i18n.ListFormatSymbols_ne_NP', 'goog.labs.i18n.ListFormatSymbols_nl_AW', 'goog.labs.i18n.ListFormatSymbols_nl_BE', 'goog.labs.i18n.ListFormatSymbols_nl_BQ', 'goog.labs.i18n.ListFormatSymbols_nl_CW', 'goog.labs.i18n.ListFormatSymbols_nl_NL', 'goog.labs.i18n.ListFormatSymbols_nl_SR', 'goog.labs.i18n.ListFormatSymbols_nl_SX', 'goog.labs.i18n.ListFormatSymbols_nmg', 'goog.labs.i18n.ListFormatSymbols_nmg_CM', 'goog.labs.i18n.ListFormatSymbols_nn', 'goog.labs.i18n.ListFormatSymbols_nn_NO', 'goog.labs.i18n.ListFormatSymbols_nnh', 'goog.labs.i18n.ListFormatSymbols_nnh_CM', 'goog.labs.i18n.ListFormatSymbols_nus', 'goog.labs.i18n.ListFormatSymbols_nus_SD', 'goog.labs.i18n.ListFormatSymbols_nyn', 'goog.labs.i18n.ListFormatSymbols_nyn_UG', 'goog.labs.i18n.ListFormatSymbols_om', 'goog.labs.i18n.ListFormatSymbols_om_ET', 'goog.labs.i18n.ListFormatSymbols_om_KE', 'goog.labs.i18n.ListFormatSymbols_or_IN', 'goog.labs.i18n.ListFormatSymbols_os', 'goog.labs.i18n.ListFormatSymbols_os_GE', 'goog.labs.i18n.ListFormatSymbols_os_RU', 'goog.labs.i18n.ListFormatSymbols_pa_Arab', 'goog.labs.i18n.ListFormatSymbols_pa_Arab_PK', 'goog.labs.i18n.ListFormatSymbols_pa_Guru', 'goog.labs.i18n.ListFormatSymbols_pa_Guru_IN', 'goog.labs.i18n.ListFormatSymbols_pl_PL', 'goog.labs.i18n.ListFormatSymbols_ps', 'goog.labs.i18n.ListFormatSymbols_ps_AF', 'goog.labs.i18n.ListFormatSymbols_pt_AO', 'goog.labs.i18n.ListFormatSymbols_pt_CV', 'goog.labs.i18n.ListFormatSymbols_pt_GW', 'goog.labs.i18n.ListFormatSymbols_pt_MO', 'goog.labs.i18n.ListFormatSymbols_pt_MZ', 'goog.labs.i18n.ListFormatSymbols_pt_ST', 'goog.labs.i18n.ListFormatSymbols_pt_TL', 'goog.labs.i18n.ListFormatSymbols_qu', 'goog.labs.i18n.ListFormatSymbols_qu_BO', 'goog.labs.i18n.ListFormatSymbols_qu_EC', 'goog.labs.i18n.ListFormatSymbols_qu_PE', 'goog.labs.i18n.ListFormatSymbols_rm', 'goog.labs.i18n.ListFormatSymbols_rm_CH', 'goog.labs.i18n.ListFormatSymbols_rn', 'goog.labs.i18n.ListFormatSymbols_rn_BI', 'goog.labs.i18n.ListFormatSymbols_ro_MD', 'goog.labs.i18n.ListFormatSymbols_ro_RO', 'goog.labs.i18n.ListFormatSymbols_rof', 'goog.labs.i18n.ListFormatSymbols_rof_TZ', 'goog.labs.i18n.ListFormatSymbols_ru_BY', 'goog.labs.i18n.ListFormatSymbols_ru_KG', 'goog.labs.i18n.ListFormatSymbols_ru_KZ', 'goog.labs.i18n.ListFormatSymbols_ru_MD', 'goog.labs.i18n.ListFormatSymbols_ru_RU', 'goog.labs.i18n.ListFormatSymbols_ru_UA', 'goog.labs.i18n.ListFormatSymbols_rw', 'goog.labs.i18n.ListFormatSymbols_rw_RW', 'goog.labs.i18n.ListFormatSymbols_rwk', 'goog.labs.i18n.ListFormatSymbols_rwk_TZ', 'goog.labs.i18n.ListFormatSymbols_sah', 'goog.labs.i18n.ListFormatSymbols_sah_RU', 'goog.labs.i18n.ListFormatSymbols_saq', 'goog.labs.i18n.ListFormatSymbols_saq_KE', 'goog.labs.i18n.ListFormatSymbols_sbp', 'goog.labs.i18n.ListFormatSymbols_sbp_TZ', 'goog.labs.i18n.ListFormatSymbols_se', 'goog.labs.i18n.ListFormatSymbols_se_FI', 'goog.labs.i18n.ListFormatSymbols_se_NO', 'goog.labs.i18n.ListFormatSymbols_se_SE', 'goog.labs.i18n.ListFormatSymbols_seh', 'goog.labs.i18n.ListFormatSymbols_seh_MZ', 'goog.labs.i18n.ListFormatSymbols_ses', 'goog.labs.i18n.ListFormatSymbols_ses_ML', 'goog.labs.i18n.ListFormatSymbols_sg', 'goog.labs.i18n.ListFormatSymbols_sg_CF', 'goog.labs.i18n.ListFormatSymbols_shi', 'goog.labs.i18n.ListFormatSymbols_shi_Latn', 'goog.labs.i18n.ListFormatSymbols_shi_Latn_MA', 'goog.labs.i18n.ListFormatSymbols_shi_Tfng', 'goog.labs.i18n.ListFormatSymbols_shi_Tfng_MA', 'goog.labs.i18n.ListFormatSymbols_si_LK', 'goog.labs.i18n.ListFormatSymbols_sk_SK', 'goog.labs.i18n.ListFormatSymbols_sl_SI', 'goog.labs.i18n.ListFormatSymbols_smn', 'goog.labs.i18n.ListFormatSymbols_smn_FI', 'goog.labs.i18n.ListFormatSymbols_sn', 'goog.labs.i18n.ListFormatSymbols_sn_ZW', 'goog.labs.i18n.ListFormatSymbols_so', 'goog.labs.i18n.ListFormatSymbols_so_DJ', 'goog.labs.i18n.ListFormatSymbols_so_ET', 'goog.labs.i18n.ListFormatSymbols_so_KE', 'goog.labs.i18n.ListFormatSymbols_so_SO', 'goog.labs.i18n.ListFormatSymbols_sq_AL', 'goog.labs.i18n.ListFormatSymbols_sq_MK', 'goog.labs.i18n.ListFormatSymbols_sq_XK', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_BA', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_ME', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_RS', 'goog.labs.i18n.ListFormatSymbols_sr_Cyrl_XK', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_BA', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_ME', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_RS', 'goog.labs.i18n.ListFormatSymbols_sr_Latn_XK', 'goog.labs.i18n.ListFormatSymbols_sv_AX', 'goog.labs.i18n.ListFormatSymbols_sv_FI', 'goog.labs.i18n.ListFormatSymbols_sv_SE', 'goog.labs.i18n.ListFormatSymbols_sw_CD', 'goog.labs.i18n.ListFormatSymbols_sw_KE', 'goog.labs.i18n.ListFormatSymbols_sw_TZ', 'goog.labs.i18n.ListFormatSymbols_sw_UG', 'goog.labs.i18n.ListFormatSymbols_ta_IN', 'goog.labs.i18n.ListFormatSymbols_ta_LK', 'goog.labs.i18n.ListFormatSymbols_ta_MY', 'goog.labs.i18n.ListFormatSymbols_ta_SG', 'goog.labs.i18n.ListFormatSymbols_te_IN', 'goog.labs.i18n.ListFormatSymbols_teo', 'goog.labs.i18n.ListFormatSymbols_teo_KE', 'goog.labs.i18n.ListFormatSymbols_teo_UG', 'goog.labs.i18n.ListFormatSymbols_th_TH', 'goog.labs.i18n.ListFormatSymbols_ti', 'goog.labs.i18n.ListFormatSymbols_ti_ER', 'goog.labs.i18n.ListFormatSymbols_ti_ET', 'goog.labs.i18n.ListFormatSymbols_to', 'goog.labs.i18n.ListFormatSymbols_to_TO', 'goog.labs.i18n.ListFormatSymbols_tr_CY', 'goog.labs.i18n.ListFormatSymbols_tr_TR', 'goog.labs.i18n.ListFormatSymbols_twq', 'goog.labs.i18n.ListFormatSymbols_twq_NE', 'goog.labs.i18n.ListFormatSymbols_tzm', 'goog.labs.i18n.ListFormatSymbols_tzm_Latn', 'goog.labs.i18n.ListFormatSymbols_tzm_Latn_MA', 'goog.labs.i18n.ListFormatSymbols_ug', 'goog.labs.i18n.ListFormatSymbols_ug_Arab', 'goog.labs.i18n.ListFormatSymbols_ug_Arab_CN', 'goog.labs.i18n.ListFormatSymbols_uk_UA', 'goog.labs.i18n.ListFormatSymbols_ur_IN', 'goog.labs.i18n.ListFormatSymbols_ur_PK', 'goog.labs.i18n.ListFormatSymbols_uz_Arab', 'goog.labs.i18n.ListFormatSymbols_uz_Arab_AF', 'goog.labs.i18n.ListFormatSymbols_uz_Cyrl', 'goog.labs.i18n.ListFormatSymbols_uz_Cyrl_UZ', 'goog.labs.i18n.ListFormatSymbols_uz_Latn', 'goog.labs.i18n.ListFormatSymbols_uz_Latn_UZ', 'goog.labs.i18n.ListFormatSymbols_vai', 'goog.labs.i18n.ListFormatSymbols_vai_Latn', 'goog.labs.i18n.ListFormatSymbols_vai_Latn_LR', 'goog.labs.i18n.ListFormatSymbols_vai_Vaii', 'goog.labs.i18n.ListFormatSymbols_vai_Vaii_LR', 'goog.labs.i18n.ListFormatSymbols_vi_VN', 'goog.labs.i18n.ListFormatSymbols_vun', 'goog.labs.i18n.ListFormatSymbols_vun_TZ', 'goog.labs.i18n.ListFormatSymbols_wae', 'goog.labs.i18n.ListFormatSymbols_wae_CH', 'goog.labs.i18n.ListFormatSymbols_xog', 'goog.labs.i18n.ListFormatSymbols_xog_UG', 'goog.labs.i18n.ListFormatSymbols_yav', 'goog.labs.i18n.ListFormatSymbols_yav_CM', 'goog.labs.i18n.ListFormatSymbols_yi', 'goog.labs.i18n.ListFormatSymbols_yi_001', 'goog.labs.i18n.ListFormatSymbols_yo', 'goog.labs.i18n.ListFormatSymbols_yo_BJ', 'goog.labs.i18n.ListFormatSymbols_yo_NG', 'goog.labs.i18n.ListFormatSymbols_zgh', 'goog.labs.i18n.ListFormatSymbols_zgh_MA', 'goog.labs.i18n.ListFormatSymbols_zh_Hans', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_CN', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_HK', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_MO', 'goog.labs.i18n.ListFormatSymbols_zh_Hans_SG', 'goog.labs.i18n.ListFormatSymbols_zh_Hant', 'goog.labs.i18n.ListFormatSymbols_zh_Hant_HK', 'goog.labs.i18n.ListFormatSymbols_zh_Hant_MO', 'goog.labs.i18n.ListFormatSymbols_zh_Hant_TW', 'goog.labs.i18n.ListFormatSymbols_zu_ZA'], ['goog.labs.i18n.ListFormatSymbols'], false); goog.addDependency('labs/iterable/iterable.js', ['goog.labs.iterable'], [], true); goog.addDependency('labs/iterable/iterable_test.js', ['goog.labs.iterableTest'], ['goog.labs.iterable', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.testing.testSuite'], true); goog.addDependency('labs/mock/mock.js', ['goog.labs.mock', 'goog.labs.mock.VerificationError'], ['goog.array', 'goog.asserts', 'goog.debug', 'goog.debug.Error', 'goog.functions', 'goog.object'], false); goog.addDependency('labs/mock/mock_test.js', ['goog.labs.mockTest'], ['goog.array', 'goog.labs.mock', 'goog.labs.mock.VerificationError', 'goog.labs.testing.AnythingMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.string', 'goog.testing.jsunit'], false); goog.addDependency('labs/net/image.js', ['goog.labs.net.image'], ['goog.Promise', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.net.EventType', 'goog.userAgent'], false); goog.addDependency('labs/net/image_test.js', ['goog.labs.net.imageTest'], ['goog.labs.net.image', 'goog.string', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('labs/net/webchannel.js', ['goog.net.WebChannel'], ['goog.events', 'goog.events.Event'], false); goog.addDependency('labs/net/webchannel/basetestchannel.js', ['goog.labs.net.webChannel.BaseTestChannel'], ['goog.labs.net.webChannel.Channel', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Stat'], false); goog.addDependency('labs/net/webchannel/channel.js', ['goog.labs.net.webChannel.Channel'], [], false); goog.addDependency('labs/net/webchannel/channelrequest.js', ['goog.labs.net.webChannel.ChannelRequest'], ['goog.Timer', 'goog.async.Throttle', 'goog.events.EventHandler', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.ServerReachability', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XmlHttp', 'goog.object', 'goog.userAgent'], false); goog.addDependency('labs/net/webchannel/channelrequest_test.js', ['goog.labs.net.webChannel.channelRequestTest'], ['goog.Uri', 'goog.functions', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.WebChannelDebug', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.ServerReachability', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction'], false); goog.addDependency('labs/net/webchannel/connectionstate.js', ['goog.labs.net.webChannel.ConnectionState'], [], false); goog.addDependency('labs/net/webchannel/forwardchannelrequestpool.js', ['goog.labs.net.webChannel.ForwardChannelRequestPool'], ['goog.array', 'goog.string', 'goog.structs.Set'], false); goog.addDependency('labs/net/webchannel/forwardchannelrequestpool_test.js', ['goog.labs.net.webChannel.forwardChannelRequestPoolTest'], ['goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.ForwardChannelRequestPool', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit'], false); goog.addDependency('labs/net/webchannel/netutils.js', ['goog.labs.net.webChannel.netUtils'], ['goog.Uri', 'goog.labs.net.webChannel.WebChannelDebug'], false); goog.addDependency('labs/net/webchannel/requeststats.js', ['goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Event', 'goog.labs.net.webChannel.requestStats.ServerReachability', 'goog.labs.net.webChannel.requestStats.ServerReachabilityEvent', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.labs.net.webChannel.requestStats.StatEvent', 'goog.labs.net.webChannel.requestStats.TimingEvent'], ['goog.events.Event', 'goog.events.EventTarget'], false); goog.addDependency('labs/net/webchannel/webchannelbase.js', ['goog.labs.net.webChannel.WebChannelBase'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.debug.TextFormatter', 'goog.json', 'goog.labs.net.webChannel.BaseTestChannel', 'goog.labs.net.webChannel.Channel', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.ConnectionState', 'goog.labs.net.webChannel.ForwardChannelRequestPool', 'goog.labs.net.webChannel.WebChannelDebug', 'goog.labs.net.webChannel.Wire', 'goog.labs.net.webChannel.WireV8', 'goog.labs.net.webChannel.netUtils', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.log', 'goog.net.XhrIo', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.CircularBuffer'], false); goog.addDependency('labs/net/webchannel/webchannelbase_test.js', ['goog.labs.net.webChannel.webChannelBaseTest'], ['goog.Timer', 'goog.array', 'goog.dom', 'goog.functions', 'goog.json', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.ForwardChannelRequestPool', 'goog.labs.net.webChannel.WebChannelBase', 'goog.labs.net.webChannel.WebChannelBaseTransport', 'goog.labs.net.webChannel.WebChannelDebug', 'goog.labs.net.webChannel.Wire', 'goog.labs.net.webChannel.netUtils', 'goog.labs.net.webChannel.requestStats', 'goog.labs.net.webChannel.requestStats.Stat', 'goog.structs.Map', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit'], false); goog.addDependency('labs/net/webchannel/webchannelbasetransport.js', ['goog.labs.net.webChannel.WebChannelBaseTransport'], ['goog.asserts', 'goog.events.EventTarget', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.WebChannelBase', 'goog.log', 'goog.net.WebChannel', 'goog.net.WebChannelTransport', 'goog.object', 'goog.string.path'], false); goog.addDependency('labs/net/webchannel/webchannelbasetransport_test.js', ['goog.labs.net.webChannel.webChannelBaseTransportTest'], ['goog.events', 'goog.functions', 'goog.labs.net.webChannel.ChannelRequest', 'goog.labs.net.webChannel.WebChannelBaseTransport', 'goog.net.WebChannel', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('labs/net/webchannel/webchanneldebug.js', ['goog.labs.net.webChannel.WebChannelDebug'], ['goog.json', 'goog.log'], false); goog.addDependency('labs/net/webchannel/wire.js', ['goog.labs.net.webChannel.Wire'], [], false); goog.addDependency('labs/net/webchannel/wirev8.js', ['goog.labs.net.webChannel.WireV8'], ['goog.asserts', 'goog.json', 'goog.json.NativeJsonProcessor', 'goog.structs'], false); goog.addDependency('labs/net/webchannel/wirev8_test.js', ['goog.labs.net.webChannel.WireV8Test'], ['goog.labs.net.webChannel.WireV8', 'goog.testing.jsunit'], false); goog.addDependency('labs/net/webchanneltransport.js', ['goog.net.WebChannelTransport'], [], false); goog.addDependency('labs/net/webchanneltransportfactory.js', ['goog.net.createWebChannelTransport'], ['goog.functions', 'goog.labs.net.webChannel.WebChannelBaseTransport'], false); goog.addDependency('labs/net/xhr.js', ['goog.labs.net.xhr', 'goog.labs.net.xhr.Error', 'goog.labs.net.xhr.HttpError', 'goog.labs.net.xhr.Options', 'goog.labs.net.xhr.PostData', 'goog.labs.net.xhr.ResponseType', 'goog.labs.net.xhr.TimeoutError'], ['goog.Promise', 'goog.debug.Error', 'goog.json', 'goog.net.HttpStatus', 'goog.net.XmlHttp', 'goog.string', 'goog.uri.utils', 'goog.userAgent'], false); goog.addDependency('labs/net/xhr_test.js', ['goog.labs.net.xhrTest'], ['goog.Promise', 'goog.labs.net.xhr', 'goog.net.WrapperXmlHttpFactory', 'goog.net.XmlHttp', 'goog.testing.MockClock', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('labs/object/object.js', ['goog.labs.object'], [], false); goog.addDependency('labs/object/object_test.js', ['goog.labs.objectTest'], ['goog.labs.object', 'goog.testing.jsunit'], false); goog.addDependency('labs/pubsub/broadcastpubsub.js', ['goog.labs.pubsub.BroadcastPubSub'], ['goog.Disposable', 'goog.Timer', 'goog.array', 'goog.async.run', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.json', 'goog.log', 'goog.math', 'goog.pubsub.PubSub', 'goog.storage.Storage', 'goog.storage.mechanism.HTML5LocalStorage', 'goog.string', 'goog.userAgent'], false); goog.addDependency('labs/pubsub/broadcastpubsub_test.js', ['goog.labs.pubsub.BroadcastPubSubTest'], ['goog.array', 'goog.debug.Logger', 'goog.json', 'goog.labs.pubsub.BroadcastPubSub', 'goog.storage.Storage', 'goog.structs.Map', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('labs/storage/boundedcollectablestorage.js', ['goog.labs.storage.BoundedCollectableStorage'], ['goog.array', 'goog.asserts', 'goog.iter', 'goog.storage.CollectableStorage', 'goog.storage.ErrorCode', 'goog.storage.ExpiringStorage'], false); goog.addDependency('labs/storage/boundedcollectablestorage_test.js', ['goog.labs.storage.BoundedCollectableStorageTest'], ['goog.labs.storage.BoundedCollectableStorage', 'goog.storage.collectableStorageTester', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false); goog.addDependency('labs/structs/map.js', ['goog.labs.structs.Map'], ['goog.array', 'goog.asserts', 'goog.labs.object', 'goog.object'], false); goog.addDependency('labs/structs/map_perf.js', ['goog.labs.structs.MapPerf'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.labs.structs.Map', 'goog.structs.Map', 'goog.testing.PerformanceTable', 'goog.testing.jsunit'], false); goog.addDependency('labs/structs/map_test.js', ['goog.labs.structs.MapTest'], ['goog.labs.structs.Map', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('labs/structs/multimap.js', ['goog.labs.structs.Multimap'], ['goog.array', 'goog.labs.object', 'goog.labs.structs.Map'], false); goog.addDependency('labs/structs/multimap_test.js', ['goog.labs.structs.MultimapTest'], ['goog.labs.structs.Map', 'goog.labs.structs.Multimap', 'goog.testing.jsunit'], false); goog.addDependency('labs/style/pixeldensitymonitor.js', ['goog.labs.style.PixelDensityMonitor', 'goog.labs.style.PixelDensityMonitor.Density', 'goog.labs.style.PixelDensityMonitor.EventType'], ['goog.events', 'goog.events.EventTarget'], false); goog.addDependency('labs/style/pixeldensitymonitor_test.js', ['goog.labs.style.PixelDensityMonitorTest'], ['goog.array', 'goog.dom.DomHelper', 'goog.events', 'goog.labs.style.PixelDensityMonitor', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('labs/testing/assertthat.js', ['goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat'], ['goog.debug.Error'], false); goog.addDependency('labs/testing/assertthat_test.js', ['goog.labs.testing.assertThatTest'], ['goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('labs/testing/decoratormatcher.js', ['goog.labs.testing.AnythingMatcher'], ['goog.labs.testing.Matcher'], false); goog.addDependency('labs/testing/decoratormatcher_test.js', ['goog.labs.testing.decoratorMatcherTest'], ['goog.labs.testing.AnythingMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false); goog.addDependency('labs/testing/dictionarymatcher.js', ['goog.labs.testing.HasEntriesMatcher', 'goog.labs.testing.HasEntryMatcher', 'goog.labs.testing.HasKeyMatcher', 'goog.labs.testing.HasValueMatcher'], ['goog.asserts', 'goog.labs.testing.Matcher', 'goog.object'], false); goog.addDependency('labs/testing/dictionarymatcher_test.js', ['goog.labs.testing.dictionaryMatcherTest'], ['goog.labs.testing.HasEntryMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false); goog.addDependency('labs/testing/environment.js', ['goog.labs.testing.Environment'], ['goog.array', 'goog.asserts', 'goog.debug.Console', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('labs/testing/environment_test.js', ['goog.labs.testing.environmentTest'], ['goog.labs.testing.Environment', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.testing.testSuite'], false); goog.addDependency('labs/testing/environment_usage_test.js', ['goog.labs.testing.environmentUsageTest'], ['goog.labs.testing.Environment'], false); goog.addDependency('labs/testing/logicmatcher.js', ['goog.labs.testing.AllOfMatcher', 'goog.labs.testing.AnyOfMatcher', 'goog.labs.testing.IsNotMatcher'], ['goog.array', 'goog.labs.testing.Matcher'], false); goog.addDependency('labs/testing/logicmatcher_test.js', ['goog.labs.testing.logicMatcherTest'], ['goog.labs.testing.AllOfMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false); goog.addDependency('labs/testing/matcher.js', ['goog.labs.testing.Matcher'], [], false); goog.addDependency('labs/testing/numbermatcher.js', ['goog.labs.testing.CloseToMatcher', 'goog.labs.testing.EqualToMatcher', 'goog.labs.testing.GreaterThanEqualToMatcher', 'goog.labs.testing.GreaterThanMatcher', 'goog.labs.testing.LessThanEqualToMatcher', 'goog.labs.testing.LessThanMatcher'], ['goog.asserts', 'goog.labs.testing.Matcher'], false); goog.addDependency('labs/testing/numbermatcher_test.js', ['goog.labs.testing.numberMatcherTest'], ['goog.labs.testing.LessThanMatcher', 'goog.labs.testing.MatcherError', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false); goog.addDependency('labs/testing/objectmatcher.js', ['goog.labs.testing.HasPropertyMatcher', 'goog.labs.testing.InstanceOfMatcher', 'goog.labs.testing.IsNullMatcher', 'goog.labs.testing.IsNullOrUndefinedMatcher', 'goog.labs.testing.IsUndefinedMatcher', 'goog.labs.testing.ObjectEqualsMatcher'], ['goog.labs.testing.Matcher'], false); goog.addDependency('labs/testing/objectmatcher_test.js', ['goog.labs.testing.objectMatcherTest'], ['goog.labs.testing.MatcherError', 'goog.labs.testing.ObjectEqualsMatcher', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false); goog.addDependency('labs/testing/stringmatcher.js', ['goog.labs.testing.ContainsStringMatcher', 'goog.labs.testing.EndsWithMatcher', 'goog.labs.testing.EqualToIgnoringWhitespaceMatcher', 'goog.labs.testing.EqualsMatcher', 'goog.labs.testing.RegexMatcher', 'goog.labs.testing.StartsWithMatcher', 'goog.labs.testing.StringContainsInOrderMatcher'], ['goog.asserts', 'goog.labs.testing.Matcher', 'goog.string'], false); goog.addDependency('labs/testing/stringmatcher_test.js', ['goog.labs.testing.stringMatcherTest'], ['goog.labs.testing.MatcherError', 'goog.labs.testing.StringContainsInOrderMatcher', 'goog.labs.testing.assertThat', 'goog.testing.jsunit'], false); goog.addDependency('labs/useragent/browser.js', ['goog.labs.userAgent.browser'], ['goog.array', 'goog.labs.userAgent.util', 'goog.object', 'goog.string'], false); goog.addDependency('labs/useragent/browser_test.js', ['goog.labs.userAgent.browserTest'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.object', 'goog.testing.jsunit'], false); goog.addDependency('labs/useragent/device.js', ['goog.labs.userAgent.device'], ['goog.labs.userAgent.util'], false); goog.addDependency('labs/useragent/device_test.js', ['goog.labs.userAgent.deviceTest'], ['goog.labs.userAgent.device', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.jsunit'], false); goog.addDependency('labs/useragent/engine.js', ['goog.labs.userAgent.engine'], ['goog.array', 'goog.labs.userAgent.util', 'goog.string'], false); goog.addDependency('labs/useragent/engine_test.js', ['goog.labs.userAgent.engineTest'], ['goog.labs.userAgent.engine', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.jsunit'], false); goog.addDependency('labs/useragent/platform.js', ['goog.labs.userAgent.platform'], ['goog.labs.userAgent.util', 'goog.string'], false); goog.addDependency('labs/useragent/platform_test.js', ['goog.labs.userAgent.platformTest'], ['goog.labs.userAgent.platform', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.jsunit'], false); goog.addDependency('labs/useragent/test_agents.js', ['goog.labs.userAgent.testAgents'], [], false); goog.addDependency('labs/useragent/util.js', ['goog.labs.userAgent.util'], ['goog.string'], false); goog.addDependency('labs/useragent/util_test.js', ['goog.labs.userAgent.utilTest'], ['goog.functions', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('locale/countries.js', ['goog.locale.countries'], [], false); goog.addDependency('locale/countrylanguagenames_test.js', ['goog.locale.countryLanguageNamesTest'], ['goog.locale', 'goog.testing.jsunit'], false); goog.addDependency('locale/defaultlocalenameconstants.js', ['goog.locale.defaultLocaleNameConstants'], [], false); goog.addDependency('locale/genericfontnames.js', ['goog.locale.genericFontNames'], [], false); goog.addDependency('locale/genericfontnames_test.js', ['goog.locale.genericFontNamesTest'], ['goog.locale.genericFontNames', 'goog.testing.jsunit'], false); goog.addDependency('locale/genericfontnamesdata.js', ['goog.locale.genericFontNamesData'], [], false); goog.addDependency('locale/locale.js', ['goog.locale'], ['goog.locale.nativeNameConstants'], false); goog.addDependency('locale/nativenameconstants.js', ['goog.locale.nativeNameConstants'], [], false); goog.addDependency('locale/scriptToLanguages.js', ['goog.locale.scriptToLanguages'], ['goog.locale'], false); goog.addDependency('locale/timezonedetection.js', ['goog.locale.timeZoneDetection'], ['goog.locale.TimeZoneFingerprint'], false); goog.addDependency('locale/timezonedetection_test.js', ['goog.locale.timeZoneDetectionTest'], ['goog.locale.timeZoneDetection', 'goog.testing.jsunit'], false); goog.addDependency('locale/timezonefingerprint.js', ['goog.locale.TimeZoneFingerprint'], [], false); goog.addDependency('locale/timezonelist.js', ['goog.locale.TimeZoneList'], ['goog.locale'], false); goog.addDependency('locale/timezonelist_test.js', ['goog.locale.TimeZoneListTest'], ['goog.locale', 'goog.locale.TimeZoneList', 'goog.testing.jsunit'], false); goog.addDependency('log/log.js', ['goog.log', 'goog.log.Level', 'goog.log.LogRecord', 'goog.log.Logger'], ['goog.debug', 'goog.debug.LogManager', 'goog.debug.LogRecord', 'goog.debug.Logger'], false); goog.addDependency('log/log_test.js', ['goog.logTest'], ['goog.debug.LogManager', 'goog.log', 'goog.log.Level', 'goog.testing.jsunit'], false); goog.addDependency('math/affinetransform.js', ['goog.math.AffineTransform'], ['goog.math'], false); goog.addDependency('math/affinetransform_test.js', ['goog.math.AffineTransformTest'], ['goog.array', 'goog.math', 'goog.math.AffineTransform', 'goog.testing.jsunit'], false); goog.addDependency('math/bezier.js', ['goog.math.Bezier'], ['goog.math', 'goog.math.Coordinate'], false); goog.addDependency('math/bezier_test.js', ['goog.math.BezierTest'], ['goog.math', 'goog.math.Bezier', 'goog.math.Coordinate', 'goog.testing.jsunit'], false); goog.addDependency('math/box.js', ['goog.math.Box'], ['goog.math.Coordinate'], false); goog.addDependency('math/box_test.js', ['goog.math.BoxTest'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.testing.jsunit'], false); goog.addDependency('math/coordinate.js', ['goog.math.Coordinate'], ['goog.math'], false); goog.addDependency('math/coordinate3.js', ['goog.math.Coordinate3'], [], false); goog.addDependency('math/coordinate3_test.js', ['goog.math.Coordinate3Test'], ['goog.math.Coordinate3', 'goog.testing.jsunit'], false); goog.addDependency('math/coordinate_test.js', ['goog.math.CoordinateTest'], ['goog.math.Coordinate', 'goog.testing.jsunit'], false); goog.addDependency('math/exponentialbackoff.js', ['goog.math.ExponentialBackoff'], ['goog.asserts'], false); goog.addDependency('math/exponentialbackoff_test.js', ['goog.math.ExponentialBackoffTest'], ['goog.math.ExponentialBackoff', 'goog.testing.jsunit'], false); goog.addDependency('math/integer.js', ['goog.math.Integer'], [], false); goog.addDependency('math/integer_test.js', ['goog.math.IntegerTest'], ['goog.math.Integer', 'goog.testing.jsunit'], false); goog.addDependency('math/interpolator/interpolator1.js', ['goog.math.interpolator.Interpolator1'], [], false); goog.addDependency('math/interpolator/linear1.js', ['goog.math.interpolator.Linear1'], ['goog.array', 'goog.asserts', 'goog.math', 'goog.math.interpolator.Interpolator1'], false); goog.addDependency('math/interpolator/linear1_test.js', ['goog.math.interpolator.Linear1Test'], ['goog.math.interpolator.Linear1', 'goog.testing.jsunit'], false); goog.addDependency('math/interpolator/pchip1.js', ['goog.math.interpolator.Pchip1'], ['goog.math', 'goog.math.interpolator.Spline1'], false); goog.addDependency('math/interpolator/pchip1_test.js', ['goog.math.interpolator.Pchip1Test'], ['goog.math.interpolator.Pchip1', 'goog.testing.jsunit'], false); goog.addDependency('math/interpolator/spline1.js', ['goog.math.interpolator.Spline1'], ['goog.array', 'goog.asserts', 'goog.math', 'goog.math.interpolator.Interpolator1', 'goog.math.tdma'], false); goog.addDependency('math/interpolator/spline1_test.js', ['goog.math.interpolator.Spline1Test'], ['goog.math.interpolator.Spline1', 'goog.testing.jsunit'], false); goog.addDependency('math/line.js', ['goog.math.Line'], ['goog.math', 'goog.math.Coordinate'], false); goog.addDependency('math/line_test.js', ['goog.math.LineTest'], ['goog.math.Coordinate', 'goog.math.Line', 'goog.testing.jsunit'], false); goog.addDependency('math/long.js', ['goog.math.Long'], [], false); goog.addDependency('math/long_test.js', ['goog.math.LongTest'], ['goog.math.Long', 'goog.testing.jsunit'], false); goog.addDependency('math/math.js', ['goog.math'], ['goog.array', 'goog.asserts'], false); goog.addDependency('math/math_test.js', ['goog.mathTest'], ['goog.math', 'goog.testing.jsunit'], false); goog.addDependency('math/matrix.js', ['goog.math.Matrix'], ['goog.array', 'goog.math', 'goog.math.Size', 'goog.string'], false); goog.addDependency('math/matrix_test.js', ['goog.math.MatrixTest'], ['goog.math.Matrix', 'goog.testing.jsunit'], false); goog.addDependency('math/path.js', ['goog.math.Path', 'goog.math.Path.Segment'], ['goog.array', 'goog.math'], false); goog.addDependency('math/path_test.js', ['goog.math.PathTest'], ['goog.array', 'goog.math.AffineTransform', 'goog.math.Path', 'goog.testing.jsunit'], false); goog.addDependency('math/paths.js', ['goog.math.paths'], ['goog.math.Coordinate', 'goog.math.Path'], false); goog.addDependency('math/paths_test.js', ['goog.math.pathsTest'], ['goog.math.Coordinate', 'goog.math.paths', 'goog.testing.jsunit'], false); goog.addDependency('math/range.js', ['goog.math.Range'], ['goog.asserts'], false); goog.addDependency('math/range_test.js', ['goog.math.RangeTest'], ['goog.math.Range', 'goog.testing.jsunit'], false); goog.addDependency('math/rangeset.js', ['goog.math.RangeSet'], ['goog.array', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.math.Range'], false); goog.addDependency('math/rangeset_test.js', ['goog.math.RangeSetTest'], ['goog.iter', 'goog.math.Range', 'goog.math.RangeSet', 'goog.testing.jsunit'], false); goog.addDependency('math/rect.js', ['goog.math.Rect'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.math.Size'], false); goog.addDependency('math/rect_test.js', ['goog.math.RectTest'], ['goog.math.Box', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.testing.jsunit'], false); goog.addDependency('math/size.js', ['goog.math.Size'], [], false); goog.addDependency('math/size_test.js', ['goog.math.SizeTest'], ['goog.math.Size', 'goog.testing.jsunit'], false); goog.addDependency('math/tdma.js', ['goog.math.tdma'], [], false); goog.addDependency('math/tdma_test.js', ['goog.math.tdmaTest'], ['goog.math.tdma', 'goog.testing.jsunit'], false); goog.addDependency('math/vec2.js', ['goog.math.Vec2'], ['goog.math', 'goog.math.Coordinate'], false); goog.addDependency('math/vec2_test.js', ['goog.math.Vec2Test'], ['goog.math.Vec2', 'goog.testing.jsunit'], false); goog.addDependency('math/vec3.js', ['goog.math.Vec3'], ['goog.math', 'goog.math.Coordinate3'], false); goog.addDependency('math/vec3_test.js', ['goog.math.Vec3Test'], ['goog.math.Coordinate3', 'goog.math.Vec3', 'goog.testing.jsunit'], false); goog.addDependency('memoize/memoize.js', ['goog.memoize'], [], false); goog.addDependency('memoize/memoize_test.js', ['goog.memoizeTest'], ['goog.memoize', 'goog.testing.jsunit'], false); goog.addDependency('messaging/abstractchannel.js', ['goog.messaging.AbstractChannel'], ['goog.Disposable', 'goog.json', 'goog.log', 'goog.messaging.MessageChannel'], false); goog.addDependency('messaging/abstractchannel_test.js', ['goog.messaging.AbstractChannelTest'], ['goog.messaging.AbstractChannel', 'goog.testing.MockControl', 'goog.testing.async.MockControl', 'goog.testing.jsunit'], false); goog.addDependency('messaging/bufferedchannel.js', ['goog.messaging.BufferedChannel'], ['goog.Disposable', 'goog.Timer', 'goog.events', 'goog.log', 'goog.messaging.MessageChannel', 'goog.messaging.MultiChannel'], false); goog.addDependency('messaging/bufferedchannel_test.js', ['goog.messaging.BufferedChannelTest'], ['goog.debug.Console', 'goog.dom', 'goog.dom.TagName', 'goog.log', 'goog.log.Level', 'goog.messaging.BufferedChannel', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.async.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('messaging/deferredchannel.js', ['goog.messaging.DeferredChannel'], ['goog.Disposable', 'goog.messaging.MessageChannel'], false); goog.addDependency('messaging/deferredchannel_test.js', ['goog.messaging.DeferredChannelTest'], ['goog.async.Deferred', 'goog.messaging.DeferredChannel', 'goog.testing.MockControl', 'goog.testing.async.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('messaging/loggerclient.js', ['goog.messaging.LoggerClient'], ['goog.Disposable', 'goog.debug', 'goog.debug.LogManager', 'goog.debug.Logger'], false); goog.addDependency('messaging/loggerclient_test.js', ['goog.messaging.LoggerClientTest'], ['goog.debug', 'goog.debug.Logger', 'goog.messaging.LoggerClient', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('messaging/loggerserver.js', ['goog.messaging.LoggerServer'], ['goog.Disposable', 'goog.log', 'goog.log.Level'], false); goog.addDependency('messaging/loggerserver_test.js', ['goog.messaging.LoggerServerTest'], ['goog.debug.LogManager', 'goog.debug.Logger', 'goog.log', 'goog.log.Level', 'goog.messaging.LoggerServer', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('messaging/messagechannel.js', ['goog.messaging.MessageChannel'], [], false); goog.addDependency('messaging/messaging.js', ['goog.messaging'], [], false); goog.addDependency('messaging/messaging_test.js', ['goog.testing.messaging.MockMessageChannelTest'], ['goog.messaging', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('messaging/multichannel.js', ['goog.messaging.MultiChannel', 'goog.messaging.MultiChannel.VirtualChannel'], ['goog.Disposable', 'goog.log', 'goog.messaging.MessageChannel', 'goog.object'], false); goog.addDependency('messaging/multichannel_test.js', ['goog.messaging.MultiChannelTest'], ['goog.messaging.MultiChannel', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel', 'goog.testing.mockmatchers.IgnoreArgument'], false); goog.addDependency('messaging/portcaller.js', ['goog.messaging.PortCaller'], ['goog.Disposable', 'goog.async.Deferred', 'goog.messaging.DeferredChannel', 'goog.messaging.PortChannel', 'goog.messaging.PortNetwork', 'goog.object'], false); goog.addDependency('messaging/portcaller_test.js', ['goog.messaging.PortCallerTest'], ['goog.events.EventTarget', 'goog.messaging.PortCaller', 'goog.messaging.PortNetwork', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('messaging/portchannel.js', ['goog.messaging.PortChannel'], ['goog.Timer', 'goog.array', 'goog.async.Deferred', 'goog.debug', 'goog.events', 'goog.events.EventType', 'goog.json', 'goog.log', 'goog.messaging.AbstractChannel', 'goog.messaging.DeferredChannel', 'goog.object', 'goog.string', 'goog.userAgent'], false); goog.addDependency('messaging/portnetwork.js', ['goog.messaging.PortNetwork'], [], false); goog.addDependency('messaging/portoperator.js', ['goog.messaging.PortOperator'], ['goog.Disposable', 'goog.asserts', 'goog.log', 'goog.messaging.PortChannel', 'goog.messaging.PortNetwork', 'goog.object'], false); goog.addDependency('messaging/portoperator_test.js', ['goog.messaging.PortOperatorTest'], ['goog.messaging.PortNetwork', 'goog.messaging.PortOperator', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel', 'goog.testing.messaging.MockMessagePort'], false); goog.addDependency('messaging/respondingchannel.js', ['goog.messaging.RespondingChannel'], ['goog.Disposable', 'goog.log', 'goog.messaging.MultiChannel'], false); goog.addDependency('messaging/respondingchannel_test.js', ['goog.messaging.RespondingChannelTest'], ['goog.messaging.RespondingChannel', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('messaging/testdata/portchannel_worker.js', ['goog.messaging.testdata.portchannel_worker'], ['goog.messaging.PortChannel'], false); goog.addDependency('messaging/testdata/portnetwork_worker1.js', ['goog.messaging.testdata.portnetwork_worker1'], ['goog.messaging.PortCaller', 'goog.messaging.PortChannel'], false); goog.addDependency('messaging/testdata/portnetwork_worker2.js', ['goog.messaging.testdata.portnetwork_worker2'], ['goog.messaging.PortCaller', 'goog.messaging.PortChannel'], false); goog.addDependency('module/abstractmoduleloader.js', ['goog.module.AbstractModuleLoader'], ['goog.module'], false); goog.addDependency('module/basemodule.js', ['goog.module.BaseModule'], ['goog.Disposable', 'goog.module'], false); goog.addDependency('module/loader.js', ['goog.module.Loader'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.module', 'goog.object'], false); goog.addDependency('module/module.js', ['goog.module'], [], false); goog.addDependency('module/moduleinfo.js', ['goog.module.ModuleInfo'], ['goog.Disposable', 'goog.async.throwException', 'goog.functions', 'goog.module', 'goog.module.BaseModule', 'goog.module.ModuleLoadCallback'], false); goog.addDependency('module/moduleinfo_test.js', ['goog.module.ModuleInfoTest'], ['goog.module.BaseModule', 'goog.module.ModuleInfo', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('module/moduleloadcallback.js', ['goog.module.ModuleLoadCallback'], ['goog.debug.entryPointRegistry', 'goog.module'], false); goog.addDependency('module/moduleloadcallback_test.js', ['goog.module.ModuleLoadCallbackTest'], ['goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.functions', 'goog.module.ModuleLoadCallback', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('module/moduleloader.js', ['goog.module.ModuleLoader'], ['goog.Timer', 'goog.array', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventId', 'goog.events.EventTarget', 'goog.labs.userAgent.browser', 'goog.log', 'goog.module.AbstractModuleLoader', 'goog.net.BulkLoader', 'goog.net.EventType', 'goog.net.jsloader', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('module/moduleloader_test.js', ['goog.module.ModuleLoaderTest'], ['goog.Promise', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.functions', 'goog.module.ModuleLoader', 'goog.module.ModuleManager', 'goog.net.BulkLoader', 'goog.net.XmlHttp', 'goog.object', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.events.EventObserver', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('module/modulemanager.js', ['goog.module.ModuleManager', 'goog.module.ModuleManager.CallbackType', 'goog.module.ModuleManager.FailureType'], ['goog.Disposable', 'goog.array', 'goog.asserts', 'goog.async.Deferred', 'goog.debug.Trace', 'goog.dispose', 'goog.log', 'goog.module', 'goog.module.ModuleInfo', 'goog.module.ModuleLoadCallback', 'goog.object'], false); goog.addDependency('module/modulemanager_test.js', ['goog.module.ModuleManagerTest'], ['goog.array', 'goog.functions', 'goog.module.BaseModule', 'goog.module.ModuleManager', 'goog.testing', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('module/testdata/modA_1.js', ['goog.module.testdata.modA_1'], [], false); goog.addDependency('module/testdata/modA_2.js', ['goog.module.testdata.modA_2'], ['goog.module.ModuleManager'], false); goog.addDependency('module/testdata/modB_1.js', ['goog.module.testdata.modB_1'], ['goog.module.ModuleManager'], false); goog.addDependency('net/browserchannel.js', ['goog.net.BrowserChannel', 'goog.net.BrowserChannel.Error', 'goog.net.BrowserChannel.Event', 'goog.net.BrowserChannel.Handler', 'goog.net.BrowserChannel.LogSaver', 'goog.net.BrowserChannel.QueuedMap', 'goog.net.BrowserChannel.ServerReachability', 'goog.net.BrowserChannel.ServerReachabilityEvent', 'goog.net.BrowserChannel.Stat', 'goog.net.BrowserChannel.StatEvent', 'goog.net.BrowserChannel.State', 'goog.net.BrowserChannel.TimingEvent'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.debug.TextFormatter', 'goog.events.Event', 'goog.events.EventTarget', 'goog.json', 'goog.json.EvalJsonProcessor', 'goog.log', 'goog.net.BrowserTestChannel', 'goog.net.ChannelDebug', 'goog.net.ChannelRequest', 'goog.net.XhrIo', 'goog.net.tmpnetwork', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.CircularBuffer'], false); goog.addDependency('net/browserchannel_test.js', ['goog.net.BrowserChannelTest'], ['goog.Timer', 'goog.array', 'goog.dom', 'goog.functions', 'goog.json', 'goog.net.BrowserChannel', 'goog.net.ChannelDebug', 'goog.net.ChannelRequest', 'goog.net.tmpnetwork', 'goog.structs.Map', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('net/browsertestchannel.js', ['goog.net.BrowserTestChannel'], ['goog.json.EvalJsonProcessor', 'goog.net.ChannelRequest', 'goog.net.ChannelRequest.Error', 'goog.net.tmpnetwork', 'goog.string.Parser'], false); goog.addDependency('net/bulkloader.js', ['goog.net.BulkLoader'], ['goog.events.EventHandler', 'goog.events.EventTarget', 'goog.log', 'goog.net.BulkLoaderHelper', 'goog.net.EventType', 'goog.net.XhrIo'], false); goog.addDependency('net/bulkloader_test.js', ['goog.net.BulkLoaderTest'], ['goog.events.Event', 'goog.events.EventHandler', 'goog.net.BulkLoader', 'goog.net.EventType', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('net/bulkloaderhelper.js', ['goog.net.BulkLoaderHelper'], ['goog.Disposable'], false); goog.addDependency('net/channeldebug.js', ['goog.net.ChannelDebug'], ['goog.json', 'goog.log'], false); goog.addDependency('net/channelrequest.js', ['goog.net.ChannelRequest', 'goog.net.ChannelRequest.Error'], ['goog.Timer', 'goog.async.Throttle', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events.EventHandler', 'goog.html.SafeUrl', 'goog.html.uncheckedconversions', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XmlHttp', 'goog.object', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false); goog.addDependency('net/channelrequest_test.js', ['goog.net.ChannelRequestTest'], ['goog.Uri', 'goog.functions', 'goog.net.BrowserChannel', 'goog.net.ChannelDebug', 'goog.net.ChannelRequest', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction'], false); goog.addDependency('net/cookies.js', ['goog.net.Cookies', 'goog.net.cookies'], [], false); goog.addDependency('net/cookies_test.js', ['goog.net.cookiesTest'], ['goog.array', 'goog.net.cookies', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('net/corsxmlhttpfactory.js', ['goog.net.CorsXmlHttpFactory', 'goog.net.IeCorsXhrAdapter'], ['goog.net.HttpStatus', 'goog.net.XhrLike', 'goog.net.XmlHttp', 'goog.net.XmlHttpFactory'], false); goog.addDependency('net/corsxmlhttpfactory_test.js', ['goog.net.CorsXmlHttpFactoryTest'], ['goog.net.CorsXmlHttpFactory', 'goog.net.IeCorsXhrAdapter', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('net/crossdomainrpc.js', ['goog.net.CrossDomainRpc'], ['goog.Uri', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.html.legacyconversions', 'goog.json', 'goog.log', 'goog.net.EventType', 'goog.net.HttpStatus', 'goog.string', 'goog.userAgent'], false); goog.addDependency('net/crossdomainrpc_test.js', ['goog.net.CrossDomainRpcTest'], ['goog.Promise', 'goog.log', 'goog.net.CrossDomainRpc', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('net/errorcode.js', ['goog.net.ErrorCode'], [], false); goog.addDependency('net/eventtype.js', ['goog.net.EventType'], [], false); goog.addDependency('net/fetchxmlhttpfactory.js', ['goog.net.FetchXmlHttp', 'goog.net.FetchXmlHttpFactory'], ['goog.asserts', 'goog.events.EventTarget', 'goog.functions', 'goog.log', 'goog.net.XhrLike', 'goog.net.XmlHttpFactory'], false); goog.addDependency('net/fetchxmlhttpfactory_test.js', ['goog.net.FetchXmlHttpFactoryTest'], ['goog.net.FetchXmlHttp', 'goog.net.FetchXmlHttpFactory', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('net/filedownloader.js', ['goog.net.FileDownloader', 'goog.net.FileDownloader.Error'], ['goog.Disposable', 'goog.asserts', 'goog.async.Deferred', 'goog.crypt.hash32', 'goog.debug.Error', 'goog.events', 'goog.events.EventHandler', 'goog.fs', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrIoPool', 'goog.object'], false); goog.addDependency('net/filedownloader_test.js', ['goog.net.FileDownloaderTest'], ['goog.fs.Error', 'goog.net.ErrorCode', 'goog.net.FileDownloader', 'goog.net.XhrIo', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.fs', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit', 'goog.testing.net.XhrIoPool'], false); goog.addDependency('net/httpstatus.js', ['goog.net.HttpStatus'], [], false); goog.addDependency('net/iframe_xhr_test.js', ['goog.net.iframeXhrTest'], ['goog.Timer', 'goog.debug.Console', 'goog.debug.LogManager', 'goog.debug.Logger', 'goog.dom.TagName', 'goog.events', 'goog.net.IframeIo', 'goog.net.XhrIo', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('net/iframeio.js', ['goog.net.IframeIo', 'goog.net.IframeIo.IncrementalDataEvent'], ['goog.Timer', 'goog.Uri', 'goog.array', 'goog.asserts', 'goog.debug', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.html.uncheckedconversions', 'goog.json', 'goog.log', 'goog.log.Level', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.reflect', 'goog.string', 'goog.string.Const', 'goog.structs', 'goog.userAgent'], false); goog.addDependency('net/iframeio_different_base_test.js', ['goog.net.iframeIoDifferentBaseTest'], ['goog.Promise', 'goog.events', 'goog.net.EventType', 'goog.net.IframeIo', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('net/iframeio_test.js', ['goog.net.IframeIoTest'], ['goog.debug', 'goog.debug.DivConsole', 'goog.debug.LogManager', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.log', 'goog.log.Level', 'goog.net.IframeIo', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('net/iframeloadmonitor.js', ['goog.net.IframeLoadMonitor'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.userAgent'], false); goog.addDependency('net/iframeloadmonitor_test.js', ['goog.net.IframeLoadMonitorTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.net.IframeLoadMonitor', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false); goog.addDependency('net/imageloader.js', ['goog.net.ImageLoader'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.net.EventType', 'goog.object', 'goog.userAgent'], false); goog.addDependency('net/imageloader_test.js', ['goog.net.ImageLoaderTest'], ['goog.Timer', 'goog.array', 'goog.dispose', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.net.EventType', 'goog.net.ImageLoader', 'goog.object', 'goog.string', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('net/ipaddress.js', ['goog.net.IpAddress', 'goog.net.Ipv4Address', 'goog.net.Ipv6Address'], ['goog.array', 'goog.math.Integer', 'goog.object', 'goog.string'], false); goog.addDependency('net/ipaddress_test.js', ['goog.net.IpAddressTest'], ['goog.math.Integer', 'goog.net.IpAddress', 'goog.net.Ipv4Address', 'goog.net.Ipv6Address', 'goog.testing.jsunit'], false); goog.addDependency('net/jsloader.js', ['goog.net.jsloader', 'goog.net.jsloader.Error', 'goog.net.jsloader.ErrorCode', 'goog.net.jsloader.Options'], ['goog.array', 'goog.async.Deferred', 'goog.debug.Error', 'goog.dom', 'goog.dom.TagName', 'goog.object'], false); goog.addDependency('net/jsloader_test.js', ['goog.net.jsloaderTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.net.jsloader', 'goog.net.jsloader.ErrorCode', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false); goog.addDependency('net/jsonp.js', ['goog.net.Jsonp'], ['goog.Uri', 'goog.net.jsloader'], false); goog.addDependency('net/jsonp_test.js', ['goog.net.JsonpTest'], ['goog.net.Jsonp', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('net/mockiframeio.js', ['goog.net.MockIFrameIo'], ['goog.events.EventTarget', 'goog.json', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.IframeIo'], false); goog.addDependency('net/multiiframeloadmonitor.js', ['goog.net.MultiIframeLoadMonitor'], ['goog.events', 'goog.net.IframeLoadMonitor'], false); goog.addDependency('net/multiiframeloadmonitor_test.js', ['goog.net.MultiIframeLoadMonitorTest'], ['goog.dom', 'goog.dom.TagName', 'goog.net.IframeLoadMonitor', 'goog.net.MultiIframeLoadMonitor', 'goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false); goog.addDependency('net/networkstatusmonitor.js', ['goog.net.NetworkStatusMonitor'], ['goog.events.Listenable'], false); goog.addDependency('net/networktester.js', ['goog.net.NetworkTester'], ['goog.Timer', 'goog.Uri', 'goog.log'], false); goog.addDependency('net/networktester_test.js', ['goog.net.NetworkTesterTest'], ['goog.Uri', 'goog.net.NetworkTester', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('net/streams/nodereadablestream.js', ['goog.net.streams.NodeReadableStream'], [], false); goog.addDependency('net/streams/streamfactory.js', ['goog.net.streams.createNodeReadableStream'], ['goog.asserts', 'goog.net.XhrIo', 'goog.net.streams.NodeReadableStream'], false); goog.addDependency('net/testdata/jsloader_test1.js', ['goog.net.testdata.jsloader_test1'], [], false); goog.addDependency('net/testdata/jsloader_test2.js', ['goog.net.testdata.jsloader_test2'], [], false); goog.addDependency('net/testdata/jsloader_test3.js', ['goog.net.testdata.jsloader_test3'], [], false); goog.addDependency('net/testdata/jsloader_test4.js', ['goog.net.testdata.jsloader_test4'], [], false); goog.addDependency('net/tmpnetwork.js', ['goog.net.tmpnetwork'], ['goog.Uri', 'goog.net.ChannelDebug'], false); goog.addDependency('net/websocket.js', ['goog.net.WebSocket', 'goog.net.WebSocket.ErrorEvent', 'goog.net.WebSocket.EventType', 'goog.net.WebSocket.MessageEvent'], ['goog.Timer', 'goog.asserts', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.log'], false); goog.addDependency('net/websocket_test.js', ['goog.net.WebSocketTest'], ['goog.debug.EntryPointMonitor', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.functions', 'goog.net.WebSocket', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('net/wrapperxmlhttpfactory.js', ['goog.net.WrapperXmlHttpFactory'], ['goog.net.XhrLike', 'goog.net.XmlHttpFactory'], false); goog.addDependency('net/xhrio.js', ['goog.net.XhrIo', 'goog.net.XhrIo.ResponseType'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.debug.entryPointRegistry', 'goog.events.EventTarget', 'goog.json', 'goog.log', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.HttpStatus', 'goog.net.XmlHttp', 'goog.object', 'goog.string', 'goog.structs', 'goog.structs.Map', 'goog.uri.utils', 'goog.userAgent'], false); goog.addDependency('net/xhrio_test.js', ['goog.net.XhrIoTest'], ['goog.Uri', 'goog.debug.EntryPointMonitor', 'goog.debug.ErrorHandler', 'goog.debug.entryPointRegistry', 'goog.events', 'goog.functions', 'goog.net.EventType', 'goog.net.WrapperXmlHttpFactory', 'goog.net.XhrIo', 'goog.net.XmlHttp', 'goog.object', 'goog.string', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.testing.recordFunction', 'goog.userAgent.product'], false); goog.addDependency('net/xhriopool.js', ['goog.net.XhrIoPool'], ['goog.net.XhrIo', 'goog.structs.PriorityPool'], false); goog.addDependency('net/xhriopool_test.js', ['goog.net.XhrIoPoolTest'], ['goog.net.XhrIoPool', 'goog.structs.Map', 'goog.testing.jsunit'], false); goog.addDependency('net/xhrlike.js', ['goog.net.XhrLike'], [], false); goog.addDependency('net/xhrmanager.js', ['goog.net.XhrManager', 'goog.net.XhrManager.Event', 'goog.net.XhrManager.Request'], ['goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrIoPool', 'goog.structs.Map'], false); goog.addDependency('net/xhrmanager_test.js', ['goog.net.XhrManagerTest'], ['goog.events', 'goog.net.EventType', 'goog.net.XhrIo', 'goog.net.XhrManager', 'goog.testing.jsunit', 'goog.testing.net.XhrIoPool', 'goog.testing.recordFunction'], false); goog.addDependency('net/xmlhttp.js', ['goog.net.DefaultXmlHttpFactory', 'goog.net.XmlHttp', 'goog.net.XmlHttp.OptionType', 'goog.net.XmlHttp.ReadyState', 'goog.net.XmlHttpDefines'], ['goog.asserts', 'goog.net.WrapperXmlHttpFactory', 'goog.net.XmlHttpFactory'], false); goog.addDependency('net/xmlhttpfactory.js', ['goog.net.XmlHttpFactory'], ['goog.net.XhrLike'], false); goog.addDependency('net/xpc/crosspagechannel.js', ['goog.net.xpc.CrossPageChannel'], ['goog.Uri', 'goog.async.Deferred', 'goog.async.Delay', 'goog.dispose', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.json', 'goog.log', 'goog.messaging.AbstractChannel', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.ChannelStates', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.DirectTransport', 'goog.net.xpc.FrameElementMethodTransport', 'goog.net.xpc.IframePollingTransport', 'goog.net.xpc.IframeRelayTransport', 'goog.net.xpc.NativeMessagingTransport', 'goog.net.xpc.NixTransport', 'goog.net.xpc.TransportTypes', 'goog.net.xpc.UriCfgFields', 'goog.string', 'goog.uri.utils', 'goog.userAgent'], false); goog.addDependency('net/xpc/crosspagechannel_test.js', ['goog.net.xpc.CrossPageChannelTest'], ['goog.Disposable', 'goog.Uri', 'goog.async.Deferred', 'goog.dom', 'goog.dom.TagName', 'goog.labs.userAgent.browser', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.TransportTypes', 'goog.object', 'goog.testing.AsyncTestCase', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('net/xpc/crosspagechannelrole.js', ['goog.net.xpc.CrossPageChannelRole'], [], false); goog.addDependency('net/xpc/directtransport.js', ['goog.net.xpc.DirectTransport'], ['goog.Timer', 'goog.async.Deferred', 'goog.events.EventHandler', 'goog.log', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.object'], false); goog.addDependency('net/xpc/directtransport_test.js', ['goog.net.xpc.DirectTransportTest'], ['goog.Promise', 'goog.dom', 'goog.dom.TagName', 'goog.labs.userAgent.browser', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.TransportTypes', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('net/xpc/frameelementmethodtransport.js', ['goog.net.xpc.FrameElementMethodTransport'], ['goog.log', 'goog.net.xpc', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes'], false); goog.addDependency('net/xpc/iframepollingtransport.js', ['goog.net.xpc.IframePollingTransport', 'goog.net.xpc.IframePollingTransport.Receiver', 'goog.net.xpc.IframePollingTransport.Sender'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.userAgent'], false); goog.addDependency('net/xpc/iframepollingtransport_test.js', ['goog.net.xpc.IframePollingTransportTest'], ['goog.Timer', 'goog.dom', 'goog.dom.TagName', 'goog.functions', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.TransportTypes', 'goog.object', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('net/xpc/iframerelaytransport.js', ['goog.net.xpc.IframeRelayTransport'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.html.SafeHtml', 'goog.log', 'goog.log.Level', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false); goog.addDependency('net/xpc/nativemessagingtransport.js', ['goog.net.xpc.NativeMessagingTransport'], ['goog.Timer', 'goog.asserts', 'goog.async.Deferred', 'goog.events', 'goog.events.EventHandler', 'goog.log', 'goog.net.xpc', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes'], false); goog.addDependency('net/xpc/nativemessagingtransport_test.js', ['goog.net.xpc.NativeMessagingTransportTest'], ['goog.dom', 'goog.events', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannel', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.NativeMessagingTransport', 'goog.testing.jsunit'], false); goog.addDependency('net/xpc/nixtransport.js', ['goog.net.xpc.NixTransport'], ['goog.log', 'goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.CrossPageChannelRole', 'goog.net.xpc.Transport', 'goog.net.xpc.TransportTypes', 'goog.reflect'], false); goog.addDependency('net/xpc/relay.js', ['goog.net.xpc.relay'], [], false); goog.addDependency('net/xpc/transport.js', ['goog.net.xpc.Transport'], ['goog.Disposable', 'goog.dom', 'goog.net.xpc.TransportNames'], false); goog.addDependency('net/xpc/xpc.js', ['goog.net.xpc', 'goog.net.xpc.CfgFields', 'goog.net.xpc.ChannelStates', 'goog.net.xpc.TransportNames', 'goog.net.xpc.TransportTypes', 'goog.net.xpc.UriCfgFields'], ['goog.log'], false); goog.addDependency('object/object.js', ['goog.object'], [], false); goog.addDependency('object/object_test.js', ['goog.objectTest'], ['goog.functions', 'goog.object', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('positioning/absoluteposition.js', ['goog.positioning.AbsolutePosition'], ['goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition'], false); goog.addDependency('positioning/abstractposition.js', ['goog.positioning.AbstractPosition'], [], false); goog.addDependency('positioning/anchoredposition.js', ['goog.positioning.AnchoredPosition'], ['goog.positioning', 'goog.positioning.AbstractPosition'], false); goog.addDependency('positioning/anchoredposition_test.js', ['goog.positioning.AnchoredPositionTest'], ['goog.dom', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.style', 'goog.testing.jsunit'], false); goog.addDependency('positioning/anchoredviewportposition.js', ['goog.positioning.AnchoredViewportPosition'], ['goog.positioning', 'goog.positioning.AnchoredPosition', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus'], false); goog.addDependency('positioning/anchoredviewportposition_test.js', ['goog.positioning.AnchoredViewportPositionTest'], ['goog.dom', 'goog.math.Box', 'goog.positioning.AnchoredViewportPosition', 'goog.positioning.Corner', 'goog.positioning.OverflowStatus', 'goog.style', 'goog.testing.jsunit'], false); goog.addDependency('positioning/clientposition.js', ['goog.positioning.ClientPosition'], ['goog.asserts', 'goog.dom', 'goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition', 'goog.style'], false); goog.addDependency('positioning/clientposition_test.js', ['goog.positioning.clientPositionTest'], ['goog.dom', 'goog.dom.TagName', 'goog.positioning.ClientPosition', 'goog.positioning.Corner', 'goog.style', 'goog.testing.jsunit'], false); goog.addDependency('positioning/menuanchoredposition.js', ['goog.positioning.MenuAnchoredPosition'], ['goog.positioning.AnchoredViewportPosition', 'goog.positioning.Overflow'], false); goog.addDependency('positioning/menuanchoredposition_test.js', ['goog.positioning.MenuAnchoredPositionTest'], ['goog.dom', 'goog.dom.TagName', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.testing.jsunit'], false); goog.addDependency('positioning/positioning.js', ['goog.positioning', 'goog.positioning.Corner', 'goog.positioning.CornerBit', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.style', 'goog.style.bidi'], false); goog.addDependency('positioning/positioning_test.js', ['goog.positioningTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.math.Box', 'goog.math.Coordinate', 'goog.math.Size', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('positioning/viewportclientposition.js', ['goog.positioning.ViewportClientPosition'], ['goog.dom', 'goog.math.Coordinate', 'goog.positioning', 'goog.positioning.ClientPosition', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.style'], false); goog.addDependency('positioning/viewportclientposition_test.js', ['goog.positioning.ViewportClientPositionTest'], ['goog.dom', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.ViewportClientPosition', 'goog.style', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('positioning/viewportposition.js', ['goog.positioning.ViewportPosition'], ['goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AbstractPosition', 'goog.positioning.Corner', 'goog.style'], false); goog.addDependency('promise/promise.js', ['goog.Promise'], ['goog.Thenable', 'goog.asserts', 'goog.async.FreeList', 'goog.async.run', 'goog.async.throwException', 'goog.debug.Error', 'goog.promise.Resolver'], false); goog.addDependency('promise/promise_test.js', ['goog.PromiseTest'], ['goog.Promise', 'goog.Thenable', 'goog.Timer', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('promise/resolver.js', ['goog.promise.Resolver'], [], false); goog.addDependency('promise/testsuiteadapter.js', ['goog.promise.testSuiteAdapter'], ['goog.Promise'], false); goog.addDependency('promise/thenable.js', ['goog.Thenable'], [], false); goog.addDependency('proto/proto.js', ['goog.proto'], ['goog.proto.Serializer'], false); goog.addDependency('proto/serializer.js', ['goog.proto.Serializer'], ['goog.json.Serializer', 'goog.string'], false); goog.addDependency('proto/serializer_test.js', ['goog.protoTest'], ['goog.proto', 'goog.testing.jsunit'], false); goog.addDependency('proto2/descriptor.js', ['goog.proto2.Descriptor', 'goog.proto2.Metadata'], ['goog.array', 'goog.asserts', 'goog.object', 'goog.string'], false); goog.addDependency('proto2/descriptor_test.js', ['goog.proto2.DescriptorTest'], ['goog.proto2.Descriptor', 'goog.proto2.Message', 'goog.testing.jsunit'], false); goog.addDependency('proto2/fielddescriptor.js', ['goog.proto2.FieldDescriptor'], ['goog.asserts', 'goog.string'], false); goog.addDependency('proto2/fielddescriptor_test.js', ['goog.proto2.FieldDescriptorTest'], ['goog.proto2.FieldDescriptor', 'goog.proto2.Message', 'goog.testing.jsunit'], false); goog.addDependency('proto2/lazydeserializer.js', ['goog.proto2.LazyDeserializer'], ['goog.asserts', 'goog.proto2.Message', 'goog.proto2.Serializer'], false); goog.addDependency('proto2/message.js', ['goog.proto2.Message'], ['goog.asserts', 'goog.proto2.Descriptor', 'goog.proto2.FieldDescriptor'], false); goog.addDependency('proto2/message_test.js', ['goog.proto2.MessageTest'], ['goog.testing.jsunit', 'proto2.TestAllTypes', 'proto2.TestAllTypes.NestedEnum', 'proto2.TestAllTypes.NestedMessage', 'proto2.TestAllTypes.OptionalGroup', 'proto2.TestAllTypes.RepeatedGroup'], false); goog.addDependency('proto2/objectserializer.js', ['goog.proto2.ObjectSerializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.Serializer', 'goog.string'], false); goog.addDependency('proto2/objectserializer_test.js', ['goog.proto2.ObjectSerializerTest'], ['goog.proto2.ObjectSerializer', 'goog.proto2.Serializer', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false); goog.addDependency('proto2/package_test.pb.js', ['someprotopackage.TestPackageTypes'], ['goog.proto2.Message', 'proto2.TestAllTypes'], false); goog.addDependency('proto2/pbliteserializer.js', ['goog.proto2.PbLiteSerializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.LazyDeserializer', 'goog.proto2.Serializer'], false); goog.addDependency('proto2/pbliteserializer_test.js', ['goog.proto2.PbLiteSerializerTest'], ['goog.proto2.PbLiteSerializer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false); goog.addDependency('proto2/proto_test.js', ['goog.proto2.messageTest'], ['goog.proto2.FieldDescriptor', 'goog.testing.jsunit', 'proto2.TestAllTypes', 'someprotopackage.TestPackageTypes'], false); goog.addDependency('proto2/serializer.js', ['goog.proto2.Serializer'], ['goog.asserts', 'goog.proto2.FieldDescriptor', 'goog.proto2.Message'], false); goog.addDependency('proto2/test.pb.js', ['proto2.TestAllTypes', 'proto2.TestAllTypes.NestedEnum', 'proto2.TestAllTypes.NestedMessage', 'proto2.TestAllTypes.OptionalGroup', 'proto2.TestAllTypes.RepeatedGroup', 'proto2.TestDefaultChild', 'proto2.TestDefaultParent'], ['goog.proto2.Message'], false); goog.addDependency('proto2/textformatserializer.js', ['goog.proto2.TextFormatSerializer'], ['goog.array', 'goog.asserts', 'goog.json', 'goog.math', 'goog.object', 'goog.proto2.FieldDescriptor', 'goog.proto2.Message', 'goog.proto2.Serializer', 'goog.string'], false); goog.addDependency('proto2/textformatserializer_test.js', ['goog.proto2.TextFormatSerializerTest'], ['goog.proto2.ObjectSerializer', 'goog.proto2.TextFormatSerializer', 'goog.testing.jsunit', 'proto2.TestAllTypes'], false); goog.addDependency('proto2/util.js', ['goog.proto2.Util'], ['goog.asserts'], false); goog.addDependency('pubsub/pubsub.js', ['goog.pubsub.PubSub'], ['goog.Disposable', 'goog.array'], false); goog.addDependency('pubsub/pubsub_test.js', ['goog.pubsub.PubSubTest'], ['goog.array', 'goog.pubsub.PubSub', 'goog.testing.jsunit'], false); goog.addDependency('pubsub/topicid.js', ['goog.pubsub.TopicId'], [], false); goog.addDependency('pubsub/typedpubsub.js', ['goog.pubsub.TypedPubSub'], ['goog.Disposable', 'goog.pubsub.PubSub'], false); goog.addDependency('pubsub/typedpubsub_test.js', ['goog.pubsub.TypedPubSubTest'], ['goog.array', 'goog.pubsub.TopicId', 'goog.pubsub.TypedPubSub', 'goog.testing.jsunit'], false); goog.addDependency('reflect/reflect.js', ['goog.reflect'], [], false); goog.addDependency('result/deferredadaptor.js', ['goog.result.DeferredAdaptor'], ['goog.async.Deferred', 'goog.result', 'goog.result.Result'], false); goog.addDependency('result/dependentresult.js', ['goog.result.DependentResult'], ['goog.result.Result'], false); goog.addDependency('result/result_interface.js', ['goog.result.Result'], ['goog.Thenable'], false); goog.addDependency('result/resultutil.js', ['goog.result'], ['goog.array', 'goog.result.DependentResult', 'goog.result.Result', 'goog.result.SimpleResult'], false); goog.addDependency('result/simpleresult.js', ['goog.result.SimpleResult', 'goog.result.SimpleResult.StateError'], ['goog.Promise', 'goog.Thenable', 'goog.debug.Error', 'goog.result.Result'], false); goog.addDependency('soy/data.js', ['goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind', 'goog.soy.data.UnsanitizedText'], ['goog.html.SafeHtml', 'goog.html.uncheckedconversions', 'goog.string.Const'], false); goog.addDependency('soy/data_test.js', ['goog.soy.dataTest'], ['goog.html.SafeHtml', 'goog.soy.testHelper', 'goog.testing.jsunit'], false); goog.addDependency('soy/renderer.js', ['goog.soy.InjectedDataSupplier', 'goog.soy.Renderer'], ['goog.asserts', 'goog.dom', 'goog.soy', 'goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind'], false); goog.addDependency('soy/renderer_test.js', ['goog.soy.RendererTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.html.SafeHtml', 'goog.i18n.bidi.Dir', 'goog.soy.Renderer', 'goog.soy.data.SanitizedContentKind', 'goog.soy.testHelper', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('soy/soy.js', ['goog.soy'], ['goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind', 'goog.string'], false); goog.addDependency('soy/soy_test.js', ['goog.soyTest'], ['goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.functions', 'goog.soy', 'goog.soy.testHelper', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('soy/soy_testhelper.js', ['goog.soy.testHelper'], ['goog.dom', 'goog.dom.TagName', 'goog.i18n.bidi.Dir', 'goog.soy.data.SanitizedContent', 'goog.soy.data.SanitizedContentKind', 'goog.string', 'goog.userAgent'], false); goog.addDependency('spell/spellcheck.js', ['goog.spell.SpellCheck', 'goog.spell.SpellCheck.WordChangedEvent'], ['goog.Timer', 'goog.events.Event', 'goog.events.EventTarget', 'goog.structs.Set'], false); goog.addDependency('spell/spellcheck_test.js', ['goog.spell.SpellCheckTest'], ['goog.spell.SpellCheck', 'goog.testing.jsunit'], false); goog.addDependency('stats/basicstat.js', ['goog.stats.BasicStat'], ['goog.asserts', 'goog.log', 'goog.string.format', 'goog.structs.CircularBuffer'], false); goog.addDependency('stats/basicstat_test.js', ['goog.stats.BasicStatTest'], ['goog.array', 'goog.stats.BasicStat', 'goog.string.format', 'goog.testing.PseudoRandom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('storage/collectablestorage.js', ['goog.storage.CollectableStorage'], ['goog.array', 'goog.iter', 'goog.storage.ErrorCode', 'goog.storage.ExpiringStorage', 'goog.storage.RichStorage'], false); goog.addDependency('storage/collectablestorage_test.js', ['goog.storage.CollectableStorageTest'], ['goog.storage.CollectableStorage', 'goog.storage.collectableStorageTester', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false); goog.addDependency('storage/collectablestoragetester.js', ['goog.storage.collectableStorageTester'], ['goog.testing.asserts'], false); goog.addDependency('storage/encryptedstorage.js', ['goog.storage.EncryptedStorage'], ['goog.crypt', 'goog.crypt.Arc4', 'goog.crypt.Sha1', 'goog.crypt.base64', 'goog.json', 'goog.json.Serializer', 'goog.storage.CollectableStorage', 'goog.storage.ErrorCode', 'goog.storage.RichStorage'], false); goog.addDependency('storage/encryptedstorage_test.js', ['goog.storage.EncryptedStorageTest'], ['goog.json', 'goog.storage.EncryptedStorage', 'goog.storage.ErrorCode', 'goog.storage.RichStorage', 'goog.storage.collectableStorageTester', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.PseudoRandom', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false); goog.addDependency('storage/errorcode.js', ['goog.storage.ErrorCode'], [], false); goog.addDependency('storage/expiringstorage.js', ['goog.storage.ExpiringStorage'], ['goog.storage.RichStorage'], false); goog.addDependency('storage/expiringstorage_test.js', ['goog.storage.ExpiringStorageTest'], ['goog.storage.ExpiringStorage', 'goog.storage.storage_test', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false); goog.addDependency('storage/mechanism/errorcode.js', ['goog.storage.mechanism.ErrorCode'], [], false); goog.addDependency('storage/mechanism/errorhandlingmechanism.js', ['goog.storage.mechanism.ErrorHandlingMechanism'], ['goog.storage.mechanism.Mechanism'], false); goog.addDependency('storage/mechanism/errorhandlingmechanism_test.js', ['goog.storage.mechanism.ErrorHandlingMechanismTest'], ['goog.storage.mechanism.ErrorHandlingMechanism', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('storage/mechanism/html5localstorage.js', ['goog.storage.mechanism.HTML5LocalStorage'], ['goog.storage.mechanism.HTML5WebStorage'], false); goog.addDependency('storage/mechanism/html5localstorage_test.js', ['goog.storage.mechanism.HTML5LocalStorageTest'], ['goog.storage.mechanism.HTML5LocalStorage', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('storage/mechanism/html5sessionstorage.js', ['goog.storage.mechanism.HTML5SessionStorage'], ['goog.storage.mechanism.HTML5WebStorage'], false); goog.addDependency('storage/mechanism/html5sessionstorage_test.js', ['goog.storage.mechanism.HTML5SessionStorageTest'], ['goog.storage.mechanism.HTML5SessionStorage', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('storage/mechanism/html5webstorage.js', ['goog.storage.mechanism.HTML5WebStorage'], ['goog.asserts', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.storage.mechanism.ErrorCode', 'goog.storage.mechanism.IterableMechanism'], false); goog.addDependency('storage/mechanism/html5webstorage_test.js', ['goog.storage.mechanism.HTML5MockStorage', 'goog.storage.mechanism.HTML5WebStorageTest', 'goog.storage.mechanism.MockThrowableStorage'], ['goog.storage.mechanism.ErrorCode', 'goog.storage.mechanism.HTML5WebStorage', 'goog.testing.jsunit'], false); goog.addDependency('storage/mechanism/ieuserdata.js', ['goog.storage.mechanism.IEUserData'], ['goog.asserts', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.storage.mechanism.ErrorCode', 'goog.storage.mechanism.IterableMechanism', 'goog.structs.Map', 'goog.userAgent'], false); goog.addDependency('storage/mechanism/ieuserdata_test.js', ['goog.storage.mechanism.IEUserDataTest'], ['goog.storage.mechanism.IEUserData', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('storage/mechanism/iterablemechanism.js', ['goog.storage.mechanism.IterableMechanism'], ['goog.array', 'goog.asserts', 'goog.iter', 'goog.storage.mechanism.Mechanism'], false); goog.addDependency('storage/mechanism/iterablemechanismtester.js', ['goog.storage.mechanism.iterableMechanismTester'], ['goog.iter.Iterator', 'goog.storage.mechanism.IterableMechanism', 'goog.testing.asserts'], false); goog.addDependency('storage/mechanism/mechanism.js', ['goog.storage.mechanism.Mechanism'], [], false); goog.addDependency('storage/mechanism/mechanismfactory.js', ['goog.storage.mechanism.mechanismfactory'], ['goog.storage.mechanism.HTML5LocalStorage', 'goog.storage.mechanism.HTML5SessionStorage', 'goog.storage.mechanism.IEUserData', 'goog.storage.mechanism.PrefixedMechanism'], false); goog.addDependency('storage/mechanism/mechanismfactory_test.js', ['goog.storage.mechanism.mechanismfactoryTest'], ['goog.storage.mechanism.mechanismfactory', 'goog.testing.jsunit'], false); goog.addDependency('storage/mechanism/mechanismseparationtester.js', ['goog.storage.mechanism.mechanismSeparationTester'], ['goog.iter.StopIteration', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.asserts'], false); goog.addDependency('storage/mechanism/mechanismsharingtester.js', ['goog.storage.mechanism.mechanismSharingTester'], ['goog.iter.StopIteration', 'goog.storage.mechanism.mechanismTestDefinition', 'goog.testing.asserts'], false); goog.addDependency('storage/mechanism/mechanismtestdefinition.js', ['goog.storage.mechanism.mechanismTestDefinition'], [], false); goog.addDependency('storage/mechanism/mechanismtester.js', ['goog.storage.mechanism.mechanismTester'], ['goog.storage.mechanism.ErrorCode', 'goog.testing.asserts', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('storage/mechanism/prefixedmechanism.js', ['goog.storage.mechanism.PrefixedMechanism'], ['goog.iter.Iterator', 'goog.storage.mechanism.IterableMechanism'], false); goog.addDependency('storage/mechanism/prefixedmechanism_test.js', ['goog.storage.mechanism.PrefixedMechanismTest'], ['goog.storage.mechanism.HTML5LocalStorage', 'goog.storage.mechanism.PrefixedMechanism', 'goog.storage.mechanism.mechanismSeparationTester', 'goog.storage.mechanism.mechanismSharingTester', 'goog.testing.jsunit'], false); goog.addDependency('storage/richstorage.js', ['goog.storage.RichStorage', 'goog.storage.RichStorage.Wrapper'], ['goog.storage.ErrorCode', 'goog.storage.Storage'], false); goog.addDependency('storage/richstorage_test.js', ['goog.storage.RichStorageTest'], ['goog.storage.ErrorCode', 'goog.storage.RichStorage', 'goog.storage.storage_test', 'goog.testing.jsunit', 'goog.testing.storage.FakeMechanism'], false); goog.addDependency('storage/storage.js', ['goog.storage.Storage'], ['goog.json', 'goog.storage.ErrorCode'], false); goog.addDependency('storage/storage_test.js', ['goog.storage.storage_test'], ['goog.structs.Map', 'goog.testing.asserts'], false); goog.addDependency('string/const.js', ['goog.string.Const'], ['goog.asserts', 'goog.string.TypedString'], false); goog.addDependency('string/const_test.js', ['goog.string.constTest'], ['goog.string.Const', 'goog.testing.jsunit'], false); goog.addDependency('string/linkify.js', ['goog.string.linkify'], ['goog.string'], false); goog.addDependency('string/linkify_test.js', ['goog.string.linkifyTest'], ['goog.dom.TagName', 'goog.string', 'goog.string.linkify', 'goog.testing.dom', 'goog.testing.jsunit'], false); goog.addDependency('string/newlines.js', ['goog.string.newlines', 'goog.string.newlines.Line'], ['goog.array'], false); goog.addDependency('string/newlines_test.js', ['goog.string.newlinesTest'], ['goog.string.newlines', 'goog.testing.jsunit'], false); goog.addDependency('string/parser.js', ['goog.string.Parser'], [], false); goog.addDependency('string/path.js', ['goog.string.path'], ['goog.array', 'goog.string'], false); goog.addDependency('string/path_test.js', ['goog.string.pathTest'], ['goog.string.path', 'goog.testing.jsunit'], false); goog.addDependency('string/string.js', ['goog.string', 'goog.string.Unicode'], [], false); goog.addDependency('string/string_test.js', ['goog.stringTest'], ['goog.dom.TagName', 'goog.functions', 'goog.object', 'goog.string', 'goog.string.Unicode', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit'], false); goog.addDependency('string/stringbuffer.js', ['goog.string.StringBuffer'], [], false); goog.addDependency('string/stringbuffer_test.js', ['goog.string.StringBufferTest'], ['goog.string.StringBuffer', 'goog.testing.jsunit'], false); goog.addDependency('string/stringformat.js', ['goog.string.format'], ['goog.string'], false); goog.addDependency('string/stringformat_test.js', ['goog.string.formatTest'], ['goog.string.format', 'goog.testing.jsunit'], false); goog.addDependency('string/stringifier.js', ['goog.string.Stringifier'], [], false); goog.addDependency('string/typedstring.js', ['goog.string.TypedString'], [], false); goog.addDependency('structs/avltree.js', ['goog.structs.AvlTree', 'goog.structs.AvlTree.Node'], ['goog.structs.Collection'], false); goog.addDependency('structs/avltree_test.js', ['goog.structs.AvlTreeTest'], ['goog.array', 'goog.structs.AvlTree', 'goog.testing.jsunit'], false); goog.addDependency('structs/circularbuffer.js', ['goog.structs.CircularBuffer'], [], false); goog.addDependency('structs/circularbuffer_test.js', ['goog.structs.CircularBufferTest'], ['goog.structs.CircularBuffer', 'goog.testing.jsunit'], false); goog.addDependency('structs/collection.js', ['goog.structs.Collection'], [], false); goog.addDependency('structs/collection_test.js', ['goog.structs.CollectionTest'], ['goog.structs.AvlTree', 'goog.structs.Set', 'goog.testing.jsunit'], false); goog.addDependency('structs/heap.js', ['goog.structs.Heap'], ['goog.array', 'goog.object', 'goog.structs.Node'], false); goog.addDependency('structs/heap_test.js', ['goog.structs.HeapTest'], ['goog.structs', 'goog.structs.Heap', 'goog.testing.jsunit'], false); goog.addDependency('structs/inversionmap.js', ['goog.structs.InversionMap'], ['goog.array'], false); goog.addDependency('structs/inversionmap_test.js', ['goog.structs.InversionMapTest'], ['goog.structs.InversionMap', 'goog.testing.jsunit'], false); goog.addDependency('structs/linkedmap.js', ['goog.structs.LinkedMap'], ['goog.structs.Map'], false); goog.addDependency('structs/linkedmap_test.js', ['goog.structs.LinkedMapTest'], ['goog.structs.LinkedMap', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('structs/map.js', ['goog.structs.Map'], ['goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.object'], false); goog.addDependency('structs/map_test.js', ['goog.structs.MapTest'], ['goog.iter', 'goog.structs', 'goog.structs.Map', 'goog.testing.jsunit'], false); goog.addDependency('structs/node.js', ['goog.structs.Node'], [], false); goog.addDependency('structs/pool.js', ['goog.structs.Pool'], ['goog.Disposable', 'goog.structs.Queue', 'goog.structs.Set'], false); goog.addDependency('structs/pool_test.js', ['goog.structs.PoolTest'], ['goog.structs.Pool', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('structs/prioritypool.js', ['goog.structs.PriorityPool'], ['goog.structs.Pool', 'goog.structs.PriorityQueue'], false); goog.addDependency('structs/prioritypool_test.js', ['goog.structs.PriorityPoolTest'], ['goog.structs.PriorityPool', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('structs/priorityqueue.js', ['goog.structs.PriorityQueue'], ['goog.structs.Heap'], false); goog.addDependency('structs/priorityqueue_test.js', ['goog.structs.PriorityQueueTest'], ['goog.structs', 'goog.structs.PriorityQueue', 'goog.testing.jsunit'], false); goog.addDependency('structs/quadtree.js', ['goog.structs.QuadTree', 'goog.structs.QuadTree.Node', 'goog.structs.QuadTree.Point'], ['goog.math.Coordinate'], false); goog.addDependency('structs/quadtree_test.js', ['goog.structs.QuadTreeTest'], ['goog.structs', 'goog.structs.QuadTree', 'goog.testing.jsunit'], false); goog.addDependency('structs/queue.js', ['goog.structs.Queue'], ['goog.array'], false); goog.addDependency('structs/queue_test.js', ['goog.structs.QueueTest'], ['goog.structs.Queue', 'goog.testing.jsunit'], false); goog.addDependency('structs/set.js', ['goog.structs.Set'], ['goog.structs', 'goog.structs.Collection', 'goog.structs.Map'], false); goog.addDependency('structs/set_test.js', ['goog.structs.SetTest'], ['goog.iter', 'goog.structs', 'goog.structs.Set', 'goog.testing.jsunit'], false); goog.addDependency('structs/simplepool.js', ['goog.structs.SimplePool'], ['goog.Disposable'], false); goog.addDependency('structs/stringset.js', ['goog.structs.StringSet'], ['goog.asserts', 'goog.iter'], false); goog.addDependency('structs/stringset_test.js', ['goog.structs.StringSetTest'], ['goog.array', 'goog.iter', 'goog.structs.StringSet', 'goog.testing.asserts', 'goog.testing.jsunit'], false); goog.addDependency('structs/structs.js', ['goog.structs'], ['goog.array', 'goog.object'], false); goog.addDependency('structs/structs_test.js', ['goog.structsTest'], ['goog.array', 'goog.dom.TagName', 'goog.structs', 'goog.structs.Map', 'goog.structs.Set', 'goog.testing.jsunit'], false); goog.addDependency('structs/treenode.js', ['goog.structs.TreeNode'], ['goog.array', 'goog.asserts', 'goog.structs.Node'], false); goog.addDependency('structs/treenode_test.js', ['goog.structs.TreeNodeTest'], ['goog.structs.TreeNode', 'goog.testing.jsunit'], false); goog.addDependency('structs/trie.js', ['goog.structs.Trie'], ['goog.object', 'goog.structs'], false); goog.addDependency('structs/trie_test.js', ['goog.structs.TrieTest'], ['goog.object', 'goog.structs', 'goog.structs.Trie', 'goog.testing.jsunit'], false); goog.addDependency('structs/weak/weak.js', ['goog.structs.weak'], ['goog.userAgent'], false); goog.addDependency('structs/weak/weak_test.js', ['goog.structs.weakTest'], ['goog.array', 'goog.structs.weak', 'goog.testing.jsunit'], false); goog.addDependency('style/bidi.js', ['goog.style.bidi'], ['goog.dom', 'goog.style', 'goog.userAgent'], false); goog.addDependency('style/bidi_test.js', ['goog.style.bidiTest'], ['goog.dom', 'goog.style', 'goog.style.bidi', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('style/cursor.js', ['goog.style.cursor'], ['goog.userAgent'], false); goog.addDependency('style/cursor_test.js', ['goog.style.cursorTest'], ['goog.style.cursor', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('style/style.js', ['goog.style'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.vendor', 'goog.math.Box', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.object', 'goog.string', 'goog.userAgent'], false); goog.addDependency('style/style_document_scroll_test.js', ['goog.style.style_document_scroll_test'], ['goog.dom', 'goog.style', 'goog.testing.jsunit'], false); goog.addDependency('style/style_test.js', ['goog.style_test'], ['goog.array', 'goog.color', 'goog.dom', 'goog.dom.TagName', 'goog.events.BrowserEvent', 'goog.labs.userAgent.util', 'goog.math.Box', 'goog.math.Coordinate', 'goog.math.Rect', 'goog.math.Size', 'goog.object', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.MockUserAgent', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgentTestUtil', 'goog.userAgentTestUtil.UserAgents'], false); goog.addDependency('style/style_webkit_scrollbars_test.js', ['goog.style.webkitScrollbarsTest'], ['goog.asserts', 'goog.style', 'goog.styleScrollbarTester', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('style/stylescrollbartester.js', ['goog.styleScrollbarTester'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.asserts'], false); goog.addDependency('style/transform.js', ['goog.style.transform'], ['goog.functions', 'goog.math.Coordinate', 'goog.math.Coordinate3', 'goog.style', 'goog.userAgent', 'goog.userAgent.product.isVersion'], false); goog.addDependency('style/transform_test.js', ['goog.style.transformTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style.transform', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product.isVersion'], false); goog.addDependency('style/transition.js', ['goog.style.transition', 'goog.style.transition.Css3Property'], ['goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.safe', 'goog.dom.vendor', 'goog.functions', 'goog.html.SafeHtml', 'goog.style', 'goog.userAgent'], false); goog.addDependency('style/transition_test.js', ['goog.style.transitionTest'], ['goog.style', 'goog.style.transition', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('test_module.js', ['goog.test_module'], ['goog.test_module_dep'], true); goog.addDependency('test_module_dep.js', ['goog.test_module_dep'], [], true); goog.addDependency('testing/asserts.js', ['goog.testing.JsUnitException', 'goog.testing.asserts', 'goog.testing.asserts.ArrayLike'], ['goog.testing.stacktrace'], false); goog.addDependency('testing/asserts_test.js', ['goog.testing.assertsTest'], ['goog.array', 'goog.dom', 'goog.iter.Iterator', 'goog.iter.StopIteration', 'goog.labs.userAgent.browser', 'goog.string', 'goog.structs.Map', 'goog.structs.Set', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('testing/async/mockcontrol.js', ['goog.testing.async.MockControl'], ['goog.asserts', 'goog.async.Deferred', 'goog.debug', 'goog.testing.asserts', 'goog.testing.mockmatchers.IgnoreArgument'], false); goog.addDependency('testing/async/mockcontrol_test.js', ['goog.testing.async.MockControlTest'], ['goog.async.Deferred', 'goog.testing.MockControl', 'goog.testing.asserts', 'goog.testing.async.MockControl', 'goog.testing.jsunit'], false); goog.addDependency('testing/asynctestcase.js', ['goog.testing.AsyncTestCase', 'goog.testing.AsyncTestCase.ControlBreakingException'], ['goog.testing.TestCase', 'goog.testing.asserts'], false); goog.addDependency('testing/asynctestcase_async_test.js', ['goog.testing.AsyncTestCaseAsyncTest'], ['goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false); goog.addDependency('testing/asynctestcase_noasync_test.js', ['goog.testing.AsyncTestCaseSyncTest'], ['goog.testing.AsyncTestCase', 'goog.testing.jsunit'], false); goog.addDependency('testing/asynctestcase_test.js', ['goog.testing.AsyncTestCaseTest'], ['goog.debug.Error', 'goog.testing.AsyncTestCase', 'goog.testing.asserts', 'goog.testing.jsunit'], false); goog.addDependency('testing/benchmark.js', ['goog.testing.benchmark'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTable', 'goog.testing.PerformanceTimer', 'goog.testing.TestCase'], false); goog.addDependency('testing/continuationtestcase.js', ['goog.testing.ContinuationTestCase', 'goog.testing.ContinuationTestCase.Step', 'goog.testing.ContinuationTestCase.Test'], ['goog.array', 'goog.events.EventHandler', 'goog.testing.TestCase', 'goog.testing.asserts'], false); goog.addDependency('testing/continuationtestcase_test.js', ['goog.testing.ContinuationTestCaseTest'], ['goog.events', 'goog.events.EventTarget', 'goog.testing.ContinuationTestCase', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('testing/deferredtestcase.js', ['goog.testing.DeferredTestCase'], ['goog.testing.AsyncTestCase', 'goog.testing.TestCase'], false); goog.addDependency('testing/deferredtestcase_test.js', ['goog.testing.DeferredTestCaseTest'], ['goog.async.Deferred', 'goog.testing.DeferredTestCase', 'goog.testing.TestCase', 'goog.testing.TestRunner', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('testing/dom.js', ['goog.testing.dom'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.NodeIterator', 'goog.dom.NodeType', 'goog.dom.TagIterator', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.iter', 'goog.object', 'goog.string', 'goog.style', 'goog.testing.asserts', 'goog.userAgent'], false); goog.addDependency('testing/dom_test.js', ['goog.testing.domTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('testing/editor/dom.js', ['goog.testing.editor.dom'], ['goog.dom.NodeType', 'goog.dom.TagIterator', 'goog.dom.TagWalkType', 'goog.iter', 'goog.string', 'goog.testing.asserts'], false); goog.addDependency('testing/editor/dom_test.js', ['goog.testing.editor.domTest'], ['goog.dom', 'goog.dom.TagName', 'goog.functions', 'goog.testing.editor.dom', 'goog.testing.jsunit'], false); goog.addDependency('testing/editor/fieldmock.js', ['goog.testing.editor.FieldMock'], ['goog.dom', 'goog.dom.Range', 'goog.editor.Field', 'goog.testing.LooseMock', 'goog.testing.mockmatchers'], false); goog.addDependency('testing/editor/testhelper.js', ['goog.testing.editor.TestHelper'], ['goog.Disposable', 'goog.dom', 'goog.dom.Range', 'goog.editor.BrowserFeature', 'goog.editor.node', 'goog.editor.plugins.AbstractBubblePlugin', 'goog.testing.dom'], false); goog.addDependency('testing/editor/testhelper_test.js', ['goog.testing.editor.TestHelperTest'], ['goog.dom', 'goog.dom.TagName', 'goog.editor.node', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('testing/events/eventobserver.js', ['goog.testing.events.EventObserver'], ['goog.array'], false); goog.addDependency('testing/events/eventobserver_test.js', ['goog.testing.events.EventObserverTest'], ['goog.array', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.testing.events.EventObserver', 'goog.testing.jsunit'], false); goog.addDependency('testing/events/events.js', ['goog.testing.events', 'goog.testing.events.Event'], ['goog.Disposable', 'goog.asserts', 'goog.dom.NodeType', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.BrowserFeature', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.object', 'goog.style', 'goog.userAgent'], false); goog.addDependency('testing/events/events_test.js', ['goog.testing.eventsTest'], ['goog.array', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Coordinate', 'goog.string', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.userAgent'], false); goog.addDependency('testing/events/matchers.js', ['goog.testing.events.EventMatcher'], ['goog.events.Event', 'goog.testing.mockmatchers.ArgumentMatcher'], false); goog.addDependency('testing/events/matchers_test.js', ['goog.testing.events.EventMatcherTest'], ['goog.events.Event', 'goog.testing.events.EventMatcher', 'goog.testing.jsunit'], false); goog.addDependency('testing/events/onlinehandler.js', ['goog.testing.events.OnlineHandler'], ['goog.events.EventTarget', 'goog.net.NetworkStatusMonitor'], false); goog.addDependency('testing/events/onlinehandler_test.js', ['goog.testing.events.OnlineHandlerTest'], ['goog.events', 'goog.net.NetworkStatusMonitor', 'goog.testing.events.EventObserver', 'goog.testing.events.OnlineHandler', 'goog.testing.jsunit'], false); goog.addDependency('testing/expectedfailures.js', ['goog.testing.ExpectedFailures'], ['goog.debug.DivConsole', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.log', 'goog.style', 'goog.testing.JsUnitException', 'goog.testing.TestCase', 'goog.testing.asserts'], false); goog.addDependency('testing/expectedfailures_test.js', ['goog.testing.ExpectedFailuresTest'], ['goog.debug.Logger', 'goog.testing.ExpectedFailures', 'goog.testing.JsUnitException', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/blob.js', ['goog.testing.fs.Blob'], ['goog.crypt.base64'], false); goog.addDependency('testing/fs/blob_test.js', ['goog.testing.fs.BlobTest'], ['goog.testing.fs.Blob', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/directoryentry_test.js', ['goog.testing.fs.DirectoryEntryTest'], ['goog.array', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.testing.MockClock', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/entry.js', ['goog.testing.fs.DirectoryEntry', 'goog.testing.fs.Entry', 'goog.testing.fs.FileEntry'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.async.Deferred', 'goog.fs.DirectoryEntry', 'goog.fs.DirectoryEntryImpl', 'goog.fs.Entry', 'goog.fs.Error', 'goog.fs.FileEntry', 'goog.functions', 'goog.object', 'goog.string', 'goog.testing.fs.File', 'goog.testing.fs.FileWriter'], false); goog.addDependency('testing/fs/entry_test.js', ['goog.testing.fs.EntryTest'], ['goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.testing.MockClock', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/file.js', ['goog.testing.fs.File'], ['goog.testing.fs.Blob'], false); goog.addDependency('testing/fs/fileentry_test.js', ['goog.testing.fs.FileEntryTest'], ['goog.testing.MockClock', 'goog.testing.fs.FileEntry', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/filereader.js', ['goog.testing.fs.FileReader'], ['goog.Timer', 'goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.testing.fs.ProgressEvent'], false); goog.addDependency('testing/fs/filereader_test.js', ['goog.testing.fs.FileReaderTest'], ['goog.Promise', 'goog.array', 'goog.events', 'goog.fs.Error', 'goog.fs.FileReader', 'goog.object', 'goog.testing.events.EventObserver', 'goog.testing.fs.FileReader', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/filesystem.js', ['goog.testing.fs.FileSystem'], ['goog.fs.FileSystem', 'goog.testing.fs.DirectoryEntry'], false); goog.addDependency('testing/fs/filewriter.js', ['goog.testing.fs.FileWriter'], ['goog.Timer', 'goog.events.EventTarget', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.string', 'goog.testing.fs.ProgressEvent'], false); goog.addDependency('testing/fs/filewriter_test.js', ['goog.testing.fs.FileWriterTest'], ['goog.Promise', 'goog.array', 'goog.events', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.object', 'goog.testing.MockClock', 'goog.testing.events.EventObserver', 'goog.testing.fs.Blob', 'goog.testing.fs.FileSystem', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/fs.js', ['goog.testing.fs'], ['goog.Timer', 'goog.array', 'goog.async.Deferred', 'goog.fs', 'goog.testing.fs.Blob', 'goog.testing.fs.FileSystem'], false); goog.addDependency('testing/fs/fs_test.js', ['goog.testing.fsTest'], ['goog.testing.AsyncTestCase', 'goog.testing.fs', 'goog.testing.fs.Blob', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/integration_test.js', ['goog.testing.fs.integrationTest'], ['goog.Promise', 'goog.events', 'goog.fs', 'goog.fs.DirectoryEntry', 'goog.fs.Error', 'goog.fs.FileSaver', 'goog.testing.PropertyReplacer', 'goog.testing.fs', 'goog.testing.jsunit'], false); goog.addDependency('testing/fs/progressevent.js', ['goog.testing.fs.ProgressEvent'], ['goog.events.Event'], false); goog.addDependency('testing/functionmock.js', ['goog.testing', 'goog.testing.FunctionMock', 'goog.testing.GlobalFunctionMock', 'goog.testing.MethodMock'], ['goog.object', 'goog.testing.LooseMock', 'goog.testing.Mock', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock'], false); goog.addDependency('testing/functionmock_test.js', ['goog.testing.FunctionMockTest'], ['goog.array', 'goog.string', 'goog.testing', 'goog.testing.FunctionMock', 'goog.testing.Mock', 'goog.testing.StrictMock', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.mockmatchers'], false); goog.addDependency('testing/graphics.js', ['goog.testing.graphics'], ['goog.graphics.Path', 'goog.testing.asserts'], false); goog.addDependency('testing/i18n/asserts.js', ['goog.testing.i18n.asserts'], ['goog.testing.jsunit'], false); goog.addDependency('testing/i18n/asserts_test.js', ['goog.testing.i18n.assertsTest'], ['goog.testing.ExpectedFailures', 'goog.testing.i18n.asserts'], false); goog.addDependency('testing/jstdtestcaseadapter.js', ['goog.testing.JsTdTestCaseAdapter'], ['goog.async.run', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('testing/jsunit.js', ['goog.testing.jsunit'], ['goog.dom.TagName', 'goog.testing.TestCase', 'goog.testing.TestRunner'], false); goog.addDependency('testing/loosemock.js', ['goog.testing.LooseExpectationCollection', 'goog.testing.LooseMock'], ['goog.array', 'goog.structs.Map', 'goog.testing.Mock'], false); goog.addDependency('testing/loosemock_test.js', ['goog.testing.LooseMockTest'], ['goog.testing.LooseMock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.mockmatchers'], false); goog.addDependency('testing/messaging/mockmessagechannel.js', ['goog.testing.messaging.MockMessageChannel'], ['goog.messaging.AbstractChannel', 'goog.testing.asserts'], false); goog.addDependency('testing/messaging/mockmessageevent.js', ['goog.testing.messaging.MockMessageEvent'], ['goog.events.BrowserEvent', 'goog.events.EventType', 'goog.testing.events.Event'], false); goog.addDependency('testing/messaging/mockmessageport.js', ['goog.testing.messaging.MockMessagePort'], ['goog.events.EventTarget'], false); goog.addDependency('testing/messaging/mockportnetwork.js', ['goog.testing.messaging.MockPortNetwork'], ['goog.messaging.PortNetwork', 'goog.testing.messaging.MockMessageChannel'], false); goog.addDependency('testing/mock.js', ['goog.testing.Mock', 'goog.testing.MockExpectation'], ['goog.array', 'goog.object', 'goog.testing.JsUnitException', 'goog.testing.MockInterface', 'goog.testing.mockmatchers'], false); goog.addDependency('testing/mock_test.js', ['goog.testing.MockTest'], ['goog.array', 'goog.testing', 'goog.testing.Mock', 'goog.testing.MockControl', 'goog.testing.MockExpectation', 'goog.testing.jsunit'], false); goog.addDependency('testing/mockclassfactory.js', ['goog.testing.MockClassFactory', 'goog.testing.MockClassRecord'], ['goog.array', 'goog.object', 'goog.testing.LooseMock', 'goog.testing.StrictMock', 'goog.testing.TestCase', 'goog.testing.mockmatchers'], false); goog.addDependency('testing/mockclassfactory_test.js', ['fake.BaseClass', 'fake.ChildClass', 'goog.testing.MockClassFactoryTest'], ['goog.testing', 'goog.testing.MockClassFactory', 'goog.testing.jsunit'], false); goog.addDependency('testing/mockclock.js', ['goog.testing.MockClock'], ['goog.Disposable', 'goog.async.run', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.watchers'], false); goog.addDependency('testing/mockclock_test.js', ['goog.testing.MockClockTest'], ['goog.Promise', 'goog.Timer', 'goog.events', 'goog.functions', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordFunction'], false); goog.addDependency('testing/mockcontrol.js', ['goog.testing.MockControl'], ['goog.array', 'goog.testing', 'goog.testing.LooseMock', 'goog.testing.StrictMock'], false); goog.addDependency('testing/mockcontrol_test.js', ['goog.testing.MockControlTest'], ['goog.testing.Mock', 'goog.testing.MockControl', 'goog.testing.jsunit'], false); goog.addDependency('testing/mockinterface.js', ['goog.testing.MockInterface'], [], false); goog.addDependency('testing/mockmatchers.js', ['goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.testing.mockmatchers.IgnoreArgument', 'goog.testing.mockmatchers.InstanceOf', 'goog.testing.mockmatchers.ObjectEquals', 'goog.testing.mockmatchers.RegexpMatch', 'goog.testing.mockmatchers.SaveArgument', 'goog.testing.mockmatchers.TypeOf'], ['goog.array', 'goog.dom', 'goog.testing.asserts'], false); goog.addDependency('testing/mockmatchers_test.js', ['goog.testing.mockmatchersTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher'], false); goog.addDependency('testing/mockrandom.js', ['goog.testing.MockRandom'], ['goog.Disposable'], false); goog.addDependency('testing/mockrandom_test.js', ['goog.testing.MockRandomTest'], ['goog.testing.MockRandom', 'goog.testing.jsunit'], false); goog.addDependency('testing/mockrange.js', ['goog.testing.MockRange'], ['goog.dom.AbstractRange', 'goog.testing.LooseMock'], false); goog.addDependency('testing/mockrange_test.js', ['goog.testing.MockRangeTest'], ['goog.testing.MockRange', 'goog.testing.jsunit'], false); goog.addDependency('testing/mockstorage.js', ['goog.testing.MockStorage'], ['goog.structs.Map'], false); goog.addDependency('testing/mockstorage_test.js', ['goog.testing.MockStorageTest'], ['goog.testing.MockStorage', 'goog.testing.jsunit'], false); goog.addDependency('testing/mockuseragent.js', ['goog.testing.MockUserAgent'], ['goog.Disposable', 'goog.labs.userAgent.util', 'goog.testing.PropertyReplacer', 'goog.userAgent'], false); goog.addDependency('testing/mockuseragent_test.js', ['goog.testing.MockUserAgentTest'], ['goog.dispose', 'goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('testing/multitestrunner.js', ['goog.testing.MultiTestRunner', 'goog.testing.MultiTestRunner.TestFrame'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.functions', 'goog.string', 'goog.ui.Component', 'goog.ui.ServerChart', 'goog.ui.TableSorter'], false); goog.addDependency('testing/net/xhrio.js', ['goog.testing.net.XhrIo'], ['goog.array', 'goog.dom.xml', 'goog.events', 'goog.events.EventTarget', 'goog.json', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.HttpStatus', 'goog.net.XhrIo', 'goog.net.XmlHttp', 'goog.object', 'goog.structs.Map', 'goog.uri.utils'], false); goog.addDependency('testing/net/xhrio_test.js', ['goog.testing.net.XhrIoTest'], ['goog.dom.xml', 'goog.events', 'goog.events.Event', 'goog.net.ErrorCode', 'goog.net.EventType', 'goog.net.XmlHttp', 'goog.object', 'goog.testing.MockControl', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.mockmatchers.InstanceOf', 'goog.testing.net.XhrIo'], false); goog.addDependency('testing/net/xhriopool.js', ['goog.testing.net.XhrIoPool'], ['goog.net.XhrIoPool', 'goog.testing.net.XhrIo'], false); goog.addDependency('testing/objectpropertystring.js', ['goog.testing.ObjectPropertyString'], [], false); goog.addDependency('testing/performancetable.js', ['goog.testing.PerformanceTable'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.PerformanceTimer'], false); goog.addDependency('testing/performancetimer.js', ['goog.testing.PerformanceTimer', 'goog.testing.PerformanceTimer.Task'], ['goog.array', 'goog.async.Deferred', 'goog.math'], false); goog.addDependency('testing/performancetimer_test.js', ['goog.testing.PerformanceTimerTest'], ['goog.async.Deferred', 'goog.dom', 'goog.math', 'goog.testing.MockClock', 'goog.testing.PerformanceTimer', 'goog.testing.jsunit'], false); goog.addDependency('testing/propertyreplacer.js', ['goog.testing.PropertyReplacer'], ['goog.testing.ObjectPropertyString', 'goog.userAgent'], false); goog.addDependency('testing/propertyreplacer_test.js', ['goog.testing.PropertyReplacerTest'], ['goog.dom.TagName', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('testing/proto2/proto2.js', ['goog.testing.proto2'], ['goog.proto2.Message', 'goog.proto2.ObjectSerializer', 'goog.testing.asserts'], false); goog.addDependency('testing/proto2/proto2_test.js', ['goog.testing.proto2Test'], ['goog.testing.jsunit', 'goog.testing.proto2', 'proto2.TestAllTypes'], false); goog.addDependency('testing/pseudorandom.js', ['goog.testing.PseudoRandom'], ['goog.Disposable'], false); goog.addDependency('testing/pseudorandom_test.js', ['goog.testing.PseudoRandomTest'], ['goog.testing.PseudoRandom', 'goog.testing.jsunit'], false); goog.addDependency('testing/recordfunction.js', ['goog.testing.FunctionCall', 'goog.testing.recordConstructor', 'goog.testing.recordFunction'], ['goog.testing.asserts'], false); goog.addDependency('testing/recordfunction_test.js', ['goog.testing.recordFunctionTest'], ['goog.functions', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.recordConstructor', 'goog.testing.recordFunction'], false); goog.addDependency('testing/shardingtestcase.js', ['goog.testing.ShardingTestCase'], ['goog.asserts', 'goog.testing.TestCase'], false); goog.addDependency('testing/shardingtestcase_test.js', ['goog.testing.ShardingTestCaseTest'], ['goog.testing.ShardingTestCase', 'goog.testing.TestCase', 'goog.testing.asserts', 'goog.testing.jsunit'], false); goog.addDependency('testing/singleton.js', ['goog.testing.singleton'], [], false); goog.addDependency('testing/singleton_test.js', ['goog.testing.singletonTest'], ['goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.singleton'], false); goog.addDependency('testing/stacktrace.js', ['goog.testing.stacktrace', 'goog.testing.stacktrace.Frame'], [], false); goog.addDependency('testing/stacktrace_test.js', ['goog.testing.stacktraceTest'], ['goog.functions', 'goog.string', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.stacktrace', 'goog.testing.stacktrace.Frame', 'goog.userAgent'], false); goog.addDependency('testing/storage/fakemechanism.js', ['goog.testing.storage.FakeMechanism'], ['goog.storage.mechanism.IterableMechanism', 'goog.structs.Map'], false); goog.addDependency('testing/strictmock.js', ['goog.testing.StrictMock'], ['goog.array', 'goog.testing.Mock'], false); goog.addDependency('testing/strictmock_test.js', ['goog.testing.StrictMockTest'], ['goog.testing.StrictMock', 'goog.testing.jsunit'], false); goog.addDependency('testing/style/layoutasserts.js', ['goog.testing.style.layoutasserts'], ['goog.style', 'goog.testing.asserts', 'goog.testing.style'], false); goog.addDependency('testing/style/layoutasserts_test.js', ['goog.testing.style.layoutassertsTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.jsunit', 'goog.testing.style.layoutasserts'], false); goog.addDependency('testing/style/style.js', ['goog.testing.style'], ['goog.dom', 'goog.math.Rect', 'goog.style'], false); goog.addDependency('testing/style/style_test.js', ['goog.testing.styleTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.jsunit', 'goog.testing.style'], false); goog.addDependency('testing/testcase.js', ['goog.testing.TestCase', 'goog.testing.TestCase.Error', 'goog.testing.TestCase.Order', 'goog.testing.TestCase.Result', 'goog.testing.TestCase.Test'], ['goog.Promise', 'goog.Thenable', 'goog.asserts', 'goog.dom.TagName', 'goog.object', 'goog.testing.asserts', 'goog.testing.stacktrace'], false); goog.addDependency('testing/testcase_test.js', ['goog.testing.TestCaseTest'], ['goog.Promise', 'goog.string', 'goog.testing.MockRandom', 'goog.testing.TestCase', 'goog.testing.jsunit'], false); goog.addDependency('testing/testqueue.js', ['goog.testing.TestQueue'], [], false); goog.addDependency('testing/testrunner.js', ['goog.testing.TestRunner'], ['goog.dom.TagName', 'goog.testing.TestCase'], false); goog.addDependency('testing/testsuite.js', ['goog.testing.testSuite'], ['goog.labs.testing.Environment', 'goog.testing.TestCase'], false); goog.addDependency('testing/ui/rendererasserts.js', ['goog.testing.ui.rendererasserts'], ['goog.testing.asserts', 'goog.ui.ControlRenderer'], false); goog.addDependency('testing/ui/rendererasserts_test.js', ['goog.testing.ui.rendererassertsTest'], ['goog.testing.asserts', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.ControlRenderer'], false); goog.addDependency('testing/ui/rendererharness.js', ['goog.testing.ui.RendererHarness'], ['goog.Disposable', 'goog.dom.NodeType', 'goog.testing.asserts', 'goog.testing.dom'], false); goog.addDependency('testing/ui/style.js', ['goog.testing.ui.style'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.testing.asserts'], false); goog.addDependency('testing/ui/style_test.js', ['goog.testing.ui.styleTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style'], false); goog.addDependency('testing/watchers.js', ['goog.testing.watchers'], [], false); goog.addDependency('timer/timer.js', ['goog.Timer'], ['goog.Promise', 'goog.events.EventTarget'], false); goog.addDependency('timer/timer_test.js', ['goog.TimerTest'], ['goog.Promise', 'goog.Timer', 'goog.events', 'goog.testing.MockClock', 'goog.testing.jsunit'], false); goog.addDependency('tweak/entries.js', ['goog.tweak.BaseEntry', 'goog.tweak.BasePrimitiveSetting', 'goog.tweak.BaseSetting', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.StringSetting'], ['goog.array', 'goog.asserts', 'goog.log', 'goog.object'], false); goog.addDependency('tweak/entries_test.js', ['goog.tweak.BaseEntryTest'], ['goog.testing.MockControl', 'goog.testing.jsunit', 'goog.tweak.testhelpers'], false); goog.addDependency('tweak/registry.js', ['goog.tweak.Registry'], ['goog.array', 'goog.asserts', 'goog.log', 'goog.string', 'goog.tweak.BasePrimitiveSetting', 'goog.tweak.BaseSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.NumericSetting', 'goog.tweak.StringSetting', 'goog.uri.utils'], false); goog.addDependency('tweak/registry_test.js', ['goog.tweak.RegistryTest'], ['goog.asserts.AssertionError', 'goog.testing.jsunit', 'goog.tweak', 'goog.tweak.testhelpers'], false); goog.addDependency('tweak/testhelpers.js', ['goog.tweak.testhelpers'], ['goog.tweak', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.Registry', 'goog.tweak.StringSetting'], false); goog.addDependency('tweak/tweak.js', ['goog.tweak', 'goog.tweak.ConfigParams'], ['goog.asserts', 'goog.tweak.BaseSetting', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.Registry', 'goog.tweak.StringSetting'], false); goog.addDependency('tweak/tweakui.js', ['goog.tweak.EntriesPanel', 'goog.tweak.TweakUi'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.object', 'goog.string.Const', 'goog.style', 'goog.tweak', 'goog.tweak.BaseEntry', 'goog.tweak.BooleanGroup', 'goog.tweak.BooleanInGroupSetting', 'goog.tweak.BooleanSetting', 'goog.tweak.ButtonAction', 'goog.tweak.NumericSetting', 'goog.tweak.StringSetting', 'goog.ui.Zippy', 'goog.userAgent'], false); goog.addDependency('tweak/tweakui_test.js', ['goog.tweak.TweakUiTest'], ['goog.dom', 'goog.dom.TagName', 'goog.string', 'goog.testing.jsunit', 'goog.tweak', 'goog.tweak.TweakUi', 'goog.tweak.testhelpers'], false); goog.addDependency('ui/abstractspellchecker.js', ['goog.ui.AbstractSpellChecker', 'goog.ui.AbstractSpellChecker.AsyncResult'], ['goog.a11y.aria', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.selection', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.spell.SpellCheck', 'goog.structs.Set', 'goog.style', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.MenuSeparator', 'goog.ui.PopupMenu'], false); goog.addDependency('ui/ac/ac.js', ['goog.ui.ac'], ['goog.ui.ac.ArrayMatcher', 'goog.ui.ac.AutoComplete', 'goog.ui.ac.InputHandler', 'goog.ui.ac.Renderer'], false); goog.addDependency('ui/ac/ac_test.js', ['goog.ui.acTest'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.classlist', 'goog.dom.selection', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.ac', 'goog.userAgent'], false); goog.addDependency('ui/ac/arraymatcher.js', ['goog.ui.ac.ArrayMatcher'], ['goog.string'], false); goog.addDependency('ui/ac/arraymatcher_test.js', ['goog.ui.ac.ArrayMatcherTest'], ['goog.testing.jsunit', 'goog.ui.ac.ArrayMatcher'], false); goog.addDependency('ui/ac/autocomplete.js', ['goog.ui.ac.AutoComplete', 'goog.ui.ac.AutoComplete.EventType'], ['goog.array', 'goog.asserts', 'goog.events', 'goog.events.EventTarget', 'goog.object'], false); goog.addDependency('ui/ac/autocomplete_test.js', ['goog.ui.ac.AutoCompleteTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.string', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.ac.AutoComplete', 'goog.ui.ac.InputHandler', 'goog.ui.ac.RenderOptions', 'goog.ui.ac.Renderer'], false); goog.addDependency('ui/ac/cachingmatcher.js', ['goog.ui.ac.CachingMatcher'], ['goog.array', 'goog.async.Throttle', 'goog.ui.ac.ArrayMatcher', 'goog.ui.ac.RenderOptions'], false); goog.addDependency('ui/ac/cachingmatcher_test.js', ['goog.ui.ac.CachingMatcherTest'], ['goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.ac.CachingMatcher'], false); goog.addDependency('ui/ac/inputhandler.js', ['goog.ui.ac.InputHandler'], ['goog.Disposable', 'goog.Timer', 'goog.a11y.aria', 'goog.dom', 'goog.dom.selection', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.string', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('ui/ac/inputhandler_test.js', ['goog.ui.ac.InputHandlerTest'], ['goog.dom.selection', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.KeyCodes', 'goog.functions', 'goog.object', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.ac.InputHandler', 'goog.userAgent'], false); goog.addDependency('ui/ac/remote.js', ['goog.ui.ac.Remote'], ['goog.ui.ac.AutoComplete', 'goog.ui.ac.InputHandler', 'goog.ui.ac.RemoteArrayMatcher', 'goog.ui.ac.Renderer'], false); goog.addDependency('ui/ac/remotearraymatcher.js', ['goog.ui.ac.RemoteArrayMatcher'], ['goog.Disposable', 'goog.Uri', 'goog.events', 'goog.json', 'goog.net.EventType', 'goog.net.XhrIo'], false); goog.addDependency('ui/ac/remotearraymatcher_test.js', ['goog.ui.ac.RemoteArrayMatcherTest'], ['goog.json', 'goog.net.XhrIo', 'goog.testing.MockControl', 'goog.testing.jsunit', 'goog.testing.net.XhrIo', 'goog.ui.ac.RemoteArrayMatcher'], false); goog.addDependency('ui/ac/renderer.js', ['goog.ui.ac.Renderer', 'goog.ui.ac.Renderer.CustomRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dispose', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.fx.dom.FadeInAndShow', 'goog.fx.dom.FadeOutAndHide', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.string', 'goog.style', 'goog.ui.IdGenerator', 'goog.ui.ac.AutoComplete'], false); goog.addDependency('ui/ac/renderer_test.js', ['goog.ui.ac.RendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.fx.dom.FadeInAndShow', 'goog.fx.dom.FadeOutAndHide', 'goog.string', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.ac.AutoComplete', 'goog.ui.ac.Renderer'], false); goog.addDependency('ui/ac/renderoptions.js', ['goog.ui.ac.RenderOptions'], [], false); goog.addDependency('ui/ac/richinputhandler.js', ['goog.ui.ac.RichInputHandler'], ['goog.ui.ac.InputHandler'], false); goog.addDependency('ui/ac/richremote.js', ['goog.ui.ac.RichRemote'], ['goog.ui.ac.AutoComplete', 'goog.ui.ac.Remote', 'goog.ui.ac.Renderer', 'goog.ui.ac.RichInputHandler', 'goog.ui.ac.RichRemoteArrayMatcher'], false); goog.addDependency('ui/ac/richremotearraymatcher.js', ['goog.ui.ac.RichRemoteArrayMatcher'], ['goog.dom.safe', 'goog.html.legacyconversions', 'goog.json', 'goog.ui.ac.RemoteArrayMatcher'], false); goog.addDependency('ui/activitymonitor.js', ['goog.ui.ActivityMonitor'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType'], false); goog.addDependency('ui/activitymonitor_test.js', ['goog.ui.ActivityMonitorTest'], ['goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.ActivityMonitor'], false); goog.addDependency('ui/advancedtooltip.js', ['goog.ui.AdvancedTooltip'], ['goog.events', 'goog.events.EventType', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style', 'goog.ui.Tooltip', 'goog.userAgent'], false); goog.addDependency('ui/advancedtooltip_test.js', ['goog.ui.AdvancedTooltipTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events.Event', 'goog.events.EventType', 'goog.math.Box', 'goog.math.Coordinate', 'goog.style', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.AdvancedTooltip', 'goog.ui.Tooltip', 'goog.userAgent'], false); goog.addDependency('ui/animatedzippy.js', ['goog.ui.AnimatedZippy'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.fx.easing', 'goog.ui.Zippy', 'goog.ui.ZippyEvent'], false); goog.addDependency('ui/animatedzippy_test.js', ['goog.ui.AnimatedZippyTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.events', 'goog.functions', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.testing.PropertyReplacer', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.ui.AnimatedZippy', 'goog.ui.Zippy'], false); goog.addDependency('ui/attachablemenu.js', ['goog.ui.AttachableMenu'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.string', 'goog.style', 'goog.ui.ItemEvent', 'goog.ui.MenuBase', 'goog.ui.PopupBase', 'goog.userAgent'], false); goog.addDependency('ui/bidiinput.js', ['goog.ui.BidiInput'], ['goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.InputHandler', 'goog.i18n.bidi', 'goog.ui.Component'], false); goog.addDependency('ui/bidiinput_test.js', ['goog.ui.BidiInputTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.BidiInput'], false); goog.addDependency('ui/bubble.js', ['goog.ui.Bubble'], ['goog.Timer', 'goog.dom.safe', 'goog.events', 'goog.events.EventType', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.math.Box', 'goog.positioning', 'goog.positioning.AbsolutePosition', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.CornerBit', 'goog.string.Const', 'goog.style', 'goog.ui.Component', 'goog.ui.Popup'], false); goog.addDependency('ui/button.js', ['goog.ui.Button', 'goog.ui.Button.Side'], ['goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.ui.ButtonRenderer', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.NativeButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/button_test.js', ['goog.ui.ButtonTest'], ['goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.NativeButtonRenderer'], false); goog.addDependency('ui/buttonrenderer.js', ['goog.ui.ButtonRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false); goog.addDependency('ui/buttonrenderer_test.js', ['goog.ui.ButtonRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.ExpectedFailures', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.ButtonSide', 'goog.ui.Component'], false); goog.addDependency('ui/buttonside.js', ['goog.ui.ButtonSide'], [], false); goog.addDependency('ui/charcounter.js', ['goog.ui.CharCounter', 'goog.ui.CharCounter.Display'], ['goog.dom', 'goog.events', 'goog.events.EventTarget', 'goog.events.InputHandler'], false); goog.addDependency('ui/charcounter_test.js', ['goog.ui.CharCounterTest'], ['goog.dom', 'goog.testing.asserts', 'goog.testing.jsunit', 'goog.ui.CharCounter', 'goog.userAgent'], false); goog.addDependency('ui/charpicker.js', ['goog.ui.CharPicker'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.i18n.CharListDecompressor', 'goog.i18n.uChar', 'goog.structs.Set', 'goog.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.ContainerScroller', 'goog.ui.FlatButtonRenderer', 'goog.ui.HoverCard', 'goog.ui.LabelInput', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.Tooltip'], false); goog.addDependency('ui/charpicker_test.js', ['goog.ui.CharPickerTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dispose', 'goog.dom', 'goog.events.Event', 'goog.events.EventType', 'goog.i18n.CharPickerData', 'goog.i18n.uChar.NameFetcher', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.ui.CharPicker', 'goog.ui.FlatButtonRenderer'], false); goog.addDependency('ui/checkbox.js', ['goog.ui.Checkbox', 'goog.ui.Checkbox.State'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.string', 'goog.ui.CheckboxRenderer', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.registry'], false); goog.addDependency('ui/checkbox_test.js', ['goog.ui.CheckboxTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.KeyCodes', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Checkbox', 'goog.ui.CheckboxRenderer', 'goog.ui.Component', 'goog.ui.ControlRenderer', 'goog.ui.decorate'], false); goog.addDependency('ui/checkboxmenuitem.js', ['goog.ui.CheckBoxMenuItem'], ['goog.ui.MenuItem', 'goog.ui.registry'], false); goog.addDependency('ui/checkboxrenderer.js', ['goog.ui.CheckboxRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.object', 'goog.ui.ControlRenderer'], false); goog.addDependency('ui/colorbutton.js', ['goog.ui.ColorButton'], ['goog.ui.Button', 'goog.ui.ColorButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/colorbutton_test.js', ['goog.ui.ColorButtonTest'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.ui.ColorButton', 'goog.ui.decorate'], false); goog.addDependency('ui/colorbuttonrenderer.js', ['goog.ui.ColorButtonRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.functions', 'goog.ui.ColorMenuButtonRenderer'], false); goog.addDependency('ui/colormenubutton.js', ['goog.ui.ColorMenuButton'], ['goog.array', 'goog.object', 'goog.ui.ColorMenuButtonRenderer', 'goog.ui.ColorPalette', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.registry'], false); goog.addDependency('ui/colormenubuttonrenderer.js', ['goog.ui.ColorMenuButtonRenderer'], ['goog.asserts', 'goog.color', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.MenuButtonRenderer', 'goog.userAgent'], false); goog.addDependency('ui/colormenubuttonrenderer_test.js', ['goog.ui.ColorMenuButtonTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.testing.ui.RendererHarness', 'goog.testing.ui.rendererasserts', 'goog.ui.ColorMenuButton', 'goog.ui.ColorMenuButtonRenderer', 'goog.userAgent'], false); goog.addDependency('ui/colorpalette.js', ['goog.ui.ColorPalette'], ['goog.array', 'goog.color', 'goog.dom.TagName', 'goog.style', 'goog.ui.Palette', 'goog.ui.PaletteRenderer'], false); goog.addDependency('ui/colorpalette_test.js', ['goog.ui.ColorPaletteTest'], ['goog.color', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.ColorPalette'], false); goog.addDependency('ui/colorpicker.js', ['goog.ui.ColorPicker', 'goog.ui.ColorPicker.EventType'], ['goog.ui.ColorPalette', 'goog.ui.Component'], false); goog.addDependency('ui/colorsplitbehavior.js', ['goog.ui.ColorSplitBehavior'], ['goog.ui.ColorMenuButton', 'goog.ui.SplitBehavior'], false); goog.addDependency('ui/combobox.js', ['goog.ui.ComboBox', 'goog.ui.ComboBoxItem'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.log', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.ItemEvent', 'goog.ui.LabelInput', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.MenuSeparator', 'goog.ui.registry', 'goog.userAgent'], false); goog.addDependency('ui/combobox_test.js', ['goog.ui.ComboBoxTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.ComboBox', 'goog.ui.ComboBoxItem', 'goog.ui.Component', 'goog.ui.ControlRenderer', 'goog.ui.LabelInput', 'goog.ui.Menu', 'goog.ui.MenuItem'], false); goog.addDependency('ui/component.js', ['goog.ui.Component', 'goog.ui.Component.Error', 'goog.ui.Component.EventType', 'goog.ui.Component.State'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.object', 'goog.style', 'goog.ui.IdGenerator'], false); goog.addDependency('ui/component_test.js', ['goog.ui.ComponentTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.events.EventTarget', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component'], false); goog.addDependency('ui/container.js', ['goog.ui.Container', 'goog.ui.Container.EventType', 'goog.ui.Container.Orientation'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.object', 'goog.style', 'goog.ui.Component', 'goog.ui.ContainerRenderer', 'goog.ui.Control'], false); goog.addDependency('ui/container_test.js', ['goog.ui.ContainerTest'], ['goog.a11y.aria', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.events.KeyEvent', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Control'], false); goog.addDependency('ui/containerrenderer.js', ['goog.ui.ContainerRenderer'], ['goog.a11y.aria', 'goog.array', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.string', 'goog.style', 'goog.ui.registry', 'goog.userAgent'], false); goog.addDependency('ui/containerrenderer_test.js', ['goog.ui.ContainerRendererTest'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Container', 'goog.ui.ContainerRenderer', 'goog.userAgent'], false); goog.addDependency('ui/containerscroller.js', ['goog.ui.ContainerScroller'], ['goog.Disposable', 'goog.Timer', 'goog.events.EventHandler', 'goog.style', 'goog.ui.Component', 'goog.ui.Container'], false); goog.addDependency('ui/containerscroller_test.js', ['goog.ui.ContainerScrollerTest'], ['goog.dom', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Container', 'goog.ui.ContainerScroller'], false); goog.addDependency('ui/control.js', ['goog.ui.Control'], ['goog.Disposable', 'goog.array', 'goog.dom', 'goog.events.BrowserEvent', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.string', 'goog.ui.Component', 'goog.ui.ControlContent', 'goog.ui.ControlRenderer', 'goog.ui.decorate', 'goog.ui.registry', 'goog.userAgent'], false); goog.addDependency('ui/control_test.js', ['goog.ui.ControlTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.object', 'goog.string', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.ControlRenderer', 'goog.ui.registry', 'goog.userAgent'], false); goog.addDependency('ui/controlcontent.js', ['goog.ui.ControlContent'], [], false); goog.addDependency('ui/controlrenderer.js', ['goog.ui.ControlRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.object', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false); goog.addDependency('ui/controlrenderer_test.js', ['goog.ui.ControlRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.object', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.ControlRenderer', 'goog.userAgent'], false); goog.addDependency('ui/cookieeditor.js', ['goog.ui.CookieEditor'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events.EventType', 'goog.net.cookies', 'goog.string', 'goog.style', 'goog.ui.Component'], false); goog.addDependency('ui/cookieeditor_test.js', ['goog.ui.CookieEditorTest'], ['goog.dom', 'goog.events.Event', 'goog.events.EventType', 'goog.net.cookies', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.CookieEditor'], false); goog.addDependency('ui/css3buttonrenderer.js', ['goog.ui.Css3ButtonRenderer'], ['goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.Component', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false); goog.addDependency('ui/css3menubuttonrenderer.js', ['goog.ui.Css3MenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.MenuButton', 'goog.ui.MenuButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/cssnames.js', ['goog.ui.INLINE_BLOCK_CLASSNAME'], [], false); goog.addDependency('ui/custombutton.js', ['goog.ui.CustomButton'], ['goog.ui.Button', 'goog.ui.CustomButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/custombuttonrenderer.js', ['goog.ui.CustomButtonRenderer'], ['goog.a11y.aria.Role', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.string', 'goog.ui.ButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME'], false); goog.addDependency('ui/customcolorpalette.js', ['goog.ui.CustomColorPalette'], ['goog.color', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.ColorPalette', 'goog.ui.Component'], false); goog.addDependency('ui/customcolorpalette_test.js', ['goog.ui.CustomColorPaletteTest'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.ui.CustomColorPalette'], false); goog.addDependency('ui/datepicker.js', ['goog.ui.DatePicker', 'goog.ui.DatePicker.Events', 'goog.ui.DatePickerEvent'], ['goog.a11y.aria', 'goog.asserts', 'goog.date.Date', 'goog.date.DateRange', 'goog.date.Interval', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimePatterns', 'goog.i18n.DateTimeSymbols', 'goog.style', 'goog.ui.Component', 'goog.ui.DefaultDatePickerRenderer', 'goog.ui.IdGenerator'], false); goog.addDependency('ui/datepicker_test.js', ['goog.ui.DatePickerTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.date.Date', 'goog.date.DateRange', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.i18n.DateTimeSymbols', 'goog.i18n.DateTimeSymbols_en_US', 'goog.i18n.DateTimeSymbols_zh_HK', 'goog.style', 'goog.testing.jsunit', 'goog.ui.DatePicker'], false); goog.addDependency('ui/datepickerrenderer.js', ['goog.ui.DatePickerRenderer'], [], false); goog.addDependency('ui/decorate.js', ['goog.ui.decorate'], ['goog.ui.registry'], false); goog.addDependency('ui/decorate_test.js', ['goog.ui.decorateTest'], ['goog.testing.jsunit', 'goog.ui.decorate', 'goog.ui.registry'], false); goog.addDependency('ui/defaultdatepickerrenderer.js', ['goog.ui.DefaultDatePickerRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.ui.DatePickerRenderer'], false); goog.addDependency('ui/dialog.js', ['goog.ui.Dialog', 'goog.ui.Dialog.ButtonSet', 'goog.ui.Dialog.ButtonSet.DefaultButtons', 'goog.ui.Dialog.DefaultButtonCaptions', 'goog.ui.Dialog.DefaultButtonKeys', 'goog.ui.Dialog.Event', 'goog.ui.Dialog.EventType'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.safe', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Dragger', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.math.Rect', 'goog.string', 'goog.structs.Map', 'goog.style', 'goog.ui.ModalPopup'], false); goog.addDependency('ui/dialog_test.js', ['goog.ui.DialogTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.css3', 'goog.html.SafeHtml', 'goog.html.testing', 'goog.style', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Dialog', 'goog.userAgent'], false); goog.addDependency('ui/dimensionpicker.js', ['goog.ui.DimensionPicker'], ['goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Size', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.DimensionPickerRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/dimensionpicker_test.js', ['goog.ui.DimensionPickerTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events.KeyCodes', 'goog.math.Size', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.DimensionPicker', 'goog.ui.DimensionPickerRenderer'], false); goog.addDependency('ui/dimensionpickerrenderer.js', ['goog.ui.DimensionPickerRenderer'], ['goog.a11y.aria.Announcer', 'goog.a11y.aria.LivePriority', 'goog.dom', 'goog.dom.TagName', 'goog.i18n.bidi', 'goog.style', 'goog.ui.ControlRenderer', 'goog.userAgent'], false); goog.addDependency('ui/dimensionpickerrenderer_test.js', ['goog.ui.DimensionPickerRendererTest'], ['goog.a11y.aria.LivePriority', 'goog.array', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.DimensionPicker', 'goog.ui.DimensionPickerRenderer'], false); goog.addDependency('ui/dragdropdetector.js', ['goog.ui.DragDropDetector', 'goog.ui.DragDropDetector.EventType', 'goog.ui.DragDropDetector.ImageDropEvent', 'goog.ui.DragDropDetector.LinkDropEvent'], ['goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.math.Coordinate', 'goog.string', 'goog.style', 'goog.userAgent'], false); goog.addDependency('ui/drilldownrow.js', ['goog.ui.DrilldownRow'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.ui.Component'], false); goog.addDependency('ui/drilldownrow_test.js', ['goog.ui.DrilldownRowTest'], ['goog.dom', 'goog.dom.TagName', 'goog.html.SafeHtml', 'goog.testing.jsunit', 'goog.ui.DrilldownRow'], false); goog.addDependency('ui/editor/abstractdialog.js', ['goog.ui.editor.AbstractDialog', 'goog.ui.editor.AbstractDialog.Builder', 'goog.ui.editor.AbstractDialog.EventType'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.EventTarget', 'goog.string', 'goog.ui.Dialog', 'goog.ui.PopupBase'], false); goog.addDependency('ui/editor/abstractdialog_test.js', ['goog.ui.editor.AbstractDialogTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.KeyCodes', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.ui.editor.AbstractDialog', 'goog.userAgent'], false); goog.addDependency('ui/editor/bubble.js', ['goog.ui.editor.Bubble'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.ViewportSizeMonitor', 'goog.dom.classlist', 'goog.editor.style', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.functions', 'goog.log', 'goog.math.Box', 'goog.object', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.PopupBase', 'goog.userAgent'], false); goog.addDependency('ui/editor/bubble_test.js', ['goog.ui.editor.BubbleTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.positioning.Corner', 'goog.positioning.OverflowStatus', 'goog.string', 'goog.style', 'goog.testing.editor.TestHelper', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.editor.Bubble', 'goog.userAgent.product'], false); goog.addDependency('ui/editor/defaulttoolbar.js', ['goog.ui.editor.ButtonDescriptor', 'goog.ui.editor.DefaultToolbar'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.editor.Command', 'goog.style', 'goog.ui.editor.ToolbarFactory', 'goog.ui.editor.messages', 'goog.userAgent'], false); goog.addDependency('ui/editor/linkdialog.js', ['goog.ui.editor.LinkDialog', 'goog.ui.editor.LinkDialog.BeforeTestLinkEvent', 'goog.ui.editor.LinkDialog.EventType', 'goog.ui.editor.LinkDialog.OkEvent'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.editor.BrowserFeature', 'goog.editor.Link', 'goog.editor.focus', 'goog.editor.node', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.InputHandler', 'goog.html.SafeHtml', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.LinkButtonRenderer', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.TabPane', 'goog.ui.editor.messages', 'goog.userAgent', 'goog.window'], false); goog.addDependency('ui/editor/linkdialog_test.js', ['goog.ui.editor.LinkDialogTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.editor.BrowserFeature', 'goog.editor.Link', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style', 'goog.testing.MockControl', 'goog.testing.PropertyReplacer', 'goog.testing.dom', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.mockmatchers.ArgumentMatcher', 'goog.ui.editor.AbstractDialog', 'goog.ui.editor.LinkDialog', 'goog.ui.editor.messages', 'goog.userAgent'], false); goog.addDependency('ui/editor/messages.js', ['goog.ui.editor.messages'], ['goog.html.uncheckedconversions', 'goog.string.Const'], false); goog.addDependency('ui/editor/tabpane.js', ['goog.ui.editor.TabPane'], ['goog.asserts', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.Tab', 'goog.ui.TabBar'], false); goog.addDependency('ui/editor/toolbarcontroller.js', ['goog.ui.editor.ToolbarController'], ['goog.editor.Field', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.ui.Component'], false); goog.addDependency('ui/editor/toolbarfactory.js', ['goog.ui.editor.ToolbarFactory'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.string', 'goog.string.Unicode', 'goog.style', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Option', 'goog.ui.Toolbar', 'goog.ui.ToolbarButton', 'goog.ui.ToolbarColorMenuButton', 'goog.ui.ToolbarMenuButton', 'goog.ui.ToolbarRenderer', 'goog.ui.ToolbarSelect', 'goog.userAgent'], false); goog.addDependency('ui/editor/toolbarfactory_test.js', ['goog.ui.editor.ToolbarFactoryTest'], ['goog.dom', 'goog.testing.ExpectedFailures', 'goog.testing.editor.TestHelper', 'goog.testing.jsunit', 'goog.ui.editor.ToolbarFactory', 'goog.userAgent'], false); goog.addDependency('ui/emoji/emoji.js', ['goog.ui.emoji.Emoji'], [], false); goog.addDependency('ui/emoji/emojipalette.js', ['goog.ui.emoji.EmojiPalette'], ['goog.events.EventType', 'goog.net.ImageLoader', 'goog.ui.Palette', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPaletteRenderer'], false); goog.addDependency('ui/emoji/emojipaletterenderer.js', ['goog.ui.emoji.EmojiPaletteRenderer'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.style', 'goog.ui.PaletteRenderer', 'goog.ui.emoji.Emoji'], false); goog.addDependency('ui/emoji/emojipicker.js', ['goog.ui.emoji.EmojiPicker'], ['goog.dom.TagName', 'goog.style', 'goog.ui.Component', 'goog.ui.TabPane', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPalette', 'goog.ui.emoji.EmojiPaletteRenderer', 'goog.ui.emoji.ProgressiveEmojiPaletteRenderer'], false); goog.addDependency('ui/emoji/emojipicker_test.js', ['goog.ui.emoji.EmojiPickerTest'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPicker', 'goog.ui.emoji.SpriteInfo'], false); goog.addDependency('ui/emoji/fast_nonprogressive_emojipicker_test.js', ['goog.ui.emoji.FastNonProgressiveEmojiPickerTest'], ['goog.Promise', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.net.EventType', 'goog.style', 'goog.testing.jsunit', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPicker', 'goog.ui.emoji.SpriteInfo'], false); goog.addDependency('ui/emoji/fast_progressive_emojipicker_test.js', ['goog.ui.emoji.FastProgressiveEmojiPickerTest'], ['goog.Promise', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.net.EventType', 'goog.style', 'goog.testing.jsunit', 'goog.ui.emoji.Emoji', 'goog.ui.emoji.EmojiPicker', 'goog.ui.emoji.SpriteInfo'], false); goog.addDependency('ui/emoji/popupemojipicker.js', ['goog.ui.emoji.PopupEmojiPicker'], ['goog.events.EventType', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.ui.Component', 'goog.ui.Popup', 'goog.ui.emoji.EmojiPicker'], false); goog.addDependency('ui/emoji/popupemojipicker_test.js', ['goog.ui.emoji.PopupEmojiPickerTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.emoji.PopupEmojiPicker'], false); goog.addDependency('ui/emoji/progressiveemojipaletterenderer.js', ['goog.ui.emoji.ProgressiveEmojiPaletteRenderer'], ['goog.dom.TagName', 'goog.style', 'goog.ui.emoji.EmojiPaletteRenderer'], false); goog.addDependency('ui/emoji/spriteinfo.js', ['goog.ui.emoji.SpriteInfo'], [], false); goog.addDependency('ui/emoji/spriteinfo_test.js', ['goog.ui.emoji.SpriteInfoTest'], ['goog.testing.jsunit', 'goog.ui.emoji.SpriteInfo'], false); goog.addDependency('ui/filteredmenu.js', ['goog.ui.FilteredMenu'], ['goog.a11y.aria', 'goog.a11y.aria.AutoCompleteValues', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.object', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.FilterObservingMenuItem', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.userAgent'], false); goog.addDependency('ui/filteredmenu_test.js', ['goog.ui.FilteredMenuTest'], ['goog.a11y.aria', 'goog.a11y.aria.AutoCompleteValues', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Rect', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.FilteredMenu', 'goog.ui.MenuItem'], false); goog.addDependency('ui/filterobservingmenuitem.js', ['goog.ui.FilterObservingMenuItem'], ['goog.ui.FilterObservingMenuItemRenderer', 'goog.ui.MenuItem', 'goog.ui.registry'], false); goog.addDependency('ui/filterobservingmenuitemrenderer.js', ['goog.ui.FilterObservingMenuItemRenderer'], ['goog.ui.MenuItemRenderer'], false); goog.addDependency('ui/flatbuttonrenderer.js', ['goog.ui.FlatButtonRenderer'], ['goog.a11y.aria.Role', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.ButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false); goog.addDependency('ui/flatmenubuttonrenderer.js', ['goog.ui.FlatMenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.ui.FlatButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/formpost.js', ['goog.ui.FormPost'], ['goog.array', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeHtml', 'goog.ui.Component'], false); goog.addDependency('ui/formpost_test.js', ['goog.ui.FormPostTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.object', 'goog.testing.jsunit', 'goog.ui.FormPost', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('ui/gauge.js', ['goog.ui.Gauge', 'goog.ui.GaugeColoredRange'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom.TagName', 'goog.events', 'goog.fx.Animation', 'goog.fx.Transition', 'goog.fx.easing', 'goog.graphics', 'goog.graphics.Font', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.math', 'goog.ui.Component', 'goog.ui.GaugeTheme'], false); goog.addDependency('ui/gaugetheme.js', ['goog.ui.GaugeTheme'], ['goog.graphics.LinearGradient', 'goog.graphics.SolidFill', 'goog.graphics.Stroke'], false); goog.addDependency('ui/hovercard.js', ['goog.ui.HoverCard', 'goog.ui.HoverCard.EventType', 'goog.ui.HoverCard.TriggerEvent'], ['goog.array', 'goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.ui.AdvancedTooltip', 'goog.ui.PopupBase', 'goog.ui.Tooltip'], false); goog.addDependency('ui/hovercard_test.js', ['goog.ui.HoverCardTest'], ['goog.dom', 'goog.events', 'goog.math.Coordinate', 'goog.style', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.HoverCard'], false); goog.addDependency('ui/hsvapalette.js', ['goog.ui.HsvaPalette'], ['goog.array', 'goog.color.alpha', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.ui.HsvPalette'], false); goog.addDependency('ui/hsvapalette_test.js', ['goog.ui.HsvaPaletteTest'], ['goog.color.alpha', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.Event', 'goog.math.Coordinate', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.HsvaPalette', 'goog.userAgent'], false); goog.addDependency('ui/hsvpalette.js', ['goog.ui.HsvPalette'], ['goog.color', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.events.InputHandler', 'goog.style', 'goog.style.bidi', 'goog.ui.Component', 'goog.userAgent'], false); goog.addDependency('ui/hsvpalette_test.js', ['goog.ui.HsvPaletteTest'], ['goog.color', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.math.Coordinate', 'goog.style', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.HsvPalette', 'goog.userAgent'], false); goog.addDependency('ui/idgenerator.js', ['goog.ui.IdGenerator'], [], false); goog.addDependency('ui/idletimer.js', ['goog.ui.IdleTimer'], ['goog.Timer', 'goog.events', 'goog.events.EventTarget', 'goog.structs.Set', 'goog.ui.ActivityMonitor'], false); goog.addDependency('ui/idletimer_test.js', ['goog.ui.IdleTimerTest'], ['goog.events', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.IdleTimer', 'goog.ui.MockActivityMonitor'], false); goog.addDependency('ui/iframemask.js', ['goog.ui.IframeMask'], ['goog.Disposable', 'goog.Timer', 'goog.dom', 'goog.dom.iframe', 'goog.events.EventHandler', 'goog.style'], false); goog.addDependency('ui/iframemask_test.js', ['goog.ui.IframeMaskTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.iframe', 'goog.structs.Pool', 'goog.style', 'goog.testing.MockClock', 'goog.testing.StrictMock', 'goog.testing.jsunit', 'goog.ui.IframeMask', 'goog.ui.Popup', 'goog.ui.PopupBase', 'goog.userAgent'], false); goog.addDependency('ui/imagelessbuttonrenderer.js', ['goog.ui.ImagelessButtonRenderer'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.CustomButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false); goog.addDependency('ui/imagelessmenubuttonrenderer.js', ['goog.ui.ImagelessMenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.MenuButton', 'goog.ui.MenuButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/inputdatepicker.js', ['goog.ui.InputDatePicker'], ['goog.date.DateTime', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.string', 'goog.ui.Component', 'goog.ui.DatePicker', 'goog.ui.LabelInput', 'goog.ui.PopupBase', 'goog.ui.PopupDatePicker'], false); goog.addDependency('ui/inputdatepicker_test.js', ['goog.ui.InputDatePickerTest'], ['goog.dom', 'goog.i18n.DateTimeFormat', 'goog.i18n.DateTimeParse', 'goog.testing.jsunit', 'goog.ui.InputDatePicker'], false); goog.addDependency('ui/itemevent.js', ['goog.ui.ItemEvent'], ['goog.events.Event'], false); goog.addDependency('ui/keyboardshortcuthandler.js', ['goog.ui.KeyboardShortcutEvent', 'goog.ui.KeyboardShortcutHandler', 'goog.ui.KeyboardShortcutHandler.EventType'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyNames', 'goog.object', 'goog.userAgent'], false); goog.addDependency('ui/keyboardshortcuthandler_test.js', ['goog.ui.KeyboardShortcutHandlerTest'], ['goog.dom', 'goog.events', 'goog.events.BrowserEvent', 'goog.events.KeyCodes', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.StrictMock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.KeyboardShortcutHandler', 'goog.userAgent'], false); goog.addDependency('ui/labelinput.js', ['goog.ui.LabelInput'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.ui.Component', 'goog.userAgent'], false); goog.addDependency('ui/labelinput_test.js', ['goog.ui.LabelInputTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.events.EventType', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.LabelInput', 'goog.userAgent'], false); goog.addDependency('ui/linkbuttonrenderer.js', ['goog.ui.LinkButtonRenderer'], ['goog.ui.Button', 'goog.ui.FlatButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/media/flashobject.js', ['goog.ui.media.FlashObject', 'goog.ui.media.FlashObject.ScriptAccessLevel', 'goog.ui.media.FlashObject.Wmodes'], ['goog.asserts', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.html.SafeUrl', 'goog.html.TrustedResourceUrl', 'goog.html.flash', 'goog.html.legacyconversions', 'goog.log', 'goog.object', 'goog.string', 'goog.structs.Map', 'goog.style', 'goog.ui.Component', 'goog.userAgent', 'goog.userAgent.flash'], false); goog.addDependency('ui/media/flashobject_test.js', ['goog.ui.media.FlashObjectTest'], ['goog.dom', 'goog.dom.DomHelper', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.html.SafeUrl', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.userAgent'], false); goog.addDependency('ui/media/flickr.js', ['goog.ui.media.FlickrSet', 'goog.ui.media.FlickrSetModel'], ['goog.html.TrustedResourceUrl', 'goog.string.Const', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/flickr_test.js', ['goog.ui.media.FlickrSetTest'], ['goog.dom', 'goog.dom.TagName', 'goog.html.testing', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.FlickrSet', 'goog.ui.media.FlickrSetModel', 'goog.ui.media.Media'], false); goog.addDependency('ui/media/googlevideo.js', ['goog.ui.media.GoogleVideo', 'goog.ui.media.GoogleVideoModel'], ['goog.string', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/googlevideo_test.js', ['goog.ui.media.GoogleVideoTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.GoogleVideo', 'goog.ui.media.GoogleVideoModel', 'goog.ui.media.Media'], false); goog.addDependency('ui/media/media.js', ['goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], ['goog.asserts', 'goog.dom.TagName', 'goog.style', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.ControlRenderer'], false); goog.addDependency('ui/media/media_test.js', ['goog.ui.media.MediaTest'], ['goog.dom', 'goog.dom.TagName', 'goog.math.Size', 'goog.testing.jsunit', 'goog.ui.ControlRenderer', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/mediamodel.js', ['goog.ui.media.MediaModel', 'goog.ui.media.MediaModel.Category', 'goog.ui.media.MediaModel.Credit', 'goog.ui.media.MediaModel.Credit.Role', 'goog.ui.media.MediaModel.Credit.Scheme', 'goog.ui.media.MediaModel.Medium', 'goog.ui.media.MediaModel.MimeType', 'goog.ui.media.MediaModel.Player', 'goog.ui.media.MediaModel.SubTitle', 'goog.ui.media.MediaModel.Thumbnail'], ['goog.array', 'goog.html.TrustedResourceUrl', 'goog.html.legacyconversions'], false); goog.addDependency('ui/media/mediamodel_test.js', ['goog.ui.media.MediaModelTest'], ['goog.testing.jsunit', 'goog.ui.media.MediaModel'], false); goog.addDependency('ui/media/mp3.js', ['goog.ui.media.Mp3'], ['goog.string', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/mp3_test.js', ['goog.ui.media.Mp3Test'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.Mp3'], false); goog.addDependency('ui/media/photo.js', ['goog.ui.media.Photo'], ['goog.dom.TagName', 'goog.ui.media.Media', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/photo_test.js', ['goog.ui.media.PhotoTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.MediaModel', 'goog.ui.media.Photo'], false); goog.addDependency('ui/media/picasa.js', ['goog.ui.media.PicasaAlbum', 'goog.ui.media.PicasaAlbumModel'], ['goog.html.TrustedResourceUrl', 'goog.string.Const', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/picasa_test.js', ['goog.ui.media.PicasaTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.PicasaAlbum', 'goog.ui.media.PicasaAlbumModel'], false); goog.addDependency('ui/media/vimeo.js', ['goog.ui.media.Vimeo', 'goog.ui.media.VimeoModel'], ['goog.string', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/vimeo_test.js', ['goog.ui.media.VimeoTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.Vimeo', 'goog.ui.media.VimeoModel'], false); goog.addDependency('ui/media/youtube.js', ['goog.ui.media.Youtube', 'goog.ui.media.YoutubeModel'], ['goog.dom.TagName', 'goog.string', 'goog.ui.Component', 'goog.ui.media.FlashObject', 'goog.ui.media.Media', 'goog.ui.media.MediaModel', 'goog.ui.media.MediaRenderer'], false); goog.addDependency('ui/media/youtube_test.js', ['goog.ui.media.YoutubeTest'], ['goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.media.FlashObject', 'goog.ui.media.Youtube', 'goog.ui.media.YoutubeModel'], false); goog.addDependency('ui/menu.js', ['goog.ui.Menu', 'goog.ui.Menu.EventType'], ['goog.dom.TagName', 'goog.math.Coordinate', 'goog.string', 'goog.style', 'goog.ui.Component.EventType', 'goog.ui.Component.State', 'goog.ui.Container', 'goog.ui.Container.Orientation', 'goog.ui.MenuHeader', 'goog.ui.MenuItem', 'goog.ui.MenuRenderer', 'goog.ui.MenuSeparator'], false); goog.addDependency('ui/menu_test.js', ['goog.ui.MenuTest'], ['goog.dom', 'goog.events', 'goog.math.Coordinate', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Menu'], false); goog.addDependency('ui/menubar.js', ['goog.ui.menuBar'], ['goog.ui.Container', 'goog.ui.MenuBarRenderer'], false); goog.addDependency('ui/menubardecorator.js', ['goog.ui.menuBarDecorator'], ['goog.ui.MenuBarRenderer', 'goog.ui.menuBar', 'goog.ui.registry'], false); goog.addDependency('ui/menubarrenderer.js', ['goog.ui.MenuBarRenderer'], ['goog.a11y.aria.Role', 'goog.ui.Container', 'goog.ui.ContainerRenderer'], false); goog.addDependency('ui/menubase.js', ['goog.ui.MenuBase'], ['goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyHandler', 'goog.ui.Popup'], false); goog.addDependency('ui/menubutton.js', ['goog.ui.MenuButton'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.math.Box', 'goog.math.Rect', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.positioning.Overflow', 'goog.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.IdGenerator', 'goog.ui.Menu', 'goog.ui.MenuButtonRenderer', 'goog.ui.MenuItem', 'goog.ui.MenuRenderer', 'goog.ui.registry', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('ui/menubutton_test.js', ['goog.ui.MenuButtonTest'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.positioning', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.positioning.Overflow', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.PropertyReplacer', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.SubMenu', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('ui/menubuttonrenderer.js', ['goog.ui.MenuButtonRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.ui.CustomButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.Menu', 'goog.ui.MenuRenderer'], false); goog.addDependency('ui/menubuttonrenderer_test.js', ['goog.ui.MenuButtonRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.MenuButton', 'goog.ui.MenuButtonRenderer', 'goog.userAgent'], false); goog.addDependency('ui/menuheader.js', ['goog.ui.MenuHeader'], ['goog.ui.Component', 'goog.ui.Control', 'goog.ui.MenuHeaderRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/menuheaderrenderer.js', ['goog.ui.MenuHeaderRenderer'], ['goog.ui.ControlRenderer'], false); goog.addDependency('ui/menuitem.js', ['goog.ui.MenuItem'], ['goog.a11y.aria.Role', 'goog.array', 'goog.dom', 'goog.dom.classlist', 'goog.math.Coordinate', 'goog.string', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.MenuItemRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/menuitem_test.js', ['goog.ui.MenuItemTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.array', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.math.Coordinate', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.MenuItemRenderer'], false); goog.addDependency('ui/menuitemrenderer.js', ['goog.ui.MenuItemRenderer'], ['goog.a11y.aria.Role', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false); goog.addDependency('ui/menuitemrenderer_test.js', ['goog.ui.MenuItemRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.MenuItemRenderer'], false); goog.addDependency('ui/menurenderer.js', ['goog.ui.MenuRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.ui.ContainerRenderer', 'goog.ui.Separator'], false); goog.addDependency('ui/menuseparator.js', ['goog.ui.MenuSeparator'], ['goog.ui.MenuSeparatorRenderer', 'goog.ui.Separator', 'goog.ui.registry'], false); goog.addDependency('ui/menuseparatorrenderer.js', ['goog.ui.MenuSeparatorRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.ControlRenderer'], false); goog.addDependency('ui/menuseparatorrenderer_test.js', ['goog.ui.MenuSeparatorRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.MenuSeparator', 'goog.ui.MenuSeparatorRenderer'], false); goog.addDependency('ui/mockactivitymonitor.js', ['goog.ui.MockActivityMonitor'], ['goog.events.EventType', 'goog.ui.ActivityMonitor'], false); goog.addDependency('ui/mockactivitymonitor_test.js', ['goog.ui.MockActivityMonitorTest'], ['goog.events', 'goog.functions', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.ActivityMonitor', 'goog.ui.MockActivityMonitor'], false); goog.addDependency('ui/modalariavisibilityhelper.js', ['goog.ui.ModalAriaVisibilityHelper'], ['goog.a11y.aria', 'goog.a11y.aria.State'], false); goog.addDependency('ui/modalariavisibilityhelper_test.js', ['goog.ui.ModalAriaVisibilityHelperTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.string', 'goog.testing.jsunit', 'goog.ui.ModalAriaVisibilityHelper'], false); goog.addDependency('ui/modalpopup.js', ['goog.ui.ModalPopup'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.dom.iframe', 'goog.events', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.fx.Transition', 'goog.string', 'goog.style', 'goog.ui.Component', 'goog.ui.ModalAriaVisibilityHelper', 'goog.ui.PopupBase', 'goog.userAgent'], false); goog.addDependency('ui/modalpopup_test.js', ['goog.ui.ModalPopupTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dispose', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventTarget', 'goog.fx.Transition', 'goog.fx.css3', 'goog.string', 'goog.style', 'goog.testing.MockClock', 'goog.testing.jsunit', 'goog.ui.ModalPopup', 'goog.ui.PopupBase'], false); goog.addDependency('ui/nativebuttonrenderer.js', ['goog.ui.NativeButtonRenderer'], ['goog.asserts', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.ui.ButtonRenderer', 'goog.ui.Component'], false); goog.addDependency('ui/nativebuttonrenderer_test.js', ['goog.ui.NativeButtonRendererTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.testing.ExpectedFailures', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.NativeButtonRenderer', 'goog.userAgent'], false); goog.addDependency('ui/option.js', ['goog.ui.Option'], ['goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.registry'], false); goog.addDependency('ui/palette.js', ['goog.ui.Palette'], ['goog.array', 'goog.dom', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Size', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.PaletteRenderer', 'goog.ui.SelectionModel'], false); goog.addDependency('ui/palette_test.js', ['goog.ui.PaletteTest'], ['goog.a11y.aria', 'goog.dom', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyEvent', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Palette'], false); goog.addDependency('ui/paletterenderer.js', ['goog.ui.PaletteRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.NodeIterator', 'goog.dom.NodeType', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.iter', 'goog.style', 'goog.ui.ControlRenderer', 'goog.userAgent'], false); goog.addDependency('ui/paletterenderer_test.js', ['goog.ui.PaletteRendererTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.testing.jsunit', 'goog.ui.Palette', 'goog.ui.PaletteRenderer'], false); goog.addDependency('ui/plaintextspellchecker.js', ['goog.ui.PlainTextSpellChecker'], ['goog.Timer', 'goog.a11y.aria', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.spell.SpellCheck', 'goog.style', 'goog.ui.AbstractSpellChecker', 'goog.ui.Component', 'goog.userAgent'], false); goog.addDependency('ui/plaintextspellchecker_test.js', ['goog.ui.PlainTextSpellCheckerTest'], ['goog.Timer', 'goog.dom', 'goog.events.KeyCodes', 'goog.spell.SpellCheck', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.PlainTextSpellChecker'], false); goog.addDependency('ui/popup.js', ['goog.ui.Popup'], ['goog.math.Box', 'goog.positioning.Corner', 'goog.style', 'goog.ui.PopupBase'], false); goog.addDependency('ui/popup_test.js', ['goog.ui.PopupTest'], ['goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.style', 'goog.testing.jsunit', 'goog.ui.Popup', 'goog.userAgent'], false); goog.addDependency('ui/popupbase.js', ['goog.ui.PopupBase', 'goog.ui.PopupBase.EventType', 'goog.ui.PopupBase.Type'], ['goog.Timer', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Transition', 'goog.style', 'goog.userAgent'], false); goog.addDependency('ui/popupbase_test.js', ['goog.ui.PopupBaseTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Transition', 'goog.fx.css3', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.PopupBase'], false); goog.addDependency('ui/popupcolorpicker.js', ['goog.ui.PopupColorPicker'], ['goog.asserts', 'goog.dom.classlist', 'goog.events.EventType', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.ui.ColorPicker', 'goog.ui.Component', 'goog.ui.Popup'], false); goog.addDependency('ui/popupcolorpicker_test.js', ['goog.ui.PopupColorPickerTest'], ['goog.dom', 'goog.events', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.ColorPicker', 'goog.ui.PopupColorPicker'], false); goog.addDependency('ui/popupdatepicker.js', ['goog.ui.PopupDatePicker'], ['goog.events.EventType', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.style', 'goog.ui.Component', 'goog.ui.DatePicker', 'goog.ui.Popup', 'goog.ui.PopupBase'], false); goog.addDependency('ui/popupdatepicker_test.js', ['goog.ui.PopupDatePickerTest'], ['goog.date.Date', 'goog.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.PopupBase', 'goog.ui.PopupDatePicker'], false); goog.addDependency('ui/popupmenu.js', ['goog.ui.PopupMenu'], ['goog.events', 'goog.events.BrowserEvent', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.positioning.AnchoredViewportPosition', 'goog.positioning.Corner', 'goog.positioning.MenuAnchoredPosition', 'goog.positioning.Overflow', 'goog.positioning.ViewportClientPosition', 'goog.structs.Map', 'goog.style', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.PopupBase', 'goog.userAgent'], false); goog.addDependency('ui/popupmenu_test.js', ['goog.ui.PopupMenuTest'], ['goog.dom', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.math.Box', 'goog.math.Coordinate', 'goog.positioning.Corner', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.PopupMenu'], false); goog.addDependency('ui/progressbar.js', ['goog.ui.ProgressBar', 'goog.ui.ProgressBar.Orientation'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.ui.Component', 'goog.ui.RangeModel', 'goog.userAgent'], false); goog.addDependency('ui/prompt.js', ['goog.ui.Prompt'], ['goog.Timer', 'goog.dom', 'goog.dom.InputType', 'goog.dom.TagName', 'goog.events', 'goog.events.EventType', 'goog.functions', 'goog.html.SafeHtml', 'goog.html.legacyconversions', 'goog.ui.Component', 'goog.ui.Dialog', 'goog.userAgent'], false); goog.addDependency('ui/prompt_test.js', ['goog.ui.PromptTest'], ['goog.dom.selection', 'goog.events.InputHandler', 'goog.events.KeyCodes', 'goog.functions', 'goog.string', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.BidiInput', 'goog.ui.Dialog', 'goog.ui.Prompt', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('ui/rangemodel.js', ['goog.ui.RangeModel'], ['goog.events.EventTarget', 'goog.ui.Component'], false); goog.addDependency('ui/rangemodel_test.js', ['goog.ui.RangeModelTest'], ['goog.testing.jsunit', 'goog.ui.RangeModel'], false); goog.addDependency('ui/ratings.js', ['goog.ui.Ratings', 'goog.ui.Ratings.EventType'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.ui.Component'], false); goog.addDependency('ui/registry.js', ['goog.ui.registry'], ['goog.asserts', 'goog.dom.classlist'], false); goog.addDependency('ui/registry_test.js', ['goog.ui.registryTest'], ['goog.object', 'goog.testing.jsunit', 'goog.ui.registry'], false); goog.addDependency('ui/richtextspellchecker.js', ['goog.ui.RichTextSpellChecker'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.NodeType', 'goog.dom.Range', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.math.Coordinate', 'goog.spell.SpellCheck', 'goog.string.StringBuffer', 'goog.style', 'goog.ui.AbstractSpellChecker', 'goog.ui.Component', 'goog.ui.PopupMenu'], false); goog.addDependency('ui/richtextspellchecker_test.js', ['goog.ui.RichTextSpellCheckerTest'], ['goog.dom.Range', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.object', 'goog.spell.SpellCheck', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.RichTextSpellChecker'], false); goog.addDependency('ui/roundedpanel.js', ['goog.ui.BaseRoundedPanel', 'goog.ui.CssRoundedPanel', 'goog.ui.GraphicsRoundedPanel', 'goog.ui.RoundedPanel', 'goog.ui.RoundedPanel.Corner'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.graphics', 'goog.graphics.Path', 'goog.graphics.SolidFill', 'goog.graphics.Stroke', 'goog.math', 'goog.math.Coordinate', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false); goog.addDependency('ui/roundedpanel_test.js', ['goog.ui.RoundedPanelTest'], ['goog.testing.jsunit', 'goog.ui.CssRoundedPanel', 'goog.ui.GraphicsRoundedPanel', 'goog.ui.RoundedPanel', 'goog.userAgent'], false); goog.addDependency('ui/roundedtabrenderer.js', ['goog.ui.RoundedTabRenderer'], ['goog.dom', 'goog.dom.TagName', 'goog.ui.Tab', 'goog.ui.TabBar', 'goog.ui.TabRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/scrollfloater.js', ['goog.ui.ScrollFloater', 'goog.ui.ScrollFloater.EventType'], ['goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false); goog.addDependency('ui/scrollfloater_test.js', ['goog.ui.ScrollFloaterTest'], ['goog.dom', 'goog.events', 'goog.style', 'goog.testing.jsunit', 'goog.ui.ScrollFloater'], false); goog.addDependency('ui/select.js', ['goog.ui.Select'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.events.EventType', 'goog.ui.Component', 'goog.ui.IdGenerator', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.MenuRenderer', 'goog.ui.SelectionModel', 'goog.ui.registry'], false); goog.addDependency('ui/select_test.js', ['goog.ui.SelectTest'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.CustomButtonRenderer', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.Select', 'goog.ui.Separator'], false); goog.addDependency('ui/selectionmenubutton.js', ['goog.ui.SelectionMenuButton', 'goog.ui.SelectionMenuButton.SelectionState'], ['goog.dom.InputType', 'goog.dom.TagName', 'goog.events.EventType', 'goog.style', 'goog.ui.Component', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.registry'], false); goog.addDependency('ui/selectionmenubutton_test.js', ['goog.ui.SelectionMenuButtonTest'], ['goog.dom', 'goog.events', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.SelectionMenuButton'], false); goog.addDependency('ui/selectionmodel.js', ['goog.ui.SelectionModel'], ['goog.array', 'goog.events.EventTarget', 'goog.events.EventType'], false); goog.addDependency('ui/selectionmodel_test.js', ['goog.ui.SelectionModelTest'], ['goog.array', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.SelectionModel'], false); goog.addDependency('ui/separator.js', ['goog.ui.Separator'], ['goog.a11y.aria', 'goog.asserts', 'goog.ui.Component', 'goog.ui.Control', 'goog.ui.MenuSeparatorRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/serverchart.js', ['goog.ui.ServerChart', 'goog.ui.ServerChart.AxisDisplayType', 'goog.ui.ServerChart.ChartType', 'goog.ui.ServerChart.EncodingType', 'goog.ui.ServerChart.Event', 'goog.ui.ServerChart.LegendPosition', 'goog.ui.ServerChart.MaximumValue', 'goog.ui.ServerChart.MultiAxisAlignment', 'goog.ui.ServerChart.MultiAxisType', 'goog.ui.ServerChart.UriParam', 'goog.ui.ServerChart.UriTooLongEvent'], ['goog.Uri', 'goog.array', 'goog.asserts', 'goog.dom.TagName', 'goog.events.Event', 'goog.string', 'goog.ui.Component'], false); goog.addDependency('ui/serverchart_test.js', ['goog.ui.ServerChartTest'], ['goog.Uri', 'goog.events', 'goog.testing.jsunit', 'goog.ui.ServerChart'], false); goog.addDependency('ui/slider.js', ['goog.ui.Slider', 'goog.ui.Slider.Orientation'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.dom.TagName', 'goog.ui.SliderBase'], false); goog.addDependency('ui/sliderbase.js', ['goog.ui.SliderBase', 'goog.ui.SliderBase.AnimationFactory', 'goog.ui.SliderBase.Orientation'], ['goog.Timer', 'goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.events.MouseWheelHandler', 'goog.functions', 'goog.fx.AnimationParallelQueue', 'goog.fx.Dragger', 'goog.fx.Transition', 'goog.fx.dom.ResizeHeight', 'goog.fx.dom.ResizeWidth', 'goog.fx.dom.Slide', 'goog.math', 'goog.math.Coordinate', 'goog.style', 'goog.style.bidi', 'goog.ui.Component', 'goog.ui.RangeModel'], false); goog.addDependency('ui/sliderbase_test.js', ['goog.ui.SliderBaseTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.fx.Animation', 'goog.math.Coordinate', 'goog.style', 'goog.style.bidi', 'goog.testing.MockClock', 'goog.testing.MockControl', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.mockmatchers', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.SliderBase', 'goog.userAgent'], false); goog.addDependency('ui/splitbehavior.js', ['goog.ui.SplitBehavior', 'goog.ui.SplitBehavior.DefaultHandlers'], ['goog.Disposable', 'goog.asserts', 'goog.dispose', 'goog.dom.NodeType', 'goog.dom.classlist', 'goog.events.EventHandler', 'goog.ui.ButtonSide', 'goog.ui.Component', 'goog.ui.decorate', 'goog.ui.registry'], false); goog.addDependency('ui/splitbehavior_test.js', ['goog.ui.SplitBehaviorTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.events.Event', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.CustomButton', 'goog.ui.Menu', 'goog.ui.MenuButton', 'goog.ui.MenuItem', 'goog.ui.SplitBehavior', 'goog.ui.decorate'], false); goog.addDependency('ui/splitpane.js', ['goog.ui.SplitPane', 'goog.ui.SplitPane.Orientation'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.fx.Dragger', 'goog.math.Rect', 'goog.math.Size', 'goog.style', 'goog.ui.Component', 'goog.userAgent'], false); goog.addDependency('ui/splitpane_test.js', ['goog.ui.SplitPaneTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.math.Size', 'goog.style', 'goog.testing.events', 'goog.testing.jsunit', 'goog.testing.recordFunction', 'goog.ui.Component', 'goog.ui.SplitPane'], false); goog.addDependency('ui/style/app/buttonrenderer.js', ['goog.ui.style.app.ButtonRenderer'], ['goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.Button', 'goog.ui.CustomButtonRenderer', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.registry'], false); goog.addDependency('ui/style/app/buttonrenderer_test.js', ['goog.ui.style.app.ButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.style.app.ButtonRenderer', 'goog.userAgent'], false); goog.addDependency('ui/style/app/menubuttonrenderer.js', ['goog.ui.style.app.MenuButtonRenderer'], ['goog.a11y.aria.Role', 'goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.style', 'goog.ui.Menu', 'goog.ui.MenuRenderer', 'goog.ui.style.app.ButtonRenderer'], false); goog.addDependency('ui/style/app/menubuttonrenderer_test.js', ['goog.ui.style.app.MenuButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style', 'goog.ui.Component', 'goog.ui.MenuButton', 'goog.ui.style.app.MenuButtonRenderer'], false); goog.addDependency('ui/style/app/primaryactionbuttonrenderer.js', ['goog.ui.style.app.PrimaryActionButtonRenderer'], ['goog.ui.Button', 'goog.ui.registry', 'goog.ui.style.app.ButtonRenderer'], false); goog.addDependency('ui/style/app/primaryactionbuttonrenderer_test.js', ['goog.ui.style.app.PrimaryActionButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.style', 'goog.ui.Button', 'goog.ui.Component', 'goog.ui.style.app.PrimaryActionButtonRenderer'], false); goog.addDependency('ui/submenu.js', ['goog.ui.SubMenu'], ['goog.Timer', 'goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.KeyCodes', 'goog.positioning.AnchoredViewportPosition', 'goog.positioning.Corner', 'goog.style', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.SubMenuRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/submenu_test.js', ['goog.ui.SubMenuTest'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.events.KeyHandler', 'goog.functions', 'goog.positioning', 'goog.positioning.Overflow', 'goog.style', 'goog.testing.MockClock', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Menu', 'goog.ui.MenuItem', 'goog.ui.SubMenu', 'goog.ui.SubMenuRenderer'], false); goog.addDependency('ui/submenurenderer.js', ['goog.ui.SubMenuRenderer'], ['goog.a11y.aria', 'goog.a11y.aria.State', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.style', 'goog.ui.Menu', 'goog.ui.MenuItemRenderer'], false); goog.addDependency('ui/tab.js', ['goog.ui.Tab'], ['goog.ui.Component', 'goog.ui.Control', 'goog.ui.TabRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/tab_test.js', ['goog.ui.TabTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Tab', 'goog.ui.TabRenderer'], false); goog.addDependency('ui/tabbar.js', ['goog.ui.TabBar', 'goog.ui.TabBar.Location'], ['goog.ui.Component.EventType', 'goog.ui.Container', 'goog.ui.Container.Orientation', 'goog.ui.Tab', 'goog.ui.TabBarRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/tabbar_test.js', ['goog.ui.TabBarTest'], ['goog.dom', 'goog.events', 'goog.events.Event', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.Container', 'goog.ui.Tab', 'goog.ui.TabBar', 'goog.ui.TabBarRenderer'], false); goog.addDependency('ui/tabbarrenderer.js', ['goog.ui.TabBarRenderer'], ['goog.a11y.aria.Role', 'goog.object', 'goog.ui.ContainerRenderer'], false); goog.addDependency('ui/tabbarrenderer_test.js', ['goog.ui.TabBarRendererTest'], ['goog.a11y.aria.Role', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Container', 'goog.ui.TabBar', 'goog.ui.TabBarRenderer'], false); goog.addDependency('ui/tablesorter.js', ['goog.ui.TableSorter', 'goog.ui.TableSorter.EventType'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events.EventType', 'goog.functions', 'goog.ui.Component'], false); goog.addDependency('ui/tablesorter_test.js', ['goog.ui.TableSorterTest'], ['goog.array', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.TableSorter'], false); goog.addDependency('ui/tabpane.js', ['goog.ui.TabPane', 'goog.ui.TabPane.Events', 'goog.ui.TabPane.TabLocation', 'goog.ui.TabPane.TabPage', 'goog.ui.TabPaneEvent'], ['goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.events.Event', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style'], false); goog.addDependency('ui/tabpane_test.js', ['goog.ui.TabPaneTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.TabPane'], false); goog.addDependency('ui/tabrenderer.js', ['goog.ui.TabRenderer'], ['goog.a11y.aria.Role', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false); goog.addDependency('ui/tabrenderer_test.js', ['goog.ui.TabRendererTest'], ['goog.a11y.aria.Role', 'goog.dom', 'goog.dom.classlist', 'goog.testing.dom', 'goog.testing.jsunit', 'goog.testing.ui.rendererasserts', 'goog.ui.Tab', 'goog.ui.TabRenderer'], false); goog.addDependency('ui/textarea.js', ['goog.ui.Textarea', 'goog.ui.Textarea.EventType'], ['goog.asserts', 'goog.dom', 'goog.dom.classlist', 'goog.events.EventType', 'goog.style', 'goog.ui.Control', 'goog.ui.TextareaRenderer', 'goog.userAgent'], false); goog.addDependency('ui/textarea_test.js', ['goog.ui.TextareaTest'], ['goog.dom', 'goog.dom.classlist', 'goog.events', 'goog.style', 'goog.testing.ExpectedFailures', 'goog.testing.events.EventObserver', 'goog.testing.jsunit', 'goog.ui.Textarea', 'goog.ui.TextareaRenderer', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('ui/textarearenderer.js', ['goog.ui.TextareaRenderer'], ['goog.dom.TagName', 'goog.ui.Component', 'goog.ui.ControlRenderer'], false); goog.addDependency('ui/togglebutton.js', ['goog.ui.ToggleButton'], ['goog.ui.Button', 'goog.ui.Component', 'goog.ui.CustomButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/toolbar.js', ['goog.ui.Toolbar'], ['goog.ui.Container', 'goog.ui.ToolbarRenderer'], false); goog.addDependency('ui/toolbar_test.js', ['goog.ui.ToolbarTest'], ['goog.a11y.aria', 'goog.dom', 'goog.events.EventType', 'goog.testing.events', 'goog.testing.events.Event', 'goog.testing.jsunit', 'goog.ui.Toolbar', 'goog.ui.ToolbarMenuButton'], false); goog.addDependency('ui/toolbarbutton.js', ['goog.ui.ToolbarButton'], ['goog.ui.Button', 'goog.ui.ToolbarButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/toolbarbuttonrenderer.js', ['goog.ui.ToolbarButtonRenderer'], ['goog.ui.CustomButtonRenderer'], false); goog.addDependency('ui/toolbarcolormenubutton.js', ['goog.ui.ToolbarColorMenuButton'], ['goog.ui.ColorMenuButton', 'goog.ui.ToolbarColorMenuButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/toolbarcolormenubuttonrenderer.js', ['goog.ui.ToolbarColorMenuButtonRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.ui.ColorMenuButtonRenderer', 'goog.ui.MenuButtonRenderer', 'goog.ui.ToolbarMenuButtonRenderer'], false); goog.addDependency('ui/toolbarcolormenubuttonrenderer_test.js', ['goog.ui.ToolbarColorMenuButtonRendererTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.testing.ui.RendererHarness', 'goog.testing.ui.rendererasserts', 'goog.ui.ToolbarColorMenuButton', 'goog.ui.ToolbarColorMenuButtonRenderer'], false); goog.addDependency('ui/toolbarmenubutton.js', ['goog.ui.ToolbarMenuButton'], ['goog.ui.MenuButton', 'goog.ui.ToolbarMenuButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/toolbarmenubuttonrenderer.js', ['goog.ui.ToolbarMenuButtonRenderer'], ['goog.ui.MenuButtonRenderer'], false); goog.addDependency('ui/toolbarrenderer.js', ['goog.ui.ToolbarRenderer'], ['goog.a11y.aria.Role', 'goog.dom.TagName', 'goog.ui.Container', 'goog.ui.ContainerRenderer', 'goog.ui.Separator', 'goog.ui.ToolbarSeparatorRenderer'], false); goog.addDependency('ui/toolbarselect.js', ['goog.ui.ToolbarSelect'], ['goog.ui.Select', 'goog.ui.ToolbarMenuButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/toolbarseparator.js', ['goog.ui.ToolbarSeparator'], ['goog.ui.Separator', 'goog.ui.ToolbarSeparatorRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/toolbarseparatorrenderer.js', ['goog.ui.ToolbarSeparatorRenderer'], ['goog.asserts', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.MenuSeparatorRenderer'], false); goog.addDependency('ui/toolbarseparatorrenderer_test.js', ['goog.ui.ToolbarSeparatorRendererTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.INLINE_BLOCK_CLASSNAME', 'goog.ui.ToolbarSeparator', 'goog.ui.ToolbarSeparatorRenderer'], false); goog.addDependency('ui/toolbartogglebutton.js', ['goog.ui.ToolbarToggleButton'], ['goog.ui.ToggleButton', 'goog.ui.ToolbarButtonRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/tooltip.js', ['goog.ui.Tooltip', 'goog.ui.Tooltip.CursorTooltipPosition', 'goog.ui.Tooltip.ElementTooltipPosition', 'goog.ui.Tooltip.State'], ['goog.Timer', 'goog.array', 'goog.asserts', 'goog.dom', 'goog.dom.TagName', 'goog.dom.safe', 'goog.events', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.html.legacyconversions', 'goog.math.Box', 'goog.math.Coordinate', 'goog.positioning', 'goog.positioning.AnchoredPosition', 'goog.positioning.Corner', 'goog.positioning.Overflow', 'goog.positioning.OverflowStatus', 'goog.positioning.ViewportPosition', 'goog.structs.Set', 'goog.style', 'goog.ui.Popup', 'goog.ui.PopupBase'], false); goog.addDependency('ui/tooltip_test.js', ['goog.ui.TooltipTest'], ['goog.dom', 'goog.dom.TagName', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.html.testing', 'goog.math.Coordinate', 'goog.positioning.AbsolutePosition', 'goog.style', 'goog.testing.MockClock', 'goog.testing.PropertyReplacer', 'goog.testing.TestQueue', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.PopupBase', 'goog.ui.Tooltip', 'goog.userAgent'], false); goog.addDependency('ui/tree/basenode.js', ['goog.ui.tree.BaseNode', 'goog.ui.tree.BaseNode.EventType'], ['goog.Timer', 'goog.a11y.aria', 'goog.asserts', 'goog.dom.safe', 'goog.events.Event', 'goog.events.KeyCodes', 'goog.html.SafeHtml', 'goog.html.SafeStyle', 'goog.html.legacyconversions', 'goog.string', 'goog.string.StringBuffer', 'goog.style', 'goog.ui.Component'], false); goog.addDependency('ui/tree/basenode_test.js', ['goog.ui.tree.BaseNodeTest'], ['goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.html.legacyconversions', 'goog.html.testing', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.ui.Component', 'goog.ui.tree.BaseNode', 'goog.ui.tree.TreeControl', 'goog.ui.tree.TreeNode'], false); goog.addDependency('ui/tree/treecontrol.js', ['goog.ui.tree.TreeControl'], ['goog.a11y.aria', 'goog.asserts', 'goog.dom.classlist', 'goog.events.EventType', 'goog.events.FocusHandler', 'goog.events.KeyHandler', 'goog.html.SafeHtml', 'goog.log', 'goog.ui.tree.BaseNode', 'goog.ui.tree.TreeNode', 'goog.ui.tree.TypeAhead', 'goog.userAgent'], false); goog.addDependency('ui/tree/treecontrol_test.js', ['goog.ui.tree.TreeControlTest'], ['goog.dom', 'goog.testing.jsunit', 'goog.ui.tree.TreeControl'], false); goog.addDependency('ui/tree/treenode.js', ['goog.ui.tree.TreeNode'], ['goog.ui.tree.BaseNode'], false); goog.addDependency('ui/tree/typeahead.js', ['goog.ui.tree.TypeAhead', 'goog.ui.tree.TypeAhead.Offset'], ['goog.array', 'goog.events.KeyCodes', 'goog.string', 'goog.structs.Trie'], false); goog.addDependency('ui/tree/typeahead_test.js', ['goog.ui.tree.TypeAheadTest'], ['goog.dom', 'goog.events.KeyCodes', 'goog.testing.jsunit', 'goog.ui.tree.TreeControl', 'goog.ui.tree.TypeAhead'], false); goog.addDependency('ui/tristatemenuitem.js', ['goog.ui.TriStateMenuItem', 'goog.ui.TriStateMenuItem.State'], ['goog.dom.classlist', 'goog.ui.Component', 'goog.ui.MenuItem', 'goog.ui.TriStateMenuItemRenderer', 'goog.ui.registry'], false); goog.addDependency('ui/tristatemenuitemrenderer.js', ['goog.ui.TriStateMenuItemRenderer'], ['goog.asserts', 'goog.dom.classlist', 'goog.ui.MenuItemRenderer'], false); goog.addDependency('ui/twothumbslider.js', ['goog.ui.TwoThumbSlider'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.dom', 'goog.dom.TagName', 'goog.ui.SliderBase'], false); goog.addDependency('ui/twothumbslider_test.js', ['goog.ui.TwoThumbSliderTest'], ['goog.testing.jsunit', 'goog.ui.SliderBase', 'goog.ui.TwoThumbSlider'], false); goog.addDependency('ui/zippy.js', ['goog.ui.Zippy', 'goog.ui.Zippy.Events', 'goog.ui.ZippyEvent'], ['goog.a11y.aria', 'goog.a11y.aria.Role', 'goog.a11y.aria.State', 'goog.dom', 'goog.dom.classlist', 'goog.events.Event', 'goog.events.EventHandler', 'goog.events.EventTarget', 'goog.events.EventType', 'goog.events.KeyCodes', 'goog.style'], false); goog.addDependency('ui/zippy_test.js', ['goog.ui.ZippyTest'], ['goog.a11y.aria', 'goog.dom', 'goog.dom.TagName', 'goog.dom.classlist', 'goog.events', 'goog.object', 'goog.testing.events', 'goog.testing.jsunit', 'goog.ui.Zippy'], false); goog.addDependency('uri/uri.js', ['goog.Uri', 'goog.Uri.QueryData'], ['goog.array', 'goog.string', 'goog.structs', 'goog.structs.Map', 'goog.uri.utils', 'goog.uri.utils.ComponentIndex', 'goog.uri.utils.StandardQueryParam'], false); goog.addDependency('uri/uri_test.js', ['goog.UriTest'], ['goog.Uri', 'goog.testing.jsunit'], false); goog.addDependency('uri/utils.js', ['goog.uri.utils', 'goog.uri.utils.ComponentIndex', 'goog.uri.utils.QueryArray', 'goog.uri.utils.QueryValue', 'goog.uri.utils.StandardQueryParam'], ['goog.asserts', 'goog.string'], false); goog.addDependency('uri/utils_test.js', ['goog.uri.utilsTest'], ['goog.functions', 'goog.string', 'goog.testing.jsunit', 'goog.uri.utils'], false); goog.addDependency('useragent/adobereader.js', ['goog.userAgent.adobeReader'], ['goog.string', 'goog.userAgent'], false); goog.addDependency('useragent/adobereader_test.js', ['goog.userAgent.adobeReaderTest'], ['goog.testing.jsunit', 'goog.userAgent.adobeReader'], false); goog.addDependency('useragent/flash.js', ['goog.userAgent.flash'], ['goog.string'], false); goog.addDependency('useragent/flash_test.js', ['goog.userAgent.flashTest'], ['goog.testing.jsunit', 'goog.userAgent.flash'], false); goog.addDependency('useragent/iphoto.js', ['goog.userAgent.iphoto'], ['goog.string', 'goog.userAgent'], false); goog.addDependency('useragent/jscript.js', ['goog.userAgent.jscript'], ['goog.string'], false); goog.addDependency('useragent/jscript_test.js', ['goog.userAgent.jscriptTest'], ['goog.testing.jsunit', 'goog.userAgent.jscript'], false); goog.addDependency('useragent/keyboard.js', ['goog.userAgent.keyboard'], ['goog.labs.userAgent.platform'], false); goog.addDependency('useragent/keyboard_test.js', ['goog.userAgent.keyboardTest'], ['goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent.keyboard', 'goog.userAgentTestUtil'], false); goog.addDependency('useragent/platform.js', ['goog.userAgent.platform'], ['goog.string', 'goog.userAgent'], false); goog.addDependency('useragent/platform_test.js', ['goog.userAgent.platformTest'], ['goog.testing.MockUserAgent', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.platform', 'goog.userAgentTestUtil'], false); goog.addDependency('useragent/product.js', ['goog.userAgent.product'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.platform', 'goog.userAgent'], false); goog.addDependency('useragent/product_isversion.js', ['goog.userAgent.product.isVersion'], ['goog.labs.userAgent.platform', 'goog.string', 'goog.userAgent', 'goog.userAgent.product'], false); goog.addDependency('useragent/product_test.js', ['goog.userAgent.productTest'], ['goog.array', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.MockUserAgent', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgent.product', 'goog.userAgent.product.isVersion', 'goog.userAgentTestUtil'], false); goog.addDependency('useragent/useragent.js', ['goog.userAgent'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.engine', 'goog.labs.userAgent.platform', 'goog.labs.userAgent.util', 'goog.string'], false); goog.addDependency('useragent/useragent_quirks_test.js', ['goog.userAgentQuirksTest'], ['goog.testing.jsunit', 'goog.userAgent'], false); goog.addDependency('useragent/useragent_test.js', ['goog.userAgentTest'], ['goog.array', 'goog.labs.userAgent.platform', 'goog.labs.userAgent.testAgents', 'goog.labs.userAgent.util', 'goog.testing.PropertyReplacer', 'goog.testing.jsunit', 'goog.userAgent', 'goog.userAgentTestUtil'], false); goog.addDependency('useragent/useragenttestutil.js', ['goog.userAgentTestUtil', 'goog.userAgentTestUtil.UserAgents'], ['goog.labs.userAgent.browser', 'goog.labs.userAgent.engine', 'goog.labs.userAgent.platform', 'goog.userAgent', 'goog.userAgent.keyboard', 'goog.userAgent.platform', 'goog.userAgent.product', 'goog.userAgent.product.isVersion'], false); goog.addDependency('vec/float32array.js', ['goog.vec.Float32Array'], [], false); goog.addDependency('vec/float64array.js', ['goog.vec.Float64Array'], [], false); goog.addDependency('vec/mat3.js', ['goog.vec.Mat3'], ['goog.vec'], false); goog.addDependency('vec/mat3d.js', ['goog.vec.mat3d', 'goog.vec.mat3d.Type'], ['goog.vec'], false); goog.addDependency('vec/mat3f.js', ['goog.vec.mat3f', 'goog.vec.mat3f.Type'], ['goog.vec'], false); goog.addDependency('vec/mat4.js', ['goog.vec.Mat4'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false); goog.addDependency('vec/mat4d.js', ['goog.vec.mat4d', 'goog.vec.mat4d.Type'], ['goog.vec', 'goog.vec.vec3d', 'goog.vec.vec4d'], false); goog.addDependency('vec/mat4f.js', ['goog.vec.mat4f', 'goog.vec.mat4f.Type'], ['goog.vec', 'goog.vec.vec3f', 'goog.vec.vec4f'], false); goog.addDependency('vec/matrix3.js', ['goog.vec.Matrix3'], [], false); goog.addDependency('vec/matrix4.js', ['goog.vec.Matrix4'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false); goog.addDependency('vec/quaternion.js', ['goog.vec.Quaternion'], ['goog.vec', 'goog.vec.Vec3', 'goog.vec.Vec4'], false); goog.addDependency('vec/ray.js', ['goog.vec.Ray'], ['goog.vec.Vec3'], false); goog.addDependency('vec/vec.js', ['goog.vec', 'goog.vec.AnyType', 'goog.vec.ArrayType', 'goog.vec.Float32', 'goog.vec.Float64', 'goog.vec.Number'], ['goog.vec.Float32Array', 'goog.vec.Float64Array'], false); goog.addDependency('vec/vec2.js', ['goog.vec.Vec2'], ['goog.vec'], false); goog.addDependency('vec/vec2d.js', ['goog.vec.vec2d', 'goog.vec.vec2d.Type'], ['goog.vec'], false); goog.addDependency('vec/vec2f.js', ['goog.vec.vec2f', 'goog.vec.vec2f.Type'], ['goog.vec'], false); goog.addDependency('vec/vec3.js', ['goog.vec.Vec3'], ['goog.vec'], false); goog.addDependency('vec/vec3d.js', ['goog.vec.vec3d', 'goog.vec.vec3d.Type'], ['goog.vec'], false); goog.addDependency('vec/vec3f.js', ['goog.vec.vec3f', 'goog.vec.vec3f.Type'], ['goog.vec'], false); goog.addDependency('vec/vec4.js', ['goog.vec.Vec4'], ['goog.vec'], false); goog.addDependency('vec/vec4d.js', ['goog.vec.vec4d', 'goog.vec.vec4d.Type'], ['goog.vec'], false); goog.addDependency('vec/vec4f.js', ['goog.vec.vec4f', 'goog.vec.vec4f.Type'], ['goog.vec'], false); goog.addDependency('webgl/webgl.js', ['goog.webgl'], [], false); goog.addDependency('window/window.js', ['goog.window'], ['goog.dom.TagName', 'goog.dom.safe', 'goog.html.SafeUrl', 'goog.html.uncheckedconversions', 'goog.labs.userAgent.platform', 'goog.string', 'goog.string.Const', 'goog.userAgent'], false); goog.addDependency('window/window_test.js', ['goog.windowTest'], ['goog.Promise', 'goog.dom', 'goog.dom.TagName', 'goog.events', 'goog.functions', 'goog.labs.userAgent.browser', 'goog.labs.userAgent.engine', 'goog.labs.userAgent.platform', 'goog.string', 'goog.testing.PropertyReplacer', 'goog.testing.TestCase', 'goog.testing.jsunit', 'goog.window'], false); ================================================ FILE: libs/openlayers3/ol.css ================================================ .ol-control,.ol-scale-line{position:absolute;padding:2px}.ol-box{box-sizing:border-box;border-radius:2px;border:2px solid #00f}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:#95b9e6;background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width}.ol-overlay-container{will-change:left,right,top,bottom}.ol-unsupported{display:none}.ol-viewport .ol-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ol-control{background-color:#eee;background-color:rgba(255,255,255,.4);border-radius:4px}.ol-control:hover{background-color:rgba(255,255,255,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}@media print{.ol-control{display:none}}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:#7b98bc;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:#4c6079;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;font-size:.7rem;line-height:1.375em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none;line-height:inherit}.ol-attribution li:not(:last-child):after{content:" "}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution.ol-logo-only ul{display:block}.ol-attribution:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0;height:1.1em;line-height:1em}.ol-attribution.ol-logo-only{background:0 0;bottom:.4em;height:1.1em;line-height:1em}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-logo-only button,.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:rgba(255,255,255,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)} ================================================ FILE: libs/openlayers3/ol.js ================================================ // OpenLayers 3. See http://openlayers.org/ // License: https://raw.githubusercontent.com/openlayers/ol3/master/LICENSE.md // Version: v3.11.2 (function (root, factory) { if (typeof exports === "object") { module.exports = factory(); } else if (typeof define === "function" && define.amd) { define([], factory); } else { root.ol = factory(); } }(this, function () { var OPENLAYERS = {}; var l,aa=aa||{},ba=this;function ca(b){return void 0!==b}function u(b,c,d){b=b.split(".");d=d||ba;b[0]in d||!d.execScript||d.execScript("var "+b[0]);for(var e;b.length&&(e=b.shift());)!b.length&&ca(c)?d[e]=c:d[e]?d=d[e]:d=d[e]={}}function da(){}function ea(b){b.Yb=function(){return b.Ng?b.Ng:b.Ng=new b}} function fa(b){var c=typeof b;if("object"==c)if(b){if(b instanceof Array)return"array";if(b instanceof Object)return c;var d=Object.prototype.toString.call(b);if("[object Window]"==d)return"object";if("[object Array]"==d||"number"==typeof b.length&&"undefined"!=typeof b.splice&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("splice"))return"array";if("[object Function]"==d||"undefined"!=typeof b.call&&"undefined"!=typeof b.propertyIsEnumerable&&!b.propertyIsEnumerable("call"))return"function"}else return"null"; else if("function"==c&&"undefined"==typeof b.call)return"object";return c}function ga(b){return"array"==fa(b)}function ha(b){var c=fa(b);return"array"==c||"object"==c&&"number"==typeof b.length}function ia(b){return"string"==typeof b}function ja(b){return"number"==typeof b}function ka(b){return"function"==fa(b)}function ma(b){var c=typeof b;return"object"==c&&null!=b||"function"==c}function w(b){return b[na]||(b[na]=++oa)}var na="closure_uid_"+(1E9*Math.random()>>>0),oa=0; function pa(b,c,d){return b.call.apply(b.bind,arguments)}function qa(b,c,d){if(!b)throw Error();if(2")&&(b=b.replace(Ia,">"));-1!=b.indexOf('"')&&(b=b.replace(Ja,"""));-1!=b.indexOf("'")&&(b=b.replace(La,"'"));-1!=b.indexOf("\x00")&&(b=b.replace(Ma,"�"));return b}var Ga=/&/g,Ha=//g,Ja=/"/g,La=/'/g,Ma=/\x00/g,Fa=/[\x00&<>"']/,Na=String.prototype.repeat?function(b,c){return b.repeat(c)}:function(b,c){return Array(c+1).join(b)}; function Oa(b){b=ca(void 0)?b.toFixed(void 0):String(b);var c=b.indexOf(".");-1==c&&(c=b.length);return Na("0",Math.max(0,2-c))+b} function Pa(b,c){for(var d=0,e=Ca(String(b)).split("."),f=Ca(String(c)).split("."),g=Math.max(e.length,f.length),h=0;0==d&&hc?1:0};function Sa(b,c,d){return Math.min(Math.max(b,c),d)}var Ta=function(){var b;"cosh"in Math?b=Math.cosh:b=function(b){b=Math.exp(b);return(b+1/b)/2};return b}();function Ua(b,c,d,e,f,g){var h=f-d,k=g-e;if(0!==h||0!==k){var m=((b-d)*h+(c-e)*k)/(h*h+k*k);1d?null:ia(b)?b.charAt(d):b[d]}function gb(b,c,d){for(var e=b.length,f=ia(b)?b.split(""):b,g=0;g=arguments.length?Za.slice.call(b,c):Za.slice.call(b,c,d)}function ob(b,c){b.sort(c||pb)}function qb(b){for(var c=rb,d=0;dc?1:bd)for(d=1;dg?1:.5))+f,0),void 0!==d&&(e=Math.min(e,d)),c/Math.pow(b,e)}};function zb(b){if(void 0!==b)return 0}function Ab(b,c){if(void 0!==b)return b+c}function Bb(b){var c=2*Math.PI/b;return function(b,e){if(void 0!==b)return b=Math.floor((b+e)/c+.5)*c}}function Cb(){var b=Wa(5);return function(c,d){if(void 0!==c)return Math.abs(c+d)<=b?0:c+d}};function Db(b,c,d){this.center=b;this.resolution=c;this.rotation=d};var Eb;a:{var Fb=ba.navigator;if(Fb){var Gb=Fb.userAgent;if(Gb){Eb=Gb;break a}}Eb=""}function Hb(b){return-1!=Eb.indexOf(b)};function Ib(b,c,d){for(var e in b)c.call(d,b[e],e,b)}function Jb(b,c){for(var d in b)if(c.call(void 0,b[d],d,b))return!0;return!1}function Kb(b){var c=0,d;for(d in b)c++;return c}function Lb(b){var c=[],d=0,e;for(e in b)c[d++]=b[e];return c}function Mb(b){var c=[],d=0,e;for(e in b)c[d++]=e;return c}function Nb(b,c){return c in b}function Ob(b,c){for(var d in b)if(b[d]==c)return!0;return!1}function Pb(b,c){for(var d in b)if(c.call(void 0,b[d],d,b))return d} function Qb(b){for(var c in b)return!1;return!0}function Rb(b){for(var c in b)delete b[c]}function Sb(b,c,d){return c in b?b[c]:d}function Tb(b,c){var d=[];return c in b?b[c]:b[c]=d}function Ub(b){var c={},d;for(d in b)c[d]=b[d];return c}function Vb(b){var c=fa(b);if("object"==c||"array"==c){if(ka(b.clone))return b.clone();var c="array"==c?[]:{},d;for(d in b)c[d]=Vb(b[d]);return c}return b}var Wb="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" "); function Xb(b,c){for(var d,e,f=1;fparseFloat(b))?String(c):b}(),ic={};function jc(b){return ic[b]||(ic[b]=0<=Pa(hc,b))}var kc=ba.document,lc=kc&&Zb?gc()||("CSS1Compat"==kc.compatMode?parseInt(hc,10):5):void 0;var mc=!Zb||9<=lc,nc=!Zb||9<=lc,oc=Zb&&!jc("9");!bc||jc("528");ac&&jc("1.9b")||Zb&&jc("8")||Yb&&jc("9.5")||bc&&jc("528");ac&&!jc("8")||Zb&&jc("9");function pc(){0!=qc&&(rc[w(this)]=this);this.ia=this.ia;this.oa=this.oa}var qc=0,rc={};pc.prototype.ia=!1;pc.prototype.Ec=function(){if(!this.ia&&(this.ia=!0,this.X(),0!=qc)){var b=w(this);delete rc[b]}};function tc(b,c){var d=sa(uc,c);b.ia?d.call(void 0):(b.oa||(b.oa=[]),b.oa.push(ca(void 0)?ra(d,void 0):d))}pc.prototype.X=function(){if(this.oa)for(;this.oa.length;)this.oa.shift()()};function uc(b){b&&"function"==typeof b.Ec&&b.Ec()};function vc(b,c){this.type=b;this.g=this.target=c;this.i=!1;this.Qh=!0}vc.prototype.b=function(){this.i=!0};vc.prototype.preventDefault=function(){this.Qh=!1};function wc(b){b.b()}function xc(b){b.preventDefault()};var yc=Zb?"focusout":"DOMFocusOut";function zc(b){zc[" "](b);return b}zc[" "]=da;function Ac(b,c){vc.call(this,b?b.type:"");this.relatedTarget=this.g=this.target=null;this.u=this.j=this.button=this.screenY=this.screenX=this.clientY=this.clientX=this.offsetY=this.offsetX=0;this.A=this.f=this.c=this.B=!1;this.state=null;this.l=!1;this.a=null;if(b){var d=this.type=b.type,e=b.changedTouches?b.changedTouches[0]:null;this.target=b.target||b.srcElement;this.g=c;var f=b.relatedTarget;if(f){if(ac){var g;a:{try{zc(f.nodeName);g=!0;break a}catch(h){}g=!1}g||(f=null)}}else"mouseover"==d? f=b.fromElement:"mouseout"==d&&(f=b.toElement);this.relatedTarget=f;null===e?(this.offsetX=bc||void 0!==b.offsetX?b.offsetX:b.layerX,this.offsetY=bc||void 0!==b.offsetY?b.offsetY:b.layerY,this.clientX=void 0!==b.clientX?b.clientX:b.pageX,this.clientY=void 0!==b.clientY?b.clientY:b.pageY,this.screenX=b.screenX||0,this.screenY=b.screenY||0):(this.clientX=void 0!==e.clientX?e.clientX:e.pageX,this.clientY=void 0!==e.clientY?e.clientY:e.pageY,this.screenX=e.screenX||0,this.screenY=e.screenY||0);this.button= b.button;this.j=b.keyCode||0;this.u=b.charCode||("keypress"==d?b.keyCode:0);this.B=b.ctrlKey;this.c=b.altKey;this.f=b.shiftKey;this.A=b.metaKey;this.l=cc?b.metaKey:b.ctrlKey;this.state=b.state;this.a=b;b.defaultPrevented&&this.preventDefault()}}y(Ac,vc);var Bc=[1,4,2];function Cc(b){return(mc?0==b.a.button:"click"==b.type?!0:!!(b.a.button&Bc[0]))&&!(bc&&cc&&b.B)}Ac.prototype.b=function(){Ac.da.b.call(this);this.a.stopPropagation?this.a.stopPropagation():this.a.cancelBubble=!0}; Ac.prototype.preventDefault=function(){Ac.da.preventDefault.call(this);var b=this.a;if(b.preventDefault)b.preventDefault();else if(b.returnValue=!1,oc)try{if(b.ctrlKey||112<=b.keyCode&&123>=b.keyCode)b.keyCode=-1}catch(c){}};var Dc="closure_listenable_"+(1E6*Math.random()|0);function Ec(b){return!(!b||!b[Dc])}var Fc=0;function Gc(b,c,d,e,f){this.listener=b;this.a=null;this.src=c;this.type=d;this.ad=!!e;this.je=f;this.key=++Fc;this.Tc=this.Ud=!1}function Hc(b){b.Tc=!0;b.listener=null;b.a=null;b.src=null;b.je=null};function Ic(b){this.src=b;this.a={};this.c=0}Ic.prototype.add=function(b,c,d,e,f){var g=b.toString();b=this.a[g];b||(b=this.a[g]=[],this.c++);var h=Jc(b,c,e,f);-1f.keyCode||void 0!=f.returnValue)){a:{var g=!1;if(0==f.keyCode)try{f.keyCode=-1;break a}catch(m){g=!0}if(g||void 0==f.returnValue)f.returnValue=!0}f=[];for(g=d.g;g;g=g.parentNode)f.push(g);for(var g=b.type,h=f.length-1;!d.i&&0<=h;h--){d.g=f[h];var k=$c(f[h],g,!0,d),e=e&&k}for(h=0;!d.i&&h>>0);function Qc(b){if(ka(b))return b;b[bd]||(b[bd]=function(c){return b.handleEvent(c)});return b[bd]};function cd(){pc.call(this);this.zb=new Ic(this);this.Nd=this;this.eb=null}y(cd,pc);cd.prototype[Dc]=!0;l=cd.prototype;l.addEventListener=function(b,c,d,e){C(this,b,c,d,e)};l.removeEventListener=function(b,c,d,e){Yc(this,b,c,d,e)}; l.o=function(b){var c,d=this.eb;if(d)for(c=[];d;d=d.eb)c.push(d);var d=this.Nd,e=b.type||b;if(ia(b))b=new vc(b,d);else if(b instanceof vc)b.target=b.target||d;else{var f=b;b=new vc(e,d);Xb(b,f)}var f=!0,g;if(c)for(var h=c.length-1;!b.i&&0<=h;h--)g=b.g=c[h],f=dd(g,e,!0,b)&&f;b.i||(g=b.g=d,f=dd(g,e,!0,b)&&f,b.i||(f=dd(g,e,!1,b)&&f));if(c)for(h=0;!b.i&&hd*c?d+c:d}function qd(b,c,d){return b+d*(c-b)};function rd(b,c){b[0]+=c[0];b[1]+=c[1];return b}function sd(b,c){var d=b[0],e=b[1],f=c[0],g=c[1],h=f[0],f=f[1],k=g[0],g=g[1],m=k-h,n=g-f,d=0===m&&0===n?0:(m*(d-h)+n*(e-f))/(m*m+n*n||0);0>=d||(1<=d?(h=k,f=g):(h+=d*m,f+=d*n));return[h,f]}function td(b,c){var d=pd(b+180,360)-180,e=Math.abs(Math.round(3600*d));return Math.floor(e/3600)+"\u00b0 "+Oa(Math.floor(e/60%60))+"\u2032 "+Oa(Math.floor(e%60))+"\u2033 "+c.charAt(0>d?1:0)} function ud(b,c,d){return b?c.replace("{x}",b[0].toFixed(d)).replace("{y}",b[1].toFixed(d)):""}function vd(b,c){for(var d=!0,e=b.length-1;0<=e;--e)if(b[e]!=c[e]){d=!1;break}return d}function wd(b,c){var d=Math.cos(c),e=Math.sin(c),f=b[1]*d+b[0]*e;b[0]=b[0]*d-b[1]*e;b[1]=f;return b}function xd(b,c){var d=b[0]-c[0],e=b[1]-c[1];return d*d+e*e}function yd(b,c){return xd(b,sd(b,c))}function zd(b,c){return ud(b,"{x}, {y}",c)};function Ad(b){this.length=b.length||b;for(var c=0;ce&&(k=k|4);hf&&(k|=2);0===k&&(k=1);return k}function Od(){return[Infinity,Infinity,-Infinity,-Infinity]} function Rd(b,c,d,e,f){return f?(f[0]=b,f[1]=c,f[2]=d,f[3]=e,f):[b,c,d,e]}function Zd(b,c){var d=b[0],e=b[1];return Rd(d,e,d,e,c)}function $d(b,c,d,e,f){f=Rd(Infinity,Infinity,-Infinity,-Infinity,f);return ae(f,b,c,d,e)}function be(b,c){return b[0]==c[0]&&b[2]==c[2]&&b[1]==c[1]&&b[3]==c[3]}function ce(b,c){c[0]b[2]&&(b[2]=c[2]);c[1]b[3]&&(b[3]=c[3]);return b} function Pd(b,c){c[0]b[2]&&(b[2]=c[0]);c[1]b[3]&&(b[3]=c[1])}function ae(b,c,d,e,f){for(;dg;++g)h=f[g],k=e[g],f[g]=b[0]+h*c-k*d,e[g]=b[1]+h*d+k*c;return Qd(f,e,void 0)}function le(b){return b[3]-b[1]}function oe(b,c,d){d=d?d:Od();pe(b,c)&&(d[0]=b[0]>c[0]?b[0]:c[0],d[1]=b[1]>c[1]?b[1]:c[1],d[2]=b[2]=c[0]&&b[1]<=c[3]&&b[3]>=c[1]}function je(b){return b[2]b||0!==this.i&&b<=this.i)return this;var c=b.toString();if(this.j.hasOwnProperty(c))return this.j[c];var d=this.Kc(b);if(d.ja().lengthf&&(f=g);g=k;h=m}return f}function mf(b,c,d,e,f){var g,h;g=0;for(h=d.length;gk){for(;ct&&(n=p,t=v)}t>f&&(m[(n-c)/e]=1,r+eG&&EaG)&&(0>la&&Lla)||(z[h++]=v,z[h++]=O,B=v,A=O);v=K;O=I}}z[h++]=v;z[h++]=O}}k.push(h);c=p}return h};function wf(b,c){df.call(this);this.g=this.l=-1;this.ma(b,c)}y(wf,df);l=wf.prototype;l.clone=function(){var b=new wf(null);xf(b,this.b,this.v.slice());return b};l.mb=function(b,c,d,e){if(eg!=p>g&&f<(n-k)*(g-m)/(p-m)+k&&(h=!h);k=n;m=p}return h}function Af(b,c,d,e,f,g){if(0===d.length||!zf(b,c,d[0],e,f,g))return!1;var h;c=1;for(h=d.length;cq&&(n=(n+p)/2,Af(b,c,d,e,n,r)&&(x=n,q=z));n=p}isNaN(x)&&(x=f[g]);return h?(h.push(x,r),h):[x,r]};function Cf(b,c,d,e,f,g){for(var h=[b[c],b[c+1]],k=[],m;c+e=f[0]&&g[2]<=f[2]||g[1]>=f[1]&&g[3]<=f[3]?!0:Cf(b,c,d,e,function(b,c){var d=!1,e=Yd(f,b),g=Yd(f,c);if(1===e||1===g)d=!0;else{var q=f[0],r=f[1],t=f[2],x=f[3],z=c[0],B=c[1],A=(B-b[1])/(z-b[0]);g&2&&!(e&2)&&(d=z-(B-x)/A,d=d>=q&&d<=t);d||!(g&4)||e&4||(d=B-(z-t)*A,d=d>=r&&d<=x);d||!(g&8)||e&8||(d=z-(B-r)/A,d=d>=q&&d<=t);d||!(g&16)||e&16||(d=B-(z-q)*A,d=d>=r&&d<=x)}return d}):!1} function Ef(b,c,d,e,f){var g=d[0];if(!(Df(b,c,g,e,f)||zf(b,c,g,e,f[0],f[1])||zf(b,c,g,e,f[0],f[3])||zf(b,c,g,e,f[2],f[1])||zf(b,c,g,e,f[2],f[3])))return!1;if(1===d.length)return!0;c=1;for(g=d.length;cb||this.g.length<=b)return null;var c=new wf(null);xf(c,this.b,this.v.slice(0===b?0:this.g[b-1],this.g[b]));return c};l.ae=function(){var b=this.b,c=this.v,d=this.g,e=[],f=0,g,h;g=0;for(h=d.length;gthis.i)}return void 0!==b?this.f+b:b}; l.jf=function(b,c,d){b instanceof df||(b=Lf(b));var e=d||{};d=void 0!==e.padding?e.padding:[0,0,0,0];var f=void 0!==e.constrainResolution?e.constrainResolution:!0,g=void 0!==e.nearest?e.nearest:!1,h;void 0!==e.minResolution?h=e.minResolution:void 0!==e.maxZoom?h=this.constrainResolution(this.a,e.maxZoom-this.f,0):h=0;var k=b.ja(),m=this.Ea(),e=Math.cos(-m),m=Math.sin(-m),n=Infinity,p=Infinity,q=-Infinity,r=-Infinity;b=b.ra();for(var t=0,x=k.length;tb?Wf(2*b):1-Wf(2*(b-.5))};function Zf(b){var c=b.source,d=b.start?b.start:Date.now(),e=c[0],f=c[1],g=void 0!==b.duration?b.duration:1E3,h=b.easing?b.easing:Wf;return function(b,c){if(c.time>=1;return d.join("")}function fg(b){return dg(b[0],b[1],b[2])};function gg(b,c,d,e){this.a=b;this.f=c;this.c=d;this.b=e}gg.prototype.contains=function(b){return hg(this,b[1],b[2])};function hg(b,c,d){return b.a<=c&&c<=b.f&&b.c<=d&&d<=b.b}function ig(b,c){return b.a==c.a&&b.c==c.c&&b.f==c.f&&b.b==c.b}function jg(b){return b.b-b.c+1}function kg(b){return b.f-b.a+1}function lg(b,c){return b.a<=c.f&&b.f>=c.a&&b.c<=c.b&&b.b>=c.c};function mg(b){this.c=b.html;this.a=b.tileRanges?b.tileRanges:null}mg.prototype.b=function(){return this.c};function ng(b,c,d){vc.call(this,b,d);this.element=c}y(ng,vc);function og(b){id.call(this);this.a=b?b:[];pg(this)}y(og,id);l=og.prototype;l.clear=function(){for(;0");g=g.join("")}g=f.createElement(g);h&&(ia(h)?g.className=h:ga(h)?g.className=h.join(" "):Eg(g,h));2=this.left&&b.right<=this.right&&b.top>=this.top&&b.bottom<=this.bottom:b.x>=this.left&&b.x<=this.right&&b.y>=this.top&&b.y<=this.bottom:!1}; l.ceil=function(){this.top=Math.ceil(this.top);this.right=Math.ceil(this.right);this.bottom=Math.ceil(this.bottom);this.left=Math.ceil(this.left);return this};l.floor=function(){this.top=Math.floor(this.top);this.right=Math.floor(this.right);this.bottom=Math.floor(this.bottom);this.left=Math.floor(this.left);return this};l.round=function(){this.top=Math.round(this.top);this.right=Math.round(this.right);this.bottom=Math.round(this.bottom);this.left=Math.round(this.left);return this}; l.scale=function(b,c){var d=ja(c)?c:b;this.left*=b;this.right*=b;this.top*=d;this.bottom*=d;return this};function $g(b,c,d,e){this.left=b;this.top=c;this.width=d;this.height=e}l=$g.prototype;l.clone=function(){return new $g(this.left,this.top,this.width,this.height)};l.contains=function(b){return b instanceof $g?this.left<=b.left&&this.left+this.width>=b.left+b.width&&this.top<=b.top&&this.top+this.height>=b.top+b.height:b.x>=this.left&&b.x<=this.left+this.width&&b.y>=this.top&&b.y<=this.top+this.height}; l.distance=function(b){var c=b.xb.g}function vh(b,c){for(var d,e;uh(b)&&!(d=b.a.zc,e=d.a[0].toString(),e in c&&c[e].contains(d.a));)b.pop().Ec()};function wh(b,c){cd.call(this);this.a=b;this.state=c}y(wh,cd);function xh(b){b.o("change")}wh.prototype.tb=function(){return w(this).toString()};wh.prototype.f=function(){return this.a};function yh(b){id.call(this);this.f=Fe(b.projection);this.j=void 0!==b.attributions?b.attributions:null;this.U=b.logo;this.A=void 0!==b.state?b.state:"ready";this.S=void 0!==b.wrapX?b.wrapX:!1}y(yh,id);l=yh.prototype;l.xe=wa;l.sa=function(){return this.j};l.qa=function(){return this.U};l.ta=function(){return this.f};l.ua=function(){return this.A};function zh(b){return b.S}l.na=function(b){this.j=b;this.s()};function Ah(b,c){b.A=c;b.s()};function Bh(b){this.minZoom=void 0!==b.minZoom?b.minZoom:0;this.a=b.resolutions;this.maxZoom=this.a.length-1;this.b=void 0!==b.origin?b.origin:null;this.g=null;void 0!==b.origins&&(this.g=b.origins);var c=b.extent;void 0===c||this.b||this.g||(this.b=he(c));this.j=null;void 0!==b.tileSizes&&(this.j=b.tileSizes);this.l=void 0!==b.tileSize?b.tileSize:this.j?null:256;this.u=void 0!==c?c:null;this.c=null;void 0!==b.sizes?this.c=b.sizes.map(function(b){return new gg(Math.min(0,b[0]),Math.max(b[0]-1,-1), Math.min(0,b[1]),Math.max(b[1]-1,-1))},this):c&&Ch(this,c);this.f=[0,0]}var Dh=[0,0,0];function Eh(b,c,d,e,f){f=b.Aa(c,f);for(c=c[0]-1;c>=b.minZoom;){if(d.call(null,c,Fh(b,f,c,e)))return!0;--c}return!1}l=Bh.prototype;l.J=function(){return this.u};l.Cg=function(){return this.maxZoom};l.Dg=function(){return this.minZoom};l.Ca=function(b){return this.b?this.b:this.g[b]};l.$=function(b){return this.a[b]};l.wh=function(){return this.a}; function Gh(b,c,d,e){return c[0]f||f>d.maxZoom)d=!1;else{var g=d.J();d=(d=g?Fh(d,g,f):d.c?d.c[f]:null)?hg(d,e,b):!0}return d?c:null}l.Xf=wa;function Sh(b,c){vc.call(this,b);this.tile=c}y(Sh,vc);function Th(b){b=b?b:{};this.D=Kg("UL");this.A=Kg("LI");this.D.appendChild(this.A);ih(this.A,!1);this.b=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.b=!1);var c=b.className?b.className:"ol-attribution",d=b.tipLabel?b.tipLabel:"Attributions",e=b.collapseLabel?b.collapseLabel:"\u00bb";this.G=ia(e)?Hg("SPAN",{},e):e;e=b.label?b.label:"i";this.S=ia(e)?Hg("SPAN",{},e):e;d=Hg("BUTTON",{type:"button",title:d},this.i&&!this.b?this.G:this.S);C(d,"click", this.Ll,!1,this);C(d,["mouseout",yc],function(){this.blur()},!1);c=Hg("DIV",c+" ol-unselectable ol-control"+(this.b&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),this.D,d);qh.call(this,{element:c,render:b.render?b.render:Uh,target:b.target});this.C=!0;this.l={};this.j={};this.T={}}y(Th,qh); function Uh(b){if(b=b.frameState){var c,d,e,f,g,h,k,m,n,p,q,r=b.layerStatesArray,t=Ub(b.attributions),x={},z=b.viewState.projection;d=0;for(c=r.length;dla.f)if(lg(G,new gg(pd(K.a,Ea),pd(K.f,Ea),K.c,K.b))||kg(K)>Ea&&lg(G,la)){q=!0;break a}}q=!1}else q=!0}}else q=!1;q?(m in x&&delete x[m],t[m]=k):x[m]=k}c=[t,x];d=c[0];c=c[1];for(var L in this.l)L in d?(this.j[L]||(ih(this.l[L],!0),this.j[L]=!0),delete d[L]):L in c?(this.j[L]&&(ih(this.l[L],!1),delete this.j[L]),delete c[L]):(Og(this.l[L]),delete this.l[L],delete this.j[L]);for(L in d)e=Kg("LI"),e.innerHTML=d[L].c,this.D.appendChild(e),this.l[L]=e,this.j[L]=!0;for(L in c)e= Kg("LI"),e.innerHTML=c[L].c,ih(e,!1),this.D.appendChild(e),this.l[L]=e;L=!Qb(this.j)||!Qb(b.logos);this.C!=L&&(ih(this.element,L),this.C=L);L&&Qb(this.j)?Wg(this.element,"ol-logo-only"):Xg(this.element,"ol-logo-only");var za;b=b.logos;L=this.T;for(za in L)za in b||(Og(L[za]),delete L[za]);for(var Ra in b)Ra in L||(za=new Image,za.src=Ra,d=b[Ra],""===d?d=za:(d=Hg("A",{href:d}),d.appendChild(za)),this.A.appendChild(d),L[Ra]=d);ih(this.A,!Qb(b))}else this.C&&(ih(this.element,!1),this.C=!1)}l=Th.prototype; l.Ll=function(b){b.preventDefault();Vh(this)};function Vh(b){Yg(b.element,"ol-collapsed");b.b?Pg(b.G,b.S):Pg(b.S,b.G);b.b=!b.b}l.Kl=function(){return this.i};l.Nl=function(b){this.i!==b&&(this.i=b,Yg(this.element,"ol-uncollapsible"),!b&&this.b&&Vh(this))};l.Ml=function(b){this.i&&this.b!==b&&Vh(this)};l.Jl=function(){return this.b};function Wh(b){b=b?b:{};var c=b.className?b.className:"ol-rotate",d=b.label?b.label:"\u21e7";this.b=null;ia(d)?this.b=Hg("SPAN","ol-compass",d):(this.b=d,Wg(this.b,"ol-compass"));d=Hg("BUTTON",{"class":c+"-reset",type:"button",title:b.tipLabel?b.tipLabel:"Reset rotation"},this.b);C(d,"click",Wh.prototype.A,!1,this);c=Hg("DIV",c+" ol-unselectable ol-control",d);qh.call(this,{element:c,render:b.render?b.render:Xh,target:b.target});this.i=b.duration?b.duration:250;this.j=void 0!==b.autoHide?b.autoHide: !0;this.l=void 0;this.j&&Wg(this.element,"ol-hidden")}y(Wh,qh);Wh.prototype.A=function(b){b.preventDefault();b=this.a;var c=b.aa();if(c){var d=c.Ea();void 0!==d&&(0Math.PI&&(d-=2*Math.PI),b.Ma(ag({rotation:d,duration:this.i,easing:Vf}))),c.te(0))}}; function Xh(b){if(b=b.frameState){b=b.viewState.rotation;if(b!=this.l){var c="rotate("+b+"rad)";if(this.j){var d=this.element;0===b?Wg(d,"ol-hidden"):Xg(d,"ol-hidden")}this.b.style.msTransform=c;this.b.style.webkitTransform=c;this.b.style.transform=c}this.l=b}};function Yh(b){b=b?b:{};var c=b.className?b.className:"ol-zoom",d=b.delta?b.delta:1,e=b.zoomOutLabel?b.zoomOutLabel:"\u2212",f=b.zoomOutTipLabel?b.zoomOutTipLabel:"Zoom out",g=Hg("BUTTON",{"class":c+"-in",type:"button",title:b.zoomInTipLabel?b.zoomInTipLabel:"Zoom in"},b.zoomInLabel?b.zoomInLabel:"+");C(g,"click",sa(Yh.prototype.j,d),!1,this);e=Hg("BUTTON",{"class":c+"-out",type:"button",title:f},e);C(e,"click",sa(Yh.prototype.j,-d),!1,this);c=Hg("DIV",c+" ol-unselectable ol-control",g,e);qh.call(this, {element:c,target:b.target});this.b=void 0!==b.duration?b.duration:250}y(Yh,qh);Yh.prototype.j=function(b,c){c.preventDefault();var d=this.a,e=d.aa();if(e){var f=e.$();f&&(02*this.b&&si(this),!0):!1};function si(b){if(b.b!=b.a.length){for(var c=0,d=0;c=b||96<=b&&106>=b||65<=b&&90>=b||(bc||$b)&&0==b)return!0;switch(b){case 32:case 43:case 63:case 64:case 107:case 109:case 110:case 111:case 186:case 59:case 189:case 187:case 61:case 188:case 190:case 191:case 192:case 222:case 219:case 220:case 221:return!0;default:return!1}}function yi(b){if(ac)b=zi(b);else if(cc&&bc)a:switch(b){case 93:b=91;break a}return b} function zi(b){switch(b){case 61:return 187;case 59:return 186;case 173:return 189;case 224:return 91;case 0:return 224;default:return b}};function Ai(b,c){cd.call(this);b&&Bi(this,b,c)}y(Ai,cd);l=Ai.prototype;l.ud=null;l.le=null;l.qf=null;l.me=null;l.ib=-1;l.Zb=-1;l.bf=!1; var Ci={3:13,12:144,63232:38,63233:40,63234:37,63235:39,63236:112,63237:113,63238:114,63239:115,63240:116,63241:117,63242:118,63243:119,63244:120,63245:121,63246:122,63247:123,63248:44,63272:46,63273:36,63275:35,63276:33,63277:34,63289:144,63302:45},Di={Up:38,Down:40,Left:37,Right:39,Enter:13,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,"U+007F":46,Home:36,End:35,PageUp:33,PageDown:34,Insert:45},Ei=Zb||$b||bc&&jc("525"),Fi=cc&∾ Ai.prototype.a=function(b){if(bc||$b)if(17==this.ib&&!b.B||18==this.ib&&!b.c||cc&&91==this.ib&&!b.A)this.Zb=this.ib=-1;-1==this.ib&&(b.B&&17!=b.j?this.ib=17:b.c&&18!=b.j?this.ib=18:b.A&&91!=b.j&&(this.ib=91));Ei&&!wi(b.j,this.ib,b.f,b.B,b.c)?this.handleEvent(b):(this.Zb=yi(b.j),Fi&&(this.bf=b.c))};Ai.prototype.c=function(b){this.Zb=this.ib=-1;this.bf=b.c}; Ai.prototype.handleEvent=function(b){var c=b.a,d,e,f=c.altKey;Zb&&"keypress"==b.type?(d=this.Zb,e=13!=d&&27!=d?c.keyCode:0):(bc||$b)&&"keypress"==b.type?(d=this.Zb,e=0<=c.charCode&&63232>c.charCode&&xi(d)?c.charCode:0):Yb&&!bc?(d=this.Zb,e=xi(d)?c.keyCode:0):(d=c.keyCode||this.Zb,e=c.charCode||0,Fi&&(f=this.bf),cc&&63==e&&224==d&&(d=191));var g=d=yi(d),h=c.keyIdentifier;d?63232<=d&&d in Ci?g=Ci[d]:25==d&&b.f&&(g=9):h&&h in Di&&(g=Di[h]);this.ib=g;b=new Gi(g,e,0,c);b.c=f;this.o(b)}; function Bi(b,c,d){b.me&&Hi(b);b.ud=c;b.le=C(b.ud,"keypress",b,d);b.qf=C(b.ud,"keydown",b.a,d,b);b.me=C(b.ud,"keyup",b.c,d,b)}function Hi(b){b.le&&(Zc(b.le),Zc(b.qf),Zc(b.me),b.le=null,b.qf=null,b.me=null);b.ud=null;b.ib=-1;b.Zb=-1}Ai.prototype.X=function(){Ai.da.X.call(this);Hi(this)};function Gi(b,c,d,e){Ac.call(this,e);this.type="key";this.j=b;this.u=c}y(Gi,Ac);function Ii(b,c){cd.call(this);var d=this.a=b;(d=ma(d)&&1==d.nodeType?this.a:this.a?this.a.body:null)&&bh(d,"direction");this.c=C(this.a,ac?"DOMMouseScroll":"mousewheel",this,c)}y(Ii,cd); Ii.prototype.handleEvent=function(b){var c=0,d=0;b=b.a;if("mousewheel"==b.type){c=1;if(Zb||bc&&(dc||jc("532.0")))c=40;d=Ji(-b.wheelDelta,c);c=ca(b.wheelDeltaX)?Ji(-b.wheelDeltaY,c):d}else d=b.detail,100d&&(d=-3),ca(b.axis)&&b.axis===b.HORIZONTAL_AXIS||(c=d);ja(this.b)&&(c=Math.min(Math.max(c,-this.b),this.b));d=new Ki(d,b,0,c);this.o(d)};function Ji(b,c){return bc&&(cc||ec)&&0!=b%c?b:b/c}Ii.prototype.X=function(){Ii.da.X.call(this);Zc(this.c);this.c=null}; function Ki(b,c,d,e){Ac.call(this,c);this.type="mousewheel";this.detail=b;this.C=e}y(Ki,Ac);function Li(b,c,d){vc.call(this,b);this.a=c;b=d?d:{};this.buttons=Mi(b);this.pressure=Ni(b,this.buttons);this.bubbles="bubbles"in b?b.bubbles:!1;this.cancelable="cancelable"in b?b.cancelable:!1;this.view="view"in b?b.view:null;this.detail="detail"in b?b.detail:null;this.screenX="screenX"in b?b.screenX:0;this.screenY="screenY"in b?b.screenY:0;this.clientX="clientX"in b?b.clientX:0;this.clientY="clientY"in b?b.clientY:0;this.button="button"in b?b.button:0;this.relatedTarget="relatedTarget"in b?b.relatedTarget: null;this.pointerId="pointerId"in b?b.pointerId:0;this.width="width"in b?b.width:0;this.height="height"in b?b.height:0;this.pointerType="pointerType"in b?b.pointerType:"";this.isPrimary="isPrimary"in b?b.isPrimary:!1;c.preventDefault&&(this.preventDefault=function(){c.preventDefault()})}y(Li,vc);function Mi(b){if(b.buttons||Oi)b=b.buttons;else switch(b.which){case 1:b=1;break;case 2:b=4;break;case 3:b=2;break;default:b=0}return b} function Ni(b,c){var d=0;b.pressure?d=b.pressure:d=c?.5:0;return d}var Oi=!1;try{Oi=1===(new MouseEvent("click",{buttons:1})).buttons}catch(b){};function Pi(b,c){var d=Kg("CANVAS");b&&(d.width=b);c&&(d.height=c);return d.getContext("2d")} var Qi=function(){var b;return function(){if(void 0===b)if(ba.getComputedStyle){var c=Kg("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate(1px,1px)",d=ba.getComputedStyle(c).getPropertyValue(e[f]));Og(c);b=d&&"none"!==d}else b=!1;return b}}(),Ri=function(){var b;return function(){if(void 0===b)if(ba.getComputedStyle){var c= Kg("P"),d,e={webkitTransform:"-webkit-transform",OTransform:"-o-transform",msTransform:"-ms-transform",MozTransform:"-moz-transform",transform:"transform"};document.body.appendChild(c);for(var f in e)f in c.style&&(c.style[f]="translate3d(1px,1px,1px)",d=ba.getComputedStyle(c).getPropertyValue(e[f]));Og(c);b=d&&"none"!==d}else b=!1;return b}}();function Si(b,c){var d=b.style;d.WebkitTransform=c;d.MozTransform=c;d.a=c;d.msTransform=c;d.transform=c;Zb&&jc("9.0")&&(b.style.transformOrigin="0 0")} function Ti(b,c){var d;if(Ri()){var e=Array(16);for(d=0;16>d;++d)e[d]=c[d].toFixed(6);Si(b,"matrix3d("+e.join(",")+")")}else if(Qi()){var e=[c[0],c[1],c[4],c[5],c[12],c[13]],f=Array(6);for(d=0;6>d;++d)f[d]=e[d].toFixed(6);Si(b,"matrix("+f.join(",")+")")}else b.style.left=Math.round(c[12])+"px",b.style.top=Math.round(c[13])+"px"};var Ui=["experimental-webgl","webgl","webkit-3d","moz-webgl"];function Vi(b,c){var d,e,f=Ui.length;for(e=0;e=Math.abs(e-k[0])&&25>=m)return!0}return!1}function lj(b){var c=mj(b,b.a),d=c.preventDefault;c.preventDefault=function(){b.preventDefault();d()};c.pointerId=1;c.isPrimary=!0;c.pointerType="mouse";return c}l=jj.prototype; l.el=function(b){if(!kj(this,b)){(1).toString()in this.c&&this.cancel(b);var c=lj(b);this.c[(1).toString()]=b;nj(this.a,oj,c,b)}};l.fl=function(b){if(!kj(this,b)){var c=lj(b);nj(this.a,pj,c,b)}};l.il=function(b){if(!kj(this,b)){var c=this.c[(1).toString()];c&&c.button===b.button&&(c=lj(b),nj(this.a,qj,c,b),delete this.c[(1).toString()])}};l.hl=function(b){if(!kj(this,b)){var c=lj(b);rj(this.a,c,b)}};l.gl=function(b){if(!kj(this,b)){var c=lj(b);sj(this.a,c,b)}}; l.cancel=function(b){var c=lj(b);this.a.cancel(c,b);delete this.c[(1).toString()]};function tj(b){ij.call(this,b,{MSPointerDown:this.nl,MSPointerMove:this.ol,MSPointerUp:this.rl,MSPointerOut:this.pl,MSPointerOver:this.ql,MSPointerCancel:this.ml,MSGotPointerCapture:this.kl,MSLostPointerCapture:this.ll});this.c=b.c;this.b=["","unavailable","touch","pen","mouse"]}y(tj,ij);function uj(b,c){var d=c;ja(c.a.pointerType)&&(d=mj(c,c.a),d.pointerType=b.b[c.a.pointerType]);return d}l=tj.prototype;l.nl=function(b){this.c[b.a.pointerId.toString()]=b;var c=uj(this,b);nj(this.a,oj,c,b)}; l.ol=function(b){var c=uj(this,b);nj(this.a,pj,c,b)};l.rl=function(b){var c=uj(this,b);nj(this.a,qj,c,b);delete this.c[b.a.pointerId.toString()]};l.pl=function(b){var c=uj(this,b);sj(this.a,c,b)};l.ql=function(b){var c=uj(this,b);rj(this.a,c,b)};l.ml=function(b){var c=uj(this,b);this.a.cancel(c,b);delete this.c[b.a.pointerId.toString()]};l.ll=function(b){this.a.o(new Li("lostpointercapture",b,b.a))};l.kl=function(b){this.a.o(new Li("gotpointercapture",b,b.a))};function vj(b){ij.call(this,b,{pointerdown:this.Vn,pointermove:this.Wn,pointerup:this.Zn,pointerout:this.Xn,pointerover:this.Yn,pointercancel:this.Un,gotpointercapture:this.rk,lostpointercapture:this.dl})}y(vj,ij);l=vj.prototype;l.Vn=function(b){wj(this.a,b)};l.Wn=function(b){wj(this.a,b)};l.Zn=function(b){wj(this.a,b)};l.Xn=function(b){wj(this.a,b)};l.Yn=function(b){wj(this.a,b)};l.Un=function(b){wj(this.a,b)};l.dl=function(b){wj(this.a,b)};l.rk=function(b){wj(this.a,b)};function xj(b,c){ij.call(this,b,{touchstart:this.ap,touchmove:this.$o,touchend:this.Zo,touchcancel:this.Yo});this.c=b.c;this.i=c;this.b=void 0;this.j=0;this.f=void 0}y(xj,ij);l=xj.prototype;l.Ph=function(){this.j=0;this.f=void 0}; function yj(b,c,d){c=mj(c,d);c.pointerId=d.identifier+2;c.bubbles=!0;c.cancelable=!0;c.detail=b.j;c.button=0;c.buttons=1;c.width=d.webkitRadiusX||d.radiusX||0;c.height=d.webkitRadiusY||d.radiusY||0;c.pressure=d.webkitForce||d.force||.5;c.isPrimary=b.b===d.identifier;c.pointerType="touch";c.clientX=d.clientX;c.clientY=d.clientY;c.screenX=d.screenX;c.screenY=d.screenY;return c} function zj(b,c,d){function e(){c.preventDefault()}var f=Array.prototype.slice.call(c.a.changedTouches),g=f.length,h,k;for(h=0;h=c.length){var f=[],g,h,k;for(g=0;g=b.minResolution&&cb.f&&(b.f=e.f),e.cb.b&&(b.b=e.b)):b[c][d]=e:(b[c]={},b[c][d]=e)}function sk(b,c,d){return[c*(Math.round(b[0]/c)+d[0]%2/2),c*(Math.round(b[1]/c)+d[1]%2/2)]} function tk(b,c,d,e,f,g,h,k,m,n){var p=w(c).toString();p in b.wantedTiles||(b.wantedTiles[p]={});var q=b.wantedTiles[p];b=b.tileQueue;var r=d.minZoom,t,x,z,B,A,v;for(v=h;v>=r;--v)for(x=Fh(d,g,v,x),z=d.$(v),B=x.a;B<=x.f;++B)for(A=x.c;A<=x.b;++A)h-v<=k?(t=c.Ob(v,B,A,e,f),0==t.state&&(q[fg(t.a)]=!0,t.tb()in b.b||uk(b,[t,p,Jh(d,t.a),z])),void 0!==m&&m.call(n,t)):c.Xf(v,B,A,f)};function vk(b){this.A=b.opacity;this.D=b.rotateWithView;this.u=b.rotation;this.i=b.scale;this.G=b.snapToPixel}l=vk.prototype;l.Ae=function(){return this.A};l.ce=function(){return this.D};l.Be=function(){return this.u};l.Ce=function(){return this.i};l.de=function(){return this.G};l.De=function(b){this.A=b};l.Ee=function(b){this.u=b};l.Fe=function(b){this.i=b};function wk(b){b=b||{};this.g=void 0!==b.anchor?b.anchor:[.5,.5];this.f=null;this.c=void 0!==b.anchorOrigin?b.anchorOrigin:"top-left";this.l=void 0!==b.anchorXUnits?b.anchorXUnits:"fraction";this.B=void 0!==b.anchorYUnits?b.anchorYUnits:"fraction";var c=void 0!==b.crossOrigin?b.crossOrigin:null,d=void 0!==b.img?b.img:null,e=void 0!==b.imgSize?b.imgSize:null,f=b.src;void 0!==f&&0!==f.length||!d||(f=d.src);var g=void 0!==b.src?0:2,h=xk.Yb(),k=h.get(f,c);k||(k=new yk(d,f,e,c,g),h.set(f,c,k));this.a= k;this.ia=void 0!==b.offset?b.offset:[0,0];this.b=void 0!==b.offsetOrigin?b.offsetOrigin:"top-left";this.j=null;this.C=void 0!==b.size?b.size:null;vk.call(this,{opacity:void 0!==b.opacity?b.opacity:1,rotation:void 0!==b.rotation?b.rotation:0,scale:void 0!==b.scale?b.scale:1,snapToPixel:void 0!==b.snapToPixel?b.snapToPixel:!0,rotateWithView:void 0!==b.rotateWithView?b.rotateWithView:!1})}y(wk,vk);l=wk.prototype; l.Xb=function(){if(this.f)return this.f;var b=this.g,c=this.Bb();if("fraction"==this.l||"fraction"==this.B){if(!c)return null;b=this.g.slice();"fraction"==this.l&&(b[0]*=c[0]);"fraction"==this.B&&(b[1]*=c[1])}if("top-left"!=this.c){if(!c)return null;b===this.g&&(b=this.g.slice());if("top-right"==this.c||"bottom-right"==this.c)b[0]=-b[0]+c[0];if("bottom-left"==this.c||"bottom-right"==this.c)b[1]=-b[1]+c[1]}return this.f=b};l.fc=function(){return this.a.a};l.qd=function(){return this.a.b};l.Bd=function(){return this.a.c}; l.ze=function(){var b=this.a;if(!b.g)if(b.l){var c=b.b[0],d=b.b[1],e=Pi(c,d);e.fillRect(0,0,c,d);b.g=e.canvas}else b.g=b.a;return b.g};l.Ca=function(){if(this.j)return this.j;var b=this.ia;if("top-left"!=this.b){var c=this.Bb(),d=this.a.b;if(!c||!d)return null;b=b.slice();if("top-right"==this.b||"bottom-right"==this.b)b[0]=d[0]-c[0]-b[0];if("bottom-left"==this.b||"bottom-right"==this.b)b[1]=d[1]-c[1]-b[1]}return this.j=b};l.fn=function(){return this.a.j};l.Bb=function(){return this.C?this.C:this.a.b}; l.sf=function(b,c){return C(this.a,"change",b,!1,c)};l.load=function(){this.a.load()};l.Wf=function(b,c){Yc(this.a,"change",b,!1,c)};function yk(b,c,d,e,f){cd.call(this);this.g=null;this.a=b?b:new Image;null!==e&&(this.a.crossOrigin=e);this.f=null;this.c=f;this.b=d;this.j=c;this.l=!1;2==this.c&&zk(this)}y(yk,cd);function zk(b){var c=Pi(1,1);try{c.drawImage(b.a,0,0),c.getImageData(0,0,1,1)}catch(d){b.l=!0}}yk.prototype.i=function(){this.c=3;this.f.forEach(Zc);this.f=null;this.o("change")}; yk.prototype.B=function(){this.c=2;this.b=[this.a.width,this.a.height];this.f.forEach(Zc);this.f=null;zk(this);this.o("change")};yk.prototype.load=function(){if(0==this.c){this.c=1;this.f=[Xc(this.a,"error",this.i,!1,this),Xc(this.a,"load",this.B,!1,this)];try{this.a.src=this.j}catch(b){this.i()}}};function xk(){this.a={};this.c=0}ea(xk);xk.prototype.clear=function(){this.a={};this.c=0};xk.prototype.get=function(b,c){var d=c+":"+b;return d in this.a?this.a[d]:null}; xk.prototype.set=function(b,c,d){this.a[c+":"+b]=d;++this.c};function Ak(b,c){pc.call(this);this.j=c;this.f={};this.u={}}y(Ak,pc);function Bk(b){var c=b.viewState,d=b.coordinateToPixelMatrix;ik(d,b.size[0]/2,b.size[1]/2,1/c.resolution,-1/c.resolution,-c.rotation,-c.center[0],-c.center[1]);Jd(d,b.pixelToCoordinateMatrix)}l=Ak.prototype;l.X=function(){Ib(this.f,uc);Ak.da.X.call(this)}; function Ck(){var b=xk.Yb();if(32q[2])m=[t+r*Math.ceil((q[0]-t)/r),b[1]]}q=c.layerStatesArray;for(r=q.length-1;0<=r;--r){var t=q[r],x=t.layer;if(!t.rb||fk(t,n)&&f.call(g,x)){var z=Dk(this,x);x.fa()&&(k=z.Za(zh(x.fa())?m:b,c,t.rb?d:h,e));if(k)return k}}}; l.jh=function(b,c,d,e,f,g){var h,k=c.viewState.resolution,m=c.layerStatesArray,n;for(n=m.length-1;0<=n;--n){h=m[n];var p=h.layer;if(fk(h,k)&&f.call(g,p)&&(h=Dk(this,p).sc(b,c,d,e)))return h}};l.kh=function(b,c,d,e){return void 0!==this.Af(b,c,ue,this,d,e)};function Dk(b,c){var d=w(c).toString();if(d in b.f)return b.f[d];var e=b.gf(c);b.f[d]=e;b.u[d]=C(e,"change",b.Dk,!1,b);return e}l.Dk=function(){this.j.render()};l.Me=wa; l.Do=function(b,c){for(var d in this.f)if(!(c&&d in c.layerStates)){var e=d,f=this.f[e];delete this.f[e];Zc(this.u[e]);delete this.u[e];uc(f)}};function Ek(b,c){for(var d in b.f)if(!(d in c.layerStates)){c.postRenderFunctions.push(ra(b.Do,b));break}}function rb(b,c){return b.zIndex-c.zIndex};function Fk(b,c){this.i=b;this.g=c;this.a=[];this.c=[];this.b={}}Fk.prototype.clear=function(){this.a.length=0;this.c.length=0;Rb(this.b)};function Gk(b){var c=b.a,d=b.c,e=c[0];1==c.length?(c.length=0,d.length=0):(c[0]=c.pop(),d[0]=d.pop(),Hk(b,0));c=b.g(e);delete b.b[c];return e}function uk(b,c){var d=b.i(c);Infinity!=d&&(b.a.push(c),b.c.push(d),b.b[b.g(c)]=!0,Ik(b,0,b.a.length-1))}Fk.prototype.nc=function(){return this.a.length};Fk.prototype.Ka=function(){return 0===this.a.length}; function Hk(b,c){for(var d=b.a,e=b.c,f=d.length,g=d[c],h=e[c],k=c;c>1;){var m=2*c+1,n=2*c+2,m=nc;){var h=d-1>>1;if(b[h]>g)e[d]=e[h],b[d]=b[h],d=h;else break}e[d]=f;b[d]=g}function Jk(b){var c=b.i,d=b.a,e=b.c,f=0,g=d.length,h,k,m;for(k=0;k>1)-1;0<=c;c--)Hk(b,c)};function Kk(b,c){Fk.call(this,function(c){return b.apply(null,c)},function(b){return b[0].tb()});this.l=c;this.f=0}y(Kk,Fk);Kk.prototype.j=function(b){b=b.target;var c=b.state;if(2===c||3===c||4===c)Yc(b,"change",this.j,!1,this),--this.f,this.l()};function Lk(b,c,d){for(var e=0,f;b.fd.a.length)d=!1;else{var e=Date.now()-d.j,f=d.a.length-3;if(d.a[f+2]e;)g-=3;var e=d.a[f+2]-d.a[g+2],h=d.a[f]-d.a[g],f=d.a[f+1]-d.a[g+1];d.g=Math.atan2(f,h);d.c=Math.sqrt(h*h+f*f)/e;d=d.c>d.b}}d&&(d=this.a,d=(d.b-d.c)/d.f,f=this.a.g,g=c.Ta(),this.i=Nk(this.a,g),b.Ma(this.i),g=b.Oa(g),d=b.Fa([g[0]-d*Math.cos(f),g[1]-d*Math.sin(f)]),d=c.Wd(d),c.jb(d));Tf(c,-1);b.render(); return!1}this.f=null;return!0}function el(b){if(0this.D&&(this.a=!0));this.i=d;b=b.map;d=fh(b.a);e=cl(this.j);e[0]-=d.x;e[1]-=d.y;this.f=b.Fa(e);this.a&&(d=b.aa(),e=d.Ea(),b.render(),Pk(b,d,e+c,this.f))}function El(b){if(2>this.j.length){b=b.map;var c=b.aa();Tf(c,-1);if(this.a){var d=c.Ea(),e=this.f,f=this.A,d=c.constrainRotation(d,0);Pk(b,c,d,e,f)}return!1}return!0} function Cl(b){return 2<=this.j.length?(b=b.map,this.f=null,this.i=void 0,this.a=!1,this.l=0,this.C||Tf(b.aa(),1),b.render(),!0):!1}Bl.prototype.xc=te;function Fl(b){al.call(this,{handleDownEvent:Gl,handleDragEvent:Hl,handleUpEvent:Il});b=b?b:{};this.f=null;this.l=void 0!==b.duration?b.duration:400;this.a=void 0;this.i=1}y(Fl,al);function Hl(b){var c=1,d=this.j[0],e=this.j[1],f=d.clientX-e.clientX,d=d.clientY-e.clientY,f=Math.sqrt(f*f+d*d);void 0!==this.a&&(c=this.a/f);this.a=f;1!=c&&(this.i=c);b=b.map;var f=b.aa(),d=f.$(),e=fh(b.a),g=cl(this.j);g[0]-=e.x;g[1]-=e.y;this.f=b.Fa(g);b.render();Rk(b,f,d*c,this.f)} function Il(b){if(2>this.j.length){b=b.map;var c=b.aa();Tf(c,-1);var d=c.$(),e=this.f,f=this.l,d=c.constrainResolution(d,0,this.i-1);Rk(b,c,d,e,f);return!1}return!0}function Gl(b){return 2<=this.j.length?(b=b.map,this.f=null,this.a=void 0,this.i=1,this.C||Tf(b.aa(),1),b.render(),!0):!1}Fl.prototype.xc=te;function Jl(b){b=b?b:{};var c=new og,d=new Mk(-.005,.05,100);(void 0!==b.altShiftDragRotate?b.altShiftDragRotate:1)&&c.push(new hl);(void 0!==b.doubleClickZoom?b.doubleClickZoom:1)&&c.push(new Sk({delta:b.zoomDelta,duration:b.zoomDuration}));(void 0!==b.dragPan?b.dragPan:1)&&c.push(new dl({kinetic:d}));(void 0!==b.pinchRotate?b.pinchRotate:1)&&c.push(new Bl);(void 0!==b.pinchZoom?b.pinchZoom:1)&&c.push(new Fl({duration:b.zoomDuration}));if(void 0!==b.keyboard?b.keyboard:1)c.push(new vl),c.push(new xl({delta:b.zoomDelta, duration:b.zoomDuration}));(void 0!==b.mouseWheelZoom?b.mouseWheelZoom:1)&&c.push(new zl({duration:b.zoomDuration}));(void 0!==b.shiftDragZoom?b.shiftDragZoom:1)&&c.push(new ul({duration:b.zoomDuration}));return c};function Kl(b){var c=b||{};b=Ub(c);delete b.layers;c=c.layers;ak.call(this,b);this.b=[];this.a={};C(this,kd("layers"),this.Fk,!1,this);c?ga(c)&&(c=new og(c.slice())):c=new og;this.gh(c)}y(Kl,ak);l=Kl.prototype;l.he=function(){this.qb()&&this.s()}; l.Fk=function(){this.b.forEach(Zc);this.b.length=0;var b=this.Pc();this.b.push(C(b,"add",this.Ek,!1,this),C(b,"remove",this.Gk,!1,this));Ib(this.a,function(b){b.forEach(Zc)});Rb(this.a);var b=b.a,c,d,e;c=0;for(d=b.length;cf;++f)e[f]=c.charCodeAt(d++)|c.charCodeAt(d++)<<8|c.charCodeAt(d++)<<16|c.charCodeAt(d++)<<24;else for(f=0;16>f;++f)e[f]=c[d++]|c[d++]<<8|c[d++]<<16|c[d++]<<24;c=b.a[0];d=b.a[1];var f=b.a[2],g=b.a[3],h=0,h=c+(g^d&(f^g))+e[0]+3614090360&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[1]+3905402710&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[2]+606105819&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^ c))+e[3]+3250441966&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[4]+4118548399&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[5]+1200080426&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[6]+2821735955&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[7]+4249261313&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[8]+1770035416&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[9]+2336552879&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+ (d^g&(c^d))+e[10]+4294925233&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[11]+2304563134&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(g^d&(f^g))+e[12]+1804603682&4294967295;c=d+(h<<7&4294967295|h>>>25);h=g+(f^c&(d^f))+e[13]+4254626195&4294967295;g=c+(h<<12&4294967295|h>>>20);h=f+(d^g&(c^d))+e[14]+2792965006&4294967295;f=g+(h<<17&4294967295|h>>>15);h=d+(c^f&(g^c))+e[15]+1236535329&4294967295;d=f+(h<<22&4294967295|h>>>10);h=c+(f^g&(d^f))+e[1]+4129170786&4294967295;c=d+(h<<5&4294967295| h>>>27);h=g+(d^f&(c^d))+e[6]+3225465664&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[11]+643717713&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[0]+3921069994&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[5]+3593408605&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[10]+38016083&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[15]+3634488961&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[4]+3889429448&4294967295;d=f+(h<<20&4294967295| h>>>12);h=c+(f^g&(d^f))+e[9]+568446438&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[14]+3275163606&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[3]+4107603335&4294967295;f=g+(h<<14&4294967295|h>>>18);h=d+(g^c&(f^g))+e[8]+1163531501&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(f^g&(d^f))+e[13]+2850285829&4294967295;c=d+(h<<5&4294967295|h>>>27);h=g+(d^f&(c^d))+e[2]+4243563512&4294967295;g=c+(h<<9&4294967295|h>>>23);h=f+(c^d&(g^c))+e[7]+1735328473&4294967295;f=g+(h<<14&4294967295| h>>>18);h=d+(g^c&(f^g))+e[12]+2368359562&4294967295;d=f+(h<<20&4294967295|h>>>12);h=c+(d^f^g)+e[5]+4294588738&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[8]+2272392833&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[11]+1839030562&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[14]+4259657740&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[1]+2763975236&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[4]+1272893353&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^ c^d)+e[7]+4139469664&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[10]+3200236656&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[13]+681279174&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[0]+3936430074&4294967295;g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[3]+3572445317&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[6]+76029189&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(d^f^g)+e[9]+3654602809&4294967295;c=d+(h<<4&4294967295|h>>>28);h=g+(c^d^f)+e[12]+3873151461&4294967295; g=c+(h<<11&4294967295|h>>>21);h=f+(g^c^d)+e[15]+530742520&4294967295;f=g+(h<<16&4294967295|h>>>16);h=d+(f^g^c)+e[2]+3299628645&4294967295;d=f+(h<<23&4294967295|h>>>9);h=c+(f^(d|~g))+e[0]+4096336452&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[7]+1126891415&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[14]+2878612391&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[5]+4237533241&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[12]+1700485571&4294967295;c=d+ (h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[3]+2399980690&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[10]+4293915773&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[1]+2240044497&4294967295;d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[8]+1873313359&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[15]+4264355552&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[6]+2734768916&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[13]+1309151649&4294967295; d=f+(h<<21&4294967295|h>>>11);h=c+(f^(d|~g))+e[4]+4149444226&4294967295;c=d+(h<<6&4294967295|h>>>26);h=g+(d^(c|~f))+e[11]+3174756917&4294967295;g=c+(h<<10&4294967295|h>>>22);h=f+(c^(g|~d))+e[2]+718787259&4294967295;f=g+(h<<15&4294967295|h>>>17);h=d+(g^(f|~c))+e[9]+3951481745&4294967295;b.a[0]=b.a[0]+c&4294967295;b.a[1]=b.a[1]+(f+(h<<21&4294967295|h>>>11))&4294967295;b.a[2]=b.a[2]+f&4294967295;b.a[3]=b.a[3]+g&4294967295} function $l(b,c){var d;ca(d)||(d=c.length);for(var e=d-b.c,f=b.g,g=b.b,h=0;hc.b?c.c:2*c.c)-c.b);b[0]=128;for(var d=1;dd;++d)for(var f=0;32>f;f+=8)b[e++]=c.a[d]>>> f&255;if(8192>=b.length)c=String.fromCharCode.apply(null,b);else for(c="",d=0;dthis.g&&(this.g=this.b.lineWidth,this.f=null)}; function Nm(b,c,d){Dm.call(this,b,c,d);this.b={pg:void 0,hd:void 0,cd:void 0,dd:null,ed:void 0,fd:void 0,gd:void 0,fillStyle:void 0,strokeStyle:void 0,lineCap:void 0,lineDash:null,lineJoin:void 0,lineWidth:void 0,miterLimit:void 0}}y(Nm,Dm); function Om(b,c,d,e,f){var g=b.b,h=[1];b.c.push(h);b.a.push(h);var k,h=0;for(k=e.length;hthis.g&&(this.g=d.lineWidth,this.f=null)):(d.strokeStyle=void 0,d.lineCap=void 0,d.lineDash=null,d.lineJoin=void 0,d.lineWidth=void 0,d.miterLimit=void 0)}; function Pm(b){var c=b.b,d=c.fillStyle,e=c.strokeStyle,f=c.lineCap,g=c.lineDash,h=c.lineJoin,k=c.lineWidth,m=c.miterLimit;void 0!==d&&c.pg!=d&&(b.c.push([9,d]),c.pg=c.fillStyle);void 0===e||c.hd==e&&c.cd==f&&c.dd==g&&c.ed==h&&c.fd==k&&c.gd==m||(b.c.push([10,e,k,f,h,m,g]),c.hd=e,c.cd=f,c.dd=g,c.ed=h,c.fd=k,c.gd=m)}function Qm(b,c,d){Dm.call(this,b,c,d);this.ia=this.G=this.D=null;this.l="";this.C=this.A=this.u=this.B=0;this.i=this.j=this.b=null}y(Qm,Dm); Qm.prototype.Hb=function(b,c,d,e,f,g){if(""!==this.l&&this.i&&(this.b||this.j)){if(this.b){f=this.b;var h=this.D;if(!h||h.fillStyle!=f.fillStyle){var k=[9,f.fillStyle];this.c.push(k);this.a.push(k);h?h.fillStyle=f.fillStyle:this.D={fillStyle:f.fillStyle}}}this.j&&(f=this.j,h=this.G,h&&h.lineCap==f.lineCap&&h.lineDash==f.lineDash&&h.lineJoin==f.lineJoin&&h.lineWidth==f.lineWidth&&h.miterLimit==f.miterLimit&&h.strokeStyle==f.strokeStyle||(k=[10,f.strokeStyle,f.lineWidth,f.lineCap,f.lineJoin,f.miterLimit, f.lineDash,!1],this.c.push(k),this.a.push(k),h?(h.lineCap=f.lineCap,h.lineDash=f.lineDash,h.lineJoin=f.lineJoin,h.lineWidth=f.lineWidth,h.miterLimit=f.miterLimit,h.strokeStyle=f.strokeStyle):this.G={lineCap:f.lineCap,lineDash:f.lineDash,lineJoin:f.lineJoin,lineWidth:f.lineWidth,miterLimit:f.miterLimit,strokeStyle:f.strokeStyle}));f=this.i;h=this.ia;h&&h.font==f.font&&h.textAlign==f.textAlign&&h.textBaseline==f.textBaseline||(k=[11,f.font,f.textAlign,f.textBaseline],this.c.push(k),this.a.push(k),h? (h.font=f.font,h.textAlign=f.textAlign,h.textBaseline=f.textBaseline):this.ia={font:f.font,textAlign:f.textAlign,textBaseline:f.textBaseline});Fm(this,g);f=this.coordinates.length;b=Em(this,b,c,d,e,!1);b=[5,f,b,this.l,this.B,this.u,this.A,this.C,!!this.b,!!this.j];this.c.push(b);this.a.push(b);Im(this,g)}}; Qm.prototype.ab=function(b){if(b){var c=b.a;c?(c=c.a,c=vg(c?c:Tl),this.b?this.b.fillStyle=c:this.b={fillStyle:c}):this.b=null;var d=b.l;if(d){var c=d.a,e=d.f,f=d.b,g=d.g,h=d.c,d=d.j,e=void 0!==e?e:"round",f=f?f.slice():Ul,g=void 0!==g?g:"round",h=void 0!==h?h:1,d=void 0!==d?d:10,c=vg(c?c:Vl);if(this.j){var k=this.j;k.lineCap=e;k.lineDash=f;k.lineJoin=g;k.lineWidth=h;k.miterLimit=d;k.strokeStyle=c}else this.j={lineCap:e,lineDash:f,lineJoin:g,lineWidth:h,miterLimit:d,strokeStyle:c}}else this.j=null; var m=b.f,c=b.g,e=b.j,f=b.i,h=b.c,d=b.b,g=b.B,k=b.u;b=void 0!==m?m:"10px sans-serif";g=void 0!==g?g:"center";k=void 0!==k?k:"middle";this.i?(m=this.i,m.font=b,m.textAlign=g,m.textBaseline=k):this.i={font:b,textAlign:g,textBaseline:k};this.l=void 0!==d?d:"";this.B=void 0!==c?c:0;this.u=void 0!==e?e:0;this.A=void 0!==f?f:0;this.C=void 0!==h?h:1}else this.l=""};function Rm(b,c,d,e){this.u=b;this.g=c;this.B=d;this.j=e;this.c={};this.i=Pi(1,1);this.l=Dd()} function Sm(b){for(var c in b.c){var d=b.c[c],e;for(e in d)d[e].ve()}}Rm.prototype.f=function(b,c,d,e,f){var g=this.l;ik(g,.5,.5,1/c,-1/c,-d,-b[0],-b[1]);var h=this.i;h.clearRect(0,0,1,1);var k;void 0!==this.j&&(k=Od(),Pd(k,b),Sd(k,c*this.j,k));return Tm(this,h,g,d,e,function(b){if(0za&&(za=Ka,n=Ra)}if(0===za){h=null;break a}za=h[n];h[n]=h[m];h[m]=za;for(n=m+1;nthis.a/2){var c=[[b.source[0][0],b.source[0][1]],[b.source[1][0],b.source[1][1]],[b.source[2][0],b.source[2][1]]];c[0][0]-p>this.a/2&&(c[0][0]-=this.a);c[1][0]-p>this.a/2&&(c[1][0]-=this.a);c[2][0]-p>this.a/2&&(c[2][0]-=this.a);Math.max(c[0][0],c[1][0],c[2][0])-Math.min(c[0][0],c[1][0],c[2][0])q,t=!1;if(0b.u),t)){Math.abs(c[0]-e[0])<=Math.abs(c[1]-e[1])?(r=[(d[0]+e[0])/2,(d[1]+e[1])/2],p=b.c(r),q=[(f[0]+c[0])/2,(f[1]+c[1])/2],t=b.c(q),fn(b,c,d,r,q,g,h,p,t,n-1),fn(b,q,r,e,f,t,p,k,m,n-1)):(r=[(c[0]+d[0])/2,(c[1]+d[1])/2],p=b.c(r),q=[(e[0]+f[0])/2,(e[1]+f[1])/2],t=b.c(q),fn(b,c,r,q,f,g,p,t,m,n-1),fn(b,r,d,e,q,p,h,k,t,n-1));return}if(r){if(!b.B)return;b.l=!0}b.f.push({source:[g,k,m],target:[c,e,f]});b.f.push({source:[g,h,k],target:[c,d,e]})}} function gn(b){var c=Od();b.f.forEach(function(b){b=b.source;Pd(c,b[0]);Pd(c,b[1]);Pd(c,b[2])});return c};function hn(b,c,d,e,f,g){this.C=c;this.A=b.J();var h=c.J(),k=h?oe(d,h):d,h=bn(b,c,me(k),e);this.B=new en(b,c,k,this.A,.5*h);this.i=e;this.g=d;b=gn(this.B);this.u=(this.c=g(b,h,f))?this.c.b:1;this.f=this.l=null;f=2;g=[];this.c&&(f=0,g=this.c.j);gk.call(this,d,e,this.u,f,g)}y(hn,gk);hn.prototype.X=function(){1==this.state&&(Zc(this.f),this.f=null);hn.da.X.call(this)};hn.prototype.a=function(){return this.l}; function jn(b){var c=b.c.state;2==c&&(b.l=dn(ke(b.g)/b.i,le(b.g)/b.i,b.u,b.c.$(),0,b.i,b.g,b.B,[{extent:b.c.J(),image:b.c.a()}]));b.state=c;hk(b)}hn.prototype.load=function(){if(0==this.state){this.state=1;hk(this);var b=this.c.state;2==b||3==b?jn(this):(this.f=this.c.Qa("change",function(){var b=this.c.state;if(2==b||3==b)Zc(this.f),this.f=null,jn(this)},!1,this),this.c.load())}};function kn(b){yh.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,state:b.state});this.G=void 0!==b.resolutions?b.resolutions:null;this.a=null;this.va=0}y(kn,yh);function ln(b,c){if(b.G){var d=wb(b.G,c,0);c=b.G[d]}return c} kn.prototype.C=function(b,c,d,e){var f=this.f;if(f&&e&&!Xe(f,e)){if(this.a){if(this.va==this.c&&Xe(this.a.C,e)&&this.a.$()==c&&this.a.b==d&&be(this.a.J(),b))return this.a;this.a.Ec();this.a=null}this.a=new hn(f,e,b,c,d,ra(function(b,c,d){return this.pd(b,c,d,f)},this));this.va=this.c;return this.a}f&&(e=f);return this.pd(b,c,d,e)};kn.prototype.D=function(b){b=b.target;switch(b.state){case 1:this.o(new mn(nn,b));break;case 2:this.o(new mn(on,b));break;case 3:this.o(new mn(pn,b))}}; function qn(b,c){b.a().src=c}function mn(b,c){vc.call(this,b);this.image=c}y(mn,vc);var nn="imageloadstart",on="imageloadend",pn="imageloaderror";function rn(b){kn.call(this,{attributions:b.attributions,logo:b.logo,projection:b.projection,resolutions:b.resolutions,state:void 0!==b.state?b.state:void 0});this.ga=b.canvasFunction;this.Z=null;this.ea=0;this.pa=void 0!==b.ratio?b.ratio:1.5}y(rn,kn);rn.prototype.pd=function(b,c,d,e){c=ln(this,c);var f=this.Z;if(f&&this.ea==this.c&&f.$()==c&&f.b==d&&Xd(f.J(),b))return f;b=b.slice();qe(b,this.pa);(e=this.ga(b,c,d,[ke(b)/c*d,le(b)/c*d],e))&&(f=new $m(b,c,d,this.j,e));this.Z=f;this.ea=this.c;return f};function sn(b){id.call(this);this.wa=void 0;this.a="geometry";this.f=null;this.g=void 0;this.b=null;C(this,kd(this.a),this.ge,!1,this);void 0!==b&&(b instanceof bf||!b?this.La(b):this.I(b))}y(sn,id);l=sn.prototype;l.clone=function(){var b=new sn(this.P());b.vc(this.a);var c=this.W();c&&b.La(c.clone());(c=this.f)&&b.vf(c);return b};l.W=function(){return this.get(this.a)};l.Na=function(){return this.wa};l.Mj=function(){return this.a};l.vl=function(){return this.f};l.Qb=function(){return this.g}; l.wl=function(){this.s()};l.ge=function(){this.b&&(Zc(this.b),this.b=null);var b=this.W();b&&(this.b=C(b,"change",this.wl,!1,this));this.s()};l.La=function(b){this.set(this.a,b)};l.vf=function(b){this.g=(this.f=b)?tn(b):void 0;this.s()};l.ic=function(b){this.wa=b;this.s()};l.vc=function(b){Yc(this,kd(this.a),this.ge,!1,this);this.a=b;C(this,kd(this.a),this.ge,!1,this);this.ge()};function tn(b){if(!ka(b)){var c;c=ga(b)?b:[b];b=function(){return c}}return b};function un(b){b.prototype.then=b.prototype.then;b.prototype.$goog_Thenable=!0}function vn(b){if(!b)return!1;try{return!!b.$goog_Thenable}catch(c){return!1}};function wn(b,c,d){this.f=d;this.b=b;this.g=c;this.c=0;this.a=null}wn.prototype.get=function(){var b;0d?b[1]="?":d==c.length-1&&(b[1]=void 0)}return b.join("")}function mo(b,c,d){if(ga(c))for(var e=0;e=b[0]&&c[3]>=b[1]}function q(b,c,d,e,f){for(var g=[c,d],h;g.length;)d=g.pop(),c=g.pop(),d-c<=e||(h=c+Math.ceil((d-c)/e/2)*e,r(b,c,d,h,f),g.push(c,h,h,d))}function r(b,c,d,e,f){for(var g,h,k,m,n;d>c;){600h-g/2?-1:1),k=Math.max(c,Math.floor(e-h*m/g+n)),h=Math.min(d,Math.floor(e+(g-h)*m/g+n)),r(b,k,h,e,f));g=b[e];h=c;m=d;t(b,c,e);for(0f(b[h],g);)h++;for(;0this.af)this.fj(e,c),c--;else break;this.Ui(d,e,c)},fj:function(b,c){var e=b[c],f=e.children.length,g=this.gg;this.Vi(e,g,f);f=this.Wi(e,g,f);f={children:e.children.splice(f,e.children.length-f),height:e.height};e.Pa&&(f.Pa=!0);d(e,this.cb);d(f,this.cb);c?b[c-1].children.push(f):this.ig(e, f)},ig:function(b,c){this.data={children:[b,c],height:b.height+1};d(this.data,this.cb)},Wi:function(b,c,d){var f,g,h,m,n,p,q;n=p=Infinity;for(f=c;f<=d-c;f++)g=e(b,0,f,this.cb),h=e(b,f,d,this.cb),m=Math.max(0,Math.min(g[2],h[2])-Math.max(g[0],h[0]))*Math.max(0,Math.min(g[3],h[3])-Math.max(g[1],h[1])),g=k(g)+k(h),m=c;p--)q=b.children[p],f(k,b.Pa?g(q):q.bbox),n+=m(k);return n},Ui:function(b,c,d){for(;0<=d;d--)f(c[d].bbox,b)},Yi:function(b){for(var c=b.length-1,e;0<=c;c--)0===b[c].children.length?0B||this.b[1]> A)?(v.width=B,v.height=A,this.b=[B,A],this.B=!Bm(this.b),this.f=null):(B=this.b[0],A=this.b[1],(v=n!=this.C)||(v=this.f,v=!(v.a<=z.a&&z.f<=v.f&&v.c<=z.c&&z.b<=v.b)),v&&(this.f=null))):(O=Pi(B,A),this.j=O.canvas,this.b=[B,A],this.i=O,this.B=!Bm(this.b));var K,I;this.f?(A=this.f,B=kg(A)):(B/=p[0],A/=p[1],K=z.a-Math.floor((B-kg(z))/2),I=z.c-Math.floor((A-jg(z))/2),this.C=n,this.G=p[0],this.D=p[1],this.f=new gg(K,K+B-1,I,I+A-1),this.l=Array(B*A),A=this.f);v={};v[n]={};var G=[],la=this.bd(h,f,v),Ea=g.b(), L=Od(),za=new gg(0,0,0,0),Ra,Ka,kb;for(I=z.a;I<=z.f;++I)for(kb=z.c;kb<=z.b;++kb)Ka=h.Ob(n,I,kb,d,f),K=Ka.state,2==K||4==K||3==K&&!Ea?v[n][fg(Ka.a)]=Ka:(Ra=Eh(k,Ka.a,la,za,L),Ra||(G.push(Ka),(Ra=Gh(k,Ka.a,za,L))&&la(n+1,Ra)));la=0;for(Ra=G.length;lam[2];)++n,p=k*n,p=zm(this,b,p),q.b(r,f,p,h,g),c-=k;p=zm(this,b,0)}r!=d&&(ym(this,"render",r,b,p),d.drawImage(r.canvas,0,0));r.globalAlpha=t}ym(this,"postcompose",d,b,p)};Sp.prototype.Za=function(b,c,d,e){if(this.b){var f=c.viewState.resolution,g=c.viewState.rotation,h=this.a,k=c.layerStates[w(h)],m={};return this.b.f(b,f,g,k.rb?c.skippedFeatureUids:{},function(b){var c=w(b).toString();if(!(c in m))return m[c]=!0,d.call(e,b,h)})}};Sp.prototype.A=function(){mk(this)}; Sp.prototype.zd=function(b){function c(b){var c,e=b.Qb();e?c=e.call(b,n):(e=d.b)&&(c=e(b,n));if(c){if(c){var f,g=!1,e=0;for(f=c.length;eG&&Ng(this.target,z.target,0)}else{if(!b.viewHints[0]&&!b.viewHints[1]){O=Fh(z.g,r,z.b[0],A);G=[];v=I=void 0;for(v in z.c)I=z.c[v],O.contains(I.a)||G.push(I);Ea= O=void 0;O=0;for(Ea=G.length;O=n;){x=b.b[g];d=b.u[g]; e=w(d).toString();if(void 0===k[e]&&d.W()&&(void 0===p||pe(p,d.W().J()))&&(q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),q.drawElements(4,t-x,f,x*c),t=m(d))){b=t;break a}t=x;g--}b=void 0}else q.clear(q.COLOR_BUFFER_BIT|q.DEPTH_BUFFER_BIT),Jq(b,q,c,k,b.i,b.j),b=(b=m(null))?b:void 0;x=b}q.disableVertexAttribArray(r.f);q.disableVertexAttribArray(r.a);q.disableVertexAttribArray(r.g);q.disableVertexAttribArray(r.c);q.disableVertexAttribArray(r.b);return x} function Jq(b,c,d,e,f,g){var h=d.b?5125:5123;d=d.b?4:2;if(Qb(e)){var k;b=0;e=f.length;for(k=0;bc[0]||c[0]>f[0]||0> c[1]||c[1]>f[1])&&(this.i||(this.i=Pi(1,1)),this.i.clearRect(0,0,1,1),this.i.drawImage(this.f.a(),c[0],c[1],1,1,0,0,1,1),0e?c[0]=e-d:0>f&&(c[0]= Math.abs(f)+d),0>g?c[1]=g-d:0>h&&(c[1]=Math.abs(h)+d),0===c[0]&&0===c[1])||(d=b.aa().Ta(),e=b.Oa(d),c=[e[0]+c[0],e[1]+c[1]],this.g&&(this.g.source=d,b.Ma(Zf(this.g))),b.aa().jb(b.Fa(c)))}}};l.Pk=function(){nr(this)};l.Uh=function(b){this.set("element",b)};l.setMap=function(b){this.set("map",b)};l.Zh=function(b){this.set("offset",b)};l.xf=function(b){this.set("position",b)}; function or(b,c){var d=Cg(b),e=new yg(0,0),f;f=d?Cg(d):document;f=!Zb||9<=lc||Sg(Ag(f))?f.documentElement:f.body;b!=f&&(f=eh(b),d=Tg(Ag(d)),e.x=f.left+d.x,e.y=f.top+d.y);return[e.x,e.y,e.x+c[0],e.y+c[1]]}l.bi=function(b){this.set("positioning",b)};function pr(b,c){b.a.visible!==c&&(ih(b.b,c),b.a.visible=c)} function nr(b){var c=b.se(),d=b.Yg();if(void 0!==c&&c.b&&void 0!==d){var d=c.Oa(d),e=c.Ra(),c=b.b.style,f=b.Eg(),g=b.Fg(),h=f[0],f=f[1];if("bottom-right"==g||"center-right"==g||"top-right"==g)""!==b.a.oe&&(b.a.oe=c.left=""),h=Math.round(e[0]-d[0]-h)+"px",b.a.Ne!=h&&(b.a.Ne=c.right=h);else{""!==b.a.Ne&&(b.a.Ne=c.right="");if("bottom-center"==g||"center-center"==g||"top-center"==g)h-=gh(b.b).width/2;h=Math.round(d[0]+h)+"px";b.a.oe!=h&&(b.a.oe=c.left=h)}if("bottom-left"==g||"bottom-center"==g||"bottom-right"== g)""!==b.a.Oe&&(b.a.Oe=c.top=""),d=Math.round(e[1]-d[1]-f)+"px",b.a.Td!=d&&(b.a.Td=c.bottom=d);else{""!==b.a.Td&&(b.a.Td=c.bottom="");if("center-left"==g||"center-center"==g||"center-right"==g)f-=gh(b.b).height/2;d=Math.round(d[1]+f)+"px";b.a.Oe!=d&&(b.a.Oe=c.top=d)}pr(b,!0)}else pr(b,!1)};function qr(b){b=b?b:{};this.j=void 0!==b.collapsed?b.collapsed:!0;this.i=void 0!==b.collapsible?b.collapsible:!0;this.i||(this.j=!1);var c=b.className?b.className:"ol-overviewmap",d=b.tipLabel?b.tipLabel:"Overview map",e=b.collapseLabel?b.collapseLabel:"\u00ab";this.A=ia(e)?Hg("SPAN",{},e):e;e=b.label?b.label:"\u00bb";this.C=ia(e)?Hg("SPAN",{},e):e;d=Hg("BUTTON",{type:"button",title:d},this.i&&!this.j?this.A:this.C);C(d,"click",this.Rl,!1,this);var e=Hg("DIV","ol-overviewmap-map"),f=this.b=new S({controls:new og, interactions:new og,target:e,view:b.view});b.layers&&b.layers.forEach(function(b){f.jg(b)},this);var g=Hg("DIV","ol-overviewmap-box");this.l=new mr({position:[0,0],positioning:"bottom-left",element:g});this.b.kg(this.l);c=Hg("DIV",c+" ol-unselectable ol-control"+(this.j&&this.i?" ol-collapsed":"")+(this.i?"":" ol-uncollapsible"),e,d);qh.call(this,{element:c,render:b.render?b.render:rr,target:b.target})}y(qr,qh);l=qr.prototype; l.setMap=function(b){var c=this.a;b!==c&&(c&&(c=c.aa())&&Yc(c,kd("rotation"),this.ie,!1,this),qr.da.setMap.call(this,b),b&&(this.u.push(C(b,"propertychange",this.Ik,!1,this)),0===this.b.Xg().$b()&&this.b.Xh(b.oc()),b=b.aa()))&&(C(b,kd("rotation"),this.ie,!1,this),Sf(b)&&(this.b.Uc(),sr(this)))};l.Ik=function(b){"view"===b.key&&((b=b.oldValue)&&Yc(b,kd("rotation"),this.ie,!1,this),b=this.a.aa(),C(b,kd("rotation"),this.ie,!1,this))};l.ie=function(){this.b.aa().te(this.a.aa().Ea())}; function rr(){var b=this.a,c=this.b;if(b.b&&c.b){var d=b.Ra(),b=b.aa().Zc(d),e=c.Ra(),d=c.aa().Zc(e),f=c.Oa(he(b)),c=c.Oa(fe(b)),c=new zg(Math.abs(f[0]-c[0]),Math.abs(f[1]-c[1])),f=e[0],e=e[1];c.width<.1*f||c.height<.1*e||c.width>.75*f||c.height>.75*e?sr(this):Xd(d,b)||(b=this.b,d=this.a.aa(),b.aa().jb(d.Ta()))}tr(this)}function sr(b){var c=b.a;b=b.b;var d=c.Ra(),c=c.aa().Zc(d),d=b.Ra();b=b.aa();qe(c,1/(.1*Math.pow(2,Math.log(7.5)/Math.LN2/2)));b.jf(c,d)} function tr(b){var c=b.a,d=b.b;if(c.b&&d.b){var e=c.Ra(),f=c.aa(),g=d.aa();d.Ra();var c=f.Ea(),h=b.l,d=b.l.re(),f=f.Zc(e),e=g.$(),g=ee(f),f=ge(f),k;if(b=b.a.aa().Ta())k=[g[0]-b[0],g[1]-b[1]],wd(k,c),rd(k,b);h.xf(k);d&&(k=new zg(Math.abs((g[0]-f[0])/e),Math.abs((f[1]-g[1])/e)),c=Sg(Ag(Cg(d))),!Zb||jc("10")||c&&jc("8")?(d=d.style,ac?d.MozBoxSizing="border-box":bc?d.WebkitBoxSizing="border-box":d.boxSizing="border-box",d.width=Math.max(k.width,0)+"px",d.height=Math.max(k.height,0)+"px"):(b=d.style,c? (c=lh(d,"padding"),d=oh(d),b.pixelWidth=k.width-d.left-c.left-c.right-d.right,b.pixelHeight=k.height-d.top-c.top-c.bottom-d.bottom):(b.pixelWidth=k.width,b.pixelHeight=k.height)))}}l.Rl=function(b){b.preventDefault();ur(this)};function ur(b){Yg(b.element,"ol-collapsed");b.j?Pg(b.A,b.C):Pg(b.C,b.A);b.j=!b.j;var c=b.b;b.j||c.b||(c.Uc(),sr(b),Xc(c,"postrender",function(){tr(this)},!1,b))}l.Ql=function(){return this.i}; l.Tl=function(b){this.i!==b&&(this.i=b,Yg(this.element,"ol-uncollapsible"),!b&&this.j&&ur(this))};l.Sl=function(b){this.i&&this.j!==b&&ur(this)};l.Pl=function(){return this.j};l.ak=function(){return this.b};function vr(b){b=b?b:{};var c=b.className?b.className:"ol-scale-line";this.l=Hg("DIV",c+"-inner");this.i=Hg("DIV",c+" ol-unselectable",this.l);this.C=null;this.A=void 0!==b.minWidth?b.minWidth:64;this.b=!1;this.S=void 0;this.D="";this.j=null;qh.call(this,{element:this.i,render:b.render?b.render:wr,target:b.target});C(this,kd("units"),this.Z,!1,this);this.T(b.units||"metric")}y(vr,qh);var xr=[1,2,5];vr.prototype.G=function(){return this.get("units")}; function wr(b){(b=b.frameState)?this.C=b.viewState:this.C=null;yr(this)}vr.prototype.Z=function(){yr(this)};vr.prototype.T=function(b){this.set("units",b)}; function yr(b){var c=b.C;if(c){var d=c.center,e=c.projection,c=e.getPointResolution(c.resolution,d),f=e.c,g=b.G();"degrees"!=f||"metric"!=g&&"imperial"!=g&&"us"!=g&&"nautical"!=g?"degrees"!=f&&"degrees"==g?(b.j||(b.j=Je(e,Fe("EPSG:4326"))),d=Math.cos(Wa(b.j(d)[1])),e=Be.radius,e/=Ce[f],c*=180/(Math.PI*d*e)):b.j=null:(b.j=null,d=Math.cos(Wa(d[1])),c*=Math.PI*d*Be.radius/180);d=b.A*c;f="";"degrees"==g?d<1/60?(f="\u2033",c*=3600):1>d?(f="\u2032",c*=60):f="\u00b0":"imperial"==g?.9144>d?(f="in",c/=.0254): 1609.344>d?(f="ft",c/=.3048):(f="mi",c/=1609.344):"nautical"==g?(c/=1852,f="nm"):"metric"==g?1>d?(f="mm",c*=1E3):1E3>d?f="m":(f="km",c/=1E3):"us"==g&&(.9144>d?(f="in",c*=39.37):1609.344>d?(f="ft",c/=.30480061):(f="mi",c/=1609.3472));for(d=3*Math.floor(Math.log(b.A*c)/Math.log(10));;){e=xr[d%3]*Math.pow(10,Math.floor(d/3));g=Math.round(e/c);if(isNaN(g)){ih(b.i,!1);b.b=!1;return}if(g>=b.A)break;++d}c=e+" "+f;b.D!=c&&(b.l.innerHTML=c,b.D=c);b.S!=g&&(b.l.style.width=g+"px",b.S=g);b.b||(ih(b.i,!0),b.b= !0)}else b.b&&(ih(b.i,!1),b.b=!1)};function zr(b){pc.call(this);this.c=b;this.a={}}y(zr,pc);var Ar=[];zr.prototype.Qa=function(b,c,d,e){ga(c)||(c&&(Ar[0]=c.toString()),c=Ar);for(var f=0;fd.height?(this.i=1,d=new $g(0,0,e,0)):(this.i=Kr,d=new $g(0,0,0,c));this.b.a=d||new $g(NaN,NaN,NaN,NaN);this.C=!0}b=b.frameState.viewState.resolution;b!==this.j&&(this.j=b,b=1-Qf(this.a.aa())(b),d=this.b,c=Qg(this.element),1==this.i?ch(c,d.a.left+d.a.width*b):ch(c,d.a.left, d.a.top+d.a.height*b))}}l.sk=function(b){var c=this.a,d=c.aa(),e=d.$();c.Ma(bg({resolution:e,duration:this.A,easing:Vf}));b=Mr(this,Nr(this,b.offsetX-this.l[0]/2,b.offsetY-this.l[1]/2));d.Ub(d.constrainResolution(b))};l.vk=function(){Tf(this.a.aa(),1)};l.tk=function(b){this.j=Mr(this,Nr(this,b.left,b.top));this.a.aa().Ub(this.j)};l.uk=function(){var b=this.a,c=b.aa();Tf(c,-1);b.Ma(bg({resolution:this.j,duration:this.A,easing:Vf}));b=c.constrainResolution(this.j);c.Ub(b)}; function Nr(b,c,d){var e=b.b.a;return Sa(1===b.i?(c-e.left)/e.width:(d-e.top)/e.height,0,1)}function Mr(b,c){return Pf(b.a.aa())(1-c)};function Or(b){b=b?b:{};this.b=b.extent?b.extent:null;var c=b.className?b.className:"ol-zoom-extent",d=Hg("BUTTON",{type:"button",title:b.tipLabel?b.tipLabel:"Fit to extent"},b.label?b.label:"E");C(d,"click",this.j,!1,this);c=Hg("DIV",c+" ol-unselectable ol-control",d);qh.call(this,{element:c,target:b.target})}y(Or,qh);Or.prototype.j=function(b){b.preventDefault();var c=this.a;b=c.aa();var d=this.b?this.b:b.g.J(),c=c.Ra();b.jf(d,c)};function Pr(b){id.call(this);b=b?b:{};this.a=null;C(this,kd("tracking"),this.ul,!1,this);this.uf(void 0!==b.tracking?b.tracking:!1)}y(Pr,id);l=Pr.prototype;l.X=function(){this.uf(!1);Pr.da.X.call(this)}; l.On=function(b){b=b.a;if(null!==b.alpha){var c=Wa(b.alpha);this.set("alpha",c);"boolean"==typeof b.absolute&&b.absolute?this.set("heading",c):ja(b.webkitCompassHeading)&&-1!=b.webkitCompassAccuracy&&this.set("heading",Wa(b.webkitCompassHeading))}null!==b.beta&&this.set("beta",Wa(b.beta));null!==b.gamma&&this.set("gamma",Wa(b.gamma));this.s()};l.Bj=function(){return this.get("alpha")};l.Ej=function(){return this.get("beta")};l.Kj=function(){return this.get("gamma")};l.tl=function(){return this.get("heading")}; l.Tg=function(){return this.get("tracking")};l.ul=function(){if($i){var b=this.Tg();b&&!this.a?this.a=C(ba,"deviceorientation",this.On,!1,this):!b&&this.a&&(Zc(this.a),this.a=null)}};l.uf=function(b){this.set("tracking",b)};function Qr(){this.defaultDataProjection=null}function Rr(b,c,d){var e;d&&(e={dataProjection:d.dataProjection?d.dataProjection:b.Ia(c),featureProjection:d.featureProjection});return Sr(b,e)}function Sr(b,c){var d;c&&(d={featureProjection:c.featureProjection,dataProjection:c.dataProjection?c.dataProjection:b.defaultDataProjection,rightHanded:c.rightHanded});return d} function Tr(b,c,d){var e=d?Fe(d.featureProjection):null;d=d?Fe(d.dataProjection):null;return e&&d&&!Xe(e,d)?b instanceof bf?(c?b.clone():b).kb(c?e:d,c?d:e):af(c?b.slice():b,c?e:d,c?d:e):b};function Ur(){this.defaultDataProjection=null}y(Ur,Qr);function Vr(b){return ma(b)?b:ia(b)?(b=ao(b))?b:null:null}l=Ur.prototype;l.V=function(){return"json"};l.Tb=function(b,c){return this.Rc(Vr(b),Rr(this,b,c))};l.Ba=function(b,c){return this.Jf(Vr(b),Rr(this,b,c))};l.Sc=function(b,c){return this.Dh(Vr(b),Rr(this,b,c))};l.Ia=function(b){return this.Kh(Vr(b))};l.Jd=function(b,c){return bo(this.Vc(b,c))};l.Vb=function(b,c){return bo(this.Re(b,c))};l.Wc=function(b,c){return bo(this.Te(b,c))};function Wr(b,c,d,e,f){var g=NaN,h=NaN,k=(d-c)/e;if(0!==k)if(1==k)g=b[c],h=b[c+1];else if(2==k)g=.5*b[c]+.5*b[c+e],h=.5*b[c+1]+.5*b[c+e+1];else{var h=b[c],k=b[c+1],m=0,g=[0],n;for(n=c+e;n>1,p=h(d,g[n]),0r?(d=(d-g[-r-2])/(g[-r-1]-g[-r-2]),c+=(-r-2)*e,g=qd(b[c],b[c+e],d),h=qd(b[c+1],b[c+e+1],d)):(g=b[c+r*e],h=b[c+r*e+1])}return f?(f[0]= g,f[1]=h,f):[g,h]}function Xr(b,c,d,e,f,g){if(d==c)return null;if(f>1,fb||this.g.length<=b)return null;var c=new T(null);c.ba(this.b,this.v.slice(0===b?0:this.g[b-1],this.g[b]));return c}; l.rd=function(){var b=this.v,c=this.g,d=this.b,e=[],f=0,g,h;g=0;for(h=c.length;gb||c<=b)return null;c=new D(null);c.ba(this.b,this.v.slice(b*this.a,(b+1)*this.a));return c};l.ue=function(){var b=this.v,c=this.b,d=this.a,e=[],f,g;f=0;for(g=b.length;fb||this.g.length<=b)return null;var c;0===b?c=0:(c=this.g[b-1],c=c[c.length-1]);b=this.g[b].slice();var d=b[b.length-1];if(0!==c){var e,f;e=0;for(f=b.length;eb||0!==this.i&&bc)throw Error("Bad port number "+c);b.l=c}else b.l=null}function It(b,c,d){c instanceof Kt?(b.b=c,Qt(b.b,b.j)):(d||(c=Lt(c,Rt)),b.b=new Kt(c,0,b.j))}function St(b){return b instanceof Ft?b.clone():new Ft(b,void 0)} function Tt(b,c){b instanceof Ft||(b=St(b));c instanceof Ft||(c=St(c));var d=b,e=c,f=d.clone(),g=!!e.f;g?Gt(f,e.f):g=!!e.i;g?f.i=e.i:g=!!e.c;g?f.c=e.c:g=null!=e.l;var h=e.a;if(g)Ht(f,e.l);else if(g=!!e.a)if("/"!=h.charAt(0)&&(d.c&&!d.a?h="/"+h:(d=f.a.lastIndexOf("/"),-1!=d&&(h=f.a.substr(0,d+1)+h))),d=h,".."==d||"."==d)h="";else if(-1!=d.indexOf("./")||-1!=d.indexOf("/.")){for(var h=0==d.lastIndexOf("/",0),d=d.split("/"),k=[],m=0;m>4&15).toString(16)+(b&15).toString(16)} var Mt=/[#\/\?@]/g,Ot=/[\#\?:]/g,Nt=/[\#\?]/g,Rt=/[\#\?@]/g,Pt=/#/g;function Kt(b,c,d){this.c=this.a=null;this.b=b||null;this.f=!!d}function Vt(b){b.a||(b.a=new ri,b.c=0,b.b&&ko(b.b,function(c,d){b.add(decodeURIComponent(c.replace(/\+/g," ")),d)}))}l=Kt.prototype;l.nc=function(){Vt(this);return this.c};l.add=function(b,c){Vt(this);this.b=null;b=Wt(this,b);var d=this.a.get(b);d||this.a.set(b,d=[]);d.push(c);this.c++;return this}; l.remove=function(b){Vt(this);b=Wt(this,b);return ti(this.a.c,b)?(this.b=null,this.c-=this.a.get(b).length,this.a.remove(b)):!1};l.clear=function(){this.a=this.b=null;this.c=0};l.Ka=function(){Vt(this);return 0==this.c};function Xt(b,c){Vt(b);c=Wt(b,c);return ti(b.a.c,c)}l.O=function(){Vt(this);for(var b=this.a.pc(),c=this.a.O(),d=[],e=0;ee;++e){var f=parseInt(d[e],10).toString(16);d[e]=1==f.length?"0"+f:f}Es(b,d.join(""))} function dv(b,c,d){sp({node:b},ev,fv,[c],d)}function gv(b,c,d){var e={node:b};c.Na()&&b.setAttribute("id",c.Na());b=c.P();var f=c.Qb();if(f&&(f=f.call(c,0))&&0>1,x=-7;g=e?g-1:0;var z=e?-1:1,B=b[c+g];g+=z;e=B&(1<<-x)-1;B>>=-x;for(x+=q;0>=-x;for(x+=f;0>1,B=23===g?Math.pow(2,-24)-Math.pow(2,-77):0;q=f?0:q-1;var A=f?1:-1,v=0>c||0===c&&0>1/c?1:0;c=Math.abs(c);isNaN(c)||Infinity===c?(c=isNaN(c)?1:0,f=x):(f=Math.floor(Math.log(c)/Math.LN2),1>c*(r=Math.pow(2,-f))&&(f--,r*=2),c=1<=f+z?c+B/r:c+B*Math.pow(2,1-z),2<=c*r&&(f++,r/=2),f+z>=x?(c=0,f=x):1<=f+z?(c=(c*r-1)*Math.pow(2,g),f+=z):(c=c*Math.pow(2,z-1)*Math.pow(2,g),f=0));for(;8<=g;b[e+q]=c&255,q+=A,c/=256,g-=8);f=f<g)if(h)if(56320>g){e.push(239,191,189);h=g;continue}else g=h-55296<<10|g-56320|65536,h=null;else{56319< g||f+1===c?e.push(239,191,189):h=g;continue}else h&&(e.push(239,191,189),h=null);128>g?e.push(g):2048>g?e.push(g>>6|192,g&63|128):65536>g?e.push(g>>12|224,g>>6&63|128,g&63|128):e.push(g>>18|240,g>>12&63|128,g>>6&63|128,g&63|128)}return e}c.ka=g;var k=b("ieee754"),m,n,p;m={Mh:function(b){return(this[b]|this[b+1]<<8|this[b+2]<<16)+16777216*this[b+3]},Yf:function(b,c){this[c]=b;this[c+1]=b>>>8;this[c+2]=b>>>16;this[c+3]=b>>>24},Eh:function(b){return(this[b]|this[b+1]<<8|this[b+2]<<16)+(this[b+3]<<24)}, Nf:function(b){return k.read(this,b,!0,23,4)},Hf:function(b){return k.read(this,b,!0,52,8)},pi:function(b,c){return k.write(this,b,c,!0,23,4)},mi:function(b,c){return k.write(this,b,c,!0,52,8)},toString:function(b,c,e){var f=b="";e=Math.min(this.length,e||this.length);for(c=c||0;c=g?(b+=decodeURIComponent(f)+String.fromCharCode(g),f=""):f+="%"+g.toString(16)}return b+=decodeURIComponent(f)},write:function(b,c){for(var e=b===n?p:h(b),f=0;f>3,c,this);this.ca===g&&this.Xo(f)}return c},lo:function(){var b=this.Eb.Nf(this.ca);this.ca+=4;return b},ho:function(){var b=this.Eb.Hf(this.ca);this.ca+=8;return b},za:function(){var b=this.Eb,c,e,f,g,h;c=b[this.ca++];if(128>c)return c;c=c&127;f=b[this.ca++];if(128>f)return c|f<<7;f=(f&127)<<7;g=b[this.ca++];if(128>g)return c|f|g<<14;g=(g&127)<<14;h=b[this.ca++];if(128>h)return c|f|g|h<<21;e=b[this.ca++];c=(c|f|g|(h&127)<<21)+268435456*(e&127);if(128>e)return c;e=b[this.ca++];c+=34359738368* (e&127);if(128>e)return c;e=b[this.ca++];c+=4398046511104*(e&127);if(128>e)return c;e=b[this.ca++];c+=562949953421312*(e&127);if(128>e)return c;e=b[this.ca++];c+=72057594037927936*(e&127);if(128>e)return c;e=b[this.ca++];c+=0x7fffffffffffffff*(e&127);if(128>e)return c;throw Error("Expected varint not more than 10 bytes");},wo:function(){var b=this.ca,c=this.za();if(cf?g<<7*f:g* Math.pow(2,7*f));return-c-1},Fd:function(){var b=this.za();return 1===b%2?(b+1)/-2:b/2},eo:function(){return Boolean(this.za())},Qf:function(){var b=this.za()+this.ca,c=this.Eb.toString("utf8",this.ca,b);this.ca=b;return c},Xo:function(b){b=b&7;if(b===h.f)for(;127>3),f--,1===e||2===e)g+=b.Fd(),h+=b.Fd(),1===e&&(z&&x.push(z),z=[]),z.push(new k(g,h));else if(7===e)z&&z.push(z[0].clone());else throw Error("unknown command "+e);z&&x.push(z);return x};g.prototype.bbox=function(){var b=this.lc;b.ca=this.Ye;for(var c=b.za()+b.ca,e=1,f=0,g=0,h=0,k=Infinity,z=-Infinity,B=Infinity,A= -Infinity;b.ca>3),f--,1===e||2===e)g+=b.Fd(),h+=b.Fd(),gz&&(z=g),hA&&(A=h);else if(7!==e)throw Error("unknown command "+e);return[k,B,z,A]}},{"point-geometry":1}],5:[function(b,c){function g(b,c){this.version=1;this.name=null;this.extent=4096;this.length=0;this.lc=b;this.Pd=[];this.Rd=[];this.Od=[];b.Lf(h,this,c);this.length=this.Od.length}function h(b,c,e){15===b?c.version=e.za():1===b?c.name=e.Qf():5===b?c.extent=e.za():2===b?c.Od.push(e.ca): 3===b?c.Pd.push(e.Qf()):4===b&&c.Rd.push(k(e))}function k(b){for(var c=null,e=b.za()+b.ca;b.ca>3,c=1===c?b.Qf():2===c?b.lo():3===c?b.ho():4===c?b.wo():5===c?b.za():6===c?b.Fd():7===c?b.eo():null;return c}var m=b("./vectortilefeature.js");c.ka=g;g.prototype.feature=function(b){if(0>b||b>=this.Od.length)throw Error("feature index out of bounds");this.lc.ca=this.Od[b];b=this.lc.za()+this.lc.ca;return new m(this.lc,b,this.extent,this.Pd,this.Rd)}},{"./vectortilefeature.js":4}]},{},[2])(2)}); zp=c.ka})();function Ov(b){this.defaultDataProjection=null;b=b?b:{};this.defaultDataProjection=new De({code:"EPSG:3857",units:"tile-pixels"});this.a=b.featureClass?b.featureClass:Vm;this.f=b.geometryName?b.geometryName:"geometry";this.c=b.layerName?b.layerName:"layer";this.b=b.layers?b.layers:null}y(Ov,Qr);Ov.prototype.V=function(){return"arraybuffer"}; Ov.prototype.Ba=function(b,c){var d=this.b,e=new yp(b),e=new zp.Si(e),f=[],g=this.a,h,k,m;for(m in e.layers)if(!d||-1!=d.indexOf(m)){h=e.layers[m];for(var n=0,p=h.length;nf?~(f<<1):f<<1;d="";e=0;for(f=b.length;e>=5;h=g+63;k+=String.fromCharCode(h);d+=k}return d} function sw(b,c){var d=c?c:1E5,e=[],f=0,g=0,h,k;h=0;for(k=b.length;hm?(e.push(f),g=f=0):g+=5}f=0;for(g=e.length;f>1):h>>1;f=0;for(g=e.length;f=b||"."==b&&!(void 0!==c&&c)} function Uw(b){var c=b.c.charAt(++b.a),d={position:b.a,value:c};if("("==c)d.type=2;else if(","==c)d.type=5;else if(")"==c)d.type=3;else if(Ww(c)||"-"==c){d.type=4;var e,c=b.a,f=!1,g=!1;do{if("."==e)f=!0;else if("e"==e||"E"==e)g=!0;e=b.c.charAt(++b.a)}while(Ww(e,f)||!g&&("e"==e||"E"==e)||g&&("-"==e||"+"==e));b=parseFloat(b.c.substring(c,b.a--));d.value=b}else if("a"<=c&&"z">=c||"A"<=c&&"Z">=c){d.type=1;c=b.a;do e=b.c.charAt(++b.a);while("a"<=e&&"z">=e||"A"<=e&&"Z">=e);b=b.c.substring(c,b.a--).toUpperCase(); d.value=b}else{if(" "==c||"\t"==c||"\r"==c||"\n"==c)return Uw(b);if(""===c)d.type=6;else throw Error("Unexpected character: "+c);}return d}function Sw(b){this.c=b}l=Sw.prototype;l.match=function(b){if(b=this.a.type==b)this.a=Uw(this.c);return b}; function Vw(b){var c=b.a;if(b.match(1)){var d=c.value;if("GEOMETRYCOLLECTION"==d){a:{if(b.match(2)){c=[];do c.push(Vw(b));while(b.match(5));if(b.match(3)){b=c;break a}}else if(Xw(b)){b=[];break a}throw Error(Yw(b));}return new js(b)}var e=Zw[d],c=$w[d];if(!e||!c)throw Error("Invalid geometry type: "+d);b=e.call(b);return new c(b)}throw Error(Yw(b));}l.Ef=function(){if(this.match(2)){var b=ax(this);if(this.match(3))return b}else if(Xw(this))return null;throw Error(Yw(this));}; l.Df=function(){if(this.match(2)){var b=bx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};l.Ff=function(){if(this.match(2)){var b=cx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};l.Sn=function(){if(this.match(2)){var b;if(2==this.a.type)for(b=[this.Ef()];this.match(5);)b.push(this.Ef());else b=bx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));}; l.Rn=function(){if(this.match(2)){var b=cx(this);if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};l.Tn=function(){if(this.match(2)){for(var b=[this.Ff()];this.match(5);)b.push(this.Ff());if(this.match(3))return b}else if(Xw(this))return[];throw Error(Yw(this));};function ax(b){for(var c=[],d=0;2>d;++d){var e=b.a;if(b.match(4))c.push(e.value);else break}if(2==c.length)return c;throw Error(Yw(b));}function bx(b){for(var c=[ax(b)];b.match(5);)c.push(ax(b));return c} function cx(b){for(var c=[b.Df()];b.match(5);)c.push(b.Df());return c}function Xw(b){var c=1==b.a.type&&"EMPTY"==b.a.value;c&&(b.a=Uw(b.c));return c}function Yw(b){return"Unexpected `"+b.a.value+"` at position "+b.a.position+" in `"+b.c.c+"`"}var $w={POINT:D,LINESTRING:T,POLYGON:E,MULTIPOINT:$r,MULTILINESTRING:U,MULTIPOLYGON:V},Zw={POINT:Sw.prototype.Ef,LINESTRING:Sw.prototype.Df,POLYGON:Sw.prototype.Ff,MULTIPOINT:Sw.prototype.Sn,MULTILINESTRING:Sw.prototype.Rn,MULTIPOLYGON:Sw.prototype.Tn};function dx(){this.version=void 0}y(dx,Xv);dx.prototype.c=function(b){for(b=b.firstChild;b;b=b.nextSibling)if(1==b.nodeType)return this.a(b);return null};dx.prototype.a=function(b){this.version=b.getAttribute("version").trim();return(b=Q({version:this.version},ex,b,[]))?b:null};function fx(b,c){return Q({},gx,b,c)}function hx(b,c){return Q({},ix,b,c)}function jx(b,c){var d=fx(b,c);if(d){var e=[Cs(b.getAttribute("width")),Cs(b.getAttribute("height"))];d.size=e;return d}} function kx(b,c){return Q([],lx,b,c)} var mx=[null,"http://www.opengis.net/wms"],ex=P(mx,{Service:M(function(b,c){return Q({},nx,b,c)}),Capability:M(function(b,c){return Q({},ox,b,c)})}),ox=P(mx,{Request:M(function(b,c){return Q({},px,b,c)}),Exception:M(function(b,c){return Q([],qx,b,c)}),Layer:M(function(b,c){return Q({},rx,b,c)})}),nx=P(mx,{Name:M(W),Title:M(W),Abstract:M(W),KeywordList:M(kx),OnlineResource:M(Wv),ContactInformation:M(function(b,c){return Q({},sx,b,c)}),Fees:M(W),AccessConstraints:M(W),LayerLimit:M(Bs),MaxWidth:M(Bs), MaxHeight:M(Bs)}),sx=P(mx,{ContactPersonPrimary:M(function(b,c){return Q({},tx,b,c)}),ContactPosition:M(W),ContactAddress:M(function(b,c){return Q({},ux,b,c)}),ContactVoiceTelephone:M(W),ContactFacsimileTelephone:M(W),ContactElectronicMailAddress:M(W)}),tx=P(mx,{ContactPerson:M(W),ContactOrganization:M(W)}),ux=P(mx,{AddressType:M(W),Address:M(W),City:M(W),StateOrProvince:M(W),PostCode:M(W),Country:M(W)}),qx=P(mx,{Format:jp(W)}),rx=P(mx,{Name:M(W),Title:M(W),Abstract:M(W),KeywordList:M(kx),CRS:lp(W), EX_GeographicBoundingBox:M(function(b,c){var d=Q({},vx,b,c);if(d){var e=d.westBoundLongitude,f=d.southBoundLatitude,g=d.eastBoundLongitude,d=d.northBoundLatitude;return void 0===e||void 0===f||void 0===g||void 0===d?void 0:[e,f,g,d]}}),BoundingBox:lp(function(b){var c=[As(b.getAttribute("minx")),As(b.getAttribute("miny")),As(b.getAttribute("maxx")),As(b.getAttribute("maxy"))],d=[As(b.getAttribute("resx")),As(b.getAttribute("resy"))];return{crs:b.getAttribute("CRS"),extent:c,res:d}}),Dimension:lp(function(b){return{name:b.getAttribute("name"), units:b.getAttribute("units"),unitSymbol:b.getAttribute("unitSymbol"),"default":b.getAttribute("default"),multipleValues:xs(b.getAttribute("multipleValues")),nearestValue:xs(b.getAttribute("nearestValue")),current:xs(b.getAttribute("current")),values:W(b)}}),Attribution:M(function(b,c){return Q({},wx,b,c)}),AuthorityURL:lp(function(b,c){var d=fx(b,c);if(d)return d.name=b.getAttribute("name"),d}),Identifier:lp(W),MetadataURL:lp(function(b,c){var d=fx(b,c);if(d)return d.type=b.getAttribute("type"), d}),DataURL:lp(fx),FeatureListURL:lp(fx),Style:lp(function(b,c){return Q({},xx,b,c)}),MinScaleDenominator:M(zs),MaxScaleDenominator:M(zs),Layer:lp(function(b,c){var d=c[c.length-1],e=Q({},rx,b,c);if(e){var f=xs(b.getAttribute("queryable"));void 0===f&&(f=d.queryable);e.queryable=void 0!==f?f:!1;f=Cs(b.getAttribute("cascaded"));void 0===f&&(f=d.cascaded);e.cascaded=f;f=xs(b.getAttribute("opaque"));void 0===f&&(f=d.opaque);e.opaque=void 0!==f?f:!1;f=xs(b.getAttribute("noSubsets"));void 0===f&&(f=d.noSubsets); e.noSubsets=void 0!==f?f:!1;(f=As(b.getAttribute("fixedWidth")))||(f=d.fixedWidth);e.fixedWidth=f;(f=As(b.getAttribute("fixedHeight")))||(f=d.fixedHeight);e.fixedHeight=f;["Style","CRS","AuthorityURL"].forEach(function(b){if(b in d){var c=Tb(e,b),c=c.concat(d[b]);e[b]=c}});"EX_GeographicBoundingBox BoundingBox Dimension Attribution MinScaleDenominator MaxScaleDenominator".split(" ").forEach(function(b){b in e||(e[b]=d[b])});return e}})}),wx=P(mx,{Title:M(W),OnlineResource:M(Wv),LogoURL:M(jx)}),vx= P(mx,{westBoundLongitude:M(zs),eastBoundLongitude:M(zs),southBoundLatitude:M(zs),northBoundLatitude:M(zs)}),px=P(mx,{GetCapabilities:M(hx),GetMap:M(hx),GetFeatureInfo:M(hx)}),ix=P(mx,{Format:lp(W),DCPType:lp(function(b,c){return Q({},yx,b,c)})}),yx=P(mx,{HTTP:M(function(b,c){return Q({},zx,b,c)})}),zx=P(mx,{Get:M(fx),Post:M(fx)}),xx=P(mx,{Name:M(W),Title:M(W),Abstract:M(W),LegendURL:lp(jx),StyleSheetURL:M(fx),StyleURL:M(fx)}),gx=P(mx,{Format:M(W),OnlineResource:M(Wv)}),lx=P(mx,{Keyword:jp(W)});function Ax(){this.b="http://mapserver.gis.umn.edu/mapserver";this.a=new Hs;this.defaultDataProjection=null}y(Ax,ss); Ax.prototype.hc=function(b,c){var d={featureType:this.featureType,featureNS:this.featureNS};c&&Xb(d,Rr(this,b,c));var e=[d];b.namespaceURI=this.b;var f=So(b),d=[];if(0!==b.childNodes.length){if("msGMLOutput"==f)for(var g=0,h=b.childNodes.length;g=c[0]||b[1]<=c[1]&&b[3]>=c[1]?!0:de(b,this.ng,this)):!1}; l.Ul=function(b){var c=this.a,d=this.v[c]-this.v[0],e=b.slice();e[c]=e[0]+d;for(d=1;dg[2])&&(k*=Math.ceil((g[0]-d)/k),e=[e[0]+ k,e[1],e[2]+k,e[3]]);d=this.u[0];g=this.u[1];k=-1;n=Math.pow(this.U*h,2);q=[];r=[];h=0;for(m=Xx.length;h=c.l&&c.cancel())}this.C?this.C.call(this.A,this):this.B=!0;this.a||(b=new gy,hy(this),iy(this,!1,b))}};fy.prototype.u=function(b,c){this.i=!1;iy(this,b,c)};function iy(b,c,d){b.a=!0;b.b=d;b.f=!c;jy(b)} function hy(b){if(b.a){if(!b.B)throw new ky;b.B=!1}}fy.prototype.$c=function(b){hy(this);iy(this,!0,b)};function ly(b,c,d,e){b.g.push([c,d,e]);b.a&&jy(b)}fy.prototype.then=function(b,c,d){var e,f,g=new Hn(function(b,c){e=b;f=c});ly(this,e,function(b){b instanceof gy?g.cancel():f(b)});return g.then(b,c,d)};un(fy);function my(b){return eb(b.g,function(b){return ka(b[1])})} function jy(b){if(b.j&&b.a&&my(b)){var c=b.j,d=ny[c];d&&(ba.clearTimeout(d.wa),delete ny[c]);b.j=0}b.c&&(b.c.l--,delete b.c);for(var c=b.b,e=d=!1;b.g.length&&!b.i;){var f=b.g.shift(),g=f[0],h=f[1],f=f[2];if(g=b.f?h:g)try{var k=g.call(f||b.A,c);ca(k)&&(b.f=b.f&&(k==c||k instanceof Error),b.b=c=k);if(vn(c)||"function"===typeof ba.Promise&&c instanceof ba.Promise)e=!0,b.i=!0}catch(m){c=m,b.f=!0,my(b)||(d=!0)}}b.b=c;e&&(k=ra(b.u,b,!0),e=ra(b.u,b,!1),c instanceof fy?(ly(c,k,e),c.D=!0):c.then(k,e));d&& (c=new oy(c),ny[c.wa]=c,b.j=c.wa)}function ky(){xa.call(this)}y(ky,xa);ky.prototype.message="Deferred has already fired";ky.prototype.name="AlreadyCalledError";function gy(){xa.call(this)}y(gy,xa);gy.prototype.message="Deferred was canceled";gy.prototype.name="CanceledError";function oy(b){this.wa=ba.setTimeout(ra(this.c,this),0);this.a=b}oy.prototype.c=function(){delete ny[this.wa];throw this.a;};var ny={};function py(b,c){ca(b.name)?(this.name=b.name,this.code=qy[b.name]):(this.code=b.code,this.name=ry(b.code));xa.call(this,Ba("%s %s",this.name,c))}y(py,xa);function ry(b){var c=Pb(qy,function(c){return b==c});if(!ca(c))throw Error("Invalid code: "+b);return c}var qy={AbortError:3,EncodingError:5,InvalidModificationError:9,InvalidStateError:7,NotFoundError:1,NotReadableError:4,NoModificationAllowedError:6,PathExistsError:12,QuotaExceededError:10,SecurityError:2,SyntaxError:8,TypeMismatchError:11};function sy(b,c){vc.call(this,b.type,c)}y(sy,vc);function ty(){cd.call(this);this.ub=new FileReader;this.ub.onloadstart=ra(this.a,this);this.ub.onprogress=ra(this.a,this);this.ub.onload=ra(this.a,this);this.ub.onabort=ra(this.a,this);this.ub.onerror=ra(this.a,this);this.ub.onloadend=ra(this.a,this)}y(ty,cd);ty.prototype.getError=function(){return this.ub.error&&new py(this.ub.error,"reading file")};ty.prototype.a=function(b){this.o(new sy(b,this))};ty.prototype.X=function(){ty.da.X.call(this);delete this.ub}; function uy(b){var c=new fy;b.Qa("loadend",sa(function(b,c){var f=c.ub.result,g=c.getError();null==f||g?(hy(b),iy(b,!1,g)):b.$c(f);c.Ec()},c,b));return c};function vy(b){b=b?b:{};Ok.call(this,{handleEvent:ue});this.j=b.formatConstructors?b.formatConstructors:[];this.A=b.projection?Fe(b.projection):null;this.f=null;this.a=void 0}y(vy,Ok);vy.prototype.X=function(){this.a&&Zc(this.a);vy.da.X.call(this)};vy.prototype.i=function(b){b=b.a.dataTransfer.files;var c,d,e;c=0;for(d=b.length;cb.xa:b.f===Jy&&(e=b.a[0].length>b.xa,f=[b.a[0][0],b.a[0][b.a[0].length-2]]);if(e)for(var e=c.map,g=0,h=f.length;gb.pa,b.D(g,e);else if(b.f===Jy){g=b.a[0];g.push(d.slice());if(f=g.length>b.pa)b.l=g[0];b.D(b.a,e)}Sy(b);f&&b.md()}l.Ao=function(){var b=this.i.W(),c,d;this.f===Ly?(c=this.a,c.splice(-2,1),this.D(c,b)):this.f===Jy&&(c=this.a[0],c.splice(-2,1),d=this.A.W(),d.ma(c),this.D(this.a,b));0===c.length&&(this.l=null);Sy(this)}; l.md=function(){var b=Ty(this),c=this.a,d=b.W();this.f===Ly?(c.pop(),this.D(c,d)):this.f===Jy&&(c[0].pop(),c[0].push(c[0][0]),this.D(c,d));"MultiPoint"===this.T?b.La(new $r([c])):"MultiLineString"===this.T?b.La(new U([c])):"MultiPolygon"===this.T&&b.La(new V([c]));this.o(new Dy("drawend",b));this.fb&&this.fb.push(b);this.Db&&this.Db.Ad(b)};function Ty(b){b.l=null;var c=b.i;c&&(b.i=null,b.G=null,b.A=null,b.ga.fa().clear(!0));return c} l.bm=function(b){var c=b.W();this.i=b;this.a=c.Y();b=this.a[this.a.length-1];this.l=b.slice();this.a.push(b.slice());Sy(this);this.o(new Dy("drawstart",this.i))};l.xc=te;function Sy(b){var c=[];b.i&&c.push(b.i);b.A&&c.push(b.A);b.G&&c.push(b.G);b=b.ga.fa();b.clear(!0);b.Dc(c)}l.ki=function(){var b=this.u,c=this.b();b&&c||Ty(this);this.ga.setMap(c?b:null)}; function Iy(b){var c;"Point"===b||"MultiPoint"===b?c=Ky:"LineString"===b||"MultiLineString"===b?c=Ly:"Polygon"===b||"MultiPolygon"===b?c=Jy:"Circle"===b&&(c=Qy);return c}var Ky="Point",Ly="LineString",Jy="Polygon",Qy="Circle";function Uy(b,c,d){vc.call(this,b);this.features=c;this.mapBrowserPointerEvent=d}y(Uy,vc); function Vy(b){al.call(this,{handleDownEvent:Wy,handleDragEvent:Xy,handleEvent:Yy,handleUpEvent:Zy});this.pa=b.deleteCondition?b.deleteCondition:ze(Xk,Wk);this.va=this.f=null;this.ea=[0,0];this.D=this.U=!1;this.a=new Bp;this.G=void 0!==b.pixelTolerance?b.pixelTolerance:10;this.l=this.ga=!1;this.i=null;this.S=new H({source:new R({useSpatialIndex:!1,wrapX:!!b.wrapX}),style:b.style?b.style:$y(),updateWhileAnimating:!0,updateWhileInteracting:!0});this.T={Point:this.im,LineString:this.bh,LinearRing:this.bh, Polygon:this.jm,MultiPoint:this.gm,MultiLineString:this.fm,MultiPolygon:this.hm,GeometryCollection:this.em};this.A=b.features;this.A.forEach(this.zf,this);C(this.A,"add",this.cm,!1,this);C(this.A,"remove",this.dm,!1,this)}y(Vy,al);l=Vy.prototype;l.zf=function(b){var c=b.W();c.V()in this.T&&this.T[c.V()].call(this,b,c);(c=this.u)&&az(this,this.ea,c);C(b,"change",this.ah,!1,this)};function bz(b,c){b.D||(b.D=!0,b.o(new Uy("modifystart",b.A,c)))} function cz(b,c){dz(b,c);b.f&&0===b.A.$b()&&(b.S.fa().Qc(b.f),b.f=null);Yc(c,"change",b.ah,!1,b)}function dz(b,c){var d=b.a,e=[];d.forEach(function(b){c===b.feature&&e.push(b)});for(var f=e.length-1;0<=f;--f)d.remove(e[f])}l.setMap=function(b){this.S.setMap(b);Vy.da.setMap.call(this,b)};l.cm=function(b){this.zf(b.element)};l.ah=function(b){this.l||(b=b.target,cz(this,b),this.zf(b))};l.dm=function(b){cz(this,b.element)}; l.im=function(b,c){var d=c.Y(),d={feature:b,geometry:c,la:[d,d]};this.a.ya(c.J(),d)};l.gm=function(b,c){var d=c.Y(),e,f,g;f=0;for(g=d.length;fd?h[1]:h[0]);ez(b,k);d={};d[w(h)]=!0;c=1;for(m=g.length;cd&&(b.index+=f)})}function $y(){var b=hm();return function(){return b.Point}};function hz(b,c,d,e){vc.call(this,b);this.selected=c;this.deselected=d;this.mapBrowserEvent=e}y(hz,vc); function iz(b){Ok.call(this,{handleEvent:jz});b=b?b:{};this.C=b.condition?b.condition:Wk;this.l=b.addCondition?b.addCondition:te;this.D=b.removeCondition?b.removeCondition:te;this.G=b.toggleCondition?b.toggleCondition:Yk;this.A=b.multi?b.multi:!1;this.j=b.filter?b.filter:ue;var c;if(b.layers)if(ka(b.layers))c=b.layers;else{var d=b.layers;c=function(b){return vb(d,b)}}else c=ue;this.i=c;this.a={};this.f=new H({source:new R({useSpatialIndex:!1,features:b.features,wrapX:b.wrapX}),style:b.style?b.style: kz(),updateWhileAnimating:!0,updateWhileInteracting:!0});b=this.f.fa().b;C(b,"add",this.km,!1,this);C(b,"remove",this.nm,!1,this)}y(iz,Ok);l=iz.prototype;l.lm=function(){return this.f.fa().b};l.mm=function(b){b=w(b);return this.a[b]}; function jz(b){if(!this.C(b))return!0;var c=this.l(b),d=this.D(b),e=this.G(b),f=!c&&!d&&!e,g=b.map,h=this.f.fa().b,k=[],m=[],n=!1;if(f)g.od(b.pixel,function(b,c){if(!c||this.j(b,c)){m.push(b);var d=w(b);this.a[d]=c;return!this.A}},this,this.i),0f?h[1]:h[0],d=c.Oa(m),d=[Math.round(d[0]),Math.round(d[1])]);c=m;g&&(b.coordinate=c.slice(0,2),b.pixel=d);return bl.call(this,b)} function nz(){var b=Lb(this.A);b.length&&(b.forEach(this.ji,this),this.A={});return!1}function oz(b,c){return yd(this.S,b.la)-yd(this.S,c.la)};function pz(b,c,d){vc.call(this,b);this.features=c;this.coordinate=d}y(pz,vc);function qz(b){al.call(this,{handleDownEvent:rz,handleDragEvent:sz,handleMoveEvent:tz,handleUpEvent:uz});this.l=void 0;this.a=null;this.f=void 0!==b.features?b.features:null;this.i=null}y(qz,al);function rz(b){this.i=vz(this,b.pixel,b.map);return!this.a&&this.i?(this.a=b.coordinate,tz.call(this,b),this.o(new pz("translatestart",this.f,b.coordinate)),!0):!1} function uz(b){return this.a?(this.a=null,tz.call(this,b),this.o(new pz("translateend",this.f,b.coordinate)),!0):!1}function sz(b){if(this.a){b=b.coordinate;var c=b[0]-this.a[0],d=b[1]-this.a[1];if(this.f)this.f.forEach(function(b){var e=b.W();e.Oc(c,d);b.La(e)});else if(this.i){var e=this.i.W();e.Oc(c,d);this.i.La(e)}this.a=b;this.o(new pz("translating",this.f,b))}} function tz(b){var c=b.map.Lc();if(b=b.map.od(b.pixel,function(b){return b})){var d=!1;this.f&&vb(this.f.a,b)&&(d=!0);this.l=c.style.cursor;c.style.cursor=this.a?"-webkit-grabbing":d?"-webkit-grab":"pointer";c.style.cursor=this.a?d?"grab":"pointer":"grabbing"}else c.style.cursor=void 0!==this.l?this.l:"",this.l=void 0}function vz(b,c,d){var e=null;c=d.od(c,function(b){return b});b.f&&vb(b.f.a,c)&&(e=c);return e};function X(b){b=b?b:{};var c=Ub(b);delete c.gradient;delete c.radius;delete c.blur;delete c.shadow;delete c.weight;H.call(this,c);this.g=null;this.Z=void 0!==b.shadow?b.shadow:250;this.T=void 0;this.U=null;C(this,kd("gradient"),this.zk,!1,this);this.Wh(b.gradient?b.gradient:wz);this.Sh(void 0!==b.blur?b.blur:15);this.ih(void 0!==b.radius?b.radius:8);C(this,[kd("blur"),kd("radius")],this.Lg,!1,this);this.Lg();var d=b.weight?b.weight:"weight",e;ia(d)?e=function(b){return b.get(d)}:e=d;this.f(ra(function(b){b= e(b);b=void 0!==b?Sa(b,0,1):1;var c=255*b|0,d=this.U[c];d||(d=[new cm({image:new wk({opacity:b,src:this.T})})],this.U[c]=d);return d},this));this.set("renderOrder",null);C(this,"render",this.Rk,!1,this)}y(X,H);var wz=["#00f","#0ff","#0f0","#ff0","#f00"];l=X.prototype;l.tg=function(){return this.get("blur")};l.Ag=function(){return this.get("gradient")};l.hh=function(){return this.get("radius")}; l.zk=function(){for(var b=this.Ag(),c=Pi(1,256),d=c.createLinearGradient(0,0,1,256),e=1/(b.length-1),f=0,g=b.length;f=e)this.state=4;else if(this.u=new en(b,d,h,g,e*(void 0!==n?n:.5)),0===this.u.f.length)this.state=4;else if(this.l=Kh(c,e),d=gn(this.u),g&&(b.b?(d[1]=Sa(d[1],g[1],g[3]), d[3]=Sa(d[3],g[1],g[3])):d=oe(d,g)),ie(d))if(b=Fh(c,d,this.l),100>kg(b)*jg(b)){for(c=b.a;c<=b.f;c++)for(d=b.c;d<=b.b;d++)(n=m(this.l,c,d,k))&&this.c.push(n);0===this.c.length&&(this.state=4)}else this.state=3;else this.state=4}y(xz,wh);xz.prototype.X=function(){1==this.state&&(this.b.forEach(Zc),this.b=null);xz.da.X.call(this)};xz.prototype.Sa=function(b){if(void 0!==b){var c=w(b);if(c in this.g)return this.g[c];b=Qb(this.g)?this.j:this.j.cloneNode(!1);return this.g[c]=b}return this.j}; function yz(b){var c=[];b.c.forEach(function(b){b&&2==b.state&&c.push({extent:this.i.Aa(b.a),image:b.Sa()})},b);b.c.length=0;var d=b.a,e=d[0],f=b.B.Ha(e),g=ja(f)?f:f[0],f=ja(f)?f:f[1],e=b.B.$(e),h=b.i.$(b.l),d=b.B.Aa(d);b.j=dn(g,f,b.A,h,b.i.J(),e,d,b.u,c,b.C);b.state=2;xh(b)} xz.prototype.load=function(){if(0==this.state){this.state=1;xh(this);var b=0;this.b=[];this.c.forEach(function(c){var d=c.state;if(0==d||1==d){b++;var e;e=c.Qa("change",function(){var d=c.state;if(2==d||3==d||4==d)Zc(e),b--,0===b&&(this.b.forEach(Zc),this.b=null,yz(this))},!1,this);this.b.push(e)}},this);this.c.forEach(function(b){0==b.state&&b.load()});0===b&&yz(this)}};function zz(b,c){var d=c||{},e=d.document||document,f=Kg("SCRIPT"),g={Rh:f,yc:void 0},h=new fy(Az,g),k=null,m=null!=d.timeout?d.timeout:5E3;0Terms of Use'}); Oz.prototype.D=function(b){if(200!=b.statusCode||"OK"!=b.statusDescription||"ValidCredentials"!=b.authenticationResultCode||1!=b.resourceSets.length||1!=b.resourceSets[0].resources.length)Ah(this,"error");else{var c=b.brandLogoUri;-1==c.indexOf("https")&&(c=c.replace("http","https"));var d=b.resourceSets[0].resources[0],e=-1==this.g?d.zoomMax:this.g;b=Mh(this.f);var f=Oh({extent:b,minZoom:d.zoomMin,maxZoom:e,tileSize:d.imageWidth==d.imageHeight?d.imageWidth:[d.imageWidth,d.imageHeight]});this.tileGrid= f;var g=this.l;this.tileUrlFunction=Wp(d.imageUrlSubdomains.map(function(b){var c=[0,0,0],e=d.imageUrl.replace("{subdomain}",b).replace("{culture}",g);return function(b){if(b)return cg(b[0],b[1],-b[2]-1,c),e.replace("{quadkey}",eg(c))}}));if(d.imageryProviders){var h=Je(Fe("EPSG:4326"),this.f);b=d.imageryProviders.map(function(b){var c=b.attribution,d={};b.coverageAreas.forEach(function(b){var c=b.zoomMin,g=Math.min(b.zoomMax,e);b=b.bbox;b=re([b[1],b[0],b[3],b[2]],h);var k,m;for(k=c;k<=g;++k)m=k.toString(), c=Fh(f,b,k),m in d?d[m].push(c):d[m]=[c]});return new mg({html:c,tileRanges:d})});b.push(Pz);this.na(b)}this.U=c;Ah(this,"ready")}};function Qz(b){R.call(this,{attributions:b.attributions,extent:b.extent,logo:b.logo,projection:b.projection,wrapX:b.wrapX});this.G=void 0;this.ea=void 0!==b.distance?b.distance:20;this.D=[];this.C=b.source;this.C.H("change",Qz.prototype.va,this)}y(Qz,R);Qz.prototype.ga=function(){return this.C};Qz.prototype.Mc=function(b,c,d){this.C.Mc(b,c,d);c!==this.G&&(this.clear(),this.G=c,Rz(this),this.Dc(this.D))};Qz.prototype.va=function(){this.clear();Rz(this);this.Dc(this.D);this.s()}; function Rz(b){if(void 0!==b.G){b.D.length=0;for(var c=Od(),d=b.ea*b.G,e=b.C.ye(),f={},g=0,h=e.length;gk*d?h*g/(k*n):d*g/(m*n),SETVIEWCENTERX:f[0],SETVIEWCENTERY:f[1]};Xb(e,c);return lo(no([b],e))};l.Gm=function(b){this.g=null;this.b=b;this.s()};function Uz(b){var c=void 0!==b.attributions?b.attributions:null,d=b.imageExtent,e,f;void 0!==b.imageSize&&(e=le(d)/b.imageSize[1],f=[e]);var g=void 0!==b.crossOrigin?b.crossOrigin:null,h=void 0!==b.imageLoadFunction?b.imageLoadFunction:qn;kn.call(this,{attributions:c,logo:b.logo,projection:Fe(b.projection),resolutions:f});this.b=new $x(d,e,1,c,b.url,g,h);C(this.b,"change",this.D,!1,this)}y(Uz,kn);Uz.prototype.pd=function(b){return pe(b,this.b.J())?this.b:null};function Vz(b){b=b||{};kn.call(this,{attributions:b.attributions,logo:b.logo,projection:b.projection,resolutions:b.resolutions});this.pa=void 0!==b.crossOrigin?b.crossOrigin:null;this.i=b.url;this.T=void 0!==b.imageLoadFunction?b.imageLoadFunction:qn;this.g=b.params;this.u=!0;Wz(this);this.ga=b.serverType;this.xa=void 0!==b.hidpi?b.hidpi:!0;this.b=null;this.Z=[0,0];this.ea=0;this.l=void 0!==b.ratio?b.ratio:1.5}y(Vz,kn);var Xz=[101,101];l=Vz.prototype; l.Nm=function(b,c,d,e){if(void 0!==this.i){var f=ne(b,c,0,Xz),g={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetFeatureInfo",FORMAT:"image/png",TRANSPARENT:!0,QUERY_LAYERS:this.g.LAYERS};Xb(g,this.g,e);e=Math.floor((f[3]-b[1])/c);g[this.u?"I":"X"]=Math.floor((b[0]-f[0])/c);g[this.u?"J":"Y"]=e;return Yz(this,f,Xz,1,Fe(d),g)}};l.Pm=function(){return this.g}; l.pd=function(b,c,d,e){if(void 0===this.i)return null;c=ln(this,c);1==d||this.xa&&void 0!==this.ga||(d=1);b=b.slice();var f=(b[0]+b[2])/2,g=(b[1]+b[3])/2,h=c/d,k=ke(b)/h,h=le(b)/h,m=this.b;if(m&&this.ea==this.c&&m.$()==c&&m.b==d&&Xd(m.J(),b))return m;if(1!=this.l){var m=this.l*ke(b)/2,n=this.l*le(b)/2;b[0]=f-m;b[1]=g-n;b[2]=f+m;b[3]=g+n}f={SERVICE:"WMS",VERSION:"1.3.0",REQUEST:"GetMap",FORMAT:"image/png",TRANSPARENT:!0};Xb(f,this.g);this.Z[0]=Math.ceil(k*this.l);this.Z[1]=Math.ceil(h*this.l);e=Yz(this, b,this.Z,d,e,f);this.b=new $x(b,c,d,this.j,e,this.pa,this.T);this.ea=this.c;C(this.b,"change",this.D,!1,this);return this.b};l.Om=function(){return this.T}; function Yz(b,c,d,e,f,g){g[b.u?"CRS":"SRS"]=f.a;"STYLES"in b.g||(g.STYLES=new String(""));if(1!=e)switch(b.ga){case "geoserver":e=90*e+.5|0;g.FORMAT_OPTIONS="FORMAT_OPTIONS"in g?g.FORMAT_OPTIONS+(";dpi:"+e):"dpi:"+e;break;case "mapserver":g.MAP_RESOLUTION=90*e;break;case "carmentaserver":case "qgis":g.DPI=90*e}g.WIDTH=d[0];g.HEIGHT=d[1];d=f.g;var h;b.u&&"ne"==d.substr(0,2)?h=[c[1],c[0],c[3],c[2]]:h=c;g.BBOX=h.join(",");return lo(no([b.i],g))}l.Qm=function(){return this.i}; l.Rm=function(b){this.b=null;this.T=b;this.s()};l.Sm=function(b){b!=this.i&&(this.i=b,this.b=null,this.s())};l.Tm=function(b){Xb(this.g,b);Wz(this);this.b=null;this.s()};function Wz(b){b.u=0<=Pa(Sb(b.g,"VERSION","1.3.0"),"1.3")};function Zz(b){var c=void 0!==b.projection?b.projection:"EPSG:3857",d=void 0!==b.tileGrid?b.tileGrid:Oh({extent:Mh(c),maxZoom:b.maxZoom,tileSize:b.tileSize});Y.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,logo:b.logo,projection:c,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:d,tileLoadFunction:b.tileLoadFunction,tilePixelRatio:b.tilePixelRatio,tileUrlFunction:b.tileUrlFunction,url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0})}y(Zz,Y);function $z(b){b=b||{};var c;void 0!==b.attributions?c=b.attributions:c=[aA];Zz.call(this,{attributions:c,crossOrigin:void 0!==b.crossOrigin?b.crossOrigin:"anonymous",opaque:!0,maxZoom:void 0!==b.maxZoom?b.maxZoom:19,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png",wrapX:b.wrapX})}y($z,Zz);var aA=new mg({html:'© OpenStreetMap contributors.'});function bA(b){b=b||{};var c=cA[b.layer];this.g=b.layer;Zz.call(this,{attributions:c.attributions,crossOrigin:"anonymous",logo:"https://developer.mapquest.com/content/osm/mq_logo.png",maxZoom:c.maxZoom,reprojectionErrorThreshold:b.reprojectionErrorThreshold,opaque:!0,tileLoadFunction:b.tileLoadFunction,url:void 0!==b.url?b.url:"https://otile{1-4}-s.mqcdn.com/tiles/1.0.0/"+this.g+"/{z}/{x}/{y}.jpg"})}y(bA,Zz); var dA=new mg({html:'Tiles Courtesy of MapQuest'}),cA={osm:{maxZoom:19,attributions:[dA,aA]},sat:{maxZoom:18,attributions:[dA,new mg({html:"Portions Courtesy NASA/JPL-Caltech and U.S. Depart. of Agriculture, Farm Service Agency"})]},hyb:{maxZoom:18,attributions:[dA,aA]}};bA.prototype.l=function(){return this.g};(function(){var b={},c={ka:b};(function(d){if("object"===typeof b&&"undefined"!==typeof c)c.ka=d();else{var e;"undefined"!==typeof window?e=window:"undefined"!==typeof global?e=global:"undefined"!==typeof self?e=self:e=this;e.Bp=d()}})(function(){return function e(b,c,h){function k(n,q){if(!c[n]){if(!b[n]){var r="function"==typeof require&&require;if(!q&&r)return r(n,!0);if(m)return m(n,!0);r=Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r;}r=c[n]={ka:{}};b[n][0].call(r.ka,function(c){var e= b[n][1][c];return k(e?e:c)},r,r.ka,e,b,c,h)}return c[n].ka}for(var m="function"==typeof require&&require,n=0;nthis.bj;)this.Yc.shift().$c(null,null)};m.prototype.eg=function(){if(0===this.Qd&&0Stamen Design, under CC BY 3.0.'}),aA];function qA(b){b=b||{};var c=void 0!==b.params?b.params:{};Y.call(this,{attributions:b.attributions,crossOrigin:b.crossOrigin,logo:b.logo,projection:b.projection,reprojectionErrorThreshold:b.reprojectionErrorThreshold,tileGrid:b.tileGrid,tileLoadFunction:b.tileLoadFunction,tileUrlFunction:ra(this.G,this),url:b.url,urls:b.urls,wrapX:void 0!==b.wrapX?b.wrapX:!0});this.g=c;this.l=Od()}y(qA,Y);qA.prototype.D=function(){return this.g}; qA.prototype.Pb=function(b,c,d){b=qA.da.Pb.call(this,b,c,d);return 1==c?b:nd(b,c,this.b)}; qA.prototype.G=function(b,c,d){var e=this.tileGrid;e||(e=this.hb(d));if(!(e.a.length<=b[0])){var f=e.Aa(b,this.l),g=od(e.Ha(b[0]),this.b);1!=c&&(g=nd(g,c,this.b));e={F:"image",FORMAT:"PNG32",TRANSPARENT:!0};Xb(e,this.g);var h=this.urls;h?(d=d.a.split(":").pop(),e.SIZE=g[0]+","+g[1],e.BBOX=f.join(","),e.BBOXSR=d,e.IMAGESR=d,e.DPI=Math.round(90*c),b=1==h.length?h[0]:h[pd((b[1]<g||e>g;)f.push([Math.ceil(d/g),Math.ceil(e/g)]),g+=g;break;case "truncated":for(;d>g||e>g;)f.push([Math.ceil(d/g),Math.ceil(e/g)]),d>>=1,e>>=1}f.push([1,1]);f.reverse();for(var g=[1],h=[0],e=1,d=f.length;ethis.b||d+this.a>this.b)return null;e=KA(this,!1,b,c,d,e,g);if(!e)return null;b=KA(this,!0,b,c,d,void 0!==f?f:ve,g);return{offsetX:e.offsetX,offsetY:e.offsetY,image:e.image,Mg:b.image}}; function KA(b,c,d,e,f,g,h){var k=c?b.j:b.g,m,n,p;n=0;for(p=k.length;n=c+this.a&&g.height>=d+this.a)return k={offsetX:g.x+this.a,offsetY:g.y+this.a,image:this.b},this.f[b]=k,e.call(f,this.g,g.x+this.a,g.y+this.a),b=h,c=c+this.a,d=d+this.a,f=e=void 0,g.width-c>g.height-d?(e={x:g.x+c,y:g.y,width:g.width-c,height:g.height},f={x:g.x,y:g.y+d,width:c,height:g.height-d},LA(this,b,e,f)):(e={x:g.x+c,y:g.y,width:g.width-c,height:d},f={x:g.x,y:g.y+d,width:g.width,height:g.height- d},LA(this,b,e,f)),k;return null};function LA(b,c,d,e){c=[c,1];0f&&(f=0);g=d.TileMatrixSetLink[f].TileMatrixSet; var h=d.Format[0];"format"in c&&(h=c.format);f=gb(d.Style,function(b){return"style"in c?b.Title==c.style:b.isDefault});0>f&&(f=0);f=d.Style[f].Identifier;var k={};"Dimension"in d&&d.Dimension.forEach(function(b){var c=b.Identifier,d=b.Default;void 0===d&&(d=b.Value[0]);k[c]=d});var m=fb(b.Contents.TileMatrixSet,function(b){return b.Identifier==g}),n;n="projection"in c?Fe(c.projection):Fe(m.SupportedCRS.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/,"$1:$3"));var p=d.WGS84BoundingBox,q,r;void 0!==p&& (r=Fe("EPSG:4326").J(),r=p[0]==r[0]&&p[2]==r[2],q=af(p,"EPSG:4326",n),(p=n.J())&&(Xd(p,q)||(q=void 0)));var m=EA(m,q),t=[];q=c.requestEncoding;q=void 0!==q?q:"";if(b.hasOwnProperty("OperationsMetadata")&&b.OperationsMetadata.hasOwnProperty("GetTile")&&0!==q.indexOf("REST"))for(var d=b.OperationsMetadata.GetTile.DCP.HTTP.Get,p=0,x=d.length;p 0) { this.content[0] = end; this.sinkDown(0); } return result; }, remove: function(node) { var length = this.content.length; // To remove a value, we must search through the array to find // it. for (var i = 0; i < length; i++) { if (this.content[i] != node) continue; // When it is found, the process seen in 'pop' is repeated // to fill up the hole. var end = this.content.pop(); // If the element we popped was the one we needed to remove, // we're done. if (i == length - 1) break; // Otherwise, we replace the removed element with the popped // one, and allow it to float up or sink down as appropriate. this.content[i] = end; this.bubbleUp(i); this.sinkDown(i); break; } }, size: function() { return this.content.length; }, bubbleUp: function(n) { // Fetch the element that has to be moved. var element = this.content[n], score = this.scoreFunction(element); // When at 0, an element can not go up any further. while (n > 0) { // Compute the parent element's index, and fetch it. var parentN = Math.floor((n + 1) / 2) - 1, parent = this.content[parentN]; // If the parent has a lesser score, things are in order and we // are done. if (score >= this.scoreFunction(parent)) break; // Otherwise, swap the parent with the current element and // continue. this.content[parentN] = element; this.content[n] = parent; n = parentN; } }, sinkDown: function(n) { // Look up the target element and its score. var length = this.content.length, element = this.content[n], elemScore = this.scoreFunction(element); while(true) { // Compute the indices of the child elements. var child2N = (n + 1) * 2, child1N = child2N - 1; // This is used to store the new position of the element, // if any. var swap = null; // If the first child exists (is inside the array)... if (child1N < length) { // Look it up and compute its score. var child1 = this.content[child1N], child1Score = this.scoreFunction(child1); // If the score is less than our element's, we need to swap. if (child1Score < elemScore) swap = child1N; } // Do the same checks for the other child. if (child2N < length) { var child2 = this.content[child2N], child2Score = this.scoreFunction(child2); if (child2Score < (swap == null ? elemScore : child1Score)) swap = child2N; } // No need to swap further, we are done. if (swap == null) break; // Otherwise, swap and continue. this.content[n] = this.content[swap]; this.content[swap] = element; n = swap; } } }; ================================================ FILE: libs/other/stats.js ================================================ // stats.js - // @author mrdoob http://github.com/mrdoob/stats.js // The MIT License // // Copyright (c) 2009-2016 stats.js author mrdoob / http://mrdoob.com/ // // 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. */ var Stats = function () { this.fps = 0; var mode = 0; var container = document.createElement( 'div' ); container.style.cssText = 'position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000'; container.addEventListener( 'click', function ( event ) { event.preventDefault(); showPanel( ++ mode % container.children.length ); }, false ); // function addPanel( panel ) { container.appendChild( panel.dom ); return panel; } function showPanel( id ) { for ( var i = 0; i < container.children.length; i ++ ) { container.children[ i ].style.display = i === id ? 'block' : 'none'; } mode = id; } // var beginTime = ( performance || Date ).now(), prevTime = beginTime, frames = 0; var fpsPanel = addPanel( new Stats.Panel( 'FPS', '#0ff', '#002' ) ); var msPanel = addPanel( new Stats.Panel( 'MS', '#0f0', '#020' ) ); if ( self.performance && self.performance.memory ) { var memPanel = addPanel( new Stats.Panel( 'MB', '#f08', '#201' ) ); } showPanel( 0 ); return { REVISION: 16, dom: container, addPanel: addPanel, showPanel: showPanel, begin: function () { beginTime = ( performance || Date ).now(); }, end: function () { frames ++; var time = ( performance || Date ).now(); msPanel.update( time - beginTime, 200 ); if ( time > prevTime + 3000 ) { this.fps = ( frames * 1000 ) / ( time - prevTime ); fpsPanel.update( this.fps, 100 ); prevTime = time; frames = 0; if ( memPanel ) { var memory = performance.memory; memPanel.update( memory.usedJSHeapSize / 1048576, memory.jsHeapSizeLimit / 1048576 ); } } return time; }, update: function () { beginTime = this.end(); }, // Backwards Compatibility domElement: container, setMode: showPanel }; }; Stats.Panel = function ( name, fg, bg ) { var min = Infinity, max = 0, round = Math.round; var PR = round( window.devicePixelRatio || 1 ); var WIDTH = 80 * PR, HEIGHT = 48 * PR, TEXT_X = 3 * PR, TEXT_Y = 2 * PR, GRAPH_X = 3 * PR, GRAPH_Y = 15 * PR, GRAPH_WIDTH = 74 * PR, GRAPH_HEIGHT = 30 * PR; var canvas = document.createElement( 'canvas' ); canvas.width = WIDTH; canvas.height = HEIGHT; canvas.style.cssText = 'width:80px;height:48px'; var context = canvas.getContext( '2d' ); context.font = 'bold ' + ( 9 * PR ) + 'px Helvetica,Arial,sans-serif'; context.textBaseline = 'top'; context.fillStyle = bg; context.fillRect( 0, 0, WIDTH, HEIGHT ); context.fillStyle = fg; context.fillText( name, TEXT_X, TEXT_Y ); context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT ); context.fillStyle = bg; context.globalAlpha = 0.9; context.fillRect( GRAPH_X, GRAPH_Y, GRAPH_WIDTH, GRAPH_HEIGHT ); return { dom: canvas, update: function ( value, maxValue ) { min = Math.min( min, value ); max = Math.max( max, value ); context.fillStyle = bg; context.globalAlpha = 1; context.fillRect( 0, 0, WIDTH, GRAPH_Y ); context.fillStyle = fg; context.fillText( round( value ) + ' ' + name + ' (' + round( min ) + '-' + round( max ) + ')', TEXT_X, TEXT_Y ); context.drawImage( canvas, GRAPH_X + PR, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT, GRAPH_X, GRAPH_Y, GRAPH_WIDTH - PR, GRAPH_HEIGHT ); context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, GRAPH_HEIGHT ); context.fillStyle = bg; context.globalAlpha = 0.9; context.fillRect( GRAPH_X + GRAPH_WIDTH - PR, GRAPH_Y, PR, round( ( 1 - ( value / maxValue ) ) * GRAPH_HEIGHT ) ); } }; }; if ( typeof module === 'object' ) { module.exports = Stats; } ================================================ FILE: libs/plasio/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2014 Uday Verma, uday.karan@gmail.com 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. ================================================ FILE: libs/plasio/js/laslaz.js ================================================ // laslaz.js // LAS/LAZ loading // //var common = require("./common"), // Promise = require("bluebird"); (function(scope) { "use strict"; var pointFormatReaders = { 0: function(dv) { return { "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], "intensity": dv.getUint16(12, true), "classification": dv.getUint8(16, true) }; }, 1: function(dv) { return { "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], "intensity": dv.getUint16(12, true), "classification": dv.getUint8(16, true) }; }, 2: function(dv) { return { "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], "intensity": dv.getUint16(12, true), "classification": dv.getUint8(16, true), "color": [dv.getUint16(20, true), dv.getUint16(22, true), dv.getUint16(24, true)] }; }, 3: function(dv) { return { "position": [ dv.getInt32(0, true), dv.getInt32(4, true), dv.getInt32(8, true)], "intensity": dv.getUint16(12, true), "classification": dv.getUint8(16, true), "color": [dv.getUint16(28, true), dv.getUint16(30, true), dv.getUint16(32, true)] }; } }; function readAs(buf, Type, offset, count) { count = (count === undefined || count === 0 ? 1 : count); var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count); var r = new Type(sub); if (count === undefined || count === 1) return r[0]; var ret = []; for (var i = 0 ; i < count ; i ++) { ret.push(r[i]); } return ret; } function parseLASHeader(arraybuffer) { var o = {}; o.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3); o.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8); o.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1); o.pointsCount = readAs(arraybuffer, Uint32Array, 32*3 + 11); var start = 32*3 + 35; o.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24; // 8*3 o.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24; var bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48; // 8*6; o.maxs = [bounds[0], bounds[2], bounds[4]]; o.mins = [bounds[1], bounds[3], bounds[5]]; return o; } var msgIndex = 0; var waitHandlers = {}; // This method is scope-wide since the nacl module uses this fuction to notify // us of events scope.handleMessage = function(message_event) { var msg = message_event.data; var resolver = waitHandlers[msg.id]; delete waitHandlers[msg.id]; // call the callback in a separate context, make sure we've cleaned our // state out before the callback is invoked since it may queue more doExchanges setTimeout(function() { if (msg.error) return resolver.reject(new Error(msg.message || "Unknown Error")); if (msg.hasOwnProperty('count') && msg.hasOwnProperty('hasMoreData')) { return resolver.resolve({ buffer: msg.result, count: msg.count, hasMoreData: msg.hasMoreData}); } resolver.resolve(msg.result); }, 0); }; var doDataExchange = function(cmd, callback) { cmd.id = msgIndex.toString(); msgIndex ++; var resolver = Promise.defer(); waitHandlers[cmd.id] = resolver; nacl_module.postMessage(cmd); return resolver.promise.cancellable(); }; // LAS Loader // Loads uncompressed files // var LASLoader = function(arraybuffer) { this.arraybuffer = arraybuffer; }; LASLoader.prototype.open = function() { // nothing needs to be done to open this file // this.readOffset = 0; return new Promise(function(res, rej) { setTimeout(res, 0); }); }; LASLoader.prototype.getHeader = function() { var o = this; return new Promise(function(res, rej) { setTimeout(function() { o.header = parseLASHeader(o.arraybuffer); res(o.header); }, 0); }); }; LASLoader.prototype.readData = function(count, offset, skip) { var o = this; return new Promise(function(res, rej) { setTimeout(function() { if (!o.header) return rej(new Error("Cannot start reading data till a header request is issued")); var start; if (skip <= 1) { count = Math.min(count, o.header.pointsCount - o.readOffset); start = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize; var end = start + count * o.header.pointsStructSize; res({ buffer: o.arraybuffer.slice(start, end), count: count, hasMoreData: o.readOffset + count < o.header.pointsCount}); o.readOffset += count; } else { var pointsToRead = Math.min(count * skip, o.header.pointsCount - o.readOffset); var bufferSize = Math.ceil(pointsToRead / skip); var pointsRead = 0; var buf = new Uint8Array(bufferSize * o.header.pointsStructSize); for (var i = 0 ; i < pointsToRead ; i ++) { if (i % skip === 0) { start = o.header.pointsOffset + o.readOffset * o.header.pointsStructSize; var src = new Uint8Array(o.arraybuffer, start, o.header.pointsStructSize); buf.set(src, pointsRead * o.header.pointsStructSize); pointsRead ++; } o.readOffset ++; } res({ buffer: buf.buffer, count: pointsRead, hasMoreData: o.readOffset < o.header.pointsCount }); } }, 0); }); }; LASLoader.prototype.close = function() { var o = this; return new Promise(function(res, rej) { o.arraybuffer = null; setTimeout(res, 0); }); }; // LAZ Loader // Uses NaCL module to load LAZ files // var LAZLoader = function(arraybuffer) { this.arraybuffer = arraybuffer; let workerPath = Potree.scriptPath + "/workers/LASLAZWorker.js"; this.ww = Potree.workerPool.getWorker(workerPath); this.nextCB = null; var o = this; this.ww.onmessage = function(e) { if (o.nextCB !== null) { o.nextCB(e.data); o.nextCB = null; } }; this.dorr = function(req, cb) { o.nextCB = cb; o.ww.postMessage(req); }; }; LAZLoader.prototype.open = function() { // nothing needs to be done to open this file // var o = this; return new Promise(function(res, rej) { o.dorr({type:"open", arraybuffer: o.arraybuffer}, function(r) { if (r.status !== 1) return rej(new Error("Failed to open file")); res(true); }); }); }; LAZLoader.prototype.getHeader = function() { var o = this; return new Promise(function(res, rej) { o.dorr({type:'header'}, function(r) { if (r.status !== 1) return rej(new Error("Failed to get header")); res(r.header); }); }); }; LAZLoader.prototype.readData = function(count, offset, skip) { var o = this; return new Promise(function(res, rej) { o.dorr({type:'read', count: count, offset: offset, skip: skip}, function(r) { if (r.status !== 1) return rej(new Error("Failed to read data")); res({ buffer: r.buffer, count: r.count, hasMoreData: r.hasMoreData }); }); }); }; LAZLoader.prototype.close = function() { var o = this; return new Promise(function(res, rej) { o.dorr({type:'close'}, function(r) { let workerPath = Potree.scriptPath + "/workers/LASLAZWorker.js"; Potree.workerPool.returnWorker(workerPath, o.ww); if (r.status !== 1) return rej(new Error("Failed to close file")); res(true); }); }); }; // A single consistent interface for loading LAS/LAZ files var LASFile = function(arraybuffer) { this.arraybuffer = arraybuffer; this.determineVersion(); if (this.version > 12) throw new Error("Only file versions <= 1.2 are supported at this time"); this.determineFormat(); if (pointFormatReaders[this.formatId] === undefined) throw new Error("The point format ID is not supported"); this.loader = this.isCompressed ? new LAZLoader(this.arraybuffer) : new LASLoader(this.arraybuffer); }; LASFile.prototype.determineFormat = function() { var formatId = readAs(this.arraybuffer, Uint8Array, 32*3+8); var bit_7 = (formatId & 0x80) >> 7; var bit_6 = (formatId & 0x40) >> 6; if (bit_7 === 1 && bit_6 === 1) throw new Error("Old style compression not supported"); this.formatId = formatId & 0x3f; this.isCompressed = (bit_7 === 1 || bit_6 === 1); }; LASFile.prototype.determineVersion = function() { var ver = new Int8Array(this.arraybuffer, 24, 2); this.version = ver[0] * 10 + ver[1]; this.versionAsString = ver[0] + "." + ver[1]; }; LASFile.prototype.open = function() { return this.loader.open(); }; LASFile.prototype.getHeader = function() { return this.loader.getHeader(); }; LASFile.prototype.readData = function(count, start, skip) { return this.loader.readData(count, start, skip); }; LASFile.prototype.close = function() { return this.loader.close(); }; // Decodes LAS records into points // var LASDecoder = function(buffer, pointFormatID, pointSize, pointsCount, scale, offset, mins, maxs) { this.arrayb = buffer; this.decoder = pointFormatReaders[pointFormatID]; this.pointsCount = pointsCount; this.pointSize = pointSize; this.scale = scale; this.offset = offset; this.mins = mins; this.maxs = maxs; }; LASDecoder.prototype.getPoint = function(index) { if (index < 0 || index >= this.pointsCount) throw new Error("Point index out of range"); var dv = new DataView(this.arrayb, index * this.pointSize, this.pointSize); return this.decoder(dv); }; // NACL Module support // Called by the common.js module. // //window.startNaCl = function(name, tc, config, width, height) { // // check browser support for nacl // // // if(!common.browserSupportsNaCl()) { // return $.event.trigger({ // type: "plasio.nacl.error", // message: "NaCl support is not available" // }); // } // navigator.webkitPersistentStorage.requestQuota(2048 * 2048, function(bytes) { // common.updateStatus( // 'Allocated ' + bytes + ' bytes of persistant storage.'); // common.attachDefaultListeners(); // common.createNaClModule(name, tc, config, width, height); // }, // function(e) { // $.event.trigger({ // type: "plasio.nacl.error", // message: "Could not allocate persistant storage" // }); // }); // $(document).on("plasio.nacl.available", function() { // scope.LASModuleWasLoaded = true; // }); //}; scope.LAZLoader = LAZLoader; scope.LASLoader = LASLoader; scope.LASFile = LASFile; scope.LASDecoder = LASDecoder; scope.LASModuleWasLoaded = false; //})(module.exports); })(this); ================================================ FILE: libs/plasio/vendor/bluebird.js ================================================ /** * bluebird build version 1.0.8 * Features enabled: core, timers, race, any, call_get, filter, generators, map, nodeify, promisify, props, reduce, settle, some, progress, cancel, synchronous_inspection */ /** * @preserve Copyright (c) 2014 Petka Antonov * * 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. * */ !function(e){"object"==typeof exports?module.exports=e():"function"==typeof define&&define.amd?define(e):"undefined"!=typeof window?window.Promise=e():"undefined"!=typeof global?global.Promise=e():"undefined"!=typeof self&&(self.Promise=e())}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o * * 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. * */ "use strict"; module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) { var SomePromiseArray = require("./some_promise_array.js")(PromiseArray); var ASSERT = require("./assert.js"); function Promise$_Any(promises, useBound, caller) { var ret = Promise$_CreatePromiseArray( promises, SomePromiseArray, caller, useBound === true && promises._isBound() ? promises._boundTo : void 0 ); var promise = ret.promise(); if (promise.isRejected()) { return promise; } ret.setHowMany(1); ret.setUnwrap(); ret.init(); return promise; } Promise.any = function Promise$Any(promises) { return Promise$_Any(promises, false, Promise.any); }; Promise.prototype.any = function Promise$any() { return Promise$_Any(this, true, this.any); }; }; },{"./assert.js":2,"./some_promise_array.js":35}],2:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = (function(){ var AssertionError = (function() { function AssertionError(a) { this.constructor$(a); this.message = a; this.name = "AssertionError"; } AssertionError.prototype = new Error(); AssertionError.prototype.constructor = AssertionError; AssertionError.prototype.constructor$ = Error; return AssertionError; })(); return function assert(boolExpr, message) { if (boolExpr === true) return; var ret = new AssertionError(message); if (Error.captureStackTrace) { Error.captureStackTrace(ret, assert); } if (console && console.error) { console.error(ret.stack + ""); } throw ret; }; })(); },{}],3:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var ASSERT = require("./assert.js"); var schedule = require("./schedule.js"); var Queue = require("./queue.js"); var errorObj = require("./util.js").errorObj; var tryCatch1 = require("./util.js").tryCatch1; function Async() { this._isTickUsed = false; this._length = 0; this._lateBuffer = new Queue(); this._functionBuffer = new Queue(25000 * 3); var self = this; this.consumeFunctionBuffer = function Async$consumeFunctionBuffer() { self._consumeFunctionBuffer(); }; } Async.prototype.haveItemsQueued = function Async$haveItemsQueued() { return this._length > 0; }; Async.prototype.invokeLater = function Async$invokeLater(fn, receiver, arg) { this._lateBuffer.push(fn, receiver, arg); this._queueTick(); }; Async.prototype.invoke = function Async$invoke(fn, receiver, arg) { var functionBuffer = this._functionBuffer; functionBuffer.push(fn, receiver, arg); this._length = functionBuffer.length(); this._queueTick(); }; Async.prototype._consumeFunctionBuffer = function Async$_consumeFunctionBuffer() { var functionBuffer = this._functionBuffer; while(functionBuffer.length() > 0) { var fn = functionBuffer.shift(); var receiver = functionBuffer.shift(); var arg = functionBuffer.shift(); fn.call(receiver, arg); } this._reset(); this._consumeLateBuffer(); }; Async.prototype._consumeLateBuffer = function Async$_consumeLateBuffer() { var buffer = this._lateBuffer; while(buffer.length() > 0) { var fn = buffer.shift(); var receiver = buffer.shift(); var arg = buffer.shift(); var res = tryCatch1(fn, receiver, arg); if (res === errorObj) { this._queueTick(); throw res.e; } } }; Async.prototype._queueTick = function Async$_queue() { if (!this._isTickUsed) { schedule(this.consumeFunctionBuffer); this._isTickUsed = true; } }; Async.prototype._reset = function Async$_reset() { this._isTickUsed = false; this._length = 0; }; module.exports = new Async(); },{"./assert.js":2,"./queue.js":28,"./schedule.js":31,"./util.js":39}],4:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var Promise = require("./promise.js")(); module.exports = Promise; },{"./promise.js":20}],5:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise) { Promise.prototype.call = function Promise$call(propertyName) { var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} return this._then(function(obj) { return obj[propertyName].apply(obj, args); }, void 0, void 0, void 0, void 0, this.call ); }; function Promise$getter(obj) { var prop = typeof this === "string" ? this : ("" + this); return obj[prop]; } Promise.prototype.get = function Promise$get(propertyName) { return this._then( Promise$getter, void 0, void 0, propertyName, void 0, this.get ); }; }; },{}],6:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, INTERNAL) { var errors = require("./errors.js"); var async = require("./async.js"); var ASSERT = require("./assert.js"); var CancellationError = errors.CancellationError; var SYNC_TOKEN = {}; Promise.prototype._cancel = function Promise$_cancel() { if (!this.isCancellable()) return this; var parent; if ((parent = this._cancellationParent) !== void 0 && parent.isCancellable()) { parent.cancel(SYNC_TOKEN); return; } var err = new CancellationError(); this._attachExtraTrace(err); this._rejectUnchecked(err); }; Promise.prototype.cancel = function Promise$cancel(token) { if (!this.isCancellable()) return this; if (token === SYNC_TOKEN) { this._cancel(); return this; } async.invokeLater(this._cancel, this, void 0); return this; }; Promise.prototype.cancellable = function Promise$cancellable() { if (this._cancellable()) return this; this._setCancellable(); this._cancellationParent = void 0; return this; }; Promise.prototype.uncancellable = function Promise$uncancellable() { var ret = new Promise(INTERNAL); ret._setTrace(this.uncancellable, this); ret._follow(this); ret._unsetCancellable(); if (this._isBound()) ret._setBoundTo(this._boundTo); return ret; }; Promise.prototype.fork = function Promise$fork(didFulfill, didReject, didProgress) { var ret = this._then(didFulfill, didReject, didProgress, void 0, void 0, this.fork); ret._setCancellable(); ret._cancellationParent = void 0; return ret; }; }; },{"./assert.js":2,"./async.js":3,"./errors.js":10}],7:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function() { var ASSERT = require("./assert.js"); var inherits = require("./util.js").inherits; var defineProperty = require("./es5.js").defineProperty; var rignore = new RegExp( "\\b(?:[\\w.]*Promise(?:Array|Spawn)?\\$_\\w+|" + "tryCatch(?:1|2|Apply)|new \\w*PromiseArray|" + "\\w*PromiseArray\\.\\w*PromiseArray|" + "setTimeout|CatchFilter\\$_\\w+|makeNodePromisified|processImmediate|" + "process._tickCallback|nextTick|Async\\$\\w+)\\b" ); var rtraceline = null; var formatStack = null; var areNamesMangled = false; function formatNonError(obj) { var str; if (typeof obj === "function") { str = "[function " + (obj.name || "anonymous") + "]"; } else { str = obj.toString(); var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; if (ruselessToString.test(str)) { try { var newStr = JSON.stringify(obj); str = newStr; } catch(e) { } } if (str.length === 0) { str = "(empty array)"; } } return ("(<" + snip(str) + ">, no stack trace)"); } function snip(str) { var maxChars = 41; if (str.length < maxChars) { return str; } return str.substr(0, maxChars - 3) + "..."; } function CapturedTrace(ignoreUntil, isTopLevel) { if (!areNamesMangled) { } this.captureStackTrace(ignoreUntil, isTopLevel); } inherits(CapturedTrace, Error); CapturedTrace.prototype.captureStackTrace = function CapturedTrace$captureStackTrace(ignoreUntil, isTopLevel) { captureStackTrace(this, ignoreUntil, isTopLevel); }; CapturedTrace.possiblyUnhandledRejection = function CapturedTrace$PossiblyUnhandledRejection(reason) { if (typeof console === "object") { var message; if (typeof reason === "object" || typeof reason === "function") { var stack = reason.stack; message = "Possibly unhandled " + formatStack(stack, reason); } else { message = "Possibly unhandled " + String(reason); } if (typeof console.error === "function" || typeof console.error === "object") { console.error(message); } else if (typeof console.log === "function" || typeof console.error === "object") { console.log(message); } } }; areNamesMangled = CapturedTrace.prototype.captureStackTrace.name !== "CapturedTrace$captureStackTrace"; CapturedTrace.combine = function CapturedTrace$Combine(current, prev) { var curLast = current.length - 1; for (var i = prev.length - 1; i >= 0; --i) { var line = prev[i]; if (current[curLast] === line) { current.pop(); curLast--; } else { break; } } current.push("From previous event:"); var lines = current.concat(prev); var ret = []; for (var i = 0, len = lines.length; i < len; ++i) { if ((rignore.test(lines[i]) || (i > 0 && !rtraceline.test(lines[i])) && lines[i] !== "From previous event:") ) { continue; } ret.push(lines[i]); } return ret; }; CapturedTrace.isSupported = function CapturedTrace$IsSupported() { return typeof captureStackTrace === "function"; }; var captureStackTrace = (function stackDetection() { if (typeof Error.stackTraceLimit === "number" && typeof Error.captureStackTrace === "function") { rtraceline = /^\s*at\s*/; formatStack = function(stack, error) { if (typeof stack === "string") return stack; if (error.name !== void 0 && error.message !== void 0) { return error.name + ". " + error.message; } return formatNonError(error); }; var captureStackTrace = Error.captureStackTrace; return function CapturedTrace$_captureStackTrace( receiver, ignoreUntil) { captureStackTrace(receiver, ignoreUntil); }; } var err = new Error(); if (!areNamesMangled && typeof err.stack === "string" && typeof "".startsWith === "function" && (err.stack.startsWith("stackDetection@")) && stackDetection.name === "stackDetection") { defineProperty(Error, "stackTraceLimit", { writable: true, enumerable: false, configurable: false, value: 25 }); rtraceline = /@/; var rline = /[@\n]/; formatStack = function(stack, error) { if (typeof stack === "string") { return (error.name + ". " + error.message + "\n" + stack); } if (error.name !== void 0 && error.message !== void 0) { return error.name + ". " + error.message; } return formatNonError(error); }; return function captureStackTrace(o, fn) { var name = fn.name; var stack = new Error().stack; var split = stack.split(rline); var i, len = split.length; for (i = 0; i < len; i += 2) { if (split[i] === name) { break; } } split = split.slice(i + 2); len = split.length - 2; var ret = ""; for (i = 0; i < len; i += 2) { ret += split[i]; ret += "@"; ret += split[i + 1]; ret += "\n"; } o.stack = ret; }; } else { formatStack = function(stack, error) { if (typeof stack === "string") return stack; if ((typeof error === "object" || typeof error === "function") && error.name !== void 0 && error.message !== void 0) { return error.name + ". " + error.message; } return formatNonError(error); }; return null; } })(); return CapturedTrace; }; },{"./assert.js":2,"./es5.js":12,"./util.js":39}],8:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(NEXT_FILTER) { var util = require("./util.js"); var errors = require("./errors.js"); var tryCatch1 = util.tryCatch1; var errorObj = util.errorObj; var keys = require("./es5.js").keys; function CatchFilter(instances, callback, promise) { this._instances = instances; this._callback = callback; this._promise = promise; } function CatchFilter$_safePredicate(predicate, e) { var safeObject = {}; var retfilter = tryCatch1(predicate, safeObject, e); if (retfilter === errorObj) return retfilter; var safeKeys = keys(safeObject); if (safeKeys.length) { errorObj.e = new TypeError( "Catch filter must inherit from Error " + "or be a simple predicate function"); return errorObj; } return retfilter; } CatchFilter.prototype.doFilter = function CatchFilter$_doFilter(e) { var cb = this._callback; var promise = this._promise; var boundTo = promise._isBound() ? promise._boundTo : void 0; for (var i = 0, len = this._instances.length; i < len; ++i) { var item = this._instances[i]; var itemIsErrorType = item === Error || (item != null && item.prototype instanceof Error); if (itemIsErrorType && e instanceof item) { var ret = tryCatch1(cb, boundTo, e); if (ret === errorObj) { NEXT_FILTER.e = ret.e; return NEXT_FILTER; } return ret; } else if (typeof item === "function" && !itemIsErrorType) { var shouldHandle = CatchFilter$_safePredicate(item, e); if (shouldHandle === errorObj) { var trace = errors.canAttach(errorObj.e) ? errorObj.e : new Error(errorObj.e + ""); this._promise._attachExtraTrace(trace); e = errorObj.e; break; } else if (shouldHandle) { var ret = tryCatch1(cb, boundTo, e); if (ret === errorObj) { NEXT_FILTER.e = ret.e; return NEXT_FILTER; } return ret; } } } NEXT_FILTER.e = e; return NEXT_FILTER; }; return CatchFilter; }; },{"./errors.js":10,"./es5.js":12,"./util.js":39}],9:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var util = require("./util.js"); var ASSERT = require("./assert.js"); var isPrimitive = util.isPrimitive; var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver; module.exports = function(Promise) { var returner = function Promise$_returner() { return this; }; var thrower = function Promise$_thrower() { throw this; }; var wrapper = function Promise$_wrapper(value, action) { if (action === 1) { return function Promise$_thrower() { throw value; }; } else if (action === 2) { return function Promise$_returner() { return value; }; } }; Promise.prototype["return"] = Promise.prototype.thenReturn = function Promise$thenReturn(value) { if (wrapsPrimitiveReceiver && isPrimitive(value)) { return this._then( wrapper(value, 2), void 0, void 0, void 0, void 0, this.thenReturn ); } return this._then(returner, void 0, void 0, value, void 0, this.thenReturn); }; Promise.prototype["throw"] = Promise.prototype.thenThrow = function Promise$thenThrow(reason) { if (wrapsPrimitiveReceiver && isPrimitive(reason)) { return this._then( wrapper(reason, 1), void 0, void 0, void 0, void 0, this.thenThrow ); } return this._then(thrower, void 0, void 0, reason, void 0, this.thenThrow); }; }; },{"./assert.js":2,"./util.js":39}],10:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var global = require("./global.js"); var Objectfreeze = require("./es5.js").freeze; var util = require("./util.js"); var inherits = util.inherits; var notEnumerableProp = util.notEnumerableProp; var Error = global.Error; function markAsOriginatingFromRejection(e) { try { notEnumerableProp(e, "isAsync", true); } catch(ignore) {} } function originatesFromRejection(e) { if (e == null) return false; return ((e instanceof RejectionError) || e["isAsync"] === true); } function isError(obj) { return obj instanceof Error; } function canAttach(obj) { return isError(obj); } function subError(nameProperty, defaultMessage) { function SubError(message) { if (!(this instanceof SubError)) return new SubError(message); this.message = typeof message === "string" ? message : defaultMessage; this.name = nameProperty; if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } } inherits(SubError, Error); return SubError; } var TypeError = global.TypeError; if (typeof TypeError !== "function") { TypeError = subError("TypeError", "type error"); } var RangeError = global.RangeError; if (typeof RangeError !== "function") { RangeError = subError("RangeError", "range error"); } var CancellationError = subError("CancellationError", "cancellation error"); var TimeoutError = subError("TimeoutError", "timeout error"); function RejectionError(message) { this.name = "RejectionError"; this.message = message; this.cause = message; this.isAsync = true; if (message instanceof Error) { this.message = message.message; this.stack = message.stack; } else if (Error.captureStackTrace) { Error.captureStackTrace(this, this.constructor); } } inherits(RejectionError, Error); var key = "__BluebirdErrorTypes__"; var errorTypes = global[key]; if (!errorTypes) { errorTypes = Objectfreeze({ CancellationError: CancellationError, TimeoutError: TimeoutError, RejectionError: RejectionError }); notEnumerableProp(global, key, errorTypes); } module.exports = { Error: Error, TypeError: TypeError, RangeError: RangeError, CancellationError: errorTypes.CancellationError, RejectionError: errorTypes.RejectionError, TimeoutError: errorTypes.TimeoutError, originatesFromRejection: originatesFromRejection, markAsOriginatingFromRejection: markAsOriginatingFromRejection, canAttach: canAttach }; },{"./es5.js":12,"./global.js":16,"./util.js":39}],11:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise) { var TypeError = require('./errors.js').TypeError; function apiRejection(msg) { var error = new TypeError(msg); var ret = Promise.rejected(error); var parent = ret._peekContext(); if (parent != null) { parent._attachExtraTrace(error); } return ret; } return apiRejection; }; },{"./errors.js":10}],12:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ var isES5 = (function(){ "use strict"; return this === void 0; })(); if (isES5) { module.exports = { freeze: Object.freeze, defineProperty: Object.defineProperty, keys: Object.keys, getPrototypeOf: Object.getPrototypeOf, isArray: Array.isArray, isES5: isES5 }; } else { var has = {}.hasOwnProperty; var str = {}.toString; var proto = {}.constructor.prototype; function ObjectKeys(o) { var ret = []; for (var key in o) { if (has.call(o, key)) { ret.push(key); } } return ret; } function ObjectDefineProperty(o, key, desc) { o[key] = desc.value; return o; } function ObjectFreeze(obj) { return obj; } function ObjectGetPrototypeOf(obj) { try { return Object(obj).constructor.prototype; } catch (e) { return proto; } } function ArrayIsArray(obj) { try { return str.call(obj) === "[object Array]"; } catch(e) { return false; } } module.exports = { isArray: ArrayIsArray, keys: ObjectKeys, defineProperty: ObjectDefineProperty, freeze: ObjectFreeze, getPrototypeOf: ObjectGetPrototypeOf, isES5: isES5 }; } },{}],13:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise) { var ASSERT = require("./assert.js"); var isArray = require("./util.js").isArray; function Promise$_filter(booleans) { var values = this._settledValue; var len = values.length; var ret = new Array(len); var j = 0; for (var i = 0; i < len; ++i) { if (booleans[i]) ret[j++] = values[i]; } ret.length = j; return ret; } var ref = {ref: null}; Promise.filter = function Promise$Filter(promises, fn) { return Promise.map(promises, fn, ref) ._then(Promise$_filter, void 0, void 0, ref.ref, void 0, Promise.filter); }; Promise.prototype.filter = function Promise$filter(fn) { return this.map(fn, ref) ._then(Promise$_filter, void 0, void 0, ref.ref, void 0, this.filter); }; }; },{"./assert.js":2,"./util.js":39}],14:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ module.exports = function(Promise, NEXT_FILTER) { var util = require("./util.js"); var wrapsPrimitiveReceiver = util.wrapsPrimitiveReceiver; var isPrimitive = util.isPrimitive; var thrower = util.thrower; function returnThis() { return this; } function throwThis() { throw this; } function makeReturner(r) { return function Promise$_returner() { return r; }; } function makeThrower(r) { return function Promise$_thrower() { throw r; }; } function promisedFinally(ret, reasonOrValue, isFulfilled) { var useConstantFunction = wrapsPrimitiveReceiver && isPrimitive(reasonOrValue); if (isFulfilled) { return ret._then( useConstantFunction ? returnThis : makeReturner(reasonOrValue), thrower, void 0, reasonOrValue, void 0, promisedFinally); } else { return ret._then( useConstantFunction ? throwThis : makeThrower(reasonOrValue), thrower, void 0, reasonOrValue, void 0, promisedFinally); } } function finallyHandler(reasonOrValue) { var promise = this.promise; var handler = this.handler; var ret = promise._isBound() ? handler.call(promise._boundTo) : handler(); if (ret !== void 0) { var maybePromise = Promise._cast(ret, finallyHandler, void 0); if (Promise.is(maybePromise)) { return promisedFinally(maybePromise, reasonOrValue, promise.isFulfilled()); } } if (promise.isRejected()) { NEXT_FILTER.e = reasonOrValue; return NEXT_FILTER; } else { return reasonOrValue; } } Promise.prototype.lastly = Promise.prototype["finally"] = function Promise$finally(handler) { if (typeof handler !== "function") return this.then(); var promiseAndHandler = { promise: this, handler: handler }; return this._then(finallyHandler, finallyHandler, void 0, promiseAndHandler, void 0, this.lastly); }; }; },{"./util.js":39}],15:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, apiRejection, INTERNAL) { var PromiseSpawn = require("./promise_spawn.js")(Promise, INTERNAL); var errors = require("./errors.js"); var TypeError = errors.TypeError; var deprecated = require("./util.js").deprecated; Promise.coroutine = function Promise$Coroutine(generatorFunction) { if (typeof generatorFunction !== "function") { throw new TypeError("generatorFunction must be a function"); } var PromiseSpawn$ = PromiseSpawn; return function anonymous() { var generator = generatorFunction.apply(this, arguments); var spawn = new PromiseSpawn$(void 0, void 0, anonymous); spawn._generator = generator; spawn._next(void 0); return spawn.promise(); }; }; Promise.coroutine.addYieldHandler = PromiseSpawn.addYieldHandler; Promise.spawn = function Promise$Spawn(generatorFunction) { deprecated("Promise.spawn is deprecated. Use Promise.coroutine instead."); if (typeof generatorFunction !== "function") { return apiRejection("generatorFunction must be a function"); } var spawn = new PromiseSpawn(generatorFunction, this, Promise.spawn); var ret = spawn.promise(); spawn._run(Promise.spawn); return ret; }; }; },{"./errors.js":10,"./promise_spawn.js":24,"./util.js":39}],16:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = (function(){ if (typeof this !== "undefined") { return this; } if (typeof process !== "undefined" && typeof global !== "undefined" && typeof process.execPath === "string") { return global; } if (typeof window !== "undefined" && typeof document !== "undefined" && typeof navigator !== "undefined" && navigator !== null && typeof navigator.appName === "string") { if(window.wrappedJSObject !== undefined){ return window.wrappedJSObject; } return window; } })(); },{}],17:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function( Promise, Promise$_CreatePromiseArray, PromiseArray, apiRejection) { var ASSERT = require("./assert.js"); function Promise$_mapper(values) { var fn = this; var receiver = void 0; if (typeof fn !== "function") { receiver = fn.receiver; fn = fn.fn; } var shouldDefer = false; var ret = new Array(values.length); if (receiver === void 0) { for (var i = 0, len = values.length; i < len; ++i) { var value = fn(values[i], i, len); if (!shouldDefer) { var maybePromise = Promise._cast(value, Promise$_mapper, void 0); if (maybePromise instanceof Promise) { if (maybePromise.isFulfilled()) { ret[i] = maybePromise._settledValue; continue; } else { shouldDefer = true; } value = maybePromise; } } ret[i] = value; } } else { for (var i = 0, len = values.length; i < len; ++i) { var value = fn.call(receiver, values[i], i, len); if (!shouldDefer) { var maybePromise = Promise._cast(value, Promise$_mapper, void 0); if (maybePromise instanceof Promise) { if (maybePromise.isFulfilled()) { ret[i] = maybePromise._settledValue; continue; } else { shouldDefer = true; } value = maybePromise; } } ret[i] = value; } } return shouldDefer ? Promise$_CreatePromiseArray(ret, PromiseArray, Promise$_mapper, void 0).promise() : ret; } function Promise$_Map(promises, fn, useBound, caller, ref) { if (typeof fn !== "function") { return apiRejection("fn must be a function"); } if (useBound === true && promises._isBound()) { fn = { fn: fn, receiver: promises._boundTo }; } var ret = Promise$_CreatePromiseArray( promises, PromiseArray, caller, useBound === true && promises._isBound() ? promises._boundTo : void 0 ).promise(); if (ref !== void 0) { ref.ref = ret; } return ret._then( Promise$_mapper, void 0, void 0, fn, void 0, caller ); } Promise.prototype.map = function Promise$map(fn, ref) { return Promise$_Map(this, fn, true, this.map, ref); }; Promise.map = function Promise$Map(promises, fn, ref) { return Promise$_Map(promises, fn, false, Promise.map, ref); }; }; },{"./assert.js":2}],18:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise) { var util = require("./util.js"); var async = require("./async.js"); var ASSERT = require("./assert.js"); var tryCatch2 = util.tryCatch2; var tryCatch1 = util.tryCatch1; var errorObj = util.errorObj; function thrower(r) { throw r; } function Promise$_successAdapter(val, receiver) { var nodeback = this; var ret = tryCatch2(nodeback, receiver, null, val); if (ret === errorObj) { async.invokeLater(thrower, void 0, ret.e); } } function Promise$_errorAdapter(reason, receiver) { var nodeback = this; var ret = tryCatch1(nodeback, receiver, reason); if (ret === errorObj) { async.invokeLater(thrower, void 0, ret.e); } } Promise.prototype.nodeify = function Promise$nodeify(nodeback) { if (typeof nodeback == "function") { this._then( Promise$_successAdapter, Promise$_errorAdapter, void 0, nodeback, this._isBound() ? this._boundTo : null, this.nodeify ); } return this; }; }; },{"./assert.js":2,"./async.js":3,"./util.js":39}],19:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, isPromiseArrayProxy) { var ASSERT = require("./assert.js"); var util = require("./util.js"); var async = require("./async.js"); var errors = require("./errors.js"); var tryCatch1 = util.tryCatch1; var errorObj = util.errorObj; Promise.prototype.progressed = function Promise$progressed(handler) { return this._then(void 0, void 0, handler, void 0, void 0, this.progressed); }; Promise.prototype._progress = function Promise$_progress(progressValue) { if (this._isFollowingOrFulfilledOrRejected()) return; this._progressUnchecked(progressValue); }; Promise.prototype._progressHandlerAt = function Promise$_progressHandlerAt(index) { if (index === 0) return this._progressHandler0; return this[index + 2 - 5]; }; Promise.prototype._doProgressWith = function Promise$_doProgressWith(progression) { var progressValue = progression.value; var handler = progression.handler; var promise = progression.promise; var receiver = progression.receiver; this._pushContext(); var ret = tryCatch1(handler, receiver, progressValue); this._popContext(); if (ret === errorObj) { if (ret.e != null && ret.e.name !== "StopProgressPropagation") { var trace = errors.canAttach(ret.e) ? ret.e : new Error(ret.e + ""); promise._attachExtraTrace(trace); promise._progress(ret.e); } } else if (Promise.is(ret)) { ret._then(promise._progress, null, null, promise, void 0, this._progress); } else { promise._progress(ret); } }; Promise.prototype._progressUnchecked = function Promise$_progressUnchecked(progressValue) { if (!this.isPending()) return; var len = this._length(); for (var i = 0; i < len; i += 5) { var handler = this._progressHandlerAt(i); var promise = this._promiseAt(i); if (!Promise.is(promise)) { var receiver = this._receiverAt(i); if (typeof handler === "function") { handler.call(receiver, progressValue, promise); } else if (Promise.is(receiver) && receiver._isProxied()) { receiver._progressUnchecked(progressValue); } else if (isPromiseArrayProxy(receiver, promise)) { receiver._promiseProgressed(progressValue, promise); } continue; } if (typeof handler === "function") { async.invoke(this._doProgressWith, this, { handler: handler, promise: promise, receiver: this._receiverAt(i), value: progressValue }); } else { async.invoke(promise._progress, promise, progressValue); } } }; }; },{"./assert.js":2,"./async.js":3,"./errors.js":10,"./util.js":39}],20:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function() { var global = require("./global.js"); var ASSERT = require("./assert.js"); var util = require("./util.js"); var async = require("./async.js"); var errors = require("./errors.js"); var INTERNAL = function(){}; var APPLY = {}; var NEXT_FILTER = {e: null}; var PromiseArray = require("./promise_array.js")(Promise, INTERNAL); var CapturedTrace = require("./captured_trace.js")(); var CatchFilter = require("./catch_filter.js")(NEXT_FILTER); var PromiseResolver = require("./promise_resolver.js"); var isArray = util.isArray; var errorObj = util.errorObj; var tryCatch1 = util.tryCatch1; var tryCatch2 = util.tryCatch2; var tryCatchApply = util.tryCatchApply; var RangeError = errors.RangeError; var TypeError = errors.TypeError; var CancellationError = errors.CancellationError; var TimeoutError = errors.TimeoutError; var RejectionError = errors.RejectionError; var originatesFromRejection = errors.originatesFromRejection; var markAsOriginatingFromRejection = errors.markAsOriginatingFromRejection; var canAttach = errors.canAttach; var thrower = util.thrower; var apiRejection = require("./errors_api_rejection")(Promise); var makeSelfResolutionError = function Promise$_makeSelfResolutionError() { return new TypeError("circular promise resolution chain"); }; function isPromise(obj) { if (obj === void 0) return false; return obj instanceof Promise; } function isPromiseArrayProxy(receiver, promiseSlotValue) { if (receiver instanceof PromiseArray) { return promiseSlotValue >= 0; } return false; } function Promise(resolver) { if (typeof resolver !== "function") { throw new TypeError("the promise constructor requires a resolver function"); } if (this.constructor !== Promise) { throw new TypeError("the promise constructor cannot be invoked directly"); } this._bitField = 0; this._fulfillmentHandler0 = void 0; this._rejectionHandler0 = void 0; this._promise0 = void 0; this._receiver0 = void 0; this._settledValue = void 0; this._boundTo = void 0; if (resolver !== INTERNAL) this._resolveFromResolver(resolver); } Promise.prototype.bind = function Promise$bind(thisArg) { var ret = new Promise(INTERNAL); if (debugging) ret._setTrace(this.bind, this); ret._follow(this); ret._setBoundTo(thisArg); if (this._cancellable()) { ret._setCancellable(); ret._cancellationParent = this; } return ret; }; Promise.prototype.toString = function Promise$toString() { return "[object Promise]"; }; Promise.prototype.caught = Promise.prototype["catch"] = function Promise$catch(fn) { var len = arguments.length; if (len > 1) { var catchInstances = new Array(len - 1), j = 0, i; for (i = 0; i < len - 1; ++i) { var item = arguments[i]; if (typeof item === "function") { catchInstances[j++] = item; } else { var catchFilterTypeError = new TypeError( "A catch filter must be an error constructor " + "or a filter function"); this._attachExtraTrace(catchFilterTypeError); async.invoke(this._reject, this, catchFilterTypeError); return; } } catchInstances.length = j; fn = arguments[i]; this._resetTrace(this.caught); var catchFilter = new CatchFilter(catchInstances, fn, this); return this._then(void 0, catchFilter.doFilter, void 0, catchFilter, void 0, this.caught); } return this._then(void 0, fn, void 0, void 0, void 0, this.caught); }; Promise.prototype.then = function Promise$then(didFulfill, didReject, didProgress) { return this._then(didFulfill, didReject, didProgress, void 0, void 0, this.then); }; Promise.prototype.done = function Promise$done(didFulfill, didReject, didProgress) { var promise = this._then(didFulfill, didReject, didProgress, void 0, void 0, this.done); promise._setIsFinal(); }; Promise.prototype.spread = function Promise$spread(didFulfill, didReject) { return this._then(didFulfill, didReject, void 0, APPLY, void 0, this.spread); }; Promise.prototype.isFulfilled = function Promise$isFulfilled() { return (this._bitField & 268435456) > 0; }; Promise.prototype.isRejected = function Promise$isRejected() { return (this._bitField & 134217728) > 0; }; Promise.prototype.isPending = function Promise$isPending() { return !this.isResolved(); }; Promise.prototype.isResolved = function Promise$isResolved() { return (this._bitField & 402653184) > 0; }; Promise.prototype.isCancellable = function Promise$isCancellable() { return !this.isResolved() && this._cancellable(); }; Promise.prototype.toJSON = function Promise$toJSON() { var ret = { isFulfilled: false, isRejected: false, fulfillmentValue: void 0, rejectionReason: void 0 }; if (this.isFulfilled()) { ret.fulfillmentValue = this._settledValue; ret.isFulfilled = true; } else if (this.isRejected()) { ret.rejectionReason = this._settledValue; ret.isRejected = true; } return ret; }; Promise.prototype.all = function Promise$all() { return Promise$_all(this, true, this.all); }; Promise.is = isPromise; function Promise$_all(promises, useBound, caller) { return Promise$_CreatePromiseArray( promises, PromiseArray, caller, useBound === true && promises._isBound() ? promises._boundTo : void 0 ).promise(); } Promise.all = function Promise$All(promises) { return Promise$_all(promises, false, Promise.all); }; Promise.join = function Promise$Join() { var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];} return Promise$_CreatePromiseArray( args, PromiseArray, Promise.join, void 0).promise(); }; Promise.resolve = Promise.fulfilled = function Promise$Resolve(value, caller) { var ret = new Promise(INTERNAL); if (debugging) ret._setTrace(typeof caller === "function" ? caller : Promise.resolve, void 0); if (ret._tryFollow(value)) { return ret; } ret._cleanValues(); ret._setFulfilled(); ret._settledValue = value; return ret; }; Promise.reject = Promise.rejected = function Promise$Reject(reason) { var ret = new Promise(INTERNAL); if (debugging) ret._setTrace(Promise.reject, void 0); markAsOriginatingFromRejection(reason); ret._cleanValues(); ret._setRejected(); ret._settledValue = reason; if (!canAttach(reason)) { var trace = new Error(reason + ""); ret._setCarriedStackTrace(trace); } ret._ensurePossibleRejectionHandled(); return ret; }; Promise.prototype.error = function Promise$_error(fn) { return this.caught(originatesFromRejection, fn); }; Promise.prototype._resolveFromSyncValue = function Promise$_resolveFromSyncValue(value, caller) { if (value === errorObj) { this._cleanValues(); this._setRejected(); this._settledValue = value.e; this._ensurePossibleRejectionHandled(); } else { var maybePromise = Promise._cast(value, caller, void 0); if (maybePromise instanceof Promise) { this._follow(maybePromise); } else { this._cleanValues(); this._setFulfilled(); this._settledValue = value; } } }; Promise.method = function Promise$_Method(fn) { if (typeof fn !== "function") { throw new TypeError("fn must be a function"); } return function Promise$_method() { var value; switch(arguments.length) { case 0: value = tryCatch1(fn, this, void 0); break; case 1: value = tryCatch1(fn, this, arguments[0]); break; case 2: value = tryCatch2(fn, this, arguments[0], arguments[1]); break; default: var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];} value = tryCatchApply(fn, args, this); break; } var ret = new Promise(INTERNAL); if (debugging) ret._setTrace(Promise$_method, void 0); ret._resolveFromSyncValue(value, Promise$_method); return ret; }; }; Promise.attempt = Promise["try"] = function Promise$_Try(fn, args, ctx) { if (typeof fn !== "function") { return apiRejection("fn must be a function"); } var value = isArray(args) ? tryCatchApply(fn, args, ctx) : tryCatch1(fn, ctx, args); var ret = new Promise(INTERNAL); if (debugging) ret._setTrace(Promise.attempt, void 0); ret._resolveFromSyncValue(value, Promise.attempt); return ret; }; Promise.defer = Promise.pending = function Promise$Defer(caller) { var promise = new Promise(INTERNAL); if (debugging) promise._setTrace(typeof caller === "function" ? caller : Promise.defer, void 0); return new PromiseResolver(promise); }; Promise.bind = function Promise$Bind(thisArg) { var ret = new Promise(INTERNAL); if (debugging) ret._setTrace(Promise.bind, void 0); ret._setFulfilled(); ret._setBoundTo(thisArg); return ret; }; Promise.cast = function Promise$_Cast(obj, caller) { if (typeof caller !== "function") { caller = Promise.cast; } var ret = Promise._cast(obj, caller, void 0); if (!(ret instanceof Promise)) { return Promise.resolve(ret, caller); } return ret; }; Promise.onPossiblyUnhandledRejection = function Promise$OnPossiblyUnhandledRejection(fn) { if (typeof fn === "function") { CapturedTrace.possiblyUnhandledRejection = fn; } else { CapturedTrace.possiblyUnhandledRejection = void 0; } }; var debugging = false || !!( typeof process !== "undefined" && typeof process.execPath === "string" && typeof process.env === "object" && (process.env["BLUEBIRD_DEBUG"] || process.env["NODE_ENV"] === "development") ); Promise.longStackTraces = function Promise$LongStackTraces() { if (async.haveItemsQueued() && debugging === false ) { throw new Error("cannot enable long stack traces after promises have been created"); } debugging = CapturedTrace.isSupported(); }; Promise.hasLongStackTraces = function Promise$HasLongStackTraces() { return debugging && CapturedTrace.isSupported(); }; Promise.prototype._setProxyHandlers = function Promise$_setProxyHandlers(receiver, promiseSlotValue) { var index = this._length(); if (index >= 1048575 - 5) { index = 0; this._setLength(0); } if (index === 0) { this._promise0 = promiseSlotValue; this._receiver0 = receiver; } else { var i = index - 5; this[i + 3] = promiseSlotValue; this[i + 4] = receiver; this[i + 0] = this[i + 1] = this[i + 2] = void 0; } this._setLength(index + 5); }; Promise.prototype._proxyPromiseArray = function Promise$_proxyPromiseArray(promiseArray, index) { this._setProxyHandlers(promiseArray, index); }; Promise.prototype._proxyPromise = function Promise$_proxyPromise(promise) { promise._setProxied(); this._setProxyHandlers(promise, -1); }; Promise.prototype._then = function Promise$_then( didFulfill, didReject, didProgress, receiver, internalData, caller ) { var haveInternalData = internalData !== void 0; var ret = haveInternalData ? internalData : new Promise(INTERNAL); if (debugging && !haveInternalData) { var haveSameContext = this._peekContext() === this._traceParent; ret._traceParent = haveSameContext ? this._traceParent : this; ret._setTrace(typeof caller === "function" ? caller : this._then, this); } if (!haveInternalData && this._isBound()) { ret._setBoundTo(this._boundTo); } var callbackIndex = this._addCallbacks(didFulfill, didReject, didProgress, ret, receiver); if (!haveInternalData && this._cancellable()) { ret._setCancellable(); ret._cancellationParent = this; } if (this.isResolved()) { async.invoke(this._queueSettleAt, this, callbackIndex); } return ret; }; Promise.prototype._length = function Promise$_length() { return this._bitField & 1048575; }; Promise.prototype._isFollowingOrFulfilledOrRejected = function Promise$_isFollowingOrFulfilledOrRejected() { return (this._bitField & 939524096) > 0; }; Promise.prototype._isFollowing = function Promise$_isFollowing() { return (this._bitField & 536870912) === 536870912; }; Promise.prototype._setLength = function Promise$_setLength(len) { this._bitField = (this._bitField & -1048576) | (len & 1048575); }; Promise.prototype._setFulfilled = function Promise$_setFulfilled() { this._bitField = this._bitField | 268435456; }; Promise.prototype._setRejected = function Promise$_setRejected() { this._bitField = this._bitField | 134217728; }; Promise.prototype._setFollowing = function Promise$_setFollowing() { this._bitField = this._bitField | 536870912; }; Promise.prototype._setIsFinal = function Promise$_setIsFinal() { this._bitField = this._bitField | 33554432; }; Promise.prototype._isFinal = function Promise$_isFinal() { return (this._bitField & 33554432) > 0; }; Promise.prototype._cancellable = function Promise$_cancellable() { return (this._bitField & 67108864) > 0; }; Promise.prototype._setCancellable = function Promise$_setCancellable() { this._bitField = this._bitField | 67108864; }; Promise.prototype._unsetCancellable = function Promise$_unsetCancellable() { this._bitField = this._bitField & (~67108864); }; Promise.prototype._setRejectionIsUnhandled = function Promise$_setRejectionIsUnhandled() { this._bitField = this._bitField | 2097152; }; Promise.prototype._unsetRejectionIsUnhandled = function Promise$_unsetRejectionIsUnhandled() { this._bitField = this._bitField & (~2097152); }; Promise.prototype._isRejectionUnhandled = function Promise$_isRejectionUnhandled() { return (this._bitField & 2097152) > 0; }; Promise.prototype._setCarriedStackTrace = function Promise$_setCarriedStackTrace(capturedTrace) { this._bitField = this._bitField | 1048576; this._fulfillmentHandler0 = capturedTrace; }; Promise.prototype._unsetCarriedStackTrace = function Promise$_unsetCarriedStackTrace() { this._bitField = this._bitField & (~1048576); this._fulfillmentHandler0 = void 0; }; Promise.prototype._isCarryingStackTrace = function Promise$_isCarryingStackTrace() { return (this._bitField & 1048576) > 0; }; Promise.prototype._getCarriedStackTrace = function Promise$_getCarriedStackTrace() { return this._isCarryingStackTrace() ? this._fulfillmentHandler0 : void 0; }; Promise.prototype._receiverAt = function Promise$_receiverAt(index) { var ret; if (index === 0) { ret = this._receiver0; } else { ret = this[index + 4 - 5]; } if (this._isBound() && ret === void 0) { return this._boundTo; } return ret; }; Promise.prototype._promiseAt = function Promise$_promiseAt(index) { if (index === 0) return this._promise0; return this[index + 3 - 5]; }; Promise.prototype._fulfillmentHandlerAt = function Promise$_fulfillmentHandlerAt(index) { if (index === 0) return this._fulfillmentHandler0; return this[index + 0 - 5]; }; Promise.prototype._rejectionHandlerAt = function Promise$_rejectionHandlerAt(index) { if (index === 0) return this._rejectionHandler0; return this[index + 1 - 5]; }; Promise.prototype._unsetAt = function Promise$_unsetAt(index) { if (index === 0) { this._rejectionHandler0 = this._progressHandler0 = this._promise0 = this._receiver0 = void 0; if (!this._isCarryingStackTrace()) { this._fulfillmentHandler0 = void 0; } } else { this[index - 5 + 0] = this[index - 5 + 1] = this[index - 5 + 2] = this[index - 5 + 3] = this[index - 5 + 4] = void 0; } }; Promise.prototype._resolveFromResolver = function Promise$_resolveFromResolver(resolver) { var promise = this; var localDebugging = debugging; if (localDebugging) { this._setTrace(this._resolveFromResolver, void 0); this._pushContext(); } function Promise$_resolver(val) { if (promise._tryFollow(val)) { return; } promise._fulfill(val); } function Promise$_rejecter(val) { var trace = canAttach(val) ? val : new Error(val + ""); promise._attachExtraTrace(trace); markAsOriginatingFromRejection(val); promise._reject(val, trace === val ? void 0 : trace); } var r = tryCatch2(resolver, void 0, Promise$_resolver, Promise$_rejecter); if (localDebugging) this._popContext(); if (r !== void 0 && r === errorObj) { var trace = canAttach(r.e) ? r.e : new Error(r.e + ""); promise._reject(r.e, trace); } }; Promise.prototype._addCallbacks = function Promise$_addCallbacks( fulfill, reject, progress, promise, receiver ) { var index = this._length(); if (index >= 1048575 - 5) { index = 0; this._setLength(0); } if (index === 0) { this._promise0 = promise; if (receiver !== void 0) this._receiver0 = receiver; if (typeof fulfill === "function" && !this._isCarryingStackTrace()) this._fulfillmentHandler0 = fulfill; if (typeof reject === "function") this._rejectionHandler0 = reject; if (typeof progress === "function") this._progressHandler0 = progress; } else { var i = index - 5; this[i + 3] = promise; this[i + 4] = receiver; this[i + 0] = typeof fulfill === "function" ? fulfill : void 0; this[i + 1] = typeof reject === "function" ? reject : void 0; this[i + 2] = typeof progress === "function" ? progress : void 0; } this._setLength(index + 5); return index; }; Promise.prototype._setBoundTo = function Promise$_setBoundTo(obj) { if (obj !== void 0) { this._bitField = this._bitField | 8388608; this._boundTo = obj; } else { this._bitField = this._bitField & (~8388608); } }; Promise.prototype._isBound = function Promise$_isBound() { return (this._bitField & 8388608) === 8388608; }; Promise.prototype._spreadSlowCase = function Promise$_spreadSlowCase(targetFn, promise, values, boundTo) { var promiseForAll = Promise$_CreatePromiseArray (values, PromiseArray, this._spreadSlowCase, boundTo) .promise() ._then(function() { return targetFn.apply(boundTo, arguments); }, void 0, void 0, APPLY, void 0, this._spreadSlowCase); promise._follow(promiseForAll); }; Promise.prototype._callSpread = function Promise$_callSpread(handler, promise, value, localDebugging) { var boundTo = this._isBound() ? this._boundTo : void 0; if (isArray(value)) { var caller = this._settlePromiseFromHandler; for (var i = 0, len = value.length; i < len; ++i) { if (isPromise(Promise._cast(value[i], caller, void 0))) { this._spreadSlowCase(handler, promise, value, boundTo); return; } } } if (localDebugging) promise._pushContext(); return tryCatchApply(handler, value, boundTo); }; Promise.prototype._callHandler = function Promise$_callHandler( handler, receiver, promise, value, localDebugging) { var x; if (receiver === APPLY && !this.isRejected()) { x = this._callSpread(handler, promise, value, localDebugging); } else { if (localDebugging) promise._pushContext(); x = tryCatch1(handler, receiver, value); } if (localDebugging) promise._popContext(); return x; }; Promise.prototype._settlePromiseFromHandler = function Promise$_settlePromiseFromHandler( handler, receiver, value, promise ) { if (!isPromise(promise)) { handler.call(receiver, value, promise); return; } var localDebugging = debugging; var x = this._callHandler(handler, receiver, promise, value, localDebugging); if (promise._isFollowing()) return; if (x === errorObj || x === promise || x === NEXT_FILTER) { var err = x === promise ? makeSelfResolutionError() : x.e; var trace = canAttach(err) ? err : new Error(err + ""); if (x !== NEXT_FILTER) promise._attachExtraTrace(trace); promise._rejectUnchecked(err, trace); } else { var castValue = Promise._cast(x, localDebugging ? this._settlePromiseFromHandler : void 0, promise); if (isPromise(castValue)) { if (castValue.isRejected() && !castValue._isCarryingStackTrace() && !canAttach(castValue._settledValue)) { var trace = new Error(castValue._settledValue + ""); promise._attachExtraTrace(trace); castValue._setCarriedStackTrace(trace); } promise._follow(castValue); if (castValue._cancellable()) { promise._cancellationParent = castValue; promise._setCancellable(); } } else { promise._fulfillUnchecked(x); } } }; Promise.prototype._follow = function Promise$_follow(promise) { this._setFollowing(); if (promise.isPending()) { if (promise._cancellable() ) { this._cancellationParent = promise; this._setCancellable(); } promise._proxyPromise(this); } else if (promise.isFulfilled()) { this._fulfillUnchecked(promise._settledValue); } else { this._rejectUnchecked(promise._settledValue, promise._getCarriedStackTrace()); } if (promise._isRejectionUnhandled()) promise._unsetRejectionIsUnhandled(); if (debugging && promise._traceParent == null) { promise._traceParent = this; } }; Promise.prototype._tryFollow = function Promise$_tryFollow(value) { if (this._isFollowingOrFulfilledOrRejected() || value === this) { return false; } var maybePromise = Promise._cast(value, this._tryFollow, void 0); if (!isPromise(maybePromise)) { return false; } this._follow(maybePromise); return true; }; Promise.prototype._resetTrace = function Promise$_resetTrace(caller) { if (debugging) { var context = this._peekContext(); var isTopLevel = context === void 0; this._trace = new CapturedTrace( typeof caller === "function" ? caller : this._resetTrace, isTopLevel ); } }; Promise.prototype._setTrace = function Promise$_setTrace(caller, parent) { if (debugging) { var context = this._peekContext(); this._traceParent = context; var isTopLevel = context === void 0; if (parent !== void 0 && parent._traceParent === context) { this._trace = parent._trace; } else { this._trace = new CapturedTrace( typeof caller === "function" ? caller : this._setTrace, isTopLevel ); } } return this; }; Promise.prototype._attachExtraTrace = function Promise$_attachExtraTrace(error) { if (debugging) { var promise = this; var stack = error.stack; stack = typeof stack === "string" ? stack.split("\n") : []; var headerLineCount = 1; while(promise != null && promise._trace != null) { stack = CapturedTrace.combine( stack, promise._trace.stack.split("\n") ); promise = promise._traceParent; } var max = Error.stackTraceLimit + headerLineCount; var len = stack.length; if (len > max) { stack.length = max; } if (stack.length <= headerLineCount) { error.stack = "(No stack trace)"; } else { error.stack = stack.join("\n"); } } }; Promise.prototype._cleanValues = function Promise$_cleanValues() { if (this._cancellable()) { this._cancellationParent = void 0; } }; Promise.prototype._fulfill = function Promise$_fulfill(value) { if (this._isFollowingOrFulfilledOrRejected()) return; this._fulfillUnchecked(value); }; Promise.prototype._reject = function Promise$_reject(reason, carriedStackTrace) { if (this._isFollowingOrFulfilledOrRejected()) return; this._rejectUnchecked(reason, carriedStackTrace); }; Promise.prototype._settlePromiseAt = function Promise$_settlePromiseAt(index) { var handler = this.isFulfilled() ? this._fulfillmentHandlerAt(index) : this._rejectionHandlerAt(index); var value = this._settledValue; var receiver = this._receiverAt(index); var promise = this._promiseAt(index); if (typeof handler === "function") { this._settlePromiseFromHandler(handler, receiver, value, promise); } else { var done = false; var isFulfilled = this.isFulfilled(); if (receiver !== void 0) { if (receiver instanceof Promise && receiver._isProxied()) { receiver._unsetProxied(); if (isFulfilled) receiver._fulfillUnchecked(value); else receiver._rejectUnchecked(value, this._getCarriedStackTrace()); done = true; } else if (isPromiseArrayProxy(receiver, promise)) { if (isFulfilled) receiver._promiseFulfilled(value, promise); else receiver._promiseRejected(value, promise); done = true; } } if (!done) { if (isFulfilled) promise._fulfill(value); else promise._reject(value, this._getCarriedStackTrace()); } } if (index >= 256) { this._queueGC(); } }; Promise.prototype._isProxied = function Promise$_isProxied() { return (this._bitField & 4194304) === 4194304; }; Promise.prototype._setProxied = function Promise$_setProxied() { this._bitField = this._bitField | 4194304; }; Promise.prototype._unsetProxied = function Promise$_unsetProxied() { this._bitField = this._bitField & (~4194304); }; Promise.prototype._isGcQueued = function Promise$_isGcQueued() { return (this._bitField & -1073741824) === -1073741824; }; Promise.prototype._setGcQueued = function Promise$_setGcQueued() { this._bitField = this._bitField | -1073741824; }; Promise.prototype._unsetGcQueued = function Promise$_unsetGcQueued() { this._bitField = this._bitField & (~-1073741824); }; Promise.prototype._queueGC = function Promise$_queueGC() { if (this._isGcQueued()) return; this._setGcQueued(); async.invokeLater(this._gc, this, void 0); }; Promise.prototype._gc = function Promise$gc() { var len = this._length(); this._unsetAt(0); for (var i = 0; i < len; i++) { delete this[i]; } this._setLength(0); this._unsetGcQueued(); }; Promise.prototype._queueSettleAt = function Promise$_queueSettleAt(index) { if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled(); async.invoke(this._settlePromiseAt, this, index); }; Promise.prototype._fulfillUnchecked = function Promise$_fulfillUnchecked(value) { if (!this.isPending()) return; if (value === this) { var err = makeSelfResolutionError(); this._attachExtraTrace(err); return this._rejectUnchecked(err, void 0); } this._cleanValues(); this._setFulfilled(); this._settledValue = value; var len = this._length(); if (len > 0) { async.invoke(this._fulfillPromises, this, len); } }; Promise.prototype._rejectUncheckedCheckError = function Promise$_rejectUncheckedCheckError(reason) { var trace = canAttach(reason) ? reason : new Error(reason + ""); this._rejectUnchecked(reason, trace === reason ? void 0 : trace); }; Promise.prototype._rejectUnchecked = function Promise$_rejectUnchecked(reason, trace) { if (!this.isPending()) return; if (reason === this) { var err = makeSelfResolutionError(); this._attachExtraTrace(err); return this._rejectUnchecked(err); } this._cleanValues(); this._setRejected(); this._settledValue = reason; if (this._isFinal()) { async.invokeLater(thrower, void 0, trace === void 0 ? reason : trace); return; } var len = this._length(); if (trace !== void 0) this._setCarriedStackTrace(trace); if (len > 0) { async.invoke(this._rejectPromises, this, len); } else { this._ensurePossibleRejectionHandled(); } }; Promise.prototype._rejectPromises = function Promise$_rejectPromises(len) { len = this._length(); for (var i = 0; i < len; i+= 5) { this._settlePromiseAt(i); } this._unsetCarriedStackTrace(); }; Promise.prototype._fulfillPromises = function Promise$_fulfillPromises(len) { len = this._length(); for (var i = 0; i < len; i+= 5) { this._settlePromiseAt(i); } }; Promise.prototype._ensurePossibleRejectionHandled = function Promise$_ensurePossibleRejectionHandled() { this._setRejectionIsUnhandled(); if (CapturedTrace.possiblyUnhandledRejection !== void 0) { async.invokeLater(this._notifyUnhandledRejection, this, void 0); } }; Promise.prototype._notifyUnhandledRejection = function Promise$_notifyUnhandledRejection() { if (this._isRejectionUnhandled()) { var reason = this._settledValue; var trace = this._getCarriedStackTrace(); this._unsetRejectionIsUnhandled(); if (trace !== void 0) { this._unsetCarriedStackTrace(); reason = trace; } if (typeof CapturedTrace.possiblyUnhandledRejection === "function") { CapturedTrace.possiblyUnhandledRejection(reason, this); } } }; var contextStack = []; Promise.prototype._peekContext = function Promise$_peekContext() { var lastIndex = contextStack.length - 1; if (lastIndex >= 0) { return contextStack[lastIndex]; } return void 0; }; Promise.prototype._pushContext = function Promise$_pushContext() { if (!debugging) return; contextStack.push(this); }; Promise.prototype._popContext = function Promise$_popContext() { if (!debugging) return; contextStack.pop(); }; function Promise$_CreatePromiseArray( promises, PromiseArrayConstructor, caller, boundTo) { var list = null; if (isArray(promises)) { list = promises; } else { list = Promise._cast(promises, caller, void 0); if (list !== promises) { list._setBoundTo(boundTo); } else if (!isPromise(list)) { list = null; } } if (list !== null) { return new PromiseArrayConstructor( list, typeof caller === "function" ? caller : Promise$_CreatePromiseArray, boundTo ); } return { promise: function() {return apiRejection("expecting an array, a promise or a thenable");} }; } var old = global.Promise; Promise.noConflict = function() { if (global.Promise === Promise) { global.Promise = old; } return Promise; }; if (!CapturedTrace.isSupported()) { Promise.longStackTraces = function(){}; debugging = false; } Promise._makeSelfResolutionError = makeSelfResolutionError; require("./finally.js")(Promise, NEXT_FILTER); require("./direct_resolve.js")(Promise); require("./thenables.js")(Promise, INTERNAL); Promise.RangeError = RangeError; Promise.CancellationError = CancellationError; Promise.TimeoutError = TimeoutError; Promise.TypeError = TypeError; Promise.RejectionError = RejectionError; require('./timers.js')(Promise,INTERNAL); require('./synchronous_inspection.js')(Promise); require('./any.js')(Promise,Promise$_CreatePromiseArray,PromiseArray); require('./race.js')(Promise,INTERNAL); require('./call_get.js')(Promise); require('./filter.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection); require('./generators.js')(Promise,apiRejection,INTERNAL); require('./map.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection); require('./nodeify.js')(Promise); require('./promisify.js')(Promise,INTERNAL); require('./props.js')(Promise,PromiseArray); require('./reduce.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection,INTERNAL); require('./settle.js')(Promise,Promise$_CreatePromiseArray,PromiseArray); require('./some.js')(Promise,Promise$_CreatePromiseArray,PromiseArray,apiRejection); require('./progress.js')(Promise,isPromiseArrayProxy); require('./cancel.js')(Promise,INTERNAL); Promise.prototype = Promise.prototype; return Promise; }; },{"./any.js":1,"./assert.js":2,"./async.js":3,"./call_get.js":5,"./cancel.js":6,"./captured_trace.js":7,"./catch_filter.js":8,"./direct_resolve.js":9,"./errors.js":10,"./errors_api_rejection":11,"./filter.js":13,"./finally.js":14,"./generators.js":15,"./global.js":16,"./map.js":17,"./nodeify.js":18,"./progress.js":19,"./promise_array.js":21,"./promise_resolver.js":23,"./promisify.js":25,"./props.js":27,"./race.js":29,"./reduce.js":30,"./settle.js":32,"./some.js":34,"./synchronous_inspection.js":36,"./thenables.js":37,"./timers.js":38,"./util.js":39}],21:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, INTERNAL) { var ASSERT = require("./assert.js"); var canAttach = require("./errors.js").canAttach; var util = require("./util.js"); var async = require("./async.js"); var hasOwn = {}.hasOwnProperty; var isArray = util.isArray; function toResolutionValue(val) { switch(val) { case -1: return void 0; case -2: return []; case -3: return {}; } } function PromiseArray(values, caller, boundTo) { var promise = this._promise = new Promise(INTERNAL); var parent = void 0; if (Promise.is(values)) { parent = values; if (values._cancellable()) { promise._setCancellable(); promise._cancellationParent = values; } if (values._isBound()) { promise._setBoundTo(boundTo); } } promise._setTrace(caller, parent); this._values = values; this._length = 0; this._totalResolved = 0; this._init(void 0, -2); } PromiseArray.PropertiesPromiseArray = function() {}; PromiseArray.prototype.length = function PromiseArray$length() { return this._length; }; PromiseArray.prototype.promise = function PromiseArray$promise() { return this._promise; }; PromiseArray.prototype._init = function PromiseArray$_init(_, resolveValueIfEmpty) { var values = this._values; if (Promise.is(values)) { if (values.isFulfilled()) { values = values._settledValue; if (!isArray(values)) { var err = new Promise.TypeError("expecting an array, a promise or a thenable"); this.__hardReject__(err); return; } this._values = values; } else if (values.isPending()) { values._then( this._init, this._reject, void 0, this, resolveValueIfEmpty, this.constructor ); return; } else { this._reject(values._settledValue); return; } } if (values.length === 0) { this._resolve(toResolutionValue(resolveValueIfEmpty)); return; } var len = values.length; var newLen = len; var newValues; if (this instanceof PromiseArray.PropertiesPromiseArray) { newValues = this._values; } else { newValues = new Array(len); } var isDirectScanNeeded = false; for (var i = 0; i < len; ++i) { var promise = values[i]; if (promise === void 0 && !hasOwn.call(values, i)) { newLen--; continue; } var maybePromise = Promise._cast(promise, void 0, void 0); if (maybePromise instanceof Promise && maybePromise.isPending()) { maybePromise._proxyPromiseArray(this, i); } else { isDirectScanNeeded = true; } newValues[i] = maybePromise; } if (newLen === 0) { if (resolveValueIfEmpty === -2) { this._resolve(newValues); } else { this._resolve(toResolutionValue(resolveValueIfEmpty)); } return; } this._values = newValues; this._length = newLen; if (isDirectScanNeeded) { var scanMethod = newLen === len ? this._scanDirectValues : this._scanDirectValuesHoled; async.invoke(scanMethod, this, len); } }; PromiseArray.prototype._settlePromiseAt = function PromiseArray$_settlePromiseAt(index) { var value = this._values[index]; if (!Promise.is(value)) { this._promiseFulfilled(value, index); } else if (value.isFulfilled()) { this._promiseFulfilled(value._settledValue, index); } else if (value.isRejected()) { this._promiseRejected(value._settledValue, index); } }; PromiseArray.prototype._scanDirectValuesHoled = function PromiseArray$_scanDirectValuesHoled(len) { for (var i = 0; i < len; ++i) { if (this._isResolved()) { break; } if (hasOwn.call(this._values, i)) { this._settlePromiseAt(i); } } }; PromiseArray.prototype._scanDirectValues = function PromiseArray$_scanDirectValues(len) { for (var i = 0; i < len; ++i) { if (this._isResolved()) { break; } this._settlePromiseAt(i); } }; PromiseArray.prototype._isResolved = function PromiseArray$_isResolved() { return this._values === null; }; PromiseArray.prototype._resolve = function PromiseArray$_resolve(value) { this._values = null; this._promise._fulfill(value); }; PromiseArray.prototype.__hardReject__ = PromiseArray.prototype._reject = function PromiseArray$_reject(reason) { this._values = null; var trace = canAttach(reason) ? reason : new Error(reason + ""); this._promise._attachExtraTrace(trace); this._promise._reject(reason, trace); }; PromiseArray.prototype._promiseProgressed = function PromiseArray$_promiseProgressed(progressValue, index) { if (this._isResolved()) return; this._promise._progress({ index: index, value: progressValue }); }; PromiseArray.prototype._promiseFulfilled = function PromiseArray$_promiseFulfilled(value, index) { if (this._isResolved()) return; this._values[index] = value; var totalResolved = ++this._totalResolved; if (totalResolved >= this._length) { this._resolve(this._values); } }; PromiseArray.prototype._promiseRejected = function PromiseArray$_promiseRejected(reason, index) { if (this._isResolved()) return; this._totalResolved++; this._reject(reason); }; return PromiseArray; }; },{"./assert.js":2,"./async.js":3,"./errors.js":10,"./util.js":39}],22:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var TypeError = require("./errors.js").TypeError; function PromiseInspection(promise) { if (promise !== void 0) { this._bitField = promise._bitField; this._settledValue = promise.isResolved() ? promise._settledValue : void 0; } else { this._bitField = 0; this._settledValue = void 0; } } PromiseInspection.prototype.isFulfilled = function PromiseInspection$isFulfilled() { return (this._bitField & 268435456) > 0; }; PromiseInspection.prototype.isRejected = function PromiseInspection$isRejected() { return (this._bitField & 134217728) > 0; }; PromiseInspection.prototype.isPending = function PromiseInspection$isPending() { return (this._bitField & 402653184) === 0; }; PromiseInspection.prototype.value = function PromiseInspection$value() { if (!this.isFulfilled()) { throw new TypeError("cannot get fulfillment value of a non-fulfilled promise"); } return this._settledValue; }; PromiseInspection.prototype.error = function PromiseInspection$error() { if (!this.isRejected()) { throw new TypeError("cannot get rejection reason of a non-rejected promise"); } return this._settledValue; }; module.exports = PromiseInspection; },{"./errors.js":10}],23:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var util = require("./util.js"); var maybeWrapAsError = util.maybeWrapAsError; var errors = require("./errors.js"); var TimeoutError = errors.TimeoutError; var RejectionError = errors.RejectionError; var async = require("./async.js"); var haveGetters = util.haveGetters; var es5 = require("./es5.js"); function isUntypedError(obj) { return obj instanceof Error && es5.getPrototypeOf(obj) === Error.prototype; } function wrapAsRejectionError(obj) { var ret; if (isUntypedError(obj)) { ret = new RejectionError(obj); } else { ret = obj; } errors.markAsOriginatingFromRejection(ret); return ret; } function nodebackForPromise(promise) { function PromiseResolver$_callback(err, value) { if (promise === null) return; if (err) { var wrapped = wrapAsRejectionError(maybeWrapAsError(err)); promise._attachExtraTrace(wrapped); promise._reject(wrapped); } else { if (arguments.length > 2) { var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];} promise._fulfill(args); } else { promise._fulfill(value); } } promise = null; } return PromiseResolver$_callback; } var PromiseResolver; if (!haveGetters) { PromiseResolver = function PromiseResolver(promise) { this.promise = promise; this.asCallback = nodebackForPromise(promise); this.callback = this.asCallback; }; } else { PromiseResolver = function PromiseResolver(promise) { this.promise = promise; }; } if (haveGetters) { var prop = { get: function() { return nodebackForPromise(this.promise); } }; es5.defineProperty(PromiseResolver.prototype, "asCallback", prop); es5.defineProperty(PromiseResolver.prototype, "callback", prop); } PromiseResolver._nodebackForPromise = nodebackForPromise; PromiseResolver.prototype.toString = function PromiseResolver$toString() { return "[object PromiseResolver]"; }; PromiseResolver.prototype.resolve = PromiseResolver.prototype.fulfill = function PromiseResolver$resolve(value) { var promise = this.promise; if (promise._tryFollow(value)) { return; } async.invoke(promise._fulfill, promise, value); }; PromiseResolver.prototype.reject = function PromiseResolver$reject(reason) { var promise = this.promise; errors.markAsOriginatingFromRejection(reason); var trace = errors.canAttach(reason) ? reason : new Error(reason + ""); promise._attachExtraTrace(trace); async.invoke(promise._reject, promise, reason); if (trace !== reason) { async.invoke(this._setCarriedStackTrace, this, trace); } }; PromiseResolver.prototype.progress = function PromiseResolver$progress(value) { async.invoke(this.promise._progress, this.promise, value); }; PromiseResolver.prototype.cancel = function PromiseResolver$cancel() { async.invoke(this.promise.cancel, this.promise, void 0); }; PromiseResolver.prototype.timeout = function PromiseResolver$timeout() { this.reject(new TimeoutError("timeout")); }; PromiseResolver.prototype.isResolved = function PromiseResolver$isResolved() { return this.promise.isResolved(); }; PromiseResolver.prototype.toJSON = function PromiseResolver$toJSON() { return this.promise.toJSON(); }; PromiseResolver.prototype._setCarriedStackTrace = function PromiseResolver$_setCarriedStackTrace(trace) { if (this.promise.isRejected()) { this.promise._setCarriedStackTrace(trace); } }; module.exports = PromiseResolver; },{"./async.js":3,"./errors.js":10,"./es5.js":12,"./util.js":39}],24:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, INTERNAL) { var errors = require("./errors.js"); var ASSERT = require("./assert.js"); var TypeError = errors.TypeError; var util = require("./util.js"); var isArray = util.isArray; var errorObj = util.errorObj; var tryCatch1 = util.tryCatch1; var yieldHandlers = []; function promiseFromYieldHandler(value) { var _yieldHandlers = yieldHandlers; var _errorObj = errorObj; var _Promise = Promise; var len = _yieldHandlers.length; for (var i = 0; i < len; ++i) { var result = tryCatch1(_yieldHandlers[i], void 0, value); if (result === _errorObj) { return _Promise.reject(_errorObj.e); } var maybePromise = _Promise._cast(result, promiseFromYieldHandler, void 0); if (maybePromise instanceof _Promise) return maybePromise; } return null; } function PromiseSpawn(generatorFunction, receiver, caller) { var promise = this._promise = new Promise(INTERNAL); promise._setTrace(caller, void 0); this._generatorFunction = generatorFunction; this._receiver = receiver; this._generator = void 0; } PromiseSpawn.prototype.promise = function PromiseSpawn$promise() { return this._promise; }; PromiseSpawn.prototype._run = function PromiseSpawn$_run() { this._generator = this._generatorFunction.call(this._receiver); this._receiver = this._generatorFunction = void 0; this._next(void 0); }; PromiseSpawn.prototype._continue = function PromiseSpawn$_continue(result) { if (result === errorObj) { this._generator = void 0; var trace = errors.canAttach(result.e) ? result.e : new Error(result.e + ""); this._promise._attachExtraTrace(trace); this._promise._reject(result.e, trace); return; } var value = result.value; if (result.done === true) { this._generator = void 0; if (!this._promise._tryFollow(value)) { this._promise._fulfill(value); } } else { var maybePromise = Promise._cast(value, PromiseSpawn$_continue, void 0); if (!(maybePromise instanceof Promise)) { if (isArray(maybePromise)) { maybePromise = Promise.all(maybePromise); } else { maybePromise = promiseFromYieldHandler(maybePromise); } if (maybePromise === null) { this._throw(new TypeError("A value was yielded that could not be treated as a promise")); return; } } maybePromise._then( this._next, this._throw, void 0, this, null, void 0 ); } }; PromiseSpawn.prototype._throw = function PromiseSpawn$_throw(reason) { if (errors.canAttach(reason)) this._promise._attachExtraTrace(reason); this._continue( tryCatch1(this._generator["throw"], this._generator, reason) ); }; PromiseSpawn.prototype._next = function PromiseSpawn$_next(value) { this._continue( tryCatch1(this._generator.next, this._generator, value) ); }; PromiseSpawn.addYieldHandler = function PromiseSpawn$AddYieldHandler(fn) { if (typeof fn !== "function") throw new TypeError("fn must be a function"); yieldHandlers.push(fn); }; return PromiseSpawn; }; },{"./assert.js":2,"./errors.js":10,"./util.js":39}],25:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, INTERNAL) { var THIS = {}; var util = require("./util.js"); var es5 = require("./es5.js"); var nodebackForPromise = require("./promise_resolver.js") ._nodebackForPromise; var withAppended = util.withAppended; var maybeWrapAsError = util.maybeWrapAsError; var canEvaluate = util.canEvaluate; var notEnumerableProp = util.notEnumerableProp; var deprecated = util.deprecated; var ASSERT = require("./assert.js"); var roriginal = new RegExp("__beforePromisified__" + "$"); var hasProp = {}.hasOwnProperty; function isPromisified(fn) { return fn.__isPromisified__ === true; } var inheritedMethods = (function() { if (es5.isES5) { var create = Object.create; var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; return function(cur) { var original = cur; var ret = []; var visitedKeys = create(null); while (cur !== null) { var keys = es5.keys(cur); for (var i = 0, len = keys.length; i < len; ++i) { var key = keys[i]; if (visitedKeys[key] || roriginal.test(key) || hasProp.call(original, key + "__beforePromisified__") ) { continue; } visitedKeys[key] = true; var desc = getOwnPropertyDescriptor(cur, key); if (desc != null && typeof desc.value === "function" && !isPromisified(desc.value)) { ret.push(key, desc.value); } } cur = es5.getPrototypeOf(cur); } return ret; }; } else { return function(obj) { var ret = []; /*jshint forin:false */ for (var key in obj) { if (roriginal.test(key) || hasProp.call(obj, key + "__beforePromisified__")) { continue; } var fn = obj[key]; if (typeof fn === "function" && !isPromisified(fn)) { ret.push(key, fn); } } return ret; }; } })(); function switchCaseArgumentOrder(likelyArgumentCount) { var ret = [likelyArgumentCount]; var min = Math.max(0, likelyArgumentCount - 1 - 5); for(var i = likelyArgumentCount - 1; i >= min; --i) { if (i === likelyArgumentCount) continue; ret.push(i); } for(var i = likelyArgumentCount + 1; i <= 5; ++i) { ret.push(i); } return ret; } function parameterDeclaration(parameterCount) { var ret = new Array(parameterCount); for(var i = 0; i < ret.length; ++i) { ret[i] = "_arg" + i; } return ret.join(", "); } function parameterCount(fn) { if (typeof fn.length === "number") { return Math.max(Math.min(fn.length, 1023 + 1), 0); } return 0; } function propertyAccess(id) { var rident = /^[a-z$_][a-z$_0-9]*$/i; if (rident.test(id)) { return "." + id; } else return "['" + id.replace(/(['\\])/g, "\\$1") + "']"; } function makeNodePromisifiedEval(callback, receiver, originalName, fn) { var newParameterCount = Math.max(0, parameterCount(fn) - 1); var argumentOrder = switchCaseArgumentOrder(newParameterCount); var callbackName = (typeof originalName === "string" ? originalName + "Async" : "promisified"); function generateCallForArgumentCount(count) { var args = new Array(count); for (var i = 0, len = args.length; i < len; ++i) { args[i] = "arguments[" + i + "]"; } var comma = count > 0 ? "," : ""; if (typeof callback === "string" && receiver === THIS) { return "this" + propertyAccess(callback) + "("+args.join(",") + comma +" fn);"+ "break;"; } return (receiver === void 0 ? "callback("+args.join(",")+ comma +" fn);" : "callback.call("+(receiver === THIS ? "this" : "receiver")+", "+args.join(",") + comma + " fn);") + "break;"; } function generateArgumentSwitchCase() { var ret = ""; for(var i = 0; i < argumentOrder.length; ++i) { ret += "case " + argumentOrder[i] +":" + generateCallForArgumentCount(argumentOrder[i]); } ret += "default: var args = new Array(len + 1);" + "var i = 0;" + "for (var i = 0; i < len; ++i) { " + " args[i] = arguments[i];" + "}" + "args[i] = fn;" + (typeof callback === "string" ? "this" + propertyAccess(callback) + ".apply(" : "callback.apply(") + (receiver === THIS ? "this" : "receiver") + ", args); break;"; return ret; } return new Function("Promise", "callback", "receiver", "withAppended", "maybeWrapAsError", "nodebackForPromise", "INTERNAL", "var ret = function " + callbackName + "(" + parameterDeclaration(newParameterCount) + ") {\"use strict\";" + "var len = arguments.length;" + "var promise = new Promise(INTERNAL);"+ "promise._setTrace(" + callbackName + ", void 0);" + "var fn = nodebackForPromise(promise);"+ "try {" + "switch(len) {" + generateArgumentSwitchCase() + "}" + "}" + "catch(e){ " + "var wrapped = maybeWrapAsError(e);" + "promise._attachExtraTrace(wrapped);" + "promise._reject(wrapped);" + "}" + "return promise;" + "" + "}; ret.__isPromisified__ = true; return ret;" )(Promise, callback, receiver, withAppended, maybeWrapAsError, nodebackForPromise, INTERNAL); } function makeNodePromisifiedClosure(callback, receiver) { function promisified() { var _receiver = receiver; if (receiver === THIS) _receiver = this; if (typeof callback === "string") { callback = _receiver[callback]; } var promise = new Promise(INTERNAL); promise._setTrace(promisified, void 0); var fn = nodebackForPromise(promise); try { callback.apply(_receiver, withAppended(arguments, fn)); } catch(e) { var wrapped = maybeWrapAsError(e); promise._attachExtraTrace(wrapped); promise._reject(wrapped); } return promise; } promisified.__isPromisified__ = true; return promisified; } var makeNodePromisified = canEvaluate ? makeNodePromisifiedEval : makeNodePromisifiedClosure; function f(){} function _promisify(callback, receiver, isAll) { if (isAll) { var methods = inheritedMethods(callback); for (var i = 0, len = methods.length; i < len; i+= 2) { var key = methods[i]; var fn = methods[i+1]; var originalKey = key + "__beforePromisified__"; var promisifiedKey = key + "Async"; notEnumerableProp(callback, originalKey, fn); callback[promisifiedKey] = makeNodePromisified(originalKey, THIS, key, fn); } if (methods.length > 16) f.prototype = callback; return callback; } else { return makeNodePromisified(callback, receiver, void 0, callback); } } Promise.promisify = function Promise$Promisify(fn, receiver) { if (typeof fn === "object" && fn !== null) { deprecated("Promise.promisify for promisifying entire objects is deprecated. Use Promise.promisifyAll instead."); return _promisify(fn, receiver, true); } if (typeof fn !== "function") { throw new TypeError("fn must be a function"); } if (isPromisified(fn)) { return fn; } return _promisify( fn, arguments.length < 2 ? THIS : receiver, false); }; Promise.promisifyAll = function Promise$PromisifyAll(target) { if (typeof target !== "function" && typeof target !== "object") { throw new TypeError("the target of promisifyAll must be an object or a function"); } return _promisify(target, void 0, true); }; }; },{"./assert.js":2,"./es5.js":12,"./promise_resolver.js":23,"./util.js":39}],26:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, PromiseArray) { var ASSERT = require("./assert.js"); var util = require("./util.js"); var inherits = util.inherits; var es5 = require("./es5.js"); function PropertiesPromiseArray(obj, caller, boundTo) { var keys = es5.keys(obj); var values = new Array(keys.length); for (var i = 0, len = values.length; i < len; ++i) { values[i] = obj[keys[i]]; } this.constructor$(values, caller, boundTo); if (!this._isResolved()) { for (var i = 0, len = keys.length; i < len; ++i) { values.push(keys[i]); } } } inherits(PropertiesPromiseArray, PromiseArray); PropertiesPromiseArray.prototype._init = function PropertiesPromiseArray$_init() { this._init$(void 0, -3) ; }; PropertiesPromiseArray.prototype._promiseFulfilled = function PropertiesPromiseArray$_promiseFulfilled(value, index) { if (this._isResolved()) return; this._values[index] = value; var totalResolved = ++this._totalResolved; if (totalResolved >= this._length) { var val = {}; var keyOffset = this.length(); for (var i = 0, len = this.length(); i < len; ++i) { val[this._values[i + keyOffset]] = this._values[i]; } this._resolve(val); } }; PropertiesPromiseArray.prototype._promiseProgressed = function PropertiesPromiseArray$_promiseProgressed(value, index) { if (this._isResolved()) return; this._promise._progress({ key: this._values[index + this.length()], value: value }); }; PromiseArray.PropertiesPromiseArray = PropertiesPromiseArray; return PropertiesPromiseArray; }; },{"./assert.js":2,"./es5.js":12,"./util.js":39}],27:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, PromiseArray) { var PropertiesPromiseArray = require("./properties_promise_array.js")( Promise, PromiseArray); var util = require("./util.js"); var apiRejection = require("./errors_api_rejection")(Promise); var isObject = util.isObject; function Promise$_Props(promises, useBound, caller) { var ret; var castValue = Promise._cast(promises, caller, void 0); if (!isObject(castValue)) { return apiRejection("cannot await properties of a non-object"); } else if (Promise.is(castValue)) { ret = castValue._then(Promise.props, void 0, void 0, void 0, void 0, caller); } else { ret = new PropertiesPromiseArray( castValue, caller, useBound === true && castValue._isBound() ? castValue._boundTo : void 0 ).promise(); useBound = false; } if (useBound === true && castValue._isBound()) { ret._setBoundTo(castValue._boundTo); } return ret; } Promise.prototype.props = function Promise$props() { return Promise$_Props(this, true, this.props); }; Promise.props = function Promise$Props(promises) { return Promise$_Props(promises, false, Promise.props); }; }; },{"./errors_api_rejection":11,"./properties_promise_array.js":26,"./util.js":39}],28:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var ASSERT = require("./assert.js"); function arrayCopy(src, srcIndex, dst, dstIndex, len) { for (var j = 0; j < len; ++j) { dst[j + dstIndex] = src[j + srcIndex]; } } function pow2AtLeast(n) { n = n >>> 0; n = n - 1; n = n | (n >> 1); n = n | (n >> 2); n = n | (n >> 4); n = n | (n >> 8); n = n | (n >> 16); return n + 1; } function getCapacity(capacity) { if (typeof capacity !== "number") return 16; return pow2AtLeast( Math.min( Math.max(16, capacity), 1073741824) ); } function Queue(capacity) { this._capacity = getCapacity(capacity); this._length = 0; this._front = 0; this._makeCapacity(); } Queue.prototype._willBeOverCapacity = function Queue$_willBeOverCapacity(size) { return this._capacity < size; }; Queue.prototype._pushOne = function Queue$_pushOne(arg) { var length = this.length(); this._checkCapacity(length + 1); var i = (this._front + length) & (this._capacity - 1); this[i] = arg; this._length = length + 1; }; Queue.prototype.push = function Queue$push(fn, receiver, arg) { var length = this.length() + 3; if (this._willBeOverCapacity(length)) { this._pushOne(fn); this._pushOne(receiver); this._pushOne(arg); return; } var j = this._front + length - 3; this._checkCapacity(length); var wrapMask = this._capacity - 1; this[(j + 0) & wrapMask] = fn; this[(j + 1) & wrapMask] = receiver; this[(j + 2) & wrapMask] = arg; this._length = length; }; Queue.prototype.shift = function Queue$shift() { var front = this._front, ret = this[front]; this[front] = void 0; this._front = (front + 1) & (this._capacity - 1); this._length--; return ret; }; Queue.prototype.length = function Queue$length() { return this._length; }; Queue.prototype._makeCapacity = function Queue$_makeCapacity() { var len = this._capacity; for (var i = 0; i < len; ++i) { this[i] = void 0; } }; Queue.prototype._checkCapacity = function Queue$_checkCapacity(size) { if (this._capacity < size) { this._resizeTo(this._capacity << 3); } }; Queue.prototype._resizeTo = function Queue$_resizeTo(capacity) { var oldFront = this._front; var oldCapacity = this._capacity; var oldQueue = new Array(oldCapacity); var length = this.length(); arrayCopy(this, 0, oldQueue, 0, oldCapacity); this._capacity = capacity; this._makeCapacity(); this._front = 0; if (oldFront + length <= oldCapacity) { arrayCopy(oldQueue, oldFront, this, 0, length); } else { var lengthBeforeWrapping = length - ((oldFront + length) & (oldCapacity - 1)); arrayCopy(oldQueue, oldFront, this, 0, lengthBeforeWrapping); arrayCopy(oldQueue, 0, this, lengthBeforeWrapping, length - lengthBeforeWrapping); } }; module.exports = Queue; },{"./assert.js":2}],29:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, INTERNAL) { var apiRejection = require("./errors_api_rejection.js")(Promise); var isArray = require("./util.js").isArray; var raceLater = function Promise$_raceLater(promise) { return promise.then(function Promise$_lateRacer(array) { return Promise$_Race(array, Promise$_lateRacer, promise); }); }; var hasOwn = {}.hasOwnProperty; function Promise$_Race(promises, caller, parent) { var maybePromise = Promise._cast(promises, caller, void 0); if (Promise.is(maybePromise)) { return raceLater(maybePromise); } else if (!isArray(promises)) { return apiRejection("expecting an array, a promise or a thenable"); } var ret = new Promise(INTERNAL); ret._setTrace(caller, parent); if (parent !== void 0) { if (parent._isBound()) { ret._setBoundTo(parent._boundTo); } if (parent._cancellable()) { ret._setCancellable(); ret._cancellationParent = parent; } } var fulfill = ret._fulfill; var reject = ret._reject; for (var i = 0, len = promises.length; i < len; ++i) { var val = promises[i]; if (val === void 0 && !(hasOwn.call(promises, i))) { continue; } Promise.cast(val)._then( fulfill, reject, void 0, ret, null, caller ); } return ret; } Promise.race = function Promise$Race(promises) { return Promise$_Race(promises, Promise.race, void 0); }; Promise.prototype.race = function Promise$race() { return Promise$_Race(this, this.race, void 0); }; }; },{"./errors_api_rejection.js":11,"./util.js":39}],30:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function( Promise, Promise$_CreatePromiseArray, PromiseArray, apiRejection, INTERNAL) { var ASSERT = require("./assert.js"); function Reduction(callback, index, accum, items, receiver) { this.promise = new Promise(INTERNAL); this.index = index; this.length = items.length; this.items = items; this.callback = callback; this.receiver = receiver; this.accum = accum; } Reduction.prototype.reject = function Reduction$reject(e) { this.promise._reject(e); }; Reduction.prototype.fulfill = function Reduction$fulfill(value, index) { this.accum = value; this.index = index + 1; this.iterate(); }; Reduction.prototype.iterate = function Reduction$iterate() { var i = this.index; var len = this.length; var items = this.items; var result = this.accum; var receiver = this.receiver; var callback = this.callback; var iterate = this.iterate; for(; i < len; ++i) { result = Promise._cast( callback.call( receiver, result, items[i], i, len ), iterate, void 0 ); if (result instanceof Promise) { result._then( this.fulfill, this.reject, void 0, this, i, iterate); return; } } this.promise._fulfill(result); }; function Promise$_reducer(fulfilleds, initialValue) { var fn = this; var receiver = void 0; if (typeof fn !== "function") { receiver = fn.receiver; fn = fn.fn; } var len = fulfilleds.length; var accum = void 0; var startIndex = 0; if (initialValue !== void 0) { accum = initialValue; startIndex = 0; } else { startIndex = 1; if (len > 0) accum = fulfilleds[0]; } var i = startIndex; if (i >= len) { return accum; } var reduction = new Reduction(fn, i, accum, fulfilleds, receiver); reduction.iterate(); return reduction.promise; } function Promise$_unpackReducer(fulfilleds) { var fn = this.fn; var initialValue = this.initialValue; return Promise$_reducer.call(fn, fulfilleds, initialValue); } function Promise$_slowReduce( promises, fn, initialValue, useBound, caller) { return initialValue._then(function callee(initialValue) { return Promise$_Reduce( promises, fn, initialValue, useBound, callee); }, void 0, void 0, void 0, void 0, caller); } function Promise$_Reduce(promises, fn, initialValue, useBound, caller) { if (typeof fn !== "function") { return apiRejection("fn must be a function"); } if (useBound === true && promises._isBound()) { fn = { fn: fn, receiver: promises._boundTo }; } if (initialValue !== void 0) { if (Promise.is(initialValue)) { if (initialValue.isFulfilled()) { initialValue = initialValue._settledValue; } else { return Promise$_slowReduce(promises, fn, initialValue, useBound, caller); } } return Promise$_CreatePromiseArray(promises, PromiseArray, caller, useBound === true && promises._isBound() ? promises._boundTo : void 0) .promise() ._then(Promise$_unpackReducer, void 0, void 0, { fn: fn, initialValue: initialValue }, void 0, Promise.reduce); } return Promise$_CreatePromiseArray(promises, PromiseArray, caller, useBound === true && promises._isBound() ? promises._boundTo : void 0).promise() ._then(Promise$_reducer, void 0, void 0, fn, void 0, caller); } Promise.reduce = function Promise$Reduce(promises, fn, initialValue) { return Promise$_Reduce(promises, fn, initialValue, false, Promise.reduce); }; Promise.prototype.reduce = function Promise$reduce(fn, initialValue) { return Promise$_Reduce(this, fn, initialValue, true, this.reduce); }; }; },{"./assert.js":2}],31:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var global = require("./global.js"); var ASSERT = require("./assert.js"); var schedule; if (typeof process !== "undefined" && process !== null && typeof process.cwd === "function" && typeof process.nextTick === "function" && typeof process.version === "string") { schedule = function Promise$_Scheduler(fn) { process.nextTick(fn); }; } else if ((typeof global.MutationObserver === "function" || typeof global.WebkitMutationObserver === "function" || typeof global.WebKitMutationObserver === "function") && typeof document !== "undefined" && typeof document.createElement === "function") { schedule = (function(){ var MutationObserver = global.MutationObserver || global.WebkitMutationObserver || global.WebKitMutationObserver; var div = document.createElement("div"); var queuedFn = void 0; var observer = new MutationObserver( function Promise$_Scheduler() { var fn = queuedFn; queuedFn = void 0; fn(); } ); observer.observe(div, { attributes: true }); return function Promise$_Scheduler(fn) { queuedFn = fn; div.setAttribute("class", "foo"); }; })(); } else if (typeof global.postMessage === "function" && typeof global.importScripts !== "function" && typeof global.addEventListener === "function" && typeof global.removeEventListener === "function") { var MESSAGE_KEY = "bluebird_message_key_" + Math.random(); schedule = (function(){ var queuedFn = void 0; function Promise$_Scheduler(e) { if (e.source === global && e.data === MESSAGE_KEY) { var fn = queuedFn; queuedFn = void 0; fn(); } } global.addEventListener("message", Promise$_Scheduler, false); return function Promise$_Scheduler(fn) { queuedFn = fn; global.postMessage( MESSAGE_KEY, "*" ); }; })(); } else if (typeof global.MessageChannel === "function") { schedule = (function(){ var queuedFn = void 0; var channel = new global.MessageChannel(); channel.port1.onmessage = function Promise$_Scheduler() { var fn = queuedFn; queuedFn = void 0; fn(); }; return function Promise$_Scheduler(fn) { queuedFn = fn; channel.port2.postMessage(null); }; })(); } else if (global.setTimeout) { schedule = function Promise$_Scheduler(fn) { setTimeout(fn, 4); }; } else { schedule = function Promise$_Scheduler(fn) { fn(); }; } module.exports = schedule; },{"./assert.js":2,"./global.js":16}],32:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray) { var SettledPromiseArray = require("./settled_promise_array.js")( Promise, PromiseArray); function Promise$_Settle(promises, useBound, caller) { return Promise$_CreatePromiseArray( promises, SettledPromiseArray, caller, useBound === true && promises._isBound() ? promises._boundTo : void 0 ).promise(); } Promise.settle = function Promise$Settle(promises) { return Promise$_Settle(promises, false, Promise.settle); }; Promise.prototype.settle = function Promise$settle() { return Promise$_Settle(this, true, this.settle); }; }; },{"./settled_promise_array.js":33}],33:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, PromiseArray) { var ASSERT = require("./assert.js"); var PromiseInspection = require("./promise_inspection.js"); var util = require("./util.js"); var inherits = util.inherits; function SettledPromiseArray(values, caller, boundTo) { this.constructor$(values, caller, boundTo); } inherits(SettledPromiseArray, PromiseArray); SettledPromiseArray.prototype._promiseResolved = function SettledPromiseArray$_promiseResolved(index, inspection) { this._values[index] = inspection; var totalResolved = ++this._totalResolved; if (totalResolved >= this._length) { this._resolve(this._values); } }; SettledPromiseArray.prototype._promiseFulfilled = function SettledPromiseArray$_promiseFulfilled(value, index) { if (this._isResolved()) return; var ret = new PromiseInspection(); ret._bitField = 268435456; ret._settledValue = value; this._promiseResolved(index, ret); }; SettledPromiseArray.prototype._promiseRejected = function SettledPromiseArray$_promiseRejected(reason, index) { if (this._isResolved()) return; var ret = new PromiseInspection(); ret._bitField = 134217728; ret._settledValue = reason; this._promiseResolved(index, ret); }; return SettledPromiseArray; }; },{"./assert.js":2,"./promise_inspection.js":22,"./util.js":39}],34:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, Promise$_CreatePromiseArray, PromiseArray, apiRejection) { var SomePromiseArray = require("./some_promise_array.js")(PromiseArray); var ASSERT = require("./assert.js"); function Promise$_Some(promises, howMany, useBound, caller) { if ((howMany | 0) !== howMany || howMany < 0) { return apiRejection("expecting a positive integer"); } var ret = Promise$_CreatePromiseArray( promises, SomePromiseArray, caller, useBound === true && promises._isBound() ? promises._boundTo : void 0 ); var promise = ret.promise(); if (promise.isRejected()) { return promise; } ret.setHowMany(howMany); ret.init(); return promise; } Promise.some = function Promise$Some(promises, howMany) { return Promise$_Some(promises, howMany, false, Promise.some); }; Promise.prototype.some = function Promise$some(count) { return Promise$_Some(this, count, true, this.some); }; }; },{"./assert.js":2,"./some_promise_array.js":35}],35:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function (PromiseArray) { var util = require("./util.js"); var RangeError = require("./errors.js").RangeError; var inherits = util.inherits; var isArray = util.isArray; function SomePromiseArray(values, caller, boundTo) { this.constructor$(values, caller, boundTo); this._howMany = 0; this._unwrap = false; this._initialized = false; } inherits(SomePromiseArray, PromiseArray); SomePromiseArray.prototype._init = function SomePromiseArray$_init() { if (!this._initialized) { return; } if (this._howMany === 0) { this._resolve([]); return; } this._init$(void 0, -2); var isArrayResolved = isArray(this._values); this._holes = isArrayResolved ? this._values.length - this.length() : 0; if (!this._isResolved() && isArrayResolved && this._howMany > this._canPossiblyFulfill()) { var message = "(Promise.some) input array contains less than " + this._howMany + " promises"; this._reject(new RangeError(message)); } }; SomePromiseArray.prototype.init = function SomePromiseArray$init() { this._initialized = true; this._init(); }; SomePromiseArray.prototype.setUnwrap = function SomePromiseArray$setUnwrap() { this._unwrap = true; }; SomePromiseArray.prototype.howMany = function SomePromiseArray$howMany() { return this._howMany; }; SomePromiseArray.prototype.setHowMany = function SomePromiseArray$setHowMany(count) { if (this._isResolved()) return; this._howMany = count; }; SomePromiseArray.prototype._promiseFulfilled = function SomePromiseArray$_promiseFulfilled(value) { if (this._isResolved()) return; this._addFulfilled(value); if (this._fulfilled() === this.howMany()) { this._values.length = this.howMany(); if (this.howMany() === 1 && this._unwrap) { this._resolve(this._values[0]); } else { this._resolve(this._values); } } }; SomePromiseArray.prototype._promiseRejected = function SomePromiseArray$_promiseRejected(reason) { if (this._isResolved()) return; this._addRejected(reason); if (this.howMany() > this._canPossiblyFulfill()) { if (this._values.length === this.length()) { this._reject([]); } else { this._reject(this._values.slice(this.length() + this._holes)); } } }; SomePromiseArray.prototype._fulfilled = function SomePromiseArray$_fulfilled() { return this._totalResolved; }; SomePromiseArray.prototype._rejected = function SomePromiseArray$_rejected() { return this._values.length - this.length() - this._holes; }; SomePromiseArray.prototype._addRejected = function SomePromiseArray$_addRejected(reason) { this._values.push(reason); }; SomePromiseArray.prototype._addFulfilled = function SomePromiseArray$_addFulfilled(value) { this._values[this._totalResolved++] = value; }; SomePromiseArray.prototype._canPossiblyFulfill = function SomePromiseArray$_canPossiblyFulfill() { return this.length() - this._rejected(); }; return SomePromiseArray; }; },{"./errors.js":10,"./util.js":39}],36:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise) { var PromiseInspection = require("./promise_inspection.js"); Promise.prototype.inspect = function Promise$inspect() { return new PromiseInspection(this); }; }; },{"./promise_inspection.js":22}],37:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; module.exports = function(Promise, INTERNAL) { var ASSERT = require("./assert.js"); var util = require("./util.js"); var canAttach = require("./errors.js").canAttach; var errorObj = util.errorObj; var isObject = util.isObject; function getThen(obj) { try { return obj.then; } catch(e) { errorObj.e = e; return errorObj; } } function Promise$_Cast(obj, caller, originalPromise) { if (isObject(obj)) { if (obj instanceof Promise) { return obj; } else if (isAnyBluebirdPromise(obj)) { var ret = new Promise(INTERNAL); ret._setTrace(caller, void 0); obj._then( ret._fulfillUnchecked, ret._rejectUncheckedCheckError, ret._progressUnchecked, ret, null, void 0 ); ret._setFollowing(); return ret; } var then = getThen(obj); if (then === errorObj) { caller = typeof caller === "function" ? caller : Promise$_Cast; if (originalPromise !== void 0 && canAttach(then.e)) { originalPromise._attachExtraTrace(then.e); } return Promise.reject(then.e, caller); } else if (typeof then === "function") { caller = typeof caller === "function" ? caller : Promise$_Cast; return Promise$_doThenable(obj, then, caller, originalPromise); } } return obj; } var hasProp = {}.hasOwnProperty; function isAnyBluebirdPromise(obj) { return hasProp.call(obj, "_promise0"); } function Promise$_doThenable(x, then, caller, originalPromise) { var resolver = Promise.defer(caller); var called = false; try { then.call( x, Promise$_resolveFromThenable, Promise$_rejectFromThenable, Promise$_progressFromThenable ); } catch(e) { if (!called) { called = true; var trace = canAttach(e) ? e : new Error(e + ""); if (originalPromise !== void 0) { originalPromise._attachExtraTrace(trace); } resolver.promise._reject(e, trace); } } return resolver.promise; function Promise$_resolveFromThenable(y) { if (called) return; called = true; if (x === y) { var e = Promise._makeSelfResolutionError(); if (originalPromise !== void 0) { originalPromise._attachExtraTrace(e); } resolver.promise._reject(e, void 0); return; } resolver.resolve(y); } function Promise$_rejectFromThenable(r) { if (called) return; called = true; var trace = canAttach(r) ? r : new Error(r + ""); if (originalPromise !== void 0) { originalPromise._attachExtraTrace(trace); } resolver.promise._reject(r, trace); } function Promise$_progressFromThenable(v) { if (called) return; var promise = resolver.promise; if (typeof promise._progress === "function") { promise._progress(v); } } } Promise._cast = Promise$_Cast; }; },{"./assert.js":2,"./errors.js":10,"./util.js":39}],38:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var global = require("./global.js"); var setTimeout = function(fn, time) { var $_len = arguments.length;var args = new Array($_len - 2); for(var $_i = 2; $_i < $_len; ++$_i) {args[$_i - 2] = arguments[$_i];} global.setTimeout(function() { fn.apply(void 0, args); }, time); }; var pass = {}; global.setTimeout( function(_) { if(_ === pass) { setTimeout = global.setTimeout; } }, 1, pass); module.exports = function(Promise, INTERNAL) { var util = require("./util.js"); var ASSERT = require("./assert.js"); var errors = require("./errors.js"); var apiRejection = require("./errors_api_rejection")(Promise); var TimeoutError = Promise.TimeoutError; var afterTimeout = function Promise$_afterTimeout(promise, message, ms) { if (!promise.isPending()) return; if (typeof message !== "string") { message = "operation timed out after" + " " + ms + " ms" } var err = new TimeoutError(message); errors.markAsOriginatingFromRejection(err); promise._attachExtraTrace(err); promise._rejectUnchecked(err); }; var afterDelay = function Promise$_afterDelay(value, promise) { promise._fulfill(value); }; Promise.delay = function Promise$Delay(value, ms, caller) { if (ms === void 0) { ms = value; value = void 0; } ms = +ms; if (typeof caller !== "function") { caller = Promise.delay; } var maybePromise = Promise._cast(value, caller, void 0); var promise = new Promise(INTERNAL); if (Promise.is(maybePromise)) { if (maybePromise._isBound()) { promise._setBoundTo(maybePromise._boundTo); } if (maybePromise._cancellable()) { promise._setCancellable(); promise._cancellationParent = maybePromise; } promise._setTrace(caller, maybePromise); promise._follow(maybePromise); return promise.then(function(value) { return Promise.delay(value, ms); }); } else { promise._setTrace(caller, void 0); setTimeout(afterDelay, ms, value, promise); } return promise; }; Promise.prototype.delay = function Promise$delay(ms) { return Promise.delay(this, ms, this.delay); }; Promise.prototype.timeout = function Promise$timeout(ms, message) { ms = +ms; var ret = new Promise(INTERNAL); ret._setTrace(this.timeout, this); if (this._isBound()) ret._setBoundTo(this._boundTo); if (this._cancellable()) { ret._setCancellable(); ret._cancellationParent = this; } ret._follow(this); setTimeout(afterTimeout, ms, ret, message, ms); return ret; }; }; },{"./assert.js":2,"./errors.js":10,"./errors_api_rejection":11,"./global.js":16,"./util.js":39}],39:[function(require,module,exports){ /** * Copyright (c) 2014 Petka Antonov * * 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. * */ "use strict"; var global = require("./global.js"); var ASSERT = require("./assert.js"); var es5 = require("./es5.js"); var haveGetters = (function(){ try { var o = {}; es5.defineProperty(o, "f", { get: function () { return 3; } }); return o.f === 3; } catch (e) { return false; } })(); var canEvaluate = (function() { if (typeof window !== "undefined" && window !== null && typeof window.document !== "undefined" && typeof navigator !== "undefined" && navigator !== null && typeof navigator.appName === "string" && window === global) { return false; } return true; })(); function deprecated(msg) { if (typeof console !== "undefined" && console !== null && typeof console.warn === "function") { console.warn("Bluebird: " + msg); } } var errorObj = {e: {}}; function tryCatch1(fn, receiver, arg) { try { return fn.call(receiver, arg); } catch (e) { errorObj.e = e; return errorObj; } } function tryCatch2(fn, receiver, arg, arg2) { try { return fn.call(receiver, arg, arg2); } catch (e) { errorObj.e = e; return errorObj; } } function tryCatchApply(fn, args, receiver) { try { return fn.apply(receiver, args); } catch (e) { errorObj.e = e; return errorObj; } } var inherits = function(Child, Parent) { var hasProp = {}.hasOwnProperty; function T() { this.constructor = Child; this.constructor$ = Parent; for (var propertyName in Parent.prototype) { if (hasProp.call(Parent.prototype, propertyName) && propertyName.charAt(propertyName.length-1) !== "$" ) { this[propertyName + "$"] = Parent.prototype[propertyName]; } } } T.prototype = Parent.prototype; Child.prototype = new T(); return Child.prototype; }; function asString(val) { return typeof val === "string" ? val : ("" + val); } function isPrimitive(val) { return val == null || val === true || val === false || typeof val === "string" || typeof val === "number"; } function isObject(value) { return !isPrimitive(value); } function maybeWrapAsError(maybeError) { if (!isPrimitive(maybeError)) return maybeError; return new Error(asString(maybeError)); } function withAppended(target, appendee) { var len = target.length; var ret = new Array(len + 1); var i; for (i = 0; i < len; ++i) { ret[i] = target[i]; } ret[i] = appendee; return ret; } function notEnumerableProp(obj, name, value) { var descriptor = { value: value, configurable: true, enumerable: false, writable: true }; es5.defineProperty(obj, name, descriptor); return obj; } var wrapsPrimitiveReceiver = (function() { return this !== "string"; }).call("string"); function thrower(r) { throw r; } var ret = { thrower: thrower, isArray: es5.isArray, haveGetters: haveGetters, notEnumerableProp: notEnumerableProp, isPrimitive: isPrimitive, isObject: isObject, canEvaluate: canEvaluate, deprecated: deprecated, errorObj: errorObj, tryCatch1: tryCatch1, tryCatch2: tryCatch2, tryCatchApply: tryCatchApply, inherits: inherits, withAppended: withAppended, asString: asString, maybeWrapAsError: maybeWrapAsError, wrapsPrimitiveReceiver: wrapsPrimitiveReceiver }; module.exports = ret; },{"./assert.js":2,"./es5.js":12,"./global.js":16}]},{},[4]) (4) }); ; ================================================ FILE: libs/plasio/workers/laz-loader-worker.js ================================================ // laz-loader-worker.js // //import {Module} from "./laz-perf.js"; let instance = null; // laz-perf instance function readAs(buf, Type, offset, count) { count = (count === undefined || count === 0 ? 1 : count); var sub = buf.slice(offset, offset + Type.BYTES_PER_ELEMENT * count); var r = new Type(sub); if (count === undefined || count === 1) return r[0]; var ret = []; for (var i = 0 ; i < count ; i ++) { ret.push(r[i]); } return ret; } function parseLASHeader(arraybuffer) { var o = { }; o.pointsOffset = readAs(arraybuffer, Uint32Array, 32*3); o.pointsFormatId = readAs(arraybuffer, Uint8Array, 32*3+8) & 0b111111; o.pointsStructSize = readAs(arraybuffer, Uint16Array, 32*3+8+1); o.extraBytes = 0; switch (o.pointsFormatId) { case 0: o.extraBytes = o.pointsStructSize - 20; break; case 1: o.extraBytes = o.pointsStructSize - 28; break; case 2: o.extraBytes = o.pointsStructSize - 26; break; case 3: o.extraBytes = o.pointsStructSize - 34; break; } o.pointsCount = readAs(arraybuffer, Uint32Array, 32 * 3 + 11); var start = 32 * 3 + 35; o.scale = readAs(arraybuffer, Float64Array, start, 3); start += 24; o.offset = readAs(arraybuffer, Float64Array, start, 3); start += 24; var bounds = readAs(arraybuffer, Float64Array, start, 6); start += 48; o.maxs = [bounds[0], bounds[2], bounds[4]]; o.mins = [bounds[1], bounds[3], bounds[5]]; return o; } function handleEvent(msg) { switch(msg.type) { case "open": try { instance = new Module.LASZip(); var abInt = new Uint8Array(msg.arraybuffer); var buf = Module._malloc(msg.arraybuffer.byteLength); instance.arraybuffer = msg.arraybuffer; instance.buf = buf; Module.HEAPU8.set(abInt, buf); instance.open(buf, msg.arraybuffer.byteLength); instance.readOffset = 0; postMessage({ type: "open", status: 1}); }catch(e) { debugger; postMessage({ type: "open", status: 0, details: e }); } break; case "header": if (!instance) throw new Error( "You need to open the file before reading the header"); var header = parseLASHeader(instance.arraybuffer); header.pointsFormatId &= 0x3f; instance.header = header; postMessage({type: "header", status: 1, header: header}); break; case "read": if (!instance) throw new Error( "You need to open the file before trying to read"); var start = msg.start, count = msg.count, skip = msg.skip; var o = instance; if (!o.header) throw new Error( "You need to query header before reading"); let h = o.header; var pointsToRead = Math.min( count * skip, h.pointsCount - o.readOffset); var bufferSize = Math.ceil(pointsToRead / skip); var pointsRead = 0; let buffer = new ArrayBuffer(bufferSize * h.pointsStructSize); let this_buf = new Uint8Array(buffer); var buf_read = Module._malloc(h.pointsStructSize); for (var i = 0 ; i < pointsToRead ; i ++) { o.getPoint(buf_read); if (i % skip === 0) { var a = new Uint8Array( Module.HEAPU8.buffer, buf_read, h.pointsStructSize); this_buf.set( a, pointsRead * h.pointsStructSize, h.pointsStructSize); ++pointsRead; } ++o.readOffset; } Module._free(buf_read); let transferables = [buffer]; postMessage({ type: 'header', status: 1, buffer: buffer, count: pointsRead, hasMoreData: o.readOffset < o.header.pointsCount }, transferables); break; case "close": if (instance !== null) { Module._free(instance.buf); instance.delete(); instance = null; }else{ debugger; } postMessage({ type: "close", status: 1}); break; } } onmessage = function(event) { try { handleEvent(event.data); } catch(e) { debugger; postMessage({type: event.data.type, status: 0, details: e}); } }; ================================================ FILE: libs/plasio/workers/laz-perf.js ================================================ // The Module object: Our interface to the outside world. We import // and export values on it. There are various ways Module can be used: // 1. Not defined. We create it here // 2. A function parameter, function(Module) { ..generated code.. } // 3. pre-run appended it, var Module = {}; ..generated code.. // 4. External script tag defines var Module. // We need to check if Module already exists (e.g. case 3 above). // Substitution will be replaced with actual code on later stage of the build, // this way Closure Compiler will not mangle it (e.g. case 4. above). // Note that if you want to run closure, and also to use Module // after the generated code, you will need to define var Module = {}; // before the code. Then that object will be used in the code, and you // can continue to use Module afterwards as well. var Module = typeof Module !== 'undefined' ? Module : {}; // --pre-jses are emitted after the Module integration code, so that they can // refer to Module (if they choose; they can also define Module) // {{PRE_JSES}} // Sometimes an existing Module object exists with properties // meant to overwrite the default module functionality. Here // we collect those properties and reapply _after_ we configure // the current environment's defaults to avoid having to be so // defensive during initialization. var moduleOverrides = {}; 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'] = []; // The environment setup code below is customized to use Module. // *** Environment setup code *** var ENVIRONMENT_IS_WEB = false; var ENVIRONMENT_IS_WORKER = false; var ENVIRONMENT_IS_NODE = false; var ENVIRONMENT_IS_SHELL = false; // Three configurations we can be running in: // 1) We could be the application main() thread running in the main JS UI thread. (ENVIRONMENT_IS_WORKER == false and ENVIRONMENT_IS_PTHREAD == false) // 2) We could be the application main() thread proxied to worker. (with Emscripten -s PROXY_TO_WORKER=1) (ENVIRONMENT_IS_WORKER == true, ENVIRONMENT_IS_PTHREAD == false) // 3) We could be an application pthread running in a worker. (ENVIRONMENT_IS_WORKER == true and ENVIRONMENT_IS_PTHREAD == true) if (Module['ENVIRONMENT']) { if (Module['ENVIRONMENT'] === 'WEB') { ENVIRONMENT_IS_WEB = true; } else if (Module['ENVIRONMENT'] === 'WORKER') { ENVIRONMENT_IS_WORKER = true; } else if (Module['ENVIRONMENT'] === 'NODE') { ENVIRONMENT_IS_NODE = true; } else if (Module['ENVIRONMENT'] === 'SHELL') { ENVIRONMENT_IS_SHELL = true; } else { throw new Error('Module[\'ENVIRONMENT\'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.'); } } else { ENVIRONMENT_IS_WEB = typeof window === 'object'; ENVIRONMENT_IS_WORKER = typeof importScripts === 'function'; ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function' && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER; ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; } if (ENVIRONMENT_IS_NODE) { // Expose functionality in the same simple way that the shells work // Note that we pollute the global namespace here, otherwise we break in node 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); if (typeof module !== 'undefined') { module['exports'] = Module; } process['on']('uncaughtException', function(ex) { // suppress ExitStatus exceptions from showing an error if (!(ex instanceof ExitStatus)) { throw ex; } }); // Currently node will swallow unhandled rejections, but this behavior is // deprecated, and in the future it will exit with error status. process['on']('unhandledRejection', function(reason, p) { Module['printErr']('node.js exiting due to unhandled promise rejection'); process['exit'](1); }); 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, toThrow) { quit(status); } } } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { 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)) { // file URLs can return 0 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 { throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); } // console.log is checked first, as 'print' on the web will open a print dialogue // printErr is preferable to console.warn (works better in shells) // bind(console) is necessary to fix IE/Edge closed dev tools panel behavior. Module['print'] = typeof console !== 'undefined' ? console.log.bind(console) : (typeof print !== 'undefined' ? print : null); Module['printErr'] = typeof printErr !== 'undefined' ? printErr : ((typeof console !== 'undefined' && console.warn.bind(console)) || Module['print']); // *** Environment setup code *** // Closure helpers Module.print = Module['print']; Module.printErr = Module['printErr']; // Merge back in the overrides for (key in moduleOverrides) { if (moduleOverrides.hasOwnProperty(key)) { Module[key] = moduleOverrides[key]; } } // Free the object hierarchy contained in the overrides, this lets the GC // reclaim data used e.g. in memoryInitializerRequest, which is a large typed array. moduleOverrides = undefined; // {{PREAMBLE_ADDITIONS}} var STACK_ALIGN = 16; // stack management, and other functionality that is provided by the compiled code, // should not be used before it is ready stackSave = stackRestore = stackAlloc = setTempRet0 = getTempRet0 = function() { abort('cannot use the stack before compiled code is ready to run, and has provided stack access'); }; function staticAlloc(size) { assert(!staticSealed); var ret = STATICTOP; STATICTOP = (STATICTOP + size + 15) & -16; return ret; } function dynamicAlloc(size) { assert(DYNAMICTOP_PTR); var ret = HEAP32[DYNAMICTOP_PTR>>2]; var end = (ret + size + 15) & -16; HEAP32[DYNAMICTOP_PTR>>2] = end; if (end >= TOTAL_MEMORY) { var success = enlargeMemory(); if (!success) { HEAP32[DYNAMICTOP_PTR>>2] = ret; return 0; } } return ret; } function alignMemory(size, factor) { if (!factor) factor = STACK_ALIGN; // stack alignment (16-byte) by default var ret = size = Math.ceil(size / factor) * factor; 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; // A pointer } else if (type[0] === 'i') { var bits = parseInt(type.substr(1)); assert(bits % 8 === 0); return bits / 8; } else { return 0; } } } } function warnOnce(text) { if (!warnOnce.shown) warnOnce.shown = {}; if (!warnOnce.shown[text]) { warnOnce.shown[text] = 1; Module.printErr(text); } } var jsCallStartIndex = 1; var functionPointers = new Array(0); // 'sig' parameter is only used on LLVM wasm backend function addFunction(func, sig) { if (typeof sig === 'undefined') { Module.printErr('warning: addFunction(): You should provide a wasm function signature string as a second argument. This is not necessary for asm.js and asm2wasm, but is required for the LLVM wasm backend, so it is recommended for full portability.'); } var base = 0; for (var i = base; i < base + 0; i++) { if (!functionPointers[i]) { functionPointers[i] = func; return jsCallStartIndex + i; } } throw 'Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.'; } function removeFunction(index) { functionPointers[index-jsCallStartIndex] = null; } var funcWrappers = {}; function getFuncWrapper(func, sig) { if (!func) return; // on null pointer, return undefined assert(sig); if (!funcWrappers[sig]) { funcWrappers[sig] = {}; } var sigCache = funcWrappers[sig]; if (!sigCache[func]) { // optimize away arguments usage in common cases if (sig.length === 1) { sigCache[func] = function dynCall_wrapper() { return dynCall(sig, func); }; } else if (sig.length === 2) { sigCache[func] = function dynCall_wrapper(arg) { return dynCall(sig, func, [arg]); }; } else { // general case sigCache[func] = function dynCall_wrapper() { return dynCall(sig, func, Array.prototype.slice.call(arguments)); }; } } return sigCache[func]; } function makeBigInt(low, high, unsigned) { return unsigned ? ((+((low>>>0)))+((+((high>>>0)))*4294967296.0)) : ((+((low>>>0)))+((+((high|0)))*4294967296.0)); } function dynCall(sig, ptr, args) { if (args && args.length) { assert(args.length == sig.length-1); assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); return Module['dynCall_' + sig].apply(null, [ptr].concat(args)); } else { assert(sig.length == 1); assert(('dynCall_' + sig) in Module, 'bad function pointer type - no table for sig \'' + sig + '\''); return Module['dynCall_' + sig].call(null, ptr); } } function getCompilerSetting(name) { throw 'You must build with -s RETAIN_COMPILER_SETTINGS=1 for getCompilerSetting or emscripten_get_compiler_setting to work'; } var Runtime = { // FIXME backwards compatibility layer for ports. Support some Runtime.* // for now, fix it there, then remove it from here. That way we // can minimize any period of breakage. dynCall: dynCall, // for SDL2 port // helpful errors getTempRet0: function() { abort('getTempRet0() is now a top-level function, after removing the Runtime object. Remove "Runtime."') }, staticAlloc: function() { abort('staticAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."') }, stackAlloc: function() { abort('stackAlloc() is now a top-level function, after removing the Runtime object. Remove "Runtime."') }, }; // The address globals begin at. Very low in memory, for code size and optimization opportunities. // Above 0 is static memory, starting with globals. // Then the stack. // Then 'dynamic' memory for sbrk. var GLOBAL_BASE = 8; // === Preamble library stuff === // Documentation for the public APIs defined in this file must be updated in: // site/source/docs/api_reference/preamble.js.rst // A prebuilt local version of the documentation is available at: // site/build/text/docs/api_reference/preamble.js.txt // You can also build docs locally as HTML or other formats in site/ // An online HTML version (which may be of a different version of Emscripten) // is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html //======================================== // Runtime essentials //======================================== var ABORT = 0; // whether we are quitting the application. no code should run after this. set in exit() and abort() var EXITSTATUS = 0; /** @type {function(*, string=)} */ function assert(condition, text) { if (!condition) { abort('Assertion failed: ' + text); } } var globalScope = this; // Returns the C function with a specified identifier (for C++, you need to do manual name mangling) function getCFunc(ident) { var func = Module['_' + ident]; // closure exported function assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported'); return func; } var JSfuncs = { // Helpers for cwrap -- it can't refer to Runtime directly because it might // be renamed by closure, instead it calls JSfuncs['stackSave'].body to find // out what the minified function name is. 'stackSave': function() { stackSave() }, 'stackRestore': function() { stackRestore() }, // type conversion from js to c 'arrayToC' : function(arr) { var ret = stackAlloc(arr.length); writeArrayToMemory(arr, ret); return ret; }, 'stringToC' : function(str) { var ret = 0; if (str !== null && str !== undefined && str !== 0) { // null string // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0' var len = (str.length << 2) + 1; ret = stackAlloc(len); stringToUTF8(str, ret, len); } return ret; } }; // For fast lookup of conversion functions var toC = { 'string': JSfuncs['stringToC'], 'array': JSfuncs['arrayToC'] }; // C calling interface. function ccall (ident, returnType, argTypes, args, opts) { var func = getCFunc(ident); var cArgs = []; var stack = 0; assert(returnType !== 'array', 'Return type should not be "array".'); if (args) { for (var i = 0; i < args.length; i++) { var converter = toC[argTypes[i]]; if (converter) { if (stack === 0) stack = stackSave(); cArgs[i] = converter(args[i]); } else { cArgs[i] = args[i]; } } } var ret = func.apply(null, cArgs); if (returnType === 'string') ret = Pointer_stringify(ret); else if (returnType === 'boolean') ret = Boolean(ret); if (stack !== 0) { stackRestore(stack); } return ret; } function cwrap (ident, returnType, argTypes) { argTypes = argTypes || []; var cfunc = getCFunc(ident); // When the function takes numbers and returns a number, we can just return // the original function var numericArgs = argTypes.every(function(type){ return type === 'number'}); var numericRet = returnType !== 'string'; if (numericRet && numericArgs) { return cfunc; } return function() { return ccall(ident, returnType, argTypes, arguments); } } /** @type {function(number, number, string, boolean=)} */ function setValue(ptr, value, type, noSafe) { type = type || 'i8'; if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit switch(type) { case 'i1': HEAP8[((ptr)>>0)]=value; break; case 'i8': HEAP8[((ptr)>>0)]=value; break; case 'i16': HEAP16[((ptr)>>1)]=value; break; case 'i32': HEAP32[((ptr)>>2)]=value; break; case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math_abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math_min((+(Math_floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math_ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)]=tempI64[0],HEAP32[(((ptr)+(4))>>2)]=tempI64[1]); break; case 'float': HEAPF32[((ptr)>>2)]=value; break; case 'double': HEAPF64[((ptr)>>3)]=value; break; default: abort('invalid type for setValue: ' + type); } } /** @type {function(number, string, boolean=)} */ function getValue(ptr, type, noSafe) { type = type || 'i8'; if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit switch(type) { case 'i1': return HEAP8[((ptr)>>0)]; case 'i8': return HEAP8[((ptr)>>0)]; case 'i16': return HEAP16[((ptr)>>1)]; case 'i32': return HEAP32[((ptr)>>2)]; case 'i64': return HEAP32[((ptr)>>2)]; case 'float': return HEAPF32[((ptr)>>2)]; case 'double': return HEAPF64[((ptr)>>3)]; default: abort('invalid type for getValue: ' + type); } return null; } var ALLOC_NORMAL = 0; // Tries to use _malloc() var ALLOC_STACK = 1; // Lives for the duration of the current function call var ALLOC_STATIC = 2; // Cannot be freed var ALLOC_DYNAMIC = 3; // Cannot be freed except through sbrk var ALLOC_NONE = 4; // Do not allocate // allocate(): This is for internal use. You can use it yourself as well, but the interface // is a little tricky (see docs right below). The reason is that it is optimized // for multiple syntaxes to save space in generated code. So you should // normally not use allocate(), and instead allocate memory using _malloc(), // initialize it with setValue(), and so forth. // @slab: An array of data, or a number. If a number, then the size of the block to allocate, // in *bytes* (note that this is sometimes confusing: the next parameter does not // affect this!) // @types: Either an array of types, one for each byte (or 0 if no type at that position), // or a single type which is used for the entire block. This only matters if there // is initial data - if @slab is a number, then this does not matter at all and is // ignored. // @allocator: How to allocate memory, see ALLOC_* /** @type {function((TypedArray|Array|number), string, number, number=)} */ function allocate(slab, types, allocator, ptr) { var zeroinit, size; if (typeof slab === 'number') { zeroinit = true; size = slab; } else { zeroinit = false; size = slab.length; } var singleType = typeof types === 'string' ? types : null; var ret; if (allocator == ALLOC_NONE) { ret = ptr; } else { ret = [typeof _malloc === 'function' ? _malloc : staticAlloc, stackAlloc, staticAlloc, dynamicAlloc][allocator === undefined ? ALLOC_STATIC : allocator](Math.max(size, singleType ? 1 : types.length)); } if (zeroinit) { var stop; ptr = ret; assert((ret & 3) == 0); stop = ret + (size & ~3); for (; ptr < stop; ptr += 4) { HEAP32[((ptr)>>2)]=0; } stop = ret + size; while (ptr < stop) { HEAP8[((ptr++)>>0)]=0; } return ret; } if (singleType === 'i8') { if (slab.subarray || slab.slice) { HEAPU8.set(/** @type {!Uint8Array} */ (slab), ret); } else { HEAPU8.set(new Uint8Array(slab), ret); } return ret; } var i = 0, type, typeSize, previousType; while (i < size) { var curr = slab[i]; type = singleType || types[i]; if (type === 0) { i++; continue; } assert(type, 'Must know what type to store in allocate!'); if (type == 'i64') type = 'i32'; // special case: we have one i32 here, and one i32 later setValue(ret+i, curr, type); // no need to look up size unless type changes, so cache it if (previousType !== type) { typeSize = getNativeTypeSize(type); previousType = type; } i += typeSize; } return ret; } // Allocate memory during any stage of startup - static memory early on, dynamic memory later, malloc when ready function getMemory(size) { if (!staticSealed) return staticAlloc(size); if (!runtimeInitialized) return dynamicAlloc(size); return _malloc(size); } /** @type {function(number, number=)} */ function Pointer_stringify(ptr, length) { if (length === 0 || !ptr) return ''; // Find the length, and check for UTF while doing so var hasUtf = 0; var t; var i = 0; while (1) { assert(ptr + i < TOTAL_MEMORY); t = HEAPU8[(((ptr)+(i))>>0)]; hasUtf |= t; if (t == 0 && !length) break; i++; if (length && i == length) break; } if (!length) length = i; var ret = ''; if (hasUtf < 128) { var MAX_CHUNK = 1024; // split up into chunks, because .apply on a huge string can overflow the stack var curr; while (length > 0) { curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK))); ret = ret ? ret + curr : curr; ptr += MAX_CHUNK; length -= MAX_CHUNK; } return ret; } return UTF8ToString(ptr); } // Given a pointer 'ptr' to a null-terminated ASCII-encoded string in the emscripten HEAP, returns // a copy of that string as a Javascript String object. function AsciiToString(ptr) { var str = ''; while (1) { var ch = HEAP8[((ptr++)>>0)]; if (!ch) return str; str += String.fromCharCode(ch); } } // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', // null-terminated and encoded in ASCII form. The copy will require at most str.length+1 bytes of space in the HEAP. function stringToAscii(str, outPtr) { return writeAsciiToMemory(str, outPtr, false); } // Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the given array that contains uint8 values, returns // a copy of that string as a Javascript String object. var UTF8Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf8') : undefined; function UTF8ArrayToString(u8Array, idx) { var endPtr = idx; // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. while (u8Array[endPtr]) ++endPtr; if (endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) { return UTF8Decoder.decode(u8Array.subarray(idx, endPtr)); } else { var u0, u1, u2, u3, u4, u5; var str = ''; while (1) { // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 u0 = u8Array[idx++]; if (!u0) return str; if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } u1 = u8Array[idx++] & 63; if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } u2 = u8Array[idx++] & 63; if ((u0 & 0xF0) == 0xE0) { u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; } else { u3 = u8Array[idx++] & 63; if ((u0 & 0xF8) == 0xF0) { u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | u3; } else { u4 = u8Array[idx++] & 63; if ((u0 & 0xFC) == 0xF8) { u0 = ((u0 & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4; } else { u5 = u8Array[idx++] & 63; u0 = ((u0 & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5; } } } if (u0 < 0x10000) { str += String.fromCharCode(u0); } else { var ch = u0 - 0x10000; str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); } } } } // Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the emscripten HEAP, returns // a copy of that string as a Javascript String object. function UTF8ToString(ptr) { return UTF8ArrayToString(HEAPU8,ptr); } // Copies the given Javascript String object 'str' to the given byte array at address 'outIdx', // encoded in UTF8 form and null-terminated. The copy will require at most str.length*4+1 bytes of space in the HEAP. // Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. // Parameters: // str: the Javascript string to copy. // outU8Array: the array to copy to. Each index in this array is assumed to be one 8-byte element. // outIdx: The starting offset in the array to begin the copying. // maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null // terminator, i.e. if maxBytesToWrite=1, only the null terminator will be written and nothing else. // maxBytesToWrite=0 does not write any bytes to the output, not even the null terminator. // Returns the number of bytes written, EXCLUDING the null terminator. function stringToUTF8Array(str, outU8Array, outIdx, maxBytesToWrite) { if (!(maxBytesToWrite > 0)) // Parameter maxBytesToWrite is not optional. Negative values, 0, null, undefined and false each don't write out any bytes. return 0; var startIdx = outIdx; var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. for (var i = 0; i < str.length; ++i) { // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. // See http://unicode.org/faq/utf_bom.html#utf16-3 // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description and https://www.ietf.org/rfc/rfc2279.txt and https://tools.ietf.org/html/rfc3629 var u = str.charCodeAt(i); // possibly a lead surrogate if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); if (u <= 0x7F) { if (outIdx >= endIdx) break; outU8Array[outIdx++] = u; } else if (u <= 0x7FF) { if (outIdx + 1 >= endIdx) break; outU8Array[outIdx++] = 0xC0 | (u >> 6); outU8Array[outIdx++] = 0x80 | (u & 63); } else if (u <= 0xFFFF) { if (outIdx + 2 >= endIdx) break; outU8Array[outIdx++] = 0xE0 | (u >> 12); outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); outU8Array[outIdx++] = 0x80 | (u & 63); } else if (u <= 0x1FFFFF) { if (outIdx + 3 >= endIdx) break; outU8Array[outIdx++] = 0xF0 | (u >> 18); outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); outU8Array[outIdx++] = 0x80 | (u & 63); } else if (u <= 0x3FFFFFF) { if (outIdx + 4 >= endIdx) break; outU8Array[outIdx++] = 0xF8 | (u >> 24); outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); outU8Array[outIdx++] = 0x80 | (u & 63); } else { if (outIdx + 5 >= endIdx) break; outU8Array[outIdx++] = 0xFC | (u >> 30); outU8Array[outIdx++] = 0x80 | ((u >> 24) & 63); outU8Array[outIdx++] = 0x80 | ((u >> 18) & 63); outU8Array[outIdx++] = 0x80 | ((u >> 12) & 63); outU8Array[outIdx++] = 0x80 | ((u >> 6) & 63); outU8Array[outIdx++] = 0x80 | (u & 63); } } // Null-terminate the pointer to the buffer. outU8Array[outIdx] = 0; return outIdx - startIdx; } // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', // null-terminated and encoded in UTF8 form. The copy will require at most str.length*4+1 bytes of space in the HEAP. // Use the function lengthBytesUTF8 to compute the exact number of bytes (excluding null terminator) that this function will write. // Returns the number of bytes written, EXCLUDING the null terminator. function stringToUTF8(str, outPtr, maxBytesToWrite) { assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite); } // Returns the number of bytes the given Javascript string takes if encoded as a UTF8 byte array, EXCLUDING the null terminator byte. function lengthBytesUTF8(str) { var len = 0; for (var i = 0; i < str.length; ++i) { // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! So decode UTF16->UTF32->UTF8. // See http://unicode.org/faq/utf_bom.html#utf16-3 var u = str.charCodeAt(i); // possibly a lead surrogate if (u >= 0xD800 && u <= 0xDFFF) u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF); if (u <= 0x7F) { ++len; } else if (u <= 0x7FF) { len += 2; } else if (u <= 0xFFFF) { len += 3; } else if (u <= 0x1FFFFF) { len += 4; } else if (u <= 0x3FFFFFF) { len += 5; } else { len += 6; } } return len; } // Given a pointer 'ptr' to a null-terminated UTF16LE-encoded string in the emscripten HEAP, returns // a copy of that string as a Javascript String object. var UTF16Decoder = typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-16le') : undefined; function UTF16ToString(ptr) { assert(ptr % 2 == 0, 'Pointer passed to UTF16ToString must be aligned to two bytes!'); var endPtr = ptr; // TextDecoder needs to know the byte length in advance, it doesn't stop on null terminator by itself. // Also, use the length info to avoid running tiny strings through TextDecoder, since .subarray() allocates garbage. var idx = endPtr >> 1; while (HEAP16[idx]) ++idx; endPtr = idx << 1; if (endPtr - ptr > 32 && UTF16Decoder) { return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); } else { var i = 0; var str = ''; while (1) { var codeUnit = HEAP16[(((ptr)+(i*2))>>1)]; if (codeUnit == 0) return str; ++i; // fromCharCode constructs a character from a UTF-16 code unit, so we can pass the UTF16 string right through. str += String.fromCharCode(codeUnit); } } } // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', // null-terminated and encoded in UTF16 form. The copy will require at most str.length*4+2 bytes of space in the HEAP. // Use the function lengthBytesUTF16() to compute the exact number of bytes (excluding null terminator) that this function will write. // Parameters: // str: the Javascript string to copy. // outPtr: Byte address in Emscripten HEAP where to write the string to. // maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null // terminator, i.e. if maxBytesToWrite=2, only the null terminator will be written and nothing else. // maxBytesToWrite<2 does not write any bytes to the output, not even the null terminator. // Returns the number of bytes written, EXCLUDING the null terminator. function stringToUTF16(str, outPtr, maxBytesToWrite) { assert(outPtr % 2 == 0, 'Pointer passed to stringToUTF16 must be aligned to two bytes!'); assert(typeof maxBytesToWrite == 'number', 'stringToUTF16(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. if (maxBytesToWrite === undefined) { maxBytesToWrite = 0x7FFFFFFF; } if (maxBytesToWrite < 2) return 0; maxBytesToWrite -= 2; // Null terminator. var startPtr = outPtr; var numCharsToWrite = (maxBytesToWrite < str.length*2) ? (maxBytesToWrite / 2) : str.length; for (var i = 0; i < numCharsToWrite; ++i) { // charCodeAt returns a UTF-16 encoded code unit, so it can be directly written to the HEAP. var codeUnit = str.charCodeAt(i); // possibly a lead surrogate HEAP16[((outPtr)>>1)]=codeUnit; outPtr += 2; } // Null-terminate the pointer to the HEAP. HEAP16[((outPtr)>>1)]=0; return outPtr - startPtr; } // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. function lengthBytesUTF16(str) { return str.length*2; } function UTF32ToString(ptr) { assert(ptr % 4 == 0, 'Pointer passed to UTF32ToString must be aligned to four bytes!'); var i = 0; var str = ''; while (1) { var utf32 = HEAP32[(((ptr)+(i*4))>>2)]; if (utf32 == 0) return str; ++i; // Gotcha: fromCharCode constructs a character from a UTF-16 encoded code (pair), not from a Unicode code point! So encode the code point to UTF-16 for constructing. // See http://unicode.org/faq/utf_bom.html#utf16-3 if (utf32 >= 0x10000) { var ch = utf32 - 0x10000; str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); } else { str += String.fromCharCode(utf32); } } } // Copies the given Javascript String object 'str' to the emscripten HEAP at address 'outPtr', // null-terminated and encoded in UTF32 form. The copy will require at most str.length*4+4 bytes of space in the HEAP. // Use the function lengthBytesUTF32() to compute the exact number of bytes (excluding null terminator) that this function will write. // Parameters: // str: the Javascript string to copy. // outPtr: Byte address in Emscripten HEAP where to write the string to. // maxBytesToWrite: The maximum number of bytes this function can write to the array. This count should include the null // terminator, i.e. if maxBytesToWrite=4, only the null terminator will be written and nothing else. // maxBytesToWrite<4 does not write any bytes to the output, not even the null terminator. // Returns the number of bytes written, EXCLUDING the null terminator. function stringToUTF32(str, outPtr, maxBytesToWrite) { assert(outPtr % 4 == 0, 'Pointer passed to stringToUTF32 must be aligned to four bytes!'); assert(typeof maxBytesToWrite == 'number', 'stringToUTF32(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); // Backwards compatibility: if max bytes is not specified, assume unsafe unbounded write is allowed. if (maxBytesToWrite === undefined) { maxBytesToWrite = 0x7FFFFFFF; } if (maxBytesToWrite < 4) return 0; var startPtr = outPtr; var endPtr = startPtr + maxBytesToWrite - 4; for (var i = 0; i < str.length; ++i) { // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. // See http://unicode.org/faq/utf_bom.html#utf16-3 var codeUnit = str.charCodeAt(i); // possibly a lead surrogate if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) { var trailSurrogate = str.charCodeAt(++i); codeUnit = 0x10000 + ((codeUnit & 0x3FF) << 10) | (trailSurrogate & 0x3FF); } HEAP32[((outPtr)>>2)]=codeUnit; outPtr += 4; if (outPtr + 4 > endPtr) break; } // Null-terminate the pointer to the HEAP. HEAP32[((outPtr)>>2)]=0; return outPtr - startPtr; } // Returns the number of bytes the given Javascript string takes if encoded as a UTF16 byte array, EXCLUDING the null terminator byte. function lengthBytesUTF32(str) { var len = 0; for (var i = 0; i < str.length; ++i) { // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code unit, not a Unicode code point of the character! We must decode the string to UTF-32 to the heap. // See http://unicode.org/faq/utf_bom.html#utf16-3 var codeUnit = str.charCodeAt(i); if (codeUnit >= 0xD800 && codeUnit <= 0xDFFF) ++i; // possibly a lead surrogate, so skip over the tail surrogate. len += 4; } return len; } // Allocate heap space for a JS string, and write it there. // It is the responsibility of the caller to free() that memory. function allocateUTF8(str) { var size = lengthBytesUTF8(str) + 1; var ret = _malloc(size); if (ret) stringToUTF8Array(str, HEAP8, ret, size); return ret; } // Allocate stack space for a JS string, and write it there. function allocateUTF8OnStack(str) { var size = lengthBytesUTF8(str) + 1; var ret = stackAlloc(size); stringToUTF8Array(str, HEAP8, ret, size); return ret; } function demangle(func) { warnOnce('warning: build with -s DEMANGLE_SUPPORT=1 to link in libcxxabi demangling'); return func; } function demangleAll(text) { var regex = /__Z[\w\d_]+/g; return text.replace(regex, function(x) { var y = demangle(x); return x === y ? x : (x + ' [' + y + ']'); }); } function jsStackTrace() { var err = new Error(); if (!err.stack) { // IE10+ special cases: It does have callstack info, but it is only populated if an Error object is thrown, // so try that as a special-case. try { throw new Error(0); } catch(e) { err = e; } if (!err.stack) { return '(no stack trace available)'; } } return err.stack.toString(); } function stackTrace() { var js = jsStackTrace(); if (Module['extraStackTrace']) js += '\n' + Module['extraStackTrace'](); return demangleAll(js); } // Memory management var PAGE_SIZE = 16384; var WASM_PAGE_SIZE = 65536; var ASMJS_PAGE_SIZE = 16777216; var MIN_TOTAL_MEMORY = 16777216; function alignUp(x, multiple) { if (x % multiple > 0) { x += multiple - (x % multiple); } return x; } var HEAP, /** @type {ArrayBuffer} */ buffer, /** @type {Int8Array} */ HEAP8, /** @type {Uint8Array} */ HEAPU8, /** @type {Int16Array} */ HEAP16, /** @type {Uint16Array} */ HEAPU16, /** @type {Int32Array} */ HEAP32, /** @type {Uint32Array} */ HEAPU32, /** @type {Float32Array} */ HEAPF32, /** @type {Float64Array} */ HEAPF64; function updateGlobalBuffer(buf) { Module['buffer'] = buffer = buf; } function updateGlobalBufferViews() { Module['HEAP8'] = HEAP8 = new Int8Array(buffer); Module['HEAP16'] = HEAP16 = new Int16Array(buffer); Module['HEAP32'] = HEAP32 = new Int32Array(buffer); Module['HEAPU8'] = HEAPU8 = new Uint8Array(buffer); Module['HEAPU16'] = HEAPU16 = new Uint16Array(buffer); Module['HEAPU32'] = HEAPU32 = new Uint32Array(buffer); Module['HEAPF32'] = HEAPF32 = new Float32Array(buffer); Module['HEAPF64'] = HEAPF64 = new Float64Array(buffer); } var STATIC_BASE, STATICTOP, staticSealed; // static area var STACK_BASE, STACKTOP, STACK_MAX; // stack area var DYNAMIC_BASE, DYNAMICTOP_PTR; // dynamic area handled by sbrk STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0; staticSealed = false; // Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. function writeStackCookie() { assert((STACK_MAX & 3) == 0); HEAPU32[(STACK_MAX >> 2)-1] = 0x02135467; HEAPU32[(STACK_MAX >> 2)-2] = 0x89BACDFE; } function checkStackCookie() { if (HEAPU32[(STACK_MAX >> 2)-1] != 0x02135467 || HEAPU32[(STACK_MAX >> 2)-2] != 0x89BACDFE) { abort('Stack overflow! Stack cookie has been overwritten, expected hex dwords 0x89BACDFE and 0x02135467, but received 0x' + HEAPU32[(STACK_MAX >> 2)-2].toString(16) + ' ' + HEAPU32[(STACK_MAX >> 2)-1].toString(16)); } // Also test the global address 0 for integrity. This check is not compatible with SAFE_SPLIT_MEMORY though, since that mode already tests all address 0 accesses on its own. if (HEAP32[0] !== 0x63736d65 /* 'emsc' */) throw 'Runtime error: The application has corrupted its heap memory area (address zero)!'; } function abortStackOverflow(allocSize) { abort('Stack overflow! Attempted to allocate ' + allocSize + ' bytes on the stack, but stack has only ' + (STACK_MAX - stackSave() + allocSize) + ' bytes available!'); } function abortOnCannotGrowMemory() { abort('Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value ' + TOTAL_MEMORY + ', (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime but prevents some optimizations, (3) set Module.TOTAL_MEMORY to a higher value before the program runs, or (4) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 '); } function enlargeMemory() { abortOnCannotGrowMemory(); } var TOTAL_STACK = Module['TOTAL_STACK'] || 5242880; var TOTAL_MEMORY = Module['TOTAL_MEMORY'] || 167772160; if (TOTAL_MEMORY < TOTAL_STACK) Module.printErr('TOTAL_MEMORY should be larger than TOTAL_STACK, was ' + TOTAL_MEMORY + '! (TOTAL_STACK=' + TOTAL_STACK + ')'); // Initialize the runtime's memory // check for full engine support (use string 'subarray' to avoid closure compiler confusion) assert(typeof Int32Array !== 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray !== undefined && Int32Array.prototype.set !== undefined, 'JS engine does not provide full typed array support'); // Use a provided buffer, if there is one, or else allocate a new one if (Module['buffer']) { buffer = Module['buffer']; assert(buffer.byteLength === TOTAL_MEMORY, 'provided buffer should be ' + TOTAL_MEMORY + ' bytes, but it is ' + buffer.byteLength); } else { // Use a WebAssembly memory where available { buffer = new ArrayBuffer(TOTAL_MEMORY); } assert(buffer.byteLength === TOTAL_MEMORY); Module['buffer'] = buffer; } updateGlobalBufferViews(); function getTotalMemory() { return TOTAL_MEMORY; } // Endianness check (note: assumes compiler arch was little-endian) HEAP32[0] = 0x63736d65; /* 'emsc' */ HEAP16[1] = 0x6373; if (HEAPU8[2] !== 0x73 || HEAPU8[3] !== 0x63) throw 'Runtime error: expected the system to be little-endian!'; 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__ = []; // functions called before the runtime is initialized var __ATINIT__ = []; // functions called during startup var __ATMAIN__ = []; // functions called when main() is to be run var __ATEXIT__ = []; // functions called during shutdown var __ATPOSTRUN__ = []; // functions called after the main() is called var runtimeInitialized = false; var runtimeExited = false; function preRun() { // compatibility - merge in anything from Module['preRun'] at this time if (Module['preRun']) { if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; while (Module['preRun'].length) { addOnPreRun(Module['preRun'].shift()); } } callRuntimeCallbacks(__ATPRERUN__); } function ensureInitRuntime() { checkStackCookie(); if (runtimeInitialized) return; runtimeInitialized = true; callRuntimeCallbacks(__ATINIT__); } function preMain() { checkStackCookie(); callRuntimeCallbacks(__ATMAIN__); } function exitRuntime() { checkStackCookie(); callRuntimeCallbacks(__ATEXIT__); runtimeExited = true; } function postRun() { checkStackCookie(); // compatibility - merge in anything from Module['postRun'] at this time if (Module['postRun']) { if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; while (Module['postRun'].length) { addOnPostRun(Module['postRun'].shift()); } } callRuntimeCallbacks(__ATPOSTRUN__); } function addOnPreRun(cb) { __ATPRERUN__.unshift(cb); } function addOnInit(cb) { __ATINIT__.unshift(cb); } function addOnPreMain(cb) { __ATMAIN__.unshift(cb); } function addOnExit(cb) { __ATEXIT__.unshift(cb); } function addOnPostRun(cb) { __ATPOSTRUN__.unshift(cb); } // Deprecated: This function should not be called because it is unsafe and does not provide // a maximum length limit of how many bytes it is allowed to write. Prefer calling the // function stringToUTF8Array() instead, which takes in a maximum length that can be used // to be secure from out of bounds writes. /** @deprecated */ function writeStringToMemory(string, buffer, dontAddNull) { warnOnce('writeStringToMemory is deprecated and should not be called! Use stringToUTF8() instead!'); var /** @type {number} */ lastChar, /** @type {number} */ end; if (dontAddNull) { // stringToUTF8Array always appends null. If we don't want to do that, remember the // character that existed at the location where the null will be placed, and restore // that after the write (below). end = buffer + lengthBytesUTF8(string); lastChar = HEAP8[end]; } stringToUTF8(string, buffer, Infinity); if (dontAddNull) HEAP8[end] = lastChar; // Restore the value under the null character. } function writeArrayToMemory(array, buffer) { assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)') HEAP8.set(array, buffer); } function writeAsciiToMemory(str, buffer, dontAddNull) { for (var i = 0; i < str.length; ++i) { assert(str.charCodeAt(i) === str.charCodeAt(i)&0xff); HEAP8[((buffer++)>>0)]=str.charCodeAt(i); } // Null-terminate the pointer to the HEAP. if (!dontAddNull) HEAP8[((buffer)>>0)]=0; } function unSign(value, bits, ignore) { if (value >= 0) { return value; } return bits <= 32 ? 2*Math.abs(1 << (bits-1)) + value // Need some trickery, since if bits == 32, we are right at the limit of the bits JS uses in bitshifts : Math.pow(2, bits) + value; } function reSign(value, bits, ignore) { if (value <= 0) { return value; } var half = bits <= 32 ? Math.abs(1 << (bits-1)) // abs is needed if bits == 32 : Math.pow(2, bits-1); if (value >= half && (bits <= 32 || value > half)) { // for huge values, we can hit the precision limit and always get true here. so don't do that // but, in general there is no perfect solution here. With 64-bit ints, we get rounding and errors // TODO: In i64 mode 1, resign the two parts separately and safely value = -2*half + value; // Cannot bitshift half, as it may be at the limit of the bits JS uses in bitshifts } return value; } assert(Math['imul'] && Math['fround'] && Math['clz32'] && Math['trunc'], 'this is a legacy browser, build with LEGACY_VM_SUPPORT'); var Math_abs = Math.abs; var Math_cos = Math.cos; var Math_sin = Math.sin; var Math_tan = Math.tan; var Math_acos = Math.acos; var Math_asin = Math.asin; var Math_atan = Math.atan; var Math_atan2 = Math.atan2; var Math_exp = Math.exp; var Math_log = Math.log; var Math_sqrt = Math.sqrt; var Math_ceil = Math.ceil; var Math_floor = Math.floor; var Math_pow = Math.pow; var Math_imul = Math.imul; var Math_fround = Math.fround; var Math_round = Math.round; var Math_min = Math.min; var Math_max = Math.max; var Math_clz32 = Math.clz32; var Math_trunc = Math.trunc; // A counter of dependencies for calling run(). If we need to // do asynchronous work before running, increment this and // decrement it. Incrementing must happen in a place like // PRE_RUN_ADDITIONS (used by emcc to add file preloading). // Note that you can add dependencies in preRun, even though // it happens right before run - run will be postponed until // the dependencies are met. var runDependencies = 0; var runDependencyWatcher = null; var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled var runDependencyTracking = {}; function getUniqueRunDependency(id) { var orig = id; while (1) { if (!runDependencyTracking[id]) return id; id = orig + Math.random(); } return id; } function addRunDependency(id) { runDependencies++; if (Module['monitorRunDependencies']) { Module['monitorRunDependencies'](runDependencies); } if (id) { assert(!runDependencyTracking[id]); runDependencyTracking[id] = 1; if (runDependencyWatcher === null && typeof setInterval !== 'undefined') { // Check for missing dependencies every few seconds runDependencyWatcher = setInterval(function() { if (ABORT) { clearInterval(runDependencyWatcher); runDependencyWatcher = null; return; } var shown = false; for (var dep in runDependencyTracking) { if (!shown) { shown = true; Module.printErr('still waiting on run dependencies:'); } Module.printErr('dependency: ' + dep); } if (shown) { Module.printErr('(end of list)'); } }, 10000); } } else { Module.printErr('warning: run dependency added without ID'); } } function removeRunDependency(id) { runDependencies--; if (Module['monitorRunDependencies']) { Module['monitorRunDependencies'](runDependencies); } if (id) { assert(runDependencyTracking[id]); delete runDependencyTracking[id]; } else { Module.printErr('warning: run dependency removed without ID'); } if (runDependencies == 0) { if (runDependencyWatcher !== null) { clearInterval(runDependencyWatcher); runDependencyWatcher = null; } if (dependenciesFulfilled) { var callback = dependenciesFulfilled; dependenciesFulfilled = null; callback(); // can add another dependenciesFulfilled } } } Module["preloadedImages"] = {}; // maps url to image data Module["preloadedAudios"] = {}; // maps url to audio data var memoryInitializer = null; var /* show errors on likely calls to FS when it was not included */ FS = { error: function() { abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -s FORCE_FILESYSTEM=1'); }, init: function() { FS.error() }, createDataFile: function() { FS.error() }, createPreloadedFile: function() { FS.error() }, createLazyFile: function() { FS.error() }, open: function() { FS.error() }, mkdev: function() { FS.error() }, registerDevice: function() { FS.error() }, analyzePath: function() { FS.error() }, loadFilesFromDB: function() { FS.error() }, ErrnoError: function ErrnoError() { FS.error() }, }; Module['FS_createDataFile'] = FS.createDataFile; Module['FS_createPreloadedFile'] = FS.createPreloadedFile; // Prefix of data URIs emitted by SINGLE_FILE and related options. var dataURIPrefix = 'data:application/octet-stream;base64,'; // Indicates whether filename is a base64 data URI. function isDataURI(filename) { return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0; } // === Body === var ASM_CONSTS = []; STATIC_BASE = GLOBAL_BASE; STATICTOP = STATIC_BASE + 22928; /* global initializers */ __ATINIT__.push({ func: function() { __GLOBAL__sub_I_laz_perf_cpp() } }, { func: function() { __GLOBAL__sub_I_bind_cpp() } }); memoryInitializer = "data:application/octet-stream;base64,6A0AABUPAADwBAAAAAAAAMANAACDDwAA6A0AAL4PAADwBAAAAAAAAMANAABJEAAA6A0AAKYQAABYBQAAAAAAAMANAACwEQAA6A0AABsRAABIAAAAAAAAAOgNAADlEQAAWAUAAAAAAADoDQAABhIAAFgFAAAAAAAAwA0AAIsSAADoDQAA+BIAAFgFAAAAAAAA6A0AABETAABYBQAAAAAAAOgNAACaEwAAWAUAAAAAAADoDQAA8xMAAFgFAAAAAAAA6A0AAAwUAABYBQAAAAAAAOgNAADcFAAAWAUAAAAAAADoDQAAnBUAAPAEAAAAAAAAwA0AAEQWAADoDQAAuRYAAFgFAAAAAAAAwA0AAHwXAADoDQAA+RYAABABAAAAAAAA6A0AAKQXAADwBAAAAAAAAMANAAB3GAAAwA0AANgZAADoDQAAFxkAAEABAAAAAAAA6A0AAHYaAADwBAAAAAAAAMANAACHGwAA6A0AAGUcAABAAQAAAAAAAOgNAAAmHQAA8AQAAAAAAADADQAANx4AAOgNAAAVHwAAQAEAAAAAAADoDQAA0h8AAPAEAAAAAAAAwA0AAN8gAADoDQAAuSEAAEABAAAAAAAA6A0AAH4iAADwBAAAAAAAAMANAACTIwAA6A0AAHUkAAAQAQAAAAAAAOgNAABPJQAA8AQAAAAAAADADQAAeSYAAOgNAABwJwAAEAEAAAAAAADoDQAAaCgAAPAEAAAAAAAAwA0AALApAADoDQAAxSoAABABAAAAAAAA6A0AALkrAADwBAAAAAAAAMANAAD9LAAA6A0AAA4uAAAQAQAAAAAAAOgNAAAgLwAA8AQAAAAAAADADQAAgjAAAOgNAACxMQAA8AQAAAAAAADADQAACzIAAOgNAAAyMgAA8AQAAAAAAADADQAArDIAAOgNAADzMgAAEAEAAAAAAADoDQAASjMAAPAEAAAAAAAAwA0AAO8zAADoDQAAYTQAAEABAAAAAAAA6A0AAOQ0AADwBAAAAAAAAMANAAC1NQAA6A0AAFM2AABAAQAAAAAAAOgNAADWNgAA8AQAAAAAAADADQAApzcAAOgNAABFOAAAQAEAAAAAAADoDQAAyDgAAPAEAAAAAAAAwA0AAJk5AADoDQAANzoAAEABAAAAAAAA6A0AALo6AADwBAAAAAAAAMANAACLOwAA6A0AACk8AABAAQAAAAAAAOgNAACsPAAA8AQAAAAAAADADQAAfT0AAOgNAAAbPgAAQAEAAAAAAADoDQAAnj4AAPAEAAAAAAAAwA0AAG8/AADADQAADUAAAHwOAAAVQAAAAAAAANADAAB8DgAAHkAAAAEAAADQAwAAwA0AAD9AAAB8DgAAT0AAAAAAAAD4AwAAfA4AAGBAAAABAAAA+AMAAMANAACPQwAAwA0AAK5DAADADQAAzUMAAMANAADsQwAAwA0AAAtEAADADQAAKkQAAMANAABJRAAAwA0AAGhEAADADQAAh0QAAMANAACmRAAAwA0AAMVEAADADQAA5EQAAMANAAADRQAAmA4AABZFAAAAAAAAAQAAAKAEAAAAAAAAwA0AAFVFAACYDgAAe0UAAAAAAAABAAAAoAQAAAAAAACYDgAAukUAAAAAAAABAAAAoAQAAAAAAADoDQAAik8AAAgFAAAAAAAAwA0AAKZPAACYDgAAv08AAAAAAAABAAAA6AQAAAAAAADADQAAgFAAAOgNAADgUAAAIAUAAAAAAADoDQAAjVAAADAFAAAAAAAAwA0AAK5QAADoDQAAu1AAABAFAAAAAAAA6A0AANFRAAAIBQAAAAAAAOgNAADhUQAACAUAAAAAAADoDQAA81EAAEgFAAAAAAAA6A0AAChSAAAgBQAAAAAAAOgNAAAEUgAAeAUAAAAAAADoDQAASlIAACAFAAAAAAAAYA4AAHJSAABgDgAAdFIAAGAOAAB3UgAAYA4AAHlSAABgDgAAe1IAAGAOAAB9UgAAYA4AAH9SAABgDgAAgVIAAGAOAACDUgAAYA4AAIVSAABgDgAAh1IAAGAOAACJUgAAYA4AAItSAABgDgAAjVIAAOgNAACPUgAAEAUAAAAAAAAAAAAACAAAAAEAAAACAAAAAwAAAAQAAAAFAAAAAAAAACAAAAAGAAAABwAAAAgAAAAJAAAACgAAAAAAAAA4AAAACwAAAAwAAAANAAAAAAAAAFAAAAAOAAAADwAAABAAAAARAAAAEgAAABMAAAAUAAAAFQAAABYAAAAAAAAASAAAABcAAAAYAAAAGQAAABkAAAAZAAAAGQAAABkAAAAZAAAAGQAAAAAAAABgAAAAGgAAABsAAAANAAAAAAAAAHAAAAAcAAAAHQAAAA0AAAAAAAAAmAAAAB4AAAAfAAAADQAAAAAAAACIAAAAIAAAACEAAAANAAAAAAAAAKgAAAAiAAAAIwAAAA0AAAAAAAAAuAAAACQAAAAlAAAADQAAAAAAAADIAAAAJgAAACcAAAANAAAAAAAAANgAAAAoAAAAKQAAAA0AAAAAAAAA6AAAACoAAAArAAAALAAAAC0AAAAuAAAAAAAAAAABAAAvAAAAMAAAAA0AAAAAAAAAGAEAADEAAAAyAAAAMwAAAAAAAAAQAQAAGQAAADQAAAA1AAAAAAAAACgBAAA2AAAANwAAADgAAAA5AAAAOgAAAAAAAABIAQAAOwAAADwAAAA9AAAAPgAAAAAAAABAAQAAPwAAAEAAAAA9AAAAQQAAAAAAAABYAQAAQgAAAEMAAABEAAAARQAAAEYAAAAAAAAAcAEAAEcAAABIAAAAPQAAAEkAAAAAAAAAgAEAAEoAAABLAAAATAAAAE0AAABOAAAAAAAAAJgBAABPAAAAUAAAAD0AAABRAAAAAAAAAKgBAABSAAAAUwAAAFQAAABVAAAAVgAAAAAAAADAAQAAVwAAAFgAAAA9AAAAWQAAAAAAAADQAQAAWgAAAFsAAABcAAAAXQAAAF4AAAAAAAAA6AEAAF8AAABgAAAAYQAAAAAAAAD4AQAAYgAAAGMAAABkAAAAZQAAAGYAAAAAAAAAEAIAAGcAAABoAAAAaQAAAAAAAAAgAgAAagAAAGsAAABsAAAAbQAAAG4AAAAAAAAAOAIAAG8AAABwAAAAcQAAAAAAAABIAgAAcgAAAHMAAAB0AAAAdQAAAHYAAAAAAAAAYAIAAHcAAAB4AAAAeQAAAAAAAABwAgAAegAAAHsAAAB8AAAAfQAAAH4AAAAAAAAAiAIAAH8AAACAAAAAgQAAAIIAAACDAAAAAAAAAKACAACEAAAAhQAAAIYAAACHAAAAiAAAAAAAAAC4AgAAiQAAAIoAAACLAAAAAAAAAMgCAACMAAAAjQAAAI4AAACPAAAAkAAAAAAAAADgAgAAkQAAAJIAAAA9AAAAkwAAAAAAAADwAgAAlAAAAJUAAACWAAAAlwAAAJgAAAAAAAAACAMAAJkAAACaAAAAPQAAAJsAAAAAAAAAGAMAAJwAAACdAAAAngAAAJ8AAACgAAAAAAAAADADAAChAAAAogAAAD0AAACjAAAAAAAAAEADAACkAAAApQAAAKYAAACnAAAAqAAAAAAAAABYAwAAqQAAAKoAAAA9AAAAqwAAAAAAAABoAwAArAAAAK0AAACuAAAArwAAALAAAAAAAAAAgAMAALEAAACyAAAAPQAAALMAAAAAAAAAkAMAALQAAAC1AAAAtgAAALcAAAC4AAAAAAAAAKgDAAC5AAAAugAAAD0AAAC7AAAAAAAAALgDAAC8AAAAvQAAAL4AAAC/AAAAwAAAANgDAACoBQAA2AMAAPAFAADwBQAAqAUAANgDAADoBQAA8AUAANgDAAAABAAAqAUAAAAEAADwBQAA8AUAAKgFAAAABAAA8AUAAKgFAAAABAAA6AUAAIALAAAFAAAAAAAAAAAAAADBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCAAAAwwAAAIJVAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAD//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAwQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxAAAAMMAAACKVQAAAAQAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACv////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAERVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANgEAADFAAAAxgAAAMcAAAAAAAAA6AQAAMgAAADJAAAAGQAAAAAAAADwBAAAyAAAAMoAAAAZAAAAywAAABkAAADMAAAAAAAAABAFAADNAAAAzgAAAM8AAADQAAAA0QAAANIAAADTAAAA1AAAAAAAAAA4BQAAzQAAANUAAADPAAAA0AAAANEAAADWAAAA1wAAANgAAAAAAAAACAUAANkAAADaAAAA2wAAAAAAAABIBQAA3AAAAN0AAADeAAAAAAAAAFgFAADfAAAA4AAAAA0AAAAAAAAAaAUAANwAAADhAAAA3gAAAAAAAACYBQAAzQAAAOIAAADPAAAA0AAAAOMAAAAAAAAAiAUAAM0AAADkAAAAzwAAANAAAADlAAAAAAAAABgGAADNAAAA5gAAAM8AAADQAAAA0QAAAOcAAADoAAAA6QAAAExBU1ppcABvcGVuAGdldFBvaW50AGdldENvdW50AER5bmFtaWNMQVNaaXAAYWRkRmllbGRGbG9hdGluZwBhZGRGaWVsZFNpZ25lZABhZGRGaWVsZFVuc2lnbmVkAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzNfRUVOU185YWxsb2NhdG9ySVMzX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzdfRUVOU185YWxsb2NhdG9ySVM3X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFAExBU0YATjZsYXN6aXAxM2ludmFsaWRfbWFnaWNFAGFsbG9jYXRvcjxUPjo6YWxsb2NhdGUoc2l6ZV90IG4pICduJyBleGNlZWRzIG1heGltdW0gc3VwcG9ydGVkIHNpemUARmlsZSBtYWdpYyBpcyBub3QgdmFsaWQATlN0M19fMjEwX19mdW5jdGlvbjZfX2Z1bmNJWk42bGFzemlwMmlvNnJlYWRlcjEwYmFzaWNfZmlsZUlOUzJfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRTExX3ZhbGlkYXRvcnNFdkVVbFJOUzNfNmhlYWRlckVFX05TXzlhbGxvY2F0b3JJU0JfRUVGdlNBX0VFRQBOU3QzX18yMTBfX2Z1bmN0aW9uNl9fYmFzZUlGdlJONmxhc3ppcDJpbzZoZWFkZXJFRUVFAE42bGFzemlwMjFvbGRfc3R5bGVfY29tcHJlc3Npb25FAE42bGFzemlwMTRub3RfY29tcHJlc3NlZEUAVGhlIGZpbGUgc2VlbXMgdG8gaGF2ZSBvbGQgc3R5bGUgY29tcHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZABUaGUgZmlsZSBkb2Vzbid0IHNlZW0gdG8gYmUgY29tcHJlc3NlZABaTjZsYXN6aXAyaW82cmVhZGVyMTBiYXNpY19maWxlSU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUUxMV92YWxpZGF0b3JzRXZFVWxSTlMwXzZoZWFkZXJFRV8AbGFzemlwIGVuY29kZWQATjZsYXN6aXAxM25vX2xhc3ppcF92bHJFAE42bGFzemlwMjVsYXN6aXBfZm9ybWF0X3Vuc3VwcG9ydGVkRQBPbmx5IExBU3ppcCBQT0lOVFdJU0UgQ0hVTktFRCBkZWNvbXByZXNzb3IgaXMgc3VwcG9ydGVkAE5vIExBU3ppcCBWTFIgd2FzIGZvdW5kIGluIHRoZSBWTFJzIHNlY3Rpb24ATjZsYXN6aXAyMmNodW5rX3RhYmxlX3JlYWRfZXJyb3JFAENodW5rIHRhYmxlIG9mZnNldCA9PSAtMSBpcyBub3Qgc3VwcG9ydGVkIGF0IHRoaXMgdGltZQBONmxhc3ppcDEzbm90X3N1cHBvcnRlZEUATjZsYXN6aXAyNnVua25vd25fY2h1bmtfdGFibGVfZm9ybWF0RQBjaHVua19zaXplID09IHVpbnQubWF4IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lLCBjYWxsIDEtODAwLURBRlVRIGZvciBzdXBwb3J0LgBUaGVyZSB3YXMgYSBwcm9ibGVtIHJlYWRpbmcgdGhlIGNodW5rIHRhYmxlAFRoZSBjaHVuayB0YWJsZSB2ZXJzaW9uIG51bWJlciBpcyB1bmtub3duAE42bGFzemlwMTFlbmRfb2ZfZmlsZUUAUmVhY2hlZCBFbmQgb2YgZmlsZQBJbnZhbGlkIG51bWJlciBvZiBzeW1ib2xzAGJpdHMgJiYgKGJpdHMgPD0gMzIpAC9Vc2Vycy9jb25ub3IvY29kZS9sYXotcGVyZi1hYmVsbC9lbXNjcmlwdGVuLy4uL2xhei1wZXJmL2RlY29kZXIuaHBwAHJlYWRCaXRzAHN5bSA8ICgxPDwxNikAcmVhZFNob3J0AE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM5X0VFTlNfOWFsbG9jYXRvcklTOV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwMTl1bmtub3duX3NjaGVtYV90eXBlRQBUaGUgTEFaIHNjaGVtYSBpcyBub3QgcmVjb2duaXplZABONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2ZpZWxkX2RlY29tcHJlc3NvcklOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMGR5bmFtaWNfZGVjb21wcmVzc29yRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0NfRUVOU185YWxsb2NhdG9ySVNDX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBONmxhc3ppcDdmb3JtYXRzMTBiYXNlX2ZpZWxkRQAPDg0MCwoJCA4AAQMGCgoJDQECBAcLCwoMAwQFCAwMCwsGBwgJDQ0MCgoLDA0ODg0JCgsMDQ4PDggJCgsMDQ4PAAECAwQFBgcBAAECAwQFBgIBAAECAwQFAwIBAAECAwQEAwIBAAECAwUEAwIBAAECBgUEAwIBAAEHBgUEAwIBAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzVmaWVsZElOUzBfM2xhczdncHN0aW1lRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzN2dwc3RpbWVFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTSV9FRU5TXzlhbGxvY2F0b3JJU0lfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl81ZmllbGRJTlMyXzNsYXM3Z3BzdGltZUVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjZkeW5hbWljX2RlY29tcHJlc3Nvcl9maWVsZElOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF81ZmllbGRJTlMwXzNsYXMzcmdiRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzM3JnYkVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRV9FRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNJX0VFTlNfOWFsbG9jYXRvcklTSV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzVmaWVsZElOUzJfM2xhczNyZ2JFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0VfRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfNWZpZWxkSU5TMF8zbGFzMTBleHRyYWJ5dGVzRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNDX0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJU0lfRUVOU185YWxsb2NhdG9ySVNJX0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfNWZpZWxkSU5TMl8zbGFzMTBleHRyYWJ5dGVzRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNFX0VFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFRUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNLX0VFTlNfOWFsbG9jYXRvcklTS19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFRUVFRUVFRQBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzBfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzBfNWZpZWxkSU5TMF8zbGFzN3BvaW50MTBFTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0RfRUVFRU5TQl9JTlNDXzdncHN0aW1lRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTTl9FRU5TXzlhbGxvY2F0b3JJU05fRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOU18yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOU183c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMwXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMwXzVmaWVsZElOUzBfM2xhczdwb2ludDEwRU5TMF8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNEX0VFRUVOU0JfSU5TQ18zcmdiRU5TRV9JU0hfRUVFRUVFRUVFAE5TdDNfXzIyMF9fc2hhcmVkX3B0cl9wb2ludGVySVBONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTSl9FRUVFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNOX0VFTlNfOWFsbG9jYXRvcklTTl9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOUzFfOGRlY29kZXJzMTBhcml0aG1ldGljSU5TMV8yaW8xOF9faWZzdHJlYW1fd3JhcHBlcklOUzFfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMl8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMl81ZmllbGRJTlMyXzNsYXM3cG9pbnQxMEVOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRl9FRUVFTlNEX0lOU0VfM3JnYkVOU0dfSVNKX0VFRUVFRUVFRUVFAE42bGFzemlwN2Zvcm1hdHMyMWR5bmFtaWNfZGVjb21wcmVzc29yMUlOU184ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlNfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlNfN3N0cmVhbXMxM21lbW9yeV9zdHJlYW1FRUVFRU5TMF8xOXJlY29yZF9kZWNvbXByZXNzb3JJSk5TMF81ZmllbGRJTlMwXzNsYXM3cG9pbnQxMEVOUzBfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElTRF9FRUVFTlNCX0lOU0NfN2dwc3RpbWVFTlNFX0lTSF9FRUVFTlNCX0lOU0NfM3JnYkVOU0VfSVNLX0VFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czIxZHluYW1pY19kZWNvbXByZXNzb3IxSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJTlMxXzJpbzE4X19pZnN0cmVhbV93cmFwcGVySU5TMV83c3RyZWFtczEzbWVtb3J5X3N0cmVhbUVFRUVFTlMyXzE5cmVjb3JkX2RlY29tcHJlc3NvcklKTlMyXzVmaWVsZElOUzJfM2xhczdwb2ludDEwRU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSVNGX0VFRUVOU0RfSU5TRV83Z3BzdGltZUVOU0dfSVNKX0VFRUVOU0RfSU5TRV8zcmdiRU5TR19JU01fRUVFRUVFRUVFTlNfMTRkZWZhdWx0X2RlbGV0ZUlTUV9FRU5TXzlhbGxvY2F0b3JJU1FfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUlONmxhc3ppcDdmb3JtYXRzMjFkeW5hbWljX2RlY29tcHJlc3NvcjFJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0lOUzFfMmlvMThfX2lmc3RyZWFtX3dyYXBwZXJJTlMxXzdzdHJlYW1zMTNtZW1vcnlfc3RyZWFtRUVFRUVOUzJfMTlyZWNvcmRfZGVjb21wcmVzc29ySUpOUzJfNWZpZWxkSU5TMl8zbGFzN3BvaW50MTBFTlMyXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJU0ZfRUVFRU5TRF9JTlNFXzdncHN0aW1lRU5TR19JU0pfRUVFRU5TRF9JTlNFXzNyZ2JFTlNHX0lTTV9FRUVFRUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQMTBidWZfc3RyZWFtTlNfMTRkZWZhdWx0X2RlbGV0ZUlTMV9FRU5TXzlhbGxvY2F0b3JJUzFfRUVFRQBOU3QzX18yMTRkZWZhdWx0X2RlbGV0ZUkxMGJ1Zl9zdHJlYW1FRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA4ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOU18xNGRlZmF1bHRfZGVsZXRlSVM1X0VFTlNfOWFsbG9jYXRvcklTNV9FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFRUUATlN0M19fMjIwX19zaGFyZWRfcHRyX3BvaW50ZXJJUE42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZmllbGRfZGVjb21wcmVzc29ySU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVFRU5TXzE0ZGVmYXVsdF9kZWxldGVJUzhfRUVOU185YWxsb2NhdG9ySVM4X0VFRUUATlN0M19fMjE0ZGVmYXVsdF9kZWxldGVJTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19maWVsZF9kZWNvbXByZXNzb3JJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElpTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWlFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWlOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElpRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElqTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJakVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJak5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWpFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWpOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElqRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElhTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJYUVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJYU5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWFFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWFOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElhRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZElzTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJc0VFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJc05TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXNFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXNOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZElzRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEloTlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJaEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJaE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSWhFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSWhOUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEloRUVFRUVFRUUATjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlNfOGRlY29kZXJzMTBhcml0aG1ldGljSTEwYnVmX3N0cmVhbUVFTlMwXzVmaWVsZEl0TlMwXzIwc3RhbmRhcmRfZGlmZl9tZXRob2RJdEVFRUVFRQBOU3QzX18yMjBfX3NoYXJlZF9wdHJfcG9pbnRlcklQTjZsYXN6aXA3Zm9ybWF0czI2ZHluYW1pY19kZWNvbXByZXNzb3JfZmllbGRJTlMxXzhkZWNvZGVyczEwYXJpdGhtZXRpY0kxMGJ1Zl9zdHJlYW1FRU5TMl81ZmllbGRJdE5TMl8yMHN0YW5kYXJkX2RpZmZfbWV0aG9kSXRFRUVFRUVOU18xNGRlZmF1bHRfZGVsZXRlSVNDX0VFTlNfOWFsbG9jYXRvcklTQ19FRUVFAE5TdDNfXzIxNGRlZmF1bHRfZGVsZXRlSU42bGFzemlwN2Zvcm1hdHMyNmR5bmFtaWNfZGVjb21wcmVzc29yX2ZpZWxkSU5TMV84ZGVjb2RlcnMxMGFyaXRobWV0aWNJMTBidWZfc3RyZWFtRUVOUzJfNWZpZWxkSXROUzJfMjBzdGFuZGFyZF9kaWZmX21ldGhvZEl0RUVFRUVFRUUANkxBU1ppcABQNkxBU1ppcABQSzZMQVNaaXAAaWkAdgB2aQB2aWlpaQB2aWlpAGlpaQAxM0R5bmFtaWNMQVNaaXAAUDEzRHluYW1pY0xBU1ppcABQSzEzRHluYW1pY0xBU1ppcAB2b2lkAGJvb2wAY2hhcgBzaWduZWQgY2hhcgB1bnNpZ25lZCBjaGFyAHNob3J0AHVuc2lnbmVkIHNob3J0AGludAB1bnNpZ25lZCBpbnQAbG9uZwB1bnNpZ25lZCBsb25nAGZsb2F0AGRvdWJsZQBzdGQ6OnN0cmluZwBzdGQ6OmJhc2ljX3N0cmluZzx1bnNpZ25lZCBjaGFyPgBzdGQ6OndzdHJpbmcAZW1zY3JpcHRlbjo6dmFsAGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGNoYXI+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBjaGFyPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxzaG9ydD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgc2hvcnQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8dW5zaWduZWQgaW50PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1bnNpZ25lZCBsb25nPgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQ4X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGludDE2X3Q+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PHVpbnQxNl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzxpbnQzMl90PgBlbXNjcmlwdGVuOjptZW1vcnlfdmlldzx1aW50MzJfdD4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8ZmxvYXQ+AGVtc2NyaXB0ZW46Om1lbW9yeV92aWV3PGRvdWJsZT4AZW1zY3JpcHRlbjo6bWVtb3J5X3ZpZXc8bG9uZyBkb3VibGU+AE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWVFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lkRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJZkVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SW1FRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lsRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJakVFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWlFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0l0RUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJc0VFAE4xMGVtc2NyaXB0ZW4xMW1lbW9yeV92aWV3SWhFRQBOMTBlbXNjcmlwdGVuMTFtZW1vcnlfdmlld0lhRUUATjEwZW1zY3JpcHRlbjExbWVtb3J5X3ZpZXdJY0VFAE4xMGVtc2NyaXB0ZW4zdmFsRQBOU3QzX18yMTJiYXNpY19zdHJpbmdJd05TXzExY2hhcl90cmFpdHNJd0VFTlNfOWFsbG9jYXRvckl3RUVFRQBOU3QzX18yMjFfX2Jhc2ljX3N0cmluZ19jb21tb25JTGIxRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0loTlNfMTFjaGFyX3RyYWl0c0loRUVOU185YWxsb2NhdG9ySWhFRUVFAE5TdDNfXzIxMmJhc2ljX3N0cmluZ0ljTlNfMTFjaGFyX3RyYWl0c0ljRUVOU185YWxsb2NhdG9ySWNFRUVFABEACgAREREAAAAABQAAAAAAAAkAAAAACwAAAAAAAAAAEQAPChEREQMKBwABEwkLCwAACQYLAAALAAYRAAAAERERAAAAAAAAAAAAAAAAAAAAAAsAAAAAAAAAABEACgoREREACgAAAgAJCwAAAAkACwAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAMAAAAAAwAAAAACQwAAAAAAAwAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAADQAAAAQNAAAAAAkOAAAAAAAOAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA8AAAAADwAAAAAJEAAAAAAAEAAAEAAAEgAAABISEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEhISAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAACgAAAAAKAAAAAAkLAAAAAAALAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAwAAAAADAAAAAAJDAAAAAAADAAADAAALSsgICAwWDB4AChudWxsKQAtMFgrMFggMFgtMHgrMHggMHgAaW5mAElORgBuYW4ATkFOADAxMjM0NTY3ODlBQkNERUYuAFQhIhkNAQIDEUscDBAECx0SHidobm9wcWIgBQYPExQVGggWBygkFxgJCg4bHyUjg4J9JiorPD0+P0NHSk1YWVpbXF1eX2BhY2RlZmdpamtscnN0eXp7fABJbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgAAc3RkOjpiYWRfZnVuY3Rpb25fY2FsbABOU3QzX18yMTdiYWRfZnVuY3Rpb25fY2FsbEUATlN0M19fMjE0X19zaGFyZWRfY291bnRFAE5TdDNfXzIxOV9fc2hhcmVkX3dlYWtfY291bnRFAG11dGV4IGxvY2sgZmFpbGVkAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXM6ICVzAHRlcm1pbmF0aW5nIHdpdGggJXMgZXhjZXB0aW9uIG9mIHR5cGUgJXMAdGVybWluYXRpbmcgd2l0aCAlcyBmb3JlaWduIGV4Y2VwdGlvbgB0ZXJtaW5hdGluZwB1bmNhdWdodABTdDlleGNlcHRpb24ATjEwX19jeHhhYml2MTE2X19zaGltX3R5cGVfaW5mb0UAU3Q5dHlwZV9pbmZvAE4xMF9fY3h4YWJpdjEyMF9fc2lfY2xhc3NfdHlwZV9pbmZvRQBOMTBfX2N4eGFiaXYxMTdfX2NsYXNzX3R5cGVfaW5mb0UAcHRocmVhZF9vbmNlIGZhaWx1cmUgaW4gX19jeGFfZ2V0X2dsb2JhbHNfZmFzdCgpAGNhbm5vdCBjcmVhdGUgcHRocmVhZCBrZXkgZm9yIF9fY3hhX2dldF9nbG9iYWxzKCkAY2Fubm90IHplcm8gb3V0IHRocmVhZCB2YWx1ZSBmb3IgX19jeGFfZ2V0X2dsb2JhbHMoKQB0ZXJtaW5hdGVfaGFuZGxlciB1bmV4cGVjdGVkbHkgcmV0dXJuZWQAc3RkOjpleGNlcHRpb24AU3QxMWxvZ2ljX2Vycm9yAFN0MTNydW50aW1lX2Vycm9yAFN0MTJsZW5ndGhfZXJyb3IATjEwX19jeHhhYml2MTE5X19wb2ludGVyX3R5cGVfaW5mb0UATjEwX19jeHhhYml2MTE3X19wYmFzZV90eXBlX2luZm9FAE4xMF9fY3h4YWJpdjEyM19fZnVuZGFtZW50YWxfdHlwZV9pbmZvRQB2AERuAGIAYwBoAGEAcwB0AGkAagBsAG0AZgBkAE4xMF9fY3h4YWJpdjEyMV9fdm1pX2NsYXNzX3R5cGVfaW5mb0U="; /* no memory initializer */ var tempDoublePtr = STATICTOP; STATICTOP += 16; assert(tempDoublePtr % 8 == 0); function copyTempFloat(ptr) { // functions, because inlining this code increases code size too much HEAP8[tempDoublePtr] = HEAP8[ptr]; HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; } function copyTempDouble(ptr) { HEAP8[tempDoublePtr] = HEAP8[ptr]; HEAP8[tempDoublePtr+1] = HEAP8[ptr+1]; HEAP8[tempDoublePtr+2] = HEAP8[ptr+2]; HEAP8[tempDoublePtr+3] = HEAP8[ptr+3]; HEAP8[tempDoublePtr+4] = HEAP8[ptr+4]; HEAP8[tempDoublePtr+5] = HEAP8[ptr+5]; HEAP8[tempDoublePtr+6] = HEAP8[ptr+6]; HEAP8[tempDoublePtr+7] = HEAP8[ptr+7]; } // {{PRE_LIBRARY}} function ___assert_fail(condition, filename, line, func) { abort('Assertion failed: ' + Pointer_stringify(condition) + ', at: ' + [filename ? Pointer_stringify(filename) : 'unknown filename', line, func ? Pointer_stringify(func) : 'unknown function']); } function ___cxa_allocate_exception(size) { return _malloc(size); } function __ZSt18uncaught_exceptionv() { // std::uncaught_exception() return !!__ZSt18uncaught_exceptionv.uncaught_exception; } var EXCEPTIONS={last:0,caught:[],infos:{},deAdjust:function (adjusted) { if (!adjusted || EXCEPTIONS.infos[adjusted]) return adjusted; for (var key in EXCEPTIONS.infos) { var ptr = +key; // the iteration key is a string, and if we throw this, it must be an integer as that is what we look for var info = EXCEPTIONS.infos[ptr]; if (info.adjusted === adjusted) { return ptr; } } return adjusted; },addRef:function (ptr) { if (!ptr) return; var info = EXCEPTIONS.infos[ptr]; info.refcount++; },decRef:function (ptr) { if (!ptr) return; var info = EXCEPTIONS.infos[ptr]; assert(info.refcount > 0); info.refcount--; // A rethrown exception can reach refcount 0; it must not be discarded // Its next handler will clear the rethrown flag and addRef it, prior to // final decRef and destruction here if (info.refcount === 0 && !info.rethrown) { if (info.destructor) { Module['dynCall_vi'](info.destructor, ptr); } delete EXCEPTIONS.infos[ptr]; ___cxa_free_exception(ptr); } },clearRef:function (ptr) { if (!ptr) return; var info = EXCEPTIONS.infos[ptr]; info.refcount = 0; }};function ___cxa_begin_catch(ptr) { var info = EXCEPTIONS.infos[ptr]; if (info && !info.caught) { info.caught = true; __ZSt18uncaught_exceptionv.uncaught_exception--; } if (info) info.rethrown = false; EXCEPTIONS.caught.push(ptr); EXCEPTIONS.addRef(EXCEPTIONS.deAdjust(ptr)); return ptr; } function ___cxa_pure_virtual() { ABORT = true; throw 'Pure virtual function called!'; } function ___resumeException(ptr) { if (!EXCEPTIONS.last) { EXCEPTIONS.last = ptr; } throw ptr; }function ___cxa_find_matching_catch() { var thrown = EXCEPTIONS.last; if (!thrown) { // just pass through the null ptr return ((setTempRet0(0),0)|0); } var info = EXCEPTIONS.infos[thrown]; var throwntype = info.type; if (!throwntype) { // just pass through the thrown ptr return ((setTempRet0(0),thrown)|0); } var typeArray = Array.prototype.slice.call(arguments); var pointer = Module['___cxa_is_pointer_type'](throwntype); // can_catch receives a **, add indirection if (!___cxa_find_matching_catch.buffer) ___cxa_find_matching_catch.buffer = _malloc(4); HEAP32[((___cxa_find_matching_catch.buffer)>>2)]=thrown; thrown = ___cxa_find_matching_catch.buffer; // The different catch blocks are denoted by different types. // Due to inheritance, those types may not precisely match the // type of the thrown object. Find one which matches, and // return the type of the catch block which should be called. for (var i = 0; i < typeArray.length; i++) { if (typeArray[i] && Module['___cxa_can_catch'](typeArray[i], throwntype, thrown)) { thrown = HEAP32[((thrown)>>2)]; // undo indirection info.adjusted = thrown; return ((setTempRet0(typeArray[i]),thrown)|0); } } // Shouldn't happen unless we have bogus data in typeArray // or encounter a type for which emscripten doesn't have suitable // typeinfo defined. Best-efforts match just in case. thrown = HEAP32[((thrown)>>2)]; // undo indirection return ((setTempRet0(throwntype),thrown)|0); }function ___cxa_throw(ptr, type, destructor) { EXCEPTIONS.infos[ptr] = { ptr: ptr, adjusted: ptr, type: type, destructor: destructor, refcount: 0, caught: false, rethrown: false }; EXCEPTIONS.last = ptr; if (!("uncaught_exception" in __ZSt18uncaught_exceptionv)) { __ZSt18uncaught_exceptionv.uncaught_exception = 1; } else { __ZSt18uncaught_exceptionv.uncaught_exception++; } throw ptr; } function ___gxx_personality_v0() { } function ___lock() {} var SYSCALLS={varargs:0,get:function (varargs) { SYSCALLS.varargs += 4; var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)]; return ret; },getStr:function () { var ret = Pointer_stringify(SYSCALLS.get()); return ret; },get64:function () { var low = SYSCALLS.get(), high = SYSCALLS.get(); if (low >= 0) assert(high === 0); else assert(high === -1); return low; },getZero:function () { assert(SYSCALLS.get() === 0); }};function ___syscall140(which, varargs) {SYSCALLS.varargs = varargs; try { // llseek var stream = SYSCALLS.getStreamFromFD(), offset_high = SYSCALLS.get(), offset_low = SYSCALLS.get(), result = SYSCALLS.get(), whence = SYSCALLS.get(); // NOTE: offset_high is unused - Emscripten's off_t is 32-bit var offset = offset_low; FS.llseek(stream, offset, whence); HEAP32[((result)>>2)]=stream.position; if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state return 0; } catch (e) { if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno; } } function flush_NO_FILESYSTEM() { // flush anything remaining in the buffers during shutdown var fflush = Module["_fflush"]; if (fflush) fflush(0); var printChar = ___syscall146.printChar; if (!printChar) return; var buffers = ___syscall146.buffers; if (buffers[1].length) printChar(1, 10); if (buffers[2].length) printChar(2, 10); }function ___syscall146(which, varargs) {SYSCALLS.varargs = varargs; try { // writev // hack to support printf in NO_FILESYSTEM var stream = SYSCALLS.get(), iov = SYSCALLS.get(), iovcnt = SYSCALLS.get(); var ret = 0; if (!___syscall146.buffers) { ___syscall146.buffers = [null, [], []]; // 1 => stdout, 2 => stderr ___syscall146.printChar = function(stream, curr) { var buffer = ___syscall146.buffers[stream]; assert(buffer); if (curr === 0 || curr === 10) { (stream === 1 ? Module['print'] : Module['printErr'])(UTF8ArrayToString(buffer, 0)); buffer.length = 0; } else { buffer.push(curr); } }; } 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++) { ___syscall146.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 { // ioctl 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 { // close var stream = SYSCALLS.getStreamFromFD(); FS.close(stream); return 0; } catch (e) { if (typeof FS === 'undefined' || !(e instanceof FS.ErrnoError)) abort(e); return -e.errno; } } function ___unlock() {} function getShiftFromSize(size) { switch (size) { case 1: return 0; case 2: return 1; case 4: return 2; case 8: return 3; default: throw new TypeError('Unknown type size: ' + size); } } function embind_init_charCodes() { var codes = new Array(256); for (var i = 0; i < 256; ++i) { codes[i] = String.fromCharCode(i); } embind_charCodes = codes; }var embind_charCodes=undefined;function readLatin1String(ptr) { var ret = ""; var c = ptr; while (HEAPU8[c]) { ret += embind_charCodes[HEAPU8[c++]]; } return ret; } var awaitingDependencies={}; var registeredTypes={}; var typeDependencies={}; var char_0=48; var char_9=57;function makeLegalFunctionName(name) { if (undefined === name) { return '_unknown'; } name = name.replace(/[^a-zA-Z0-9_]/g, '$'); var f = name.charCodeAt(0); if (f >= char_0 && f <= char_9) { return '_' + name; } else { return name; } }function createNamedFunction(name, body) { name = makeLegalFunctionName(name); /*jshint evil:true*/ return new Function( "body", "return function " + name + "() {\n" + " \"use strict\";" + " return body.apply(this, arguments);\n" + "};\n" )(body); }function extendError(baseErrorType, errorName) { var errorClass = createNamedFunction(errorName, function(message) { this.name = errorName; this.message = message; var stack = (new Error(message)).stack; if (stack !== undefined) { this.stack = this.toString() + '\n' + stack.replace(/^Error(:[^\n]*)?\n/, ''); } }); errorClass.prototype = Object.create(baseErrorType.prototype); errorClass.prototype.constructor = errorClass; errorClass.prototype.toString = function() { if (this.message === undefined) { return this.name; } else { return this.name + ': ' + this.message; } }; return errorClass; }var BindingError=undefined;function throwBindingError(message) { throw new BindingError(message); } var InternalError=undefined;function throwInternalError(message) { throw new InternalError(message); }function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) { myTypes.forEach(function(type) { typeDependencies[type] = dependentTypes; }); function onComplete(typeConverters) { var myTypeConverters = getTypeConverters(typeConverters); if (myTypeConverters.length !== myTypes.length) { throwInternalError('Mismatched type converter count'); } for (var i = 0; i < myTypes.length; ++i) { registerType(myTypes[i], myTypeConverters[i]); } } var typeConverters = new Array(dependentTypes.length); var unregisteredTypes = []; var registered = 0; dependentTypes.forEach(function(dt, i) { if (registeredTypes.hasOwnProperty(dt)) { typeConverters[i] = registeredTypes[dt]; } else { unregisteredTypes.push(dt); if (!awaitingDependencies.hasOwnProperty(dt)) { awaitingDependencies[dt] = []; } awaitingDependencies[dt].push(function() { typeConverters[i] = registeredTypes[dt]; ++registered; if (registered === unregisteredTypes.length) { onComplete(typeConverters); } }); } }); if (0 === unregisteredTypes.length) { onComplete(typeConverters); } }function registerType(rawType, registeredInstance, options) { options = options || {}; if (!('argPackAdvance' in registeredInstance)) { throw new TypeError('registerType registeredInstance requires argPackAdvance'); } var name = registeredInstance.name; if (!rawType) { throwBindingError('type "' + name + '" must have a positive integer typeid pointer'); } if (registeredTypes.hasOwnProperty(rawType)) { if (options.ignoreDuplicateRegistrations) { return; } else { throwBindingError("Cannot register type '" + name + "' twice"); } } registeredTypes[rawType] = registeredInstance; delete typeDependencies[rawType]; if (awaitingDependencies.hasOwnProperty(rawType)) { var callbacks = awaitingDependencies[rawType]; delete awaitingDependencies[rawType]; callbacks.forEach(function(cb) { cb(); }); } }function __embind_register_bool(rawType, name, size, trueValue, falseValue) { var shift = getShiftFromSize(size); name = readLatin1String(name); registerType(rawType, { name: name, 'fromWireType': function(wt) { // ambiguous emscripten ABI: sometimes return values are // true or false, and sometimes integers (0 or 1) return !!wt; }, 'toWireType': function(destructors, o) { return o ? trueValue : falseValue; }, 'argPackAdvance': 8, 'readValueFromPointer': function(pointer) { // TODO: if heap is fixed (like in asm.js) this could be executed outside var heap; if (size === 1) { heap = HEAP8; } else if (size === 2) { heap = HEAP16; } else if (size === 4) { heap = HEAP32; } else { throw new TypeError("Unknown boolean type size: " + name); } return this['fromWireType'](heap[pointer >> shift]); }, destructorFunction: null, // This type does not need a destructor }); } function ClassHandle_isAliasOf(other) { if (!(this instanceof ClassHandle)) { return false; } if (!(other instanceof ClassHandle)) { return false; } var leftClass = this.$$.ptrType.registeredClass; var left = this.$$.ptr; var rightClass = other.$$.ptrType.registeredClass; var right = other.$$.ptr; while (leftClass.baseClass) { left = leftClass.upcast(left); leftClass = leftClass.baseClass; } while (rightClass.baseClass) { right = rightClass.upcast(right); rightClass = rightClass.baseClass; } return leftClass === rightClass && left === right; } function shallowCopyInternalPointer(o) { return { count: o.count, deleteScheduled: o.deleteScheduled, preservePointerOnDelete: o.preservePointerOnDelete, ptr: o.ptr, ptrType: o.ptrType, smartPtr: o.smartPtr, smartPtrType: o.smartPtrType, }; } function throwInstanceAlreadyDeleted(obj) { function getInstanceTypeName(handle) { return handle.$$.ptrType.registeredClass.name; } throwBindingError(getInstanceTypeName(obj) + ' instance already deleted'); }function ClassHandle_clone() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this); } if (this.$$.preservePointerOnDelete) { this.$$.count.value += 1; return this; } else { var clone = Object.create(Object.getPrototypeOf(this), { $$: { value: shallowCopyInternalPointer(this.$$), } }); clone.$$.count.value += 1; clone.$$.deleteScheduled = false; return clone; } } function runDestructor(handle) { var $$ = handle.$$; if ($$.smartPtr) { $$.smartPtrType.rawDestructor($$.smartPtr); } else { $$.ptrType.registeredClass.rawDestructor($$.ptr); } }function ClassHandle_delete() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this); } if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError('Object already scheduled for deletion'); } this.$$.count.value -= 1; var toDelete = 0 === this.$$.count.value; if (toDelete) { runDestructor(this); } if (!this.$$.preservePointerOnDelete) { this.$$.smartPtr = undefined; this.$$.ptr = undefined; } } function ClassHandle_isDeleted() { return !this.$$.ptr; } var delayFunction=undefined; var deletionQueue=[]; function flushPendingDeletes() { while (deletionQueue.length) { var obj = deletionQueue.pop(); obj.$$.deleteScheduled = false; obj['delete'](); } }function ClassHandle_deleteLater() { if (!this.$$.ptr) { throwInstanceAlreadyDeleted(this); } if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { throwBindingError('Object already scheduled for deletion'); } deletionQueue.push(this); if (deletionQueue.length === 1 && delayFunction) { delayFunction(flushPendingDeletes); } this.$$.deleteScheduled = true; return this; }function init_ClassHandle() { ClassHandle.prototype['isAliasOf'] = ClassHandle_isAliasOf; ClassHandle.prototype['clone'] = ClassHandle_clone; ClassHandle.prototype['delete'] = ClassHandle_delete; ClassHandle.prototype['isDeleted'] = ClassHandle_isDeleted; ClassHandle.prototype['deleteLater'] = ClassHandle_deleteLater; }function ClassHandle() { } var registeredPointers={}; function ensureOverloadTable(proto, methodName, humanName) { if (undefined === proto[methodName].overloadTable) { var prevFunc = proto[methodName]; // Inject an overload resolver function that routes to the appropriate overload based on the number of arguments. proto[methodName] = function() { // TODO This check can be removed in -O3 level "unsafe" optimizations. if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) { throwBindingError("Function '" + humanName + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + proto[methodName].overloadTable + ")!"); } return proto[methodName].overloadTable[arguments.length].apply(this, arguments); }; // Move the previous function into the overload table. proto[methodName].overloadTable = []; proto[methodName].overloadTable[prevFunc.argCount] = prevFunc; } }function exposePublicSymbol(name, value, numArguments) { if (Module.hasOwnProperty(name)) { if (undefined === numArguments || (undefined !== Module[name].overloadTable && undefined !== Module[name].overloadTable[numArguments])) { throwBindingError("Cannot register public name '" + name + "' twice"); } // We are exposing a function with the same name as an existing function. Create an overload table and a function selector // that routes between the two. ensureOverloadTable(Module, name, name); if (Module.hasOwnProperty(numArguments)) { throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!"); } // Add the new function into the overload table. Module[name].overloadTable[numArguments] = value; } else { Module[name] = value; if (undefined !== numArguments) { Module[name].numArguments = numArguments; } } } function RegisteredClass( name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast ) { this.name = name; this.constructor = constructor; this.instancePrototype = instancePrototype; this.rawDestructor = rawDestructor; this.baseClass = baseClass; this.getActualType = getActualType; this.upcast = upcast; this.downcast = downcast; this.pureVirtualFunctions = []; } function upcastPointer(ptr, ptrClass, desiredClass) { while (ptrClass !== desiredClass) { if (!ptrClass.upcast) { throwBindingError("Expected null or instance of " + desiredClass.name + ", got an instance of " + ptrClass.name); } ptr = ptrClass.upcast(ptr); ptrClass = ptrClass.baseClass; } return ptr; }function constNoSmartPtrRawPointerToWireType(destructors, handle) { if (handle === null) { if (this.isReference) { throwBindingError('null is not a valid ' + this.name); } return 0; } if (!handle.$$) { throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); } if (!handle.$$.ptr) { throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name); } var handleClass = handle.$$.ptrType.registeredClass; var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); return ptr; } function genericPointerToWireType(destructors, handle) { var ptr; if (handle === null) { if (this.isReference) { throwBindingError('null is not a valid ' + this.name); } if (this.isSmartPointer) { ptr = this.rawConstructor(); if (destructors !== null) { destructors.push(this.rawDestructor, ptr); } return ptr; } else { return 0; } } if (!handle.$$) { throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); } if (!handle.$$.ptr) { throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name); } if (!this.isConst && handle.$$.ptrType.isConst) { throwBindingError('Cannot convert argument of type ' + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + ' to parameter type ' + this.name); } var handleClass = handle.$$.ptrType.registeredClass; ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); if (this.isSmartPointer) { // TODO: this is not strictly true // We could support BY_EMVAL conversions from raw pointers to smart pointers // because the smart pointer can hold a reference to the handle if (undefined === handle.$$.smartPtr) { throwBindingError('Passing raw pointer to smart pointer is illegal'); } switch (this.sharingPolicy) { case 0: // NONE // no upcasting if (handle.$$.smartPtrType === this) { ptr = handle.$$.smartPtr; } else { throwBindingError('Cannot convert argument of type ' + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + ' to parameter type ' + this.name); } break; case 1: // INTRUSIVE ptr = handle.$$.smartPtr; break; case 2: // BY_EMVAL if (handle.$$.smartPtrType === this) { ptr = handle.$$.smartPtr; } else { var clonedHandle = handle['clone'](); ptr = this.rawShare( ptr, __emval_register(function() { clonedHandle['delete'](); }) ); if (destructors !== null) { destructors.push(this.rawDestructor, ptr); } } break; default: throwBindingError('Unsupporting sharing policy'); } } return ptr; } function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) { if (handle === null) { if (this.isReference) { throwBindingError('null is not a valid ' + this.name); } return 0; } if (!handle.$$) { throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); } if (!handle.$$.ptr) { throwBindingError('Cannot pass deleted object as a pointer of type ' + this.name); } if (handle.$$.ptrType.isConst) { throwBindingError('Cannot convert argument of type ' + handle.$$.ptrType.name + ' to parameter type ' + this.name); } var handleClass = handle.$$.ptrType.registeredClass; var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); return ptr; } function simpleReadValueFromPointer(pointer) { return this['fromWireType'](HEAPU32[pointer >> 2]); } function RegisteredPointer_getPointee(ptr) { if (this.rawGetPointee) { ptr = this.rawGetPointee(ptr); } return ptr; } function RegisteredPointer_destructor(ptr) { if (this.rawDestructor) { this.rawDestructor(ptr); } } function RegisteredPointer_deleteObject(handle) { if (handle !== null) { handle['delete'](); } } function downcastPointer(ptr, ptrClass, desiredClass) { if (ptrClass === desiredClass) { return ptr; } if (undefined === desiredClass.baseClass) { return null; // no conversion } var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); if (rv === null) { return null; } return desiredClass.downcast(rv); } function getInheritedInstanceCount() { return Object.keys(registeredInstances).length; } function getLiveInheritedInstances() { var rv = []; for (var k in registeredInstances) { if (registeredInstances.hasOwnProperty(k)) { rv.push(registeredInstances[k]); } } return rv; } function setDelayFunction(fn) { delayFunction = fn; if (deletionQueue.length && delayFunction) { delayFunction(flushPendingDeletes); } }function init_embind() { Module['getInheritedInstanceCount'] = getInheritedInstanceCount; Module['getLiveInheritedInstances'] = getLiveInheritedInstances; Module['flushPendingDeletes'] = flushPendingDeletes; Module['setDelayFunction'] = setDelayFunction; }var registeredInstances={}; function getBasestPointer(class_, ptr) { if (ptr === undefined) { throwBindingError('ptr should not be undefined'); } while (class_.baseClass) { ptr = class_.upcast(ptr); class_ = class_.baseClass; } return ptr; }function getInheritedInstance(class_, ptr) { ptr = getBasestPointer(class_, ptr); return registeredInstances[ptr]; } function makeClassHandle(prototype, record) { if (!record.ptrType || !record.ptr) { throwInternalError('makeClassHandle requires ptr and ptrType'); } var hasSmartPtrType = !!record.smartPtrType; var hasSmartPtr = !!record.smartPtr; if (hasSmartPtrType !== hasSmartPtr) { throwInternalError('Both smartPtrType and smartPtr must be specified'); } record.count = { value: 1 }; return Object.create(prototype, { $$: { value: record, }, }); }function RegisteredPointer_fromWireType(ptr) { // ptr is a raw pointer (or a raw smartpointer) // rawPointer is a maybe-null raw pointer var rawPointer = this.getPointee(ptr); if (!rawPointer) { this.destructor(ptr); return null; } var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); if (undefined !== registeredInstance) { // JS object has been neutered, time to repopulate it if (0 === registeredInstance.$$.count.value) { registeredInstance.$$.ptr = rawPointer; registeredInstance.$$.smartPtr = ptr; return registeredInstance['clone'](); } else { // else, just increment reference count on existing object // it already has a reference to the smart pointer var rv = registeredInstance['clone'](); this.destructor(ptr); return rv; } } function makeDefaultHandle() { if (this.isSmartPointer) { return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this.pointeeType, ptr: rawPointer, smartPtrType: this, smartPtr: ptr, }); } else { return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this, ptr: ptr, }); } } var actualType = this.registeredClass.getActualType(rawPointer); var registeredPointerRecord = registeredPointers[actualType]; if (!registeredPointerRecord) { return makeDefaultHandle.call(this); } var toType; if (this.isConst) { toType = registeredPointerRecord.constPointerType; } else { toType = registeredPointerRecord.pointerType; } var dp = downcastPointer( rawPointer, this.registeredClass, toType.registeredClass); if (dp === null) { return makeDefaultHandle.call(this); } if (this.isSmartPointer) { return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp, smartPtrType: this, smartPtr: ptr, }); } else { return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp, }); } }function init_RegisteredPointer() { RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee; RegisteredPointer.prototype.destructor = RegisteredPointer_destructor; RegisteredPointer.prototype['argPackAdvance'] = 8; RegisteredPointer.prototype['readValueFromPointer'] = simpleReadValueFromPointer; RegisteredPointer.prototype['deleteObject'] = RegisteredPointer_deleteObject; RegisteredPointer.prototype['fromWireType'] = RegisteredPointer_fromWireType; }function RegisteredPointer( name, registeredClass, isReference, isConst, // smart pointer properties isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor ) { this.name = name; this.registeredClass = registeredClass; this.isReference = isReference; this.isConst = isConst; // smart pointer properties this.isSmartPointer = isSmartPointer; this.pointeeType = pointeeType; this.sharingPolicy = sharingPolicy; this.rawGetPointee = rawGetPointee; this.rawConstructor = rawConstructor; this.rawShare = rawShare; this.rawDestructor = rawDestructor; if (!isSmartPointer && registeredClass.baseClass === undefined) { if (isConst) { this['toWireType'] = constNoSmartPtrRawPointerToWireType; this.destructorFunction = null; } else { this['toWireType'] = nonConstNoSmartPtrRawPointerToWireType; this.destructorFunction = null; } } else { this['toWireType'] = genericPointerToWireType; // Here we must leave this.destructorFunction undefined, since whether genericPointerToWireType returns // a pointer that needs to be freed up is runtime-dependent, and cannot be evaluated at registration time. // TODO: Create an alternative mechanism that allows removing the use of var destructors = []; array in // craftInvokerFunction altogether. } } function replacePublicSymbol(name, value, numArguments) { if (!Module.hasOwnProperty(name)) { throwInternalError('Replacing nonexistant public symbol'); } // If there's an overload table for this symbol, replace the symbol in the overload table instead. if (undefined !== Module[name].overloadTable && undefined !== numArguments) { Module[name].overloadTable[numArguments] = value; } else { Module[name] = value; Module[name].argCount = numArguments; } } function embind__requireFunction(signature, rawFunction) { signature = readLatin1String(signature); function makeDynCaller(dynCall) { var args = []; for (var i = 1; i < signature.length; ++i) { args.push('a' + i); } var name = 'dynCall_' + signature + '_' + rawFunction; var body = 'return function ' + name + '(' + args.join(', ') + ') {\n'; body += ' return dynCall(rawFunction' + (args.length ? ', ' : '') + args.join(', ') + ');\n'; body += '};\n'; return (new Function('dynCall', 'rawFunction', body))(dynCall, rawFunction); } var fp; if (Module['FUNCTION_TABLE_' + signature] !== undefined) { fp = Module['FUNCTION_TABLE_' + signature][rawFunction]; } else if (typeof FUNCTION_TABLE !== "undefined") { fp = FUNCTION_TABLE[rawFunction]; } else { // asm.js does not give direct access to the function tables, // and thus we must go through the dynCall interface which allows // calling into a signature's function table by pointer value. // // https://github.com/dherman/asm.js/issues/83 // // This has three main penalties: // - dynCall is another function call in the path from JavaScript to C++. // - JITs may not predict through the function table indirection at runtime. var dc = Module["asm"]['dynCall_' + signature]; if (dc === undefined) { // We will always enter this branch if the signature // contains 'f' and PRECISE_F32 is not enabled. // // Try again, replacing 'f' with 'd'. dc = Module["asm"]['dynCall_' + signature.replace(/f/g, 'd')]; if (dc === undefined) { throwBindingError("No dynCall invoker for signature: " + signature); } } fp = makeDynCaller(dc); } if (typeof fp !== "function") { throwBindingError("unknown function pointer with signature " + signature + ": " + rawFunction); } return fp; } var UnboundTypeError=undefined; function getTypeName(type) { var ptr = ___getTypeName(type); var rv = readLatin1String(ptr); _free(ptr); return rv; }function throwUnboundTypeError(message, types) { var unboundTypes = []; var seen = {}; function visit(type) { if (seen[type]) { return; } if (registeredTypes[type]) { return; } if (typeDependencies[type]) { typeDependencies[type].forEach(visit); return; } unboundTypes.push(type); seen[type] = true; } types.forEach(visit); throw new UnboundTypeError(message + ': ' + unboundTypes.map(getTypeName).join([', '])); }function __embind_register_class( rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor ) { name = readLatin1String(name); getActualType = embind__requireFunction(getActualTypeSignature, getActualType); if (upcast) { upcast = embind__requireFunction(upcastSignature, upcast); } if (downcast) { downcast = embind__requireFunction(downcastSignature, downcast); } rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); var legalFunctionName = makeLegalFunctionName(name); exposePublicSymbol(legalFunctionName, function() { // this code cannot run if baseClassRawType is zero throwUnboundTypeError('Cannot construct ' + name + ' due to unbound types', [baseClassRawType]); }); whenDependentTypesAreResolved( [rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function(base) { base = base[0]; var baseClass; var basePrototype; if (baseClassRawType) { baseClass = base.registeredClass; basePrototype = baseClass.instancePrototype; } else { basePrototype = ClassHandle.prototype; } var constructor = createNamedFunction(legalFunctionName, function() { if (Object.getPrototypeOf(this) !== instancePrototype) { throw new BindingError("Use 'new' to construct " + name); } if (undefined === registeredClass.constructor_body) { throw new BindingError(name + " has no accessible constructor"); } var body = registeredClass.constructor_body[arguments.length]; if (undefined === body) { throw new BindingError("Tried to invoke ctor of " + name + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(registeredClass.constructor_body).toString() + ") parameters instead!"); } return body.apply(this, arguments); }); var instancePrototype = Object.create(basePrototype, { constructor: { value: constructor }, }); constructor.prototype = instancePrototype; var registeredClass = new RegisteredClass( name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast); var referenceConverter = new RegisteredPointer( name, registeredClass, true, false, false); var pointerConverter = new RegisteredPointer( name + '*', registeredClass, false, false, false); var constPointerConverter = new RegisteredPointer( name + ' const*', registeredClass, false, true, false); registeredPointers[rawType] = { pointerType: pointerConverter, constPointerType: constPointerConverter }; replacePublicSymbol(legalFunctionName, constructor); return [referenceConverter, pointerConverter, constPointerConverter]; } ); } function heap32VectorToArray(count, firstElement) { var array = []; for (var i = 0; i < count; i++) { array.push(HEAP32[(firstElement >> 2) + i]); } return array; } function runDestructors(destructors) { while (destructors.length) { var ptr = destructors.pop(); var del = destructors.pop(); del(ptr); } }function __embind_register_class_constructor( rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor ) { var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); invoker = embind__requireFunction(invokerSignature, invoker); whenDependentTypesAreResolved([], [rawClassType], function(classType) { classType = classType[0]; var humanName = 'constructor ' + classType.name; if (undefined === classType.registeredClass.constructor_body) { classType.registeredClass.constructor_body = []; } if (undefined !== classType.registeredClass.constructor_body[argCount - 1]) { throw new BindingError("Cannot register multiple constructors with identical number of parameters (" + (argCount-1) + ") for class '" + classType.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!"); } classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() { throwUnboundTypeError('Cannot construct ' + classType.name + ' due to unbound types', rawArgTypes); }; whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() { if (arguments.length !== argCount - 1) { throwBindingError(humanName + ' called with ' + arguments.length + ' arguments, expected ' + (argCount-1)); } var destructors = []; var args = new Array(argCount); args[0] = rawConstructor; for (var i = 1; i < argCount; ++i) { args[i] = argTypes[i]['toWireType'](destructors, arguments[i - 1]); } var ptr = invoker.apply(null, args); runDestructors(destructors); return argTypes[0]['fromWireType'](ptr); }; return []; }); return []; }); } function new_(constructor, argumentList) { if (!(constructor instanceof Function)) { throw new TypeError('new_ called with constructor type ' + typeof(constructor) + " which is not a function"); } /* * Previously, the following line was just: function dummy() {}; * Unfortunately, Chrome was preserving 'dummy' as the object's name, even though at creation, the 'dummy' has the * correct constructor name. Thus, objects created with IMVU.new would show up in the debugger as 'dummy', which * isn't very helpful. Using IMVU.createNamedFunction addresses the issue. Doublely-unfortunately, there's no way * to write a test for this behavior. -NRD 2013.02.22 */ var dummy = createNamedFunction(constructor.name || 'unknownFunctionName', function(){}); dummy.prototype = constructor.prototype; var obj = new dummy; var r = constructor.apply(obj, argumentList); return (r instanceof Object) ? r : obj; }function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) { // humanName: a human-readable string name for the function to be generated. // argTypes: An array that contains the embind type objects for all types in the function signature. // argTypes[0] is the type object for the function return value. // argTypes[1] is the type object for function this object/class type, or null if not crafting an invoker for a class method. // argTypes[2...] are the actual function parameters. // classType: The embind type object for the class to be bound, or null if this is not a method of a class. // cppInvokerFunc: JS Function object to the C++-side function that interops into C++ code. // cppTargetFunc: Function pointer (an integer to FUNCTION_TABLE) to the target C++ function the cppInvokerFunc will end up calling. var argCount = argTypes.length; if (argCount < 2) { throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!"); } var isClassMethodFunc = (argTypes[1] !== null && classType !== null); // Free functions with signature "void function()" do not need an invoker that marshalls between wire types. // TODO: This omits argument count check - enable only at -O3 or similar. // if (ENABLE_UNSAFE_OPTS && argCount == 2 && argTypes[0].name == "void" && !isClassMethodFunc) { // return FUNCTION_TABLE[fn]; // } // Determine if we need to use a dynamic stack to store the destructors for the function parameters. // TODO: Remove this completely once all function invokers are being dynamically generated. var needsDestructorStack = false; for(var i = 1; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. if (argTypes[i] !== null && argTypes[i].destructorFunction === undefined) { // The type does not define a destructor function - must use dynamic stack needsDestructorStack = true; break; } } var returns = (argTypes[0].name !== "void"); var argsList = ""; var argsListWired = ""; for(var i = 0; i < argCount - 2; ++i) { argsList += (i!==0?", ":"")+"arg"+i; argsListWired += (i!==0?", ":"")+"arg"+i+"Wired"; } var invokerFnBody = "return function "+makeLegalFunctionName(humanName)+"("+argsList+") {\n" + "if (arguments.length !== "+(argCount - 2)+") {\n" + "throwBindingError('function "+humanName+" called with ' + arguments.length + ' arguments, expected "+(argCount - 2)+" args!');\n" + "}\n"; if (needsDestructorStack) { invokerFnBody += "var destructors = [];\n"; } var dtorStack = needsDestructorStack ? "destructors" : "null"; var args1 = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"]; var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; if (isClassMethodFunc) { invokerFnBody += "var thisWired = classParam.toWireType("+dtorStack+", this);\n"; } for(var i = 0; i < argCount - 2; ++i) { invokerFnBody += "var arg"+i+"Wired = argType"+i+".toWireType("+dtorStack+", arg"+i+"); // "+argTypes[i+2].name+"\n"; args1.push("argType"+i); args2.push(argTypes[i+2]); } if (isClassMethodFunc) { argsListWired = "thisWired" + (argsListWired.length > 0 ? ", " : "") + argsListWired; } invokerFnBody += (returns?"var rv = ":"") + "invoker(fn"+(argsListWired.length>0?", ":"")+argsListWired+");\n"; if (needsDestructorStack) { invokerFnBody += "runDestructors(destructors);\n"; } else { for(var i = isClassMethodFunc?1:2; i < argTypes.length; ++i) { // Skip return value at index 0 - it's not deleted here. Also skip class type if not a method. var paramName = (i === 1 ? "thisWired" : ("arg"+(i - 2)+"Wired")); if (argTypes[i].destructorFunction !== null) { invokerFnBody += paramName+"_dtor("+paramName+"); // "+argTypes[i].name+"\n"; args1.push(paramName+"_dtor"); args2.push(argTypes[i].destructorFunction); } } } if (returns) { invokerFnBody += "var ret = retType.fromWireType(rv);\n" + "return ret;\n"; } else { } invokerFnBody += "}\n"; args1.push(invokerFnBody); var invokerFunction = new_(Function, args1).apply(null, args2); return invokerFunction; }function __embind_register_class_function( rawClassType, methodName, argCount, rawArgTypesAddr, // [ReturnType, ThisType, Args...] invokerSignature, rawInvoker, context, isPureVirtual ) { var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); methodName = readLatin1String(methodName); rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); whenDependentTypesAreResolved([], [rawClassType], function(classType) { classType = classType[0]; var humanName = classType.name + '.' + methodName; if (isPureVirtual) { classType.registeredClass.pureVirtualFunctions.push(methodName); } function unboundTypesHandler() { throwUnboundTypeError('Cannot call ' + humanName + ' due to unbound types', rawArgTypes); } var proto = classType.registeredClass.instancePrototype; var method = proto[methodName]; if (undefined === method || (undefined === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2)) { // This is the first overload to be registered, OR we are replacing a function in the base class with a function in the derived class. unboundTypesHandler.argCount = argCount - 2; unboundTypesHandler.className = classType.name; proto[methodName] = unboundTypesHandler; } else { // There was an existing function with the same name registered. Set up a function overload routing table. ensureOverloadTable(proto, methodName, humanName); proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler; } whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); // Replace the initial unbound-handler-stub function with the appropriate member function, now that all types // are resolved. If multiple overloads are registered for this function, the function goes into an overload table. if (undefined === proto[methodName].overloadTable) { // Set argCount in case an overload is registered later memberFunction.argCount = argCount - 2; proto[methodName] = memberFunction; } else { proto[methodName].overloadTable[argCount - 2] = memberFunction; } return []; }); return []; }); } var emval_free_list=[]; var emval_handle_array=[{},{value:undefined},{value:null},{value:true},{value:false}];function __emval_decref(handle) { if (handle > 4 && 0 === --emval_handle_array[handle].refcount) { emval_handle_array[handle] = undefined; emval_free_list.push(handle); } } function count_emval_handles() { var count = 0; for (var i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { ++count; } } return count; } function get_first_emval() { for (var i = 5; i < emval_handle_array.length; ++i) { if (emval_handle_array[i] !== undefined) { return emval_handle_array[i]; } } return null; }function init_emval() { Module['count_emval_handles'] = count_emval_handles; Module['get_first_emval'] = get_first_emval; }function __emval_register(value) { switch(value){ case undefined :{ return 1; } case null :{ return 2; } case true :{ return 3; } case false :{ return 4; } default:{ var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; emval_handle_array[handle] = {refcount: 1, value: value}; return handle; } } }function __embind_register_emval(rawType, name) { name = readLatin1String(name); registerType(rawType, { name: name, 'fromWireType': function(handle) { var rv = emval_handle_array[handle].value; __emval_decref(handle); return rv; }, 'toWireType': function(destructors, value) { return __emval_register(value); }, 'argPackAdvance': 8, 'readValueFromPointer': simpleReadValueFromPointer, destructorFunction: null, // This type does not need a destructor // TODO: do we need a deleteObject here? write a test where // emval is passed into JS via an interface }); } function _embind_repr(v) { if (v === null) { return 'null'; } var t = typeof v; if (t === 'object' || t === 'array' || t === 'function') { return v.toString(); } else { return '' + v; } } function floatReadValueFromPointer(name, shift) { switch (shift) { case 2: return function(pointer) { return this['fromWireType'](HEAPF32[pointer >> 2]); }; case 3: return function(pointer) { return this['fromWireType'](HEAPF64[pointer >> 3]); }; default: throw new TypeError("Unknown float type: " + name); } }function __embind_register_float(rawType, name, size) { var shift = getShiftFromSize(size); name = readLatin1String(name); registerType(rawType, { name: name, 'fromWireType': function(value) { return value; }, 'toWireType': function(destructors, value) { // todo: Here we have an opportunity for -O3 level "unsafe" optimizations: we could // avoid the following if() and assume value is of proper type. if (typeof value !== "number" && typeof value !== "boolean") { throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name); } return value; }, 'argPackAdvance': 8, 'readValueFromPointer': floatReadValueFromPointer(name, shift), destructorFunction: null, // This type does not need a destructor }); } function integerReadValueFromPointer(name, shift, signed) { // integers are quite common, so generate very specialized functions switch (shift) { case 0: return signed ? function readS8FromPointer(pointer) { return HEAP8[pointer]; } : function readU8FromPointer(pointer) { return HEAPU8[pointer]; }; case 1: return signed ? function readS16FromPointer(pointer) { return HEAP16[pointer >> 1]; } : function readU16FromPointer(pointer) { return HEAPU16[pointer >> 1]; }; case 2: return signed ? function readS32FromPointer(pointer) { return HEAP32[pointer >> 2]; } : function readU32FromPointer(pointer) { return HEAPU32[pointer >> 2]; }; default: throw new TypeError("Unknown integer type: " + name); } }function __embind_register_integer(primitiveType, name, size, minRange, maxRange) { name = readLatin1String(name); if (maxRange === -1) { // LLVM doesn't have signed and unsigned 32-bit types, so u32 literals come out as 'i32 -1'. Always treat those as max u32. maxRange = 4294967295; } var shift = getShiftFromSize(size); var fromWireType = function(value) { return value; }; if (minRange === 0) { var bitshift = 32 - 8*size; fromWireType = function(value) { return (value << bitshift) >>> bitshift; }; } var isUnsignedType = (name.indexOf('unsigned') != -1); registerType(primitiveType, { name: name, 'fromWireType': fromWireType, 'toWireType': function(destructors, value) { // todo: Here we have an opportunity for -O3 level "unsafe" optimizations: we could // avoid the following two if()s and assume value is of proper type. if (typeof value !== "number" && typeof value !== "boolean") { throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name); } if (value < minRange || value > maxRange) { throw new TypeError('Passing a number "' + _embind_repr(value) + '" from JS side to C/C++ side to an argument of type "' + name + '", which is outside the valid range [' + minRange + ', ' + maxRange + ']!'); } return isUnsignedType ? (value >>> 0) : (value | 0); }, 'argPackAdvance': 8, 'readValueFromPointer': integerReadValueFromPointer(name, shift, minRange !== 0), destructorFunction: null, // This type does not need a destructor }); } function __embind_register_memory_view(rawType, dataTypeIndex, name) { var typeMapping = [ Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array, ]; var TA = typeMapping[dataTypeIndex]; function decodeMemoryView(handle) { handle = handle >> 2; var heap = HEAPU32; var size = heap[handle]; // in elements var data = heap[handle + 1]; // byte offset into emscripten heap return new TA(heap['buffer'], data, size); } name = readLatin1String(name); registerType(rawType, { name: name, 'fromWireType': decodeMemoryView, 'argPackAdvance': 8, 'readValueFromPointer': decodeMemoryView, }, { ignoreDuplicateRegistrations: true, }); } function __embind_register_std_string(rawType, name) { name = readLatin1String(name); registerType(rawType, { name: name, 'fromWireType': function(value) { var length = HEAPU32[value >> 2]; var a = new Array(length); for (var i = 0; i < length; ++i) { a[i] = String.fromCharCode(HEAPU8[value + 4 + i]); } _free(value); return a.join(''); }, 'toWireType': function(destructors, value) { if (value instanceof ArrayBuffer) { value = new Uint8Array(value); } function getTAElement(ta, index) { return ta[index]; } function getStringElement(string, index) { return string.charCodeAt(index); } var getElement; if (value instanceof Uint8Array) { getElement = getTAElement; } else if (value instanceof Uint8ClampedArray) { getElement = getTAElement; } else if (value instanceof Int8Array) { getElement = getTAElement; } else if (typeof value === 'string') { getElement = getStringElement; } else { throwBindingError('Cannot pass non-string to std::string'); } // assumes 4-byte alignment var length = value.length; var ptr = _malloc(4 + length); HEAPU32[ptr >> 2] = length; for (var i = 0; i < length; ++i) { var charCode = getElement(value, i); if (charCode > 255) { _free(ptr); throwBindingError('String has UTF-16 code units that do not fit in 8 bits'); } HEAPU8[ptr + 4 + i] = charCode; } if (destructors !== null) { destructors.push(_free, ptr); } return ptr; }, 'argPackAdvance': 8, 'readValueFromPointer': simpleReadValueFromPointer, destructorFunction: function(ptr) { _free(ptr); }, }); } function __embind_register_std_wstring(rawType, charSize, name) { // nb. do not cache HEAPU16 and HEAPU32, they may be destroyed by enlargeMemory(). name = readLatin1String(name); var getHeap, shift; if (charSize === 2) { getHeap = function() { return HEAPU16; }; shift = 1; } else if (charSize === 4) { getHeap = function() { return HEAPU32; }; shift = 2; } registerType(rawType, { name: name, 'fromWireType': function(value) { var HEAP = getHeap(); var length = HEAPU32[value >> 2]; var a = new Array(length); var start = (value + 4) >> shift; for (var i = 0; i < length; ++i) { a[i] = String.fromCharCode(HEAP[start + i]); } _free(value); return a.join(''); }, 'toWireType': function(destructors, value) { // assumes 4-byte alignment var HEAP = getHeap(); var length = value.length; var ptr = _malloc(4 + length * charSize); HEAPU32[ptr >> 2] = length; var start = (ptr + 4) >> shift; for (var i = 0; i < length; ++i) { HEAP[start + i] = value.charCodeAt(i); } if (destructors !== null) { destructors.push(_free, ptr); } return ptr; }, 'argPackAdvance': 8, 'readValueFromPointer': simpleReadValueFromPointer, destructorFunction: function(ptr) { _free(ptr); }, }); } function __embind_register_void(rawType, name) { name = readLatin1String(name); registerType(rawType, { isVoid: true, // void return values can be optimized out sometimes name: name, 'argPackAdvance': 0, 'fromWireType': function() { return undefined; }, 'toWireType': function(destructors, o) { // TODO: assert if anything else is given? return undefined; }, }); } function _abort() { Module['abort'](); } function _llvm_trap() { abort('trap!'); } function _emscripten_memcpy_big(dest, src, num) { HEAPU8.set(HEAPU8.subarray(src, src+num), dest); return dest; } var PTHREAD_SPECIFIC={};function _pthread_getspecific(key) { return PTHREAD_SPECIFIC[key] || 0; } var PTHREAD_SPECIFIC_NEXT_KEY=1; var ERRNO_CODES={EPERM:1,ENOENT:2,ESRCH:3,EINTR:4,EIO:5,ENXIO:6,E2BIG:7,ENOEXEC:8,EBADF:9,ECHILD:10,EAGAIN:11,EWOULDBLOCK:11,ENOMEM:12,EACCES:13,EFAULT:14,ENOTBLK:15,EBUSY:16,EEXIST:17,EXDEV:18,ENODEV:19,ENOTDIR:20,EISDIR:21,EINVAL:22,ENFILE:23,EMFILE:24,ENOTTY:25,ETXTBSY:26,EFBIG:27,ENOSPC:28,ESPIPE:29,EROFS:30,EMLINK:31,EPIPE:32,EDOM:33,ERANGE:34,ENOMSG:42,EIDRM:43,ECHRNG:44,EL2NSYNC:45,EL3HLT:46,EL3RST:47,ELNRNG:48,EUNATCH:49,ENOCSI:50,EL2HLT:51,EDEADLK:35,ENOLCK:37,EBADE:52,EBADR:53,EXFULL:54,ENOANO:55,EBADRQC:56,EBADSLT:57,EDEADLOCK:35,EBFONT:59,ENOSTR:60,ENODATA:61,ETIME:62,ENOSR:63,ENONET:64,ENOPKG:65,EREMOTE:66,ENOLINK:67,EADV:68,ESRMNT:69,ECOMM:70,EPROTO:71,EMULTIHOP:72,EDOTDOT:73,EBADMSG:74,ENOTUNIQ:76,EBADFD:77,EREMCHG:78,ELIBACC:79,ELIBBAD:80,ELIBSCN:81,ELIBMAX:82,ELIBEXEC:83,ENOSYS:38,ENOTEMPTY:39,ENAMETOOLONG:36,ELOOP:40,EOPNOTSUPP:95,EPFNOSUPPORT:96,ECONNRESET:104,ENOBUFS:105,EAFNOSUPPORT:97,EPROTOTYPE:91,ENOTSOCK:88,ENOPROTOOPT:92,ESHUTDOWN:108,ECONNREFUSED:111,EADDRINUSE:98,ECONNABORTED:103,ENETUNREACH:101,ENETDOWN:100,ETIMEDOUT:110,EHOSTDOWN:112,EHOSTUNREACH:113,EINPROGRESS:115,EALREADY:114,EDESTADDRREQ:89,EMSGSIZE:90,EPROTONOSUPPORT:93,ESOCKTNOSUPPORT:94,EADDRNOTAVAIL:99,ENETRESET:102,EISCONN:106,ENOTCONN:107,ETOOMANYREFS:109,EUSERS:87,EDQUOT:122,ESTALE:116,ENOTSUP:95,ENOMEDIUM:123,EILSEQ:84,EOVERFLOW:75,ECANCELED:125,ENOTRECOVERABLE:131,EOWNERDEAD:130,ESTRPIPE:86};function _pthread_key_create(key, destructor) { if (key == 0) { return ERRNO_CODES.EINVAL; } HEAP32[((key)>>2)]=PTHREAD_SPECIFIC_NEXT_KEY; // values start at 0 PTHREAD_SPECIFIC[PTHREAD_SPECIFIC_NEXT_KEY] = 0; PTHREAD_SPECIFIC_NEXT_KEY++; return 0; } function _pthread_once(ptr, func) { if (!_pthread_once.seen) _pthread_once.seen = {}; if (ptr in _pthread_once.seen) return; Module['dynCall_v'](func); _pthread_once.seen[ptr] = 1; } function _pthread_setspecific(key, value) { if (!(key in PTHREAD_SPECIFIC)) { return ERRNO_CODES.EINVAL; } PTHREAD_SPECIFIC[key] = value; return 0; } function ___setErrNo(value) { if (Module['___errno_location']) HEAP32[((Module['___errno_location']())>>2)]=value; else Module.printErr('failed to set errno from JS'); return value; } embind_init_charCodes(); BindingError = Module['BindingError'] = extendError(Error, 'BindingError');; InternalError = Module['InternalError'] = extendError(Error, 'InternalError');; init_ClassHandle(); init_RegisteredPointer(); init_embind();; UnboundTypeError = Module['UnboundTypeError'] = extendError(Error, 'UnboundTypeError');; init_emval();; DYNAMICTOP_PTR = staticAlloc(4); STACK_BASE = STACKTOP = alignMemory(STATICTOP); STACK_MAX = STACK_BASE + TOTAL_STACK; DYNAMIC_BASE = alignMemory(STACK_MAX); HEAP32[DYNAMICTOP_PTR>>2] = DYNAMIC_BASE; staticSealed = true; // seal the static portion of memory assert(DYNAMIC_BASE < TOTAL_MEMORY, "TOTAL_MEMORY not big enough for stack"); var ASSERTIONS = true; /** @type {function(string, boolean=, number=)} */ function intArrayFromString(stringy, dontAddNull, length) { var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; var u8array = new Array(len); var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); if (dontAddNull) u8array.length = numBytesWritten; return u8array; } function intArrayToString(array) { var ret = []; for (var i = 0; i < array.length; i++) { var chr = array[i]; if (chr > 0xFF) { if (ASSERTIONS) { assert(false, 'Character code ' + chr + ' (' + String.fromCharCode(chr) + ') at offset ' + i + ' not in 0x00-0xFF.'); } chr &= 0xFF; } ret.push(String.fromCharCode(chr)); } return ret.join(''); } // Copied from https://github.com/strophe/strophejs/blob/e06d027/src/polyfills.js#L149 // This code was written by Tyler Akins and has been placed in the // public domain. It would be nice if you left this header intact. // Base64 code from Tyler Akins -- http://rumkin.com /** * Decodes a base64 string. * @param {String} input The string to decode. */ 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; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = 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; }; // Converts a string of base64 into a byte array. // Throws error on invalid input. 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.'); } } // If filename is a base64 data URI, parses and returns data (Buffer on node, // Uint8Array otherwise). If filename is not a base64 data URI, returns undefined. function tryParseAsDataURI(filename) { if (!isDataURI(filename)) { return; } return intArrayFromBase64(filename.slice(dataURIPrefix.length)); } function nullFunc_i(x) { Module["printErr"]("Invalid function pointer called with signature 'i'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_ii(x) { Module["printErr"]("Invalid function pointer called with signature 'ii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_iii(x) { Module["printErr"]("Invalid function pointer called with signature 'iii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_iiii(x) { Module["printErr"]("Invalid function pointer called with signature 'iiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_v(x) { Module["printErr"]("Invalid function pointer called with signature 'v'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_vi(x) { Module["printErr"]("Invalid function pointer called with signature 'vi'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_vii(x) { Module["printErr"]("Invalid function pointer called with signature 'vii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_viii(x) { Module["printErr"]("Invalid function pointer called with signature 'viii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_viiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_viiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function nullFunc_viiiiii(x) { Module["printErr"]("Invalid function pointer called with signature 'viiiiii'. Perhaps this is an invalid value (e.g. caused by calling a virtual method on a NULL pointer)? Or calling a function with an incorrect type, which will fail? (it is worth building your source files with -Werror (warnings are errors), as warnings can indicate undefined behavior which can cause this)"); Module["printErr"]("Build with ASSERTIONS=2 for more info.");abort(x) } function invoke_i(index) { try { return Module["dynCall_i"](index); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_ii(index,a1) { try { return Module["dynCall_ii"](index,a1); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_iii(index,a1,a2) { try { return Module["dynCall_iii"](index,a1,a2); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_iiii(index,a1,a2,a3) { try { return Module["dynCall_iiii"](index,a1,a2,a3); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_v(index) { try { Module["dynCall_v"](index); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_vi(index,a1) { try { Module["dynCall_vi"](index,a1); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_vii(index,a1,a2) { try { Module["dynCall_vii"](index,a1,a2); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_viii(index,a1,a2,a3) { try { Module["dynCall_viii"](index,a1,a2,a3); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_viiii(index,a1,a2,a3,a4) { try { Module["dynCall_viiii"](index,a1,a2,a3,a4); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_viiiii(index,a1,a2,a3,a4,a5) { try { Module["dynCall_viiiii"](index,a1,a2,a3,a4,a5); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } function invoke_viiiiii(index,a1,a2,a3,a4,a5,a6) { try { Module["dynCall_viiiiii"](index,a1,a2,a3,a4,a5,a6); } catch(e) { if (typeof e !== 'number' && e !== 'longjmp') throw e; Module["setThrew"](1, 0); } } Module.asmGlobalArg = { "Math": Math, "Int8Array": Int8Array, "Int16Array": Int16Array, "Int32Array": Int32Array, "Uint8Array": Uint8Array, "Uint16Array": Uint16Array, "Uint32Array": Uint32Array, "Float32Array": Float32Array, "Float64Array": Float64Array, "NaN": NaN, "Infinity": Infinity }; Module.asmLibraryArg = { "abort": abort, "assert": assert, "enlargeMemory": enlargeMemory, "getTotalMemory": getTotalMemory, "abortOnCannotGrowMemory": abortOnCannotGrowMemory, "abortStackOverflow": abortStackOverflow, "nullFunc_i": nullFunc_i, "nullFunc_ii": nullFunc_ii, "nullFunc_iii": nullFunc_iii, "nullFunc_iiii": nullFunc_iiii, "nullFunc_v": nullFunc_v, "nullFunc_vi": nullFunc_vi, "nullFunc_vii": nullFunc_vii, "nullFunc_viii": nullFunc_viii, "nullFunc_viiii": nullFunc_viiii, "nullFunc_viiiii": nullFunc_viiiii, "nullFunc_viiiiii": nullFunc_viiiiii, "invoke_i": invoke_i, "invoke_ii": invoke_ii, "invoke_iii": invoke_iii, "invoke_iiii": invoke_iiii, "invoke_v": invoke_v, "invoke_vi": invoke_vi, "invoke_vii": invoke_vii, "invoke_viii": invoke_viii, "invoke_viiii": invoke_viiii, "invoke_viiiii": invoke_viiiii, "invoke_viiiiii": invoke_viiiiii, "ClassHandle": ClassHandle, "ClassHandle_clone": ClassHandle_clone, "ClassHandle_delete": ClassHandle_delete, "ClassHandle_deleteLater": ClassHandle_deleteLater, "ClassHandle_isAliasOf": ClassHandle_isAliasOf, "ClassHandle_isDeleted": ClassHandle_isDeleted, "RegisteredClass": RegisteredClass, "RegisteredPointer": RegisteredPointer, "RegisteredPointer_deleteObject": RegisteredPointer_deleteObject, "RegisteredPointer_destructor": RegisteredPointer_destructor, "RegisteredPointer_fromWireType": RegisteredPointer_fromWireType, "RegisteredPointer_getPointee": RegisteredPointer_getPointee, "__ZSt18uncaught_exceptionv": __ZSt18uncaught_exceptionv, "___assert_fail": ___assert_fail, "___cxa_allocate_exception": ___cxa_allocate_exception, "___cxa_begin_catch": ___cxa_begin_catch, "___cxa_find_matching_catch": ___cxa_find_matching_catch, "___cxa_pure_virtual": ___cxa_pure_virtual, "___cxa_throw": ___cxa_throw, "___gxx_personality_v0": ___gxx_personality_v0, "___lock": ___lock, "___resumeException": ___resumeException, "___setErrNo": ___setErrNo, "___syscall140": ___syscall140, "___syscall146": ___syscall146, "___syscall54": ___syscall54, "___syscall6": ___syscall6, "___unlock": ___unlock, "__embind_register_bool": __embind_register_bool, "__embind_register_class": __embind_register_class, "__embind_register_class_constructor": __embind_register_class_constructor, "__embind_register_class_function": __embind_register_class_function, "__embind_register_emval": __embind_register_emval, "__embind_register_float": __embind_register_float, "__embind_register_integer": __embind_register_integer, "__embind_register_memory_view": __embind_register_memory_view, "__embind_register_std_string": __embind_register_std_string, "__embind_register_std_wstring": __embind_register_std_wstring, "__embind_register_void": __embind_register_void, "__emval_decref": __emval_decref, "__emval_register": __emval_register, "_abort": _abort, "_embind_repr": _embind_repr, "_emscripten_memcpy_big": _emscripten_memcpy_big, "_llvm_trap": _llvm_trap, "_pthread_getspecific": _pthread_getspecific, "_pthread_key_create": _pthread_key_create, "_pthread_once": _pthread_once, "_pthread_setspecific": _pthread_setspecific, "constNoSmartPtrRawPointerToWireType": constNoSmartPtrRawPointerToWireType, "count_emval_handles": count_emval_handles, "craftInvokerFunction": craftInvokerFunction, "createNamedFunction": createNamedFunction, "downcastPointer": downcastPointer, "embind__requireFunction": embind__requireFunction, "embind_init_charCodes": embind_init_charCodes, "ensureOverloadTable": ensureOverloadTable, "exposePublicSymbol": exposePublicSymbol, "extendError": extendError, "floatReadValueFromPointer": floatReadValueFromPointer, "flushPendingDeletes": flushPendingDeletes, "flush_NO_FILESYSTEM": flush_NO_FILESYSTEM, "genericPointerToWireType": genericPointerToWireType, "getBasestPointer": getBasestPointer, "getInheritedInstance": getInheritedInstance, "getInheritedInstanceCount": getInheritedInstanceCount, "getLiveInheritedInstances": getLiveInheritedInstances, "getShiftFromSize": getShiftFromSize, "getTypeName": getTypeName, "get_first_emval": get_first_emval, "heap32VectorToArray": heap32VectorToArray, "init_ClassHandle": init_ClassHandle, "init_RegisteredPointer": init_RegisteredPointer, "init_embind": init_embind, "init_emval": init_emval, "integerReadValueFromPointer": integerReadValueFromPointer, "makeClassHandle": makeClassHandle, "makeLegalFunctionName": makeLegalFunctionName, "new_": new_, "nonConstNoSmartPtrRawPointerToWireType": nonConstNoSmartPtrRawPointerToWireType, "readLatin1String": readLatin1String, "registerType": registerType, "replacePublicSymbol": replacePublicSymbol, "runDestructor": runDestructor, "runDestructors": runDestructors, "setDelayFunction": setDelayFunction, "shallowCopyInternalPointer": shallowCopyInternalPointer, "simpleReadValueFromPointer": simpleReadValueFromPointer, "throwBindingError": throwBindingError, "throwInstanceAlreadyDeleted": throwInstanceAlreadyDeleted, "throwInternalError": throwInternalError, "throwUnboundTypeError": throwUnboundTypeError, "upcastPointer": upcastPointer, "whenDependentTypesAreResolved": whenDependentTypesAreResolved, "DYNAMICTOP_PTR": DYNAMICTOP_PTR, "tempDoublePtr": tempDoublePtr, "ABORT": ABORT, "STACKTOP": STACKTOP, "STACK_MAX": STACK_MAX }; // EMSCRIPTEN_START_ASM var asm = (/** @suppress {uselessCode} */ function(global, env, buffer) { 'almost asm'; var HEAP8 = new global.Int8Array(buffer); var HEAP16 = new global.Int16Array(buffer); var HEAP32 = new global.Int32Array(buffer); var HEAPU8 = new global.Uint8Array(buffer); var HEAPU16 = new global.Uint16Array(buffer); var HEAPU32 = new global.Uint32Array(buffer); var HEAPF32 = new global.Float32Array(buffer); var HEAPF64 = new global.Float64Array(buffer); var DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0; var tempDoublePtr=env.tempDoublePtr|0; var ABORT=env.ABORT|0; var STACKTOP=env.STACKTOP|0; var STACK_MAX=env.STACK_MAX|0; var __THREW__ = 0; var threwValue = 0; var setjmpId = 0; var undef = 0; var nan = global.NaN, inf = global.Infinity; var tempInt = 0, tempBigInt = 0, tempBigIntS = 0, tempValue = 0, tempDouble = 0.0; var tempRet0 = 0; var Math_floor=global.Math.floor; var Math_abs=global.Math.abs; var Math_sqrt=global.Math.sqrt; var Math_pow=global.Math.pow; var Math_cos=global.Math.cos; var Math_sin=global.Math.sin; var Math_tan=global.Math.tan; var Math_acos=global.Math.acos; var Math_asin=global.Math.asin; var Math_atan=global.Math.atan; var Math_atan2=global.Math.atan2; var Math_exp=global.Math.exp; var Math_log=global.Math.log; var Math_ceil=global.Math.ceil; var Math_imul=global.Math.imul; var Math_min=global.Math.min; var Math_max=global.Math.max; var Math_clz32=global.Math.clz32; var abort=env.abort; var assert=env.assert; var enlargeMemory=env.enlargeMemory; var getTotalMemory=env.getTotalMemory; var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory; var abortStackOverflow=env.abortStackOverflow; var nullFunc_i=env.nullFunc_i; var nullFunc_ii=env.nullFunc_ii; var nullFunc_iii=env.nullFunc_iii; var nullFunc_iiii=env.nullFunc_iiii; var nullFunc_v=env.nullFunc_v; var nullFunc_vi=env.nullFunc_vi; var nullFunc_vii=env.nullFunc_vii; var nullFunc_viii=env.nullFunc_viii; var nullFunc_viiii=env.nullFunc_viiii; var nullFunc_viiiii=env.nullFunc_viiiii; var nullFunc_viiiiii=env.nullFunc_viiiiii; var invoke_i=env.invoke_i; var invoke_ii=env.invoke_ii; var invoke_iii=env.invoke_iii; var invoke_iiii=env.invoke_iiii; var invoke_v=env.invoke_v; var invoke_vi=env.invoke_vi; var invoke_vii=env.invoke_vii; var invoke_viii=env.invoke_viii; var invoke_viiii=env.invoke_viiii; var invoke_viiiii=env.invoke_viiiii; var invoke_viiiiii=env.invoke_viiiiii; var ClassHandle=env.ClassHandle; var ClassHandle_clone=env.ClassHandle_clone; var ClassHandle_delete=env.ClassHandle_delete; var ClassHandle_deleteLater=env.ClassHandle_deleteLater; var ClassHandle_isAliasOf=env.ClassHandle_isAliasOf; var ClassHandle_isDeleted=env.ClassHandle_isDeleted; var RegisteredClass=env.RegisteredClass; var RegisteredPointer=env.RegisteredPointer; var RegisteredPointer_deleteObject=env.RegisteredPointer_deleteObject; var RegisteredPointer_destructor=env.RegisteredPointer_destructor; var RegisteredPointer_fromWireType=env.RegisteredPointer_fromWireType; var RegisteredPointer_getPointee=env.RegisteredPointer_getPointee; var __ZSt18uncaught_exceptionv=env.__ZSt18uncaught_exceptionv; var ___assert_fail=env.___assert_fail; var ___cxa_allocate_exception=env.___cxa_allocate_exception; var ___cxa_begin_catch=env.___cxa_begin_catch; var ___cxa_find_matching_catch=env.___cxa_find_matching_catch; var ___cxa_pure_virtual=env.___cxa_pure_virtual; var ___cxa_throw=env.___cxa_throw; var ___gxx_personality_v0=env.___gxx_personality_v0; var ___lock=env.___lock; var ___resumeException=env.___resumeException; var ___setErrNo=env.___setErrNo; var ___syscall140=env.___syscall140; var ___syscall146=env.___syscall146; var ___syscall54=env.___syscall54; var ___syscall6=env.___syscall6; var ___unlock=env.___unlock; var __embind_register_bool=env.__embind_register_bool; var __embind_register_class=env.__embind_register_class; var __embind_register_class_constructor=env.__embind_register_class_constructor; var __embind_register_class_function=env.__embind_register_class_function; var __embind_register_emval=env.__embind_register_emval; var __embind_register_float=env.__embind_register_float; var __embind_register_integer=env.__embind_register_integer; var __embind_register_memory_view=env.__embind_register_memory_view; var __embind_register_std_string=env.__embind_register_std_string; var __embind_register_std_wstring=env.__embind_register_std_wstring; var __embind_register_void=env.__embind_register_void; var __emval_decref=env.__emval_decref; var __emval_register=env.__emval_register; var _abort=env._abort; var _embind_repr=env._embind_repr; var _emscripten_memcpy_big=env._emscripten_memcpy_big; var _llvm_trap=env._llvm_trap; var _pthread_getspecific=env._pthread_getspecific; var _pthread_key_create=env._pthread_key_create; var _pthread_once=env._pthread_once; var _pthread_setspecific=env._pthread_setspecific; var constNoSmartPtrRawPointerToWireType=env.constNoSmartPtrRawPointerToWireType; var count_emval_handles=env.count_emval_handles; var craftInvokerFunction=env.craftInvokerFunction; var createNamedFunction=env.createNamedFunction; var downcastPointer=env.downcastPointer; var embind__requireFunction=env.embind__requireFunction; var embind_init_charCodes=env.embind_init_charCodes; var ensureOverloadTable=env.ensureOverloadTable; var exposePublicSymbol=env.exposePublicSymbol; var extendError=env.extendError; var floatReadValueFromPointer=env.floatReadValueFromPointer; var flushPendingDeletes=env.flushPendingDeletes; var flush_NO_FILESYSTEM=env.flush_NO_FILESYSTEM; var genericPointerToWireType=env.genericPointerToWireType; var getBasestPointer=env.getBasestPointer; var getInheritedInstance=env.getInheritedInstance; var getInheritedInstanceCount=env.getInheritedInstanceCount; var getLiveInheritedInstances=env.getLiveInheritedInstances; var getShiftFromSize=env.getShiftFromSize; var getTypeName=env.getTypeName; var get_first_emval=env.get_first_emval; var heap32VectorToArray=env.heap32VectorToArray; var init_ClassHandle=env.init_ClassHandle; var init_RegisteredPointer=env.init_RegisteredPointer; var init_embind=env.init_embind; var init_emval=env.init_emval; var integerReadValueFromPointer=env.integerReadValueFromPointer; var makeClassHandle=env.makeClassHandle; var makeLegalFunctionName=env.makeLegalFunctionName; var new_=env.new_; var nonConstNoSmartPtrRawPointerToWireType=env.nonConstNoSmartPtrRawPointerToWireType; var readLatin1String=env.readLatin1String; var registerType=env.registerType; var replacePublicSymbol=env.replacePublicSymbol; var runDestructor=env.runDestructor; var runDestructors=env.runDestructors; var setDelayFunction=env.setDelayFunction; var shallowCopyInternalPointer=env.shallowCopyInternalPointer; var simpleReadValueFromPointer=env.simpleReadValueFromPointer; var throwBindingError=env.throwBindingError; var throwInstanceAlreadyDeleted=env.throwInstanceAlreadyDeleted; var throwInternalError=env.throwInternalError; var throwUnboundTypeError=env.throwUnboundTypeError; var upcastPointer=env.upcastPointer; var whenDependentTypesAreResolved=env.whenDependentTypesAreResolved; var tempFloat = 0.0; // EMSCRIPTEN_START_FUNCS function stackAlloc(size) { size = size|0; var ret = 0; ret = STACKTOP; STACKTOP = (STACKTOP + size)|0; STACKTOP = (STACKTOP + 15)&-16; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(size|0); return ret|0; } function stackSave() { return STACKTOP|0; } function stackRestore(top) { top = top|0; STACKTOP = top; } function establishStackSpace(stackBase, stackMax) { stackBase = stackBase|0; stackMax = stackMax|0; STACKTOP = stackBase; STACK_MAX = stackMax; } function setThrew(threw, value) { threw = threw|0; value = value|0; if ((__THREW__|0) == 0) { __THREW__ = threw; threwValue = value; } } function setTempRet0(value) { value = value|0; tempRet0 = value; } function getTempRet0() { return tempRet0|0; } function ___cxx_global_var_init() { var label = 0, sp = 0; sp = STACKTOP; __ZN38EmscriptenBindingInitializer_my_moduleC2Ev(21880); return; } function __ZN38EmscriptenBindingInitializer_my_moduleC2Ev($0) { $0 = $0|0; var $$field = 0, $$field11 = 0, $$field14 = 0, $$field21 = 0, $$field24 = 0, $$field31 = 0, $$field34 = 0, $$field4 = 0, $$field41 = 0, $$field44 = 0, $$field51 = 0, $$field54 = 0, $$field61 = 0, $$field64 = 0, $$field71 = 0, $$field74 = 0, $$index1 = 0, $$index13 = 0, $$index17 = 0, $$index19 = 0; var $$index23 = 0, $$index27 = 0, $$index29 = 0, $$index3 = 0, $$index33 = 0, $$index37 = 0, $$index39 = 0, $$index43 = 0, $$index47 = 0, $$index49 = 0, $$index53 = 0, $$index57 = 0, $$index59 = 0, $$index63 = 0, $$index67 = 0, $$index69 = 0, $$index7 = 0, $$index73 = 0, $$index77 = 0, $$index9 = 0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0; var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0; var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0; var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0; var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0; var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0; var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0; var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0; var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0; var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0; var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 496|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(496|0); $4 = sp + 448|0; $6 = sp + 481|0; $7 = sp + 72|0; $11 = sp + 424|0; $13 = sp + 480|0; $14 = sp + 64|0; $18 = sp + 400|0; $20 = sp + 479|0; $21 = sp + 56|0; $25 = sp + 376|0; $27 = sp + 478|0; $28 = sp + 48|0; $32 = sp + 352|0; $34 = sp + 477|0; $35 = sp + 40|0; $36 = sp + 32|0; $40 = sp + 476|0; $56 = sp + 264|0; $58 = sp + 475|0; $59 = sp + 24|0; $63 = sp + 240|0; $65 = sp + 474|0; $66 = sp + 16|0; $70 = sp + 216|0; $72 = sp + 473|0; $73 = sp + 8|0; $74 = sp; $78 = sp + 472|0; $92 = sp + 471|0; $93 = sp + 470|0; $94 = sp + 136|0; $95 = sp + 128|0; $96 = sp + 120|0; $97 = sp + 469|0; $98 = sp + 468|0; $99 = sp + 112|0; $100 = sp + 104|0; $101 = sp + 96|0; $102 = sp + 88|0; $103 = sp + 80|0; $91 = $0; $85 = $92; $86 = 3768; __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv(); $87 = 234; $104 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv()|0); $88 = $104; $105 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv()|0); $89 = $105; $90 = 235; $106 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); $107 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv()|0); $108 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv()|0); $109 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0); $110 = $87; $84 = $110; $111 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); $112 = $87; $113 = $88; $83 = $113; $114 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); $115 = $88; $116 = $89; $82 = $116; $117 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); $118 = $89; $119 = $86; $120 = $90; $81 = $120; $121 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0); $122 = $90; __embind_register_class(($106|0),($107|0),($108|0),($109|0),($111|0),($112|0),($114|0),($115|0),($117|0),($118|0),($119|0),($121|0),($122|0)); $80 = $92; $123 = $80; $76 = $123; $77 = 236; $124 = $76; $79 = 237; $125 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); $126 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($78)|0); $127 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($78)|0); $128 = $79; $75 = $128; $129 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); $130 = $79; $131 = $77; __embind_register_class_constructor(($125|0),($126|0),($127|0),($129|0),($130|0),($131|0)); HEAP32[$94>>2] = (238); $$index1 = ((($94)) + 4|0); HEAP32[$$index1>>2] = 0; ;HEAP8[$73>>0]=HEAP8[$93>>0]|0; ;HEAP8[$74>>0]=HEAP8[$94>>0]|0;HEAP8[$74+1>>0]=HEAP8[$94+1>>0]|0;HEAP8[$74+2>>0]=HEAP8[$94+2>>0]|0;HEAP8[$74+3>>0]=HEAP8[$94+3>>0]|0;HEAP8[$74+4>>0]=HEAP8[$94+4>>0]|0;HEAP8[$74+5>>0]=HEAP8[$94+5>>0]|0;HEAP8[$74+6>>0]=HEAP8[$94+6>>0]|0;HEAP8[$74+7>>0]=HEAP8[$94+7>>0]|0; $$field = HEAP32[$74>>2]|0; $$index3 = ((($74)) + 4|0); $$field4 = HEAP32[$$index3>>2]|0; $68 = $124; $69 = 3775; HEAP32[$70>>2] = $$field; $$index7 = ((($70)) + 4|0); HEAP32[$$index7>>2] = $$field4; $132 = $68; $71 = 239; $133 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); $134 = $69; $135 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($72)|0); $136 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($72)|0); $137 = $71; $67 = $137; $138 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0); $139 = $71; $140 = (__ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($70)|0); __embind_register_class_function(($133|0),($134|0),($135|0),($136|0),($138|0),($139|0),($140|0),0); HEAP32[$95>>2] = (240); $$index9 = ((($95)) + 4|0); HEAP32[$$index9>>2] = 0; ;HEAP8[$66>>0]=HEAP8[$95>>0]|0;HEAP8[$66+1>>0]=HEAP8[$95+1>>0]|0;HEAP8[$66+2>>0]=HEAP8[$95+2>>0]|0;HEAP8[$66+3>>0]=HEAP8[$95+3>>0]|0;HEAP8[$66+4>>0]=HEAP8[$95+4>>0]|0;HEAP8[$66+5>>0]=HEAP8[$95+5>>0]|0;HEAP8[$66+6>>0]=HEAP8[$95+6>>0]|0;HEAP8[$66+7>>0]=HEAP8[$95+7>>0]|0; $$field11 = HEAP32[$66>>2]|0; $$index13 = ((($66)) + 4|0); $$field14 = HEAP32[$$index13>>2]|0; $61 = $132; $62 = 3780; HEAP32[$63>>2] = $$field11; $$index17 = ((($63)) + 4|0); HEAP32[$$index17>>2] = $$field14; $141 = $61; $64 = 241; $142 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); $143 = $62; $144 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($65)|0); $145 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($65)|0); $146 = $64; $60 = $146; $147 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); $148 = $64; $149 = (__ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($63)|0); __embind_register_class_function(($142|0),($143|0),($144|0),($145|0),($147|0),($148|0),($149|0),0); HEAP32[$96>>2] = (242); $$index19 = ((($96)) + 4|0); HEAP32[$$index19>>2] = 0; ;HEAP8[$59>>0]=HEAP8[$96>>0]|0;HEAP8[$59+1>>0]=HEAP8[$96+1>>0]|0;HEAP8[$59+2>>0]=HEAP8[$96+2>>0]|0;HEAP8[$59+3>>0]=HEAP8[$96+3>>0]|0;HEAP8[$59+4>>0]=HEAP8[$96+4>>0]|0;HEAP8[$59+5>>0]=HEAP8[$96+5>>0]|0;HEAP8[$59+6>>0]=HEAP8[$96+6>>0]|0;HEAP8[$59+7>>0]=HEAP8[$96+7>>0]|0; $$field21 = HEAP32[$59>>2]|0; $$index23 = ((($59)) + 4|0); $$field24 = HEAP32[$$index23>>2]|0; $54 = $141; $55 = 3789; HEAP32[$56>>2] = $$field21; $$index27 = ((($56)) + 4|0); HEAP32[$$index27>>2] = $$field24; $57 = 243; $150 = (__ZN10emscripten8internal6TypeIDI6LASZipE3getEv()|0); $151 = $55; $152 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($58)|0); $153 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($58)|0); $154 = $57; $53 = $154; $155 = (__ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv()|0); $156 = $57; $157 = (__ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($56)|0); __embind_register_class_function(($150|0),($151|0),($152|0),($153|0),($155|0),($156|0),($157|0),0); $47 = $97; $48 = 3798; __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv(); $49 = 244; $158 = (__ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv()|0); $50 = $158; $159 = (__ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv()|0); $51 = $159; $52 = 245; $160 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); $161 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv()|0); $162 = (__ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv()|0); $163 = (__ZN10emscripten8internal11NoBaseClass3getEv()|0); $164 = $49; $46 = $164; $165 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); $166 = $49; $167 = $50; $45 = $167; $168 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); $169 = $50; $170 = $51; $44 = $170; $171 = (__ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv()|0); $172 = $51; $173 = $48; $174 = $52; $43 = $174; $175 = (__ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv()|0); $176 = $52; __embind_register_class(($160|0),($161|0),($162|0),($163|0),($165|0),($166|0),($168|0),($169|0),($171|0),($172|0),($173|0),($175|0),($176|0)); $42 = $97; $177 = $42; $38 = $177; $39 = 246; $178 = $38; $41 = 247; $179 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); $180 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($40)|0); $181 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($40)|0); $182 = $41; $37 = $182; $183 = (__ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv()|0); $184 = $41; $185 = $39; __embind_register_class_constructor(($179|0),($180|0),($181|0),($183|0),($184|0),($185|0)); HEAP32[$99>>2] = (248); $$index29 = ((($99)) + 4|0); HEAP32[$$index29>>2] = 0; ;HEAP8[$35>>0]=HEAP8[$98>>0]|0; ;HEAP8[$36>>0]=HEAP8[$99>>0]|0;HEAP8[$36+1>>0]=HEAP8[$99+1>>0]|0;HEAP8[$36+2>>0]=HEAP8[$99+2>>0]|0;HEAP8[$36+3>>0]=HEAP8[$99+3>>0]|0;HEAP8[$36+4>>0]=HEAP8[$99+4>>0]|0;HEAP8[$36+5>>0]=HEAP8[$99+5>>0]|0;HEAP8[$36+6>>0]=HEAP8[$99+6>>0]|0;HEAP8[$36+7>>0]=HEAP8[$99+7>>0]|0; $$field31 = HEAP32[$36>>2]|0; $$index33 = ((($36)) + 4|0); $$field34 = HEAP32[$$index33>>2]|0; $30 = $178; $31 = 3775; HEAP32[$32>>2] = $$field31; $$index37 = ((($32)) + 4|0); HEAP32[$$index37>>2] = $$field34; $186 = $30; $33 = 249; $187 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); $188 = $31; $189 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($34)|0); $190 = (__ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($34)|0); $191 = $33; $29 = $191; $192 = (__ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv()|0); $193 = $33; $194 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($32)|0); __embind_register_class_function(($187|0),($188|0),($189|0),($190|0),($192|0),($193|0),($194|0),0); HEAP32[$100>>2] = (250); $$index39 = ((($100)) + 4|0); HEAP32[$$index39>>2] = 0; ;HEAP8[$28>>0]=HEAP8[$100>>0]|0;HEAP8[$28+1>>0]=HEAP8[$100+1>>0]|0;HEAP8[$28+2>>0]=HEAP8[$100+2>>0]|0;HEAP8[$28+3>>0]=HEAP8[$100+3>>0]|0;HEAP8[$28+4>>0]=HEAP8[$100+4>>0]|0;HEAP8[$28+5>>0]=HEAP8[$100+5>>0]|0;HEAP8[$28+6>>0]=HEAP8[$100+6>>0]|0;HEAP8[$28+7>>0]=HEAP8[$100+7>>0]|0; $$field41 = HEAP32[$28>>2]|0; $$index43 = ((($28)) + 4|0); $$field44 = HEAP32[$$index43>>2]|0; $23 = $186; $24 = 3812; HEAP32[$25>>2] = $$field41; $$index47 = ((($25)) + 4|0); HEAP32[$$index47>>2] = $$field44; $195 = $23; $26 = 251; $196 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); $197 = $24; $198 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($27)|0); $199 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($27)|0); $200 = $26; $22 = $200; $201 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); $202 = $26; $203 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($25)|0); __embind_register_class_function(($196|0),($197|0),($198|0),($199|0),($201|0),($202|0),($203|0),0); HEAP32[$101>>2] = (252); $$index49 = ((($101)) + 4|0); HEAP32[$$index49>>2] = 0; ;HEAP8[$21>>0]=HEAP8[$101>>0]|0;HEAP8[$21+1>>0]=HEAP8[$101+1>>0]|0;HEAP8[$21+2>>0]=HEAP8[$101+2>>0]|0;HEAP8[$21+3>>0]=HEAP8[$101+3>>0]|0;HEAP8[$21+4>>0]=HEAP8[$101+4>>0]|0;HEAP8[$21+5>>0]=HEAP8[$101+5>>0]|0;HEAP8[$21+6>>0]=HEAP8[$101+6>>0]|0;HEAP8[$21+7>>0]=HEAP8[$101+7>>0]|0; $$field51 = HEAP32[$21>>2]|0; $$index53 = ((($21)) + 4|0); $$field54 = HEAP32[$$index53>>2]|0; $16 = $195; $17 = 3829; HEAP32[$18>>2] = $$field51; $$index57 = ((($18)) + 4|0); HEAP32[$$index57>>2] = $$field54; $204 = $16; $19 = 251; $205 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); $206 = $17; $207 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($20)|0); $208 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($20)|0); $209 = $19; $15 = $209; $210 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); $211 = $19; $212 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($18)|0); __embind_register_class_function(($205|0),($206|0),($207|0),($208|0),($210|0),($211|0),($212|0),0); HEAP32[$102>>2] = (253); $$index59 = ((($102)) + 4|0); HEAP32[$$index59>>2] = 0; ;HEAP8[$14>>0]=HEAP8[$102>>0]|0;HEAP8[$14+1>>0]=HEAP8[$102+1>>0]|0;HEAP8[$14+2>>0]=HEAP8[$102+2>>0]|0;HEAP8[$14+3>>0]=HEAP8[$102+3>>0]|0;HEAP8[$14+4>>0]=HEAP8[$102+4>>0]|0;HEAP8[$14+5>>0]=HEAP8[$102+5>>0]|0;HEAP8[$14+6>>0]=HEAP8[$102+6>>0]|0;HEAP8[$14+7>>0]=HEAP8[$102+7>>0]|0; $$field61 = HEAP32[$14>>2]|0; $$index63 = ((($14)) + 4|0); $$field64 = HEAP32[$$index63>>2]|0; $9 = $204; $10 = 3844; HEAP32[$11>>2] = $$field61; $$index67 = ((($11)) + 4|0); HEAP32[$$index67>>2] = $$field64; $213 = $9; $12 = 251; $214 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); $215 = $10; $216 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($13)|0); $217 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($13)|0); $218 = $12; $8 = $218; $219 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); $220 = $12; $221 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($11)|0); __embind_register_class_function(($214|0),($215|0),($216|0),($217|0),($219|0),($220|0),($221|0),0); HEAP32[$103>>2] = (254); $$index69 = ((($103)) + 4|0); HEAP32[$$index69>>2] = 0; ;HEAP8[$7>>0]=HEAP8[$103>>0]|0;HEAP8[$7+1>>0]=HEAP8[$103+1>>0]|0;HEAP8[$7+2>>0]=HEAP8[$103+2>>0]|0;HEAP8[$7+3>>0]=HEAP8[$103+3>>0]|0;HEAP8[$7+4>>0]=HEAP8[$103+4>>0]|0;HEAP8[$7+5>>0]=HEAP8[$103+5>>0]|0;HEAP8[$7+6>>0]=HEAP8[$103+6>>0]|0;HEAP8[$7+7>>0]=HEAP8[$103+7>>0]|0; $$field71 = HEAP32[$7>>2]|0; $$index73 = ((($7)) + 4|0); $$field74 = HEAP32[$$index73>>2]|0; $2 = $213; $3 = 3780; HEAP32[$4>>2] = $$field71; $$index77 = ((($4)) + 4|0); HEAP32[$$index77>>2] = $$field74; $5 = 255; $222 = (__ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv()|0); $223 = $3; $224 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($6)|0); $225 = (__ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($6)|0); $226 = $5; $1 = $226; $227 = (__ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv()|0); $228 = $5; $229 = (__ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($4)|0); __embind_register_class_function(($222|0),($223|0),($224|0),($225|0),($227|0),($228|0),($229|0),0); STACKTOP = sp;return; } function __ZN6LASZip4openEjj($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0; var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0; var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0; var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0; var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0; var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); $$byval_copy1 = sp + 180|0; $$byval_copy = sp + 176|0; $8 = sp + 152|0; $14 = sp + 128|0; $19 = sp + 104|0; $20 = sp + 100|0; $27 = sp + 72|0; $33 = sp + 48|0; $38 = sp + 24|0; $39 = sp + 16|0; $40 = $0; $41 = $1; $42 = $2; $44 = $40; $45 = $41; $46 = $45; $43 = $46; $47 = (__Znwj(20)|0); $48 = $43; $49 = $42; __ZN6laszip7streams13memory_streamC2EPKci($47,$48,$49); $36 = $44; $37 = $47; $50 = $36; $51 = $37; ;HEAP32[$39>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$39>>2]|0; __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($38,$51,$$byval_copy); $34 = $38; $35 = $50; $52 = $34; $53 = $35; $31 = $52; $32 = $53; $54 = $31; $30 = $54; $55 = $30; $56 = HEAP32[$55>>2]|0; HEAP32[$33>>2] = $56; $57 = $32; $28 = $57; $58 = $28; $59 = HEAP32[$58>>2]|0; $60 = $31; HEAP32[$60>>2] = $59; $29 = $33; $61 = $29; $62 = HEAP32[$61>>2]|0; $63 = $32; HEAP32[$63>>2] = $62; $64 = ((($52)) + 4|0); $65 = $35; $66 = ((($65)) + 4|0); $25 = $64; $26 = $66; $67 = $25; $24 = $67; $68 = $24; $69 = HEAP32[$68>>2]|0; HEAP32[$27>>2] = $69; $70 = $26; $22 = $70; $71 = $22; $72 = HEAP32[$71>>2]|0; $73 = $25; HEAP32[$73>>2] = $72; $23 = $27; $74 = $23; $75 = HEAP32[$74>>2]|0; $76 = $26; HEAP32[$76>>2] = $75; __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($38); $77 = ((($44)) + 8|0); $78 = (__Znwj(352)|0); $21 = $44; $79 = $21; $80 = HEAP32[$79>>2]|0; __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($78,$80); $17 = $77; $18 = $78; $81 = $17; $82 = $18; ;HEAP32[$20>>2]=0|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$20>>2]|0; __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($19,$82,$$byval_copy1); $15 = $19; $16 = $81; $83 = $15; $84 = $16; $12 = $83; $13 = $84; $85 = $12; $11 = $85; $86 = $11; $87 = HEAP32[$86>>2]|0; HEAP32[$14>>2] = $87; $88 = $13; $9 = $88; $89 = $9; $90 = HEAP32[$89>>2]|0; $91 = $12; HEAP32[$91>>2] = $90; $10 = $14; $92 = $10; $93 = HEAP32[$92>>2]|0; $94 = $13; HEAP32[$94>>2] = $93; $95 = ((($83)) + 4|0); $96 = $16; $97 = ((($96)) + 4|0); $6 = $95; $7 = $97; $98 = $6; $5 = $98; $99 = $5; $100 = HEAP32[$99>>2]|0; HEAP32[$8>>2] = $100; $101 = $7; $3 = $101; $102 = $3; $103 = HEAP32[$102>>2]|0; $104 = $6; HEAP32[$104>>2] = $103; $4 = $8; $105 = $4; $106 = HEAP32[$105>>2]|0; $107 = $7; HEAP32[$107>>2] = $106; __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($19); STACKTOP = sp;return; } function __ZN6LASZip8getPointEi($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $6 = $3; $7 = $4; $8 = $7; $5 = $8; $9 = ((($6)) + 8|0); $2 = $9; $10 = $2; $11 = HEAP32[$10>>2]|0; $12 = $5; __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($11,$12); STACKTOP = sp;return; } function __ZN6LASZip8getCountEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $2; $4 = ((($3)) + 8|0); $1 = $4; $5 = $1; $6 = HEAP32[$5>>2]|0; $7 = (__ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($6)|0); $8 = ((($7)) + 107|0); $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8)|(HEAPU8[$8+2>>0]<<16)|(HEAPU8[$8+3>>0]<<24); STACKTOP = sp;return ($9|0); } function __ZN13DynamicLASZip4openEjj($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; var $170 = 0, $171 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0; var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0; var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0; var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0; var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); $$byval_copy1 = sp + 280|0; $$byval_copy = sp + 276|0; $8 = sp + 252|0; $14 = sp + 228|0; $22 = sp + 192|0; $29 = sp + 160|0; $35 = sp + 136|0; $40 = sp + 112|0; $41 = sp + 108|0; $48 = sp + 80|0; $54 = sp + 56|0; $59 = sp + 32|0; $60 = sp + 24|0; $65 = sp; $61 = $0; $62 = $1; $63 = $2; $66 = $61; $67 = $62; $68 = $67; $64 = $68; $69 = (__Znwj(12)|0); $70 = $64; $71 = $63; __ZN10buf_streamC2EPhj($69,$70,$71); $57 = $66; $58 = $69; $72 = $57; $73 = $58; ;HEAP32[$60>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$60>>2]|0; __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($59,$73,$$byval_copy); $55 = $59; $56 = $72; $74 = $55; $75 = $56; $52 = $74; $53 = $75; $76 = $52; $51 = $76; $77 = $51; $78 = HEAP32[$77>>2]|0; HEAP32[$54>>2] = $78; $79 = $53; $49 = $79; $80 = $49; $81 = HEAP32[$80>>2]|0; $82 = $52; HEAP32[$82>>2] = $81; $50 = $54; $83 = $50; $84 = HEAP32[$83>>2]|0; $85 = $53; HEAP32[$85>>2] = $84; $86 = ((($74)) + 4|0); $87 = $56; $88 = ((($87)) + 4|0); $46 = $86; $47 = $88; $89 = $46; $45 = $89; $90 = $45; $91 = HEAP32[$90>>2]|0; HEAP32[$48>>2] = $91; $92 = $47; $43 = $92; $93 = $43; $94 = HEAP32[$93>>2]|0; $95 = $46; HEAP32[$95>>2] = $94; $44 = $48; $96 = $44; $97 = HEAP32[$96>>2]|0; $98 = $47; HEAP32[$98>>2] = $97; __ZNSt3__210shared_ptrI10buf_streamED2Ev($59); $99 = ((($66)) + 8|0); $100 = (__Znwj(12)|0); $42 = $66; $101 = $42; $102 = HEAP32[$101>>2]|0; __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($100,$102); $38 = $99; $39 = $100; $103 = $38; $104 = $39; ;HEAP32[$41>>2]=0|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$41>>2]|0; __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($40,$104,$$byval_copy1); $36 = $40; $37 = $103; $105 = $36; $106 = $37; $33 = $105; $34 = $106; $107 = $33; $32 = $107; $108 = $32; $109 = HEAP32[$108>>2]|0; HEAP32[$35>>2] = $109; $110 = $34; $30 = $110; $111 = $30; $112 = HEAP32[$111>>2]|0; $113 = $33; HEAP32[$113>>2] = $112; $31 = $35; $114 = $31; $115 = HEAP32[$114>>2]|0; $116 = $34; HEAP32[$116>>2] = $115; $117 = ((($105)) + 4|0); $118 = $37; $119 = ((($118)) + 4|0); $27 = $117; $28 = $119; $120 = $27; $26 = $120; $121 = $26; $122 = HEAP32[$121>>2]|0; HEAP32[$29>>2] = $122; $123 = $28; $24 = $123; $124 = $24; $125 = HEAP32[$124>>2]|0; $126 = $27; HEAP32[$126>>2] = $125; $25 = $29; $127 = $25; $128 = HEAP32[$127>>2]|0; $129 = $28; HEAP32[$129>>2] = $128; __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($40); $130 = ((($66)) + 8|0); $23 = $130; $131 = $23; $132 = HEAP32[$131>>2]|0; __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($65,$132); $133 = ((($66)) + 16|0); $20 = $133; $21 = $65; $134 = $20; $135 = $21; $19 = $135; $136 = $19; $17 = $22; $18 = $136; $137 = $17; $138 = $18; $139 = HEAP32[$138>>2]|0; HEAP32[$137>>2] = $139; $140 = ((($137)) + 4|0); $141 = $18; $142 = ((($141)) + 4|0); $143 = HEAP32[$142>>2]|0; HEAP32[$140>>2] = $143; $144 = $18; HEAP32[$144>>2] = 0; $145 = $18; $146 = ((($145)) + 4|0); HEAP32[$146>>2] = 0; $15 = $22; $16 = $134; $147 = $15; $148 = $16; $12 = $147; $13 = $148; $149 = $12; $11 = $149; $150 = $11; $151 = HEAP32[$150>>2]|0; HEAP32[$14>>2] = $151; $152 = $13; $9 = $152; $153 = $9; $154 = HEAP32[$153>>2]|0; $155 = $12; HEAP32[$155>>2] = $154; $10 = $14; $156 = $10; $157 = HEAP32[$156>>2]|0; $158 = $13; HEAP32[$158>>2] = $157; $159 = ((($147)) + 4|0); $160 = $16; $161 = ((($160)) + 4|0); $6 = $159; $7 = $161; $162 = $6; $5 = $162; $163 = $5; $164 = HEAP32[$163>>2]|0; HEAP32[$8>>2] = $164; $165 = $7; $3 = $165; $166 = $3; $167 = HEAP32[$166>>2]|0; $168 = $6; HEAP32[$168>>2] = $167; $4 = $8; $169 = $4; $170 = HEAP32[$169>>2]|0; $171 = $7; HEAP32[$171>>2] = $170; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($22); __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($65); STACKTOP = sp;return; } function __ZN13DynamicLASZip16addFieldFloatingEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $7 = $0; $8 = $1; $9 = $7; $10 = ((($9)) + 16|0); $6 = $10; $11 = $6; $5 = $11; $12 = $5; $13 = HEAP32[$12>>2]|0; $14 = ($13|0)!=(0|0); if (!($14)) { STACKTOP = sp;return; } $15 = $8; switch ($15|0) { case 4: { $16 = ((($9)) + 16|0); $4 = $16; $17 = $4; $18 = HEAP32[$17>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($18); STACKTOP = sp;return; break; } case 8: { $19 = ((($9)) + 16|0); $2 = $19; $20 = $2; $21 = HEAP32[$20>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($21); $22 = ((($9)) + 16|0); $3 = $22; $23 = $3; $24 = HEAP32[$23>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($24); STACKTOP = sp;return; break; } default: { STACKTOP = sp;return; } } } function __ZN13DynamicLASZip14addFieldSignedEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $8 = $0; $9 = $1; $10 = $8; $11 = ((($10)) + 16|0); $7 = $11; $12 = $7; $6 = $12; $13 = $6; $14 = HEAP32[$13>>2]|0; $15 = ($14|0)!=(0|0); if (!($15)) { STACKTOP = sp;return; } $16 = $9; switch ($16|0) { case 1: { $17 = ((($10)) + 16|0); $5 = $17; $18 = $5; $19 = HEAP32[$18>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($19); STACKTOP = sp;return; break; } case 2: { $20 = ((($10)) + 16|0); $3 = $20; $21 = $3; $22 = HEAP32[$21>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($22); STACKTOP = sp;return; break; } case 8: { $23 = ((($10)) + 16|0); $2 = $23; $24 = $2; $25 = HEAP32[$24>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($25); break; } case 4: { break; } default: { STACKTOP = sp;return; } } $26 = ((($10)) + 16|0); $4 = $26; $27 = $4; $28 = HEAP32[$27>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($28); STACKTOP = sp;return; } function __ZN13DynamicLASZip16addFieldUnsignedEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $8 = $0; $9 = $1; $10 = $8; $11 = ((($10)) + 16|0); $7 = $11; $12 = $7; $6 = $12; $13 = $6; $14 = HEAP32[$13>>2]|0; $15 = ($14|0)!=(0|0); if (!($15)) { STACKTOP = sp;return; } $16 = $9; switch ($16|0) { case 1: { $17 = ((($10)) + 16|0); $5 = $17; $18 = $5; $19 = HEAP32[$18>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($19); STACKTOP = sp;return; break; } case 2: { $20 = ((($10)) + 16|0); $3 = $20; $21 = $3; $22 = HEAP32[$21>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($22); STACKTOP = sp;return; break; } case 8: { $23 = ((($10)) + 16|0); $2 = $23; $24 = $2; $25 = HEAP32[$24>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($25); break; } case 4: { break; } default: { STACKTOP = sp;return; } } $26 = ((($10)) + 16|0); $4 = $26; $27 = $4; $28 = HEAP32[$27>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($28); STACKTOP = sp;return; } function __ZN13DynamicLASZip8getPointEi($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $5 = $0; $6 = $1; $8 = $5; $9 = $6; $10 = $9; $7 = $10; $11 = ((($8)) + 16|0); $4 = $11; $12 = $4; $3 = $12; $13 = $3; $14 = HEAP32[$13>>2]|0; $15 = ($14|0)!=(0|0); if (!($15)) { STACKTOP = sp;return; } $16 = ((($8)) + 16|0); $2 = $16; $17 = $2; $18 = HEAP32[$17>>2]|0; $19 = HEAP32[$18>>2]|0; $20 = HEAP32[$19>>2]|0; $21 = $7; (FUNCTION_TABLE_iii[$20 & 255]($18,$21)|0); STACKTOP = sp;return; } function __ZN6laszip7streams13memory_streamC2EPKci($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; HEAP32[$6>>2] = $7; $8 = ((($6)) + 4|0); $9 = $5; HEAP32[$8>>2] = $9; $10 = ((($6)) + 8|0); HEAP32[$10>>2] = 0; $11 = ((($6)) + 12|0); HEAP8[$11>>0] = 0; $12 = ((($6)) + 13|0); HEAP8[$12>>0] = 0; $13 = ((($6)) + 16|0); HEAP32[$13>>2] = 0; STACKTOP = sp;return; } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEEC2ERS4_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 12|0; $16 = $0; $17 = $1; $18 = $16; $19 = $17; HEAP32[$18>>2] = $19; $20 = ((($18)) + 4|0); $21 = HEAP32[$18>>2]|0; __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($20,$21); $22 = ((($18)) + 247|0); __ZN6laszip2io7laz_vlrC2Ev($22); $23 = ((($18)) + 288|0); $15 = $23; $24 = $15; $13 = $24; $25 = $13; $12 = $25; HEAP32[$25>>2] = 0; $26 = ((($25)) + 4|0); HEAP32[$26>>2] = 0; $27 = ((($25)) + 8|0); HEAP32[$14>>2] = 0; $10 = $27; $11 = $14; $28 = $10; $29 = $11; $9 = $29; $30 = $9; $5 = $28; $6 = $30; $31 = $5; $32 = $6; $4 = $32; HEAP32[$31>>2] = 0; $8 = $28; $33 = $8; $7 = $33; $34 = ((($18)) + 300|0); __ZN6laszip7factory13record_schemaC2Ev($34); $35 = ((($18)) + 312|0); $3 = $35; $36 = $3; HEAP32[$36>>2] = 0; $37 = ((($36)) + 4|0); HEAP32[$37>>2] = 0; $38 = ((($18)) + 320|0); $2 = $38; $39 = $2; HEAP32[$39>>2] = 0; $40 = ((($39)) + 4|0); HEAP32[$40>>2] = 0; $41 = ((($18)) + 328|0); __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($41); __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($18); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEEC2IS3_EEPT_NS_9enable_ifIXsr14is_convertibleIS7_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0; var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0; var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0; var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0; var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0; var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (1584); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } __ZdlPv($133); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function ___clang_call_terminate($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; (___cxa_begin_catch(($0|0))|0); __ZSt9terminatev(); // unreachable; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { __ZdlPv($28); } $30 = ((($16)) + 12|0); $10 = $30; $31 = $10; $9 = $31; $32 = $9; $12 = $32; $33 = $12; $11 = $33; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 24; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEEC2IS7_EEPT_NS_9enable_ifIXsr14is_convertibleISB_PS7_EE5valueENS8_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0; var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0; var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0; var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0; var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0; var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $50 = sp + 76|0; $51 = sp + 72|0; $52 = sp + 8|0; $53 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$52>>0]=HEAP8[$67>>0]|0; ;HEAP8[$53>>0]=HEAP8[$66>>0]|0; $49 = $79; HEAP32[$50>>2] = $80; $81 = $49; $47 = $81; $48 = 0; $82 = $47; $83 = $48; $45 = $82; $46 = $83; $84 = $45; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $46; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $48; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (1612); $89 = ((($81)) + 12|0); $21 = $53; $90 = $21; $30 = $51; $31 = $50; $32 = $90; $91 = $30; $92 = $31; $29 = $92; $93 = $29; $23 = $91; $24 = $93; $94 = $23; $95 = $24; $22 = $95; $96 = $22; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $32; $25 = $98; $99 = $25; $27 = $91; $28 = $99; $100 = $28; $26 = $100; $33 = $52; $101 = $33; $42 = $89; $43 = $51; $44 = $101; $102 = $42; $103 = $43; $41 = $103; $104 = $41; $35 = $102; $36 = $104; $105 = $35; $106 = $36; $34 = $106; $107 = $34; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $44; $37 = $108; $109 = $37; $39 = $102; $40 = $109; $110 = $40; $38 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($68,$vararg_buffer); $20 = $65; $120 = $20; $17 = $120; $18 = 0; $121 = $17; $16 = $121; $122 = $16; $15 = $122; $123 = $15; $124 = HEAP32[$123>>2]|0; $19 = $124; $125 = $18; $12 = $121; $126 = $12; $11 = $126; $127 = $11; HEAP32[$127>>2] = $125; $128 = $19; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $10 = $121; $130 = $10; $9 = $130; $131 = $9; $132 = $19; $13 = $131; $14 = $132; $133 = $14; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($133); __ZdlPv($133); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $4 = $22; $23 = $4; $3 = $23; $24 = $3; $2 = $24; $25 = $2; $1 = $25; $26 = $1; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($28); __ZdlPv($28); } $30 = ((($16)) + 12|0); $10 = $30; $31 = $10; $9 = $31; $32 = $9; $12 = $32; $33 = $12; $11 = $33; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 48; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 320|0); __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($3); $4 = ((($2)) + 312|0); __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($4); $5 = ((($2)) + 300|0); __ZN6laszip7factory13record_schemaD2Ev($5); $6 = ((($2)) + 288|0); __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($6); $7 = ((($2)) + 247|0); __ZN6laszip2io7laz_vlrD2Ev($7); $8 = ((($2)) + 4|0); __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($8); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZN6laszip7factory13record_schemaD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__26vectorIyNS_9allocatorIyEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($2); STACKTOP = sp;return; } function __ZN6laszip2io7laz_vlrD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 34|0); $4 = HEAPU8[$3>>0]|(HEAPU8[$3+1>>0]<<8)|(HEAPU8[$3+2>>0]<<16)|(HEAPU8[$3+3>>0]<<24); $5 = ($4|0)==(0|0); if ($5) { STACKTOP = sp;return; } __ZdaPv($4); STACKTOP = sp;return; } function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 12|0); $4 = HEAP32[$3>>2]|0; __ZN6laszip5utilsL12aligned_freeEPv($4); STACKTOP = sp;return; } function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__213__vector_baseIN6laszip7factory11record_itemENS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $19 = sp; $22 = sp + 120|0; $31 = $0; $32 = $31; $33 = HEAP32[$32>>2]|0; $34 = ($33|0)!=(0|0); if (!($34)) { STACKTOP = sp;return; } $30 = $32; $35 = $30; $36 = HEAP32[$35>>2]|0; $27 = $35; $28 = $36; $37 = $27; $38 = ((($37)) + 4|0); $39 = HEAP32[$38>>2]|0; $29 = $39; while(1) { $40 = $28; $41 = $29; $42 = ($40|0)!=($41|0); if (!($42)) { break; } $26 = $37; $43 = $26; $44 = ((($43)) + 8|0); $25 = $44; $45 = $25; $24 = $45; $46 = $24; $47 = $29; $48 = ((($47)) + -12|0); $29 = $48; $23 = $48; $49 = $23; $20 = $46; $21 = $49; $50 = $20; $51 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $50; $18 = $51; $52 = $17; $53 = $18; $15 = $52; $16 = $53; } $54 = $28; $55 = ((($37)) + 4|0); HEAP32[$55>>2] = $54; $7 = $32; $56 = $7; $57 = ((($56)) + 8|0); $6 = $57; $58 = $6; $5 = $58; $59 = $5; $60 = HEAP32[$32>>2]|0; $4 = $32; $61 = $4; $3 = $61; $62 = $3; $63 = ((($62)) + 8|0); $2 = $63; $64 = $2; $1 = $64; $65 = $1; $66 = HEAP32[$65>>2]|0; $67 = HEAP32[$61>>2]|0; $68 = $66; $69 = $67; $70 = (($68) - ($69))|0; $71 = (($70|0) / 12)&-1; $12 = $59; $13 = $60; $14 = $71; $72 = $12; $73 = $13; $74 = $14; $9 = $72; $10 = $73; $11 = $74; $75 = $10; $8 = $75; $76 = $8; __ZdlPv($76); STACKTOP = sp;return; } function __ZNSt3__213__vector_baseIyNS_9allocatorIyEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $19 = sp; $22 = sp + 120|0; $31 = $0; $32 = $31; $33 = HEAP32[$32>>2]|0; $34 = ($33|0)!=(0|0); if (!($34)) { STACKTOP = sp;return; } $30 = $32; $35 = $30; $36 = HEAP32[$35>>2]|0; $27 = $35; $28 = $36; $37 = $27; $38 = ((($37)) + 4|0); $39 = HEAP32[$38>>2]|0; $29 = $39; while(1) { $40 = $28; $41 = $29; $42 = ($40|0)!=($41|0); if (!($42)) { break; } $26 = $37; $43 = $26; $44 = ((($43)) + 8|0); $25 = $44; $45 = $25; $24 = $45; $46 = $24; $47 = $29; $48 = ((($47)) + -8|0); $29 = $48; $23 = $48; $49 = $23; $20 = $46; $21 = $49; $50 = $20; $51 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $50; $18 = $51; $52 = $17; $53 = $18; $15 = $52; $16 = $53; } $54 = $28; $55 = ((($37)) + 4|0); HEAP32[$55>>2] = $54; $7 = $32; $56 = $7; $57 = ((($56)) + 8|0); $6 = $57; $58 = $6; $5 = $58; $59 = $5; $60 = HEAP32[$32>>2]|0; $4 = $32; $61 = $4; $3 = $61; $62 = $3; $63 = ((($62)) + 8|0); $2 = $63; $64 = $2; $1 = $64; $65 = $1; $66 = HEAP32[$65>>2]|0; $67 = HEAP32[$61>>2]|0; $68 = $66; $69 = $67; $70 = (($68) - ($69))|0; $71 = (($70|0) / 8)&-1; $12 = $59; $13 = $60; $14 = $71; $72 = $12; $73 = $13; $74 = $14; $9 = $72; $10 = $73; $11 = $74; $75 = $10; $8 = $75; $76 = $8; __ZdlPv($76); STACKTOP = sp;return; } function __ZN6laszip5utilsL12aligned_freeEPv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + -4|0); $4 = HEAP32[$3>>2]|0; _free($4); STACKTOP = sp;return; } function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; HEAP32[$4>>2] = $5; $6 = ((($4)) + 4|0); HEAP32[$6>>2] = 0; $7 = ((($4)) + 8|0); HEAP32[$7>>2] = 0; $8 = ((($4)) + 12|0); $9 = (__ZN6laszip5utilsL14aligned_mallocEi(1048576)|0); HEAP32[$8>>2] = $9; STACKTOP = sp;return; } function __ZN6laszip2io7laz_vlrC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 32|0); HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8; $4 = ((($2)) + 34|0); HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=(0>>8)&255;HEAP8[$4+2>>0]=(0>>16)&255;HEAP8[$4+3>>0]=0>>24; STACKTOP = sp;return; } function __ZN6laszip7factory13record_schemaC2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $11 = sp + 8|0; $13 = $0; $14 = $13; $12 = $14; $15 = $12; $10 = $15; $16 = $10; $9 = $16; HEAP32[$16>>2] = 0; $17 = ((($16)) + 4|0); HEAP32[$17>>2] = 0; $18 = ((($16)) + 8|0); HEAP32[$11>>2] = 0; $7 = $18; $8 = $11; $19 = $7; $20 = $8; $6 = $20; $21 = $6; $2 = $19; $3 = $21; $22 = $2; $23 = $3; $1 = $23; HEAP32[$22>>2] = 0; $5 = $19; $24 = $5; $4 = $24; STACKTOP = sp;return; } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE13__chunk_stateC2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = $2; $4 = $3; HEAP32[$4>>2] = 0; $5 = (($3) + 4)|0; $6 = $5; HEAP32[$6>>2] = 0; $7 = ((($2)) + 8|0); $8 = $7; $9 = $8; HEAP32[$9>>2] = 0; $10 = (($8) + 4)|0; $11 = $10; HEAP32[$11>>2] = 0; $12 = ((($2)) + 16|0); $13 = $12; $14 = $13; HEAP32[$14>>2] = -1; $15 = (($13) + 4)|0; $16 = $15; HEAP32[$16>>2] = -1; STACKTOP = sp;return; } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE5_openEv($0) { $0 = $0|0; var $$byval_copy = 0, $$byval_copy1 = 0, $$expand_i1_val = 0, $$expand_i1_val3 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0; var $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0; var $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0; var $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0; var $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0; var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0; var $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0; var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0; var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0; var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); $$byval_copy1 = sp + 88|0; $$byval_copy = sp + 72|0; $3 = sp + 64|0; $13 = sp + 268|0; $16 = sp + 256|0; $20 = sp + 240|0; $23 = sp + 228|0; $26 = sp + 56|0; $37 = sp + 320|0; $51 = sp + 316|0; $52 = sp + 116|0; $53 = sp + 40|0; $55 = sp + 108|0; $56 = sp + 104|0; $57 = sp + 16|0; $58 = sp; $50 = $0; $59 = $50; $60 = HEAP32[$59>>2]|0; __ZN6laszip7streams13memory_stream4readEPci($60,$51,4); $61 = ((($51)) + 4|0); $47 = $52; $48 = $51; $49 = $61; $62 = $47; $46 = $62; $63 = $46; $45 = $63; $64 = $45; ;HEAP32[$64>>2]=0|0;HEAP32[$64+4>>2]=0|0;HEAP32[$64+8>>2]=0|0; $44 = $63; $65 = $44; $43 = $65; $66 = $48; $67 = $49; __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($62,$66,$67); $41 = $52; $42 = 4257; $68 = $41; $69 = $42; $38 = $68; $39 = $69; $70 = $39; $71 = (__ZNSt3__211char_traitsIcE6lengthEPKc($70)|0); $40 = $71; $72 = $40; $73 = $38; $36 = $73; $74 = $36; $35 = $74; $75 = $35; $34 = $75; $76 = $34; $33 = $76; $77 = $33; $78 = ((($77)) + 11|0); $79 = HEAP8[$78>>0]|0; $80 = $79&255; $81 = $80 & 128; $82 = ($81|0)!=(0); if ($82) { $29 = $74; $83 = $29; $28 = $83; $84 = $28; $27 = $84; $85 = $27; $86 = ((($85)) + 4|0); $87 = HEAP32[$86>>2]|0; $95 = $87; } else { $32 = $74; $88 = $32; $31 = $88; $89 = $31; $30 = $89; $90 = $30; $91 = ((($90)) + 11|0); $92 = HEAP8[$91>>0]|0; $93 = $92&255; $95 = $93; } $94 = ($72|0)!=($95|0); if ($94) { $$expand_i1_val = 0; HEAP8[$37>>0] = $$expand_i1_val; } else { $96 = $38; $97 = $39; $98 = $40; $99 = (__ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($96,0,-1,$97,$98)|0); $100 = ($99|0)==(0); $$expand_i1_val3 = $100&1; HEAP8[$37>>0] = $$expand_i1_val3; } $$pre_trunc = HEAP8[$37>>0]|0; $101 = $$pre_trunc&1; $102 = $101 ^ 1; __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($52); if ($102) { $103 = (___cxa_allocate_exception(8)|0); __ZN6laszip13invalid_magicC2Ev($103); ___cxa_throw(($103|0),(56|0),(11|0)); // unreachable; } $104 = HEAP32[$59>>2]|0; $25 = $53; $105 = $26; $106 = $105; HEAP32[$106>>2] = 0; $107 = (($105) + 4)|0; $108 = $107; HEAP32[$108>>2] = 0; $109 = $25; ;HEAP32[$109>>2]=0|0;HEAP32[$109+4>>2]=0|0; $110 = ((($109)) + 8|0); $111 = $26; $112 = $111; $113 = HEAP32[$112>>2]|0; $114 = (($111) + 4)|0; $115 = $114; $116 = HEAP32[$115>>2]|0; $117 = $110; $118 = $117; HEAP32[$118>>2] = $113; $119 = (($117) + 4)|0; $120 = $119; HEAP32[$120>>2] = $116; ;HEAP32[$$byval_copy>>2]=HEAP32[$53>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$53+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$53+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$53+12>>2]|0; __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($104,$$byval_copy); $121 = HEAP32[$59>>2]|0; $122 = ((($59)) + 20|0); __ZN6laszip7streams13memory_stream4readEPci($121,$122,227); $123 = ((($59)) + 20|0); __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($59,$123); $124 = (__ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv()|0); $54 = $124; $125 = $54; $24 = $125; $126 = $24; $127 = HEAP32[$126>>2]|0; $21 = $126; $22 = $127; $128 = $22; $18 = $20; $19 = $128; $129 = $18; $130 = $19; HEAP32[$129>>2] = $130; $131 = HEAP32[$20>>2]|0; HEAP32[$23>>2] = $131; $132 = HEAP32[$23>>2]|0; HEAP32[$55>>2] = $132; $133 = $54; $17 = $133; $134 = $17; $135 = ((($134)) + 4|0); $136 = HEAP32[$135>>2]|0; $14 = $134; $15 = $136; $137 = $15; $11 = $13; $12 = $137; $138 = $11; $139 = $12; HEAP32[$138>>2] = $139; $140 = HEAP32[$13>>2]|0; HEAP32[$16>>2] = $140; $141 = HEAP32[$16>>2]|0; HEAP32[$56>>2] = $141; while(1) { $9 = $55; $10 = $56; $142 = $9; $143 = $10; $7 = $142; $8 = $143; $144 = $7; $6 = $144; $145 = $6; $146 = HEAP32[$145>>2]|0; $147 = $8; $5 = $147; $148 = $5; $149 = HEAP32[$148>>2]|0; $150 = ($146|0)==($149|0); $151 = $150 ^ 1; if (!($151)) { break; } $4 = $55; $152 = $4; $153 = HEAP32[$152>>2]|0; __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($57,$153); $154 = ((($59)) + 20|0); __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($57,$154); __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($57); $1 = $55; $155 = $1; $156 = HEAP32[$155>>2]|0; $157 = ((($156)) + 24|0); HEAP32[$155>>2] = $157; } __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($59); __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($59); $158 = HEAP32[$59>>2]|0; __ZN6laszip7streams13memory_stream5clearEv($158); $159 = HEAP32[$59>>2]|0; $160 = ((($59)) + 20|0); $161 = ((($160)) + 96|0); $162 = HEAP32[$161>>2]|0; $163 = (($162) + 8)|0; $2 = $58; $164 = $3; $165 = $164; HEAP32[$165>>2] = $163; $166 = (($164) + 4)|0; $167 = $166; HEAP32[$167>>2] = 0; $168 = $2; ;HEAP32[$168>>2]=0|0;HEAP32[$168+4>>2]=0|0; $169 = ((($168)) + 8|0); $170 = $3; $171 = $170; $172 = HEAP32[$171>>2]|0; $173 = (($170) + 4)|0; $174 = $173; $175 = HEAP32[$174>>2]|0; $176 = $169; $177 = $176; HEAP32[$177>>2] = $172; $178 = (($176) + 4)|0; $179 = $178; HEAP32[$179>>2] = $175; ;HEAP32[$$byval_copy1>>2]=HEAP32[$58>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$58+4>>2]|0;HEAP32[$$byval_copy1+8>>2]=HEAP32[$58+8>>2]|0;HEAP32[$$byval_copy1+12>>2]=HEAP32[$58+12>>2]|0; __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($159,$$byval_copy1); $180 = ((($59)) + 4|0); __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($180); STACKTOP = sp;return; } function __ZN6laszip5utilsL14aligned_mallocEi($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $4 = $1; $5 = (($4) + 64)|0; $6 = (($5) + 4)|0; $7 = (_malloc($6)|0); $2 = $7; $8 = $2; $9 = $8; $10 = (($9) + 64)|0; $11 = (($10) + 4)|0; $12 = $11 & -64; $13 = $12; $3 = $13; $14 = $2; $15 = $3; $16 = ((($15)) + -4|0); HEAP32[$16>>2] = $14; $17 = $3; STACKTOP = sp;return ($17|0); } function __ZN6laszip7streams13memory_stream4readEPci($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0; var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0); $18 = sp; $21 = sp + 92|0; $24 = sp + 12|0; $26 = sp + 4|0; $22 = $0; $23 = $1; HEAP32[$24>>2] = $2; $27 = $22; $28 = ((($27)) + 13|0); $29 = HEAP8[$28>>0]|0; $30 = $29&1; if ($30) { $31 = ((($27)) + 12|0); HEAP8[$31>>0] = 1; STACKTOP = sp;return; } $32 = ((($27)) + 4|0); $33 = HEAP32[$32>>2]|0; $34 = ((($27)) + 8|0); $35 = HEAP32[$34>>2]|0; $36 = (($33) - ($35))|0; HEAP32[$26>>2] = $36; $19 = $24; $20 = $26; $37 = $19; $38 = $20; ;HEAP8[$18>>0]=HEAP8[$21>>0]|0; $16 = $37; $17 = $38; $39 = $17; $40 = $16; $13 = $18; $14 = $39; $15 = $40; $41 = $14; $42 = HEAP32[$41>>2]|0; $43 = $15; $44 = HEAP32[$43>>2]|0; $45 = ($42|0)<($44|0); $46 = $17; $47 = $16; $48 = $45 ? $46 : $47; $49 = HEAP32[$48>>2]|0; $25 = $49; $50 = HEAP32[$27>>2]|0; $51 = ((($27)) + 8|0); $52 = HEAP32[$51>>2]|0; $53 = (($50) + ($52)|0); $54 = HEAP32[$27>>2]|0; $55 = ((($27)) + 8|0); $56 = HEAP32[$55>>2]|0; $57 = (($54) + ($56)|0); $58 = $25; $59 = (($57) + ($58)|0); $60 = $23; $10 = $53; $11 = $59; $12 = $60; $61 = $10; $9 = $61; $62 = $9; $63 = $11; $3 = $63; $64 = $3; $65 = $12; $4 = $65; $66 = $4; $5 = $62; $6 = $64; $7 = $66; $67 = $6; $68 = $5; $69 = $67; $70 = $68; $71 = (($69) - ($70))|0; $8 = $71; $72 = $8; $73 = ($72>>>0)>(0); if ($73) { $74 = $7; $75 = $5; $76 = $8; _memmove(($74|0),($75|0),($76|0))|0; } $77 = $25; $78 = ((($27)) + 8|0); $79 = HEAP32[$78>>2]|0; $80 = (($79) + ($77))|0; HEAP32[$78>>2] = $80; $81 = $25; $82 = ((($27)) + 16|0); HEAP32[$82>>2] = $81; $83 = ((($27)) + 8|0); $84 = HEAP32[$83>>2]|0; $85 = ((($27)) + 4|0); $86 = HEAP32[$85>>2]|0; $87 = ($84|0)>=($86|0); if (!($87)) { STACKTOP = sp;return; } $88 = ((($27)) + 13|0); HEAP8[$88>>0] = 1; STACKTOP = sp;return; } function __ZN6laszip13invalid_magicC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,4355); HEAP32[$2>>2] = (1640); STACKTOP = sp;return; } function __ZN6laszip13invalid_magicD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = $0; $5 = $4; $3 = $1; $6 = $3; $7 = ((($6)) + 8|0); $8 = $7; $9 = $8; $10 = HEAP32[$9>>2]|0; $11 = (($8) + 4)|0; $12 = $11; $13 = HEAP32[$12>>2]|0; $14 = ((($5)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = ($15|0)<(0); $17 = $16 << 31 >> 31; $18 = ($13|0)>($17|0); $19 = ($10>>>0)>=($15>>>0); $20 = ($13|0)==($17|0); $21 = $20 & $19; $22 = $18 | $21; if ($22) { $23 = ((($5)) + 12|0); HEAP8[$23>>0] = 1; STACKTOP = sp;return; } else { $2 = $1; $24 = $2; $25 = ((($24)) + 8|0); $26 = $25; $27 = $26; $28 = HEAP32[$27>>2]|0; $29 = (($26) + 4)|0; $30 = $29; $31 = HEAP32[$30>>2]|0; $32 = ((($5)) + 8|0); HEAP32[$32>>2] = $28; STACKTOP = sp;return; } } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10_fixMinMaxERNS0_6headerE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0.0, $13 = 0, $14 = 0, $15 = 0, $16 = 0.0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0.0, $21 = 0, $22 = 0, $23 = 0.0, $24 = 0, $25 = 0, $26 = 0, $27 = 0.0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0.0, $32 = 0.0, $33 = 0, $34 = 0, $35 = 0.0, $36 = 0, $37 = 0, $38 = 0.0, $39 = 0, $4 = 0.0, $40 = 0, $41 = 0, $42 = 0.0, $43 = 0, $44 = 0, $45 = 0, $46 = 0.0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0.0, $50 = 0.0, $51 = 0, $52 = 0, $53 = 0, $6 = 0.0, $7 = 0.0, $8 = 0.0, $9 = 0.0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $2 = $0; $3 = $1; $10 = $3; $11 = ((($10)) + 179|0); HEAP8[tempDoublePtr>>0]=HEAP8[$11>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$11+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$11+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$11+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$11+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$11+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$11+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$11+7>>0];$12 = +HEAPF64[tempDoublePtr>>3]; $4 = $12; $13 = $3; $14 = ((($13)) + 179|0); $15 = ((($14)) + 8|0); HEAP8[tempDoublePtr>>0]=HEAP8[$15>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$15+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$15+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$15+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$15+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$15+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$15+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$15+7>>0];$16 = +HEAPF64[tempDoublePtr>>3]; $7 = $16; $17 = $3; $18 = ((($17)) + 179|0); $19 = ((($18)) + 16|0); HEAP8[tempDoublePtr>>0]=HEAP8[$19>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$19+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$19+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$19+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$19+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$19+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$19+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$19+7>>0];$20 = +HEAPF64[tempDoublePtr>>3]; $5 = $20; $21 = $3; $22 = ((($21)) + 203|0); HEAP8[tempDoublePtr>>0]=HEAP8[$22>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$22+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$22+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$22+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$22+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$22+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$22+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$22+7>>0];$23 = +HEAPF64[tempDoublePtr>>3]; $8 = $23; $24 = $3; $25 = ((($24)) + 203|0); $26 = ((($25)) + 8|0); HEAP8[tempDoublePtr>>0]=HEAP8[$26>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$26+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$26+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$26+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$26+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$26+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$26+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$26+7>>0];$27 = +HEAPF64[tempDoublePtr>>3]; $6 = $27; $28 = $3; $29 = ((($28)) + 203|0); $30 = ((($29)) + 16|0); HEAP8[tempDoublePtr>>0]=HEAP8[$30>>0];HEAP8[tempDoublePtr+1>>0]=HEAP8[$30+1>>0];HEAP8[tempDoublePtr+2>>0]=HEAP8[$30+2>>0];HEAP8[tempDoublePtr+3>>0]=HEAP8[$30+3>>0];HEAP8[tempDoublePtr+4>>0]=HEAP8[$30+4>>0];HEAP8[tempDoublePtr+5>>0]=HEAP8[$30+5>>0];HEAP8[tempDoublePtr+6>>0]=HEAP8[$30+6>>0];HEAP8[tempDoublePtr+7>>0]=HEAP8[$30+7>>0];$31 = +HEAPF64[tempDoublePtr>>3]; $9 = $31; $32 = $7; $33 = $3; $34 = ((($33)) + 179|0); HEAPF64[tempDoublePtr>>3]=$32;HEAP8[$34>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$34+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$34+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$34+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$34+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$34+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$34+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$34+7>>0]=HEAP8[tempDoublePtr+7>>0]; $35 = $4; $36 = $3; $37 = ((($36)) + 203|0); HEAPF64[tempDoublePtr>>3]=$35;HEAP8[$37>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$37+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$37+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$37+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$37+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$37+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$37+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$37+7>>0]=HEAP8[tempDoublePtr+7>>0]; $38 = $8; $39 = $3; $40 = ((($39)) + 179|0); $41 = ((($40)) + 8|0); HEAPF64[tempDoublePtr>>3]=$38;HEAP8[$41>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$41+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$41+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$41+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$41+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$41+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$41+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$41+7>>0]=HEAP8[tempDoublePtr+7>>0]; $42 = $5; $43 = $3; $44 = ((($43)) + 203|0); $45 = ((($44)) + 8|0); HEAPF64[tempDoublePtr>>3]=$42;HEAP8[$45>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$45+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$45+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$45+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$45+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$45+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$45+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$45+7>>0]=HEAP8[tempDoublePtr+7>>0]; $46 = $9; $47 = $3; $48 = ((($47)) + 179|0); $49 = ((($48)) + 16|0); HEAPF64[tempDoublePtr>>3]=$46;HEAP8[$49>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$49+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$49+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$49+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$49+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$49+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$49+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$49+7>>0]=HEAP8[tempDoublePtr+7>>0]; $50 = $6; $51 = $3; $52 = ((($51)) + 203|0); $53 = ((($52)) + 16|0); HEAPF64[tempDoublePtr>>3]=$50;HEAP8[$53>>0]=HEAP8[tempDoublePtr>>0];HEAP8[$53+1>>0]=HEAP8[tempDoublePtr+1>>0];HEAP8[$53+2>>0]=HEAP8[tempDoublePtr+2>>0];HEAP8[$53+3>>0]=HEAP8[tempDoublePtr+3>>0];HEAP8[$53+4>>0]=HEAP8[tempDoublePtr+4>>0];HEAP8[$53+5>>0]=HEAP8[tempDoublePtr+5>>0];HEAP8[$53+6>>0]=HEAP8[tempDoublePtr+6>>0];HEAP8[$53+7>>0]=HEAP8[tempDoublePtr+7>>0]; STACKTOP = sp;return; } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEv() { var $$byval_copy = 0, $0 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0; var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0; var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0; var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0; var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0; var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); $$byval_copy = sp + 195|0; $13 = sp + 24|0; $18 = sp + 194|0; $29 = sp + 193|0; $42 = sp + 32|0; $44 = sp; $45 = sp + 192|0; $46 = HEAP8[21176]|0; $47 = ($46<<24>>24)==(0); if ($47) { $48 = (___cxa_guard_acquire(21176)|0); $49 = ($48|0)!=(0); if ($49) { $43 = 21216; $50 = $43; $41 = $50; $51 = $41; $40 = $51; HEAP32[$51>>2] = 0; $52 = ((($51)) + 4|0); HEAP32[$52>>2] = 0; $53 = ((($51)) + 8|0); HEAP32[$42>>2] = 0; $38 = $53; $39 = $42; $54 = $38; $55 = $39; $37 = $55; $56 = $37; $33 = $54; $34 = $56; $57 = $33; $58 = $34; $32 = $58; HEAP32[$57>>2] = 0; $36 = $54; $59 = $36; $35 = $59; } } $60 = HEAP8[21184]|0; $61 = ($60<<24>>24)==(0); if ($61) { $62 = (___cxa_guard_acquire(21184)|0); $63 = ($62|0)!=(0); if ($63) { } } $31 = 21216; $64 = $31; $65 = HEAP32[$64>>2]|0; $66 = ((($64)) + 4|0); $67 = HEAP32[$66>>2]|0; $68 = ($65|0)==($67|0); if (!($68)) { STACKTOP = sp;return (21216|0); } __ZNSt3__25mutex4lockEv(21228); $30 = 21216; $69 = $30; $70 = HEAP32[$69>>2]|0; $71 = ((($69)) + 4|0); $72 = HEAP32[$71>>2]|0; $73 = ($70|0)==($72|0); if ($73) { ;HEAP8[$$byval_copy>>0]=HEAP8[$45>>0]|0; __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($44,$$byval_copy); $27 = 21216; $28 = $44; $74 = $27; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; $26 = $74; $77 = $26; $78 = ((($77)) + 8|0); $25 = $78; $79 = $25; $24 = $79; $80 = $24; $81 = HEAP32[$80>>2]|0; $82 = ($76>>>0)<($81>>>0); if ($82) { $21 = $29; $22 = $74; $23 = 1; $4 = $74; $83 = $4; $84 = ((($83)) + 8|0); $3 = $84; $85 = $3; $2 = $85; $86 = $2; $87 = ((($74)) + 4|0); $88 = HEAP32[$87>>2]|0; $0 = $88; $89 = $0; $90 = $28; $1 = $90; $91 = $1; $15 = $86; $16 = $89; $17 = $91; $92 = $15; $93 = $16; $94 = $17; $14 = $94; $95 = $14; ;HEAP8[$13>>0]=HEAP8[$18>>0]|0; $10 = $92; $11 = $93; $12 = $95; $96 = $10; $97 = $11; $98 = $12; $9 = $98; $99 = $9; $6 = $96; $7 = $97; $8 = $99; $100 = $7; $101 = $8; $5 = $101; $102 = $5; __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($100,$102); $19 = $29; $103 = ((($74)) + 4|0); $104 = HEAP32[$103>>2]|0; $105 = ((($104)) + 24|0); HEAP32[$103>>2] = $105; } else { $106 = $28; $20 = $106; $107 = $20; __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($74,$107); } __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($44); } __ZNSt3__25mutex6unlockEv(21228); STACKTOP = sp;return (21216|0); } function __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2ERKS6_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; $6 = ((($5)) + 16|0); $7 = HEAP32[$6>>2]|0; $8 = ($7|0)==(0|0); if ($8) { $9 = ((($4)) + 16|0); HEAP32[$9>>2] = 0; STACKTOP = sp;return; } $10 = $3; $11 = ((($10)) + 16|0); $12 = HEAP32[$11>>2]|0; $13 = $3; $14 = ($12|0)==($13|0); if ($14) { $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0); $16 = ((($4)) + 16|0); HEAP32[$16>>2] = $15; $17 = $3; $18 = ((($17)) + 16|0); $19 = HEAP32[$18>>2]|0; $20 = HEAP32[$19>>2]|0; $21 = ((($20)) + 12|0); $22 = HEAP32[$21>>2]|0; $23 = ((($4)) + 16|0); $24 = HEAP32[$23>>2]|0; FUNCTION_TABLE_vii[$22 & 255]($19,$24); STACKTOP = sp;return; } else { $25 = $3; $26 = ((($25)) + 16|0); $27 = HEAP32[$26>>2]|0; $28 = HEAP32[$27>>2]|0; $29 = ((($28)) + 8|0); $30 = HEAP32[$29>>2]|0; $31 = (FUNCTION_TABLE_ii[$30 & 255]($27)|0); $32 = ((($4)) + 16|0); HEAP32[$32>>2] = $31; STACKTOP = sp;return; } } function __ZNKSt3__28functionIFvRN6laszip2io6headerEEEclES4_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $3; $6 = ((($5)) + 16|0); $7 = HEAP32[$6>>2]|0; $8 = ($7|0)==(0|0); if ($8) { $9 = (___cxa_allocate_exception(4)|0); ;HEAP32[$9>>2]=0|0; __ZNSt3__217bad_function_callC2Ev($9); ___cxa_throw(($9|0),(1240|0),(197|0)); // unreachable; } else { $10 = ((($5)) + 16|0); $11 = HEAP32[$10>>2]|0; $12 = HEAP32[$11>>2]|0; $13 = ((($12)) + 24|0); $14 = HEAP32[$13>>2]|0; $15 = $4; $2 = $15; $16 = $2; FUNCTION_TABLE_vii[$14 & 255]($11,$16); STACKTOP = sp;return; } } function __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 16|0); $4 = HEAP32[$3>>2]|0; $5 = ($4|0)==($2|0); $6 = ((($2)) + 16|0); $7 = HEAP32[$6>>2]|0; if ($5) { $8 = HEAP32[$7>>2]|0; $9 = ((($8)) + 16|0); $10 = HEAP32[$9>>2]|0; FUNCTION_TABLE_vi[$10 & 511]($7); STACKTOP = sp;return; } $11 = ($7|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($2)) + 16|0); $13 = HEAP32[$12>>2]|0; $14 = HEAP32[$13>>2]|0; $15 = ((($14)) + 20|0); $16 = HEAP32[$15>>2]|0; FUNCTION_TABLE_vi[$16 & 511]($13); STACKTOP = sp;return; } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE12_parseLASZIPEv($0) { $0 = $0|0; var $$byval_copy = 0, $$expand_i1_val = 0, $$expand_i1_val3 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0; var $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0; var $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0; var $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0; var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0; var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0; var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0; var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0; var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); $$byval_copy = sp + 32|0; $26 = sp + 116|0; $30 = sp + 277|0; $34 = sp + 24|0; $38 = sp + 276|0; $40 = sp + 16|0; $42 = sp; $43 = sp + 222|0; $47 = sp + 60|0; $48 = sp + 48|0; $41 = $0; $49 = $41; $50 = HEAP32[$49>>2]|0; $51 = ((($49)) + 20|0); $52 = ((($51)) + 94|0); $53 = HEAP16[$52>>1]|0; $54 = $53&65535; $39 = $42; $55 = $40; $56 = $55; HEAP32[$56>>2] = $54; $57 = (($55) + 4)|0; $58 = $57; HEAP32[$58>>2] = 0; $59 = $39; ;HEAP32[$59>>2]=0|0;HEAP32[$59+4>>2]=0|0; $60 = ((($59)) + 8|0); $61 = $40; $62 = $61; $63 = HEAP32[$62>>2]|0; $64 = (($61) + 4)|0; $65 = $64; $66 = HEAP32[$65>>2]|0; $67 = $60; $68 = $67; HEAP32[$68>>2] = $63; $69 = (($67) + 4)|0; $70 = $69; HEAP32[$70>>2] = $66; ;HEAP32[$$byval_copy>>2]=HEAP32[$42>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$42+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$42+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$42+12>>2]|0; __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($50,$$byval_copy); $44 = 0; $45 = 0; while(1) { $71 = $44; $72 = ((($49)) + 20|0); $73 = ((($72)) + 100|0); $74 = HEAP32[$73>>2]|0; $75 = ($71>>>0)<($74>>>0); if (!($75)) { break; } $76 = HEAP32[$49>>2]|0; $77 = (__ZN6laszip7streams13memory_stream4goodEv($76)|0); if (!($77)) { break; } $78 = HEAP32[$49>>2]|0; $79 = (__ZN6laszip7streams13memory_stream3eofEv($78)|0); $80 = $79 ^ 1; if (!($80)) { break; } $81 = HEAP32[$49>>2]|0; __ZN6laszip7streams13memory_stream4readEPci($81,$43,54); $46 = 4841; $82 = ((($43)) + 2|0); $83 = ((($43)) + 2|0); $84 = ((($83)) + 14|0); $85 = $46; $35 = $82; $36 = $84; $37 = $85; $86 = $35; $87 = $36; $88 = $37; ;HEAP8[$34>>0]=HEAP8[$38>>0]|0; $31 = $86; $32 = $87; $33 = $88; while(1) { $89 = $31; $90 = $32; $91 = ($89|0)!=($90|0); if (!($91)) { label = 10; break; } $92 = $31; $93 = $33; $27 = $34; $28 = $92; $29 = $93; $94 = $28; $95 = HEAP8[$94>>0]|0; $96 = $95 << 24 >> 24; $97 = $29; $98 = HEAP8[$97>>0]|0; $99 = $98 << 24 >> 24; $100 = ($96|0)==($99|0); if (!($100)) { label = 8; break; } $101 = $31; $102 = ((($101)) + 1|0); $31 = $102; $103 = $33; $104 = ((($103)) + 1|0); $33 = $104; } if ((label|0) == 8) { label = 0; $$expand_i1_val = 0; HEAP8[$30>>0] = $$expand_i1_val; } else if ((label|0) == 10) { label = 0; $$expand_i1_val3 = 1; HEAP8[$30>>0] = $$expand_i1_val3; } $$pre_trunc = HEAP8[$30>>0]|0; $105 = $$pre_trunc&1; if ($105) { $106 = ((($43)) + 18|0); $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8); $108 = $107&65535; $109 = ($108|0)==(22204); if ($109) { label = 13; break; } } $149 = HEAP32[$49>>2]|0; $150 = ((($43)) + 20|0); $151 = HEAPU8[$150>>0]|(HEAPU8[$150+1>>0]<<8); $152 = $151&65535; __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($149,$152,0,1); $153 = $44; $154 = (($153) + 1)|0; $44 = $154; } if ((label|0) == 13) { $45 = 1; $110 = ((($43)) + 20|0); $111 = HEAPU8[$110>>0]|(HEAPU8[$110+1>>0]<<8); $112 = $111&65535; $113 = (__Znaj($112)|0); $25 = $47; HEAP32[$26>>2] = $113; $114 = $25; $23 = $114; $24 = $26; $115 = $23; $116 = $24; $22 = $116; $117 = $22; $20 = $115; $21 = $117; $118 = $20; $119 = $21; $19 = $119; $120 = $19; $121 = HEAP32[$120>>2]|0; HEAP32[$118>>2] = $121; $122 = HEAP32[$49>>2]|0; $18 = $47; $123 = $18; $17 = $123; $124 = $17; $16 = $124; $125 = $16; $126 = HEAP32[$125>>2]|0; $127 = ((($43)) + 20|0); $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8); $129 = $128&65535; __ZN6laszip7streams13memory_stream4readEPci($122,$126,$129); $15 = $47; $130 = $15; $14 = $130; $131 = $14; $13 = $131; $132 = $13; $133 = HEAP32[$132>>2]|0; __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($49,$133); $12 = $47; $134 = $12; $9 = $134; $10 = 0; $135 = $9; $8 = $135; $136 = $8; $7 = $136; $137 = $7; $138 = HEAP32[$137>>2]|0; $11 = $138; $139 = $10; $4 = $135; $140 = $4; $3 = $140; $141 = $3; HEAP32[$141>>2] = $139; $142 = $11; $143 = ($142|0)!=(0|0); if ($143) { $2 = $135; $144 = $2; $1 = $144; $145 = $1; $146 = $11; $5 = $145; $6 = $146; $147 = $6; $148 = ($147|0)==(0|0); if (!($148)) { __ZdlPv($147); } } } $155 = $45; $156 = $155&1; if ($156) { $158 = ((($49)) + 247|0); $159 = ((($49)) + 20|0); $160 = ((($159)) + 105|0); $161 = HEAPU8[$160>>0]|(HEAPU8[$160+1>>0]<<8); $162 = $161&65535; __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($48,$158,$162); $163 = ((($49)) + 300|0); (__ZN6laszip7factory13record_schemaaSEOS1_($163,$48)|0); __ZN6laszip7factory13record_schemaD2Ev($48); STACKTOP = sp;return; } else { $157 = (___cxa_allocate_exception(8)|0); __ZN6laszip13no_laszip_vlrC2Ev($157); ___cxa_throw(($157|0),(136|0),(32|0)); // unreachable; } } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE16_parseChunkTableEv($0) { $0 = $0|0; var $$byval_copy = 0, $$byval_copy1 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0; var $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0; var $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0; var $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0; var $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0; var $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0; var $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0; var $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0; var $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0; var $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0; var $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0; var $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0; var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 448|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(448|0); $$byval_copy1 = sp + 80|0; $$byval_copy = sp + 64|0; $38 = sp + 56|0; $41 = sp + 436|0; $54 = sp + 48|0; $56 = sp + 40|0; $58 = sp + 24|0; $59 = sp + 16|0; $60 = sp; $61 = sp + 216|0; $62 = sp + 200|0; $63 = sp + 184|0; $64 = sp + 104|0; $57 = $0; $67 = $57; $68 = HEAP32[$67>>2]|0; $69 = ((($67)) + 20|0); $70 = ((($69)) + 96|0); $71 = HEAP32[$70>>2]|0; $55 = $58; $72 = $56; $73 = $72; HEAP32[$73>>2] = $71; $74 = (($72) + 4)|0; $75 = $74; HEAP32[$75>>2] = 0; $76 = $55; ;HEAP32[$76>>2]=0|0;HEAP32[$76+4>>2]=0|0; $77 = ((($76)) + 8|0); $78 = $56; $79 = $78; $80 = HEAP32[$79>>2]|0; $81 = (($78) + 4)|0; $82 = $81; $83 = HEAP32[$82>>2]|0; $84 = $77; $85 = $84; HEAP32[$85>>2] = $80; $86 = (($84) + 4)|0; $87 = $86; HEAP32[$87>>2] = $83; ;HEAP32[$$byval_copy>>2]=HEAP32[$58>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$58+4>>2]|0;HEAP32[$$byval_copy+8>>2]=HEAP32[$58+8>>2]|0;HEAP32[$$byval_copy+12>>2]=HEAP32[$58+12>>2]|0; __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($68,$$byval_copy); $88 = $59; $89 = $88; HEAP32[$89>>2] = 0; $90 = (($88) + 4)|0; $91 = $90; HEAP32[$91>>2] = 0; $92 = HEAP32[$67>>2]|0; __ZN6laszip7streams13memory_stream4readEPci($92,$59,8); $93 = HEAP32[$67>>2]|0; $94 = (__ZN6laszip7streams13memory_stream4goodEv($93)|0); if (!($94)) { $95 = (___cxa_allocate_exception(8)|0); __ZN6laszip22chunk_table_read_errorC2Ev($95); ___cxa_throw(($95|0),(168|0),(34|0)); // unreachable; } $96 = $59; $97 = $96; $98 = HEAP32[$97>>2]|0; $99 = (($96) + 4)|0; $100 = $99; $101 = HEAP32[$100>>2]|0; $102 = ($98|0)==(-1); $103 = ($101|0)==(-1); $104 = $102 & $103; if ($104) { $105 = (___cxa_allocate_exception(8)|0); __ZN6laszip13not_supportedC2EPKc($105,5052); ___cxa_throw(($105|0),(184|0),(36|0)); // unreachable; } $106 = HEAP32[$67>>2]|0; $107 = $59; $108 = $107; $109 = HEAP32[$108>>2]|0; $110 = (($107) + 4)|0; $111 = $110; $112 = HEAP32[$111>>2]|0; $53 = $60; $113 = $54; $114 = $113; HEAP32[$114>>2] = $109; $115 = (($113) + 4)|0; $116 = $115; HEAP32[$116>>2] = $112; $117 = $53; ;HEAP32[$117>>2]=0|0;HEAP32[$117+4>>2]=0|0; $118 = ((($117)) + 8|0); $119 = $54; $120 = $119; $121 = HEAP32[$120>>2]|0; $122 = (($119) + 4)|0; $123 = $122; $124 = HEAP32[$123>>2]|0; $125 = $118; $126 = $125; HEAP32[$126>>2] = $121; $127 = (($125) + 4)|0; $128 = $127; HEAP32[$128>>2] = $124; ;HEAP32[$$byval_copy1>>2]=HEAP32[$60>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$60+4>>2]|0;HEAP32[$$byval_copy1+8>>2]=HEAP32[$60+8>>2]|0;HEAP32[$$byval_copy1+12>>2]=HEAP32[$60+12>>2]|0; __ZN6laszip7streams13memory_stream5seekgENSt3__24fposI11__mbstate_tEE($106,$$byval_copy1); $129 = HEAP32[$67>>2]|0; $130 = (__ZN6laszip7streams13memory_stream4goodEv($129)|0); if (!($130)) { $131 = (___cxa_allocate_exception(8)|0); __ZN6laszip22chunk_table_read_errorC2Ev($131); ___cxa_throw(($131|0),(168|0),(34|0)); // unreachable; } $132 = HEAP32[$67>>2]|0; __ZN6laszip7streams13memory_stream4readEPci($132,$61,8); $133 = HEAP32[$67>>2]|0; $134 = (__ZN6laszip7streams13memory_stream4goodEv($133)|0); if (!($134)) { $135 = (___cxa_allocate_exception(8)|0); __ZN6laszip22chunk_table_read_errorC2Ev($135); ___cxa_throw(($135|0),(168|0),(34|0)); // unreachable; } $136 = HEAP32[$61>>2]|0; $137 = ($136|0)!=(0); if ($137) { $138 = (___cxa_allocate_exception(8)|0); __ZN6laszip26unknown_chunk_table_formatC2Ev($138); ___cxa_throw(($138|0),(200|0),(38|0)); // unreachable; } $139 = ((($67)) + 288|0); $51 = $139; $140 = $51; $50 = $140; $141 = $50; $142 = ((($141)) + 4|0); $143 = HEAP32[$142>>2]|0; $144 = HEAP32[$141>>2]|0; $145 = $143; $146 = $144; $147 = (($145) - ($146))|0; $148 = (($147|0) / 8)&-1; $52 = $148; $49 = $140; $149 = $49; $150 = HEAP32[$149>>2]|0; $46 = $149; $47 = $150; $151 = $46; $152 = ((($151)) + 4|0); $153 = HEAP32[$152>>2]|0; $48 = $153; while(1) { $154 = $47; $155 = $48; $156 = ($154|0)!=($155|0); if (!($156)) { break; } $45 = $151; $157 = $45; $158 = ((($157)) + 8|0); $44 = $158; $159 = $44; $43 = $159; $160 = $43; $161 = $48; $162 = ((($161)) + -8|0); $48 = $162; $42 = $162; $163 = $42; $39 = $160; $40 = $163; $164 = $39; $165 = $40; ;HEAP8[$38>>0]=HEAP8[$41>>0]|0; $36 = $164; $37 = $165; $166 = $36; $167 = $37; $34 = $166; $35 = $167; } $168 = $47; $169 = ((($151)) + 4|0); HEAP32[$169>>2] = $168; $170 = $52; $31 = $140; $32 = $170; $171 = $31; $30 = $171; $172 = $30; $173 = HEAP32[$172>>2]|0; $29 = $173; $174 = $29; $13 = $171; $175 = $13; $176 = HEAP32[$175>>2]|0; $12 = $176; $177 = $12; $18 = $171; $178 = $18; $17 = $178; $179 = $17; $16 = $179; $180 = $16; $181 = ((($180)) + 8|0); $15 = $181; $182 = $15; $14 = $182; $183 = $14; $184 = HEAP32[$183>>2]|0; $185 = HEAP32[$179>>2]|0; $186 = $184; $187 = $185; $188 = (($186) - ($187))|0; $189 = (($188|0) / 8)&-1; $190 = (($177) + ($189<<3)|0); $20 = $171; $191 = $20; $192 = HEAP32[$191>>2]|0; $19 = $192; $193 = $19; $194 = $32; $195 = (($193) + ($194<<3)|0); $22 = $171; $196 = $22; $197 = HEAP32[$196>>2]|0; $21 = $197; $198 = $21; $23 = $171; $199 = $23; $200 = ((($199)) + 4|0); $201 = HEAP32[$200>>2]|0; $202 = HEAP32[$199>>2]|0; $203 = $201; $204 = $202; $205 = (($203) - ($204))|0; $206 = (($205|0) / 8)&-1; $207 = (($198) + ($206<<3)|0); $24 = $171; $25 = $174; $26 = $190; $27 = $195; $28 = $207; $33 = $140; $208 = ((($67)) + 247|0); $209 = ((($208)) + 12|0); $210 = HEAPU8[$209>>0]|(HEAPU8[$209+1>>0]<<8)|(HEAPU8[$209+2>>0]<<16)|(HEAPU8[$209+3>>0]<<24); $211 = ($210|0)==(-1); if ($211) { $212 = (___cxa_allocate_exception(8)|0); __ZN6laszip13not_supportedC2EPKc($212,5170); ___cxa_throw(($212|0),(184|0),(36|0)); // unreachable; } $213 = ((($67)) + 288|0); $214 = ((($61)) + 4|0); $215 = HEAP32[$214>>2]|0; $216 = (($215) + 1)|0; __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($213,$216); $217 = ((($67)) + 20|0); $218 = ((($217)) + 96|0); $219 = HEAP32[$218>>2]|0; $220 = (($219) + 8)|0; $221 = ((($67)) + 288|0); $10 = $221; $11 = 0; $222 = $10; $223 = HEAP32[$222>>2]|0; $224 = $11; $225 = (($223) + ($224<<3)|0); $226 = $225; $227 = $226; HEAP32[$227>>2] = $220; $228 = (($226) + 4)|0; $229 = $228; HEAP32[$229>>2] = 0; $230 = ((($61)) + 4|0); $231 = HEAP32[$230>>2]|0; $232 = ($231>>>0)>(1); if (!($232)) { STACKTOP = sp;return; } $233 = HEAP32[$67>>2]|0; __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEEC2ERS3_($62,$233); __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($63,$62); __ZN6laszip13decompressors7integerC2Ejjjj($64,32,2,8,0); __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($63); __ZN6laszip13decompressors7integer4initEv($64); $65 = 1; while(1) { $234 = $65; $235 = ((($61)) + 4|0); $236 = HEAP32[$235>>2]|0; $237 = ($234>>>0)<=($236>>>0); if (!($237)) { break; } $238 = $65; $239 = ($238>>>0)>(1); if ($239) { $240 = ((($67)) + 288|0); $241 = $65; $242 = (($241) - 1)|0; $8 = $240; $9 = $242; $243 = $8; $244 = HEAP32[$243>>2]|0; $245 = $9; $246 = (($244) + ($245<<3)|0); $247 = $246; $248 = $247; $249 = HEAP32[$248>>2]|0; $250 = (($247) + 4)|0; $251 = $250; $252 = HEAP32[$251>>2]|0; $253 = $249; } else { $253 = 0; } $254 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($64,$63,$253,1)|0); $255 = ($254|0)<(0); $256 = $255 << 31 >> 31; $257 = ((($67)) + 288|0); $258 = $65; $1 = $257; $2 = $258; $259 = $1; $260 = HEAP32[$259>>2]|0; $261 = $2; $262 = (($260) + ($261<<3)|0); $263 = $262; $264 = $263; HEAP32[$264>>2] = $254; $265 = (($263) + 4)|0; $266 = $265; HEAP32[$266>>2] = $256; $267 = $65; $268 = (($267) + 1)|0; $65 = $268; } $66 = 1; while(1) { $269 = $66; $270 = ((($67)) + 288|0); $3 = $270; $271 = $3; $272 = ((($271)) + 4|0); $273 = HEAP32[$272>>2]|0; $274 = HEAP32[$271>>2]|0; $275 = $273; $276 = $274; $277 = (($275) - ($276))|0; $278 = (($277|0) / 8)&-1; $279 = ($269>>>0)<($278>>>0); if (!($279)) { break; } $280 = ((($67)) + 288|0); $281 = $66; $282 = (($281) - 1)|0; $4 = $280; $5 = $282; $283 = $4; $284 = HEAP32[$283>>2]|0; $285 = $5; $286 = (($284) + ($285<<3)|0); $287 = $286; $288 = $287; $289 = HEAP32[$288>>2]|0; $290 = (($287) + 4)|0; $291 = $290; $292 = HEAP32[$291>>2]|0; $293 = ((($67)) + 288|0); $294 = $66; $6 = $293; $7 = $294; $295 = $6; $296 = HEAP32[$295>>2]|0; $297 = $7; $298 = (($296) + ($297<<3)|0); $299 = $298; $300 = $299; $301 = HEAP32[$300>>2]|0; $302 = (($299) + 4)|0; $303 = $302; $304 = HEAP32[$303>>2]|0; $305 = (_i64Add(($301|0),($304|0),($289|0),($292|0))|0); $306 = tempRet0; $307 = $298; $308 = $307; HEAP32[$308>>2] = $305; $309 = (($307) + 4)|0; $310 = $309; HEAP32[$310>>2] = $306; $311 = $66; $312 = (($311) + 1)|0; $66 = $312; } __ZN6laszip13decompressors7integerD2Ev($64); __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($63); __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEED2Ev($62); STACKTOP = sp;return; } function __ZN6laszip7streams13memory_stream5clearEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 12|0); HEAP8[$3>>0] = 0; $4 = ((($2)) + 13|0); HEAP8[$4>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE5resetEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 8|0); HEAP32[$3>>2] = 0; $4 = ((($2)) + 4|0); HEAP32[$4>>2] = 0; STACKTOP = sp;return; } function __ZNSt3__211char_traitsIcE6lengthEPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = (_strlen($2)|0); STACKTOP = sp;return ($3|0); } function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0); $38 = sp + 8|0; $40 = sp + 218|0; $48 = sp; $51 = sp + 217|0; $58 = sp + 216|0; $52 = $0; $53 = $1; $54 = $2; $59 = $52; $60 = $53; $61 = $54; $49 = $60; $50 = $61; $62 = $49; $63 = $50; ;HEAP8[$48>>0]=HEAP8[$51>>0]|0; $46 = $62; $47 = $63; $64 = $47; $65 = $46; $66 = $64; $67 = $65; $68 = (($66) - ($67))|0; $55 = $68; $69 = $55; $44 = $59; $70 = $44; $43 = $70; $71 = $43; $42 = $71; $72 = $42; $41 = $72; $73 = $41; $39 = $73; $74 = $39; ;HEAP8[$38>>0]=HEAP8[$40>>0]|0; $37 = $74; $75 = $37; $36 = $75; $45 = -1; $76 = $45; $77 = (($76) - 16)|0; $78 = ($69>>>0)>($77>>>0); if ($78) { __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($59); // unreachable; } $79 = $55; $80 = ($79>>>0)<(11); $81 = $55; if ($80) { $34 = $59; $35 = $81; $82 = $34; $83 = $35; $84 = $83&255; $33 = $82; $85 = $33; $32 = $85; $86 = $32; $87 = ((($86)) + 11|0); HEAP8[$87>>0] = $84; $12 = $59; $88 = $12; $11 = $88; $89 = $11; $10 = $89; $90 = $10; $9 = $90; $91 = $9; $8 = $91; $92 = $8; $56 = $92; } else { $4 = $81; $93 = $4; $94 = ($93>>>0)<(11); if ($94) { $101 = 11; } else { $95 = $4; $96 = (($95) + 1)|0; $3 = $96; $97 = $3; $98 = (($97) + 15)|0; $99 = $98 & -16; $101 = $99; } $100 = (($101) - 1)|0; $57 = $100; $7 = $59; $102 = $7; $6 = $102; $103 = $6; $5 = $103; $104 = $5; $105 = $57; $106 = (($105) + 1)|0; $18 = $104; $19 = $106; $107 = $18; $108 = $19; $15 = $107; $16 = $108; $17 = 0; $109 = $15; $14 = $109; $110 = $16; $13 = $110; $111 = $13; $112 = (__Znwj($111)|0); $56 = $112; $113 = $56; $22 = $59; $23 = $113; $114 = $22; $115 = $23; $21 = $114; $116 = $21; $20 = $116; $117 = $20; HEAP32[$117>>2] = $115; $118 = $57; $119 = (($118) + 1)|0; $26 = $59; $27 = $119; $120 = $26; $121 = $27; $122 = -2147483648 | $121; $25 = $120; $123 = $25; $24 = $123; $124 = $24; $125 = ((($124)) + 8|0); HEAP32[$125>>2] = $122; $126 = $55; $30 = $59; $31 = $126; $127 = $30; $128 = $31; $29 = $127; $129 = $29; $28 = $129; $130 = $28; $131 = ((($130)) + 4|0); HEAP32[$131>>2] = $128; } while(1) { $132 = $53; $133 = $54; $134 = ($132|0)!=($133|0); $135 = $56; if (!($134)) { break; } $136 = $53; __ZNSt3__211char_traitsIcE6assignERcRKc($135,$136); $137 = $53; $138 = ((($137)) + 1|0); $53 = $138; $139 = $56; $140 = ((($139)) + 1|0); $56 = $140; } HEAP8[$58>>0] = 0; __ZNSt3__211char_traitsIcE6assignERcRKc($135,$58); STACKTOP = sp;return; } function __ZNSt3__211char_traitsIcE6assignERcRKc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $3; $5 = HEAP8[$4>>0]|0; $6 = $2; HEAP8[$6>>0] = $5; STACKTOP = sp;return; } function __ZN6laszip13invalid_magicD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13invalid_magicD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2IZNS2_6reader10basic_fileINS1_7streams13memory_streamEE11_validatorsEvEUlS4_E_vEET_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; var $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0); $10 = sp + 96|0; $11 = sp + 88|0; $12 = sp + 80|0; $13 = sp + 72|0; $17 = sp + 235|0; $18 = sp + 234|0; $19 = sp + 233|0; $20 = sp + 232|0; $22 = sp + 172|0; $25 = sp + 231|0; $30 = sp + 64|0; $31 = sp + 56|0; $32 = sp + 48|0; $36 = sp + 40|0; $37 = sp + 32|0; $38 = sp + 24|0; $41 = sp + 230|0; $42 = sp + 124|0; $43 = sp + 229|0; $44 = sp + 228|0; $45 = sp + 227|0; $46 = sp + 226|0; $47 = sp + 16|0; $48 = sp + 8|0; $49 = sp; $53 = sp + 225|0; $54 = sp + 108|0; $55 = sp + 224|0; $57 = $0; $58 = $57; $59 = ((($58)) + 16|0); HEAP32[$59>>2] = 0; $56 = $1; $2 = $1; $60 = $2; $51 = $58; $52 = $60; $61 = $51; $50 = $61; $62 = $50; HEAP32[$62>>2] = (1704); HEAP32[$61>>2] = (1660); $63 = ((($61)) + 4|0); $64 = $52; $3 = $64; $65 = $3; $23 = $65; $66 = $23; $21 = $66; $67 = $21; $15 = $22; $16 = $67; $68 = $15; $69 = $16; $14 = $69; $70 = $14; ;HEAP8[$10>>0]=HEAP8[$20>>0]|0; ;HEAP8[$11>>0]=HEAP8[$19>>0]|0; ;HEAP8[$12>>0]=HEAP8[$18>>0]|0; ;HEAP8[$13>>0]=HEAP8[$17>>0]|0; $8 = $68; $9 = $70; $71 = $8; $72 = $9; $7 = $72; $73 = $7; $5 = $71; $6 = $73; $74 = $5; $75 = $6; $4 = $75; $76 = $4; HEAP32[$74>>2] = $76; $77 = HEAP32[$22>>2]|0; HEAP32[$54>>2] = $77; $24 = $25; ;HEAP8[$47>>0]=HEAP8[$55>>0]|0; ;HEAP8[$48>>0]=HEAP8[$54>>0]|0;HEAP8[$48+1>>0]=HEAP8[$54+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$54+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$54+3>>0]|0; ;HEAP8[$49>>0]=HEAP8[$53>>0]|0; $40 = $63; $78 = $40; $39 = $48; $79 = $39; ;HEAP32[$42>>2]=HEAP32[$79>>2]|0; ;HEAP8[$30>>0]=HEAP8[$43>>0]|0; ;HEAP8[$31>>0]=HEAP8[$42>>0]|0;HEAP8[$31+1>>0]=HEAP8[$42+1>>0]|0;HEAP8[$31+2>>0]=HEAP8[$42+2>>0]|0;HEAP8[$31+3>>0]=HEAP8[$42+3>>0]|0; ;HEAP8[$32>>0]=HEAP8[$41>>0]|0; $29 = $78; $28 = $31; $80 = $28; $27 = $80; $81 = $27; $82 = HEAP32[$81>>2]|0; $26 = $82; $33 = $47; ;HEAP8[$36>>0]=HEAP8[$46>>0]|0; ;HEAP8[$37>>0]=HEAP8[$45>>0]|0; ;HEAP8[$38>>0]=HEAP8[$44>>0]|0; $35 = $78; $83 = $35; $34 = $83; $84 = ((($58)) + 16|0); HEAP32[$84>>2] = $58; STACKTOP = sp;return; } function __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE21__push_back_slow_pathIS7_EEvOT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0; var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0; var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0; var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0; var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0; var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); $10 = sp + 8|0; $15 = sp + 193|0; $24 = sp; $27 = sp + 192|0; $35 = sp + 72|0; $38 = sp + 60|0; $46 = sp + 12|0; $43 = $0; $44 = $1; $47 = $43; $42 = $47; $48 = $42; $49 = ((($48)) + 8|0); $41 = $49; $50 = $41; $40 = $50; $51 = $40; $45 = $51; $39 = $47; $52 = $39; $53 = ((($52)) + 4|0); $54 = HEAP32[$53>>2]|0; $55 = HEAP32[$52>>2]|0; $56 = $54; $57 = $55; $58 = (($56) - ($57))|0; $59 = (($58|0) / 24)&-1; $60 = (($59) + 1)|0; $34 = $47; HEAP32[$35>>2] = $60; $61 = $34; $62 = (__ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($61)|0); $36 = $62; $63 = HEAP32[$35>>2]|0; $64 = $36; $65 = ($63>>>0)>($64>>>0); if ($65) { __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61); // unreachable; } $32 = $61; $66 = $32; $31 = $66; $67 = $31; $30 = $67; $68 = $30; $69 = ((($68)) + 8|0); $29 = $69; $70 = $29; $28 = $70; $71 = $28; $72 = HEAP32[$71>>2]|0; $73 = HEAP32[$67>>2]|0; $74 = $72; $75 = $73; $76 = (($74) - ($75))|0; $77 = (($76|0) / 24)&-1; $37 = $77; $78 = $37; $79 = $36; $80 = (($79>>>0) / 2)&-1; $81 = ($78>>>0)>=($80>>>0); if ($81) { $82 = $36; $33 = $82; } else { $83 = $37; $84 = $83<<1; HEAP32[$38>>2] = $84; $25 = $38; $26 = $35; $85 = $25; $86 = $26; ;HEAP8[$24>>0]=HEAP8[$27>>0]|0; $22 = $85; $23 = $86; $87 = $22; $88 = $23; $19 = $24; $20 = $87; $21 = $88; $89 = $20; $90 = HEAP32[$89>>2]|0; $91 = $21; $92 = HEAP32[$91>>2]|0; $93 = ($90>>>0)<($92>>>0); $94 = $23; $95 = $22; $96 = $93 ? $94 : $95; $97 = HEAP32[$96>>2]|0; $33 = $97; } $98 = $33; $18 = $47; $99 = $18; $100 = ((($99)) + 4|0); $101 = HEAP32[$100>>2]|0; $102 = HEAP32[$99>>2]|0; $103 = $101; $104 = $102; $105 = (($103) - ($104))|0; $106 = (($105|0) / 24)&-1; $107 = $45; __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($46,$98,$106,$107); $108 = $45; $109 = ((($46)) + 8|0); $110 = HEAP32[$109>>2]|0; $17 = $110; $111 = $17; $112 = $44; $16 = $112; $113 = $16; $12 = $108; $13 = $111; $14 = $113; $114 = $12; $115 = $13; $116 = $14; $11 = $116; $117 = $11; ;HEAP8[$10>>0]=HEAP8[$15>>0]|0; $7 = $114; $8 = $115; $9 = $117; $118 = $7; $119 = $8; $120 = $9; $6 = $120; $121 = $6; $3 = $118; $4 = $119; $5 = $121; $122 = $4; $123 = $5; $2 = $123; $124 = $2; __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($122,$124); $125 = ((($46)) + 8|0); $126 = HEAP32[$125>>2]|0; $127 = ((($126)) + 24|0); HEAP32[$125>>2] = $127; __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($47,$46); __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($46); STACKTOP = sp;return; } function __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; $6 = ((($5)) + 16|0); $7 = HEAP32[$6>>2]|0; $8 = ($7|0)==(0|0); if ($8) { $9 = ((($4)) + 16|0); HEAP32[$9>>2] = 0; STACKTOP = sp;return; } $10 = $3; $11 = ((($10)) + 16|0); $12 = HEAP32[$11>>2]|0; $13 = $3; $14 = ($12|0)==($13|0); if ($14) { $15 = (__ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($4)|0); $16 = ((($4)) + 16|0); HEAP32[$16>>2] = $15; $17 = $3; $18 = ((($17)) + 16|0); $19 = HEAP32[$18>>2]|0; $20 = HEAP32[$19>>2]|0; $21 = ((($20)) + 12|0); $22 = HEAP32[$21>>2]|0; $23 = ((($4)) + 16|0); $24 = HEAP32[$23>>2]|0; FUNCTION_TABLE_vii[$22 & 255]($19,$24); STACKTOP = sp;return; } else { $25 = $3; $26 = ((($25)) + 16|0); $27 = HEAP32[$26>>2]|0; $28 = ((($4)) + 16|0); HEAP32[$28>>2] = $27; $29 = $3; $30 = ((($29)) + 16|0); HEAP32[$30>>2] = 0; STACKTOP = sp;return; } } function __ZNSt3__28functionIFvRN6laszip2io6headerEEE9__as_baseEPv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; STACKTOP = sp;return ($2|0); } function __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEEC2EjjSA_($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $35 = sp; $31 = $0; $32 = $1; $33 = $2; $34 = $3; $36 = $31; $37 = ((($36)) + 12|0); HEAP32[$35>>2] = 0; $38 = $34; $28 = $37; $29 = $35; $30 = $38; $39 = $28; $40 = $29; $27 = $40; $41 = $27; $21 = $39; $22 = $41; $42 = $21; $43 = $22; $20 = $43; HEAP32[$42>>2] = 0; $44 = ((($39)) + 4|0); $45 = $30; $23 = $45; $46 = $23; $25 = $44; $26 = $46; $47 = $25; $48 = $26; $24 = $48; $49 = $24; HEAP32[$47>>2] = $49; $50 = $32; $51 = ($50|0)!=(0); do { if ($51) { $6 = $36; $52 = $6; $53 = ((($52)) + 12|0); $5 = $53; $54 = $5; $55 = ((($54)) + 4|0); $4 = $55; $56 = $4; $57 = HEAP32[$56>>2]|0; $58 = $32; $15 = $57; $16 = $58; $59 = $15; $60 = $16; $12 = $59; $13 = $60; $14 = 0; $61 = $12; $62 = $13; $11 = $61; $63 = ($62>>>0)>(178956970); if ($63) { $9 = 4287; $64 = (___cxa_allocate_exception(8)|0); $65 = $9; $7 = $64; $8 = $65; $66 = $7; $67 = $8; __ZNSt11logic_errorC2EPKc($66,$67); HEAP32[$66>>2] = (3660); ___cxa_throw(($64|0),(1384|0),(220|0)); // unreachable; } else { $68 = $13; $69 = ($68*24)|0; $10 = $69; $70 = $10; $71 = (__Znwj($70)|0); $72 = $71; break; } } else { $72 = 0; } } while(0); HEAP32[$36>>2] = $72; $73 = HEAP32[$36>>2]|0; $74 = $33; $75 = (($73) + (($74*24)|0)|0); $76 = ((($36)) + 8|0); HEAP32[$76>>2] = $75; $77 = ((($36)) + 4|0); HEAP32[$77>>2] = $75; $78 = HEAP32[$36>>2]|0; $79 = $32; $80 = (($78) + (($79*24)|0)|0); $19 = $36; $81 = $19; $82 = ((($81)) + 12|0); $18 = $82; $83 = $18; $17 = $83; $84 = $17; HEAP32[$84>>2] = $80; STACKTOP = sp;return; } function __ZNSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS7_RS9_EE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0; var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0; var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0; var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0; var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0); $15 = sp; $20 = sp + 404|0; $31 = sp + 292|0; $37 = sp + 268|0; $49 = sp + 220|0; $102 = $0; $103 = $1; $104 = $102; $101 = $104; $105 = $101; $100 = $105; $106 = $100; $107 = HEAP32[$106>>2]|0; $99 = $107; $108 = $99; $78 = $105; $109 = $78; $110 = HEAP32[$109>>2]|0; $77 = $110; $111 = $77; $83 = $105; $112 = $83; $82 = $112; $113 = $82; $81 = $113; $114 = $81; $115 = ((($114)) + 8|0); $80 = $115; $116 = $80; $79 = $116; $117 = $79; $118 = HEAP32[$117>>2]|0; $119 = HEAP32[$113>>2]|0; $120 = $118; $121 = $119; $122 = (($120) - ($121))|0; $123 = (($122|0) / 24)&-1; $124 = (($111) + (($123*24)|0)|0); $85 = $105; $125 = $85; $126 = HEAP32[$125>>2]|0; $84 = $126; $127 = $84; $86 = $105; $128 = $86; $129 = ((($128)) + 4|0); $130 = HEAP32[$129>>2]|0; $131 = HEAP32[$128>>2]|0; $132 = $130; $133 = $131; $134 = (($132) - ($133))|0; $135 = (($134|0) / 24)&-1; $136 = (($127) + (($135*24)|0)|0); $88 = $105; $137 = $88; $138 = HEAP32[$137>>2]|0; $87 = $138; $139 = $87; $93 = $105; $140 = $93; $92 = $140; $141 = $92; $91 = $141; $142 = $91; $143 = ((($142)) + 8|0); $90 = $143; $144 = $90; $89 = $144; $145 = $89; $146 = HEAP32[$145>>2]|0; $147 = HEAP32[$141>>2]|0; $148 = $146; $149 = $147; $150 = (($148) - ($149))|0; $151 = (($150|0) / 24)&-1; $152 = (($139) + (($151*24)|0)|0); $94 = $105; $95 = $108; $96 = $124; $97 = $136; $98 = $152; $4 = $104; $153 = $4; $154 = ((($153)) + 8|0); $3 = $154; $155 = $3; $2 = $155; $156 = $2; $157 = HEAP32[$104>>2]|0; $158 = ((($104)) + 4|0); $159 = HEAP32[$158>>2]|0; $160 = $103; $161 = ((($160)) + 4|0); $22 = $156; $23 = $157; $24 = $159; $25 = $161; while(1) { $162 = $24; $163 = $23; $164 = ($162|0)!=($163|0); if (!($164)) { break; } $165 = $22; $166 = $25; $167 = HEAP32[$166>>2]|0; $168 = ((($167)) + -24|0); $21 = $168; $169 = $21; $170 = $24; $171 = ((($170)) + -24|0); $24 = $171; $6 = $171; $172 = $6; $5 = $172; $173 = $5; $17 = $165; $18 = $169; $19 = $173; $174 = $17; $175 = $18; $176 = $19; $16 = $176; $177 = $16; ;HEAP8[$15>>0]=HEAP8[$20>>0]|0; $12 = $174; $13 = $175; $14 = $177; $178 = $12; $179 = $13; $180 = $14; $11 = $180; $181 = $11; $8 = $178; $9 = $179; $10 = $181; $182 = $9; $183 = $10; $7 = $183; $184 = $7; __ZNSt3__28functionIFvRN6laszip2io6headerEEEC2EOS6_($182,$184); $185 = $25; $186 = HEAP32[$185>>2]|0; $187 = ((($186)) + -24|0); HEAP32[$185>>2] = $187; } $188 = $103; $189 = ((($188)) + 4|0); $29 = $104; $30 = $189; $190 = $29; $28 = $190; $191 = $28; $192 = HEAP32[$191>>2]|0; HEAP32[$31>>2] = $192; $193 = $30; $26 = $193; $194 = $26; $195 = HEAP32[$194>>2]|0; $196 = $29; HEAP32[$196>>2] = $195; $27 = $31; $197 = $27; $198 = HEAP32[$197>>2]|0; $199 = $30; HEAP32[$199>>2] = $198; $200 = ((($104)) + 4|0); $201 = $103; $202 = ((($201)) + 8|0); $35 = $200; $36 = $202; $203 = $35; $34 = $203; $204 = $34; $205 = HEAP32[$204>>2]|0; HEAP32[$37>>2] = $205; $206 = $36; $32 = $206; $207 = $32; $208 = HEAP32[$207>>2]|0; $209 = $35; HEAP32[$209>>2] = $208; $33 = $37; $210 = $33; $211 = HEAP32[$210>>2]|0; $212 = $36; HEAP32[$212>>2] = $211; $40 = $104; $213 = $40; $214 = ((($213)) + 8|0); $39 = $214; $215 = $39; $38 = $215; $216 = $38; $217 = $103; $43 = $217; $218 = $43; $219 = ((($218)) + 12|0); $42 = $219; $220 = $42; $41 = $220; $221 = $41; $47 = $216; $48 = $221; $222 = $47; $46 = $222; $223 = $46; $224 = HEAP32[$223>>2]|0; HEAP32[$49>>2] = $224; $225 = $48; $44 = $225; $226 = $44; $227 = HEAP32[$226>>2]|0; $228 = $47; HEAP32[$228>>2] = $227; $45 = $49; $229 = $45; $230 = HEAP32[$229>>2]|0; $231 = $48; HEAP32[$231>>2] = $230; $232 = $103; $233 = ((($232)) + 4|0); $234 = HEAP32[$233>>2]|0; $235 = $103; HEAP32[$235>>2] = $234; $50 = $104; $236 = $50; $237 = ((($236)) + 4|0); $238 = HEAP32[$237>>2]|0; $239 = HEAP32[$236>>2]|0; $240 = $238; $241 = $239; $242 = (($240) - ($241))|0; $243 = (($242|0) / 24)&-1; $74 = $104; $75 = $243; $244 = $74; $73 = $244; $245 = $73; $246 = HEAP32[$245>>2]|0; $72 = $246; $247 = $72; $52 = $244; $248 = $52; $249 = HEAP32[$248>>2]|0; $51 = $249; $250 = $51; $57 = $244; $251 = $57; $56 = $251; $252 = $56; $55 = $252; $253 = $55; $254 = ((($253)) + 8|0); $54 = $254; $255 = $54; $53 = $255; $256 = $53; $257 = HEAP32[$256>>2]|0; $258 = HEAP32[$252>>2]|0; $259 = $257; $260 = $258; $261 = (($259) - ($260))|0; $262 = (($261|0) / 24)&-1; $263 = (($250) + (($262*24)|0)|0); $59 = $244; $264 = $59; $265 = HEAP32[$264>>2]|0; $58 = $265; $266 = $58; $64 = $244; $267 = $64; $63 = $267; $268 = $63; $62 = $268; $269 = $62; $270 = ((($269)) + 8|0); $61 = $270; $271 = $61; $60 = $271; $272 = $60; $273 = HEAP32[$272>>2]|0; $274 = HEAP32[$268>>2]|0; $275 = $273; $276 = $274; $277 = (($275) - ($276))|0; $278 = (($277|0) / 24)&-1; $279 = (($266) + (($278*24)|0)|0); $66 = $244; $280 = $66; $281 = HEAP32[$280>>2]|0; $65 = $281; $282 = $65; $283 = $75; $284 = (($282) + (($283*24)|0)|0); $67 = $244; $68 = $247; $69 = $263; $70 = $279; $71 = $284; $76 = $104; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferINS_8functionIFvRN6laszip2io6headerEEEERNS_9allocatorIS7_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $19 = sp + 8|0; $22 = sp + 133|0; $29 = sp; $32 = sp + 132|0; $34 = $0; $35 = $34; $33 = $35; $36 = $33; $37 = ((($36)) + 4|0); $38 = HEAP32[$37>>2]|0; $30 = $36; $31 = $38; $39 = $30; $40 = $31; ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; $27 = $39; $28 = $40; $41 = $27; while(1) { $42 = $28; $43 = ((($41)) + 8|0); $44 = HEAP32[$43>>2]|0; $45 = ($42|0)!=($44|0); if (!($45)) { break; } $26 = $41; $46 = $26; $47 = ((($46)) + 12|0); $25 = $47; $48 = $25; $49 = ((($48)) + 4|0); $24 = $49; $50 = $24; $51 = HEAP32[$50>>2]|0; $52 = ((($41)) + 8|0); $53 = HEAP32[$52>>2]|0; $54 = ((($53)) + -24|0); HEAP32[$52>>2] = $54; $23 = $54; $55 = $23; $20 = $51; $21 = $55; $56 = $20; $57 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $56; $18 = $57; $58 = $17; $59 = $18; $15 = $58; $16 = $59; $60 = $16; __ZNSt3__28functionIFvRN6laszip2io6headerEEED2Ev($60); } $61 = HEAP32[$35>>2]|0; $62 = ($61|0)!=(0|0); if (!($62)) { STACKTOP = sp;return; } $14 = $35; $63 = $14; $64 = ((($63)) + 12|0); $13 = $64; $65 = $13; $66 = ((($65)) + 4|0); $12 = $66; $67 = $12; $68 = HEAP32[$67>>2]|0; $69 = HEAP32[$35>>2]|0; $11 = $35; $70 = $11; $10 = $70; $71 = $10; $72 = ((($71)) + 12|0); $9 = $72; $73 = $9; $8 = $73; $74 = $8; $75 = HEAP32[$74>>2]|0; $76 = HEAP32[$70>>2]|0; $77 = $75; $78 = $76; $79 = (($77) - ($78))|0; $80 = (($79|0) / 24)&-1; $5 = $68; $6 = $69; $7 = $80; $81 = $5; $82 = $6; $83 = $7; $2 = $81; $3 = $82; $4 = $83; $84 = $3; $1 = $84; $85 = $1; __ZdlPv($85); STACKTOP = sp;return; } function __ZNKSt3__26vectorINS_8functionIFvRN6laszip2io6headerEEEENS_9allocatorIS7_EEE8max_sizeEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $6 = sp + 8|0; $9 = sp + 77|0; $12 = sp; $14 = sp + 76|0; $19 = sp + 16|0; $20 = sp + 12|0; $18 = $0; $21 = $18; $17 = $21; $22 = $17; $23 = ((($22)) + 8|0); $16 = $23; $24 = $16; $15 = $24; $25 = $15; $13 = $25; $26 = $13; ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; $11 = $26; $27 = $11; $10 = $27; HEAP32[$19>>2] = 178956970; HEAP32[$20>>2] = 2147483647; $7 = $19; $8 = $20; $28 = $7; $29 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $28; $5 = $29; $30 = $5; $31 = $4; $1 = $6; $2 = $30; $3 = $31; $32 = $2; $33 = HEAP32[$32>>2]|0; $34 = $3; $35 = HEAP32[$34>>2]|0; $36 = ($33>>>0)<($35>>>0); $37 = $5; $38 = $4; $39 = $36 ? $37 : $38; $40 = HEAP32[$39>>2]|0; STACKTOP = sp;return ($40|0); } function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $2; $1 = $3; STACKTOP = sp;return; } function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0; var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0; var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0; var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0; var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0; var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0; var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0; var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0; var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0; var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0; var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0; var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 608|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(608|0); $7 = sp + 128|0; $8 = sp + 120|0; $9 = sp + 112|0; $10 = sp + 104|0; $13 = sp + 594|0; $14 = sp + 593|0; $15 = sp + 592|0; $16 = sp + 591|0; $18 = sp + 540|0; $27 = sp + 96|0; $28 = sp + 88|0; $29 = sp + 80|0; $30 = sp + 72|0; $34 = sp + 590|0; $35 = sp + 589|0; $36 = sp + 588|0; $37 = sp + 587|0; $39 = sp + 488|0; $45 = sp + 64|0; $46 = sp + 56|0; $47 = sp + 48|0; $53 = sp + 40|0; $54 = sp + 32|0; $55 = sp + 24|0; $58 = sp + 586|0; $59 = sp + 436|0; $60 = sp + 585|0; $61 = sp + 584|0; $62 = sp + 432|0; $63 = sp + 583|0; $64 = sp + 16|0; $65 = sp + 8|0; $66 = sp; $71 = sp + 582|0; $72 = sp + 412|0; $73 = sp + 408|0; $100 = sp + 300|0; $137 = sp + 581|0; $138 = sp + 144|0; $139 = sp + 136|0; $140 = sp + 580|0; $136 = $0; $141 = $136; $142 = ((($141)) + 4|0); $135 = $142; $143 = $135; $134 = $143; $144 = $134; $132 = $137; $133 = $144; $110 = $137; $111 = 1; $112 = 0; $145 = $110; $146 = $111; $109 = $145; $147 = ($146>>>0)>(536870911); if ($147) { $107 = 4287; $148 = (___cxa_allocate_exception(8)|0); $149 = $107; $105 = $148; $106 = $149; $150 = $105; $151 = $106; __ZNSt11logic_errorC2EPKc($150,$151); HEAP32[$150>>2] = (3660); ___cxa_throw(($148|0),(1384|0),(220|0)); // unreachable; } $152 = $111; $153 = $152<<3; $108 = $153; $154 = $108; $155 = (__Znwj($154)|0); $102 = $139; $103 = $137; $104 = 1; $156 = $102; $157 = $103; HEAP32[$156>>2] = $157; $158 = ((($156)) + 4|0); $159 = $104; HEAP32[$158>>2] = $159; $99 = $138; HEAP32[$100>>2] = $155; $101 = $139; $160 = $99; $161 = $101; $98 = $161; $162 = $98; $95 = $160; $96 = $100; $97 = $162; $163 = $95; $164 = $96; $94 = $164; $165 = $94; $88 = $163; $89 = $165; $166 = $88; $167 = $89; $87 = $167; $168 = $87; $169 = HEAP32[$168>>2]|0; HEAP32[$166>>2] = $169; $170 = ((($163)) + 4|0); $171 = $97; $90 = $171; $172 = $90; $92 = $170; $93 = $172; $173 = $92; $174 = $93; $91 = $174; $175 = $91; ;HEAP32[$173>>2]=HEAP32[$175>>2]|0;HEAP32[$173+4>>2]=HEAP32[$175+4>>2]|0; $86 = $138; $176 = $86; $85 = $176; $177 = $85; $84 = $177; $178 = $84; $179 = HEAP32[$178>>2]|0; $180 = ((($141)) + 4|0); $83 = $180; $181 = $83; $82 = $181; $182 = $82; $80 = $140; $81 = $137; $68 = $179; $69 = $182; $70 = $140; $183 = $68; $67 = $183; $184 = $67; HEAP32[$184>>2] = (1704); HEAP32[$183>>2] = (1660); $185 = ((($183)) + 4|0); $186 = $69; $19 = $186; $187 = $19; $17 = $187; $188 = $17; $11 = $18; $12 = $188; $189 = $11; $190 = $12; ;HEAP8[$7>>0]=HEAP8[$16>>0]|0; ;HEAP8[$8>>0]=HEAP8[$15>>0]|0; ;HEAP8[$9>>0]=HEAP8[$14>>0]|0; ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; $5 = $189; $6 = $190; $191 = $5; $192 = $6; $4 = $192; $193 = $4; $2 = $191; $3 = $193; $194 = $2; $195 = $3; $1 = $195; $196 = $1; HEAP32[$194>>2] = $196; $197 = HEAP32[$18>>2]|0; HEAP32[$72>>2] = $197; $198 = $70; $20 = $198; $199 = $20; $40 = $199; $200 = $40; $38 = $200; $201 = $38; $32 = $39; $33 = $201; $202 = $32; $203 = $33; $31 = $203; $204 = $31; ;HEAP8[$27>>0]=HEAP8[$37>>0]|0; ;HEAP8[$28>>0]=HEAP8[$36>>0]|0; ;HEAP8[$29>>0]=HEAP8[$35>>0]|0; ;HEAP8[$30>>0]=HEAP8[$34>>0]|0; $25 = $202; $26 = $204; $205 = $25; $206 = $26; $24 = $206; $207 = $24; $22 = $205; $23 = $207; $208 = $22; $209 = $23; $21 = $209; $210 = $21; HEAP32[$208>>2] = $210; $211 = HEAP32[$39>>2]|0; HEAP32[$73>>2] = $211; ;HEAP8[$64>>0]=HEAP8[$73>>0]|0;HEAP8[$64+1>>0]=HEAP8[$73+1>>0]|0;HEAP8[$64+2>>0]=HEAP8[$73+2>>0]|0;HEAP8[$64+3>>0]=HEAP8[$73+3>>0]|0; ;HEAP8[$65>>0]=HEAP8[$72>>0]|0;HEAP8[$65+1>>0]=HEAP8[$72+1>>0]|0;HEAP8[$65+2>>0]=HEAP8[$72+2>>0]|0;HEAP8[$65+3>>0]=HEAP8[$72+3>>0]|0; ;HEAP8[$66>>0]=HEAP8[$71>>0]|0; $57 = $185; $212 = $57; $56 = $65; $213 = $56; ;HEAP32[$59>>2]=HEAP32[$213>>2]|0; ;HEAP8[$45>>0]=HEAP8[$60>>0]|0; ;HEAP8[$46>>0]=HEAP8[$59>>0]|0;HEAP8[$46+1>>0]=HEAP8[$59+1>>0]|0;HEAP8[$46+2>>0]=HEAP8[$59+2>>0]|0;HEAP8[$46+3>>0]=HEAP8[$59+3>>0]|0; ;HEAP8[$47>>0]=HEAP8[$58>>0]|0; $44 = $212; $43 = $46; $214 = $43; $42 = $214; $215 = $42; $216 = HEAP32[$215>>2]|0; $41 = $216; $48 = $64; $217 = $48; ;HEAP32[$62>>2]=HEAP32[$217>>2]|0; ;HEAP8[$53>>0]=HEAP8[$63>>0]|0; ;HEAP8[$54>>0]=HEAP8[$62>>0]|0;HEAP8[$54+1>>0]=HEAP8[$62+1>>0]|0;HEAP8[$54+2>>0]=HEAP8[$62+2>>0]|0;HEAP8[$54+3>>0]=HEAP8[$62+3>>0]|0; ;HEAP8[$55>>0]=HEAP8[$61>>0]|0; $52 = $212; $51 = $54; $218 = $51; $50 = $218; $219 = $50; $220 = HEAP32[$219>>2]|0; $49 = $220; $78 = $138; $221 = $78; $77 = $221; $222 = $77; $76 = $222; $223 = $76; $224 = HEAP32[$223>>2]|0; $79 = $224; $75 = $221; $225 = $75; $74 = $225; $226 = $74; HEAP32[$226>>2] = 0; $227 = $79; $131 = $138; $228 = $131; $128 = $228; $129 = 0; $229 = $128; $127 = $229; $230 = $127; $126 = $230; $231 = $126; $232 = HEAP32[$231>>2]|0; $130 = $232; $233 = $129; $116 = $229; $234 = $116; $115 = $234; $235 = $115; HEAP32[$235>>2] = $233; $236 = $130; $237 = ($236|0)!=(0|0); if (!($237)) { STACKTOP = sp;return ($227|0); } $114 = $229; $238 = $114; $239 = ((($238)) + 4|0); $113 = $239; $240 = $113; $241 = $130; $124 = $240; $125 = $241; $242 = $124; $243 = HEAP32[$242>>2]|0; $244 = $125; $245 = ((($242)) + 4|0); $246 = HEAP32[$245>>2]|0; $121 = $243; $122 = $244; $123 = $246; $247 = $121; $248 = $122; $249 = $123; $118 = $247; $119 = $248; $120 = $249; $250 = $119; $117 = $250; $251 = $117; __ZdlPv($251); STACKTOP = sp;return ($227|0); } function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEPNS0_6__baseISE_EE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0; var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0; var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0; var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0; var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0; var $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); $10 = sp + 128|0; $11 = sp + 120|0; $12 = sp + 112|0; $13 = sp + 104|0; $16 = sp + 332|0; $17 = sp + 331|0; $18 = sp + 330|0; $19 = sp + 329|0; $21 = sp + 272|0; $29 = sp + 96|0; $30 = sp + 88|0; $31 = sp + 80|0; $32 = sp + 72|0; $35 = sp + 328|0; $36 = sp + 327|0; $37 = sp + 326|0; $38 = sp + 325|0; $40 = sp + 228|0; $46 = sp + 64|0; $47 = sp + 56|0; $48 = sp + 48|0; $54 = sp + 40|0; $55 = sp + 32|0; $56 = sp + 24|0; $59 = sp + 324|0; $60 = sp + 176|0; $61 = sp + 323|0; $62 = sp + 322|0; $63 = sp + 172|0; $64 = sp + 321|0; $65 = sp + 16|0; $66 = sp + 8|0; $67 = sp; $72 = sp + 320|0; $73 = sp + 152|0; $74 = sp + 148|0; $77 = $0; $78 = $1; $79 = $77; $80 = $78; $81 = ((($79)) + 4|0); $76 = $81; $82 = $76; $75 = $82; $83 = $75; $84 = ((($79)) + 4|0); $3 = $84; $85 = $3; $2 = $85; $86 = $2; $69 = $80; $70 = $83; $71 = $86; $87 = $69; $68 = $87; $88 = $68; HEAP32[$88>>2] = (1704); HEAP32[$87>>2] = (1660); $89 = ((($87)) + 4|0); $90 = $70; $22 = $90; $91 = $22; $20 = $91; $92 = $20; $14 = $21; $15 = $92; $93 = $14; $94 = $15; ;HEAP8[$10>>0]=HEAP8[$19>>0]|0; ;HEAP8[$11>>0]=HEAP8[$18>>0]|0; ;HEAP8[$12>>0]=HEAP8[$17>>0]|0; ;HEAP8[$13>>0]=HEAP8[$16>>0]|0; $8 = $93; $9 = $94; $95 = $8; $96 = $9; $7 = $96; $97 = $7; $5 = $95; $6 = $97; $98 = $5; $99 = $6; $4 = $99; $100 = $4; HEAP32[$98>>2] = $100; $101 = HEAP32[$21>>2]|0; HEAP32[$73>>2] = $101; $102 = $71; $41 = $102; $103 = $41; $39 = $103; $104 = $39; $33 = $40; $34 = $104; $105 = $33; $106 = $34; ;HEAP8[$29>>0]=HEAP8[$38>>0]|0; ;HEAP8[$30>>0]=HEAP8[$37>>0]|0; ;HEAP8[$31>>0]=HEAP8[$36>>0]|0; ;HEAP8[$32>>0]=HEAP8[$35>>0]|0; $27 = $105; $28 = $106; $107 = $27; $108 = $28; $26 = $108; $109 = $26; $24 = $107; $25 = $109; $110 = $24; $111 = $25; $23 = $111; $112 = $23; HEAP32[$110>>2] = $112; $113 = HEAP32[$40>>2]|0; HEAP32[$74>>2] = $113; ;HEAP8[$65>>0]=HEAP8[$74>>0]|0;HEAP8[$65+1>>0]=HEAP8[$74+1>>0]|0;HEAP8[$65+2>>0]=HEAP8[$74+2>>0]|0;HEAP8[$65+3>>0]=HEAP8[$74+3>>0]|0; ;HEAP8[$66>>0]=HEAP8[$73>>0]|0;HEAP8[$66+1>>0]=HEAP8[$73+1>>0]|0;HEAP8[$66+2>>0]=HEAP8[$73+2>>0]|0;HEAP8[$66+3>>0]=HEAP8[$73+3>>0]|0; ;HEAP8[$67>>0]=HEAP8[$72>>0]|0; $58 = $89; $114 = $58; $57 = $66; $115 = $57; ;HEAP32[$60>>2]=HEAP32[$115>>2]|0; ;HEAP8[$46>>0]=HEAP8[$61>>0]|0; ;HEAP8[$47>>0]=HEAP8[$60>>0]|0;HEAP8[$47+1>>0]=HEAP8[$60+1>>0]|0;HEAP8[$47+2>>0]=HEAP8[$60+2>>0]|0;HEAP8[$47+3>>0]=HEAP8[$60+3>>0]|0; ;HEAP8[$48>>0]=HEAP8[$59>>0]|0; $45 = $114; $44 = $47; $116 = $44; $43 = $116; $117 = $43; $118 = HEAP32[$117>>2]|0; $42 = $118; $49 = $65; $119 = $49; ;HEAP32[$63>>2]=HEAP32[$119>>2]|0; ;HEAP8[$54>>0]=HEAP8[$64>>0]|0; ;HEAP8[$55>>0]=HEAP8[$63>>0]|0;HEAP8[$55+1>>0]=HEAP8[$63+1>>0]|0;HEAP8[$55+2>>0]=HEAP8[$63+2>>0]|0;HEAP8[$55+3>>0]=HEAP8[$63+3>>0]|0; ;HEAP8[$56>>0]=HEAP8[$62>>0]|0; $53 = $114; $52 = $55; $120 = $52; $51 = $120; $121 = $51; $122 = HEAP32[$121>>2]|0; $50 = $122; STACKTOP = sp;return; } function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7destroyEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE18destroy_deallocateEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $10 = sp + 36|0; $9 = $0; $11 = $9; $12 = ((($11)) + 4|0); $8 = $12; $13 = $8; $7 = $13; $14 = $7; $1 = $10; $2 = $14; $4 = $10; $5 = $11; $6 = 1; $15 = $5; $3 = $15; $16 = $3; __ZdlPv($16); STACKTOP = sp;return; } function __ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EEclESA_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $5 = $0; $6 = $1; $7 = $5; $8 = ((($7)) + 4|0); $4 = $8; $9 = $4; $3 = $9; $10 = $3; $11 = $6; $2 = $11; $12 = $2; __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($10,$12); STACKTOP = sp;return; } function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE6targetERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $7 = $0; $8 = $1; $9 = $7; $10 = $8; $4 = $10; $5 = 128; $11 = $4; $12 = ((($11)) + 4|0); $13 = HEAP32[$12>>2]|0; $14 = $5; $15 = ((($14)) + 4|0); $16 = HEAP32[$15>>2]|0; $17 = ($13|0)==($16|0); if ($17) { $18 = ((($9)) + 4|0); $3 = $18; $19 = $3; $2 = $19; $20 = $2; $6 = $20; $21 = $6; STACKTOP = sp;return ($21|0); } else { $6 = 0; $21 = $6; STACKTOP = sp;return ($21|0); } return (0)|0; } function __ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE11target_typeEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return (128|0); } function __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED2Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED0Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; _llvm_trap(); // unreachable; } function __ZNSt3__228__invoke_void_return_wrapperIvE6__callIJRZN6laszip2io6reader10basic_fileINS3_7streams13memory_streamEE11_validatorsEvEUlRNS4_6headerEE_SB_EEEvDpOT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $8 = $0; $9 = $1; $10 = $8; $7 = $10; $11 = $7; $12 = $9; $2 = $12; $13 = $2; $5 = $11; $6 = $13; $14 = $5; $4 = $14; $15 = $4; $16 = $6; $3 = $16; $17 = $3; __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($15,$17); STACKTOP = sp;return; } function __ZZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE11_validatorsEvENKUlRNS0_6headerEE_clES7_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $6 = $3; $7 = ((($6)) + 104|0); $8 = HEAP8[$7>>0]|0; $9 = $8&255; $10 = $9 >> 7; $11 = $10 & 1; $4 = $11; $12 = $3; $13 = ((($12)) + 104|0); $14 = HEAP8[$13>>0]|0; $15 = $14&255; $16 = $15 >> 6; $17 = $16 & 1; $5 = $17; $18 = $4; $19 = ($18|0)==(1); $20 = $5; $21 = ($20|0)==(1); $or$cond = $19 & $21; if ($or$cond) { $22 = (___cxa_allocate_exception(8)|0); __ZN6laszip21old_style_compressionC2Ev($22); ___cxa_throw(($22|0),(96|0),(26|0)); // unreachable; } $23 = $4; $24 = $5; $25 = $23 ^ $24; $26 = ($25|0)==(0); if ($26) { $27 = (___cxa_allocate_exception(8)|0); __ZN6laszip14not_compressedC2Ev($27); ___cxa_throw(($27|0),(112|0),(28|0)); // unreachable; } else { $28 = $3; $29 = ((($28)) + 104|0); $30 = HEAP8[$29>>0]|0; $31 = $30&255; $32 = $31 & 63; $33 = $32&255; HEAP8[$29>>0] = $33; STACKTOP = sp;return; } } function __ZN6laszip21old_style_compressionC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,4640); HEAP32[$2>>2] = (1748); STACKTOP = sp;return; } function __ZN6laszip21old_style_compressionD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip14not_compressedC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,4708); HEAP32[$2>>2] = (1768); STACKTOP = sp;return; } function __ZN6laszip14not_compressedD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip21old_style_compressionD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip21old_style_compressionD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip14not_compressedD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip14not_compressedD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__217bad_function_callC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $2; $1 = $3; $4 = $1; HEAP32[$4>>2] = (3600); HEAP32[$3>>2] = (3448); STACKTOP = sp;return; } function __ZN6laszip7streams13memory_stream4goodEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $3 = $1; $4 = ((($3)) + 12|0); $5 = HEAP8[$4>>0]|0; $6 = $5&1; $7 = $6&1; $2 = $7; $8 = ((($3)) + 12|0); HEAP8[$8>>0] = 0; $9 = $2; $10 = $9&1; $11 = $10 ^ 1; STACKTOP = sp;return ($11|0); } function __ZN6laszip7streams13memory_stream3eofEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 13|0); $4 = HEAP8[$3>>0]|0; $5 = $4&1; STACKTOP = sp;return ($5|0); } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE15_parseLASZIPVLREPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 247|0); $6 = $3; __ZN6laszip2io7laz_vlr4fillEPKc($5,$6); $7 = ((($4)) + 247|0); $8 = HEAPU8[$7>>0]|(HEAPU8[$7+1>>0]<<8); $9 = $8&65535; $10 = ($9|0)!=(2); if ($10) { $11 = (___cxa_allocate_exception(8)|0); __ZN6laszip25laszip_format_unsupportedC2Ev($11); ___cxa_throw(($11|0),(152|0),(30|0)); // unreachable; } else { STACKTOP = sp;return; } } function __ZN6laszip7streams13memory_stream5seekgExNSt3__28ios_base7seekdirE($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $5 = sp + 8|0; $7 = sp; $4 = $0; $8 = $5; $9 = $8; HEAP32[$9>>2] = $1; $10 = (($8) + 4)|0; $11 = $10; HEAP32[$11>>2] = $2; $6 = $3; $12 = $4; $13 = $7; $14 = $13; HEAP32[$14>>2] = 0; $15 = (($13) + 4)|0; $16 = $15; HEAP32[$16>>2] = 0; $17 = $6; switch ($17|0) { case 0: { $18 = $5; $19 = $18; $20 = HEAP32[$19>>2]|0; $21 = (($18) + 4)|0; $22 = $21; $23 = HEAP32[$22>>2]|0; $24 = $7; $25 = $24; HEAP32[$25>>2] = $20; $26 = (($24) + 4)|0; $27 = $26; HEAP32[$27>>2] = $23; break; } case 2: { $28 = ((($12)) + 4|0); $29 = HEAP32[$28>>2]|0; $30 = ($29|0)<(0); $31 = $30 << 31 >> 31; $32 = $5; $33 = $32; $34 = HEAP32[$33>>2]|0; $35 = (($32) + 4)|0; $36 = $35; $37 = HEAP32[$36>>2]|0; $38 = (_i64Add(($29|0),($31|0),($34|0),($37|0))|0); $39 = tempRet0; $40 = (_i64Subtract(($38|0),($39|0),1,0)|0); $41 = tempRet0; $42 = $7; $43 = $42; HEAP32[$43>>2] = $40; $44 = (($42) + 4)|0; $45 = $44; HEAP32[$45>>2] = $41; break; } case 1: { $46 = ((($12)) + 8|0); $47 = HEAP32[$46>>2]|0; $48 = ($47|0)<(0); $49 = $48 << 31 >> 31; $50 = $5; $51 = $50; $52 = HEAP32[$51>>2]|0; $53 = (($50) + 4)|0; $54 = $53; $55 = HEAP32[$54>>2]|0; $56 = (_i64Add(($47|0),($49|0),($52|0),($55|0))|0); $57 = tempRet0; $58 = $7; $59 = $58; HEAP32[$59>>2] = $56; $60 = (($58) + 4)|0; $61 = $60; HEAP32[$61>>2] = $57; break; } default: { } } $62 = $7; $63 = $62; $64 = HEAP32[$63>>2]|0; $65 = (($62) + 4)|0; $66 = $65; $67 = HEAP32[$66>>2]|0; $68 = ((($12)) + 4|0); $69 = HEAP32[$68>>2]|0; $70 = ($69|0)<(0); $71 = $70 << 31 >> 31; $72 = ($67|0)>($71|0); $73 = ($64>>>0)>=($69>>>0); $74 = ($67|0)==($71|0); $75 = $74 & $73; $76 = $72 | $75; $77 = $7; $78 = $77; $79 = HEAP32[$78>>2]|0; $80 = (($77) + 4)|0; $81 = $80; $82 = HEAP32[$81>>2]|0; $83 = ($82|0)<(0); $or$cond = $76 | $83; $84 = ((($12)) + 12|0); if ($or$cond) { HEAP8[$84>>0] = 1; STACKTOP = sp;return; } else { HEAP8[$84>>0] = 0; $85 = $7; $86 = $85; $87 = HEAP32[$86>>2]|0; $88 = (($85) + 4)|0; $89 = $88; $90 = HEAP32[$89>>2]|0; $91 = ((($12)) + 8|0); HEAP32[$91>>2] = $87; STACKTOP = sp;return; } } function __ZN6laszip13no_laszip_vlrC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,4974); HEAP32[$2>>2] = (1808); STACKTOP = sp;return; } function __ZN6laszip13no_laszip_vlrD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip2io7laz_vlr9to_schemaERKS1_i($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $5 = sp + 40|0; $8 = sp + 12|0; $9 = sp; $3 = $1; $4 = $2; $$expand_i1_val = 0; HEAP8[$5>>0] = $$expand_i1_val; __ZN6laszip7factory13record_schemaC2Ev($0); $6 = 0; while(1) { $10 = $6; $11 = $3; $12 = ((($11)) + 32|0); $13 = HEAPU8[$12>>0]|(HEAPU8[$12+1>>0]<<8); $14 = $13&65535; $15 = ($10|0)<($14|0); if (!($15)) { break; } $16 = $3; $17 = ((($16)) + 34|0); $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24); $19 = $6; $20 = (($18) + (($19*6)|0)|0); $7 = $20; $21 = $7; $22 = HEAPU8[$21>>0]|(HEAPU8[$21+1>>0]<<8); $23 = $22&65535; $24 = $7; $25 = ((($24)) + 2|0); $26 = HEAPU8[$25>>0]|(HEAPU8[$25+1>>0]<<8); $27 = $26&65535; $28 = $7; $29 = ((($28)) + 4|0); $30 = HEAPU8[$29>>0]|(HEAPU8[$29+1>>0]<<8); $31 = $30&65535; __ZN6laszip7factory11record_itemC2Eiii($8,$23,$27,$31); __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$8); $32 = $7; $33 = ((($32)) + 2|0); $34 = HEAPU8[$33>>0]|(HEAPU8[$33+1>>0]<<8); $35 = $34&65535; $36 = $4; $37 = (($36) - ($35))|0; $4 = $37; $38 = $6; $39 = (($38) + 1)|0; $6 = $39; } $40 = $4; $41 = ($40|0)<(0); if ($41) { $42 = (___cxa_allocate_exception(8)|0); __ZN6laszip25laszip_format_unsupportedC2Ev($42); ___cxa_throw(($42|0),(152|0),(30|0)); // unreachable; } $43 = $4; $44 = ($43|0)!=(0); if ($44) { $45 = $4; __ZN6laszip7factory11record_itemC2Eiii($9,0,$45,2); __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$9); } $$expand_i1_val2 = 1; HEAP8[$5>>0] = $$expand_i1_val2; $$pre_trunc = HEAP8[$5>>0]|0; $46 = $$pre_trunc&1; if ($46) { STACKTOP = sp;return; } __ZN6laszip7factory13record_schemaD2Ev($0); STACKTOP = sp;return; } function __ZN6laszip7factory13record_schemaaSEOS1_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $$byval_copy = sp + 17|0; $4 = sp + 16|0; $5 = $0; $6 = $1; $7 = $5; $8 = $6; $2 = $7; $3 = $8; $9 = $2; $10 = $3; ;HEAP8[$$byval_copy>>0]=HEAP8[$4>>0]|0; __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($9,$10,$$byval_copy); STACKTOP = sp;return ($7|0); } function __ZN6laszip2io7laz_vlr4fillEPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $$arith = 0, $$overflow = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0; var $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0; var $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0; var $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0; var $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0; var $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0; var $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0; var $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0; var $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0; var $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0; var $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0; var $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0; var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0; var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 464|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(464|0); $112 = $0; $113 = $1; $116 = $112; $117 = $113; $118 = $113; $119 = ((($118)) + 2|0); $109 = $117; $110 = $119; $111 = $116; $120 = $109; $108 = $120; $121 = $108; $122 = $110; $102 = $122; $123 = $102; $124 = $111; $103 = $124; $125 = $103; $104 = $121; $105 = $123; $106 = $125; $126 = $105; $127 = $104; $128 = $126; $129 = $127; $130 = (($128) - ($129))|0; $107 = $130; $131 = $107; $132 = ($131>>>0)>(0); if ($132) { $133 = $106; $134 = $104; $135 = $107; _memmove(($133|0),($134|0),($135|0))|0; } $136 = HEAPU8[$116>>0]|(HEAPU8[$116+1>>0]<<8); HEAP8[$116>>0]=$136&255;HEAP8[$116+1>>0]=$136>>8; $137 = $113; $138 = ((($137)) + 2|0); $113 = $138; $139 = $113; $140 = $113; $141 = ((($140)) + 2|0); $142 = ((($116)) + 2|0); $9 = $139; $10 = $141; $11 = $142; $143 = $9; $8 = $143; $144 = $8; $145 = $10; $2 = $145; $146 = $2; $147 = $11; $3 = $147; $148 = $3; $4 = $144; $5 = $146; $6 = $148; $149 = $5; $150 = $4; $151 = $149; $152 = $150; $153 = (($151) - ($152))|0; $7 = $153; $154 = $7; $155 = ($154>>>0)>(0); if ($155) { $156 = $6; $157 = $4; $158 = $7; _memmove(($156|0),($157|0),($158|0))|0; } $159 = ((($116)) + 2|0); $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8); $161 = ((($116)) + 2|0); HEAP8[$161>>0]=$160&255;HEAP8[$161+1>>0]=$160>>8; $162 = $113; $163 = ((($162)) + 2|0); $113 = $163; $164 = $113; $165 = ((($164)) + 1|0); $113 = $165; $166 = HEAP8[$164>>0]|0; $167 = ((($116)) + 4|0); HEAP8[$167>>0] = $166; $168 = $113; $169 = ((($168)) + 1|0); $113 = $169; $170 = HEAP8[$168>>0]|0; $171 = ((($116)) + 4|0); $172 = ((($171)) + 1|0); HEAP8[$172>>0] = $170; $173 = $113; $174 = $113; $175 = ((($174)) + 2|0); $176 = ((($116)) + 4|0); $177 = ((($176)) + 2|0); $19 = $173; $20 = $175; $21 = $177; $178 = $19; $18 = $178; $179 = $18; $180 = $20; $12 = $180; $181 = $12; $182 = $21; $13 = $182; $183 = $13; $14 = $179; $15 = $181; $16 = $183; $184 = $15; $185 = $14; $186 = $184; $187 = $185; $188 = (($186) - ($187))|0; $17 = $188; $189 = $17; $190 = ($189>>>0)>(0); if ($190) { $191 = $16; $192 = $14; $193 = $17; _memmove(($191|0),($192|0),($193|0))|0; } $194 = ((($116)) + 4|0); $195 = ((($194)) + 2|0); $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8); $197 = ((($116)) + 4|0); $198 = ((($197)) + 2|0); HEAP8[$198>>0]=$196&255;HEAP8[$198+1>>0]=$196>>8; $199 = $113; $200 = ((($199)) + 2|0); $113 = $200; $201 = $113; $202 = $113; $203 = ((($202)) + 4|0); $204 = ((($116)) + 8|0); $29 = $201; $30 = $203; $31 = $204; $205 = $29; $28 = $205; $206 = $28; $207 = $30; $22 = $207; $208 = $22; $209 = $31; $23 = $209; $210 = $23; $24 = $206; $25 = $208; $26 = $210; $211 = $25; $212 = $24; $213 = $211; $214 = $212; $215 = (($213) - ($214))|0; $27 = $215; $216 = $27; $217 = ($216>>>0)>(0); if ($217) { $218 = $26; $219 = $24; $220 = $27; _memmove(($218|0),($219|0),($220|0))|0; } $221 = ((($116)) + 8|0); $222 = HEAPU8[$221>>0]|(HEAPU8[$221+1>>0]<<8)|(HEAPU8[$221+2>>0]<<16)|(HEAPU8[$221+3>>0]<<24); $223 = ((($116)) + 8|0); HEAP8[$223>>0]=$222&255;HEAP8[$223+1>>0]=($222>>8)&255;HEAP8[$223+2>>0]=($222>>16)&255;HEAP8[$223+3>>0]=$222>>24; $224 = $113; $225 = ((($224)) + 4|0); $113 = $225; $226 = $113; $227 = $113; $228 = ((($227)) + 4|0); $229 = ((($116)) + 12|0); $39 = $226; $40 = $228; $41 = $229; $230 = $39; $38 = $230; $231 = $38; $232 = $40; $32 = $232; $233 = $32; $234 = $41; $33 = $234; $235 = $33; $34 = $231; $35 = $233; $36 = $235; $236 = $35; $237 = $34; $238 = $236; $239 = $237; $240 = (($238) - ($239))|0; $37 = $240; $241 = $37; $242 = ($241>>>0)>(0); if ($242) { $243 = $36; $244 = $34; $245 = $37; _memmove(($243|0),($244|0),($245|0))|0; } $246 = ((($116)) + 12|0); $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8)|(HEAPU8[$246+2>>0]<<16)|(HEAPU8[$246+3>>0]<<24); $248 = ((($116)) + 12|0); HEAP8[$248>>0]=$247&255;HEAP8[$248+1>>0]=($247>>8)&255;HEAP8[$248+2>>0]=($247>>16)&255;HEAP8[$248+3>>0]=$247>>24; $249 = $113; $250 = ((($249)) + 4|0); $113 = $250; $251 = $113; $252 = $113; $253 = ((($252)) + 8|0); $254 = ((($116)) + 16|0); $49 = $251; $50 = $253; $51 = $254; $255 = $49; $48 = $255; $256 = $48; $257 = $50; $42 = $257; $258 = $42; $259 = $51; $43 = $259; $260 = $43; $44 = $256; $45 = $258; $46 = $260; $261 = $45; $262 = $44; $263 = $261; $264 = $262; $265 = (($263) - ($264))|0; $47 = $265; $266 = $47; $267 = ($266>>>0)>(0); if ($267) { $268 = $46; $269 = $44; $270 = $47; _memmove(($268|0),($269|0),($270|0))|0; } $271 = ((($116)) + 16|0); $272 = $271; $273 = $272; $274 = HEAPU8[$273>>0]|(HEAPU8[$273+1>>0]<<8)|(HEAPU8[$273+2>>0]<<16)|(HEAPU8[$273+3>>0]<<24); $275 = (($272) + 4)|0; $276 = $275; $277 = HEAPU8[$276>>0]|(HEAPU8[$276+1>>0]<<8)|(HEAPU8[$276+2>>0]<<16)|(HEAPU8[$276+3>>0]<<24); $278 = ((($116)) + 16|0); $279 = $278; $280 = $279; HEAP8[$280>>0]=$274&255;HEAP8[$280+1>>0]=($274>>8)&255;HEAP8[$280+2>>0]=($274>>16)&255;HEAP8[$280+3>>0]=$274>>24; $281 = (($279) + 4)|0; $282 = $281; HEAP8[$282>>0]=$277&255;HEAP8[$282+1>>0]=($277>>8)&255;HEAP8[$282+2>>0]=($277>>16)&255;HEAP8[$282+3>>0]=$277>>24; $283 = $113; $284 = ((($283)) + 8|0); $113 = $284; $285 = $113; $286 = $113; $287 = ((($286)) + 8|0); $288 = ((($116)) + 24|0); $59 = $285; $60 = $287; $61 = $288; $289 = $59; $58 = $289; $290 = $58; $291 = $60; $52 = $291; $292 = $52; $293 = $61; $53 = $293; $294 = $53; $54 = $290; $55 = $292; $56 = $294; $295 = $55; $296 = $54; $297 = $295; $298 = $296; $299 = (($297) - ($298))|0; $57 = $299; $300 = $57; $301 = ($300>>>0)>(0); if ($301) { $302 = $56; $303 = $54; $304 = $57; _memmove(($302|0),($303|0),($304|0))|0; } $305 = ((($116)) + 24|0); $306 = $305; $307 = $306; $308 = HEAPU8[$307>>0]|(HEAPU8[$307+1>>0]<<8)|(HEAPU8[$307+2>>0]<<16)|(HEAPU8[$307+3>>0]<<24); $309 = (($306) + 4)|0; $310 = $309; $311 = HEAPU8[$310>>0]|(HEAPU8[$310+1>>0]<<8)|(HEAPU8[$310+2>>0]<<16)|(HEAPU8[$310+3>>0]<<24); $312 = ((($116)) + 24|0); $313 = $312; $314 = $313; HEAP8[$314>>0]=$308&255;HEAP8[$314+1>>0]=($308>>8)&255;HEAP8[$314+2>>0]=($308>>16)&255;HEAP8[$314+3>>0]=$308>>24; $315 = (($313) + 4)|0; $316 = $315; HEAP8[$316>>0]=$311&255;HEAP8[$316+1>>0]=($311>>8)&255;HEAP8[$316+2>>0]=($311>>16)&255;HEAP8[$316+3>>0]=$311>>24; $317 = $113; $318 = ((($317)) + 8|0); $113 = $318; $319 = $113; $320 = $113; $321 = ((($320)) + 2|0); $322 = ((($116)) + 32|0); $69 = $319; $70 = $321; $71 = $322; $323 = $69; $68 = $323; $324 = $68; $325 = $70; $62 = $325; $326 = $62; $327 = $71; $63 = $327; $328 = $63; $64 = $324; $65 = $326; $66 = $328; $329 = $65; $330 = $64; $331 = $329; $332 = $330; $333 = (($331) - ($332))|0; $67 = $333; $334 = $67; $335 = ($334>>>0)>(0); if ($335) { $336 = $66; $337 = $64; $338 = $67; _memmove(($336|0),($337|0),($338|0))|0; } $339 = ((($116)) + 32|0); $340 = HEAPU8[$339>>0]|(HEAPU8[$339+1>>0]<<8); $341 = ((($116)) + 32|0); HEAP8[$341>>0]=$340&255;HEAP8[$341+1>>0]=$340>>8; $342 = $113; $343 = ((($342)) + 2|0); $113 = $343; $344 = ((($116)) + 34|0); $345 = HEAPU8[$344>>0]|(HEAPU8[$344+1>>0]<<8)|(HEAPU8[$344+2>>0]<<16)|(HEAPU8[$344+3>>0]<<24); $346 = ($345|0)==(0|0); if (!($346)) { __ZdaPv($345); } $347 = ((($116)) + 32|0); $348 = HEAPU8[$347>>0]|(HEAPU8[$347+1>>0]<<8); $349 = $348&65535; $$arith = ($349*6)|0; $$overflow = ($349>>>0)>(715827882); $350 = $$overflow ? -1 : $$arith; $351 = (__Znaj($350)|0); $352 = ((($116)) + 34|0); HEAP8[$352>>0]=$351&255;HEAP8[$352+1>>0]=($351>>8)&255;HEAP8[$352+2>>0]=($351>>16)&255;HEAP8[$352+3>>0]=$351>>24; $114 = 0; while(1) { $353 = $114; $354 = ((($116)) + 32|0); $355 = HEAPU8[$354>>0]|(HEAPU8[$354+1>>0]<<8); $356 = $355&65535; $357 = ($353|0)<($356|0); if (!($357)) { break; } $358 = ((($116)) + 34|0); $359 = HEAPU8[$358>>0]|(HEAPU8[$358+1>>0]<<8)|(HEAPU8[$358+2>>0]<<16)|(HEAPU8[$358+3>>0]<<24); $360 = $114; $361 = (($359) + (($360*6)|0)|0); $115 = $361; $362 = $113; $363 = $113; $364 = ((($363)) + 2|0); $365 = $115; $79 = $362; $80 = $364; $81 = $365; $366 = $79; $78 = $366; $367 = $78; $368 = $80; $72 = $368; $369 = $72; $370 = $81; $73 = $370; $371 = $73; $74 = $367; $75 = $369; $76 = $371; $372 = $75; $373 = $74; $374 = $372; $375 = $373; $376 = (($374) - ($375))|0; $77 = $376; $377 = $77; $378 = ($377>>>0)>(0); if ($378) { $379 = $76; $380 = $74; $381 = $77; _memmove(($379|0),($380|0),($381|0))|0; } $382 = $115; $383 = HEAPU8[$382>>0]|(HEAPU8[$382+1>>0]<<8); $384 = $115; HEAP8[$384>>0]=$383&255;HEAP8[$384+1>>0]=$383>>8; $385 = $113; $386 = ((($385)) + 2|0); $113 = $386; $387 = $113; $388 = $113; $389 = ((($388)) + 2|0); $390 = $115; $391 = ((($390)) + 2|0); $89 = $387; $90 = $389; $91 = $391; $392 = $89; $88 = $392; $393 = $88; $394 = $90; $82 = $394; $395 = $82; $396 = $91; $83 = $396; $397 = $83; $84 = $393; $85 = $395; $86 = $397; $398 = $85; $399 = $84; $400 = $398; $401 = $399; $402 = (($400) - ($401))|0; $87 = $402; $403 = $87; $404 = ($403>>>0)>(0); if ($404) { $405 = $86; $406 = $84; $407 = $87; _memmove(($405|0),($406|0),($407|0))|0; } $408 = $115; $409 = ((($408)) + 2|0); $410 = HEAPU8[$409>>0]|(HEAPU8[$409+1>>0]<<8); $411 = $115; $412 = ((($411)) + 2|0); HEAP8[$412>>0]=$410&255;HEAP8[$412+1>>0]=$410>>8; $413 = $113; $414 = ((($413)) + 2|0); $113 = $414; $415 = $113; $416 = $113; $417 = ((($416)) + 2|0); $418 = $115; $419 = ((($418)) + 4|0); $99 = $415; $100 = $417; $101 = $419; $420 = $99; $98 = $420; $421 = $98; $422 = $100; $92 = $422; $423 = $92; $424 = $101; $93 = $424; $425 = $93; $94 = $421; $95 = $423; $96 = $425; $426 = $95; $427 = $94; $428 = $426; $429 = $427; $430 = (($428) - ($429))|0; $97 = $430; $431 = $97; $432 = ($431>>>0)>(0); if ($432) { $433 = $96; $434 = $94; $435 = $97; _memmove(($433|0),($434|0),($435|0))|0; } $436 = $115; $437 = ((($436)) + 4|0); $438 = HEAPU8[$437>>0]|(HEAPU8[$437+1>>0]<<8); $439 = $115; $440 = ((($439)) + 4|0); HEAP8[$440>>0]=$438&255;HEAP8[$440+1>>0]=$438>>8; $441 = $113; $442 = ((($441)) + 2|0); $113 = $442; $443 = $114; $444 = (($443) + 1)|0; $114 = $444; } STACKTOP = sp;return; } function __ZN6laszip25laszip_format_unsupportedC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,4918); HEAP32[$2>>2] = (1788); STACKTOP = sp;return; } function __ZN6laszip25laszip_format_unsupportedD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip25laszip_format_unsupportedD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip25laszip_format_unsupportedD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip13no_laszip_vlrD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13no_laszip_vlrD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7factory13record_schema4pushERKNS0_11record_itemE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; var $65 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $14 = sp; $19 = sp + 113|0; $29 = sp + 112|0; $30 = $0; $31 = $1; $32 = $30; $33 = $31; $27 = $32; $28 = $33; $34 = $27; $35 = ((($34)) + 4|0); $36 = HEAP32[$35>>2]|0; $26 = $34; $37 = $26; $38 = ((($37)) + 8|0); $25 = $38; $39 = $25; $24 = $39; $40 = $24; $41 = HEAP32[$40>>2]|0; $42 = ($36|0)!=($41|0); if ($42) { $21 = $29; $22 = $34; $23 = 1; $4 = $34; $43 = $4; $44 = ((($43)) + 8|0); $3 = $44; $45 = $3; $2 = $45; $46 = $2; $47 = ((($34)) + 4|0); $48 = HEAP32[$47>>2]|0; $5 = $48; $49 = $5; $50 = $28; $16 = $46; $17 = $49; $18 = $50; $51 = $16; $52 = $17; $53 = $18; $15 = $53; $54 = $15; ;HEAP8[$14>>0]=HEAP8[$19>>0]|0; $11 = $51; $12 = $52; $13 = $54; $55 = $11; $56 = $12; $57 = $13; $10 = $57; $58 = $10; $7 = $55; $8 = $56; $9 = $58; $59 = $8; $60 = $9; $6 = $60; $61 = $6; ;HEAP32[$59>>2]=HEAP32[$61>>2]|0;HEAP32[$59+4>>2]=HEAP32[$61+4>>2]|0;HEAP32[$59+8>>2]=HEAP32[$61+8>>2]|0; $20 = $29; $62 = ((($34)) + 4|0); $63 = HEAP32[$62>>2]|0; $64 = ((($63)) + 12|0); HEAP32[$62>>2] = $64; STACKTOP = sp;return; } else { $65 = $28; __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($34,$65); STACKTOP = sp;return; } } function __ZN6laszip7factory11record_itemC2Eiii($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = $0; $5 = $1; $6 = $2; $7 = $3; $8 = $4; $9 = $5; HEAP32[$8>>2] = $9; $10 = ((($8)) + 4|0); $11 = $6; HEAP32[$10>>2] = $11; $12 = ((($8)) + 8|0); $13 = $7; HEAP32[$12>>2] = $13; STACKTOP = sp;return; } function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0; var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0; var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0; var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0; var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0; var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); $10 = sp + 8|0; $15 = sp + 193|0; $24 = sp; $27 = sp + 192|0; $35 = sp + 72|0; $38 = sp + 60|0; $46 = sp + 12|0; $43 = $0; $44 = $1; $47 = $43; $42 = $47; $48 = $42; $49 = ((($48)) + 8|0); $41 = $49; $50 = $41; $40 = $50; $51 = $40; $45 = $51; $39 = $47; $52 = $39; $53 = ((($52)) + 4|0); $54 = HEAP32[$53>>2]|0; $55 = HEAP32[$52>>2]|0; $56 = $54; $57 = $55; $58 = (($56) - ($57))|0; $59 = (($58|0) / 12)&-1; $60 = (($59) + 1)|0; $34 = $47; HEAP32[$35>>2] = $60; $61 = $34; $62 = (__ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($61)|0); $36 = $62; $63 = HEAP32[$35>>2]|0; $64 = $36; $65 = ($63>>>0)>($64>>>0); if ($65) { __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61); // unreachable; } $32 = $61; $66 = $32; $31 = $66; $67 = $31; $30 = $67; $68 = $30; $69 = ((($68)) + 8|0); $29 = $69; $70 = $29; $28 = $70; $71 = $28; $72 = HEAP32[$71>>2]|0; $73 = HEAP32[$67>>2]|0; $74 = $72; $75 = $73; $76 = (($74) - ($75))|0; $77 = (($76|0) / 12)&-1; $37 = $77; $78 = $37; $79 = $36; $80 = (($79>>>0) / 2)&-1; $81 = ($78>>>0)>=($80>>>0); if ($81) { $82 = $36; $33 = $82; } else { $83 = $37; $84 = $83<<1; HEAP32[$38>>2] = $84; $25 = $38; $26 = $35; $85 = $25; $86 = $26; ;HEAP8[$24>>0]=HEAP8[$27>>0]|0; $22 = $85; $23 = $86; $87 = $22; $88 = $23; $19 = $24; $20 = $87; $21 = $88; $89 = $20; $90 = HEAP32[$89>>2]|0; $91 = $21; $92 = HEAP32[$91>>2]|0; $93 = ($90>>>0)<($92>>>0); $94 = $23; $95 = $22; $96 = $93 ? $94 : $95; $97 = HEAP32[$96>>2]|0; $33 = $97; } $98 = $33; $18 = $47; $99 = $18; $100 = ((($99)) + 4|0); $101 = HEAP32[$100>>2]|0; $102 = HEAP32[$99>>2]|0; $103 = $101; $104 = $102; $105 = (($103) - ($104))|0; $106 = (($105|0) / 12)&-1; $107 = $45; __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107); $108 = $45; $109 = ((($46)) + 8|0); $110 = HEAP32[$109>>2]|0; $17 = $110; $111 = $17; $112 = $44; $16 = $112; $113 = $16; $12 = $108; $13 = $111; $14 = $113; $114 = $12; $115 = $13; $116 = $14; $11 = $116; $117 = $11; ;HEAP8[$10>>0]=HEAP8[$15>>0]|0; $7 = $114; $8 = $115; $9 = $117; $118 = $7; $119 = $8; $120 = $9; $6 = $120; $121 = $6; $3 = $118; $4 = $119; $5 = $121; $122 = $4; $123 = $5; $2 = $123; $124 = $2; ;HEAP32[$122>>2]=HEAP32[$124>>2]|0;HEAP32[$122+4>>2]=HEAP32[$124+4>>2]|0;HEAP32[$122+8>>2]=HEAP32[$124+8>>2]|0; $125 = ((($46)) + 8|0); $126 = HEAP32[$125>>2]|0; $127 = ((($126)) + 12|0); HEAP32[$125>>2] = $127; __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46); __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($46); STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $35 = sp; $31 = $0; $32 = $1; $33 = $2; $34 = $3; $36 = $31; $37 = ((($36)) + 12|0); HEAP32[$35>>2] = 0; $38 = $34; $28 = $37; $29 = $35; $30 = $38; $39 = $28; $40 = $29; $27 = $40; $41 = $27; $21 = $39; $22 = $41; $42 = $21; $43 = $22; $20 = $43; HEAP32[$42>>2] = 0; $44 = ((($39)) + 4|0); $45 = $30; $23 = $45; $46 = $23; $25 = $44; $26 = $46; $47 = $25; $48 = $26; $24 = $48; $49 = $24; HEAP32[$47>>2] = $49; $50 = $32; $51 = ($50|0)!=(0); do { if ($51) { $6 = $36; $52 = $6; $53 = ((($52)) + 12|0); $5 = $53; $54 = $5; $55 = ((($54)) + 4|0); $4 = $55; $56 = $4; $57 = HEAP32[$56>>2]|0; $58 = $32; $15 = $57; $16 = $58; $59 = $15; $60 = $16; $12 = $59; $13 = $60; $14 = 0; $61 = $12; $62 = $13; $11 = $61; $63 = ($62>>>0)>(357913941); if ($63) { $9 = 4287; $64 = (___cxa_allocate_exception(8)|0); $65 = $9; $7 = $64; $8 = $65; $66 = $7; $67 = $8; __ZNSt11logic_errorC2EPKc($66,$67); HEAP32[$66>>2] = (3660); ___cxa_throw(($64|0),(1384|0),(220|0)); // unreachable; } else { $68 = $13; $69 = ($68*12)|0; $10 = $69; $70 = $10; $71 = (__Znwj($70)|0); $72 = $71; break; } } else { $72 = 0; } } while(0); HEAP32[$36>>2] = $72; $73 = HEAP32[$36>>2]|0; $74 = $33; $75 = (($73) + (($74*12)|0)|0); $76 = ((($36)) + 8|0); HEAP32[$76>>2] = $75; $77 = ((($36)) + 4|0); HEAP32[$77>>2] = $75; $78 = HEAP32[$36>>2]|0; $79 = $32; $80 = (($78) + (($79*12)|0)|0); $19 = $36; $81 = $19; $82 = ((($81)) + 12|0); $18 = $82; $83 = $18; $17 = $83; $84 = $17; HEAP32[$84>>2] = $80; STACKTOP = sp;return; } function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0; var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0; var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0; var sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0); $15 = sp + 288|0; $21 = sp + 264|0; $33 = sp + 216|0; $86 = $0; $87 = $1; $88 = $86; $85 = $88; $89 = $85; $84 = $89; $90 = $84; $91 = HEAP32[$90>>2]|0; $83 = $91; $92 = $83; $62 = $89; $93 = $62; $94 = HEAP32[$93>>2]|0; $61 = $94; $95 = $61; $67 = $89; $96 = $67; $66 = $96; $97 = $66; $65 = $97; $98 = $65; $99 = ((($98)) + 8|0); $64 = $99; $100 = $64; $63 = $100; $101 = $63; $102 = HEAP32[$101>>2]|0; $103 = HEAP32[$97>>2]|0; $104 = $102; $105 = $103; $106 = (($104) - ($105))|0; $107 = (($106|0) / 12)&-1; $108 = (($95) + (($107*12)|0)|0); $69 = $89; $109 = $69; $110 = HEAP32[$109>>2]|0; $68 = $110; $111 = $68; $70 = $89; $112 = $70; $113 = ((($112)) + 4|0); $114 = HEAP32[$113>>2]|0; $115 = HEAP32[$112>>2]|0; $116 = $114; $117 = $115; $118 = (($116) - ($117))|0; $119 = (($118|0) / 12)&-1; $120 = (($111) + (($119*12)|0)|0); $72 = $89; $121 = $72; $122 = HEAP32[$121>>2]|0; $71 = $122; $123 = $71; $77 = $89; $124 = $77; $76 = $124; $125 = $76; $75 = $125; $126 = $75; $127 = ((($126)) + 8|0); $74 = $127; $128 = $74; $73 = $128; $129 = $73; $130 = HEAP32[$129>>2]|0; $131 = HEAP32[$125>>2]|0; $132 = $130; $133 = $131; $134 = (($132) - ($133))|0; $135 = (($134|0) / 12)&-1; $136 = (($123) + (($135*12)|0)|0); $78 = $89; $79 = $92; $80 = $108; $81 = $120; $82 = $136; $4 = $88; $137 = $4; $138 = ((($137)) + 8|0); $3 = $138; $139 = $3; $2 = $139; $140 = $2; $141 = HEAP32[$88>>2]|0; $142 = ((($88)) + 4|0); $143 = HEAP32[$142>>2]|0; $144 = $87; $145 = ((($144)) + 4|0); $5 = $140; $6 = $141; $7 = $143; $8 = $145; $146 = $7; $147 = $6; $148 = $146; $149 = $147; $150 = (($148) - ($149))|0; $151 = (($150|0) / 12)&-1; $9 = $151; $152 = $9; $153 = $8; $154 = HEAP32[$153>>2]|0; $155 = (0 - ($152))|0; $156 = (($154) + (($155*12)|0)|0); HEAP32[$153>>2] = $156; $157 = $9; $158 = ($157|0)>(0); if ($158) { $159 = $8; $160 = HEAP32[$159>>2]|0; $161 = $6; $162 = $9; $163 = ($162*12)|0; _memcpy(($160|0),($161|0),($163|0))|0; } $164 = $87; $165 = ((($164)) + 4|0); $13 = $88; $14 = $165; $166 = $13; $12 = $166; $167 = $12; $168 = HEAP32[$167>>2]|0; HEAP32[$15>>2] = $168; $169 = $14; $10 = $169; $170 = $10; $171 = HEAP32[$170>>2]|0; $172 = $13; HEAP32[$172>>2] = $171; $11 = $15; $173 = $11; $174 = HEAP32[$173>>2]|0; $175 = $14; HEAP32[$175>>2] = $174; $176 = ((($88)) + 4|0); $177 = $87; $178 = ((($177)) + 8|0); $19 = $176; $20 = $178; $179 = $19; $18 = $179; $180 = $18; $181 = HEAP32[$180>>2]|0; HEAP32[$21>>2] = $181; $182 = $20; $16 = $182; $183 = $16; $184 = HEAP32[$183>>2]|0; $185 = $19; HEAP32[$185>>2] = $184; $17 = $21; $186 = $17; $187 = HEAP32[$186>>2]|0; $188 = $20; HEAP32[$188>>2] = $187; $24 = $88; $189 = $24; $190 = ((($189)) + 8|0); $23 = $190; $191 = $23; $22 = $191; $192 = $22; $193 = $87; $27 = $193; $194 = $27; $195 = ((($194)) + 12|0); $26 = $195; $196 = $26; $25 = $196; $197 = $25; $31 = $192; $32 = $197; $198 = $31; $30 = $198; $199 = $30; $200 = HEAP32[$199>>2]|0; HEAP32[$33>>2] = $200; $201 = $32; $28 = $201; $202 = $28; $203 = HEAP32[$202>>2]|0; $204 = $31; HEAP32[$204>>2] = $203; $29 = $33; $205 = $29; $206 = HEAP32[$205>>2]|0; $207 = $32; HEAP32[$207>>2] = $206; $208 = $87; $209 = ((($208)) + 4|0); $210 = HEAP32[$209>>2]|0; $211 = $87; HEAP32[$211>>2] = $210; $34 = $88; $212 = $34; $213 = ((($212)) + 4|0); $214 = HEAP32[$213>>2]|0; $215 = HEAP32[$212>>2]|0; $216 = $214; $217 = $215; $218 = (($216) - ($217))|0; $219 = (($218|0) / 12)&-1; $58 = $88; $59 = $219; $220 = $58; $57 = $220; $221 = $57; $222 = HEAP32[$221>>2]|0; $56 = $222; $223 = $56; $36 = $220; $224 = $36; $225 = HEAP32[$224>>2]|0; $35 = $225; $226 = $35; $41 = $220; $227 = $41; $40 = $227; $228 = $40; $39 = $228; $229 = $39; $230 = ((($229)) + 8|0); $38 = $230; $231 = $38; $37 = $231; $232 = $37; $233 = HEAP32[$232>>2]|0; $234 = HEAP32[$228>>2]|0; $235 = $233; $236 = $234; $237 = (($235) - ($236))|0; $238 = (($237|0) / 12)&-1; $239 = (($226) + (($238*12)|0)|0); $43 = $220; $240 = $43; $241 = HEAP32[$240>>2]|0; $42 = $241; $242 = $42; $48 = $220; $243 = $48; $47 = $243; $244 = $47; $46 = $244; $245 = $46; $246 = ((($245)) + 8|0); $45 = $246; $247 = $45; $44 = $247; $248 = $44; $249 = HEAP32[$248>>2]|0; $250 = HEAP32[$244>>2]|0; $251 = $249; $252 = $250; $253 = (($251) - ($252))|0; $254 = (($253|0) / 12)&-1; $255 = (($242) + (($254*12)|0)|0); $50 = $220; $256 = $50; $257 = HEAP32[$256>>2]|0; $49 = $257; $258 = $49; $259 = $59; $260 = (($258) + (($259*12)|0)|0); $51 = $220; $52 = $223; $53 = $239; $54 = $255; $55 = $260; $60 = $88; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIN6laszip7factory11record_itemERNS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $19 = sp + 8|0; $22 = sp + 133|0; $29 = sp; $32 = sp + 132|0; $34 = $0; $35 = $34; $33 = $35; $36 = $33; $37 = ((($36)) + 4|0); $38 = HEAP32[$37>>2]|0; $30 = $36; $31 = $38; $39 = $30; $40 = $31; ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; $27 = $39; $28 = $40; $41 = $27; while(1) { $42 = $28; $43 = ((($41)) + 8|0); $44 = HEAP32[$43>>2]|0; $45 = ($42|0)!=($44|0); if (!($45)) { break; } $26 = $41; $46 = $26; $47 = ((($46)) + 12|0); $25 = $47; $48 = $25; $49 = ((($48)) + 4|0); $24 = $49; $50 = $24; $51 = HEAP32[$50>>2]|0; $52 = ((($41)) + 8|0); $53 = HEAP32[$52>>2]|0; $54 = ((($53)) + -12|0); HEAP32[$52>>2] = $54; $23 = $54; $55 = $23; $20 = $51; $21 = $55; $56 = $20; $57 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $56; $18 = $57; $58 = $17; $59 = $18; $15 = $58; $16 = $59; } $60 = HEAP32[$35>>2]|0; $61 = ($60|0)!=(0|0); if (!($61)) { STACKTOP = sp;return; } $14 = $35; $62 = $14; $63 = ((($62)) + 12|0); $13 = $63; $64 = $13; $65 = ((($64)) + 4|0); $12 = $65; $66 = $12; $67 = HEAP32[$66>>2]|0; $68 = HEAP32[$35>>2]|0; $4 = $35; $69 = $4; $3 = $69; $70 = $3; $71 = ((($70)) + 12|0); $2 = $71; $72 = $2; $1 = $72; $73 = $1; $74 = HEAP32[$73>>2]|0; $75 = HEAP32[$69>>2]|0; $76 = $74; $77 = $75; $78 = (($76) - ($77))|0; $79 = (($78|0) / 12)&-1; $9 = $67; $10 = $68; $11 = $79; $80 = $9; $81 = $10; $82 = $11; $6 = $80; $7 = $81; $8 = $82; $83 = $7; $5 = $83; $84 = $5; __ZdlPv($84); STACKTOP = sp;return; } function __ZNKSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE8max_sizeEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $6 = sp + 8|0; $9 = sp + 77|0; $12 = sp; $14 = sp + 76|0; $19 = sp + 16|0; $20 = sp + 12|0; $18 = $0; $21 = $18; $17 = $21; $22 = $17; $23 = ((($22)) + 8|0); $16 = $23; $24 = $16; $15 = $24; $25 = $15; $13 = $25; $26 = $13; ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; $11 = $26; $27 = $11; $10 = $27; HEAP32[$19>>2] = 357913941; HEAP32[$20>>2] = 2147483647; $7 = $19; $8 = $20; $28 = $7; $29 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $28; $5 = $29; $30 = $5; $31 = $4; $1 = $6; $2 = $30; $3 = $31; $32 = $2; $33 = HEAP32[$32>>2]|0; $34 = $3; $35 = HEAP32[$34>>2]|0; $36 = ($33>>>0)<($35>>>0); $37 = $5; $38 = $4; $39 = $36 ? $37 : $38; $40 = HEAP32[$39>>2]|0; STACKTOP = sp;return ($40|0); } function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE13__move_assignERS6_NS_17integral_constantIbLb1EEE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $7 = 0, $8 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0); $21 = sp; $24 = sp + 92|0; $25 = $0; $26 = $1; $27 = $25; __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($27); $28 = $26; $22 = $27; $23 = $28; $29 = $22; $30 = $23; ;HEAP8[$21>>0]=HEAP8[$24>>0]|0; $19 = $29; $20 = $30; $31 = $19; $32 = $20; $18 = $32; $33 = $18; $34 = ((($33)) + 8|0); $17 = $34; $35 = $17; $16 = $35; $36 = $16; $12 = $36; $15 = $31; $37 = $15; $38 = ((($37)) + 8|0); $14 = $38; $39 = $14; $13 = $39; $40 = $26; $41 = HEAP32[$40>>2]|0; HEAP32[$27>>2] = $41; $42 = $26; $43 = ((($42)) + 4|0); $44 = HEAP32[$43>>2]|0; $45 = ((($27)) + 4|0); HEAP32[$45>>2] = $44; $46 = $26; $5 = $46; $47 = $5; $48 = ((($47)) + 8|0); $4 = $48; $49 = $4; $3 = $49; $50 = $3; $51 = HEAP32[$50>>2]|0; $8 = $27; $52 = $8; $53 = ((($52)) + 8|0); $7 = $53; $54 = $7; $6 = $54; $55 = $6; HEAP32[$55>>2] = $51; $56 = $26; $11 = $56; $57 = $11; $58 = ((($57)) + 8|0); $10 = $58; $59 = $10; $9 = $59; $60 = $9; HEAP32[$60>>2] = 0; $61 = $26; $62 = ((($61)) + 4|0); HEAP32[$62>>2] = 0; $63 = $26; HEAP32[$63>>2] = 0; STACKTOP = sp;return; } function __ZNSt3__26vectorIN6laszip7factory11record_itemENS_9allocatorIS3_EEE10deallocateEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0; var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0; var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 240|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(240|0); $45 = sp; $48 = sp + 236|0; $60 = $0; $61 = $60; $62 = HEAP32[$61>>2]|0; $63 = ($62|0)!=(0|0); if (!($63)) { STACKTOP = sp;return; } $58 = $61; $64 = $58; $57 = $64; $65 = $57; $66 = ((($65)) + 4|0); $67 = HEAP32[$66>>2]|0; $68 = HEAP32[$65>>2]|0; $69 = $67; $70 = $68; $71 = (($69) - ($70))|0; $72 = (($71|0) / 12)&-1; $59 = $72; $56 = $64; $73 = $56; $74 = HEAP32[$73>>2]|0; $53 = $73; $54 = $74; $75 = $53; $76 = ((($75)) + 4|0); $77 = HEAP32[$76>>2]|0; $55 = $77; while(1) { $78 = $54; $79 = $55; $80 = ($78|0)!=($79|0); if (!($80)) { break; } $52 = $75; $81 = $52; $82 = ((($81)) + 8|0); $51 = $82; $83 = $51; $50 = $83; $84 = $50; $85 = $55; $86 = ((($85)) + -12|0); $55 = $86; $49 = $86; $87 = $49; $46 = $84; $47 = $87; $88 = $46; $89 = $47; ;HEAP8[$45>>0]=HEAP8[$48>>0]|0; $43 = $88; $44 = $89; $90 = $43; $91 = $44; $41 = $90; $42 = $91; } $92 = $54; $93 = ((($75)) + 4|0); HEAP32[$93>>2] = $92; $94 = $59; $38 = $64; $39 = $94; $95 = $38; $37 = $95; $96 = $37; $97 = HEAP32[$96>>2]|0; $36 = $97; $98 = $36; $20 = $95; $99 = $20; $100 = HEAP32[$99>>2]|0; $19 = $100; $101 = $19; $25 = $95; $102 = $25; $24 = $102; $103 = $24; $23 = $103; $104 = $23; $105 = ((($104)) + 8|0); $22 = $105; $106 = $22; $21 = $106; $107 = $21; $108 = HEAP32[$107>>2]|0; $109 = HEAP32[$103>>2]|0; $110 = $108; $111 = $109; $112 = (($110) - ($111))|0; $113 = (($112|0) / 12)&-1; $114 = (($101) + (($113*12)|0)|0); $27 = $95; $115 = $27; $116 = HEAP32[$115>>2]|0; $26 = $116; $117 = $26; $118 = $39; $119 = (($117) + (($118*12)|0)|0); $29 = $95; $120 = $29; $121 = HEAP32[$120>>2]|0; $28 = $121; $122 = $28; $30 = $95; $123 = $30; $124 = ((($123)) + 4|0); $125 = HEAP32[$124>>2]|0; $126 = HEAP32[$123>>2]|0; $127 = $125; $128 = $126; $129 = (($127) - ($128))|0; $130 = (($129|0) / 12)&-1; $131 = (($122) + (($130*12)|0)|0); $31 = $95; $32 = $98; $33 = $114; $34 = $119; $35 = $131; $40 = $64; $8 = $61; $132 = $8; $133 = ((($132)) + 8|0); $7 = $133; $134 = $7; $6 = $134; $135 = $6; $136 = HEAP32[$61>>2]|0; $5 = $61; $137 = $5; $4 = $137; $138 = $4; $3 = $138; $139 = $3; $140 = ((($139)) + 8|0); $2 = $140; $141 = $2; $1 = $141; $142 = $1; $143 = HEAP32[$142>>2]|0; $144 = HEAP32[$138>>2]|0; $145 = $143; $146 = $144; $147 = (($145) - ($146))|0; $148 = (($147|0) / 12)&-1; $13 = $135; $14 = $136; $15 = $148; $149 = $13; $150 = $14; $151 = $15; $10 = $149; $11 = $150; $12 = $151; $152 = $11; $9 = $152; $153 = $9; __ZdlPv($153); $18 = $61; $154 = $18; $155 = ((($154)) + 8|0); $17 = $155; $156 = $17; $16 = $156; $157 = $16; HEAP32[$157>>2] = 0; $158 = ((($61)) + 4|0); HEAP32[$158>>2] = 0; HEAP32[$61>>2] = 0; STACKTOP = sp;return; } function __ZN6laszip22chunk_table_read_errorC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,5254); HEAP32[$2>>2] = (1828); STACKTOP = sp;return; } function __ZN6laszip22chunk_table_read_errorD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip13not_supportedC2EPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; __ZNSt13runtime_errorC2EPKc($4,$5); HEAP32[$4>>2] = (1848); STACKTOP = sp;return; } function __ZN6laszip13not_supportedD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip26unknown_chunk_table_formatC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,5298); HEAP32[$2>>2] = (1868); STACKTOP = sp;return; } function __ZN6laszip26unknown_chunk_table_formatD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__26vectorIyNS_9allocatorIyEEE6resizeEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); $6 = sp; $9 = sp + 180|0; $45 = $0; $46 = $1; $48 = $45; $44 = $48; $49 = $44; $50 = ((($49)) + 4|0); $51 = HEAP32[$50>>2]|0; $52 = HEAP32[$49>>2]|0; $53 = $51; $54 = $52; $55 = (($53) - ($54))|0; $56 = (($55|0) / 8)&-1; $47 = $56; $57 = $47; $58 = $46; $59 = ($57>>>0)<($58>>>0); if ($59) { $60 = $46; $61 = $47; $62 = (($60) - ($61))|0; __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($48,$62); STACKTOP = sp;return; } $63 = $47; $64 = $46; $65 = ($63>>>0)>($64>>>0); if (!($65)) { STACKTOP = sp;return; } $66 = HEAP32[$48>>2]|0; $67 = $46; $68 = (($66) + ($67<<3)|0); $41 = $48; $42 = $68; $69 = $41; $70 = $42; $39 = $69; $40 = $70; $38 = $69; $71 = $38; $72 = ((($71)) + 4|0); $73 = HEAP32[$72>>2]|0; $74 = HEAP32[$71>>2]|0; $75 = $73; $76 = $74; $77 = (($75) - ($76))|0; $78 = (($77|0) / 8)&-1; $43 = $78; $79 = $42; $14 = $69; $15 = $79; $80 = $14; $81 = ((($80)) + 4|0); $82 = HEAP32[$81>>2]|0; $16 = $82; while(1) { $83 = $15; $84 = $16; $85 = ($83|0)!=($84|0); if (!($85)) { break; } $13 = $80; $86 = $13; $87 = ((($86)) + 8|0); $12 = $87; $88 = $12; $11 = $88; $89 = $11; $90 = $16; $91 = ((($90)) + -8|0); $16 = $91; $10 = $91; $92 = $10; $7 = $89; $8 = $92; $93 = $7; $94 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $93; $5 = $94; $95 = $4; $96 = $5; $2 = $95; $3 = $96; } $97 = $15; $98 = ((($80)) + 4|0); HEAP32[$98>>2] = $97; $99 = $43; $36 = $69; $37 = $99; $100 = $36; $35 = $100; $101 = $35; $102 = HEAP32[$101>>2]|0; $34 = $102; $103 = $34; $18 = $100; $104 = $18; $105 = HEAP32[$104>>2]|0; $17 = $105; $106 = $17; $23 = $100; $107 = $23; $22 = $107; $108 = $22; $21 = $108; $109 = $21; $110 = ((($109)) + 8|0); $20 = $110; $111 = $20; $19 = $111; $112 = $19; $113 = HEAP32[$112>>2]|0; $114 = HEAP32[$108>>2]|0; $115 = $113; $116 = $114; $117 = (($115) - ($116))|0; $118 = (($117|0) / 8)&-1; $119 = (($106) + ($118<<3)|0); $25 = $100; $120 = $25; $121 = HEAP32[$120>>2]|0; $24 = $121; $122 = $24; $123 = $37; $124 = (($122) + ($123<<3)|0); $27 = $100; $125 = $27; $126 = HEAP32[$125>>2]|0; $26 = $126; $127 = $26; $28 = $100; $128 = $28; $129 = ((($128)) + 4|0); $130 = HEAP32[$129>>2]|0; $131 = HEAP32[$128>>2]|0; $132 = $130; $133 = $131; $134 = (($132) - ($133))|0; $135 = (($134|0) / 8)&-1; $136 = (($127) + ($135<<3)|0); $29 = $100; $30 = $103; $31 = $119; $32 = $124; $33 = $136; STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; HEAP32[$4>>2] = $5; $6 = ((($4)) + 4|0); HEAP32[$6>>2] = 0; $7 = ((($4)) + 8|0); HEAP32[$7>>2] = -1; STACKTOP = sp;return; } function __ZN6laszip13decompressors7integerC2Ejjjj($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0; var $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $15 = sp + 72|0; $27 = sp + 24|0; $29 = $0; $30 = $1; $31 = $2; $32 = $3; $33 = $4; $34 = $29; $35 = ((($34)) + 4|0); $36 = $30; HEAP32[$35>>2] = $36; $37 = ((($34)) + 8|0); $38 = $31; HEAP32[$37>>2] = $38; $39 = ((($34)) + 12|0); $40 = $32; HEAP32[$39>>2] = $40; $41 = ((($34)) + 16|0); $42 = $33; HEAP32[$41>>2] = $42; $43 = ((($34)) + 36|0); $28 = $43; $44 = $28; $26 = $44; $45 = $26; $25 = $45; HEAP32[$45>>2] = 0; $46 = ((($45)) + 4|0); HEAP32[$46>>2] = 0; $47 = ((($45)) + 8|0); HEAP32[$27>>2] = 0; $23 = $47; $24 = $27; $48 = $23; $49 = $24; $22 = $49; $50 = $22; $18 = $48; $19 = $50; $51 = $18; $52 = $19; $17 = $52; HEAP32[$51>>2] = 0; $21 = $48; $53 = $21; $20 = $53; $54 = ((($34)) + 48|0); __ZN6laszip6models14arithmetic_bitC2Ev($54); $55 = ((($34)) + 68|0); $16 = $55; $56 = $16; $14 = $56; $57 = $14; $13 = $57; HEAP32[$57>>2] = 0; $58 = ((($57)) + 4|0); HEAP32[$58>>2] = 0; $59 = ((($57)) + 8|0); HEAP32[$15>>2] = 0; $11 = $59; $12 = $15; $60 = $11; $61 = $12; $10 = $61; $62 = $10; $6 = $60; $7 = $62; $63 = $6; $64 = $7; $5 = $64; HEAP32[$63>>2] = 0; $9 = $60; $65 = $9; $8 = $65; $66 = $33; $67 = ($66|0)!=(0); if (!($67)) { $100 = $30; $101 = ($100|0)!=(0); $102 = $30; $103 = ($102>>>0)<(32); $or$cond = $101 & $103; if ($or$cond) { $104 = $30; $105 = ((($34)) + 20|0); HEAP32[$105>>2] = $104; $106 = $30; $107 = 1 << $106; $108 = ((($34)) + 24|0); HEAP32[$108>>2] = $107; $109 = ((($34)) + 24|0); $110 = HEAP32[$109>>2]|0; $111 = (($110>>>0) / 2)&-1; $112 = (0 - ($111))|0; $113 = ((($34)) + 28|0); HEAP32[$113>>2] = $112; $114 = ((($34)) + 28|0); $115 = HEAP32[$114>>2]|0; $116 = ((($34)) + 24|0); $117 = HEAP32[$116>>2]|0; $118 = (($115) + ($117))|0; $119 = (($118) - 1)|0; $120 = ((($34)) + 32|0); HEAP32[$120>>2] = $119; HEAP32[$34>>2] = 0; STACKTOP = sp;return; } else { $121 = ((($34)) + 20|0); HEAP32[$121>>2] = 32; $122 = ((($34)) + 24|0); HEAP32[$122>>2] = 0; $123 = ((($34)) + 28|0); HEAP32[$123>>2] = -2147483648; $124 = ((($34)) + 32|0); HEAP32[$124>>2] = 2147483647; HEAP32[$34>>2] = 0; STACKTOP = sp;return; } } $68 = ((($34)) + 20|0); HEAP32[$68>>2] = 0; $69 = $33; $70 = ((($34)) + 24|0); HEAP32[$70>>2] = $69; while(1) { $71 = $33; $72 = ($71|0)!=(0); if (!($72)) { break; } $73 = $33; $74 = $73 >>> 1; $33 = $74; $75 = ((($34)) + 20|0); $76 = HEAP32[$75>>2]|0; $77 = (($76) + 1)|0; HEAP32[$75>>2] = $77; } $78 = ((($34)) + 24|0); $79 = HEAP32[$78>>2]|0; $80 = ((($34)) + 20|0); $81 = HEAP32[$80>>2]|0; $82 = (($81) - 1)|0; $83 = 1 << $82; $84 = ($79|0)==($83|0); if ($84) { $85 = ((($34)) + 20|0); $86 = HEAP32[$85>>2]|0; $87 = (($86) + -1)|0; HEAP32[$85>>2] = $87; } $88 = ((($34)) + 24|0); $89 = HEAP32[$88>>2]|0; $90 = (($89>>>0) / 2)&-1; $91 = (0 - ($90))|0; $92 = ((($34)) + 28|0); HEAP32[$92>>2] = $91; $93 = ((($34)) + 28|0); $94 = HEAP32[$93>>2]|0; $95 = ((($34)) + 24|0); $96 = HEAP32[$95>>2]|0; $97 = (($94) + ($96))|0; $98 = (($97) - 1)|0; $99 = ((($34)) + 32|0); HEAP32[$99>>2] = $98; HEAP32[$34>>2] = 0; STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP32[$2>>2]|0; $4 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($3)|0); $5 = $4&255; $6 = $5 << 24; $7 = HEAP32[$2>>2]|0; $8 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($7)|0); $9 = $8&255; $10 = $9 << 16; $11 = $6 | $10; $12 = HEAP32[$2>>2]|0; $13 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($12)|0); $14 = $13&255; $15 = $14 << 8; $16 = $11 | $15; $17 = HEAP32[$2>>2]|0; $18 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($17)|0); $19 = $18&255; $20 = $16 | $19; $21 = ((($2)) + 4|0); HEAP32[$21>>2] = $20; STACKTOP = sp;return; } function __ZN6laszip13decompressors7integer4initEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0; var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0; var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $18 = 0; var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0; var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0; var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0; var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0; var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); $14 = sp + 8|0; $19 = sp + 335|0; $30 = sp + 334|0; $44 = sp; $49 = sp + 333|0; $60 = sp + 332|0; $64 = sp + 60|0; $66 = sp + 12|0; $62 = $0; $67 = $62; $68 = ((($67)) + 36|0); $61 = $68; $69 = $61; $70 = HEAP32[$69>>2]|0; $71 = ((($69)) + 4|0); $72 = HEAP32[$71>>2]|0; $73 = ($70|0)==($72|0); if (!($73)) { STACKTOP = sp;return; } $63 = 0; while(1) { $74 = $63; $75 = ((($67)) + 8|0); $76 = HEAP32[$75>>2]|0; $77 = ($74>>>0)<($76>>>0); if (!($77)) { break; } $78 = ((($67)) + 36|0); $79 = ((($67)) + 20|0); $80 = HEAP32[$79>>2]|0; $81 = (($80) + 1)|0; __ZN6laszip6models10arithmeticC2EjbPj($64,$81,0,0); $58 = $78; $59 = $64; $82 = $58; $83 = ((($82)) + 4|0); $84 = HEAP32[$83>>2]|0; $57 = $82; $85 = $57; $86 = ((($85)) + 8|0); $56 = $86; $87 = $56; $55 = $87; $88 = $55; $89 = HEAP32[$88>>2]|0; $90 = ($84>>>0)<($89>>>0); if ($90) { $52 = $60; $53 = $82; $54 = 1; $35 = $82; $91 = $35; $92 = ((($91)) + 8|0); $34 = $92; $93 = $34; $33 = $93; $94 = $33; $95 = ((($82)) + 4|0); $96 = HEAP32[$95>>2]|0; $31 = $96; $97 = $31; $98 = $59; $32 = $98; $99 = $32; $46 = $94; $47 = $97; $48 = $99; $100 = $46; $101 = $47; $102 = $48; $45 = $102; $103 = $45; ;HEAP8[$44>>0]=HEAP8[$49>>0]|0; $41 = $100; $42 = $101; $43 = $103; $104 = $41; $105 = $42; $106 = $43; $40 = $106; $107 = $40; $37 = $104; $38 = $105; $39 = $107; $108 = $38; $109 = $39; $36 = $109; $110 = $36; __ZN6laszip6models10arithmeticC2EOS1_($108,$110); $50 = $60; $111 = ((($82)) + 4|0); $112 = HEAP32[$111>>2]|0; $113 = ((($112)) + 44|0); HEAP32[$111>>2] = $113; } else { $114 = $59; $51 = $114; $115 = $51; __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($82,$115); } __ZN6laszip6models10arithmeticD2Ev($64); $116 = $63; $117 = (($116) + 1)|0; $63 = $117; } $63 = 1; while(1) { $118 = $63; $119 = ((($67)) + 20|0); $120 = HEAP32[$119>>2]|0; $121 = ($118>>>0)<=($120>>>0); if (!($121)) { break; } $122 = $63; $123 = ((($67)) + 12|0); $124 = HEAP32[$123>>2]|0; $125 = ($122>>>0)<=($124>>>0); if ($125) { $126 = $63; $127 = 1 << $126; $131 = $127; } else { $128 = ((($67)) + 12|0); $129 = HEAP32[$128>>2]|0; $130 = 1 << $129; $131 = $130; } $65 = $131; $132 = ((($67)) + 68|0); $133 = $65; __ZN6laszip6models10arithmeticC2EjbPj($66,$133,0,0); $28 = $132; $29 = $66; $134 = $28; $135 = ((($134)) + 4|0); $136 = HEAP32[$135>>2]|0; $27 = $134; $137 = $27; $138 = ((($137)) + 8|0); $26 = $138; $139 = $26; $25 = $139; $140 = $25; $141 = HEAP32[$140>>2]|0; $142 = ($136>>>0)<($141>>>0); if ($142) { $22 = $30; $23 = $134; $24 = 1; $5 = $134; $143 = $5; $144 = ((($143)) + 8|0); $4 = $144; $145 = $4; $3 = $145; $146 = $3; $147 = ((($134)) + 4|0); $148 = HEAP32[$147>>2]|0; $1 = $148; $149 = $1; $150 = $29; $2 = $150; $151 = $2; $16 = $146; $17 = $149; $18 = $151; $152 = $16; $153 = $17; $154 = $18; $15 = $154; $155 = $15; ;HEAP8[$14>>0]=HEAP8[$19>>0]|0; $11 = $152; $12 = $153; $13 = $155; $156 = $11; $157 = $12; $158 = $13; $10 = $158; $159 = $10; $7 = $156; $8 = $157; $9 = $159; $160 = $8; $161 = $9; $6 = $161; $162 = $6; __ZN6laszip6models10arithmeticC2EOS1_($160,$162); $20 = $30; $163 = ((($134)) + 4|0); $164 = HEAP32[$163>>2]|0; $165 = ((($164)) + 44|0); HEAP32[$163>>2] = $165; } else { $166 = $29; $21 = $166; $167 = $21; __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($134,$167); } __ZN6laszip6models10arithmeticD2Ev($66); $168 = $63; $169 = (($168) + 1)|0; $63 = $169; } STACKTOP = sp;return; } function __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $6 = $0; $7 = $1; $8 = $2; $9 = $3; $11 = $6; $12 = $8; $13 = $7; $14 = ((($11)) + 36|0); $15 = $9; $4 = $14; $5 = $15; $16 = $4; $17 = HEAP32[$16>>2]|0; $18 = $5; $19 = (($17) + (($18*44)|0)|0); $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0); $21 = (($12) + ($20))|0; $10 = $21; $22 = $10; $23 = ($22|0)<(0); if ($23) { $24 = ((($11)) + 24|0); $25 = HEAP32[$24>>2]|0; $26 = $10; $27 = (($26) + ($25))|0; $10 = $27; $36 = $10; STACKTOP = sp;return ($36|0); } $28 = $10; $29 = ((($11)) + 24|0); $30 = HEAP32[$29>>2]|0; $31 = ($28>>>0)>=($30>>>0); if (!($31)) { $36 = $10; STACKTOP = sp;return ($36|0); } $32 = ((($11)) + 24|0); $33 = HEAP32[$32>>2]|0; $34 = $10; $35 = (($34) - ($33))|0; $10 = $35; $36 = $10; STACKTOP = sp;return ($36|0); } function __ZN6laszip13decompressors7integerD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 68|0); __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3); $4 = ((($2)) + 36|0); __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($4); STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZN6laszip22chunk_table_read_errorD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip22chunk_table_read_errorD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip13not_supportedD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13not_supportedD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip26unknown_chunk_table_formatD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip26unknown_chunk_table_formatD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__26vectorIyNS_9allocatorIyEEE8__appendEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0; var $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0; var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0; var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0; var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0; var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $8 = sp; $11 = sp + 140|0; $19 = sp + 76|0; $22 = sp + 64|0; $33 = sp + 4|0; $30 = $0; $31 = $1; $34 = $30; $29 = $34; $35 = $29; $36 = ((($35)) + 8|0); $28 = $36; $37 = $28; $27 = $37; $38 = $27; $39 = HEAP32[$38>>2]|0; $40 = ((($34)) + 4|0); $41 = HEAP32[$40>>2]|0; $42 = $39; $43 = $41; $44 = (($42) - ($43))|0; $45 = (($44|0) / 8)&-1; $46 = $31; $47 = ($45>>>0)>=($46>>>0); if ($47) { $48 = $31; __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($34,$48); STACKTOP = sp;return; } $26 = $34; $49 = $26; $50 = ((($49)) + 8|0); $25 = $50; $51 = $25; $24 = $51; $52 = $24; $32 = $52; $23 = $34; $53 = $23; $54 = ((($53)) + 4|0); $55 = HEAP32[$54>>2]|0; $56 = HEAP32[$53>>2]|0; $57 = $55; $58 = $56; $59 = (($57) - ($58))|0; $60 = (($59|0) / 8)&-1; $61 = $31; $62 = (($60) + ($61))|0; $18 = $34; HEAP32[$19>>2] = $62; $63 = $18; $64 = (__ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($63)|0); $20 = $64; $65 = HEAP32[$19>>2]|0; $66 = $20; $67 = ($65>>>0)>($66>>>0); if ($67) { __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63); // unreachable; } $16 = $63; $68 = $16; $15 = $68; $69 = $15; $14 = $69; $70 = $14; $71 = ((($70)) + 8|0); $13 = $71; $72 = $13; $12 = $72; $73 = $12; $74 = HEAP32[$73>>2]|0; $75 = HEAP32[$69>>2]|0; $76 = $74; $77 = $75; $78 = (($76) - ($77))|0; $79 = (($78|0) / 8)&-1; $21 = $79; $80 = $21; $81 = $20; $82 = (($81>>>0) / 2)&-1; $83 = ($80>>>0)>=($82>>>0); if ($83) { $84 = $20; $17 = $84; } else { $85 = $21; $86 = $85<<1; HEAP32[$22>>2] = $86; $9 = $22; $10 = $19; $87 = $9; $88 = $10; ;HEAP8[$8>>0]=HEAP8[$11>>0]|0; $6 = $87; $7 = $88; $89 = $6; $90 = $7; $3 = $8; $4 = $89; $5 = $90; $91 = $4; $92 = HEAP32[$91>>2]|0; $93 = $5; $94 = HEAP32[$93>>2]|0; $95 = ($92>>>0)<($94>>>0); $96 = $7; $97 = $6; $98 = $95 ? $96 : $97; $99 = HEAP32[$98>>2]|0; $17 = $99; } $100 = $17; $2 = $34; $101 = $2; $102 = ((($101)) + 4|0); $103 = HEAP32[$102>>2]|0; $104 = HEAP32[$101>>2]|0; $105 = $103; $106 = $104; $107 = (($105) - ($106))|0; $108 = (($107|0) / 8)&-1; $109 = $32; __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($33,$100,$108,$109); $110 = $31; __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($33,$110); __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($34,$33); __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($33); STACKTOP = sp;return; } function __ZNSt3__26vectorIyNS_9allocatorIyEEE18__construct_at_endEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $10 = sp; $13 = sp + 73|0; $21 = sp + 72|0; $18 = $0; $19 = $1; $22 = $18; $17 = $22; $23 = $17; $24 = ((($23)) + 8|0); $16 = $24; $25 = $16; $15 = $25; $26 = $15; $20 = $26; while(1) { $2 = $21; $3 = $22; $4 = 1; $27 = $20; $28 = ((($22)) + 4|0); $29 = HEAP32[$28>>2]|0; $5 = $29; $30 = $5; $11 = $27; $12 = $30; $31 = $11; $32 = $12; ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; $8 = $31; $9 = $32; $33 = $8; $34 = $9; $6 = $33; $7 = $34; $35 = $7; $36 = $35; $37 = $36; HEAP32[$37>>2] = 0; $38 = (($36) + 4)|0; $39 = $38; HEAP32[$39>>2] = 0; $40 = ((($22)) + 4|0); $41 = HEAP32[$40>>2]|0; $42 = ((($41)) + 8|0); HEAP32[$40>>2] = $42; $43 = $19; $44 = (($43) + -1)|0; $19 = $44; $14 = $21; $45 = $19; $46 = ($45>>>0)>(0); if (!($46)) { break; } } STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEEC2EjjS3_($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $35 = sp; $31 = $0; $32 = $1; $33 = $2; $34 = $3; $36 = $31; $37 = ((($36)) + 12|0); HEAP32[$35>>2] = 0; $38 = $34; $28 = $37; $29 = $35; $30 = $38; $39 = $28; $40 = $29; $27 = $40; $41 = $27; $21 = $39; $22 = $41; $42 = $21; $43 = $22; $20 = $43; HEAP32[$42>>2] = 0; $44 = ((($39)) + 4|0); $45 = $30; $23 = $45; $46 = $23; $25 = $44; $26 = $46; $47 = $25; $48 = $26; $24 = $48; $49 = $24; HEAP32[$47>>2] = $49; $50 = $32; $51 = ($50|0)!=(0); do { if ($51) { $6 = $36; $52 = $6; $53 = ((($52)) + 12|0); $5 = $53; $54 = $5; $55 = ((($54)) + 4|0); $4 = $55; $56 = $4; $57 = HEAP32[$56>>2]|0; $58 = $32; $15 = $57; $16 = $58; $59 = $15; $60 = $16; $12 = $59; $13 = $60; $14 = 0; $61 = $12; $62 = $13; $11 = $61; $63 = ($62>>>0)>(536870911); if ($63) { $9 = 4287; $64 = (___cxa_allocate_exception(8)|0); $65 = $9; $7 = $64; $8 = $65; $66 = $7; $67 = $8; __ZNSt11logic_errorC2EPKc($66,$67); HEAP32[$66>>2] = (3660); ___cxa_throw(($64|0),(1384|0),(220|0)); // unreachable; } else { $68 = $13; $69 = $68<<3; $10 = $69; $70 = $10; $71 = (__Znwj($70)|0); $72 = $71; break; } } else { $72 = 0; } } while(0); HEAP32[$36>>2] = $72; $73 = HEAP32[$36>>2]|0; $74 = $33; $75 = (($73) + ($74<<3)|0); $76 = ((($36)) + 8|0); HEAP32[$76>>2] = $75; $77 = ((($36)) + 4|0); HEAP32[$77>>2] = $75; $78 = HEAP32[$36>>2]|0; $79 = $32; $80 = (($78) + ($79<<3)|0); $19 = $36; $81 = $19; $82 = ((($81)) + 12|0); $18 = $82; $83 = $18; $17 = $83; $84 = $17; HEAP32[$84>>2] = $80; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEE18__construct_at_endEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $7 = sp; $10 = sp + 56|0; $14 = $0; $15 = $1; $17 = $14; $13 = $17; $18 = $13; $19 = ((($18)) + 12|0); $12 = $19; $20 = $12; $21 = ((($20)) + 4|0); $11 = $21; $22 = $11; $23 = HEAP32[$22>>2]|0; $16 = $23; while(1) { $24 = $16; $25 = ((($17)) + 8|0); $26 = HEAP32[$25>>2]|0; $2 = $26; $27 = $2; $8 = $24; $9 = $27; $28 = $8; $29 = $9; ;HEAP8[$7>>0]=HEAP8[$10>>0]|0; $5 = $28; $6 = $29; $30 = $5; $31 = $6; $3 = $30; $4 = $31; $32 = $4; $33 = $32; $34 = $33; HEAP32[$34>>2] = 0; $35 = (($33) + 4)|0; $36 = $35; HEAP32[$36>>2] = 0; $37 = ((($17)) + 8|0); $38 = HEAP32[$37>>2]|0; $39 = ((($38)) + 8|0); HEAP32[$37>>2] = $39; $40 = $15; $41 = (($40) + -1)|0; $15 = $41; $42 = $15; $43 = ($42>>>0)>(0); if (!($43)) { break; } } STACKTOP = sp;return; } function __ZNSt3__26vectorIyNS_9allocatorIyEEE26__swap_out_circular_bufferERNS_14__split_bufferIyRS2_EE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0; var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0; var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0; var sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0); $15 = sp + 288|0; $21 = sp + 264|0; $33 = sp + 216|0; $86 = $0; $87 = $1; $88 = $86; $85 = $88; $89 = $85; $84 = $89; $90 = $84; $91 = HEAP32[$90>>2]|0; $83 = $91; $92 = $83; $62 = $89; $93 = $62; $94 = HEAP32[$93>>2]|0; $61 = $94; $95 = $61; $67 = $89; $96 = $67; $66 = $96; $97 = $66; $65 = $97; $98 = $65; $99 = ((($98)) + 8|0); $64 = $99; $100 = $64; $63 = $100; $101 = $63; $102 = HEAP32[$101>>2]|0; $103 = HEAP32[$97>>2]|0; $104 = $102; $105 = $103; $106 = (($104) - ($105))|0; $107 = (($106|0) / 8)&-1; $108 = (($95) + ($107<<3)|0); $69 = $89; $109 = $69; $110 = HEAP32[$109>>2]|0; $68 = $110; $111 = $68; $70 = $89; $112 = $70; $113 = ((($112)) + 4|0); $114 = HEAP32[$113>>2]|0; $115 = HEAP32[$112>>2]|0; $116 = $114; $117 = $115; $118 = (($116) - ($117))|0; $119 = (($118|0) / 8)&-1; $120 = (($111) + ($119<<3)|0); $72 = $89; $121 = $72; $122 = HEAP32[$121>>2]|0; $71 = $122; $123 = $71; $77 = $89; $124 = $77; $76 = $124; $125 = $76; $75 = $125; $126 = $75; $127 = ((($126)) + 8|0); $74 = $127; $128 = $74; $73 = $128; $129 = $73; $130 = HEAP32[$129>>2]|0; $131 = HEAP32[$125>>2]|0; $132 = $130; $133 = $131; $134 = (($132) - ($133))|0; $135 = (($134|0) / 8)&-1; $136 = (($123) + ($135<<3)|0); $78 = $89; $79 = $92; $80 = $108; $81 = $120; $82 = $136; $4 = $88; $137 = $4; $138 = ((($137)) + 8|0); $3 = $138; $139 = $3; $2 = $139; $140 = $2; $141 = HEAP32[$88>>2]|0; $142 = ((($88)) + 4|0); $143 = HEAP32[$142>>2]|0; $144 = $87; $145 = ((($144)) + 4|0); $5 = $140; $6 = $141; $7 = $143; $8 = $145; $146 = $7; $147 = $6; $148 = $146; $149 = $147; $150 = (($148) - ($149))|0; $151 = (($150|0) / 8)&-1; $9 = $151; $152 = $9; $153 = $8; $154 = HEAP32[$153>>2]|0; $155 = (0 - ($152))|0; $156 = (($154) + ($155<<3)|0); HEAP32[$153>>2] = $156; $157 = $9; $158 = ($157|0)>(0); if ($158) { $159 = $8; $160 = HEAP32[$159>>2]|0; $161 = $6; $162 = $9; $163 = $162<<3; _memcpy(($160|0),($161|0),($163|0))|0; } $164 = $87; $165 = ((($164)) + 4|0); $13 = $88; $14 = $165; $166 = $13; $12 = $166; $167 = $12; $168 = HEAP32[$167>>2]|0; HEAP32[$15>>2] = $168; $169 = $14; $10 = $169; $170 = $10; $171 = HEAP32[$170>>2]|0; $172 = $13; HEAP32[$172>>2] = $171; $11 = $15; $173 = $11; $174 = HEAP32[$173>>2]|0; $175 = $14; HEAP32[$175>>2] = $174; $176 = ((($88)) + 4|0); $177 = $87; $178 = ((($177)) + 8|0); $19 = $176; $20 = $178; $179 = $19; $18 = $179; $180 = $18; $181 = HEAP32[$180>>2]|0; HEAP32[$21>>2] = $181; $182 = $20; $16 = $182; $183 = $16; $184 = HEAP32[$183>>2]|0; $185 = $19; HEAP32[$185>>2] = $184; $17 = $21; $186 = $17; $187 = HEAP32[$186>>2]|0; $188 = $20; HEAP32[$188>>2] = $187; $24 = $88; $189 = $24; $190 = ((($189)) + 8|0); $23 = $190; $191 = $23; $22 = $191; $192 = $22; $193 = $87; $27 = $193; $194 = $27; $195 = ((($194)) + 12|0); $26 = $195; $196 = $26; $25 = $196; $197 = $25; $31 = $192; $32 = $197; $198 = $31; $30 = $198; $199 = $30; $200 = HEAP32[$199>>2]|0; HEAP32[$33>>2] = $200; $201 = $32; $28 = $201; $202 = $28; $203 = HEAP32[$202>>2]|0; $204 = $31; HEAP32[$204>>2] = $203; $29 = $33; $205 = $29; $206 = HEAP32[$205>>2]|0; $207 = $32; HEAP32[$207>>2] = $206; $208 = $87; $209 = ((($208)) + 4|0); $210 = HEAP32[$209>>2]|0; $211 = $87; HEAP32[$211>>2] = $210; $34 = $88; $212 = $34; $213 = ((($212)) + 4|0); $214 = HEAP32[$213>>2]|0; $215 = HEAP32[$212>>2]|0; $216 = $214; $217 = $215; $218 = (($216) - ($217))|0; $219 = (($218|0) / 8)&-1; $58 = $88; $59 = $219; $220 = $58; $57 = $220; $221 = $57; $222 = HEAP32[$221>>2]|0; $56 = $222; $223 = $56; $36 = $220; $224 = $36; $225 = HEAP32[$224>>2]|0; $35 = $225; $226 = $35; $41 = $220; $227 = $41; $40 = $227; $228 = $40; $39 = $228; $229 = $39; $230 = ((($229)) + 8|0); $38 = $230; $231 = $38; $37 = $231; $232 = $37; $233 = HEAP32[$232>>2]|0; $234 = HEAP32[$228>>2]|0; $235 = $233; $236 = $234; $237 = (($235) - ($236))|0; $238 = (($237|0) / 8)&-1; $239 = (($226) + ($238<<3)|0); $43 = $220; $240 = $43; $241 = HEAP32[$240>>2]|0; $42 = $241; $242 = $42; $48 = $220; $243 = $48; $47 = $243; $244 = $47; $46 = $244; $245 = $46; $246 = ((($245)) + 8|0); $45 = $246; $247 = $45; $44 = $247; $248 = $44; $249 = HEAP32[$248>>2]|0; $250 = HEAP32[$244>>2]|0; $251 = $249; $252 = $250; $253 = (($251) - ($252))|0; $254 = (($253|0) / 8)&-1; $255 = (($242) + ($254<<3)|0); $50 = $220; $256 = $50; $257 = HEAP32[$256>>2]|0; $49 = $257; $258 = $49; $259 = $59; $260 = (($258) + ($259<<3)|0); $51 = $220; $52 = $223; $53 = $239; $54 = $255; $55 = $260; $60 = $88; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIyRNS_9allocatorIyEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $19 = sp + 8|0; $22 = sp + 133|0; $29 = sp; $32 = sp + 132|0; $34 = $0; $35 = $34; $33 = $35; $36 = $33; $37 = ((($36)) + 4|0); $38 = HEAP32[$37>>2]|0; $30 = $36; $31 = $38; $39 = $30; $40 = $31; ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; $27 = $39; $28 = $40; $41 = $27; while(1) { $42 = $28; $43 = ((($41)) + 8|0); $44 = HEAP32[$43>>2]|0; $45 = ($42|0)!=($44|0); if (!($45)) { break; } $26 = $41; $46 = $26; $47 = ((($46)) + 12|0); $25 = $47; $48 = $25; $49 = ((($48)) + 4|0); $24 = $49; $50 = $24; $51 = HEAP32[$50>>2]|0; $52 = ((($41)) + 8|0); $53 = HEAP32[$52>>2]|0; $54 = ((($53)) + -8|0); HEAP32[$52>>2] = $54; $23 = $54; $55 = $23; $20 = $51; $21 = $55; $56 = $20; $57 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $56; $18 = $57; $58 = $17; $59 = $18; $15 = $58; $16 = $59; } $60 = HEAP32[$35>>2]|0; $61 = ($60|0)!=(0|0); if (!($61)) { STACKTOP = sp;return; } $14 = $35; $62 = $14; $63 = ((($62)) + 12|0); $13 = $63; $64 = $13; $65 = ((($64)) + 4|0); $12 = $65; $66 = $12; $67 = HEAP32[$66>>2]|0; $68 = HEAP32[$35>>2]|0; $4 = $35; $69 = $4; $3 = $69; $70 = $3; $71 = ((($70)) + 12|0); $2 = $71; $72 = $2; $1 = $72; $73 = $1; $74 = HEAP32[$73>>2]|0; $75 = HEAP32[$69>>2]|0; $76 = $74; $77 = $75; $78 = (($76) - ($77))|0; $79 = (($78|0) / 8)&-1; $9 = $67; $10 = $68; $11 = $79; $80 = $9; $81 = $10; $82 = $11; $6 = $80; $7 = $81; $8 = $82; $83 = $7; $5 = $83; $84 = $5; __ZdlPv($84); STACKTOP = sp;return; } function __ZNKSt3__26vectorIyNS_9allocatorIyEEE8max_sizeEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $6 = sp + 8|0; $9 = sp + 77|0; $12 = sp; $14 = sp + 76|0; $19 = sp + 16|0; $20 = sp + 12|0; $18 = $0; $21 = $18; $17 = $21; $22 = $17; $23 = ((($22)) + 8|0); $16 = $23; $24 = $16; $15 = $24; $25 = $15; $13 = $25; $26 = $13; ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; $11 = $26; $27 = $11; $10 = $27; HEAP32[$19>>2] = 536870911; HEAP32[$20>>2] = 2147483647; $7 = $19; $8 = $20; $28 = $7; $29 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $28; $5 = $29; $30 = $5; $31 = $4; $1 = $6; $2 = $30; $3 = $31; $32 = $2; $33 = HEAP32[$32>>2]|0; $34 = $3; $35 = HEAP32[$34>>2]|0; $36 = ($33>>>0)<($35>>>0); $37 = $5; $38 = $4; $39 = $36 ? $37 : $38; $40 = HEAP32[$39>>2]|0; STACKTOP = sp;return ($40|0); } function __ZN6laszip6models14arithmetic_bitC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 12|0); HEAP32[$3>>2] = 1; $4 = ((($2)) + 16|0); HEAP32[$4>>2] = 2; $5 = ((($2)) + 8|0); HEAP32[$5>>2] = 4096; $6 = ((($2)) + 4|0); HEAP32[$6>>2] = 4; HEAP32[$2>>2] = 4; STACKTOP = sp;return; } function __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__213__vector_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $19 = sp; $22 = sp + 120|0; $31 = $0; $32 = $31; $33 = HEAP32[$32>>2]|0; $34 = ($33|0)!=(0|0); if (!($34)) { STACKTOP = sp;return; } $30 = $32; $35 = $30; $36 = HEAP32[$35>>2]|0; $27 = $35; $28 = $36; $37 = $27; $38 = ((($37)) + 4|0); $39 = HEAP32[$38>>2]|0; $29 = $39; while(1) { $40 = $28; $41 = $29; $42 = ($40|0)!=($41|0); if (!($42)) { break; } $26 = $37; $43 = $26; $44 = ((($43)) + 8|0); $25 = $44; $45 = $25; $24 = $45; $46 = $24; $47 = $29; $48 = ((($47)) + -44|0); $29 = $48; $23 = $48; $49 = $23; $20 = $46; $21 = $49; $50 = $20; $51 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $50; $18 = $51; $52 = $17; $53 = $18; $15 = $52; $16 = $53; $54 = $16; __ZN6laszip6models10arithmeticD2Ev($54); } $55 = $28; $56 = ((($37)) + 4|0); HEAP32[$56>>2] = $55; $14 = $32; $57 = $14; $58 = ((($57)) + 8|0); $13 = $58; $59 = $13; $12 = $59; $60 = $12; $61 = HEAP32[$32>>2]|0; $4 = $32; $62 = $4; $3 = $62; $63 = $3; $64 = ((($63)) + 8|0); $2 = $64; $65 = $2; $1 = $65; $66 = $1; $67 = HEAP32[$66>>2]|0; $68 = HEAP32[$62>>2]|0; $69 = $67; $70 = $68; $71 = (($69) - ($70))|0; $72 = (($71|0) / 44)&-1; $9 = $60; $10 = $61; $11 = $72; $73 = $9; $74 = $10; $75 = $11; $6 = $73; $7 = $74; $8 = $75; $76 = $7; $5 = $76; $77 = $5; __ZdlPv($77); STACKTOP = sp;return; } function __ZN6laszip6models10arithmeticD2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 8|0); $4 = HEAP32[$3>>2]|0; $5 = ($4|0)!=(0|0); if ($5) { $6 = ((($2)) + 8|0); $7 = HEAP32[$6>>2]|0; __ZN6laszip5utilsL12aligned_freeEPv($7); } $8 = ((($2)) + 12|0); $9 = HEAP32[$8>>2]|0; $10 = ($9|0)!=(0|0); if ($10) { $11 = ((($2)) + 12|0); $12 = HEAP32[$11>>2]|0; __ZN6laszip5utilsL12aligned_freeEPv($12); } $13 = ((($2)) + 16|0); $14 = HEAP32[$13>>2]|0; $15 = ($14|0)!=(0|0); if (!($15)) { STACKTOP = sp;return; } $16 = ((($2)) + 16|0); $17 = HEAP32[$16>>2]|0; __ZN6laszip5utilsL12aligned_freeEPv($17); STACKTOP = sp;return; } function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4|0); $4 = HEAP32[$3>>2]|0; $5 = ((($2)) + 8|0); $6 = HEAP32[$5>>2]|0; $7 = ($4|0)>=($6|0); if ($7) { __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($2); } $8 = ((($2)) + 12|0); $9 = HEAP32[$8>>2]|0; $10 = ((($2)) + 4|0); $11 = HEAP32[$10>>2]|0; $12 = (($11) + 1)|0; HEAP32[$10>>2] = $12; $13 = (($9) + ($11)|0); $14 = HEAP8[$13>>0]|0; STACKTOP = sp;return ($14|0); } function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4|0); HEAP32[$3>>2] = 0; $4 = HEAP32[$2>>2]|0; $5 = ((($2)) + 12|0); $6 = HEAP32[$5>>2]|0; __ZN6laszip7streams13memory_stream4readEPci($4,$6,1048576); $7 = HEAP32[$2>>2]|0; $8 = (__ZN6laszip7streams13memory_stream6gcountEv($7)|0); $9 = ((($2)) + 8|0); HEAP32[$9>>2] = $8; $10 = ((($2)) + 8|0); $11 = HEAP32[$10>>2]|0; $12 = ($11|0)==(0); if ($12) { $13 = (___cxa_allocate_exception(8)|0); __ZN6laszip11end_of_fileC2Ev($13); ___cxa_throw(($13|0),(216|0),(40|0)); // unreachable; } else { STACKTOP = sp;return; } } function __ZN6laszip7streams13memory_stream6gcountEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 16|0); $4 = HEAP32[$3>>2]|0; STACKTOP = sp;return ($4|0); } function __ZN6laszip11end_of_fileC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,5363); HEAP32[$2>>2] = (1888); STACKTOP = sp;return; } function __ZN6laszip11end_of_fileD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip11end_of_fileD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11end_of_fileD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip6models10arithmeticC2EjbPj($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = $0; $5 = $1; $11 = $2&1; $6 = $11; $7 = $3; $12 = $4; $13 = $5; HEAP32[$12>>2] = $13; $14 = ((($12)) + 4|0); $15 = $6; $16 = $15&1; $17 = $16&1; HEAP8[$14>>0] = $17; $18 = ((($12)) + 8|0); HEAP32[$18>>2] = 0; $19 = ((($12)) + 12|0); HEAP32[$19>>2] = 0; $20 = ((($12)) + 16|0); HEAP32[$20>>2] = 0; $21 = HEAP32[$12>>2]|0; $22 = ($21>>>0)<(2); if ($22) { $25 = (___cxa_allocate_exception(8)|0); __ZNSt13runtime_errorC2EPKc($25,5383); ___cxa_throw(($25|0),(1368|0),(223|0)); // unreachable; } $23 = HEAP32[$12>>2]|0; $24 = ($23>>>0)>(2048); if ($24) { $25 = (___cxa_allocate_exception(8)|0); __ZNSt13runtime_errorC2EPKc($25,5383); ___cxa_throw(($25|0),(1368|0),(223|0)); // unreachable; } $26 = HEAP32[$12>>2]|0; $27 = (($26) - 1)|0; $28 = ((($12)) + 32|0); HEAP32[$28>>2] = $27; $29 = ((($12)) + 4|0); $30 = HEAP8[$29>>0]|0; $31 = $30&1; if ($31) { label = 10; } else { $32 = HEAP32[$12>>2]|0; $33 = ($32>>>0)>(16); if ($33) { $8 = 3; while(1) { $34 = HEAP32[$12>>2]|0; $35 = $8; $36 = (($35) + 2)|0; $37 = 1 << $36; $38 = ($34>>>0)>($37>>>0); $39 = $8; if (!($38)) { break; } $40 = (($39) + 1)|0; $8 = $40; } $41 = 1 << $39; $42 = ((($12)) + 36|0); HEAP32[$42>>2] = $41; $43 = $8; $44 = (15 - ($43))|0; $45 = ((($12)) + 40|0); HEAP32[$45>>2] = $44; $46 = ((($12)) + 36|0); $47 = HEAP32[$46>>2]|0; $48 = (($47) + 2)|0; $49 = $48<<2; $50 = (__ZN6laszip5utilsL14aligned_mallocEi($49)|0); $51 = ((($12)) + 16|0); HEAP32[$51>>2] = $50; } else { label = 10; } } if ((label|0) == 10) { $52 = ((($12)) + 16|0); HEAP32[$52>>2] = 0; $53 = ((($12)) + 40|0); HEAP32[$53>>2] = 0; $54 = ((($12)) + 36|0); HEAP32[$54>>2] = 0; } $55 = HEAP32[$12>>2]|0; $56 = $55<<2; $57 = (__ZN6laszip5utilsL14aligned_mallocEi($56)|0); $58 = ((($12)) + 8|0); HEAP32[$58>>2] = $57; $59 = HEAP32[$12>>2]|0; $60 = $59<<2; $61 = (__ZN6laszip5utilsL14aligned_mallocEi($60)|0); $62 = ((($12)) + 12|0); HEAP32[$62>>2] = $61; $63 = ((($12)) + 20|0); HEAP32[$63>>2] = 0; $64 = HEAP32[$12>>2]|0; $65 = ((($12)) + 24|0); HEAP32[$65>>2] = $64; $66 = $7; $67 = ($66|0)!=(0|0); if ($67) { $9 = 0; while(1) { $68 = $9; $69 = HEAP32[$12>>2]|0; $70 = ($68>>>0)<($69>>>0); if (!($70)) { break; } $71 = $7; $72 = $9; $73 = (($71) + ($72<<2)|0); $74 = HEAP32[$73>>2]|0; $75 = ((($12)) + 12|0); $76 = HEAP32[$75>>2]|0; $77 = $9; $78 = (($76) + ($77<<2)|0); HEAP32[$78>>2] = $74; $79 = $9; $80 = (($79) + 1)|0; $9 = $80; } __ZN6laszip6models10arithmetic6updateEv($12); $90 = HEAP32[$12>>2]|0; $91 = (($90) + 6)|0; $92 = $91 >>> 1; $93 = ((($12)) + 24|0); HEAP32[$93>>2] = $92; $94 = ((($12)) + 28|0); HEAP32[$94>>2] = $92; STACKTOP = sp;return; } else { $10 = 0; while(1) { $81 = $10; $82 = HEAP32[$12>>2]|0; $83 = ($81>>>0)<($82>>>0); if (!($83)) { break; } $84 = ((($12)) + 12|0); $85 = HEAP32[$84>>2]|0; $86 = $10; $87 = (($85) + ($86<<2)|0); HEAP32[$87>>2] = 1; $88 = $10; $89 = (($88) + 1)|0; $10 = $89; } __ZN6laszip6models10arithmetic6updateEv($12); $90 = HEAP32[$12>>2]|0; $91 = (($90) + 6)|0; $92 = $91 >>> 1; $93 = ((($12)) + 24|0); HEAP32[$93>>2] = $92; $94 = ((($12)) + 28|0); HEAP32[$94>>2] = $92; STACKTOP = sp;return; } } function __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE21__push_back_slow_pathIS3_EEvOT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0; var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0; var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0; var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0; var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0; var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); $10 = sp + 8|0; $15 = sp + 193|0; $24 = sp; $27 = sp + 192|0; $35 = sp + 72|0; $38 = sp + 60|0; $46 = sp + 12|0; $43 = $0; $44 = $1; $47 = $43; $42 = $47; $48 = $42; $49 = ((($48)) + 8|0); $41 = $49; $50 = $41; $40 = $50; $51 = $40; $45 = $51; $39 = $47; $52 = $39; $53 = ((($52)) + 4|0); $54 = HEAP32[$53>>2]|0; $55 = HEAP32[$52>>2]|0; $56 = $54; $57 = $55; $58 = (($56) - ($57))|0; $59 = (($58|0) / 44)&-1; $60 = (($59) + 1)|0; $34 = $47; HEAP32[$35>>2] = $60; $61 = $34; $62 = (__ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($61)|0); $36 = $62; $63 = HEAP32[$35>>2]|0; $64 = $36; $65 = ($63>>>0)>($64>>>0); if ($65) { __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($61); // unreachable; } $32 = $61; $66 = $32; $31 = $66; $67 = $31; $30 = $67; $68 = $30; $69 = ((($68)) + 8|0); $29 = $69; $70 = $29; $28 = $70; $71 = $28; $72 = HEAP32[$71>>2]|0; $73 = HEAP32[$67>>2]|0; $74 = $72; $75 = $73; $76 = (($74) - ($75))|0; $77 = (($76|0) / 44)&-1; $37 = $77; $78 = $37; $79 = $36; $80 = (($79>>>0) / 2)&-1; $81 = ($78>>>0)>=($80>>>0); if ($81) { $82 = $36; $33 = $82; } else { $83 = $37; $84 = $83<<1; HEAP32[$38>>2] = $84; $25 = $38; $26 = $35; $85 = $25; $86 = $26; ;HEAP8[$24>>0]=HEAP8[$27>>0]|0; $22 = $85; $23 = $86; $87 = $22; $88 = $23; $19 = $24; $20 = $87; $21 = $88; $89 = $20; $90 = HEAP32[$89>>2]|0; $91 = $21; $92 = HEAP32[$91>>2]|0; $93 = ($90>>>0)<($92>>>0); $94 = $23; $95 = $22; $96 = $93 ? $94 : $95; $97 = HEAP32[$96>>2]|0; $33 = $97; } $98 = $33; $18 = $47; $99 = $18; $100 = ((($99)) + 4|0); $101 = HEAP32[$100>>2]|0; $102 = HEAP32[$99>>2]|0; $103 = $101; $104 = $102; $105 = (($103) - ($104))|0; $106 = (($105|0) / 44)&-1; $107 = $45; __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($46,$98,$106,$107); $108 = $45; $109 = ((($46)) + 8|0); $110 = HEAP32[$109>>2]|0; $17 = $110; $111 = $17; $112 = $44; $16 = $112; $113 = $16; $12 = $108; $13 = $111; $14 = $113; $114 = $12; $115 = $13; $116 = $14; $11 = $116; $117 = $11; ;HEAP8[$10>>0]=HEAP8[$15>>0]|0; $7 = $114; $8 = $115; $9 = $117; $118 = $7; $119 = $8; $120 = $9; $6 = $120; $121 = $6; $3 = $118; $4 = $119; $5 = $121; $122 = $4; $123 = $5; $2 = $123; $124 = $2; __ZN6laszip6models10arithmeticC2EOS1_($122,$124); $125 = ((($46)) + 8|0); $126 = HEAP32[$125>>2]|0; $127 = ((($126)) + 44|0); HEAP32[$125>>2] = $127; __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($47,$46); __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($46); STACKTOP = sp;return; } function __ZN6laszip6models10arithmeticC2EOS1_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; $6 = HEAP32[$5>>2]|0; HEAP32[$4>>2] = $6; $7 = ((($4)) + 4|0); $8 = $3; $9 = ((($8)) + 4|0); $10 = HEAP8[$9>>0]|0; $11 = $10&1; $12 = $11&1; HEAP8[$7>>0] = $12; $13 = ((($4)) + 8|0); $14 = $3; $15 = ((($14)) + 8|0); $16 = HEAP32[$15>>2]|0; HEAP32[$13>>2] = $16; $17 = ((($4)) + 12|0); $18 = $3; $19 = ((($18)) + 12|0); $20 = HEAP32[$19>>2]|0; HEAP32[$17>>2] = $20; $21 = ((($4)) + 16|0); $22 = $3; $23 = ((($22)) + 16|0); $24 = HEAP32[$23>>2]|0; HEAP32[$21>>2] = $24; $25 = ((($4)) + 20|0); $26 = $3; $27 = ((($26)) + 20|0); $28 = HEAP32[$27>>2]|0; HEAP32[$25>>2] = $28; $29 = ((($4)) + 24|0); $30 = $3; $31 = ((($30)) + 24|0); $32 = HEAP32[$31>>2]|0; HEAP32[$29>>2] = $32; $33 = ((($4)) + 28|0); $34 = $3; $35 = ((($34)) + 28|0); $36 = HEAP32[$35>>2]|0; HEAP32[$33>>2] = $36; $37 = ((($4)) + 32|0); $38 = $3; $39 = ((($38)) + 32|0); $40 = HEAP32[$39>>2]|0; HEAP32[$37>>2] = $40; $41 = ((($4)) + 36|0); $42 = $3; $43 = ((($42)) + 36|0); $44 = HEAP32[$43>>2]|0; HEAP32[$41>>2] = $44; $45 = ((($4)) + 40|0); $46 = $3; $47 = ((($46)) + 40|0); $48 = HEAP32[$47>>2]|0; HEAP32[$45>>2] = $48; $49 = $3; $50 = ((($49)) + 12|0); HEAP32[$50>>2] = 0; $51 = $3; $52 = ((($51)) + 16|0); HEAP32[$52>>2] = 0; $53 = $3; $54 = ((($53)) + 8|0); HEAP32[$54>>2] = 0; $55 = $3; $56 = ((($55)) + 12|0); HEAP32[$56>>2] = 0; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEEC2EjjS6_($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $35 = sp; $31 = $0; $32 = $1; $33 = $2; $34 = $3; $36 = $31; $37 = ((($36)) + 12|0); HEAP32[$35>>2] = 0; $38 = $34; $28 = $37; $29 = $35; $30 = $38; $39 = $28; $40 = $29; $27 = $40; $41 = $27; $21 = $39; $22 = $41; $42 = $21; $43 = $22; $20 = $43; HEAP32[$42>>2] = 0; $44 = ((($39)) + 4|0); $45 = $30; $23 = $45; $46 = $23; $25 = $44; $26 = $46; $47 = $25; $48 = $26; $24 = $48; $49 = $24; HEAP32[$47>>2] = $49; $50 = $32; $51 = ($50|0)!=(0); do { if ($51) { $6 = $36; $52 = $6; $53 = ((($52)) + 12|0); $5 = $53; $54 = $5; $55 = ((($54)) + 4|0); $4 = $55; $56 = $4; $57 = HEAP32[$56>>2]|0; $58 = $32; $15 = $57; $16 = $58; $59 = $15; $60 = $16; $12 = $59; $13 = $60; $14 = 0; $61 = $12; $62 = $13; $11 = $61; $63 = ($62>>>0)>(97612893); if ($63) { $9 = 4287; $64 = (___cxa_allocate_exception(8)|0); $65 = $9; $7 = $64; $8 = $65; $66 = $7; $67 = $8; __ZNSt11logic_errorC2EPKc($66,$67); HEAP32[$66>>2] = (3660); ___cxa_throw(($64|0),(1384|0),(220|0)); // unreachable; } else { $68 = $13; $69 = ($68*44)|0; $10 = $69; $70 = $10; $71 = (__Znwj($70)|0); $72 = $71; break; } } else { $72 = 0; } } while(0); HEAP32[$36>>2] = $72; $73 = HEAP32[$36>>2]|0; $74 = $33; $75 = (($73) + (($74*44)|0)|0); $76 = ((($36)) + 8|0); HEAP32[$76>>2] = $75; $77 = ((($36)) + 4|0); HEAP32[$77>>2] = $75; $78 = HEAP32[$36>>2]|0; $79 = $32; $80 = (($78) + (($79*44)|0)|0); $19 = $36; $81 = $19; $82 = ((($81)) + 12|0); $18 = $82; $83 = $18; $17 = $83; $84 = $17; HEAP32[$84>>2] = $80; STACKTOP = sp;return; } function __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS3_RS5_EE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0; var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0; var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0; var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0; var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0); $15 = sp; $20 = sp + 404|0; $31 = sp + 292|0; $37 = sp + 268|0; $49 = sp + 220|0; $102 = $0; $103 = $1; $104 = $102; $101 = $104; $105 = $101; $100 = $105; $106 = $100; $107 = HEAP32[$106>>2]|0; $99 = $107; $108 = $99; $78 = $105; $109 = $78; $110 = HEAP32[$109>>2]|0; $77 = $110; $111 = $77; $83 = $105; $112 = $83; $82 = $112; $113 = $82; $81 = $113; $114 = $81; $115 = ((($114)) + 8|0); $80 = $115; $116 = $80; $79 = $116; $117 = $79; $118 = HEAP32[$117>>2]|0; $119 = HEAP32[$113>>2]|0; $120 = $118; $121 = $119; $122 = (($120) - ($121))|0; $123 = (($122|0) / 44)&-1; $124 = (($111) + (($123*44)|0)|0); $85 = $105; $125 = $85; $126 = HEAP32[$125>>2]|0; $84 = $126; $127 = $84; $86 = $105; $128 = $86; $129 = ((($128)) + 4|0); $130 = HEAP32[$129>>2]|0; $131 = HEAP32[$128>>2]|0; $132 = $130; $133 = $131; $134 = (($132) - ($133))|0; $135 = (($134|0) / 44)&-1; $136 = (($127) + (($135*44)|0)|0); $88 = $105; $137 = $88; $138 = HEAP32[$137>>2]|0; $87 = $138; $139 = $87; $93 = $105; $140 = $93; $92 = $140; $141 = $92; $91 = $141; $142 = $91; $143 = ((($142)) + 8|0); $90 = $143; $144 = $90; $89 = $144; $145 = $89; $146 = HEAP32[$145>>2]|0; $147 = HEAP32[$141>>2]|0; $148 = $146; $149 = $147; $150 = (($148) - ($149))|0; $151 = (($150|0) / 44)&-1; $152 = (($139) + (($151*44)|0)|0); $94 = $105; $95 = $108; $96 = $124; $97 = $136; $98 = $152; $4 = $104; $153 = $4; $154 = ((($153)) + 8|0); $3 = $154; $155 = $3; $2 = $155; $156 = $2; $157 = HEAP32[$104>>2]|0; $158 = ((($104)) + 4|0); $159 = HEAP32[$158>>2]|0; $160 = $103; $161 = ((($160)) + 4|0); $22 = $156; $23 = $157; $24 = $159; $25 = $161; while(1) { $162 = $24; $163 = $23; $164 = ($162|0)!=($163|0); if (!($164)) { break; } $165 = $22; $166 = $25; $167 = HEAP32[$166>>2]|0; $168 = ((($167)) + -44|0); $21 = $168; $169 = $21; $170 = $24; $171 = ((($170)) + -44|0); $24 = $171; $6 = $171; $172 = $6; $5 = $172; $173 = $5; $17 = $165; $18 = $169; $19 = $173; $174 = $17; $175 = $18; $176 = $19; $16 = $176; $177 = $16; ;HEAP8[$15>>0]=HEAP8[$20>>0]|0; $12 = $174; $13 = $175; $14 = $177; $178 = $12; $179 = $13; $180 = $14; $11 = $180; $181 = $11; $8 = $178; $9 = $179; $10 = $181; $182 = $9; $183 = $10; $7 = $183; $184 = $7; __ZN6laszip6models10arithmeticC2ERKS1_($182,$184); $185 = $25; $186 = HEAP32[$185>>2]|0; $187 = ((($186)) + -44|0); HEAP32[$185>>2] = $187; } $188 = $103; $189 = ((($188)) + 4|0); $29 = $104; $30 = $189; $190 = $29; $28 = $190; $191 = $28; $192 = HEAP32[$191>>2]|0; HEAP32[$31>>2] = $192; $193 = $30; $26 = $193; $194 = $26; $195 = HEAP32[$194>>2]|0; $196 = $29; HEAP32[$196>>2] = $195; $27 = $31; $197 = $27; $198 = HEAP32[$197>>2]|0; $199 = $30; HEAP32[$199>>2] = $198; $200 = ((($104)) + 4|0); $201 = $103; $202 = ((($201)) + 8|0); $35 = $200; $36 = $202; $203 = $35; $34 = $203; $204 = $34; $205 = HEAP32[$204>>2]|0; HEAP32[$37>>2] = $205; $206 = $36; $32 = $206; $207 = $32; $208 = HEAP32[$207>>2]|0; $209 = $35; HEAP32[$209>>2] = $208; $33 = $37; $210 = $33; $211 = HEAP32[$210>>2]|0; $212 = $36; HEAP32[$212>>2] = $211; $40 = $104; $213 = $40; $214 = ((($213)) + 8|0); $39 = $214; $215 = $39; $38 = $215; $216 = $38; $217 = $103; $43 = $217; $218 = $43; $219 = ((($218)) + 12|0); $42 = $219; $220 = $42; $41 = $220; $221 = $41; $47 = $216; $48 = $221; $222 = $47; $46 = $222; $223 = $46; $224 = HEAP32[$223>>2]|0; HEAP32[$49>>2] = $224; $225 = $48; $44 = $225; $226 = $44; $227 = HEAP32[$226>>2]|0; $228 = $47; HEAP32[$228>>2] = $227; $45 = $49; $229 = $45; $230 = HEAP32[$229>>2]|0; $231 = $48; HEAP32[$231>>2] = $230; $232 = $103; $233 = ((($232)) + 4|0); $234 = HEAP32[$233>>2]|0; $235 = $103; HEAP32[$235>>2] = $234; $50 = $104; $236 = $50; $237 = ((($236)) + 4|0); $238 = HEAP32[$237>>2]|0; $239 = HEAP32[$236>>2]|0; $240 = $238; $241 = $239; $242 = (($240) - ($241))|0; $243 = (($242|0) / 44)&-1; $74 = $104; $75 = $243; $244 = $74; $73 = $244; $245 = $73; $246 = HEAP32[$245>>2]|0; $72 = $246; $247 = $72; $52 = $244; $248 = $52; $249 = HEAP32[$248>>2]|0; $51 = $249; $250 = $51; $57 = $244; $251 = $57; $56 = $251; $252 = $56; $55 = $252; $253 = $55; $254 = ((($253)) + 8|0); $54 = $254; $255 = $54; $53 = $255; $256 = $53; $257 = HEAP32[$256>>2]|0; $258 = HEAP32[$252>>2]|0; $259 = $257; $260 = $258; $261 = (($259) - ($260))|0; $262 = (($261|0) / 44)&-1; $263 = (($250) + (($262*44)|0)|0); $59 = $244; $264 = $59; $265 = HEAP32[$264>>2]|0; $58 = $265; $266 = $58; $64 = $244; $267 = $64; $63 = $267; $268 = $63; $62 = $268; $269 = $62; $270 = ((($269)) + 8|0); $61 = $270; $271 = $61; $60 = $271; $272 = $60; $273 = HEAP32[$272>>2]|0; $274 = HEAP32[$268>>2]|0; $275 = $273; $276 = $274; $277 = (($275) - ($276))|0; $278 = (($277|0) / 44)&-1; $279 = (($266) + (($278*44)|0)|0); $66 = $244; $280 = $66; $281 = HEAP32[$280>>2]|0; $65 = $281; $282 = $65; $283 = $75; $284 = (($282) + (($283*44)|0)|0); $67 = $244; $68 = $247; $69 = $263; $70 = $279; $71 = $284; $76 = $104; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIN6laszip6models10arithmeticERNS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $19 = sp + 8|0; $22 = sp + 133|0; $29 = sp; $32 = sp + 132|0; $34 = $0; $35 = $34; $33 = $35; $36 = $33; $37 = ((($36)) + 4|0); $38 = HEAP32[$37>>2]|0; $30 = $36; $31 = $38; $39 = $30; $40 = $31; ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; $27 = $39; $28 = $40; $41 = $27; while(1) { $42 = $28; $43 = ((($41)) + 8|0); $44 = HEAP32[$43>>2]|0; $45 = ($42|0)!=($44|0); if (!($45)) { break; } $26 = $41; $46 = $26; $47 = ((($46)) + 12|0); $25 = $47; $48 = $25; $49 = ((($48)) + 4|0); $24 = $49; $50 = $24; $51 = HEAP32[$50>>2]|0; $52 = ((($41)) + 8|0); $53 = HEAP32[$52>>2]|0; $54 = ((($53)) + -44|0); HEAP32[$52>>2] = $54; $23 = $54; $55 = $23; $20 = $51; $21 = $55; $56 = $20; $57 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $56; $18 = $57; $58 = $17; $59 = $18; $15 = $58; $16 = $59; $60 = $16; __ZN6laszip6models10arithmeticD2Ev($60); } $61 = HEAP32[$35>>2]|0; $62 = ($61|0)!=(0|0); if (!($62)) { STACKTOP = sp;return; } $14 = $35; $63 = $14; $64 = ((($63)) + 12|0); $13 = $64; $65 = $13; $66 = ((($65)) + 4|0); $12 = $66; $67 = $12; $68 = HEAP32[$67>>2]|0; $69 = HEAP32[$35>>2]|0; $11 = $35; $70 = $11; $10 = $70; $71 = $10; $72 = ((($71)) + 12|0); $9 = $72; $73 = $9; $8 = $73; $74 = $8; $75 = HEAP32[$74>>2]|0; $76 = HEAP32[$70>>2]|0; $77 = $75; $78 = $76; $79 = (($77) - ($78))|0; $80 = (($79|0) / 44)&-1; $5 = $68; $6 = $69; $7 = $80; $81 = $5; $82 = $6; $83 = $7; $2 = $81; $3 = $82; $4 = $83; $84 = $3; $1 = $84; $85 = $1; __ZdlPv($85); STACKTOP = sp;return; } function __ZNKSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8max_sizeEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $6 = sp + 8|0; $9 = sp + 77|0; $12 = sp; $14 = sp + 76|0; $19 = sp + 16|0; $20 = sp + 12|0; $18 = $0; $21 = $18; $17 = $21; $22 = $17; $23 = ((($22)) + 8|0); $16 = $23; $24 = $16; $15 = $24; $25 = $15; $13 = $25; $26 = $13; ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; $11 = $26; $27 = $11; $10 = $27; HEAP32[$19>>2] = 97612893; HEAP32[$20>>2] = 2147483647; $7 = $19; $8 = $20; $28 = $7; $29 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $28; $5 = $29; $30 = $5; $31 = $4; $1 = $6; $2 = $30; $3 = $31; $32 = $2; $33 = HEAP32[$32>>2]|0; $34 = $3; $35 = HEAP32[$34>>2]|0; $36 = ($33>>>0)<($35>>>0); $37 = $5; $38 = $4; $39 = $36 ? $37 : $38; $40 = HEAP32[$39>>2]|0; STACKTOP = sp;return ($40|0); } function __ZN6laszip6models10arithmeticC2ERKS1_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0; var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0; var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0; var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0; var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $32 = $0; $33 = $1; $35 = $32; $36 = $33; $37 = HEAP32[$36>>2]|0; HEAP32[$35>>2] = $37; $38 = ((($35)) + 4|0); $39 = $33; $40 = ((($39)) + 4|0); $41 = HEAP8[$40>>0]|0; $42 = $41&1; $43 = $42&1; HEAP8[$38>>0] = $43; $44 = ((($35)) + 20|0); $45 = $33; $46 = ((($45)) + 20|0); $47 = HEAP32[$46>>2]|0; HEAP32[$44>>2] = $47; $48 = ((($35)) + 24|0); $49 = $33; $50 = ((($49)) + 24|0); $51 = HEAP32[$50>>2]|0; HEAP32[$48>>2] = $51; $52 = ((($35)) + 28|0); $53 = $33; $54 = ((($53)) + 28|0); $55 = HEAP32[$54>>2]|0; HEAP32[$52>>2] = $55; $56 = ((($35)) + 32|0); $57 = $33; $58 = ((($57)) + 32|0); $59 = HEAP32[$58>>2]|0; HEAP32[$56>>2] = $59; $60 = ((($35)) + 36|0); $61 = $33; $62 = ((($61)) + 36|0); $63 = HEAP32[$62>>2]|0; HEAP32[$60>>2] = $63; $64 = ((($35)) + 40|0); $65 = $33; $66 = ((($65)) + 40|0); $67 = HEAP32[$66>>2]|0; HEAP32[$64>>2] = $67; $68 = HEAP32[$35>>2]|0; $69 = $68<<2; $34 = $69; $70 = $34; $71 = (__ZN6laszip5utilsL14aligned_mallocEi($70)|0); $72 = ((($35)) + 8|0); HEAP32[$72>>2] = $71; $73 = $33; $74 = ((($73)) + 8|0); $75 = HEAP32[$74>>2]|0; $76 = $33; $77 = ((($76)) + 8|0); $78 = HEAP32[$77>>2]|0; $79 = HEAP32[$35>>2]|0; $80 = (($78) + ($79<<2)|0); $81 = ((($35)) + 8|0); $82 = HEAP32[$81>>2]|0; $29 = $75; $30 = $80; $31 = $82; $83 = $29; $28 = $83; $84 = $28; $85 = $30; $22 = $85; $86 = $22; $87 = $31; $23 = $87; $88 = $23; $24 = $84; $25 = $86; $26 = $88; $89 = $25; $90 = $24; $91 = $89; $92 = $90; $93 = (($91) - ($92))|0; $94 = (($93|0) / 4)&-1; $27 = $94; $95 = $27; $96 = ($95>>>0)>(0); if ($96) { $97 = $26; $98 = $24; $99 = $27; $100 = $99<<2; _memmove(($97|0),($98|0),($100|0))|0; } $101 = $34; $102 = (__ZN6laszip5utilsL14aligned_mallocEi($101)|0); $103 = ((($35)) + 12|0); HEAP32[$103>>2] = $102; $104 = $33; $105 = ((($104)) + 12|0); $106 = HEAP32[$105>>2]|0; $107 = $33; $108 = ((($107)) + 12|0); $109 = HEAP32[$108>>2]|0; $110 = HEAP32[$35>>2]|0; $111 = (($109) + ($110<<2)|0); $112 = ((($35)) + 12|0); $113 = HEAP32[$112>>2]|0; $9 = $106; $10 = $111; $11 = $113; $114 = $9; $8 = $114; $115 = $8; $116 = $10; $2 = $116; $117 = $2; $118 = $11; $3 = $118; $119 = $3; $4 = $115; $5 = $117; $6 = $119; $120 = $5; $121 = $4; $122 = $120; $123 = $121; $124 = (($122) - ($123))|0; $125 = (($124|0) / 4)&-1; $7 = $125; $126 = $7; $127 = ($126>>>0)>(0); if ($127) { $128 = $6; $129 = $4; $130 = $7; $131 = $130<<2; _memmove(($128|0),($129|0),($131|0))|0; } $132 = ((($35)) + 36|0); $133 = HEAP32[$132>>2]|0; $134 = ($133|0)!=(0); if (!($134)) { $172 = ((($35)) + 16|0); HEAP32[$172>>2] = 0; STACKTOP = sp;return; } $135 = ((($35)) + 36|0); $136 = HEAP32[$135>>2]|0; $137 = (($136) + 2)|0; $138 = $137<<2; $34 = $138; $139 = $34; $140 = (__ZN6laszip5utilsL14aligned_mallocEi($139)|0); $141 = ((($35)) + 16|0); HEAP32[$141>>2] = $140; $142 = $33; $143 = ((($142)) + 16|0); $144 = HEAP32[$143>>2]|0; $145 = $33; $146 = ((($145)) + 16|0); $147 = HEAP32[$146>>2]|0; $148 = ((($35)) + 36|0); $149 = HEAP32[$148>>2]|0; $150 = (($149) + 2)|0; $151 = (($147) + ($150<<2)|0); $152 = ((($35)) + 16|0); $153 = HEAP32[$152>>2]|0; $19 = $144; $20 = $151; $21 = $153; $154 = $19; $18 = $154; $155 = $18; $156 = $20; $12 = $156; $157 = $12; $158 = $21; $13 = $158; $159 = $13; $14 = $155; $15 = $157; $16 = $159; $160 = $15; $161 = $14; $162 = $160; $163 = $161; $164 = (($162) - ($163))|0; $165 = (($164|0) / 4)&-1; $17 = $165; $166 = $17; $167 = ($166>>>0)>(0); if ($167) { $168 = $16; $169 = $14; $170 = $17; $171 = $170<<2; _memmove(($168|0),($169|0),($171|0))|0; } STACKTOP = sp;return; } function __ZN6laszip6models10arithmetic6updateEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $14 = 0, $15 = 0, $16 = 0; var $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0; var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0; var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0; var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0; var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $1 = $0; $9 = $1; $10 = ((($9)) + 24|0); $11 = HEAP32[$10>>2]|0; $12 = ((($9)) + 20|0); $13 = HEAP32[$12>>2]|0; $14 = (($13) + ($11))|0; HEAP32[$12>>2] = $14; $15 = ($14>>>0)>(32768); L1: do { if ($15) { $16 = ((($9)) + 20|0); HEAP32[$16>>2] = 0; $2 = 0; while(1) { $17 = $2; $18 = HEAP32[$9>>2]|0; $19 = ($17>>>0)<($18>>>0); if (!($19)) { break L1; } $20 = ((($9)) + 12|0); $21 = HEAP32[$20>>2]|0; $22 = $2; $23 = (($21) + ($22<<2)|0); $24 = HEAP32[$23>>2]|0; $25 = (($24) + 1)|0; $26 = $25 >>> 1; $27 = ((($9)) + 12|0); $28 = HEAP32[$27>>2]|0; $29 = $2; $30 = (($28) + ($29<<2)|0); HEAP32[$30>>2] = $26; $31 = ((($9)) + 20|0); $32 = HEAP32[$31>>2]|0; $33 = (($32) + ($26))|0; HEAP32[$31>>2] = $33; $34 = $2; $35 = (($34) + 1)|0; $2 = $35; } } } while(0); $4 = 0; $5 = 0; $36 = ((($9)) + 20|0); $37 = HEAP32[$36>>2]|0; $38 = (2147483648 / ($37>>>0))&-1; $6 = $38; $39 = ((($9)) + 4|0); $40 = HEAP8[$39>>0]|0; $41 = $40&1; L7: do { if ($41) { label = 7; } else { $42 = ((($9)) + 36|0); $43 = HEAP32[$42>>2]|0; $44 = ($43|0)==(0); if ($44) { label = 7; } else { $3 = 0; while(1) { $65 = $3; $66 = HEAP32[$9>>2]|0; $67 = ($65>>>0)<($66>>>0); if (!($67)) { break; } $68 = $6; $69 = $4; $70 = Math_imul($68, $69)|0; $71 = $70 >>> 16; $72 = ((($9)) + 8|0); $73 = HEAP32[$72>>2]|0; $74 = $3; $75 = (($73) + ($74<<2)|0); HEAP32[$75>>2] = $71; $76 = ((($9)) + 12|0); $77 = HEAP32[$76>>2]|0; $78 = $3; $79 = (($77) + ($78<<2)|0); $80 = HEAP32[$79>>2]|0; $81 = $4; $82 = (($81) + ($80))|0; $4 = $82; $83 = ((($9)) + 8|0); $84 = HEAP32[$83>>2]|0; $85 = $3; $86 = (($84) + ($85<<2)|0); $87 = HEAP32[$86>>2]|0; $88 = ((($9)) + 40|0); $89 = HEAP32[$88>>2]|0; $90 = $87 >>> $89; $7 = $90; while(1) { $91 = $5; $92 = $7; $93 = ($91>>>0)<($92>>>0); $94 = $3; if (!($93)) { break; } $95 = (($94) - 1)|0; $96 = ((($9)) + 16|0); $97 = HEAP32[$96>>2]|0; $98 = $5; $99 = (($98) + 1)|0; $5 = $99; $100 = (($97) + ($99<<2)|0); HEAP32[$100>>2] = $95; } $101 = (($94) + 1)|0; $3 = $101; } $102 = ((($9)) + 16|0); $103 = HEAP32[$102>>2]|0; HEAP32[$103>>2] = 0; while(1) { $104 = $5; $105 = ((($9)) + 36|0); $106 = HEAP32[$105>>2]|0; $107 = ($104>>>0)<=($106>>>0); if (!($107)) { break L7; } $108 = HEAP32[$9>>2]|0; $109 = (($108) - 1)|0; $110 = ((($9)) + 16|0); $111 = HEAP32[$110>>2]|0; $112 = $5; $113 = (($112) + 1)|0; $5 = $113; $114 = (($111) + ($113<<2)|0); HEAP32[$114>>2] = $109; } } } } while(0); L21: do { if ((label|0) == 7) { $3 = 0; while(1) { $45 = $3; $46 = HEAP32[$9>>2]|0; $47 = ($45>>>0)<($46>>>0); if (!($47)) { break L21; } $48 = $6; $49 = $4; $50 = Math_imul($48, $49)|0; $51 = $50 >>> 16; $52 = ((($9)) + 8|0); $53 = HEAP32[$52>>2]|0; $54 = $3; $55 = (($53) + ($54<<2)|0); HEAP32[$55>>2] = $51; $56 = ((($9)) + 12|0); $57 = HEAP32[$56>>2]|0; $58 = $3; $59 = (($57) + ($58<<2)|0); $60 = HEAP32[$59>>2]|0; $61 = $4; $62 = (($61) + ($60))|0; $4 = $62; $63 = $3; $64 = (($63) + 1)|0; $3 = $64; } } } while(0); $115 = ((($9)) + 24|0); $116 = HEAP32[$115>>2]|0; $117 = ($116*5)|0; $118 = $117 >>> 2; $119 = ((($9)) + 24|0); HEAP32[$119>>2] = $118; $120 = HEAP32[$9>>2]|0; $121 = (($120) + 6)|0; $122 = $121 << 3; $8 = $122; $123 = ((($9)) + 24|0); $124 = HEAP32[$123>>2]|0; $125 = $8; $126 = ($124>>>0)>($125>>>0); if (!($126)) { $129 = ((($9)) + 24|0); $130 = HEAP32[$129>>2]|0; $131 = ((($9)) + 28|0); HEAP32[$131>>2] = $130; STACKTOP = sp;return; } $127 = $8; $128 = ((($9)) + 24|0); HEAP32[$128>>2] = $127; $129 = ((($9)) + 24|0); $130 = HEAP32[$129>>2]|0; $131 = ((($9)) + 28|0); HEAP32[$131>>2] = $130; STACKTOP = sp;return; } function __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $7 = $0; $8 = $1; $9 = $2; $13 = $7; $14 = $8; $15 = $9; $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0); HEAP32[$13>>2] = $16; $17 = HEAP32[$13>>2]|0; $18 = ($17|0)!=(0); if (!($18)) { $69 = $8; $70 = ((($13)) + 48|0); $71 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0); $10 = $71; $72 = $10; STACKTOP = sp;return ($72|0); } $19 = HEAP32[$13>>2]|0; $20 = ($19>>>0)<(32); if (!($20)) { $67 = ((($13)) + 28|0); $68 = HEAP32[$67>>2]|0; $10 = $68; $72 = $10; STACKTOP = sp;return ($72|0); } $21 = HEAP32[$13>>2]|0; $22 = ((($13)) + 12|0); $23 = HEAP32[$22>>2]|0; $24 = ($21>>>0)<=($23>>>0); if ($24) { $25 = $8; $26 = ((($13)) + 68|0); $27 = HEAP32[$13>>2]|0; $28 = (($27) - 1)|0; $5 = $26; $6 = $28; $29 = $5; $30 = HEAP32[$29>>2]|0; $31 = $6; $32 = (($30) + (($31*44)|0)|0); $33 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0); $10 = $33; } else { $34 = HEAP32[$13>>2]|0; $35 = ((($13)) + 12|0); $36 = HEAP32[$35>>2]|0; $37 = (($34) - ($36))|0; $11 = $37; $38 = $8; $39 = ((($13)) + 68|0); $40 = HEAP32[$13>>2]|0; $41 = (($40) - 1)|0; $3 = $39; $4 = $41; $42 = $3; $43 = HEAP32[$42>>2]|0; $44 = $4; $45 = (($43) + (($44*44)|0)|0); $46 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0); $10 = $46; $47 = $8; $48 = $11; $49 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($47,$48)|0); $12 = $49; $50 = $10; $51 = $11; $52 = $50 << $51; $53 = $12; $54 = $52 | $53; $10 = $54; } $55 = $10; $56 = HEAP32[$13>>2]|0; $57 = (($56) - 1)|0; $58 = 1 << $57; $59 = ($55|0)>=($58|0); if ($59) { $60 = $10; $61 = (($60) + 1)|0; $10 = $61; $72 = $10; STACKTOP = sp;return ($72|0); } else { $62 = HEAP32[$13>>2]|0; $63 = 1 << $62; $64 = (($63) - 1)|0; $65 = $10; $66 = (($65) - ($64))|0; $10 = $66; $72 = $10; STACKTOP = sp;return ($72|0); } return (0)|0; } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0; var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $2 = $0; $3 = $1; $13 = $2; $14 = ((($13)) + 8|0); $15 = HEAP32[$14>>2]|0; $7 = $15; $16 = $3; $17 = ((($16)) + 16|0); $18 = HEAP32[$17>>2]|0; $19 = ($18|0)!=(0|0); if ($19) { $20 = ((($13)) + 4|0); $21 = HEAP32[$20>>2]|0; $22 = ((($13)) + 8|0); $23 = HEAP32[$22>>2]|0; $24 = $23 >>> 15; HEAP32[$22>>2] = $24; $25 = (($21>>>0) / ($24>>>0))&-1; $8 = $25; $26 = $8; $27 = $3; $28 = ((($27)) + 40|0); $29 = HEAP32[$28>>2]|0; $30 = $26 >>> $29; $9 = $30; $31 = $3; $32 = ((($31)) + 16|0); $33 = HEAP32[$32>>2]|0; $34 = $9; $35 = (($33) + ($34<<2)|0); $36 = HEAP32[$35>>2]|0; $5 = $36; $37 = $3; $38 = ((($37)) + 16|0); $39 = HEAP32[$38>>2]|0; $40 = $9; $41 = (($40) + 1)|0; $42 = (($39) + ($41<<2)|0); $43 = HEAP32[$42>>2]|0; $44 = (($43) + 1)|0; $4 = $44; while(1) { $45 = $4; $46 = $5; $47 = (($46) + 1)|0; $48 = ($45>>>0)>($47>>>0); if (!($48)) { break; } $49 = $5; $50 = $4; $51 = (($49) + ($50))|0; $52 = $51 >>> 1; $10 = $52; $53 = $3; $54 = ((($53)) + 8|0); $55 = HEAP32[$54>>2]|0; $56 = $10; $57 = (($55) + ($56<<2)|0); $58 = HEAP32[$57>>2]|0; $59 = $8; $60 = ($58>>>0)>($59>>>0); $61 = $10; if ($60) { $4 = $61; } else { $5 = $61; } } $62 = $3; $63 = ((($62)) + 8|0); $64 = HEAP32[$63>>2]|0; $65 = $5; $66 = (($64) + ($65<<2)|0); $67 = HEAP32[$66>>2]|0; $68 = ((($13)) + 8|0); $69 = HEAP32[$68>>2]|0; $70 = Math_imul($67, $69)|0; $6 = $70; $71 = $5; $72 = $3; $73 = ((($72)) + 32|0); $74 = HEAP32[$73>>2]|0; $75 = ($71|0)!=($74|0); if ($75) { $76 = $3; $77 = ((($76)) + 8|0); $78 = HEAP32[$77>>2]|0; $79 = $5; $80 = (($79) + 1)|0; $81 = (($78) + ($80<<2)|0); $82 = HEAP32[$81>>2]|0; $83 = ((($13)) + 8|0); $84 = HEAP32[$83>>2]|0; $85 = Math_imul($82, $84)|0; $7 = $85; } } else { $5 = 0; $6 = 0; $86 = ((($13)) + 8|0); $87 = HEAP32[$86>>2]|0; $88 = $87 >>> 15; HEAP32[$86>>2] = $88; $89 = $3; $90 = HEAP32[$89>>2]|0; $4 = $90; $91 = $90 >>> 1; $11 = $91; while(1) { $92 = ((($13)) + 8|0); $93 = HEAP32[$92>>2]|0; $94 = $3; $95 = ((($94)) + 8|0); $96 = HEAP32[$95>>2]|0; $97 = $11; $98 = (($96) + ($97<<2)|0); $99 = HEAP32[$98>>2]|0; $100 = Math_imul($93, $99)|0; $12 = $100; $101 = $12; $102 = ((($13)) + 4|0); $103 = HEAP32[$102>>2]|0; $104 = ($101>>>0)>($103>>>0); $105 = $11; if ($104) { $4 = $105; $106 = $12; $7 = $106; } else { $5 = $105; $107 = $12; $6 = $107; } $108 = $5; $109 = $4; $110 = (($108) + ($109))|0; $111 = $110 >>> 1; $11 = $111; $112 = $5; $113 = ($111|0)!=($112|0); if (!($113)) { break; } } } $114 = $6; $115 = ((($13)) + 4|0); $116 = HEAP32[$115>>2]|0; $117 = (($116) - ($114))|0; HEAP32[$115>>2] = $117; $118 = $7; $119 = $6; $120 = (($118) - ($119))|0; $121 = ((($13)) + 8|0); HEAP32[$121>>2] = $120; $122 = ((($13)) + 8|0); $123 = HEAP32[$122>>2]|0; $124 = ($123>>>0)<(16777216); if ($124) { __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($13); } $125 = $3; $126 = ((($125)) + 12|0); $127 = HEAP32[$126>>2]|0; $128 = $5; $129 = (($127) + ($128<<2)|0); $130 = HEAP32[$129>>2]|0; $131 = (($130) + 1)|0; HEAP32[$129>>2] = $131; $132 = $3; $133 = ((($132)) + 28|0); $134 = HEAP32[$133>>2]|0; $135 = (($134) + -1)|0; HEAP32[$133>>2] = $135; $136 = ($135|0)==(0); if (!($136)) { $138 = $5; STACKTOP = sp;return ($138|0); } $137 = $3; __ZN6laszip6models10arithmetic6updateEv($137); $138 = $5; STACKTOP = sp;return ($138|0); } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $3 = $0; $4 = $1; $8 = $3; $9 = $4; $10 = ($9|0)!=(0); $11 = $4; $12 = ($11>>>0)<=(32); $or$cond = $10 & $12; if (!($or$cond)) { ___assert_fail((5409|0),(5430|0),139,(5499|0)); // unreachable; } $13 = $4; $14 = ($13>>>0)>(19); if ($14) { $15 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($8)|0); $16 = $15&65535; $5 = $16; $17 = $4; $18 = (($17) - 16)|0; $4 = $18; $19 = $4; $20 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE8readBitsEj($8,$19)|0); $21 = $20 << 16; $6 = $21; $22 = $6; $23 = $5; $24 = $22 | $23; $2 = $24; $43 = $2; STACKTOP = sp;return ($43|0); } $25 = ((($8)) + 4|0); $26 = HEAP32[$25>>2]|0; $27 = $4; $28 = ((($8)) + 8|0); $29 = HEAP32[$28>>2]|0; $30 = $29 >>> $27; HEAP32[$28>>2] = $30; $31 = (($26>>>0) / ($30>>>0))&-1; $7 = $31; $32 = ((($8)) + 8|0); $33 = HEAP32[$32>>2]|0; $34 = $7; $35 = Math_imul($33, $34)|0; $36 = ((($8)) + 4|0); $37 = HEAP32[$36>>2]|0; $38 = (($37) - ($35))|0; HEAP32[$36>>2] = $38; $39 = ((($8)) + 8|0); $40 = HEAP32[$39>>2]|0; $41 = ($40>>>0)<(16777216); if ($41) { __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($8); } $42 = $7; $2 = $42; $43 = $2; STACKTOP = sp;return ($43|0); } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $6 = $2; $7 = $3; $8 = ((($7)) + 8|0); $9 = HEAP32[$8>>2]|0; $10 = ((($6)) + 8|0); $11 = HEAP32[$10>>2]|0; $12 = $11 >>> 13; $13 = Math_imul($9, $12)|0; $4 = $13; $14 = ((($6)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $4; $17 = ($15>>>0)>=($16>>>0); $18 = $17&1; $5 = $18; $19 = $5; $20 = ($19|0)==(0); $21 = $4; if ($20) { $22 = ((($6)) + 8|0); HEAP32[$22>>2] = $21; $23 = $3; $24 = ((($23)) + 12|0); $25 = HEAP32[$24>>2]|0; $26 = (($25) + 1)|0; HEAP32[$24>>2] = $26; } else { $27 = ((($6)) + 4|0); $28 = HEAP32[$27>>2]|0; $29 = (($28) - ($21))|0; HEAP32[$27>>2] = $29; $30 = $4; $31 = ((($6)) + 8|0); $32 = HEAP32[$31>>2]|0; $33 = (($32) - ($30))|0; HEAP32[$31>>2] = $33; } $34 = ((($6)) + 8|0); $35 = HEAP32[$34>>2]|0; $36 = ($35>>>0)<(16777216); if ($36) { __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($6); } $37 = $3; $38 = ((($37)) + 4|0); $39 = HEAP32[$38>>2]|0; $40 = (($39) + -1)|0; HEAP32[$38>>2] = $40; $41 = ($40|0)==(0); if (!($41)) { $43 = $5; STACKTOP = sp;return ($43|0); } $42 = $3; __ZN6laszip6models14arithmetic_bit6updateEv($42); $43 = $5; STACKTOP = sp;return ($43|0); } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; while(1) { $3 = ((($2)) + 4|0); $4 = HEAP32[$3>>2]|0; $5 = $4 << 8; $6 = HEAP32[$2>>2]|0; $7 = (__ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7getByteEv($6)|0); $8 = $7&255; $9 = $5 | $8; $10 = ((($2)) + 4|0); HEAP32[$10>>2] = $9; $11 = ((($2)) + 8|0); $12 = HEAP32[$11>>2]|0; $13 = $12 << 8; HEAP32[$11>>2] = $13; $14 = ($13>>>0)<(16777216); if (!($14)) { break; } } STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $3 = $1; $4 = ((($3)) + 4|0); $5 = HEAP32[$4>>2]|0; $6 = ((($3)) + 8|0); $7 = HEAP32[$6>>2]|0; $8 = $7 >>> 16; HEAP32[$6>>2] = $8; $9 = (($5>>>0) / ($8>>>0))&-1; $2 = $9; $10 = ((($3)) + 8|0); $11 = HEAP32[$10>>2]|0; $12 = $2; $13 = Math_imul($11, $12)|0; $14 = ((($3)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = (($15) - ($13))|0; HEAP32[$14>>2] = $16; $17 = ((($3)) + 8|0); $18 = HEAP32[$17>>2]|0; $19 = ($18>>>0)<(16777216); if ($19) { __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE19renorm_dec_intervalEv($3); } $20 = $2; $21 = ($20>>>0)<(65536); if ($21) { $22 = $2; $23 = $22&65535; STACKTOP = sp;return ($23|0); } else { ___assert_fail((5508|0),(5430|0),172,(5522|0)); // unreachable; } return (0)|0; } function __ZN6laszip6models14arithmetic_bit6updateEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $3 = $1; $4 = HEAP32[$3>>2]|0; $5 = ((($3)) + 16|0); $6 = HEAP32[$5>>2]|0; $7 = (($6) + ($4))|0; HEAP32[$5>>2] = $7; $8 = ($7>>>0)>(8192); if ($8) { $9 = ((($3)) + 16|0); $10 = HEAP32[$9>>2]|0; $11 = (($10) + 1)|0; $12 = $11 >>> 1; $13 = ((($3)) + 16|0); HEAP32[$13>>2] = $12; $14 = ((($3)) + 12|0); $15 = HEAP32[$14>>2]|0; $16 = (($15) + 1)|0; $17 = $16 >>> 1; $18 = ((($3)) + 12|0); HEAP32[$18>>2] = $17; $19 = ((($3)) + 12|0); $20 = HEAP32[$19>>2]|0; $21 = ((($3)) + 16|0); $22 = HEAP32[$21>>2]|0; $23 = ($20|0)==($22|0); if ($23) { $24 = ((($3)) + 16|0); $25 = HEAP32[$24>>2]|0; $26 = (($25) + 1)|0; HEAP32[$24>>2] = $26; } } $27 = ((($3)) + 16|0); $28 = HEAP32[$27>>2]|0; $29 = (2147483648 / ($28>>>0))&-1; $2 = $29; $30 = ((($3)) + 12|0); $31 = HEAP32[$30>>2]|0; $32 = $2; $33 = Math_imul($31, $32)|0; $34 = $33 >>> 18; $35 = ((($3)) + 8|0); HEAP32[$35>>2] = $34; $36 = HEAP32[$3>>2]|0; $37 = ($36*5)|0; $38 = $37 >>> 2; HEAP32[$3>>2] = $38; $39 = HEAP32[$3>>2]|0; $40 = ($39>>>0)>(64); if (!($40)) { $41 = HEAP32[$3>>2]|0; $42 = ((($3)) + 4|0); HEAP32[$42>>2] = $41; STACKTOP = sp;return; } HEAP32[$3>>2] = 64; $41 = HEAP32[$3>>2]|0; $42 = ((($3)) + 4|0); HEAP32[$42>>2] = $41; STACKTOP = sp;return; } function __ZN6laszip2io6reader10basic_fileINS_7streams13memory_streamEE9readPointEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0; var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0; var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0; var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0; var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0; var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0; var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0; var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0; var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0; var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0); $$byval_copy = sp + 356|0; $7 = sp + 332|0; $13 = sp + 308|0; $21 = sp + 272|0; $28 = sp + 240|0; $34 = sp + 216|0; $39 = sp + 192|0; $40 = sp + 184|0; $46 = sp + 160|0; $52 = sp + 136|0; $57 = sp + 112|0; $63 = sp + 88|0; $69 = sp + 64|0; $74 = sp + 40|0; $82 = sp; $80 = $0; $81 = $1; $83 = $80; $84 = ((($83)) + 328|0); $85 = ((($84)) + 8|0); $86 = $85; $87 = $86; $88 = HEAP32[$87>>2]|0; $89 = (($86) + 4)|0; $90 = $89; $91 = HEAP32[$90>>2]|0; $92 = ((($83)) + 247|0); $93 = ((($92)) + 12|0); $94 = HEAPU8[$93>>0]|(HEAPU8[$93+1>>0]<<8)|(HEAPU8[$93+2>>0]<<16)|(HEAPU8[$93+3>>0]<<24); $95 = ($88|0)==($94|0); $96 = ($91|0)==(0); $97 = $95 & $96; if (!($97)) { $98 = ((($83)) + 320|0); $79 = $98; $99 = $79; $78 = $99; $100 = $78; $101 = HEAP32[$100>>2]|0; $102 = ($101|0)!=(0|0); if ($102) { $103 = ((($83)) + 312|0); $77 = $103; $104 = $77; $76 = $104; $105 = $76; $106 = HEAP32[$105>>2]|0; $107 = ($106|0)!=(0|0); if ($107) { $258 = ((($83)) + 320|0); $75 = $258; $259 = $75; $260 = HEAP32[$259>>2]|0; $261 = HEAP32[$260>>2]|0; $262 = HEAP32[$261>>2]|0; $263 = $81; (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0); $264 = ((($83)) + 328|0); $265 = ((($264)) + 8|0); $266 = $265; $267 = $266; $268 = HEAP32[$267>>2]|0; $269 = (($266) + 4)|0; $270 = $269; $271 = HEAP32[$270>>2]|0; $272 = (_i64Add(($268|0),($271|0),1,0)|0); $273 = tempRet0; $274 = $265; $275 = $274; HEAP32[$275>>2] = $272; $276 = (($274) + 4)|0; $277 = $276; HEAP32[$277>>2] = $273; STACKTOP = sp;return; } } } $108 = ((($83)) + 320|0); $73 = $108; $109 = $73; $72 = $74; $110 = $72; HEAP32[$110>>2] = 0; $111 = ((($110)) + 4|0); HEAP32[$111>>2] = 0; $70 = $74; $71 = $109; $112 = $70; $113 = $71; $67 = $112; $68 = $113; $114 = $67; $66 = $114; $115 = $66; $116 = HEAP32[$115>>2]|0; HEAP32[$69>>2] = $116; $117 = $68; $64 = $117; $118 = $64; $119 = HEAP32[$118>>2]|0; $120 = $67; HEAP32[$120>>2] = $119; $65 = $69; $121 = $65; $122 = HEAP32[$121>>2]|0; $123 = $68; HEAP32[$123>>2] = $122; $124 = ((($112)) + 4|0); $125 = $71; $126 = ((($125)) + 4|0); $61 = $124; $62 = $126; $127 = $61; $60 = $127; $128 = $60; $129 = HEAP32[$128>>2]|0; HEAP32[$63>>2] = $129; $130 = $62; $58 = $130; $131 = $58; $132 = HEAP32[$131>>2]|0; $133 = $61; HEAP32[$133>>2] = $132; $59 = $63; $134 = $59; $135 = HEAP32[$134>>2]|0; $136 = $62; HEAP32[$136>>2] = $135; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($74); $137 = ((($83)) + 312|0); $56 = $137; $138 = $56; $55 = $57; $139 = $55; HEAP32[$139>>2] = 0; $140 = ((($139)) + 4|0); HEAP32[$140>>2] = 0; $53 = $57; $54 = $138; $141 = $53; $142 = $54; $50 = $141; $51 = $142; $143 = $50; $49 = $143; $144 = $49; $145 = HEAP32[$144>>2]|0; HEAP32[$52>>2] = $145; $146 = $51; $47 = $146; $147 = $47; $148 = HEAP32[$147>>2]|0; $149 = $50; HEAP32[$149>>2] = $148; $48 = $52; $150 = $48; $151 = HEAP32[$150>>2]|0; $152 = $51; HEAP32[$152>>2] = $151; $153 = ((($141)) + 4|0); $154 = $54; $155 = ((($154)) + 4|0); $44 = $153; $45 = $155; $156 = $44; $43 = $156; $157 = $43; $158 = HEAP32[$157>>2]|0; HEAP32[$46>>2] = $158; $159 = $45; $41 = $159; $160 = $41; $161 = HEAP32[$160>>2]|0; $162 = $44; HEAP32[$162>>2] = $161; $42 = $46; $163 = $42; $164 = HEAP32[$163>>2]|0; $165 = $45; HEAP32[$165>>2] = $164; __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($57); $166 = ((($83)) + 312|0); $167 = (__Znwj(12)|0); $168 = ((($83)) + 4|0); __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEC2ERS6_($167,$168); $37 = $166; $38 = $167; $169 = $37; $170 = $38; ;HEAP32[$40>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$40>>2]|0; __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($39,$170,$$byval_copy); $35 = $39; $36 = $169; $171 = $35; $172 = $36; $32 = $171; $33 = $172; $173 = $32; $31 = $173; $174 = $31; $175 = HEAP32[$174>>2]|0; HEAP32[$34>>2] = $175; $176 = $33; $29 = $176; $177 = $29; $178 = HEAP32[$177>>2]|0; $179 = $32; HEAP32[$179>>2] = $178; $30 = $34; $180 = $30; $181 = HEAP32[$180>>2]|0; $182 = $33; HEAP32[$182>>2] = $181; $183 = ((($171)) + 4|0); $184 = $36; $185 = ((($184)) + 4|0); $26 = $183; $27 = $185; $186 = $26; $25 = $186; $187 = $25; $188 = HEAP32[$187>>2]|0; HEAP32[$28>>2] = $188; $189 = $27; $23 = $189; $190 = $23; $191 = HEAP32[$190>>2]|0; $192 = $26; HEAP32[$192>>2] = $191; $24 = $28; $193 = $24; $194 = HEAP32[$193>>2]|0; $195 = $27; HEAP32[$195>>2] = $194; __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEED2Ev($39); $196 = ((($83)) + 312|0); $22 = $196; $197 = $22; $198 = HEAP32[$197>>2]|0; $199 = ((($83)) + 300|0); __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($82,$198,$199); $200 = ((($83)) + 320|0); $19 = $200; $20 = $82; $201 = $19; $202 = $20; $18 = $202; $203 = $18; $16 = $21; $17 = $203; $204 = $16; $205 = $17; $206 = HEAP32[$205>>2]|0; HEAP32[$204>>2] = $206; $207 = ((($204)) + 4|0); $208 = $17; $209 = ((($208)) + 4|0); $210 = HEAP32[$209>>2]|0; HEAP32[$207>>2] = $210; $211 = $17; HEAP32[$211>>2] = 0; $212 = $17; $213 = ((($212)) + 4|0); HEAP32[$213>>2] = 0; $14 = $21; $15 = $201; $214 = $14; $215 = $15; $11 = $214; $12 = $215; $216 = $11; $10 = $216; $217 = $10; $218 = HEAP32[$217>>2]|0; HEAP32[$13>>2] = $218; $219 = $12; $8 = $219; $220 = $8; $221 = HEAP32[$220>>2]|0; $222 = $11; HEAP32[$222>>2] = $221; $9 = $13; $223 = $9; $224 = HEAP32[$223>>2]|0; $225 = $12; HEAP32[$225>>2] = $224; $226 = ((($214)) + 4|0); $227 = $15; $228 = ((($227)) + 4|0); $5 = $226; $6 = $228; $229 = $5; $4 = $229; $230 = $4; $231 = HEAP32[$230>>2]|0; HEAP32[$7>>2] = $231; $232 = $6; $2 = $232; $233 = $2; $234 = HEAP32[$233>>2]|0; $235 = $5; HEAP32[$235>>2] = $234; $3 = $7; $236 = $3; $237 = HEAP32[$236>>2]|0; $238 = $6; HEAP32[$238>>2] = $237; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($21); __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEED2Ev($82); $239 = ((($83)) + 328|0); $240 = $239; $241 = $240; $242 = HEAP32[$241>>2]|0; $243 = (($240) + 4)|0; $244 = $243; $245 = HEAP32[$244>>2]|0; $246 = (_i64Add(($242|0),($245|0),1,0)|0); $247 = tempRet0; $248 = $239; $249 = $248; HEAP32[$249>>2] = $246; $250 = (($248) + 4)|0; $251 = $250; HEAP32[$251>>2] = $247; $252 = ((($83)) + 328|0); $253 = ((($252)) + 8|0); $254 = $253; $255 = $254; HEAP32[$255>>2] = 0; $256 = (($254) + 4)|0; $257 = $256; HEAP32[$257>>2] = 0; $258 = ((($83)) + 320|0); $75 = $258; $259 = $75; $260 = HEAP32[$259>>2]|0; $261 = HEAP32[$260>>2]|0; $262 = HEAP32[$261>>2]|0; $263 = $81; (FUNCTION_TABLE_iii[$262 & 255]($260,$263)|0); $264 = ((($83)) + 328|0); $265 = ((($264)) + 8|0); $266 = $265; $267 = $266; $268 = HEAP32[$267>>2]|0; $269 = (($266) + 4)|0; $270 = $269; $271 = HEAP32[$270>>2]|0; $272 = (_i64Add(($268|0),($271|0),1,0)|0); $273 = tempRet0; $274 = $265; $275 = $274; HEAP32[$275>>2] = $272; $276 = (($274) + 4)|0; $277 = $276; HEAP32[$277>>2] = $273; STACKTOP = sp;return; } function __ZN6laszip7factory18build_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENSt3__210shared_ptrINS_7formats20dynamic_decompressorEEERT_RKNS0_13record_schemaE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $5 = sp; $15 = sp + 64|0; $16 = sp + 8|0; $17 = sp + 4|0; $11 = $1; $12 = $2; $18 = $12; $19 = (__ZNK6laszip7factory13record_schema6formatEv($18)|0); $13 = $19; $20 = $13; $21 = ($20|0)==(-1); if ($21) { $22 = (___cxa_allocate_exception(8)|0); __ZN6laszip19unknown_schema_typeC2Ev($22); ___cxa_throw(($22|0),(256|0),(47|0)); // unreachable; } $23 = $12; $24 = (__ZNK6laszip7factory13record_schema10extrabytesEv($23)|0); $14 = $24; $25 = $14; $26 = ($25|0)!=(0); if ($26) { $27 = $11; __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($15,$27); $10 = $15; $28 = $10; $29 = HEAP32[$28>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($29); $30 = $13; $31 = ($30|0)==(1); $32 = $13; $33 = ($32|0)==(3); $or$cond = $31 | $33; if ($or$cond) { $8 = $15; $34 = $8; $35 = HEAP32[$34>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($35); } $36 = $13; $37 = ($36|0)==(2); $38 = $13; $39 = ($38|0)==(3); $or$cond3 = $37 | $39; if ($or$cond3) { $7 = $15; $40 = $7; $41 = HEAP32[$40>>2]|0; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($41); } $6 = $15; $42 = $6; $43 = HEAP32[$42>>2]|0; $44 = $14; __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($16,$44); __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($43,$16); __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($16); ;HEAP32[$17>>2]=0|0; ;HEAP8[$5>>0]=HEAP8[$17>>0]|0;HEAP8[$5+1>>0]=HEAP8[$17+1>>0]|0;HEAP8[$5+2>>0]=HEAP8[$17+2>>0]|0;HEAP8[$5+3>>0]=HEAP8[$17+3>>0]|0; $3 = $0; $4 = $15; $45 = $3; $46 = $4; $47 = HEAP32[$46>>2]|0; HEAP32[$45>>2] = $47; $48 = ((($45)) + 4|0); $49 = $4; $50 = ((($49)) + 4|0); $51 = HEAP32[$50>>2]|0; HEAP32[$48>>2] = $51; $52 = $4; HEAP32[$52>>2] = 0; $53 = $4; $54 = ((($53)) + 4|0); HEAP32[$54>>2] = 0; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($15); STACKTOP = sp;return; } $55 = $13; switch ($55|0) { case 0: { $56 = $11; $57 = (__Znwj(4788)|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($57); __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$56,$57); STACKTOP = sp;return; break; } case 1: { $58 = $11; $59 = (__Znwj(5116)|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($59); __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$58,$59); STACKTOP = sp;return; break; } case 2: { $60 = $11; $61 = (__Znwj(5104)|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($61); __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$60,$61); STACKTOP = sp;return; break; } case 3: { $62 = $11; $63 = (__Znwj(5432)|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($63); __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$62,$63); STACKTOP = sp;return; break; } default: { $9 = $0; $64 = $9; HEAP32[$64>>2] = 0; $65 = ((($64)) + 4|0); HEAP32[$65>>2] = 0; STACKTOP = sp;return; } } } function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEC2IS9_EEPT_NS_9enable_ifIXsr14is_convertibleISD_PS9_EE5valueENSA_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0; var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0; var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0; var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0; var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0; var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $50 = sp + 76|0; $51 = sp + 72|0; $52 = sp + 8|0; $53 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$52>>0]=HEAP8[$67>>0]|0; ;HEAP8[$53>>0]=HEAP8[$66>>0]|0; $49 = $79; HEAP32[$50>>2] = $80; $81 = $49; $47 = $81; $48 = 0; $82 = $47; $83 = $48; $45 = $82; $46 = $83; $84 = $45; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $46; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $48; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (1908); $89 = ((($81)) + 12|0); $21 = $53; $90 = $21; $30 = $51; $31 = $50; $32 = $90; $91 = $30; $92 = $31; $29 = $92; $93 = $29; $23 = $91; $24 = $93; $94 = $23; $95 = $24; $22 = $95; $96 = $22; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $32; $25 = $98; $99 = $25; $27 = $91; $28 = $99; $100 = $28; $26 = $100; $33 = $52; $101 = $33; $42 = $89; $43 = $51; $44 = $101; $102 = $42; $103 = $43; $41 = $103; $104 = $41; $35 = $102; $36 = $104; $105 = $35; $106 = $36; $34 = $106; $107 = $34; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $44; $37 = $108; $109 = $37; $39 = $102; $40 = $109; $110 = $40; $38 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($68,$vararg_buffer); $20 = $65; $120 = $20; $17 = $120; $18 = 0; $121 = $17; $16 = $121; $122 = $16; $15 = $122; $123 = $15; $124 = HEAP32[$123>>2]|0; $19 = $124; $125 = $18; $12 = $121; $126 = $12; $11 = $126; $127 = $11; HEAP32[$127>>2] = $125; $128 = $19; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $10 = $121; $130 = $10; $9 = $130; $131 = $9; $132 = $19; $13 = $131; $14 = $132; $133 = $14; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($133); __ZdlPv($133); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $4 = $22; $23 = $4; $3 = $23; $24 = $3; $2 = $24; $25 = $2; $1 = $25; $26 = $1; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEED2Ev($28); __ZdlPv($28); } $30 = ((($16)) + 12|0); $10 = $30; $31 = $10; $9 = $31; $32 = $9; $12 = $32; $33 = $12; $11 = $33; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 248; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZNK6laszip7factory13record_schema6formatEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $13 = $0; $15 = $13; $11 = $15; $16 = $11; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = HEAP32[$16>>2]|0; $20 = $18; $21 = $19; $22 = (($20) - ($21))|0; $23 = (($22|0) / 12)&-1; $14 = $23; $24 = $14; $25 = ($24|0)==(0); if ($25) { $12 = -1; $68 = $12; STACKTOP = sp;return ($68|0); } $26 = (__ZNK6laszip7factory13record_schema10extrabytesEv($15)|0); $27 = ($26|0)!=(0); if ($27) { $28 = $14; $29 = (($28) + -1)|0; $14 = $29; } $30 = $14; $31 = ($30|0)==(0); if (!($31)) { $9 = $15; $10 = 0; $32 = $9; $33 = HEAP32[$32>>2]|0; $34 = $10; $35 = (($33) + (($34*12)|0)|0); $36 = (__ZN6laszip7factory11record_item5pointEv()|0); $37 = (__ZNK6laszip7factory11record_itemneERKS1_($35,$36)|0); if (!($37)) { $38 = $14; $39 = ($38|0)==(1); if ($39) { $12 = 0; $68 = $12; STACKTOP = sp;return ($68|0); } $40 = $14; $41 = ($40|0)==(2); if ($41) { $7 = $15; $8 = 1; $42 = $7; $43 = HEAP32[$42>>2]|0; $44 = $8; $45 = (($43) + (($44*12)|0)|0); $46 = (__ZN6laszip7factory11record_item7gpstimeEv()|0); $47 = (__ZNK6laszip7factory11record_itemeqERKS1_($45,$46)|0); if ($47) { $12 = 1; $68 = $12; STACKTOP = sp;return ($68|0); } $3 = $15; $4 = 1; $48 = $3; $49 = HEAP32[$48>>2]|0; $50 = $4; $51 = (($49) + (($50*12)|0)|0); $52 = (__ZN6laszip7factory11record_item3rgbEv()|0); $53 = (__ZNK6laszip7factory11record_itemeqERKS1_($51,$52)|0); if ($53) { $12 = 2; $68 = $12; STACKTOP = sp;return ($68|0); } } $54 = $14; $55 = ($54|0)==(3); if ($55) { $1 = $15; $2 = 1; $56 = $1; $57 = HEAP32[$56>>2]|0; $58 = $2; $59 = (($57) + (($58*12)|0)|0); $60 = (__ZN6laszip7factory11record_item7gpstimeEv()|0); $61 = (__ZNK6laszip7factory11record_itemeqERKS1_($59,$60)|0); if ($61) { $5 = $15; $6 = 2; $62 = $5; $63 = HEAP32[$62>>2]|0; $64 = $6; $65 = (($63) + (($64*12)|0)|0); $66 = (__ZN6laszip7factory11record_item3rgbEv()|0); $67 = (__ZNK6laszip7factory11record_itemeqERKS1_($65,$66)|0); if ($67) { $12 = 3; $68 = $12; STACKTOP = sp;return ($68|0); } } } $12 = -1; $68 = $12; STACKTOP = sp;return ($68|0); } } $12 = -1; $68 = $12; STACKTOP = sp;return ($68|0); } function __ZN6laszip19unknown_schema_typeC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorC2EPKc($2,5848); HEAP32[$2>>2] = (1936); STACKTOP = sp;return; } function __ZN6laszip19unknown_schema_typeD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt13runtime_errorD2Ev($2); STACKTOP = sp;return; } function __ZNK6laszip7factory13record_schema10extrabytesEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $2 = sp; $5 = sp + 124|0; $8 = sp + 112|0; $11 = sp + 100|0; $16 = sp + 80|0; $22 = sp + 56|0; $28 = sp + 32|0; $33 = sp + 8|0; $32 = $0; $34 = $32; $30 = $34; $35 = $30; $36 = ((($35)) + 4|0); $37 = HEAP32[$36>>2]|0; $38 = HEAP32[$35>>2]|0; $39 = $37; $40 = $38; $41 = (($39) - ($40))|0; $42 = (($41|0) / 12)&-1; $43 = ($42|0)!=(0); if ($43) { $10 = $34; $44 = $10; $9 = $44; $45 = $9; $46 = ((($45)) + 4|0); $47 = HEAP32[$46>>2]|0; $6 = $45; $7 = $47; $48 = $7; $3 = $5; $4 = $48; $49 = $3; $50 = $4; HEAP32[$49>>2] = $50; $51 = HEAP32[$5>>2]|0; HEAP32[$8>>2] = $51; $52 = HEAP32[$8>>2]|0; HEAP32[$11>>2] = $52; ;HEAP8[$2>>0]=HEAP8[$11>>0]|0;HEAP8[$2+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$2+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$2+3>>0]=HEAP8[$11+3>>0]|0; $1 = $33; $53 = $1; ;HEAP32[$53>>2]=HEAP32[$2>>2]|0; $54 = ((($53)) + 4|0); ;HEAP32[$54>>2]=HEAP32[$2>>2]|0; $17 = $33; $55 = $17; $15 = $55; $56 = $15; $57 = ((($56)) + 4|0); ;HEAP32[$16>>2]=HEAP32[$57>>2]|0; $14 = $16; $58 = $14; $59 = HEAP32[$58>>2]|0; $60 = ((($59)) + -12|0); HEAP32[$58>>2] = $60; $13 = $58; $61 = $13; $62 = HEAP32[$61>>2]|0; $12 = $62; $63 = $12; $64 = HEAP32[$63>>2]|0; $65 = ($64|0)==(0); if ($65) { $23 = $33; $66 = $23; $21 = $66; $67 = $21; $68 = ((($67)) + 4|0); ;HEAP32[$22>>2]=HEAP32[$68>>2]|0; $20 = $22; $69 = $20; $70 = HEAP32[$69>>2]|0; $71 = ((($70)) + -12|0); HEAP32[$69>>2] = $71; $19 = $69; $72 = $19; $73 = HEAP32[$72>>2]|0; $18 = $73; $74 = $18; $75 = ((($74)) + 8|0); $76 = HEAP32[$75>>2]|0; $77 = ($76|0)==(2); if ($77) { $29 = $33; $78 = $29; $27 = $78; $79 = $27; $80 = ((($79)) + 4|0); ;HEAP32[$28>>2]=HEAP32[$80>>2]|0; $26 = $28; $81 = $26; $82 = HEAP32[$81>>2]|0; $83 = ((($82)) + -12|0); HEAP32[$81>>2] = $83; $25 = $81; $84 = $25; $85 = HEAP32[$84>>2]|0; $24 = $85; $86 = $24; $87 = ((($86)) + 4|0); $88 = HEAP32[$87>>2]|0; $31 = $88; $89 = $31; STACKTOP = sp;return ($89|0); } } } $31 = 0; $89 = $31; STACKTOP = sp;return ($89|0); } function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEENS0_26dynamic_field_decompressorIT_E3ptrERSB_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $$byval_copy = sp + 8|0; $3 = sp; $2 = $1; $4 = (__Znwj(24)|0); $5 = $2; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($4,$5); ;HEAP32[$3>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$4,$$byval_copy); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7point10EEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(4792)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las7gpstimeEEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(336)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_3las3rgbEEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(324)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE9add_fieldINS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISE_EEEEEEvRKT_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); $$byval_copy = sp + 140|0; $17 = sp; $22 = sp + 145|0; $33 = sp + 144|0; $36 = sp + 8|0; $37 = sp + 4|0; $34 = $0; $35 = $1; $38 = $34; $39 = ((($38)) + 8|0); $40 = (__Znwj(64)|0); $41 = ((($38)) + 4|0); $42 = HEAP32[$41>>2]|0; $43 = $35; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($40,$42,$43); ;HEAP32[$37>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$37>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($36,$40,$$byval_copy); $31 = $39; $32 = $36; $44 = $31; $45 = ((($44)) + 4|0); $46 = HEAP32[$45>>2]|0; $30 = $44; $47 = $30; $48 = ((($47)) + 8|0); $29 = $48; $49 = $29; $28 = $49; $50 = $28; $51 = HEAP32[$50>>2]|0; $52 = ($46>>>0)<($51>>>0); if ($52) { $25 = $33; $26 = $44; $27 = 1; $4 = $44; $53 = $4; $54 = ((($53)) + 8|0); $3 = $54; $55 = $3; $2 = $55; $56 = $2; $57 = ((($44)) + 4|0); $58 = HEAP32[$57>>2]|0; $5 = $58; $59 = $5; $60 = $32; $6 = $60; $61 = $6; $19 = $56; $20 = $59; $21 = $61; $62 = $19; $63 = $20; $64 = $21; $18 = $64; $65 = $18; ;HEAP8[$17>>0]=HEAP8[$22>>0]|0; $14 = $62; $15 = $63; $16 = $65; $66 = $14; $67 = $15; $68 = $16; $13 = $68; $69 = $13; $10 = $66; $11 = $67; $12 = $69; $70 = $11; $71 = $12; $9 = $71; $72 = $9; $7 = $70; $8 = $72; $73 = $7; $74 = $8; $75 = HEAP32[$74>>2]|0; HEAP32[$73>>2] = $75; $76 = ((($73)) + 4|0); $77 = $8; $78 = ((($77)) + 4|0); $79 = HEAP32[$78>>2]|0; HEAP32[$76>>2] = $79; $80 = $8; HEAP32[$80>>2] = 0; $81 = $8; $82 = ((($81)) + 4|0); HEAP32[$82>>2] = 0; $23 = $33; $83 = ((($44)) + 4|0); $84 = HEAP32[$83>>2]|0; $85 = ((($84)) + 8|0); HEAP32[$83>>2] = $85; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36); STACKTOP = sp;return; } else { $86 = $32; $24 = $86; $87 = $24; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($44,$87); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($36); STACKTOP = sp;return; } } function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2Ej($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $4 = sp; $2 = $0; $3 = $1; $5 = $2; $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($5)) + 4|0); HEAP8[$7>>0] = 0; $8 = ((($5)) + 8|0); $9 = $3; __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($8,$9); $10 = ((($5)) + 20|0); $11 = $3; __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($10,$11); $12 = ((($5)) + 32|0); $13 = $3; __ZN6laszip6models10arithmeticC2EjbPj($4,256,0,0); __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($12,$13,$4); __ZN6laszip6models10arithmeticD2Ev($4); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 32|0); __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($3); $4 = ((($2)) + 20|0); __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($4); $5 = ((($2)) + 8|0); __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($5); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $$byval_copy = sp + 12|0; $5 = sp; $3 = $1; $4 = $2; $6 = (__Znwj(12)|0); $7 = $3; $8 = $4; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($6,$7,$8); ;HEAP32[$5>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISP_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); $3 = ((($2)) + 4784|0); __ZN6laszip7formats19record_decompressorIJEEC2Ev($3); STACKTOP = sp;return; } function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $$byval_copy = sp + 12|0; $5 = sp; $3 = $1; $4 = $2; $6 = (__Znwj(12)|0); $7 = $3; $8 = $4; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8); ;HEAP32[$5>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); $3 = ((($2)) + 4784|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3); STACKTOP = sp;return; } function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $$byval_copy = sp + 12|0; $5 = sp; $3 = $1; $4 = $2; $6 = (__Znwj(12)|0); $7 = $3; $8 = $4; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($6,$7,$8); ;HEAP32[$5>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_3rgbENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); $3 = ((($2)) + 4784|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3); STACKTOP = sp;return; } function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEENSt3__210shared_ptrINS0_20dynamic_decompressorEEERT_PT0_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$byval_copy = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $$byval_copy = sp + 12|0; $5 = sp; $3 = $1; $4 = $2; $6 = (__Znwj(12)|0); $7 = $3; $8 = $4; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEC2ERS9_PSN_($6,$7,$8); ;HEAP32[$5>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$5>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEENSG_INSH_3rgbENSJ_ISP_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISV_PS3_EE5valueENS4_5__natEE4typeE($0,$6,$$byval_copy); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($2); $3 = ((($2)) + 4784|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($3); STACKTOP = sp;return; } function __ZNK6laszip7factory11record_itemneERKS1_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; $6 = (__ZNK6laszip7factory11record_itemeqERKS1_($4,$5)|0); $7 = $6 ^ 1; STACKTOP = sp;return ($7|0); } function __ZN6laszip7factory11record_item5pointEv() { var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = HEAP8[21192]|0; $1 = ($0<<24>>24)==(0); if ($1) { $2 = (___cxa_guard_acquire(21192)|0); $3 = ($2|0)!=(0); if ($3) { __ZN6laszip7factory11record_itemC2Eiii(21256,6,20,2); } } return (21256|0); } function __ZNK6laszip7factory11record_itemeqERKS1_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = HEAP32[$4>>2]|0; $6 = $3; $7 = HEAP32[$6>>2]|0; $8 = ($5|0)==($7|0); if (!($8)) { $21 = 0; STACKTOP = sp;return ($21|0); } $9 = ((($4)) + 8|0); $10 = HEAP32[$9>>2]|0; $11 = $3; $12 = ((($11)) + 8|0); $13 = HEAP32[$12>>2]|0; $14 = ($10|0)==($13|0); if (!($14)) { $21 = 0; STACKTOP = sp;return ($21|0); } $15 = ((($4)) + 4|0); $16 = HEAP32[$15>>2]|0; $17 = $3; $18 = ((($17)) + 4|0); $19 = HEAP32[$18>>2]|0; $20 = ($16|0)==($19|0); $21 = $20; STACKTOP = sp;return ($21|0); } function __ZN6laszip7factory11record_item7gpstimeEv() { var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = HEAP8[21200]|0; $1 = ($0<<24>>24)==(0); if ($1) { $2 = (___cxa_guard_acquire(21200)|0); $3 = ($2|0)!=(0); if ($3) { __ZN6laszip7factory11record_itemC2Eiii(21268,7,8,2); } } return (21268|0); } function __ZN6laszip7factory11record_item3rgbEv() { var $0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = HEAP8[21208]|0; $1 = ($0<<24>>24)==(0); if ($1) { $2 = (___cxa_guard_acquire(21208)|0); $3 = ($2|0)!=(0); if ($3) { __ZN6laszip7factory11record_itemC2Eiii(21280,8,6,2); } } return (21280|0); } function __ZN6laszip19unknown_schema_typeD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip19unknown_schema_typeD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEC2ERS9_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $12 = sp + 12|0; $14 = $0; $15 = $1; $16 = $14; __ZN6laszip7formats20dynamic_decompressorC2Ev($16); HEAP32[$16>>2] = (1956); $17 = ((($16)) + 4|0); $18 = $15; HEAP32[$17>>2] = $18; $19 = ((($16)) + 8|0); $13 = $19; $20 = $13; $11 = $20; $21 = $11; $10 = $21; HEAP32[$21>>2] = 0; $22 = ((($21)) + 4|0); HEAP32[$22>>2] = 0; $23 = ((($21)) + 8|0); HEAP32[$12>>2] = 0; $8 = $23; $9 = $12; $24 = $8; $25 = $9; $7 = $25; $26 = $7; $3 = $24; $4 = $26; $27 = $3; $28 = $4; $2 = $28; HEAP32[$27>>2] = 0; $6 = $24; $29 = $6; $5 = $29; $30 = ((($16)) + 20|0); HEAP8[$30>>0] = 1; STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEEC2ISC_EEPT_NS_9enable_ifIXsr14is_convertibleISG_PSC_EE5valueENSD_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (1996); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 8|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats20dynamic_decompressorC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (1976); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE10decompressEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0; var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0; var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0; var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0; var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0; var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); $20 = sp + 72|0; $23 = sp + 60|0; $27 = sp + 44|0; $30 = sp + 32|0; $35 = sp + 12|0; $36 = sp + 8|0; $37 = sp; $32 = $0; $33 = $1; $38 = $32; $39 = ((($38)) + 8|0); $34 = $39; $40 = $34; $31 = $40; $41 = $31; $42 = HEAP32[$41>>2]|0; $28 = $41; $29 = $42; $43 = $29; $25 = $27; $26 = $43; $44 = $25; $45 = $26; HEAP32[$44>>2] = $45; $46 = HEAP32[$27>>2]|0; HEAP32[$30>>2] = $46; $47 = HEAP32[$30>>2]|0; HEAP32[$35>>2] = $47; $48 = $34; $24 = $48; $49 = $24; $50 = ((($49)) + 4|0); $51 = HEAP32[$50>>2]|0; $21 = $49; $22 = $51; $52 = $22; $18 = $20; $19 = $52; $53 = $18; $54 = $19; HEAP32[$53>>2] = $54; $55 = HEAP32[$20>>2]|0; HEAP32[$23>>2] = $55; $56 = HEAP32[$23>>2]|0; HEAP32[$36>>2] = $56; while(1) { $16 = $35; $17 = $36; $57 = $16; $58 = $17; $14 = $57; $15 = $58; $59 = $14; $13 = $59; $60 = $13; $61 = HEAP32[$60>>2]|0; $62 = $15; $12 = $62; $63 = $12; $64 = HEAP32[$63>>2]|0; $65 = ($61|0)==($64|0); $66 = $65 ^ 1; if (!($66)) { break; } $10 = $35; $67 = $10; $68 = HEAP32[$67>>2]|0; $8 = $37; $9 = $68; $69 = $8; $70 = $9; $71 = HEAP32[$70>>2]|0; HEAP32[$69>>2] = $71; $72 = ((($69)) + 4|0); $73 = $9; $74 = ((($73)) + 4|0); $75 = HEAP32[$74>>2]|0; HEAP32[$72>>2] = $75; $76 = ((($69)) + 4|0); $77 = HEAP32[$76>>2]|0; $78 = ($77|0)!=(0|0); if ($78) { $79 = ((($69)) + 4|0); $80 = HEAP32[$79>>2]|0; $7 = $80; $81 = $7; $6 = $81; $82 = $6; $83 = ((($82)) + 4|0); $3 = $83; $84 = $3; $4 = 1; $85 = $4; $86 = HEAP32[$84>>2]|0; $87 = (($86) + ($85))|0; HEAP32[$84>>2] = $87; $88 = (($86) + ($85))|0; $5 = $88; } $2 = $37; $89 = $2; $90 = HEAP32[$89>>2]|0; $91 = HEAP32[$90>>2]|0; $92 = ((($91)) + 12|0); $93 = HEAP32[$92>>2]|0; $94 = $33; $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0); $33 = $95; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37); $11 = $35; $96 = $11; $97 = HEAP32[$96>>2]|0; $98 = ((($97)) + 8|0); HEAP32[$96>>2] = $98; } $99 = ((($38)) + 20|0); $100 = HEAP8[$99>>0]|0; $101 = $100&1; if (!($101)) { $105 = $33; STACKTOP = sp;return ($105|0); } $102 = ((($38)) + 20|0); HEAP8[$102>>0] = 0; $103 = ((($38)) + 4|0); $104 = HEAP32[$103>>2]|0; __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($104); $105 = $33; STACKTOP = sp;return ($105|0); } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (1956); $3 = ((($2)) + 8|0); __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3); __ZN6laszip7formats20dynamic_decompressorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats20dynamic_decompressorD2Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZN6laszip7formats20dynamic_decompressorD0Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; _llvm_trap(); // unreachable; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__213__vector_baseINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $19 = sp; $22 = sp + 120|0; $31 = $0; $32 = $31; $33 = HEAP32[$32>>2]|0; $34 = ($33|0)!=(0|0); if (!($34)) { STACKTOP = sp;return; } $30 = $32; $35 = $30; $36 = HEAP32[$35>>2]|0; $27 = $35; $28 = $36; $37 = $27; $38 = ((($37)) + 4|0); $39 = HEAP32[$38>>2]|0; $29 = $39; while(1) { $40 = $28; $41 = $29; $42 = ($40|0)!=($41|0); if (!($42)) { break; } $26 = $37; $43 = $26; $44 = ((($43)) + 8|0); $25 = $44; $45 = $25; $24 = $45; $46 = $24; $47 = $29; $48 = ((($47)) + -8|0); $29 = $48; $23 = $48; $49 = $23; $20 = $46; $21 = $49; $50 = $20; $51 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $50; $18 = $51; $52 = $17; $53 = $18; $15 = $52; $16 = $53; $54 = $16; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($54); } $55 = $28; $56 = ((($37)) + 4|0); HEAP32[$56>>2] = $55; $14 = $32; $57 = $14; $58 = ((($57)) + 8|0); $13 = $58; $59 = $13; $12 = $59; $60 = $12; $61 = HEAP32[$32>>2]|0; $4 = $32; $62 = $4; $3 = $62; $63 = $3; $64 = ((($63)) + 8|0); $2 = $64; $65 = $2; $1 = $65; $66 = $1; $67 = HEAP32[$66>>2]|0; $68 = HEAP32[$62>>2]|0; $69 = $67; $70 = $68; $71 = (($69) - ($70))|0; $72 = (($71|0) / 8)&-1; $9 = $60; $10 = $61; $11 = $72; $73 = $9; $74 = $10; $75 = $11; $6 = $73; $7 = $74; $8 = $75; $76 = $7; $5 = $76; $77 = $5; __ZdlPv($77); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 8|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 312; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2024); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2072); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); $12 = sp + 8|0; $17 = sp + 201|0; $26 = sp; $29 = sp + 200|0; $37 = sp + 72|0; $40 = sp + 60|0; $48 = sp + 12|0; $45 = $0; $46 = $1; $49 = $45; $44 = $49; $50 = $44; $51 = ((($50)) + 8|0); $43 = $51; $52 = $43; $42 = $52; $53 = $42; $47 = $53; $41 = $49; $54 = $41; $55 = ((($54)) + 4|0); $56 = HEAP32[$55>>2]|0; $57 = HEAP32[$54>>2]|0; $58 = $56; $59 = $57; $60 = (($58) - ($59))|0; $61 = (($60|0) / 8)&-1; $62 = (($61) + 1)|0; $36 = $49; HEAP32[$37>>2] = $62; $63 = $36; $64 = (__ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($63)|0); $38 = $64; $65 = HEAP32[$37>>2]|0; $66 = $38; $67 = ($65>>>0)>($66>>>0); if ($67) { __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($63); // unreachable; } $34 = $63; $68 = $34; $33 = $68; $69 = $33; $32 = $69; $70 = $32; $71 = ((($70)) + 8|0); $31 = $71; $72 = $31; $30 = $72; $73 = $30; $74 = HEAP32[$73>>2]|0; $75 = HEAP32[$69>>2]|0; $76 = $74; $77 = $75; $78 = (($76) - ($77))|0; $79 = (($78|0) / 8)&-1; $39 = $79; $80 = $39; $81 = $38; $82 = (($81>>>0) / 2)&-1; $83 = ($80>>>0)>=($82>>>0); if ($83) { $84 = $38; $35 = $84; } else { $85 = $39; $86 = $85<<1; HEAP32[$40>>2] = $86; $27 = $40; $28 = $37; $87 = $27; $88 = $28; ;HEAP8[$26>>0]=HEAP8[$29>>0]|0; $24 = $87; $25 = $88; $89 = $24; $90 = $25; $21 = $26; $22 = $89; $23 = $90; $91 = $22; $92 = HEAP32[$91>>2]|0; $93 = $23; $94 = HEAP32[$93>>2]|0; $95 = ($92>>>0)<($94>>>0); $96 = $25; $97 = $24; $98 = $95 ? $96 : $97; $99 = HEAP32[$98>>2]|0; $35 = $99; } $100 = $35; $20 = $49; $101 = $20; $102 = ((($101)) + 4|0); $103 = HEAP32[$102>>2]|0; $104 = HEAP32[$101>>2]|0; $105 = $103; $106 = $104; $107 = (($105) - ($106))|0; $108 = (($107|0) / 8)&-1; $109 = $47; __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($48,$100,$108,$109); $110 = $47; $111 = ((($48)) + 8|0); $112 = HEAP32[$111>>2]|0; $19 = $112; $113 = $19; $114 = $46; $18 = $114; $115 = $18; $14 = $110; $15 = $113; $16 = $115; $116 = $14; $117 = $15; $118 = $16; $13 = $118; $119 = $13; ;HEAP8[$12>>0]=HEAP8[$17>>0]|0; $9 = $116; $10 = $117; $11 = $119; $120 = $9; $121 = $10; $122 = $11; $8 = $122; $123 = $8; $5 = $120; $6 = $121; $7 = $123; $124 = $6; $125 = $7; $4 = $125; $126 = $4; $2 = $124; $3 = $126; $127 = $2; $128 = $3; $129 = HEAP32[$128>>2]|0; HEAP32[$127>>2] = $129; $130 = ((($127)) + 4|0); $131 = $3; $132 = ((($131)) + 4|0); $133 = HEAP32[$132>>2]|0; HEAP32[$130>>2] = $133; $134 = $3; HEAP32[$134>>2] = 0; $135 = $3; $136 = ((($135)) + 4|0); HEAP32[$136>>2] = 0; $137 = ((($48)) + 8|0); $138 = HEAP32[$137>>2]|0; $139 = ((($138)) + 8|0); HEAP32[$137>>2] = $139; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($49,$48); __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($48); STACKTOP = sp;return; } function __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEEC2EjjS8_($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $35 = sp; $31 = $0; $32 = $1; $33 = $2; $34 = $3; $36 = $31; $37 = ((($36)) + 12|0); HEAP32[$35>>2] = 0; $38 = $34; $28 = $37; $29 = $35; $30 = $38; $39 = $28; $40 = $29; $27 = $40; $41 = $27; $21 = $39; $22 = $41; $42 = $21; $43 = $22; $20 = $43; HEAP32[$42>>2] = 0; $44 = ((($39)) + 4|0); $45 = $30; $23 = $45; $46 = $23; $25 = $44; $26 = $46; $47 = $25; $48 = $26; $24 = $48; $49 = $24; HEAP32[$47>>2] = $49; $50 = $32; $51 = ($50|0)!=(0); do { if ($51) { $6 = $36; $52 = $6; $53 = ((($52)) + 12|0); $5 = $53; $54 = $5; $55 = ((($54)) + 4|0); $4 = $55; $56 = $4; $57 = HEAP32[$56>>2]|0; $58 = $32; $15 = $57; $16 = $58; $59 = $15; $60 = $16; $12 = $59; $13 = $60; $14 = 0; $61 = $12; $62 = $13; $11 = $61; $63 = ($62>>>0)>(536870911); if ($63) { $9 = 4287; $64 = (___cxa_allocate_exception(8)|0); $65 = $9; $7 = $64; $8 = $65; $66 = $7; $67 = $8; __ZNSt11logic_errorC2EPKc($66,$67); HEAP32[$66>>2] = (3660); ___cxa_throw(($64|0),(1384|0),(220|0)); // unreachable; } else { $68 = $13; $69 = $68<<3; $10 = $69; $70 = $10; $71 = (__Znwj($70)|0); $72 = $71; break; } } else { $72 = 0; } } while(0); HEAP32[$36>>2] = $72; $73 = HEAP32[$36>>2]|0; $74 = $33; $75 = (($73) + ($74<<3)|0); $76 = ((($36)) + 8|0); HEAP32[$76>>2] = $75; $77 = ((($36)) + 4|0); HEAP32[$77>>2] = $75; $78 = HEAP32[$36>>2]|0; $79 = $32; $80 = (($78) + ($79<<3)|0); $19 = $36; $81 = $19; $82 = ((($81)) + 12|0); $18 = $82; $83 = $18; $17 = $83; $84 = $17; HEAP32[$84>>2] = $80; STACKTOP = sp;return; } function __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE26__swap_out_circular_bufferERNS_14__split_bufferIS5_RS7_EE($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0; var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0; var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0; var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0; var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 416|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(416|0); $17 = sp; $22 = sp + 412|0; $33 = sp + 292|0; $39 = sp + 268|0; $51 = sp + 220|0; $104 = $0; $105 = $1; $106 = $104; $103 = $106; $107 = $103; $102 = $107; $108 = $102; $109 = HEAP32[$108>>2]|0; $101 = $109; $110 = $101; $80 = $107; $111 = $80; $112 = HEAP32[$111>>2]|0; $79 = $112; $113 = $79; $85 = $107; $114 = $85; $84 = $114; $115 = $84; $83 = $115; $116 = $83; $117 = ((($116)) + 8|0); $82 = $117; $118 = $82; $81 = $118; $119 = $81; $120 = HEAP32[$119>>2]|0; $121 = HEAP32[$115>>2]|0; $122 = $120; $123 = $121; $124 = (($122) - ($123))|0; $125 = (($124|0) / 8)&-1; $126 = (($113) + ($125<<3)|0); $87 = $107; $127 = $87; $128 = HEAP32[$127>>2]|0; $86 = $128; $129 = $86; $88 = $107; $130 = $88; $131 = ((($130)) + 4|0); $132 = HEAP32[$131>>2]|0; $133 = HEAP32[$130>>2]|0; $134 = $132; $135 = $133; $136 = (($134) - ($135))|0; $137 = (($136|0) / 8)&-1; $138 = (($129) + ($137<<3)|0); $90 = $107; $139 = $90; $140 = HEAP32[$139>>2]|0; $89 = $140; $141 = $89; $95 = $107; $142 = $95; $94 = $142; $143 = $94; $93 = $143; $144 = $93; $145 = ((($144)) + 8|0); $92 = $145; $146 = $92; $91 = $146; $147 = $91; $148 = HEAP32[$147>>2]|0; $149 = HEAP32[$143>>2]|0; $150 = $148; $151 = $149; $152 = (($150) - ($151))|0; $153 = (($152|0) / 8)&-1; $154 = (($141) + ($153<<3)|0); $96 = $107; $97 = $110; $98 = $126; $99 = $138; $100 = $154; $4 = $106; $155 = $4; $156 = ((($155)) + 8|0); $3 = $156; $157 = $3; $2 = $157; $158 = $2; $159 = HEAP32[$106>>2]|0; $160 = ((($106)) + 4|0); $161 = HEAP32[$160>>2]|0; $162 = $105; $163 = ((($162)) + 4|0); $24 = $158; $25 = $159; $26 = $161; $27 = $163; while(1) { $164 = $26; $165 = $25; $166 = ($164|0)!=($165|0); if (!($166)) { break; } $167 = $24; $168 = $27; $169 = HEAP32[$168>>2]|0; $170 = ((($169)) + -8|0); $23 = $170; $171 = $23; $172 = $26; $173 = ((($172)) + -8|0); $26 = $173; $6 = $173; $174 = $6; $5 = $174; $175 = $5; $19 = $167; $20 = $171; $21 = $175; $176 = $19; $177 = $20; $178 = $21; $18 = $178; $179 = $18; ;HEAP8[$17>>0]=HEAP8[$22>>0]|0; $14 = $176; $15 = $177; $16 = $179; $180 = $14; $181 = $15; $182 = $16; $13 = $182; $183 = $13; $10 = $180; $11 = $181; $12 = $183; $184 = $11; $185 = $12; $9 = $185; $186 = $9; $7 = $184; $8 = $186; $187 = $7; $188 = $8; $189 = HEAP32[$188>>2]|0; HEAP32[$187>>2] = $189; $190 = ((($187)) + 4|0); $191 = $8; $192 = ((($191)) + 4|0); $193 = HEAP32[$192>>2]|0; HEAP32[$190>>2] = $193; $194 = $8; HEAP32[$194>>2] = 0; $195 = $8; $196 = ((($195)) + 4|0); HEAP32[$196>>2] = 0; $197 = $27; $198 = HEAP32[$197>>2]|0; $199 = ((($198)) + -8|0); HEAP32[$197>>2] = $199; } $200 = $105; $201 = ((($200)) + 4|0); $31 = $106; $32 = $201; $202 = $31; $30 = $202; $203 = $30; $204 = HEAP32[$203>>2]|0; HEAP32[$33>>2] = $204; $205 = $32; $28 = $205; $206 = $28; $207 = HEAP32[$206>>2]|0; $208 = $31; HEAP32[$208>>2] = $207; $29 = $33; $209 = $29; $210 = HEAP32[$209>>2]|0; $211 = $32; HEAP32[$211>>2] = $210; $212 = ((($106)) + 4|0); $213 = $105; $214 = ((($213)) + 8|0); $37 = $212; $38 = $214; $215 = $37; $36 = $215; $216 = $36; $217 = HEAP32[$216>>2]|0; HEAP32[$39>>2] = $217; $218 = $38; $34 = $218; $219 = $34; $220 = HEAP32[$219>>2]|0; $221 = $37; HEAP32[$221>>2] = $220; $35 = $39; $222 = $35; $223 = HEAP32[$222>>2]|0; $224 = $38; HEAP32[$224>>2] = $223; $42 = $106; $225 = $42; $226 = ((($225)) + 8|0); $41 = $226; $227 = $41; $40 = $227; $228 = $40; $229 = $105; $45 = $229; $230 = $45; $231 = ((($230)) + 12|0); $44 = $231; $232 = $44; $43 = $232; $233 = $43; $49 = $228; $50 = $233; $234 = $49; $48 = $234; $235 = $48; $236 = HEAP32[$235>>2]|0; HEAP32[$51>>2] = $236; $237 = $50; $46 = $237; $238 = $46; $239 = HEAP32[$238>>2]|0; $240 = $49; HEAP32[$240>>2] = $239; $47 = $51; $241 = $47; $242 = HEAP32[$241>>2]|0; $243 = $50; HEAP32[$243>>2] = $242; $244 = $105; $245 = ((($244)) + 4|0); $246 = HEAP32[$245>>2]|0; $247 = $105; HEAP32[$247>>2] = $246; $52 = $106; $248 = $52; $249 = ((($248)) + 4|0); $250 = HEAP32[$249>>2]|0; $251 = HEAP32[$248>>2]|0; $252 = $250; $253 = $251; $254 = (($252) - ($253))|0; $255 = (($254|0) / 8)&-1; $76 = $106; $77 = $255; $256 = $76; $75 = $256; $257 = $75; $258 = HEAP32[$257>>2]|0; $74 = $258; $259 = $74; $54 = $256; $260 = $54; $261 = HEAP32[$260>>2]|0; $53 = $261; $262 = $53; $59 = $256; $263 = $59; $58 = $263; $264 = $58; $57 = $264; $265 = $57; $266 = ((($265)) + 8|0); $56 = $266; $267 = $56; $55 = $267; $268 = $55; $269 = HEAP32[$268>>2]|0; $270 = HEAP32[$264>>2]|0; $271 = $269; $272 = $270; $273 = (($271) - ($272))|0; $274 = (($273|0) / 8)&-1; $275 = (($262) + ($274<<3)|0); $61 = $256; $276 = $61; $277 = HEAP32[$276>>2]|0; $60 = $277; $278 = $60; $66 = $256; $279 = $66; $65 = $279; $280 = $65; $64 = $280; $281 = $64; $282 = ((($281)) + 8|0); $63 = $282; $283 = $63; $62 = $283; $284 = $62; $285 = HEAP32[$284>>2]|0; $286 = HEAP32[$280>>2]|0; $287 = $285; $288 = $286; $289 = (($287) - ($288))|0; $290 = (($289|0) / 8)&-1; $291 = (($278) + ($290<<3)|0); $68 = $256; $292 = $68; $293 = HEAP32[$292>>2]|0; $67 = $293; $294 = $67; $295 = $77; $296 = (($294) + ($295<<3)|0); $69 = $256; $70 = $259; $71 = $275; $72 = $291; $73 = $296; $78 = $106; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferINS_10shared_ptrIN6laszip7formats10base_fieldEEERNS_9allocatorIS5_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $19 = sp + 8|0; $22 = sp + 133|0; $29 = sp; $32 = sp + 132|0; $34 = $0; $35 = $34; $33 = $35; $36 = $33; $37 = ((($36)) + 4|0); $38 = HEAP32[$37>>2]|0; $30 = $36; $31 = $38; $39 = $30; $40 = $31; ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; $27 = $39; $28 = $40; $41 = $27; while(1) { $42 = $28; $43 = ((($41)) + 8|0); $44 = HEAP32[$43>>2]|0; $45 = ($42|0)!=($44|0); if (!($45)) { break; } $26 = $41; $46 = $26; $47 = ((($46)) + 12|0); $25 = $47; $48 = $25; $49 = ((($48)) + 4|0); $24 = $49; $50 = $24; $51 = HEAP32[$50>>2]|0; $52 = ((($41)) + 8|0); $53 = HEAP32[$52>>2]|0; $54 = ((($53)) + -8|0); HEAP32[$52>>2] = $54; $23 = $54; $55 = $23; $20 = $51; $21 = $55; $56 = $20; $57 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $56; $18 = $57; $58 = $17; $59 = $18; $15 = $58; $16 = $59; $60 = $16; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($60); } $61 = HEAP32[$35>>2]|0; $62 = ($61|0)!=(0|0); if (!($62)) { STACKTOP = sp;return; } $14 = $35; $63 = $14; $64 = ((($63)) + 12|0); $13 = $64; $65 = $13; $66 = ((($65)) + 4|0); $12 = $66; $67 = $12; $68 = HEAP32[$67>>2]|0; $69 = HEAP32[$35>>2]|0; $11 = $35; $70 = $11; $10 = $70; $71 = $10; $72 = ((($71)) + 12|0); $9 = $72; $73 = $9; $8 = $73; $74 = $8; $75 = HEAP32[$74>>2]|0; $76 = HEAP32[$70>>2]|0; $77 = $75; $78 = $76; $79 = (($77) - ($78))|0; $80 = (($79|0) / 8)&-1; $5 = $68; $6 = $69; $7 = $80; $81 = $5; $82 = $6; $83 = $7; $2 = $81; $3 = $82; $4 = $83; $84 = $3; $1 = $84; $85 = $1; __ZdlPv($85); STACKTOP = sp;return; } function __ZNKSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE8max_sizeEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $6 = sp + 8|0; $9 = sp + 77|0; $12 = sp; $14 = sp + 76|0; $19 = sp + 16|0; $20 = sp + 12|0; $18 = $0; $21 = $18; $17 = $21; $22 = $17; $23 = ((($22)) + 8|0); $16 = $23; $24 = $16; $15 = $24; $25 = $15; $13 = $25; $26 = $13; ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; $11 = $26; $27 = $11; $10 = $27; HEAP32[$19>>2] = 536870911; HEAP32[$20>>2] = 2147483647; $7 = $19; $8 = $20; $28 = $7; $29 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $28; $5 = $29; $30 = $5; $31 = $4; $1 = $6; $2 = $30; $3 = $31; $32 = $2; $33 = HEAP32[$32>>2]|0; $34 = $3; $35 = HEAP32[$34>>2]|0; $36 = ($33>>>0)<($35>>>0); $37 = $5; $38 = $4; $39 = $36 ? $37 : $38; $40 = HEAP32[$39>>2]|0; STACKTOP = sp;return ($40|0); } function __ZN6laszip7formats10base_fieldC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2048); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2); $3 = ((($2)) + 3980|0); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3); $4 = ((($2)) + 4380|0); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4); $5 = ((($2)) + 4780|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 4781|0); HEAP8[$6>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2024); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats10base_field11compressRawEPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $3; STACKTOP = sp;return ($4|0); } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats10base_fieldD2Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZN6laszip7formats10base_fieldD0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats10base_fieldD2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats10base_field13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $3; STACKTOP = sp;return ($4|0); } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0; var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0; var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0; var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0; var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0; var $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $30 = sp + 124|0; $31 = sp + 4|0; $29 = $0; $33 = $29; __ZN6laszip7formats3las7point10C2Ev($33); $34 = ((($33)) + 52|0); __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($34); $35 = ((($33)) + 436|0); __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($35); $36 = ((($33)) + 852|0); __ZN6laszip6models10arithmeticC2EjbPj($36,64,0,0); $37 = ((($33)) + 3976|0); HEAP8[$37>>0] = 0; $38 = ((($33)) + 20|0); HEAP16[$30>>1] = 0; $27 = $38; $28 = $30; $39 = $27; $40 = $28; $24 = $39; $25 = 16; $26 = $40; $41 = $24; $42 = $25; $23 = $42; $43 = $23; $44 = $26; $20 = $41; $21 = $43; $22 = $44; while(1) { $45 = $21; $46 = ($45>>>0)>(0); if (!($46)) { break; } $47 = $22; $48 = HEAP16[$47>>1]|0; $49 = $20; HEAP16[$49>>1] = $48; $50 = $20; $51 = ((($50)) + 2|0); $20 = $51; $52 = $21; $53 = (($52) + -1)|0; $21 = $53; } $54 = (__Znwj(44)|0); __ZN6laszip6models10arithmeticC2EjbPj($54,256,0,0); $55 = ((($33)) + 896|0); $18 = $55; $19 = 0; $56 = $18; $57 = $19; $58 = (($56) + ($57<<2)|0); HEAP32[$58>>2] = $54; $59 = (__Znwj(44)|0); __ZN6laszip6models10arithmeticC2EjbPj($59,256,0,0); $60 = ((($33)) + 896|0); $14 = $60; $15 = 1; $61 = $14; $62 = $15; $63 = (($61) + ($62<<2)|0); HEAP32[$63>>2] = $59; $64 = ((($33)) + 820|0); HEAP32[$31>>2] = 0; $10 = $64; $11 = $31; $65 = $10; $66 = $11; $7 = $65; $8 = 8; $9 = $66; $67 = $7; $68 = $8; $6 = $68; $69 = $6; $70 = $9; $3 = $67; $4 = $69; $5 = $70; while(1) { $71 = $4; $72 = ($71>>>0)>(0); if (!($72)) { break; } $73 = $5; $74 = HEAP32[$73>>2]|0; $75 = $3; HEAP32[$75>>2] = $74; $76 = $3; $77 = ((($76)) + 4|0); $3 = $77; $78 = $4; $79 = (($78) + -1)|0; $4 = $79; } $32 = 0; while(1) { $80 = $32; $81 = ($80|0)<(256); if (!($81)) { break; } $82 = (__Znwj(44)|0); __ZN6laszip6models10arithmeticC2EjbPj($82,256,0,0); $83 = ((($33)) + 904|0); $84 = $32; $1 = $83; $2 = $84; $85 = $1; $86 = $2; $87 = (($85) + ($86<<2)|0); HEAP32[$87>>2] = $82; $88 = (__Znwj(44)|0); __ZN6laszip6models10arithmeticC2EjbPj($88,256,0,0); $89 = ((($33)) + 1928|0); $90 = $32; $12 = $89; $13 = $90; $91 = $12; $92 = $13; $93 = (($91) + ($92<<2)|0); HEAP32[$93>>2] = $88; $94 = (__Znwj(44)|0); __ZN6laszip6models10arithmeticC2EjbPj($94,256,0,0); $95 = ((($33)) + 2952|0); $96 = $32; $16 = $95; $17 = $96; $97 = $16; $98 = $17; $99 = (($97) + ($98<<2)|0); HEAP32[$99>>2] = $94; $100 = $32; $101 = (($100) + 1)|0; $32 = $101; } STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,16,4,8,0); $3 = ((($2)) + 80|0); __ZN6laszip11compressors7integerC2Ejjjj($3,16,1,8,0); $4 = ((($2)) + 160|0); __ZN6laszip11compressors7integerC2Ejjjj($4,32,2,8,0); $5 = ((($2)) + 240|0); __ZN6laszip11compressors7integerC2Ejjjj($5,32,22,8,0); $6 = ((($2)) + 320|0); __ZN6laszip11compressors7integerC2Ejjjj($6,32,20,8,0); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13decompressors7integerC2Ejjjj($2,16,4,8,0); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0); $4 = ((($2)) + 160|0); __ZN6laszip13decompressors7integerC2Ejjjj($4,32,2,8,0); $5 = ((($2)) + 240|0); __ZN6laszip13decompressors7integerC2Ejjjj($5,32,22,8,0); $6 = ((($2)) + 320|0); __ZN6laszip13decompressors7integerC2Ejjjj($6,32,20,8,0); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 320|0); __ZN6laszip11compressors7integerD2Ev($3); $4 = ((($2)) + 240|0); __ZN6laszip11compressors7integerD2Ev($4); $5 = ((($2)) + 160|0); __ZN6laszip11compressors7integerD2Ev($5); $6 = ((($2)) + 80|0); __ZN6laszip11compressors7integerD2Ev($6); __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $11 = $0; $13 = $11; $14 = ((($13)) + 896|0); $9 = $14; $10 = 0; $15 = $9; $16 = $10; $17 = (($15) + ($16<<2)|0); $18 = HEAP32[$17>>2]|0; $19 = ($18|0)==(0|0); if (!($19)) { __ZN6laszip6models10arithmeticD2Ev($18); __ZdlPv($18); } $20 = ((($13)) + 896|0); $7 = $20; $8 = 1; $21 = $7; $22 = $8; $23 = (($21) + ($22<<2)|0); $24 = HEAP32[$23>>2]|0; $25 = ($24|0)==(0|0); if (!($25)) { __ZN6laszip6models10arithmeticD2Ev($24); __ZdlPv($24); } $12 = 0; while(1) { $26 = $12; $27 = ($26|0)<(256); if (!($27)) { break; } $28 = ((($13)) + 904|0); $29 = $12; $5 = $28; $6 = $29; $30 = $5; $31 = $6; $32 = (($30) + ($31<<2)|0); $33 = HEAP32[$32>>2]|0; $34 = ($33|0)==(0|0); if (!($34)) { __ZN6laszip6models10arithmeticD2Ev($33); __ZdlPv($33); } $35 = ((($13)) + 1928|0); $36 = $12; $3 = $35; $4 = $36; $37 = $3; $38 = $4; $39 = (($37) + ($38<<2)|0); $40 = HEAP32[$39>>2]|0; $41 = ($40|0)==(0|0); if (!($41)) { __ZN6laszip6models10arithmeticD2Ev($40); __ZdlPv($40); } $42 = ((($13)) + 2952|0); $43 = $12; $1 = $42; $2 = $43; $44 = $1; $45 = $2; $46 = (($44) + ($45<<2)|0); $47 = HEAP32[$46>>2]|0; $48 = ($47|0)==(0|0); if (!($48)) { __ZN6laszip6models10arithmeticD2Ev($47); __ZdlPv($47); } $49 = $12; $50 = (($49) + 1)|0; $12 = $50; } $51 = ((($13)) + 852|0); __ZN6laszip6models10arithmeticD2Ev($51); STACKTOP = sp;return; } function __ZN6laszip7formats3las7point10C2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP8[$2>>0]=0&255;HEAP8[$2+1>>0]=(0>>8)&255;HEAP8[$2+2>>0]=(0>>16)&255;HEAP8[$2+3>>0]=0>>24; $3 = ((($2)) + 4|0); HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=(0>>8)&255;HEAP8[$3+2>>0]=(0>>16)&255;HEAP8[$3+3>>0]=0>>24; $4 = ((($2)) + 12|0); HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8; $5 = ((($2)) + 14|0); $6 = HEAP8[$5>>0]|0; $7 = $6 & -8; HEAP8[$5>>0] = $7; $8 = ((($2)) + 14|0); $9 = HEAP8[$8>>0]|0; $10 = $9 & -57; HEAP8[$8>>0] = $10; $11 = ((($2)) + 14|0); $12 = HEAP8[$11>>0]|0; $13 = $12 & -65; HEAP8[$11>>0] = $13; $14 = ((($2)) + 14|0); $15 = HEAP8[$14>>0]|0; $16 = $15 & 127; HEAP8[$14>>0] = $16; $17 = ((($2)) + 15|0); HEAP8[$17>>0] = 0; $18 = ((($2)) + 16|0); HEAP8[$18>>0] = 0; $19 = ((($2)) + 17|0); HEAP8[$19>>0] = 0; $20 = ((($2)) + 18|0); HEAP8[$20>>0]=0&255;HEAP8[$20+1>>0]=0>>8; STACKTOP = sp;return; } function __ZNSt3__25arrayIN6laszip5utils16streaming_medianIiEELj16EEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 384|0); $4 = $2; while(1) { __ZN6laszip5utils16streaming_medianIiEC2Ev($4); $5 = ((($4)) + 24|0); $6 = ($5|0)==($3|0); if ($6) { break; } else { $4 = $5; } } STACKTOP = sp;return; } function __ZN6laszip5utils16streaming_medianIiEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip5utils16streaming_medianIiE4initEv($2); STACKTOP = sp;return; } function __ZN6laszip5utils16streaming_medianIiE4initEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $11 = sp; $10 = $0; $12 = $10; HEAP32[$11>>2] = 0; $8 = $12; $9 = $11; $13 = $8; $14 = $9; $5 = $13; $6 = 5; $7 = $14; $15 = $5; $16 = $6; $4 = $16; $17 = $4; $18 = $7; $1 = $15; $2 = $17; $3 = $18; while(1) { $19 = $2; $20 = ($19>>>0)>(0); if (!($20)) { break; } $21 = $3; $22 = HEAP32[$21>>2]|0; $23 = $1; HEAP32[$23>>2] = $22; $24 = $1; $25 = ((($24)) + 4|0); $1 = $25; $26 = $2; $27 = (($26) + -1)|0; $2 = $27; } $28 = ((($12)) + 20|0); HEAP8[$28>>0] = 1; STACKTOP = sp;return; } function __ZN6laszip11compressors7integerC2Ejjjj($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0; var $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $15 = sp + 72|0; $27 = sp + 24|0; $29 = $0; $30 = $1; $31 = $2; $32 = $3; $33 = $4; $34 = $29; $35 = ((($34)) + 4|0); $36 = $30; HEAP32[$35>>2] = $36; $37 = ((($34)) + 8|0); $38 = $31; HEAP32[$37>>2] = $38; $39 = ((($34)) + 12|0); $40 = $32; HEAP32[$39>>2] = $40; $41 = ((($34)) + 16|0); $42 = $33; HEAP32[$41>>2] = $42; $43 = ((($34)) + 36|0); $28 = $43; $44 = $28; $26 = $44; $45 = $26; $25 = $45; HEAP32[$45>>2] = 0; $46 = ((($45)) + 4|0); HEAP32[$46>>2] = 0; $47 = ((($45)) + 8|0); HEAP32[$27>>2] = 0; $23 = $47; $24 = $27; $48 = $23; $49 = $24; $22 = $49; $50 = $22; $18 = $48; $19 = $50; $51 = $18; $52 = $19; $17 = $52; HEAP32[$51>>2] = 0; $21 = $48; $53 = $21; $20 = $53; $54 = ((($34)) + 48|0); __ZN6laszip6models14arithmetic_bitC2Ev($54); $55 = ((($34)) + 68|0); $16 = $55; $56 = $16; $14 = $56; $57 = $14; $13 = $57; HEAP32[$57>>2] = 0; $58 = ((($57)) + 4|0); HEAP32[$58>>2] = 0; $59 = ((($57)) + 8|0); HEAP32[$15>>2] = 0; $11 = $59; $12 = $15; $60 = $11; $61 = $12; $10 = $61; $62 = $10; $6 = $60; $7 = $62; $63 = $6; $64 = $7; $5 = $64; HEAP32[$63>>2] = 0; $9 = $60; $65 = $9; $8 = $65; $66 = $33; $67 = ($66|0)!=(0); if (!($67)) { $100 = $30; $101 = ($100|0)!=(0); $102 = $30; $103 = ($102>>>0)<(32); $or$cond = $101 & $103; if ($or$cond) { $104 = $30; $105 = ((($34)) + 20|0); HEAP32[$105>>2] = $104; $106 = $30; $107 = 1 << $106; $108 = ((($34)) + 24|0); HEAP32[$108>>2] = $107; $109 = ((($34)) + 24|0); $110 = HEAP32[$109>>2]|0; $111 = (($110>>>0) / 2)&-1; $112 = (0 - ($111))|0; $113 = ((($34)) + 28|0); HEAP32[$113>>2] = $112; $114 = ((($34)) + 28|0); $115 = HEAP32[$114>>2]|0; $116 = ((($34)) + 24|0); $117 = HEAP32[$116>>2]|0; $118 = (($115) + ($117))|0; $119 = (($118) - 1)|0; $120 = ((($34)) + 32|0); HEAP32[$120>>2] = $119; HEAP32[$34>>2] = 0; STACKTOP = sp;return; } else { $121 = ((($34)) + 20|0); HEAP32[$121>>2] = 32; $122 = ((($34)) + 24|0); HEAP32[$122>>2] = 0; $123 = ((($34)) + 28|0); HEAP32[$123>>2] = -2147483648; $124 = ((($34)) + 32|0); HEAP32[$124>>2] = 2147483647; HEAP32[$34>>2] = 0; STACKTOP = sp;return; } } $68 = ((($34)) + 20|0); HEAP32[$68>>2] = 0; $69 = $33; $70 = ((($34)) + 24|0); HEAP32[$70>>2] = $69; while(1) { $71 = $33; $72 = ($71|0)!=(0); if (!($72)) { break; } $73 = $33; $74 = $73 >>> 1; $33 = $74; $75 = ((($34)) + 20|0); $76 = HEAP32[$75>>2]|0; $77 = (($76) + 1)|0; HEAP32[$75>>2] = $77; } $78 = ((($34)) + 24|0); $79 = HEAP32[$78>>2]|0; $80 = ((($34)) + 20|0); $81 = HEAP32[$80>>2]|0; $82 = (($81) - 1)|0; $83 = 1 << $82; $84 = ($79|0)==($83|0); if ($84) { $85 = ((($34)) + 20|0); $86 = HEAP32[$85>>2]|0; $87 = (($86) + -1)|0; HEAP32[$85>>2] = $87; } $88 = ((($34)) + 24|0); $89 = HEAP32[$88>>2]|0; $90 = (($89>>>0) / 2)&-1; $91 = (0 - ($90))|0; $92 = ((($34)) + 28|0); HEAP32[$92>>2] = $91; $93 = ((($34)) + 28|0); $94 = HEAP32[$93>>2]|0; $95 = ((($34)) + 24|0); $96 = HEAP32[$95>>2]|0; $97 = (($94) + ($96))|0; $98 = (($97) - 1)|0; $99 = ((($34)) + 32|0); HEAP32[$99>>2] = $98; HEAP32[$34>>2] = 0; STACKTOP = sp;return; } function __ZN6laszip11compressors7integerD2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0; var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0; var $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0; var $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0; var $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0; var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0; var $225 = 0, $226 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0; var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0; var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0; var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0; var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 336|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(336|0); $27 = sp + 8|0; $30 = sp + 329|0; $68 = sp; $71 = sp + 328|0; $83 = $0; $84 = $83; $85 = ((($84)) + 36|0); $81 = $85; $86 = $81; $80 = $86; $87 = $80; $88 = ((($87)) + 4|0); $89 = HEAP32[$88>>2]|0; $90 = HEAP32[$87>>2]|0; $91 = $89; $92 = $90; $93 = (($91) - ($92))|0; $94 = (($93|0) / 44)&-1; $82 = $94; $79 = $86; $95 = $79; $96 = HEAP32[$95>>2]|0; $76 = $95; $77 = $96; $97 = $76; $98 = ((($97)) + 4|0); $99 = HEAP32[$98>>2]|0; $78 = $99; while(1) { $100 = $77; $101 = $78; $102 = ($100|0)!=($101|0); if (!($102)) { break; } $75 = $97; $103 = $75; $104 = ((($103)) + 8|0); $74 = $104; $105 = $74; $73 = $105; $106 = $73; $107 = $78; $108 = ((($107)) + -44|0); $78 = $108; $72 = $108; $109 = $72; $69 = $106; $70 = $109; $110 = $69; $111 = $70; ;HEAP8[$68>>0]=HEAP8[$71>>0]|0; $66 = $110; $67 = $111; $112 = $66; $113 = $67; $64 = $112; $65 = $113; $114 = $65; __ZN6laszip6models10arithmeticD2Ev($114); } $115 = $77; $116 = ((($97)) + 4|0); HEAP32[$116>>2] = $115; $117 = $82; $62 = $86; $63 = $117; $118 = $62; $61 = $118; $119 = $61; $120 = HEAP32[$119>>2]|0; $60 = $120; $121 = $60; $44 = $118; $122 = $44; $123 = HEAP32[$122>>2]|0; $43 = $123; $124 = $43; $49 = $118; $125 = $49; $48 = $125; $126 = $48; $47 = $126; $127 = $47; $128 = ((($127)) + 8|0); $46 = $128; $129 = $46; $45 = $129; $130 = $45; $131 = HEAP32[$130>>2]|0; $132 = HEAP32[$126>>2]|0; $133 = $131; $134 = $132; $135 = (($133) - ($134))|0; $136 = (($135|0) / 44)&-1; $137 = (($124) + (($136*44)|0)|0); $51 = $118; $138 = $51; $139 = HEAP32[$138>>2]|0; $50 = $139; $140 = $50; $141 = $63; $142 = (($140) + (($141*44)|0)|0); $53 = $118; $143 = $53; $144 = HEAP32[$143>>2]|0; $52 = $144; $145 = $52; $54 = $118; $146 = $54; $147 = ((($146)) + 4|0); $148 = HEAP32[$147>>2]|0; $149 = HEAP32[$146>>2]|0; $150 = $148; $151 = $149; $152 = (($150) - ($151))|0; $153 = (($152|0) / 44)&-1; $154 = (($145) + (($153*44)|0)|0); $55 = $118; $56 = $121; $57 = $137; $58 = $142; $59 = $154; $42 = $86; $155 = ((($84)) + 68|0); $40 = $155; $156 = $40; $39 = $156; $157 = $39; $158 = ((($157)) + 4|0); $159 = HEAP32[$158>>2]|0; $160 = HEAP32[$157>>2]|0; $161 = $159; $162 = $160; $163 = (($161) - ($162))|0; $164 = (($163|0) / 44)&-1; $41 = $164; $38 = $156; $165 = $38; $166 = HEAP32[$165>>2]|0; $35 = $165; $36 = $166; $167 = $35; $168 = ((($167)) + 4|0); $169 = HEAP32[$168>>2]|0; $37 = $169; while(1) { $170 = $36; $171 = $37; $172 = ($170|0)!=($171|0); if (!($172)) { break; } $34 = $167; $173 = $34; $174 = ((($173)) + 8|0); $33 = $174; $175 = $33; $32 = $175; $176 = $32; $177 = $37; $178 = ((($177)) + -44|0); $37 = $178; $31 = $178; $179 = $31; $28 = $176; $29 = $179; $180 = $28; $181 = $29; ;HEAP8[$27>>0]=HEAP8[$30>>0]|0; $25 = $180; $26 = $181; $182 = $25; $183 = $26; $23 = $182; $24 = $183; $184 = $24; __ZN6laszip6models10arithmeticD2Ev($184); } $185 = $36; $186 = ((($167)) + 4|0); HEAP32[$186>>2] = $185; $187 = $41; $21 = $156; $22 = $187; $188 = $21; $20 = $188; $189 = $20; $190 = HEAP32[$189>>2]|0; $19 = $190; $191 = $19; $3 = $188; $192 = $3; $193 = HEAP32[$192>>2]|0; $2 = $193; $194 = $2; $8 = $188; $195 = $8; $7 = $195; $196 = $7; $6 = $196; $197 = $6; $198 = ((($197)) + 8|0); $5 = $198; $199 = $5; $4 = $199; $200 = $4; $201 = HEAP32[$200>>2]|0; $202 = HEAP32[$196>>2]|0; $203 = $201; $204 = $202; $205 = (($203) - ($204))|0; $206 = (($205|0) / 44)&-1; $207 = (($194) + (($206*44)|0)|0); $10 = $188; $208 = $10; $209 = HEAP32[$208>>2]|0; $9 = $209; $210 = $9; $211 = $22; $212 = (($210) + (($211*44)|0)|0); $12 = $188; $213 = $12; $214 = HEAP32[$213>>2]|0; $11 = $214; $215 = $11; $13 = $188; $216 = $13; $217 = ((($216)) + 4|0); $218 = HEAP32[$217>>2]|0; $219 = HEAP32[$216>>2]|0; $220 = $218; $221 = $219; $222 = (($220) - ($221))|0; $223 = (($222|0) / 44)&-1; $224 = (($215) + (($223*44)|0)|0); $14 = $188; $15 = $191; $16 = $207; $17 = $212; $18 = $224; $1 = $156; $225 = ((($84)) + 68|0); __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($225); $226 = ((($84)) + 36|0); __ZNSt3__26vectorIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($226); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4380|0); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3); $4 = ((($2)) + 3980|0); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 320|0); __ZN6laszip13decompressors7integerD2Ev($3); $4 = ((($2)) + 240|0); __ZN6laszip13decompressors7integerD2Ev($4); $5 = ((($2)) + 160|0); __ZN6laszip13decompressors7integerD2Ev($5); $6 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerD2Ev($6); __ZN6laszip13decompressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0; var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0; var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0; var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0; var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0; var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0; var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0; var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0; var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0; var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0; var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, dest = 0, label = 0, sp = 0, src = 0, stop = 0; sp = STACKTOP; STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); $33 = sp + 160|0; $40 = sp + 8|0; $30 = $0; $31 = $1; $32 = $2; $44 = $30; $45 = ((($44)) + 4781|0); $46 = HEAP8[$45>>0]|0; $47 = $46&1; if (!($47)) { $48 = ((($44)) + 4380|0); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($48); $49 = ((($44)) + 4781|0); HEAP8[$49>>0] = 1; } $50 = ((($44)) + 3976|0); $51 = HEAP8[$50>>0]|0; $52 = $51&1; if (!($52)) { $53 = ((($44)) + 3976|0); HEAP8[$53>>0] = 1; $54 = $31; $55 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($54)|0); $56 = $32; __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($55,$56,20); $57 = $32; __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($33,$57); dest=$44; src=$33; stop=dest+20|0; do { HEAP8[dest>>0]=HEAP8[src>>0]|0; dest=dest+1|0; src=src+1|0; } while ((dest|0) < (stop|0)); $58 = $32; $59 = ((($58)) + 20|0); $29 = $59; $311 = $29; STACKTOP = sp;return ($311|0); } $60 = $31; $61 = ((($44)) + 852|0); $62 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($60,$61)|0); $41 = $62; $63 = $41; $64 = ($63|0)!=(0); if ($64) { $65 = $41; $66 = $65 & 32; $67 = ($66|0)!=(0); if ($67) { $68 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($44)|0); $42 = $68; $69 = $31; $70 = ((($44)) + 904|0); $71 = $42; $72 = $71&255; $27 = $70; $28 = $72; $73 = $27; $74 = $28; $75 = (($73) + ($74<<2)|0); $76 = HEAP32[$75>>2]|0; $77 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($69,$76)|0); $78 = $77&255; $42 = $78; $79 = $42; __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($79,$44); } $80 = ((($44)) + 14|0); $81 = HEAP8[$80>>0]|0; $82 = $81 & 7; $83 = $82&255; $34 = $83; $84 = ((($44)) + 14|0); $85 = HEAP8[$84>>0]|0; $86 = ($85&255) >>> 3; $87 = $86 & 7; $88 = $87&255; $35 = $88; $89 = $35; $90 = (6646 + ($89<<3)|0); $91 = $34; $92 = (($90) + ($91)|0); $93 = HEAP8[$92>>0]|0; $94 = $93&255; $36 = $94; $95 = $35; $96 = (6710 + ($95<<3)|0); $97 = $34; $98 = (($96) + ($97)|0); $99 = HEAP8[$98>>0]|0; $100 = $99&255; $37 = $100; $101 = $41; $102 = $101 & 16; $103 = ($102|0)!=(0); if ($103) { $104 = ((($44)) + 4380|0); $105 = $31; $106 = ((($44)) + 20|0); $107 = $36; $25 = $106; $26 = $107; $108 = $25; $109 = $26; $110 = (($108) + ($109<<1)|0); $111 = HEAP16[$110>>1]|0; $112 = $111&65535; $113 = $36; $114 = ($113>>>0)<(3); $115 = $36; $116 = $114 ? $115 : 3; $117 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($104,$105,$112,$116)|0); $118 = $117&65535; $119 = ((($44)) + 12|0); HEAP16[$119>>1] = $118; $120 = ((($44)) + 12|0); $121 = HEAP16[$120>>1]|0; $122 = ((($44)) + 20|0); $123 = $36; $21 = $122; $22 = $123; $124 = $21; $125 = $22; $126 = (($124) + ($125<<1)|0); HEAP16[$126>>1] = $121; } else { $127 = ((($44)) + 20|0); $128 = $36; $17 = $127; $18 = $128; $129 = $17; $130 = $18; $131 = (($129) + ($130<<1)|0); $132 = HEAP16[$131>>1]|0; $133 = ((($44)) + 12|0); HEAP16[$133>>1] = $132; } $134 = $41; $135 = $134 & 8; $136 = ($135|0)!=(0); if ($136) { $137 = $31; $138 = ((($44)) + 1928|0); $139 = ((($44)) + 15|0); $140 = HEAP8[$139>>0]|0; $141 = $140&255; $15 = $138; $16 = $141; $142 = $15; $143 = $16; $144 = (($142) + ($143<<2)|0); $145 = HEAP32[$144>>2]|0; $146 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($137,$145)|0); $147 = $146&255; $148 = ((($44)) + 15|0); HEAP8[$148>>0] = $147; } $149 = $41; $150 = $149 & 4; $151 = ($150|0)!=(0); if ($151) { $152 = $31; $153 = ((($44)) + 896|0); $154 = ((($44)) + 14|0); $155 = HEAP8[$154>>0]|0; $156 = ($155&255) >>> 6; $157 = $156 & 1; $158 = $157&255; $13 = $153; $14 = $158; $159 = $13; $160 = $14; $161 = (($159) + ($160<<2)|0); $162 = HEAP32[$161>>2]|0; $163 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($152,$162)|0); $43 = $163; $164 = $43; $165 = ((($44)) + 16|0); $166 = HEAP8[$165>>0]|0; $167 = $166 << 24 >> 24; $168 = (($164) + ($167))|0; $169 = (__Z7U8_FOLDi($168)|0); $170 = ((($44)) + 16|0); HEAP8[$170>>0] = $169; } $171 = $41; $172 = $171 & 2; $173 = ($172|0)!=(0); if ($173) { $174 = $31; $175 = ((($44)) + 2952|0); $176 = ((($44)) + 17|0); $177 = HEAP8[$176>>0]|0; $178 = $177&255; $9 = $175; $10 = $178; $179 = $9; $180 = $10; $181 = (($179) + ($180<<2)|0); $182 = HEAP32[$181>>2]|0; $183 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($174,$182)|0); $184 = $183&255; $185 = ((($44)) + 17|0); HEAP8[$185>>0] = $184; } $186 = $41; $187 = $186 & 1; $188 = ($187|0)!=(0); if ($188) { $189 = ((($44)) + 4380|0); $190 = ((($189)) + 80|0); $191 = $31; $192 = ((($44)) + 18|0); $193 = HEAP16[$192>>1]|0; $194 = $193&65535; $195 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($190,$191,$194,0)|0); $196 = $195&65535; $197 = ((($44)) + 18|0); HEAP16[$197>>1] = $196; } } else { $198 = ((($44)) + 14|0); $199 = HEAP8[$198>>0]|0; $200 = $199 & 7; $201 = $200&255; $34 = $201; $202 = ((($44)) + 14|0); $203 = HEAP8[$202>>0]|0; $204 = ($203&255) >>> 3; $205 = $204 & 7; $206 = $205&255; $35 = $206; $207 = $35; $208 = (6646 + ($207<<3)|0); $209 = $34; $210 = (($208) + ($209)|0); $211 = HEAP8[$210>>0]|0; $212 = $211&255; $36 = $212; $213 = $35; $214 = (6710 + ($213<<3)|0); $215 = $34; $216 = (($214) + ($215)|0); $217 = HEAP8[$216>>0]|0; $218 = $217&255; $37 = $218; } $219 = ((($44)) + 52|0); $220 = $36; $7 = $219; $8 = $220; $221 = $7; $222 = $8; $223 = (($221) + (($222*24)|0)|0); $224 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($223)|0); $39 = $224; $225 = ((($44)) + 4380|0); $226 = ((($225)) + 160|0); $227 = $31; $228 = $39; $229 = $35; $230 = ($229|0)==(1); $231 = $230&1; $232 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($226,$227,$228,$231)|0); HEAP32[$40>>2] = $232; $233 = HEAP32[$40>>2]|0; $234 = HEAP32[$44>>2]|0; $235 = (($234) + ($233))|0; HEAP32[$44>>2] = $235; $236 = ((($44)) + 52|0); $237 = $36; $5 = $236; $6 = $237; $238 = $5; $239 = $6; $240 = (($238) + (($239*24)|0)|0); __ZN6laszip5utils16streaming_medianIiE3addERKi($240,$40); $241 = ((($44)) + 436|0); $242 = $36; $3 = $241; $4 = $242; $243 = $3; $244 = $4; $245 = (($243) + (($244*24)|0)|0); $246 = (__ZNK6laszip5utils16streaming_medianIiE3getEv($245)|0); $39 = $246; $247 = ((($44)) + 4380|0); $248 = ((($247)) + 160|0); $249 = (__ZNK6laszip13decompressors7integer4getKEv($248)|0); $38 = $249; $250 = ((($44)) + 4380|0); $251 = ((($250)) + 240|0); $252 = $31; $253 = $39; $254 = $35; $255 = ($254|0)==(1); $256 = $255&1; $257 = $38; $258 = ($257>>>0)<(20); $259 = $38; $260 = $259 & -2; $261 = $258 ? $260 : 20; $262 = (($256) + ($261))|0; $263 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($251,$252,$253,$262)|0); HEAP32[$40>>2] = $263; $264 = HEAP32[$40>>2]|0; $265 = ((($44)) + 4|0); $266 = HEAP32[$265>>2]|0; $267 = (($266) + ($264))|0; HEAP32[$265>>2] = $267; $268 = ((($44)) + 436|0); $269 = $36; $11 = $268; $12 = $269; $270 = $11; $271 = $12; $272 = (($270) + (($271*24)|0)|0); __ZN6laszip5utils16streaming_medianIiE3addERKi($272,$40); $273 = ((($44)) + 4380|0); $274 = ((($273)) + 160|0); $275 = (__ZNK6laszip13decompressors7integer4getKEv($274)|0); $276 = ((($44)) + 4380|0); $277 = ((($276)) + 240|0); $278 = (__ZNK6laszip13decompressors7integer4getKEv($277)|0); $279 = (($275) + ($278))|0; $280 = (($279>>>0) / 2)&-1; $38 = $280; $281 = ((($44)) + 4380|0); $282 = ((($281)) + 320|0); $283 = $31; $284 = ((($44)) + 820|0); $285 = $37; $19 = $284; $20 = $285; $286 = $19; $287 = $20; $288 = (($286) + ($287<<2)|0); $289 = HEAP32[$288>>2]|0; $290 = $35; $291 = ($290|0)==(1); $292 = $291&1; $293 = $38; $294 = ($293>>>0)<(18); $295 = $38; $296 = $295 & -2; $297 = $294 ? $296 : 18; $298 = (($292) + ($297))|0; $299 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($282,$283,$289,$298)|0); $300 = ((($44)) + 8|0); HEAP32[$300>>2] = $299; $301 = ((($44)) + 8|0); $302 = HEAP32[$301>>2]|0; $303 = ((($44)) + 820|0); $304 = $37; $23 = $303; $24 = $304; $305 = $23; $306 = $24; $307 = (($305) + ($306<<2)|0); HEAP32[$307>>2] = $302; $308 = $32; __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($44,$308); $309 = $32; $310 = ((($309)) + 20|0); $29 = $310; $311 = $29; STACKTOP = sp;return ($311|0); } function __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13decompressors7integer4initEv($2); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integer4initEv($3); $4 = ((($2)) + 160|0); __ZN6laszip13decompressors7integer4initEv($4); $5 = ((($2)) + 240|0); __ZN6laszip13decompressors7integer4initEv($5); $6 = ((($2)) + 320|0); __ZN6laszip13decompressors7integer4initEv($6); STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP32[$2>>2]|0; STACKTOP = sp;return ($3|0); } function __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0; var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0; var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0; var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0; var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0; var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $26 = sp; $29 = sp + 124|0; $32 = sp + 12|0; $34 = sp + 4|0; $30 = $0; $31 = $1; HEAP32[$32>>2] = $2; $35 = $30; $36 = ((($35)) + 8|0); $37 = HEAP32[$36>>2]|0; $38 = ((($35)) + 4|0); $39 = HEAP32[$38>>2]|0; $40 = (($37) - ($39))|0; HEAP32[$34>>2] = $40; $27 = $34; $28 = $32; $41 = $27; $42 = $28; ;HEAP8[$26>>0]=HEAP8[$29>>0]|0; $24 = $41; $25 = $42; $43 = $25; $44 = $24; $21 = $26; $22 = $43; $23 = $44; $45 = $22; $46 = HEAP32[$45>>2]|0; $47 = $23; $48 = HEAP32[$47>>2]|0; $49 = ($46>>>0)<($48>>>0); $50 = $25; $51 = $24; $52 = $49 ? $50 : $51; $53 = HEAP32[$52>>2]|0; $33 = $53; $54 = ((($35)) + 12|0); $55 = HEAP32[$54>>2]|0; $56 = ((($35)) + 4|0); $57 = HEAP32[$56>>2]|0; $58 = (($55) + ($57)|0); $59 = ((($35)) + 12|0); $60 = HEAP32[$59>>2]|0; $61 = ((($35)) + 4|0); $62 = HEAP32[$61>>2]|0; $63 = (($60) + ($62)|0); $64 = $33; $65 = (($63) + ($64)|0); $66 = $31; $9 = $58; $10 = $65; $11 = $66; $67 = $9; $8 = $67; $68 = $8; $69 = $10; $3 = $69; $70 = $3; $71 = $11; $4 = $71; $72 = $4; $5 = $68; $6 = $70; $7 = $72; while(1) { $73 = $5; $74 = $6; $75 = ($73|0)!=($74|0); if (!($75)) { break; } $76 = $5; $77 = HEAP8[$76>>0]|0; $78 = $7; HEAP8[$78>>0] = $77; $79 = $5; $80 = ((($79)) + 1|0); $5 = $80; $81 = $7; $82 = ((($81)) + 1|0); $7 = $82; } $83 = $33; $84 = ((($35)) + 4|0); $85 = HEAP32[$84>>2]|0; $86 = (($85) + ($83))|0; HEAP32[$84>>2] = $86; $87 = $33; $88 = HEAP32[$32>>2]|0; $89 = (($88) - ($87))|0; HEAP32[$32>>2] = $89; $90 = HEAP32[$32>>2]|0; $91 = ($90|0)!=(0); if (!($91)) { STACKTOP = sp;return; } __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE7fillit_Ev($35); $92 = ((($35)) + 12|0); $93 = HEAP32[$92>>2]|0; $94 = ((($35)) + 4|0); $95 = HEAP32[$94>>2]|0; $96 = (($93) + ($95)|0); $97 = ((($35)) + 12|0); $98 = HEAP32[$97>>2]|0; $99 = ((($35)) + 4|0); $100 = HEAP32[$99>>2]|0; $101 = (($98) + ($100)|0); $102 = HEAP32[$32>>2]|0; $103 = (($101) + ($102)|0); $104 = $31; $105 = $33; $106 = (($104) + ($105)|0); $18 = $96; $19 = $103; $20 = $106; $107 = $18; $17 = $107; $108 = $17; $109 = $19; $12 = $109; $110 = $12; $111 = $20; $13 = $111; $112 = $13; $14 = $108; $15 = $110; $16 = $112; while(1) { $113 = $14; $114 = $15; $115 = ($113|0)!=($114|0); if (!($115)) { break; } $116 = $14; $117 = HEAP8[$116>>0]|0; $118 = $16; HEAP8[$118>>0] = $117; $119 = $14; $120 = ((($119)) + 1|0); $14 = $120; $121 = $16; $122 = ((($121)) + 1|0); $16 = $122; } $123 = HEAP32[$32>>2]|0; $124 = ((($35)) + 4|0); $125 = HEAP32[$124>>2]|0; $126 = (($125) + ($123))|0; HEAP32[$124>>2] = $126; STACKTOP = sp;return; } function __ZN6laszip7formats7packersINS0_3las7point10EE6unpackEPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $1; __ZN6laszip7formats3las7point10C2Ev($0); $4 = $2; $5 = (__ZN6laszip7formats7packersIiE6unpackEPKc($4)|0); HEAP8[$0>>0]=$5&255;HEAP8[$0+1>>0]=($5>>8)&255;HEAP8[$0+2>>0]=($5>>16)&255;HEAP8[$0+3>>0]=$5>>24; $6 = $2; $7 = ((($6)) + 4|0); $2 = $7; $8 = $2; $9 = (__ZN6laszip7formats7packersIiE6unpackEPKc($8)|0); $10 = ((($0)) + 4|0); HEAP8[$10>>0]=$9&255;HEAP8[$10+1>>0]=($9>>8)&255;HEAP8[$10+2>>0]=($9>>16)&255;HEAP8[$10+3>>0]=$9>>24; $11 = $2; $12 = ((($11)) + 4|0); $2 = $12; $13 = $2; $14 = (__ZN6laszip7formats7packersIiE6unpackEPKc($13)|0); $15 = ((($0)) + 8|0); HEAP8[$15>>0]=$14&255;HEAP8[$15+1>>0]=($14>>8)&255;HEAP8[$15+2>>0]=($14>>16)&255;HEAP8[$15+3>>0]=$14>>24; $16 = $2; $17 = ((($16)) + 4|0); $2 = $17; $18 = $2; $19 = (__ZN6laszip7formats7packersItE6unpackEPKc($18)|0); $20 = ((($0)) + 12|0); HEAP8[$20>>0]=$19&255;HEAP8[$20+1>>0]=$19>>8; $21 = $2; $22 = ((($21)) + 2|0); $2 = $22; $23 = $2; $24 = (__ZN6laszip7formats7packersIhE6unpackEPKc($23)|0); $3 = $24; $25 = $2; $26 = ((($25)) + 1|0); $2 = $26; $27 = $3; __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($27,$0); $28 = $2; $29 = (__ZN6laszip7formats7packersIhE6unpackEPKc($28)|0); $30 = ((($0)) + 15|0); HEAP8[$30>>0] = $29; $31 = $2; $32 = ((($31)) + 1|0); $2 = $32; $33 = $2; $34 = (__ZN6laszip7formats7packersIcE6unpackEPKc($33)|0); $35 = ((($0)) + 16|0); HEAP8[$35>>0] = $34; $36 = $2; $37 = ((($36)) + 1|0); $2 = $37; $38 = $2; $39 = (__ZN6laszip7formats7packersIcE6unpackEPKc($38)|0); $40 = ((($0)) + 17|0); HEAP8[$40>>0] = $39; $41 = $2; $42 = ((($41)) + 1|0); $2 = $42; $43 = $2; $44 = (__ZN6laszip7formats7packersItE6unpackEPKc($43)|0); $45 = ((($0)) + 18|0); HEAP8[$45>>0]=$44&255;HEAP8[$45+1>>0]=$44>>8; STACKTOP = sp;return; } function __ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $6 = $1; $7 = ((($6)) + 14|0); $8 = HEAP8[$7>>0]|0; $9 = $8 & 7; $2 = $9; $10 = $1; $11 = ((($10)) + 14|0); $12 = HEAP8[$11>>0]|0; $13 = ($12&255) >>> 3; $14 = $13 & 7; $3 = $14; $15 = $1; $16 = ((($15)) + 14|0); $17 = HEAP8[$16>>0]|0; $18 = ($17&255) >>> 6; $19 = $18 & 1; $4 = $19; $20 = $1; $21 = ((($20)) + 14|0); $22 = HEAP8[$21>>0]|0; $23 = ($22&255) >>> 7; $5 = $23; $24 = $5; $25 = $24&255; $26 = $25 & 1; $27 = $26 << 7; $28 = $4; $29 = $28&255; $30 = $29 & 1; $31 = $30 << 6; $32 = $27 | $31; $33 = $3; $34 = $33&255; $35 = $34 & 7; $36 = $35 << 3; $37 = $32 | $36; $38 = $2; $39 = $38&255; $40 = $39 & 7; $41 = $37 | $40; $42 = $41&255; STACKTOP = sp;return ($42|0); } function __ZN6laszip7formats6detail17char_to_bitfieldsEhRNS0_3las7point10E($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $4&255; $6 = $5 & 7; $7 = $6&255; $8 = $3; $9 = ((($8)) + 14|0); $10 = HEAP8[$9>>0]|0; $11 = $7 & 7; $12 = $10 & -8; $13 = $12 | $11; HEAP8[$9>>0] = $13; $14 = $2; $15 = $14&255; $16 = $15 >> 3; $17 = $16 & 7; $18 = $17&255; $19 = $3; $20 = ((($19)) + 14|0); $21 = HEAP8[$20>>0]|0; $22 = $18 & 7; $23 = ($22 << 3)&255; $24 = $21 & -57; $25 = $24 | $23; HEAP8[$20>>0] = $25; $26 = $2; $27 = $26&255; $28 = $27 >> 6; $29 = $28 & 1; $30 = $29&255; $31 = $3; $32 = ((($31)) + 14|0); $33 = HEAP8[$32>>0]|0; $34 = $30 & 1; $35 = ($34 << 6)&255; $36 = $33 & -65; $37 = $36 | $35; HEAP8[$32>>0] = $37; $38 = $2; $39 = $38&255; $40 = $39 >> 7; $41 = $40 & 1; $42 = $41&255; $43 = $3; $44 = ((($43)) + 14|0); $45 = HEAP8[$44>>0]|0; $46 = $42 & 1; $47 = ($46 << 7)&255; $48 = $45 & 127; $49 = $48 | $47; HEAP8[$44>>0] = $49; STACKTOP = sp;return; } function __Z7U8_FOLDi($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = $2&255; STACKTOP = sp;return ($3|0); } function __ZNK6laszip5utils16streaming_medianIiE3getEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $3; $1 = $4; $2 = 2; $5 = $1; $6 = $2; $7 = (($5) + ($6<<2)|0); $8 = HEAP32[$7>>2]|0; STACKTOP = sp;return ($8|0); } function __ZN6laszip5utils16streaming_medianIiE3addERKi($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0; var $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0; var $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0; var $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0; var $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0; var $280 = 0, $281 = 0, $282 = 0, $283 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0; var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0; var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; var $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 352|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(352|0); $86 = $0; $87 = $1; $88 = $86; $89 = ((($88)) + 20|0); $90 = HEAP8[$89>>0]|0; $91 = $90&1; if ($91) { $92 = $87; $93 = HEAP32[$92>>2]|0; $84 = $88; $85 = 2; $94 = $84; $95 = $85; $96 = (($94) + ($95<<2)|0); $97 = HEAP32[$96>>2]|0; $98 = ($93|0)<($97|0); if (!($98)) { $163 = $87; $164 = HEAP32[$163>>2]|0; $32 = $88; $33 = 3; $165 = $32; $166 = $33; $167 = (($165) + ($166<<2)|0); $168 = HEAP32[$167>>2]|0; $169 = ($164|0)<($168|0); if ($169) { $34 = $88; $35 = 3; $170 = $34; $171 = $35; $172 = (($170) + ($171<<2)|0); $173 = HEAP32[$172>>2]|0; $36 = $88; $37 = 4; $174 = $36; $175 = $37; $176 = (($174) + ($175<<2)|0); HEAP32[$176>>2] = $173; $177 = $87; $178 = HEAP32[$177>>2]|0; $38 = $88; $39 = 3; $179 = $38; $180 = $39; $181 = (($179) + ($180<<2)|0); HEAP32[$181>>2] = $178; } else { $182 = $87; $183 = HEAP32[$182>>2]|0; $40 = $88; $41 = 4; $184 = $40; $185 = $41; $186 = (($184) + ($185<<2)|0); HEAP32[$186>>2] = $183; } $187 = ((($88)) + 20|0); HEAP8[$187>>0] = 0; STACKTOP = sp;return; } $2 = $88; $3 = 3; $99 = $2; $100 = $3; $101 = (($99) + ($100<<2)|0); $102 = HEAP32[$101>>2]|0; $4 = $88; $5 = 4; $103 = $4; $104 = $5; $105 = (($103) + ($104<<2)|0); HEAP32[$105>>2] = $102; $6 = $88; $7 = 2; $106 = $6; $107 = $7; $108 = (($106) + ($107<<2)|0); $109 = HEAP32[$108>>2]|0; $8 = $88; $9 = 3; $110 = $8; $111 = $9; $112 = (($110) + ($111<<2)|0); HEAP32[$112>>2] = $109; $113 = $87; $114 = HEAP32[$113>>2]|0; $10 = $88; $11 = 0; $115 = $10; $116 = $11; $117 = (($115) + ($116<<2)|0); $118 = HEAP32[$117>>2]|0; $119 = ($114|0)<($118|0); if ($119) { $12 = $88; $13 = 1; $120 = $12; $121 = $13; $122 = (($120) + ($121<<2)|0); $123 = HEAP32[$122>>2]|0; $14 = $88; $15 = 2; $124 = $14; $125 = $15; $126 = (($124) + ($125<<2)|0); HEAP32[$126>>2] = $123; $16 = $88; $17 = 0; $127 = $16; $128 = $17; $129 = (($127) + ($128<<2)|0); $130 = HEAP32[$129>>2]|0; $18 = $88; $19 = 1; $131 = $18; $132 = $19; $133 = (($131) + ($132<<2)|0); HEAP32[$133>>2] = $130; $134 = $87; $135 = HEAP32[$134>>2]|0; $20 = $88; $21 = 0; $136 = $20; $137 = $21; $138 = (($136) + ($137<<2)|0); HEAP32[$138>>2] = $135; STACKTOP = sp;return; } $139 = $87; $140 = HEAP32[$139>>2]|0; $22 = $88; $23 = 1; $141 = $22; $142 = $23; $143 = (($141) + ($142<<2)|0); $144 = HEAP32[$143>>2]|0; $145 = ($140|0)<($144|0); if ($145) { $24 = $88; $25 = 1; $146 = $24; $147 = $25; $148 = (($146) + ($147<<2)|0); $149 = HEAP32[$148>>2]|0; $26 = $88; $27 = 2; $150 = $26; $151 = $27; $152 = (($150) + ($151<<2)|0); HEAP32[$152>>2] = $149; $153 = $87; $154 = HEAP32[$153>>2]|0; $28 = $88; $29 = 1; $155 = $28; $156 = $29; $157 = (($155) + ($156<<2)|0); HEAP32[$157>>2] = $154; STACKTOP = sp;return; } else { $158 = $87; $159 = HEAP32[$158>>2]|0; $30 = $88; $31 = 2; $160 = $30; $161 = $31; $162 = (($160) + ($161<<2)|0); HEAP32[$162>>2] = $159; STACKTOP = sp;return; } } else { $42 = $88; $43 = 2; $188 = $42; $189 = $43; $190 = (($188) + ($189<<2)|0); $191 = HEAP32[$190>>2]|0; $192 = $87; $193 = HEAP32[$192>>2]|0; $194 = ($191|0)<($193|0); if (!($194)) { $74 = $88; $75 = 1; $259 = $74; $260 = $75; $261 = (($259) + ($260<<2)|0); $262 = HEAP32[$261>>2]|0; $263 = $87; $264 = HEAP32[$263>>2]|0; $265 = ($262|0)<($264|0); if ($265) { $76 = $88; $77 = 1; $266 = $76; $267 = $77; $268 = (($266) + ($267<<2)|0); $269 = HEAP32[$268>>2]|0; $78 = $88; $79 = 0; $270 = $78; $271 = $79; $272 = (($270) + ($271<<2)|0); HEAP32[$272>>2] = $269; $273 = $87; $274 = HEAP32[$273>>2]|0; $80 = $88; $81 = 1; $275 = $80; $276 = $81; $277 = (($275) + ($276<<2)|0); HEAP32[$277>>2] = $274; } else { $278 = $87; $279 = HEAP32[$278>>2]|0; $82 = $88; $83 = 0; $280 = $82; $281 = $83; $282 = (($280) + ($281<<2)|0); HEAP32[$282>>2] = $279; } $283 = ((($88)) + 20|0); HEAP8[$283>>0] = 1; STACKTOP = sp;return; } $44 = $88; $45 = 1; $195 = $44; $196 = $45; $197 = (($195) + ($196<<2)|0); $198 = HEAP32[$197>>2]|0; $46 = $88; $47 = 0; $199 = $46; $200 = $47; $201 = (($199) + ($200<<2)|0); HEAP32[$201>>2] = $198; $48 = $88; $49 = 2; $202 = $48; $203 = $49; $204 = (($202) + ($203<<2)|0); $205 = HEAP32[$204>>2]|0; $50 = $88; $51 = 1; $206 = $50; $207 = $51; $208 = (($206) + ($207<<2)|0); HEAP32[$208>>2] = $205; $52 = $88; $53 = 4; $209 = $52; $210 = $53; $211 = (($209) + ($210<<2)|0); $212 = HEAP32[$211>>2]|0; $213 = $87; $214 = HEAP32[$213>>2]|0; $215 = ($212|0)<($214|0); if ($215) { $54 = $88; $55 = 3; $216 = $54; $217 = $55; $218 = (($216) + ($217<<2)|0); $219 = HEAP32[$218>>2]|0; $56 = $88; $57 = 2; $220 = $56; $221 = $57; $222 = (($220) + ($221<<2)|0); HEAP32[$222>>2] = $219; $58 = $88; $59 = 4; $223 = $58; $224 = $59; $225 = (($223) + ($224<<2)|0); $226 = HEAP32[$225>>2]|0; $60 = $88; $61 = 3; $227 = $60; $228 = $61; $229 = (($227) + ($228<<2)|0); HEAP32[$229>>2] = $226; $230 = $87; $231 = HEAP32[$230>>2]|0; $62 = $88; $63 = 4; $232 = $62; $233 = $63; $234 = (($232) + ($233<<2)|0); HEAP32[$234>>2] = $231; STACKTOP = sp;return; } $64 = $88; $65 = 3; $235 = $64; $236 = $65; $237 = (($235) + ($236<<2)|0); $238 = HEAP32[$237>>2]|0; $239 = $87; $240 = HEAP32[$239>>2]|0; $241 = ($238|0)<($240|0); if ($241) { $66 = $88; $67 = 3; $242 = $66; $243 = $67; $244 = (($242) + ($243<<2)|0); $245 = HEAP32[$244>>2]|0; $68 = $88; $69 = 2; $246 = $68; $247 = $69; $248 = (($246) + ($247<<2)|0); HEAP32[$248>>2] = $245; $249 = $87; $250 = HEAP32[$249>>2]|0; $70 = $88; $71 = 3; $251 = $70; $252 = $71; $253 = (($251) + ($252<<2)|0); HEAP32[$253>>2] = $250; STACKTOP = sp;return; } else { $254 = $87; $255 = HEAP32[$254>>2]|0; $72 = $88; $73 = 2; $256 = $72; $257 = $73; $258 = (($256) + ($257<<2)|0); HEAP32[$258>>2] = $255; STACKTOP = sp;return; } } } function __ZNK6laszip13decompressors7integer4getKEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP32[$2>>2]|0; STACKTOP = sp;return ($3|0); } function __ZN6laszip7formats7packersINS0_3las7point10EE4packERKS3_Pc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $5 = $2; $6 = HEAPU8[$5>>0]|(HEAPU8[$5+1>>0]<<8)|(HEAPU8[$5+2>>0]<<16)|(HEAPU8[$5+3>>0]<<24); $7 = $3; __ZN6laszip7formats7packersIiE4packEiPc($6,$7); $8 = $3; $9 = ((($8)) + 4|0); $3 = $9; $10 = $2; $11 = ((($10)) + 4|0); $12 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8)|(HEAPU8[$11+2>>0]<<16)|(HEAPU8[$11+3>>0]<<24); $13 = $3; __ZN6laszip7formats7packersIiE4packEiPc($12,$13); $14 = $3; $15 = ((($14)) + 4|0); $3 = $15; $16 = $2; $17 = ((($16)) + 8|0); $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24); $19 = $3; __ZN6laszip7formats7packersIiE4packEiPc($18,$19); $20 = $3; $21 = ((($20)) + 4|0); $3 = $21; $22 = $2; $23 = ((($22)) + 12|0); $24 = HEAPU8[$23>>0]|(HEAPU8[$23+1>>0]<<8); $25 = $3; __ZN6laszip7formats7packersItE4packEtPc($24,$25); $26 = $3; $27 = ((($26)) + 2|0); $3 = $27; $28 = $2; $29 = (__ZN6laszip7formats6detail17bitfields_to_charERKNS0_3las7point10E($28)|0); $4 = $29; $30 = $4; $31 = $3; __ZN6laszip7formats7packersIhE4packEhPc($30,$31); $32 = $3; $33 = ((($32)) + 1|0); $3 = $33; $34 = $2; $35 = ((($34)) + 15|0); $36 = HEAP8[$35>>0]|0; $37 = $3; __ZN6laszip7formats7packersIhE4packEhPc($36,$37); $38 = $3; $39 = ((($38)) + 1|0); $3 = $39; $40 = $2; $41 = ((($40)) + 16|0); $42 = HEAP8[$41>>0]|0; $43 = $3; __ZN6laszip7formats7packersIcE4packEcPc($42,$43); $44 = $3; $45 = ((($44)) + 1|0); $3 = $45; $46 = $2; $47 = ((($46)) + 17|0); $48 = HEAP8[$47>>0]|0; $49 = $3; __ZN6laszip7formats7packersIcE4packEcPc($48,$49); $50 = $3; $51 = ((($50)) + 1|0); $3 = $51; $52 = $2; $53 = ((($52)) + 18|0); $54 = HEAPU8[$53>>0]|(HEAPU8[$53+1>>0]<<8); $55 = $3; __ZN6laszip7formats7packersItE4packEtPc($54,$55); STACKTOP = sp;return; } function __ZN6laszip7formats7packersIiE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = (__ZN6laszip7formats7packersIjE6unpackEPKc($2)|0); STACKTOP = sp;return ($3|0); } function __ZN6laszip7formats7packersItE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0; var sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $4 = $1; $5 = HEAP8[$4>>0]|0; $6 = $5 << 24 >> 24; $2 = $6; $7 = $1; $8 = ((($7)) + 1|0); $9 = HEAP8[$8>>0]|0; $10 = $9 << 24 >> 24; $3 = $10; $11 = $3; $12 = $11&65535; $13 = $12 & 255; $14 = $13 << 8; $15 = $2; $16 = $15&65535; $17 = $16 & 255; $18 = $14 | $17; $19 = $18&65535; STACKTOP = sp;return ($19|0); } function __ZN6laszip7formats7packersIhE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP8[$2>>0]|0; STACKTOP = sp;return ($3|0); } function __ZN6laszip7formats7packersIcE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP8[$2>>0]|0; STACKTOP = sp;return ($3|0); } function __ZN6laszip7formats7packersIjE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $1 = $0; $6 = $1; $7 = HEAP8[$6>>0]|0; $8 = $7 << 24 >> 24; $2 = $8; $9 = $1; $10 = ((($9)) + 1|0); $11 = HEAP8[$10>>0]|0; $12 = $11 << 24 >> 24; $3 = $12; $13 = $1; $14 = ((($13)) + 2|0); $15 = HEAP8[$14>>0]|0; $16 = $15 << 24 >> 24; $4 = $16; $17 = $1; $18 = ((($17)) + 3|0); $19 = HEAP8[$18>>0]|0; $20 = $19 << 24 >> 24; $5 = $20; $21 = $5; $22 = $21 << 24; $23 = $4; $24 = $23 & 255; $25 = $24 << 16; $26 = $22 | $25; $27 = $3; $28 = $27 & 255; $29 = $28 << 8; $30 = $26 | $29; $31 = $2; $32 = $31 & 255; $33 = $30 | $32; STACKTOP = sp;return ($33|0); } function __ZN6laszip7formats7packersIiE4packEiPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; __ZN6laszip7formats7packersIjE4packEjPc($4,$5); STACKTOP = sp;return; } function __ZN6laszip7formats7packersItE4packEtPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $4&65535; $6 = $5 >> 8; $7 = $6 & 255; $8 = $7&255; $9 = $3; $10 = ((($9)) + 1|0); HEAP8[$10>>0] = $8; $11 = $2; $12 = $11&65535; $13 = $12 & 255; $14 = $13&255; $15 = $3; HEAP8[$15>>0] = $14; STACKTOP = sp;return; } function __ZN6laszip7formats7packersIhE4packEhPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; HEAP8[$5>>0] = $4; STACKTOP = sp;return; } function __ZN6laszip7formats7packersIcE4packEcPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; HEAP8[$5>>0] = $4; STACKTOP = sp;return; } function __ZN6laszip7formats7packersIjE4packEjPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $4 >>> 24; $6 = $5 & 255; $7 = $6&255; $8 = $3; $9 = ((($8)) + 3|0); HEAP8[$9>>0] = $7; $10 = $2; $11 = $10 >>> 16; $12 = $11 & 255; $13 = $12&255; $14 = $3; $15 = ((($14)) + 2|0); HEAP8[$15>>0] = $13; $16 = $2; $17 = $16 >>> 8; $18 = $17 & 255; $19 = $18&255; $20 = $3; $21 = ((($20)) + 1|0); HEAP8[$21>>0] = $19; $22 = $2; $23 = $22 & 255; $24 = $23&255; $25 = $3; HEAP8[$25>>0] = $24; STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 360; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2100); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2124); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($2); $3 = ((($2)) + 164|0); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($3); $4 = ((($2)) + 244|0); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($4); $5 = ((($2)) + 324|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 325|0); HEAP8[$6>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2100); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonC2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $29 = sp + 120|0; $30 = sp + 4|0; $31 = sp; $28 = $0; $32 = $28; HEAP8[$32>>0] = 0; $33 = ((($32)) + 4|0); __ZN6laszip6models10arithmeticC2EjbPj($33,516,0,0); $34 = ((($32)) + 48|0); __ZN6laszip6models10arithmeticC2EjbPj($34,6,0,0); $35 = ((($32)) + 92|0); HEAP32[$35>>2] = 0; $36 = ((($32)) + 96|0); HEAP32[$36>>2] = 0; $37 = ((($32)) + 100|0); __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($37); $38 = ((($32)) + 100|0); __ZN6laszip7formats3las7gpstimeC2Ev($29); $26 = $38; $27 = $29; $39 = $26; $40 = $27; $23 = $39; $24 = 4; $25 = $40; $41 = $23; $42 = $24; $22 = $42; $43 = $22; $44 = $25; $19 = $41; $20 = $43; $21 = $44; while(1) { $45 = $20; $46 = ($45>>>0)>(0); if (!($46)) { break; } $47 = $21; $48 = $19; ;HEAP8[$48>>0]=HEAP8[$47>>0]|0;HEAP8[$48+1>>0]=HEAP8[$47+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$47+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$47+3>>0]|0;HEAP8[$48+4>>0]=HEAP8[$47+4>>0]|0;HEAP8[$48+5>>0]=HEAP8[$47+5>>0]|0;HEAP8[$48+6>>0]=HEAP8[$47+6>>0]|0;HEAP8[$48+7>>0]=HEAP8[$47+7>>0]|0; $49 = $19; $50 = ((($49)) + 8|0); $19 = $50; $51 = $20; $52 = (($51) + -1)|0; $20 = $52; } $53 = ((($32)) + 132|0); HEAP32[$30>>2] = 0; $17 = $53; $18 = $30; $54 = $17; $55 = $18; $14 = $54; $15 = 4; $16 = $55; $56 = $14; $57 = $15; $13 = $57; $58 = $13; $59 = $16; $10 = $56; $11 = $58; $12 = $59; while(1) { $60 = $11; $61 = ($60>>>0)>(0); if (!($61)) { break; } $62 = $12; $63 = HEAP32[$62>>2]|0; $64 = $10; HEAP32[$64>>2] = $63; $65 = $10; $66 = ((($65)) + 4|0); $10 = $66; $67 = $11; $68 = (($67) + -1)|0; $11 = $68; } $69 = ((($32)) + 148|0); HEAP32[$31>>2] = 0; $8 = $69; $9 = $31; $70 = $8; $71 = $9; $5 = $70; $6 = 4; $7 = $71; $72 = $5; $73 = $6; $4 = $73; $74 = $4; $75 = $7; $1 = $72; $2 = $74; $3 = $75; while(1) { $76 = $2; $77 = ($76>>>0)>(0); if (!($77)) { break; } $78 = $3; $79 = HEAP32[$78>>2]|0; $80 = $1; HEAP32[$80>>2] = $79; $81 = $1; $82 = ((($81)) + 4|0); $1 = $82; $83 = $2; $84 = (($83) + -1)|0; $2 = $84; } STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,32,9,8,0); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13decompressors7integerC2Ejjjj($2,32,9,8,0); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 48|0); __ZN6laszip6models10arithmeticD2Ev($3); $4 = ((($2)) + 4|0); __ZN6laszip6models10arithmeticD2Ev($4); STACKTOP = sp;return; } function __ZNSt3__25arrayIN6laszip7formats3las7gpstimeELj4EEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 32|0); $4 = $2; while(1) { __ZN6laszip7formats3las7gpstimeC2Ev($4); $5 = ((($4)) + 8|0); $6 = ($5|0)==($3|0); if ($6) { break; } else { $4 = $5; } } STACKTOP = sp;return; } function __ZN6laszip7formats3las7gpstimeC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = $2; $4 = $3; HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=(0>>8)&255;HEAP8[$4+2>>0]=(0>>16)&255;HEAP8[$4+3>>0]=0>>24; $5 = (($3) + 4)|0; $6 = $5; HEAP8[$6>>0]=0&255;HEAP8[$6+1>>0]=(0>>8)&255;HEAP8[$6+2>>0]=(0>>16)&255;HEAP8[$6+3>>0]=0>>24; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 244|0); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($3); $4 = ((($2)) + 164|0); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE13__compressorsD2Ev($4); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE8__commonD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressorsD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13decompressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0; var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0; var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0; var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0; var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0; var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0; var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0; var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0; var $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0; var $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0; var $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0; var $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0; var $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0; var $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0; var $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0; var $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0; var $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0; var $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0; var $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0; var $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0; var $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0; var $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0; var $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0; var sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 368|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(368|0); $91 = sp + 360|0; $88 = $0; $89 = $1; $90 = $2; $94 = $88; $95 = ((($94)) + 325|0); $96 = HEAP8[$95>>0]|0; $97 = $96&1; if (!($97)) { $98 = ((($94)) + 244|0); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($98); $99 = ((($94)) + 325|0); HEAP8[$99>>0] = 1; } $100 = HEAP8[$94>>0]|0; $101 = $100&1; if (!($101)) { HEAP8[$94>>0] = 1; $102 = $89; $103 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($102)|0); $104 = $90; __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($103,$104,8); $105 = $90; $106 = (__ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($105)|0); $107 = tempRet0; $108 = $91; $109 = $108; HEAP8[$109>>0]=$106&255;HEAP8[$109+1>>0]=($106>>8)&255;HEAP8[$109+2>>0]=($106>>16)&255;HEAP8[$109+3>>0]=$106>>24; $110 = (($108) + 4)|0; $111 = $110; HEAP8[$111>>0]=$107&255;HEAP8[$111+1>>0]=($107>>8)&255;HEAP8[$111+2>>0]=($107>>16)&255;HEAP8[$111+3>>0]=$107>>24; $112 = ((($94)) + 100|0); $85 = $112; $86 = 0; $113 = $85; $114 = $86; $115 = (($113) + ($114<<3)|0); ;HEAP8[$115>>0]=HEAP8[$91>>0]|0;HEAP8[$115+1>>0]=HEAP8[$91+1>>0]|0;HEAP8[$115+2>>0]=HEAP8[$91+2>>0]|0;HEAP8[$115+3>>0]=HEAP8[$91+3>>0]|0;HEAP8[$115+4>>0]=HEAP8[$91+4>>0]|0;HEAP8[$115+5>>0]=HEAP8[$91+5>>0]|0;HEAP8[$115+6>>0]=HEAP8[$91+6>>0]|0;HEAP8[$115+7>>0]=HEAP8[$91+7>>0]|0; $116 = $90; $117 = ((($116)) + 8|0); $87 = $117; $601 = $87; STACKTOP = sp;return ($601|0); } $118 = ((($94)) + 132|0); $119 = ((($94)) + 92|0); $120 = HEAP32[$119>>2]|0; $83 = $118; $84 = $120; $121 = $83; $122 = $84; $123 = (($121) + ($122<<2)|0); $124 = HEAP32[$123>>2]|0; $125 = ($124|0)==(0); $126 = $89; do { if ($125) { $127 = ((($94)) + 48|0); $128 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$127)|0); $92 = $128; $129 = $92; $130 = ($129|0)==(1); if ($130) { $131 = ((($94)) + 244|0); $132 = $89; $133 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($131,$132,0,0)|0); $134 = ((($94)) + 132|0); $135 = ((($94)) + 92|0); $136 = HEAP32[$135>>2]|0; $81 = $134; $82 = $136; $137 = $81; $138 = $82; $139 = (($137) + ($138<<2)|0); HEAP32[$139>>2] = $133; $140 = ((($94)) + 132|0); $141 = ((($94)) + 92|0); $142 = HEAP32[$141>>2]|0; $71 = $140; $72 = $142; $143 = $71; $144 = $72; $145 = (($143) + ($144<<2)|0); $146 = HEAP32[$145>>2]|0; $147 = ($146|0)<(0); $148 = $147 << 31 >> 31; $149 = ((($94)) + 100|0); $150 = ((($94)) + 92|0); $151 = HEAP32[$150>>2]|0; $63 = $149; $64 = $151; $152 = $63; $153 = $64; $154 = (($152) + ($153<<3)|0); $155 = $154; $156 = $155; $157 = HEAPU8[$156>>0]|(HEAPU8[$156+1>>0]<<8)|(HEAPU8[$156+2>>0]<<16)|(HEAPU8[$156+3>>0]<<24); $158 = (($155) + 4)|0; $159 = $158; $160 = HEAPU8[$159>>0]|(HEAPU8[$159+1>>0]<<8)|(HEAPU8[$159+2>>0]<<16)|(HEAPU8[$159+3>>0]<<24); $161 = (_i64Add(($157|0),($160|0),($146|0),($148|0))|0); $162 = tempRet0; $163 = $154; $164 = $163; HEAP8[$164>>0]=$161&255;HEAP8[$164+1>>0]=($161>>8)&255;HEAP8[$164+2>>0]=($161>>16)&255;HEAP8[$164+3>>0]=$161>>24; $165 = (($163) + 4)|0; $166 = $165; HEAP8[$166>>0]=$162&255;HEAP8[$166+1>>0]=($162>>8)&255;HEAP8[$166+2>>0]=($162>>16)&255;HEAP8[$166+3>>0]=$162>>24; $167 = ((($94)) + 148|0); $168 = ((($94)) + 92|0); $169 = HEAP32[$168>>2]|0; $49 = $167; $50 = $169; $170 = $49; $171 = $50; $172 = (($170) + ($171<<2)|0); HEAP32[$172>>2] = 0; break; } $173 = $92; $174 = ($173|0)==(2); if ($174) { $175 = ((($94)) + 96|0); $176 = HEAP32[$175>>2]|0; $177 = (($176) + 1)|0; $178 = $177 & 3; $179 = ((($94)) + 96|0); HEAP32[$179>>2] = $178; $180 = ((($94)) + 244|0); $181 = $89; $182 = ((($94)) + 100|0); $183 = ((($94)) + 92|0); $184 = HEAP32[$183>>2]|0; $45 = $182; $46 = $184; $185 = $45; $186 = $46; $187 = (($185) + ($186<<3)|0); $188 = $187; $189 = $188; $190 = HEAPU8[$189>>0]|(HEAPU8[$189+1>>0]<<8)|(HEAPU8[$189+2>>0]<<16)|(HEAPU8[$189+3>>0]<<24); $191 = (($188) + 4)|0; $192 = $191; $193 = HEAPU8[$192>>0]|(HEAPU8[$192+1>>0]<<8)|(HEAPU8[$192+2>>0]<<16)|(HEAPU8[$192+3>>0]<<24); $194 = (_bitshift64Ashr(($190|0),($193|0),32)|0); $195 = tempRet0; $196 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($180,$181,$194,8)|0); $197 = ($196|0)<(0); $198 = $197 << 31 >> 31; $199 = ((($94)) + 100|0); $200 = ((($94)) + 96|0); $201 = HEAP32[$200>>2]|0; $33 = $199; $34 = $201; $202 = $33; $203 = $34; $204 = (($202) + ($203<<3)|0); $205 = $204; $206 = $205; HEAP8[$206>>0]=$196&255;HEAP8[$206+1>>0]=($196>>8)&255;HEAP8[$206+2>>0]=($196>>16)&255;HEAP8[$206+3>>0]=$196>>24; $207 = (($205) + 4)|0; $208 = $207; HEAP8[$208>>0]=$198&255;HEAP8[$208+1>>0]=($198>>8)&255;HEAP8[$208+2>>0]=($198>>16)&255;HEAP8[$208+3>>0]=$198>>24; $209 = ((($94)) + 100|0); $210 = ((($94)) + 96|0); $211 = HEAP32[$210>>2]|0; $29 = $209; $30 = $211; $212 = $29; $213 = $30; $214 = (($212) + ($213<<3)|0); $215 = $214; $216 = $215; $217 = HEAPU8[$216>>0]|(HEAPU8[$216+1>>0]<<8)|(HEAPU8[$216+2>>0]<<16)|(HEAPU8[$216+3>>0]<<24); $218 = (($215) + 4)|0; $219 = $218; $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8)|(HEAPU8[$219+2>>0]<<16)|(HEAPU8[$219+3>>0]<<24); $221 = ((($94)) + 100|0); $222 = ((($94)) + 96|0); $223 = HEAP32[$222>>2]|0; $25 = $221; $26 = $223; $224 = $25; $225 = $26; $226 = (($224) + ($225<<3)|0); $227 = $226; $228 = $227; HEAP8[$228>>0]=0&255;HEAP8[$228+1>>0]=(0>>8)&255;HEAP8[$228+2>>0]=(0>>16)&255;HEAP8[$228+3>>0]=0>>24; $229 = (($227) + 4)|0; $230 = $229; HEAP8[$230>>0]=$217&255;HEAP8[$230+1>>0]=($217>>8)&255;HEAP8[$230+2>>0]=($217>>16)&255;HEAP8[$230+3>>0]=$217>>24; $231 = $89; $232 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($231)|0); $233 = ((($94)) + 100|0); $234 = ((($94)) + 96|0); $235 = HEAP32[$234>>2]|0; $13 = $233; $14 = $235; $236 = $13; $237 = $14; $238 = (($236) + ($237<<3)|0); $239 = $238; $240 = $239; $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8)|(HEAPU8[$240+2>>0]<<16)|(HEAPU8[$240+3>>0]<<24); $242 = (($239) + 4)|0; $243 = $242; $244 = HEAPU8[$243>>0]|(HEAPU8[$243+1>>0]<<8)|(HEAPU8[$243+2>>0]<<16)|(HEAPU8[$243+3>>0]<<24); $245 = $241 | $232; $246 = $238; $247 = $246; HEAP8[$247>>0]=$245&255;HEAP8[$247+1>>0]=($245>>8)&255;HEAP8[$247+2>>0]=($245>>16)&255;HEAP8[$247+3>>0]=$245>>24; $248 = (($246) + 4)|0; $249 = $248; HEAP8[$249>>0]=$244&255;HEAP8[$249+1>>0]=($244>>8)&255;HEAP8[$249+2>>0]=($244>>16)&255;HEAP8[$249+3>>0]=$244>>24; $250 = ((($94)) + 96|0); $251 = HEAP32[$250>>2]|0; $252 = ((($94)) + 92|0); HEAP32[$252>>2] = $251; $253 = ((($94)) + 132|0); $254 = ((($94)) + 92|0); $255 = HEAP32[$254>>2]|0; $7 = $253; $8 = $255; $256 = $7; $257 = $8; $258 = (($256) + ($257<<2)|0); HEAP32[$258>>2] = 0; $259 = ((($94)) + 148|0); $260 = ((($94)) + 92|0); $261 = HEAP32[$260>>2]|0; $3 = $259; $4 = $261; $262 = $3; $263 = $4; $264 = (($262) + ($263<<2)|0); HEAP32[$264>>2] = 0; break; } $265 = $92; $266 = ($265|0)>(2); if ($266) { $267 = ((($94)) + 92|0); $268 = HEAP32[$267>>2]|0; $269 = $92; $270 = (($268) + ($269))|0; $271 = (($270) - 2)|0; $272 = $271 & 3; $273 = ((($94)) + 92|0); HEAP32[$273>>2] = $272; $274 = $89; $275 = $90; (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$274,$275)|0); } } else { $276 = ((($94)) + 4|0); $277 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($126,$276)|0); $92 = $277; $278 = $92; $279 = ($278|0)==(1); if ($279) { $280 = ((($94)) + 244|0); $281 = $89; $282 = ((($94)) + 132|0); $283 = ((($94)) + 92|0); $284 = HEAP32[$283>>2]|0; $5 = $282; $6 = $284; $285 = $5; $286 = $6; $287 = (($285) + ($286<<2)|0); $288 = HEAP32[$287>>2]|0; $289 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($280,$281,$288,1)|0); $290 = ($289|0)<(0); $291 = $290 << 31 >> 31; $292 = ((($94)) + 100|0); $293 = ((($94)) + 92|0); $294 = HEAP32[$293>>2]|0; $9 = $292; $10 = $294; $295 = $9; $296 = $10; $297 = (($295) + ($296<<3)|0); $298 = $297; $299 = $298; $300 = HEAPU8[$299>>0]|(HEAPU8[$299+1>>0]<<8)|(HEAPU8[$299+2>>0]<<16)|(HEAPU8[$299+3>>0]<<24); $301 = (($298) + 4)|0; $302 = $301; $303 = HEAPU8[$302>>0]|(HEAPU8[$302+1>>0]<<8)|(HEAPU8[$302+2>>0]<<16)|(HEAPU8[$302+3>>0]<<24); $304 = (_i64Add(($300|0),($303|0),($289|0),($291|0))|0); $305 = tempRet0; $306 = $297; $307 = $306; HEAP8[$307>>0]=$304&255;HEAP8[$307+1>>0]=($304>>8)&255;HEAP8[$307+2>>0]=($304>>16)&255;HEAP8[$307+3>>0]=$304>>24; $308 = (($306) + 4)|0; $309 = $308; HEAP8[$309>>0]=$305&255;HEAP8[$309+1>>0]=($305>>8)&255;HEAP8[$309+2>>0]=($305>>16)&255;HEAP8[$309+3>>0]=$305>>24; $310 = ((($94)) + 148|0); $311 = ((($94)) + 92|0); $312 = HEAP32[$311>>2]|0; $11 = $310; $12 = $312; $313 = $11; $314 = $12; $315 = (($313) + ($314<<2)|0); HEAP32[$315>>2] = 0; break; } $316 = $92; $317 = ($316|0)<(511); $318 = $92; if (!($317)) { $490 = ($318|0)==(512); if ($490) { $491 = ((($94)) + 96|0); $492 = HEAP32[$491>>2]|0; $493 = (($492) + 1)|0; $494 = $493 & 3; $495 = ((($94)) + 96|0); HEAP32[$495>>2] = $494; $496 = ((($94)) + 244|0); $497 = $89; $498 = ((($94)) + 100|0); $499 = ((($94)) + 92|0); $500 = HEAP32[$499>>2]|0; $61 = $498; $62 = $500; $501 = $61; $502 = $62; $503 = (($501) + ($502<<3)|0); $504 = $503; $505 = $504; $506 = HEAPU8[$505>>0]|(HEAPU8[$505+1>>0]<<8)|(HEAPU8[$505+2>>0]<<16)|(HEAPU8[$505+3>>0]<<24); $507 = (($504) + 4)|0; $508 = $507; $509 = HEAPU8[$508>>0]|(HEAPU8[$508+1>>0]<<8)|(HEAPU8[$508+2>>0]<<16)|(HEAPU8[$508+3>>0]<<24); $510 = (_bitshift64Ashr(($506|0),($509|0),32)|0); $511 = tempRet0; $512 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($496,$497,$510,8)|0); $513 = ($512|0)<(0); $514 = $513 << 31 >> 31; $515 = ((($94)) + 100|0); $516 = ((($94)) + 96|0); $517 = HEAP32[$516>>2]|0; $65 = $515; $66 = $517; $518 = $65; $519 = $66; $520 = (($518) + ($519<<3)|0); $521 = $520; $522 = $521; HEAP8[$522>>0]=$512&255;HEAP8[$522+1>>0]=($512>>8)&255;HEAP8[$522+2>>0]=($512>>16)&255;HEAP8[$522+3>>0]=$512>>24; $523 = (($521) + 4)|0; $524 = $523; HEAP8[$524>>0]=$514&255;HEAP8[$524+1>>0]=($514>>8)&255;HEAP8[$524+2>>0]=($514>>16)&255;HEAP8[$524+3>>0]=$514>>24; $525 = ((($94)) + 100|0); $526 = ((($94)) + 96|0); $527 = HEAP32[$526>>2]|0; $67 = $525; $68 = $527; $528 = $67; $529 = $68; $530 = (($528) + ($529<<3)|0); $531 = $530; $532 = $531; $533 = HEAPU8[$532>>0]|(HEAPU8[$532+1>>0]<<8)|(HEAPU8[$532+2>>0]<<16)|(HEAPU8[$532+3>>0]<<24); $534 = (($531) + 4)|0; $535 = $534; $536 = HEAPU8[$535>>0]|(HEAPU8[$535+1>>0]<<8)|(HEAPU8[$535+2>>0]<<16)|(HEAPU8[$535+3>>0]<<24); $537 = ((($94)) + 100|0); $538 = ((($94)) + 96|0); $539 = HEAP32[$538>>2]|0; $69 = $537; $70 = $539; $540 = $69; $541 = $70; $542 = (($540) + ($541<<3)|0); $543 = $542; $544 = $543; HEAP8[$544>>0]=0&255;HEAP8[$544+1>>0]=(0>>8)&255;HEAP8[$544+2>>0]=(0>>16)&255;HEAP8[$544+3>>0]=0>>24; $545 = (($543) + 4)|0; $546 = $545; HEAP8[$546>>0]=$533&255;HEAP8[$546+1>>0]=($533>>8)&255;HEAP8[$546+2>>0]=($533>>16)&255;HEAP8[$546+3>>0]=$533>>24; $547 = $89; $548 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($547)|0); $549 = ((($94)) + 100|0); $550 = ((($94)) + 96|0); $551 = HEAP32[$550>>2]|0; $73 = $549; $74 = $551; $552 = $73; $553 = $74; $554 = (($552) + ($553<<3)|0); $555 = $554; $556 = $555; $557 = HEAPU8[$556>>0]|(HEAPU8[$556+1>>0]<<8)|(HEAPU8[$556+2>>0]<<16)|(HEAPU8[$556+3>>0]<<24); $558 = (($555) + 4)|0; $559 = $558; $560 = HEAPU8[$559>>0]|(HEAPU8[$559+1>>0]<<8)|(HEAPU8[$559+2>>0]<<16)|(HEAPU8[$559+3>>0]<<24); $561 = $557 | $548; $562 = $554; $563 = $562; HEAP8[$563>>0]=$561&255;HEAP8[$563+1>>0]=($561>>8)&255;HEAP8[$563+2>>0]=($561>>16)&255;HEAP8[$563+3>>0]=$561>>24; $564 = (($562) + 4)|0; $565 = $564; HEAP8[$565>>0]=$560&255;HEAP8[$565+1>>0]=($560>>8)&255;HEAP8[$565+2>>0]=($560>>16)&255;HEAP8[$565+3>>0]=$560>>24; $566 = ((($94)) + 96|0); $567 = HEAP32[$566>>2]|0; $568 = ((($94)) + 92|0); HEAP32[$568>>2] = $567; $569 = ((($94)) + 132|0); $570 = ((($94)) + 92|0); $571 = HEAP32[$570>>2]|0; $75 = $569; $76 = $571; $572 = $75; $573 = $76; $574 = (($572) + ($573<<2)|0); HEAP32[$574>>2] = 0; $575 = ((($94)) + 148|0); $576 = ((($94)) + 92|0); $577 = HEAP32[$576>>2]|0; $77 = $575; $78 = $577; $578 = $77; $579 = $78; $580 = (($578) + ($579<<2)|0); HEAP32[$580>>2] = 0; break; } $581 = $92; $582 = ($581|0)>=(512); if (!($582)) { break; } $583 = ((($94)) + 92|0); $584 = HEAP32[$583>>2]|0; $585 = $92; $586 = (($584) + ($585))|0; $587 = (($586) - 512)|0; $588 = $587 & 3; $589 = ((($94)) + 92|0); HEAP32[$589>>2] = $588; $590 = $89; $591 = $90; (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($94,$590,$591)|0); break; } $319 = ($318|0)==(0); do { if ($319) { $320 = ((($94)) + 244|0); $321 = $89; $322 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($320,$321,0,7)|0); $93 = $322; $323 = ((($94)) + 148|0); $324 = ((($94)) + 92|0); $325 = HEAP32[$324>>2]|0; $15 = $323; $16 = $325; $326 = $15; $327 = $16; $328 = (($326) + ($327<<2)|0); $329 = HEAP32[$328>>2]|0; $330 = (($329) + 1)|0; HEAP32[$328>>2] = $330; $331 = ((($94)) + 148|0); $332 = ((($94)) + 92|0); $333 = HEAP32[$332>>2]|0; $17 = $331; $18 = $333; $334 = $17; $335 = $18; $336 = (($334) + ($335<<2)|0); $337 = HEAP32[$336>>2]|0; $338 = ($337|0)>(3); if ($338) { $339 = $93; $340 = ((($94)) + 132|0); $341 = ((($94)) + 92|0); $342 = HEAP32[$341>>2]|0; $19 = $340; $20 = $342; $343 = $19; $344 = $20; $345 = (($343) + ($344<<2)|0); HEAP32[$345>>2] = $339; $346 = ((($94)) + 148|0); $347 = ((($94)) + 92|0); $348 = HEAP32[$347>>2]|0; $21 = $346; $22 = $348; $349 = $21; $350 = $22; $351 = (($349) + ($350<<2)|0); HEAP32[$351>>2] = 0; } } else { $352 = $92; $353 = ($352|0)<(500); $354 = $92; if ($353) { $355 = ($354|0)<(10); $356 = ((($94)) + 244|0); $357 = $89; $358 = $92; $359 = ((($94)) + 132|0); $360 = ((($94)) + 92|0); $361 = HEAP32[$360>>2]|0; if ($355) { $23 = $359; $24 = $361; $362 = $23; $363 = $24; $364 = (($362) + ($363<<2)|0); $365 = HEAP32[$364>>2]|0; $366 = Math_imul($358, $365)|0; $367 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$366,2)|0); $93 = $367; break; } else { $27 = $359; $28 = $361; $368 = $27; $369 = $28; $370 = (($368) + ($369<<2)|0); $371 = HEAP32[$370>>2]|0; $372 = Math_imul($358, $371)|0; $373 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($356,$357,$372,3)|0); $93 = $373; break; } } $374 = ($354|0)==(500); if ($374) { $375 = ((($94)) + 244|0); $376 = $89; $377 = ((($94)) + 132|0); $378 = ((($94)) + 92|0); $379 = HEAP32[$378>>2]|0; $31 = $377; $32 = $379; $380 = $31; $381 = $32; $382 = (($380) + ($381<<2)|0); $383 = HEAP32[$382>>2]|0; $384 = ($383*500)|0; $385 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($375,$376,$384,4)|0); $93 = $385; $386 = ((($94)) + 148|0); $387 = ((($94)) + 92|0); $388 = HEAP32[$387>>2]|0; $35 = $386; $36 = $388; $389 = $35; $390 = $36; $391 = (($389) + ($390<<2)|0); $392 = HEAP32[$391>>2]|0; $393 = (($392) + 1)|0; HEAP32[$391>>2] = $393; $394 = ((($94)) + 148|0); $395 = ((($94)) + 92|0); $396 = HEAP32[$395>>2]|0; $37 = $394; $38 = $396; $397 = $37; $398 = $38; $399 = (($397) + ($398<<2)|0); $400 = HEAP32[$399>>2]|0; $401 = ($400|0)>(3); if (!($401)) { break; } $402 = $93; $403 = ((($94)) + 132|0); $404 = ((($94)) + 92|0); $405 = HEAP32[$404>>2]|0; $39 = $403; $40 = $405; $406 = $39; $407 = $40; $408 = (($406) + ($407<<2)|0); HEAP32[$408>>2] = $402; $409 = ((($94)) + 148|0); $410 = ((($94)) + 92|0); $411 = HEAP32[$410>>2]|0; $41 = $409; $42 = $411; $412 = $41; $413 = $42; $414 = (($412) + ($413<<2)|0); HEAP32[$414>>2] = 0; break; } $415 = $92; $416 = (500 - ($415))|0; $92 = $416; $417 = $92; $418 = ($417|0)>(-10); $419 = ((($94)) + 244|0); $420 = $89; if ($418) { $421 = $92; $422 = ((($94)) + 132|0); $423 = ((($94)) + 92|0); $424 = HEAP32[$423>>2]|0; $43 = $422; $44 = $424; $425 = $43; $426 = $44; $427 = (($425) + ($426<<2)|0); $428 = HEAP32[$427>>2]|0; $429 = Math_imul($421, $428)|0; $430 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$429,5)|0); $93 = $430; break; } $431 = ((($94)) + 132|0); $432 = ((($94)) + 92|0); $433 = HEAP32[$432>>2]|0; $47 = $431; $48 = $433; $434 = $47; $435 = $48; $436 = (($434) + ($435<<2)|0); $437 = HEAP32[$436>>2]|0; $438 = Math_imul(-10, $437)|0; $439 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEiRT_ij($419,$420,$438,6)|0); $93 = $439; $440 = ((($94)) + 148|0); $441 = ((($94)) + 92|0); $442 = HEAP32[$441>>2]|0; $51 = $440; $52 = $442; $443 = $51; $444 = $52; $445 = (($443) + ($444<<2)|0); $446 = HEAP32[$445>>2]|0; $447 = (($446) + 1)|0; HEAP32[$445>>2] = $447; $448 = ((($94)) + 148|0); $449 = ((($94)) + 92|0); $450 = HEAP32[$449>>2]|0; $53 = $448; $54 = $450; $451 = $53; $452 = $54; $453 = (($451) + ($452<<2)|0); $454 = HEAP32[$453>>2]|0; $455 = ($454|0)>(3); if ($455) { $456 = $93; $457 = ((($94)) + 132|0); $458 = ((($94)) + 92|0); $459 = HEAP32[$458>>2]|0; $55 = $457; $56 = $459; $460 = $55; $461 = $56; $462 = (($460) + ($461<<2)|0); HEAP32[$462>>2] = $456; $463 = ((($94)) + 148|0); $464 = ((($94)) + 92|0); $465 = HEAP32[$464>>2]|0; $57 = $463; $58 = $465; $466 = $57; $467 = $58; $468 = (($466) + ($467<<2)|0); HEAP32[$468>>2] = 0; } } } while(0); $469 = $93; $470 = ($469|0)<(0); $471 = $470 << 31 >> 31; $472 = ((($94)) + 100|0); $473 = ((($94)) + 92|0); $474 = HEAP32[$473>>2]|0; $59 = $472; $60 = $474; $475 = $59; $476 = $60; $477 = (($475) + ($476<<3)|0); $478 = $477; $479 = $478; $480 = HEAPU8[$479>>0]|(HEAPU8[$479+1>>0]<<8)|(HEAPU8[$479+2>>0]<<16)|(HEAPU8[$479+3>>0]<<24); $481 = (($478) + 4)|0; $482 = $481; $483 = HEAPU8[$482>>0]|(HEAPU8[$482+1>>0]<<8)|(HEAPU8[$482+2>>0]<<16)|(HEAPU8[$482+3>>0]<<24); $484 = (_i64Add(($480|0),($483|0),($469|0),($471|0))|0); $485 = tempRet0; $486 = $477; $487 = $486; HEAP8[$487>>0]=$484&255;HEAP8[$487+1>>0]=($484>>8)&255;HEAP8[$487+2>>0]=($484>>16)&255;HEAP8[$487+3>>0]=$484>>24; $488 = (($486) + 4)|0; $489 = $488; HEAP8[$489>>0]=$485&255;HEAP8[$489+1>>0]=($485>>8)&255;HEAP8[$489+2>>0]=($485>>16)&255;HEAP8[$489+3>>0]=$485>>24; } } while(0); $592 = ((($94)) + 100|0); $593 = ((($94)) + 92|0); $594 = HEAP32[$593>>2]|0; $79 = $592; $80 = $594; $595 = $79; $596 = $80; $597 = (($595) + ($596<<3)|0); $598 = $90; __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($597,$598); $599 = $90; $600 = ((($599)) + 8|0); $87 = $600; $601 = $87; STACKTOP = sp;return ($601|0); } function __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE15__decompressors4initEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip13decompressors7integer4initEv($2); STACKTOP = sp;return; } function __ZN6laszip7formats7packersINS0_3las7gpstimeEE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $1 = sp + 24|0; $3 = sp + 8|0; $4 = sp; $2 = $0; $5 = $2; $6 = (__ZN6laszip7formats7packersIjE6unpackEPKc($5)|0); $7 = $3; $8 = $7; HEAP32[$8>>2] = $6; $9 = (($7) + 4)|0; $10 = $9; HEAP32[$10>>2] = 0; $11 = $2; $12 = ((($11)) + 4|0); $13 = (__ZN6laszip7formats7packersIjE6unpackEPKc($12)|0); $14 = $4; $15 = $14; HEAP32[$15>>2] = $13; $16 = (($14) + 4)|0; $17 = $16; HEAP32[$17>>2] = 0; $18 = $4; $19 = $18; $20 = HEAP32[$19>>2]|0; $21 = (($18) + 4)|0; $22 = $21; $23 = HEAP32[$22>>2]|0; $24 = $3; $25 = $24; $26 = HEAP32[$25>>2]|0; $27 = (($24) + 4)|0; $28 = $27; $29 = HEAP32[$28>>2]|0; $30 = $20 | $29; __ZN6laszip7formats3las7gpstimeC2Ex($1,$26,$30); $31 = $1; $32 = $31; $33 = HEAPU8[$32>>0]|(HEAPU8[$32+1>>0]<<8)|(HEAPU8[$32+2>>0]<<16)|(HEAPU8[$32+3>>0]<<24); $34 = (($31) + 4)|0; $35 = $34; $36 = HEAPU8[$35>>0]|(HEAPU8[$35+1>>0]<<8)|(HEAPU8[$35+2>>0]<<16)|(HEAPU8[$35+3>>0]<<24); tempRet0 = ($36); STACKTOP = sp;return ($33|0); } function __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE7readIntEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $4 = $1; $5 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0); $6 = $5&65535; $2 = $6; $7 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE9readShortEv($4)|0); $8 = $7&65535; $3 = $8; $9 = $3; $10 = $9 << 16; $11 = $2; $12 = $10 | $11; STACKTOP = sp;return ($12|0); } function __ZN6laszip7formats7packersINS0_3las7gpstimeEE4packERKS3_Pc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $4; $6 = $5; $7 = HEAPU8[$6>>0]|(HEAPU8[$6+1>>0]<<8)|(HEAPU8[$6+2>>0]<<16)|(HEAPU8[$6+3>>0]<<24); $8 = (($5) + 4)|0; $9 = $8; $10 = HEAPU8[$9>>0]|(HEAPU8[$9+1>>0]<<8)|(HEAPU8[$9+2>>0]<<16)|(HEAPU8[$9+3>>0]<<24); $11 = $3; __ZN6laszip7formats7packersIjE4packEjPc($7,$11); $12 = $2; $13 = $12; $14 = $13; $15 = HEAPU8[$14>>0]|(HEAPU8[$14+1>>0]<<8)|(HEAPU8[$14+2>>0]<<16)|(HEAPU8[$14+3>>0]<<24); $16 = (($13) + 4)|0; $17 = $16; $18 = HEAPU8[$17>>0]|(HEAPU8[$17+1>>0]<<8)|(HEAPU8[$17+2>>0]<<16)|(HEAPU8[$17+3>>0]<<24); $19 = (_bitshift64Ashr(($15|0),($18|0),32)|0); $20 = tempRet0; $21 = $3; $22 = ((($21)) + 4|0); __ZN6laszip7formats7packersIjE4packEjPc($19,$22); STACKTOP = sp;return; } function __ZN6laszip7formats3las7gpstimeC2Ex($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = sp; $3 = $0; $5 = $4; $6 = $5; HEAP32[$6>>2] = $1; $7 = (($5) + 4)|0; $8 = $7; HEAP32[$8>>2] = $2; $9 = $3; $10 = $4; $11 = $10; $12 = HEAP32[$11>>2]|0; $13 = (($10) + 4)|0; $14 = $13; $15 = HEAP32[$14>>2]|0; $16 = $9; $17 = $16; HEAP8[$17>>0]=$12&255;HEAP8[$17+1>>0]=($12>>8)&255;HEAP8[$17+2>>0]=($12>>16)&255;HEAP8[$17+3>>0]=$12>>24; $18 = (($16) + 4)|0; $19 = $18; HEAP8[$19>>0]=$15&255;HEAP8[$19+1>>0]=($15>>8)&255;HEAP8[$19+2>>0]=($15>>16)&255;HEAP8[$19+3>>0]=$15>>24; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 400; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEEC2ERS9_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2152); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2176); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP8[$2>>0] = 0; $3 = ((($2)) + 1|0); __ZN6laszip7formats3las3rgbC2Ev($3); $4 = ((($2)) + 8|0); __ZN6laszip6models10arithmeticC2EjbPj($4,128,0,0); $5 = ((($2)) + 52|0); __ZN6laszip6models10arithmeticC2EjbPj($5,256,0,0); $6 = ((($2)) + 96|0); __ZN6laszip6models10arithmeticC2EjbPj($6,256,0,0); $7 = ((($2)) + 140|0); __ZN6laszip6models10arithmeticC2EjbPj($7,256,0,0); $8 = ((($2)) + 184|0); __ZN6laszip6models10arithmeticC2EjbPj($8,256,0,0); $9 = ((($2)) + 228|0); __ZN6laszip6models10arithmeticC2EjbPj($9,256,0,0); $10 = ((($2)) + 272|0); __ZN6laszip6models10arithmeticC2EjbPj($10,256,0,0); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2152); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats3las3rgbC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP8[$2>>0]=0&255;HEAP8[$2+1>>0]=0>>8; $3 = ((($2)) + 2|0); HEAP8[$3>>0]=0&255;HEAP8[$3+1>>0]=0>>8; $4 = ((($2)) + 4|0); HEAP8[$4>>0]=0&255;HEAP8[$4+1>>0]=0>>8; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 272|0); __ZN6laszip6models10arithmeticD2Ev($3); $4 = ((($2)) + 228|0); __ZN6laszip6models10arithmeticD2Ev($4); $5 = ((($2)) + 184|0); __ZN6laszip6models10arithmeticD2Ev($5); $6 = ((($2)) + 140|0); __ZN6laszip6models10arithmeticD2Ev($6); $7 = ((($2)) + 96|0); __ZN6laszip6models10arithmeticD2Ev($7); $8 = ((($2)) + 52|0); __ZN6laszip6models10arithmeticD2Ev($8); $9 = ((($2)) + 8|0); __ZN6laszip6models10arithmeticD2Ev($9); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0; var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0; var $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0; var $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0; var $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0; var $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0; var $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0; var $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $34 = 0, $35 = 0, $36 = 0; var $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0; var $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0; var $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0; var $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $7 = sp + 32|0; $11 = sp + 24|0; $4 = $0; $5 = $1; $6 = $2; $12 = $4; $13 = HEAP8[$12>>0]|0; $14 = $13&1; if (!($14)) { HEAP8[$12>>0] = 1; $15 = $5; $16 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($15)|0); $17 = $6; __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($16,$17,6); $18 = $6; __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($7,$18); $19 = ((($12)) + 1|0); ;HEAP8[$19>>0]=HEAP8[$7>>0]|0;HEAP8[$19+1>>0]=HEAP8[$7+1>>0]|0;HEAP8[$19+2>>0]=HEAP8[$7+2>>0]|0;HEAP8[$19+3>>0]=HEAP8[$7+3>>0]|0;HEAP8[$19+4>>0]=HEAP8[$7+4>>0]|0;HEAP8[$19+5>>0]=HEAP8[$7+5>>0]|0; $20 = $6; $21 = ((($20)) + 6|0); $3 = $21; $331 = $3; STACKTOP = sp;return ($331|0); } $9 = 0; $22 = $5; $23 = ((($12)) + 8|0); $24 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($22,$23)|0); $10 = $24; __ZN6laszip7formats3las3rgbC2Ev($11); $25 = $10; $26 = $25 & 1; $27 = ($26|0)!=(0); if ($27) { $28 = $5; $29 = ((($12)) + 52|0); $30 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($28,$29)|0); $31 = $30&255; $8 = $31; $32 = $8; $33 = $32&255; $34 = ((($12)) + 1|0); $35 = HEAPU8[$34>>0]|(HEAPU8[$34+1>>0]<<8); $36 = $35&65535; $37 = $36 & 255; $38 = (($33) + ($37))|0; $39 = (__Z7U8_FOLDi($38)|0); $40 = $39&255; HEAP8[$11>>0]=$40&255;HEAP8[$11+1>>0]=$40>>8; } else { $41 = ((($12)) + 1|0); $42 = HEAPU8[$41>>0]|(HEAPU8[$41+1>>0]<<8); $43 = $42&65535; $44 = $43 & 255; $45 = $44&65535; HEAP8[$11>>0]=$45&255;HEAP8[$11+1>>0]=$45>>8; } $46 = $10; $47 = $46 & 2; $48 = ($47|0)!=(0); if ($48) { $49 = $5; $50 = ((($12)) + 96|0); $51 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($49,$50)|0); $52 = $51&255; $8 = $52; $53 = $8; $54 = $53&255; $55 = ((($12)) + 1|0); $56 = HEAPU8[$55>>0]|(HEAPU8[$55+1>>0]<<8); $57 = $56&65535; $58 = $57 >> 8; $59 = (($54) + ($58))|0; $60 = (__Z7U8_FOLDi($59)|0); $61 = $60&255; $62 = $61&65535; $63 = $62 << 8; $64 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); $65 = $64&65535; $66 = $65 | $63; $67 = $66&65535; HEAP8[$11>>0]=$67&255;HEAP8[$11+1>>0]=$67>>8; } else { $68 = ((($12)) + 1|0); $69 = HEAPU8[$68>>0]|(HEAPU8[$68+1>>0]<<8); $70 = $69&65535; $71 = $70 & 65280; $72 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); $73 = $72&65535; $74 = $73 | $71; $75 = $74&65535; HEAP8[$11>>0]=$75&255;HEAP8[$11+1>>0]=$75>>8; } $76 = $10; $77 = $76 & 64; $78 = ($77|0)!=(0); $79 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); do { if ($78) { $80 = $79&65535; $81 = $80 & 255; $82 = ((($12)) + 1|0); $83 = HEAPU8[$82>>0]|(HEAPU8[$82+1>>0]<<8); $84 = $83&65535; $85 = $84 & 255; $86 = (($81) - ($85))|0; $9 = $86; $87 = $10; $88 = $87 & 4; $89 = ($88|0)!=(0); if ($89) { $90 = $5; $91 = ((($12)) + 140|0); $92 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($90,$91)|0); $93 = $92&255; $8 = $93; $94 = $8; $95 = $94&255; $96 = $9; $97 = ((($12)) + 1|0); $98 = ((($97)) + 2|0); $99 = HEAPU8[$98>>0]|(HEAPU8[$98+1>>0]<<8); $100 = $99&65535; $101 = $100 & 255; $102 = (($96) + ($101))|0; $103 = ($102|0)<=(0); if ($103) { $121 = 0; } else { $104 = $9; $105 = ((($12)) + 1|0); $106 = ((($105)) + 2|0); $107 = HEAPU8[$106>>0]|(HEAPU8[$106+1>>0]<<8); $108 = $107&65535; $109 = $108 & 255; $110 = (($104) + ($109))|0; $111 = ($110|0)>=(255); if ($111) { $121 = -1; } else { $112 = $9; $113 = ((($12)) + 1|0); $114 = ((($113)) + 2|0); $115 = HEAPU8[$114>>0]|(HEAPU8[$114+1>>0]<<8); $116 = $115&65535; $117 = $116 & 255; $118 = (($112) + ($117))|0; $119 = $118&255; $121 = $119; } } $120 = $121&255; $122 = (($95) + ($120))|0; $123 = (__Z7U8_FOLDi($122)|0); $124 = $123&255; $125 = ((($11)) + 2|0); HEAP8[$125>>0]=$124&255;HEAP8[$125+1>>0]=$124>>8; } else { $126 = ((($12)) + 1|0); $127 = ((($126)) + 2|0); $128 = HEAPU8[$127>>0]|(HEAPU8[$127+1>>0]<<8); $129 = $128&65535; $130 = $129 & 255; $131 = $130&65535; $132 = ((($11)) + 2|0); HEAP8[$132>>0]=$131&255;HEAP8[$132+1>>0]=$131>>8; } $133 = $10; $134 = $133 & 16; $135 = ($134|0)!=(0); if ($135) { $136 = $5; $137 = ((($12)) + 228|0); $138 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($136,$137)|0); $139 = $138&255; $8 = $139; $140 = $9; $141 = ((($11)) + 2|0); $142 = HEAPU8[$141>>0]|(HEAPU8[$141+1>>0]<<8); $143 = $142&65535; $144 = $143 & 255; $145 = (($140) + ($144))|0; $146 = ((($12)) + 1|0); $147 = ((($146)) + 2|0); $148 = HEAPU8[$147>>0]|(HEAPU8[$147+1>>0]<<8); $149 = $148&65535; $150 = $149 & 255; $151 = (($145) - ($150))|0; $152 = (($151|0) / 2)&-1; $9 = $152; $153 = $8; $154 = $153&255; $155 = $9; $156 = ((($12)) + 1|0); $157 = ((($156)) + 4|0); $158 = HEAPU8[$157>>0]|(HEAPU8[$157+1>>0]<<8); $159 = $158&65535; $160 = $159 & 255; $161 = (($155) + ($160))|0; $162 = ($161|0)<=(0); if ($162) { $180 = 0; } else { $163 = $9; $164 = ((($12)) + 1|0); $165 = ((($164)) + 4|0); $166 = HEAPU8[$165>>0]|(HEAPU8[$165+1>>0]<<8); $167 = $166&65535; $168 = $167 & 255; $169 = (($163) + ($168))|0; $170 = ($169|0)>=(255); if ($170) { $180 = -1; } else { $171 = $9; $172 = ((($12)) + 1|0); $173 = ((($172)) + 4|0); $174 = HEAPU8[$173>>0]|(HEAPU8[$173+1>>0]<<8); $175 = $174&65535; $176 = $175 & 255; $177 = (($171) + ($176))|0; $178 = $177&255; $180 = $178; } } $179 = $180&255; $181 = (($154) + ($179))|0; $182 = (__Z7U8_FOLDi($181)|0); $183 = $182&255; $184 = ((($11)) + 4|0); HEAP8[$184>>0]=$183&255;HEAP8[$184+1>>0]=$183>>8; } else { $185 = ((($12)) + 1|0); $186 = ((($185)) + 4|0); $187 = HEAPU8[$186>>0]|(HEAPU8[$186+1>>0]<<8); $188 = $187&65535; $189 = $188 & 255; $190 = $189&65535; $191 = ((($11)) + 4|0); HEAP8[$191>>0]=$190&255;HEAP8[$191+1>>0]=$190>>8; } $192 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); $193 = $192&65535; $194 = $193 >> 8; $195 = ((($12)) + 1|0); $196 = HEAPU8[$195>>0]|(HEAPU8[$195+1>>0]<<8); $197 = $196&65535; $198 = $197 >> 8; $199 = (($194) - ($198))|0; $9 = $199; $200 = $10; $201 = $200 & 8; $202 = ($201|0)!=(0); if ($202) { $203 = $5; $204 = ((($12)) + 184|0); $205 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($203,$204)|0); $206 = $205&255; $8 = $206; $207 = $8; $208 = $207&255; $209 = $9; $210 = ((($12)) + 1|0); $211 = ((($210)) + 2|0); $212 = HEAPU8[$211>>0]|(HEAPU8[$211+1>>0]<<8); $213 = $212&65535; $214 = $213 >> 8; $215 = (($209) + ($214))|0; $216 = ($215|0)<=(0); if ($216) { $234 = 0; } else { $217 = $9; $218 = ((($12)) + 1|0); $219 = ((($218)) + 2|0); $220 = HEAPU8[$219>>0]|(HEAPU8[$219+1>>0]<<8); $221 = $220&65535; $222 = $221 >> 8; $223 = (($217) + ($222))|0; $224 = ($223|0)>=(255); if ($224) { $234 = -1; } else { $225 = $9; $226 = ((($12)) + 1|0); $227 = ((($226)) + 2|0); $228 = HEAPU8[$227>>0]|(HEAPU8[$227+1>>0]<<8); $229 = $228&65535; $230 = $229 >> 8; $231 = (($225) + ($230))|0; $232 = $231&255; $234 = $232; } } $233 = $234&255; $235 = (($208) + ($233))|0; $236 = (__Z7U8_FOLDi($235)|0); $237 = $236&255; $238 = $237&65535; $239 = $238 << 8; $240 = ((($11)) + 2|0); $241 = HEAPU8[$240>>0]|(HEAPU8[$240+1>>0]<<8); $242 = $241&65535; $243 = $242 | $239; $244 = $243&65535; HEAP8[$240>>0]=$244&255;HEAP8[$240+1>>0]=$244>>8; } else { $245 = ((($12)) + 1|0); $246 = ((($245)) + 2|0); $247 = HEAPU8[$246>>0]|(HEAPU8[$246+1>>0]<<8); $248 = $247&65535; $249 = $248 & 65280; $250 = ((($11)) + 2|0); $251 = HEAPU8[$250>>0]|(HEAPU8[$250+1>>0]<<8); $252 = $251&65535; $253 = $252 | $249; $254 = $253&65535; HEAP8[$250>>0]=$254&255;HEAP8[$250+1>>0]=$254>>8; } $255 = $10; $256 = $255 & 32; $257 = ($256|0)!=(0); if (!($257)) { $313 = ((($12)) + 1|0); $314 = ((($313)) + 4|0); $315 = HEAPU8[$314>>0]|(HEAPU8[$314+1>>0]<<8); $316 = $315&65535; $317 = $316 & 65280; $318 = ((($11)) + 4|0); $319 = HEAPU8[$318>>0]|(HEAPU8[$318+1>>0]<<8); $320 = $319&65535; $321 = $320 | $317; $322 = $321&65535; HEAP8[$318>>0]=$322&255;HEAP8[$318+1>>0]=$322>>8; break; } $258 = $5; $259 = ((($12)) + 272|0); $260 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($258,$259)|0); $261 = $260&255; $8 = $261; $262 = $9; $263 = ((($11)) + 2|0); $264 = HEAPU8[$263>>0]|(HEAPU8[$263+1>>0]<<8); $265 = $264&65535; $266 = $265 >> 8; $267 = (($262) + ($266))|0; $268 = ((($12)) + 1|0); $269 = ((($268)) + 2|0); $270 = HEAPU8[$269>>0]|(HEAPU8[$269+1>>0]<<8); $271 = $270&65535; $272 = $271 >> 8; $273 = (($267) - ($272))|0; $274 = (($273|0) / 2)&-1; $9 = $274; $275 = $8; $276 = $275&255; $277 = $9; $278 = ((($12)) + 1|0); $279 = ((($278)) + 4|0); $280 = HEAPU8[$279>>0]|(HEAPU8[$279+1>>0]<<8); $281 = $280&65535; $282 = $281 >> 8; $283 = (($277) + ($282))|0; $284 = ($283|0)<=(0); if ($284) { $302 = 0; } else { $285 = $9; $286 = ((($12)) + 1|0); $287 = ((($286)) + 4|0); $288 = HEAPU8[$287>>0]|(HEAPU8[$287+1>>0]<<8); $289 = $288&65535; $290 = $289 >> 8; $291 = (($285) + ($290))|0; $292 = ($291|0)>=(255); if ($292) { $302 = -1; } else { $293 = $9; $294 = ((($12)) + 1|0); $295 = ((($294)) + 4|0); $296 = HEAPU8[$295>>0]|(HEAPU8[$295+1>>0]<<8); $297 = $296&65535; $298 = $297 >> 8; $299 = (($293) + ($298))|0; $300 = $299&255; $302 = $300; } } $301 = $302&255; $303 = (($276) + ($301))|0; $304 = (__Z7U8_FOLDi($303)|0); $305 = $304&255; $306 = $305&65535; $307 = $306 << 8; $308 = ((($11)) + 4|0); $309 = HEAPU8[$308>>0]|(HEAPU8[$308+1>>0]<<8); $310 = $309&65535; $311 = $310 | $307; $312 = $311&65535; HEAP8[$308>>0]=$312&255;HEAP8[$308+1>>0]=$312>>8; } else { $323 = ((($11)) + 2|0); HEAP8[$323>>0]=$79&255;HEAP8[$323+1>>0]=$79>>8; $324 = HEAPU8[$11>>0]|(HEAPU8[$11+1>>0]<<8); $325 = ((($11)) + 4|0); HEAP8[$325>>0]=$324&255;HEAP8[$325+1>>0]=$324>>8; } } while(0); $326 = ((($12)) + 1|0); ;HEAP8[$326>>0]=HEAP8[$11>>0]|0;HEAP8[$326+1>>0]=HEAP8[$11+1>>0]|0;HEAP8[$326+2>>0]=HEAP8[$11+2>>0]|0;HEAP8[$326+3>>0]=HEAP8[$11+3>>0]|0;HEAP8[$326+4>>0]=HEAP8[$11+4>>0]|0;HEAP8[$326+5>>0]=HEAP8[$11+5>>0]|0; $327 = ((($12)) + 1|0); $328 = $6; __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($327,$328); $329 = $6; $330 = ((($329)) + 6|0); $3 = $330; $331 = $3; STACKTOP = sp;return ($331|0); } function __ZN6laszip7formats7packersINS0_3las3rgbEE6unpackEPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $1; $3 = $2; $4 = (__ZN6laszip7formats7packersItE6unpackEPKc($3)|0); $5 = $2; $6 = ((($5)) + 2|0); $7 = (__ZN6laszip7formats7packersItE6unpackEPKc($6)|0); $8 = $2; $9 = ((($8)) + 4|0); $10 = (__ZN6laszip7formats7packersItE6unpackEPKc($9)|0); __ZN6laszip7formats3las3rgbC2Ettt($0,$4,$7,$10); STACKTOP = sp;return; } function __ZN6laszip7formats7packersINS0_3las3rgbEE4packERKS3_Pc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = HEAPU8[$4>>0]|(HEAPU8[$4+1>>0]<<8); $6 = $3; __ZN6laszip7formats7packersItE4packEtPc($5,$6); $7 = $2; $8 = ((($7)) + 2|0); $9 = HEAPU8[$8>>0]|(HEAPU8[$8+1>>0]<<8); $10 = $3; $11 = ((($10)) + 2|0); __ZN6laszip7formats7packersItE4packEtPc($9,$11); $12 = $2; $13 = ((($12)) + 4|0); $14 = HEAPU8[$13>>0]|(HEAPU8[$13+1>>0]<<8); $15 = $3; $16 = ((($15)) + 4|0); __ZN6laszip7formats7packersItE4packEtPc($14,$16); STACKTOP = sp;return; } function __ZN6laszip7formats3las3rgbC2Ettt($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = $0; $5 = $1; $6 = $2; $7 = $3; $8 = $4; $9 = $5; HEAP8[$8>>0]=$9&255;HEAP8[$8+1>>0]=$9>>8; $10 = ((($8)) + 2|0); $11 = $6; HEAP8[$10>>0]=$11&255;HEAP8[$10+1>>0]=$11>>8; $12 = ((($8)) + 4|0); $13 = $7; HEAP8[$12>>0]=$13&255;HEAP8[$12+1>>0]=$13>>8; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 440; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEEC2ERS9_RKSF_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; __ZN6laszip7formats10base_fieldC2Ev($6); HEAP32[$6>>2] = (2204); $7 = ((($6)) + 4|0); $8 = $4; HEAP32[$7>>2] = $8; $9 = ((($6)) + 8|0); $10 = $5; __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($9,$10); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISH_EEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISN_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2228); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEEC2ERKS6_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; ;HEAP32[$4>>2]=HEAP32[$5>>2]|0;HEAP8[$4+4>>0]=HEAP8[$5+4>>0]|0; $6 = ((($4)) + 8|0); $7 = $3; $8 = ((($7)) + 8|0); __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($6,$8); $9 = ((($4)) + 20|0); $10 = $3; $11 = ((($10)) + 20|0); __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($9,$11); $12 = ((($4)) + 32|0); $13 = $3; $14 = ((($13)) + 32|0); __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($12,$14); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2204); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZNSt3__26vectorIhNS_9allocatorIhEEEC2ERKS3_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0); $17 = sp + 36|0; $19 = sp; $21 = sp + 101|0; $27 = sp + 100|0; $25 = $0; $26 = $1; $29 = $25; $30 = $26; $24 = $30; $31 = $24; $32 = ((($31)) + 8|0); $23 = $32; $33 = $23; $22 = $33; $34 = $22; $20 = $34; $35 = $20; ;HEAP8[$19>>0]=HEAP8[$21>>0]|0; $18 = $35; $15 = $29; $16 = $27; $36 = $15; $14 = $36; HEAP32[$36>>2] = 0; $37 = ((($36)) + 4|0); HEAP32[$37>>2] = 0; $38 = ((($36)) + 8|0); HEAP32[$17>>2] = 0; $39 = $16; $11 = $38; $12 = $17; $13 = $39; $40 = $11; $41 = $12; $10 = $41; $42 = $10; $4 = $40; $5 = $42; $43 = $4; $44 = $5; $3 = $44; HEAP32[$43>>2] = 0; $45 = $13; $6 = $45; $46 = $6; $8 = $40; $9 = $46; $47 = $9; $7 = $47; $48 = $26; $2 = $48; $49 = $2; $50 = ((($49)) + 4|0); $51 = HEAP32[$50>>2]|0; $52 = HEAP32[$49>>2]|0; $53 = $51; $54 = $52; $55 = (($53) - ($54))|0; $28 = $55; $56 = $28; $57 = ($56>>>0)>(0); if (!($57)) { STACKTOP = sp;return; } $58 = $28; __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($29,$58); $59 = $26; $60 = HEAP32[$59>>2]|0; $61 = $26; $62 = ((($61)) + 4|0); $63 = HEAP32[$62>>2]|0; $64 = $28; __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($29,$60,$63,$64); STACKTOP = sp;return; } function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2ERKS6_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 208|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(208|0); $$byval_copy1 = sp + 192|0; $$byval_copy = sp + 184|0; $28 = sp + 72|0; $33 = sp + 202|0; $34 = sp + 52|0; $36 = sp; $38 = sp + 201|0; $44 = sp + 200|0; $45 = sp + 16|0; $46 = sp + 8|0; $42 = $0; $43 = $1; $47 = $42; $48 = $43; $41 = $48; $49 = $41; $50 = ((($49)) + 20|0); $40 = $50; $51 = $40; $39 = $51; $52 = $39; $37 = $52; $53 = $37; ;HEAP8[$36>>0]=HEAP8[$38>>0]|0; $35 = $53; $31 = $47; $32 = $44; $54 = $31; $55 = $32; $29 = $33; $30 = $55; $26 = $54; $27 = $33; $56 = $26; HEAP32[$56>>2] = 0; $57 = ((($56)) + 4|0); HEAP32[$57>>2] = 0; $58 = ((($56)) + 8|0); HEAP32[$58>>2] = 0; $59 = ((($56)) + 12|0); HEAP32[$28>>2] = 0; $60 = $27; $23 = $59; $24 = $28; $25 = $60; $61 = $23; $62 = $24; $22 = $62; $63 = $22; $16 = $61; $17 = $63; $64 = $16; $65 = $17; $15 = $65; HEAP32[$64>>2] = 0; $66 = $25; $18 = $66; $67 = $18; $20 = $61; $21 = $67; $68 = $21; $19 = $68; $69 = ((($54)) + 16|0); HEAP32[$69>>2] = 0; $70 = ((($54)) + 20|0); HEAP32[$34>>2] = 0; $71 = $32; $12 = $70; $13 = $34; $14 = $71; $72 = $12; $73 = $13; $11 = $73; $74 = $11; $5 = $72; $6 = $74; $75 = $5; $76 = $6; $4 = $76; $77 = $4; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = $14; $7 = $79; $80 = $7; $9 = $72; $10 = $80; $81 = $10; $8 = $81; $82 = $43; $2 = $82; $83 = $2; __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($45,$83); $84 = $43; $3 = $84; $85 = $3; __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($46,$85); ;HEAP32[$$byval_copy>>2]=HEAP32[$45>>2]|0;HEAP32[$$byval_copy+4>>2]=HEAP32[$45+4>>2]|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$46>>2]|0;HEAP32[$$byval_copy1+4>>2]=HEAP32[$46+4>>2]|0; __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendINS_16__deque_iteratorIS3_PKS3_RS9_PKSA_iLi0EEEEEvT_SF_PNS_9enable_ifIXsr21__is_forward_iteratorISF_EE5valueEvE4typeE($47,$$byval_copy,$$byval_copy1,0); STACKTOP = sp;return; } function __ZNSt3__26vectorIhNS_9allocatorIhEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0; var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0; var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0; var $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0; var $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); $40 = $0; $41 = $1; $42 = $40; $43 = $41; $44 = (__ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($42)|0); $45 = ($43>>>0)>($44>>>0); if ($45) { __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($42); // unreachable; } else { $39 = $42; $46 = $39; $47 = ((($46)) + 8|0); $38 = $47; $48 = $38; $37 = $48; $49 = $37; $50 = $41; $7 = $49; $8 = $50; $51 = $7; $52 = $8; $4 = $51; $5 = $52; $6 = 0; $53 = $4; $3 = $53; $54 = $5; $2 = $54; $55 = $2; $56 = (__Znwj($55)|0); $57 = ((($42)) + 4|0); HEAP32[$57>>2] = $56; HEAP32[$42>>2] = $56; $58 = HEAP32[$42>>2]|0; $59 = $41; $60 = (($58) + ($59)|0); $11 = $42; $61 = $11; $62 = ((($61)) + 8|0); $10 = $62; $63 = $10; $9 = $63; $64 = $9; HEAP32[$64>>2] = $60; $35 = $42; $36 = 0; $65 = $35; $34 = $65; $66 = $34; $67 = HEAP32[$66>>2]|0; $33 = $67; $68 = $33; $13 = $65; $69 = $13; $70 = HEAP32[$69>>2]|0; $12 = $70; $71 = $12; $18 = $65; $72 = $18; $17 = $72; $73 = $17; $16 = $73; $74 = $16; $75 = ((($74)) + 8|0); $15 = $75; $76 = $15; $14 = $76; $77 = $14; $78 = HEAP32[$77>>2]|0; $79 = HEAP32[$73>>2]|0; $80 = $78; $81 = $79; $82 = (($80) - ($81))|0; $83 = (($71) + ($82)|0); $20 = $65; $84 = $20; $85 = HEAP32[$84>>2]|0; $19 = $85; $86 = $19; $25 = $65; $87 = $25; $24 = $87; $88 = $24; $23 = $88; $89 = $23; $90 = ((($89)) + 8|0); $22 = $90; $91 = $22; $21 = $91; $92 = $21; $93 = HEAP32[$92>>2]|0; $94 = HEAP32[$88>>2]|0; $95 = $93; $96 = $94; $97 = (($95) - ($96))|0; $98 = (($86) + ($97)|0); $27 = $65; $99 = $27; $100 = HEAP32[$99>>2]|0; $26 = $100; $101 = $26; $102 = $36; $103 = (($101) + ($102)|0); $28 = $65; $29 = $68; $30 = $83; $31 = $98; $32 = $103; STACKTOP = sp;return; } } function __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endIPhEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES7_S7_j($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $21 = sp + 68|0; $16 = $0; $17 = $1; $18 = $2; $19 = $3; $22 = $16; $15 = $22; $23 = $15; $24 = ((($23)) + 8|0); $14 = $24; $25 = $14; $13 = $25; $26 = $13; $20 = $26; $27 = $19; $4 = $21; $5 = $22; $6 = $27; $28 = $20; $29 = $17; $30 = $18; $31 = ((($22)) + 4|0); $7 = $28; $8 = $29; $9 = $30; $10 = $31; $32 = $9; $33 = $8; $34 = $32; $35 = $33; $36 = (($34) - ($35))|0; $11 = $36; $37 = $11; $38 = ($37|0)>(0); if (!($38)) { $12 = $21; STACKTOP = sp;return; } $39 = $10; $40 = HEAP32[$39>>2]|0; $41 = $8; $42 = $11; _memcpy(($40|0),($41|0),($42|0))|0; $43 = $11; $44 = $10; $45 = HEAP32[$44>>2]|0; $46 = (($45) + ($43)|0); HEAP32[$44>>2] = $46; $12 = $21; STACKTOP = sp;return; } function __ZNSt3__213__vector_baseIhNS_9allocatorIhEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $19 = sp; $22 = sp + 120|0; $31 = $0; $32 = $31; $33 = HEAP32[$32>>2]|0; $34 = ($33|0)!=(0|0); if (!($34)) { STACKTOP = sp;return; } $30 = $32; $35 = $30; $36 = HEAP32[$35>>2]|0; $27 = $35; $28 = $36; $37 = $27; $38 = ((($37)) + 4|0); $39 = HEAP32[$38>>2]|0; $29 = $39; while(1) { $40 = $28; $41 = $29; $42 = ($40|0)!=($41|0); if (!($42)) { break; } $26 = $37; $43 = $26; $44 = ((($43)) + 8|0); $25 = $44; $45 = $25; $24 = $45; $46 = $24; $47 = $29; $48 = ((($47)) + -1|0); $29 = $48; $23 = $48; $49 = $23; $20 = $46; $21 = $49; $50 = $20; $51 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $50; $18 = $51; $52 = $17; $53 = $18; $15 = $52; $16 = $53; } $54 = $28; $55 = ((($37)) + 4|0); HEAP32[$55>>2] = $54; $7 = $32; $56 = $7; $57 = ((($56)) + 8|0); $6 = $57; $58 = $6; $5 = $58; $59 = $5; $60 = HEAP32[$32>>2]|0; $4 = $32; $61 = $4; $3 = $61; $62 = $3; $63 = ((($62)) + 8|0); $2 = $63; $64 = $2; $1 = $64; $65 = $1; $66 = HEAP32[$65>>2]|0; $67 = HEAP32[$61>>2]|0; $68 = $66; $69 = $67; $70 = (($68) - ($69))|0; $12 = $59; $13 = $60; $14 = $70; $71 = $12; $72 = $13; $73 = $14; $9 = $71; $10 = $72; $11 = $73; $74 = $10; $8 = $74; $75 = $8; __ZdlPv($75); STACKTOP = sp;return; } function __ZNKSt3__26vectorIhNS_9allocatorIhEEE8max_sizeEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $6 = sp + 8|0; $9 = sp + 77|0; $12 = sp; $14 = sp + 76|0; $19 = sp + 16|0; $20 = sp + 12|0; $18 = $0; $21 = $18; $17 = $21; $22 = $17; $23 = ((($22)) + 8|0); $16 = $23; $24 = $16; $15 = $24; $25 = $15; $13 = $25; $26 = $13; ;HEAP8[$12>>0]=HEAP8[$14>>0]|0; $11 = $26; $27 = $11; $10 = $27; HEAP32[$19>>2] = -1; HEAP32[$20>>2] = 2147483647; $7 = $19; $8 = $20; $28 = $7; $29 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $28; $5 = $29; $30 = $5; $31 = $4; $1 = $6; $2 = $30; $3 = $31; $32 = $2; $33 = HEAP32[$32>>2]|0; $34 = $3; $35 = HEAP32[$34>>2]|0; $36 = ($33>>>0)<($35>>>0); $37 = $5; $38 = $4; $39 = $36 ? $37 : $38; $40 = HEAP32[$39>>2]|0; STACKTOP = sp;return ($40|0); } function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendINS_16__deque_iteratorIS3_PKS3_RS9_PKSA_iLi0EEEEEvT_SF_PNS_9enable_ifIXsr21__is_forward_iteratorISF_EE5valueEvE4typeE($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0; var $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0; var $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0; var $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0; var $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0; var $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); $29 = sp + 40|0; $34 = sp + 277|0; $47 = sp + 32|0; $48 = sp + 24|0; $49 = sp + 16|0; $50 = sp + 104|0; $51 = sp + 96|0; $52 = sp + 276|0; $53 = sp + 8|0; $54 = sp; $58 = sp + 72|0; $59 = sp + 64|0; $62 = sp + 48|0; $55 = $0; $56 = $3; $63 = $55; ;HEAP32[$58>>2]=HEAP32[$1>>2]|0;HEAP32[$58+4>>2]=HEAP32[$1+4>>2]|0; ;HEAP32[$59>>2]=HEAP32[$2>>2]|0;HEAP32[$59+4>>2]=HEAP32[$2+4>>2]|0; ;HEAP8[$53>>0]=HEAP8[$59>>0]|0;HEAP8[$53+1>>0]=HEAP8[$59+1>>0]|0;HEAP8[$53+2>>0]=HEAP8[$59+2>>0]|0;HEAP8[$53+3>>0]=HEAP8[$59+3>>0]|0;HEAP8[$53+4>>0]=HEAP8[$59+4>>0]|0;HEAP8[$53+5>>0]=HEAP8[$59+5>>0]|0;HEAP8[$53+6>>0]=HEAP8[$59+6>>0]|0;HEAP8[$53+7>>0]=HEAP8[$59+7>>0]|0; ;HEAP8[$54>>0]=HEAP8[$58>>0]|0;HEAP8[$54+1>>0]=HEAP8[$58+1>>0]|0;HEAP8[$54+2>>0]=HEAP8[$58+2>>0]|0;HEAP8[$54+3>>0]=HEAP8[$58+3>>0]|0;HEAP8[$54+4>>0]=HEAP8[$58+4>>0]|0;HEAP8[$54+5>>0]=HEAP8[$58+5>>0]|0;HEAP8[$54+6>>0]=HEAP8[$58+6>>0]|0;HEAP8[$54+7>>0]=HEAP8[$58+7>>0]|0; ;HEAP32[$50>>2]=HEAP32[$54>>2]|0;HEAP32[$50+4>>2]=HEAP32[$54+4>>2]|0; ;HEAP32[$51>>2]=HEAP32[$53>>2]|0;HEAP32[$51+4>>2]=HEAP32[$53+4>>2]|0; ;HEAP8[$47>>0]=HEAP8[$52>>0]|0; ;HEAP8[$48>>0]=HEAP8[$51>>0]|0;HEAP8[$48+1>>0]=HEAP8[$51+1>>0]|0;HEAP8[$48+2>>0]=HEAP8[$51+2>>0]|0;HEAP8[$48+3>>0]=HEAP8[$51+3>>0]|0;HEAP8[$48+4>>0]=HEAP8[$51+4>>0]|0;HEAP8[$48+5>>0]=HEAP8[$51+5>>0]|0;HEAP8[$48+6>>0]=HEAP8[$51+6>>0]|0;HEAP8[$48+7>>0]=HEAP8[$51+7>>0]|0; ;HEAP8[$49>>0]=HEAP8[$50>>0]|0;HEAP8[$49+1>>0]=HEAP8[$50+1>>0]|0;HEAP8[$49+2>>0]=HEAP8[$50+2>>0]|0;HEAP8[$49+3>>0]=HEAP8[$50+3>>0]|0;HEAP8[$49+4>>0]=HEAP8[$50+4>>0]|0;HEAP8[$49+5>>0]=HEAP8[$50+5>>0]|0;HEAP8[$49+6>>0]=HEAP8[$50+6>>0]|0;HEAP8[$49+7>>0]=HEAP8[$50+7>>0]|0; $45 = $48; $46 = $49; $64 = $45; $65 = $46; $42 = $64; $43 = $65; $66 = $42; $67 = $43; $40 = $66; $41 = $67; $68 = $40; $69 = ((($68)) + 4|0); $70 = HEAP32[$69>>2]|0; $71 = $41; $72 = ((($71)) + 4|0); $73 = HEAP32[$72>>2]|0; $74 = ($70|0)==($73|0); $75 = $74 ^ 1; if ($75) { $76 = $45; $77 = HEAP32[$76>>2]|0; $78 = $46; $79 = HEAP32[$78>>2]|0; $80 = $77; $81 = $79; $82 = (($80) - ($81))|0; $83 = (($82|0) / 4)&-1; $84 = ($83*93)|0; $85 = $45; $86 = ((($85)) + 4|0); $87 = HEAP32[$86>>2]|0; $88 = $45; $89 = HEAP32[$88>>2]|0; $90 = HEAP32[$89>>2]|0; $91 = $87; $92 = $90; $93 = (($91) - ($92))|0; $94 = (($93|0) / 44)&-1; $95 = (($84) + ($94))|0; $96 = $46; $97 = ((($96)) + 4|0); $98 = HEAP32[$97>>2]|0; $99 = $46; $100 = HEAP32[$99>>2]|0; $101 = HEAP32[$100>>2]|0; $102 = $98; $103 = $101; $104 = (($102) - ($103))|0; $105 = (($104|0) / 44)&-1; $106 = (($95) - ($105))|0; $44 = $106; } else { $44 = 0; } $107 = $44; $57 = $107; $20 = $63; $108 = $20; $109 = ((($108)) + 20|0); $19 = $109; $110 = $19; $18 = $110; $111 = $18; $60 = $111; $10 = $63; $112 = $10; $9 = $112; $113 = $9; $8 = $113; $114 = $8; $115 = ((($114)) + 8|0); $116 = HEAP32[$115>>2]|0; $117 = ((($114)) + 4|0); $118 = HEAP32[$117>>2]|0; $119 = $116; $120 = $118; $121 = (($119) - ($120))|0; $122 = (($121|0) / 4)&-1; $123 = ($122|0)==(0); if ($123) { $144 = 0; } else { $7 = $113; $124 = $7; $125 = ((($124)) + 8|0); $126 = HEAP32[$125>>2]|0; $127 = ((($124)) + 4|0); $128 = HEAP32[$127>>2]|0; $129 = $126; $130 = $128; $131 = (($129) - ($130))|0; $132 = (($131|0) / 4)&-1; $133 = ($132*93)|0; $134 = (($133) - 1)|0; $144 = $134; } $135 = ((($112)) + 16|0); $136 = HEAP32[$135>>2]|0; $6 = $112; $137 = $6; $138 = ((($137)) + 20|0); $5 = $138; $139 = $5; $4 = $139; $140 = $4; $141 = HEAP32[$140>>2]|0; $142 = (($136) + ($141))|0; $143 = (($144) - ($142))|0; $61 = $143; $145 = $57; $146 = $61; $147 = ($145>>>0)>($146>>>0); if ($147) { $148 = $57; $149 = $61; $150 = (($148) - ($149))|0; __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($63,$150); } __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($62,$63); while(1) { $13 = $1; $14 = $2; $151 = $13; $152 = $14; $11 = $151; $12 = $152; $153 = $11; $154 = ((($153)) + 4|0); $155 = HEAP32[$154>>2]|0; $156 = $12; $157 = ((($156)) + 4|0); $158 = HEAP32[$157>>2]|0; $159 = ($155|0)==($158|0); $160 = $159 ^ 1; if (!($160)) { break; } $161 = $60; $15 = $62; $162 = $15; $163 = ((($162)) + 4|0); $164 = HEAP32[$163>>2]|0; $16 = $164; $165 = $16; $17 = $1; $166 = $17; $167 = ((($166)) + 4|0); $168 = HEAP32[$167>>2]|0; $31 = $161; $32 = $165; $33 = $168; $169 = $31; $170 = $32; $171 = $33; $30 = $171; $172 = $30; ;HEAP8[$29>>0]=HEAP8[$34>>0]|0; $26 = $169; $27 = $170; $28 = $172; $173 = $26; $174 = $27; $175 = $28; $25 = $175; $176 = $25; $22 = $173; $23 = $174; $24 = $176; $177 = $23; $178 = $24; $21 = $178; $179 = $21; __ZN6laszip6models10arithmeticC2ERKS1_($177,$179); $35 = $62; $180 = $35; $181 = ((($180)) + 4|0); $182 = HEAP32[$181>>2]|0; $183 = ((($182)) + 44|0); HEAP32[$181>>2] = $183; $184 = HEAP32[$180>>2]|0; $185 = HEAP32[$184>>2]|0; $186 = $183; $187 = $185; $188 = (($186) - ($187))|0; $189 = (($188|0) / 44)&-1; $190 = ($189|0)==(93); if ($190) { $191 = HEAP32[$180>>2]|0; $192 = ((($191)) + 4|0); HEAP32[$180>>2] = $192; $193 = HEAP32[$180>>2]|0; $194 = HEAP32[$193>>2]|0; $195 = ((($180)) + 4|0); HEAP32[$195>>2] = $194; } $36 = $1; $196 = $36; $197 = ((($196)) + 4|0); $198 = HEAP32[$197>>2]|0; $199 = ((($198)) + 44|0); HEAP32[$197>>2] = $199; $200 = HEAP32[$196>>2]|0; $201 = HEAP32[$200>>2]|0; $202 = $199; $203 = $201; $204 = (($202) - ($203))|0; $205 = (($204|0) / 44)&-1; $206 = ($205|0)==(93); if ($206) { $207 = HEAP32[$196>>2]|0; $208 = ((($207)) + 4|0); HEAP32[$196>>2] = $208; $209 = HEAP32[$196>>2]|0; $210 = HEAP32[$209>>2]|0; $211 = ((($196)) + 4|0); HEAP32[$211>>2] = $210; } $39 = $63; $212 = $39; $213 = ((($212)) + 20|0); $38 = $213; $214 = $38; $37 = $214; $215 = $37; $216 = HEAP32[$215>>2]|0; $217 = (($216) + 1)|0; HEAP32[$215>>2] = $217; } STACKTOP = sp;return; } function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $13 = $0; $16 = $13; __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($16); $12 = $16; $17 = $12; $18 = ((($17)) + 4|0); $19 = HEAP32[$18>>2]|0; $14 = $19; $11 = $16; $20 = $11; $21 = ((($20)) + 8|0); $22 = HEAP32[$21>>2]|0; $15 = $22; while(1) { $23 = $14; $24 = $15; $25 = ($23|0)!=($24|0); if (!($25)) { break; } $10 = $16; $26 = $10; $27 = ((($26)) + 20|0); $9 = $27; $28 = $9; $8 = $28; $29 = $8; $30 = $14; $31 = HEAP32[$30>>2]|0; $5 = $29; $6 = $31; $7 = 93; $32 = $5; $33 = $6; $34 = $7; $2 = $32; $3 = $33; $4 = $34; $35 = $3; $1 = $35; $36 = $1; __ZdlPv($36); $37 = $14; $38 = ((($37)) + 4|0); $14 = $38; } __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($16); STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $19 = sp + 8|0; $22 = sp + 133|0; $29 = sp; $32 = sp + 132|0; $34 = $0; $35 = $34; $33 = $35; $36 = $33; $37 = ((($36)) + 4|0); $38 = HEAP32[$37>>2]|0; $30 = $36; $31 = $38; $39 = $30; $40 = $31; ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; $27 = $39; $28 = $40; $41 = $27; while(1) { $42 = $28; $43 = ((($41)) + 8|0); $44 = HEAP32[$43>>2]|0; $45 = ($42|0)!=($44|0); if (!($45)) { break; } $26 = $41; $46 = $26; $47 = ((($46)) + 12|0); $25 = $47; $48 = $25; $24 = $48; $49 = $24; $50 = ((($41)) + 8|0); $51 = HEAP32[$50>>2]|0; $52 = ((($51)) + -4|0); HEAP32[$50>>2] = $52; $23 = $52; $53 = $23; $20 = $49; $21 = $53; $54 = $20; $55 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $54; $18 = $55; $56 = $17; $57 = $18; $15 = $56; $16 = $57; } $58 = HEAP32[$35>>2]|0; $59 = ($58|0)!=(0|0); if (!($59)) { STACKTOP = sp;return; } $14 = $35; $60 = $14; $61 = ((($60)) + 12|0); $13 = $61; $62 = $13; $12 = $62; $63 = $12; $64 = HEAP32[$35>>2]|0; $4 = $35; $65 = $4; $3 = $65; $66 = $3; $67 = ((($66)) + 12|0); $2 = $67; $68 = $2; $1 = $68; $69 = $1; $70 = HEAP32[$69>>2]|0; $71 = HEAP32[$65>>2]|0; $72 = $70; $73 = $71; $74 = (($72) - ($73))|0; $75 = (($74|0) / 4)&-1; $9 = $63; $10 = $64; $11 = $75; $76 = $9; $77 = $10; $78 = $11; $6 = $76; $7 = $77; $8 = $78; $79 = $7; $5 = $79; $80 = $5; __ZdlPv($80); STACKTOP = sp;return; } function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $$byval_copy1 = 0, $$byval_copy2 = 0, $$byval_copy3 = 0, $$byval_copy4 = 0, $$byval_copy5 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0, $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0; var $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0, $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0; var $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0, $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0; var $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0, $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0; var $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $1071 = 0, $1072 = 0, $1073 = 0, $1074 = 0, $1075 = 0, $1076 = 0, $1077 = 0, $1078 = 0, $1079 = 0, $108 = 0, $1080 = 0, $1081 = 0, $1082 = 0, $1083 = 0; var $1084 = 0, $1085 = 0, $1086 = 0, $1087 = 0, $1088 = 0, $1089 = 0, $109 = 0, $1090 = 0, $1091 = 0, $1092 = 0, $1093 = 0, $1094 = 0, $1095 = 0, $1096 = 0, $1097 = 0, $1098 = 0, $1099 = 0, $11 = 0, $110 = 0, $1100 = 0; var $1101 = 0, $1102 = 0, $1103 = 0, $1104 = 0, $1105 = 0, $1106 = 0, $1107 = 0, $1108 = 0, $1109 = 0, $111 = 0, $1110 = 0, $1111 = 0, $1112 = 0, $1113 = 0, $1114 = 0, $1115 = 0, $1116 = 0, $1117 = 0, $1118 = 0, $1119 = 0; var $112 = 0, $1120 = 0, $1121 = 0, $1122 = 0, $1123 = 0, $1124 = 0, $1125 = 0, $1126 = 0, $1127 = 0, $1128 = 0, $1129 = 0, $113 = 0, $1130 = 0, $1131 = 0, $1132 = 0, $1133 = 0, $1134 = 0, $1135 = 0, $1136 = 0, $1137 = 0; var $1138 = 0, $1139 = 0, $114 = 0, $1140 = 0, $1141 = 0, $1142 = 0, $1143 = 0, $1144 = 0, $1145 = 0, $1146 = 0, $1147 = 0, $1148 = 0, $1149 = 0, $115 = 0, $1150 = 0, $1151 = 0, $1152 = 0, $1153 = 0, $1154 = 0, $1155 = 0; var $1156 = 0, $1157 = 0, $1158 = 0, $1159 = 0, $116 = 0, $1160 = 0, $1161 = 0, $1162 = 0, $1163 = 0, $1164 = 0, $1165 = 0, $1166 = 0, $1167 = 0, $1168 = 0, $1169 = 0, $117 = 0, $1170 = 0, $1171 = 0, $1172 = 0, $1173 = 0; var $1174 = 0, $1175 = 0, $1176 = 0, $1177 = 0, $1178 = 0, $1179 = 0, $118 = 0, $1180 = 0, $1181 = 0, $1182 = 0, $1183 = 0, $1184 = 0, $1185 = 0, $1186 = 0, $1187 = 0, $1188 = 0, $1189 = 0, $119 = 0, $1190 = 0, $1191 = 0; var $1192 = 0, $1193 = 0, $1194 = 0, $1195 = 0, $1196 = 0, $1197 = 0, $1198 = 0, $1199 = 0, $12 = 0, $120 = 0, $1200 = 0, $1201 = 0, $1202 = 0, $1203 = 0, $1204 = 0, $1205 = 0, $1206 = 0, $1207 = 0, $1208 = 0, $1209 = 0; var $121 = 0, $1210 = 0, $1211 = 0, $1212 = 0, $1213 = 0, $1214 = 0, $1215 = 0, $1216 = 0, $1217 = 0, $1218 = 0, $1219 = 0, $122 = 0, $1220 = 0, $1221 = 0, $1222 = 0, $1223 = 0, $1224 = 0, $1225 = 0, $1226 = 0, $1227 = 0; var $1228 = 0, $1229 = 0, $123 = 0, $1230 = 0, $1231 = 0, $1232 = 0, $1233 = 0, $1234 = 0, $1235 = 0, $1236 = 0, $1237 = 0, $1238 = 0, $1239 = 0, $124 = 0, $1240 = 0, $1241 = 0, $1242 = 0, $1243 = 0, $1244 = 0, $1245 = 0; var $1246 = 0, $1247 = 0, $1248 = 0, $1249 = 0, $125 = 0, $1250 = 0, $1251 = 0, $1252 = 0, $1253 = 0, $1254 = 0, $1255 = 0, $1256 = 0, $1257 = 0, $1258 = 0, $1259 = 0, $126 = 0, $1260 = 0, $1261 = 0, $1262 = 0, $1263 = 0; var $1264 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0; var $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0; var $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0; var $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0; var $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0; var $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0; var $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0; var $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0; var $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0; var $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0; var $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0; var $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0; var $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0; var $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0; var $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0; var $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0; var $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0, $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0; var $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0, $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0; var $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0, $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0; var $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0, $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0; var $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0, $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0; var $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0, $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0; var $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0, $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0; var $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0, $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0; var $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0, $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0; var $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0, $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0; var $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0, $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0; var $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0, $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0; var $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0, $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0; var $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0, $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0; var $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0, $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0; var $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0, $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0; var $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0, $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0; var $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0, $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0; var $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0, $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0; var $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0, $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0; var $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0, $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0; var $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0, $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0; var $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0, $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0; var $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0, $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0; var $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0, $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0; var $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0, $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0; var $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0, $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0; var $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0, $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0; var $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0, $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0; var $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0, $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0; var $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0, $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0; var $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0, $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0; var $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0, $997 = 0, $998 = 0, $999 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 1744|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(1744|0); $$byval_copy5 = sp + 1724|0; $$byval_copy4 = sp + 1720|0; $$byval_copy3 = sp + 1716|0; $$byval_copy2 = sp + 1712|0; $$byval_copy1 = sp + 1708|0; $$byval_copy = sp + 1704|0; $22 = sp + 80|0; $25 = sp + 1738|0; $43 = sp + 72|0; $46 = sp + 1737|0; $52 = sp + 1516|0; $58 = sp + 1492|0; $64 = sp + 1468|0; $76 = sp + 1420|0; $102 = sp + 64|0; $107 = sp + 1736|0; $115 = sp + 1272|0; $116 = sp + 1268|0; $117 = sp + 1248|0; $118 = sp + 1244|0; $119 = sp + 1240|0; $122 = sp + 56|0; $125 = sp + 1735|0; $170 = sp + 48|0; $173 = sp + 1734|0; $179 = sp + 1016|0; $185 = sp + 992|0; $191 = sp + 968|0; $203 = sp + 920|0; $229 = sp + 40|0; $234 = sp + 1733|0; $242 = sp + 772|0; $243 = sp + 768|0; $244 = sp + 748|0; $245 = sp + 744|0; $246 = sp + 740|0; $249 = sp + 32|0; $252 = sp + 1732|0; $267 = sp + 24|0; $270 = sp + 1731|0; $276 = sp + 636|0; $282 = sp + 612|0; $288 = sp + 588|0; $300 = sp + 540|0; $326 = sp + 16|0; $331 = sp + 1730|0; $339 = sp + 392|0; $340 = sp + 388|0; $341 = sp + 368|0; $342 = sp + 364|0; $343 = sp + 360|0; $346 = sp + 8|0; $349 = sp + 1729|0; $358 = sp; $361 = sp + 1728|0; $367 = sp + 280|0; $373 = sp + 256|0; $379 = sp + 232|0; $391 = sp + 184|0; $401 = sp + 144|0; $402 = sp + 140|0; $403 = sp + 136|0; $404 = sp + 132|0; $405 = sp + 128|0; $406 = sp + 124|0; $408 = sp + 100|0; $409 = sp + 96|0; $410 = sp + 92|0; $411 = sp + 88|0; $398 = $0; $399 = $1; $413 = $398; $397 = $413; $414 = $397; $415 = ((($414)) + 20|0); $396 = $415; $416 = $396; $395 = $416; $417 = $395; $400 = $417; $418 = $399; $394 = $413; $419 = $394; $420 = ((($419)) + 8|0); $421 = HEAP32[$420>>2]|0; $422 = ((($419)) + 4|0); $423 = HEAP32[$422>>2]|0; $424 = ($421|0)==($423|0); $425 = $424&1; $426 = (($418) + ($425))|0; $393 = $426; $427 = $393; $428 = (($427>>>0) / 93)&-1; $429 = $393; $430 = (($429>>>0) % 93)&-1; $431 = ($430|0)!=(0); $432 = $431&1; $433 = (($428) + ($432))|0; HEAP32[$401>>2] = $433; $392 = $413; $434 = $392; $435 = ((($434)) + 16|0); $436 = HEAP32[$435>>2]|0; $437 = (($436>>>0) / 93)&-1; HEAP32[$402>>2] = $437; $359 = $402; $360 = $401; $438 = $359; $439 = $360; ;HEAP8[$358>>0]=HEAP8[$361>>0]|0; $356 = $438; $357 = $439; $440 = $357; $441 = $356; $353 = $358; $354 = $440; $355 = $441; $442 = $354; $443 = HEAP32[$442>>2]|0; $444 = $355; $445 = HEAP32[$444>>2]|0; $446 = ($443>>>0)<($445>>>0); $447 = $357; $448 = $356; $449 = $446 ? $447 : $448; $450 = HEAP32[$449>>2]|0; HEAP32[$402>>2] = $450; $451 = HEAP32[$402>>2]|0; $452 = HEAP32[$401>>2]|0; $453 = (($452) - ($451))|0; HEAP32[$401>>2] = $453; $454 = HEAP32[$401>>2]|0; $455 = ($454|0)==(0); if ($455) { $456 = HEAP32[$402>>2]|0; $457 = ($456*93)|0; $458 = ((($413)) + 16|0); $459 = HEAP32[$458>>2]|0; $460 = (($459) - ($457))|0; HEAP32[$458>>2] = $460; while(1) { $461 = HEAP32[$402>>2]|0; $462 = ($461>>>0)>(0); if (!($462)) { break; } $254 = $413; $463 = $254; $464 = ((($463)) + 4|0); $465 = HEAP32[$464>>2]|0; $466 = HEAP32[$465>>2]|0; HEAP32[$403>>2] = $466; $253 = $413; $467 = $253; $468 = ((($467)) + 4|0); $469 = HEAP32[$468>>2]|0; $470 = ((($469)) + 4|0); $250 = $467; $251 = $470; $471 = $250; $472 = $251; ;HEAP8[$249>>0]=HEAP8[$252>>0]|0; $247 = $471; $248 = $472; $473 = $247; $474 = $248; $475 = ((($473)) + 4|0); HEAP32[$475>>2] = $474; $238 = $413; $239 = $403; $476 = $238; $477 = ((($476)) + 8|0); $478 = HEAP32[$477>>2]|0; $237 = $476; $479 = $237; $480 = ((($479)) + 12|0); $236 = $480; $481 = $236; $235 = $481; $482 = $235; $483 = HEAP32[$482>>2]|0; $484 = ($478|0)==($483|0); do { if ($484) { $485 = ((($476)) + 4|0); $486 = HEAP32[$485>>2]|0; $487 = HEAP32[$476>>2]|0; $488 = ($486>>>0)>($487>>>0); if (!($488)) { $206 = $476; $535 = $206; $536 = ((($535)) + 12|0); $205 = $536; $537 = $205; $204 = $537; $538 = $204; $539 = HEAP32[$538>>2]|0; $540 = HEAP32[$476>>2]|0; $541 = $539; $542 = $540; $543 = (($541) - ($542))|0; $544 = (($543|0) / 4)&-1; $545 = $544<<1; HEAP32[$242>>2] = $545; HEAP32[$243>>2] = 1; $171 = $242; $172 = $243; $546 = $171; $547 = $172; ;HEAP8[$170>>0]=HEAP8[$173>>0]|0; $168 = $546; $169 = $547; $548 = $168; $549 = $169; $165 = $170; $166 = $548; $167 = $549; $550 = $166; $551 = HEAP32[$550>>2]|0; $552 = $167; $553 = HEAP32[$552>>2]|0; $554 = ($551>>>0)<($553>>>0); $555 = $169; $556 = $168; $557 = $554 ? $555 : $556; $558 = HEAP32[$557>>2]|0; $241 = $558; $559 = $241; $560 = $241; $561 = (($560>>>0) / 4)&-1; $160 = $476; $562 = $160; $563 = ((($562)) + 12|0); $159 = $563; $564 = $159; $158 = $564; $565 = $158; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($244,$559,$561,$565); $566 = ((($476)) + 4|0); $567 = HEAP32[$566>>2]|0; $161 = $245; $162 = $567; $568 = $161; $569 = $162; HEAP32[$568>>2] = $569; $570 = ((($476)) + 8|0); $571 = HEAP32[$570>>2]|0; $163 = $246; $164 = $571; $572 = $163; $573 = $164; HEAP32[$572>>2] = $573; ;HEAP32[$$byval_copy>>2]=HEAP32[$245>>2]|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$246>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($244,$$byval_copy,$$byval_copy1); $177 = $476; $178 = $244; $574 = $177; $176 = $574; $575 = $176; $576 = HEAP32[$575>>2]|0; HEAP32[$179>>2] = $576; $577 = $178; $174 = $577; $578 = $174; $579 = HEAP32[$578>>2]|0; $580 = $177; HEAP32[$580>>2] = $579; $175 = $179; $581 = $175; $582 = HEAP32[$581>>2]|0; $583 = $178; HEAP32[$583>>2] = $582; $584 = ((($476)) + 4|0); $585 = ((($244)) + 4|0); $183 = $584; $184 = $585; $586 = $183; $182 = $586; $587 = $182; $588 = HEAP32[$587>>2]|0; HEAP32[$185>>2] = $588; $589 = $184; $180 = $589; $590 = $180; $591 = HEAP32[$590>>2]|0; $592 = $183; HEAP32[$592>>2] = $591; $181 = $185; $593 = $181; $594 = HEAP32[$593>>2]|0; $595 = $184; HEAP32[$595>>2] = $594; $596 = ((($476)) + 8|0); $597 = ((($244)) + 8|0); $189 = $596; $190 = $597; $598 = $189; $188 = $598; $599 = $188; $600 = HEAP32[$599>>2]|0; HEAP32[$191>>2] = $600; $601 = $190; $186 = $601; $602 = $186; $603 = HEAP32[$602>>2]|0; $604 = $189; HEAP32[$604>>2] = $603; $187 = $191; $605 = $187; $606 = HEAP32[$605>>2]|0; $607 = $190; HEAP32[$607>>2] = $606; $194 = $476; $608 = $194; $609 = ((($608)) + 12|0); $193 = $609; $610 = $193; $192 = $610; $611 = $192; $197 = $244; $612 = $197; $613 = ((($612)) + 12|0); $196 = $613; $614 = $196; $195 = $614; $615 = $195; $201 = $611; $202 = $615; $616 = $201; $200 = $616; $617 = $200; $618 = HEAP32[$617>>2]|0; HEAP32[$203>>2] = $618; $619 = $202; $198 = $619; $620 = $198; $621 = HEAP32[$620>>2]|0; $622 = $201; HEAP32[$622>>2] = $621; $199 = $203; $623 = $199; $624 = HEAP32[$623>>2]|0; $625 = $202; HEAP32[$625>>2] = $624; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($244); break; } $489 = ((($476)) + 4|0); $490 = HEAP32[$489>>2]|0; $491 = HEAP32[$476>>2]|0; $492 = $490; $493 = $491; $494 = (($492) - ($493))|0; $495 = (($494|0) / 4)&-1; $240 = $495; $496 = $240; $497 = (($496) + 1)|0; $498 = (($497|0) / 2)&-1; $240 = $498; $499 = ((($476)) + 4|0); $500 = HEAP32[$499>>2]|0; $501 = ((($476)) + 8|0); $502 = HEAP32[$501>>2]|0; $503 = ((($476)) + 4|0); $504 = HEAP32[$503>>2]|0; $505 = $240; $506 = (0 - ($505))|0; $507 = (($504) + ($506<<2)|0); $214 = $500; $215 = $502; $216 = $507; $508 = $214; $213 = $508; $509 = $213; $510 = $215; $207 = $510; $511 = $207; $512 = $216; $208 = $512; $513 = $208; $209 = $509; $210 = $511; $211 = $513; $514 = $210; $515 = $209; $516 = $514; $517 = $515; $518 = (($516) - ($517))|0; $519 = (($518|0) / 4)&-1; $212 = $519; $520 = $212; $521 = ($520>>>0)>(0); if ($521) { $522 = $211; $523 = $209; $524 = $212; $525 = $524<<2; _memmove(($522|0),($523|0),($525|0))|0; } $526 = $211; $527 = $212; $528 = (($526) + ($527<<2)|0); $529 = ((($476)) + 8|0); HEAP32[$529>>2] = $528; $530 = $240; $531 = ((($476)) + 4|0); $532 = HEAP32[$531>>2]|0; $533 = (0 - ($530))|0; $534 = (($532) + ($533<<2)|0); HEAP32[$531>>2] = $534; } } while(0); $219 = $476; $626 = $219; $627 = ((($626)) + 12|0); $218 = $627; $628 = $218; $217 = $628; $629 = $217; $630 = ((($476)) + 8|0); $631 = HEAP32[$630>>2]|0; $220 = $631; $632 = $220; $633 = $239; $231 = $629; $232 = $632; $233 = $633; $634 = $231; $635 = $232; $636 = $233; $230 = $636; $637 = $230; ;HEAP8[$229>>0]=HEAP8[$234>>0]|0; $226 = $634; $227 = $635; $228 = $637; $638 = $226; $639 = $227; $640 = $228; $225 = $640; $641 = $225; $222 = $638; $223 = $639; $224 = $641; $642 = $223; $643 = $224; $221 = $643; $644 = $221; $645 = HEAP32[$644>>2]|0; HEAP32[$642>>2] = $645; $646 = ((($476)) + 8|0); $647 = HEAP32[$646>>2]|0; $648 = ((($647)) + 4|0); HEAP32[$646>>2] = $648; $649 = HEAP32[$402>>2]|0; $650 = (($649) + -1)|0; HEAP32[$402>>2] = $650; } STACKTOP = sp;return; } $651 = HEAP32[$401>>2]|0; $157 = $413; $652 = $157; $156 = $652; $653 = $156; $654 = ((($653)) + 12|0); $155 = $654; $655 = $155; $154 = $655; $656 = $154; $657 = HEAP32[$656>>2]|0; $658 = HEAP32[$652>>2]|0; $659 = $657; $660 = $658; $661 = (($659) - ($660))|0; $662 = (($661|0) / 4)&-1; $153 = $413; $663 = $153; $664 = ((($663)) + 8|0); $665 = HEAP32[$664>>2]|0; $666 = ((($663)) + 4|0); $667 = HEAP32[$666>>2]|0; $668 = $665; $669 = $667; $670 = (($668) - ($669))|0; $671 = (($670|0) / 4)&-1; $672 = (($662) - ($671))|0; $673 = ($651>>>0)<=($672>>>0); if (!($673)) { $935 = HEAP32[$402>>2]|0; $936 = ($935*93)|0; $407 = $936; $30 = $413; $937 = $30; $29 = $937; $938 = $29; $939 = ((($938)) + 12|0); $28 = $939; $940 = $28; $27 = $940; $941 = $27; $942 = HEAP32[$941>>2]|0; $943 = HEAP32[$937>>2]|0; $944 = $942; $945 = $943; $946 = (($944) - ($945))|0; $947 = (($946|0) / 4)&-1; $948 = $947<<1; HEAP32[$409>>2] = $948; $949 = HEAP32[$401>>2]|0; $26 = $413; $950 = $26; $951 = ((($950)) + 8|0); $952 = HEAP32[$951>>2]|0; $953 = ((($950)) + 4|0); $954 = HEAP32[$953>>2]|0; $955 = $952; $956 = $954; $957 = (($955) - ($956))|0; $958 = (($957|0) / 4)&-1; $959 = (($949) + ($958))|0; HEAP32[$410>>2] = $959; $23 = $409; $24 = $410; $960 = $23; $961 = $24; ;HEAP8[$22>>0]=HEAP8[$25>>0]|0; $20 = $960; $21 = $961; $962 = $20; $963 = $21; $17 = $22; $18 = $962; $19 = $963; $964 = $18; $965 = HEAP32[$964>>2]|0; $966 = $19; $967 = HEAP32[$966>>2]|0; $968 = ($965>>>0)<($967>>>0); $969 = $21; $970 = $20; $971 = $968 ? $969 : $970; $972 = HEAP32[$971>>2]|0; $16 = $413; $973 = $16; $974 = ((($973)) + 8|0); $975 = HEAP32[$974>>2]|0; $976 = ((($973)) + 4|0); $977 = HEAP32[$976>>2]|0; $978 = $975; $979 = $977; $980 = (($978) - ($979))|0; $981 = (($980|0) / 4)&-1; $982 = HEAP32[$402>>2]|0; $983 = (($981) - ($982))|0; $15 = $413; $984 = $15; $985 = ((($984)) + 12|0); $14 = $985; $986 = $14; $13 = $986; $987 = $13; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($408,$972,$983,$987); while(1) { $988 = HEAP32[$401>>2]|0; $989 = ($988>>>0)>(0); if (!($989)) { break; } $990 = $400; $11 = $990; $12 = 93; $991 = $11; $992 = $12; $8 = $991; $9 = $992; $10 = 0; $993 = $8; $994 = $9; $7 = $993; $995 = ($994>>>0)>(97612893); if ($995) { label = 35; break; } $1000 = $9; $1001 = ($1000*44)|0; $6 = $1001; $1002 = $6; $1003 = (__Znwj($1002)|0); HEAP32[$411>>2] = $1003; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($408,$411); $1004 = HEAP32[$401>>2]|0; $1005 = (($1004) + -1)|0; HEAP32[$401>>2] = $1005; } if ((label|0) == 35) { $5 = 4287; $996 = (___cxa_allocate_exception(8)|0); $997 = $5; $3 = $996; $4 = $997; $998 = $3; $999 = $4; __ZNSt11logic_errorC2EPKc($998,$999); HEAP32[$998>>2] = (3660); ___cxa_throw(($996|0),(1384|0),(220|0)); // unreachable; } while(1) { $1006 = HEAP32[$402>>2]|0; $1007 = ($1006>>>0)>(0); if (!($1007)) { break; } $2 = $413; $1008 = $2; $1009 = ((($1008)) + 4|0); $1010 = HEAP32[$1009>>2]|0; $335 = $408; $336 = $1010; $1011 = $335; $1012 = ((($1011)) + 8|0); $1013 = HEAP32[$1012>>2]|0; $334 = $1011; $1014 = $334; $1015 = ((($1014)) + 12|0); $333 = $1015; $1016 = $333; $332 = $1016; $1017 = $332; $1018 = HEAP32[$1017>>2]|0; $1019 = ($1013|0)==($1018|0); do { if ($1019) { $1020 = ((($1011)) + 4|0); $1021 = HEAP32[$1020>>2]|0; $1022 = HEAP32[$1011>>2]|0; $1023 = ($1021>>>0)>($1022>>>0); if (!($1023)) { $303 = $1011; $1070 = $303; $1071 = ((($1070)) + 12|0); $302 = $1071; $1072 = $302; $301 = $1072; $1073 = $301; $1074 = HEAP32[$1073>>2]|0; $1075 = HEAP32[$1011>>2]|0; $1076 = $1074; $1077 = $1075; $1078 = (($1076) - ($1077))|0; $1079 = (($1078|0) / 4)&-1; $1080 = $1079<<1; HEAP32[$339>>2] = $1080; HEAP32[$340>>2] = 1; $268 = $339; $269 = $340; $1081 = $268; $1082 = $269; ;HEAP8[$267>>0]=HEAP8[$270>>0]|0; $265 = $1081; $266 = $1082; $1083 = $265; $1084 = $266; $262 = $267; $263 = $1083; $264 = $1084; $1085 = $263; $1086 = HEAP32[$1085>>2]|0; $1087 = $264; $1088 = HEAP32[$1087>>2]|0; $1089 = ($1086>>>0)<($1088>>>0); $1090 = $266; $1091 = $265; $1092 = $1089 ? $1090 : $1091; $1093 = HEAP32[$1092>>2]|0; $338 = $1093; $1094 = $338; $1095 = $338; $1096 = (($1095>>>0) / 4)&-1; $257 = $1011; $1097 = $257; $1098 = ((($1097)) + 12|0); $256 = $1098; $1099 = $256; $1100 = ((($1099)) + 4|0); $255 = $1100; $1101 = $255; $1102 = HEAP32[$1101>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($341,$1094,$1096,$1102); $1103 = ((($1011)) + 4|0); $1104 = HEAP32[$1103>>2]|0; $258 = $342; $259 = $1104; $1105 = $258; $1106 = $259; HEAP32[$1105>>2] = $1106; $1107 = ((($1011)) + 8|0); $1108 = HEAP32[$1107>>2]|0; $260 = $343; $261 = $1108; $1109 = $260; $1110 = $261; HEAP32[$1109>>2] = $1110; ;HEAP32[$$byval_copy4>>2]=HEAP32[$342>>2]|0; ;HEAP32[$$byval_copy5>>2]=HEAP32[$343>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($341,$$byval_copy4,$$byval_copy5); $274 = $1011; $275 = $341; $1111 = $274; $273 = $1111; $1112 = $273; $1113 = HEAP32[$1112>>2]|0; HEAP32[$276>>2] = $1113; $1114 = $275; $271 = $1114; $1115 = $271; $1116 = HEAP32[$1115>>2]|0; $1117 = $274; HEAP32[$1117>>2] = $1116; $272 = $276; $1118 = $272; $1119 = HEAP32[$1118>>2]|0; $1120 = $275; HEAP32[$1120>>2] = $1119; $1121 = ((($1011)) + 4|0); $1122 = ((($341)) + 4|0); $280 = $1121; $281 = $1122; $1123 = $280; $279 = $1123; $1124 = $279; $1125 = HEAP32[$1124>>2]|0; HEAP32[$282>>2] = $1125; $1126 = $281; $277 = $1126; $1127 = $277; $1128 = HEAP32[$1127>>2]|0; $1129 = $280; HEAP32[$1129>>2] = $1128; $278 = $282; $1130 = $278; $1131 = HEAP32[$1130>>2]|0; $1132 = $281; HEAP32[$1132>>2] = $1131; $1133 = ((($1011)) + 8|0); $1134 = ((($341)) + 8|0); $286 = $1133; $287 = $1134; $1135 = $286; $285 = $1135; $1136 = $285; $1137 = HEAP32[$1136>>2]|0; HEAP32[$288>>2] = $1137; $1138 = $287; $283 = $1138; $1139 = $283; $1140 = HEAP32[$1139>>2]|0; $1141 = $286; HEAP32[$1141>>2] = $1140; $284 = $288; $1142 = $284; $1143 = HEAP32[$1142>>2]|0; $1144 = $287; HEAP32[$1144>>2] = $1143; $291 = $1011; $1145 = $291; $1146 = ((($1145)) + 12|0); $290 = $1146; $1147 = $290; $289 = $1147; $1148 = $289; $294 = $341; $1149 = $294; $1150 = ((($1149)) + 12|0); $293 = $1150; $1151 = $293; $292 = $1151; $1152 = $292; $298 = $1148; $299 = $1152; $1153 = $298; $297 = $1153; $1154 = $297; $1155 = HEAP32[$1154>>2]|0; HEAP32[$300>>2] = $1155; $1156 = $299; $295 = $1156; $1157 = $295; $1158 = HEAP32[$1157>>2]|0; $1159 = $298; HEAP32[$1159>>2] = $1158; $296 = $300; $1160 = $296; $1161 = HEAP32[$1160>>2]|0; $1162 = $299; HEAP32[$1162>>2] = $1161; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($341); break; } $1024 = ((($1011)) + 4|0); $1025 = HEAP32[$1024>>2]|0; $1026 = HEAP32[$1011>>2]|0; $1027 = $1025; $1028 = $1026; $1029 = (($1027) - ($1028))|0; $1030 = (($1029|0) / 4)&-1; $337 = $1030; $1031 = $337; $1032 = (($1031) + 1)|0; $1033 = (($1032|0) / 2)&-1; $337 = $1033; $1034 = ((($1011)) + 4|0); $1035 = HEAP32[$1034>>2]|0; $1036 = ((($1011)) + 8|0); $1037 = HEAP32[$1036>>2]|0; $1038 = ((($1011)) + 4|0); $1039 = HEAP32[$1038>>2]|0; $1040 = $337; $1041 = (0 - ($1040))|0; $1042 = (($1039) + ($1041<<2)|0); $311 = $1035; $312 = $1037; $313 = $1042; $1043 = $311; $310 = $1043; $1044 = $310; $1045 = $312; $304 = $1045; $1046 = $304; $1047 = $313; $305 = $1047; $1048 = $305; $306 = $1044; $307 = $1046; $308 = $1048; $1049 = $307; $1050 = $306; $1051 = $1049; $1052 = $1050; $1053 = (($1051) - ($1052))|0; $1054 = (($1053|0) / 4)&-1; $309 = $1054; $1055 = $309; $1056 = ($1055>>>0)>(0); if ($1056) { $1057 = $308; $1058 = $306; $1059 = $309; $1060 = $1059<<2; _memmove(($1057|0),($1058|0),($1060|0))|0; } $1061 = $308; $1062 = $309; $1063 = (($1061) + ($1062<<2)|0); $1064 = ((($1011)) + 8|0); HEAP32[$1064>>2] = $1063; $1065 = $337; $1066 = ((($1011)) + 4|0); $1067 = HEAP32[$1066>>2]|0; $1068 = (0 - ($1065))|0; $1069 = (($1067) + ($1068<<2)|0); HEAP32[$1066>>2] = $1069; } } while(0); $316 = $1011; $1163 = $316; $1164 = ((($1163)) + 12|0); $315 = $1164; $1165 = $315; $1166 = ((($1165)) + 4|0); $314 = $1166; $1167 = $314; $1168 = HEAP32[$1167>>2]|0; $1169 = ((($1011)) + 8|0); $1170 = HEAP32[$1169>>2]|0; $317 = $1170; $1171 = $317; $1172 = $336; $328 = $1168; $329 = $1171; $330 = $1172; $1173 = $328; $1174 = $329; $1175 = $330; $327 = $1175; $1176 = $327; ;HEAP8[$326>>0]=HEAP8[$331>>0]|0; $323 = $1173; $324 = $1174; $325 = $1176; $1177 = $323; $1178 = $324; $1179 = $325; $322 = $1179; $1180 = $322; $319 = $1177; $320 = $1178; $321 = $1180; $1181 = $320; $1182 = $321; $318 = $1182; $1183 = $318; $1184 = HEAP32[$1183>>2]|0; HEAP32[$1181>>2] = $1184; $1185 = ((($1011)) + 8|0); $1186 = HEAP32[$1185>>2]|0; $1187 = ((($1186)) + 4|0); HEAP32[$1185>>2] = $1187; $350 = $413; $1188 = $350; $1189 = ((($1188)) + 4|0); $1190 = HEAP32[$1189>>2]|0; $1191 = ((($1190)) + 4|0); $347 = $1188; $348 = $1191; $1192 = $347; $1193 = $348; ;HEAP8[$346>>0]=HEAP8[$349>>0]|0; $344 = $1192; $345 = $1193; $1194 = $344; $1195 = $345; $1196 = ((($1194)) + 4|0); HEAP32[$1196>>2] = $1195; $1197 = HEAP32[$402>>2]|0; $1198 = (($1197) + -1)|0; HEAP32[$402>>2] = $1198; } $351 = $413; $1199 = $351; $1200 = ((($1199)) + 8|0); $1201 = HEAP32[$1200>>2]|0; $412 = $1201; while(1) { $1202 = $412; $352 = $413; $1203 = $352; $1204 = ((($1203)) + 4|0); $1205 = HEAP32[$1204>>2]|0; $1206 = ($1202|0)!=($1205|0); if (!($1206)) { break; } $1207 = $412; $1208 = ((($1207)) + -4|0); $412 = $1208; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($408,$1208); } $365 = $413; $366 = $408; $1209 = $365; $364 = $1209; $1210 = $364; $1211 = HEAP32[$1210>>2]|0; HEAP32[$367>>2] = $1211; $1212 = $366; $362 = $1212; $1213 = $362; $1214 = HEAP32[$1213>>2]|0; $1215 = $365; HEAP32[$1215>>2] = $1214; $363 = $367; $1216 = $363; $1217 = HEAP32[$1216>>2]|0; $1218 = $366; HEAP32[$1218>>2] = $1217; $1219 = ((($413)) + 4|0); $1220 = ((($408)) + 4|0); $371 = $1219; $372 = $1220; $1221 = $371; $370 = $1221; $1222 = $370; $1223 = HEAP32[$1222>>2]|0; HEAP32[$373>>2] = $1223; $1224 = $372; $368 = $1224; $1225 = $368; $1226 = HEAP32[$1225>>2]|0; $1227 = $371; HEAP32[$1227>>2] = $1226; $369 = $373; $1228 = $369; $1229 = HEAP32[$1228>>2]|0; $1230 = $372; HEAP32[$1230>>2] = $1229; $1231 = ((($413)) + 8|0); $1232 = ((($408)) + 8|0); $377 = $1231; $378 = $1232; $1233 = $377; $376 = $1233; $1234 = $376; $1235 = HEAP32[$1234>>2]|0; HEAP32[$379>>2] = $1235; $1236 = $378; $374 = $1236; $1237 = $374; $1238 = HEAP32[$1237>>2]|0; $1239 = $377; HEAP32[$1239>>2] = $1238; $375 = $379; $1240 = $375; $1241 = HEAP32[$1240>>2]|0; $1242 = $378; HEAP32[$1242>>2] = $1241; $382 = $413; $1243 = $382; $1244 = ((($1243)) + 12|0); $381 = $1244; $1245 = $381; $380 = $1245; $1246 = $380; $385 = $408; $1247 = $385; $1248 = ((($1247)) + 12|0); $384 = $1248; $1249 = $384; $383 = $1249; $1250 = $383; $389 = $1246; $390 = $1250; $1251 = $389; $388 = $1251; $1252 = $388; $1253 = HEAP32[$1252>>2]|0; HEAP32[$391>>2] = $1253; $1254 = $390; $386 = $1254; $1255 = $386; $1256 = HEAP32[$1255>>2]|0; $1257 = $389; HEAP32[$1257>>2] = $1256; $387 = $391; $1258 = $387; $1259 = HEAP32[$1258>>2]|0; $1260 = $390; HEAP32[$1260>>2] = $1259; $1261 = $407; $1262 = ((($413)) + 16|0); $1263 = HEAP32[$1262>>2]|0; $1264 = (($1263) - ($1261))|0; HEAP32[$1262>>2] = $1264; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($408); STACKTOP = sp;return; } while(1) { $674 = HEAP32[$401>>2]|0; $675 = ($674>>>0)>(0); if (!($675)) { break; } $152 = $413; $676 = $152; $151 = $676; $677 = $151; $678 = ((($677)) + 12|0); $150 = $678; $679 = $150; $149 = $679; $680 = $149; $681 = HEAP32[$680>>2]|0; $682 = ((($676)) + 8|0); $683 = HEAP32[$682>>2]|0; $684 = $681; $685 = $683; $686 = (($684) - ($685))|0; $687 = (($686|0) / 4)&-1; $688 = ($687|0)==(0); if ($688) { break; } $689 = $400; $147 = $689; $148 = 93; $690 = $147; $691 = $148; $144 = $690; $145 = $691; $146 = 0; $692 = $144; $693 = $145; $143 = $692; $694 = ($693>>>0)>(97612893); if ($694) { label = 16; break; } $699 = $145; $700 = ($699*44)|0; $142 = $700; $701 = $142; $702 = (__Znwj($701)|0); HEAP32[$404>>2] = $702; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($413,$404); $703 = HEAP32[$401>>2]|0; $704 = (($703) + -1)|0; HEAP32[$401>>2] = $704; } if ((label|0) == 16) { $141 = 4287; $695 = (___cxa_allocate_exception(8)|0); $696 = $141; $139 = $695; $140 = $696; $697 = $139; $698 = $140; __ZNSt11logic_errorC2EPKc($697,$698); HEAP32[$697>>2] = (3660); ___cxa_throw(($695|0),(1384|0),(220|0)); // unreachable; } while(1) { $705 = HEAP32[$401>>2]|0; $706 = ($705>>>0)>(0); if (!($706)) { break; } $707 = $400; $137 = $707; $138 = 93; $708 = $137; $709 = $138; $134 = $708; $135 = $709; $136 = 0; $710 = $134; $711 = $135; $133 = $710; $712 = ($711>>>0)>(97612893); if ($712) { label = 21; break; } $717 = $135; $718 = ($717*44)|0; $132 = $718; $719 = $132; $720 = (__Znwj($719)|0); HEAP32[$405>>2] = $720; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($413,$405); $721 = HEAP32[$401>>2]|0; $722 = (($721) + -1)|0; HEAP32[$401>>2] = $722; $723 = HEAP32[$402>>2]|0; $724 = (($723) + 1)|0; HEAP32[$402>>2] = $724; $128 = $413; $725 = $128; $726 = ((($725)) + 8|0); $727 = HEAP32[$726>>2]|0; $728 = ((($725)) + 4|0); $729 = HEAP32[$728>>2]|0; $730 = $727; $731 = $729; $732 = (($730) - ($731))|0; $733 = (($732|0) / 4)&-1; $734 = ($733|0)==(1); $735 = $734&1; $736 = (93 - ($735))|0; $737 = ((($413)) + 16|0); $738 = HEAP32[$737>>2]|0; $739 = (($738) + ($736))|0; HEAP32[$737>>2] = $739; } if ((label|0) == 21) { $131 = 4287; $713 = (___cxa_allocate_exception(8)|0); $714 = $131; $129 = $713; $130 = $714; $715 = $129; $716 = $130; __ZNSt11logic_errorC2EPKc($715,$716); HEAP32[$715>>2] = (3660); ___cxa_throw(($713|0),(1384|0),(220|0)); // unreachable; } $740 = HEAP32[$402>>2]|0; $741 = ($740*93)|0; $742 = ((($413)) + 16|0); $743 = HEAP32[$742>>2]|0; $744 = (($743) - ($741))|0; HEAP32[$742>>2] = $744; while(1) { $745 = HEAP32[$402>>2]|0; $746 = ($745>>>0)>(0); if (!($746)) { break; } $127 = $413; $747 = $127; $748 = ((($747)) + 4|0); $749 = HEAP32[$748>>2]|0; $750 = HEAP32[$749>>2]|0; HEAP32[$406>>2] = $750; $126 = $413; $751 = $126; $752 = ((($751)) + 4|0); $753 = HEAP32[$752>>2]|0; $754 = ((($753)) + 4|0); $123 = $751; $124 = $754; $755 = $123; $756 = $124; ;HEAP8[$122>>0]=HEAP8[$125>>0]|0; $120 = $755; $121 = $756; $757 = $120; $758 = $121; $759 = ((($757)) + 4|0); HEAP32[$759>>2] = $758; $111 = $413; $112 = $406; $760 = $111; $761 = ((($760)) + 8|0); $762 = HEAP32[$761>>2]|0; $110 = $760; $763 = $110; $764 = ((($763)) + 12|0); $109 = $764; $765 = $109; $108 = $765; $766 = $108; $767 = HEAP32[$766>>2]|0; $768 = ($762|0)==($767|0); do { if ($768) { $769 = ((($760)) + 4|0); $770 = HEAP32[$769>>2]|0; $771 = HEAP32[$760>>2]|0; $772 = ($770>>>0)>($771>>>0); if (!($772)) { $79 = $760; $819 = $79; $820 = ((($819)) + 12|0); $78 = $820; $821 = $78; $77 = $821; $822 = $77; $823 = HEAP32[$822>>2]|0; $824 = HEAP32[$760>>2]|0; $825 = $823; $826 = $824; $827 = (($825) - ($826))|0; $828 = (($827|0) / 4)&-1; $829 = $828<<1; HEAP32[$115>>2] = $829; HEAP32[$116>>2] = 1; $44 = $115; $45 = $116; $830 = $44; $831 = $45; ;HEAP8[$43>>0]=HEAP8[$46>>0]|0; $41 = $830; $42 = $831; $832 = $41; $833 = $42; $38 = $43; $39 = $832; $40 = $833; $834 = $39; $835 = HEAP32[$834>>2]|0; $836 = $40; $837 = HEAP32[$836>>2]|0; $838 = ($835>>>0)<($837>>>0); $839 = $42; $840 = $41; $841 = $838 ? $839 : $840; $842 = HEAP32[$841>>2]|0; $114 = $842; $843 = $114; $844 = $114; $845 = (($844>>>0) / 4)&-1; $33 = $760; $846 = $33; $847 = ((($846)) + 12|0); $32 = $847; $848 = $32; $31 = $848; $849 = $31; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($117,$843,$845,$849); $850 = ((($760)) + 4|0); $851 = HEAP32[$850>>2]|0; $34 = $118; $35 = $851; $852 = $34; $853 = $35; HEAP32[$852>>2] = $853; $854 = ((($760)) + 8|0); $855 = HEAP32[$854>>2]|0; $36 = $119; $37 = $855; $856 = $36; $857 = $37; HEAP32[$856>>2] = $857; ;HEAP32[$$byval_copy2>>2]=HEAP32[$118>>2]|0; ;HEAP32[$$byval_copy3>>2]=HEAP32[$119>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($117,$$byval_copy2,$$byval_copy3); $50 = $760; $51 = $117; $858 = $50; $49 = $858; $859 = $49; $860 = HEAP32[$859>>2]|0; HEAP32[$52>>2] = $860; $861 = $51; $47 = $861; $862 = $47; $863 = HEAP32[$862>>2]|0; $864 = $50; HEAP32[$864>>2] = $863; $48 = $52; $865 = $48; $866 = HEAP32[$865>>2]|0; $867 = $51; HEAP32[$867>>2] = $866; $868 = ((($760)) + 4|0); $869 = ((($117)) + 4|0); $56 = $868; $57 = $869; $870 = $56; $55 = $870; $871 = $55; $872 = HEAP32[$871>>2]|0; HEAP32[$58>>2] = $872; $873 = $57; $53 = $873; $874 = $53; $875 = HEAP32[$874>>2]|0; $876 = $56; HEAP32[$876>>2] = $875; $54 = $58; $877 = $54; $878 = HEAP32[$877>>2]|0; $879 = $57; HEAP32[$879>>2] = $878; $880 = ((($760)) + 8|0); $881 = ((($117)) + 8|0); $62 = $880; $63 = $881; $882 = $62; $61 = $882; $883 = $61; $884 = HEAP32[$883>>2]|0; HEAP32[$64>>2] = $884; $885 = $63; $59 = $885; $886 = $59; $887 = HEAP32[$886>>2]|0; $888 = $62; HEAP32[$888>>2] = $887; $60 = $64; $889 = $60; $890 = HEAP32[$889>>2]|0; $891 = $63; HEAP32[$891>>2] = $890; $67 = $760; $892 = $67; $893 = ((($892)) + 12|0); $66 = $893; $894 = $66; $65 = $894; $895 = $65; $70 = $117; $896 = $70; $897 = ((($896)) + 12|0); $69 = $897; $898 = $69; $68 = $898; $899 = $68; $74 = $895; $75 = $899; $900 = $74; $73 = $900; $901 = $73; $902 = HEAP32[$901>>2]|0; HEAP32[$76>>2] = $902; $903 = $75; $71 = $903; $904 = $71; $905 = HEAP32[$904>>2]|0; $906 = $74; HEAP32[$906>>2] = $905; $72 = $76; $907 = $72; $908 = HEAP32[$907>>2]|0; $909 = $75; HEAP32[$909>>2] = $908; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($117); break; } $773 = ((($760)) + 4|0); $774 = HEAP32[$773>>2]|0; $775 = HEAP32[$760>>2]|0; $776 = $774; $777 = $775; $778 = (($776) - ($777))|0; $779 = (($778|0) / 4)&-1; $113 = $779; $780 = $113; $781 = (($780) + 1)|0; $782 = (($781|0) / 2)&-1; $113 = $782; $783 = ((($760)) + 4|0); $784 = HEAP32[$783>>2]|0; $785 = ((($760)) + 8|0); $786 = HEAP32[$785>>2]|0; $787 = ((($760)) + 4|0); $788 = HEAP32[$787>>2]|0; $789 = $113; $790 = (0 - ($789))|0; $791 = (($788) + ($790<<2)|0); $87 = $784; $88 = $786; $89 = $791; $792 = $87; $86 = $792; $793 = $86; $794 = $88; $80 = $794; $795 = $80; $796 = $89; $81 = $796; $797 = $81; $82 = $793; $83 = $795; $84 = $797; $798 = $83; $799 = $82; $800 = $798; $801 = $799; $802 = (($800) - ($801))|0; $803 = (($802|0) / 4)&-1; $85 = $803; $804 = $85; $805 = ($804>>>0)>(0); if ($805) { $806 = $84; $807 = $82; $808 = $85; $809 = $808<<2; _memmove(($806|0),($807|0),($809|0))|0; } $810 = $84; $811 = $85; $812 = (($810) + ($811<<2)|0); $813 = ((($760)) + 8|0); HEAP32[$813>>2] = $812; $814 = $113; $815 = ((($760)) + 4|0); $816 = HEAP32[$815>>2]|0; $817 = (0 - ($814))|0; $818 = (($816) + ($817<<2)|0); HEAP32[$815>>2] = $818; } } while(0); $92 = $760; $910 = $92; $911 = ((($910)) + 12|0); $91 = $911; $912 = $91; $90 = $912; $913 = $90; $914 = ((($760)) + 8|0); $915 = HEAP32[$914>>2]|0; $93 = $915; $916 = $93; $917 = $112; $104 = $913; $105 = $916; $106 = $917; $918 = $104; $919 = $105; $920 = $106; $103 = $920; $921 = $103; ;HEAP8[$102>>0]=HEAP8[$107>>0]|0; $99 = $918; $100 = $919; $101 = $921; $922 = $99; $923 = $100; $924 = $101; $98 = $924; $925 = $98; $95 = $922; $96 = $923; $97 = $925; $926 = $96; $927 = $97; $94 = $927; $928 = $94; $929 = HEAP32[$928>>2]|0; HEAP32[$926>>2] = $929; $930 = ((($760)) + 8|0); $931 = HEAP32[$930>>2]|0; $932 = ((($931)) + 4|0); HEAP32[$930>>2] = $932; $933 = HEAP32[$402>>2]|0; $934 = (($933) + -1)|0; HEAP32[$402>>2] = $934; } STACKTOP = sp;return; } function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $10 = $1; $13 = $10; $9 = $13; $14 = $9; $15 = ((($14)) + 20|0); $8 = $15; $16 = $8; $7 = $16; $17 = $7; $18 = HEAP32[$17>>2]|0; $19 = ((($13)) + 16|0); $20 = HEAP32[$19>>2]|0; $21 = (($18) + ($20))|0; $11 = $21; $6 = $13; $22 = $6; $23 = ((($22)) + 4|0); $24 = HEAP32[$23>>2]|0; $25 = $11; $26 = (($25>>>0) / 93)&-1; $27 = (($24) + ($26<<2)|0); $12 = $27; $28 = $12; $2 = $13; $29 = $2; $30 = ((($29)) + 8|0); $31 = HEAP32[$30>>2]|0; $32 = ((($29)) + 4|0); $33 = HEAP32[$32>>2]|0; $34 = ($31|0)==($33|0); if ($34) { $40 = 0; $3 = $0; $4 = $28; $5 = $40; $41 = $3; $42 = $4; HEAP32[$41>>2] = $42; $43 = ((($41)) + 4|0); $44 = $5; HEAP32[$43>>2] = $44; STACKTOP = sp;return; } $35 = $12; $36 = HEAP32[$35>>2]|0; $37 = $11; $38 = (($37>>>0) % 93)&-1; $39 = (($36) + (($38*44)|0)|0); $40 = $39; $3 = $0; $4 = $28; $5 = $40; $41 = $3; $42 = $4; HEAP32[$41>>2] = $42; $43 = ((($41)) + 4|0); $44 = $5; HEAP32[$43>>2] = $44; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE9push_backEOS4_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0; var $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0; var $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0; var $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0; var $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0); $$byval_copy1 = sp + 376|0; $$byval_copy = sp + 372|0; $14 = sp + 8|0; $17 = sp + 381|0; $23 = sp + 292|0; $29 = sp + 268|0; $35 = sp + 244|0; $47 = sp + 196|0; $74 = sp; $79 = sp + 380|0; $87 = sp + 44|0; $88 = sp + 40|0; $89 = sp + 20|0; $90 = sp + 16|0; $91 = sp + 12|0; $83 = $0; $84 = $1; $92 = $83; $93 = ((($92)) + 8|0); $94 = HEAP32[$93>>2]|0; $82 = $92; $95 = $82; $96 = ((($95)) + 12|0); $81 = $96; $97 = $81; $80 = $97; $98 = $80; $99 = HEAP32[$98>>2]|0; $100 = ($94|0)==($99|0); do { if ($100) { $101 = ((($92)) + 4|0); $102 = HEAP32[$101>>2]|0; $103 = HEAP32[$92>>2]|0; $104 = ($102>>>0)>($103>>>0); if (!($104)) { $50 = $92; $151 = $50; $152 = ((($151)) + 12|0); $49 = $152; $153 = $49; $48 = $153; $154 = $48; $155 = HEAP32[$154>>2]|0; $156 = HEAP32[$92>>2]|0; $157 = $155; $158 = $156; $159 = (($157) - ($158))|0; $160 = (($159|0) / 4)&-1; $161 = $160<<1; HEAP32[$87>>2] = $161; HEAP32[$88>>2] = 1; $15 = $87; $16 = $88; $162 = $15; $163 = $16; ;HEAP8[$14>>0]=HEAP8[$17>>0]|0; $12 = $162; $13 = $163; $164 = $12; $165 = $13; $9 = $14; $10 = $164; $11 = $165; $166 = $10; $167 = HEAP32[$166>>2]|0; $168 = $11; $169 = HEAP32[$168>>2]|0; $170 = ($167>>>0)<($169>>>0); $171 = $13; $172 = $12; $173 = $170 ? $171 : $172; $174 = HEAP32[$173>>2]|0; $86 = $174; $175 = $86; $176 = $86; $177 = (($176>>>0) / 4)&-1; $4 = $92; $178 = $4; $179 = ((($178)) + 12|0); $3 = $179; $180 = $3; $2 = $180; $181 = $2; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$181); $182 = ((($92)) + 4|0); $183 = HEAP32[$182>>2]|0; $5 = $90; $6 = $183; $184 = $5; $185 = $6; HEAP32[$184>>2] = $185; $186 = ((($92)) + 8|0); $187 = HEAP32[$186>>2]|0; $7 = $91; $8 = $187; $188 = $7; $189 = $8; HEAP32[$188>>2] = $189; ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1); $21 = $92; $22 = $89; $190 = $21; $20 = $190; $191 = $20; $192 = HEAP32[$191>>2]|0; HEAP32[$23>>2] = $192; $193 = $22; $18 = $193; $194 = $18; $195 = HEAP32[$194>>2]|0; $196 = $21; HEAP32[$196>>2] = $195; $19 = $23; $197 = $19; $198 = HEAP32[$197>>2]|0; $199 = $22; HEAP32[$199>>2] = $198; $200 = ((($92)) + 4|0); $201 = ((($89)) + 4|0); $27 = $200; $28 = $201; $202 = $27; $26 = $202; $203 = $26; $204 = HEAP32[$203>>2]|0; HEAP32[$29>>2] = $204; $205 = $28; $24 = $205; $206 = $24; $207 = HEAP32[$206>>2]|0; $208 = $27; HEAP32[$208>>2] = $207; $25 = $29; $209 = $25; $210 = HEAP32[$209>>2]|0; $211 = $28; HEAP32[$211>>2] = $210; $212 = ((($92)) + 8|0); $213 = ((($89)) + 8|0); $33 = $212; $34 = $213; $214 = $33; $32 = $214; $215 = $32; $216 = HEAP32[$215>>2]|0; HEAP32[$35>>2] = $216; $217 = $34; $30 = $217; $218 = $30; $219 = HEAP32[$218>>2]|0; $220 = $33; HEAP32[$220>>2] = $219; $31 = $35; $221 = $31; $222 = HEAP32[$221>>2]|0; $223 = $34; HEAP32[$223>>2] = $222; $38 = $92; $224 = $38; $225 = ((($224)) + 12|0); $37 = $225; $226 = $37; $36 = $226; $227 = $36; $41 = $89; $228 = $41; $229 = ((($228)) + 12|0); $40 = $229; $230 = $40; $39 = $230; $231 = $39; $45 = $227; $46 = $231; $232 = $45; $44 = $232; $233 = $44; $234 = HEAP32[$233>>2]|0; HEAP32[$47>>2] = $234; $235 = $46; $42 = $235; $236 = $42; $237 = HEAP32[$236>>2]|0; $238 = $45; HEAP32[$238>>2] = $237; $43 = $47; $239 = $43; $240 = HEAP32[$239>>2]|0; $241 = $46; HEAP32[$241>>2] = $240; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89); break; } $105 = ((($92)) + 4|0); $106 = HEAP32[$105>>2]|0; $107 = HEAP32[$92>>2]|0; $108 = $106; $109 = $107; $110 = (($108) - ($109))|0; $111 = (($110|0) / 4)&-1; $85 = $111; $112 = $85; $113 = (($112) + 1)|0; $114 = (($113|0) / 2)&-1; $85 = $114; $115 = ((($92)) + 4|0); $116 = HEAP32[$115>>2]|0; $117 = ((($92)) + 8|0); $118 = HEAP32[$117>>2]|0; $119 = ((($92)) + 4|0); $120 = HEAP32[$119>>2]|0; $121 = $85; $122 = (0 - ($121))|0; $123 = (($120) + ($122<<2)|0); $58 = $116; $59 = $118; $60 = $123; $124 = $58; $57 = $124; $125 = $57; $126 = $59; $51 = $126; $127 = $51; $128 = $60; $52 = $128; $129 = $52; $53 = $125; $54 = $127; $55 = $129; $130 = $54; $131 = $53; $132 = $130; $133 = $131; $134 = (($132) - ($133))|0; $135 = (($134|0) / 4)&-1; $56 = $135; $136 = $56; $137 = ($136>>>0)>(0); if ($137) { $138 = $55; $139 = $53; $140 = $56; $141 = $140<<2; _memmove(($138|0),($139|0),($141|0))|0; } $142 = $55; $143 = $56; $144 = (($142) + ($143<<2)|0); $145 = ((($92)) + 8|0); HEAP32[$145>>2] = $144; $146 = $85; $147 = ((($92)) + 4|0); $148 = HEAP32[$147>>2]|0; $149 = (0 - ($146))|0; $150 = (($148) + ($149<<2)|0); HEAP32[$147>>2] = $150; } } while(0); $63 = $92; $242 = $63; $243 = ((($242)) + 12|0); $62 = $243; $244 = $62; $61 = $244; $245 = $61; $246 = ((($92)) + 8|0); $247 = HEAP32[$246>>2]|0; $64 = $247; $248 = $64; $249 = $84; $65 = $249; $250 = $65; $76 = $245; $77 = $248; $78 = $250; $251 = $76; $252 = $77; $253 = $78; $75 = $253; $254 = $75; ;HEAP8[$74>>0]=HEAP8[$79>>0]|0; $71 = $251; $72 = $252; $73 = $254; $255 = $71; $256 = $72; $257 = $73; $70 = $257; $258 = $70; $67 = $255; $68 = $256; $69 = $258; $259 = $68; $260 = $69; $66 = $260; $261 = $66; $262 = HEAP32[$261>>2]|0; HEAP32[$259>>2] = $262; $263 = ((($92)) + 8|0); $264 = HEAP32[$263>>2]|0; $265 = ((($264)) + 4|0); HEAP32[$263>>2] = $265; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticENS_9allocatorIS4_EEE10push_frontEOS4_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0); $$byval_copy1 = sp + 388|0; $$byval_copy = sp + 384|0; $10 = sp + 8|0; $13 = sp + 393|0; $26 = sp + 292|0; $32 = sp + 268|0; $38 = sp + 244|0; $50 = sp + 196|0; $77 = sp; $82 = sp + 392|0; $90 = sp + 44|0; $91 = sp + 40|0; $92 = sp + 20|0; $93 = sp + 16|0; $94 = sp + 12|0; $86 = $0; $87 = $1; $95 = $86; $96 = ((($95)) + 4|0); $97 = HEAP32[$96>>2]|0; $98 = HEAP32[$95>>2]|0; $99 = ($97|0)==($98|0); do { if ($99) { $100 = ((($95)) + 8|0); $101 = HEAP32[$100>>2]|0; $85 = $95; $102 = $85; $103 = ((($102)) + 12|0); $84 = $103; $104 = $84; $83 = $104; $105 = $83; $106 = HEAP32[$105>>2]|0; $107 = ($101>>>0)<($106>>>0); if (!($107)) { $20 = $95; $158 = $20; $159 = ((($158)) + 12|0); $19 = $159; $160 = $19; $18 = $160; $161 = $18; $162 = HEAP32[$161>>2]|0; $163 = HEAP32[$95>>2]|0; $164 = $162; $165 = $163; $166 = (($164) - ($165))|0; $167 = (($166|0) / 4)&-1; $168 = $167<<1; HEAP32[$90>>2] = $168; HEAP32[$91>>2] = 1; $11 = $90; $12 = $91; $169 = $11; $170 = $12; ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; $8 = $169; $9 = $170; $171 = $8; $172 = $9; $5 = $10; $6 = $171; $7 = $172; $173 = $6; $174 = HEAP32[$173>>2]|0; $175 = $7; $176 = HEAP32[$175>>2]|0; $177 = ($174>>>0)<($176>>>0); $178 = $9; $179 = $8; $180 = $177 ? $178 : $179; $181 = HEAP32[$180>>2]|0; $89 = $181; $182 = $89; $183 = $89; $184 = (($183) + 3)|0; $185 = (($184>>>0) / 4)&-1; $4 = $95; $186 = $4; $187 = ((($186)) + 12|0); $3 = $187; $188 = $3; $2 = $188; $189 = $2; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($92,$182,$185,$189); $190 = ((($95)) + 4|0); $191 = HEAP32[$190>>2]|0; $14 = $93; $15 = $191; $192 = $14; $193 = $15; HEAP32[$192>>2] = $193; $194 = ((($95)) + 8|0); $195 = HEAP32[$194>>2]|0; $16 = $94; $17 = $195; $196 = $16; $197 = $17; HEAP32[$196>>2] = $197; ;HEAP32[$$byval_copy>>2]=HEAP32[$93>>2]|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$94>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($92,$$byval_copy,$$byval_copy1); $24 = $95; $25 = $92; $198 = $24; $23 = $198; $199 = $23; $200 = HEAP32[$199>>2]|0; HEAP32[$26>>2] = $200; $201 = $25; $21 = $201; $202 = $21; $203 = HEAP32[$202>>2]|0; $204 = $24; HEAP32[$204>>2] = $203; $22 = $26; $205 = $22; $206 = HEAP32[$205>>2]|0; $207 = $25; HEAP32[$207>>2] = $206; $208 = ((($95)) + 4|0); $209 = ((($92)) + 4|0); $30 = $208; $31 = $209; $210 = $30; $29 = $210; $211 = $29; $212 = HEAP32[$211>>2]|0; HEAP32[$32>>2] = $212; $213 = $31; $27 = $213; $214 = $27; $215 = HEAP32[$214>>2]|0; $216 = $30; HEAP32[$216>>2] = $215; $28 = $32; $217 = $28; $218 = HEAP32[$217>>2]|0; $219 = $31; HEAP32[$219>>2] = $218; $220 = ((($95)) + 8|0); $221 = ((($92)) + 8|0); $36 = $220; $37 = $221; $222 = $36; $35 = $222; $223 = $35; $224 = HEAP32[$223>>2]|0; HEAP32[$38>>2] = $224; $225 = $37; $33 = $225; $226 = $33; $227 = HEAP32[$226>>2]|0; $228 = $36; HEAP32[$228>>2] = $227; $34 = $38; $229 = $34; $230 = HEAP32[$229>>2]|0; $231 = $37; HEAP32[$231>>2] = $230; $41 = $95; $232 = $41; $233 = ((($232)) + 12|0); $40 = $233; $234 = $40; $39 = $234; $235 = $39; $44 = $92; $236 = $44; $237 = ((($236)) + 12|0); $43 = $237; $238 = $43; $42 = $238; $239 = $42; $48 = $235; $49 = $239; $240 = $48; $47 = $240; $241 = $47; $242 = HEAP32[$241>>2]|0; HEAP32[$50>>2] = $242; $243 = $49; $45 = $243; $244 = $45; $245 = HEAP32[$244>>2]|0; $246 = $48; HEAP32[$246>>2] = $245; $46 = $50; $247 = $46; $248 = HEAP32[$247>>2]|0; $249 = $49; HEAP32[$249>>2] = $248; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($92); break; } $63 = $95; $108 = $63; $109 = ((($108)) + 12|0); $62 = $109; $110 = $62; $61 = $110; $111 = $61; $112 = HEAP32[$111>>2]|0; $113 = ((($95)) + 8|0); $114 = HEAP32[$113>>2]|0; $115 = $112; $116 = $114; $117 = (($115) - ($116))|0; $118 = (($117|0) / 4)&-1; $88 = $118; $119 = $88; $120 = (($119) + 1)|0; $121 = (($120|0) / 2)&-1; $88 = $121; $122 = ((($95)) + 4|0); $123 = HEAP32[$122>>2]|0; $124 = ((($95)) + 8|0); $125 = HEAP32[$124>>2]|0; $126 = ((($95)) + 8|0); $127 = HEAP32[$126>>2]|0; $128 = $88; $129 = (($127) + ($128<<2)|0); $58 = $123; $59 = $125; $60 = $129; $130 = $58; $57 = $130; $131 = $57; $132 = $59; $51 = $132; $133 = $51; $134 = $60; $52 = $134; $135 = $52; $53 = $131; $54 = $133; $55 = $135; $136 = $54; $137 = $53; $138 = $136; $139 = $137; $140 = (($138) - ($139))|0; $141 = (($140|0) / 4)&-1; $56 = $141; $142 = $56; $143 = ($142>>>0)>(0); if ($143) { $144 = $56; $145 = $55; $146 = (0 - ($144))|0; $147 = (($145) + ($146<<2)|0); $55 = $147; $148 = $55; $149 = $53; $150 = $56; $151 = $150<<2; _memmove(($148|0),($149|0),($151|0))|0; } $152 = $55; $153 = ((($95)) + 4|0); HEAP32[$153>>2] = $152; $154 = $88; $155 = ((($95)) + 8|0); $156 = HEAP32[$155>>2]|0; $157 = (($156) + ($154<<2)|0); HEAP32[$155>>2] = $157; } } while(0); $66 = $95; $250 = $66; $251 = ((($250)) + 12|0); $65 = $251; $252 = $65; $64 = $252; $253 = $64; $254 = ((($95)) + 4|0); $255 = HEAP32[$254>>2]|0; $256 = ((($255)) + -4|0); $67 = $256; $257 = $67; $258 = $87; $68 = $258; $259 = $68; $79 = $253; $80 = $257; $81 = $259; $260 = $79; $261 = $80; $262 = $81; $78 = $262; $263 = $78; ;HEAP8[$77>>0]=HEAP8[$82>>0]|0; $74 = $260; $75 = $261; $76 = $263; $264 = $74; $265 = $75; $266 = $76; $73 = $266; $267 = $73; $70 = $264; $71 = $265; $72 = $267; $268 = $71; $269 = $72; $69 = $269; $270 = $69; $271 = HEAP32[$270>>2]|0; HEAP32[$268>>2] = $271; $272 = ((($95)) + 4|0); $273 = HEAP32[$272>>2]|0; $274 = ((($273)) + -4|0); HEAP32[$272>>2] = $274; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 128|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(128|0); $35 = sp; $31 = $0; $32 = $1; $33 = $2; $34 = $3; $36 = $31; $37 = ((($36)) + 12|0); HEAP32[$35>>2] = 0; $38 = $34; $28 = $37; $29 = $35; $30 = $38; $39 = $28; $40 = $29; $27 = $40; $41 = $27; $21 = $39; $22 = $41; $42 = $21; $43 = $22; $20 = $43; HEAP32[$42>>2] = 0; $44 = ((($39)) + 4|0); $45 = $30; $23 = $45; $46 = $23; $25 = $44; $26 = $46; $47 = $25; $48 = $26; $24 = $48; $49 = $24; HEAP32[$47>>2] = $49; $50 = $32; $51 = ($50|0)!=(0); do { if ($51) { $6 = $36; $52 = $6; $53 = ((($52)) + 12|0); $5 = $53; $54 = $5; $55 = ((($54)) + 4|0); $4 = $55; $56 = $4; $57 = HEAP32[$56>>2]|0; $58 = $32; $15 = $57; $16 = $58; $59 = $15; $60 = $16; $12 = $59; $13 = $60; $14 = 0; $61 = $12; $62 = $13; $11 = $61; $63 = ($62>>>0)>(1073741823); if ($63) { $9 = 4287; $64 = (___cxa_allocate_exception(8)|0); $65 = $9; $7 = $64; $8 = $65; $66 = $7; $67 = $8; __ZNSt11logic_errorC2EPKc($66,$67); HEAP32[$66>>2] = (3660); ___cxa_throw(($64|0),(1384|0),(220|0)); // unreachable; } else { $68 = $13; $69 = $68<<2; $10 = $69; $70 = $10; $71 = (__Znwj($70)|0); $72 = $71; break; } } else { $72 = 0; } } while(0); HEAP32[$36>>2] = $72; $73 = HEAP32[$36>>2]|0; $74 = $33; $75 = (($73) + ($74<<2)|0); $76 = ((($36)) + 8|0); HEAP32[$76>>2] = $75; $77 = ((($36)) + 4|0); HEAP32[$77>>2] = $75; $78 = HEAP32[$36>>2]|0; $79 = $32; $80 = (($78) + ($79<<2)|0); $19 = $36; $81 = $19; $82 = ((($81)) + 12|0); $18 = $82; $83 = $18; $17 = $83; $84 = $17; HEAP32[$84>>2] = $80; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE9push_backEOS4_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0; var $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0; var $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0; var $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0; var $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 384|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(384|0); $$byval_copy1 = sp + 376|0; $$byval_copy = sp + 372|0; $14 = sp + 8|0; $17 = sp + 381|0; $23 = sp + 292|0; $29 = sp + 268|0; $35 = sp + 244|0; $47 = sp + 196|0; $74 = sp; $79 = sp + 380|0; $87 = sp + 44|0; $88 = sp + 40|0; $89 = sp + 20|0; $90 = sp + 16|0; $91 = sp + 12|0; $83 = $0; $84 = $1; $92 = $83; $93 = ((($92)) + 8|0); $94 = HEAP32[$93>>2]|0; $82 = $92; $95 = $82; $96 = ((($95)) + 12|0); $81 = $96; $97 = $81; $80 = $97; $98 = $80; $99 = HEAP32[$98>>2]|0; $100 = ($94|0)==($99|0); do { if ($100) { $101 = ((($92)) + 4|0); $102 = HEAP32[$101>>2]|0; $103 = HEAP32[$92>>2]|0; $104 = ($102>>>0)>($103>>>0); if (!($104)) { $50 = $92; $151 = $50; $152 = ((($151)) + 12|0); $49 = $152; $153 = $49; $48 = $153; $154 = $48; $155 = HEAP32[$154>>2]|0; $156 = HEAP32[$92>>2]|0; $157 = $155; $158 = $156; $159 = (($157) - ($158))|0; $160 = (($159|0) / 4)&-1; $161 = $160<<1; HEAP32[$87>>2] = $161; HEAP32[$88>>2] = 1; $15 = $87; $16 = $88; $162 = $15; $163 = $16; ;HEAP8[$14>>0]=HEAP8[$17>>0]|0; $12 = $162; $13 = $163; $164 = $12; $165 = $13; $9 = $14; $10 = $164; $11 = $165; $166 = $10; $167 = HEAP32[$166>>2]|0; $168 = $11; $169 = HEAP32[$168>>2]|0; $170 = ($167>>>0)<($169>>>0); $171 = $13; $172 = $12; $173 = $170 ? $171 : $172; $174 = HEAP32[$173>>2]|0; $86 = $174; $175 = $86; $176 = $86; $177 = (($176>>>0) / 4)&-1; $4 = $92; $178 = $4; $179 = ((($178)) + 12|0); $3 = $179; $180 = $3; $181 = ((($180)) + 4|0); $2 = $181; $182 = $2; $183 = HEAP32[$182>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($89,$175,$177,$183); $184 = ((($92)) + 4|0); $185 = HEAP32[$184>>2]|0; $5 = $90; $6 = $185; $186 = $5; $187 = $6; HEAP32[$186>>2] = $187; $188 = ((($92)) + 8|0); $189 = HEAP32[$188>>2]|0; $7 = $91; $8 = $189; $190 = $7; $191 = $8; HEAP32[$190>>2] = $191; ;HEAP32[$$byval_copy>>2]=HEAP32[$90>>2]|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$91>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($89,$$byval_copy,$$byval_copy1); $21 = $92; $22 = $89; $192 = $21; $20 = $192; $193 = $20; $194 = HEAP32[$193>>2]|0; HEAP32[$23>>2] = $194; $195 = $22; $18 = $195; $196 = $18; $197 = HEAP32[$196>>2]|0; $198 = $21; HEAP32[$198>>2] = $197; $19 = $23; $199 = $19; $200 = HEAP32[$199>>2]|0; $201 = $22; HEAP32[$201>>2] = $200; $202 = ((($92)) + 4|0); $203 = ((($89)) + 4|0); $27 = $202; $28 = $203; $204 = $27; $26 = $204; $205 = $26; $206 = HEAP32[$205>>2]|0; HEAP32[$29>>2] = $206; $207 = $28; $24 = $207; $208 = $24; $209 = HEAP32[$208>>2]|0; $210 = $27; HEAP32[$210>>2] = $209; $25 = $29; $211 = $25; $212 = HEAP32[$211>>2]|0; $213 = $28; HEAP32[$213>>2] = $212; $214 = ((($92)) + 8|0); $215 = ((($89)) + 8|0); $33 = $214; $34 = $215; $216 = $33; $32 = $216; $217 = $32; $218 = HEAP32[$217>>2]|0; HEAP32[$35>>2] = $218; $219 = $34; $30 = $219; $220 = $30; $221 = HEAP32[$220>>2]|0; $222 = $33; HEAP32[$222>>2] = $221; $31 = $35; $223 = $31; $224 = HEAP32[$223>>2]|0; $225 = $34; HEAP32[$225>>2] = $224; $38 = $92; $226 = $38; $227 = ((($226)) + 12|0); $37 = $227; $228 = $37; $36 = $228; $229 = $36; $41 = $89; $230 = $41; $231 = ((($230)) + 12|0); $40 = $231; $232 = $40; $39 = $232; $233 = $39; $45 = $229; $46 = $233; $234 = $45; $44 = $234; $235 = $44; $236 = HEAP32[$235>>2]|0; HEAP32[$47>>2] = $236; $237 = $46; $42 = $237; $238 = $42; $239 = HEAP32[$238>>2]|0; $240 = $45; HEAP32[$240>>2] = $239; $43 = $47; $241 = $43; $242 = HEAP32[$241>>2]|0; $243 = $46; HEAP32[$243>>2] = $242; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($89); break; } $105 = ((($92)) + 4|0); $106 = HEAP32[$105>>2]|0; $107 = HEAP32[$92>>2]|0; $108 = $106; $109 = $107; $110 = (($108) - ($109))|0; $111 = (($110|0) / 4)&-1; $85 = $111; $112 = $85; $113 = (($112) + 1)|0; $114 = (($113|0) / 2)&-1; $85 = $114; $115 = ((($92)) + 4|0); $116 = HEAP32[$115>>2]|0; $117 = ((($92)) + 8|0); $118 = HEAP32[$117>>2]|0; $119 = ((($92)) + 4|0); $120 = HEAP32[$119>>2]|0; $121 = $85; $122 = (0 - ($121))|0; $123 = (($120) + ($122<<2)|0); $58 = $116; $59 = $118; $60 = $123; $124 = $58; $57 = $124; $125 = $57; $126 = $59; $51 = $126; $127 = $51; $128 = $60; $52 = $128; $129 = $52; $53 = $125; $54 = $127; $55 = $129; $130 = $54; $131 = $53; $132 = $130; $133 = $131; $134 = (($132) - ($133))|0; $135 = (($134|0) / 4)&-1; $56 = $135; $136 = $56; $137 = ($136>>>0)>(0); if ($137) { $138 = $55; $139 = $53; $140 = $56; $141 = $140<<2; _memmove(($138|0),($139|0),($141|0))|0; } $142 = $55; $143 = $56; $144 = (($142) + ($143<<2)|0); $145 = ((($92)) + 8|0); HEAP32[$145>>2] = $144; $146 = $85; $147 = ((($92)) + 4|0); $148 = HEAP32[$147>>2]|0; $149 = (0 - ($146))|0; $150 = (($148) + ($149<<2)|0); HEAP32[$147>>2] = $150; } } while(0); $63 = $92; $244 = $63; $245 = ((($244)) + 12|0); $62 = $245; $246 = $62; $247 = ((($246)) + 4|0); $61 = $247; $248 = $61; $249 = HEAP32[$248>>2]|0; $250 = ((($92)) + 8|0); $251 = HEAP32[$250>>2]|0; $64 = $251; $252 = $64; $253 = $84; $65 = $253; $254 = $65; $76 = $249; $77 = $252; $78 = $254; $255 = $76; $256 = $77; $257 = $78; $75 = $257; $258 = $75; ;HEAP8[$74>>0]=HEAP8[$79>>0]|0; $71 = $255; $72 = $256; $73 = $258; $259 = $71; $260 = $72; $261 = $73; $70 = $261; $262 = $70; $67 = $259; $68 = $260; $69 = $262; $263 = $68; $264 = $69; $66 = $264; $265 = $66; $266 = HEAP32[$265>>2]|0; HEAP32[$263>>2] = $266; $267 = ((($92)) + 8|0); $268 = HEAP32[$267>>2]|0; $269 = ((($268)) + 4|0); HEAP32[$267>>2] = $269; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE10push_frontERKS4_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $$byval_copy1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0; var $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0; var $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0; var $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0; var $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0; var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 400|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(400|0); $$byval_copy1 = sp + 384|0; $$byval_copy = sp + 380|0; $10 = sp + 8|0; $13 = sp + 389|0; $26 = sp + 288|0; $32 = sp + 264|0; $38 = sp + 240|0; $50 = sp + 192|0; $76 = sp; $81 = sp + 388|0; $89 = sp + 44|0; $90 = sp + 40|0; $91 = sp + 20|0; $92 = sp + 16|0; $93 = sp + 12|0; $85 = $0; $86 = $1; $94 = $85; $95 = ((($94)) + 4|0); $96 = HEAP32[$95>>2]|0; $97 = HEAP32[$94>>2]|0; $98 = ($96|0)==($97|0); do { if ($98) { $99 = ((($94)) + 8|0); $100 = HEAP32[$99>>2]|0; $84 = $94; $101 = $84; $102 = ((($101)) + 12|0); $83 = $102; $103 = $83; $82 = $103; $104 = $82; $105 = HEAP32[$104>>2]|0; $106 = ($100>>>0)<($105>>>0); if (!($106)) { $20 = $94; $157 = $20; $158 = ((($157)) + 12|0); $19 = $158; $159 = $19; $18 = $159; $160 = $18; $161 = HEAP32[$160>>2]|0; $162 = HEAP32[$94>>2]|0; $163 = $161; $164 = $162; $165 = (($163) - ($164))|0; $166 = (($165|0) / 4)&-1; $167 = $166<<1; HEAP32[$89>>2] = $167; HEAP32[$90>>2] = 1; $11 = $89; $12 = $90; $168 = $11; $169 = $12; ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; $8 = $168; $9 = $169; $170 = $8; $171 = $9; $5 = $10; $6 = $170; $7 = $171; $172 = $6; $173 = HEAP32[$172>>2]|0; $174 = $7; $175 = HEAP32[$174>>2]|0; $176 = ($173>>>0)<($175>>>0); $177 = $9; $178 = $8; $179 = $176 ? $177 : $178; $180 = HEAP32[$179>>2]|0; $88 = $180; $181 = $88; $182 = $88; $183 = (($182) + 3)|0; $184 = (($183>>>0) / 4)&-1; $4 = $94; $185 = $4; $186 = ((($185)) + 12|0); $3 = $186; $187 = $3; $188 = ((($187)) + 4|0); $2 = $188; $189 = $2; $190 = HEAP32[$189>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEEC2EjjS7_($91,$181,$184,$190); $191 = ((($94)) + 4|0); $192 = HEAP32[$191>>2]|0; $14 = $92; $15 = $192; $193 = $14; $194 = $15; HEAP32[$193>>2] = $194; $195 = ((($94)) + 8|0); $196 = HEAP32[$195>>2]|0; $16 = $93; $17 = $196; $197 = $16; $198 = $17; HEAP32[$197>>2] = $198; ;HEAP32[$$byval_copy>>2]=HEAP32[$92>>2]|0; ;HEAP32[$$byval_copy1>>2]=HEAP32[$93>>2]|0; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($91,$$byval_copy,$$byval_copy1); $24 = $94; $25 = $91; $199 = $24; $23 = $199; $200 = $23; $201 = HEAP32[$200>>2]|0; HEAP32[$26>>2] = $201; $202 = $25; $21 = $202; $203 = $21; $204 = HEAP32[$203>>2]|0; $205 = $24; HEAP32[$205>>2] = $204; $22 = $26; $206 = $22; $207 = HEAP32[$206>>2]|0; $208 = $25; HEAP32[$208>>2] = $207; $209 = ((($94)) + 4|0); $210 = ((($91)) + 4|0); $30 = $209; $31 = $210; $211 = $30; $29 = $211; $212 = $29; $213 = HEAP32[$212>>2]|0; HEAP32[$32>>2] = $213; $214 = $31; $27 = $214; $215 = $27; $216 = HEAP32[$215>>2]|0; $217 = $30; HEAP32[$217>>2] = $216; $28 = $32; $218 = $28; $219 = HEAP32[$218>>2]|0; $220 = $31; HEAP32[$220>>2] = $219; $221 = ((($94)) + 8|0); $222 = ((($91)) + 8|0); $36 = $221; $37 = $222; $223 = $36; $35 = $223; $224 = $35; $225 = HEAP32[$224>>2]|0; HEAP32[$38>>2] = $225; $226 = $37; $33 = $226; $227 = $33; $228 = HEAP32[$227>>2]|0; $229 = $36; HEAP32[$229>>2] = $228; $34 = $38; $230 = $34; $231 = HEAP32[$230>>2]|0; $232 = $37; HEAP32[$232>>2] = $231; $41 = $94; $233 = $41; $234 = ((($233)) + 12|0); $40 = $234; $235 = $40; $39 = $235; $236 = $39; $44 = $91; $237 = $44; $238 = ((($237)) + 12|0); $43 = $238; $239 = $43; $42 = $239; $240 = $42; $48 = $236; $49 = $240; $241 = $48; $47 = $241; $242 = $47; $243 = HEAP32[$242>>2]|0; HEAP32[$50>>2] = $243; $244 = $49; $45 = $244; $245 = $45; $246 = HEAP32[$245>>2]|0; $247 = $48; HEAP32[$247>>2] = $246; $46 = $50; $248 = $46; $249 = HEAP32[$248>>2]|0; $250 = $49; HEAP32[$250>>2] = $249; __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($91); break; } $63 = $94; $107 = $63; $108 = ((($107)) + 12|0); $62 = $108; $109 = $62; $61 = $109; $110 = $61; $111 = HEAP32[$110>>2]|0; $112 = ((($94)) + 8|0); $113 = HEAP32[$112>>2]|0; $114 = $111; $115 = $113; $116 = (($114) - ($115))|0; $117 = (($116|0) / 4)&-1; $87 = $117; $118 = $87; $119 = (($118) + 1)|0; $120 = (($119|0) / 2)&-1; $87 = $120; $121 = ((($94)) + 4|0); $122 = HEAP32[$121>>2]|0; $123 = ((($94)) + 8|0); $124 = HEAP32[$123>>2]|0; $125 = ((($94)) + 8|0); $126 = HEAP32[$125>>2]|0; $127 = $87; $128 = (($126) + ($127<<2)|0); $58 = $122; $59 = $124; $60 = $128; $129 = $58; $57 = $129; $130 = $57; $131 = $59; $51 = $131; $132 = $51; $133 = $60; $52 = $133; $134 = $52; $53 = $130; $54 = $132; $55 = $134; $135 = $54; $136 = $53; $137 = $135; $138 = $136; $139 = (($137) - ($138))|0; $140 = (($139|0) / 4)&-1; $56 = $140; $141 = $56; $142 = ($141>>>0)>(0); if ($142) { $143 = $56; $144 = $55; $145 = (0 - ($143))|0; $146 = (($144) + ($145<<2)|0); $55 = $146; $147 = $55; $148 = $53; $149 = $56; $150 = $149<<2; _memmove(($147|0),($148|0),($150|0))|0; } $151 = $55; $152 = ((($94)) + 4|0); HEAP32[$152>>2] = $151; $153 = $87; $154 = ((($94)) + 8|0); $155 = HEAP32[$154>>2]|0; $156 = (($155) + ($153<<2)|0); HEAP32[$154>>2] = $156; } } while(0); $66 = $94; $251 = $66; $252 = ((($251)) + 12|0); $65 = $252; $253 = $65; $254 = ((($253)) + 4|0); $64 = $254; $255 = $64; $256 = HEAP32[$255>>2]|0; $257 = ((($94)) + 4|0); $258 = HEAP32[$257>>2]|0; $259 = ((($258)) + -4|0); $67 = $259; $260 = $67; $261 = $86; $78 = $256; $79 = $260; $80 = $261; $262 = $78; $263 = $79; $264 = $80; $77 = $264; $265 = $77; ;HEAP8[$76>>0]=HEAP8[$81>>0]|0; $73 = $262; $74 = $263; $75 = $265; $266 = $73; $267 = $74; $268 = $75; $72 = $268; $269 = $72; $69 = $266; $70 = $267; $71 = $269; $270 = $70; $271 = $71; $68 = $271; $272 = $68; $273 = HEAP32[$272>>2]|0; HEAP32[$270>>2] = $273; $274 = ((($94)) + 4|0); $275 = HEAP32[$274>>2]|0; $276 = ((($275)) + -4|0); HEAP32[$274>>2] = $276; STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $19 = sp + 8|0; $22 = sp + 133|0; $29 = sp; $32 = sp + 132|0; $34 = $0; $35 = $34; $33 = $35; $36 = $33; $37 = ((($36)) + 4|0); $38 = HEAP32[$37>>2]|0; $30 = $36; $31 = $38; $39 = $30; $40 = $31; ;HEAP8[$29>>0]=HEAP8[$32>>0]|0; $27 = $39; $28 = $40; $41 = $27; while(1) { $42 = $28; $43 = ((($41)) + 8|0); $44 = HEAP32[$43>>2]|0; $45 = ($42|0)!=($44|0); if (!($45)) { break; } $26 = $41; $46 = $26; $47 = ((($46)) + 12|0); $25 = $47; $48 = $25; $49 = ((($48)) + 4|0); $24 = $49; $50 = $24; $51 = HEAP32[$50>>2]|0; $52 = ((($41)) + 8|0); $53 = HEAP32[$52>>2]|0; $54 = ((($53)) + -4|0); HEAP32[$52>>2] = $54; $23 = $54; $55 = $23; $20 = $51; $21 = $55; $56 = $20; $57 = $21; ;HEAP8[$19>>0]=HEAP8[$22>>0]|0; $17 = $56; $18 = $57; $58 = $17; $59 = $18; $15 = $58; $16 = $59; } $60 = HEAP32[$35>>2]|0; $61 = ($60|0)!=(0|0); if (!($61)) { STACKTOP = sp;return; } $14 = $35; $62 = $14; $63 = ((($62)) + 12|0); $13 = $63; $64 = $13; $65 = ((($64)) + 4|0); $12 = $65; $66 = $12; $67 = HEAP32[$66>>2]|0; $68 = HEAP32[$35>>2]|0; $4 = $35; $69 = $4; $3 = $69; $70 = $3; $71 = ((($70)) + 12|0); $2 = $71; $72 = $2; $1 = $72; $73 = $1; $74 = HEAP32[$73>>2]|0; $75 = HEAP32[$69>>2]|0; $76 = $74; $77 = $75; $78 = (($76) - ($77))|0; $79 = (($78|0) / 4)&-1; $9 = $67; $10 = $68; $11 = $79; $80 = $9; $81 = $10; $82 = $11; $6 = $80; $7 = $81; $8 = $82; $83 = $7; $5 = $83; $84 = $5; __ZdlPv($84); STACKTOP = sp;return; } function __ZNSt3__214__split_bufferIPN6laszip6models10arithmeticERNS_9allocatorIS4_EEE18__construct_at_endINS_13move_iteratorIPS4_EEEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeESE_SE_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 112|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(112|0); $17 = sp; $22 = sp + 100|0; $27 = $0; $29 = $27; $26 = $29; $30 = $26; $31 = ((($30)) + 12|0); $25 = $31; $32 = $25; $33 = ((($32)) + 4|0); $24 = $33; $34 = $24; $35 = HEAP32[$34>>2]|0; $28 = $35; while(1) { $5 = $1; $6 = $2; $36 = $5; $4 = $36; $37 = $4; $38 = HEAP32[$37>>2]|0; $39 = $6; $3 = $39; $40 = $3; $41 = HEAP32[$40>>2]|0; $42 = ($38|0)!=($41|0); if (!($42)) { break; } $43 = $28; $44 = ((($29)) + 8|0); $45 = HEAP32[$44>>2]|0; $7 = $45; $46 = $7; $8 = $1; $47 = $8; $48 = HEAP32[$47>>2]|0; $19 = $43; $20 = $46; $21 = $48; $49 = $19; $50 = $20; $51 = $21; $18 = $51; $52 = $18; ;HEAP8[$17>>0]=HEAP8[$22>>0]|0; $14 = $49; $15 = $50; $16 = $52; $53 = $14; $54 = $15; $55 = $16; $13 = $55; $56 = $13; $10 = $53; $11 = $54; $12 = $56; $57 = $11; $58 = $12; $9 = $58; $59 = $9; $60 = HEAP32[$59>>2]|0; HEAP32[$57>>2] = $60; $61 = ((($29)) + 8|0); $62 = HEAP32[$61>>2]|0; $63 = ((($62)) + 4|0); HEAP32[$61>>2] = $63; $23 = $1; $64 = $23; $65 = HEAP32[$64>>2]|0; $66 = ((($65)) + 4|0); HEAP32[$64>>2] = $66; } STACKTOP = sp;return; } function __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $7 = $1; $9 = $7; $6 = $9; $10 = $6; $11 = ((($10)) + 4|0); $12 = HEAP32[$11>>2]|0; $13 = ((($9)) + 16|0); $14 = HEAP32[$13>>2]|0; $15 = (($14>>>0) / 93)&-1; $16 = (($12) + ($15<<2)|0); $8 = $16; $17 = $8; $5 = $9; $18 = $5; $19 = ((($18)) + 8|0); $20 = HEAP32[$19>>2]|0; $21 = ((($18)) + 4|0); $22 = HEAP32[$21>>2]|0; $23 = ($20|0)==($22|0); if ($23) { $30 = 0; } else { $24 = $8; $25 = HEAP32[$24>>2]|0; $26 = ((($9)) + 16|0); $27 = HEAP32[$26>>2]|0; $28 = (($27>>>0) % 93)&-1; $29 = (($25) + (($28*44)|0)|0); $30 = $29; } $2 = $0; $3 = $17; $4 = $30; $31 = $2; $32 = $3; HEAP32[$31>>2] = $32; $33 = ((($31)) + 4|0); $34 = $4; HEAP32[$33>>2] = $34; STACKTOP = sp;return; } function __ZNKSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $10 = $1; $13 = $10; $9 = $13; $14 = $9; $15 = ((($14)) + 20|0); $8 = $15; $16 = $8; $7 = $16; $17 = $7; $18 = HEAP32[$17>>2]|0; $19 = ((($13)) + 16|0); $20 = HEAP32[$19>>2]|0; $21 = (($18) + ($20))|0; $11 = $21; $6 = $13; $22 = $6; $23 = ((($22)) + 4|0); $24 = HEAP32[$23>>2]|0; $25 = $11; $26 = (($25>>>0) / 93)&-1; $27 = (($24) + ($26<<2)|0); $12 = $27; $28 = $12; $2 = $13; $29 = $2; $30 = ((($29)) + 8|0); $31 = HEAP32[$30>>2]|0; $32 = ((($29)) + 4|0); $33 = HEAP32[$32>>2]|0; $34 = ($31|0)==($33|0); if ($34) { $40 = 0; $3 = $0; $4 = $28; $5 = $40; $41 = $3; $42 = $4; HEAP32[$41>>2] = $42; $43 = ((($41)) + 4|0); $44 = $5; HEAP32[$43>>2] = $44; STACKTOP = sp;return; } $35 = $12; $36 = HEAP32[$35>>2]|0; $37 = $11; $38 = (($37>>>0) % 93)&-1; $39 = (($36) + (($38*44)|0)|0); $40 = $39; $3 = $0; $4 = $28; $5 = $40; $41 = $3; $42 = $4; HEAP32[$41>>2] = $42; $43 = ((($41)) + 4|0); $44 = $5; HEAP32[$43>>2] = $44; STACKTOP = sp;return; } function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5clearEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0; var $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0; var $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0; var $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0; var $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0; var $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 192|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(192|0); $6 = sp + 8|0; $9 = sp + 177|0; $26 = sp; $29 = sp + 176|0; $41 = sp + 24|0; $42 = sp + 16|0; $39 = $0; $43 = $39; $38 = $43; $44 = $38; $45 = ((($44)) + 20|0); $37 = $45; $46 = $37; $36 = $46; $47 = $36; $40 = $47; __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($41,$43); __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($42,$43); while(1) { $34 = $41; $35 = $42; $48 = $34; $49 = $35; $32 = $48; $33 = $49; $50 = $32; $51 = ((($50)) + 4|0); $52 = HEAP32[$51>>2]|0; $53 = $33; $54 = ((($53)) + 4|0); $55 = HEAP32[$54>>2]|0; $56 = ($52|0)==($55|0); $57 = $56 ^ 1; if (!($57)) { break; } $58 = $40; $16 = $41; $59 = $16; $60 = ((($59)) + 4|0); $61 = HEAP32[$60>>2]|0; $1 = $61; $62 = $1; $7 = $58; $8 = $62; $63 = $7; $64 = $8; ;HEAP8[$6>>0]=HEAP8[$9>>0]|0; $4 = $63; $5 = $64; $65 = $4; $66 = $5; $2 = $65; $3 = $66; $67 = $3; __ZN6laszip6models10arithmeticD2Ev($67); $10 = $41; $68 = $10; $69 = ((($68)) + 4|0); $70 = HEAP32[$69>>2]|0; $71 = ((($70)) + 44|0); HEAP32[$69>>2] = $71; $72 = HEAP32[$68>>2]|0; $73 = HEAP32[$72>>2]|0; $74 = $71; $75 = $73; $76 = (($74) - ($75))|0; $77 = (($76|0) / 44)&-1; $78 = ($77|0)==(93); if ($78) { $79 = HEAP32[$68>>2]|0; $80 = ((($79)) + 4|0); HEAP32[$68>>2] = $80; $81 = HEAP32[$68>>2]|0; $82 = HEAP32[$81>>2]|0; $83 = ((($68)) + 4|0); HEAP32[$83>>2] = $82; } } $13 = $43; $84 = $13; $85 = ((($84)) + 20|0); $12 = $85; $86 = $12; $11 = $86; $87 = $11; HEAP32[$87>>2] = 0; while(1) { $14 = $43; $88 = $14; $89 = ((($88)) + 8|0); $90 = HEAP32[$89>>2]|0; $91 = ((($88)) + 4|0); $92 = HEAP32[$91>>2]|0; $93 = $90; $94 = $92; $95 = (($93) - ($94))|0; $96 = (($95|0) / 4)&-1; $97 = ($96>>>0)>(2); if (!($97)) { break; } $98 = $40; $15 = $43; $99 = $15; $100 = ((($99)) + 4|0); $101 = HEAP32[$100>>2]|0; $102 = HEAP32[$101>>2]|0; $21 = $98; $22 = $102; $23 = 93; $103 = $21; $104 = $22; $105 = $23; $18 = $103; $19 = $104; $20 = $105; $106 = $19; $17 = $106; $107 = $17; __ZdlPv($107); $30 = $43; $108 = $30; $109 = ((($108)) + 4|0); $110 = HEAP32[$109>>2]|0; $111 = ((($110)) + 4|0); $27 = $108; $28 = $111; $112 = $27; $113 = $28; ;HEAP8[$26>>0]=HEAP8[$29>>0]|0; $24 = $112; $25 = $113; $114 = $24; $115 = $25; $116 = ((($114)) + 4|0); HEAP32[$116>>2] = $115; } $31 = $43; $117 = $31; $118 = ((($117)) + 8|0); $119 = HEAP32[$118>>2]|0; $120 = ((($117)) + 4|0); $121 = HEAP32[$120>>2]|0; $122 = $119; $123 = $121; $124 = (($122) - ($123))|0; $125 = (($124|0) / 4)&-1; switch ($125|0) { case 1: { $126 = ((($43)) + 16|0); HEAP32[$126>>2] = 46; STACKTOP = sp;return; break; } case 2: { $127 = ((($43)) + 16|0); HEAP32[$127>>2] = 93; STACKTOP = sp;return; break; } default: { STACKTOP = sp;return; } } } function __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $7 = $1; $9 = $7; $6 = $9; $10 = $6; $11 = ((($10)) + 4|0); $12 = HEAP32[$11>>2]|0; $13 = ((($9)) + 16|0); $14 = HEAP32[$13>>2]|0; $15 = (($14>>>0) / 93)&-1; $16 = (($12) + ($15<<2)|0); $8 = $16; $17 = $8; $5 = $9; $18 = $5; $19 = ((($18)) + 8|0); $20 = HEAP32[$19>>2]|0; $21 = ((($18)) + 4|0); $22 = HEAP32[$21>>2]|0; $23 = ($20|0)==($22|0); if ($23) { $30 = 0; } else { $24 = $8; $25 = HEAP32[$24>>2]|0; $26 = ((($9)) + 16|0); $27 = HEAP32[$26>>2]|0; $28 = (($27>>>0) % 93)&-1; $29 = (($25) + (($28*44)|0)|0); $30 = $29; } $2 = $0; $3 = $17; $4 = $30; $31 = $2; $32 = $3; HEAP32[$31>>2] = $32; $33 = ((($31)) + 4|0); $34 = $4; HEAP32[$33>>2] = $34; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldINS0_3las10extrabytesENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0; var $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0; var $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0; var $190 = 0, $191 = 0, $192 = 0, $193 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0; var $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0; var $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0; var $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0; var $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 288|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(288|0); $5 = sp + 268|0; $8 = sp + 256|0; $13 = sp + 236|0; $16 = sp + 224|0; $28 = sp + 176|0; $31 = sp + 164|0; $46 = sp + 104|0; $50 = sp + 88|0; $63 = sp + 36|0; $64 = sp + 32|0; $65 = sp + 24|0; $66 = sp + 16|0; $67 = sp + 12|0; $68 = sp + 8|0; $69 = sp; $59 = $0; $60 = $1; $61 = $2; $70 = $59; $71 = ((($70)) + 4|0); $72 = HEAP8[$71>>0]|0; $73 = $72&1; if (!($73)) { $74 = $60; $75 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE11getInStreamEv($74)|0); $76 = $61; $77 = HEAP32[$70>>2]|0; __ZN6laszip2io18__ifstream_wrapperINS_7streams13memory_streamEE8getBytesEPhj($75,$76,$77); $78 = $61; $79 = $61; $80 = HEAP32[$70>>2]|0; $81 = (($79) + ($80)|0); $82 = ((($70)) + 8|0); $57 = $82; $83 = $57; $84 = HEAP32[$83>>2]|0; $56 = $84; $85 = $56; $39 = $78; $40 = $81; $41 = $85; $86 = $39; $38 = $86; $87 = $38; $88 = $40; $33 = $88; $89 = $33; $90 = $41; $34 = $90; $91 = $34; $35 = $87; $36 = $89; $37 = $91; while(1) { $92 = $35; $93 = $36; $94 = ($92|0)!=($93|0); if (!($94)) { break; } $95 = $35; $96 = HEAP8[$95>>0]|0; $97 = $37; HEAP8[$97>>0] = $96; $98 = $35; $99 = ((($98)) + 1|0); $35 = $99; $100 = $37; $101 = ((($100)) + 1|0); $37 = $101; } $102 = ((($70)) + 4|0); HEAP8[$102>>0] = 1; $103 = $61; $104 = HEAP32[$70>>2]|0; $105 = (($103) + ($104)|0); $58 = $105; $193 = $58; STACKTOP = sp;return ($193|0); } $106 = ((($70)) + 20|0); $62 = $106; $107 = $62; $32 = $107; $108 = $32; $109 = HEAP32[$108>>2]|0; $29 = $108; $30 = $109; $110 = $30; $26 = $28; $27 = $110; $111 = $26; $112 = $27; HEAP32[$111>>2] = $112; $113 = HEAP32[$28>>2]|0; HEAP32[$31>>2] = $113; $114 = HEAP32[$31>>2]|0; HEAP32[$63>>2] = $114; $115 = ((($70)) + 8|0); $9 = $115; $116 = $9; $117 = HEAP32[$116>>2]|0; $6 = $116; $7 = $117; $118 = $7; $3 = $5; $4 = $118; $119 = $3; $120 = $4; HEAP32[$119>>2] = $120; $121 = HEAP32[$5>>2]|0; HEAP32[$8>>2] = $121; $122 = HEAP32[$8>>2]|0; HEAP32[$64>>2] = $122; $123 = ((($70)) + 32|0); $10 = $123; $124 = $10; __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE5beginEv($65,$124); while(1) { $125 = ((($70)) + 8|0); $17 = $125; $126 = $17; $127 = ((($126)) + 4|0); $128 = HEAP32[$127>>2]|0; $14 = $126; $15 = $128; $129 = $15; $11 = $13; $12 = $129; $130 = $11; $131 = $12; HEAP32[$130>>2] = $131; $132 = HEAP32[$13>>2]|0; HEAP32[$16>>2] = $132; $133 = HEAP32[$16>>2]|0; HEAP32[$66>>2] = $133; $22 = $64; $23 = $66; $134 = $22; $135 = $23; $20 = $134; $21 = $135; $136 = $20; $19 = $136; $137 = $19; $138 = HEAP32[$137>>2]|0; $139 = $21; $18 = $139; $140 = $18; $141 = HEAP32[$140>>2]|0; $142 = ($138|0)==($141|0); $143 = $142 ^ 1; if (!($143)) { break; } $24 = $64; $144 = $24; $145 = HEAP32[$144>>2]|0; $146 = HEAP8[$145>>0]|0; $147 = $146&255; $148 = $60; $25 = $65; $149 = $25; $150 = ((($149)) + 4|0); $151 = HEAP32[$150>>2]|0; $152 = (__ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE12decodeSymbolINS_6models10arithmeticEEEjRT_($148,$151)|0); $153 = (($147) + ($152))|0; $154 = (__Z7u8_foldi($153)|0); $42 = $63; $155 = $42; $156 = HEAP32[$155>>2]|0; HEAP8[$156>>0] = $154; $43 = $63; $157 = $43; $158 = HEAP32[$157>>2]|0; $159 = HEAP8[$158>>0]|0; $160 = $61; HEAP8[$160>>0] = $159; $44 = $64; $161 = $44; $162 = HEAP32[$161>>2]|0; HEAP8[$162>>0] = $159; $47 = $64; $48 = 0; $163 = $47; ;HEAP32[$46>>2]=HEAP32[$163>>2]|0; $45 = $163; $164 = $45; $165 = HEAP32[$164>>2]|0; $166 = ((($165)) + 1|0); HEAP32[$164>>2] = $166; $167 = HEAP32[$46>>2]|0; HEAP32[$67>>2] = $167; $168 = $61; $169 = ((($168)) + 1|0); $61 = $169; $51 = $63; $52 = 0; $170 = $51; ;HEAP32[$50>>2]=HEAP32[$170>>2]|0; $49 = $170; $171 = $49; $172 = HEAP32[$171>>2]|0; $173 = ((($172)) + 1|0); HEAP32[$171>>2] = $173; $174 = HEAP32[$50>>2]|0; HEAP32[$68>>2] = $174; $54 = $65; $55 = 0; $175 = $54; ;HEAP32[$69>>2]=HEAP32[$175>>2]|0;HEAP32[$69+4>>2]=HEAP32[$175+4>>2]|0; $53 = $175; $176 = $53; $177 = ((($176)) + 4|0); $178 = HEAP32[$177>>2]|0; $179 = ((($178)) + 44|0); HEAP32[$177>>2] = $179; $180 = HEAP32[$176>>2]|0; $181 = HEAP32[$180>>2]|0; $182 = $179; $183 = $181; $184 = (($182) - ($183))|0; $185 = (($184|0) / 44)&-1; $186 = ($185|0)==(93); if ($186) { $187 = HEAP32[$176>>2]|0; $188 = ((($187)) + 4|0); HEAP32[$176>>2] = $188; $189 = HEAP32[$176>>2]|0; $190 = HEAP32[$189>>2]|0; $191 = ((($176)) + 4|0); HEAP32[$191>>2] = $190; } } $192 = $61; $58 = $192; $193 = $58; STACKTOP = sp;return ($193|0); } function __Z7u8_foldi($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = $2&255; STACKTOP = sp;return ($3|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 480; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZNSt3__26vectorIhNS_9allocatorIhEEEC2Ej($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $12 = sp + 8|0; $13 = $0; $14 = $1; $15 = $13; $11 = $15; $16 = $11; $10 = $16; HEAP32[$16>>2] = 0; $17 = ((($16)) + 4|0); HEAP32[$17>>2] = 0; $18 = ((($16)) + 8|0); HEAP32[$12>>2] = 0; $8 = $18; $9 = $12; $19 = $8; $20 = $9; $7 = $20; $21 = $7; $3 = $19; $4 = $21; $22 = $3; $23 = $4; $2 = $23; HEAP32[$22>>2] = 0; $6 = $19; $24 = $6; $5 = $24; $25 = $14; $26 = ($25>>>0)>(0); if (!($26)) { STACKTOP = sp;return; } $27 = $14; __ZNSt3__26vectorIhNS_9allocatorIhEEE8allocateEj($15,$27); $28 = $14; __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($15,$28); STACKTOP = sp;return; } function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEEC2EjRKS3_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 96|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(96|0); $20 = sp + 20|0; $22 = sp + 12|0; $23 = $0; $24 = $1; $25 = $2; $26 = $23; $21 = $26; $27 = $21; $19 = $27; $28 = $19; HEAP32[$28>>2] = 0; $29 = ((($28)) + 4|0); HEAP32[$29>>2] = 0; $30 = ((($28)) + 8|0); HEAP32[$30>>2] = 0; $31 = ((($28)) + 12|0); HEAP32[$20>>2] = 0; $17 = $31; $18 = $20; $32 = $17; $33 = $18; $16 = $33; $34 = $16; $12 = $32; $13 = $34; $35 = $12; $36 = $13; $11 = $36; HEAP32[$35>>2] = 0; $15 = $32; $37 = $15; $14 = $37; $38 = ((($27)) + 16|0); HEAP32[$38>>2] = 0; $39 = ((($27)) + 20|0); HEAP32[$22>>2] = 0; $9 = $39; $10 = $22; $40 = $9; $41 = $10; $8 = $41; $42 = $8; $4 = $40; $5 = $42; $43 = $4; $44 = $5; $3 = $44; $45 = $3; $46 = HEAP32[$45>>2]|0; HEAP32[$43>>2] = $46; $7 = $40; $47 = $7; $6 = $47; $48 = $24; $49 = ($48>>>0)>(0); if (!($49)) { STACKTOP = sp;return; } $50 = $24; $51 = $25; __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($26,$50,$51); STACKTOP = sp;return; } function __ZNSt3__26vectorIhNS_9allocatorIhEEE18__construct_at_endEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 80|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(80|0); $10 = sp; $13 = sp + 73|0; $21 = sp + 72|0; $18 = $0; $19 = $1; $22 = $18; $17 = $22; $23 = $17; $24 = ((($23)) + 8|0); $16 = $24; $25 = $16; $15 = $25; $26 = $15; $20 = $26; while(1) { $2 = $21; $3 = $22; $4 = 1; $27 = $20; $28 = ((($22)) + 4|0); $29 = HEAP32[$28>>2]|0; $5 = $29; $30 = $5; $11 = $27; $12 = $30; $31 = $11; $32 = $12; ;HEAP8[$10>>0]=HEAP8[$13>>0]|0; $8 = $31; $9 = $32; $33 = $8; $34 = $9; $6 = $33; $7 = $34; $35 = $7; HEAP8[$35>>0] = 0; $36 = ((($22)) + 4|0); $37 = HEAP32[$36>>2]|0; $38 = ((($37)) + 1|0); HEAP32[$36>>2] = $38; $39 = $19; $40 = (($39) + -1)|0; $19 = $40; $14 = $21; $41 = $19; $42 = ($41>>>0)>(0); if (!($42)) { break; } } STACKTOP = sp;return; } function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE8__appendEjRKS3_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0; var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0; var $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0; var $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0; var $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0; var $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); $20 = sp; $25 = sp + 148|0; $38 = sp + 8|0; $33 = $0; $34 = $1; $35 = $2; $39 = $33; $32 = $39; $40 = $32; $41 = ((($40)) + 20|0); $31 = $41; $42 = $31; $30 = $42; $43 = $30; $36 = $43; $11 = $39; $44 = $11; $10 = $44; $45 = $10; $9 = $45; $46 = $9; $47 = ((($46)) + 8|0); $48 = HEAP32[$47>>2]|0; $49 = ((($46)) + 4|0); $50 = HEAP32[$49>>2]|0; $51 = $48; $52 = $50; $53 = (($51) - ($52))|0; $54 = (($53|0) / 4)&-1; $55 = ($54|0)==(0); if ($55) { $76 = 0; } else { $8 = $45; $56 = $8; $57 = ((($56)) + 8|0); $58 = HEAP32[$57>>2]|0; $59 = ((($56)) + 4|0); $60 = HEAP32[$59>>2]|0; $61 = $58; $62 = $60; $63 = (($61) - ($62))|0; $64 = (($63|0) / 4)&-1; $65 = ($64*93)|0; $66 = (($65) - 1)|0; $76 = $66; } $67 = ((($44)) + 16|0); $68 = HEAP32[$67>>2]|0; $7 = $44; $69 = $7; $70 = ((($69)) + 20|0); $6 = $70; $71 = $6; $5 = $71; $72 = $5; $73 = HEAP32[$72>>2]|0; $74 = (($68) + ($73))|0; $75 = (($76) - ($74))|0; $37 = $75; $77 = $34; $78 = $37; $79 = ($77>>>0)>($78>>>0); if ($79) { $80 = $34; $81 = $37; $82 = (($80) - ($81))|0; __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEE19__add_back_capacityEj($39,$82); } __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEE3endEv($38,$39); while(1) { $83 = $34; $84 = ($83|0)!=(0); if (!($84)) { break; } $85 = $36; $3 = $38; $86 = $3; $87 = ((($86)) + 4|0); $88 = HEAP32[$87>>2]|0; $4 = $88; $89 = $4; $90 = $35; $22 = $85; $23 = $89; $24 = $90; $91 = $22; $92 = $23; $93 = $24; $21 = $93; $94 = $21; ;HEAP8[$20>>0]=HEAP8[$25>>0]|0; $17 = $91; $18 = $92; $19 = $94; $95 = $17; $96 = $18; $97 = $19; $16 = $97; $98 = $16; $13 = $95; $14 = $96; $15 = $98; $99 = $14; $100 = $15; $12 = $100; $101 = $12; __ZN6laszip6models10arithmeticC2ERKS1_($99,$101); $102 = $34; $103 = (($102) + -1)|0; $34 = $103; $26 = $38; $104 = $26; $105 = ((($104)) + 4|0); $106 = HEAP32[$105>>2]|0; $107 = ((($106)) + 44|0); HEAP32[$105>>2] = $107; $108 = HEAP32[$104>>2]|0; $109 = HEAP32[$108>>2]|0; $110 = $107; $111 = $109; $112 = (($110) - ($111))|0; $113 = (($112|0) / 44)&-1; $114 = ($113|0)==(93); if ($114) { $115 = HEAP32[$104>>2]|0; $116 = ((($115)) + 4|0); HEAP32[$104>>2] = $116; $117 = HEAP32[$104>>2]|0; $118 = HEAP32[$117>>2]|0; $119 = ((($104)) + 4|0); HEAP32[$119>>2] = $118; } $29 = $39; $120 = $29; $121 = ((($120)) + 20|0); $28 = $121; $122 = $28; $27 = $122; $123 = $27; $124 = HEAP32[$123>>2]|0; $125 = (($124) + 1)|0; HEAP32[$123>>2] = $125; } STACKTOP = sp;return; } function __ZNSt3__25dequeIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__212__deque_baseIN6laszip6models10arithmeticENS_9allocatorIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEEC2ERS9_PSH_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $10 = sp + 12|0; $11 = $0; $12 = $1; $13 = $2; $14 = $11; __ZN6laszip7formats20dynamic_decompressorC2Ev($14); HEAP32[$14>>2] = (2256); $15 = ((($14)) + 4|0); $16 = $12; HEAP32[$15>>2] = $16; $17 = ((($14)) + 8|0); $18 = $13; $9 = $17; HEAP32[$10>>2] = $18; $19 = $9; $7 = $19; $8 = $10; $20 = $7; $21 = $8; $6 = $21; $22 = $6; $4 = $20; $5 = $22; $23 = $4; $24 = $5; $3 = $24; $25 = $3; $26 = HEAP32[$25>>2]|0; HEAP32[$23>>2] = $26; STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISP_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2276); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 8|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEE10decompressEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $5 = $0; $6 = $1; $7 = $5; $8 = ((($7)) + 8|0); $4 = $8; $9 = $4; $3 = $9; $10 = $3; $2 = $10; $11 = $2; $12 = HEAP32[$11>>2]|0; $13 = ((($7)) + 4|0); $14 = HEAP32[$13>>2]|0; $15 = $6; $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($12,$14,$15)|0); STACKTOP = sp;return ($16|0); } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $13 = $0; $14 = $13; HEAP32[$14>>2] = (2256); $15 = ((($14)) + 8|0); $12 = $15; $16 = $12; $9 = $16; $10 = 0; $17 = $9; $8 = $17; $18 = $8; $7 = $18; $19 = $7; $20 = HEAP32[$19>>2]|0; $11 = $20; $21 = $10; $4 = $17; $22 = $4; $3 = $22; $23 = $3; HEAP32[$23>>2] = $21; $24 = $11; $25 = ($24|0)!=(0|0); if ($25) { $2 = $17; $26 = $2; $1 = $26; $27 = $1; $28 = $11; $5 = $27; $6 = $28; $29 = $6; $30 = ($29|0)==(0|0); if (!($30)) { __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($29); __ZdlPv($29); } } __ZN6laszip7formats20dynamic_decompressorD2Ev($14); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; $8 = $5; $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); $5 = $9; $10 = ((($6)) + 4784|0); $11 = $4; $12 = $5; $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0); STACKTOP = sp;return ($13|0); } function __ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = HEAP8[$6>>0]|0; $8 = $7&1; if (!($8)) { $10 = $5; STACKTOP = sp;return ($10|0); } $9 = $4; __ZN6laszip8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEE13readInitBytesEv($9); HEAP8[$6>>0] = 0; $10 = $5; STACKTOP = sp;return ($10|0); } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 8|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 520; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP8[$2>>0] = 1; STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $10 = sp + 12|0; $11 = $0; $12 = $1; $13 = $2; $14 = $11; __ZN6laszip7formats20dynamic_decompressorC2Ev($14); HEAP32[$14>>2] = (2304); $15 = ((($14)) + 4|0); $16 = $12; HEAP32[$15>>2] = $16; $17 = ((($14)) + 8|0); $18 = $13; $9 = $17; HEAP32[$10>>2] = $18; $19 = $9; $7 = $19; $8 = $10; $20 = $7; $21 = $8; $6 = $21; $22 = $6; $4 = $20; $5 = $22; $23 = $4; $24 = $5; $3 = $24; $25 = $3; $26 = HEAP32[$25>>2]|0; HEAP32[$23>>2] = $26; STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2324); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 8|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEE10decompressEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $5 = $0; $6 = $1; $7 = $5; $8 = ((($7)) + 8|0); $4 = $8; $9 = $4; $3 = $9; $10 = $3; $2 = $10; $11 = $2; $12 = HEAP32[$11>>2]|0; $13 = ((($7)) + 4|0); $14 = HEAP32[$13>>2]|0; $15 = $6; $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0); STACKTOP = sp;return ($16|0); } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $13 = $0; $14 = $13; HEAP32[$14>>2] = (2304); $15 = ((($14)) + 8|0); $12 = $15; $16 = $12; $9 = $16; $10 = 0; $17 = $9; $8 = $17; $18 = $8; $7 = $18; $19 = $7; $20 = HEAP32[$19>>2]|0; $11 = $20; $21 = $10; $4 = $17; $22 = $4; $3 = $22; $23 = $3; HEAP32[$23>>2] = $21; $24 = $11; $25 = ($24|0)!=(0|0); if ($25) { $2 = $17; $26 = $2; $1 = $26; $27 = $1; $28 = $11; $5 = $27; $6 = $28; $29 = $6; $30 = ($29|0)==(0|0); if (!($30)) { __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($29); __ZdlPv($29); } } __ZN6laszip7formats20dynamic_decompressorD2Ev($14); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; $8 = $5; $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); $5 = $9; $10 = ((($6)) + 4784|0); $11 = $4; $12 = $5; $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0); STACKTOP = sp;return ($13|0); } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; $8 = $5; $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); $5 = $9; $10 = ((($6)) + 328|0); $11 = $4; $12 = $5; $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0); STACKTOP = sp;return ($13|0); } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4784|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($3); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 8|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 560; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2); $3 = ((($2)) + 328|0); __ZN6laszip7formats19record_decompressorIJEEC2Ev($3); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEEC2ERS9_PSK_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $10 = sp + 12|0; $11 = $0; $12 = $1; $13 = $2; $14 = $11; __ZN6laszip7formats20dynamic_decompressorC2Ev($14); HEAP32[$14>>2] = (2352); $15 = ((($14)) + 4|0); $16 = $12; HEAP32[$15>>2] = $16; $17 = ((($14)) + 8|0); $18 = $13; $9 = $17; HEAP32[$10>>2] = $18; $19 = $9; $7 = $19; $8 = $10; $20 = $7; $21 = $8; $6 = $21; $22 = $6; $4 = $20; $5 = $22; $23 = $4; $24 = $5; $3 = $24; $25 = $3; $26 = HEAP32[$25>>2]|0; HEAP32[$23>>2] = $26; STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_3rgbENSJ_ISM_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISS_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2372); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 8|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEE10decompressEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $5 = $0; $6 = $1; $7 = $5; $8 = ((($7)) + 8|0); $4 = $8; $9 = $4; $3 = $9; $10 = $3; $2 = $10; $11 = $2; $12 = HEAP32[$11>>2]|0; $13 = ((($7)) + 4|0); $14 = HEAP32[$13>>2]|0; $15 = $6; $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($12,$14,$15)|0); STACKTOP = sp;return ($16|0); } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $13 = $0; $14 = $13; HEAP32[$14>>2] = (2352); $15 = ((($14)) + 8|0); $12 = $15; $16 = $12; $9 = $16; $10 = 0; $17 = $9; $8 = $17; $18 = $8; $7 = $18; $19 = $7; $20 = HEAP32[$19>>2]|0; $11 = $20; $21 = $10; $4 = $17; $22 = $4; $3 = $22; $23 = $3; HEAP32[$23>>2] = $21; $24 = $11; $25 = ($24|0)!=(0|0); if ($25) { $2 = $17; $26 = $2; $1 = $26; $27 = $1; $28 = $11; $5 = $27; $6 = $28; $29 = $6; $30 = ($29|0)==(0|0); if (!($30)) { __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($29); __ZdlPv($29); } } __ZN6laszip7formats20dynamic_decompressorD2Ev($14); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; $8 = $5; $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); $5 = $9; $10 = ((($6)) + 4784|0); $11 = $4; $12 = $5; $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0); STACKTOP = sp;return ($13|0); } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; $8 = $5; $9 = (__ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); $5 = $9; $10 = ((($6)) + 316|0); $11 = $4; $12 = $5; $13 = (__ZN6laszip7formats19record_decompressorIJEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SC_($10,$11,$12)|0); STACKTOP = sp;return ($13|0); } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4784|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 8|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 600; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las3rgbENS0_20standard_diff_methodIS3_EEEC2Ev($2); $3 = ((($2)) + 316|0); __ZN6laszip7formats19record_decompressorIJEEC2Ev($3); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEEC2ERS9_PSN_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $10 = sp + 12|0; $11 = $0; $12 = $1; $13 = $2; $14 = $11; __ZN6laszip7formats20dynamic_decompressorC2Ev($14); HEAP32[$14>>2] = (2400); $15 = ((($14)) + 4|0); $16 = $12; HEAP32[$15>>2] = $16; $17 = ((($14)) + 8|0); $18 = $13; $9 = $17; HEAP32[$10>>2] = $18; $19 = $9; $7 = $19; $8 = $10; $20 = $7; $21 = $8; $6 = $21; $22 = $6; $4 = $20; $5 = $22; $23 = $4; $24 = $5; $3 = $24; $25 = $3; $26 = HEAP32[$25>>2]|0; HEAP32[$23>>2] = $26; STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEEC2INS2_21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISI_EEEENSG_INSH_7gpstimeENSJ_ISM_EEEENSG_INSH_3rgbENSJ_ISP_EEEEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISV_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2420); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats20dynamic_decompressorEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 8|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEE10decompressEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $5 = $0; $6 = $1; $7 = $5; $8 = ((($7)) + 8|0); $4 = $8; $9 = $4; $3 = $9; $10 = $3; $2 = $10; $11 = $2; $12 = HEAP32[$11>>2]|0; $13 = ((($7)) + 4|0); $14 = HEAP32[$13>>2]|0; $15 = $6; $16 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SO_($12,$14,$15)|0); STACKTOP = sp;return ($16|0); } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $13 = $0; $14 = $13; HEAP32[$14>>2] = (2400); $15 = ((($14)) + 8|0); $12 = $15; $16 = $12; $9 = $16; $10 = 0; $17 = $9; $8 = $17; $18 = $8; $7 = $18; $19 = $7; $20 = HEAP32[$19>>2]|0; $11 = $20; $21 = $10; $4 = $17; $22 = $4; $3 = $22; $23 = $3; HEAP32[$23>>2] = $21; $24 = $11; $25 = ($24|0)!=(0|0); if ($25) { $2 = $17; $26 = $2; $1 = $26; $27 = $1; $28 = $11; $5 = $27; $6 = $28; $29 = $6; $30 = ($29|0)==(0|0); if (!($30)) { __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($29); __ZdlPv($29); } } __ZN6laszip7formats20dynamic_decompressorD2Ev($14); STACKTOP = sp;return; } function __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SO_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; $8 = $5; $9 = (__ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); $5 = $9; $10 = ((($6)) + 4784|0); $11 = $4; $12 = $5; $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($10,$11,$12)|0); STACKTOP = sp;return ($13|0); } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SL_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; $8 = $5; $9 = (__ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SG_($6,$7,$8)|0); $5 = $9; $10 = ((($6)) + 328|0); $11 = $4; $12 = $5; $13 = (__ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEE14decompressWithINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEEEPcRT_SI_($10,$11,$12)|0); STACKTOP = sp;return ($13|0); } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodIS4_EEEENS2_INS3_7gpstimeENS5_IS8_EEEENS2_INS3_3rgbENS5_ISB_EEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4784|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($3); __ZN6laszip7formats5fieldINS0_3las7point10ENS0_20standard_diff_methodIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 328|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEED2Ev($3); __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEED2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 8|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 640; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS4_EEEENS2_INS3_3rgbENS5_IS8_EEEEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats5fieldINS0_3las7gpstimeENS0_20standard_diff_methodIS3_EEEC2Ev($2); $3 = ((($2)) + 328|0); __ZN6laszip7formats19record_decompressorIJNS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodIS4_EEEEEEC2Ev($3); STACKTOP = sp;return; } function __ZNK6laszip2io6reader10basic_fileINS_7streams13memory_streamEE10get_headerEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 20|0); STACKTOP = sp;return ($3|0); } function __ZN10buf_streamC2EPhj($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $3; $7 = $4; HEAP32[$6>>2] = $7; $8 = ((($6)) + 4|0); $9 = $5; HEAP32[$8>>2] = $9; $10 = ((($6)) + 8|0); HEAP32[$10>>2] = 0; STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticI10buf_streamEC2ERS2_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; HEAP32[$4>>2] = $5; $6 = ((($4)) + 4|0); HEAP32[$6>>2] = 0; $7 = ((($4)) + 8|0); HEAP32[$7>>2] = -1; STACKTOP = sp;return; } function __ZN6laszip7formatsL25make_dynamic_decompressorINS_8decoders10arithmeticI10buf_streamEEEENS0_26dynamic_field_decompressorIT_E3ptrERS7_($0,$1) { $0 = $0|0; $1 = $1|0; var $$byval_copy = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $$byval_copy = sp + 8|0; $3 = sp; $2 = $1; $4 = (__Znwj(24)|0); $5 = $2; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($4,$5); ;HEAP32[$3>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$3>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$4,$$byval_copy); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrI10buf_streamEC2IS1_EEPT_NS_9enable_ifIXsr14is_convertibleIS5_PS1_EE5valueENS2_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0; var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0; var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0; var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0; var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0; var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2448); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } __ZdlPv($133); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrI10buf_streamED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrI10buf_streamE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { __ZdlPv($28); } $30 = ((($16)) + 12|0); $10 = $30; $31 = $10; $9 = $31; $32 = $9; $12 = $32; $33 = $12; $11 = $33; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 664; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEEC2IS5_EEPT_NS_9enable_ifIXsr14is_convertibleIS9_PS5_EE5valueENS6_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $14 = 0; var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0; var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0; var $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0; var $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0; var $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $50 = sp + 76|0; $51 = sp + 72|0; $52 = sp + 8|0; $53 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$52>>0]=HEAP8[$67>>0]|0; ;HEAP8[$53>>0]=HEAP8[$66>>0]|0; $49 = $79; HEAP32[$50>>2] = $80; $81 = $49; $47 = $81; $48 = 0; $82 = $47; $83 = $48; $45 = $82; $46 = $83; $84 = $45; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $46; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $48; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2476); $89 = ((($81)) + 12|0); $21 = $53; $90 = $21; $30 = $51; $31 = $50; $32 = $90; $91 = $30; $92 = $31; $29 = $92; $93 = $29; $23 = $91; $24 = $93; $94 = $23; $95 = $24; $22 = $95; $96 = $22; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $32; $25 = $98; $99 = $25; $27 = $91; $28 = $99; $100 = $28; $26 = $100; $33 = $52; $101 = $33; $42 = $89; $43 = $51; $44 = $101; $102 = $42; $103 = $43; $41 = $103; $104 = $41; $35 = $102; $36 = $104; $105 = $35; $106 = $36; $34 = $106; $107 = $34; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $44; $37 = $108; $109 = $37; $39 = $102; $40 = $109; $110 = $40; $38 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($68,$vararg_buffer); $20 = $65; $120 = $20; $17 = $120; $18 = 0; $121 = $17; $16 = $121; $122 = $16; $15 = $122; $123 = $15; $124 = HEAP32[$123>>2]|0; $19 = $124; $125 = $18; $12 = $121; $126 = $12; $11 = $126; $127 = $11; HEAP32[$127>>2] = $125; $128 = $19; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $10 = $121; $130 = $10; $9 = $130; $131 = $9; $132 = $19; $13 = $131; $14 = $132; $133 = $14; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($133); __ZdlPv($133); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($0) { $0 = $0|0; var $$expand_i1_val = 0, $$expand_i1_val2 = 0, $$pre_trunc = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $4 = sp + 24|0; $7 = $0; $8 = $7; $9 = ((($8)) + 4|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)!=(0|0); if (!($11)) { STACKTOP = sp;return; } $12 = ((($8)) + 4|0); $13 = HEAP32[$12>>2]|0; $6 = $13; $14 = $6; $5 = $14; $15 = $5; $16 = ((($15)) + 4|0); $1 = $16; $17 = $1; $2 = -1; $18 = $2; $19 = HEAP32[$17>>2]|0; $20 = (($19) + ($18))|0; HEAP32[$17>>2] = $20; $21 = (($19) + ($18))|0; $3 = $21; $22 = $3; $23 = ($22|0)==(-1); if ($23) { $24 = HEAP32[$15>>2]|0; $25 = ((($24)) + 8|0); $26 = HEAP32[$25>>2]|0; FUNCTION_TABLE_vi[$26 & 511]($15); $$expand_i1_val = 1; HEAP8[$4>>0] = $$expand_i1_val; } else { $$expand_i1_val2 = 0; HEAP8[$4>>0] = $$expand_i1_val2; } $$pre_trunc = HEAP8[$4>>0]|0; $27 = $$pre_trunc&1; if (!($27)) { STACKTOP = sp;return; } __ZNSt3__219__shared_weak_count14__release_weakEv($14); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $4 = $22; $23 = $4; $3 = $23; $24 = $3; $2 = $24; $25 = $2; $1 = $25; $26 = $1; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($28); __ZdlPv($28); } $30 = ((($16)) + 12|0); $10 = $30; $31 = $10; $9 = $31; $32 = $9; $12 = $32; $33 = $12; $11 = $33; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 688; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticI10buf_streamED2Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEEC2ERS5_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $12 = sp + 12|0; $14 = $0; $15 = $1; $16 = $14; __ZN6laszip7formats20dynamic_decompressorC2Ev($16); HEAP32[$16>>2] = (2504); $17 = ((($16)) + 4|0); $18 = $15; HEAP32[$17>>2] = $18; $19 = ((($16)) + 8|0); $13 = $19; $20 = $13; $11 = $20; $21 = $11; $10 = $21; HEAP32[$21>>2] = 0; $22 = ((($21)) + 4|0); HEAP32[$22>>2] = 0; $23 = ((($21)) + 8|0); HEAP32[$12>>2] = 0; $8 = $23; $9 = $12; $24 = $8; $25 = $9; $7 = $25; $26 = $7; $3 = $24; $4 = $26; $27 = $3; $28 = $4; $2 = $28; HEAP32[$27>>2] = 0; $6 = $24; $29 = $6; $5 = $29; $30 = ((($16)) + 20|0); HEAP8[$30>>0] = 1; STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEEC2IS8_EEPT_NS_9enable_ifIXsr14is_convertibleISC_PS8_EE5valueENS9_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2524); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 8|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE10decompressEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0; var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0; var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0; var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0; var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0; var $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); $20 = sp + 72|0; $23 = sp + 60|0; $27 = sp + 44|0; $30 = sp + 32|0; $35 = sp + 12|0; $36 = sp + 8|0; $37 = sp; $32 = $0; $33 = $1; $38 = $32; $39 = ((($38)) + 8|0); $34 = $39; $40 = $34; $31 = $40; $41 = $31; $42 = HEAP32[$41>>2]|0; $28 = $41; $29 = $42; $43 = $29; $25 = $27; $26 = $43; $44 = $25; $45 = $26; HEAP32[$44>>2] = $45; $46 = HEAP32[$27>>2]|0; HEAP32[$30>>2] = $46; $47 = HEAP32[$30>>2]|0; HEAP32[$35>>2] = $47; $48 = $34; $24 = $48; $49 = $24; $50 = ((($49)) + 4|0); $51 = HEAP32[$50>>2]|0; $21 = $49; $22 = $51; $52 = $22; $18 = $20; $19 = $52; $53 = $18; $54 = $19; HEAP32[$53>>2] = $54; $55 = HEAP32[$20>>2]|0; HEAP32[$23>>2] = $55; $56 = HEAP32[$23>>2]|0; HEAP32[$36>>2] = $56; while(1) { $16 = $35; $17 = $36; $57 = $16; $58 = $17; $14 = $57; $15 = $58; $59 = $14; $13 = $59; $60 = $13; $61 = HEAP32[$60>>2]|0; $62 = $15; $12 = $62; $63 = $12; $64 = HEAP32[$63>>2]|0; $65 = ($61|0)==($64|0); $66 = $65 ^ 1; if (!($66)) { break; } $10 = $35; $67 = $10; $68 = HEAP32[$67>>2]|0; $8 = $37; $9 = $68; $69 = $8; $70 = $9; $71 = HEAP32[$70>>2]|0; HEAP32[$69>>2] = $71; $72 = ((($69)) + 4|0); $73 = $9; $74 = ((($73)) + 4|0); $75 = HEAP32[$74>>2]|0; HEAP32[$72>>2] = $75; $76 = ((($69)) + 4|0); $77 = HEAP32[$76>>2]|0; $78 = ($77|0)!=(0|0); if ($78) { $79 = ((($69)) + 4|0); $80 = HEAP32[$79>>2]|0; $7 = $80; $81 = $7; $6 = $81; $82 = $6; $83 = ((($82)) + 4|0); $3 = $83; $84 = $3; $4 = 1; $85 = $4; $86 = HEAP32[$84>>2]|0; $87 = (($86) + ($85))|0; HEAP32[$84>>2] = $87; $88 = (($86) + ($85))|0; $5 = $88; } $2 = $37; $89 = $2; $90 = HEAP32[$89>>2]|0; $91 = HEAP32[$90>>2]|0; $92 = ((($91)) + 12|0); $93 = HEAP32[$92>>2]|0; $94 = $33; $95 = (FUNCTION_TABLE_iii[$93 & 255]($90,$94)|0); $33 = $95; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($37); $11 = $35; $96 = $11; $97 = HEAP32[$96>>2]|0; $98 = ((($97)) + 8|0); HEAP32[$96>>2] = $98; } $99 = ((($38)) + 20|0); $100 = HEAP8[$99>>0]|0; $101 = $100&1; if (!($101)) { $105 = $33; STACKTOP = sp;return ($105|0); } $102 = ((($38)) + 20|0); HEAP8[$102>>0] = 0; $103 = ((($38)) + 4|0); $104 = HEAP32[$103>>2]|0; __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($104); $105 = $33; STACKTOP = sp;return ($105|0); } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2504); $3 = ((($2)) + 8|0); __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEED2Ev($3); __ZN6laszip7formats20dynamic_decompressorD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticI10buf_streamE13readInitBytesEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP32[$2>>2]|0; $4 = (__ZN10buf_stream7getByteEv($3)|0); $5 = $4&255; $6 = $5 << 24; $7 = HEAP32[$2>>2]|0; $8 = (__ZN10buf_stream7getByteEv($7)|0); $9 = $8&255; $10 = $9 << 16; $11 = $6 | $10; $12 = HEAP32[$2>>2]|0; $13 = (__ZN10buf_stream7getByteEv($12)|0); $14 = $13&255; $15 = $14 << 8; $16 = $11 | $15; $17 = HEAP32[$2>>2]|0; $18 = (__ZN10buf_stream7getByteEv($17)|0); $19 = $18&255; $20 = $16 | $19; $21 = ((($2)) + 4|0); HEAP32[$21>>2] = $20; STACKTOP = sp;return; } function __ZN10buf_stream7getByteEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP32[$2>>2]|0; $4 = ((($2)) + 8|0); $5 = HEAP32[$4>>2]|0; $6 = (($5) + 1)|0; HEAP32[$4>>2] = $6; $7 = (($3) + ($5)|0); $8 = HEAP8[$7>>0]|0; STACKTOP = sp;return ($8|0); } function __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEE18__enable_weak_thisEz($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 8|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 728; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIiEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(180)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIjEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(180)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEEC2ERS5_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2552); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2576); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0); $4 = ((($2)) + 160|0); HEAP8[$4>>0] = 0; $5 = ((($2)) + 161|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 164|0); __ZN6laszip7formats20standard_diff_methodIiEC2Ev($6); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2552); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats20standard_diff_methodIiEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4|0); HEAP8[$3>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerD2Ev($3); __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIiNS0_20standard_diff_methodIiEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $6 = sp; $3 = $0; $4 = $1; $5 = $2; $7 = $3; $8 = ((($7)) + 161|0); $9 = HEAP8[$8>>0]|0; $10 = $9&1; if (!($10)) { $11 = ((($7)) + 80|0); __ZN6laszip13decompressors7integer4initEv($11); } $12 = ((($7)) + 164|0); $13 = (__ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($12)|0); if ($13) { $14 = ((($7)) + 80|0); $15 = $4; $16 = ((($7)) + 164|0); $17 = HEAP32[$16>>2]|0; $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0); HEAP32[$6>>2] = $18; $19 = HEAP32[$6>>2]|0; $20 = $5; __ZN6laszip7formats7packersIiE4packEiPc($19,$20); $26 = $5; $27 = ((($26)) + 4|0); $5 = $27; $28 = ((($7)) + 164|0); __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6); $29 = $5; STACKTOP = sp;return ($29|0); } else { $21 = $4; $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0); $23 = $5; __ZN10buf_stream8getBytesEPhi($22,$23,4); $24 = $5; $25 = (__ZN6laszip7formats7packersIiE6unpackEPKc($24)|0); HEAP32[$6>>2] = $25; $26 = $5; $27 = ((($26)) + 4|0); $5 = $27; $28 = ((($7)) + 164|0); __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($28,$6); $29 = $5; STACKTOP = sp;return ($29|0); } return (0)|0; } function __ZNK6laszip7formats20standard_diff_methodIiE10have_valueEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4|0); $4 = HEAP8[$3>>0]|0; $5 = $4&1; STACKTOP = sp;return ($5|0); } function __ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $6 = $0; $7 = $1; $8 = $2; $9 = $3; $11 = $6; $12 = $8; $13 = $7; $14 = ((($11)) + 36|0); $15 = $9; $4 = $14; $5 = $15; $16 = $4; $17 = HEAP32[$16>>2]|0; $18 = $5; $19 = (($17) + (($18*44)|0)|0); $20 = (__ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($11,$13,$19)|0); $21 = (($12) + ($20))|0; $10 = $21; $22 = $10; $23 = ($22|0)<(0); if ($23) { $24 = ((($11)) + 24|0); $25 = HEAP32[$24>>2]|0; $26 = $10; $27 = (($26) + ($25))|0; $10 = $27; $36 = $10; STACKTOP = sp;return ($36|0); } $28 = $10; $29 = ((($11)) + 24|0); $30 = HEAP32[$29>>2]|0; $31 = ($28>>>0)>=($30>>>0); if (!($31)) { $36 = $10; STACKTOP = sp;return ($36|0); } $32 = ((($11)) + 24|0); $33 = HEAP32[$32>>2]|0; $34 = $10; $35 = (($34) - ($33))|0; $10 = $35; $36 = $10; STACKTOP = sp;return ($36|0); } function __ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP32[$2>>2]|0; STACKTOP = sp;return ($3|0); } function __ZN10buf_stream8getBytesEPhi($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $7 = $3; $6 = 0; while(1) { $8 = $6; $9 = $5; $10 = ($8|0)<($9|0); if (!($10)) { break; } $11 = (__ZN10buf_stream7getByteEv($7)|0); $12 = $4; $13 = $6; $14 = (($12) + ($13)|0); HEAP8[$14>>0] = $11; $15 = $6; $16 = (($15) + 1)|0; $6 = $16; } STACKTOP = sp;return; } function __ZN6laszip7formats20standard_diff_methodIiE4pushERKi($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 4|0); $6 = HEAP8[$5>>0]|0; $7 = $6&1; if (!($7)) { $8 = ((($4)) + 4|0); HEAP8[$8>>0] = 1; } $9 = $3; $10 = HEAP32[$9>>2]|0; HEAP32[$4>>2] = $10; STACKTOP = sp;return; } function __ZN6laszip13decompressors7integer13readCorrectorINS_8decoders10arithmeticI10buf_streamEENS_6models10arithmeticEEEiRT_RT0_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $7 = $0; $8 = $1; $9 = $2; $13 = $7; $14 = $8; $15 = $9; $16 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($14,$15)|0); HEAP32[$13>>2] = $16; $17 = HEAP32[$13>>2]|0; $18 = ($17|0)!=(0); if (!($18)) { $69 = $8; $70 = ((($13)) + 48|0); $71 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($69,$70)|0); $10 = $71; $72 = $10; STACKTOP = sp;return ($72|0); } $19 = HEAP32[$13>>2]|0; $20 = ($19>>>0)<(32); if (!($20)) { $67 = ((($13)) + 28|0); $68 = HEAP32[$67>>2]|0; $10 = $68; $72 = $10; STACKTOP = sp;return ($72|0); } $21 = HEAP32[$13>>2]|0; $22 = ((($13)) + 12|0); $23 = HEAP32[$22>>2]|0; $24 = ($21>>>0)<=($23>>>0); if ($24) { $25 = $8; $26 = ((($13)) + 68|0); $27 = HEAP32[$13>>2]|0; $28 = (($27) - 1)|0; $5 = $26; $6 = $28; $29 = $5; $30 = HEAP32[$29>>2]|0; $31 = $6; $32 = (($30) + (($31*44)|0)|0); $33 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($25,$32)|0); $10 = $33; } else { $34 = HEAP32[$13>>2]|0; $35 = ((($13)) + 12|0); $36 = HEAP32[$35>>2]|0; $37 = (($34) - ($36))|0; $11 = $37; $38 = $8; $39 = ((($13)) + 68|0); $40 = HEAP32[$13>>2]|0; $41 = (($40) - 1)|0; $3 = $39; $4 = $41; $42 = $3; $43 = HEAP32[$42>>2]|0; $44 = $4; $45 = (($43) + (($44*44)|0)|0); $46 = (__ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($38,$45)|0); $10 = $46; $47 = $8; $48 = $11; $49 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($47,$48)|0); $12 = $49; $50 = $10; $51 = $11; $52 = $50 << $51; $53 = $12; $54 = $52 | $53; $10 = $54; } $55 = $10; $56 = HEAP32[$13>>2]|0; $57 = (($56) - 1)|0; $58 = 1 << $57; $59 = ($55|0)>=($58|0); if ($59) { $60 = $10; $61 = (($60) + 1)|0; $10 = $61; $72 = $10; STACKTOP = sp;return ($72|0); } else { $62 = HEAP32[$13>>2]|0; $63 = 1 << $62; $64 = (($63) - 1)|0; $65 = $10; $66 = (($65) - ($64))|0; $10 = $66; $72 = $10; STACKTOP = sp;return ($72|0); } return (0)|0; } function __ZN6laszip8decoders10arithmeticI10buf_streamE12decodeSymbolINS_6models10arithmeticEEEjRT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $138 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0; var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $2 = $0; $3 = $1; $13 = $2; $14 = ((($13)) + 8|0); $15 = HEAP32[$14>>2]|0; $7 = $15; $16 = $3; $17 = ((($16)) + 16|0); $18 = HEAP32[$17>>2]|0; $19 = ($18|0)!=(0|0); if ($19) { $20 = ((($13)) + 4|0); $21 = HEAP32[$20>>2]|0; $22 = ((($13)) + 8|0); $23 = HEAP32[$22>>2]|0; $24 = $23 >>> 15; HEAP32[$22>>2] = $24; $25 = (($21>>>0) / ($24>>>0))&-1; $8 = $25; $26 = $8; $27 = $3; $28 = ((($27)) + 40|0); $29 = HEAP32[$28>>2]|0; $30 = $26 >>> $29; $9 = $30; $31 = $3; $32 = ((($31)) + 16|0); $33 = HEAP32[$32>>2]|0; $34 = $9; $35 = (($33) + ($34<<2)|0); $36 = HEAP32[$35>>2]|0; $5 = $36; $37 = $3; $38 = ((($37)) + 16|0); $39 = HEAP32[$38>>2]|0; $40 = $9; $41 = (($40) + 1)|0; $42 = (($39) + ($41<<2)|0); $43 = HEAP32[$42>>2]|0; $44 = (($43) + 1)|0; $4 = $44; while(1) { $45 = $4; $46 = $5; $47 = (($46) + 1)|0; $48 = ($45>>>0)>($47>>>0); if (!($48)) { break; } $49 = $5; $50 = $4; $51 = (($49) + ($50))|0; $52 = $51 >>> 1; $10 = $52; $53 = $3; $54 = ((($53)) + 8|0); $55 = HEAP32[$54>>2]|0; $56 = $10; $57 = (($55) + ($56<<2)|0); $58 = HEAP32[$57>>2]|0; $59 = $8; $60 = ($58>>>0)>($59>>>0); $61 = $10; if ($60) { $4 = $61; } else { $5 = $61; } } $62 = $3; $63 = ((($62)) + 8|0); $64 = HEAP32[$63>>2]|0; $65 = $5; $66 = (($64) + ($65<<2)|0); $67 = HEAP32[$66>>2]|0; $68 = ((($13)) + 8|0); $69 = HEAP32[$68>>2]|0; $70 = Math_imul($67, $69)|0; $6 = $70; $71 = $5; $72 = $3; $73 = ((($72)) + 32|0); $74 = HEAP32[$73>>2]|0; $75 = ($71|0)!=($74|0); if ($75) { $76 = $3; $77 = ((($76)) + 8|0); $78 = HEAP32[$77>>2]|0; $79 = $5; $80 = (($79) + 1)|0; $81 = (($78) + ($80<<2)|0); $82 = HEAP32[$81>>2]|0; $83 = ((($13)) + 8|0); $84 = HEAP32[$83>>2]|0; $85 = Math_imul($82, $84)|0; $7 = $85; } } else { $5 = 0; $6 = 0; $86 = ((($13)) + 8|0); $87 = HEAP32[$86>>2]|0; $88 = $87 >>> 15; HEAP32[$86>>2] = $88; $89 = $3; $90 = HEAP32[$89>>2]|0; $4 = $90; $91 = $90 >>> 1; $11 = $91; while(1) { $92 = ((($13)) + 8|0); $93 = HEAP32[$92>>2]|0; $94 = $3; $95 = ((($94)) + 8|0); $96 = HEAP32[$95>>2]|0; $97 = $11; $98 = (($96) + ($97<<2)|0); $99 = HEAP32[$98>>2]|0; $100 = Math_imul($93, $99)|0; $12 = $100; $101 = $12; $102 = ((($13)) + 4|0); $103 = HEAP32[$102>>2]|0; $104 = ($101>>>0)>($103>>>0); $105 = $11; if ($104) { $4 = $105; $106 = $12; $7 = $106; } else { $5 = $105; $107 = $12; $6 = $107; } $108 = $5; $109 = $4; $110 = (($108) + ($109))|0; $111 = $110 >>> 1; $11 = $111; $112 = $5; $113 = ($111|0)!=($112|0); if (!($113)) { break; } } } $114 = $6; $115 = ((($13)) + 4|0); $116 = HEAP32[$115>>2]|0; $117 = (($116) - ($114))|0; HEAP32[$115>>2] = $117; $118 = $7; $119 = $6; $120 = (($118) - ($119))|0; $121 = ((($13)) + 8|0); HEAP32[$121>>2] = $120; $122 = ((($13)) + 8|0); $123 = HEAP32[$122>>2]|0; $124 = ($123>>>0)<(16777216); if ($124) { __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($13); } $125 = $3; $126 = ((($125)) + 12|0); $127 = HEAP32[$126>>2]|0; $128 = $5; $129 = (($127) + ($128<<2)|0); $130 = HEAP32[$129>>2]|0; $131 = (($130) + 1)|0; HEAP32[$129>>2] = $131; $132 = $3; $133 = ((($132)) + 28|0); $134 = HEAP32[$133>>2]|0; $135 = (($134) + -1)|0; HEAP32[$133>>2] = $135; $136 = ($135|0)==(0); if (!($136)) { $138 = $5; STACKTOP = sp;return ($138|0); } $137 = $3; __ZN6laszip6models10arithmetic6updateEv($137); $138 = $5; STACKTOP = sp;return ($138|0); } function __ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $3 = $0; $4 = $1; $8 = $3; $9 = $4; $10 = ($9|0)!=(0); $11 = $4; $12 = ($11>>>0)<=(32); $or$cond = $10 & $12; if (!($or$cond)) { ___assert_fail((5409|0),(5430|0),139,(5499|0)); // unreachable; } $13 = $4; $14 = ($13>>>0)>(19); if ($14) { $15 = (__ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($8)|0); $16 = $15&65535; $5 = $16; $17 = $4; $18 = (($17) - 16)|0; $4 = $18; $19 = $4; $20 = (__ZN6laszip8decoders10arithmeticI10buf_streamE8readBitsEj($8,$19)|0); $21 = $20 << 16; $6 = $21; $22 = $6; $23 = $5; $24 = $22 | $23; $2 = $24; $43 = $2; STACKTOP = sp;return ($43|0); } $25 = ((($8)) + 4|0); $26 = HEAP32[$25>>2]|0; $27 = $4; $28 = ((($8)) + 8|0); $29 = HEAP32[$28>>2]|0; $30 = $29 >>> $27; HEAP32[$28>>2] = $30; $31 = (($26>>>0) / ($30>>>0))&-1; $7 = $31; $32 = ((($8)) + 8|0); $33 = HEAP32[$32>>2]|0; $34 = $7; $35 = Math_imul($33, $34)|0; $36 = ((($8)) + 4|0); $37 = HEAP32[$36>>2]|0; $38 = (($37) - ($35))|0; HEAP32[$36>>2] = $38; $39 = ((($8)) + 8|0); $40 = HEAP32[$39>>2]|0; $41 = ($40>>>0)<(16777216); if ($41) { __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($8); } $42 = $7; $2 = $42; $43 = $2; STACKTOP = sp;return ($43|0); } function __ZN6laszip8decoders10arithmeticI10buf_streamE9decodeBitINS_6models14arithmetic_bitEEEjRT_($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $6 = $2; $7 = $3; $8 = ((($7)) + 8|0); $9 = HEAP32[$8>>2]|0; $10 = ((($6)) + 8|0); $11 = HEAP32[$10>>2]|0; $12 = $11 >>> 13; $13 = Math_imul($9, $12)|0; $4 = $13; $14 = ((($6)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $4; $17 = ($15>>>0)>=($16>>>0); $18 = $17&1; $5 = $18; $19 = $5; $20 = ($19|0)==(0); $21 = $4; if ($20) { $22 = ((($6)) + 8|0); HEAP32[$22>>2] = $21; $23 = $3; $24 = ((($23)) + 12|0); $25 = HEAP32[$24>>2]|0; $26 = (($25) + 1)|0; HEAP32[$24>>2] = $26; } else { $27 = ((($6)) + 4|0); $28 = HEAP32[$27>>2]|0; $29 = (($28) - ($21))|0; HEAP32[$27>>2] = $29; $30 = $4; $31 = ((($6)) + 8|0); $32 = HEAP32[$31>>2]|0; $33 = (($32) - ($30))|0; HEAP32[$31>>2] = $33; } $34 = ((($6)) + 8|0); $35 = HEAP32[$34>>2]|0; $36 = ($35>>>0)<(16777216); if ($36) { __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($6); } $37 = $3; $38 = ((($37)) + 4|0); $39 = HEAP32[$38>>2]|0; $40 = (($39) + -1)|0; HEAP32[$38>>2] = $40; $41 = ($40|0)==(0); if (!($41)) { $43 = $5; STACKTOP = sp;return ($43|0); } $42 = $3; __ZN6laszip6models14arithmetic_bit6updateEv($42); $43 = $5; STACKTOP = sp;return ($43|0); } function __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; while(1) { $3 = ((($2)) + 4|0); $4 = HEAP32[$3>>2]|0; $5 = $4 << 8; $6 = HEAP32[$2>>2]|0; $7 = (__ZN10buf_stream7getByteEv($6)|0); $8 = $7&255; $9 = $5 | $8; $10 = ((($2)) + 4|0); HEAP32[$10>>2] = $9; $11 = ((($2)) + 8|0); $12 = HEAP32[$11>>2]|0; $13 = $12 << 8; HEAP32[$11>>2] = $13; $14 = ($13>>>0)<(16777216); if (!($14)) { break; } } STACKTOP = sp;return; } function __ZN6laszip8decoders10arithmeticI10buf_streamE9readShortEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $3 = $1; $4 = ((($3)) + 4|0); $5 = HEAP32[$4>>2]|0; $6 = ((($3)) + 8|0); $7 = HEAP32[$6>>2]|0; $8 = $7 >>> 16; HEAP32[$6>>2] = $8; $9 = (($5>>>0) / ($8>>>0))&-1; $2 = $9; $10 = ((($3)) + 8|0); $11 = HEAP32[$10>>2]|0; $12 = $2; $13 = Math_imul($11, $12)|0; $14 = ((($3)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = (($15) - ($13))|0; HEAP32[$14>>2] = $16; $17 = ((($3)) + 8|0); $18 = HEAP32[$17>>2]|0; $19 = ($18>>>0)<(16777216); if ($19) { __ZN6laszip8decoders10arithmeticI10buf_streamE19renorm_dec_intervalEv($3); } $20 = $2; $21 = ($20>>>0)<(65536); if ($21) { $22 = $2; $23 = $22&65535; STACKTOP = sp;return ($23|0); } else { ___assert_fail((5508|0),(5430|0),172,(5522|0)); // unreachable; } return (0)|0; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 768; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEEC2ERS5_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2604); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2628); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,32,1,8,0); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerC2Ejjjj($3,32,1,8,0); $4 = ((($2)) + 160|0); HEAP8[$4>>0] = 0; $5 = ((($2)) + 161|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 164|0); __ZN6laszip7formats20standard_diff_methodIjEC2Ev($6); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2604); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats20standard_diff_methodIjEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4|0); HEAP8[$3>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerD2Ev($3); __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIjNS0_20standard_diff_methodIjEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $6 = sp; $3 = $0; $4 = $1; $5 = $2; $7 = $3; $8 = ((($7)) + 161|0); $9 = HEAP8[$8>>0]|0; $10 = $9&1; if (!($10)) { $11 = ((($7)) + 80|0); __ZN6laszip13decompressors7integer4initEv($11); } $12 = ((($7)) + 164|0); $13 = (__ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($12)|0); if ($13) { $14 = ((($7)) + 80|0); $15 = $4; $16 = ((($7)) + 164|0); $17 = HEAP32[$16>>2]|0; $18 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$17,0)|0); HEAP32[$6>>2] = $18; $19 = HEAP32[$6>>2]|0; $20 = $5; __ZN6laszip7formats7packersIjE4packEjPc($19,$20); $26 = $5; $27 = ((($26)) + 4|0); $5 = $27; $28 = ((($7)) + 164|0); __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6); $29 = $5; STACKTOP = sp;return ($29|0); } else { $21 = $4; $22 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($21)|0); $23 = $5; __ZN10buf_stream8getBytesEPhi($22,$23,4); $24 = $5; $25 = (__ZN6laszip7formats7packersIjE6unpackEPKc($24)|0); HEAP32[$6>>2] = $25; $26 = $5; $27 = ((($26)) + 4|0); $5 = $27; $28 = ((($7)) + 164|0); __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($28,$6); $29 = $5; STACKTOP = sp;return ($29|0); } return (0)|0; } function __ZNK6laszip7formats20standard_diff_methodIjE10have_valueEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 4|0); $4 = HEAP8[$3>>0]|0; $5 = $4&1; STACKTOP = sp;return ($5|0); } function __ZN6laszip7formats20standard_diff_methodIjE4pushERKj($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 4|0); $6 = HEAP8[$5>>0]|0; $7 = $6&1; if (!($7)) { $8 = ((($4)) + 4|0); HEAP8[$8>>0] = 1; } $9 = $3; $10 = HEAP32[$9>>2]|0; HEAP32[$4>>2] = $10; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 808; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIaEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(172)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIsEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(176)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEEC2ERS5_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2656); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2680); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0); $4 = ((($2)) + 160|0); HEAP8[$4>>0] = 0; $5 = ((($2)) + 161|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 162|0); __ZN6laszip7formats20standard_diff_methodIaEC2Ev($6); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2656); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats20standard_diff_methodIaEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 1|0); HEAP8[$3>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerD2Ev($3); __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIaNS0_20standard_diff_methodIaEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $6 = sp + 12|0; $3 = $0; $4 = $1; $5 = $2; $7 = $3; $8 = ((($7)) + 161|0); $9 = HEAP8[$8>>0]|0; $10 = $9&1; if (!($10)) { $11 = ((($7)) + 80|0); __ZN6laszip13decompressors7integer4initEv($11); } $12 = ((($7)) + 162|0); $13 = (__ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($12)|0); if ($13) { $14 = ((($7)) + 80|0); $15 = $4; $16 = ((($7)) + 162|0); $17 = HEAP8[$16>>0]|0; $18 = $17 << 24 >> 24; $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); $20 = $19&255; HEAP8[$6>>0] = $20; $21 = HEAP8[$6>>0]|0; $22 = $5; __ZN6laszip7formats7packersIaE4packEaPc($21,$22); $28 = $5; $29 = ((($28)) + 1|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } else { $23 = $4; $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); $25 = $5; __ZN10buf_stream8getBytesEPhi($24,$25,1); $26 = $5; $27 = (__ZN6laszip7formats7packersIaE6unpackEPKc($26)|0); HEAP8[$6>>0] = $27; $28 = $5; $29 = ((($28)) + 1|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } return (0)|0; } function __ZNK6laszip7formats20standard_diff_methodIaE10have_valueEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 1|0); $4 = HEAP8[$3>>0]|0; $5 = $4&1; STACKTOP = sp;return ($5|0); } function __ZN6laszip7formats7packersIaE4packEaPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; HEAP8[$5>>0] = $4; STACKTOP = sp;return; } function __ZN6laszip7formats7packersIaE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP8[$2>>0]|0; STACKTOP = sp;return ($3|0); } function __ZN6laszip7formats20standard_diff_methodIaE4pushERKa($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 1|0); $6 = HEAP8[$5>>0]|0; $7 = $6&1; if (!($7)) { $8 = ((($4)) + 1|0); HEAP8[$8>>0] = 1; } $9 = $3; $10 = HEAP8[$9>>0]|0; HEAP8[$4>>0] = $10; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 848; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEEC2ERS5_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2708); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2732); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0); $4 = ((($2)) + 160|0); HEAP8[$4>>0] = 0; $5 = ((($2)) + 161|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 162|0); __ZN6laszip7formats20standard_diff_methodIsEC2Ev($6); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2708); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats20standard_diff_methodIsEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 2|0); HEAP8[$3>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerD2Ev($3); __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIsNS0_20standard_diff_methodIsEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $6 = sp + 12|0; $3 = $0; $4 = $1; $5 = $2; $7 = $3; $8 = ((($7)) + 161|0); $9 = HEAP8[$8>>0]|0; $10 = $9&1; if (!($10)) { $11 = ((($7)) + 80|0); __ZN6laszip13decompressors7integer4initEv($11); } $12 = ((($7)) + 162|0); $13 = (__ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($12)|0); if ($13) { $14 = ((($7)) + 80|0); $15 = $4; $16 = ((($7)) + 162|0); $17 = HEAP16[$16>>1]|0; $18 = $17 << 16 >> 16; $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); $20 = $19&65535; HEAP16[$6>>1] = $20; $21 = HEAP16[$6>>1]|0; $22 = $5; __ZN6laszip7formats7packersIsE4packEsPc($21,$22); $28 = $5; $29 = ((($28)) + 2|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } else { $23 = $4; $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); $25 = $5; __ZN10buf_stream8getBytesEPhi($24,$25,2); $26 = $5; $27 = (__ZN6laszip7formats7packersIsE6unpackEPKc($26)|0); HEAP16[$6>>1] = $27; $28 = $5; $29 = ((($28)) + 2|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } return (0)|0; } function __ZNK6laszip7formats20standard_diff_methodIsE10have_valueEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 2|0); $4 = HEAP8[$3>>0]|0; $5 = $4&1; STACKTOP = sp;return ($5|0); } function __ZN6laszip7formats7packersIsE4packEsPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = $3; __ZN6laszip7formats7packersItE4packEtPc($4,$5); STACKTOP = sp;return; } function __ZN6laszip7formats7packersIsE6unpackEPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = (__ZN6laszip7formats7packersItE6unpackEPKc($2)|0); STACKTOP = sp;return ($3|0); } function __ZN6laszip7formats20standard_diff_methodIsE4pushERKs($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 2|0); $6 = HEAP8[$5>>0]|0; $7 = $6&1; if (!($7)) { $8 = ((($4)) + 2|0); HEAP8[$8>>0] = 1; } $9 = $3; $10 = HEAP16[$9>>1]|0; HEAP16[$4>>1] = $10; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 888; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldIhEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(172)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE9add_fieldItEEvv($0) { $0 = $0|0; var $$byval_copy = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0; var $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0; var $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0; var $81 = 0, $82 = 0, $83 = 0, $84 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 144|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(144|0); $$byval_copy = sp + 136|0; $16 = sp; $21 = sp + 141|0; $32 = sp + 140|0; $34 = sp + 8|0; $35 = sp + 4|0; $33 = $0; $36 = $33; $37 = ((($36)) + 8|0); $38 = (__Znwj(176)|0); $39 = ((($36)) + 4|0); $40 = HEAP32[$39>>2]|0; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($38,$40); ;HEAP32[$35>>2]=0|0; ;HEAP32[$$byval_copy>>2]=HEAP32[$35>>2]|0; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($34,$38,$$byval_copy); $30 = $37; $31 = $34; $41 = $30; $42 = ((($41)) + 4|0); $43 = HEAP32[$42>>2]|0; $29 = $41; $44 = $29; $45 = ((($44)) + 8|0); $28 = $45; $46 = $28; $27 = $46; $47 = $27; $48 = HEAP32[$47>>2]|0; $49 = ($43>>>0)<($48>>>0); if ($49) { $24 = $32; $25 = $41; $26 = 1; $3 = $41; $50 = $3; $51 = ((($50)) + 8|0); $2 = $51; $52 = $2; $1 = $52; $53 = $1; $54 = ((($41)) + 4|0); $55 = HEAP32[$54>>2]|0; $4 = $55; $56 = $4; $57 = $31; $5 = $57; $58 = $5; $18 = $53; $19 = $56; $20 = $58; $59 = $18; $60 = $19; $61 = $20; $17 = $61; $62 = $17; ;HEAP8[$16>>0]=HEAP8[$21>>0]|0; $13 = $59; $14 = $60; $15 = $62; $63 = $13; $64 = $14; $65 = $15; $12 = $65; $66 = $12; $9 = $63; $10 = $64; $11 = $66; $67 = $10; $68 = $11; $8 = $68; $69 = $8; $6 = $67; $7 = $69; $70 = $6; $71 = $7; $72 = HEAP32[$71>>2]|0; HEAP32[$70>>2] = $72; $73 = ((($70)) + 4|0); $74 = $7; $75 = ((($74)) + 4|0); $76 = HEAP32[$75>>2]|0; HEAP32[$73>>2] = $76; $77 = $7; HEAP32[$77>>2] = 0; $78 = $7; $79 = ((($78)) + 4|0); HEAP32[$79>>2] = 0; $22 = $32; $80 = ((($41)) + 4|0); $81 = HEAP32[$80>>2]|0; $82 = ((($81)) + 8|0); HEAP32[$80>>2] = $82; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } else { $83 = $31; $23 = $83; $84 = $23; __ZNSt3__26vectorINS_10shared_ptrIN6laszip7formats10base_fieldEEENS_9allocatorIS5_EEE21__push_back_slow_pathIS5_EEvOT_($41,$84); __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEED2Ev($34); STACKTOP = sp;return; } } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEEC2ERS5_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2760); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2784); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,8,1,8,0); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerC2Ejjjj($3,8,1,8,0); $4 = ((($2)) + 160|0); HEAP8[$4>>0] = 0; $5 = ((($2)) + 161|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 162|0); __ZN6laszip7formats20standard_diff_methodIhEC2Ev($6); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2760); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats20standard_diff_methodIhEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 1|0); HEAP8[$3>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerD2Ev($3); __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldIhNS0_20standard_diff_methodIhEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $6 = sp + 12|0; $3 = $0; $4 = $1; $5 = $2; $7 = $3; $8 = ((($7)) + 161|0); $9 = HEAP8[$8>>0]|0; $10 = $9&1; if (!($10)) { $11 = ((($7)) + 80|0); __ZN6laszip13decompressors7integer4initEv($11); } $12 = ((($7)) + 162|0); $13 = (__ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($12)|0); if ($13) { $14 = ((($7)) + 80|0); $15 = $4; $16 = ((($7)) + 162|0); $17 = HEAP8[$16>>0]|0; $18 = $17&255; $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); $20 = $19&255; HEAP8[$6>>0] = $20; $21 = HEAP8[$6>>0]|0; $22 = $5; __ZN6laszip7formats7packersIhE4packEhPc($21,$22); $28 = $5; $29 = ((($28)) + 1|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } else { $23 = $4; $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); $25 = $5; __ZN10buf_stream8getBytesEPhi($24,$25,1); $26 = $5; $27 = (__ZN6laszip7formats7packersIhE6unpackEPKc($26)|0); HEAP8[$6>>0] = $27; $28 = $5; $29 = ((($28)) + 1|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } return (0)|0; } function __ZNK6laszip7formats20standard_diff_methodIhE10have_valueEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 1|0); $4 = HEAP8[$3>>0]|0; $5 = $4&1; STACKTOP = sp;return ($5|0); } function __ZN6laszip7formats20standard_diff_methodIhE4pushERKh($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 1|0); $6 = HEAP8[$5>>0]|0; $7 = $6&1; if (!($7)) { $8 = ((($4)) + 1|0); HEAP8[$8>>0] = 1; } $9 = $3; $10 = HEAP8[$9>>0]|0; HEAP8[$4>>0] = $10; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 928; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEEC2ERS5_($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; __ZN6laszip7formats10base_fieldC2Ev($4); HEAP32[$4>>2] = (2812); $5 = ((($4)) + 4|0); $6 = $3; HEAP32[$5>>2] = $6; $7 = ((($4)) + 8|0); __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($7); STACKTOP = sp;return; } function __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEEC2INS2_26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEEEEPT_NS_9enable_ifIXsr14is_convertibleISH_PS3_EE5valueENS4_5__natEE4typeE($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0; var $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0; var $136 = 0, $137 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0; var $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0; var $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0; var $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0; var $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 272|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(272|0); $vararg_buffer = sp + 16|0; $38 = sp + 124|0; $39 = sp + 120|0; $40 = sp + 8|0; $41 = sp; $62 = sp + 36|0; $65 = sp + 24|0; $66 = sp + 269|0; $67 = sp + 268|0; $63 = $0; $64 = $1; $68 = $63; $69 = $64; HEAP32[$68>>2] = $69; $70 = $64; $61 = $65; HEAP32[$62>>2] = $70; $71 = $61; $59 = $71; $60 = $62; $72 = $59; $73 = $60; $58 = $73; $74 = $58; $56 = $72; $57 = $74; $75 = $56; $76 = $57; $55 = $76; $77 = $55; $78 = HEAP32[$77>>2]|0; HEAP32[$75>>2] = $78; $79 = (__Znwj(16)|0); $80 = $64; $54 = $67; ;HEAP8[$40>>0]=HEAP8[$67>>0]|0; ;HEAP8[$41>>0]=HEAP8[$66>>0]|0; $37 = $79; HEAP32[$38>>2] = $80; $81 = $37; $35 = $81; $36 = 0; $82 = $35; $83 = $36; $33 = $82; $34 = $83; $84 = $33; HEAP32[$84>>2] = (3468); $85 = ((($84)) + 4|0); $86 = $34; HEAP32[$85>>2] = $86; HEAP32[$82>>2] = (3488); $87 = ((($82)) + 8|0); $88 = $36; HEAP32[$87>>2] = $88; HEAP32[$81>>2] = (2836); $89 = ((($81)) + 12|0); $9 = $41; $90 = $9; $18 = $39; $19 = $38; $20 = $90; $91 = $18; $92 = $19; $17 = $92; $93 = $17; $11 = $91; $12 = $93; $94 = $11; $95 = $12; $10 = $95; $96 = $10; $97 = HEAP32[$96>>2]|0; HEAP32[$94>>2] = $97; $98 = $20; $13 = $98; $99 = $13; $15 = $91; $16 = $99; $100 = $16; $14 = $100; $21 = $40; $101 = $21; $30 = $89; $31 = $39; $32 = $101; $102 = $30; $103 = $31; $29 = $103; $104 = $29; $23 = $102; $24 = $104; $105 = $23; $106 = $24; $22 = $106; $107 = $22; ;HEAP32[$105>>2]=HEAP32[$107>>2]|0; $108 = $32; $25 = $108; $109 = $25; $27 = $102; $28 = $109; $110 = $28; $26 = $110; $111 = ((($68)) + 4|0); HEAP32[$111>>2] = $79; $7 = $65; $112 = $7; $6 = $112; $113 = $6; $5 = $113; $114 = $5; $115 = HEAP32[$114>>2]|0; $8 = $115; $4 = $112; $116 = $4; $3 = $116; $117 = $3; HEAP32[$117>>2] = 0; $118 = $64; $119 = $64; HEAP32[$vararg_buffer>>2] = $118; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $119; __ZNSt3__210shared_ptrIN6laszip7formats10base_fieldEE18__enable_weak_thisEz($68,$vararg_buffer); $53 = $65; $120 = $53; $50 = $120; $51 = 0; $121 = $50; $49 = $121; $122 = $49; $48 = $122; $123 = $48; $124 = HEAP32[$123>>2]|0; $52 = $124; $125 = $51; $45 = $121; $126 = $45; $44 = $126; $127 = $44; HEAP32[$127>>2] = $125; $128 = $52; $129 = ($128|0)!=(0|0); if (!($129)) { STACKTOP = sp;return; } $43 = $121; $130 = $43; $42 = $130; $131 = $42; $132 = $52; $46 = $131; $47 = $132; $133 = $47; $134 = ($133|0)==(0|0); if ($134) { STACKTOP = sp;return; } $135 = HEAP32[$133>>2]|0; $136 = ((($135)) + 4|0); $137 = HEAP32[$136>>2]|0; FUNCTION_TABLE_vi[$137 & 511]($133); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip11compressors7integerC2Ejjjj($2,16,1,8,0); $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerC2Ejjjj($3,16,1,8,0); $4 = ((($2)) + 160|0); HEAP8[$4>>0] = 0; $5 = ((($2)) + 161|0); HEAP8[$5>>0] = 0; $6 = ((($2)) + 162|0); __ZN6laszip7formats20standard_diff_methodItEC2Ev($6); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; HEAP32[$2>>2] = (2812); $3 = ((($2)) + 8|0); __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($3); __ZN6laszip7formats10base_fieldD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEE13decompressRawEPc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 8|0); $6 = ((($4)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $3; $9 = (__ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($5,$7,$8)|0); STACKTOP = sp;return ($9|0); } function __ZN6laszip7formats20standard_diff_methodItEC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 2|0); HEAP8[$3>>0] = 0; STACKTOP = sp;return; } function __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 80|0); __ZN6laszip13decompressors7integerD2Ev($3); __ZN6laszip11compressors7integerD2Ev($2); STACKTOP = sp;return; } function __ZN6laszip7formats5fieldItNS0_20standard_diff_methodItEEE14decompressWithINS_8decoders10arithmeticI10buf_streamEEEEPcRT_SA_($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $6 = sp + 12|0; $3 = $0; $4 = $1; $5 = $2; $7 = $3; $8 = ((($7)) + 161|0); $9 = HEAP8[$8>>0]|0; $10 = $9&1; if (!($10)) { $11 = ((($7)) + 80|0); __ZN6laszip13decompressors7integer4initEv($11); } $12 = ((($7)) + 162|0); $13 = (__ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($12)|0); if ($13) { $14 = ((($7)) + 80|0); $15 = $4; $16 = ((($7)) + 162|0); $17 = HEAP16[$16>>1]|0; $18 = $17&65535; $19 = (__ZN6laszip13decompressors7integer10decompressINS_8decoders10arithmeticI10buf_streamEEEEiRT_ij($14,$15,$18,0)|0); $20 = $19&65535; HEAP16[$6>>1] = $20; $21 = HEAP16[$6>>1]|0; $22 = $5; __ZN6laszip7formats7packersItE4packEtPc($21,$22); $28 = $5; $29 = ((($28)) + 2|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } else { $23 = $4; $24 = (__ZN6laszip8decoders10arithmeticI10buf_streamE11getInStreamEv($23)|0); $25 = $5; __ZN10buf_stream8getBytesEPhi($24,$25,2); $26 = $5; $27 = (__ZN6laszip7formats7packersItE6unpackEPKc($26)|0); HEAP16[$6>>1] = $27; $28 = $5; $29 = ((($28)) + 2|0); $5 = $29; $30 = ((($7)) + 162|0); __ZN6laszip7formats20standard_diff_methodItE4pushERKt($30,$6); $31 = $5; STACKTOP = sp;return ($31|0); } return (0)|0; } function __ZNK6laszip7formats20standard_diff_methodItE10have_valueEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ((($2)) + 2|0); $4 = HEAP8[$3>>0]|0; $5 = $4&1; STACKTOP = sp;return ($5|0); } function __ZN6laszip7formats20standard_diff_methodItE4pushERKt($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $1; $4 = $2; $5 = ((($4)) + 2|0); $6 = HEAP8[$5>>0]|0; $7 = $6&1; if (!($7)) { $8 = ((($4)) + 2|0); HEAP8[$8>>0] = 1; } $9 = $3; $10 = HEAP16[$9>>1]|0; HEAP16[$4>>1] = $10; STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__214__shared_countD2Ev($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev($2); __ZdlPv($2); STACKTOP = sp;return; } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $15 = $0; $16 = $15; $17 = ((($16)) + 12|0); $14 = $17; $18 = $14; $13 = $18; $19 = $13; $6 = $19; $20 = $6; $5 = $20; $21 = $5; $22 = ((($16)) + 12|0); $2 = $22; $23 = $2; $1 = $23; $24 = $1; $4 = $24; $25 = $4; $3 = $25; $26 = $3; $27 = HEAP32[$26>>2]|0; $7 = $21; $8 = $27; $28 = $8; $29 = ($28|0)==(0|0); if (!($29)) { $30 = HEAP32[$28>>2]|0; $31 = ((($30)) + 4|0); $32 = HEAP32[$31>>2]|0; FUNCTION_TABLE_vi[$32 & 511]($28); } $33 = ((($16)) + 12|0); $10 = $33; $34 = $10; $9 = $34; $35 = $9; $12 = $35; $36 = $12; $11 = $36; STACKTOP = sp;return; } function __ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $9 = $0; $10 = $1; $11 = $9; $12 = $10; $7 = $12; $8 = 968; $13 = $7; $14 = ((($13)) + 4|0); $15 = HEAP32[$14>>2]|0; $16 = $8; $17 = ((($16)) + 4|0); $18 = HEAP32[$17>>2]|0; $19 = ($15|0)==($18|0); if (!($19)) { $26 = 0; STACKTOP = sp;return ($26|0); } $20 = ((($11)) + 12|0); $3 = $20; $21 = $3; $2 = $21; $22 = $2; $5 = $22; $23 = $5; $4 = $23; $24 = $4; $6 = $24; $25 = $6; $26 = $25; STACKTOP = sp;return ($26|0); } function __ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $14 = sp + 52|0; $13 = $0; $15 = $13; $16 = ((($15)) + 12|0); $12 = $16; $17 = $12; $11 = $17; $18 = $11; $5 = $14; $6 = $18; $19 = ((($15)) + 12|0); $2 = $19; $20 = $2; $1 = $20; $4 = $15; $21 = $4; $3 = $21; $22 = $3; $8 = $14; $9 = $22; $10 = 1; $23 = $9; $7 = $23; $24 = $7; __ZdlPv($24); STACKTOP = sp;return; } function __ZN10emscripten8internal11NoBaseClass6verifyI6LASZipEEvv() { var label = 0, sp = 0; sp = STACKTOP; return; } function __ZN10emscripten8internal13getActualTypeI6LASZipEEPKvPT_($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = (__ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($2)|0); STACKTOP = sp;return ($3|0); } function __ZN10emscripten8internal11NoBaseClass11getUpcasterI6LASZipEEPFvvEv() { var label = 0, sp = 0; sp = STACKTOP; return (0|0); } function __ZN10emscripten8internal11NoBaseClass13getDowncasterI6LASZipEEPFvvEv() { var label = 0, sp = 0; sp = STACKTOP; return (0|0); } function __ZN10emscripten8internal14raw_destructorI6LASZipEEvPT_($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ($2|0)==(0|0); if (!($3)) { __ZN6LASZipD2Ev($2); __ZdlPv($2); } STACKTOP = sp;return; } function __ZN10emscripten8internal6TypeIDI6LASZipE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI6LASZipEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK6LASZipEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11NoBaseClass3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (0|0); } function __ZN10emscripten8internal14getLightTypeIDI6LASZipEEPKvRKT_($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return (976|0); } function __ZN6LASZipD2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0; var $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0; var $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0; var $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 160|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(160|0); $6 = sp + 128|0; $12 = sp + 104|0; $17 = sp + 80|0; $23 = sp + 56|0; $29 = sp + 32|0; $34 = sp + 8|0; $35 = $0; $36 = $35; $33 = $36; $37 = $33; $32 = $34; $38 = $32; HEAP32[$38>>2] = 0; $39 = ((($38)) + 4|0); HEAP32[$39>>2] = 0; $30 = $34; $31 = $37; $40 = $30; $41 = $31; $27 = $40; $28 = $41; $42 = $27; $26 = $42; $43 = $26; $44 = HEAP32[$43>>2]|0; HEAP32[$29>>2] = $44; $45 = $28; $24 = $45; $46 = $24; $47 = HEAP32[$46>>2]|0; $48 = $27; HEAP32[$48>>2] = $47; $25 = $29; $49 = $25; $50 = HEAP32[$49>>2]|0; $51 = $28; HEAP32[$51>>2] = $50; $52 = ((($40)) + 4|0); $53 = $31; $54 = ((($53)) + 4|0); $21 = $52; $22 = $54; $55 = $21; $20 = $55; $56 = $20; $57 = HEAP32[$56>>2]|0; HEAP32[$23>>2] = $57; $58 = $22; $18 = $58; $59 = $18; $60 = HEAP32[$59>>2]|0; $61 = $21; HEAP32[$61>>2] = $60; $19 = $23; $62 = $19; $63 = HEAP32[$62>>2]|0; $64 = $22; HEAP32[$64>>2] = $63; __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($34); $65 = ((($36)) + 8|0); $16 = $65; $66 = $16; $15 = $17; $67 = $15; HEAP32[$67>>2] = 0; $68 = ((($67)) + 4|0); HEAP32[$68>>2] = 0; $13 = $17; $14 = $66; $69 = $13; $70 = $14; $10 = $69; $11 = $70; $71 = $10; $9 = $71; $72 = $9; $73 = HEAP32[$72>>2]|0; HEAP32[$12>>2] = $73; $74 = $11; $7 = $74; $75 = $7; $76 = HEAP32[$75>>2]|0; $77 = $10; HEAP32[$77>>2] = $76; $8 = $12; $78 = $8; $79 = HEAP32[$78>>2]|0; $80 = $11; HEAP32[$80>>2] = $79; $81 = ((($69)) + 4|0); $82 = $14; $83 = ((($82)) + 4|0); $4 = $81; $5 = $83; $84 = $4; $3 = $84; $85 = $3; $86 = HEAP32[$85>>2]|0; HEAP32[$6>>2] = $86; $87 = $5; $1 = $87; $88 = $1; $89 = HEAP32[$88>>2]|0; $90 = $4; HEAP32[$90>>2] = $89; $2 = $6; $91 = $2; $92 = HEAP32[$91>>2]|0; $93 = $5; HEAP32[$93>>2] = $92; __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($17); $94 = ((($36)) + 8|0); __ZNSt3__210shared_ptrIN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEEED2Ev($94); __ZNSt3__210shared_ptrIN6laszip7streams13memory_streamEED2Ev($36); STACKTOP = sp;return; } function __ZN10emscripten8internal11LightTypeIDI6LASZipE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (976|0); } function __ZN10emscripten8internal11LightTypeIDIP6LASZipE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (984|0); } function __ZN10emscripten8internal11LightTypeIDIPK6LASZipE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1000|0); } function __ZN10emscripten8internal19getGenericSignatureIJiiEEEPKcv() { var label = 0, sp = 0; sp = STACKTOP; return (16424|0); } function __ZN10emscripten8internal19getGenericSignatureIJvEEEPKcv() { var label = 0, sp = 0; sp = STACKTOP; return (16427|0); } function __ZN10emscripten8internal19getGenericSignatureIJviEEEPKcv() { var label = 0, sp = 0; sp = STACKTOP; return (16429|0); } function __ZN10emscripten8internal12operator_newI6LASZipJEEEPT_DpOT0_() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__Znwj(16)|0); __ZN6LASZipC2Ev($0); return ($0|0); } function __ZN10emscripten8internal7InvokerIP6LASZipJEE6invokeEPFS3_vE($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = (FUNCTION_TABLE_i[$2 & 255]()|0); $4 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($3)|0); STACKTOP = sp;return ($4|0); } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 1; } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP6LASZipEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal11BindingTypeIP6LASZipE10toWireTypeES3_($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2856|0); } function __ZN6LASZipC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $3; $2 = $4; $5 = $2; HEAP32[$5>>2] = 0; $6 = ((($5)) + 4|0); HEAP32[$6>>2] = 0; $7 = ((($4)) + 8|0); $1 = $7; $8 = $1; HEAP32[$8>>2] = 0; $9 = ((($8)) + 4|0); HEAP32[$9>>2] = 0; STACKTOP = sp;return; } function __ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $4 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = $0; $5 = $1; $6 = $2; $7 = $3; $8 = $5; $9 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($8)|0); $10 = $4; $$field = HEAP32[$10>>2]|0; $$index1 = ((($10)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; $11 = $$field2 >> 1; $12 = (($9) + ($11)|0); $13 = $$field2 & 1; $14 = ($13|0)!=(0); if ($14) { $15 = HEAP32[$12>>2]|0; $16 = (($15) + ($$field)|0); $17 = HEAP32[$16>>2]|0; $23 = $17; } else { $18 = $$field; $23 = $18; } $19 = $6; $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0); $21 = $7; $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0); FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22); STACKTOP = sp;return; } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 4; } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal10getContextIM6LASZipFvjjEEEPT_RKS5_($0) { $0 = $0|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__Znwj(8)|0); $3 = $1; $$field = HEAP32[$3>>2]|0; $$index1 = ((($3)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; HEAP32[$2>>2] = $$field; $$index5 = ((($2)) + 4|0); HEAP32[$$index5>>2] = $$field2; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEjjEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2860|0); } function __ZN10emscripten8internal19getGenericSignatureIJviiiiEEEPKcv() { var label = 0, sp = 0; sp = STACKTOP; return (16432|0); } function __ZN10emscripten8internal13MethodInvokerIM6LASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $4; $7 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($6)|0); $8 = $3; $$field = HEAP32[$8>>2]|0; $$index1 = ((($8)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; $9 = $$field2 >> 1; $10 = (($7) + ($9)|0); $11 = $$field2 & 1; $12 = ($11|0)!=(0); if ($12) { $13 = HEAP32[$10>>2]|0; $14 = (($13) + ($$field)|0); $15 = HEAP32[$14>>2]|0; $19 = $15; } else { $16 = $$field; $19 = $16; } $17 = $5; $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0); FUNCTION_TABLE_vii[$19 & 255]($10,$18); STACKTOP = sp;return; } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 3; } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal10getContextIM6LASZipFviEEEPT_RKS5_($0) { $0 = $0|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__Znwj(8)|0); $3 = $1; $$field = HEAP32[$3>>2]|0; $$index1 = ((($3)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; HEAP32[$2>>2] = $$field; $$index5 = ((($2)) + 4|0); HEAP32[$$index5>>2] = $$field2; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI6LASZipEEiEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2876|0); } function __ZN10emscripten8internal19getGenericSignatureIJviiiEEEPKcv() { var label = 0, sp = 0; sp = STACKTOP; return (16438|0); } function __ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_($0,$1) { $0 = $0|0; $1 = $1|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = sp; $2 = $0; $3 = $1; $5 = $3; $6 = (__ZN10emscripten8internal11BindingTypeIP6LASZipE12fromWireTypeES3_($5)|0); $7 = $2; $$field = HEAP32[$7>>2]|0; $$index1 = ((($7)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; $8 = $$field2 >> 1; $9 = (($6) + ($8)|0); $10 = $$field2 & 1; $11 = ($10|0)!=(0); if ($11) { $12 = HEAP32[$9>>2]|0; $13 = (($12) + ($$field)|0); $14 = HEAP32[$13>>2]|0; $16 = $14; } else { $15 = $$field; $16 = $15; } $17 = (FUNCTION_TABLE_ii[$16 & 255]($9)|0); HEAP32[$4>>2] = $17; $18 = (__ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($4)|0); STACKTOP = sp;return ($18|0); } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 2; } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJjNS0_17AllowedRawPointerI6LASZipEEEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal10getContextIM6LASZipFjvEEEPT_RKS5_($0) { $0 = $0|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__Znwj(8)|0); $3 = $1; $$field = HEAP32[$3>>2]|0; $$index1 = ((($3)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; HEAP32[$2>>2] = $$field; $$index5 = ((($2)) + 4|0); HEAP32[$$index5>>2] = $$field2; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal11BindingTypeIjE10toWireTypeERKj($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = HEAP32[$2>>2]|0; STACKTOP = sp;return ($3|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJjNS0_17AllowedRawPointerI6LASZipEEEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2888|0); } function __ZN10emscripten8internal19getGenericSignatureIJiiiEEEPKcv() { var label = 0, sp = 0; sp = STACKTOP; return (16443|0); } function __ZN10emscripten8internal11NoBaseClass6verifyI13DynamicLASZipEEvv() { var label = 0, sp = 0; sp = STACKTOP; return; } function __ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = (__ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($2)|0); STACKTOP = sp;return ($3|0); } function __ZN10emscripten8internal11NoBaseClass11getUpcasterI13DynamicLASZipEEPFvvEv() { var label = 0, sp = 0; sp = STACKTOP; return (0|0); } function __ZN10emscripten8internal11NoBaseClass13getDowncasterI13DynamicLASZipEEPFvvEv() { var label = 0, sp = 0; sp = STACKTOP; return (0|0); } function __ZN10emscripten8internal14raw_destructorI13DynamicLASZipEEvPT_($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = ($2|0)==(0|0); if (!($3)) { __ZN13DynamicLASZipD2Ev($2); __ZdlPv($2); } STACKTOP = sp;return; } function __ZN10emscripten8internal6TypeIDI13DynamicLASZipE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerI13DynamicLASZipEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDINS0_17AllowedRawPointerIK13DynamicLASZipEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal14getLightTypeIDI13DynamicLASZipEEPKvRKT_($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return (1016|0); } function __ZN13DynamicLASZipD2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0; var $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0; var $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0; var $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0; var $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0; var $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0; var $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0; var $99 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0); $6 = sp + 200|0; $12 = sp + 176|0; $17 = sp + 152|0; $23 = sp + 128|0; $29 = sp + 104|0; $34 = sp + 80|0; $40 = sp + 56|0; $46 = sp + 32|0; $51 = sp + 8|0; $52 = $0; $53 = $52; $50 = $53; $54 = $50; $49 = $51; $55 = $49; HEAP32[$55>>2] = 0; $56 = ((($55)) + 4|0); HEAP32[$56>>2] = 0; $47 = $51; $48 = $54; $57 = $47; $58 = $48; $44 = $57; $45 = $58; $59 = $44; $43 = $59; $60 = $43; $61 = HEAP32[$60>>2]|0; HEAP32[$46>>2] = $61; $62 = $45; $41 = $62; $63 = $41; $64 = HEAP32[$63>>2]|0; $65 = $44; HEAP32[$65>>2] = $64; $42 = $46; $66 = $42; $67 = HEAP32[$66>>2]|0; $68 = $45; HEAP32[$68>>2] = $67; $69 = ((($57)) + 4|0); $70 = $48; $71 = ((($70)) + 4|0); $38 = $69; $39 = $71; $72 = $38; $37 = $72; $73 = $37; $74 = HEAP32[$73>>2]|0; HEAP32[$40>>2] = $74; $75 = $39; $35 = $75; $76 = $35; $77 = HEAP32[$76>>2]|0; $78 = $38; HEAP32[$78>>2] = $77; $36 = $40; $79 = $36; $80 = HEAP32[$79>>2]|0; $81 = $39; HEAP32[$81>>2] = $80; __ZNSt3__210shared_ptrI10buf_streamED2Ev($51); $82 = ((($53)) + 16|0); $33 = $82; $83 = $33; $32 = $34; $84 = $32; HEAP32[$84>>2] = 0; $85 = ((($84)) + 4|0); HEAP32[$85>>2] = 0; $30 = $34; $31 = $83; $86 = $30; $87 = $31; $27 = $86; $28 = $87; $88 = $27; $26 = $88; $89 = $26; $90 = HEAP32[$89>>2]|0; HEAP32[$29>>2] = $90; $91 = $28; $24 = $91; $92 = $24; $93 = HEAP32[$92>>2]|0; $94 = $27; HEAP32[$94>>2] = $93; $25 = $29; $95 = $25; $96 = HEAP32[$95>>2]|0; $97 = $28; HEAP32[$97>>2] = $96; $98 = ((($86)) + 4|0); $99 = $31; $100 = ((($99)) + 4|0); $21 = $98; $22 = $100; $101 = $21; $20 = $101; $102 = $20; $103 = HEAP32[$102>>2]|0; HEAP32[$23>>2] = $103; $104 = $22; $18 = $104; $105 = $18; $106 = HEAP32[$105>>2]|0; $107 = $21; HEAP32[$107>>2] = $106; $19 = $23; $108 = $19; $109 = HEAP32[$108>>2]|0; $110 = $22; HEAP32[$110>>2] = $109; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($34); $111 = ((($53)) + 16|0); $16 = $111; $112 = $16; $15 = $17; $113 = $15; HEAP32[$113>>2] = 0; $114 = ((($113)) + 4|0); HEAP32[$114>>2] = 0; $13 = $17; $14 = $112; $115 = $13; $116 = $14; $10 = $115; $11 = $116; $117 = $10; $9 = $117; $118 = $9; $119 = HEAP32[$118>>2]|0; HEAP32[$12>>2] = $119; $120 = $11; $7 = $120; $121 = $7; $122 = HEAP32[$121>>2]|0; $123 = $10; HEAP32[$123>>2] = $122; $8 = $12; $124 = $8; $125 = HEAP32[$124>>2]|0; $126 = $11; HEAP32[$126>>2] = $125; $127 = ((($115)) + 4|0); $128 = $14; $129 = ((($128)) + 4|0); $4 = $127; $5 = $129; $130 = $4; $3 = $130; $131 = $3; $132 = HEAP32[$131>>2]|0; HEAP32[$6>>2] = $132; $133 = $5; $1 = $133; $134 = $1; $135 = HEAP32[$134>>2]|0; $136 = $4; HEAP32[$136>>2] = $135; $2 = $6; $137 = $2; $138 = HEAP32[$137>>2]|0; $139 = $5; HEAP32[$139>>2] = $138; __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($17); $140 = ((($53)) + 16|0); __ZNSt3__210shared_ptrIN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEEED2Ev($140); $141 = ((($53)) + 8|0); __ZNSt3__210shared_ptrIN6laszip8decoders10arithmeticI10buf_streamEEED2Ev($141); __ZNSt3__210shared_ptrI10buf_streamED2Ev($53); STACKTOP = sp;return; } function __ZN10emscripten8internal11LightTypeIDI13DynamicLASZipE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1016|0); } function __ZN10emscripten8internal11LightTypeIDIP13DynamicLASZipE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1024|0); } function __ZN10emscripten8internal11LightTypeIDIPK13DynamicLASZipE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1040|0); } function __ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__Znwj(24)|0); __ZN13DynamicLASZipC2Ev($0); return ($0|0); } function __ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; $3 = (FUNCTION_TABLE_i[$2 & 255]()|0); $4 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($3)|0); STACKTOP = sp;return ($4|0); } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 1; } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJP13DynamicLASZipEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE10toWireTypeES3_($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJNS0_17AllowedRawPointerI13DynamicLASZipEEEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2896|0); } function __ZN13DynamicLASZipC2Ev($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = $0; $5 = $4; $3 = $5; $6 = $3; HEAP32[$6>>2] = 0; $7 = ((($6)) + 4|0); HEAP32[$7>>2] = 0; $8 = ((($5)) + 8|0); $1 = $8; $9 = $1; HEAP32[$9>>2] = 0; $10 = ((($9)) + 4|0); HEAP32[$10>>2] = 0; $11 = ((($5)) + 16|0); $2 = $11; $12 = $2; HEAP32[$12>>2] = 0; $13 = ((($12)) + 4|0); HEAP32[$13>>2] = 0; STACKTOP = sp;return; } function __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $4 = 0, $5 = 0, $6 = 0; var $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $4 = $0; $5 = $1; $6 = $2; $7 = $3; $8 = $5; $9 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($8)|0); $10 = $4; $$field = HEAP32[$10>>2]|0; $$index1 = ((($10)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; $11 = $$field2 >> 1; $12 = (($9) + ($11)|0); $13 = $$field2 & 1; $14 = ($13|0)!=(0); if ($14) { $15 = HEAP32[$12>>2]|0; $16 = (($15) + ($$field)|0); $17 = HEAP32[$16>>2]|0; $23 = $17; } else { $18 = $$field; $23 = $18; } $19 = $6; $20 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($19)|0); $21 = $7; $22 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($21)|0); FUNCTION_TABLE_viii[$23 & 255]($12,$20,$22); STACKTOP = sp;return; } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 4; } function __ZNK10emscripten8internal12WithPoliciesIJNS_18allow_raw_pointersEEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjjEEEPT_RKS5_($0) { $0 = $0|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__Znwj(8)|0); $3 = $1; $$field = HEAP32[$3>>2]|0; $$index1 = ((($3)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; HEAP32[$2>>2] = $$field; $$index5 = ((($2)) + 4|0); HEAP32[$$index5>>2] = $$field2; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = $1; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjjEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2900|0); } function __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjEvPS2_JjEE6invokeERKS4_S5_j($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $4; $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0); $8 = $3; $$field = HEAP32[$8>>2]|0; $$index1 = ((($8)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; $9 = $$field2 >> 1; $10 = (($7) + ($9)|0); $11 = $$field2 & 1; $12 = ($11|0)!=(0); if ($12) { $13 = HEAP32[$10>>2]|0; $14 = (($13) + ($$field)|0); $15 = HEAP32[$14>>2]|0; $19 = $15; } else { $16 = $$field; $19 = $16; } $17 = $5; $18 = (__ZN10emscripten8internal11BindingTypeIjE12fromWireTypeEj($17)|0); FUNCTION_TABLE_vii[$19 & 255]($10,$18); STACKTOP = sp;return; } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 3; } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal10getContextIM13DynamicLASZipFvjEEEPT_RKS5_($0) { $0 = $0|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__Znwj(8)|0); $3 = $1; $$field = HEAP32[$3>>2]|0; $$index1 = ((($3)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; HEAP32[$2>>2] = $$field; $$index5 = ((($2)) + 4|0); HEAP32[$$index5>>2] = $$field2; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEjEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2916|0); } function __ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFviEvPS2_JiEE6invokeERKS4_S5_i($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = $0; $4 = $1; $5 = $2; $6 = $4; $7 = (__ZN10emscripten8internal11BindingTypeIP13DynamicLASZipE12fromWireTypeES3_($6)|0); $8 = $3; $$field = HEAP32[$8>>2]|0; $$index1 = ((($8)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; $9 = $$field2 >> 1; $10 = (($7) + ($9)|0); $11 = $$field2 & 1; $12 = ($11|0)!=(0); if ($12) { $13 = HEAP32[$10>>2]|0; $14 = (($13) + ($$field)|0); $15 = HEAP32[$14>>2]|0; $19 = $15; } else { $16 = $$field; $19 = $16; } $17 = $5; $18 = (__ZN10emscripten8internal11BindingTypeIiE12fromWireTypeEi($17)|0); FUNCTION_TABLE_vii[$19 & 255]($10,$18); STACKTOP = sp;return; } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getCountEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; STACKTOP = sp;return 3; } function __ZNK10emscripten8internal12WithPoliciesIJEE11ArgTypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEE8getTypesEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv()|0); STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal10getContextIM13DynamicLASZipFviEEEPT_RKS5_($0) { $0 = $0|0; var $$field = 0, $$field2 = 0, $$index1 = 0, $$index5 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__Znwj(8)|0); $3 = $1; $$field = HEAP32[$3>>2]|0; $$index1 = ((($3)) + 4|0); $$field2 = HEAP32[$$index1>>2]|0; HEAP32[$2>>2] = $$field; $$index5 = ((($2)) + 4|0); HEAP32[$$index5>>2] = $$field2; STACKTOP = sp;return ($2|0); } function __ZN10emscripten8internal14ArgArrayGetterINS0_8TypeListIJvNS0_17AllowedRawPointerI13DynamicLASZipEEiEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (2928|0); } function __GLOBAL__sub_I_laz_perf_cpp() { var label = 0, sp = 0; sp = STACKTOP; ___cxx_global_var_init(); return; } function __GLOBAL__sub_I_bind_cpp() { var label = 0, sp = 0; sp = STACKTOP; ___cxx_global_var_init_2(); return; } function ___cxx_global_var_init_2() { var label = 0, sp = 0; sp = STACKTOP; __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev(21881); return; } function __ZN53EmscriptenBindingInitializer_native_and_builtin_typesC2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIvE3getEv()|0); __embind_register_void(($2|0),(16498|0)); $3 = (__ZN10emscripten8internal6TypeIDIbE3getEv()|0); __embind_register_bool(($3|0),(16503|0),1,1,0); __ZN12_GLOBAL__N_116register_integerIcEEvPKc(16508); __ZN12_GLOBAL__N_116register_integerIaEEvPKc(16513); __ZN12_GLOBAL__N_116register_integerIhEEvPKc(16525); __ZN12_GLOBAL__N_116register_integerIsEEvPKc(16539); __ZN12_GLOBAL__N_116register_integerItEEvPKc(16545); __ZN12_GLOBAL__N_116register_integerIiEEvPKc(16560); __ZN12_GLOBAL__N_116register_integerIjEEvPKc(16564); __ZN12_GLOBAL__N_116register_integerIlEEvPKc(16577); __ZN12_GLOBAL__N_116register_integerImEEvPKc(16582); __ZN12_GLOBAL__N_114register_floatIfEEvPKc(16596); __ZN12_GLOBAL__N_114register_floatIdEEvPKc(16602); $4 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0); __embind_register_std_string(($4|0),(16609|0)); $5 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0); __embind_register_std_string(($5|0),(16621|0)); $6 = (__ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0); __embind_register_std_wstring(($6|0),4,(16654|0)); $7 = (__ZN10emscripten8internal6TypeIDINS_3valEE3getEv()|0); __embind_register_emval(($7|0),(16667|0)); __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc(16683); __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16713); __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(16750); __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(16789); __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(16820); __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(16860); __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(16889); __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc(16927); __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc(16957); __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc(16996); __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc(17028); __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc(17061); __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc(17094); __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc(17128); __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc(17161); __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc(17195); __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc(17226); __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc(17258); STACKTOP = sp;return; } function __ZN10emscripten8internal6TypeIDIvE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIvE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDIbE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIbE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_116register_integerIcEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIcE3getEv()|0); $3 = $1; $4 = -128 << 24 >> 24; $5 = 127 << 24 >> 24; __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerIaEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIaE3getEv()|0); $3 = $1; $4 = -128 << 24 >> 24; $5 = 127 << 24 >> 24; __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerIhEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIhE3getEv()|0); $3 = $1; $4 = 0; $5 = 255; __embind_register_integer(($2|0),($3|0),1,($4|0),($5|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerIsEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIsE3getEv()|0); $3 = $1; $4 = -32768 << 16 >> 16; $5 = 32767 << 16 >> 16; __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerItEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDItE3getEv()|0); $3 = $1; $4 = 0; $5 = 65535; __embind_register_integer(($2|0),($3|0),2,($4|0),($5|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerIiEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIiE3getEv()|0); $3 = $1; __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerIjEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIjE3getEv()|0); $3 = $1; __embind_register_integer(($2|0),($3|0),4,0,-1); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerIlEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIlE3getEv()|0); $3 = $1; __embind_register_integer(($2|0),($3|0),4,-2147483648,2147483647); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_116register_integerImEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDImE3getEv()|0); $3 = $1; __embind_register_integer(($2|0),($3|0),4,0,-1); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_114register_floatIfEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIfE3getEv()|0); $3 = $1; __embind_register_float(($2|0),($3|0),4); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_114register_floatIdEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDIdE3getEv()|0); $3 = $1; __embind_register_float(($2|0),($3|0),8); STACKTOP = sp;return; } function __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal6TypeIDINS_3valEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_120register_memory_viewIcEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIaEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIhEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIsEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewItEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIiEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIjEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIlEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewImEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIfEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIdEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN12_GLOBAL__N_120register_memory_viewIeEEvPKc($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = $0; $2 = (__ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv()|0); $3 = (__ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv()|0); $4 = $1; __embind_register_memory_view(($2|0),($3|0),($4|0)); STACKTOP = sp;return; } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIeEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIeEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 7; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIeEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1056|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIdEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIdEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 7; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIdEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1064|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIfEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIfEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 6; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIfEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1072|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewImEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexImEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 5; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewImEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1080|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIlEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIlEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 4; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIlEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1088|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIjEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIjEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 5; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIjEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1096|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIiEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIiEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 4; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIiEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1104|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewItEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexItEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 3; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewItEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1112|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIsEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIsEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 2; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIsEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1120|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIhEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIhEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 1; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIhEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1128|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIaEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIaEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 0; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIaEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1136|0); } function __ZN10emscripten8internal6TypeIDINS_11memory_viewIcEEE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv()|0); return ($0|0); } function __ZN12_GLOBAL__N_118getTypedArrayIndexIcEENS_15TypedArrayIndexEv() { var label = 0, sp = 0; sp = STACKTOP; return 0; } function __ZN10emscripten8internal11LightTypeIDINS_11memory_viewIcEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1144|0); } function __ZN10emscripten8internal11LightTypeIDINS_3valEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1152|0); } function __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIwNS2_11char_traitsIwEENS2_9allocatorIwEEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1160|0); } function __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIhNS2_11char_traitsIhEENS2_9allocatorIhEEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1192|0); } function __ZN10emscripten8internal11LightTypeIDINSt3__212basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1216|0); } function __ZN10emscripten8internal6TypeIDIdE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIdE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIdE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1552|0); } function __ZN10emscripten8internal6TypeIDIfE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIfE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIfE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1544|0); } function __ZN10emscripten8internal6TypeIDImE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDImE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDImE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1536|0); } function __ZN10emscripten8internal6TypeIDIlE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIlE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIlE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1528|0); } function __ZN10emscripten8internal6TypeIDIjE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIjE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIjE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1520|0); } function __ZN10emscripten8internal6TypeIDIiE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIiE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIiE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1512|0); } function __ZN10emscripten8internal6TypeIDItE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDItE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDItE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1504|0); } function __ZN10emscripten8internal6TypeIDIsE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIsE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIsE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1496|0); } function __ZN10emscripten8internal6TypeIDIhE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIhE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIhE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1480|0); } function __ZN10emscripten8internal6TypeIDIaE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIaE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIaE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1488|0); } function __ZN10emscripten8internal6TypeIDIcE3getEv() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (__ZN10emscripten8internal11LightTypeIDIcE3getEv()|0); return ($0|0); } function __ZN10emscripten8internal11LightTypeIDIcE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1472|0); } function __ZN10emscripten8internal11LightTypeIDIbE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1464|0); } function __ZN10emscripten8internal11LightTypeIDIvE3getEv() { var label = 0, sp = 0; sp = STACKTOP; return (1448|0); } function ___getTypeName($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = $0; $3 = $2; $1 = $3; $4 = $1; $5 = ((($4)) + 4|0); $6 = HEAP32[$5>>2]|0; $7 = (___strdup($6)|0); STACKTOP = sp;return ($7|0); } function _malloc($0) { $0 = $0|0; var $$0 = 0, $$0$i$i = 0, $$0$i$i$i = 0, $$0$i16$i = 0, $$0187$i = 0, $$0189$i = 0, $$0190$i = 0, $$0191$i = 0, $$0197 = 0, $$0199 = 0, $$02065$i$i = 0, $$0207$lcssa$i$i = 0, $$02074$i$i = 0, $$0211$i$i = 0, $$0212$i$i = 0, $$024372$i = 0, $$0286$i$i = 0, $$028711$i$i = 0, $$0288$lcssa$i$i = 0, $$028810$i$i = 0; var $$0294$i$i = 0, $$0295$i$i = 0, $$0340$i = 0, $$034217$i = 0, $$0343$lcssa$i = 0, $$034316$i = 0, $$0345$i = 0, $$0351$i = 0, $$0357$i = 0, $$0358$i = 0, $$0360$i = 0, $$0361$i = 0, $$0367$i = 0, $$1194$i = 0, $$1194$i$be = 0, $$1194$i$ph = 0, $$1196$i = 0, $$1196$i$be = 0, $$1196$i$ph = 0, $$124471$i = 0; var $$1290$i$i = 0, $$1290$i$i$be = 0, $$1290$i$i$ph = 0, $$1292$i$i = 0, $$1292$i$i$be = 0, $$1292$i$i$ph = 0, $$1341$i = 0, $$1346$i = 0, $$1362$i = 0, $$1369$i = 0, $$1369$i$be = 0, $$1369$i$ph = 0, $$1373$i = 0, $$1373$i$be = 0, $$1373$i$ph = 0, $$2234243136$i = 0, $$2247$ph$i = 0, $$2253$ph$i = 0, $$2353$i = 0, $$3$i = 0; var $$3$i$i = 0, $$3$i203 = 0, $$3$i203218 = 0, $$3348$i = 0, $$3371$i = 0, $$4$lcssa$i = 0, $$420$i = 0, $$420$i$ph = 0, $$4236$i = 0, $$4349$lcssa$i = 0, $$434919$i = 0, $$434919$i$ph = 0, $$4355$i = 0, $$535618$i = 0, $$535618$i$ph = 0, $$723947$i = 0, $$748$i = 0, $$pre = 0, $$pre$i = 0, $$pre$i$i = 0; var $$pre$i17$i = 0, $$pre$i208 = 0, $$pre$i210 = 0, $$pre$phi$i$iZ2D = 0, $$pre$phi$i18$iZ2D = 0, $$pre$phi$i209Z2D = 0, $$pre$phi$iZ2D = 0, $$pre$phi17$i$iZ2D = 0, $$pre$phiZ2D = 0, $$pre16$i$i = 0, $$sink = 0, $$sink325 = 0, $$sink326 = 0, $1 = 0, $10 = 0, $100 = 0, $1000 = 0, $1001 = 0, $1002 = 0, $1003 = 0; var $1004 = 0, $1005 = 0, $1006 = 0, $1007 = 0, $1008 = 0, $1009 = 0, $101 = 0, $1010 = 0, $1011 = 0, $1012 = 0, $1013 = 0, $1014 = 0, $1015 = 0, $1016 = 0, $1017 = 0, $1018 = 0, $1019 = 0, $102 = 0, $1020 = 0, $1021 = 0; var $1022 = 0, $1023 = 0, $1024 = 0, $1025 = 0, $1026 = 0, $1027 = 0, $1028 = 0, $1029 = 0, $103 = 0, $1030 = 0, $1031 = 0, $1032 = 0, $1033 = 0, $1034 = 0, $1035 = 0, $1036 = 0, $1037 = 0, $1038 = 0, $1039 = 0, $104 = 0; var $1040 = 0, $1041 = 0, $1042 = 0, $1043 = 0, $1044 = 0, $1045 = 0, $1046 = 0, $1047 = 0, $1048 = 0, $1049 = 0, $105 = 0, $1050 = 0, $1051 = 0, $1052 = 0, $1053 = 0, $1054 = 0, $1055 = 0, $1056 = 0, $1057 = 0, $1058 = 0; var $1059 = 0, $106 = 0, $1060 = 0, $1061 = 0, $1062 = 0, $1063 = 0, $1064 = 0, $1065 = 0, $1066 = 0, $1067 = 0, $1068 = 0, $1069 = 0, $107 = 0, $1070 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0; var $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0; var $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0; var $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0; var $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0; var $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0; var $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0; var $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0; var $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0; var $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0; var $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0; var $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0; var $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0; var $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0; var $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0; var $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0, $370 = 0, $371 = 0, $372 = 0, $373 = 0, $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0, $380 = 0, $381 = 0, $382 = 0, $383 = 0; var $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0, $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $4 = 0, $40 = 0, $400 = 0; var $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0, $410 = 0, $411 = 0, $412 = 0, $413 = 0, $414 = 0, $415 = 0, $416 = 0, $417 = 0, $418 = 0, $419 = 0; var $42 = 0, $420 = 0, $421 = 0, $422 = 0, $423 = 0, $424 = 0, $425 = 0, $426 = 0, $427 = 0, $428 = 0, $429 = 0, $43 = 0, $430 = 0, $431 = 0, $432 = 0, $433 = 0, $434 = 0, $435 = 0, $436 = 0, $437 = 0; var $438 = 0, $439 = 0, $44 = 0, $440 = 0, $441 = 0, $442 = 0, $443 = 0, $444 = 0, $445 = 0, $446 = 0, $447 = 0, $448 = 0, $449 = 0, $45 = 0, $450 = 0, $451 = 0, $452 = 0, $453 = 0, $454 = 0, $455 = 0; var $456 = 0, $457 = 0, $458 = 0, $459 = 0, $46 = 0, $460 = 0, $461 = 0, $462 = 0, $463 = 0, $464 = 0, $465 = 0, $466 = 0, $467 = 0, $468 = 0, $469 = 0, $47 = 0, $470 = 0, $471 = 0, $472 = 0, $473 = 0; var $474 = 0, $475 = 0, $476 = 0, $477 = 0, $478 = 0, $479 = 0, $48 = 0, $480 = 0, $481 = 0, $482 = 0, $483 = 0, $484 = 0, $485 = 0, $486 = 0, $487 = 0, $488 = 0, $489 = 0, $49 = 0, $490 = 0, $491 = 0; var $492 = 0, $493 = 0, $494 = 0, $495 = 0, $496 = 0, $497 = 0, $498 = 0, $499 = 0, $5 = 0, $50 = 0, $500 = 0, $501 = 0, $502 = 0, $503 = 0, $504 = 0, $505 = 0, $506 = 0, $507 = 0, $508 = 0, $509 = 0; var $51 = 0, $510 = 0, $511 = 0, $512 = 0, $513 = 0, $514 = 0, $515 = 0, $516 = 0, $517 = 0, $518 = 0, $519 = 0, $52 = 0, $520 = 0, $521 = 0, $522 = 0, $523 = 0, $524 = 0, $525 = 0, $526 = 0, $527 = 0; var $528 = 0, $529 = 0, $53 = 0, $530 = 0, $531 = 0, $532 = 0, $533 = 0, $534 = 0, $535 = 0, $536 = 0, $537 = 0, $538 = 0, $539 = 0, $54 = 0, $540 = 0, $541 = 0, $542 = 0, $543 = 0, $544 = 0, $545 = 0; var $546 = 0, $547 = 0, $548 = 0, $549 = 0, $55 = 0, $550 = 0, $551 = 0, $552 = 0, $553 = 0, $554 = 0, $555 = 0, $556 = 0, $557 = 0, $558 = 0, $559 = 0, $56 = 0, $560 = 0, $561 = 0, $562 = 0, $563 = 0; var $564 = 0, $565 = 0, $566 = 0, $567 = 0, $568 = 0, $569 = 0, $57 = 0, $570 = 0, $571 = 0, $572 = 0, $573 = 0, $574 = 0, $575 = 0, $576 = 0, $577 = 0, $578 = 0, $579 = 0, $58 = 0, $580 = 0, $581 = 0; var $582 = 0, $583 = 0, $584 = 0, $585 = 0, $586 = 0, $587 = 0, $588 = 0, $589 = 0, $59 = 0, $590 = 0, $591 = 0, $592 = 0, $593 = 0, $594 = 0, $595 = 0, $596 = 0, $597 = 0, $598 = 0, $599 = 0, $6 = 0; var $60 = 0, $600 = 0, $601 = 0, $602 = 0, $603 = 0, $604 = 0, $605 = 0, $606 = 0, $607 = 0, $608 = 0, $609 = 0, $61 = 0, $610 = 0, $611 = 0, $612 = 0, $613 = 0, $614 = 0, $615 = 0, $616 = 0, $617 = 0; var $618 = 0, $619 = 0, $62 = 0, $620 = 0, $621 = 0, $622 = 0, $623 = 0, $624 = 0, $625 = 0, $626 = 0, $627 = 0, $628 = 0, $629 = 0, $63 = 0, $630 = 0, $631 = 0, $632 = 0, $633 = 0, $634 = 0, $635 = 0; var $636 = 0, $637 = 0, $638 = 0, $639 = 0, $64 = 0, $640 = 0, $641 = 0, $642 = 0, $643 = 0, $644 = 0, $645 = 0, $646 = 0, $647 = 0, $648 = 0, $649 = 0, $65 = 0, $650 = 0, $651 = 0, $652 = 0, $653 = 0; var $654 = 0, $655 = 0, $656 = 0, $657 = 0, $658 = 0, $659 = 0, $66 = 0, $660 = 0, $661 = 0, $662 = 0, $663 = 0, $664 = 0, $665 = 0, $666 = 0, $667 = 0, $668 = 0, $669 = 0, $67 = 0, $670 = 0, $671 = 0; var $672 = 0, $673 = 0, $674 = 0, $675 = 0, $676 = 0, $677 = 0, $678 = 0, $679 = 0, $68 = 0, $680 = 0, $681 = 0, $682 = 0, $683 = 0, $684 = 0, $685 = 0, $686 = 0, $687 = 0, $688 = 0, $689 = 0, $69 = 0; var $690 = 0, $691 = 0, $692 = 0, $693 = 0, $694 = 0, $695 = 0, $696 = 0, $697 = 0, $698 = 0, $699 = 0, $7 = 0, $70 = 0, $700 = 0, $701 = 0, $702 = 0, $703 = 0, $704 = 0, $705 = 0, $706 = 0, $707 = 0; var $708 = 0, $709 = 0, $71 = 0, $710 = 0, $711 = 0, $712 = 0, $713 = 0, $714 = 0, $715 = 0, $716 = 0, $717 = 0, $718 = 0, $719 = 0, $72 = 0, $720 = 0, $721 = 0, $722 = 0, $723 = 0, $724 = 0, $725 = 0; var $726 = 0, $727 = 0, $728 = 0, $729 = 0, $73 = 0, $730 = 0, $731 = 0, $732 = 0, $733 = 0, $734 = 0, $735 = 0, $736 = 0, $737 = 0, $738 = 0, $739 = 0, $74 = 0, $740 = 0, $741 = 0, $742 = 0, $743 = 0; var $744 = 0, $745 = 0, $746 = 0, $747 = 0, $748 = 0, $749 = 0, $75 = 0, $750 = 0, $751 = 0, $752 = 0, $753 = 0, $754 = 0, $755 = 0, $756 = 0, $757 = 0, $758 = 0, $759 = 0, $76 = 0, $760 = 0, $761 = 0; var $762 = 0, $763 = 0, $764 = 0, $765 = 0, $766 = 0, $767 = 0, $768 = 0, $769 = 0, $77 = 0, $770 = 0, $771 = 0, $772 = 0, $773 = 0, $774 = 0, $775 = 0, $776 = 0, $777 = 0, $778 = 0, $779 = 0, $78 = 0; var $780 = 0, $781 = 0, $782 = 0, $783 = 0, $784 = 0, $785 = 0, $786 = 0, $787 = 0, $788 = 0, $789 = 0, $79 = 0, $790 = 0, $791 = 0, $792 = 0, $793 = 0, $794 = 0, $795 = 0, $796 = 0, $797 = 0, $798 = 0; var $799 = 0, $8 = 0, $80 = 0, $800 = 0, $801 = 0, $802 = 0, $803 = 0, $804 = 0, $805 = 0, $806 = 0, $807 = 0, $808 = 0, $809 = 0, $81 = 0, $810 = 0, $811 = 0, $812 = 0, $813 = 0, $814 = 0, $815 = 0; var $816 = 0, $817 = 0, $818 = 0, $819 = 0, $82 = 0, $820 = 0, $821 = 0, $822 = 0, $823 = 0, $824 = 0, $825 = 0, $826 = 0, $827 = 0, $828 = 0, $829 = 0, $83 = 0, $830 = 0, $831 = 0, $832 = 0, $833 = 0; var $834 = 0, $835 = 0, $836 = 0, $837 = 0, $838 = 0, $839 = 0, $84 = 0, $840 = 0, $841 = 0, $842 = 0, $843 = 0, $844 = 0, $845 = 0, $846 = 0, $847 = 0, $848 = 0, $849 = 0, $85 = 0, $850 = 0, $851 = 0; var $852 = 0, $853 = 0, $854 = 0, $855 = 0, $856 = 0, $857 = 0, $858 = 0, $859 = 0, $86 = 0, $860 = 0, $861 = 0, $862 = 0, $863 = 0, $864 = 0, $865 = 0, $866 = 0, $867 = 0, $868 = 0, $869 = 0, $87 = 0; var $870 = 0, $871 = 0, $872 = 0, $873 = 0, $874 = 0, $875 = 0, $876 = 0, $877 = 0, $878 = 0, $879 = 0, $88 = 0, $880 = 0, $881 = 0, $882 = 0, $883 = 0, $884 = 0, $885 = 0, $886 = 0, $887 = 0, $888 = 0; var $889 = 0, $89 = 0, $890 = 0, $891 = 0, $892 = 0, $893 = 0, $894 = 0, $895 = 0, $896 = 0, $897 = 0, $898 = 0, $899 = 0, $9 = 0, $90 = 0, $900 = 0, $901 = 0, $902 = 0, $903 = 0, $904 = 0, $905 = 0; var $906 = 0, $907 = 0, $908 = 0, $909 = 0, $91 = 0, $910 = 0, $911 = 0, $912 = 0, $913 = 0, $914 = 0, $915 = 0, $916 = 0, $917 = 0, $918 = 0, $919 = 0, $92 = 0, $920 = 0, $921 = 0, $922 = 0, $923 = 0; var $924 = 0, $925 = 0, $926 = 0, $927 = 0, $928 = 0, $929 = 0, $93 = 0, $930 = 0, $931 = 0, $932 = 0, $933 = 0, $934 = 0, $935 = 0, $936 = 0, $937 = 0, $938 = 0, $939 = 0, $94 = 0, $940 = 0, $941 = 0; var $942 = 0, $943 = 0, $944 = 0, $945 = 0, $946 = 0, $947 = 0, $948 = 0, $949 = 0, $95 = 0, $950 = 0, $951 = 0, $952 = 0, $953 = 0, $954 = 0, $955 = 0, $956 = 0, $957 = 0, $958 = 0, $959 = 0, $96 = 0; var $960 = 0, $961 = 0, $962 = 0, $963 = 0, $964 = 0, $965 = 0, $966 = 0, $967 = 0, $968 = 0, $969 = 0, $97 = 0, $970 = 0, $971 = 0, $972 = 0, $973 = 0, $974 = 0, $975 = 0, $976 = 0, $977 = 0, $978 = 0; var $979 = 0, $98 = 0, $980 = 0, $981 = 0, $982 = 0, $983 = 0, $984 = 0, $985 = 0, $986 = 0, $987 = 0, $988 = 0, $989 = 0, $99 = 0, $990 = 0, $991 = 0, $992 = 0, $993 = 0, $994 = 0, $995 = 0, $996 = 0; var $997 = 0, $998 = 0, $999 = 0, $cond$i = 0, $cond$i$i = 0, $cond$i207 = 0, $not$$i = 0, $or$cond$i = 0, $or$cond$i213 = 0, $or$cond1$i = 0, $or$cond11$i = 0, $or$cond2$i = 0, $or$cond2$i214 = 0, $or$cond5$i = 0, $or$cond50$i = 0, $or$cond51$i = 0, $or$cond6$i = 0, $or$cond7$i = 0, $or$cond8$i = 0, $or$cond8$not$i = 0; var $spec$select$i = 0, $spec$select$i205 = 0, $spec$select1$i = 0, $spec$select3$i = 0, $spec$select49$i = 0, $spec$select7$i = 0, $spec$select9$i = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = sp; $2 = ($0>>>0)<(245); do { if ($2) { $3 = ($0>>>0)<(11); $4 = (($0) + 11)|0; $5 = $4 & -8; $6 = $3 ? 16 : $5; $7 = $6 >>> 3; $8 = HEAP32[5323]|0; $9 = $8 >>> $7; $10 = $9 & 3; $11 = ($10|0)==(0); if (!($11)) { $12 = $9 & 1; $13 = $12 ^ 1; $14 = (($13) + ($7))|0; $15 = $14 << 1; $16 = (21332 + ($15<<2)|0); $17 = ((($16)) + 8|0); $18 = HEAP32[$17>>2]|0; $19 = ((($18)) + 8|0); $20 = HEAP32[$19>>2]|0; $21 = ($20|0)==($16|0); do { if ($21) { $22 = 1 << $14; $23 = $22 ^ -1; $24 = $8 & $23; HEAP32[5323] = $24; } else { $25 = HEAP32[(21308)>>2]|0; $26 = ($25>>>0)>($20>>>0); if ($26) { _abort(); // unreachable; } $27 = ((($20)) + 12|0); $28 = HEAP32[$27>>2]|0; $29 = ($28|0)==($18|0); if ($29) { HEAP32[$27>>2] = $16; HEAP32[$17>>2] = $20; break; } else { _abort(); // unreachable; } } } while(0); $30 = $14 << 3; $31 = $30 | 3; $32 = ((($18)) + 4|0); HEAP32[$32>>2] = $31; $33 = (($18) + ($30)|0); $34 = ((($33)) + 4|0); $35 = HEAP32[$34>>2]|0; $36 = $35 | 1; HEAP32[$34>>2] = $36; $$0 = $19; STACKTOP = sp;return ($$0|0); } $37 = HEAP32[(21300)>>2]|0; $38 = ($6>>>0)>($37>>>0); if ($38) { $39 = ($9|0)==(0); if (!($39)) { $40 = $9 << $7; $41 = 2 << $7; $42 = (0 - ($41))|0; $43 = $41 | $42; $44 = $40 & $43; $45 = (0 - ($44))|0; $46 = $44 & $45; $47 = (($46) + -1)|0; $48 = $47 >>> 12; $49 = $48 & 16; $50 = $47 >>> $49; $51 = $50 >>> 5; $52 = $51 & 8; $53 = $52 | $49; $54 = $50 >>> $52; $55 = $54 >>> 2; $56 = $55 & 4; $57 = $53 | $56; $58 = $54 >>> $56; $59 = $58 >>> 1; $60 = $59 & 2; $61 = $57 | $60; $62 = $58 >>> $60; $63 = $62 >>> 1; $64 = $63 & 1; $65 = $61 | $64; $66 = $62 >>> $64; $67 = (($65) + ($66))|0; $68 = $67 << 1; $69 = (21332 + ($68<<2)|0); $70 = ((($69)) + 8|0); $71 = HEAP32[$70>>2]|0; $72 = ((($71)) + 8|0); $73 = HEAP32[$72>>2]|0; $74 = ($73|0)==($69|0); do { if ($74) { $75 = 1 << $67; $76 = $75 ^ -1; $77 = $8 & $76; HEAP32[5323] = $77; $98 = $77; } else { $78 = HEAP32[(21308)>>2]|0; $79 = ($78>>>0)>($73>>>0); if ($79) { _abort(); // unreachable; } $80 = ((($73)) + 12|0); $81 = HEAP32[$80>>2]|0; $82 = ($81|0)==($71|0); if ($82) { HEAP32[$80>>2] = $69; HEAP32[$70>>2] = $73; $98 = $8; break; } else { _abort(); // unreachable; } } } while(0); $83 = $67 << 3; $84 = (($83) - ($6))|0; $85 = $6 | 3; $86 = ((($71)) + 4|0); HEAP32[$86>>2] = $85; $87 = (($71) + ($6)|0); $88 = $84 | 1; $89 = ((($87)) + 4|0); HEAP32[$89>>2] = $88; $90 = (($71) + ($83)|0); HEAP32[$90>>2] = $84; $91 = ($37|0)==(0); if (!($91)) { $92 = HEAP32[(21312)>>2]|0; $93 = $37 >>> 3; $94 = $93 << 1; $95 = (21332 + ($94<<2)|0); $96 = 1 << $93; $97 = $98 & $96; $99 = ($97|0)==(0); if ($99) { $100 = $98 | $96; HEAP32[5323] = $100; $$pre = ((($95)) + 8|0); $$0199 = $95;$$pre$phiZ2D = $$pre; } else { $101 = ((($95)) + 8|0); $102 = HEAP32[$101>>2]|0; $103 = HEAP32[(21308)>>2]|0; $104 = ($103>>>0)>($102>>>0); if ($104) { _abort(); // unreachable; } else { $$0199 = $102;$$pre$phiZ2D = $101; } } HEAP32[$$pre$phiZ2D>>2] = $92; $105 = ((($$0199)) + 12|0); HEAP32[$105>>2] = $92; $106 = ((($92)) + 8|0); HEAP32[$106>>2] = $$0199; $107 = ((($92)) + 12|0); HEAP32[$107>>2] = $95; } HEAP32[(21300)>>2] = $84; HEAP32[(21312)>>2] = $87; $$0 = $72; STACKTOP = sp;return ($$0|0); } $108 = HEAP32[(21296)>>2]|0; $109 = ($108|0)==(0); if ($109) { $$0197 = $6; } else { $110 = (0 - ($108))|0; $111 = $108 & $110; $112 = (($111) + -1)|0; $113 = $112 >>> 12; $114 = $113 & 16; $115 = $112 >>> $114; $116 = $115 >>> 5; $117 = $116 & 8; $118 = $117 | $114; $119 = $115 >>> $117; $120 = $119 >>> 2; $121 = $120 & 4; $122 = $118 | $121; $123 = $119 >>> $121; $124 = $123 >>> 1; $125 = $124 & 2; $126 = $122 | $125; $127 = $123 >>> $125; $128 = $127 >>> 1; $129 = $128 & 1; $130 = $126 | $129; $131 = $127 >>> $129; $132 = (($130) + ($131))|0; $133 = (21596 + ($132<<2)|0); $134 = HEAP32[$133>>2]|0; $135 = ((($134)) + 4|0); $136 = HEAP32[$135>>2]|0; $137 = $136 & -8; $138 = (($137) - ($6))|0; $$0189$i = $134;$$0190$i = $134;$$0191$i = $138; while(1) { $139 = ((($$0189$i)) + 16|0); $140 = HEAP32[$139>>2]|0; $141 = ($140|0)==(0|0); if ($141) { $142 = ((($$0189$i)) + 20|0); $143 = HEAP32[$142>>2]|0; $144 = ($143|0)==(0|0); if ($144) { break; } else { $146 = $143; } } else { $146 = $140; } $145 = ((($146)) + 4|0); $147 = HEAP32[$145>>2]|0; $148 = $147 & -8; $149 = (($148) - ($6))|0; $150 = ($149>>>0)<($$0191$i>>>0); $spec$select$i = $150 ? $149 : $$0191$i; $spec$select1$i = $150 ? $146 : $$0190$i; $$0189$i = $146;$$0190$i = $spec$select1$i;$$0191$i = $spec$select$i; } $151 = HEAP32[(21308)>>2]|0; $152 = ($151>>>0)>($$0190$i>>>0); if ($152) { _abort(); // unreachable; } $153 = (($$0190$i) + ($6)|0); $154 = ($153>>>0)>($$0190$i>>>0); if (!($154)) { _abort(); // unreachable; } $155 = ((($$0190$i)) + 24|0); $156 = HEAP32[$155>>2]|0; $157 = ((($$0190$i)) + 12|0); $158 = HEAP32[$157>>2]|0; $159 = ($158|0)==($$0190$i|0); do { if ($159) { $169 = ((($$0190$i)) + 20|0); $170 = HEAP32[$169>>2]|0; $171 = ($170|0)==(0|0); if ($171) { $172 = ((($$0190$i)) + 16|0); $173 = HEAP32[$172>>2]|0; $174 = ($173|0)==(0|0); if ($174) { $$3$i = 0; break; } else { $$1194$i$ph = $173;$$1196$i$ph = $172; } } else { $$1194$i$ph = $170;$$1196$i$ph = $169; } $$1194$i = $$1194$i$ph;$$1196$i = $$1196$i$ph; while(1) { $175 = ((($$1194$i)) + 20|0); $176 = HEAP32[$175>>2]|0; $177 = ($176|0)==(0|0); if ($177) { $178 = ((($$1194$i)) + 16|0); $179 = HEAP32[$178>>2]|0; $180 = ($179|0)==(0|0); if ($180) { break; } else { $$1194$i$be = $179;$$1196$i$be = $178; } } else { $$1194$i$be = $176;$$1196$i$be = $175; } $$1194$i = $$1194$i$be;$$1196$i = $$1196$i$be; } $181 = ($151>>>0)>($$1196$i>>>0); if ($181) { _abort(); // unreachable; } else { HEAP32[$$1196$i>>2] = 0; $$3$i = $$1194$i; break; } } else { $160 = ((($$0190$i)) + 8|0); $161 = HEAP32[$160>>2]|0; $162 = ($151>>>0)>($161>>>0); if ($162) { _abort(); // unreachable; } $163 = ((($161)) + 12|0); $164 = HEAP32[$163>>2]|0; $165 = ($164|0)==($$0190$i|0); if (!($165)) { _abort(); // unreachable; } $166 = ((($158)) + 8|0); $167 = HEAP32[$166>>2]|0; $168 = ($167|0)==($$0190$i|0); if ($168) { HEAP32[$163>>2] = $158; HEAP32[$166>>2] = $161; $$3$i = $158; break; } else { _abort(); // unreachable; } } } while(0); $182 = ($156|0)==(0|0); L78: do { if (!($182)) { $183 = ((($$0190$i)) + 28|0); $184 = HEAP32[$183>>2]|0; $185 = (21596 + ($184<<2)|0); $186 = HEAP32[$185>>2]|0; $187 = ($$0190$i|0)==($186|0); do { if ($187) { HEAP32[$185>>2] = $$3$i; $cond$i = ($$3$i|0)==(0|0); if ($cond$i) { $188 = 1 << $184; $189 = $188 ^ -1; $190 = $108 & $189; HEAP32[(21296)>>2] = $190; break L78; } } else { $191 = HEAP32[(21308)>>2]|0; $192 = ($191>>>0)>($156>>>0); if ($192) { _abort(); // unreachable; } else { $193 = ((($156)) + 16|0); $194 = HEAP32[$193>>2]|0; $195 = ($194|0)==($$0190$i|0); $196 = ((($156)) + 20|0); $$sink = $195 ? $193 : $196; HEAP32[$$sink>>2] = $$3$i; $197 = ($$3$i|0)==(0|0); if ($197) { break L78; } else { break; } } } } while(0); $198 = HEAP32[(21308)>>2]|0; $199 = ($198>>>0)>($$3$i>>>0); if ($199) { _abort(); // unreachable; } $200 = ((($$3$i)) + 24|0); HEAP32[$200>>2] = $156; $201 = ((($$0190$i)) + 16|0); $202 = HEAP32[$201>>2]|0; $203 = ($202|0)==(0|0); do { if (!($203)) { $204 = ($198>>>0)>($202>>>0); if ($204) { _abort(); // unreachable; } else { $205 = ((($$3$i)) + 16|0); HEAP32[$205>>2] = $202; $206 = ((($202)) + 24|0); HEAP32[$206>>2] = $$3$i; break; } } } while(0); $207 = ((($$0190$i)) + 20|0); $208 = HEAP32[$207>>2]|0; $209 = ($208|0)==(0|0); if (!($209)) { $210 = HEAP32[(21308)>>2]|0; $211 = ($210>>>0)>($208>>>0); if ($211) { _abort(); // unreachable; } else { $212 = ((($$3$i)) + 20|0); HEAP32[$212>>2] = $208; $213 = ((($208)) + 24|0); HEAP32[$213>>2] = $$3$i; break; } } } } while(0); $214 = ($$0191$i>>>0)<(16); if ($214) { $215 = (($$0191$i) + ($6))|0; $216 = $215 | 3; $217 = ((($$0190$i)) + 4|0); HEAP32[$217>>2] = $216; $218 = (($$0190$i) + ($215)|0); $219 = ((($218)) + 4|0); $220 = HEAP32[$219>>2]|0; $221 = $220 | 1; HEAP32[$219>>2] = $221; } else { $222 = $6 | 3; $223 = ((($$0190$i)) + 4|0); HEAP32[$223>>2] = $222; $224 = $$0191$i | 1; $225 = ((($153)) + 4|0); HEAP32[$225>>2] = $224; $226 = (($153) + ($$0191$i)|0); HEAP32[$226>>2] = $$0191$i; $227 = ($37|0)==(0); if (!($227)) { $228 = HEAP32[(21312)>>2]|0; $229 = $37 >>> 3; $230 = $229 << 1; $231 = (21332 + ($230<<2)|0); $232 = 1 << $229; $233 = $232 & $8; $234 = ($233|0)==(0); if ($234) { $235 = $232 | $8; HEAP32[5323] = $235; $$pre$i = ((($231)) + 8|0); $$0187$i = $231;$$pre$phi$iZ2D = $$pre$i; } else { $236 = ((($231)) + 8|0); $237 = HEAP32[$236>>2]|0; $238 = HEAP32[(21308)>>2]|0; $239 = ($238>>>0)>($237>>>0); if ($239) { _abort(); // unreachable; } else { $$0187$i = $237;$$pre$phi$iZ2D = $236; } } HEAP32[$$pre$phi$iZ2D>>2] = $228; $240 = ((($$0187$i)) + 12|0); HEAP32[$240>>2] = $228; $241 = ((($228)) + 8|0); HEAP32[$241>>2] = $$0187$i; $242 = ((($228)) + 12|0); HEAP32[$242>>2] = $231; } HEAP32[(21300)>>2] = $$0191$i; HEAP32[(21312)>>2] = $153; } $243 = ((($$0190$i)) + 8|0); $$0 = $243; STACKTOP = sp;return ($$0|0); } } else { $$0197 = $6; } } else { $244 = ($0>>>0)>(4294967231); if ($244) { $$0197 = -1; } else { $245 = (($0) + 11)|0; $246 = $245 & -8; $247 = HEAP32[(21296)>>2]|0; $248 = ($247|0)==(0); if ($248) { $$0197 = $246; } else { $249 = (0 - ($246))|0; $250 = $245 >>> 8; $251 = ($250|0)==(0); if ($251) { $$0357$i = 0; } else { $252 = ($246>>>0)>(16777215); if ($252) { $$0357$i = 31; } else { $253 = (($250) + 1048320)|0; $254 = $253 >>> 16; $255 = $254 & 8; $256 = $250 << $255; $257 = (($256) + 520192)|0; $258 = $257 >>> 16; $259 = $258 & 4; $260 = $259 | $255; $261 = $256 << $259; $262 = (($261) + 245760)|0; $263 = $262 >>> 16; $264 = $263 & 2; $265 = $260 | $264; $266 = (14 - ($265))|0; $267 = $261 << $264; $268 = $267 >>> 15; $269 = (($266) + ($268))|0; $270 = $269 << 1; $271 = (($269) + 7)|0; $272 = $246 >>> $271; $273 = $272 & 1; $274 = $273 | $270; $$0357$i = $274; } } $275 = (21596 + ($$0357$i<<2)|0); $276 = HEAP32[$275>>2]|0; $277 = ($276|0)==(0|0); L122: do { if ($277) { $$2353$i = 0;$$3$i203 = 0;$$3348$i = $249; label = 85; } else { $278 = ($$0357$i|0)==(31); $279 = $$0357$i >>> 1; $280 = (25 - ($279))|0; $281 = $278 ? 0 : $280; $282 = $246 << $281; $$0340$i = 0;$$0345$i = $249;$$0351$i = $276;$$0358$i = $282;$$0361$i = 0; while(1) { $283 = ((($$0351$i)) + 4|0); $284 = HEAP32[$283>>2]|0; $285 = $284 & -8; $286 = (($285) - ($246))|0; $287 = ($286>>>0)<($$0345$i>>>0); if ($287) { $288 = ($286|0)==(0); if ($288) { $$420$i$ph = $$0351$i;$$434919$i$ph = 0;$$535618$i$ph = $$0351$i; label = 89; break L122; } else { $$1341$i = $$0351$i;$$1346$i = $286; } } else { $$1341$i = $$0340$i;$$1346$i = $$0345$i; } $289 = ((($$0351$i)) + 20|0); $290 = HEAP32[$289>>2]|0; $291 = $$0358$i >>> 31; $292 = (((($$0351$i)) + 16|0) + ($291<<2)|0); $293 = HEAP32[$292>>2]|0; $294 = ($290|0)==(0|0); $295 = ($290|0)==($293|0); $or$cond2$i = $294 | $295; $$1362$i = $or$cond2$i ? $$0361$i : $290; $296 = ($293|0)==(0|0); $spec$select7$i = $$0358$i << 1; if ($296) { $$2353$i = $$1362$i;$$3$i203 = $$1341$i;$$3348$i = $$1346$i; label = 85; break; } else { $$0340$i = $$1341$i;$$0345$i = $$1346$i;$$0351$i = $293;$$0358$i = $spec$select7$i;$$0361$i = $$1362$i; } } } } while(0); if ((label|0) == 85) { $297 = ($$2353$i|0)==(0|0); $298 = ($$3$i203|0)==(0|0); $or$cond$i = $297 & $298; if ($or$cond$i) { $299 = 2 << $$0357$i; $300 = (0 - ($299))|0; $301 = $299 | $300; $302 = $301 & $247; $303 = ($302|0)==(0); if ($303) { $$0197 = $246; break; } $304 = (0 - ($302))|0; $305 = $302 & $304; $306 = (($305) + -1)|0; $307 = $306 >>> 12; $308 = $307 & 16; $309 = $306 >>> $308; $310 = $309 >>> 5; $311 = $310 & 8; $312 = $311 | $308; $313 = $309 >>> $311; $314 = $313 >>> 2; $315 = $314 & 4; $316 = $312 | $315; $317 = $313 >>> $315; $318 = $317 >>> 1; $319 = $318 & 2; $320 = $316 | $319; $321 = $317 >>> $319; $322 = $321 >>> 1; $323 = $322 & 1; $324 = $320 | $323; $325 = $321 >>> $323; $326 = (($324) + ($325))|0; $327 = (21596 + ($326<<2)|0); $328 = HEAP32[$327>>2]|0; $$3$i203218 = 0;$$4355$i = $328; } else { $$3$i203218 = $$3$i203;$$4355$i = $$2353$i; } $329 = ($$4355$i|0)==(0|0); if ($329) { $$4$lcssa$i = $$3$i203218;$$4349$lcssa$i = $$3348$i; } else { $$420$i$ph = $$3$i203218;$$434919$i$ph = $$3348$i;$$535618$i$ph = $$4355$i; label = 89; } } if ((label|0) == 89) { $$420$i = $$420$i$ph;$$434919$i = $$434919$i$ph;$$535618$i = $$535618$i$ph; while(1) { $330 = ((($$535618$i)) + 4|0); $331 = HEAP32[$330>>2]|0; $332 = $331 & -8; $333 = (($332) - ($246))|0; $334 = ($333>>>0)<($$434919$i>>>0); $spec$select$i205 = $334 ? $333 : $$434919$i; $spec$select3$i = $334 ? $$535618$i : $$420$i; $335 = ((($$535618$i)) + 16|0); $336 = HEAP32[$335>>2]|0; $337 = ($336|0)==(0|0); if ($337) { $338 = ((($$535618$i)) + 20|0); $339 = HEAP32[$338>>2]|0; $341 = $339; } else { $341 = $336; } $340 = ($341|0)==(0|0); if ($340) { $$4$lcssa$i = $spec$select3$i;$$4349$lcssa$i = $spec$select$i205; break; } else { $$420$i = $spec$select3$i;$$434919$i = $spec$select$i205;$$535618$i = $341; } } } $342 = ($$4$lcssa$i|0)==(0|0); if ($342) { $$0197 = $246; } else { $343 = HEAP32[(21300)>>2]|0; $344 = (($343) - ($246))|0; $345 = ($$4349$lcssa$i>>>0)<($344>>>0); if ($345) { $346 = HEAP32[(21308)>>2]|0; $347 = ($346>>>0)>($$4$lcssa$i>>>0); if ($347) { _abort(); // unreachable; } $348 = (($$4$lcssa$i) + ($246)|0); $349 = ($348>>>0)>($$4$lcssa$i>>>0); if (!($349)) { _abort(); // unreachable; } $350 = ((($$4$lcssa$i)) + 24|0); $351 = HEAP32[$350>>2]|0; $352 = ((($$4$lcssa$i)) + 12|0); $353 = HEAP32[$352>>2]|0; $354 = ($353|0)==($$4$lcssa$i|0); do { if ($354) { $364 = ((($$4$lcssa$i)) + 20|0); $365 = HEAP32[$364>>2]|0; $366 = ($365|0)==(0|0); if ($366) { $367 = ((($$4$lcssa$i)) + 16|0); $368 = HEAP32[$367>>2]|0; $369 = ($368|0)==(0|0); if ($369) { $$3371$i = 0; break; } else { $$1369$i$ph = $368;$$1373$i$ph = $367; } } else { $$1369$i$ph = $365;$$1373$i$ph = $364; } $$1369$i = $$1369$i$ph;$$1373$i = $$1373$i$ph; while(1) { $370 = ((($$1369$i)) + 20|0); $371 = HEAP32[$370>>2]|0; $372 = ($371|0)==(0|0); if ($372) { $373 = ((($$1369$i)) + 16|0); $374 = HEAP32[$373>>2]|0; $375 = ($374|0)==(0|0); if ($375) { break; } else { $$1369$i$be = $374;$$1373$i$be = $373; } } else { $$1369$i$be = $371;$$1373$i$be = $370; } $$1369$i = $$1369$i$be;$$1373$i = $$1373$i$be; } $376 = ($346>>>0)>($$1373$i>>>0); if ($376) { _abort(); // unreachable; } else { HEAP32[$$1373$i>>2] = 0; $$3371$i = $$1369$i; break; } } else { $355 = ((($$4$lcssa$i)) + 8|0); $356 = HEAP32[$355>>2]|0; $357 = ($346>>>0)>($356>>>0); if ($357) { _abort(); // unreachable; } $358 = ((($356)) + 12|0); $359 = HEAP32[$358>>2]|0; $360 = ($359|0)==($$4$lcssa$i|0); if (!($360)) { _abort(); // unreachable; } $361 = ((($353)) + 8|0); $362 = HEAP32[$361>>2]|0; $363 = ($362|0)==($$4$lcssa$i|0); if ($363) { HEAP32[$358>>2] = $353; HEAP32[$361>>2] = $356; $$3371$i = $353; break; } else { _abort(); // unreachable; } } } while(0); $377 = ($351|0)==(0|0); L176: do { if ($377) { $469 = $247; } else { $378 = ((($$4$lcssa$i)) + 28|0); $379 = HEAP32[$378>>2]|0; $380 = (21596 + ($379<<2)|0); $381 = HEAP32[$380>>2]|0; $382 = ($$4$lcssa$i|0)==($381|0); do { if ($382) { HEAP32[$380>>2] = $$3371$i; $cond$i207 = ($$3371$i|0)==(0|0); if ($cond$i207) { $383 = 1 << $379; $384 = $383 ^ -1; $385 = $247 & $384; HEAP32[(21296)>>2] = $385; $469 = $385; break L176; } } else { $386 = HEAP32[(21308)>>2]|0; $387 = ($386>>>0)>($351>>>0); if ($387) { _abort(); // unreachable; } else { $388 = ((($351)) + 16|0); $389 = HEAP32[$388>>2]|0; $390 = ($389|0)==($$4$lcssa$i|0); $391 = ((($351)) + 20|0); $$sink325 = $390 ? $388 : $391; HEAP32[$$sink325>>2] = $$3371$i; $392 = ($$3371$i|0)==(0|0); if ($392) { $469 = $247; break L176; } else { break; } } } } while(0); $393 = HEAP32[(21308)>>2]|0; $394 = ($393>>>0)>($$3371$i>>>0); if ($394) { _abort(); // unreachable; } $395 = ((($$3371$i)) + 24|0); HEAP32[$395>>2] = $351; $396 = ((($$4$lcssa$i)) + 16|0); $397 = HEAP32[$396>>2]|0; $398 = ($397|0)==(0|0); do { if (!($398)) { $399 = ($393>>>0)>($397>>>0); if ($399) { _abort(); // unreachable; } else { $400 = ((($$3371$i)) + 16|0); HEAP32[$400>>2] = $397; $401 = ((($397)) + 24|0); HEAP32[$401>>2] = $$3371$i; break; } } } while(0); $402 = ((($$4$lcssa$i)) + 20|0); $403 = HEAP32[$402>>2]|0; $404 = ($403|0)==(0|0); if ($404) { $469 = $247; } else { $405 = HEAP32[(21308)>>2]|0; $406 = ($405>>>0)>($403>>>0); if ($406) { _abort(); // unreachable; } else { $407 = ((($$3371$i)) + 20|0); HEAP32[$407>>2] = $403; $408 = ((($403)) + 24|0); HEAP32[$408>>2] = $$3371$i; $469 = $247; break; } } } } while(0); $409 = ($$4349$lcssa$i>>>0)<(16); L200: do { if ($409) { $410 = (($$4349$lcssa$i) + ($246))|0; $411 = $410 | 3; $412 = ((($$4$lcssa$i)) + 4|0); HEAP32[$412>>2] = $411; $413 = (($$4$lcssa$i) + ($410)|0); $414 = ((($413)) + 4|0); $415 = HEAP32[$414>>2]|0; $416 = $415 | 1; HEAP32[$414>>2] = $416; } else { $417 = $246 | 3; $418 = ((($$4$lcssa$i)) + 4|0); HEAP32[$418>>2] = $417; $419 = $$4349$lcssa$i | 1; $420 = ((($348)) + 4|0); HEAP32[$420>>2] = $419; $421 = (($348) + ($$4349$lcssa$i)|0); HEAP32[$421>>2] = $$4349$lcssa$i; $422 = $$4349$lcssa$i >>> 3; $423 = ($$4349$lcssa$i>>>0)<(256); if ($423) { $424 = $422 << 1; $425 = (21332 + ($424<<2)|0); $426 = HEAP32[5323]|0; $427 = 1 << $422; $428 = $426 & $427; $429 = ($428|0)==(0); if ($429) { $430 = $426 | $427; HEAP32[5323] = $430; $$pre$i208 = ((($425)) + 8|0); $$0367$i = $425;$$pre$phi$i209Z2D = $$pre$i208; } else { $431 = ((($425)) + 8|0); $432 = HEAP32[$431>>2]|0; $433 = HEAP32[(21308)>>2]|0; $434 = ($433>>>0)>($432>>>0); if ($434) { _abort(); // unreachable; } else { $$0367$i = $432;$$pre$phi$i209Z2D = $431; } } HEAP32[$$pre$phi$i209Z2D>>2] = $348; $435 = ((($$0367$i)) + 12|0); HEAP32[$435>>2] = $348; $436 = ((($348)) + 8|0); HEAP32[$436>>2] = $$0367$i; $437 = ((($348)) + 12|0); HEAP32[$437>>2] = $425; break; } $438 = $$4349$lcssa$i >>> 8; $439 = ($438|0)==(0); if ($439) { $$0360$i = 0; } else { $440 = ($$4349$lcssa$i>>>0)>(16777215); if ($440) { $$0360$i = 31; } else { $441 = (($438) + 1048320)|0; $442 = $441 >>> 16; $443 = $442 & 8; $444 = $438 << $443; $445 = (($444) + 520192)|0; $446 = $445 >>> 16; $447 = $446 & 4; $448 = $447 | $443; $449 = $444 << $447; $450 = (($449) + 245760)|0; $451 = $450 >>> 16; $452 = $451 & 2; $453 = $448 | $452; $454 = (14 - ($453))|0; $455 = $449 << $452; $456 = $455 >>> 15; $457 = (($454) + ($456))|0; $458 = $457 << 1; $459 = (($457) + 7)|0; $460 = $$4349$lcssa$i >>> $459; $461 = $460 & 1; $462 = $461 | $458; $$0360$i = $462; } } $463 = (21596 + ($$0360$i<<2)|0); $464 = ((($348)) + 28|0); HEAP32[$464>>2] = $$0360$i; $465 = ((($348)) + 16|0); $466 = ((($465)) + 4|0); HEAP32[$466>>2] = 0; HEAP32[$465>>2] = 0; $467 = 1 << $$0360$i; $468 = $469 & $467; $470 = ($468|0)==(0); if ($470) { $471 = $469 | $467; HEAP32[(21296)>>2] = $471; HEAP32[$463>>2] = $348; $472 = ((($348)) + 24|0); HEAP32[$472>>2] = $463; $473 = ((($348)) + 12|0); HEAP32[$473>>2] = $348; $474 = ((($348)) + 8|0); HEAP32[$474>>2] = $348; break; } $475 = HEAP32[$463>>2]|0; $476 = ((($475)) + 4|0); $477 = HEAP32[$476>>2]|0; $478 = $477 & -8; $479 = ($478|0)==($$4349$lcssa$i|0); L218: do { if ($479) { $$0343$lcssa$i = $475; } else { $480 = ($$0360$i|0)==(31); $481 = $$0360$i >>> 1; $482 = (25 - ($481))|0; $483 = $480 ? 0 : $482; $484 = $$4349$lcssa$i << $483; $$034217$i = $484;$$034316$i = $475; while(1) { $491 = $$034217$i >>> 31; $492 = (((($$034316$i)) + 16|0) + ($491<<2)|0); $487 = HEAP32[$492>>2]|0; $493 = ($487|0)==(0|0); if ($493) { break; } $485 = $$034217$i << 1; $486 = ((($487)) + 4|0); $488 = HEAP32[$486>>2]|0; $489 = $488 & -8; $490 = ($489|0)==($$4349$lcssa$i|0); if ($490) { $$0343$lcssa$i = $487; break L218; } else { $$034217$i = $485;$$034316$i = $487; } } $494 = HEAP32[(21308)>>2]|0; $495 = ($494>>>0)>($492>>>0); if ($495) { _abort(); // unreachable; } else { HEAP32[$492>>2] = $348; $496 = ((($348)) + 24|0); HEAP32[$496>>2] = $$034316$i; $497 = ((($348)) + 12|0); HEAP32[$497>>2] = $348; $498 = ((($348)) + 8|0); HEAP32[$498>>2] = $348; break L200; } } } while(0); $499 = ((($$0343$lcssa$i)) + 8|0); $500 = HEAP32[$499>>2]|0; $501 = HEAP32[(21308)>>2]|0; $502 = ($501>>>0)<=($$0343$lcssa$i>>>0); $503 = ($501>>>0)<=($500>>>0); $504 = $503 & $502; if ($504) { $505 = ((($500)) + 12|0); HEAP32[$505>>2] = $348; HEAP32[$499>>2] = $348; $506 = ((($348)) + 8|0); HEAP32[$506>>2] = $500; $507 = ((($348)) + 12|0); HEAP32[$507>>2] = $$0343$lcssa$i; $508 = ((($348)) + 24|0); HEAP32[$508>>2] = 0; break; } else { _abort(); // unreachable; } } } while(0); $509 = ((($$4$lcssa$i)) + 8|0); $$0 = $509; STACKTOP = sp;return ($$0|0); } else { $$0197 = $246; } } } } } } while(0); $510 = HEAP32[(21300)>>2]|0; $511 = ($510>>>0)<($$0197>>>0); if (!($511)) { $512 = (($510) - ($$0197))|0; $513 = HEAP32[(21312)>>2]|0; $514 = ($512>>>0)>(15); if ($514) { $515 = (($513) + ($$0197)|0); HEAP32[(21312)>>2] = $515; HEAP32[(21300)>>2] = $512; $516 = $512 | 1; $517 = ((($515)) + 4|0); HEAP32[$517>>2] = $516; $518 = (($513) + ($510)|0); HEAP32[$518>>2] = $512; $519 = $$0197 | 3; $520 = ((($513)) + 4|0); HEAP32[$520>>2] = $519; } else { HEAP32[(21300)>>2] = 0; HEAP32[(21312)>>2] = 0; $521 = $510 | 3; $522 = ((($513)) + 4|0); HEAP32[$522>>2] = $521; $523 = (($513) + ($510)|0); $524 = ((($523)) + 4|0); $525 = HEAP32[$524>>2]|0; $526 = $525 | 1; HEAP32[$524>>2] = $526; } $527 = ((($513)) + 8|0); $$0 = $527; STACKTOP = sp;return ($$0|0); } $528 = HEAP32[(21304)>>2]|0; $529 = ($528>>>0)>($$0197>>>0); if ($529) { $530 = (($528) - ($$0197))|0; HEAP32[(21304)>>2] = $530; $531 = HEAP32[(21316)>>2]|0; $532 = (($531) + ($$0197)|0); HEAP32[(21316)>>2] = $532; $533 = $530 | 1; $534 = ((($532)) + 4|0); HEAP32[$534>>2] = $533; $535 = $$0197 | 3; $536 = ((($531)) + 4|0); HEAP32[$536>>2] = $535; $537 = ((($531)) + 8|0); $$0 = $537; STACKTOP = sp;return ($$0|0); } $538 = HEAP32[5441]|0; $539 = ($538|0)==(0); if ($539) { HEAP32[(21772)>>2] = 4096; HEAP32[(21768)>>2] = 4096; HEAP32[(21776)>>2] = -1; HEAP32[(21780)>>2] = -1; HEAP32[(21784)>>2] = 0; HEAP32[(21736)>>2] = 0; $540 = $1; $541 = $540 & -16; $542 = $541 ^ 1431655768; HEAP32[5441] = $542; $546 = 4096; } else { $$pre$i210 = HEAP32[(21772)>>2]|0; $546 = $$pre$i210; } $543 = (($$0197) + 48)|0; $544 = (($$0197) + 47)|0; $545 = (($546) + ($544))|0; $547 = (0 - ($546))|0; $548 = $545 & $547; $549 = ($548>>>0)>($$0197>>>0); if (!($549)) { $$0 = 0; STACKTOP = sp;return ($$0|0); } $550 = HEAP32[(21732)>>2]|0; $551 = ($550|0)==(0); if (!($551)) { $552 = HEAP32[(21724)>>2]|0; $553 = (($552) + ($548))|0; $554 = ($553>>>0)<=($552>>>0); $555 = ($553>>>0)>($550>>>0); $or$cond1$i = $554 | $555; if ($or$cond1$i) { $$0 = 0; STACKTOP = sp;return ($$0|0); } } $556 = HEAP32[(21736)>>2]|0; $557 = $556 & 4; $558 = ($557|0)==(0); L257: do { if ($558) { $559 = HEAP32[(21316)>>2]|0; $560 = ($559|0)==(0|0); L259: do { if ($560) { label = 173; } else { $$0$i$i = (21740); while(1) { $561 = HEAP32[$$0$i$i>>2]|0; $562 = ($561>>>0)>($559>>>0); if (!($562)) { $563 = ((($$0$i$i)) + 4|0); $564 = HEAP32[$563>>2]|0; $565 = (($561) + ($564)|0); $566 = ($565>>>0)>($559>>>0); if ($566) { break; } } $567 = ((($$0$i$i)) + 8|0); $568 = HEAP32[$567>>2]|0; $569 = ($568|0)==(0|0); if ($569) { label = 173; break L259; } else { $$0$i$i = $568; } } $592 = (($545) - ($528))|0; $593 = $592 & $547; $594 = ($593>>>0)<(2147483647); if ($594) { $595 = ((($$0$i$i)) + 4|0); $596 = (_sbrk(($593|0))|0); $597 = HEAP32[$$0$i$i>>2]|0; $598 = HEAP32[$595>>2]|0; $599 = (($597) + ($598)|0); $600 = ($596|0)==($599|0); if ($600) { $601 = ($596|0)==((-1)|0); if ($601) { $$2234243136$i = $593; } else { $$723947$i = $593;$$748$i = $596; label = 190; break L257; } } else { $$2247$ph$i = $596;$$2253$ph$i = $593; label = 181; } } else { $$2234243136$i = 0; } } } while(0); do { if ((label|0) == 173) { $570 = (_sbrk(0)|0); $571 = ($570|0)==((-1)|0); if ($571) { $$2234243136$i = 0; } else { $572 = $570; $573 = HEAP32[(21768)>>2]|0; $574 = (($573) + -1)|0; $575 = $574 & $572; $576 = ($575|0)==(0); $577 = (($574) + ($572))|0; $578 = (0 - ($573))|0; $579 = $577 & $578; $580 = (($579) - ($572))|0; $581 = $576 ? 0 : $580; $spec$select49$i = (($581) + ($548))|0; $582 = HEAP32[(21724)>>2]|0; $583 = (($spec$select49$i) + ($582))|0; $584 = ($spec$select49$i>>>0)>($$0197>>>0); $585 = ($spec$select49$i>>>0)<(2147483647); $or$cond$i213 = $584 & $585; if ($or$cond$i213) { $586 = HEAP32[(21732)>>2]|0; $587 = ($586|0)==(0); if (!($587)) { $588 = ($583>>>0)<=($582>>>0); $589 = ($583>>>0)>($586>>>0); $or$cond2$i214 = $588 | $589; if ($or$cond2$i214) { $$2234243136$i = 0; break; } } $590 = (_sbrk(($spec$select49$i|0))|0); $591 = ($590|0)==($570|0); if ($591) { $$723947$i = $spec$select49$i;$$748$i = $570; label = 190; break L257; } else { $$2247$ph$i = $590;$$2253$ph$i = $spec$select49$i; label = 181; } } else { $$2234243136$i = 0; } } } } while(0); do { if ((label|0) == 181) { $602 = (0 - ($$2253$ph$i))|0; $603 = ($$2247$ph$i|0)!=((-1)|0); $604 = ($$2253$ph$i>>>0)<(2147483647); $or$cond7$i = $604 & $603; $605 = ($543>>>0)>($$2253$ph$i>>>0); $or$cond6$i = $605 & $or$cond7$i; if (!($or$cond6$i)) { $615 = ($$2247$ph$i|0)==((-1)|0); if ($615) { $$2234243136$i = 0; break; } else { $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i; label = 190; break L257; } } $606 = HEAP32[(21772)>>2]|0; $607 = (($544) - ($$2253$ph$i))|0; $608 = (($607) + ($606))|0; $609 = (0 - ($606))|0; $610 = $608 & $609; $611 = ($610>>>0)<(2147483647); if (!($611)) { $$723947$i = $$2253$ph$i;$$748$i = $$2247$ph$i; label = 190; break L257; } $612 = (_sbrk(($610|0))|0); $613 = ($612|0)==((-1)|0); if ($613) { (_sbrk(($602|0))|0); $$2234243136$i = 0; break; } else { $614 = (($610) + ($$2253$ph$i))|0; $$723947$i = $614;$$748$i = $$2247$ph$i; label = 190; break L257; } } } while(0); $616 = HEAP32[(21736)>>2]|0; $617 = $616 | 4; HEAP32[(21736)>>2] = $617; $$4236$i = $$2234243136$i; label = 188; } else { $$4236$i = 0; label = 188; } } while(0); if ((label|0) == 188) { $618 = ($548>>>0)<(2147483647); if ($618) { $619 = (_sbrk(($548|0))|0); $620 = (_sbrk(0)|0); $621 = ($619|0)!=((-1)|0); $622 = ($620|0)!=((-1)|0); $or$cond5$i = $621 & $622; $623 = ($619>>>0)<($620>>>0); $or$cond8$i = $623 & $or$cond5$i; $624 = $620; $625 = $619; $626 = (($624) - ($625))|0; $627 = (($$0197) + 40)|0; $628 = ($626>>>0)>($627>>>0); $spec$select9$i = $628 ? $626 : $$4236$i; $or$cond8$not$i = $or$cond8$i ^ 1; $629 = ($619|0)==((-1)|0); $not$$i = $628 ^ 1; $630 = $629 | $not$$i; $or$cond50$i = $630 | $or$cond8$not$i; if (!($or$cond50$i)) { $$723947$i = $spec$select9$i;$$748$i = $619; label = 190; } } } if ((label|0) == 190) { $631 = HEAP32[(21724)>>2]|0; $632 = (($631) + ($$723947$i))|0; HEAP32[(21724)>>2] = $632; $633 = HEAP32[(21728)>>2]|0; $634 = ($632>>>0)>($633>>>0); if ($634) { HEAP32[(21728)>>2] = $632; } $635 = HEAP32[(21316)>>2]|0; $636 = ($635|0)==(0|0); L294: do { if ($636) { $637 = HEAP32[(21308)>>2]|0; $638 = ($637|0)==(0|0); $639 = ($$748$i>>>0)<($637>>>0); $or$cond11$i = $638 | $639; if ($or$cond11$i) { HEAP32[(21308)>>2] = $$748$i; } HEAP32[(21740)>>2] = $$748$i; HEAP32[(21744)>>2] = $$723947$i; HEAP32[(21752)>>2] = 0; $640 = HEAP32[5441]|0; HEAP32[(21328)>>2] = $640; HEAP32[(21324)>>2] = -1; HEAP32[(21344)>>2] = (21332); HEAP32[(21340)>>2] = (21332); HEAP32[(21352)>>2] = (21340); HEAP32[(21348)>>2] = (21340); HEAP32[(21360)>>2] = (21348); HEAP32[(21356)>>2] = (21348); HEAP32[(21368)>>2] = (21356); HEAP32[(21364)>>2] = (21356); HEAP32[(21376)>>2] = (21364); HEAP32[(21372)>>2] = (21364); HEAP32[(21384)>>2] = (21372); HEAP32[(21380)>>2] = (21372); HEAP32[(21392)>>2] = (21380); HEAP32[(21388)>>2] = (21380); HEAP32[(21400)>>2] = (21388); HEAP32[(21396)>>2] = (21388); HEAP32[(21408)>>2] = (21396); HEAP32[(21404)>>2] = (21396); HEAP32[(21416)>>2] = (21404); HEAP32[(21412)>>2] = (21404); HEAP32[(21424)>>2] = (21412); HEAP32[(21420)>>2] = (21412); HEAP32[(21432)>>2] = (21420); HEAP32[(21428)>>2] = (21420); HEAP32[(21440)>>2] = (21428); HEAP32[(21436)>>2] = (21428); HEAP32[(21448)>>2] = (21436); HEAP32[(21444)>>2] = (21436); HEAP32[(21456)>>2] = (21444); HEAP32[(21452)>>2] = (21444); HEAP32[(21464)>>2] = (21452); HEAP32[(21460)>>2] = (21452); HEAP32[(21472)>>2] = (21460); HEAP32[(21468)>>2] = (21460); HEAP32[(21480)>>2] = (21468); HEAP32[(21476)>>2] = (21468); HEAP32[(21488)>>2] = (21476); HEAP32[(21484)>>2] = (21476); HEAP32[(21496)>>2] = (21484); HEAP32[(21492)>>2] = (21484); HEAP32[(21504)>>2] = (21492); HEAP32[(21500)>>2] = (21492); HEAP32[(21512)>>2] = (21500); HEAP32[(21508)>>2] = (21500); HEAP32[(21520)>>2] = (21508); HEAP32[(21516)>>2] = (21508); HEAP32[(21528)>>2] = (21516); HEAP32[(21524)>>2] = (21516); HEAP32[(21536)>>2] = (21524); HEAP32[(21532)>>2] = (21524); HEAP32[(21544)>>2] = (21532); HEAP32[(21540)>>2] = (21532); HEAP32[(21552)>>2] = (21540); HEAP32[(21548)>>2] = (21540); HEAP32[(21560)>>2] = (21548); HEAP32[(21556)>>2] = (21548); HEAP32[(21568)>>2] = (21556); HEAP32[(21564)>>2] = (21556); HEAP32[(21576)>>2] = (21564); HEAP32[(21572)>>2] = (21564); HEAP32[(21584)>>2] = (21572); HEAP32[(21580)>>2] = (21572); HEAP32[(21592)>>2] = (21580); HEAP32[(21588)>>2] = (21580); $641 = (($$723947$i) + -40)|0; $642 = ((($$748$i)) + 8|0); $643 = $642; $644 = $643 & 7; $645 = ($644|0)==(0); $646 = (0 - ($643))|0; $647 = $646 & 7; $648 = $645 ? 0 : $647; $649 = (($$748$i) + ($648)|0); $650 = (($641) - ($648))|0; HEAP32[(21316)>>2] = $649; HEAP32[(21304)>>2] = $650; $651 = $650 | 1; $652 = ((($649)) + 4|0); HEAP32[$652>>2] = $651; $653 = (($$748$i) + ($641)|0); $654 = ((($653)) + 4|0); HEAP32[$654>>2] = 40; $655 = HEAP32[(21780)>>2]|0; HEAP32[(21320)>>2] = $655; } else { $$024372$i = (21740); while(1) { $656 = HEAP32[$$024372$i>>2]|0; $657 = ((($$024372$i)) + 4|0); $658 = HEAP32[$657>>2]|0; $659 = (($656) + ($658)|0); $660 = ($$748$i|0)==($659|0); if ($660) { label = 199; break; } $661 = ((($$024372$i)) + 8|0); $662 = HEAP32[$661>>2]|0; $663 = ($662|0)==(0|0); if ($663) { break; } else { $$024372$i = $662; } } if ((label|0) == 199) { $664 = ((($$024372$i)) + 4|0); $665 = ((($$024372$i)) + 12|0); $666 = HEAP32[$665>>2]|0; $667 = $666 & 8; $668 = ($667|0)==(0); if ($668) { $669 = ($656>>>0)<=($635>>>0); $670 = ($$748$i>>>0)>($635>>>0); $or$cond51$i = $670 & $669; if ($or$cond51$i) { $671 = (($658) + ($$723947$i))|0; HEAP32[$664>>2] = $671; $672 = HEAP32[(21304)>>2]|0; $673 = (($672) + ($$723947$i))|0; $674 = ((($635)) + 8|0); $675 = $674; $676 = $675 & 7; $677 = ($676|0)==(0); $678 = (0 - ($675))|0; $679 = $678 & 7; $680 = $677 ? 0 : $679; $681 = (($635) + ($680)|0); $682 = (($673) - ($680))|0; HEAP32[(21316)>>2] = $681; HEAP32[(21304)>>2] = $682; $683 = $682 | 1; $684 = ((($681)) + 4|0); HEAP32[$684>>2] = $683; $685 = (($635) + ($673)|0); $686 = ((($685)) + 4|0); HEAP32[$686>>2] = 40; $687 = HEAP32[(21780)>>2]|0; HEAP32[(21320)>>2] = $687; break; } } } $688 = HEAP32[(21308)>>2]|0; $689 = ($$748$i>>>0)<($688>>>0); if ($689) { HEAP32[(21308)>>2] = $$748$i; $753 = $$748$i; } else { $753 = $688; } $690 = (($$748$i) + ($$723947$i)|0); $$124471$i = (21740); while(1) { $691 = HEAP32[$$124471$i>>2]|0; $692 = ($691|0)==($690|0); if ($692) { label = 207; break; } $693 = ((($$124471$i)) + 8|0); $694 = HEAP32[$693>>2]|0; $695 = ($694|0)==(0|0); if ($695) { break; } else { $$124471$i = $694; } } if ((label|0) == 207) { $696 = ((($$124471$i)) + 12|0); $697 = HEAP32[$696>>2]|0; $698 = $697 & 8; $699 = ($698|0)==(0); if ($699) { HEAP32[$$124471$i>>2] = $$748$i; $700 = ((($$124471$i)) + 4|0); $701 = HEAP32[$700>>2]|0; $702 = (($701) + ($$723947$i))|0; HEAP32[$700>>2] = $702; $703 = ((($$748$i)) + 8|0); $704 = $703; $705 = $704 & 7; $706 = ($705|0)==(0); $707 = (0 - ($704))|0; $708 = $707 & 7; $709 = $706 ? 0 : $708; $710 = (($$748$i) + ($709)|0); $711 = ((($690)) + 8|0); $712 = $711; $713 = $712 & 7; $714 = ($713|0)==(0); $715 = (0 - ($712))|0; $716 = $715 & 7; $717 = $714 ? 0 : $716; $718 = (($690) + ($717)|0); $719 = $718; $720 = $710; $721 = (($719) - ($720))|0; $722 = (($710) + ($$0197)|0); $723 = (($721) - ($$0197))|0; $724 = $$0197 | 3; $725 = ((($710)) + 4|0); HEAP32[$725>>2] = $724; $726 = ($635|0)==($718|0); L317: do { if ($726) { $727 = HEAP32[(21304)>>2]|0; $728 = (($727) + ($723))|0; HEAP32[(21304)>>2] = $728; HEAP32[(21316)>>2] = $722; $729 = $728 | 1; $730 = ((($722)) + 4|0); HEAP32[$730>>2] = $729; } else { $731 = HEAP32[(21312)>>2]|0; $732 = ($731|0)==($718|0); if ($732) { $733 = HEAP32[(21300)>>2]|0; $734 = (($733) + ($723))|0; HEAP32[(21300)>>2] = $734; HEAP32[(21312)>>2] = $722; $735 = $734 | 1; $736 = ((($722)) + 4|0); HEAP32[$736>>2] = $735; $737 = (($722) + ($734)|0); HEAP32[$737>>2] = $734; break; } $738 = ((($718)) + 4|0); $739 = HEAP32[$738>>2]|0; $740 = $739 & 3; $741 = ($740|0)==(1); if ($741) { $742 = $739 & -8; $743 = $739 >>> 3; $744 = ($739>>>0)<(256); L325: do { if ($744) { $745 = ((($718)) + 8|0); $746 = HEAP32[$745>>2]|0; $747 = ((($718)) + 12|0); $748 = HEAP32[$747>>2]|0; $749 = $743 << 1; $750 = (21332 + ($749<<2)|0); $751 = ($746|0)==($750|0); do { if (!($751)) { $752 = ($753>>>0)>($746>>>0); if ($752) { _abort(); // unreachable; } $754 = ((($746)) + 12|0); $755 = HEAP32[$754>>2]|0; $756 = ($755|0)==($718|0); if ($756) { break; } _abort(); // unreachable; } } while(0); $757 = ($748|0)==($746|0); if ($757) { $758 = 1 << $743; $759 = $758 ^ -1; $760 = HEAP32[5323]|0; $761 = $760 & $759; HEAP32[5323] = $761; break; } $762 = ($748|0)==($750|0); do { if ($762) { $$pre16$i$i = ((($748)) + 8|0); $$pre$phi17$i$iZ2D = $$pre16$i$i; } else { $763 = ($753>>>0)>($748>>>0); if ($763) { _abort(); // unreachable; } $764 = ((($748)) + 8|0); $765 = HEAP32[$764>>2]|0; $766 = ($765|0)==($718|0); if ($766) { $$pre$phi17$i$iZ2D = $764; break; } _abort(); // unreachable; } } while(0); $767 = ((($746)) + 12|0); HEAP32[$767>>2] = $748; HEAP32[$$pre$phi17$i$iZ2D>>2] = $746; } else { $768 = ((($718)) + 24|0); $769 = HEAP32[$768>>2]|0; $770 = ((($718)) + 12|0); $771 = HEAP32[$770>>2]|0; $772 = ($771|0)==($718|0); do { if ($772) { $782 = ((($718)) + 16|0); $783 = ((($782)) + 4|0); $784 = HEAP32[$783>>2]|0; $785 = ($784|0)==(0|0); if ($785) { $786 = HEAP32[$782>>2]|0; $787 = ($786|0)==(0|0); if ($787) { $$3$i$i = 0; break; } else { $$1290$i$i$ph = $786;$$1292$i$i$ph = $782; } } else { $$1290$i$i$ph = $784;$$1292$i$i$ph = $783; } $$1290$i$i = $$1290$i$i$ph;$$1292$i$i = $$1292$i$i$ph; while(1) { $788 = ((($$1290$i$i)) + 20|0); $789 = HEAP32[$788>>2]|0; $790 = ($789|0)==(0|0); if ($790) { $791 = ((($$1290$i$i)) + 16|0); $792 = HEAP32[$791>>2]|0; $793 = ($792|0)==(0|0); if ($793) { break; } else { $$1290$i$i$be = $792;$$1292$i$i$be = $791; } } else { $$1290$i$i$be = $789;$$1292$i$i$be = $788; } $$1290$i$i = $$1290$i$i$be;$$1292$i$i = $$1292$i$i$be; } $794 = ($753>>>0)>($$1292$i$i>>>0); if ($794) { _abort(); // unreachable; } else { HEAP32[$$1292$i$i>>2] = 0; $$3$i$i = $$1290$i$i; break; } } else { $773 = ((($718)) + 8|0); $774 = HEAP32[$773>>2]|0; $775 = ($753>>>0)>($774>>>0); if ($775) { _abort(); // unreachable; } $776 = ((($774)) + 12|0); $777 = HEAP32[$776>>2]|0; $778 = ($777|0)==($718|0); if (!($778)) { _abort(); // unreachable; } $779 = ((($771)) + 8|0); $780 = HEAP32[$779>>2]|0; $781 = ($780|0)==($718|0); if ($781) { HEAP32[$776>>2] = $771; HEAP32[$779>>2] = $774; $$3$i$i = $771; break; } else { _abort(); // unreachable; } } } while(0); $795 = ($769|0)==(0|0); if ($795) { break; } $796 = ((($718)) + 28|0); $797 = HEAP32[$796>>2]|0; $798 = (21596 + ($797<<2)|0); $799 = HEAP32[$798>>2]|0; $800 = ($799|0)==($718|0); do { if ($800) { HEAP32[$798>>2] = $$3$i$i; $cond$i$i = ($$3$i$i|0)==(0|0); if (!($cond$i$i)) { break; } $801 = 1 << $797; $802 = $801 ^ -1; $803 = HEAP32[(21296)>>2]|0; $804 = $803 & $802; HEAP32[(21296)>>2] = $804; break L325; } else { $805 = HEAP32[(21308)>>2]|0; $806 = ($805>>>0)>($769>>>0); if ($806) { _abort(); // unreachable; } else { $807 = ((($769)) + 16|0); $808 = HEAP32[$807>>2]|0; $809 = ($808|0)==($718|0); $810 = ((($769)) + 20|0); $$sink326 = $809 ? $807 : $810; HEAP32[$$sink326>>2] = $$3$i$i; $811 = ($$3$i$i|0)==(0|0); if ($811) { break L325; } else { break; } } } } while(0); $812 = HEAP32[(21308)>>2]|0; $813 = ($812>>>0)>($$3$i$i>>>0); if ($813) { _abort(); // unreachable; } $814 = ((($$3$i$i)) + 24|0); HEAP32[$814>>2] = $769; $815 = ((($718)) + 16|0); $816 = HEAP32[$815>>2]|0; $817 = ($816|0)==(0|0); do { if (!($817)) { $818 = ($812>>>0)>($816>>>0); if ($818) { _abort(); // unreachable; } else { $819 = ((($$3$i$i)) + 16|0); HEAP32[$819>>2] = $816; $820 = ((($816)) + 24|0); HEAP32[$820>>2] = $$3$i$i; break; } } } while(0); $821 = ((($815)) + 4|0); $822 = HEAP32[$821>>2]|0; $823 = ($822|0)==(0|0); if ($823) { break; } $824 = HEAP32[(21308)>>2]|0; $825 = ($824>>>0)>($822>>>0); if ($825) { _abort(); // unreachable; } else { $826 = ((($$3$i$i)) + 20|0); HEAP32[$826>>2] = $822; $827 = ((($822)) + 24|0); HEAP32[$827>>2] = $$3$i$i; break; } } } while(0); $828 = (($718) + ($742)|0); $829 = (($742) + ($723))|0; $$0$i16$i = $828;$$0286$i$i = $829; } else { $$0$i16$i = $718;$$0286$i$i = $723; } $830 = ((($$0$i16$i)) + 4|0); $831 = HEAP32[$830>>2]|0; $832 = $831 & -2; HEAP32[$830>>2] = $832; $833 = $$0286$i$i | 1; $834 = ((($722)) + 4|0); HEAP32[$834>>2] = $833; $835 = (($722) + ($$0286$i$i)|0); HEAP32[$835>>2] = $$0286$i$i; $836 = $$0286$i$i >>> 3; $837 = ($$0286$i$i>>>0)<(256); if ($837) { $838 = $836 << 1; $839 = (21332 + ($838<<2)|0); $840 = HEAP32[5323]|0; $841 = 1 << $836; $842 = $840 & $841; $843 = ($842|0)==(0); do { if ($843) { $844 = $840 | $841; HEAP32[5323] = $844; $$pre$i17$i = ((($839)) + 8|0); $$0294$i$i = $839;$$pre$phi$i18$iZ2D = $$pre$i17$i; } else { $845 = ((($839)) + 8|0); $846 = HEAP32[$845>>2]|0; $847 = HEAP32[(21308)>>2]|0; $848 = ($847>>>0)>($846>>>0); if (!($848)) { $$0294$i$i = $846;$$pre$phi$i18$iZ2D = $845; break; } _abort(); // unreachable; } } while(0); HEAP32[$$pre$phi$i18$iZ2D>>2] = $722; $849 = ((($$0294$i$i)) + 12|0); HEAP32[$849>>2] = $722; $850 = ((($722)) + 8|0); HEAP32[$850>>2] = $$0294$i$i; $851 = ((($722)) + 12|0); HEAP32[$851>>2] = $839; break; } $852 = $$0286$i$i >>> 8; $853 = ($852|0)==(0); do { if ($853) { $$0295$i$i = 0; } else { $854 = ($$0286$i$i>>>0)>(16777215); if ($854) { $$0295$i$i = 31; break; } $855 = (($852) + 1048320)|0; $856 = $855 >>> 16; $857 = $856 & 8; $858 = $852 << $857; $859 = (($858) + 520192)|0; $860 = $859 >>> 16; $861 = $860 & 4; $862 = $861 | $857; $863 = $858 << $861; $864 = (($863) + 245760)|0; $865 = $864 >>> 16; $866 = $865 & 2; $867 = $862 | $866; $868 = (14 - ($867))|0; $869 = $863 << $866; $870 = $869 >>> 15; $871 = (($868) + ($870))|0; $872 = $871 << 1; $873 = (($871) + 7)|0; $874 = $$0286$i$i >>> $873; $875 = $874 & 1; $876 = $875 | $872; $$0295$i$i = $876; } } while(0); $877 = (21596 + ($$0295$i$i<<2)|0); $878 = ((($722)) + 28|0); HEAP32[$878>>2] = $$0295$i$i; $879 = ((($722)) + 16|0); $880 = ((($879)) + 4|0); HEAP32[$880>>2] = 0; HEAP32[$879>>2] = 0; $881 = HEAP32[(21296)>>2]|0; $882 = 1 << $$0295$i$i; $883 = $881 & $882; $884 = ($883|0)==(0); if ($884) { $885 = $881 | $882; HEAP32[(21296)>>2] = $885; HEAP32[$877>>2] = $722; $886 = ((($722)) + 24|0); HEAP32[$886>>2] = $877; $887 = ((($722)) + 12|0); HEAP32[$887>>2] = $722; $888 = ((($722)) + 8|0); HEAP32[$888>>2] = $722; break; } $889 = HEAP32[$877>>2]|0; $890 = ((($889)) + 4|0); $891 = HEAP32[$890>>2]|0; $892 = $891 & -8; $893 = ($892|0)==($$0286$i$i|0); L410: do { if ($893) { $$0288$lcssa$i$i = $889; } else { $894 = ($$0295$i$i|0)==(31); $895 = $$0295$i$i >>> 1; $896 = (25 - ($895))|0; $897 = $894 ? 0 : $896; $898 = $$0286$i$i << $897; $$028711$i$i = $898;$$028810$i$i = $889; while(1) { $905 = $$028711$i$i >>> 31; $906 = (((($$028810$i$i)) + 16|0) + ($905<<2)|0); $901 = HEAP32[$906>>2]|0; $907 = ($901|0)==(0|0); if ($907) { break; } $899 = $$028711$i$i << 1; $900 = ((($901)) + 4|0); $902 = HEAP32[$900>>2]|0; $903 = $902 & -8; $904 = ($903|0)==($$0286$i$i|0); if ($904) { $$0288$lcssa$i$i = $901; break L410; } else { $$028711$i$i = $899;$$028810$i$i = $901; } } $908 = HEAP32[(21308)>>2]|0; $909 = ($908>>>0)>($906>>>0); if ($909) { _abort(); // unreachable; } else { HEAP32[$906>>2] = $722; $910 = ((($722)) + 24|0); HEAP32[$910>>2] = $$028810$i$i; $911 = ((($722)) + 12|0); HEAP32[$911>>2] = $722; $912 = ((($722)) + 8|0); HEAP32[$912>>2] = $722; break L317; } } } while(0); $913 = ((($$0288$lcssa$i$i)) + 8|0); $914 = HEAP32[$913>>2]|0; $915 = HEAP32[(21308)>>2]|0; $916 = ($915>>>0)<=($$0288$lcssa$i$i>>>0); $917 = ($915>>>0)<=($914>>>0); $918 = $917 & $916; if ($918) { $919 = ((($914)) + 12|0); HEAP32[$919>>2] = $722; HEAP32[$913>>2] = $722; $920 = ((($722)) + 8|0); HEAP32[$920>>2] = $914; $921 = ((($722)) + 12|0); HEAP32[$921>>2] = $$0288$lcssa$i$i; $922 = ((($722)) + 24|0); HEAP32[$922>>2] = 0; break; } else { _abort(); // unreachable; } } } while(0); $1059 = ((($710)) + 8|0); $$0 = $1059; STACKTOP = sp;return ($$0|0); } } $$0$i$i$i = (21740); while(1) { $923 = HEAP32[$$0$i$i$i>>2]|0; $924 = ($923>>>0)>($635>>>0); if (!($924)) { $925 = ((($$0$i$i$i)) + 4|0); $926 = HEAP32[$925>>2]|0; $927 = (($923) + ($926)|0); $928 = ($927>>>0)>($635>>>0); if ($928) { break; } } $929 = ((($$0$i$i$i)) + 8|0); $930 = HEAP32[$929>>2]|0; $$0$i$i$i = $930; } $931 = ((($927)) + -47|0); $932 = ((($931)) + 8|0); $933 = $932; $934 = $933 & 7; $935 = ($934|0)==(0); $936 = (0 - ($933))|0; $937 = $936 & 7; $938 = $935 ? 0 : $937; $939 = (($931) + ($938)|0); $940 = ((($635)) + 16|0); $941 = ($939>>>0)<($940>>>0); $942 = $941 ? $635 : $939; $943 = ((($942)) + 8|0); $944 = ((($942)) + 24|0); $945 = (($$723947$i) + -40)|0; $946 = ((($$748$i)) + 8|0); $947 = $946; $948 = $947 & 7; $949 = ($948|0)==(0); $950 = (0 - ($947))|0; $951 = $950 & 7; $952 = $949 ? 0 : $951; $953 = (($$748$i) + ($952)|0); $954 = (($945) - ($952))|0; HEAP32[(21316)>>2] = $953; HEAP32[(21304)>>2] = $954; $955 = $954 | 1; $956 = ((($953)) + 4|0); HEAP32[$956>>2] = $955; $957 = (($$748$i) + ($945)|0); $958 = ((($957)) + 4|0); HEAP32[$958>>2] = 40; $959 = HEAP32[(21780)>>2]|0; HEAP32[(21320)>>2] = $959; $960 = ((($942)) + 4|0); HEAP32[$960>>2] = 27; ;HEAP32[$943>>2]=HEAP32[(21740)>>2]|0;HEAP32[$943+4>>2]=HEAP32[(21740)+4>>2]|0;HEAP32[$943+8>>2]=HEAP32[(21740)+8>>2]|0;HEAP32[$943+12>>2]=HEAP32[(21740)+12>>2]|0; HEAP32[(21740)>>2] = $$748$i; HEAP32[(21744)>>2] = $$723947$i; HEAP32[(21752)>>2] = 0; HEAP32[(21748)>>2] = $943; $962 = $944; while(1) { $961 = ((($962)) + 4|0); HEAP32[$961>>2] = 7; $963 = ((($962)) + 8|0); $964 = ($963>>>0)<($927>>>0); if ($964) { $962 = $961; } else { break; } } $965 = ($942|0)==($635|0); if (!($965)) { $966 = $942; $967 = $635; $968 = (($966) - ($967))|0; $969 = HEAP32[$960>>2]|0; $970 = $969 & -2; HEAP32[$960>>2] = $970; $971 = $968 | 1; $972 = ((($635)) + 4|0); HEAP32[$972>>2] = $971; HEAP32[$942>>2] = $968; $973 = $968 >>> 3; $974 = ($968>>>0)<(256); if ($974) { $975 = $973 << 1; $976 = (21332 + ($975<<2)|0); $977 = HEAP32[5323]|0; $978 = 1 << $973; $979 = $977 & $978; $980 = ($979|0)==(0); if ($980) { $981 = $977 | $978; HEAP32[5323] = $981; $$pre$i$i = ((($976)) + 8|0); $$0211$i$i = $976;$$pre$phi$i$iZ2D = $$pre$i$i; } else { $982 = ((($976)) + 8|0); $983 = HEAP32[$982>>2]|0; $984 = HEAP32[(21308)>>2]|0; $985 = ($984>>>0)>($983>>>0); if ($985) { _abort(); // unreachable; } else { $$0211$i$i = $983;$$pre$phi$i$iZ2D = $982; } } HEAP32[$$pre$phi$i$iZ2D>>2] = $635; $986 = ((($$0211$i$i)) + 12|0); HEAP32[$986>>2] = $635; $987 = ((($635)) + 8|0); HEAP32[$987>>2] = $$0211$i$i; $988 = ((($635)) + 12|0); HEAP32[$988>>2] = $976; break; } $989 = $968 >>> 8; $990 = ($989|0)==(0); if ($990) { $$0212$i$i = 0; } else { $991 = ($968>>>0)>(16777215); if ($991) { $$0212$i$i = 31; } else { $992 = (($989) + 1048320)|0; $993 = $992 >>> 16; $994 = $993 & 8; $995 = $989 << $994; $996 = (($995) + 520192)|0; $997 = $996 >>> 16; $998 = $997 & 4; $999 = $998 | $994; $1000 = $995 << $998; $1001 = (($1000) + 245760)|0; $1002 = $1001 >>> 16; $1003 = $1002 & 2; $1004 = $999 | $1003; $1005 = (14 - ($1004))|0; $1006 = $1000 << $1003; $1007 = $1006 >>> 15; $1008 = (($1005) + ($1007))|0; $1009 = $1008 << 1; $1010 = (($1008) + 7)|0; $1011 = $968 >>> $1010; $1012 = $1011 & 1; $1013 = $1012 | $1009; $$0212$i$i = $1013; } } $1014 = (21596 + ($$0212$i$i<<2)|0); $1015 = ((($635)) + 28|0); HEAP32[$1015>>2] = $$0212$i$i; $1016 = ((($635)) + 20|0); HEAP32[$1016>>2] = 0; HEAP32[$940>>2] = 0; $1017 = HEAP32[(21296)>>2]|0; $1018 = 1 << $$0212$i$i; $1019 = $1017 & $1018; $1020 = ($1019|0)==(0); if ($1020) { $1021 = $1017 | $1018; HEAP32[(21296)>>2] = $1021; HEAP32[$1014>>2] = $635; $1022 = ((($635)) + 24|0); HEAP32[$1022>>2] = $1014; $1023 = ((($635)) + 12|0); HEAP32[$1023>>2] = $635; $1024 = ((($635)) + 8|0); HEAP32[$1024>>2] = $635; break; } $1025 = HEAP32[$1014>>2]|0; $1026 = ((($1025)) + 4|0); $1027 = HEAP32[$1026>>2]|0; $1028 = $1027 & -8; $1029 = ($1028|0)==($968|0); L451: do { if ($1029) { $$0207$lcssa$i$i = $1025; } else { $1030 = ($$0212$i$i|0)==(31); $1031 = $$0212$i$i >>> 1; $1032 = (25 - ($1031))|0; $1033 = $1030 ? 0 : $1032; $1034 = $968 << $1033; $$02065$i$i = $1034;$$02074$i$i = $1025; while(1) { $1041 = $$02065$i$i >>> 31; $1042 = (((($$02074$i$i)) + 16|0) + ($1041<<2)|0); $1037 = HEAP32[$1042>>2]|0; $1043 = ($1037|0)==(0|0); if ($1043) { break; } $1035 = $$02065$i$i << 1; $1036 = ((($1037)) + 4|0); $1038 = HEAP32[$1036>>2]|0; $1039 = $1038 & -8; $1040 = ($1039|0)==($968|0); if ($1040) { $$0207$lcssa$i$i = $1037; break L451; } else { $$02065$i$i = $1035;$$02074$i$i = $1037; } } $1044 = HEAP32[(21308)>>2]|0; $1045 = ($1044>>>0)>($1042>>>0); if ($1045) { _abort(); // unreachable; } else { HEAP32[$1042>>2] = $635; $1046 = ((($635)) + 24|0); HEAP32[$1046>>2] = $$02074$i$i; $1047 = ((($635)) + 12|0); HEAP32[$1047>>2] = $635; $1048 = ((($635)) + 8|0); HEAP32[$1048>>2] = $635; break L294; } } } while(0); $1049 = ((($$0207$lcssa$i$i)) + 8|0); $1050 = HEAP32[$1049>>2]|0; $1051 = HEAP32[(21308)>>2]|0; $1052 = ($1051>>>0)<=($$0207$lcssa$i$i>>>0); $1053 = ($1051>>>0)<=($1050>>>0); $1054 = $1053 & $1052; if ($1054) { $1055 = ((($1050)) + 12|0); HEAP32[$1055>>2] = $635; HEAP32[$1049>>2] = $635; $1056 = ((($635)) + 8|0); HEAP32[$1056>>2] = $1050; $1057 = ((($635)) + 12|0); HEAP32[$1057>>2] = $$0207$lcssa$i$i; $1058 = ((($635)) + 24|0); HEAP32[$1058>>2] = 0; break; } else { _abort(); // unreachable; } } } } while(0); $1060 = HEAP32[(21304)>>2]|0; $1061 = ($1060>>>0)>($$0197>>>0); if ($1061) { $1062 = (($1060) - ($$0197))|0; HEAP32[(21304)>>2] = $1062; $1063 = HEAP32[(21316)>>2]|0; $1064 = (($1063) + ($$0197)|0); HEAP32[(21316)>>2] = $1064; $1065 = $1062 | 1; $1066 = ((($1064)) + 4|0); HEAP32[$1066>>2] = $1065; $1067 = $$0197 | 3; $1068 = ((($1063)) + 4|0); HEAP32[$1068>>2] = $1067; $1069 = ((($1063)) + 8|0); $$0 = $1069; STACKTOP = sp;return ($$0|0); } } $1070 = (___errno_location()|0); HEAP32[$1070>>2] = 12; $$0 = 0; STACKTOP = sp;return ($$0|0); } function _free($0) { $0 = $0|0; var $$0211$i = 0, $$0211$in$i = 0, $$0381438 = 0, $$0382$lcssa = 0, $$0382437 = 0, $$0394 = 0, $$0401 = 0, $$1 = 0, $$1380 = 0, $$1385 = 0, $$1385$be = 0, $$1385$ph = 0, $$1388 = 0, $$1388$be = 0, $$1388$ph = 0, $$1396 = 0, $$1396$be = 0, $$1396$ph = 0, $$1400 = 0, $$1400$be = 0; var $$1400$ph = 0, $$2 = 0, $$3 = 0, $$3398 = 0, $$pre = 0, $$pre$phi444Z2D = 0, $$pre$phi446Z2D = 0, $$pre$phiZ2D = 0, $$pre443 = 0, $$pre445 = 0, $$sink = 0, $$sink456 = 0, $1 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0; var $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0; var $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0; var $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0; var $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0; var $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0; var $197 = 0, $198 = 0, $199 = 0, $2 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0; var $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0; var $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0; var $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0; var $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0; var $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $3 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0; var $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0; var $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0; var $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0; var $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $cond419 = 0, $cond420 = 0; var label = 0, sp = 0; sp = STACKTOP; $1 = ($0|0)==(0|0); if ($1) { return; } $2 = ((($0)) + -8|0); $3 = HEAP32[(21308)>>2]|0; $4 = ($2>>>0)<($3>>>0); if ($4) { _abort(); // unreachable; } $5 = ((($0)) + -4|0); $6 = HEAP32[$5>>2]|0; $7 = $6 & 3; $8 = ($7|0)==(1); if ($8) { _abort(); // unreachable; } $9 = $6 & -8; $10 = (($2) + ($9)|0); $11 = $6 & 1; $12 = ($11|0)==(0); L10: do { if ($12) { $13 = HEAP32[$2>>2]|0; $14 = ($7|0)==(0); if ($14) { return; } $15 = (0 - ($13))|0; $16 = (($2) + ($15)|0); $17 = (($13) + ($9))|0; $18 = ($16>>>0)<($3>>>0); if ($18) { _abort(); // unreachable; } $19 = HEAP32[(21312)>>2]|0; $20 = ($19|0)==($16|0); if ($20) { $105 = ((($10)) + 4|0); $106 = HEAP32[$105>>2]|0; $107 = $106 & 3; $108 = ($107|0)==(3); if (!($108)) { $$1 = $16;$$1380 = $17;$114 = $16; break; } $109 = (($16) + ($17)|0); $110 = ((($16)) + 4|0); $111 = $17 | 1; $112 = $106 & -2; HEAP32[(21300)>>2] = $17; HEAP32[$105>>2] = $112; HEAP32[$110>>2] = $111; HEAP32[$109>>2] = $17; return; } $21 = $13 >>> 3; $22 = ($13>>>0)<(256); if ($22) { $23 = ((($16)) + 8|0); $24 = HEAP32[$23>>2]|0; $25 = ((($16)) + 12|0); $26 = HEAP32[$25>>2]|0; $27 = $21 << 1; $28 = (21332 + ($27<<2)|0); $29 = ($24|0)==($28|0); if (!($29)) { $30 = ($3>>>0)>($24>>>0); if ($30) { _abort(); // unreachable; } $31 = ((($24)) + 12|0); $32 = HEAP32[$31>>2]|0; $33 = ($32|0)==($16|0); if (!($33)) { _abort(); // unreachable; } } $34 = ($26|0)==($24|0); if ($34) { $35 = 1 << $21; $36 = $35 ^ -1; $37 = HEAP32[5323]|0; $38 = $37 & $36; HEAP32[5323] = $38; $$1 = $16;$$1380 = $17;$114 = $16; break; } $39 = ($26|0)==($28|0); if ($39) { $$pre445 = ((($26)) + 8|0); $$pre$phi446Z2D = $$pre445; } else { $40 = ($3>>>0)>($26>>>0); if ($40) { _abort(); // unreachable; } $41 = ((($26)) + 8|0); $42 = HEAP32[$41>>2]|0; $43 = ($42|0)==($16|0); if ($43) { $$pre$phi446Z2D = $41; } else { _abort(); // unreachable; } } $44 = ((($24)) + 12|0); HEAP32[$44>>2] = $26; HEAP32[$$pre$phi446Z2D>>2] = $24; $$1 = $16;$$1380 = $17;$114 = $16; break; } $45 = ((($16)) + 24|0); $46 = HEAP32[$45>>2]|0; $47 = ((($16)) + 12|0); $48 = HEAP32[$47>>2]|0; $49 = ($48|0)==($16|0); do { if ($49) { $59 = ((($16)) + 16|0); $60 = ((($59)) + 4|0); $61 = HEAP32[$60>>2]|0; $62 = ($61|0)==(0|0); if ($62) { $63 = HEAP32[$59>>2]|0; $64 = ($63|0)==(0|0); if ($64) { $$3 = 0; break; } else { $$1385$ph = $63;$$1388$ph = $59; } } else { $$1385$ph = $61;$$1388$ph = $60; } $$1385 = $$1385$ph;$$1388 = $$1388$ph; while(1) { $65 = ((($$1385)) + 20|0); $66 = HEAP32[$65>>2]|0; $67 = ($66|0)==(0|0); if ($67) { $68 = ((($$1385)) + 16|0); $69 = HEAP32[$68>>2]|0; $70 = ($69|0)==(0|0); if ($70) { break; } else { $$1385$be = $69;$$1388$be = $68; } } else { $$1385$be = $66;$$1388$be = $65; } $$1385 = $$1385$be;$$1388 = $$1388$be; } $71 = ($3>>>0)>($$1388>>>0); if ($71) { _abort(); // unreachable; } else { HEAP32[$$1388>>2] = 0; $$3 = $$1385; break; } } else { $50 = ((($16)) + 8|0); $51 = HEAP32[$50>>2]|0; $52 = ($3>>>0)>($51>>>0); if ($52) { _abort(); // unreachable; } $53 = ((($51)) + 12|0); $54 = HEAP32[$53>>2]|0; $55 = ($54|0)==($16|0); if (!($55)) { _abort(); // unreachable; } $56 = ((($48)) + 8|0); $57 = HEAP32[$56>>2]|0; $58 = ($57|0)==($16|0); if ($58) { HEAP32[$53>>2] = $48; HEAP32[$56>>2] = $51; $$3 = $48; break; } else { _abort(); // unreachable; } } } while(0); $72 = ($46|0)==(0|0); if ($72) { $$1 = $16;$$1380 = $17;$114 = $16; } else { $73 = ((($16)) + 28|0); $74 = HEAP32[$73>>2]|0; $75 = (21596 + ($74<<2)|0); $76 = HEAP32[$75>>2]|0; $77 = ($76|0)==($16|0); do { if ($77) { HEAP32[$75>>2] = $$3; $cond419 = ($$3|0)==(0|0); if ($cond419) { $78 = 1 << $74; $79 = $78 ^ -1; $80 = HEAP32[(21296)>>2]|0; $81 = $80 & $79; HEAP32[(21296)>>2] = $81; $$1 = $16;$$1380 = $17;$114 = $16; break L10; } } else { $82 = HEAP32[(21308)>>2]|0; $83 = ($82>>>0)>($46>>>0); if ($83) { _abort(); // unreachable; } else { $84 = ((($46)) + 16|0); $85 = HEAP32[$84>>2]|0; $86 = ($85|0)==($16|0); $87 = ((($46)) + 20|0); $$sink = $86 ? $84 : $87; HEAP32[$$sink>>2] = $$3; $88 = ($$3|0)==(0|0); if ($88) { $$1 = $16;$$1380 = $17;$114 = $16; break L10; } else { break; } } } } while(0); $89 = HEAP32[(21308)>>2]|0; $90 = ($89>>>0)>($$3>>>0); if ($90) { _abort(); // unreachable; } $91 = ((($$3)) + 24|0); HEAP32[$91>>2] = $46; $92 = ((($16)) + 16|0); $93 = HEAP32[$92>>2]|0; $94 = ($93|0)==(0|0); do { if (!($94)) { $95 = ($89>>>0)>($93>>>0); if ($95) { _abort(); // unreachable; } else { $96 = ((($$3)) + 16|0); HEAP32[$96>>2] = $93; $97 = ((($93)) + 24|0); HEAP32[$97>>2] = $$3; break; } } } while(0); $98 = ((($92)) + 4|0); $99 = HEAP32[$98>>2]|0; $100 = ($99|0)==(0|0); if ($100) { $$1 = $16;$$1380 = $17;$114 = $16; } else { $101 = HEAP32[(21308)>>2]|0; $102 = ($101>>>0)>($99>>>0); if ($102) { _abort(); // unreachable; } else { $103 = ((($$3)) + 20|0); HEAP32[$103>>2] = $99; $104 = ((($99)) + 24|0); HEAP32[$104>>2] = $$3; $$1 = $16;$$1380 = $17;$114 = $16; break; } } } } else { $$1 = $2;$$1380 = $9;$114 = $2; } } while(0); $113 = ($114>>>0)<($10>>>0); if (!($113)) { _abort(); // unreachable; } $115 = ((($10)) + 4|0); $116 = HEAP32[$115>>2]|0; $117 = $116 & 1; $118 = ($117|0)==(0); if ($118) { _abort(); // unreachable; } $119 = $116 & 2; $120 = ($119|0)==(0); if ($120) { $121 = HEAP32[(21316)>>2]|0; $122 = ($121|0)==($10|0); if ($122) { $123 = HEAP32[(21304)>>2]|0; $124 = (($123) + ($$1380))|0; HEAP32[(21304)>>2] = $124; HEAP32[(21316)>>2] = $$1; $125 = $124 | 1; $126 = ((($$1)) + 4|0); HEAP32[$126>>2] = $125; $127 = HEAP32[(21312)>>2]|0; $128 = ($$1|0)==($127|0); if (!($128)) { return; } HEAP32[(21312)>>2] = 0; HEAP32[(21300)>>2] = 0; return; } $129 = HEAP32[(21312)>>2]|0; $130 = ($129|0)==($10|0); if ($130) { $131 = HEAP32[(21300)>>2]|0; $132 = (($131) + ($$1380))|0; HEAP32[(21300)>>2] = $132; HEAP32[(21312)>>2] = $114; $133 = $132 | 1; $134 = ((($$1)) + 4|0); HEAP32[$134>>2] = $133; $135 = (($114) + ($132)|0); HEAP32[$135>>2] = $132; return; } $136 = $116 & -8; $137 = (($136) + ($$1380))|0; $138 = $116 >>> 3; $139 = ($116>>>0)<(256); L111: do { if ($139) { $140 = ((($10)) + 8|0); $141 = HEAP32[$140>>2]|0; $142 = ((($10)) + 12|0); $143 = HEAP32[$142>>2]|0; $144 = $138 << 1; $145 = (21332 + ($144<<2)|0); $146 = ($141|0)==($145|0); if (!($146)) { $147 = HEAP32[(21308)>>2]|0; $148 = ($147>>>0)>($141>>>0); if ($148) { _abort(); // unreachable; } $149 = ((($141)) + 12|0); $150 = HEAP32[$149>>2]|0; $151 = ($150|0)==($10|0); if (!($151)) { _abort(); // unreachable; } } $152 = ($143|0)==($141|0); if ($152) { $153 = 1 << $138; $154 = $153 ^ -1; $155 = HEAP32[5323]|0; $156 = $155 & $154; HEAP32[5323] = $156; break; } $157 = ($143|0)==($145|0); if ($157) { $$pre443 = ((($143)) + 8|0); $$pre$phi444Z2D = $$pre443; } else { $158 = HEAP32[(21308)>>2]|0; $159 = ($158>>>0)>($143>>>0); if ($159) { _abort(); // unreachable; } $160 = ((($143)) + 8|0); $161 = HEAP32[$160>>2]|0; $162 = ($161|0)==($10|0); if ($162) { $$pre$phi444Z2D = $160; } else { _abort(); // unreachable; } } $163 = ((($141)) + 12|0); HEAP32[$163>>2] = $143; HEAP32[$$pre$phi444Z2D>>2] = $141; } else { $164 = ((($10)) + 24|0); $165 = HEAP32[$164>>2]|0; $166 = ((($10)) + 12|0); $167 = HEAP32[$166>>2]|0; $168 = ($167|0)==($10|0); do { if ($168) { $179 = ((($10)) + 16|0); $180 = ((($179)) + 4|0); $181 = HEAP32[$180>>2]|0; $182 = ($181|0)==(0|0); if ($182) { $183 = HEAP32[$179>>2]|0; $184 = ($183|0)==(0|0); if ($184) { $$3398 = 0; break; } else { $$1396$ph = $183;$$1400$ph = $179; } } else { $$1396$ph = $181;$$1400$ph = $180; } $$1396 = $$1396$ph;$$1400 = $$1400$ph; while(1) { $185 = ((($$1396)) + 20|0); $186 = HEAP32[$185>>2]|0; $187 = ($186|0)==(0|0); if ($187) { $188 = ((($$1396)) + 16|0); $189 = HEAP32[$188>>2]|0; $190 = ($189|0)==(0|0); if ($190) { break; } else { $$1396$be = $189;$$1400$be = $188; } } else { $$1396$be = $186;$$1400$be = $185; } $$1396 = $$1396$be;$$1400 = $$1400$be; } $191 = HEAP32[(21308)>>2]|0; $192 = ($191>>>0)>($$1400>>>0); if ($192) { _abort(); // unreachable; } else { HEAP32[$$1400>>2] = 0; $$3398 = $$1396; break; } } else { $169 = ((($10)) + 8|0); $170 = HEAP32[$169>>2]|0; $171 = HEAP32[(21308)>>2]|0; $172 = ($171>>>0)>($170>>>0); if ($172) { _abort(); // unreachable; } $173 = ((($170)) + 12|0); $174 = HEAP32[$173>>2]|0; $175 = ($174|0)==($10|0); if (!($175)) { _abort(); // unreachable; } $176 = ((($167)) + 8|0); $177 = HEAP32[$176>>2]|0; $178 = ($177|0)==($10|0); if ($178) { HEAP32[$173>>2] = $167; HEAP32[$176>>2] = $170; $$3398 = $167; break; } else { _abort(); // unreachable; } } } while(0); $193 = ($165|0)==(0|0); if (!($193)) { $194 = ((($10)) + 28|0); $195 = HEAP32[$194>>2]|0; $196 = (21596 + ($195<<2)|0); $197 = HEAP32[$196>>2]|0; $198 = ($197|0)==($10|0); do { if ($198) { HEAP32[$196>>2] = $$3398; $cond420 = ($$3398|0)==(0|0); if ($cond420) { $199 = 1 << $195; $200 = $199 ^ -1; $201 = HEAP32[(21296)>>2]|0; $202 = $201 & $200; HEAP32[(21296)>>2] = $202; break L111; } } else { $203 = HEAP32[(21308)>>2]|0; $204 = ($203>>>0)>($165>>>0); if ($204) { _abort(); // unreachable; } else { $205 = ((($165)) + 16|0); $206 = HEAP32[$205>>2]|0; $207 = ($206|0)==($10|0); $208 = ((($165)) + 20|0); $$sink456 = $207 ? $205 : $208; HEAP32[$$sink456>>2] = $$3398; $209 = ($$3398|0)==(0|0); if ($209) { break L111; } else { break; } } } } while(0); $210 = HEAP32[(21308)>>2]|0; $211 = ($210>>>0)>($$3398>>>0); if ($211) { _abort(); // unreachable; } $212 = ((($$3398)) + 24|0); HEAP32[$212>>2] = $165; $213 = ((($10)) + 16|0); $214 = HEAP32[$213>>2]|0; $215 = ($214|0)==(0|0); do { if (!($215)) { $216 = ($210>>>0)>($214>>>0); if ($216) { _abort(); // unreachable; } else { $217 = ((($$3398)) + 16|0); HEAP32[$217>>2] = $214; $218 = ((($214)) + 24|0); HEAP32[$218>>2] = $$3398; break; } } } while(0); $219 = ((($213)) + 4|0); $220 = HEAP32[$219>>2]|0; $221 = ($220|0)==(0|0); if (!($221)) { $222 = HEAP32[(21308)>>2]|0; $223 = ($222>>>0)>($220>>>0); if ($223) { _abort(); // unreachable; } else { $224 = ((($$3398)) + 20|0); HEAP32[$224>>2] = $220; $225 = ((($220)) + 24|0); HEAP32[$225>>2] = $$3398; break; } } } } } while(0); $226 = $137 | 1; $227 = ((($$1)) + 4|0); HEAP32[$227>>2] = $226; $228 = (($114) + ($137)|0); HEAP32[$228>>2] = $137; $229 = HEAP32[(21312)>>2]|0; $230 = ($$1|0)==($229|0); if ($230) { HEAP32[(21300)>>2] = $137; return; } else { $$2 = $137; } } else { $231 = $116 & -2; HEAP32[$115>>2] = $231; $232 = $$1380 | 1; $233 = ((($$1)) + 4|0); HEAP32[$233>>2] = $232; $234 = (($114) + ($$1380)|0); HEAP32[$234>>2] = $$1380; $$2 = $$1380; } $235 = $$2 >>> 3; $236 = ($$2>>>0)<(256); if ($236) { $237 = $235 << 1; $238 = (21332 + ($237<<2)|0); $239 = HEAP32[5323]|0; $240 = 1 << $235; $241 = $239 & $240; $242 = ($241|0)==(0); if ($242) { $243 = $239 | $240; HEAP32[5323] = $243; $$pre = ((($238)) + 8|0); $$0401 = $238;$$pre$phiZ2D = $$pre; } else { $244 = ((($238)) + 8|0); $245 = HEAP32[$244>>2]|0; $246 = HEAP32[(21308)>>2]|0; $247 = ($246>>>0)>($245>>>0); if ($247) { _abort(); // unreachable; } else { $$0401 = $245;$$pre$phiZ2D = $244; } } HEAP32[$$pre$phiZ2D>>2] = $$1; $248 = ((($$0401)) + 12|0); HEAP32[$248>>2] = $$1; $249 = ((($$1)) + 8|0); HEAP32[$249>>2] = $$0401; $250 = ((($$1)) + 12|0); HEAP32[$250>>2] = $238; return; } $251 = $$2 >>> 8; $252 = ($251|0)==(0); if ($252) { $$0394 = 0; } else { $253 = ($$2>>>0)>(16777215); if ($253) { $$0394 = 31; } else { $254 = (($251) + 1048320)|0; $255 = $254 >>> 16; $256 = $255 & 8; $257 = $251 << $256; $258 = (($257) + 520192)|0; $259 = $258 >>> 16; $260 = $259 & 4; $261 = $260 | $256; $262 = $257 << $260; $263 = (($262) + 245760)|0; $264 = $263 >>> 16; $265 = $264 & 2; $266 = $261 | $265; $267 = (14 - ($266))|0; $268 = $262 << $265; $269 = $268 >>> 15; $270 = (($267) + ($269))|0; $271 = $270 << 1; $272 = (($270) + 7)|0; $273 = $$2 >>> $272; $274 = $273 & 1; $275 = $274 | $271; $$0394 = $275; } } $276 = (21596 + ($$0394<<2)|0); $277 = ((($$1)) + 28|0); HEAP32[$277>>2] = $$0394; $278 = ((($$1)) + 16|0); $279 = ((($$1)) + 20|0); HEAP32[$279>>2] = 0; HEAP32[$278>>2] = 0; $280 = HEAP32[(21296)>>2]|0; $281 = 1 << $$0394; $282 = $280 & $281; $283 = ($282|0)==(0); L197: do { if ($283) { $284 = $280 | $281; HEAP32[(21296)>>2] = $284; HEAP32[$276>>2] = $$1; $285 = ((($$1)) + 24|0); HEAP32[$285>>2] = $276; $286 = ((($$1)) + 12|0); HEAP32[$286>>2] = $$1; $287 = ((($$1)) + 8|0); HEAP32[$287>>2] = $$1; } else { $288 = HEAP32[$276>>2]|0; $289 = ((($288)) + 4|0); $290 = HEAP32[$289>>2]|0; $291 = $290 & -8; $292 = ($291|0)==($$2|0); L200: do { if ($292) { $$0382$lcssa = $288; } else { $293 = ($$0394|0)==(31); $294 = $$0394 >>> 1; $295 = (25 - ($294))|0; $296 = $293 ? 0 : $295; $297 = $$2 << $296; $$0381438 = $297;$$0382437 = $288; while(1) { $304 = $$0381438 >>> 31; $305 = (((($$0382437)) + 16|0) + ($304<<2)|0); $300 = HEAP32[$305>>2]|0; $306 = ($300|0)==(0|0); if ($306) { break; } $298 = $$0381438 << 1; $299 = ((($300)) + 4|0); $301 = HEAP32[$299>>2]|0; $302 = $301 & -8; $303 = ($302|0)==($$2|0); if ($303) { $$0382$lcssa = $300; break L200; } else { $$0381438 = $298;$$0382437 = $300; } } $307 = HEAP32[(21308)>>2]|0; $308 = ($307>>>0)>($305>>>0); if ($308) { _abort(); // unreachable; } else { HEAP32[$305>>2] = $$1; $309 = ((($$1)) + 24|0); HEAP32[$309>>2] = $$0382437; $310 = ((($$1)) + 12|0); HEAP32[$310>>2] = $$1; $311 = ((($$1)) + 8|0); HEAP32[$311>>2] = $$1; break L197; } } } while(0); $312 = ((($$0382$lcssa)) + 8|0); $313 = HEAP32[$312>>2]|0; $314 = HEAP32[(21308)>>2]|0; $315 = ($314>>>0)<=($$0382$lcssa>>>0); $316 = ($314>>>0)<=($313>>>0); $317 = $316 & $315; if ($317) { $318 = ((($313)) + 12|0); HEAP32[$318>>2] = $$1; HEAP32[$312>>2] = $$1; $319 = ((($$1)) + 8|0); HEAP32[$319>>2] = $313; $320 = ((($$1)) + 12|0); HEAP32[$320>>2] = $$0382$lcssa; $321 = ((($$1)) + 24|0); HEAP32[$321>>2] = 0; break; } else { _abort(); // unreachable; } } } while(0); $322 = HEAP32[(21324)>>2]|0; $323 = (($322) + -1)|0; HEAP32[(21324)>>2] = $323; $324 = ($323|0)==(0); if (!($324)) { return; } $$0211$in$i = (21748); while(1) { $$0211$i = HEAP32[$$0211$in$i>>2]|0; $325 = ($$0211$i|0)==(0|0); $326 = ((($$0211$i)) + 8|0); if ($325) { break; } else { $$0211$in$i = $326; } } HEAP32[(21324)>>2] = -1; return; } function ___stdio_close($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $vararg_buffer = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $vararg_buffer = sp; $1 = ((($0)) + 60|0); $2 = HEAP32[$1>>2]|0; $3 = (_dummy_569($2)|0); HEAP32[$vararg_buffer>>2] = $3; $4 = (___syscall6(6,($vararg_buffer|0))|0); $5 = (___syscall_ret($4)|0); STACKTOP = sp;return ($5|0); } function ___stdio_write($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0 = 0, $$04756 = 0, $$04855 = 0, $$04954 = 0, $$051 = 0, $$1 = 0, $$150 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0; var $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0; var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer3 = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0; var $vararg_ptr6 = 0, $vararg_ptr7 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $vararg_buffer3 = sp + 16|0; $vararg_buffer = sp; $3 = sp + 32|0; $4 = ((($0)) + 28|0); $5 = HEAP32[$4>>2]|0; HEAP32[$3>>2] = $5; $6 = ((($3)) + 4|0); $7 = ((($0)) + 20|0); $8 = HEAP32[$7>>2]|0; $9 = (($8) - ($5))|0; HEAP32[$6>>2] = $9; $10 = ((($3)) + 8|0); HEAP32[$10>>2] = $1; $11 = ((($3)) + 12|0); HEAP32[$11>>2] = $2; $12 = (($9) + ($2))|0; $13 = ((($0)) + 60|0); $14 = HEAP32[$13>>2]|0; $15 = $3; HEAP32[$vararg_buffer>>2] = $14; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $15; $vararg_ptr2 = ((($vararg_buffer)) + 8|0); HEAP32[$vararg_ptr2>>2] = 2; $16 = (___syscall146(146,($vararg_buffer|0))|0); $17 = (___syscall_ret($16)|0); $18 = ($12|0)==($17|0); L1: do { if ($18) { label = 3; } else { $$04756 = 2;$$04855 = $12;$$04954 = $3;$27 = $17; while(1) { $26 = ($27|0)<(0); if ($26) { break; } $35 = (($$04855) - ($27))|0; $36 = ((($$04954)) + 4|0); $37 = HEAP32[$36>>2]|0; $38 = ($27>>>0)>($37>>>0); $39 = ((($$04954)) + 8|0); $$150 = $38 ? $39 : $$04954; $40 = $38 << 31 >> 31; $$1 = (($$04756) + ($40))|0; $41 = $38 ? $37 : 0; $$0 = (($27) - ($41))|0; $42 = HEAP32[$$150>>2]|0; $43 = (($42) + ($$0)|0); HEAP32[$$150>>2] = $43; $44 = ((($$150)) + 4|0); $45 = HEAP32[$44>>2]|0; $46 = (($45) - ($$0))|0; HEAP32[$44>>2] = $46; $47 = HEAP32[$13>>2]|0; $48 = $$150; HEAP32[$vararg_buffer3>>2] = $47; $vararg_ptr6 = ((($vararg_buffer3)) + 4|0); HEAP32[$vararg_ptr6>>2] = $48; $vararg_ptr7 = ((($vararg_buffer3)) + 8|0); HEAP32[$vararg_ptr7>>2] = $$1; $49 = (___syscall146(146,($vararg_buffer3|0))|0); $50 = (___syscall_ret($49)|0); $51 = ($35|0)==($50|0); if ($51) { label = 3; break L1; } else { $$04756 = $$1;$$04855 = $35;$$04954 = $$150;$27 = $50; } } $28 = ((($0)) + 16|0); HEAP32[$28>>2] = 0; HEAP32[$4>>2] = 0; HEAP32[$7>>2] = 0; $29 = HEAP32[$0>>2]|0; $30 = $29 | 32; HEAP32[$0>>2] = $30; $31 = ($$04756|0)==(2); if ($31) { $$051 = 0; } else { $32 = ((($$04954)) + 4|0); $33 = HEAP32[$32>>2]|0; $34 = (($2) - ($33))|0; $$051 = $34; } } } while(0); if ((label|0) == 3) { $19 = ((($0)) + 44|0); $20 = HEAP32[$19>>2]|0; $21 = ((($0)) + 48|0); $22 = HEAP32[$21>>2]|0; $23 = (($20) + ($22)|0); $24 = ((($0)) + 16|0); HEAP32[$24>>2] = $23; $25 = $20; HEAP32[$4>>2] = $25; HEAP32[$7>>2] = $25; $$051 = $2; } STACKTOP = sp;return ($$051|0); } function ___stdio_seek($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$pre = 0, $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, $vararg_ptr3 = 0, $vararg_ptr4 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $vararg_buffer = sp; $3 = sp + 20|0; $4 = ((($0)) + 60|0); $5 = HEAP32[$4>>2]|0; $6 = $3; HEAP32[$vararg_buffer>>2] = $5; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = 0; $vararg_ptr2 = ((($vararg_buffer)) + 8|0); HEAP32[$vararg_ptr2>>2] = $1; $vararg_ptr3 = ((($vararg_buffer)) + 12|0); HEAP32[$vararg_ptr3>>2] = $6; $vararg_ptr4 = ((($vararg_buffer)) + 16|0); HEAP32[$vararg_ptr4>>2] = $2; $7 = (___syscall140(140,($vararg_buffer|0))|0); $8 = (___syscall_ret($7)|0); $9 = ($8|0)<(0); if ($9) { HEAP32[$3>>2] = -1; $10 = -1; } else { $$pre = HEAP32[$3>>2]|0; $10 = $$pre; } STACKTOP = sp;return ($10|0); } function ___syscall_ret($0) { $0 = $0|0; var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ($0>>>0)>(4294963200); if ($1) { $2 = (0 - ($0))|0; $3 = (___errno_location()|0); HEAP32[$3>>2] = $2; $$0 = -1; } else { $$0 = $0; } return ($$0|0); } function ___errno_location() { var label = 0, sp = 0; sp = STACKTOP; return (21852|0); } function _dummy_569($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return ($0|0); } function ___stdout_write($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_ptr1 = 0, $vararg_ptr2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 32|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(32|0); $vararg_buffer = sp; $3 = sp + 16|0; $4 = ((($0)) + 36|0); HEAP32[$4>>2] = 194; $5 = HEAP32[$0>>2]|0; $6 = $5 & 64; $7 = ($6|0)==(0); if ($7) { $8 = ((($0)) + 60|0); $9 = HEAP32[$8>>2]|0; $10 = $3; HEAP32[$vararg_buffer>>2] = $9; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = 21523; $vararg_ptr2 = ((($vararg_buffer)) + 8|0); HEAP32[$vararg_ptr2>>2] = $10; $11 = (___syscall54(54,($vararg_buffer|0))|0); $12 = ($11|0)==(0); if (!($12)) { $13 = ((($0)) + 75|0); HEAP8[$13>>0] = -1; } } $14 = (___stdio_write($0,$1,$2)|0); STACKTOP = sp;return ($14|0); } function _strcmp($0,$1) { $0 = $0|0; $1 = $1|0; var $$011 = 0, $$0710 = 0, $$lcssa = 0, $$lcssa8 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond9 = 0, label = 0; var sp = 0; sp = STACKTOP; $2 = HEAP8[$0>>0]|0; $3 = HEAP8[$1>>0]|0; $4 = ($2<<24>>24)!=($3<<24>>24); $5 = ($2<<24>>24)==(0); $or$cond9 = $5 | $4; if ($or$cond9) { $$lcssa = $3;$$lcssa8 = $2; } else { $$011 = $1;$$0710 = $0; while(1) { $6 = ((($$0710)) + 1|0); $7 = ((($$011)) + 1|0); $8 = HEAP8[$6>>0]|0; $9 = HEAP8[$7>>0]|0; $10 = ($8<<24>>24)!=($9<<24>>24); $11 = ($8<<24>>24)==(0); $or$cond = $11 | $10; if ($or$cond) { $$lcssa = $9;$$lcssa8 = $8; break; } else { $$011 = $7;$$0710 = $6; } } } $12 = $$lcssa8&255; $13 = $$lcssa&255; $14 = (($12) - ($13))|0; return ($14|0); } function _memcmp($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$01318 = 0, $$01417 = 0, $$019 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ($2|0)==(0); L1: do { if ($3) { $14 = 0; } else { $$01318 = $0;$$01417 = $2;$$019 = $1; while(1) { $4 = HEAP8[$$01318>>0]|0; $5 = HEAP8[$$019>>0]|0; $6 = ($4<<24>>24)==($5<<24>>24); if (!($6)) { break; } $7 = (($$01417) + -1)|0; $8 = ((($$01318)) + 1|0); $9 = ((($$019)) + 1|0); $10 = ($7|0)==(0); if ($10) { $14 = 0; break L1; } else { $$01318 = $8;$$01417 = $7;$$019 = $9; } } $11 = $4&255; $12 = $5&255; $13 = (($11) - ($12))|0; $14 = $13; } } while(0); return ($14|0); } function _isdigit($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = (($0) + -48)|0; $2 = ($1>>>0)<(10); $3 = $2&1; return ($3|0); } function _vfprintf($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0 = 0, $$1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var $spec$select = 0, $spec$select41 = 0, $vacopy_currentptr = 0, dest = 0, label = 0, sp = 0, stop = 0; sp = STACKTOP; STACKTOP = STACKTOP + 224|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(224|0); $3 = sp + 120|0; $4 = sp + 80|0; $5 = sp; $6 = sp + 136|0; dest=$4; stop=dest+40|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); $vacopy_currentptr = HEAP32[$2>>2]|0; HEAP32[$3>>2] = $vacopy_currentptr; $7 = (_printf_core(0,$1,$3,$5,$4)|0); $8 = ($7|0)<(0); if ($8) { $$0 = -1; } else { $9 = ((($0)) + 76|0); $10 = HEAP32[$9>>2]|0; $11 = ($10|0)>(-1); if ($11) { $12 = (___lockfile($0)|0); $40 = $12; } else { $40 = 0; } $13 = HEAP32[$0>>2]|0; $14 = $13 & 32; $15 = ((($0)) + 74|0); $16 = HEAP8[$15>>0]|0; $17 = ($16<<24>>24)<(1); if ($17) { $18 = $13 & -33; HEAP32[$0>>2] = $18; } $19 = ((($0)) + 48|0); $20 = HEAP32[$19>>2]|0; $21 = ($20|0)==(0); if ($21) { $23 = ((($0)) + 44|0); $24 = HEAP32[$23>>2]|0; HEAP32[$23>>2] = $6; $25 = ((($0)) + 28|0); HEAP32[$25>>2] = $6; $26 = ((($0)) + 20|0); HEAP32[$26>>2] = $6; HEAP32[$19>>2] = 80; $27 = ((($6)) + 80|0); $28 = ((($0)) + 16|0); HEAP32[$28>>2] = $27; $29 = (_printf_core($0,$1,$3,$5,$4)|0); $30 = ($24|0)==(0|0); if ($30) { $$1 = $29; } else { $31 = ((($0)) + 36|0); $32 = HEAP32[$31>>2]|0; (FUNCTION_TABLE_iiii[$32 & 255]($0,0,0)|0); $33 = HEAP32[$26>>2]|0; $34 = ($33|0)==(0|0); $spec$select = $34 ? -1 : $29; HEAP32[$23>>2] = $24; HEAP32[$19>>2] = 0; HEAP32[$28>>2] = 0; HEAP32[$25>>2] = 0; HEAP32[$26>>2] = 0; $$1 = $spec$select; } } else { $22 = (_printf_core($0,$1,$3,$5,$4)|0); $$1 = $22; } $35 = HEAP32[$0>>2]|0; $36 = $35 & 32; $37 = ($36|0)==(0); $spec$select41 = $37 ? $$1 : -1; $38 = $35 | $14; HEAP32[$0>>2] = $38; $39 = ($40|0)==(0); if (!($39)) { ___unlockfile($0); } $$0 = $spec$select41; } STACKTOP = sp;return ($$0|0); } function _printf_core($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $$ = 0, $$0 = 0, $$0228 = 0, $$0229334 = 0, $$0232 = 0, $$0235 = 0, $$0237 = 0, $$0240313 = 0, $$0240313371 = 0, $$0240333 = 0, $$0243 = 0, $$0243$ph = 0, $$0243$ph$be = 0, $$0247 = 0, $$0247$ph = 0, $$0249$lcssa = 0, $$0249321 = 0, $$0252 = 0, $$0253 = 0, $$0254 = 0; var $$0259 = 0, $$0262$lcssa = 0, $$0262328 = 0, $$0269$ph = 0, $$1 = 0, $$1230340 = 0, $$1233 = 0, $$1236 = 0, $$1238 = 0, $$1241339 = 0, $$1248 = 0, $$1250 = 0, $$1255 = 0, $$1260 = 0, $$1263 = 0, $$1270 = 0, $$2 = 0, $$2234 = 0, $$2239 = 0, $$2242320 = 0; var $$2256 = 0, $$2256$ = 0, $$2261 = 0, $$2271 = 0, $$3257 = 0, $$3265 = 0, $$3272 = 0, $$3317 = 0, $$4258370 = 0, $$4266 = 0, $$5 = 0, $$6268 = 0, $$lcssa308 = 0, $$pre = 0, $$pre$phiZ2D = 0, $$pre360 = 0, $$pre362 = 0, $$pre363 = 0, $$pre363$pre = 0, $$pre364 = 0; var $$pre368 = 0, $$sink = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0, $117 = 0, $118 = 0, $119 = 0, $12 = 0, $120 = 0, $121 = 0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0, $129 = 0, $13 = 0, $130 = 0, $131 = 0, $132 = 0, $133 = 0; var $134 = 0, $135 = 0, $136 = 0, $137 = 0, $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0, $150 = 0, $151 = 0; var $152 = 0, $153 = 0, $154 = 0, $155 = 0, $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0; var $170 = 0, $171 = 0, $172 = 0, $173 = 0, $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0; var $189 = 0, $19 = 0, $190 = 0, $191 = 0, $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0; var $207 = 0, $208 = 0, $209 = 0, $21 = 0, $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0; var $225 = 0, $226 = 0, $227 = 0, $228 = 0, $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0; var $243 = 0, $244 = 0, $245 = 0, $246 = 0, $247 = 0, $248 = 0, $249 = 0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0; var $261 = 0, $262 = 0, $263 = 0, $264 = 0, $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0; var $28 = 0, $280 = 0, $281 = 0, $282 = 0, $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0; var $298 = 0, $299 = 0, $30 = 0, $300 = 0, $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0; var $316 = 0, $317 = 0, $318 = 0, $319 = 0, $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0; var $334 = 0, $335 = 0, $336 = 0.0, $337 = 0, $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0; var $352 = 0, $353 = 0, $354 = 0, $355 = 0, $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0; var $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0; var $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current2 = 0, $arglist_next = 0; var $arglist_next3 = 0, $brmerge = 0, $brmerge326 = 0, $expanded = 0, $expanded10 = 0, $expanded11 = 0, $expanded13 = 0, $expanded14 = 0, $expanded15 = 0, $expanded4 = 0, $expanded6 = 0, $expanded7 = 0, $expanded8 = 0, $or$cond = 0, $or$cond276 = 0, $or$cond278 = 0, $or$cond283 = 0, $spec$select = 0, $spec$select281 = 0, $spec$select284 = 0; var $spec$select291 = 0, $spec$select292 = 0, $spec$select293 = 0, $spec$select294 = 0, $spec$select295 = 0, $spec$select296 = 0, $spec$select297 = 0, $spec$select298 = 0, $spec$select299 = 0, $storemerge273$lcssa = 0, $storemerge273327 = 0, $storemerge274 = 0, $trunc = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $5 = sp + 16|0; $6 = sp; $7 = sp + 24|0; $8 = sp + 8|0; $9 = sp + 20|0; HEAP32[$5>>2] = $1; $10 = ($0|0)!=(0|0); $11 = ((($7)) + 40|0); $12 = $11; $13 = ((($7)) + 39|0); $14 = ((($8)) + 4|0); $$0243$ph = 0;$$0247$ph = 0;$$0269$ph = 0; L1: while(1) { $$0243 = $$0243$ph;$$0247 = $$0247$ph; while(1) { $15 = ($$0247|0)>(-1); do { if ($15) { $16 = (2147483647 - ($$0247))|0; $17 = ($$0243|0)>($16|0); if ($17) { $18 = (___errno_location()|0); HEAP32[$18>>2] = 75; $$1248 = -1; break; } else { $19 = (($$0243) + ($$0247))|0; $$1248 = $19; break; } } else { $$1248 = $$0247; } } while(0); $20 = HEAP32[$5>>2]|0; $21 = HEAP8[$20>>0]|0; $22 = ($21<<24>>24)==(0); if ($22) { label = 94; break L1; } $23 = $21;$25 = $20; L12: while(1) { switch ($23<<24>>24) { case 37: { label = 10; break L12; break; } case 0: { $$0249$lcssa = $25; break L12; break; } default: { } } $24 = ((($25)) + 1|0); HEAP32[$5>>2] = $24; $$pre = HEAP8[$24>>0]|0; $23 = $$pre;$25 = $24; } L15: do { if ((label|0) == 10) { label = 0; $$0249321 = $25;$27 = $25; while(1) { $26 = ((($27)) + 1|0); $28 = HEAP8[$26>>0]|0; $29 = ($28<<24>>24)==(37); if (!($29)) { $$0249$lcssa = $$0249321; break L15; } $30 = ((($$0249321)) + 1|0); $31 = ((($27)) + 2|0); HEAP32[$5>>2] = $31; $32 = HEAP8[$31>>0]|0; $33 = ($32<<24>>24)==(37); if ($33) { $$0249321 = $30;$27 = $31; } else { $$0249$lcssa = $30; break; } } } } while(0); $34 = $$0249$lcssa; $35 = $20; $36 = (($34) - ($35))|0; if ($10) { _out($0,$20,$36); } $37 = ($36|0)==(0); if ($37) { break; } else { $$0243 = $36;$$0247 = $$1248; } } $38 = HEAP32[$5>>2]|0; $39 = ((($38)) + 1|0); $40 = HEAP8[$39>>0]|0; $41 = $40 << 24 >> 24; $42 = (_isdigit($41)|0); $43 = ($42|0)==(0); $$pre360 = HEAP32[$5>>2]|0; if ($43) { $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1; } else { $44 = ((($$pre360)) + 2|0); $45 = HEAP8[$44>>0]|0; $46 = ($45<<24>>24)==(36); if ($46) { $47 = ((($$pre360)) + 1|0); $48 = HEAP8[$47>>0]|0; $49 = $48 << 24 >> 24; $50 = (($49) + -48)|0; $$0253 = $50;$$1270 = 1;$$sink = 3; } else { $$0253 = -1;$$1270 = $$0269$ph;$$sink = 1; } } $51 = (($$pre360) + ($$sink)|0); HEAP32[$5>>2] = $51; $52 = HEAP8[$51>>0]|0; $53 = $52 << 24 >> 24; $54 = (($53) + -32)|0; $55 = ($54>>>0)>(31); $56 = 1 << $54; $57 = $56 & 75913; $58 = ($57|0)==(0); $brmerge326 = $55 | $58; if ($brmerge326) { $$0262$lcssa = 0;$$lcssa308 = $52;$storemerge273$lcssa = $51; } else { $$0262328 = 0;$60 = $54;$storemerge273327 = $51; while(1) { $59 = 1 << $60; $61 = $59 | $$0262328; $62 = ((($storemerge273327)) + 1|0); HEAP32[$5>>2] = $62; $63 = HEAP8[$62>>0]|0; $64 = $63 << 24 >> 24; $65 = (($64) + -32)|0; $66 = ($65>>>0)>(31); $67 = 1 << $65; $68 = $67 & 75913; $69 = ($68|0)==(0); $brmerge = $66 | $69; if ($brmerge) { $$0262$lcssa = $61;$$lcssa308 = $63;$storemerge273$lcssa = $62; break; } else { $$0262328 = $61;$60 = $65;$storemerge273327 = $62; } } } $70 = ($$lcssa308<<24>>24)==(42); if ($70) { $71 = ((($storemerge273$lcssa)) + 1|0); $72 = HEAP8[$71>>0]|0; $73 = $72 << 24 >> 24; $74 = (_isdigit($73)|0); $75 = ($74|0)==(0); if ($75) { label = 27; } else { $76 = HEAP32[$5>>2]|0; $77 = ((($76)) + 2|0); $78 = HEAP8[$77>>0]|0; $79 = ($78<<24>>24)==(36); if ($79) { $80 = ((($76)) + 1|0); $81 = HEAP8[$80>>0]|0; $82 = $81 << 24 >> 24; $83 = (($82) + -48)|0; $84 = (($4) + ($83<<2)|0); HEAP32[$84>>2] = 10; $85 = HEAP8[$80>>0]|0; $86 = $85 << 24 >> 24; $87 = (($86) + -48)|0; $88 = (($3) + ($87<<3)|0); $89 = $88; $90 = $89; $91 = HEAP32[$90>>2]|0; $92 = (($89) + 4)|0; $93 = $92; $94 = HEAP32[$93>>2]|0; $95 = ((($76)) + 3|0); $$0259 = $91;$$2271 = 1;$storemerge274 = $95; } else { label = 27; } } if ((label|0) == 27) { label = 0; $96 = ($$1270|0)==(0); if (!($96)) { $$0 = -1; break; } if ($10) { $arglist_current = HEAP32[$2>>2]|0; $97 = $arglist_current; $98 = ((0) + 4|0); $expanded4 = $98; $expanded = (($expanded4) - 1)|0; $99 = (($97) + ($expanded))|0; $100 = ((0) + 4|0); $expanded8 = $100; $expanded7 = (($expanded8) - 1)|0; $expanded6 = $expanded7 ^ -1; $101 = $99 & $expanded6; $102 = $101; $103 = HEAP32[$102>>2]|0; $arglist_next = ((($102)) + 4|0); HEAP32[$2>>2] = $arglist_next; $358 = $103; } else { $358 = 0; } $104 = HEAP32[$5>>2]|0; $105 = ((($104)) + 1|0); $$0259 = $358;$$2271 = 0;$storemerge274 = $105; } HEAP32[$5>>2] = $storemerge274; $106 = ($$0259|0)<(0); $107 = $$0262$lcssa | 8192; $108 = (0 - ($$0259))|0; $spec$select291 = $106 ? $107 : $$0262$lcssa; $spec$select292 = $106 ? $108 : $$0259; $$1260 = $spec$select292;$$1263 = $spec$select291;$$3272 = $$2271;$112 = $storemerge274; } else { $109 = (_getint($5)|0); $110 = ($109|0)<(0); if ($110) { $$0 = -1; break; } $$pre362 = HEAP32[$5>>2]|0; $$1260 = $109;$$1263 = $$0262$lcssa;$$3272 = $$1270;$112 = $$pre362; } $111 = HEAP8[$112>>0]|0; $113 = ($111<<24>>24)==(46); do { if ($113) { $114 = ((($112)) + 1|0); $115 = HEAP8[$114>>0]|0; $116 = ($115<<24>>24)==(42); if (!($116)) { HEAP32[$5>>2] = $114; $152 = (_getint($5)|0); $$pre363$pre = HEAP32[$5>>2]|0; $$0254 = $152;$$pre363 = $$pre363$pre; break; } $117 = ((($112)) + 2|0); $118 = HEAP8[$117>>0]|0; $119 = $118 << 24 >> 24; $120 = (_isdigit($119)|0); $121 = ($120|0)==(0); if (!($121)) { $122 = HEAP32[$5>>2]|0; $123 = ((($122)) + 3|0); $124 = HEAP8[$123>>0]|0; $125 = ($124<<24>>24)==(36); if ($125) { $126 = ((($122)) + 2|0); $127 = HEAP8[$126>>0]|0; $128 = $127 << 24 >> 24; $129 = (($128) + -48)|0; $130 = (($4) + ($129<<2)|0); HEAP32[$130>>2] = 10; $131 = HEAP8[$126>>0]|0; $132 = $131 << 24 >> 24; $133 = (($132) + -48)|0; $134 = (($3) + ($133<<3)|0); $135 = $134; $136 = $135; $137 = HEAP32[$136>>2]|0; $138 = (($135) + 4)|0; $139 = $138; $140 = HEAP32[$139>>2]|0; $141 = ((($122)) + 4|0); HEAP32[$5>>2] = $141; $$0254 = $137;$$pre363 = $141; break; } } $142 = ($$3272|0)==(0); if (!($142)) { $$0 = -1; break L1; } if ($10) { $arglist_current2 = HEAP32[$2>>2]|0; $143 = $arglist_current2; $144 = ((0) + 4|0); $expanded11 = $144; $expanded10 = (($expanded11) - 1)|0; $145 = (($143) + ($expanded10))|0; $146 = ((0) + 4|0); $expanded15 = $146; $expanded14 = (($expanded15) - 1)|0; $expanded13 = $expanded14 ^ -1; $147 = $145 & $expanded13; $148 = $147; $149 = HEAP32[$148>>2]|0; $arglist_next3 = ((($148)) + 4|0); HEAP32[$2>>2] = $arglist_next3; $359 = $149; } else { $359 = 0; } $150 = HEAP32[$5>>2]|0; $151 = ((($150)) + 2|0); HEAP32[$5>>2] = $151; $$0254 = $359;$$pre363 = $151; } else { $$0254 = -1;$$pre363 = $112; } } while(0); $$0252 = 0;$154 = $$pre363; while(1) { $153 = HEAP8[$154>>0]|0; $155 = $153 << 24 >> 24; $156 = (($155) + -65)|0; $157 = ($156>>>0)>(57); if ($157) { $$0 = -1; break L1; } $158 = ((($154)) + 1|0); HEAP32[$5>>2] = $158; $159 = HEAP8[$154>>0]|0; $160 = $159 << 24 >> 24; $161 = (($160) + -65)|0; $162 = ((17913 + (($$0252*58)|0)|0) + ($161)|0); $163 = HEAP8[$162>>0]|0; $164 = $163&255; $165 = (($164) + -1)|0; $166 = ($165>>>0)<(8); if ($166) { $$0252 = $164;$154 = $158; } else { break; } } $167 = ($163<<24>>24)==(0); if ($167) { $$0 = -1; break; } $168 = ($163<<24>>24)==(19); $169 = ($$0253|0)>(-1); do { if ($168) { if ($169) { $$0 = -1; break L1; } else { label = 54; } } else { if ($169) { $170 = (($4) + ($$0253<<2)|0); HEAP32[$170>>2] = $164; $171 = (($3) + ($$0253<<3)|0); $172 = $171; $173 = $172; $174 = HEAP32[$173>>2]|0; $175 = (($172) + 4)|0; $176 = $175; $177 = HEAP32[$176>>2]|0; $178 = $6; $179 = $178; HEAP32[$179>>2] = $174; $180 = (($178) + 4)|0; $181 = $180; HEAP32[$181>>2] = $177; label = 54; break; } if (!($10)) { $$0 = 0; break L1; } _pop_arg($6,$164,$2); $$pre364 = HEAP32[$5>>2]|0; $183 = $$pre364; label = 55; } } while(0); if ((label|0) == 54) { label = 0; if ($10) { $183 = $158; label = 55; } else { $$0243$ph$be = 0; } } L77: do { if ((label|0) == 55) { label = 0; $182 = ((($183)) + -1|0); $184 = HEAP8[$182>>0]|0; $185 = $184 << 24 >> 24; $186 = ($$0252|0)!=(0); $187 = $185 & 15; $188 = ($187|0)==(3); $or$cond276 = $186 & $188; $189 = $185 & -33; $$0235 = $or$cond276 ? $189 : $185; $190 = $$1263 & 8192; $191 = ($190|0)==(0); $192 = $$1263 & -65537; $spec$select = $191 ? $$1263 : $192; L79: do { switch ($$0235|0) { case 110: { $trunc = $$0252&255; switch ($trunc<<24>>24) { case 0: { $199 = HEAP32[$6>>2]|0; HEAP32[$199>>2] = $$1248; $$0243$ph$be = 0; break L77; break; } case 1: { $200 = HEAP32[$6>>2]|0; HEAP32[$200>>2] = $$1248; $$0243$ph$be = 0; break L77; break; } case 2: { $201 = ($$1248|0)<(0); $202 = $201 << 31 >> 31; $203 = HEAP32[$6>>2]|0; $204 = $203; $205 = $204; HEAP32[$205>>2] = $$1248; $206 = (($204) + 4)|0; $207 = $206; HEAP32[$207>>2] = $202; $$0243$ph$be = 0; break L77; break; } case 3: { $208 = $$1248&65535; $209 = HEAP32[$6>>2]|0; HEAP16[$209>>1] = $208; $$0243$ph$be = 0; break L77; break; } case 4: { $210 = $$1248&255; $211 = HEAP32[$6>>2]|0; HEAP8[$211>>0] = $210; $$0243$ph$be = 0; break L77; break; } case 6: { $212 = HEAP32[$6>>2]|0; HEAP32[$212>>2] = $$1248; $$0243$ph$be = 0; break L77; break; } case 7: { $213 = ($$1248|0)<(0); $214 = $213 << 31 >> 31; $215 = HEAP32[$6>>2]|0; $216 = $215; $217 = $216; HEAP32[$217>>2] = $$1248; $218 = (($216) + 4)|0; $219 = $218; HEAP32[$219>>2] = $214; $$0243$ph$be = 0; break L77; break; } default: { $$0243$ph$be = 0; break L77; } } break; } case 112: { $220 = ($$0254>>>0)>(8); $221 = $220 ? $$0254 : 8; $222 = $spec$select | 8; $$1236 = 120;$$1255 = $221;$$3265 = $222; label = 67; break; } case 88: case 120: { $$1236 = $$0235;$$1255 = $$0254;$$3265 = $spec$select; label = 67; break; } case 111: { $238 = $6; $239 = $238; $240 = HEAP32[$239>>2]|0; $241 = (($238) + 4)|0; $242 = $241; $243 = HEAP32[$242>>2]|0; $244 = (_fmt_o($240,$243,$11)|0); $245 = $spec$select & 8; $246 = ($245|0)==(0); $247 = $244; $248 = (($12) - ($247))|0; $249 = ($$0254|0)>($248|0); $250 = (($248) + 1)|0; $251 = $246 | $249; $spec$select295 = $251 ? $$0254 : $250; $$0228 = $244;$$1233 = 0;$$1238 = 18377;$$2256 = $spec$select295;$$4266 = $spec$select;$277 = $240;$279 = $243; label = 73; break; } case 105: case 100: { $252 = $6; $253 = $252; $254 = HEAP32[$253>>2]|0; $255 = (($252) + 4)|0; $256 = $255; $257 = HEAP32[$256>>2]|0; $258 = ($257|0)<(0); if ($258) { $259 = (_i64Subtract(0,0,($254|0),($257|0))|0); $260 = tempRet0; $261 = $6; $262 = $261; HEAP32[$262>>2] = $259; $263 = (($261) + 4)|0; $264 = $263; HEAP32[$264>>2] = $260; $$0232 = 1;$$0237 = 18377;$271 = $259;$272 = $260; label = 72; break L79; } else { $265 = $spec$select & 2048; $266 = ($265|0)==(0); $267 = $spec$select & 1; $268 = ($267|0)==(0); $$ = $268 ? 18377 : (18379); $spec$select296 = $266 ? $$ : (18378); $269 = $spec$select & 2049; $270 = ($269|0)!=(0); $spec$select297 = $270&1; $$0232 = $spec$select297;$$0237 = $spec$select296;$271 = $254;$272 = $257; label = 72; break L79; } break; } case 117: { $193 = $6; $194 = $193; $195 = HEAP32[$194>>2]|0; $196 = (($193) + 4)|0; $197 = $196; $198 = HEAP32[$197>>2]|0; $$0232 = 0;$$0237 = 18377;$271 = $195;$272 = $198; label = 72; break; } case 99: { $288 = $6; $289 = $288; $290 = HEAP32[$289>>2]|0; $291 = (($288) + 4)|0; $292 = $291; $293 = HEAP32[$292>>2]|0; $294 = $290&255; HEAP8[$13>>0] = $294; $$2 = $13;$$2234 = 0;$$2239 = 18377;$$5 = 1;$$6268 = $192;$$pre$phiZ2D = $12; break; } case 109: { $295 = (___errno_location()|0); $296 = HEAP32[$295>>2]|0; $297 = (_strerror($296)|0); $$1 = $297; label = 77; break; } case 115: { $298 = HEAP32[$6>>2]|0; $299 = ($298|0)==(0|0); $300 = $299 ? 18387 : $298; $$1 = $300; label = 77; break; } case 67: { $307 = $6; $308 = $307; $309 = HEAP32[$308>>2]|0; $310 = (($307) + 4)|0; $311 = $310; $312 = HEAP32[$311>>2]|0; HEAP32[$8>>2] = $309; HEAP32[$14>>2] = 0; HEAP32[$6>>2] = $8; $$4258370 = -1; label = 81; break; } case 83: { $313 = ($$0254|0)==(0); if ($313) { _pad_683($0,32,$$1260,0,$spec$select); $$0240313371 = 0; label = 91; } else { $$4258370 = $$0254; label = 81; } break; } case 65: case 71: case 70: case 69: case 97: case 103: case 102: case 101: { $336 = +HEAPF64[$6>>3]; $337 = (_fmt_fp($0,$336,$$1260,$$0254,$spec$select,$$0235)|0); $$0243$ph$be = $337; break L77; break; } default: { $$2 = $20;$$2234 = 0;$$2239 = 18377;$$5 = $$0254;$$6268 = $spec$select;$$pre$phiZ2D = $12; } } } while(0); L103: do { if ((label|0) == 67) { label = 0; $223 = $6; $224 = $223; $225 = HEAP32[$224>>2]|0; $226 = (($223) + 4)|0; $227 = $226; $228 = HEAP32[$227>>2]|0; $229 = $$1236 & 32; $230 = (_fmt_x($225,$228,$11,$229)|0); $231 = ($225|0)==(0); $232 = ($228|0)==(0); $233 = $231 & $232; $234 = $$3265 & 8; $235 = ($234|0)==(0); $or$cond278 = $235 | $233; $236 = $$1236 >>> 4; $237 = (18377 + ($236)|0); $spec$select293 = $or$cond278 ? 18377 : $237; $spec$select294 = $or$cond278 ? 0 : 2; $$0228 = $230;$$1233 = $spec$select294;$$1238 = $spec$select293;$$2256 = $$1255;$$4266 = $$3265;$277 = $225;$279 = $228; label = 73; } else if ((label|0) == 72) { label = 0; $273 = (_fmt_u($271,$272,$11)|0); $$0228 = $273;$$1233 = $$0232;$$1238 = $$0237;$$2256 = $$0254;$$4266 = $spec$select;$277 = $271;$279 = $272; label = 73; } else if ((label|0) == 77) { label = 0; $301 = (_memchr($$1,0,$$0254)|0); $302 = ($301|0)==(0|0); $303 = $301; $304 = $$1; $305 = (($303) - ($304))|0; $306 = (($$1) + ($$0254)|0); $$3257 = $302 ? $$0254 : $305; $$1250 = $302 ? $306 : $301; $$pre368 = $$1250; $$2 = $$1;$$2234 = 0;$$2239 = 18377;$$5 = $$3257;$$6268 = $192;$$pre$phiZ2D = $$pre368; } else if ((label|0) == 81) { label = 0; $314 = HEAP32[$6>>2]|0; $$0229334 = $314;$$0240333 = 0; while(1) { $315 = HEAP32[$$0229334>>2]|0; $316 = ($315|0)==(0); if ($316) { $$0240313 = $$0240333; break; } $317 = (_wctomb($9,$315)|0); $318 = ($317|0)<(0); $319 = (($$4258370) - ($$0240333))|0; $320 = ($317>>>0)>($319>>>0); $or$cond283 = $318 | $320; if ($or$cond283) { label = 85; break; } $321 = ((($$0229334)) + 4|0); $322 = (($317) + ($$0240333))|0; $323 = ($$4258370>>>0)>($322>>>0); if ($323) { $$0229334 = $321;$$0240333 = $322; } else { $$0240313 = $322; break; } } if ((label|0) == 85) { label = 0; if ($318) { $$0 = -1; break L1; } else { $$0240313 = $$0240333; } } _pad_683($0,32,$$1260,$$0240313,$spec$select); $324 = ($$0240313|0)==(0); if ($324) { $$0240313371 = 0; label = 91; } else { $325 = HEAP32[$6>>2]|0; $$1230340 = $325;$$1241339 = 0; while(1) { $326 = HEAP32[$$1230340>>2]|0; $327 = ($326|0)==(0); if ($327) { $$0240313371 = $$0240313; label = 91; break L103; } $328 = (_wctomb($9,$326)|0); $329 = (($328) + ($$1241339))|0; $330 = ($329|0)>($$0240313|0); if ($330) { $$0240313371 = $$0240313; label = 91; break L103; } $331 = ((($$1230340)) + 4|0); _out($0,$9,$328); $332 = ($329>>>0)<($$0240313>>>0); if ($332) { $$1230340 = $331;$$1241339 = $329; } else { $$0240313371 = $$0240313; label = 91; break; } } } } } while(0); if ((label|0) == 73) { label = 0; $274 = ($$2256|0)>(-1); $275 = $$4266 & -65537; $spec$select281 = $274 ? $275 : $$4266; $276 = ($277|0)!=(0); $278 = ($279|0)!=(0); $280 = $276 | $278; $281 = ($$2256|0)!=(0); $or$cond = $281 | $280; $282 = $$0228; $283 = (($12) - ($282))|0; $284 = $280 ^ 1; $285 = $284&1; $286 = (($283) + ($285))|0; $287 = ($$2256|0)>($286|0); $$2256$ = $287 ? $$2256 : $286; $spec$select298 = $or$cond ? $$2256$ : 0; $spec$select299 = $or$cond ? $$0228 : $11; $$2 = $spec$select299;$$2234 = $$1233;$$2239 = $$1238;$$5 = $spec$select298;$$6268 = $spec$select281;$$pre$phiZ2D = $12; } else if ((label|0) == 91) { label = 0; $333 = $spec$select ^ 8192; _pad_683($0,32,$$1260,$$0240313371,$333); $334 = ($$1260|0)>($$0240313371|0); $335 = $334 ? $$1260 : $$0240313371; $$0243$ph$be = $335; break; } $338 = $$2; $339 = (($$pre$phiZ2D) - ($338))|0; $340 = ($$5|0)<($339|0); $spec$select284 = $340 ? $339 : $$5; $341 = (($spec$select284) + ($$2234))|0; $342 = ($$1260|0)<($341|0); $$2261 = $342 ? $341 : $$1260; _pad_683($0,32,$$2261,$341,$$6268); _out($0,$$2239,$$2234); $343 = $$6268 ^ 65536; _pad_683($0,48,$$2261,$341,$343); _pad_683($0,48,$spec$select284,$339,0); _out($0,$$2,$339); $344 = $$6268 ^ 8192; _pad_683($0,32,$$2261,$341,$344); $$0243$ph$be = $$2261; } } while(0); $$0243$ph = $$0243$ph$be;$$0247$ph = $$1248;$$0269$ph = $$3272; } L125: do { if ((label|0) == 94) { $345 = ($0|0)==(0|0); if ($345) { $346 = ($$0269$ph|0)==(0); if ($346) { $$0 = 0; } else { $$2242320 = 1; while(1) { $347 = (($4) + ($$2242320<<2)|0); $348 = HEAP32[$347>>2]|0; $349 = ($348|0)==(0); if ($349) { break; } $350 = (($3) + ($$2242320<<3)|0); _pop_arg($350,$348,$2); $351 = (($$2242320) + 1)|0; $352 = ($351>>>0)<(10); if ($352) { $$2242320 = $351; } else { $$0 = 1; break L125; } } $$3317 = $$2242320; while(1) { $355 = (($4) + ($$3317<<2)|0); $356 = HEAP32[$355>>2]|0; $357 = ($356|0)==(0); $354 = (($$3317) + 1)|0; if (!($357)) { $$0 = -1; break L125; } $353 = ($354>>>0)<(10); if ($353) { $$3317 = $354; } else { $$0 = 1; break; } } } } else { $$0 = $$1248; } } } while(0); STACKTOP = sp;return ($$0|0); } function ___lockfile($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return 0; } function ___unlockfile($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function _out($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = HEAP32[$0>>2]|0; $4 = $3 & 32; $5 = ($4|0)==(0); if ($5) { (___fwritex($1,$2,$0)|0); } return; } function _getint($0) { $0 = $0|0; var $$0$lcssa = 0, $$04 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = HEAP32[$0>>2]|0; $2 = HEAP8[$1>>0]|0; $3 = $2 << 24 >> 24; $4 = (_isdigit($3)|0); $5 = ($4|0)==(0); if ($5) { $$0$lcssa = 0; } else { $$04 = 0; while(1) { $6 = ($$04*10)|0; $7 = HEAP32[$0>>2]|0; $8 = HEAP8[$7>>0]|0; $9 = $8 << 24 >> 24; $10 = (($6) + -48)|0; $11 = (($10) + ($9))|0; $12 = ((($7)) + 1|0); HEAP32[$0>>2] = $12; $13 = HEAP8[$12>>0]|0; $14 = $13 << 24 >> 24; $15 = (_isdigit($14)|0); $16 = ($15|0)==(0); if ($16) { $$0$lcssa = $11; break; } else { $$04 = $11; } } } return ($$0$lcssa|0); } function _pop_arg($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$mask = 0, $$mask31 = 0, $10 = 0, $100 = 0, $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0.0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0; var $116 = 0.0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0; var $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0; var $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, $93 = 0, $94 = 0, $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $arglist_current = 0, $arglist_current11 = 0, $arglist_current14 = 0, $arglist_current17 = 0; var $arglist_current2 = 0, $arglist_current20 = 0, $arglist_current23 = 0, $arglist_current26 = 0, $arglist_current5 = 0, $arglist_current8 = 0, $arglist_next = 0, $arglist_next12 = 0, $arglist_next15 = 0, $arglist_next18 = 0, $arglist_next21 = 0, $arglist_next24 = 0, $arglist_next27 = 0, $arglist_next3 = 0, $arglist_next6 = 0, $arglist_next9 = 0, $expanded = 0, $expanded28 = 0, $expanded30 = 0, $expanded31 = 0; var $expanded32 = 0, $expanded34 = 0, $expanded35 = 0, $expanded37 = 0, $expanded38 = 0, $expanded39 = 0, $expanded41 = 0, $expanded42 = 0, $expanded44 = 0, $expanded45 = 0, $expanded46 = 0, $expanded48 = 0, $expanded49 = 0, $expanded51 = 0, $expanded52 = 0, $expanded53 = 0, $expanded55 = 0, $expanded56 = 0, $expanded58 = 0, $expanded59 = 0; var $expanded60 = 0, $expanded62 = 0, $expanded63 = 0, $expanded65 = 0, $expanded66 = 0, $expanded67 = 0, $expanded69 = 0, $expanded70 = 0, $expanded72 = 0, $expanded73 = 0, $expanded74 = 0, $expanded76 = 0, $expanded77 = 0, $expanded79 = 0, $expanded80 = 0, $expanded81 = 0, $expanded83 = 0, $expanded84 = 0, $expanded86 = 0, $expanded87 = 0; var $expanded88 = 0, $expanded90 = 0, $expanded91 = 0, $expanded93 = 0, $expanded94 = 0, $expanded95 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ($1>>>0)>(20); L1: do { if (!($3)) { do { switch ($1|0) { case 9: { $arglist_current = HEAP32[$2>>2]|0; $4 = $arglist_current; $5 = ((0) + 4|0); $expanded28 = $5; $expanded = (($expanded28) - 1)|0; $6 = (($4) + ($expanded))|0; $7 = ((0) + 4|0); $expanded32 = $7; $expanded31 = (($expanded32) - 1)|0; $expanded30 = $expanded31 ^ -1; $8 = $6 & $expanded30; $9 = $8; $10 = HEAP32[$9>>2]|0; $arglist_next = ((($9)) + 4|0); HEAP32[$2>>2] = $arglist_next; HEAP32[$0>>2] = $10; break L1; break; } case 10: { $arglist_current2 = HEAP32[$2>>2]|0; $11 = $arglist_current2; $12 = ((0) + 4|0); $expanded35 = $12; $expanded34 = (($expanded35) - 1)|0; $13 = (($11) + ($expanded34))|0; $14 = ((0) + 4|0); $expanded39 = $14; $expanded38 = (($expanded39) - 1)|0; $expanded37 = $expanded38 ^ -1; $15 = $13 & $expanded37; $16 = $15; $17 = HEAP32[$16>>2]|0; $arglist_next3 = ((($16)) + 4|0); HEAP32[$2>>2] = $arglist_next3; $18 = ($17|0)<(0); $19 = $18 << 31 >> 31; $20 = $0; $21 = $20; HEAP32[$21>>2] = $17; $22 = (($20) + 4)|0; $23 = $22; HEAP32[$23>>2] = $19; break L1; break; } case 11: { $arglist_current5 = HEAP32[$2>>2]|0; $24 = $arglist_current5; $25 = ((0) + 4|0); $expanded42 = $25; $expanded41 = (($expanded42) - 1)|0; $26 = (($24) + ($expanded41))|0; $27 = ((0) + 4|0); $expanded46 = $27; $expanded45 = (($expanded46) - 1)|0; $expanded44 = $expanded45 ^ -1; $28 = $26 & $expanded44; $29 = $28; $30 = HEAP32[$29>>2]|0; $arglist_next6 = ((($29)) + 4|0); HEAP32[$2>>2] = $arglist_next6; $31 = $0; $32 = $31; HEAP32[$32>>2] = $30; $33 = (($31) + 4)|0; $34 = $33; HEAP32[$34>>2] = 0; break L1; break; } case 12: { $arglist_current8 = HEAP32[$2>>2]|0; $35 = $arglist_current8; $36 = ((0) + 8|0); $expanded49 = $36; $expanded48 = (($expanded49) - 1)|0; $37 = (($35) + ($expanded48))|0; $38 = ((0) + 8|0); $expanded53 = $38; $expanded52 = (($expanded53) - 1)|0; $expanded51 = $expanded52 ^ -1; $39 = $37 & $expanded51; $40 = $39; $41 = $40; $42 = $41; $43 = HEAP32[$42>>2]|0; $44 = (($41) + 4)|0; $45 = $44; $46 = HEAP32[$45>>2]|0; $arglist_next9 = ((($40)) + 8|0); HEAP32[$2>>2] = $arglist_next9; $47 = $0; $48 = $47; HEAP32[$48>>2] = $43; $49 = (($47) + 4)|0; $50 = $49; HEAP32[$50>>2] = $46; break L1; break; } case 13: { $arglist_current11 = HEAP32[$2>>2]|0; $51 = $arglist_current11; $52 = ((0) + 4|0); $expanded56 = $52; $expanded55 = (($expanded56) - 1)|0; $53 = (($51) + ($expanded55))|0; $54 = ((0) + 4|0); $expanded60 = $54; $expanded59 = (($expanded60) - 1)|0; $expanded58 = $expanded59 ^ -1; $55 = $53 & $expanded58; $56 = $55; $57 = HEAP32[$56>>2]|0; $arglist_next12 = ((($56)) + 4|0); HEAP32[$2>>2] = $arglist_next12; $58 = $57&65535; $59 = $58 << 16 >> 16; $60 = ($59|0)<(0); $61 = $60 << 31 >> 31; $62 = $0; $63 = $62; HEAP32[$63>>2] = $59; $64 = (($62) + 4)|0; $65 = $64; HEAP32[$65>>2] = $61; break L1; break; } case 14: { $arglist_current14 = HEAP32[$2>>2]|0; $66 = $arglist_current14; $67 = ((0) + 4|0); $expanded63 = $67; $expanded62 = (($expanded63) - 1)|0; $68 = (($66) + ($expanded62))|0; $69 = ((0) + 4|0); $expanded67 = $69; $expanded66 = (($expanded67) - 1)|0; $expanded65 = $expanded66 ^ -1; $70 = $68 & $expanded65; $71 = $70; $72 = HEAP32[$71>>2]|0; $arglist_next15 = ((($71)) + 4|0); HEAP32[$2>>2] = $arglist_next15; $$mask31 = $72 & 65535; $73 = $0; $74 = $73; HEAP32[$74>>2] = $$mask31; $75 = (($73) + 4)|0; $76 = $75; HEAP32[$76>>2] = 0; break L1; break; } case 15: { $arglist_current17 = HEAP32[$2>>2]|0; $77 = $arglist_current17; $78 = ((0) + 4|0); $expanded70 = $78; $expanded69 = (($expanded70) - 1)|0; $79 = (($77) + ($expanded69))|0; $80 = ((0) + 4|0); $expanded74 = $80; $expanded73 = (($expanded74) - 1)|0; $expanded72 = $expanded73 ^ -1; $81 = $79 & $expanded72; $82 = $81; $83 = HEAP32[$82>>2]|0; $arglist_next18 = ((($82)) + 4|0); HEAP32[$2>>2] = $arglist_next18; $84 = $83&255; $85 = $84 << 24 >> 24; $86 = ($85|0)<(0); $87 = $86 << 31 >> 31; $88 = $0; $89 = $88; HEAP32[$89>>2] = $85; $90 = (($88) + 4)|0; $91 = $90; HEAP32[$91>>2] = $87; break L1; break; } case 16: { $arglist_current20 = HEAP32[$2>>2]|0; $92 = $arglist_current20; $93 = ((0) + 4|0); $expanded77 = $93; $expanded76 = (($expanded77) - 1)|0; $94 = (($92) + ($expanded76))|0; $95 = ((0) + 4|0); $expanded81 = $95; $expanded80 = (($expanded81) - 1)|0; $expanded79 = $expanded80 ^ -1; $96 = $94 & $expanded79; $97 = $96; $98 = HEAP32[$97>>2]|0; $arglist_next21 = ((($97)) + 4|0); HEAP32[$2>>2] = $arglist_next21; $$mask = $98 & 255; $99 = $0; $100 = $99; HEAP32[$100>>2] = $$mask; $101 = (($99) + 4)|0; $102 = $101; HEAP32[$102>>2] = 0; break L1; break; } case 17: { $arglist_current23 = HEAP32[$2>>2]|0; $103 = $arglist_current23; $104 = ((0) + 8|0); $expanded84 = $104; $expanded83 = (($expanded84) - 1)|0; $105 = (($103) + ($expanded83))|0; $106 = ((0) + 8|0); $expanded88 = $106; $expanded87 = (($expanded88) - 1)|0; $expanded86 = $expanded87 ^ -1; $107 = $105 & $expanded86; $108 = $107; $109 = +HEAPF64[$108>>3]; $arglist_next24 = ((($108)) + 8|0); HEAP32[$2>>2] = $arglist_next24; HEAPF64[$0>>3] = $109; break L1; break; } case 18: { $arglist_current26 = HEAP32[$2>>2]|0; $110 = $arglist_current26; $111 = ((0) + 8|0); $expanded91 = $111; $expanded90 = (($expanded91) - 1)|0; $112 = (($110) + ($expanded90))|0; $113 = ((0) + 8|0); $expanded95 = $113; $expanded94 = (($expanded95) - 1)|0; $expanded93 = $expanded94 ^ -1; $114 = $112 & $expanded93; $115 = $114; $116 = +HEAPF64[$115>>3]; $arglist_next27 = ((($115)) + 8|0); HEAP32[$2>>2] = $arglist_next27; HEAPF64[$0>>3] = $116; break L1; break; } default: { break L1; } } } while(0); } } while(0); return; } function _fmt_x($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $$05$lcssa = 0, $$056 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0; var sp = 0; sp = STACKTOP; $4 = ($0|0)==(0); $5 = ($1|0)==(0); $6 = $4 & $5; if ($6) { $$05$lcssa = $2; } else { $$056 = $2;$15 = $1;$8 = $0; while(1) { $7 = $8 & 15; $9 = (18429 + ($7)|0); $10 = HEAP8[$9>>0]|0; $11 = $10&255; $12 = $11 | $3; $13 = $12&255; $14 = ((($$056)) + -1|0); HEAP8[$14>>0] = $13; $16 = (_bitshift64Lshr(($8|0),($15|0),4)|0); $17 = tempRet0; $18 = ($16|0)==(0); $19 = ($17|0)==(0); $20 = $18 & $19; if ($20) { $$05$lcssa = $14; break; } else { $$056 = $14;$15 = $17;$8 = $16; } } } return ($$05$lcssa|0); } function _fmt_o($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0$lcssa = 0, $$06 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ($0|0)==(0); $4 = ($1|0)==(0); $5 = $3 & $4; if ($5) { $$0$lcssa = $2; } else { $$06 = $2;$11 = $1;$7 = $0; while(1) { $6 = $7&255; $8 = $6 & 7; $9 = $8 | 48; $10 = ((($$06)) + -1|0); HEAP8[$10>>0] = $9; $12 = (_bitshift64Lshr(($7|0),($11|0),3)|0); $13 = tempRet0; $14 = ($12|0)==(0); $15 = ($13|0)==(0); $16 = $14 & $15; if ($16) { $$0$lcssa = $10; break; } else { $$06 = $10;$11 = $13;$7 = $12; } } } return ($$0$lcssa|0); } function _fmt_u($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$010$lcssa$off0 = 0, $$012 = 0, $$09$lcssa = 0, $$0914 = 0, $$1$lcssa = 0, $$111 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0; var $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ($1>>>0)>(0); $4 = ($0>>>0)>(4294967295); $5 = ($1|0)==(0); $6 = $5 & $4; $7 = $3 | $6; if ($7) { $$0914 = $2;$8 = $0;$9 = $1; while(1) { $10 = (___udivdi3(($8|0),($9|0),10,0)|0); $11 = tempRet0; $12 = (___muldi3(($10|0),($11|0),10,0)|0); $13 = tempRet0; $14 = (_i64Subtract(($8|0),($9|0),($12|0),($13|0))|0); $15 = tempRet0; $16 = $14&255; $17 = $16 | 48; $18 = ((($$0914)) + -1|0); HEAP8[$18>>0] = $17; $19 = ($9>>>0)>(9); $20 = ($8>>>0)>(4294967295); $21 = ($9|0)==(9); $22 = $21 & $20; $23 = $19 | $22; if ($23) { $$0914 = $18;$8 = $10;$9 = $11; } else { break; } } $$010$lcssa$off0 = $10;$$09$lcssa = $18; } else { $$010$lcssa$off0 = $0;$$09$lcssa = $2; } $24 = ($$010$lcssa$off0|0)==(0); if ($24) { $$1$lcssa = $$09$lcssa; } else { $$012 = $$010$lcssa$off0;$$111 = $$09$lcssa; while(1) { $25 = (($$012>>>0) / 10)&-1; $26 = ($25*10)|0; $27 = (($$012) - ($26))|0; $28 = $27 | 48; $29 = $28&255; $30 = ((($$111)) + -1|0); HEAP8[$30>>0] = $29; $31 = ($$012>>>0)<(10); if ($31) { $$1$lcssa = $30; break; } else { $$012 = $25;$$111 = $30; } } } return ($$1$lcssa|0); } function _strerror($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = (___pthread_self_105()|0); $2 = ((($1)) + 188|0); $3 = HEAP32[$2>>2]|0; $4 = (___strerror_l($0,$3)|0); return ($4|0); } function _memchr($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0$lcssa = 0, $$035$lcssa = 0, $$035$lcssa65 = 0, $$03555 = 0, $$036$lcssa = 0, $$036$lcssa64 = 0, $$03654 = 0, $$046 = 0, $$137$lcssa = 0, $$137$lcssa66 = 0, $$13745 = 0, $$140 = 0, $$23839 = 0, $$in = 0, $$lcssa = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0; var $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0; var $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond53 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = $1 & 255; $4 = $0; $5 = $4 & 3; $6 = ($5|0)!=(0); $7 = ($2|0)!=(0); $or$cond53 = $7 & $6; L1: do { if ($or$cond53) { $8 = $1&255; $$03555 = $0;$$03654 = $2; while(1) { $9 = HEAP8[$$03555>>0]|0; $10 = ($9<<24>>24)==($8<<24>>24); if ($10) { $$035$lcssa65 = $$03555;$$036$lcssa64 = $$03654; label = 6; break L1; } $11 = ((($$03555)) + 1|0); $12 = (($$03654) + -1)|0; $13 = $11; $14 = $13 & 3; $15 = ($14|0)!=(0); $16 = ($12|0)!=(0); $or$cond = $16 & $15; if ($or$cond) { $$03555 = $11;$$03654 = $12; } else { $$035$lcssa = $11;$$036$lcssa = $12;$$lcssa = $16; label = 5; break; } } } else { $$035$lcssa = $0;$$036$lcssa = $2;$$lcssa = $7; label = 5; } } while(0); if ((label|0) == 5) { if ($$lcssa) { $$035$lcssa65 = $$035$lcssa;$$036$lcssa64 = $$036$lcssa; label = 6; } else { label = 16; } } L8: do { if ((label|0) == 6) { $17 = HEAP8[$$035$lcssa65>>0]|0; $18 = $1&255; $19 = ($17<<24>>24)==($18<<24>>24); if ($19) { $38 = ($$036$lcssa64|0)==(0); if ($38) { label = 16; break; } else { $39 = $$035$lcssa65; break; } } $20 = Math_imul($3, 16843009)|0; $21 = ($$036$lcssa64>>>0)>(3); L13: do { if ($21) { $$046 = $$035$lcssa65;$$13745 = $$036$lcssa64; while(1) { $22 = HEAP32[$$046>>2]|0; $23 = $22 ^ $20; $24 = (($23) + -16843009)|0; $25 = $23 & -2139062144; $26 = $25 ^ -2139062144; $27 = $26 & $24; $28 = ($27|0)==(0); if (!($28)) { $$137$lcssa66 = $$13745;$$in = $$046; break L13; } $29 = ((($$046)) + 4|0); $30 = (($$13745) + -4)|0; $31 = ($30>>>0)>(3); if ($31) { $$046 = $29;$$13745 = $30; } else { $$0$lcssa = $29;$$137$lcssa = $30; label = 11; break; } } } else { $$0$lcssa = $$035$lcssa65;$$137$lcssa = $$036$lcssa64; label = 11; } } while(0); if ((label|0) == 11) { $32 = ($$137$lcssa|0)==(0); if ($32) { label = 16; break; } else { $$137$lcssa66 = $$137$lcssa;$$in = $$0$lcssa; } } $$140 = $$in;$$23839 = $$137$lcssa66; while(1) { $33 = HEAP8[$$140>>0]|0; $34 = ($33<<24>>24)==($18<<24>>24); if ($34) { $39 = $$140; break L8; } $35 = ((($$140)) + 1|0); $36 = (($$23839) + -1)|0; $37 = ($36|0)==(0); if ($37) { label = 16; break; } else { $$140 = $35;$$23839 = $36; } } } } while(0); if ((label|0) == 16) { $39 = 0; } return ($39|0); } function _pad_683($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $$0$lcssa = 0, $$011 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 256|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(256|0); $5 = sp; $6 = $4 & 73728; $7 = ($6|0)==(0); $8 = ($2|0)>($3|0); $or$cond = $8 & $7; if ($or$cond) { $9 = (($2) - ($3))|0; $10 = $1 << 24 >> 24; $11 = ($9>>>0)<(256); $12 = $11 ? $9 : 256; (_memset(($5|0),($10|0),($12|0))|0); $13 = ($9>>>0)>(255); if ($13) { $14 = (($2) - ($3))|0; $$011 = $9; while(1) { _out($0,$5,256); $15 = (($$011) + -256)|0; $16 = ($15>>>0)>(255); if ($16) { $$011 = $15; } else { break; } } $17 = $14 & 255; $$0$lcssa = $17; } else { $$0$lcssa = $9; } _out($0,$5,$$0$lcssa); } STACKTOP = sp;return; } function _wctomb($0,$1) { $0 = $0|0; $1 = $1|0; var $$0 = 0, $2 = 0, $3 = 0, label = 0, sp = 0; sp = STACKTOP; $2 = ($0|0)==(0|0); if ($2) { $$0 = 0; } else { $3 = (_wcrtomb($0,$1,0)|0); $$0 = $3; } return ($$0|0); } function _fmt_fp($0,$1,$2,$3,$4,$5) { $0 = $0|0; $1 = +$1; $2 = $2|0; $3 = $3|0; $4 = $4|0; $5 = $5|0; var $$ = 0, $$0 = 0, $$0463$lcssa = 0, $$0463588 = 0, $$0464599 = 0, $$0471 = 0.0, $$0479 = 0, $$0487657 = 0, $$0488 = 0, $$0488669 = 0, $$0488671 = 0, $$0497670 = 0, $$0498 = 0, $$0511586 = 0.0, $$0512 = 0, $$0513 = 0, $$0516652 = 0, $$0522 = 0, $$0523 = 0, $$0525 = 0; var $$0527 = 0, $$0529 = 0, $$0529$in646 = 0, $$0532651 = 0, $$1465 = 0, $$1467 = 0.0, $$1469 = 0.0, $$1472 = 0.0, $$1480 = 0, $$1482$lcssa = 0, $$1482683 = 0, $$1489656 = 0, $$1499 = 0, $$1510587 = 0, $$1514$lcssa = 0, $$1514614 = 0, $$1517 = 0, $$1526 = 0, $$1528 = 0, $$1530621 = 0; var $$1533$lcssa = 0, $$1533645 = 0, $$1604 = 0, $$2 = 0, $$2473 = 0.0, $$2476 = 0, $$2483 = 0, $$2490$lcssa = 0, $$2490638 = 0, $$2500$lcssa = 0, $$2500682 = 0, $$2515 = 0, $$2518634 = 0, $$2531 = 0, $$2534633 = 0, $$3 = 0.0, $$3477 = 0, $$3484$lcssa = 0, $$3484663 = 0, $$3501$lcssa = 0; var $$3501676 = 0, $$3535620 = 0, $$4 = 0.0, $$4478$lcssa = 0, $$4478594 = 0, $$4492 = 0, $$4502$lcssa = 0, $$4502662 = 0, $$4520 = 0, $$5$lcssa = 0, $$5486$lcssa = 0, $$5486639 = 0, $$5493603 = 0, $$5503 = 0, $$5521 = 0, $$560 = 0, $$5609 = 0, $$6 = 0, $$6494593 = 0, $$7495608 = 0; var $$8 = 0, $$8506 = 0, $$9 = 0, $$9507$lcssa = 0, $$9507625 = 0, $$lcssa583 = 0, $$lobit = 0, $$neg = 0, $$neg571 = 0, $$not = 0, $$pn = 0, $$pr = 0, $$pr564 = 0, $$pre = 0, $$pre$phi713Z2D = 0, $$pre$phi714Z2D = 0, $$pre716 = 0, $$sink755 = 0, $10 = 0, $100 = 0; var $101 = 0, $102 = 0, $103 = 0, $104 = 0, $105 = 0, $106 = 0, $107 = 0, $108 = 0, $109 = 0, $11 = 0, $110 = 0, $111 = 0, $112 = 0, $113 = 0, $114 = 0, $115 = 0, $116 = 0, $117 = 0, $118 = 0, $119 = 0; var $12 = 0, $120 = 0, $121 = 0.0, $122 = 0, $123 = 0, $124 = 0, $125 = 0, $126 = 0, $127 = 0, $128 = 0.0, $129 = 0.0, $13 = 0, $130 = 0.0, $131 = 0, $132 = 0, $133 = 0, $134 = 0, $135 = 0, $136 = 0, $137 = 0; var $138 = 0, $139 = 0, $14 = 0, $140 = 0, $141 = 0, $142 = 0, $143 = 0, $144 = 0, $145 = 0, $146 = 0, $147 = 0, $148 = 0, $149 = 0, $15 = 0.0, $150 = 0, $151 = 0, $152 = 0, $153 = 0, $154 = 0, $155 = 0; var $156 = 0, $157 = 0, $158 = 0, $159 = 0, $16 = 0, $160 = 0, $161 = 0, $162 = 0, $163 = 0, $164 = 0, $165 = 0, $166 = 0, $167 = 0, $168 = 0, $169 = 0, $17 = 0, $170 = 0, $171 = 0, $172 = 0, $173 = 0; var $174 = 0, $175 = 0, $176 = 0, $177 = 0, $178 = 0, $179 = 0, $18 = 0, $180 = 0, $181 = 0, $182 = 0, $183 = 0, $184 = 0, $185 = 0, $186 = 0, $187 = 0, $188 = 0, $189 = 0, $19 = 0, $190 = 0, $191 = 0; var $192 = 0, $193 = 0, $194 = 0, $195 = 0, $196 = 0, $197 = 0, $198 = 0, $199 = 0, $20 = 0, $200 = 0, $201 = 0, $202 = 0, $203 = 0, $204 = 0, $205 = 0, $206 = 0, $207 = 0, $208 = 0, $209 = 0, $21 = 0; var $210 = 0, $211 = 0, $212 = 0, $213 = 0, $214 = 0, $215 = 0, $216 = 0, $217 = 0, $218 = 0, $219 = 0, $22 = 0, $220 = 0, $221 = 0, $222 = 0, $223 = 0, $224 = 0, $225 = 0, $226 = 0, $227 = 0, $228 = 0; var $229 = 0, $23 = 0, $230 = 0, $231 = 0, $232 = 0, $233 = 0, $234 = 0, $235 = 0, $236 = 0, $237 = 0, $238 = 0, $239 = 0, $24 = 0, $240 = 0, $241 = 0, $242 = 0, $243 = 0, $244 = 0, $245 = 0, $246 = 0.0; var $247 = 0.0, $248 = 0, $249 = 0.0, $25 = 0, $250 = 0, $251 = 0, $252 = 0, $253 = 0, $254 = 0, $255 = 0, $256 = 0, $257 = 0, $258 = 0, $259 = 0, $26 = 0, $260 = 0, $261 = 0, $262 = 0, $263 = 0, $264 = 0; var $265 = 0, $266 = 0, $267 = 0, $268 = 0, $269 = 0, $27 = 0, $270 = 0, $271 = 0, $272 = 0, $273 = 0, $274 = 0, $275 = 0, $276 = 0, $277 = 0, $278 = 0, $279 = 0, $28 = 0, $280 = 0, $281 = 0, $282 = 0; var $283 = 0, $284 = 0, $285 = 0, $286 = 0, $287 = 0, $288 = 0, $289 = 0, $29 = 0, $290 = 0, $291 = 0, $292 = 0, $293 = 0, $294 = 0, $295 = 0, $296 = 0, $297 = 0, $298 = 0, $299 = 0, $30 = 0, $300 = 0; var $301 = 0, $302 = 0, $303 = 0, $304 = 0, $305 = 0, $306 = 0, $307 = 0, $308 = 0, $309 = 0, $31 = 0, $310 = 0, $311 = 0, $312 = 0, $313 = 0, $314 = 0, $315 = 0, $316 = 0, $317 = 0, $318 = 0, $319 = 0; var $32 = 0, $320 = 0, $321 = 0, $322 = 0, $323 = 0, $324 = 0, $325 = 0, $326 = 0, $327 = 0, $328 = 0, $329 = 0, $33 = 0, $330 = 0, $331 = 0, $332 = 0, $333 = 0, $334 = 0, $335 = 0, $336 = 0, $337 = 0; var $338 = 0, $339 = 0, $34 = 0, $340 = 0, $341 = 0, $342 = 0, $343 = 0, $344 = 0, $345 = 0, $346 = 0, $347 = 0, $348 = 0, $349 = 0, $35 = 0, $350 = 0, $351 = 0, $352 = 0, $353 = 0, $354 = 0, $355 = 0; var $356 = 0, $357 = 0, $358 = 0, $359 = 0, $36 = 0, $360 = 0, $361 = 0, $362 = 0, $363 = 0, $364 = 0, $365 = 0, $366 = 0, $367 = 0, $368 = 0, $369 = 0, $37 = 0.0, $370 = 0, $371 = 0, $372 = 0, $373 = 0; var $374 = 0, $375 = 0, $376 = 0, $377 = 0, $378 = 0, $379 = 0, $38 = 0.0, $380 = 0, $381 = 0, $382 = 0, $383 = 0, $384 = 0, $385 = 0, $386 = 0, $387 = 0, $388 = 0, $389 = 0, $39 = 0, $390 = 0, $391 = 0; var $392 = 0, $393 = 0, $394 = 0, $395 = 0, $396 = 0, $397 = 0, $398 = 0, $399 = 0, $40 = 0, $400 = 0, $401 = 0, $402 = 0, $403 = 0, $404 = 0, $405 = 0, $406 = 0, $407 = 0, $408 = 0, $409 = 0, $41 = 0; var $410 = 0, $411 = 0, $412 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0.0, $54 = 0, $55 = 0, $56 = 0, $57 = 0.0, $58 = 0.0; var $59 = 0.0, $6 = 0, $60 = 0.0, $61 = 0.0, $62 = 0.0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0; var $77 = 0, $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0.0, $91 = 0.0, $92 = 0.0, $93 = 0, $94 = 0; var $95 = 0, $96 = 0, $97 = 0, $98 = 0, $99 = 0, $not$ = 0, $or$cond = 0, $or$cond3$not = 0, $or$cond543 = 0, $or$cond546 = 0, $or$cond556 = 0, $or$cond559 = 0, $or$cond6 = 0, $scevgep707 = 0, $scevgep707708 = 0, $spec$select = 0, $spec$select539 = 0, $spec$select540 = 0, $spec$select540720 = 0, $spec$select540721 = 0; var $spec$select541 = 0, $spec$select544 = 0.0, $spec$select547 = 0, $spec$select548 = 0, $spec$select549 = 0, $spec$select551 = 0, $spec$select554 = 0, $spec$select557 = 0, $spec$select561 = 0.0, $spec$select562 = 0, $spec$select563 = 0, $spec$select565 = 0, $spec$select566 = 0, $spec$select567 = 0.0, $spec$select568 = 0.0, $spec$select569 = 0.0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 560|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(560|0); $6 = sp + 8|0; $7 = sp; $8 = sp + 524|0; $9 = $8; $10 = sp + 512|0; HEAP32[$7>>2] = 0; $11 = ((($10)) + 12|0); $12 = (___DOUBLE_BITS_684($1)|0); $13 = tempRet0; $14 = ($13|0)<(0); if ($14) { $15 = - $1; $16 = (___DOUBLE_BITS_684($15)|0); $17 = tempRet0; $$0471 = $15;$$0522 = 1;$$0523 = 18394;$25 = $17;$412 = $16; } else { $18 = $4 & 2048; $19 = ($18|0)==(0); $20 = $4 & 1; $21 = ($20|0)==(0); $$ = $21 ? (18395) : (18400); $spec$select565 = $19 ? $$ : (18397); $22 = $4 & 2049; $23 = ($22|0)!=(0); $spec$select566 = $23&1; $$0471 = $1;$$0522 = $spec$select566;$$0523 = $spec$select565;$25 = $13;$412 = $12; } $24 = $25 & 2146435072; $26 = (0)==(0); $27 = ($24|0)==(2146435072); $28 = $26 & $27; do { if ($28) { $29 = $5 & 32; $30 = ($29|0)!=(0); $31 = $30 ? 18413 : 18417; $32 = ($$0471 != $$0471) | (0.0 != 0.0); $33 = $30 ? 18421 : 18425; $$0512 = $32 ? $33 : $31; $34 = (($$0522) + 3)|0; $35 = $4 & -65537; _pad_683($0,32,$2,$34,$35); _out($0,$$0523,$$0522); _out($0,$$0512,3); $36 = $4 ^ 8192; _pad_683($0,32,$2,$34,$36); $$sink755 = $34; } else { $37 = (+_frexpl($$0471,$7)); $38 = $37 * 2.0; $39 = $38 != 0.0; if ($39) { $40 = HEAP32[$7>>2]|0; $41 = (($40) + -1)|0; HEAP32[$7>>2] = $41; } $42 = $5 | 32; $43 = ($42|0)==(97); if ($43) { $44 = $5 & 32; $45 = ($44|0)==(0); $46 = ((($$0523)) + 9|0); $spec$select = $45 ? $$0523 : $46; $47 = $$0522 | 2; $48 = ($3>>>0)>(11); $49 = (12 - ($3))|0; $50 = ($49|0)==(0); $51 = $48 | $50; do { if ($51) { $$1472 = $38; } else { $$0511586 = 8.0;$$1510587 = $49; while(1) { $52 = (($$1510587) + -1)|0; $53 = $$0511586 * 16.0; $54 = ($52|0)==(0); if ($54) { break; } else { $$0511586 = $53;$$1510587 = $52; } } $55 = HEAP8[$spec$select>>0]|0; $56 = ($55<<24>>24)==(45); if ($56) { $57 = - $38; $58 = $57 - $53; $59 = $53 + $58; $60 = - $59; $$1472 = $60; break; } else { $61 = $38 + $53; $62 = $61 - $53; $$1472 = $62; break; } } } while(0); $63 = HEAP32[$7>>2]|0; $64 = ($63|0)<(0); $65 = (0 - ($63))|0; $66 = $64 ? $65 : $63; $67 = ($66|0)<(0); $68 = $67 << 31 >> 31; $69 = (_fmt_u($66,$68,$11)|0); $70 = ($69|0)==($11|0); if ($70) { $71 = ((($10)) + 11|0); HEAP8[$71>>0] = 48; $$0513 = $71; } else { $$0513 = $69; } $72 = $63 >> 31; $73 = $72 & 2; $74 = (($73) + 43)|0; $75 = $74&255; $76 = ((($$0513)) + -1|0); HEAP8[$76>>0] = $75; $77 = (($5) + 15)|0; $78 = $77&255; $79 = ((($$0513)) + -2|0); HEAP8[$79>>0] = $78; $80 = ($3|0)<(1); $81 = $4 & 8; $82 = ($81|0)==(0); $$0525 = $8;$$2473 = $$1472; while(1) { $83 = (~~(($$2473))); $84 = (18429 + ($83)|0); $85 = HEAP8[$84>>0]|0; $86 = $85&255; $87 = $44 | $86; $88 = $87&255; $89 = ((($$0525)) + 1|0); HEAP8[$$0525>>0] = $88; $90 = (+($83|0)); $91 = $$2473 - $90; $92 = $91 * 16.0; $93 = $89; $94 = (($93) - ($9))|0; $95 = ($94|0)==(1); if ($95) { $96 = $92 == 0.0; $or$cond3$not = $80 & $96; $or$cond = $82 & $or$cond3$not; if ($or$cond) { $$1526 = $89; } else { $97 = ((($$0525)) + 2|0); HEAP8[$89>>0] = 46; $$1526 = $97; } } else { $$1526 = $89; } $98 = $92 != 0.0; if ($98) { $$0525 = $$1526;$$2473 = $92; } else { break; } } $99 = ($3|0)==(0); $$pre716 = $$1526; if ($99) { label = 25; } else { $100 = (-2 - ($9))|0; $101 = (($100) + ($$pre716))|0; $102 = ($101|0)<($3|0); if ($102) { $103 = $11; $104 = $79; $105 = (($3) + 2)|0; $106 = (($105) + ($103))|0; $107 = (($106) - ($104))|0; $$0527 = $107;$$pre$phi713Z2D = $103;$$pre$phi714Z2D = $104; } else { label = 25; } } if ((label|0) == 25) { $108 = $11; $109 = $79; $110 = (($108) - ($9))|0; $111 = (($110) - ($109))|0; $112 = (($111) + ($$pre716))|0; $$0527 = $112;$$pre$phi713Z2D = $108;$$pre$phi714Z2D = $109; } $113 = (($$0527) + ($47))|0; _pad_683($0,32,$2,$113,$4); _out($0,$spec$select,$47); $114 = $4 ^ 65536; _pad_683($0,48,$2,$113,$114); $115 = (($$pre716) - ($9))|0; _out($0,$8,$115); $116 = (($$pre$phi713Z2D) - ($$pre$phi714Z2D))|0; $117 = (($115) + ($116))|0; $118 = (($$0527) - ($117))|0; _pad_683($0,48,$118,0,0); _out($0,$79,$116); $119 = $4 ^ 8192; _pad_683($0,32,$2,$113,$119); $$sink755 = $113; break; } $120 = ($3|0)<(0); $spec$select539 = $120 ? 6 : $3; if ($39) { $121 = $38 * 268435456.0; $122 = HEAP32[$7>>2]|0; $123 = (($122) + -28)|0; HEAP32[$7>>2] = $123; $$3 = $121;$$pr = $123; } else { $$pre = HEAP32[$7>>2]|0; $$3 = $38;$$pr = $$pre; } $124 = ($$pr|0)<(0); $125 = ((($6)) + 288|0); $$0498 = $124 ? $6 : $125; $$1499 = $$0498;$$4 = $$3; while(1) { $126 = (~~(($$4))>>>0); HEAP32[$$1499>>2] = $126; $127 = ((($$1499)) + 4|0); $128 = (+($126>>>0)); $129 = $$4 - $128; $130 = $129 * 1.0E+9; $131 = $130 != 0.0; if ($131) { $$1499 = $127;$$4 = $130; } else { break; } } $132 = ($$pr|0)>(0); if ($132) { $$1482683 = $$0498;$$2500682 = $127;$134 = $$pr; while(1) { $133 = ($134|0)<(29); $135 = $133 ? $134 : 29; $$0488669 = ((($$2500682)) + -4|0); $136 = ($$0488669>>>0)<($$1482683>>>0); if ($136) { $$2483 = $$1482683; } else { $$0488671 = $$0488669;$$0497670 = 0; while(1) { $137 = HEAP32[$$0488671>>2]|0; $138 = (_bitshift64Shl(($137|0),0,($135|0))|0); $139 = tempRet0; $140 = (_i64Add(($138|0),($139|0),($$0497670|0),0)|0); $141 = tempRet0; $142 = (___udivdi3(($140|0),($141|0),1000000000,0)|0); $143 = tempRet0; $144 = (___muldi3(($142|0),($143|0),1000000000,0)|0); $145 = tempRet0; $146 = (_i64Subtract(($140|0),($141|0),($144|0),($145|0))|0); $147 = tempRet0; HEAP32[$$0488671>>2] = $146; $$0488 = ((($$0488671)) + -4|0); $148 = ($$0488>>>0)<($$1482683>>>0); if ($148) { break; } else { $$0488671 = $$0488;$$0497670 = $142; } } $149 = ($142|0)==(0); if ($149) { $$2483 = $$1482683; } else { $150 = ((($$1482683)) + -4|0); HEAP32[$150>>2] = $142; $$2483 = $150; } } $151 = ($$2500682>>>0)>($$2483>>>0); L57: do { if ($151) { $$3501676 = $$2500682; while(1) { $153 = ((($$3501676)) + -4|0); $154 = HEAP32[$153>>2]|0; $155 = ($154|0)==(0); if (!($155)) { $$3501$lcssa = $$3501676; break L57; } $152 = ($153>>>0)>($$2483>>>0); if ($152) { $$3501676 = $153; } else { $$3501$lcssa = $153; break; } } } else { $$3501$lcssa = $$2500682; } } while(0); $156 = HEAP32[$7>>2]|0; $157 = (($156) - ($135))|0; HEAP32[$7>>2] = $157; $158 = ($157|0)>(0); if ($158) { $$1482683 = $$2483;$$2500682 = $$3501$lcssa;$134 = $157; } else { $$1482$lcssa = $$2483;$$2500$lcssa = $$3501$lcssa;$$pr564 = $157; break; } } } else { $$1482$lcssa = $$0498;$$2500$lcssa = $127;$$pr564 = $$pr; } $159 = ($$pr564|0)<(0); if ($159) { $160 = (($spec$select539) + 25)|0; $161 = (($160|0) / 9)&-1; $162 = (($161) + 1)|0; $163 = ($42|0)==(102); $$3484663 = $$1482$lcssa;$$4502662 = $$2500$lcssa;$165 = $$pr564; while(1) { $164 = (0 - ($165))|0; $166 = ($164|0)<(9); $167 = $166 ? $164 : 9; $168 = ($$3484663>>>0)<($$4502662>>>0); if ($168) { $172 = 1 << $167; $173 = (($172) + -1)|0; $174 = 1000000000 >>> $167; $$0487657 = 0;$$1489656 = $$3484663; while(1) { $175 = HEAP32[$$1489656>>2]|0; $176 = $175 & $173; $177 = $175 >>> $167; $178 = (($177) + ($$0487657))|0; HEAP32[$$1489656>>2] = $178; $179 = Math_imul($176, $174)|0; $180 = ((($$1489656)) + 4|0); $181 = ($180>>>0)<($$4502662>>>0); if ($181) { $$0487657 = $179;$$1489656 = $180; } else { break; } } $182 = HEAP32[$$3484663>>2]|0; $183 = ($182|0)==(0); $184 = ((($$3484663)) + 4|0); $spec$select540 = $183 ? $184 : $$3484663; $185 = ($179|0)==(0); if ($185) { $$5503 = $$4502662;$spec$select540721 = $spec$select540; } else { $186 = ((($$4502662)) + 4|0); HEAP32[$$4502662>>2] = $179; $$5503 = $186;$spec$select540721 = $spec$select540; } } else { $169 = HEAP32[$$3484663>>2]|0; $170 = ($169|0)==(0); $171 = ((($$3484663)) + 4|0); $spec$select540720 = $170 ? $171 : $$3484663; $$5503 = $$4502662;$spec$select540721 = $spec$select540720; } $187 = $163 ? $$0498 : $spec$select540721; $188 = $$5503; $189 = $187; $190 = (($188) - ($189))|0; $191 = $190 >> 2; $192 = ($191|0)>($162|0); $193 = (($187) + ($162<<2)|0); $spec$select541 = $192 ? $193 : $$5503; $194 = HEAP32[$7>>2]|0; $195 = (($194) + ($167))|0; HEAP32[$7>>2] = $195; $196 = ($195|0)<(0); if ($196) { $$3484663 = $spec$select540721;$$4502662 = $spec$select541;$165 = $195; } else { $$3484$lcssa = $spec$select540721;$$4502$lcssa = $spec$select541; break; } } } else { $$3484$lcssa = $$1482$lcssa;$$4502$lcssa = $$2500$lcssa; } $197 = ($$3484$lcssa>>>0)<($$4502$lcssa>>>0); $198 = $$0498; if ($197) { $199 = $$3484$lcssa; $200 = (($198) - ($199))|0; $201 = $200 >> 2; $202 = ($201*9)|0; $203 = HEAP32[$$3484$lcssa>>2]|0; $204 = ($203>>>0)<(10); if ($204) { $$1517 = $202; } else { $$0516652 = $202;$$0532651 = 10; while(1) { $205 = ($$0532651*10)|0; $206 = (($$0516652) + 1)|0; $207 = ($203>>>0)<($205>>>0); if ($207) { $$1517 = $206; break; } else { $$0516652 = $206;$$0532651 = $205; } } } } else { $$1517 = 0; } $208 = ($42|0)==(102); $209 = $208 ? 0 : $$1517; $210 = (($spec$select539) - ($209))|0; $211 = ($42|0)==(103); $212 = ($spec$select539|0)!=(0); $213 = $212 & $211; $$neg = $213 << 31 >> 31; $214 = (($210) + ($$neg))|0; $215 = $$4502$lcssa; $216 = (($215) - ($198))|0; $217 = $216 >> 2; $218 = ($217*9)|0; $219 = (($218) + -9)|0; $220 = ($214|0)<($219|0); if ($220) { $221 = ((($$0498)) + 4|0); $222 = (($214) + 9216)|0; $223 = (($222|0) / 9)&-1; $224 = (($223) + -1024)|0; $225 = (($221) + ($224<<2)|0); $226 = ($223*9)|0; $227 = (($222) - ($226))|0; $228 = ($227|0)<(8); if ($228) { $$0529$in646 = $227;$$1533645 = 10; while(1) { $$0529 = (($$0529$in646) + 1)|0; $229 = ($$1533645*10)|0; $230 = ($$0529$in646|0)<(7); if ($230) { $$0529$in646 = $$0529;$$1533645 = $229; } else { $$1533$lcssa = $229; break; } } } else { $$1533$lcssa = 10; } $231 = HEAP32[$225>>2]|0; $232 = (($231>>>0) / ($$1533$lcssa>>>0))&-1; $233 = Math_imul($232, $$1533$lcssa)|0; $234 = (($231) - ($233))|0; $235 = ($234|0)==(0); $236 = ((($225)) + 4|0); $237 = ($236|0)==($$4502$lcssa|0); $or$cond543 = $237 & $235; if ($or$cond543) { $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa; } else { $238 = $232 & 1; $239 = ($238|0)==(0); $spec$select544 = $239 ? 9007199254740992.0 : 9007199254740994.0; $240 = $$1533$lcssa >>> 1; $241 = ($234>>>0)<($240>>>0); $242 = ($234|0)==($240|0); $or$cond546 = $237 & $242; $spec$select561 = $or$cond546 ? 1.0 : 1.5; $spec$select567 = $241 ? 0.5 : $spec$select561; $243 = ($$0522|0)==(0); if ($243) { $$1467 = $spec$select567;$$1469 = $spec$select544; } else { $244 = HEAP8[$$0523>>0]|0; $245 = ($244<<24>>24)==(45); $246 = - $spec$select544; $247 = - $spec$select567; $spec$select568 = $245 ? $246 : $spec$select544; $spec$select569 = $245 ? $247 : $spec$select567; $$1467 = $spec$select569;$$1469 = $spec$select568; } $248 = (($231) - ($234))|0; HEAP32[$225>>2] = $248; $249 = $$1469 + $$1467; $250 = $249 != $$1469; if ($250) { $251 = (($248) + ($$1533$lcssa))|0; HEAP32[$225>>2] = $251; $252 = ($251>>>0)>(999999999); if ($252) { $$2490638 = $225;$$5486639 = $$3484$lcssa; while(1) { $253 = ((($$2490638)) + -4|0); HEAP32[$$2490638>>2] = 0; $254 = ($253>>>0)<($$5486639>>>0); if ($254) { $255 = ((($$5486639)) + -4|0); HEAP32[$255>>2] = 0; $$6 = $255; } else { $$6 = $$5486639; } $256 = HEAP32[$253>>2]|0; $257 = (($256) + 1)|0; HEAP32[$253>>2] = $257; $258 = ($257>>>0)>(999999999); if ($258) { $$2490638 = $253;$$5486639 = $$6; } else { $$2490$lcssa = $253;$$5486$lcssa = $$6; break; } } } else { $$2490$lcssa = $225;$$5486$lcssa = $$3484$lcssa; } $259 = $$5486$lcssa; $260 = (($198) - ($259))|0; $261 = $260 >> 2; $262 = ($261*9)|0; $263 = HEAP32[$$5486$lcssa>>2]|0; $264 = ($263>>>0)<(10); if ($264) { $$4492 = $$2490$lcssa;$$4520 = $262;$$8 = $$5486$lcssa; } else { $$2518634 = $262;$$2534633 = 10; while(1) { $265 = ($$2534633*10)|0; $266 = (($$2518634) + 1)|0; $267 = ($263>>>0)<($265>>>0); if ($267) { $$4492 = $$2490$lcssa;$$4520 = $266;$$8 = $$5486$lcssa; break; } else { $$2518634 = $266;$$2534633 = $265; } } } } else { $$4492 = $225;$$4520 = $$1517;$$8 = $$3484$lcssa; } } $268 = ((($$4492)) + 4|0); $269 = ($$4502$lcssa>>>0)>($268>>>0); $spec$select547 = $269 ? $268 : $$4502$lcssa; $$5521 = $$4520;$$8506 = $spec$select547;$$9 = $$8; } else { $$5521 = $$1517;$$8506 = $$4502$lcssa;$$9 = $$3484$lcssa; } $270 = (0 - ($$5521))|0; $271 = ($$8506>>>0)>($$9>>>0); L109: do { if ($271) { $$9507625 = $$8506; while(1) { $273 = ((($$9507625)) + -4|0); $274 = HEAP32[$273>>2]|0; $275 = ($274|0)==(0); if (!($275)) { $$9507$lcssa = $$9507625;$$lcssa583 = 1; break L109; } $272 = ($273>>>0)>($$9>>>0); if ($272) { $$9507625 = $273; } else { $$9507$lcssa = $273;$$lcssa583 = 0; break; } } } else { $$9507$lcssa = $$8506;$$lcssa583 = 0; } } while(0); do { if ($211) { $not$ = $212 ^ 1; $276 = $not$&1; $spec$select548 = (($spec$select539) + ($276))|0; $277 = ($spec$select548|0)>($$5521|0); $278 = ($$5521|0)>(-5); $or$cond6 = $277 & $278; if ($or$cond6) { $279 = (($5) + -1)|0; $$neg571 = (($spec$select548) + -1)|0; $280 = (($$neg571) - ($$5521))|0; $$0479 = $279;$$2476 = $280; } else { $281 = (($5) + -2)|0; $282 = (($spec$select548) + -1)|0; $$0479 = $281;$$2476 = $282; } $283 = $4 & 8; $284 = ($283|0)==(0); if ($284) { if ($$lcssa583) { $285 = ((($$9507$lcssa)) + -4|0); $286 = HEAP32[$285>>2]|0; $287 = ($286|0)==(0); if ($287) { $$2531 = 9; } else { $288 = (($286>>>0) % 10)&-1; $289 = ($288|0)==(0); if ($289) { $$1530621 = 0;$$3535620 = 10; while(1) { $290 = ($$3535620*10)|0; $291 = (($$1530621) + 1)|0; $292 = (($286>>>0) % ($290>>>0))&-1; $293 = ($292|0)==(0); if ($293) { $$1530621 = $291;$$3535620 = $290; } else { $$2531 = $291; break; } } } else { $$2531 = 0; } } } else { $$2531 = 9; } $294 = $$0479 | 32; $295 = ($294|0)==(102); $296 = $$9507$lcssa; $297 = (($296) - ($198))|0; $298 = $297 >> 2; $299 = ($298*9)|0; $300 = (($299) + -9)|0; if ($295) { $301 = (($300) - ($$2531))|0; $302 = ($301|0)>(0); $spec$select549 = $302 ? $301 : 0; $303 = ($$2476|0)<($spec$select549|0); $spec$select562 = $303 ? $$2476 : $spec$select549; $$1480 = $$0479;$$3477 = $spec$select562; break; } else { $304 = (($300) + ($$5521))|0; $305 = (($304) - ($$2531))|0; $306 = ($305|0)>(0); $spec$select551 = $306 ? $305 : 0; $307 = ($$2476|0)<($spec$select551|0); $spec$select563 = $307 ? $$2476 : $spec$select551; $$1480 = $$0479;$$3477 = $spec$select563; break; } } else { $$1480 = $$0479;$$3477 = $$2476; } } else { $$1480 = $5;$$3477 = $spec$select539; } } while(0); $308 = ($$3477|0)!=(0); $309 = $4 >>> 3; $$lobit = $309 & 1; $310 = $308 ? 1 : $$lobit; $311 = $$1480 | 32; $312 = ($311|0)==(102); if ($312) { $313 = ($$5521|0)>(0); $314 = $313 ? $$5521 : 0; $$2515 = 0;$$pn = $314; } else { $315 = ($$5521|0)<(0); $316 = $315 ? $270 : $$5521; $317 = ($316|0)<(0); $318 = $317 << 31 >> 31; $319 = (_fmt_u($316,$318,$11)|0); $320 = $11; $321 = $319; $322 = (($320) - ($321))|0; $323 = ($322|0)<(2); if ($323) { $$1514614 = $319; while(1) { $324 = ((($$1514614)) + -1|0); HEAP8[$324>>0] = 48; $325 = $324; $326 = (($320) - ($325))|0; $327 = ($326|0)<(2); if ($327) { $$1514614 = $324; } else { $$1514$lcssa = $324; break; } } } else { $$1514$lcssa = $319; } $328 = $$5521 >> 31; $329 = $328 & 2; $330 = (($329) + 43)|0; $331 = $330&255; $332 = ((($$1514$lcssa)) + -1|0); HEAP8[$332>>0] = $331; $333 = $$1480&255; $334 = ((($$1514$lcssa)) + -2|0); HEAP8[$334>>0] = $333; $335 = $334; $336 = (($320) - ($335))|0; $$2515 = $334;$$pn = $336; } $337 = (($$0522) + 1)|0; $338 = (($337) + ($$3477))|0; $$1528 = (($338) + ($310))|0; $339 = (($$1528) + ($$pn))|0; _pad_683($0,32,$2,$339,$4); _out($0,$$0523,$$0522); $340 = $4 ^ 65536; _pad_683($0,48,$2,$339,$340); if ($312) { $341 = ($$9>>>0)>($$0498>>>0); $spec$select554 = $341 ? $$0498 : $$9; $342 = ((($8)) + 9|0); $343 = $342; $344 = ((($8)) + 8|0); $$5493603 = $spec$select554; while(1) { $345 = HEAP32[$$5493603>>2]|0; $346 = (_fmt_u($345,0,$342)|0); $347 = ($$5493603|0)==($spec$select554|0); if ($347) { $353 = ($346|0)==($342|0); if ($353) { HEAP8[$344>>0] = 48; $$1465 = $344; } else { $$1465 = $346; } } else { $348 = ($346>>>0)>($8>>>0); if ($348) { $349 = $346; $350 = (($349) - ($9))|0; _memset(($8|0),48,($350|0))|0; $$0464599 = $346; while(1) { $351 = ((($$0464599)) + -1|0); $352 = ($351>>>0)>($8>>>0); if ($352) { $$0464599 = $351; } else { $$1465 = $351; break; } } } else { $$1465 = $346; } } $354 = $$1465; $355 = (($343) - ($354))|0; _out($0,$$1465,$355); $356 = ((($$5493603)) + 4|0); $357 = ($356>>>0)>($$0498>>>0); if ($357) { break; } else { $$5493603 = $356; } } $$not = $308 ^ 1; $358 = $4 & 8; $359 = ($358|0)==(0); $or$cond556 = $359 & $$not; if (!($or$cond556)) { _out($0,18445,1); } $360 = ($356>>>0)<($$9507$lcssa>>>0); $361 = ($$3477|0)>(0); $362 = $360 & $361; if ($362) { $$4478594 = $$3477;$$6494593 = $356; while(1) { $363 = HEAP32[$$6494593>>2]|0; $364 = (_fmt_u($363,0,$342)|0); $365 = ($364>>>0)>($8>>>0); if ($365) { $366 = $364; $367 = (($366) - ($9))|0; _memset(($8|0),48,($367|0))|0; $$0463588 = $364; while(1) { $368 = ((($$0463588)) + -1|0); $369 = ($368>>>0)>($8>>>0); if ($369) { $$0463588 = $368; } else { $$0463$lcssa = $368; break; } } } else { $$0463$lcssa = $364; } $370 = ($$4478594|0)<(9); $371 = $370 ? $$4478594 : 9; _out($0,$$0463$lcssa,$371); $372 = ((($$6494593)) + 4|0); $373 = (($$4478594) + -9)|0; $374 = ($372>>>0)<($$9507$lcssa>>>0); $375 = ($$4478594|0)>(9); $376 = $374 & $375; if ($376) { $$4478594 = $373;$$6494593 = $372; } else { $$4478$lcssa = $373; break; } } } else { $$4478$lcssa = $$3477; } $377 = (($$4478$lcssa) + 9)|0; _pad_683($0,48,$377,9,0); } else { $378 = ((($$9)) + 4|0); $spec$select557 = $$lcssa583 ? $$9507$lcssa : $378; $379 = ($$9>>>0)<($spec$select557>>>0); $380 = ($$3477|0)>(-1); $381 = $379 & $380; if ($381) { $382 = ((($8)) + 9|0); $383 = $4 & 8; $384 = ($383|0)==(0); $385 = $382; $386 = (0 - ($9))|0; $387 = ((($8)) + 8|0); $$5609 = $$3477;$$7495608 = $$9; while(1) { $388 = HEAP32[$$7495608>>2]|0; $389 = (_fmt_u($388,0,$382)|0); $390 = ($389|0)==($382|0); if ($390) { HEAP8[$387>>0] = 48; $$0 = $387; } else { $$0 = $389; } $391 = ($$7495608|0)==($$9|0); do { if ($391) { $395 = ((($$0)) + 1|0); _out($0,$$0,1); $396 = ($$5609|0)<(1); $or$cond559 = $384 & $396; if ($or$cond559) { $$2 = $395; break; } _out($0,18445,1); $$2 = $395; } else { $392 = ($$0>>>0)>($8>>>0); if (!($392)) { $$2 = $$0; break; } $scevgep707 = (($$0) + ($386)|0); $scevgep707708 = $scevgep707; _memset(($8|0),48,($scevgep707708|0))|0; $$1604 = $$0; while(1) { $393 = ((($$1604)) + -1|0); $394 = ($393>>>0)>($8>>>0); if ($394) { $$1604 = $393; } else { $$2 = $393; break; } } } } while(0); $397 = $$2; $398 = (($385) - ($397))|0; $399 = ($$5609|0)>($398|0); $400 = $399 ? $398 : $$5609; _out($0,$$2,$400); $401 = (($$5609) - ($398))|0; $402 = ((($$7495608)) + 4|0); $403 = ($402>>>0)<($spec$select557>>>0); $404 = ($401|0)>(-1); $405 = $403 & $404; if ($405) { $$5609 = $401;$$7495608 = $402; } else { $$5$lcssa = $401; break; } } } else { $$5$lcssa = $$3477; } $406 = (($$5$lcssa) + 18)|0; _pad_683($0,48,$406,18,0); $407 = $11; $408 = $$2515; $409 = (($407) - ($408))|0; _out($0,$$2515,$409); } $410 = $4 ^ 8192; _pad_683($0,32,$2,$339,$410); $$sink755 = $339; } } while(0); $411 = ($$sink755|0)<($2|0); $$560 = $411 ? $2 : $$sink755; STACKTOP = sp;return ($$560|0); } function ___DOUBLE_BITS_684($0) { $0 = +$0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; HEAPF64[tempDoublePtr>>3] = $0;$1 = HEAP32[tempDoublePtr>>2]|0; $2 = HEAP32[tempDoublePtr+4>>2]|0; tempRet0 = ($2); return ($1|0); } function _frexpl($0,$1) { $0 = +$0; $1 = $1|0; var $2 = 0.0, label = 0, sp = 0; sp = STACKTOP; $2 = (+_frexp($0,$1)); return (+$2); } function _frexp($0,$1) { $0 = +$0; $1 = $1|0; var $$0 = 0.0, $$016 = 0.0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0.0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0.0, $9 = 0.0, $storemerge = 0, $trunc$clear = 0, label = 0; var sp = 0; sp = STACKTOP; HEAPF64[tempDoublePtr>>3] = $0;$2 = HEAP32[tempDoublePtr>>2]|0; $3 = HEAP32[tempDoublePtr+4>>2]|0; $4 = (_bitshift64Lshr(($2|0),($3|0),52)|0); $5 = tempRet0; $6 = $4&65535; $trunc$clear = $6 & 2047; switch ($trunc$clear<<16>>16) { case 0: { $7 = $0 != 0.0; if ($7) { $8 = $0 * 1.8446744073709552E+19; $9 = (+_frexp($8,$1)); $10 = HEAP32[$1>>2]|0; $11 = (($10) + -64)|0; $$016 = $9;$storemerge = $11; } else { $$016 = $0;$storemerge = 0; } HEAP32[$1>>2] = $storemerge; $$0 = $$016; break; } case 2047: { $$0 = $0; break; } default: { $12 = $4 & 2047; $13 = (($12) + -1022)|0; HEAP32[$1>>2] = $13; $14 = $3 & -2146435073; $15 = $14 | 1071644672; HEAP32[tempDoublePtr>>2] = $2;HEAP32[tempDoublePtr+4>>2] = $15;$16 = +HEAPF64[tempDoublePtr>>3]; $$0 = $16; } } return (+$$0); } function _wcrtomb($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0; var $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ($0|0)==(0|0); do { if ($3) { $$0 = 1; } else { $4 = ($1>>>0)<(128); if ($4) { $5 = $1&255; HEAP8[$0>>0] = $5; $$0 = 1; break; } $6 = (___pthread_self_430()|0); $7 = ((($6)) + 188|0); $8 = HEAP32[$7>>2]|0; $9 = HEAP32[$8>>2]|0; $10 = ($9|0)==(0|0); if ($10) { $11 = $1 & -128; $12 = ($11|0)==(57216); if ($12) { $14 = $1&255; HEAP8[$0>>0] = $14; $$0 = 1; break; } else { $13 = (___errno_location()|0); HEAP32[$13>>2] = 84; $$0 = -1; break; } } $15 = ($1>>>0)<(2048); if ($15) { $16 = $1 >>> 6; $17 = $16 | 192; $18 = $17&255; $19 = ((($0)) + 1|0); HEAP8[$0>>0] = $18; $20 = $1 & 63; $21 = $20 | 128; $22 = $21&255; HEAP8[$19>>0] = $22; $$0 = 2; break; } $23 = ($1>>>0)<(55296); $24 = $1 & -8192; $25 = ($24|0)==(57344); $or$cond = $23 | $25; if ($or$cond) { $26 = $1 >>> 12; $27 = $26 | 224; $28 = $27&255; $29 = ((($0)) + 1|0); HEAP8[$0>>0] = $28; $30 = $1 >>> 6; $31 = $30 & 63; $32 = $31 | 128; $33 = $32&255; $34 = ((($0)) + 2|0); HEAP8[$29>>0] = $33; $35 = $1 & 63; $36 = $35 | 128; $37 = $36&255; HEAP8[$34>>0] = $37; $$0 = 3; break; } $38 = (($1) + -65536)|0; $39 = ($38>>>0)<(1048576); if ($39) { $40 = $1 >>> 18; $41 = $40 | 240; $42 = $41&255; $43 = ((($0)) + 1|0); HEAP8[$0>>0] = $42; $44 = $1 >>> 12; $45 = $44 & 63; $46 = $45 | 128; $47 = $46&255; $48 = ((($0)) + 2|0); HEAP8[$43>>0] = $47; $49 = $1 >>> 6; $50 = $49 & 63; $51 = $50 | 128; $52 = $51&255; $53 = ((($0)) + 3|0); HEAP8[$48>>0] = $52; $54 = $1 & 63; $55 = $54 | 128; $56 = $55&255; HEAP8[$53>>0] = $56; $$0 = 4; break; } else { $57 = (___errno_location()|0); HEAP32[$57>>2] = 84; $$0 = -1; break; } } } while(0); return ($$0|0); } function ___pthread_self_430() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (_pthread_self()|0); return ($0|0); } function _pthread_self() { var label = 0, sp = 0; sp = STACKTOP; return (3196|0); } function ___pthread_self_105() { var $0 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (_pthread_self()|0); return ($0|0); } function ___strerror_l($0,$1) { $0 = $0|0; $1 = $1|0; var $$012$lcssa = 0, $$01214 = 0, $$016 = 0, $$113 = 0, $$115 = 0, $$115$ph = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; $$016 = 0; while(1) { $2 = (18447 + ($$016)|0); $3 = HEAP8[$2>>0]|0; $4 = $3&255; $5 = ($4|0)==($0|0); if ($5) { label = 4; break; } $6 = (($$016) + 1)|0; $7 = ($6|0)==(87); if ($7) { $$115$ph = 87; label = 5; break; } else { $$016 = $6; } } if ((label|0) == 4) { $8 = ($$016|0)==(0); if ($8) { $$012$lcssa = 18535; } else { $$115$ph = $$016; label = 5; } } if ((label|0) == 5) { $$01214 = 18535;$$115 = $$115$ph; while(1) { $$113 = $$01214; while(1) { $9 = HEAP8[$$113>>0]|0; $10 = ($9<<24>>24)==(0); $11 = ((($$113)) + 1|0); if ($10) { break; } else { $$113 = $11; } } $12 = (($$115) + -1)|0; $13 = ($12|0)==(0); if ($13) { $$012$lcssa = $11; break; } else { $$01214 = $11;$$115 = $12; } } } $14 = ((($1)) + 20|0); $15 = HEAP32[$14>>2]|0; $16 = (___lctrans($$012$lcssa,$15)|0); return ($16|0); } function ___lctrans($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, label = 0, sp = 0; sp = STACKTOP; $2 = (___lctrans_impl($0,$1)|0); return ($2|0); } function ___lctrans_impl($0,$1) { $0 = $0|0; $1 = $1|0; var $$0 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; $2 = ($1|0)==(0|0); if ($2) { $$0 = 0; } else { $3 = HEAP32[$1>>2]|0; $4 = ((($1)) + 4|0); $5 = HEAP32[$4>>2]|0; $6 = (___mo_lookup($3,$5,$0)|0); $$0 = $6; } $7 = ($$0|0)==(0|0); $8 = $7 ? $0 : $$0; return ($8|0); } function ___mo_lookup($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$090 = 0, $$094 = 0, $$191 = 0, $$195 = 0, $$4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0; var $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0; var $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0, $6 = 0, $60 = 0; var $61 = 0, $62 = 0, $63 = 0, $64 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond102 = 0, $or$cond104 = 0, $spec$select = 0, label = 0, sp = 0; sp = STACKTOP; $3 = HEAP32[$0>>2]|0; $4 = (($3) + 1794895138)|0; $5 = ((($0)) + 8|0); $6 = HEAP32[$5>>2]|0; $7 = (_swapc($6,$4)|0); $8 = ((($0)) + 12|0); $9 = HEAP32[$8>>2]|0; $10 = (_swapc($9,$4)|0); $11 = ((($0)) + 16|0); $12 = HEAP32[$11>>2]|0; $13 = (_swapc($12,$4)|0); $14 = $1 >>> 2; $15 = ($7>>>0)<($14>>>0); L1: do { if ($15) { $16 = $7 << 2; $17 = (($1) - ($16))|0; $18 = ($10>>>0)<($17>>>0); $19 = ($13>>>0)<($17>>>0); $or$cond = $18 & $19; if ($or$cond) { $20 = $13 | $10; $21 = $20 & 3; $22 = ($21|0)==(0); if ($22) { $23 = $10 >>> 2; $24 = $13 >>> 2; $$090 = 0;$$094 = $7; while(1) { $25 = $$094 >>> 1; $26 = (($$090) + ($25))|0; $27 = $26 << 1; $28 = (($27) + ($23))|0; $29 = (($0) + ($28<<2)|0); $30 = HEAP32[$29>>2]|0; $31 = (_swapc($30,$4)|0); $32 = (($28) + 1)|0; $33 = (($0) + ($32<<2)|0); $34 = HEAP32[$33>>2]|0; $35 = (_swapc($34,$4)|0); $36 = ($35>>>0)<($1>>>0); $37 = (($1) - ($35))|0; $38 = ($31>>>0)<($37>>>0); $or$cond102 = $36 & $38; if (!($or$cond102)) { $$4 = 0; break L1; } $39 = (($35) + ($31))|0; $40 = (($0) + ($39)|0); $41 = HEAP8[$40>>0]|0; $42 = ($41<<24>>24)==(0); if (!($42)) { $$4 = 0; break L1; } $43 = (($0) + ($35)|0); $44 = (_strcmp($2,$43)|0); $45 = ($44|0)==(0); if ($45) { break; } $62 = ($$094|0)==(1); $63 = ($44|0)<(0); if ($62) { $$4 = 0; break L1; } $$191 = $63 ? $$090 : $26; $64 = (($$094) - ($25))|0; $$195 = $63 ? $25 : $64; $$090 = $$191;$$094 = $$195; } $46 = (($27) + ($24))|0; $47 = (($0) + ($46<<2)|0); $48 = HEAP32[$47>>2]|0; $49 = (_swapc($48,$4)|0); $50 = (($46) + 1)|0; $51 = (($0) + ($50<<2)|0); $52 = HEAP32[$51>>2]|0; $53 = (_swapc($52,$4)|0); $54 = ($53>>>0)<($1>>>0); $55 = (($1) - ($53))|0; $56 = ($49>>>0)<($55>>>0); $or$cond104 = $54 & $56; if ($or$cond104) { $57 = (($0) + ($53)|0); $58 = (($53) + ($49))|0; $59 = (($0) + ($58)|0); $60 = HEAP8[$59>>0]|0; $61 = ($60<<24>>24)==(0); $spec$select = $61 ? $57 : 0; $$4 = $spec$select; } else { $$4 = 0; } } else { $$4 = 0; } } else { $$4 = 0; } } else { $$4 = 0; } } while(0); return ($$4|0); } function _swapc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $spec$select = 0, label = 0, sp = 0; sp = STACKTOP; $2 = ($1|0)==(0); $3 = (_llvm_bswap_i32(($0|0))|0); $spec$select = $2 ? $0 : $3; return ($spec$select|0); } function ___fwritex($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$03846 = 0, $$042 = 0, $$1 = 0, $$139 = 0, $$141 = 0, $$143 = 0, $$pre = 0, $$pre48 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0; var $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; var $9 = 0, $or$cond = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ((($2)) + 16|0); $4 = HEAP32[$3>>2]|0; $5 = ($4|0)==(0|0); if ($5) { $7 = (___towrite($2)|0); $8 = ($7|0)==(0); if ($8) { $$pre = HEAP32[$3>>2]|0; $12 = $$pre; label = 5; } else { $$1 = 0; } } else { $6 = $4; $12 = $6; label = 5; } L5: do { if ((label|0) == 5) { $9 = ((($2)) + 20|0); $10 = HEAP32[$9>>2]|0; $11 = (($12) - ($10))|0; $13 = ($11>>>0)<($1>>>0); $14 = $10; if ($13) { $15 = ((($2)) + 36|0); $16 = HEAP32[$15>>2]|0; $17 = (FUNCTION_TABLE_iiii[$16 & 255]($2,$0,$1)|0); $$1 = $17; break; } $18 = ((($2)) + 75|0); $19 = HEAP8[$18>>0]|0; $20 = ($19<<24>>24)<(0); $21 = ($1|0)==(0); $or$cond = $20 | $21; L10: do { if ($or$cond) { $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14; } else { $$03846 = $1; while(1) { $23 = (($$03846) + -1)|0; $24 = (($0) + ($23)|0); $25 = HEAP8[$24>>0]|0; $26 = ($25<<24>>24)==(10); if ($26) { break; } $22 = ($23|0)==(0); if ($22) { $$139 = 0;$$141 = $0;$$143 = $1;$32 = $14; break L10; } else { $$03846 = $23; } } $27 = ((($2)) + 36|0); $28 = HEAP32[$27>>2]|0; $29 = (FUNCTION_TABLE_iiii[$28 & 255]($2,$0,$$03846)|0); $30 = ($29>>>0)<($$03846>>>0); if ($30) { $$1 = $29; break L5; } $31 = (($0) + ($$03846)|0); $$042 = (($1) - ($$03846))|0; $$pre48 = HEAP32[$9>>2]|0; $$139 = $$03846;$$141 = $31;$$143 = $$042;$32 = $$pre48; } } while(0); (_memcpy(($32|0),($$141|0),($$143|0))|0); $33 = HEAP32[$9>>2]|0; $34 = (($33) + ($$143)|0); HEAP32[$9>>2] = $34; $35 = (($$139) + ($$143))|0; $$1 = $35; } } while(0); return ($$1|0); } function ___towrite($0) { $0 = $0|0; var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0; var $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + 74|0); $2 = HEAP8[$1>>0]|0; $3 = $2 << 24 >> 24; $4 = (($3) + 255)|0; $5 = $4 | $3; $6 = $5&255; HEAP8[$1>>0] = $6; $7 = HEAP32[$0>>2]|0; $8 = $7 & 8; $9 = ($8|0)==(0); if ($9) { $11 = ((($0)) + 8|0); HEAP32[$11>>2] = 0; $12 = ((($0)) + 4|0); HEAP32[$12>>2] = 0; $13 = ((($0)) + 44|0); $14 = HEAP32[$13>>2]|0; $15 = ((($0)) + 28|0); HEAP32[$15>>2] = $14; $16 = ((($0)) + 20|0); HEAP32[$16>>2] = $14; $17 = $14; $18 = ((($0)) + 48|0); $19 = HEAP32[$18>>2]|0; $20 = (($17) + ($19)|0); $21 = ((($0)) + 16|0); HEAP32[$21>>2] = $20; $$0 = 0; } else { $10 = $7 | 32; HEAP32[$0>>2] = $10; $$0 = -1; } return ($$0|0); } function _strlen($0) { $0 = $0|0; var $$0 = 0, $$014 = 0, $$015$lcssa = 0, $$01518 = 0, $$1$lcssa = 0, $$pn = 0, $$pn29 = 0, $$pre = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0; var $20 = 0, $21 = 0, $22 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = $0; $2 = $1 & 3; $3 = ($2|0)==(0); L1: do { if ($3) { $$015$lcssa = $0; label = 5; } else { $$01518 = $0;$22 = $1; while(1) { $4 = HEAP8[$$01518>>0]|0; $5 = ($4<<24>>24)==(0); if ($5) { $$pn = $22; break L1; } $6 = ((($$01518)) + 1|0); $7 = $6; $8 = $7 & 3; $9 = ($8|0)==(0); if ($9) { $$015$lcssa = $6; label = 5; break; } else { $$01518 = $6;$22 = $7; } } } } while(0); if ((label|0) == 5) { $$0 = $$015$lcssa; while(1) { $10 = HEAP32[$$0>>2]|0; $11 = (($10) + -16843009)|0; $12 = $10 & -2139062144; $13 = $12 ^ -2139062144; $14 = $13 & $11; $15 = ($14|0)==(0); $16 = ((($$0)) + 4|0); if ($15) { $$0 = $16; } else { break; } } $17 = $10&255; $18 = ($17<<24>>24)==(0); if ($18) { $$1$lcssa = $$0; } else { $$pn29 = $$0; while(1) { $19 = ((($$pn29)) + 1|0); $$pre = HEAP8[$19>>0]|0; $20 = ($$pre<<24>>24)==(0); if ($20) { $$1$lcssa = $19; break; } else { $$pn29 = $19; } } } $21 = $$1$lcssa; $$pn = $21; } $$014 = (($$pn) - ($1))|0; return ($$014|0); } function ___strdup($0) { $0 = $0|0; var $$0 = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = (_strlen($0)|0); $2 = (($1) + 1)|0; $3 = (_malloc($2)|0); $4 = ($3|0)==(0|0); if ($4) { $$0 = 0; } else { $5 = (_memcpy(($3|0),($0|0),($2|0))|0); $$0 = $5; } return ($$0|0); } function ___overflow($0,$1) { $0 = $0|0; $1 = $1|0; var $$0 = 0, $$pre = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $3 = 0, $4 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $2 = sp; $3 = $1&255; HEAP8[$2>>0] = $3; $4 = ((($0)) + 16|0); $5 = HEAP32[$4>>2]|0; $6 = ($5|0)==(0|0); if ($6) { $7 = (___towrite($0)|0); $8 = ($7|0)==(0); if ($8) { $$pre = HEAP32[$4>>2]|0; $12 = $$pre; label = 4; } else { $$0 = -1; } } else { $12 = $5; label = 4; } do { if ((label|0) == 4) { $9 = ((($0)) + 20|0); $10 = HEAP32[$9>>2]|0; $11 = ($10>>>0)<($12>>>0); if ($11) { $13 = $1 & 255; $14 = ((($0)) + 75|0); $15 = HEAP8[$14>>0]|0; $16 = $15 << 24 >> 24; $17 = ($13|0)==($16|0); if (!($17)) { $18 = ((($10)) + 1|0); HEAP32[$9>>2] = $18; HEAP8[$10>>0] = $3; $$0 = $13; break; } } $19 = ((($0)) + 36|0); $20 = HEAP32[$19>>2]|0; $21 = (FUNCTION_TABLE_iiii[$20 & 255]($0,$2,1)|0); $22 = ($21|0)==(1); if ($22) { $23 = HEAP8[$2>>0]|0; $24 = $23&255; $$0 = $24; } else { $$0 = -1; } } } while(0); STACKTOP = sp;return ($$0|0); } function ___ofl_lock() { var label = 0, sp = 0; sp = STACKTOP; ___lock((21856|0)); return (21864|0); } function ___ofl_unlock() { var label = 0, sp = 0; sp = STACKTOP; ___unlock((21856|0)); return; } function _fflush($0) { $0 = $0|0; var $$0 = 0, $$023 = 0, $$02325 = 0, $$02327 = 0, $$024$lcssa = 0, $$02426 = 0, $$1 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0; var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $phitmp = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ($0|0)==(0|0); do { if ($1) { $8 = HEAP32[798]|0; $9 = ($8|0)==(0|0); if ($9) { $29 = 0; } else { $10 = HEAP32[798]|0; $11 = (_fflush($10)|0); $29 = $11; } $12 = (___ofl_lock()|0); $$02325 = HEAP32[$12>>2]|0; $13 = ($$02325|0)==(0|0); if ($13) { $$024$lcssa = $29; } else { $$02327 = $$02325;$$02426 = $29; while(1) { $14 = ((($$02327)) + 76|0); $15 = HEAP32[$14>>2]|0; $16 = ($15|0)>(-1); if ($16) { $17 = (___lockfile($$02327)|0); $26 = $17; } else { $26 = 0; } $18 = ((($$02327)) + 20|0); $19 = HEAP32[$18>>2]|0; $20 = ((($$02327)) + 28|0); $21 = HEAP32[$20>>2]|0; $22 = ($19>>>0)>($21>>>0); if ($22) { $23 = (___fflush_unlocked($$02327)|0); $24 = $23 | $$02426; $$1 = $24; } else { $$1 = $$02426; } $25 = ($26|0)==(0); if (!($25)) { ___unlockfile($$02327); } $27 = ((($$02327)) + 56|0); $$023 = HEAP32[$27>>2]|0; $28 = ($$023|0)==(0|0); if ($28) { $$024$lcssa = $$1; break; } else { $$02327 = $$023;$$02426 = $$1; } } } ___ofl_unlock(); $$0 = $$024$lcssa; } else { $2 = ((($0)) + 76|0); $3 = HEAP32[$2>>2]|0; $4 = ($3|0)>(-1); if (!($4)) { $5 = (___fflush_unlocked($0)|0); $$0 = $5; break; } $6 = (___lockfile($0)|0); $phitmp = ($6|0)==(0); $7 = (___fflush_unlocked($0)|0); if ($phitmp) { $$0 = $7; } else { ___unlockfile($0); $$0 = $7; } } } while(0); return ($$0|0); } function ___fflush_unlocked($0) { $0 = $0|0; var $$0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0; var $9 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + 20|0); $2 = HEAP32[$1>>2]|0; $3 = ((($0)) + 28|0); $4 = HEAP32[$3>>2]|0; $5 = ($2>>>0)>($4>>>0); if ($5) { $6 = ((($0)) + 36|0); $7 = HEAP32[$6>>2]|0; (FUNCTION_TABLE_iiii[$7 & 255]($0,0,0)|0); $8 = HEAP32[$1>>2]|0; $9 = ($8|0)==(0|0); if ($9) { $$0 = -1; } else { label = 3; } } else { label = 3; } if ((label|0) == 3) { $10 = ((($0)) + 4|0); $11 = HEAP32[$10>>2]|0; $12 = ((($0)) + 8|0); $13 = HEAP32[$12>>2]|0; $14 = ($11>>>0)<($13>>>0); if ($14) { $15 = $11; $16 = $13; $17 = (($15) - ($16))|0; $18 = ((($0)) + 40|0); $19 = HEAP32[$18>>2]|0; (FUNCTION_TABLE_iiii[$19 & 255]($0,$17,1)|0); } $20 = ((($0)) + 16|0); HEAP32[$20>>2] = 0; HEAP32[$3>>2] = 0; HEAP32[$1>>2] = 0; HEAP32[$12>>2] = 0; HEAP32[$10>>2] = 0; $$0 = 0; } return ($$0|0); } function _fputc($0,$1) { $0 = $0|0; $1 = $1|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $2 = ((($1)) + 76|0); $3 = HEAP32[$2>>2]|0; $4 = ($3|0)<(0); if ($4) { label = 3; } else { $5 = (___lockfile($1)|0); $6 = ($5|0)==(0); if ($6) { label = 3; } else { $20 = $0&255; $21 = $0 & 255; $22 = ((($1)) + 75|0); $23 = HEAP8[$22>>0]|0; $24 = $23 << 24 >> 24; $25 = ($21|0)==($24|0); if ($25) { label = 10; } else { $26 = ((($1)) + 20|0); $27 = HEAP32[$26>>2]|0; $28 = ((($1)) + 16|0); $29 = HEAP32[$28>>2]|0; $30 = ($27>>>0)<($29>>>0); if ($30) { $31 = ((($27)) + 1|0); HEAP32[$26>>2] = $31; HEAP8[$27>>0] = $20; $33 = $21; } else { label = 10; } } if ((label|0) == 10) { $32 = (___overflow($1,$0)|0); $33 = $32; } ___unlockfile($1); $$0 = $33; } } do { if ((label|0) == 3) { $7 = $0&255; $8 = $0 & 255; $9 = ((($1)) + 75|0); $10 = HEAP8[$9>>0]|0; $11 = $10 << 24 >> 24; $12 = ($8|0)==($11|0); if (!($12)) { $13 = ((($1)) + 20|0); $14 = HEAP32[$13>>2]|0; $15 = ((($1)) + 16|0); $16 = HEAP32[$15>>2]|0; $17 = ($14>>>0)<($16>>>0); if ($17) { $18 = ((($14)) + 1|0); HEAP32[$13>>2] = $18; HEAP8[$14>>0] = $7; $$0 = $8; break; } } $19 = (___overflow($1,$0)|0); $$0 = $19; } } while(0); return ($$0|0); } function __ZNSt3__217bad_function_callD2Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZNSt3__217bad_function_callD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZNSt3__217bad_function_callD2Ev($0); __ZdlPv($0); return; } function __ZNKSt3__217bad_function_call4whatEv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return (20339|0); } function __ZNSt3__214__shared_countD2Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZNSt3__214__shared_countD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; _llvm_trap(); // unreachable; } function __ZNSt3__219__shared_weak_countD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; _llvm_trap(); // unreachable; } function __ZNKSt3__219__shared_weak_count13__get_deleterERKSt9type_info($0,$1) { $0 = $0|0; $1 = $1|0; var label = 0, sp = 0; sp = STACKTOP; return (0|0); } function __ZNSt3__219__shared_weak_count14__release_weakEv($0) { $0 = $0|0; var $1 = 0, $10 = 0, $11 = 0, $12 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + 8|0); $2 = HEAP32[$1>>2]|0; $3 = ($2|0)==(0); if ($3) { $4 = HEAP32[$0>>2]|0; $5 = ((($4)) + 16|0); $6 = HEAP32[$5>>2]|0; FUNCTION_TABLE_vi[$6 & 511]($0); } else { $7 = HEAP32[$1>>2]|0; $8 = (($7) + -1)|0; HEAP32[$1>>2] = $8; $9 = ($7|0)==(0); if ($9) { $10 = HEAP32[$0>>2]|0; $11 = ((($10)) + 16|0); $12 = HEAP32[$11>>2]|0; FUNCTION_TABLE_vi[$12 & 511]($0); } } return; } function __ZNSt3__25mutex4lockEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = (_pthread_mutex_lock(($0|0))|0); $2 = ($1|0)==(0); if ($2) { return; } else { __ZNSt3__220__throw_system_errorEiPKc($1,20445); // unreachable; } } function __ZNSt3__25mutex6unlockEv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; (_pthread_mutex_unlock(($0|0))|0); return; } function __Znwj($0) { $0 = $0|0; var $$lcssa = 0, $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $spec$store$select = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ($0|0)==(0); $spec$store$select = $1 ? 1 : $0; while(1) { $2 = (_malloc($spec$store$select)|0); $3 = ($2|0)==(0|0); if (!($3)) { $$lcssa = $2; break; } $4 = (__ZSt15get_new_handlerv()|0); $5 = ($4|0)==(0|0); if ($5) { $$lcssa = 0; break; } FUNCTION_TABLE_v[$4 & 511](); } return ($$lcssa|0); } function __Znaj($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = (__Znwj($0)|0); return ($1|0); } function __ZdlPv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; _free($0); return; } function __ZdaPv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZdlPv($0); return; } function __ZNSt3__218__libcpp_refstringC2EPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; $2 = (_strlen($1)|0); $3 = (($2) + 13)|0; $4 = (__Znwj($3)|0); HEAP32[$4>>2] = $2; $5 = ((($4)) + 4|0); HEAP32[$5>>2] = $2; $6 = ((($4)) + 8|0); HEAP32[$6>>2] = 0; $7 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($4)|0); $8 = (($2) + 1)|0; _memcpy(($7|0),($1|0),($8|0))|0; HEAP32[$0>>2] = $7; return; } function __ZNSt3__215__refstring_imp12_GLOBAL__N_113data_from_repEPNS1_9_Rep_baseE($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + 12|0); return ($1|0); } function __ZNSt11logic_errorC2EPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, label = 0, sp = 0; sp = STACKTOP; HEAP32[$0>>2] = (3620); $2 = ((($0)) + 4|0); __ZNSt3__218__libcpp_refstringC2EPKc($2,$1); return; } function __ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return 1; } function __ZNSt13runtime_errorC2EPKc($0,$1) { $0 = $0|0; $1 = $1|0; var $2 = 0, label = 0, sp = 0; sp = STACKTOP; HEAP32[$0>>2] = (3640); $2 = ((($0)) + 4|0); __ZNSt3__218__libcpp_refstringC2EPKc($2,$1); return; } function __ZNKSt3__221__basic_string_commonILb1EE20__throw_length_errorEv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; _abort(); // unreachable; } function __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; _abort(); // unreachable; } function __ZNSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + 11|0); $2 = HEAP8[$1>>0]|0; $3 = ($2<<24>>24)<(0); if ($3) { $4 = HEAP32[$0>>2]|0; __ZdlPv($4); } return; } function __ZNSt3__211char_traitsIcE7compareEPKcS3_j($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ($2|0)==(0); if ($3) { $$0 = 0; } else { $4 = (_memcmp($0,$1,$2)|0); $$0 = $4; } return ($$0|0); } function __ZNKSt3__212basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE7compareEjjPKcj($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $$sroa$speculated = 0, $$sroa$speculated19 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var $or$cond = 0, $spec$select = 0, $spec$select31 = 0, label = 0, sp = 0; sp = STACKTOP; $5 = ((($0)) + 11|0); $6 = HEAP8[$5>>0]|0; $7 = ($6<<24>>24)<(0); if ($7) { $8 = ((($0)) + 4|0); $9 = HEAP32[$8>>2]|0; $12 = $9; } else { $10 = $6&255; $12 = $10; } $11 = ($12>>>0)<($1>>>0); $13 = ($4|0)==(-1); $or$cond = $13 | $11; if ($or$cond) { __ZNKSt3__221__basic_string_commonILb1EE20__throw_out_of_rangeEv($0); // unreachable; } $14 = (($12) - ($1))|0; $15 = ($14>>>0)<($2>>>0); $$sroa$speculated = $15 ? $14 : $2; if ($7) { $16 = HEAP32[$0>>2]|0; $18 = $16; } else { $18 = $0; } $17 = (($18) + ($1)|0); $19 = ($$sroa$speculated>>>0)>($4>>>0); $$sroa$speculated19 = $19 ? $4 : $$sroa$speculated; $20 = (__ZNSt3__211char_traitsIcE7compareEPKcS3_j($17,$3,$$sroa$speculated19)|0); $21 = ($20|0)==(0); if ($21) { $22 = ($$sroa$speculated>>>0)<($4>>>0); $spec$select = $19&1; $spec$select31 = $22 ? -1 : $spec$select; return ($spec$select31|0); } else { return ($20|0); } return (0)|0; } function __ZNSt3__220__throw_system_errorEiPKc($0,$1) { $0 = $0|0; $1 = $1|0; var label = 0, sp = 0; sp = STACKTOP; _abort(); // unreachable; } function __ZNKSt3__220__vector_base_commonILb1EE20__throw_length_errorEv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; _abort(); // unreachable; } function __ZL25default_terminate_handlerv() { var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $2 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0; var $27 = 0, $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $vararg_buffer = 0, $vararg_buffer10 = 0, $vararg_buffer3 = 0, $vararg_buffer7 = 0, $vararg_ptr1 = 0; var $vararg_ptr2 = 0, $vararg_ptr6 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 48|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(48|0); $vararg_buffer10 = sp + 32|0; $vararg_buffer7 = sp + 24|0; $vararg_buffer3 = sp + 16|0; $vararg_buffer = sp; $0 = sp + 36|0; $1 = (___cxa_get_globals_fast()|0); $2 = ($1|0)==(0|0); if (!($2)) { $3 = HEAP32[$1>>2]|0; $4 = ($3|0)==(0|0); if (!($4)) { $5 = ((($3)) + 80|0); $6 = ((($3)) + 48|0); $7 = $6; $8 = $7; $9 = HEAP32[$8>>2]|0; $10 = (($7) + 4)|0; $11 = $10; $12 = HEAP32[$11>>2]|0; $13 = $9 & -256; $14 = ($13|0)==(1126902528); $15 = ($12|0)==(1129074247); $16 = $14 & $15; if (!($16)) { HEAP32[$vararg_buffer7>>2] = 20599; _abort_message(20549,$vararg_buffer7); // unreachable; } $17 = ($9|0)==(1126902529); $18 = ($12|0)==(1129074247); $19 = $17 & $18; if ($19) { $20 = ((($3)) + 44|0); $21 = HEAP32[$20>>2]|0; $22 = $21; } else { $22 = $5; } HEAP32[$0>>2] = $22; $23 = HEAP32[$3>>2]|0; $24 = ((($23)) + 4|0); $25 = HEAP32[$24>>2]|0; $26 = HEAP32[322]|0; $27 = ((($26)) + 16|0); $28 = HEAP32[$27>>2]|0; $29 = (FUNCTION_TABLE_iiii[$28 & 255](1288,$23,$0)|0); if ($29) { $30 = HEAP32[$0>>2]|0; $31 = HEAP32[$30>>2]|0; $32 = ((($31)) + 8|0); $33 = HEAP32[$32>>2]|0; $34 = (FUNCTION_TABLE_ii[$33 & 255]($30)|0); HEAP32[$vararg_buffer>>2] = 20599; $vararg_ptr1 = ((($vararg_buffer)) + 4|0); HEAP32[$vararg_ptr1>>2] = $25; $vararg_ptr2 = ((($vararg_buffer)) + 8|0); HEAP32[$vararg_ptr2>>2] = $34; _abort_message(20463,$vararg_buffer); // unreachable; } else { HEAP32[$vararg_buffer3>>2] = 20599; $vararg_ptr6 = ((($vararg_buffer3)) + 4|0); HEAP32[$vararg_ptr6>>2] = $25; _abort_message(20508,$vararg_buffer3); // unreachable; } } } _abort_message(20587,$vararg_buffer10); // unreachable; } function ___cxa_get_globals_fast() { var $0 = 0, $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $vararg_buffer = sp; $0 = (_pthread_once((21868|0),(256|0))|0); $1 = ($0|0)==(0); if ($1) { $2 = HEAP32[5468]|0; $3 = (_pthread_getspecific(($2|0))|0); STACKTOP = sp;return ($3|0); } else { _abort_message(20738,$vararg_buffer); // unreachable; } return (0)|0; } function _abort_message($0,$varargs) { $0 = $0|0; $varargs = $varargs|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $1 = sp; HEAP32[$1>>2] = $varargs; $2 = HEAP32[735]|0; (_vfprintf($2,$0,$1)|0); (_fputc(10,$2)|0); _abort(); // unreachable; } function __ZN10__cxxabiv116__shim_type_infoD2Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZN10__cxxabiv117__class_type_infoD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZN10__cxxabiv116__shim_type_infoD2Ev($0); __ZdlPv($0); return; } function __ZNK10__cxxabiv116__shim_type_info5noop1Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZNK10__cxxabiv116__shim_type_info5noop2Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0 = 0, $$2 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0; var dest = 0, label = 0, sp = 0, stop = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $3 = sp; $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0); if ($4) { $$2 = 1; } else { $5 = ($1|0)==(0|0); if ($5) { $$2 = 0; } else { $6 = (___dynamic_cast($1,1312,1296,0)|0); $7 = ($6|0)==(0|0); if ($7) { $$2 = 0; } else { $8 = ((($3)) + 4|0); dest=$8; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); HEAP32[$3>>2] = $6; $9 = ((($3)) + 8|0); HEAP32[$9>>2] = $0; $10 = ((($3)) + 12|0); HEAP32[$10>>2] = -1; $11 = ((($3)) + 48|0); HEAP32[$11>>2] = 1; $12 = HEAP32[$6>>2]|0; $13 = ((($12)) + 28|0); $14 = HEAP32[$13>>2]|0; $15 = HEAP32[$2>>2]|0; FUNCTION_TABLE_viiii[$14 & 255]($6,$3,$15,1); $16 = ((($3)) + 24|0); $17 = HEAP32[$16>>2]|0; $18 = ($17|0)==(1); if ($18) { $19 = ((($3)) + 16|0); $20 = HEAP32[$19>>2]|0; HEAP32[$2>>2] = $20; $$0 = 1; } else { $$0 = 0; } $$2 = $$0; } } } STACKTOP = sp;return ($$2|0); } function __ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; $5 = $5|0; var $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; $6 = ((($1)) + 8|0); $7 = HEAP32[$6>>2]|0; $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0); if ($8) { __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4); } return; } function __ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $5 = ((($1)) + 8|0); $6 = HEAP32[$5>>2]|0; $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0); do { if ($7) { __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3); } else { $8 = HEAP32[$1>>2]|0; $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0); if ($9) { $10 = ((($1)) + 16|0); $11 = HEAP32[$10>>2]|0; $12 = ($11|0)==($2|0); if (!($12)) { $13 = ((($1)) + 20|0); $14 = HEAP32[$13>>2]|0; $15 = ($14|0)==($2|0); if (!($15)) { $18 = ((($1)) + 32|0); HEAP32[$18>>2] = $3; HEAP32[$13>>2] = $2; $19 = ((($1)) + 40|0); $20 = HEAP32[$19>>2]|0; $21 = (($20) + 1)|0; HEAP32[$19>>2] = $21; $22 = ((($1)) + 36|0); $23 = HEAP32[$22>>2]|0; $24 = ($23|0)==(1); if ($24) { $25 = ((($1)) + 24|0); $26 = HEAP32[$25>>2]|0; $27 = ($26|0)==(2); if ($27) { $28 = ((($1)) + 54|0); HEAP8[$28>>0] = 1; } } $29 = ((($1)) + 44|0); HEAP32[$29>>2] = 4; break; } } $16 = ($3|0)==(1); if ($16) { $17 = ((($1)) + 32|0); HEAP32[$17>>2] = 1; } } } } while(0); return; } function __ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $4 = 0, $5 = 0, $6 = 0, label = 0, sp = 0; sp = STACKTOP; $4 = ((($1)) + 8|0); $5 = HEAP32[$4>>2]|0; $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0); if ($6) { __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3); } return; } function __ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $3 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = ($0|0)==($1|0); return ($3|0); } function __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $4 = ((($1)) + 16|0); $5 = HEAP32[$4>>2]|0; $6 = ($5|0)==(0|0); do { if ($6) { HEAP32[$4>>2] = $2; $7 = ((($1)) + 24|0); HEAP32[$7>>2] = $3; $8 = ((($1)) + 36|0); HEAP32[$8>>2] = 1; } else { $9 = ($5|0)==($2|0); if (!($9)) { $13 = ((($1)) + 36|0); $14 = HEAP32[$13>>2]|0; $15 = (($14) + 1)|0; HEAP32[$13>>2] = $15; $16 = ((($1)) + 24|0); HEAP32[$16>>2] = 2; $17 = ((($1)) + 54|0); HEAP8[$17>>0] = 1; break; } $10 = ((($1)) + 24|0); $11 = HEAP32[$10>>2]|0; $12 = ($11|0)==(2); if ($12) { HEAP32[$10>>2] = $3; } } } while(0); return; } function __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $4 = ((($1)) + 4|0); $5 = HEAP32[$4>>2]|0; $6 = ($5|0)==($2|0); if ($6) { $7 = ((($1)) + 28|0); $8 = HEAP32[$7>>2]|0; $9 = ($8|0)==(1); if (!($9)) { HEAP32[$7>>2] = $3; } } return; } function __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0; var $30 = 0, $31 = 0, $32 = 0, $33 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond22 = 0, label = 0, sp = 0; sp = STACKTOP; $5 = ((($1)) + 53|0); HEAP8[$5>>0] = 1; $6 = ((($1)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = ($7|0)==($3|0); do { if ($8) { $9 = ((($1)) + 52|0); HEAP8[$9>>0] = 1; $10 = ((($1)) + 16|0); $11 = HEAP32[$10>>2]|0; $12 = ($11|0)==(0|0); if ($12) { HEAP32[$10>>2] = $2; $13 = ((($1)) + 24|0); HEAP32[$13>>2] = $4; $14 = ((($1)) + 36|0); HEAP32[$14>>2] = 1; $15 = ((($1)) + 48|0); $16 = HEAP32[$15>>2]|0; $17 = ($16|0)==(1); $18 = ($4|0)==(1); $or$cond = $18 & $17; if (!($or$cond)) { break; } $19 = ((($1)) + 54|0); HEAP8[$19>>0] = 1; break; } $20 = ($11|0)==($2|0); if (!($20)) { $30 = ((($1)) + 36|0); $31 = HEAP32[$30>>2]|0; $32 = (($31) + 1)|0; HEAP32[$30>>2] = $32; $33 = ((($1)) + 54|0); HEAP8[$33>>0] = 1; break; } $21 = ((($1)) + 24|0); $22 = HEAP32[$21>>2]|0; $23 = ($22|0)==(2); if ($23) { HEAP32[$21>>2] = $4; $28 = $4; } else { $28 = $22; } $24 = ((($1)) + 48|0); $25 = HEAP32[$24>>2]|0; $26 = ($25|0)==(1); $27 = ($28|0)==(1); $or$cond22 = $26 & $27; if ($or$cond22) { $29 = ((($1)) + 54|0); HEAP8[$29>>0] = 1; } } } while(0); return; } function ___dynamic_cast($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, $or$cond = 0, $or$cond28 = 0, $or$cond30 = 0, $or$cond32 = 0, $spec$select = 0, $spec$select33 = 0, dest = 0, label = 0, sp = 0, stop = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $4 = sp; $5 = HEAP32[$0>>2]|0; $6 = ((($5)) + -8|0); $7 = HEAP32[$6>>2]|0; $8 = (($0) + ($7)|0); $9 = ((($5)) + -4|0); $10 = HEAP32[$9>>2]|0; HEAP32[$4>>2] = $2; $11 = ((($4)) + 4|0); HEAP32[$11>>2] = $0; $12 = ((($4)) + 8|0); HEAP32[$12>>2] = $1; $13 = ((($4)) + 12|0); HEAP32[$13>>2] = $3; $14 = ((($4)) + 16|0); $15 = ((($4)) + 20|0); $16 = ((($4)) + 24|0); $17 = ((($4)) + 28|0); $18 = ((($4)) + 32|0); $19 = ((($4)) + 40|0); dest=$14; stop=dest+36|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0));HEAP16[$14+36>>1]=0|0;HEAP8[$14+38>>0]=0|0; $20 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($10,$2,0)|0); L1: do { if ($20) { $21 = ((($4)) + 48|0); HEAP32[$21>>2] = 1; $22 = HEAP32[$10>>2]|0; $23 = ((($22)) + 20|0); $24 = HEAP32[$23>>2]|0; FUNCTION_TABLE_viiiiii[$24 & 255]($10,$4,$8,$8,1,0); $25 = HEAP32[$16>>2]|0; $26 = ($25|0)==(1); $spec$select = $26 ? $8 : 0; $$0 = $spec$select; } else { $27 = ((($4)) + 36|0); $28 = HEAP32[$10>>2]|0; $29 = ((($28)) + 24|0); $30 = HEAP32[$29>>2]|0; FUNCTION_TABLE_viiiii[$30 & 255]($10,$4,$8,1,0); $31 = HEAP32[$27>>2]|0; switch ($31|0) { case 0: { $32 = HEAP32[$19>>2]|0; $33 = ($32|0)==(1); $34 = HEAP32[$17>>2]|0; $35 = ($34|0)==(1); $or$cond = $33 & $35; $36 = HEAP32[$18>>2]|0; $37 = ($36|0)==(1); $or$cond28 = $or$cond & $37; $38 = HEAP32[$15>>2]|0; $spec$select33 = $or$cond28 ? $38 : 0; $$0 = $spec$select33; break L1; break; } case 1: { break; } default: { $$0 = 0; break L1; } } $39 = HEAP32[$16>>2]|0; $40 = ($39|0)==(1); if (!($40)) { $41 = HEAP32[$19>>2]|0; $42 = ($41|0)==(0); $43 = HEAP32[$17>>2]|0; $44 = ($43|0)==(1); $or$cond30 = $42 & $44; $45 = HEAP32[$18>>2]|0; $46 = ($45|0)==(1); $or$cond32 = $or$cond30 & $46; if (!($or$cond32)) { $$0 = 0; break; } } $47 = HEAP32[$14>>2]|0; $$0 = $47; } } while(0); STACKTOP = sp;return ($$0|0); } function __ZN10__cxxabiv120__si_class_type_infoD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZN10__cxxabiv116__shim_type_infoD2Ev($0); __ZdlPv($0); return; } function __ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; $5 = $5|0; var $10 = 0, $11 = 0, $12 = 0, $13 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $6 = ((($1)) + 8|0); $7 = HEAP32[$6>>2]|0; $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0); if ($8) { __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4); } else { $9 = ((($0)) + 8|0); $10 = HEAP32[$9>>2]|0; $11 = HEAP32[$10>>2]|0; $12 = ((($11)) + 20|0); $13 = HEAP32[$12>>2]|0; FUNCTION_TABLE_viiiiii[$13 & 255]($10,$1,$2,$3,$4,$5); } return; } function __ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $$037$off038 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0; var $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $5 = ((($1)) + 8|0); $6 = HEAP32[$5>>2]|0; $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0); do { if ($7) { __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3); } else { $8 = HEAP32[$1>>2]|0; $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0); if (!($9)) { $44 = ((($0)) + 8|0); $45 = HEAP32[$44>>2]|0; $46 = HEAP32[$45>>2]|0; $47 = ((($46)) + 24|0); $48 = HEAP32[$47>>2]|0; FUNCTION_TABLE_viiiii[$48 & 255]($45,$1,$2,$3,$4); break; } $10 = ((($1)) + 16|0); $11 = HEAP32[$10>>2]|0; $12 = ($11|0)==($2|0); if (!($12)) { $13 = ((($1)) + 20|0); $14 = HEAP32[$13>>2]|0; $15 = ($14|0)==($2|0); if (!($15)) { $18 = ((($1)) + 32|0); HEAP32[$18>>2] = $3; $19 = ((($1)) + 44|0); $20 = HEAP32[$19>>2]|0; $21 = ($20|0)==(4); if ($21) { break; } $22 = ((($1)) + 52|0); HEAP8[$22>>0] = 0; $23 = ((($1)) + 53|0); HEAP8[$23>>0] = 0; $24 = ((($0)) + 8|0); $25 = HEAP32[$24>>2]|0; $26 = HEAP32[$25>>2]|0; $27 = ((($26)) + 20|0); $28 = HEAP32[$27>>2]|0; FUNCTION_TABLE_viiiiii[$28 & 255]($25,$1,$2,$2,1,$4); $29 = HEAP8[$23>>0]|0; $30 = ($29<<24>>24)==(0); if ($30) { $$037$off038 = 0; label = 11; } else { $31 = HEAP8[$22>>0]|0; $32 = ($31<<24>>24)==(0); if ($32) { $$037$off038 = 1; label = 11; } else { label = 15; } } do { if ((label|0) == 11) { HEAP32[$13>>2] = $2; $33 = ((($1)) + 40|0); $34 = HEAP32[$33>>2]|0; $35 = (($34) + 1)|0; HEAP32[$33>>2] = $35; $36 = ((($1)) + 36|0); $37 = HEAP32[$36>>2]|0; $38 = ($37|0)==(1); if ($38) { $39 = ((($1)) + 24|0); $40 = HEAP32[$39>>2]|0; $41 = ($40|0)==(2); if ($41) { $42 = ((($1)) + 54|0); HEAP8[$42>>0] = 1; if ($$037$off038) { label = 15; break; } else { $43 = 4; break; } } } if ($$037$off038) { label = 15; } else { $43 = 4; } } } while(0); if ((label|0) == 15) { $43 = 3; } HEAP32[$19>>2] = $43; break; } } $16 = ($3|0)==(1); if ($16) { $17 = ((($1)) + 32|0); HEAP32[$17>>2] = 1; } } } while(0); return; } function __ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $10 = 0, $11 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $4 = ((($1)) + 8|0); $5 = HEAP32[$4>>2]|0; $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0); if ($6) { __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3); } else { $7 = ((($0)) + 8|0); $8 = HEAP32[$7>>2]|0; $9 = HEAP32[$8>>2]|0; $10 = ((($9)) + 28|0); $11 = HEAP32[$10>>2]|0; FUNCTION_TABLE_viiii[$11 & 255]($8,$1,$2,$3); } return; } function __ZNSt9type_infoD2Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZN10__cxxabiv112_GLOBAL__N_110construct_Ev() { var $0 = 0, $1 = 0, $vararg_buffer = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $vararg_buffer = sp; $0 = (_pthread_key_create((21872|0),(257|0))|0); $1 = ($0|0)==(0); if ($1) { STACKTOP = sp;return; } else { _abort_message(20787,$vararg_buffer); // unreachable; } } function __ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $vararg_buffer = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $vararg_buffer = sp; _free($0); $1 = HEAP32[5468]|0; $2 = (_pthread_setspecific(($1|0),(0|0))|0); $3 = ($2|0)==(0); if ($3) { STACKTOP = sp;return; } else { _abort_message(20837,$vararg_buffer); // unreachable; } } function __ZSt9terminatev() { var $0 = 0, $1 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = (___cxa_get_globals_fast()|0); $1 = ($0|0)==(0|0); if (!($1)) { $2 = HEAP32[$0>>2]|0; $3 = ($2|0)==(0|0); if (!($3)) { $4 = ((($2)) + 48|0); $5 = $4; $6 = $5; $7 = HEAP32[$6>>2]|0; $8 = (($5) + 4)|0; $9 = $8; $10 = HEAP32[$9>>2]|0; $11 = $7 & -256; $12 = ($11|0)==(1126902528); $13 = ($10|0)==(1129074247); $14 = $12 & $13; if ($14) { $15 = ((($2)) + 12|0); $16 = HEAP32[$15>>2]|0; __ZSt11__terminatePFvvE($16); // unreachable; } } } $17 = (__ZSt13get_terminatev()|0); __ZSt11__terminatePFvvE($17); // unreachable; } function __ZSt11__terminatePFvvE($0) { $0 = $0|0; var $vararg_buffer = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $vararg_buffer = sp; FUNCTION_TABLE_v[$0 & 511](); _abort_message(20890,$vararg_buffer); // unreachable; } function __ZSt13get_terminatev() { var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = HEAP32[877]|0; $1 = (($0) + 0)|0; HEAP32[877] = $1; $2 = $0; return ($2|0); } function __ZNSt9exceptionD2Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZNSt9exceptionD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZdlPv($0); return; } function __ZNKSt9exception4whatEv($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return (20930|0); } function __ZNSt11logic_errorD2Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; HEAP32[$0>>2] = (3620); $1 = ((($0)) + 4|0); __ZNSt3__218__libcpp_refstringD2Ev($1); return; } function __ZNSt11logic_errorD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZNSt11logic_errorD2Ev($0); __ZdlPv($0); return; } function __ZNKSt11logic_error4whatEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + 4|0); $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0); return ($2|0); } function __ZNKSt3__218__libcpp_refstring5c_strEv($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = HEAP32[$0>>2]|0; return ($1|0); } function __ZNSt3__218__libcpp_refstringD2Ev($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = (__ZNKSt3__218__libcpp_refstring15__uses_refcountEv($0)|0); if ($1) { $2 = HEAP32[$0>>2]|0; $3 = (__ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($2)|0); $4 = ((($3)) + 8|0); $5 = HEAP32[$4>>2]|0; $6 = (($5) + -1)|0; HEAP32[$4>>2] = $6; $7 = (($5) + -1)|0; $8 = ($7|0)<(0); if ($8) { __ZdlPv($3); } } return; } function __ZNSt3__215__refstring_imp12_GLOBAL__N_113rep_from_dataEPKc_238($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + -12|0); return ($1|0); } function __ZNSt13runtime_errorD2Ev($0) { $0 = $0|0; var $1 = 0, label = 0, sp = 0; sp = STACKTOP; HEAP32[$0>>2] = (3640); $1 = ((($0)) + 4|0); __ZNSt3__218__libcpp_refstringD2Ev($1); return; } function __ZNSt13runtime_errorD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZNSt13runtime_errorD2Ev($0); __ZdlPv($0); return; } function __ZNKSt13runtime_error4whatEv($0) { $0 = $0|0; var $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ((($0)) + 4|0); $2 = (__ZNKSt3__218__libcpp_refstring5c_strEv($1)|0); return ($2|0); } function __ZNSt12length_errorD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZNSt11logic_errorD2Ev($0); __ZdlPv($0); return; } function __ZN10__cxxabiv123__fundamental_type_infoD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZN10__cxxabiv116__shim_type_infoD2Ev($0); __ZdlPv($0); return; } function __ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $3 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0); return ($3|0); } function __ZN10__cxxabiv119__pointer_type_infoD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZN10__cxxabiv116__shim_type_infoD2Ev($0); __ZdlPv($0); return; } function __ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0 = 0, $$4 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0; var $28 = 0, $29 = 0, $3 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $4 = 0, $40 = 0, $41 = 0, $42 = 0, $43 = 0, $44 = 0, $5 = 0; var $6 = 0, $7 = 0, $8 = 0, $9 = 0, dest = 0, label = 0, sp = 0, stop = 0; sp = STACKTOP; STACKTOP = STACKTOP + 64|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(64|0); $3 = sp; $4 = HEAP32[$2>>2]|0; $5 = HEAP32[$4>>2]|0; HEAP32[$2>>2] = $5; $6 = (__ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,0)|0); if ($6) { $$4 = 1; } else { $7 = ($1|0)==(0|0); if ($7) { $$4 = 0; } else { $8 = (___dynamic_cast($1,1312,1416,0)|0); $9 = ($8|0)==(0|0); if ($9) { $$4 = 0; } else { $10 = ((($8)) + 8|0); $11 = HEAP32[$10>>2]|0; $12 = ((($0)) + 8|0); $13 = HEAP32[$12>>2]|0; $14 = $13 ^ -1; $15 = $11 & $14; $16 = ($15|0)==(0); if ($16) { $17 = ((($0)) + 12|0); $18 = HEAP32[$17>>2]|0; $19 = ((($8)) + 12|0); $20 = HEAP32[$19>>2]|0; $21 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($18,$20,0)|0); if ($21) { $$4 = 1; } else { $22 = HEAP32[$17>>2]|0; $23 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($22,1448,0)|0); if ($23) { $$4 = 1; } else { $24 = HEAP32[$17>>2]|0; $25 = ($24|0)==(0|0); if ($25) { $$4 = 0; } else { $26 = (___dynamic_cast($24,1312,1296,0)|0); $27 = ($26|0)==(0|0); if ($27) { $$4 = 0; } else { $28 = HEAP32[$19>>2]|0; $29 = ($28|0)==(0|0); if ($29) { $$4 = 0; } else { $30 = (___dynamic_cast($28,1312,1296,0)|0); $31 = ($30|0)==(0|0); if ($31) { $$4 = 0; } else { $32 = ((($3)) + 4|0); dest=$32; stop=dest+52|0; do { HEAP32[dest>>2]=0|0; dest=dest+4|0; } while ((dest|0) < (stop|0)); HEAP32[$3>>2] = $30; $33 = ((($3)) + 8|0); HEAP32[$33>>2] = $26; $34 = ((($3)) + 12|0); HEAP32[$34>>2] = -1; $35 = ((($3)) + 48|0); HEAP32[$35>>2] = 1; $36 = HEAP32[$30>>2]|0; $37 = ((($36)) + 28|0); $38 = HEAP32[$37>>2]|0; $39 = HEAP32[$2>>2]|0; FUNCTION_TABLE_viiii[$38 & 255]($30,$3,$39,1); $40 = ((($3)) + 24|0); $41 = HEAP32[$40>>2]|0; $42 = ($41|0)==(1); if ($42) { $43 = ((($3)) + 16|0); $44 = HEAP32[$43>>2]|0; HEAP32[$2>>2] = $44; $$0 = 1; } else { $$0 = 0; } $$4 = $$0; } } } } } } } else { $$4 = 0; } } } } STACKTOP = sp;return ($$4|0); } function __ZNK10__cxxabiv117__pbase_type_info9can_catchEPKNS_16__shim_type_infoERPv($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $$0 = 0, $3 = 0, $4 = 0, label = 0, sp = 0; sp = STACKTOP; $3 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$1,0)|0); if ($3) { $$0 = 1; } else { $4 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($1,1456,0)|0); $$0 = $4; } return ($$0|0); } function __ZN10__cxxabiv121__vmi_class_type_infoD0Ev($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; __ZN10__cxxabiv116__shim_type_infoD2Ev($0); __ZdlPv($0); return; } function __ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; $5 = $5|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0; var $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $6 = ((($1)) + 8|0); $7 = HEAP32[$6>>2]|0; $8 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$7,$5)|0); if ($8) { __ZNK10__cxxabiv117__class_type_info29process_static_type_above_dstEPNS_19__dynamic_cast_infoEPKvS4_i(0,$1,$2,$3,$4); } else { $9 = ((($1)) + 52|0); $10 = HEAP8[$9>>0]|0; $11 = ((($1)) + 53|0); $12 = HEAP8[$11>>0]|0; $13 = ((($0)) + 16|0); $14 = ((($0)) + 12|0); $15 = HEAP32[$14>>2]|0; $16 = (((($0)) + 16|0) + ($15<<3)|0); HEAP8[$9>>0] = 0; HEAP8[$11>>0] = 0; __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($13,$1,$2,$3,$4,$5); $17 = ($15|0)>(1); L4: do { if ($17) { $18 = ((($0)) + 24|0); $19 = ((($1)) + 24|0); $20 = ((($0)) + 8|0); $21 = ((($1)) + 54|0); $$0 = $18; while(1) { $22 = HEAP8[$21>>0]|0; $23 = ($22<<24>>24)==(0); if (!($23)) { break L4; } $24 = HEAP8[$9>>0]|0; $25 = ($24<<24>>24)==(0); if ($25) { $31 = HEAP8[$11>>0]|0; $32 = ($31<<24>>24)==(0); if (!($32)) { $33 = HEAP32[$20>>2]|0; $34 = $33 & 1; $35 = ($34|0)==(0); if ($35) { break L4; } } } else { $26 = HEAP32[$19>>2]|0; $27 = ($26|0)==(1); if ($27) { break L4; } $28 = HEAP32[$20>>2]|0; $29 = $28 & 2; $30 = ($29|0)==(0); if ($30) { break L4; } } HEAP8[$9>>0] = 0; HEAP8[$11>>0] = 0; __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$0,$1,$2,$3,$4,$5); $36 = ((($$0)) + 8|0); $37 = ($36>>>0)<($16>>>0); if ($37) { $$0 = $36; } else { break; } } } } while(0); HEAP8[$9>>0] = $10; HEAP8[$11>>0] = $12; } return; } function __ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $$0 = 0, $$081$off0 = 0, $$084 = 0, $$085$off0 = 0, $$1 = 0, $$182$off0 = 0, $$186$off0 = 0, $$2 = 0, $$283$off0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0; var $21 = 0, $22 = 0, $23 = 0, $24 = 0, $25 = 0, $26 = 0, $27 = 0, $28 = 0, $29 = 0, $30 = 0, $31 = 0, $32 = 0, $33 = 0, $34 = 0, $35 = 0, $36 = 0, $37 = 0, $38 = 0, $39 = 0, $40 = 0; var $41 = 0, $42 = 0, $43 = 0, $44 = 0, $45 = 0, $46 = 0, $47 = 0, $48 = 0, $49 = 0, $5 = 0, $50 = 0, $51 = 0, $52 = 0, $53 = 0, $54 = 0, $55 = 0, $56 = 0, $57 = 0, $58 = 0, $59 = 0; var $6 = 0, $60 = 0, $61 = 0, $62 = 0, $63 = 0, $64 = 0, $65 = 0, $66 = 0, $67 = 0, $68 = 0, $69 = 0, $7 = 0, $70 = 0, $71 = 0, $72 = 0, $73 = 0, $74 = 0, $75 = 0, $76 = 0, $77 = 0; var $78 = 0, $79 = 0, $8 = 0, $80 = 0, $81 = 0, $82 = 0, $83 = 0, $84 = 0, $85 = 0, $86 = 0, $87 = 0, $88 = 0, $89 = 0, $9 = 0, $90 = 0, $91 = 0, $92 = 0, label = 0, sp = 0; sp = STACKTOP; $5 = ((($1)) + 8|0); $6 = HEAP32[$5>>2]|0; $7 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$6,$4)|0); L1: do { if ($7) { __ZNK10__cxxabiv117__class_type_info29process_static_type_below_dstEPNS_19__dynamic_cast_infoEPKvi(0,$1,$2,$3); } else { $8 = HEAP32[$1>>2]|0; $9 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$8,$4)|0); if (!($9)) { $56 = ((($0)) + 16|0); $57 = ((($0)) + 12|0); $58 = HEAP32[$57>>2]|0; $59 = (((($0)) + 16|0) + ($58<<3)|0); __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($56,$1,$2,$3,$4); $60 = ((($0)) + 24|0); $61 = ($58|0)>(1); if (!($61)) { break; } $62 = ((($0)) + 8|0); $63 = HEAP32[$62>>2]|0; $64 = $63 & 2; $65 = ($64|0)==(0); if ($65) { $66 = ((($1)) + 36|0); $67 = HEAP32[$66>>2]|0; $68 = ($67|0)==(1); if (!($68)) { $74 = $63 & 1; $75 = ($74|0)==(0); if ($75) { $86 = ((($1)) + 54|0); $$2 = $60; while(1) { $87 = HEAP8[$86>>0]|0; $88 = ($87<<24>>24)==(0); if (!($88)) { break L1; } $89 = HEAP32[$66>>2]|0; $90 = ($89|0)==(1); if ($90) { break L1; } __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$2,$1,$2,$3,$4); $91 = ((($$2)) + 8|0); $92 = ($91>>>0)<($59>>>0); if ($92) { $$2 = $91; } else { break L1; } } } $76 = ((($1)) + 24|0); $77 = ((($1)) + 54|0); $$1 = $60; while(1) { $78 = HEAP8[$77>>0]|0; $79 = ($78<<24>>24)==(0); if (!($79)) { break L1; } $80 = HEAP32[$66>>2]|0; $81 = ($80|0)==(1); if ($81) { $82 = HEAP32[$76>>2]|0; $83 = ($82|0)==(1); if ($83) { break L1; } } __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$1,$1,$2,$3,$4); $84 = ((($$1)) + 8|0); $85 = ($84>>>0)<($59>>>0); if ($85) { $$1 = $84; } else { break L1; } } } } $69 = ((($1)) + 54|0); $$0 = $60; while(1) { $70 = HEAP8[$69>>0]|0; $71 = ($70<<24>>24)==(0); if (!($71)) { break L1; } __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($$0,$1,$2,$3,$4); $72 = ((($$0)) + 8|0); $73 = ($72>>>0)<($59>>>0); if ($73) { $$0 = $72; } else { break L1; } } } $10 = ((($1)) + 16|0); $11 = HEAP32[$10>>2]|0; $12 = ($11|0)==($2|0); if (!($12)) { $13 = ((($1)) + 20|0); $14 = HEAP32[$13>>2]|0; $15 = ($14|0)==($2|0); if (!($15)) { $18 = ((($1)) + 32|0); HEAP32[$18>>2] = $3; $19 = ((($1)) + 44|0); $20 = HEAP32[$19>>2]|0; $21 = ($20|0)==(4); if ($21) { break; } $22 = ((($0)) + 16|0); $23 = ((($0)) + 12|0); $24 = HEAP32[$23>>2]|0; $25 = (((($0)) + 16|0) + ($24<<3)|0); $26 = ((($1)) + 52|0); $27 = ((($1)) + 53|0); $28 = ((($1)) + 54|0); $29 = ((($0)) + 8|0); $30 = ((($1)) + 24|0); $$081$off0 = 0;$$084 = $22;$$085$off0 = 0; L32: while(1) { $31 = ($$084>>>0)<($25>>>0); if (!($31)) { $$283$off0 = $$081$off0; label = 18; break; } HEAP8[$26>>0] = 0; HEAP8[$27>>0] = 0; __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($$084,$1,$2,$2,1,$4); $32 = HEAP8[$28>>0]|0; $33 = ($32<<24>>24)==(0); if (!($33)) { $$283$off0 = $$081$off0; label = 18; break; } $34 = HEAP8[$27>>0]|0; $35 = ($34<<24>>24)==(0); do { if ($35) { $$182$off0 = $$081$off0;$$186$off0 = $$085$off0; } else { $36 = HEAP8[$26>>0]|0; $37 = ($36<<24>>24)==(0); if ($37) { $43 = HEAP32[$29>>2]|0; $44 = $43 & 1; $45 = ($44|0)==(0); if ($45) { $$283$off0 = 1; label = 18; break L32; } else { $$182$off0 = 1;$$186$off0 = $$085$off0; break; } } $38 = HEAP32[$30>>2]|0; $39 = ($38|0)==(1); if ($39) { label = 23; break L32; } $40 = HEAP32[$29>>2]|0; $41 = $40 & 2; $42 = ($41|0)==(0); if ($42) { label = 23; break L32; } else { $$182$off0 = 1;$$186$off0 = 1; } } } while(0); $46 = ((($$084)) + 8|0); $$081$off0 = $$182$off0;$$084 = $46;$$085$off0 = $$186$off0; } do { if ((label|0) == 18) { if (!($$085$off0)) { HEAP32[$13>>2] = $2; $47 = ((($1)) + 40|0); $48 = HEAP32[$47>>2]|0; $49 = (($48) + 1)|0; HEAP32[$47>>2] = $49; $50 = ((($1)) + 36|0); $51 = HEAP32[$50>>2]|0; $52 = ($51|0)==(1); if ($52) { $53 = HEAP32[$30>>2]|0; $54 = ($53|0)==(2); if ($54) { HEAP8[$28>>0] = 1; if ($$283$off0) { label = 23; break; } else { $55 = 4; break; } } } } if ($$283$off0) { label = 23; } else { $55 = 4; } } } while(0); if ((label|0) == 23) { $55 = 3; } HEAP32[$19>>2] = $55; break; } } $16 = ($3|0)==(1); if ($16) { $17 = ((($1)) + 32|0); HEAP32[$17>>2] = 1; } } } while(0); return; } function __ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $4 = ((($1)) + 8|0); $5 = HEAP32[$4>>2]|0; $6 = (__ZN10__cxxabiv18is_equalEPKSt9type_infoS2_b($0,$5,0)|0); L1: do { if ($6) { __ZNK10__cxxabiv117__class_type_info24process_found_base_classEPNS_19__dynamic_cast_infoEPvi(0,$1,$2,$3); } else { $7 = ((($0)) + 16|0); $8 = ((($0)) + 12|0); $9 = HEAP32[$8>>2]|0; $10 = (((($0)) + 16|0) + ($9<<3)|0); __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($7,$1,$2,$3); $11 = ($9|0)>(1); if ($11) { $12 = ((($0)) + 24|0); $13 = ((($1)) + 54|0); $$0 = $12; while(1) { __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($$0,$1,$2,$3); $14 = HEAP8[$13>>0]|0; $15 = ($14<<24>>24)==(0); if (!($15)) { break L1; } $16 = ((($$0)) + 8|0); $17 = ($16>>>0)<($10>>>0); if ($17) { $$0 = $16; } else { break; } } } } } while(0); return; } function __ZNK10__cxxabiv122__base_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi($0,$1,$2,$3) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $4 = ((($0)) + 4|0); $5 = HEAP32[$4>>2]|0; $6 = $5 >> 8; $7 = $5 & 1; $8 = ($7|0)==(0); if ($8) { $$0 = $6; } else { $9 = HEAP32[$2>>2]|0; $10 = (($9) + ($6)|0); $11 = HEAP32[$10>>2]|0; $$0 = $11; } $12 = HEAP32[$0>>2]|0; $13 = HEAP32[$12>>2]|0; $14 = ((($13)) + 28|0); $15 = HEAP32[$14>>2]|0; $16 = (($2) + ($$0)|0); $17 = $5 & 2; $18 = ($17|0)==(0); $19 = $18 ? 2 : $3; FUNCTION_TABLE_viiii[$15 & 255]($12,$1,$16,$19); return; } function __ZNK10__cxxabiv122__base_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib($0,$1,$2,$3,$4,$5) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; $5 = $5|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $21 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $6 = ((($0)) + 4|0); $7 = HEAP32[$6>>2]|0; $8 = $7 >> 8; $9 = $7 & 1; $10 = ($9|0)==(0); if ($10) { $$0 = $8; } else { $11 = HEAP32[$3>>2]|0; $12 = (($11) + ($8)|0); $13 = HEAP32[$12>>2]|0; $$0 = $13; } $14 = HEAP32[$0>>2]|0; $15 = HEAP32[$14>>2]|0; $16 = ((($15)) + 20|0); $17 = HEAP32[$16>>2]|0; $18 = (($3) + ($$0)|0); $19 = $7 & 2; $20 = ($19|0)==(0); $21 = $20 ? 2 : $4; FUNCTION_TABLE_viiiiii[$17 & 255]($14,$1,$2,$18,$21,$5); return; } function __ZNK10__cxxabiv122__base_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib($0,$1,$2,$3,$4) { $0 = $0|0; $1 = $1|0; $2 = $2|0; $3 = $3|0; $4 = $4|0; var $$0 = 0, $10 = 0, $11 = 0, $12 = 0, $13 = 0, $14 = 0, $15 = 0, $16 = 0, $17 = 0, $18 = 0, $19 = 0, $20 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; $5 = ((($0)) + 4|0); $6 = HEAP32[$5>>2]|0; $7 = $6 >> 8; $8 = $6 & 1; $9 = ($8|0)==(0); if ($9) { $$0 = $7; } else { $10 = HEAP32[$2>>2]|0; $11 = (($10) + ($7)|0); $12 = HEAP32[$11>>2]|0; $$0 = $12; } $13 = HEAP32[$0>>2]|0; $14 = HEAP32[$13>>2]|0; $15 = ((($14)) + 24|0); $16 = HEAP32[$15>>2]|0; $17 = (($2) + ($$0)|0); $18 = $6 & 2; $19 = ($18|0)==(0); $20 = $19 ? 2 : $3; FUNCTION_TABLE_viiiii[$16 & 255]($13,$1,$17,$20,$4); return; } function ___cxa_guard_acquire($0) { $0 = $0|0; var $$0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = HEAP8[$0>>0]|0; $2 = ($1<<24>>24)==(1); if ($2) { $$0 = 0; } else { HEAP8[$0>>0] = 1; $$0 = 1; } return ($$0|0); } function ___cxa_guard_release($0) { $0 = $0|0; var label = 0, sp = 0; sp = STACKTOP; return; } function __ZSt15get_new_handlerv() { var $0 = 0, $1 = 0, $2 = 0, label = 0, sp = 0; sp = STACKTOP; $0 = HEAP32[5469]|0; $1 = (($0) + 0)|0; HEAP32[5469] = $1; $2 = $0; return ($2|0); } function ___cxa_can_catch($0,$1,$2) { $0 = $0|0; $1 = $1|0; $2 = $2|0; var $10 = 0, $3 = 0, $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0, label = 0, sp = 0; sp = STACKTOP; STACKTOP = STACKTOP + 16|0; if ((STACKTOP|0) >= (STACK_MAX|0)) abortStackOverflow(16|0); $3 = sp; $4 = HEAP32[$2>>2]|0; HEAP32[$3>>2] = $4; $5 = HEAP32[$0>>2]|0; $6 = ((($5)) + 16|0); $7 = HEAP32[$6>>2]|0; $8 = (FUNCTION_TABLE_iiii[$7 & 255]($0,$1,$3)|0); $9 = $8&1; if ($8) { $10 = HEAP32[$3>>2]|0; HEAP32[$2>>2] = $10; } STACKTOP = sp;return ($9|0); } function ___cxa_is_pointer_type($0) { $0 = $0|0; var $1 = 0, $2 = 0, $3 = 0, $phitmp = 0, $phitmp1 = 0, label = 0, sp = 0; sp = STACKTOP; $1 = ($0|0)==(0|0); if ($1) { $3 = 0; } else { $2 = (___dynamic_cast($0,1312,1416,0)|0); $phitmp = ($2|0)!=(0|0); $phitmp1 = $phitmp&1; $3 = $phitmp1; } return ($3|0); } function runPostSets() { } function ___muldsi3($a, $b) { $a = $a | 0; $b = $b | 0; var $1 = 0, $2 = 0, $3 = 0, $6 = 0, $8 = 0, $11 = 0, $12 = 0; $1 = $a & 65535; $2 = $b & 65535; $3 = Math_imul($2, $1) | 0; $6 = $a >>> 16; $8 = ($3 >>> 16) + (Math_imul($2, $6) | 0) | 0; $11 = $b >>> 16; $12 = Math_imul($11, $1) | 0; return (tempRet0 = (($8 >>> 16) + (Math_imul($11, $6) | 0) | 0) + ((($8 & 65535) + $12 | 0) >>> 16) | 0, 0 | ($8 + $12 << 16 | $3 & 65535)) | 0; } function ___muldi3($a$0, $a$1, $b$0, $b$1) { $a$0 = $a$0 | 0; $a$1 = $a$1 | 0; $b$0 = $b$0 | 0; $b$1 = $b$1 | 0; var $x_sroa_0_0_extract_trunc = 0, $y_sroa_0_0_extract_trunc = 0, $1$0 = 0, $1$1 = 0, $2 = 0; $x_sroa_0_0_extract_trunc = $a$0; $y_sroa_0_0_extract_trunc = $b$0; $1$0 = ___muldsi3($x_sroa_0_0_extract_trunc, $y_sroa_0_0_extract_trunc) | 0; $1$1 = tempRet0; $2 = Math_imul($a$1, $y_sroa_0_0_extract_trunc) | 0; return (tempRet0 = ((Math_imul($b$1, $x_sroa_0_0_extract_trunc) | 0) + $2 | 0) + $1$1 | $1$1 & 0, 0 | $1$0 & -1) | 0; } function _i64Add(a, b, c, d) { /* x = a + b*2^32 y = c + d*2^32 result = l + h*2^32 */ a = a|0; b = b|0; c = c|0; d = d|0; var l = 0, h = 0; l = (a + c)>>>0; h = (b + d + (((l>>>0) < (a>>>0))|0))>>>0; // Add carry from low word to high word on overflow. return ((tempRet0 = h,l|0)|0); } function _i64Subtract(a, b, c, d) { a = a|0; b = b|0; c = c|0; d = d|0; var l = 0, h = 0; l = (a - c)>>>0; h = (b - d)>>>0; h = (b - d - (((c>>>0) > (a>>>0))|0))>>>0; // Borrow one from high word to low word on underflow. return ((tempRet0 = h,l|0)|0); } function _llvm_cttz_i32(x) { // Note: Currently doesn't take isZeroUndef() x = x | 0; return (x ? (31 - (Math_clz32((x ^ (x - 1))) | 0) | 0) : 32) | 0; } function ___udivmoddi4($a$0, $a$1, $b$0, $b$1, $rem) { $a$0 = $a$0 | 0; $a$1 = $a$1 | 0; $b$0 = $b$0 | 0; $b$1 = $b$1 | 0; $rem = $rem | 0; var $n_sroa_0_0_extract_trunc = 0, $n_sroa_1_4_extract_shift$0 = 0, $n_sroa_1_4_extract_trunc = 0, $d_sroa_0_0_extract_trunc = 0, $d_sroa_1_4_extract_shift$0 = 0, $d_sroa_1_4_extract_trunc = 0, $4 = 0, $17 = 0, $37 = 0, $49 = 0, $51 = 0, $57 = 0, $58 = 0, $66 = 0, $78 = 0, $86 = 0, $88 = 0, $89 = 0, $91 = 0, $92 = 0, $95 = 0, $105 = 0, $117 = 0, $119 = 0, $125 = 0, $126 = 0, $130 = 0, $q_sroa_1_1_ph = 0, $q_sroa_0_1_ph = 0, $r_sroa_1_1_ph = 0, $r_sroa_0_1_ph = 0, $sr_1_ph = 0, $d_sroa_0_0_insert_insert99$0 = 0, $d_sroa_0_0_insert_insert99$1 = 0, $137$0 = 0, $137$1 = 0, $carry_0203 = 0, $sr_1202 = 0, $r_sroa_0_1201 = 0, $r_sroa_1_1200 = 0, $q_sroa_0_1199 = 0, $q_sroa_1_1198 = 0, $147 = 0, $149 = 0, $r_sroa_0_0_insert_insert42$0 = 0, $r_sroa_0_0_insert_insert42$1 = 0, $150$1 = 0, $151$0 = 0, $152 = 0, $154$0 = 0, $r_sroa_0_0_extract_trunc = 0, $r_sroa_1_4_extract_trunc = 0, $155 = 0, $carry_0_lcssa$0 = 0, $carry_0_lcssa$1 = 0, $r_sroa_0_1_lcssa = 0, $r_sroa_1_1_lcssa = 0, $q_sroa_0_1_lcssa = 0, $q_sroa_1_1_lcssa = 0, $q_sroa_0_0_insert_ext75$0 = 0, $q_sroa_0_0_insert_ext75$1 = 0, $q_sroa_0_0_insert_insert77$1 = 0, $_0$0 = 0, $_0$1 = 0; $n_sroa_0_0_extract_trunc = $a$0; $n_sroa_1_4_extract_shift$0 = $a$1; $n_sroa_1_4_extract_trunc = $n_sroa_1_4_extract_shift$0; $d_sroa_0_0_extract_trunc = $b$0; $d_sroa_1_4_extract_shift$0 = $b$1; $d_sroa_1_4_extract_trunc = $d_sroa_1_4_extract_shift$0; if (($n_sroa_1_4_extract_trunc | 0) == 0) { $4 = ($rem | 0) != 0; if (($d_sroa_1_4_extract_trunc | 0) == 0) { if ($4) { HEAP32[$rem >> 2] = ($n_sroa_0_0_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0); HEAP32[$rem + 4 >> 2] = 0; } $_0$1 = 0; $_0$0 = ($n_sroa_0_0_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0; return (tempRet0 = $_0$1, $_0$0) | 0; } else { if (!$4) { $_0$1 = 0; $_0$0 = 0; return (tempRet0 = $_0$1, $_0$0) | 0; } HEAP32[$rem >> 2] = $a$0 & -1; HEAP32[$rem + 4 >> 2] = $a$1 & 0; $_0$1 = 0; $_0$0 = 0; return (tempRet0 = $_0$1, $_0$0) | 0; } } $17 = ($d_sroa_1_4_extract_trunc | 0) == 0; do { if (($d_sroa_0_0_extract_trunc | 0) == 0) { if ($17) { if (($rem | 0) != 0) { HEAP32[$rem >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_0_0_extract_trunc >>> 0); HEAP32[$rem + 4 >> 2] = 0; } $_0$1 = 0; $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_0_0_extract_trunc >>> 0) >>> 0; return (tempRet0 = $_0$1, $_0$0) | 0; } if (($n_sroa_0_0_extract_trunc | 0) == 0) { if (($rem | 0) != 0) { HEAP32[$rem >> 2] = 0; HEAP32[$rem + 4 >> 2] = ($n_sroa_1_4_extract_trunc >>> 0) % ($d_sroa_1_4_extract_trunc >>> 0); } $_0$1 = 0; $_0$0 = ($n_sroa_1_4_extract_trunc >>> 0) / ($d_sroa_1_4_extract_trunc >>> 0) >>> 0; return (tempRet0 = $_0$1, $_0$0) | 0; } $37 = $d_sroa_1_4_extract_trunc - 1 | 0; if (($37 & $d_sroa_1_4_extract_trunc | 0) == 0) { if (($rem | 0) != 0) { HEAP32[$rem >> 2] = 0 | $a$0 & -1; HEAP32[$rem + 4 >> 2] = $37 & $n_sroa_1_4_extract_trunc | $a$1 & 0; } $_0$1 = 0; $_0$0 = $n_sroa_1_4_extract_trunc >>> ((_llvm_cttz_i32($d_sroa_1_4_extract_trunc | 0) | 0) >>> 0); return (tempRet0 = $_0$1, $_0$0) | 0; } $49 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0; $51 = $49 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; if ($51 >>> 0 <= 30) { $57 = $51 + 1 | 0; $58 = 31 - $51 | 0; $sr_1_ph = $57; $r_sroa_0_1_ph = $n_sroa_1_4_extract_trunc << $58 | $n_sroa_0_0_extract_trunc >>> ($57 >>> 0); $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($57 >>> 0); $q_sroa_0_1_ph = 0; $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $58; break; } if (($rem | 0) == 0) { $_0$1 = 0; $_0$0 = 0; return (tempRet0 = $_0$1, $_0$0) | 0; } HEAP32[$rem >> 2] = 0 | $a$0 & -1; HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; $_0$1 = 0; $_0$0 = 0; return (tempRet0 = $_0$1, $_0$0) | 0; } else { if (!$17) { $117 = Math_clz32($d_sroa_1_4_extract_trunc | 0) | 0; $119 = $117 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; if ($119 >>> 0 <= 31) { $125 = $119 + 1 | 0; $126 = 31 - $119 | 0; $130 = $119 - 31 >> 31; $sr_1_ph = $125; $r_sroa_0_1_ph = $n_sroa_0_0_extract_trunc >>> ($125 >>> 0) & $130 | $n_sroa_1_4_extract_trunc << $126; $r_sroa_1_1_ph = $n_sroa_1_4_extract_trunc >>> ($125 >>> 0) & $130; $q_sroa_0_1_ph = 0; $q_sroa_1_1_ph = $n_sroa_0_0_extract_trunc << $126; break; } if (($rem | 0) == 0) { $_0$1 = 0; $_0$0 = 0; return (tempRet0 = $_0$1, $_0$0) | 0; } HEAP32[$rem >> 2] = 0 | $a$0 & -1; HEAP32[$rem + 4 >> 2] = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; $_0$1 = 0; $_0$0 = 0; return (tempRet0 = $_0$1, $_0$0) | 0; } $66 = $d_sroa_0_0_extract_trunc - 1 | 0; if (($66 & $d_sroa_0_0_extract_trunc | 0) != 0) { $86 = (Math_clz32($d_sroa_0_0_extract_trunc | 0) | 0) + 33 | 0; $88 = $86 - (Math_clz32($n_sroa_1_4_extract_trunc | 0) | 0) | 0; $89 = 64 - $88 | 0; $91 = 32 - $88 | 0; $92 = $91 >> 31; $95 = $88 - 32 | 0; $105 = $95 >> 31; $sr_1_ph = $88; $r_sroa_0_1_ph = $91 - 1 >> 31 & $n_sroa_1_4_extract_trunc >>> ($95 >>> 0) | ($n_sroa_1_4_extract_trunc << $91 | $n_sroa_0_0_extract_trunc >>> ($88 >>> 0)) & $105; $r_sroa_1_1_ph = $105 & $n_sroa_1_4_extract_trunc >>> ($88 >>> 0); $q_sroa_0_1_ph = $n_sroa_0_0_extract_trunc << $89 & $92; $q_sroa_1_1_ph = ($n_sroa_1_4_extract_trunc << $89 | $n_sroa_0_0_extract_trunc >>> ($95 >>> 0)) & $92 | $n_sroa_0_0_extract_trunc << $91 & $88 - 33 >> 31; break; } if (($rem | 0) != 0) { HEAP32[$rem >> 2] = $66 & $n_sroa_0_0_extract_trunc; HEAP32[$rem + 4 >> 2] = 0; } if (($d_sroa_0_0_extract_trunc | 0) == 1) { $_0$1 = $n_sroa_1_4_extract_shift$0 | $a$1 & 0; $_0$0 = 0 | $a$0 & -1; return (tempRet0 = $_0$1, $_0$0) | 0; } else { $78 = _llvm_cttz_i32($d_sroa_0_0_extract_trunc | 0) | 0; $_0$1 = 0 | $n_sroa_1_4_extract_trunc >>> ($78 >>> 0); $_0$0 = $n_sroa_1_4_extract_trunc << 32 - $78 | $n_sroa_0_0_extract_trunc >>> ($78 >>> 0) | 0; return (tempRet0 = $_0$1, $_0$0) | 0; } } } while (0); if (($sr_1_ph | 0) == 0) { $q_sroa_1_1_lcssa = $q_sroa_1_1_ph; $q_sroa_0_1_lcssa = $q_sroa_0_1_ph; $r_sroa_1_1_lcssa = $r_sroa_1_1_ph; $r_sroa_0_1_lcssa = $r_sroa_0_1_ph; $carry_0_lcssa$1 = 0; $carry_0_lcssa$0 = 0; } else { $d_sroa_0_0_insert_insert99$0 = 0 | $b$0 & -1; $d_sroa_0_0_insert_insert99$1 = $d_sroa_1_4_extract_shift$0 | $b$1 & 0; $137$0 = _i64Add($d_sroa_0_0_insert_insert99$0 | 0, $d_sroa_0_0_insert_insert99$1 | 0, -1, -1) | 0; $137$1 = tempRet0; $q_sroa_1_1198 = $q_sroa_1_1_ph; $q_sroa_0_1199 = $q_sroa_0_1_ph; $r_sroa_1_1200 = $r_sroa_1_1_ph; $r_sroa_0_1201 = $r_sroa_0_1_ph; $sr_1202 = $sr_1_ph; $carry_0203 = 0; while (1) { $147 = $q_sroa_0_1199 >>> 31 | $q_sroa_1_1198 << 1; $149 = $carry_0203 | $q_sroa_0_1199 << 1; $r_sroa_0_0_insert_insert42$0 = 0 | ($r_sroa_0_1201 << 1 | $q_sroa_1_1198 >>> 31); $r_sroa_0_0_insert_insert42$1 = $r_sroa_0_1201 >>> 31 | $r_sroa_1_1200 << 1 | 0; _i64Subtract($137$0 | 0, $137$1 | 0, $r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0) | 0; $150$1 = tempRet0; $151$0 = $150$1 >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1; $152 = $151$0 & 1; $154$0 = _i64Subtract($r_sroa_0_0_insert_insert42$0 | 0, $r_sroa_0_0_insert_insert42$1 | 0, $151$0 & $d_sroa_0_0_insert_insert99$0 | 0, ((($150$1 | 0) < 0 ? -1 : 0) >> 31 | (($150$1 | 0) < 0 ? -1 : 0) << 1) & $d_sroa_0_0_insert_insert99$1 | 0) | 0; $r_sroa_0_0_extract_trunc = $154$0; $r_sroa_1_4_extract_trunc = tempRet0; $155 = $sr_1202 - 1 | 0; if (($155 | 0) == 0) { break; } else { $q_sroa_1_1198 = $147; $q_sroa_0_1199 = $149; $r_sroa_1_1200 = $r_sroa_1_4_extract_trunc; $r_sroa_0_1201 = $r_sroa_0_0_extract_trunc; $sr_1202 = $155; $carry_0203 = $152; } } $q_sroa_1_1_lcssa = $147; $q_sroa_0_1_lcssa = $149; $r_sroa_1_1_lcssa = $r_sroa_1_4_extract_trunc; $r_sroa_0_1_lcssa = $r_sroa_0_0_extract_trunc; $carry_0_lcssa$1 = 0; $carry_0_lcssa$0 = $152; } $q_sroa_0_0_insert_ext75$0 = $q_sroa_0_1_lcssa; $q_sroa_0_0_insert_ext75$1 = 0; $q_sroa_0_0_insert_insert77$1 = $q_sroa_1_1_lcssa | $q_sroa_0_0_insert_ext75$1; if (($rem | 0) != 0) { HEAP32[$rem >> 2] = 0 | $r_sroa_0_1_lcssa; HEAP32[$rem + 4 >> 2] = $r_sroa_1_1_lcssa | 0; } $_0$1 = (0 | $q_sroa_0_0_insert_ext75$0) >>> 31 | $q_sroa_0_0_insert_insert77$1 << 1 | ($q_sroa_0_0_insert_ext75$1 << 1 | $q_sroa_0_0_insert_ext75$0 >>> 31) & 0 | $carry_0_lcssa$1; $_0$0 = ($q_sroa_0_0_insert_ext75$0 << 1 | 0 >>> 31) & -2 | $carry_0_lcssa$0; return (tempRet0 = $_0$1, $_0$0) | 0; } function ___udivdi3($a$0, $a$1, $b$0, $b$1) { $a$0 = $a$0 | 0; $a$1 = $a$1 | 0; $b$0 = $b$0 | 0; $b$1 = $b$1 | 0; var $1$0 = 0; $1$0 = ___udivmoddi4($a$0, $a$1, $b$0, $b$1, 0) | 0; return $1$0 | 0; } function _bitshift64Ashr(low, high, bits) { low = low|0; high = high|0; bits = bits|0; var ander = 0; if ((bits|0) < 32) { ander = ((1 << bits) - 1)|0; tempRet0 = high >> bits; return (low >>> bits) | ((high&ander) << (32 - bits)); } tempRet0 = (high|0) < 0 ? -1 : 0; return (high >> (bits - 32))|0; } function _bitshift64Lshr(low, high, bits) { low = low|0; high = high|0; bits = bits|0; var ander = 0; if ((bits|0) < 32) { ander = ((1 << bits) - 1)|0; tempRet0 = high >>> bits; return (low >>> bits) | ((high&ander) << (32 - bits)); } tempRet0 = 0; return (high >>> (bits - 32))|0; } function _bitshift64Shl(low, high, bits) { low = low|0; high = high|0; bits = bits|0; var ander = 0; if ((bits|0) < 32) { ander = ((1 << bits) - 1)|0; tempRet0 = (high << bits) | ((low&(ander << (32 - bits))) >>> (32 - bits)); return low << bits; } tempRet0 = low << (bits - 32); return 0; } function _llvm_bswap_i32(x) { x = x|0; return (((x&0xff)<<24) | (((x>>8)&0xff)<<16) | (((x>>16)&0xff)<<8) | (x>>>24))|0; } function _memcpy(dest, src, num) { dest = dest|0; src = src|0; num = num|0; var ret = 0; var aligned_dest_end = 0; var block_aligned_dest_end = 0; var dest_end = 0; // Test against a benchmarked cutoff limit for when HEAPU8.set() becomes faster to use. if ((num|0) >= 8192 ) { return _emscripten_memcpy_big(dest|0, src|0, num|0)|0; } ret = dest|0; dest_end = (dest + num)|0; if ((dest&3) == (src&3)) { // The initial unaligned < 4-byte front. while (dest & 3) { if ((num|0) == 0) return ret|0; HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); dest = (dest+1)|0; src = (src+1)|0; num = (num-1)|0; } aligned_dest_end = (dest_end & -4)|0; block_aligned_dest_end = (aligned_dest_end - 64)|0; while ((dest|0) <= (block_aligned_dest_end|0) ) { HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); HEAP32[(((dest)+(4))>>2)]=((HEAP32[(((src)+(4))>>2)])|0); HEAP32[(((dest)+(8))>>2)]=((HEAP32[(((src)+(8))>>2)])|0); HEAP32[(((dest)+(12))>>2)]=((HEAP32[(((src)+(12))>>2)])|0); HEAP32[(((dest)+(16))>>2)]=((HEAP32[(((src)+(16))>>2)])|0); HEAP32[(((dest)+(20))>>2)]=((HEAP32[(((src)+(20))>>2)])|0); HEAP32[(((dest)+(24))>>2)]=((HEAP32[(((src)+(24))>>2)])|0); HEAP32[(((dest)+(28))>>2)]=((HEAP32[(((src)+(28))>>2)])|0); HEAP32[(((dest)+(32))>>2)]=((HEAP32[(((src)+(32))>>2)])|0); HEAP32[(((dest)+(36))>>2)]=((HEAP32[(((src)+(36))>>2)])|0); HEAP32[(((dest)+(40))>>2)]=((HEAP32[(((src)+(40))>>2)])|0); HEAP32[(((dest)+(44))>>2)]=((HEAP32[(((src)+(44))>>2)])|0); HEAP32[(((dest)+(48))>>2)]=((HEAP32[(((src)+(48))>>2)])|0); HEAP32[(((dest)+(52))>>2)]=((HEAP32[(((src)+(52))>>2)])|0); HEAP32[(((dest)+(56))>>2)]=((HEAP32[(((src)+(56))>>2)])|0); HEAP32[(((dest)+(60))>>2)]=((HEAP32[(((src)+(60))>>2)])|0); dest = (dest+64)|0; src = (src+64)|0; } while ((dest|0) < (aligned_dest_end|0) ) { HEAP32[((dest)>>2)]=((HEAP32[((src)>>2)])|0); dest = (dest+4)|0; src = (src+4)|0; } } else { // In the unaligned copy case, unroll a bit as well. aligned_dest_end = (dest_end - 4)|0; while ((dest|0) < (aligned_dest_end|0) ) { HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); HEAP8[(((dest)+(1))>>0)]=((HEAP8[(((src)+(1))>>0)])|0); HEAP8[(((dest)+(2))>>0)]=((HEAP8[(((src)+(2))>>0)])|0); HEAP8[(((dest)+(3))>>0)]=((HEAP8[(((src)+(3))>>0)])|0); dest = (dest+4)|0; src = (src+4)|0; } } // The remaining unaligned < 4 byte tail. while ((dest|0) < (dest_end|0)) { HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); dest = (dest+1)|0; src = (src+1)|0; } return ret|0; } function _memmove(dest, src, num) { dest = dest|0; src = src|0; num = num|0; var ret = 0; if (((src|0) < (dest|0)) & ((dest|0) < ((src + num)|0))) { // Unlikely case: Copy backwards in a safe manner ret = dest; src = (src + num)|0; dest = (dest + num)|0; while ((num|0) > 0) { dest = (dest - 1)|0; src = (src - 1)|0; num = (num - 1)|0; HEAP8[((dest)>>0)]=((HEAP8[((src)>>0)])|0); } dest = ret; } else { _memcpy(dest, src, num) | 0; } return dest | 0; } function _memset(ptr, value, num) { ptr = ptr|0; value = value|0; num = num|0; var end = 0, aligned_end = 0, block_aligned_end = 0, value4 = 0; end = (ptr + num)|0; value = value & 0xff; if ((num|0) >= 67 /* 64 bytes for an unrolled loop + 3 bytes for unaligned head*/) { while ((ptr&3) != 0) { HEAP8[((ptr)>>0)]=value; ptr = (ptr+1)|0; } aligned_end = (end & -4)|0; block_aligned_end = (aligned_end - 64)|0; value4 = value | (value << 8) | (value << 16) | (value << 24); while((ptr|0) <= (block_aligned_end|0)) { HEAP32[((ptr)>>2)]=value4; HEAP32[(((ptr)+(4))>>2)]=value4; HEAP32[(((ptr)+(8))>>2)]=value4; HEAP32[(((ptr)+(12))>>2)]=value4; HEAP32[(((ptr)+(16))>>2)]=value4; HEAP32[(((ptr)+(20))>>2)]=value4; HEAP32[(((ptr)+(24))>>2)]=value4; HEAP32[(((ptr)+(28))>>2)]=value4; HEAP32[(((ptr)+(32))>>2)]=value4; HEAP32[(((ptr)+(36))>>2)]=value4; HEAP32[(((ptr)+(40))>>2)]=value4; HEAP32[(((ptr)+(44))>>2)]=value4; HEAP32[(((ptr)+(48))>>2)]=value4; HEAP32[(((ptr)+(52))>>2)]=value4; HEAP32[(((ptr)+(56))>>2)]=value4; HEAP32[(((ptr)+(60))>>2)]=value4; ptr = (ptr + 64)|0; } while ((ptr|0) < (aligned_end|0) ) { HEAP32[((ptr)>>2)]=value4; ptr = (ptr+4)|0; } } // The remaining bytes. while ((ptr|0) < (end|0)) { HEAP8[((ptr)>>0)]=value; ptr = (ptr+1)|0; } return (end-num)|0; } function _pthread_mutex_lock(x) { x = x | 0; return 0; } function _pthread_mutex_unlock(x) { x = x | 0; return 0; } function _sbrk(increment) { increment = increment|0; var oldDynamicTop = 0; var oldDynamicTopOnChange = 0; var newDynamicTop = 0; var totalMemory = 0; oldDynamicTop = HEAP32[DYNAMICTOP_PTR>>2]|0; newDynamicTop = oldDynamicTop + increment | 0; if (((increment|0) > 0 & (newDynamicTop|0) < (oldDynamicTop|0)) // Detect and fail if we would wrap around signed 32-bit int. | (newDynamicTop|0) < 0) { // Also underflow, sbrk() should be able to be used to subtract. abortOnCannotGrowMemory()|0; ___setErrNo(12); return -1; } HEAP32[DYNAMICTOP_PTR>>2] = newDynamicTop; totalMemory = getTotalMemory()|0; if ((newDynamicTop|0) > (totalMemory|0)) { if ((enlargeMemory()|0) == 0) { HEAP32[DYNAMICTOP_PTR>>2] = oldDynamicTop; ___setErrNo(12); return -1; } } return oldDynamicTop|0; } function dynCall_i(index) { index = index|0; return FUNCTION_TABLE_i[index&255]()|0; } function dynCall_ii(index,a1) { index = index|0; a1=a1|0; return FUNCTION_TABLE_ii[index&255](a1|0)|0; } function dynCall_iii(index,a1,a2) { index = index|0; a1=a1|0; a2=a2|0; return FUNCTION_TABLE_iii[index&255](a1|0,a2|0)|0; } function dynCall_iiii(index,a1,a2,a3) { index = index|0; a1=a1|0; a2=a2|0; a3=a3|0; return FUNCTION_TABLE_iiii[index&255](a1|0,a2|0,a3|0)|0; } function dynCall_v(index) { index = index|0; FUNCTION_TABLE_v[index&511](); } function dynCall_vi(index,a1) { index = index|0; a1=a1|0; FUNCTION_TABLE_vi[index&511](a1|0); } function dynCall_vii(index,a1,a2) { index = index|0; a1=a1|0; a2=a2|0; FUNCTION_TABLE_vii[index&255](a1|0,a2|0); } function dynCall_viii(index,a1,a2,a3) { index = index|0; a1=a1|0; a2=a2|0; a3=a3|0; FUNCTION_TABLE_viii[index&255](a1|0,a2|0,a3|0); } function dynCall_viiii(index,a1,a2,a3,a4) { index = index|0; a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; FUNCTION_TABLE_viiii[index&255](a1|0,a2|0,a3|0,a4|0); } function dynCall_viiiii(index,a1,a2,a3,a4,a5) { index = index|0; a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; FUNCTION_TABLE_viiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0); } function dynCall_viiiiii(index,a1,a2,a3,a4,a5,a6) { index = index|0; a1=a1|0; a2=a2|0; a3=a3|0; a4=a4|0; a5=a5|0; a6=a6|0; FUNCTION_TABLE_viiiiii[index&255](a1|0,a2|0,a3|0,a4|0,a5|0,a6|0); } function b0() { ; nullFunc_i(0);return 0; } function b1(p0) { p0 = p0|0; nullFunc_ii(1);return 0; } function b2(p0,p1) { p0 = p0|0;p1 = p1|0; nullFunc_iii(2);return 0; } function b3(p0,p1,p2) { p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_iiii(3);return 0; } function b4() { ; nullFunc_v(4); } function ___cxa_pure_virtual__wrapper() { ; ___cxa_pure_virtual(); } function b5(p0) { p0 = p0|0; nullFunc_vi(5); } function b6(p0,p1) { p0 = p0|0;p1 = p1|0; nullFunc_vii(6); } function b7(p0,p1,p2) { p0 = p0|0;p1 = p1|0;p2 = p2|0; nullFunc_viii(7); } function b8(p0,p1,p2,p3) { p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0; nullFunc_viiii(8); } function b9(p0,p1,p2,p3,p4) { p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0; nullFunc_viiiii(9); } function b10(p0,p1,p2,p3,p4,p5) { p0 = p0|0;p1 = p1|0;p2 = p2|0;p3 = p3|0;p4 = p4|0;p5 = p5|0; nullFunc_viiiiii(10); } // EMSCRIPTEN_END_FUNCS var FUNCTION_TABLE_i = [b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,b0,__ZN10emscripten8internal12operator_newI6LASZipJEEEPT_DpOT0_,b0,b0 ,b0,b0,b0,b0,b0,b0,b0,__ZN10emscripten8internal12operator_newI13DynamicLASZipJEEEPT_DpOT0_,b0,b0,b0,b0,b0,b0,b0,b0,b0]; var FUNCTION_TABLE_ii = [b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZNKSt13runtime_error4whatEv,b1,b1,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEv,b1,b1,b1,b1,b1,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE11target_typeEv,b1,b1,b1,b1,b1,b1 ,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1 ,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1 ,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1 ,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1 ,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1 ,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,___stdio_close,b1,b1,b1,b1,b1,__ZNKSt3__217bad_function_call4whatEv,b1,b1,b1,b1,b1,b1,b1,b1,b1 ,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZNKSt9exception4whatEv,b1,b1,__ZNKSt11logic_error4whatEv,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,b1,__ZN10emscripten8internal13getActualTypeI6LASZipEEPKvPT_,b1,b1,__ZN10emscripten8internal7InvokerIP6LASZipJEE6invokeEPFS3_vE,b1 ,b1,b1,b1,__ZN6LASZip8getCountEv,b1,__ZN10emscripten8internal13getActualTypeI13DynamicLASZipEEPKvPT_,b1,b1,__ZN10emscripten8internal7InvokerIP13DynamicLASZipJEE6invokeEPFS3_vE,b1,b1,b1,b1,b1,b1,b1,b1]; var FUNCTION_TABLE_iii = [b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE6targetERKSt9type_info,b2,b2,b2,b2,b2,b2,b2 ,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEE10decompressEPc,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2 ,b2,b2,__ZN6laszip7formats10base_field11compressRawEPKc,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,__ZN6laszip7formats10base_field13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,b2,b2 ,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE13__get_deleterERKSt9type_info,b2 ,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE13__get_deleterERKSt9type_info,b2,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEE10decompressEPc,b2,b2,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEE13decompressRawEPc,b2 ,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2 ,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEE13decompressRawEPc,b2,b2,b2,__ZNKSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,__ZNKSt3__219__shared_weak_count13__get_deleterERKSt9type_info,b2,b2,b2,b2,b2 ,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2 ,b2,b2,b2,b2,__ZN10emscripten8internal13MethodInvokerIM6LASZipFjvEjPS2_JEE6invokeERKS4_S5_,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2,b2]; var FUNCTION_TABLE_iiii = [b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,___stdio_write,___stdio_seek,___stdout_write,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,__ZNK10__cxxabiv117__class_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,__ZNK10__cxxabiv123__fundamental_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,__ZNK10__cxxabiv119__pointer_type_info9can_catchEPKNS_16__shim_type_infoERPv,b3,b3,b3,b3,b3,b3,b3,b3,b3 ,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3,b3]; var FUNCTION_TABLE_v = [b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,___cxa_pure_virtual__wrapper,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,__ZL25default_terminate_handlerv,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,__ZN10__cxxabiv112_GLOBAL__N_110construct_Ev,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4,b4 ,b4,b4,b4]; var FUNCTION_TABLE_vi = [b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7streams13memory_streamENS_14default_deleteIS3_EENS_9allocatorIS3_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip2io6reader10basic_fileINS1_7streams13memory_streamEEENS_14default_deleteIS7_EENS_9allocatorIS7_EEE21__on_zero_shared_weakEv,__ZN6laszip13invalid_magicD2Ev,__ZN6laszip13invalid_magicD0Ev,b5,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED2Ev,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EED0Ev,b5,b5,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7destroyEv,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE18destroy_deallocateEv,b5,b5,b5,__ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED2Ev,__ZNSt3__210__function6__baseIFvRN6laszip2io6headerEEED0Ev,b5,__ZN6laszip21old_style_compressionD2Ev,__ZN6laszip21old_style_compressionD0Ev,__ZN6laszip14not_compressedD2Ev ,__ZN6laszip14not_compressedD0Ev,__ZN6laszip25laszip_format_unsupportedD2Ev,__ZN6laszip25laszip_format_unsupportedD0Ev,__ZN6laszip13no_laszip_vlrD2Ev,__ZN6laszip13no_laszip_vlrD0Ev,__ZN6laszip22chunk_table_read_errorD2Ev,__ZN6laszip22chunk_table_read_errorD0Ev,__ZN6laszip13not_supportedD2Ev,__ZN6laszip13not_supportedD0Ev,__ZN6laszip26unknown_chunk_table_formatD2Ev,__ZN6laszip26unknown_chunk_table_formatD0Ev,__ZN6laszip11end_of_fileD2Ev,__ZN6laszip11end_of_fileD0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS_14default_deleteIS9_EENS_9allocatorIS9_EEE21__on_zero_shared_weakEv,__ZN6laszip19unknown_schema_typeD2Ev,__ZN6laszip19unknown_schema_typeD0Ev,b5,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED2Ev,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEEED0Ev,__ZN6laszip7formats20dynamic_decompressorD2Ev,__ZN6laszip7formats20dynamic_decompressorD0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv ,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISC_EEEEED0Ev,b5,b5,__ZN6laszip7formats10base_fieldD2Ev,__ZN6laszip7formats10base_fieldD0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las7gpstimeENS0_20standard_diff_methodISC_EEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las7gpstimeENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las3rgbENS0_20standard_diff_methodISC_EEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las3rgbENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_5fieldINS0_3las10extrabytesENS0_20standard_diff_methodISC_EEEEED0Ev ,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_5fieldINS2_3las10extrabytesENS2_20standard_diff_methodISE_EEEEEENS_14default_deleteISI_EENS_9allocatorISI_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEEEEEEENS_14default_deleteISK_EENS_9allocatorISK_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_3rgbENSE_ISH_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_3rgbENSG_ISJ_EEEEEEEEENS_14default_deleteISN_EENS_9allocatorISN_EEE21__on_zero_shared_weakEv ,b5,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED2Ev,__ZN6laszip7formats21dynamic_decompressor1INS_8decoders10arithmeticINS_2io18__ifstream_wrapperINS_7streams13memory_streamEEEEENS0_19record_decompressorIJNS0_5fieldINS0_3las7point10ENS0_20standard_diff_methodISD_EEEENSB_INSC_7gpstimeENSE_ISH_EEEENSB_INSC_3rgbENSE_ISK_EEEEEEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats21dynamic_decompressor1INS1_8decoders10arithmeticINS1_2io18__ifstream_wrapperINS1_7streams13memory_streamEEEEENS2_19record_decompressorIJNS2_5fieldINS2_3las7point10ENS2_20standard_diff_methodISF_EEEENSD_INSE_7gpstimeENSG_ISJ_EEEENSD_INSE_3rgbENSG_ISM_EEEEEEEEENS_14default_deleteISQ_EENS_9allocatorISQ_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIP10buf_streamNS_14default_deleteIS1_EENS_9allocatorIS1_EEE21__on_zero_shared_weakEv,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip8decoders10arithmeticI10buf_streamEENS_14default_deleteIS5_EENS_9allocatorIS5_EEE21__on_zero_shared_weakEv,b5,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED2Ev,__ZN6laszip7formats26dynamic_field_decompressorINS_8decoders10arithmeticI10buf_streamEEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_field_decompressorINS1_8decoders10arithmeticI10buf_streamEEEENS_14default_deleteIS8_EENS_9allocatorIS8_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIiNS0_20standard_diff_methodIiEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev ,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIiNS2_20standard_diff_methodIiEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIjNS0_20standard_diff_methodIjEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIjNS2_20standard_diff_methodIjEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIaNS0_20standard_diff_methodIaEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIaNS2_20standard_diff_methodIaEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIsNS0_20standard_diff_methodIsEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIsNS2_20standard_diff_methodIsEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldIhNS0_20standard_diff_methodIhEEEEED0Ev ,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldIhNS2_20standard_diff_methodIhEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED2Ev,__ZN6laszip7formats26dynamic_decompressor_fieldINS_8decoders10arithmeticI10buf_streamEENS0_5fieldItNS0_20standard_diff_methodItEEEEED0Ev,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED2Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEED0Ev,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE16__on_zero_sharedEv,b5,__ZNSt3__220__shared_ptr_pointerIPN6laszip7formats26dynamic_decompressor_fieldINS1_8decoders10arithmeticI10buf_streamEENS2_5fieldItNS2_20standard_diff_methodItEEEEEENS_14default_deleteISC_EENS_9allocatorISC_EEE21__on_zero_shared_weakEv,b5,b5,b5,b5,__ZNSt3__217bad_function_callD2Ev,__ZNSt3__217bad_function_callD0Ev,b5,__ZNSt3__214__shared_countD2Ev,__ZNSt3__214__shared_countD0Ev,__ZNSt3__219__shared_weak_countD0Ev,b5,b5,__ZN10__cxxabiv116__shim_type_infoD2Ev,__ZN10__cxxabiv117__class_type_infoD0Ev,__ZNK10__cxxabiv116__shim_type_info5noop1Ev,__ZNK10__cxxabiv116__shim_type_info5noop2Ev ,b5,b5,b5,b5,__ZN10__cxxabiv120__si_class_type_infoD0Ev,b5,b5,b5,__ZNSt9exceptionD2Ev,__ZNSt9exceptionD0Ev,b5,__ZNSt11logic_errorD2Ev,__ZNSt11logic_errorD0Ev,b5,__ZNSt13runtime_errorD2Ev,__ZNSt13runtime_errorD0Ev,__ZNSt12length_errorD0Ev,__ZN10__cxxabiv123__fundamental_type_infoD0Ev,b5,__ZN10__cxxabiv119__pointer_type_infoD0Ev,b5,__ZN10__cxxabiv121__vmi_class_type_infoD0Ev,b5,b5,b5,b5,__ZN10emscripten8internal14raw_destructorI6LASZipEEvPT_,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,__ZN10emscripten8internal14raw_destructorI13DynamicLASZipEEvPT_,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,__ZN10__cxxabiv112_GLOBAL__N_19destruct_EPv,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5,b5 ,b5,b5,b5]; var FUNCTION_TABLE_vii = [b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,__ZNKSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EE7__cloneEPNS0_6__baseISE_EE,b6,b6,__ZNSt3__210__function6__funcIZN6laszip2io6reader10basic_fileINS2_7streams13memory_streamEE11_validatorsEvEUlRNS3_6headerEE_NS_9allocatorISB_EEFvSA_EEclESA_,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6,b6 ,b6,__ZN6LASZip8getPointEi,b6,b6,b6,b6,b6,b6,b6,b6,b6,__ZN13DynamicLASZip16addFieldFloatingEj,b6,__ZN13DynamicLASZip14addFieldSignedEj,__ZN13DynamicLASZip16addFieldUnsignedEj,__ZN13DynamicLASZip8getPointEi,b6]; var FUNCTION_TABLE_viii = [b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7 ,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7 ,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7 ,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7 ,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7 ,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7 ,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7 ,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,b7,__ZN6LASZip4openEjj ,b7,b7,__ZN10emscripten8internal13MethodInvokerIM6LASZipFviEvPS2_JiEE6invokeERKS4_S5_i,b7,b7,b7,b7,b7,b7,__ZN13DynamicLASZip4openEjj,b7,b7,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjEvPS2_JjEE6invokeERKS4_S5_j,b7,b7,b7,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFviEvPS2_JiEE6invokeERKS4_S5_i]; var FUNCTION_TABLE_viiii = [b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8 ,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8 ,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8 ,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8 ,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8 ,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8 ,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8 ,b8,b8,b8,__ZNK10__cxxabiv117__class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,__ZNK10__cxxabiv120__si_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,b8,__ZNK10__cxxabiv121__vmi_class_type_info27has_unambiguous_public_baseEPNS_19__dynamic_cast_infoEPvi,b8,b8,b8,b8,b8 ,__ZN10emscripten8internal13MethodInvokerIM6LASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8,b8,b8,b8,__ZN10emscripten8internal13MethodInvokerIM13DynamicLASZipFvjjEvPS2_JjjEE6invokeERKS4_S5_jj,b8,b8,b8,b8,b8,b8]; var FUNCTION_TABLE_viiiii = [b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9 ,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9 ,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9 ,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9 ,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9 ,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9 ,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9 ,b9,b9,__ZNK10__cxxabiv117__class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,__ZNK10__cxxabiv120__si_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,__ZNK10__cxxabiv121__vmi_class_type_info16search_below_dstEPNS_19__dynamic_cast_infoEPKvib,b9,b9,b9,b9,b9,b9 ,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9,b9]; var FUNCTION_TABLE_viiiiii = [b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10 ,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10 ,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10 ,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10 ,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10 ,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10 ,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10 ,b10,__ZNK10__cxxabiv117__class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,__ZNK10__cxxabiv120__si_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,__ZNK10__cxxabiv121__vmi_class_type_info16search_above_dstEPNS_19__dynamic_cast_infoEPKvS4_ib,b10,b10,b10,b10,b10,b10,b10 ,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10,b10]; return { __GLOBAL__sub_I_bind_cpp: __GLOBAL__sub_I_bind_cpp, __GLOBAL__sub_I_laz_perf_cpp: __GLOBAL__sub_I_laz_perf_cpp, ___cxa_can_catch: ___cxa_can_catch, ___cxa_is_pointer_type: ___cxa_is_pointer_type, ___errno_location: ___errno_location, ___getTypeName: ___getTypeName, ___muldi3: ___muldi3, ___udivdi3: ___udivdi3, _bitshift64Ashr: _bitshift64Ashr, _bitshift64Lshr: _bitshift64Lshr, _bitshift64Shl: _bitshift64Shl, _fflush: _fflush, _free: _free, _i64Add: _i64Add, _i64Subtract: _i64Subtract, _llvm_bswap_i32: _llvm_bswap_i32, _malloc: _malloc, _memcpy: _memcpy, _memmove: _memmove, _memset: _memset, _pthread_mutex_lock: _pthread_mutex_lock, _pthread_mutex_unlock: _pthread_mutex_unlock, _sbrk: _sbrk, dynCall_i: dynCall_i, dynCall_ii: dynCall_ii, dynCall_iii: dynCall_iii, dynCall_iiii: dynCall_iiii, dynCall_v: dynCall_v, dynCall_vi: dynCall_vi, dynCall_vii: dynCall_vii, dynCall_viii: dynCall_viii, dynCall_viiii: dynCall_viiii, dynCall_viiiii: dynCall_viiiii, dynCall_viiiiii: dynCall_viiiiii, establishStackSpace: establishStackSpace, getTempRet0: getTempRet0, runPostSets: runPostSets, setTempRet0: setTempRet0, setThrew: setThrew, stackAlloc: stackAlloc, stackRestore: stackRestore, stackSave: stackSave }; }) // EMSCRIPTEN_END_ASM (Module.asmGlobalArg, Module.asmLibraryArg, buffer); var real___GLOBAL__sub_I_bind_cpp = asm["__GLOBAL__sub_I_bind_cpp"]; asm["__GLOBAL__sub_I_bind_cpp"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real___GLOBAL__sub_I_bind_cpp.apply(null, arguments); }; var real___GLOBAL__sub_I_laz_perf_cpp = asm["__GLOBAL__sub_I_laz_perf_cpp"]; asm["__GLOBAL__sub_I_laz_perf_cpp"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real___GLOBAL__sub_I_laz_perf_cpp.apply(null, arguments); }; var real____cxa_can_catch = asm["___cxa_can_catch"]; asm["___cxa_can_catch"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real____cxa_can_catch.apply(null, arguments); }; var real____cxa_is_pointer_type = asm["___cxa_is_pointer_type"]; asm["___cxa_is_pointer_type"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real____cxa_is_pointer_type.apply(null, arguments); }; var real____errno_location = asm["___errno_location"]; asm["___errno_location"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real____errno_location.apply(null, arguments); }; var real____getTypeName = asm["___getTypeName"]; asm["___getTypeName"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real____getTypeName.apply(null, arguments); }; var real____muldi3 = asm["___muldi3"]; asm["___muldi3"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real____muldi3.apply(null, arguments); }; var real____udivdi3 = asm["___udivdi3"]; asm["___udivdi3"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real____udivdi3.apply(null, arguments); }; var real__bitshift64Ashr = asm["_bitshift64Ashr"]; asm["_bitshift64Ashr"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__bitshift64Ashr.apply(null, arguments); }; var real__bitshift64Lshr = asm["_bitshift64Lshr"]; asm["_bitshift64Lshr"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__bitshift64Lshr.apply(null, arguments); }; var real__bitshift64Shl = asm["_bitshift64Shl"]; asm["_bitshift64Shl"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__bitshift64Shl.apply(null, arguments); }; var real__fflush = asm["_fflush"]; asm["_fflush"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__fflush.apply(null, arguments); }; var real__free = asm["_free"]; asm["_free"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__free.apply(null, arguments); }; var real__i64Add = asm["_i64Add"]; asm["_i64Add"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__i64Add.apply(null, arguments); }; var real__i64Subtract = asm["_i64Subtract"]; asm["_i64Subtract"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__i64Subtract.apply(null, arguments); }; var real__llvm_bswap_i32 = asm["_llvm_bswap_i32"]; asm["_llvm_bswap_i32"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__llvm_bswap_i32.apply(null, arguments); }; var real__malloc = asm["_malloc"]; asm["_malloc"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__malloc.apply(null, arguments); }; var real__memmove = asm["_memmove"]; asm["_memmove"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__memmove.apply(null, arguments); }; var real__pthread_mutex_lock = asm["_pthread_mutex_lock"]; asm["_pthread_mutex_lock"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__pthread_mutex_lock.apply(null, arguments); }; var real__pthread_mutex_unlock = asm["_pthread_mutex_unlock"]; asm["_pthread_mutex_unlock"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__pthread_mutex_unlock.apply(null, arguments); }; var real__sbrk = asm["_sbrk"]; asm["_sbrk"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real__sbrk.apply(null, arguments); }; var real_establishStackSpace = asm["establishStackSpace"]; asm["establishStackSpace"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real_establishStackSpace.apply(null, arguments); }; var real_getTempRet0 = asm["getTempRet0"]; asm["getTempRet0"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real_getTempRet0.apply(null, arguments); }; var real_setTempRet0 = asm["setTempRet0"]; asm["setTempRet0"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real_setTempRet0.apply(null, arguments); }; var real_setThrew = asm["setThrew"]; asm["setThrew"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real_setThrew.apply(null, arguments); }; var real_stackAlloc = asm["stackAlloc"]; asm["stackAlloc"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real_stackAlloc.apply(null, arguments); }; var real_stackRestore = asm["stackRestore"]; asm["stackRestore"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real_stackRestore.apply(null, arguments); }; var real_stackSave = asm["stackSave"]; asm["stackSave"] = function() { assert(runtimeInitialized, 'you need to wait for the runtime to be ready (e.g. wait for main() to be called)'); assert(!runtimeExited, 'the runtime was exited (use NO_EXIT_RUNTIME to keep it alive after main() exits)'); return real_stackSave.apply(null, arguments); }; var __GLOBAL__sub_I_bind_cpp = Module["__GLOBAL__sub_I_bind_cpp"] = asm["__GLOBAL__sub_I_bind_cpp"]; var __GLOBAL__sub_I_laz_perf_cpp = Module["__GLOBAL__sub_I_laz_perf_cpp"] = asm["__GLOBAL__sub_I_laz_perf_cpp"]; var ___cxa_can_catch = Module["___cxa_can_catch"] = asm["___cxa_can_catch"]; var ___cxa_is_pointer_type = Module["___cxa_is_pointer_type"] = asm["___cxa_is_pointer_type"]; var ___errno_location = Module["___errno_location"] = asm["___errno_location"]; var ___getTypeName = Module["___getTypeName"] = asm["___getTypeName"]; var ___muldi3 = Module["___muldi3"] = asm["___muldi3"]; var ___udivdi3 = Module["___udivdi3"] = asm["___udivdi3"]; var _bitshift64Ashr = Module["_bitshift64Ashr"] = asm["_bitshift64Ashr"]; var _bitshift64Lshr = Module["_bitshift64Lshr"] = asm["_bitshift64Lshr"]; var _bitshift64Shl = Module["_bitshift64Shl"] = asm["_bitshift64Shl"]; var _fflush = Module["_fflush"] = asm["_fflush"]; 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 _malloc = Module["_malloc"] = asm["_malloc"]; var _memcpy = Module["_memcpy"] = asm["_memcpy"]; var _memmove = Module["_memmove"] = asm["_memmove"]; var _memset = Module["_memset"] = asm["_memset"]; var _pthread_mutex_lock = Module["_pthread_mutex_lock"] = asm["_pthread_mutex_lock"]; var _pthread_mutex_unlock = Module["_pthread_mutex_unlock"] = asm["_pthread_mutex_unlock"]; var _sbrk = Module["_sbrk"] = asm["_sbrk"]; var establishStackSpace = Module["establishStackSpace"] = asm["establishStackSpace"]; var getTempRet0 = Module["getTempRet0"] = asm["getTempRet0"]; var runPostSets = Module["runPostSets"] = asm["runPostSets"]; var setTempRet0 = Module["setTempRet0"] = asm["setTempRet0"]; var setThrew = Module["setThrew"] = asm["setThrew"]; var stackAlloc = Module["stackAlloc"] = asm["stackAlloc"]; var stackRestore = Module["stackRestore"] = asm["stackRestore"]; var stackSave = Module["stackSave"] = asm["stackSave"]; var dynCall_i = Module["dynCall_i"] = asm["dynCall_i"]; 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_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"]; ; // === Auto-generated postamble setup entry stuff === Module['asm'] = asm; if (!Module["intArrayFromString"]) Module["intArrayFromString"] = function() { abort("'intArrayFromString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["intArrayToString"]) Module["intArrayToString"] = function() { abort("'intArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["ccall"]) Module["ccall"] = function() { abort("'ccall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["cwrap"]) Module["cwrap"] = function() { abort("'cwrap' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["setValue"]) Module["setValue"] = function() { abort("'setValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["getValue"]) Module["getValue"] = function() { abort("'getValue' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["allocate"]) Module["allocate"] = function() { abort("'allocate' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["getMemory"]) Module["getMemory"] = function() { abort("'getMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["Pointer_stringify"]) Module["Pointer_stringify"] = function() { abort("'Pointer_stringify' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["AsciiToString"]) Module["AsciiToString"] = function() { abort("'AsciiToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stringToAscii"]) Module["stringToAscii"] = function() { abort("'stringToAscii' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["UTF8ArrayToString"]) Module["UTF8ArrayToString"] = function() { abort("'UTF8ArrayToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["UTF8ToString"]) Module["UTF8ToString"] = function() { abort("'UTF8ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stringToUTF8Array"]) Module["stringToUTF8Array"] = function() { abort("'stringToUTF8Array' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stringToUTF8"]) Module["stringToUTF8"] = function() { abort("'stringToUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["lengthBytesUTF8"]) Module["lengthBytesUTF8"] = function() { abort("'lengthBytesUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["UTF16ToString"]) Module["UTF16ToString"] = function() { abort("'UTF16ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stringToUTF16"]) Module["stringToUTF16"] = function() { abort("'stringToUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["lengthBytesUTF16"]) Module["lengthBytesUTF16"] = function() { abort("'lengthBytesUTF16' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["UTF32ToString"]) Module["UTF32ToString"] = function() { abort("'UTF32ToString' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stringToUTF32"]) Module["stringToUTF32"] = function() { abort("'stringToUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["lengthBytesUTF32"]) Module["lengthBytesUTF32"] = function() { abort("'lengthBytesUTF32' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["allocateUTF8"]) Module["allocateUTF8"] = function() { abort("'allocateUTF8' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stackTrace"]) Module["stackTrace"] = function() { abort("'stackTrace' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["addOnPreRun"]) Module["addOnPreRun"] = function() { abort("'addOnPreRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["addOnInit"]) Module["addOnInit"] = function() { abort("'addOnInit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["addOnPreMain"]) Module["addOnPreMain"] = function() { abort("'addOnPreMain' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["addOnExit"]) Module["addOnExit"] = function() { abort("'addOnExit' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["addOnPostRun"]) Module["addOnPostRun"] = function() { abort("'addOnPostRun' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["writeStringToMemory"]) Module["writeStringToMemory"] = function() { abort("'writeStringToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["writeArrayToMemory"]) Module["writeArrayToMemory"] = function() { abort("'writeArrayToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["writeAsciiToMemory"]) Module["writeAsciiToMemory"] = function() { abort("'writeAsciiToMemory' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["addRunDependency"]) Module["addRunDependency"] = function() { abort("'addRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["removeRunDependency"]) Module["removeRunDependency"] = function() { abort("'removeRunDependency' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS"]) Module["FS"] = function() { abort("'FS' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["FS_createFolder"]) Module["FS_createFolder"] = function() { abort("'FS_createFolder' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS_createPath"]) Module["FS_createPath"] = function() { abort("'FS_createPath' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS_createDataFile"]) Module["FS_createDataFile"] = function() { abort("'FS_createDataFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS_createPreloadedFile"]) Module["FS_createPreloadedFile"] = function() { abort("'FS_createPreloadedFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS_createLazyFile"]) Module["FS_createLazyFile"] = function() { abort("'FS_createLazyFile' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS_createLink"]) Module["FS_createLink"] = function() { abort("'FS_createLink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS_createDevice"]) Module["FS_createDevice"] = function() { abort("'FS_createDevice' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["FS_unlink"]) Module["FS_unlink"] = function() { abort("'FS_unlink' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ). Alternatively, forcing filesystem support (-s FORCE_FILESYSTEM=1) can export this for you") }; if (!Module["GL"]) Module["GL"] = function() { abort("'GL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["staticAlloc"]) Module["staticAlloc"] = function() { abort("'staticAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["dynamicAlloc"]) Module["dynamicAlloc"] = function() { abort("'dynamicAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["warnOnce"]) Module["warnOnce"] = function() { abort("'warnOnce' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["loadDynamicLibrary"]) Module["loadDynamicLibrary"] = function() { abort("'loadDynamicLibrary' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["loadWebAssemblyModule"]) Module["loadWebAssemblyModule"] = function() { abort("'loadWebAssemblyModule' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["getLEB"]) Module["getLEB"] = function() { abort("'getLEB' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["getFunctionTables"]) Module["getFunctionTables"] = function() { abort("'getFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["alignFunctionTables"]) Module["alignFunctionTables"] = function() { abort("'alignFunctionTables' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["registerFunctions"]) Module["registerFunctions"] = function() { abort("'registerFunctions' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["addFunction"]) Module["addFunction"] = function() { abort("'addFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["removeFunction"]) Module["removeFunction"] = function() { abort("'removeFunction' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["getFuncWrapper"]) Module["getFuncWrapper"] = function() { abort("'getFuncWrapper' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["prettyPrint"]) Module["prettyPrint"] = function() { abort("'prettyPrint' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["makeBigInt"]) Module["makeBigInt"] = function() { abort("'makeBigInt' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["dynCall"]) Module["dynCall"] = function() { abort("'dynCall' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["getCompilerSetting"]) Module["getCompilerSetting"] = function() { abort("'getCompilerSetting' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stackSave"]) Module["stackSave"] = function() { abort("'stackSave' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stackRestore"]) Module["stackRestore"] = function() { abort("'stackRestore' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["stackAlloc"]) Module["stackAlloc"] = function() { abort("'stackAlloc' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["intArrayFromBase64"]) Module["intArrayFromBase64"] = function() { abort("'intArrayFromBase64' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") }; if (!Module["tryParseAsDataURI"]) Module["tryParseAsDataURI"] = function() { abort("'tryParseAsDataURI' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") };if (!Module["ALLOC_NORMAL"]) Object.defineProperty(Module, "ALLOC_NORMAL", { get: function() { abort("'ALLOC_NORMAL' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); if (!Module["ALLOC_STACK"]) Object.defineProperty(Module, "ALLOC_STACK", { get: function() { abort("'ALLOC_STACK' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); if (!Module["ALLOC_STATIC"]) Object.defineProperty(Module, "ALLOC_STATIC", { get: function() { abort("'ALLOC_STATIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); if (!Module["ALLOC_DYNAMIC"]) Object.defineProperty(Module, "ALLOC_DYNAMIC", { get: function() { abort("'ALLOC_DYNAMIC' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); if (!Module["ALLOC_NONE"]) Object.defineProperty(Module, "ALLOC_NONE", { get: function() { abort("'ALLOC_NONE' was not exported. add it to EXTRA_EXPORTED_RUNTIME_METHODS (see the FAQ)") } }); if (memoryInitializer) { if (!isDataURI(memoryInitializer)) { if (typeof Module['locateFile'] === 'function') { memoryInitializer = Module['locateFile'](memoryInitializer); } else if (Module['memoryInitializerPrefixURL']) { memoryInitializer = Module['memoryInitializerPrefixURL'] + 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); for (var i = 0; i < data.length; i++) { assert(HEAPU8[GLOBAL_BASE + i] === 0, "area for memory initializer should not have been touched before it's loaded"); } HEAPU8.set(data, GLOBAL_BASE); // Delete the typed array that contains the large blob of the memory initializer request response so that // we won't keep unnecessary memory lying around. However, keep the XHR object itself alive so that e.g. // its .status field can still be accessed later. if (Module['memoryInitializerRequest']) delete Module['memoryInitializerRequest'].response; removeRunDependency('memory initializer'); } function doBrowserLoad() { 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']) { // a network request has already been created, just use that function useRequest() { 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 { // If you see this warning, the issue may be that you are using locateFile or memoryInitializerPrefixURL, and defining them in JS. That // means that the HTML file doesn't know about them, and when it tries to create the mem init request early, does it to the wrong place. // Look in your browser's devtools network console to see what's going on. 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); // it's already here; but, apply it asynchronously } else { Module['memoryInitializerRequest'].addEventListener('load', useRequest); // wait for it } } else { // fetch it from the network ourselves doBrowserLoad(); } } } /** * @constructor * @extends {Error} * @this {ExitStatus} */ function ExitStatus(status) { this.name = "ExitStatus"; this.message = "Program terminated with exit(" + status + ")"; this.status = status; }; ExitStatus.prototype = new Error(); ExitStatus.prototype.constructor = ExitStatus; var initialStackTop; var calledMain = false; dependenciesFulfilled = function runCaller() { // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false) if (!Module['calledRun']) run(); if (!Module['calledRun']) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled } /** @type {function(Array=)} */ function run(args) { args = args || Module['arguments']; if (runDependencies > 0) { return; } writeStackCookie(); preRun(); if (runDependencies > 0) return; // a preRun added a dependency, run will be called later if (Module['calledRun']) return; // run may have just been called through dependencies being fulfilled just in this very frame function doRun() { if (Module['calledRun']) return; // run may have just been called while the async setStatus time below was happening Module['calledRun'] = true; if (ABORT) return; ensureInitRuntime(); preMain(); if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized'](); assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]'); postRun(); } if (Module['setStatus']) { Module['setStatus']('Running...'); setTimeout(function() { setTimeout(function() { Module['setStatus'](''); }, 1); doRun(); }, 1); } else { doRun(); } checkStackCookie(); } Module['run'] = run; function checkUnflushedContent() { // Compiler settings do not allow exiting the runtime, so flushing // the streams is not possible. but in ASSERTIONS mode we check // if there was something to flush, and if so tell the user they // should request that the runtime be exitable. // Normally we would not even include flush() at all, but in ASSERTIONS // builds we do so just for this check, and here we see if there is any // content to flush, that is, we check if there would have been // something a non-ASSERTIONS build would have not seen. // How we flush the streams depends on whether we are in NO_FILESYSTEM // mode (which has its own special function for this; otherwise, all // the code is inside libc) var print = Module['print']; var printErr = Module['printErr']; var has = false; Module['print'] = Module['printErr'] = function(x) { has = true; } try { // it doesn't matter if it fails var flush = flush_NO_FILESYSTEM; if (flush) flush(0); } catch(e) {} Module['print'] = print; Module['printErr'] = printErr; if (has) { warnOnce('stdio streams had content in them that was not flushed. you should set NO_EXIT_RUNTIME to 0 (see the FAQ), or make sure to emit a newline when you printf etc.'); } } function exit(status, implicit) { checkUnflushedContent(); // if this is just main exit-ing implicitly, and the status is 0, then we // don't need to do anything here and can just leave. if the status is // non-zero, though, then we need to report it. // (we may have warned about this earlier, if a situation justifies doing so) if (implicit && Module['noExitRuntime'] && status === 0) { return; } if (Module['noExitRuntime']) { // if exit() was called, we may warn the user if the runtime isn't actually being shut down if (!implicit) { Module.printErr('exit(' + status + ') called, but NO_EXIT_RUNTIME is set, so halting execution but not exiting the runtime or preventing further async execution (build with NO_EXIT_RUNTIME=0, if you want a true shutdown)'); } } else { ABORT = true; EXITSTATUS = status; STACKTOP = initialStackTop; exitRuntime(); if (Module['onExit']) Module['onExit'](status); } if (ENVIRONMENT_IS_NODE) { process['exit'](status); } Module['quit'](status, new ExitStatus(status)); } Module['exit'] = exit; var abortDecorators = []; function abort(what) { if (Module['onAbort']) { Module['onAbort'](what); } if (what !== undefined) { Module.print(what); Module.printErr(what); what = JSON.stringify(what) } else { what = ''; } ABORT = true; EXITSTATUS = 1; var extra = ''; var output = 'abort(' + what + ') at ' + stackTrace() + extra; if (abortDecorators) { abortDecorators.forEach(function(decorator) { output = decorator(output, what); }); } throw output; } Module['abort'] = abort; // {{PRE_RUN_ADDITIONS}} if (Module['preInit']) { if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; while (Module['preInit'].length > 0) { Module['preInit'].pop()(); } } Module["noExitRuntime"] = true; run(); // {{POST_RUN_ADDITIONS}} // {{MODULE_ADDITIONS}} ================================================ FILE: libs/potree/LICENSE ================================================ ============ == POTREE == ============ http://potree.org Copyright (c) 2011-2020, Markus Schütz All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the FreeBSD Project. ================================================ FILE: libs/potree/lazylibs/geopackage/LICENSE ================================================ The MIT License (MIT) Copyright (c) 2015 National Geospatial-Intelligence Agency 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. ================================================ FILE: libs/potree/lazylibs/geopackage/README.md ================================================ # GeoPackage JS GeoPackage JS is an implementation of the OGC GeoPackage spec. This library works in both the browser and Node 4+. ### Demo ### [GeoPackage JS Demo Page](http://ngageoint.github.io/geopackage-js/) Cloning this repository and opening the docs/index.html in your browser will run the demo locally. ### Installation ### [![Build Status](https://travis-ci.org/ngageoint/geopackage-js.svg?branch=master)](https://travis-ci.org/ngageoint/geopackage-js) [![NPM](https://img.shields.io/npm/v/@ngageoint/geopackage.svg)](https://www.npmjs.com/package/@ngageoint/geopackage) [![Coverage Status](https://coveralls.io/repos/github/ngageoint/geopackage-js/badge.svg)](https://coveralls.io/github/ngageoint/geopackage-js) ```sh $ npm install @ngageoint/geopackage ``` #### GeoPackage JS Library #### The [GeoPackage Libraries](http://ngageoint.github.io/GeoPackage/) were developed at the [National Geospatial-Intelligence Agency (NGA)](http://www.nga.mil/) in collaboration with [BIT Systems](http://www.bit-sys.com/). The government has "unlimited rights" and is releasing this software to increase the impact of government investments by providing developers with the opportunity to take things in new directions. The software use, modification, and distribution rights are stipulated within the [MIT license](http://choosealicense.com/licenses/mit/). ### Pull Requests ### If you'd like to contribute to this project, please make a pull request. We'll review the pull request and discuss the changes. All pull request contributions to this project will be released under the MIT license. Software source code previously released under an open source license and then modified by NGA staff is considered a "joint work" (see 17 USC § 101); it is partially copyrighted, partially public domain, and as a whole is protected by the copyrights of the non-government authors and must be released according to the terms of the original open source license. ### About ### [GeoPackage JS](https://github.com/ngageoint/geopackage-js) is a [GeoPackage Library](http://ngageoint.github.io/GeoPackage/) JavaScript implementation of the Open Geospatial Consortium [GeoPackage](http://www.geopackage.org/) [spec](http://www.geopackage.org/spec/). It is listed as an [OGC GeoPackage Implementation](http://www.geopackage.org/#implementations_nga) by the National Geospatial-Intelligence Agency. The GeoPackage JavaScript library currently provides the ability to read GeoPackage files. This library works both in the browser and in Node. In the browser tiles are rendered using HTML5 Canvas and GeoPackages are read using [sql.js](https://github.com/kripken/sql.js/). In Node tiles are rendered [PureImage](https://github.com/joshmarinacci/node-pureimage) and GeoPackages are read using [node-sqlite3](https://github.com/mapbox/node-sqlite3). ### Changelog ##### 2.1.0 - Implementation of the Feature Style Extension and Contents ID Extension ##### 2.0.8 - Checks for Electron when returning a tile creator ##### 2.0 - All new API utilizing Promises ##### 1.1.4 - Adds a method to retrieve tiles in EPSG:4326 ##### 1.1.3 - Fixes issue #115 ##### 1.1.2 - fix case where GeoPackage Zoom does not correspond to the web map zoom ##### 1.1.1 - fix more instances of proj4 bug for react - fixed tile generation for images with different x and y pixel densities ##### 1.1.0 - accept pull request adding support for react - fix bug with projected tiles that spanned the date line ##### 1.0.25 - ensure we use proj4 2.4.3 instead of 2.4.4 ##### 1.0.22 - Fixed bug where querying for indexed features only returned the geometry instead of the entire feature ##### 1.0.19 - Remove dependency on Lwip ### Usage ### View examples using [Bower](https://github.com/ngageoint/geopackage-js/tree/master/docs/bower) and [Browserify](https://github.com/ngageoint/geopackage-js/tree/master/docs) View the latest [docs](http://ngageoint.github.io/geopackage-js/jsdoc/module-geoPackage-GeoPackage.html) (currently being updated). #### Browser Usage #### ```javascript // attach this method to a file input onchange event window.loadGeoPackage = function(files) { var f = files[0]; var r = new FileReader(); r.onload = function() { var array = new Uint8Array(r.result); loadByteArray(array); } r.readAsArrayBuffer(f); } function loadByteArray(array, callback) { var db = new SQL.Database(array); GeoPackageConnection.connectWithDatabase(db, function(err, connection) { var geoPackage = new GeoPackage('', '', connection); // Now you can operate on the GeoPackage // get the tile table names geoPackage.getTileTables(function(err, tileTableNames) { // tileTableNames is an array of all tile table names // get the info for the first table geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) { geoPackage.getInfoForTable(tileDao, function(err, info) { // do something with the tile table info }); // draw a tile into a canvas for an XYZ tile var canvas = canvasFromSomewhere; var gpr = new GeoPackageTileRetriever(tileDao, 256, 256); var x = 0; var y = 0; var zoom = 0; console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); gpr.drawTileIn(x, y, zoom, canvas, function() { console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); }); // or get a tile base64 data URL for an XYZ tile gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) { console.log('got the base64 data url'); }); // or get a tile from a GeoPackage tile column and tile row tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) { var tileData = tile.getTileData(); // the raw bytes from the GeoPackage }); }); }); // get the feature table names geoPackage.getFeatureTables(function(err, featureTableNames) { // featureTableNames is an array of all feature table names // get the info for the first table geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) { geoPackage.getInfoForTable(featureDao, function(err, info) { // do something with the feature table info }); // query for all features featureDao.queryForEach(function(err, row, rowDone) { var feature = featureDao.getFeatureRow(row); var geometry = currentRow.getGeometry(); if (geometry) { var geom = geometry.geometry; var geoJson = geometry.geometry.toGeoJSON(); geoJson.properties = {}; for (var key in feature.values) { if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) { var column = info.columnMap[key]; geoJson.properties[column.displayName] = currentRow.values[key]; } } } rowDone(); }); }); }); }); } ``` #### NodeJS Usage #### ```javascript var GeoPackageAPI = require('@ngageoint/geopackage') , GeoPackageManager = GeoPackageAPI.GeoPackageManager , GeoPackageConnection = GeoPackageAPI.GeoPackageConnection , GeoPackageTileRetriever = GeoPackageAPI.GeoPackageTileRetriever; GeoPackageAPI.open(filename, function(err, geoPackage) { // Now you can operate on the GeoPackage // get the tile table names geoPackage.getTileTables(function(err, tileTableNames) { // tileTableNames is an array of all tile table names // get the info for the first table geoPackage.getTileDaoWithTableName(tileTableNames[0], function(err, tileDao) { geoPackage.getInfoForTable(tileDao, function(err, info) { // do something with the tile table info }); // draw a tile into a canvas for an XYZ tile var canvas = canvasFromSomewhere; var gpr = new GeoPackageTileRetriever(tileDao, 256, 256); var x = 0; var y = 0; var zoom = 0; console.time('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); gpr.drawTileIn(x, y, zoom, canvas, function() { console.timeEnd('Draw tile ' + x + ', ' + y + ' zoom: ' + zoom); }); // or get a tile base64 data URL for an XYZ tile gpr.getTile(x, y, zoom, function(err, tileBase64DataURL) { console.log('got the base64 data url'); }); // or get a tile from a GeoPackage tile column and tile row tileDao.queryForTile(tileColumn, tileRow, zoom, function(err, tile) { var tileData = tile.getTileData(); // the raw bytes from the GeoPackage }); }); }); // get the feature table names geoPackage.getFeatureTables(function(err, featureTableNames) { // featureTableNames is an array of all feature table names // get the info for the first table geoPackage.getFeatureDaoWithTableName(featureTableNames[0], function(err, featureDao) { geoPackage.getInfoForTable(featureDao, function(err, info) { // do something with the feature table info }); // query for all features featureDao.queryForEach(function(err, row, rowDone) { var feature = featureDao.getFeatureRow(row); var geometry = currentRow.getGeometry(); if (geometry) { var geom = geometry.geometry; var geoJson = geometry.geometry.toGeoJSON(); geoJson.properties = {}; for (var key in feature.values) { if(feature.values.hasOwnProperty(key) && key != feature.getGeometryColumn().name) { var column = info.columnMap[key]; geoJson.properties[column.displayName] = currentRow.values[key]; } } } rowDone(); }); }); }); }); ``` ================================================ FILE: libs/potree/lazylibs/geopackage/geopackage.js ================================================ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.geopackage = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i} */ GeoPackageAPI.iterateGeoJSONFeaturesFromTable = function(geopackage, table) { var featureDao = geopackage.getFeatureDao(table); if (!featureDao) { throw new Error('No Table exists with the name ' + table); } var columnMap = GeoPackageAPI.createDataColumnMap(featureDao); var srs = featureDao.getSrs(); var iterator = featureDao.queryForEach(); return { srs: srs, featureDao: featureDao, results: { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var featureRow; var geometry; while(!nextRow.done && !geometry) { featureRow = featureDao.getRow(nextRow.value); return { value: GeoPackageAPI.parseFeatureRowIntoGeoJSON(featureRow, srs, columnMap), done: false }; } } return { done: true } }.bind(this) } }; }; /** * Gets a GeoJSON feature from the table by id * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the table to get the feature from * @param {Number} featureId ID of the feature * @param {Function} callback called with an error if one occurred and the GeoJSON feature */ GeoPackageAPI.getFeature = function(geopackage, table, featureId) { var srs; var featureDao = geopackage.getFeatureDao(table) srs = featureDao.getSrs(); var feature = featureDao.queryForId(featureId); if (!feature) { var features = featureDao.queryForAllEq('_feature_id', featureId) if (features.length) { feature = featureDao.getRow(features[0]); } else { var features = featureDao.queryForAllEq('_properties_id', featureId) if (features.length) { feature = featureDao.getRow(features[0]); } } } if (feature) { return GeoPackageAPI.parseFeatureRowIntoGeoJSON(feature, srs); } }; GeoPackageAPI.parseFeatureRowIntoGeoJSON = function(featureRow, srs, columnMap) { var geoJson = { type: 'Feature', properties: {} }; var geometry = featureRow.getGeometry(); if (geometry && geometry.geometry) { var geom = geometry.geometry; var geoJsonGeom = geometry.geometry.toGeoJSON(); if (srs.definition && srs.definition !== 'undefined' && (srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id) != 'EPSG:4326') { // geoJsonGeom = reproject.reproject(geoJsonGeom, srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id, 'EPSG:4326'); geoJsonGeom = reproject.reproject(geoJsonGeom, srs.getProjection(), 'EPSG:4326'); } geoJson.geometry = geoJsonGeom; } for (var key in featureRow.values) { if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') { if (key.toLowerCase() == '_feature_id') { geoJson.id = featureRow.values[key]; } else if (key.toLowerCase() == '_properties_id') { geoJson.properties[key.substring(12)] = featureRow.values[key]; } else if (columnMap && columnMap[key]) { geoJson.properties[columnMap[key].displayName] = featureRow.values[key]; } else { geoJson.properties[key] = featureRow.values[key]; } } else if (featureRow.getGeometryColumn().name === key) { // geoJson.properties[key] = geometry && !geometry.geometryError ? 'Valid' : geometry.geometryError; } } geoJson.id = geoJson.id || featureRow.getId(); return geoJson; } /** * Gets a tile from the specified table * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the table to get the tile from * @param {Number} zoom zoom level of the tile * @param {Number} tileRow row of the tile * @param {Number} tileColumn column of the tile * * @todo jsdoc return value */ GeoPackageAPI.getTileFromTable = function(geopackage, table, zoom, tileRow, tileColumn) { var tileDao = geopackage.getTileDao(table); return tileDao.queryForTile(tileColumn, tileRow, zoom); }; /** * Gets the tiles in the EPSG:4326 bounding box * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the tile table * @param {Number} zoom Zoom of the tiles to query for * @param {Number} west EPSG:4326 western boundary * @param {Number} east EPSG:4326 eastern boundary * @param {Number} south EPSG:4326 southern boundary * @param {Number} north EPSG:4326 northern boundary * @param {Function} callback called with an error if one occurred and a tiles object describing the tiles */ GeoPackageAPI.getTilesInBoundingBox = function(geopackage, table, zoom, west, east, south, north) { var tiles = {}; var tileDao = geopackage.getTileDao(table); if (zoom < tileDao.minZoom || zoom > tileDao.maxZoom) { return } tiles.columns = []; for (var i = 0; i < tileDao.table.columns.length; i++) { var column = tileDao.table.columns[i]; tiles.columns.push({ index: column.index, name: column.name, max: column.max, min: column.min, notNull: column.notNull, primaryKey: column.primaryKey }); } var srs = tileDao.getSrs(); tiles.srs = srs; tiles.tiles = []; var tms = tileDao.tileMatrixSet; var tm = tileDao.getTileMatrixWithZoomLevel(zoom); if (!tm) { return tiles; } var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north); tiles.west = Math.max(-180, west).toFixed(2); tiles.east = Math.min(east, 180).toFixed(2); tiles.south = south.toFixed(2); tiles.north = north.toFixed(2); tiles.zoom = zoom; mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id); var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox); var iterator = tileDao.queryByTileGrid(grid, zoom); for (var row of iterator ) { var tile = {}; tile.tableName = table; tile.id = row.getId(); var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow()); tile.minLongitude = tileBB.minLongitude; tile.maxLongitude = tileBB.maxLongitude; tile.minLatitude = tileBB.minLatitude; tile.maxLatitude = tileBB.maxLatitude; tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id; tile.values = []; for (var i = 0; i < tiles.columns.length; i++) { var value = row.values[tiles.columns[i].name]; if (tiles.columns[i].name === 'tile_data') { tile.values.push('data'); } else if (value === null || value === 'null') { tile.values.push(''); } else { tile.values.push(value.toString()); tile[tiles.columns[i].name] = value; } } tiles.tiles.push(tile); } return tiles; }; /** * Gets the tiles in the EPSG:4326 bounding box * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the tile table * @param {Number} zoom Zoom of the tiles to query for * @param {Number} west EPSG:4326 western boundary * @param {Number} east EPSG:4326 eastern boundary * @param {Number} south EPSG:4326 southern boundary * @param {Number} north EPSG:4326 northern boundary * @param {Function} callback called with an error if one occurred and a tiles object describing the tiles */ GeoPackageAPI.getTilesInBoundingBoxWebZoom = function(geopackage, table, webZoom, west, east, south, north) { var tiles = {}; var tileDao = geopackage.getTileDao(table); if (webZoom < tileDao.minWebZoom || webZoom > tileDao.maxWebZoom) { return; } tiles.columns = []; for (var i = 0; i < tileDao.table.columns.length; i++) { var column = tileDao.table.columns[i]; tiles.columns.push({ index: column.index, name: column.name, max: column.max, min: column.min, notNull: column.notNull, primaryKey: column.primaryKey }); } var srs = tileDao.getSrs(); tiles.srs = srs; tiles.tiles = []; var zoom = tileDao.webZoomToGeoPackageZoom(webZoom); var tms = tileDao.tileMatrixSet; var tm = tileDao.getTileMatrixWithZoomLevel(zoom); if (!tm) { return tiles; } var mapBoundingBox = new BoundingBox(Math.max(-180, west), Math.min(east, 180), south, north); tiles.west = Math.max(-180, west).toFixed(2); tiles.east = Math.min(east, 180).toFixed(2); tiles.south = south.toFixed(2); tiles.north = north.toFixed(2); tiles.zoom = zoom; mapBoundingBox = mapBoundingBox.projectBoundingBox('EPSG:4326', tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id); var grid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(tms.getBoundingBox(), tm.matrix_width, tm.matrix_height, mapBoundingBox); var iterator = tileDao.queryByTileGrid(grid, zoom); for (var row of iterator) { var tile = {}; tile.tableName = table; tile.id = row.getId(); var tileBB = TileBoundingBoxUtils.getTileBoundingBox(tms.getBoundingBox(), tm, row.getTileColumn(), row.getRow()); tile.minLongitude = tileBB.minLongitude; tile.maxLongitude = tileBB.maxLongitude; tile.minLatitude = tileBB.minLatitude; tile.maxLatitude = tileBB.maxLatitude; tile.projection = tileDao.srs.organization.toUpperCase() + ':' + tileDao.srs.organization_coordsys_id; tile.values = []; for (var i = 0; i < tiles.columns.length; i++) { var value = row.values[tiles.columns[i].name]; if (tiles.columns[i].name === 'tile_data') { tile.values.push('data'); } else if (value === null || value === 'null') { tile.values.push(''); } else { tile.values.push(value.toString()); tile[tiles.columns[i].name] = value; } } tiles.tiles.push(tile); } return tiles; }; GeoPackageAPI.getFeatureTileFromXYZ = function(geopackage, table, x, y, z, width, height) { x = Number(x); y = Number(y); z = Number(z); width = Number(width); height = Number(height); var featureDao = geopackage.getFeatureDao(table) if (!featureDao) return; var ft = new FeatureTile(featureDao, width, height); return ft.drawTile(x, y, z); } /** * Gets the features in the EPSG:4326 bounding box * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the feature table * @param {Number} west EPSG:4326 western boundary * @param {Number} east EPSG:4326 eastern boundary * @param {Number} south EPSG:4326 southern boundary * @param {Number} north EPSG:4326 northern boundary */ GeoPackageAPI.getGeoJSONFeaturesInTile = function(geopackage, table, x, y, z, skipVerification) { var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z); var bb = webMercatorBoundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326'); return geopackage.indexFeatureTable(table) .then(function(indexed) { return geopackage.getFeatureDao(table); }) .then(function(featureDao) { if (!featureDao) return; var features = []; var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(bb, skipVerification); for (var feature of iterator) { features.push(feature); } return features; }) .catch(function(error) { console.log('error', error); }); } GeoPackageAPI.convertPBFToVectorTile = function(pbf) { return new VectorTile.VectorTile(new Pbf(pbf)); } /** * Gets a mapbox VectorTile for the x y z web mercator tile specified * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table table name * @param {Number} x x tile * @param {Number} y y tile * @param {Number} z web zoom * @return {VectorTile} */ GeoPackageAPI.getVectorTile = function(geopackage, table, x, y, z) { return GeoPackageAPI.getVectorTileProtobuf(geopackage, table, x, y, z) .then(function(pbf) { return new VectorTile.VectorTile(new Pbf(pbf)); }); } /** * Gets a protobuf for the x y z web mercator tile specified * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table table name * @param {Number} x x tile * @param {Number} y y tile * @param {Number} z web zoom * @return {Protobuf} */ GeoPackageAPI.getVectorTileProtobuf = function(geopackage, table, x, y, z) { return GeoPackageAPI.getGeoJSONFeaturesInTile(geopackage, table, x, y, z, true) .then(function(features) { var featureCollection = { type: 'FeatureCollection', features: features }; var tileBuffer = 8; var tileIndex = geojsonvt(featureCollection, {buffer: tileBuffer * 8, maxZoom: z}); var layer = {}; var tile = tileIndex.getTile(z, x, y); var gjvt = {}; if (tile) { gjvt[table] = tile; } else { gjvt[table] = {features:[]}; } return vtpbf.fromGeojsonVt(gjvt); }); } /** * Gets the features in the EPSG:4326 bounding box * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the feature table * @param {Number} west EPSG:4326 western boundary * @param {Number} east EPSG:4326 eastern boundary * @param {Number} south EPSG:4326 southern boundary * @param {Number} north EPSG:4326 northern boundary */ GeoPackageAPI.getFeaturesInBoundingBox = function(geopackage, table, west, east, south, north) { return geopackage.indexFeatureTable(table) .then(function(indexed) { var featureDao = geopackage.getFeatureDao(table); if (!featureDao) throw new Error('Unable to find table ' + table); var features = []; var bb = new BoundingBox(west, east, south, north); var iterator = featureDao.queryIndexedFeaturesWithBoundingBox(bb); return iterator; }); } /** * Gets a tile image for an XYZ tile pyramid location * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the table containing the tiles * @param {Number} x x index of the tile * @param {Number} y y index of the tile * @param {Number} z zoom level of the tile * @param {Number} width width of the resulting tile * @param {Number} height height of the resulting tile * @return {Promise} */ GeoPackageAPI.getTileFromXYZ = function(geopackage, table, x, y, z, width, height) { x = Number(x); y = Number(y); z = Number(z); width = Number(width); height = Number(height); var tileDao = geopackage.getTileDao(table); var retriever = new GeoPackageTileRetriever(tileDao, width, height); return retriever.getTile(x, y, z); }; /** * Draws an XYZ tile pyramid location into the provided canvas * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the table containing the tiles * @param {Number} x x index of the tile * @param {Number} y y index of the tile * @param {Number} z zoom level of the tile * @param {Number} width width of the resulting tile * @param {Number} height height of the resulting tile * @param {Canvas} canvas canvas element to draw the tile into */ GeoPackageAPI.drawXYZTileInCanvas = function(geopackage, table, x, y, z, width, height, canvas) { x = Number(x); y = Number(y); z = Number(z); width = Number(width); height = Number(height); var tileDao = geopackage.getTileDao(table) var retriever = new GeoPackageTileRetriever(tileDao, width, height); return retriever.drawTileIn(x, y, z, canvas); }; /** * Draws a tile specified by the bounds in EPSG:4326 into the canvas * @param {module:geoPackage~GeoPackage} geopackage open GeoPackage object * @param {String} table name of the table containing the tiles * @param {Number} minLat minimum latitude bounds of tile * @param {Number} minLon minimum longitude bounds of tile * @param {Number} maxLat maximum latitude bounds of tile * @param {Number} maxLon maximum longitude bounds of tile * @param {Number} z zoom level of the tile * @param {Number} width width of the resulting tile * @param {Number} height height of the resulting tile * @param {Canvas} canvas canvas element to draw the tile into */ GeoPackageAPI.draw4326TileInCanvas = function(geopackage, table, minLat, minLon, maxLat, maxLon, z, width, height, canvas) { z = Number(z); width = Number(width); height = Number(height); var tileDao = geopackage.getTileDao(table); var retriever = new GeoPackageTileRetriever(tileDao, width, height); var bounds = new BoundingBox(minLon, maxLon, minLat, maxLat); return retriever.drawTileWithWgs84BoundsInProjection(bounds, z, 'EPSG:4326', canvas); } /////////////////// // JSDoc Globals // /////////////////// /** * @callback geopackageCallback * @param {?Error} error * @param {module:geoPackage~GeoPackage=} geopackage a GeoPackage instance */ /** * An integer database key referencing a {@link module:core/srs~SpatialReferenceSystem} row in a GeoPackage database * @typedef {number} SRSRef * @see https://www.geopackage.org/spec121/index.html#spatial_ref_sys */ }).call(this,require('_process')) },{"./boundingBox":7,"./dataColumns":13,"./db/dataTypes":14,"./db/geoPackageConnection":15,"./db/tableCreator":19,"./extension/index/featureTableIndex":26,"./extension/relatedTables/mediaTable":35,"./extension/relatedTables/relationType":36,"./extension/relatedTables/simpleAttributesTable":39,"./features/columns":64,"./features/user/featureColumn":65,"./geoPackage":70,"./geom/geometryData":73,"./tiles/features":87,"./tiles/retriever":92,"./tiles/tileBoundingBoxUtils":93,"./user/userColumn":105,"./validate/geoPackageValidate":110,"@mapbox/vector-tile":113,"_process":284,"fs":177,"geojson-vt":226,"path":276,"pbf":277,"reproject":315,"vt-pbf":345,"wkx":360}],3:[function(require,module,exports){ /** * @module attributes/attributeDao */ var UserDao = require('../user/userDao') , AttributeRow = require('./attributeRow'); var util = require('util'); /** * Attribute DAO for reading attribute user data tables * @class AttributeDao * @extends {module:user/userDao~UserDao} * @param {module:geoPackage~GeoPackage} geopackage geopackage object * @param {module:attributes/attributeTable~AttributeTable} table attribute table */ var AttributeDao = function(geoPackage, table) { UserDao.call(this, geoPackage, table); if (!table.contents) { throw new Error('Attributes table has null Contents'); } /** * Contents of this AttributeDao * @member {module:core/contents~Contents} */ this.contents = table.contents; } util.inherits(AttributeDao, UserDao); /** * Create a new attribute row with the column types and values * @param {Array} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {moule:attributes/attributeRow~AttributeRow} attribute row */ AttributeDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new AttributeRow(this.table, columnTypes, values); }; /** * Create a new attribute row * @return {module:attributes/attributeRow~AttributeRow} attribute row */ AttributeDao.prototype.newRow = function () { return new AttributeRow(this.table); }; module.exports = AttributeDao; },{"../user/userDao":106,"./attributeRow":4,"util":343}],4:[function(require,module,exports){ /** * AttributeRow module. * @module attributes/attributeRow */ var UserRow = require('../user/userRow'); var util = require('util'); /** * Attribute Row containing the values from a single result set row * @class AttributeRow * @extends module:user/userRow~UserRow * @param {module:attributes/attributeTable~AttributeTable} attributeTable attribute table * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values */ var AttributeRow = function(attributeTable, columnTypes, values) { UserRow.call(this, attributeTable, columnTypes, values); } util.inherits(AttributeRow, UserRow); module.exports = AttributeRow; },{"../user/userRow":107,"util":343}],5:[function(require,module,exports){ /** * @module attributes/attributeTable */ var UserTable = require('../user/userTable') , ContentsDao = require('../core/contents').ContentsDao; var util = require('util'); /** * Represents a user attribute table * @class AttributeTable * @extends {module:user/userTable~UserTable} * @constructor * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns attribute columns */ var AttributeTable = function(tableName, columns) { /** * Contents of this AttributeTable * @member {module:core/contents~Contents} */ this.contents; UserTable.call(this, tableName, columns); } util.inherits(AttributeTable, UserTable); /** * Set the contents * @param {module:core/contents~Contents} contents the contents */ AttributeTable.prototype.setContents = function(contents) { this.contents = contents; if (contents.data_type !== ContentsDao.GPKG_CDT_ATTRIBUTES_NAME) { throw new Error('The Contents of an Attributes Table must have a data type of ' + ContentsDao.GPKG_CDT_ATTRIBUTES_NAME); } } module.exports = AttributeTable; },{"../core/contents":8,"../user/userTable":108,"util":343}],6:[function(require,module,exports){ /** * attributeTableReader module. * @module attributes/attributeTableReader */ var UserTableReader = require('../user/userTableReader') , AttributeTable = require('./attributeTable') , DataTypes = require('../db/dataTypes'); var util = require('util'); /** * Reads the metadata from an existing attribute table * @class AttributeTableReader * @extends {module:user/userTableReader~UserTableReader} * @classdesc Reads the metadata from an existing attributes table */ var AttributeTableReader = function(tableName) { UserTableReader.call(this, tableName); } util.inherits(AttributeTableReader, UserTableReader); /** * @inheritdoc */ AttributeTableReader.prototype.createTable = function (tableName, columns) { return new AttributeTable(tableName, columns); }; module.exports = AttributeTableReader; },{"../db/dataTypes":14,"../user/userTableReader":109,"./attributeTable":5,"util":343}],7:[function(require,module,exports){ var proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; /** * Create a new bounding box * @class BoundingBox * @param {Number} minLongitudeOrBoundingBox minimum longitude or bounding box to copy (west) * @param {Number} maxLongitude maximum longitude (east) * @param {Number} minLatitude Minimum latitude (south) * @param {Number} maxLatitude Maximum latitude (north) * @return {BoundingBox} newly constructed bounding box */ var BoundingBox = function(minLongitudeOrBoundingBox, maxLongitude, minLatitude, maxLatitude) { // if there is a second argument the first argument is the minLongitude if (maxLongitude !== undefined) { this.minLongitude = minLongitudeOrBoundingBox; this.maxLongitude = maxLongitude; this.minLatitude = minLatitude; this.maxLatitude = maxLatitude; } else { var boundingBox = minLongitudeOrBoundingBox; this.minLongitude = boundingBox.minLongitude; this.maxLongitude = boundingBox.maxLongitude; this.minLatitude = boundingBox.minLatitude; this.maxLatitude = boundingBox.maxLatitude; } } module.exports = BoundingBox; /** * Build a Geometry Envelope from the bounding box * * @return geometry envelope */ BoundingBox.prototype.buildEnvelope = function () { return { minY: this.minLatitude, minX: this.minLongitude, maxY: this.maxLatitude, maxX: this.maxLongitude }; }; BoundingBox.prototype.toGeoJSON = function() { return { "type": "Feature", "properties": {}, "geometry": { "type": "Polygon", "coordinates": [ [ [this.minLongitude,this.minLatitude], [this.maxLongitude,this.minLatitude], [this.maxLongitude,this.maxLatitude], [this.minLongitude,this.maxLatitude], [this.minLongitude,this.minLatitude] ] ] } }; } /** * Determine if equal to the provided bounding box * @param {BoundingBox} boundingBox bounding boundingBox * @return {Boolean} true if equal, false if not */ BoundingBox.prototype.equals = function (boundingBox) { if (!boundingBox) { return false; } if (this === boundingBox) { return true; } return this.maxLatitude === boundingBox.maxLatitude && this.minLatitude === boundingBox.minLatitude && this.maxLongitude === boundingBox.maxLongitude && this.maxLatitude === boundingBox.maxLatitude; }; BoundingBox.prototype.projectBoundingBox = function (from, to) { if (from && from !== 'undefined' && to && to !== 'undefined') { var toProj = to.toUpperCase ? proj4(to) : to; var fromProj = from.toUpperCase ? proj4(from) : from; if (to.toUpperCase && to.toUpperCase() === 'EPSG:3857' && from.toUpperCase && from.toUpperCase() === 'EPSG:4326') { this.maxLatitude = this.maxLatitude > 85.0511 ? 85.0511 : this.maxLatitude; this.minLatitude = this.minLatitude < -85.0511 ? -85.0511 : this.minLatitude; this.minLongitude = this.minLongitude < -180.0 ? -180.0 : this.minLongitude; this.maxLongitude = this.maxLongitude > 180.0 ? 180.0 : this.maxLongitude; } var min = proj4(from, to, [this.minLongitude, this.minLatitude]); var max = proj4(from, to, [this.maxLongitude, this.maxLatitude]); var projected = new BoundingBox(min[0], max[0], min[1], max[1]); return projected; } else { return this; } }; // /** // * Get a Map Rectangle representing the bounding box // * // * @return map rectangle // */ // -(MKMapRect) getMapRect; // // /** // * Get a Coordinate Region of the bounding box // * // * @return Coordinate Region // */ // -(MKCoordinateRegion) getCoordinateRegion; // // /** // * Get the Span of the bounding box // * // * @return Span // */ // -(MKCoordinateSpan) getSpan; // // /** // * Get the center of the bounding box // * // * @return center location // */ // -(CLLocationCoordinate2D) getCenter; // // /** // * Get with width and height of the bounding box in meters // * // * @return bounding box size // */ // -(struct GPKGBoundingBoxSize) sizeInMeters; },{"proj4":285}],8:[function(require,module,exports){ /** * Contents module. * @module core/contents */ var Dao = require('../../dao/dao') , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao , SpatialReferenceSystemDao = require('../srs').SpatialReferenceSystemDao , TileMatrixDao = require('../../tiles/matrix').TileMatrixDao , TileMatrixSetDao = require('../../tiles/matrixset').TileMatrixSetDao , ColumnValues = require('../../dao/columnValues'); var util = require('util'); /** * The Contents class models rows in the [`gpkg_contents`](https://www.geopackage.org/spec121/index.html#_contents) * table. The contents table stores identifying and descriptive information * that an application can display to a user in a menu of geospatial data * available in a GeoPackage. * @class Contents * @see https://www.geopackage.org/spec121/index.html#_contents */ var Contents = function() { /** * the name of the tiles, or feature table * @member {string} */ this.table_name; /** * Type of data stored in the table:. “features” per clause Features, * “tiles” per clause Tiles, or an implementer-defined value for other data * tables per clause in an Extended GeoPackage. * @member {string} */ this.data_type; /** * A human-readable identifier (e.g. short name) for the table_name content * @member {string} */ this.identifier; /** * A human-readable description for the table_name content * @member {string} */ this.description; /** * timestamp value in ISO 8601 format as defined by the strftime function * %Y-%m-%dT%H:%M:%fZ format string applied to the current time * @member {Date} */ this.last_change; /** * Bounding box minimum easting or longitude for all content in table_name * @member {Number} */ this.min_x; /** * Bounding box minimum northing or latitude for all content in table_name * @member {Number} */ this.min_y; /** * Bounding box maximum easting or longitude for all content in table_name * @member {Number} */ this.max_x; /** * Bounding box maximum northing or latitude for all content in table_name * @member {Number} */ this.max_y; /** * Unique identifier for each Spatial Reference System within a GeoPackage * @member {SRSRef} */ this.srs_id; } /** * Contents object. Provides identifying and descriptive information that an * application can display to a user in a menu of geospatial data that is * available for access and/or update. * @class ContentsDao * @extends {module:dao/dao~Dao} */ var ContentsDao = function(geoPackage) { Dao.call(this, geoPackage); } util.inherits(ContentsDao, Dao); /** * Creates a new Contents object * @return {module:core/contents~Contents} new Contents object */ ContentsDao.prototype.createObject = function () { return new Contents(); }; /** * Get table names by table type * @param {string} [tableType] table type to query for * @return {string[]} Array of table names */ ContentsDao.prototype.getTables = function(tableType) { var results; if (tableType) { var fieldValues = new ColumnValues(); fieldValues.addColumn(ContentsDao.COLUMN_DATA_TYPE, tableType); results = this.queryForColumns('table_name', fieldValues); } else { results = this.queryForColumns('table_name'); } var tableNames = []; for (var i = 0; i < results.length; i++) { tableNames.push(results[i].table_name); } return tableNames; } /** * Returns the proj4 projection for the Contents * @param {module:core/contents~Contents} contents Contents to get the projection from * @return {proj4} proj4 projection */ ContentsDao.prototype.getProjection = function (contents) { var srs = this.getSrs(contents); var srsDao = this.geoPackage.getSpatialReferenceSystemDao(); return srsDao.getProjection(srs); }; /** * Get the SpatialReferenceSystemDao for the Contents * @param {module:core/contents~Contents} contents Contents to get the SpatialReferenceSystemDao from * @return {module:core/srs~SpatialReferenceSystemDao} */ ContentsDao.prototype.getSrs = function (contents) { var dao = this.geoPackage.getSpatialReferenceSystemDao(); return dao.queryForId(contents.srs_id); }; /** * Get the GeometryColumns for the Contents * @param {module:core/contents~Contents} contents Contents * @return {module:features/columns~GeometryColumns} */ ContentsDao.prototype.getGeometryColumns = function (contents) { var dao = this.geoPackage.getGeometryColumnsDao(); // TODO what is causing this to need to be here and not up in the require section var GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao; var results = dao.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, contents.table_name); if (!results || !results.length) return; var gc = dao.createObject(); dao.populateObjectFromResult(gc, results[0]); return gc; }; /** * Get the TileMatrixSet for the Contents * @param {module:core/contents~Contents} contents Contents * @return {module:tiles/matrixset~TileMatrixSet} */ ContentsDao.prototype.getTileMatrixSet = function (contents) { var dao = this.geoPackage.getTileMatrixSetDao(); var results = dao.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, contents.table_name); if (!results || !results.length) return; var gc = dao.createObject(); dao.populateObjectFromResult(gc, results[0]); return gc; }; /** * Get the TileMatrix for the Contents * @param {module:core/contents~Contents} contents Contents * @return {module:tiles/matrix~TileMatrix} */ ContentsDao.prototype.getTileMatrix = function (contents) { var dao = this.geoPackage.getTileMatrixDao(); var results = dao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, contents.table_name); if (!results || !results.length) return; var tileMatricies = []; for (var i = 0; i < results.length; i++) { var gc = dao.createObject(); dao.populateObjectFromResult(gc, results[i]); tileMatricies.push(gc); } return tileMatricies; }; ContentsDao.TABLE_NAME = "gpkg_contents"; ContentsDao.COLUMN_PK = "table_name"; ContentsDao.COLUMN_TABLE_NAME = "table_name"; ContentsDao.COLUMN_DATA_TYPE = "data_type"; ContentsDao.COLUMN_IDENTIFIER = "identifier"; ContentsDao.COLUMN_DESCRIPTION = "description"; ContentsDao.COLUMN_LAST_CHANGE = "last_change"; ContentsDao.COLUMN_MIN_X = "min_x"; ContentsDao.COLUMN_MIN_Y = "min_y"; ContentsDao.COLUMN_MAX_X = "max_x"; ContentsDao.COLUMN_MAX_Y = "max_y"; ContentsDao.COLUMN_SRS_ID = "srs_id"; ContentsDao.GPKG_CDT_FEATURES_NAME = "features"; ContentsDao.GPKG_CDT_TILES_NAME = "tiles"; ContentsDao.GPKG_CDT_ATTRIBUTES_NAME = "attributes"; ContentsDao.prototype.gpkgTableName = ContentsDao.TABLE_NAME; ContentsDao.prototype.idColumns = [ContentsDao.COLUMN_PK]; module.exports.ContentsDao = ContentsDao; Contents.TABLE_NAME = ContentsDao.TABLE_NAME; module.exports.Contents = Contents; },{"../../dao/columnValues":10,"../../dao/dao":11,"../../features/columns":64,"../../tiles/matrix":90,"../../tiles/matrixset":91,"../srs":9,"util":343}],9:[function(require,module,exports){ /** * SpatialReferenceSystem module. * @module core/srs */ var Dao = require('../../dao/dao'); var util = require('util') , proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; /** * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth. * @class SpatialReferenceSystem */ var SpatialReferenceSystem = function() { /** * Human readable name of this SRS * @member {string} */ this.srs_name; /** * Unique identifier for each Spatial Reference System within a GeoPackage * @member {Number} */ this.srs_id; /** * Case-insensitive name of the defining organization e.g. EPSG or epsg * @member {string} */ this.organization; /** * Numeric ID of the Spatial Reference System assigned by the organization * @member {Number} */ this.organization_coordsys_id; /** * Well-known Text [32] Representation of the Spatial Reference System * @member {string} */ this.definition; /** * Human readable description of this SRS * @member {string} */ this.description; /** * Well-known Text Representation of the Spatial Reference System * @member {string} */ this.definition_12_063; }; /** * Return the proj4 projection specified by this SpatialReferenceSystem * @return {proj4} */ SpatialReferenceSystem.prototype.getProjection = function() { if(this.organization === 'NONE') return {}; if(this.organization_coordsys_id === 4326 && (this.organization === 'EPSG' || this.organization === 'epsg')) { return proj4('EPSG:4326'); } else if (this.definition_12_063 && this.definition_12_063 !== '' && this.definition_12_063 !== 'undefined') { return proj4(this.definition_12_063); } else if (this.definition && this.definition !== '' && this.definition !== 'undefined') { return proj4(this.definition); } else if (this.organization && this.organization_coordsys_id) { return proj4(this.organization.toUpperCase() + ':' + this.organization_coordsys_id); } else { return {}; } } /** * Spatial Reference System Data Access Object * @class SpatialReferenceSystemDao * @extends {module:dao/dao~Dao} * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object */ var SpatialReferenceSystemDao = function(geoPackage) { Dao.call(this, geoPackage); } util.inherits(SpatialReferenceSystemDao, Dao); /** * Create a new SpatialReferenceSystem object * @return {module:core/srs~SpatialReferenceSystem} */ SpatialReferenceSystemDao.prototype.createObject = function () { return new SpatialReferenceSystem(); }; /** * Get the Spatial Reference System for the provided id * @param {Number} srsId srs id * @return {module:core/srs~SpatialReferenceSystem} */ SpatialReferenceSystemDao.prototype.getBySrsId = function(srsId) { return this.queryForId(srsId); }; /** * Return the proj4 projection specified by this SpatialReferenceSystem * @return {proj4} */ SpatialReferenceSystemDao.prototype.getProjection = function (srs) { return srs.getProjection(); }; /** * Creates the required EPSG WGS84 Spatial Reference System (spec * Requirement 11) * @return {Number} id of the created row */ SpatialReferenceSystemDao.prototype.createWgs84 = function() { var srs = this.getBySrsId(4326); if (srs) { return srs; } var srs = new SpatialReferenceSystem(); srs.srs_name = 'WGS 84 geodetic'; srs.srs_id = 4326; srs.organization = 'EPSG'; srs.organization_coordsys_id = 4326; srs.definition = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]'; srs.description = 'longitude/latitude coordinates in decimal degrees on the WGS 84 spheroid'; if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { srs.definition_12_063 = 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]'; } return this.create(srs); } /** * Creates the required Undefined Cartesian Spatial Reference System (spec * Requirement 11) * @return {Number} id of the created row */ SpatialReferenceSystemDao.prototype.createUndefinedCartesian = function() { var srs = this.getBySrsId(-1); if (srs) { return srs; } var srs = new SpatialReferenceSystem(); srs.srs_name = 'Undefined cartesian SRS'; srs.srs_id = -1; srs.organization = 'NONE'; srs.organization_coordsys_id = -1; srs.definition = 'undefined'; srs.description = 'undefined cartesian coordinate reference system'; if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { srs.definition_12_063 = 'undefined'; } return this.create(srs); } /** * Creates the required Undefined Geographic Spatial Reference System (spec * Requirement 11) * @return {Number} id of the created row */ SpatialReferenceSystemDao.prototype.createUndefinedGeographic = function() { var srs = this.getBySrsId(0); if (srs) { return srs; } var srs = new SpatialReferenceSystem(); srs.srs_name = 'Undefined geographic SRS'; srs.srs_id = 0; srs.organization = 'NONE'; srs.organization_coordsys_id = 0; srs.definition = 'undefined'; srs.description = 'undefined geographic coordinate reference system'; if (this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { srs.definition_12_063 = 'undefined'; } return this.create(srs); } /** * Creates the Web Mercator Spatial Reference System if it does not already * exist * @return {Number} id of the created row */ SpatialReferenceSystemDao.prototype.createWebMercator = function() { var srs = this.getBySrsId(3857); if (srs) { return srs; } var srs = new SpatialReferenceSystem(); srs.srs_name = 'WGS 84 / Pseudo-Mercator'; srs.srs_id = 3857; srs.organization = 'EPSG'; srs.organization_coordsys_id = 3857; srs.definition = 'PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3857"]]'; srs.description = 'Spherical Mercator projection coordinate system'; if(this.connection.columnAndTableExists('gpkg_spatial_ref_sys', 'definition_12_063')) { srs.definition_12_063 = 'PROJCS["WGS 84 / Pseudo-Mercator",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Mercator_1SP"],PARAMETER["central_meridian",0],PARAMETER["scale_factor",1],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AXIS["X",EAST],AXIS["Y",NORTH],EXTENSION["PROJ4","+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs"],AUTHORITY["EPSG","3857"]]'; } return this.create(srs); } /** * Spatial Reference System Table Name * @type {String} */ SpatialReferenceSystemDao.TABLE_NAME = 'gpkg_spatial_ref_sys'; /** * Table Name * @type {String} */ SpatialReferenceSystemDao.prototype.gpkgTableName = SpatialReferenceSystemDao.TABLE_NAME; /** * srsName field name * @type {String} */ SpatialReferenceSystemDao.COLUMN_SRS_NAME = "srs_name"; /** * srsId field name * @type {String} */ SpatialReferenceSystemDao.COLUMN_SRS_ID = "srs_id"; /** * id field name, srsId * @type {String} */ SpatialReferenceSystemDao.COLUMN_ID = SpatialReferenceSystemDao.COLUMN_SRS_ID; /** * organization field name * @type {String} */ SpatialReferenceSystemDao.COLUMN_ORGANIZATION = "organization"; /** * organizationCoordsysId field name * @type {String} */ SpatialReferenceSystemDao.COLUMN_ORGANIZATION_COORDSYS_ID = "organization_coordsys_id"; /** * definition field name * @type {String} */ SpatialReferenceSystemDao.COLUMN_DEFINITION = "definition"; /** * description field name * @type {String} */ SpatialReferenceSystemDao.COLUMN_DESCRIPTION = "description"; SpatialReferenceSystemDao.prototype.idColumns = [SpatialReferenceSystemDao.COLUMN_SRS_ID]; module.exports.SpatialReferenceSystemDao = SpatialReferenceSystemDao; SpatialReferenceSystem.TABLE_NAME = SpatialReferenceSystemDao.TABLE_NAME; module.exports.SpatialReferenceSystem = SpatialReferenceSystem; },{"../../dao/dao":11,"proj4":285,"util":343}],10:[function(require,module,exports){ /** * @module dao/columnValues */ /** * Structure to define columns in a table * @class ColumnValues */ var ColumnValues = function() { this.values = {}; this.columns = []; } module.exports = ColumnValues; /** * adds a column to the structure * @param {string} columnName name of column to add * @param {module:user/userColumn~UserColumn} column column to add */ ColumnValues.prototype.addColumn = function (columnName, column) { this.columns.push(columnName); this.values[columnName] = column; }; /** * Gets the column by name * @param {string} columnName name of column * @return {module:user/userColumn~UserColumn} user column */ ColumnValues.prototype.getValue = function (columnName) { return this.values[columnName]; }; },{}],11:[function(require,module,exports){ /** * Dao module. * @module dao/dao */ var sqliteQueryBuilder = require('../db/sqliteQueryBuilder') , ColumnValues = require('./columnValues'); /** * Base DAO * @class Dao * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object */ var Dao = function(geoPackage) { /** * GeoPackage object this dao belongs to * @type {module:geoPackage~GeoPackage} */ this.geoPackage = geoPackage; /** * Database connection to the sqlite file * @type {module:db/geoPackageConnection~GeoPackageConnection} */ this.connection = geoPackage.getDatabase(); } /** * Copies object properties from result object to the object * @param {Object} object object to copy properties to * @param {Object} result object to copy properties from */ Dao.prototype.populateObjectFromResult = function (object, result) { if (!result) return; for (var key in result) { object[key] = result[key]; } }; /** * Checks if the table exists * @return {Boolean} */ Dao.prototype.isTableExists = function () { var results = this.connection.isTableExists(this.gpkgTableName); return !!results; }; /** * Refreshes the object by id * @param {Object} object object to refresh * @return {Object} */ Dao.prototype.refresh = function(object) { return this.queryForSameId(object); } /** * Query for object by id * @param {object} id ID of the object to query for * @return {Object} object created from the raw database object */ Dao.prototype.queryForId = function(id) { var whereString = this.buildPkWhere(id); var whereArgs = this.buildPkWhereArgs(id); var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); var result = this.connection.get(query, whereArgs); if (!result) return; var object = this.createObject(result); // TOOD something is wrong here this.populateObjectFromResult(object, result); return object; }; Dao.prototype.queryForSameId = function (object) { var idArray = this.getMultiId(object); return this.queryForMultiId(idArray); }; Dao.prototype.getMultiId = function (object) { var idValues = []; for (var i = 0; i < this.idColumns.length; i++) { var idValue = object.values ? object.values[this.idColumns[i]] : object[this.idColumns[i]]; if (idValue !== undefined) { idValues.push(idValue); } } return idValues; }; /** * Query for object by multi id * @param {module:dao/columnValues~ColumnValues} idValues ColumnValues with the multi id * @return {Object} object created from the raw database object */ Dao.prototype.queryForMultiId = function (idValues) { var whereString = this.buildPkWhere(idValues); var whereArgs = this.buildPkWhereArgs(idValues); var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); var result = this.connection.get(query, whereArgs); if (!result) return; var object = this.createObject(result); this.populateObjectFromResult(object, result); return object; }; /** * Queries for all matches and returns them in the callback. Be aware this pulls all results into memory * @param {string} [where] Optional where clause * @param {object[]} [whereArgs] Optional where args array * @return {Object[]} raw object array from the database */ Dao.prototype.queryForAll = function (where, whereArgs) { var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where); return this.connection.all(query, whereArgs); }; /** * Queries for all matches and returns them in the callback. Be aware this pulls all results into memory * @param {string} fieldName name of the field to query for * @param {string} value value of the like clause * @return {Object[]} raw object array from the database */ Dao.prototype.queryForLike = function(fieldName, value) { var values = new ColumnValues(); values.addColumn(fieldName, value); var where = this.buildWhereLike(values); var whereArgs = this.buildWhereArgs(value); var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where); return this.connection.all(query, whereArgs); } /** * Queries for all matches and returns them. Only queries for the specified column name Be aware this pulls all results into memory * @param {string} columnName name of the column to query for * @param {module:dao/columnValues~ColumnValues} [fieldValues] optional values to filter on * @return {Object[]} raw object array from the database */ Dao.prototype.queryForColumns = function (columnName, fieldValues) { var where; var whereArgs; if (fieldValues) { where = this.buildWhere(fieldValues); whereArgs = this.buildWhereArgs(fieldValues); } var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", [columnName], where); return this.connection.all(query, whereArgs); }; /** * Queries for all items in the table with a page size and page number * @param {Number} pageSize size of the chunk to query for * @param {Number} page chunk number to query for * @return {Object[]} raw object array from the database */ Dao.prototype.queryForChunk = function(pageSize, page) { var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, undefined, undefined, undefined, undefined, this.idColumns[0], pageSize, page * pageSize); return this.connection.all(query); }; /** * Iterate all items in the table one at a time. If no parameters are passed, iterates the entire table. Returns an Iterable object * @param {string} [field] field to filter on * @param {Object} [value] value to filter on * @param {string} [groupBy] group by clause * @param {string} [having] having clause * @param {string} [orderBy] order by clause * @return {Iterable} iterable of database objects */ Dao.prototype.queryForEach = function (field, value, groupBy, having, orderBy) { if (!field) { var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'"); var count = 0; return this.connection.each(query); } else { var whereString = this.buildWhereWithFieldAndValue(field, value); var whereArgs = this.buildWhereArgs(value); var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); return this.connection.each(query, whereArgs); } }; /** * Iterate all objects in thet able that match the ColumnValues passed in * @param {module:dao/columnValues~ColumnValues} fieldValues ColumnValues to query for * @return {Iterable.Object} */ Dao.prototype.queryForFieldValues = function (fieldValues) { var whereString = this.buildWhere(fieldValues); var whereArgs = this.buildWhereArgs(fieldValues); var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString); var count = 0; return this.connection.each(query, whereArgs); }; /** * Iterate all matching objects * @param {string} join join clause * @param {string} where where clause * @param {Object[]} whereArgs array of where query values * @param {string[]} columns columns to query for * @return {Iterable.} */ Dao.prototype.queryJoinWhereWithArgs = function(join, where, whereArgs, columns) { var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", columns, where, join); var count = 0; return this.connection.each(query, whereArgs); } /** * Count all matching objects * @param {string} join join clause * @param {string} where where clause * @param {Object[]} whereArgs array of where query values * @param {string[]} columns columns to query for * @return {Number} */ Dao.prototype.countJoinWhereWithArgs = function(join, where, whereArgs, columns) { var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", columns, where, join); return this.connection.all(query, whereArgs).length; } /** * Iterate all distinct matching rows in the table * @param {string} where where clause * @param {Object[]} whereArgs array of where query values * @return {Iterable.} */ Dao.prototype.queryWhereWithArgsDistinct = function(where, whereArgs) { var query = sqliteQueryBuilder.buildQuery(true, "'"+this.gpkgTableName+"'", undefined, where); var count = 0; return this.connection.each(query, whereArgs); } /** * Iterate all matching rows * @param {string} [where] where clause * @param {Object[]} [whereArgs] array of where query values * @param {string} [groupBy] group by clause * @param {string} [having] having clause * @param {string} [orderBy] order by clause * @param {string} [limit] limit clause * @return {Iterable.} */ Dao.prototype.queryWhere = function (where, whereArgs, groupBy, having, orderBy, limit) { var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, where, undefined, groupBy, having, orderBy, limit); return this.connection.each(query, whereArgs); }; /** * Get the primary key where clause * @param {Object|Object[]} idValue id * @return {string} primary key where clause */ Dao.prototype.buildPkWhere = function(idValue) { if (Array.isArray(idValue)) { var idValuesArray = idValue; var idColumnValues = new ColumnValues(); for (var i = 0; i < idValuesArray.length; i++) { idColumnValues.addColumn(this.idColumns[i], idValuesArray[i]); } return this.buildWhere(idColumnValues); } return this.buildWhereWithFieldAndValue(this.idColumns, idValue); }; /** * Get the primary key where args * @param {Object} idValue id * @return {Object[]} where args */ Dao.prototype.buildPkWhereArgs = function (idValue) { if (Array.isArray(idValue)) { var idValuesArray = idValue; var values = []; for (var i = 0; i < idValuesArray.length; i++) { values = values.concat(this.buildWhereArgs(idValuesArray[i])); } return values; } return this.buildWhereArgs(idValue); }; /** * Build where (or selection) LIKE statement for fields * @param {module:dao/columnValues~ColumnValues} fields columns and values * @param {string} operation AND or OR * @return {string} where clause */ Dao.prototype.buildWhereLike = function(fields, operation) { var whereString = ''; for (var i = 0; i < fields.columns.length; i++) { var column = fields.columns[i]; if (i) { whereString += ' ' + operation + ' '; } whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column), 'like'); } return whereString; } /** * Build where or selection statement for fields * @param {module:dao/columnValues~ColumnValues} fields columns and values * @param {string} [operation=AND] AND or OR * @return {string} where clause */ Dao.prototype.buildWhere = function (fields, operation) { operation = operation || 'and'; var whereString = ''; for (var i = 0; i < fields.columns.length; i++) { var column = fields.columns[i]; if (i) { whereString += ' ' + operation + ' '; } whereString += this.buildWhereWithFieldAndValue(column, fields.getValue(column)); } return whereString; }; Dao.prototype.buildWhereArgs = function (values) { var args = []; if (Array.isArray(values)) { for (var i = 0; i < values.length; i++) { var value = values[i]; if (value !== undefined && value !== null) { args.push(value); } } } else if (values.columns) { for (var i = 0; i < values.columns.length; i++) { var column = values.columns[i]; var value = values.getValue(column); if (value !== undefined && value !== null) { args.push(value); } } } else { if(values !== undefined || values !== null) { args.push(values); } } return args.count ? null : args; }; /** * Builds a where clause from the field and value with an optional operation. If the value is empty, 'is null' is added to the query for the field * @param {string} field field name * @param {Object} [value] optional value to filter on * @param {string} [operation='='] optional operation * @return {string} where clause */ Dao.prototype.buildWhereWithFieldAndValue = function (field, value, operation) { operation = operation || '='; var whereString = '' + field + ' '; if(value === undefined || value === null){ whereString += "is null"; } else { whereString += operation + ' ?'; } return whereString; }; /** * Query for all rows in the table that match * @param {string} field field to match * @param {string} value value to match * @param {string} [groupBy] group by clause * @param {string} [having] having clause * @param {string} [orderBy] order by clause * @return {Object[]} array of raw database objects */ Dao.prototype.queryForAllEq = function(field, value, groupBy, having, orderBy) { var whereString = this.buildWhereWithFieldAndValue(field, value); var whereArgs = this.buildWhereArgs(value); var query = sqliteQueryBuilder.buildQuery(false, "'"+this.gpkgTableName+"'", undefined, whereString, undefined, groupBy, having, orderBy); return this.connection.all(query, whereArgs); }; /** * Count rows in the table optionally filtered by the parameters specified * @param {module:dao/columnValues~ColumnValues|string} [fields] Either a ColumnValues object or a string specifying a field name * @param {Object} [value] value to filter on if fields is a string * @return {Number} count of objects */ Dao.prototype.count = function(fields, value) { if (!fields) { return this.connection.count(this.gpkgTableName); } var where; var whereArgs; var query; if (fields.columns) { where = this.buildWhere(fields, 'and'); whereArgs = this.buildWhereArgs(fields); query = sqliteQueryBuilder.buildCount("'"+this.gpkgTableName+"'", where); } else { whereString = this.buildWhereWithFieldAndValue(fields, value); whereArgs = this.buildWhereArgs(value); query = sqliteQueryBuilder.buildCount("'"+this.gpkgTableName+"'", whereString); } var result = this.connection.get(query, whereArgs); if (!result) return 0; return result.count; } /** * Get the min of the column * @param {string} column column name * @param {string} [where] where clause * @param {Object[]} [whereArgs] where args * @return {Number} */ Dao.prototype.minOfColumn = function (column, where, whereArgs) { return this.connection.minOfColumn("'"+this.gpkgTableName+"'", column, where, whereArgs); }; /** * Get the max of the column * @param {string} column column name * @param {string} [where] where clause * @param {Object[]} [whereArgs] where args * @return {Number} */ Dao.prototype.maxOfColumn = function (column, where, whereArgs) { return this.connection.maxOfColumn("'"+this.gpkgTableName+"'", column, where, whereArgs); }; /** * Delete the object passed in. Object is deleted by id * @param {Object} object object to delete * @return {Number} number of objects deleted */ Dao.prototype.delete = function(object) { if (object.getId) { return this.deleteById(object.getId()); } return this.deleteByMultiId(this.getMultiId(object)); }; /** * Delete the object specified by the id * @param {Object} idValue id value * @return {Number} number of objects deleted */ Dao.prototype.deleteById = function(idValue) { var where = this.buildPkWhere(idValue); var whereArgs = this.buildPkWhereArgs(idValue); return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs); }; /** * Delete the object specified by the ids * @param {module:dao/columnValues~ColumnValues} idValue id values * @return {Number} number of objects deleted */ Dao.prototype.deleteByMultiId = function(idValues) { var where = this.buildPkWhere(idValues); var whereArgs = this.buildPkWhereArgs(idValues); return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs); }; /** * Delete objects that match the query * @param {string} where where clause * @param {Object[]} whereArgs where arguments * @return {Number} number of objects deleted */ Dao.prototype.deleteWhere = function(where, whereArgs) { return this.connection.delete("'"+this.gpkgTableName+"'", where, whereArgs); }; /** * Delete all objects in the table * @return {Number} number of objects deleted */ Dao.prototype.deleteAll = function() { return this.connection.delete("'"+this.gpkgTableName+"'", '', []); }; /** * Insert the object into the table * @param {Object} object object to be inserted * @return {Number} id of the inserted object */ Dao.prototype.create = function(object) { var sql = sqliteQueryBuilder.buildInsert("'"+this.gpkgTableName+"'", object); var insertObject = sqliteQueryBuilder.buildUpdateOrInsertObject(object); return this.connection.insert(sql, insertObject); }; /** * Update all rows that match the query * @param {module:dao/columnValues~ColumnValues} values values to insert * @param {string} where where clause * @param {Object[]} whereArgs where arguments * @return {Number} number of objects updated */ Dao.prototype.updateWithValues = function (values, where, whereArgs) { var update = sqliteQueryBuilder.buildUpdate("'"+this.gpkgTableName+"'", values, where, whereArgs); return this.connection.run(update.sql, update.args); }; /** * Update the object specified * @param {Object} object object with updated values * @return {Number} number of objects updated */ Dao.prototype.update = function(object) { var updateValues = sqliteQueryBuilder.buildUpdateOrInsertObject(object); var update = sqliteQueryBuilder.buildObjectUpdate("'"+this.gpkgTableName+"'", object); var multiId = this.getMultiId(object); if (multiId.length) { var where = ' where '; for (var i = 0; i < multiId.length; i++) { where += '"' + this.idColumns[i] + '" = $' + sqliteQueryBuilder.fixColumnName(this.idColumns[i]); updateValues[sqliteQueryBuilder.fixColumnName(this.idColumns[i])] = multiId[i]; } update += where; } return this.connection.run(update, updateValues); }; /** * Queries for the object by id, and if it exists, updates it, otherwise creates a new object * @param {Object} object object to update or create * @return {Number} number of objects modified */ Dao.prototype.createOrUpdate = function(object) { var existing = this.queryForSameId(object); if (!existing) { return this.create(object); } else { return this.update(object); } }; /** * Drops this table * @return {Number} results of the drop */ Dao.prototype.dropTable = function() { return this.connection.dropTable(this.gpkgTableName); }; Dao.prototype.rename = function(newName) { var result = this.connection.run('ALTER TABLE ' + '"' + this.gpkgTableName + '" RENAME TO "' + newName + '"'); this.gpkgTableName = newName; } module.exports = Dao; },{"../db/sqliteQueryBuilder":17,"./columnValues":10}],12:[function(require,module,exports){ /** * DataColumnConstraints module. * @module dataColumnConstraints */ var Dao = require('../dao/dao'); var util = require('util'); /** * Contains data to specify restrictions on basic data type column values * @class DataColumnConstraints */ var DataColumnConstraints = function() { /** * Case sensitive name of constraint * @member {string} */ this.constraint_name; /** * Lowercase type name of constraint: range | enum | glob * @member {string} */ this.constraint_type; /** * Specified case sensitive value for enum or glob or NULL for range constraint_type * @member {string} */ this.value; /** * Minimum value for 'range' or NULL for 'enum' or 'glob' constraint_type * @member {Number} */ this.min; /** * 0 (false) if min value is exclusive, or 1 (true) if min value is inclusive * @member {Number} */ this.min_is_inclusive; /** * Maximum value for 'range' or NULL for 'enum' or 'glob' constraint_type * @member {Number} */ this.max; /** * 0 (false) if max value is exclusive, or 1 (true) if max value is inclusive * @member {Number} */ this.max_is_inclusive; /** * For ranges and globs, describes the constraing; for enums, describes the enum value. */ this.description; } /** * Data Column Constraints Data Access Object * @class * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object * @extends {module:dao/dao~Dao} */ var DataColumnConstraintsDao = function(geoPackage) { Dao.call(this, geoPackage); } util.inherits(DataColumnConstraintsDao, Dao); /** * Creates a new DataColumnConstraints object * @return {module:dataColumnConstraints~DataColumnConstraints} */ DataColumnConstraintsDao.prototype.createObject = function () { return new DataColumnConstraints(); }; /** * query by constraint name * @param {String} constraintName constraint name * @return {Iterable} */ DataColumnConstraintsDao.prototype.queryByConstraintName = function (constraintName) { return this.queryForEach(DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, constraintName); }; /** * Query by the unique column values * @param {String} constraintName constraint name * @param {String} constraintType constraint type * @param {String} value value * @return {module:dataColumnConstraints~DataColumnConstraints} */ DataColumnConstraintsDao.prototype.queryUnique = function (constraintName, constraintType, value) { var dataColumnConstraints = new DataColumnConstraints(); dataColumnConstraints.constraint_name = constraintName; dataColumnConstraints.constraint_type = constraintType; dataColumnConstraints.value = value; return this.queryForSameId(dataColumnConstraints); }; DataColumnConstraintsDao.TABLE_NAME = "gpkg_data_column_constraints"; DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME = "constraint_name"; DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE = "constraint_type"; DataColumnConstraintsDao.COLUMN_VALUE = "value"; DataColumnConstraintsDao.COLUMN_MIN = "min"; DataColumnConstraintsDao.COLUMN_MIN_IS_INCLUSIVE = "min_is_inclusive"; DataColumnConstraintsDao.COLUMN_MAX = "max"; DataColumnConstraintsDao.COLUMN_MAX_IS_INCLUSIVE = "max_is_inclusive"; DataColumnConstraintsDao.COLUMN_DESCRIPTION = "description"; DataColumnConstraintsDao.ENUM_TYPE = 'enum'; DataColumnConstraintsDao.GLOB_TYPE = 'glob'; DataColumnConstraintsDao.RANGE_TYPE = 'range'; DataColumnConstraintsDao.prototype.gpkgTableName = DataColumnConstraintsDao.TABLE_NAME; DataColumnConstraintsDao.prototype.idColumns = [DataColumnConstraintsDao.COLUMN_CONSTRAINT_NAME, DataColumnConstraintsDao.COLUMN_CONSTRAINT_TYPE, DataColumnConstraintsDao.COLUMN_VALUE]; module.exports.DataColumnConstraintsDao = DataColumnConstraintsDao; module.exports.DataColumnConstraints = DataColumnConstraints; },{"../dao/dao":11,"util":343}],13:[function(require,module,exports){ /** * DataColumns module. * @module dataColumns */ var Dao = require('../dao/dao') , ContentsDao = require('../core/contents').ContentsDao; var util = require('util'); /** * Stores minimal application schema identifying, descriptive and MIME type * information about columns in user vector feature and tile matrix data tables * that supplements the data available from the SQLite sqlite_master table and * pragma table_info(table_name) SQL function. The gpkg_data_columns data CAN be * used to provide more specific column data types and value ranges and * application specific structural and semantic information to enable more * informative user menu displays and more effective user decisions on the * suitability of GeoPackage contents for specific purposes. * @class DataColumns */ var DataColumns = function() { /** * the name of the tiles, or feature table * @member {string} */ this.table_name; /** * the name of the table column * @member {string} */ this.column_name; /** * A human-readable identifier (e.g. short name) for the column_name content * @member {string} */ this.name; /** * A human-readable formal title for the column_name content * @member {string} */ this.title; /** * A human-readable description for the table_name contente * @member {string} */ this.description; /** * MIME type of columnName if BLOB type or NULL for other types * @member {string} */ this.mime_type; /** * Case sensitive column value constraint name specified */ this.constraint_name; } /** * Contents object. Provides identifying and descriptive information that an * application can display to a user in a menu of geospatial data that is * available for access and/or update. * @class * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object * @extends {module:dao/dao~Dao} */ var DataColumnsDao = function(geoPackage) { Dao.call(this, geoPackage); } util.inherits(DataColumnsDao, Dao); /** * Creates a new {module:dataColumns~DataColumns} object * @return {module:dataColumns~DataColumns} */ DataColumnsDao.prototype.createObject = function () { return new DataColumns(); }; /** * Get the Contents from the Data Columns * @param {module:dataColumns~DataColumns} dataColumns data columns * @return {module:core/contents~Contents} contents */ DataColumnsDao.prototype.getContents = function (dataColumns) { var cd = new ContentsDao(this.geoPackage); return cd.queryForId(dataColumns.table_name); }; /** * Query by constraint name * @param {String} constraintName constraint name * @return {Iterator} iterator of database objects */ DataColumnsDao.prototype.queryByConstraintName = function (constraintName) { return this.queryForEach(DataColumnsDao.COLUMN_CONSTRAINT_NAME, constraintName); }; /** * Get DataColumn by column name and table name * @param {String} tableName table name * @param {String} columnName column name * @return {module:dataColumns~DataColumns} */ DataColumnsDao.prototype.getDataColumns = function (tableName, columnName) { var exists = this.isTableExists(); if (!exists) { return; } var where = this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_TABLE_NAME, tableName) + ' and ' + this.buildWhereWithFieldAndValue(DataColumnsDao.COLUMN_COLUMN_NAME, columnName); var values = [tableName, columnName]; var dataColumn; for (var row of this.queryWhere(where, values)) { dataColumn = row; } return dataColumn; }; DataColumnsDao.TABLE_NAME = "gpkg_data_columns"; DataColumnsDao.COLUMN_PK1 = "table_name"; DataColumnsDao.COLUMN_PK2 = "column_name"; DataColumnsDao.COLUMN_TABLE_NAME = "table_name"; DataColumnsDao.COLUMN_COLUMN_NAME = "column_name"; DataColumnsDao.COLUMN_NAME = "name"; DataColumnsDao.COLUMN_TITLE = "title"; DataColumnsDao.COLUMN_DESCRIPTION = "description"; DataColumnsDao.COLUMN_MIME_TYPE = "mime_type"; DataColumnsDao.COLUMN_CONSTRAINT_NAME = "constraint_name"; DataColumnsDao.prototype.gpkgTableName = DataColumnsDao.TABLE_NAME; DataColumnsDao.prototype.idColumns = [DataColumnsDao.COLUMN_PK1, DataColumnsDao.COLUMN_PK2]; module.exports.DataColumnsDao = DataColumnsDao; module.exports.DataColumns = DataColumns; },{"../core/contents":8,"../dao/dao":11,"util":343}],14:[function(require,module,exports){ /** * @module db/dataTypes */ /** * A boolean value representing true or false. * @type {String} */ module.exports.GPKG_DT_BOOLEAN_NAME = "BOOLEAN"; /** * 8-bit signed two’s complement integer. * @type {String} */ module.exports.GPKG_DT_TINYINT_NAME = "TINYINT"; /** * 16-bit signed two’s complement integer. * @type {String} */ module.exports.GPKG_DT_SMALLINT_NAME = "SMALLINT"; /** * 32-bit signed two’s complement integer. * @type {String} */ module.exports.GPKG_DT_MEDIUMINT_NAME = "MEDIUMINT"; /** * 64-bit signed two’s complement integer. * @type {String} */ module.exports.GPKG_DT_INT_NAME = "INT"; /** * 64-bit signed two’s complement integer. * @type {String} */ module.exports.GPKG_DT_INTEGER_NAME = "INTEGER"; /** * 32-bit IEEE floating point number. * @type {String} */ module.exports.GPKG_DT_FLOAT_NAME = "FLOAT"; /** * 64-bit IEEE floating point number. * @type {String} */ module.exports.GPKG_DT_DOUBLE_NAME = "DOUBLE"; /** * 64-bit IEEE floating point number. * @type {String} */ module.exports.GPKG_DT_REAL_NAME = "REAL"; /** * TEXT{(maxchar_count)}: Variable length string encoded in either UTF-8 or UTF-16, determined by PRAGMA encoding; see http://www.sqlite.org/pragma.html#pragma_encoding. * @type {String} */ module.exports.GPKG_DT_TEXT_NAME = "TEXT"; /** * BLOB{(max_size)}: Variable length binary data. * @type {String} */ module.exports.GPKG_DT_BLOB_NAME = "BLOB"; /** * ISO-8601 date string in the form YYYY-MM-DD encoded in either UTF-8 or UTF-16. * @type {String} */ module.exports.GPKG_DT_DATE_NAME = "DATE"; /** * ISO-8601 date/time string in the form YYYY-MM-DDTHH:MM:SS.SSSZ with T separator character and Z suffix for coordinated universal time (UTC) encoded in either UTF-8 or UTF-16. * @type {String} */ module.exports.GPKG_DT_DATETIME_NAME = "DATETIME"; module.exports.GPKG_DT_GEOMETRY_NAME = "GEOMETRY"; /** * DataType enumeration * @typedef {object} GPKGDataType */ module.exports.GPKGDataType = {}; module.exports.GPKGDataType[module.exports.GPKG_DT_BOOLEAN_NAME] = 0; module.exports.GPKGDataType[module.exports.GPKG_DT_TINYINT_NAME] = 1; module.exports.GPKGDataType[module.exports.GPKG_DT_SMALLINT_NAME] = 2; module.exports.GPKGDataType[module.exports.GPKG_DT_MEDIUMINT_NAME] = 3; module.exports.GPKGDataType[module.exports.GPKG_DT_INT_NAME] = 4; module.exports.GPKGDataType[module.exports.GPKG_DT_INTEGER_NAME] = 5; module.exports.GPKGDataType[module.exports.GPKG_DT_FLOAT_NAME] = 6; module.exports.GPKGDataType[module.exports.GPKG_DT_DOUBLE_NAME] = 7; module.exports.GPKGDataType[module.exports.GPKG_DT_REAL_NAME] = 8; module.exports.GPKGDataType[module.exports.GPKG_DT_TEXT_NAME] = 9; module.exports.GPKGDataType[module.exports.GPKG_DT_BLOB_NAME] = 10; module.exports.GPKGDataType[module.exports.GPKG_DT_DATE_NAME] = 11; module.exports.GPKGDataType[module.exports.GPKG_DT_DATETIME_NAME] = 12; module.exports.GPKGDataType[module.exports.GPKG_DT_GEOMETRY_NAME] = 13; module.exports.GPKGDataType.GPKG_DT_BOOLEAN = 0; module.exports.GPKGDataType.GPKG_DT_TINYINT = 1; module.exports.GPKGDataType.GPKG_DT_SMALLINT = 2; module.exports.GPKGDataType.GPKG_DT_MEDIUMINT = 3; module.exports.GPKGDataType.GPKG_DT_INT = 4; module.exports.GPKGDataType.GPKG_DT_INTEGER = 5; module.exports.GPKGDataType.GPKG_DT_FLOAT = 6; module.exports.GPKGDataType.GPKG_DT_DOUBLE = 7; module.exports.GPKGDataType.GPKG_DT_REAL = 8; module.exports.GPKGDataType.GPKG_DT_TEXT = 9; module.exports.GPKGDataType.GPKG_DT_BLOB = 10; module.exports.GPKGDataType.GPKG_DT_DATE = 11; module.exports.GPKGDataType.GPKG_DT_DATETIME = 12; module.exports.GPKGDataType.GPKG_DT_GEOMETRY = 13; /** * Return the name of the given data type. * * @param {module:db/dataTypes~GPKGDataType} dataType the enum to retrieve the name for * @return {String} the string name of the given data type enum */ module.exports.name = function(dataType) { var name = undefined; switch(dataType){ case module.exports.GPKGDataType.GPKG_DT_BOOLEAN: name = module.exports.GPKG_DT_BOOLEAN_NAME; break; case module.exports.GPKGDataType.GPKG_DT_TINYINT: name = module.exports.GPKG_DT_TINYINT_NAME; break; case module.exports.GPKGDataType.GPKG_DT_SMALLINT: name = module.exports.GPKG_DT_SMALLINT_NAME; break; case module.exports.GPKGDataType.GPKG_DT_MEDIUMINT: name = module.exports.GPKG_DT_MEDIUMINT_NAME; break; case module.exports.GPKGDataType.GPKG_DT_INT: name = module.exports.GPKG_DT_INT_NAME; break; case module.exports.GPKGDataType.GPKG_DT_INTEGER: name = module.exports.GPKG_DT_INTEGER_NAME; break; case module.exports.GPKGDataType.GPKG_DT_FLOAT: name = module.exports.GPKG_DT_FLOAT_NAME; break; case module.exports.GPKGDataType.GPKG_DT_DOUBLE: name = module.exports.GPKG_DT_DOUBLE_NAME; break; case module.exports.GPKGDataType.GPKG_DT_REAL: name = module.exports.GPKG_DT_REAL_NAME; break; case module.exports.GPKGDataType.GPKG_DT_TEXT: name = module.exports.GPKG_DT_TEXT_NAME; break; case module.exports.GPKGDataType.GPKG_DT_BLOB: name = module.exports.GPKG_DT_BLOB_NAME; break; case module.exports.GPKGDataType.GPKG_DT_DATE: name = module.exports.GPKG_DT_DATE_NAME; break; case module.exports.GPKGDataType.GPKG_DT_DATETIME: name = module.exports.GPKG_DT_DATETIME_NAME; break; case module.exports.GPKGDataType.GPKG_DT_GEOMETRY: name = module.exports.GPKG_DT_GEOMETRY_NAME; break; } return name; } /** * Return the data type enum value for the given name, ignoring case. * * @param {String} name the name of the data type enum * @return {module:db/dataTypes~GPKGDataType} the enum value */ module.exports.fromName = function(name) { var value = 9; if (name) { name = name.toUpperCase(); value = module.exports.GPKGDataType[name]; } return value; } },{}],15:[function(require,module,exports){ (function (process,Buffer){ /** * Connection to the SQLite file * @module db/geoPackageConnection */ var GeoPackageConstants = require('../geoPackageConstants'); if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) { console.log('Better SQLite'); } else { console.log('SQL.js'); } /** * Creates a connection to the SQLite file and when connected, returns a promise that resolves the connection. * This will create a {module:db/sqliteAdapter~Adapter} if running in node and the FORCE_SQLJS environment variable is not set. * This will create a {module:db/sqljsAdapter~Adapter} if running in the browser or the FORCE_SQLJS environment variable is set * @see {module:db/sqliteAdapter~Adapter} * @see {module:db/sqljsAdapter~Adapter} * @class * @param {string} filePath path to the sqlite file * @return {Promise} * @todo change this constructor to return an actual `GeoPackageConnection` instance instead of a `Promise` */ var GeoPackageConnection = function(filePath) { if (typeof(process) !== 'undefined' && process.version && !process.env.FORCE_SQLJS) { this.adapterCreator = require('./sqliteAdapter'); } else { this.adapterCreator = require('./sqljsAdapter'); } var promise = new Promise(function(resolve, reject) { this.adapterCreator.createAdapter(filePath) .then(function(adapter) { this.adapter = adapter; resolve(this); }.bind(this)) .catch(function(error) { reject(error); }); }.bind(this)); return promise; } /** * Close the database. */ GeoPackageConnection.prototype.close = function() { this.adapter.close(); } /** * exports the GeoPackage as a file * @param {Function} callback called with an err and the buffer containing the contents of the file */ GeoPackageConnection.prototype.export = function(callback) { this.adapter.export(callback); } /** * Gets the raw connection to the database * @return {Object} */ GeoPackageConnection.prototype.getDBConnection = function () { return this.adapter.db; }; /** * Connects to a GeoPackage database * @param {Object} db database to connect to * @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)} */ GeoPackageConnection.prototype.setDBConnection = function (db) { return this.adapter = this.adapterCreator.createAdapterFromDb(db); }; /** * Registers the given function so that it can be used by SQL statements * @param {string} name name of function to register * @param {Function} functionDefinition function to register * @return {(module:db/sqliteAdapter~Adapter|module:db/sqljsAdapter~Adapter)} the adapter in use */ GeoPackageConnection.prototype.registerFunction = function(name, functionDefinition) { this.adapter.registerFunction(name, functionDefinition); return this.adapter; } /** * Gets the first result from the query * @param {string} sql sql query to run * @param {Array|Object} [params] array of substitution parameters * @return {object} */ GeoPackageConnection.prototype.get = function (sql, params) { return this.adapter.get(sql, params); }; /** * Checks if table exists in database * @param {String} tableName * @returns {Boolean} */ GeoPackageConnection.prototype.isTableExists = function (tableName) { return this.adapter.isTableExists(tableName); }; /** * Run the given SQL and return the results. * @param {string} sql sql to run * @param {Array|Object} [params] array of substitution parameters * @return {{changes: number, lastInsertROWID: number}} object: `{ "changes": number, "lastInsertROWID": number }` * * `changes`: number of rows the statement changed * * `lastInsertROWID`: ID of the last inserted row */ GeoPackageConnection.prototype.run = function (sql, params) { return this.adapter.run(sql, params) }; /** * Executes the query and returns all results in an array * @param {string} sql sql to run * @param {Array|Object} [params] substitution parameters * @return {Object[]} */ GeoPackageConnection.prototype.all = function (sql, params) { return this.adapter.all(sql, params); }; /** * Executes the query and returns an Iterable object of results * @param {string} sql sql to run * @param {Array|Object} [params] substitution parameters * @return {Iterable} */ GeoPackageConnection.prototype.each = function (sql, params) { return this.adapter.each(sql, params); }; /** * Gets the minimum value from the column * @param {string} table table to query * @param {string} column column to get the min value from * @param {string} [where] where clause * @param {Array|Object} [whereArgs] substitution parameters * @return {Object} */ GeoPackageConnection.prototype.minOfColumn = function(table, column, where, whereArgs) { var minStatement = 'select min('+column+') as min from ' + table; if(where) { minStatement += ' '; if (where.indexOf('where')) { where = 'where ' + where; } minStatement += where; } return this.adapter.get(minStatement, whereArgs).min; }; /** * Gets the maximum value from the column * @param {string} table table to query * @param {string} column column to get the max value from * @param {string} [where] where clause * @param {Array|Object} [whereArgs] substitution parameters * @return {Object} */ GeoPackageConnection.prototype.maxOfColumn = function(table, column, where, whereArgs, callback) { var maxStatement = 'select max('+column+') as max from ' + table; if(where) { maxStatement += ' '; if (where.indexOf('where')) { where = 'where ' + where; } maxStatement += where; } return this.adapter.get(maxStatement, whereArgs).max; }; /** * Return the count of objects in the table * @param {string} table table name * @param {string} [where] where clause * @param {Array|Object} [whereArgs] substitution parameters * @return {Number} */ GeoPackageConnection.prototype.count = function(table, where, whereArgs) { return this.adapter.count(table, where, whereArgs); }; /** * Executes an insert statement and returns the last id inserted * @param {string} sql sql to insert * @param {Array|Object} params substitution parameters * @return {Object} last row id inserted */ GeoPackageConnection.prototype.insert = function (sql, params) { return this.adapter.insert(sql, params); }; /** * Delete from the table * @param {string} tableName table name to delete from * @param {string} [where] where clause * @param {Array|Object} [whereArgs] substitution parameters * @return {Number} number of rows deleted */ GeoPackageConnection.prototype.delete = function(tableName, where, whereArgs) { var deleteStatement = 'DELETE FROM ' + tableName + ''; if (where) { deleteStatement += ' WHERE ' + where; } return this.adapter.delete(deleteStatement, whereArgs); }; /** * Drops the table specified * @param {string} tableName table to drop * @return {Boolean} results of table drop */ GeoPackageConnection.prototype.dropTable = function(tableName) { return this.adapter.dropTable(tableName); }; /** * Gets information about the table specified. If data is returned, the table exists * @param {string} tableName table to check * @return {Object} */ GeoPackageConnection.prototype.tableExists = function(tableName) { return this.adapter.get('SELECT name FROM sqlite_master WHERE type="table" AND name=?', [tableName]); }; /** * Checks if a table and column exist * @param {string} tableName table to check * @param {string} columnName column to check * @return {Boolean} */ GeoPackageConnection.prototype.columnAndTableExists = function(tableName, columnName) { var columns = this.adapter.all('PRAGMA table_info(\''+tableName+'\')'); for (var i = 0; i < columns.length; i++) { if (columns[i].name === columnName) { return true; } } return false; } /** * Sets the APPLICATION_ID and user_version for GeoPackage */ GeoPackageConnection.prototype.setApplicationId = function() { var buff = Buffer.from(GeoPackageConstants.APPLICATION_ID); var applicationId = buff.readUInt32BE(0); this.adapter.run('PRAGMA application_id = ' + applicationId); this.adapter.run('PRAGMA user_version = ' + GeoPackageConstants.USER_VERSION); } /** * gets the application_id from the sqlite file * @return {Object} */ GeoPackageConnection.prototype.getApplicationId = function() { return this.adapter.get('PRAGMA application_id').application_id; } module.exports = GeoPackageConnection; /** * Convenience method * @see {module:db/geoPackageConnection~GeoPackageConnection} * @see {module:db/sqliteAdapter~Adapter} * @see {module:db/sqljsAdapter~Adapter} * @param {string|Buffer} filePath string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created * @return {Promise} that resolves */ GeoPackageConnection.connect = function(filePath) { return new GeoPackageConnection(filePath); } /** * Convenience method * @param {Object} db open database to connect to * @return {Promise} */ GeoPackageConnection.connectWithDatabase = function(db) { return new GeoPackageConnection(undefined) .then(function(connection) { connection.setDBConnection(db); }); } }).call(this,require('_process'),require("buffer").Buffer) },{"../geoPackageConstants":71,"./sqliteAdapter":16,"./sqljsAdapter":18,"_process":284,"buffer":182}],16:[function(require,module,exports){ /** * This adapter uses better-sqlite3 to execute queries against the GeoPackage database * @module db/sqliteAdapter * @see {@link https://github.com/JoshuaWise/better-sqlite3|better-sqlite3} */ var fs = require('fs') , path = require('path') , http = require('http') , Buffer = require('buffer') , os = require('os'); /** * Returns a Promise which, when resolved, returns a {module:db/sqliteAdapter~Adapter} which has connected to the GeoPackage database file * @param {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a Buffer containing the contents of the file, if undefined, an in memory database is created * @return {Promise} */ module.exports.createAdapter = function(filePath) { var promise = new Promise(function(resolve, reject) { var Database = require('better-sqlite3'); try { var db; if (filePath && typeof filePath === 'string') { if (filePath.indexOf('http') === 0) { http.get(filePath, function(response) { if (response.statusCode !== 200) { return reject(new Error('Unable to reach url: ' + filePath)); } var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg'); var writeStream = fs.createWriteStream(tmpPath); response.pipe(writeStream); writeStream.on('close', function() { try { db = new Database(tmpPath); // verify that this is an actual database var applicationId = db.pragma('application_id'); db.pragma('journal_mode = WAL'); var adapter = new Adapter(db); adapter.filePath = tmpPath; resolve(adapter); } catch (err) { console.log('error', err); return reject(err); } }); }); } else { db = new Database(filePath); var adapter = new Adapter(db); adapter.filePath = filePath; resolve(adapter); } } else if (filePath) { // write this byte array to a file then open it var byteArray = filePath; var tmpPath = path.join(os.tmpdir(), Date.now() + '.gpkg'); return fs.writeFile(tmpPath, byteArray, function(err) { db = new Database(tmpPath); // verify that this is an actual database try { var applicationId = db.pragma('application_id'); db.pragma('journal_mode = WAL'); } catch (err) { console.log('error', err); return reject(err); } var adapter = new Adapter(db); adapter.filePath = tmpPath; resolve(adapter); }); } else { console.log('create in memory'); db = new Database("memory", { memory: !filePath }); var adapter = new Adapter(db); adapter.filePath = filePath; resolve(adapter); } } catch (err) { console.log('Error opening database', err); return reject(err); } }); return promise; } /** * Creates an adapter from an already established better-sqlite3 database connection * @param {better-sqlite3.Database} db better-sqlite3 database connection * @return {module:db/sqliteAdapter~Adapter} */ module.exports.createAdapterFromDb = function(db) { return new Adapter(db); } /** * Class which adapts generic GeoPackage queries to better-sqlite3 queries * @class Adapter * @param {better-sqlite3.Database} db better-sqlite3 database connection */ function Adapter(db) { this.db = db; } /** * Closes the connection to the GeoPackage */ Adapter.prototype.close = function() { this.db.close(); } /** * Get the connection to the database file * @return {better-sqlite3.Database} */ Adapter.prototype.getDBConnection = function () { return this.db; }; /** * Returns a Buffer containing the contents of the database as a file * @param {Function} callback called when export is complete */ Adapter.prototype.export = function(callback) { fs.readFile(this.filePath, callback); } /** * Registers the given function so that it can be used by SQL statements * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#registeroptions-function---this|better-sqlite3 register} * @param {string} name name of function to register * @param {Function} functionDefinition function to register * @return {module:db/sqliteAdapter~Adapter} this */ Adapter.prototype.registerFunction = function(name, functionDefinition) { this.db.function(name, functionDefinition); return this; } /** * Gets one row of results from the statement * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#getbindparameters---row|better-sqlite3 get} * @param {string} sql statement to run * @param {Array|Object} [params] bind parameters * @return {Object} */ Adapter.prototype.get = function (sql, params) { var statement = this.db.prepare(sql); if (params) { return statement.get(params); } else { return statement.get(); } }; /** * Determines if a tableName exists in the database * @param {String} tableName * @returns {Boolean} */ Adapter.prototype.isTableExists = function (tableName) { var statement = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=:name"); var result; result = statement.get({name: tableName}); return !!result; }; /** * Gets all results from the statement in an array * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#allbindparameters---array-of-rows|better-sqlite3 all} * @param {string} sql statement to run * @param {Array|Object} [params] bind parameters * @return {Object[]} */ Adapter.prototype.all = function (sql, params) { var statement = this.db.prepare(sql); if (params) { return statement.all(params); } else { return statement.all(); } }; /** * Returns an `Iterable` with results from the query * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#iteratebindparameters---iterator|better-sqlite3 iterate} * @param {string} sql statement to run * @param {Object|Array} [params] bind parameters * @return {Iterable} */ Adapter.prototype.each = function (sql, params) { var statement = this.db.prepare(sql); if (params) { return statement.iterate(params); } else { return statement.iterate(); } }; /** * Run the given statement, returning information about what changed. * * @see {@link https://github.com/JoshuaWise/better-sqlite3/wiki/API#runbindparameters---object|better-sqlite3} * @param {string} sql statement to run * @param {Object|Array} [params] bind parameters * @return {{changes: number, lastInsertROWID: number}} object: `{ "changes": number, "lastInsertROWID": number }` * * `changes`: number of rows the statement changed * * `lastInsertROWID`: ID of the last inserted row */ Adapter.prototype.run = function(sql, params) { var statement = this.db.prepare(sql); if (params) { return statement.run(params); } else { return statement.run(); } } /** * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened * @param {string} sql statement to run * @param {Object|Array} [params] bind parameters * @return {Number} last inserted row id */ Adapter.prototype.insert = function(sql, params) { var statement = this.db.prepare(sql); return statement.run(params).lastInsertRowid; }; /** * Runs the specified delete statement and returns the number of deleted rows * @param {string} sql statement to run * @param {Object|Array} params bind parameters * @return {number} deleted rows */ Adapter.prototype.delete = function(sql, params) { var statement = this.db.prepare(sql); return statement.run(params).changes; }; /** * Drops the table * @param {string} table table name * @return {Boolean} indicates if the table was dropped */ Adapter.prototype.dropTable = function(table) { try { var statement = this.db.prepare('DROP TABLE IF EXISTS "' + table + '"'); var result = statement.run(); var vacuum = this.db.prepare('VACUUM'); vacuum.run(); return result.changes == 0; } catch (e) { console.log('Drop Table Error', e); return false; } }; /** * Counts rows that match the query * @param {string} tableName table name from which to count * @param {string} [where] where clause * @param {Object|Array} [whereArgs] where args * @return {Number} count */ Adapter.prototype.count = function (tableName, where, whereArgs) { var sql = 'SELECT COUNT(*) as count FROM "' + tableName + '"'; if (where) { sql += ' where ' + where; } var statement = this.db.prepare(sql); if (whereArgs) { return statement.get(whereArgs).count; } else { return statement.get().count; } }; },{"better-sqlite3":undefined,"buffer":182,"fs":177,"http":329,"os":270,"path":276}],17:[function(require,module,exports){ /** * SQLite query builder module. * @module db/sqliteQueryBuilder */ /** * Utility class to build sql queries * @class */ function SqliteQueryBuilder() {} module.exports = SqliteQueryBuilder; /** * Replaces all whitespace in a column name with underscores * @param {string} columnName column name to fix * @return {string} */ SqliteQueryBuilder.fixColumnName = function(columnName) { return columnName.replace(/\W+/g, '_'); } /** * Builds a query * @param {Boolean} distinct whether query should be distinct or not * @param {string} tables table names to query, added to the query from clause * @param {string[]} [columns=*] columns to query for * @param {string} [where] where clause * @param {string} [join] join clause * @param {string} [groupBy] group by clause * @param {string} [having] having clause * @param {string} [orderBy] order by clause * @param {Number} [limit] limit * @param {Number} [offset] offset * @return {string} */ SqliteQueryBuilder.buildQuery = function(distinct, tables, columns, where, join, groupBy, having, orderBy, limit, offset) { var query = ''; if (isEmpty(groupBy) && !isEmpty(having)) { throw new Error('Illegal Arguments: having clauses require a groupBy clause'); } query += 'select '; if (distinct) { query += 'distinct '; } if(columns && columns.length) { query = appendColumnsToString(columns, query); } else { query += '* '; } query += 'from ' + tables; if (join) { query += ' ' + join; } query = appendClauseToString(query, ' where ', where); query = appendClauseToString(query, ' group by ', groupBy); query = appendClauseToString(query, ' having ', having); query = appendClauseToString(query, ' order by ', orderBy); query = appendClauseToString(query, ' limit ', limit); query = appendClauseToString(query, ' offset ', offset); return query; } /** * Builds a count statement * @param {string} tables table names to query for * @param {string} [where] where clause * @return {string} count statement */ SqliteQueryBuilder.buildCount = function(tables, where) { var query = 'select count(*) as count from ' + tables; query = appendClauseToString(query, ' where ', where); return query; } /** * Builds an insert statement using the properties of the object * @param {string} table table to insert into * @param {Object} object object to insert * @return {string} insert statement */ SqliteQueryBuilder.buildInsert = function(table, object) { if (object.getColumnNames) { return SqliteQueryBuilder.buildInsertFromColumnNames(table, object); } var insert = 'insert into ' + table + ' ('; var keys = ''; var values = ''; var first = true; for (var key in object) { if (object.hasOwnProperty(key)) { if (!first) { keys += ','; values += ','; } first = false; keys += key; values += '$' + SqliteQueryBuilder.fixColumnName(key); } } insert += keys + ') values (' + values + ')'; return insert; } /** * Builds an insert statement from the object.getColumnNames method * @param {string} table table to insert into * @param {Object} object object with a getColumnNames method * @return {string} insert statement */ SqliteQueryBuilder.buildInsertFromColumnNames = function(table, object) { var insert = 'insert into ' + table + ' ('; var keys = ''; var values = ''; var first = true; var columnNames = object.getColumnNames(); for (var i = 0; i < columnNames.length; i++) { var key = columnNames[i]; if (!first) { keys += ','; values += ','; } first = false; keys += '"' + key + '"'; values += '$' + SqliteQueryBuilder.fixColumnName(key); } insert += keys + ') values (' + values + ')'; return insert; } /** * Builds an update or insert object to bind to a statement * @param {Object} object object to create bind parameters from * @return {Object} bind parameters */ SqliteQueryBuilder.buildUpdateOrInsertObject = function(object) { var insertOrUpdate = {}; if (object.getColumnNames) { var columnNames = object.getColumnNames(); for (var i = 0; i < columnNames.length; i++) { insertOrUpdate[SqliteQueryBuilder.fixColumnName(columnNames[i])] = object.toDatabaseValue(columnNames[i]); } } else { for (var key in object) { if (object.hasOwnProperty(key)) { if (object.toDatabaseValue) { insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object.toDatabaseValue(key); } else { if (typeof object[key] == 'boolean') { insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key] ? 1 : 0; } else { insertOrUpdate[SqliteQueryBuilder.fixColumnName(key)] = object[key]; } } } } } return insertOrUpdate; } /** * Builds an update statement * @param {string} table table to update * @param {Object} values object with values to update * @param {string} [where] where clause * @param {Array|Ojbect} [whereArgs] where bind parameters * @return {Object} object with a sql property containing the update statement and an args property with bind arguments */ SqliteQueryBuilder.buildUpdate = function(table, values, where, whereArgs) { var args = []; var update = 'update ' + table + ' set '; var first = true; for (var columnName in values) { if (!first) { update += ', '; } first = false; update += '"'+ columnName + '"'; args.push(values[columnName]); update += '=?'; } if (whereArgs) { for (var i = 0; i < whereArgs.length; i++) { args.push(whereArgs[i]); } } if (where) { update += ' where '; update += where; } return { sql: update, args: args }; } /** * Builds an update from an object * @param {string} table table name to update * @param {Object} object object with values to update * @return {string} update statement */ SqliteQueryBuilder.buildObjectUpdate = function(table, object) { var update = 'update ' + table + ' set '; var first = true; if (object.getColumnNames) { var columnNames = object.getColumnNames(); for (var i = 0; i < columnNames.length; i++) { var key = columnNames[i]; if (!first) { update += ', '; } first = false; update += '"' + key + '"='; update += '$' + SqliteQueryBuilder.fixColumnName(key); } } else { for (var key in object) { if (!first) { update += ', '; } first = false; if (object.hasOwnProperty(key)) { update += '"' + key + '"='; update += '$' + SqliteQueryBuilder.fixColumnName(key); } } } return update; } function appendClauseToString(string, name, clause) { if (clause) { string += name + clause; } return string; } function appendColumnsToString(columns, string) { if (!columns || columns.length == 0) return string; string += columnToAppend(columns[0]); for (var i = 1; i < columns.length; i++) { string += ', ' + columnToAppend(columns[i]); } string += ' '; return string; } function columnToAppend(column) { return column.indexOf('*') != -1 ? column : '"' + column + '"'; } function isEmpty(string) { return !string || string.length === 0; } },{}],18:[function(require,module,exports){ (function (process,Buffer){ /** * This adapter uses sql.js to execute queries against the GeoPackage database * @module db/sqljsAdapter * @see {@link http://kripken.github.io/sql.js/documentation/|sqljs} */ var sqljs = require('sql.js/dist/sql-asm-memory-growth.js'); // var sqljs = require('sql.js/js/sql.js'); /** * Returns a Promise which, when resolved, returns a {module:db/sqljsAdapter~Adapter} which has connected to the GeoPackage database file * @param {string|Buffer} [filePath] string path to an existing file or a path to where a new file will be created or a url from which to download a GeoPackage or a Uint8Array containing the contents of the file, if undefined, an in memory database is created * @return {Promise} */ module.exports.createAdapter = function(filePath) { var promise = new Promise(function(resolve, reject) { sqljs().then(SQL => { if (filePath && typeof filePath === 'string') { if (typeof (process) !== 'undefined' && process.version) { var fs = require('fs'); if (filePath.indexOf('http') === 0) { var http = require('http'); http.get(filePath, function(response) { if (response.statusCode !== 200) { return reject(new Error('Unable to reach url: ' + filePath)); } var body = []; response.on('data', chunk => body.push(chunk)); response.on('end', function() { var t = new Uint8Array(Buffer.concat(body)); var db = new SQL.Database(t); var adapter = new Adapter(db); resolve(adapter); }); }); } else { try { var stats = fs.statSync(filePath); } catch (e) { var db = new SQL.Database(); var adapter = new Adapter(db); return resolve(adapter); } var filebuffer = fs.readFileSync(filePath); var t = new Uint8Array(filebuffer); var db = new SQL.Database(t); // console.log('setting wal mode'); // var walMode = db.exec('PRAGMA journal_mode=DELETE'); // console.log('walMode', walMode); var adapter = new Adapter(db); return resolve(adapter); } } else { var xhr = new XMLHttpRequest(); xhr.open('GET', filePath, true); xhr.responseType = 'arraybuffer'; xhr.onload = function (e) { if (xhr.status !== 200) { return reject(new Error('Unable to reach url: ' + filePath)); } var uInt8Array = new Uint8Array(this.response); var db = new SQL.Database(uInt8Array); var adapter = new Adapter(db); return resolve(adapter); }; xhr.onerror = function (e) { return reject(new Error('Error reaching url: ' + filePath)); }; xhr.send(); } } else if (filePath) { var byteArray = filePath; var db = new SQL.Database(byteArray); var adapter = new Adapter(db); return resolve(adapter); } else { var db = new SQL.Database(); var adapter = new Adapter(db); return resolve(adapter); } }); }); return promise; } /** * Creates an adapter from an already established better-sqlite3 database connection * @param {sqljs.Database} db sqljs database connection * @return {module:db/sqljsAdapter~Adapter} */ module.exports.createAdapterFromDb = function(db) { return new Adapter(db); } /** * Class which adapts generic GeoPackage queries to sqljs queries * @class Adapter * @param {sqljs.Database} db sqljs database connection */ function Adapter(db) { this.db = db; } /** * Closes the connection to the GeoPackage */ Adapter.prototype.close = function() { this.db.close(); } /** * Get the connection to the database file * @return {sqljs.Database} */ Adapter.prototype.getDBConnection = function () { return this.db; }; /** * Returns a Uint8Array containing the contents of the database as a file * @param {Function} callback called when export is complete */ Adapter.prototype.export = function(callback) { callback(null, this.db.export()); } /** * Registers the given function so that it can be used by SQL statements * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html#create_function-dynamic|sqljs create_function} * @param {string} name name of function to register * @param {Function} functionDefinition function to register * @return {module:db/sqljsAdapter~Adapter} this */ Adapter.prototype.registerFunction = function(name, functionDefinition) { this.db.create_function(name, functionDefinition); return this; } /** * Gets one row of results from the statement * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#get-dynamic|sqljs get} * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#getAsObject-dynamic|sqljs getAsObject} * @param {string} sql statement to run * @param {Array|Object} [params] substitution parameters * @return {Object} */ Adapter.prototype.get = function (sql, params) { params = params || []; var statement = this.db.prepare(sql); statement.bind(params); var hasResult = statement.step(); var row; if (hasResult) { row = statement.getAsObject(); } statement.free(); return row; }; /** * Determines if a tableName exists in the database * @param {String} tableName * @returns {Boolean} */ Adapter.prototype.isTableExists = function (tableName) { var statement = this.db.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name=:name"); statement.bind([tableName]); var hasResult = statement.step(); var row; if (hasResult) { row = statement.getAsObject(); } statement.free(); return !!row; }; /** * Gets all results from the statement in an array * @param {string} sql statement to run * @param {Array|Object} [params] bind parameters * @return {Object[]} */ Adapter.prototype.all = function (sql, params) { var rows = []; var iterator = this.each(sql, params); for (var row of iterator) { rows.push(row); } return rows; }; /** * Returns an Iterable with results from the query * @param {string} sql statement to run * @param {Object|Array} params bind parameters * @return {Iterable} */ Adapter.prototype.each = function (sql, params) { var statement = this.db.prepare(sql); statement.bind(params); return { [Symbol.iterator]() { return this; }, next: function() { if (statement.step()) { return { value: statement.getAsObject(), done: false }; } else { statement.free(); return { done: true } } } } }; /** * Runs the statement specified, returning information about what changed * @see {@link http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Statement.html#run-dynamic|sqljs run} * @param {string} sql statement to run * @param {Object|Array} [params] bind parameters * @return {Object} object containing a changes property indicating the number of rows changed and a lastInsertROWID indicating the last inserted row */ Adapter.prototype.run = function(sql, params) { if (params) { for (var key in params) { params['$' + key] = params[key]; } } this.db.run(sql, params); var lastId = this.db.exec('select last_insert_rowid();'); var lastInsertedId; if (lastId) { lastInsertedId = lastId[0].values[0][0]; } return { lastInsertROWID: lastInsertedId, changes: this.db.getRowsModified() }; }; /** * Runs the specified insert statement and returns the last inserted id or undefined if no insert happened * @param {string} sql statement to run * @param {Object|Array} [params] bind parameters * @return {Number} last inserted row id */ Adapter.prototype.insert = function(sql, params) { if (params) { for (var key in params) { params['$' + key] = params[key]; } } var statement = this.db.prepare(sql, params); statement.step(); statement.free(); var lastId = this.db.exec('select last_insert_rowid();'); if (lastId) { return lastId[0].values[0][0]; } else { return; } }; /** * Runs the specified delete statement and returns the number of deleted rows * @param {string} sql statement to run * @param {Object|Array} [params] bind parameters * @return {number} deleted rows */ Adapter.prototype.delete = function(sql, params) { var rowsModified = 0; var statement = this.db.prepare(sql, params); statement.step(); rowsModified = this.db.getRowsModified(); statement.free(); return rowsModified; }; /** * Drops the table * @param {string} table table name * @return {Boolean} indicates if the table was dropped */ Adapter.prototype.dropTable = function(table) { var response = this.db.exec('DROP TABLE IF EXISTS "' + table + '"'); var vacuum = this.db.exec('VACUUM'); return !!response; }; /** * Counts rows that match the query * @param {string} tableName table name from which to count * @param {string} [where] where clause * @param {Object|Array} [whereArgs] where args * @return {Number} count */ Adapter.prototype.count = function (tableName, where, whereArgs) { var sql = 'SELECT COUNT(*) as count FROM "' + tableName + '"'; if (where) { sql += ' where ' + where; } return this.get(sql, whereArgs).count; }; }).call(this,require('_process'),require("buffer").Buffer) },{"_process":284,"buffer":182,"fs":177,"http":329,"sql.js/dist/sql-asm-memory-growth.js":327}],19:[function(require,module,exports){ /** * Creates tables necessary for GeoPackages * @module db/tableCreator */ const SpatialReferenceSystemDao = require('../core/srs').SpatialReferenceSystemDao; const DataTypes = require('./dataTypes'); /** * `TableCreator` provides methods for creating the various standard tables in * a GeoPackage database. * * @class * @param {module:geoPackage~GeoPackage} geopackage GeoPackage object */ var TableCreator = function(geopackage) { this.geopackage = geopackage; this.connection = geopackage.getDatabase(); } module.exports = TableCreator; /** * Creates all required tables and Spatial Reference Systems, in addition to EPSG:3857 * @return {Promise} */ TableCreator.prototype.createRequired = function () { var dao = new SpatialReferenceSystemDao(this.geopackage); return Promise.all([this.createSpatialReferenceSystem(), this.createContents()]) .then(function() { // Create the required Spatial Reference Systems (spec Requirement 11) dao.createUndefinedGeographic(); dao.createWgs84(); dao.createUndefinedCartesian(); // not required but very common dao.createWebMercator(); return true; }); }; /** * Creates the spatial reference system tables * @return {Promise} */ TableCreator.prototype.createSpatialReferenceSystem = function() { return this.createTable('spatial_reference_system'); } /** * Creates the contents tables * @return {Promise} */ TableCreator.prototype.createContents = function() { return this.createTable('contents'); } /** * Creates the geometry columns tables * @return {Promise} */ TableCreator.prototype.createGeometryColumns = function() { return this.createTable('geometry_columns'); } /** * Creates the tile matrix set tables * @return {Promise} */ TableCreator.prototype.createTileMatrixSet = function() { return this.createTable('tile_matrix_set'); } /** * Creates the tile matrix tables * @return {Promise} */ TableCreator.prototype.createTileMatrix = function() { return this.createTable('tile_matrix'); } /** * Creates the data columns tables * @return {Promise} */ TableCreator.prototype.createDataColumns = function() { return this.createTable('data_columns'); } /** * Creates the data column constraints tables * @return {Promise} */ TableCreator.prototype.createDataColumnConstraints = function() { return this.createTable('data_column_constraints'); } /** * Creates the metadata tables * @return {Promise} */ TableCreator.prototype.createMetadata = function() { return this.createTable('metadata'); } /** * Creates the metadata reference tables * @return {Promise} */ TableCreator.prototype.createMetadataReference = function() { return this.createTable('metadata_reference'); } /** * Creates the extensions tables * @return {Promise} */ TableCreator.prototype.createExtensions = function() { return this.createTable('extensions'); } /** * Creates the table index tables * @return {Promise} */ TableCreator.prototype.createTableIndex = function() { return this.createTable('table_index'); } /** * Creates the geometry index tables * @return {Promise} */ TableCreator.prototype.createGeometryIndex = function() { return this.createTable('geometry_index'); } /** * Creates the feature tile link tables * @return {Promise} */ TableCreator.prototype.createFeatureTileLink = function() { return this.createTable('feature_tile_link'); } /** * Creates the extended relations tables * @return {Promise} */ TableCreator.prototype.createExtendedRelations = function() { return this.createTable('extended_relations'); } /** * Creates the contentsId tables * @return {Promise} */ TableCreator.prototype.createContentsId = function() { return this.createTable('contents_id'); } /** * Creates all tables necessary for the specified table creation script name in the GeoPackage * @param {string} creationScriptName creation scripts to run * @return {Promise} */ TableCreator.prototype.createTable = function(creationScriptName) { var connection = this.connection; return tableCreationScripts[creationScriptName].reduce(function(sequence, sql) { return sequence.then(function() { try { return !!connection.run(sql); } catch (error) { if (error.message.indexOf('already exists') === -1) { throw error; } } }); }, Promise.resolve()); } /** * Create the given user table. * * @param {modle:user/userTable~UserTable} userTable user table to create * @return {object} the result of {@link module:db/geoPackageConnection~GeoPackageConnection#run} * @throws {Error} if the table already exists */ TableCreator.prototype.createUserTable = function (userTable) { var connection = this.connection; var result = connection.tableExists(userTable.table_name); if (result) { throw new Error('Table already exists and cannot be created: ' + userTable.table_name); } var check = ''; var sql = 'create table \'' + userTable.table_name + '\' ('; for (var i = 0; i < userTable.columns.length; i++) { var tc = userTable.columns[i]; if (i) { sql += ', '; } sql += '\n\'' + tc.name + '\' ' + tc.getTypeName(); if (tc.max != null) { sql += '(' + tc.max + ')'; if (check.length) { check += ' AND\n'; } check += '\tlength("'+tc.name+'") <= ' + tc.max; } if (tc.notNull) { sql += ' not null' } if (tc.primaryKey) { sql += ' primary key autoincrement'; } if (tc.defaultValue) { if (tc.dataType === DataTypes.GPKGDataType.GPKG_DT_TEXT) { sql += ' default \'' + tc.defaultValue + '\''; } else { sql += ' default ' + tc.defaultValue; } } } for (var i = 0; i < userTable.uniqueConstraints.length; i++) { var uniqueConstraint = userTable.uniqueConstraints[i]; sql += ',\n unique ('; for (var j = 0; j < uniqueConstraint.columns.length; j++) { var uniqueColumn = uniqueConstraint.columns[j]; if (j) { sql += ', '; } sql += uniqueColumn.name; } sql += ')'; } if (check.length) { sql += '\nCHECK(\n' + check + '\n)'; } sql += '\n);'; return connection.run(sql); }; var tableCreationScripts = { spatial_reference_system: [ 'CREATE TABLE gpkg_spatial_ref_sys ('+ ' srs_name TEXT NOT NULL,'+ ' srs_id INTEGER NOT NULL PRIMARY KEY,'+ ' organization TEXT NOT NULL,'+ ' organization_coordsys_id INTEGER NOT NULL,'+ ' definition TEXT NOT NULL,'+ ' description TEXT,'+ ' definition_12_063 TEXT NOT NULL DEFAULT "undefined"'+ ')', 'CREATE VIEW st_spatial_ref_sys AS'+ ' SELECT'+ ' srs_name,'+ ' srs_id,'+ ' organization,'+ ' organization_coordsys_id,'+ ' definition,'+ ' description'+ ' FROM gpkg_spatial_ref_sys', 'CREATE VIEW spatial_ref_sys AS'+ ' SELECT'+ ' srs_id AS srid,'+ ' organization AS auth_name,'+ ' organization_coordsys_id AS auth_srid,'+ ' definition AS srtext'+ ' FROM gpkg_spatial_ref_sys' ], contents: [ 'CREATE TABLE gpkg_contents ('+ ' table_name TEXT NOT NULL PRIMARY KEY,'+ ' data_type TEXT NOT NULL,'+ ' identifier TEXT UNIQUE,'+ " description TEXT DEFAULT '',"+ " last_change DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),"+ ' min_x DOUBLE,'+ ' min_y DOUBLE,'+ ' max_x DOUBLE,'+ ' max_y DOUBLE,'+ ' srs_id INTEGER,'+ ' CONSTRAINT fk_gc_r_srs_id FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys(srs_id)'+ ')' ], geometry_columns: [ 'CREATE TABLE gpkg_geometry_columns ('+ ' table_name TEXT NOT NULL,'+ ' column_name TEXT NOT NULL,'+ ' geometry_type_name TEXT NOT NULL,'+ ' srs_id INTEGER NOT NULL,'+ ' z TINYINT NOT NULL,'+ ' m TINYINT NOT NULL,'+ ' CONSTRAINT pk_geom_cols PRIMARY KEY (table_name, column_name),'+ ' CONSTRAINT uk_gc_table_name UNIQUE (table_name),'+ ' CONSTRAINT fk_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+ ' CONSTRAINT fk_gc_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+ ')', 'CREATE VIEW st_geometry_columns AS'+ ' SELECT'+ ' table_name,'+ ' column_name,'+ ' "ST_" || geometry_type_name AS geometry_type_name,'+ ' g.srs_id,'+ ' srs_name'+ ' FROM gpkg_geometry_columns as g JOIN gpkg_spatial_ref_sys AS s'+ ' WHERE g.srs_id = s.srs_id', 'CREATE VIEW geometry_columns AS'+ ' SELECT'+ ' table_name AS f_table_name,'+ ' column_name AS f_geometry_column,'+ ' (CASE geometry_type_name'+ ' WHEN "GEOMETRY" THEN 0'+ ' WHEN "POINT" THEN 1'+ ' WHEN "LINESTRING" THEN 2'+ ' WHEN "POLYGON" THEN 3'+ ' WHEN "MULTIPOINT" THEN 4'+ ' WHEN "MULTILINESTRING" THEN 5'+ ' WHEN "MULTIPOLYGON" THEN 6'+ ' WHEN "GEOMETRYCOLLECTION" THEN 7'+ ' WHEN "CIRCULARSTRING" THEN 8'+ ' WHEN "COMPOUNDCURVE" THEN 9'+ ' WHEN "CURVEPOLYGON" THEN 10'+ ' WHEN "MULTICURVE" THEN 11'+ ' WHEN "MULTISURFACE" THEN 12'+ ' WHEN "CURVE" THEN 13'+ ' WHEN "SURFACE" THEN 14'+ ' WHEN "POLYHEDRALSURFACE" THEN 15'+ ' WHEN "TIN" THEN 16'+ ' WHEN "TRIANGLE" THEN 17'+ ' ELSE 0 END) AS geometry_type,'+ ' 2 + (CASE z WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) + (CASE m WHEN 1 THEN 1 WHEN 2 THEN 1 ELSE 0 END) AS coord_dimension,'+ ' srs_id AS srid'+ ' FROM gpkg_geometry_columns' ], tile_matrix_set: [ 'CREATE TABLE gpkg_tile_matrix_set ('+ ' table_name TEXT NOT NULL PRIMARY KEY,'+ ' srs_id INTEGER NOT NULL,'+ ' min_x DOUBLE NOT NULL,'+ ' min_y DOUBLE NOT NULL,'+ ' max_x DOUBLE NOT NULL,'+ ' max_y DOUBLE NOT NULL,'+ ' CONSTRAINT fk_gtms_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name),'+ ' CONSTRAINT fk_gtms_srs FOREIGN KEY (srs_id) REFERENCES gpkg_spatial_ref_sys (srs_id)'+ ')' ], tile_matrix: [ 'CREATE TABLE gpkg_tile_matrix ('+ ' table_name TEXT NOT NULL,'+ ' zoom_level INTEGER NOT NULL,'+ ' matrix_width INTEGER NOT NULL,'+ ' matrix_height INTEGER NOT NULL,'+ ' tile_width INTEGER NOT NULL,'+ ' tile_height INTEGER NOT NULL,'+ ' pixel_x_size DOUBLE NOT NULL,'+ ' pixel_y_size DOUBLE NOT NULL,'+ ' CONSTRAINT pk_ttm PRIMARY KEY (table_name, zoom_level),'+ ' CONSTRAINT fk_tmm_table_name FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+ ')', "CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_insert'"+ "BEFORE INSERT ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')"+ "WHERE (NEW.zoom_level < 0);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_zoom_level_update'"+ "BEFORE UPDATE of zoom_level ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: zoom_level cannot be less than 0')"+ "WHERE (NEW.zoom_level < 0);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_insert'"+ "BEFORE INSERT ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')"+ "WHERE (NEW.matrix_width < 1);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_matrix_width_update'"+ "BEFORE UPDATE OF matrix_width ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_width cannot be less than 1')"+ "WHERE (NEW.matrix_width < 1);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_insert'"+ "BEFORE INSERT ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')"+ "WHERE (NEW.matrix_height < 1);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_matrix_height_update'"+ "BEFORE UPDATE OF matrix_height ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: matrix_height cannot be less than 1')"+ "WHERE (NEW.matrix_height < 1);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_insert'"+ "BEFORE INSERT ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')"+ "WHERE NOT (NEW.pixel_x_size > 0);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_pixel_x_size_update'"+ "BEFORE UPDATE OF pixel_x_size ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_x_size must be greater than 0')"+ "WHERE NOT (NEW.pixel_x_size > 0);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_insert'"+ "BEFORE INSERT ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')"+ "WHERE NOT (NEW.pixel_y_size > 0);"+ "END", "CREATE TRIGGER 'gpkg_tile_matrix_pixel_y_size_update'"+ "BEFORE UPDATE OF pixel_y_size ON 'gpkg_tile_matrix'"+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table ''gpkg_tile_matrix'' violates constraint: pixel_y_size must be greater than 0')"+ "WHERE NOT (NEW.pixel_y_size > 0);"+ "END" ], data_columns: [ 'CREATE TABLE gpkg_data_columns ('+ ' table_name TEXT NOT NULL,'+ ' column_name TEXT NOT NULL,'+ ' name TEXT,'+ ' title TEXT,'+ ' description TEXT,'+ ' mime_type TEXT,'+ ' constraint_name TEXT,'+ ' CONSTRAINT pk_gdc PRIMARY KEY (table_name, column_name),'+ ' CONSTRAINT fk_gdc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)'+ ')' ], data_column_constraints: [ 'CREATE TABLE gpkg_data_column_constraints ('+ ' constraint_name TEXT NOT NULL,'+ ' constraint_type TEXT NOT NULL, /* "range" | "enum" | "glob" */'+ ' value TEXT,'+ ' min NUMERIC,'+ ' min_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+ ' max NUMERIC,'+ ' max_is_inclusive BOOLEAN, /* 0 = false, 1 = true */'+ ' description TEXT,'+ ' CONSTRAINT gdcc_ntv UNIQUE (constraint_name, constraint_type, value)'+ ')' ], metadata: [ 'CREATE TABLE gpkg_metadata ('+ ' id INTEGER CONSTRAINT m_pk PRIMARY KEY ASC NOT NULL UNIQUE,'+ ' md_scope TEXT NOT NULL DEFAULT "dataset",'+ ' md_standard_uri TEXT NOT NULL,'+ ' mime_type TEXT NOT NULL DEFAULT "text/xml",'+ ' metadata TEXT NOT NULL'+ ')', "CREATE TRIGGER 'gpkg_metadata_md_scope_insert' "+ "BEFORE INSERT ON 'gpkg_metadata' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table gpkg_metadata violates "+ "constraint: md_scope must be one of undefined | fieldSession | "+ "collectionSession | series | dataset | featureType | feature | "+ "attributeType | attribute | tile | model | catalogue | schema | "+ "taxonomy software | service | collectionHardware | "+ "nonGeographicDataset | dimensionGroup') "+ "WHERE NOT(NEW.md_scope IN "+ "('undefined','fieldSession','collectionSession','series','dataset', "+ "'featureType','feature','attributeType','attribute','tile','model', "+ "'catalogue','schema','taxonomy','software','service', "+ "'collectionHardware','nonGeographicDataset','dimensionGroup')); "+ "END", "CREATE TRIGGER 'gpkg_metadata_md_scope_update' "+ "BEFORE UPDATE OF 'md_scope' ON 'gpkg_metadata' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table gpkg_metadata violates "+ "constraint: md_scope must be one of undefined | fieldSession | "+ "collectionSession | series | dataset | featureType | feature | "+ "attributeType | attribute | tile | model | catalogue | schema | "+ "taxonomy software | service | collectionHardware | "+ "nonGeographicDataset | dimensionGroup') "+ "WHERE NOT(NEW.md_scope IN "+ "('undefined','fieldSession','collectionSession','series','dataset', "+ "'featureType','feature','attributeType','attribute','tile','model', "+ "'catalogue','schema','taxonomy','software','service', "+ "'collectionHardware','nonGeographicDataset','dimensionGroup')); "+ "END" ], metadata_reference: [ "CREATE TABLE gpkg_metadata_reference (" + " reference_scope TEXT NOT NULL," + " table_name TEXT," + " column_name TEXT," + " row_id_value INTEGER," + " timestamp DATETIME NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))," + " md_file_id INTEGER NOT NULL," + " md_parent_id INTEGER," + " CONSTRAINT crmr_mfi_fk FOREIGN KEY (md_file_id) REFERENCES gpkg_metadata(id)," + " CONSTRAINT crmr_mpi_fk FOREIGN KEY (md_parent_id) REFERENCES gpkg_metadata(id)" + ")", "CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_insert' "+ "BEFORE INSERT ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ "violates constraint: reference_scope must be one of \"geopackage\", "+ "table\", \"column\", \"row\", \"row/col\"') "+ "WHERE NOT NEW.reference_scope IN "+ "('geopackage','table','column','row','row/col'); "+ "END", "CREATE TRIGGER 'gpkg_metadata_reference_reference_scope_update' "+ "BEFORE UPDATE OF 'reference_scope' ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ "violates constraint: referrence_scope must be one of \"geopackage\", "+ "\"table\", \"column\", \"row\", \"row/col\"') "+ "WHERE NOT NEW.reference_scope IN "+ "('geopackage','table','column','row','row/col'); "+ "END", "CREATE TRIGGER 'gpkg_metadata_reference_column_name_insert' "+ "BEFORE INSERT ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ "violates constraint: column name must be NULL when reference_scope "+ "is \"geopackage\", \"table\" or \"row\"') "+ "WHERE (NEW.reference_scope IN ('geopackage','table','row') "+ "AND NEW.column_name IS NOT NULL); "+ "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ "violates constraint: column name must be defined for the specified "+ "table when reference_scope is \"column\" or \"row/col\"') "+ "WHERE (NEW.reference_scope IN ('column','row/col') "+ "AND NOT NEW.table_name IN ( "+ "SELECT name FROM SQLITE_MASTER WHERE type = 'table' "+ "AND name = NEW.table_name "+ "AND sql LIKE ('%' || NEW.column_name || '%'))); "+ "END", "CREATE TRIGGER 'gpkg_metadata_reference_column_name_update' "+ "BEFORE UPDATE OF column_name ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ "violates constraint: column name must be NULL when reference_scope "+ "is \"geopackage\", \"table\" or \"row\"') "+ "WHERE (NEW.reference_scope IN ('geopackage','table','row') "+ "AND NEW.column_nameIS NOT NULL); "+ "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ "violates constraint: column name must be defined for the specified "+ "table when reference_scope is \"column\" or \"row/col\"') "+ "WHERE (NEW.reference_scope IN ('column','row/col') "+ "AND NOT NEW.table_name IN ( "+ "SELECT name FROM SQLITE_MASTER WHERE type = 'table' "+ "AND name = NEW.table_name "+ "AND sql LIKE ('%' || NEW.column_name || '%'))); "+ "END", "CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_insert' "+ "BEFORE INSERT ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ "violates constraint: row_id_value must be NULL when reference_scope "+ "is \"geopackage\", \"table\" or \"column\"') "+ "WHERE NEW.reference_scope IN ('geopackage','table','column') "+ "AND NEW.row_id_value IS NOT NULL; "+ "END ", "CREATE TRIGGER 'gpkg_metadata_reference_row_id_value_update' "+ "BEFORE UPDATE OF 'row_id_value' ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ "violates constraint: row_id_value must be NULL when reference_scope "+ "is \"geopackage\", \"table\" or \"column\"') "+ "WHERE NEW.reference_scope IN ('geopackage','table','column') "+ "AND NEW.row_id_value IS NOT NULL; "+ "END", "CREATE TRIGGER 'gpkg_metadata_reference_timestamp_insert' "+ "BEFORE INSERT ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'insert on table gpkg_metadata_reference "+ "violates constraint: timestamp must be a valid time in ISO 8601 "+ "\"yyyy-mm-ddThh:mm:ss.cccZ\" form') "+ "WHERE NOT (NEW.timestamp GLOB "+ "'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' "+ "AND strftime('%s',NEW.timestamp) NOT NULL); "+ "END", "CREATE TRIGGER 'gpkg_metadata_reference_timestamp_update' "+ "BEFORE UPDATE OF 'timestamp' ON 'gpkg_metadata_reference' "+ "FOR EACH ROW BEGIN "+ "SELECT RAISE(ABORT, 'update on table gpkg_metadata_reference "+ "violates constraint: timestamp must be a valid time in ISO 8601 "+ "\"yyyy-mm-ddThh:mm:ss.cccZ\" form') "+ "WHERE NOT (NEW.timestamp GLOB "+ "'[1-2][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]T[0-2][0-9]:[0-5][0-9]:[0-5][0-9].[0-9][0-9][0-9]Z' "+ "AND strftime('%s',NEW.timestamp) NOT NULL); "+ "END " ], extensions: [ 'CREATE TABLE gpkg_extensions ('+ ' table_name TEXT,'+ ' column_name TEXT,'+ ' extension_name TEXT NOT NULL,'+ ' definition TEXT NOT NULL,'+ ' scope TEXT NOT NULL,'+ ' CONSTRAINT ge_tce UNIQUE (table_name, column_name, extension_name)'+ ')' ], table_index: [ 'CREATE TABLE nga_table_index ('+ ' table_name TEXT NOT NULL PRIMARY KEY,'+ ' last_indexed DATETIME'+ ')' ], geometry_index: [ 'CREATE TABLE nga_geometry_index ('+ ' table_name TEXT NOT NULL,'+ ' geom_id INTEGER NOT NULL,'+ ' min_x DOUBLE NOT NULL,'+ ' max_x DOUBLE NOT NULL,'+ ' min_y DOUBLE NOT NULL,'+ ' max_y DOUBLE NOT NULL,'+ ' min_z DOUBLE,'+ ' max_z DOUBLE,'+ ' min_m DOUBLE,'+ ' max_m DOUBLE,'+ ' CONSTRAINT pk_ngi PRIMARY KEY (table_name, geom_id),'+ ' CONSTRAINT fk_ngi_nti_tn FOREIGN KEY (table_name) REFERENCES nga_table_index(table_name)'+ ')' ], feature_tile_link: [ 'CREATE TABLE nga_feature_tile_link ('+ ' feature_table_name TEXT NOT NULL,'+ ' tile_table_name TEXT NOT NULL,'+ ' CONSTRAINT pk_nftl PRIMARY KEY (feature_table_name, tile_table_name)'+ ')' ], extended_relations: [ 'CREATE TABLE gpkgext_relations (' + ' id INTEGER PRIMARY KEY AUTOINCREMENT,' + ' base_table_name TEXT NOT NULL,' + ' base_primary_column TEXT NOT NULL DEFAULT \'id\',' + ' related_table_name TEXT NOT NULL,' + ' related_primary_column TEXT NOT NULL DEFAULT \'id\',' + ' relation_name TEXT NOT NULL,' + ' mapping_table_name TEXT NOT NULL UNIQUE' + ')' ], contents_id: [ 'CREATE TABLE nga_contents_id (' + ' id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,' + ' table_name TEXT NOT NULL,' + ' CONSTRAINT uk_nci_table_name UNIQUE (table_name),' + ' CONSTRAINT fk_nci_gc_tn FOREIGN KEY (table_name) REFERENCES gpkg_contents(table_name)' + ')' ] }; },{"../core/srs":9,"./dataTypes":14}],20:[function(require,module,exports){ /** * Base Extension * @module extension/baseExtension */ var Extension = require('./index').Extension , ExtensionDao = require('./index').ExtensionDao; /** * Abstract base GeoPackage extension * @class */ var BaseExtension = function(geoPackage) { this.geoPackage = geoPackage; this.connection = geoPackage.connection; this.extensionsDao = geoPackage.getExtensionDao(); } module.exports = BaseExtension; /** * Get the extension or create as needed * @param {String} extensionName extension name * @param {String} tableName table name * @param {String} columnName column name * @param {String} definition extension definition * @param {String} scopeType extension scope type * @return {Promise} */ BaseExtension.prototype.getOrCreate = function(extensionName, tableName, columnName, definition, scopeType) { var extension = this.getExtension(extensionName, tableName, columnName); if (extension) { return Promise.resolve(extension); } return this.extensionsDao.createTable() .then(function() { return this.createExtension(extensionName, tableName, columnName, definition, scopeType); }.bind(this)); }; /** * Get the extension for the name, table name and column name * @param {String} extensionName extension name * @param {String} tableName table name * @param {String} columnName column name * @param {Function} callback Called with err if one occurred and the extension */ BaseExtension.prototype.getExtension = function(extensionName, tableName, columnName) { if (!this.extensionsDao.isTableExists()) { return false; } return this.extensionsDao.queryByExtensionAndTableNameAndColumnName(extensionName, tableName, columnName); }; /** * Determine if the GeoPackage has the extension * @param {String} extensionName extension name * @param {String} tableName table name * @param {String} columnName column name */ BaseExtension.prototype.hasExtension = function(extensionName, tableName, columnName) { var exists = this.getExtension(extensionName, tableName, columnName); return !!this.getExtension(extensionName, tableName, columnName).length; }; BaseExtension.prototype.createExtension = function(extensionName, tableName, columnName, definition, scopeType) { var extension = new Extension(); extension.table_name = tableName; extension.column_name = columnName; extension.extension_name = extensionName; extension.definition = definition; extension.scope = scopeType; return this.extensionsDao.create(extension); }; },{"./index":25}],21:[function(require,module,exports){ /** * @memberOf module:extension/contents * @class ContentsId */ /** * Contents Id object, for maintaining a unique identifier for contents tables * @constructor */ var ContentsId = function() { /** * Id column, primary key * @member {Number} */ this.id = undefined; /** * Table name column * @member {String} */ this.table_name = undefined; }; module.exports = ContentsId; },{}],22:[function(require,module,exports){ /** * @memberOf module:extension/contents * @class ContentsIdDao */ var Dao = require('../../dao/dao') , ContentsId = require('./contentsId'); var util = require('util'); /** * Contents Id Data Access Object * @extends {module:dao/dao~Dao} * @constructor */ var ContentsIdDao = function(geoPackage) { Dao.call(this, geoPackage); }; util.inherits(ContentsIdDao, Dao); /** * Create a {module:extension/contents.ContentsId} object * @return {module:extension/contents.ContentsId} */ ContentsIdDao.prototype.createObject = function() { return new ContentsId(); }; /** * Create the necessary tables for this dao * @return {Promise} */ ContentsIdDao.prototype.createTable = function() { return this.geoPackage.getTableCreator().createContentsId(); }; /** * Get all the table names * @return {string[]} */ ContentsIdDao.prototype.getTableNames = function() { var tableNames = []; var tableNameColumns = this.queryForColumns('table_name'); for (var i = 0; i < tableNameColumns.length; i++) { tableNames.push(tableNameColumns[i].table_name); } return tableNames; }; /** * Query by table name * @param {string} tableName name of the table * @return {module:extension/contents.ContentsId} */ ContentsIdDao.prototype.queryForTableName = function(tableName) { var contentsIds = this.queryForAll(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName)); if (contentsIds.length > 0) { return contentsIds[0]; } else { return null; } }; /** * Delete by tableName * @param {string} tableName the table name to delete by * @return {number} number of deleted rows */ ContentsIdDao.prototype.deleteByTableName = function(tableName) { return this.deleteWhere(this.buildWhereWithFieldAndValue(ContentsIdDao.COLUMN_TABLE_NAME, tableName), this.buildWhereArgs(tableName)); }; ContentsIdDao.TABLE_NAME = 'nga_contents_id'; ContentsIdDao.COLUMN_ID = 'id'; ContentsIdDao.COLUMN_TABLE_NAME = 'table_name'; ContentsIdDao.prototype.gpkgTableName = ContentsIdDao.TABLE_NAME; ContentsIdDao.prototype.idColumns = ['id']; module.exports = ContentsIdDao; },{"../../dao/dao":11,"./contentsId":21,"util":343}],23:[function(require,module,exports){ /** * @module extension/contents */ var BaseExtension = require('../baseExtension') , Extension = require('../.').Extension , ContentsDao = require('../../core/contents').ContentsDao , ContentsIdDao = require('./contentsIdDao'); var util = require('util'); /** * Style extension * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object * @extends {module:extension/baseExtension~BaseExtension} * @class ContentsIdExtension * @constructor */ var ContentsIdExtension = function(geoPackage) { BaseExtension.call(this, geoPackage); this.contentsIdDao = geoPackage.getContentsIdDao(); }; util.inherits(ContentsIdExtension, BaseExtension); /** * Get or create the contents id extension * @return {Promise} */ ContentsIdExtension.prototype.getOrCreateExtension = function() { return this.getOrCreate(ContentsIdExtension.EXTENSION_NAME, null, null, ContentsIdExtension.EXTENSION_DEFINITION, Extension.READ_WRITE) .then(function() { return this.contentsIdDao.createTable(); }.bind(this)); }; /** * Get the ContentsIdDao * @returns {module:extension/contents.ContentsIdDao} */ ContentsIdExtension.prototype.getDao = function() { return this.contentsIdDao; }; ContentsIdExtension.prototype.has = function () { return this.hasExtension(ContentsIdExtension.EXTENSION_NAME, null, null) && this.contentsIdDao.isTableExists(); }; /** * Get the ContentsId object * @param contents {module:core/contents.Contents} * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.get = function (contents) { var contentsId = null; if (contents && contents.table_name) { contentsId = this.getByTableName(contents.table_name); } return contentsId; }; /** * Get the ContentsId object * @param tableName * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.getByTableName = function (tableName) { var contentsId = null; if (this.contentsIdDao.isTableExists()) { contentsId = this.contentsIdDao.queryForTableName(tableName); } return contentsId; }; /** * Get the ContentsId id * @param contents {module:core/contents.Contents} * @returns {Number} */ ContentsIdExtension.prototype.getId = function (contents) { let contentsId = null; if (contents && contents.table_name) { contentsId = this.getIdByTableName(contents.table_name); } return contentsId; }; /** * Get the ContentsId id * @param tableName * @returns {Number} */ ContentsIdExtension.prototype.getIdByTableName = function (tableName) { var id = null; if (this.contentsIdDao.isTableExists()) { var contentsId = this.contentsIdDao.queryForTableName(tableName); if (contentsId) { id = contentsId.id; } } return id; }; /** * Creates contentsId for contents * @param contents {module:core/contents.Contents} * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.create = function (contents) { var contentsId = null; if (contents && contents.table_name) { contentsId = this.createWithTableName(contents.table_name); } return contentsId; }; /** * Creates contentsId for contents * @param tableName * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.createWithTableName = function (tableName) { var contentsId = this.contentsIdDao.createObject(); contentsId.table_name = tableName; contentsId.id = this.contentsIdDao.create(contentsId); return contentsId; }; /** * Creates contentsId for contents * @param contents {module:core/contents.Contents} * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.createId = function (contents) { var contentsId = null; if (contents && contents.table_name) { contentsId = this.createIdWithTableName(contents.table_name); } return contentsId; }; /** * Creates contentsId for contents * @param tableName {string} * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.createIdWithTableName = function (tableName) { return this.createWithTableName(tableName); }; /** * Gets or creates contentsId for contents * @param contents {module:core/contents.Contents} * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.getOrCreateId = function (contents) { var contentsId = null; if (contents && contents.table_name) { contentsId = this.getOrCreateIdByTableName(contents.table_name); } return contentsId; }; /** * Gets or creates contentsId for table name * @param tableName {string} * @returns {module:extension/contents.ContentsId} */ ContentsIdExtension.prototype.getOrCreateIdByTableName = function (tableName) { var contentId = this.getByTableName(tableName); if (contentId == null) { contentId = this.createWithTableName(tableName); } return contentId; }; /** * Deletes contentsId for contents * @param contents {module:core/contents.Contents} * @returns {number} number of deleted rows */ ContentsIdExtension.prototype.deleteId = function (contents) { var deleted = false; if (contents && contents.table_name) { deleted = this.deleteIdByTableName(contents.table_name); } return deleted; }; /** * Deletes contentId for table name * @param tableName {string} * @returns {number} number of deleted rows */ ContentsIdExtension.prototype.deleteIdByTableName = function (tableName) { return this.contentsIdDao.deleteByTableName(tableName); }; /** * Number of contentsIds * @returns {number} */ ContentsIdExtension.prototype.count = function () { var count = 0; if (this.has()) { count = this.contentsIdDao.count(); } return count; }; /** * Create contentsIds for contents of type passed in * @param type {string} defaults to "" * @returns {number} */ ContentsIdExtension.prototype.createIds = function (type = "") { var missing = this.getMissing(type); for (var i = 0; i < missing.length; i++) { this.getOrCreateIdByTableName(missing[i].table_name); } return missing.length; }; /** * Deletes ids by type * @param type * @returns {number} */ ContentsIdExtension.prototype.deleteIds = function (type = "") { var deleted = 0; if (this.has()) { if (type.length === 0) { deleted = this.contentsIdDao.deleteAll(); } else { var ids = this.getIdsByType(type); for (var i = 0; i < ids.length; i++) { deleted += this.contentsIdDao.deleteById(ids[i].id); } } } return deleted; }; ContentsIdExtension.prototype.getIdsByType = function (type = "") { var contentIds = []; if (this.has()) { var query = "SELECT "; query += ContentsIdDao.COLUMN_ID; query += ", "; query += ContentsIdDao.COLUMN_TABLE_NAME; query += " FROM " + ContentsIdDao.TABLE_NAME; query += " WHERE "; query += ContentsIdDao.COLUMN_TABLE_NAME; query += " IN (SELECT "; query += ContentsDao.COLUMN_TABLE_NAME; query += " FROM "; query += ContentsDao.TABLE_NAME; var where = ""; var params = []; if (type != null && type.length > 0) { where += ContentsDao.COLUMN_DATA_TYPE; where += " = ?"; params.push(type); } if (where.length > 0) { query += " WHERE " + where; } query += ")"; contentIds = this.connection.all(query, params); } return contentIds; }; /** * Get contents without contents ids * @param type * @returns {string[]} */ ContentsIdExtension.prototype.getMissing = function (type = "") { var query = "SELECT " + ContentsDao.COLUMN_TABLE_NAME + " FROM " + ContentsDao.TABLE_NAME; var where = ""; var params = []; if (type != null && type.length > 0) { where += ContentsDao.COLUMN_DATA_TYPE; where += " = ?"; params.push(type); } if (this.has()) { if (where.length > 0) { where += " AND "; } where += ContentsDao.COLUMN_TABLE_NAME; where += " NOT IN (SELECT "; where += ContentsIdDao.COLUMN_TABLE_NAME; where += " FROM "; where += ContentsIdDao.TABLE_NAME; where += ")"; } if (where.length > 0) { query += " WHERE " + where; } return this.connection.all(query, params); }; /** * Remove contents id extension */ ContentsIdExtension.prototype.removeExtension = function() { if (this.contentsIdDao.isTableExists()) { this.geoPackage.deleteTable(ContentsIdDao.TABLE_NAME); } if (this.extensionsDao.isTableExists()) { this.extensionsDao.deleteByExtension(ContentsIdDao.EXTENSION_NAME); } }; ContentsIdExtension.EXTENSION_NAME = 'nga_contents_id'; ContentsIdExtension.EXTENSION_AUTHOR = 'nga'; ContentsIdExtension.EXTENSION_NAME_NO_AUTHOR = 'contents_id'; ContentsIdExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/contents-id.html'; module.exports = ContentsIdExtension; },{"../.":25,"../../core/contents":8,"../baseExtension":20,"./contentsIdDao":22,"util":343}],24:[function(require,module,exports){ /** * CrsWktExtension module. * @module extension/crsWkt */ var BaseExtension = require('../baseExtension') , Extension = require('../.').Extension; var util = require('util'); /** * OGC Well known text representation of Coordinate Reference Systems extensionName * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object * @class * @extends {module:extension/baseExtension~BaseExtension} */ var CrsWktExtension = function(geoPackage) { BaseExtension.call(this, geoPackage); this.extensionName = CrsWktExtension.EXTENSION_NAME; this.extensionDefinition = CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION; } util.inherits(CrsWktExtension, BaseExtension); /** * Get or create the extension * @return {Promise} */ CrsWktExtension.prototype.getOrCreateExtension = function() { return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE); }; CrsWktExtension.EXTENSION_NAME = 'gpkg_crs_wkt'; CrsWktExtension.EXTENSION_CRS_WKT_AUTHOR = 'gpkg'; CrsWktExtension.EXTENSION_CRS_WKT_NAME_NO_AUTHOR = 'crs_wkt'; CrsWktExtension.EXTENSION_CRS_WKT_DEFINITION = 'http://www.geopackage.org/spec/#extension_crs_wkt'; module.exports.CrsWktExtension = CrsWktExtension; },{"../.":25,"../baseExtension":20,"util":343}],25:[function(require,module,exports){ /** * Metadata module. * @module extension * @see module:dao/dao */ var Dao = require('../dao/dao') , ColumnValues = require('../dao/columnValues') , TableCreator = require('../db/tableCreator'); var util = require('util'); /** * Indicates that a particular extension applies to a GeoPackage, a table in a * GeoPackage or a column of a table in a GeoPackage. An application that access * a GeoPackage can query the gpkg_extensions table instead of the contents of * all the user data tables to determine if it has the required capabilities to * read or write to tables with extensions, and to “fail fast” and return an * error message if it does not. * @class Extension */ var Extension = function() { /** * Name of the table that requires the extension. When NULL, the extension * is required for the entire GeoPackage. SHALL NOT be NULL when the * column_name is not NULL. * @member {String} */ this.table_name; /** * Name of the column that requires the extension. When NULL, the extension * is required for the entire table. * @member {String} */ this.column_name; /** * The case sensitive name of the extension that is required, in the form * _. * @member {String} */ this.extension_name; /** * Definition of the extension in the form specfied by the template in * GeoPackage Extension Template (Normative) or reference thereto. * @member {String} */ this.definition; /** * Indicates scope of extension effects on readers / writers: read-write or * write-only in lowercase. * @member {String} */ this.scope; } Extension.EXTENSION_NAME_DIVIDER = "_"; Extension.READ_WRITE = "read-write"; Extension.WRITE_ONLY = "write-only"; Extension.prototype.setExtensionName = function(author, extensionName) { this.extension_name = Extension.buildExtensionName(author, extensionName); }; Extension.prototype.getAuthor = function() { return Extension.getAuthorWithExtensionName(this.extension_name); } Extension.prototype.getExtensionNameNoAuthor = function() { return Extension.getExtensionNameNoAuthor(this.extension_name); } Extension.buildExtensionName = function(author, extensionName) { return author + Extension.EXTENSION_NAME_DIVIDER + extensionName; } Extension.getAuthorWithExtensionName = function(extensionName) { return extensionName.split(Extension.EXTENSION_NAME_DIVIDER)[0]; } Extension.getExtensionNameNoAuthor = function(extensionName) { return extensionName.slice(extensionName.indexOf(Extension.EXTENSION_NAME_DIVIDER)+1); } /** * Extension Data Access Object * @class * @extends {module:dao/dao~Dao} */ var ExtensionDao = function(geoPackage) { Dao.call(this, geoPackage); }; util.inherits(ExtensionDao, Dao); ExtensionDao.prototype.createObject = function(row) { var e = new Extension(); for (var key in row) { e[key] = row[key]; } return e; }; ExtensionDao.prototype.queryByExtension = function(extensionName) { var results = this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); var e = this.createObject(results[0]); return e; } ExtensionDao.prototype.queryAllByExtension = function(extensionName) { var extensions = [] for (var row of this.queryForAllEq(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName)) { var e = this.createObject(row); extensions.push(e); } if (extensions.length) { return extensions; } else { return false; } } ExtensionDao.prototype.queryByExtensionAndTableName = function(extensionName, tableName) { var values = new ColumnValues(); values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName); var extensions = []; for (var row of this.queryForFieldValues(values)) { var e = this.createObject(row); extensions.push(e); } if (extensions.length) { return extensions; } else { return false; } } ExtensionDao.prototype.queryByExtensionAndTableNameAndColumnName = function (extensionName, tableName, columnName) { var values = new ColumnValues(); values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName); values.addColumn(ExtensionDao.COLUMN_COLUMN_NAME, columnName); var extensions = []; for (var row of this.queryForFieldValues(values)) { var e = this.createObject(row); extensions.push(e); } if (extensions.length) { return extensions; } else { return false; } }; ExtensionDao.prototype.createTable = function() { var tc = new TableCreator(this.geoPackage); return tc.createExtensions(); } ExtensionDao.prototype.deleteByExtension = function(extensionName) { var values = new ColumnValues(); values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); this.deleteWhere(this.buildWhere(values, '='), this.buildWhereArgs(values)); } ExtensionDao.prototype.deleteByExtensionAndTableName = function(extensionName, tableName) { var values = new ColumnValues(); values.addColumn(ExtensionDao.COLUMN_EXTENSION_NAME, extensionName); values.addColumn(ExtensionDao.COLUMN_TABLE_NAME, tableName); this.deleteWhere(this.buildWhere(values, 'and'), this.buildWhereArgs(values)); } ExtensionDao.TABLE_NAME = "gpkg_extensions"; ExtensionDao.COLUMN_TABLE_NAME = "table_name"; ExtensionDao.COLUMN_COLUMN_NAME = "column_name"; ExtensionDao.COLUMN_EXTENSION_NAME = "extension_name"; ExtensionDao.COLUMN_DEFINITION = "definition"; ExtensionDao.COLUMN_SCOPE = "scope"; ExtensionDao.prototype.gpkgTableName = ExtensionDao.TABLE_NAME; ExtensionDao.prototype.idColumns = [ExtensionDao.COLUMN_TABLE_NAME, ExtensionDao.COLUMN_COLUMN_NAME, ExtensionDao.COLUMN_EXTENSION_NAME]; module.exports.ExtensionDao = ExtensionDao; module.exports.Extension = Extension; },{"../dao/columnValues":10,"../dao/dao":11,"../db/tableCreator":19,"util":343}],26:[function(require,module,exports){ /** * Feature Table Index * @module extension/index */ var Extension = require('../index').Extension , ExtensionDao = require('../index').ExtensionDao , BaseExtension = require('../baseExtension') , TableIndexDao = require('./tableIndex').TableIndexDao , TableIndex = require('./tableIndex').TableIndex , GeometryIndexDao = require('./geometryIndex').GeometryIndexDao , RTreeIndexDao = require('../rtree').RTreeIndexDao , RTreeIndex = require('../rtree').RTreeIndex , ContentsDao = require('../../core/contents').ContentsDao , EnvelopeBuilder = require('../../geom/envelopeBuilder'); var proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; var util = require('util'); /** * This class will either use the RTree index if it exists, or the * Feature Table Index NGA Extension implementation. This extension is used to * index Geometries within a feature table by their minimum bounding box for * bounding box queries. * @extends {module:extension/baseExtension~BaseExtension} * @class */ var FeatureTableIndex = function(geoPackage, featureDao) { BaseExtension.call(this, geoPackage); this.progress; /** * Feature Dao to index * @type {module:features/user/featureDao~FeatureDao} */ this.featureDao = featureDao; this.extensionName = Extension.buildExtensionName(FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR, FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR); this.extensionDefinition = FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION; this.tableName = featureDao.table_name; this.columnName = featureDao.getGeometryColumnName(); this.extensionsDao = geoPackage.getExtensionDao(); this.tableIndexDao = geoPackage.getTableIndexDao(); this.geometryIndexDao = geoPackage.getGeometryIndexDao(featureDao); this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao); this.rtreeIndexDao.gpkgTableName = 'rtree_'+this.tableName+'_'+this.columnName; this.rtreeIndex = new RTreeIndex(geoPackage, featureDao); /** * true if the table is indexed with an RTree * @type {Boolean} */ this.rtreeIndexed = this.hasExtension('gpkg_rtree_index', this.tableName, this.columnName); } util.inherits(FeatureTableIndex, BaseExtension); /** * Index the table if not already indexed * @param {Function} progress function which is called with progress while indexing * @return {Promise} promise resolved when the indexing is complete */ FeatureTableIndex.prototype.index = function(progress) { return this.indexWithForce(false, progress); }; /** * Index the table if not already indexed or force is true * @param {Boolean} force force index even if the table is already indexed * @param {Function} progress function which is called with progress while indexing * @return {Promise} promise resolved when the indexing is complete */ FeatureTableIndex.prototype.indexWithForce = function(force, progress) { progress = progress || function() {}; this.progress = function(message) { setTimeout(progress, 0, message); }; var indexed = this.isIndexed(); if (force || !indexed) { return this.getOrCreateExtension() .then(function(extension) { return this.getOrCreateTableIndex(); }.bind(this)) .then(function(tableIndex) { return this.createOrClearGeometryIndicies() .then(function() { return this.indexTable(tableIndex); }.bind(this)) .then(function() { return true; }); }.bind(this)); } else { return Promise.resolve(indexed); } } /** * Check if the table is indexed either with an RTree or the NGA Feature Table Index * @return {Boolean} */ FeatureTableIndex.prototype.isIndexed = function () { if (this.rtreeIndexed) return true; try { var result = this.getFeatureTableIndexExtension(); if (result) { var contentsDao = this.geoPackage.getContentsDao(); var contents = contentsDao.queryForId(this.tableName); if (!contents) return false; var lastChange = new Date(contents.last_change); var tableIndex = this.tableIndexDao.queryForId(this.tableName); if (!tableIndex || !tableIndex.last_indexed) { return false; } var lastIndexed = new Date(tableIndex.last_indexed); return lastIndexed >= lastChange; } else { return false; } } catch (e) { return false; } }; /** * Returns the feature table index extension for this table and column name if exists * @return {module:extension~Extension} */ FeatureTableIndex.prototype.getFeatureTableIndexExtension = function () { return this.getExtension(this.extensionName, this.tableName, this.columnName); }; /** * Get or create the extension for this table name and column name * @return {module:extension~Extension} */ FeatureTableIndex.prototype.getOrCreateExtension = function() { return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.READ_WRITE); }; /** * Get or create if needed the table index * @return {Promise} */ FeatureTableIndex.prototype.getOrCreateTableIndex = function() { var tableIndex = this.getTableIndex(); if (tableIndex) return Promise.resolve(tableIndex); return this.tableIndexDao.createTable() .then(function() { this.createTableIndex(); return this.getTableIndex(); }.bind(this)); }; /** * Create the table index * @return {module:extension/index~TableIndex} */ FeatureTableIndex.prototype.createTableIndex = function() { var ti = new TableIndex(); ti.table_name = this.tableName; ti.last_indexed = this.lastIndexed; return this.tableIndexDao.create(ti); }; /** * Get the table index * @return {module:extension/index~TableIndex} */ FeatureTableIndex.prototype.getTableIndex = function() { if (this.tableIndexDao.isTableExists()) { return this.tableIndexDao.queryForId(this.tableName); } else { return; } }; /** * Clear the geometry indices or create the table if needed * @return {Promise} resolved when complete */ FeatureTableIndex.prototype.createOrClearGeometryIndicies = function() { return this.geometryIndexDao.createTable() .then(function() { return this.clearGeometryIndicies(); }.bind(this)); }; /** * Clears the geometry indices * @return {Number} number of rows deleted */ FeatureTableIndex.prototype.clearGeometryIndicies = function() { var where = this.geometryIndexDao.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, this.tableName); var whereArgs = this.geometryIndexDao.buildWhereArgs(this.tableName); return this.geometryIndexDao.deleteWhere(where, whereArgs); }; /** * Indexes the table * @param {module:extension/index~TableIndex} tableIndex TableIndex * @return {Promise} resolved when complete */ FeatureTableIndex.prototype.indexTable = function(tableIndex) { return new Promise(function(resolve, reject) { setTimeout(function() { this.indexChunk(0, tableIndex, resolve, reject); }.bind(this)); }.bind(this)) .then(function(result) { return this.updateLastIndexed(tableIndex); }.bind(this)); }; /** * Indexes a chunk of 100 rows * @param {Number} page page to start on * @param {module:extension/index~TableIndex} tableIndex TableIndex * @param {Function} resolve function to call when all chunks are indexed * @param {Function} reject called if there is an error */ FeatureTableIndex.prototype.indexChunk = function(page, tableIndex, resolve, reject) { var rows = this.featureDao.queryForChunk(100, page); if (rows.length) { this.progress('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100)); console.log('Indexing ' + (page * 100) + ' to ' + ((page+1) * 100)); rows.forEach(function(row) { var fr = this.featureDao.getRow(row); this.indexRow(tableIndex, fr.getId(), fr.getGeometry()); }.bind(this)); setTimeout(function() { this.indexChunk(++page, tableIndex, resolve, reject); }.bind(this)); } else { resolve(); } } /** * Indexes a row * @param {module:extension/index~TableIndex} tableIndex TableIndex` * @param {Number} geomId id of the row * @param {module:geom/geometryData~GeometryData} geomData GeometryData to index * @return {Boolean} success */ FeatureTableIndex.prototype.indexRow = function(tableIndex, geomId, geomData) { if (!geomData) return false; var envelope = geomData.envelope; if (!envelope) { var geometry = geomData.geometry; if (geometry) { envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geometry); } } if (envelope) { var geometryIndex = this.geometryIndexDao.populate(tableIndex, geomId, envelope); return this.geometryIndexDao.createOrUpdate(geometryIndex); } else { return false; } }; /** * Update the last time this feature table was indexed * @param {module:extension/index~TableIndex} tableIndex TableIndex * @return {Object} update status */ FeatureTableIndex.prototype.updateLastIndexed = function(tableIndex) { if (!tableIndex) { tableIndex = new TableIndex(); tableIndex.table_name = this.tableName; } tableIndex.last_indexed = new Date().toISOString(); var updateIndex = this.tableIndexDao.createOrUpdate(tableIndex); return updateIndex; } /** * Query the index with the specified bounding box and projection * @param {module:boundingBox~BoundingBox} boundingBox bounding box to query for * @param {string} projection projection the boundingBox is in * @return {Iterable} */ FeatureTableIndex.prototype.queryWithBoundingBox = function(boundingBox, projection) { var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection); var envelope = projectedBoundingBox.buildEnvelope(); return this.queryWithGeometryEnvelope(envelope); } /** * Query witha geometry envelope * @param {Envelope} envelope envelope * @return {Iterable} */ FeatureTableIndex.prototype.queryWithGeometryEnvelope = function(envelope) { if (this.rtreeIndexed) { return this.rtreeIndexDao.queryWithGeometryEnvelope(envelope); } else { return this.geometryIndexDao.queryWithGeometryEnvelope(envelope); } } /** * Count the index with the specified bounding box and projection * @param {module:boundingBox~BoundingBox} boundingBox bounding box to query for * @param {string} projection projection the boundingBox is in * @return {Number} */ FeatureTableIndex.prototype.countWithBoundingBox = function(boundingBox, projection) { var projectedBoundingBox = boundingBox.projectBoundingBox(projection, this.featureDao.projection); var envelope = projectedBoundingBox.buildEnvelope(); return this.countWithGeometryEnvelope(envelope); }; /** * Count with a geometry envelope * @param {Envelope} envelope envelope * @return {Number} */ FeatureTableIndex.prototype.countWithGeometryEnvelope = function(envelope) { if (this.rtreeIndexed) { return this.rtreeIndexDao.countWithGeometryEnvelope(envelope); } else { return this.geometryIndexDao.countWithGeometryEnvelope(envelope); } }; FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_AUTHOR = 'nga'; FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_NAME_NO_AUTHOR = 'geometry_index'; FeatureTableIndex.EXTENSION_GEOMETRY_INDEX_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/geometry-index.html'; module.exports = FeatureTableIndex; },{"../../core/contents":8,"../../geom/envelopeBuilder":72,"../baseExtension":20,"../index":25,"../rtree":44,"./geometryIndex":27,"./tableIndex":28,"proj4":285,"util":343}],27:[function(require,module,exports){ /** * GeometryIndexDao module. * @module extension/index */ var Dao = require('../../dao/dao') , TableIndexDao = require('./tableIndex').TableIndexDao , TableCreator = require('../../db/tableCreator'); var util = require('util'); /** * Geometry Index object, for indexing data within user tables * @class */ var GeometryIndex = function() { /** * Name of the table * @member {String} */ this.table_name; /** * Geometry Id column * @member {Number} */ this.geom_id; /** * Min X * @member {Number} */ this.min_x; /** * Max X * @member {Number} */ this.max_x; /** * Min Y * @member {Number} */ this.min_y; /** * Max Y * @member {Number} */ this.max_y; /** * Min Z * @member {Number} */ this.min_z; /** * Max Z * @member {Number} */ this.max_z; /** * Min M * @member {Number} */ this.min_m; /** * Max M * @member {Number} */ this.max_m; } GeometryIndex.prototype.setTableIndex = function(tableIndex) { this.table_name = tableIndex.table_name; } /** * Geometry Index Data Access Object * @class * @extends {module:dao/dao~Dao} */ var GeometryIndexDao = function(geoPackage, featureDao) { Dao.call(this, geoPackage); this.featureDao = featureDao; }; util.inherits(GeometryIndexDao, Dao); GeometryIndexDao.prototype.createObject = function() { return new GeometryIndex(); }; /** * Get the Table Index of the Geometry Index * * @param {module:extension/index~GeometryIndex} geometryIndex geometry index * @return {module:extension/index~TableIndex} */ GeometryIndexDao.prototype.getTableIndex = function(geometryIndex) { var dao = this.geoPackage.getTableIndexDao(); return dao.queryForId(geometryIndex.tableName); }; /** * Query by table name * @param {string} tableName table name * @return {Iterable} */ GeometryIndexDao.prototype.queryForTableName = function(tableName) { return this.queryForEach(GeometryIndexDao.COLUMN_TABLE_NAME, tableName); }; /** * Count by table name * * @param tableName table name * * @return count */ /** * Count by table name * @param {string} tableName table name * @return {Number} */ GeometryIndexDao.prototype.countByTableName = function(tableName) { return this.count(GeometryIndexDao.COLUMN_TABLE_NAME, tableName); }; /** * Populate a new geometry index from an envelope * * @param tableIndex table index * @param geomId geometry id * @param envelope geometry envelope * @param callback called with results of the populate */ /** * Populate a new goemetry index from an envelope * @param {module:extension/index~TableIndex} tableIndex TableIndex * @param {Number} geometryId id of the geometry * @param {Object} envelope envelope to store * @return {module:extension/index~GeometryIndex} */ GeometryIndexDao.prototype.populate = function(tableIndex, geometryId, envelope) { var geometryIndex = new GeometryIndex(); geometryIndex.setTableIndex(tableIndex); geometryIndex.geom_id = geometryId; geometryIndex.min_x = envelope.minX; geometryIndex.min_y = envelope.minY; geometryIndex.max_x = envelope.maxX; geometryIndex.max_y = envelope.maxY; if (envelope.hasZ) { geometryIndex.min_z = envelope.minZ; geometryIndex.max_z = envelope.maxZ; } if (envelope.hasM) { geometryIndex.min_m = envelope.minM; geometryIndex.max_m = envelope.maxM; } return geometryIndex; }; /** * Create the GeometryIndex table * @return {Promise} */ GeometryIndexDao.prototype.createTable = function() { var exists = this.isTableExists(); if (exists) return Promise.resolve(true); var tc = new TableCreator(this.geoPackage); return tc.createGeometryIndex(); } /** * Query the index with an envelope * @param {Object} envelope envelope * @param {Number} envelope.minX min x * @param {Number} envelope.maxX max x * @param {Number} envelope.minY min y * @param {Number} envelope.maxY max y * @return {Iterable} */ GeometryIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) { var tableName = this.featureDao.gpkgTableName; var where = ''; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_TABLE_NAME, tableName); where += ' and '; var minXLessThanMaxX = envelope.minX < envelope.maxX; if (minXLessThanMaxX) { where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<='); where += ' and '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>='); } else { where += '('; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.maxX, '<='); where += ' or '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.minX, '>='); where += ' or '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_X, envelope.minX, '>='); where += ' or '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_X, envelope.maxX, '<='); where += ')'; } where += ' and '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Y, envelope.maxY, '<='); where += ' and '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Y, envelope.minY, '>='); var whereArgs = [tableName, envelope.maxX, envelope.minX]; if (!minXLessThanMaxX) { whereArgs.push(envelope.minX, envelope.maxX); } whereArgs.push(envelope.maxY, envelope.minY); if (envelope.hasZ) { where += ' and '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_Z, envelope.minZ, '<='); where += ' and '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_Z, envelope.maxZ, '>='); whereArgs.push(envelope.maxZ, envelope.minZ); } if (envelope.hasM) { where += ' and '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MIN_M, envelope.minM, '<='); where += ' and '; where += this.buildWhereWithFieldAndValue(GeometryIndexDao.COLUMN_MAX_M, envelope.maxM, '>='); whereArgs.push(envelope.maxM, envelope.minM); } return { join: 'inner join "' + tableName + '" on "' + tableName + '".' + this.featureDao.idColumns[0] + ' = ' + GeometryIndexDao.COLUMN_GEOM_ID, where, whereArgs, tableNameArr: ['"' + tableName + '".*'] }; }; GeometryIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) { var result = this._generateGeometryEnvelopeQuery(envelope); return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); }; GeometryIndexDao.prototype.countWithGeometryEnvelope = function(envelope) { var result = this._generateGeometryEnvelopeQuery(envelope); return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); }; GeometryIndexDao.TABLE_NAME = "nga_geometry_index"; GeometryIndexDao.COLUMN_TABLE_NAME = GeometryIndexDao.TABLE_NAME + ".table_name"; GeometryIndexDao.COLUMN_GEOM_ID = GeometryIndexDao.TABLE_NAME + ".geom_id"; GeometryIndexDao.COLUMN_MIN_X = GeometryIndexDao.TABLE_NAME + ".min_x"; GeometryIndexDao.COLUMN_MAX_X = GeometryIndexDao.TABLE_NAME + ".max_x"; GeometryIndexDao.COLUMN_MIN_Y = GeometryIndexDao.TABLE_NAME + ".min_y"; GeometryIndexDao.COLUMN_MAX_Y = GeometryIndexDao.TABLE_NAME + ".max_y"; GeometryIndexDao.COLUMN_MIN_Z = GeometryIndexDao.TABLE_NAME + ".min_z"; GeometryIndexDao.COLUMN_MAX_Z = GeometryIndexDao.TABLE_NAME + ".max_z"; GeometryIndexDao.COLUMN_MIN_M = GeometryIndexDao.TABLE_NAME + ".min_m"; GeometryIndexDao.COLUMN_MAX_M = GeometryIndexDao.TABLE_NAME + ".max_m"; GeometryIndexDao.prototype.gpkgTableName = GeometryIndexDao.TABLE_NAME; GeometryIndexDao.prototype.idColumns = ['table_name', 'geom_id']; module.exports.GeometryIndexDao = GeometryIndexDao; module.exports.GeometryIndex = GeometryIndex; },{"../../dao/dao":11,"../../db/tableCreator":19,"./tableIndex":28,"util":343}],28:[function(require,module,exports){ /** * TableIndexDao module. * @module extension/index */ var Dao = require('../../dao/dao') , TableCreator = require('../../db/tableCreator'); var util = require('util'); /** * Table Index object, for indexing data within user tables * @class TableIndex */ var TableIndex = function() { /** * Name of the table * @member {String} */ this.table_name; /** * Last indexed date * @member {String} */ this.last_indexed; } /** * Table Index Data Access Object * @class * @extends {module:dao/dao~Dao} * @param {module:geoPackage~GeoPackage} geoPackage The GeoPackage object */ var TableIndexDao = function(geoPackage) { Dao.call(this, geoPackage); }; util.inherits(TableIndexDao, Dao); /** * Create a new TableIndex object * @return {module:extension/index~TableIndex} */ TableIndexDao.prototype.createObject = function() { return new TableIndex(); }; TableIndexDao.prototype.getGeometryIndices = function(tableIndex) { }; TableIndexDao.prototype.getGeometryIndexCount = function(tableIndex) { }; /** * Creates the tables necessary * @return {Promise} */ TableIndexDao.prototype.createTable = function() { var tc = new TableCreator(this.geoPackage); return tc.createTableIndex(); } TableIndexDao.TABLE_NAME = "nga_table_index"; TableIndexDao.COLUMN_TABLE_NAME = "table_name"; TableIndexDao.COLUMN_LAST_INDEXED = "last_indexed"; TableIndexDao.prototype.gpkgTableName = TableIndexDao.TABLE_NAME; TableIndexDao.prototype.idColumns = [TableIndexDao.COLUMN_TABLE_NAME]; module.exports.TableIndexDao = TableIndexDao; module.exports.TableIndex = TableIndex; },{"../../dao/dao":11,"../../db/tableCreator":19,"util":343}],29:[function(require,module,exports){ /** * MetadataExtension module. * @module extension/metadata */ var BaseExtension = require('../baseExtension') , Extension = require('../.').Extension; var util = require('util'); /** * Metadata extension * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object * @class * @extends {module:extension/baseExtension~BaseExtension} */ var MetadataExtension = function(geoPackage) { BaseExtension.call(this, geoPackage); this.extensionName = MetadataExtension.EXTENSION_NAME; this.extensionDefinition = MetadataExtension.EXTENSION_Metadata_DEFINITION; } util.inherits(MetadataExtension, BaseExtension); /** * Get or create the metadata extension * @return {Promise} */ MetadataExtension.prototype.getOrCreateExtension = function() { return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE); }; MetadataExtension.EXTENSION_NAME = 'gpkg_metadata'; MetadataExtension.EXTENSION_Metadata_AUTHOR = 'gpkg'; MetadataExtension.EXTENSION_Metadata_NAME_NO_AUTHOR = 'metadata'; MetadataExtension.EXTENSION_Metadata_DEFINITION = 'http://www.geopackage.org/spec/#extension_metadata'; module.exports.MetadataExtension = MetadataExtension; },{"../.":25,"../baseExtension":20,"util":343}],30:[function(require,module,exports){ /** * @module extension/relatedTables */ /** * Dublin Core Metadata Initiative term types * @class */ function DublinCoreType() {} module.exports = DublinCoreType; /** * A point or period of time associated with an event in the lifecycle of * the resource. * @type {Object} */ DublinCoreType.DATE = { name: 'date' }; /** * An account of the resource. * @type {Object} */ DublinCoreType.DESCRIPTION = { name: 'description' }; /** * The file format, physical medium, or dimensions of the resource. * @type {Object} */ DublinCoreType.FORMAT = { name: 'format', synonyms: ['content_type'] }; /** * An unambiguous reference to the resource within a given context. * @type {Object} */ DublinCoreType.IDENTIFIER = { name: 'identifier', synonyms: ['id'] }; /** * A related resource from which the described resource is derived. * @type {Object} */ DublinCoreType.SOURCE = { name: 'source' }; /** * A name given to the resource. * @type {Object} */ DublinCoreType.TITLE = { name: 'title' }; /** * Get the Dublin Core Type from the name * @param {string} name name * @return {module:extension/relatedTables~DublinCoreType} */ DublinCoreType.fromName = function(name) { for (var prop in module.exports) { var type = module.exports[prop]; if (type.name === name) { return type; } } for (var prop in module.exports) { var type = module.exports[prop]; if (type.synonyms) { for (var i = 0; i < type.synonyms.length; i++) { if (type.synonyms[i] === name) { return type; } } } } } },{}],31:[function(require,module,exports){ /** * @module extension/relatedTables */ var Dao = require('../../dao/dao') , ColumnValues = require('../../dao/columnValues'); var util = require('util'); /** * Describes the relationships between a base table, a related data table, and a * mapping table * @class ExtendedRelation */ var ExtendedRelation = function() { /** * Autoincrement primary key * @member {Number} */ this.id; /** * Name of the table containing the base data (e.g., features) to relate * @member {String} */ this.base_table_name; /** * Name of the primary key column in base_table_name * @member {String} */ this.base_primary_column; /** * Name of the table containing the related content * @member {String} */ this.related_table_name; /** * Name of the primary key column in related_table_name * @member {String} */ this.related_primary_column; /** * Name (profile) of the relationship * @member {String} */ this.relation_name; /** * Name of a mapping table * @member {String} */ this.mapping_table_name; } /** * Extended Relations Data Access Object * @class ExtendedRelationDao * @extends {module:dao/dao~Dao} */ var ExtendedRelationDao = function(geoPackage) { Dao.call(this, geoPackage); }; util.inherits(ExtendedRelationDao, Dao); /** * Create a {module:extension/relatedTables~ExtendedRelation} object * @return {module:extension/relatedTables~ExtendedRelation} */ ExtendedRelationDao.prototype.createObject = function() { return new ExtendedRelation(); }; /** * Create the necessary tables for this dao * @return {Promise} */ ExtendedRelationDao.prototype.createTable = function() { var tc = this.geoPackage.getTableCreator(); return tc.createExtendedRelations(); } /** * Get all the base table names * @return {string[]} */ ExtendedRelationDao.prototype.getBaseTables = function() { var baseTables = []; var baseTableColumns = this.queryForColumns('base_table_name'); for (var i = 0; i < baseTableColumns.length; i++) { baseTables.push(baseTableColumns[i].base_table_name); } return baseTables; }; /** * Get all the related table names * @return {string[]} */ ExtendedRelationDao.prototype.getRelatedTables = function() { var relatedTables = []; var relatedTableColumns = this.queryForColumns('related_table_name'); for (var i = 0; i < relatedTableColumns.length; i++) { relatedTables.push(relatedTableColumns[i].related_table_name); } return relatedTables; }; /** * Get all relations for the given base table name * @param {string} baseTable base table name * @return {module:extension/relatedTables~ExtendedRelation[]} */ ExtendedRelationDao.prototype.getBaseTableRelations = function(baseTable) { return this.queryForAllEq(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable); } /** * Get all relations for the given related table name * @param {string} relatedTable related table name * @return {module:extension/relatedTables~ExtendedRelation[]} */ ExtendedRelationDao.prototype.getRelatedTableRelations = function(relatedTable) { return this.queryForAllEq(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTable); } /** * Get all relations for the base table with the relation name * @param {string} baseTable base table name * @param {string} name relation name * @return {module:extension/relatedTables~ExtendedRelation[]} */ ExtendedRelationDao.prototype.getBaseTableRelationsWithName = function(baseTable, name) { var fields = new ColumnValues(); fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTable); fields.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, name); var where = this.buildWhere(fields, 'and'); var whereArgs = this.buildWhereArgs(fields); return this.queryForAll(where, whereArgs); } /** * Get all relations to the table. Returns relations where the table is the base table and relations where the table is the related table. * @param {string} table table name to query for * @return {module:extension/relatedTables~ExtendedRelation[]} */ ExtendedRelationDao.prototype.getTableRelations = function(table) { var fields = new ColumnValues(); fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, table); fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, table); var where = this.buildWhere(fields, 'or'); var whereArgs = this.buildWhereArgs(fields); return this.queryForAll(where, whereArgs); } /** * Gets all relationships in the GeoPackage with an optional base table name and an optional base id * @param {String} [baseTableName] base table name * @param {String} [relatedTableName] related table name * @param {String} [mappingTableName] mapping table name * @return {module:extension/relatedTables~ExtendedRelation[]} */ ExtendedRelationDao.prototype.getRelations = function(baseTableName, relatedTableName, mappingTableName) { var fields = new ColumnValues(); fields.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, baseTableName); fields.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relatedTableName); fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName); var where = this.buildWhereLike(fields, 'and'); var whereArgs = this.buildWhereArgs(fields); return this.queryForAll(where, whereArgs); }; /** * Get all relations by the mapping table name * @param {string} mappingTableName name of the mapping table * @return {module:extension/relatedTables~ExtendedRelation[]} */ ExtendedRelationDao.prototype.queryByMappingTableName = function(mappingTableName) { var fields = new ColumnValues(); fields.addColumn(ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME, mappingTableName); var where = this.buildWhere(fields, 'and'); var whereArgs = this.buildWhereArgs(fields); return this.queryForAll(where, whereArgs); } ExtendedRelationDao.TABLE_NAME = 'gpkgext_relations'; ExtendedRelationDao.COLUMN_ID = ExtendedRelationDao.TABLE_NAME + '.id'; ExtendedRelationDao.COLUMN_BASE_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.base_table_name'; ExtendedRelationDao.COLUMN_BASE_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.base_primary_column'; ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.related_table_name'; ExtendedRelationDao.COLUMN_RELATED_PRIMARY_COLUMN = ExtendedRelationDao.TABLE_NAME + '.related_primary_column'; ExtendedRelationDao.COLUMN_RELATION_NAME = ExtendedRelationDao.TABLE_NAME + '.relation_name'; ExtendedRelationDao.COLUMN_MAPPING_TABLE_NAME = ExtendedRelationDao.TABLE_NAME + '.mapping_table_name'; ExtendedRelationDao.prototype.gpkgTableName = ExtendedRelationDao.TABLE_NAME; ExtendedRelationDao.prototype.idColumns = ['id']; module.exports.ExtendedRelationDao = ExtendedRelationDao; module.exports.ExtendedRelation = ExtendedRelation; },{"../../dao/columnValues":10,"../../dao/dao":11,"util":343}],32:[function(require,module,exports){ /** * RelatedTablesExtension module. * @module extension/relatedTables * @see module:extension/BaseExtension */ var BaseExtension = require('../baseExtension') , Extension = require('../.').Extension , ColumnValues = require('../../dao/columnValues') , OptionBuilder = require('../../optionBuilder') , ExtendedRelationDao = require('./extendedRelation').ExtendedRelationDao , ExtendedRelation = require('./extendedRelation').ExtendedRelation , MediaDao = require('./mediaDao') , MediaTable = require('./mediaTable') , SimpleAttributesDao = require('./simpleAttributesDao') , SimpleAttributesTable = require('./simpleAttributesTable') , UserMappingTable = require('./userMappingTable') , UserMappingDao = require('./userMappingDao') , UserCustomDao = require('../../user/custom/userCustomDao') , UserDao = require('../../user/userDao') , UserTableReader = require('../../user/userTableReader') , RelationType = require('./relationType') , ContentsDao = require('../../core/contents').ContentsDao , Contents = require('../../core/contents').Contents , GeometryColumnsDao = require('../../features/columns').GeometryColumnsDao; var util = require('util'); /** * Related Tables Extension * @param {module:geoPackage~GeoPackage} geoPackage the GeoPackage object * @class * @extends {module:extension/baseExtension~BaseExtension} */ var RelatedTablesExtension = function(geoPackage) { BaseExtension.call(this, geoPackage); this.extendedRelationDao = geoPackage.getExtendedRelationDao(); } util.inherits(RelatedTablesExtension, BaseExtension); /** * Get or create the extension * @return {Promise} */ RelatedTablesExtension.prototype.getOrCreateExtension = function() { return this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, 'gpkgext_relations', undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE) .then(function() { return this.extendedRelationDao.createTable(); }.bind(this)); }; /** * Get or create the extension for the mapping table * @param {string} mappingTableName user mapping table * @return {Promise} */ RelatedTablesExtension.prototype.getOrCreateMappingTable = function(mappingTableName) { return this.getOrCreateExtension() .then(function() { this.getOrCreate(RelatedTablesExtension.EXTENSION_NAME, mappingTableName, undefined, RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION, Extension.READ_WRITE); }.bind(this)); } /** * Set the contents in the UserRelatedTable * @param {module:extension/relatedTables~UserRelatedTable} userRelatedTable user related table */ RelatedTablesExtension.prototype.setContents = function(userRelatedTable) { var contents = this.geoPackage.getContentsDao().queryForId(userRelatedTable.table_name); userRelatedTable.setContents(contents); } /** * Reads the user table and creates a UserCustomDao * @param {string} tableName table name to reader * @param {string[]} requiredColumns required columns * @return {module:user/custom~UserCustomDao} */ RelatedTablesExtension.prototype.getUserDao = function(tableName, requiredColumns) { return UserCustomDao.readTable(this.geoPackage, tableName, requiredColumns); } /** * Gets the UserMappingDao from the mapping table name * @param {string|module:extension/relatedTables~ExtendedRelation} tableName user mapping table name or ExtendedRelation object * @return {module:extension/relatedTables~UserMappingDao} */ RelatedTablesExtension.prototype.getMappingDao = function(tableName) { if (tableName.mapping_table_name) { tableName = tableName.mapping_table_name; } return new UserMappingDao(this.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage); } /** * Gets all relationships in the GeoPackage with an optional base table name and an optional base id * @param {string} [baseTableName] base table name * @return {module:extension/relatedTables~ExtendedRelation[]} */ RelatedTablesExtension.prototype.getRelationships = function(baseTableName) { if (this.extendedRelationDao.isTableExists()) { if (baseTableName) { return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(baseTableName); } return this.extendedRelationDao.queryForAll(); } return []; } /** * Gets all relationships in the GeoPackage with an optional base table name and an optional base id * @param {String} [baseTableName] base table name * @param {String} [relatedTableName] related table name * @param {String} [mappingTableName] mapping table name * @return {Boolean} */ RelatedTablesExtension.prototype.hasRelations = function(baseTableName, relatedTableName, mappingTableName) { var relations = []; if (this.extendedRelationDao.isTableExists()) { relations = this.extendedRelationDao.getRelations(baseTableName, relatedTableName, mappingTableName); } return relations; }; RelatedTablesExtension.prototype.getRelatedRows = function(baseTableName, baseId) { var relationships = this.getRelationships(baseTableName); for (var i = 0; i < relationships.length; i++) { var relation = relationships[i]; var mappingRows = this.getMappingRowsForBase(relation.mapping_table_name, baseId); relation.mappingRows = mappingRows; var userDao; // TODO do this for all known types if (relation.relation_name === 'media') { userDao = MediaDao.readTable(this.geoPackage, relation.related_table_name); } else { userDao = UserDao.readTable(this.geoPackage, relation.related_table_name); } for (var m = 0; m < mappingRows.length; m++) { var mappingRow = mappingRows[m]; mappingRow.row = userDao.queryForId(mappingRow.related_id); } } return relationships; } RelatedTablesExtension.RelationshipBuilder = function() { return OptionBuilder([ 'baseTableName', 'relatedTableName', 'userMappingTable', 'mappingTableName', 'relationName', 'relationAuthor', 'relationType', 'relatedTable' ]); } /** * Convience object to build a Relationship object for querying and adding * @typedef {Object} module:extension/relatedTables~Relationship * @property {module:extension/relatedTables~RelationType} relationType type of relationship * @property {string} baseTableName base table name * @property {string} relatedTableName related table name * @property {string} relationAuthor relationship author * @property {string} mappingTableName mapping table name * @property {module:extension/relatedTables~UserMappingTable} userMappingTable UserMappingTable * @property {module:extension/relatedTables~UserRelatedTable} relatedTable UserRelatedTable */ RelatedTablesExtension.prototype.getRelationshipBuilder = function() { return RelatedTablesExtension.RelationshipBuilder(); } /** * Adds a relationship to the GeoPackage * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add * @return {Promise} */ RelatedTablesExtension.prototype.addRelationship = function(relationship) { var extendedRelation = this.extendedRelationDao.createObject(); var userMappingTable = relationship.userMappingTable; if (relationship.hasOwnProperty('base_table_name')) { extendedRelation = relationship; userMappingTable = UserMappingTable.create(extendedRelation.mapping_table_name); } else { if (relationship.relationType) { relationship.relationName = relationship.relationType.name; } if (relationship.relationAuthor) { relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName); } if (relationship.mappingTableName) { userMappingTable = UserMappingTable.create(relationship.mappingTableName); } if (relationship.relatedTable) { this.createRelatedTable(relationship.relatedTable); relationship.relatedTableName = relationship.relatedTable.table_name; relationship.relationName = relationship.relatedTable.relation_name; } extendedRelation.base_table_name = relationship.baseTableName; extendedRelation.base_primary_column = this.getPrimaryKeyColumnName(relationship.baseTableName); extendedRelation.related_table_name = relationship.relatedTableName; extendedRelation.related_primary_column = this.getPrimaryKeyColumnName(relationship.relatedTableName); extendedRelation.mapping_table_name = userMappingTable.table_name; extendedRelation.relation_name = relationship.relationName; } if (!this.validateRelationship(extendedRelation.base_table_name, extendedRelation.related_table_name, extendedRelation.relation_name)) { return Promise.resolve(false); } return this.createUserMappingTable(userMappingTable) .then(function() { var mappingTableRelations = this.extendedRelationDao.queryByMappingTableName(extendedRelation.mapping_table_name); if (mappingTableRelations.length) { return mappingTableRelations[0]; } this.extendedRelationDao.create(extendedRelation); return extendedRelation; }.bind(this)); } /** * Get the primary key column name from the specified table * @param {string} tableName table name * @return {string} */ RelatedTablesExtension.prototype.getPrimaryKeyColumnName = function(tableName) { var reader = new UserTableReader(tableName); var table = reader.readTable(this.geoPackage.getDatabase()); return table.getPkColumn().name; } /** * Adds a features relationship between the base feature and related feature * table. Creates a default user mapping table if needed. * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add * @return {Promise} */ RelatedTablesExtension.prototype.addFeaturesRelationship = function(relationship) { if (relationship.hasOwnProperty('relation_name')) { relationship.relation_name = relationship.relation_name || RelationType.FEATURES.name; } else { relationship.relationType = RelationType.FEATURES; } return this.addRelationship(relationship); } /** * Adds a tiles relationship between the base table and related tile * table. Creates a default user mapping table if needed. * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add * @return {Promise} */ RelatedTablesExtension.prototype.addTilesRelationship = function(relationship) { if (relationship.hasOwnProperty('relation_name')) { relationship.relation_name = relationship.relation_name || RelationType.TILES.name; } else { relationship.relationType = RelationType.TILES; } return this.addRelationship(relationship); } /** * Adds an attributes relationship between the base table and related attribute * table. Creates a default user mapping table if needed. * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add * @return {Promise} */ RelatedTablesExtension.prototype.addAttributesRelationship = function(relationship) { if (relationship.hasOwnProperty('relation_name')) { relationship.relation_name = relationship.relation_name || RelationType.ATTRIBUTES.name; } else { relationship.relationType = RelationType.ATTRIBUTES; } return this.addRelationship(relationship); } /** * Adds a simple attributes relationship between the base table and user * simple attributes related table. Creates a default user mapping table and * the simple attributes table if needed. * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add * @return {Promise} */ RelatedTablesExtension.prototype.addSimpleAttributesRelationship = function(relationship) { if (relationship.hasOwnProperty('relation_name')) { relationship.relation_name = relationship.relation_name || RelationType.SIMPLE_ATTRIBUTES.name; } else { relationship.relationType = RelationType.SIMPLE_ATTRIBUTES; } return this.addRelationship(relationship); } /** * Adds a media relationship between the base table and user media related * table. Creates a default user mapping table and the media table if * needed. * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to add * @return {Promise} */ RelatedTablesExtension.prototype.addMediaRelationship = function(relationship) { if (relationship.hasOwnProperty('relation_name')) { relationship.relation_name = relationship.relation_name || RelationType.MEDIA.name; } else { relationship.relationType = RelationType.MEDIA; } return this.addRelationship(relationship); } /** * Remove a specific relationship from the GeoPackage * @param {module:extension/relatedTables~Relationship|module:extension/relatedTables~ExtendedRelation} relationship relationship to remove * @return {Number} number of relationships removed */ RelatedTablesExtension.prototype.removeRelationship = function(relationship) { // this is an ExtendedRelation if (relationship.hasOwnProperty('base_table_name')) { relationship.baseTableName = relationship.base_table_name; relationship.relatedTableName = relationship.related_table_name; relationship.relationName = relationship.relation_name; relationship.userMappingTable = relationship.mapping_table_name; } if (relationship.relationType) { relationship.relationName = relationship.relationType.name; } if (relationship.relationAuthor) { relationship.relationName = this.buildRelationName(relationship.relationAuthor, relationship.relationName); } if (this.extendedRelationDao.isTableExists()) { var values = new ColumnValues(); values.addColumn(ExtendedRelationDao.COLUMN_BASE_TABLE_NAME, relationship.baseTableName); values.addColumn(ExtendedRelationDao.COLUMN_RELATED_TABLE_NAME, relationship.relatedTableName); values.addColumn(ExtendedRelationDao.COLUMN_RELATION_NAME, relationship.relationName); var iterator = this.extendedRelationDao.queryForFieldValues(values); var tablesToDelete = []; for (var extendedRelation of iterator) { tablesToDelete.push(extendedRelation.mapping_table_name); } tablesToDelete.forEach(function(table) { this.geoPackage.deleteTable(table); }.bind(this)); this.extensionsDao.deleteByExtensionAndTableName(RelatedTablesExtension.EXTENSION_NAME, relationship.userMappingTable); return this.extendedRelationDao.delete(extendedRelation); } return 0; } /** * Create a default user mapping table and extension row if either does not * exist. When not created, there is no guarantee that an existing table has * the same schema as the provided tabled. * @param {string|module:extension/relatedTables~UserMappingTable} userMappingTableOrName user mapping table or name * @return {Promise} */ RelatedTablesExtension.prototype.createUserMappingTable = function(userMappingTableOrName) { var userMappingTable = userMappingTableOrName; if (typeof userMappingTableOrName === 'string') { userMappingTable = UserMappingTable.create(userMappingTableOrName); } return this.getOrCreateMappingTable(userMappingTable.table_name) .then(function(){ if (!this.geoPackage.isTable(userMappingTable.table_name)) { return this.geoPackage.tableCreator.createUserTable(userMappingTable); } return true; }.bind(this)); } /** * Create a user related table if it does not exist. When not created, there * is no guarantee that an existing table has the same schema as the * provided tabled. * @param {module:extension/relatedTables~UserRelatedTable} relatedTable user related table * @return {Boolean} true if the table now exists */ RelatedTablesExtension.prototype.createRelatedTable = function(relatedTable) { if (!this.geoPackage.isTable(relatedTable.table_name)) { this.geoPackage.tableCreator.createUserTable(relatedTable); var contents = new Contents(); contents.table_name = relatedTable.table_name; contents.data_type = relatedTable.data_type; contents.identifier = relatedTable.table_name; this.geoPackage.getContentsDao().create(contents); var refreshed = this.geoPackage.getContentsDao().refresh(contents); relatedTable.setContents(refreshed); } return true; } /** * Validate that the relation name is valid between the base and related tables * @param {string} baseTableName base table name * @param {string} relatedTableName related table name * @param {string} relationName relation name * @return {Boolean} */ RelatedTablesExtension.prototype.validateRelationship = function(baseTableName, relatedTableName, relationName) { // Verify the base and related tables exist if (!this.geoPackage.isTable(baseTableName)) { console.log('Base relationship table does not exist: ' + baseTableName + ', Relation: ' + relationName); return false; } if (!this.geoPackage.isTable(relatedTableName)) { console.log('Related relationship table does not exist: ' + relatedTableName + ', Relation: ' + relationName); return false; } // Verify spec defined relation types var relationType = RelationType.fromName(relationName); if (relationType) { if (!this.geoPackage.isTableType(relationType.dataType, relatedTableName)) { console.log('The related table must be a ' + relationType.dataType + ' table. Related Table: ' + relatedTableName + ', Type: ' + this.geoPackage.getTableType(relatedTableName)); return false; } return true; } return true; } /** * Link related Ids * @param {string} baseTableName base table name * @param {Number} baseId base row id * @param {string} relatedTableName related table name * @param {Number} relatedId related row id * @param {module:extension/relatedTables~RelationType} relationType relation type * @return {Promise} */ RelatedTablesExtension.prototype.linkRelatedIds = function(baseTableName, baseId, relatedTableName, relatedId, relationType) { var baseDao = UserDao.readTable(this.geoPackage, baseTableName); var relatedDao = UserDao.readTable(this.geoPackage, relatedTableName); var baseRow = baseDao.queryForId(baseId); var relatedRow = relatedDao.queryForId(relatedId); return baseDao.linkRelatedRow(baseRow, relatedRow, relationType); } /** * Get the related id mappings for the base id * @param {string} mappingTableName mapping table name * @param {Number} baseId base id * @return {Number[]} ids of related items */ RelatedTablesExtension.prototype.getMappingsForBase = function(mappingTableName, baseId) { var mappingDao = this.getMappingDao(mappingTableName); var results = mappingDao.queryByBaseId(baseId); var relatedIds = []; for (var i = 0; i < results.length; i++) { var row = mappingDao.getUserMappingRow(results[i]); relatedIds.push(row.getRelatedId()); } return relatedIds; } /** * Get the related id mapping rows for the base id * @param {string} mappingTableName mapping table name * @param {Number} baseId base id * @return {module:extension/relatedTables~UserMappingRow[]} user mapping rows */ RelatedTablesExtension.prototype.getMappingRowsForBase = function(mappingTableName, baseId) { var mappingDao = this.getMappingDao(mappingTableName); return mappingDao.queryByBaseId(baseId); } /** * Get the base id mappings for the base id * @param {string} mappingTableName mapping table name * @param {Number} relatedId related id * @return {Number[]} ids of base items */ RelatedTablesExtension.prototype.getMappingsForRelated = function(mappingTableName, relatedId) { var mappingDao = this.getMappingDao(mappingTableName); var results = mappingDao.queryByRelatedId(relatedId); var baseIds = []; for (var i = 0; i < results.length; i++) { var row = mappingDao.getUserMappingRow(results[i]); baseIds.push(row.getBaseId()); } return baseIds; } /** * Returns a {module:extension/relatedTables~MediaDao} from the table specified * @param {string|module:extension/relatedTables~MediaTable} tableName either a table name or a MediaTable * @return {module:extension/relatedTables~MediaDao} */ RelatedTablesExtension.prototype.getMediaDao = function(tableName) { var table; if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'media') { table = tableName; } else { if (tableName.related_table_name) { tableName = tableName.related_table_name; } var reader = new UserTableReader(tableName, MediaTable.requiredColumns()); var userTable = reader.readTable(this.geoPackage.getDatabase()); table = new MediaTable(userTable.table_name, userTable.columns, MediaTable.requiredColumns()); table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name)); } return new MediaDao(this.geoPackage, table); } /** * Returns a {module:extension/relatedTables~SimpleAttributesDao} from the table specified * @param {string|module:extension/relatedTables~SimpleAttributesDao} tableName either a table name or a SimpleAttributesDao * @return {module:extension/relatedTables~SimpleAttributesDao} */ RelatedTablesExtension.prototype.getSimpleAttributesDao = function(tableName) { var table; if (tableName.TABLE_TYPE && tableName.TABLE_TYPE === 'simple_attributes') { table = tableName; } else { if (tableName.related_table_name) { tableName = tableName.related_table_name; } var reader = new UserTableReader(tableName, SimpleAttributesTable.requiredColumns()); var userTable = reader.readTable(this.geoPackage.getDatabase()); table = new SimpleAttributesTable(userTable.table_name, userTable.columns, SimpleAttributesTable.requiredColumns()); table.setContents(this.geoPackage.getContentsDao().queryForId(table.table_name)); } return new SimpleAttributesDao(this.geoPackage, table); } /** * Builds the custom relation name with the author * @param {string} author author * @param {string} name name * @return {string} */ RelatedTablesExtension.prototype.buildRelationName = function(author, name) { return 'x-' + author + '_' + name; } /** * Remove all traces of the extension */ RelatedTablesExtension.prototype.removeExtension = function() { if (this.extendedRelationDao.isTableExists()) { var extendedRelations = this.extendedRelationDao.queryForAll(); extendedRelations.forEach(function(relation) { this.geoPackage.deleteTable(relation.mapping_table_name); }.bind(this)); this.geoPackage.deleteTable(ExtendedRelationDao.TABLE_NAME); } if (this.extensionsDao.isTableExists()) { this.extensionsDao.deleteByExtension(RelatedTablesExtension.EXTENSION_NAME); } } /** * Determine if the GeoPackage has the extension * @param {string} [mappingTableName] mapping table name to check, if not specified, this checks for any mapping table name * @return {Boolean} */ RelatedTablesExtension.prototype.has = function(mappingTableName) { if (mappingTableName) { return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME) && this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, mappingTableName); } return this.hasExtension(RelatedTablesExtension.EXTENSION_NAME, ExtendedRelationDao.TABLE_NAME); } RelatedTablesExtension.EXTENSION_NAME = 'related_tables'; RelatedTablesExtension.EXTENSION_RELATED_TABLES_AUTHOR = 'gpkg'; RelatedTablesExtension.EXTENSION_RELATED_TABLES_NAME_NO_AUTHOR = 'related_tables'; RelatedTablesExtension.EXTENSION_RELATED_TABLES_DEFINITION = 'TBD'; module.exports = RelatedTablesExtension; },{"../.":25,"../../core/contents":8,"../../dao/columnValues":10,"../../features/columns":64,"../../optionBuilder":76,"../../user/custom/userCustomDao":102,"../../user/userDao":106,"../../user/userTableReader":109,"../baseExtension":20,"./extendedRelation":31,"./mediaDao":33,"./mediaTable":35,"./relationType":36,"./simpleAttributesDao":37,"./simpleAttributesTable":39,"./userMappingDao":40,"./userMappingTable":42,"util":343}],33:[function(require,module,exports){ /** * MediaDao module. * @module extension/relatedTables */ var MediaRow = require('./mediaRow') , MediaTable = require('./mediaTable') , Dao = require('../../dao/dao') , UserDao = require('../../user/userDao') , UserTableReader = require('../../user/userTableReader'); var util = require('util'); /** * User Media DAO for reading user media data tables * @class * @extends {module:user/userDao~UserDao} * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection * @param {string} table table name */ var MediaDao = function(geoPackage, table) { UserDao.call(this, geoPackage, table); this.mediaTable = table; } util.inherits(MediaDao, UserDao); /** * Reads the table specified from the geopackage * @param {module:geoPackage~GeoPackage} geoPackage geopackage object * @param {string} tableName table name * @param {string[]} requiredColumns required columns * @return {module:user/userDao~UserDao} */ MediaDao.readTable = function(geoPackage, tableName) { var reader = new UserTableReader(tableName); var userTable = reader.readTable(geoPackage.getDatabase()); return new MediaDao(geoPackage, userTable); } /** * Create a new media row * @return {module:extension/relatedTables~MediaRow} */ MediaDao.prototype.newRow = function() { return new MediaRow(this.mediaTable); } /** * Create a media row with the column types and values * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {module:extension/relatedTables~MediaRow} media row */ MediaDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new MediaRow(this.mediaTable, columnTypes, values); }; /** * Gets the media table * @return {module:extension/relatedTables~MediaTable} */ MediaDao.prototype.getTable = function() { return this.mediaTable; } module.exports = MediaDao; },{"../../dao/dao":11,"../../user/userDao":106,"../../user/userTableReader":109,"./mediaRow":34,"./mediaTable":35,"util":343}],34:[function(require,module,exports){ /** * MediaRow module. * @module extension/relatedTables */ var UserRow = require('../../user/userRow'); var util = require('util'); var ImageUtils = require('../../tiles/imageUtils'); /** * User Media Row containing the values from a single result set row * @class * @extends {module:user/userRow~UserRow} * @param {module:extension/relatedTables~MediaTable} mediaTable media table * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values */ var MediaRow = function(mediaTable, columnTypes, values) { UserRow.call(this, mediaTable, columnTypes, values); this.mediaTable = mediaTable; } util.inherits(MediaRow, UserRow); /** * Gets the id column * @return {module:user/userColumn~UserColumn} */ MediaRow.prototype.getIdColumn = function() { return this.mediaTable.getIdColumn(); } /** * Gets the id * @return {Number} */ MediaRow.prototype.getId = function() { return this.getValueWithColumnName(this.getIdColumn().name); } /** * Get the data column * @return {module:user/userColumn~UserColumn} */ MediaRow.prototype.getDataColumn = function() { return this.mediaTable.getDataColumn(); } /** * Gets the data * @return {Buffer} */ MediaRow.prototype.getData = function() { return this.getValueWithColumnName(this.getDataColumn().name); } /** * Get the data image * * @return {Promise} */ MediaRow.prototype.getDataImage = function() { return ImageUtils.getImage(this.getData(), this.getContentType()); } /** * Get the scaled data image * @param {Number} scale * @return {Promise} */ MediaRow.prototype.getScaledDataImage = function(scale) { return ImageUtils.getScaledImage(this.getData(), scale); } /** * Sets the data for the row * @param {Buffer} data data */ MediaRow.prototype.setData = function(data) { this.setValueWithColumnName(this.getDataColumn().name, data); } /** * Get the content type column * @return {module:user/userColumn~UserColumn} */ MediaRow.prototype.getContentTypeColumn = function() { return this.mediaTable.getContentTypeColumn(); } /** * Gets the content type * @return {string} */ MediaRow.prototype.getContentType = function() { return this.getValueWithColumnName(this.getContentTypeColumn().name); } /** * Sets the content type for the row * @param {string} contentType contentType */ MediaRow.prototype.setContentType = function(contentType) { this.setValueWithColumnName(this.getContentTypeColumn().name, contentType); } module.exports = MediaRow; },{"../../tiles/imageUtils":89,"../../user/userRow":107,"util":343}],35:[function(require,module,exports){ /** * mediaTable module. * @module extension/relatedTables */ var UserTable = require('../../user/userTable') , UserRelatedTable = require('./userRelatedTable') , UserColumn = require('../../user/userColumn') , DataType = require('../../db/dataTypes') , RelationType = require('./relationType'); var util = require('util'); /** * Media Requirements Class User-Defined Related Data Table * @class * @extends {module:extension/relatedTables~UserRelatedTable} * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns media columns * @param {string[]} requiredColumns required column names */ var MediaTable = function(tableName, columns, requiredColumns) { UserRelatedTable.call(this, tableName, MediaTable.RELATION_TYPE.name, MediaTable.RELATION_TYPE.dataType, columns, requiredColumns); } util.inherits(MediaTable, UserRelatedTable); /** * Create a media table with a minimum required columns followed by the additional columns * @param {string} tableName name of the table * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns * @return {module:extension/relatedTables~MediaTable} */ MediaTable.create = function(tableName, additionalColumns) { var columns = MediaTable.createRequiredColumns(); if (additionalColumns) { columns = columns.concat(additionalColumns); } return new MediaTable(tableName, columns, MediaTable.requiredColumns()); } /** * Get the required columns * @param {string} [idColumnName=id] id column name * @return {string[]} */ MediaTable.requiredColumns = function(idColumnName) { var requiredColumns = []; requiredColumns.push(idColumnName || MediaTable.COLUMN_ID); requiredColumns.push(MediaTable.COLUMN_DATA); requiredColumns.push(MediaTable.COLUMN_CONTENT_TYPE); return requiredColumns; } /** * Get the number of required columns * @return {Number} */ MediaTable.numRequiredColumns = function(){ return MediaTable.requiredColumns().length; } /** * Create the required columns * @param {Number} [startingIndex=0] starting index of the required columns * @param {string} [idColumnName=id] id column name * @return {module:user/userColumn~UserColumn[]} */ MediaTable.createRequiredColumns = function(startingIndex, idColumnName) { startingIndex = startingIndex || 0; return [ MediaTable.createIdColumn(startingIndex++, idColumnName || MediaTable.COLUMN_ID), MediaTable.createDataColumn(startingIndex++), MediaTable.createContentTypeColumn(startingIndex++) ]; } /** * Create the primary key id column * @param {Number} index index of the column * @param {string} idColumnName name of the id column * @return {module:user/userColumn~UserColumn} */ MediaTable.createIdColumn = function(index, idColumnName) { return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName); } /** * Create the data column * @param {Number} index index of the column * @param {string} idColumnName name of the id column * @return {module:user/userColumn~UserColumn} */ MediaTable.createDataColumn = function(index) { return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_DATA, DataType.GPKGDataType.GPKG_DT_BLOB, true); } /** * Create the content type column * @param {Number} index index of the column * @param {string} idColumnName name of the id column * @return {module:user/userColumn~UserColumn} */ MediaTable.createContentTypeColumn = function(index) { return UserColumn.createColumnWithIndex(index, MediaTable.COLUMN_CONTENT_TYPE, DataType.GPKGDataType.GPKG_DT_TEXT, true); } /** * Get the primary key id column * @return {module:user/userColumn~UserColumn} */ MediaTable.prototype.getIdColumn = function() { return this.getPkColumn(); } /** * Get the data column * @return {module:user/userColumn~UserColumn} */ MediaTable.prototype.getDataColumn = function() { return this.getColumnWithColumnName(MediaTable.COLUMN_DATA); } /** * Get the content type column * @return {module:user/userColumn~UserColumn} */ MediaTable.prototype.getContentTypeColumn = function() { return this.getColumnWithColumnName(MediaTable.COLUMN_CONTENT_TYPE); } MediaTable.RELATION_TYPE = RelationType.MEDIA; MediaTable.COLUMN_ID = 'id'; MediaTable.COLUMN_DATA = 'data'; MediaTable.COLUMN_CONTENT_TYPE = 'content_type'; MediaTable.prototype.TABLE_TYPE = 'media'; module.exports = MediaTable; },{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"./relationType":36,"./userRelatedTable":43,"util":343}],36:[function(require,module,exports){ /** * @module extension/relatedTables */ var ContentsDao = require('../../core/contents').ContentsDao; /** * Spec supported User-Defined Related Data Tables * @class */ var RelationType = function() {} module.exports = RelationType; /** * Link features with other features * @type {Object} */ RelationType.FEATURES = { name: 'features', dataType: ContentsDao.GPKG_CDT_FEATURES_NAME }; /** * Relate sets of tabular text or numeric data * @type {Object} */ RelationType.SIMPLE_ATTRIBUTES = { name: 'simple_attributes', dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME }; /** * Relate features or attributes to multimedia files such as pictures and videos * @type {Object} */ RelationType.MEDIA = { name: 'media', dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME }; /** * Attribute type relation * @type {Object} */ RelationType.ATTRIBUTES = { name: 'attributes', dataType: ContentsDao.GPKG_CDT_ATTRIBUTES_NAME }; /** * Tile type relation * @type {Object} */ RelationType.TILES = { name: 'tiles', dataType: ContentsDao.GPKG_CDT_TILES_NAME }; /** * Get the relation type from the name * @param {string} name name * @return {module:extension/relatedTables~RelationType} */ RelationType.fromName = function(name) { return RelationType[name.toUpperCase()]; } },{"../../core/contents":8}],37:[function(require,module,exports){ /** * SimpleAttributesDao module. * @module extension/relatedTables */ var SimpleAttributesRow = require('./simpleAttributesRow') , SimpleAttributesTable = require('./simpleAttributesTable') , Dao = require('../../dao/dao') , UserDao = require('../../user/userDao'); var util = require('util'); /** * User Simple Attributes DAO for reading user simple attributes data tables * @class * @extends {module:user/userDao~UserDao} * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection * @param {string} table table name */ var SimpleAttributesDao = function(geoPackage, table) { UserDao.call(this, geoPackage, table); this.simpleAttributesTable = table; } util.inherits(SimpleAttributesDao, UserDao); /** * Create a new {module:extension/relatedTables~SimpleAttributesRow} * @return {module:extension/relatedTables~SimpleAttributesRow} */ SimpleAttributesDao.prototype.newRow = function() { return new SimpleAttributesRow(this.simpleAttributesTable); } /** * Create a new {module:extension/relatedTables~SimpleAttributesRow} with the column types and values * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {module:extension/relatedTables~SimpleAttributesRow} simple attributes row */ SimpleAttributesDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new SimpleAttributesRow(this.simpleAttributesTable, columnTypes, values); }; /** * Gets the {module:extension/relatedTables~SimpleAttributesTable} * @return {module:extension/relatedTables~SimpleAttributesTable} */ SimpleAttributesDao.prototype.getTable = function() { return this.simpleAttributesTable; } /** * Get the simple attributes rows from this table by ids * @param {Number[]} ids array of ids * @return {module:extension/relatedTables~SimpleAttributesRow[]} */ SimpleAttributesDao.prototype.getRows = function(ids) { var simpleAttributesRows = []; for (var i = 0; i < ids.length; i++) { var row = this.queryForId(ids[i]); if (row) { simpleAttributesRows.push(row); } } return simpleAttributesRows; } module.exports = SimpleAttributesDao; },{"../../dao/dao":11,"../../user/userDao":106,"./simpleAttributesRow":38,"./simpleAttributesTable":39,"util":343}],38:[function(require,module,exports){ /** * SimpleAttributesRow module. * @module extension/relatedTables */ var UserRow = require('../../user/userRow'); var util = require('util'); /** * User Simple Attributes Row containing the values from a single result set row * @class * @extends {module:user/userRow~UserRow} * @param {module:extension/relatedTables~SimpleAttributesTable} simpleAttributesTable simple attributes table * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values */ var SimpleAttributesRow = function(simpleAttributesTable, columnTypes, values) { UserRow.call(this, simpleAttributesTable, columnTypes, values); this.simpleAttributesTable = simpleAttributesTable; } util.inherits(SimpleAttributesRow, UserRow); /** * Gets the primary key id column * @return {module:user/userColumn~UserColumn} */ SimpleAttributesRow.prototype.getIdColumn = function() { return this.simpleAttributesTable.getIdColumn(); } /** * Gets the id * @return {Number} */ SimpleAttributesRow.prototype.getId = function() { return this.getValueWithColumnName(this.getIdColumn().name); } module.exports = SimpleAttributesRow; },{"../../user/userRow":107,"util":343}],39:[function(require,module,exports){ /** * simpleAttributesTable module. * @module extension/relatedTables */ var UserTable = require('../../user/userTable') , UserRelatedTable = require('./userRelatedTable') , UserColumn = require('../../user/userColumn') , DataTypes = require('../../db/dataTypes') , RelationType = require('./relationType'); var util = require('util'); /** * Simple Attributes Requirements Class User-Defined Related Data Table * @class * @extends {module:extension/relatedTables~UserRelatedTable} * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns attribute columns * @param {string[]} requiredColumns required column names */ var SimpleAttributesTable = function(tableName, columns, requiredColumns) { UserRelatedTable.call(this, tableName, SimpleAttributesTable.RELATION_TYPE.name, SimpleAttributesTable.RELATION_TYPE.dataType, columns, requiredColumns); this.validateColumns(); } util.inherits(SimpleAttributesTable, UserRelatedTable); /** * Create a simple attributes table with the columns * @param {string} tableName name of the table * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns * @return {module:extension/relatedTables~SimpleAttributesTable} */ SimpleAttributesTable.create = function(tableName, additionalColumns) { var tableColumns = SimpleAttributesTable.createRequiredColumns(0); if (additionalColumns) { tableColumns = tableColumns.concat(additionalColumns); } return new SimpleAttributesTable(tableName, tableColumns, SimpleAttributesTable.requiredColumns()); } /** * Get the required columns * @param {string} [idColumnName=id] id column name * @return {string[]} */ SimpleAttributesTable.requiredColumns = function(idColumnName) { var requiredColumns = []; requiredColumns.push(idColumnName || SimpleAttributesTable.COLUMN_ID); return requiredColumns; } /** * Get the number of required columns * @return {Number} */ SimpleAttributesTable.numRequiredColumns = function(){ return SimpleAttributesTable.requiredColumns().length; } /** * Create the required columns * @param {Number} [startingIndex=0] starting index of the required columns * @param {string} [idColumnName=id] id column name * @return {module:user/userColumn~UserColumn[]} */ SimpleAttributesTable.createRequiredColumns = function(startingIndex, idColumnName) { startingIndex = startingIndex || 0; return [SimpleAttributesTable.createIdColumn(startingIndex++, idColumnName || SimpleAttributesTable.COLUMN_ID)]; } /** * Create the primary key id column * @param {Number} index index of the column * @param {string} idColumnName name of the id column * @return {module:user/userColumn~UserColumn} */ SimpleAttributesTable.createIdColumn = function(index, idColumnName) { return UserColumn.createPrimaryKeyColumnWithIndexAndName(index, idColumnName); } /** * Validate that Simple Attributes columns to verify at least one non id * column exists and that all columns are simple data types */ SimpleAttributesTable.prototype.validateColumns = function() { var columns = this.columns; if (columns.length < 2) { throw new Error('Simple Attributes Tables require at least one non id column'); } for (var i = 0; i < columns.length; i++) { var column = columns[i]; if (!SimpleAttributesTable.isSimple(column)) { throw new Error('Simple Attributes Tables only support simple data types. Column: ' + column.name + ', Non Simple Data Type: ' + column.dataType); } } } /** * Get the column index of the id column * @return {Number} */ SimpleAttributesTable.prototype.getIdColumnIndex = function() { return this.pkIndex; } /** * Get the primary key id column * @return {module:user/userColumn~UserColumn} */ SimpleAttributesTable.prototype.getIdColumn = function() { return this.getPkColumn(); } /** * Determine if the column is a simple column * @param {module:user/userColumn~UserColumn} column column to check * @return {Boolean} */ SimpleAttributesTable.isSimple = function(column) { return column.notNull && SimpleAttributesTable.isSimpleDataType(column.dataType); } /** * Determine if the data type is a simple type: TEXT, INTEGER, or REAL * @param {module:db/dataTypes~GPKGDataType} * @return {Boolean} */ SimpleAttributesTable.isSimpleDataType = function(dataType) { return dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB && dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY; } SimpleAttributesTable.RELATION_TYPE = RelationType.SIMPLE_ATTRIBUTES; SimpleAttributesTable.COLUMN_ID = 'id'; SimpleAttributesTable.prototype.TABLE_TYPE = 'simple_attributes'; module.exports = SimpleAttributesTable; },{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"./relationType":36,"./userRelatedTable":43,"util":343}],40:[function(require,module,exports){ /** * @module extension/relatedTables */ var UserMappingRow = require('./userMappingRow') , UserMappingTable = require('./userMappingTable') , UserCustomDao = require('../../user/custom/userCustomDao') , ColumnValues = require('../../dao/columnValues'); var util = require('util'); /** * User Mapping DAO for reading user mapping data tables * @class * @extends {module:user/custom/userCustomDao~UserCustomDao} * @param {string} table table name * @param {module:geoPackage~GeoPackage} geoPackage geopackage object */ var UserMappingDao = function(userCustomDao, geoPackage) { UserCustomDao.call(this, geoPackage, this.createMappingTable(userCustomDao)); } util.inherits(UserMappingDao, UserCustomDao); /** * Create a new {module:user/custom~UserCustomTable} * @param {module:user/custom~UserCustomDao} userCustomDao * @return {module:user/custom~UserCustomTable} userCustomTable user custom table */ UserMappingDao.prototype.createMappingTable = function(userCustomDao) { return new UserMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns); } /** * Create a new {module:extension/relatedTables~UserMappingRow} * @return {module:extension/relatedTables~UserMappingRow} */ UserMappingDao.prototype.newRow = function() { return new UserMappingRow(this.table); } /** * Gets the {module:extension/relatedTables~UserMappingTable} * @return {module:extension/relatedTables~UserMappingTable} */ UserMappingDao.prototype.getTable = function() { return this.table; } /** * Create a user mapping row * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {module:extension/relatedTables~UserMappingRow} user mapping row */ UserMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new UserMappingRow(this.table, columnTypes, values); }; /** * Gets the user mapping row from the result * @param {Object} result db result * @return {module:extension/relatedTables~UserMappingRow} user mapping row */ UserMappingDao.prototype.getUserMappingRow = function(result) { return this.getRow(result); } /** * Query by base id * @param {Number} baseId base id * @return {Object[]} */ UserMappingDao.prototype.queryByBaseId = function(baseId) { if (baseId.getBaseId) { baseId = baseId.getBaseId(); } return this.queryForAllEq(UserMappingTable.COLUMN_BASE_ID, baseId); } /** * Query by related id * @param {Number} relatedId related id * @return {Object[]} */ UserMappingDao.prototype.queryByRelatedId = function(relatedId) { if (relatedId.getRelatedId) { relatedId = relatedId.getRelatedId(); } return this.queryForAllEq(UserMappingTable.COLUMN_RELATED_ID, relatedId); } /** * Query by base id and related id * @param {Number} baseId base id * @param {Number} relatedId related id * @return {Object[]} */ UserMappingDao.prototype.queryByIds = function(baseId, relatedId) { if (baseId.getBaseId) { relatedId = baseId.getRelatedId(); baseId = baseId.getBaseId(); } var values = new ColumnValues(); values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId); values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId); return this.queryForFieldValues(values); } /** * The unique related ids * @return {Number[]} */ UserMappingDao.prototype.uniqueRelatedIds = function() { var query = 'SELECT DISTINCT '; query += UserMappingTable.COLUMN_RELATED_ID; query += ' FROM '; query += "'"+this.gpkgTableName+"'"; return this.connection.all(query); } /** * Count user mapping rows by base id and related id * @param {Number} baseId base id * @param {Number} relatedId related id * @return {Number} */ UserMappingDao.prototype.countByIds = function(baseId, relatedId) { if (baseId.getBaseId) { relatedId = baseId.getRelatedId(); baseId = baseId.getBaseId(); } var values = new ColumnValues(); values.addColumn(UserMappingTable.COLUMN_BASE_ID, baseId); values.addColumn(UserMappingTable.COLUMN_RELATED_ID, relatedId); return this.count(values); } /** * Delete by base id * @param {Number} baseId base id * @return {Number} number of deleted rows */ UserMappingDao.prototype.deleteByBaseId = function(baseId) { if (baseId.getBaseId) { baseId = baseId.getBaseId(); } var where = ''; where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId); var whereArgs = this.buildWhereArgs([baseId]); return this.deleteWhere(where, whereArgs); }; /** * Delete by related id * @param {Number} relatedId related id * @return {Number} number of deleted rows */ UserMappingDao.prototype.deleteByRelatedId = function(relatedId) { if (relatedId.getRelatedId) { relatedId = relatedId.getRelatedId(); } var where = ''; where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId); var whereArgs = this.buildWhereArgs([relatedId]); return this.deleteWhere(where, whereArgs); }; /** * Delete by base id and related id * @param {Number} baseId base id * @param {Number} relatedId related id * @return {Number} number of deleted rows */ UserMappingDao.prototype.deleteByIds = function(baseId, relatedId) { if (baseId.getBaseId) { relatedId = baseId.getRelatedId(); baseId = baseId.getBaseId(); } var where = ''; where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId); where += ' and '; where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_RELATED_ID, relatedId); var whereArgs = this.buildWhereArgs([baseId, relatedId]); return this.deleteWhere(where, whereArgs); } module.exports = UserMappingDao; },{"../../dao/columnValues":10,"../../user/custom/userCustomDao":102,"./userMappingRow":41,"./userMappingTable":42,"util":343}],41:[function(require,module,exports){ /** * UserMappingRow module. * @module extension/relatedTables */ var UserRow = require('../../user/userRow'); var util = require('util'); /** * User Mapping Row containing the values from a single result set row * @class * @extends {module:user/userRow~UserRow} * @param {module:extension/relatedTables~UserMappingTable} userMappingTable user mapping table * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values */ var UserMappingRow = function(userMappingTable, columnTypes, values) { UserRow.call(this, userMappingTable, columnTypes, values); } util.inherits(UserMappingRow, UserRow); /** * Get the base id column * @return {module:user/userColumn~UserColumn} */ UserMappingRow.prototype.getBaseIdColumn = function() { return this.table.getBaseIdColumn(); } /** * Gets the base id * @return {Number} */ UserMappingRow.prototype.getBaseId = function() { return this.getValueWithColumnName(this.getBaseIdColumn().name); } /** * Sets the base id * @param {Number} baseId base id */ UserMappingRow.prototype.setBaseId = function(baseId) { this.setValueWithColumnName(this.getBaseIdColumn().name, baseId); } /** * Get the related id column * @return {module:user/userColumn~UserColumn} */ UserMappingRow.prototype.getRelatedIdColumn = function() { return this.table.getRelatedIdColumn(); } /** * Gets the related id * @return {Number} */ UserMappingRow.prototype.getRelatedId = function() { return this.getValueWithColumnName(this.getRelatedIdColumn().name); } /** * Sets the related id * @param {Number} relatedId related id */ UserMappingRow.prototype.setRelatedId = function(relatedId) { this.setValueWithColumnName(this.getRelatedIdColumn().name, relatedId); } module.exports = UserMappingRow; },{"../../user/userRow":107,"util":343}],42:[function(require,module,exports){ /** * userMappingTable module. * @module extension/relatedTables */ var UserTable = require('../../user/userTable') , UserCustomColumn = require('../../user/custom/userCustomColumn') , DataTypes = require('../../db/dataTypes'); var util = require('util'); /** * Contains user mapping table factory and utility methods * @class * @extends {module:user/userTable~UserTable} * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns user mapping columns */ var UserMappingTable = function(tableName, columns) { UserTable.call(this, tableName, columns); } util.inherits(UserMappingTable, UserTable); /** * Creates a user mapping table with the minimum required columns followed by the additional columns * @param {string} tableName name of the table * @param {module:user/userColumn~UserColumn[]} additionalColumns additional columns * @return {module:extension/relatedTables~UserMappingTable} */ UserMappingTable.create = function(tableName, columns) { var allColumns = UserMappingTable.createRequiredColumns(0); if (columns) { allColumns = allColumns.concat(columns); } return new UserMappingTable(tableName, allColumns); } /** * Get the number of required columns * @return {Number} */ UserMappingTable.numRequiredColumns = function() { return UserMappingTable.createRequiredColumns(0).length; } /** * Create the required columns * @param {Number} [startingIndex=0] starting index of the required columns * @return {module:user/userColumn~UserColumn[]} */ UserMappingTable.createRequiredColumns = function(startingIndex) { startingIndex = startingIndex || 0; return [ UserMappingTable.createBaseIdColumn(startingIndex++), UserMappingTable.createRelatedIdColumn(startingIndex) ]; } /** * Create the base id column * @param {Number} index index of the column * @return {module:user/userColumn~UserColumn} */ UserMappingTable.createBaseIdColumn = function(index) { var baseIdColumn = UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_BASE_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true); return baseIdColumn; } /** * Create the related id column * @param {Number} index index of the column * @return {module:user/userColumn~UserColumn} */ UserMappingTable.createRelatedIdColumn = function(index) { return UserCustomColumn.createColumn(index, UserMappingTable.COLUMN_RELATED_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true); } /** * Get the base id column * @return {module:user/userColumn~UserColumn} */ UserMappingTable.prototype.getBaseIdColumn = function() { return this.getColumnWithColumnName(UserMappingTable.COLUMN_BASE_ID); } /** * Get the related id column * @return {module:user/userColumn~UserColumn} */ UserMappingTable.prototype.getRelatedIdColumn = function() { return this.getColumnWithColumnName(UserMappingTable.COLUMN_RELATED_ID); } /** * Get the required columns * @return {string[]} */ UserMappingTable.requiredColumns = function() { return [UserMappingTable.COLUMN_BASE_ID, UserMappingTable.COLUMN_RELATED_ID]; } UserMappingTable.COLUMN_BASE_ID = 'base_id'; UserMappingTable.COLUMN_RELATED_ID = 'related_id'; module.exports = UserMappingTable; },{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../../user/userTable":108,"util":343}],43:[function(require,module,exports){ /** * userRelatedTable module. * @module extension/relatedTables */ var UserTable = require('../../user/userTable') , UserColumn = require('../../user/userColumn') , DataTypes = require('../../db/dataTypes'); var util = require('util'); /** * User Defined Related Table * @param {string} tableName table name * @param {array} columns attribute columns */ /** * User Defined Related Table * @param {string} tableName table name * @param {string} relationName relation name * @param {string} dataType Contents data type * @param {module:user/userColumn~UserColumn} columns columns * @param {string[]} requiredColumns required columns * @return {module:extension/relatedTables~UserRelatedTable} */ var UserRelatedTable = function(tableName, relationName, dataType, columns, requiredColumns) { UserTable.call(this, tableName, columns, requiredColumns); this.relation_name = relationName; this.data_type = dataType; } util.inherits(UserRelatedTable, UserTable); /** * Sets the contents * @param {module:core/contents~Contents} contents contents * @throw Error if the contents data type does not match this data type */ UserRelatedTable.prototype.setContents = function(contents) { this.contents = contents; // verify the contents have a relation name data type if (!contents.data_type || contents.data_type !== this.data_type) { throw new Error('The contents of this related table must have a data type of ' + this.data_type); } } module.exports = UserRelatedTable; },{"../../db/dataTypes":14,"../../user/userColumn":105,"../../user/userTable":108,"util":343}],44:[function(require,module,exports){ /** * RTreeIndexDao module. * @module RTreeIndexDao * @see module:dao/dao */ var Dao = require('../../dao/dao') , BaseExtension = require('../baseExtension') , Extension = require('../.').Extension , EnvelopeBuilder = require('../../geom/envelopeBuilder') , GeometryData = require('../../geom/geometryData'); var util = require('util'); var RTreeIndex = function(geoPackage, featureDao) { BaseExtension.call(this, geoPackage); this.extensionName = Extension.buildExtensionName(RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR, RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR); this.extensionDefinition = RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION; this.tableName = featureDao.table_name; this.primaryKeyColumn = featureDao.idColumns[0]; this.columnName = featureDao.getGeometryColumnName(); this.rtreeIndexDao = new RTreeIndexDao(geoPackage, featureDao); this.extensionExists = this.hasExtension(this.extensionName, this.tableName, this.columnName); } util.inherits(RTreeIndex, BaseExtension); RTreeIndex.prototype.getRTreeIndexExtension = function () { return this.getExtension(this.extensionName, this.tableName, this.columnName); }; RTreeIndex.prototype.getOrCreateExtension = function() { return this.getOrCreate(this.extensionName, this.tableName, this.columnName, this.extensionDefinition, Extension.WRITE_ONLY); }; RTreeIndex.prototype.create = function() { if (this.extensionExists) { return Promise.resolve(this.getRTreeIndexExtension()); } return this.getOrCreate(this.extensionName, this.tableName, this.columnName, RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION, Extension.WRITE_ONLY) .then(function() { this.createAllFunctions(); this.createRTreeIndex(); this.loadRTreeIndex(); this.createAllTriggers(); return this.getRTreeIndexExtension(); }.bind(this)); } RTreeIndex.prototype.createAllTriggers = function() { var insertTrigger = 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_insert AFTER INSERT ON '+this.tableName+ ' WHEN (new.'+this.columnName+' NOT NULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+ 'BEGIN '+ ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+ ' NEW.'+this.primaryKeyColumn+','+ ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+ ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+ ' ); '+ 'END;'; var update1Trigger = 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update1 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+ ' WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+ ' (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+ 'BEGIN '+ ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+ ' NEW.'+this.primaryKeyColumn+','+ ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+ ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+') '+ ' ); '+ 'END;'; var update2Trigger = 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update2 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+ ' WHEN OLD.'+this.primaryKeyColumn+' = NEW.'+this.primaryKeyColumn+' AND '+ ' (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+ 'BEGIN '+ ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+ 'END;'; var update3Trigger = 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update3 AFTER UPDATE OF '+this.columnName+' ON '+this.tableName+ ' WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+ ' (NEW.'+this.columnName+' NOTNULL AND NOT ST_IsEmpty(NEW.'+this.columnName+')) '+ 'BEGIN '+ ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+ ' INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' VALUES ('+ ' NEW.'+this.primaryKeyColumn+', '+ ' ST_MinX(NEW.'+this.columnName+'), ST_MaxX(NEW.'+this.columnName+'), '+ ' ST_MinY(NEW.'+this.columnName+'), ST_MaxY(NEW.'+this.columnName+')'+ ' ); '+ 'END;'; var update4Trigger = 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_update4 AFTER UPDATE ON '+this.tableName+ ' WHEN OLD.'+this.primaryKeyColumn+' != NEW.'+this.primaryKeyColumn+' AND '+ ' (NEW.'+this.columnName+' ISNULL OR ST_IsEmpty(NEW.'+this.columnName+')) '+ 'BEGIN '+ ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id IN (OLD.'+this.primaryKeyColumn+', NEW.'+this.primaryKeyColumn+'); '+ 'END;'; var deleteTrigger = 'CREATE TRIGGER rtree_'+this.tableName+'_'+this.columnName+'_delete AFTER DELETE ON '+this.tableName+ ' WHEN old.'+this.columnName+' NOT NULL '+ 'BEGIN'+ ' DELETE FROM rtree_'+this.tableName+'_'+this.columnName+' WHERE id = OLD.'+this.primaryKeyColumn+'; '+ 'END;'; this.connection.run(insertTrigger); this.connection.run(update1Trigger); this.connection.run(update2Trigger); this.connection.run(update3Trigger); this.connection.run(update4Trigger); this.connection.run(deleteTrigger); } RTreeIndex.prototype.loadRTreeIndex = function() { this.connection.run('INSERT OR REPLACE INTO rtree_'+this.tableName+'_'+this.columnName+' SELECT '+this.primaryKeyColumn+', st_minx('+this.columnName+'), st_maxx('+this.columnName+'), st_miny('+this.columnName+'), st_maxy('+this.columnName+') FROM '+this.tableName); } RTreeIndex.prototype.createRTreeIndex = function() { this.connection.run('CREATE VIRTUAL TABLE rtree_'+this.tableName+'_'+this.columnName+' USING rtree(id, minx, maxx, miny, maxy)'); } RTreeIndex.prototype.createAllFunctions = function() { this.createMinXFunction(); this.createMaxXFunction(); this.createMinYFunction(); this.createMaxYFunction(); this.createIsEmptyFunction(); } RTreeIndex.prototype.createMinXFunction = function() { this.connection.registerFunction('ST_MinX', function(buffer) { var geom = new GeometryData(buffer); var envelope = geom.envelope; if (!envelope) { envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); } return envelope.minX; }); } RTreeIndex.prototype.createMinYFunction = function() { this.connection.registerFunction('ST_MinY', function(buffer) { var geom = new GeometryData(buffer); var envelope = geom.envelope; if (!envelope) { envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); } return envelope.minY; }); } RTreeIndex.prototype.createMaxXFunction = function() { this.connection.registerFunction('ST_MaxX', function(buffer) { var geom = new GeometryData(buffer); var envelope = geom.envelope; if (!envelope) { envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); } return envelope.maxX; }); } RTreeIndex.prototype.createMaxYFunction = function() { this.connection.registerFunction('ST_MaxY', function(buffer) { var geom = new GeometryData(buffer); var envelope = geom.envelope; if (!envelope) { envelope = EnvelopeBuilder.buildEnvelopeWithGeometry(geom.geometry); } return envelope.maxY; }); } RTreeIndex.prototype.createIsEmptyFunction = function() { this.connection.registerFunction('ST_IsEmpty', function(buffer) { var geom = new GeometryData(buffer); return !geom || geom.empty || !geom.geometry; }); } /** * RTree Index Data Access Object * @class * @extends {module:dao/dao~Dao} */ var RTreeIndexDao = function(geoPackage, featureDao) { Dao.call(this, geoPackage); this.featureDao = featureDao; }; util.inherits(RTreeIndexDao, Dao); /** * Generate query components * @param envelope * @returns {{whereArgs: Array, where: string, join: string, tableNameArr: string[]}} * @private */ RTreeIndexDao.prototype._generateGeometryEnvelopeQuery = function(envelope) { var tableName = this.featureDao.gpkgTableName; var where = ''; var minXLessThanMaxX = envelope.minX < envelope.maxX; if (minXLessThanMaxX) { where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<='); where += ' and '; where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>='); } else { where += '('; where += this.buildWhereWithFieldAndValue('minx', envelope.maxX, '<='); where += ' or '; where += this.buildWhereWithFieldAndValue('maxx', envelope.minX, '>='); where += ' or '; where += this.buildWhereWithFieldAndValue('minx', envelope.minX, '>='); where += ' or '; where += this.buildWhereWithFieldAndValue('maxx', envelope.maxX, '<='); where += ')'; } where += ' and '; where += this.buildWhereWithFieldAndValue('miny', envelope.maxY, '<='); where += ' and '; where += this.buildWhereWithFieldAndValue('maxy', envelope.minY, '>='); var whereArgs = [] whereArgs.push(envelope.maxX, envelope.minX); if (!minXLessThanMaxX) { whereArgs.push(envelope.minX, envelope.maxX); } whereArgs.push(envelope.maxY, envelope.minY); return { join: 'inner join ' + tableName + ' on ' + tableName + '.' + this.featureDao.idColumns[0] + ' = ' + this.gpkgTableName+'.id', where, whereArgs, tableNameArr: [tableName + '.*'] }; }; RTreeIndexDao.prototype.queryWithGeometryEnvelope = function(envelope) { var result = this._generateGeometryEnvelopeQuery(envelope) return this.queryJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); }; RTreeIndexDao.prototype.countWithGeometryEnvelope = function(envelope) { var result = this._generateGeometryEnvelopeQuery(envelope) return this.countJoinWhereWithArgs(result.join, result.where, result.whereArgs, result.tableNameArr); }; RTreeIndexDao.TABLE_NAME = "rtree"; RTreeIndexDao.COLUMN_TABLE_NAME = RTreeIndexDao.TABLE_NAME + ".table_name"; RTreeIndexDao.COLUMN_GEOM_ID = RTreeIndexDao.TABLE_NAME + ".geom_id"; RTreeIndexDao.COLUMN_MIN_X = RTreeIndexDao.TABLE_NAME + ".minx"; RTreeIndexDao.COLUMN_MAX_X = RTreeIndexDao.TABLE_NAME + ".maxx"; RTreeIndexDao.COLUMN_MIN_Y = RTreeIndexDao.TABLE_NAME + ".miny"; RTreeIndexDao.COLUMN_MAX_Y = RTreeIndexDao.TABLE_NAME + ".maxy"; RTreeIndexDao.COLUMN_MIN_Z = RTreeIndexDao.TABLE_NAME + ".minz"; RTreeIndexDao.COLUMN_MAX_Z = RTreeIndexDao.TABLE_NAME + ".maxz"; RTreeIndexDao.COLUMN_MIN_M = RTreeIndexDao.TABLE_NAME + ".minm"; RTreeIndexDao.COLUMN_MAX_M = RTreeIndexDao.TABLE_NAME + ".maxm"; RTreeIndexDao.EXTENSION_NAME = 'gpkg_rtree_index'; RTreeIndexDao.EXTENSION_RTREE_INDEX_AUTHOR = 'gpkg'; RTreeIndexDao.EXTENSION_RTREE_INDEX_NAME_NO_AUTHOR = 'rtree_index'; RTreeIndexDao.EXTENSION_RTREE_INDEX_DEFINITION = 'http://www.geopackage.org/spec/#extension_rtree'; RTreeIndexDao.prototype.gpkgTableName = RTreeIndexDao.TABLE_NAME; module.exports.RTreeIndexDao = RTreeIndexDao; module.exports.RTreeIndex = RTreeIndex; },{"../.":25,"../../dao/dao":11,"../../geom/envelopeBuilder":72,"../../geom/geometryData":73,"../baseExtension":20,"util":343}],45:[function(require,module,exports){ /** * SchemaExtension module. * @module SchemaExtension * @see module:extension/BaseExtension */ var BaseExtension = require('../baseExtension') , Extension = require('../.').Extension; var util = require('util'); var SchemaExtension = function(geoPackage) { BaseExtension.call(this, geoPackage); this.extensionName = SchemaExtension.EXTENSION_NAME; this.extensionDefinition = SchemaExtension.EXTENSION_SCHEMA_DEFINITION; } util.inherits(SchemaExtension, BaseExtension); SchemaExtension.prototype.getOrCreateExtension = function() { return this.getOrCreate(this.extensionName, null, null, this.extensionDefinition, Extension.READ_WRITE); }; SchemaExtension.EXTENSION_NAME = 'gpkg_schema'; SchemaExtension.EXTENSION_SCHEMA_AUTHOR = 'gpkg'; SchemaExtension.EXTENSION_SCHEMA_NAME_NO_AUTHOR = 'schema'; SchemaExtension.EXTENSION_SCHEMA_DEFINITION = 'http://www.geopackage.org/spec/#extension_schema'; module.exports.SchemaExtension = SchemaExtension; },{"../.":25,"../baseExtension":20,"util":343}],46:[function(require,module,exports){ /** * @memberOf module:extension/style * @class FeatureStyle */ /** * FeatureStyle constructor * @param {module:extension/style.StyleRow} styleRow * @param {module:extension/style.IconRow} iconRow * @constructor */ var FeatureStyle = function(styleRow, iconRow) { this.styleRow = styleRow; this.iconRow = iconRow; }; /** * Set style * @param {module:extension/style.StyleRow} styleRow */ FeatureStyle.prototype.setStyle = function(styleRow) { this.styleRow = styleRow; }; /** * Get style * @returns {module:extension/style.StyleRow} */ FeatureStyle.prototype.getStyle = function() { return this.styleRow; }; /** * Returns true if has style * @returns {Boolean} */ FeatureStyle.prototype.hasStyle = function() { return !!this.styleRow; }; /** * Set icon * @param {module:extension/style.IconRow} iconRow */ FeatureStyle.prototype.setIcon = function(iconRow) { this.iconRow = iconRow; }; /** * Get icon * @returns {module:extension/style.IconRow} */ FeatureStyle.prototype.getIcon = function() { return this.iconRow; }; /** * Returns true if has icon * @returns {Boolean} */ FeatureStyle.prototype.hasIcon = function() { return !!this.iconRow; }; module.exports = FeatureStyle; },{}],47:[function(require,module,exports){ /** * @memberOf module:extension/style * @class FeatureStyles */ /** * FeatureStyles constructor * @param {module:extension/style.Styles} styles * @param {module:extension/style.Icons} icons * @constructor */ var FeatureStyles = function(styles = null, icons = null) { this.styles = styles; this.icons = icons; }; /** * Set style * @param {module:extension/style.Styles} styles */ FeatureStyles.prototype.setStyles = function(styles) { this.styles = styles; }; /** * Get style * @returns {module:extension/style.Styles} */ FeatureStyles.prototype.getStyles = function() { return this.styles; }; /** * Set icon * @param {module:extension/style.Icons} icons */ FeatureStyles.prototype.setIcons = function(icons) { this.icons = icons; }; /** * Get icon * @returns {module:extension/style.Icons} */ FeatureStyles.prototype.getIcons = function() { return this.icons; }; module.exports = FeatureStyles; },{}],48:[function(require,module,exports){ /** * @memberOf module:extension/style * @class FeatureStyleExtension */ var FeatureStyles = require('./featureStyles') , FeatureStyle = require('./featureStyle') , Styles = require('./styles') , Icons = require('./icons'); /** * Feature Table Styles, styles and icons for an individual feature table * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object * @param {String} tableName * @constructor */ var FeatureTableStyles = function(geoPackage, tableName) { this.featureStyleExtension = geoPackage.getFeatureStyleExtension(); this.cachedTableFeatureStyles = new FeatureStyles(); this.tableName = tableName; }; /** * Get the feature style extension * @return {module:extension/style.FeatureStyleExtension} feature style extension */ FeatureTableStyles.prototype.getFeatureStyleExtension = function() { return this.featureStyleExtension; }; /** * Get the feature table name * @return {String} feature table name */ FeatureTableStyles.prototype.getTableName = function() { return this.tableName; }; /** * Determine if the GeoPackage has the extension for the table * @return {Boolean} true if has extension */ FeatureTableStyles.prototype.has = function() { return this.featureStyleExtension.has(this.tableName); }; /** * Create style, icon, table style, and table icon relationships for the * feature table * @return {Promise} */ FeatureTableStyles.prototype.createRelationships = function() { return this.featureStyleExtension.createRelationships(this.tableName); }; /** * Check if feature table has a style, icon, table style, or table icon * relationships * @return {Boolean} true if has a relationship */ FeatureTableStyles.prototype.hasRelationship = function() { return this.featureStyleExtension.hasRelationship(this.tableName); }; /** * Create a style relationship for the feature table * @return {Promise} */ FeatureTableStyles.prototype.createStyleRelationship = function() { return this.featureStyleExtension.createStyleRelationship(this.tableName); }; /** * Determine if a style relationship exists for the feature table * @return {Boolean} true if relationship exists */ FeatureTableStyles.prototype.hasStyleRelationship = function() { return this.featureStyleExtension.hasStyleRelationship(this.tableName); }; /** * Create a feature table style relationship * @return {Promise} */ FeatureTableStyles.prototype.createTableStyleRelationship = function() { return this.featureStyleExtension.createTableStyleRelationship(this.tableName); }; /** * Determine if feature table style relationship exists * * @return {Boolean} true if relationship exists */ FeatureTableStyles.prototype.hasTableStyleRelationship = function() { return this.featureStyleExtension.hasTableStyleRelationship(this.tableName); }; /** * Create an icon relationship for the feature table * @return {Promise} */ FeatureTableStyles.prototype.createIconRelationship = function() { return this.featureStyleExtension.createIconRelationship(this.tableName); }; /** * Determine if an icon relationship exists for the feature table * @return {Boolean} true if relationship exists */ FeatureTableStyles.prototype.hasIconRelationship = function() { return this.featureStyleExtension.hasIconRelationship(this.tableName); }; /** * Create a feature table icon relationship * @return {Promise} */ FeatureTableStyles.prototype.createTableIconRelationship = function() { return this.featureStyleExtension.createTableIconRelationship(this.tableName); }; /** * Determine if feature table icon relationship exists * @return {Boolean} true if relationship exists */ FeatureTableStyles.prototype.hasTableIconRelationship = function() { return this.featureStyleExtension.hasTableIconRelationship(this.tableName); }; /** * Delete the style and icon table and row relationships for the feature * table */ FeatureTableStyles.prototype.deleteRelationships = function() { this.featureStyleExtension.deleteRelationships(this.tableName); }; /** * Delete a style relationship for the feature table */ FeatureTableStyles.prototype.deleteStyleRelationship = function() { this.featureStyleExtension.deleteStyleRelationship(this.tableName); }; /** * Delete a table style relationship for the feature table */ FeatureTableStyles.prototype.deleteTableStyleRelationship = function() { this.featureStyleExtension.deleteTableStyleRelationship(this.tableName); }; /** * Delete a icon relationship for the feature table */ FeatureTableStyles.prototype.deleteIconRelationship = function() { this.featureStyleExtension.deleteIconRelationship(this.tableName); }; /** * Delete a table icon relationship for the feature table */ FeatureTableStyles.prototype.deleteTableIconRelationship = function() { this.featureStyleExtension.deleteTableIconRelationship(this.tableName); }; /** * Get a Style Mapping DAO * @return {module:extension/style.StyleMappingDao} style mapping DAO */ FeatureTableStyles.prototype.getStyleMappingDao = function() { return this.featureStyleExtension.getStyleMappingDao(this.tableName); }; /** * Get a Table Style Mapping DAO * @return {module:extension/style.StyleMappingDao} table style mapping DAO */ FeatureTableStyles.prototype.getTableStyleMappingDao = function() { return this.featureStyleExtension.getTableStyleMappingDao(this.tableName); }; /** * Get a Icon Mapping DAO * @return {module:extension/style.StyleMappingDao} icon mapping DAO */ FeatureTableStyles.prototype.getIconMappingDao = function() { return this.featureStyleExtension.getIconMappingDao(this.tableName); }; /** * Get a Table Icon Mapping DAO * @return {module:extension/style.StyleMappingDao} table icon mapping DAO */ FeatureTableStyles.prototype.getTableIconMappingDao = function() { return this.featureStyleExtension.getTableIconMappingDao(this.tableName); }; /** * Get a style DAO * @return {module:extension/style.StyleDao} style DAO */ FeatureTableStyles.prototype.getStyleDao = function() { return this.featureStyleExtension.getStyleDao(); }; /** * Get a icon DAO * @return {module:extension/style.IconDao} icon DAO */ FeatureTableStyles.prototype.getIconDao = function() { return this.featureStyleExtension.getIconDao(); }; /** * Get the table feature styles * @return {module:extension/style.FeatureStyles} table feature styles or null */ FeatureTableStyles.prototype.getTableFeatureStyles = function() { return this.featureStyleExtension.getTableFeatureStyles(this.tableName); }; /** * Get the table styles * @return {module:extension/style.Styles} table styles or null */ FeatureTableStyles.prototype.getTableStyles = function() { return this.featureStyleExtension.getTableStyles(this.tableName); }; /** * Get the cached table styles, querying and caching if needed * @return {module:extension/style.Styles} cached table styles */ FeatureTableStyles.prototype.getCachedTableStyles = function() { var styles = this.cachedTableFeatureStyles.getStyles(); if (styles === null) { styles = this.cachedTableFeatureStyles.getStyles(); if (styles === null) { styles = this.getTableStyles(); if (styles === null) { styles = new Styles(); } this.cachedTableFeatureStyles.setStyles(styles); } } if (styles.isEmpty()) { styles = null; } return styles; }; /** * Get the table style of the geometry type * @param {String} geometryType geometry type * @return {module:extension/style.StyleRow} style row */ FeatureTableStyles.prototype.getTableStyle = function(geometryType) { return this.featureStyleExtension.getTableStyle(this.tableName, geometryType); }; /** * Get the table style default * @return {module:extension/style.StyleRow} style row */ FeatureTableStyles.prototype.getTableStyleDefault = function() { return this.featureStyleExtension.getTableStyleDefault(this.tableName); }; /** * Get the table icons * @return {module:extension/style.Icons} table icons or null */ FeatureTableStyles.prototype.getTableIcons = function() { return this.featureStyleExtension.getTableIcons(this.tableName); }; /** * Get the cached table icons, querying and caching if needed * @return {module:extension/style.Icons} cached table icons */ FeatureTableStyles.prototype.getCachedTableIcons = function() { var icons = this.cachedTableFeatureStyles.getIcons(); if (icons === null) { icons = this.cachedTableFeatureStyles.getIcons(); if (icons === null) { icons = this.getTableIcons(); if (icons === null) { icons = new Icons(); } this.cachedTableFeatureStyles.setIcons(icons); } } if (icons.isEmpty()) { icons = null; } return icons; }; /** * Get the table icon of the geometry type * @param {String} geometryType geometry type * @return {module:extension/style.IconRow} icon row */ FeatureTableStyles.prototype.getTableIcon = function(geometryType) { return this.featureStyleExtension.getTableIcon(this.tableName, geometryType); }; /** * Get the table icon default * @return {module:extension/style.IconRow} icon row */ FeatureTableStyles.prototype.getTableIconDefault = function() { return this.featureStyleExtension.getTableIconDefault(this.tableName); }; /** * Get the feature styles for the feature row * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.FeatureStyles} feature styles or null */ FeatureTableStyles.prototype.getFeatureStylesForFeatureRow = function(featureRow) { return this.featureStyleExtension.getFeatureStylesForFeatureRow(featureRow); }; /** * Get the feature styles for the feature id * * @param {Number} featureId feature id * @return {module:extension/style.FeatureStyles} feature styles or null */ FeatureTableStyles.prototype.getFeatureStyles = function(featureId) { return this.featureStyleExtension.getFeatureStyles(this.tableName, featureId); }; /** * Get the feature style (style and icon) of the feature row, searching in * order: feature geometry type style or icon, feature default style or * icon, table geometry type style or icon, table default style or icon * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.FeatureStyle} feature style */ FeatureTableStyles.prototype.getFeatureStyleForFeatureRow = function(featureRow) { return this.getFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); }; /** * Get the feature style (style and icon) of the feature row with the * provided geometry type, searching in order: feature geometry type style * or icon, feature default style or icon, table geometry type style or * icon, table default style or icon * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @return {module:extension/style.FeatureStyle} feature style */ FeatureTableStyles.prototype.getFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { return this.getFeatureStyle(featureRow.getId(), geometryType); }; /** * Get the feature style default (style and icon) of the feature row, * searching in order: feature default style or icon, table default style or * icon * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.FeatureStyle} feature style */ FeatureTableStyles.prototype.getFeatureStyleDefaultForFeatureRow = function(featureRow) { return this.getFeatureStyle(featureRow.getId(), null); }; /** * Get the feature style (style and icon) of the feature, searching in * order: feature geometry type style or icon, feature default style or * icon, table geometry type style or icon, table default style or icon * * @param {Number} featureId feature id * @param {String} geometryType geometry type * @return {module:extension/style.FeatureStyle} feature style */ FeatureTableStyles.prototype.getFeatureStyle = function(featureId, geometryType) { var featureStyle = null; var style = this.getStyle(featureId, geometryType); var icon = this.getIcon(featureId, geometryType); if (style != null || icon != null) { featureStyle = new FeatureStyle(style, icon); } return featureStyle; }; /** * Get the feature style (style and icon) of the feature, searching in * order: feature geometry type style or icon, feature default style or * icon, table geometry type style or icon, table default style or icon * * @param {Number} featureId feature id * @return {module:extension/style.FeatureStyle} feature style */ FeatureTableStyles.prototype.getFeatureStyleDefault = function(featureId) { return this.getFeatureStyle(featureId, null); }; /** * Get the styles for the feature row * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.Styles} styles or null */ FeatureTableStyles.prototype.getStylesForFeatureRow = function(featureRow) { return this.featureStyleExtension.getStylesForFeatureRow(featureRow); }; /** * Get the styles for the feature id * * @param {Number} featureId feature id * @return {module:extension/style.Styles} styles or null */ FeatureTableStyles.prototype.getStylesForFeatureId = function(featureId) { return this.featureStyleExtension.getStylesForFeatureId(this.tableName, featureId); }; /** * Get the style of the feature row, searching in order: feature geometry * type style, feature default style, table geometry type style, table * default style * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.StyleRow} style row */ FeatureTableStyles.prototype.getStyleForFeatureRow = function(featureRow) { return this.getStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); }; /** * Get the style of the feature row with the provided geometry type, * searching in order: feature geometry type style, feature default style, * table geometry type style, table default style * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @return {module:extension/style.StyleRow} style row */ FeatureTableStyles.prototype.getStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { return this.getStyle(featureRow.getId(), geometryType); }; /** * Get the default style of the feature row, searching in order: feature * default style, table default style * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.StyleRow} style row */ FeatureTableStyles.prototype.getStyleDefaultForFeatureRow = function(featureRow) { return this.getStyle(featureRow.getId(), null); }; /** * Get the style of the feature, searching in order: feature geometry type * style, feature default style, table geometry type style, table default * style * * @param {Number} featureId feature id * @param {String} geometryType geometry type * @return {module:extension/style.StyleRow} style row */ FeatureTableStyles.prototype.getStyle = function(featureId, geometryType) { var styleRow = this.featureStyleExtension.getStyle(this.tableName, featureId, geometryType, false); if (styleRow === null) { // Table Style var styles = this.getCachedTableStyles(); if (styles != null) { styleRow = styles.getStyle(geometryType); } } return styleRow; }; /** * Get the default style of the feature, searching in order: feature default * style, table default style * * @param {Number} featureId feature id * @return {module:extension/style.StyleRow} style row */ FeatureTableStyles.prototype.getStyleDefault = function(featureId) { return this.getStyle(featureId, null); }; /** * Get the icons for the feature row * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.Icons} icons or null */ FeatureTableStyles.prototype.getIconsForFeatureRow = function(featureRow) { return this.featureStyleExtension.getIconsForFeatureRow(featureRow); }; /** * Get the icons for the feature id * * @param {Number} featureId feature id * @return {module:extension/style.Icons} icons or null */ FeatureTableStyles.prototype.getIconsForFeatureId = function(featureId) { return this.featureStyleExtension.getIconsForFeatureId(this.tableName, featureId); }; /** * Get the icon of the feature row, searching in order: feature geometry * type icon, feature default icon, table geometry type icon, table default * icon * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.IconRow} icon row */ FeatureTableStyles.prototype.getIconForFeatureRow = function(featureRow) { return this.getIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); }; /** * Get the icon of the feature row with the provided geometry type, * searching in order: feature geometry type icon, feature default icon, * table geometry type icon, table default icon * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @return {module:extension/style.IconRow} icon row */ FeatureTableStyles.prototype.getIconForFeatureRowAndGeometryType = function(featureRow, geometryType) { return this.getIcon(featureRow.getId(), geometryType); }; /** * Get the default icon of the feature row, searching in order: feature * default icon, table default icon * * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.IconRow} icon row */ FeatureTableStyles.prototype.getIconDefaultForFeatureRow = function(featureRow) { return this.getIcon(featureRow.getId(), null); }; /** * Get the icon of the feature, searching in order: feature geometry type * icon, feature default icon, table geometry type icon, table default icon * * @param {Number} featureId feature id * @param {String} geometryType geometry type * @return {module:extension/style.IconRow} icon row */ FeatureTableStyles.prototype.getIcon = function(featureId, geometryType) { var iconRow = this.featureStyleExtension.getIcon(this.tableName, featureId, geometryType, false); if (iconRow === null) { // Table Icon var icons = this.getCachedTableIcons(); if (icons != null) { iconRow = icons.getIcon(geometryType); } } return iconRow; }; /** * Get the default icon of the feature, searching in order: feature default * icon, table default icon * * @param {Number} featureId feature id * @return {module:extension/style.IconRow} icon row */ FeatureTableStyles.prototype.getIconDefault = function(featureId) { return this.getIcon(featureId, null); }; /** * Set the feature table default feature styles * * @param {module:extension/style.FeatureStyles} featureStyles default feature styles * @return {Promise} */ FeatureTableStyles.prototype.setTableFeatureStyles = function(featureStyles) { return this.featureStyleExtension.setTableFeatureStyles(this.tableName, featureStyles).then(function () { this.clearCachedTableFeatureStyles(); }.bind(this)); }; /** * Set the feature table default styles * * @param {module:extension/style.Styles} styles default styles * @return {Promise} */ FeatureTableStyles.prototype.setTableStyles = function(styles) { return this.featureStyleExtension.setTableStyles(this.tableName, styles).then(function () { this.clearCachedTableStyles(); }.bind(this)); }; /** * Set the feature table style default * * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureTableStyles.prototype.setTableStyleDefault = function(style) { return this.featureStyleExtension.setTableStyleDefault(this.tableName, style).then(function () { this.clearCachedTableStyles(); }.bind(this)); }; /** * Set the feature table style for the geometry type * * @param {String} geometryType geometry type * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureTableStyles.prototype.setTableStyle = function(geometryType, style) { return this.featureStyleExtension.setTableStyle(this.tableName, geometryType, style).then(function () { this.clearCachedTableStyles(); }.bind(this)); }; /** * Set the feature table default icons * * @param {module:extension/style.Icons} icons default icons * @return {Promise} */ FeatureTableStyles.prototype.setTableIcons = function(icons) { return this.featureStyleExtension.setTableIcons(this.tableName, icons).then(function () { this.clearCachedTableIcons(); }.bind(this)); }; /** * Set the feature table icon default * * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureTableStyles.prototype.setTableIconDefault = function(icon) { return this.featureStyleExtension.setTableIconDefault(this.tableName, icon).then(function () { this.clearCachedTableIcons(); }.bind(this)); }; /** * Set the feature table icon for the geometry type * * @param {String} geometryType geometry type * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureTableStyles.prototype.setTableIcon = function(geometryType, icon) { return this.featureStyleExtension.setTableIcon(this.tableName, geometryType, icon).then(function () { this.clearCachedTableIcons(); }.bind(this)); }; /** * Set the feature styles for the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.FeatureStyles} featureStyles feature styles * @return {Promise} */ FeatureTableStyles.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) { return this.featureStyleExtension.setFeatureStylesForFeatureRow(featureRow, featureStyles); }; /** * Set the feature styles for the feature table and feature id * * @param {Number} featureId feature id * @param {module:extension/style.FeatureStyles} featureStyles feature styles * @return {Promise} */ FeatureTableStyles.prototype.setFeatureStyles = function(featureId, featureStyles) { return this.featureStyleExtension.setFeatureStyles(this.tableName, featureId, featureStyles); }; /** * Set the feature style (style and icon) of the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureTableStyles.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) { return this.featureStyleExtension.setFeatureStyleForFeatureRow(featureRow, featureStyle); }; /** * Set the feature style (style and icon) of the feature row for the * specified geometry type * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureTableStyles.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) { return this.featureStyleExtension.setFeatureStyleForFeatureRowAndGeometryType(featureRow, geometryType, featureStyle); }; /** * Set the feature style default (style and icon) of the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureTableStyles.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) { return this.featureStyleExtension.setFeatureStyleDefaultForFeatureRow(featureRow, featureStyle); }; /** * Set the feature style (style and icon) of the feature * * @param {Number} featureId feature id * @param {String} geometryType geometry type * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureTableStyles.prototype.setFeatureStyle = function(featureId, geometryType, featureStyle) { return this.featureStyleExtension.setFeatureStyle(this.tableName, featureId, geometryType, featureStyle); }; /** * Set the feature style (style and icon) of the feature * * @param {Number} featureId feature id * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureTableStyles.prototype.setFeatureStyleDefault = function(featureId, featureStyle) { return this.featureStyleExtension.setFeatureStyleDefault(this.tableName, featureId, featureStyle); }; /** * Set the styles for the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.StyleRow} styles styles * @return {Promise} */ FeatureTableStyles.prototype.setStylesForFeatureRow = function(featureRow, styles) { return this.featureStyleExtension.setStylesForFeatureRow(featureRow, styles); }; /** * Set the styles for the feature table and feature id * * @param {Number} featureId feature id * @param {module:extension/style.Styles} styles styles * @return {Promise} */ FeatureTableStyles.prototype.setStyles = function(featureId, styles) { return this.featureStyleExtension.setStyles(this.tableName, featureId, styles); }; /** * Set the style of the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureTableStyles.prototype.setStyleForFeatureRow = function(featureRow, style) { return this.featureStyleExtension.setStyleForFeatureRow(featureRow, style); }; /** * Set the style of the feature row for the specified geometry type * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureTableStyles.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) { return this.featureStyleExtension.setStyleForFeatureRowAndGeometryType(featureRow, geometryType, style); }; /** * Set the default style of the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureTableStyles.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) { return this.featureStyleExtension.setStyleDefaultForFeatureRow(featureRow, style); }; /** * Set the style of the feature * * @param {Number} featureId feature id * @param {String} geometryType geometry type * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureTableStyles.prototype.setStyle = function(featureId, geometryType, style) { return this.featureStyleExtension.setStyle(this.tableName, featureId, geometryType, style); }; /** * Set the default style of the feature * * @param {Number} featureId feature id * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureTableStyles.prototype.setStyleDefault = function(featureId, style) { return this.featureStyleExtension.setStyleDefault(this.tableName, featureId, style); }; /** * Set the icons for the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.Icons} icons icons * @return {Promise} */ FeatureTableStyles.prototype.setIconsForFeatureRow = function(featureRow, icons) { return this.featureStyleExtension.setIconsForFeatureRow(featureRow, icons); }; /** * Set the icons for the feature table and feature id * * @param {Number} featureId feature id * @param {module:extension/style.Icons} icons icons * @return {Promise} */ FeatureTableStyles.prototype.setIcons = function(featureId, icons) { return this.featureStyleExtension.setIcons(this.tableName, featureId, icons); }; /** * Set the icon of the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureTableStyles.prototype.setIconForFeatureRow = function(featureRow, icon) { return this.featureStyleExtension.setIconForFeatureRow(featureRow, icon); }; /** * Set the icon of the feature row for the specified geometry type * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureTableStyles.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) { return this.featureStyleExtension.setIconForFeatureRowAndGeometryType(featureRow, geometryType, icon); }; /** * Set the default icon of the feature row * * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureTableStyles.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) { return this.featureStyleExtension.setIconDefaultForFeatureRow(featureRow, icon); }; /** * Get the icon of the feature, searching in order: feature geometry type * icon, feature default icon, table geometry type icon, table default icon * * @param {Number} featureId feature id * @param {String} geometryType geometry type * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureTableStyles.prototype.setIcon = function(featureId, geometryType, icon) { return this.featureStyleExtension.setIcon(this.tableName, featureId, geometryType, icon); }; /** * Set the default icon of the feature * * @param {Number} featureId feature id * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureTableStyles.prototype.setIconDefault = function(featureId, icon) { return this.featureStyleExtension.setIconDefault(this.tableName, featureId, icon); }; /** * Delete all feature styles including table styles, table icons, style, and * icons */ FeatureTableStyles.prototype.deleteAllFeatureStyles = function() { this.featureStyleExtension.deleteAllFeatureStyles(this.tableName); this.clearCachedTableFeatureStyles(); }; /** * Delete all styles including table styles and feature row styles */ FeatureTableStyles.prototype.deleteAllStyles = function() { this.featureStyleExtension.deleteAllStyles(this.tableName); this.clearCachedTableStyles(); }; /** * Delete all icons including table icons and feature row icons */ FeatureTableStyles.prototype.deleteAllIcons = function() { this.featureStyleExtension.deleteAllIcons(this.tableName); this.clearCachedTableIcons(); }; /** * Delete the feature table feature styles */ FeatureTableStyles.prototype.deleteTableFeatureStyles = function() { this.featureStyleExtension.deleteTableFeatureStyles(this.tableName); this.clearCachedTableFeatureStyles(); }; /** * Delete the feature table styles */ FeatureTableStyles.prototype.deleteTableStyles = function() { this.featureStyleExtension.deleteTableStyles(this.tableName); this.clearCachedTableStyles(); }; /** * Delete the feature table default style */ FeatureTableStyles.prototype.deleteTableStyleDefault = function() { this.featureStyleExtension.deleteTableStyleDefault(this.tableName); this.clearCachedTableStyles(); }; /** * Delete the feature table style for the geometry type * * @param {String} geometryType geometry type */ FeatureTableStyles.prototype.deleteTableStyle = function(geometryType) { this.featureStyleExtension.deleteTableStyle(this.tableName, geometryType); this.clearCachedTableStyles(); }; /** * Delete the feature table icons */ FeatureTableStyles.prototype.deleteTableIcons = function() { this.featureStyleExtension.deleteTableIcons(this.tableName); this.clearCachedTableIcons(); }; /** * Delete the feature table default icon */ FeatureTableStyles.prototype.deleteTableIconDefault = function() { this.featureStyleExtension.deleteTableIconDefault(this.tableName); this.clearCachedTableIcons(); }; /** * Delete the feature table icon for the geometry type * * @param {String} geometryType geometry type */ FeatureTableStyles.prototype.deleteTableIcon = function(geometryType) { this.featureStyleExtension.deleteTableIcon(this.tableName, geometryType); this.clearCachedTableIcons(); }; /** * Clear the cached table feature styles */ FeatureTableStyles.prototype.clearCachedTableFeatureStyles = function() { this.cachedTableFeatureStyles.setStyles(null); this.cachedTableFeatureStyles.setIcons(null); }; /** * Clear the cached table styles */ FeatureTableStyles.prototype.clearCachedTableStyles = function() { this.cachedTableFeatureStyles.setStyles(null); }; /** * Clear the cached table icons */ FeatureTableStyles.prototype.clearCachedTableIcons = function() { this.cachedTableFeatureStyles.setIcons(null); }; /** * Delete all feature styles */ FeatureTableStyles.prototype.deleteFeatureStyles = function() { this.featureStyleExtension.deleteFeatureStyles(this.tableName); }; /** * Delete all styles */ FeatureTableStyles.prototype.deleteStyles = function() { this.featureStyleExtension.deleteStyles(this.tableName); }; /** * Delete feature row styles * * @param {module:features/user/featureRow} featureRow feature row */ FeatureTableStyles.prototype.deleteStylesForFeatureRow = function(featureRow) { this.featureStyleExtension.deleteStylesForFeatureRow(featureRow); }; /** * Delete feature row styles * * @param {Number} featureId feature id */ FeatureTableStyles.prototype.deleteStylesForFeatureId = function(featureId) { this.featureStyleExtension.deleteStylesForFeatureId(this.tableName, featureId); }; /** * Delete the feature row default style * * @param {module:features/user/featureRow} featureRow feature row */ FeatureTableStyles.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) { this.featureStyleExtension.deleteStyleDefaultForFeatureRow(featureRow); }; /** * Delete the feature row default style * * @param {Number} featureId feature id */ FeatureTableStyles.prototype.deleteStyleDefault = function(featureId) { this.featureStyleExtension.deleteStyleDefault(this.tableName, featureId); }; /** * Delete the feature row style for the feature row geometry type * * @param {module:features/user/featureRow} featureRow feature row */ FeatureTableStyles.prototype.deleteStyleForFeatureRow = function(featureRow) { this.featureStyleExtension.deleteStyleForFeatureRow(featureRow); }; /** * Delete the feature row style for the geometry type * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type */ FeatureTableStyles.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { this.featureStyleExtension.deleteStyleForFeatureRowAndGeometryType(featureRow, geometryType); }; /** * Delete the feature row style for the geometry type * * @param {Number} featureId feature id * @param {String} geometryType geometry type */ FeatureTableStyles.prototype.deleteStyle = function(featureId, geometryType) { this.featureStyleExtension.deleteStyle(this.tableName, featureId, geometryType); }; /** * Delete all icons */ FeatureTableStyles.prototype.deleteIcons = function() { this.featureStyleExtension.deleteIcons(this.tableName); }; /** * Delete feature row icons * * @param {module:features/user/featureRow} featureRow feature row */ FeatureTableStyles.prototype.deleteIconsForFeatureRow = function(featureRow) { this.featureStyleExtension.deleteIconsForFeatureRow(featureRow); }; /** * Delete feature row icons * * @param {Number} featureId feature id */ FeatureTableStyles.prototype.deleteIconsForFeatureId = function(featureId) { this.featureStyleExtension.deleteIconsForFeatureId(this.tableName, featureId); }; /** * Delete the feature row default icon * * @param {module:features/user/featureRow} featureRow feature row */ FeatureTableStyles.prototype.deleteIconDefaultForFeatureRow = function(featureRow) { this.featureStyleExtension.deleteIconDefaultForFeatureRow(featureRow); }; /** * Delete the feature row default icon * * @param {Number} featureId feature id */ FeatureTableStyles.prototype.deleteIconDefault = function(featureId) { this.featureStyleExtension.deleteIconDefault(this.tableName, featureId); }; /** * Delete the feature row icon for the feature row geometry type * * @param {module:features/user/featureRow} featureRow feature row */ FeatureTableStyles.prototype.deleteIconForFeatureRow = function(featureRow) { this.featureStyleExtension.deleteIconForFeatureRow(featureRow); }; /** * Delete the feature row icon for the geometry type * * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type */ FeatureTableStyles.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) { this.featureStyleExtension.deleteIconForFeatureRowAndGeometryType(featureRow, geometryType); }; /** * Delete the feature row icon for the geometry type * * @param {Number} featureId feature id * @param {String} geometryType geometry type */ FeatureTableStyles.prototype.deleteIcon = function(featureId, geometryType) { this.featureStyleExtension.deleteIcon(this.tableName, featureId, geometryType); }; /** * Get all the unique style row ids the table maps to * * @return {module:extension/style.StyleRow} style row ids */ FeatureTableStyles.prototype.getAllTableStyleIds = function() { return this.featureStyleExtension.getAllTableStyleIds(this.tableName); }; /** * Get all the unique icon row ids the table maps to * * @return {module:extension/style.IconRow} icon row ids */ FeatureTableStyles.prototype.getAllTableIconIds = function() { return this.featureStyleExtension.getAllTableIconIds(this.tableName); }; /** * Get all the unique style row ids the features map to * * @return {module:extension/style.StyleRow} style row ids */ FeatureTableStyles.prototype.getAllStyleIds = function() { return this.featureStyleExtension.getAllStyleIds(this.tableName); }; /** * Get all the unique icon row ids the features map to * * @return {module:extension/style.IconRow} icon row ids */ FeatureTableStyles.prototype.getAllIconIds = function() { return this.featureStyleExtension.getAllIconIds(this.tableName); }; module.exports = FeatureTableStyles; },{"./featureStyle":46,"./featureStyles":47,"./icons":53,"./styles":62}],49:[function(require,module,exports){ /** * @memberOf module:extension/style * @class IconCache */ /** * Constructor, created with cache size of {@link #IconCache.DEFAULT_CACHE_SIZE} * @constructor */ var IconCache = function(size = null) { this.cacheSize = size !== null ? size : IconCache.DEFAULT_CACHE_SIZE; this.iconCache = {}; this.accessHistory = []; }; /** * Get the cached image for the icon row or null if not cached * @param {module:extension/style.IconRow} iconRow icon row * @return {Image} icon image or null */ IconCache.prototype.getIconForIconRow = function(iconRow) { return this.get(iconRow.getId()); }; /** * Get the cached image for the icon row id or null if not cached * @param {Number} iconRowId icon row id * @return {Image} icon image or null */ IconCache.prototype.get = function(iconRowId) { var image = this.iconCache[iconRowId]; if (!!image) { var index = this.accessHistory.indexOf(iconRowId); if (index > -1) { this.accessHistory.splice(index, 1); } this.accessHistory.push(iconRowId); } return image; }; /** * Cache the icon image for the icon row * @param {module:extension/style.IconRow} iconRow icon row * @param {Image} image icon image * @return {Image} previous cached icon image or null */ IconCache.prototype.putIconForIconRow = function(iconRow, image) { return this.put(iconRow.getId(), image); }; /** * Cache the icon image for the icon row id * @param {Number} iconRowId icon row id * @param {Image} image icon image * @return {Image} previous cached icon image or null */ IconCache.prototype.put = function(iconRowId, image) { var previous = this.iconCache[iconRowId]; this.iconCache[iconRowId] = image; if (!!previous) { var index = this.accessHistory.indexOf(iconRowId); if (index > -1) { this.accessHistory.splice(index, 1); } } this.accessHistory.push(iconRowId); if (Object.keys(this.iconCache).length > this.cacheSize) { var iconId = this.accessHistory.shift(); if (iconId) { delete this.iconCache[iconId]; } } return previous; }; /** * Remove the cached image for the icon row * @param {module:extension/style.IconRow} iconRow icon row * @return {Image} removed icon image or null */ IconCache.prototype.removeIconForIconRow = function(iconRow) { return this.remove(iconRow.getId()); }; /** * Remove the cached image for the icon row id * @param {Number} iconRowId icon row id * @return {Image} removed icon image or null */ IconCache.prototype.remove = function(iconRowId) { var removed = this.iconCache[iconRowId]; delete this.iconCache[iconRowId]; if (!!removed) { var index = this.accessHistory.indexOf(iconRowId); if (index > -1) { this.accessHistory.splice(index, 1); } } return removed; }; /** * Clear the cache */ IconCache.prototype.clear = function() { this.iconCache = {}; this.accessHistory = []; }; /** * Resize the cache * @param {Number} maxSize max size */ IconCache.prototype.resize = function(maxSize) { this.cacheSize = maxSize; var keys = Object.keys(this.iconCache); if (keys.length > maxSize) { var numberToRemove = keys.length - maxSize; for (var i = 0; i < numberToRemove; i++) { delete this.iconCache[this.accessHistory.shift()]; } } }; /** * Create or retrieve from cache an icon image for the icon row * @param {module:extension/style.IconRow} icon icon row * @return {Promise} icon image */ IconCache.prototype.createIcon = function(icon) { return this.createAndCacheIcon(icon, this); }; /** * Create or retrieve from cache an icon image for the icon row * @param {module:extension/style.IconRow} icon icon row * @param {Number} scale scale factor * @return {Promise} icon image */ IconCache.prototype.createScaledIcon = function(icon, scale) { return this.createAndCacheScaledIcon(icon, scale, this); }; /** * Create an icon image for the icon row without caching * @param {module:extension/style.IconRow} icon icon row * @return {Promise} icon image */ IconCache.prototype.createIconNoCache = function(icon) { return this.createScaledIconNoCache(icon, 1.0); }; /** * Create an icon image for the icon row without caching * @param icon icon row * @param scale scale factor * @return {Promise} icon image */ IconCache.prototype.createScaledIconNoCache = function(icon, scale) { return this.createAndCacheScaledIcon(icon, scale, null); }; /** * Create or retrieve from cache an icon image for the icon row * @param {module:extension/style.IconRow} icon icon row * @param {module:extension/style.IconCache} iconCache icon cache * @return {Promise} icon image */ IconCache.prototype.createAndCacheIcon = function(icon, iconCache) { return this.createAndCacheScaledIcon(icon, 1.0, iconCache); }; /** * Create or retrieve from cache an icon image for the icon row * @param {module:extension/style.IconRow} icon icon row * @param {Number} scale scale factor * @param {module:extension/style.IconCache} iconCache icon cache * @return {Promise} icon image */ IconCache.prototype.createAndCacheScaledIcon = async function(icon, scale, iconCache) { var iconImage = null; if (icon != null) { var iconId = icon.getId(); if (iconCache !== null) { iconImage = iconCache.get(iconId); } var iconScaledWidth = Math.round(icon.getWidth() * scale); var iconScaledHeight = Math.round(icon.getHeight() * scale); if (!iconImage || iconImage.width !== iconScaledWidth || iconImage.height !== iconScaledHeight) { iconImage = await icon.getScaledDataImage(scale); } if (iconCache !== null) { iconCache.putIconForIconRow(icon, iconImage); } } return iconImage; }; IconCache.DEFAULT_CACHE_SIZE = 100; module.exports = IconCache; },{}],50:[function(require,module,exports){ /** * @memberOf module:extension/style * @class IconDao */ var IconRow = require('./iconRow') , MediaDao = require('../relatedTables/mediaDao'); var util = require('util'); /** * Icon DAO for reading user icon data tables * @extends {module:user/userDao~MediaDao} * @param {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection * @param {string} table table name * @constructor */ var IconDao = function(geoPackage, table) { MediaDao.call(this, geoPackage, table); this.table = table; }; util.inherits(IconDao, MediaDao); /** * Create a new icon row * @return {module:extension/style.IconRow} */ IconDao.prototype.newRow = function() { return new IconRow(this.table); }; /** * Create a icon row with the column types and values * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {module:extension/style.IconRow} icon row */ IconDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new IconRow(this.table, columnTypes, values); }; module.exports = IconDao; },{"../relatedTables/mediaDao":33,"./iconRow":51,"util":343}],51:[function(require,module,exports){ /** * @memberOf module:extension/style * @class IconRow */ var MediaRow = require('../relatedTables/mediaRow'); var util = require('util'); var ImageUtils = require('../../tiles/imageUtils'); /** * Icon Row * @extends {module:extension/relatedTables~MediaRow} * @param {module:extension/style.IconTable} iconTable icon table * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @constructor */ var IconRow = function(iconTable, columnTypes, values) { MediaRow.call(this, iconTable, columnTypes, values); this.iconTable = iconTable; }; util.inherits(IconRow, MediaRow); /** * Get the name column * @return {module:user/userColumn~UserColumn} */ IconRow.prototype.getNameColumn = function() { return this.iconTable.getNameColumn(); }; /** * Gets the name * @return {String} */ IconRow.prototype.getName = function() { return this.getValueWithColumnName(this.getNameColumn().name); }; /** * Sets the name for the row * @param {String} name name */ IconRow.prototype.setName = function(name) { this.setValueWithColumnName(this.getNameColumn().name, name); }; /** * Get the description column * @return {module:user/userColumn~UserColumn} */ IconRow.prototype.getDescriptionColumn = function() { return this.iconTable.getDescriptionColumn(); }; /** * Gets the description * @return {String} */ IconRow.prototype.getDescription = function() { return this.getValueWithColumnName(this.getDescriptionColumn().name); }; /** * Sets the description for the row * @param {string} description description */ IconRow.prototype.setDescription = function(description) { this.setValueWithColumnName(this.getDescriptionColumn().name, description); }; /** * Get the width column * @return {module:user/userColumn~UserColumn} */ IconRow.prototype.getWidthColumn = function() { return this.iconTable.getWidthColumn(); }; /** * Gets the width * @return {Number} */ IconRow.prototype.getWidth = function() { return this.getValueWithColumnName(this.getWidthColumn().name); }; /** * Sets the width for the row * @param {Number} width width */ IconRow.prototype.setWidth = function(width) { this.setValueWithColumnName(this.getWidthColumn().name, width); }; /** * Get the width or derived width from the icon data and scaled as needed * for the height * * @return {Promise} derived width */ IconRow.prototype.getDerivedWidth = function() { var width = this.getWidth(); if (width === undefined || width === null) { width = this.getDerivedDimensions()[0]; } return width; }; /** * Get the height column * @return {module:user/userColumn~UserColumn} */ IconRow.prototype.getHeightColumn = function() { return this.iconTable.getHeightColumn(); }; /** * Gets the height * @return {Number} */ IconRow.prototype.getHeight = function() { return this.getValueWithColumnName(this.getHeightColumn().name); }; /** * Sets the height for the row * @param {Number} height height */ IconRow.prototype.setHeight = function(height) { this.setValueWithColumnName(this.getHeightColumn().name, height); }; /** * Get the height or derived height from the icon data and scaled as needed * for the width * * @return {Promise} derived height */ IconRow.prototype.getDerivedHeight = function() { var height = this.getHeight(); if (height === undefined || height === null) { height = this.getDerivedDimensions()[1]; } return height; }; /** * Get the derived width and height from the values and icon data, scaled as needed * @return {Number[]} derived dimensions array with two values, width at index 0, height at index 1 */ IconRow.prototype.getDerivedDimensions = function() { var width = this.getWidth(); var height = this.getHeight(); if (width === undefined || width === null || height === undefined || height === null) { var dataWidth; var dataHeight; var imageSize = ImageUtils.getImageSize(this.getData()); dataWidth = imageSize.width; dataHeight = imageSize.height; if (width === undefined || width === null) { width = dataWidth; if (height !== undefined && height !== null) { width *= (height / dataHeight); } } if (height === undefined || height === null) { height = dataHeight; if (width !== undefined && width !== null) { height *= (width / dataWidth); } } } return [width, height]; }; /** * Get the anchor_u column * @return {module:user/userColumn~UserColumn} */ IconRow.prototype.getAnchorUColumn = function() { return this.iconTable.getAnchorUColumn(); }; /** * Gets the anchor_u * @return {Number} */ IconRow.prototype.getAnchorU = function() { return this.getValueWithColumnName(this.getAnchorUColumn().name); }; /** * Sets the anchor_u for the row * @param {Number} anchor_u anchor_u */ IconRow.prototype.setAnchorU = function(anchor_u) { this.validateAnchor(anchor_u); this.setValueWithColumnName(this.getAnchorUColumn().name, anchor_u); }; /** * Get the anchor u value or the default value of 0.5 * @return {Number} anchor u value */ IconRow.prototype.getAnchorUOrDefault = function() { var anchorU = this.getAnchorU(); if (anchorU == null) { anchorU = 0.5; } return anchorU; }; /** * Get the anchor_v column * @return {module:user/userColumn~UserColumn} */ IconRow.prototype.getAnchorVColumn = function() { return this.iconTable.getAnchorVColumn(); }; /** * Gets the anchor_v * @return {Number} */ IconRow.prototype.getAnchorV = function() { return this.getValueWithColumnName(this.getAnchorVColumn().name); }; /** * Sets the anchor_v for the row * @param {Number} anchor_v anchor_v */ IconRow.prototype.setAnchorV = function(anchor_v) { this.validateAnchor(anchor_v); this.setValueWithColumnName(this.getAnchorVColumn().name, anchor_v); }; /** * Get the anchor v value or the default value of 1.0 * @return {Number} anchor v value */ IconRow.prototype.getAnchorVOrDefault = function() { var anchorV = this.getAnchorV(); if (anchorV == null) { anchorV = 1.0; } return anchorV; }; /** * Validate the anchor value * @param {Number} anchor anchor */ IconRow.prototype.validateAnchor = function(anchor) { if (anchor != null && (anchor < 0.0 || anchor > 1.0)) { throw new Error("Anchor must be set inclusively between 0.0 and 1.0, invalid value: " + anchor); } }; module.exports = IconRow; },{"../../tiles/imageUtils":89,"../relatedTables/mediaRow":34,"util":343}],52:[function(require,module,exports){ /** * @memberOf module:extension/style * @class IconTable */ var MediaTable = require('../relatedTables/mediaTable') , UserCustomColumn = require('../../user/custom/userCustomColumn') , DataTypes = require('../../db/dataTypes'); var util = require('util'); /** * Icon Requirements Class Media Table * @class * @extends {module:extension/relatedTables~MediaTable} * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns media columns * @param {string[]} requiredColumns required column names */ var IconTable = function(tableName, columns, requiredColumns) { MediaTable.call(this, tableName, columns, requiredColumns); }; util.inherits(IconTable, MediaTable); /** * Create a media table with a minimum required columns followed by the additional columns * @return {module:extension/relatedTables~MediaTable} */ IconTable.create = function() { return new IconTable(IconTable.TABLE_NAME, IconTable.createColumns(), IconTable.requiredColumns()); }; IconTable.createRequiredColumns = function() { return MediaTable.createRequiredColumns(); }; /** * Get the required columns * @return {string[]} */ IconTable.requiredColumns = function() { return MediaTable.requiredColumns(); }; /** * Create the columns * @return {module:user/userColumn~UserColumn[]} */ IconTable.createColumns = function() { var columns = IconTable.createRequiredColumns(); var index = columns.length; columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_HEIGHT, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, IconTable.COLUMN_ANCHOR_U, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index, IconTable.COLUMN_ANCHOR_V, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); return columns; }; /** * Get the name column index * @return int */ IconTable.prototype.getNameColumnIndex = function() { return this.getColumnIndex(IconTable.COLUMN_NAME); }; /** * Get the name column * @return {module:user/userColumn~UserColumn} */ IconTable.prototype.getNameColumn = function() { return this.getColumnWithColumnName(IconTable.COLUMN_NAME); }; /** * Get the description column index * @return int */ IconTable.prototype.getDescriptionColumnIndex = function() { return this.getColumnIndex(IconTable.COLUMN_DESCRIPTION); }; /** * Get the description column * @return {module:user/userColumn~UserColumn} */ IconTable.prototype.getDescriptionColumn = function() { return this.getColumnWithColumnName(IconTable.COLUMN_DESCRIPTION); }; /** * Get the width column index * @return int */ IconTable.prototype.getWidthColumnIndex = function() { return this.getColumnIndex(IconTable.COLUMN_WIDTH); }; /** * Get the width column * @return {module:user/userColumn~UserColumn} */ IconTable.prototype.getWidthColumn = function() { return this.getColumnWithColumnName(IconTable.COLUMN_WIDTH); }; /** * Get the height column index * @return int */ IconTable.prototype.getHeightColumnIndex = function() { return this.getColumnIndex(IconTable.COLUMN_HEIGHT); }; /** * Get the height column * @return {module:user/userColumn~UserColumn} */ IconTable.prototype.getHeightColumn = function() { return this.getColumnWithColumnName(IconTable.COLUMN_HEIGHT); }; /** * Get the anchor_u column index * @return int */ IconTable.prototype.getAnchorUColumnIndex = function() { return this.getColumnIndex(IconTable.COLUMN_ANCHOR_U); }; /** * Get the anchor_u column * @return {module:user/userColumn~UserColumn} */ IconTable.prototype.getAnchorUColumn = function() { return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_U); }; /** * Get the anchor_v column index * @return int */ IconTable.prototype.getAnchorVColumnIndex = function() { return this.getColumnIndex(IconTable.COLUMN_ANCHOR_V); }; /** * Get the anchor_v column * @return {module:user/userColumn~UserColumn} */ IconTable.prototype.getAnchorVColumn = function() { return this.getColumnWithColumnName(IconTable.COLUMN_ANCHOR_V); }; IconTable.TABLE_NAME = 'nga_icon'; IconTable.COLUMN_NAME = 'name'; IconTable.COLUMN_DESCRIPTION = 'description'; IconTable.COLUMN_WIDTH = 'width'; IconTable.COLUMN_HEIGHT = 'height'; IconTable.COLUMN_ANCHOR_U = 'anchor_u'; IconTable.COLUMN_ANCHOR_V = 'anchor_v'; IconTable.prototype.TABLE_TYPE = 'media'; module.exports = IconTable; },{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../relatedTables/mediaTable":35,"util":343}],53:[function(require,module,exports){ /** * @memberOf module:extension/style * @class Icons */ /** * Icons constructor * @constructor */ var Icons = function() { this.defaultIcon = null; this.icons = {}; }; Icons.prototype.setDefault = function(iconRow) { this.defaultIcon = iconRow; }; Icons.prototype.getDefault = function() { return this.defaultIcon; }; Icons.prototype.setIcon = function(iconRow, geometryType) { if (geometryType != null) { if (iconRow != null) { this.icons[geometryType] = iconRow; } else { delete this.icons[geometryType]; } } else { this.setDefault(iconRow); } }; Icons.prototype.getIcon = function(geometryType) { var iconRow = null; if (geometryType != null) { iconRow = this.icons[geometryType]; } if (iconRow === null || geometryType === null) { iconRow = this.getDefault(); } return iconRow; }; Icons.prototype.isEmpty = function() { return Object.keys(this.icons).length === 0 && this.defaultIcon === null; }; module.exports = Icons; },{}],54:[function(require,module,exports){ /** * @module extension/style */ var BaseExtension = require('../baseExtension') , Extension = require('../.').Extension , ContentsIdDao = require('../contents/contentsIdDao') , IconTable = require('./iconTable') , IconDao = require('./iconDao') , StyleTable = require('./styleTable') , StyleDao = require('./styleDao') , StyleMappingTable = require('./styleMappingTable') , StyleMappingDao = require('./styleMappingDao') , UserMappingTable = require('../relatedTables/userMappingTable') , FeatureStyles = require('./featureStyles') , FeatureStyle = require('./featureStyle') , Styles = require('./styles') , Icons = require('./icons') , StyleTableReader = require('./styleTableReader') , UserTableReader = require('../../user/userTableReader'); var util = require('util'); /** * Style extension * @param {module:geoPackage~GeoPackage} geoPackage GeoPackage object * @extends {module:extension/baseExtension~BaseExtension} * @constructor */ var FeatureStyleExtension = function(geoPackage) { BaseExtension.call(this, geoPackage); this.relatedTablesExtension = geoPackage.getRelatedTablesExtension(); this.contentsIdExtension = geoPackage.getContentsIdExtension(); }; util.inherits(FeatureStyleExtension, BaseExtension); /** * Get or create the metadata extension * @param {module:features/user/featureTable|String} featureTable, defaults to null * @return {Promise} */ FeatureStyleExtension.prototype.getOrCreateExtension = function(featureTable) { return this.getOrCreate(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null, FeatureStyleExtension.EXTENSION_DEFINITION, Extension.READ_WRITE); }; /** * Determine if the GeoPackage has the extension or has the extension for the feature table * @param {module:features/user/featureTable|String} featureTable feature table * @returns {Boolean} */ FeatureStyleExtension.prototype.has = function (featureTable) { return this.hasExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable), null); }; /** * Gets featureTables * @returns {String[]} */ FeatureStyleExtension.prototype.getTables = function() { var tables = []; if (this.extensionsDao.isTableExists()) { var extensions = this.extensionsDao.queryAllByExtension(FeatureStyleExtension.EXTENSION_NAME); for (var i = 0; i < extensions.length; i++) { tables.push(extensions[i].table_name); } } return tables; }; /** * Get the related tables extension * @returns {module:extension/relatedTables~RelatedTablesExtension} */ FeatureStyleExtension.prototype.getRelatedTables = function () { return this.relatedTablesExtension; }; /** * Get the contentsId extension * @returns {module:extension/contents~ContentsIdExtension} */ FeatureStyleExtension.prototype.getContentsId = function () { return this.contentsIdExtension; }; /** * Create style, icon, table style, and table icon relationships for the * feature table * @param {module:features/user/featureTable|String} featureTable feature table * @return {Promise} */ FeatureStyleExtension.prototype.createRelationships = function(featureTable) { var promises = []; promises.push(this.createStyleRelationship(featureTable)); promises.push(this.createTableStyleRelationship(featureTable)); promises.push(this.createIconRelationship(featureTable)); promises.push(this.createTableIconRelationship(featureTable)); return Promise.all(promises); }; /** * Check if feature table has a style, icon, table style, or table icon * relationships * @param {module:features/user/featureTable|String} featureTable feature table * @returns {boolean} */ FeatureStyleExtension.prototype.hasRelationship = function(featureTable) { return this.hasStyleRelationship(featureTable) || this.hasTableStyleRelationship(featureTable) || this.hasIconRelationship(featureTable) || this.hasTableIconRelationship(featureTable); }; /** * Create a style relationship for the feature table * @param {module:features/user/featureTable|String} featureTable feature table * @return {Promise} */ FeatureStyleExtension.prototype.createStyleRelationship = function(featureTable) { return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME); }; /** * Determine if a style relationship exists for the feature table * @param {module:features/user/featureTable|String} featureTable feature table * @returns {boolean} */ FeatureStyleExtension.prototype.hasStyleRelationship = function(featureTable) { return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), this.getFeatureTableName(featureTable), StyleTable.TABLE_NAME); }; /** * Create a feature table style relationship * @param {module:features/user/featureTable|String} featureTable feature table * @return {Promise} */ FeatureStyleExtension.prototype.createTableStyleRelationship = function(featureTable) { return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME); }; /** * Determine if a feature table style relationship exists * @param {module:features/user/featureTable|String} featureTable feature table * @returns {boolean} true if relationship exists */ FeatureStyleExtension.prototype.hasTableStyleRelationship = function(featureTable) { return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), ContentsIdDao.TABLE_NAME, StyleTable.TABLE_NAME); }; /** * Create an icon relationship for the feature table * @param {module:features/user/featureTable|String} featureTable feature table * @return {Promise} */ FeatureStyleExtension.prototype.createIconRelationship = function(featureTable) { return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME); }; /** * Determine if an icon relationship exists for the feature table * @param {module:features/user/featureTable|String} featureTable feature table * @returns {boolean} true if relationship exists */ FeatureStyleExtension.prototype.hasIconRelationship = function(featureTable) { return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), this.getFeatureTableName(featureTable), IconTable.TABLE_NAME); }; /** * Create a feature table icon relationship * @param {module:features/user/featureTable|String} featureTable feature table * @return {Promise} */ FeatureStyleExtension.prototype.createTableIconRelationship = function(featureTable) { return this._createStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), this.getFeatureTableName(featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME); }; /** * Determine if a feature table icon relationship exists * @param {module:features/user/featureTable|String} featureTable feature table * @returns {Boolean} true if relationship exists */ FeatureStyleExtension.prototype.hasTableIconRelationship = function(featureTable) { return this._hasStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), ContentsIdDao.TABLE_NAME, IconTable.TABLE_NAME); }; /** * Get the mapping table name * @param tablePrefix table name prefix * @param {module:features/user/featureTable|String} featureTable feature table name * @returns {String} mapping table name */ FeatureStyleExtension.prototype.getMappingTableName = function(tablePrefix, featureTable) { return tablePrefix + this.getFeatureTableName(featureTable); }; /** * Check if the style extension relationship between a feature table and * style extension table exists * @param {String} mappingTableName mapping table name * @param {String} baseTable base table name * @param {String} relatedTable related table name * @returns {boolean} true if relationship exists */ FeatureStyleExtension.prototype._hasStyleRelationship = function(mappingTableName, baseTable, relatedTable) { return this.relatedTablesExtension.hasRelations(baseTable, relatedTable, mappingTableName).length !== 0; }; /** * Create a style extension relationship between a feature table and style * extension table * @param {String} mappingTableName mapping table name * @param {String} featureTable feature table * @param {String} baseTable base table name * @param {String} relatedTable related table name * @return {Promise} * @private */ FeatureStyleExtension.prototype._createStyleRelationship = function(mappingTableName, featureTable, baseTable, relatedTable) { if (!this._hasStyleRelationship(mappingTableName, baseTable, relatedTable)) { // Create the extension return this.getOrCreateExtension(featureTable).then(function () { if (baseTable === ContentsIdDao.TABLE_NAME && !this.contentsIdExtension.has()) { return this.contentsIdExtension.getOrCreateExtension().then(function () { return this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable); }.bind(this)); } else { return this._handleCreateStyleRelationship(mappingTableName, baseTable, relatedTable); } }.bind(this)); } else { return Promise.resolve(); } }; /** * Private function to aid in creation of the a style extension relationship between a feature table and style extension table * @param {String} mappingTableName * @param {String} baseTable * @param {String} relatedTable * @return {Promise} * @private */ FeatureStyleExtension.prototype._handleCreateStyleRelationship = function(mappingTableName, baseTable, relatedTable) { if (relatedTable === StyleTable.TABLE_NAME) { return this.relatedTablesExtension.addAttributesRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder() .setBaseTableName(baseTable) .setUserMappingTable(StyleMappingTable.create(mappingTableName)) .setRelatedTable(StyleTable.create())); } else { return this.relatedTablesExtension.addMediaRelationship(this.geoPackage.getRelatedTablesExtension().getRelationshipBuilder() .setBaseTableName(baseTable) .setUserMappingTable(StyleMappingTable.create(mappingTableName)) .setRelatedTable(IconTable.create())); } }; /** * Delete the style and icon table and row relationships for all feature * tables */ FeatureStyleExtension.prototype.deleteAllRelationships = function() { var tables = this.getTables(); for (var i = 0; i < tables.length; i++) { this.deleteRelationships(tables[i]); } }; /** * Delete the style and icon table and row relationships for the feature * table * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteRelationships = function(featureTable) { this.deleteStyleRelationship(featureTable); this.deleteTableStyleRelationship(featureTable); this.deleteIconRelationship(featureTable); this.deleteTableIconRelationship(featureTable); }; /** * Delete a style relationship for the feature table * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteStyleRelationship = function(featureTable) { this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable), featureTable); }; /** * Delete a table style relationship for the feature table * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableStyleRelationship = function(featureTable) { this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable), featureTable); }; /** * Delete a icon relationship for the feature table * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteIconRelationship = function(featureTable) { this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable), featureTable); }; /** * Delete a table icon relationship for the feature table * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableIconRelationship = function(featureTable) { this._deleteStyleRelationship(this.getMappingTableName(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable), featureTable); }; /** * Delete a style extension feature table relationship and the mapping table * @param {String} mappingTableName * @param {module:features/user/featureTable|String} featureTable feature table * @private */ FeatureStyleExtension.prototype._deleteStyleRelationship = function(mappingTableName, featureTable) { var relationships = this.geoPackage.getExtendedRelationDao().queryByMappingTableName(mappingTableName); for (var i = 0; i < relationships.length; i++) { this.relatedTablesExtension.removeRelationship(relationships[i]); } if (!this.hasRelationship(featureTable)) { if (this.extensionsDao.isTableExists()) { this.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME, this.getFeatureTableName(featureTable)); } } }; /** * Get a Style Mapping DAO * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.StyleMappingDao} style mapping DAO */ FeatureStyleExtension.prototype.getStyleMappingDao = function (featureTable) { return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_STYLE, featureTable); }; /** * Get a Table Style Mapping DAO * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.StyleMappingDao} table style mapping DAO */ FeatureStyleExtension.prototype.getTableStyleMappingDao = function (featureTable) { return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE, featureTable); }; /** * Get a Icon Mapping DAO * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.StyleMappingDao} icon mapping DAO */ FeatureStyleExtension.prototype.getIconMappingDao = function (featureTable) { return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_ICON, featureTable); }; /** * Get a Table Icon Mapping DAO * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.StyleMappingDao} table icon mapping DAO */ FeatureStyleExtension.prototype.getTableIconMappingDao = function (featureTable) { return this._getMappingDao(FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON, featureTable); }; /** * Get a Style Mapping DAO from a table name * @param {String} tablePrefix table name prefix * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.StyleMappingDao} style mapping dao * @private */ FeatureStyleExtension.prototype._getMappingDao = function (tablePrefix, featureTable) { var featureTableName = this.getFeatureTableName(featureTable); var tableName = tablePrefix + featureTableName; var dao = null; if (this.geoPackage.isTable(tableName)) { dao = new StyleMappingDao(this.relatedTablesExtension.getUserDao(tableName, UserMappingTable.requiredColumns()), this.geoPackage); } return dao; }; /** * Get a style DAO * @return {module:extension/style.StyleDao} style DAO */ FeatureStyleExtension.prototype.getStyleDao = function () { var styleDao = null; if (this.geoPackage.isTable(StyleTable.TABLE_NAME)) { var dao = this.geoPackage.getContentsDao(); var contents = dao.queryForId(StyleTable.TABLE_NAME); if (contents) { var reader = new StyleTableReader(contents.table_name); var table = reader.readTable(this.geoPackage.connection); this.relatedTablesExtension.setContents(table); styleDao = new StyleDao(this.geoPackage, table); } } return styleDao; }; /** * Get a icon DAO * @return {module:extension/style.IconDao} */ FeatureStyleExtension.prototype.getIconDao = function() { var iconDao = null; if (this.geoPackage.isTable(IconTable.TABLE_NAME)) { var reader = new UserTableReader(IconTable.TABLE_NAME, IconTable.requiredColumns()); var userTable = reader.readTable(this.geoPackage.getDatabase()); var table = new IconTable(userTable.table_name, userTable.columns, IconTable.requiredColumns()); table.setContents(this.geoPackage.getContentsDao().queryForId(IconTable.TABLE_NAME)); iconDao = new IconDao(this.geoPackage, table); } return iconDao; }; /** * Get the feature table default feature styles * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.FeatureStyles} table feature styles or null */ FeatureStyleExtension.prototype.getTableFeatureStyles = function(featureTable) { var featureStyles = null; var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); if (id !== null) { var styles = this.getTableStyles(featureTable); var icons = this.getTableIcons(featureTable); if (styles !== null || icons !== null) { featureStyles = new FeatureStyles(styles, icons); } } return featureStyles; }; /** * Get the default style of the feature table * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.StyleRow} style row */ FeatureStyleExtension.prototype.getTableStyleDefault = function(featureTable) { return this.getTableStyle(featureTable, null); }; /** * Get the style of the feature table and geometry type * @param {module:features/user/featureTable|String} featureTable feature table * @param {String} geometryType geometry type * @return {module:extension/style.StyleRow} style row */ FeatureStyleExtension.prototype.getTableStyle = function(featureTable, geometryType) { var style = null; var styles = this.getTableStyles(featureTable); if (styles !== null) { if (geometryType === null) { style = styles.getDefault(); } else { style = styles.getStyle(geometryType); } } return style; }; /** * Get the feature table default styles * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.Styles} table styles or null */ FeatureStyleExtension.prototype.getTableStyles = function(featureTable) { var styles = null; var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); if (id !== null) { styles = this.getStyles(id, this.getTableStyleMappingDao(featureTable)); } return styles; }; /** * Get the default icon of the feature table * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.IconRow} icon row */ FeatureStyleExtension.prototype.getTableIconDefault = function(featureTable) { return this.getTableIcon(featureTable, null); }; /** * Get the icon of the feature table and geometry type * @param {module:features/user/featureTable|String} featureTable feature table * @param {String} geometryType geometry type * @return {module:extension/style.IconRow} icon row */ FeatureStyleExtension.prototype.getTableIcon = function(featureTable, geometryType) { var icon = null; var icons = this.getTableIcons(featureTable); if (icons !== null) { if (geometryType === null) { icon = icons.getDefault(); } else { icon = icons.getIcon(geometryType); } } return icon; }; /** * Get the feature table default icons * @param {module:features/user/featureTable|String} featureTable feature table * @return {module:extension/style.Icons} table icons or null */ FeatureStyleExtension.prototype.getTableIcons = function(featureTable) { var icons = null; var id = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); if (id !== null) { icons = this.getIcons(id, this.getTableIconMappingDao(featureTable)); } return icons; }; /** * Gets Icons for featureId and mappingDao * @param {Number} featureId * @param mappingDao * @returns {module:extension/style.Icons} * @private */ FeatureStyleExtension.prototype.getIcons = function(featureId, mappingDao) { var icons = new Icons(); if (mappingDao !== null) { var iconDao = this.getIconDao(); var styleMappingRows = mappingDao.queryByBaseId(featureId); for (var i = 0; i < styleMappingRows.length; i++) { var styleMappingRow = mappingDao.createObject(styleMappingRows[i]); var iconRow = iconDao.queryForId(styleMappingRow.getRelatedId()); if (styleMappingRow.getGeometryTypeName() === null) { icons.setDefault(iconRow); } else { icons.setIcon(iconRow, styleMappingRow.getGeometryTypeName()); } } } if (icons.isEmpty()) { icons = null; } return icons; }; /** * Gets Styles for featureId and mappingDao * @param {Number} featureId * @param {module:extension/style.StyleMappingDao} mappingDao * @returns {module:extension/style.Styles} */ FeatureStyleExtension.prototype.getStyles = function(featureId, mappingDao) { var styles = new Styles(); if (mappingDao !== null) { var styleDao = this.getStyleDao(); var styleMappingRows = mappingDao.queryByBaseId(featureId); for (var i = 0; i < styleMappingRows.length; i++) { var styleMappingRow = mappingDao.createObject(styleMappingRows[i]); var styleRow = styleDao.queryForId(styleMappingRow.getRelatedId()); if (styleMappingRow.getGeometryTypeName() === null) { styles.setDefault(styleRow); } else { styles.setStyle(styleRow, styleMappingRow.getGeometryTypeName()); } } } if (styles.isEmpty()) { styles = null; } return styles; }; /** * Get the feature styles for the feature row * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.FeatureStyles} feature styles or null */ FeatureStyleExtension.prototype.getFeatureStylesForFeatureRow = function(featureRow) { return this.getFeatureStyles(featureRow.featureTable, featureRow.getId()); }; /** * Get the feature styles for the feature row * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id * @return {module:extension/style.FeatureStyles} feature styles or null */ FeatureStyleExtension.prototype.getFeatureStyles = function(featureTable, featureId) { var styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable)); var icons = this.getIcons(featureId, this.getIconMappingDao(featureTable)); var featureStyles = null; if (styles !== null || icons !== null) { featureStyles = new FeatureStyles(styles, icons); } return featureStyles; }; /** * Get the styles for the feature row * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.Styles} styles or null */ FeatureStyleExtension.prototype.getStylesForFeatureRow = function(featureRow) { return this.getStyles(featureRow.getId(), this.getStyleMappingDao(featureRow.featureTable.table_name)); }; /** * Get the styles for the feature id * @param {String} tableName table name * @param {Number} featureId feature id * @return {module:extension/style.Styles} styles or null */ FeatureStyleExtension.prototype.getStylesForFeatureId = function(tableName, featureId) { return this.getStyles(featureId, this.getStyleMappingDao(tableName)); }; /** * Get the icons for the feature row * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.Icons} icons or null */ FeatureStyleExtension.prototype.getIconsForFeatureRow = function(featureRow) { return this.getIcons(featureRow.getId(), this.getIconMappingDao(featureRow.featureTable.table_name)); }; /** * Get the icons for the feature id * @param {String} tableName table name * @param {Number} featureId feature id * @return {module:extension/style.Icons} icons or null */ FeatureStyleExtension.prototype.getIconsForFeatureId = function(tableName, featureId) { return this.getIcons(featureId, this.getIconMappingDao(tableName)); }; /** * Get the feature style (style and icon) of the feature row, searching in * order: feature geometry type style or icon, feature default style or * icon, table geometry type style or icon, table default style or icon * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.FeatureStyle} feature style */ FeatureStyleExtension.prototype.getFeatureStyleForFeatureRow = function(featureRow) { return new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), featureRow.getGeometryType(), true)); }; /** * Get the feature style (style and icon) of the feature, searching in * order: feature geometry type style or icon, feature default style or * icon, table geometry type style or icon, table default style or icon * @param {module:features/user/featureRow} featureRow feature row * @return {module:extension/style.FeatureStyle} feature style */ FeatureStyleExtension.prototype.getFeatureStyleDefault = function(featureRow) { return new FeatureStyle(this.getStyle(featureRow.featureTable.table_name, featureRow.getId(), null, true), this.getIcon(featureRow.featureTable.table_name, featureRow.getId(), null, true)); }; /** * Get the icon of the feature, searching in order: feature geometry type * icon, feature default icon, when tableIcon enabled continue searching: * table geometry type icon, table default icon * @param {module:features/user/featureTable|String} featureTable * @param {Number} featureId * @param {String} geometryType * @param {Boolean} tableIcon * @returns {module:extension/style.IconRow} * @private */ FeatureStyleExtension.prototype.getIcon = function(featureTable, featureId, geometryType, tableIcon) { var iconRow = null; var icons = this.getIcons(featureId, this.getIconMappingDao(featureTable)); if (icons !== null) { iconRow = icons.getIcon(geometryType); } if (iconRow === null && tableIcon) { iconRow = this.getTableIcon(featureTable, geometryType); } return iconRow; }; /** * Get the style of the feature, searching in order: feature geometry type * style, feature default style, when tableStyle enabled continue searching: * table geometry type style, table default style * @param {module:features/user/featureTable|String} featureTable * @param {Number} featureId * @param {String} geometryType * @param {Boolean} tableStyle * @returns {module:extension/style.StyleRow} * @private */ FeatureStyleExtension.prototype.getStyle = function(featureTable, featureId, geometryType, tableStyle) { var styleRow = null; var styles = this.getStyles(featureId, this.getStyleMappingDao(featureTable)); if (styles !== null) { styleRow = styles.getStyle(geometryType); } if (styleRow === null && tableStyle) { styleRow = this.getTableStyle(featureTable, geometryType); } return styleRow; }; /** * Set the feature table default feature styles * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {module:extension/style.FeatureStyles} featureStyles feature styles * @return {Promise} */ FeatureStyleExtension.prototype.setTableFeatureStyles = function(featureTable, featureStyles) { if (featureStyles !== null) { var promises = []; promises.push(this.setTableStyles(featureTable, featureStyles.getStyles())); promises.push(this.setTableIcons(featureTable, featureStyles.getIcons())); return Promise.all(promises); } else { this.deleteTableFeatureStyles(featureTable); return Promise.resolve(); } }; /** * Set the feature table default styles * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {module:extension/style.Styles} styles default styles * @return {Promise} */ FeatureStyleExtension.prototype.setTableStyles = function(featureTable, styles) { // var tableName = featureTable.table_name ? featureTable.table_name : featureTable; this.deleteTableStyles(featureTable); if (styles !== null) { var promises = []; if (styles.getDefault() !== null) { promises.push(this.setTableStyleDefault(featureTable, styles.getDefault())); } var keys = Object.keys(styles.styles); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = styles.styles[key]; promises.push(this.setTableStyle(featureTable, key, value)); } return Promise.all(promises); } else { return Promise.resolve(); } }; /** * Set the feature table style default * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureStyleExtension.prototype.setTableStyleDefault = function(featureTable, style) { return this.setTableStyle(featureTable, null, style); }; /** * Set the feature table style for the geometry type * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {String} geometryType geometry type * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureStyleExtension.prototype.setTableStyle = function(featureTable, geometryType, style) { this.deleteTableStyle(featureTable, geometryType); if (style !== null) { return this.createTableStyleRelationship(featureTable).then(function () { var featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable)); var styleId = this.getOrInsertStyle(style); var mappingDao = this.getTableStyleMappingDao(featureTable); this.insertStyleMapping(mappingDao, featureContentsId.id, styleId, geometryType); }.bind(this)); } else { return Promise.resolve(); } }; /** * Set the feature table default icons * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {module:extension/style.Icons} icons default icons * @return {Promise} */ FeatureStyleExtension.prototype.setTableIcons = function(featureTable, icons) { this.deleteTableIcons(featureTable); if (icons !== null) { var promises = []; if (icons.getDefault() !== null) { promises.push(this.setTableIconDefault(featureTable, icons.getDefault())); } var keys = Object.keys(icons.icons); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = icons.icons[key]; promises.push(this.setTableIcon(featureTable, key, value)); } return Promise.all(promises); } else { return Promise.resolve(); } }; /** * Set the feature table icon default * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureStyleExtension.prototype.setTableIconDefault = function(featureTable, icon) { return this.setTableIcon(featureTable, null, icon); }; /** * Set the feature table icon for the geometry type * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {String} geometryType geometry type * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureStyleExtension.prototype.setTableIcon = function(featureTable, geometryType, icon) { this.deleteTableIcon(featureTable, geometryType); if (icon !== null) { return this.createTableIconRelationship(featureTable).then(function () { var featureContentsId = this.contentsIdExtension.getOrCreateIdByTableName(this.getFeatureTableName(featureTable)); var iconId = this.getOrInsertIcon(icon); var mappingDao = this.getTableIconMappingDao(featureTable); this.insertStyleMapping(mappingDao, featureContentsId.id, iconId, geometryType); }.bind(this)); } else { return Promise.resolve(); } }; /** * Set the feature styles for the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.FeatureStyles} featureStyles feature styles * @return {Promise} */ FeatureStyleExtension.prototype.setFeatureStylesForFeatureRow = function(featureRow, featureStyles) { return this.setFeatureStyles(featureRow.featureTable.table_name, featureRow.getId(), featureStyles); }; /** * Set the feature styles for the feature table and feature id * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {module:extension/style.FeatureStyles} featureStyles feature styles * @return {Promise} */ FeatureStyleExtension.prototype.setFeatureStyles = function(featureTable, featureId, featureStyles) { if (featureStyles !== null) { var promises = []; promises.push(this.setStyles(featureTable, featureId, featureStyles.getStyles())); promises.push(this.setIcons(featureTable, featureId, featureStyles.getIcons())); return Promise.all(promises); } else { this.deleteStyles(featureTable, featureId); this.deleteIcons(featureTable, featureId); return Promise.resolve(); } }; /** * Set the feature style (style and icon) of the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureStyleExtension.prototype.setFeatureStyleForFeatureRow = function(featureRow, featureStyle) { return this.setFeatureStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), featureStyle); }; /** * Set the feature style (style and icon) of the feature row for the * specified geometry type * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureStyleExtension.prototype.setFeatureStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, featureStyle) { return this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, featureStyle); }; /** * Set the feature style default (style and icon) of the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureStyleExtension.prototype.setFeatureStyleDefaultForFeatureRow = function(featureRow, featureStyle) { return this.setFeatureStyle(featureRow.featureTable.table_name, featureRow.getId(), null, featureStyle); }; /** * Set the feature style (style and icon) of the feature * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {String} geometryType geometry type * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureStyleExtension.prototype.setFeatureStyle = async function(featureTable, featureId, geometryType, featureStyle) { if (featureStyle !== null) { var promises = []; promises.push(this.setStyle(featureTable, featureId, geometryType, featureStyle.getStyle())); promises.push(this.setIcon(featureTable, featureId, geometryType, featureStyle.getIcon())); return Promise.all(promises); } else { this.deleteStyle(featureTable, featureId, geometryType); this.deleteIcon(featureTable, featureId, geometryType); return Promise.resolve(); } }; /** * Set the feature style (style and icon) of the feature * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {module:extension/style.FeatureStyle} featureStyle feature style * @return {Promise} */ FeatureStyleExtension.prototype.setFeatureStyleDefault = function(featureTable, featureId, featureStyle) { return this.setFeatureStyle(featureTable, featureId, null, featureStyle); }; /** * Set the styles for the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.Styles} styles styles * @return {Promise} */ FeatureStyleExtension.prototype.setStylesForFeatureRow = function(featureRow, styles) { return this.setStyles(featureRow.featureTable.table_name, featureRow.getId(), styles); }; /** * Set the styles for the feature table and feature id * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {module:extension/style.Styles} styles styles * @return {Promise} */ FeatureStyleExtension.prototype.setStyles = function(featureTable, featureId, styles) { this.deleteStylesForFeatureId(featureTable, featureId); if (styles !== null) { var promises = []; if (styles.getDefault() !== null) { promises.push(this.setStyleDefault(featureTable, featureId, styles.getDefault())); } var keys = Object.keys(styles.styles); for (var i = 0; i < keys.length; i++) { promises.push(this.setStyle(featureTable, featureId, keys[i], styles.styles[keys[i]])); } return Promise.all(promises); } else { return Promise.resolve(); } }; /** * Set the style of the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureStyleExtension.prototype.setStyleForFeatureRow = function(featureRow, style) { return this.setStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), style); }; /** * Set the style of the feature row for the specified geometry type * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureStyleExtension.prototype.setStyleForFeatureRowAndGeometryType = function(featureRow, geometryType, style) { return this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), geometryType, style); }; /** * Set the default style of the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureStyleExtension.prototype.setStyleDefaultForFeatureRow = function(featureRow, style) { return this.setStyle(featureRow.featureTable.table_name, featureRow.getId(), null, style); }; /** * Set the style of the feature * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {String} geometryType geometry type * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureStyleExtension.prototype.setStyle = function(featureTable, featureId, geometryType, style) { this.deleteStyle(featureTable, featureId, geometryType); if (style !== null) { return this.createStyleRelationship(featureTable).then(function () { var styleId = this.getOrInsertStyle(style); var mappingDao = this.getStyleMappingDao(featureTable); this.insertStyleMapping(mappingDao, featureId, styleId, geometryType); }.bind(this)); } else { return Promise.resolve(); } }; /** * Set the default style of the feature * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {module:extension/style.StyleRow} style style row * @return {Promise} */ FeatureStyleExtension.prototype.setStyleDefault = function(featureTable, featureId, style) { return this.setStyle(featureTable, featureId, null, style); }; /** * Set the icons for the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.Icons} icons icons * @return {Promise} */ FeatureStyleExtension.prototype.setIconsForFeatureRow = function(featureRow, icons) { return this.setIcons(featureRow.featureTable.table_name, featureRow.getId(), icons); }; /** * Set the icons for the feature table and feature id * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {module:extension/style.Icons} icons icons * @return {Promise} */ FeatureStyleExtension.prototype.setIcons = function(featureTable, featureId, icons) { this.deleteIconsForFeatureId(featureTable, featureId); if (icons !== null) { var promises = []; if (icons.getDefault() !== null) { promises.push(this.setIconDefault(featureTable, featureId, icons.getDefault())); } var keys = Object.keys(icons.icons); for (var i = 0; i < keys.length; i++) { promises.push(this.setIcon(featureTable, featureId, keys[i], icons.icons[keys[i]])); } return Promise.all(promises); } else { return Promise.resolve(); } }; /** * Set the icon of the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureStyleExtension.prototype.setIconForFeatureRow = function(featureRow, icon) { return this.setIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType(), icon); }; /** * Set the icon of the feature row for the specified geometry type * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureStyleExtension.prototype.setIconForFeatureRowAndGeometryType = function(featureRow, geometryType, icon) { return this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), geometryType, icon); }; /** * Set the default icon of the feature row * @param {module:features/user/featureRow} featureRow feature row * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureStyleExtension.prototype.setIconDefaultForFeatureRow = function(featureRow, icon) { return this.setIcon(featureRow.featureTable.table_name, featureRow.getId(), null, icon); }; /** * Get the icon of the feature, searching in order: feature geometry type * icon, feature default icon, table geometry type icon, table default icon * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {String} geometryType geometry type * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureStyleExtension.prototype.setIcon = function(featureTable, featureId, geometryType, icon) { this.deleteIcon(featureTable, featureId, geometryType); if (icon !== null) { return this.createIconRelationship(featureTable).then(function () { var iconId = this.getOrInsertIcon(icon); var mappingDao = this.getIconMappingDao(featureTable); this.insertStyleMapping(mappingDao, featureId, iconId, geometryType); }.bind(this)); } else { return Promise.resolve(); } }; /** * Set the default icon of the feature * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {module:extension/style.IconRow} icon icon row * @return {Promise} */ FeatureStyleExtension.prototype.setIconDefault = function(featureTable, featureId, icon) { return this.setIcon(featureTable, featureId, null, icon); }; /** * Get the style id, either from the existing style or by inserting a new one * @param {module:extension/style.StyleRow} style style row * @return {Number} style id */ FeatureStyleExtension.prototype.getOrInsertStyle = function(style) { var styleId; if (style.hasId()) { styleId = style.getId(); } else { var styleDao = this.getStyleDao(); if (styleDao !== null) { styleId = styleDao.create(style); style.setId(styleId); } } return styleId; }; /** * Get the icon id, either from the existing icon or by inserting a new one * @param {module:extension/style.IconRow} icon icon row * @return {Number} icon id */ FeatureStyleExtension.prototype.getOrInsertIcon = function(icon) { var iconId; if (icon.hasId()) { iconId = icon.getId(); } else { var iconDao = this.getIconDao(); if (iconDao != null) { iconId = iconDao.create(icon); icon.setId(iconId); } } return iconId; }; /** * Insert a style mapping row * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao * @param {Number} baseId base id, either contents id or feature id * @param {Number} relatedId related id, either style or icon id * @param {String} geometryType geometry type or null */ FeatureStyleExtension.prototype.insertStyleMapping = function(mappingDao, baseId, relatedId, geometryType) { var row = mappingDao.newRow(); row.setBaseId(baseId); row.setRelatedId(relatedId); row.setGeometryTypeName(geometryType); mappingDao.create(row); }; /** * Delete all feature styles including table styles, table icons, style, and icons * @param {module:features/user/featureTable~FeatureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteAllFeatureStyles = function(featureTable) { this.deleteTableFeatureStyles(featureTable); this.deleteFeatureStyles(featureTable); }; /** * Delete all styles including table styles and feature row style * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteAllStyles = function(featureTable) { this.deleteTableStyles(featureTable); this.deleteStyles(featureTable); }; /** * Delete all icons including table icons and feature row icons * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteAllIcons = function(featureTable) { this.deleteTableIcons(featureTable); this.deleteIcons(featureTable); }; /** * Delete the feature table feature styles * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableFeatureStyles = function(featureTable) { this.deleteTableStyles(featureTable); this.deleteTableIcons(featureTable); }; /** * Delete the feature table styles * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableStyles = function(featureTable) { this.deleteTableMappings(this.getTableStyleMappingDao(featureTable), featureTable); }; /** * Delete the feature table default style * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableStyleDefault = function(featureTable) { this.deleteTableStyle(featureTable, null); }; /** * Delete the feature table style for the geometry type * @param {module:features/user/featureTable|String} featureTable feature table * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteTableStyle = function(featureTable, geometryType) { this.deleteTableMapping(this.getTableStyleMappingDao(featureTable), featureTable, geometryType); }; /** * Delete the feature table icons * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableIcons = function(featureTable) { this.deleteTableMappings(this.getTableIconMappingDao(featureTable), featureTable); }; /** * Delete the feature table default icon * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableIconDefault = function(featureTable) { this.deleteTableIcon(featureTable, null); }; /** * Delete the feature table icon for the geometry type * @param {module:features/user/featureTable|String} featureTable feature table * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteTableIcon = function(featureTable, geometryType) { this.deleteTableMapping(this.getTableIconMappingDao(featureTable), featureTable, geometryType); }; /** * Delete the table style mappings * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteTableMappings = function(mappingDao, featureTable) { if (mappingDao !== null) { var featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); if (featureContentsId !== null) { mappingDao.deleteByBaseId(featureContentsId); } } }; /** * Delete the table style mapping with the geometry type value * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao * @param {module:features/user/featureTable|String} featureTable feature table * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteTableMapping = function(mappingDao, featureTable, geometryType) { if (mappingDao !== null) { var featureContentsId = this.contentsIdExtension.getIdByTableName(this.getFeatureTableName(featureTable)); if (featureContentsId !== null) { mappingDao.deleteByBaseIdAndGeometryType(featureContentsId, geometryType); } } }; /** * Delete all feature styles * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteFeatureStyles = function(featureTable) { this.deleteStyles(featureTable); this.deleteIcons(featureTable); }; /** * Delete all styles * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteStyles = function(featureTable) { this.deleteMappings(this.getStyleMappingDao(featureTable)); }; /** * Delete feature row styles * @param {module:features/user/featureRow} featureRow feature row */ FeatureStyleExtension.prototype.deleteStylesForFeatureRow = function(featureRow) { this.deleteStylesForFeatureId(featureRow.featureTable.table_name, featureRow.getId()); }; /** * Delete feature row styles * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id */ FeatureStyleExtension.prototype.deleteStylesForFeatureId = function(featureTable, featureId) { this.deleteMappingsForFeatureId(this.getStyleMappingDao(featureTable), featureId); }; /** * Delete the feature row default style * @param {module:features/user/featureRow} featureRow feature row */ FeatureStyleExtension.prototype.deleteStyleDefaultForFeatureRow = function(featureRow) { this.deleteStyleForFeatureRowAndGeometryType(featureRow, null); }; /** * Delete the feature row default style * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id */ FeatureStyleExtension.prototype.deleteStyleDefault = function(featureTable, featureId) { this.deleteStyle(featureTable, featureId, null); }; /** * Delete the feature row style for the feature row geometry type * @param {module:features/user/featureRow} featureRow feature row */ FeatureStyleExtension.prototype.deleteStyleForFeatureRow = function(featureRow) { this.deleteStyleForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); }; /** * Delete the feature row style for the geometry type * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteStyleForFeatureRowAndGeometryType = function(featureRow, geometryType) { this.deleteStyle(featureRow.featureTable, featureRow.getId(), geometryType); }; /** * Delete the feature row style for the geometry type * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteStyle = function(featureTable, featureId, geometryType) { this.deleteMapping(this.getStyleMappingDao(featureTable), featureId, geometryType); }; /** * Delete all icons * @param {module:features/user/featureTable|String} featureTable feature table */ FeatureStyleExtension.prototype.deleteIcons = function(featureTable) { this.deleteMappings(this.getIconMappingDao(featureTable)); }; /** * Delete feature row icons * @param {module:features/user/featureRow} featureRow feature row */ FeatureStyleExtension.prototype.deleteIconsForFeatureRow = function(featureRow) { this.deleteIconsForFeatureId(featureRow.featureTable.table_name, featureRow.getId()); }; /** * Delete feature row icons * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id */ FeatureStyleExtension.prototype.deleteIconsForFeatureId = function(featureTable, featureId) { this.deleteMappingsForFeatureId(this.getIconMappingDao(featureTable), featureId); }; /** * Delete the feature row default icon * @param {module:features/user/featureRow} featureRow feature row */ FeatureStyleExtension.prototype.deleteIconDefaultForFeatureRow = function(featureRow) { this.deleteIconDefault(featureRow.featureTable.table_name, featureRow.getId()); }; /** * Delete the feature row default icon * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id */ FeatureStyleExtension.prototype.deleteIconDefault = function(featureTable, featureId) { this.deleteIcon(featureTable, featureId, null); }; /** * Delete the feature row icon for the feature row geometry type * @param {module:features/user/featureRow} featureRow feature row */ FeatureStyleExtension.prototype.deleteIconForFeatureRow = function(featureRow) { this.deleteIconForFeatureRowAndGeometryType(featureRow, featureRow.getGeometryType()); }; /** * Delete the feature row icon for the geometry type * @param {module:features/user/featureRow} featureRow feature row * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteIconForFeatureRowAndGeometryType = function(featureRow, geometryType) { this.deleteIcon(featureRow.featureTable, featureRow.getId(), geometryType); }; /** * Delete the feature row icon for the geometry type * @param {module:features/user/featureTable|String} featureTable feature table * @param {Number} featureId feature id * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteIcon = function(featureTable, featureId, geometryType) { this.deleteMapping(this.getIconMappingDao(featureTable), featureId, geometryType); }; /** * Delete all style mappings * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao */ FeatureStyleExtension.prototype.deleteMappings = function(mappingDao) { if (mappingDao !== null) { mappingDao.deleteAll(); } }; /** * Delete the style mappings * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao * @param {Number} featureId feature id */ FeatureStyleExtension.prototype.deleteMappingsForFeatureId = function(mappingDao, featureId) { if (mappingDao !== null) { mappingDao.deleteByBaseId(featureId); } }; /** * Delete the style mapping with the geometry type value * @param {module:extension/style.StyleMappingDao} mappingDao mapping dao * @param {Number} featureId feature id * @param {String} geometryType geometry type */ FeatureStyleExtension.prototype.deleteMapping = function(mappingDao, featureId, geometryType) { if (mappingDao !== null) { mappingDao.deleteByBaseIdAndGeometryType(featureId, geometryType); } }; /** * Get all the unique style row ids the table maps to * @param {module:features/user/featureTable|String} featureTable feature table * @return style row ids */ FeatureStyleExtension.prototype.getAllTableStyleIds = function(featureTable) { var styleIds = null; var mappingDao = this.getTableStyleMappingDao(featureTable); if (mappingDao !== null) { styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); } return styleIds; }; /** * Get all the unique icon row ids the table maps to * @param {module:features/user/featureTable|String} featureTable feature table * @return icon row ids */ FeatureStyleExtension.prototype.getAllTableIconIds = function(featureTable) { var styleIds = null; var mappingDao = this.getTableIconMappingDao(featureTable); if (mappingDao !== null) { styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); } return styleIds; }; /** * Get all the unique style row ids the features map to * @param {module:features/user/featureTable|String} featureTable feature table * @return {Number[]} style row ids */ FeatureStyleExtension.prototype.getAllStyleIds = function(featureTable) { var styleIds = null; var mappingDao = this.getStyleMappingDao(featureTable); if (mappingDao !== null) { styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); } return styleIds; }; /** * Get all the unique icon row ids the features map to * @param {module:features/user/featureTable|String} featureTable feature table * @return {Number[]} icon row ids */ FeatureStyleExtension.prototype.getAllIconIds = function(featureTable) { var styleIds = null; var mappingDao = this.getIconMappingDao(featureTable); if (mappingDao !== null) { styleIds = mappingDao.uniqueRelatedIds().map(row => row['related_id']); } return styleIds; }; /** * Get name of feature table * @param featureTable * @returns {String} */ FeatureStyleExtension.prototype.getFeatureTableName = function(featureTable) { return featureTable.table_name ? featureTable.table_name : featureTable; }; /** * Remove all traces of the extension */ FeatureStyleExtension.prototype.removeExtension = function() { this.deleteAllRelationships(); this.geoPackage.deleteTable(StyleTable.TABLE_NAME); this.geoPackage.deleteTable(IconTable.TABLE_NAME); if (this.extensionsDao.isTableExists()) { this.extensionsDao.deleteByExtension(FeatureStyleExtension.EXTENSION_NAME); } }; FeatureStyleExtension.EXTENSION_NAME = 'nga_feature_style'; FeatureStyleExtension.EXTENSION_AUTHOR = 'nga'; FeatureStyleExtension.EXTENSION_NAME_NO_AUTHOR = 'feature_style'; FeatureStyleExtension.EXTENSION_DEFINITION = 'http://ngageoint.github.io/GeoPackage/docs/extensions/feature-style.html'; FeatureStyleExtension.TABLE_MAPPING_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + "_style_"; FeatureStyleExtension.TABLE_MAPPING_TABLE_STYLE = FeatureStyleExtension.EXTENSION_AUTHOR + "_style_default_"; FeatureStyleExtension.TABLE_MAPPING_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + "_icon_"; FeatureStyleExtension.TABLE_MAPPING_TABLE_ICON = FeatureStyleExtension.EXTENSION_AUTHOR + "_icon_default_"; module.exports = FeatureStyleExtension; },{"../.":25,"../../user/userTableReader":109,"../baseExtension":20,"../contents/contentsIdDao":22,"../relatedTables/userMappingTable":42,"./featureStyle":46,"./featureStyles":47,"./iconDao":50,"./iconTable":52,"./icons":53,"./styleDao":55,"./styleMappingDao":56,"./styleMappingTable":58,"./styleTable":60,"./styleTableReader":61,"./styles":62,"util":343}],55:[function(require,module,exports){ /** * @memberOf module:extension/style * @class StyleDao */ var StyleRow = require('./styleRow') , StyleTable = require('./styleTable') , AttributesDao = require('../../attributes/attributeDao'); var util = require('util'); /** * Style DAO for reading style tables * @extends {module:attributes/attributeDao~AttributesDao} * @param {module:db/geoPackageConnection~GeoPackageConnection} geoPackage connection * @param {string} table table name * @constructor */ var StyleDao = function(geoPackage, table) { AttributesDao.call(this, geoPackage, table); this.table = table; }; util.inherits(StyleDao, AttributesDao); /** * Creates a StyleRow object from the results * @param results * @returns {module:extension/style.StyleRow} */ StyleDao.prototype.createObject = function (results) { if (results) { return this.getRow(results); } return this.newRow(); }; /** * Create a new style row * @return {module:extension/style.StyleRow} */ StyleDao.prototype.newRow = function() { return new StyleRow(this.table); }; /** * Create a style row with the column types and values * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {module:extension/style.StyleRow} icon row */ StyleDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new StyleRow(this.table, columnTypes, values); }; module.exports = StyleDao; },{"../../attributes/attributeDao":3,"./styleRow":59,"./styleTable":60,"util":343}],56:[function(require,module,exports){ /** * @memberOf module:extension/style * @class StyleMappingDao */ var StyleMappingRow = require('./styleMappingRow') , StyleMappingTable = require('./styleMappingTable') , UserMappingTable = require('../relatedTables/userMappingTable') , UserMappingDao = require('../relatedTables/userMappingDao'); var util = require('util'); /** * Style Mapping DAO for reading user mapping data tables * @extends {module:extension/relatedTables~UserMappingDao} * @param {module:user/custom~UserCustomDao} userCustomDao * @param {module:geoPackage~GeoPackage} geoPackage geopackage object * @constructor */ var StyleMappingDao = function(userCustomDao, geoPackage) { UserMappingDao.call(this, userCustomDao, geoPackage); }; util.inherits(StyleMappingDao, UserMappingDao); /** * Create a new {module:user/custom~UserCustomTable} * @param {module:user/custom~UserCustomDao} userCustomDao * @return {module:user/custom~UserCustomTable} userCustomTable user custom table */ StyleMappingDao.prototype.createMappingTable = function(userCustomDao) { return new StyleMappingTable(userCustomDao.table.table_name, userCustomDao.table.columns); }; /** * Create a new {module:extension/style.StyleMappingRow} * @return {module:extension/style.StyleMappingRow} */ StyleMappingDao.prototype.newRow = function() { return new StyleMappingRow(this.table); }; /** * Create a user mapping row * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {module:extension/style.StyleMappingRow} style mapping row */ StyleMappingDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new StyleMappingRow(this.table, columnTypes, values); }; /** * Delete by base id and geometry type * @param {Number} baseId base id * @param {String} geometryType geometry type * @return {Number} number of deleted rows */ StyleMappingDao.prototype.deleteByBaseIdAndGeometryType = function(baseId, geometryType) { var where = ''; where += this.buildWhereWithFieldAndValue(UserMappingTable.COLUMN_BASE_ID, baseId); where += ' AND '; where += this.buildWhereWithFieldAndValue(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, geometryType); var whereArgs = this.buildWhereArgs([baseId, geometryType]); return this.deleteWhere(where, whereArgs); }; module.exports = StyleMappingDao; },{"../relatedTables/userMappingDao":40,"../relatedTables/userMappingTable":42,"./styleMappingRow":57,"./styleMappingTable":58,"util":343}],57:[function(require,module,exports){ /** * @memberOf module:extension/style * @class StyleMappingRow */ var UserMappingRow = require('../relatedTables/userMappingRow'); var util = require('util'); /** * User Mapping Row containing the values from a single result set row * @extends {module:extension/relatedTables~UserMappingRow} * @param {module:extension/style.StyleMappingTable} styleMappingTable style mapping table * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @constructor */ var StyleMappingRow = function(styleMappingTable, columnTypes, values) { UserMappingRow.call(this, styleMappingTable, columnTypes, values); this.styleMappingTable = styleMappingTable; }; util.inherits(StyleMappingRow, UserMappingRow); /** * Get the geometry type name column * @return {module:user/userColumn~UserColumn} */ StyleMappingRow.prototype.getGeometryTypeNameColumn = function() { return this.styleMappingTable.getGeometryTypeNameColumn(); }; /** * Gets the geometry type name * @return {string} */ StyleMappingRow.prototype.getGeometryTypeName = function() { return this.getValueWithColumnName(this.getGeometryTypeNameColumn().name); }; /** * Sets the geometry type name * @param {string} geometryTypeName geometry type name */ StyleMappingRow.prototype.setGeometryTypeName = function(geometryTypeName) { this.setValueWithColumnName(this.getGeometryTypeNameColumn().name, geometryTypeName); }; module.exports = StyleMappingRow; },{"../relatedTables/userMappingRow":41,"util":343}],58:[function(require,module,exports){ /** * @memberOf module:extension/style * @class StyleMappingTable */ var UserMappingTable = require('../relatedTables/userMappingTable') , UserCustomColumn = require('../../user/custom/userCustomColumn') , DataTypes = require('../../db/dataTypes'); var util = require('util'); /** * Contains style mapping table factory and utility methods * @extends {module:extension/relatedTables~UserMappingTable} * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns style mapping columns * @constructor */ var StyleMappingTable = function(tableName, columns) { UserMappingTable.call(this, tableName, columns); }; util.inherits(StyleMappingTable, UserMappingTable); /** * Creates a user mapping table with the minimum required columns followed by the additional columns * @param {string} tableName name of the table * @return {module:extension/relatedTables~UserMappingTable} */ StyleMappingTable.create = function(tableName) { return new StyleMappingTable(tableName, StyleMappingTable.createColumns()); }; /** * Create the columns * @return {module:user/userColumn~UserColumn[]} */ StyleMappingTable.createColumns = function() { var columns = UserMappingTable.createRequiredColumns(); var index = columns.length; columns.push(UserCustomColumn.createColumn(index, StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)) return columns; }; /** * Get the geometry type name column index * @return int */ StyleMappingTable.prototype.getGeometryTypeNameColumnIndex = function() { return this.getColumnIndex(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME); }; /** * Get the geometry type name column * @return {module:user/userColumn~UserColumn} */ StyleMappingTable.prototype.getGeometryTypeNameColumn = function() { return this.getColumnWithColumnName(StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME); }; StyleMappingTable.COLUMN_GEOMETRY_TYPE_NAME = 'geometry_type_name'; module.exports = StyleMappingTable; },{"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../relatedTables/userMappingTable":42,"util":343}],59:[function(require,module,exports){ /** * @memberOf module:extension/style * @class StyleRow */ var AttributesRow = require('../../attributes/attributeRow'); var util = require('util'); /** * Color hex pattern */ var colorPattern = /^#([0-9a-fA-F]{3}){1,2}$/; /** * Style Row * @extends {module:attributes/attributeRow~AttributesRow} * @param {module:extension/style.StyleTable} styleTable style table * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @constructor */ var StyleRow = function(styleTable, columnTypes, values) { AttributesRow.call(this, styleTable, columnTypes, values); this.styleTable = styleTable; }; util.inherits(StyleRow, AttributesRow); /** * Get the name column * @return {module:user/userColumn~UserColumn} */ StyleRow.prototype.getNameColumn = function() { return this.styleTable.getNameColumn(); }; /** * Gets the name * @return {String} */ StyleRow.prototype.getName = function() { return this.getValueWithColumnName(this.getNameColumn().name); }; /** * Sets the name for the row * @param {String} name name */ StyleRow.prototype.setName = function(name) { this.setValueWithColumnName(this.getNameColumn().name, name); }; /** * Get the description column * @return {module:user/userColumn~UserColumn} */ StyleRow.prototype.getDescriptionColumn = function() { return this.styleTable.getDescriptionColumn(); }; /** * Gets the description * @return {String} */ StyleRow.prototype.getDescription = function() { return this.getValueWithColumnName(this.getDescriptionColumn().name); }; /** * Sets the description for the row * @param {String} description description */ StyleRow.prototype.setDescription = function(description) { this.setValueWithColumnName(this.getDescriptionColumn().name, description); }; /** * Get the color column * @return {module:user/userColumn~UserColumn} */ StyleRow.prototype.getColorColumn = function() { return this.styleTable.getColorColumn(); }; /** * Get the style color * @return {String} color */ StyleRow.prototype.getColor = function() { return this.createColor(this.getHexColor(), this.getOpacity()); }; /** * Check if the style has a color * @return true if has a color */ StyleRow.prototype.hasColor = function() { return this._hasColor(this.getHexColor(), this.getOpacity()); }; /** * Get the color * @return {String} color */ StyleRow.prototype.getHexColor = function() { return this.getValueWithColumnName(this.getColorColumn().name); }; /** * Set the color * @param {String} color color * @param {Number} opacity opacity */ StyleRow.prototype.setColor = function(color, opacity) { this.setHexColor(color); this.setOpacity(opacity); }; /** * Sets the color for the row * @param {String} color color */ StyleRow.prototype.setHexColor = function(color) { var validatedColor = this.validateColor(color); this.setValueWithColumnName(this.getColorColumn().name, validatedColor); }; /** * Get the opacity column * @return {module:user/userColumn~UserColumn} */ StyleRow.prototype.getOpacityColumn = function() { return this.styleTable.getOpacityColumn(); }; /** * Gets the opacity * @return {Number} */ StyleRow.prototype.getOpacity = function() { return this.getValueWithColumnName(this.getOpacityColumn().name); }; /** * Get the opacity or default value * @return {Number} opacity */ StyleRow.prototype.getOpacityOrDefault = function() { var opacity = this.getOpacity(); if (opacity === null) { opacity = 1.0; } return opacity; }; /** * Sets the opacity for the row * @param {Number} opacity opacity */ StyleRow.prototype.setOpacity = function(opacity) { this.validateOpacity(opacity); this.setValueWithColumnName(this.getOpacityColumn().name, opacity); }; /** * Get the width column * @return {module:user/userColumn~UserColumn} */ StyleRow.prototype.getWidthColumn = function() { return this.styleTable.getWidthColumn(); }; /** * Gets the width * @return {int} */ StyleRow.prototype.getWidth = function() { return this.getValueWithColumnName(this.getWidthColumn().name); }; /** * Sets the width for the row * @param {Number} width width */ StyleRow.prototype.setWidth = function(width) { if (width !== null && width < 0.0) { throw new Error("Width must be greater than or equal to 0.0, invalid value: " + width); } this.setValueWithColumnName(this.getWidthColumn().name, width); }; /** * Get the width value or default width * @return width */ StyleRow.prototype.getWidthOrDefault = function() { var width = this.getWidth(); if (width === null) { width = 1.0; } return width; }; /** * Get the fill color column * @return {module:user/userColumn~UserColumn} */ StyleRow.prototype.getFillColorColumn = function() { return this.styleTable.getFillColorColumn(); }; /** * Get the style fill color * @return {String} color */ StyleRow.prototype.getFillColor = function() { return this.createColor(this.getFillHexColor(), this.getFillOpacity()); }; /** * Check if the style has a fill color * @return true if has a color */ StyleRow.prototype.hasFillColor = function() { return this._hasColor(this.getFillHexColor(), this.getFillOpacity()); }; /** * Get the fill color * @return {String} color */ StyleRow.prototype.getFillHexColor = function() { return this.getValueWithColumnName(this.getFillColorColumn().name); }; /** * Set the fill color * @param {String} color color * @param {Number} opacity opacity */ StyleRow.prototype.setFillColor = function(color, opacity) { this.setFillHexColor(color); this.setFillOpacity(opacity); }; /** * Sets the fill color for the row * @param {String} color color */ StyleRow.prototype.setFillHexColor = function(color) { var validatedColor = this.validateColor(color); this.setValueWithColumnName(this.getFillColorColumn().name, validatedColor); }; /** * Get the fill opacity column * @return {module:user/userColumn~UserColumn} */ StyleRow.prototype.getFillOpacityColumn = function() { return this.styleTable.getFillOpacityColumn(); }; /** * Gets the fill opacity * @return {Number} */ StyleRow.prototype.getFillOpacity = function() { return this.getValueWithColumnName(this.getFillOpacityColumn().name); }; /** * Sets the fill opacity for the row * @param {Number} fillOpacity fillOpacity */ StyleRow.prototype.setFillOpacity = function(fillOpacity) { this.validateOpacity(fillOpacity); this.setValueWithColumnName(this.getFillOpacityColumn().name, fillOpacity); }; /** * Get the fill opacity or default value * @return {Number} fill opacity */ StyleRow.prototype.getFillOpacityOrDefault = function() { var fillOpacity = this.getFillOpacity(); if (fillOpacity == null) { fillOpacity = 1.0; } return fillOpacity; }; /** * Validate and adjust the color value * @param {String} color color */ StyleRow.prototype.validateColor = function(color) { var validated = color; if (color != null) { if (!color.startsWith("#")) { validated = "#" + color; } if (!colorPattern.test(validated)) { throw new Error("Color must be in hex format #RRGGBB or #RGB, invalid value: " + color); } validated = validated.toUpperCase(); } return validated; }; /** * Validate the opacity value * @param {Number} opacity opacity */ StyleRow.prototype.validateOpacity = function(opacity) { if (opacity != null && (opacity < 0.0 || opacity > 1.0)) { throw new Error("Opacity must be set inclusively between 0.0 and 1.0, invalid value: " + opacity); } }; /** * Create a color from the hex color and opacity * @param {String} hexColor hex color * @param {Number} opacity opacity * @return {String} rgba color */ StyleRow.prototype.createColor = function(hexColor, opacity) { var color = '#000000'; if (hexColor !== null) { color = hexColor; } if (opacity !== null) { var a = Math.round(opacity * 255).toString(16); if (a.length === 1) { a = "0" + a; } color += a; } return color.toUpperCase(); }; /** * Determine if a color exists from the hex color and opacity * @param {String} hexColor hex color * @param {Number} opacity opacity * @return true if has a color */ StyleRow.prototype._hasColor = function(hexColor, opacity) { return hexColor !== null || opacity !== null; }; module.exports = StyleRow; },{"../../attributes/attributeRow":4,"util":343}],60:[function(require,module,exports){ /** * @memberOf module:extension/style * @class StyleTable */ var AttributesTable = require('../../attributes/attributeTable') , UserColumn = require('../../user/userColumn') , UserCustomColumn = require('../../user/custom/userCustomColumn') , RelationType = require('../relatedTables/relationType') , DataTypes = require('../../db/dataTypes'); var util = require('util'); /** * Icon Requirements Class Media Table * @extends {module:attributes/attributeTable~AttributeTable} * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns media columns * @constructor */ var StyleTable = function(tableName, columns) { this.data_type = RelationType.ATTRIBUTES.dataType; this.relation_name = RelationType.ATTRIBUTES.name; AttributesTable.call(this, tableName, columns); }; util.inherits(StyleTable, AttributesTable); /** * Create a media table with a minimum required columns followed by the additional columns * @return {module:extension/style.StyleTable} */ StyleTable.create = function() { return new StyleTable(StyleTable.TABLE_NAME, StyleTable.createColumns()); }; /** * Create the columns * @return {module:user/custom~UserCustomColumn[]} */ StyleTable.createColumns = function() { var columns = []; var index = 0; columns.push(UserColumn.createPrimaryKeyColumnWithIndexAndName(index++, StyleTable.COLUMN_ID)); columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_NAME, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_DESCRIPTION, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_OPACITY, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_WIDTH, DataTypes.GPKGDataType.GPKG_DT_REAL, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index++, StyleTable.COLUMN_FILL_COLOR, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); columns.push(UserCustomColumn.createColumn(index, StyleTable.COLUMN_FILL_OPACITY, DataTypes.GPKGDataType.GPKG_DT_TEXT, undefined, false, undefined)); return columns; }; /** * Get the name column index * @return int */ StyleTable.prototype.getNameColumnIndex = function() { return this.getColumnIndex(StyleTable.COLUMN_NAME); }; /** * Get the name column * @return {module:user/userColumn~UserColumn} */ StyleTable.prototype.getNameColumn = function() { return this.getColumnWithColumnName(StyleTable.COLUMN_NAME); }; /** * Get the description column index * @return int */ StyleTable.prototype.getDescriptionColumnIndex = function() { return this.getColumnIndex(StyleTable.COLUMN_DESCRIPTION); }; /** * Get the description column * @return {module:user/userColumn~UserColumn} */ StyleTable.prototype.getDescriptionColumn = function() { return this.getColumnWithColumnName(StyleTable.COLUMN_DESCRIPTION); }; /** * Get the color column index * @return int */ StyleTable.prototype.getColorColumnIndex = function() { return this.getColumnIndex(StyleTable.COLUMN_COLOR); }; /** * Get the color column * @return {module:user/userColumn~UserColumn} */ StyleTable.prototype.getColorColumn = function() { return this.getColumnWithColumnName(StyleTable.COLUMN_COLOR); }; /** * Get the opacity column index * @return int */ StyleTable.prototype.getOpacityColumnIndex = function() { return this.getColumnIndex(StyleTable.COLUMN_OPACITY); }; /** * Get the opacity column * @return {module:user/userColumn~UserColumn} */ StyleTable.prototype.getOpacityColumn = function() { return this.getColumnWithColumnName(StyleTable.COLUMN_OPACITY); }; /** * Get the width column index * @return int */ StyleTable.prototype.getWidthColumnIndex = function() { return this.getColumnIndex(StyleTable.COLUMN_WIDTH); }; /** * Get the width column * @return {module:user/userColumn~UserColumn} */ StyleTable.prototype.getWidthColumn = function() { return this.getColumnWithColumnName(StyleTable.COLUMN_WIDTH); }; /** * Get the fill_color column index * @return int */ StyleTable.prototype.getFillColorColumnIndex = function() { return this.getColumnIndex(StyleTable.COLUMN_FILL_COLOR); }; /** * Get the fill_color column * @return {module:user/userColumn~UserColumn} */ StyleTable.prototype.getFillColorColumn = function() { return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_COLOR); }; /** * Get the fill_opacity column index * @return int */ StyleTable.prototype.getFillOpacityColumnIndex = function() { return this.getColumnIndex(StyleTable.COLUMN_FILL_OPACITY); }; /** * Get the fill_opacity column * @return {module:user/userColumn~UserColumn} */ StyleTable.prototype.getFillOpacityColumn = function() { return this.getColumnWithColumnName(StyleTable.COLUMN_FILL_OPACITY); }; StyleTable.TABLE_NAME = 'nga_style'; StyleTable.COLUMN_ID = 'id'; StyleTable.COLUMN_NAME = 'name'; StyleTable.COLUMN_DESCRIPTION = 'description'; StyleTable.COLUMN_COLOR = 'color'; StyleTable.COLUMN_OPACITY = 'opacity'; StyleTable.COLUMN_WIDTH = 'width'; StyleTable.COLUMN_FILL_COLOR = 'fill_color'; StyleTable.COLUMN_FILL_OPACITY = 'fill_opacity'; StyleTable.prototype.TABLE_TYPE = 'media'; module.exports = StyleTable; },{"../../attributes/attributeTable":5,"../../db/dataTypes":14,"../../user/custom/userCustomColumn":101,"../../user/userColumn":105,"../relatedTables/relationType":36,"util":343}],61:[function(require,module,exports){ /** * @memberOf module:extension/style * @class StyleTableReader */ var AttributeTableReader = require('../../attributes/attributeTableReader') , StyleTable = require('./styleTable'); var util = require('util'); /** * Reads the metadata from an existing attribute table * @extends {module:attributes/attributeTableReader} * @constructor */ var StyleTableReader = function(tableName) { AttributeTableReader.call(this, tableName); }; util.inherits(StyleTableReader, AttributeTableReader); /** * * @param {String} tableName * @param columns * @returns {module:extension/style.StyleTable} */ StyleTableReader.prototype.createTable = function (tableName, columns) { return new StyleTable(tableName, columns); }; module.exports = StyleTableReader; },{"../../attributes/attributeTableReader":6,"./styleTable":60,"util":343}],62:[function(require,module,exports){ /** * @memberOf module:extension/style * @class Styles */ /** * Styles constructor * @constructor */ var Styles = function() { this.defaultStyle = null; this.styles = {}; }; Styles.prototype.setDefault = function(styleRow) { this.defaultStyle = styleRow; }; Styles.prototype.getDefault = function() { return this.defaultStyle; }; Styles.prototype.setStyle = function(styleRow, geometryType) { if (geometryType != null) { if (styleRow != null) { this.styles[geometryType] = styleRow; } else { delete this.styles[geometryType]; } } else { this.setDefault(styleRow); } }; Styles.prototype.getStyle = function(geometryType) { var styleRow = null; if (geometryType != null) { styleRow = this.styles[geometryType]; } if (styleRow === null || geometryType === null) { styleRow = this.getDefault(); } return styleRow; }; Styles.prototype.isEmpty = function() { return Object.keys(this.styles).length === 0 && this.defaultStyle === null; }; module.exports = Styles; },{}],63:[function(require,module,exports){ /** * WebPExtension module. * @module WebPExtension * @see module:extension/BaseExtension */ var BaseExtension = require('../baseExtension') , Extension = require('../.').Extension; var util = require('util'); var WebPExtension = function(geoPackage, tableName) { BaseExtension.call(this, geoPackage); this.tableName = tableName; } util.inherits(WebPExtension, BaseExtension); WebPExtension.prototype.getOrCreateExtension = function() { return this.getOrCreate(WebPExtension.EXTENSION_NAME, this.tableName, 'tile_data', WebPExtension.EXTENSION_WEBP_DEFINITION, Extension.READ_WRITE); }; WebPExtension.EXTENSION_NAME = 'gpkg_webp'; WebPExtension.EXTENSION_WEBP_AUTHOR = 'gpkg'; WebPExtension.EXTENSION_WEBP_NAME_NO_AUTHOR = 'webp'; WebPExtension.EXTENSION_WEBP_DEFINITION = 'http://www.geopackage.org/spec/#extension_webp'; module.exports.WebPExtension = WebPExtension; },{"../.":25,"../baseExtension":20,"util":343}],64:[function(require,module,exports){ /** * GeometryColumns module. * @module features/columns */ var Dao = require('../../dao/dao') , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao , ContentsDao = require('../../core/contents').ContentsDao , Contents = require('../../core/contents').Contents; var util = require('util'); /** * Spatial Reference System object. The coordinate reference system definitions it contains are referenced by the GeoPackage Contents and GeometryColumns objects to relate the vector and tile data in user tables to locations on the earth. * @class GeometryColumns */ var GeometryColumns = function() { /** * Name of the table containing the geometry column * @member {string} */ this.table_name; /** * Name of a column in the feature table that is a Geometry Column * @member {string} */ this.column_name; /** * Name from Geometry Type Codes (Core) or Geometry Type Codes (Extension) * in Geometry Types (Normative) * @member {string} */ this.geometry_type_name; /** * Spatial Reference System ID: gpkg_spatial_ref_sys.srs_id * @member {module:dao/spatialReferenceSystem~SpatialReferenceSystem} */ this.srs; /** * Unique identifier for each Spatial Reference System within a GeoPackage * @member {Number} */ this.srs_id; /** * 0: z values prohibited; 1: z values mandatory; 2: z values optional * @member {byte} */ this.z; /** * 0: m values prohibited; 1: m values mandatory; 2: m values optional * @member {byte} */ this.m; }; GeometryColumns.prototype.getGeometryType = function() { return this.geometry_type_name; }; // /** // * Contents // */ // @ForeignCollectionField(eager = false) // private ForeignCollection contents; // // /** // * Geometry Columns // */ // @ForeignCollectionField(eager = false) // private ForeignCollection geometryColumns; // // /** // * Matrix Tile Set // */ // @ForeignCollectionField(eager = false) // private ForeignCollection tileMatrixSet; /** * Geometry Columns Data Access Object * @class GeometryColumnsDao * @extends {module:dao/dao~Dao} */ var GeometryColumnsDao = function(geoPackage) { Dao.call(this, geoPackage); } util.inherits(GeometryColumnsDao, Dao); GeometryColumnsDao.prototype.createObject = function () { return new GeometryColumns(); }; /** * Query for the table name * * @param {string} tableName table name * @param {callback} callback called with an error if one occurred and the {module:dao/geometryColumns~GeometryColumns} */ GeometryColumnsDao.prototype.queryForTableName = function (tableName) { var results = this.queryForAllEq(GeometryColumnsDao.COLUMN_TABLE_NAME, tableName); if (results && results.length) { var gc = this.createObject(); this.populateObjectFromResult(gc, results[0]); return gc; } return; }; /** * Get the feature table names * * @param {callback} callback called with an error if one occurred and an array of the {FeatureTable} */ GeometryColumnsDao.prototype.getFeatureTables = function () { var tableNames = []; for (var result of this.connection.each('select ' + GeometryColumnsDao.COLUMN_TABLE_NAME + ' from ' + this.gpkgTableName)) { tableNames.push(result[GeometryColumnsDao.COLUMN_TABLE_NAME]); } return tableNames; }; /** * Get the Spatial Reference System of the Geometry Columns * * @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns * @param {callback} callback called with an error if one occurred and the {SpatialReferenceSystem} */ GeometryColumnsDao.prototype.getSrs = function (geometryColumns) { var dao = this.geoPackage.getSpatialReferenceSystemDao(); return dao.queryForId(geometryColumns.srs_id);; }; /** * Get the Contents of the Geometry Columns * * @param {module:dao/geometryColumns~GeometryColumns} geometryColumns geometry columns * @return {ContentsDao} contents dao */ GeometryColumnsDao.prototype.getContents = function (geometryColumns) { var dao = this.geoPackage.getContentsDao(); return dao.queryForId(geometryColumns.table_name); }; GeometryColumnsDao.prototype.getProjection = function (projectionObject) { var srs = this.getSrs(projectionObject); var srsDao = this.geoPackage.getSpatialReferenceSystemDao(); return srsDao.getProjection(srs); }; /** * tableName field name * @type {String} */ GeometryColumnsDao.COLUMN_TABLE_NAME = "table_name"; /** * columnName field name * @type {String} */ GeometryColumnsDao.COLUMN_COLUMN_NAME = "column_name"; /** * id 1 field name, tableName * @type {String} */ GeometryColumnsDao.COLUMN_ID_1 = GeometryColumnsDao.COLUMN_TABLE_NAME; /** * id 2 field name, columnName * @type {String} */ GeometryColumnsDao.COLUMN_ID_2 = GeometryColumnsDao.COLUMN_COLUMN_NAME; /** * geometryTypeName field name * @type {String} */ GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME = "geometry_type_name"; /** * srsId field name * @type {String} */ GeometryColumnsDao.COLUMN_SRS_ID = 'srs_id'; /** * z field name * @type {String} */ GeometryColumnsDao.COLUMN_Z = "z"; /** * m field name * @type {String} */ GeometryColumnsDao.COLUMN_M = "m"; /** * Table Name * @type {String} */ GeometryColumnsDao.prototype.gpkgTableName = 'gpkg_geometry_columns'; GeometryColumnsDao.prototype.idColumns = [GeometryColumnsDao.COLUMN_ID_1, GeometryColumnsDao.COLUMN_ID_2]; GeometryColumnsDao.prototype.columns = [GeometryColumnsDao.COLUMN_TABLE_NAME, GeometryColumnsDao.COLUMN_COLUMN_NAME, GeometryColumnsDao.COLUMN_GEOMETRY_TYPE_NAME, GeometryColumnsDao.COLUMN_SRS_ID, GeometryColumnsDao.COLUMN_Z, GeometryColumnsDao.COLUMN_M]; GeometryColumns.TABLE_NAME = "tableName"; GeometryColumns.COLUMN_NAME = "columnName"; GeometryColumns.GEOMETRY_TYPE_NAME = "geometryTypeName"; GeometryColumns.SRS_ID = "srsId"; GeometryColumns.Z = "z"; GeometryColumns.M = "m"; module.exports.GeometryColumnsDao = GeometryColumnsDao; module.exports.GeometryColumns = GeometryColumns; },{"../../core/contents":8,"../../core/srs":9,"../../dao/dao":11,"util":343}],65:[function(require,module,exports){ /** * @module features/user/featureColumn */ const UserColumn = require('../../user/userColumn'); const DataTypes = require('../../db/dataTypes'); const util = require('util'); /** * Represents a user feature column * @class * @extends {module:user/userColumn~UserColumn} */ var FeatureColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType) { UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey); this.geometryType = geometryType; if (!geometryType && dataType === DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) { throw new Error('Data or Geometry Type is required to create column: ' + name); } } util.inherits(FeatureColumn, UserColumn); FeatureColumn.prototype.getTypeName = function () { if (this.isGeometry()) { return DataTypes.name(DataTypes.GPKGDataType.GPKG_DT_GEOMETRY); } return this.dataType !== undefined && DataTypes.name(this.dataType); }; /** * Create a new primary key column * * @param {Number} index column index * @param {string} name column name * * @return feature column */ FeatureColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) { return new FeatureColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true); } /** * Create a new geometry column * * @param {Number} index column index * @param {string} name column name * @param {WKBGeometryType} type geometry type * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * * @return feature column */ FeatureColumn.createGeometryColumn = function(index, name, type, notNull, defaultValue) { return new FeatureColumn(index, name, type, undefined, notNull, defaultValue, false, type); } /** * Create a new column * * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} type data type * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * * @return feature column */ FeatureColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) { return FeatureColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue); } /** * Create a new column * * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} type data type * @param {Number} max max value * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * * @return feature column */ FeatureColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) { return new FeatureColumn(index, name, type, max, notNull, defaultValue, false); } /** * Determine if this column is a geometry * @return {Boolean} true if a geometry column */ FeatureColumn.prototype.isGeometry = function () { return this.geometryType !== undefined; }; module.exports = FeatureColumn; },{"../../db/dataTypes":14,"../../user/userColumn":105,"util":343}],66:[function(require,module,exports){ /** * featureDao module. * @module features/user/featureDao */ var UserDao = require('../../user/userDao') , GeometryColumnsDao = require('../columns').GeometryColumnsDao , ContentsDao = require('../../core/contents').ContentsDao , DataColumnsDao = require('../../dataColumns').DataColumnsDao , FeatureRow = require('./featureRow') , DataTypes = require('../../db/dataTypes') , FeatureTableIndex = require('../../extension/index/featureTableIndex') , BoundingBox = require('../../boundingBox'); var util = require('util') , reproject = require('reproject') , LineIntersect = require('@turf/line-intersect').default , Intersect = require('@turf/intersect').default , BooleanWithin = require('@turf/boolean-within').default; /** * Feature DAO for reading feature user data tables * @class FeatureDao * @extends {module:user/userDao~UserDao} * @param {sqlite3} db database connection * @param {FeatureTable} table feature table * @param {GeometryColumns} geometryColumns geometry columns * @param {MetadataDb} metadataDb metadata db */ var FeatureDao = function(geoPackage, table, geometryColumns, metadataDb) { UserDao.call(this, geoPackage, table); this.geometryColumns = geometryColumns; this.metadataDb = metadataDb; this.dataColumnsDao = new DataColumnsDao(geoPackage); this.featureTableIndex = new FeatureTableIndex(geoPackage, this); var dao = geoPackage.getGeometryColumnsDao(); if (!dao.getContents(geometryColumns)) { throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Contents'); } if (!dao.getSrs(geometryColumns)) { throw new Error('Geometry Columns ' + dao.getId(geometryColumns) + ' has null Spatial Reference System'); } this.projection = dao.getProjection(geometryColumns); } util.inherits(FeatureDao, UserDao); FeatureDao.prototype.createObject = function (results) { if (results) { return this.getRow(results); } return this.newRow(); }; FeatureDao.prototype.getContents = function() { var dao = this.geoPackage.getGeometryColumnsDao(); return dao.getContents(this.geometryColumns); } /** * Get the feature table * @return {FeatureTable} the feature table */ FeatureDao.prototype.getFeatureTable = function () { return this.table; }; /** * Create a new feature row with the column types and values * @param {Array} columnTypes column types * @param {Array} values values * @return {FeatureRow} feature row */ FeatureDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new FeatureRow(this.getFeatureTable(), columnTypes, values); }; /** * Create a new feature row * @return {FeatureRow} feature row */ FeatureDao.prototype.newRow = function () { return new FeatureRow(this.getFeatureTable()); }; /** * Get the geometry column name * @return {string} the geometry column name */ FeatureDao.prototype.getGeometryColumnName = function () { return this.geometryColumns.column_name; }; /** * Get the geometry types * @return {WKBGeometryType} well known binary geometry type */ FeatureDao.prototype.getGeometryType = function () { return this.geometryColumns.getGeometryType(); }; FeatureDao.prototype.getSrs = function() { return this.geoPackage.getGeometryColumnsDao().getSrs(this.geometryColumns); }; /** * Determine if the feature table is indexed * @param {Function} callback called with err if one occurred and true or false indicating the indexed status */ FeatureDao.prototype.isIndexed = function() { return this.featureTableIndex.isIndexed(); } /** * Query for count in bounding box * @param boundingBox * @returns {Number}} */ FeatureDao.prototype.countWebMercatorBoundingBox = function(boundingBox) { var srs = this.getSrs(); return this.featureTableIndex.countWithBoundingBox(boundingBox, 'EPSG:3857'); } FeatureDao.prototype.fastQueryWebMercatorBoundingBox = function(boundingBox, featureRowCallback) { var srs = this.getSrs(); var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857'); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var featureRow = thisgetRow(nextRow.value); return { value: featureRow, done: false }; } else { return { done: true } } } } } FeatureDao.prototype.queryIndexedFeaturesWithWebMercatorBoundingBox = function(boundingBox) { var srs = this.getSrs(); var projection = this.projection; var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:3857'); var thisgetRow = this.getRow.bind(this); var projectedBoundingBox = boundingBox.projectBoundingBox('EPSG:3857', 'EPSG:4326'); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var featureRow; var geometry; while(!nextRow.done && !geometry) { featureRow = thisgetRow(nextRow.value); geometry = reprojectFeature(featureRow, srs, projection); geometry = verifyFeature(geometry, projectedBoundingBox); if (geometry) { geometry.properties = featureRow.values; return { value: featureRow, done: false }; } else { nextRow = iterator.next(); } } } return { done: true } } } } /** * Calls geoJSONFeatureCallback with the geoJSON of each matched feature (always in 4326 projection) * @param {BoundingBox} boundingBox 4326 bounding box to query * @param {function} geoJSONFeatureCallback called with err, geoJSON, doneCallback * @param {function} doneCallback called when all rows have been returned */ FeatureDao.prototype.queryForGeoJSONIndexedFeaturesWithBoundingBox = function(boundingBox, skipVerification) { var columns = []; var columnMap = {}; var srs = this.getSrs(); var projection = this.projection; this.table.columns.forEach(function(column) { var dataColumn = this.dataColumnsDao.getDataColumns(this.table.table_name, column.name); columns.push({ index: column.index, name: column.name, max: column.max, min: column.min, notNull: column.notNull, primaryKey: column.primaryKey, dataType: column.dataType ? DataTypes.name(column.dataType) : '', displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name, dataColumn: dataColumn }); columnMap[column.name] = columns[columns.length-1]; }.bind(this)); var verifiedCount = 0; var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326')[Symbol.iterator](); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var featureRow; var geometry; while(!nextRow.done && !geometry) { featureRow = thisgetRow(nextRow.value); geometry = reprojectFeature(featureRow, srs, projection); if (!skipVerification) { geometry = verifyFeature(geometry, boundingBox); } if (geometry) { var geoJson = { properties: {}, geometry: geometry }; for (var key in featureRow.values) { if(featureRow.values.hasOwnProperty(key) && key != featureRow.getGeometryColumn().name && key != 'id') { if (key.toLowerCase() == '_feature_id') { geoJson.id = featureRow.values[key]; } else if (key.toLowerCase() == '_properties_id') { geoJson.properties[key.substring(12)] = featureRow.values[key]; } else { geoJson.properties[columnMap[key].displayName] = featureRow.values[key]; } } } geoJson.id = geoJson.id || featureRow.getId(); return { value: geoJson, done: false }; } else { nextRow = iterator.next(); } } } return { done: true } }.bind(this) } } function reprojectFeature(featureRow, srs, projection) { var geometry = featureRow.getGeometry().toGeoJSON(); if (srs.organization + ':' + srs.organization_coordsys_id != 'EPSG:4326') { geometry = reproject.reproject(geometry, projection, 'EPSG:4326'); } return geometry; } function verifyFeature(geometry, boundingBox) { try { if (geometry.type == 'Point') { return geometry; } else if (geometry.type == 'LineString') { var intersect = LineIntersect(geometry, boundingBox.toGeoJSON().geometry); if (intersect.features.length) { return geometry; } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) { return geometry; } } else if (geometry.type == 'Polygon') { var polyIntersect = Intersect(geometry, boundingBox.toGeoJSON().geometry); if (polyIntersect) { return geometry; } else if (BooleanWithin(geometry, boundingBox.toGeoJSON().geometry)) { return geometry; } } } catch (e) {} } FeatureDao.prototype.queryIndexedFeaturesWithBoundingBox = function(boundingBox) { var srs = this.getSrs(); var projection = this.projection; var iterator = this.featureTableIndex.queryWithBoundingBox(boundingBox, 'EPSG:4326'); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var featureRow; var geometry; while(!nextRow.done && !geometry) { featureRow = thisgetRow(nextRow.value); geometry = reprojectFeature(featureRow, srs, projection); geometry = verifyFeature(geometry, boundingBox); if (geometry) { geometry.properties = featureRow.values; return { value: featureRow, done: false }; } else { nextRow = iterator.next(); } } } return { done: true } }.bind(this) } } FeatureDao.prototype.getBoundingBox = function () { var contents = this.getContents(); return new BoundingBox(contents.min_x, contents.max_x, contents.min_y, contents.max_y); }; module.exports = FeatureDao; },{"../../boundingBox":7,"../../core/contents":8,"../../dataColumns":13,"../../db/dataTypes":14,"../../extension/index/featureTableIndex":26,"../../user/userDao":106,"../columns":64,"./featureRow":67,"@turf/boolean-within":120,"@turf/intersect":124,"@turf/line-intersect":126,"reproject":315,"util":343}],67:[function(require,module,exports){ /** * featureRow module. * @module features/user/featureRow */ var UserRow = require('../../user/userRow') , FeatureColumn = require('./featureColumn') , GeometryData = require('../../geom/geometryData') , DataTypes = require('../../db/dataTypes'); var util = require('util'); /** * Feature Row containing the values from a single result set row * @param {FeatureTable} featureTable feature table * @param {Array} columnTypes column types * @param {Array} values values */ var FeatureRow = function(featureTable, columnTypes, values) { UserRow.call(this, featureTable, columnTypes, values); this.featureTable = featureTable; } util.inherits(FeatureRow, UserRow); /** * Get the geometry column index * @return {Number} geometry column index */ FeatureRow.prototype.getGeometryColumnIndex = function () { return this.featureTable.geometryIndex; }; /** * Get the geometry column * @return {FeatureColumn} geometry column */ FeatureRow.prototype.getGeometryColumn = function () { return this.featureTable.getGeometryColumn(); }; /** * Get the geometry * @return {Buffer} geometry data */ FeatureRow.prototype.getGeometry = function () { return this.getValueWithIndex(this.featureTable.geometryIndex); }; /** * Get the geometry's type * @return {String} geometry data */ FeatureRow.prototype.getGeometryType = function () { var geometryType = null; var geometry = this.getValueWithIndex(this.featureTable.geometryIndex); if (geometry !== null) { geometryType = geometry.toGeoJSON().type; } return geometryType; }; /** * set the geometry * @param {Buffer} geometryData geometry data */ FeatureRow.prototype.setGeometry = function (geometryData) { this.setValueWithIndex(this.featureTable.geometryIndex, geometryData); }; FeatureRow.prototype.toObjectValue = function (index, value) { var objectValue = value; var column = this.getColumnWithIndex(index); if (column.isGeometry() && value) { objectValue = new GeometryData(value); } return objectValue; }; FeatureRow.prototype.toDatabaseValue = function(columnName) { var column = this.getColumnWithColumnName(columnName); var value = this.getValueWithColumnName(columnName); if (column.isGeometry() && value.toData) { return value.toData(); } else if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) { return value === true ? 1 : 0; } return value; } module.exports = FeatureRow; },{"../../db/dataTypes":14,"../../geom/geometryData":73,"../../user/userRow":107,"./featureColumn":65,"util":343}],68:[function(require,module,exports){ /** * featureTable module. * @module features/user/featureTable */ var UserTable = require('../../user/userTable'); var util = require('util'); /** * Represents a user feature table * @param {string} tableName table name * @param {array} columns feature columns */ var FeatureTable = function(tableName, columns) { UserTable.call(this, tableName, columns); var geometry = undefined; for (var i = 0; i < columns.length; i++) { var column = columns[i]; if (column.isGeometry()) { this.duplicateCheck(column.index, geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY'); geometry = column.index; } } this.missingCheck(geometry, /* WKB_GEOMETRY_NAME */ 'GEOMETRY'); this.geometryIndex = geometry; } util.inherits(FeatureTable, UserTable); /** * Get the geometry feature column * @return {FeatureColumn} geometry feature column */ FeatureTable.prototype.getGeometryColumn = function () { return this.getColumnWithIndex(this.geometryIndex); }; FeatureTable.prototype.getTableType = function() { return UserTable.FEATURE_TABLE; } /** * The FeatureTable * @type {FeatureTable} */ module.exports = FeatureTable; },{"../../user/userTable":108,"util":343}],69:[function(require,module,exports){ /** * featureTableReader module. * @module features/user/featureTableReader */ var UserTableReader = require('../../user/userTableReader') , FeatureTable = require('./featureTable') , FeatureColumn = require('./featureColumn') , GeometryColumnsDao = require('../columns').GeometryColumnsDao , DataTypes = require('../../db/dataTypes') , wkb = require('../../wkb'); var util = require('util'); /** * Reads the metadata from an existing feature table * @class FeatureTableReader * @extends {module:user~UserTableReader} */ var FeatureTableReader = function(tableNameOrGeometryColumns) { if (util.isString(tableNameOrGeometryColumns)) { UserTableReader.call(this, tableNameOrGeometryColumns); } else { UserTableReader.call(this, tableNameOrGeometryColumns.table_name); this.geometryColumns = tableNameOrGeometryColumns; } } util.inherits(FeatureTableReader, UserTableReader); FeatureTableReader.prototype.readFeatureTable = function (geoPackage) { if (!this.geometryColumns) { var gcd = new GeometryColumnsDao(geoPackage); this.geometryColumns = gcd.queryForTableName(this.table_name); return this.readTable(geoPackage.getDatabase()); } else { return this.readTable(geoPackage.getDatabase()); } }; FeatureTableReader.prototype.createTable = function (tableName, columns) { return new FeatureTable(tableName, columns); }; FeatureTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValue, primaryKey) { var geometry = name === this.geometryColumns.column_name; var geometryType = undefined; var dataType = undefined; if (geometry) { geometryType = wkb.fromName(type); } else { dataType = DataTypes.fromName(type); } var column = new FeatureColumn(index, name, dataType, max, notNull, defaultValue, primaryKey, geometryType); return column; }; /** * The FeatureTableReader * @type {FeatureTableReader} */ module.exports = FeatureTableReader; },{"../../db/dataTypes":14,"../../user/userTableReader":109,"../../wkb":111,"../columns":64,"./featureColumn":65,"./featureTable":68,"util":343}],70:[function(require,module,exports){ /** * @module geoPackage */ var SpatialReferenceSystemDao = require('./core/srs').SpatialReferenceSystemDao , GeometryColumnsDao = require('./features/columns').GeometryColumnsDao , FeatureDao = require('./features/user/featureDao') , FeatureTableReader = require('./features/user/featureTableReader') , ContentsDao = require('./core/contents').ContentsDao , Contents = require('./core/contents').Contents , TileMatrixSetDao = require('./tiles/matrixset').TileMatrixSetDao , TileMatrixSet = require('./tiles/matrixset').TileMatrixSet , TileMatrixDao = require('./tiles/matrix').TileMatrixDao , TileMatrix = require('./tiles/matrix').TileMatrix , TileTableReader = require('./tiles/user/tileTableReader') , TileDao = require('./tiles/user/tileDao') , TileTable = require('./tiles/user/tileTable') , TileBoundingBoxUtils = require('./tiles/tileBoundingBoxUtils') , TableCreator = require('./db/tableCreator') , UserTable = require('./user/userTable') , FeatureTable = require('./features/user/featureTable') , DataColumnsDao = require('./dataColumns').DataColumnsDao , DataColumnConstraintsDao = require('./dataColumnConstraints').DataColumnConstraintsDao , MetadataDao = require('./metadata').MetadataDao , MetadataReferenceDao = require('./metadata/reference').MetadataReferenceDao , ExtensionDao = require('./extension').ExtensionDao , CrsWktExtension = require('./extension/crsWkt').CrsWktExtension , SchemaExtension = require('./extension/schema').SchemaExtension , RelatedTablesExtension = require('./extension/relatedTables') , TableIndexDao = require('./extension/index/tableIndex').TableIndexDao , GeometryIndexDao = require('./extension/index/geometryIndex').GeometryIndexDao , ExtendedRelationDao = require('./extension/relatedTables/extendedRelation').ExtendedRelationDao , ContentsIdDao = require('./extension/contents/contentsIdDao') , ContentsIdExtension = require('./extension/contents/.') , FeatureStyleExtension = require('./extension/style/.') , AttributeTable = require('./attributes/attributeTable') , AttributeTableReader = require('./attributes/attributeTableReader') , AttributeDao = require('./attributes/attributeDao') , DataTypes = require('./db/dataTypes'); var proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; // Module loading hack var defs = require('./proj4Defs'); for (var name in defs) { if (defs[name]) { proj4.defs(name, defs[name]); } } /** * A `GeoPackage` instance is the interface to a physical GeoPackage SQLite * database. * @param {string} name * @param {string} path * @param {module:db/geoPackageConnection~GeoPackageConnection} connection * @class */ var GeoPackage = module.exports = function(name, path, connection) { this.name = name; this.path = path; this.connection = connection; this.tableCreator = new TableCreator(this); } GeoPackage.loadProjections = function(items) { if (!(items instanceof Array)) throw new Error('Invalid array of projections'); for (var i = 0; i < items.length; i++) { if (!defs[items[i]]) throw new Error('Projection not found'); this.addProjection(items[i], defs[items[i]]); } } GeoPackage.addProjection = function(name, definition) { if (!name || ! definition) throw new Error('Invalid projection name/definition'); proj4.defs(''+name, ''+definition); } GeoPackage.hasProjection = function(name) { return proj4.defs(''+name); } GeoPackage.prototype.close = function() { this.connection.close(); } GeoPackage.prototype.getDatabase = function() { return this.connection; } GeoPackage.prototype.getPath = function() { return this.path; } GeoPackage.prototype.export = function(callback) { this.connection.export(callback); } /** * Get the GeoPackage name * @return {String} the GeoPackage name */ GeoPackage.prototype.getName = function() { return this.name; } /** * @returns {module:core/srs~SpatialReferenceSystemDao} the DAO to access the [SRS table]{@link module:core/srs~SpatialReferenceSystem} in this `GeoPackage` */ GeoPackage.prototype.getSpatialReferenceSystemDao = function() { return this.spatialReferenceSystemDao || (this.spatialReferenceSystemDao = new SpatialReferenceSystemDao(this)); } /** * @returns {module:core/contents~ContentsDao} the DAO to access the [contents table]{@link module:core/contents~Contents} in this `GeoPackage` */ GeoPackage.prototype.getContentsDao = function() { return this.contentsDao || (this.contentsDao = new ContentsDao(this)); } /** * @returns {module:tiles/matrixset~TileMatrixSetDao} the DAO to access the [tile matrix set]{@link module:tiles/matrixset~TileMatrixSet} in this `GeoPackage` */ GeoPackage.prototype.getTileMatrixSetDao = function () { return this.tileMatrixSetDao || (this.tileMatrixSetDao = new TileMatrixSetDao(this)); }; /** * @returns {module:tiles/matrixset~TileMatrixDao} the DAO to access the [tile matrix]{@link module:tiles/matrixset~TileMatrix} in this `GeoPackage` */ GeoPackage.prototype.getTileMatrixDao = function() { return this.tileMatrixDao || (this.tileMatrixDao = new TileMatrixDao(this)); } GeoPackage.prototype.getDataColumnsDao = function() { return this.dataColumnsDao || (this.dataColumnsDao = new DataColumnsDao(this)); } GeoPackage.prototype.getExtensionDao = function() { return this.extensionDao || (this.extensionDao = new ExtensionDao(this)); } GeoPackage.prototype.getTableIndexDao = function() { return this.tableIndexDao || (this.tableIndexDao = new TableIndexDao(this)); } GeoPackage.prototype.getGeometryColumnsDao = function () { return this.geometryColumnsDao || (this.geometryColumnsDao = new GeometryColumnsDao(this)); }; GeoPackage.prototype.getDataColumnConstraintsDao = function () { return this.dataColumnConstraintsDao || (this.dataColumnConstraintsDao = new DataColumnConstraintsDao(this)); }; GeoPackage.prototype.getMetadataReferenceDao = function () { return this.metadataReferenceDao || (this.metadataReferenceDao = new MetadataReferenceDao(this)); }; GeoPackage.prototype.getMetadataDao = function () { return this.metadataDao || (this.metadataDao = new MetadataDao(this)); }; GeoPackage.prototype.getExtendedRelationDao = function() { return this.extendedRelationDao || (this.extendedRelationDao = new ExtendedRelationDao(this)); } GeoPackage.prototype.getContentsIdDao = function() { return this.contentsIdDao || (this.contentsIdDao = new ContentsIdDao(this)); } GeoPackage.prototype.getContentsIdExtension = function() { return this.contentsIdExtension || (this.contentsIdExtension = new ContentsIdExtension(this)); } GeoPackage.prototype.getFeatureStyleExtension = function() { return this.featureStyleExtension || (this.featureStyleExtension = new FeatureStyleExtension(this)); } GeoPackage.prototype.getGeometryIndexDao = function(featureDao) { return new GeometryIndexDao(this, featureDao); } GeoPackage.prototype.getRelatedTablesExtension = function() { return this.relatedTablesExtension || (this.relatedTablesExtension = new RelatedTablesExtension(this)); } GeoPackage.prototype.getSrs = function(srsId) { var dao = this.getSpatialReferenceSystemDao(); return dao.queryForId(srsId); } GeoPackage.prototype.createRequiredTables = function() { var geopackage = this; return this.tableCreator.createRequired() .then(function(results) { return geopackage; }); } GeoPackage.prototype.createSupportedExtensions = function() { var crs = new CrsWktExtension(this); crs.getOrCreateExtension(); var schema = new SchemaExtension(this); schema.getOrCreateExtension(); return this; } /** * @returns {module:tiles/user/tileDao~TileDao} the `TileDao` to access [tiles]{@link module:tiles/user/tileTable} */ GeoPackage.prototype.getTileDaoWithTileMatrixSet = function (tileMatrixSet) { var tileMatrices = []; var tileMatrixDao = this.getTileMatrixDao(); var results = tileMatrixDao.queryForAllEq(TileMatrixDao.COLUMN_TABLE_NAME, tileMatrixSet.table_name, null, null, TileMatrixDao.COLUMN_ZOOM_LEVEL + ' ASC, ' + TileMatrixDao.COLUMN_PIXEL_X_SIZE + ' DESC, ' + TileMatrixDao.COLUMN_PIXEL_Y_SIZE + ' DESC'); results.forEach(function(result) { var tm = new TileMatrix(); tileMatrixDao.populateObjectFromResult(tm, result); tileMatrices.push(tm); }); var tableReader = new TileTableReader(tileMatrixSet); var tileTable = tableReader.readTileTable(this); return new TileDao(this, tileTable, tileMatrixSet, tileMatrices); }; GeoPackage.prototype.getTileDaoWithContents = function (contents) { var dao = this.getContentsDao(); var tileMatrixSet = dao.getTileMatrixSet(contents); return this.getTileDaoWithTileMatrixSet(tileMatrixSet); }; GeoPackage.prototype.getTileDao = function (tableName) { var tms = this.getTileMatrixSetDao(); var results = tms.queryForAllEq(TileMatrixSetDao.COLUMN_TABLE_NAME, tableName); if (results.length > 1) { throw new Error('Unexpected state. More than one Tile Matrix Set matched for table name: ' + tableName + ', count: ' + results.length); } else if (results.length === 0) { throw new Error('No Tile Matrix found for table name: ' + tableName); } var tileMatrixSet = new TileMatrixSet(); tms.populateObjectFromResult(tileMatrixSet, results[0]); return this.getTileDaoWithTileMatrixSet(tileMatrixSet); }; /** * Return a hash containing arrays of table names grouped under keys `features`, * `tiles`, and `attributes`. * @return {{features: string[], tiles: string[], attributes: string[]}} */ GeoPackage.prototype.getTables = function() { var tables = {}; var featureTables = this.getFeatureTables(); tables.features = featureTables; var tileTables = this.getTileTables(); tables.tiles = tileTables; var attributesTables = this.getAttributesTables(); tables.attributes = attributesTables; return tables; }; GeoPackage.prototype.getAttributesTables = function() { return this.getContentsDao().getTables(ContentsDao.GPKG_CDT_ATTRIBUTES_NAME); } GeoPackage.prototype.hasAttributeTable = function(attributeTableName) { var tables = this.getAttributesTables(); return tables && tables.indexOf(attributeTableName) != -1; } /** * Get the tile tables * @param {callback} callback called with an error if one occurred and the array of {TileTable} names */ GeoPackage.prototype.getTileTables = function () { var tms = this.getTileMatrixSetDao(); if (!tms.isTableExists()) { return []; } return tms.getTileTables(); }; /** * Checks if the tile table exists in the GeoPackage * @param {String} tileTableName name of the table to query for * @param {Function} callback called with an error if one occurred and true or false for the existence of the table */ GeoPackage.prototype.hasTileTable = function(tileTableName) { var tables = this.getTileTables(); return tables && tables.indexOf(tileTableName) != -1; }; /** * Checks if the feature table exists in the GeoPackage * @param {GeoPackage} geopackage open GeoPackage object * @param {String} featureTableName name of the table to query for * @param {Function} callback called with an error if one occurred and true or false for the existence of the table */ GeoPackage.prototype.hasFeatureTable = function(featureTableName) { var tables = this.getFeatureTables(); return tables && tables.indexOf(featureTableName) != -1; }; /** * Get the feature tables * @param {callback} callback called with an error if one occurred and the array of {FeatureTable} names */ GeoPackage.prototype.getFeatureTables = function () { var gcd = this.getGeometryColumnsDao(); if (!gcd.isTableExists()) { return []; } return gcd.getFeatureTables(); }; GeoPackage.prototype.isTable = function(tableName) { return !!this.connection.tableExists(tableName); } GeoPackage.prototype.isTableType = function(type, tableName) { return type === this.getTableType(tableName); } GeoPackage.prototype.getTableType = function(tableName) { var contents = this.getTableContents(tableName); if (contents) { return contents.data_type; } } GeoPackage.prototype.getTableContents = function(tableName) { return this.getContentsDao().queryForId(tableName); } GeoPackage.prototype.deleteTable = function(tableName) { this.connection.dropTable(tableName); } GeoPackage.prototype.getTableCreator = function() { return this.tableCreator; } GeoPackage.prototype.index = function() { var tables = this.getFeatureTables(); return tables.reduce(function(sequence, table) { return sequence.then(function() { return this.indexFeatureTable(table) .then(function(indexed) { if (indexed) { return true; } else { throw new Error('Unable to index table ' + table); } }); }.bind(this)) }.bind(this), Promise.resolve()); } GeoPackage.prototype.indexFeatureTable = function(table, progress) { var featureDao = this.getFeatureDao(table); var fti = featureDao.featureTableIndex; return new Promise(function(resolve, reject) { var tableIndex = fti.getTableIndex(); if (tableIndex) { return resolve(true); } resolve(fti.index(progress)); }); } /** * Get a Feature DAO from Geometry Columns * * @param {GeometryColumns} geometryColumns Geometry Columns * @param {callback} callback called with an error if one occurred and the {FeatureDao} */ GeoPackage.prototype.getFeatureDaoWithGeometryColumns = function (geometryColumns) { if (!geometryColumns) { throw new Error('Non null Geometry Columns is required to create Feature DAO'); } var tableReader = new FeatureTableReader(geometryColumns); var featureTable = tableReader.readFeatureTable(this); var dao = new FeatureDao(this, featureTable, geometryColumns, this.metadataDb); return dao; }; /** * Get a Feature DAO from Contents * @param {Contents} contents Contents * @param {Function} callback callback called with an error if one occurred and the {FeatureDao} */ GeoPackage.prototype.getFeatureDaoWithContents = function (contents) { var dao = this.getContentsDao(); var columns = dao.getGeometryColumns(contents); return this.getFeatureDaoWithGeometryColumns(columns); }; /** * Get a Feature DAO from Contents * @param {string} tableName table name * @param {Function} callback callback called with an error if one occurred and the {FeatureDao} */ GeoPackage.prototype.getFeatureDao = function (tableName) { var dao = this.getGeometryColumnsDao(); var geometryColumns = dao.queryForTableName(tableName); if (!geometryColumns) { throw new Error('No Feature Table exists for table name: ' + tableName); } return this.getFeatureDaoWithGeometryColumns(geometryColumns); }; /** * Queries for GeoJSON features in a feature table * @param {String} tableName Table name to query * @param {BoundingBox} boundingBox BoundingBox to query * @param {Function} callback Caled with err, featureArray */ GeoPackage.prototype.queryForGeoJSONFeaturesInTable = function(tableName, boundingBox) { var featureDao = this.getFeatureDao(tableName); var features = []; var iterator = featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox); for (var feature of iterator) { features.push(feature); } return features; } /** * iterates GeoJSON features in a feature table within a bounding box * @param {String} tableName Table name to query * @param {BoundingBox} boundingBox BoundingBox to query * @param {Function} rowCallback Caled with err, geoJSON * @param {Function} doneCallback Caled with err if one occurred */ GeoPackage.prototype.iterateGeoJSONFeaturesInTableWithinBoundingBox = function(tableName, boundingBox) { var featureDao = this.getFeatureDao(tableName); return featureDao.queryForGeoJSONIndexedFeaturesWithBoundingBox(boundingBox); } /** * Create the Geometry Columns table if it does not already exist * @param {Function} callback called with an error if one occurred otherwise the table now exists */ GeoPackage.prototype.createGeometryColumnsTable = function () { var dao = this.getGeometryColumnsDao(); if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createGeometryColumns(); }; /** * Get a Attribute DAO * @param {string} tableName table name * @param {Function} callback callback called with an error if one occurred and the {AttributeDao} */ GeoPackage.prototype.getAttributeDaoWithTableName = function (tableName) { var dao = this.getContentsDao(); var contents = dao.queryForId(tableName); return this.getAttributeDaoWithContents(contents); }; /** * Get a Attribute DAO * @param {Contents} contents Contents * @param {Function} callback callback called with an error if one occurred and the {AttributeDao} */ GeoPackage.prototype.getAttributeDaoWithContents = function (contents) { if (!contents) { throw new Error('Non null Contents is required to create an Attributes DAO'); } var reader = new AttributeTableReader(contents.table_name); var table = reader.readTable(this.connection); table.setContents(contents); return new AttributeDao(this, table); } GeoPackage.prototype.createAttributeTable = function(tableName, columns, dataColumns) { return Promise.resolve() .then(function() { var attributeTable = new AttributeTable(tableName, columns); var result = this.tableCreator.createUserTable(attributeTable); var contents = new Contents(); contents.table_name = tableName; contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME; contents.identifier = tableName; contents.last_change = new Date().toISOString(); return this.getContentsDao().create(contents); }.bind(this)) .then(function() { if (dataColumns) { return this.createDataColumns() .then(function() { var dataColumnsDao = this.getDataColumnsDao(); dataColumns.forEach(function(dataColumn) { dataColumnsDao.create(dataColumn); }); }.bind(this)); } }.bind(this)) .then(function() { return true; }); } /** * Create the given {@link module:features/user/featureTable~FeatureTable} * @param {FeatureTable} featureTable feature table */ GeoPackage.prototype.createFeatureTable = function(featureTable) { return this.tableCreator.createUserTable(featureTable); }; GeoPackage.prototype.createFeatureTableWithGeometryColumns = function(geometryColumns, boundingBox, srsId, columns) { return this.createFeatureTableWithGeometryColumnsAndDataColumns(geometryColumns, boundingBox, srsId, columns, undefined); }; GeoPackage.prototype.createFeatureTableWithGeometryColumnsAndDataColumns = function(geometryColumns, boundingBox, srsId, columns, dataColumns) { return this.createGeometryColumnsTable() .then(function(result) { var featureTable = new FeatureTable(geometryColumns.table_name, columns); var result = this.createFeatureTable(featureTable); var contents = new Contents(); contents.table_name = geometryColumns.table_name; contents.data_type = ContentsDao.GPKG_CDT_FEATURES_NAME; contents.identifier = geometryColumns.table_name; contents.last_change = new Date().toISOString(); contents.min_x = boundingBox.minLongitude; contents.min_y = boundingBox.minLatitude; contents.max_x = boundingBox.maxLongitude; contents.max_y = boundingBox.maxLatitude; contents.srs_id = srsId; this.getContentsDao().create(contents); geometryColumns.srs_id = srsId; return this.getGeometryColumnsDao().create(geometryColumns); }.bind(this)) .then(function() { if (dataColumns) { return this.createDataColumns() .then(function() { var dataColumnsDao = this.getDataColumnsDao(); dataColumns.forEach(function(dataColumn) { dataColumnsDao.create(dataColumn); }); }.bind(this)); } }.bind(this)) .then(function() { return true; }); }; /** * Create the Tile Matrix Set table if it does not already exist * @param {Function} callback called with an error if one occurred otherwise the table now exists */ GeoPackage.prototype.createTileMatrixSetTable = function() { var dao = this.getTileMatrixSetDao(); if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createTileMatrixSet(); } /** * Create the Tile Matrix table if it does not already exist * @param {Function} callback called with an error if one occurred otherwise the table now exists */ GeoPackage.prototype.createTileMatrixTable = function() { var dao = this.getTileMatrixDao(); if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createTileMatrix(); }; /** * Create the given tile table in this GeoPackage. * * @param {module:tiles/user/tileTable~TileTable} tileTable * @returns {@link module:db/tableCreator~TableCreator#createUserTable} */ GeoPackage.prototype.createTileTable = function(tileTable) { return this.tableCreator.createUserTable(tileTable); }; /** * Create a new [tile table]{@link module:tiles/user/tileTable~TileTable} in this GeoPackage. * * @param {String} tableName tile table name * @param {BoundingBox} contentsBoundingBox bounding box of the contents table * @param {Number} contentsSrsId srs id of the contents table * @param {BoundingBox} tileMatrixSetBoundingBox bounding box of the matrix set * @param {Number} tileMatrixSetSrsId srs id of the matrix set * @returns {Promise} `Promise` of the created {@link module:tiles/matrixset~TileMatrixSet} */ GeoPackage.prototype.createTileTableWithTableName = function(tableName, contentsBoundingBox, contentsSrsId, tileMatrixSetBoundingBox, tileMatrixSetSrsId) { const columns = TileTable.createRequiredColumns(); const tileTable = new TileTable(tableName, columns); const contents = new Contents(); contents.table_name = tableName; contents.data_type = ContentsDao.GPKG_CDT_TILES_NAME; contents.identifier = tableName; contents.last_change = new Date().toISOString(); contents.min_x = contentsBoundingBox.minLongitude; contents.min_y = contentsBoundingBox.minLatitude; contents.max_x = contentsBoundingBox.maxLongitude; contents.max_y = contentsBoundingBox.maxLatitude; contents.srs_id = contentsSrsId; const tileMatrixSet = new TileMatrixSet(); tileMatrixSet.setContents(contents); tileMatrixSet.srs_id = tileMatrixSetSrsId; tileMatrixSet.min_x = tileMatrixSetBoundingBox.minLongitude; tileMatrixSet.min_y = tileMatrixSetBoundingBox.minLatitude; tileMatrixSet.max_x = tileMatrixSetBoundingBox.maxLongitude; tileMatrixSet.max_y = tileMatrixSetBoundingBox.maxLatitude; return this.createTileMatrixSetTable() .then(function() { return this.createTileMatrixTable(); }.bind(this)) .then(function() { return this.createTileTable(tileTable); }.bind(this)) .then(function() { return this.getContentsDao().create(contents); }.bind(this)) .then(function() { return this.getTileMatrixSetDao().create(tileMatrixSet); }.bind(this)) .then(function() { return tileMatrixSet; }); }; /** * Create the tables and rows necessary to store tiles in a {@link module:tiles/matrixset~TileMatrixSet}. * This will create a [tile matrix row]{@link module:tiles/matrix~TileMatrix} * for every integral zoom level in the range `[minZoom..maxZoom]`. * * @param {BoundingBox} epsg3857TileBoundingBox * @param {module:tiles/matrixset~TileMatrixSet} tileMatrixSet * @param {number} minZoom * @param {number} maxZoom * @param {number} [tileSize=256] optional tile size in pixels * @returns {module:geoPackage~GeoPackage} `this` `GeoPackage` */ GeoPackage.prototype.createStandardWebMercatorTileMatrix = function(epsg3857TileBoundingBox, tileMatrixSet, minZoom, maxZoom, tileSize) { tileSize = tileSize || 256; var tileMatrixDao = this.getTileMatrixDao(); for (var zoom = minZoom; zoom <= maxZoom; zoom++) { var box = TileBoundingBoxUtils.webMercatorTileBox(epsg3857TileBoundingBox, zoom); var matrixWidth = (box.maxX - box.minX) + 1; var matrixHeight = (box.maxY - box.minY) + 1; var pixelXSize = ((epsg3857TileBoundingBox.maxLongitude - epsg3857TileBoundingBox.minLongitude) / matrixWidth) / tileSize; var pixelYSize = ((epsg3857TileBoundingBox.maxLatitude - epsg3857TileBoundingBox.minLatitude) / matrixHeight) / tileSize; var tileMatrix = new TileMatrix(); tileMatrix.table_name = tileMatrixSet.table_name; tileMatrix.zoom_level = zoom; tileMatrix.matrix_width = matrixWidth; tileMatrix.matrix_height = matrixHeight; tileMatrix.tile_width = tileSize; tileMatrix.tile_height = tileSize; tileMatrix.pixel_x_size = pixelXSize; tileMatrix.pixel_y_size = pixelYSize; tileMatrixDao.create(tileMatrix); } return this; }; /** * Adds a tile to the GeoPackage * @param {object} tile Byte array or Buffer containing the tile bytes * @param {String} tableName Table name to add the tile to * @param {Number} zoom zoom level of this tile * @param {Number} tileRow row of this tile * @param {Number} tileColumn column of this tile */ GeoPackage.prototype.addTile = function(tileStream, tableName, zoom, tileRow, tileColumn) { var tileDao = this.getTileDao(tableName); var newRow = tileDao.newRow(); newRow.setZoomLevel(zoom); newRow.setTileColumn(tileColumn); newRow.setTileRow(tileRow); newRow.setTileData(tileStream); return tileDao.create(newRow); }; /** * Create the Data Columns table if it does not already exist * @param {Function} callback called with an error if one occurred otherwise the table now exists */ GeoPackage.prototype.createDataColumns = function() { var dao = this.getDataColumnsDao(); if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createDataColumns(); }; /** * Create the Data Column Constraints table if it does not already exist * @param {Function} callback called with an error if one occurred otherwise the table now exists */ GeoPackage.prototype.createDataColumnConstraintsTable = function () { var dao = this.getDataColumnConstraintsDao(); if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createDataColumnConstraints(); }; GeoPackage.prototype.createMetadataTable = function () { var dao = this.getMetadataDao() if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createMetadata(); }; GeoPackage.prototype.createMetadataReferenceTable = function () { var dao = this.getMetadataReferenceDao() if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createMetadataReference(); }; GeoPackage.prototype.createExtensionTable = function () { var dao = this.getExtensionDao() if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createExtensions(); }; GeoPackage.prototype.createTableIndexTable = function () { var dao = this.getTableIndexDao(); if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createTableIndex(); }; GeoPackage.prototype.createGeometryIndexTable = function() { var dao = this.getGeometryIndexDao(); if (dao.isTableExists()) { return Promise.resolve().then(function() { return true; }); } return this.tableCreator.createGeometryIndex(); }; GeoPackage.prototype.createStyleMappingTable = function(tableName, columns, dataColumns) { return Promise.resolve() .then(function() { var attributeTable = new StyleMappingTable(tableName, columns); var result = this.tableCreator.createUserTable(attributeTable); var contents = new Contents(); contents.table_name = tableName; contents.data_type = ContentsDao.GPKG_CDT_ATTRIBUTES_NAME; contents.identifier = tableName; contents.last_change = new Date().toISOString(); return this.getContentsDao().create(contents); }.bind(this)) .then(function() { if (dataColumns) { return this.createDataColumns() .then(function() { var dataColumnsDao = this.getDataColumnsDao(); dataColumns.forEach(function(dataColumn) { dataColumnsDao.create(dataColumn); }); }.bind(this)); } }.bind(this)) .then(function() { return true; }); } /** * Get the application id of the GeoPackage * @param {Function} callback callback called with the application id */ GeoPackage.prototype.getApplicationId = function() { var connection = this.getDatabase(); return connection.getApplicationId(); } GeoPackage.prototype.getInfoForTable = function (tableDao) { var info = {}; info.tableName = tableDao.table_name; info.tableType = tableDao.table.getTableType(); info.count = tableDao.getCount(); if (info.tableType === UserTable.FEATURE_TABLE) { info.geometryColumns = {}; info.geometryColumns.tableName = tableDao.geometryColumns.table_name; info.geometryColumns.geometryColumn = tableDao.geometryColumns.column_name; info.geometryColumns.geometryTypeName = tableDao.geometryColumns.geometry_type_name; info.geometryColumns.z = tableDao.geometryColumns.z; info.geometryColumns.m = tableDao.geometryColumns.m; } if (info.tableType === UserTable.TILE_TABLE) { info.minZoom = tableDao.minZoom; info.maxZoom = tableDao.maxZoom; info.minWebMapZoom = tableDao.minWebMapZoom; info.maxWebMapZoom = tableDao.maxWebMapZoom; info.zoomLevels = tableDao.tileMatrices.length; } var dao; var contentsRetriever; if (info.tableType === UserTable.FEATURE_TABLE) { dao = this.getGeometryColumnsDao(); contentsRetriever = tableDao.geometryColumns; } else if (info.tableType === UserTable.TILE_TABLE) { dao = this.getTileMatrixSetDao(); contentsRetriever = tableDao.tileMatrixSet; info.tileMatrixSet = {}; info.tileMatrixSet.srsId = tableDao.tileMatrixSet.srs_id; info.tileMatrixSet.minX = tableDao.tileMatrixSet.min_x; info.tileMatrixSet.maxX = tableDao.tileMatrixSet.max_x; info.tileMatrixSet.minY = tableDao.tileMatrixSet.min_y; info.tileMatrixSet.maxY = tableDao.tileMatrixSet.max_y; } var contents = dao.getContents(contentsRetriever); info.contents = {}; info.contents.tableName = contents.table_name; info.contents.dataType = contents.data_type; info.contents.identifier = contents.identifier; info.contents.description = contents.description; info.contents.lastChange = contents.last_change; info.contents.minX = contents.min_x; info.contents.maxX = contents.max_x; info.contents.minY = contents.min_y; info.contents.maxY = contents.max_y; var contentsDao = this.getContentsDao(); var contentsSrs = contentsDao.getSrs(contents); info.contents.srs = { name:contentsSrs.srs_name, id:contentsSrs.srs_id, organization:contentsSrs.organization, organization_coordsys_id:contentsSrs.organization_coordsys_id, definition:contentsSrs.definition, description:contentsSrs.description }; var srs = tableDao.getSrs(); info.srs = { name:srs.srs_name, id:srs.srs_id, organization:srs.organization, organization_coordsys_id:srs.organization_coordsys_id, definition:srs.definition, description:srs.description }; info.columns = []; info.columnMap = {}; var dcd = this.getDataColumnsDao(); tableDao.table.columns.forEach(function(column) { var dataColumn = dcd.getDataColumns(tableDao.table.table_name, column.name); info.columns.push({ index: column.index, name: column.name, max: column.max, min: column.min, notNull: column.notNull, primaryKey: column.primaryKey, dataType: column.dataType ? DataTypes.name(column.dataType) : '', displayName: dataColumn && dataColumn.name ? dataColumn.name : column.name, dataColumn: dataColumn }); info.columnMap[column.name] = info.columns[info.columns.length-1]; }.bind(this)); return info; }; },{"./attributes/attributeDao":3,"./attributes/attributeTable":5,"./attributes/attributeTableReader":6,"./core/contents":8,"./core/srs":9,"./dataColumnConstraints":12,"./dataColumns":13,"./db/dataTypes":14,"./db/tableCreator":19,"./extension":25,"./extension/contents/.":23,"./extension/contents/contentsIdDao":22,"./extension/crsWkt":24,"./extension/index/geometryIndex":27,"./extension/index/tableIndex":28,"./extension/relatedTables":32,"./extension/relatedTables/extendedRelation":31,"./extension/schema":45,"./extension/style/.":54,"./features/columns":64,"./features/user/featureDao":66,"./features/user/featureTable":68,"./features/user/featureTableReader":69,"./metadata":74,"./metadata/reference":75,"./proj4Defs":77,"./tiles/matrix":90,"./tiles/matrixset":91,"./tiles/tileBoundingBoxUtils":93,"./tiles/user/tileDao":96,"./tiles/user/tileTable":99,"./tiles/user/tileTableReader":100,"./user/userTable":108,"proj4":285}],71:[function(require,module,exports){ /** * GeoPackage Constants module. * @module dao/geoPackageConstants */ /** @constant {string} GEOPACKAGE_EXTENSION Extension to GeoPackage files */ exports.GEOPACKAGE_EXTENSION = 'gpkg'; /** @constant {string} GEOPACKAGE_EXTENDED_EXTENSION Extension to GeoPackage extension files */ exports.GEOPACKAGE_EXTENDED_EXTENSION = 'gpkx'; /** @constant {string} APPLICATION_ID GeoPackage application id */ exports.APPLICATION_ID = 'GPKG'; /** @constant {string} USER_VERSION GeoPackage user version */ exports.USER_VERSION = '10200'; /** @constant {string} GEOPACKAGE_EXTENSION_AUTHOR GeoPackage author */ exports.GEOPACKAGE_EXTENSION_AUTHOR = exports.GEOPACKAGE_EXTENSION; /** @constant {string} GEOMETRY_EXTENSION_PREFIX Geometry extension prefix */ exports.GEOMETRY_EXTENSION_PREFIX = 'geom'; /** @constant {string} GEOPACKAGE_GEOMETRY_MAGIX_NUMBER Expected magic number */ exports.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER = 'GP'; /** @constant {string} GEOPACKAGE_GEOMETRY_VERSION_1 Expected version 1 value */ exports.GEOPACKAGE_GEOMETRY_VERSION_1 = 0; /** @constant {string} SQLITE_HEADER_PREFIX SQLite header string prefix */ exports.SQLITE_HEADER_PREFIX = 'SQLite format 3'; },{}],72:[function(require,module,exports){ var wkx = require('wkx'); var turfBbox = require('@turf/bbox'); module.exports.buildEnvelopeWithGeometry = function(wkbGeometry) { var geoJson = wkbGeometry.toGeoJSON(); var bbox = turfBbox(geoJson); return { minX: bbox[0], minY: bbox[1], maxX: bbox[2], maxY: bbox[3] }; } module.exports.expandEnvelopeForGeometry = function(envelope, wkbGeometry) { } },{"@turf/bbox":117,"wkx":360}],73:[function(require,module,exports){ (function (Buffer){ /** * GeometryData module. * @module geom/geometryData */ var GeoPackageConstants = require('../geoPackageConstants'); var wkx = require('wkx'); var BIG_ENDIAN = 0; var LITTLE_ENDIAN = 1; /** * GeoPackage Geometry Data */ var GeometryData = function(buffer) { this.empty = true; this.byteOrder = BIG_ENDIAN; if (buffer) { this.fromData(buffer); } } module.exports = GeometryData; GeometryData.prototype.setSrsId = function(srsId) { this.srsId = srsId; } GeometryData.prototype.setGeometry = function(wkbGeometry) { this.empty = false; this.geometry = wkbGeometry; } GeometryData.prototype.setEnvelope = function(envelope) { this.envelope = envelope; } GeometryData.prototype.toGeoJSON = function() { return this.geometry.toGeoJSON(); } GeometryData.prototype.fromData = function (buffer) { this.buffer = buffer; if (buffer instanceof Uint8Array) { this.buffer = buffer = Buffer.from(buffer); } var magicString = buffer.toString('ascii', 0, 2); if (magicString !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER) { throw new Error('Unexpected GeoPackage Geometry magic number: ' + magicString + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER); } var version = buffer.readUInt8(2); if (version !== GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1) { throw new Error('Unexpected GeoPackage Geometry version ' + version + ', Expected: ' + GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1); } var flags = buffer.readUInt8(3); var envelopeIndicator = this.readFlags(flags); this.srsId = buffer[this.byteOrder ? 'readUInt32LE' : 'readUInt32BE'](4); var envelopeAndOffset = this.readEnvelope(envelopeIndicator, buffer); this.envelope = envelopeAndOffset.envelope; var offset = envelopeAndOffset.offset; var wkbBuffer = buffer.slice(offset); try { this.geometry = wkx.Geometry.parse(wkbBuffer); this.geometryError = undefined; } catch (error) { this.geometryError = error.message; console.log('Error parsing geometry'); } }; GeometryData.prototype.toData = function() { var header = Buffer.alloc(8); // Write GP as the 2 byte magic number header.write(GeoPackageConstants.GEOPACKAGE_GEOMETRY_MAGIC_NUMBER); // Write a byte as the version value of 0 = version 1 header.writeUInt8(GeoPackageConstants.GEOPACKAGE_GEOMETRY_VERSION_1, 2); // Build and write a flags byte var flags = this.buildFlagsByte(); header.writeUInt8(flags, 3); // write the 4 byte srs id header[this.byteOrder ? 'writeUInt32LE' : 'writeUInt32BE'](this.srsId, 4); var envelopeBuffer = this.writeEnvelope(this.envelope); var concatArray = [header, envelopeBuffer]; try { concatArray.push(this.geometry.toWkb()); this.geometryError = undefined; } catch (error) { this.geometryError = error.message; } this.buffer = Buffer.concat(concatArray); return this.buffer; }; GeometryData.prototype.writeEnvelope = function() { if (!this.envelope) return Buffer.alloc(0); var writeDoubleMethod = 'writeDouble' + (this.byteOrder ? 'LE' : 'BE'); var length = 32; if (this.envelope.hasZ) { length += 16; } if (this.envelope.hasM) { length += 16; } var envelopeBuffer = Buffer.alloc(length); envelopeBuffer[writeDoubleMethod](this.envelope.minX, 0); envelopeBuffer[writeDoubleMethod](this.envelope.maxX, 8); envelopeBuffer[writeDoubleMethod](this.envelope.minY, 16); envelopeBuffer[writeDoubleMethod](this.envelope.maxY, 24); var position = 32; if (this.envelope.hasZ) { envelopeBuffer[writeDoubleMethod](this.envelope.minZ, position); envelopeBuffer[writeDoubleMethod](this.envelope.maxZ, position+8); position = 48; } if (this.envelope.hasM) { envelopeBuffer[writeDoubleMethod](this.envelope.minM, position); envelopeBuffer[writeDoubleMethod](this.envelope.maxM, position+8); } return envelopeBuffer; }; GeometryData.prototype.buildFlagsByte = function() { var flag = 0; // Add the binary type to bit 5, 0 for standard and 1 for extended var binaryType = this.extended ? 1 : 0; flag += (binaryType << 5); // Add the empty geometry flag to bit 4, 0 for non-empty and 1 for empty var emptyValue = this.empty ? 1 : 0; flag += (emptyValue << 4); // Add the envelope contents indicator code (3-bit unsigned integer to bits 3, 2, and 1) var envelopeIndicator = !this.envelope ? 0 : this.getIndicatorWithEnvelope(this.envelope); flag += (envelopeIndicator << 1); // Add the byte order to bit 0, 0 for Big Endian and 1 for Little Endian var byteOrderValue = (this.byteOrder === BIG_ENDIAN) ? 0 : 1; flag += byteOrderValue; return flag; }; GeometryData.prototype.getIndicatorWithEnvelope = function(envelope) { var indicator = 1; if (envelope.hasZ) { indicator++; } if (envelope.hasM) { indicator += 2; } return indicator; }; GeometryData.prototype.readFlags = function (flagsInt) { // Verify the reserved bits at 7 and 6 are 0 var reserved7 = (flagsInt >> 7) & 1; var reserved6 = (flagsInt >> 6) & 1; if (reserved7 !== 0 || reserved6 !== 0) { throw new Error('Unexpected GeoPackage Geometry flags. Flag bit 7 and 6 should both be 0, 7='+reserved7+', 6='+ reserved6); } // Get the binary type from bit 5, 0 for standard and 1 for extended var binaryType = (flagsInt >> 5) & 1; this.extended = binaryType == 1; // Get the empty geometry flag from bit 4, 0 for non-empty and 1 for // empty var emptyValue = (flagsInt >> 4) & 1; this.empty = emptyValue == 1; // Get the envelope contents indicator code (3-bit unsigned integer from // bits 3, 2, and 1) var envelopeIndicator = (flagsInt >> 1) & 7; if (envelopeIndicator > 4) { throw new Error('Unexpected GeoPackage Geometry flags. Envelope contents indicator must be between 0 and 4. Actual: ' + envelopeIndicator); } // Get the byte order from bit 0, 0 for Big Endian and 1 for Little Endian var byteOrderValue = flagsInt & 1; this.byteOrder = byteOrderValue; return envelopeIndicator; }; GeometryData.prototype.readEnvelope = function (envelopeIndicator, buffer) { var readDoubleMethod = 'readDouble' + (this.byteOrder ? 'LE' : 'BE'); var envelopeByteOffset = 8; reads = 0; var envelopeAndOffset = { envelope: undefined, offset: envelopeByteOffset }; if (envelopeIndicator <= 0) { return envelopeAndOffset; } var envelope = {}; // Read x and y values and create envelope envelope.minX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); envelope.maxX = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); envelope.minY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); envelope.maxY = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); envelope.hasZ = false; var minZ = undefined; var maxZ = undefined; envelope.hasM = false; var minM = undefined; var maxM = undefined; // Read z values if (envelopeIndicator === 2 || envelopeIndicator === 4) { envelope.hasZ = true; envelope.minZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); envelope.maxZ = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); } // Read m values if (envelopeIndicator === 3 || envelopeIndicator === 4) { envelope.hasM = true; envelope.minM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); envelope.maxM = buffer[readDoubleMethod](envelopeByteOffset + (8 * reads++)); } envelopeAndOffset.envelope = envelope; envelopeAndOffset.offset = envelopeByteOffset + (8 * reads); return envelopeAndOffset; }; }).call(this,require("buffer").Buffer) },{"../geoPackageConstants":71,"buffer":182,"wkx":360}],74:[function(require,module,exports){ /** * Metadata module. * @module metadata * @see module:dao/dao */ var Dao = require('../dao/dao'); var util = require('util'); /** * Contains metadata in MIME encodings structured in accordance with any * authoritative metadata specification * @class Metadata */ var Metadata = function() { /** * Metadata primary key * @member {Number} */ this.id; /** * Case sensitive name of the data scope to which this metadata applies; see Metadata Scopes below * @member {string} */ this.md_scope; /** * URI reference to the metadata structure definition authority * @member {string} */ this.md_standard_uri; /** * MIME encoding of metadata * @member {string} */ this.mime_type; /** * metadata * @member {string} */ this.metadata; } Metadata.UNDEFINED = "undefined"; Metadata.FIELD_SESSION = "fieldSession"; Metadata.COLLECTION_SESSION = "collectionSession"; Metadata.SERIES = "series"; Metadata.DATASET = "dataset"; Metadata.FEATURE_TYPE = "featureType"; Metadata.FEATURE = "feature"; Metadata.ATTRIBUTE_TYPE = "attributeType"; Metadata.ATTRIBUTE = "attribute"; Metadata.TILE = "tile"; Metadata.MODEL = "model"; Metadata.CATALOG = "catalog"; Metadata.SCHEMA = "schema"; Metadata.TAXONOMY = "taxonomy"; Metadata.SOFTWARE = "software"; Metadata.SERVICE = "service"; Metadata.COLLECTION_HARDWARE = "collectionHardware"; Metadata.NON_GEOGRAPHIC_DATASET = "nonGeographicDataset"; Metadata.DIMENSION_GROUP = "dimensionGroup"; Metadata.prototype.getScopeInformation = function(type) { switch(type) { case Metadata.UNDEFINED: return { name: Metadata.UNDEFINED, code: 'NA', definition: 'Metadata information scope is undefined' }; case Metadata.FIELD_SESSION: return { name: Metadata.FIELD_SESSION, code: '012', definition: 'Information applies to the field session' }; case Metadata.COLLECTION_SESSION: return { name: Metadata.COLLECTION_SESSION, code: '004', definition: 'Information applies to the collection session' }; case Metadata.SERIES: return { name: Metadata.SERIES, code: '006', definition: 'Information applies to the (dataset) series' }; case Metadata.DATASET: return { name: Metadata.DATASET, code: '005', definition: 'Information applies to the (geographic feature) dataset' }; case Metadata.FEATURE_TYPE: return { name: Metadata.FEATURE_TYPE, code: '010', definition: 'Information applies to a feature type (class)' }; case Metadata.FEATURE: return { name: Metadata.FEATURE, code: '009', definition: 'Information applies to a feature (instance)' }; case Metadata.ATTRIBUTE_TYPE: return { name: Metadata.ATTRIBUTE_TYPE, code: '002', definition: 'Information applies to the attribute class' }; case Metadata.ATTRIBUTE: return { name: Metadata.ATTRIBUTE, code: '001', definition: 'Information applies to the characteristic of a feature (instance)' }; case Metadata.TILE: return { name: Metadata.TILE, code: '016', definition: 'Information applies to a tile, a spatial subset of geographic data' }; case Metadata.MODEL: return { name: Metadata.MODEL, code: '015', definition: 'Information applies to a copy or imitation of an existing or hypothetical object' }; case Metadata.CATALOG: return { name: Metadata.CATALOG, code: 'NA', definition: 'Metadata applies to a feature catalog' }; case Metadata.SCHEMA: return { name: Metadata.SCHEMA, code: 'NA', definition: 'Metadata applies to an application schema' }; case Metadata.TAXONOMY: return { name: Metadata.TAXONOMY, code: 'NA', definition: 'Metadata applies to a taxonomy or knowledge system' }; case Metadata.SOFTWARE: return { name: Metadata.SOFTWARE, code: '013', definition: 'Information applies to a computer program or routine' }; case Metadata.SERVICE: return { name: Metadata.SERVICE, code: '014', definition: 'Information applies to a capability which a service provider entity makes available to a service user entity through a set of interfaces that define a behaviour, such as a use case' }; case Metadata.COLLECTION_HARDWARE: return { name: Metadata.COLLECTION_HARDWARE, code: '003', definition: 'Information applies to the collection hardware class' }; case Metadata.NON_GEOGRAPHIC_DATASET: return { name: Metadata.NON_GEOGRAPHIC_DATASET, code: '007', definition: 'Information applies to non-geographic data' }; case Metadata.DIMENSION_GROUP: return { name: Metadata.DIMENSION_GROUP, code: '008', definition: 'Information applies to a dimension group' }; } } /** * Metadata Data Access Object * @class * @extends {module:dao/dao~Dao} */ var MetadataDao = function(geoPackage) { Dao.call(this, geoPackage); }; util.inherits(MetadataDao, Dao); MetadataDao.prototype.createObject = function() { return new Metadata(); }; MetadataDao.TABLE_NAME = "gpkg_metadata"; MetadataDao.COLUMN_ID = "id"; MetadataDao.COLUMN_MD_SCOPE = "md_scope"; MetadataDao.COLUMN_MD_STANDARD_URI = "md_standard_uri"; MetadataDao.COLUMN_MIME_TYPE = "mime_type"; MetadataDao.COLUMN_METADATA = "metadata"; MetadataDao.prototype.gpkgTableName = MetadataDao.TABLE_NAME; MetadataDao.prototype.idColumns = [MetadataDao.COLUMN_ID]; module.exports.MetadataDao = MetadataDao; module.exports.Metadata = Metadata; },{"../dao/dao":11,"util":343}],75:[function(require,module,exports){ /** * MetadataReference module. * @module metadata/reference * @see module:dao/dao */ var Dao = require('../../dao/dao') , ColumnValues = require('../../dao/columnValues'); var util = require('util'); /** * Links metadata in the gpkg_metadata table to data in the feature, and tiles tables * @class MetadataReference */ var MetadataReference = function() { /** * Lowercase metadata reference scope; one of ‘geopackage’, ‘table’, ‘column’, ’row’, ’row/col’ * @member {string} */ this.reference_scope; /** * Name of the table to which this metadata reference applies, or NULL for reference_scope of ‘geopackage’. * @member {string} */ this.table_name; /** * Name of the column to which this metadata reference applies; NULL for * reference_scope of ‘geopackage’,‘table’ or ‘row’, or the name of a column * in the table_name table for reference_scope of ‘column’ or ‘row/col’ * @member {string} */ this.column_name; /** * NULL for reference_scope of ‘geopackage’, ‘table’ or ‘column’, or the * rowed of a row record in the table_name table for reference_scope of * ‘row’ or ‘row/col’ * @member {Number} */ this.row_id_value; /** * timestamp value in ISO 8601 format as defined by the strftime function * '%Y-%m-%dT%H:%M:%fZ' format string applied to the current time * @member {Date} */ this.timestamp; /** * gpkg_metadata table id column value for the metadata to which this * gpkg_metadata_reference applies * @member {Number} */ this.md_file_id; /** * gpkg_metadata table id column value for the hierarchical parent * gpkg_metadata for the gpkg_metadata to which this gpkg_metadata_reference * applies, or NULL if md_file_id forms the root of a metadata hierarchy * @member {Number} */ this.md_parent_id; } MetadataReference.prototype.toDatabaseValue = function(columnName) { if (columnName === 'timestamp') { return this.timestamp.toISOString(); } return this[columnName]; } /** * Set the metadata * @param {Metadata} metadata metadata */ MetadataReference.prototype.setMetadata = function(metadata) { if (metadata) { this.md_file_id = metadata.id; } else { this.md_file_id = -1; } } /** * Set the parent metadata * @param {Metadata} metadata parent metadata */ MetadataReference.prototype.setParentMetadata = function(metadata) { if (metadata) { this.md_parent_id = metadata.id; } else { this.md_parent_id = -1; } } MetadataReference.prototype.setReferenceScopeType = function(referenceScopeType) { this.reference_scope = referenceScopeType; switch(referenceScopeType) { case MetadataReference.GEOPACKAGE: this.table_name = undefined; this.column_name = undefined; this.row_id_value = undefined; break; case MetadataReference.TABLE: this.column_name = undefined; this.row_id_value = undefined; break; case MetadataReference.ROW: this.column_name = undefined; break; case MetadataReference.COLUMN: this.row_id_value = undefined; break; } } MetadataReference.GEOPACKAGE = "geopackage"; MetadataReference.TABLE = "table"; MetadataReference.COLUMN = "column"; MetadataReference.ROW = "row"; MetadataReference.ROW_COL = "row/col"; /** * Metadata Reference Data Access Object * @class * @extends {module:dao/dao~Dao} */ var MetadataReferenceDao = function(geoPackage) { Dao.call(this, geoPackage); }; util.inherits(MetadataReferenceDao, Dao); MetadataReferenceDao.prototype.createObject = function() { return new MetadataReference(); }; MetadataReferenceDao.prototype.removeMetadataParent = function(parentId) { var values = {}; values[MetadataReferenceDao.COLUMN_MD_PARENT_ID] = null; var where = this.buildWhereWithFieldAndValue(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId); var whereArgs = this.buildWhereArgs(parentId); return this.updateWithValues(values, where, whereArgs); } MetadataReferenceDao.prototype.queryByMetadataAndParent = function (fileId, parentId) { var columnValues = new ColumnValues(); columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId); columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId); return this.queryForFieldValues(columnValues); }; MetadataReferenceDao.prototype.queryByMetadata = function(fileId) { var columnValues = new ColumnValues(); columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_FILE_ID, fileId); return this.queryForFieldValues(columnValues); }; MetadataReferenceDao.prototype.queryByMetadataParent = function(parentId) { var columnValues = new ColumnValues(); columnValues.addColumn(MetadataReferenceDao.COLUMN_MD_PARENT_ID, parentId); return this.queryForFieldValues(columnValues); }; MetadataReferenceDao.TABLE_NAME = "gpkg_metadata_reference"; MetadataReferenceDao.COLUMN_REFERENCE_SCOPE = "reference_scope"; MetadataReferenceDao.COLUMN_TABLE_NAME = "table_name"; MetadataReferenceDao.COLUMN_COLUMN_NAME = "column_name"; MetadataReferenceDao.COLUMN_ROW_ID = "row_id"; MetadataReferenceDao.COLUMN_TIMESTAMP = "timestamp"; MetadataReferenceDao.COLUMN_MD_FILE_ID = "md_file_id"; MetadataReferenceDao.COLUMN_MD_PARENT_ID = "md_parent_id"; MetadataReferenceDao.prototype.gpkgTableName = MetadataReferenceDao.TABLE_NAME; MetadataReferenceDao.prototype.idColumns = [MetadataReferenceDao.COLUMN_MD_FILE_ID, MetadataReferenceDao.COLUMN_MD_PARENT_ID]; module.exports.MetadataReferenceDao = MetadataReferenceDao; module.exports.MetadataReference = MetadataReference; },{"../../dao/columnValues":10,"../../dao/dao":11,"util":343}],76:[function(require,module,exports){ module.exports = function(optionList) { var optionBuilder = {}; optionList.forEach(function(option) { optionBuilder['set'+option.slice(0,1).toUpperCase()+option.slice(1)] = function(param) { this[option] = param; return this; } optionBuilder['get'+option.slice(0,1).toUpperCase()+option.slice(1)] = function() { return this[option]; } }); return optionBuilder; } },{}],77:[function(require,module,exports){ module.exports = { "EPSG:3819":'+proj=longlat +ellps=bessel +towgs84=595.48,121.69,515.35,4.115,-2.9383,0.853,-3.408 +no_defs ', "EPSG:3821":'+proj=longlat +ellps=aust_SA +no_defs ', "EPSG:3824":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:3889":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:3906":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +no_defs ', "EPSG:4001":'+proj=longlat +ellps=airy +no_defs ', "EPSG:4002":'+proj=longlat +ellps=mod_airy +no_defs ', "EPSG:4003":'+proj=longlat +ellps=aust_SA +no_defs ', "EPSG:4004":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4005":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +no_defs ', "EPSG:4006":'+proj=longlat +ellps=bess_nam +no_defs ', "EPSG:4007":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', "EPSG:4008":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4009":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ', "EPSG:4010":'+proj=longlat +a=6378300.789 +b=6356566.435 +no_defs ', "EPSG:4011":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4012":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4013":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +no_defs ', "EPSG:4014":'+proj=longlat +a=6378249.2 +b=6356514.996941779 +no_defs ', "EPSG:4015":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +no_defs ', "EPSG:4016":'+proj=longlat +ellps=evrstSS +no_defs ', "EPSG:4018":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +no_defs ', "EPSG:4019":'+proj=longlat +ellps=GRS80 +no_defs ', "EPSG:4020":'+proj=longlat +ellps=helmert +no_defs ', "EPSG:4021":'+proj=longlat +a=6378160 +b=6356774.50408554 +no_defs ', "EPSG:4022":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4023":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4024":'+proj=longlat +ellps=krass +no_defs ', "EPSG:4025":'+proj=longlat +ellps=WGS66 +no_defs ', "EPSG:4027":'+proj=longlat +a=6376523 +b=6355862.933255573 +no_defs ', "EPSG:4028":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +no_defs ', "EPSG:4029":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ', "EPSG:4030":'+proj=longlat +ellps=WGS84 +no_defs ', "EPSG:4031":'+proj=longlat +ellps=WGS84 +no_defs ', "EPSG:4032":'+proj=longlat +a=6378136.2 +b=6356751.516927429 +no_defs ', "EPSG:4033":'+proj=longlat +a=6378136.3 +b=6356751.616592146 +no_defs ', "EPSG:4034":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ', "EPSG:4035":'+proj=longlat +a=6371000 +b=6371000 +no_defs ', "EPSG:4036":'+proj=longlat +ellps=GRS67 +no_defs ', "EPSG:4041":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ', "EPSG:4042":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ', "EPSG:4043":'+proj=longlat +ellps=WGS72 +no_defs ', "EPSG:4044":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +no_defs ', "EPSG:4045":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +no_defs ', "EPSG:4046":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4047":'+proj=longlat +a=6371007 +b=6371007 +no_defs ', "EPSG:4052":'+proj=longlat +a=6370997 +b=6370997 +no_defs ', "EPSG:4053":'+proj=longlat +a=6371228 +b=6371228 +no_defs ', "EPSG:4054":'+proj=longlat +a=6378273 +b=6356889.449 +no_defs ', "EPSG:4055":'+proj=longlat +a=6378137 +b=6378137 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4075":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4081":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4120":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4121":'+proj=longlat +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +no_defs ', "EPSG:4122":'+proj=longlat +a=6378135 +b=6356750.304921594 +no_defs ', "EPSG:4123":'+proj=longlat +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +no_defs ', "EPSG:4124":'+proj=longlat +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +no_defs ', "EPSG:4125":'+proj=longlat +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +no_defs ', "EPSG:4126":'+proj=longlat +ellps=GRS80 +no_defs ', "EPSG:4127":'+proj=longlat +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +no_defs ', "EPSG:4128":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4129":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4130":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +no_defs ', "EPSG:4131":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +no_defs ', "EPSG:4132":'+proj=longlat +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +no_defs ', "EPSG:4133":'+proj=longlat +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +no_defs ', "EPSG:4134":'+proj=longlat +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +no_defs ', "EPSG:4135":'+proj=longlat +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +no_defs ', "EPSG:4136":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4137":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4138":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4139":'+proj=longlat +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +no_defs ', "EPSG:4140":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4141":'+proj=longlat +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +no_defs ', "EPSG:4142":'+proj=longlat +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +no_defs ', "EPSG:4143":'+proj=longlat +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +no_defs ', "EPSG:4144":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +no_defs ', "EPSG:4145":'+proj=longlat +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +no_defs ', "EPSG:4146":'+proj=longlat +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +no_defs ', "EPSG:4147":'+proj=longlat +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +no_defs ', "EPSG:4148":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4149":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +no_defs ', "EPSG:4150":'+proj=longlat +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +no_defs ', "EPSG:4151":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4152":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4153":'+proj=longlat +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +no_defs ', "EPSG:4154":'+proj=longlat +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +no_defs ', "EPSG:4155":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +no_defs ', "EPSG:4156":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +no_defs ', "EPSG:4157":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', "EPSG:4158":'+proj=longlat +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +no_defs ', "EPSG:4159":'+proj=longlat +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +no_defs ', "EPSG:4160":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4161":'+proj=longlat +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +no_defs ', "EPSG:4162":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4163":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4164":'+proj=longlat +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +no_defs ', "EPSG:4165":'+proj=longlat +ellps=intl +towgs84=-173,253,27,0,0,0,0 +no_defs ', "EPSG:4166":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4167":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4168":'+proj=longlat +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +no_defs ', "EPSG:4169":'+proj=longlat +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +no_defs ', "EPSG:4170":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4171":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4172":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4173":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4174":'+proj=longlat +a=6378300 +b=6356751.689189189 +no_defs ', "EPSG:4175":'+proj=longlat +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +no_defs ', "EPSG:4176":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4178":'+proj=longlat +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +no_defs ', "EPSG:4179":'+proj=longlat +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +no_defs ', "EPSG:4180":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4181":'+proj=longlat +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +no_defs ', "EPSG:4182":'+proj=longlat +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +no_defs ', "EPSG:4183":'+proj=longlat +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +no_defs ', "EPSG:4184":'+proj=longlat +ellps=intl +towgs84=-203,141,53,0,0,0,0 +no_defs ', "EPSG:4185":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4188":'+proj=longlat +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ', "EPSG:4189":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4190":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4191":'+proj=longlat +ellps=krass +no_defs ', "EPSG:4192":'+proj=longlat +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +no_defs ', "EPSG:4193":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ', "EPSG:4194":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ', "EPSG:4195":'+proj=longlat +ellps=intl +towgs84=105,326,-102.5,0,0,0.814,-0.6 +no_defs ', "EPSG:4196":'+proj=longlat +ellps=intl +towgs84=-45,417,-3.5,0,0,0.814,-0.6 +no_defs ', "EPSG:4197":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4198":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4199":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4200":'+proj=longlat +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +no_defs ', "EPSG:4201":'+proj=longlat +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +no_defs ', "EPSG:4202":'+proj=longlat +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +no_defs ', "EPSG:4203":'+proj=longlat +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +no_defs ', "EPSG:4204":'+proj=longlat +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +no_defs ', "EPSG:4205":'+proj=longlat +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +no_defs ', "EPSG:4206":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4207":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +no_defs ', "EPSG:4208":'+proj=longlat +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +no_defs ', "EPSG:4209":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +no_defs ', "EPSG:4210":'+proj=longlat +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +no_defs ', "EPSG:4211":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +no_defs ', "EPSG:4212":'+proj=longlat +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +no_defs ', "EPSG:4213":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +no_defs ', "EPSG:4214":'+proj=longlat +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +no_defs ', "EPSG:4215":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4216":'+proj=longlat +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +no_defs ', "EPSG:4218":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +no_defs ', "EPSG:4219":'+proj=longlat +ellps=bessel +towgs84=-384,664,-48,0,0,0,0 +no_defs ', "EPSG:4220":'+proj=longlat +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +no_defs ', "EPSG:4221":'+proj=longlat +ellps=intl +towgs84=-148,136,90,0,0,0,0 +no_defs ', "EPSG:4222":'+proj=longlat +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +no_defs ', "EPSG:4223":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +no_defs ', "EPSG:4224":'+proj=longlat +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +no_defs ', "EPSG:4225":'+proj=longlat +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +no_defs ', "EPSG:4226":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4227":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +no_defs ', "EPSG:4228":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4229":'+proj=longlat +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +no_defs ', "EPSG:4230":'+proj=longlat +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +no_defs ', "EPSG:4231":'+proj=longlat +ellps=intl +towgs84=-83.11,-97.38,-117.22,0.00569291,-0.0446976,0.0442851,0.1218 +no_defs ', "EPSG:4232":'+proj=longlat +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +no_defs ', "EPSG:4233":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ', "EPSG:4234":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4235":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4236":'+proj=longlat +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +no_defs ', "EPSG:4237":'+proj=longlat +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +no_defs ', "EPSG:4238":'+proj=longlat +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +no_defs ', "EPSG:4239":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +no_defs ', "EPSG:4240":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +no_defs ', "EPSG:4241":'+proj=longlat +a=6378249.144808011 +b=6356514.966204134 +no_defs ', "EPSG:4242":'+proj=longlat +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +no_defs ', "EPSG:4243":'+proj=longlat +a=6377299.36559538 +b=6356098.359005156 +no_defs ', "EPSG:4244":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +no_defs ', "EPSG:4245":'+proj=longlat +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +no_defs ', "EPSG:4246":'+proj=longlat +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +no_defs ', "EPSG:4247":'+proj=longlat +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +no_defs ', "EPSG:4248":'+proj=longlat +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +no_defs ', "EPSG:4249":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4250":'+proj=longlat +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +no_defs ', "EPSG:4251":'+proj=longlat +ellps=clrk80 +towgs84=-90,40,88,0,0,0,0 +no_defs ', "EPSG:4252":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4253":'+proj=longlat +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +no_defs ', "EPSG:4254":'+proj=longlat +ellps=intl +towgs84=16,196,93,0,0,0,0 +no_defs ', "EPSG:4255":'+proj=longlat +ellps=intl +towgs84=-333,-222,114,0,0,0,0 +no_defs ', "EPSG:4256":'+proj=longlat +ellps=clrk80 +towgs84=41,-220,-134,0,0,0,0 +no_defs ', "EPSG:4257":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +no_defs ', "EPSG:4258":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4259":'+proj=longlat +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +no_defs ', "EPSG:4260":'+proj=longlat +ellps=clrk80 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +no_defs ', "EPSG:4261":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +no_defs ', "EPSG:4262":'+proj=longlat +ellps=bessel +towgs84=639,405,60,0,0,0,0 +no_defs ', "EPSG:4263":'+proj=longlat +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +no_defs ', "EPSG:4264":'+proj=longlat +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +no_defs ', "EPSG:4265":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +no_defs ', "EPSG:4266":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +no_defs ', "EPSG:4267":'+proj=longlat +datum=NAD27 +no_defs ', "EPSG:4268":'+proj=longlat +a=6378450.047548896 +b=6356826.621488444 +no_defs ', "EPSG:4269":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4270":'+proj=longlat +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +no_defs ', "EPSG:4271":'+proj=longlat +ellps=intl +towgs84=-10,375,165,0,0,0,0 +no_defs ', "EPSG:4272":'+proj=longlat +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +no_defs ', "EPSG:4273":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +no_defs ', "EPSG:4274":'+proj=longlat +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +no_defs ', "EPSG:4275":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +no_defs ', "EPSG:4276":'+proj=longlat +ellps=WGS66 +no_defs ', "EPSG:4277":'+proj=longlat +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +no_defs ', "EPSG:4278":'+proj=longlat +ellps=airy +no_defs ', "EPSG:4279":'+proj=longlat +ellps=airy +no_defs ', "EPSG:4280":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4281":'+proj=longlat +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +no_defs ', "EPSG:4282":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +no_defs ', "EPSG:4283":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4284":'+proj=longlat +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +no_defs ', "EPSG:4285":'+proj=longlat +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +no_defs ', "EPSG:4286":'+proj=longlat +ellps=helmert +no_defs ', "EPSG:4287":'+proj=longlat +ellps=intl +towgs84=164,138,-189,0,0,0,0 +no_defs ', "EPSG:4288":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4289":'+proj=longlat +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +no_defs ', "EPSG:4291":'+proj=longlat +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +no_defs ', "EPSG:4292":'+proj=longlat +ellps=intl +towgs84=-355,21,72,0,0,0,0 +no_defs ', "EPSG:4293":'+proj=longlat +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +no_defs ', "EPSG:4294":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ', "EPSG:4295":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4296":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4297":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +no_defs ', "EPSG:4298":'+proj=longlat +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +no_defs ', "EPSG:4299":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ', "EPSG:4300":'+proj=longlat +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +no_defs ', "EPSG:4301":'+proj=longlat +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +no_defs ', "EPSG:4302":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +no_defs ', "EPSG:4303":'+proj=longlat +ellps=helmert +no_defs ', "EPSG:4304":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +no_defs ', "EPSG:4306":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4307":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +no_defs ', "EPSG:4308":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4309":'+proj=longlat +ellps=intl +towgs84=-155,171,37,0,0,0,0 +no_defs ', "EPSG:4310":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4311":'+proj=longlat +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +no_defs ', "EPSG:4312":'+proj=longlat +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +no_defs ', "EPSG:4313":'+proj=longlat +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +no_defs ', "EPSG:4314":'+proj=longlat +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +no_defs ', "EPSG:4315":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +no_defs ', "EPSG:4316":'+proj=longlat +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +no_defs ', "EPSG:4317":'+proj=longlat +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +no_defs ', "EPSG:4318":'+proj=longlat +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +no_defs ', "EPSG:4319":'+proj=longlat +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +no_defs ', "EPSG:4322":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ', "EPSG:4324":'+proj=longlat +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +no_defs ', "EPSG:4326":'+proj=longlat +datum=WGS84 +no_defs ', "EPSG:4463":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4470":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4475":'+proj=longlat +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +no_defs ', "EPSG:4483":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4490":'+proj=longlat +ellps=GRS80 +no_defs ', "EPSG:4555":'+proj=longlat +ellps=krass +no_defs ', "EPSG:4558":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4600":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4601":'+proj=longlat +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +no_defs ', "EPSG:4602":'+proj=longlat +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +no_defs ', "EPSG:4603":'+proj=longlat +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +no_defs ', "EPSG:4604":'+proj=longlat +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +no_defs ', "EPSG:4605":'+proj=longlat +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +no_defs ', "EPSG:4606":'+proj=longlat +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +no_defs ', "EPSG:4607":'+proj=longlat +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +no_defs ', "EPSG:4608":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4609":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:4610":'+proj=longlat +a=6378140 +b=6356755.288157528 +no_defs ', "EPSG:4611":'+proj=longlat +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +no_defs ', "EPSG:4612":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4613":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +no_defs ', "EPSG:4614":'+proj=longlat +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +no_defs ', "EPSG:4615":'+proj=longlat +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +no_defs ', "EPSG:4616":'+proj=longlat +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +no_defs ', "EPSG:4617":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4618":'+proj=longlat +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +no_defs ', "EPSG:4619":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4620":'+proj=longlat +ellps=clrk80 +towgs84=-106,-129,165,0,0,0,0 +no_defs ', "EPSG:4621":'+proj=longlat +ellps=intl +towgs84=137,248,-430,0,0,0,0 +no_defs ', "EPSG:4622":'+proj=longlat +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +no_defs ', "EPSG:4623":'+proj=longlat +ellps=intl +towgs84=-186,230,110,0,0,0,0 +no_defs ', "EPSG:4624":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4625":'+proj=longlat +ellps=intl +towgs84=186,482,151,0,0,0,0 +no_defs ', "EPSG:4626":'+proj=longlat +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +no_defs ', "EPSG:4627":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4628":'+proj=longlat +ellps=intl +towgs84=162,117,154,0,0,0,0 +no_defs ', "EPSG:4629":'+proj=longlat +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +no_defs ', "EPSG:4630":'+proj=longlat +ellps=intl +towgs84=84,274,65,0,0,0,0 +no_defs ', "EPSG:4631":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ', "EPSG:4632":'+proj=longlat +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +no_defs ', "EPSG:4633":'+proj=longlat +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +no_defs ', "EPSG:4634":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ', "EPSG:4635":'+proj=longlat +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +no_defs ', "EPSG:4636":'+proj=longlat +ellps=intl +towgs84=365,194,166,0,0,0,0 +no_defs ', "EPSG:4637":'+proj=longlat +ellps=intl +towgs84=325,154,172,0,0,0,0 +no_defs ', "EPSG:4638":'+proj=longlat +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +no_defs ', "EPSG:4639":'+proj=longlat +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +no_defs ', "EPSG:4640":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4641":'+proj=longlat +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +no_defs ', "EPSG:4642":'+proj=longlat +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +no_defs ', "EPSG:4643":'+proj=longlat +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +no_defs ', "EPSG:4644":'+proj=longlat +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +no_defs ', "EPSG:4645":'+proj=longlat +ellps=intl +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4646":'+proj=longlat +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +no_defs ', "EPSG:4657":'+proj=longlat +a=6377019.27 +b=6355762.5391 +towgs84=-28,199,5,0,0,0,0 +no_defs ', "EPSG:4658":'+proj=longlat +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +no_defs ', "EPSG:4659":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4660":'+proj=longlat +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +no_defs ', "EPSG:4661":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4662":'+proj=longlat +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +no_defs ', "EPSG:4663":'+proj=longlat +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +no_defs ', "EPSG:4664":'+proj=longlat +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +no_defs ', "EPSG:4665":'+proj=longlat +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +no_defs ', "EPSG:4666":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +no_defs ', "EPSG:4667":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4668":'+proj=longlat +ellps=intl +towgs84=-86,-98,-119,0,0,0,0 +no_defs ', "EPSG:4669":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4670":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4671":'+proj=longlat +a=6378249.2 +b=6356515 +no_defs ', "EPSG:4672":'+proj=longlat +ellps=intl +towgs84=175,-38,113,0,0,0,0 +no_defs ', "EPSG:4673":'+proj=longlat +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +no_defs ', "EPSG:4674":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4675":'+proj=longlat +ellps=clrk66 +towgs84=-100,-248,259,0,0,0,0 +no_defs ', "EPSG:4676":'+proj=longlat +ellps=krass +no_defs ', "EPSG:4677":'+proj=longlat +ellps=krass +no_defs ', "EPSG:4678":'+proj=longlat +ellps=krass +towgs84=44.585,-131.212,-39.544,0,0,0,0 +no_defs ', "EPSG:4679":'+proj=longlat +ellps=clrk80 +towgs84=-80.01,253.26,291.19,0,0,0,0 +no_defs ', "EPSG:4680":'+proj=longlat +ellps=clrk80 +towgs84=124.5,-63.5,-281,0,0,0,0 +no_defs ', "EPSG:4681":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4682":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +no_defs ', "EPSG:4683":'+proj=longlat +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +no_defs ', "EPSG:4684":'+proj=longlat +ellps=intl +towgs84=-133,-321,50,0,0,0,0 +no_defs ', "EPSG:4685":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4686":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4687":'+proj=longlat +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +no_defs ', "EPSG:4688":'+proj=longlat +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +no_defs ', "EPSG:4689":'+proj=longlat +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +no_defs ', "EPSG:4690":'+proj=longlat +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +no_defs ', "EPSG:4691":'+proj=longlat +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +no_defs ', "EPSG:4692":'+proj=longlat +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +no_defs ', "EPSG:4693":'+proj=longlat +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +no_defs ', "EPSG:4694":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4695":'+proj=longlat +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +no_defs ', "EPSG:4696":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4697":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4698":'+proj=longlat +ellps=intl +towgs84=145,-187,103,0,0,0,0 +no_defs ', "EPSG:4699":'+proj=longlat +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +no_defs ', "EPSG:4700":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4701":'+proj=longlat +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +no_defs ', "EPSG:4702":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4703":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4704":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4705":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4706":'+proj=longlat +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +no_defs ', "EPSG:4707":'+proj=longlat +ellps=intl +towgs84=114,-116,-333,0,0,0,0 +no_defs ', "EPSG:4708":'+proj=longlat +ellps=aust_SA +towgs84=-491,-22,435,0,0,0,0 +no_defs ', "EPSG:4709":'+proj=longlat +ellps=intl +towgs84=145,75,-272,0,0,0,0 +no_defs ', "EPSG:4710":'+proj=longlat +ellps=intl +towgs84=-320,550,-494,0,0,0,0 +no_defs ', "EPSG:4711":'+proj=longlat +ellps=intl +towgs84=124,-234,-25,0,0,0,0 +no_defs ', "EPSG:4712":'+proj=longlat +ellps=intl +towgs84=-205,107,53,0,0,0,0 +no_defs ', "EPSG:4713":'+proj=longlat +ellps=clrk80 +towgs84=-79,-129,145,0,0,0,0 +no_defs ', "EPSG:4714":'+proj=longlat +ellps=intl +towgs84=-127,-769,472,0,0,0,0 +no_defs ', "EPSG:4715":'+proj=longlat +ellps=intl +towgs84=-104,-129,239,0,0,0,0 +no_defs ', "EPSG:4716":'+proj=longlat +ellps=intl +towgs84=298,-304,-375,0,0,0,0 +no_defs ', "EPSG:4717":'+proj=longlat +ellps=clrk66 +towgs84=-2,151,181,0,0,0,0 +no_defs ', "EPSG:4718":'+proj=longlat +ellps=intl +towgs84=230,-199,-752,0,0,0,0 +no_defs ', "EPSG:4719":'+proj=longlat +ellps=intl +towgs84=211,147,111,0,0,0,0 +no_defs ', "EPSG:4720":'+proj=longlat +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +no_defs ', "EPSG:4721":'+proj=longlat +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +no_defs ', "EPSG:4722":'+proj=longlat +ellps=intl +towgs84=-794,119,-298,0,0,0,0 +no_defs ', "EPSG:4723":'+proj=longlat +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +no_defs ', "EPSG:4724":'+proj=longlat +ellps=intl +towgs84=208,-435,-229,0,0,0,0 +no_defs ', "EPSG:4725":'+proj=longlat +ellps=intl +towgs84=189,-79,-202,0,0,0,0 +no_defs ', "EPSG:4726":'+proj=longlat +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +no_defs ', "EPSG:4727":'+proj=longlat +ellps=intl +towgs84=403,-81,277,0,0,0,0 +no_defs ', "EPSG:4728":'+proj=longlat +ellps=intl +towgs84=-307,-92,127,0,0,0,0 +no_defs ', "EPSG:4729":'+proj=longlat +ellps=intl +towgs84=185,165,42,0,0,0,0 +no_defs ', "EPSG:4730":'+proj=longlat +ellps=intl +towgs84=170,42,84,0,0,0,0 +no_defs ', "EPSG:4731":'+proj=longlat +ellps=clrk80 +towgs84=51,391,-36,0,0,0,0 +no_defs ', "EPSG:4732":'+proj=longlat +a=6378270 +b=6356794.343434343 +towgs84=102,52,-38,0,0,0,0 +no_defs ', "EPSG:4733":'+proj=longlat +ellps=intl +towgs84=276,-57,149,0,0,0,0 +no_defs ', "EPSG:4734":'+proj=longlat +ellps=intl +towgs84=-632,438,-609,0,0,0,0 +no_defs ', "EPSG:4735":'+proj=longlat +ellps=intl +towgs84=647,1777,-1124,0,0,0,0 +no_defs ', "EPSG:4736":'+proj=longlat +ellps=clrk80 +towgs84=260,12,-147,0,0,0,0 +no_defs ', "EPSG:4737":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4738":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', "EPSG:4739":'+proj=longlat +ellps=intl +towgs84=-156,-271,-189,0,0,0,0 +no_defs ', "EPSG:4740":'+proj=longlat +a=6378136 +b=6356751.361745712 +towgs84=0,0,1.5,-0,-0,0.076,0 +no_defs ', "EPSG:4741":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4742":'+proj=longlat +ellps=GRS80 +no_defs ', "EPSG:4743":'+proj=longlat +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +no_defs ', "EPSG:4744":'+proj=longlat +ellps=clrk80 +no_defs ', "EPSG:4745":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4746":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:4747":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4748":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ', "EPSG:4749":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4750":'+proj=longlat +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +no_defs ', "EPSG:4751":'+proj=longlat +a=6377295.664 +b=6356094.667915204 +no_defs ', "EPSG:4752":'+proj=longlat +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +no_defs ', "EPSG:4753":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4754":'+proj=longlat +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +no_defs ', "EPSG:4755":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4756":'+proj=longlat +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +no_defs ', "EPSG:4757":'+proj=longlat +ellps=WGS84 +no_defs ', "EPSG:4758":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4759":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4760":'+proj=longlat +ellps=WGS66 +no_defs ', "EPSG:4761":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4762":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4763":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4764":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4765":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:4801":'+proj=longlat +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +no_defs ', "EPSG:4802":'+proj=longlat +ellps=intl +towgs84=307,304,-318,0,0,0,0 +pm=bogota +no_defs ', "EPSG:4803":'+proj=longlat +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +no_defs ', "EPSG:4804":'+proj=longlat +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +no_defs ', "EPSG:4805":'+proj=longlat +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +no_defs ', "EPSG:4806":'+proj=longlat +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +no_defs ', "EPSG:4807":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +no_defs ', "EPSG:4808":'+proj=longlat +ellps=bessel +pm=jakarta +no_defs ', "EPSG:4809":'+proj=longlat +ellps=intl +pm=brussels +no_defs ', "EPSG:4810":'+proj=longlat +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +no_defs ', "EPSG:4811":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +pm=paris +no_defs ', "EPSG:4813":'+proj=longlat +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +no_defs ', "EPSG:4814":'+proj=longlat +ellps=bessel +pm=stockholm +no_defs ', "EPSG:4815":'+proj=longlat +ellps=bessel +pm=athens +no_defs ', "EPSG:4816":'+proj=longlat +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +pm=paris +no_defs ', "EPSG:4817":'+proj=longlat +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +no_defs ', "EPSG:4818":'+proj=longlat +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +no_defs ', "EPSG:4819":'+proj=longlat +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +pm=paris +no_defs ', "EPSG:4820":'+proj=longlat +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +no_defs ', "EPSG:4821":'+proj=longlat +a=6378249.2 +b=6356515 +pm=paris +no_defs ', "EPSG:4823":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4824":'+proj=longlat +ellps=intl +no_defs ', "EPSG:4901":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +no_defs ', "EPSG:4902":'+proj=longlat +a=6376523 +b=6355862.933255573 +pm=paris +no_defs ', "EPSG:4903":'+proj=longlat +a=6378298.3 +b=6356657.142669561 +pm=madrid +no_defs ', "EPSG:4904":'+proj=longlat +ellps=bessel +towgs84=508.088,-191.042,565.223,0,0,0,0 +pm=lisbon +no_defs ', "EPSG:5013":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5132":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:5228":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +no_defs ', "EPSG:5229":'+proj=longlat +ellps=bessel +towgs84=572.213,85.334,461.94,4.9732,1.529,5.2484,3.5378 +pm=ferro +no_defs ', "EPSG:5233":'+proj=longlat +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +no_defs ', "EPSG:5246":'+proj=longlat +ellps=GRS80 +no_defs ', "EPSG:5252":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5264":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5324":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5340":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5354":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5360":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5365":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5371":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5373":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5381":'+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5393":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5451":'+proj=longlat +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +no_defs ', "EPSG:5464":'+proj=longlat +a=6378293.645208759 +b=6356617.987679838 +no_defs ', "EPSG:5467":'+proj=longlat +ellps=clrk66 +no_defs ', "EPSG:5489":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5524":'+proj=longlat +ellps=intl +no_defs ', "EPSG:5527":'+proj=longlat +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +no_defs ', "EPSG:5546":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5561":'+proj=longlat +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +no_defs ', "EPSG:5593":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:5681":'+proj=longlat +ellps=bessel +no_defs ', "EPSG:5886":'+proj=longlat +ellps=GRS80 +no_defs ', "EPSG:6135":'+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs ', "EPSG:2000":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +units=m +no_defs ', "EPSG:2001":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-255,-15,71,0,0,0,0 +units=m +no_defs ', "EPSG:2002":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=725,685,536,0,0,0,0 +units=m +no_defs ', "EPSG:2003":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=72,213.7,93,0,0,0,0 +units=m +no_defs ', "EPSG:2004":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=174,359,365,0,0,0,0 +units=m +no_defs ', "EPSG:2005":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=9,183,236,0,0,0,0 +units=m +no_defs ', "EPSG:2006":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=-149,128,296,0,0,0,0 +units=m +no_defs ', "EPSG:2007":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=195.671,332.517,274.607,0,0,0,0 +units=m +no_defs ', "EPSG:2008":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2009":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2010":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2011":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2012":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2013":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2014":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2015":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2016":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2017":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2018":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2019":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2020":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2021":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2022":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2023":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2024":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2025":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2026":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2027":'+proj=utm +zone=15 +ellps=clrk66 +units=m +no_defs ', "EPSG:2028":'+proj=utm +zone=16 +ellps=clrk66 +units=m +no_defs ', "EPSG:2029":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ', "EPSG:2030":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ', "EPSG:2031":'+proj=utm +zone=17 +ellps=clrk66 +units=m +no_defs ', "EPSG:2032":'+proj=utm +zone=18 +ellps=clrk66 +units=m +no_defs ', "EPSG:2033":'+proj=utm +zone=19 +ellps=clrk66 +units=m +no_defs ', "EPSG:2034":'+proj=utm +zone=20 +ellps=clrk66 +units=m +no_defs ', "EPSG:2035":'+proj=utm +zone=21 +ellps=clrk66 +units=m +no_defs ', "EPSG:2036":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2037":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2038":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2039":'+proj=tmerc +lat_0=31.73439361111111 +lon_0=35.20451694444445 +k=1.0000067 +x_0=219529.584 +y_0=626907.39 +ellps=GRS80 +towgs84=-48,55,52,0,0,0,0 +units=m +no_defs ', "EPSG:2040":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ', "EPSG:2041":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ', "EPSG:2042":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ', "EPSG:2043":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ', "EPSG:2044":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ', "EPSG:2045":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ', "EPSG:2046":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2047":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2048":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2049":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2050":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2051":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2052":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2053":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2054":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2055":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2056":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=2600000 +y_0=1200000 +ellps=bessel +towgs84=674.374,15.056,405.346,0,0,0,0 +units=m +no_defs ', "EPSG:2057":'+proj=omerc +lat_0=27.51882880555555 +lonc=52.60353916666667 +alpha=0.5716611944444444 +k=0.999895934 +x_0=658377.437 +y_0=3044969.194 +gamma=0.5716611944444444 +ellps=intl +towgs84=-133.63,-157.5,-158.62,0,0,0,0 +units=m +no_defs ', "EPSG:2058":'+proj=utm +zone=38 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', "EPSG:2059":'+proj=utm +zone=39 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', "EPSG:2060":'+proj=utm +zone=40 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', "EPSG:2061":'+proj=utm +zone=41 +ellps=intl +towgs84=-117,-132,-164,0,0,0,0 +units=m +no_defs ', "EPSG:2062":'+proj=lcc +lat_1=40 +lat_0=40 +lon_0=0 +k_0=0.9988085293 +x_0=600000 +y_0=600000 +a=6378298.3 +b=6356657.142669561 +pm=madrid +units=m +no_defs ', "EPSG:2063":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', "EPSG:2064":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', "EPSG:2065":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:2066":'+proj=cass +lat_0=11.25217861111111 +lon_0=-60.68600888888889 +x_0=37718.66159325 +y_0=36209.91512952 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.201166195164 +no_defs ', "EPSG:2067":'+proj=utm +zone=20 +ellps=intl +towgs84=-0.465,372.095,171.736,0,0,0,0 +units=m +no_defs ', "EPSG:2068":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2069":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2070":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2071":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2072":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2073":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2074":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2075":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2076":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.9999 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2077":'+proj=utm +zone=32 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2078":'+proj=utm +zone=33 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2079":'+proj=utm +zone=34 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2080":'+proj=utm +zone=35 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2081":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +units=m +no_defs ', "EPSG:2082":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=27.5,14,186.4,0,0,0,0 +units=m +no_defs ', "EPSG:2083":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ', "EPSG:2084":'+proj=utm +zone=19 +south +ellps=intl +towgs84=16,196,93,0,0,0,0 +units=m +no_defs ', "EPSG:2085":'+proj=lcc +lat_1=22.35 +lat_0=22.35 +lon_0=-81 +k_0=0.99993602 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ', "EPSG:2086":'+proj=lcc +lat_1=20.71666666666667 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +k_0=0.99994848 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ', "EPSG:2087":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-115.854,-99.0583,-152.462,0,0,0,0 +units=m +no_defs ', "EPSG:2088":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ', "EPSG:2089":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2090":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2091":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ', "EPSG:2092":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ', "EPSG:2093":'+proj=tmerc +lat_0=0 +lon_0=106 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=-17.51,-108.32,-62.39,0,0,0,0 +units=m +no_defs ', "EPSG:2094":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:2095":'+proj=utm +zone=28 +ellps=intl +towgs84=-173,253,27,0,0,0,0 +units=m +no_defs ', "EPSG:2096":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:2097":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:2098":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:2099":'+proj=cass +lat_0=25.38236111111111 +lon_0=50.76138888888889 +x_0=100000 +y_0=100000 +ellps=helmert +units=m +no_defs ', "EPSG:2100":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-199.87,74.79,246.62,0,0,0,0 +units=m +no_defs ', "EPSG:2101":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=0 +y_0=-52684.972 +ellps=intl +units=m +no_defs ', "EPSG:2102":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=200000 +y_0=147315.028 +ellps=intl +units=m +no_defs ', "EPSG:2103":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=500000 +y_0=447315.028 +ellps=intl +units=m +no_defs ', "EPSG:2104":'+proj=lcc +lat_1=10.16666666666667 +lat_0=10.16666666666667 +lon_0=-71.60561777777777 +k_0=1 +x_0=-17044 +y_0=-23139.97 +ellps=intl +units=m +no_defs ', "EPSG:2105":'+proj=tmerc +lat_0=-36.87972222222222 +lon_0=174.7641666666667 +k=0.9999 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2106":'+proj=tmerc +lat_0=-37.76111111111111 +lon_0=176.4661111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2107":'+proj=tmerc +lat_0=-38.62444444444444 +lon_0=177.8855555555556 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2108":'+proj=tmerc +lat_0=-39.65083333333333 +lon_0=176.6736111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2109":'+proj=tmerc +lat_0=-39.13555555555556 +lon_0=174.2277777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2110":'+proj=tmerc +lat_0=-39.51222222222222 +lon_0=175.64 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2111":'+proj=tmerc +lat_0=-40.24194444444444 +lon_0=175.4880555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2112":'+proj=tmerc +lat_0=-40.92527777777777 +lon_0=175.6472222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2113":'+proj=tmerc +lat_0=-41.3011111111111 +lon_0=174.7763888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2114":'+proj=tmerc +lat_0=-40.71472222222223 +lon_0=172.6719444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2115":'+proj=tmerc +lat_0=-41.27444444444444 +lon_0=173.2991666666667 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2116":'+proj=tmerc +lat_0=-41.28972222222222 +lon_0=172.1088888888889 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2117":'+proj=tmerc +lat_0=-41.81055555555555 +lon_0=171.5811111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2118":'+proj=tmerc +lat_0=-42.33361111111111 +lon_0=171.5497222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2119":'+proj=tmerc +lat_0=-42.68888888888888 +lon_0=173.01 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2120":'+proj=tmerc +lat_0=-41.54444444444444 +lon_0=173.8019444444444 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2121":'+proj=tmerc +lat_0=-42.88611111111111 +lon_0=170.9797222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2122":'+proj=tmerc +lat_0=-43.11 +lon_0=170.2608333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2123":'+proj=tmerc +lat_0=-43.97777777777778 +lon_0=168.6061111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2124":'+proj=tmerc +lat_0=-43.59055555555556 +lon_0=172.7269444444445 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2125":'+proj=tmerc +lat_0=-43.74861111111111 +lon_0=171.3605555555555 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2126":'+proj=tmerc +lat_0=-44.40194444444445 +lon_0=171.0572222222222 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2127":'+proj=tmerc +lat_0=-44.735 +lon_0=169.4675 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2128":'+proj=tmerc +lat_0=-45.13277777777778 +lon_0=168.3986111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2129":'+proj=tmerc +lat_0=-45.56361111111111 +lon_0=167.7386111111111 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2130":'+proj=tmerc +lat_0=-45.81611111111111 +lon_0=170.6283333333333 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2131":'+proj=tmerc +lat_0=-45.86138888888889 +lon_0=170.2825 +k=0.99996 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2132":'+proj=tmerc +lat_0=-46.6 +lon_0=168.3427777777778 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2133":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2134":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2135":'+proj=utm +zone=60 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2136":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.7391633579 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +to_meter=0.3047997101815088 +no_defs ', "EPSG:2137":'+proj=tmerc +lat_0=0 +lon_0=-1 +k=0.9996 +x_0=500000 +y_0=0 +a=6378300 +b=6356751.689189189 +towgs84=-199,32,322,0,0,0,0 +units=m +no_defs ', "EPSG:2138":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=clrk66 +units=m +no_defs ', "EPSG:2139":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2140":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2141":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2142":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2143":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2144":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2145":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2146":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2147":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2148":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2149":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2150":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2151":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2152":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2153":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2154":'+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2155":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2156":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2157":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=0.99982 +x_0=600000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2158":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2159":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=152399.8550907544 +y_0=0 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ', "EPSG:2160":'+proj=tmerc +lat_0=6.666666666666667 +lon_0=-12 +k=1 +x_0=243839.7681452071 +y_0=182879.8261089053 +a=6378300 +b=6356751.689189189 +to_meter=0.3047997101815088 +no_defs ', "EPSG:2161":'+proj=utm +zone=28 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ', "EPSG:2162":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-88,4,101,0,0,0,0 +units=m +no_defs ', "EPSG:2163":'+proj=laea +lat_0=45 +lon_0=-100 +x_0=0 +y_0=0 +a=6370997 +b=6370997 +units=m +no_defs ', "EPSG:2164":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-125,53,467,0,0,0,0 +units=m +no_defs ', "EPSG:2165":'+proj=tmerc +lat_0=0 +lon_0=-5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=clrk80 +towgs84=-124.76,53,466.79,0,0,0,0 +units=m +no_defs ', "EPSG:2166":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:2167":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:2168":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:2169":'+proj=tmerc +lat_0=49.83333333333334 +lon_0=6.166666666666667 +k=1 +x_0=80000 +y_0=100000 +ellps=intl +towgs84=-189.681,18.3463,-42.7695,-0.33746,-3.09264,2.53861,0.4598 +units=m +no_defs ', "EPSG:2170":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:2171":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5647000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:2172":'+proj=sterea +lat_0=53.00194444444445 +lon_0=21.50277777777778 +k=0.9998 +x_0=4603000 +y_0=5806000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:2173":'+proj=sterea +lat_0=53.58333333333334 +lon_0=17.00833333333333 +k=0.9998 +x_0=3501000 +y_0=5999000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:2174":'+proj=sterea +lat_0=51.67083333333333 +lon_0=16.67222222222222 +k=0.9998 +x_0=3703000 +y_0=5627000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:2175":'+proj=tmerc +lat_0=0 +lon_0=18.95833333333333 +k=0.999983 +x_0=237000 +y_0=-4700000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:2176":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.999923 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2177":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.999923 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2178":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.999923 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2179":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.999923 +x_0=8500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2180":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.9993 +x_0=500000 +y_0=-5300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2188":'+proj=utm +zone=25 +ellps=intl +towgs84=-425,-169,81,0,0,0,0 +units=m +no_defs ', "EPSG:2189":'+proj=utm +zone=26 +ellps=intl +towgs84=-104,167,-38,0,0,0,0 +units=m +no_defs ', "EPSG:2190":'+proj=utm +zone=26 +ellps=intl +towgs84=-203,141,53,0,0,0,0 +units=m +no_defs ', "EPSG:2191":'+proj=utm +zone=28 +ellps=intl +units=m +no_defs ', "EPSG:2192":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=2.337229166666667 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2193":'+proj=tmerc +lat_0=0 +lon_0=173 +k=0.9996 +x_0=1600000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2194":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2195":'+proj=utm +zone=2 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2196":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=0.99995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2197":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.99995 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2198":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2199":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:2200":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=300000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', "EPSG:2201":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2202":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2203":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2204":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:2205":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2206":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2207":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2208":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2209":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2210":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2211":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2212":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2213":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2214":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ', "EPSG:2215":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-70.9,-151.8,-41.4,0,0,0,0 +units=m +no_defs ', "EPSG:2216":'+proj=utm +zone=22 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ', "EPSG:2217":'+proj=utm +zone=23 +ellps=intl +towgs84=164,138,-189,0,0,0,0 +units=m +no_defs ', "EPSG:2219":'+proj=utm +zone=19 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', "EPSG:2220":'+proj=utm +zone=20 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', "EPSG:2222":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2223":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2224":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2225":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2226":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2227":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2228":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2229":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2230":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2231":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2232":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2233":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2234":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2235":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2236":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2237":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2238":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2239":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2240":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2241":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2242":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2243":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2244":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2245":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2246":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2247":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2248":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2249":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2250":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2251":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2252":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2253":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2254":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2255":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2256":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2257":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2258":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2259":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2260":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2261":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2262":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2263":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2264":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2265":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2266":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2267":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2268":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2269":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2270":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2271":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2272":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2273":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2274":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2275":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2276":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2277":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2278":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2279":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2280":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2281":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2282":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2283":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2284":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2285":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2286":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2287":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2288":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2289":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2290":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=700000 +y_0=400000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', "EPSG:2291":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', "EPSG:2292":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2294":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=4500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', "EPSG:2295":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=5500000 +y_0=0 +a=6378135 +b=6356750.304921594 +units=m +no_defs ', "EPSG:2308":'+proj=tmerc +lat_0=0 +lon_0=109 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', "EPSG:2309":'+proj=tmerc +lat_0=0 +lon_0=116 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ', "EPSG:2310":'+proj=tmerc +lat_0=0 +lon_0=132 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ', "EPSG:2311":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:2312":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ', "EPSG:2313":'+proj=utm +zone=33 +ellps=clrk80 +units=m +no_defs ', "EPSG:2314":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392052001 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.3047972654 +no_defs ', "EPSG:2315":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:2316":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:2317":'+proj=lcc +lat_1=9 +lat_2=3 +lat_0=6 +lon_0=-66 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:2318":'+proj=lcc +lat_1=17 +lat_2=33 +lat_0=25.08951 +lon_0=48 +x_0=0 +y_0=0 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', "EPSG:2319":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2320":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2321":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2322":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2323":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2324":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2325":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:2326":'+proj=tmerc +lat_0=22.31213333333334 +lon_0=114.1785555555556 +k=1 +x_0=836694.05 +y_0=819069.8 +ellps=intl +towgs84=-162.619,-276.959,-161.764,0.067753,-2.24365,-1.15883,-1.09425 +units=m +no_defs ', "EPSG:2327":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2328":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2329":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2330":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2331":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2332":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2333":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2334":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2335":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2336":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2337":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2338":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2339":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2340":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2341":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2342":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2343":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2344":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2345":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2346":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2347":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2348":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2349":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2350":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2351":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2352":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2353":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2354":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2355":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2356":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2357":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2358":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2359":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2360":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2361":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2362":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2363":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2364":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2365":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2366":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2367":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2368":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2369":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2370":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2371":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2372":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2373":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2374":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2375":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2376":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2377":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2378":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2379":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2380":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2381":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2382":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2383":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2384":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2385":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2386":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2387":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2388":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2389":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2390":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +a=6378140 +b=6356755.288157528 +units=m +no_defs ', "EPSG:2391":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ', "EPSG:2392":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ', "EPSG:2393":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ', "EPSG:2394":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ', "EPSG:2395":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ', "EPSG:2396":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=-76,-138,67,0,0,0,0 +units=m +no_defs ', "EPSG:2397":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:2398":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:2399":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:2400":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ', "EPSG:2401":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2402":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2403":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2404":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2405":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2406":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2407":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2408":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2409":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2410":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2411":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2412":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2413":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2414":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2415":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2416":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2417":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2418":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2419":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2420":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2421":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2422":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2423":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2424":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2425":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2426":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2427":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2428":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2429":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2430":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2431":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2432":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2433":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2434":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2435":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2436":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2437":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2438":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2439":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2440":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2441":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2442":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:2443":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2444":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2445":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2446":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2447":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2448":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2449":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2450":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2451":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2452":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2453":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2454":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2455":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2456":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2457":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2458":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2459":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2460":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2461":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2462":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:2463":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2464":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2465":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2466":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2467":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2468":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2469":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2470":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2471":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2472":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2473":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2474":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2475":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2476":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2477":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2478":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2479":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2480":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2481":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2482":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2483":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2484":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2485":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2486":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2487":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2488":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2489":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2490":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2491":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2492":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2493":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2494":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2495":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2496":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2497":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2498":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2499":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2500":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2501":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2502":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2503":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2504":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2505":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2506":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2507":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2508":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2509":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2510":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2511":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2512":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2513":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2514":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2515":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2516":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2517":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2518":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2519":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2520":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2521":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2522":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2523":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2524":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2525":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2526":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2527":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2528":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2529":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2530":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2531":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2532":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2533":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2534":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2535":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2536":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2537":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2538":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2539":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2540":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2541":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2542":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2543":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2544":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2545":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2546":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2547":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2548":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2549":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2550":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-404.78,685.68,45.47,0,0,0,0 +units=m +no_defs ', "EPSG:2551":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2552":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2553":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2554":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2555":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2556":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2557":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2558":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2559":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2560":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2561":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2562":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2563":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2564":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2565":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2566":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2567":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2568":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2569":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2570":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2571":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2572":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2573":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2574":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2575":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2576":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2577":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2578":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2579":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2580":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2581":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2582":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2583":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2584":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2585":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2586":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2587":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2588":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2589":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2590":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2591":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2592":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2593":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2594":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2595":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2596":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2597":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2598":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2599":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2600":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2601":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2602":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2603":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2604":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2605":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2606":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2607":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2608":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2609":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2610":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2611":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2612":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2613":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2614":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2615":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2616":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2617":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2618":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2619":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2620":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2621":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2622":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2623":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2624":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2625":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2626":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2627":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2628":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2629":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2630":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2631":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2632":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2633":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2634":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2635":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2636":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2637":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2638":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2639":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2640":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2641":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2642":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2643":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2644":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2645":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2646":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2647":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2648":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2649":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2650":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2651":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2652":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2653":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2654":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2655":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2656":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2657":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2658":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2659":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2660":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2661":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2662":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2663":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2664":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2665":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2666":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2667":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2668":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2669":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2670":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2671":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2672":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2673":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2674":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2675":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2676":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2677":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2678":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2679":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2680":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=46500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2681":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=47500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2682":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=48500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2683":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=49500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2684":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=50500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2685":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=51500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2686":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=52500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2687":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=53500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2688":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=54500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2689":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=55500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2690":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=56500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2691":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=57500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2692":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=58500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2693":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=59500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2694":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60000000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2695":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=61500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2696":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=62500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2697":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=63500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2698":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=64500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2699":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2700":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2701":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2702":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2703":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2704":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2705":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2706":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2707":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2708":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2709":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2710":'+proj=tmerc +lat_0=0 +lon_0=54 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2711":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2712":'+proj=tmerc +lat_0=0 +lon_0=60 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2713":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2714":'+proj=tmerc +lat_0=0 +lon_0=66 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2715":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2716":'+proj=tmerc +lat_0=0 +lon_0=72 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2717":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2718":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2719":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2720":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2721":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2722":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2723":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2724":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2725":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2726":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2727":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2728":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2729":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2730":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2731":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2732":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2733":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2734":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2735":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2736":'+proj=utm +zone=36 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ', "EPSG:2737":'+proj=utm +zone=37 +south +ellps=clrk66 +towgs84=-73.472,-51.66,-112.482,0.953,4.6,-2.368,0.586 +units=m +no_defs ', "EPSG:2738":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2739":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2740":'+proj=tmerc +lat_0=0 +lon_0=138 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2741":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2742":'+proj=tmerc +lat_0=0 +lon_0=144 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2743":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2744":'+proj=tmerc +lat_0=0 +lon_0=150 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2745":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2746":'+proj=tmerc +lat_0=0 +lon_0=156 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2747":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2748":'+proj=tmerc +lat_0=0 +lon_0=162 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2749":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2750":'+proj=tmerc +lat_0=0 +lon_0=168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2751":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2752":'+proj=tmerc +lat_0=0 +lon_0=174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2753":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2754":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2755":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2756":'+proj=tmerc +lat_0=0 +lon_0=-174 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2757":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2758":'+proj=tmerc +lat_0=0 +lon_0=-168 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:2759":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2760":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2761":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2762":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2763":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2764":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2765":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2766":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2767":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2768":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2769":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2770":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2771":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2772":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2773":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2774":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2775":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2776":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2777":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2778":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2779":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2780":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2781":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2782":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2783":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2784":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2785":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2786":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2787":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2788":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2789":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2790":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2791":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2792":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2793":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2794":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2795":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2796":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2797":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2798":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2799":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2800":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2801":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2802":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2803":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2804":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2805":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2806":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2807":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2808":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2809":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2810":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2811":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2812":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2813":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2814":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2815":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2816":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2817":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2818":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2819":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2820":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2821":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2822":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2823":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2824":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2825":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2826":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2827":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2828":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2829":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2830":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2831":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2832":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2833":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2834":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2835":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2836":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2837":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2838":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2839":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2840":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2841":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2842":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2843":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2844":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2845":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2846":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2847":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2848":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2849":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2850":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2851":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2852":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2853":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2854":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2855":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2856":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2857":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2858":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2859":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2860":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2861":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2862":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2863":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2864":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2865":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2866":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2867":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2868":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2869":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2870":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2871":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2872":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2873":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2874":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2875":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2876":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2877":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2878":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2879":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2880":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2881":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2882":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2883":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2884":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2885":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2886":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2887":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2888":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2889":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2890":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249364.9987299975 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2891":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2892":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2893":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2894":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2895":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2896":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2897":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2898":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2899":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2900":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2901":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2902":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2903":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2904":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2905":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2906":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2907":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2908":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2909":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2910":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2911":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2912":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2913":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2914":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2915":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2916":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2917":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2918":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2919":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2920":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2921":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2922":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2923":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2924":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2925":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2926":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2927":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2928":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2929":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2930":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2931":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.9996 +x_0=500000 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-106,-87,188,0,0,0,0 +units=m +no_defs ', "EPSG:2932":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-119.425,-303.659,-11.0006,1.1643,0.174458,1.09626,3.65706 +units=m +no_defs ', "EPSG:2933":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ', "EPSG:2934":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ', "EPSG:2935":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=41.53333333333333 +k=1 +x_0=1300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2936":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=44.53333333333333 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2937":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=47.53333333333333 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2938":'+proj=tmerc +lat_0=0.1166666666666667 +lon_0=50.53333333333333 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2939":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=50.76666666666667 +k=1 +x_0=2300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2940":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=53.76666666666667 +k=1 +x_0=3300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2941":'+proj=tmerc +lat_0=0.1333333333333333 +lon_0=56.76666666666667 +k=1 +x_0=4300000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:2942":'+proj=utm +zone=28 +ellps=intl +towgs84=-499,-249,314,0,0,0,0 +units=m +no_defs ', "EPSG:2943":'+proj=utm +zone=28 +ellps=intl +towgs84=-289,-124,60,0,0,0,0 +units=m +no_defs ', "EPSG:2944":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2945":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2946":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2947":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2948":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2949":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2950":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2951":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2952":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2953":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=2500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2954":'+proj=sterea +lat_0=47.25 +lon_0=-63 +k=0.999912 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2955":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2956":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2957":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2958":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2959":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2960":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2961":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2962":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2964":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:2965":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2966":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2967":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2968":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:2969":'+proj=utm +zone=20 +ellps=intl +towgs84=137,248,-430,0,0,0,0 +units=m +no_defs ', "EPSG:2970":'+proj=utm +zone=20 +ellps=intl +towgs84=-467,-16,-300,0,0,0,0 +units=m +no_defs ', "EPSG:2971":'+proj=utm +zone=22 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ', "EPSG:2972":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2973":'+proj=utm +zone=20 +ellps=intl +towgs84=186,482,151,0,0,0,0 +units=m +no_defs ', "EPSG:2975":'+proj=utm +zone=40 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2976":'+proj=utm +zone=6 +south +ellps=intl +towgs84=162,117,154,0,0,0,0 +units=m +no_defs ', "EPSG:2977":'+proj=utm +zone=5 +south +ellps=intl +towgs84=72.438,345.918,79.486,1.6045,0.8823,0.5565,1.3746 +units=m +no_defs ', "EPSG:2978":'+proj=utm +zone=7 +south +ellps=intl +towgs84=84,274,65,0,0,0,0 +units=m +no_defs ', "EPSG:2979":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ', "EPSG:2980":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ', "EPSG:2981":'+proj=utm +zone=58 +south +ellps=intl +towgs84=335.47,222.58,-230.94,0,0,0,0 +units=m +no_defs ', "EPSG:2982":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ', "EPSG:2983":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-122.383,-188.696,103.344,3.5107,-4.9668,-5.7047,4.4798 +units=m +no_defs ', "EPSG:2984":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=intl +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2987":'+proj=utm +zone=21 +ellps=clrk66 +towgs84=30,430,368,0,0,0,0 +units=m +no_defs ', "EPSG:2988":'+proj=utm +zone=1 +south +ellps=intl +towgs84=253,-132,-127,0,0,0,0 +units=m +no_defs ', "EPSG:2989":'+proj=utm +zone=20 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2990":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=50000 +y_0=160000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ', "EPSG:2991":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2992":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2993":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:2994":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:2995":'+proj=utm +zone=58 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ', "EPSG:2996":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-13,-348,292,0,0,0,0 +units=m +no_defs ', "EPSG:2997":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-480.26,-438.32,-643.429,16.3119,20.1721,-4.0349,-111.7 +units=m +no_defs ', "EPSG:2998":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ', "EPSG:2999":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-963,510,-359,0,0,0,0 +units=m +no_defs ', "EPSG:3000":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +units=m +no_defs ', "EPSG:3001":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', "EPSG:3002":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +units=m +no_defs ', "EPSG:3003":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ', "EPSG:3004":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ', "EPSG:3005":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3006":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3007":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3008":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3009":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3010":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3011":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3012":'+proj=tmerc +lat_0=0 +lon_0=14.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3013":'+proj=tmerc +lat_0=0 +lon_0=15.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3014":'+proj=tmerc +lat_0=0 +lon_0=17.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3015":'+proj=tmerc +lat_0=0 +lon_0=18.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3016":'+proj=tmerc +lat_0=0 +lon_0=20.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3017":'+proj=tmerc +lat_0=0 +lon_0=21.75 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3018":'+proj=tmerc +lat_0=0 +lon_0=23.25 +k=1 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3019":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ', "EPSG:3020":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ', "EPSG:3021":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ', "EPSG:3022":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ', "EPSG:3023":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ', "EPSG:3024":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=414.1,41.3,603.1,-0.855,2.141,-7.023,0 +units=m +no_defs ', "EPSG:3025":'+proj=tmerc +lat_0=0 +lon_0=11.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3026":'+proj=tmerc +lat_0=0 +lon_0=13.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3027":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3028":'+proj=tmerc +lat_0=0 +lon_0=18.05827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3029":'+proj=tmerc +lat_0=0 +lon_0=20.30827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3030":'+proj=tmerc +lat_0=0 +lon_0=22.55827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3031":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3032":'+proj=stere +lat_0=-90 +lat_ts=-71 +lon_0=70 +k=1 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ', "EPSG:3033":'+proj=lcc +lat_1=-68.5 +lat_2=-74.5 +lat_0=-50 +lon_0=70 +x_0=6000000 +y_0=6000000 +datum=WGS84 +units=m +no_defs ', "EPSG:3034":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3035":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3036":'+proj=utm +zone=36 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ', "EPSG:3037":'+proj=utm +zone=37 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ', "EPSG:3038":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3039":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3040":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3041":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3042":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3043":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3044":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3045":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3046":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3047":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3048":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3049":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3050":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3051":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3054":'+proj=utm +zone=26 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ', "EPSG:3055":'+proj=utm +zone=27 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ', "EPSG:3056":'+proj=utm +zone=28 +ellps=intl +towgs84=-73,46,-86,0,0,0,0 +units=m +no_defs ', "EPSG:3057":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3058":'+proj=tmerc +lat_0=0 +lon_0=-8.5 +k=1 +x_0=50000 +y_0=-7800000 +ellps=intl +towgs84=982.609,552.753,-540.873,6.68163,-31.6115,-19.8482,16.805 +units=m +no_defs ', "EPSG:3059":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3060":'+proj=utm +zone=58 +south +ellps=intl +towgs84=-11.64,-348.6,291.98,0,0,0,0 +units=m +no_defs ', "EPSG:3061":'+proj=utm +zone=28 +ellps=intl +towgs84=-502.862,-247.438,312.724,0,0,0,0 +units=m +no_defs ', "EPSG:3062":'+proj=utm +zone=26 +ellps=intl +towgs84=-204.619,140.176,55.226,0,0,0,0 +units=m +no_defs ', "EPSG:3063":'+proj=utm +zone=26 +ellps=intl +towgs84=-106.226,166.366,-37.893,0,0,0,0 +units=m +no_defs ', "EPSG:3064":'+proj=utm +zone=32 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3065":'+proj=utm +zone=33 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3066":'+proj=tmerc +lat_0=0 +lon_0=37 +k=0.9998 +x_0=500000 +y_0=-3000000 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:3067":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3068":'+proj=cass +lat_0=52.41864827777778 +lon_0=13.62720366666667 +x_0=40000 +y_0=10000 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:3069":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=500000 +y_0=-4500000 +datum=NAD27 +units=m +no_defs ', "EPSG:3070":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3071":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3072":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3073":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3074":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3075":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3076":'+proj=tmerc +lat_0=43 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3077":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3078":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3079":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3080":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=914400 +y_0=914400 +datum=NAD27 +units=ft +no_defs ', "EPSG:3081":'+proj=lcc +lat_1=27.41666666666667 +lat_2=34.91666666666666 +lat_0=31.16666666666667 +lon_0=-100 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3082":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3083":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3084":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3085":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3086":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3087":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3088":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3089":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3090":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3091":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3092":'+proj=utm +zone=51 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:3093":'+proj=utm +zone=52 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:3094":'+proj=utm +zone=53 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:3095":'+proj=utm +zone=54 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:3096":'+proj=utm +zone=55 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:3097":'+proj=utm +zone=51 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3098":'+proj=utm +zone=52 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3099":'+proj=utm +zone=53 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3100":'+proj=utm +zone=54 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3101":'+proj=utm +zone=55 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3102":'+proj=lcc +lat_1=-14.26666666666667 +lat_0=-14.26666666666667 +lon_0=-170 +k_0=1 +x_0=152400.3048006096 +y_0=95169.31165862332 +ellps=clrk66 +towgs84=-115,118,426,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3103":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ', "EPSG:3104":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ', "EPSG:3105":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ', "EPSG:3106":'+proj=tmerc +lat_0=0 +lon_0=90 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=283.7,735.9,261.1,0,0,0,0 +units=m +no_defs ', "EPSG:3107":'+proj=lcc +lat_1=-28 +lat_2=-36 +lat_0=-32 +lon_0=135 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3108":'+proj=tmerc +lat_0=49.5 +lon_0=-2.416666666666667 +k=0.999997 +x_0=47000 +y_0=50000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3109":'+proj=tmerc +lat_0=49.225 +lon_0=-2.135 +k=0.9999999000000001 +x_0=40000 +y_0=70000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3110":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=4500000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:3111":'+proj=lcc +lat_1=-36 +lat_2=-38 +lat_0=-37 +lon_0=145 +x_0=2500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3112":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=134 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3113":'+proj=tmerc +lat_0=-28 +lon_0=153 +k=0.99999 +x_0=50000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3114":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-80.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3115":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-77.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3116":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-74.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3117":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-71.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3118":'+proj=tmerc +lat_0=4.596200416666666 +lon_0=-68.07750791666666 +k=1 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3119":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=0.999 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=-206.1,-174.7,-87.7,0,0,0,0 +units=m +no_defs ', "EPSG:3120":'+proj=sterea +lat_0=50.625 +lon_0=21.08333333333333 +k=0.9998 +x_0=4637000 +y_0=5467000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3121":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ', "EPSG:3122":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ', "EPSG:3123":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ', "EPSG:3124":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ', "EPSG:3125":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-127.62,-67.24,-47.04,-3.068,4.903,1.578,-1.06 +units=m +no_defs ', "EPSG:3126":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3127":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3128":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3129":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3130":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3131":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3132":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3133":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3134":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3135":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3136":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3137":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3138":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3140":'+proj=cass +lat_0=-18 +lon_0=178 +x_0=109435.392 +y_0=141622.272 +a=6378306.3696 +b=6356571.996 +towgs84=51,391,-36,0,0,0,0 +to_meter=0.201168 +no_defs ', "EPSG:3141":'+proj=utm +zone=60 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ', "EPSG:3142":'+proj=utm +zone=1 +south +ellps=intl +towgs84=265.025,384.929,-194.046,0,0,0,0 +units=m +no_defs ', "EPSG:3143":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:3146":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:3147":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:3148":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ', "EPSG:3149":'+proj=utm +zone=49 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ', "EPSG:3150":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:3151":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:3152":'+proj=tmerc +lat_0=0 +lon_0=18.05779 +k=0.99999425 +x_0=100178.1808 +y_0=-6500614.7836 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3153":'+proj=aea +lat_1=50 +lat_2=58.5 +lat_0=45 +lon_0=-126 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3154":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3155":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3156":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3157":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3158":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3159":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3160":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3161":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3162":'+proj=lcc +lat_1=44.5 +lat_2=53.5 +lat_0=0 +lon_0=-85 +x_0=930000 +y_0=6430000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3163":'+proj=lcc +lat_1=-20.66666666666667 +lat_2=-22.33333333333333 +lat_0=-21.5 +lon_0=166 +x_0=400000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3164":'+proj=utm +zone=58 +south +ellps=WGS84 +towgs84=-56.263,16.136,-22.856,0,0,0,0 +units=m +no_defs ', "EPSG:3165":'+proj=lcc +lat_1=-22.24469175 +lat_2=-22.29469175 +lat_0=-22.26969175 +lon_0=166.44242575 +x_0=0.66 +y_0=1.02 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ', "EPSG:3166":'+proj=lcc +lat_1=-22.24472222222222 +lat_2=-22.29472222222222 +lat_0=-22.26972222222222 +lon_0=166.4425 +x_0=8.313000000000001 +y_0=-2.354 +ellps=intl +towgs84=-10.18,-350.43,291.37,0,0,0,0 +units=m +no_defs ', "EPSG:3167":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=40000 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +to_meter=20.116756 +no_defs ', "EPSG:3168":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804670.24 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377295.664 +b=6356094.667915204 +units=m +no_defs ', "EPSG:3169":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3170":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3171":'+proj=utm +zone=59 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3172":'+proj=utm +zone=59 +south +ellps=intl +towgs84=287.58,177.78,-135.41,0,0,0,0 +units=m +no_defs ', "EPSG:3174":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-84.455955 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3175":'+proj=aea +lat_1=42.122774 +lat_2=49.01518 +lat_0=45.568977 +lon_0=-83.248627 +x_0=1000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3176":'+proj=tmerc +lat_0=0 +lon_0=106 +k=0.9996 +x_0=500000 +y_0=0 +a=6377276.345 +b=6356075.41314024 +towgs84=198,881,317,0,0,0,0 +units=m +no_defs ', "EPSG:3177":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.9965000000000001 +x_0=1000000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3178":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3179":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3180":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3181":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3182":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3183":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3184":'+proj=utm +zone=24 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3185":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3186":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3187":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3188":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3189":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3190":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3191":'+proj=tmerc +lat_0=0 +lon_0=11 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3192":'+proj=tmerc +lat_0=0 +lon_0=13 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3193":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3194":'+proj=tmerc +lat_0=0 +lon_0=17 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3195":'+proj=tmerc +lat_0=0 +lon_0=19 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3196":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3197":'+proj=tmerc +lat_0=0 +lon_0=23 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3198":'+proj=tmerc +lat_0=0 +lon_0=25 +k=0.99995 +x_0=200000 +y_0=0 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3199":'+proj=utm +zone=32 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3200":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-241.54,-163.64,396.06,0,0,0,0 +units=m +no_defs ', "EPSG:3201":'+proj=utm +zone=33 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3202":'+proj=utm +zone=34 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3203":'+proj=utm +zone=35 +ellps=intl +towgs84=-208.406,-109.878,-2.5764,0,0,0,0 +units=m +no_defs ', "EPSG:3204":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3205":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3206":'+proj=lcc +lat_1=-60.66666666666666 +lat_2=-63.33333333333334 +lat_0=-90 +lon_0=-42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3207":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3208":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3209":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=-54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3210":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3211":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3212":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3213":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3214":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3215":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3216":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3217":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3218":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3219":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3220":'+proj=lcc +lat_1=-64.66666666666667 +lat_2=-67.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3221":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3222":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3223":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3224":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3225":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3226":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=-6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3227":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=6 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3228":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=18 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3229":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3230":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=42 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3231":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=54 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3232":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=66 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3233":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=78 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3234":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3235":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=102 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3236":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=114 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3237":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=126 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3238":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=138 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3239":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3240":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3241":'+proj=lcc +lat_1=-68.66666666666667 +lat_2=-71.33333333333333 +lat_0=-90 +lon_0=174 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3242":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3243":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3244":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3245":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3246":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3247":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3248":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3249":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=-9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3250":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=9 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3251":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=27 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3252":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=45 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3253":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=63 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3254":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=81 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3255":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=99 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3256":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=117 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3257":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=135 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3258":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=153 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3259":'+proj=lcc +lat_1=-72.66666666666667 +lat_2=-75.33333333333333 +lat_0=-90 +lon_0=171 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3260":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3261":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3262":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3263":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3264":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3265":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3266":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=-24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3267":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3268":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=24 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3269":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=48 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3270":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=72 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3271":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=96 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3272":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=120 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3273":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=144 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3274":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=168 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3275":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3276":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3277":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3278":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3279":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3280":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3281":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=15 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3282":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3283":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=75 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3284":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=105 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3285":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=135 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3286":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=165 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3287":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3288":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3289":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=-30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3290":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=30 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3291":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=90 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3292":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3293":'+proj=stere +lat_0=-90 +lat_ts=-80.23861111111111 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3294":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=162 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3296":'+proj=utm +zone=5 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ', "EPSG:3297":'+proj=utm +zone=6 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ', "EPSG:3298":'+proj=utm +zone=7 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ', "EPSG:3299":'+proj=utm +zone=8 +south +ellps=GRS80 +towgs84=0.072,-0.507,-0.245,-0.0183,0.0003,-0.007,-0.0093 +units=m +no_defs ', "EPSG:3300":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0.055,-0.541,-0.185,0.0183,-0.0003,-0.007,-0.014 +units=m +no_defs ', "EPSG:3301":'+proj=lcc +lat_1=59.33333333333334 +lat_2=58 +lat_0=57.51755393055556 +lon_0=24 +x_0=500000 +y_0=6375000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3302":'+proj=utm +zone=7 +south +ellps=intl +towgs84=410.721,55.049,80.746,2.5779,2.3514,0.6664,17.3311 +units=m +no_defs ', "EPSG:3303":'+proj=utm +zone=7 +south +ellps=intl +towgs84=347.103,1078.12,2623.92,-33.8875,70.6773,-9.3943,186.074 +units=m +no_defs ', "EPSG:3304":'+proj=utm +zone=6 +south +ellps=intl +towgs84=221.525,152.948,176.768,-2.3847,-1.3896,-0.877,11.4741 +units=m +no_defs ', "EPSG:3305":'+proj=utm +zone=6 +south +ellps=intl +towgs84=215.525,149.593,176.229,-3.2624,-1.692,-1.1571,10.4773 +units=m +no_defs ', "EPSG:3306":'+proj=utm +zone=5 +south +ellps=intl +towgs84=217.037,86.959,23.956,0,0,0,0 +units=m +no_defs ', "EPSG:3307":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=0,-0.15,0.68,0,0,0,0 +units=m +no_defs ', "EPSG:3308":'+proj=lcc +lat_1=-30.75 +lat_2=-35.75 +lat_0=-33.25 +lon_0=147 +x_0=9300000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3309":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +datum=NAD27 +units=m +no_defs ', "EPSG:3310":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3311":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3312":'+proj=utm +zone=21 +ellps=intl +towgs84=-186,230,110,0,0,0,0 +units=m +no_defs ', "EPSG:3313":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3314":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=0 +lon_0=26 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:3315":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=0.9998 +x_0=0 +y_0=0 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:3316":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3317":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3318":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3319":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3320":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3321":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3322":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3323":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3324":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3325":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3326":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3327":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +units=m +no_defs ', "EPSG:3328":'+proj=sterea +lat_0=52.16666666666666 +lon_0=19.16666666666667 +k=0.999714 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3329":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3330":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3331":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3332":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3333":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3334":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3335":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3336":'+proj=utm +zone=42 +south +ellps=intl +towgs84=145,-187,103,0,0,0,0 +units=m +no_defs ', "EPSG:3337":'+proj=lcc +lat_1=-20.19506944444445 +lat_0=-20.19506944444445 +lon_0=57.52182777777778 +k_0=1 +x_0=1000000 +y_0=1000000 +ellps=clrk80 +towgs84=-770.1,158.4,-498.2,0,0,0,0 +units=m +no_defs ', "EPSG:3338":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3339":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ', "EPSG:3340":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ', "EPSG:3341":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ', "EPSG:3342":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-79.9,-158,-168.9,0,0,0,0 +units=m +no_defs ', "EPSG:3343":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3344":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3345":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3346":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3347":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3348":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=63.390675 +lon_0=-91.86666666666666 +x_0=6200000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3349":'+proj=merc +lon_0=-150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3350":'+proj=tmerc +lat_0=0.1 +lon_0=21.95 +k=1 +x_0=250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:3351":'+proj=tmerc +lat_0=0.1 +lon_0=24.95 +k=1 +x_0=1250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:3352":'+proj=tmerc +lat_0=0.1 +lon_0=27.95 +k=1 +x_0=2250000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:3353":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ', "EPSG:3354":'+proj=utm +zone=32 +south +ellps=intl +units=m +no_defs ', "EPSG:3355":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-146.21,112.63,4.05,0,0,0,0 +units=m +no_defs ', "EPSG:3356":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=m +no_defs ', "EPSG:3357":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=m +no_defs ', "EPSG:3358":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3359":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024385 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3360":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3361":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3362":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3363":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3364":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3365":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3366":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ', "EPSG:3367":'+proj=utm +zone=28 +ellps=clrk80 +units=m +no_defs ', "EPSG:3368":'+proj=utm +zone=29 +ellps=clrk80 +units=m +no_defs ', "EPSG:3369":'+proj=utm +zone=30 +ellps=clrk80 +units=m +no_defs ', "EPSG:3370":'+proj=utm +zone=59 +datum=NAD27 +units=m +no_defs ', "EPSG:3371":'+proj=utm +zone=60 +datum=NAD27 +units=m +no_defs ', "EPSG:3372":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3373":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3374":'+proj=utm +zone=29 +ellps=intl +units=m +no_defs ', "EPSG:3375":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257964666666 +k=0.99984 +x_0=804671 +y_0=0 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +units=m +no_defs ', "EPSG:3376":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ', "EPSG:3377":'+proj=cass +lat_0=2.121679744444445 +lon_0=103.4279362361111 +x_0=-14810.562 +y_0=8758.32 +ellps=GRS80 +units=m +no_defs ', "EPSG:3378":'+proj=cass +lat_0=2.682347636111111 +lon_0=101.9749050416667 +x_0=3673.785 +y_0=-4240.573 +ellps=GRS80 +units=m +no_defs ', "EPSG:3379":'+proj=cass +lat_0=3.769388088888889 +lon_0=102.3682989833333 +x_0=-7368.228 +y_0=6485.858 +ellps=GRS80 +units=m +no_defs ', "EPSG:3380":'+proj=cass +lat_0=3.68464905 +lon_0=101.3891079138889 +x_0=-34836.161 +y_0=56464.049 +ellps=GRS80 +units=m +no_defs ', "EPSG:3381":'+proj=cass +lat_0=4.9762852 +lon_0=103.070275625 +x_0=19594.245 +y_0=3371.895 +ellps=GRS80 +units=m +no_defs ', "EPSG:3382":'+proj=cass +lat_0=5.421517541666667 +lon_0=100.3443769638889 +x_0=-23.414 +y_0=62.283 +ellps=GRS80 +units=m +no_defs ', "EPSG:3383":'+proj=cass +lat_0=5.964672713888889 +lon_0=100.6363711111111 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:3384":'+proj=cass +lat_0=4.859063022222222 +lon_0=100.8154105861111 +x_0=-1.769 +y_0=133454.779 +ellps=GRS80 +units=m +no_defs ', "EPSG:3385":'+proj=cass +lat_0=5.972543658333334 +lon_0=102.2952416694444 +x_0=13227.851 +y_0=8739.894 +ellps=GRS80 +units=m +no_defs ', "EPSG:3386":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ', "EPSG:3387":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-96.062,-82.428,-121.753,4.801,0.345,-1.376,1.496 +units=m +no_defs ', "EPSG:3388":'+proj=merc +lon_0=51 +lat_ts=42 +x_0=0 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:3389":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:3390":'+proj=tmerc +lat_0=0 +lon_0=180 +k=1 +x_0=60500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:3391":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ', "EPSG:3392":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ', "EPSG:3393":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=70.995,-335.916,262.898,0,0,0,0 +units=m +no_defs ', "EPSG:3394":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +units=m +no_defs ', "EPSG:3395":'+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3396":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3397":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3398":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3399":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:3400":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3401":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3402":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3403":'+proj=tmerc +lat_0=0 +lon_0=-115 +k=0.9992 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3404":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3405":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ', "EPSG:3406":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=-192.873,-39.382,-111.202,-0.00205,-0.0005,0.00335,0.0188 +units=m +no_defs ', "EPSG:3407":'+proj=cass +lat_0=22.31213333333334 +lon_0=114.1785555555556 +x_0=40243.57775604237 +y_0=19069.93351512578 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ', "EPSG:3408":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ', "EPSG:3409":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ', "EPSG:3410":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +a=6371228 +b=6371228 +units=m +no_defs ', "EPSG:3411":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ', "EPSG:3412":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ', "EPSG:3413":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=-45 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3414":'+proj=tmerc +lat_0=1.366666666666667 +lon_0=103.8333333333333 +k=1 +x_0=28001.642 +y_0=38744.572 +ellps=WGS84 +units=m +no_defs ', "EPSG:3415":'+proj=lcc +lat_1=18 +lat_2=24 +lat_0=21 +lon_0=114 +x_0=500000 +y_0=500000 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:3416":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3417":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3418":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3419":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3420":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3421":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3422":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3423":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3424":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3425":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3426":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3427":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3428":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3429":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3430":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3431":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3432":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3433":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3434":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3435":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3436":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3437":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3438":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3439":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ', "EPSG:3440":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-180.624,-225.516,173.919,-0.81,-1.898,8.336,16.7101 +units=m +no_defs ', "EPSG:3441":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3442":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3443":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3444":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3445":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3446":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3447":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=150328 +y_0=166262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3448":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=750000 +y_0=650000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3449":'+proj=utm +zone=17 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3450":'+proj=utm +zone=18 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3451":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3452":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3453":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3454":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3455":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3456":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3457":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3458":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3459":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3460":'+proj=tmerc +lat_0=-17 +lon_0=178.75 +k=0.99985 +x_0=2000000 +y_0=4000000 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:3461":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ', "EPSG:3462":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-83,37,124,0,0,0,0 +units=m +no_defs ', "EPSG:3463":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3464":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3465":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3466":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3467":'+proj=aea +lat_1=55 +lat_2=65 +lat_0=50 +lon_0=-154 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3468":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3469":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3470":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3471":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3472":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3473":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3474":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3475":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3476":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3477":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3478":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3479":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3480":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3481":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3482":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3483":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3484":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3485":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3486":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3487":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3488":'+proj=aea +lat_1=34 +lat_2=40.5 +lat_0=0 +lon_0=-120 +x_0=0 +y_0=-4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3489":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3490":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3491":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3492":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3493":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3494":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3495":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3496":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3497":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3498":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3499":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3500":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000.0001016 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3501":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3502":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3503":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3504":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3505":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3506":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8288036576 +y_0=304800.6096012192 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3507":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3508":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096012192 +y_0=152400.3048006096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3509":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3510":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3511":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3512":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3513":'+proj=aea +lat_1=24 +lat_2=31.5 +lat_0=24 +lon_0=-84 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3514":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3515":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3516":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3517":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3518":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3519":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3520":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3521":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3522":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3523":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3524":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3525":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000.0001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3526":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3527":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3528":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3529":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3530":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3531":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=699999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3532":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3533":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=99999.99989839978 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3534":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3535":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=249999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3536":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3537":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3538":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3539":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3540":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3541":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=399999.99998984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3542":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3543":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3544":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3545":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3546":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3547":'+proj=lcc +lat_1=37.08333333333334 +lat_2=38.66666666666666 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=1500000 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3548":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3549":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000.0001016001 +y_0=500000.0001016001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3550":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3551":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3552":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3553":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=999999.9999898402 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3554":'+proj=tmerc +lat_0=43.5 +lon_0=-69.125 +k=0.99998 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3555":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-67.875 +k=0.99998 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3556":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.375 +k=0.99998 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3557":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3558":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3559":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3560":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3561":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3562":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3563":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3564":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3565":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=61,-285,-181,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3566":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3567":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3568":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3569":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3570":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3571":'+proj=laea +lat_0=90 +lon_0=180 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3572":'+proj=laea +lat_0=90 +lon_0=-150 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3573":'+proj=laea +lat_0=90 +lon_0=-100 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3574":'+proj=laea +lat_0=90 +lon_0=-40 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3575":'+proj=laea +lat_0=90 +lon_0=10 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3576":'+proj=laea +lat_0=90 +lon_0=90 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3577":'+proj=aea +lat_1=-18 +lat_2=-36 +lat_0=0 +lon_0=132 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3578":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3579":'+proj=aea +lat_1=61.66666666666666 +lat_2=68 +lat_0=59 +lon_0=-132.5 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3580":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3581":'+proj=lcc +lat_1=62 +lat_2=70 +lat_0=0 +lon_0=-112 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3582":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=399999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3583":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3584":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3585":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3586":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000.0001016002 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3587":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3588":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=5999999.999976001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3589":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3590":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=7999999.999968001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3591":'+proj=omerc +lat_0=45.30916666666666 +lonc=-86 +alpha=337.25556 +k=0.9996 +x_0=2546731.496 +y_0=-4354009.816 +no_uoff +gamma=337.25556 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3592":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3593":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=3999999.999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3594":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3595":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3596":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3597":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3598":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3599":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3600":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=699999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3601":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3602":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3603":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3604":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3605":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3606":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3607":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3608":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000.00001016 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3609":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3610":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000.00001016 +y_0=8000000.000010163 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3611":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3612":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000.0000101599 +y_0=3999999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3613":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3614":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3615":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3616":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3617":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3618":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3619":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3620":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3621":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3622":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3623":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3624":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=249999.9998983998 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3625":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3626":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3627":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3628":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3629":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3630":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3631":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3632":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3633":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3634":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3635":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3636":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=599999.9999976 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3637":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3638":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3639":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3640":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3641":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3642":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3643":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3644":'+proj=lcc +lat_1=43 +lat_2=45.5 +lat_0=41.75 +lon_0=-120.5 +x_0=399999.9999984 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3645":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3646":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000.0001424 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3647":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3648":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000.0001464 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3649":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3650":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3651":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3652":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3653":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3654":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=99999.99998983997 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3655":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3656":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3657":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3658":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3659":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3660":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3661":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3662":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3663":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3664":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=699999.9998983998 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3665":'+proj=aea +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3666":'+proj=lcc +lat_1=27.5 +lat_2=35 +lat_0=18 +lon_0=-100 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3667":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3668":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000.0001016002 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3669":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3670":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3671":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3672":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000.0000000001 +y_0=5000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3673":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3674":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=3999999.9998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3675":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3676":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=1999999.999992 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3677":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=2000000.00001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3678":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3679":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.0001504 +y_0=999999.9999960001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3680":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000.00001016 +y_0=999999.9999898402 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3681":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3682":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.0001504 +y_0=2999999.999988 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:3683":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000.00001016 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3684":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3685":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3686":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=2000000.0001016 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3687":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3688":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000.0001016 +y_0=999999.9998983998 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3689":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3690":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3691":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3692":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000.0001016001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3693":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3694":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3695":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3696":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3697":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3698":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3699":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3700":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3701":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9996 +x_0=520000 +y_0=-4480000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3702":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3703":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3704":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3705":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3706":'+proj=utm +zone=59 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3707":'+proj=utm +zone=60 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3708":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3709":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3710":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3711":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3712":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3713":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3714":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3715":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3716":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3717":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3718":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3719":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3720":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3721":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3722":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3723":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3724":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3725":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3726":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3727":'+proj=tmerc +lat_0=-21.11666666666667 +lon_0=55.53333333333333 +k=1 +x_0=160000 +y_0=50000 +ellps=intl +towgs84=94,-948,-1262,0,0,0,0 +units=m +no_defs ', "EPSG:3728":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3729":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3730":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3731":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3732":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3733":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3734":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3735":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3736":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3737":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3738":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3739":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3740":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3741":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3742":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3743":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3744":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3745":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3746":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3747":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3748":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3749":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3750":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3751":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3752":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3753":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3754":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3755":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3756":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=399999.99998984 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3757":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3758":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3759":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3760":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3761":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3762":'+proj=lcc +lat_1=-54 +lat_2=-54.75 +lat_0=-55 +lon_0=-37 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3763":'+proj=tmerc +lat_0=39.66825833333333 +lon_0=-8.133108333333334 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3764":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=400000 +y_0=800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3765":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3766":'+proj=lcc +lat_1=45.91666666666666 +lat_2=43.08333333333334 +lat_0=0 +lon_0=16.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3767":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3768":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3769":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=-73,213,296,0,0,0,0 +units=m +no_defs ', "EPSG:3770":'+proj=tmerc +lat_0=32 +lon_0=-64.75 +k=1 +x_0=550000 +y_0=100000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3771":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:3772":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:3773":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:3774":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:3775":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3776":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3777":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3778":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3779":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3780":'+proj=tmerc +lat_0=0 +lon_0=-114 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3781":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3782":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3783":'+proj=tmerc +lat_0=-25.06855261111111 +lon_0=-130.1129671111111 +k=1 +x_0=14200 +y_0=15500 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3784":'+proj=utm +zone=9 +south +ellps=intl +towgs84=185,165,42,0,0,0,0 +units=m +no_defs ', "EPSG:3785":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', "EPSG:3786":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ', "EPSG:3787":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:3788":'+proj=tmerc +lat_0=0 +lon_0=166 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3789":'+proj=tmerc +lat_0=0 +lon_0=169 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3790":'+proj=tmerc +lat_0=0 +lon_0=179 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3791":'+proj=tmerc +lat_0=0 +lon_0=-178 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3793":'+proj=tmerc +lat_0=0 +lon_0=-176.5 +k=1 +x_0=3500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3794":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3795":'+proj=lcc +lat_1=23 +lat_2=21.7 +lat_0=22.35 +lon_0=-81 +x_0=500000 +y_0=280296.016 +datum=NAD27 +units=m +no_defs ', "EPSG:3796":'+proj=lcc +lat_1=21.3 +lat_2=20.13333333333333 +lat_0=20.71666666666667 +lon_0=-76.83333333333333 +x_0=500000 +y_0=229126.939 +datum=NAD27 +units=m +no_defs ', "EPSG:3797":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:3798":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3799":'+proj=lcc +lat_1=50 +lat_2=46 +lat_0=44 +lon_0=-70 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3800":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:3801":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3802":'+proj=tmerc +lat_0=0 +lon_0=-120 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3812":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=50.797815 +lon_0=4.359215833333333 +x_0=649328 +y_0=665262 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3814":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3815":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3816":'+proj=tmerc +lat_0=32.5 +lon_0=-89.75 +k=0.9998335 +x_0=500000 +y_0=1300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3825":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3826":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3827":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ', "EPSG:3828":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.9999 +x_0=250000 +y_0=0 +ellps=aust_SA +units=m +no_defs ', "EPSG:3829":'+proj=utm +zone=51 +ellps=intl +towgs84=-637,-549,-203,0,0,0,0 +units=m +no_defs ', "EPSG:3832":'+proj=merc +lon_0=150 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3833":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3834":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:3835":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:3836":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:3837":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3838":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3839":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3840":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3841":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:3842":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:3843":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:3844":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:3845":'+proj=tmerc +lat_0=0 +lon_0=11.30625 +k=1.000006 +x_0=1500025.141 +y_0=-667.282 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3846":'+proj=tmerc +lat_0=0 +lon_0=13.55626666666667 +k=1.0000058 +x_0=1500044.695 +y_0=-667.13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3847":'+proj=tmerc +lat_0=0 +lon_0=15.80628452944445 +k=1.00000561024 +x_0=1500064.274 +y_0=-667.711 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3848":'+proj=tmerc +lat_0=0 +lon_0=18.0563 +k=1.0000054 +x_0=1500083.521 +y_0=-668.8440000000001 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3849":'+proj=tmerc +lat_0=0 +lon_0=20.30631666666667 +k=1.0000052 +x_0=1500102.765 +y_0=-670.706 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3850":'+proj=tmerc +lat_0=0 +lon_0=22.55633333333333 +k=1.0000049 +x_0=1500121.846 +y_0=-672.557 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3851":'+proj=lcc +lat_1=-37.5 +lat_2=-44.5 +lat_0=-41 +lon_0=173 +x_0=3000000 +y_0=7000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3852":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-90 +lon_0=157 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3854":'+proj=tmerc +lat_0=0 +lon_0=18.05787 +k=0.99999506 +x_0=100182.7406 +y_0=-6500620.1207 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', //"EPSG:3857":'+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', "EPSG:3873":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3874":'+proj=tmerc +lat_0=0 +lon_0=20 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3875":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3876":'+proj=tmerc +lat_0=0 +lon_0=22 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3877":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3878":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=24500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3879":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3880":'+proj=tmerc +lat_0=0 +lon_0=26 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3881":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3882":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3883":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3884":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3885":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3890":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3891":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3892":'+proj=utm +zone=39 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3893":'+proj=tmerc +lat_0=29.02626833333333 +lon_0=46.5 +k=0.9994 +x_0=800000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:3907":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ', "EPSG:3908":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ', "EPSG:3909":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ', "EPSG:3910":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ', "EPSG:3911":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ', "EPSG:3912":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=500000 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +units=m +no_defs ', "EPSG:3920":'+proj=utm +zone=20 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=m +no_defs ', "EPSG:3942":'+proj=lcc +lat_1=41.25 +lat_2=42.75 +lat_0=42 +lon_0=3 +x_0=1700000 +y_0=1200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3943":'+proj=lcc +lat_1=42.25 +lat_2=43.75 +lat_0=43 +lon_0=3 +x_0=1700000 +y_0=2200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3944":'+proj=lcc +lat_1=43.25 +lat_2=44.75 +lat_0=44 +lon_0=3 +x_0=1700000 +y_0=3200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3945":'+proj=lcc +lat_1=44.25 +lat_2=45.75 +lat_0=45 +lon_0=3 +x_0=1700000 +y_0=4200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3946":'+proj=lcc +lat_1=45.25 +lat_2=46.75 +lat_0=46 +lon_0=3 +x_0=1700000 +y_0=5200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3947":'+proj=lcc +lat_1=46.25 +lat_2=47.75 +lat_0=47 +lon_0=3 +x_0=1700000 +y_0=6200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3948":'+proj=lcc +lat_1=47.25 +lat_2=48.75 +lat_0=48 +lon_0=3 +x_0=1700000 +y_0=7200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3949":'+proj=lcc +lat_1=48.25 +lat_2=49.75 +lat_0=49 +lon_0=3 +x_0=1700000 +y_0=8200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3950":'+proj=lcc +lat_1=49.25 +lat_2=50.75 +lat_0=50 +lon_0=3 +x_0=1700000 +y_0=9200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3968":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3969":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3970":'+proj=lcc +lat_1=37 +lat_2=39.5 +lat_0=36 +lon_0=-79.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3973":'+proj=laea +lat_0=90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3974":'+proj=laea +lat_0=-90 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3975":'+proj=cea +lon_0=0 +lat_ts=30 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3976":'+proj=stere +lat_0=-90 +lat_ts=-70 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3978":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3979":'+proj=lcc +lat_1=49 +lat_2=77 +lat_0=49 +lon_0=-95 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:3985":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:3986":'+proj=tmerc +lat_0=-9 +lon_0=30 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:3987":'+proj=tmerc +lat_0=-9 +lon_0=28 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:3988":'+proj=tmerc +lat_0=-9 +lon_0=26 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:3989":'+proj=tmerc +lat_0=-9 +lon_0=24 +k=1 +x_0=200000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:3991":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=0 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3992":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=152400.3048006096 +y_0=30480.06096012192 +ellps=clrk66 +towgs84=11,72,-101,0,0,0,0 +units=us-ft +no_defs ', "EPSG:3994":'+proj=merc +lon_0=100 +lat_ts=-41 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3995":'+proj=stere +lat_0=90 +lat_ts=71 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3996":'+proj=stere +lat_0=90 +lat_ts=75 +lon_0=0 +k=1 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:3997":'+proj=tmerc +lat_0=0 +lon_0=55.33333333333334 +k=1 +x_0=500000 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:4026":'+proj=tmerc +lat_0=0 +lon_0=28.4 +k=0.9999400000000001 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4037":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ', "EPSG:4038":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ', "EPSG:4048":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4049":'+proj=tmerc +lat_0=0 +lon_0=14 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4050":'+proj=tmerc +lat_0=0 +lon_0=16 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4051":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4056":'+proj=tmerc +lat_0=0 +lon_0=20 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4057":'+proj=tmerc +lat_0=0 +lon_0=22 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4058":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4059":'+proj=tmerc +lat_0=0 +lon_0=26 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4060":'+proj=tmerc +lat_0=0 +lon_0=28 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4061":'+proj=utm +zone=33 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4062":'+proj=utm +zone=34 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4063":'+proj=utm +zone=35 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4071":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-134,229,-29,0,0,0,0 +units=m +no_defs ', "EPSG:4082":'+proj=utm +zone=27 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4083":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4087":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:4088":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +a=6371007 +b=6371007 +units=m +no_defs ', "EPSG:4093":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.99998 +x_0=200000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4094":'+proj=tmerc +lat_0=0 +lon_0=10 +k=0.99998 +x_0=400000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4095":'+proj=tmerc +lat_0=0 +lon_0=11.75 +k=0.99998 +x_0=600000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4096":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=800000 +y_0=-5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4217":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4399":'+proj=tmerc +lat_0=0 +lon_0=171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4400":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4401":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4402":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4403":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4404":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4405":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4406":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4407":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4408":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4409":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4410":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4411":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4412":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4413":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4414":'+proj=tmerc +lat_0=13.5 +lon_0=144.75 +k=1 +x_0=100000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4415":'+proj=lcc +lat_1=-6.5 +lat_2=-11.5 +lat_0=-9 +lon_0=26 +x_0=500000 +y_0=500000 +ellps=clrk66 +towgs84=-103.746,-9.614,-255.95,0,0,0,0 +units=m +no_defs ', "EPSG:4417":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:4418":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4419":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4420":'+proj=tmerc +lat_0=0 +lon_0=177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4421":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4422":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4423":'+proj=tmerc +lat_0=0 +lon_0=-165 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4424":'+proj=tmerc +lat_0=0 +lon_0=-159 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4425":'+proj=tmerc +lat_0=0 +lon_0=-153 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4426":'+proj=tmerc +lat_0=0 +lon_0=-147 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4427":'+proj=tmerc +lat_0=0 +lon_0=-141 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4428":'+proj=tmerc +lat_0=0 +lon_0=-135 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4429":'+proj=tmerc +lat_0=0 +lon_0=-129 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4430":'+proj=tmerc +lat_0=0 +lon_0=-123 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4431":'+proj=tmerc +lat_0=0 +lon_0=-117 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4432":'+proj=tmerc +lat_0=0 +lon_0=-111 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4433":'+proj=tmerc +lat_0=0 +lon_0=-105 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4434":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:4437":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4438":'+proj=tmerc +lat_0=0 +lon_0=-75 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4439":'+proj=tmerc +lat_0=0 +lon_0=-69 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4455":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4456":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=609601.2192024384 +y_0=30480.06096012192 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:4457":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:4462":'+proj=lcc +lat_1=-18 +lat_2=-36 +lat_0=-27 +lon_0=132 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:4467":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4471":'+proj=utm +zone=38 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4474":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-382,-59,-262,0,0,0,0 +units=m +no_defs ', "EPSG:4484":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4485":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4486":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4487":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4488":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4489":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4491":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4492":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4493":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4494":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4495":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4496":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4497":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4498":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4499":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4500":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4501":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4502":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4503":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4504":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4505":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4506":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4507":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4508":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4509":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4510":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4511":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4512":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4513":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4514":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4515":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4516":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4517":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4518":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4519":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4520":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4521":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4522":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4523":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4524":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4525":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4526":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4527":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4528":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4529":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4530":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4531":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4532":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4533":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4534":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4535":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4536":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4537":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4538":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4539":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4540":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4541":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4542":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4543":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4544":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4545":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4546":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4547":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4548":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4549":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4550":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4551":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4552":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4553":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4554":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs ', "EPSG:4559":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4568":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4569":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4570":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4571":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4572":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4573":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4574":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4575":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4576":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4577":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4578":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4579":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4580":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4581":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4582":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4583":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4584":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4585":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4586":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4587":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4588":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4589":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4647":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4652":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4653":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4654":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4655":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4656":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4766":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4767":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4768":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4769":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=33500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4770":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=34500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4771":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=35500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4772":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=36500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4773":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=37500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4774":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=38500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4775":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=39500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4776":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=40500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4777":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=41500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4778":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=42500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4779":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=43500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4780":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=44500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4781":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=45500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4782":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4783":'+proj=tmerc +lat_0=0 +lon_0=78 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4784":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4785":'+proj=tmerc +lat_0=0 +lon_0=84 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4786":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4787":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4788":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4789":'+proj=tmerc +lat_0=0 +lon_0=96 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4790":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4791":'+proj=tmerc +lat_0=0 +lon_0=102 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4792":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4793":'+proj=tmerc +lat_0=0 +lon_0=108 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4794":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4795":'+proj=tmerc +lat_0=0 +lon_0=114 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4796":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4797":'+proj=tmerc +lat_0=0 +lon_0=120 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4798":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4799":'+proj=tmerc +lat_0=0 +lon_0=126 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4800":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4812":'+proj=tmerc +lat_0=0 +lon_0=132 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4822":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +units=m +no_defs ', "EPSG:4826":'+proj=lcc +lat_1=15 +lat_2=16.66666666666667 +lat_0=15.83333333333333 +lon_0=-24 +x_0=161587.83 +y_0=128511.202 +datum=WGS84 +units=m +no_defs ', "EPSG:4839":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4855":'+proj=tmerc +lat_0=0 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4856":'+proj=tmerc +lat_0=0 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4857":'+proj=tmerc +lat_0=0 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4858":'+proj=tmerc +lat_0=0 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4859":'+proj=tmerc +lat_0=0 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4860":'+proj=tmerc +lat_0=0 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4861":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4862":'+proj=tmerc +lat_0=0 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4863":'+proj=tmerc +lat_0=0 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4864":'+proj=tmerc +lat_0=0 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4865":'+proj=tmerc +lat_0=0 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4866":'+proj=tmerc +lat_0=0 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4867":'+proj=tmerc +lat_0=0 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4868":'+proj=tmerc +lat_0=0 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4869":'+proj=tmerc +lat_0=0 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4870":'+proj=tmerc +lat_0=0 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4871":'+proj=tmerc +lat_0=0 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4872":'+proj=tmerc +lat_0=0 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4873":'+proj=tmerc +lat_0=0 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4874":'+proj=tmerc +lat_0=0 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4875":'+proj=tmerc +lat_0=0 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4876":'+proj=tmerc +lat_0=0 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4877":'+proj=tmerc +lat_0=0 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4878":'+proj=tmerc +lat_0=0 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4879":'+proj=tmerc +lat_0=0 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:4880":'+proj=tmerc +lat_0=0 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5014":'+proj=utm +zone=25 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5015":'+proj=utm +zone=26 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5016":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5018":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +units=m +no_defs ', "EPSG:5041":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:5042":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:5048":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5069":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:5070":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5071":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5072":'+proj=aea +lat_1=29.5 +lat_2=45.5 +lat_0=23 +lon_0=-96 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5105":'+proj=tmerc +lat_0=58 +lon_0=5.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5106":'+proj=tmerc +lat_0=58 +lon_0=6.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5107":'+proj=tmerc +lat_0=58 +lon_0=7.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5108":'+proj=tmerc +lat_0=58 +lon_0=8.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5109":'+proj=tmerc +lat_0=58 +lon_0=9.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5110":'+proj=tmerc +lat_0=58 +lon_0=10.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5111":'+proj=tmerc +lat_0=58 +lon_0=11.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5112":'+proj=tmerc +lat_0=58 +lon_0=12.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5113":'+proj=tmerc +lat_0=58 +lon_0=13.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5114":'+proj=tmerc +lat_0=58 +lon_0=14.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5115":'+proj=tmerc +lat_0=58 +lon_0=15.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5116":'+proj=tmerc +lat_0=58 +lon_0=16.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5117":'+proj=tmerc +lat_0=58 +lon_0=17.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5118":'+proj=tmerc +lat_0=58 +lon_0=18.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5119":'+proj=tmerc +lat_0=58 +lon_0=19.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5120":'+proj=tmerc +lat_0=58 +lon_0=20.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5121":'+proj=tmerc +lat_0=58 +lon_0=21.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5122":'+proj=tmerc +lat_0=58 +lon_0=22.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5123":'+proj=tmerc +lat_0=58 +lon_0=23.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5124":'+proj=tmerc +lat_0=58 +lon_0=24.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5125":'+proj=tmerc +lat_0=58 +lon_0=25.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5126":'+proj=tmerc +lat_0=58 +lon_0=26.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5127":'+proj=tmerc +lat_0=58 +lon_0=27.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5128":'+proj=tmerc +lat_0=58 +lon_0=28.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5129":'+proj=tmerc +lat_0=58 +lon_0=29.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5130":'+proj=tmerc +lat_0=58 +lon_0=30.5 +k=1 +x_0=100000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5167":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5168":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ', "EPSG:5169":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5170":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5171":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5172":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5173":'+proj=tmerc +lat_0=38 +lon_0=125.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5174":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5175":'+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=550000 +ellps=bessel +units=m +no_defs ', "EPSG:5176":'+proj=tmerc +lat_0=38 +lon_0=129.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5177":'+proj=tmerc +lat_0=38 +lon_0=131.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs ', "EPSG:5178":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=bessel +units=m +no_defs ', "EPSG:5179":'+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5180":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5181":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5182":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=550000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5183":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5184":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5185":'+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5186":'+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5187":'+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5188":'+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5221":'+proj=krovak +lat_0=49.5 +lon_0=42.5 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:5223":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=500000 +datum=WGS84 +units=m +no_defs ', "EPSG:5234":'+proj=tmerc +lat_0=7.000480277777778 +lon_0=80.77171111111112 +k=0.9999238418 +x_0=200000 +y_0=200000 +a=6377276.345 +b=6356075.41314024 +towgs84=-97,787,86,0,0,0,0 +units=m +no_defs ', "EPSG:5235":'+proj=tmerc +lat_0=7.000471527777778 +lon_0=80.77171308333334 +k=0.9999238418 +x_0=500000 +y_0=500000 +a=6377276.345 +b=6356075.41314024 +towgs84=-0.293,766.95,87.713,0.195704,1.69507,3.47302,-0.039338 +units=m +no_defs ', "EPSG:5243":'+proj=lcc +lat_1=48.66666666666666 +lat_2=53.66666666666666 +lat_0=51 +lon_0=10.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5247":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31580995 +k=0.99984 +x_0=0 +y_0=0 +no_uoff +gamma=53.13010236111111 +ellps=GRS80 +units=m +no_defs ', "EPSG:5253":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5254":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5255":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5256":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5257":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5258":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5259":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5266":'+proj=tmerc +lat_0=0 +lon_0=90 +k=1 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5269":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5270":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5271":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5272":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5273":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5274":'+proj=tmerc +lat_0=0 +lon_0=42 +k=1 +x_0=14500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5275":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=15500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5292":'+proj=tmerc +lat_0=0 +lon_0=90.73333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5293":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5294":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5295":'+proj=tmerc +lat_0=0 +lon_0=90.03333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5296":'+proj=tmerc +lat_0=0 +lon_0=90.15000000000001 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5297":'+proj=tmerc +lat_0=0 +lon_0=91.13333333333334 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5298":'+proj=tmerc +lat_0=0 +lon_0=91.23333333333333 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5299":'+proj=tmerc +lat_0=0 +lon_0=89.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5300":'+proj=tmerc +lat_0=0 +lon_0=91.34999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5301":'+proj=tmerc +lat_0=0 +lon_0=89.84999999999999 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5302":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5303":'+proj=tmerc +lat_0=0 +lon_0=89.06666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5304":'+proj=tmerc +lat_0=0 +lon_0=90.26666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5305":'+proj=tmerc +lat_0=0 +lon_0=89.55 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5306":'+proj=tmerc +lat_0=0 +lon_0=91.75 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5307":'+proj=tmerc +lat_0=0 +lon_0=90.5 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5308":'+proj=tmerc +lat_0=0 +lon_0=90.16666666666667 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5309":'+proj=tmerc +lat_0=0 +lon_0=90.11666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5310":'+proj=tmerc +lat_0=0 +lon_0=91.56666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5311":'+proj=tmerc +lat_0=0 +lon_0=90.86666666666666 +k=1 +x_0=250000 +y_0=-2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5316":'+proj=tmerc +lat_0=0 +lon_0=-7 +k=0.999997 +x_0=200000 +y_0=-6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5320":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5321":'+proj=lcc +lat_1=44.5 +lat_2=54.5 +lat_0=0 +lon_0=-84 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5325":'+proj=lcc +lat_1=64.25 +lat_2=65.75 +lat_0=65 +lon_0=-19 +x_0=1700000 +y_0=300000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5329":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-403,684,41,0,0,0,0 +pm=jakarta +units=m +no_defs ', "EPSG:5330":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ', "EPSG:5331":'+proj=merc +lon_0=3.192280555555556 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ', "EPSG:5337":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', "EPSG:5343":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5344":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5345":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5346":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5347":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5348":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5349":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5355":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5356":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5357":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5361":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5362":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5367":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5382":'+proj=utm +zone=21 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5383":'+proj=utm +zone=22 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5387":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5388":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5389":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5396":'+proj=utm +zone=26 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5456":'+proj=lcc +lat_1=10.46666666666667 +lat_0=10.46666666666667 +lon_0=-84.33333333333333 +k_0=0.99995696 +x_0=500000 +y_0=271820.522 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ', "EPSG:5457":'+proj=lcc +lat_1=9 +lat_0=9 +lon_0=-83.66666666666667 +k_0=0.99995696 +x_0=500000 +y_0=327987.436 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ', "EPSG:5458":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ', "EPSG:5459":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ', "EPSG:5460":'+proj=lcc +lat_1=13.78333333333333 +lat_0=13.78333333333333 +lon_0=-89 +k_0=0.99996704 +x_0=500000 +y_0=295809.184 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ', "EPSG:5461":'+proj=lcc +lat_1=13.86666666666667 +lat_0=13.86666666666667 +lon_0=-85.5 +k_0=0.99990314 +x_0=500000 +y_0=359891.816 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ', "EPSG:5462":'+proj=lcc +lat_1=11.73333333333333 +lat_0=11.73333333333333 +lon_0=-85.5 +k_0=0.9999222800000001 +x_0=500000 +y_0=288876.327 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ', "EPSG:5463":'+proj=utm +zone=17 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:5466":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +units=m +no_defs ', "EPSG:5469":'+proj=lcc +lat_1=8.416666666666666 +lat_0=8.416666666666666 +lon_0=-80 +k_0=0.99989909 +x_0=500000 +y_0=294865.303 +ellps=clrk66 +units=m +no_defs ', "EPSG:5472":'+proj=poly +lat_0=8.25 +lon_0=-81 +x_0=914391.7962 +y_0=999404.7217154861 +ellps=clrk66 +to_meter=0.9143917962 +no_defs ', "EPSG:5479":'+proj=lcc +lat_1=-76.66666666666667 +lat_2=-79.33333333333333 +lat_0=-78 +lon_0=163 +x_0=7000000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5480":'+proj=lcc +lat_1=-73.66666666666667 +lat_2=-75.33333333333333 +lat_0=-74.5 +lon_0=165 +x_0=5000000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5481":'+proj=lcc +lat_1=-70.66666666666667 +lat_2=-72.33333333333333 +lat_0=-71.5 +lon_0=166 +x_0=3000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5482":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=180 +k=0.994 +x_0=5000000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5490":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5513":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ', "EPSG:5514":'+proj=krovak +lat_0=49.5 +lon_0=24.83333333333333 +alpha=30.28813972222222 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=589,76,480,0,0,0,0 +units=m +no_defs ', "EPSG:5518":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=175,-38,113,0,0,0,0 +units=m +no_defs ', "EPSG:5519":'+proj=tmerc +lat_0=-44 +lon_0=-176.5 +k=1 +x_0=350000 +y_0=650000 +ellps=intl +towgs84=174.05,-25.49,112.57,-0,-0,0.554,0.2263 +units=m +no_defs ', "EPSG:5520":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:5523":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=1500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:5530":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5531":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5532":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:5533":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5534":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5535":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5536":'+proj=utm +zone=21 +south +ellps=intl +units=m +no_defs ', "EPSG:5537":'+proj=utm +zone=22 +south +ellps=intl +units=m +no_defs ', "EPSG:5538":'+proj=utm +zone=23 +south +ellps=intl +units=m +no_defs ', "EPSG:5539":'+proj=utm +zone=24 +south +ellps=intl +units=m +no_defs ', "EPSG:5550":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5551":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5552":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5559":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +ellps=clrk66 +towgs84=213.11,9.37,-74.95,0,0,0,0 +units=m +no_defs ', "EPSG:5562":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5563":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5564":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5565":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5566":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5567":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5568":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5569":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5570":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5571":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5572":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5573":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5574":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5575":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5576":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5577":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5578":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5579":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5580":'+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5581":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5582":'+proj=tmerc +lat_0=0 +lon_0=36 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5583":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=25,-141,-78.5,-0,0.35,0.736,0 +units=m +no_defs ', "EPSG:5588":'+proj=sterea +lat_0=46.5 +lon_0=-66.5 +k=0.999912 +x_0=304800 +y_0=304800 +datum=NAD27 +units=ft +no_defs ', "EPSG:5589":'+proj=tmerc +lat_0=17.06124194444444 +lon_0=-88.6318575 +k=1 +x_0=66220.02833082761 +y_0=135779.5099885299 +a=6378293.645208759 +b=6356617.987679838 +to_meter=0.3047972654 +no_defs ', "EPSG:5596":'+proj=tmerc +lat_0=0 +lon_0=11.33333333333333 +k=1 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5623":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:5624":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:5625":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:5627":'+proj=tmerc +lat_0=0 +lon_0=6 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:5629":'+proj=utm +zone=38 +south +ellps=WGS84 +towgs84=0,0,0,-0,-0,-0,0 +units=m +no_defs ', "EPSG:5631":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:5632":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5633":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5634":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5635":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5636":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5637":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5638":'+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5639":'+proj=lcc +lat_1=35 +lat_2=65 +lat_0=52 +lon_0=10 +x_0=4000000 +y_0=2800000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5641":'+proj=merc +lon_0=-43 +lat_ts=-2 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5643":'+proj=lcc +lat_1=52.66666666666666 +lat_2=54.33333333333334 +lat_0=48 +lon_0=10 +x_0=815000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:5644":'+proj=utm +zone=39 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5646":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:5649":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5650":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5651":'+proj=tmerc +lat_0=0 +lon_0=3 +k=0.9996 +x_0=31500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5652":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=32500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5653":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9996 +x_0=33500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5654":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:5655":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:5659":'+proj=tmerc +lat_0=0 +lon_0=9 +k=0.9996 +x_0=500053 +y_0=-3999820 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +units=m +no_defs ', "EPSG:5663":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:5664":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:5665":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:5666":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5667":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5668":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5669":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5670":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:5671":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:5672":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=33.4,-146.6,-76.3,-0.359,-0.053,0.844,-0.84 +units=m +no_defs ', "EPSG:5673":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:5674":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:5675":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=26,-121,-78,0,0,0,0 +units=m +no_defs ', "EPSG:5676":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:5677":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:5678":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:5679":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:5680":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:5682":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5683":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5684":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5685":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:5700":'+proj=utm +zone=1 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5825":'+proj=tmerc +lat_0=-35.31773627777778 +lon_0=149.0092948305555 +k=1.000086 +x_0=200000 +y_0=600000 +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:5836":'+proj=utm +zone=37 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5837":'+proj=utm +zone=40 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5839":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5842":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ', "EPSG:5844":'+proj=tmerc +lat_0=0 +lon_0=30 +k=0.9999 +x_0=500000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5858":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5875":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5876":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5877":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-67.35,3.88,-38.22,0,0,0,0 +units=m +no_defs ', "EPSG:5879":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-381.788,-57.501,-256.673,0,0,0,0 +units=m +no_defs ', "EPSG:5880":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:5887":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=0.9996 +x_0=1500000 +y_0=5000000 +ellps=GRS80 +units=m +no_defs ', "EPSG:5890":'+proj=stere +lat_0=90 +lat_ts=70 +lon_0=90 +k=1 +x_0=0 +y_0=0 +a=6378273 +b=6356889.449 +units=m +no_defs ', "EPSG:5921":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5922":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5923":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5924":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5925":'+proj=lcc +lat_1=85 +lat_2=77 +lat_0=81.31722600000001 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5926":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5927":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5928":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5929":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5930":'+proj=lcc +lat_1=77 +lat_2=69 +lat_0=73.15574086111111 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5931":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-111 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5932":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=-39 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5933":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=33 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5934":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=105 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5935":'+proj=lcc +lat_1=69 +lat_2=61 +lat_0=65.10127088888888 +lon_0=177 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:5936":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-150 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:5937":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-100 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:5938":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=-33 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:5939":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=18 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:5940":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=105 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:6050":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-30 +x_0=25500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6051":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-52 +x_0=18500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6052":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-12 +x_0=20500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6053":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6054":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-39 +x_0=31500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6055":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-10 +x_0=33500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6056":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-64 +x_0=20500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6057":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-39 +x_0=22500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6058":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-14 +x_0=24500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6059":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-62 +x_0=41500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6060":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-42 +x_0=43500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6061":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-22 +x_0=45500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6062":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-56 +x_0=26500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6063":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-38 +x_0=28500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6064":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-20 +x_0=30500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6065":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-51 +x_0=11500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6066":'+proj=lcc +lat_1=67 +lat_2=63.66666666666666 +lat_0=65.35103930555555 +lon_0=-34 +x_0=13500000 +y_0=7500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6067":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-52 +x_0=20500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6068":'+proj=lcc +lat_1=63.66666666666666 +lat_2=60.33333333333334 +lat_0=62.01530688888889 +lon_0=-37 +x_0=22500000 +y_0=8500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6069":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=16 +x_0=22500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6070":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=21 +x_0=11500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6071":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=10 +x_0=26500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6072":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=34 +x_0=28500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6073":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=14 +x_0=11500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6074":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=34 +x_0=13500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6075":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=53 +x_0=24500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6076":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=93 +x_0=26500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6077":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=52 +x_0=13500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6078":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=83 +x_0=15500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6079":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=114 +x_0=17500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6080":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=145 +x_0=19500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6081":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=58 +x_0=30500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6082":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=82 +x_0=32500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6083":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=106 +x_0=34500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6084":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=130 +x_0=36500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6085":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=154 +x_0=38500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6086":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=179 +x_0=40500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6087":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=54 +x_0=15500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6088":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=74 +x_0=17500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6089":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=95 +x_0=19500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6090":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=116 +x_0=21500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6091":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=137 +x_0=23500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6092":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=158 +x_0=25500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6093":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=179 +x_0=27500000 +y_0=5500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6094":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-163 +x_0=29500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6095":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-147 +x_0=31500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6096":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-165 +x_0=14500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6097":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-147 +x_0=16500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6098":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-90 +x_0=23500000 +y_0=1500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6099":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-115 +x_0=14500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6100":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-75 +x_0=16500000 +y_0=2500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6101":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-129 +x_0=25500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6102":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-99 +x_0=27500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6103":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-69 +x_0=29500000 +y_0=3500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6104":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-129 +x_0=14500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6105":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-104 +x_0=16500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6106":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-79 +x_0=18500000 +y_0=4500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6107":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-131 +x_0=33500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6108":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-111 +x_0=35500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6109":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-91 +x_0=37500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6110":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-71 +x_0=39500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6111":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-132 +x_0=18500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6112":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-113 +x_0=20500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6113":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-94 +x_0=22500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6114":'+proj=lcc +lat_1=70.33333333333333 +lat_2=67 +lat_0=68.68747555555557 +lon_0=-75 +x_0=24500000 +y_0=6500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6115":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=30 +x_0=27500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6116":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=90 +x_0=29500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6117":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=150 +x_0=31500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6118":'+proj=lcc +lat_1=87 +lat_2=83.66666666666667 +lat_0=85.43711833333333 +lon_0=-150 +x_0=21500000 +y_0=1500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6119":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=133 +x_0=28500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6120":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=166 +x_0=10500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6121":'+proj=lcc +lat_1=83.66666666666667 +lat_2=80.33333333333333 +lat_0=82.05842488888888 +lon_0=-154 +x_0=12500000 +y_0=2500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6122":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=176 +x_0=21500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6123":'+proj=lcc +lat_1=80.33333333333333 +lat_2=77 +lat_0=78.70733752777778 +lon_0=-153 +x_0=23500000 +y_0=3500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6124":'+proj=lcc +lat_1=77 +lat_2=73.66666666666667 +lat_0=75.36440330555556 +lon_0=-155 +x_0=12500000 +y_0=4500000 +datum=WGS84 +units=m +no_defs ', "EPSG:6125":'+proj=lcc +lat_1=73.66666666666667 +lat_2=70.33333333333333 +lat_0=72.02500919444445 +lon_0=-5 +x_0=47500000 +y_0=5500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:6128":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=-179.483,-69.379,-27.584,-7.862,8.163,6.042,-13.925 +units=ft +no_defs ', "EPSG:6129":'+proj=utm +zone=17 +ellps=clrk66 +towgs84=8.853,-52.644,180.304,-0.393,-2.323,2.96,-24.081 +units=ft +no_defs ', "EPSG:6141":'+proj=lcc +lat_1=19.33333333333333 +lat_2=19.7 +lat_0=19.33333333333333 +lon_0=80.56666666666666 +x_0=899160 +y_0=579120 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=ft +no_defs ', "EPSG:20004":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20005":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20006":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20007":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20008":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20009":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20010":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20011":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20012":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20013":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20014":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20015":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20016":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20017":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20018":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20019":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20020":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20021":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20022":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20023":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20024":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20025":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20026":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20027":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20028":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20029":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20030":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20031":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20032":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20064":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20065":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20066":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20067":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20068":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20069":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20070":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20071":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20072":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20073":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20074":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20075":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20076":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20077":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20078":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20079":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20080":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20081":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20082":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20083":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20084":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20085":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20086":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20087":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20088":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20089":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20090":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20091":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20092":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=24.47,-130.89,-81.56,-0,-0,0.13,-0.22 +units=m +no_defs ', "EPSG:20135":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', "EPSG:20136":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', "EPSG:20137":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', "EPSG:20138":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-166,-15,204,0,0,0,0 +units=m +no_defs ', "EPSG:20248":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20249":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20250":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20251":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20252":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20253":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20254":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20255":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20256":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20257":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20258":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-117.808,-51.536,137.784,0.303,0.446,0.234,-0.29 +units=m +no_defs ', "EPSG:20348":'+proj=utm +zone=48 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20349":'+proj=utm +zone=49 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20350":'+proj=utm +zone=50 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20351":'+proj=utm +zone=51 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20352":'+proj=utm +zone=52 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20353":'+proj=utm +zone=53 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20354":'+proj=utm +zone=54 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20355":'+proj=utm +zone=55 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20356":'+proj=utm +zone=56 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20357":'+proj=utm +zone=57 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20358":'+proj=utm +zone=58 +south +ellps=aust_SA +towgs84=-134,-48,149,0,0,0,0 +units=m +no_defs ', "EPSG:20436":'+proj=utm +zone=36 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', "EPSG:20437":'+proj=utm +zone=37 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', "EPSG:20438":'+proj=utm +zone=38 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', "EPSG:20439":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', "EPSG:20440":'+proj=utm +zone=40 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', "EPSG:20499":'+proj=utm +zone=39 +ellps=intl +towgs84=-143,-236,7,0,0,0,0 +units=m +no_defs ', "EPSG:20538":'+proj=utm +zone=38 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ', "EPSG:20539":'+proj=utm +zone=39 +ellps=krass +towgs84=-43,-163,45,0,0,0,0 +units=m +no_defs ', "EPSG:20790":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ', "EPSG:20791":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=1 +k=1 +x_0=0 +y_0=0 +ellps=intl +towgs84=-304.046,-60.576,103.64,0,0,0,0 +pm=lisbon +units=m +no_defs ', "EPSG:20822":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', "EPSG:20823":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', "EPSG:20824":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-151.99,287.04,-147.45,0,0,0,0 +units=m +no_defs ', "EPSG:20934":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ', "EPSG:20935":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ', "EPSG:20936":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-143,-90,-294,0,0,0,0 +units=m +no_defs ', "EPSG:21035":'+proj=utm +zone=35 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', "EPSG:21036":'+proj=utm +zone=36 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', "EPSG:21037":'+proj=utm +zone=37 +south +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', "EPSG:21095":'+proj=utm +zone=35 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', "EPSG:21096":'+proj=utm +zone=36 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', "EPSG:21097":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-160,-6,-302,0,0,0,0 +units=m +no_defs ', "EPSG:21100":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +pm=jakarta +units=m +no_defs ', "EPSG:21148":'+proj=utm +zone=48 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', "EPSG:21149":'+proj=utm +zone=49 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', "EPSG:21150":'+proj=utm +zone=50 +south +ellps=bessel +towgs84=-377,681,-50,0,0,0,0 +units=m +no_defs ', "EPSG:21291":'+proj=tmerc +lat_0=0 +lon_0=-62 +k=0.9995000000000001 +x_0=400000 +y_0=0 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ', "EPSG:21292":'+proj=tmerc +lat_0=13.17638888888889 +lon_0=-59.55972222222222 +k=0.9999986 +x_0=30000 +y_0=75000 +ellps=clrk80 +towgs84=31.95,300.99,419.19,0,0,0,0 +units=m +no_defs ', "EPSG:21413":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21414":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21415":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21416":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21417":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21418":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21419":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21420":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21421":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21422":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21423":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21453":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21454":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21455":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21456":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21457":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21458":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21459":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21460":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21461":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21462":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21463":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21473":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21474":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21475":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21476":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21477":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21478":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21479":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21480":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21481":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21482":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21483":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=15.8,-154.4,-82.3,0,0,0,0 +units=m +no_defs ', "EPSG:21500":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=0 +x_0=150000 +y_0=5400000 +ellps=intl +pm=brussels +units=m +no_defs ', "EPSG:21780":'+proj=somerc +lat_0=46.95240555555556 +lon_0=0 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +pm=bern +units=m +no_defs ', "EPSG:21781":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=600000 +y_0=200000 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ', "EPSG:21782":'+proj=somerc +lat_0=46.95240555555556 +lon_0=7.439583333333333 +k_0=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=674.4,15.1,405.3,0,0,0,0 +units=m +no_defs ', "EPSG:21817":'+proj=utm +zone=17 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21818":'+proj=utm +zone=18 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21891":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21892":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21893":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21894":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21896":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-77.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21897":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-74.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21898":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-71.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:21899":'+proj=tmerc +lat_0=4.599047222222222 +lon_0=-68.08091666666667 +k=1 +x_0=1000000 +y_0=1000000 +ellps=intl +towgs84=307,304,-318,0,0,0,0 +units=m +no_defs ', "EPSG:22032":'+proj=utm +zone=32 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ', "EPSG:22033":'+proj=utm +zone=33 +south +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ', "EPSG:22091":'+proj=tmerc +lat_0=0 +lon_0=11.5 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ', "EPSG:22092":'+proj=tmerc +lat_0=0 +lon_0=12 +k=0.9996 +x_0=500000 +y_0=10000000 +ellps=clrk80 +towgs84=-50.9,-347.6,-231,0,0,0,0 +units=m +no_defs ', "EPSG:22171":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22172":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22173":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22174":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22175":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22176":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22177":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22181":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22182":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22183":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22184":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22185":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22186":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22187":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:22191":'+proj=tmerc +lat_0=-90 +lon_0=-72 +k=1 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:22192":'+proj=tmerc +lat_0=-90 +lon_0=-69 +k=1 +x_0=2500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:22193":'+proj=tmerc +lat_0=-90 +lon_0=-66 +k=1 +x_0=3500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:22194":'+proj=tmerc +lat_0=-90 +lon_0=-63 +k=1 +x_0=4500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:22195":'+proj=tmerc +lat_0=-90 +lon_0=-60 +k=1 +x_0=5500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:22196":'+proj=tmerc +lat_0=-90 +lon_0=-57 +k=1 +x_0=6500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:22197":'+proj=tmerc +lat_0=-90 +lon_0=-54 +k=1 +x_0=7500000 +y_0=0 +ellps=intl +towgs84=-148,136,90,0,0,0,0 +units=m +no_defs ', "EPSG:22234":'+proj=utm +zone=34 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22235":'+proj=utm +zone=35 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22236":'+proj=utm +zone=36 +south +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22275":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22277":'+proj=tmerc +lat_0=0 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22279":'+proj=tmerc +lat_0=0 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22281":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22283":'+proj=tmerc +lat_0=0 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22285":'+proj=tmerc +lat_0=0 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22287":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22289":'+proj=tmerc +lat_0=0 +lon_0=29 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22291":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22293":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=0 +y_0=0 +axis=wsu +a=6378249.145 +b=6356514.966398753 +towgs84=-136,-108,-292,0,0,0,0 +units=m +no_defs ', "EPSG:22332":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ', "EPSG:22391":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=9.9 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ', "EPSG:22392":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=9.9 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-263,6,431,0,0,0,0 +units=m +no_defs ', "EPSG:22521":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', "EPSG:22522":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', "EPSG:22523":'+proj=utm +zone=23 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', "EPSG:22524":'+proj=utm +zone=24 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', "EPSG:22525":'+proj=utm +zone=25 +south +ellps=intl +towgs84=-206,172,-6,0,0,0,0 +units=m +no_defs ', "EPSG:22700":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ', "EPSG:22770":'+proj=lcc +lat_1=34.65 +lat_0=34.65 +lon_0=37.35 +k_0=0.9996256 +x_0=300000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ', "EPSG:22780":'+proj=sterea +lat_0=34.2 +lon_0=39.15 +k=0.9995341 +x_0=0 +y_0=0 +a=6378249.2 +b=6356515 +towgs84=-190.421,8.532,238.69,0,0,0,0 +units=m +no_defs ', "EPSG:22832":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:22991":'+proj=tmerc +lat_0=30 +lon_0=35 +k=1 +x_0=300000 +y_0=1100000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ', "EPSG:22992":'+proj=tmerc +lat_0=30 +lon_0=31 +k=1 +x_0=615000 +y_0=810000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ', "EPSG:22993":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ', "EPSG:22994":'+proj=tmerc +lat_0=30 +lon_0=27 +k=1 +x_0=700000 +y_0=1200000 +ellps=helmert +towgs84=-130,110,-13,0,0,0,0 +units=m +no_defs ', "EPSG:23028":'+proj=utm +zone=28 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23029":'+proj=utm +zone=29 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23030":'+proj=utm +zone=30 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23031":'+proj=utm +zone=31 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23032":'+proj=utm +zone=32 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23033":'+proj=utm +zone=33 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23034":'+proj=utm +zone=34 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23035":'+proj=utm +zone=35 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23036":'+proj=utm +zone=36 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23037":'+proj=utm +zone=37 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23038":'+proj=utm +zone=38 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23090":'+proj=tmerc +lat_0=0 +lon_0=0 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23095":'+proj=tmerc +lat_0=0 +lon_0=5 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-87,-98,-121,0,0,0,0 +units=m +no_defs ', "EPSG:23239":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ', "EPSG:23240":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-346,-1,224,0,0,0,0 +units=m +no_defs ', "EPSG:23433":'+proj=utm +zone=33 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:23700":'+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +no_defs ', "EPSG:23830":'+proj=tmerc +lat_0=0 +lon_0=94.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23831":'+proj=tmerc +lat_0=0 +lon_0=97.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23832":'+proj=tmerc +lat_0=0 +lon_0=100.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23833":'+proj=tmerc +lat_0=0 +lon_0=103.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23834":'+proj=tmerc +lat_0=0 +lon_0=106.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23835":'+proj=tmerc +lat_0=0 +lon_0=109.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23836":'+proj=tmerc +lat_0=0 +lon_0=112.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23837":'+proj=tmerc +lat_0=0 +lon_0=115.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23838":'+proj=tmerc +lat_0=0 +lon_0=118.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23839":'+proj=tmerc +lat_0=0 +lon_0=121.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23840":'+proj=tmerc +lat_0=0 +lon_0=124.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23841":'+proj=tmerc +lat_0=0 +lon_0=127.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23842":'+proj=tmerc +lat_0=0 +lon_0=130.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23843":'+proj=tmerc +lat_0=0 +lon_0=133.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23844":'+proj=tmerc +lat_0=0 +lon_0=136.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23845":'+proj=tmerc +lat_0=0 +lon_0=139.5 +k=0.9999 +x_0=200000 +y_0=1500000 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23846":'+proj=utm +zone=46 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23847":'+proj=utm +zone=47 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23848":'+proj=utm +zone=48 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23849":'+proj=utm +zone=49 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23850":'+proj=utm +zone=50 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23851":'+proj=utm +zone=51 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23852":'+proj=utm +zone=52 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23853":'+proj=utm +zone=53 +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23866":'+proj=utm +zone=46 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23867":'+proj=utm +zone=47 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23868":'+proj=utm +zone=48 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23869":'+proj=utm +zone=49 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23870":'+proj=utm +zone=50 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23871":'+proj=utm +zone=51 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23872":'+proj=utm +zone=52 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23877":'+proj=utm +zone=47 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23878":'+proj=utm +zone=48 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23879":'+proj=utm +zone=49 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23880":'+proj=utm +zone=50 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23881":'+proj=utm +zone=51 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23882":'+proj=utm +zone=52 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23883":'+proj=utm +zone=53 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23884":'+proj=utm +zone=54 +south +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:23886":'+proj=utm +zone=46 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23887":'+proj=utm +zone=47 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23888":'+proj=utm +zone=48 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23889":'+proj=utm +zone=49 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23890":'+proj=utm +zone=50 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23891":'+proj=utm +zone=51 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23892":'+proj=utm +zone=52 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23893":'+proj=utm +zone=53 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23894":'+proj=utm +zone=54 +south +a=6378160 +b=6356774.50408554 +towgs84=-24,-15,5,0,0,0,0 +units=m +no_defs ', "EPSG:23946":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ', "EPSG:23947":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ', "EPSG:23948":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=217,823,299,0,0,0,0 +units=m +no_defs ', "EPSG:24047":'+proj=utm +zone=47 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ', "EPSG:24048":'+proj=utm +zone=48 +a=6377276.345 +b=6356075.41314024 +towgs84=210,814,289,0,0,0,0 +units=m +no_defs ', "EPSG:24100":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=167638.49597 +y_0=121918.90616 +a=6378249.144808011 +b=6356514.966204134 +to_meter=0.3047972654 +no_defs ', "EPSG:24200":'+proj=lcc +lat_1=18 +lat_0=18 +lon_0=-77 +k_0=1 +x_0=250000 +y_0=150000 +ellps=clrk66 +towgs84=70,207,389.5,0,0,0,0 +units=m +no_defs ', "EPSG:24305":'+proj=utm +zone=45 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ', "EPSG:24306":'+proj=utm +zone=46 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ', "EPSG:24311":'+proj=utm +zone=41 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', "EPSG:24312":'+proj=utm +zone=42 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', "EPSG:24313":'+proj=utm +zone=43 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', "EPSG:24342":'+proj=utm +zone=42 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24343":'+proj=utm +zone=43 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24344":'+proj=utm +zone=44 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24345":'+proj=utm +zone=45 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24346":'+proj=utm +zone=46 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24347":'+proj=utm +zone=47 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24370":'+proj=lcc +lat_1=39.5 +lat_0=39.5 +lon_0=68 +k_0=0.99846154 +x_0=2153865.73916853 +y_0=2368292.194628102 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ', "EPSG:24371":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ', "EPSG:24372":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ', "EPSG:24373":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ', "EPSG:24374":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ', "EPSG:24375":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743185.69 +y_0=914395.23 +a=6377276.345 +b=6356075.41314024 +towgs84=214,804,268,0,0,0,0 +units=m +no_defs ', "EPSG:24376":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', "EPSG:24377":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743196.4 +y_0=914398.8 +a=6377301.243 +b=6356100.230165384 +towgs84=283,682,231,0,0,0,0 +units=m +no_defs ', "EPSG:24378":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=68 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24379":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=74 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24380":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24381":'+proj=lcc +lat_1=19 +lat_0=19 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24382":'+proj=lcc +lat_1=26 +lat_0=26 +lon_0=90 +k_0=0.99878641 +x_0=2743195.592233322 +y_0=914398.5307444407 +a=6377299.36559538 +b=6356098.359005156 +to_meter=0.9143985307444408 +no_defs ', "EPSG:24383":'+proj=lcc +lat_1=12 +lat_0=12 +lon_0=80 +k_0=0.99878641 +x_0=2743195.5 +y_0=914398.5 +a=6377299.151 +b=6356098.145120132 +towgs84=295,736,257,0,0,0,0 +units=m +no_defs ', "EPSG:24500":'+proj=cass +lat_0=1.287646666666667 +lon_0=103.8530022222222 +x_0=30000 +y_0=30000 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ', "EPSG:24547":'+proj=utm +zone=47 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ', "EPSG:24548":'+proj=utm +zone=48 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +units=m +no_defs ', "EPSG:24571":'+proj=omerc +lat_0=4 +lonc=102.25 +alpha=323.0257905 +k=0.99984 +x_0=804671.2997750348 +y_0=0 +no_uoff +gamma=323.1301023611111 +a=6377304.063 +b=6356103.038993155 +towgs84=-11,851,5,0,0,0,0 +to_meter=20.11678249437587 +no_defs ', "EPSG:24600":'+proj=lcc +lat_1=32.5 +lat_0=32.5 +lon_0=45 +k_0=0.9987864078000001 +x_0=1500000 +y_0=1166200 +ellps=clrk80 +towgs84=-294.7,-200.1,525.5,0,0,0,0 +units=m +no_defs ', "EPSG:24718":'+proj=utm +zone=18 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ', "EPSG:24719":'+proj=utm +zone=19 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ', "EPSG:24720":'+proj=utm +zone=20 +ellps=intl +towgs84=-273.5,110.6,-357.9,0,0,0,0 +units=m +no_defs ', "EPSG:24817":'+proj=utm +zone=17 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24818":'+proj=utm +zone=18 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24819":'+proj=utm +zone=19 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24820":'+proj=utm +zone=20 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24821":'+proj=utm +zone=21 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24877":'+proj=utm +zone=17 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24878":'+proj=utm +zone=18 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24879":'+proj=utm +zone=19 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24880":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24881":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24882":'+proj=utm +zone=22 +south +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24891":'+proj=tmerc +lat_0=-6 +lon_0=-80.5 +k=0.99983008 +x_0=222000 +y_0=1426834.743 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24892":'+proj=tmerc +lat_0=-9.5 +lon_0=-76 +k=0.99932994 +x_0=720000 +y_0=1039979.159 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:24893":'+proj=tmerc +lat_0=-9.5 +lon_0=-70.5 +k=0.99952992 +x_0=1324000 +y_0=1040084.558 +ellps=intl +towgs84=-288,175,-376,0,0,0,0 +units=m +no_defs ', "EPSG:25000":'+proj=tmerc +lat_0=4.666666666666667 +lon_0=-1 +k=0.99975 +x_0=274319.51 +y_0=0 +ellps=clrk80 +towgs84=-130,29,364,0,0,0,0 +units=m +no_defs ', "EPSG:25231":'+proj=utm +zone=31 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:25391":'+proj=tmerc +lat_0=0 +lon_0=117 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ', "EPSG:25392":'+proj=tmerc +lat_0=0 +lon_0=119 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ', "EPSG:25393":'+proj=tmerc +lat_0=0 +lon_0=121 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ', "EPSG:25394":'+proj=tmerc +lat_0=0 +lon_0=123 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ', "EPSG:25395":'+proj=tmerc +lat_0=0 +lon_0=125 +k=0.99995 +x_0=500000 +y_0=0 +ellps=clrk66 +towgs84=-133,-77,-51,0,0,0,0 +units=m +no_defs ', "EPSG:25700":'+proj=merc +lon_0=110 +k=0.997 +x_0=3900000 +y_0=900000 +ellps=bessel +towgs84=-587.8,519.75,145.76,0,0,0,0 +pm=jakarta +units=m +no_defs ', "EPSG:25828":'+proj=utm +zone=28 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25829":'+proj=utm +zone=29 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25830":'+proj=utm +zone=30 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25831":'+proj=utm +zone=31 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25832":'+proj=utm +zone=32 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25833":'+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25834":'+proj=utm +zone=34 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25835":'+proj=utm +zone=35 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25836":'+proj=utm +zone=36 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25837":'+proj=utm +zone=37 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25838":'+proj=utm +zone=38 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25884":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:25932":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-254.1,-5.36,-100.29,0,0,0,0 +units=m +no_defs ', "EPSG:26191":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=-5.4 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ', "EPSG:26192":'+proj=lcc +lat_1=29.7 +lat_0=29.7 +lon_0=-5.4 +k_0=0.9996155960000001 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ', "EPSG:26193":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.9996 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ', "EPSG:26194":'+proj=lcc +lat_1=26.1 +lat_0=26.1 +lon_0=-5.4 +k_0=0.999616304 +x_0=1200000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ', "EPSG:26195":'+proj=lcc +lat_1=22.5 +lat_0=22.5 +lon_0=-5.4 +k_0=0.999616437 +x_0=1500000 +y_0=400000 +a=6378249.2 +b=6356515 +towgs84=31,146,47,0,0,0,0 +units=m +no_defs ', "EPSG:26237":'+proj=utm +zone=37 +ellps=bessel +towgs84=639,405,60,0,0,0,0 +units=m +no_defs ', "EPSG:26331":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ', "EPSG:26332":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ', "EPSG:26391":'+proj=tmerc +lat_0=4 +lon_0=4.5 +k=0.99975 +x_0=230738.26 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ', "EPSG:26392":'+proj=tmerc +lat_0=4 +lon_0=8.5 +k=0.99975 +x_0=670553.98 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ', "EPSG:26393":'+proj=tmerc +lat_0=4 +lon_0=12.5 +k=0.99975 +x_0=1110369.7 +y_0=0 +ellps=clrk80 +towgs84=-92,-93,122,0,0,0,0 +units=m +no_defs ', "EPSG:26432":'+proj=utm +zone=32 +south +ellps=intl +towgs84=-252.95,-4.11,-96.38,0,0,0,0 +units=m +no_defs ', "EPSG:26591":'+proj=tmerc +lat_0=0 +lon_0=-3.45233333333333 +k=0.9996 +x_0=1500000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ', "EPSG:26592":'+proj=tmerc +lat_0=0 +lon_0=2.54766666666666 +k=0.9996 +x_0=2520000 +y_0=0 +ellps=intl +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68 +pm=rome +units=m +no_defs ', "EPSG:26632":'+proj=utm +zone=32 +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ', "EPSG:26692":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-74,-130,42,0,0,0,0 +units=m +no_defs ', "EPSG:26701":'+proj=utm +zone=1 +datum=NAD27 +units=m +no_defs ', "EPSG:26702":'+proj=utm +zone=2 +datum=NAD27 +units=m +no_defs ', "EPSG:26703":'+proj=utm +zone=3 +datum=NAD27 +units=m +no_defs ', "EPSG:26704":'+proj=utm +zone=4 +datum=NAD27 +units=m +no_defs ', "EPSG:26705":'+proj=utm +zone=5 +datum=NAD27 +units=m +no_defs ', "EPSG:26706":'+proj=utm +zone=6 +datum=NAD27 +units=m +no_defs ', "EPSG:26707":'+proj=utm +zone=7 +datum=NAD27 +units=m +no_defs ', "EPSG:26708":'+proj=utm +zone=8 +datum=NAD27 +units=m +no_defs ', "EPSG:26709":'+proj=utm +zone=9 +datum=NAD27 +units=m +no_defs ', "EPSG:26710":'+proj=utm +zone=10 +datum=NAD27 +units=m +no_defs ', "EPSG:26711":'+proj=utm +zone=11 +datum=NAD27 +units=m +no_defs ', "EPSG:26712":'+proj=utm +zone=12 +datum=NAD27 +units=m +no_defs ', "EPSG:26713":'+proj=utm +zone=13 +datum=NAD27 +units=m +no_defs ', "EPSG:26714":'+proj=utm +zone=14 +datum=NAD27 +units=m +no_defs ', "EPSG:26715":'+proj=utm +zone=15 +datum=NAD27 +units=m +no_defs ', "EPSG:26716":'+proj=utm +zone=16 +datum=NAD27 +units=m +no_defs ', "EPSG:26717":'+proj=utm +zone=17 +datum=NAD27 +units=m +no_defs ', "EPSG:26718":'+proj=utm +zone=18 +datum=NAD27 +units=m +no_defs ', "EPSG:26719":'+proj=utm +zone=19 +datum=NAD27 +units=m +no_defs ', "EPSG:26720":'+proj=utm +zone=20 +datum=NAD27 +units=m +no_defs ', "EPSG:26721":'+proj=utm +zone=21 +datum=NAD27 +units=m +no_defs ', "EPSG:26722":'+proj=utm +zone=22 +datum=NAD27 +units=m +no_defs ', "EPSG:26729":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26730":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26731":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000.001016002 +y_0=-5000000.001016002 +no_uoff +gamma=323.1301023611111 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26732":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26733":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26734":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26735":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26736":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26737":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=213360.4267208534 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26738":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26739":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26740":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=914401.8288036576 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26741":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26742":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26743":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26744":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26745":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26746":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26747":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=127079.524511049 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26748":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26749":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26750":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26751":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26752":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26753":'+proj=lcc +lat_1=39.71666666666667 +lat_2=40.78333333333333 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26754":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26755":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26756":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26757":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26758":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26759":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26760":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26766":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26767":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26768":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26769":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26770":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26771":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26772":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26773":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26774":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26775":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26776":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26777":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26778":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26779":'+proj=lcc +lat_1=37.96666666666667 +lat_2=38.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26780":'+proj=lcc +lat_1=36.73333333333333 +lat_2=37.93333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26781":'+proj=lcc +lat_1=31.16666666666667 +lat_2=32.66666666666666 +lat_0=30.66666666666667 +lon_0=-92.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26782":'+proj=lcc +lat_1=29.3 +lat_2=30.7 +lat_0=28.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26783":'+proj=tmerc +lat_0=43.83333333333334 +lon_0=-68.5 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26784":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26785":'+proj=lcc +lat_1=38.3 +lat_2=39.45 +lat_0=37.83333333333334 +lon_0=-77 +x_0=243840.4876809754 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26786":'+proj=lcc +lat_1=41.71666666666667 +lat_2=42.68333333333333 +lat_0=41 +lon_0=-71.5 +x_0=182880.3657607315 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26787":'+proj=lcc +lat_1=41.28333333333333 +lat_2=41.48333333333333 +lat_0=41 +lon_0=-70.5 +x_0=60960.12192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26791":'+proj=lcc +lat_1=47.03333333333333 +lat_2=48.63333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26792":'+proj=lcc +lat_1=45.61666666666667 +lat_2=47.05 +lat_0=45 +lon_0=-94.25 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26793":'+proj=lcc +lat_1=43.78333333333333 +lat_2=45.21666666666667 +lat_0=43 +lon_0=-94 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26794":'+proj=tmerc +lat_0=29.66666666666667 +lon_0=-88.83333333333333 +k=0.99996 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26795":'+proj=tmerc +lat_0=30.5 +lon_0=-90.33333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26796":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26797":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26798":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26799":'+proj=lcc +lat_1=34.41666666666666 +lat_2=33.86666666666667 +lat_0=34.13333333333333 +lon_0=-118.3333333333333 +x_0=1276106.450596901 +y_0=1268253.006858014 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:26801":'+proj=tmerc +lat_0=41.5 +lon_0=-83.66666666666667 +k=0.999942857 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ', "EPSG:26802":'+proj=tmerc +lat_0=41.5 +lon_0=-85.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ', "EPSG:26803":'+proj=tmerc +lat_0=41.5 +lon_0=-88.75 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ', "EPSG:26811":'+proj=lcc +lat_1=45.48333333333333 +lat_2=47.08333333333334 +lat_0=44.78333333333333 +lon_0=-87 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ', "EPSG:26812":'+proj=lcc +lat_1=44.18333333333333 +lat_2=45.7 +lat_0=43.31666666666667 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ', "EPSG:26813":'+proj=lcc +lat_1=42.1 +lat_2=43.66666666666666 +lat_0=41.5 +lon_0=-84.33333333333333 +x_0=609601.2192024384 +y_0=0 +a=6378450.047548896 +b=6356826.621488444 +units=us-ft +no_defs ', "EPSG:26814":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26815":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26819":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26820":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26821":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26822":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26823":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26824":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26825":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26826":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26830":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26831":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26832":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26833":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26834":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26835":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26836":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26837":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26841":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26842":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26843":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101601 +y_0=99999.99998984 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26844":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.0000101601 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26845":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26846":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=1968500 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26847":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26848":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26849":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26850":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26851":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26852":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26853":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26854":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26855":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26856":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26857":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26858":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26859":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26860":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26861":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26862":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26863":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000.0000000001 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26864":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26865":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26866":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26867":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000.0000101599 +y_0=99999.99998983997 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26868":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000.00001016 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26869":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26870":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:26891":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26892":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26893":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26894":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26895":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26896":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26897":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26898":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26899":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26901":'+proj=utm +zone=1 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26902":'+proj=utm +zone=2 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26903":'+proj=utm +zone=3 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26904":'+proj=utm +zone=4 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26905":'+proj=utm +zone=5 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26906":'+proj=utm +zone=6 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26907":'+proj=utm +zone=7 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26908":'+proj=utm +zone=8 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26909":'+proj=utm +zone=9 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26910":'+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26911":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26912":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26913":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26914":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26915":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26916":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26917":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26918":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26919":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26920":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26921":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26922":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26923":'+proj=utm +zone=23 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26929":'+proj=tmerc +lat_0=30.5 +lon_0=-85.83333333333333 +k=0.99996 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26930":'+proj=tmerc +lat_0=30 +lon_0=-87.5 +k=0.999933333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26931":'+proj=omerc +lat_0=57 +lonc=-133.6666666666667 +alpha=323.1301023611111 +k=0.9999 +x_0=5000000 +y_0=-5000000 +no_uoff +gamma=323.1301023611111 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26932":'+proj=tmerc +lat_0=54 +lon_0=-142 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26933":'+proj=tmerc +lat_0=54 +lon_0=-146 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26934":'+proj=tmerc +lat_0=54 +lon_0=-150 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26935":'+proj=tmerc +lat_0=54 +lon_0=-154 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26936":'+proj=tmerc +lat_0=54 +lon_0=-158 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26937":'+proj=tmerc +lat_0=54 +lon_0=-162 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26938":'+proj=tmerc +lat_0=54 +lon_0=-166 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26939":'+proj=tmerc +lat_0=54 +lon_0=-170 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26940":'+proj=lcc +lat_1=53.83333333333334 +lat_2=51.83333333333334 +lat_0=51 +lon_0=-176 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26941":'+proj=lcc +lat_1=41.66666666666666 +lat_2=40 +lat_0=39.33333333333334 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26942":'+proj=lcc +lat_1=39.83333333333334 +lat_2=38.33333333333334 +lat_0=37.66666666666666 +lon_0=-122 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26943":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.06666666666667 +lat_0=36.5 +lon_0=-120.5 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26944":'+proj=lcc +lat_1=37.25 +lat_2=36 +lat_0=35.33333333333334 +lon_0=-119 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26945":'+proj=lcc +lat_1=35.46666666666667 +lat_2=34.03333333333333 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26946":'+proj=lcc +lat_1=33.88333333333333 +lat_2=32.78333333333333 +lat_0=32.16666666666666 +lon_0=-116.25 +x_0=2000000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26948":'+proj=tmerc +lat_0=31 +lon_0=-110.1666666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26949":'+proj=tmerc +lat_0=31 +lon_0=-111.9166666666667 +k=0.9999 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26950":'+proj=tmerc +lat_0=31 +lon_0=-113.75 +k=0.999933333 +x_0=213360 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26951":'+proj=lcc +lat_1=36.23333333333333 +lat_2=34.93333333333333 +lat_0=34.33333333333334 +lon_0=-92 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26952":'+proj=lcc +lat_1=34.76666666666667 +lat_2=33.3 +lat_0=32.66666666666666 +lon_0=-92 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26953":'+proj=lcc +lat_1=40.78333333333333 +lat_2=39.71666666666667 +lat_0=39.33333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26954":'+proj=lcc +lat_1=39.75 +lat_2=38.45 +lat_0=37.83333333333334 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26955":'+proj=lcc +lat_1=38.43333333333333 +lat_2=37.23333333333333 +lat_0=36.66666666666666 +lon_0=-105.5 +x_0=914401.8289 +y_0=304800.6096 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26956":'+proj=lcc +lat_1=41.86666666666667 +lat_2=41.2 +lat_0=40.83333333333334 +lon_0=-72.75 +x_0=304800.6096 +y_0=152400.3048 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26957":'+proj=tmerc +lat_0=38 +lon_0=-75.41666666666667 +k=0.999995 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26958":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-81 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26959":'+proj=tmerc +lat_0=24.33333333333333 +lon_0=-82 +k=0.999941177 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26960":'+proj=lcc +lat_1=30.75 +lat_2=29.58333333333333 +lat_0=29 +lon_0=-84.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26961":'+proj=tmerc +lat_0=18.83333333333333 +lon_0=-155.5 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26962":'+proj=tmerc +lat_0=20.33333333333333 +lon_0=-156.6666666666667 +k=0.999966667 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26963":'+proj=tmerc +lat_0=21.16666666666667 +lon_0=-158 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26964":'+proj=tmerc +lat_0=21.83333333333333 +lon_0=-159.5 +k=0.99999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26965":'+proj=tmerc +lat_0=21.66666666666667 +lon_0=-160.1666666666667 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26966":'+proj=tmerc +lat_0=30 +lon_0=-82.16666666666667 +k=0.9999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26967":'+proj=tmerc +lat_0=30 +lon_0=-84.16666666666667 +k=0.9999 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26968":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-112.1666666666667 +k=0.9999473679999999 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26969":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-114 +k=0.9999473679999999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26970":'+proj=tmerc +lat_0=41.66666666666666 +lon_0=-115.75 +k=0.999933333 +x_0=800000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26971":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-88.33333333333333 +k=0.9999749999999999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26972":'+proj=tmerc +lat_0=36.66666666666666 +lon_0=-90.16666666666667 +k=0.999941177 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26973":'+proj=tmerc +lat_0=37.5 +lon_0=-85.66666666666667 +k=0.999966667 +x_0=100000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26974":'+proj=tmerc +lat_0=37.5 +lon_0=-87.08333333333333 +k=0.999966667 +x_0=900000 +y_0=250000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26975":'+proj=lcc +lat_1=43.26666666666667 +lat_2=42.06666666666667 +lat_0=41.5 +lon_0=-93.5 +x_0=1500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26976":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.61666666666667 +lat_0=40 +lon_0=-93.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26977":'+proj=lcc +lat_1=39.78333333333333 +lat_2=38.71666666666667 +lat_0=38.33333333333334 +lon_0=-98 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26978":'+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=400000 +y_0=400000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26979":'+proj=lcc +lat_1=37.96666666666667 +lat_2=37.96666666666667 +lat_0=37.5 +lon_0=-84.25 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26980":'+proj=lcc +lat_1=37.93333333333333 +lat_2=36.73333333333333 +lat_0=36.33333333333334 +lon_0=-85.75 +x_0=500000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26981":'+proj=lcc +lat_1=32.66666666666666 +lat_2=31.16666666666667 +lat_0=30.5 +lon_0=-92.5 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26982":'+proj=lcc +lat_1=30.7 +lat_2=29.3 +lat_0=28.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26983":'+proj=tmerc +lat_0=43.66666666666666 +lon_0=-68.5 +k=0.9999 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26984":'+proj=tmerc +lat_0=42.83333333333334 +lon_0=-70.16666666666667 +k=0.999966667 +x_0=900000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26985":'+proj=lcc +lat_1=39.45 +lat_2=38.3 +lat_0=37.66666666666666 +lon_0=-77 +x_0=400000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26986":'+proj=lcc +lat_1=42.68333333333333 +lat_2=41.71666666666667 +lat_0=41 +lon_0=-71.5 +x_0=200000 +y_0=750000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26987":'+proj=lcc +lat_1=41.48333333333333 +lat_2=41.28333333333333 +lat_0=41 +lon_0=-70.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26988":'+proj=lcc +lat_1=47.08333333333334 +lat_2=45.48333333333333 +lat_0=44.78333333333333 +lon_0=-87 +x_0=8000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26989":'+proj=lcc +lat_1=45.7 +lat_2=44.18333333333333 +lat_0=43.31666666666667 +lon_0=-84.36666666666666 +x_0=6000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26990":'+proj=lcc +lat_1=43.66666666666666 +lat_2=42.1 +lat_0=41.5 +lon_0=-84.36666666666666 +x_0=4000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26991":'+proj=lcc +lat_1=48.63333333333333 +lat_2=47.03333333333333 +lat_0=46.5 +lon_0=-93.09999999999999 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26992":'+proj=lcc +lat_1=47.05 +lat_2=45.61666666666667 +lat_0=45 +lon_0=-94.25 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26993":'+proj=lcc +lat_1=45.21666666666667 +lat_2=43.78333333333333 +lat_0=43 +lon_0=-94 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26994":'+proj=tmerc +lat_0=29.5 +lon_0=-88.83333333333333 +k=0.99995 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26995":'+proj=tmerc +lat_0=29.5 +lon_0=-90.33333333333333 +k=0.99995 +x_0=700000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26996":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-90.5 +k=0.999933333 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26997":'+proj=tmerc +lat_0=35.83333333333334 +lon_0=-92.5 +k=0.999933333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:26998":'+proj=tmerc +lat_0=36.16666666666666 +lon_0=-94.5 +k=0.999941177 +x_0=850000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:27037":'+proj=utm +zone=37 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', "EPSG:27038":'+proj=utm +zone=38 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', "EPSG:27039":'+proj=utm +zone=39 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', "EPSG:27040":'+proj=utm +zone=40 +ellps=clrk80 +towgs84=-242.2,-144.9,370.3,0,0,0,0 +units=m +no_defs ', "EPSG:27120":'+proj=utm +zone=20 +ellps=intl +towgs84=-10,375,165,0,0,0,0 +units=m +no_defs ', "EPSG:27200":'+proj=nzmg +lat_0=-41 +lon_0=173 +x_0=2510000 +y_0=6023150 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27205":'+proj=tmerc +lat_0=-36.87986527777778 +lon_0=174.7643393611111 +k=0.9999 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27206":'+proj=tmerc +lat_0=-37.76124980555556 +lon_0=176.46619725 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27207":'+proj=tmerc +lat_0=-38.62470277777778 +lon_0=177.8856362777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27208":'+proj=tmerc +lat_0=-39.65092930555556 +lon_0=176.6736805277778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27209":'+proj=tmerc +lat_0=-39.13575830555556 +lon_0=174.22801175 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27210":'+proj=tmerc +lat_0=-39.51247038888889 +lon_0=175.6400368055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27211":'+proj=tmerc +lat_0=-40.24194713888889 +lon_0=175.4880996111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27212":'+proj=tmerc +lat_0=-40.92553263888889 +lon_0=175.6473496666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27213":'+proj=tmerc +lat_0=-41.30131963888888 +lon_0=174.7766231111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27214":'+proj=tmerc +lat_0=-40.71475905555556 +lon_0=172.6720465 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27215":'+proj=tmerc +lat_0=-41.27454472222222 +lon_0=173.2993168055555 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27216":'+proj=tmerc +lat_0=-41.28991152777778 +lon_0=172.1090281944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27217":'+proj=tmerc +lat_0=-41.81080286111111 +lon_0=171.5812600555556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27218":'+proj=tmerc +lat_0=-42.33369427777778 +lon_0=171.5497713055556 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27219":'+proj=tmerc +lat_0=-42.68911658333333 +lon_0=173.0101333888889 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27220":'+proj=tmerc +lat_0=-41.54448666666666 +lon_0=173.8020741111111 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27221":'+proj=tmerc +lat_0=-42.88632236111111 +lon_0=170.9799935 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27222":'+proj=tmerc +lat_0=-43.11012813888889 +lon_0=170.2609258333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27223":'+proj=tmerc +lat_0=-43.97780288888889 +lon_0=168.606267 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27224":'+proj=tmerc +lat_0=-43.59063758333333 +lon_0=172.7271935833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27225":'+proj=tmerc +lat_0=-43.74871155555556 +lon_0=171.3607484722222 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27226":'+proj=tmerc +lat_0=-44.40222036111111 +lon_0=171.0572508333333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27227":'+proj=tmerc +lat_0=-44.73526797222222 +lon_0=169.4677550833333 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27228":'+proj=tmerc +lat_0=-45.13290258333333 +lon_0=168.3986411944444 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27229":'+proj=tmerc +lat_0=-45.56372616666666 +lon_0=167.7388617777778 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27230":'+proj=tmerc +lat_0=-45.81619661111111 +lon_0=170.6285951666667 +k=1 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27231":'+proj=tmerc +lat_0=-45.86151336111111 +lon_0=170.2825891111111 +k=0.99996 +x_0=300000 +y_0=700000 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27232":'+proj=tmerc +lat_0=-46.60000961111111 +lon_0=168.342872 +k=1 +x_0=300002.66 +y_0=699999.58 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27258":'+proj=utm +zone=58 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27259":'+proj=utm +zone=59 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27260":'+proj=utm +zone=60 +south +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +units=m +no_defs ', "EPSG:27291":'+proj=tmerc +lat_0=-39 +lon_0=175.5 +k=1 +x_0=274319.5243848086 +y_0=365759.3658464114 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ', "EPSG:27292":'+proj=tmerc +lat_0=-44 +lon_0=171.5 +k=1 +x_0=457199.2073080143 +y_0=457199.2073080143 +ellps=intl +towgs84=59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993 +to_meter=0.9143984146160287 +no_defs ', "EPSG:27391":'+proj=tmerc +lat_0=58 +lon_0=-4.666666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27392":'+proj=tmerc +lat_0=58 +lon_0=-2.333333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27393":'+proj=tmerc +lat_0=58 +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27394":'+proj=tmerc +lat_0=58 +lon_0=2.5 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27395":'+proj=tmerc +lat_0=58 +lon_0=6.166666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27396":'+proj=tmerc +lat_0=58 +lon_0=10.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27397":'+proj=tmerc +lat_0=58 +lon_0=14.16666666666667 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27398":'+proj=tmerc +lat_0=58 +lon_0=18.33333333333333 +k=1 +x_0=0 +y_0=0 +a=6377492.018 +b=6356173.508712696 +towgs84=278.3,93,474.5,7.889,0.05,-6.61,6.21 +pm=oslo +units=m +no_defs ', "EPSG:27429":'+proj=utm +zone=29 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ', "EPSG:27492":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ', "EPSG:27493":'+proj=tmerc +lat_0=39.66666666666666 +lon_0=-8.131906111111112 +k=1 +x_0=180.598 +y_0=-86.98999999999999 +ellps=intl +towgs84=-223.237,110.193,36.649,0,0,0,0 +units=m +no_defs ', "EPSG:27500":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=5.399999999999999 +k_0=0.99950908 +x_0=500000 +y_0=300000 +a=6376523 +b=6355862.933255573 +pm=2.337208333333333 +units=m +no_defs ', "EPSG:27561":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27562":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27563":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27564":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27571":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27572":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27573":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27574":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27581":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=1200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27582":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=2200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27583":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=3200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27584":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=4185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27591":'+proj=lcc +lat_1=49.50000000000001 +lat_0=49.50000000000001 +lon_0=0 +k_0=0.999877341 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27592":'+proj=lcc +lat_1=46.8 +lat_0=46.8 +lon_0=0 +k_0=0.99987742 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27593":'+proj=lcc +lat_1=44.10000000000001 +lat_0=44.10000000000001 +lon_0=0 +k_0=0.999877499 +x_0=600000 +y_0=200000 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27594":'+proj=lcc +lat_1=42.16500000000001 +lat_0=42.16500000000001 +lon_0=0 +k_0=0.99994471 +x_0=234.358 +y_0=185861.369 +a=6378249.2 +b=6356515 +towgs84=-168,-60,320,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:27700":'+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.06,0.15,0.247,0.842,-20.489 +units=m +no_defs ', "EPSG:28191":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ', "EPSG:28192":'+proj=tmerc +lat_0=31.73409694444445 +lon_0=35.21208055555556 +k=1 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ', "EPSG:28193":'+proj=cass +lat_0=31.73409694444445 +lon_0=35.21208055555556 +x_0=170251.555 +y_0=1126867.909 +a=6378300.789 +b=6356566.435 +towgs84=-275.722,94.7824,340.894,-8.001,-4.42,-11.821,1 +units=m +no_defs ', "EPSG:28232":'+proj=utm +zone=32 +south +a=6378249.2 +b=6356515 +towgs84=-148,51,-291,0,0,0,0 +units=m +no_defs ', "EPSG:28348":'+proj=utm +zone=48 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28349":'+proj=utm +zone=49 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28350":'+proj=utm +zone=50 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28351":'+proj=utm +zone=51 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28352":'+proj=utm +zone=52 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28353":'+proj=utm +zone=53 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28354":'+proj=utm +zone=54 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28355":'+proj=utm +zone=55 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28356":'+proj=utm +zone=56 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28357":'+proj=utm +zone=57 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28358":'+proj=utm +zone=58 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:28402":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=2500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28403":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=3500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28404":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=4500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28405":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=5500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28406":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=6500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28407":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=7500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28408":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=8500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28409":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=9500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28410":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=10500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28411":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=11500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28412":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=12500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28413":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=13500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28414":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=14500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28415":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=15500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28416":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=16500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28417":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=17500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28418":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=18500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28419":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=19500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28420":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=20500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28421":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=21500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28422":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=22500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28423":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=23500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28424":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=24500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28425":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=25500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28426":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=26500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28427":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=27500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28428":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=28500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28429":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=29500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28430":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=30500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28431":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=31500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28432":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=32500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28462":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28463":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28464":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28465":'+proj=tmerc +lat_0=0 +lon_0=27 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28466":'+proj=tmerc +lat_0=0 +lon_0=33 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28467":'+proj=tmerc +lat_0=0 +lon_0=39 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28468":'+proj=tmerc +lat_0=0 +lon_0=45 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28469":'+proj=tmerc +lat_0=0 +lon_0=51 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28470":'+proj=tmerc +lat_0=0 +lon_0=57 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28471":'+proj=tmerc +lat_0=0 +lon_0=63 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28472":'+proj=tmerc +lat_0=0 +lon_0=69 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28473":'+proj=tmerc +lat_0=0 +lon_0=75 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28474":'+proj=tmerc +lat_0=0 +lon_0=81 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28475":'+proj=tmerc +lat_0=0 +lon_0=87 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28476":'+proj=tmerc +lat_0=0 +lon_0=93 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28477":'+proj=tmerc +lat_0=0 +lon_0=99 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28478":'+proj=tmerc +lat_0=0 +lon_0=105 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28479":'+proj=tmerc +lat_0=0 +lon_0=111 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28480":'+proj=tmerc +lat_0=0 +lon_0=117 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28481":'+proj=tmerc +lat_0=0 +lon_0=123 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28482":'+proj=tmerc +lat_0=0 +lon_0=129 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28483":'+proj=tmerc +lat_0=0 +lon_0=135 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28484":'+proj=tmerc +lat_0=0 +lon_0=141 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28485":'+proj=tmerc +lat_0=0 +lon_0=147 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28486":'+proj=tmerc +lat_0=0 +lon_0=153 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28487":'+proj=tmerc +lat_0=0 +lon_0=159 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28488":'+proj=tmerc +lat_0=0 +lon_0=165 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28489":'+proj=tmerc +lat_0=0 +lon_0=171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28490":'+proj=tmerc +lat_0=0 +lon_0=177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28491":'+proj=tmerc +lat_0=0 +lon_0=-177 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28492":'+proj=tmerc +lat_0=0 +lon_0=-171 +k=1 +x_0=500000 +y_0=0 +ellps=krass +towgs84=23.92,-141.27,-80.9,-0,0.35,0.82,-0.12 +units=m +no_defs ', "EPSG:28600":'+proj=tmerc +lat_0=24.45 +lon_0=51.21666666666667 +k=0.99999 +x_0=200000 +y_0=300000 +ellps=intl +towgs84=-128.16,-282.42,21.93,0,0,0,0 +units=m +no_defs ', "EPSG:28991":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=0 +y_0=0 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ', "EPSG:28992":'+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.9999079 +x_0=155000 +y_0=463000 +ellps=bessel +towgs84=565.417,50.3319,465.552,-0.398957,0.343988,-1.8774,4.0725 +units=m +no_defs ', "EPSG:29100":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29101":'+proj=poly +lat_0=0 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29118":'+proj=utm +zone=18 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29119":'+proj=utm +zone=19 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29120":'+proj=utm +zone=20 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29121":'+proj=utm +zone=21 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29122":'+proj=utm +zone=22 +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29168":'+proj=utm +zone=18 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29169":'+proj=utm +zone=19 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29170":'+proj=utm +zone=20 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29171":'+proj=utm +zone=21 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29172":'+proj=utm +zone=22 +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29177":'+proj=utm +zone=17 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29178":'+proj=utm +zone=18 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29179":'+proj=utm +zone=19 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29180":'+proj=utm +zone=20 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29181":'+proj=utm +zone=21 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29182":'+proj=utm +zone=22 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29183":'+proj=utm +zone=23 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29184":'+proj=utm +zone=24 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29185":'+proj=utm +zone=25 +south +ellps=GRS67 +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29187":'+proj=utm +zone=17 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29188":'+proj=utm +zone=18 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29189":'+proj=utm +zone=19 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29190":'+proj=utm +zone=20 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29191":'+proj=utm +zone=21 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29192":'+proj=utm +zone=22 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29193":'+proj=utm +zone=23 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29194":'+proj=utm +zone=24 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29195":'+proj=utm +zone=25 +south +ellps=aust_SA +towgs84=-57,1,-41,0,0,0,0 +units=m +no_defs ', "EPSG:29220":'+proj=utm +zone=20 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ', "EPSG:29221":'+proj=utm +zone=21 +south +ellps=intl +towgs84=-355,21,72,0,0,0,0 +units=m +no_defs ', "EPSG:29333":'+proj=utm +zone=33 +south +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +units=m +no_defs ', "EPSG:29371":'+proj=tmerc +lat_0=-22 +lon_0=11 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29373":'+proj=tmerc +lat_0=-22 +lon_0=13 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29375":'+proj=tmerc +lat_0=-22 +lon_0=15 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29377":'+proj=tmerc +lat_0=-22 +lon_0=17 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29379":'+proj=tmerc +lat_0=-22 +lon_0=19 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29381":'+proj=tmerc +lat_0=-22 +lon_0=21 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29383":'+proj=tmerc +lat_0=-22 +lon_0=23 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29385":'+proj=tmerc +lat_0=-22 +lon_0=25 +k=1 +x_0=0 +y_0=0 +axis=wsu +ellps=bess_nam +towgs84=616,97,-251,0,0,0,0 +to_meter=1.0000135965 +no_defs ', "EPSG:29635":'+proj=utm +zone=35 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:29636":'+proj=utm +zone=36 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:29700":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:29702":'+proj=omerc +lat_0=-18.9 +lonc=44.10000000000001 +alpha=18.9 +k=0.9995000000000001 +x_0=400000 +y_0=800000 +gamma=18.9 +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +pm=paris +units=m +no_defs ', "EPSG:29738":'+proj=utm +zone=38 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ', "EPSG:29739":'+proj=utm +zone=39 +south +ellps=intl +towgs84=-189,-242,-91,0,0,0,0 +units=m +no_defs ', "EPSG:29849":'+proj=utm +zone=49 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ', "EPSG:29850":'+proj=utm +zone=50 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ', "EPSG:29871":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8714630401 +y_0=442857.653094361 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=20.11676512155263 +no_defs ', "EPSG:29872":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.8727431979 +y_0=442857.6545573985 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +to_meter=0.3047994715386762 +no_defs ', "EPSG:29873":'+proj=omerc +lat_0=4 +lonc=115 +alpha=53.31582047222222 +k=0.99984 +x_0=590476.87 +y_0=442857.65 +gamma=53.13010236111111 +ellps=evrstSS +towgs84=-679,669,-48,0,0,0,0 +units=m +no_defs ', "EPSG:29900":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ', "EPSG:29901":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1 +x_0=200000 +y_0=250000 +ellps=airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ', "EPSG:29902":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ', "EPSG:29903":'+proj=tmerc +lat_0=53.5 +lon_0=-8 +k=1.000035 +x_0=200000 +y_0=250000 +ellps=mod_airy +towgs84=482.5,-130.6,564.6,-1.042,-0.214,-0.631,8.15 +units=m +no_defs ', "EPSG:30161":'+proj=tmerc +lat_0=33 +lon_0=129.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30162":'+proj=tmerc +lat_0=33 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30163":'+proj=tmerc +lat_0=36 +lon_0=132.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30164":'+proj=tmerc +lat_0=33 +lon_0=133.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30165":'+proj=tmerc +lat_0=36 +lon_0=134.3333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30166":'+proj=tmerc +lat_0=36 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30167":'+proj=tmerc +lat_0=36 +lon_0=137.1666666666667 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30168":'+proj=tmerc +lat_0=36 +lon_0=138.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30169":'+proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30170":'+proj=tmerc +lat_0=40 +lon_0=140.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30171":'+proj=tmerc +lat_0=44 +lon_0=140.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30172":'+proj=tmerc +lat_0=44 +lon_0=142.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30173":'+proj=tmerc +lat_0=44 +lon_0=144.25 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30174":'+proj=tmerc +lat_0=26 +lon_0=142 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30175":'+proj=tmerc +lat_0=26 +lon_0=127.5 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30176":'+proj=tmerc +lat_0=26 +lon_0=124 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30177":'+proj=tmerc +lat_0=26 +lon_0=131 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30178":'+proj=tmerc +lat_0=20 +lon_0=136 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30179":'+proj=tmerc +lat_0=26 +lon_0=154 +k=0.9999 +x_0=0 +y_0=0 +ellps=bessel +towgs84=-146.414,507.337,680.507,0,0,0,0 +units=m +no_defs ', "EPSG:30200":'+proj=cass +lat_0=10.44166666666667 +lon_0=-61.33333333333334 +x_0=86501.46392051999 +y_0=65379.0134283 +a=6378293.645208759 +b=6356617.987679838 +towgs84=-61.702,284.488,472.052,0,0,0,0 +to_meter=0.201166195164 +no_defs ', "EPSG:30339":'+proj=utm +zone=39 +ellps=helmert +units=m +no_defs ', "EPSG:30340":'+proj=utm +zone=40 +ellps=helmert +units=m +no_defs ', "EPSG:30491":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ', "EPSG:30492":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +towgs84=-73,-247,227,0,0,0,0 +units=m +no_defs ', "EPSG:30493":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:30494":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500000 +y_0=300000 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:30729":'+proj=utm +zone=29 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ', "EPSG:30730":'+proj=utm +zone=30 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ', "EPSG:30731":'+proj=utm +zone=31 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ', "EPSG:30732":'+proj=utm +zone=32 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ', "EPSG:30791":'+proj=lcc +lat_1=36 +lat_0=36 +lon_0=2.7 +k_0=0.999625544 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ', "EPSG:30792":'+proj=lcc +lat_1=33.3 +lat_0=33.3 +lon_0=2.7 +k_0=0.999625769 +x_0=500135 +y_0=300090 +ellps=clrk80 +towgs84=-209.362,-87.8162,404.62,0.0046,3.4784,0.5805,-1.4547 +units=m +no_defs ', "EPSG:30800":'+proj=tmerc +lat_0=0 +lon_0=15.80827777777778 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +units=m +no_defs ', "EPSG:31028":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +units=m +no_defs ', "EPSG:31121":'+proj=utm +zone=21 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ', "EPSG:31154":'+proj=tmerc +lat_0=0 +lon_0=-54 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ', "EPSG:31170":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9996 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ', "EPSG:31171":'+proj=tmerc +lat_0=0 +lon_0=-55.68333333333333 +k=0.9999 +x_0=500000 +y_0=0 +ellps=intl +towgs84=-265,120,-358,0,0,0,0 +units=m +no_defs ', "EPSG:31251":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31252":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31253":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31254":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31255":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31256":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=0 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31257":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31258":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31259":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=-5000000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31265":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31266":'+proj=tmerc +lat_0=0 +lon_0=18 +k=1 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31267":'+proj=tmerc +lat_0=0 +lon_0=21 +k=1 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31268":'+proj=tmerc +lat_0=0 +lon_0=24 +k=1 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31275":'+proj=tmerc +lat_0=0 +lon_0=15 +k=0.9999 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31276":'+proj=tmerc +lat_0=0 +lon_0=18 +k=0.9999 +x_0=6500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31277":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31278":'+proj=tmerc +lat_0=0 +lon_0=21 +k=0.9999 +x_0=7500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31279":'+proj=tmerc +lat_0=0 +lon_0=24 +k=0.9999 +x_0=8500000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31281":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31282":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31283":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31284":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31285":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31286":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31287":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31288":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31289":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31290":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31291":'+proj=tmerc +lat_0=0 +lon_0=28 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31292":'+proj=tmerc +lat_0=0 +lon_0=31 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31293":'+proj=tmerc +lat_0=0 +lon_0=34 +k=1 +x_0=0 +y_0=0 +ellps=bessel +towgs84=682,-203,480,0,0,0,0 +pm=ferro +units=m +no_defs ', "EPSG:31294":'+proj=tmerc +lat_0=0 +lon_0=10.33333333333333 +k=1 +x_0=150000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31295":'+proj=tmerc +lat_0=0 +lon_0=13.33333333333333 +k=1 +x_0=450000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31296":'+proj=tmerc +lat_0=0 +lon_0=16.33333333333333 +k=1 +x_0=750000 +y_0=0 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31297":'+proj=lcc +lat_1=49 +lat_2=46 +lat_0=47.5 +lon_0=13.33333333333333 +x_0=400000 +y_0=400000 +ellps=bessel +towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232 +units=m +no_defs ', "EPSG:31300":'+proj=lcc +lat_1=49.83333333333334 +lat_2=51.16666666666666 +lat_0=90 +lon_0=4.356939722222222 +x_0=150000.01256 +y_0=5400088.4378 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ', "EPSG:31370":'+proj=lcc +lat_1=51.16666723333333 +lat_2=49.8333339 +lat_0=90 +lon_0=4.367486666666666 +x_0=150000.013 +y_0=5400088.438 +ellps=intl +towgs84=-106.869,52.2978,-103.724,0.3366,-0.457,1.8422,-1.2747 +units=m +no_defs ', "EPSG:31461":'+proj=tmerc +lat_0=0 +lon_0=3 +k=1 +x_0=1500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31462":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31463":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31464":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31465":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31466":'+proj=tmerc +lat_0=0 +lon_0=6 +k=1 +x_0=2500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31467":'+proj=tmerc +lat_0=0 +lon_0=9 +k=1 +x_0=3500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31468":'+proj=tmerc +lat_0=0 +lon_0=12 +k=1 +x_0=4500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31469":'+proj=tmerc +lat_0=0 +lon_0=15 +k=1 +x_0=5500000 +y_0=0 +ellps=bessel +towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 +units=m +no_defs ', "EPSG:31528":'+proj=utm +zone=28 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', "EPSG:31529":'+proj=utm +zone=29 +a=6378249.2 +b=6356515 +towgs84=-23,259,-9,0,0,0,0 +units=m +no_defs ', "EPSG:31600":'+proj=sterea +lat_0=45.9 +lon_0=25.39246588888889 +k=0.9996667 +x_0=500000 +y_0=500000 +ellps=intl +towgs84=103.25,-100.4,-307.19,0,0,0,0 +units=m +no_defs ', "EPSG:31700":'+proj=sterea +lat_0=46 +lon_0=25 +k=0.99975 +x_0=500000 +y_0=500000 +ellps=krass +towgs84=28,-121,-77,0,0,0,0 +units=m +no_defs ', "EPSG:31838":'+proj=utm +zone=38 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ', "EPSG:31839":'+proj=utm +zone=39 +ellps=WGS84 +towgs84=-3.2,-5.7,2.8,0,0,0,0 +units=m +no_defs ', "EPSG:31900":'+proj=tmerc +lat_0=0 +lon_0=48 +k=0.9996 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ', "EPSG:31901":'+proj=tmerc +lat_0=0 +lon_0=48 +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=-20.8,11.3,2.4,0,0,0,0 +units=m +no_defs ', "EPSG:31965":'+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31966":'+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31967":'+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31968":'+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31969":'+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31970":'+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31971":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31972":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31973":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31974":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31975":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31976":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31977":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31978":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31979":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31980":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31981":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31982":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31983":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31984":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31985":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31986":'+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31987":'+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31988":'+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31989":'+proj=utm +zone=20 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31990":'+proj=utm +zone=21 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31991":'+proj=utm +zone=22 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31992":'+proj=utm +zone=17 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31993":'+proj=utm +zone=18 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31994":'+proj=utm +zone=19 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31995":'+proj=utm +zone=20 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31996":'+proj=utm +zone=21 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31997":'+proj=utm +zone=22 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31998":'+proj=utm +zone=23 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:31999":'+proj=utm +zone=24 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32000":'+proj=utm +zone=25 +south +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32001":'+proj=lcc +lat_1=48.71666666666667 +lat_2=47.85 +lat_0=47 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32002":'+proj=lcc +lat_1=47.88333333333333 +lat_2=46.45 +lat_0=45.83333333333334 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32003":'+proj=lcc +lat_1=46.4 +lat_2=44.86666666666667 +lat_0=44 +lon_0=-109.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32005":'+proj=lcc +lat_1=41.85 +lat_2=42.81666666666667 +lat_0=41.33333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32006":'+proj=lcc +lat_1=40.28333333333333 +lat_2=41.71666666666667 +lat_0=39.66666666666666 +lon_0=-99.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32007":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32008":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32009":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32010":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32011":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.66666666666667 +k=0.9999749999999999 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32012":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32013":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32014":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32015":'+proj=tmerc +lat_0=40 +lon_0=-74.33333333333333 +k=0.999966667 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32016":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32017":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32018":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.5 +lon_0=-74 +x_0=304800.6096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32019":'+proj=lcc +lat_1=34.33333333333334 +lat_2=36.16666666666666 +lat_0=33.75 +lon_0=-79 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32020":'+proj=lcc +lat_1=47.43333333333333 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32021":'+proj=lcc +lat_1=46.18333333333333 +lat_2=47.48333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32022":'+proj=lcc +lat_1=40.43333333333333 +lat_2=41.7 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32023":'+proj=lcc +lat_1=38.73333333333333 +lat_2=40.03333333333333 +lat_0=38 +lon_0=-82.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32024":'+proj=lcc +lat_1=35.56666666666667 +lat_2=36.76666666666667 +lat_0=35 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32025":'+proj=lcc +lat_1=33.93333333333333 +lat_2=35.23333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32026":'+proj=lcc +lat_1=44.33333333333334 +lat_2=46 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32027":'+proj=lcc +lat_1=42.33333333333334 +lat_2=44 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32028":'+proj=lcc +lat_1=40.88333333333333 +lat_2=41.95 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32029":'+proj=lcc +lat_1=39.93333333333333 +lat_2=40.8 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32030":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.9999938 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32031":'+proj=lcc +lat_1=33.76666666666667 +lat_2=34.96666666666667 +lat_0=33 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32033":'+proj=lcc +lat_1=32.33333333333334 +lat_2=33.66666666666666 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32034":'+proj=lcc +lat_1=44.41666666666666 +lat_2=45.68333333333333 +lat_0=43.83333333333334 +lon_0=-100 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32035":'+proj=lcc +lat_1=42.83333333333334 +lat_2=44.4 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32036":'+proj=lcc +lat_1=35.25 +lat_2=36.41666666666666 +lat_0=34.66666666666666 +lon_0=-86 +x_0=30480.06096012192 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32037":'+proj=lcc +lat_1=34.65 +lat_2=36.18333333333333 +lat_0=34 +lon_0=-101.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32038":'+proj=lcc +lat_1=32.13333333333333 +lat_2=33.96666666666667 +lat_0=31.66666666666667 +lon_0=-97.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32039":'+proj=lcc +lat_1=30.11666666666667 +lat_2=31.88333333333333 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32040":'+proj=lcc +lat_1=28.38333333333333 +lat_2=30.28333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32041":'+proj=lcc +lat_1=26.16666666666667 +lat_2=27.83333333333333 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32042":'+proj=lcc +lat_1=40.71666666666667 +lat_2=41.78333333333333 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32043":'+proj=lcc +lat_1=39.01666666666667 +lat_2=40.65 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32044":'+proj=lcc +lat_1=37.21666666666667 +lat_2=38.35 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32045":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32046":'+proj=lcc +lat_1=38.03333333333333 +lat_2=39.2 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32047":'+proj=lcc +lat_1=36.76666666666667 +lat_2=37.96666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32048":'+proj=lcc +lat_1=47.5 +lat_2=48.73333333333333 +lat_0=47 +lon_0=-120.8333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32049":'+proj=lcc +lat_1=45.83333333333334 +lat_2=47.33333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32050":'+proj=lcc +lat_1=39 +lat_2=40.25 +lat_0=38.5 +lon_0=-79.5 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32051":'+proj=lcc +lat_1=37.48333333333333 +lat_2=38.88333333333333 +lat_0=37 +lon_0=-81 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32052":'+proj=lcc +lat_1=45.56666666666667 +lat_2=46.76666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32053":'+proj=lcc +lat_1=44.25 +lat_2=45.5 +lat_0=43.83333333333334 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32054":'+proj=lcc +lat_1=42.73333333333333 +lat_2=44.06666666666667 +lat_0=42 +lon_0=-90 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32055":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-105.1666666666667 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32056":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-107.3333333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32057":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-108.75 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32058":'+proj=tmerc +lat_0=40.66666666666666 +lon_0=-110.0833333333333 +k=0.999941177 +x_0=152400.3048006096 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32061":'+proj=lcc +lat_1=16.81666666666667 +lat_0=16.81666666666667 +lon_0=-90.33333333333333 +k_0=0.99992226 +x_0=500000 +y_0=292209.579 +datum=NAD27 +units=m +no_defs ', "EPSG:32062":'+proj=lcc +lat_1=14.9 +lat_0=14.9 +lon_0=-90.33333333333333 +k_0=0.99989906 +x_0=500000 +y_0=325992.681 +datum=NAD27 +units=m +no_defs ', "EPSG:32064":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32065":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32066":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32067":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32074":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32075":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32076":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32077":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32081":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:32082":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:32083":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:32084":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:32085":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:32086":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:32098":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +datum=NAD27 +units=m +no_defs ', "EPSG:32099":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-91.33333333333333 +x_0=609601.2192024384 +y_0=0 +datum=NAD27 +units=us-ft +no_defs ', "EPSG:32100":'+proj=lcc +lat_1=49 +lat_2=45 +lat_0=44.25 +lon_0=-109.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32104":'+proj=lcc +lat_1=43 +lat_2=40 +lat_0=39.83333333333334 +lon_0=-100 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32107":'+proj=tmerc +lat_0=34.75 +lon_0=-115.5833333333333 +k=0.9999 +x_0=200000 +y_0=8000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32108":'+proj=tmerc +lat_0=34.75 +lon_0=-116.6666666666667 +k=0.9999 +x_0=500000 +y_0=6000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32109":'+proj=tmerc +lat_0=34.75 +lon_0=-118.5833333333333 +k=0.9999 +x_0=800000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32110":'+proj=tmerc +lat_0=42.5 +lon_0=-71.66666666666667 +k=0.999966667 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32111":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32112":'+proj=tmerc +lat_0=31 +lon_0=-104.3333333333333 +k=0.999909091 +x_0=165000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32113":'+proj=tmerc +lat_0=31 +lon_0=-106.25 +k=0.9999 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32114":'+proj=tmerc +lat_0=31 +lon_0=-107.8333333333333 +k=0.999916667 +x_0=830000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32115":'+proj=tmerc +lat_0=38.83333333333334 +lon_0=-74.5 +k=0.9999 +x_0=150000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32116":'+proj=tmerc +lat_0=40 +lon_0=-76.58333333333333 +k=0.9999375 +x_0=250000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32117":'+proj=tmerc +lat_0=40 +lon_0=-78.58333333333333 +k=0.9999375 +x_0=350000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32118":'+proj=lcc +lat_1=41.03333333333333 +lat_2=40.66666666666666 +lat_0=40.16666666666666 +lon_0=-74 +x_0=300000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32119":'+proj=lcc +lat_1=36.16666666666666 +lat_2=34.33333333333334 +lat_0=33.75 +lon_0=-79 +x_0=609601.22 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32120":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.43333333333333 +lat_0=47 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32121":'+proj=lcc +lat_1=47.48333333333333 +lat_2=46.18333333333333 +lat_0=45.66666666666666 +lon_0=-100.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32122":'+proj=lcc +lat_1=41.7 +lat_2=40.43333333333333 +lat_0=39.66666666666666 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32123":'+proj=lcc +lat_1=40.03333333333333 +lat_2=38.73333333333333 +lat_0=38 +lon_0=-82.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32124":'+proj=lcc +lat_1=36.76666666666667 +lat_2=35.56666666666667 +lat_0=35 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32125":'+proj=lcc +lat_1=35.23333333333333 +lat_2=33.93333333333333 +lat_0=33.33333333333334 +lon_0=-98 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32126":'+proj=lcc +lat_1=46 +lat_2=44.33333333333334 +lat_0=43.66666666666666 +lon_0=-120.5 +x_0=2500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32127":'+proj=lcc +lat_1=44 +lat_2=42.33333333333334 +lat_0=41.66666666666666 +lon_0=-120.5 +x_0=1500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32128":'+proj=lcc +lat_1=41.95 +lat_2=40.88333333333333 +lat_0=40.16666666666666 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32129":'+proj=lcc +lat_1=40.96666666666667 +lat_2=39.93333333333333 +lat_0=39.33333333333334 +lon_0=-77.75 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32130":'+proj=tmerc +lat_0=41.08333333333334 +lon_0=-71.5 +k=0.99999375 +x_0=100000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32133":'+proj=lcc +lat_1=34.83333333333334 +lat_2=32.5 +lat_0=31.83333333333333 +lon_0=-81 +x_0=609600 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32134":'+proj=lcc +lat_1=45.68333333333333 +lat_2=44.41666666666666 +lat_0=43.83333333333334 +lon_0=-100 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32135":'+proj=lcc +lat_1=44.4 +lat_2=42.83333333333334 +lat_0=42.33333333333334 +lon_0=-100.3333333333333 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32136":'+proj=lcc +lat_1=36.41666666666666 +lat_2=35.25 +lat_0=34.33333333333334 +lon_0=-86 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32137":'+proj=lcc +lat_1=36.18333333333333 +lat_2=34.65 +lat_0=34 +lon_0=-101.5 +x_0=200000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32138":'+proj=lcc +lat_1=33.96666666666667 +lat_2=32.13333333333333 +lat_0=31.66666666666667 +lon_0=-98.5 +x_0=600000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32139":'+proj=lcc +lat_1=31.88333333333333 +lat_2=30.11666666666667 +lat_0=29.66666666666667 +lon_0=-100.3333333333333 +x_0=700000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32140":'+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32141":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.66666666666667 +lon_0=-98.5 +x_0=300000 +y_0=5000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32142":'+proj=lcc +lat_1=41.78333333333333 +lat_2=40.71666666666667 +lat_0=40.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32143":'+proj=lcc +lat_1=40.65 +lat_2=39.01666666666667 +lat_0=38.33333333333334 +lon_0=-111.5 +x_0=500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32144":'+proj=lcc +lat_1=38.35 +lat_2=37.21666666666667 +lat_0=36.66666666666666 +lon_0=-111.5 +x_0=500000 +y_0=3000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32145":'+proj=tmerc +lat_0=42.5 +lon_0=-72.5 +k=0.999964286 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32146":'+proj=lcc +lat_1=39.2 +lat_2=38.03333333333333 +lat_0=37.66666666666666 +lon_0=-78.5 +x_0=3500000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32147":'+proj=lcc +lat_1=37.96666666666667 +lat_2=36.76666666666667 +lat_0=36.33333333333334 +lon_0=-78.5 +x_0=3500000 +y_0=1000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32148":'+proj=lcc +lat_1=48.73333333333333 +lat_2=47.5 +lat_0=47 +lon_0=-120.8333333333333 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32149":'+proj=lcc +lat_1=47.33333333333334 +lat_2=45.83333333333334 +lat_0=45.33333333333334 +lon_0=-120.5 +x_0=500000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32150":'+proj=lcc +lat_1=40.25 +lat_2=39 +lat_0=38.5 +lon_0=-79.5 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32151":'+proj=lcc +lat_1=38.88333333333333 +lat_2=37.48333333333333 +lat_0=37 +lon_0=-81 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32152":'+proj=lcc +lat_1=46.76666666666667 +lat_2=45.56666666666667 +lat_0=45.16666666666666 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32153":'+proj=lcc +lat_1=45.5 +lat_2=44.25 +lat_0=43.83333333333334 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32154":'+proj=lcc +lat_1=44.06666666666667 +lat_2=42.73333333333333 +lat_0=42 +lon_0=-90 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32155":'+proj=tmerc +lat_0=40.5 +lon_0=-105.1666666666667 +k=0.9999375 +x_0=200000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32156":'+proj=tmerc +lat_0=40.5 +lon_0=-107.3333333333333 +k=0.9999375 +x_0=400000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32157":'+proj=tmerc +lat_0=40.5 +lon_0=-108.75 +k=0.9999375 +x_0=600000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32158":'+proj=tmerc +lat_0=40.5 +lon_0=-110.0833333333333 +k=0.9999375 +x_0=800000 +y_0=100000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32161":'+proj=lcc +lat_1=18.43333333333333 +lat_2=18.03333333333333 +lat_0=17.83333333333333 +lon_0=-66.43333333333334 +x_0=200000 +y_0=200000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32164":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:32165":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:32166":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:32167":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=us-ft +no_defs ', "EPSG:32180":'+proj=tmerc +lat_0=0 +lon_0=-55.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32181":'+proj=tmerc +lat_0=0 +lon_0=-53 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32182":'+proj=tmerc +lat_0=0 +lon_0=-56 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32183":'+proj=tmerc +lat_0=0 +lon_0=-58.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32184":'+proj=tmerc +lat_0=0 +lon_0=-61.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32185":'+proj=tmerc +lat_0=0 +lon_0=-64.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32186":'+proj=tmerc +lat_0=0 +lon_0=-67.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32187":'+proj=tmerc +lat_0=0 +lon_0=-70.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32188":'+proj=tmerc +lat_0=0 +lon_0=-73.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32189":'+proj=tmerc +lat_0=0 +lon_0=-76.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32190":'+proj=tmerc +lat_0=0 +lon_0=-79.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32191":'+proj=tmerc +lat_0=0 +lon_0=-82.5 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32192":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32193":'+proj=tmerc +lat_0=0 +lon_0=-84 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32194":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32195":'+proj=tmerc +lat_0=0 +lon_0=-90 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32196":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32197":'+proj=tmerc +lat_0=0 +lon_0=-96 +k=0.9999 +x_0=304800 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32198":'+proj=lcc +lat_1=60 +lat_2=46 +lat_0=44 +lon_0=-68.5 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32199":'+proj=lcc +lat_1=27.83333333333333 +lat_2=26.16666666666667 +lat_0=25.5 +lon_0=-91.33333333333333 +x_0=1000000 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32201":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32202":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32203":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32204":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32205":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32206":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32207":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32208":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32209":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32210":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32211":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32212":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32213":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32214":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32215":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32216":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32217":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32218":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32219":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32220":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32221":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32222":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32223":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32224":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32225":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32226":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32227":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32228":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32229":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32230":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32231":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32232":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32233":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32234":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32235":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32236":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32237":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32238":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32239":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32240":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32241":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32242":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32243":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32244":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32245":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32246":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32247":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32248":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32249":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32250":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32251":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32252":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32253":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32254":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32255":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32256":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32257":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32258":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32259":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32260":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32301":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32302":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32303":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32304":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32305":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32306":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32307":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32308":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32309":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32310":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32311":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32312":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32313":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32314":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32315":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32316":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32317":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32318":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32319":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32320":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32321":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32322":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32323":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32324":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32325":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32326":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32327":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32328":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32329":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32330":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32331":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32332":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32333":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32334":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32335":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32336":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32337":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32338":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32339":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32340":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32341":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32342":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32343":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32344":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32345":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32346":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32347":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32348":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32349":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32350":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32351":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32352":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32353":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32354":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32355":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32356":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32357":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32358":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32359":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32360":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,4.5,0,0,0.554,0.2263 +units=m +no_defs ', "EPSG:32401":'+proj=utm +zone=1 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32402":'+proj=utm +zone=2 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32403":'+proj=utm +zone=3 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32404":'+proj=utm +zone=4 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32405":'+proj=utm +zone=5 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32406":'+proj=utm +zone=6 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32407":'+proj=utm +zone=7 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32408":'+proj=utm +zone=8 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32409":'+proj=utm +zone=9 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32410":'+proj=utm +zone=10 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32411":'+proj=utm +zone=11 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32412":'+proj=utm +zone=12 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32413":'+proj=utm +zone=13 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32414":'+proj=utm +zone=14 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32415":'+proj=utm +zone=15 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32416":'+proj=utm +zone=16 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32417":'+proj=utm +zone=17 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32418":'+proj=utm +zone=18 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32419":'+proj=utm +zone=19 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32420":'+proj=utm +zone=20 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32421":'+proj=utm +zone=21 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32422":'+proj=utm +zone=22 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32423":'+proj=utm +zone=23 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32424":'+proj=utm +zone=24 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32425":'+proj=utm +zone=25 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32426":'+proj=utm +zone=26 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32427":'+proj=utm +zone=27 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32428":'+proj=utm +zone=28 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32429":'+proj=utm +zone=29 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32430":'+proj=utm +zone=30 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32431":'+proj=utm +zone=31 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32432":'+proj=utm +zone=32 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32433":'+proj=utm +zone=33 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32434":'+proj=utm +zone=34 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32435":'+proj=utm +zone=35 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32436":'+proj=utm +zone=36 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32437":'+proj=utm +zone=37 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32438":'+proj=utm +zone=38 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32439":'+proj=utm +zone=39 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32440":'+proj=utm +zone=40 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32441":'+proj=utm +zone=41 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32442":'+proj=utm +zone=42 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32443":'+proj=utm +zone=43 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32444":'+proj=utm +zone=44 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32445":'+proj=utm +zone=45 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32446":'+proj=utm +zone=46 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32447":'+proj=utm +zone=47 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32448":'+proj=utm +zone=48 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32449":'+proj=utm +zone=49 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32450":'+proj=utm +zone=50 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32451":'+proj=utm +zone=51 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32452":'+proj=utm +zone=52 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32453":'+proj=utm +zone=53 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32454":'+proj=utm +zone=54 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32455":'+proj=utm +zone=55 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32456":'+proj=utm +zone=56 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32457":'+proj=utm +zone=57 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32458":'+proj=utm +zone=58 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32459":'+proj=utm +zone=59 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32460":'+proj=utm +zone=60 +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32501":'+proj=utm +zone=1 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32502":'+proj=utm +zone=2 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32503":'+proj=utm +zone=3 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32504":'+proj=utm +zone=4 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32505":'+proj=utm +zone=5 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32506":'+proj=utm +zone=6 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32507":'+proj=utm +zone=7 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32508":'+proj=utm +zone=8 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32509":'+proj=utm +zone=9 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32510":'+proj=utm +zone=10 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32511":'+proj=utm +zone=11 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32512":'+proj=utm +zone=12 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32513":'+proj=utm +zone=13 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32514":'+proj=utm +zone=14 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32515":'+proj=utm +zone=15 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32516":'+proj=utm +zone=16 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32517":'+proj=utm +zone=17 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32518":'+proj=utm +zone=18 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32519":'+proj=utm +zone=19 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32520":'+proj=utm +zone=20 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32521":'+proj=utm +zone=21 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32522":'+proj=utm +zone=22 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32523":'+proj=utm +zone=23 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32524":'+proj=utm +zone=24 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32525":'+proj=utm +zone=25 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32526":'+proj=utm +zone=26 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32527":'+proj=utm +zone=27 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32528":'+proj=utm +zone=28 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32529":'+proj=utm +zone=29 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32530":'+proj=utm +zone=30 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32531":'+proj=utm +zone=31 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32532":'+proj=utm +zone=32 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32533":'+proj=utm +zone=33 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32534":'+proj=utm +zone=34 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32535":'+proj=utm +zone=35 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32536":'+proj=utm +zone=36 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32537":'+proj=utm +zone=37 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32538":'+proj=utm +zone=38 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32539":'+proj=utm +zone=39 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32540":'+proj=utm +zone=40 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32541":'+proj=utm +zone=41 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32542":'+proj=utm +zone=42 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32543":'+proj=utm +zone=43 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32544":'+proj=utm +zone=44 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32545":'+proj=utm +zone=45 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32546":'+proj=utm +zone=46 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32547":'+proj=utm +zone=47 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32548":'+proj=utm +zone=48 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32549":'+proj=utm +zone=49 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32550":'+proj=utm +zone=50 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32551":'+proj=utm +zone=51 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32552":'+proj=utm +zone=52 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32553":'+proj=utm +zone=53 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32554":'+proj=utm +zone=54 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32555":'+proj=utm +zone=55 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32556":'+proj=utm +zone=56 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32557":'+proj=utm +zone=57 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32558":'+proj=utm +zone=58 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32559":'+proj=utm +zone=59 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32560":'+proj=utm +zone=60 +south +ellps=WGS72 +towgs84=0,0,1.9,0,0,0.814,-0.38 +units=m +no_defs ', "EPSG:32601":'+proj=utm +zone=1 +datum=WGS84 +units=m +no_defs ', "EPSG:32602":'+proj=utm +zone=2 +datum=WGS84 +units=m +no_defs ', "EPSG:32603":'+proj=utm +zone=3 +datum=WGS84 +units=m +no_defs ', "EPSG:32604":'+proj=utm +zone=4 +datum=WGS84 +units=m +no_defs ', "EPSG:32605":'+proj=utm +zone=5 +datum=WGS84 +units=m +no_defs ', "EPSG:32606":'+proj=utm +zone=6 +datum=WGS84 +units=m +no_defs ', "EPSG:32607":'+proj=utm +zone=7 +datum=WGS84 +units=m +no_defs ', "EPSG:32608":'+proj=utm +zone=8 +datum=WGS84 +units=m +no_defs ', "EPSG:32609":'+proj=utm +zone=9 +datum=WGS84 +units=m +no_defs ', "EPSG:32610":'+proj=utm +zone=10 +datum=WGS84 +units=m +no_defs ', "EPSG:32611":'+proj=utm +zone=11 +datum=WGS84 +units=m +no_defs ', "EPSG:32612":'+proj=utm +zone=12 +datum=WGS84 +units=m +no_defs ', "EPSG:32613":'+proj=utm +zone=13 +datum=WGS84 +units=m +no_defs ', "EPSG:32614":'+proj=utm +zone=14 +datum=WGS84 +units=m +no_defs ', "EPSG:32615":'+proj=utm +zone=15 +datum=WGS84 +units=m +no_defs ', "EPSG:32616":'+proj=utm +zone=16 +datum=WGS84 +units=m +no_defs ', "EPSG:32617":'+proj=utm +zone=17 +datum=WGS84 +units=m +no_defs ', "EPSG:32618":'+proj=utm +zone=18 +datum=WGS84 +units=m +no_defs ', "EPSG:32619":'+proj=utm +zone=19 +datum=WGS84 +units=m +no_defs ', "EPSG:32620":'+proj=utm +zone=20 +datum=WGS84 +units=m +no_defs ', "EPSG:32621":'+proj=utm +zone=21 +datum=WGS84 +units=m +no_defs ', "EPSG:32622":'+proj=utm +zone=22 +datum=WGS84 +units=m +no_defs ', "EPSG:32623":'+proj=utm +zone=23 +datum=WGS84 +units=m +no_defs ', "EPSG:32624":'+proj=utm +zone=24 +datum=WGS84 +units=m +no_defs ', "EPSG:32625":'+proj=utm +zone=25 +datum=WGS84 +units=m +no_defs ', "EPSG:32626":'+proj=utm +zone=26 +datum=WGS84 +units=m +no_defs ', "EPSG:32627":'+proj=utm +zone=27 +datum=WGS84 +units=m +no_defs ', "EPSG:32628":'+proj=utm +zone=28 +datum=WGS84 +units=m +no_defs ', "EPSG:32629":'+proj=utm +zone=29 +datum=WGS84 +units=m +no_defs ', "EPSG:32630":'+proj=utm +zone=30 +datum=WGS84 +units=m +no_defs ', "EPSG:32631":'+proj=utm +zone=31 +datum=WGS84 +units=m +no_defs ', "EPSG:32632":'+proj=utm +zone=32 +datum=WGS84 +units=m +no_defs ', "EPSG:32633":'+proj=utm +zone=33 +datum=WGS84 +units=m +no_defs ', "EPSG:32634":'+proj=utm +zone=34 +datum=WGS84 +units=m +no_defs ', "EPSG:32635":'+proj=utm +zone=35 +datum=WGS84 +units=m +no_defs ', "EPSG:32636":'+proj=utm +zone=36 +datum=WGS84 +units=m +no_defs ', "EPSG:32637":'+proj=utm +zone=37 +datum=WGS84 +units=m +no_defs ', "EPSG:32638":'+proj=utm +zone=38 +datum=WGS84 +units=m +no_defs ', "EPSG:32639":'+proj=utm +zone=39 +datum=WGS84 +units=m +no_defs ', "EPSG:32640":'+proj=utm +zone=40 +datum=WGS84 +units=m +no_defs ', "EPSG:32641":'+proj=utm +zone=41 +datum=WGS84 +units=m +no_defs ', "EPSG:32642":'+proj=utm +zone=42 +datum=WGS84 +units=m +no_defs ', "EPSG:32643":'+proj=utm +zone=43 +datum=WGS84 +units=m +no_defs ', "EPSG:32644":'+proj=utm +zone=44 +datum=WGS84 +units=m +no_defs ', "EPSG:32645":'+proj=utm +zone=45 +datum=WGS84 +units=m +no_defs ', "EPSG:32646":'+proj=utm +zone=46 +datum=WGS84 +units=m +no_defs ', "EPSG:32647":'+proj=utm +zone=47 +datum=WGS84 +units=m +no_defs ', "EPSG:32648":'+proj=utm +zone=48 +datum=WGS84 +units=m +no_defs ', "EPSG:32649":'+proj=utm +zone=49 +datum=WGS84 +units=m +no_defs ', "EPSG:32650":'+proj=utm +zone=50 +datum=WGS84 +units=m +no_defs ', "EPSG:32651":'+proj=utm +zone=51 +datum=WGS84 +units=m +no_defs ', "EPSG:32652":'+proj=utm +zone=52 +datum=WGS84 +units=m +no_defs ', "EPSG:32653":'+proj=utm +zone=53 +datum=WGS84 +units=m +no_defs ', "EPSG:32654":'+proj=utm +zone=54 +datum=WGS84 +units=m +no_defs ', "EPSG:32655":'+proj=utm +zone=55 +datum=WGS84 +units=m +no_defs ', "EPSG:32656":'+proj=utm +zone=56 +datum=WGS84 +units=m +no_defs ', "EPSG:32657":'+proj=utm +zone=57 +datum=WGS84 +units=m +no_defs ', "EPSG:32658":'+proj=utm +zone=58 +datum=WGS84 +units=m +no_defs ', "EPSG:32659":'+proj=utm +zone=59 +datum=WGS84 +units=m +no_defs ', "EPSG:32660":'+proj=utm +zone=60 +datum=WGS84 +units=m +no_defs ', "EPSG:32661":'+proj=stere +lat_0=90 +lat_ts=90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:32662":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs ', "EPSG:32663":'+proj=eqc +lat_ts=0 +lat_0=0 +lon_0=0 +x_0=0 +y_0=0 +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs ', "EPSG:32664":'+proj=tmerc +lat_0=0 +lon_0=-99 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ', "EPSG:32665":'+proj=tmerc +lat_0=0 +lon_0=-93 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ', "EPSG:32666":'+proj=tmerc +lat_0=0 +lon_0=-87 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ', "EPSG:32667":'+proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +datum=WGS84 +units=us-ft +no_defs ', "EPSG:32701":'+proj=utm +zone=1 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32702":'+proj=utm +zone=2 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32703":'+proj=utm +zone=3 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32704":'+proj=utm +zone=4 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32705":'+proj=utm +zone=5 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32706":'+proj=utm +zone=6 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32707":'+proj=utm +zone=7 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32708":'+proj=utm +zone=8 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32709":'+proj=utm +zone=9 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32710":'+proj=utm +zone=10 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32711":'+proj=utm +zone=11 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32712":'+proj=utm +zone=12 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32713":'+proj=utm +zone=13 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32714":'+proj=utm +zone=14 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32715":'+proj=utm +zone=15 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32716":'+proj=utm +zone=16 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32717":'+proj=utm +zone=17 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32718":'+proj=utm +zone=18 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32719":'+proj=utm +zone=19 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32720":'+proj=utm +zone=20 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32721":'+proj=utm +zone=21 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32722":'+proj=utm +zone=22 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32723":'+proj=utm +zone=23 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32724":'+proj=utm +zone=24 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32725":'+proj=utm +zone=25 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32726":'+proj=utm +zone=26 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32727":'+proj=utm +zone=27 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32728":'+proj=utm +zone=28 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32729":'+proj=utm +zone=29 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32730":'+proj=utm +zone=30 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32731":'+proj=utm +zone=31 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32732":'+proj=utm +zone=32 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32733":'+proj=utm +zone=33 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32734":'+proj=utm +zone=34 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32735":'+proj=utm +zone=35 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32736":'+proj=utm +zone=36 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32737":'+proj=utm +zone=37 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32738":'+proj=utm +zone=38 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32739":'+proj=utm +zone=39 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32740":'+proj=utm +zone=40 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32741":'+proj=utm +zone=41 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32742":'+proj=utm +zone=42 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32743":'+proj=utm +zone=43 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32744":'+proj=utm +zone=44 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32745":'+proj=utm +zone=45 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32746":'+proj=utm +zone=46 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32747":'+proj=utm +zone=47 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32748":'+proj=utm +zone=48 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32749":'+proj=utm +zone=49 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32750":'+proj=utm +zone=50 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32751":'+proj=utm +zone=51 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32752":'+proj=utm +zone=52 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32753":'+proj=utm +zone=53 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32754":'+proj=utm +zone=54 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32755":'+proj=utm +zone=55 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32756":'+proj=utm +zone=56 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32757":'+proj=utm +zone=57 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32758":'+proj=utm +zone=58 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32759":'+proj=utm +zone=59 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32760":'+proj=utm +zone=60 +south +datum=WGS84 +units=m +no_defs ', "EPSG:32761":'+proj=stere +lat_0=-90 +lat_ts=-90 +lon_0=0 +k=0.994 +x_0=2000000 +y_0=2000000 +datum=WGS84 +units=m +no_defs ', "EPSG:32766":'+proj=tmerc +lat_0=0 +lon_0=36 +k=0.9996 +x_0=500000 +y_0=10000000 +datum=WGS84 +units=m +no_defs ' }; },{}],78:[function(require,module,exports){ var util = require('util') , fileType = require('file-type'); var TileCreator = require('./index').TileCreator , TileBoundingBoxUtils = require('../tileBoundingBoxUtils') , TileUtilities = require('./tileUtilities') , ProjectTile = require('./projectTile.js'); function CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) { TileCreator.apply(this, arguments); this.canvas = canvas || document.createElement('canvas'); this.canvas.width = width; this.canvas.height = height; this.ctx = this.canvas.getContext('2d'); this.image = document.createElement('img'); this.tileCanvas = document.createElement('canvas'); this.tileContext = this.tileCanvas.getContext('2d'); this.tileCanvas.width = tileMatrix.tile_width; this.tileCanvas.height = tileMatrix.tile_height; this.imageData = new Uint8ClampedArray(width * height * 4); } util.inherits(CanvasTileCreator, TileCreator); CanvasTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) { var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1); this.imageData.set(color.data, (targetY * this.width * 4) + (targetX * 4)); }; CanvasTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) { var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow); var type = fileType(tileData); var binary = ''; var bytes = tileData; var len = bytes.byteLength; for (var i = 0; i < len; i++) { binary += String.fromCharCode( bytes[ i ] ); } var base64Data = btoa( binary ); return new Promise(function(resolve, reject) { this.chunks = []; this.image.onload = function() { resolve(this.tileContext.drawImage(this.image, 0, 0)); }.bind(this); this.image.src = 'data:'+type.mime+';base64,' + base64Data; }.bind(this)) .then(function() { return this.projectTile(tileData, gridColumn, gridRow); }.bind(this)) .then(function() { if (this.chunks && this.chunks.length) { return this.chunks.reduce(function(sequence, chunk) { var type = fileType(tileData); var binary = ''; var bytes = chunk.chunk; var len = bytes.byteLength; for (var i = 0; i < len; i++) { binary += String.fromCharCode( bytes[ i ] ); } var base64DataChunk = btoa( binary ); var image = document.createElement('img'); return sequence.then(function() { return new Promise(function(resolve, reject) { image.onload = function() { var p = chunk.position; this.ctx.drawImage(image, p.sx, p.sy, p.sWidth, p.sHeight, p.dx, p.dy, p.dWidth, p.dHeight ); resolve(); }.bind(this); image.src = 'data:'+type.mime+';base64,' + base64DataChunk; }.bind(this)); }.bind(this)); }.bind(this), Promise.resolve()); } }.bind(this)); }; CanvasTileCreator.prototype.getCompleteTile = function (format, callback) { return this.canvas.toDataURL(); }; CanvasTileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) { var ctx = this.ctx; var width = this.width; var height = this.height; var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, this.tileBoundingBox, this.height, this.width, this.projectionTo, this.projectionFrom, this.projectionFromDefinition, this.tileHeightUnitsPerPixel, this.tileWidthUnitsPerPixel, this.tileMatrix.pixel_x_size, this.tileMatrix.pixel_y_size); var job = { tileBoundingBox: JSON.stringify(this.tileBoundingBox), tileWidthUnitsPerPixel: this.tileWidthUnitsPerPixel, tileHeightUnitsPerPixel: this.tileHeightUnitsPerPixel, projectionTo: this.projectionTo, projectionFrom: this.projectionFrom, projectionFromDefinition: this.projectionFromDefinition, tileWidth: this.tileMatrix.tile_width, tileHeight: this.tileMatrix.tile_height, pixelYSize: this.tileMatrix.pixel_y_size, pixelXSize: this.tileMatrix.pixel_x_size, height: this.height, width: this.width, tilePieceBoundingBox: JSON.stringify(tilePieceBoundingBox), imageData: this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer }; return new Promise(function(resolve, reject) { try { var work = require('webworkify'); var worker = work(require('./tileWorker.js')); worker.onmessage = function(e) { resolve(workerDone(e.data, piecePosition, ctx)); }; worker.postMessage(job, [this.tileContext.getImageData(0, 0, this.tileMatrix.tile_width, this.tileMatrix.tile_height).data.buffer]); } catch (e) { worker = ProjectTile; worker(job, function(err, data) { resolve(workerDone(data, piecePosition, ctx)); }); } }.bind(this)); }; function workerDone(data, piecePosition, ctx) { if (data.message === 'done') { var imageData = new Uint8ClampedArray(data.imageData); var offsetX = piecePosition.startX; var offsetY = piecePosition.startY; var finalWidth = data.finalWidth; var finalHeight = data.finalHeight; var tmpCanvas = document.createElement('canvas'); tmpCanvas.width = finalWidth; tmpCanvas.height = finalHeight; tmpCanvas.getContext('2d').putImageData(new ImageData(imageData, finalWidth, finalHeight), 0, 0); ctx.drawImage(tmpCanvas, offsetX, offsetY); } } module.exports = CanvasTileCreator; },{"../tileBoundingBoxUtils":93,"./index":79,"./projectTile.js":81,"./tileUtilities":82,"./tileWorker.js":83,"file-type":223,"util":343,"webworkify":347}],79:[function(require,module,exports){ (function (process){ var proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; var TileBoundingBoxUtils = require('../tileBoundingBoxUtils'); module.exports.initialize = function(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas) { var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1); var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom); var isNode = typeof(process) !== 'undefined' && process.version; if (isNode && !isPhantom && !isElectron) { var NodeTileCreator = require('./node'); return new NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas); } else { var CanvasTileCreator = require('./canvas'); return new CanvasTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo, canvas); } } function TileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, srs, projectionTo) { this.width = width; this.height = height; this.tileMatrix = tileMatrix; this.projectionFrom = srs.organization.toUpperCase() + ':' + srs.organization_coordsys_id; this.projectionFromDefinition = srs.definition; this.projectionTo = projectionTo.toUpperCase(); this.tileBoundingBox = tileBoundingBox; this.tileMatrixSet = tileMatrixSet; this.chunks = []; this.tileHeightUnitsPerPixel = (tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude) / height; this.tileWidthUnitsPerPixel = (tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude) / width; // use this as a quick check if the projections are equal. If they are we can shortcut some math // special cases 'EPSG:900913' =='EPSG:3857' == 'EPSG:102113' this.sameProjection = (this.projectionFrom === this.projectionTo) || (this.projectionTo === 'EPSG:3857' && (this.projectionFrom === 'EPSG:900913' || this.projectionFrom === 'EPSG:102113')); } module.exports.TileCreator = TileCreator; TileCreator.prototype.projectTile = function(tileData, gridColumn, gridRow) { var bb = TileBoundingBoxUtils.getTileBoundingBox(this.tileMatrixSet.getBoundingBox(), this.tileMatrix, gridColumn, gridRow); if (!this.sameProjection) { return this.reproject(tileData, bb); } else { return Promise.resolve(this.cutAndScale(tileData, bb)); } } TileCreator.prototype.cutAndScale = function (tileData, tilePieceBoundingBox) { var position = TileBoundingBoxUtils.determinePositionAndScale(tilePieceBoundingBox, this.tileMatrix.tile_height, this.tileMatrix.tile_width, this.tileBoundingBox, this.height, this.width); if (position.xPositionInFinalTileStart >= this.width || position.xPositionInFinalTileEnd <= 0 || position.yPositionInFinalTileStart >= this.height || position.yPositionInFinalTileEnd <= 0) { // this tile doesn't belong just skip it } else { this.addChunk(tileData, position); } }; TileCreator.prototype.addChunk = function (chunk, position) { this.chunks.push({ chunk: chunk, position: position }); }; TileCreator.prototype.reproject = function (tileData, tilePieceBoundingBox) { var y = 0; var x = 0; var height = this.height; var width = this.width; var proj4To = proj4(this.projectionTo); var proj4From; if (this.projectionFrom) { try { proj4From = proj4(this.projectionFrom); } catch (e) {} } if (!proj4From && this.projectionFromDefinition) { proj4From = proj4(this.projectionFromDefinition); } var conversion; try { conversion = proj4(this.projectionTo, this.projectionFrom); } catch (e) {} if (!conversion) { conversion = proj4(this.projectionTo, this.projectionFromDefinition); } var latitude; var rows = []; for (var i = 0; i < height; i++) { rows.push(i); } var columns = []; for (var i = 0; i < width; i++) { columns.push(i); } return rows.reduce(function(rowSequence, row) { return rowSequence.then(function() { latitude = this.tileBoundingBox.maxLatitude - (row * this.tileHeightUnitsPerPixel); var currentColumns = columns.slice(); return currentColumns.reduce(function(columnSequence, column) { return columnSequence.then(function() { // loop over all pixels in the target tile // determine the position of the current pixel in the target tile var longitude = this.tileBoundingBox.minLongitude + (column * this.tileWidthUnitsPerPixel); // project that lat/lng to the source coordinate system var projected = conversion.forward([longitude, latitude]); var projectedLongitude = projected[0]; var projectedLatitude = projected[1]; // now find the source pixel var xPixel = this.tileMatrix.tile_width - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / this.tileMatrix.pixel_x_size); var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / this.tileMatrix.pixel_y_size); if (xPixel >= 0 && xPixel < this.tileMatrix.tile_width && yPixel >= 0 && yPixel < this.tileMatrix.tile_height) { this.addPixel(column, row, xPixel, yPixel); } }.bind(this)); }.bind(this), Promise.resolve()); }.bind(this)); }.bind(this), Promise.resolve()); }; }).call(this,require('_process')) },{"../tileBoundingBoxUtils":93,"./canvas":78,"./node":80,"_process":284,"proj4":285}],80:[function(require,module,exports){ var util = require('util') , concat = require('concat-stream') , ImageUtils = require('../imageUtils'); var TileCreator = require('./index').TileCreator; function NodeTileCreator(width, height, tileMatrix, tileMatrixSet, tileBoundingBox, projectionFrom, projectionTo, canvas) { TileCreator.apply(this, arguments); this.Canvas = require('canvas'); this.canvas = canvas || this.Canvas.createCanvas(width, height); this.ctx = this.canvas.getContext('2d'); this.tileCanvas = this.Canvas.createCanvas(width, height); this.tileContext = this.tileCanvas.getContext('2d'); this.tileCanvas.width = tileMatrix.tile_width; this.tileCanvas.height = tileMatrix.tile_height; this.imageData = this.Canvas.createImageData(new Uint8ClampedArray(width * height * 4), width, height); this.pixelAdded = false; } util.inherits(NodeTileCreator, TileCreator); NodeTileCreator.prototype.addPixel = function (targetX, targetY, sourceX, sourceY) { var color = this.tileContext.getImageData(sourceX, sourceY, 1, 1); this.imageData.data.set(color.data, (targetY * this.width * 4) + (targetX * 4)); this.pixelAdded = true; }; NodeTileCreator.prototype.addTile = function (tileData, gridColumn, gridRow) { return ImageUtils.getImage(tileData) .then(function(img) { this.tile = img; this.tileContext.drawImage(img, 0, 0); this.chunks = []; }.bind(this)) .then(function() { return this.projectTile(tileData, gridColumn, gridRow); }.bind(this)) .then(function() { if (this.pixelAdded) { this.ctx.putImageData(this.imageData, 0, 0); } }.bind(this)) .then(function() { if (this.chunks && this.chunks.length) { return this.chunks.reduce(function(sequence, chunk) { return sequence.then(function() { return ImageUtils.getImage(tileData); }.bind(this)) .then(function(image) { var p = chunk.position; this.ctx.drawImage(image, p.sx, p.sy, p.sWidth, p.sHeight, p.dx, p.dy, p.dWidth, p.dHeight ); }.bind(this)); }.bind(this), Promise.resolve()); } }.bind(this)) .then(function() { return this.canvas; }.bind(this)); }; NodeTileCreator.prototype.getCompleteTile = function (format) { return new Promise(function (resolve, reject) { var writeStream = concat(function(buffer) { resolve(buffer); }); var stream = null; if (format === 'png') { stream = this.canvas.createPNGStream(); } else { stream = this.canvas.createJPEGStream(); } stream.pipe(writeStream); }.bind(this)); }; module.exports = NodeTileCreator; },{"../imageUtils":89,"./index":79,"canvas":undefined,"concat-stream":185,"util":343}],81:[function(require,module,exports){ var proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; var TileUtilities = require('./tileUtilities') , proj4Defs = require('../../proj4Defs'); module.exports = function(job, callback) { console.log('Tile Worker - working'); console.time('Tile Worker - time'); var self = this; if (proj4Defs[job.projectionTo]) { proj4.defs(job.projectionTo, proj4Defs[job.projectionTo]); } if (proj4Defs[job.projectionFrom]) { proj4.defs(job.projectionFrom, proj4Defs[job.projectionFrom]); } var proj4To = proj4(job.projectionTo); var proj4From = proj4(job.projectionFrom); var conversion; try { conversion = proj4(job.projectionTo, job.projectionFrom); } catch (e) {} if (!conversion) { conversion = proj4(job.projectionTo, job.projectionFromDefinition); } var tileBoundingBox = JSON.parse(job.tileBoundingBox); var tilePieceBoundingBox = JSON.parse(job.tilePieceBoundingBox); var piecePosition = TileUtilities.getPiecePosition(tilePieceBoundingBox, tileBoundingBox, job.height, job.width, job.projectionTo, job.projectionFrom, job.projectionFromDefinition, job.tileHeightUnitsPerPixel, job.tileWidthUnitsPerPixel, job.pixelXSize, job.pixelYSize); var x = piecePosition.startX; var y = piecePosition.startY; var finalWidth = (piecePosition.endX - piecePosition.startX); var finalHeight = (piecePosition.endY - piecePosition.startY); if (finalWidth <= 0 || finalHeight <= 0) { console.timeEnd('Tile Worker - time'); if (callback) { return callback(null, {message:'donenodata'}); } else { postMessage({message:'donenodata'}); return self.close(); } } var imageData = new Uint8ClampedArray(job.imageData); var finalImageData = new Uint8ClampedArray(finalWidth * finalHeight * 4); var latitude; var yArray = []; for (var i = y; i < piecePosition.endY; i++) { yArray.push(i); } var xArray = []; for (var i = x; i < piecePosition.endX; i++) { xArray.push(i); } return yArray.reduce(function(ySequence, y) { return ySequence.then(function() { latitude = tileBoundingBox.maxLatitude - (y * job.tileHeightUnitsPerPixel); var currentXArray = xArray.slice(); return currentXArray.reduce(function(xSequence, x) { return xSequence.then(function() { longitude = tileBoundingBox.minLongitude + (x * job.tileWidthUnitsPerPixel); var projected = conversion.forward([longitude, latitude]); var projectedLongitude = projected[0]; var projectedLatitude = projected[1]; var xPixel = job.tileWidth - Math.round((tilePieceBoundingBox.maxLongitude - projectedLongitude) / job.pixelXSize); var yPixel = Math.round((tilePieceBoundingBox.maxLatitude - projectedLatitude) / job.pixelYSize); if (xPixel >= 0 && xPixel < job.tileWidth && yPixel >= 0 && yPixel < job.tileHeight) { var sliceStart = (yPixel * job.tileWidth * 4) + (xPixel * 4); if (sliceStart >= 0) { finalImageData.set(imageData.slice(sliceStart, sliceStart + 4), ((y-piecePosition.startY)*finalWidth*4) + ((x-piecePosition.startX)*4)); } } }); }, Promise.resolve()); }); }, Promise.resolve()) .then(function() { console.timeEnd('Tile Worker - time'); if (callback) { callback(null, {message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]); } else { postMessage({message:'done', imageData: finalImageData.buffer, finalWidth: finalWidth, finalHeight: finalHeight}, [finalImageData.buffer]); self.close(); } }); } },{"../../proj4Defs":77,"./tileUtilities":82,"proj4":285}],82:[function(require,module,exports){ var proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; module.exports.getPiecePosition = function(tilePieceBoundingBox, tileBoundingBox, height, width, projectionTo, projectionFrom, projectionFromDefinition, tileHeightUnitsPerPixel, tileWidthUnitsPerPixel, pixelXSize, pixelYSize) { var conversion; try { conversion = proj4(projectionTo, projectionFrom); } catch (e) {} if (!conversion) { conversion = proj4(projectionTo, projectionFromDefinition); } var maxLatitude = tilePieceBoundingBox.maxLatitude; var minLatitude = tilePieceBoundingBox.minLatitude; var minLongitude = tilePieceBoundingBox.minLongitude - pixelXSize; var maxLongitude = tilePieceBoundingBox.maxLongitude + pixelXSize; if (projectionTo.toUpperCase() === 'EPSG:3857' && projectionFrom.toUpperCase() === 'EPSG:4326') { maxLatitude = maxLatitude > 85.0511 ? 85.0511 : maxLatitude; minLatitude = minLatitude < -85.0511 ? -85.0511 : minLatitude; minLongitude = minLongitude < -180.0 ? -180.0 : minLongitude; maxLongitude = maxLongitude > 180.0 ? 180.0 : maxLongitude; } // ensure the projeced longitude wont wrap around the world var negative180 = proj4('EPSG:4326', projectionTo, [-180,0]); var positive180 = proj4('EPSG:4326', projectionTo, [180,0]); minLongitude = minLongitude < negative180[0] ? negative180[0] : minLongitude; maxLongitude = maxLongitude > positive180[0] ? positive180[0] : maxLongitude; var pieceBoundingBoxInTileProjectionSW = conversion.inverse([minLongitude, minLatitude]); var pieceBoundingBoxInTileProjectionNE = conversion.inverse([maxLongitude, maxLatitude]); var pieceBBProjected = { minLatitude: isNaN(pieceBoundingBoxInTileProjectionSW[1]) ? tileBoundingBox.minLatitude : pieceBoundingBoxInTileProjectionSW[1], maxLatitude: isNaN(pieceBoundingBoxInTileProjectionNE[1]) ? tileBoundingBox.maxLatitude : pieceBoundingBoxInTileProjectionNE[1], minLongitude: pieceBoundingBoxInTileProjectionSW[0], maxLongitude: pieceBoundingBoxInTileProjectionNE[0] }; var startY = y = Math.max(0, Math.floor((tileBoundingBox.maxLatitude - pieceBBProjected.maxLatitude) / tileHeightUnitsPerPixel)); var startX = x = Math.max(0, Math.floor((pieceBBProjected.minLongitude - tileBoundingBox.minLongitude) / tileWidthUnitsPerPixel)); var endY = Math.min(height, height - Math.floor((pieceBBProjected.minLatitude - tileBoundingBox.minLatitude) / tileHeightUnitsPerPixel)); var endX = Math.min(width, width - Math.floor((tileBoundingBox.maxLongitude - pieceBBProjected.maxLongitude) / tileWidthUnitsPerPixel)); return { startY: startY, startX: startX, endY: endY, endX: endX }; } },{"proj4":285}],83:[function(require,module,exports){ var ProjectTile = require('./projectTile'); function tileWorker(e) { console.log('Tile Worker - working'); console.time('Tile Worker - time'); var self = this; var job = e.data; ProjectTile(job, function(err, data) { postMessage(data); self.close(); }); } module.exports = function(self) { self.onmessage = tileWorker; self.onerror = function(e) { console.log('error', e); } }; },{"./projectTile":81}],84:[function(require,module,exports){ /** * Feature Draw Type module. * @module tiles/features */ var FeatureDrawType = { /** * Circle for a point */ CIRCLE: 'CIRCLE', /** * Stroke for a line of polygon */ STROKE: 'STOKE', /** * Fill for a polygon */ FILL: 'FILL' }; module.exports = FeatureDrawType; },{}],85:[function(require,module,exports){ /** * FeaturePaint module. * @module tiles/features */ var FeaturePaint = function () { this.featurePaints = {}; }; /** * Get the feature paint for the featureDrawType * @param {module:tiles/features~FeatureDrawType} featureDrawType * @return {module:tiles/features~FeaturePaint} paint */ FeaturePaint.prototype.getPaint = function(featureDrawType) { return this.featurePaints[featureDrawType]; }; /** * Set the feature paint for the featureDrawType * @param {module:tiles/features~FeatureDrawType} featureDrawType * @param {module:tiles/features~Paint} paint */ FeaturePaint.prototype.setPaint = function(featureDrawType, paint) { this.featurePaints[featureDrawType] = paint; }; module.exports = FeaturePaint; },{}],86:[function(require,module,exports){ /** * Feature Paint Cache. * @module tiles/features */ var FeaturePaint = require('./featurePaint'); /** * Constructor, created with cache size of {@link #DEFAULT_CACHE_SIZE} * @constructor */ var FeaturePaintCache = function(size = null) { this.cacheSize = size !== null ? size : FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE; this.paintCache = {}; this.accessHistory = []; }; /** * Get the cached featurePaint for the style row or null if not cached * @param {module:extension/style~StyleRow} styleRow style row * @return {module:tiles/features~FeaturePaint} feature paint or null */ FeaturePaintCache.prototype.getFeaturePaintForStyleRow = function(styleRow) { return this.getFeaturePaint(styleRow.getId()); }; /** * Get the cached featurePaint for the style row id or null if not cached * @param {Number} styleRowId style row id * @return {module:tiles/features~FeaturePaint} feature paint or null */ FeaturePaintCache.prototype.getFeaturePaint = function(styleRowId) { var featurePaint = this.paintCache[styleRowId]; if (!!featurePaint) { var index = this.accessHistory.indexOf(styleRowId); if (index > -1) { this.accessHistory.splice(index, 1); } this.accessHistory.push(styleRowId); } return featurePaint; }; /** * Get the paint for the style row and draw type * @param {module:extension/style~StyleRow} styleRow style row * @param {String} type feature draw type * @return {module:tiles/features~Paint} paint */ FeaturePaintCache.prototype.getPaintForStyleRow = function(styleRow, type) { return this.getPaint(styleRow.getId(), type); }; /** * Get the paint for the style row id and draw type * @param {Number} styleId style row id * @param {String} type feature draw type * @return {module:tiles/features~Paint} paint */ FeaturePaintCache.prototype.getPaint = function(styleId, type) { var paint = null; var featurePaint = this.getFeaturePaint(styleId); if (featurePaint !== undefined && featurePaint !== null) { paint = featurePaint.getPaint(type); } return paint; }; /** * Cache the featurePaint for the style row * @param {module:extension/style~StyleRow} styleRow style row * @param {module:tiles/features~FeatureDrawType} type feature draw type * @param {module:tiles/features~Paint} paint paint */ FeaturePaintCache.prototype.setPaintForStyleRow = function(styleRow, type, paint) { this.setPaint(styleRow.getId(), type, paint); }; /** * Cache the featurePaint for the style row id * @param {Number} styleRowId style row id * @param {module:tiles/features~FeatureDrawType} type feature draw type * @param {module:tiles/features~Paint} paint paint */ FeaturePaintCache.prototype.setPaint = function(styleRowId, type, paint) { var featurePaint = this.paintCache[styleRowId]; if (!featurePaint) { featurePaint = new FeaturePaint(); } else { var index = this.accessHistory.indexOf(styleRowId); if (index > -1) { this.accessHistory.splice(index, 1); } } featurePaint.setPaint(type, paint); this.paintCache[styleRowId] = featurePaint; this.accessHistory.push(styleRowId); if (Object.keys(this.paintCache).length > this.cacheSize) { var styleId = this.accessHistory.shift(); if (styleId) { delete this.paintCache[styleId]; } } }; /** * Remove the cached featurePaint for the style row id * @param {Number} styleRowId style row id * @return {module:tiles/features~FeaturePaint} removed feature paint or null */ FeaturePaintCache.prototype.remove = function(styleRowId) { var removed = this.paintCache[styleRowId]; delete this.paintCache[styleRowId]; if (!!removed) { var index = this.accessHistory.indexOf(styleRowId); if (index > -1) { this.accessHistory.splice(index, 1); } } return removed; }; /** * Clear the cache */ FeaturePaintCache.prototype.clear = function() { this.paintCache = {}; this.accessHistory = []; }; /** * Resize the cache * @param {Number} maxSize max size */ FeaturePaintCache.prototype.resize = function(maxSize) { this.cacheSize = maxSize; var keys = Object.keys(this.paintCache); if (keys.length > maxSize) { var numberToRemove = keys.length - maxSize; for (var i = 0; i < numberToRemove; i++) { var styleRowId = this.accessHistory.shift(); if (!!styleRowId) { delete this.paintCache[styleRowId]; } } } }; FeaturePaintCache.DEFAULT_STYLE_PAINT_CACHE_SIZE = 100; module.exports = FeaturePaintCache; },{"./featurePaint":85}],87:[function(require,module,exports){ (function (process){ /** * FeatureTiles module. * @module tiles/features */ var TileBoundingBoxUtils = require('../tileBoundingBoxUtils') , BoundingBox = require('../../boundingBox') , FeatureTableStyles = require('../../extension/style/featureTableStyles') , Paint = require('./paint') , FeaturePaintCache = require('./featurePaintCache') , FeatureDrawType = require('./featureDrawType') , IconCache = require('../../extension/style/iconCache') , ImageUtils = require('../imageUtils'); var d3geo = require('d3-geo') , concat = require('concat-stream') , reproject = require('reproject') , PolyToLine = require('@turf/polygon-to-line').default; /** * Tiles drawn from or linked to features. Used to query features and optionally draw tiles * from those features. */ var FeatureTiles = function(featureDao, tileWidth = null, tileHeight = null) { var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1); var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom); var isNode = typeof(process) !== 'undefined' && process.version; this.useNodeCanvas = isNode && !isPhantom && !isElectron; this.featureDao = featureDao; this.tileWidth = tileWidth !== null ? tileWidth : 256; this.tileHeight = tileHeight !== null ? tileHeight : 256; this.compressFormat = 'png'; this.pointRadius = 4.0; this.pointPaint = new Paint(); this.pointIcon = null; this.linePaint = new Paint(); this.linePaint.setStrokeWidth(2.0); this.lineStrokeWidth = 2.0; this.polygonPaint = new Paint(); this.polygonPaint.setStrokeWidth(2.0); this.polygonStrokeWidth = 2.0; this.fillPolygon = true; this.polygonFillPaint = new Paint(); this.featurePaintCache = new FeaturePaintCache(); this.iconCache = new IconCache(); this.scale = 1.0; this.geoPackage = this.featureDao.geoPackage; if (this.geoPackage != null) { this.featureTableStyles = new FeatureTableStyles(this.geoPackage, this.featureDao.getTable()); if (!this.featureTableStyles.has()) { this.featureTableStyles = null; } } this.maxFeaturesPerTile = null; this.maxFeaturesTileDraw = null; this.calculateDrawOverlap(); }; /** * Manually set the width and height draw overlap * @param {Number} pixels pixels */ FeatureTiles.prototype.setDrawOverlap = function (pixels) { this.setWidthDrawOverlap(pixels); this.setHeightDrawOverlap(pixels); }; /** * Get the width draw overlap * @return {Number} width draw overlap */ FeatureTiles.prototype.getWidthDrawOverlap = function () { return this.widthOverlap; }; /** * Manually set the width draw overlap * @param {Number} pixels pixels */ FeatureTiles.prototype.setWidthDrawOverlap = function (pixels) { this.widthOverlap = pixels; }; /** * Get the height draw overlap * @return {Number} height draw overlap */ FeatureTiles.prototype.getHeightDrawOverlap = function () { return this.heightOverlap; }; /** * Manually set the height draw overlap * @param {Number} pixels pixels */ FeatureTiles.prototype.setHeightDrawOverlap = function (pixels) { this.heightOverlap = pixels; }; /** * Get the feature DAO * @return {module:features/user/featureDao} feature dao */ FeatureTiles.prototype.getFeatureDao = function () { return this.featureDao; }; /** * Get the feature table styles * @return {module:extension/style~FeatureTableStyles} feature table styles */ FeatureTiles.prototype.getFeatureTableStyles = function () { return this.featureTableStyles; }; /** * Set the feature table styles * @param {module:extension/style~FeatureTableStyles} featureTableStyles feature table styles */ FeatureTiles.prototype.setFeatureTableStyles = function (featureTableStyles) { this.featureTableStyles = featureTableStyles; }; /** * Ignore the feature table styles within the GeoPackage */ FeatureTiles.prototype.ignoreFeatureTableStyles = function () { this.setFeatureTableStyles(null); this.calculateDrawOverlap(); }; /** * Clear all caches */ FeatureTiles.prototype.clearCache = function () { this.clearStylePaintCache(); this.clearIconCache(); }; /** * Clear the style paint cache */ FeatureTiles.prototype.clearStylePaintCache = function () { this.featurePaintCache.clear(); }; /** * Set / resize the style paint cache size * * @param {Number} size * @since 3.3.0 */ FeatureTiles.prototype.setStylePaintCacheSize = function (size) { this.featurePaintCache.resize(size); }; /** * Clear the icon cache */ FeatureTiles.prototype.clearIconCache = function () { this.iconCache.clear(); }; /** * Set / resize the icon cache size * @param {Number} size new size */ FeatureTiles.prototype.setIconCacheSize = function (size) { this.iconCache.resize(size); }; /** * Get the tile width * @return {Number} tile width */ FeatureTiles.prototype.getTileWidth = function () { return this.tileWidth; }; /** * Set the tile width * @param {Number} tileWidth tile width */ FeatureTiles.prototype.setTileWidth = function (tileWidth) { this.tileWidth = tileWidth; }; /** * Get the tile height * @return {Number} tile height */ FeatureTiles.prototype.getTileHeight = function () { return this.tileHeight; }; /** * Set the tile height * @param {Number} tileHeight tile height */ FeatureTiles.prototype.setTileHeight = function (tileHeight) { this.tileHeight = tileHeight; }; /** * Get the compress format * @return {String} compress format */ FeatureTiles.prototype.getCompressFormat = function () { return this.compressFormat; }; /** * Set the compress format * @param {String} compressFormat compress format */ FeatureTiles.prototype.setCompressFormat = function (compressFormat) { this.compressFormat = compressFormat; }; /** * Set the scale * * @param {Number} scale scale factor */ FeatureTiles.prototype.setScale = function(scale) { this.scale = scale; this.linePaint.setStrokeWidth(scale * this.lineStrokeWidth); this.polygonPaint.setStrokeWidth(scale * this.polygonStrokeWidth); this.featurePaintCache.clear(); }; /** * Get the scale * @return {Number} scale factor */ FeatureTiles.prototype.getScale = function() { return this.scale; }; FeatureTiles.prototype.calculateDrawOverlap = function() { if (this.pointIcon) { this.heightOverlap = this.scale * this.pointIcon.getHeight(); this.widthOverlap = this.scale * this.pointIcon.getWidth(); } else { this.heightOverlap = this.scale * this.pointRadius; this.widthOverlap = this.scale * this.pointRadius; } var lineHalfStroke = this.scale * this.lineStrokeWidth / 2.0; this.heightOverlap = Math.max(this.heightOverlap, lineHalfStroke); this.widthOverlap = Math.max(this.widthOverlap, lineHalfStroke); var polygonHalfStroke = this.scale * this.polygonStrokeWidth / 2.0; this.heightOverlap = Math.max(this.heightOverlap, polygonHalfStroke); this.widthOverlap = Math.max(this.widthOverlap, polygonHalfStroke); if (this.featureTableStyles !== null && this.featureTableStyles.has()) { var styleRowIds = []; var tableStyleIds = this.featureTableStyles.getAllTableStyleIds(); if (tableStyleIds !== null) { styleRowIds = styleRowIds.concat(tableStyleIds); } var styleIds = this.featureTableStyles.getAllStyleIds(); if (styleIds != null) { styleRowIds = styleRowIds.concat(styleIds.filter(id => styleRowIds.indexOf(id) === -1)); } var styleDao = this.featureTableStyles.getStyleDao(); for (var i = 0; i < styleRowIds.length; i++) { var styleRowId = styleRowIds[i]; var styleRow = styleDao.queryForId(styleRowId); var styleHalfWidth = this.scale * (styleRow.getWidthOrDefault() / 2.0); this.widthOverlap = Math.max(this.widthOverlap, styleHalfWidth); this.heightOverlap = Math.max(this.heightOverlap, styleHalfWidth); } var iconRowIds = []; var tableIconIds = this.featureTableStyles.getAllTableIconIds(); if (tableIconIds != null) { iconRowIds = iconRowIds.concat(tableIconIds); } var iconIds = this.featureTableStyles.getAllIconIds(); if (iconIds != null) { iconRowIds = iconRowIds.concat(iconIds.filter(id => iconRowIds.indexOf(id) === -1)); } var iconDao = this.featureTableStyles.getIconDao(); for (i = 0; i < iconRowIds.length; i++) { var iconRowId = iconRowIds[i]; var iconRow = iconDao.queryForId(iconRowId); var iconDimensions = iconRow.getDerivedDimensions(); var iconWidth = this.scale * Math.ceil(iconDimensions[0]); var iconHeight = this.scale * Math.ceil(iconDimensions[1]); this.widthOverlap = Math.max(this.widthOverlap, iconWidth); this.heightOverlap = Math.max(this.heightOverlap, iconHeight); } } }; FeatureTiles.prototype.setDrawOverlapsWithPixels = function(pixels) { this.widthOverlap = pixels; this.heightOverlap = pixels; }; FeatureTiles.prototype.getFeatureStyle = function(featureRow) { var featureStyle = null; if (this.featureTableStyles !== null) { featureStyle = this.featureTableStyles.getFeatureStyleForFeatureRow(featureRow); } return featureStyle; }; /** * Get the point paint for the feature style, or return the default paint * @param featureStyle feature style * @return paint */ FeatureTiles.prototype.getPointPaint = function(featureStyle) { var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.CIRCLE); if (paint == null) { paint = this.pointPaint; } return paint; }; /** * Get the line paint for the feature style, or return the default paint * @param featureStyle feature style * @return paint */ FeatureTiles.prototype.getLinePaint = function(featureStyle) { var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE); if (paint === null) { paint = this.linePaint; } return paint; }; /** * Get the polygon paint for the feature style, or return the default paint * @param featureStyle feature style * @return paint */ FeatureTiles.prototype.getPolygonPaint = function(featureStyle) { var paint = this.getFeatureStylePaint(featureStyle, FeatureDrawType.STROKE); if (paint == null) { paint = this.polygonPaint; } return paint; }; /** * Get the polygon fill paint for the feature style, or return the default * paint * @param featureStyle feature style * @return paint */ FeatureTiles.prototype.getPolygonFillPaint = function(featureStyle) { var paint = null; var hasStyleColor = false; if (featureStyle != null) { var style = featureStyle.getStyle(); if (style != null) { if (style.hasFillColor()) { paint = this.getStylePaint(style, FeatureDrawType.FILL); } else { hasStyleColor = style.hasColor(); } } } if (paint === null && !hasStyleColor && this.fillPolygon) { paint = this.polygonFillPaint; } return paint; }; /** * Get the feature style paint from cache, or create and cache it * @param featureStyle feature style * @param drawType draw type * @return feature style paint */ FeatureTiles.prototype.getFeatureStylePaint = function(featureStyle, drawType) { var paint = null; if (featureStyle != null) { var style = featureStyle.getStyle(); if (style !== null && style.hasColor()) { paint = this.getStylePaint(style, drawType); } } return paint; }; /** * Get the style paint from cache, or create and cache it * @param style style row * @param drawType draw type * @return {Paint} paint */ FeatureTiles.prototype.getStylePaint = function(style, drawType) { var paint = this.featurePaintCache.getPaintForStyleRow(style, drawType); if (paint === undefined || paint === null) { var color = null; var strokeWidth = null; if (drawType === FeatureDrawType.CIRCLE) { color = style.getColor(); } else if (drawType === FeatureDrawType.STROKE) { color = style.getColor(); strokeWidth = this.scale * style.getWidthOrDefault(); } else if (drawType === FeatureDrawType.FILL) { color = style.getFillColor(); strokeWidth = this.scale * style.getWidthOrDefault(); } else { throw new Error("Unsupported Draw Type: " + drawType); } var stylePaint = new Paint(); stylePaint.setColor(color); if (strokeWidth !== null) { stylePaint.setStrokeWidth(strokeWidth); } paint = this.featurePaintCache.getPaintForStyleRow(style, drawType); if (paint === undefined || paint === null) { this.featurePaintCache.setPaintForStyleRow(style, drawType, stylePaint); paint = stylePaint; } } return paint; }; /** * Get the point radius * @return {Number} radius */ FeatureTiles.prototype.getPointRadius = function() { return this.pointRadius; }; /** * Set the point radius * @param {Number} pointRadius point radius */ FeatureTiles.prototype.setPointRadius = function(pointRadius) { this.pointRadius = pointRadius; }; /** * Get point color * @return {String} color */ FeatureTiles.prototype.getPointColor = function() { return this.pointPaint.getColor(); }; /** * Set point color * @param {String} pointColor point color */ FeatureTiles.prototype.setPointColor = function(pointColor) { this.pointPaint.setColor(pointColor); }; /** * Get the point icon * @return {module:tiles/features.FeatureTilePointIcon} icon */ FeatureTiles.prototype.getPointIcon = function() { return this.pointIcon; }; /** * Set the point icon * @param {module:tiles/features.FeatureTilePointIcon} pointIcon point icon */ FeatureTiles.prototype.setPointIcon = function(pointIcon) { this.pointIcon = pointIcon; }; /** * Get line stroke width * @return {Number} width */ FeatureTiles.prototype.getLineStrokeWidth = function() { return this.lineStrokeWidth; }; /** * Set line stroke width * @param {Number} lineStrokeWidth line stroke width */ FeatureTiles.prototype.setLineStrokeWidth = function(lineStrokeWidth) { this.lineStrokeWidth = lineStrokeWidth; this.linePaint.setStrokeWidth(this.scale * this.lineStrokeWidth); }; /** * Get line color * @return {String} color */ FeatureTiles.prototype.getLineColor = function() { return this.linePaint.getColor(); }; /** * Set line color * @param {String} lineColor line color */ FeatureTiles.prototype.setLineColor = function(lineColor) { this.linePaint.setColor(lineColor); }; /** * Get polygon stroke width * @return {Number} width */ FeatureTiles.prototype.getPolygonStrokeWidth = function() { return this.polygonStrokeWidth; }; /** * Set polygon stroke width * @param {Number} polygonStrokeWidth polygon stroke width */ FeatureTiles.prototype.setPolygonStrokeWidth = function(polygonStrokeWidth) { this.polygonStrokeWidth = polygonStrokeWidth; this.polygonPaint.setStrokeWidth(this.scale * this.polygonStrokeWidth); }; /** * Get polygon color * @return {String} color */ FeatureTiles.prototype.getPolygonColor = function() { return this.polygonPaint.getColor(); }; /** * Set polygon color * @param {String} polygonColor polygon color */ FeatureTiles.prototype.setPolygonColor = function(polygonColor) { this.polygonPaint.setColor(polygonColor); }; /** * Is fill polygon * @return {Boolean} true if fill polygon */ FeatureTiles.prototype.isFillPolygon = function() { return this.fillPolygon; }; /** * Set the fill polygon * @param {Boolean} fillPolygon fill polygon */ FeatureTiles.prototype.setFillPolygon = function(fillPolygon) { this.fillPolygon = fillPolygon; }; /** * Get polygon fill color * @return {String} color */ FeatureTiles.prototype.getPolygonFillColor = function() { return this.polygonFillPaint.getColor(); }; /** * Set polygon fill color * @param {String} polygonFillColor polygon fill color */ FeatureTiles.prototype.setPolygonFillColor = function(polygonFillColor) { this.polygonFillPaint.setColor(polygonFillColor); }; /** * Get the max features per tile * @return {Number} max features per tile or null */ FeatureTiles.prototype.getMaxFeaturesPerTile = function() { return this.maxFeaturesPerTile; }; /** * Set the max features per tile. When more features are returned in a query * to create a single tile, the tile is not created. * @param {Number} maxFeaturesPerTile max features per tile */ FeatureTiles.prototype.setMaxFeaturesPerTile = function(maxFeaturesPerTile) { this.maxFeaturesPerTile = maxFeaturesPerTile; }; /** * Get the max features tile draw, the custom tile drawing implementation * for tiles with more features than the max at #getMaxFeaturesPerTile * @return {module:tiles/features/custom~CustomFeatureTile} max features tile draw or null */ FeatureTiles.prototype.getMaxFeaturesTileDraw = function() { return this.maxFeaturesTileDraw; }; /** * Set the max features tile draw, used to draw tiles when more features for * a single tile than the max at #getMaxFeaturesPerTile exist * @param {module:tiles/features/custom~CustomFeatureTile} maxFeaturesTileDraw max features tile draw */ FeatureTiles.prototype.setMaxFeaturesTileDraw = function(maxFeaturesTileDraw) { this.maxFeaturesTileDraw = maxFeaturesTileDraw; }; FeatureTiles.prototype.drawTile = function (x, y, z, canvas = null) { var indexed = this.featureDao.isIndexed(); if (indexed) { return this.drawTileQueryIndex(x, y, z, canvas); } else { return this.drawTileQueryAll(x, y, z, canvas); } }; FeatureTiles.prototype.drawTileQueryAll = function(x, y, zoom, canvas) { var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); boundingBox = this.expandBoundingBox(boundingBox); var count = this.featureDao.getCount(); if (this.maxFeaturesPerTile === null || count <= this.maxFeaturesPerTile) { return this.drawTileWithBoundingBox(boundingBox, zoom, canvas); } else if (this.maxFeaturesTileDraw !== null) { return this.maxFeaturesTileDraw.drawUnindexedTile(256, 256, canvas); } }; FeatureTiles.prototype.drawTileQueryIndex = async function(x, y, z, tileCanvas) { var boundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, z); var expandedBoundingBox = this.expandBoundingBox(boundingBox); var width = 256; var height = 256; var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << z), width * (1 << z)); var xTranslate = -positionAndScale.xPositionInFinalTileStart; var yTranslate = -positionAndScale.yPositionInFinalTileStart; var pi = Math.PI, tau = 2 * pi; var drawProjection = d3geo.geoMercator() .scale((1 << z) * 256 / tau) .center([-180, 85.0511287798066]) .translate([xTranslate, yTranslate]); var canvas; if (tileCanvas !== null) { canvas = tileCanvas; } var context; if (canvas === undefined || canvas === null) { if (this.useNodeCanvas) { var Canvas = require('canvas'); canvas = Canvas.createCanvas(width, height); } else { canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; } } context = canvas.getContext('2d'); context.clearRect(0, 0, width, height); var srs = this.featureDao.getSrs(); var tileCount = this.featureDao.countWebMercatorBoundingBox(expandedBoundingBox); if (this.maxFeaturesPerTile === null || tileCount <= this.maxFeaturesPerTile) { var iterator = this.featureDao.fastQueryWebMercatorBoundingBox(expandedBoundingBox); var geojsonFeatures = [] for (var featureRow of iterator) { geojsonFeatures.push(featureRow.getGeometry().geometry.toGeoJSON()); } for (var gj of geojsonFeatures) { var style = this.getFeatureStyle(featureRow); if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) { gj = reproject.toWgs84(gj, this.featureDao.projection); } await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style); } return new Promise(function(resolve, reject) { if (this.useNodeCanvas) { var writeStream = concat(function (buffer) { resolve(buffer); }); var stream = null; if (this.compressFormat === 'png') { stream = canvas.createPNGStream(); } else { stream = canvas.createJPEGStream(); } stream.pipe(writeStream); } else { resolve(canvas.toDataURL('image/' + this.compressFormat)); } }.bind(this)); } else if (this.maxFeaturesTileDraw !== null) { // Draw the max features tile return this.maxFeaturesTileDraw.drawTile(width, height, tileCount, canvas); } }; FeatureTiles.prototype.drawTileWithBoundingBox = async function(boundingBox, zoom, tileCanvas) { var width = 256; var height = 256; var positionAndScale = TileBoundingBoxUtils.determinePositionAndScale(boundingBox, height, width, new BoundingBox(-20037508.342789244, 20037508.342789244, -20037508.342789244, 20037508.342789244), height * (1 << zoom), width * (1 << zoom)); var xTranslate = -positionAndScale.xPositionInFinalTileStart; var yTranslate = -positionAndScale.yPositionInFinalTileStart; var pi = Math.PI, tau = 2 * pi; var drawProjection = d3geo.geoMercator() .scale((1 << zoom) * 256 / tau) .center([-180, 85.0511287798066]) .translate([xTranslate, yTranslate]); var canvas; if (tileCanvas !== null) { canvas = tileCanvas; } var context; if (canvas === undefined || canvas === null) { if (this.useNodeCanvas) { var Canvas = require('canvas'); canvas = Canvas.createCanvas(width, height); } else { canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; } } context = canvas.getContext('2d'); context.clearRect(0, 0, width, height); var featureDao = this.featureDao; var srs = featureDao.getSrs(); var each = featureDao.queryForEach(); var featureRows = []; for (var row of each) { featureRows.push(featureDao.getRow(row)); } for (var fr of featureRows) { var gj = fr.getGeometry().geometry.toGeoJSON(); var style = this.getFeatureStyle(fr); if (srs.organization !== 'EPSG' || srs.organization_coordsys_id !== 4326) { gj = reproject.toWgs84(gj, featureDao.projection); } await this.addFeatureToBatch(gj, context, drawProjection, boundingBox, style); } return new Promise(function(resolve, reject) { if (this.useNodeCanvas) { var writeStream = concat(function (buffer) { resolve(buffer); }); var stream = null; if (this.compressFormat === 'png') { stream = canvas.createPNGStream(); } else { stream = canvas.createJPEGStream(); } stream.pipe(writeStream); } else { resolve(canvas.toDataURL('image/' + this.compressFormat)); } }.bind(this)); }; /** * Draw a point in the context * @param path * @param geoJson * @param context * @param boundingBox * @param featureStyle * @param drawProjection */ FeatureTiles.prototype.drawPoint = async function(path, geoJson, context, boundingBox, featureStyle, drawProjection) { var width; var height; var iconX; var iconY; var transformedCoords = drawProjection([geoJson.coordinates[0], geoJson.coordinates[1]]); var x = transformedCoords[0]; var y = transformedCoords[1]; if (featureStyle !== undefined && featureStyle !== null && featureStyle.hasIcon()) { var iconRow = featureStyle.getIcon(); var image = await iconRow.getDataImage(iconRow); width = Math.round(this.scale * iconRow.getWidth()); height = Math.round(this.scale * iconRow.getHeight()); if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height && y <= this.tileHeight + height) { var anchorU = iconRow.getAnchorUOrDefault(); var anchorV = iconRow.getAnchorVOrDefault(); iconX = Math.round(x - (anchorU * width)); iconY = Math.round(y - (anchorV * height)); context.drawImage(image, iconX, iconY, width, height); } } else if (this.pointIcon !== undefined && this.pointIcon !== null) { width = Math.round(this.scale * this.pointIcon.getWidth()); height = Math.round(this.scale * this.pointIcon.getHeight()); if (x >= 0 - width && x <= this.tileWidth + width && y >= 0 - height && y <= this.tileHeight + height) { iconX = Math.round(x - this.scale * this.pointIcon.getXOffset()); iconY = Math.round(y - this.scale * this.pointIcon.getYOffset()); ImageUtils.scaleBitmap(this.pointIcon.getIcon(), this.scale).then((image) => { context.drawImage(image, iconX, iconY, width, height); }); } } else { context.save(); var radius = null; if (featureStyle !== undefined && featureStyle !== null) { var styleRow = featureStyle.getStyle(); if (styleRow !== undefined && styleRow !== null) { radius = this.scale * (styleRow.getWidthOrDefault() / 2.0); } } if (radius == null) { radius = this.scale * this.pointRadius; } var pointPaint = this.getPointPaint(featureStyle); if (x >= 0 - radius && x <= this.tileWidth + radius && y >= 0 - radius && y <= this.tileHeight + radius) { var circleX = Math.round(x); var circleY = Math.round(y); context.beginPath(); context.arc(circleX, circleY, radius, 0, 2 * Math.PI, true); context.closePath() context.fillStyle = pointPaint.getColorRGBA(); context.fill(); } context.restore(); } }; /** * Draw a line in the context * @param path * @param geoJson * @param context * @param featureStyle */ FeatureTiles.prototype.drawLine = function(path, geoJson, context, featureStyle) { context.save(); context.beginPath(); var paint = this.getLinePaint(featureStyle); context.strokeStyle = paint.getColorRGBA(); context.lineWidth = paint.getStrokeWidth(); path(geoJson); context.stroke(); context.closePath(); context.restore(); }; /** * Draw a polygon in the context * @param path * @param geoJson * @param context * @param featureStyle */ FeatureTiles.prototype.drawPolygon = function(path, geoJson, context, featureStyle) { context.save(); context.beginPath(); path(PolyToLine(geoJson).geometry); context.closePath(); var fillPaint = this.getPolygonFillPaint(featureStyle); if (fillPaint !== undefined && fillPaint !== null) { context.fillStyle = fillPaint.getColorRGBA(); context.fill(); } var paint = this.getPolygonPaint(featureStyle); context.strokeStyle = paint.getColorRGBA(); context.lineWidth = paint.getStrokeWidth(); context.stroke(); context.restore(); }; /** * Add a feature to the batch * @param geoJson * @param context * @param drawProjection * @param boundingBox * @param featureStyle */ FeatureTiles.prototype.addFeatureToBatch = async function(geoJson, context, drawProjection, boundingBox, featureStyle) { var path = new d3geo.geoPath() .context(context) .projection(drawProjection); var i, c; if (geoJson.type === 'Point') { await this.drawPoint(path, geoJson, context, boundingBox, featureStyle, drawProjection); } else if (geoJson.type === 'LineString') { this.drawLine(path, geoJson, context, featureStyle); } else if (geoJson.type === 'Polygon') { this.drawPolygon(path, geoJson, context, featureStyle); } else if (geoJson.type === 'MultiPoint') { for (i = 0; i < geoJson.coordinates.length; i++) { c = geoJson.coordinates[i]; var ptGeom = { type: 'Point', coordinates: c }; await this.drawPoint(path, ptGeom, context, boundingBox, featureStyle, drawProjection); } } else if (geoJson.type === 'MultiLineString') { for (i = 0; i < geoJson.coordinates.length; i++) { c = geoJson.coordinates[i]; var lsGeom = { type: 'LineString', coordinates: c }; this.drawLine(path, lsGeom, context, featureStyle); } } else if (geoJson.type === 'MultiPolygon') { for (i = 0; i < geoJson.coordinates.length; i++) { c = geoJson.coordinates[i]; var pGeom = { type: 'Polygon', coordinates: c }; this.drawPolygon(path, pGeom, context, featureStyle); } } }; /** * Create an expanded bounding box to handle features outside the tile that overlap * @param webMercatorBoundingBox web mercator bounding box * @return {BoundingBox} bounding box */ FeatureTiles.prototype.expandBoundingBox = function(webMercatorBoundingBox) { return this.expandWebMercatorBoundingBox(webMercatorBoundingBox, webMercatorBoundingBox); }; /** * Create an expanded bounding box to handle features outside the tile that overlap * @param webMercatorBoundingBox web mercator bounding box * @param tileWebMercatorBoundingBox tile web mercator bounding box * @return {BoundingBox} bounding box */ FeatureTiles.prototype.expandWebMercatorBoundingBox = function(webMercatorBoundingBox, tileWebMercatorBoundingBox) { // Create an expanded bounding box to handle features outside the tile that overlap var minLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.widthOverlap); var maxLongitude = TileBoundingBoxUtils.getLongitudeFromPixel(this.tileWidth, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileWidth + this.widthOverlap); var maxLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, 0 - this.heightOverlap); var minLatitude = TileBoundingBoxUtils.getLatitudeFromPixel(this.tileHeight, webMercatorBoundingBox, tileWebMercatorBoundingBox, this.tileHeight + this. heightOverlap); // Choose the most expanded longitudes and latitudes minLongitude = Math.min(minLongitude, webMercatorBoundingBox.minLongitude); maxLongitude = Math.max(maxLongitude, webMercatorBoundingBox.maxLongitude); minLatitude = Math.min(minLatitude, webMercatorBoundingBox.minLatitude); maxLatitude = Math.max(maxLatitude, webMercatorBoundingBox.maxLatitude); // Bound with the web mercator limits minLongitude = Math.max(minLongitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); maxLongitude = Math.min(maxLongitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); minLatitude = Math.max(minLatitude, -1 * TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); maxLatitude = Math.min(maxLatitude, TileBoundingBoxUtils.WEB_MERCATOR_HALF_WORLD_WIDTH); return new BoundingBox(minLongitude, maxLongitude, minLatitude, maxLatitude); }; module.exports = FeatureTiles; }).call(this,require('_process')) },{"../../boundingBox":7,"../../extension/style/featureTableStyles":48,"../../extension/style/iconCache":49,"../imageUtils":89,"../tileBoundingBoxUtils":93,"./featureDrawType":84,"./featurePaintCache":86,"./paint":88,"@turf/polygon-to-line":131,"_process":284,"canvas":undefined,"concat-stream":185,"d3-geo":194,"reproject":315}],88:[function(require,module,exports){ /** * Paint module. * @module tiles/features */ var Paint = function () { this.color = '#000000FF'; this.strokeWidth = 1.0; }; /** * Get the color * @returns {String} color */ Paint.prototype.getColor = function() { return this.color; }; /** * Get the color * @returns {String} color */ Paint.prototype.getColorRGBA = function() { // assumes color is in the format #RRGGBB or #RRGGBBAA var red = parseInt(this.color.substr(1,2), 16); var green = parseInt(this.color.substr(3,2), 16); var blue = parseInt(this.color.substr(5,2), 16); var alpha = 1.0; if (this.color.length > 7) { alpha = parseInt(this.color.substr(7,2), 16) / 255; } return 'rgba(' + red + ',' + green + ',' + blue + ',' + alpha + ')'; }; /** * Set the color * @param {String} color */ Paint.prototype.setColor = function(color) { this.color = color; }; /** * Get the stroke width * @returns {Number} strokeWidth */ Paint.prototype.getStrokeWidth = function() { return this.strokeWidth; }; /** * Set the stroke width * @param {Number} strokeWidth */ Paint.prototype.setStrokeWidth = function(strokeWidth) { this.strokeWidth = strokeWidth; }; module.exports = Paint; },{}],89:[function(require,module,exports){ (function (process,Buffer){ var sizeOf = require('image-size'); var ImageUtils = {}; var isElectron = !!(typeof navigator != 'undefined' && navigator.userAgent.toLowerCase().indexOf(' electron/') > -1); var isPhantom = !!(typeof window != 'undefined' && window.callPhantom && window._phantom); var isNode = typeof(process) !== 'undefined' && process.version; ImageUtils.useNodeCanvas = isNode && !isPhantom && !isElectron; /** * Get image for data * @param {Buffer|String} data file data or file path * @returns {Object} */ ImageUtils.getImageSize = function (data) { return sizeOf(data); }; /** * Get image for data * @param {Buffer|String} data file data or file path * @param {String} contentType * @returns {Promise} */ ImageUtils.getImage = function (data, contentType = 'image/png') { return new Promise(function (resolve, reject) { var image; if (ImageUtils.useNodeCanvas) { var Canvas = require('canvas'); image = new Canvas.Image(); } else { image = new Image(); } image.onload = () => { resolve(image); }; image.onerror = (error) => { reject(error); }; var src = data; if (data instanceof Buffer) { src = 'data:' + contentType + ';base64,' + data.toString('base64'); } image.src = src; }.bind(this)); }; /** * Get a scaled image * @param {Buffer} data * @param {Number} scale * @returns {Promise} */ ImageUtils.getScaledImage = function (data, scale) { return ImageUtils.getImage(data).then(function (image) { return ImageUtils.scaleBitmap(image, scale); }.bind(this)); }; /** * Get a scaled image * @param {Image} image * @param {Number} scale * @returns {Promise} */ ImageUtils.scaleBitmap = function (image, scale) { if (scale === 1.0) { return Promise.resolve(image); } else { var iconWidth = image.width; var iconHeight = image.height; var scaledWidth = Math.round(scale * iconWidth); var scaledHeight = Math.round(scale * iconHeight); var canvas, ctx, img; if (ImageUtils.useNodeCanvas) { var Canvas = require('canvas'); canvas = Canvas.createCanvas(scaledWidth, scaledHeight); img = new Canvas.Image(); } else { canvas = document.createElement('canvas'); canvas.width = scaledWidth; canvas.height = scaledHeight; img = new Image(); } ctx = canvas.getContext('2d'); ctx.drawImage(image, 0, 0, iconWidth, iconHeight, 0, 0, scaledWidth, scaledHeight); return new Promise(function (resolve) { img.onload = () => { resolve(img); }; img.src = canvas.toDataURL(); }.bind(this)); } }; module.exports = ImageUtils; }).call(this,require('_process'),require("buffer").Buffer) },{"_process":284,"buffer":182,"canvas":undefined,"image-size":244}],90:[function(require,module,exports){ /** * @module tiles/matrix * @see module:dao/dao */ var Dao = require('../../dao/dao') // , ContentsDao = require('../../core/contents').ContentsDao , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao; var util = require('util'); /** * Tile Matrix object. Documents the structure of the tile matrix at each zoom * level in each tiles table. It allows GeoPackages to contain rectangular as * well as square tiles (e.g. for better representation of polar regions). It * allows tile pyramids with zoom levels that differ in resolution by factors of * 2, irregular intervals, or regular intervals other than factors of 2. * @class TileMatrix */ var TileMatrix = function() { /** * Tile Pyramid User Data Table Name * @member {string} */ this.table_name; /** * 0 ⇐ zoom_level ⇐ max_level for table_name * @member {Number} */ this.zoom_level; /** * Number of columns (>= 1) in tile matrix at this zoom level * @member {Number} */ this.matrix_width; /** * Number of rows (>= 1) in tile matrix at this zoom level * @member {Number} */ this.matrix_height; /** * Tile width in pixels (>= 1)for this zoom level * @member {Number} */ this.tile_width; /** * Tile height in pixels (>= 1)for this zoom level * @member {Number} */ this.tile_height; /** * In t_table_name srid units or default meters for srid 0 (>0) * @member {Number} */ this.pixel_x_size; /** * In t_table_name srid units or default meters for srid 0 (>0) * @member {Number} */ this.pixel_y_size; }; /** * Tile Matrix Set Data Access Object * @class TileMatrixDao * @extends {module:dao/dao~Dao} */ var TileMatrixDao = function(geoPackage) { Dao.call(this, geoPackage); } util.inherits(TileMatrixDao, Dao); TileMatrixDao.prototype.createObject = function () { return new TileMatrix(); }; /** * get the Contents of the Tile matrix * @param {tileMatrix} tileMatrix the tile matrix * @param {Function} callback returns the contents */ TileMatrixDao.prototype.getContents = function (tileMatrix) { var dao = this.geoPackage.getContentsDao(); return dao.queryForId(tileMatrix.table_name); }; TileMatrixDao.prototype.getTileMatrixSet = function (tileMatrix) { var dao = this.geoPackage.getTileMatrixSetDao(); return dao.queryForId(tileMatrix.table_name); }; TileMatrixDao.TABLE_NAME = "gpkg_tile_matrix"; TileMatrixDao.COLUMN_PK1 = "table_name"; TileMatrixDao.COLUMN_PK2 = "zoom_level"; TileMatrixDao.COLUMN_TABLE_NAME = "table_name"; TileMatrixDao.COLUMN_ZOOM_LEVEL = "zoom_level"; TileMatrixDao.COLUMN_MATRIX_WIDTH = "matrix_width"; TileMatrixDao.COLUMN_MATRIX_HEIGHT = "matrix_height"; TileMatrixDao.COLUMN_TILE_WIDTH = "tile_width"; TileMatrixDao.COLUMN_TILE_HEIGHT = "tile_height"; TileMatrixDao.COLUMN_PIXEL_X_SIZE = "pixel_x_size"; TileMatrixDao.COLUMN_PIXEL_Y_SIZE = "pixel_y_size"; TileMatrix.TABLE_NAME = 'tableName'; TileMatrix.ZOOM_LEVEL = 'zoomLevel'; TileMatrix.MATRIX_WIDTH = 'matrixWidth'; TileMatrix.MATRIX_HEIGHT = 'matrixHeight'; TileMatrix.TILE_WIDTH = 'tileWidth'; TileMatrix.TILE_HEIGHT = 'tileHeight'; TileMatrix.PIXEL_X_SIZE = 'pixelXSize'; TileMatrix.PIXEL_Y_SIZE = 'pixelYSize'; TileMatrixDao.prototype.gpkgTableName = 'gpkg_tile_matrix'; TileMatrixDao.prototype.idColumns = [TileMatrixDao.COLUMN_PK1, TileMatrixDao.COLUMN_PK2]; TileMatrixDao.prototype.columns = [TileMatrixDao.COLUMN_TABLE_NAME, TileMatrixDao.COLUMN_ZOOM_LEVEL, TileMatrixDao.COLUMN_MATRIX_WIDTH, TileMatrixDao.COLUMN_MATRIX_HEIGHT, TileMatrixDao.COLUMN_TILE_WIDTH, TileMatrixDao.COLUMN_TILE_HEIGHT, TileMatrixDao.COLUMN_PIXEL_X_SIZE, TileMatrixDao.COLUMN_PIXEL_Y_SIZE]; module.exports.TileMatrixDao = TileMatrixDao; module.exports.TileMatrix = TileMatrix; },{"../../dao/dao":11,"../matrixset":91,"util":343}],91:[function(require,module,exports){ /** * @module tiles/matrixset * @see module:dao/dao */ var Dao = require('../../dao/dao') , BoundingBox = require('../../boundingBox') , SpatialReferenceSystemDao = require('../../core/srs').SpatialReferenceSystemDao; // , ContentsDao = require('../../core/contents').ContentsDao; var util = require('util'); /** * `TileMatrixSet` models the [`gpkg_tile_matrix_set`](https://www.geopackage.org/spec121/index.html#_tile_matrix_set) * table. A row in this table defines the minimum bounding box (min_x, min_y, * max_x, max_y) and spatial reference system (srs_id) for all tiles in a * [tile pyramid](https://www.geopackage.org/spec121/index.html#tiles_user_tables) * user data table. While the parent [Contents]{@link module:core/contents~Contents} * row/object also defines a bounding box, the tile matrix set bounding box is * used as the reference for calculating tile column/row matrix coordinates, so * (min_x, max_y) in SRS coordinates would be the upper-left corner of the tile * at tile matrix coordinate (0, 0). The parent `Contents` bounding box may be * smaller or larger than the `TileMatrixSet` bounding box, and its purpose is * to guide a user-facing application to the target region of the tile pyramid. * The [`srs_id`]{@link module:tiles/matrixset~TileMatrixSet#srs_id} of the `TileMatrixSet`, on the other hand, must * match that of the parent [`Contents`]{@link module:core/contents~Contents#srs_id}. * * @class TileMatrixSet */ var TileMatrixSet = function() { /** * Name of the [tile pyramid user data table](https://www.geopackage.org/spec121/index.html#tiles_user_tables) * that stores the tiles * @member {string} */ this.table_name; /** * Unique identifier for each Spatial Reference System within a GeoPackage * @member {SRSRef} */ this.srs_id; /** * Bounding box minimum easting or longitude for all content in table_name * @member {Number} */ this.min_x; /** * Bounding box minimum northing or latitude for all content in table_name * @member {Number} */ this.min_y; /** * Bounding box maximum easting or longitude for all content in table_name * @member {Number} */ this.max_x; /** * Bounding box maximum northing or latitude for all content in table_name * @member {Number} */ this.max_y; }; TileMatrixSet.prototype.setBoundingBox = function (boundingBox) { this.min_x = boundingBox.minLongitude; this.max_x = boundingBox.maxLongitude; this.min_y = boundingBox.minLatitude; this.max_y = boundingBox.maxLatitude; }; TileMatrixSet.prototype.getBoundingBox = function () { return new BoundingBox(this.min_x, this.max_x, this.min_y, this.max_y); }; TileMatrixSet.prototype.setContents = function(contents) { if (contents && contents.data_type === 'tiles') { this.table_name = contents.table_name; } } /** * Tile Matrix Set Data Access Object * @class TileMatrixSetDao * @extends {module:dao/dao~Dao} */ var TileMatrixSetDao = function(geoPackage) { Dao.call(this, geoPackage); } util.inherits(TileMatrixSetDao, Dao); TileMatrixSetDao.prototype.createObject = function () { return new TileMatrixSet(); }; /** * Get the tile table names * @param {Function} callback returns the tile table names */ TileMatrixSetDao.prototype.getTileTables = function () { var tableNames = []; for (var result of this.connection.each('select ' + TileMatrixSetDao.COLUMN_TABLE_NAME + ' from ' + TileMatrixSetDao.TABLE_NAME)) { tableNames.push(result[TileMatrixSetDao.COLUMN_TABLE_NAME]); } return tableNames; }; TileMatrixSetDao.prototype.getProjection = function (tileMatrixSet) { var srs = this.getSrs(tileMatrixSet); if (!srs) return; var srsDao = this.geoPackage.getSpatialReferenceSystemDao(); return srsDao.getProjection(srs); }; /** * Get the Spatial Reference System of the Tile Matrix set * @param {TileMatrixSet} tileMatrixSet tile matrix set */ TileMatrixSetDao.prototype.getSrs = function (tileMatrixSet) { var dao = this.geoPackage.getSpatialReferenceSystemDao(); return dao.queryForId(tileMatrixSet.srs_id); }; TileMatrixSetDao.prototype.getContents = function (tileMatrixSet) { var dao = this.geoPackage.getContentsDao(); return dao.queryForId(tileMatrixSet.table_name); }; TileMatrixSet.TABLE_NAME = "tableName"; TileMatrixSet.MIN_X = "minX"; TileMatrixSet.MIN_Y = "minY"; TileMatrixSet.MAX_X = "maxX"; TileMatrixSet.MAX_Y = "maxY"; TileMatrixSet.SRS_ID = "srsId"; TileMatrixSetDao.TABLE_NAME = "gpkg_tile_matrix_set"; TileMatrixSetDao.COLUMN_PK = "table_name"; TileMatrixSetDao.COLUMN_TABLE_NAME = "table_name"; TileMatrixSetDao.COLUMN_SRS_ID = "srs_id"; TileMatrixSetDao.COLUMN_MIN_X = "min_x"; TileMatrixSetDao.COLUMN_MIN_Y = "min_y"; TileMatrixSetDao.COLUMN_MAX_X = "max_x"; TileMatrixSetDao.COLUMN_MAX_Y = "max_y"; TileMatrixSetDao.prototype.gpkgTableName = 'gpkg_tile_matrix_set'; TileMatrixSetDao.prototype.idColumns = [TileMatrixSetDao.COLUMN_PK]; TileMatrixSetDao.prototype.columns = [TileMatrixSetDao.COLUMN_TABLE_NAME, TileMatrixSetDao.COLUMN_SRS_ID, TileMatrixSetDao.COLUMN_MIN_X, TileMatrixSetDao.COLUMN_MIN_Y, TileMatrixSetDao.COLUMN_MAX_X, TileMatrixSetDao.COLUMN_MAX_Y]; TileMatrixSetDao.prototype.columnToPropertyMap = {}; TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_TABLE_NAME] = TileMatrixSet.TABLE_NAME; TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_SRS_ID] = TileMatrixSet.SRS_ID; TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_X] = TileMatrixSet.MIN_X; TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MIN_Y] = TileMatrixSet.MIN_Y; TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_X] = TileMatrixSet.MAX_X; TileMatrixSetDao.prototype.columnToPropertyMap[TileMatrixSetDao.COLUMN_MAX_Y] = TileMatrixSet.MAX_Y; module.exports.TileMatrixSetDao = TileMatrixSetDao; module.exports.TileMatrixSet = TileMatrixSet; },{"../../boundingBox":7,"../../core/srs":9,"../../dao/dao":11,"util":343}],92:[function(require,module,exports){ var TileMatrixSetDao = require('../matrixset').TileMatrixSetDao , TileBoundingBoxUtils = require('../tileBoundingBoxUtils') , TileCreator = require('../creator') , BoundingBox = require('../../boundingBox'); var proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; var GeoPackageTileRetriever = function(tileDao, width, height) { this.tileDao = tileDao; this.tileDao.adjustTileMatrixLengths(); this.width = width; this.height = height; } module.exports = GeoPackageTileRetriever; GeoPackageTileRetriever.prototype.getWebMercatorBoundingBox = function () { if (this.setWebMercatorBoundingBox) { return this.setWebMercatorBoundingBox; } else { var tileMatrixSetDao = this.tileDao.geoPackage.getTileMatrixSetDao(); var tileMatrixSet = this.tileDao.tileMatrixSet; var srs = tileMatrixSetDao.getSrs(tileMatrixSet); this.setProjectionBoundingBox = tileMatrixSet.getBoundingBox(); if (srs.organization_coordsys_id === 4326 && srs.organization === 'EPSG') { this.setProjectionBoundingBox.minLatitude = Math.max(this.setProjectionBoundingBox.minLatitude, -85.05); this.setProjectionBoundingBox.maxLatitude = Math.min(this.setProjectionBoundingBox.maxLatitude, 85.05); } this.setWebMercatorBoundingBox = this.setProjectionBoundingBox.projectBoundingBox(this.tileDao.projection, 'EPSG:3857'); return this.setWebMercatorBoundingBox; } }; GeoPackageTileRetriever.prototype.hasTile = function (x, y, zoom) { var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom); var iterator = this.retrieveTileResults(webMercatorBoundingBox, tileMatrix); var exists = false; for (var row of iterator) { exists = true; } return exists; }; GeoPackageTileRetriever.prototype.getTile = function (x, y, zoom) { var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857'); }; GeoPackageTileRetriever.prototype.drawTileIn = function (x, y, zoom, canvas) { var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857', canvas); }; GeoPackageTileRetriever.prototype.getTileWithWgs84Bounds = function (wgs84BoundingBox, zoom) { var webMercatorBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', 'EPSG:3857'); var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857'); }; GeoPackageTileRetriever.prototype.getTileWithWgs84BoundsInProjection = function (wgs84BoundingBox, zoom, targetProjection) { var targetBoundingBox = wgs84BoundingBox.projectBoundingBox('EPSG:4326', targetProjection); return this.getTileWithBounds(targetBoundingBox, zoom, targetProjection); }; GeoPackageTileRetriever.prototype.getWebMercatorTile = function (x, y, zoom) { // need to determine the geoPackage zoom level from the web mercator zoom level var webMercatorBoundingBox = TileBoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(x, y, zoom); var gpZoom = this.determineGeoPackageZoomLevel(webMercatorBoundingBox, zoom); return this.getTileWithBounds(webMercatorBoundingBox, gpZoom, 'EPSG:3857'); }; GeoPackageTileRetriever.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) { // find width and height of this tile in geopackage projection var proj4Projection = proj4(this.tileDao.projection, 'EPSG:3857'); var ne = proj4Projection.inverse([webMercatorBoundingBox.maxLongitude, webMercatorBoundingBox.maxLatitude]); var sw = proj4Projection.inverse([webMercatorBoundingBox.minLongitude, webMercatorBoundingBox.minLatitude]); var width = (ne[0] - sw[0]); var height = (ne[1] - sw[1]); var gpZoom = undefined; // find the closest zoom for width for (var i = 0; i < this.tileDao.widths.length; i++) { var tileWidth = this.tileDao.widths[i]; var difference = Math.abs(width - tileWidth); var tolerance = .001 * tileWidth; if (tileWidth <= width || difference <= tolerance) { gpZoom = this.tileDao.maxZoom - i; } } return gpZoom; }; GeoPackageTileRetriever.prototype.getTileWithBounds = function (targetBoundingBox, zoom, targetProjection, canvas) { var tiles = []; var tileMatrix = this.tileDao.getTileMatrixWithZoomLevel(zoom); if (!tileMatrix) return Promise.resolve(); var tileWidth = tileMatrix.tile_width; var tileHeight = tileMatrix.tile_height; var matrixSetBoundsInTargetProjection = this.tileDao.tileMatrixSet.getBoundingBox().projectBoundingBox(this.tileDao.projection, targetProjection); var matrixTotalBoundingBox = this.tileDao.tileMatrixSet.getBoundingBox(); var targetBoundingBoxInMatrixSetProjection = targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection); var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(matrixTotalBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, targetBoundingBoxInMatrixSetProjection); var creator = TileCreator.initialize(this.width || tileWidth, this.height || tileHeight, tileMatrix, this.tileDao.tileMatrixSet, targetBoundingBox, this.tileDao.srs, targetProjection, canvas); var iterator = this.retrieveTileResults(targetBoundingBox.projectBoundingBox(targetProjection, this.tileDao.projection), tileMatrix); for (var tile of iterator) { tiles.push({ data: tile.getTileData(), gridColumn: tile.getTileColumn(), gridRow: tile.getRow() }); } return tiles.reduce(function(sequence, tile) { return sequence.then(function() { return creator.addTile(tile.data, tile.gridColumn, tile.gridRow); }); }, Promise.resolve()) .then(function() { if (!canvas) { return creator.getCompleteTile('png'); } }); }; GeoPackageTileRetriever.prototype.retrieveTileResults = function (tileMatrixProjectionBoundingBox, tileMatrix) { if(tileMatrix) { var tileGrid = TileBoundingBoxUtils.getTileGridWithTotalBoundingBox(this.tileDao.tileMatrixSet.getBoundingBox(), tileMatrix.matrix_width, tileMatrix.matrix_height, tileMatrixProjectionBoundingBox); return this.tileDao.queryByTileGrid(tileGrid, tileMatrix.zoom_level); } else { return Promise.resolve(); } }; },{"../../boundingBox":7,"../creator":79,"../matrixset":91,"../tileBoundingBoxUtils":93,"proj4":285}],93:[function(require,module,exports){ /** * This module exports utility functions for [slippy map (XYZ)](https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames) * tile calculations. * * @module tiles/tileBoundingBoxUtils */ const BoundingBox = require('../boundingBox'); const TileGrid = require('./tileGrid'); const proj4 = ((proj4) => { return 'default' in proj4 ? proj4['default'] : proj4 })(require('proj4')); var WEB_MERCATOR_HALF_WORLD_WIDTH = proj4('EPSG:4326', 'EPSG:3857').forward([180, 0])[0]; /** * Calculate the bounds in tile coordinates that covers the given bounding box * at the given zoom level. The result object contains the keys `minX`, `maxX`, * `minY`, and `maxY`, which are tile column and row values in the XYZ tile * scheme. * * @param {BoundingBox} webMercatorBoundingBox bounds in EPSG:3857 coordinates (meters) * @param {number} zoom the integral zoom level * @returns {{minX: number, maxX: number, minY: number, maxY: number}} bounds in tile column and row coordinates */ module.exports.webMercatorTileBox = function(webMercatorBoundingBox, zoom) { var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom); var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide); const minLonClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLongitude); const maxLonClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLongitude); const minLatClip = Math.max(-WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.minLatitude); const maxLatClip = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, webMercatorBoundingBox.maxLatitude); var minX = Math.floor((minLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize); var maxX = Math.max(0, Math.ceil((maxLonClip + WEB_MERCATOR_HALF_WORLD_WIDTH) / tileSize) - 1); var minY = Math.floor((WEB_MERCATOR_HALF_WORLD_WIDTH - maxLatClip) / tileSize); var maxY = Math.max(0, Math.ceil((WEB_MERCATOR_HALF_WORLD_WIDTH - minLatClip) / tileSize) - 1); return { minX: minX, maxX: maxX, minY: minY, maxY: maxY }; } module.exports.WEB_MERCATOR_HALF_WORLD_WIDTH = WEB_MERCATOR_HALF_WORLD_WIDTH; module.exports.determinePositionAndScale = function(geoPackageTileBoundingBox, tileHeight, tileWidth, totalBoundingBox, totalHeight, totalWidth) { var p = {}; var finalTileWidth = totalBoundingBox.maxLongitude - totalBoundingBox.minLongitude; var xoffsetMin = geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude; var xpercentageMin = xoffsetMin / finalTileWidth; var finalTileHeight = totalBoundingBox.maxLatitude - totalBoundingBox.minLatitude; var yoffsetMax = totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude; var ypercentageMax = yoffsetMax / finalTileHeight; var gpTileWidth = geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude; var gpPixelsPerUnitWidth = tileWidth / gpTileWidth; var finalTilePixelsPerUnitWidth = totalWidth / finalTileWidth; var xPositionInFinalTileUnits = ((geoPackageTileBoundingBox.minLongitude - totalBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth); var widthInFinalTileUnits = Math.round(((geoPackageTileBoundingBox.maxLongitude - geoPackageTileBoundingBox.minLongitude) * finalTilePixelsPerUnitWidth)); var gpTileHeight = geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude; var gpPixelsPerUnitHeight = tileHeight / gpTileHeight; var finalTilePixelsPerUnitHeight = totalHeight / finalTileHeight; var yPositionInFinalTileUnits = ((totalBoundingBox.maxLatitude - geoPackageTileBoundingBox.maxLatitude) * finalTilePixelsPerUnitHeight); var heightInFinalTileUnits = Math.round((geoPackageTileBoundingBox.maxLatitude - geoPackageTileBoundingBox.minLatitude) * finalTilePixelsPerUnitHeight); p.yPositionInFinalTileStart = Math.round(ypercentageMax * totalHeight); p.xPositionInFinalTileStart = Math.round(xpercentageMin * totalWidth); p.dx = p.xPositionInFinalTileStart; p.dy = p.yPositionInFinalTileStart; p.sx = 0; p.sy = 0; p.dWidth = widthInFinalTileUnits; p.dHeight = heightInFinalTileUnits; p.sWidth = tileWidth; p.sHeight = tileHeight; return p; } /** * Calculate the bounds in EPSG:3857 coordinates of the tile at the given XYZ * coordinates coordinates and zoom level. * * @param {number} x tile column * @param {number} y tile row * @param {number} zoom zoom level * @return {BoundingBox} a bounding box in EPSG:3857 meters */ module.exports.getWebMercatorBoundingBoxFromXYZ = function(x, y, zoom, options) { var tilesPerSide = module.exports.tilesPerSideWithZoom(zoom); var tileSize = module.exports.tileSizeWithTilesPerSide(tilesPerSide); var meterBuffer = 0; if (options && options.buffer && options.tileSize) { var pixelBuffer = options.buffer; var metersPerPixel = tileSize / options.tileSize; meterBuffer = metersPerPixel * pixelBuffer; } var minLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + (x * tileSize) - meterBuffer; var maxLon = (-1 * WEB_MERCATOR_HALF_WORLD_WIDTH) + ((x + 1) * tileSize) + meterBuffer; var minLat = WEB_MERCATOR_HALF_WORLD_WIDTH - ((y + 1) * tileSize) - meterBuffer; var maxLat = WEB_MERCATOR_HALF_WORLD_WIDTH - (y * tileSize) + meterBuffer; minLon = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLon); maxLon = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLon); minLat = Math.max((-1 * WEB_MERCATOR_HALF_WORLD_WIDTH), minLat); maxLat = Math.min(WEB_MERCATOR_HALF_WORLD_WIDTH, maxLat); var box = new BoundingBox(minLon, maxLon, minLat, maxLat); return box; } /** * Get the tile size in meters * * @param tilesPerSide tiles per side * * @return meters */ module.exports.tileSizeWithTilesPerSide = function(tilesPerSide) { return (2 * WEB_MERCATOR_HALF_WORLD_WIDTH) / tilesPerSide; } /** * Get the tiles per side, width and height, at the zoom level * * @param zoom zoom level * * @return tiles per side */ module.exports.tilesPerSideWithZoom = function(zoom) { return 1 << zoom; } /** * Get the tile grid * * @param webMercatorTotalBox web mercator total bounding box * @param matrixWidth matrix width * @param matrixHeight matrix height * @param boundingBox bounding box * * @return tile grid */ module.exports.getTileGridWithTotalBoundingBox = function(totalBoundingBox, matrixWidth, matrixHeight, boundingBox) { var minColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.minLongitude); var maxColumn = module.exports.getTileColumnWithTotalBoundingBox(totalBoundingBox, matrixWidth, boundingBox.maxLongitude, true); if (minColumn < matrixWidth && maxColumn >= 0) { if (minColumn < 0) { minColumn = 0; } if (maxColumn >= matrixWidth) { maxColumn = matrixWidth - 1; } } var maxRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.minLatitude, true); var minRow = module.exports.getRowWithTotalBoundingBox(totalBoundingBox, matrixHeight, boundingBox.maxLatitude); if(minRow < matrixHeight && maxRow >= 0){ if(minRow < 0){ minRow = 0; } if(maxRow >= matrixHeight){ maxRow = matrixHeight - 1; } } var tileGrid = new TileGrid(minColumn, maxColumn, minRow, maxRow); return tileGrid; } /** * Get the tile column of the longitude in degrees * * @param webMercatorTotalBox web mercator total bounding box * @param matrixWidth matrix width * @param longitude longitude * * @return tile column */ module.exports.getTileColumnWithTotalBoundingBox = function(webMercatorTotalBox, matrixWidth, longitude, max) { var minX = webMercatorTotalBox.minLongitude; var maxX = webMercatorTotalBox.maxLongitude; var tileId; if (longitude < minX) { tileId = -1; } else if (longitude >= maxX) { tileId = matrixWidth; } else { var matrixWidthMeters = maxX - minX; var tileWidth = matrixWidthMeters / matrixWidth; var tileIdDouble = ((longitude - minX) / tileWidth); tileId = ~~tileIdDouble; if (max) { // if the edge lands right on the calculated edge, subtract one if (tileIdDouble === tileId) { tileId--; } } } return tileId; } /** * Get the tile row of the latitude in degrees * * @param webMercatorTotalBox web mercator total bounding box * @param matrixHeight matrix height * @param latitude latitude * * @return tile row */ module.exports.getRowWithTotalBoundingBox = function(webMercatorTotalBox, matrixHeight, latitude, max) { var minY = webMercatorTotalBox.minLatitude; var maxY = webMercatorTotalBox.maxLatitude; var tileId; if (latitude < minY) { tileId = matrixHeight; } else if (latitude >= maxY) { tileId = -1; } else { var matrixHeightMeters = maxY - minY; var tileHeight = matrixHeightMeters / matrixHeight; var tileIdDouble = ((maxY - latitude) / tileHeight); tileId = ~~tileIdDouble; if (max) { // if the edge lands right on the calculated edge, add one if (tileIdDouble === tileId) { tileId--; } } } return tileId; } /** * Get the web mercator bounding box of the tile column and row in the tile * matrix using the total bounding box * * @param webMercatorTotalBox web mercator total bounding box * @param tileMatrix tile matrix * @param tileColumn tile column * @param tileRow tile row * * @return web mercator bounding box */ module.exports.getTileBoundingBox = function(box, tileMatrix, tileColumn, tileRow) { var tileMatrixWidth = tileMatrix.matrix_width; var tileMatrixHeight = tileMatrix.matrix_height; var tileGrid = new TileGrid(tileColumn, tileColumn, tileRow, tileRow); var matrixMinX = box.minLongitude; var matrixMaxX = box.maxLongitude; var matrixWidth = matrixMaxX - matrixMinX; var tileWidth = matrixWidth / tileMatrixWidth; // Find the longitude range var minLon = matrixMinX + (tileWidth * tileGrid.min_x); var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x)); // Get the tile height var matrixMinY = box.minLatitude; var matrixMaxY = box.maxLatitude; var matrixHeight = matrixMaxY - matrixMinY; var tileHeight = matrixHeight / tileMatrixHeight; // Find the latitude range var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y); var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y)); return new BoundingBox(minLon, maxLon, minLat, maxLat); } module.exports.getTileGridBoundingBox = function(matrixSetBoundingBox, tileMatrixWidth, tileMatrixHeight, tileGrid) { // Get the tile width var matrixMinX = matrixSetBoundingBox.minLongitude; var matrixMaxX = matrixSetBoundingBox.maxLongitude; var matrixWidth = matrixMaxX - matrixMinX; var tileWidth = matrixWidth / tileMatrixWidth; // Find the longitude range var minLon = matrixMinX + (tileWidth * tileGrid.min_x); var maxLon = minLon + (tileWidth * (tileGrid.max_x + 1 - tileGrid.min_x)); // Get the tile height var matrixMinY = matrixSetBoundingBox.minLatitude; var matrixMaxY = matrixSetBoundingBox.maxLatitude; var matrixHeight = matrixMaxY - matrixMinY; var tileHeight = matrixHeight / tileMatrixHeight; // Find the latitude range var maxLat = matrixMaxY - (tileHeight * tileGrid.min_y); var minLat = maxLat - (tileHeight * (tileGrid.max_y + 1 - tileGrid.min_y)); return new BoundingBox(minLon, maxLon, minLat, maxLat); } module.exports.getXPixel = function(width, boundingBox, longitude) { var boxWidth = boundingBox.maxLongitude - boundingBox.minLongitude; var offset = longitude - boundingBox.minLongitude; var percentage = offset / boxWidth; return percentage * width; } module.exports.getLongitudeFromPixel = function(width, boundingBox, tileBoundingBox, pixel) { var boxWidth = tileBoundingBox.maxLongitude - tileBoundingBox.minLongitude; var percentage = pixel / width; var offset = percentage * boxWidth; return offset + boundingBox.minLongitude; } module.exports.getYPixel = function(height, boundingBox, latitude) { var boxHeight = boundingBox.maxLatitude - boundingBox.minLatitude; var offset = boundingBox.maxLatitude - latitude; var percentage = offset / boxHeight; return percentage * height; } module.exports.getLatitudeFromPixel = function(height, boundingBox, tileBoundingBox, pixel) { var boxHeight = tileBoundingBox.maxLatitude - tileBoundingBox.minLatitude; var percentage = pixel / height; var offset = percentage * boxHeight; return boundingBox.maxLatitude - offset; } },{"../boundingBox":7,"./tileGrid":94,"proj4":285}],94:[function(require,module,exports){ /** * Tile grid with x and y ranges * @module tiles/tileGrid * @class */ var TileGrid = function(minX, maxX, minY, maxY) { this.min_x = minX; this.max_x = maxX; this.min_y = minY; this.max_y = maxY; } TileGrid.prototype.count = function () { return ((this.max_x + 1) - this.min_x) * ((this.max_y + 1) - this.min_y); }; TileGrid.prototype.equals = function (tileGrid) { if (!tileGrid) return false; return this.min_x === tileGrid.min_x && this.max_x === tileGrid.max_x && this.min_y === tileGrid.min_y && this.max_y === tileGrid.max_y; }; module.exports = TileGrid; },{}],95:[function(require,module,exports){ /** * @module tiles/user/tileColumn */ const UserColumn = require('../../user/userColumn'); const DataTypes = require('../../db/dataTypes'); const util = require('util'); /** * `TileColumn` models columns in [user tile pyramid tables]{@link module:tiles/user/tileTable~TileTable}. * * @class * @extends {module:user/userColumn~UserColumn} */ var TileColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) { UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey); if (dataType === DataTypes.GPKG_DT_GEOMETRY) { throw new Error('Data Type is required to create column: ' + name); } } util.inherits(TileColumn, UserColumn); /** * Create an id column * @param {number} index Index */ TileColumn.createIdColumn = function(index) { return new TileColumn(index, TileColumn.COLUMN_ID, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, false, null, true); } /** * Create a zoom level column * @param {number} index Index */ TileColumn.createZoomLevelColumn = function(index) { return new TileColumn(index, TileColumn.COLUMN_ZOOM_LEVEL, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false); } /** * Create a tile column column * * @param {number} index column index */ TileColumn.createTileColumnColumn = function(index) { return new TileColumn(index, TileColumn.COLUMN_TILE_COLUMN, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false); } /** * Create a tile row column * * @param {number} index column index * */ TileColumn.createTileRowColumn = function(index) { return new TileColumn(index, TileColumn.COLUMN_TILE_ROW, DataTypes.GPKGDataType.GPKG_DT_INTEGER, null, true, null, false); } /** * Create a tile data column * * @param {number} index column index */ TileColumn.createTileDataColumn = function(index) { return new TileColumn(index, TileColumn.COLUMN_TILE_DATA, DataTypes.GPKGDataType.GPKG_DT_BLOB, null, true, null, false); } TileColumn.COLUMN_ID = "id"; TileColumn.COLUMN_ZOOM_LEVEL = "zoom_level"; TileColumn.COLUMN_TILE_COLUMN = "tile_column"; TileColumn.COLUMN_TILE_ROW = "tile_row"; TileColumn.COLUMN_TILE_DATA = "tile_data"; module.exports = TileColumn; },{"../../db/dataTypes":14,"../../user/userColumn":105,"util":343}],96:[function(require,module,exports){ /** * tileDao module. * @module tiles/user/tileDao */ var UserDao = require('../../user/userDao') , TileGrid = require('../tileGrid') , TileRow = require('./tileRow') , TileMatrixSetDao = require('../matrixset').TileMatrixSetDao , TileMatrixDao = require('../matrix').TileMatrixDao , ContentsDao = require('../../core/contents').ContentsDao , BoundingBox = require('../../boundingBox') , BoundingBoxUtils = require('../tileBoundingBoxUtils') , BoundingBox = require('../../boundingBox') , ColumnValues = require('../../dao/columnValues') , TileColumn = require('./tileColumn') , TileDaoUtils = require('./tileDaoUtils'); var util = require('util') , proj4 = require('proj4'); proj4 = 'default' in proj4 ? proj4['default'] : proj4; /** * `TileDao` is a {@link module:dao/dao~Dao} subclass for reading * [user tile tables]{@link module:tiles/user/tileTable~TileTable}. * * @class TileDao * @extends {module:user/userDao~UserDao} * @param {GeoPackageConnection} connection * @param {TileTable} table * @param {TileMatrixSet} tileMatrixSet * @param {TileMatrix[]} tileMatrices */ var TileDao = function(geoPackage, table, tileMatrixSet, tileMatrices) { UserDao.call(this, geoPackage, table); this.tileMatrixSet = tileMatrixSet; this.tileMatrices = tileMatrices; this.zoomLevelToTileMatrix = []; this.widths = []; this.heights = []; if (tileMatrices.length === 0) { this.minZoom = 0; this.maxZoom = 0; } else { this.minZoom = this.tileMatrices[0].zoom_level; this.maxZoom = this.tileMatrices[this.tileMatrices.length-1].zoom_level; } // Populate the zoom level to tile matrix and the sorted tile widths and heights for (var i = this.tileMatrices.length-1; i >= 0; i--) { var tileMatrix = this.tileMatrices[i]; this.zoomLevelToTileMatrix[tileMatrix.zoom_level] = tileMatrix; } this.initialize(); } util.inherits(TileDao, UserDao); TileDao.prototype.initialize = function() { var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao(); this.srs = tileMatrixSetDao.getSrs(this.tileMatrixSet); this.projection = this.srs.organization.toUpperCase() + ':' + this.srs.organization_coordsys_id; // Populate the zoom level to tile matrix and the sorted tile widths and heights for (var i = this.tileMatrices.length-1; i >= 0; i--) { var tileMatrix = this.tileMatrices[i]; var width = tileMatrix.pixel_x_size * tileMatrix.tile_width; var height = tileMatrix.pixel_y_size * tileMatrix.tile_height; var proj4Projection = proj4(this.projection); if (proj4Projection.to_meter) { width = proj4Projection.to_meter * tileMatrix.pixel_x_size * tileMatrix.tile_width; height = proj4Projection.to_meter * tileMatrix.pixel_y_size * tileMatrix.tile_height; } this.widths.push(width); this.heights.push(height); } this.setWebMapZoomLevels(); } TileDao.prototype.webZoomToGeoPackageZoom = function(webZoom) { var webMercatorBoundingBox = BoundingBoxUtils.getWebMercatorBoundingBoxFromXYZ(0, 0, webZoom); return this.determineGeoPackageZoomLevel(webMercatorBoundingBox, webZoom); } TileDao.prototype.setWebMapZoomLevels = function() { this.minWebMapZoom = 20; this.maxWebMapZoom = 0; this.webZoomToGeoPackageZooms = {}; var totalTileWidth = this.tileMatrixSet.max_x - this.tileMatrixSet.min_x; var totalTileHeight = this.tileMatrixSet.max_y - this.tileMatrixSet.min_y; for (var i = 0; i < this.tileMatrices.length; i++) { var tileMatrix = this.tileMatrices[i]; var singleTileWidth = totalTileWidth / tileMatrix.matrix_width; var singleTileHeight = totalTileHeight / tileMatrix.matrix_height; var tileBox = new BoundingBox(this.tileMatrixSet.min_x, this.tileMatrixSet.min_x + singleTileWidth, this.tileMatrixSet.min_y, this.tileMatrixSet.min_y + singleTileHeight); var proj4Projection = proj4(this.projection, 'EPSG:4326'); var ne = proj4Projection.forward([tileBox.maxLongitude, tileBox.maxLatitude]); var sw = proj4Projection.forward([tileBox.minLongitude, tileBox.minLatitude]); var width = (ne[0] - sw[0]); var height = (ne[1] - sw[1]); var zoom = Math.ceil(Math.log2(360/width)); if (this.minWebMapZoom > zoom) { this.minWebMapZoom = zoom; } if (this.maxWebMapZoom < zoom) { this.maxWebMapZoom = zoom; } this.webZoomToGeoPackageZooms[zoom] = tileMatrix.zoom_level; } } TileDao.prototype.determineGeoPackageZoomLevel = function(webMercatorBoundingBox, zoom) { return this.webZoomToGeoPackageZooms[zoom]; }; /** * Get the bounding box of tiles at the zoom level * @param {Number} zoomLevel zoom level * @return {BoundingBox} bounding box of the zoom level, or null if no tiles */ TileDao.prototype.getBoundingBoxWithZoomLevel = function (zoomLevel) { var boundingBox; var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel); if (tileMatrix) { var tileGrid = this.queryForTileGridWithZoomLevel(zoomLevel); if (tileGrid) { var matrixSetBoundingBox = this.getBoundingBox(); boundingBox = BoundingBoxUtils.getTileGridBoundingBox(matrixSetBoundingBox, tileMatrix.matrix_width, tileMatrix.matrix_height, tileGrid); } return boundingBox; } else { return boundingBox; } }; TileDao.prototype.getBoundingBox = function () { return this.tileMatrixSet.getBoundingBox(); }; TileDao.prototype.queryForTileGridWithZoomLevel = function (zoomLevel) { var where = this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); var whereArgs = this.buildWhereArgs(zoomLevel); var minX = this.minOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs); var maxX = this.maxOfColumn(TileColumn.COLUMN_TILE_COLUMN, where, whereArgs); var minY = this.minOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs); var maxY = this.maxOfColumn(TileColumn.COLUMN_TILE_ROW, where, whereArgs); var tileGrid; if (minX != null && minY != null && maxX != null && maxY != null) { tileGrid = new TileGrid(minX, maxX, minY, maxY); } return tileGrid; }; /** * Get the tile grid of the zoom level * @param {Number} zoomLevel zoom level * @return {TileGrid} tile grid at zoom level, null if no tile matrix at zoom level */ TileDao.prototype.getTileGridWithZoomLevel = function (zoomLevel) { var tileGrid; var tileMatrix = this.getTileMatrixWithZoomLevel(zoomLevel); if (tileMatrix) { tileGrid = new TileGrid(0, ~~tileMatrix.matrix_width - 1, 0, ~~tileMatrix.matrix_height - 1); } return tileGrid; }; /** * get the tile table * @return {TileTable} tile table */ TileDao.prototype.getTileTable = function () { return this.table; }; /** * Create a new tile row with the column types and values * @param {Array} columnTypes column types * @param {Array} values values * @return {TileRow} tile row */ TileDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new TileRow(this.getTileTable(), columnTypes, values); }; /** * Create a new tile row * @return {TileRow} tile row */ TileDao.prototype.newRow = function () { return new TileRow(this.getTileTable()); }; /** * Adjust the tile matrix lengths if needed. Check if the tile matrix width * and height need to expand to account for pixel * number of pixels fitting * into the tile matrix lengths */ TileDao.prototype.adjustTileMatrixLengths = function () { TileDaoUtils.adjustTileMatrixLengths(this.tileMatrixSet, this.tileMatrices); }; /** * Get the tile matrix at the zoom level * @param {Number} zoomLevel zoom level * @return {TileMatrix} tile matrix */ TileDao.prototype.getTileMatrixWithZoomLevel = function (zoomLevel) { return this.zoomLevelToTileMatrix[zoomLevel]; }; /** * Query for a tile * @param {Number} column column * @param {Number} row row * @param {Number} zoomLevel zoom level * @param {Function} callback called with an error if one occurred and the TileDao */ TileDao.prototype.queryForTile = function (column, row, zoomLevel) { var fieldValues = new ColumnValues(); fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column); fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row); fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); var tileRow; for (var row of this.queryForFieldValues(fieldValues)) { tileRow = this.getRow(row); } return tileRow; }; TileDao.prototype.queryForTilesWithZoomLevel = function (zoomLevel, tileCallback) { var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { return { value: thisgetRow(nextRow.value), done: false }; } return { done: true } }.bind(this) } }; /** * Query for Tiles at a zoom level in descending row and column order * @param {Number} zoomLevel zoom level * @param {Function} tileCallback callback for each tile * @param {Function} doneCallback called when all tiles are retrieved */ TileDao.prototype.queryForTilesDescending = function (zoomLevel, tileCallback) { var iterator = this.queryForEach(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel, undefined, undefined, TileColumn.COLUMN_TILE_COLUMN + ' DESC, ' + TileColumn.COLUMN_TILE_ROW + ', DESC'); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { return { value: thisgetRow(nextRow.value), done: false }; } return { done: true } }.bind(this) }; }; /** * Query for tiles at a zoom level and column * @param {Number} column column * @param {Number} zoomLevel zoom level * @param {Function} tileCallback called for each tile * @param {Function} doneCallback called when all tiles have been retrieved */ TileDao.prototype.queryForTilesInColumn = function (column, zoomLevel, tileCallback) { var fieldValues = new ColumnValues(); fieldValues.addColumn(TileColumn.COLUMN_TILE_COLUMN, column); fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); var iterator = this.queryForFieldValues(fieldValues); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var tileRow = thisgetRow(nextRow.value); return { value: tileRow, done: false }; } else { return { done: true } } } } }; /** * Query for tiles at a zoom level and row * @param {Number} row row * @param {Number} zoomLevel zoom level * @param {Function} tileCallback called for each tile * @param {Function} doneCallback called when all tiles have been retrieved */ TileDao.prototype.queryForTilesInRow = function (row, zoomLevel, tileCallback, doneCallback) { var fieldValues = new ColumnValues(); fieldValues.addColumn(TileColumn.COLUMN_TILE_ROW, row); fieldValues.addColumn(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); var iterator = this.queryForFieldValues(fieldValues); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var tileRow = thisgetRow(nextRow.value); return { value: tileRow, done: false }; } else { return { done: true } } } } }; /** * Query by tile grid and zoom level * @param {TileGrid} tileGrid tile grid * @param {Number} zoomLevel zoom level * @param {Function} tileCallback called for each tile * @param {Function} doneCallback called when all tiles have been retrieved */ TileDao.prototype.queryByTileGrid = function (tileGrid, zoomLevel) { if (!tileGrid) return doneCallback(); var tileCount = 0; var x = tileGrid.min_x; var where = ''; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); where += ' and '; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.min_x, '>='); where += ' and '; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, tileGrid.max_x, '<='); where += ' and '; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.min_y, '>='); where += ' and '; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, tileGrid.max_y, '<='); var whereArgs = this.buildWhereArgs([zoomLevel, tileGrid.min_x, tileGrid.max_x, tileGrid.min_y, tileGrid.max_y]); var iterator = this.queryWhereWithArgsDistinct(where, whereArgs); var thisgetRow = this.getRow.bind(this); return { [Symbol.iterator]() { return this; }, next: function() { var nextRow = iterator.next(); if (!nextRow.done) { var tileRow = thisgetRow(nextRow.value); return { value: tileRow, done: false }; } else { return { done: true } } } } }; TileDao.prototype.deleteTile = function(column, row, zoomLevel) { var where = ''; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_ZOOM_LEVEL, zoomLevel); where += ' and '; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_COLUMN, column); where += ' and '; where += this.buildWhereWithFieldAndValue(TileColumn.COLUMN_TILE_ROW, row); var whereArgs = this.buildWhereArgs([zoomLevel, column, row]); return this.deleteWhere(where, whereArgs); }; TileDao.prototype.getSrs = function() { return this.geoPackage.getContentsDao().getSrs(this.tileMatrixSet); }; TileDao.prototype.dropTable = function() { var tileMatrixDao = this.geoPackage.getTileMatrixDao(); var dropResult = UserDao.prototype.dropTable.call(this); var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao(); tileMatrixSetDao.delete(this.tileMatrixSet); for (var i = this.tileMatrices.length-1; i >= 0; i--) { var tileMatrix = this.tileMatrices[i]; tileMatrixDao.delete(tileMatrix); } var dao = this.geoPackage.getContentsDao(); dao.deleteById(this.gpkgTableName); return dropResult; } TileDao.prototype.rename = function(newName) { UserDao.prototype.rename.call(this, newName); var oldName = this.tileMatrixSet.table_name; var values = {}; values[TileMatrixSetDao.COLUMN_TABLE_NAME] = newName; var where = this.buildWhereWithFieldAndValue(TileMatrixSetDao.COLUMN_TABLE_NAME, oldName); var whereArgs = this.buildWhereArgs([oldName]); var contentsDao = this.geoPackage.getContentsDao(); var contents = contentsDao.queryForId(oldName); contents.table_name = newName; contents.identifier = newName; contentsDao.create(contents); var tileMatrixSetDao = this.geoPackage.getTileMatrixSetDao(); tileMatrixSetDao.updateWithValues(values, where, whereArgs); var tileMatrixDao = this.geoPackage.getTileMatrixDao(); var tileMatrixUpdate = {}; tileMatrixUpdate[TileMatrixDao.COLUMN_TABLE_NAME] = newName; var tileMatrixWhere = this.buildWhereWithFieldAndValue(TileMatrixDao.COLUMN_TABLE_NAME, oldName); tileMatrixDao.updateWithValues(tileMatrixUpdate, tileMatrixWhere, whereArgs); contentsDao.deleteById(oldName); } module.exports = TileDao; },{"../../boundingBox":7,"../../core/contents":8,"../../dao/columnValues":10,"../../user/userDao":106,"../matrix":90,"../matrixset":91,"../tileBoundingBoxUtils":93,"../tileGrid":94,"./tileColumn":95,"./tileDaoUtils":97,"./tileRow":98,"proj4":285,"util":343}],97:[function(require,module,exports){ module.exports.adjustTileMatrixLengths = function(tileMatrixSet, tileMatrices) { var tileMatrixWidth = tileMatrixSet.maxX - tileMatrixSet.minX; var tileMatrixHeight = tileMatrixSet.maxY - tileMatrixSet.minY; for (var i = 0; i < tileMatrices.length; i++) { var tileMatrix = tileMatrices[i]; var tempMatrixWidth = ~~((tileMatrixWidth / (tileMatrix.pixelXSize * ~~tileMatrix.tileWidth))); var tempMatrixHeight = ~~((tileMatrixHeight / (tileMatrix.pixelYSize * ~~(tileMatrix.tileHeight)))); if(tempMatrixWidth > ~~(tileMatrix.matrixWidth)) { tileMatrix.matrixWidth = ~~(tempMatrixWidth); } if (tempMatrixHeight > ~~(tileMatrix.matrixHeight)) { tileMatrix.matrixHeight = ~~(tempMatrixHeight); } } } },{}],98:[function(require,module,exports){ /** * tileRow module. * @module tiles/user/tileRow */ var UserRow = require('../../user/userRow'); var util = require('util'); /** * Tile Row containing the values from a single result set row * @param {TileTable} tileTable tile table * @param {Array} columnTypes column types * @param {Array} values values */ var TileRow = function(tileTable, columnTypes, values) { UserRow.call(this, tileTable, columnTypes, values); this.tileTable = tileTable; } util.inherits(TileRow, UserRow); TileRow.prototype.toObjectValue = function (value) { return value; }; TileRow.prototype.toDatabaseValue = function (columnName) { return this.getValueWithColumnName(columnName); }; /** * Get the zoom level column index * @return {Number} zoom level column index */ TileRow.prototype.getZoomLevelColumnIndex = function () { return this.tileTable.zoomLevelIndex; }; /** * Get the zoom level column * @return {TileColumn} zoom level column */ TileRow.prototype.getZoomLevelColumn = function() { return this.tileTable.getZoomLevelColumn(); } /** * Get the zoom level * @return {Number} zoom level */ TileRow.prototype.getZoomLevel = function () { return this.getValueWithColumnName(this.getZoomLevelColumn().name); }; /** * Set the zoom level * @param {Number} zoomLevel zoom level */ TileRow.prototype.setZoomLevel = function (zoomLevel) { this.setValueWithIndex(this.getZoomLevelColumnIndex(), zoomLevel); }; /** * Get the tile column column Index * @return {number} tile column column index */ TileRow.prototype.getTileColumnColumnIndex = function () { return this.tileTable.tileColumnIndex; }; /** * Get the tile column column * @return {TileColumn} tile column column */ TileRow.prototype.getTileColumnColumn = function () { return this.tileTable.getTileColumnColumn(); }; /** * Get the tile column * @return {Number} tile column */ TileRow.prototype.getTileColumn = function () { return this.getValueWithColumnName(this.getTileColumnColumn().name); }; /** * Set the tile column * @param {number} tileColumn tile column */ TileRow.prototype.setTileColumn = function (tileColumn) { this.setValueWithColumnName(this.getTileColumnColumn().name, tileColumn); }; /** * Get the tile row column index * @return {Number} tile row column index */ TileRow.prototype.getRowColumnIndex = function () { return this.tileTable.tileRowIndex; }; /** * Get the tile row column * @return {TileColumn} tile row column */ TileRow.prototype.getRowColumn = function () { return this.tileTable.getRowColumn(); }; /** * Get the tile row * @return {Number} tile row */ TileRow.prototype.getRow = function () { return this.getValueWithColumnName(this.getRowColumn().name); }; /** * Set the tile row * @param {Number} tileRow tile row */ TileRow.prototype.setTileRow = function (tileRow) { this.setValueWithColumnName(this.getRowColumn().name, tileRow); }; /** * Get the tile data column index * @return {Number} tile data column index */ TileRow.prototype.getTileDataColumnIndex = function () { return this.tileTable.tileDataIndex; }; /** * Get the tile data column * @return {TileColumn} tile data column */ TileRow.prototype.getTileDataColumn = function () { return this.tileTable.getTileDataColumn(); }; /** * Get the tile data * @return {Buffer} tile data */ TileRow.prototype.getTileData = function () { return this.getValueWithColumnName(this.getTileDataColumn().name); }; /** * Set the tile data * @param {Buffer} tileData tile data */ TileRow.prototype.setTileData = function (tileData) { this.setValueWithColumnName(this.getTileDataColumn().name, tileData); }; /** * Get the tile data as an image * @return {image} tile image */ TileRow.prototype.getTileDataImage = function () { // TODO }; // /** // * Get the tile data as a scaled image // * // * @param scale scale, 0.0 to 1.0 // * // * @return tile image // */ // -(UIImage *) getTileDataImageWithScale: (CGFloat) scale; // // /** // * Set the tile data with an image // * // * @param image image // * @param format image format // */ // -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format; // // /** // * Set the tile data with an image // * // * @param image image // * @param format image format // * @param quality compression quality, 0.0 to 1.0, used only for GPKG_CF_JPEG // */ // -(void) setTileDataWithImage: (UIImage *) image andFormat: (enum GPKGCompressFormat) format andQuality: (CGFloat) quality; module.exports = TileRow; },{"../../user/userRow":107,"util":343}],99:[function(require,module,exports){ /** * @module tiles/user/tileTable */ const UserTable = require('../../user/userTable'); const TileColumn = require('./tileColumn'); const util = require('util'); /** * `TileTable` models [tile pyramid user tables](https://www.geopackage.org/spec121/index.html#tiles_user_tables). * * @class * @extends {module:user/userTable~UserTable} * @param {string} tableName * @param {module:tiles/user/tileColumn~TileColumn[]} columns */ var TileTable = module.exports = function(tableName, columns) { UserTable.call(this, tableName, columns); var zoomLevel; var tileColumn; var tileRow; var tileData; var uniqueColumns = []; for (var i = 0; i < columns.length; i++) { var column = columns[i]; var columnName = column.name; var columnIndex = column.index; switch(columnName) { case TileColumn.COLUMN_ZOOM_LEVEL: this.duplicateCheck(columnIndex, zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL); zoomLevel = columnIndex; uniqueColumns.push(column); break; case TileColumn.COLUMN_TILE_COLUMN: this.duplicateCheck(columnIndex, tileColumn, TileColumn.COLUMN_TILE_COLUMN); tileColumn = columnIndex; uniqueColumns.push(column); break; case TileColumn.COLUMN_TILE_ROW: this.duplicateCheck(columnIndex, tileRow, TileColumn.COLUMN_TILE_ROW); tileRow = columnIndex; uniqueColumns.push(column); break; case TileColumn.COLUMN_TILE_DATA: this.duplicateCheck(columnIndex, tileData, TileColumn.COLUMN_TILE_DATA); tileData = columnIndex; break; } } this.uniqueConstraints = [{columns: uniqueColumns}]; this.missingCheck(zoomLevel, TileColumn.COLUMN_ZOOM_LEVEL); this.zoomLevelIndex = zoomLevel; this.missingCheck(tileColumn, TileColumn.COLUMN_TILE_COLUMN); this.tileColumnIndex = tileColumn; this.missingCheck(tileRow, TileColumn.COLUMN_TILE_ROW); this.tileRowIndex = tileRow; this.missingCheck(tileData, TileColumn.COLUMN_TILE_DATA); this.tileDataIndex = tileData; } util.inherits(TileTable, UserTable); TileTable.prototype.getZoomLevelColumn = function() { return this.getColumnWithIndex(this.zoomLevelIndex); }; TileTable.prototype.getTileColumnColumn = function() { return this.getColumnWithIndex(this.tileColumnIndex); }; TileTable.prototype.getRowColumn = function() { return this.getColumnWithIndex(this.tileRowIndex); }; TileTable.prototype.getTileDataColumn = function() { return this.getColumnWithIndex(this.tileDataIndex); }; TileTable.prototype.getTableType = function() { return UserTable.TILE_TABLE; } TileTable.createRequiredColumns = function() { return TileTable.createRequiredColumnsWithStartingIndex(0); } TileTable.createRequiredColumnsWithStartingIndex = function(startingIndex) { var columns = []; columns.push(TileColumn.createIdColumn(startingIndex++)); columns.push(TileColumn.createZoomLevelColumn(startingIndex++)); columns.push(TileColumn.createTileColumnColumn(startingIndex++)); columns.push(TileColumn.createTileRowColumn(startingIndex++)); columns.push(TileColumn.createTileDataColumn(startingIndex++)); return columns; } },{"../../user/userTable":108,"./tileColumn":95,"util":343}],100:[function(require,module,exports){ /** * tileTableReader module. * @module tiles/user/tileTableReader */ var UserTableReader = require('../../user/userTableReader') , DataTypes = require('../../db/dataTypes') , TileMatrixSet = require('../matrixset').TileMatrixSet , TileTable = require('./tileTable') , TileColumn = require('./tileColumn'); var util = require('util'); /** * Reads the metadata from an existing tile table * @class TileTableReader * @extends {module:user~UserTableReader} */ var TileTableReader = function(tileMatrixSet) { UserTableReader.call(this, tileMatrixSet.table_name); this.tileMatrixSet = tileMatrixSet; } util.inherits(TileTableReader, UserTableReader); TileTableReader.prototype.readTileTable = function (geoPackage) { return this.readTable(geoPackage.getDatabase()); }; TileTableReader.prototype.createTable = function (tableName, columns) { return new TileTable(tableName, columns); }; TileTableReader.prototype.createColumnWithResults = function (results, index, name, type, max, notNull, defaultValueIndex, primaryKey) { var dataType = DataTypes.fromName(type); var defaultValue = undefined; if (defaultValueIndex) { // console.log('default value index', defaultValueIndex); // console.log('result', results); } var column = new TileColumn(index, name, dataType, max, notNull, defaultValue, primaryKey); return column; }; /** * The TileTableReader * @type {TileTableReader} */ module.exports = TileTableReader; },{"../../db/dataTypes":14,"../../user/userTableReader":109,"../matrixset":91,"./tileColumn":95,"./tileTable":99,"util":343}],101:[function(require,module,exports){ /** * @module user/custom */ var util = require('util'); var UserColumn = require('../userColumn') , DataTypes = require('../../db/dataTypes') /** * Create a new user custom columnd * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} dataType data type * @param {Number} max max value * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * @param {Boolean} primaryKey primary key */ var UserCustomColumn = function(index, name, dataType, max, notNull, defaultValue, primaryKey) { UserColumn.call(this, index, name, dataType, max, notNull, defaultValue, primaryKey); if (dataType == null) { throw new Error('Data type is required to create column: ' + name); } } util.inherits(UserCustomColumn, UserColumn); /** * Create a new column * * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} type data type * @param {Number} max max value * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * * @return {module:user/custom~UserCustomColumn} created column */ UserCustomColumn.createColumn = function(index, name, dataType, max, notNull, defaultValue) { return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, false); } module.exports = UserCustomColumn; },{"../../db/dataTypes":14,"../userColumn":105,"util":343}],102:[function(require,module,exports){ /** * @module user/custom */ var util = require('util'); var UserDao = require('../userDao') , UserRow = require('../userRow') , UserCustomTableReader = require('./userCustomTableReader'); /** * User Custom Dao * @class * @extends module:user/userDao~UserDao * @param {module:geoPackage~GeoPackage} geoPackage geopackage object * @param {module:user/custom~UserCustomTable} userCustomTable user custom table */ var UserCustomDao = function(geoPackage, userCustomTable) { UserDao.call(this, geoPackage, userCustomTable); } util.inherits(UserCustomDao, UserDao); /** * Create a new UserRow * @return {module:user/userRow~UserRow} */ UserCustomDao.prototype.newRow = function() { return new UserRow(this.table); } /** * Reads the table specified from the geopackage * @param {module:geoPackage~GeoPackage} geoPackage geopackage object * @param {string} tableName table name * @param {string[]} requiredColumns required columns * @return {module:user/custom~UserCustomDao} */ UserCustomDao.readTable = function(geoPackage, tableName, requiredColumns) { var reader = new UserCustomTableReader(tableName, requiredColumns); var userCustomTable = reader.readTable(geoPackage.getDatabase()); return new UserCustomDao(geoPackage, userCustomTable); } module.exports = UserCustomDao; },{"../userDao":106,"../userRow":107,"./userCustomTableReader":104,"util":343}],103:[function(require,module,exports){ /** * @module user/custom */ var util = require('util'); var UserTable = require('../userTable'); /** * Create a new user custom table * @class * @extends module:user/userTable~UserTable * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns user columns * @param {string[]} requiredColumns required columns */ var UserCustomTable = function(tableName, columns, requiredColumns) { UserTable.call(this, tableName, columns); if (requiredColumns && requiredColumns.length) { var found = {}; for (var i = 0; i < columns.length; i++) { var column = columns[i]; if (requiredColumns.indexOf(column.name) !== -1) { var previousIndex = found[column.name]; this.duplicateCheck(column.index, previousIndex, column.name); found[column.name] = column.index; } } for (var i = 0; i < requiredColumns.length; i++) { this.missingCheck(found[requiredColumns[i]], requiredColumns); } } } util.inherits(UserCustomTable, UserTable); module.exports = UserCustomTable; },{"../userTable":108,"util":343}],104:[function(require,module,exports){ /** * @module user/custom */ var util = require('util'); var UserTableReader = require('../userTableReader') , DataTypes = require('../../db/dataTypes') , UserCustomColumn = require('./userCustomColumn') , UserCustomTable = require('./userCustomTable'); /** * User custom table reader * @class * @extends module:user/userTableReader~UserTableReader * @param {string} tableName table name * @param {string[]} requiredColumns required columns */ var UserCustomTableReader = function(tableName, requiredColumns) { UserTableReader.call(this, tableName, requiredColumns); } util.inherits(UserCustomTableReader, UserTableReader); /** * Creates user custom column * @param {string} tableName table name * @param {module:user/userCustom~UserCustomColumn[]} columnList columns * @param {string[]} requiredColumns required columns * @return {module:user/userCustom~UserCustomTable} */ UserCustomTableReader.prototype.createTable = function(tableName, columnList, requiredColumns) { return new UserCustomTable(tableName, columnList, requiredColumns); } /** * Creates a user custom column * @param {Object} result * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} type data type * @param {Number} max max value * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * @param {Boolean} primaryKey primary key * @return {module:user/custom~UserCustomColumn} */ UserCustomTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) { var dataType = DataTypes.fromName(type); return new UserCustomColumn(index, name, dataType, max, notNull, defaultValue, primaryKey); } module.exports = UserCustomTableReader; },{"../../db/dataTypes":14,"../userTableReader":109,"./userCustomColumn":101,"./userCustomTable":103,"util":343}],105:[function(require,module,exports){ /** * @module user/userColumn */ var DataTypes = require('../db/dataTypes'); /** * A `UserColumn` is meta-data about a single column from a {@link module:/user/userTable~UserTable}. * * @class * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} dataType data type of the column * @param {?Number} max max value * @param {Boolean} notNull not null * @param {?Object} defaultValue default value or null * @param {Boolean} primaryKey `true` if this column is part of the table's primary key */ function UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey) { this.index = index; this.name = name; this.dataType = dataType; this.max = max; this.notNull = notNull; this.defaultValue = defaultValue; this.primaryKey = primaryKey; this.validateMax(); } /** * Gets the type name * @return {module:db/dataTypes~GPKGDataType} */ UserColumn.prototype.getTypeName = function () { var type = undefined; if (this.dataType !== DataTypes.GPKGDataType.GPKG_DT_GEOMETRY) { type = DataTypes.name(this.dataType); } return type; }; /** * Validate that if max is set, the data type is text or blob */ UserColumn.prototype.validateMax = function () { if(this.max && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_TEXT && this.dataType !== DataTypes.GPKGDataType.GPKG_DT_BLOB) { throw new Error('Column max is only supported for TEXT and BLOB columns. column: ' + this.name + ', max: ' + this.max + ', type: ' + this.dataType) } }; /** * Create a new primary key column * * @param {Number} index column index * @param {string} name column name * * @return {module:user/userColumn~UserColumn} created column */ UserColumn.createPrimaryKeyColumnWithIndexAndName = function(index, name) { return new UserColumn(index, name, DataTypes.GPKGDataType.GPKG_DT_INTEGER, undefined, true, undefined, true); } /** * Create a new column * * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} type data type * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * * @return {module:user/userColumn~UserColumn} created column */ UserColumn.createColumnWithIndex = function(index, name, type, notNull, defaultValue) { return UserColumn.createColumnWithIndexAndMax(index, name, type, undefined, notNull, defaultValue); } /** * Create a new column * * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} type data type * @param {Number} max max value * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * * @return {module:user/userColumn~UserColumn} created column */ UserColumn.createColumnWithIndexAndMax = function(index, name, type, max, notNull, defaultValue) { return new UserColumn(index, name, type, max, notNull, defaultValue, false); } module.exports = UserColumn; },{"../db/dataTypes":14}],106:[function(require,module,exports){ /** * UserDao module. * @module user/userDao */ var UserRow = require('./userRow') , MediaTable = require('../extension/relatedTables/mediaTable') , SimpleAttributesTable = require('../extension/relatedTables/simpleAttributesTable') , RelationType = require('../extension/relatedTables/relationType') , UserTableReader = require('./userTableReader') , Dao = require('../dao/dao'); var util = require('util'); /** * Abstract User DAO for reading user tables * @class UserDao * @extends {module:dao/dao~Dao} * @param {module:db/geoPackageConnection~GeoPackageConnection} connection connection * @param {string} table table name */ var UserDao = function(geoPackage, table) { Dao.call(this, geoPackage); this.table = table; this.table_name = table.table_name; this.gpkgTableName = table.table_name; if (table.getPkColumn()) { this.idColumns = [table.getPkColumn().name]; } else { this.idColumns = []; } this.columns = table.columnNames; } util.inherits(UserDao, Dao); /** * Reads the table specified from the geopackage * @param {module:geoPackage~GeoPackage} geoPackage geopackage object * @param {string} tableName table name * @param {string[]} requiredColumns required columns * @return {module:user/userDao~UserDao} */ UserDao.readTable = function(geoPackage, tableName) { var reader = new UserTableReader(tableName); var userTable = reader.readTable(geoPackage.getDatabase()); return new UserDao(geoPackage, userTable); } /** * Creates a UserRow * @param {Object} [results] results to create the row from if not specified, an empty row is created * @return {module:user/userRow~UserRow} */ UserDao.prototype.createObject = function (results) { if (results) { return this.getRow(results); } return this.newRow(); }; /** * Sets the value in the row * @param {module:user/userRow~UserRow} object user row * @param {Number} columnIndex index * @param {Object} value value */ UserDao.prototype.setValueInObject = function (object, columnIndex, value) { object.setValueNoValidationWithIndex(columnIndex, value); }; /** * Get a user row from the current results * @param {Object} results result to create the row from * @return {module:user/userRow~UserRow} the user row */ UserDao.prototype.getRow = function (results) { var row = undefined; if (!this.table) return row; var columns = this.table.columnCount(); var columnTypes = {}; for (var i = 0; i < columns; i++) { var column = this.table.getColumnWithIndex(i); columnTypes[column.name] = column.dataType; } return this.newRowWithColumnTypes(columnTypes, results); }; /** * Get the table for this dao * @return {module:user/userTable~UserTable} */ UserDao.prototype.getTable = function() { return this.table; } /** * Create a user row * @param {module:db/dataTypes[]} columnTypes column types * @param {module:dao/columnValues~ColumnValues[]} values values * @return {module:user/userRow~UserRow} user row */ UserDao.prototype.newRowWithColumnTypes = function (columnTypes, values) { return new UserRow(this.table, columnTypes, values); }; /** * Get the projection * @return {string} the projection */ UserDao.prototype.getProjection = function () { return this.projection; }; /** * Links related rows together * @param {module:user/userRow~UserRow} userRow user row * @param {module:user/userRow~UserRow} relatedRow related row * @param {string} relationType relation type * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values * @return {Promise} */ UserDao.prototype.linkRelatedRow = function(userRow, relatedRow, relationType, mappingTable, mappingColumnValues) { var rte = this.geoPackage.getRelatedTablesExtension(); var baseTableName = userRow.table.table_name; var relatedTableName = relatedRow.table.table_name; var relationship = rte.getRelationshipBuilder() .setBaseTableName(baseTableName) .setRelatedTableName(relatedTableName) .setRelationType(relationType); var mappingTableName; if (!mappingTable || typeof mappingTable === 'string') { var mappingTable = mappingTable || baseTableName + '_' + relatedTableName; relationship.setMappingTableName(mappingTable); mappingTableName = mappingTable; } else { relationship.setUserMappingTable(mappingTable); mappingTableName = mappingTable.table_name; } return rte.addRelationship(relationship) .then(function() { var userMappingDao = rte.getMappingDao(mappingTableName); var userMappingRow = userMappingDao.newRow(); userMappingRow.setBaseId(userRow.getId()); userMappingRow.setRelatedId(relatedRow.getId()); for (var column in mappingColumnValues) { userMappingRow.setValueWithColumnName(column, mappingColumnValues[column]); } userMappingDao.create(userMappingRow); }); } /** * Links a user row to a feature row * @param {module:user/userRow~UserRow} userRow user row * @param {module:features/user/featureRow~FeatureRow} featureRow feature row * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values * @return {Promise} */ UserDao.prototype.linkFeatureRow = function(userRow, featureRow, mappingTable, mappingColumnValues) { return this.linkRelatedRow(userRow, featureRow, RelationType.FEATURES, mappingTable, mappingColumnValues); } /** * Links a user row to a media row * @param {module:user/userRow~UserRow} userRow user row * @param {module:extension/relatedTables~MediaRow} mediaRow media row * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values * @return {Promise} */ UserDao.prototype.linkMediaRow = function(userRow, mediaRow, mappingTable, mappingColumnValues) { return this.linkRelatedRow(userRow, mediaRow, RelationType.MEDIA, mappingTable, mappingColumnValues); } /** * Links a user row to a simpleAttributes row * @param {module:user/userRow~UserRow} userRow user row * @param {module:extension/relatedTables~SimpleAttributesRow} simpleAttributesRow simple attributes row * @param {string|module:extension/relatedTables~UserMappingTable} [mappingTable] mapping table * @param {module:dao/columnValues~ColumnValues} [mappingColumnValues] column values * @return {Promise} */ UserDao.prototype.linkSimpleAttributesRow = function(userRow, simpleAttrbuteRow, mappingTable, mappingColumnValues) { return this.linkRelatedRow(userRow, simpleAttrbuteRow, RelationType.SIMPLE_ATTRIBUTES, mappingTable, mappingColumnValues); } /** * Get all media rows that are linked to this user row * @param {module:user/userRow~UserRow} userRow user row * @return {module:extension/relatedTables~MediaRow[]} */ UserDao.prototype.getLinkedMedia = function(userRow) { var mediaRelations = this.getMediaRelations(); var rte = this.geoPackage.getRelatedTablesExtension(); var linkedMedia = []; for (var i = 0; i < mediaRelations.length; i++) { var mediaRelation = mediaRelations[i]; var mediaDao = rte.getMediaDao(mediaRelation); var userMappingDao = rte.getMappingDao(mediaRelation.mapping_table_name); var mappings = userMappingDao.queryByBaseId(userRow.getId()); for (var m = 0; m < mappings.length; m++) { var relatedId = mappings[m].related_id; linkedMedia.push(mediaDao.queryForId(relatedId)); } } return linkedMedia; } /** * Get all simple attribute rows that are linked to this user row * @param {module:user/userRow~UserRow} userRow user row * @return {module:extension/relatedTables~SimpleAttributeRow[]} */ UserDao.prototype.getLinkedSimpleAttributes = function(userRow) { var simpleRelations = this.getSimpleAttributesRelations(); var rte = this.geoPackage.getRelatedTablesExtension(); var linkedSimpleAttributes = []; for (var i = 0; i < simpleRelations.length; i++) { var simpleRelation = simpleRelations[i]; var simpleDao = rte.getSimpleAttributesDao(simpleRelation); var userMappingDao = rte.getMappingDao(simpleRelation.mapping_table_name); var mappings = userMappingDao.queryByBaseId(userRow.getId()); for (var m = 0; m < mappings.length; m++) { var relatedId = mappings[m].related_id; linkedSimpleAttributes.push(simpleDao.queryForId(relatedId)); } } return linkedSimpleAttributes; } /** * Get all feature rows that are linked to this user row * @param {module:user/userRow~UserRow} userRow user row * @return {module:features/user/featureRow~FeatureRow[]} */ UserDao.prototype.getLinkedFeatures = function(userRow) { var featureRelations = this.getFeatureRelations(); var rte = this.geoPackage.getRelatedTablesExtension(); var linkedFeatures = []; for (var i = 0; i < featureRelations.length; i++) { var featureRelation = featureRelations[i]; var featureDao = this.geoPackage.getFeatureDao(featureRelation.base_table_name); var userMappingDao = rte.getMappingDao(featureRelation.mapping_table_name); var mappings = userMappingDao.queryByBaseId(userRow.getId()); for (var m = 0; m < mappings.length; m++) { var relatedId = mappings[m].related_id; linkedFeatures.push(featureDao.queryForId(relatedId)); } } return linkedFeatures; } /** * Get all simple attribute relations to this table * @return {Object[]} */ UserDao.prototype.getSimpleAttributesRelations = function() { return this.getRelationsWithName(SimpleAttributesTable.RELATION_TYPE.name); } /** * Get all feature relations to this table * @return {Object[]} */ UserDao.prototype.getFeatureRelations = function() { return this.getRelationsWithName(RelationType.FEATURES.name); } /** * Get all media relations to this table * @return {Object[]} */ UserDao.prototype.getMediaRelations = function() { return this.getRelationsWithName(MediaTable.RELATION_TYPE.name); } /** * Get all relations to this table with the specified name * @param {string} name * @return {Object[]} */ UserDao.prototype.getRelationsWithName = function(name) { return this.geoPackage.getExtendedRelationDao().getBaseTableRelationsWithName(this.table_name, name); } /** * Get all relations to this table * @return {Object[]} */ UserDao.prototype.getRelations = function() { return this.geoPackage.getExtendedRelationDao().getBaseTableRelations(this.table_name); } /** * Gets the rows in this table by id * @param {Number[]} ids ids to query for * @return {Object[]} */ UserDao.prototype.getRows = function(ids) { var rows = []; for (var i = 0; i < ids.length; i++) { var row = this.queryForId(ids[i]); if (row) { rows.push(row); } } return rows; } /** * Get the approximate zoom level of where the bounding box of the user data fits into the world * * @return zoom level */ UserDao.prototype.getZoomLevel = function () { return 0; // if(self.projection == nil){ // [NSException raise:@"No Projection" format:@"No projection was set which is required to determine the zoom level"]; // } // GPKGBoundingBox * boundingBox = [self getBoundingBox]; // if([self.projection.epsg intValue] == PROJ_EPSG_WORLD_GEODETIC_SYSTEM){ // boundingBox = [GPKGTileBoundingBoxUtils boundWgs84BoundingBoxWithWebMercatorLimits:boundingBox]; // } // GPKGProjectionTransform * webMercatorTransform = [[GPKGProjectionTransform alloc] initWithFromProjection:self.projection andToEpsg:PROJ_EPSG_WEB_MERCATOR]; // GPKGBoundingBox * webMercatorBoundingBox = [webMercatorTransform transformWithBoundingBox:boundingBox]; // int zoomLevel = [GPKGTileBoundingBoxUtils getZoomLevelWithWebMercatorBoundingBox:webMercatorBoundingBox]; // return zoomLevel; }; /** * Get count of all rows in this table * @return {Number} */ UserDao.prototype.getCount = function () { return this.connection.count(this.table_name); }; module.exports = UserDao; },{"../dao/dao":11,"../extension/relatedTables/mediaTable":35,"../extension/relatedTables/relationType":36,"../extension/relatedTables/simpleAttributesTable":39,"./userRow":107,"./userTableReader":109,"util":343}],107:[function(require,module,exports){ (function (Buffer){ /** * UserRow module. * @module user/userRow */ var DataTypes = require('../db/dataTypes'); /** * User Row containing the values from a single result row * @class UserRow * @param {UserTable} table user table * @param {module:db/dataTypes[]} columnTypes column types * @param {Array} values values */ var UserRow = function(table, columnTypes, values) { /** * User table * @type {UserTable} */ this.table = table; /** * Column types of this row, based upon the data values * @type {Object} */ this.columnTypes = columnTypes; /** * Array of row values * @type {Object} */ this.values = values; if (!this.columnTypes) { var columnCount = this.table.columnCount(); this.columnTypes = {}; this.values = {}; for (var i = 0; i < columnCount; i++) { this.columnTypes[this.table.columnNames[i]] = this.table.columns[i].dataType; this.values[this.table.columnNames[i]] = this.table.columns[i].defaultValue; } } } module.exports = UserRow; /** * Get the column count * @return {number} column count */ UserRow.prototype.columnCount = function () { return this.table.columnCount(); }; /** * Get the column names * @return {Array} column names */ UserRow.prototype.getColumnNames = function () { return this.table.columnNames; }; /** * Get the column name at the index * @param {Number} index index * @return {string} column name */ UserRow.prototype.getColumnNameWithIndex = function (index) { return this.table.getColumnNameWithIndex(index); }; /** * Get the column index of the column name * @param {string} columnName column name * @return {Number} column index */ UserRow.prototype.getColumnIndexWithColumnName = function (columnName) { return this.table.getColumnIndex(columnName); }; /** * Get the value at the index * @param {Number} index index * @return {object} value */ UserRow.prototype.getValueWithIndex = function (index) { var value = this.values[this.getColumnNameWithIndex(index)]; if (value !== undefined) { value = this.toObjectValue(index, value); } return value; }; /** * Get the value of the column name * @param {string} columnName column name * @return {Object} value */ UserRow.prototype.getValueWithColumnName = function (columnName) { var value = this.values[columnName]; var dataType = this.getRowColumnTypeWithColumnName(columnName); if (value === undefined || value === null) return value; if (dataType === DataTypes.GPKGDataType.BOOLEAN) { return value === 1 ? true : false; } else if (dataType === DataTypes.GPKGDataType.BLOB) { return Buffer.from(value); } return value; }; UserRow.prototype.toObjectValue = function (index, value) { var objectValue = value; var column = this.getColumnWithIndex(index); if (column.dataType === DataTypes.GPKGDataType.BOOLEAN && value) { return value === 1 ? true : false; } return objectValue; }; UserRow.prototype.toDatabaseValue = function(columnName) { var column = this.getColumnWithColumnName(columnName); var value = this.getValueWithColumnName(columnName); if (column.dataType === DataTypes.GPKGDataType.BOOLEAN) { return value === true ? 1 : 0; } return value; } /** * Get the row column type at the index * @param {Number} index index * @return {Number} row column type */ UserRow.prototype.getRowColumnTypeWithIndex = function (index) { return this.columnTypes[this.getColumnNameWithIndex(index)]; }; /** * Get the row column type of the column name * @param {string} columnName column name * @return {Number} row column type */ UserRow.prototype.getRowColumnTypeWithColumnName = function (columnName) { return this.columnTypes[columnName]; }; /** * Get the column at the index * @param {Number} index index * @return {UserColumn} column */ UserRow.prototype.getColumnWithIndex = function (index) { return this.table.getColumnWithIndex(index); }; /** * Get the column of the column name * @param {string} columnName column name * @return {UserColumn} column */ UserRow.prototype.getColumnWithColumnName = function (columnName) { return this.table.getColumnWithColumnName(columnName); }; /** * Get the id value, which is the value of the primary key * @return {Number} id value */ UserRow.prototype.getId = function () { if (this.getPkColumn()) { return this.getValueWithColumnName(this.getPkColumn().name); } }; /** * Get the primary key column Index * @return {Number} pk index */ UserRow.prototype.getPkColumnIndex = function () { return this.table.pkIndex; }; /** * Get the primary key column * @return {UserColumn} pk column */ UserRow.prototype.getPkColumn = function () { return this.table.getPkColumn(); }; /** * Set the value at the index * @param {Number} index index * @param {object} value value */ UserRow.prototype.setValueWithIndex = function (index, value) { if (index === this.table.pkIndex) { throw new Error('Cannot update the primary key of the row. Table Name: ' + this.table.tableName + ', Index: ' + index + ', Name: ' + this.table.getPkColumn().name); } this.setValueWithColumnName(this.getColumnNameWithIndex(index), value); }; /** * Set the value at the index without validation * @param {Number} index index * @param {Object} value value */ UserRow.prototype.setValueNoValidationWithIndex = function (index, value) { this.values[this.getColumnNameWithIndex(index)] = value; }; /** * Set the value of the column name * @param {string} columnName column name * @param {Object} value value */ UserRow.prototype.setValueWithColumnName = function (columnName, value) { var dataType = this.getRowColumnTypeWithColumnName(columnName); if (dataType === DataTypes.GPKGDataType.BOOLEAN) { value === true ? this.values[columnName] = 1 : this.values[columnName] = 0; } else if (dataType === DataTypes.GPKGDataType.DATE) { this.values[columnName] = value.toISOString().slice(0,10); } else if (dataType === DataTypes.GPKGDataType.DATETIME) { this.values[columnName] = value.toISOString(); } else { this.values[columnName] = value; } }; UserRow.prototype.hasIdColumn = function() { return this.table.pkIndex !== undefined; } UserRow.prototype.hasId = function() { var hasId = false; if (this.hasIdColumn()) { var objectValue = this.getValueWithIndex(this.table.pkIndex); hasId = objectValue !== null && objectValue !== undefined && typeof objectValue === 'number'; } return hasId; } /** * Set the primary key id value * @param {Number} id id */ UserRow.prototype.setId = function (id) { this.values[this.table.getPkColumn().name] = id; }; /** * Clears the id so the row can be used as part of an insert or create */ UserRow.prototype.resetId = function () { this.values[this.table.getPkColumn().name] = undefined; }; /** * Validate the value and its actual value types against eh column data type class * @param {UserColumn} column column * @param {Object} value value * @param {Array} valueTypes value types */ UserRow.prototype.validateValueWithColumn = function (column, value, valueTypes) { // TODO implement validation }; }).call(this,require("buffer").Buffer) },{"../db/dataTypes":14,"buffer":182}],108:[function(require,module,exports){ /** * @module user/userTable */ /** * `UserTable` models optional [user data tables](https://www.geopackage.org/spec121/index.html#_options) * in a [GeoPackage]{@link module:geoPackage~GeoPackage}. * * @class * @param {string} tableName table name * @param {module:user/userColumn~UserColumn[]} columns user columns */ var UserTable = function(tableName, columns) { /** * The name of the table * @type {string} */ this.table_name = tableName; // Sort the columns by index columns.sort(function(a, b) { return a.index - b.index; }); for (var i = 0; i < columns.length; i++) { var column = columns[i]; if (column.index != i) { throw new Error('Column has wrong index of ' + column.index + ', found at index: ' + i + ', Table Name: ' + this.table_name); } } var pk = undefined; var tempColumnNames = new Array(); var tempNameToIndex = {}; for (var i = 0; i < columns.length; i++) { var column = columns[i]; var index = column.index; if (column.primaryKey) { if (pk !== undefined) { throw new Error('More than one primary key column was found for table \'' + this.table_name + '\'. Index ' + pk + ' and ' + index); } pk = index; } tempColumnNames.push(column.name); tempNameToIndex[column.name] = index; } /** * Array of columns * @type {module:user/userColumn~UserColumn[]} */ this.columns = columns; /** * Array of column names * @type {string[]} */ this.columnNames = tempColumnNames; /** * Mapping between column names and their index * @type {Object} */ this.nameToIndex = tempNameToIndex; this.uniqueConstraints = []; /** * Primary key column Index * @type {Number} */ this.pkIndex = pk; } /** * Check for duplicate column names * @param {Number} index index * @param {Number} previousIndex previous index * @param {string} column column * @throws Throws an error if previous index is not undefined */ UserTable.prototype.duplicateCheck = function (index, previousIndex, column) { if(previousIndex !== undefined) { throw new Error('More than one ' + column + ' column was found for table \'' + this.table_name + '\'. Index ' + previousIndex + ' and ' + index); } }; /** * Check for the expected data type * @param {module:db/dataTypes~GPKGDataType} expected expected data type * @param {module:user/userColumn~UserColumn} column column * @throws Will throw an error if the actual column type does not match the expected column type */ UserTable.prototype.typeCheck = function (expected, column) { var actual = column.dataType; if (!actual || actual !== expected) { throw new Error('Unexpected ' + column.name + ' column data type was found for table \'' + this.table_name + '\', expected: ' + DataTypes.name(expected) + ', actual: ' + column.dataType); } }; /** * Check for missing columns * @param {Number} index index * @param {string} column column * @throws Will throw an error if no column is found */ UserTable.prototype.missingCheck = function (index, column) { if (index === undefined || index === null) { throw new Error('No ' + column + ' column was found for table \'' + this.table_name +'\''); } }; /** * Get the column index of the column name * @param {string} columnName column name * @return {Number} the column index * @throws Will throw an error if the column is not found in the table */ UserTable.prototype.getColumnIndex = function (columnName) { var index = this.nameToIndex[columnName]; if (index === undefined || index === null) { throw new Error('Column does not exist in table \'' + this.table_name + '\', column: ' + columnName); } return index; }; /** * Check if the table has the column * @param {string} columnName name of the column * @return {Boolean} true if the column exists in the table */ UserTable.prototype.hasColumn = function(columnName) { try { this.getColumnIndex(columnName); return true; } catch (e) { return false; } return false; } /** * Get the column name from the index * @param {Number} index index * @return {string} the column name */ UserTable.prototype.getColumnNameWithIndex = function (index) { return this.columnNames[index]; }; /** * Get the column from the index * @param {Number} index index * @return {module:user/userColumn~UserColumn} column at the index */ UserTable.prototype.getColumnWithIndex = function (index) { return this.columns[index]; }; /** * Get column with the column name * @param {string} columnName column name * @return {module:user/userColumn~UserColumn} column at the index */ UserTable.prototype.getColumnWithColumnName = function (columnName) { return this.getColumnWithIndex(this.getColumnIndex(columnName)); }; /** * Get the column count * @return {Number} the count of the columns */ UserTable.prototype.columnCount = function () { return this.columns.length; }; /** * Get the primary key column * @return {module:user/userColumn~UserColumn} the primary key column */ UserTable.prototype.getPkColumn = function () { return this.columns[this.pkIndex]; }; /** * Get the primary key id column * @return {module:user/userColumn~UserColumn} */ UserTable.prototype.getIdColumn = function() { return this.getPkColumn(); } UserTable.prototype.addUniqueConstraint = function (uniqueConstraint) { this.uniqueConstraints.push(uniqueConstraint); }; UserTable.FEATURE_TABLE = 'FEATURE'; UserTable.TILE_TABLE = 'TILE'; module.exports = UserTable; },{}],109:[function(require,module,exports){ /** * userTableReader module. * @module user/userTableReader */ var UserColumn = require('./userColumn') , UserTable = require('./userTable') , DataTypes = require('../db/dataTypes'); /** * @class * @param {string} tableName name of the table * @param {string[]} requiredColumns array of required column names */ var UserTableReader = function(tableName, requiredColumns) { this.table_name = tableName; this.requiredColumns = requiredColumns; } var GPKG_UTR_CID = "cid"; var GPKG_UTR_NAME = "name"; var GPKG_UTR_TYPE = "type"; var GPKG_UTR_NOT_NULL = "notnull"; var GPKG_UTR_PK = "pk"; var GPKG_UTR_DFLT_VALUE = "dflt_value"; /** * Read the table * @param {object} db db connection * @return {module:user/userTable~UserTable} */ UserTableReader.prototype.readTable = function (db) { var columnList = []; var results = db.all('PRAGMA table_info(\''+this.table_name+'\')'); for (var i =0; i < results.length; i++) { var result = results[i]; var index = result[GPKG_UTR_CID]; var name = result[GPKG_UTR_NAME]; var type = result[GPKG_UTR_TYPE]; var notNull = result[GPKG_UTR_NOT_NULL] === 1; var primarykey = result[GPKG_UTR_PK] === 1; var max = undefined; if (type && type.lastIndexOf(')') === type.length-1) { var maxStart = type.indexOf('('); if (maxStart > -1) { var maxString = type.substring(maxStart + 1, type.length - 1); if (maxString !== '') { max = parseInt(maxString); type = type.substring(0, maxStart); } } } var defaultValue = undefined; if (result[GPKG_UTR_DFLT_VALUE]) { defaultValue = result[GPKG_UTR_DFLT_VALUE].replace(/\\'/g, ''); } var column = this.createColumnWithResults(result, index, name, type, max, notNull, defaultValue, primarykey); columnList.push(column); } if (columnList.length === 0) { throw new Error('Table does not exist: ' + this.table_name); } return this.createTable(this.table_name, columnList, this.requiredColumns); }; /** * Creates a user column * @param {Object} result * @param {Number} index column index * @param {string} name column name * @param {module:db/dataTypes~GPKGDataType} type data type * @param {Number} max max value * @param {Boolean} notNull not null * @param {Object} defaultValue default value or nil * @param {Boolean} primaryKey primary key * @return {module:user/custom~UserCustomColumn} */ UserTableReader.prototype.createColumnWithResults = function(result, index, name, type, max, notNull, defaultValue, primaryKey) { var dataType = DataTypes.fromName(type); return new UserColumn(index, name, dataType, max, notNull, defaultValue, primaryKey); } /** * Create the table * @param {string} tableName table name * @param {module:dao/columnValues~ColumnValues[]} columns columns * @return {module:user/userTable~UserTable} the user table */ UserTableReader.prototype.createTable = function (tableName, columns) { return new UserTable(tableName, columns); }; module.exports = UserTableReader; },{"../db/dataTypes":14,"./userColumn":105,"./userTable":108}],110:[function(require,module,exports){ /** * GeoPackageValidate module. * @module validate/geoPackageValidate * */ var path = require('path') , SpatialReferenceSystem = require('../core/srs').SpatialReferenceSystem , Contents = require('../core/contents').Contents , GeoPackageConstants = require('../geoPackageConstants'); /** * Check the file extension to see if it is a GeoPackage * @param {string} filePath Absolute path to the GeoPackage to create * @return {boolean} true if GeoPackage extension */ exports.hasGeoPackageExtension = function(filePath) { var extension = path.extname(filePath); return extension && extension !== '' && (extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENSION.toLowerCase() || extension.toLowerCase() === '.'+GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION.toLowerCase()); } /** * Validate the extension file as a GeoPackage * @param {string} filePath Absolute path to the GeoPackage to create * @return {Error} error if the extension is not valid */ exports.validateGeoPackageExtension = function(filePath) { if (!exports.hasGeoPackageExtension(filePath)) { return new Error("GeoPackage database file '" + filePath + "' does not have a valid extension of '" + GeoPackageConstants.GEOPACKAGE_EXTENSION + "' or '" + GeoPackageConstants.GEOPACKAGE_EXTENDED_EXTENSION + "'"); } } /** * Check the GeoPackage for the minimum required tables * @param {Object} geoPackage GeoPackage to check * @param {module:validate/geoPackageValidate~validationCallback} callback - The validation callback */ exports.hasMinimumTables = function(geoPackage) { var srsExists = geoPackage.getSpatialReferenceSystemDao().isTableExists(); var contentsExists = geoPackage.getContentsDao().isTableExists(); return (srsExists && contentsExists); } /** * Validation callback is passed an error if the validation failed. * @callback module:validate/geoPackageValidate~validationCallback * @param {Error} null if no error, otherwise describes the error */ },{"../core/contents":8,"../core/srs":9,"../geoPackageConstants":71,"path":276}],111:[function(require,module,exports){ /** * WKB module. * @module wkb */ var wkx = require('wkx'); var wktToEnum = {}; wktToEnum[wkx.Types.wkt.Point] = wkx.Types.wkb.Point; wktToEnum[wkx.Types.wkt.LineString] = wkx.Types.wkb.LineString; wktToEnum[wkx.Types.wkt.Polygon] = wkx.Types.wkb.Polygon; wktToEnum[wkx.Types.wkt.MultiPoint] = wkx.Types.wkb.MultiPoint; wktToEnum[wkx.Types.wkt.MultiLineString] = wkx.Types.wkb.MultiLineString; wktToEnum[wkx.Types.wkt.MultiPolygon] = wkx.Types.wkb.MultiPolygon; wktToEnum[wkx.Types.wkt.GeometryCollection] = wkx.Types.wkb.GeometryCollection; /** * number from name * @param {string} name name * @return {Number} number corresponding to the wkb name */ module.exports.fromName = function(name) { name = name.toUpperCase(); if (name === 'GEOMETRY') { return wkx.Types.wkb.GeometryCollection; } return wktToEnum[name]; } },{"wkx":360}],112:[function(require,module,exports){ 'use strict'; module.exports = Point; /** * A standalone point geometry with useful accessor, comparison, and * modification methods. * * @class Point * @param {Number} x the x-coordinate. this could be longitude or screen * pixels, or any other sort of unit. * @param {Number} y the y-coordinate. this could be latitude or screen * pixels, or any other sort of unit. * @example * var point = new Point(-77, 38); */ function Point(x, y) { this.x = x; this.y = y; } Point.prototype = { /** * Clone this point, returning a new point that can be modified * without affecting the old one. * @return {Point} the clone */ clone: function() { return new Point(this.x, this.y); }, /** * Add this point's x & y coordinates to another point, * yielding a new point. * @param {Point} p the other point * @return {Point} output point */ add: function(p) { return this.clone()._add(p); }, /** * Subtract this point's x & y coordinates to from point, * yielding a new point. * @param {Point} p the other point * @return {Point} output point */ sub: function(p) { return this.clone()._sub(p); }, /** * Multiply this point's x & y coordinates by point, * yielding a new point. * @param {Point} p the other point * @return {Point} output point */ multByPoint: function(p) { return this.clone()._multByPoint(p); }, /** * Divide this point's x & y coordinates by point, * yielding a new point. * @param {Point} p the other point * @return {Point} output point */ divByPoint: function(p) { return this.clone()._divByPoint(p); }, /** * Multiply this point's x & y coordinates by a factor, * yielding a new point. * @param {Point} k factor * @return {Point} output point */ mult: function(k) { return this.clone()._mult(k); }, /** * Divide this point's x & y coordinates by a factor, * yielding a new point. * @param {Point} k factor * @return {Point} output point */ div: function(k) { return this.clone()._div(k); }, /** * Rotate this point around the 0, 0 origin by an angle a, * given in radians * @param {Number} a angle to rotate around, in radians * @return {Point} output point */ rotate: function(a) { return this.clone()._rotate(a); }, /** * Rotate this point around p point by an angle a, * given in radians * @param {Number} a angle to rotate around, in radians * @param {Point} p Point to rotate around * @return {Point} output point */ rotateAround: function(a,p) { return this.clone()._rotateAround(a,p); }, /** * Multiply this point by a 4x1 transformation matrix * @param {Array} m transformation matrix * @return {Point} output point */ matMult: function(m) { return this.clone()._matMult(m); }, /** * Calculate this point but as a unit vector from 0, 0, meaning * that the distance from the resulting point to the 0, 0 * coordinate will be equal to 1 and the angle from the resulting * point to the 0, 0 coordinate will be the same as before. * @return {Point} unit vector point */ unit: function() { return this.clone()._unit(); }, /** * Compute a perpendicular point, where the new y coordinate * is the old x coordinate and the new x coordinate is the old y * coordinate multiplied by -1 * @return {Point} perpendicular point */ perp: function() { return this.clone()._perp(); }, /** * Return a version of this point with the x & y coordinates * rounded to integers. * @return {Point} rounded point */ round: function() { return this.clone()._round(); }, /** * Return the magitude of this point: this is the Euclidean * distance from the 0, 0 coordinate to this point's x and y * coordinates. * @return {Number} magnitude */ mag: function() { return Math.sqrt(this.x * this.x + this.y * this.y); }, /** * Judge whether this point is equal to another point, returning * true or false. * @param {Point} other the other point * @return {boolean} whether the points are equal */ equals: function(other) { return this.x === other.x && this.y === other.y; }, /** * Calculate the distance from this point to another point * @param {Point} p the other point * @return {Number} distance */ dist: function(p) { return Math.sqrt(this.distSqr(p)); }, /** * Calculate the distance from this point to another point, * without the square root step. Useful if you're comparing * relative distances. * @param {Point} p the other point * @return {Number} distance */ distSqr: function(p) { var dx = p.x - this.x, dy = p.y - this.y; return dx * dx + dy * dy; }, /** * Get the angle from the 0, 0 coordinate to this point, in radians * coordinates. * @return {Number} angle */ angle: function() { return Math.atan2(this.y, this.x); }, /** * Get the angle from this point to another point, in radians * @param {Point} b the other point * @return {Number} angle */ angleTo: function(b) { return Math.atan2(this.y - b.y, this.x - b.x); }, /** * Get the angle between this point and another point, in radians * @param {Point} b the other point * @return {Number} angle */ angleWith: function(b) { return this.angleWithSep(b.x, b.y); }, /* * Find the angle of the two vectors, solving the formula for * the cross product a x b = |a||b|sin(θ) for θ. * @param {Number} x the x-coordinate * @param {Number} y the y-coordinate * @return {Number} the angle in radians */ angleWithSep: function(x, y) { return Math.atan2( this.x * y - this.y * x, this.x * x + this.y * y); }, _matMult: function(m) { var x = m[0] * this.x + m[1] * this.y, y = m[2] * this.x + m[3] * this.y; this.x = x; this.y = y; return this; }, _add: function(p) { this.x += p.x; this.y += p.y; return this; }, _sub: function(p) { this.x -= p.x; this.y -= p.y; return this; }, _mult: function(k) { this.x *= k; this.y *= k; return this; }, _div: function(k) { this.x /= k; this.y /= k; return this; }, _multByPoint: function(p) { this.x *= p.x; this.y *= p.y; return this; }, _divByPoint: function(p) { this.x /= p.x; this.y /= p.y; return this; }, _unit: function() { this._div(this.mag()); return this; }, _perp: function() { var y = this.y; this.y = this.x; this.x = -y; return this; }, _rotate: function(angle) { var cos = Math.cos(angle), sin = Math.sin(angle), x = cos * this.x - sin * this.y, y = sin * this.x + cos * this.y; this.x = x; this.y = y; return this; }, _rotateAround: function(angle, p) { var cos = Math.cos(angle), sin = Math.sin(angle), x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y), y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y); this.x = x; this.y = y; return this; }, _round: function() { this.x = Math.round(this.x); this.y = Math.round(this.y); return this; } }; /** * Construct a point from an array if necessary, otherwise if the input * is already a Point, or an unknown type, return it unchanged * @param {Array|Point|*} a any kind of input value * @return {Point} constructed point, or passed-through value. * @example * // this * var point = Point.convert([0, 1]); * // is equivalent to * var point = new Point(0, 1); */ Point.convert = function (a) { if (a instanceof Point) { return a; } if (Array.isArray(a)) { return new Point(a[0], a[1]); } return a; }; },{}],113:[function(require,module,exports){ module.exports.VectorTile = require('./lib/vectortile.js'); module.exports.VectorTileFeature = require('./lib/vectortilefeature.js'); module.exports.VectorTileLayer = require('./lib/vectortilelayer.js'); },{"./lib/vectortile.js":114,"./lib/vectortilefeature.js":115,"./lib/vectortilelayer.js":116}],114:[function(require,module,exports){ 'use strict'; var VectorTileLayer = require('./vectortilelayer'); module.exports = VectorTile; function VectorTile(pbf, end) { this.layers = pbf.readFields(readTile, {}, end); } function readTile(tag, layers, pbf) { if (tag === 3) { var layer = new VectorTileLayer(pbf, pbf.readVarint() + pbf.pos); if (layer.length) layers[layer.name] = layer; } } },{"./vectortilelayer":116}],115:[function(require,module,exports){ 'use strict'; var Point = require('@mapbox/point-geometry'); module.exports = VectorTileFeature; function VectorTileFeature(pbf, end, extent, keys, values) { // Public this.properties = {}; this.extent = extent; this.type = 0; // Private this._pbf = pbf; this._geometry = -1; this._keys = keys; this._values = values; pbf.readFields(readFeature, this, end); } function readFeature(tag, feature, pbf) { if (tag == 1) feature.id = pbf.readVarint(); else if (tag == 2) readTag(pbf, feature); else if (tag == 3) feature.type = pbf.readVarint(); else if (tag == 4) feature._geometry = pbf.pos; } function readTag(pbf, feature) { var end = pbf.readVarint() + pbf.pos; while (pbf.pos < end) { var key = feature._keys[pbf.readVarint()], value = feature._values[pbf.readVarint()]; feature.properties[key] = value; } } VectorTileFeature.types = ['Unknown', 'Point', 'LineString', 'Polygon']; VectorTileFeature.prototype.loadGeometry = function() { var pbf = this._pbf; pbf.pos = this._geometry; var end = pbf.readVarint() + pbf.pos, cmd = 1, length = 0, x = 0, y = 0, lines = [], line; while (pbf.pos < end) { if (length <= 0) { var cmdLen = pbf.readVarint(); cmd = cmdLen & 0x7; length = cmdLen >> 3; } length--; if (cmd === 1 || cmd === 2) { x += pbf.readSVarint(); y += pbf.readSVarint(); if (cmd === 1) { // moveTo if (line) lines.push(line); line = []; } line.push(new Point(x, y)); } else if (cmd === 7) { // Workaround for https://github.com/mapbox/mapnik-vector-tile/issues/90 if (line) { line.push(line[0].clone()); // closePolygon } } else { throw new Error('unknown command ' + cmd); } } if (line) lines.push(line); return lines; }; VectorTileFeature.prototype.bbox = function() { var pbf = this._pbf; pbf.pos = this._geometry; var end = pbf.readVarint() + pbf.pos, cmd = 1, length = 0, x = 0, y = 0, x1 = Infinity, x2 = -Infinity, y1 = Infinity, y2 = -Infinity; while (pbf.pos < end) { if (length <= 0) { var cmdLen = pbf.readVarint(); cmd = cmdLen & 0x7; length = cmdLen >> 3; } length--; if (cmd === 1 || cmd === 2) { x += pbf.readSVarint(); y += pbf.readSVarint(); if (x < x1) x1 = x; if (x > x2) x2 = x; if (y < y1) y1 = y; if (y > y2) y2 = y; } else if (cmd !== 7) { throw new Error('unknown command ' + cmd); } } return [x1, y1, x2, y2]; }; VectorTileFeature.prototype.toGeoJSON = function(x, y, z) { var size = this.extent * Math.pow(2, z), x0 = this.extent * x, y0 = this.extent * y, coords = this.loadGeometry(), type = VectorTileFeature.types[this.type], i, j; function project(line) { for (var j = 0; j < line.length; j++) { var p = line[j], y2 = 180 - (p.y + y0) * 360 / size; line[j] = [ (p.x + x0) * 360 / size - 180, 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90 ]; } } switch (this.type) { case 1: var points = []; for (i = 0; i < coords.length; i++) { points[i] = coords[i][0]; } coords = points; project(coords); break; case 2: for (i = 0; i < coords.length; i++) { project(coords[i]); } break; case 3: coords = classifyRings(coords); for (i = 0; i < coords.length; i++) { for (j = 0; j < coords[i].length; j++) { project(coords[i][j]); } } break; } if (coords.length === 1) { coords = coords[0]; } else { type = 'Multi' + type; } var result = { type: "Feature", geometry: { type: type, coordinates: coords }, properties: this.properties }; if ('id' in this) { result.id = this.id; } return result; }; // classifies an array of rings into polygons with outer rings and holes function classifyRings(rings) { var len = rings.length; if (len <= 1) return [rings]; var polygons = [], polygon, ccw; for (var i = 0; i < len; i++) { var area = signedArea(rings[i]); if (area === 0) continue; if (ccw === undefined) ccw = area < 0; if (ccw === area < 0) { if (polygon) polygons.push(polygon); polygon = [rings[i]]; } else { polygon.push(rings[i]); } } if (polygon) polygons.push(polygon); return polygons; } function signedArea(ring) { var sum = 0; for (var i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) { p1 = ring[i]; p2 = ring[j]; sum += (p2.x - p1.x) * (p1.y + p2.y); } return sum; } },{"@mapbox/point-geometry":112}],116:[function(require,module,exports){ 'use strict'; var VectorTileFeature = require('./vectortilefeature.js'); module.exports = VectorTileLayer; function VectorTileLayer(pbf, end) { // Public this.version = 1; this.name = null; this.extent = 4096; this.length = 0; // Private this._pbf = pbf; this._keys = []; this._values = []; this._features = []; pbf.readFields(readLayer, this, end); this.length = this._features.length; } function readLayer(tag, layer, pbf) { if (tag === 15) layer.version = pbf.readVarint(); else if (tag === 1) layer.name = pbf.readString(); else if (tag === 5) layer.extent = pbf.readVarint(); else if (tag === 2) layer._features.push(pbf.pos); else if (tag === 3) layer._keys.push(pbf.readString()); else if (tag === 4) layer._values.push(readValueMessage(pbf)); } function readValueMessage(pbf) { var value = null, end = pbf.readVarint() + pbf.pos; while (pbf.pos < end) { var tag = pbf.readVarint() >> 3; value = tag === 1 ? pbf.readString() : tag === 2 ? pbf.readFloat() : tag === 3 ? pbf.readDouble() : tag === 4 ? pbf.readVarint64() : tag === 5 ? pbf.readVarint() : tag === 6 ? pbf.readSVarint() : tag === 7 ? pbf.readBoolean() : null; } return value; } // return feature `i` from this layer as a `VectorTileFeature` VectorTileLayer.prototype.feature = function(i) { if (i < 0 || i >= this._features.length) throw new Error('feature index out of bounds'); this._pbf.pos = this._features[i]; var end = this._pbf.readVarint() + this._pbf.pos; return new VectorTileFeature(this._pbf, end, this.extent, this._keys, this._values); }; },{"./vectortilefeature.js":115}],117:[function(require,module,exports){ var each = require('@turf/meta').coordEach; /** * Takes a set of features, calculates the bbox of all input features, and returns a bounding box. * * @name bbox * @param {(Feature|FeatureCollection)} geojson input features * @returns {Array} bbox extent in [minX, minY, maxX, maxY] order * @addToMap features, bboxPolygon * @example * var pt1 = turf.point([114.175329, 22.2524]) * var pt2 = turf.point([114.170007, 22.267969]) * var pt3 = turf.point([114.200649, 22.274641]) * var pt4 = turf.point([114.200649, 22.274641]) * var pt5 = turf.point([114.186744, 22.265745]) * var features = turf.featureCollection([pt1, pt2, pt3, pt4, pt5]) * * var bbox = turf.bbox(features); * * var bboxPolygon = turf.bboxPolygon(bbox); * * //=bbox * * //=bboxPolygon */ module.exports = function (geojson) { var bbox = [Infinity, Infinity, -Infinity, -Infinity]; each(geojson, function (coord) { if (bbox[0] > coord[0]) bbox[0] = coord[0]; if (bbox[1] > coord[1]) bbox[1] = coord[1]; if (bbox[2] < coord[0]) bbox[2] = coord[0]; if (bbox[3] < coord[1]) bbox[3] = coord[1]; }); return bbox; }; },{"@turf/meta":130}],118:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var invariant_1 = require("@turf/invariant"); // http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule // modified from: https://github.com/substack/point-in-polygon/blob/master/index.js // which was modified from http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html /** * Takes a {@link Point} and a {@link Polygon} or {@link MultiPolygon} and determines if the point * resides inside the polygon. The polygon can be convex or concave. The function accounts for holes. * * @name booleanPointInPolygon * @param {Coord} point input point * @param {Feature} polygon input polygon or multipolygon * @param {Object} [options={}] Optional parameters * @param {boolean} [options.ignoreBoundary=false] True if polygon boundary should be ignored when determining if * the point is inside the polygon otherwise false. * @returns {boolean} `true` if the Point is inside the Polygon; `false` if the Point is not inside the Polygon * @example * var pt = turf.point([-77, 44]); * var poly = turf.polygon([[ * [-81, 41], * [-81, 47], * [-72, 47], * [-72, 41], * [-81, 41] * ]]); * * turf.booleanPointInPolygon(pt, poly); * //= true */ function booleanPointInPolygon(point, polygon, options) { if (options === void 0) { options = {}; } // validation if (!point) { throw new Error("point is required"); } if (!polygon) { throw new Error("polygon is required"); } var pt = invariant_1.getCoord(point); var geom = invariant_1.getGeom(polygon); var type = geom.type; var bbox = polygon.bbox; var polys = geom.coordinates; // Quick elimination if point is not inside bbox if (bbox && inBBox(pt, bbox) === false) { return false; } // normalize to multipolygon if (type === "Polygon") { polys = [polys]; } var insidePoly = false; for (var i = 0; i < polys.length && !insidePoly; i++) { // check if it is in the outer ring first if (inRing(pt, polys[i][0], options.ignoreBoundary)) { var inHole = false; var k = 1; // check for the point in any of the holes while (k < polys[i].length && !inHole) { if (inRing(pt, polys[i][k], !options.ignoreBoundary)) { inHole = true; } k++; } if (!inHole) { insidePoly = true; } } } return insidePoly; } exports.default = booleanPointInPolygon; /** * inRing * * @private * @param {Array} pt [x,y] * @param {Array>} ring [[x,y], [x,y],..] * @param {boolean} ignoreBoundary ignoreBoundary * @returns {boolean} inRing */ function inRing(pt, ring, ignoreBoundary) { var isInside = false; if (ring[0][0] === ring[ring.length - 1][0] && ring[0][1] === ring[ring.length - 1][1]) { ring = ring.slice(0, ring.length - 1); } for (var i = 0, j = ring.length - 1; i < ring.length; j = i++) { var xi = ring[i][0]; var yi = ring[i][1]; var xj = ring[j][0]; var yj = ring[j][1]; var onBoundary = (pt[1] * (xi - xj) + yi * (xj - pt[0]) + yj * (pt[0] - xi) === 0) && ((xi - pt[0]) * (xj - pt[0]) <= 0) && ((yi - pt[1]) * (yj - pt[1]) <= 0); if (onBoundary) { return !ignoreBoundary; } var intersect = ((yi > pt[1]) !== (yj > pt[1])) && (pt[0] < (xj - xi) * (pt[1] - yi) / (yj - yi) + xi); if (intersect) { isInside = !isInside; } } return isInside; } /** * inBBox * * @private * @param {Position} pt point [x,y] * @param {BBox} bbox BBox [west, south, east, north] * @returns {boolean} true/false if point is inside BBox */ function inBBox(pt, bbox) { return bbox[0] <= pt[0] && bbox[1] <= pt[1] && bbox[2] >= pt[0] && bbox[3] >= pt[1]; } },{"@turf/invariant":125}],119:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var invariant_1 = require("@turf/invariant"); /** * Returns true if a point is on a line. Accepts a optional parameter to ignore the * start and end vertices of the linestring. * * @name booleanPointOnLine * @param {Coord} pt GeoJSON Point * @param {Feature} line GeoJSON LineString * @param {Object} [options={}] Optional parameters * @param {boolean} [options.ignoreEndVertices=false] whether to ignore the start and end vertices. * @returns {boolean} true/false * @example * var pt = turf.point([0, 0]); * var line = turf.lineString([[-1, -1],[1, 1],[1.5, 2.2]]); * var isPointOnLine = turf.booleanPointOnLine(pt, line); * //=true */ function booleanPointOnLine(pt, line, options) { if (options === void 0) { options = {}; } // Normalize inputs var ptCoords = invariant_1.getCoord(pt); var lineCoords = invariant_1.getCoords(line); // Main for (var i = 0; i < lineCoords.length - 1; i++) { var ignoreBoundary = false; if (options.ignoreEndVertices) { if (i === 0) { ignoreBoundary = "start"; } if (i === lineCoords.length - 2) { ignoreBoundary = "end"; } if (i === 0 && i + 1 === lineCoords.length - 1) { ignoreBoundary = "both"; } } if (isPointOnLineSegment(lineCoords[i], lineCoords[i + 1], ptCoords, ignoreBoundary)) { return true; } } return false; } // See http://stackoverflow.com/a/4833823/1979085 /** * @private * @param {Position} lineSegmentStart coord pair of start of line * @param {Position} lineSegmentEnd coord pair of end of line * @param {Position} pt coord pair of point to check * @param {boolean|string} excludeBoundary whether the point is allowed to fall on the line ends. * If true which end to ignore. * @returns {boolean} true/false */ function isPointOnLineSegment(lineSegmentStart, lineSegmentEnd, pt, excludeBoundary) { var x = pt[0]; var y = pt[1]; var x1 = lineSegmentStart[0]; var y1 = lineSegmentStart[1]; var x2 = lineSegmentEnd[0]; var y2 = lineSegmentEnd[1]; var dxc = pt[0] - x1; var dyc = pt[1] - y1; var dxl = x2 - x1; var dyl = y2 - y1; var cross = dxc * dyl - dyc * dxl; if (cross !== 0) { return false; } if (!excludeBoundary) { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 <= x && x <= x2 : x2 <= x && x <= x1; } return dyl > 0 ? y1 <= y && y <= y2 : y2 <= y && y <= y1; } else if (excludeBoundary === "start") { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 < x && x <= x2 : x2 <= x && x < x1; } return dyl > 0 ? y1 < y && y <= y2 : y2 <= y && y < y1; } else if (excludeBoundary === "end") { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 <= x && x < x2 : x2 < x && x <= x1; } return dyl > 0 ? y1 <= y && y < y2 : y2 < y && y <= y1; } else if (excludeBoundary === "both") { if (Math.abs(dxl) >= Math.abs(dyl)) { return dxl > 0 ? x1 < x && x < x2 : x2 < x && x < x1; } return dyl > 0 ? y1 < y && y < y2 : y2 < y && y < y1; } return false; } exports.default = booleanPointOnLine; },{"@turf/invariant":125}],120:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var bbox_1 = require("@turf/bbox"); var boolean_point_on_line_1 = require("@turf/boolean-point-on-line"); var boolean_point_in_polygon_1 = require("@turf/boolean-point-in-polygon"); var invariant_1 = require("@turf/invariant"); /** * Boolean-within returns true if the first geometry is completely within the second geometry. * The interiors of both geometries must intersect and, the interior and boundary of the primary (geometry a) * must not intersect the exterior of the secondary (geometry b). * Boolean-within returns the exact opposite result of the `@turf/boolean-contains`. * * @name booleanWithin * @param {Geometry|Feature} feature1 GeoJSON Feature or Geometry * @param {Geometry|Feature} feature2 GeoJSON Feature or Geometry * @returns {boolean} true/false * @example * var line = turf.lineString([[1, 1], [1, 2], [1, 3], [1, 4]]); * var point = turf.point([1, 2]); * * turf.booleanWithin(point, line); * //=true */ function booleanWithin(feature1, feature2) { var type1 = invariant_1.getType(feature1); var type2 = invariant_1.getType(feature2); var geom1 = invariant_1.getGeom(feature1); var geom2 = invariant_1.getGeom(feature2); switch (type1) { case 'Point': switch (type2) { case 'MultiPoint': return isPointInMultiPoint(geom1, geom2); case 'LineString': return boolean_point_on_line_1.default(geom1, geom2, { ignoreEndVertices: true }); case 'Polygon': case 'MultiPolygon': return boolean_point_in_polygon_1.default(geom1, geom2, { ignoreBoundary: true }); default: throw new Error('feature2 ' + type2 + ' geometry not supported'); } case 'MultiPoint': switch (type2) { case 'MultiPoint': return isMultiPointInMultiPoint(geom1, geom2); case 'LineString': return isMultiPointOnLine(geom1, geom2); case 'Polygon': case 'MultiPolygon': return isMultiPointInPoly(geom1, geom2); default: throw new Error('feature2 ' + type2 + ' geometry not supported'); } case 'LineString': switch (type2) { case 'LineString': return isLineOnLine(geom1, geom2); case 'Polygon': case 'MultiPolygon': return isLineInPoly(geom1, geom2); default: throw new Error('feature2 ' + type2 + ' geometry not supported'); } case 'Polygon': switch (type2) { case 'Polygon': case 'MultiPolygon': return isPolyInPoly(geom1, geom2); default: throw new Error('feature2 ' + type2 + ' geometry not supported'); } default: throw new Error('feature1 ' + type1 + ' geometry not supported'); } } function isPointInMultiPoint(point, multiPoint) { var i; var output = false; for (i = 0; i < multiPoint.coordinates.length; i++) { if (compareCoords(multiPoint.coordinates[i], point.coordinates)) { output = true; break; } } return output; } function isMultiPointInMultiPoint(multiPoint1, multiPoint2) { for (var i = 0; i < multiPoint1.coordinates.length; i++) { var anyMatch = false; for (var i2 = 0; i2 < multiPoint2.coordinates.length; i2++) { if (compareCoords(multiPoint1.coordinates[i], multiPoint2.coordinates[i2])) { anyMatch = true; } } if (!anyMatch) { return false; } } return true; } function isMultiPointOnLine(multiPoint, lineString) { var foundInsidePoint = false; for (var i = 0; i < multiPoint.coordinates.length; i++) { if (!boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString)) { return false; } if (!foundInsidePoint) { foundInsidePoint = boolean_point_on_line_1.default(multiPoint.coordinates[i], lineString, { ignoreEndVertices: true }); } } return foundInsidePoint; } function isMultiPointInPoly(multiPoint, polygon) { var output = true; var oneInside = false; for (var i = 0; i < multiPoint.coordinates.length; i++) { var isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon); if (!isInside) { output = false; break; } if (!oneInside) { isInside = boolean_point_in_polygon_1.default(multiPoint.coordinates[1], polygon, { ignoreBoundary: true }); } } return output && isInside; } function isLineOnLine(lineString1, lineString2) { for (var i = 0; i < lineString1.coordinates.length; i++) { if (!boolean_point_on_line_1.default(lineString1.coordinates[i], lineString2)) { return false; } } return true; } function isLineInPoly(linestring, polygon) { var polyBbox = bbox_1.default(polygon); var lineBbox = bbox_1.default(linestring); if (!doBBoxOverlap(polyBbox, lineBbox)) { return false; } var foundInsidePoint = false; for (var i = 0; i < linestring.coordinates.length - 1; i++) { if (!boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon)) { return false; } if (!foundInsidePoint) { foundInsidePoint = boolean_point_in_polygon_1.default(linestring.coordinates[i], polygon, { ignoreBoundary: true }); } if (!foundInsidePoint) { var midpoint = getMidpoint(linestring.coordinates[i], linestring.coordinates[i + 1]); foundInsidePoint = boolean_point_in_polygon_1.default(midpoint, polygon, { ignoreBoundary: true }); } } return foundInsidePoint; } /** * Is Polygon2 in Polygon1 * Only takes into account outer rings * * @private * @param {Geometry|Feature} feature1 Polygon1 * @param {Geometry|Feature} feature2 Polygon2 * @returns {boolean} true/false */ function isPolyInPoly(feature1, feature2) { var poly1Bbox = bbox_1.default(feature1); var poly2Bbox = bbox_1.default(feature2); if (!doBBoxOverlap(poly2Bbox, poly1Bbox)) { return false; } for (var i = 0; i < feature1.coordinates[0].length; i++) { if (!boolean_point_in_polygon_1.default(feature1.coordinates[0][i], feature2)) { return false; } } return true; } function doBBoxOverlap(bbox1, bbox2) { if (bbox1[0] > bbox2[0]) return false; if (bbox1[2] < bbox2[2]) return false; if (bbox1[1] > bbox2[1]) return false; if (bbox1[3] < bbox2[3]) return false; return true; } /** * compareCoords * * @private * @param {Position} pair1 point [x,y] * @param {Position} pair2 point [x,y] * @returns {boolean} true/false if coord pairs match */ function compareCoords(pair1, pair2) { return pair1[0] === pair2[0] && pair1[1] === pair2[1]; } /** * getMidpoint * * @private * @param {Position} pair1 point [x,y] * @param {Position} pair2 point [x,y] * @returns {Position} midpoint of pair1 and pair2 */ function getMidpoint(pair1, pair2) { return [(pair1[0] + pair2[0]) / 2, (pair1[1] + pair2[1]) / 2]; } exports.default = booleanWithin; },{"@turf/bbox":121,"@turf/boolean-point-in-polygon":118,"@turf/boolean-point-on-line":119,"@turf/invariant":125}],121:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var meta_1 = require("@turf/meta"); /** * Takes a set of features, calculates the bbox of all input features, and returns a bounding box. * * @name bbox * @param {GeoJSON} geojson any GeoJSON object * @returns {BBox} bbox extent in [minX, minY, maxX, maxY] order * @example * var line = turf.lineString([[-74, 40], [-78, 42], [-82, 35]]); * var bbox = turf.bbox(line); * var bboxPolygon = turf.bboxPolygon(bbox); * * //addToMap * var addToMap = [line, bboxPolygon] */ function bbox(geojson) { var result = [Infinity, Infinity, -Infinity, -Infinity]; meta_1.coordEach(geojson, function (coord) { if (result[0] > coord[0]) { result[0] = coord[0]; } if (result[1] > coord[1]) { result[1] = coord[1]; } if (result[2] < coord[0]) { result[2] = coord[0]; } if (result[3] < coord[1]) { result[3] = coord[1]; } }); return result; } exports.default = bbox; },{"@turf/meta":122}],122:[function(require,module,exports){ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var helpers = require('@turf/helpers'); /** * Callback for coordEach * * @callback coordEachCallback * @param {Array} currentCoord The current coordinate being processed. * @param {number} coordIndex The current index of the coordinate being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. */ /** * Iterate over coordinates in any GeoJSON object, similar to Array.forEach() * * @name coordEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentCoord, coordIndex, featureIndex, multiFeatureIndex) * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration. * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {"foo": "bar"}), * turf.point([36, 53], {"hello": "world"}) * ]); * * turf.coordEach(features, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { * //=currentCoord * //=coordIndex * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * }); */ function coordEach(geojson, callback, excludeWrapCoord) { // Handles null Geometry -- Skips this GeoJSON if (geojson === null) return; var j, k, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, coordIndex = 0, isGeometryCollection, type = geojson.type, isFeatureCollection = type === 'FeatureCollection', isFeature = type === 'Feature', stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way // is because it's trying to be fast. GeoJSON supports multiple kinds // of objects at its root: FeatureCollection, Features, Geometries. // This function has the responsibility of handling all of them, and that // means that some of the `for` loops you see below actually just don't apply // to certain inputs. For instance, if you give this just a // Point geometry, then both loops are short-circuited and all we do // is gradually rename the input until it's called 'geometry'. // // This also aims to allocate as few resources as possible: just a // few numbers and booleans, rather than any temporary arrays as would // be required with the normalization approach. for (var featureIndex = 0; featureIndex < stop; featureIndex++) { geometryMaybeCollection = (isFeatureCollection ? geojson.features[featureIndex].geometry : (isFeature ? geojson.geometry : geojson)); isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (var geomIndex = 0; geomIndex < stopG; geomIndex++) { var multiFeatureIndex = 0; var geometryIndex = 0; geometry = isGeometryCollection ? geometryMaybeCollection.geometries[geomIndex] : geometryMaybeCollection; // Handles null Geometry -- Skips this geometry if (geometry === null) continue; coords = geometry.coordinates; var geomType = geometry.type; wrapShrink = (excludeWrapCoord && (geomType === 'Polygon' || geomType === 'MultiPolygon')) ? 1 : 0; switch (geomType) { case null: break; case 'Point': if (callback(coords, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; multiFeatureIndex++; break; case 'LineString': case 'MultiPoint': for (j = 0; j < coords.length; j++) { if (callback(coords[j], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; if (geomType === 'MultiPoint') multiFeatureIndex++; } if (geomType === 'LineString') multiFeatureIndex++; break; case 'Polygon': case 'MultiLineString': for (j = 0; j < coords.length; j++) { for (k = 0; k < coords[j].length - wrapShrink; k++) { if (callback(coords[j][k], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; } if (geomType === 'MultiLineString') multiFeatureIndex++; if (geomType === 'Polygon') geometryIndex++; } if (geomType === 'Polygon') multiFeatureIndex++; break; case 'MultiPolygon': for (j = 0; j < coords.length; j++) { geometryIndex = 0; for (k = 0; k < coords[j].length; k++) { for (l = 0; l < coords[j][k].length - wrapShrink; l++) { if (callback(coords[j][k][l], coordIndex, featureIndex, multiFeatureIndex, geometryIndex) === false) return false; coordIndex++; } geometryIndex++; } multiFeatureIndex++; } break; case 'GeometryCollection': for (j = 0; j < geometry.geometries.length; j++) if (coordEach(geometry.geometries[j], callback, excludeWrapCoord) === false) return false; break; default: throw new Error('Unknown Geometry Type'); } } } } /** * Callback for coordReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback coordReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Array} currentCoord The current coordinate being processed. * @param {number} coordIndex The current index of the coordinate being processed. * Starts at index 0, if an initialValue is provided, and at index 1 otherwise. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. */ /** * Reduce coordinates in any GeoJSON object, similar to Array.reduce() * * @name coordReduce * @param {FeatureCollection|Geometry|Feature} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentCoord, coordIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @param {boolean} [excludeWrapCoord=false] whether or not to include the final coordinate of LinearRings that wraps the ring in its iteration. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {"foo": "bar"}), * turf.point([36, 53], {"hello": "world"}) * ]); * * turf.coordReduce(features, function (previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { * //=previousValue * //=currentCoord * //=coordIndex * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * return currentCoord; * }); */ function coordReduce(geojson, callback, initialValue, excludeWrapCoord) { var previousValue = initialValue; coordEach(geojson, function (currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex) { if (coordIndex === 0 && initialValue === undefined) previousValue = currentCoord; else previousValue = callback(previousValue, currentCoord, coordIndex, featureIndex, multiFeatureIndex, geometryIndex); }, excludeWrapCoord); return previousValue; } /** * Callback for propEach * * @callback propEachCallback * @param {Object} currentProperties The current Properties being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Iterate over properties in any GeoJSON object, similar to Array.forEach() * * @name propEach * @param {FeatureCollection|Feature} geojson any GeoJSON object * @param {Function} callback a method that takes (currentProperties, featureIndex) * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.propEach(features, function (currentProperties, featureIndex) { * //=currentProperties * //=featureIndex * }); */ function propEach(geojson, callback) { var i; switch (geojson.type) { case 'FeatureCollection': for (i = 0; i < geojson.features.length; i++) { if (callback(geojson.features[i].properties, i) === false) break; } break; case 'Feature': callback(geojson.properties, 0); break; } } /** * Callback for propReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback propReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {*} currentProperties The current Properties being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Reduce properties in any GeoJSON object into a single value, * similar to how Array.reduce works. However, in this case we lazily run * the reduction, so an array of all properties is unnecessary. * * @name propReduce * @param {FeatureCollection|Feature} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentProperties, featureIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.propReduce(features, function (previousValue, currentProperties, featureIndex) { * //=previousValue * //=currentProperties * //=featureIndex * return currentProperties * }); */ function propReduce(geojson, callback, initialValue) { var previousValue = initialValue; propEach(geojson, function (currentProperties, featureIndex) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentProperties; else previousValue = callback(previousValue, currentProperties, featureIndex); }); return previousValue; } /** * Callback for featureEach * * @callback featureEachCallback * @param {Feature} currentFeature The current Feature being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Iterate over features in any GeoJSON object, similar to * Array.forEach. * * @name featureEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentFeature, featureIndex) * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.featureEach(features, function (currentFeature, featureIndex) { * //=currentFeature * //=featureIndex * }); */ function featureEach(geojson, callback) { if (geojson.type === 'Feature') { callback(geojson, 0); } else if (geojson.type === 'FeatureCollection') { for (var i = 0; i < geojson.features.length; i++) { if (callback(geojson.features[i], i) === false) break; } } } /** * Callback for featureReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback featureReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentFeature The current Feature being processed. * @param {number} featureIndex The current index of the Feature being processed. */ /** * Reduce features in any GeoJSON object, similar to Array.reduce(). * * @name featureReduce * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {"foo": "bar"}), * turf.point([36, 53], {"hello": "world"}) * ]); * * turf.featureReduce(features, function (previousValue, currentFeature, featureIndex) { * //=previousValue * //=currentFeature * //=featureIndex * return currentFeature * }); */ function featureReduce(geojson, callback, initialValue) { var previousValue = initialValue; featureEach(geojson, function (currentFeature, featureIndex) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentFeature; else previousValue = callback(previousValue, currentFeature, featureIndex); }); return previousValue; } /** * Get all coordinates from any GeoJSON object. * * @name coordAll * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @returns {Array>} coordinate position array * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * var coords = turf.coordAll(features); * //= [[26, 37], [36, 53]] */ function coordAll(geojson) { var coords = []; coordEach(geojson, function (coord) { coords.push(coord); }); return coords; } /** * Callback for geomEach * * @callback geomEachCallback * @param {Geometry} currentGeometry The current Geometry being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {Object} featureProperties The current Feature Properties being processed. * @param {Array} featureBBox The current Feature BBox being processed. * @param {number|string} featureId The current Feature Id being processed. */ /** * Iterate over each geometry in any GeoJSON object, similar to Array.forEach() * * @name geomEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) * @returns {void} * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.geomEach(features, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { * //=currentGeometry * //=featureIndex * //=featureProperties * //=featureBBox * //=featureId * }); */ function geomEach(geojson, callback) { var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, featureProperties, featureBBox, featureId, featureIndex = 0, isFeatureCollection = geojson.type === 'FeatureCollection', isFeature = geojson.type === 'Feature', stop = isFeatureCollection ? geojson.features.length : 1; // This logic may look a little weird. The reason why it is that way // is because it's trying to be fast. GeoJSON supports multiple kinds // of objects at its root: FeatureCollection, Features, Geometries. // This function has the responsibility of handling all of them, and that // means that some of the `for` loops you see below actually just don't apply // to certain inputs. For instance, if you give this just a // Point geometry, then both loops are short-circuited and all we do // is gradually rename the input until it's called 'geometry'. // // This also aims to allocate as few resources as possible: just a // few numbers and booleans, rather than any temporary arrays as would // be required with the normalization approach. for (i = 0; i < stop; i++) { geometryMaybeCollection = (isFeatureCollection ? geojson.features[i].geometry : (isFeature ? geojson.geometry : geojson)); featureProperties = (isFeatureCollection ? geojson.features[i].properties : (isFeature ? geojson.properties : {})); featureBBox = (isFeatureCollection ? geojson.features[i].bbox : (isFeature ? geojson.bbox : undefined)); featureId = (isFeatureCollection ? geojson.features[i].id : (isFeature ? geojson.id : undefined)); isGeometryCollection = (geometryMaybeCollection) ? geometryMaybeCollection.type === 'GeometryCollection' : false; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (g = 0; g < stopG; g++) { geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection; // Handle null Geometry if (geometry === null) { if (callback(null, featureIndex, featureProperties, featureBBox, featureId) === false) return false; continue; } switch (geometry.type) { case 'Point': case 'LineString': case 'MultiPoint': case 'Polygon': case 'MultiLineString': case 'MultiPolygon': { if (callback(geometry, featureIndex, featureProperties, featureBBox, featureId) === false) return false; break; } case 'GeometryCollection': { for (j = 0; j < geometry.geometries.length; j++) { if (callback(geometry.geometries[j], featureIndex, featureProperties, featureBBox, featureId) === false) return false; } break; } default: throw new Error('Unknown Geometry Type'); } } // Only increase `featureIndex` per each feature featureIndex++; } } /** * Callback for geomReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback geomReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Geometry} currentGeometry The current Geometry being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {Object} featureProperties The current Feature Properties being processed. * @param {Array} featureBBox The current Feature BBox being processed. * @param {number|string} featureId The current Feature Id being processed. */ /** * Reduce geometry in any GeoJSON object, similar to Array.reduce(). * * @name geomReduce * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.point([36, 53], {hello: 'world'}) * ]); * * turf.geomReduce(features, function (previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { * //=previousValue * //=currentGeometry * //=featureIndex * //=featureProperties * //=featureBBox * //=featureId * return currentGeometry * }); */ function geomReduce(geojson, callback, initialValue) { var previousValue = initialValue; geomEach(geojson, function (currentGeometry, featureIndex, featureProperties, featureBBox, featureId) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentGeometry; else previousValue = callback(previousValue, currentGeometry, featureIndex, featureProperties, featureBBox, featureId); }); return previousValue; } /** * Callback for flattenEach * * @callback flattenEachCallback * @param {Feature} currentFeature The current flattened feature being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. */ /** * Iterate over flattened features in any GeoJSON object, similar to * Array.forEach. * * @name flattenEach * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (currentFeature, featureIndex, multiFeatureIndex) * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'}) * ]); * * turf.flattenEach(features, function (currentFeature, featureIndex, multiFeatureIndex) { * //=currentFeature * //=featureIndex * //=multiFeatureIndex * }); */ function flattenEach(geojson, callback) { geomEach(geojson, function (geometry, featureIndex, properties, bbox, id) { // Callback for single geometry var type = (geometry === null) ? null : geometry.type; switch (type) { case null: case 'Point': case 'LineString': case 'Polygon': if (callback(helpers.feature(geometry, properties, {bbox: bbox, id: id}), featureIndex, 0) === false) return false; return; } var geomType; // Callback for multi-geometry switch (type) { case 'MultiPoint': geomType = 'Point'; break; case 'MultiLineString': geomType = 'LineString'; break; case 'MultiPolygon': geomType = 'Polygon'; break; } for (var multiFeatureIndex = 0; multiFeatureIndex < geometry.coordinates.length; multiFeatureIndex++) { var coordinate = geometry.coordinates[multiFeatureIndex]; var geom = { type: geomType, coordinates: coordinate }; if (callback(helpers.feature(geom, properties), featureIndex, multiFeatureIndex) === false) return false; } }); } /** * Callback for flattenReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback flattenReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentFeature The current Feature being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. */ /** * Reduce flattened features in any GeoJSON object, similar to Array.reduce(). * * @name flattenReduce * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentFeature, featureIndex, multiFeatureIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = turf.featureCollection([ * turf.point([26, 37], {foo: 'bar'}), * turf.multiPoint([[40, 30], [36, 53]], {hello: 'world'}) * ]); * * turf.flattenReduce(features, function (previousValue, currentFeature, featureIndex, multiFeatureIndex) { * //=previousValue * //=currentFeature * //=featureIndex * //=multiFeatureIndex * return currentFeature * }); */ function flattenReduce(geojson, callback, initialValue) { var previousValue = initialValue; flattenEach(geojson, function (currentFeature, featureIndex, multiFeatureIndex) { if (featureIndex === 0 && multiFeatureIndex === 0 && initialValue === undefined) previousValue = currentFeature; else previousValue = callback(previousValue, currentFeature, featureIndex, multiFeatureIndex); }); return previousValue; } /** * Callback for segmentEach * * @callback segmentEachCallback * @param {Feature} currentSegment The current Segment being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. * @param {number} segmentIndex The current index of the Segment being processed. * @returns {void} */ /** * Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach() * (Multi)Point geometries do not contain segments therefore they are ignored during this operation. * * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON * @param {Function} callback a method that takes (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) * @returns {void} * @example * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); * * // Iterate over GeoJSON by 2-vertex segments * turf.segmentEach(polygon, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { * //=currentSegment * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * //=segmentIndex * }); * * // Calculate the total number of segments * var total = 0; * turf.segmentEach(polygon, function () { * total++; * }); */ function segmentEach(geojson, callback) { flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) { var segmentIndex = 0; // Exclude null Geometries if (!feature.geometry) return; // (Multi)Point geometries do not contain segments therefore they are ignored during this operation. var type = feature.geometry.type; if (type === 'Point' || type === 'MultiPoint') return; // Generate 2-vertex line segments var previousCoords; var previousFeatureIndex = 0; var previousMultiIndex = 0; var prevGeomIndex = 0; if (coordEach(feature, function (currentCoord, coordIndex, featureIndexCoord, multiPartIndexCoord, geometryIndex) { // Simulating a meta.coordReduce() since `reduce` operations cannot be stopped by returning `false` if (previousCoords === undefined || featureIndex > previousFeatureIndex || multiPartIndexCoord > previousMultiIndex || geometryIndex > prevGeomIndex) { previousCoords = currentCoord; previousFeatureIndex = featureIndex; previousMultiIndex = multiPartIndexCoord; prevGeomIndex = geometryIndex; segmentIndex = 0; return; } var currentSegment = helpers.lineString([previousCoords, currentCoord], feature.properties); if (callback(currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) === false) return false; segmentIndex++; previousCoords = currentCoord; }) === false) return false; }); } /** * Callback for segmentReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback segmentReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentSegment The current Segment being processed. * @param {number} featureIndex The current index of the Feature being processed. * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed. * @param {number} geometryIndex The current index of the Geometry being processed. * @param {number} segmentIndex The current index of the Segment being processed. */ /** * Reduce 2-vertex line segment in any GeoJSON object, similar to Array.reduce() * (Multi)Point geometries do not contain segments therefore they are ignored during this operation. * * @param {FeatureCollection|Feature|Geometry} geojson any GeoJSON * @param {Function} callback a method that takes (previousValue, currentSegment, currentIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {void} * @example * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); * * // Iterate over GeoJSON by 2-vertex segments * turf.segmentReduce(polygon, function (previousSegment, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { * //= previousSegment * //= currentSegment * //= featureIndex * //= multiFeatureIndex * //= geometryIndex * //= segmentInex * return currentSegment * }); * * // Calculate the total number of segments * var initialValue = 0 * var total = turf.segmentReduce(polygon, function (previousValue) { * previousValue++; * return previousValue; * }, initialValue); */ function segmentReduce(geojson, callback, initialValue) { var previousValue = initialValue; var started = false; segmentEach(geojson, function (currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex) { if (started === false && initialValue === undefined) previousValue = currentSegment; else previousValue = callback(previousValue, currentSegment, featureIndex, multiFeatureIndex, geometryIndex, segmentIndex); started = true; }); return previousValue; } /** * Callback for lineEach * * @callback lineEachCallback * @param {Feature} currentLine The current LineString|LinearRing being processed * @param {number} featureIndex The current index of the Feature being processed * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed * @param {number} geometryIndex The current index of the Geometry being processed */ /** * Iterate over line or ring coordinates in LineString, Polygon, MultiLineString, MultiPolygon Features or Geometries, * similar to Array.forEach. * * @name lineEach * @param {Geometry|Feature} geojson object * @param {Function} callback a method that takes (currentLine, featureIndex, multiFeatureIndex, geometryIndex) * @example * var multiLine = turf.multiLineString([ * [[26, 37], [35, 45]], * [[36, 53], [38, 50], [41, 55]] * ]); * * turf.lineEach(multiLine, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) { * //=currentLine * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * }); */ function lineEach(geojson, callback) { // validation if (!geojson) throw new Error('geojson is required'); flattenEach(geojson, function (feature, featureIndex, multiFeatureIndex) { if (feature.geometry === null) return; var type = feature.geometry.type; var coords = feature.geometry.coordinates; switch (type) { case 'LineString': if (callback(feature, featureIndex, multiFeatureIndex, 0, 0) === false) return false; break; case 'Polygon': for (var geometryIndex = 0; geometryIndex < coords.length; geometryIndex++) { if (callback(helpers.lineString(coords[geometryIndex], feature.properties), featureIndex, multiFeatureIndex, geometryIndex) === false) return false; } break; } }); } /** * Callback for lineReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @callback lineReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentLine The current LineString|LinearRing being processed. * @param {number} featureIndex The current index of the Feature being processed * @param {number} multiFeatureIndex The current index of the Multi-Feature being processed * @param {number} geometryIndex The current index of the Geometry being processed */ /** * Reduce features in any GeoJSON object, similar to Array.reduce(). * * @name lineReduce * @param {Geometry|Feature} geojson object * @param {Function} callback a method that takes (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var multiPoly = turf.multiPolygon([ * turf.polygon([[[12,48],[2,41],[24,38],[12,48]], [[9,44],[13,41],[13,45],[9,44]]]), * turf.polygon([[[5, 5], [0, 0], [2, 2], [4, 4], [5, 5]]]) * ]); * * turf.lineReduce(multiPoly, function (previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex) { * //=previousValue * //=currentLine * //=featureIndex * //=multiFeatureIndex * //=geometryIndex * return currentLine * }); */ function lineReduce(geojson, callback, initialValue) { var previousValue = initialValue; lineEach(geojson, function (currentLine, featureIndex, multiFeatureIndex, geometryIndex) { if (featureIndex === 0 && initialValue === undefined) previousValue = currentLine; else previousValue = callback(previousValue, currentLine, featureIndex, multiFeatureIndex, geometryIndex); }); return previousValue; } /** * Finds a particular 2-vertex LineString Segment from a GeoJSON using `@turf/meta` indexes. * * Negative indexes are permitted. * Point & MultiPoint will always return null. * * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry * @param {Object} [options={}] Optional parameters * @param {number} [options.featureIndex=0] Feature Index * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index * @param {number} [options.geometryIndex=0] Geometry Index * @param {number} [options.segmentIndex=0] Segment Index * @param {Object} [options.properties={}] Translate Properties to output LineString * @param {BBox} [options.bbox={}] Translate BBox to output LineString * @param {number|string} [options.id={}] Translate Id to output LineString * @returns {Feature} 2-vertex GeoJSON Feature LineString * @example * var multiLine = turf.multiLineString([ * [[10, 10], [50, 30], [30, 40]], * [[-10, -10], [-50, -30], [-30, -40]] * ]); * * // First Segment (defaults are 0) * turf.findSegment(multiLine); * // => Feature> * * // First Segment of 2nd Multi Feature * turf.findSegment(multiLine, {multiFeatureIndex: 1}); * // => Feature> * * // Last Segment of Last Multi Feature * turf.findSegment(multiLine, {multiFeatureIndex: -1, segmentIndex: -1}); * // => Feature> */ function findSegment(geojson, options) { // Optional Parameters options = options || {}; if (!helpers.isObject(options)) throw new Error('options is invalid'); var featureIndex = options.featureIndex || 0; var multiFeatureIndex = options.multiFeatureIndex || 0; var geometryIndex = options.geometryIndex || 0; var segmentIndex = options.segmentIndex || 0; // Find FeatureIndex var properties = options.properties; var geometry; switch (geojson.type) { case 'FeatureCollection': if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; properties = properties || geojson.features[featureIndex].properties; geometry = geojson.features[featureIndex].geometry; break; case 'Feature': properties = properties || geojson.properties; geometry = geojson.geometry; break; case 'Point': case 'MultiPoint': return null; case 'LineString': case 'Polygon': case 'MultiLineString': case 'MultiPolygon': geometry = geojson; break; default: throw new Error('geojson is invalid'); } // Find SegmentIndex if (geometry === null) return null; var coords = geometry.coordinates; switch (geometry.type) { case 'Point': case 'MultiPoint': return null; case 'LineString': if (segmentIndex < 0) segmentIndex = coords.length + segmentIndex - 1; return helpers.lineString([coords[segmentIndex], coords[segmentIndex + 1]], properties, options); case 'Polygon': if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; if (segmentIndex < 0) segmentIndex = coords[geometryIndex].length + segmentIndex - 1; return helpers.lineString([coords[geometryIndex][segmentIndex], coords[geometryIndex][segmentIndex + 1]], properties, options); case 'MultiLineString': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex].length + segmentIndex - 1; return helpers.lineString([coords[multiFeatureIndex][segmentIndex], coords[multiFeatureIndex][segmentIndex + 1]], properties, options); case 'MultiPolygon': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; if (segmentIndex < 0) segmentIndex = coords[multiFeatureIndex][geometryIndex].length - segmentIndex - 1; return helpers.lineString([coords[multiFeatureIndex][geometryIndex][segmentIndex], coords[multiFeatureIndex][geometryIndex][segmentIndex + 1]], properties, options); } throw new Error('geojson is invalid'); } /** * Finds a particular Point from a GeoJSON using `@turf/meta` indexes. * * Negative indexes are permitted. * * @param {FeatureCollection|Feature|Geometry} geojson Any GeoJSON Feature or Geometry * @param {Object} [options={}] Optional parameters * @param {number} [options.featureIndex=0] Feature Index * @param {number} [options.multiFeatureIndex=0] Multi-Feature Index * @param {number} [options.geometryIndex=0] Geometry Index * @param {number} [options.coordIndex=0] Coord Index * @param {Object} [options.properties={}] Translate Properties to output Point * @param {BBox} [options.bbox={}] Translate BBox to output Point * @param {number|string} [options.id={}] Translate Id to output Point * @returns {Feature} 2-vertex GeoJSON Feature Point * @example * var multiLine = turf.multiLineString([ * [[10, 10], [50, 30], [30, 40]], * [[-10, -10], [-50, -30], [-30, -40]] * ]); * * // First Segment (defaults are 0) * turf.findPoint(multiLine); * // => Feature> * * // First Segment of the 2nd Multi-Feature * turf.findPoint(multiLine, {multiFeatureIndex: 1}); * // => Feature> * * // Last Segment of last Multi-Feature * turf.findPoint(multiLine, {multiFeatureIndex: -1, coordIndex: -1}); * // => Feature> */ function findPoint(geojson, options) { // Optional Parameters options = options || {}; if (!helpers.isObject(options)) throw new Error('options is invalid'); var featureIndex = options.featureIndex || 0; var multiFeatureIndex = options.multiFeatureIndex || 0; var geometryIndex = options.geometryIndex || 0; var coordIndex = options.coordIndex || 0; // Find FeatureIndex var properties = options.properties; var geometry; switch (geojson.type) { case 'FeatureCollection': if (featureIndex < 0) featureIndex = geojson.features.length + featureIndex; properties = properties || geojson.features[featureIndex].properties; geometry = geojson.features[featureIndex].geometry; break; case 'Feature': properties = properties || geojson.properties; geometry = geojson.geometry; break; case 'Point': case 'MultiPoint': return null; case 'LineString': case 'Polygon': case 'MultiLineString': case 'MultiPolygon': geometry = geojson; break; default: throw new Error('geojson is invalid'); } // Find Coord Index if (geometry === null) return null; var coords = geometry.coordinates; switch (geometry.type) { case 'Point': return helpers.point(coords, properties, options); case 'MultiPoint': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; return helpers.point(coords[multiFeatureIndex], properties, options); case 'LineString': if (coordIndex < 0) coordIndex = coords.length + coordIndex; return helpers.point(coords[coordIndex], properties, options); case 'Polygon': if (geometryIndex < 0) geometryIndex = coords.length + geometryIndex; if (coordIndex < 0) coordIndex = coords[geometryIndex].length + coordIndex; return helpers.point(coords[geometryIndex][coordIndex], properties, options); case 'MultiLineString': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (coordIndex < 0) coordIndex = coords[multiFeatureIndex].length + coordIndex; return helpers.point(coords[multiFeatureIndex][coordIndex], properties, options); case 'MultiPolygon': if (multiFeatureIndex < 0) multiFeatureIndex = coords.length + multiFeatureIndex; if (geometryIndex < 0) geometryIndex = coords[multiFeatureIndex].length + geometryIndex; if (coordIndex < 0) coordIndex = coords[multiFeatureIndex][geometryIndex].length - coordIndex; return helpers.point(coords[multiFeatureIndex][geometryIndex][coordIndex], properties, options); } throw new Error('geojson is invalid'); } exports.coordEach = coordEach; exports.coordReduce = coordReduce; exports.propEach = propEach; exports.propReduce = propReduce; exports.featureEach = featureEach; exports.featureReduce = featureReduce; exports.coordAll = coordAll; exports.geomEach = geomEach; exports.geomReduce = geomReduce; exports.flattenEach = flattenEach; exports.flattenReduce = flattenReduce; exports.segmentEach = segmentEach; exports.segmentReduce = segmentReduce; exports.lineEach = lineEach; exports.lineReduce = lineReduce; exports.findSegment = findSegment; exports.findPoint = findPoint; },{"@turf/helpers":123}],123:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * @module helpers */ /** * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth. * * @memberof helpers * @type {number} */ exports.earthRadius = 6371008.8; /** * Unit of measurement factors using a spherical (non-ellipsoid) earth radius. * * @memberof helpers * @type {Object} */ exports.factors = { centimeters: exports.earthRadius * 100, centimetres: exports.earthRadius * 100, degrees: exports.earthRadius / 111325, feet: exports.earthRadius * 3.28084, inches: exports.earthRadius * 39.370, kilometers: exports.earthRadius / 1000, kilometres: exports.earthRadius / 1000, meters: exports.earthRadius, metres: exports.earthRadius, miles: exports.earthRadius / 1609.344, millimeters: exports.earthRadius * 1000, millimetres: exports.earthRadius * 1000, nauticalmiles: exports.earthRadius / 1852, radians: 1, yards: exports.earthRadius / 1.0936, }; /** * Units of measurement factors based on 1 meter. * * @memberof helpers * @type {Object} */ exports.unitsFactors = { centimeters: 100, centimetres: 100, degrees: 1 / 111325, feet: 3.28084, inches: 39.370, kilometers: 1 / 1000, kilometres: 1 / 1000, meters: 1, metres: 1, miles: 1 / 1609.344, millimeters: 1000, millimetres: 1000, nauticalmiles: 1 / 1852, radians: 1 / exports.earthRadius, yards: 1 / 1.0936, }; /** * Area of measurement factors based on 1 square meter. * * @memberof helpers * @type {Object} */ exports.areaFactors = { acres: 0.000247105, centimeters: 10000, centimetres: 10000, feet: 10.763910417, inches: 1550.003100006, kilometers: 0.000001, kilometres: 0.000001, meters: 1, metres: 1, miles: 3.86e-7, millimeters: 1000000, millimetres: 1000000, yards: 1.195990046, }; /** * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}. * * @name feature * @param {Geometry} geometry input geometry * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a GeoJSON Feature * @example * var geometry = { * "type": "Point", * "coordinates": [110, 50] * }; * * var feature = turf.feature(geometry); * * //=feature */ function feature(geom, properties, options) { if (options === void 0) { options = {}; } var feat = { type: "Feature" }; if (options.id === 0 || options.id) { feat.id = options.id; } if (options.bbox) { feat.bbox = options.bbox; } feat.properties = properties || {}; feat.geometry = geom; return feat; } exports.feature = feature; /** * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates. * For GeometryCollection type use `helpers.geometryCollection` * * @name geometry * @param {string} type Geometry Type * @param {Array} coordinates Coordinates * @param {Object} [options={}] Optional Parameters * @returns {Geometry} a GeoJSON Geometry * @example * var type = "Point"; * var coordinates = [110, 50]; * var geometry = turf.geometry(type, coordinates); * // => geometry */ function geometry(type, coordinates, options) { if (options === void 0) { options = {}; } switch (type) { case "Point": return point(coordinates).geometry; case "LineString": return lineString(coordinates).geometry; case "Polygon": return polygon(coordinates).geometry; case "MultiPoint": return multiPoint(coordinates).geometry; case "MultiLineString": return multiLineString(coordinates).geometry; case "MultiPolygon": return multiPolygon(coordinates).geometry; default: throw new Error(type + " is invalid"); } } exports.geometry = geometry; /** * Creates a {@link Point} {@link Feature} from a Position. * * @name point * @param {Array} coordinates longitude, latitude position (each in decimal degrees) * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a Point feature * @example * var point = turf.point([-75.343, 39.984]); * * //=point */ function point(coordinates, properties, options) { if (options === void 0) { options = {}; } var geom = { type: "Point", coordinates: coordinates, }; return feature(geom, properties, options); } exports.point = point; /** * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates. * * @name points * @param {Array>} coordinates an array of Points * @param {Object} [properties={}] Translate these properties to each Feature * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] * associated with the FeatureCollection * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} Point Feature * @example * var points = turf.points([ * [-75, 39], * [-80, 45], * [-78, 50] * ]); * * //=points */ function points(coordinates, properties, options) { if (options === void 0) { options = {}; } return featureCollection(coordinates.map(function (coords) { return point(coords, properties); }), options); } exports.points = points; /** * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings. * * @name polygon * @param {Array>>} coordinates an array of LinearRings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} Polygon Feature * @example * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' }); * * //=polygon */ function polygon(coordinates, properties, options) { if (options === void 0) { options = {}; } for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) { var ring = coordinates_1[_i]; if (ring.length < 4) { throw new Error("Each LinearRing of a Polygon must have 4 or more Positions."); } for (var j = 0; j < ring[ring.length - 1].length; j++) { // Check if first point of Polygon contains two numbers if (ring[ring.length - 1][j] !== ring[0][j]) { throw new Error("First and last Position are not equivalent."); } } } var geom = { type: "Polygon", coordinates: coordinates, }; return feature(geom, properties, options); } exports.polygon = polygon; /** * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates. * * @name polygons * @param {Array>>>} coordinates an array of Polygon coordinates * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} Polygon FeatureCollection * @example * var polygons = turf.polygons([ * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]], * ]); * * //=polygons */ function polygons(coordinates, properties, options) { if (options === void 0) { options = {}; } return featureCollection(coordinates.map(function (coords) { return polygon(coords, properties); }), options); } exports.polygons = polygons; /** * Creates a {@link LineString} {@link Feature} from an Array of Positions. * * @name lineString * @param {Array>} coordinates an array of Positions * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} LineString Feature * @example * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'}); * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'}); * * //=linestring1 * //=linestring2 */ function lineString(coordinates, properties, options) { if (options === void 0) { options = {}; } if (coordinates.length < 2) { throw new Error("coordinates must be an array of two or more positions"); } var geom = { type: "LineString", coordinates: coordinates, }; return feature(geom, properties, options); } exports.lineString = lineString; /** * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates. * * @name lineStrings * @param {Array>>} coordinates an array of LinearRings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] * associated with the FeatureCollection * @param {string|number} [options.id] Identifier associated with the FeatureCollection * @returns {FeatureCollection} LineString FeatureCollection * @example * var linestrings = turf.lineStrings([ * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]], * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]] * ]); * * //=linestrings */ function lineStrings(coordinates, properties, options) { if (options === void 0) { options = {}; } return featureCollection(coordinates.map(function (coords) { return lineString(coords, properties); }), options); } exports.lineStrings = lineStrings; /** * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}. * * @name featureCollection * @param {Feature[]} features input features * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {FeatureCollection} FeatureCollection of Features * @example * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'}); * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'}); * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'}); * * var collection = turf.featureCollection([ * locationA, * locationB, * locationC * ]); * * //=collection */ function featureCollection(features, options) { if (options === void 0) { options = {}; } var fc = { type: "FeatureCollection" }; if (options.id) { fc.id = options.id; } if (options.bbox) { fc.bbox = options.bbox; } fc.features = features; return fc; } exports.featureCollection = featureCollection; /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiLineString * @param {Array>>} coordinates an array of LineStrings * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a MultiLineString feature * @throws {Error} if no coordinates are passed * @example * var multiLine = turf.multiLineString([[[0,0],[10,10]]]); * * //=multiLine */ function multiLineString(coordinates, properties, options) { if (options === void 0) { options = {}; } var geom = { type: "MultiLineString", coordinates: coordinates, }; return feature(geom, properties, options); } exports.multiLineString = multiLineString; /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiPoint * @param {Array>} coordinates an array of Positions * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a MultiPoint feature * @throws {Error} if no coordinates are passed * @example * var multiPt = turf.multiPoint([[0,0],[10,10]]); * * //=multiPt */ function multiPoint(coordinates, properties, options) { if (options === void 0) { options = {}; } var geom = { type: "MultiPoint", coordinates: coordinates, }; return feature(geom, properties, options); } exports.multiPoint = multiPoint; /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name multiPolygon * @param {Array>>>} coordinates an array of Polygons * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a multipolygon feature * @throws {Error} if no coordinates are passed * @example * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]); * * //=multiPoly * */ function multiPolygon(coordinates, properties, options) { if (options === void 0) { options = {}; } var geom = { type: "MultiPolygon", coordinates: coordinates, }; return feature(geom, properties, options); } exports.multiPolygon = multiPolygon; /** * Creates a {@link Feature} based on a * coordinate array. Properties can be added optionally. * * @name geometryCollection * @param {Array} geometries an array of GeoJSON Geometries * @param {Object} [properties={}] an Object of key-value pairs to add as properties * @param {Object} [options={}] Optional Parameters * @param {Array} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature * @param {string|number} [options.id] Identifier associated with the Feature * @returns {Feature} a GeoJSON GeometryCollection Feature * @example * var pt = turf.geometry("Point", [100, 0]); * var line = turf.geometry("LineString", [[101, 0], [102, 1]]); * var collection = turf.geometryCollection([pt, line]); * * // => collection */ function geometryCollection(geometries, properties, options) { if (options === void 0) { options = {}; } var geom = { type: "GeometryCollection", geometries: geometries, }; return feature(geom, properties, options); } exports.geometryCollection = geometryCollection; /** * Round number to precision * * @param {number} num Number * @param {number} [precision=0] Precision * @returns {number} rounded number * @example * turf.round(120.4321) * //=120 * * turf.round(120.4321, 2) * //=120.43 */ function round(num, precision) { if (precision === void 0) { precision = 0; } if (precision && !(precision >= 0)) { throw new Error("precision must be a positive number"); } var multiplier = Math.pow(10, precision || 0); return Math.round(num * multiplier) / multiplier; } exports.round = round; /** * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit. * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @name radiansToLength * @param {number} radians in radians across the sphere * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres, * meters, kilometres, kilometers. * @returns {number} distance */ function radiansToLength(radians, units) { if (units === void 0) { units = "kilometers"; } var factor = exports.factors[units]; if (!factor) { throw new Error(units + " units is invalid"); } return radians * factor; } exports.radiansToLength = radiansToLength; /** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @name lengthToRadians * @param {number} distance in real units * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres, * meters, kilometres, kilometers. * @returns {number} radians */ function lengthToRadians(distance, units) { if (units === void 0) { units = "kilometers"; } var factor = exports.factors[units]; if (!factor) { throw new Error(units + " units is invalid"); } return distance / factor; } exports.lengthToRadians = lengthToRadians; /** * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet * * @name lengthToDegrees * @param {number} distance in real units * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres, * meters, kilometres, kilometers. * @returns {number} degrees */ function lengthToDegrees(distance, units) { return radiansToDegrees(lengthToRadians(distance, units)); } exports.lengthToDegrees = lengthToDegrees; /** * Converts any bearing angle from the north line direction (positive clockwise) * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line * * @name bearingToAzimuth * @param {number} bearing angle, between -180 and +180 degrees * @returns {number} angle between 0 and 360 degrees */ function bearingToAzimuth(bearing) { var angle = bearing % 360; if (angle < 0) { angle += 360; } return angle; } exports.bearingToAzimuth = bearingToAzimuth; /** * Converts an angle in radians to degrees * * @name radiansToDegrees * @param {number} radians angle in radians * @returns {number} degrees between 0 and 360 degrees */ function radiansToDegrees(radians) { var degrees = radians % (2 * Math.PI); return degrees * 180 / Math.PI; } exports.radiansToDegrees = radiansToDegrees; /** * Converts an angle in degrees to radians * * @name degreesToRadians * @param {number} degrees angle between 0 and 360 degrees * @returns {number} angle in radians */ function degreesToRadians(degrees) { var radians = degrees % 360; return radians * Math.PI / 180; } exports.degreesToRadians = degreesToRadians; /** * Converts a length to the requested unit. * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet * * @param {number} length to be converted * @param {Units} [originalUnit="kilometers"] of the length * @param {Units} [finalUnit="kilometers"] returned unit * @returns {number} the converted length */ function convertLength(length, originalUnit, finalUnit) { if (originalUnit === void 0) { originalUnit = "kilometers"; } if (finalUnit === void 0) { finalUnit = "kilometers"; } if (!(length >= 0)) { throw new Error("length must be a positive number"); } return radiansToLength(lengthToRadians(length, originalUnit), finalUnit); } exports.convertLength = convertLength; /** * Converts a area to the requested unit. * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches * @param {number} area to be converted * @param {Units} [originalUnit="meters"] of the distance * @param {Units} [finalUnit="kilometers"] returned unit * @returns {number} the converted distance */ function convertArea(area, originalUnit, finalUnit) { if (originalUnit === void 0) { originalUnit = "meters"; } if (finalUnit === void 0) { finalUnit = "kilometers"; } if (!(area >= 0)) { throw new Error("area must be a positive number"); } var startFactor = exports.areaFactors[originalUnit]; if (!startFactor) { throw new Error("invalid original units"); } var finalFactor = exports.areaFactors[finalUnit]; if (!finalFactor) { throw new Error("invalid final units"); } return (area / startFactor) * finalFactor; } exports.convertArea = convertArea; /** * isNumber * * @param {*} num Number to validate * @returns {boolean} true/false * @example * turf.isNumber(123) * //=true * turf.isNumber('foo') * //=false */ function isNumber(num) { return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num); } exports.isNumber = isNumber; /** * isObject * * @param {*} input variable to validate * @returns {boolean} true/false * @example * turf.isObject({elevation: 10}) * //=true * turf.isObject('foo') * //=false */ function isObject(input) { return (!!input) && (input.constructor === Object); } exports.isObject = isObject; /** * Validate BBox * * @private * @param {Array} bbox BBox to validate * @returns {void} * @throws Error if BBox is not valid * @example * validateBBox([-180, -40, 110, 50]) * //=OK * validateBBox([-180, -40]) * //=Error * validateBBox('Foo') * //=Error * validateBBox(5) * //=Error * validateBBox(null) * //=Error * validateBBox(undefined) * //=Error */ function validateBBox(bbox) { if (!bbox) { throw new Error("bbox is required"); } if (!Array.isArray(bbox)) { throw new Error("bbox must be an Array"); } if (bbox.length !== 4 && bbox.length !== 6) { throw new Error("bbox must be an Array of 4 or 6 numbers"); } bbox.forEach(function (num) { if (!isNumber(num)) { throw new Error("bbox must only contain numbers"); } }); } exports.validateBBox = validateBBox; /** * Validate Id * * @private * @param {string|number} id Id to validate * @returns {void} * @throws Error if Id is not valid * @example * validateId([-180, -40, 110, 50]) * //=Error * validateId([-180, -40]) * //=Error * validateId('Foo') * //=OK * validateId(5) * //=OK * validateId(null) * //=Error * validateId(undefined) * //=Error */ function validateId(id) { if (!id) { throw new Error("id is required"); } if (["string", "number"].indexOf(typeof id) === -1) { throw new Error("id must be a number or a string"); } } exports.validateId = validateId; // Deprecated methods function radians2degrees() { throw new Error("method has been renamed to `radiansToDegrees`"); } exports.radians2degrees = radians2degrees; function degrees2radians() { throw new Error("method has been renamed to `degreesToRadians`"); } exports.degrees2radians = degrees2radians; function distanceToDegrees() { throw new Error("method has been renamed to `lengthToDegrees`"); } exports.distanceToDegrees = distanceToDegrees; function distanceToRadians() { throw new Error("method has been renamed to `lengthToRadians`"); } exports.distanceToRadians = distanceToRadians; function radiansToDistance() { throw new Error("method has been renamed to `radiansToLength`"); } exports.radiansToDistance = radiansToDistance; function bearingToAngle() { throw new Error("method has been renamed to `bearingToAzimuth`"); } exports.bearingToAngle = bearingToAngle; function convertDistance() { throw new Error("method has been renamed to `convertLength`"); } exports.convertDistance = convertDistance; },{}],124:[function(require,module,exports){ "use strict"; var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; result["default"] = mod; return result; }; Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("@turf/helpers"); var invariant_1 = require("@turf/invariant"); var martinez = __importStar(require("martinez-polygon-clipping")); /** * Takes two {@link Polygon|polygon} or {@link MultiPolygon|multi-polygon} geometries and * finds their polygonal intersection. If they don't intersect, returns null. * * @name intersect * @param {Feature} poly1 the first polygon or multipolygon * @param {Feature} poly2 the second polygon or multipolygon * @param {Object} [options={}] Optional Parameters * @param {Object} [options.properties={}] Translate GeoJSON Properties to Feature * @returns {Feature|null} returns a feature representing the area they share (either a {@link Polygon} or * {@link MultiPolygon}). If they do not share any area, returns `null`. * @example * var poly1 = turf.polygon([[ * [-122.801742, 45.48565], * [-122.801742, 45.60491], * [-122.584762, 45.60491], * [-122.584762, 45.48565], * [-122.801742, 45.48565] * ]]); * * var poly2 = turf.polygon([[ * [-122.520217, 45.535693], * [-122.64038, 45.553967], * [-122.720031, 45.526554], * [-122.669906, 45.507309], * [-122.723464, 45.446643], * [-122.532577, 45.408574], * [-122.487258, 45.477466], * [-122.520217, 45.535693] * ]]); * * var intersection = turf.intersect(poly1, poly2); * * //addToMap * var addToMap = [poly1, poly2, intersection]; */ function intersect(poly1, poly2, options) { if (options === void 0) { options = {}; } var geom1 = invariant_1.getGeom(poly1); var geom2 = invariant_1.getGeom(poly2); if (geom1.type === "Polygon" && geom2.type === "Polygon") { var intersection = martinez.intersection(geom1.coordinates, geom2.coordinates); if (intersection === null || intersection.length === 0) { return null; } if (intersection.length === 1) { var start = intersection[0][0][0]; var end = intersection[0][0][intersection[0][0].length - 1]; if (start[0] === end[0] && start[1] === end[1]) { return helpers_1.polygon(intersection[0], options.properties); } return null; } return helpers_1.multiPolygon(intersection, options.properties); } else if (geom1.type === "MultiPolygon") { var resultCoords = []; // iterate through the polygon and run intersect with each part, adding to the resultCoords. for (var _i = 0, _a = geom1.coordinates; _i < _a.length; _i++) { var coords = _a[_i]; var subGeom = invariant_1.getGeom(helpers_1.polygon(coords)); var subIntersection = intersect(subGeom, geom2); if (subIntersection) { var subIntGeom = invariant_1.getGeom(subIntersection); if (subIntGeom.type === "Polygon") { resultCoords.push(subIntGeom.coordinates); } else if (subIntGeom.type === "MultiPolygon") { resultCoords = resultCoords.concat(subIntGeom.coordinates); } else { throw new Error("intersection is invalid"); } } } // Make a polygon with the result if (resultCoords.length === 0) { return null; } if (resultCoords.length === 1) { return helpers_1.polygon(resultCoords[0], options.properties); } else { return helpers_1.multiPolygon(resultCoords, options.properties); } } else if (geom2.type === "MultiPolygon") { // geom1 is a polygon and geom2 a multiPolygon, // put the multiPolygon first and fallback to the previous case. return intersect(geom2, geom1); } else { // handle invalid geometry types throw new Error("poly1 and poly2 must be either polygons or multiPolygons"); } } exports.default = intersect; },{"@turf/helpers":123,"@turf/invariant":125,"martinez-polygon-clipping":265}],125:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("@turf/helpers"); /** * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate. * * @name getCoord * @param {Array|Geometry|Feature} coord GeoJSON Point or an Array of numbers * @returns {Array} coordinates * @example * var pt = turf.point([10, 10]); * * var coord = turf.getCoord(pt); * //= [10, 10] */ function getCoord(coord) { if (!coord) { throw new Error("coord is required"); } if (!Array.isArray(coord)) { if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") { return coord.geometry.coordinates; } if (coord.type === "Point") { return coord.coordinates; } } if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) { return coord; } throw new Error("coord must be GeoJSON Point or an Array of numbers"); } exports.getCoord = getCoord; /** * Unwrap coordinates from a Feature, Geometry Object or an Array * * @name getCoords * @param {Array|Geometry|Feature} coords Feature, Geometry Object or an Array * @returns {Array} coordinates * @example * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]); * * var coords = turf.getCoords(poly); * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]] */ function getCoords(coords) { if (Array.isArray(coords)) { return coords; } // Feature if (coords.type === "Feature") { if (coords.geometry !== null) { return coords.geometry.coordinates; } } else { // Geometry if (coords.coordinates) { return coords.coordinates; } } throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array"); } exports.getCoords = getCoords; /** * Checks if coordinates contains a number * * @name containsNumber * @param {Array} coordinates GeoJSON Coordinates * @returns {boolean} true if Array contains a number */ function containsNumber(coordinates) { if (coordinates.length > 1 && helpers_1.isNumber(coordinates[0]) && helpers_1.isNumber(coordinates[1])) { return true; } if (Array.isArray(coordinates[0]) && coordinates[0].length) { return containsNumber(coordinates[0]); } throw new Error("coordinates must only contain numbers"); } exports.containsNumber = containsNumber; /** * Enforce expectations about types of GeoJSON objects for Turf. * * @name geojsonType * @param {GeoJSON} value any GeoJSON object * @param {string} type expected GeoJSON type * @param {string} name name of calling function * @throws {Error} if value is not the expected type. */ function geojsonType(value, type, name) { if (!type || !name) { throw new Error("type and name required"); } if (!value || value.type !== type) { throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type); } } exports.geojsonType = geojsonType; /** * Enforce expectations about types of {@link Feature} inputs for Turf. * Internally this uses {@link geojsonType} to judge geometry types. * * @name featureOf * @param {Feature} feature a feature with an expected geometry type * @param {string} type expected GeoJSON type * @param {string} name name of calling function * @throws {Error} error if value is not the expected type. */ function featureOf(feature, type, name) { if (!feature) { throw new Error("No feature passed"); } if (!name) { throw new Error(".featureOf() requires a name"); } if (!feature || feature.type !== "Feature" || !feature.geometry) { throw new Error("Invalid input to " + name + ", Feature with geometry required"); } if (!feature.geometry || feature.geometry.type !== type) { throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type); } } exports.featureOf = featureOf; /** * Enforce expectations about types of {@link FeatureCollection} inputs for Turf. * Internally this uses {@link geojsonType} to judge geometry types. * * @name collectionOf * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged * @param {string} type expected GeoJSON type * @param {string} name name of calling function * @throws {Error} if value is not the expected type. */ function collectionOf(featureCollection, type, name) { if (!featureCollection) { throw new Error("No featureCollection passed"); } if (!name) { throw new Error(".collectionOf() requires a name"); } if (!featureCollection || featureCollection.type !== "FeatureCollection") { throw new Error("Invalid input to " + name + ", FeatureCollection required"); } for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) { var feature = _a[_i]; if (!feature || feature.type !== "Feature" || !feature.geometry) { throw new Error("Invalid input to " + name + ", Feature with geometry required"); } if (!feature.geometry || feature.geometry.type !== type) { throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type); } } } exports.collectionOf = collectionOf; /** * Get Geometry from Feature or Geometry Object * * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object * @returns {Geometry|null} GeoJSON Geometry Object * @throws {Error} if geojson is not a Feature or Geometry Object * @example * var point = { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [110, 40] * } * } * var geom = turf.getGeom(point) * //={"type": "Point", "coordinates": [110, 40]} */ function getGeom(geojson) { if (geojson.type === "Feature") { return geojson.geometry; } return geojson; } exports.getGeom = getGeom; /** * Get GeoJSON object's type, Geometry type is prioritize. * * @param {GeoJSON} geojson GeoJSON object * @param {string} [name="geojson"] name of the variable to display in error message * @returns {string} GeoJSON type * @example * var point = { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [110, 40] * } * } * var geom = turf.getType(point) * //="Point" */ function getType(geojson, name) { if (geojson.type === "FeatureCollection") { return "FeatureCollection"; } if (geojson.type === "GeometryCollection") { return "GeometryCollection"; } if (geojson.type === "Feature" && geojson.geometry !== null) { return geojson.geometry.type; } return geojson.type; } exports.getType = getType; },{"@turf/helpers":123}],126:[function(require,module,exports){ "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; } Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("@turf/helpers"); var invariant_1 = require("@turf/invariant"); var line_segment_1 = __importDefault(require("@turf/line-segment")); var meta_1 = require("@turf/meta"); var geojson_rbush_1 = __importDefault(require("geojson-rbush")); /** * Takes any LineString or Polygon GeoJSON and returns the intersecting point(s). * * @name lineIntersect * @param {GeoJSON} line1 any LineString or Polygon * @param {GeoJSON} line2 any LineString or Polygon * @returns {FeatureCollection} point(s) that intersect both * @example * var line1 = turf.lineString([[126, -11], [129, -21]]); * var line2 = turf.lineString([[123, -18], [131, -14]]); * var intersects = turf.lineIntersect(line1, line2); * * //addToMap * var addToMap = [line1, line2, intersects] */ function lineIntersect(line1, line2) { var unique = {}; var results = []; // First, normalize geometries to features // Then, handle simple 2-vertex segments if (line1.type === "LineString") { line1 = helpers_1.feature(line1); } if (line2.type === "LineString") { line2 = helpers_1.feature(line2); } if (line1.type === "Feature" && line2.type === "Feature" && line1.geometry !== null && line2.geometry !== null && line1.geometry.type === "LineString" && line2.geometry.type === "LineString" && line1.geometry.coordinates.length === 2 && line2.geometry.coordinates.length === 2) { var intersect = intersects(line1, line2); if (intersect) { results.push(intersect); } return helpers_1.featureCollection(results); } // Handles complex GeoJSON Geometries var tree = geojson_rbush_1.default(); tree.load(line_segment_1.default(line2)); meta_1.featureEach(line_segment_1.default(line1), function (segment) { meta_1.featureEach(tree.search(segment), function (match) { var intersect = intersects(segment, match); if (intersect) { // prevent duplicate points https://github.com/Turfjs/turf/issues/688 var key = invariant_1.getCoords(intersect).join(","); if (!unique[key]) { unique[key] = true; results.push(intersect); } } }); }); return helpers_1.featureCollection(results); } /** * Find a point that intersects LineStrings with two coordinates each * * @private * @param {Feature} line1 GeoJSON LineString (Must only contain 2 coordinates) * @param {Feature} line2 GeoJSON LineString (Must only contain 2 coordinates) * @returns {Feature} intersecting GeoJSON Point */ function intersects(line1, line2) { var coords1 = invariant_1.getCoords(line1); var coords2 = invariant_1.getCoords(line2); if (coords1.length !== 2) { throw new Error(" line1 must only contain 2 coordinates"); } if (coords2.length !== 2) { throw new Error(" line2 must only contain 2 coordinates"); } var x1 = coords1[0][0]; var y1 = coords1[0][1]; var x2 = coords1[1][0]; var y2 = coords1[1][1]; var x3 = coords2[0][0]; var y3 = coords2[0][1]; var x4 = coords2[1][0]; var y4 = coords2[1][1]; var denom = ((y4 - y3) * (x2 - x1)) - ((x4 - x3) * (y2 - y1)); var numeA = ((x4 - x3) * (y1 - y3)) - ((y4 - y3) * (x1 - x3)); var numeB = ((x2 - x1) * (y1 - y3)) - ((y2 - y1) * (x1 - x3)); if (denom === 0) { if (numeA === 0 && numeB === 0) { return null; } return null; } var uA = numeA / denom; var uB = numeB / denom; if (uA >= 0 && uA <= 1 && uB >= 0 && uB <= 1) { var x = x1 + (uA * (x2 - x1)); var y = y1 + (uA * (y2 - y1)); return helpers_1.point([x, y]); } return null; } exports.default = lineIntersect; },{"@turf/helpers":123,"@turf/invariant":125,"@turf/line-segment":128,"@turf/meta":127,"geojson-rbush":224}],127:[function(require,module,exports){ arguments[4][122][0].apply(exports,arguments) },{"@turf/helpers":123,"dup":122}],128:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("@turf/helpers"); var invariant_1 = require("@turf/invariant"); var meta_1 = require("@turf/meta"); /** * Creates a {@link FeatureCollection} of 2-vertex {@link LineString} segments from a * {@link LineString|(Multi)LineString} or {@link Polygon|(Multi)Polygon}. * * @name lineSegment * @param {GeoJSON} geojson GeoJSON Polygon or LineString * @returns {FeatureCollection} 2-vertex line segments * @example * var polygon = turf.polygon([[[-50, 5], [-40, -10], [-50, -10], [-40, 5], [-50, 5]]]); * var segments = turf.lineSegment(polygon); * * //addToMap * var addToMap = [polygon, segments] */ function lineSegment(geojson) { if (!geojson) { throw new Error("geojson is required"); } var results = []; meta_1.flattenEach(geojson, function (feature) { lineSegmentFeature(feature, results); }); return helpers_1.featureCollection(results); } /** * Line Segment * * @private * @param {Feature} geojson Line or polygon feature * @param {Array} results push to results * @returns {void} */ function lineSegmentFeature(geojson, results) { var coords = []; var geometry = geojson.geometry; if (geometry !== null) { switch (geometry.type) { case "Polygon": coords = invariant_1.getCoords(geometry); break; case "LineString": coords = [invariant_1.getCoords(geometry)]; } coords.forEach(function (coord) { var segments = createSegments(coord, geojson.properties); segments.forEach(function (segment) { segment.id = results.length; results.push(segment); }); }); } } /** * Create Segments from LineString coordinates * * @private * @param {Array>} coords LineString coordinates * @param {*} properties GeoJSON properties * @returns {Array>} line segments */ function createSegments(coords, properties) { var segments = []; coords.reduce(function (previousCoords, currentCoords) { var segment = helpers_1.lineString([previousCoords, currentCoords], properties); segment.bbox = bbox(previousCoords, currentCoords); segments.push(segment); return currentCoords; }); return segments; } /** * Create BBox between two coordinates (faster than @turf/bbox) * * @private * @param {Array} coords1 Point coordinate * @param {Array} coords2 Point coordinate * @returns {BBox} [west, south, east, north] */ function bbox(coords1, coords2) { var x1 = coords1[0]; var y1 = coords1[1]; var x2 = coords2[0]; var y2 = coords2[1]; var west = (x1 < x2) ? x1 : x2; var south = (y1 < y2) ? y1 : y2; var east = (x1 > x2) ? x1 : x2; var north = (y1 > y2) ? y1 : y2; return [west, south, east, north]; } exports.default = lineSegment; },{"@turf/helpers":123,"@turf/invariant":125,"@turf/meta":129}],129:[function(require,module,exports){ arguments[4][122][0].apply(exports,arguments) },{"@turf/helpers":123,"dup":122}],130:[function(require,module,exports){ /** * Callback for coordEach * * @private * @callback coordEachCallback * @param {[number, number]} currentCoords The current coordinates being processed. * @param {number} currentIndex The index of the current element being processed in the * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. */ /** * Iterate over coordinates in any GeoJSON object, similar to Array.forEach() * * @name coordEach * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (currentCoords, currentIndex) * @param {boolean} [excludeWrapCoord=false] whether or not to include * the final coordinate of LinearRings that wraps the ring in its iteration. * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.coordEach(features, function (currentCoords, currentIndex) { * //=currentCoords * //=currentIndex * }); */ function coordEach(layer, callback, excludeWrapCoord) { var i, j, k, g, l, geometry, stopG, coords, geometryMaybeCollection, wrapShrink = 0, currentIndex = 0, isGeometryCollection, isFeatureCollection = layer.type === 'FeatureCollection', isFeature = layer.type === 'Feature', stop = isFeatureCollection ? layer.features.length : 1; // This logic may look a little weird. The reason why it is that way // is because it's trying to be fast. GeoJSON supports multiple kinds // of objects at its root: FeatureCollection, Features, Geometries. // This function has the responsibility of handling all of them, and that // means that some of the `for` loops you see below actually just don't apply // to certain inputs. For instance, if you give this just a // Point geometry, then both loops are short-circuited and all we do // is gradually rename the input until it's called 'geometry'. // // This also aims to allocate as few resources as possible: just a // few numbers and booleans, rather than any temporary arrays as would // be required with the normalization approach. for (i = 0; i < stop; i++) { geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry : (isFeature ? layer.geometry : layer)); isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection'; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (g = 0; g < stopG; g++) { geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection; coords = geometry.coordinates; wrapShrink = (excludeWrapCoord && (geometry.type === 'Polygon' || geometry.type === 'MultiPolygon')) ? 1 : 0; if (geometry.type === 'Point') { callback(coords, currentIndex); currentIndex++; } else if (geometry.type === 'LineString' || geometry.type === 'MultiPoint') { for (j = 0; j < coords.length; j++) { callback(coords[j], currentIndex); currentIndex++; } } else if (geometry.type === 'Polygon' || geometry.type === 'MultiLineString') { for (j = 0; j < coords.length; j++) for (k = 0; k < coords[j].length - wrapShrink; k++) { callback(coords[j][k], currentIndex); currentIndex++; } } else if (geometry.type === 'MultiPolygon') { for (j = 0; j < coords.length; j++) for (k = 0; k < coords[j].length; k++) for (l = 0; l < coords[j][k].length - wrapShrink; l++) { callback(coords[j][k][l], currentIndex); currentIndex++; } } else if (geometry.type === 'GeometryCollection') { for (j = 0; j < geometry.geometries.length; j++) coordEach(geometry.geometries[j], callback, excludeWrapCoord); } else { throw new Error('Unknown Geometry Type'); } } } } module.exports.coordEach = coordEach; /** * Callback for coordReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @private * @callback coordReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {[number, number]} currentCoords The current coordinate being processed. * @param {number} currentIndex The index of the current element being processed in the * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. */ /** * Reduce coordinates in any GeoJSON object, similar to Array.reduce() * * @name coordReduce * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentCoords, currentIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @param {boolean} [excludeWrapCoord=false] whether or not to include * the final coordinate of LinearRings that wraps the ring in its iteration. * @returns {*} The value that results from the reduction. * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.coordReduce(features, function (previousValue, currentCoords, currentIndex) { * //=previousValue * //=currentCoords * //=currentIndex * return currentCoords; * }); */ function coordReduce(layer, callback, initialValue, excludeWrapCoord) { var previousValue = initialValue; coordEach(layer, function (currentCoords, currentIndex) { if (currentIndex === 0 && initialValue === undefined) { previousValue = currentCoords; } else { previousValue = callback(previousValue, currentCoords, currentIndex); } }, excludeWrapCoord); return previousValue; } module.exports.coordReduce = coordReduce; /** * Callback for propEach * * @private * @callback propEachCallback * @param {*} currentProperties The current properties being processed. * @param {number} currentIndex The index of the current element being processed in the * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. */ /** * Iterate over properties in any GeoJSON object, similar to Array.forEach() * * @name propEach * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (currentProperties, currentIndex) * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {"foo": "bar"}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {"hello": "world"}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.propEach(features, function (currentProperties, currentIndex) { * //=currentProperties * //=currentIndex * }); */ function propEach(layer, callback) { var i; switch (layer.type) { case 'FeatureCollection': for (i = 0; i < layer.features.length; i++) { callback(layer.features[i].properties, i); } break; case 'Feature': callback(layer.properties, 0); break; } } module.exports.propEach = propEach; /** * Callback for propReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @private * @callback propReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {*} currentProperties The current properties being processed. * @param {number} currentIndex The index of the current element being processed in the * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. */ /** * Reduce properties in any GeoJSON object into a single value, * similar to how Array.reduce works. However, in this case we lazily run * the reduction, so an array of all properties is unnecessary. * * @name propReduce * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentProperties, currentIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {"foo": "bar"}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {"hello": "world"}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.propReduce(features, function (previousValue, currentProperties, currentIndex) { * //=previousValue * //=currentProperties * //=currentIndex * return currentProperties * }); */ function propReduce(layer, callback, initialValue) { var previousValue = initialValue; propEach(layer, function (currentProperties, currentIndex) { if (currentIndex === 0 && initialValue === undefined) { previousValue = currentProperties; } else { previousValue = callback(previousValue, currentProperties, currentIndex); } }); return previousValue; } module.exports.propReduce = propReduce; /** * Callback for featureEach * * @private * @callback featureEachCallback * @param {Feature} currentFeature The current feature being processed. * @param {number} currentIndex The index of the current element being processed in the * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. */ /** * Iterate over features in any GeoJSON object, similar to * Array.forEach. * * @name featureEach * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (currentFeature, currentIndex) * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.featureEach(features, function (currentFeature, currentIndex) { * //=currentFeature * //=currentIndex * }); */ function featureEach(layer, callback) { if (layer.type === 'Feature') { callback(layer, 0); } else if (layer.type === 'FeatureCollection') { for (var i = 0; i < layer.features.length; i++) { callback(layer.features[i], i); } } } module.exports.featureEach = featureEach; /** * Callback for featureReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @private * @callback featureReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {Feature} currentFeature The current Feature being processed. * @param {number} currentIndex The index of the current element being processed in the * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. */ /** * Reduce features in any GeoJSON object, similar to Array.reduce(). * * @name featureReduce * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentFeature, currentIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {"foo": "bar"}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {"hello": "world"}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.featureReduce(features, function (previousValue, currentFeature, currentIndex) { * //=previousValue * //=currentFeature * //=currentIndex * return currentFeature * }); */ function featureReduce(layer, callback, initialValue) { var previousValue = initialValue; featureEach(layer, function (currentFeature, currentIndex) { if (currentIndex === 0 && initialValue === undefined) { previousValue = currentFeature; } else { previousValue = callback(previousValue, currentFeature, currentIndex); } }); return previousValue; } module.exports.featureReduce = featureReduce; /** * Get all coordinates from any GeoJSON object. * * @name coordAll * @param {Object} layer any GeoJSON object * @returns {Array>} coordinate position array * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * var coords = turf.coordAll(features); * //=coords */ function coordAll(layer) { var coords = []; coordEach(layer, function (coord) { coords.push(coord); }); return coords; } module.exports.coordAll = coordAll; /** * Iterate over each geometry in any GeoJSON object, similar to Array.forEach() * * @name geomEach * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (currentGeometry, currentIndex) * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.geomEach(features, function (currentGeometry, currentIndex) { * //=currentGeometry * //=currentIndex * }); */ function geomEach(layer, callback) { var i, j, g, geometry, stopG, geometryMaybeCollection, isGeometryCollection, currentIndex = 0, isFeatureCollection = layer.type === 'FeatureCollection', isFeature = layer.type === 'Feature', stop = isFeatureCollection ? layer.features.length : 1; // This logic may look a little weird. The reason why it is that way // is because it's trying to be fast. GeoJSON supports multiple kinds // of objects at its root: FeatureCollection, Features, Geometries. // This function has the responsibility of handling all of them, and that // means that some of the `for` loops you see below actually just don't apply // to certain inputs. For instance, if you give this just a // Point geometry, then both loops are short-circuited and all we do // is gradually rename the input until it's called 'geometry'. // // This also aims to allocate as few resources as possible: just a // few numbers and booleans, rather than any temporary arrays as would // be required with the normalization approach. for (i = 0; i < stop; i++) { geometryMaybeCollection = (isFeatureCollection ? layer.features[i].geometry : (isFeature ? layer.geometry : layer)); isGeometryCollection = geometryMaybeCollection.type === 'GeometryCollection'; stopG = isGeometryCollection ? geometryMaybeCollection.geometries.length : 1; for (g = 0; g < stopG; g++) { geometry = isGeometryCollection ? geometryMaybeCollection.geometries[g] : geometryMaybeCollection; if (geometry.type === 'Point' || geometry.type === 'LineString' || geometry.type === 'MultiPoint' || geometry.type === 'Polygon' || geometry.type === 'MultiLineString' || geometry.type === 'MultiPolygon') { callback(geometry, currentIndex); currentIndex++; } else if (geometry.type === 'GeometryCollection') { for (j = 0; j < geometry.geometries.length; j++) { callback(geometry.geometries[j], currentIndex); currentIndex++; } } else { throw new Error('Unknown Geometry Type'); } } } } module.exports.geomEach = geomEach; /** * Callback for geomReduce * * The first time the callback function is called, the values provided as arguments depend * on whether the reduce method has an initialValue argument. * * If an initialValue is provided to the reduce method: * - The previousValue argument is initialValue. * - The currentValue argument is the value of the first element present in the array. * * If an initialValue is not provided: * - The previousValue argument is the value of the first element present in the array. * - The currentValue argument is the value of the second element present in the array. * * @private * @callback geomReduceCallback * @param {*} previousValue The accumulated value previously returned in the last invocation * of the callback, or initialValue, if supplied. * @param {*} currentGeometry The current Feature being processed. * @param {number} currentIndex The index of the current element being processed in the * array.Starts at index 0, if an initialValue is provided, and at index 1 otherwise. */ /** * Reduce geometry in any GeoJSON object, similar to Array.reduce(). * * @name geomReduce * @param {Object} layer any GeoJSON object * @param {Function} callback a method that takes (previousValue, currentGeometry, currentIndex) * @param {*} [initialValue] Value to use as the first argument to the first call of the callback. * @returns {*} The value that results from the reduction. * @example * var features = { * "type": "FeatureCollection", * "features": [ * { * "type": "Feature", * "properties": {"foo": "bar"}, * "geometry": { * "type": "Point", * "coordinates": [26, 37] * } * }, * { * "type": "Feature", * "properties": {"hello": "world"}, * "geometry": { * "type": "Point", * "coordinates": [36, 53] * } * } * ] * }; * turf.geomReduce(features, function (previousValue, currentGeometry, currentIndex) { * //=previousValue * //=currentGeometry * //=currentIndex * return currentGeometry * }); */ function geomReduce(layer, callback, initialValue) { var previousValue = initialValue; geomEach(layer, function (currentGeometry, currentIndex) { if (currentIndex === 0 && initialValue === undefined) { previousValue = currentGeometry; } else { previousValue = callback(previousValue, currentGeometry, currentIndex); } }); return previousValue; } module.exports.geomReduce = geomReduce; },{}],131:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var helpers_1 = require("@turf/helpers"); var invariant_1 = require("@turf/invariant"); /** * Converts a {@link Polygon} to {@link LineString|(Multi)LineString} or {@link MultiPolygon} to a * {@link FeatureCollection} of {@link LineString|(Multi)LineString}. * * @name polygonToLine * @param {Feature} poly Feature to convert * @param {Object} [options={}] Optional parameters * @param {Object} [options.properties={}] translates GeoJSON properties to Feature * @returns {FeatureCollection|Feature} converted (Multi)Polygon to (Multi)LineString * @example * var poly = turf.polygon([[[125, -30], [145, -30], [145, -20], [125, -20], [125, -30]]]); * * var line = turf.polygonToLine(poly); * * //addToMap * var addToMap = [line]; */ function default_1(poly, options) { if (options === void 0) { options = {}; } var geom = invariant_1.getGeom(poly); if (!options.properties && poly.type === "Feature") { options.properties = poly.properties; } switch (geom.type) { case "Polygon": return polygonToLine(geom, options); case "MultiPolygon": return multiPolygonToLine(geom, options); default: throw new Error("invalid poly"); } } exports.default = default_1; /** * @private */ function polygonToLine(poly, options) { if (options === void 0) { options = {}; } var geom = invariant_1.getGeom(poly); var type = geom.type; var coords = geom.coordinates; var properties = options.properties ? options.properties : poly.type === "Feature" ? poly.properties : {}; return coordsToLine(coords, properties); } exports.polygonToLine = polygonToLine; /** * @private */ function multiPolygonToLine(multiPoly, options) { if (options === void 0) { options = {}; } var geom = invariant_1.getGeom(multiPoly); var type = geom.type; var coords = geom.coordinates; var properties = options.properties ? options.properties : multiPoly.type === "Feature" ? multiPoly.properties : {}; var lines = []; coords.forEach(function (coord) { lines.push(coordsToLine(coord, properties)); }); return helpers_1.featureCollection(lines); } exports.multiPolygonToLine = multiPolygonToLine; /** * @private */ function coordsToLine(coords, properties) { if (coords.length > 1) { return helpers_1.multiLineString(coords, properties); } return helpers_1.lineString(coords[0], properties); } exports.coordsToLine = coordsToLine; },{"@turf/helpers":123,"@turf/invariant":125}],132:[function(require,module,exports){ var asn1 = exports; asn1.bignum = require('bn.js'); asn1.define = require('./asn1/api').define; asn1.base = require('./asn1/base'); asn1.constants = require('./asn1/constants'); asn1.decoders = require('./asn1/decoders'); asn1.encoders = require('./asn1/encoders'); },{"./asn1/api":133,"./asn1/base":135,"./asn1/constants":139,"./asn1/decoders":141,"./asn1/encoders":144,"bn.js":147}],133:[function(require,module,exports){ var asn1 = require('../asn1'); var inherits = require('inherits'); var api = exports; api.define = function define(name, body) { return new Entity(name, body); }; function Entity(name, body) { this.name = name; this.body = body; this.decoders = {}; this.encoders = {}; }; Entity.prototype._createNamed = function createNamed(base) { var named; try { named = require('vm').runInThisContext( '(function ' + this.name + '(entity) {\n' + ' this._initNamed(entity);\n' + '})' ); } catch (e) { named = function (entity) { this._initNamed(entity); }; } inherits(named, base); named.prototype._initNamed = function initnamed(entity) { base.call(this, entity); }; return new named(this); }; Entity.prototype._getDecoder = function _getDecoder(enc) { enc = enc || 'der'; // Lazily create decoder if (!this.decoders.hasOwnProperty(enc)) this.decoders[enc] = this._createNamed(asn1.decoders[enc]); return this.decoders[enc]; }; Entity.prototype.decode = function decode(data, enc, options) { return this._getDecoder(enc).decode(data, options); }; Entity.prototype._getEncoder = function _getEncoder(enc) { enc = enc || 'der'; // Lazily create encoder if (!this.encoders.hasOwnProperty(enc)) this.encoders[enc] = this._createNamed(asn1.encoders[enc]); return this.encoders[enc]; }; Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) { return this._getEncoder(enc).encode(data, reporter); }; },{"../asn1":132,"inherits":262,"vm":344}],134:[function(require,module,exports){ var inherits = require('inherits'); var Reporter = require('../base').Reporter; var Buffer = require('buffer').Buffer; function DecoderBuffer(base, options) { Reporter.call(this, options); if (!Buffer.isBuffer(base)) { this.error('Input not Buffer'); return; } this.base = base; this.offset = 0; this.length = base.length; } inherits(DecoderBuffer, Reporter); exports.DecoderBuffer = DecoderBuffer; DecoderBuffer.prototype.save = function save() { return { offset: this.offset, reporter: Reporter.prototype.save.call(this) }; }; DecoderBuffer.prototype.restore = function restore(save) { // Return skipped data var res = new DecoderBuffer(this.base); res.offset = save.offset; res.length = this.offset; this.offset = save.offset; Reporter.prototype.restore.call(this, save.reporter); return res; }; DecoderBuffer.prototype.isEmpty = function isEmpty() { return this.offset === this.length; }; DecoderBuffer.prototype.readUInt8 = function readUInt8(fail) { if (this.offset + 1 <= this.length) return this.base.readUInt8(this.offset++, true); else return this.error(fail || 'DecoderBuffer overrun'); } DecoderBuffer.prototype.skip = function skip(bytes, fail) { if (!(this.offset + bytes <= this.length)) return this.error(fail || 'DecoderBuffer overrun'); var res = new DecoderBuffer(this.base); // Share reporter state res._reporterState = this._reporterState; res.offset = this.offset; res.length = this.offset + bytes; this.offset += bytes; return res; } DecoderBuffer.prototype.raw = function raw(save) { return this.base.slice(save ? save.offset : this.offset, this.length); } function EncoderBuffer(value, reporter) { if (Array.isArray(value)) { this.length = 0; this.value = value.map(function(item) { if (!(item instanceof EncoderBuffer)) item = new EncoderBuffer(item, reporter); this.length += item.length; return item; }, this); } else if (typeof value === 'number') { if (!(0 <= value && value <= 0xff)) return reporter.error('non-byte EncoderBuffer value'); this.value = value; this.length = 1; } else if (typeof value === 'string') { this.value = value; this.length = Buffer.byteLength(value); } else if (Buffer.isBuffer(value)) { this.value = value; this.length = value.length; } else { return reporter.error('Unsupported type: ' + typeof value); } } exports.EncoderBuffer = EncoderBuffer; EncoderBuffer.prototype.join = function join(out, offset) { if (!out) out = new Buffer(this.length); if (!offset) offset = 0; if (this.length === 0) return out; if (Array.isArray(this.value)) { this.value.forEach(function(item) { item.join(out, offset); offset += item.length; }); } else { if (typeof this.value === 'number') out[offset] = this.value; else if (typeof this.value === 'string') out.write(this.value, offset); else if (Buffer.isBuffer(this.value)) this.value.copy(out, offset); offset += this.length; } return out; }; },{"../base":135,"buffer":182,"inherits":262}],135:[function(require,module,exports){ var base = exports; base.Reporter = require('./reporter').Reporter; base.DecoderBuffer = require('./buffer').DecoderBuffer; base.EncoderBuffer = require('./buffer').EncoderBuffer; base.Node = require('./node'); },{"./buffer":134,"./node":136,"./reporter":137}],136:[function(require,module,exports){ var Reporter = require('../base').Reporter; var EncoderBuffer = require('../base').EncoderBuffer; var DecoderBuffer = require('../base').DecoderBuffer; var assert = require('minimalistic-assert'); // Supported tags var tags = [ 'seq', 'seqof', 'set', 'setof', 'objid', 'bool', 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr' ]; // Public methods list var methods = [ 'key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', 'any', 'contains' ].concat(tags); // Overrided methods list var overrided = [ '_peekTag', '_decodeTag', '_use', '_decodeStr', '_decodeObjid', '_decodeTime', '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', '_encodeNull', '_encodeInt', '_encodeBool' ]; function Node(enc, parent) { var state = {}; this._baseState = state; state.enc = enc; state.parent = parent || null; state.children = null; // State state.tag = null; state.args = null; state.reverseArgs = null; state.choice = null; state.optional = false; state.any = false; state.obj = false; state.use = null; state.useDecoder = null; state.key = null; state['default'] = null; state.explicit = null; state.implicit = null; state.contains = null; // Should create new instance on each method if (!state.parent) { state.children = []; this._wrap(); } } module.exports = Node; var stateProps = [ 'enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', 'implicit', 'contains' ]; Node.prototype.clone = function clone() { var state = this._baseState; var cstate = {}; stateProps.forEach(function(prop) { cstate[prop] = state[prop]; }); var res = new this.constructor(cstate.parent); res._baseState = cstate; return res; }; Node.prototype._wrap = function wrap() { var state = this._baseState; methods.forEach(function(method) { this[method] = function _wrappedMethod() { var clone = new this.constructor(this); state.children.push(clone); return clone[method].apply(clone, arguments); }; }, this); }; Node.prototype._init = function init(body) { var state = this._baseState; assert(state.parent === null); body.call(this); // Filter children state.children = state.children.filter(function(child) { return child._baseState.parent === this; }, this); assert.equal(state.children.length, 1, 'Root node can have only one child'); }; Node.prototype._useArgs = function useArgs(args) { var state = this._baseState; // Filter children and args var children = args.filter(function(arg) { return arg instanceof this.constructor; }, this); args = args.filter(function(arg) { return !(arg instanceof this.constructor); }, this); if (children.length !== 0) { assert(state.children === null); state.children = children; // Replace parent to maintain backward link children.forEach(function(child) { child._baseState.parent = this; }, this); } if (args.length !== 0) { assert(state.args === null); state.args = args; state.reverseArgs = args.map(function(arg) { if (typeof arg !== 'object' || arg.constructor !== Object) return arg; var res = {}; Object.keys(arg).forEach(function(key) { if (key == (key | 0)) key |= 0; var value = arg[key]; res[value] = key; }); return res; }); } }; // // Overrided methods // overrided.forEach(function(method) { Node.prototype[method] = function _overrided() { var state = this._baseState; throw new Error(method + ' not implemented for encoding: ' + state.enc); }; }); // // Public methods // tags.forEach(function(tag) { Node.prototype[tag] = function _tagMethod() { var state = this._baseState; var args = Array.prototype.slice.call(arguments); assert(state.tag === null); state.tag = tag; this._useArgs(args); return this; }; }); Node.prototype.use = function use(item) { assert(item); var state = this._baseState; assert(state.use === null); state.use = item; return this; }; Node.prototype.optional = function optional() { var state = this._baseState; state.optional = true; return this; }; Node.prototype.def = function def(val) { var state = this._baseState; assert(state['default'] === null); state['default'] = val; state.optional = true; return this; }; Node.prototype.explicit = function explicit(num) { var state = this._baseState; assert(state.explicit === null && state.implicit === null); state.explicit = num; return this; }; Node.prototype.implicit = function implicit(num) { var state = this._baseState; assert(state.explicit === null && state.implicit === null); state.implicit = num; return this; }; Node.prototype.obj = function obj() { var state = this._baseState; var args = Array.prototype.slice.call(arguments); state.obj = true; if (args.length !== 0) this._useArgs(args); return this; }; Node.prototype.key = function key(newKey) { var state = this._baseState; assert(state.key === null); state.key = newKey; return this; }; Node.prototype.any = function any() { var state = this._baseState; state.any = true; return this; }; Node.prototype.choice = function choice(obj) { var state = this._baseState; assert(state.choice === null); state.choice = obj; this._useArgs(Object.keys(obj).map(function(key) { return obj[key]; })); return this; }; Node.prototype.contains = function contains(item) { var state = this._baseState; assert(state.use === null); state.contains = item; return this; }; // // Decoding // Node.prototype._decode = function decode(input, options) { var state = this._baseState; // Decode root node if (state.parent === null) return input.wrapResult(state.children[0]._decode(input, options)); var result = state['default']; var present = true; var prevKey = null; if (state.key !== null) prevKey = input.enterKey(state.key); // Check if tag is there if (state.optional) { var tag = null; if (state.explicit !== null) tag = state.explicit; else if (state.implicit !== null) tag = state.implicit; else if (state.tag !== null) tag = state.tag; if (tag === null && !state.any) { // Trial and Error var save = input.save(); try { if (state.choice === null) this._decodeGeneric(state.tag, input, options); else this._decodeChoice(input, options); present = true; } catch (e) { present = false; } input.restore(save); } else { present = this._peekTag(input, tag, state.any); if (input.isError(present)) return present; } } // Push object on stack var prevObj; if (state.obj && present) prevObj = input.enterObject(); if (present) { // Unwrap explicit values if (state.explicit !== null) { var explicit = this._decodeTag(input, state.explicit); if (input.isError(explicit)) return explicit; input = explicit; } var start = input.offset; // Unwrap implicit and normal values if (state.use === null && state.choice === null) { if (state.any) var save = input.save(); var body = this._decodeTag( input, state.implicit !== null ? state.implicit : state.tag, state.any ); if (input.isError(body)) return body; if (state.any) result = input.raw(save); else input = body; } if (options && options.track && state.tag !== null) options.track(input.path(), start, input.length, 'tagged'); if (options && options.track && state.tag !== null) options.track(input.path(), input.offset, input.length, 'content'); // Select proper method for tag if (state.any) result = result; else if (state.choice === null) result = this._decodeGeneric(state.tag, input, options); else result = this._decodeChoice(input, options); if (input.isError(result)) return result; // Decode children if (!state.any && state.choice === null && state.children !== null) { state.children.forEach(function decodeChildren(child) { // NOTE: We are ignoring errors here, to let parser continue with other // parts of encoded data child._decode(input, options); }); } // Decode contained/encoded by schema, only in bit or octet strings if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) { var data = new DecoderBuffer(result); result = this._getUse(state.contains, input._reporterState.obj) ._decode(data, options); } } // Pop object if (state.obj && present) result = input.leaveObject(prevObj); // Set key if (state.key !== null && (result !== null || present === true)) input.leaveKey(prevKey, state.key, result); else if (prevKey !== null) input.exitKey(prevKey); return result; }; Node.prototype._decodeGeneric = function decodeGeneric(tag, input, options) { var state = this._baseState; if (tag === 'seq' || tag === 'set') return null; if (tag === 'seqof' || tag === 'setof') return this._decodeList(input, tag, state.args[0], options); else if (/str$/.test(tag)) return this._decodeStr(input, tag, options); else if (tag === 'objid' && state.args) return this._decodeObjid(input, state.args[0], state.args[1], options); else if (tag === 'objid') return this._decodeObjid(input, null, null, options); else if (tag === 'gentime' || tag === 'utctime') return this._decodeTime(input, tag, options); else if (tag === 'null_') return this._decodeNull(input, options); else if (tag === 'bool') return this._decodeBool(input, options); else if (tag === 'objDesc') return this._decodeStr(input, tag, options); else if (tag === 'int' || tag === 'enum') return this._decodeInt(input, state.args && state.args[0], options); if (state.use !== null) { return this._getUse(state.use, input._reporterState.obj) ._decode(input, options); } else { return input.error('unknown tag: ' + tag); } }; Node.prototype._getUse = function _getUse(entity, obj) { var state = this._baseState; // Create altered use decoder if implicit is set state.useDecoder = this._use(entity, obj); assert(state.useDecoder._baseState.parent === null); state.useDecoder = state.useDecoder._baseState.children[0]; if (state.implicit !== state.useDecoder._baseState.implicit) { state.useDecoder = state.useDecoder.clone(); state.useDecoder._baseState.implicit = state.implicit; } return state.useDecoder; }; Node.prototype._decodeChoice = function decodeChoice(input, options) { var state = this._baseState; var result = null; var match = false; Object.keys(state.choice).some(function(key) { var save = input.save(); var node = state.choice[key]; try { var value = node._decode(input, options); if (input.isError(value)) return false; result = { type: key, value: value }; match = true; } catch (e) { input.restore(save); return false; } return true; }, this); if (!match) return input.error('Choice not matched'); return result; }; // // Encoding // Node.prototype._createEncoderBuffer = function createEncoderBuffer(data) { return new EncoderBuffer(data, this.reporter); }; Node.prototype._encode = function encode(data, reporter, parent) { var state = this._baseState; if (state['default'] !== null && state['default'] === data) return; var result = this._encodeValue(data, reporter, parent); if (result === undefined) return; if (this._skipDefault(result, reporter, parent)) return; return result; }; Node.prototype._encodeValue = function encode(data, reporter, parent) { var state = this._baseState; // Decode root node if (state.parent === null) return state.children[0]._encode(data, reporter || new Reporter()); var result = null; // Set reporter to share it with a child class this.reporter = reporter; // Check if data is there if (state.optional && data === undefined) { if (state['default'] !== null) data = state['default'] else return; } // Encode children first var content = null; var primitive = false; if (state.any) { // Anything that was given is translated to buffer result = this._createEncoderBuffer(data); } else if (state.choice) { result = this._encodeChoice(data, reporter); } else if (state.contains) { content = this._getUse(state.contains, parent)._encode(data, reporter); primitive = true; } else if (state.children) { content = state.children.map(function(child) { if (child._baseState.tag === 'null_') return child._encode(null, reporter, data); if (child._baseState.key === null) return reporter.error('Child should have a key'); var prevKey = reporter.enterKey(child._baseState.key); if (typeof data !== 'object') return reporter.error('Child expected, but input is not object'); var res = child._encode(data[child._baseState.key], reporter, data); reporter.leaveKey(prevKey); return res; }, this).filter(function(child) { return child; }); content = this._createEncoderBuffer(content); } else { if (state.tag === 'seqof' || state.tag === 'setof') { // TODO(indutny): this should be thrown on DSL level if (!(state.args && state.args.length === 1)) return reporter.error('Too many args for : ' + state.tag); if (!Array.isArray(data)) return reporter.error('seqof/setof, but data is not Array'); var child = this.clone(); child._baseState.implicit = null; content = this._createEncoderBuffer(data.map(function(item) { var state = this._baseState; return this._getUse(state.args[0], data)._encode(item, reporter); }, child)); } else if (state.use !== null) { result = this._getUse(state.use, parent)._encode(data, reporter); } else { content = this._encodePrimitive(state.tag, data); primitive = true; } } // Encode data itself var result; if (!state.any && state.choice === null) { var tag = state.implicit !== null ? state.implicit : state.tag; var cls = state.implicit === null ? 'universal' : 'context'; if (tag === null) { if (state.use === null) reporter.error('Tag could be omitted only for .use()'); } else { if (state.use === null) result = this._encodeComposite(tag, primitive, cls, content); } } // Wrap in explicit if (state.explicit !== null) result = this._encodeComposite(state.explicit, false, 'context', result); return result; }; Node.prototype._encodeChoice = function encodeChoice(data, reporter) { var state = this._baseState; var node = state.choice[data.type]; if (!node) { assert( false, data.type + ' not found in ' + JSON.stringify(Object.keys(state.choice))); } return node._encode(data.value, reporter); }; Node.prototype._encodePrimitive = function encodePrimitive(tag, data) { var state = this._baseState; if (/str$/.test(tag)) return this._encodeStr(data, tag); else if (tag === 'objid' && state.args) return this._encodeObjid(data, state.reverseArgs[0], state.args[1]); else if (tag === 'objid') return this._encodeObjid(data, null, null); else if (tag === 'gentime' || tag === 'utctime') return this._encodeTime(data, tag); else if (tag === 'null_') return this._encodeNull(); else if (tag === 'int' || tag === 'enum') return this._encodeInt(data, state.args && state.reverseArgs[0]); else if (tag === 'bool') return this._encodeBool(data); else if (tag === 'objDesc') return this._encodeStr(data, tag); else throw new Error('Unsupported tag: ' + tag); }; Node.prototype._isNumstr = function isNumstr(str) { return /^[0-9 ]*$/.test(str); }; Node.prototype._isPrintstr = function isPrintstr(str) { return /^[A-Za-z0-9 '\(\)\+,\-\.\/:=\?]*$/.test(str); }; },{"../base":135,"minimalistic-assert":268}],137:[function(require,module,exports){ var inherits = require('inherits'); function Reporter(options) { this._reporterState = { obj: null, path: [], options: options || {}, errors: [] }; } exports.Reporter = Reporter; Reporter.prototype.isError = function isError(obj) { return obj instanceof ReporterError; }; Reporter.prototype.save = function save() { var state = this._reporterState; return { obj: state.obj, pathLen: state.path.length }; }; Reporter.prototype.restore = function restore(data) { var state = this._reporterState; state.obj = data.obj; state.path = state.path.slice(0, data.pathLen); }; Reporter.prototype.enterKey = function enterKey(key) { return this._reporterState.path.push(key); }; Reporter.prototype.exitKey = function exitKey(index) { var state = this._reporterState; state.path = state.path.slice(0, index - 1); }; Reporter.prototype.leaveKey = function leaveKey(index, key, value) { var state = this._reporterState; this.exitKey(index); if (state.obj !== null) state.obj[key] = value; }; Reporter.prototype.path = function path() { return this._reporterState.path.join('/'); }; Reporter.prototype.enterObject = function enterObject() { var state = this._reporterState; var prev = state.obj; state.obj = {}; return prev; }; Reporter.prototype.leaveObject = function leaveObject(prev) { var state = this._reporterState; var now = state.obj; state.obj = prev; return now; }; Reporter.prototype.error = function error(msg) { var err; var state = this._reporterState; var inherited = msg instanceof ReporterError; if (inherited) { err = msg; } else { err = new ReporterError(state.path.map(function(elem) { return '[' + JSON.stringify(elem) + ']'; }).join(''), msg.message || msg, msg.stack); } if (!state.options.partial) throw err; if (!inherited) state.errors.push(err); return err; }; Reporter.prototype.wrapResult = function wrapResult(result) { var state = this._reporterState; if (!state.options.partial) return result; return { result: this.isError(result) ? null : result, errors: state.errors }; }; function ReporterError(path, msg) { this.path = path; this.rethrow(msg); }; inherits(ReporterError, Error); ReporterError.prototype.rethrow = function rethrow(msg) { this.message = msg + ' at: ' + (this.path || '(shallow)'); if (Error.captureStackTrace) Error.captureStackTrace(this, ReporterError); if (!this.stack) { try { // IE only adds stack when thrown throw new Error(this.message); } catch (e) { this.stack = e.stack; } } return this; }; },{"inherits":262}],138:[function(require,module,exports){ var constants = require('../constants'); exports.tagClass = { 0: 'universal', 1: 'application', 2: 'context', 3: 'private' }; exports.tagClassByName = constants._reverse(exports.tagClass); exports.tag = { 0x00: 'end', 0x01: 'bool', 0x02: 'int', 0x03: 'bitstr', 0x04: 'octstr', 0x05: 'null_', 0x06: 'objid', 0x07: 'objDesc', 0x08: 'external', 0x09: 'real', 0x0a: 'enum', 0x0b: 'embed', 0x0c: 'utf8str', 0x0d: 'relativeOid', 0x10: 'seq', 0x11: 'set', 0x12: 'numstr', 0x13: 'printstr', 0x14: 't61str', 0x15: 'videostr', 0x16: 'ia5str', 0x17: 'utctime', 0x18: 'gentime', 0x19: 'graphstr', 0x1a: 'iso646str', 0x1b: 'genstr', 0x1c: 'unistr', 0x1d: 'charstr', 0x1e: 'bmpstr' }; exports.tagByName = constants._reverse(exports.tag); },{"../constants":139}],139:[function(require,module,exports){ var constants = exports; // Helper constants._reverse = function reverse(map) { var res = {}; Object.keys(map).forEach(function(key) { // Convert key to integer if it is stringified if ((key | 0) == key) key = key | 0; var value = map[key]; res[value] = key; }); return res; }; constants.der = require('./der'); },{"./der":138}],140:[function(require,module,exports){ var inherits = require('inherits'); var asn1 = require('../../asn1'); var base = asn1.base; var bignum = asn1.bignum; // Import DER constants var der = asn1.constants.der; function DERDecoder(entity) { this.enc = 'der'; this.name = entity.name; this.entity = entity; // Construct base tree this.tree = new DERNode(); this.tree._init(entity.body); }; module.exports = DERDecoder; DERDecoder.prototype.decode = function decode(data, options) { if (!(data instanceof base.DecoderBuffer)) data = new base.DecoderBuffer(data, options); return this.tree._decode(data, options); }; // Tree methods function DERNode(parent) { base.Node.call(this, 'der', parent); } inherits(DERNode, base.Node); DERNode.prototype._peekTag = function peekTag(buffer, tag, any) { if (buffer.isEmpty()) return false; var state = buffer.save(); var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: "' + tag + '"'); if (buffer.isError(decodedTag)) return decodedTag; buffer.restore(state); return decodedTag.tag === tag || decodedTag.tagStr === tag || (decodedTag.tagStr + 'of') === tag || any; }; DERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) { var decodedTag = derDecodeTag(buffer, 'Failed to decode tag of "' + tag + '"'); if (buffer.isError(decodedTag)) return decodedTag; var len = derDecodeLen(buffer, decodedTag.primitive, 'Failed to get length of "' + tag + '"'); // Failure if (buffer.isError(len)) return len; if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + 'of' !== tag) { return buffer.error('Failed to match tag: "' + tag + '"'); } if (decodedTag.primitive || len !== null) return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); // Indefinite length... find END tag var state = buffer.save(); var res = this._skipUntilEnd( buffer, 'Failed to skip indefinite length body: "' + this.tag + '"'); if (buffer.isError(res)) return res; len = buffer.offset - state.offset; buffer.restore(state); return buffer.skip(len, 'Failed to match body of: "' + tag + '"'); }; DERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) { while (true) { var tag = derDecodeTag(buffer, fail); if (buffer.isError(tag)) return tag; var len = derDecodeLen(buffer, tag.primitive, fail); if (buffer.isError(len)) return len; var res; if (tag.primitive || len !== null) res = buffer.skip(len) else res = this._skipUntilEnd(buffer, fail); // Failure if (buffer.isError(res)) return res; if (tag.tagStr === 'end') break; } }; DERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, options) { var result = []; while (!buffer.isEmpty()) { var possibleEnd = this._peekTag(buffer, 'end'); if (buffer.isError(possibleEnd)) return possibleEnd; var res = decoder.decode(buffer, 'der', options); if (buffer.isError(res) && possibleEnd) break; result.push(res); } return result; }; DERNode.prototype._decodeStr = function decodeStr(buffer, tag) { if (tag === 'bitstr') { var unused = buffer.readUInt8(); if (buffer.isError(unused)) return unused; return { unused: unused, data: buffer.raw() }; } else if (tag === 'bmpstr') { var raw = buffer.raw(); if (raw.length % 2 === 1) return buffer.error('Decoding of string type: bmpstr length mismatch'); var str = ''; for (var i = 0; i < raw.length / 2; i++) { str += String.fromCharCode(raw.readUInt16BE(i * 2)); } return str; } else if (tag === 'numstr') { var numstr = buffer.raw().toString('ascii'); if (!this._isNumstr(numstr)) { return buffer.error('Decoding of string type: ' + 'numstr unsupported characters'); } return numstr; } else if (tag === 'octstr') { return buffer.raw(); } else if (tag === 'objDesc') { return buffer.raw(); } else if (tag === 'printstr') { var printstr = buffer.raw().toString('ascii'); if (!this._isPrintstr(printstr)) { return buffer.error('Decoding of string type: ' + 'printstr unsupported characters'); } return printstr; } else if (/str$/.test(tag)) { return buffer.raw().toString(); } else { return buffer.error('Decoding of string type: ' + tag + ' unsupported'); } }; DERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) { var result; var identifiers = []; var ident = 0; while (!buffer.isEmpty()) { var subident = buffer.readUInt8(); ident <<= 7; ident |= subident & 0x7f; if ((subident & 0x80) === 0) { identifiers.push(ident); ident = 0; } } if (subident & 0x80) identifiers.push(ident); var first = (identifiers[0] / 40) | 0; var second = identifiers[0] % 40; if (relative) result = identifiers; else result = [first, second].concat(identifiers.slice(1)); if (values) { var tmp = values[result.join(' ')]; if (tmp === undefined) tmp = values[result.join('.')]; if (tmp !== undefined) result = tmp; } return result; }; DERNode.prototype._decodeTime = function decodeTime(buffer, tag) { var str = buffer.raw().toString(); if (tag === 'gentime') { var year = str.slice(0, 4) | 0; var mon = str.slice(4, 6) | 0; var day = str.slice(6, 8) | 0; var hour = str.slice(8, 10) | 0; var min = str.slice(10, 12) | 0; var sec = str.slice(12, 14) | 0; } else if (tag === 'utctime') { var year = str.slice(0, 2) | 0; var mon = str.slice(2, 4) | 0; var day = str.slice(4, 6) | 0; var hour = str.slice(6, 8) | 0; var min = str.slice(8, 10) | 0; var sec = str.slice(10, 12) | 0; if (year < 70) year = 2000 + year; else year = 1900 + year; } else { return buffer.error('Decoding ' + tag + ' time is not supported yet'); } return Date.UTC(year, mon - 1, day, hour, min, sec, 0); }; DERNode.prototype._decodeNull = function decodeNull(buffer) { return null; }; DERNode.prototype._decodeBool = function decodeBool(buffer) { var res = buffer.readUInt8(); if (buffer.isError(res)) return res; else return res !== 0; }; DERNode.prototype._decodeInt = function decodeInt(buffer, values) { // Bigint, return as it is (assume big endian) var raw = buffer.raw(); var res = new bignum(raw); if (values) res = values[res.toString(10)] || res; return res; }; DERNode.prototype._use = function use(entity, obj) { if (typeof entity === 'function') entity = entity(obj); return entity._getDecoder('der').tree; }; // Utility methods function derDecodeTag(buf, fail) { var tag = buf.readUInt8(fail); if (buf.isError(tag)) return tag; var cls = der.tagClass[tag >> 6]; var primitive = (tag & 0x20) === 0; // Multi-octet tag - load if ((tag & 0x1f) === 0x1f) { var oct = tag; tag = 0; while ((oct & 0x80) === 0x80) { oct = buf.readUInt8(fail); if (buf.isError(oct)) return oct; tag <<= 7; tag |= oct & 0x7f; } } else { tag &= 0x1f; } var tagStr = der.tag[tag]; return { cls: cls, primitive: primitive, tag: tag, tagStr: tagStr }; } function derDecodeLen(buf, primitive, fail) { var len = buf.readUInt8(fail); if (buf.isError(len)) return len; // Indefinite form if (!primitive && len === 0x80) return null; // Definite form if ((len & 0x80) === 0) { // Short form return len; } // Long form var num = len & 0x7f; if (num > 4) return buf.error('length octect is too long'); len = 0; for (var i = 0; i < num; i++) { len <<= 8; var j = buf.readUInt8(fail); if (buf.isError(j)) return j; len |= j; } return len; } },{"../../asn1":132,"inherits":262}],141:[function(require,module,exports){ var decoders = exports; decoders.der = require('./der'); decoders.pem = require('./pem'); },{"./der":140,"./pem":142}],142:[function(require,module,exports){ var inherits = require('inherits'); var Buffer = require('buffer').Buffer; var DERDecoder = require('./der'); function PEMDecoder(entity) { DERDecoder.call(this, entity); this.enc = 'pem'; }; inherits(PEMDecoder, DERDecoder); module.exports = PEMDecoder; PEMDecoder.prototype.decode = function decode(data, options) { var lines = data.toString().split(/[\r\n]+/g); var label = options.label.toUpperCase(); var re = /^-----(BEGIN|END) ([^-]+)-----$/; var start = -1; var end = -1; for (var i = 0; i < lines.length; i++) { var match = lines[i].match(re); if (match === null) continue; if (match[2] !== label) continue; if (start === -1) { if (match[1] !== 'BEGIN') break; start = i; } else { if (match[1] !== 'END') break; end = i; break; } } if (start === -1 || end === -1) throw new Error('PEM section not found for: ' + label); var base64 = lines.slice(start + 1, end).join(''); // Remove excessive symbols base64.replace(/[^a-z0-9\+\/=]+/gi, ''); var input = new Buffer(base64, 'base64'); return DERDecoder.prototype.decode.call(this, input, options); }; },{"./der":140,"buffer":182,"inherits":262}],143:[function(require,module,exports){ var inherits = require('inherits'); var Buffer = require('buffer').Buffer; var asn1 = require('../../asn1'); var base = asn1.base; // Import DER constants var der = asn1.constants.der; function DEREncoder(entity) { this.enc = 'der'; this.name = entity.name; this.entity = entity; // Construct base tree this.tree = new DERNode(); this.tree._init(entity.body); }; module.exports = DEREncoder; DEREncoder.prototype.encode = function encode(data, reporter) { return this.tree._encode(data, reporter).join(); }; // Tree methods function DERNode(parent) { base.Node.call(this, 'der', parent); } inherits(DERNode, base.Node); DERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) { var encodedTag = encodeTag(tag, primitive, cls, this.reporter); // Short form if (content.length < 0x80) { var header = new Buffer(2); header[0] = encodedTag; header[1] = content.length; return this._createEncoderBuffer([ header, content ]); } // Long form // Count octets required to store length var lenOctets = 1; for (var i = content.length; i >= 0x100; i >>= 8) lenOctets++; var header = new Buffer(1 + 1 + lenOctets); header[0] = encodedTag; header[1] = 0x80 | lenOctets; for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) header[i] = j & 0xff; return this._createEncoderBuffer([ header, content ]); }; DERNode.prototype._encodeStr = function encodeStr(str, tag) { if (tag === 'bitstr') { return this._createEncoderBuffer([ str.unused | 0, str.data ]); } else if (tag === 'bmpstr') { var buf = new Buffer(str.length * 2); for (var i = 0; i < str.length; i++) { buf.writeUInt16BE(str.charCodeAt(i), i * 2); } return this._createEncoderBuffer(buf); } else if (tag === 'numstr') { if (!this._isNumstr(str)) { return this.reporter.error('Encoding of string type: numstr supports ' + 'only digits and space'); } return this._createEncoderBuffer(str); } else if (tag === 'printstr') { if (!this._isPrintstr(str)) { return this.reporter.error('Encoding of string type: printstr supports ' + 'only latin upper and lower case letters, ' + 'digits, space, apostrophe, left and rigth ' + 'parenthesis, plus sign, comma, hyphen, ' + 'dot, slash, colon, equal sign, ' + 'question mark'); } return this._createEncoderBuffer(str); } else if (/str$/.test(tag)) { return this._createEncoderBuffer(str); } else if (tag === 'objDesc') { return this._createEncoderBuffer(str); } else { return this.reporter.error('Encoding of string type: ' + tag + ' unsupported'); } }; DERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) { if (typeof id === 'string') { if (!values) return this.reporter.error('string objid given, but no values map found'); if (!values.hasOwnProperty(id)) return this.reporter.error('objid not found in values map'); id = values[id].split(/[\s\.]+/g); for (var i = 0; i < id.length; i++) id[i] |= 0; } else if (Array.isArray(id)) { id = id.slice(); for (var i = 0; i < id.length; i++) id[i] |= 0; } if (!Array.isArray(id)) { return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id)); } if (!relative) { if (id[1] >= 40) return this.reporter.error('Second objid identifier OOB'); id.splice(0, 2, id[0] * 40 + id[1]); } // Count number of octets var size = 0; for (var i = 0; i < id.length; i++) { var ident = id[i]; for (size++; ident >= 0x80; ident >>= 7) size++; } var objid = new Buffer(size); var offset = objid.length - 1; for (var i = id.length - 1; i >= 0; i--) { var ident = id[i]; objid[offset--] = ident & 0x7f; while ((ident >>= 7) > 0) objid[offset--] = 0x80 | (ident & 0x7f); } return this._createEncoderBuffer(objid); }; function two(num) { if (num < 10) return '0' + num; else return num; } DERNode.prototype._encodeTime = function encodeTime(time, tag) { var str; var date = new Date(time); if (tag === 'gentime') { str = [ two(date.getFullYear()), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z' ].join(''); } else if (tag === 'utctime') { str = [ two(date.getFullYear() % 100), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z' ].join(''); } else { this.reporter.error('Encoding ' + tag + ' time is not supported yet'); } return this._encodeStr(str, 'octstr'); }; DERNode.prototype._encodeNull = function encodeNull() { return this._createEncoderBuffer(''); }; DERNode.prototype._encodeInt = function encodeInt(num, values) { if (typeof num === 'string') { if (!values) return this.reporter.error('String int or enum given, but no values map'); if (!values.hasOwnProperty(num)) { return this.reporter.error('Values map doesn\'t contain: ' + JSON.stringify(num)); } num = values[num]; } // Bignum, assume big endian if (typeof num !== 'number' && !Buffer.isBuffer(num)) { var numArray = num.toArray(); if (!num.sign && numArray[0] & 0x80) { numArray.unshift(0); } num = new Buffer(numArray); } if (Buffer.isBuffer(num)) { var size = num.length; if (num.length === 0) size++; var out = new Buffer(size); num.copy(out); if (num.length === 0) out[0] = 0 return this._createEncoderBuffer(out); } if (num < 0x80) return this._createEncoderBuffer(num); if (num < 0x100) return this._createEncoderBuffer([0, num]); var size = 1; for (var i = num; i >= 0x100; i >>= 8) size++; var out = new Array(size); for (var i = out.length - 1; i >= 0; i--) { out[i] = num & 0xff; num >>= 8; } if(out[0] & 0x80) { out.unshift(0); } return this._createEncoderBuffer(new Buffer(out)); }; DERNode.prototype._encodeBool = function encodeBool(value) { return this._createEncoderBuffer(value ? 0xff : 0); }; DERNode.prototype._use = function use(entity, obj) { if (typeof entity === 'function') entity = entity(obj); return entity._getEncoder('der').tree; }; DERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) { var state = this._baseState; var i; if (state['default'] === null) return false; var data = dataBuffer.join(); if (state.defaultBuffer === undefined) state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join(); if (data.length !== state.defaultBuffer.length) return false; for (i=0; i < data.length; i++) if (data[i] !== state.defaultBuffer[i]) return false; return true; }; // Utility methods function encodeTag(tag, primitive, cls, reporter) { var res; if (tag === 'seqof') tag = 'seq'; else if (tag === 'setof') tag = 'set'; if (der.tagByName.hasOwnProperty(tag)) res = der.tagByName[tag]; else if (typeof tag === 'number' && (tag | 0) === tag) res = tag; else return reporter.error('Unknown tag: ' + tag); if (res >= 0x1f) return reporter.error('Multi-octet tag encoding unsupported'); if (!primitive) res |= 0x20; res |= (der.tagClassByName[cls || 'universal'] << 6); return res; } },{"../../asn1":132,"buffer":182,"inherits":262}],144:[function(require,module,exports){ var encoders = exports; encoders.der = require('./der'); encoders.pem = require('./pem'); },{"./der":143,"./pem":145}],145:[function(require,module,exports){ var inherits = require('inherits'); var DEREncoder = require('./der'); function PEMEncoder(entity) { DEREncoder.call(this, entity); this.enc = 'pem'; }; inherits(PEMEncoder, DEREncoder); module.exports = PEMEncoder; PEMEncoder.prototype.encode = function encode(data, options) { var buf = DEREncoder.prototype.encode.call(this, data); var p = buf.toString('base64'); var out = [ '-----BEGIN ' + options.label + '-----' ]; for (var i = 0; i < p.length; i += 64) out.push(p.slice(i, i + 64)); out.push('-----END ' + options.label + '-----'); return out.join('\n'); }; },{"./der":143,"inherits":262}],146:[function(require,module,exports){ 'use strict' exports.byteLength = byteLength exports.toByteArray = toByteArray exports.fromByteArray = fromByteArray var lookup = [] var revLookup = [] var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' for (var i = 0, len = code.length; i < len; ++i) { lookup[i] = code[i] revLookup[code.charCodeAt(i)] = i } // Support decoding URL-safe base64 strings, as Node.js does. // See: https://en.wikipedia.org/wiki/Base64#URL_applications revLookup['-'.charCodeAt(0)] = 62 revLookup['_'.charCodeAt(0)] = 63 function getLens (b64) { var len = b64.length if (len % 4 > 0) { throw new Error('Invalid string. Length must be a multiple of 4') } // Trim off extra bytes after placeholder bytes are found // See: https://github.com/beatgammit/base64-js/issues/42 var validLen = b64.indexOf('=') if (validLen === -1) validLen = len var placeHoldersLen = validLen === len ? 0 : 4 - (validLen % 4) return [validLen, placeHoldersLen] } // base64 is 4/3 + up to two characters of the original data function byteLength (b64) { var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function _byteLength (b64, validLen, placeHoldersLen) { return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen } function toByteArray (b64) { var tmp var lens = getLens(b64) var validLen = lens[0] var placeHoldersLen = lens[1] var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen)) var curByte = 0 // if there are placeholders, only get up to the last complete 4 chars var len = placeHoldersLen > 0 ? validLen - 4 : validLen var i for (i = 0; i < len; i += 4) { tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] arr[curByte++] = (tmp >> 16) & 0xFF arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 2) { tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) arr[curByte++] = tmp & 0xFF } if (placeHoldersLen === 1) { tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) arr[curByte++] = (tmp >> 8) & 0xFF arr[curByte++] = tmp & 0xFF } return arr } function tripletToBase64 (num) { return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] } function encodeChunk (uint8, start, end) { var tmp var output = [] for (var i = start; i < end; i += 3) { tmp = ((uint8[i] << 16) & 0xFF0000) + ((uint8[i + 1] << 8) & 0xFF00) + (uint8[i + 2] & 0xFF) output.push(tripletToBase64(tmp)) } return output.join('') } function fromByteArray (uint8) { var tmp var len = uint8.length var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes var parts = [] var maxChunkLength = 16383 // must be multiple of 3 // go through the array every three bytes, we'll deal with trailing stuff later for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { parts.push(encodeChunk( uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength) )) } // pad the end with zeros, but make sure to not forget the extra bytes if (extraBytes === 1) { tmp = uint8[len - 1] parts.push( lookup[tmp >> 2] + lookup[(tmp << 4) & 0x3F] + '==' ) } else if (extraBytes === 2) { tmp = (uint8[len - 2] << 8) + uint8[len - 1] parts.push( lookup[tmp >> 10] + lookup[(tmp >> 4) & 0x3F] + lookup[(tmp << 2) & 0x3F] + '=' ) } return parts.join('') } },{}],147:[function(require,module,exports){ (function (module, exports) { 'use strict'; // Utils function assert (val, msg) { if (!val) throw new Error(msg || 'Assertion failed'); } // Could use `inherits` module, but don't want to move from single file // architecture yet. function inherits (ctor, superCtor) { ctor.super_ = superCtor; var TempCtor = function () {}; TempCtor.prototype = superCtor.prototype; ctor.prototype = new TempCtor(); ctor.prototype.constructor = ctor; } // BN function BN (number, base, endian) { if (BN.isBN(number)) { return number; } this.negative = 0; this.words = null; this.length = 0; // Reduction context this.red = null; if (number !== null) { if (base === 'le' || base === 'be') { endian = base; base = 10; } this._init(number || 0, base || 10, endian || 'be'); } } if (typeof module === 'object') { module.exports = BN; } else { exports.BN = BN; } BN.BN = BN; BN.wordSize = 26; var Buffer; try { Buffer = require('buffer').Buffer; } catch (e) { } BN.isBN = function isBN (num) { if (num instanceof BN) { return true; } return num !== null && typeof num === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words); }; BN.max = function max (left, right) { if (left.cmp(right) > 0) return left; return right; }; BN.min = function min (left, right) { if (left.cmp(right) < 0) return left; return right; }; BN.prototype._init = function init (number, base, endian) { if (typeof number === 'number') { return this._initNumber(number, base, endian); } if (typeof number === 'object') { return this._initArray(number, base, endian); } if (base === 'hex') { base = 16; } assert(base === (base | 0) && base >= 2 && base <= 36); number = number.toString().replace(/\s+/g, ''); var start = 0; if (number[0] === '-') { start++; } if (base === 16) { this._parseHex(number, start); } else { this._parseBase(number, base, start); } if (number[0] === '-') { this.negative = 1; } this.strip(); if (endian !== 'le') return; this._initArray(this.toArray(), base, endian); }; BN.prototype._initNumber = function _initNumber (number, base, endian) { if (number < 0) { this.negative = 1; number = -number; } if (number < 0x4000000) { this.words = [ number & 0x3ffffff ]; this.length = 1; } else if (number < 0x10000000000000) { this.words = [ number & 0x3ffffff, (number / 0x4000000) & 0x3ffffff ]; this.length = 2; } else { assert(number < 0x20000000000000); // 2 ^ 53 (unsafe) this.words = [ number & 0x3ffffff, (number / 0x4000000) & 0x3ffffff, 1 ]; this.length = 3; } if (endian !== 'le') return; // Reverse the bytes this._initArray(this.toArray(), base, endian); }; BN.prototype._initArray = function _initArray (number, base, endian) { // Perhaps a Uint8Array assert(typeof number.length === 'number'); if (number.length <= 0) { this.words = [ 0 ]; this.length = 1; return this; } this.length = Math.ceil(number.length / 3); this.words = new Array(this.length); for (var i = 0; i < this.length; i++) { this.words[i] = 0; } var j, w; var off = 0; if (endian === 'be') { for (i = number.length - 1, j = 0; i >= 0; i -= 3) { w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16); this.words[j] |= (w << off) & 0x3ffffff; this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; off += 24; if (off >= 26) { off -= 26; j++; } } } else if (endian === 'le') { for (i = 0, j = 0; i < number.length; i += 3) { w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16); this.words[j] |= (w << off) & 0x3ffffff; this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff; off += 24; if (off >= 26) { off -= 26; j++; } } } return this.strip(); }; function parseHex (str, start, end) { var r = 0; var len = Math.min(str.length, end); for (var i = start; i < len; i++) { var c = str.charCodeAt(i) - 48; r <<= 4; // 'a' - 'f' if (c >= 49 && c <= 54) { r |= c - 49 + 0xa; // 'A' - 'F' } else if (c >= 17 && c <= 22) { r |= c - 17 + 0xa; // '0' - '9' } else { r |= c & 0xf; } } return r; } BN.prototype._parseHex = function _parseHex (number, start) { // Create possibly bigger array to ensure that it fits the number this.length = Math.ceil((number.length - start) / 6); this.words = new Array(this.length); for (var i = 0; i < this.length; i++) { this.words[i] = 0; } var j, w; // Scan 24-bit chunks and add them to the number var off = 0; for (i = number.length - 6, j = 0; i >= start; i -= 6) { w = parseHex(number, i, i + 6); this.words[j] |= (w << off) & 0x3ffffff; // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; off += 24; if (off >= 26) { off -= 26; j++; } } if (i + 6 !== start) { w = parseHex(number, start, i + 6); this.words[j] |= (w << off) & 0x3ffffff; this.words[j + 1] |= w >>> (26 - off) & 0x3fffff; } this.strip(); }; function parseBase (str, start, end, mul) { var r = 0; var len = Math.min(str.length, end); for (var i = start; i < len; i++) { var c = str.charCodeAt(i) - 48; r *= mul; // 'a' if (c >= 49) { r += c - 49 + 0xa; // 'A' } else if (c >= 17) { r += c - 17 + 0xa; // '0' - '9' } else { r += c; } } return r; } BN.prototype._parseBase = function _parseBase (number, base, start) { // Initialize as zero this.words = [ 0 ]; this.length = 1; // Find length of limb in base for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) { limbLen++; } limbLen--; limbPow = (limbPow / base) | 0; var total = number.length - start; var mod = total % limbLen; var end = Math.min(total, total - mod) + start; var word = 0; for (var i = start; i < end; i += limbLen) { word = parseBase(number, i, i + limbLen, base); this.imuln(limbPow); if (this.words[0] + word < 0x4000000) { this.words[0] += word; } else { this._iaddn(word); } } if (mod !== 0) { var pow = 1; word = parseBase(number, i, number.length, base); for (i = 0; i < mod; i++) { pow *= base; } this.imuln(pow); if (this.words[0] + word < 0x4000000) { this.words[0] += word; } else { this._iaddn(word); } } }; BN.prototype.copy = function copy (dest) { dest.words = new Array(this.length); for (var i = 0; i < this.length; i++) { dest.words[i] = this.words[i]; } dest.length = this.length; dest.negative = this.negative; dest.red = this.red; }; BN.prototype.clone = function clone () { var r = new BN(null); this.copy(r); return r; }; BN.prototype._expand = function _expand (size) { while (this.length < size) { this.words[this.length++] = 0; } return this; }; // Remove leading `0` from `this` BN.prototype.strip = function strip () { while (this.length > 1 && this.words[this.length - 1] === 0) { this.length--; } return this._normSign(); }; BN.prototype._normSign = function _normSign () { // -0 = 0 if (this.length === 1 && this.words[0] === 0) { this.negative = 0; } return this; }; BN.prototype.inspect = function inspect () { return (this.red ? ''; }; /* var zeros = []; var groupSizes = []; var groupBases = []; var s = ''; var i = -1; while (++i < BN.wordSize) { zeros[i] = s; s += '0'; } groupSizes[0] = 0; groupSizes[1] = 0; groupBases[0] = 0; groupBases[1] = 0; var base = 2 - 1; while (++base < 36 + 1) { var groupSize = 0; var groupBase = 1; while (groupBase < (1 << BN.wordSize) / base) { groupBase *= base; groupSize += 1; } groupSizes[base] = groupSize; groupBases[base] = groupBase; } */ var zeros = [ '', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000' ]; var groupSizes = [ 0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 ]; var groupBases = [ 0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176 ]; BN.prototype.toString = function toString (base, padding) { base = base || 10; padding = padding | 0 || 1; var out; if (base === 16 || base === 'hex') { out = ''; var off = 0; var carry = 0; for (var i = 0; i < this.length; i++) { var w = this.words[i]; var word = (((w << off) | carry) & 0xffffff).toString(16); carry = (w >>> (24 - off)) & 0xffffff; if (carry !== 0 || i !== this.length - 1) { out = zeros[6 - word.length] + word + out; } else { out = word + out; } off += 2; if (off >= 26) { off -= 26; i--; } } if (carry !== 0) { out = carry.toString(16) + out; } while (out.length % padding !== 0) { out = '0' + out; } if (this.negative !== 0) { out = '-' + out; } return out; } if (base === (base | 0) && base >= 2 && base <= 36) { // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base)); var groupSize = groupSizes[base]; // var groupBase = Math.pow(base, groupSize); var groupBase = groupBases[base]; out = ''; var c = this.clone(); c.negative = 0; while (!c.isZero()) { var r = c.modn(groupBase).toString(base); c = c.idivn(groupBase); if (!c.isZero()) { out = zeros[groupSize - r.length] + r + out; } else { out = r + out; } } if (this.isZero()) { out = '0' + out; } while (out.length % padding !== 0) { out = '0' + out; } if (this.negative !== 0) { out = '-' + out; } return out; } assert(false, 'Base should be between 2 and 36'); }; BN.prototype.toNumber = function toNumber () { var ret = this.words[0]; if (this.length === 2) { ret += this.words[1] * 0x4000000; } else if (this.length === 3 && this.words[2] === 0x01) { // NOTE: at this stage it is known that the top bit is set ret += 0x10000000000000 + (this.words[1] * 0x4000000); } else if (this.length > 2) { assert(false, 'Number can only safely store up to 53 bits'); } return (this.negative !== 0) ? -ret : ret; }; BN.prototype.toJSON = function toJSON () { return this.toString(16); }; BN.prototype.toBuffer = function toBuffer (endian, length) { assert(typeof Buffer !== 'undefined'); return this.toArrayLike(Buffer, endian, length); }; BN.prototype.toArray = function toArray (endian, length) { return this.toArrayLike(Array, endian, length); }; BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) { var byteLength = this.byteLength(); var reqLength = length || Math.max(1, byteLength); assert(byteLength <= reqLength, 'byte array longer than desired length'); assert(reqLength > 0, 'Requested array length <= 0'); this.strip(); var littleEndian = endian === 'le'; var res = new ArrayType(reqLength); var b, i; var q = this.clone(); if (!littleEndian) { // Assume big-endian for (i = 0; i < reqLength - byteLength; i++) { res[i] = 0; } for (i = 0; !q.isZero(); i++) { b = q.andln(0xff); q.iushrn(8); res[reqLength - i - 1] = b; } } else { for (i = 0; !q.isZero(); i++) { b = q.andln(0xff); q.iushrn(8); res[i] = b; } for (; i < reqLength; i++) { res[i] = 0; } } return res; }; if (Math.clz32) { BN.prototype._countBits = function _countBits (w) { return 32 - Math.clz32(w); }; } else { BN.prototype._countBits = function _countBits (w) { var t = w; var r = 0; if (t >= 0x1000) { r += 13; t >>>= 13; } if (t >= 0x40) { r += 7; t >>>= 7; } if (t >= 0x8) { r += 4; t >>>= 4; } if (t >= 0x02) { r += 2; t >>>= 2; } return r + t; }; } BN.prototype._zeroBits = function _zeroBits (w) { // Short-cut if (w === 0) return 26; var t = w; var r = 0; if ((t & 0x1fff) === 0) { r += 13; t >>>= 13; } if ((t & 0x7f) === 0) { r += 7; t >>>= 7; } if ((t & 0xf) === 0) { r += 4; t >>>= 4; } if ((t & 0x3) === 0) { r += 2; t >>>= 2; } if ((t & 0x1) === 0) { r++; } return r; }; // Return number of used bits in a BN BN.prototype.bitLength = function bitLength () { var w = this.words[this.length - 1]; var hi = this._countBits(w); return (this.length - 1) * 26 + hi; }; function toBitArray (num) { var w = new Array(num.bitLength()); for (var bit = 0; bit < w.length; bit++) { var off = (bit / 26) | 0; var wbit = bit % 26; w[bit] = (num.words[off] & (1 << wbit)) >>> wbit; } return w; } // Number of trailing zero bits BN.prototype.zeroBits = function zeroBits () { if (this.isZero()) return 0; var r = 0; for (var i = 0; i < this.length; i++) { var b = this._zeroBits(this.words[i]); r += b; if (b !== 26) break; } return r; }; BN.prototype.byteLength = function byteLength () { return Math.ceil(this.bitLength() / 8); }; BN.prototype.toTwos = function toTwos (width) { if (this.negative !== 0) { return this.abs().inotn(width).iaddn(1); } return this.clone(); }; BN.prototype.fromTwos = function fromTwos (width) { if (this.testn(width - 1)) { return this.notn(width).iaddn(1).ineg(); } return this.clone(); }; BN.prototype.isNeg = function isNeg () { return this.negative !== 0; }; // Return negative clone of `this` BN.prototype.neg = function neg () { return this.clone().ineg(); }; BN.prototype.ineg = function ineg () { if (!this.isZero()) { this.negative ^= 1; } return this; }; // Or `num` with `this` in-place BN.prototype.iuor = function iuor (num) { while (this.length < num.length) { this.words[this.length++] = 0; } for (var i = 0; i < num.length; i++) { this.words[i] = this.words[i] | num.words[i]; } return this.strip(); }; BN.prototype.ior = function ior (num) { assert((this.negative | num.negative) === 0); return this.iuor(num); }; // Or `num` with `this` BN.prototype.or = function or (num) { if (this.length > num.length) return this.clone().ior(num); return num.clone().ior(this); }; BN.prototype.uor = function uor (num) { if (this.length > num.length) return this.clone().iuor(num); return num.clone().iuor(this); }; // And `num` with `this` in-place BN.prototype.iuand = function iuand (num) { // b = min-length(num, this) var b; if (this.length > num.length) { b = num; } else { b = this; } for (var i = 0; i < b.length; i++) { this.words[i] = this.words[i] & num.words[i]; } this.length = b.length; return this.strip(); }; BN.prototype.iand = function iand (num) { assert((this.negative | num.negative) === 0); return this.iuand(num); }; // And `num` with `this` BN.prototype.and = function and (num) { if (this.length > num.length) return this.clone().iand(num); return num.clone().iand(this); }; BN.prototype.uand = function uand (num) { if (this.length > num.length) return this.clone().iuand(num); return num.clone().iuand(this); }; // Xor `num` with `this` in-place BN.prototype.iuxor = function iuxor (num) { // a.length > b.length var a; var b; if (this.length > num.length) { a = this; b = num; } else { a = num; b = this; } for (var i = 0; i < b.length; i++) { this.words[i] = a.words[i] ^ b.words[i]; } if (this !== a) { for (; i < a.length; i++) { this.words[i] = a.words[i]; } } this.length = a.length; return this.strip(); }; BN.prototype.ixor = function ixor (num) { assert((this.negative | num.negative) === 0); return this.iuxor(num); }; // Xor `num` with `this` BN.prototype.xor = function xor (num) { if (this.length > num.length) return this.clone().ixor(num); return num.clone().ixor(this); }; BN.prototype.uxor = function uxor (num) { if (this.length > num.length) return this.clone().iuxor(num); return num.clone().iuxor(this); }; // Not ``this`` with ``width`` bitwidth BN.prototype.inotn = function inotn (width) { assert(typeof width === 'number' && width >= 0); var bytesNeeded = Math.ceil(width / 26) | 0; var bitsLeft = width % 26; // Extend the buffer with leading zeroes this._expand(bytesNeeded); if (bitsLeft > 0) { bytesNeeded--; } // Handle complete words for (var i = 0; i < bytesNeeded; i++) { this.words[i] = ~this.words[i] & 0x3ffffff; } // Handle the residue if (bitsLeft > 0) { this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft)); } // And remove leading zeroes return this.strip(); }; BN.prototype.notn = function notn (width) { return this.clone().inotn(width); }; // Set `bit` of `this` BN.prototype.setn = function setn (bit, val) { assert(typeof bit === 'number' && bit >= 0); var off = (bit / 26) | 0; var wbit = bit % 26; this._expand(off + 1); if (val) { this.words[off] = this.words[off] | (1 << wbit); } else { this.words[off] = this.words[off] & ~(1 << wbit); } return this.strip(); }; // Add `num` to `this` in-place BN.prototype.iadd = function iadd (num) { var r; // negative + positive if (this.negative !== 0 && num.negative === 0) { this.negative = 0; r = this.isub(num); this.negative ^= 1; return this._normSign(); // positive + negative } else if (this.negative === 0 && num.negative !== 0) { num.negative = 0; r = this.isub(num); num.negative = 1; return r._normSign(); } // a.length > b.length var a, b; if (this.length > num.length) { a = this; b = num; } else { a = num; b = this; } var carry = 0; for (var i = 0; i < b.length; i++) { r = (a.words[i] | 0) + (b.words[i] | 0) + carry; this.words[i] = r & 0x3ffffff; carry = r >>> 26; } for (; carry !== 0 && i < a.length; i++) { r = (a.words[i] | 0) + carry; this.words[i] = r & 0x3ffffff; carry = r >>> 26; } this.length = a.length; if (carry !== 0) { this.words[this.length] = carry; this.length++; // Copy the rest of the words } else if (a !== this) { for (; i < a.length; i++) { this.words[i] = a.words[i]; } } return this; }; // Add `num` to `this` BN.prototype.add = function add (num) { var res; if (num.negative !== 0 && this.negative === 0) { num.negative = 0; res = this.sub(num); num.negative ^= 1; return res; } else if (num.negative === 0 && this.negative !== 0) { this.negative = 0; res = num.sub(this); this.negative = 1; return res; } if (this.length > num.length) return this.clone().iadd(num); return num.clone().iadd(this); }; // Subtract `num` from `this` in-place BN.prototype.isub = function isub (num) { // this - (-num) = this + num if (num.negative !== 0) { num.negative = 0; var r = this.iadd(num); num.negative = 1; return r._normSign(); // -this - num = -(this + num) } else if (this.negative !== 0) { this.negative = 0; this.iadd(num); this.negative = 1; return this._normSign(); } // At this point both numbers are positive var cmp = this.cmp(num); // Optimization - zeroify if (cmp === 0) { this.negative = 0; this.length = 1; this.words[0] = 0; return this; } // a > b var a, b; if (cmp > 0) { a = this; b = num; } else { a = num; b = this; } var carry = 0; for (var i = 0; i < b.length; i++) { r = (a.words[i] | 0) - (b.words[i] | 0) + carry; carry = r >> 26; this.words[i] = r & 0x3ffffff; } for (; carry !== 0 && i < a.length; i++) { r = (a.words[i] | 0) + carry; carry = r >> 26; this.words[i] = r & 0x3ffffff; } // Copy rest of the words if (carry === 0 && i < a.length && a !== this) { for (; i < a.length; i++) { this.words[i] = a.words[i]; } } this.length = Math.max(this.length, i); if (a !== this) { this.negative = 1; } return this.strip(); }; // Subtract `num` from `this` BN.prototype.sub = function sub (num) { return this.clone().isub(num); }; function smallMulTo (self, num, out) { out.negative = num.negative ^ self.negative; var len = (self.length + num.length) | 0; out.length = len; len = (len - 1) | 0; // Peel one iteration (compiler can't do it, because of code complexity) var a = self.words[0] | 0; var b = num.words[0] | 0; var r = a * b; var lo = r & 0x3ffffff; var carry = (r / 0x4000000) | 0; out.words[0] = lo; for (var k = 1; k < len; k++) { // Sum all words with the same `i + j = k` and accumulate `ncarry`, // note that ncarry could be >= 0x3ffffff var ncarry = carry >>> 26; var rword = carry & 0x3ffffff; var maxJ = Math.min(k, num.length - 1); for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { var i = (k - j) | 0; a = self.words[i] | 0; b = num.words[j] | 0; r = a * b + rword; ncarry += (r / 0x4000000) | 0; rword = r & 0x3ffffff; } out.words[k] = rword | 0; carry = ncarry | 0; } if (carry !== 0) { out.words[k] = carry | 0; } else { out.length--; } return out.strip(); } // TODO(indutny): it may be reasonable to omit it for users who don't need // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit // multiplication (like elliptic secp256k1). var comb10MulTo = function comb10MulTo (self, num, out) { var a = self.words; var b = num.words; var o = out.words; var c = 0; var lo; var mid; var hi; var a0 = a[0] | 0; var al0 = a0 & 0x1fff; var ah0 = a0 >>> 13; var a1 = a[1] | 0; var al1 = a1 & 0x1fff; var ah1 = a1 >>> 13; var a2 = a[2] | 0; var al2 = a2 & 0x1fff; var ah2 = a2 >>> 13; var a3 = a[3] | 0; var al3 = a3 & 0x1fff; var ah3 = a3 >>> 13; var a4 = a[4] | 0; var al4 = a4 & 0x1fff; var ah4 = a4 >>> 13; var a5 = a[5] | 0; var al5 = a5 & 0x1fff; var ah5 = a5 >>> 13; var a6 = a[6] | 0; var al6 = a6 & 0x1fff; var ah6 = a6 >>> 13; var a7 = a[7] | 0; var al7 = a7 & 0x1fff; var ah7 = a7 >>> 13; var a8 = a[8] | 0; var al8 = a8 & 0x1fff; var ah8 = a8 >>> 13; var a9 = a[9] | 0; var al9 = a9 & 0x1fff; var ah9 = a9 >>> 13; var b0 = b[0] | 0; var bl0 = b0 & 0x1fff; var bh0 = b0 >>> 13; var b1 = b[1] | 0; var bl1 = b1 & 0x1fff; var bh1 = b1 >>> 13; var b2 = b[2] | 0; var bl2 = b2 & 0x1fff; var bh2 = b2 >>> 13; var b3 = b[3] | 0; var bl3 = b3 & 0x1fff; var bh3 = b3 >>> 13; var b4 = b[4] | 0; var bl4 = b4 & 0x1fff; var bh4 = b4 >>> 13; var b5 = b[5] | 0; var bl5 = b5 & 0x1fff; var bh5 = b5 >>> 13; var b6 = b[6] | 0; var bl6 = b6 & 0x1fff; var bh6 = b6 >>> 13; var b7 = b[7] | 0; var bl7 = b7 & 0x1fff; var bh7 = b7 >>> 13; var b8 = b[8] | 0; var bl8 = b8 & 0x1fff; var bh8 = b8 >>> 13; var b9 = b[9] | 0; var bl9 = b9 & 0x1fff; var bh9 = b9 >>> 13; out.negative = self.negative ^ num.negative; out.length = 19; /* k = 0 */ lo = Math.imul(al0, bl0); mid = Math.imul(al0, bh0); mid = (mid + Math.imul(ah0, bl0)) | 0; hi = Math.imul(ah0, bh0); var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0; w0 &= 0x3ffffff; /* k = 1 */ lo = Math.imul(al1, bl0); mid = Math.imul(al1, bh0); mid = (mid + Math.imul(ah1, bl0)) | 0; hi = Math.imul(ah1, bh0); lo = (lo + Math.imul(al0, bl1)) | 0; mid = (mid + Math.imul(al0, bh1)) | 0; mid = (mid + Math.imul(ah0, bl1)) | 0; hi = (hi + Math.imul(ah0, bh1)) | 0; var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0; w1 &= 0x3ffffff; /* k = 2 */ lo = Math.imul(al2, bl0); mid = Math.imul(al2, bh0); mid = (mid + Math.imul(ah2, bl0)) | 0; hi = Math.imul(ah2, bh0); lo = (lo + Math.imul(al1, bl1)) | 0; mid = (mid + Math.imul(al1, bh1)) | 0; mid = (mid + Math.imul(ah1, bl1)) | 0; hi = (hi + Math.imul(ah1, bh1)) | 0; lo = (lo + Math.imul(al0, bl2)) | 0; mid = (mid + Math.imul(al0, bh2)) | 0; mid = (mid + Math.imul(ah0, bl2)) | 0; hi = (hi + Math.imul(ah0, bh2)) | 0; var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0; w2 &= 0x3ffffff; /* k = 3 */ lo = Math.imul(al3, bl0); mid = Math.imul(al3, bh0); mid = (mid + Math.imul(ah3, bl0)) | 0; hi = Math.imul(ah3, bh0); lo = (lo + Math.imul(al2, bl1)) | 0; mid = (mid + Math.imul(al2, bh1)) | 0; mid = (mid + Math.imul(ah2, bl1)) | 0; hi = (hi + Math.imul(ah2, bh1)) | 0; lo = (lo + Math.imul(al1, bl2)) | 0; mid = (mid + Math.imul(al1, bh2)) | 0; mid = (mid + Math.imul(ah1, bl2)) | 0; hi = (hi + Math.imul(ah1, bh2)) | 0; lo = (lo + Math.imul(al0, bl3)) | 0; mid = (mid + Math.imul(al0, bh3)) | 0; mid = (mid + Math.imul(ah0, bl3)) | 0; hi = (hi + Math.imul(ah0, bh3)) | 0; var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0; w3 &= 0x3ffffff; /* k = 4 */ lo = Math.imul(al4, bl0); mid = Math.imul(al4, bh0); mid = (mid + Math.imul(ah4, bl0)) | 0; hi = Math.imul(ah4, bh0); lo = (lo + Math.imul(al3, bl1)) | 0; mid = (mid + Math.imul(al3, bh1)) | 0; mid = (mid + Math.imul(ah3, bl1)) | 0; hi = (hi + Math.imul(ah3, bh1)) | 0; lo = (lo + Math.imul(al2, bl2)) | 0; mid = (mid + Math.imul(al2, bh2)) | 0; mid = (mid + Math.imul(ah2, bl2)) | 0; hi = (hi + Math.imul(ah2, bh2)) | 0; lo = (lo + Math.imul(al1, bl3)) | 0; mid = (mid + Math.imul(al1, bh3)) | 0; mid = (mid + Math.imul(ah1, bl3)) | 0; hi = (hi + Math.imul(ah1, bh3)) | 0; lo = (lo + Math.imul(al0, bl4)) | 0; mid = (mid + Math.imul(al0, bh4)) | 0; mid = (mid + Math.imul(ah0, bl4)) | 0; hi = (hi + Math.imul(ah0, bh4)) | 0; var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0; w4 &= 0x3ffffff; /* k = 5 */ lo = Math.imul(al5, bl0); mid = Math.imul(al5, bh0); mid = (mid + Math.imul(ah5, bl0)) | 0; hi = Math.imul(ah5, bh0); lo = (lo + Math.imul(al4, bl1)) | 0; mid = (mid + Math.imul(al4, bh1)) | 0; mid = (mid + Math.imul(ah4, bl1)) | 0; hi = (hi + Math.imul(ah4, bh1)) | 0; lo = (lo + Math.imul(al3, bl2)) | 0; mid = (mid + Math.imul(al3, bh2)) | 0; mid = (mid + Math.imul(ah3, bl2)) | 0; hi = (hi + Math.imul(ah3, bh2)) | 0; lo = (lo + Math.imul(al2, bl3)) | 0; mid = (mid + Math.imul(al2, bh3)) | 0; mid = (mid + Math.imul(ah2, bl3)) | 0; hi = (hi + Math.imul(ah2, bh3)) | 0; lo = (lo + Math.imul(al1, bl4)) | 0; mid = (mid + Math.imul(al1, bh4)) | 0; mid = (mid + Math.imul(ah1, bl4)) | 0; hi = (hi + Math.imul(ah1, bh4)) | 0; lo = (lo + Math.imul(al0, bl5)) | 0; mid = (mid + Math.imul(al0, bh5)) | 0; mid = (mid + Math.imul(ah0, bl5)) | 0; hi = (hi + Math.imul(ah0, bh5)) | 0; var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0; w5 &= 0x3ffffff; /* k = 6 */ lo = Math.imul(al6, bl0); mid = Math.imul(al6, bh0); mid = (mid + Math.imul(ah6, bl0)) | 0; hi = Math.imul(ah6, bh0); lo = (lo + Math.imul(al5, bl1)) | 0; mid = (mid + Math.imul(al5, bh1)) | 0; mid = (mid + Math.imul(ah5, bl1)) | 0; hi = (hi + Math.imul(ah5, bh1)) | 0; lo = (lo + Math.imul(al4, bl2)) | 0; mid = (mid + Math.imul(al4, bh2)) | 0; mid = (mid + Math.imul(ah4, bl2)) | 0; hi = (hi + Math.imul(ah4, bh2)) | 0; lo = (lo + Math.imul(al3, bl3)) | 0; mid = (mid + Math.imul(al3, bh3)) | 0; mid = (mid + Math.imul(ah3, bl3)) | 0; hi = (hi + Math.imul(ah3, bh3)) | 0; lo = (lo + Math.imul(al2, bl4)) | 0; mid = (mid + Math.imul(al2, bh4)) | 0; mid = (mid + Math.imul(ah2, bl4)) | 0; hi = (hi + Math.imul(ah2, bh4)) | 0; lo = (lo + Math.imul(al1, bl5)) | 0; mid = (mid + Math.imul(al1, bh5)) | 0; mid = (mid + Math.imul(ah1, bl5)) | 0; hi = (hi + Math.imul(ah1, bh5)) | 0; lo = (lo + Math.imul(al0, bl6)) | 0; mid = (mid + Math.imul(al0, bh6)) | 0; mid = (mid + Math.imul(ah0, bl6)) | 0; hi = (hi + Math.imul(ah0, bh6)) | 0; var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0; w6 &= 0x3ffffff; /* k = 7 */ lo = Math.imul(al7, bl0); mid = Math.imul(al7, bh0); mid = (mid + Math.imul(ah7, bl0)) | 0; hi = Math.imul(ah7, bh0); lo = (lo + Math.imul(al6, bl1)) | 0; mid = (mid + Math.imul(al6, bh1)) | 0; mid = (mid + Math.imul(ah6, bl1)) | 0; hi = (hi + Math.imul(ah6, bh1)) | 0; lo = (lo + Math.imul(al5, bl2)) | 0; mid = (mid + Math.imul(al5, bh2)) | 0; mid = (mid + Math.imul(ah5, bl2)) | 0; hi = (hi + Math.imul(ah5, bh2)) | 0; lo = (lo + Math.imul(al4, bl3)) | 0; mid = (mid + Math.imul(al4, bh3)) | 0; mid = (mid + Math.imul(ah4, bl3)) | 0; hi = (hi + Math.imul(ah4, bh3)) | 0; lo = (lo + Math.imul(al3, bl4)) | 0; mid = (mid + Math.imul(al3, bh4)) | 0; mid = (mid + Math.imul(ah3, bl4)) | 0; hi = (hi + Math.imul(ah3, bh4)) | 0; lo = (lo + Math.imul(al2, bl5)) | 0; mid = (mid + Math.imul(al2, bh5)) | 0; mid = (mid + Math.imul(ah2, bl5)) | 0; hi = (hi + Math.imul(ah2, bh5)) | 0; lo = (lo + Math.imul(al1, bl6)) | 0; mid = (mid + Math.imul(al1, bh6)) | 0; mid = (mid + Math.imul(ah1, bl6)) | 0; hi = (hi + Math.imul(ah1, bh6)) | 0; lo = (lo + Math.imul(al0, bl7)) | 0; mid = (mid + Math.imul(al0, bh7)) | 0; mid = (mid + Math.imul(ah0, bl7)) | 0; hi = (hi + Math.imul(ah0, bh7)) | 0; var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0; w7 &= 0x3ffffff; /* k = 8 */ lo = Math.imul(al8, bl0); mid = Math.imul(al8, bh0); mid = (mid + Math.imul(ah8, bl0)) | 0; hi = Math.imul(ah8, bh0); lo = (lo + Math.imul(al7, bl1)) | 0; mid = (mid + Math.imul(al7, bh1)) | 0; mid = (mid + Math.imul(ah7, bl1)) | 0; hi = (hi + Math.imul(ah7, bh1)) | 0; lo = (lo + Math.imul(al6, bl2)) | 0; mid = (mid + Math.imul(al6, bh2)) | 0; mid = (mid + Math.imul(ah6, bl2)) | 0; hi = (hi + Math.imul(ah6, bh2)) | 0; lo = (lo + Math.imul(al5, bl3)) | 0; mid = (mid + Math.imul(al5, bh3)) | 0; mid = (mid + Math.imul(ah5, bl3)) | 0; hi = (hi + Math.imul(ah5, bh3)) | 0; lo = (lo + Math.imul(al4, bl4)) | 0; mid = (mid + Math.imul(al4, bh4)) | 0; mid = (mid + Math.imul(ah4, bl4)) | 0; hi = (hi + Math.imul(ah4, bh4)) | 0; lo = (lo + Math.imul(al3, bl5)) | 0; mid = (mid + Math.imul(al3, bh5)) | 0; mid = (mid + Math.imul(ah3, bl5)) | 0; hi = (hi + Math.imul(ah3, bh5)) | 0; lo = (lo + Math.imul(al2, bl6)) | 0; mid = (mid + Math.imul(al2, bh6)) | 0; mid = (mid + Math.imul(ah2, bl6)) | 0; hi = (hi + Math.imul(ah2, bh6)) | 0; lo = (lo + Math.imul(al1, bl7)) | 0; mid = (mid + Math.imul(al1, bh7)) | 0; mid = (mid + Math.imul(ah1, bl7)) | 0; hi = (hi + Math.imul(ah1, bh7)) | 0; lo = (lo + Math.imul(al0, bl8)) | 0; mid = (mid + Math.imul(al0, bh8)) | 0; mid = (mid + Math.imul(ah0, bl8)) | 0; hi = (hi + Math.imul(ah0, bh8)) | 0; var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0; w8 &= 0x3ffffff; /* k = 9 */ lo = Math.imul(al9, bl0); mid = Math.imul(al9, bh0); mid = (mid + Math.imul(ah9, bl0)) | 0; hi = Math.imul(ah9, bh0); lo = (lo + Math.imul(al8, bl1)) | 0; mid = (mid + Math.imul(al8, bh1)) | 0; mid = (mid + Math.imul(ah8, bl1)) | 0; hi = (hi + Math.imul(ah8, bh1)) | 0; lo = (lo + Math.imul(al7, bl2)) | 0; mid = (mid + Math.imul(al7, bh2)) | 0; mid = (mid + Math.imul(ah7, bl2)) | 0; hi = (hi + Math.imul(ah7, bh2)) | 0; lo = (lo + Math.imul(al6, bl3)) | 0; mid = (mid + Math.imul(al6, bh3)) | 0; mid = (mid + Math.imul(ah6, bl3)) | 0; hi = (hi + Math.imul(ah6, bh3)) | 0; lo = (lo + Math.imul(al5, bl4)) | 0; mid = (mid + Math.imul(al5, bh4)) | 0; mid = (mid + Math.imul(ah5, bl4)) | 0; hi = (hi + Math.imul(ah5, bh4)) | 0; lo = (lo + Math.imul(al4, bl5)) | 0; mid = (mid + Math.imul(al4, bh5)) | 0; mid = (mid + Math.imul(ah4, bl5)) | 0; hi = (hi + Math.imul(ah4, bh5)) | 0; lo = (lo + Math.imul(al3, bl6)) | 0; mid = (mid + Math.imul(al3, bh6)) | 0; mid = (mid + Math.imul(ah3, bl6)) | 0; hi = (hi + Math.imul(ah3, bh6)) | 0; lo = (lo + Math.imul(al2, bl7)) | 0; mid = (mid + Math.imul(al2, bh7)) | 0; mid = (mid + Math.imul(ah2, bl7)) | 0; hi = (hi + Math.imul(ah2, bh7)) | 0; lo = (lo + Math.imul(al1, bl8)) | 0; mid = (mid + Math.imul(al1, bh8)) | 0; mid = (mid + Math.imul(ah1, bl8)) | 0; hi = (hi + Math.imul(ah1, bh8)) | 0; lo = (lo + Math.imul(al0, bl9)) | 0; mid = (mid + Math.imul(al0, bh9)) | 0; mid = (mid + Math.imul(ah0, bl9)) | 0; hi = (hi + Math.imul(ah0, bh9)) | 0; var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0; w9 &= 0x3ffffff; /* k = 10 */ lo = Math.imul(al9, bl1); mid = Math.imul(al9, bh1); mid = (mid + Math.imul(ah9, bl1)) | 0; hi = Math.imul(ah9, bh1); lo = (lo + Math.imul(al8, bl2)) | 0; mid = (mid + Math.imul(al8, bh2)) | 0; mid = (mid + Math.imul(ah8, bl2)) | 0; hi = (hi + Math.imul(ah8, bh2)) | 0; lo = (lo + Math.imul(al7, bl3)) | 0; mid = (mid + Math.imul(al7, bh3)) | 0; mid = (mid + Math.imul(ah7, bl3)) | 0; hi = (hi + Math.imul(ah7, bh3)) | 0; lo = (lo + Math.imul(al6, bl4)) | 0; mid = (mid + Math.imul(al6, bh4)) | 0; mid = (mid + Math.imul(ah6, bl4)) | 0; hi = (hi + Math.imul(ah6, bh4)) | 0; lo = (lo + Math.imul(al5, bl5)) | 0; mid = (mid + Math.imul(al5, bh5)) | 0; mid = (mid + Math.imul(ah5, bl5)) | 0; hi = (hi + Math.imul(ah5, bh5)) | 0; lo = (lo + Math.imul(al4, bl6)) | 0; mid = (mid + Math.imul(al4, bh6)) | 0; mid = (mid + Math.imul(ah4, bl6)) | 0; hi = (hi + Math.imul(ah4, bh6)) | 0; lo = (lo + Math.imul(al3, bl7)) | 0; mid = (mid + Math.imul(al3, bh7)) | 0; mid = (mid + Math.imul(ah3, bl7)) | 0; hi = (hi + Math.imul(ah3, bh7)) | 0; lo = (lo + Math.imul(al2, bl8)) | 0; mid = (mid + Math.imul(al2, bh8)) | 0; mid = (mid + Math.imul(ah2, bl8)) | 0; hi = (hi + Math.imul(ah2, bh8)) | 0; lo = (lo + Math.imul(al1, bl9)) | 0; mid = (mid + Math.imul(al1, bh9)) | 0; mid = (mid + Math.imul(ah1, bl9)) | 0; hi = (hi + Math.imul(ah1, bh9)) | 0; var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0; w10 &= 0x3ffffff; /* k = 11 */ lo = Math.imul(al9, bl2); mid = Math.imul(al9, bh2); mid = (mid + Math.imul(ah9, bl2)) | 0; hi = Math.imul(ah9, bh2); lo = (lo + Math.imul(al8, bl3)) | 0; mid = (mid + Math.imul(al8, bh3)) | 0; mid = (mid + Math.imul(ah8, bl3)) | 0; hi = (hi + Math.imul(ah8, bh3)) | 0; lo = (lo + Math.imul(al7, bl4)) | 0; mid = (mid + Math.imul(al7, bh4)) | 0; mid = (mid + Math.imul(ah7, bl4)) | 0; hi = (hi + Math.imul(ah7, bh4)) | 0; lo = (lo + Math.imul(al6, bl5)) | 0; mid = (mid + Math.imul(al6, bh5)) | 0; mid = (mid + Math.imul(ah6, bl5)) | 0; hi = (hi + Math.imul(ah6, bh5)) | 0; lo = (lo + Math.imul(al5, bl6)) | 0; mid = (mid + Math.imul(al5, bh6)) | 0; mid = (mid + Math.imul(ah5, bl6)) | 0; hi = (hi + Math.imul(ah5, bh6)) | 0; lo = (lo + Math.imul(al4, bl7)) | 0; mid = (mid + Math.imul(al4, bh7)) | 0; mid = (mid + Math.imul(ah4, bl7)) | 0; hi = (hi + Math.imul(ah4, bh7)) | 0; lo = (lo + Math.imul(al3, bl8)) | 0; mid = (mid + Math.imul(al3, bh8)) | 0; mid = (mid + Math.imul(ah3, bl8)) | 0; hi = (hi + Math.imul(ah3, bh8)) | 0; lo = (lo + Math.imul(al2, bl9)) | 0; mid = (mid + Math.imul(al2, bh9)) | 0; mid = (mid + Math.imul(ah2, bl9)) | 0; hi = (hi + Math.imul(ah2, bh9)) | 0; var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0; w11 &= 0x3ffffff; /* k = 12 */ lo = Math.imul(al9, bl3); mid = Math.imul(al9, bh3); mid = (mid + Math.imul(ah9, bl3)) | 0; hi = Math.imul(ah9, bh3); lo = (lo + Math.imul(al8, bl4)) | 0; mid = (mid + Math.imul(al8, bh4)) | 0; mid = (mid + Math.imul(ah8, bl4)) | 0; hi = (hi + Math.imul(ah8, bh4)) | 0; lo = (lo + Math.imul(al7, bl5)) | 0; mid = (mid + Math.imul(al7, bh5)) | 0; mid = (mid + Math.imul(ah7, bl5)) | 0; hi = (hi + Math.imul(ah7, bh5)) | 0; lo = (lo + Math.imul(al6, bl6)) | 0; mid = (mid + Math.imul(al6, bh6)) | 0; mid = (mid + Math.imul(ah6, bl6)) | 0; hi = (hi + Math.imul(ah6, bh6)) | 0; lo = (lo + Math.imul(al5, bl7)) | 0; mid = (mid + Math.imul(al5, bh7)) | 0; mid = (mid + Math.imul(ah5, bl7)) | 0; hi = (hi + Math.imul(ah5, bh7)) | 0; lo = (lo + Math.imul(al4, bl8)) | 0; mid = (mid + Math.imul(al4, bh8)) | 0; mid = (mid + Math.imul(ah4, bl8)) | 0; hi = (hi + Math.imul(ah4, bh8)) | 0; lo = (lo + Math.imul(al3, bl9)) | 0; mid = (mid + Math.imul(al3, bh9)) | 0; mid = (mid + Math.imul(ah3, bl9)) | 0; hi = (hi + Math.imul(ah3, bh9)) | 0; var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0; w12 &= 0x3ffffff; /* k = 13 */ lo = Math.imul(al9, bl4); mid = Math.imul(al9, bh4); mid = (mid + Math.imul(ah9, bl4)) | 0; hi = Math.imul(ah9, bh4); lo = (lo + Math.imul(al8, bl5)) | 0; mid = (mid + Math.imul(al8, bh5)) | 0; mid = (mid + Math.imul(ah8, bl5)) | 0; hi = (hi + Math.imul(ah8, bh5)) | 0; lo = (lo + Math.imul(al7, bl6)) | 0; mid = (mid + Math.imul(al7, bh6)) | 0; mid = (mid + Math.imul(ah7, bl6)) | 0; hi = (hi + Math.imul(ah7, bh6)) | 0; lo = (lo + Math.imul(al6, bl7)) | 0; mid = (mid + Math.imul(al6, bh7)) | 0; mid = (mid + Math.imul(ah6, bl7)) | 0; hi = (hi + Math.imul(ah6, bh7)) | 0; lo = (lo + Math.imul(al5, bl8)) | 0; mid = (mid + Math.imul(al5, bh8)) | 0; mid = (mid + Math.imul(ah5, bl8)) | 0; hi = (hi + Math.imul(ah5, bh8)) | 0; lo = (lo + Math.imul(al4, bl9)) | 0; mid = (mid + Math.imul(al4, bh9)) | 0; mid = (mid + Math.imul(ah4, bl9)) | 0; hi = (hi + Math.imul(ah4, bh9)) | 0; var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0; w13 &= 0x3ffffff; /* k = 14 */ lo = Math.imul(al9, bl5); mid = Math.imul(al9, bh5); mid = (mid + Math.imul(ah9, bl5)) | 0; hi = Math.imul(ah9, bh5); lo = (lo + Math.imul(al8, bl6)) | 0; mid = (mid + Math.imul(al8, bh6)) | 0; mid = (mid + Math.imul(ah8, bl6)) | 0; hi = (hi + Math.imul(ah8, bh6)) | 0; lo = (lo + Math.imul(al7, bl7)) | 0; mid = (mid + Math.imul(al7, bh7)) | 0; mid = (mid + Math.imul(ah7, bl7)) | 0; hi = (hi + Math.imul(ah7, bh7)) | 0; lo = (lo + Math.imul(al6, bl8)) | 0; mid = (mid + Math.imul(al6, bh8)) | 0; mid = (mid + Math.imul(ah6, bl8)) | 0; hi = (hi + Math.imul(ah6, bh8)) | 0; lo = (lo + Math.imul(al5, bl9)) | 0; mid = (mid + Math.imul(al5, bh9)) | 0; mid = (mid + Math.imul(ah5, bl9)) | 0; hi = (hi + Math.imul(ah5, bh9)) | 0; var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0; w14 &= 0x3ffffff; /* k = 15 */ lo = Math.imul(al9, bl6); mid = Math.imul(al9, bh6); mid = (mid + Math.imul(ah9, bl6)) | 0; hi = Math.imul(ah9, bh6); lo = (lo + Math.imul(al8, bl7)) | 0; mid = (mid + Math.imul(al8, bh7)) | 0; mid = (mid + Math.imul(ah8, bl7)) | 0; hi = (hi + Math.imul(ah8, bh7)) | 0; lo = (lo + Math.imul(al7, bl8)) | 0; mid = (mid + Math.imul(al7, bh8)) | 0; mid = (mid + Math.imul(ah7, bl8)) | 0; hi = (hi + Math.imul(ah7, bh8)) | 0; lo = (lo + Math.imul(al6, bl9)) | 0; mid = (mid + Math.imul(al6, bh9)) | 0; mid = (mid + Math.imul(ah6, bl9)) | 0; hi = (hi + Math.imul(ah6, bh9)) | 0; var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0; w15 &= 0x3ffffff; /* k = 16 */ lo = Math.imul(al9, bl7); mid = Math.imul(al9, bh7); mid = (mid + Math.imul(ah9, bl7)) | 0; hi = Math.imul(ah9, bh7); lo = (lo + Math.imul(al8, bl8)) | 0; mid = (mid + Math.imul(al8, bh8)) | 0; mid = (mid + Math.imul(ah8, bl8)) | 0; hi = (hi + Math.imul(ah8, bh8)) | 0; lo = (lo + Math.imul(al7, bl9)) | 0; mid = (mid + Math.imul(al7, bh9)) | 0; mid = (mid + Math.imul(ah7, bl9)) | 0; hi = (hi + Math.imul(ah7, bh9)) | 0; var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0; w16 &= 0x3ffffff; /* k = 17 */ lo = Math.imul(al9, bl8); mid = Math.imul(al9, bh8); mid = (mid + Math.imul(ah9, bl8)) | 0; hi = Math.imul(ah9, bh8); lo = (lo + Math.imul(al8, bl9)) | 0; mid = (mid + Math.imul(al8, bh9)) | 0; mid = (mid + Math.imul(ah8, bl9)) | 0; hi = (hi + Math.imul(ah8, bh9)) | 0; var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0; w17 &= 0x3ffffff; /* k = 18 */ lo = Math.imul(al9, bl9); mid = Math.imul(al9, bh9); mid = (mid + Math.imul(ah9, bl9)) | 0; hi = Math.imul(ah9, bh9); var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0; c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0; w18 &= 0x3ffffff; o[0] = w0; o[1] = w1; o[2] = w2; o[3] = w3; o[4] = w4; o[5] = w5; o[6] = w6; o[7] = w7; o[8] = w8; o[9] = w9; o[10] = w10; o[11] = w11; o[12] = w12; o[13] = w13; o[14] = w14; o[15] = w15; o[16] = w16; o[17] = w17; o[18] = w18; if (c !== 0) { o[19] = c; out.length++; } return out; }; // Polyfill comb if (!Math.imul) { comb10MulTo = smallMulTo; } function bigMulTo (self, num, out) { out.negative = num.negative ^ self.negative; out.length = self.length + num.length; var carry = 0; var hncarry = 0; for (var k = 0; k < out.length - 1; k++) { // Sum all words with the same `i + j = k` and accumulate `ncarry`, // note that ncarry could be >= 0x3ffffff var ncarry = hncarry; hncarry = 0; var rword = carry & 0x3ffffff; var maxJ = Math.min(k, num.length - 1); for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) { var i = k - j; var a = self.words[i] | 0; var b = num.words[j] | 0; var r = a * b; var lo = r & 0x3ffffff; ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0; lo = (lo + rword) | 0; rword = lo & 0x3ffffff; ncarry = (ncarry + (lo >>> 26)) | 0; hncarry += ncarry >>> 26; ncarry &= 0x3ffffff; } out.words[k] = rword; carry = ncarry; ncarry = hncarry; } if (carry !== 0) { out.words[k] = carry; } else { out.length--; } return out.strip(); } function jumboMulTo (self, num, out) { var fftm = new FFTM(); return fftm.mulp(self, num, out); } BN.prototype.mulTo = function mulTo (num, out) { var res; var len = this.length + num.length; if (this.length === 10 && num.length === 10) { res = comb10MulTo(this, num, out); } else if (len < 63) { res = smallMulTo(this, num, out); } else if (len < 1024) { res = bigMulTo(this, num, out); } else { res = jumboMulTo(this, num, out); } return res; }; // Cooley-Tukey algorithm for FFT // slightly revisited to rely on looping instead of recursion function FFTM (x, y) { this.x = x; this.y = y; } FFTM.prototype.makeRBT = function makeRBT (N) { var t = new Array(N); var l = BN.prototype._countBits(N) - 1; for (var i = 0; i < N; i++) { t[i] = this.revBin(i, l, N); } return t; }; // Returns binary-reversed representation of `x` FFTM.prototype.revBin = function revBin (x, l, N) { if (x === 0 || x === N - 1) return x; var rb = 0; for (var i = 0; i < l; i++) { rb |= (x & 1) << (l - i - 1); x >>= 1; } return rb; }; // Performs "tweedling" phase, therefore 'emulating' // behaviour of the recursive algorithm FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) { for (var i = 0; i < N; i++) { rtws[i] = rws[rbt[i]]; itws[i] = iws[rbt[i]]; } }; FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) { this.permute(rbt, rws, iws, rtws, itws, N); for (var s = 1; s < N; s <<= 1) { var l = s << 1; var rtwdf = Math.cos(2 * Math.PI / l); var itwdf = Math.sin(2 * Math.PI / l); for (var p = 0; p < N; p += l) { var rtwdf_ = rtwdf; var itwdf_ = itwdf; for (var j = 0; j < s; j++) { var re = rtws[p + j]; var ie = itws[p + j]; var ro = rtws[p + j + s]; var io = itws[p + j + s]; var rx = rtwdf_ * ro - itwdf_ * io; io = rtwdf_ * io + itwdf_ * ro; ro = rx; rtws[p + j] = re + ro; itws[p + j] = ie + io; rtws[p + j + s] = re - ro; itws[p + j + s] = ie - io; /* jshint maxdepth : false */ if (j !== l) { rx = rtwdf * rtwdf_ - itwdf * itwdf_; itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_; rtwdf_ = rx; } } } } }; FFTM.prototype.guessLen13b = function guessLen13b (n, m) { var N = Math.max(m, n) | 1; var odd = N & 1; var i = 0; for (N = N / 2 | 0; N; N = N >>> 1) { i++; } return 1 << i + 1 + odd; }; FFTM.prototype.conjugate = function conjugate (rws, iws, N) { if (N <= 1) return; for (var i = 0; i < N / 2; i++) { var t = rws[i]; rws[i] = rws[N - i - 1]; rws[N - i - 1] = t; t = iws[i]; iws[i] = -iws[N - i - 1]; iws[N - i - 1] = -t; } }; FFTM.prototype.normalize13b = function normalize13b (ws, N) { var carry = 0; for (var i = 0; i < N / 2; i++) { var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry; ws[i] = w & 0x3ffffff; if (w < 0x4000000) { carry = 0; } else { carry = w / 0x4000000 | 0; } } return ws; }; FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) { var carry = 0; for (var i = 0; i < len; i++) { carry = carry + (ws[i] | 0); rws[2 * i] = carry & 0x1fff; carry = carry >>> 13; rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13; } // Pad with zeroes for (i = 2 * len; i < N; ++i) { rws[i] = 0; } assert(carry === 0); assert((carry & ~0x1fff) === 0); }; FFTM.prototype.stub = function stub (N) { var ph = new Array(N); for (var i = 0; i < N; i++) { ph[i] = 0; } return ph; }; FFTM.prototype.mulp = function mulp (x, y, out) { var N = 2 * this.guessLen13b(x.length, y.length); var rbt = this.makeRBT(N); var _ = this.stub(N); var rws = new Array(N); var rwst = new Array(N); var iwst = new Array(N); var nrws = new Array(N); var nrwst = new Array(N); var niwst = new Array(N); var rmws = out.words; rmws.length = N; this.convert13b(x.words, x.length, rws, N); this.convert13b(y.words, y.length, nrws, N); this.transform(rws, _, rwst, iwst, N, rbt); this.transform(nrws, _, nrwst, niwst, N, rbt); for (var i = 0; i < N; i++) { var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i]; iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i]; rwst[i] = rx; } this.conjugate(rwst, iwst, N); this.transform(rwst, iwst, rmws, _, N, rbt); this.conjugate(rmws, _, N); this.normalize13b(rmws, N); out.negative = x.negative ^ y.negative; out.length = x.length + y.length; return out.strip(); }; // Multiply `this` by `num` BN.prototype.mul = function mul (num) { var out = new BN(null); out.words = new Array(this.length + num.length); return this.mulTo(num, out); }; // Multiply employing FFT BN.prototype.mulf = function mulf (num) { var out = new BN(null); out.words = new Array(this.length + num.length); return jumboMulTo(this, num, out); }; // In-place Multiplication BN.prototype.imul = function imul (num) { return this.clone().mulTo(num, this); }; BN.prototype.imuln = function imuln (num) { assert(typeof num === 'number'); assert(num < 0x4000000); // Carry var carry = 0; for (var i = 0; i < this.length; i++) { var w = (this.words[i] | 0) * num; var lo = (w & 0x3ffffff) + (carry & 0x3ffffff); carry >>= 26; carry += (w / 0x4000000) | 0; // NOTE: lo is 27bit maximum carry += lo >>> 26; this.words[i] = lo & 0x3ffffff; } if (carry !== 0) { this.words[i] = carry; this.length++; } return this; }; BN.prototype.muln = function muln (num) { return this.clone().imuln(num); }; // `this` * `this` BN.prototype.sqr = function sqr () { return this.mul(this); }; // `this` * `this` in-place BN.prototype.isqr = function isqr () { return this.imul(this.clone()); }; // Math.pow(`this`, `num`) BN.prototype.pow = function pow (num) { var w = toBitArray(num); if (w.length === 0) return new BN(1); // Skip leading zeroes var res = this; for (var i = 0; i < w.length; i++, res = res.sqr()) { if (w[i] !== 0) break; } if (++i < w.length) { for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) { if (w[i] === 0) continue; res = res.mul(q); } } return res; }; // Shift-left in-place BN.prototype.iushln = function iushln (bits) { assert(typeof bits === 'number' && bits >= 0); var r = bits % 26; var s = (bits - r) / 26; var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r); var i; if (r !== 0) { var carry = 0; for (i = 0; i < this.length; i++) { var newCarry = this.words[i] & carryMask; var c = ((this.words[i] | 0) - newCarry) << r; this.words[i] = c | carry; carry = newCarry >>> (26 - r); } if (carry) { this.words[i] = carry; this.length++; } } if (s !== 0) { for (i = this.length - 1; i >= 0; i--) { this.words[i + s] = this.words[i]; } for (i = 0; i < s; i++) { this.words[i] = 0; } this.length += s; } return this.strip(); }; BN.prototype.ishln = function ishln (bits) { // TODO(indutny): implement me assert(this.negative === 0); return this.iushln(bits); }; // Shift-right in-place // NOTE: `hint` is a lowest bit before trailing zeroes // NOTE: if `extended` is present - it will be filled with destroyed bits BN.prototype.iushrn = function iushrn (bits, hint, extended) { assert(typeof bits === 'number' && bits >= 0); var h; if (hint) { h = (hint - (hint % 26)) / 26; } else { h = 0; } var r = bits % 26; var s = Math.min((bits - r) / 26, this.length); var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); var maskedWords = extended; h -= s; h = Math.max(0, h); // Extended mode, copy masked part if (maskedWords) { for (var i = 0; i < s; i++) { maskedWords.words[i] = this.words[i]; } maskedWords.length = s; } if (s === 0) { // No-op, we should not move anything at all } else if (this.length > s) { this.length -= s; for (i = 0; i < this.length; i++) { this.words[i] = this.words[i + s]; } } else { this.words[0] = 0; this.length = 1; } var carry = 0; for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) { var word = this.words[i] | 0; this.words[i] = (carry << (26 - r)) | (word >>> r); carry = word & mask; } // Push carried bits as a mask if (maskedWords && carry !== 0) { maskedWords.words[maskedWords.length++] = carry; } if (this.length === 0) { this.words[0] = 0; this.length = 1; } return this.strip(); }; BN.prototype.ishrn = function ishrn (bits, hint, extended) { // TODO(indutny): implement me assert(this.negative === 0); return this.iushrn(bits, hint, extended); }; // Shift-left BN.prototype.shln = function shln (bits) { return this.clone().ishln(bits); }; BN.prototype.ushln = function ushln (bits) { return this.clone().iushln(bits); }; // Shift-right BN.prototype.shrn = function shrn (bits) { return this.clone().ishrn(bits); }; BN.prototype.ushrn = function ushrn (bits) { return this.clone().iushrn(bits); }; // Test if n bit is set BN.prototype.testn = function testn (bit) { assert(typeof bit === 'number' && bit >= 0); var r = bit % 26; var s = (bit - r) / 26; var q = 1 << r; // Fast case: bit is much higher than all existing words if (this.length <= s) return false; // Check bit and return var w = this.words[s]; return !!(w & q); }; // Return only lowers bits of number (in-place) BN.prototype.imaskn = function imaskn (bits) { assert(typeof bits === 'number' && bits >= 0); var r = bits % 26; var s = (bits - r) / 26; assert(this.negative === 0, 'imaskn works only with positive numbers'); if (this.length <= s) { return this; } if (r !== 0) { s++; } this.length = Math.min(s, this.length); if (r !== 0) { var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r); this.words[this.length - 1] &= mask; } return this.strip(); }; // Return only lowers bits of number BN.prototype.maskn = function maskn (bits) { return this.clone().imaskn(bits); }; // Add plain number `num` to `this` BN.prototype.iaddn = function iaddn (num) { assert(typeof num === 'number'); assert(num < 0x4000000); if (num < 0) return this.isubn(-num); // Possible sign change if (this.negative !== 0) { if (this.length === 1 && (this.words[0] | 0) < num) { this.words[0] = num - (this.words[0] | 0); this.negative = 0; return this; } this.negative = 0; this.isubn(num); this.negative = 1; return this; } // Add without checks return this._iaddn(num); }; BN.prototype._iaddn = function _iaddn (num) { this.words[0] += num; // Carry for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) { this.words[i] -= 0x4000000; if (i === this.length - 1) { this.words[i + 1] = 1; } else { this.words[i + 1]++; } } this.length = Math.max(this.length, i + 1); return this; }; // Subtract plain number `num` from `this` BN.prototype.isubn = function isubn (num) { assert(typeof num === 'number'); assert(num < 0x4000000); if (num < 0) return this.iaddn(-num); if (this.negative !== 0) { this.negative = 0; this.iaddn(num); this.negative = 1; return this; } this.words[0] -= num; if (this.length === 1 && this.words[0] < 0) { this.words[0] = -this.words[0]; this.negative = 1; } else { // Carry for (var i = 0; i < this.length && this.words[i] < 0; i++) { this.words[i] += 0x4000000; this.words[i + 1] -= 1; } } return this.strip(); }; BN.prototype.addn = function addn (num) { return this.clone().iaddn(num); }; BN.prototype.subn = function subn (num) { return this.clone().isubn(num); }; BN.prototype.iabs = function iabs () { this.negative = 0; return this; }; BN.prototype.abs = function abs () { return this.clone().iabs(); }; BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) { var len = num.length + shift; var i; this._expand(len); var w; var carry = 0; for (i = 0; i < num.length; i++) { w = (this.words[i + shift] | 0) + carry; var right = (num.words[i] | 0) * mul; w -= right & 0x3ffffff; carry = (w >> 26) - ((right / 0x4000000) | 0); this.words[i + shift] = w & 0x3ffffff; } for (; i < this.length - shift; i++) { w = (this.words[i + shift] | 0) + carry; carry = w >> 26; this.words[i + shift] = w & 0x3ffffff; } if (carry === 0) return this.strip(); // Subtraction overflow assert(carry === -1); carry = 0; for (i = 0; i < this.length; i++) { w = -(this.words[i] | 0) + carry; carry = w >> 26; this.words[i] = w & 0x3ffffff; } this.negative = 1; return this.strip(); }; BN.prototype._wordDiv = function _wordDiv (num, mode) { var shift = this.length - num.length; var a = this.clone(); var b = num; // Normalize var bhi = b.words[b.length - 1] | 0; var bhiBits = this._countBits(bhi); shift = 26 - bhiBits; if (shift !== 0) { b = b.ushln(shift); a.iushln(shift); bhi = b.words[b.length - 1] | 0; } // Initialize quotient var m = a.length - b.length; var q; if (mode !== 'mod') { q = new BN(null); q.length = m + 1; q.words = new Array(q.length); for (var i = 0; i < q.length; i++) { q.words[i] = 0; } } var diff = a.clone()._ishlnsubmul(b, 1, m); if (diff.negative === 0) { a = diff; if (q) { q.words[m] = 1; } } for (var j = m - 1; j >= 0; j--) { var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max // (0x7ffffff) qj = Math.min((qj / bhi) | 0, 0x3ffffff); a._ishlnsubmul(b, qj, j); while (a.negative !== 0) { qj--; a.negative = 0; a._ishlnsubmul(b, 1, j); if (!a.isZero()) { a.negative ^= 1; } } if (q) { q.words[j] = qj; } } if (q) { q.strip(); } a.strip(); // Denormalize if (mode !== 'div' && shift !== 0) { a.iushrn(shift); } return { div: q || null, mod: a }; }; // NOTE: 1) `mode` can be set to `mod` to request mod only, // to `div` to request div only, or be absent to // request both div & mod // 2) `positive` is true if unsigned mod is requested BN.prototype.divmod = function divmod (num, mode, positive) { assert(!num.isZero()); if (this.isZero()) { return { div: new BN(0), mod: new BN(0) }; } var div, mod, res; if (this.negative !== 0 && num.negative === 0) { res = this.neg().divmod(num, mode); if (mode !== 'mod') { div = res.div.neg(); } if (mode !== 'div') { mod = res.mod.neg(); if (positive && mod.negative !== 0) { mod.iadd(num); } } return { div: div, mod: mod }; } if (this.negative === 0 && num.negative !== 0) { res = this.divmod(num.neg(), mode); if (mode !== 'mod') { div = res.div.neg(); } return { div: div, mod: res.mod }; } if ((this.negative & num.negative) !== 0) { res = this.neg().divmod(num.neg(), mode); if (mode !== 'div') { mod = res.mod.neg(); if (positive && mod.negative !== 0) { mod.isub(num); } } return { div: res.div, mod: mod }; } // Both numbers are positive at this point // Strip both numbers to approximate shift value if (num.length > this.length || this.cmp(num) < 0) { return { div: new BN(0), mod: this }; } // Very short reduction if (num.length === 1) { if (mode === 'div') { return { div: this.divn(num.words[0]), mod: null }; } if (mode === 'mod') { return { div: null, mod: new BN(this.modn(num.words[0])) }; } return { div: this.divn(num.words[0]), mod: new BN(this.modn(num.words[0])) }; } return this._wordDiv(num, mode); }; // Find `this` / `num` BN.prototype.div = function div (num) { return this.divmod(num, 'div', false).div; }; // Find `this` % `num` BN.prototype.mod = function mod (num) { return this.divmod(num, 'mod', false).mod; }; BN.prototype.umod = function umod (num) { return this.divmod(num, 'mod', true).mod; }; // Find Round(`this` / `num`) BN.prototype.divRound = function divRound (num) { var dm = this.divmod(num); // Fast case - exact division if (dm.mod.isZero()) return dm.div; var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod; var half = num.ushrn(1); var r2 = num.andln(1); var cmp = mod.cmp(half); // Round down if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; // Round up return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1); }; BN.prototype.modn = function modn (num) { assert(num <= 0x3ffffff); var p = (1 << 26) % num; var acc = 0; for (var i = this.length - 1; i >= 0; i--) { acc = (p * acc + (this.words[i] | 0)) % num; } return acc; }; // In-place division by number BN.prototype.idivn = function idivn (num) { assert(num <= 0x3ffffff); var carry = 0; for (var i = this.length - 1; i >= 0; i--) { var w = (this.words[i] | 0) + carry * 0x4000000; this.words[i] = (w / num) | 0; carry = w % num; } return this.strip(); }; BN.prototype.divn = function divn (num) { return this.clone().idivn(num); }; BN.prototype.egcd = function egcd (p) { assert(p.negative === 0); assert(!p.isZero()); var x = this; var y = p.clone(); if (x.negative !== 0) { x = x.umod(p); } else { x = x.clone(); } // A * x + B * y = x var A = new BN(1); var B = new BN(0); // C * x + D * y = y var C = new BN(0); var D = new BN(1); var g = 0; while (x.isEven() && y.isEven()) { x.iushrn(1); y.iushrn(1); ++g; } var yp = y.clone(); var xp = x.clone(); while (!x.isZero()) { for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1); if (i > 0) { x.iushrn(i); while (i-- > 0) { if (A.isOdd() || B.isOdd()) { A.iadd(yp); B.isub(xp); } A.iushrn(1); B.iushrn(1); } } for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); if (j > 0) { y.iushrn(j); while (j-- > 0) { if (C.isOdd() || D.isOdd()) { C.iadd(yp); D.isub(xp); } C.iushrn(1); D.iushrn(1); } } if (x.cmp(y) >= 0) { x.isub(y); A.isub(C); B.isub(D); } else { y.isub(x); C.isub(A); D.isub(B); } } return { a: C, b: D, gcd: y.iushln(g) }; }; // This is reduced incarnation of the binary EEA // above, designated to invert members of the // _prime_ fields F(p) at a maximal speed BN.prototype._invmp = function _invmp (p) { assert(p.negative === 0); assert(!p.isZero()); var a = this; var b = p.clone(); if (a.negative !== 0) { a = a.umod(p); } else { a = a.clone(); } var x1 = new BN(1); var x2 = new BN(0); var delta = b.clone(); while (a.cmpn(1) > 0 && b.cmpn(1) > 0) { for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1); if (i > 0) { a.iushrn(i); while (i-- > 0) { if (x1.isOdd()) { x1.iadd(delta); } x1.iushrn(1); } } for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1); if (j > 0) { b.iushrn(j); while (j-- > 0) { if (x2.isOdd()) { x2.iadd(delta); } x2.iushrn(1); } } if (a.cmp(b) >= 0) { a.isub(b); x1.isub(x2); } else { b.isub(a); x2.isub(x1); } } var res; if (a.cmpn(1) === 0) { res = x1; } else { res = x2; } if (res.cmpn(0) < 0) { res.iadd(p); } return res; }; BN.prototype.gcd = function gcd (num) { if (this.isZero()) return num.abs(); if (num.isZero()) return this.abs(); var a = this.clone(); var b = num.clone(); a.negative = 0; b.negative = 0; // Remove common factor of two for (var shift = 0; a.isEven() && b.isEven(); shift++) { a.iushrn(1); b.iushrn(1); } do { while (a.isEven()) { a.iushrn(1); } while (b.isEven()) { b.iushrn(1); } var r = a.cmp(b); if (r < 0) { // Swap `a` and `b` to make `a` always bigger than `b` var t = a; a = b; b = t; } else if (r === 0 || b.cmpn(1) === 0) { break; } a.isub(b); } while (true); return b.iushln(shift); }; // Invert number in the field F(num) BN.prototype.invm = function invm (num) { return this.egcd(num).a.umod(num); }; BN.prototype.isEven = function isEven () { return (this.words[0] & 1) === 0; }; BN.prototype.isOdd = function isOdd () { return (this.words[0] & 1) === 1; }; // And first word and num BN.prototype.andln = function andln (num) { return this.words[0] & num; }; // Increment at the bit position in-line BN.prototype.bincn = function bincn (bit) { assert(typeof bit === 'number'); var r = bit % 26; var s = (bit - r) / 26; var q = 1 << r; // Fast case: bit is much higher than all existing words if (this.length <= s) { this._expand(s + 1); this.words[s] |= q; return this; } // Add bit and propagate, if needed var carry = q; for (var i = s; carry !== 0 && i < this.length; i++) { var w = this.words[i] | 0; w += carry; carry = w >>> 26; w &= 0x3ffffff; this.words[i] = w; } if (carry !== 0) { this.words[i] = carry; this.length++; } return this; }; BN.prototype.isZero = function isZero () { return this.length === 1 && this.words[0] === 0; }; BN.prototype.cmpn = function cmpn (num) { var negative = num < 0; if (this.negative !== 0 && !negative) return -1; if (this.negative === 0 && negative) return 1; this.strip(); var res; if (this.length > 1) { res = 1; } else { if (negative) { num = -num; } assert(num <= 0x3ffffff, 'Number is too big'); var w = this.words[0] | 0; res = w === num ? 0 : w < num ? -1 : 1; } if (this.negative !== 0) return -res | 0; return res; }; // Compare two numbers and return: // 1 - if `this` > `num` // 0 - if `this` == `num` // -1 - if `this` < `num` BN.prototype.cmp = function cmp (num) { if (this.negative !== 0 && num.negative === 0) return -1; if (this.negative === 0 && num.negative !== 0) return 1; var res = this.ucmp(num); if (this.negative !== 0) return -res | 0; return res; }; // Unsigned comparison BN.prototype.ucmp = function ucmp (num) { // At this point both numbers have the same sign if (this.length > num.length) return 1; if (this.length < num.length) return -1; var res = 0; for (var i = this.length - 1; i >= 0; i--) { var a = this.words[i] | 0; var b = num.words[i] | 0; if (a === b) continue; if (a < b) { res = -1; } else if (a > b) { res = 1; } break; } return res; }; BN.prototype.gtn = function gtn (num) { return this.cmpn(num) === 1; }; BN.prototype.gt = function gt (num) { return this.cmp(num) === 1; }; BN.prototype.gten = function gten (num) { return this.cmpn(num) >= 0; }; BN.prototype.gte = function gte (num) { return this.cmp(num) >= 0; }; BN.prototype.ltn = function ltn (num) { return this.cmpn(num) === -1; }; BN.prototype.lt = function lt (num) { return this.cmp(num) === -1; }; BN.prototype.lten = function lten (num) { return this.cmpn(num) <= 0; }; BN.prototype.lte = function lte (num) { return this.cmp(num) <= 0; }; BN.prototype.eqn = function eqn (num) { return this.cmpn(num) === 0; }; BN.prototype.eq = function eq (num) { return this.cmp(num) === 0; }; // // A reduce context, could be using montgomery or something better, depending // on the `m` itself. // BN.red = function red (num) { return new Red(num); }; BN.prototype.toRed = function toRed (ctx) { assert(!this.red, 'Already a number in reduction context'); assert(this.negative === 0, 'red works only with positives'); return ctx.convertTo(this)._forceRed(ctx); }; BN.prototype.fromRed = function fromRed () { assert(this.red, 'fromRed works only with numbers in reduction context'); return this.red.convertFrom(this); }; BN.prototype._forceRed = function _forceRed (ctx) { this.red = ctx; return this; }; BN.prototype.forceRed = function forceRed (ctx) { assert(!this.red, 'Already a number in reduction context'); return this._forceRed(ctx); }; BN.prototype.redAdd = function redAdd (num) { assert(this.red, 'redAdd works only with red numbers'); return this.red.add(this, num); }; BN.prototype.redIAdd = function redIAdd (num) { assert(this.red, 'redIAdd works only with red numbers'); return this.red.iadd(this, num); }; BN.prototype.redSub = function redSub (num) { assert(this.red, 'redSub works only with red numbers'); return this.red.sub(this, num); }; BN.prototype.redISub = function redISub (num) { assert(this.red, 'redISub works only with red numbers'); return this.red.isub(this, num); }; BN.prototype.redShl = function redShl (num) { assert(this.red, 'redShl works only with red numbers'); return this.red.shl(this, num); }; BN.prototype.redMul = function redMul (num) { assert(this.red, 'redMul works only with red numbers'); this.red._verify2(this, num); return this.red.mul(this, num); }; BN.prototype.redIMul = function redIMul (num) { assert(this.red, 'redMul works only with red numbers'); this.red._verify2(this, num); return this.red.imul(this, num); }; BN.prototype.redSqr = function redSqr () { assert(this.red, 'redSqr works only with red numbers'); this.red._verify1(this); return this.red.sqr(this); }; BN.prototype.redISqr = function redISqr () { assert(this.red, 'redISqr works only with red numbers'); this.red._verify1(this); return this.red.isqr(this); }; // Square root over p BN.prototype.redSqrt = function redSqrt () { assert(this.red, 'redSqrt works only with red numbers'); this.red._verify1(this); return this.red.sqrt(this); }; BN.prototype.redInvm = function redInvm () { assert(this.red, 'redInvm works only with red numbers'); this.red._verify1(this); return this.red.invm(this); }; // Return negative clone of `this` % `red modulo` BN.prototype.redNeg = function redNeg () { assert(this.red, 'redNeg works only with red numbers'); this.red._verify1(this); return this.red.neg(this); }; BN.prototype.redPow = function redPow (num) { assert(this.red && !num.red, 'redPow(normalNum)'); this.red._verify1(this); return this.red.pow(this, num); }; // Prime numbers with efficient reduction var primes = { k256: null, p224: null, p192: null, p25519: null }; // Pseudo-Mersenne prime function MPrime (name, p) { // P = 2 ^ N - K this.name = name; this.p = new BN(p, 16); this.n = this.p.bitLength(); this.k = new BN(1).iushln(this.n).isub(this.p); this.tmp = this._tmp(); } MPrime.prototype._tmp = function _tmp () { var tmp = new BN(null); tmp.words = new Array(Math.ceil(this.n / 13)); return tmp; }; MPrime.prototype.ireduce = function ireduce (num) { // Assumes that `num` is less than `P^2` // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P) var r = num; var rlen; do { this.split(r, this.tmp); r = this.imulK(r); r = r.iadd(this.tmp); rlen = r.bitLength(); } while (rlen > this.n); var cmp = rlen < this.n ? -1 : r.ucmp(this.p); if (cmp === 0) { r.words[0] = 0; r.length = 1; } else if (cmp > 0) { r.isub(this.p); } else { r.strip(); } return r; }; MPrime.prototype.split = function split (input, out) { input.iushrn(this.n, 0, out); }; MPrime.prototype.imulK = function imulK (num) { return num.imul(this.k); }; function K256 () { MPrime.call( this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f'); } inherits(K256, MPrime); K256.prototype.split = function split (input, output) { // 256 = 9 * 26 + 22 var mask = 0x3fffff; var outLen = Math.min(input.length, 9); for (var i = 0; i < outLen; i++) { output.words[i] = input.words[i]; } output.length = outLen; if (input.length <= 9) { input.words[0] = 0; input.length = 1; return; } // Shift by 9 limbs var prev = input.words[9]; output.words[output.length++] = prev & mask; for (i = 10; i < input.length; i++) { var next = input.words[i] | 0; input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22); prev = next; } prev >>>= 22; input.words[i - 10] = prev; if (prev === 0 && input.length > 10) { input.length -= 10; } else { input.length -= 9; } }; K256.prototype.imulK = function imulK (num) { // K = 0x1000003d1 = [ 0x40, 0x3d1 ] num.words[num.length] = 0; num.words[num.length + 1] = 0; num.length += 2; // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390 var lo = 0; for (var i = 0; i < num.length; i++) { var w = num.words[i] | 0; lo += w * 0x3d1; num.words[i] = lo & 0x3ffffff; lo = w * 0x40 + ((lo / 0x4000000) | 0); } // Fast length reduction if (num.words[num.length - 1] === 0) { num.length--; if (num.words[num.length - 1] === 0) { num.length--; } } return num; }; function P224 () { MPrime.call( this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001'); } inherits(P224, MPrime); function P192 () { MPrime.call( this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff'); } inherits(P192, MPrime); function P25519 () { // 2 ^ 255 - 19 MPrime.call( this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed'); } inherits(P25519, MPrime); P25519.prototype.imulK = function imulK (num) { // K = 0x13 var carry = 0; for (var i = 0; i < num.length; i++) { var hi = (num.words[i] | 0) * 0x13 + carry; var lo = hi & 0x3ffffff; hi >>>= 26; num.words[i] = lo; carry = hi; } if (carry !== 0) { num.words[num.length++] = carry; } return num; }; // Exported mostly for testing purposes, use plain name instead BN._prime = function prime (name) { // Cached version of prime if (primes[name]) return primes[name]; var prime; if (name === 'k256') { prime = new K256(); } else if (name === 'p224') { prime = new P224(); } else if (name === 'p192') { prime = new P192(); } else if (name === 'p25519') { prime = new P25519(); } else { throw new Error('Unknown prime ' + name); } primes[name] = prime; return prime; }; // // Base reduction engine // function Red (m) { if (typeof m === 'string') { var prime = BN._prime(m); this.m = prime.p; this.prime = prime; } else { assert(m.gtn(1), 'modulus must be greater than 1'); this.m = m; this.prime = null; } } Red.prototype._verify1 = function _verify1 (a) { assert(a.negative === 0, 'red works only with positives'); assert(a.red, 'red works only with red numbers'); }; Red.prototype._verify2 = function _verify2 (a, b) { assert((a.negative | b.negative) === 0, 'red works only with positives'); assert(a.red && a.red === b.red, 'red works only with red numbers'); }; Red.prototype.imod = function imod (a) { if (this.prime) return this.prime.ireduce(a)._forceRed(this); return a.umod(this.m)._forceRed(this); }; Red.prototype.neg = function neg (a) { if (a.isZero()) { return a.clone(); } return this.m.sub(a)._forceRed(this); }; Red.prototype.add = function add (a, b) { this._verify2(a, b); var res = a.add(b); if (res.cmp(this.m) >= 0) { res.isub(this.m); } return res._forceRed(this); }; Red.prototype.iadd = function iadd (a, b) { this._verify2(a, b); var res = a.iadd(b); if (res.cmp(this.m) >= 0) { res.isub(this.m); } return res; }; Red.prototype.sub = function sub (a, b) { this._verify2(a, b); var res = a.sub(b); if (res.cmpn(0) < 0) { res.iadd(this.m); } return res._forceRed(this); }; Red.prototype.isub = function isub (a, b) { this._verify2(a, b); var res = a.isub(b); if (res.cmpn(0) < 0) { res.iadd(this.m); } return res; }; Red.prototype.shl = function shl (a, num) { this._verify1(a); return this.imod(a.ushln(num)); }; Red.prototype.imul = function imul (a, b) { this._verify2(a, b); return this.imod(a.imul(b)); }; Red.prototype.mul = function mul (a, b) { this._verify2(a, b); return this.imod(a.mul(b)); }; Red.prototype.isqr = function isqr (a) { return this.imul(a, a.clone()); }; Red.prototype.sqr = function sqr (a) { return this.mul(a, a); }; Red.prototype.sqrt = function sqrt (a) { if (a.isZero()) return a.clone(); var mod3 = this.m.andln(3); assert(mod3 % 2 === 1); // Fast case if (mod3 === 3) { var pow = this.m.add(new BN(1)).iushrn(2); return this.pow(a, pow); } // Tonelli-Shanks algorithm (Totally unoptimized and slow) // // Find Q and S, that Q * 2 ^ S = (P - 1) var q = this.m.subn(1); var s = 0; while (!q.isZero() && q.andln(1) === 0) { s++; q.iushrn(1); } assert(!q.isZero()); var one = new BN(1).toRed(this); var nOne = one.redNeg(); // Find quadratic non-residue // NOTE: Max is such because of generalized Riemann hypothesis. var lpow = this.m.subn(1).iushrn(1); var z = this.m.bitLength(); z = new BN(2 * z * z).toRed(this); while (this.pow(z, lpow).cmp(nOne) !== 0) { z.redIAdd(nOne); } var c = this.pow(z, q); var r = this.pow(a, q.addn(1).iushrn(1)); var t = this.pow(a, q); var m = s; while (t.cmp(one) !== 0) { var tmp = t; for (var i = 0; tmp.cmp(one) !== 0; i++) { tmp = tmp.redSqr(); } assert(i < m); var b = this.pow(c, new BN(1).iushln(m - i - 1)); r = r.redMul(b); c = b.redSqr(); t = t.redMul(c); m = i; } return r; }; Red.prototype.invm = function invm (a) { var inv = a._invmp(this.m); if (inv.negative !== 0) { inv.negative = 0; return this.imod(inv).redNeg(); } else { return this.imod(inv); } }; Red.prototype.pow = function pow (a, num) { if (num.isZero()) return new BN(1).toRed(this); if (num.cmpn(1) === 0) return a.clone(); var windowSize = 4; var wnd = new Array(1 << windowSize); wnd[0] = new BN(1).toRed(this); wnd[1] = a; for (var i = 2; i < wnd.length; i++) { wnd[i] = this.mul(wnd[i - 1], a); } var res = wnd[0]; var current = 0; var currentLen = 0; var start = num.bitLength() % 26; if (start === 0) { start = 26; } for (i = num.length - 1; i >= 0; i--) { var word = num.words[i]; for (var j = start - 1; j >= 0; j--) { var bit = (word >> j) & 1; if (res !== wnd[0]) { res = this.sqr(res); } if (bit === 0 && current === 0) { currentLen = 0; continue; } current <<= 1; current |= bit; currentLen++; if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue; res = this.mul(res, wnd[current]); currentLen = 0; current = 0; } start = 26; } return res; }; Red.prototype.convertTo = function convertTo (num) { var r = num.umod(this.m); return r === num ? r.clone() : r; }; Red.prototype.convertFrom = function convertFrom (num) { var res = num.clone(); res.red = null; return res; }; // // Montgomery method engine // BN.mont = function mont (num) { return new Mont(num); }; function Mont (m) { Red.call(this, m); this.shift = this.m.bitLength(); if (this.shift % 26 !== 0) { this.shift += 26 - (this.shift % 26); } this.r = new BN(1).iushln(this.shift); this.r2 = this.imod(this.r.sqr()); this.rinv = this.r._invmp(this.m); this.minv = this.rinv.mul(this.r).isubn(1).div(this.m); this.minv = this.minv.umod(this.r); this.minv = this.r.sub(this.minv); } inherits(Mont, Red); Mont.prototype.convertTo = function convertTo (num) { return this.imod(num.ushln(this.shift)); }; Mont.prototype.convertFrom = function convertFrom (num) { var r = this.imod(num.mul(this.rinv)); r.red = null; return r; }; Mont.prototype.imul = function imul (a, b) { if (a.isZero() || b.isZero()) { a.words[0] = 0; a.length = 1; return a; } var t = a.imul(b); var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); var u = t.isub(c).iushrn(this.shift); var res = u; if (u.cmp(this.m) >= 0) { res = u.isub(this.m); } else if (u.cmpn(0) < 0) { res = u.iadd(this.m); } return res._forceRed(this); }; Mont.prototype.mul = function mul (a, b) { if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this); var t = a.mul(b); var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m); var u = t.isub(c).iushrn(this.shift); var res = u; if (u.cmp(this.m) >= 0) { res = u.isub(this.m); } else if (u.cmpn(0) < 0) { res = u.iadd(this.m); } return res._forceRed(this); }; Mont.prototype.invm = function invm (a) { // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R var res = this.imod(a._invmp(this.m).mul(this.r2)); return res._forceRed(this); }; })(typeof module === 'undefined' || module, this); },{"buffer":149}],148:[function(require,module,exports){ var r; module.exports = function rand(len) { if (!r) r = new Rand(null); return r.generate(len); }; function Rand(rand) { this.rand = rand; } module.exports.Rand = Rand; Rand.prototype.generate = function generate(len) { return this._rand(len); }; // Emulate crypto API using randy Rand.prototype._rand = function _rand(n) { if (this.rand.getBytes) return this.rand.getBytes(n); var res = new Uint8Array(n); for (var i = 0; i < res.length; i++) res[i] = this.rand.getByte(); return res; }; if (typeof self === 'object') { if (self.crypto && self.crypto.getRandomValues) { // Modern browsers Rand.prototype._rand = function _rand(n) { var arr = new Uint8Array(n); self.crypto.getRandomValues(arr); return arr; }; } else if (self.msCrypto && self.msCrypto.getRandomValues) { // IE Rand.prototype._rand = function _rand(n) { var arr = new Uint8Array(n); self.msCrypto.getRandomValues(arr); return arr; }; // Safari's WebWorkers do not have `crypto` } else if (typeof window === 'object') { // Old junk Rand.prototype._rand = function() { throw new Error('Not implemented yet'); }; } } else { // Node.js or Web worker with no crypto support try { var crypto = require('crypto'); if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported'); Rand.prototype._rand = function _rand(n) { return crypto.randomBytes(n); }; } catch (e) { } } },{"crypto":149}],149:[function(require,module,exports){ },{}],150:[function(require,module,exports){ // based on the aes implimentation in triple sec // https://github.com/keybase/triplesec // which is in turn based on the one from crypto-js // https://code.google.com/p/crypto-js/ var Buffer = require('safe-buffer').Buffer function asUInt32Array (buf) { if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf) var len = (buf.length / 4) | 0 var out = new Array(len) for (var i = 0; i < len; i++) { out[i] = buf.readUInt32BE(i * 4) } return out } function scrubVec (v) { for (var i = 0; i < v.length; v++) { v[i] = 0 } } function cryptBlock (M, keySchedule, SUB_MIX, SBOX, nRounds) { var SUB_MIX0 = SUB_MIX[0] var SUB_MIX1 = SUB_MIX[1] var SUB_MIX2 = SUB_MIX[2] var SUB_MIX3 = SUB_MIX[3] var s0 = M[0] ^ keySchedule[0] var s1 = M[1] ^ keySchedule[1] var s2 = M[2] ^ keySchedule[2] var s3 = M[3] ^ keySchedule[3] var t0, t1, t2, t3 var ksRow = 4 for (var round = 1; round < nRounds; round++) { t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[(s1 >>> 16) & 0xff] ^ SUB_MIX2[(s2 >>> 8) & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++] t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[(s2 >>> 16) & 0xff] ^ SUB_MIX2[(s3 >>> 8) & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++] t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[(s3 >>> 16) & 0xff] ^ SUB_MIX2[(s0 >>> 8) & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++] t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[(s0 >>> 16) & 0xff] ^ SUB_MIX2[(s1 >>> 8) & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++] s0 = t0 s1 = t1 s2 = t2 s3 = t3 } t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++] t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++] t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++] t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++] t0 = t0 >>> 0 t1 = t1 >>> 0 t2 = t2 >>> 0 t3 = t3 >>> 0 return [t0, t1, t2, t3] } // AES constants var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36] var G = (function () { // Compute double table var d = new Array(256) for (var j = 0; j < 256; j++) { if (j < 128) { d[j] = j << 1 } else { d[j] = (j << 1) ^ 0x11b } } var SBOX = [] var INV_SBOX = [] var SUB_MIX = [[], [], [], []] var INV_SUB_MIX = [[], [], [], []] // Walk GF(2^8) var x = 0 var xi = 0 for (var i = 0; i < 256; ++i) { // Compute sbox var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4) sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63 SBOX[x] = sx INV_SBOX[sx] = x // Compute multiplication var x2 = d[x] var x4 = d[x2] var x8 = d[x4] // Compute sub bytes, mix columns tables var t = (d[sx] * 0x101) ^ (sx * 0x1010100) SUB_MIX[0][x] = (t << 24) | (t >>> 8) SUB_MIX[1][x] = (t << 16) | (t >>> 16) SUB_MIX[2][x] = (t << 8) | (t >>> 24) SUB_MIX[3][x] = t // Compute inv sub bytes, inv mix columns tables t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100) INV_SUB_MIX[0][sx] = (t << 24) | (t >>> 8) INV_SUB_MIX[1][sx] = (t << 16) | (t >>> 16) INV_SUB_MIX[2][sx] = (t << 8) | (t >>> 24) INV_SUB_MIX[3][sx] = t if (x === 0) { x = xi = 1 } else { x = x2 ^ d[d[d[x8 ^ x2]]] xi ^= d[d[xi]] } } return { SBOX: SBOX, INV_SBOX: INV_SBOX, SUB_MIX: SUB_MIX, INV_SUB_MIX: INV_SUB_MIX } })() function AES (key) { this._key = asUInt32Array(key) this._reset() } AES.blockSize = 4 * 4 AES.keySize = 256 / 8 AES.prototype.blockSize = AES.blockSize AES.prototype.keySize = AES.keySize AES.prototype._reset = function () { var keyWords = this._key var keySize = keyWords.length var nRounds = keySize + 6 var ksRows = (nRounds + 1) * 4 var keySchedule = [] for (var k = 0; k < keySize; k++) { keySchedule[k] = keyWords[k] } for (k = keySize; k < ksRows; k++) { var t = keySchedule[k - 1] if (k % keySize === 0) { t = (t << 8) | (t >>> 24) t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | (G.SBOX[t & 0xff]) t ^= RCON[(k / keySize) | 0] << 24 } else if (keySize > 6 && k % keySize === 4) { t = (G.SBOX[t >>> 24] << 24) | (G.SBOX[(t >>> 16) & 0xff] << 16) | (G.SBOX[(t >>> 8) & 0xff] << 8) | (G.SBOX[t & 0xff]) } keySchedule[k] = keySchedule[k - keySize] ^ t } var invKeySchedule = [] for (var ik = 0; ik < ksRows; ik++) { var ksR = ksRows - ik var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)] if (ik < 4 || ksR <= 4) { invKeySchedule[ik] = tt } else { invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[(tt >>> 16) & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[(tt >>> 8) & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]] } } this._nRounds = nRounds this._keySchedule = keySchedule this._invKeySchedule = invKeySchedule } AES.prototype.encryptBlockRaw = function (M) { M = asUInt32Array(M) return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds) } AES.prototype.encryptBlock = function (M) { var out = this.encryptBlockRaw(M) var buf = Buffer.allocUnsafe(16) buf.writeUInt32BE(out[0], 0) buf.writeUInt32BE(out[1], 4) buf.writeUInt32BE(out[2], 8) buf.writeUInt32BE(out[3], 12) return buf } AES.prototype.decryptBlock = function (M) { M = asUInt32Array(M) // swap var m1 = M[1] M[1] = M[3] M[3] = m1 var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds) var buf = Buffer.allocUnsafe(16) buf.writeUInt32BE(out[0], 0) buf.writeUInt32BE(out[3], 4) buf.writeUInt32BE(out[2], 8) buf.writeUInt32BE(out[1], 12) return buf } AES.prototype.scrub = function () { scrubVec(this._keySchedule) scrubVec(this._invKeySchedule) scrubVec(this._key) } module.exports.AES = AES },{"safe-buffer":318}],151:[function(require,module,exports){ var aes = require('./aes') var Buffer = require('safe-buffer').Buffer var Transform = require('cipher-base') var inherits = require('inherits') var GHASH = require('./ghash') var xor = require('buffer-xor') var incr32 = require('./incr32') function xorTest (a, b) { var out = 0 if (a.length !== b.length) out++ var len = Math.min(a.length, b.length) for (var i = 0; i < len; ++i) { out += (a[i] ^ b[i]) } return out } function calcIv (self, iv, ck) { if (iv.length === 12) { self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]) return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]) } var ghash = new GHASH(ck) var len = iv.length var toPad = len % 16 ghash.update(iv) if (toPad) { toPad = 16 - toPad ghash.update(Buffer.alloc(toPad, 0)) } ghash.update(Buffer.alloc(8, 0)) var ivBits = len * 8 var tail = Buffer.alloc(8) tail.writeUIntBE(ivBits, 0, 8) ghash.update(tail) self._finID = ghash.state var out = Buffer.from(self._finID) incr32(out) return out } function StreamCipher (mode, key, iv, decrypt) { Transform.call(this) var h = Buffer.alloc(4, 0) this._cipher = new aes.AES(key) var ck = this._cipher.encryptBlock(h) this._ghash = new GHASH(ck) iv = calcIv(this, iv, ck) this._prev = Buffer.from(iv) this._cache = Buffer.allocUnsafe(0) this._secCache = Buffer.allocUnsafe(0) this._decrypt = decrypt this._alen = 0 this._len = 0 this._mode = mode this._authTag = null this._called = false } inherits(StreamCipher, Transform) StreamCipher.prototype._update = function (chunk) { if (!this._called && this._alen) { var rump = 16 - (this._alen % 16) if (rump < 16) { rump = Buffer.alloc(rump, 0) this._ghash.update(rump) } } this._called = true var out = this._mode.encrypt(this, chunk) if (this._decrypt) { this._ghash.update(chunk) } else { this._ghash.update(out) } this._len += chunk.length return out } StreamCipher.prototype._final = function () { if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data') var tag = xor(this._ghash.final(this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID)) if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data') this._authTag = tag this._cipher.scrub() } StreamCipher.prototype.getAuthTag = function getAuthTag () { if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state') return this._authTag } StreamCipher.prototype.setAuthTag = function setAuthTag (tag) { if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state') this._authTag = tag } StreamCipher.prototype.setAAD = function setAAD (buf) { if (this._called) throw new Error('Attempting to set AAD in unsupported state') this._ghash.update(buf) this._alen += buf.length } module.exports = StreamCipher },{"./aes":150,"./ghash":155,"./incr32":156,"buffer-xor":181,"cipher-base":184,"inherits":262,"safe-buffer":318}],152:[function(require,module,exports){ var ciphers = require('./encrypter') var deciphers = require('./decrypter') var modes = require('./modes/list.json') function getCiphers () { return Object.keys(modes) } exports.createCipher = exports.Cipher = ciphers.createCipher exports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv exports.createDecipher = exports.Decipher = deciphers.createDecipher exports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv exports.listCiphers = exports.getCiphers = getCiphers },{"./decrypter":153,"./encrypter":154,"./modes/list.json":164}],153:[function(require,module,exports){ var AuthCipher = require('./authCipher') var Buffer = require('safe-buffer').Buffer var MODES = require('./modes') var StreamCipher = require('./streamCipher') var Transform = require('cipher-base') var aes = require('./aes') var ebtk = require('evp_bytestokey') var inherits = require('inherits') function Decipher (mode, key, iv) { Transform.call(this) this._cache = new Splitter() this._last = void 0 this._cipher = new aes.AES(key) this._prev = Buffer.from(iv) this._mode = mode this._autopadding = true } inherits(Decipher, Transform) Decipher.prototype._update = function (data) { this._cache.add(data) var chunk var thing var out = [] while ((chunk = this._cache.get(this._autopadding))) { thing = this._mode.decrypt(this, chunk) out.push(thing) } return Buffer.concat(out) } Decipher.prototype._final = function () { var chunk = this._cache.flush() if (this._autopadding) { return unpad(this._mode.decrypt(this, chunk)) } else if (chunk) { throw new Error('data not multiple of block length') } } Decipher.prototype.setAutoPadding = function (setTo) { this._autopadding = !!setTo return this } function Splitter () { this.cache = Buffer.allocUnsafe(0) } Splitter.prototype.add = function (data) { this.cache = Buffer.concat([this.cache, data]) } Splitter.prototype.get = function (autoPadding) { var out if (autoPadding) { if (this.cache.length > 16) { out = this.cache.slice(0, 16) this.cache = this.cache.slice(16) return out } } else { if (this.cache.length >= 16) { out = this.cache.slice(0, 16) this.cache = this.cache.slice(16) return out } } return null } Splitter.prototype.flush = function () { if (this.cache.length) return this.cache } function unpad (last) { var padded = last[15] if (padded < 1 || padded > 16) { throw new Error('unable to decrypt data') } var i = -1 while (++i < padded) { if (last[(i + (16 - padded))] !== padded) { throw new Error('unable to decrypt data') } } if (padded === 16) return return last.slice(0, 16 - padded) } function createDecipheriv (suite, password, iv) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') if (typeof iv === 'string') iv = Buffer.from(iv) if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) if (typeof password === 'string') password = Buffer.from(password) if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) if (config.type === 'stream') { return new StreamCipher(config.module, password, iv, true) } else if (config.type === 'auth') { return new AuthCipher(config.module, password, iv, true) } return new Decipher(config.module, password, iv) } function createDecipher (suite, password) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') var keys = ebtk(password, false, config.key, config.iv) return createDecipheriv(suite, keys.key, keys.iv) } exports.createDecipher = createDecipher exports.createDecipheriv = createDecipheriv },{"./aes":150,"./authCipher":151,"./modes":163,"./streamCipher":166,"cipher-base":184,"evp_bytestokey":222,"inherits":262,"safe-buffer":318}],154:[function(require,module,exports){ var MODES = require('./modes') var AuthCipher = require('./authCipher') var Buffer = require('safe-buffer').Buffer var StreamCipher = require('./streamCipher') var Transform = require('cipher-base') var aes = require('./aes') var ebtk = require('evp_bytestokey') var inherits = require('inherits') function Cipher (mode, key, iv) { Transform.call(this) this._cache = new Splitter() this._cipher = new aes.AES(key) this._prev = Buffer.from(iv) this._mode = mode this._autopadding = true } inherits(Cipher, Transform) Cipher.prototype._update = function (data) { this._cache.add(data) var chunk var thing var out = [] while ((chunk = this._cache.get())) { thing = this._mode.encrypt(this, chunk) out.push(thing) } return Buffer.concat(out) } var PADDING = Buffer.alloc(16, 0x10) Cipher.prototype._final = function () { var chunk = this._cache.flush() if (this._autopadding) { chunk = this._mode.encrypt(this, chunk) this._cipher.scrub() return chunk } if (!chunk.equals(PADDING)) { this._cipher.scrub() throw new Error('data not multiple of block length') } } Cipher.prototype.setAutoPadding = function (setTo) { this._autopadding = !!setTo return this } function Splitter () { this.cache = Buffer.allocUnsafe(0) } Splitter.prototype.add = function (data) { this.cache = Buffer.concat([this.cache, data]) } Splitter.prototype.get = function () { if (this.cache.length > 15) { var out = this.cache.slice(0, 16) this.cache = this.cache.slice(16) return out } return null } Splitter.prototype.flush = function () { var len = 16 - this.cache.length var padBuff = Buffer.allocUnsafe(len) var i = -1 while (++i < len) { padBuff.writeUInt8(len, i) } return Buffer.concat([this.cache, padBuff]) } function createCipheriv (suite, password, iv) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') if (typeof password === 'string') password = Buffer.from(password) if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length) if (typeof iv === 'string') iv = Buffer.from(iv) if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length) if (config.type === 'stream') { return new StreamCipher(config.module, password, iv) } else if (config.type === 'auth') { return new AuthCipher(config.module, password, iv) } return new Cipher(config.module, password, iv) } function createCipher (suite, password) { var config = MODES[suite.toLowerCase()] if (!config) throw new TypeError('invalid suite type') var keys = ebtk(password, false, config.key, config.iv) return createCipheriv(suite, keys.key, keys.iv) } exports.createCipheriv = createCipheriv exports.createCipher = createCipher },{"./aes":150,"./authCipher":151,"./modes":163,"./streamCipher":166,"cipher-base":184,"evp_bytestokey":222,"inherits":262,"safe-buffer":318}],155:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var ZEROES = Buffer.alloc(16, 0) function toArray (buf) { return [ buf.readUInt32BE(0), buf.readUInt32BE(4), buf.readUInt32BE(8), buf.readUInt32BE(12) ] } function fromArray (out) { var buf = Buffer.allocUnsafe(16) buf.writeUInt32BE(out[0] >>> 0, 0) buf.writeUInt32BE(out[1] >>> 0, 4) buf.writeUInt32BE(out[2] >>> 0, 8) buf.writeUInt32BE(out[3] >>> 0, 12) return buf } function GHASH (key) { this.h = key this.state = Buffer.alloc(16, 0) this.cache = Buffer.allocUnsafe(0) } // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html // by Juho Vähä-Herttua GHASH.prototype.ghash = function (block) { var i = -1 while (++i < block.length) { this.state[i] ^= block[i] } this._multiply() } GHASH.prototype._multiply = function () { var Vi = toArray(this.h) var Zi = [0, 0, 0, 0] var j, xi, lsbVi var i = -1 while (++i < 128) { xi = (this.state[~~(i / 8)] & (1 << (7 - (i % 8)))) !== 0 if (xi) { // Z_i+1 = Z_i ^ V_i Zi[0] ^= Vi[0] Zi[1] ^= Vi[1] Zi[2] ^= Vi[2] Zi[3] ^= Vi[3] } // Store the value of LSB(V_i) lsbVi = (Vi[3] & 1) !== 0 // V_i+1 = V_i >> 1 for (j = 3; j > 0; j--) { Vi[j] = (Vi[j] >>> 1) | ((Vi[j - 1] & 1) << 31) } Vi[0] = Vi[0] >>> 1 // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R if (lsbVi) { Vi[0] = Vi[0] ^ (0xe1 << 24) } } this.state = fromArray(Zi) } GHASH.prototype.update = function (buf) { this.cache = Buffer.concat([this.cache, buf]) var chunk while (this.cache.length >= 16) { chunk = this.cache.slice(0, 16) this.cache = this.cache.slice(16) this.ghash(chunk) } } GHASH.prototype.final = function (abl, bl) { if (this.cache.length) { this.ghash(Buffer.concat([this.cache, ZEROES], 16)) } this.ghash(fromArray([0, abl, 0, bl])) return this.state } module.exports = GHASH },{"safe-buffer":318}],156:[function(require,module,exports){ function incr32 (iv) { var len = iv.length var item while (len--) { item = iv.readUInt8(len) if (item === 255) { iv.writeUInt8(0, len) } else { item++ iv.writeUInt8(item, len) break } } } module.exports = incr32 },{}],157:[function(require,module,exports){ var xor = require('buffer-xor') exports.encrypt = function (self, block) { var data = xor(block, self._prev) self._prev = self._cipher.encryptBlock(data) return self._prev } exports.decrypt = function (self, block) { var pad = self._prev self._prev = block var out = self._cipher.decryptBlock(block) return xor(out, pad) } },{"buffer-xor":181}],158:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var xor = require('buffer-xor') function encryptStart (self, data, decrypt) { var len = data.length var out = xor(data, self._cache) self._cache = self._cache.slice(len) self._prev = Buffer.concat([self._prev, decrypt ? data : out]) return out } exports.encrypt = function (self, data, decrypt) { var out = Buffer.allocUnsafe(0) var len while (data.length) { if (self._cache.length === 0) { self._cache = self._cipher.encryptBlock(self._prev) self._prev = Buffer.allocUnsafe(0) } if (self._cache.length <= data.length) { len = self._cache.length out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]) data = data.slice(len) } else { out = Buffer.concat([out, encryptStart(self, data, decrypt)]) break } } return out } },{"buffer-xor":181,"safe-buffer":318}],159:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer function encryptByte (self, byteParam, decrypt) { var pad var i = -1 var len = 8 var out = 0 var bit, value while (++i < len) { pad = self._cipher.encryptBlock(self._prev) bit = (byteParam & (1 << (7 - i))) ? 0x80 : 0 value = pad[0] ^ bit out += ((value & 0x80) >> (i % 8)) self._prev = shiftIn(self._prev, decrypt ? bit : value) } return out } function shiftIn (buffer, value) { var len = buffer.length var i = -1 var out = Buffer.allocUnsafe(buffer.length) buffer = Buffer.concat([buffer, Buffer.from([value])]) while (++i < len) { out[i] = buffer[i] << 1 | buffer[i + 1] >> (7) } return out } exports.encrypt = function (self, chunk, decrypt) { var len = chunk.length var out = Buffer.allocUnsafe(len) var i = -1 while (++i < len) { out[i] = encryptByte(self, chunk[i], decrypt) } return out } },{"safe-buffer":318}],160:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer function encryptByte (self, byteParam, decrypt) { var pad = self._cipher.encryptBlock(self._prev) var out = pad[0] ^ byteParam self._prev = Buffer.concat([ self._prev.slice(1), Buffer.from([decrypt ? byteParam : out]) ]) return out } exports.encrypt = function (self, chunk, decrypt) { var len = chunk.length var out = Buffer.allocUnsafe(len) var i = -1 while (++i < len) { out[i] = encryptByte(self, chunk[i], decrypt) } return out } },{"safe-buffer":318}],161:[function(require,module,exports){ var xor = require('buffer-xor') var Buffer = require('safe-buffer').Buffer var incr32 = require('../incr32') function getBlock (self) { var out = self._cipher.encryptBlockRaw(self._prev) incr32(self._prev) return out } var blockSize = 16 exports.encrypt = function (self, chunk) { var chunkNum = Math.ceil(chunk.length / blockSize) var start = self._cache.length self._cache = Buffer.concat([ self._cache, Buffer.allocUnsafe(chunkNum * blockSize) ]) for (var i = 0; i < chunkNum; i++) { var out = getBlock(self) var offset = start + i * blockSize self._cache.writeUInt32BE(out[0], offset + 0) self._cache.writeUInt32BE(out[1], offset + 4) self._cache.writeUInt32BE(out[2], offset + 8) self._cache.writeUInt32BE(out[3], offset + 12) } var pad = self._cache.slice(0, chunk.length) self._cache = self._cache.slice(chunk.length) return xor(chunk, pad) } },{"../incr32":156,"buffer-xor":181,"safe-buffer":318}],162:[function(require,module,exports){ exports.encrypt = function (self, block) { return self._cipher.encryptBlock(block) } exports.decrypt = function (self, block) { return self._cipher.decryptBlock(block) } },{}],163:[function(require,module,exports){ var modeModules = { ECB: require('./ecb'), CBC: require('./cbc'), CFB: require('./cfb'), CFB8: require('./cfb8'), CFB1: require('./cfb1'), OFB: require('./ofb'), CTR: require('./ctr'), GCM: require('./ctr') } var modes = require('./list.json') for (var key in modes) { modes[key].module = modeModules[modes[key].mode] } module.exports = modes },{"./cbc":157,"./cfb":158,"./cfb1":159,"./cfb8":160,"./ctr":161,"./ecb":162,"./list.json":164,"./ofb":165}],164:[function(require,module,exports){ module.exports={ "aes-128-ecb": { "cipher": "AES", "key": 128, "iv": 0, "mode": "ECB", "type": "block" }, "aes-192-ecb": { "cipher": "AES", "key": 192, "iv": 0, "mode": "ECB", "type": "block" }, "aes-256-ecb": { "cipher": "AES", "key": 256, "iv": 0, "mode": "ECB", "type": "block" }, "aes-128-cbc": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CBC", "type": "block" }, "aes-192-cbc": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CBC", "type": "block" }, "aes-256-cbc": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CBC", "type": "block" }, "aes128": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CBC", "type": "block" }, "aes192": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CBC", "type": "block" }, "aes256": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CBC", "type": "block" }, "aes-128-cfb": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB", "type": "stream" }, "aes-192-cfb": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB", "type": "stream" }, "aes-256-cfb": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB", "type": "stream" }, "aes-128-cfb8": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB8", "type": "stream" }, "aes-192-cfb8": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB8", "type": "stream" }, "aes-256-cfb8": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB8", "type": "stream" }, "aes-128-cfb1": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CFB1", "type": "stream" }, "aes-192-cfb1": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CFB1", "type": "stream" }, "aes-256-cfb1": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CFB1", "type": "stream" }, "aes-128-ofb": { "cipher": "AES", "key": 128, "iv": 16, "mode": "OFB", "type": "stream" }, "aes-192-ofb": { "cipher": "AES", "key": 192, "iv": 16, "mode": "OFB", "type": "stream" }, "aes-256-ofb": { "cipher": "AES", "key": 256, "iv": 16, "mode": "OFB", "type": "stream" }, "aes-128-ctr": { "cipher": "AES", "key": 128, "iv": 16, "mode": "CTR", "type": "stream" }, "aes-192-ctr": { "cipher": "AES", "key": 192, "iv": 16, "mode": "CTR", "type": "stream" }, "aes-256-ctr": { "cipher": "AES", "key": 256, "iv": 16, "mode": "CTR", "type": "stream" }, "aes-128-gcm": { "cipher": "AES", "key": 128, "iv": 12, "mode": "GCM", "type": "auth" }, "aes-192-gcm": { "cipher": "AES", "key": 192, "iv": 12, "mode": "GCM", "type": "auth" }, "aes-256-gcm": { "cipher": "AES", "key": 256, "iv": 12, "mode": "GCM", "type": "auth" } } },{}],165:[function(require,module,exports){ (function (Buffer){ var xor = require('buffer-xor') function getBlock (self) { self._prev = self._cipher.encryptBlock(self._prev) return self._prev } exports.encrypt = function (self, chunk) { while (self._cache.length < chunk.length) { self._cache = Buffer.concat([self._cache, getBlock(self)]) } var pad = self._cache.slice(0, chunk.length) self._cache = self._cache.slice(chunk.length) return xor(chunk, pad) } }).call(this,require("buffer").Buffer) },{"buffer":182,"buffer-xor":181}],166:[function(require,module,exports){ var aes = require('./aes') var Buffer = require('safe-buffer').Buffer var Transform = require('cipher-base') var inherits = require('inherits') function StreamCipher (mode, key, iv, decrypt) { Transform.call(this) this._cipher = new aes.AES(key) this._prev = Buffer.from(iv) this._cache = Buffer.allocUnsafe(0) this._secCache = Buffer.allocUnsafe(0) this._decrypt = decrypt this._mode = mode } inherits(StreamCipher, Transform) StreamCipher.prototype._update = function (chunk) { return this._mode.encrypt(this, chunk, this._decrypt) } StreamCipher.prototype._final = function () { this._cipher.scrub() } module.exports = StreamCipher },{"./aes":150,"cipher-base":184,"inherits":262,"safe-buffer":318}],167:[function(require,module,exports){ var DES = require('browserify-des') var aes = require('browserify-aes/browser') var aesModes = require('browserify-aes/modes') var desModes = require('browserify-des/modes') var ebtk = require('evp_bytestokey') function createCipher (suite, password) { suite = suite.toLowerCase() var keyLen, ivLen if (aesModes[suite]) { keyLen = aesModes[suite].key ivLen = aesModes[suite].iv } else if (desModes[suite]) { keyLen = desModes[suite].key * 8 ivLen = desModes[suite].iv } else { throw new TypeError('invalid suite type') } var keys = ebtk(password, false, keyLen, ivLen) return createCipheriv(suite, keys.key, keys.iv) } function createDecipher (suite, password) { suite = suite.toLowerCase() var keyLen, ivLen if (aesModes[suite]) { keyLen = aesModes[suite].key ivLen = aesModes[suite].iv } else if (desModes[suite]) { keyLen = desModes[suite].key * 8 ivLen = desModes[suite].iv } else { throw new TypeError('invalid suite type') } var keys = ebtk(password, false, keyLen, ivLen) return createDecipheriv(suite, keys.key, keys.iv) } function createCipheriv (suite, key, iv) { suite = suite.toLowerCase() if (aesModes[suite]) return aes.createCipheriv(suite, key, iv) if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite }) throw new TypeError('invalid suite type') } function createDecipheriv (suite, key, iv) { suite = suite.toLowerCase() if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv) if (desModes[suite]) return new DES({ key: key, iv: iv, mode: suite, decrypt: true }) throw new TypeError('invalid suite type') } function getCiphers () { return Object.keys(desModes).concat(aes.getCiphers()) } exports.createCipher = exports.Cipher = createCipher exports.createCipheriv = exports.Cipheriv = createCipheriv exports.createDecipher = exports.Decipher = createDecipher exports.createDecipheriv = exports.Decipheriv = createDecipheriv exports.listCiphers = exports.getCiphers = getCiphers },{"browserify-aes/browser":152,"browserify-aes/modes":163,"browserify-des":168,"browserify-des/modes":169,"evp_bytestokey":222}],168:[function(require,module,exports){ var CipherBase = require('cipher-base') var des = require('des.js') var inherits = require('inherits') var Buffer = require('safe-buffer').Buffer var modes = { 'des-ede3-cbc': des.CBC.instantiate(des.EDE), 'des-ede3': des.EDE, 'des-ede-cbc': des.CBC.instantiate(des.EDE), 'des-ede': des.EDE, 'des-cbc': des.CBC.instantiate(des.DES), 'des-ecb': des.DES } modes.des = modes['des-cbc'] modes.des3 = modes['des-ede3-cbc'] module.exports = DES inherits(DES, CipherBase) function DES (opts) { CipherBase.call(this) var modeName = opts.mode.toLowerCase() var mode = modes[modeName] var type if (opts.decrypt) { type = 'decrypt' } else { type = 'encrypt' } var key = opts.key if (!Buffer.isBuffer(key)) { key = Buffer.from(key) } if (modeName === 'des-ede' || modeName === 'des-ede-cbc') { key = Buffer.concat([key, key.slice(0, 8)]) } var iv = opts.iv if (!Buffer.isBuffer(iv)) { iv = Buffer.from(iv) } this._des = mode.create({ key: key, iv: iv, type: type }) } DES.prototype._update = function (data) { return Buffer.from(this._des.update(data)) } DES.prototype._final = function () { return Buffer.from(this._des.final()) } },{"cipher-base":184,"des.js":195,"inherits":262,"safe-buffer":318}],169:[function(require,module,exports){ exports['des-ecb'] = { key: 8, iv: 0 } exports['des-cbc'] = exports.des = { key: 8, iv: 8 } exports['des-ede3-cbc'] = exports.des3 = { key: 24, iv: 8 } exports['des-ede3'] = { key: 24, iv: 0 } exports['des-ede-cbc'] = { key: 16, iv: 8 } exports['des-ede'] = { key: 16, iv: 0 } },{}],170:[function(require,module,exports){ (function (Buffer){ var bn = require('bn.js'); var randomBytes = require('randombytes'); module.exports = crt; function blind(priv) { var r = getr(priv); var blinder = r.toRed(bn.mont(priv.modulus)) .redPow(new bn(priv.publicExponent)).fromRed(); return { blinder: blinder, unblinder:r.invm(priv.modulus) }; } function crt(msg, priv) { var blinds = blind(priv); var len = priv.modulus.byteLength(); var mod = bn.mont(priv.modulus); var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus); var c1 = blinded.toRed(bn.mont(priv.prime1)); var c2 = blinded.toRed(bn.mont(priv.prime2)); var qinv = priv.coefficient; var p = priv.prime1; var q = priv.prime2; var m1 = c1.redPow(priv.exponent1); var m2 = c2.redPow(priv.exponent2); m1 = m1.fromRed(); m2 = m2.fromRed(); var h = m1.isub(m2).imul(qinv).umod(p); h.imul(q); m2.iadd(h); return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len)); } crt.getr = getr; function getr(priv) { var len = priv.modulus.byteLength(); var r = new bn(randomBytes(len)); while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) { r = new bn(randomBytes(len)); } return r; } }).call(this,require("buffer").Buffer) },{"bn.js":147,"buffer":182,"randombytes":298}],171:[function(require,module,exports){ module.exports = require('./browser/algorithms.json') },{"./browser/algorithms.json":172}],172:[function(require,module,exports){ module.exports={ "sha224WithRSAEncryption": { "sign": "rsa", "hash": "sha224", "id": "302d300d06096086480165030402040500041c" }, "RSA-SHA224": { "sign": "ecdsa/rsa", "hash": "sha224", "id": "302d300d06096086480165030402040500041c" }, "sha256WithRSAEncryption": { "sign": "rsa", "hash": "sha256", "id": "3031300d060960864801650304020105000420" }, "RSA-SHA256": { "sign": "ecdsa/rsa", "hash": "sha256", "id": "3031300d060960864801650304020105000420" }, "sha384WithRSAEncryption": { "sign": "rsa", "hash": "sha384", "id": "3041300d060960864801650304020205000430" }, "RSA-SHA384": { "sign": "ecdsa/rsa", "hash": "sha384", "id": "3041300d060960864801650304020205000430" }, "sha512WithRSAEncryption": { "sign": "rsa", "hash": "sha512", "id": "3051300d060960864801650304020305000440" }, "RSA-SHA512": { "sign": "ecdsa/rsa", "hash": "sha512", "id": "3051300d060960864801650304020305000440" }, "RSA-SHA1": { "sign": "rsa", "hash": "sha1", "id": "3021300906052b0e03021a05000414" }, "ecdsa-with-SHA1": { "sign": "ecdsa", "hash": "sha1", "id": "" }, "sha256": { "sign": "ecdsa", "hash": "sha256", "id": "" }, "sha224": { "sign": "ecdsa", "hash": "sha224", "id": "" }, "sha384": { "sign": "ecdsa", "hash": "sha384", "id": "" }, "sha512": { "sign": "ecdsa", "hash": "sha512", "id": "" }, "DSA-SHA": { "sign": "dsa", "hash": "sha1", "id": "" }, "DSA-SHA1": { "sign": "dsa", "hash": "sha1", "id": "" }, "DSA": { "sign": "dsa", "hash": "sha1", "id": "" }, "DSA-WITH-SHA224": { "sign": "dsa", "hash": "sha224", "id": "" }, "DSA-SHA224": { "sign": "dsa", "hash": "sha224", "id": "" }, "DSA-WITH-SHA256": { "sign": "dsa", "hash": "sha256", "id": "" }, "DSA-SHA256": { "sign": "dsa", "hash": "sha256", "id": "" }, "DSA-WITH-SHA384": { "sign": "dsa", "hash": "sha384", "id": "" }, "DSA-SHA384": { "sign": "dsa", "hash": "sha384", "id": "" }, "DSA-WITH-SHA512": { "sign": "dsa", "hash": "sha512", "id": "" }, "DSA-SHA512": { "sign": "dsa", "hash": "sha512", "id": "" }, "DSA-RIPEMD160": { "sign": "dsa", "hash": "rmd160", "id": "" }, "ripemd160WithRSA": { "sign": "rsa", "hash": "rmd160", "id": "3021300906052b2403020105000414" }, "RSA-RIPEMD160": { "sign": "rsa", "hash": "rmd160", "id": "3021300906052b2403020105000414" }, "md5WithRSAEncryption": { "sign": "rsa", "hash": "md5", "id": "3020300c06082a864886f70d020505000410" }, "RSA-MD5": { "sign": "rsa", "hash": "md5", "id": "3020300c06082a864886f70d020505000410" } } },{}],173:[function(require,module,exports){ module.exports={ "1.3.132.0.10": "secp256k1", "1.3.132.0.33": "p224", "1.2.840.10045.3.1.1": "p192", "1.2.840.10045.3.1.7": "p256", "1.3.132.0.34": "p384", "1.3.132.0.35": "p521" } },{}],174:[function(require,module,exports){ (function (Buffer){ var createHash = require('create-hash') var stream = require('stream') var inherits = require('inherits') var sign = require('./sign') var verify = require('./verify') var algorithms = require('./algorithms.json') Object.keys(algorithms).forEach(function (key) { algorithms[key].id = new Buffer(algorithms[key].id, 'hex') algorithms[key.toLowerCase()] = algorithms[key] }) function Sign (algorithm) { stream.Writable.call(this) var data = algorithms[algorithm] if (!data) throw new Error('Unknown message digest') this._hashType = data.hash this._hash = createHash(data.hash) this._tag = data.id this._signType = data.sign } inherits(Sign, stream.Writable) Sign.prototype._write = function _write (data, _, done) { this._hash.update(data) done() } Sign.prototype.update = function update (data, enc) { if (typeof data === 'string') data = new Buffer(data, enc) this._hash.update(data) return this } Sign.prototype.sign = function signMethod (key, enc) { this.end() var hash = this._hash.digest() var sig = sign(hash, key, this._hashType, this._signType, this._tag) return enc ? sig.toString(enc) : sig } function Verify (algorithm) { stream.Writable.call(this) var data = algorithms[algorithm] if (!data) throw new Error('Unknown message digest') this._hash = createHash(data.hash) this._tag = data.id this._signType = data.sign } inherits(Verify, stream.Writable) Verify.prototype._write = function _write (data, _, done) { this._hash.update(data) done() } Verify.prototype.update = function update (data, enc) { if (typeof data === 'string') data = new Buffer(data, enc) this._hash.update(data) return this } Verify.prototype.verify = function verifyMethod (key, sig, enc) { if (typeof sig === 'string') sig = new Buffer(sig, enc) this.end() var hash = this._hash.digest() return verify(sig, hash, key, this._signType, this._tag) } function createSign (algorithm) { return new Sign(algorithm) } function createVerify (algorithm) { return new Verify(algorithm) } module.exports = { Sign: createSign, Verify: createVerify, createSign: createSign, createVerify: createVerify } }).call(this,require("buffer").Buffer) },{"./algorithms.json":172,"./sign":175,"./verify":176,"buffer":182,"create-hash":188,"inherits":262,"stream":328}],175:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var createHmac = require('create-hmac') var crt = require('browserify-rsa') var EC = require('elliptic').ec var BN = require('bn.js') var parseKeys = require('parse-asn1') var curves = require('./curves.json') function sign (hash, key, hashType, signType, tag) { var priv = parseKeys(key) if (priv.curve) { // rsa keys can be interpreted as ecdsa ones in openssl if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') return ecSign(hash, priv) } else if (priv.type === 'dsa') { if (signType !== 'dsa') throw new Error('wrong private key type') return dsaSign(hash, priv, hashType) } else { if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type') } hash = Buffer.concat([tag, hash]) var len = priv.modulus.byteLength() var pad = [ 0, 1 ] while (hash.length + pad.length + 1 < len) pad.push(0xff) pad.push(0x00) var i = -1 while (++i < hash.length) pad.push(hash[i]) var out = crt(pad, priv) return out } function ecSign (hash, priv) { var curveId = curves[priv.curve.join('.')] if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.')) var curve = new EC(curveId) var key = curve.keyFromPrivate(priv.privateKey) var out = key.sign(hash) return new Buffer(out.toDER()) } function dsaSign (hash, priv, algo) { var x = priv.params.priv_key var p = priv.params.p var q = priv.params.q var g = priv.params.g var r = new BN(0) var k var H = bits2int(hash, q).mod(q) var s = false var kv = getKey(x, q, hash, algo) while (s === false) { k = makeKey(q, kv, algo) r = makeR(g, k, p, q) s = k.invm(q).imul(H.add(x.mul(r))).mod(q) if (s.cmpn(0) === 0) { s = false r = new BN(0) } } return toDER(r, s) } function toDER (r, s) { r = r.toArray() s = s.toArray() // Pad values if (r[0] & 0x80) r = [ 0 ].concat(r) if (s[0] & 0x80) s = [ 0 ].concat(s) var total = r.length + s.length + 4 var res = [ 0x30, total, 0x02, r.length ] res = res.concat(r, [ 0x02, s.length ], s) return new Buffer(res) } function getKey (x, q, hash, algo) { x = new Buffer(x.toArray()) if (x.length < q.byteLength()) { var zeros = new Buffer(q.byteLength() - x.length) zeros.fill(0) x = Buffer.concat([ zeros, x ]) } var hlen = hash.length var hbits = bits2octets(hash, q) var v = new Buffer(hlen) v.fill(1) var k = new Buffer(hlen) k.fill(0) k = createHmac(algo, k).update(v).update(new Buffer([ 0 ])).update(x).update(hbits).digest() v = createHmac(algo, k).update(v).digest() k = createHmac(algo, k).update(v).update(new Buffer([ 1 ])).update(x).update(hbits).digest() v = createHmac(algo, k).update(v).digest() return { k: k, v: v } } function bits2int (obits, q) { var bits = new BN(obits) var shift = (obits.length << 3) - q.bitLength() if (shift > 0) bits.ishrn(shift) return bits } function bits2octets (bits, q) { bits = bits2int(bits, q) bits = bits.mod(q) var out = new Buffer(bits.toArray()) if (out.length < q.byteLength()) { var zeros = new Buffer(q.byteLength() - out.length) zeros.fill(0) out = Buffer.concat([ zeros, out ]) } return out } function makeKey (q, kv, algo) { var t var k do { t = new Buffer(0) while (t.length * 8 < q.bitLength()) { kv.v = createHmac(algo, kv.k).update(kv.v).digest() t = Buffer.concat([ t, kv.v ]) } k = bits2int(t, q) kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([ 0 ])).digest() kv.v = createHmac(algo, kv.k).update(kv.v).digest() } while (k.cmp(q) !== -1) return k } function makeR (g, k, p, q) { return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q) } module.exports = sign module.exports.getKey = getKey module.exports.makeKey = makeKey }).call(this,require("buffer").Buffer) },{"./curves.json":173,"bn.js":147,"browserify-rsa":170,"buffer":182,"create-hmac":190,"elliptic":205,"parse-asn1":275}],176:[function(require,module,exports){ (function (Buffer){ // much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js var BN = require('bn.js') var EC = require('elliptic').ec var parseKeys = require('parse-asn1') var curves = require('./curves.json') function verify (sig, hash, key, signType, tag) { var pub = parseKeys(key) if (pub.type === 'ec') { // rsa keys can be interpreted as ecdsa ones in openssl if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') return ecVerify(sig, hash, pub) } else if (pub.type === 'dsa') { if (signType !== 'dsa') throw new Error('wrong public key type') return dsaVerify(sig, hash, pub) } else { if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type') } hash = Buffer.concat([tag, hash]) var len = pub.modulus.byteLength() var pad = [ 1 ] var padNum = 0 while (hash.length + pad.length + 2 < len) { pad.push(0xff) padNum++ } pad.push(0x00) var i = -1 while (++i < hash.length) { pad.push(hash[i]) } pad = new Buffer(pad) var red = BN.mont(pub.modulus) sig = new BN(sig).toRed(red) sig = sig.redPow(new BN(pub.publicExponent)) sig = new Buffer(sig.fromRed().toArray()) var out = padNum < 8 ? 1 : 0 len = Math.min(sig.length, pad.length) if (sig.length !== pad.length) out = 1 i = -1 while (++i < len) out |= sig[i] ^ pad[i] return out === 0 } function ecVerify (sig, hash, pub) { var curveId = curves[pub.data.algorithm.curve.join('.')] if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.')) var curve = new EC(curveId) var pubkey = pub.data.subjectPrivateKey.data return curve.verify(hash, sig, pubkey) } function dsaVerify (sig, hash, pub) { var p = pub.data.p var q = pub.data.q var g = pub.data.g var y = pub.data.pub_key var unpacked = parseKeys.signature.decode(sig, 'der') var s = unpacked.s var r = unpacked.r checkValue(s, q) checkValue(r, q) var montp = BN.mont(p) var w = s.invm(q) var v = g.toRed(montp) .redPow(new BN(hash).mul(w).mod(q)) .fromRed() .mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()) .mod(p) .mod(q) return v.cmp(r) === 0 } function checkValue (b, q) { if (b.cmpn(0) <= 0) throw new Error('invalid sig') if (b.cmp(q) >= q) throw new Error('invalid sig') } module.exports = verify }).call(this,require("buffer").Buffer) },{"./curves.json":173,"bn.js":147,"buffer":182,"elliptic":205,"parse-asn1":275}],177:[function(require,module,exports){ arguments[4][149][0].apply(exports,arguments) },{"dup":149}],178:[function(require,module,exports){ /* eslint-disable node/no-deprecated-api */ var buffer = require('buffer') var Buffer = buffer.Buffer // alternative to using Object.keys for old browsers function copyProps (src, dst) { for (var key in src) { dst[key] = src[key] } } if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { module.exports = buffer } else { // Copy properties from require('buffer') copyProps(buffer, exports) exports.Buffer = SafeBuffer } function SafeBuffer (arg, encodingOrOffset, length) { return Buffer(arg, encodingOrOffset, length) } // Copy static methods from Buffer copyProps(Buffer, SafeBuffer) SafeBuffer.from = function (arg, encodingOrOffset, length) { if (typeof arg === 'number') { throw new TypeError('Argument must not be a number') } return Buffer(arg, encodingOrOffset, length) } SafeBuffer.alloc = function (size, fill, encoding) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } var buf = Buffer(size) if (fill !== undefined) { if (typeof encoding === 'string') { buf.fill(fill, encoding) } else { buf.fill(fill) } } else { buf.fill(0) } return buf } SafeBuffer.allocUnsafe = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return Buffer(size) } SafeBuffer.allocUnsafeSlow = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return buffer.SlowBuffer(size) } },{"buffer":182}],179:[function(require,module,exports){ 'use strict'; var Buffer = require('safe-buffer').Buffer; var isEncoding = Buffer.isEncoding || function (encoding) { encoding = '' + encoding; switch (encoding && encoding.toLowerCase()) { case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': return true; default: return false; } }; function _normalizeEncoding(enc) { if (!enc) return 'utf8'; var retried; while (true) { switch (enc) { case 'utf8': case 'utf-8': return 'utf8'; case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return 'utf16le'; case 'latin1': case 'binary': return 'latin1'; case 'base64': case 'ascii': case 'hex': return enc; default: if (retried) return; // undefined enc = ('' + enc).toLowerCase(); retried = true; } } }; // Do not cache `Buffer.isEncoding` when checking encoding names as some // modules monkey-patch it to support additional encodings function normalizeEncoding(enc) { var nenc = _normalizeEncoding(enc); if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); return nenc || enc; } // StringDecoder provides an interface for efficiently splitting a series of // buffers into a series of JS strings without breaking apart multi-byte // characters. exports.StringDecoder = StringDecoder; function StringDecoder(encoding) { this.encoding = normalizeEncoding(encoding); var nb; switch (this.encoding) { case 'utf16le': this.text = utf16Text; this.end = utf16End; nb = 4; break; case 'utf8': this.fillLast = utf8FillLast; nb = 4; break; case 'base64': this.text = base64Text; this.end = base64End; nb = 3; break; default: this.write = simpleWrite; this.end = simpleEnd; return; } this.lastNeed = 0; this.lastTotal = 0; this.lastChar = Buffer.allocUnsafe(nb); } StringDecoder.prototype.write = function (buf) { if (buf.length === 0) return ''; var r; var i; if (this.lastNeed) { r = this.fillLast(buf); if (r === undefined) return ''; i = this.lastNeed; this.lastNeed = 0; } else { i = 0; } if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); return r || ''; }; StringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer StringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer StringDecoder.prototype.fillLast = function (buf) { if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); this.lastNeed -= buf.length; }; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a // continuation byte. function utf8CheckByte(byte) { if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; return -1; } // Checks at most 3 bytes at the end of a Buffer in order to detect an // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) // needed to complete the UTF-8 character (if applicable) are returned. function utf8CheckIncomplete(self, buf, i) { var j = buf.length - 1; if (j < i) return 0; var nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 1; return nb; } if (--j < i) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 2; return nb; } if (--j < i) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) { if (nb === 2) nb = 0;else self.lastNeed = nb - 3; } return nb; } return 0; } // Validates as many continuation bytes for a multi-byte UTF-8 character as // needed or are available. If we see a non-continuation byte where we expect // one, we "replace" the validated continuation bytes we've seen so far with // UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding // behavior. The continuation byte check is included three times in the case // where all of the continuation bytes for a character exist in the same buffer. // It is also done this way as a slight performance increase instead of using a // loop. function utf8CheckExtraBytes(self, buf, p) { if ((buf[0] & 0xC0) !== 0x80) { self.lastNeed = 0; return '\ufffd'.repeat(p); } if (self.lastNeed > 1 && buf.length > 1) { if ((buf[1] & 0xC0) !== 0x80) { self.lastNeed = 1; return '\ufffd'.repeat(p + 1); } if (self.lastNeed > 2 && buf.length > 2) { if ((buf[2] & 0xC0) !== 0x80) { self.lastNeed = 2; return '\ufffd'.repeat(p + 2); } } } } // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. function utf8FillLast(buf) { var p = this.lastTotal - this.lastNeed; var r = utf8CheckExtraBytes(this, buf, p); if (r !== undefined) return r; if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, p, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, p, 0, buf.length); this.lastNeed -= buf.length; } // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a // partial character, the character's bytes are buffered until the required // number of bytes are available. function utf8Text(buf, i) { var total = utf8CheckIncomplete(this, buf, i); if (!this.lastNeed) return buf.toString('utf8', i); this.lastTotal = total; var end = buf.length - (total - this.lastNeed); buf.copy(this.lastChar, 0, end); return buf.toString('utf8', i, end); } // For UTF-8, a replacement character for each buffered byte of a (partial) // character needs to be added to the output. function utf8End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed); return r; } // UTF-16LE typically needs two bytes per character, but even if we have an even // number of bytes available, we need to check if we end on a leading/high // surrogate. In that case, we need to wait for the next two bytes in order to // decode the last character properly. function utf16Text(buf, i) { if ((buf.length - i) % 2 === 0) { var r = buf.toString('utf16le', i); if (r) { var c = r.charCodeAt(r.length - 1); if (c >= 0xD800 && c <= 0xDBFF) { this.lastNeed = 2; this.lastTotal = 4; this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; return r.slice(0, -1); } } return r; } this.lastNeed = 1; this.lastTotal = 2; this.lastChar[0] = buf[buf.length - 1]; return buf.toString('utf16le', i, buf.length - 1); } // For UTF-16LE we do not explicitly append special replacement characters if we // end on a partial character, we simply let v8 handle that. function utf16End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) { var end = this.lastTotal - this.lastNeed; return r + this.lastChar.toString('utf16le', 0, end); } return r; } function base64Text(buf, i) { var n = (buf.length - i) % 3; if (n === 0) return buf.toString('base64', i); this.lastNeed = 3 - n; this.lastTotal = 3; if (n === 1) { this.lastChar[0] = buf[buf.length - 1]; } else { this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; } return buf.toString('base64', i, buf.length - n); } function base64End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); return r; } // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) function simpleWrite(buf) { return buf.toString(this.encoding); } function simpleEnd(buf) { return buf && buf.length ? this.write(buf) : ''; } },{"safe-buffer":178}],180:[function(require,module,exports){ (function (Buffer){ var toString = Object.prototype.toString var isModern = ( typeof Buffer.alloc === 'function' && typeof Buffer.allocUnsafe === 'function' && typeof Buffer.from === 'function' ) function isArrayBuffer (input) { return toString.call(input).slice(8, -1) === 'ArrayBuffer' } function fromArrayBuffer (obj, byteOffset, length) { byteOffset >>>= 0 var maxLength = obj.byteLength - byteOffset if (maxLength < 0) { throw new RangeError("'offset' is out of bounds") } if (length === undefined) { length = maxLength } else { length >>>= 0 if (length > maxLength) { throw new RangeError("'length' is out of bounds") } } return isModern ? Buffer.from(obj.slice(byteOffset, byteOffset + length)) : new Buffer(new Uint8Array(obj.slice(byteOffset, byteOffset + length))) } function fromString (string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8' } if (!Buffer.isEncoding(encoding)) { throw new TypeError('"encoding" must be a valid string encoding') } return isModern ? Buffer.from(string, encoding) : new Buffer(string, encoding) } function bufferFrom (value, encodingOrOffset, length) { if (typeof value === 'number') { throw new TypeError('"value" argument must not be a number') } if (isArrayBuffer(value)) { return fromArrayBuffer(value, encodingOrOffset, length) } if (typeof value === 'string') { return fromString(value, encodingOrOffset) } return isModern ? Buffer.from(value) : new Buffer(value) } module.exports = bufferFrom }).call(this,require("buffer").Buffer) },{"buffer":182}],181:[function(require,module,exports){ (function (Buffer){ module.exports = function xor (a, b) { var length = Math.min(a.length, b.length) var buffer = new Buffer(length) for (var i = 0; i < length; ++i) { buffer[i] = a[i] ^ b[i] } return buffer } }).call(this,require("buffer").Buffer) },{"buffer":182}],182:[function(require,module,exports){ (function (Buffer){ /*! * The buffer module from node.js, for the browser. * * @author Feross Aboukhadijeh * @license MIT */ /* eslint-disable no-proto */ 'use strict' var base64 = require('base64-js') var ieee754 = require('ieee754') var customInspectSymbol = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ? Symbol.for('nodejs.util.inspect.custom') : null exports.Buffer = Buffer exports.SlowBuffer = SlowBuffer exports.INSPECT_MAX_BYTES = 50 var K_MAX_LENGTH = 0x7fffffff exports.kMaxLength = K_MAX_LENGTH /** * If `Buffer.TYPED_ARRAY_SUPPORT`: * === true Use Uint8Array implementation (fastest) * === false Print warning and recommend using `buffer` v4.x which has an Object * implementation (most compatible, even IE6) * * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, * Opera 11.6+, iOS 4.2+. * * We report that the browser does not support typed arrays if the are not subclassable * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array` * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support * for __proto__ and has a buggy typed array implementation. */ Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport() if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' && typeof console.error === 'function') { console.error( 'This browser lacks typed array (Uint8Array) support which is required by ' + '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.' ) } function typedArraySupport () { // Can typed array instances can be augmented? try { var arr = new Uint8Array(1) var proto = { foo: function () { return 42 } } Object.setPrototypeOf(proto, Uint8Array.prototype) Object.setPrototypeOf(arr, proto) return arr.foo() === 42 } catch (e) { return false } } Object.defineProperty(Buffer.prototype, 'parent', { enumerable: true, get: function () { if (!Buffer.isBuffer(this)) return undefined return this.buffer } }) Object.defineProperty(Buffer.prototype, 'offset', { enumerable: true, get: function () { if (!Buffer.isBuffer(this)) return undefined return this.byteOffset } }) function createBuffer (length) { if (length > K_MAX_LENGTH) { throw new RangeError('The value "' + length + '" is invalid for option "size"') } // Return an augmented `Uint8Array` instance var buf = new Uint8Array(length) Object.setPrototypeOf(buf, Buffer.prototype) return buf } /** * The Buffer constructor returns instances of `Uint8Array` that have their * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of * `Uint8Array`, so the returned instances will have all the node `Buffer` methods * and the `Uint8Array` methods. Square bracket notation works as expected -- it * returns a single octet. * * The `Uint8Array` prototype remains unmodified. */ function Buffer (arg, encodingOrOffset, length) { // Common case. if (typeof arg === 'number') { if (typeof encodingOrOffset === 'string') { throw new TypeError( 'The "string" argument must be of type string. Received type number' ) } return allocUnsafe(arg) } return from(arg, encodingOrOffset, length) } // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 if (typeof Symbol !== 'undefined' && Symbol.species != null && Buffer[Symbol.species] === Buffer) { Object.defineProperty(Buffer, Symbol.species, { value: null, configurable: true, enumerable: false, writable: false }) } Buffer.poolSize = 8192 // not used by this implementation function from (value, encodingOrOffset, length) { if (typeof value === 'string') { return fromString(value, encodingOrOffset) } if (ArrayBuffer.isView(value)) { return fromArrayLike(value) } if (value == null) { throw new TypeError( 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + (typeof value) ) } if (isInstance(value, ArrayBuffer) || (value && isInstance(value.buffer, ArrayBuffer))) { return fromArrayBuffer(value, encodingOrOffset, length) } if (typeof value === 'number') { throw new TypeError( 'The "value" argument must not be of type number. Received type number' ) } var valueOf = value.valueOf && value.valueOf() if (valueOf != null && valueOf !== value) { return Buffer.from(valueOf, encodingOrOffset, length) } var b = fromObject(value) if (b) return b if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null && typeof value[Symbol.toPrimitive] === 'function') { return Buffer.from( value[Symbol.toPrimitive]('string'), encodingOrOffset, length ) } throw new TypeError( 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' + 'or Array-like Object. Received type ' + (typeof value) ) } /** * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError * if value is a number. * Buffer.from(str[, encoding]) * Buffer.from(array) * Buffer.from(buffer) * Buffer.from(arrayBuffer[, byteOffset[, length]]) **/ Buffer.from = function (value, encodingOrOffset, length) { return from(value, encodingOrOffset, length) } // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug: // https://github.com/feross/buffer/pull/148 Object.setPrototypeOf(Buffer.prototype, Uint8Array.prototype) Object.setPrototypeOf(Buffer, Uint8Array) function assertSize (size) { if (typeof size !== 'number') { throw new TypeError('"size" argument must be of type number') } else if (size < 0) { throw new RangeError('The value "' + size + '" is invalid for option "size"') } } function alloc (size, fill, encoding) { assertSize(size) if (size <= 0) { return createBuffer(size) } if (fill !== undefined) { // Only pay attention to encoding if it's a string. This // prevents accidentally sending in a number that would // be interpretted as a start offset. return typeof encoding === 'string' ? createBuffer(size).fill(fill, encoding) : createBuffer(size).fill(fill) } return createBuffer(size) } /** * Creates a new filled Buffer instance. * alloc(size[, fill[, encoding]]) **/ Buffer.alloc = function (size, fill, encoding) { return alloc(size, fill, encoding) } function allocUnsafe (size) { assertSize(size) return createBuffer(size < 0 ? 0 : checked(size) | 0) } /** * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. * */ Buffer.allocUnsafe = function (size) { return allocUnsafe(size) } /** * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. */ Buffer.allocUnsafeSlow = function (size) { return allocUnsafe(size) } function fromString (string, encoding) { if (typeof encoding !== 'string' || encoding === '') { encoding = 'utf8' } if (!Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } var length = byteLength(string, encoding) | 0 var buf = createBuffer(length) var actual = buf.write(string, encoding) if (actual !== length) { // Writing a hex string, for example, that contains invalid characters will // cause everything after the first invalid character to be ignored. (e.g. // 'abxxcd' will be treated as 'ab') buf = buf.slice(0, actual) } return buf } function fromArrayLike (array) { var length = array.length < 0 ? 0 : checked(array.length) | 0 var buf = createBuffer(length) for (var i = 0; i < length; i += 1) { buf[i] = array[i] & 255 } return buf } function fromArrayBuffer (array, byteOffset, length) { if (byteOffset < 0 || array.byteLength < byteOffset) { throw new RangeError('"offset" is outside of buffer bounds') } if (array.byteLength < byteOffset + (length || 0)) { throw new RangeError('"length" is outside of buffer bounds') } var buf if (byteOffset === undefined && length === undefined) { buf = new Uint8Array(array) } else if (length === undefined) { buf = new Uint8Array(array, byteOffset) } else { buf = new Uint8Array(array, byteOffset, length) } // Return an augmented `Uint8Array` instance Object.setPrototypeOf(buf, Buffer.prototype) return buf } function fromObject (obj) { if (Buffer.isBuffer(obj)) { var len = checked(obj.length) | 0 var buf = createBuffer(len) if (buf.length === 0) { return buf } obj.copy(buf, 0, 0, len) return buf } if (obj.length !== undefined) { if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) { return createBuffer(0) } return fromArrayLike(obj) } if (obj.type === 'Buffer' && Array.isArray(obj.data)) { return fromArrayLike(obj.data) } } function checked (length) { // Note: cannot use `length < K_MAX_LENGTH` here because that fails when // length is NaN (which is otherwise coerced to zero.) if (length >= K_MAX_LENGTH) { throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes') } return length | 0 } function SlowBuffer (length) { if (+length != length) { // eslint-disable-line eqeqeq length = 0 } return Buffer.alloc(+length) } Buffer.isBuffer = function isBuffer (b) { return b != null && b._isBuffer === true && b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false } Buffer.compare = function compare (a, b) { if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength) if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength) if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { throw new TypeError( 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array' ) } if (a === b) return 0 var x = a.length var y = b.length for (var i = 0, len = Math.min(x, y); i < len; ++i) { if (a[i] !== b[i]) { x = a[i] y = b[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } Buffer.isEncoding = function isEncoding (encoding) { switch (String(encoding).toLowerCase()) { case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'latin1': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return true default: return false } } Buffer.concat = function concat (list, length) { if (!Array.isArray(list)) { throw new TypeError('"list" argument must be an Array of Buffers') } if (list.length === 0) { return Buffer.alloc(0) } var i if (length === undefined) { length = 0 for (i = 0; i < list.length; ++i) { length += list[i].length } } var buffer = Buffer.allocUnsafe(length) var pos = 0 for (i = 0; i < list.length; ++i) { var buf = list[i] if (isInstance(buf, Uint8Array)) { buf = Buffer.from(buf) } if (!Buffer.isBuffer(buf)) { throw new TypeError('"list" argument must be an Array of Buffers') } buf.copy(buffer, pos) pos += buf.length } return buffer } function byteLength (string, encoding) { if (Buffer.isBuffer(string)) { return string.length } if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) { return string.byteLength } if (typeof string !== 'string') { throw new TypeError( 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' + 'Received type ' + typeof string ) } var len = string.length var mustMatch = (arguments.length > 2 && arguments[2] === true) if (!mustMatch && len === 0) return 0 // Use a for loop to avoid recursion var loweredCase = false for (;;) { switch (encoding) { case 'ascii': case 'latin1': case 'binary': return len case 'utf8': case 'utf-8': return utf8ToBytes(string).length case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return len * 2 case 'hex': return len >>> 1 case 'base64': return base64ToBytes(string).length default: if (loweredCase) { return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8 } encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.byteLength = byteLength function slowToString (encoding, start, end) { var loweredCase = false // No need to verify that "this.length <= MAX_UINT32" since it's a read-only // property of a typed array. // This behaves neither like String nor Uint8Array in that we set start/end // to their upper/lower bounds if the value passed is out of range. // undefined is handled specially as per ECMA-262 6th Edition, // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. if (start === undefined || start < 0) { start = 0 } // Return early if start > this.length. Done here to prevent potential uint32 // coercion fail below. if (start > this.length) { return '' } if (end === undefined || end > this.length) { end = this.length } if (end <= 0) { return '' } // Force coersion to uint32. This will also coerce falsey/NaN values to 0. end >>>= 0 start >>>= 0 if (end <= start) { return '' } if (!encoding) encoding = 'utf8' while (true) { switch (encoding) { case 'hex': return hexSlice(this, start, end) case 'utf8': case 'utf-8': return utf8Slice(this, start, end) case 'ascii': return asciiSlice(this, start, end) case 'latin1': case 'binary': return latin1Slice(this, start, end) case 'base64': return base64Slice(this, start, end) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return utf16leSlice(this, start, end) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = (encoding + '').toLowerCase() loweredCase = true } } } // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package) // to detect a Buffer instance. It's not possible to use `instanceof Buffer` // reliably in a browserify context because there could be multiple different // copies of the 'buffer' package in use. This method works even for Buffer // instances that were created from another copy of the `buffer` package. // See: https://github.com/feross/buffer/issues/154 Buffer.prototype._isBuffer = true function swap (b, n, m) { var i = b[n] b[n] = b[m] b[m] = i } Buffer.prototype.swap16 = function swap16 () { var len = this.length if (len % 2 !== 0) { throw new RangeError('Buffer size must be a multiple of 16-bits') } for (var i = 0; i < len; i += 2) { swap(this, i, i + 1) } return this } Buffer.prototype.swap32 = function swap32 () { var len = this.length if (len % 4 !== 0) { throw new RangeError('Buffer size must be a multiple of 32-bits') } for (var i = 0; i < len; i += 4) { swap(this, i, i + 3) swap(this, i + 1, i + 2) } return this } Buffer.prototype.swap64 = function swap64 () { var len = this.length if (len % 8 !== 0) { throw new RangeError('Buffer size must be a multiple of 64-bits') } for (var i = 0; i < len; i += 8) { swap(this, i, i + 7) swap(this, i + 1, i + 6) swap(this, i + 2, i + 5) swap(this, i + 3, i + 4) } return this } Buffer.prototype.toString = function toString () { var length = this.length if (length === 0) return '' if (arguments.length === 0) return utf8Slice(this, 0, length) return slowToString.apply(this, arguments) } Buffer.prototype.toLocaleString = Buffer.prototype.toString Buffer.prototype.equals = function equals (b) { if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') if (this === b) return true return Buffer.compare(this, b) === 0 } Buffer.prototype.inspect = function inspect () { var str = '' var max = exports.INSPECT_MAX_BYTES str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim() if (this.length > max) str += ' ... ' return '' } if (customInspectSymbol) { Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect } Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { if (isInstance(target, Uint8Array)) { target = Buffer.from(target, target.offset, target.byteLength) } if (!Buffer.isBuffer(target)) { throw new TypeError( 'The "target" argument must be one of type Buffer or Uint8Array. ' + 'Received type ' + (typeof target) ) } if (start === undefined) { start = 0 } if (end === undefined) { end = target ? target.length : 0 } if (thisStart === undefined) { thisStart = 0 } if (thisEnd === undefined) { thisEnd = this.length } if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { throw new RangeError('out of range index') } if (thisStart >= thisEnd && start >= end) { return 0 } if (thisStart >= thisEnd) { return -1 } if (start >= end) { return 1 } start >>>= 0 end >>>= 0 thisStart >>>= 0 thisEnd >>>= 0 if (this === target) return 0 var x = thisEnd - thisStart var y = end - start var len = Math.min(x, y) var thisCopy = this.slice(thisStart, thisEnd) var targetCopy = target.slice(start, end) for (var i = 0; i < len; ++i) { if (thisCopy[i] !== targetCopy[i]) { x = thisCopy[i] y = targetCopy[i] break } } if (x < y) return -1 if (y < x) return 1 return 0 } // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, // OR the last index of `val` in `buffer` at offset <= `byteOffset`. // // Arguments: // - buffer - a Buffer to search // - val - a string, Buffer, or number // - byteOffset - an index into `buffer`; will be clamped to an int32 // - encoding - an optional encoding, relevant is val is a string // - dir - true for indexOf, false for lastIndexOf function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { // Empty buffer means no match if (buffer.length === 0) return -1 // Normalize byteOffset if (typeof byteOffset === 'string') { encoding = byteOffset byteOffset = 0 } else if (byteOffset > 0x7fffffff) { byteOffset = 0x7fffffff } else if (byteOffset < -0x80000000) { byteOffset = -0x80000000 } byteOffset = +byteOffset // Coerce to Number. if (numberIsNaN(byteOffset)) { // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer byteOffset = dir ? 0 : (buffer.length - 1) } // Normalize byteOffset: negative offsets start from the end of the buffer if (byteOffset < 0) byteOffset = buffer.length + byteOffset if (byteOffset >= buffer.length) { if (dir) return -1 else byteOffset = buffer.length - 1 } else if (byteOffset < 0) { if (dir) byteOffset = 0 else return -1 } // Normalize val if (typeof val === 'string') { val = Buffer.from(val, encoding) } // Finally, search either indexOf (if dir is true) or lastIndexOf if (Buffer.isBuffer(val)) { // Special case: looking for empty string/buffer always fails if (val.length === 0) { return -1 } return arrayIndexOf(buffer, val, byteOffset, encoding, dir) } else if (typeof val === 'number') { val = val & 0xFF // Search for a byte value [0-255] if (typeof Uint8Array.prototype.indexOf === 'function') { if (dir) { return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) } else { return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) } } return arrayIndexOf(buffer, [val], byteOffset, encoding, dir) } throw new TypeError('val must be string, number or Buffer') } function arrayIndexOf (arr, val, byteOffset, encoding, dir) { var indexSize = 1 var arrLength = arr.length var valLength = val.length if (encoding !== undefined) { encoding = String(encoding).toLowerCase() if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') { if (arr.length < 2 || val.length < 2) { return -1 } indexSize = 2 arrLength /= 2 valLength /= 2 byteOffset /= 2 } } function read (buf, i) { if (indexSize === 1) { return buf[i] } else { return buf.readUInt16BE(i * indexSize) } } var i if (dir) { var foundIndex = -1 for (i = byteOffset; i < arrLength; i++) { if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { if (foundIndex === -1) foundIndex = i if (i - foundIndex + 1 === valLength) return foundIndex * indexSize } else { if (foundIndex !== -1) i -= i - foundIndex foundIndex = -1 } } } else { if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength for (i = byteOffset; i >= 0; i--) { var found = true for (var j = 0; j < valLength; j++) { if (read(arr, i + j) !== read(val, j)) { found = false break } } if (found) return i } } return -1 } Buffer.prototype.includes = function includes (val, byteOffset, encoding) { return this.indexOf(val, byteOffset, encoding) !== -1 } Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, true) } Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { return bidirectionalIndexOf(this, val, byteOffset, encoding, false) } function hexWrite (buf, string, offset, length) { offset = Number(offset) || 0 var remaining = buf.length - offset if (!length) { length = remaining } else { length = Number(length) if (length > remaining) { length = remaining } } var strLen = string.length if (length > strLen / 2) { length = strLen / 2 } for (var i = 0; i < length; ++i) { var parsed = parseInt(string.substr(i * 2, 2), 16) if (numberIsNaN(parsed)) return i buf[offset + i] = parsed } return i } function utf8Write (buf, string, offset, length) { return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) } function asciiWrite (buf, string, offset, length) { return blitBuffer(asciiToBytes(string), buf, offset, length) } function latin1Write (buf, string, offset, length) { return asciiWrite(buf, string, offset, length) } function base64Write (buf, string, offset, length) { return blitBuffer(base64ToBytes(string), buf, offset, length) } function ucs2Write (buf, string, offset, length) { return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) } Buffer.prototype.write = function write (string, offset, length, encoding) { // Buffer#write(string) if (offset === undefined) { encoding = 'utf8' length = this.length offset = 0 // Buffer#write(string, encoding) } else if (length === undefined && typeof offset === 'string') { encoding = offset length = this.length offset = 0 // Buffer#write(string, offset[, length][, encoding]) } else if (isFinite(offset)) { offset = offset >>> 0 if (isFinite(length)) { length = length >>> 0 if (encoding === undefined) encoding = 'utf8' } else { encoding = length length = undefined } } else { throw new Error( 'Buffer.write(string, encoding, offset[, length]) is no longer supported' ) } var remaining = this.length - offset if (length === undefined || length > remaining) length = remaining if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { throw new RangeError('Attempt to write outside buffer bounds') } if (!encoding) encoding = 'utf8' var loweredCase = false for (;;) { switch (encoding) { case 'hex': return hexWrite(this, string, offset, length) case 'utf8': case 'utf-8': return utf8Write(this, string, offset, length) case 'ascii': return asciiWrite(this, string, offset, length) case 'latin1': case 'binary': return latin1Write(this, string, offset, length) case 'base64': // Warning: maxLength not taken into account in base64Write return base64Write(this, string, offset, length) case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return ucs2Write(this, string, offset, length) default: if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) encoding = ('' + encoding).toLowerCase() loweredCase = true } } } Buffer.prototype.toJSON = function toJSON () { return { type: 'Buffer', data: Array.prototype.slice.call(this._arr || this, 0) } } function base64Slice (buf, start, end) { if (start === 0 && end === buf.length) { return base64.fromByteArray(buf) } else { return base64.fromByteArray(buf.slice(start, end)) } } function utf8Slice (buf, start, end) { end = Math.min(buf.length, end) var res = [] var i = start while (i < end) { var firstByte = buf[i] var codePoint = null var bytesPerSequence = (firstByte > 0xEF) ? 4 : (firstByte > 0xDF) ? 3 : (firstByte > 0xBF) ? 2 : 1 if (i + bytesPerSequence <= end) { var secondByte, thirdByte, fourthByte, tempCodePoint switch (bytesPerSequence) { case 1: if (firstByte < 0x80) { codePoint = firstByte } break case 2: secondByte = buf[i + 1] if ((secondByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) if (tempCodePoint > 0x7F) { codePoint = tempCodePoint } } break case 3: secondByte = buf[i + 1] thirdByte = buf[i + 2] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { codePoint = tempCodePoint } } break case 4: secondByte = buf[i + 1] thirdByte = buf[i + 2] fourthByte = buf[i + 3] if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { codePoint = tempCodePoint } } } } if (codePoint === null) { // we did not generate a valid codePoint so insert a // replacement char (U+FFFD) and advance only 1 byte codePoint = 0xFFFD bytesPerSequence = 1 } else if (codePoint > 0xFFFF) { // encode to utf16 (surrogate pair dance) codePoint -= 0x10000 res.push(codePoint >>> 10 & 0x3FF | 0xD800) codePoint = 0xDC00 | codePoint & 0x3FF } res.push(codePoint) i += bytesPerSequence } return decodeCodePointsArray(res) } // Based on http://stackoverflow.com/a/22747272/680742, the browser with // the lowest limit is Chrome, with 0x10000 args. // We go 1 magnitude less, for safety var MAX_ARGUMENTS_LENGTH = 0x1000 function decodeCodePointsArray (codePoints) { var len = codePoints.length if (len <= MAX_ARGUMENTS_LENGTH) { return String.fromCharCode.apply(String, codePoints) // avoid extra slice() } // Decode in chunks to avoid "call stack size exceeded". var res = '' var i = 0 while (i < len) { res += String.fromCharCode.apply( String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) ) } return res } function asciiSlice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i] & 0x7F) } return ret } function latin1Slice (buf, start, end) { var ret = '' end = Math.min(buf.length, end) for (var i = start; i < end; ++i) { ret += String.fromCharCode(buf[i]) } return ret } function hexSlice (buf, start, end) { var len = buf.length if (!start || start < 0) start = 0 if (!end || end < 0 || end > len) end = len var out = '' for (var i = start; i < end; ++i) { out += hexSliceLookupTable[buf[i]] } return out } function utf16leSlice (buf, start, end) { var bytes = buf.slice(start, end) var res = '' for (var i = 0; i < bytes.length; i += 2) { res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256)) } return res } Buffer.prototype.slice = function slice (start, end) { var len = this.length start = ~~start end = end === undefined ? len : ~~end if (start < 0) { start += len if (start < 0) start = 0 } else if (start > len) { start = len } if (end < 0) { end += len if (end < 0) end = 0 } else if (end > len) { end = len } if (end < start) end = start var newBuf = this.subarray(start, end) // Return an augmented `Uint8Array` instance Object.setPrototypeOf(newBuf, Buffer.prototype) return newBuf } /* * Need to make sure that buffer isn't trying to write out of bounds. */ function checkOffset (offset, ext, length) { if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') } Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } return val } Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { checkOffset(offset, byteLength, this.length) } var val = this[offset + --byteLength] var mul = 1 while (byteLength > 0 && (mul *= 0x100)) { val += this[offset + --byteLength] * mul } return val } Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 1, this.length) return this[offset] } Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) return this[offset] | (this[offset + 1] << 8) } Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) return (this[offset] << 8) | this[offset + 1] } Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ((this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16)) + (this[offset + 3] * 0x1000000) } Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] * 0x1000000) + ((this[offset + 1] << 16) | (this[offset + 2] << 8) | this[offset + 3]) } Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var val = this[offset] var mul = 1 var i = 0 while (++i < byteLength && (mul *= 0x100)) { val += this[offset + i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) checkOffset(offset, byteLength, this.length) var i = byteLength var mul = 1 var val = this[offset + --i] while (i > 0 && (mul *= 0x100)) { val += this[offset + --i] * mul } mul *= 0x80 if (val >= mul) val -= Math.pow(2, 8 * byteLength) return val } Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 1, this.length) if (!(this[offset] & 0x80)) return (this[offset]) return ((0xff - this[offset] + 1) * -1) } Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset] | (this[offset + 1] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 2, this.length) var val = this[offset + 1] | (this[offset] << 8) return (val & 0x8000) ? val | 0xFFFF0000 : val } Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset]) | (this[offset + 1] << 8) | (this[offset + 2] << 16) | (this[offset + 3] << 24) } Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return (this[offset] << 24) | (this[offset + 1] << 16) | (this[offset + 2] << 8) | (this[offset + 3]) } Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, true, 23, 4) } Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 4, this.length) return ieee754.read(this, offset, false, 23, 4) } Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, true, 52, 8) } Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { offset = offset >>> 0 if (!noAssert) checkOffset(offset, 8, this.length) return ieee754.read(this, offset, false, 52, 8) } function checkInt (buf, value, offset, ext, max, min) { if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') if (offset + ext > buf.length) throw new RangeError('Index out of range') } Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var mul = 1 var i = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 byteLength = byteLength >>> 0 if (!noAssert) { var maxBytes = Math.pow(2, 8 * byteLength) - 1 checkInt(this, value, offset, byteLength, maxBytes, 0) } var i = byteLength - 1 var mul = 1 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { this[offset + i] = (value / mul) & 0xFF } return offset + byteLength } Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) return offset + 2 } Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) return offset + 2 } Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) this[offset + 3] = (value >>> 24) this[offset + 2] = (value >>> 16) this[offset + 1] = (value >>> 8) this[offset] = (value & 0xff) return offset + 4 } Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) return offset + 4 } Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { var limit = Math.pow(2, (8 * byteLength) - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = 0 var mul = 1 var sub = 0 this[offset] = value & 0xFF while (++i < byteLength && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { var limit = Math.pow(2, (8 * byteLength) - 1) checkInt(this, value, offset, byteLength, limit - 1, -limit) } var i = byteLength - 1 var mul = 1 var sub = 0 this[offset + i] = value & 0xFF while (--i >= 0 && (mul *= 0x100)) { if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { sub = 1 } this[offset + i] = ((value / mul) >> 0) - sub & 0xFF } return offset + byteLength } Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) if (value < 0) value = 0xff + value + 1 this[offset] = (value & 0xff) return offset + 1 } Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) return offset + 2 } Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) this[offset] = (value >>> 8) this[offset + 1] = (value & 0xff) return offset + 2 } Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) this[offset] = (value & 0xff) this[offset + 1] = (value >>> 8) this[offset + 2] = (value >>> 16) this[offset + 3] = (value >>> 24) return offset + 4 } Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) if (value < 0) value = 0xffffffff + value + 1 this[offset] = (value >>> 24) this[offset + 1] = (value >>> 16) this[offset + 2] = (value >>> 8) this[offset + 3] = (value & 0xff) return offset + 4 } function checkIEEE754 (buf, value, offset, ext, max, min) { if (offset + ext > buf.length) throw new RangeError('Index out of range') if (offset < 0) throw new RangeError('Index out of range') } function writeFloat (buf, value, offset, littleEndian, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) } ieee754.write(buf, value, offset, littleEndian, 23, 4) return offset + 4 } Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { return writeFloat(this, value, offset, true, noAssert) } Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { return writeFloat(this, value, offset, false, noAssert) } function writeDouble (buf, value, offset, littleEndian, noAssert) { value = +value offset = offset >>> 0 if (!noAssert) { checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) } ieee754.write(buf, value, offset, littleEndian, 52, 8) return offset + 8 } Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { return writeDouble(this, value, offset, true, noAssert) } Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { return writeDouble(this, value, offset, false, noAssert) } // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) Buffer.prototype.copy = function copy (target, targetStart, start, end) { if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer') if (!start) start = 0 if (!end && end !== 0) end = this.length if (targetStart >= target.length) targetStart = target.length if (!targetStart) targetStart = 0 if (end > 0 && end < start) end = start // Copy 0 bytes; we're done if (end === start) return 0 if (target.length === 0 || this.length === 0) return 0 // Fatal error conditions if (targetStart < 0) { throw new RangeError('targetStart out of bounds') } if (start < 0 || start >= this.length) throw new RangeError('Index out of range') if (end < 0) throw new RangeError('sourceEnd out of bounds') // Are we oob? if (end > this.length) end = this.length if (target.length - targetStart < end - start) { end = target.length - targetStart + start } var len = end - start if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') { // Use built-in when available, missing from IE11 this.copyWithin(targetStart, start, end) } else if (this === target && start < targetStart && targetStart < end) { // descending copy from end for (var i = len - 1; i >= 0; --i) { target[i + targetStart] = this[i + start] } } else { Uint8Array.prototype.set.call( target, this.subarray(start, end), targetStart ) } return len } // Usage: // buffer.fill(number[, offset[, end]]) // buffer.fill(buffer[, offset[, end]]) // buffer.fill(string[, offset[, end]][, encoding]) Buffer.prototype.fill = function fill (val, start, end, encoding) { // Handle string cases: if (typeof val === 'string') { if (typeof start === 'string') { encoding = start start = 0 end = this.length } else if (typeof end === 'string') { encoding = end end = this.length } if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string') } if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { throw new TypeError('Unknown encoding: ' + encoding) } if (val.length === 1) { var code = val.charCodeAt(0) if ((encoding === 'utf8' && code < 128) || encoding === 'latin1') { // Fast path: If `val` fits into a single byte, use that numeric value. val = code } } } else if (typeof val === 'number') { val = val & 255 } else if (typeof val === 'boolean') { val = Number(val) } // Invalid ranges are not set to a default, so can range check early. if (start < 0 || this.length < start || this.length < end) { throw new RangeError('Out of range index') } if (end <= start) { return this } start = start >>> 0 end = end === undefined ? this.length : end >>> 0 if (!val) val = 0 var i if (typeof val === 'number') { for (i = start; i < end; ++i) { this[i] = val } } else { var bytes = Buffer.isBuffer(val) ? val : Buffer.from(val, encoding) var len = bytes.length if (len === 0) { throw new TypeError('The value "' + val + '" is invalid for argument "value"') } for (i = 0; i < end - start; ++i) { this[i + start] = bytes[i % len] } } return this } // HELPER FUNCTIONS // ================ var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g function base64clean (str) { // Node takes equal signs as end of the Base64 encoding str = str.split('=')[0] // Node strips out invalid characters like \n and \t from the string, base64-js does not str = str.trim().replace(INVALID_BASE64_RE, '') // Node converts strings with length < 2 to '' if (str.length < 2) return '' // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not while (str.length % 4 !== 0) { str = str + '=' } return str } function utf8ToBytes (string, units) { units = units || Infinity var codePoint var length = string.length var leadSurrogate = null var bytes = [] for (var i = 0; i < length; ++i) { codePoint = string.charCodeAt(i) // is surrogate component if (codePoint > 0xD7FF && codePoint < 0xE000) { // last char was a lead if (!leadSurrogate) { // no lead yet if (codePoint > 0xDBFF) { // unexpected trail if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } else if (i + 1 === length) { // unpaired lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) continue } // valid lead leadSurrogate = codePoint continue } // 2 leads in a row if (codePoint < 0xDC00) { if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) leadSurrogate = codePoint continue } // valid surrogate pair codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 } else if (leadSurrogate) { // valid bmp char, but last char was a lead if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) } leadSurrogate = null // encode utf8 if (codePoint < 0x80) { if ((units -= 1) < 0) break bytes.push(codePoint) } else if (codePoint < 0x800) { if ((units -= 2) < 0) break bytes.push( codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x10000) { if ((units -= 3) < 0) break bytes.push( codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else if (codePoint < 0x110000) { if ((units -= 4) < 0) break bytes.push( codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80 ) } else { throw new Error('Invalid code point') } } return bytes } function asciiToBytes (str) { var byteArray = [] for (var i = 0; i < str.length; ++i) { // Node's code seems to be doing this and not & 0x7F.. byteArray.push(str.charCodeAt(i) & 0xFF) } return byteArray } function utf16leToBytes (str, units) { var c, hi, lo var byteArray = [] for (var i = 0; i < str.length; ++i) { if ((units -= 2) < 0) break c = str.charCodeAt(i) hi = c >> 8 lo = c % 256 byteArray.push(lo) byteArray.push(hi) } return byteArray } function base64ToBytes (str) { return base64.toByteArray(base64clean(str)) } function blitBuffer (src, dst, offset, length) { for (var i = 0; i < length; ++i) { if ((i + offset >= dst.length) || (i >= src.length)) break dst[i + offset] = src[i] } return i } // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass // the `instanceof` check but they should be treated as of that type. // See: https://github.com/feross/buffer/issues/166 function isInstance (obj, type) { return obj instanceof type || (obj != null && obj.constructor != null && obj.constructor.name != null && obj.constructor.name === type.name) } function numberIsNaN (obj) { // For IE11 support return obj !== obj // eslint-disable-line no-self-compare } // Create lookup table for `toString('hex')` // See: https://github.com/feross/buffer/issues/219 var hexSliceLookupTable = (function () { var alphabet = '0123456789abcdef' var table = new Array(256) for (var i = 0; i < 16; ++i) { var i16 = i * 16 for (var j = 0; j < 16; ++j) { table[i16 + j] = alphabet[i] + alphabet[j] } } return table })() }).call(this,require("buffer").Buffer) },{"base64-js":146,"buffer":182,"ieee754":241}],183:[function(require,module,exports){ module.exports = { "100": "Continue", "101": "Switching Protocols", "102": "Processing", "200": "OK", "201": "Created", "202": "Accepted", "203": "Non-Authoritative Information", "204": "No Content", "205": "Reset Content", "206": "Partial Content", "207": "Multi-Status", "208": "Already Reported", "226": "IM Used", "300": "Multiple Choices", "301": "Moved Permanently", "302": "Found", "303": "See Other", "304": "Not Modified", "305": "Use Proxy", "307": "Temporary Redirect", "308": "Permanent Redirect", "400": "Bad Request", "401": "Unauthorized", "402": "Payment Required", "403": "Forbidden", "404": "Not Found", "405": "Method Not Allowed", "406": "Not Acceptable", "407": "Proxy Authentication Required", "408": "Request Timeout", "409": "Conflict", "410": "Gone", "411": "Length Required", "412": "Precondition Failed", "413": "Payload Too Large", "414": "URI Too Long", "415": "Unsupported Media Type", "416": "Range Not Satisfiable", "417": "Expectation Failed", "418": "I'm a teapot", "421": "Misdirected Request", "422": "Unprocessable Entity", "423": "Locked", "424": "Failed Dependency", "425": "Unordered Collection", "426": "Upgrade Required", "428": "Precondition Required", "429": "Too Many Requests", "431": "Request Header Fields Too Large", "451": "Unavailable For Legal Reasons", "500": "Internal Server Error", "501": "Not Implemented", "502": "Bad Gateway", "503": "Service Unavailable", "504": "Gateway Timeout", "505": "HTTP Version Not Supported", "506": "Variant Also Negotiates", "507": "Insufficient Storage", "508": "Loop Detected", "509": "Bandwidth Limit Exceeded", "510": "Not Extended", "511": "Network Authentication Required" } },{}],184:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var Transform = require('stream').Transform var StringDecoder = require('string_decoder').StringDecoder var inherits = require('inherits') function CipherBase (hashMode) { Transform.call(this) this.hashMode = typeof hashMode === 'string' if (this.hashMode) { this[hashMode] = this._finalOrDigest } else { this.final = this._finalOrDigest } if (this._final) { this.__final = this._final this._final = null } this._decoder = null this._encoding = null } inherits(CipherBase, Transform) CipherBase.prototype.update = function (data, inputEnc, outputEnc) { if (typeof data === 'string') { data = Buffer.from(data, inputEnc) } var outData = this._update(data) if (this.hashMode) return this if (outputEnc) { outData = this._toString(outData, outputEnc) } return outData } CipherBase.prototype.setAutoPadding = function () {} CipherBase.prototype.getAuthTag = function () { throw new Error('trying to get auth tag in unsupported state') } CipherBase.prototype.setAuthTag = function () { throw new Error('trying to set auth tag in unsupported state') } CipherBase.prototype.setAAD = function () { throw new Error('trying to set aad in unsupported state') } CipherBase.prototype._transform = function (data, _, next) { var err try { if (this.hashMode) { this._update(data) } else { this.push(this._update(data)) } } catch (e) { err = e } finally { next(err) } } CipherBase.prototype._flush = function (done) { var err try { this.push(this.__final()) } catch (e) { err = e } done(err) } CipherBase.prototype._finalOrDigest = function (outputEnc) { var outData = this.__final() || Buffer.alloc(0) if (outputEnc) { outData = this._toString(outData, outputEnc, true) } return outData } CipherBase.prototype._toString = function (value, enc, fin) { if (!this._decoder) { this._decoder = new StringDecoder(enc) this._encoding = enc } if (this._encoding !== enc) throw new Error('can\'t switch encodings') var out = this._decoder.write(value) if (fin) { out += this._decoder.end() } return out } module.exports = CipherBase },{"inherits":262,"safe-buffer":318,"stream":328,"string_decoder":179}],185:[function(require,module,exports){ (function (Buffer){ var Writable = require('readable-stream').Writable var inherits = require('inherits') var bufferFrom = require('buffer-from') if (typeof Uint8Array === 'undefined') { var U8 = require('typedarray').Uint8Array } else { var U8 = Uint8Array } function ConcatStream(opts, cb) { if (!(this instanceof ConcatStream)) return new ConcatStream(opts, cb) if (typeof opts === 'function') { cb = opts opts = {} } if (!opts) opts = {} var encoding = opts.encoding var shouldInferEncoding = false if (!encoding) { shouldInferEncoding = true } else { encoding = String(encoding).toLowerCase() if (encoding === 'u8' || encoding === 'uint8') { encoding = 'uint8array' } } Writable.call(this, { objectMode: true }) this.encoding = encoding this.shouldInferEncoding = shouldInferEncoding if (cb) this.on('finish', function () { cb(this.getBody()) }) this.body = [] } module.exports = ConcatStream inherits(ConcatStream, Writable) ConcatStream.prototype._write = function(chunk, enc, next) { this.body.push(chunk) next() } ConcatStream.prototype.inferEncoding = function (buff) { var firstBuffer = buff === undefined ? this.body[0] : buff; if (Buffer.isBuffer(firstBuffer)) return 'buffer' if (typeof Uint8Array !== 'undefined' && firstBuffer instanceof Uint8Array) return 'uint8array' if (Array.isArray(firstBuffer)) return 'array' if (typeof firstBuffer === 'string') return 'string' if (Object.prototype.toString.call(firstBuffer) === "[object Object]") return 'object' return 'buffer' } ConcatStream.prototype.getBody = function () { if (!this.encoding && this.body.length === 0) return [] if (this.shouldInferEncoding) this.encoding = this.inferEncoding() if (this.encoding === 'array') return arrayConcat(this.body) if (this.encoding === 'string') return stringConcat(this.body) if (this.encoding === 'buffer') return bufferConcat(this.body) if (this.encoding === 'uint8array') return u8Concat(this.body) return this.body } var isArray = Array.isArray || function (arr) { return Object.prototype.toString.call(arr) == '[object Array]' } function isArrayish (arr) { return /Array\]$/.test(Object.prototype.toString.call(arr)) } function isBufferish (p) { return typeof p === 'string' || isArrayish(p) || (p && typeof p.subarray === 'function') } function stringConcat (parts) { var strings = [] var needsToString = false for (var i = 0; i < parts.length; i++) { var p = parts[i] if (typeof p === 'string') { strings.push(p) } else if (Buffer.isBuffer(p)) { strings.push(p) } else if (isBufferish(p)) { strings.push(bufferFrom(p)) } else { strings.push(bufferFrom(String(p))) } } if (Buffer.isBuffer(parts[0])) { strings = Buffer.concat(strings) strings = strings.toString('utf8') } else { strings = strings.join('') } return strings } function bufferConcat (parts) { var bufs = [] for (var i = 0; i < parts.length; i++) { var p = parts[i] if (Buffer.isBuffer(p)) { bufs.push(p) } else if (isBufferish(p)) { bufs.push(bufferFrom(p)) } else { bufs.push(bufferFrom(String(p))) } } return Buffer.concat(bufs) } function arrayConcat (parts) { var res = [] for (var i = 0; i < parts.length; i++) { res.push.apply(res, parts[i]) } return res } function u8Concat (parts) { var len = 0 for (var i = 0; i < parts.length; i++) { if (typeof parts[i] === 'string') { parts[i] = bufferFrom(parts[i]) } len += parts[i].length } var u8 = new U8(len) for (var i = 0, offset = 0; i < parts.length; i++) { var part = parts[i] for (var j = 0; j < part.length; j++) { u8[offset++] = part[j] } } return u8 } }).call(this,require("buffer").Buffer) },{"buffer":182,"buffer-from":180,"inherits":262,"readable-stream":312,"typedarray":337}],186:[function(require,module,exports){ (function (Buffer){ // Copyright Joyent, Inc. and other Node contributors. // // 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. // NOTE: These type checking functions intentionally don't use `instanceof` // because it is fragile and can be easily faked with `Object.create()`. function isArray(arg) { if (Array.isArray) { return Array.isArray(arg); } return objectToString(arg) === '[object Array]'; } exports.isArray = isArray; function isBoolean(arg) { return typeof arg === 'boolean'; } exports.isBoolean = isBoolean; function isNull(arg) { return arg === null; } exports.isNull = isNull; function isNullOrUndefined(arg) { return arg == null; } exports.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { return typeof arg === 'number'; } exports.isNumber = isNumber; function isString(arg) { return typeof arg === 'string'; } exports.isString = isString; function isSymbol(arg) { return typeof arg === 'symbol'; } exports.isSymbol = isSymbol; function isUndefined(arg) { return arg === void 0; } exports.isUndefined = isUndefined; function isRegExp(re) { return objectToString(re) === '[object RegExp]'; } exports.isRegExp = isRegExp; function isObject(arg) { return typeof arg === 'object' && arg !== null; } exports.isObject = isObject; function isDate(d) { return objectToString(d) === '[object Date]'; } exports.isDate = isDate; function isError(e) { return (objectToString(e) === '[object Error]' || e instanceof Error); } exports.isError = isError; function isFunction(arg) { return typeof arg === 'function'; } exports.isFunction = isFunction; function isPrimitive(arg) { return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol typeof arg === 'undefined'; } exports.isPrimitive = isPrimitive; exports.isBuffer = Buffer.isBuffer; function objectToString(o) { return Object.prototype.toString.call(o); } }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) },{"../../is-buffer/index.js":263}],187:[function(require,module,exports){ (function (Buffer){ var elliptic = require('elliptic') var BN = require('bn.js') module.exports = function createECDH (curve) { return new ECDH(curve) } var aliases = { secp256k1: { name: 'secp256k1', byteLength: 32 }, secp224r1: { name: 'p224', byteLength: 28 }, prime256v1: { name: 'p256', byteLength: 32 }, prime192v1: { name: 'p192', byteLength: 24 }, ed25519: { name: 'ed25519', byteLength: 32 }, secp384r1: { name: 'p384', byteLength: 48 }, secp521r1: { name: 'p521', byteLength: 66 } } aliases.p224 = aliases.secp224r1 aliases.p256 = aliases.secp256r1 = aliases.prime256v1 aliases.p192 = aliases.secp192r1 = aliases.prime192v1 aliases.p384 = aliases.secp384r1 aliases.p521 = aliases.secp521r1 function ECDH (curve) { this.curveType = aliases[curve] if (!this.curveType) { this.curveType = { name: curve } } this.curve = new elliptic.ec(this.curveType.name) // eslint-disable-line new-cap this.keys = void 0 } ECDH.prototype.generateKeys = function (enc, format) { this.keys = this.curve.genKeyPair() return this.getPublicKey(enc, format) } ECDH.prototype.computeSecret = function (other, inenc, enc) { inenc = inenc || 'utf8' if (!Buffer.isBuffer(other)) { other = new Buffer(other, inenc) } var otherPub = this.curve.keyFromPublic(other).getPublic() var out = otherPub.mul(this.keys.getPrivate()).getX() return formatReturnValue(out, enc, this.curveType.byteLength) } ECDH.prototype.getPublicKey = function (enc, format) { var key = this.keys.getPublic(format === 'compressed', true) if (format === 'hybrid') { if (key[key.length - 1] % 2) { key[0] = 7 } else { key[0] = 6 } } return formatReturnValue(key, enc) } ECDH.prototype.getPrivateKey = function (enc) { return formatReturnValue(this.keys.getPrivate(), enc) } ECDH.prototype.setPublicKey = function (pub, enc) { enc = enc || 'utf8' if (!Buffer.isBuffer(pub)) { pub = new Buffer(pub, enc) } this.keys._importPublic(pub) return this } ECDH.prototype.setPrivateKey = function (priv, enc) { enc = enc || 'utf8' if (!Buffer.isBuffer(priv)) { priv = new Buffer(priv, enc) } var _priv = new BN(priv) _priv = _priv.toString(16) this.keys = this.curve.genKeyPair() this.keys._importPrivate(_priv) return this } function formatReturnValue (bn, enc, len) { if (!Array.isArray(bn)) { bn = bn.toArray() } var buf = new Buffer(bn) if (len && buf.length < len) { var zeros = new Buffer(len - buf.length) zeros.fill(0) buf = Buffer.concat([zeros, buf]) } if (!enc) { return buf } else { return buf.toString(enc) } } }).call(this,require("buffer").Buffer) },{"bn.js":147,"buffer":182,"elliptic":205}],188:[function(require,module,exports){ 'use strict' var inherits = require('inherits') var MD5 = require('md5.js') var RIPEMD160 = require('ripemd160') var sha = require('sha.js') var Base = require('cipher-base') function Hash (hash) { Base.call(this, 'digest') this._hash = hash } inherits(Hash, Base) Hash.prototype._update = function (data) { this._hash.update(data) } Hash.prototype._final = function () { return this._hash.digest() } module.exports = function createHash (alg) { alg = alg.toLowerCase() if (alg === 'md5') return new MD5() if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160() return new Hash(sha(alg)) } },{"cipher-base":184,"inherits":262,"md5.js":266,"ripemd160":317,"sha.js":320}],189:[function(require,module,exports){ var MD5 = require('md5.js') module.exports = function (buffer) { return new MD5().update(buffer).digest() } },{"md5.js":266}],190:[function(require,module,exports){ 'use strict' var inherits = require('inherits') var Legacy = require('./legacy') var Base = require('cipher-base') var Buffer = require('safe-buffer').Buffer var md5 = require('create-hash/md5') var RIPEMD160 = require('ripemd160') var sha = require('sha.js') var ZEROS = Buffer.alloc(128) function Hmac (alg, key) { Base.call(this, 'digest') if (typeof key === 'string') { key = Buffer.from(key) } var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 this._alg = alg this._key = key if (key.length > blocksize) { var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) key = hash.update(key).digest() } else if (key.length < blocksize) { key = Buffer.concat([key, ZEROS], blocksize) } var ipad = this._ipad = Buffer.allocUnsafe(blocksize) var opad = this._opad = Buffer.allocUnsafe(blocksize) for (var i = 0; i < blocksize; i++) { ipad[i] = key[i] ^ 0x36 opad[i] = key[i] ^ 0x5C } this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg) this._hash.update(ipad) } inherits(Hmac, Base) Hmac.prototype._update = function (data) { this._hash.update(data) } Hmac.prototype._final = function () { var h = this._hash.digest() var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg) return hash.update(this._opad).update(h).digest() } module.exports = function createHmac (alg, key) { alg = alg.toLowerCase() if (alg === 'rmd160' || alg === 'ripemd160') { return new Hmac('rmd160', key) } if (alg === 'md5') { return new Legacy(md5, key) } return new Hmac(alg, key) } },{"./legacy":191,"cipher-base":184,"create-hash/md5":189,"inherits":262,"ripemd160":317,"safe-buffer":318,"sha.js":320}],191:[function(require,module,exports){ 'use strict' var inherits = require('inherits') var Buffer = require('safe-buffer').Buffer var Base = require('cipher-base') var ZEROS = Buffer.alloc(128) var blocksize = 64 function Hmac (alg, key) { Base.call(this, 'digest') if (typeof key === 'string') { key = Buffer.from(key) } this._alg = alg this._key = key if (key.length > blocksize) { key = alg(key) } else if (key.length < blocksize) { key = Buffer.concat([key, ZEROS], blocksize) } var ipad = this._ipad = Buffer.allocUnsafe(blocksize) var opad = this._opad = Buffer.allocUnsafe(blocksize) for (var i = 0; i < blocksize; i++) { ipad[i] = key[i] ^ 0x36 opad[i] = key[i] ^ 0x5C } this._hash = [ipad] } inherits(Hmac, Base) Hmac.prototype._update = function (data) { this._hash.push(data) } Hmac.prototype._final = function () { var h = this._alg(Buffer.concat(this._hash)) return this._alg(Buffer.concat([this._opad, h])) } module.exports = Hmac },{"cipher-base":184,"inherits":262,"safe-buffer":318}],192:[function(require,module,exports){ 'use strict' exports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes') exports.createHash = exports.Hash = require('create-hash') exports.createHmac = exports.Hmac = require('create-hmac') var algos = require('browserify-sign/algos') var algoKeys = Object.keys(algos) var hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys) exports.getHashes = function () { return hashes } var p = require('pbkdf2') exports.pbkdf2 = p.pbkdf2 exports.pbkdf2Sync = p.pbkdf2Sync var aes = require('browserify-cipher') exports.Cipher = aes.Cipher exports.createCipher = aes.createCipher exports.Cipheriv = aes.Cipheriv exports.createCipheriv = aes.createCipheriv exports.Decipher = aes.Decipher exports.createDecipher = aes.createDecipher exports.Decipheriv = aes.Decipheriv exports.createDecipheriv = aes.createDecipheriv exports.getCiphers = aes.getCiphers exports.listCiphers = aes.listCiphers var dh = require('diffie-hellman') exports.DiffieHellmanGroup = dh.DiffieHellmanGroup exports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup exports.getDiffieHellman = dh.getDiffieHellman exports.createDiffieHellman = dh.createDiffieHellman exports.DiffieHellman = dh.DiffieHellman var sign = require('browserify-sign') exports.createSign = sign.createSign exports.Sign = sign.Sign exports.createVerify = sign.createVerify exports.Verify = sign.Verify exports.createECDH = require('create-ecdh') var publicEncrypt = require('public-encrypt') exports.publicEncrypt = publicEncrypt.publicEncrypt exports.privateEncrypt = publicEncrypt.privateEncrypt exports.publicDecrypt = publicEncrypt.publicDecrypt exports.privateDecrypt = publicEncrypt.privateDecrypt // the least I can do is make error messages for the rest of the node.js/crypto api. // ;[ // 'createCredentials' // ].forEach(function (name) { // exports[name] = function () { // throw new Error([ // 'sorry, ' + name + ' is not implemented yet', // 'we accept pull requests', // 'https://github.com/crypto-browserify/crypto-browserify' // ].join('\n')) // } // }) var rf = require('randomfill') exports.randomFill = rf.randomFill exports.randomFillSync = rf.randomFillSync exports.createCredentials = function () { throw new Error([ 'sorry, createCredentials is not implemented yet', 'we accept pull requests', 'https://github.com/crypto-browserify/crypto-browserify' ].join('\n')) } exports.constants = { 'DH_CHECK_P_NOT_SAFE_PRIME': 2, 'DH_CHECK_P_NOT_PRIME': 1, 'DH_UNABLE_TO_CHECK_GENERATOR': 4, 'DH_NOT_SUITABLE_GENERATOR': 8, 'NPN_ENABLED': 1, 'ALPN_ENABLED': 1, 'RSA_PKCS1_PADDING': 1, 'RSA_SSLV23_PADDING': 2, 'RSA_NO_PADDING': 3, 'RSA_PKCS1_OAEP_PADDING': 4, 'RSA_X931_PADDING': 5, 'RSA_PKCS1_PSS_PADDING': 6, 'POINT_CONVERSION_COMPRESSED': 2, 'POINT_CONVERSION_UNCOMPRESSED': 4, 'POINT_CONVERSION_HYBRID': 6 } },{"browserify-cipher":167,"browserify-sign":174,"browserify-sign/algos":171,"create-ecdh":187,"create-hash":188,"create-hmac":190,"diffie-hellman":201,"pbkdf2":278,"public-encrypt":286,"randombytes":298,"randomfill":299}],193:[function(require,module,exports){ // https://d3js.org/d3-array/ v1.2.4 Copyright 2018 Mike Bostock (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.d3 = global.d3 || {}))); }(this, (function (exports) { 'use strict'; function ascending(a, b) { return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; } function bisector(compare) { if (compare.length === 1) compare = ascendingComparator(compare); return { left: function(a, x, lo, hi) { if (lo == null) lo = 0; if (hi == null) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid; } return lo; }, right: function(a, x, lo, hi) { if (lo == null) lo = 0; if (hi == null) hi = a.length; while (lo < hi) { var mid = lo + hi >>> 1; if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1; } return lo; } }; } function ascendingComparator(f) { return function(d, x) { return ascending(f(d), x); }; } var ascendingBisect = bisector(ascending); var bisectRight = ascendingBisect.right; var bisectLeft = ascendingBisect.left; function pairs(array, f) { if (f == null) f = pair; var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n); while (i < n) pairs[i] = f(p, p = array[++i]); return pairs; } function pair(a, b) { return [a, b]; } function cross(values0, values1, reduce) { var n0 = values0.length, n1 = values1.length, values = new Array(n0 * n1), i0, i1, i, value0; if (reduce == null) reduce = pair; for (i0 = i = 0; i0 < n0; ++i0) { for (value0 = values0[i0], i1 = 0; i1 < n1; ++i1, ++i) { values[i] = reduce(value0, values1[i1]); } } return values; } function descending(a, b) { return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN; } function number(x) { return x === null ? NaN : +x; } function variance(values, valueof) { var n = values.length, m = 0, i = -1, mean = 0, value, delta, sum = 0; if (valueof == null) { while (++i < n) { if (!isNaN(value = number(values[i]))) { delta = value - mean; mean += delta / ++m; sum += delta * (value - mean); } } } else { while (++i < n) { if (!isNaN(value = number(valueof(values[i], i, values)))) { delta = value - mean; mean += delta / ++m; sum += delta * (value - mean); } } } if (m > 1) return sum / (m - 1); } function deviation(array, f) { var v = variance(array, f); return v ? Math.sqrt(v) : v; } function extent(values, valueof) { var n = values.length, i = -1, value, min, max; if (valueof == null) { while (++i < n) { // Find the first comparable value. if ((value = values[i]) != null && value >= value) { min = max = value; while (++i < n) { // Compare the remaining values. if ((value = values[i]) != null) { if (min > value) min = value; if (max < value) max = value; } } } } } else { while (++i < n) { // Find the first comparable value. if ((value = valueof(values[i], i, values)) != null && value >= value) { min = max = value; while (++i < n) { // Compare the remaining values. if ((value = valueof(values[i], i, values)) != null) { if (min > value) min = value; if (max < value) max = value; } } } } } return [min, max]; } var array = Array.prototype; var slice = array.slice; var map = array.map; function constant(x) { return function() { return x; }; } function identity(x) { return x; } function range(start, stop, step) { start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; var i = -1, n = Math.max(0, Math.ceil((stop - start) / step)) | 0, range = new Array(n); while (++i < n) { range[i] = start + i * step; } return range; } var e10 = Math.sqrt(50), e5 = Math.sqrt(10), e2 = Math.sqrt(2); function ticks(start, stop, count) { var reverse, i = -1, n, ticks, step; stop = +stop, start = +start, count = +count; if (start === stop && count > 0) return [start]; if (reverse = stop < start) n = start, start = stop, stop = n; if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; if (step > 0) { start = Math.ceil(start / step); stop = Math.floor(stop / step); ticks = new Array(n = Math.ceil(stop - start + 1)); while (++i < n) ticks[i] = (start + i) * step; } else { start = Math.floor(start * step); stop = Math.ceil(stop * step); ticks = new Array(n = Math.ceil(start - stop + 1)); while (++i < n) ticks[i] = (start - i) / step; } if (reverse) ticks.reverse(); return ticks; } function tickIncrement(start, stop, count) { var step = (stop - start) / Math.max(0, count), power = Math.floor(Math.log(step) / Math.LN10), error = step / Math.pow(10, power); return power >= 0 ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); } function tickStep(start, stop, count) { var step0 = Math.abs(stop - start) / Math.max(0, count), step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), error = step0 / step1; if (error >= e10) step1 *= 10; else if (error >= e5) step1 *= 5; else if (error >= e2) step1 *= 2; return stop < start ? -step1 : step1; } function sturges(values) { return Math.ceil(Math.log(values.length) / Math.LN2) + 1; } function histogram() { var value = identity, domain = extent, threshold = sturges; function histogram(data) { var i, n = data.length, x, values = new Array(n); for (i = 0; i < n; ++i) { values[i] = value(data[i], i, data); } var xz = domain(values), x0 = xz[0], x1 = xz[1], tz = threshold(values, x0, x1); // Convert number of thresholds into uniform thresholds. if (!Array.isArray(tz)) { tz = tickStep(x0, x1, tz); tz = range(Math.ceil(x0 / tz) * tz, x1, tz); // exclusive } // Remove any thresholds outside the domain. var m = tz.length; while (tz[0] <= x0) tz.shift(), --m; while (tz[m - 1] > x1) tz.pop(), --m; var bins = new Array(m + 1), bin; // Initialize bins. for (i = 0; i <= m; ++i) { bin = bins[i] = []; bin.x0 = i > 0 ? tz[i - 1] : x0; bin.x1 = i < m ? tz[i] : x1; } // Assign data to bins by value, ignoring any outside the domain. for (i = 0; i < n; ++i) { x = values[i]; if (x0 <= x && x <= x1) { bins[bisectRight(tz, x, 0, m)].push(data[i]); } } return bins; } histogram.value = function(_) { return arguments.length ? (value = typeof _ === "function" ? _ : constant(_), histogram) : value; }; histogram.domain = function(_) { return arguments.length ? (domain = typeof _ === "function" ? _ : constant([_[0], _[1]]), histogram) : domain; }; histogram.thresholds = function(_) { return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), histogram) : threshold; }; return histogram; } function quantile(values, p, valueof) { if (valueof == null) valueof = number; if (!(n = values.length)) return; if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); if (p >= 1) return +valueof(values[n - 1], n - 1, values); var n, i = (n - 1) * p, i0 = Math.floor(i), value0 = +valueof(values[i0], i0, values), value1 = +valueof(values[i0 + 1], i0 + 1, values); return value0 + (value1 - value0) * (i - i0); } function freedmanDiaconis(values, min, max) { values = map.call(values, number).sort(ascending); return Math.ceil((max - min) / (2 * (quantile(values, 0.75) - quantile(values, 0.25)) * Math.pow(values.length, -1 / 3))); } function scott(values, min, max) { return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3))); } function max(values, valueof) { var n = values.length, i = -1, value, max; if (valueof == null) { while (++i < n) { // Find the first comparable value. if ((value = values[i]) != null && value >= value) { max = value; while (++i < n) { // Compare the remaining values. if ((value = values[i]) != null && value > max) { max = value; } } } } } else { while (++i < n) { // Find the first comparable value. if ((value = valueof(values[i], i, values)) != null && value >= value) { max = value; while (++i < n) { // Compare the remaining values. if ((value = valueof(values[i], i, values)) != null && value > max) { max = value; } } } } } return max; } function mean(values, valueof) { var n = values.length, m = n, i = -1, value, sum = 0; if (valueof == null) { while (++i < n) { if (!isNaN(value = number(values[i]))) sum += value; else --m; } } else { while (++i < n) { if (!isNaN(value = number(valueof(values[i], i, values)))) sum += value; else --m; } } if (m) return sum / m; } function median(values, valueof) { var n = values.length, i = -1, value, numbers = []; if (valueof == null) { while (++i < n) { if (!isNaN(value = number(values[i]))) { numbers.push(value); } } } else { while (++i < n) { if (!isNaN(value = number(valueof(values[i], i, values)))) { numbers.push(value); } } } return quantile(numbers.sort(ascending), 0.5); } function merge(arrays) { var n = arrays.length, m, i = -1, j = 0, merged, array; while (++i < n) j += arrays[i].length; merged = new Array(j); while (--n >= 0) { array = arrays[n]; m = array.length; while (--m >= 0) { merged[--j] = array[m]; } } return merged; } function min(values, valueof) { var n = values.length, i = -1, value, min; if (valueof == null) { while (++i < n) { // Find the first comparable value. if ((value = values[i]) != null && value >= value) { min = value; while (++i < n) { // Compare the remaining values. if ((value = values[i]) != null && min > value) { min = value; } } } } } else { while (++i < n) { // Find the first comparable value. if ((value = valueof(values[i], i, values)) != null && value >= value) { min = value; while (++i < n) { // Compare the remaining values. if ((value = valueof(values[i], i, values)) != null && min > value) { min = value; } } } } } return min; } function permute(array, indexes) { var i = indexes.length, permutes = new Array(i); while (i--) permutes[i] = array[indexes[i]]; return permutes; } function scan(values, compare) { if (!(n = values.length)) return; var n, i = 0, j = 0, xi, xj = values[j]; if (compare == null) compare = ascending; while (++i < n) { if (compare(xi = values[i], xj) < 0 || compare(xj, xj) !== 0) { xj = xi, j = i; } } if (compare(xj, xj) === 0) return j; } function shuffle(array, i0, i1) { var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0), t, i; while (m) { i = Math.random() * m-- | 0; t = array[m + i0]; array[m + i0] = array[i + i0]; array[i + i0] = t; } return array; } function sum(values, valueof) { var n = values.length, i = -1, value, sum = 0; if (valueof == null) { while (++i < n) { if (value = +values[i]) sum += value; // Note: zero and null are equivalent. } } else { while (++i < n) { if (value = +valueof(values[i], i, values)) sum += value; } } return sum; } function transpose(matrix) { if (!(n = matrix.length)) return []; for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) { for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) { row[j] = matrix[j][i]; } } return transpose; } function length(d) { return d.length; } function zip() { return transpose(arguments); } exports.bisect = bisectRight; exports.bisectRight = bisectRight; exports.bisectLeft = bisectLeft; exports.ascending = ascending; exports.bisector = bisector; exports.cross = cross; exports.descending = descending; exports.deviation = deviation; exports.extent = extent; exports.histogram = histogram; exports.thresholdFreedmanDiaconis = freedmanDiaconis; exports.thresholdScott = scott; exports.thresholdSturges = sturges; exports.max = max; exports.mean = mean; exports.median = median; exports.merge = merge; exports.min = min; exports.pairs = pairs; exports.permute = permute; exports.quantile = quantile; exports.range = range; exports.scan = scan; exports.shuffle = shuffle; exports.sum = sum; exports.ticks = ticks; exports.tickIncrement = tickIncrement; exports.tickStep = tickStep; exports.transpose = transpose; exports.variance = variance; exports.zip = zip; Object.defineProperty(exports, '__esModule', { value: true }); }))); },{}],194:[function(require,module,exports){ // https://d3js.org/d3-geo/ v1.11.6 Copyright 2019 Mike Bostock (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('d3-array')) : typeof define === 'function' && define.amd ? define(['exports', 'd3-array'], factory) : (factory((global.d3 = global.d3 || {}),global.d3)); }(this, (function (exports,d3Array) { 'use strict'; // Adds floating point numbers with twice the normal precision. // Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and // Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) // 305–363 (1997). // Code adapted from GeographicLib by Charles F. F. Karney, // http://geographiclib.sourceforge.net/ function adder() { return new Adder; } function Adder() { this.reset(); } Adder.prototype = { constructor: Adder, reset: function() { this.s = // rounded value this.t = 0; // exact error }, add: function(y) { add(temp, y, this.t); add(this, temp.s, this.s); if (this.s) this.t += temp.t; else this.s = temp.t; }, valueOf: function() { return this.s; } }; var temp = new Adder; function add(adder, a, b) { var x = adder.s = a + b, bv = x - a, av = x - bv; adder.t = (a - av) + (b - bv); } var epsilon = 1e-6; var epsilon2 = 1e-12; var pi = Math.PI; var halfPi = pi / 2; var quarterPi = pi / 4; var tau = pi * 2; var degrees = 180 / pi; var radians = pi / 180; var abs = Math.abs; var atan = Math.atan; var atan2 = Math.atan2; var cos = Math.cos; var ceil = Math.ceil; var exp = Math.exp; var log = Math.log; var pow = Math.pow; var sin = Math.sin; var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; var sqrt = Math.sqrt; var tan = Math.tan; function acos(x) { return x > 1 ? 0 : x < -1 ? pi : Math.acos(x); } function asin(x) { return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x); } function haversin(x) { return (x = sin(x / 2)) * x; } function noop() {} function streamGeometry(geometry, stream) { if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { streamGeometryType[geometry.type](geometry, stream); } } var streamObjectType = { Feature: function(object, stream) { streamGeometry(object.geometry, stream); }, FeatureCollection: function(object, stream) { var features = object.features, i = -1, n = features.length; while (++i < n) streamGeometry(features[i].geometry, stream); } }; var streamGeometryType = { Sphere: function(object, stream) { stream.sphere(); }, Point: function(object, stream) { object = object.coordinates; stream.point(object[0], object[1], object[2]); }, MultiPoint: function(object, stream) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); }, LineString: function(object, stream) { streamLine(object.coordinates, stream, 0); }, MultiLineString: function(object, stream) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) streamLine(coordinates[i], stream, 0); }, Polygon: function(object, stream) { streamPolygon(object.coordinates, stream); }, MultiPolygon: function(object, stream) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) streamPolygon(coordinates[i], stream); }, GeometryCollection: function(object, stream) { var geometries = object.geometries, i = -1, n = geometries.length; while (++i < n) streamGeometry(geometries[i], stream); } }; function streamLine(coordinates, stream, closed) { var i = -1, n = coordinates.length - closed, coordinate; stream.lineStart(); while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); stream.lineEnd(); } function streamPolygon(coordinates, stream) { var i = -1, n = coordinates.length; stream.polygonStart(); while (++i < n) streamLine(coordinates[i], stream, 1); stream.polygonEnd(); } function geoStream(object, stream) { if (object && streamObjectType.hasOwnProperty(object.type)) { streamObjectType[object.type](object, stream); } else { streamGeometry(object, stream); } } var areaRingSum = adder(); var areaSum = adder(), lambda00, phi00, lambda0, cosPhi0, sinPhi0; var areaStream = { point: noop, lineStart: noop, lineEnd: noop, polygonStart: function() { areaRingSum.reset(); areaStream.lineStart = areaRingStart; areaStream.lineEnd = areaRingEnd; }, polygonEnd: function() { var areaRing = +areaRingSum; areaSum.add(areaRing < 0 ? tau + areaRing : areaRing); this.lineStart = this.lineEnd = this.point = noop; }, sphere: function() { areaSum.add(tau); } }; function areaRingStart() { areaStream.point = areaPointFirst; } function areaRingEnd() { areaPoint(lambda00, phi00); } function areaPointFirst(lambda, phi) { areaStream.point = areaPoint; lambda00 = lambda, phi00 = phi; lambda *= radians, phi *= radians; lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi); } function areaPoint(lambda, phi) { lambda *= radians, phi *= radians; phi = phi / 2 + quarterPi; // half the angular distance from south pole // Spherical excess E for a spherical triangle with vertices: south pole, // previous point, current point. Uses a formula derived from Cagnoli’s // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). var dLambda = lambda - lambda0, sdLambda = dLambda >= 0 ? 1 : -1, adLambda = sdLambda * dLambda, cosPhi = cos(phi), sinPhi = sin(phi), k = sinPhi0 * sinPhi, u = cosPhi0 * cosPhi + k * cos(adLambda), v = k * sdLambda * sin(adLambda); areaRingSum.add(atan2(v, u)); // Advance the previous points. lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; } function area(object) { areaSum.reset(); geoStream(object, areaStream); return areaSum * 2; } function spherical(cartesian) { return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])]; } function cartesian(spherical) { var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi); return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)]; } function cartesianDot(a, b) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } function cartesianCross(a, b) { return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; } // TODO return a function cartesianAddInPlace(a, b) { a[0] += b[0], a[1] += b[1], a[2] += b[2]; } function cartesianScale(vector, k) { return [vector[0] * k, vector[1] * k, vector[2] * k]; } // TODO return d function cartesianNormalizeInPlace(d) { var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); d[0] /= l, d[1] /= l, d[2] /= l; } var lambda0$1, phi0, lambda1, phi1, // bounds lambda2, // previous lambda-coordinate lambda00$1, phi00$1, // first point p0, // previous 3D point deltaSum = adder(), ranges, range; var boundsStream = { point: boundsPoint, lineStart: boundsLineStart, lineEnd: boundsLineEnd, polygonStart: function() { boundsStream.point = boundsRingPoint; boundsStream.lineStart = boundsRingStart; boundsStream.lineEnd = boundsRingEnd; deltaSum.reset(); areaStream.polygonStart(); }, polygonEnd: function() { areaStream.polygonEnd(); boundsStream.point = boundsPoint; boundsStream.lineStart = boundsLineStart; boundsStream.lineEnd = boundsLineEnd; if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); else if (deltaSum > epsilon) phi1 = 90; else if (deltaSum < -epsilon) phi0 = -90; range[0] = lambda0$1, range[1] = lambda1; }, sphere: function() { lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); } }; function boundsPoint(lambda, phi) { ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); if (phi < phi0) phi0 = phi; if (phi > phi1) phi1 = phi; } function linePoint(lambda, phi) { var p = cartesian([lambda * radians, phi * radians]); if (p0) { var normal = cartesianCross(p0, p), equatorial = [normal[1], -normal[0], 0], inflection = cartesianCross(equatorial, normal); cartesianNormalizeInPlace(inflection); inflection = spherical(inflection); var delta = lambda - lambda2, sign$$1 = delta > 0 ? 1 : -1, lambdai = inflection[0] * degrees * sign$$1, phii, antimeridian = abs(delta) > 180; if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { phii = inflection[1] * degrees; if (phii > phi1) phi1 = phii; } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) { phii = -inflection[1] * degrees; if (phii < phi0) phi0 = phii; } else { if (phi < phi0) phi0 = phi; if (phi > phi1) phi1 = phi; } if (antimeridian) { if (lambda < lambda2) { if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; } else { if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; } } else { if (lambda1 >= lambda0$1) { if (lambda < lambda0$1) lambda0$1 = lambda; if (lambda > lambda1) lambda1 = lambda; } else { if (lambda > lambda2) { if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; } else { if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; } } } } else { ranges.push(range = [lambda0$1 = lambda, lambda1 = lambda]); } if (phi < phi0) phi0 = phi; if (phi > phi1) phi1 = phi; p0 = p, lambda2 = lambda; } function boundsLineStart() { boundsStream.point = linePoint; } function boundsLineEnd() { range[0] = lambda0$1, range[1] = lambda1; boundsStream.point = boundsPoint; p0 = null; } function boundsRingPoint(lambda, phi) { if (p0) { var delta = lambda - lambda2; deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); } else { lambda00$1 = lambda, phi00$1 = phi; } areaStream.point(lambda, phi); linePoint(lambda, phi); } function boundsRingStart() { areaStream.lineStart(); } function boundsRingEnd() { boundsRingPoint(lambda00$1, phi00$1); areaStream.lineEnd(); if (abs(deltaSum) > epsilon) lambda0$1 = -(lambda1 = 180); range[0] = lambda0$1, range[1] = lambda1; p0 = null; } // Finds the left-right distance between two longitudes. // This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want // the distance between ±180° to be 360°. function angle(lambda0, lambda1) { return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; } function rangeCompare(a, b) { return a[0] - b[0]; } function rangeContains(range, x) { return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; } function bounds(feature) { var i, n, a, b, merged, deltaMax, delta; phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); ranges = []; geoStream(feature, boundsStream); // First, sort ranges by their minimum longitudes. if (n = ranges.length) { ranges.sort(rangeCompare); // Then, merge any ranges that overlap. for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { b = ranges[i]; if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; } else { merged.push(a = b); } } // Finally, find the largest gap between the merged ranges. // The final bounding box will be the inverse of this gap. for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { b = merged[i]; if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; } } ranges = range = null; return lambda0$1 === Infinity || phi0 === Infinity ? [[NaN, NaN], [NaN, NaN]] : [[lambda0$1, phi0], [lambda1, phi1]]; } var W0, W1, X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, lambda00$2, phi00$2, // first point x0, y0, z0; // previous point var centroidStream = { sphere: noop, point: centroidPoint, lineStart: centroidLineStart, lineEnd: centroidLineEnd, polygonStart: function() { centroidStream.lineStart = centroidRingStart; centroidStream.lineEnd = centroidRingEnd; }, polygonEnd: function() { centroidStream.lineStart = centroidLineStart; centroidStream.lineEnd = centroidLineEnd; } }; // Arithmetic mean of Cartesian vectors. function centroidPoint(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos(phi); centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)); } function centroidPointCartesian(x, y, z) { ++W0; X0 += (x - X0) / W0; Y0 += (y - Y0) / W0; Z0 += (z - Z0) / W0; } function centroidLineStart() { centroidStream.point = centroidLinePointFirst; } function centroidLinePointFirst(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos(phi); x0 = cosPhi * cos(lambda); y0 = cosPhi * sin(lambda); z0 = sin(phi); centroidStream.point = centroidLinePoint; centroidPointCartesian(x0, y0, z0); } function centroidLinePoint(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos(phi), x = cosPhi * cos(lambda), y = cosPhi * sin(lambda), z = sin(phi), w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); W1 += w; X1 += w * (x0 + (x0 = x)); Y1 += w * (y0 + (y0 = y)); Z1 += w * (z0 + (z0 = z)); centroidPointCartesian(x0, y0, z0); } function centroidLineEnd() { centroidStream.point = centroidPoint; } // See J. E. Brock, The Inertia Tensor for a Spherical Triangle, // J. Applied Mechanics 42, 239 (1975). function centroidRingStart() { centroidStream.point = centroidRingPointFirst; } function centroidRingEnd() { centroidRingPoint(lambda00$2, phi00$2); centroidStream.point = centroidPoint; } function centroidRingPointFirst(lambda, phi) { lambda00$2 = lambda, phi00$2 = phi; lambda *= radians, phi *= radians; centroidStream.point = centroidRingPoint; var cosPhi = cos(phi); x0 = cosPhi * cos(lambda); y0 = cosPhi * sin(lambda); z0 = sin(phi); centroidPointCartesian(x0, y0, z0); } function centroidRingPoint(lambda, phi) { lambda *= radians, phi *= radians; var cosPhi = cos(phi), x = cosPhi * cos(lambda), y = cosPhi * sin(lambda), z = sin(phi), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = sqrt(cx * cx + cy * cy + cz * cz), w = asin(m), // line weight = angle v = m && -w / m; // area weight multiplier X2 += v * cx; Y2 += v * cy; Z2 += v * cz; W1 += w; X1 += w * (x0 + (x0 = x)); Y1 += w * (y0 + (y0 = y)); Z1 += w * (z0 + (z0 = z)); centroidPointCartesian(x0, y0, z0); } function centroid(object) { W0 = W1 = X0 = Y0 = Z0 = X1 = Y1 = Z1 = X2 = Y2 = Z2 = 0; geoStream(object, centroidStream); var x = X2, y = Y2, z = Z2, m = x * x + y * y + z * z; // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. if (m < epsilon2) { x = X1, y = Y1, z = Z1; // If the feature has zero length, fall back to arithmetic mean of point vectors. if (W1 < epsilon) x = X0, y = Y0, z = Z0; m = x * x + y * y + z * z; // If the feature still has an undefined ccentroid, then return. if (m < epsilon2) return [NaN, NaN]; } return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees]; } function constant(x) { return function() { return x; }; } function compose(a, b) { function compose(x, y) { return x = a(x, y), b(x[0], x[1]); } if (a.invert && b.invert) compose.invert = function(x, y) { return x = b.invert(x, y), x && a.invert(x[0], x[1]); }; return compose; } function rotationIdentity(lambda, phi) { return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi]; } rotationIdentity.invert = rotationIdentity; function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) : rotationLambda(deltaLambda)) : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) : rotationIdentity); } function forwardRotationLambda(deltaLambda) { return function(lambda, phi) { return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi]; }; } function rotationLambda(deltaLambda) { var rotation = forwardRotationLambda(deltaLambda); rotation.invert = forwardRotationLambda(-deltaLambda); return rotation; } function rotationPhiGamma(deltaPhi, deltaGamma) { var cosDeltaPhi = cos(deltaPhi), sinDeltaPhi = sin(deltaPhi), cosDeltaGamma = cos(deltaGamma), sinDeltaGamma = sin(deltaGamma); function rotation(lambda, phi) { var cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(phi), k = z * cosDeltaPhi + x * sinDeltaPhi; return [ atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), asin(k * cosDeltaGamma + y * sinDeltaGamma) ]; } rotation.invert = function(lambda, phi) { var cosPhi = cos(phi), x = cos(lambda) * cosPhi, y = sin(lambda) * cosPhi, z = sin(phi), k = z * cosDeltaGamma - y * sinDeltaGamma; return [ atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), asin(k * cosDeltaPhi - x * sinDeltaPhi) ]; }; return rotation; } function rotation(rotate) { rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); function forward(coordinates) { coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates; } forward.invert = function(coordinates) { coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates; }; return forward; } // Generates a circle centered at [0°, 0°], with a given radius and precision. function circleStream(stream, radius, delta, direction, t0, t1) { if (!delta) return; var cosRadius = cos(radius), sinRadius = sin(radius), step = direction * delta; if (t0 == null) { t0 = radius + direction * tau; t1 = radius - step / 2; } else { t0 = circleRadius(cosRadius, t0); t1 = circleRadius(cosRadius, t1); if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau; } for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]); stream.point(point[0], point[1]); } } // Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. function circleRadius(cosRadius, point) { point = cartesian(point), point[0] -= cosRadius; cartesianNormalizeInPlace(point); var radius = acos(-point[1]); return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau; } function circle() { var center = constant([0, 0]), radius = constant(90), precision = constant(6), ring, rotate, stream = {point: point}; function point(x, y) { ring.push(x = rotate(x, y)); x[0] *= degrees, x[1] *= degrees; } function circle() { var c = center.apply(this, arguments), r = radius.apply(this, arguments) * radians, p = precision.apply(this, arguments) * radians; ring = []; rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert; circleStream(stream, r, p, 1); c = {type: "Polygon", coordinates: [ring]}; ring = rotate = null; return c; } circle.center = function(_) { return arguments.length ? (center = typeof _ === "function" ? _ : constant([+_[0], +_[1]]), circle) : center; }; circle.radius = function(_) { return arguments.length ? (radius = typeof _ === "function" ? _ : constant(+_), circle) : radius; }; circle.precision = function(_) { return arguments.length ? (precision = typeof _ === "function" ? _ : constant(+_), circle) : precision; }; return circle; } function clipBuffer() { var lines = [], line; return { point: function(x, y) { line.push([x, y]); }, lineStart: function() { lines.push(line = []); }, lineEnd: noop, rejoin: function() { if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); }, result: function() { var result = lines; lines = []; line = null; return result; } }; } function pointEqual(a, b) { return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon; } function Intersection(point, points, other, entry) { this.x = point; this.z = points; this.o = other; // another intersection this.e = entry; // is an entry? this.v = false; // visited this.n = this.p = null; // next & previous } // A generalized polygon clipping algorithm: given a polygon that has been cut // into its visible line segments, and rejoins the segments by interpolating // along the clip edge. function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { var subject = [], clip = [], i, n; segments.forEach(function(segment) { if ((n = segment.length - 1) <= 0) return; var n, p0 = segment[0], p1 = segment[n], x; // If the first and last points of a segment are coincident, then treat as a // closed ring. TODO if all rings are closed, then the winding order of the // exterior ring should be checked. if (pointEqual(p0, p1)) { stream.lineStart(); for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); stream.lineEnd(); return; } subject.push(x = new Intersection(p0, segment, null, true)); clip.push(x.o = new Intersection(p0, null, x, false)); subject.push(x = new Intersection(p1, segment, null, false)); clip.push(x.o = new Intersection(p1, null, x, true)); }); if (!subject.length) return; clip.sort(compareIntersection); link(subject); link(clip); for (i = 0, n = clip.length; i < n; ++i) { clip[i].e = startInside = !startInside; } var start = subject[0], points, point; while (1) { // Find first unvisited intersection. var current = start, isSubject = true; while (current.v) if ((current = current.n) === start) return; points = current.z; stream.lineStart(); do { current.v = current.o.v = true; if (current.e) { if (isSubject) { for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); } else { interpolate(current.x, current.n.x, 1, stream); } current = current.n; } else { if (isSubject) { points = current.p.z; for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); } else { interpolate(current.x, current.p.x, -1, stream); } current = current.p; } current = current.o; points = current.z; isSubject = !isSubject; } while (!current.v); stream.lineEnd(); } } function link(array) { if (!(n = array.length)) return; var n, i = 0, a = array[0], b; while (++i < n) { a.n = b = array[i]; b.p = a; a = b; } a.n = b = array[0]; b.p = a; } var sum = adder(); function longitude(point) { if (abs(point[0]) <= pi) return point[0]; else return sign(point[0]) * ((abs(point[0]) + pi) % tau - pi); } function polygonContains(polygon, point) { var lambda = longitude(point), phi = point[1], sinPhi = sin(phi), normal = [sin(lambda), -cos(lambda), 0], angle = 0, winding = 0; sum.reset(); if (sinPhi === 1) phi = halfPi + epsilon; else if (sinPhi === -1) phi = -halfPi - epsilon; for (var i = 0, n = polygon.length; i < n; ++i) { if (!(m = (ring = polygon[i]).length)) continue; var ring, m, point0 = ring[m - 1], lambda0 = longitude(point0), phi0 = point0[1] / 2 + quarterPi, sinPhi0 = sin(phi0), cosPhi0 = cos(phi0); for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { var point1 = ring[j], lambda1 = longitude(point1), phi1 = point1[1] / 2 + quarterPi, sinPhi1 = sin(phi1), cosPhi1 = cos(phi1), delta = lambda1 - lambda0, sign$$1 = delta >= 0 ? 1 : -1, absDelta = sign$$1 * delta, antimeridian = absDelta > pi, k = sinPhi0 * sinPhi1; sum.add(atan2(k * sign$$1 * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta))); angle += antimeridian ? delta + sign$$1 * tau : delta; // Are the longitudes either side of the point’s meridian (lambda), // and are the latitudes smaller than the parallel (phi)? if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { var arc = cartesianCross(cartesian(point0), cartesian(point1)); cartesianNormalizeInPlace(arc); var intersection = cartesianCross(normal, arc); cartesianNormalizeInPlace(intersection); var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]); if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { winding += antimeridian ^ delta >= 0 ? 1 : -1; } } } } // First, determine whether the South pole is inside or outside: // // It is inside if: // * the polygon winds around it in a clockwise direction. // * the polygon does not (cumulatively) wind around it, but has a negative // (counter-clockwise) area. // // Second, count the (signed) number of times a segment crosses a lambda // from the point to the South pole. If it is zero, then the point is the // same side as the South pole. return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1); } function clip(pointVisible, clipLine, interpolate, start) { return function(sink) { var line = clipLine(sink), ringBuffer = clipBuffer(), ringSink = clipLine(ringBuffer), polygonStarted = false, polygon, segments, ring; var clip = { point: point, lineStart: lineStart, lineEnd: lineEnd, polygonStart: function() { clip.point = pointRing; clip.lineStart = ringStart; clip.lineEnd = ringEnd; segments = []; polygon = []; }, polygonEnd: function() { clip.point = point; clip.lineStart = lineStart; clip.lineEnd = lineEnd; segments = d3Array.merge(segments); var startInside = polygonContains(polygon, start); if (segments.length) { if (!polygonStarted) sink.polygonStart(), polygonStarted = true; clipRejoin(segments, compareIntersection, startInside, interpolate, sink); } else if (startInside) { if (!polygonStarted) sink.polygonStart(), polygonStarted = true; sink.lineStart(); interpolate(null, null, 1, sink); sink.lineEnd(); } if (polygonStarted) sink.polygonEnd(), polygonStarted = false; segments = polygon = null; }, sphere: function() { sink.polygonStart(); sink.lineStart(); interpolate(null, null, 1, sink); sink.lineEnd(); sink.polygonEnd(); } }; function point(lambda, phi) { if (pointVisible(lambda, phi)) sink.point(lambda, phi); } function pointLine(lambda, phi) { line.point(lambda, phi); } function lineStart() { clip.point = pointLine; line.lineStart(); } function lineEnd() { clip.point = point; line.lineEnd(); } function pointRing(lambda, phi) { ring.push([lambda, phi]); ringSink.point(lambda, phi); } function ringStart() { ringSink.lineStart(); ring = []; } function ringEnd() { pointRing(ring[0][0], ring[0][1]); ringSink.lineEnd(); var clean = ringSink.clean(), ringSegments = ringBuffer.result(), i, n = ringSegments.length, m, segment, point; ring.pop(); polygon.push(ring); ring = null; if (!n) return; // No intersections. if (clean & 1) { segment = ringSegments[0]; if ((m = segment.length - 1) > 0) { if (!polygonStarted) sink.polygonStart(), polygonStarted = true; sink.lineStart(); for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); sink.lineEnd(); } return; } // Rejoin connected segments. // TODO reuse ringBuffer.rejoin()? if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); segments.push(ringSegments.filter(validSegment)); } return clip; }; } function validSegment(segment) { return segment.length > 1; } // Intersections are sorted along the clip edge. For both antimeridian cutting // and circle clipping, the same comparison is used. function compareIntersection(a, b) { return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]); } var clipAntimeridian = clip( function() { return true; }, clipAntimeridianLine, clipAntimeridianInterpolate, [-pi, -halfPi] ); // Takes a line and cuts into visible segments. Return values: 0 - there were // intersections or the line was empty; 1 - no intersections; 2 - there were // intersections, and the first and last segments should be rejoined. function clipAntimeridianLine(stream) { var lambda0 = NaN, phi0 = NaN, sign0 = NaN, clean; // no intersections return { lineStart: function() { stream.lineStart(); clean = 1; }, point: function(lambda1, phi1) { var sign1 = lambda1 > 0 ? pi : -pi, delta = abs(lambda1 - lambda0); if (abs(delta - pi) < epsilon) { // line crosses a pole stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi); stream.point(sign0, phi0); stream.lineEnd(); stream.lineStart(); stream.point(sign1, phi0); stream.point(lambda1, phi0); clean = 0; } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon; phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); stream.point(sign0, phi0); stream.lineEnd(); stream.lineStart(); stream.point(sign1, phi0); clean = 0; } stream.point(lambda0 = lambda1, phi0 = phi1); sign0 = sign1; }, lineEnd: function() { stream.lineEnd(); lambda0 = phi0 = NaN; }, clean: function() { return 2 - clean; // if intersections, rejoin first and last segments } }; } function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { var cosPhi0, cosPhi1, sinLambda0Lambda1 = sin(lambda0 - lambda1); return abs(sinLambda0Lambda1) > epsilon ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1) - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0)) / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) : (phi0 + phi1) / 2; } function clipAntimeridianInterpolate(from, to, direction, stream) { var phi; if (from == null) { phi = direction * halfPi; stream.point(-pi, phi); stream.point(0, phi); stream.point(pi, phi); stream.point(pi, 0); stream.point(pi, -phi); stream.point(0, -phi); stream.point(-pi, -phi); stream.point(-pi, 0); stream.point(-pi, phi); } else if (abs(from[0] - to[0]) > epsilon) { var lambda = from[0] < to[0] ? pi : -pi; phi = direction * lambda / 2; stream.point(-lambda, phi); stream.point(0, phi); stream.point(lambda, phi); } else { stream.point(to[0], to[1]); } } function clipCircle(radius) { var cr = cos(radius), delta = 6 * radians, smallRadius = cr > 0, notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case function interpolate(from, to, direction, stream) { circleStream(stream, radius, delta, direction, from, to); } function visible(lambda, phi) { return cos(lambda) * cos(phi) > cr; } // Takes a line and cuts into visible segments. Return values used for polygon // clipping: 0 - there were intersections or the line was empty; 1 - no // intersections 2 - there were intersections, and the first and last segments // should be rejoined. function clipLine(stream) { var point0, // previous point c0, // code for previous point v0, // visibility of previous point v00, // visibility of first point clean; // no intersections return { lineStart: function() { v00 = v0 = false; clean = 1; }, point: function(lambda, phi) { var point1 = [lambda, phi], point2, v = visible(lambda, phi), c = smallRadius ? v ? 0 : code(lambda, phi) : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0; if (!point0 && (v00 = v0 = v)) stream.lineStart(); // Handle degeneracies. // TODO ignore if not clipping polygons. if (v !== v0) { point2 = intersect(point0, point1); if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) { point1[0] += epsilon; point1[1] += epsilon; v = visible(point1[0], point1[1]); } } if (v !== v0) { clean = 0; if (v) { // outside going in stream.lineStart(); point2 = intersect(point1, point0); stream.point(point2[0], point2[1]); } else { // inside going out point2 = intersect(point0, point1); stream.point(point2[0], point2[1]); stream.lineEnd(); } point0 = point2; } else if (notHemisphere && point0 && smallRadius ^ v) { var t; // If the codes for two points are different, or are both zero, // and there this segment intersects with the small circle. if (!(c & c0) && (t = intersect(point1, point0, true))) { clean = 0; if (smallRadius) { stream.lineStart(); stream.point(t[0][0], t[0][1]); stream.point(t[1][0], t[1][1]); stream.lineEnd(); } else { stream.point(t[1][0], t[1][1]); stream.lineEnd(); stream.lineStart(); stream.point(t[0][0], t[0][1]); } } } if (v && (!point0 || !pointEqual(point0, point1))) { stream.point(point1[0], point1[1]); } point0 = point1, v0 = v, c0 = c; }, lineEnd: function() { if (v0) stream.lineEnd(); point0 = null; }, // Rejoin first and last segments if there were intersections and the first // and last points were visible. clean: function() { return clean | ((v00 && v0) << 1); } }; } // Intersects the great circle between a and b with the clip circle. function intersect(a, b, two) { var pa = cartesian(a), pb = cartesian(b); // We have two planes, n1.p = d1 and n2.p = d2. // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). var n1 = [1, 0, 0], // normal n2 = cartesianCross(pa, pb), n2n2 = cartesianDot(n2, n2), n1n2 = n2[0], // cartesianDot(n1, n2), determinant = n2n2 - n1n2 * n1n2; // Two polar points. if (!determinant) return !two && a; var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = cartesianCross(n1, n2), A = cartesianScale(n1, c1), B = cartesianScale(n2, c2); cartesianAddInPlace(A, B); // Solve |p(t)|^2 = 1. var u = n1xn2, w = cartesianDot(A, u), uu = cartesianDot(u, u), t2 = w * w - uu * (cartesianDot(A, A) - 1); if (t2 < 0) return; var t = sqrt(t2), q = cartesianScale(u, (-w - t) / uu); cartesianAddInPlace(q, A); q = spherical(q); if (!two) return q; // Two intersection points. var lambda0 = a[0], lambda1 = b[0], phi0 = a[1], phi1 = b[1], z; if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; var delta = lambda1 - lambda0, polar = abs(delta - pi) < epsilon, meridian = polar || delta < epsilon; if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; // Check that the first point is between a and b. if (meridian ? polar ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1) : phi0 <= q[1] && q[1] <= phi1 : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) { var q1 = cartesianScale(u, (-w + t) / uu); cartesianAddInPlace(q1, A); return [q, spherical(q1)]; } } // Generates a 4-bit vector representing the location of a point relative to // the small circle's bounding box. function code(lambda, phi) { var r = smallRadius ? radius : pi - radius, code = 0; if (lambda < -r) code |= 1; // left else if (lambda > r) code |= 2; // right if (phi < -r) code |= 4; // below else if (phi > r) code |= 8; // above return code; } return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]); } function clipLine(a, b, x0, y0, x1, y1) { var ax = a[0], ay = a[1], bx = b[0], by = b[1], t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r; r = x0 - ax; if (!dx && r > 0) return; r /= dx; if (dx < 0) { if (r < t0) return; if (r < t1) t1 = r; } else if (dx > 0) { if (r > t1) return; if (r > t0) t0 = r; } r = x1 - ax; if (!dx && r < 0) return; r /= dx; if (dx < 0) { if (r > t1) return; if (r > t0) t0 = r; } else if (dx > 0) { if (r < t0) return; if (r < t1) t1 = r; } r = y0 - ay; if (!dy && r > 0) return; r /= dy; if (dy < 0) { if (r < t0) return; if (r < t1) t1 = r; } else if (dy > 0) { if (r > t1) return; if (r > t0) t0 = r; } r = y1 - ay; if (!dy && r < 0) return; r /= dy; if (dy < 0) { if (r > t1) return; if (r > t0) t0 = r; } else if (dy > 0) { if (r < t0) return; if (r < t1) t1 = r; } if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; return true; } var clipMax = 1e9, clipMin = -clipMax; // TODO Use d3-polygon’s polygonContains here for the ring check? // TODO Eliminate duplicate buffering in clipBuffer and polygon.push? function clipRectangle(x0, y0, x1, y1) { function visible(x, y) { return x0 <= x && x <= x1 && y0 <= y && y <= y1; } function interpolate(from, to, direction, stream) { var a = 0, a1 = 0; if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoint(from, to) < 0 ^ direction > 0) { do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); while ((a = (a + direction + 4) % 4) !== a1); } else { stream.point(to[0], to[1]); } } function corner(p, direction) { return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon } function compareIntersection(a, b) { return comparePoint(a.x, b.x); } function comparePoint(a, b) { var ca = corner(a, 1), cb = corner(b, 1); return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0]; } return function(stream) { var activeStream = stream, bufferStream = clipBuffer(), segments, polygon, ring, x__, y__, v__, // first point x_, y_, v_, // previous point first, clean; var clipStream = { point: point, lineStart: lineStart, lineEnd: lineEnd, polygonStart: polygonStart, polygonEnd: polygonEnd }; function point(x, y) { if (visible(x, y)) activeStream.point(x, y); } function polygonInside() { var winding = 0; for (var i = 0, n = polygon.length; i < n; ++i) { for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } } } return winding; } // Buffer geometry within a polygon and then clip it en masse. function polygonStart() { activeStream = bufferStream, segments = [], polygon = [], clean = true; } function polygonEnd() { var startInside = polygonInside(), cleanInside = clean && startInside, visible = (segments = d3Array.merge(segments)).length; if (cleanInside || visible) { stream.polygonStart(); if (cleanInside) { stream.lineStart(); interpolate(null, null, 1, stream); stream.lineEnd(); } if (visible) { clipRejoin(segments, compareIntersection, startInside, interpolate, stream); } stream.polygonEnd(); } activeStream = stream, segments = polygon = ring = null; } function lineStart() { clipStream.point = linePoint; if (polygon) polygon.push(ring = []); first = true; v_ = false; x_ = y_ = NaN; } // TODO rather than special-case polygons, simply handle them separately. // Ideally, coincident intersection points should be jittered to avoid // clipping issues. function lineEnd() { if (segments) { linePoint(x__, y__); if (v__ && v_) bufferStream.rejoin(); segments.push(bufferStream.result()); } clipStream.point = point; if (v_) activeStream.lineEnd(); } function linePoint(x, y) { var v = visible(x, y); if (polygon) ring.push([x, y]); if (first) { x__ = x, y__ = y, v__ = v; first = false; if (v) { activeStream.lineStart(); activeStream.point(x, y); } } else { if (v && v_) activeStream.point(x, y); else { var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; if (clipLine(a, b, x0, y0, x1, y1)) { if (!v_) { activeStream.lineStart(); activeStream.point(a[0], a[1]); } activeStream.point(b[0], b[1]); if (!v) activeStream.lineEnd(); clean = false; } else if (v) { activeStream.lineStart(); activeStream.point(x, y); clean = false; } } } x_ = x, y_ = y, v_ = v; } return clipStream; }; } function extent() { var x0 = 0, y0 = 0, x1 = 960, y1 = 500, cache, cacheStream, clip; return clip = { stream: function(stream) { return cache && cacheStream === stream ? cache : cache = clipRectangle(x0, y0, x1, y1)(cacheStream = stream); }, extent: function(_) { return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]]; } }; } var lengthSum = adder(), lambda0$2, sinPhi0$1, cosPhi0$1; var lengthStream = { sphere: noop, point: noop, lineStart: lengthLineStart, lineEnd: noop, polygonStart: noop, polygonEnd: noop }; function lengthLineStart() { lengthStream.point = lengthPointFirst; lengthStream.lineEnd = lengthLineEnd; } function lengthLineEnd() { lengthStream.point = lengthStream.lineEnd = noop; } function lengthPointFirst(lambda, phi) { lambda *= radians, phi *= radians; lambda0$2 = lambda, sinPhi0$1 = sin(phi), cosPhi0$1 = cos(phi); lengthStream.point = lengthPoint; } function lengthPoint(lambda, phi) { lambda *= radians, phi *= radians; var sinPhi = sin(phi), cosPhi = cos(phi), delta = abs(lambda - lambda0$2), cosDelta = cos(delta), sinDelta = sin(delta), x = cosPhi * sinDelta, y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta, z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta; lengthSum.add(atan2(sqrt(x * x + y * y), z)); lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi; } function length(object) { lengthSum.reset(); geoStream(object, lengthStream); return +lengthSum; } var coordinates = [null, null], object = {type: "LineString", coordinates: coordinates}; function distance(a, b) { coordinates[0] = a; coordinates[1] = b; return length(object); } var containsObjectType = { Feature: function(object, point) { return containsGeometry(object.geometry, point); }, FeatureCollection: function(object, point) { var features = object.features, i = -1, n = features.length; while (++i < n) if (containsGeometry(features[i].geometry, point)) return true; return false; } }; var containsGeometryType = { Sphere: function() { return true; }, Point: function(object, point) { return containsPoint(object.coordinates, point); }, MultiPoint: function(object, point) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) if (containsPoint(coordinates[i], point)) return true; return false; }, LineString: function(object, point) { return containsLine(object.coordinates, point); }, MultiLineString: function(object, point) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) if (containsLine(coordinates[i], point)) return true; return false; }, Polygon: function(object, point) { return containsPolygon(object.coordinates, point); }, MultiPolygon: function(object, point) { var coordinates = object.coordinates, i = -1, n = coordinates.length; while (++i < n) if (containsPolygon(coordinates[i], point)) return true; return false; }, GeometryCollection: function(object, point) { var geometries = object.geometries, i = -1, n = geometries.length; while (++i < n) if (containsGeometry(geometries[i], point)) return true; return false; } }; function containsGeometry(geometry, point) { return geometry && containsGeometryType.hasOwnProperty(geometry.type) ? containsGeometryType[geometry.type](geometry, point) : false; } function containsPoint(coordinates, point) { return distance(coordinates, point) === 0; } function containsLine(coordinates, point) { var ao, bo, ab; for (var i = 0, n = coordinates.length; i < n; i++) { bo = distance(coordinates[i], point); if (bo === 0) return true; if (i > 0) { ab = distance(coordinates[i], coordinates[i - 1]); if ( ab > 0 && ao <= ab && bo <= ab && (ao + bo - ab) * (1 - Math.pow((ao - bo) / ab, 2)) < epsilon2 * ab ) return true; } ao = bo; } return false; } function containsPolygon(coordinates, point) { return !!polygonContains(coordinates.map(ringRadians), pointRadians(point)); } function ringRadians(ring) { return ring = ring.map(pointRadians), ring.pop(), ring; } function pointRadians(point) { return [point[0] * radians, point[1] * radians]; } function contains(object, point) { return (object && containsObjectType.hasOwnProperty(object.type) ? containsObjectType[object.type] : containsGeometry)(object, point); } function graticuleX(y0, y1, dy) { var y = d3Array.range(y0, y1 - epsilon, dy).concat(y1); return function(x) { return y.map(function(y) { return [x, y]; }); }; } function graticuleY(x0, x1, dx) { var x = d3Array.range(x0, x1 - epsilon, dx).concat(x1); return function(y) { return x.map(function(x) { return [x, y]; }); }; } function graticule() { var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5; function graticule() { return {type: "MultiLineString", coordinates: lines()}; } function lines() { return d3Array.range(ceil(X0 / DX) * DX, X1, DX).map(X) .concat(d3Array.range(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) .concat(d3Array.range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x)) .concat(d3Array.range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y)); } graticule.lines = function() { return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); }; graticule.outline = function() { return { type: "Polygon", coordinates: [ X(X0).concat( Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ] }; }; graticule.extent = function(_) { if (!arguments.length) return graticule.extentMinor(); return graticule.extentMajor(_).extentMinor(_); }; graticule.extentMajor = function(_) { if (!arguments.length) return [[X0, Y0], [X1, Y1]]; X0 = +_[0][0], X1 = +_[1][0]; Y0 = +_[0][1], Y1 = +_[1][1]; if (X0 > X1) _ = X0, X0 = X1, X1 = _; if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; return graticule.precision(precision); }; graticule.extentMinor = function(_) { if (!arguments.length) return [[x0, y0], [x1, y1]]; x0 = +_[0][0], x1 = +_[1][0]; y0 = +_[0][1], y1 = +_[1][1]; if (x0 > x1) _ = x0, x0 = x1, x1 = _; if (y0 > y1) _ = y0, y0 = y1, y1 = _; return graticule.precision(precision); }; graticule.step = function(_) { if (!arguments.length) return graticule.stepMinor(); return graticule.stepMajor(_).stepMinor(_); }; graticule.stepMajor = function(_) { if (!arguments.length) return [DX, DY]; DX = +_[0], DY = +_[1]; return graticule; }; graticule.stepMinor = function(_) { if (!arguments.length) return [dx, dy]; dx = +_[0], dy = +_[1]; return graticule; }; graticule.precision = function(_) { if (!arguments.length) return precision; precision = +_; x = graticuleX(y0, y1, 90); y = graticuleY(x0, x1, precision); X = graticuleX(Y0, Y1, 90); Y = graticuleY(X0, X1, precision); return graticule; }; return graticule .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]]) .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]); } function graticule10() { return graticule()(); } function interpolate(a, b) { var x0 = a[0] * radians, y0 = a[1] * radians, x1 = b[0] * radians, y1 = b[1] * radians, cy0 = cos(y0), sy0 = sin(y0), cy1 = cos(y1), sy1 = sin(y1), kx0 = cy0 * cos(x0), ky0 = cy0 * sin(x0), kx1 = cy1 * cos(x1), ky1 = cy1 * sin(x1), d = 2 * asin(sqrt(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))), k = sin(d); var interpolate = d ? function(t) { var B = sin(t *= d) / k, A = sin(d - t) / k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1; return [ atan2(y, x) * degrees, atan2(z, sqrt(x * x + y * y)) * degrees ]; } : function() { return [x0 * degrees, y0 * degrees]; }; interpolate.distance = d; return interpolate; } function identity(x) { return x; } var areaSum$1 = adder(), areaRingSum$1 = adder(), x00, y00, x0$1, y0$1; var areaStream$1 = { point: noop, lineStart: noop, lineEnd: noop, polygonStart: function() { areaStream$1.lineStart = areaRingStart$1; areaStream$1.lineEnd = areaRingEnd$1; }, polygonEnd: function() { areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop; areaSum$1.add(abs(areaRingSum$1)); areaRingSum$1.reset(); }, result: function() { var area = areaSum$1 / 2; areaSum$1.reset(); return area; } }; function areaRingStart$1() { areaStream$1.point = areaPointFirst$1; } function areaPointFirst$1(x, y) { areaStream$1.point = areaPoint$1; x00 = x0$1 = x, y00 = y0$1 = y; } function areaPoint$1(x, y) { areaRingSum$1.add(y0$1 * x - x0$1 * y); x0$1 = x, y0$1 = y; } function areaRingEnd$1() { areaPoint$1(x00, y00); } var x0$2 = Infinity, y0$2 = x0$2, x1 = -x0$2, y1 = x1; var boundsStream$1 = { point: boundsPoint$1, lineStart: noop, lineEnd: noop, polygonStart: noop, polygonEnd: noop, result: function() { var bounds = [[x0$2, y0$2], [x1, y1]]; x1 = y1 = -(y0$2 = x0$2 = Infinity); return bounds; } }; function boundsPoint$1(x, y) { if (x < x0$2) x0$2 = x; if (x > x1) x1 = x; if (y < y0$2) y0$2 = y; if (y > y1) y1 = y; } // TODO Enforce positive area for exterior, negative area for interior? var X0$1 = 0, Y0$1 = 0, Z0$1 = 0, X1$1 = 0, Y1$1 = 0, Z1$1 = 0, X2$1 = 0, Y2$1 = 0, Z2$1 = 0, x00$1, y00$1, x0$3, y0$3; var centroidStream$1 = { point: centroidPoint$1, lineStart: centroidLineStart$1, lineEnd: centroidLineEnd$1, polygonStart: function() { centroidStream$1.lineStart = centroidRingStart$1; centroidStream$1.lineEnd = centroidRingEnd$1; }, polygonEnd: function() { centroidStream$1.point = centroidPoint$1; centroidStream$1.lineStart = centroidLineStart$1; centroidStream$1.lineEnd = centroidLineEnd$1; }, result: function() { var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] : [NaN, NaN]; X0$1 = Y0$1 = Z0$1 = X1$1 = Y1$1 = Z1$1 = X2$1 = Y2$1 = Z2$1 = 0; return centroid; } }; function centroidPoint$1(x, y) { X0$1 += x; Y0$1 += y; ++Z0$1; } function centroidLineStart$1() { centroidStream$1.point = centroidPointFirstLine; } function centroidPointFirstLine(x, y) { centroidStream$1.point = centroidPointLine; centroidPoint$1(x0$3 = x, y0$3 = y); } function centroidPointLine(x, y) { var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy); X1$1 += z * (x0$3 + x) / 2; Y1$1 += z * (y0$3 + y) / 2; Z1$1 += z; centroidPoint$1(x0$3 = x, y0$3 = y); } function centroidLineEnd$1() { centroidStream$1.point = centroidPoint$1; } function centroidRingStart$1() { centroidStream$1.point = centroidPointFirstRing; } function centroidRingEnd$1() { centroidPointRing(x00$1, y00$1); } function centroidPointFirstRing(x, y) { centroidStream$1.point = centroidPointRing; centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); } function centroidPointRing(x, y) { var dx = x - x0$3, dy = y - y0$3, z = sqrt(dx * dx + dy * dy); X1$1 += z * (x0$3 + x) / 2; Y1$1 += z * (y0$3 + y) / 2; Z1$1 += z; z = y0$3 * x - x0$3 * y; X2$1 += z * (x0$3 + x); Y2$1 += z * (y0$3 + y); Z2$1 += z * 3; centroidPoint$1(x0$3 = x, y0$3 = y); } function PathContext(context) { this._context = context; } PathContext.prototype = { _radius: 4.5, pointRadius: function(_) { return this._radius = _, this; }, polygonStart: function() { this._line = 0; }, polygonEnd: function() { this._line = NaN; }, lineStart: function() { this._point = 0; }, lineEnd: function() { if (this._line === 0) this._context.closePath(); this._point = NaN; }, point: function(x, y) { switch (this._point) { case 0: { this._context.moveTo(x, y); this._point = 1; break; } case 1: { this._context.lineTo(x, y); break; } default: { this._context.moveTo(x + this._radius, y); this._context.arc(x, y, this._radius, 0, tau); break; } } }, result: noop }; var lengthSum$1 = adder(), lengthRing, x00$2, y00$2, x0$4, y0$4; var lengthStream$1 = { point: noop, lineStart: function() { lengthStream$1.point = lengthPointFirst$1; }, lineEnd: function() { if (lengthRing) lengthPoint$1(x00$2, y00$2); lengthStream$1.point = noop; }, polygonStart: function() { lengthRing = true; }, polygonEnd: function() { lengthRing = null; }, result: function() { var length = +lengthSum$1; lengthSum$1.reset(); return length; } }; function lengthPointFirst$1(x, y) { lengthStream$1.point = lengthPoint$1; x00$2 = x0$4 = x, y00$2 = y0$4 = y; } function lengthPoint$1(x, y) { x0$4 -= x, y0$4 -= y; lengthSum$1.add(sqrt(x0$4 * x0$4 + y0$4 * y0$4)); x0$4 = x, y0$4 = y; } function PathString() { this._string = []; } PathString.prototype = { _radius: 4.5, _circle: circle$1(4.5), pointRadius: function(_) { if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; return this; }, polygonStart: function() { this._line = 0; }, polygonEnd: function() { this._line = NaN; }, lineStart: function() { this._point = 0; }, lineEnd: function() { if (this._line === 0) this._string.push("Z"); this._point = NaN; }, point: function(x, y) { switch (this._point) { case 0: { this._string.push("M", x, ",", y); this._point = 1; break; } case 1: { this._string.push("L", x, ",", y); break; } default: { if (this._circle == null) this._circle = circle$1(this._radius); this._string.push("M", x, ",", y, this._circle); break; } } }, result: function() { if (this._string.length) { var result = this._string.join(""); this._string = []; return result; } else { return null; } } }; function circle$1(radius) { return "m0," + radius + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + "z"; } function index(projection, context) { var pointRadius = 4.5, projectionStream, contextStream; function path(object) { if (object) { if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); geoStream(object, projectionStream(contextStream)); } return contextStream.result(); } path.area = function(object) { geoStream(object, projectionStream(areaStream$1)); return areaStream$1.result(); }; path.measure = function(object) { geoStream(object, projectionStream(lengthStream$1)); return lengthStream$1.result(); }; path.bounds = function(object) { geoStream(object, projectionStream(boundsStream$1)); return boundsStream$1.result(); }; path.centroid = function(object) { geoStream(object, projectionStream(centroidStream$1)); return centroidStream$1.result(); }; path.projection = function(_) { return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection; }; path.context = function(_) { if (!arguments.length) return context; contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _); if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); return path; }; path.pointRadius = function(_) { if (!arguments.length) return pointRadius; pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); return path; }; return path.projection(projection).context(context); } function transform(methods) { return { stream: transformer(methods) }; } function transformer(methods) { return function(stream) { var s = new TransformStream; for (var key in methods) s[key] = methods[key]; s.stream = stream; return s; }; } function TransformStream() {} TransformStream.prototype = { constructor: TransformStream, point: function(x, y) { this.stream.point(x, y); }, sphere: function() { this.stream.sphere(); }, lineStart: function() { this.stream.lineStart(); }, lineEnd: function() { this.stream.lineEnd(); }, polygonStart: function() { this.stream.polygonStart(); }, polygonEnd: function() { this.stream.polygonEnd(); } }; function fit(projection, fitBounds, object) { var clip = projection.clipExtent && projection.clipExtent(); projection.scale(150).translate([0, 0]); if (clip != null) projection.clipExtent(null); geoStream(object, projection.stream(boundsStream$1)); fitBounds(boundsStream$1.result()); if (clip != null) projection.clipExtent(clip); return projection; } function fitExtent(projection, extent, object) { return fit(projection, function(b) { var w = extent[1][0] - extent[0][0], h = extent[1][1] - extent[0][1], k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; projection.scale(150 * k).translate([x, y]); }, object); } function fitSize(projection, size, object) { return fitExtent(projection, [[0, 0], size], object); } function fitWidth(projection, width, object) { return fit(projection, function(b) { var w = +width, k = w / (b[1][0] - b[0][0]), x = (w - k * (b[1][0] + b[0][0])) / 2, y = -k * b[0][1]; projection.scale(150 * k).translate([x, y]); }, object); } function fitHeight(projection, height, object) { return fit(projection, function(b) { var h = +height, k = h / (b[1][1] - b[0][1]), x = -k * b[0][0], y = (h - k * (b[1][1] + b[0][1])) / 2; projection.scale(150 * k).translate([x, y]); }, object); } var maxDepth = 16, // maximum depth of subdivision cosMinDistance = cos(30 * radians); // cos(minimum angular distance) function resample(project, delta2) { return +delta2 ? resample$1(project, delta2) : resampleNone(project); } function resampleNone(project) { return transformer({ point: function(x, y) { x = project(x, y); this.stream.point(x[0], x[1]); } }); } function resample$1(project, delta2) { function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy; if (d2 > 4 * delta2 && depth--) { var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = sqrt(a * a + b * b + c * c), phi2 = asin(c /= m), lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a), p = project(lambda2, phi2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2; if (dz * dz / d2 > delta2 // perpendicular projected distance || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); stream.point(x2, y2); resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); } } } return function(stream) { var lambda00, x00, y00, a00, b00, c00, // first point lambda0, x0, y0, a0, b0, c0; // previous point var resampleStream = { point: point, lineStart: lineStart, lineEnd: lineEnd, polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } }; function point(x, y) { x = project(x, y); stream.point(x[0], x[1]); } function lineStart() { x0 = NaN; resampleStream.point = linePoint; stream.lineStart(); } function linePoint(lambda, phi) { var c = cartesian([lambda, phi]), p = project(lambda, phi); resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); stream.point(x0, y0); } function lineEnd() { resampleStream.point = point; stream.lineEnd(); } function ringStart() { lineStart(); resampleStream.point = ringPoint; resampleStream.lineEnd = ringEnd; } function ringPoint(lambda, phi) { linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; resampleStream.point = linePoint; } function ringEnd() { resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); resampleStream.lineEnd = lineEnd; lineEnd(); } return resampleStream; }; } var transformRadians = transformer({ point: function(x, y) { this.stream.point(x * radians, y * radians); } }); function transformRotate(rotate) { return transformer({ point: function(x, y) { var r = rotate(x, y); return this.stream.point(r[0], r[1]); } }); } function scaleTranslate(k, dx, dy) { function transform$$1(x, y) { return [dx + k * x, dy - k * y]; } transform$$1.invert = function(x, y) { return [(x - dx) / k, (dy - y) / k]; }; return transform$$1; } function scaleTranslateRotate(k, dx, dy, alpha) { var cosAlpha = cos(alpha), sinAlpha = sin(alpha), a = cosAlpha * k, b = sinAlpha * k, ai = cosAlpha / k, bi = sinAlpha / k, ci = (sinAlpha * dy - cosAlpha * dx) / k, fi = (sinAlpha * dx + cosAlpha * dy) / k; function transform$$1(x, y) { return [a * x - b * y + dx, dy - b * x - a * y]; } transform$$1.invert = function(x, y) { return [ai * x - bi * y + ci, fi - bi * x - ai * y]; }; return transform$$1; } function projection(project) { return projectionMutator(function() { return project; })(); } function projectionMutator(projectAt) { var project, k = 150, // scale x = 480, y = 250, // translate lambda = 0, phi = 0, // center deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate alpha = 0, // post-rotate theta = null, preclip = clipAntimeridian, // pre-clip angle x0 = null, y0, x1, y1, postclip = identity, // post-clip extent delta2 = 0.5, // precision projectResample, projectTransform, projectRotateTransform, cache, cacheStream; function projection(point) { return projectRotateTransform(point[0] * radians, point[1] * radians); } function invert(point) { point = projectRotateTransform.invert(point[0], point[1]); return point && [point[0] * degrees, point[1] * degrees]; } projection.stream = function(stream) { return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); }; projection.preclip = function(_) { return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; }; projection.postclip = function(_) { return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; }; projection.clipAngle = function(_) { return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees; }; projection.clipExtent = function(_) { return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; }; projection.scale = function(_) { return arguments.length ? (k = +_, recenter()) : k; }; projection.translate = function(_) { return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; }; projection.center = function(_) { return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees]; }; projection.rotate = function(_) { return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees]; }; projection.angle = function(_) { return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees; }; projection.precision = function(_) { return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2); }; projection.fitExtent = function(extent, object) { return fitExtent(projection, extent, object); }; projection.fitSize = function(size, object) { return fitSize(projection, size, object); }; projection.fitWidth = function(width, object) { return fitWidth(projection, width, object); }; projection.fitHeight = function(height, object) { return fitHeight(projection, height, object); }; function recenter() { var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), transform$$1 = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha); rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma); projectTransform = compose(project, transform$$1); projectRotateTransform = compose(rotate, projectTransform); projectResample = resample(projectTransform, delta2); return reset(); } function reset() { cache = cacheStream = null; return projection; } return function() { project = projectAt.apply(this, arguments); projection.invert = project.invert && invert; return recenter(); }; } function conicProjection(projectAt) { var phi0 = 0, phi1 = pi / 3, m = projectionMutator(projectAt), p = m(phi0, phi1); p.parallels = function(_) { return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees]; }; return p; } function cylindricalEqualAreaRaw(phi0) { var cosPhi0 = cos(phi0); function forward(lambda, phi) { return [lambda * cosPhi0, sin(phi) / cosPhi0]; } forward.invert = function(x, y) { return [x / cosPhi0, asin(y * cosPhi0)]; }; return forward; } function conicEqualAreaRaw(y0, y1) { var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2; // Are the parallels symmetrical around the Equator? if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0); var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n; function project(x, y) { var r = sqrt(c - 2 * n * sin(y)) / n; return [r * sin(x *= n), r0 - r * cos(x)]; } project.invert = function(x, y) { var r0y = r0 - y; return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; }; return project; } function conicEqualArea() { return conicProjection(conicEqualAreaRaw) .scale(155.424) .center([0, 33.6442]); } function albers() { return conicEqualArea() .parallels([29.5, 45.5]) .scale(1070) .translate([480, 250]) .rotate([96, 0]) .center([-0.6, 38.7]); } // The projections must have mutually exclusive clip regions on the sphere, // as this will avoid emitting interleaving lines and polygons. function multiplex(streams) { var n = streams.length; return { point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } }; } // A composite projection for the United States, configured by default for // 960×500. The projection also works quite well at 960×600 if you change the // scale to 1285 and adjust the translate accordingly. The set of standard // parallels for each region comes from USGS, which is published here: // http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers function albersUsa() { var cache, cacheStream, lower48 = albers(), lower48Point, alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 point, pointStream = {point: function(x, y) { point = [x, y]; }}; function albersUsa(coordinates) { var x = coordinates[0], y = coordinates[1]; return point = null, (lower48Point.point(x, y), point) || (alaskaPoint.point(x, y), point) || (hawaiiPoint.point(x, y), point); } albersUsa.invert = function(coordinates) { var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k; return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii : lower48).invert(coordinates); }; albersUsa.stream = function(stream) { return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); }; albersUsa.precision = function(_) { if (!arguments.length) return lower48.precision(); lower48.precision(_), alaska.precision(_), hawaii.precision(_); return reset(); }; albersUsa.scale = function(_) { if (!arguments.length) return lower48.scale(); lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); return albersUsa.translate(lower48.translate()); }; albersUsa.translate = function(_) { if (!arguments.length) return lower48.translate(); var k = lower48.scale(), x = +_[0], y = +_[1]; lower48Point = lower48 .translate(_) .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) .stream(pointStream); alaskaPoint = alaska .translate([x - 0.307 * k, y + 0.201 * k]) .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]]) .stream(pointStream); hawaiiPoint = hawaii .translate([x - 0.205 * k, y + 0.212 * k]) .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]]) .stream(pointStream); return reset(); }; albersUsa.fitExtent = function(extent, object) { return fitExtent(albersUsa, extent, object); }; albersUsa.fitSize = function(size, object) { return fitSize(albersUsa, size, object); }; albersUsa.fitWidth = function(width, object) { return fitWidth(albersUsa, width, object); }; albersUsa.fitHeight = function(height, object) { return fitHeight(albersUsa, height, object); }; function reset() { cache = cacheStream = null; return albersUsa; } return albersUsa.scale(1070); } function azimuthalRaw(scale) { return function(x, y) { var cx = cos(x), cy = cos(y), k = scale(cx * cy); return [ k * cy * sin(x), k * sin(y) ]; } } function azimuthalInvert(angle) { return function(x, y) { var z = sqrt(x * x + y * y), c = angle(z), sc = sin(c), cc = cos(c); return [ atan2(x * sc, z * cc), asin(z && y * sc / z) ]; } } var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { return sqrt(2 / (1 + cxcy)); }); azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { return 2 * asin(z / 2); }); function azimuthalEqualArea() { return projection(azimuthalEqualAreaRaw) .scale(124.75) .clipAngle(180 - 1e-3); } var azimuthalEquidistantRaw = azimuthalRaw(function(c) { return (c = acos(c)) && c / sin(c); }); azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { return z; }); function azimuthalEquidistant() { return projection(azimuthalEquidistantRaw) .scale(79.4188) .clipAngle(180 - 1e-3); } function mercatorRaw(lambda, phi) { return [lambda, log(tan((halfPi + phi) / 2))]; } mercatorRaw.invert = function(x, y) { return [x, 2 * atan(exp(y)) - halfPi]; }; function mercator() { return mercatorProjection(mercatorRaw) .scale(961 / tau); } function mercatorProjection(project) { var m = projection(project), center = m.center, scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, x0 = null, y0, x1, y1; // clip extent m.scale = function(_) { return arguments.length ? (scale(_), reclip()) : scale(); }; m.translate = function(_) { return arguments.length ? (translate(_), reclip()) : translate(); }; m.center = function(_) { return arguments.length ? (center(_), reclip()) : center(); }; m.clipExtent = function(_) { return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; }; function reclip() { var k = pi * scale(), t = m(rotation(m.rotate()).invert([0, 0])); return clipExtent(x0 == null ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); } return reclip(); } function tany(y) { return tan((halfPi + y) / 2); } function conicConformalRaw(y0, y1) { var cy0 = cos(y0), n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)), f = cy0 * pow(tany(y0), n) / n; if (!n) return mercatorRaw; function project(x, y) { if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; } else { if (y > halfPi - epsilon) y = halfPi - epsilon; } var r = f / pow(tany(y), n); return [r * sin(n * x), f - r * cos(n * x)]; } project.invert = function(x, y) { var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy); return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi]; }; return project; } function conicConformal() { return conicProjection(conicConformalRaw) .scale(109.5) .parallels([30, 30]); } function equirectangularRaw(lambda, phi) { return [lambda, phi]; } equirectangularRaw.invert = equirectangularRaw; function equirectangular() { return projection(equirectangularRaw) .scale(152.63); } function conicEquidistantRaw(y0, y1) { var cy0 = cos(y0), n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0), g = cy0 / n + y0; if (abs(n) < epsilon) return equirectangularRaw; function project(x, y) { var gy = g - y, nx = n * x; return [gy * sin(nx), g - gy * cos(nx)]; } project.invert = function(x, y) { var gy = g - y; return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)]; }; return project; } function conicEquidistant() { return conicProjection(conicEquidistantRaw) .scale(131.154) .center([0, 13.9389]); } var A1 = 1.340264, A2 = -0.081106, A3 = 0.000893, A4 = 0.003796, M = sqrt(3) / 2, iterations = 12; function equalEarthRaw(lambda, phi) { var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2; return [ lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))), l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) ]; } equalEarthRaw.invert = function(x, y) { var l = y, l2 = l * l, l6 = l2 * l2 * l2; for (var i = 0, delta, fy, fpy; i < iterations; ++i) { fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y; fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2); l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2; if (abs(delta) < epsilon2) break; } return [ M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l), asin(sin(l) / M) ]; }; function equalEarth() { return projection(equalEarthRaw) .scale(177.158); } function gnomonicRaw(x, y) { var cy = cos(y), k = cos(x) * cy; return [cy * sin(x) / k, sin(y) / k]; } gnomonicRaw.invert = azimuthalInvert(atan); function gnomonic() { return projection(gnomonicRaw) .scale(144.049) .clipAngle(60); } function scaleTranslate$1(kx, ky, tx, ty) { return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({ point: function(x, y) { this.stream.point(x * kx + tx, y * ky + ty); } }); } function identity$1() { var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform$$1 = identity, // scale, translate and reflect x0 = null, y0, x1, y1, // clip extent postclip = identity, cache, cacheStream, projection; function reset() { cache = cacheStream = null; return projection; } return projection = { stream: function(stream) { return cache && cacheStream === stream ? cache : cache = transform$$1(postclip(cacheStream = stream)); }, postclip: function(_) { return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; }, clipExtent: function(_) { return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; }, scale: function(_) { return arguments.length ? (transform$$1 = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k; }, translate: function(_) { return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; }, reflectX: function(_) { return arguments.length ? (transform$$1 = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; }, reflectY: function(_) { return arguments.length ? (transform$$1 = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; }, fitExtent: function(extent, object) { return fitExtent(projection, extent, object); }, fitSize: function(size, object) { return fitSize(projection, size, object); }, fitWidth: function(width, object) { return fitWidth(projection, width, object); }, fitHeight: function(height, object) { return fitHeight(projection, height, object); } }; } function naturalEarth1Raw(lambda, phi) { var phi2 = phi * phi, phi4 = phi2 * phi2; return [ lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) ]; } naturalEarth1Raw.invert = function(x, y) { var phi = y, i = 25, delta; do { var phi2 = phi * phi, phi4 = phi2 * phi2; phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); } while (abs(delta) > epsilon && --i > 0); return [ x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), phi ]; }; function naturalEarth1() { return projection(naturalEarth1Raw) .scale(175.295); } function orthographicRaw(x, y) { return [cos(y) * sin(x), sin(y)]; } orthographicRaw.invert = azimuthalInvert(asin); function orthographic() { return projection(orthographicRaw) .scale(249.5) .clipAngle(90 + epsilon); } function stereographicRaw(x, y) { var cy = cos(y), k = 1 + cos(x) * cy; return [cy * sin(x) / k, sin(y) / k]; } stereographicRaw.invert = azimuthalInvert(function(z) { return 2 * atan(z); }); function stereographic() { return projection(stereographicRaw) .scale(250) .clipAngle(142); } function transverseMercatorRaw(lambda, phi) { return [log(tan((halfPi + phi) / 2)), -lambda]; } transverseMercatorRaw.invert = function(x, y) { return [-y, 2 * atan(exp(x)) - halfPi]; }; function transverseMercator() { var m = mercatorProjection(transverseMercatorRaw), center = m.center, rotate = m.rotate; m.center = function(_) { return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); }; m.rotate = function(_) { return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); }; return rotate([0, 0, 90]) .scale(159.155); } exports.geoArea = area; exports.geoBounds = bounds; exports.geoCentroid = centroid; exports.geoCircle = circle; exports.geoClipAntimeridian = clipAntimeridian; exports.geoClipCircle = clipCircle; exports.geoClipExtent = extent; exports.geoClipRectangle = clipRectangle; exports.geoContains = contains; exports.geoDistance = distance; exports.geoGraticule = graticule; exports.geoGraticule10 = graticule10; exports.geoInterpolate = interpolate; exports.geoLength = length; exports.geoPath = index; exports.geoAlbers = albers; exports.geoAlbersUsa = albersUsa; exports.geoAzimuthalEqualArea = azimuthalEqualArea; exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw; exports.geoAzimuthalEquidistant = azimuthalEquidistant; exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw; exports.geoConicConformal = conicConformal; exports.geoConicConformalRaw = conicConformalRaw; exports.geoConicEqualArea = conicEqualArea; exports.geoConicEqualAreaRaw = conicEqualAreaRaw; exports.geoConicEquidistant = conicEquidistant; exports.geoConicEquidistantRaw = conicEquidistantRaw; exports.geoEqualEarth = equalEarth; exports.geoEqualEarthRaw = equalEarthRaw; exports.geoEquirectangular = equirectangular; exports.geoEquirectangularRaw = equirectangularRaw; exports.geoGnomonic = gnomonic; exports.geoGnomonicRaw = gnomonicRaw; exports.geoIdentity = identity$1; exports.geoProjection = projection; exports.geoProjectionMutator = projectionMutator; exports.geoMercator = mercator; exports.geoMercatorRaw = mercatorRaw; exports.geoNaturalEarth1 = naturalEarth1; exports.geoNaturalEarth1Raw = naturalEarth1Raw; exports.geoOrthographic = orthographic; exports.geoOrthographicRaw = orthographicRaw; exports.geoStereographic = stereographic; exports.geoStereographicRaw = stereographicRaw; exports.geoTransverseMercator = transverseMercator; exports.geoTransverseMercatorRaw = transverseMercatorRaw; exports.geoRotation = rotation; exports.geoStream = geoStream; exports.geoTransform = transform; Object.defineProperty(exports, '__esModule', { value: true }); }))); },{"d3-array":193}],195:[function(require,module,exports){ 'use strict'; exports.utils = require('./des/utils'); exports.Cipher = require('./des/cipher'); exports.DES = require('./des/des'); exports.CBC = require('./des/cbc'); exports.EDE = require('./des/ede'); },{"./des/cbc":196,"./des/cipher":197,"./des/des":198,"./des/ede":199,"./des/utils":200}],196:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); var inherits = require('inherits'); var proto = {}; function CBCState(iv) { assert.equal(iv.length, 8, 'Invalid IV length'); this.iv = new Array(8); for (var i = 0; i < this.iv.length; i++) this.iv[i] = iv[i]; } function instantiate(Base) { function CBC(options) { Base.call(this, options); this._cbcInit(); } inherits(CBC, Base); var keys = Object.keys(proto); for (var i = 0; i < keys.length; i++) { var key = keys[i]; CBC.prototype[key] = proto[key]; } CBC.create = function create(options) { return new CBC(options); }; return CBC; } exports.instantiate = instantiate; proto._cbcInit = function _cbcInit() { var state = new CBCState(this.options.iv); this._cbcState = state; }; proto._update = function _update(inp, inOff, out, outOff) { var state = this._cbcState; var superProto = this.constructor.super_.prototype; var iv = state.iv; if (this.type === 'encrypt') { for (var i = 0; i < this.blockSize; i++) iv[i] ^= inp[inOff + i]; superProto._update.call(this, iv, 0, out, outOff); for (var i = 0; i < this.blockSize; i++) iv[i] = out[outOff + i]; } else { superProto._update.call(this, inp, inOff, out, outOff); for (var i = 0; i < this.blockSize; i++) out[outOff + i] ^= iv[i]; for (var i = 0; i < this.blockSize; i++) iv[i] = inp[inOff + i]; } }; },{"inherits":262,"minimalistic-assert":268}],197:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); function Cipher(options) { this.options = options; this.type = this.options.type; this.blockSize = 8; this._init(); this.buffer = new Array(this.blockSize); this.bufferOff = 0; } module.exports = Cipher; Cipher.prototype._init = function _init() { // Might be overrided }; Cipher.prototype.update = function update(data) { if (data.length === 0) return []; if (this.type === 'decrypt') return this._updateDecrypt(data); else return this._updateEncrypt(data); }; Cipher.prototype._buffer = function _buffer(data, off) { // Append data to buffer var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); for (var i = 0; i < min; i++) this.buffer[this.bufferOff + i] = data[off + i]; this.bufferOff += min; // Shift next return min; }; Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { this._update(this.buffer, 0, out, off); this.bufferOff = 0; return this.blockSize; }; Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { var inputOff = 0; var outputOff = 0; var count = ((this.bufferOff + data.length) / this.blockSize) | 0; var out = new Array(count * this.blockSize); if (this.bufferOff !== 0) { inputOff += this._buffer(data, inputOff); if (this.bufferOff === this.buffer.length) outputOff += this._flushBuffer(out, outputOff); } // Write blocks var max = data.length - ((data.length - inputOff) % this.blockSize); for (; inputOff < max; inputOff += this.blockSize) { this._update(data, inputOff, out, outputOff); outputOff += this.blockSize; } // Queue rest for (; inputOff < data.length; inputOff++, this.bufferOff++) this.buffer[this.bufferOff] = data[inputOff]; return out; }; Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { var inputOff = 0; var outputOff = 0; var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; var out = new Array(count * this.blockSize); // TODO(indutny): optimize it, this is far from optimal for (; count > 0; count--) { inputOff += this._buffer(data, inputOff); outputOff += this._flushBuffer(out, outputOff); } // Buffer rest of the input inputOff += this._buffer(data, inputOff); return out; }; Cipher.prototype.final = function final(buffer) { var first; if (buffer) first = this.update(buffer); var last; if (this.type === 'encrypt') last = this._finalEncrypt(); else last = this._finalDecrypt(); if (first) return first.concat(last); else return last; }; Cipher.prototype._pad = function _pad(buffer, off) { if (off === 0) return false; while (off < buffer.length) buffer[off++] = 0; return true; }; Cipher.prototype._finalEncrypt = function _finalEncrypt() { if (!this._pad(this.buffer, this.bufferOff)) return []; var out = new Array(this.blockSize); this._update(this.buffer, 0, out, 0); return out; }; Cipher.prototype._unpad = function _unpad(buffer) { return buffer; }; Cipher.prototype._finalDecrypt = function _finalDecrypt() { assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); var out = new Array(this.blockSize); this._flushBuffer(out, 0); return this._unpad(out); }; },{"minimalistic-assert":268}],198:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); var inherits = require('inherits'); var des = require('../des'); var utils = des.utils; var Cipher = des.Cipher; function DESState() { this.tmp = new Array(2); this.keys = null; } function DES(options) { Cipher.call(this, options); var state = new DESState(); this._desState = state; this.deriveKeys(state, options.key); } inherits(DES, Cipher); module.exports = DES; DES.create = function create(options) { return new DES(options); }; var shiftTable = [ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 ]; DES.prototype.deriveKeys = function deriveKeys(state, key) { state.keys = new Array(16 * 2); assert.equal(key.length, this.blockSize, 'Invalid key length'); var kL = utils.readUInt32BE(key, 0); var kR = utils.readUInt32BE(key, 4); utils.pc1(kL, kR, state.tmp, 0); kL = state.tmp[0]; kR = state.tmp[1]; for (var i = 0; i < state.keys.length; i += 2) { var shift = shiftTable[i >>> 1]; kL = utils.r28shl(kL, shift); kR = utils.r28shl(kR, shift); utils.pc2(kL, kR, state.keys, i); } }; DES.prototype._update = function _update(inp, inOff, out, outOff) { var state = this._desState; var l = utils.readUInt32BE(inp, inOff); var r = utils.readUInt32BE(inp, inOff + 4); // Initial Permutation utils.ip(l, r, state.tmp, 0); l = state.tmp[0]; r = state.tmp[1]; if (this.type === 'encrypt') this._encrypt(state, l, r, state.tmp, 0); else this._decrypt(state, l, r, state.tmp, 0); l = state.tmp[0]; r = state.tmp[1]; utils.writeUInt32BE(out, l, outOff); utils.writeUInt32BE(out, r, outOff + 4); }; DES.prototype._pad = function _pad(buffer, off) { var value = buffer.length - off; for (var i = off; i < buffer.length; i++) buffer[i] = value; return true; }; DES.prototype._unpad = function _unpad(buffer) { var pad = buffer[buffer.length - 1]; for (var i = buffer.length - pad; i < buffer.length; i++) assert.equal(buffer[i], pad); return buffer.slice(0, buffer.length - pad); }; DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { var l = lStart; var r = rStart; // Apply f() x16 times for (var i = 0; i < state.keys.length; i += 2) { var keyL = state.keys[i]; var keyR = state.keys[i + 1]; // f(r, k) utils.expand(r, state.tmp, 0); keyL ^= state.tmp[0]; keyR ^= state.tmp[1]; var s = utils.substitute(keyL, keyR); var f = utils.permute(s); var t = r; r = (l ^ f) >>> 0; l = t; } // Reverse Initial Permutation utils.rip(r, l, out, off); }; DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { var l = rStart; var r = lStart; // Apply f() x16 times for (var i = state.keys.length - 2; i >= 0; i -= 2) { var keyL = state.keys[i]; var keyR = state.keys[i + 1]; // f(r, k) utils.expand(l, state.tmp, 0); keyL ^= state.tmp[0]; keyR ^= state.tmp[1]; var s = utils.substitute(keyL, keyR); var f = utils.permute(s); var t = l; l = (r ^ f) >>> 0; r = t; } // Reverse Initial Permutation utils.rip(l, r, out, off); }; },{"../des":195,"inherits":262,"minimalistic-assert":268}],199:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); var inherits = require('inherits'); var des = require('../des'); var Cipher = des.Cipher; var DES = des.DES; function EDEState(type, key) { assert.equal(key.length, 24, 'Invalid key length'); var k1 = key.slice(0, 8); var k2 = key.slice(8, 16); var k3 = key.slice(16, 24); if (type === 'encrypt') { this.ciphers = [ DES.create({ type: 'encrypt', key: k1 }), DES.create({ type: 'decrypt', key: k2 }), DES.create({ type: 'encrypt', key: k3 }) ]; } else { this.ciphers = [ DES.create({ type: 'decrypt', key: k3 }), DES.create({ type: 'encrypt', key: k2 }), DES.create({ type: 'decrypt', key: k1 }) ]; } } function EDE(options) { Cipher.call(this, options); var state = new EDEState(this.type, this.options.key); this._edeState = state; } inherits(EDE, Cipher); module.exports = EDE; EDE.create = function create(options) { return new EDE(options); }; EDE.prototype._update = function _update(inp, inOff, out, outOff) { var state = this._edeState; state.ciphers[0]._update(inp, inOff, out, outOff); state.ciphers[1]._update(out, outOff, out, outOff); state.ciphers[2]._update(out, outOff, out, outOff); }; EDE.prototype._pad = DES.prototype._pad; EDE.prototype._unpad = DES.prototype._unpad; },{"../des":195,"inherits":262,"minimalistic-assert":268}],200:[function(require,module,exports){ 'use strict'; exports.readUInt32BE = function readUInt32BE(bytes, off) { var res = (bytes[0 + off] << 24) | (bytes[1 + off] << 16) | (bytes[2 + off] << 8) | bytes[3 + off]; return res >>> 0; }; exports.writeUInt32BE = function writeUInt32BE(bytes, value, off) { bytes[0 + off] = value >>> 24; bytes[1 + off] = (value >>> 16) & 0xff; bytes[2 + off] = (value >>> 8) & 0xff; bytes[3 + off] = value & 0xff; }; exports.ip = function ip(inL, inR, out, off) { var outL = 0; var outR = 0; for (var i = 6; i >= 0; i -= 2) { for (var j = 0; j <= 24; j += 8) { outL <<= 1; outL |= (inR >>> (j + i)) & 1; } for (var j = 0; j <= 24; j += 8) { outL <<= 1; outL |= (inL >>> (j + i)) & 1; } } for (var i = 6; i >= 0; i -= 2) { for (var j = 1; j <= 25; j += 8) { outR <<= 1; outR |= (inR >>> (j + i)) & 1; } for (var j = 1; j <= 25; j += 8) { outR <<= 1; outR |= (inL >>> (j + i)) & 1; } } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.rip = function rip(inL, inR, out, off) { var outL = 0; var outR = 0; for (var i = 0; i < 4; i++) { for (var j = 24; j >= 0; j -= 8) { outL <<= 1; outL |= (inR >>> (j + i)) & 1; outL <<= 1; outL |= (inL >>> (j + i)) & 1; } } for (var i = 4; i < 8; i++) { for (var j = 24; j >= 0; j -= 8) { outR <<= 1; outR |= (inR >>> (j + i)) & 1; outR <<= 1; outR |= (inL >>> (j + i)) & 1; } } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.pc1 = function pc1(inL, inR, out, off) { var outL = 0; var outR = 0; // 7, 15, 23, 31, 39, 47, 55, 63 // 6, 14, 22, 30, 39, 47, 55, 63 // 5, 13, 21, 29, 39, 47, 55, 63 // 4, 12, 20, 28 for (var i = 7; i >= 5; i--) { for (var j = 0; j <= 24; j += 8) { outL <<= 1; outL |= (inR >> (j + i)) & 1; } for (var j = 0; j <= 24; j += 8) { outL <<= 1; outL |= (inL >> (j + i)) & 1; } } for (var j = 0; j <= 24; j += 8) { outL <<= 1; outL |= (inR >> (j + i)) & 1; } // 1, 9, 17, 25, 33, 41, 49, 57 // 2, 10, 18, 26, 34, 42, 50, 58 // 3, 11, 19, 27, 35, 43, 51, 59 // 36, 44, 52, 60 for (var i = 1; i <= 3; i++) { for (var j = 0; j <= 24; j += 8) { outR <<= 1; outR |= (inR >> (j + i)) & 1; } for (var j = 0; j <= 24; j += 8) { outR <<= 1; outR |= (inL >> (j + i)) & 1; } } for (var j = 0; j <= 24; j += 8) { outR <<= 1; outR |= (inL >> (j + i)) & 1; } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.r28shl = function r28shl(num, shift) { return ((num << shift) & 0xfffffff) | (num >>> (28 - shift)); }; var pc2table = [ // inL => outL 14, 11, 17, 4, 27, 23, 25, 0, 13, 22, 7, 18, 5, 9, 16, 24, 2, 20, 12, 21, 1, 8, 15, 26, // inR => outR 15, 4, 25, 19, 9, 1, 26, 16, 5, 11, 23, 8, 12, 7, 17, 0, 22, 3, 10, 14, 6, 20, 27, 24 ]; exports.pc2 = function pc2(inL, inR, out, off) { var outL = 0; var outR = 0; var len = pc2table.length >>> 1; for (var i = 0; i < len; i++) { outL <<= 1; outL |= (inL >>> pc2table[i]) & 0x1; } for (var i = len; i < pc2table.length; i++) { outR <<= 1; outR |= (inR >>> pc2table[i]) & 0x1; } out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; exports.expand = function expand(r, out, off) { var outL = 0; var outR = 0; outL = ((r & 1) << 5) | (r >>> 27); for (var i = 23; i >= 15; i -= 4) { outL <<= 6; outL |= (r >>> i) & 0x3f; } for (var i = 11; i >= 3; i -= 4) { outR |= (r >>> i) & 0x3f; outR <<= 6; } outR |= ((r & 0x1f) << 1) | (r >>> 31); out[off + 0] = outL >>> 0; out[off + 1] = outR >>> 0; }; var sTable = [ 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11 ]; exports.substitute = function substitute(inL, inR) { var out = 0; for (var i = 0; i < 4; i++) { var b = (inL >>> (18 - i * 6)) & 0x3f; var sb = sTable[i * 0x40 + b]; out <<= 4; out |= sb; } for (var i = 0; i < 4; i++) { var b = (inR >>> (18 - i * 6)) & 0x3f; var sb = sTable[4 * 0x40 + i * 0x40 + b]; out <<= 4; out |= sb; } return out >>> 0; }; var permuteTable = [ 16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7 ]; exports.permute = function permute(num) { var out = 0; for (var i = 0; i < permuteTable.length; i++) { out <<= 1; out |= (num >>> permuteTable[i]) & 0x1; } return out >>> 0; }; exports.padSplit = function padSplit(num, size, group) { var str = num.toString(2); while (str.length < size) str = '0' + str; var out = []; for (var i = 0; i < size; i += group) out.push(str.slice(i, i + group)); return out.join(' '); }; },{}],201:[function(require,module,exports){ (function (Buffer){ var generatePrime = require('./lib/generatePrime') var primes = require('./lib/primes.json') var DH = require('./lib/dh') function getDiffieHellman (mod) { var prime = new Buffer(primes[mod].prime, 'hex') var gen = new Buffer(primes[mod].gen, 'hex') return new DH(prime, gen) } var ENCODINGS = { 'binary': true, 'hex': true, 'base64': true } function createDiffieHellman (prime, enc, generator, genc) { if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) { return createDiffieHellman(prime, 'binary', enc, generator) } enc = enc || 'binary' genc = genc || 'binary' generator = generator || new Buffer([2]) if (!Buffer.isBuffer(generator)) { generator = new Buffer(generator, genc) } if (typeof prime === 'number') { return new DH(generatePrime(prime, generator), generator, true) } if (!Buffer.isBuffer(prime)) { prime = new Buffer(prime, enc) } return new DH(prime, generator, true) } exports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman exports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman }).call(this,require("buffer").Buffer) },{"./lib/dh":202,"./lib/generatePrime":203,"./lib/primes.json":204,"buffer":182}],202:[function(require,module,exports){ (function (Buffer){ var BN = require('bn.js'); var MillerRabin = require('miller-rabin'); var millerRabin = new MillerRabin(); var TWENTYFOUR = new BN(24); var ELEVEN = new BN(11); var TEN = new BN(10); var THREE = new BN(3); var SEVEN = new BN(7); var primes = require('./generatePrime'); var randomBytes = require('randombytes'); module.exports = DH; function setPublicKey(pub, enc) { enc = enc || 'utf8'; if (!Buffer.isBuffer(pub)) { pub = new Buffer(pub, enc); } this._pub = new BN(pub); return this; } function setPrivateKey(priv, enc) { enc = enc || 'utf8'; if (!Buffer.isBuffer(priv)) { priv = new Buffer(priv, enc); } this._priv = new BN(priv); return this; } var primeCache = {}; function checkPrime(prime, generator) { var gen = generator.toString('hex'); var hex = [gen, prime.toString(16)].join('_'); if (hex in primeCache) { return primeCache[hex]; } var error = 0; if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) { //not a prime so +1 error += 1; if (gen === '02' || gen === '05') { // we'd be able to check the generator // it would fail so +8 error += 8; } else { //we wouldn't be able to test the generator // so +4 error += 4; } primeCache[hex] = error; return error; } if (!millerRabin.test(prime.shrn(1))) { //not a safe prime error += 2; } var rem; switch (gen) { case '02': if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) { // unsuidable generator error += 8; } break; case '05': rem = prime.mod(TEN); if (rem.cmp(THREE) && rem.cmp(SEVEN)) { // prime mod 10 needs to equal 3 or 7 error += 8; } break; default: error += 4; } primeCache[hex] = error; return error; } function DH(prime, generator, malleable) { this.setGenerator(generator); this.__prime = new BN(prime); this._prime = BN.mont(this.__prime); this._primeLen = prime.length; this._pub = undefined; this._priv = undefined; this._primeCode = undefined; if (malleable) { this.setPublicKey = setPublicKey; this.setPrivateKey = setPrivateKey; } else { this._primeCode = 8; } } Object.defineProperty(DH.prototype, 'verifyError', { enumerable: true, get: function () { if (typeof this._primeCode !== 'number') { this._primeCode = checkPrime(this.__prime, this.__gen); } return this._primeCode; } }); DH.prototype.generateKeys = function () { if (!this._priv) { this._priv = new BN(randomBytes(this._primeLen)); } this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed(); return this.getPublicKey(); }; DH.prototype.computeSecret = function (other) { other = new BN(other); other = other.toRed(this._prime); var secret = other.redPow(this._priv).fromRed(); var out = new Buffer(secret.toArray()); var prime = this.getPrime(); if (out.length < prime.length) { var front = new Buffer(prime.length - out.length); front.fill(0); out = Buffer.concat([front, out]); } return out; }; DH.prototype.getPublicKey = function getPublicKey(enc) { return formatReturnValue(this._pub, enc); }; DH.prototype.getPrivateKey = function getPrivateKey(enc) { return formatReturnValue(this._priv, enc); }; DH.prototype.getPrime = function (enc) { return formatReturnValue(this.__prime, enc); }; DH.prototype.getGenerator = function (enc) { return formatReturnValue(this._gen, enc); }; DH.prototype.setGenerator = function (gen, enc) { enc = enc || 'utf8'; if (!Buffer.isBuffer(gen)) { gen = new Buffer(gen, enc); } this.__gen = gen; this._gen = new BN(gen); return this; }; function formatReturnValue(bn, enc) { var buf = new Buffer(bn.toArray()); if (!enc) { return buf; } else { return buf.toString(enc); } } }).call(this,require("buffer").Buffer) },{"./generatePrime":203,"bn.js":147,"buffer":182,"miller-rabin":267,"randombytes":298}],203:[function(require,module,exports){ var randomBytes = require('randombytes'); module.exports = findPrime; findPrime.simpleSieve = simpleSieve; findPrime.fermatTest = fermatTest; var BN = require('bn.js'); var TWENTYFOUR = new BN(24); var MillerRabin = require('miller-rabin'); var millerRabin = new MillerRabin(); var ONE = new BN(1); var TWO = new BN(2); var FIVE = new BN(5); var SIXTEEN = new BN(16); var EIGHT = new BN(8); var TEN = new BN(10); var THREE = new BN(3); var SEVEN = new BN(7); var ELEVEN = new BN(11); var FOUR = new BN(4); var TWELVE = new BN(12); var primes = null; function _getPrimes() { if (primes !== null) return primes; var limit = 0x100000; var res = []; res[0] = 2; for (var i = 1, k = 3; k < limit; k += 2) { var sqrt = Math.ceil(Math.sqrt(k)); for (var j = 0; j < i && res[j] <= sqrt; j++) if (k % res[j] === 0) break; if (i !== j && res[j] <= sqrt) continue; res[i++] = k; } primes = res; return res; } function simpleSieve(p) { var primes = _getPrimes(); for (var i = 0; i < primes.length; i++) if (p.modn(primes[i]) === 0) { if (p.cmpn(primes[i]) === 0) { return true; } else { return false; } } return true; } function fermatTest(p) { var red = BN.mont(p); return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0; } function findPrime(bits, gen) { if (bits < 16) { // this is what openssl does if (gen === 2 || gen === 5) { return new BN([0x8c, 0x7b]); } else { return new BN([0x8c, 0x27]); } } gen = new BN(gen); var num, n2; while (true) { num = new BN(randomBytes(Math.ceil(bits / 8))); while (num.bitLength() > bits) { num.ishrn(1); } if (num.isEven()) { num.iadd(ONE); } if (!num.testn(1)) { num.iadd(TWO); } if (!gen.cmp(TWO)) { while (num.mod(TWENTYFOUR).cmp(ELEVEN)) { num.iadd(FOUR); } } else if (!gen.cmp(FIVE)) { while (num.mod(TEN).cmp(THREE)) { num.iadd(FOUR); } } n2 = num.shrn(1); if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) { return num; } } } },{"bn.js":147,"miller-rabin":267,"randombytes":298}],204:[function(require,module,exports){ module.exports={ "modp1": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff" }, "modp2": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff" }, "modp5": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff" }, "modp14": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff" }, "modp15": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff" }, "modp16": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff" }, "modp17": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff" }, "modp18": { "gen": "02", "prime": "ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff" } } },{}],205:[function(require,module,exports){ 'use strict'; var elliptic = exports; elliptic.version = require('../package.json').version; elliptic.utils = require('./elliptic/utils'); elliptic.rand = require('brorand'); elliptic.curve = require('./elliptic/curve'); elliptic.curves = require('./elliptic/curves'); // Protocols elliptic.ec = require('./elliptic/ec'); elliptic.eddsa = require('./elliptic/eddsa'); },{"../package.json":220,"./elliptic/curve":208,"./elliptic/curves":211,"./elliptic/ec":212,"./elliptic/eddsa":215,"./elliptic/utils":219,"brorand":148}],206:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var utils = require('../utils'); var getNAF = utils.getNAF; var getJSF = utils.getJSF; var assert = utils.assert; function BaseCurve(type, conf) { this.type = type; this.p = new BN(conf.p, 16); // Use Montgomery, when there is no fast reduction for the prime this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); // Useful for many curves this.zero = new BN(0).toRed(this.red); this.one = new BN(1).toRed(this.red); this.two = new BN(2).toRed(this.red); // Curve configuration, optional this.n = conf.n && new BN(conf.n, 16); this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); // Temporary arrays this._wnafT1 = new Array(4); this._wnafT2 = new Array(4); this._wnafT3 = new Array(4); this._wnafT4 = new Array(4); // Generalized Greg Maxwell's trick var adjustCount = this.n && this.p.div(this.n); if (!adjustCount || adjustCount.cmpn(100) > 0) { this.redN = null; } else { this._maxwellTrick = true; this.redN = this.n.toRed(this.red); } } module.exports = BaseCurve; BaseCurve.prototype.point = function point() { throw new Error('Not implemented'); }; BaseCurve.prototype.validate = function validate() { throw new Error('Not implemented'); }; BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) { assert(p.precomputed); var doubles = p._getDoubles(); var naf = getNAF(k, 1); var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1); I /= 3; // Translate into more windowed form var repr = []; for (var j = 0; j < naf.length; j += doubles.step) { var nafW = 0; for (var k = j + doubles.step - 1; k >= j; k--) nafW = (nafW << 1) + naf[k]; repr.push(nafW); } var a = this.jpoint(null, null, null); var b = this.jpoint(null, null, null); for (var i = I; i > 0; i--) { for (var j = 0; j < repr.length; j++) { var nafW = repr[j]; if (nafW === i) b = b.mixedAdd(doubles.points[j]); else if (nafW === -i) b = b.mixedAdd(doubles.points[j].neg()); } a = a.add(b); } return a.toP(); }; BaseCurve.prototype._wnafMul = function _wnafMul(p, k) { var w = 4; // Precompute window var nafPoints = p._getNAFPoints(w); w = nafPoints.wnd; var wnd = nafPoints.points; // Get NAF form var naf = getNAF(k, w); // Add `this`*(N+1) for every w-NAF index var acc = this.jpoint(null, null, null); for (var i = naf.length - 1; i >= 0; i--) { // Count zeroes for (var k = 0; i >= 0 && naf[i] === 0; i--) k++; if (i >= 0) k++; acc = acc.dblp(k); if (i < 0) break; var z = naf[i]; assert(z !== 0); if (p.type === 'affine') { // J +- P if (z > 0) acc = acc.mixedAdd(wnd[(z - 1) >> 1]); else acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg()); } else { // J +- J if (z > 0) acc = acc.add(wnd[(z - 1) >> 1]); else acc = acc.add(wnd[(-z - 1) >> 1].neg()); } } return p.type === 'affine' ? acc.toP() : acc; }; BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) { var wndWidth = this._wnafT1; var wnd = this._wnafT2; var naf = this._wnafT3; // Fill all arrays var max = 0; for (var i = 0; i < len; i++) { var p = points[i]; var nafPoints = p._getNAFPoints(defW); wndWidth[i] = nafPoints.wnd; wnd[i] = nafPoints.points; } // Comb small window NAFs for (var i = len - 1; i >= 1; i -= 2) { var a = i - 1; var b = i; if (wndWidth[a] !== 1 || wndWidth[b] !== 1) { naf[a] = getNAF(coeffs[a], wndWidth[a]); naf[b] = getNAF(coeffs[b], wndWidth[b]); max = Math.max(naf[a].length, max); max = Math.max(naf[b].length, max); continue; } var comb = [ points[a], /* 1 */ null, /* 3 */ null, /* 5 */ points[b] /* 7 */ ]; // Try to avoid Projective points, if possible if (points[a].y.cmp(points[b].y) === 0) { comb[1] = points[a].add(points[b]); comb[2] = points[a].toJ().mixedAdd(points[b].neg()); } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) { comb[1] = points[a].toJ().mixedAdd(points[b]); comb[2] = points[a].add(points[b].neg()); } else { comb[1] = points[a].toJ().mixedAdd(points[b]); comb[2] = points[a].toJ().mixedAdd(points[b].neg()); } var index = [ -3, /* -1 -1 */ -1, /* -1 0 */ -5, /* -1 1 */ -7, /* 0 -1 */ 0, /* 0 0 */ 7, /* 0 1 */ 5, /* 1 -1 */ 1, /* 1 0 */ 3 /* 1 1 */ ]; var jsf = getJSF(coeffs[a], coeffs[b]); max = Math.max(jsf[0].length, max); naf[a] = new Array(max); naf[b] = new Array(max); for (var j = 0; j < max; j++) { var ja = jsf[0][j] | 0; var jb = jsf[1][j] | 0; naf[a][j] = index[(ja + 1) * 3 + (jb + 1)]; naf[b][j] = 0; wnd[a] = comb; } } var acc = this.jpoint(null, null, null); var tmp = this._wnafT4; for (var i = max; i >= 0; i--) { var k = 0; while (i >= 0) { var zero = true; for (var j = 0; j < len; j++) { tmp[j] = naf[j][i] | 0; if (tmp[j] !== 0) zero = false; } if (!zero) break; k++; i--; } if (i >= 0) k++; acc = acc.dblp(k); if (i < 0) break; for (var j = 0; j < len; j++) { var z = tmp[j]; var p; if (z === 0) continue; else if (z > 0) p = wnd[j][(z - 1) >> 1]; else if (z < 0) p = wnd[j][(-z - 1) >> 1].neg(); if (p.type === 'affine') acc = acc.mixedAdd(p); else acc = acc.add(p); } } // Zeroify references for (var i = 0; i < len; i++) wnd[i] = null; if (jacobianResult) return acc; else return acc.toP(); }; function BasePoint(curve, type) { this.curve = curve; this.type = type; this.precomputed = null; } BaseCurve.BasePoint = BasePoint; BasePoint.prototype.eq = function eq(/*other*/) { throw new Error('Not implemented'); }; BasePoint.prototype.validate = function validate() { return this.curve.validate(this); }; BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) { bytes = utils.toArray(bytes, enc); var len = this.p.byteLength(); // uncompressed, hybrid-odd, hybrid-even if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && bytes.length - 1 === 2 * len) { if (bytes[0] === 0x06) assert(bytes[bytes.length - 1] % 2 === 0); else if (bytes[0] === 0x07) assert(bytes[bytes.length - 1] % 2 === 1); var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len)); return res; } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && bytes.length - 1 === len) { return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03); } throw new Error('Unknown point format'); }; BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) { return this.encode(enc, true); }; BasePoint.prototype._encode = function _encode(compact) { var len = this.curve.p.byteLength(); var x = this.getX().toArray('be', len); if (compact) return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x); return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ; }; BasePoint.prototype.encode = function encode(enc, compact) { return utils.encode(this._encode(compact), enc); }; BasePoint.prototype.precompute = function precompute(power) { if (this.precomputed) return this; var precomputed = { doubles: null, naf: null, beta: null }; precomputed.naf = this._getNAFPoints(8); precomputed.doubles = this._getDoubles(4, power); precomputed.beta = this._getBeta(); this.precomputed = precomputed; return this; }; BasePoint.prototype._hasDoubles = function _hasDoubles(k) { if (!this.precomputed) return false; var doubles = this.precomputed.doubles; if (!doubles) return false; return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step); }; BasePoint.prototype._getDoubles = function _getDoubles(step, power) { if (this.precomputed && this.precomputed.doubles) return this.precomputed.doubles; var doubles = [ this ]; var acc = this; for (var i = 0; i < power; i += step) { for (var j = 0; j < step; j++) acc = acc.dbl(); doubles.push(acc); } return { step: step, points: doubles }; }; BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) { if (this.precomputed && this.precomputed.naf) return this.precomputed.naf; var res = [ this ]; var max = (1 << wnd) - 1; var dbl = max === 1 ? null : this.dbl(); for (var i = 1; i < max; i++) res[i] = res[i - 1].add(dbl); return { wnd: wnd, points: res }; }; BasePoint.prototype._getBeta = function _getBeta() { return null; }; BasePoint.prototype.dblp = function dblp(k) { var r = this; for (var i = 0; i < k; i++) r = r.dbl(); return r; }; },{"../utils":219,"bn.js":147}],207:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var BN = require('bn.js'); var inherits = require('inherits'); var Base = require('./base'); var assert = utils.assert; function EdwardsCurve(conf) { // NOTE: Important as we are creating point in Base.call() this.twisted = (conf.a | 0) !== 1; this.mOneA = this.twisted && (conf.a | 0) === -1; this.extended = this.mOneA; Base.call(this, 'edwards', conf); this.a = new BN(conf.a, 16).umod(this.red.m); this.a = this.a.toRed(this.red); this.c = new BN(conf.c, 16).toRed(this.red); this.c2 = this.c.redSqr(); this.d = new BN(conf.d, 16).toRed(this.red); this.dd = this.d.redAdd(this.d); assert(!this.twisted || this.c.fromRed().cmpn(1) === 0); this.oneC = (conf.c | 0) === 1; } inherits(EdwardsCurve, Base); module.exports = EdwardsCurve; EdwardsCurve.prototype._mulA = function _mulA(num) { if (this.mOneA) return num.redNeg(); else return this.a.redMul(num); }; EdwardsCurve.prototype._mulC = function _mulC(num) { if (this.oneC) return num; else return this.c.redMul(num); }; // Just for compatibility with Short curve EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) { return this.point(x, y, z, t); }; EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) { x = new BN(x, 16); if (!x.red) x = x.toRed(this.red); var x2 = x.redSqr(); var rhs = this.c2.redSub(this.a.redMul(x2)); var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2)); var y2 = rhs.redMul(lhs.redInvm()); var y = y2.redSqrt(); if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); var isOdd = y.fromRed().isOdd(); if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); return this.point(x, y); }; EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) { y = new BN(y, 16); if (!y.red) y = y.toRed(this.red); // x^2 = (y^2 - c^2) / (c^2 d y^2 - a) var y2 = y.redSqr(); var lhs = y2.redSub(this.c2); var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a); var x2 = lhs.redMul(rhs.redInvm()); if (x2.cmp(this.zero) === 0) { if (odd) throw new Error('invalid point'); else return this.point(this.zero, y); } var x = x2.redSqrt(); if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) throw new Error('invalid point'); if (x.fromRed().isOdd() !== odd) x = x.redNeg(); return this.point(x, y); }; EdwardsCurve.prototype.validate = function validate(point) { if (point.isInfinity()) return true; // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2) point.normalize(); var x2 = point.x.redSqr(); var y2 = point.y.redSqr(); var lhs = x2.redMul(this.a).redAdd(y2); var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2))); return lhs.cmp(rhs) === 0; }; function Point(curve, x, y, z, t) { Base.BasePoint.call(this, curve, 'projective'); if (x === null && y === null && z === null) { this.x = this.curve.zero; this.y = this.curve.one; this.z = this.curve.one; this.t = this.curve.zero; this.zOne = true; } else { this.x = new BN(x, 16); this.y = new BN(y, 16); this.z = z ? new BN(z, 16) : this.curve.one; this.t = t && new BN(t, 16); if (!this.x.red) this.x = this.x.toRed(this.curve.red); if (!this.y.red) this.y = this.y.toRed(this.curve.red); if (!this.z.red) this.z = this.z.toRed(this.curve.red); if (this.t && !this.t.red) this.t = this.t.toRed(this.curve.red); this.zOne = this.z === this.curve.one; // Use extended coordinates if (this.curve.extended && !this.t) { this.t = this.x.redMul(this.y); if (!this.zOne) this.t = this.t.redMul(this.z.redInvm()); } } } inherits(Point, Base.BasePoint); EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) { return Point.fromJSON(this, obj); }; EdwardsCurve.prototype.point = function point(x, y, z, t) { return new Point(this, x, y, z, t); }; Point.fromJSON = function fromJSON(curve, obj) { return new Point(curve, obj[0], obj[1], obj[2]); }; Point.prototype.inspect = function inspect() { if (this.isInfinity()) return ''; return ''; }; Point.prototype.isInfinity = function isInfinity() { // XXX This code assumes that zero is always zero in red return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || (this.zOne && this.y.cmp(this.curve.c) === 0)); }; Point.prototype._extDbl = function _extDbl() { // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html // #doubling-dbl-2008-hwcd // 4M + 4S // A = X1^2 var a = this.x.redSqr(); // B = Y1^2 var b = this.y.redSqr(); // C = 2 * Z1^2 var c = this.z.redSqr(); c = c.redIAdd(c); // D = a * A var d = this.curve._mulA(a); // E = (X1 + Y1)^2 - A - B var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); // G = D + B var g = d.redAdd(b); // F = G - C var f = g.redSub(c); // H = D - B var h = d.redSub(b); // X3 = E * F var nx = e.redMul(f); // Y3 = G * H var ny = g.redMul(h); // T3 = E * H var nt = e.redMul(h); // Z3 = F * G var nz = f.redMul(g); return this.curve.point(nx, ny, nz, nt); }; Point.prototype._projDbl = function _projDbl() { // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html // #doubling-dbl-2008-bbjlp // #doubling-dbl-2007-bl // and others // Generally 3M + 4S or 2M + 4S // B = (X1 + Y1)^2 var b = this.x.redAdd(this.y).redSqr(); // C = X1^2 var c = this.x.redSqr(); // D = Y1^2 var d = this.y.redSqr(); var nx; var ny; var nz; if (this.curve.twisted) { // E = a * C var e = this.curve._mulA(c); // F = E + D var f = e.redAdd(d); if (this.zOne) { // X3 = (B - C - D) * (F - 2) nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); // Y3 = F * (E - D) ny = f.redMul(e.redSub(d)); // Z3 = F^2 - 2 * F nz = f.redSqr().redSub(f).redSub(f); } else { // H = Z1^2 var h = this.z.redSqr(); // J = F - 2 * H var j = f.redSub(h).redISub(h); // X3 = (B-C-D)*J nx = b.redSub(c).redISub(d).redMul(j); // Y3 = F * (E - D) ny = f.redMul(e.redSub(d)); // Z3 = F * J nz = f.redMul(j); } } else { // E = C + D var e = c.redAdd(d); // H = (c * Z1)^2 var h = this.curve._mulC(this.z).redSqr(); // J = E - 2 * H var j = e.redSub(h).redSub(h); // X3 = c * (B - E) * J nx = this.curve._mulC(b.redISub(e)).redMul(j); // Y3 = c * E * (C - D) ny = this.curve._mulC(e).redMul(c.redISub(d)); // Z3 = E * J nz = e.redMul(j); } return this.curve.point(nx, ny, nz); }; Point.prototype.dbl = function dbl() { if (this.isInfinity()) return this; // Double in extended coordinates if (this.curve.extended) return this._extDbl(); else return this._projDbl(); }; Point.prototype._extAdd = function _extAdd(p) { // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html // #addition-add-2008-hwcd-3 // 8M // A = (Y1 - X1) * (Y2 - X2) var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); // B = (Y1 + X1) * (Y2 + X2) var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); // C = T1 * k * T2 var c = this.t.redMul(this.curve.dd).redMul(p.t); // D = Z1 * 2 * Z2 var d = this.z.redMul(p.z.redAdd(p.z)); // E = B - A var e = b.redSub(a); // F = D - C var f = d.redSub(c); // G = D + C var g = d.redAdd(c); // H = B + A var h = b.redAdd(a); // X3 = E * F var nx = e.redMul(f); // Y3 = G * H var ny = g.redMul(h); // T3 = E * H var nt = e.redMul(h); // Z3 = F * G var nz = f.redMul(g); return this.curve.point(nx, ny, nz, nt); }; Point.prototype._projAdd = function _projAdd(p) { // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html // #addition-add-2008-bbjlp // #addition-add-2007-bl // 10M + 1S // A = Z1 * Z2 var a = this.z.redMul(p.z); // B = A^2 var b = a.redSqr(); // C = X1 * X2 var c = this.x.redMul(p.x); // D = Y1 * Y2 var d = this.y.redMul(p.y); // E = d * C * D var e = this.curve.d.redMul(c).redMul(d); // F = B - E var f = b.redSub(e); // G = B + E var g = b.redAdd(e); // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D) var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d); var nx = a.redMul(f).redMul(tmp); var ny; var nz; if (this.curve.twisted) { // Y3 = A * G * (D - a * C) ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); // Z3 = F * G nz = f.redMul(g); } else { // Y3 = A * G * (D - C) ny = a.redMul(g).redMul(d.redSub(c)); // Z3 = c * F * G nz = this.curve._mulC(f).redMul(g); } return this.curve.point(nx, ny, nz); }; Point.prototype.add = function add(p) { if (this.isInfinity()) return p; if (p.isInfinity()) return this; if (this.curve.extended) return this._extAdd(p); else return this._projAdd(p); }; Point.prototype.mul = function mul(k) { if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k); else return this.curve._wnafMul(this, k); }; Point.prototype.mulAdd = function mulAdd(k1, p, k2) { return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false); }; Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) { return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true); }; Point.prototype.normalize = function normalize() { if (this.zOne) return this; // Normalize coordinates var zi = this.z.redInvm(); this.x = this.x.redMul(zi); this.y = this.y.redMul(zi); if (this.t) this.t = this.t.redMul(zi); this.z = this.curve.one; this.zOne = true; return this; }; Point.prototype.neg = function neg() { return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg()); }; Point.prototype.getX = function getX() { this.normalize(); return this.x.fromRed(); }; Point.prototype.getY = function getY() { this.normalize(); return this.y.fromRed(); }; Point.prototype.eq = function eq(other) { return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0; }; Point.prototype.eqXToP = function eqXToP(x) { var rx = x.toRed(this.curve.red).redMul(this.z); if (this.x.cmp(rx) === 0) return true; var xc = x.clone(); var t = this.curve.redN.redMul(this.z); for (;;) { xc.iadd(this.curve.n); if (xc.cmp(this.curve.p) >= 0) return false; rx.redIAdd(t); if (this.x.cmp(rx) === 0) return true; } }; // Compatibility with BaseCurve Point.prototype.toP = Point.prototype.normalize; Point.prototype.mixedAdd = Point.prototype.add; },{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],208:[function(require,module,exports){ 'use strict'; var curve = exports; curve.base = require('./base'); curve.short = require('./short'); curve.mont = require('./mont'); curve.edwards = require('./edwards'); },{"./base":206,"./edwards":207,"./mont":209,"./short":210}],209:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var inherits = require('inherits'); var Base = require('./base'); var utils = require('../utils'); function MontCurve(conf) { Base.call(this, 'mont', conf); this.a = new BN(conf.a, 16).toRed(this.red); this.b = new BN(conf.b, 16).toRed(this.red); this.i4 = new BN(4).toRed(this.red).redInvm(); this.two = new BN(2).toRed(this.red); this.a24 = this.i4.redMul(this.a.redAdd(this.two)); } inherits(MontCurve, Base); module.exports = MontCurve; MontCurve.prototype.validate = function validate(point) { var x = point.normalize().x; var x2 = x.redSqr(); var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x); var y = rhs.redSqrt(); return y.redSqr().cmp(rhs) === 0; }; function Point(curve, x, z) { Base.BasePoint.call(this, curve, 'projective'); if (x === null && z === null) { this.x = this.curve.one; this.z = this.curve.zero; } else { this.x = new BN(x, 16); this.z = new BN(z, 16); if (!this.x.red) this.x = this.x.toRed(this.curve.red); if (!this.z.red) this.z = this.z.toRed(this.curve.red); } } inherits(Point, Base.BasePoint); MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) { return this.point(utils.toArray(bytes, enc), 1); }; MontCurve.prototype.point = function point(x, z) { return new Point(this, x, z); }; MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) { return Point.fromJSON(this, obj); }; Point.prototype.precompute = function precompute() { // No-op }; Point.prototype._encode = function _encode() { return this.getX().toArray('be', this.curve.p.byteLength()); }; Point.fromJSON = function fromJSON(curve, obj) { return new Point(curve, obj[0], obj[1] || curve.one); }; Point.prototype.inspect = function inspect() { if (this.isInfinity()) return ''; return ''; }; Point.prototype.isInfinity = function isInfinity() { // XXX This code assumes that zero is always zero in red return this.z.cmpn(0) === 0; }; Point.prototype.dbl = function dbl() { // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3 // 2M + 2S + 4A // A = X1 + Z1 var a = this.x.redAdd(this.z); // AA = A^2 var aa = a.redSqr(); // B = X1 - Z1 var b = this.x.redSub(this.z); // BB = B^2 var bb = b.redSqr(); // C = AA - BB var c = aa.redSub(bb); // X3 = AA * BB var nx = aa.redMul(bb); // Z3 = C * (BB + A24 * C) var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c))); return this.curve.point(nx, nz); }; Point.prototype.add = function add() { throw new Error('Not supported on Montgomery curve'); }; Point.prototype.diffAdd = function diffAdd(p, diff) { // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3 // 4M + 2S + 6A // A = X2 + Z2 var a = this.x.redAdd(this.z); // B = X2 - Z2 var b = this.x.redSub(this.z); // C = X3 + Z3 var c = p.x.redAdd(p.z); // D = X3 - Z3 var d = p.x.redSub(p.z); // DA = D * A var da = d.redMul(a); // CB = C * B var cb = c.redMul(b); // X5 = Z1 * (DA + CB)^2 var nx = diff.z.redMul(da.redAdd(cb).redSqr()); // Z5 = X1 * (DA - CB)^2 var nz = diff.x.redMul(da.redISub(cb).redSqr()); return this.curve.point(nx, nz); }; Point.prototype.mul = function mul(k) { var t = k.clone(); var a = this; // (N / 2) * Q + Q var b = this.curve.point(null, null); // (N / 2) * Q var c = this; // Q for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) bits.push(t.andln(1)); for (var i = bits.length - 1; i >= 0; i--) { if (bits[i] === 0) { // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q a = a.diffAdd(b, c); // N * Q = 2 * ((N / 2) * Q + Q)) b = b.dbl(); } else { // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q) b = a.diffAdd(b, c); // N * Q + Q = 2 * ((N / 2) * Q + Q) a = a.dbl(); } } return b; }; Point.prototype.mulAdd = function mulAdd() { throw new Error('Not supported on Montgomery curve'); }; Point.prototype.jumlAdd = function jumlAdd() { throw new Error('Not supported on Montgomery curve'); }; Point.prototype.eq = function eq(other) { return this.getX().cmp(other.getX()) === 0; }; Point.prototype.normalize = function normalize() { this.x = this.x.redMul(this.z.redInvm()); this.z = this.curve.one; return this; }; Point.prototype.getX = function getX() { // Normalize coordinates this.normalize(); return this.x.fromRed(); }; },{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],210:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var BN = require('bn.js'); var inherits = require('inherits'); var Base = require('./base'); var assert = utils.assert; function ShortCurve(conf) { Base.call(this, 'short', conf); this.a = new BN(conf.a, 16).toRed(this.red); this.b = new BN(conf.b, 16).toRed(this.red); this.tinv = this.two.redInvm(); this.zeroA = this.a.fromRed().cmpn(0) === 0; this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; // If the curve is endomorphic, precalculate beta and lambda this.endo = this._getEndomorphism(conf); this._endoWnafT1 = new Array(4); this._endoWnafT2 = new Array(4); } inherits(ShortCurve, Base); module.exports = ShortCurve; ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) { // No efficient endomorphism if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) return; // Compute beta and lambda, that lambda * P = (beta * Px; Py) var beta; var lambda; if (conf.beta) { beta = new BN(conf.beta, 16).toRed(this.red); } else { var betas = this._getEndoRoots(this.p); // Choose the smallest beta beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1]; beta = beta.toRed(this.red); } if (conf.lambda) { lambda = new BN(conf.lambda, 16); } else { // Choose the lambda that is matching selected beta var lambdas = this._getEndoRoots(this.n); if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) { lambda = lambdas[0]; } else { lambda = lambdas[1]; assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0); } } // Get basis vectors, used for balanced length-two representation var basis; if (conf.basis) { basis = conf.basis.map(function(vec) { return { a: new BN(vec.a, 16), b: new BN(vec.b, 16) }; }); } else { basis = this._getEndoBasis(lambda); } return { beta: beta, lambda: lambda, basis: basis }; }; ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) { // Find roots of for x^2 + x + 1 in F // Root = (-1 +- Sqrt(-3)) / 2 // var red = num === this.p ? this.red : BN.mont(num); var tinv = new BN(2).toRed(red).redInvm(); var ntinv = tinv.redNeg(); var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv); var l1 = ntinv.redAdd(s).fromRed(); var l2 = ntinv.redSub(s).fromRed(); return [ l1, l2 ]; }; ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) { // aprxSqrt >= sqrt(this.n) var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); // 3.74 // Run EGCD, until r(L + 1) < aprxSqrt var u = lambda; var v = this.n.clone(); var x1 = new BN(1); var y1 = new BN(0); var x2 = new BN(0); var y2 = new BN(1); // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n) var a0; var b0; // First vector var a1; var b1; // Second vector var a2; var b2; var prevR; var i = 0; var r; var x; while (u.cmpn(0) !== 0) { var q = v.div(u); r = v.sub(q.mul(u)); x = x2.sub(q.mul(x1)); var y = y2.sub(q.mul(y1)); if (!a1 && r.cmp(aprxSqrt) < 0) { a0 = prevR.neg(); b0 = x1; a1 = r.neg(); b1 = x; } else if (a1 && ++i === 2) { break; } prevR = r; v = u; u = r; x2 = x1; x1 = x; y2 = y1; y1 = y; } a2 = r.neg(); b2 = x; var len1 = a1.sqr().add(b1.sqr()); var len2 = a2.sqr().add(b2.sqr()); if (len2.cmp(len1) >= 0) { a2 = a0; b2 = b0; } // Normalize signs if (a1.negative) { a1 = a1.neg(); b1 = b1.neg(); } if (a2.negative) { a2 = a2.neg(); b2 = b2.neg(); } return [ { a: a1, b: b1 }, { a: a2, b: b2 } ]; }; ShortCurve.prototype._endoSplit = function _endoSplit(k) { var basis = this.endo.basis; var v1 = basis[0]; var v2 = basis[1]; var c1 = v2.b.mul(k).divRound(this.n); var c2 = v1.b.neg().mul(k).divRound(this.n); var p1 = c1.mul(v1.a); var p2 = c2.mul(v2.a); var q1 = c1.mul(v1.b); var q2 = c2.mul(v2.b); // Calculate answer var k1 = k.sub(p1).sub(p2); var k2 = q1.add(q2).neg(); return { k1: k1, k2: k2 }; }; ShortCurve.prototype.pointFromX = function pointFromX(x, odd) { x = new BN(x, 16); if (!x.red) x = x.toRed(this.red); var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b); var y = y2.redSqrt(); if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); // XXX Is there any way to tell if the number is odd without converting it // to non-red form? var isOdd = y.fromRed().isOdd(); if (odd && !isOdd || !odd && isOdd) y = y.redNeg(); return this.point(x, y); }; ShortCurve.prototype.validate = function validate(point) { if (point.inf) return true; var x = point.x; var y = point.y; var ax = this.a.redMul(x); var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b); return y.redSqr().redISub(rhs).cmpn(0) === 0; }; ShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) { var npoints = this._endoWnafT1; var ncoeffs = this._endoWnafT2; for (var i = 0; i < points.length; i++) { var split = this._endoSplit(coeffs[i]); var p = points[i]; var beta = p._getBeta(); if (split.k1.negative) { split.k1.ineg(); p = p.neg(true); } if (split.k2.negative) { split.k2.ineg(); beta = beta.neg(true); } npoints[i * 2] = p; npoints[i * 2 + 1] = beta; ncoeffs[i * 2] = split.k1; ncoeffs[i * 2 + 1] = split.k2; } var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); // Clean-up references to points and coefficients for (var j = 0; j < i * 2; j++) { npoints[j] = null; ncoeffs[j] = null; } return res; }; function Point(curve, x, y, isRed) { Base.BasePoint.call(this, curve, 'affine'); if (x === null && y === null) { this.x = null; this.y = null; this.inf = true; } else { this.x = new BN(x, 16); this.y = new BN(y, 16); // Force redgomery representation when loading from JSON if (isRed) { this.x.forceRed(this.curve.red); this.y.forceRed(this.curve.red); } if (!this.x.red) this.x = this.x.toRed(this.curve.red); if (!this.y.red) this.y = this.y.toRed(this.curve.red); this.inf = false; } } inherits(Point, Base.BasePoint); ShortCurve.prototype.point = function point(x, y, isRed) { return new Point(this, x, y, isRed); }; ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) { return Point.fromJSON(this, obj, red); }; Point.prototype._getBeta = function _getBeta() { if (!this.curve.endo) return; var pre = this.precomputed; if (pre && pre.beta) return pre.beta; var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y); if (pre) { var curve = this.curve; var endoMul = function(p) { return curve.point(p.x.redMul(curve.endo.beta), p.y); }; pre.beta = beta; beta.precomputed = { beta: null, naf: pre.naf && { wnd: pre.naf.wnd, points: pre.naf.points.map(endoMul) }, doubles: pre.doubles && { step: pre.doubles.step, points: pre.doubles.points.map(endoMul) } }; } return beta; }; Point.prototype.toJSON = function toJSON() { if (!this.precomputed) return [ this.x, this.y ]; return [ this.x, this.y, this.precomputed && { doubles: this.precomputed.doubles && { step: this.precomputed.doubles.step, points: this.precomputed.doubles.points.slice(1) }, naf: this.precomputed.naf && { wnd: this.precomputed.naf.wnd, points: this.precomputed.naf.points.slice(1) } } ]; }; Point.fromJSON = function fromJSON(curve, obj, red) { if (typeof obj === 'string') obj = JSON.parse(obj); var res = curve.point(obj[0], obj[1], red); if (!obj[2]) return res; function obj2point(obj) { return curve.point(obj[0], obj[1], red); } var pre = obj[2]; res.precomputed = { beta: null, doubles: pre.doubles && { step: pre.doubles.step, points: [ res ].concat(pre.doubles.points.map(obj2point)) }, naf: pre.naf && { wnd: pre.naf.wnd, points: [ res ].concat(pre.naf.points.map(obj2point)) } }; return res; }; Point.prototype.inspect = function inspect() { if (this.isInfinity()) return ''; return ''; }; Point.prototype.isInfinity = function isInfinity() { return this.inf; }; Point.prototype.add = function add(p) { // O + P = P if (this.inf) return p; // P + O = P if (p.inf) return this; // P + P = 2P if (this.eq(p)) return this.dbl(); // P + (-P) = O if (this.neg().eq(p)) return this.curve.point(null, null); // P + Q = O if (this.x.cmp(p.x) === 0) return this.curve.point(null, null); var c = this.y.redSub(p.y); if (c.cmpn(0) !== 0) c = c.redMul(this.x.redSub(p.x).redInvm()); var nx = c.redSqr().redISub(this.x).redISub(p.x); var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); return this.curve.point(nx, ny); }; Point.prototype.dbl = function dbl() { if (this.inf) return this; // 2P = O var ys1 = this.y.redAdd(this.y); if (ys1.cmpn(0) === 0) return this.curve.point(null, null); var a = this.curve.a; var x2 = this.x.redSqr(); var dyinv = ys1.redInvm(); var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv); var nx = c.redSqr().redISub(this.x.redAdd(this.x)); var ny = c.redMul(this.x.redSub(nx)).redISub(this.y); return this.curve.point(nx, ny); }; Point.prototype.getX = function getX() { return this.x.fromRed(); }; Point.prototype.getY = function getY() { return this.y.fromRed(); }; Point.prototype.mul = function mul(k) { k = new BN(k, 16); if (this.isInfinity()) return this; else if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k); else if (this.curve.endo) return this.curve._endoWnafMulAdd([ this ], [ k ]); else return this.curve._wnafMul(this, k); }; Point.prototype.mulAdd = function mulAdd(k1, p2, k2) { var points = [ this, p2 ]; var coeffs = [ k1, k2 ]; if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs); else return this.curve._wnafMulAdd(1, points, coeffs, 2); }; Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) { var points = [ this, p2 ]; var coeffs = [ k1, k2 ]; if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true); else return this.curve._wnafMulAdd(1, points, coeffs, 2, true); }; Point.prototype.eq = function eq(p) { return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0); }; Point.prototype.neg = function neg(_precompute) { if (this.inf) return this; var res = this.curve.point(this.x, this.y.redNeg()); if (_precompute && this.precomputed) { var pre = this.precomputed; var negate = function(p) { return p.neg(); }; res.precomputed = { naf: pre.naf && { wnd: pre.naf.wnd, points: pre.naf.points.map(negate) }, doubles: pre.doubles && { step: pre.doubles.step, points: pre.doubles.points.map(negate) } }; } return res; }; Point.prototype.toJ = function toJ() { if (this.inf) return this.curve.jpoint(null, null, null); var res = this.curve.jpoint(this.x, this.y, this.curve.one); return res; }; function JPoint(curve, x, y, z) { Base.BasePoint.call(this, curve, 'jacobian'); if (x === null && y === null && z === null) { this.x = this.curve.one; this.y = this.curve.one; this.z = new BN(0); } else { this.x = new BN(x, 16); this.y = new BN(y, 16); this.z = new BN(z, 16); } if (!this.x.red) this.x = this.x.toRed(this.curve.red); if (!this.y.red) this.y = this.y.toRed(this.curve.red); if (!this.z.red) this.z = this.z.toRed(this.curve.red); this.zOne = this.z === this.curve.one; } inherits(JPoint, Base.BasePoint); ShortCurve.prototype.jpoint = function jpoint(x, y, z) { return new JPoint(this, x, y, z); }; JPoint.prototype.toP = function toP() { if (this.isInfinity()) return this.curve.point(null, null); var zinv = this.z.redInvm(); var zinv2 = zinv.redSqr(); var ax = this.x.redMul(zinv2); var ay = this.y.redMul(zinv2).redMul(zinv); return this.curve.point(ax, ay); }; JPoint.prototype.neg = function neg() { return this.curve.jpoint(this.x, this.y.redNeg(), this.z); }; JPoint.prototype.add = function add(p) { // O + P = P if (this.isInfinity()) return p; // P + O = P if (p.isInfinity()) return this; // 12M + 4S + 7A var pz2 = p.z.redSqr(); var z2 = this.z.redSqr(); var u1 = this.x.redMul(pz2); var u2 = p.x.redMul(z2); var s1 = this.y.redMul(pz2.redMul(p.z)); var s2 = p.y.redMul(z2.redMul(this.z)); var h = u1.redSub(u2); var r = s1.redSub(s2); if (h.cmpn(0) === 0) { if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null); else return this.dbl(); } var h2 = h.redSqr(); var h3 = h2.redMul(h); var v = u1.redMul(h2); var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); var nz = this.z.redMul(p.z).redMul(h); return this.curve.jpoint(nx, ny, nz); }; JPoint.prototype.mixedAdd = function mixedAdd(p) { // O + P = P if (this.isInfinity()) return p.toJ(); // P + O = P if (p.isInfinity()) return this; // 8M + 3S + 7A var z2 = this.z.redSqr(); var u1 = this.x; var u2 = p.x.redMul(z2); var s1 = this.y; var s2 = p.y.redMul(z2).redMul(this.z); var h = u1.redSub(u2); var r = s1.redSub(s2); if (h.cmpn(0) === 0) { if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null); else return this.dbl(); } var h2 = h.redSqr(); var h3 = h2.redMul(h); var v = u1.redMul(h2); var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v); var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3)); var nz = this.z.redMul(h); return this.curve.jpoint(nx, ny, nz); }; JPoint.prototype.dblp = function dblp(pow) { if (pow === 0) return this; if (this.isInfinity()) return this; if (!pow) return this.dbl(); if (this.curve.zeroA || this.curve.threeA) { var r = this; for (var i = 0; i < pow; i++) r = r.dbl(); return r; } // 1M + 2S + 1A + N * (4S + 5M + 8A) // N = 1 => 6M + 6S + 9A var a = this.curve.a; var tinv = this.curve.tinv; var jx = this.x; var jy = this.y; var jz = this.z; var jz4 = jz.redSqr().redSqr(); // Reuse results var jyd = jy.redAdd(jy); for (var i = 0; i < pow; i++) { var jx2 = jx.redSqr(); var jyd2 = jyd.redSqr(); var jyd4 = jyd2.redSqr(); var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); var t1 = jx.redMul(jyd2); var nx = c.redSqr().redISub(t1.redAdd(t1)); var t2 = t1.redISub(nx); var dny = c.redMul(t2); dny = dny.redIAdd(dny).redISub(jyd4); var nz = jyd.redMul(jz); if (i + 1 < pow) jz4 = jz4.redMul(jyd4); jx = nx; jz = nz; jyd = dny; } return this.curve.jpoint(jx, jyd.redMul(tinv), jz); }; JPoint.prototype.dbl = function dbl() { if (this.isInfinity()) return this; if (this.curve.zeroA) return this._zeroDbl(); else if (this.curve.threeA) return this._threeDbl(); else return this._dbl(); }; JPoint.prototype._zeroDbl = function _zeroDbl() { var nx; var ny; var nz; // Z = 1 if (this.zOne) { // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html // #doubling-mdbl-2007-bl // 1M + 5S + 14A // XX = X1^2 var xx = this.x.redSqr(); // YY = Y1^2 var yy = this.y.redSqr(); // YYYY = YY^2 var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY) var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); s = s.redIAdd(s); // M = 3 * XX + a; a = 0 var m = xx.redAdd(xx).redIAdd(xx); // T = M ^ 2 - 2*S var t = m.redSqr().redISub(s).redISub(s); // 8 * YYYY var yyyy8 = yyyy.redIAdd(yyyy); yyyy8 = yyyy8.redIAdd(yyyy8); yyyy8 = yyyy8.redIAdd(yyyy8); // X3 = T nx = t; // Y3 = M * (S - T) - 8 * YYYY ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2*Y1 nz = this.y.redAdd(this.y); } else { // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html // #doubling-dbl-2009-l // 2M + 5S + 13A // A = X1^2 var a = this.x.redSqr(); // B = Y1^2 var b = this.y.redSqr(); // C = B^2 var c = b.redSqr(); // D = 2 * ((X1 + B)^2 - A - C) var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c); d = d.redIAdd(d); // E = 3 * A var e = a.redAdd(a).redIAdd(a); // F = E^2 var f = e.redSqr(); // 8 * C var c8 = c.redIAdd(c); c8 = c8.redIAdd(c8); c8 = c8.redIAdd(c8); // X3 = F - 2 * D nx = f.redISub(d).redISub(d); // Y3 = E * (D - X3) - 8 * C ny = e.redMul(d.redISub(nx)).redISub(c8); // Z3 = 2 * Y1 * Z1 nz = this.y.redMul(this.z); nz = nz.redIAdd(nz); } return this.curve.jpoint(nx, ny, nz); }; JPoint.prototype._threeDbl = function _threeDbl() { var nx; var ny; var nz; // Z = 1 if (this.zOne) { // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html // #doubling-mdbl-2007-bl // 1M + 5S + 15A // XX = X1^2 var xx = this.x.redSqr(); // YY = Y1^2 var yy = this.y.redSqr(); // YYYY = YY^2 var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY) var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); s = s.redIAdd(s); // M = 3 * XX + a var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); // T = M^2 - 2 * S var t = m.redSqr().redISub(s).redISub(s); // X3 = T nx = t; // Y3 = M * (S - T) - 8 * YYYY var yyyy8 = yyyy.redIAdd(yyyy); yyyy8 = yyyy8.redIAdd(yyyy8); yyyy8 = yyyy8.redIAdd(yyyy8); ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2 * Y1 nz = this.y.redAdd(this.y); } else { // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b // 3M + 5S // delta = Z1^2 var delta = this.z.redSqr(); // gamma = Y1^2 var gamma = this.y.redSqr(); // beta = X1 * gamma var beta = this.x.redMul(gamma); // alpha = 3 * (X1 - delta) * (X1 + delta) var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta)); alpha = alpha.redAdd(alpha).redIAdd(alpha); // X3 = alpha^2 - 8 * beta var beta4 = beta.redIAdd(beta); beta4 = beta4.redIAdd(beta4); var beta8 = beta4.redAdd(beta4); nx = alpha.redSqr().redISub(beta8); // Z3 = (Y1 + Z1)^2 - gamma - delta nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2 var ggamma8 = gamma.redSqr(); ggamma8 = ggamma8.redIAdd(ggamma8); ggamma8 = ggamma8.redIAdd(ggamma8); ggamma8 = ggamma8.redIAdd(ggamma8); ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8); } return this.curve.jpoint(nx, ny, nz); }; JPoint.prototype._dbl = function _dbl() { var a = this.curve.a; // 4M + 6S + 10A var jx = this.x; var jy = this.y; var jz = this.z; var jz4 = jz.redSqr().redSqr(); var jx2 = jx.redSqr(); var jy2 = jy.redSqr(); var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4)); var jxd4 = jx.redAdd(jx); jxd4 = jxd4.redIAdd(jxd4); var t1 = jxd4.redMul(jy2); var nx = c.redSqr().redISub(t1.redAdd(t1)); var t2 = t1.redISub(nx); var jyd8 = jy2.redSqr(); jyd8 = jyd8.redIAdd(jyd8); jyd8 = jyd8.redIAdd(jyd8); jyd8 = jyd8.redIAdd(jyd8); var ny = c.redMul(t2).redISub(jyd8); var nz = jy.redAdd(jy).redMul(jz); return this.curve.jpoint(nx, ny, nz); }; JPoint.prototype.trpl = function trpl() { if (!this.curve.zeroA) return this.dbl().add(this); // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl // 5M + 10S + ... // XX = X1^2 var xx = this.x.redSqr(); // YY = Y1^2 var yy = this.y.redSqr(); // ZZ = Z1^2 var zz = this.z.redSqr(); // YYYY = YY^2 var yyyy = yy.redSqr(); // M = 3 * XX + a * ZZ2; a = 0 var m = xx.redAdd(xx).redIAdd(xx); // MM = M^2 var mm = m.redSqr(); // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy); e = e.redIAdd(e); e = e.redAdd(e).redIAdd(e); e = e.redISub(mm); // EE = E^2 var ee = e.redSqr(); // T = 16*YYYY var t = yyyy.redIAdd(yyyy); t = t.redIAdd(t); t = t.redIAdd(t); t = t.redIAdd(t); // U = (M + E)^2 - MM - EE - T var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); // X3 = 4 * (X1 * EE - 4 * YY * U) var yyu4 = yy.redMul(u); yyu4 = yyu4.redIAdd(yyu4); yyu4 = yyu4.redIAdd(yyu4); var nx = this.x.redMul(ee).redISub(yyu4); nx = nx.redIAdd(nx); nx = nx.redIAdd(nx); // Y3 = 8 * Y1 * (U * (T - U) - E * EE) var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee))); ny = ny.redIAdd(ny); ny = ny.redIAdd(ny); ny = ny.redIAdd(ny); // Z3 = (Z1 + E)^2 - ZZ - EE var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee); return this.curve.jpoint(nx, ny, nz); }; JPoint.prototype.mul = function mul(k, kbase) { k = new BN(k, kbase); return this.curve._wnafMul(this, k); }; JPoint.prototype.eq = function eq(p) { if (p.type === 'affine') return this.eq(p.toJ()); if (this === p) return true; // x1 * z2^2 == x2 * z1^2 var z2 = this.z.redSqr(); var pz2 = p.z.redSqr(); if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) return false; // y1 * z2^3 == y2 * z1^3 var z3 = z2.redMul(this.z); var pz3 = pz2.redMul(p.z); return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0; }; JPoint.prototype.eqXToP = function eqXToP(x) { var zs = this.z.redSqr(); var rx = x.toRed(this.curve.red).redMul(zs); if (this.x.cmp(rx) === 0) return true; var xc = x.clone(); var t = this.curve.redN.redMul(zs); for (;;) { xc.iadd(this.curve.n); if (xc.cmp(this.curve.p) >= 0) return false; rx.redIAdd(t); if (this.x.cmp(rx) === 0) return true; } }; JPoint.prototype.inspect = function inspect() { if (this.isInfinity()) return ''; return ''; }; JPoint.prototype.isInfinity = function isInfinity() { // XXX This code assumes that zero is always zero in red return this.z.cmpn(0) === 0; }; },{"../utils":219,"./base":206,"bn.js":147,"inherits":262}],211:[function(require,module,exports){ 'use strict'; var curves = exports; var hash = require('hash.js'); var curve = require('./curve'); var utils = require('./utils'); var assert = utils.assert; function PresetCurve(options) { if (options.type === 'short') this.curve = new curve.short(options); else if (options.type === 'edwards') this.curve = new curve.edwards(options); else this.curve = new curve.mont(options); this.g = this.curve.g; this.n = this.curve.n; this.hash = options.hash; assert(this.g.validate(), 'Invalid curve'); assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O'); } curves.PresetCurve = PresetCurve; function defineCurve(name, options) { Object.defineProperty(curves, name, { configurable: true, enumerable: true, get: function() { var curve = new PresetCurve(options); Object.defineProperty(curves, name, { configurable: true, enumerable: true, value: curve }); return curve; } }); } defineCurve('p192', { type: 'short', prime: 'p192', p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff', a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc', b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1', n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831', hash: hash.sha256, gRed: false, g: [ '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811' ] }); defineCurve('p224', { type: 'short', prime: 'p224', p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001', a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe', b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4', n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d', hash: hash.sha256, gRed: false, g: [ 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34' ] }); defineCurve('p256', { type: 'short', prime: null, p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff', a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc', b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b', n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551', hash: hash.sha256, gRed: false, g: [ '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5' ] }); defineCurve('p384', { type: 'short', prime: null, p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff', a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc', b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef', n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973', hash: hash.sha384, gRed: false, g: [ 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + '5502f25d bf55296c 3a545e38 72760ab7', '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f' ] }); defineCurve('p521', { type: 'short', prime: null, p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff', a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc', b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00', n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409', hash: hash.sha512, gRed: false, g: [ '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + '3fad0761 353c7086 a272c240 88be9476 9fd16650' ] }); defineCurve('curve25519', { type: 'mont', prime: 'p25519', p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', a: '76d06', b: '1', n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', hash: hash.sha256, gRed: false, g: [ '9' ] }); defineCurve('ed25519', { type: 'edwards', prime: 'p25519', p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed', a: '-1', c: '1', // -121665 * (121666^(-1)) (mod P) d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3', n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed', hash: hash.sha256, gRed: false, g: [ '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', // 4/5 '6666666666666666666666666666666666666666666666666666666666666658' ] }); var pre; try { pre = require('./precomputed/secp256k1'); } catch (e) { pre = undefined; } defineCurve('secp256k1', { type: 'short', prime: 'k256', p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f', a: '0', b: '7', n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141', h: '1', hash: hash.sha256, // Precomputed endomorphism beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee', lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72', basis: [ { a: '3086d221a7d46bcde86c90e49284eb15', b: '-e4437ed6010e88286f547fa90abfe4c3' }, { a: '114ca50f7a8e2f3f657c1108d9d44cfd8', b: '3086d221a7d46bcde86c90e49284eb15' } ], gRed: false, g: [ '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre ] }); },{"./curve":208,"./precomputed/secp256k1":218,"./utils":219,"hash.js":228}],212:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var HmacDRBG = require('hmac-drbg'); var utils = require('../utils'); var curves = require('../curves'); var rand = require('brorand'); var assert = utils.assert; var KeyPair = require('./key'); var Signature = require('./signature'); function EC(options) { if (!(this instanceof EC)) return new EC(options); // Shortcut `elliptic.ec(curve-name)` if (typeof options === 'string') { assert(curves.hasOwnProperty(options), 'Unknown curve ' + options); options = curves[options]; } // Shortcut for `elliptic.ec(elliptic.curves.curveName)` if (options instanceof curves.PresetCurve) options = { curve: options }; this.curve = options.curve.curve; this.n = this.curve.n; this.nh = this.n.ushrn(1); this.g = this.curve.g; // Point on curve this.g = options.curve.g; this.g.precompute(options.curve.n.bitLength() + 1); // Hash for function for DRBG this.hash = options.hash || options.curve.hash; } module.exports = EC; EC.prototype.keyPair = function keyPair(options) { return new KeyPair(this, options); }; EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) { return KeyPair.fromPrivate(this, priv, enc); }; EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) { return KeyPair.fromPublic(this, pub, enc); }; EC.prototype.genKeyPair = function genKeyPair(options) { if (!options) options = {}; // Instantiate Hmac_DRBG var drbg = new HmacDRBG({ hash: this.hash, pers: options.pers, persEnc: options.persEnc || 'utf8', entropy: options.entropy || rand(this.hash.hmacStrength), entropyEnc: options.entropy && options.entropyEnc || 'utf8', nonce: this.n.toArray() }); var bytes = this.n.byteLength(); var ns2 = this.n.sub(new BN(2)); do { var priv = new BN(drbg.generate(bytes)); if (priv.cmp(ns2) > 0) continue; priv.iaddn(1); return this.keyFromPrivate(priv); } while (true); }; EC.prototype._truncateToN = function truncateToN(msg, truncOnly) { var delta = msg.byteLength() * 8 - this.n.bitLength(); if (delta > 0) msg = msg.ushrn(delta); if (!truncOnly && msg.cmp(this.n) >= 0) return msg.sub(this.n); else return msg; }; EC.prototype.sign = function sign(msg, key, enc, options) { if (typeof enc === 'object') { options = enc; enc = null; } if (!options) options = {}; key = this.keyFromPrivate(key, enc); msg = this._truncateToN(new BN(msg, 16)); // Zero-extend key to provide enough entropy var bytes = this.n.byteLength(); var bkey = key.getPrivate().toArray('be', bytes); // Zero-extend nonce to have the same byte size as N var nonce = msg.toArray('be', bytes); // Instantiate Hmac_DRBG var drbg = new HmacDRBG({ hash: this.hash, entropy: bkey, nonce: nonce, pers: options.pers, persEnc: options.persEnc || 'utf8' }); // Number of bytes to generate var ns1 = this.n.sub(new BN(1)); for (var iter = 0; true; iter++) { var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength())); k = this._truncateToN(k, true); if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) continue; var kp = this.g.mul(k); if (kp.isInfinity()) continue; var kpX = kp.getX(); var r = kpX.umod(this.n); if (r.cmpn(0) === 0) continue; var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg)); s = s.umod(this.n); if (s.cmpn(0) === 0) continue; var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0); // Use complement of `s`, if it is > `n / 2` if (options.canonical && s.cmp(this.nh) > 0) { s = this.n.sub(s); recoveryParam ^= 1; } return new Signature({ r: r, s: s, recoveryParam: recoveryParam }); } }; EC.prototype.verify = function verify(msg, signature, key, enc) { msg = this._truncateToN(new BN(msg, 16)); key = this.keyFromPublic(key, enc); signature = new Signature(signature, 'hex'); // Perform primitive values validation var r = signature.r; var s = signature.s; if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) return false; if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) return false; // Validate signature var sinv = s.invm(this.n); var u1 = sinv.mul(msg).umod(this.n); var u2 = sinv.mul(r).umod(this.n); if (!this.curve._maxwellTrick) { var p = this.g.mulAdd(u1, key.getPublic(), u2); if (p.isInfinity()) return false; return p.getX().umod(this.n).cmp(r) === 0; } // NOTE: Greg Maxwell's trick, inspired by: // https://git.io/vad3K var p = this.g.jmulAdd(u1, key.getPublic(), u2); if (p.isInfinity()) return false; // Compare `p.x` of Jacobian point with `r`, // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the // inverse of `p.z^2` return p.eqXToP(r); }; EC.prototype.recoverPubKey = function(msg, signature, j, enc) { assert((3 & j) === j, 'The recovery param is more than two bits'); signature = new Signature(signature, enc); var n = this.n; var e = new BN(msg); var r = signature.r; var s = signature.s; // A set LSB signifies that the y-coordinate is odd var isYOdd = j & 1; var isSecondKey = j >> 1; if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) throw new Error('Unable to find sencond key candinate'); // 1.1. Let x = r + jn. if (isSecondKey) r = this.curve.pointFromX(r.add(this.curve.n), isYOdd); else r = this.curve.pointFromX(r, isYOdd); var rInv = signature.r.invm(n); var s1 = n.sub(e).mul(rInv).umod(n); var s2 = s.mul(rInv).umod(n); // 1.6.1 Compute Q = r^-1 (sR - eG) // Q = r^-1 (sR + -eG) return this.g.mulAdd(s1, r, s2); }; EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) { signature = new Signature(signature, enc); if (signature.recoveryParam !== null) return signature.recoveryParam; for (var i = 0; i < 4; i++) { var Qprime; try { Qprime = this.recoverPubKey(e, signature, i); } catch (e) { continue; } if (Qprime.eq(Q)) return i; } throw new Error('Unable to find valid recovery factor'); }; },{"../curves":211,"../utils":219,"./key":213,"./signature":214,"bn.js":147,"brorand":148,"hmac-drbg":240}],213:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var utils = require('../utils'); var assert = utils.assert; function KeyPair(ec, options) { this.ec = ec; this.priv = null; this.pub = null; // KeyPair(ec, { priv: ..., pub: ... }) if (options.priv) this._importPrivate(options.priv, options.privEnc); if (options.pub) this._importPublic(options.pub, options.pubEnc); } module.exports = KeyPair; KeyPair.fromPublic = function fromPublic(ec, pub, enc) { if (pub instanceof KeyPair) return pub; return new KeyPair(ec, { pub: pub, pubEnc: enc }); }; KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) { if (priv instanceof KeyPair) return priv; return new KeyPair(ec, { priv: priv, privEnc: enc }); }; KeyPair.prototype.validate = function validate() { var pub = this.getPublic(); if (pub.isInfinity()) return { result: false, reason: 'Invalid public key' }; if (!pub.validate()) return { result: false, reason: 'Public key is not a point' }; if (!pub.mul(this.ec.curve.n).isInfinity()) return { result: false, reason: 'Public key * N != O' }; return { result: true, reason: null }; }; KeyPair.prototype.getPublic = function getPublic(compact, enc) { // compact is optional argument if (typeof compact === 'string') { enc = compact; compact = null; } if (!this.pub) this.pub = this.ec.g.mul(this.priv); if (!enc) return this.pub; return this.pub.encode(enc, compact); }; KeyPair.prototype.getPrivate = function getPrivate(enc) { if (enc === 'hex') return this.priv.toString(16, 2); else return this.priv; }; KeyPair.prototype._importPrivate = function _importPrivate(key, enc) { this.priv = new BN(key, enc || 16); // Ensure that the priv won't be bigger than n, otherwise we may fail // in fixed multiplication method this.priv = this.priv.umod(this.ec.curve.n); }; KeyPair.prototype._importPublic = function _importPublic(key, enc) { if (key.x || key.y) { // Montgomery points only have an `x` coordinate. // Weierstrass/Edwards points on the other hand have both `x` and // `y` coordinates. if (this.ec.curve.type === 'mont') { assert(key.x, 'Need x coordinate'); } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') { assert(key.x && key.y, 'Need both x and y coordinate'); } this.pub = this.ec.curve.point(key.x, key.y); return; } this.pub = this.ec.curve.decodePoint(key, enc); }; // ECDH KeyPair.prototype.derive = function derive(pub) { return pub.mul(this.priv).getX(); }; // ECDSA KeyPair.prototype.sign = function sign(msg, enc, options) { return this.ec.sign(msg, this, enc, options); }; KeyPair.prototype.verify = function verify(msg, signature) { return this.ec.verify(msg, signature, this); }; KeyPair.prototype.inspect = function inspect() { return ''; }; },{"../utils":219,"bn.js":147}],214:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var utils = require('../utils'); var assert = utils.assert; function Signature(options, enc) { if (options instanceof Signature) return options; if (this._importDER(options, enc)) return; assert(options.r && options.s, 'Signature without r or s'); this.r = new BN(options.r, 16); this.s = new BN(options.s, 16); if (options.recoveryParam === undefined) this.recoveryParam = null; else this.recoveryParam = options.recoveryParam; } module.exports = Signature; function Position() { this.place = 0; } function getLength(buf, p) { var initial = buf[p.place++]; if (!(initial & 0x80)) { return initial; } var octetLen = initial & 0xf; var val = 0; for (var i = 0, off = p.place; i < octetLen; i++, off++) { val <<= 8; val |= buf[off]; } p.place = off; return val; } function rmPadding(buf) { var i = 0; var len = buf.length - 1; while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) { i++; } if (i === 0) { return buf; } return buf.slice(i); } Signature.prototype._importDER = function _importDER(data, enc) { data = utils.toArray(data, enc); var p = new Position(); if (data[p.place++] !== 0x30) { return false; } var len = getLength(data, p); if ((len + p.place) !== data.length) { return false; } if (data[p.place++] !== 0x02) { return false; } var rlen = getLength(data, p); var r = data.slice(p.place, rlen + p.place); p.place += rlen; if (data[p.place++] !== 0x02) { return false; } var slen = getLength(data, p); if (data.length !== slen + p.place) { return false; } var s = data.slice(p.place, slen + p.place); if (r[0] === 0 && (r[1] & 0x80)) { r = r.slice(1); } if (s[0] === 0 && (s[1] & 0x80)) { s = s.slice(1); } this.r = new BN(r); this.s = new BN(s); this.recoveryParam = null; return true; }; function constructLength(arr, len) { if (len < 0x80) { arr.push(len); return; } var octets = 1 + (Math.log(len) / Math.LN2 >>> 3); arr.push(octets | 0x80); while (--octets) { arr.push((len >>> (octets << 3)) & 0xff); } arr.push(len); } Signature.prototype.toDER = function toDER(enc) { var r = this.r.toArray(); var s = this.s.toArray(); // Pad values if (r[0] & 0x80) r = [ 0 ].concat(r); // Pad values if (s[0] & 0x80) s = [ 0 ].concat(s); r = rmPadding(r); s = rmPadding(s); while (!s[0] && !(s[1] & 0x80)) { s = s.slice(1); } var arr = [ 0x02 ]; constructLength(arr, r.length); arr = arr.concat(r); arr.push(0x02); constructLength(arr, s.length); var backHalf = arr.concat(s); var res = [ 0x30 ]; constructLength(res, backHalf.length); res = res.concat(backHalf); return utils.encode(res, enc); }; },{"../utils":219,"bn.js":147}],215:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); var curves = require('../curves'); var utils = require('../utils'); var assert = utils.assert; var parseBytes = utils.parseBytes; var KeyPair = require('./key'); var Signature = require('./signature'); function EDDSA(curve) { assert(curve === 'ed25519', 'only tested with ed25519 so far'); if (!(this instanceof EDDSA)) return new EDDSA(curve); var curve = curves[curve].curve; this.curve = curve; this.g = curve.g; this.g.precompute(curve.n.bitLength() + 1); this.pointClass = curve.point().constructor; this.encodingLength = Math.ceil(curve.n.bitLength() / 8); this.hash = hash.sha512; } module.exports = EDDSA; /** * @param {Array|String} message - message bytes * @param {Array|String|KeyPair} secret - secret bytes or a keypair * @returns {Signature} - signature */ EDDSA.prototype.sign = function sign(message, secret) { message = parseBytes(message); var key = this.keyFromSecret(secret); var r = this.hashInt(key.messagePrefix(), message); var R = this.g.mul(r); var Rencoded = this.encodePoint(R); var s_ = this.hashInt(Rencoded, key.pubBytes(), message) .mul(key.priv()); var S = r.add(s_).umod(this.curve.n); return this.makeSignature({ R: R, S: S, Rencoded: Rencoded }); }; /** * @param {Array} message - message bytes * @param {Array|String|Signature} sig - sig bytes * @param {Array|String|Point|KeyPair} pub - public key * @returns {Boolean} - true if public key matches sig of message */ EDDSA.prototype.verify = function verify(message, sig, pub) { message = parseBytes(message); sig = this.makeSignature(sig); var key = this.keyFromPublic(pub); var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message); var SG = this.g.mul(sig.S()); var RplusAh = sig.R().add(key.pub().mul(h)); return RplusAh.eq(SG); }; EDDSA.prototype.hashInt = function hashInt() { var hash = this.hash(); for (var i = 0; i < arguments.length; i++) hash.update(arguments[i]); return utils.intFromLE(hash.digest()).umod(this.curve.n); }; EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) { return KeyPair.fromPublic(this, pub); }; EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) { return KeyPair.fromSecret(this, secret); }; EDDSA.prototype.makeSignature = function makeSignature(sig) { if (sig instanceof Signature) return sig; return new Signature(this, sig); }; /** * * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2 * * EDDSA defines methods for encoding and decoding points and integers. These are * helper convenience methods, that pass along to utility functions implied * parameters. * */ EDDSA.prototype.encodePoint = function encodePoint(point) { var enc = point.getY().toArray('le', this.encodingLength); enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0; return enc; }; EDDSA.prototype.decodePoint = function decodePoint(bytes) { bytes = utils.parseBytes(bytes); var lastIx = bytes.length - 1; var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80); var xIsOdd = (bytes[lastIx] & 0x80) !== 0; var y = utils.intFromLE(normed); return this.curve.pointFromY(y, xIsOdd); }; EDDSA.prototype.encodeInt = function encodeInt(num) { return num.toArray('le', this.encodingLength); }; EDDSA.prototype.decodeInt = function decodeInt(bytes) { return utils.intFromLE(bytes); }; EDDSA.prototype.isPoint = function isPoint(val) { return val instanceof this.pointClass; }; },{"../curves":211,"../utils":219,"./key":216,"./signature":217,"hash.js":228}],216:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var assert = utils.assert; var parseBytes = utils.parseBytes; var cachedProperty = utils.cachedProperty; /** * @param {EDDSA} eddsa - instance * @param {Object} params - public/private key parameters * * @param {Array} [params.secret] - secret seed bytes * @param {Point} [params.pub] - public key point (aka `A` in eddsa terms) * @param {Array} [params.pub] - public key point encoded as bytes * */ function KeyPair(eddsa, params) { this.eddsa = eddsa; this._secret = parseBytes(params.secret); if (eddsa.isPoint(params.pub)) this._pub = params.pub; else this._pubBytes = parseBytes(params.pub); } KeyPair.fromPublic = function fromPublic(eddsa, pub) { if (pub instanceof KeyPair) return pub; return new KeyPair(eddsa, { pub: pub }); }; KeyPair.fromSecret = function fromSecret(eddsa, secret) { if (secret instanceof KeyPair) return secret; return new KeyPair(eddsa, { secret: secret }); }; KeyPair.prototype.secret = function secret() { return this._secret; }; cachedProperty(KeyPair, 'pubBytes', function pubBytes() { return this.eddsa.encodePoint(this.pub()); }); cachedProperty(KeyPair, 'pub', function pub() { if (this._pubBytes) return this.eddsa.decodePoint(this._pubBytes); return this.eddsa.g.mul(this.priv()); }); cachedProperty(KeyPair, 'privBytes', function privBytes() { var eddsa = this.eddsa; var hash = this.hash(); var lastIx = eddsa.encodingLength - 1; var a = hash.slice(0, eddsa.encodingLength); a[0] &= 248; a[lastIx] &= 127; a[lastIx] |= 64; return a; }); cachedProperty(KeyPair, 'priv', function priv() { return this.eddsa.decodeInt(this.privBytes()); }); cachedProperty(KeyPair, 'hash', function hash() { return this.eddsa.hash().update(this.secret()).digest(); }); cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() { return this.hash().slice(this.eddsa.encodingLength); }); KeyPair.prototype.sign = function sign(message) { assert(this._secret, 'KeyPair can only verify'); return this.eddsa.sign(message, this); }; KeyPair.prototype.verify = function verify(message, sig) { return this.eddsa.verify(message, sig, this); }; KeyPair.prototype.getSecret = function getSecret(enc) { assert(this._secret, 'KeyPair is public only'); return utils.encode(this.secret(), enc); }; KeyPair.prototype.getPublic = function getPublic(enc) { return utils.encode(this.pubBytes(), enc); }; module.exports = KeyPair; },{"../utils":219}],217:[function(require,module,exports){ 'use strict'; var BN = require('bn.js'); var utils = require('../utils'); var assert = utils.assert; var cachedProperty = utils.cachedProperty; var parseBytes = utils.parseBytes; /** * @param {EDDSA} eddsa - eddsa instance * @param {Array|Object} sig - * @param {Array|Point} [sig.R] - R point as Point or bytes * @param {Array|bn} [sig.S] - S scalar as bn or bytes * @param {Array} [sig.Rencoded] - R point encoded * @param {Array} [sig.Sencoded] - S scalar encoded */ function Signature(eddsa, sig) { this.eddsa = eddsa; if (typeof sig !== 'object') sig = parseBytes(sig); if (Array.isArray(sig)) { sig = { R: sig.slice(0, eddsa.encodingLength), S: sig.slice(eddsa.encodingLength) }; } assert(sig.R && sig.S, 'Signature without R or S'); if (eddsa.isPoint(sig.R)) this._R = sig.R; if (sig.S instanceof BN) this._S = sig.S; this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded; this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded; } cachedProperty(Signature, 'S', function S() { return this.eddsa.decodeInt(this.Sencoded()); }); cachedProperty(Signature, 'R', function R() { return this.eddsa.decodePoint(this.Rencoded()); }); cachedProperty(Signature, 'Rencoded', function Rencoded() { return this.eddsa.encodePoint(this.R()); }); cachedProperty(Signature, 'Sencoded', function Sencoded() { return this.eddsa.encodeInt(this.S()); }); Signature.prototype.toBytes = function toBytes() { return this.Rencoded().concat(this.Sencoded()); }; Signature.prototype.toHex = function toHex() { return utils.encode(this.toBytes(), 'hex').toUpperCase(); }; module.exports = Signature; },{"../utils":219,"bn.js":147}],218:[function(require,module,exports){ module.exports = { doubles: { step: 4, points: [ [ 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821' ], [ '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf' ], [ '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695' ], [ '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9' ], [ '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36' ], [ '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f' ], [ 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999' ], [ '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09' ], [ 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d' ], [ 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088' ], [ 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d' ], [ '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8' ], [ '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a' ], [ '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453' ], [ '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160' ], [ '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0' ], [ '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6' ], [ '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589' ], [ '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17' ], [ 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda' ], [ 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd' ], [ '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2' ], [ '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6' ], [ 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f' ], [ '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01' ], [ 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3' ], [ 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f' ], [ 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7' ], [ 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78' ], [ 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1' ], [ '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150' ], [ '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82' ], [ 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc' ], [ '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b' ], [ 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51' ], [ 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45' ], [ 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120' ], [ '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84' ], [ '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d' ], [ '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d' ], [ '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8' ], [ 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8' ], [ '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac' ], [ '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f' ], [ '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962' ], [ 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907' ], [ '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec' ], [ 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d' ], [ 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414' ], [ '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd' ], [ '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0' ], [ 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811' ], [ 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1' ], [ 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c' ], [ '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73' ], [ '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd' ], [ 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405' ], [ '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589' ], [ '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e' ], [ '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27' ], [ 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1' ], [ '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482' ], [ '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945' ], [ 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573' ], [ 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82' ] ] }, naf: { wnd: 7, points: [ [ 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672' ], [ '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6' ], [ '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da' ], [ 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37' ], [ '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b' ], [ 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81' ], [ 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58' ], [ 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77' ], [ '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a' ], [ '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c' ], [ '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67' ], [ '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402' ], [ 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55' ], [ 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482' ], [ '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82' ], [ '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396' ], [ '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49' ], [ '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf' ], [ '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a' ], [ '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7' ], [ 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933' ], [ '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a' ], [ '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6' ], [ 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37' ], [ '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e' ], [ 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6' ], [ 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476' ], [ '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40' ], [ '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61' ], [ '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683' ], [ 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5' ], [ '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b' ], [ 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417' ], [ '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868' ], [ '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a' ], [ 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6' ], [ '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996' ], [ '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e' ], [ 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d' ], [ '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2' ], [ '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e' ], [ '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437' ], [ '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311' ], [ 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4' ], [ '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575' ], [ '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d' ], [ '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d' ], [ 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629' ], [ 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06' ], [ '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374' ], [ '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee' ], [ 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1' ], [ 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b' ], [ '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661' ], [ '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6' ], [ 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e' ], [ '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d' ], [ 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc' ], [ '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4' ], [ '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c' ], [ 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b' ], [ 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913' ], [ '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154' ], [ '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865' ], [ '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc' ], [ '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224' ], [ '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e' ], [ '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6' ], [ '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511' ], [ '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b' ], [ 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2' ], [ '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c' ], [ 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3' ], [ 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d' ], [ 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700' ], [ 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4' ], [ '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196' ], [ '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4' ], [ '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257' ], [ 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13' ], [ 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096' ], [ 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38' ], [ 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f' ], [ '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448' ], [ 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a' ], [ 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4' ], [ '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437' ], [ '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7' ], [ 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d' ], [ 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a' ], [ 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54' ], [ '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77' ], [ 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517' ], [ '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10' ], [ 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125' ], [ 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e' ], [ '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1' ], [ 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2' ], [ 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423' ], [ 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8' ], [ '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758' ], [ '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375' ], [ 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d' ], [ '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec' ], [ '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0' ], [ '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c' ], [ 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4' ], [ '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f' ], [ '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649' ], [ '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826' ], [ '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5' ], [ 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87' ], [ '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b' ], [ 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc' ], [ '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c' ], [ 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f' ], [ 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a' ], [ 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46' ], [ '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f' ], [ '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03' ], [ '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08' ], [ '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8' ], [ '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373' ], [ '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3' ], [ '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8' ], [ '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1' ], [ '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9' ] ] } }; },{}],219:[function(require,module,exports){ 'use strict'; var utils = exports; var BN = require('bn.js'); var minAssert = require('minimalistic-assert'); var minUtils = require('minimalistic-crypto-utils'); utils.assert = minAssert; utils.toArray = minUtils.toArray; utils.zero2 = minUtils.zero2; utils.toHex = minUtils.toHex; utils.encode = minUtils.encode; // Represent num in a w-NAF form function getNAF(num, w) { var naf = []; var ws = 1 << (w + 1); var k = num.clone(); while (k.cmpn(1) >= 0) { var z; if (k.isOdd()) { var mod = k.andln(ws - 1); if (mod > (ws >> 1) - 1) z = (ws >> 1) - mod; else z = mod; k.isubn(z); } else { z = 0; } naf.push(z); // Optimization, shift by word if possible var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1; for (var i = 1; i < shift; i++) naf.push(0); k.iushrn(shift); } return naf; } utils.getNAF = getNAF; // Represent k1, k2 in a Joint Sparse Form function getJSF(k1, k2) { var jsf = [ [], [] ]; k1 = k1.clone(); k2 = k2.clone(); var d1 = 0; var d2 = 0; while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) { // First phase var m14 = (k1.andln(3) + d1) & 3; var m24 = (k2.andln(3) + d2) & 3; if (m14 === 3) m14 = -1; if (m24 === 3) m24 = -1; var u1; if ((m14 & 1) === 0) { u1 = 0; } else { var m8 = (k1.andln(7) + d1) & 7; if ((m8 === 3 || m8 === 5) && m24 === 2) u1 = -m14; else u1 = m14; } jsf[0].push(u1); var u2; if ((m24 & 1) === 0) { u2 = 0; } else { var m8 = (k2.andln(7) + d2) & 7; if ((m8 === 3 || m8 === 5) && m14 === 2) u2 = -m24; else u2 = m24; } jsf[1].push(u2); // Second phase if (2 * d1 === u1 + 1) d1 = 1 - d1; if (2 * d2 === u2 + 1) d2 = 1 - d2; k1.iushrn(1); k2.iushrn(1); } return jsf; } utils.getJSF = getJSF; function cachedProperty(obj, name, computer) { var key = '_' + name; obj.prototype[name] = function cachedProperty() { return this[key] !== undefined ? this[key] : this[key] = computer.call(this); }; } utils.cachedProperty = cachedProperty; function parseBytes(bytes) { return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes; } utils.parseBytes = parseBytes; function intFromLE(bytes) { return new BN(bytes, 'hex', 'le'); } utils.intFromLE = intFromLE; },{"bn.js":147,"minimalistic-assert":268,"minimalistic-crypto-utils":269}],220:[function(require,module,exports){ module.exports={ "_args": [ [ "elliptic@6.5.1", "/Users/caldwell/geopackage-js" ] ], "_development": true, "_from": "elliptic@6.5.1", "_id": "elliptic@6.5.1", "_inBundle": false, "_integrity": "sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg==", "_location": "/elliptic", "_phantomChildren": {}, "_requested": { "type": "version", "registry": true, "raw": "elliptic@6.5.1", "name": "elliptic", "escapedName": "elliptic", "rawSpec": "6.5.1", "saveSpec": null, "fetchSpec": "6.5.1" }, "_requiredBy": [ "/browserify-sign", "/create-ecdh" ], "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.1.tgz", "_spec": "6.5.1", "_where": "/Users/caldwell/geopackage-js", "author": { "name": "Fedor Indutny", "email": "fedor@indutny.com" }, "bugs": { "url": "https://github.com/indutny/elliptic/issues" }, "dependencies": { "bn.js": "^4.4.0", "brorand": "^1.0.1", "hash.js": "^1.0.0", "hmac-drbg": "^1.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" }, "description": "EC cryptography", "devDependencies": { "brfs": "^1.4.3", "coveralls": "^3.0.4", "grunt": "^1.0.4", "grunt-browserify": "^5.0.0", "grunt-cli": "^1.2.0", "grunt-contrib-connect": "^1.0.0", "grunt-contrib-copy": "^1.0.0", "grunt-contrib-uglify": "^1.0.1", "grunt-mocha-istanbul": "^3.0.1", "grunt-saucelabs": "^9.0.1", "istanbul": "^0.4.2", "jscs": "^3.0.7", "jshint": "^2.6.0", "mocha": "^6.1.4" }, "files": [ "lib" ], "homepage": "https://github.com/indutny/elliptic", "keywords": [ "EC", "Elliptic", "curve", "Cryptography" ], "license": "MIT", "main": "lib/elliptic.js", "name": "elliptic", "repository": { "type": "git", "url": "git+ssh://git@github.com/indutny/elliptic.git" }, "scripts": { "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js", "lint": "npm run jscs && npm run jshint", "test": "npm run lint && npm run unit", "unit": "istanbul test _mocha --reporter=spec test/index.js", "version": "grunt dist && git add dist/" }, "version": "6.5.1" } },{}],221:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. function EventEmitter() { this._events = this._events || {}; this._maxListeners = this._maxListeners || undefined; } module.exports = EventEmitter; // Backwards-compat with node 0.10.x EventEmitter.EventEmitter = EventEmitter; EventEmitter.prototype._events = undefined; EventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are // added to it. This is a useful default which helps finding memory leaks. EventEmitter.defaultMaxListeners = 10; // Obviously not all Emitters should be limited to 10. This function allows // that to be increased. Set to zero for unlimited. EventEmitter.prototype.setMaxListeners = function(n) { if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number'); this._maxListeners = n; return this; }; EventEmitter.prototype.emit = function(type) { var er, handler, len, args, i, listeners; if (!this._events) this._events = {}; // If there is no 'error' event listener then throw. if (type === 'error') { if (!this._events.error || (isObject(this._events.error) && !this._events.error.length)) { er = arguments[1]; if (er instanceof Error) { throw er; // Unhandled 'error' event } else { // At least give some kind of context to the user var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); err.context = er; throw err; } } } handler = this._events[type]; if (isUndefined(handler)) return false; if (isFunction(handler)) { switch (arguments.length) { // fast cases case 1: handler.call(this); break; case 2: handler.call(this, arguments[1]); break; case 3: handler.call(this, arguments[1], arguments[2]); break; // slower default: args = Array.prototype.slice.call(arguments, 1); handler.apply(this, args); } } else if (isObject(handler)) { args = Array.prototype.slice.call(arguments, 1); listeners = handler.slice(); len = listeners.length; for (i = 0; i < len; i++) listeners[i].apply(this, args); } return true; }; EventEmitter.prototype.addListener = function(type, listener) { var m; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events) this._events = {}; // To avoid recursion in the case that type === "newListener"! Before // adding it to the listeners, first emit "newListener". if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener); if (!this._events[type]) // Optimize the case of one listener. Don't need the extra array object. this._events[type] = listener; else if (isObject(this._events[type])) // If we've already got an array, just append. this._events[type].push(listener); else // Adding the second element, need to change to array. this._events[type] = [this._events[type], listener]; // Check for listener leak if (isObject(this._events[type]) && !this._events[type].warned) { if (!isUndefined(this._maxListeners)) { m = this._maxListeners; } else { m = EventEmitter.defaultMaxListeners; } if (m && m > 0 && this._events[type].length > m) { this._events[type].warned = true; console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length); if (typeof console.trace === 'function') { // not supported in IE 10 console.trace(); } } } return this; }; EventEmitter.prototype.on = EventEmitter.prototype.addListener; EventEmitter.prototype.once = function(type, listener) { if (!isFunction(listener)) throw TypeError('listener must be a function'); var fired = false; function g() { this.removeListener(type, g); if (!fired) { fired = true; listener.apply(this, arguments); } } g.listener = listener; this.on(type, g); return this; }; // emits a 'removeListener' event iff the listener was removed EventEmitter.prototype.removeListener = function(type, listener) { var list, position, length, i; if (!isFunction(listener)) throw TypeError('listener must be a function'); if (!this._events || !this._events[type]) return this; list = this._events[type]; length = list.length; position = -1; if (list === listener || (isFunction(list.listener) && list.listener === listener)) { delete this._events[type]; if (this._events.removeListener) this.emit('removeListener', type, listener); } else if (isObject(list)) { for (i = length; i-- > 0;) { if (list[i] === listener || (list[i].listener && list[i].listener === listener)) { position = i; break; } } if (position < 0) return this; if (list.length === 1) { list.length = 0; delete this._events[type]; } else { list.splice(position, 1); } if (this._events.removeListener) this.emit('removeListener', type, listener); } return this; }; EventEmitter.prototype.removeAllListeners = function(type) { var key, listeners; if (!this._events) return this; // not listening for removeListener, no need to emit if (!this._events.removeListener) { if (arguments.length === 0) this._events = {}; else if (this._events[type]) delete this._events[type]; return this; } // emit removeListener for all listeners on all events if (arguments.length === 0) { for (key in this._events) { if (key === 'removeListener') continue; this.removeAllListeners(key); } this.removeAllListeners('removeListener'); this._events = {}; return this; } listeners = this._events[type]; if (isFunction(listeners)) { this.removeListener(type, listeners); } else if (listeners) { // LIFO order while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]); } delete this._events[type]; return this; }; EventEmitter.prototype.listeners = function(type) { var ret; if (!this._events || !this._events[type]) ret = []; else if (isFunction(this._events[type])) ret = [this._events[type]]; else ret = this._events[type].slice(); return ret; }; EventEmitter.prototype.listenerCount = function(type) { if (this._events) { var evlistener = this._events[type]; if (isFunction(evlistener)) return 1; else if (evlistener) return evlistener.length; } return 0; }; EventEmitter.listenerCount = function(emitter, type) { return emitter.listenerCount(type); }; function isFunction(arg) { return typeof arg === 'function'; } function isNumber(arg) { return typeof arg === 'number'; } function isObject(arg) { return typeof arg === 'object' && arg !== null; } function isUndefined(arg) { return arg === void 0; } },{}],222:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer var MD5 = require('md5.js') /* eslint-disable camelcase */ function EVP_BytesToKey (password, salt, keyBits, ivLen) { if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary') if (salt) { if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary') if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length') } var keyLen = keyBits / 8 var key = Buffer.alloc(keyLen) var iv = Buffer.alloc(ivLen || 0) var tmp = Buffer.alloc(0) while (keyLen > 0 || ivLen > 0) { var hash = new MD5() hash.update(tmp) hash.update(password) if (salt) hash.update(salt) tmp = hash.digest() var used = 0 if (keyLen > 0) { var keyStart = key.length - keyLen used = Math.min(keyLen, tmp.length) tmp.copy(key, keyStart, 0, used) keyLen -= used } if (used < tmp.length && ivLen > 0) { var ivStart = iv.length - ivLen var length = Math.min(ivLen, tmp.length - used) tmp.copy(iv, ivStart, used, used + length) ivLen -= length } } tmp.fill(0) return { key: key, iv: iv } } module.exports = EVP_BytesToKey },{"md5.js":266,"safe-buffer":318}],223:[function(require,module,exports){ 'use strict'; const toBytes = s => [...s].map(c => c.charCodeAt(0)); const xpiZipFilename = toBytes('META-INF/mozilla.rsa'); const oxmlContentTypes = toBytes('[Content_Types].xml'); const oxmlRels = toBytes('_rels/.rels'); module.exports = input => { const buf = input instanceof Uint8Array ? input : new Uint8Array(input); if (!(buf && buf.length > 1)) { return null; } const check = (header, options) => { options = Object.assign({ offset: 0 }, options); for (let i = 0; i < header.length; i++) { // If a bitmask is set if (options.mask) { // If header doesn't equal `buf` with bits masked off if (header[i] !== (options.mask[i] & buf[i + options.offset])) { return false; } } else if (header[i] !== buf[i + options.offset]) { return false; } } return true; }; const checkString = (header, options) => check(toBytes(header), options); if (check([0xFF, 0xD8, 0xFF])) { return { ext: 'jpg', mime: 'image/jpeg' }; } if (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) { return { ext: 'png', mime: 'image/png' }; } if (check([0x47, 0x49, 0x46])) { return { ext: 'gif', mime: 'image/gif' }; } if (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) { return { ext: 'webp', mime: 'image/webp' }; } if (check([0x46, 0x4C, 0x49, 0x46])) { return { ext: 'flif', mime: 'image/flif' }; } // Needs to be before `tif` check if ( (check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) && check([0x43, 0x52], {offset: 8}) ) { return { ext: 'cr2', mime: 'image/x-canon-cr2' }; } if ( check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A]) ) { return { ext: 'tif', mime: 'image/tiff' }; } if (check([0x42, 0x4D])) { return { ext: 'bmp', mime: 'image/bmp' }; } if (check([0x49, 0x49, 0xBC])) { return { ext: 'jxr', mime: 'image/vnd.ms-photo' }; } if (check([0x38, 0x42, 0x50, 0x53])) { return { ext: 'psd', mime: 'image/vnd.adobe.photoshop' }; } // Zip-based file formats // Need to be before the `zip` check if (check([0x50, 0x4B, 0x3, 0x4])) { if ( check([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30}) ) { return { ext: 'epub', mime: 'application/epub+zip' }; } // Assumes signed `.xpi` from addons.mozilla.org if (check(xpiZipFilename, {offset: 30})) { return { ext: 'xpi', mime: 'application/x-xpinstall' }; } if (checkString('mimetypeapplication/vnd.oasis.opendocument.text', {offset: 30})) { return { ext: 'odt', mime: 'application/vnd.oasis.opendocument.text' }; } if (checkString('mimetypeapplication/vnd.oasis.opendocument.spreadsheet', {offset: 30})) { return { ext: 'ods', mime: 'application/vnd.oasis.opendocument.spreadsheet' }; } if (checkString('mimetypeapplication/vnd.oasis.opendocument.presentation', {offset: 30})) { return { ext: 'odp', mime: 'application/vnd.oasis.opendocument.presentation' }; } // https://github.com/file/file/blob/master/magic/Magdir/msooxml if (check(oxmlContentTypes, {offset: 30}) || check(oxmlRels, {offset: 30})) { const sliced = buf.subarray(4, 4 + 2000); const nextZipHeaderIndex = arr => arr.findIndex((el, i, arr) => arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4); const header2Pos = nextZipHeaderIndex(sliced); if (header2Pos !== -1) { const slicedAgain = buf.subarray(header2Pos + 8, header2Pos + 8 + 1000); const header3Pos = nextZipHeaderIndex(slicedAgain); if (header3Pos !== -1) { const offset = 8 + header2Pos + header3Pos + 30; if (checkString('word/', {offset})) { return { ext: 'docx', mime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }; } if (checkString('ppt/', {offset})) { return { ext: 'pptx', mime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' }; } if (checkString('xl/', {offset})) { return { ext: 'xlsx', mime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }; } } } } } if ( check([0x50, 0x4B]) && (buf[2] === 0x3 || buf[2] === 0x5 || buf[2] === 0x7) && (buf[3] === 0x4 || buf[3] === 0x6 || buf[3] === 0x8) ) { return { ext: 'zip', mime: 'application/zip' }; } if (check([0x75, 0x73, 0x74, 0x61, 0x72], {offset: 257})) { return { ext: 'tar', mime: 'application/x-tar' }; } if ( check([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) && (buf[6] === 0x0 || buf[6] === 0x1) ) { return { ext: 'rar', mime: 'application/x-rar-compressed' }; } if (check([0x1F, 0x8B, 0x8])) { return { ext: 'gz', mime: 'application/gzip' }; } if (check([0x42, 0x5A, 0x68])) { return { ext: 'bz2', mime: 'application/x-bzip2' }; } if (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) { return { ext: '7z', mime: 'application/x-7z-compressed' }; } if (check([0x78, 0x01])) { return { ext: 'dmg', mime: 'application/x-apple-diskimage' }; } if (check([0x33, 0x67, 0x70, 0x35]) || // 3gp5 ( check([0x0, 0x0, 0x0]) && check([0x66, 0x74, 0x79, 0x70], {offset: 4}) && ( check([0x6D, 0x70, 0x34, 0x31], {offset: 8}) || // MP41 check([0x6D, 0x70, 0x34, 0x32], {offset: 8}) || // MP42 check([0x69, 0x73, 0x6F, 0x6D], {offset: 8}) || // ISOM check([0x69, 0x73, 0x6F, 0x32], {offset: 8}) || // ISO2 check([0x6D, 0x6D, 0x70, 0x34], {offset: 8}) || // MMP4 check([0x4D, 0x34, 0x56], {offset: 8}) || // M4V check([0x64, 0x61, 0x73, 0x68], {offset: 8}) // DASH ) )) { return { ext: 'mp4', mime: 'video/mp4' }; } if (check([0x4D, 0x54, 0x68, 0x64])) { return { ext: 'mid', mime: 'audio/midi' }; } // https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska if (check([0x1A, 0x45, 0xDF, 0xA3])) { const sliced = buf.subarray(4, 4 + 4096); const idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82); if (idPos !== -1) { const docTypePos = idPos + 3; const findDocType = type => [...type].every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0)); if (findDocType('matroska')) { return { ext: 'mkv', mime: 'video/x-matroska' }; } if (findDocType('webm')) { return { ext: 'webm', mime: 'video/webm' }; } } } if (check([0x0, 0x0, 0x0, 0x14, 0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20]) || check([0x66, 0x72, 0x65, 0x65], {offset: 4}) || check([0x66, 0x74, 0x79, 0x70, 0x71, 0x74, 0x20, 0x20], {offset: 4}) || check([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // MJPEG check([0x77, 0x69, 0x64, 0x65], {offset: 4})) { return { ext: 'mov', mime: 'video/quicktime' }; } // RIFF file format which might be AVI, WAV, QCP, etc if (check([0x52, 0x49, 0x46, 0x46])) { if (check([0x41, 0x56, 0x49], {offset: 8})) { return { ext: 'avi', mime: 'video/x-msvideo' }; } if (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) { return { ext: 'wav', mime: 'audio/x-wav' }; } // QLCM, QCP file if (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) { return { ext: 'qcp', mime: 'audio/qcelp' }; } } if (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) { return { ext: 'wmv', mime: 'video/x-ms-wmv' }; } if ( check([0x0, 0x0, 0x1, 0xBA]) || check([0x0, 0x0, 0x1, 0xB3]) ) { return { ext: 'mpg', mime: 'video/mpeg' }; } if (check([0x66, 0x74, 0x79, 0x70, 0x33, 0x67], {offset: 4})) { return { ext: '3gp', mime: 'video/3gpp' }; } // Check for MPEG header at different starting offsets for (let start = 0; start < 2 && start < (buf.length - 16); start++) { if ( check([0x49, 0x44, 0x33], {offset: start}) || // ID3 header check([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE2]}) // MPEG 1 or 2 Layer 3 header ) { return { ext: 'mp3', mime: 'audio/mpeg' }; } if ( check([0xFF, 0xE4], {offset: start, mask: [0xFF, 0xE4]}) // MPEG 1 or 2 Layer 2 header ) { return { ext: 'mp2', mime: 'audio/mpeg' }; } if ( check([0xFF, 0xF8], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 2 layer 0 using ADTS ) { return { ext: 'mp2', mime: 'audio/mpeg' }; } if ( check([0xFF, 0xF0], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 4 layer 0 using ADTS ) { return { ext: 'mp4', mime: 'audio/mpeg' }; } } if ( check([0x66, 0x74, 0x79, 0x70, 0x4D, 0x34, 0x41], {offset: 4}) || check([0x4D, 0x34, 0x41, 0x20]) ) { return { ext: 'm4a', mime: 'audio/m4a' }; } // Needs to be before `ogg` check if (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) { return { ext: 'opus', mime: 'audio/opus' }; } // If 'OggS' in first bytes, then OGG container if (check([0x4F, 0x67, 0x67, 0x53])) { // This is a OGG container // If ' theora' in header. if (check([0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61], {offset: 28})) { return { ext: 'ogv', mime: 'video/ogg' }; } // If '\x01video' in header. if (check([0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00], {offset: 28})) { return { ext: 'ogm', mime: 'video/ogg' }; } // If ' FLAC' in header https://xiph.org/flac/faq.html if (check([0x7F, 0x46, 0x4C, 0x41, 0x43], {offset: 28})) { return { ext: 'oga', mime: 'audio/ogg' }; } // 'Speex ' in header https://en.wikipedia.org/wiki/Speex if (check([0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20], {offset: 28})) { return { ext: 'spx', mime: 'audio/ogg' }; } // If '\x01vorbis' in header if (check([0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73], {offset: 28})) { return { ext: 'ogg', mime: 'audio/ogg' }; } // Default OGG container https://www.iana.org/assignments/media-types/application/ogg return { ext: 'ogx', mime: 'application/ogg' }; } if (check([0x66, 0x4C, 0x61, 0x43])) { return { ext: 'flac', mime: 'audio/x-flac' }; } if (check([0x4D, 0x41, 0x43, 0x20])) { return { ext: 'ape', mime: 'audio/ape' }; } if (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) { return { ext: 'amr', mime: 'audio/amr' }; } if (check([0x25, 0x50, 0x44, 0x46])) { return { ext: 'pdf', mime: 'application/pdf' }; } if (check([0x4D, 0x5A])) { return { ext: 'exe', mime: 'application/x-msdownload' }; } if ( (buf[0] === 0x43 || buf[0] === 0x46) && check([0x57, 0x53], {offset: 1}) ) { return { ext: 'swf', mime: 'application/x-shockwave-flash' }; } if (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) { return { ext: 'rtf', mime: 'application/rtf' }; } if (check([0x00, 0x61, 0x73, 0x6D])) { return { ext: 'wasm', mime: 'application/wasm' }; } if ( check([0x77, 0x4F, 0x46, 0x46]) && ( check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) ) ) { return { ext: 'woff', mime: 'font/woff' }; } if ( check([0x77, 0x4F, 0x46, 0x32]) && ( check([0x00, 0x01, 0x00, 0x00], {offset: 4}) || check([0x4F, 0x54, 0x54, 0x4F], {offset: 4}) ) ) { return { ext: 'woff2', mime: 'font/woff2' }; } if ( check([0x4C, 0x50], {offset: 34}) && ( check([0x00, 0x00, 0x01], {offset: 8}) || check([0x01, 0x00, 0x02], {offset: 8}) || check([0x02, 0x00, 0x02], {offset: 8}) ) ) { return { ext: 'eot', mime: 'application/octet-stream' }; } if (check([0x00, 0x01, 0x00, 0x00, 0x00])) { return { ext: 'ttf', mime: 'font/ttf' }; } if (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) { return { ext: 'otf', mime: 'font/otf' }; } if (check([0x00, 0x00, 0x01, 0x00])) { return { ext: 'ico', mime: 'image/x-icon' }; } if (check([0x00, 0x00, 0x02, 0x00])) { return { ext: 'cur', mime: 'image/x-icon' }; } if (check([0x46, 0x4C, 0x56, 0x01])) { return { ext: 'flv', mime: 'video/x-flv' }; } if (check([0x25, 0x21])) { return { ext: 'ps', mime: 'application/postscript' }; } if (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) { return { ext: 'xz', mime: 'application/x-xz' }; } if (check([0x53, 0x51, 0x4C, 0x69])) { return { ext: 'sqlite', mime: 'application/x-sqlite3' }; } if (check([0x4E, 0x45, 0x53, 0x1A])) { return { ext: 'nes', mime: 'application/x-nintendo-nes-rom' }; } if (check([0x43, 0x72, 0x32, 0x34])) { return { ext: 'crx', mime: 'application/x-google-chrome-extension' }; } if ( check([0x4D, 0x53, 0x43, 0x46]) || check([0x49, 0x53, 0x63, 0x28]) ) { return { ext: 'cab', mime: 'application/vnd.ms-cab-compressed' }; } // Needs to be before `ar` check if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) { return { ext: 'deb', mime: 'application/x-deb' }; } if (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) { return { ext: 'ar', mime: 'application/x-unix-archive' }; } if (check([0xED, 0xAB, 0xEE, 0xDB])) { return { ext: 'rpm', mime: 'application/x-rpm' }; } if ( check([0x1F, 0xA0]) || check([0x1F, 0x9D]) ) { return { ext: 'Z', mime: 'application/x-compress' }; } if (check([0x4C, 0x5A, 0x49, 0x50])) { return { ext: 'lz', mime: 'application/x-lzip' }; } if (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) { return { ext: 'msi', mime: 'application/x-msi' }; } if (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) { return { ext: 'mxf', mime: 'application/mxf' }; } if (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) { return { ext: 'mts', mime: 'video/mp2t' }; } if (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) { return { ext: 'blend', mime: 'application/x-blender' }; } if (check([0x42, 0x50, 0x47, 0xFB])) { return { ext: 'bpg', mime: 'image/bpg' }; } if (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) { // JPEG-2000 family if (check([0x6A, 0x70, 0x32, 0x20], {offset: 20})) { return { ext: 'jp2', mime: 'image/jp2' }; } if (check([0x6A, 0x70, 0x78, 0x20], {offset: 20})) { return { ext: 'jpx', mime: 'image/jpx' }; } if (check([0x6A, 0x70, 0x6D, 0x20], {offset: 20})) { return { ext: 'jpm', mime: 'image/jpm' }; } if (check([0x6D, 0x6A, 0x70, 0x32], {offset: 20})) { return { ext: 'mj2', mime: 'image/mj2' }; } } if (check([0x46, 0x4F, 0x52, 0x4D, 0x00])) { return { ext: 'aif', mime: 'audio/aiff' }; } if (checkString('} features load entire GeoJSON FeatureCollection * @returns {RBush} GeoJSON RBush * @example * var polys = turf.polygons([ * [[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]], * [[[-93, 32], [-83, 32], [-83, 39], [-93, 39], [-93, 32]]] * ]); * tree.load(polys); */ tree.load = function (features) { var load = []; // Load an Array of Features if (Array.isArray(features)) { features.forEach(function (feature) { if (feature.type !== 'Feature') throw new Error('invalid features'); feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature); load.push(feature); }); } else { // Load a FeatureCollection featureEach(features, function (feature) { if (feature.type !== 'Feature') throw new Error('invalid features'); feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature); load.push(feature); }); } return rbush.prototype.load.call(this, load); }; /** * [remove](https://github.com/mourner/rbush#removing-data) * * @param {Feature} feature remove single GeoJSON Feature * @param {Function} equals Pass a custom equals function to compare by value for removal. * @returns {RBush} GeoJSON RBush * @example * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]); * * tree.remove(poly); */ tree.remove = function (feature, equals) { if (feature.type !== 'Feature') throw new Error('invalid feature'); feature.bbox = feature.bbox ? feature.bbox : turfBBox(feature); return rbush.prototype.remove.call(this, feature, equals); }; /** * [clear](https://github.com/mourner/rbush#removing-data) * * @returns {RBush} GeoJSON Rbush * @example * tree.clear() */ tree.clear = function () { return rbush.prototype.clear.call(this); }; /** * [search](https://github.com/mourner/rbush#search) * * @param {BBox|FeatureCollection|Feature} geojson search with GeoJSON * @returns {FeatureCollection} all features that intersects with the given GeoJSON. * @example * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]); * * tree.search(poly); */ tree.search = function (geojson) { var features = rbush.prototype.search.call(this, this.toBBox(geojson)); return featureCollection(features); }; /** * [collides](https://github.com/mourner/rbush#collisions) * * @param {BBox|FeatureCollection|Feature} geojson collides with GeoJSON * @returns {boolean} true if there are any items intersecting the given GeoJSON, otherwise false. * @example * var poly = turf.polygon([[[-78, 41], [-67, 41], [-67, 48], [-78, 48], [-78, 41]]]); * * tree.collides(poly); */ tree.collides = function (geojson) { return rbush.prototype.collides.call(this, this.toBBox(geojson)); }; /** * [all](https://github.com/mourner/rbush#search) * * @returns {FeatureCollection} all the features in RBush * @example * tree.all() */ tree.all = function () { var features = rbush.prototype.all.call(this); return featureCollection(features); }; /** * [toJSON](https://github.com/mourner/rbush#export-and-import) * * @returns {any} export data as JSON object * @example * var exported = tree.toJSON() */ tree.toJSON = function () { return rbush.prototype.toJSON.call(this); }; /** * [fromJSON](https://github.com/mourner/rbush#export-and-import) * * @param {any} json import previously exported data * @returns {RBush} GeoJSON RBush * @example * var exported = { * "children": [ * { * "type": "Feature", * "geometry": { * "type": "Point", * "coordinates": [110, 50] * }, * "properties": {}, * "bbox": [110, 50, 110, 50] * } * ], * "height": 1, * "leaf": true, * "minX": 110, * "minY": 50, * "maxX": 110, * "maxY": 50 * } * tree.fromJSON(exported) */ tree.fromJSON = function (json) { return rbush.prototype.fromJSON.call(this, json); }; /** * Converts GeoJSON to {minX, minY, maxX, maxY} schema * * @private * @param {BBox|FeatureCollection|Feature} geojson feature(s) to retrieve BBox from * @returns {Object} converted to {minX, minY, maxX, maxY} */ tree.toBBox = function (geojson) { var bbox; if (geojson.bbox) bbox = geojson.bbox; else if (Array.isArray(geojson) && geojson.length === 4) bbox = geojson; else if (Array.isArray(geojson) && geojson.length === 6) bbox = [geojson[0], geojson[1], geojson[3], geojson[4]]; else if (geojson.type === 'Feature') bbox = turfBBox(geojson); else if (geojson.type === 'FeatureCollection') bbox = turfBBox(geojson); else throw new Error('invalid geojson') return { minX: bbox[0], minY: bbox[1], maxX: bbox[2], maxY: bbox[3] }; }; return tree; } module.exports = geojsonRbush; module.exports.default = geojsonRbush; },{"@turf/bbox":117,"@turf/helpers":123,"@turf/meta":225,"rbush":300}],225:[function(require,module,exports){ arguments[4][122][0].apply(exports,arguments) },{"@turf/helpers":123,"dup":122}],226:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.geojsonvt = factory()); }(this, (function () { 'use strict'; // calculate simplification data using optimized Douglas-Peucker algorithm function simplify(coords, first, last, sqTolerance) { var maxSqDist = sqTolerance; var mid = (last - first) >> 1; var minPosToMid = last - first; var index; var ax = coords[first]; var ay = coords[first + 1]; var bx = coords[last]; var by = coords[last + 1]; for (var i = first + 3; i < last; i += 3) { var d = getSqSegDist(coords[i], coords[i + 1], ax, ay, bx, by); if (d > maxSqDist) { index = i; maxSqDist = d; } else if (d === maxSqDist) { // a workaround to ensure we choose a pivot close to the middle of the list, // reducing recursion depth, for certain degenerate inputs // https://github.com/mapbox/geojson-vt/issues/104 var posToMid = Math.abs(i - mid); if (posToMid < minPosToMid) { index = i; minPosToMid = posToMid; } } } if (maxSqDist > sqTolerance) { if (index - first > 3) simplify(coords, first, index, sqTolerance); coords[index + 2] = maxSqDist; if (last - index > 3) simplify(coords, index, last, sqTolerance); } } // square distance from a point to a segment function getSqSegDist(px, py, x, y, bx, by) { var dx = bx - x; var dy = by - y; if (dx !== 0 || dy !== 0) { var t = ((px - x) * dx + (py - y) * dy) / (dx * dx + dy * dy); if (t > 1) { x = bx; y = by; } else if (t > 0) { x += dx * t; y += dy * t; } } dx = px - x; dy = py - y; return dx * dx + dy * dy; } function createFeature(id, type, geom, tags) { var feature = { id: typeof id === 'undefined' ? null : id, type: type, geometry: geom, tags: tags, minX: Infinity, minY: Infinity, maxX: -Infinity, maxY: -Infinity }; calcBBox(feature); return feature; } function calcBBox(feature) { var geom = feature.geometry; var type = feature.type; if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') { calcLineBBox(feature, geom); } else if (type === 'Polygon' || type === 'MultiLineString') { for (var i = 0; i < geom.length; i++) { calcLineBBox(feature, geom[i]); } } else if (type === 'MultiPolygon') { for (i = 0; i < geom.length; i++) { for (var j = 0; j < geom[i].length; j++) { calcLineBBox(feature, geom[i][j]); } } } } function calcLineBBox(feature, geom) { for (var i = 0; i < geom.length; i += 3) { feature.minX = Math.min(feature.minX, geom[i]); feature.minY = Math.min(feature.minY, geom[i + 1]); feature.maxX = Math.max(feature.maxX, geom[i]); feature.maxY = Math.max(feature.maxY, geom[i + 1]); } } // converts GeoJSON feature into an intermediate projected JSON vector format with simplification data function convert(data, options) { var features = []; if (data.type === 'FeatureCollection') { for (var i = 0; i < data.features.length; i++) { convertFeature(features, data.features[i], options, i); } } else if (data.type === 'Feature') { convertFeature(features, data, options); } else { // single geometry or a geometry collection convertFeature(features, {geometry: data}, options); } return features; } function convertFeature(features, geojson, options, index) { if (!geojson.geometry) return; var coords = geojson.geometry.coordinates; var type = geojson.geometry.type; var tolerance = Math.pow(options.tolerance / ((1 << options.maxZoom) * options.extent), 2); var geometry = []; var id = geojson.id; if (options.promoteId) { id = geojson.properties[options.promoteId]; } else if (options.generateId) { id = index || 0; } if (type === 'Point') { convertPoint(coords, geometry); } else if (type === 'MultiPoint') { for (var i = 0; i < coords.length; i++) { convertPoint(coords[i], geometry); } } else if (type === 'LineString') { convertLine(coords, geometry, tolerance, false); } else if (type === 'MultiLineString') { if (options.lineMetrics) { // explode into linestrings to be able to track metrics for (i = 0; i < coords.length; i++) { geometry = []; convertLine(coords[i], geometry, tolerance, false); features.push(createFeature(id, 'LineString', geometry, geojson.properties)); } return; } else { convertLines(coords, geometry, tolerance, false); } } else if (type === 'Polygon') { convertLines(coords, geometry, tolerance, true); } else if (type === 'MultiPolygon') { for (i = 0; i < coords.length; i++) { var polygon = []; convertLines(coords[i], polygon, tolerance, true); geometry.push(polygon); } } else if (type === 'GeometryCollection') { for (i = 0; i < geojson.geometry.geometries.length; i++) { convertFeature(features, { id: id, geometry: geojson.geometry.geometries[i], properties: geojson.properties }, options, index); } return; } else { throw new Error('Input data is not a valid GeoJSON object.'); } features.push(createFeature(id, type, geometry, geojson.properties)); } function convertPoint(coords, out) { out.push(projectX(coords[0])); out.push(projectY(coords[1])); out.push(0); } function convertLine(ring, out, tolerance, isPolygon) { var x0, y0; var size = 0; for (var j = 0; j < ring.length; j++) { var x = projectX(ring[j][0]); var y = projectY(ring[j][1]); out.push(x); out.push(y); out.push(0); if (j > 0) { if (isPolygon) { size += (x0 * y - x * y0) / 2; // area } else { size += Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)); // length } } x0 = x; y0 = y; } var last = out.length - 3; out[2] = 1; simplify(out, 0, last, tolerance); out[last + 2] = 1; out.size = Math.abs(size); out.start = 0; out.end = out.size; } function convertLines(rings, out, tolerance, isPolygon) { for (var i = 0; i < rings.length; i++) { var geom = []; convertLine(rings[i], geom, tolerance, isPolygon); out.push(geom); } } function projectX(x) { return x / 360 + 0.5; } function projectY(y) { var sin = Math.sin(y * Math.PI / 180); var y2 = 0.5 - 0.25 * Math.log((1 + sin) / (1 - sin)) / Math.PI; return y2 < 0 ? 0 : y2 > 1 ? 1 : y2; } /* clip features between two axis-parallel lines: * | | * ___|___ | / * / | \____|____/ * | | */ function clip(features, scale, k1, k2, axis, minAll, maxAll, options) { k1 /= scale; k2 /= scale; if (minAll >= k1 && maxAll < k2) return features; // trivial accept else if (maxAll < k1 || minAll >= k2) return null; // trivial reject var clipped = []; for (var i = 0; i < features.length; i++) { var feature = features[i]; var geometry = feature.geometry; var type = feature.type; var min = axis === 0 ? feature.minX : feature.minY; var max = axis === 0 ? feature.maxX : feature.maxY; if (min >= k1 && max < k2) { // trivial accept clipped.push(feature); continue; } else if (max < k1 || min >= k2) { // trivial reject continue; } var newGeometry = []; if (type === 'Point' || type === 'MultiPoint') { clipPoints(geometry, newGeometry, k1, k2, axis); } else if (type === 'LineString') { clipLine(geometry, newGeometry, k1, k2, axis, false, options.lineMetrics); } else if (type === 'MultiLineString') { clipLines(geometry, newGeometry, k1, k2, axis, false); } else if (type === 'Polygon') { clipLines(geometry, newGeometry, k1, k2, axis, true); } else if (type === 'MultiPolygon') { for (var j = 0; j < geometry.length; j++) { var polygon = []; clipLines(geometry[j], polygon, k1, k2, axis, true); if (polygon.length) { newGeometry.push(polygon); } } } if (newGeometry.length) { if (options.lineMetrics && type === 'LineString') { for (j = 0; j < newGeometry.length; j++) { clipped.push(createFeature(feature.id, type, newGeometry[j], feature.tags)); } continue; } if (type === 'LineString' || type === 'MultiLineString') { if (newGeometry.length === 1) { type = 'LineString'; newGeometry = newGeometry[0]; } else { type = 'MultiLineString'; } } if (type === 'Point' || type === 'MultiPoint') { type = newGeometry.length === 3 ? 'Point' : 'MultiPoint'; } clipped.push(createFeature(feature.id, type, newGeometry, feature.tags)); } } return clipped.length ? clipped : null; } function clipPoints(geom, newGeom, k1, k2, axis) { for (var i = 0; i < geom.length; i += 3) { var a = geom[i + axis]; if (a >= k1 && a <= k2) { newGeom.push(geom[i]); newGeom.push(geom[i + 1]); newGeom.push(geom[i + 2]); } } } function clipLine(geom, newGeom, k1, k2, axis, isPolygon, trackMetrics) { var slice = newSlice(geom); var intersect = axis === 0 ? intersectX : intersectY; var len = geom.start; var segLen, t; for (var i = 0; i < geom.length - 3; i += 3) { var ax = geom[i]; var ay = geom[i + 1]; var az = geom[i + 2]; var bx = geom[i + 3]; var by = geom[i + 4]; var a = axis === 0 ? ax : ay; var b = axis === 0 ? bx : by; var exited = false; if (trackMetrics) segLen = Math.sqrt(Math.pow(ax - bx, 2) + Math.pow(ay - by, 2)); if (a < k1) { // ---|--> | (line enters the clip region from the left) if (b > k1) { t = intersect(slice, ax, ay, bx, by, k1); if (trackMetrics) slice.start = len + segLen * t; } } else if (a > k2) { // | <--|--- (line enters the clip region from the right) if (b < k2) { t = intersect(slice, ax, ay, bx, by, k2); if (trackMetrics) slice.start = len + segLen * t; } } else { addPoint(slice, ax, ay, az); } if (b < k1 && a >= k1) { // <--|--- | or <--|-----|--- (line exits the clip region on the left) t = intersect(slice, ax, ay, bx, by, k1); exited = true; } if (b > k2 && a <= k2) { // | ---|--> or ---|-----|--> (line exits the clip region on the right) t = intersect(slice, ax, ay, bx, by, k2); exited = true; } if (!isPolygon && exited) { if (trackMetrics) slice.end = len + segLen * t; newGeom.push(slice); slice = newSlice(geom); } if (trackMetrics) len += segLen; } // add the last point var last = geom.length - 3; ax = geom[last]; ay = geom[last + 1]; az = geom[last + 2]; a = axis === 0 ? ax : ay; if (a >= k1 && a <= k2) addPoint(slice, ax, ay, az); // close the polygon if its endpoints are not the same after clipping last = slice.length - 3; if (isPolygon && last >= 3 && (slice[last] !== slice[0] || slice[last + 1] !== slice[1])) { addPoint(slice, slice[0], slice[1], slice[2]); } // add the final slice if (slice.length) { newGeom.push(slice); } } function newSlice(line) { var slice = []; slice.size = line.size; slice.start = line.start; slice.end = line.end; return slice; } function clipLines(geom, newGeom, k1, k2, axis, isPolygon) { for (var i = 0; i < geom.length; i++) { clipLine(geom[i], newGeom, k1, k2, axis, isPolygon, false); } } function addPoint(out, x, y, z) { out.push(x); out.push(y); out.push(z); } function intersectX(out, ax, ay, bx, by, x) { var t = (x - ax) / (bx - ax); out.push(x); out.push(ay + (by - ay) * t); out.push(1); return t; } function intersectY(out, ax, ay, bx, by, y) { var t = (y - ay) / (by - ay); out.push(ax + (bx - ax) * t); out.push(y); out.push(1); return t; } function wrap(features, options) { var buffer = options.buffer / options.extent; var merged = features; var left = clip(features, 1, -1 - buffer, buffer, 0, -1, 2, options); // left world copy var right = clip(features, 1, 1 - buffer, 2 + buffer, 0, -1, 2, options); // right world copy if (left || right) { merged = clip(features, 1, -buffer, 1 + buffer, 0, -1, 2, options) || []; // center world copy if (left) merged = shiftFeatureCoords(left, 1).concat(merged); // merge left into center if (right) merged = merged.concat(shiftFeatureCoords(right, -1)); // merge right into center } return merged; } function shiftFeatureCoords(features, offset) { var newFeatures = []; for (var i = 0; i < features.length; i++) { var feature = features[i], type = feature.type; var newGeometry; if (type === 'Point' || type === 'MultiPoint' || type === 'LineString') { newGeometry = shiftCoords(feature.geometry, offset); } else if (type === 'MultiLineString' || type === 'Polygon') { newGeometry = []; for (var j = 0; j < feature.geometry.length; j++) { newGeometry.push(shiftCoords(feature.geometry[j], offset)); } } else if (type === 'MultiPolygon') { newGeometry = []; for (j = 0; j < feature.geometry.length; j++) { var newPolygon = []; for (var k = 0; k < feature.geometry[j].length; k++) { newPolygon.push(shiftCoords(feature.geometry[j][k], offset)); } newGeometry.push(newPolygon); } } newFeatures.push(createFeature(feature.id, type, newGeometry, feature.tags)); } return newFeatures; } function shiftCoords(points, offset) { var newPoints = []; newPoints.size = points.size; if (points.start !== undefined) { newPoints.start = points.start; newPoints.end = points.end; } for (var i = 0; i < points.length; i += 3) { newPoints.push(points[i] + offset, points[i + 1], points[i + 2]); } return newPoints; } // Transforms the coordinates of each feature in the given tile from // mercator-projected space into (extent x extent) tile space. function transformTile(tile, extent) { if (tile.transformed) return tile; var z2 = 1 << tile.z, tx = tile.x, ty = tile.y, i, j, k; for (i = 0; i < tile.features.length; i++) { var feature = tile.features[i], geom = feature.geometry, type = feature.type; feature.geometry = []; if (type === 1) { for (j = 0; j < geom.length; j += 2) { feature.geometry.push(transformPoint(geom[j], geom[j + 1], extent, z2, tx, ty)); } } else { for (j = 0; j < geom.length; j++) { var ring = []; for (k = 0; k < geom[j].length; k += 2) { ring.push(transformPoint(geom[j][k], geom[j][k + 1], extent, z2, tx, ty)); } feature.geometry.push(ring); } } } tile.transformed = true; return tile; } function transformPoint(x, y, extent, z2, tx, ty) { return [ Math.round(extent * (x * z2 - tx)), Math.round(extent * (y * z2 - ty))]; } function createTile(features, z, tx, ty, options) { var tolerance = z === options.maxZoom ? 0 : options.tolerance / ((1 << z) * options.extent); var tile = { features: [], numPoints: 0, numSimplified: 0, numFeatures: 0, source: null, x: tx, y: ty, z: z, transformed: false, minX: 2, minY: 1, maxX: -1, maxY: 0 }; for (var i = 0; i < features.length; i++) { tile.numFeatures++; addFeature(tile, features[i], tolerance, options); var minX = features[i].minX; var minY = features[i].minY; var maxX = features[i].maxX; var maxY = features[i].maxY; if (minX < tile.minX) tile.minX = minX; if (minY < tile.minY) tile.minY = minY; if (maxX > tile.maxX) tile.maxX = maxX; if (maxY > tile.maxY) tile.maxY = maxY; } return tile; } function addFeature(tile, feature, tolerance, options) { var geom = feature.geometry, type = feature.type, simplified = []; if (type === 'Point' || type === 'MultiPoint') { for (var i = 0; i < geom.length; i += 3) { simplified.push(geom[i]); simplified.push(geom[i + 1]); tile.numPoints++; tile.numSimplified++; } } else if (type === 'LineString') { addLine(simplified, geom, tile, tolerance, false, false); } else if (type === 'MultiLineString' || type === 'Polygon') { for (i = 0; i < geom.length; i++) { addLine(simplified, geom[i], tile, tolerance, type === 'Polygon', i === 0); } } else if (type === 'MultiPolygon') { for (var k = 0; k < geom.length; k++) { var polygon = geom[k]; for (i = 0; i < polygon.length; i++) { addLine(simplified, polygon[i], tile, tolerance, true, i === 0); } } } if (simplified.length) { var tags = feature.tags || null; if (type === 'LineString' && options.lineMetrics) { tags = {}; for (var key in feature.tags) tags[key] = feature.tags[key]; tags['mapbox_clip_start'] = geom.start / geom.size; tags['mapbox_clip_end'] = geom.end / geom.size; } var tileFeature = { geometry: simplified, type: type === 'Polygon' || type === 'MultiPolygon' ? 3 : type === 'LineString' || type === 'MultiLineString' ? 2 : 1, tags: tags }; if (feature.id !== null) { tileFeature.id = feature.id; } tile.features.push(tileFeature); } } function addLine(result, geom, tile, tolerance, isPolygon, isOuter) { var sqTolerance = tolerance * tolerance; if (tolerance > 0 && (geom.size < (isPolygon ? sqTolerance : tolerance))) { tile.numPoints += geom.length / 3; return; } var ring = []; for (var i = 0; i < geom.length; i += 3) { if (tolerance === 0 || geom[i + 2] > sqTolerance) { tile.numSimplified++; ring.push(geom[i]); ring.push(geom[i + 1]); } tile.numPoints++; } if (isPolygon) rewind(ring, isOuter); result.push(ring); } function rewind(ring, clockwise) { var area = 0; for (var i = 0, len = ring.length, j = len - 2; i < len; j = i, i += 2) { area += (ring[i] - ring[j]) * (ring[i + 1] + ring[j + 1]); } if (area > 0 === clockwise) { for (i = 0, len = ring.length; i < len / 2; i += 2) { var x = ring[i]; var y = ring[i + 1]; ring[i] = ring[len - 2 - i]; ring[i + 1] = ring[len - 1 - i]; ring[len - 2 - i] = x; ring[len - 1 - i] = y; } } } function geojsonvt(data, options) { return new GeoJSONVT(data, options); } function GeoJSONVT(data, options) { options = this.options = extend(Object.create(this.options), options); var debug = options.debug; if (debug) console.time('preprocess data'); if (options.maxZoom < 0 || options.maxZoom > 24) throw new Error('maxZoom should be in the 0-24 range'); if (options.promoteId && options.generateId) throw new Error('promoteId and generateId cannot be used together.'); var features = convert(data, options); this.tiles = {}; this.tileCoords = []; if (debug) { console.timeEnd('preprocess data'); console.log('index: maxZoom: %d, maxPoints: %d', options.indexMaxZoom, options.indexMaxPoints); console.time('generate tiles'); this.stats = {}; this.total = 0; } features = wrap(features, options); // start slicing from the top tile down if (features.length) this.splitTile(features, 0, 0, 0); if (debug) { if (features.length) console.log('features: %d, points: %d', this.tiles[0].numFeatures, this.tiles[0].numPoints); console.timeEnd('generate tiles'); console.log('tiles generated:', this.total, JSON.stringify(this.stats)); } } GeoJSONVT.prototype.options = { maxZoom: 14, // max zoom to preserve detail on indexMaxZoom: 5, // max zoom in the tile index indexMaxPoints: 100000, // max number of points per tile in the tile index tolerance: 3, // simplification tolerance (higher means simpler) extent: 4096, // tile extent buffer: 64, // tile buffer on each side lineMetrics: false, // whether to calculate line metrics promoteId: null, // name of a feature property to be promoted to feature.id generateId: false, // whether to generate feature ids. Cannot be used with promoteId debug: 0 // logging level (0, 1 or 2) }; GeoJSONVT.prototype.splitTile = function (features, z, x, y, cz, cx, cy) { var stack = [features, z, x, y], options = this.options, debug = options.debug; // avoid recursion by using a processing queue while (stack.length) { y = stack.pop(); x = stack.pop(); z = stack.pop(); features = stack.pop(); var z2 = 1 << z, id = toID(z, x, y), tile = this.tiles[id]; if (!tile) { if (debug > 1) console.time('creation'); tile = this.tiles[id] = createTile(features, z, x, y, options); this.tileCoords.push({z: z, x: x, y: y}); if (debug) { if (debug > 1) { console.log('tile z%d-%d-%d (features: %d, points: %d, simplified: %d)', z, x, y, tile.numFeatures, tile.numPoints, tile.numSimplified); console.timeEnd('creation'); } var key = 'z' + z; this.stats[key] = (this.stats[key] || 0) + 1; this.total++; } } // save reference to original geometry in tile so that we can drill down later if we stop now tile.source = features; // if it's the first-pass tiling if (!cz) { // stop tiling if we reached max zoom, or if the tile is too simple if (z === options.indexMaxZoom || tile.numPoints <= options.indexMaxPoints) continue; // if a drilldown to a specific tile } else { // stop tiling if we reached base zoom or our target tile zoom if (z === options.maxZoom || z === cz) continue; // stop tiling if it's not an ancestor of the target tile var m = 1 << (cz - z); if (x !== Math.floor(cx / m) || y !== Math.floor(cy / m)) continue; } // if we slice further down, no need to keep source geometry tile.source = null; if (features.length === 0) continue; if (debug > 1) console.time('clipping'); // values we'll use for clipping var k1 = 0.5 * options.buffer / options.extent, k2 = 0.5 - k1, k3 = 0.5 + k1, k4 = 1 + k1, tl, bl, tr, br, left, right; tl = bl = tr = br = null; left = clip(features, z2, x - k1, x + k3, 0, tile.minX, tile.maxX, options); right = clip(features, z2, x + k2, x + k4, 0, tile.minX, tile.maxX, options); features = null; if (left) { tl = clip(left, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options); bl = clip(left, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options); left = null; } if (right) { tr = clip(right, z2, y - k1, y + k3, 1, tile.minY, tile.maxY, options); br = clip(right, z2, y + k2, y + k4, 1, tile.minY, tile.maxY, options); right = null; } if (debug > 1) console.timeEnd('clipping'); stack.push(tl || [], z + 1, x * 2, y * 2); stack.push(bl || [], z + 1, x * 2, y * 2 + 1); stack.push(tr || [], z + 1, x * 2 + 1, y * 2); stack.push(br || [], z + 1, x * 2 + 1, y * 2 + 1); } }; GeoJSONVT.prototype.getTile = function (z, x, y) { var options = this.options, extent = options.extent, debug = options.debug; if (z < 0 || z > 24) return null; var z2 = 1 << z; x = ((x % z2) + z2) % z2; // wrap tile x coordinate var id = toID(z, x, y); if (this.tiles[id]) return transformTile(this.tiles[id], extent); if (debug > 1) console.log('drilling down to z%d-%d-%d', z, x, y); var z0 = z, x0 = x, y0 = y, parent; while (!parent && z0 > 0) { z0--; x0 = Math.floor(x0 / 2); y0 = Math.floor(y0 / 2); parent = this.tiles[toID(z0, x0, y0)]; } if (!parent || !parent.source) return null; // if we found a parent tile containing the original geometry, we can drill down from it if (debug > 1) console.log('found parent tile z%d-%d-%d', z0, x0, y0); if (debug > 1) console.time('drilling down'); this.splitTile(parent.source, z0, x0, y0, z, x, y); if (debug > 1) console.timeEnd('drilling down'); return this.tiles[id] ? transformTile(this.tiles[id], extent) : null; }; function toID(z, x, y) { return (((1 << z) * y + x) * 32) + z; } function extend(dest, src) { for (var i in src) dest[i] = src[i]; return dest; } return geojsonvt; }))); },{}],227:[function(require,module,exports){ 'use strict' var Buffer = require('safe-buffer').Buffer var Transform = require('stream').Transform var inherits = require('inherits') function throwIfNotStringOrBuffer (val, prefix) { if (!Buffer.isBuffer(val) && typeof val !== 'string') { throw new TypeError(prefix + ' must be a string or a buffer') } } function HashBase (blockSize) { Transform.call(this) this._block = Buffer.allocUnsafe(blockSize) this._blockSize = blockSize this._blockOffset = 0 this._length = [0, 0, 0, 0] this._finalized = false } inherits(HashBase, Transform) HashBase.prototype._transform = function (chunk, encoding, callback) { var error = null try { this.update(chunk, encoding) } catch (err) { error = err } callback(error) } HashBase.prototype._flush = function (callback) { var error = null try { this.push(this.digest()) } catch (err) { error = err } callback(error) } HashBase.prototype.update = function (data, encoding) { throwIfNotStringOrBuffer(data, 'Data') if (this._finalized) throw new Error('Digest already called') if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding) // consume data var block = this._block var offset = 0 while (this._blockOffset + data.length - offset >= this._blockSize) { for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++] this._update() this._blockOffset = 0 } while (offset < data.length) block[this._blockOffset++] = data[offset++] // update length for (var j = 0, carry = data.length * 8; carry > 0; ++j) { this._length[j] += carry carry = (this._length[j] / 0x0100000000) | 0 if (carry > 0) this._length[j] -= 0x0100000000 * carry } return this } HashBase.prototype._update = function () { throw new Error('_update is not implemented') } HashBase.prototype.digest = function (encoding) { if (this._finalized) throw new Error('Digest already called') this._finalized = true var digest = this._digest() if (encoding !== undefined) digest = digest.toString(encoding) // reset state this._block.fill(0) this._blockOffset = 0 for (var i = 0; i < 4; ++i) this._length[i] = 0 return digest } HashBase.prototype._digest = function () { throw new Error('_digest is not implemented') } module.exports = HashBase },{"inherits":262,"safe-buffer":318,"stream":328}],228:[function(require,module,exports){ var hash = exports; hash.utils = require('./hash/utils'); hash.common = require('./hash/common'); hash.sha = require('./hash/sha'); hash.ripemd = require('./hash/ripemd'); hash.hmac = require('./hash/hmac'); // Proxy hash functions to the main object hash.sha1 = hash.sha.sha1; hash.sha256 = hash.sha.sha256; hash.sha224 = hash.sha.sha224; hash.sha384 = hash.sha.sha384; hash.sha512 = hash.sha.sha512; hash.ripemd160 = hash.ripemd.ripemd160; },{"./hash/common":229,"./hash/hmac":230,"./hash/ripemd":231,"./hash/sha":232,"./hash/utils":239}],229:[function(require,module,exports){ 'use strict'; var utils = require('./utils'); var assert = require('minimalistic-assert'); function BlockHash() { this.pending = null; this.pendingTotal = 0; this.blockSize = this.constructor.blockSize; this.outSize = this.constructor.outSize; this.hmacStrength = this.constructor.hmacStrength; this.padLength = this.constructor.padLength / 8; this.endian = 'big'; this._delta8 = this.blockSize / 8; this._delta32 = this.blockSize / 32; } exports.BlockHash = BlockHash; BlockHash.prototype.update = function update(msg, enc) { // Convert message to array, pad it, and join into 32bit blocks msg = utils.toArray(msg, enc); if (!this.pending) this.pending = msg; else this.pending = this.pending.concat(msg); this.pendingTotal += msg.length; // Enough data, try updating if (this.pending.length >= this._delta8) { msg = this.pending; // Process pending data in blocks var r = msg.length % this._delta8; this.pending = msg.slice(msg.length - r, msg.length); if (this.pending.length === 0) this.pending = null; msg = utils.join32(msg, 0, msg.length - r, this.endian); for (var i = 0; i < msg.length; i += this._delta32) this._update(msg, i, i + this._delta32); } return this; }; BlockHash.prototype.digest = function digest(enc) { this.update(this._pad()); assert(this.pending === null); return this._digest(enc); }; BlockHash.prototype._pad = function pad() { var len = this.pendingTotal; var bytes = this._delta8; var k = bytes - ((len + this.padLength) % bytes); var res = new Array(k + this.padLength); res[0] = 0x80; for (var i = 1; i < k; i++) res[i] = 0; // Append length len <<= 3; if (this.endian === 'big') { for (var t = 8; t < this.padLength; t++) res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = (len >>> 24) & 0xff; res[i++] = (len >>> 16) & 0xff; res[i++] = (len >>> 8) & 0xff; res[i++] = len & 0xff; } else { res[i++] = len & 0xff; res[i++] = (len >>> 8) & 0xff; res[i++] = (len >>> 16) & 0xff; res[i++] = (len >>> 24) & 0xff; res[i++] = 0; res[i++] = 0; res[i++] = 0; res[i++] = 0; for (t = 8; t < this.padLength; t++) res[i++] = 0; } return res; }; },{"./utils":239,"minimalistic-assert":268}],230:[function(require,module,exports){ 'use strict'; var utils = require('./utils'); var assert = require('minimalistic-assert'); function Hmac(hash, key, enc) { if (!(this instanceof Hmac)) return new Hmac(hash, key, enc); this.Hash = hash; this.blockSize = hash.blockSize / 8; this.outSize = hash.outSize / 8; this.inner = null; this.outer = null; this._init(utils.toArray(key, enc)); } module.exports = Hmac; Hmac.prototype._init = function init(key) { // Shorten key, if needed if (key.length > this.blockSize) key = new this.Hash().update(key).digest(); assert(key.length <= this.blockSize); // Add padding to key for (var i = key.length; i < this.blockSize; i++) key.push(0); for (i = 0; i < key.length; i++) key[i] ^= 0x36; this.inner = new this.Hash().update(key); // 0x36 ^ 0x5c = 0x6a for (i = 0; i < key.length; i++) key[i] ^= 0x6a; this.outer = new this.Hash().update(key); }; Hmac.prototype.update = function update(msg, enc) { this.inner.update(msg, enc); return this; }; Hmac.prototype.digest = function digest(enc) { this.outer.update(this.inner.digest()); return this.outer.digest(enc); }; },{"./utils":239,"minimalistic-assert":268}],231:[function(require,module,exports){ 'use strict'; var utils = require('./utils'); var common = require('./common'); var rotl32 = utils.rotl32; var sum32 = utils.sum32; var sum32_3 = utils.sum32_3; var sum32_4 = utils.sum32_4; var BlockHash = common.BlockHash; function RIPEMD160() { if (!(this instanceof RIPEMD160)) return new RIPEMD160(); BlockHash.call(this); this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; this.endian = 'little'; } utils.inherits(RIPEMD160, BlockHash); exports.ripemd160 = RIPEMD160; RIPEMD160.blockSize = 512; RIPEMD160.outSize = 160; RIPEMD160.hmacStrength = 192; RIPEMD160.padLength = 64; RIPEMD160.prototype._update = function update(msg, start) { var A = this.h[0]; var B = this.h[1]; var C = this.h[2]; var D = this.h[3]; var E = this.h[4]; var Ah = A; var Bh = B; var Ch = C; var Dh = D; var Eh = E; for (var j = 0; j < 80; j++) { var T = sum32( rotl32( sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E); A = E; E = D; D = rotl32(C, 10); C = B; B = T; T = sum32( rotl32( sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh); Ah = Eh; Eh = Dh; Dh = rotl32(Ch, 10); Ch = Bh; Bh = T; } T = sum32_3(this.h[1], C, Dh); this.h[1] = sum32_3(this.h[2], D, Eh); this.h[2] = sum32_3(this.h[3], E, Ah); this.h[3] = sum32_3(this.h[4], A, Bh); this.h[4] = sum32_3(this.h[0], B, Ch); this.h[0] = T; }; RIPEMD160.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'little'); else return utils.split32(this.h, 'little'); }; function f(j, x, y, z) { if (j <= 15) return x ^ y ^ z; else if (j <= 31) return (x & y) | ((~x) & z); else if (j <= 47) return (x | (~y)) ^ z; else if (j <= 63) return (x & z) | (y & (~z)); else return x ^ (y | (~z)); } function K(j) { if (j <= 15) return 0x00000000; else if (j <= 31) return 0x5a827999; else if (j <= 47) return 0x6ed9eba1; else if (j <= 63) return 0x8f1bbcdc; else return 0xa953fd4e; } function Kh(j) { if (j <= 15) return 0x50a28be6; else if (j <= 31) return 0x5c4dd124; else if (j <= 47) return 0x6d703ef3; else if (j <= 63) return 0x7a6d76e9; else return 0x00000000; } var r = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 ]; var rh = [ 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 ]; var s = [ 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]; var sh = [ 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]; },{"./common":229,"./utils":239}],232:[function(require,module,exports){ 'use strict'; exports.sha1 = require('./sha/1'); exports.sha224 = require('./sha/224'); exports.sha256 = require('./sha/256'); exports.sha384 = require('./sha/384'); exports.sha512 = require('./sha/512'); },{"./sha/1":233,"./sha/224":234,"./sha/256":235,"./sha/384":236,"./sha/512":237}],233:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var common = require('../common'); var shaCommon = require('./common'); var rotl32 = utils.rotl32; var sum32 = utils.sum32; var sum32_5 = utils.sum32_5; var ft_1 = shaCommon.ft_1; var BlockHash = common.BlockHash; var sha1_K = [ 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6 ]; function SHA1() { if (!(this instanceof SHA1)) return new SHA1(); BlockHash.call(this); this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ]; this.W = new Array(80); } utils.inherits(SHA1, BlockHash); module.exports = SHA1; SHA1.blockSize = 512; SHA1.outSize = 160; SHA1.hmacStrength = 80; SHA1.padLength = 64; SHA1.prototype._update = function _update(msg, start) { var W = this.W; for (var i = 0; i < 16; i++) W[i] = msg[start + i]; for(; i < W.length; i++) W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1); var a = this.h[0]; var b = this.h[1]; var c = this.h[2]; var d = this.h[3]; var e = this.h[4]; for (i = 0; i < W.length; i++) { var s = ~~(i / 20); var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]); e = d; d = c; c = rotl32(b, 30); b = a; a = t; } this.h[0] = sum32(this.h[0], a); this.h[1] = sum32(this.h[1], b); this.h[2] = sum32(this.h[2], c); this.h[3] = sum32(this.h[3], d); this.h[4] = sum32(this.h[4], e); }; SHA1.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'big'); else return utils.split32(this.h, 'big'); }; },{"../common":229,"../utils":239,"./common":238}],234:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var SHA256 = require('./256'); function SHA224() { if (!(this instanceof SHA224)) return new SHA224(); SHA256.call(this); this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ]; } utils.inherits(SHA224, SHA256); module.exports = SHA224; SHA224.blockSize = 512; SHA224.outSize = 224; SHA224.hmacStrength = 192; SHA224.padLength = 64; SHA224.prototype._digest = function digest(enc) { // Just truncate output if (enc === 'hex') return utils.toHex32(this.h.slice(0, 7), 'big'); else return utils.split32(this.h.slice(0, 7), 'big'); }; },{"../utils":239,"./256":235}],235:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var common = require('../common'); var shaCommon = require('./common'); var assert = require('minimalistic-assert'); var sum32 = utils.sum32; var sum32_4 = utils.sum32_4; var sum32_5 = utils.sum32_5; var ch32 = shaCommon.ch32; var maj32 = shaCommon.maj32; var s0_256 = shaCommon.s0_256; var s1_256 = shaCommon.s1_256; var g0_256 = shaCommon.g0_256; var g1_256 = shaCommon.g1_256; var BlockHash = common.BlockHash; var sha256_K = [ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 ]; function SHA256() { if (!(this instanceof SHA256)) return new SHA256(); BlockHash.call(this); this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ]; this.k = sha256_K; this.W = new Array(64); } utils.inherits(SHA256, BlockHash); module.exports = SHA256; SHA256.blockSize = 512; SHA256.outSize = 256; SHA256.hmacStrength = 192; SHA256.padLength = 64; SHA256.prototype._update = function _update(msg, start) { var W = this.W; for (var i = 0; i < 16; i++) W[i] = msg[start + i]; for (; i < W.length; i++) W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]); var a = this.h[0]; var b = this.h[1]; var c = this.h[2]; var d = this.h[3]; var e = this.h[4]; var f = this.h[5]; var g = this.h[6]; var h = this.h[7]; assert(this.k.length === W.length); for (i = 0; i < W.length; i++) { var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]); var T2 = sum32(s0_256(a), maj32(a, b, c)); h = g; g = f; f = e; e = sum32(d, T1); d = c; c = b; b = a; a = sum32(T1, T2); } this.h[0] = sum32(this.h[0], a); this.h[1] = sum32(this.h[1], b); this.h[2] = sum32(this.h[2], c); this.h[3] = sum32(this.h[3], d); this.h[4] = sum32(this.h[4], e); this.h[5] = sum32(this.h[5], f); this.h[6] = sum32(this.h[6], g); this.h[7] = sum32(this.h[7], h); }; SHA256.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'big'); else return utils.split32(this.h, 'big'); }; },{"../common":229,"../utils":239,"./common":238,"minimalistic-assert":268}],236:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var SHA512 = require('./512'); function SHA384() { if (!(this instanceof SHA384)) return new SHA384(); SHA512.call(this); this.h = [ 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939, 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4 ]; } utils.inherits(SHA384, SHA512); module.exports = SHA384; SHA384.blockSize = 1024; SHA384.outSize = 384; SHA384.hmacStrength = 192; SHA384.padLength = 128; SHA384.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h.slice(0, 12), 'big'); else return utils.split32(this.h.slice(0, 12), 'big'); }; },{"../utils":239,"./512":237}],237:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var common = require('../common'); var assert = require('minimalistic-assert'); var rotr64_hi = utils.rotr64_hi; var rotr64_lo = utils.rotr64_lo; var shr64_hi = utils.shr64_hi; var shr64_lo = utils.shr64_lo; var sum64 = utils.sum64; var sum64_hi = utils.sum64_hi; var sum64_lo = utils.sum64_lo; var sum64_4_hi = utils.sum64_4_hi; var sum64_4_lo = utils.sum64_4_lo; var sum64_5_hi = utils.sum64_5_hi; var sum64_5_lo = utils.sum64_5_lo; var BlockHash = common.BlockHash; var sha512_K = [ 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 ]; function SHA512() { if (!(this instanceof SHA512)) return new SHA512(); BlockHash.call(this); this.h = [ 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179 ]; this.k = sha512_K; this.W = new Array(160); } utils.inherits(SHA512, BlockHash); module.exports = SHA512; SHA512.blockSize = 1024; SHA512.outSize = 512; SHA512.hmacStrength = 192; SHA512.padLength = 128; SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) { var W = this.W; // 32 x 32bit words for (var i = 0; i < 32; i++) W[i] = msg[start + i]; for (; i < W.length; i += 2) { var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]); var c1_hi = W[i - 14]; // i - 7 var c1_lo = W[i - 13]; var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]); var c3_hi = W[i - 32]; // i - 16 var c3_lo = W[i - 31]; W[i] = sum64_4_hi( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); W[i + 1] = sum64_4_lo( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo); } }; SHA512.prototype._update = function _update(msg, start) { this._prepareBlock(msg, start); var W = this.W; var ah = this.h[0]; var al = this.h[1]; var bh = this.h[2]; var bl = this.h[3]; var ch = this.h[4]; var cl = this.h[5]; var dh = this.h[6]; var dl = this.h[7]; var eh = this.h[8]; var el = this.h[9]; var fh = this.h[10]; var fl = this.h[11]; var gh = this.h[12]; var gl = this.h[13]; var hh = this.h[14]; var hl = this.h[15]; assert(this.k.length === W.length); for (var i = 0; i < W.length; i += 2) { var c0_hi = hh; var c0_lo = hl; var c1_hi = s1_512_hi(eh, el); var c1_lo = s1_512_lo(eh, el); var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl); var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl); var c3_hi = this.k[i]; var c3_lo = this.k[i + 1]; var c4_hi = W[i]; var c4_lo = W[i + 1]; var T1_hi = sum64_5_hi( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); var T1_lo = sum64_5_lo( c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo); c0_hi = s0_512_hi(ah, al); c0_lo = s0_512_lo(ah, al); c1_hi = maj64_hi(ah, al, bh, bl, ch, cl); c1_lo = maj64_lo(ah, al, bh, bl, ch, cl); var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo); var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo); hh = gh; hl = gl; gh = fh; gl = fl; fh = eh; fl = el; eh = sum64_hi(dh, dl, T1_hi, T1_lo); el = sum64_lo(dl, dl, T1_hi, T1_lo); dh = ch; dl = cl; ch = bh; cl = bl; bh = ah; bl = al; ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo); al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo); } sum64(this.h, 0, ah, al); sum64(this.h, 2, bh, bl); sum64(this.h, 4, ch, cl); sum64(this.h, 6, dh, dl); sum64(this.h, 8, eh, el); sum64(this.h, 10, fh, fl); sum64(this.h, 12, gh, gl); sum64(this.h, 14, hh, hl); }; SHA512.prototype._digest = function digest(enc) { if (enc === 'hex') return utils.toHex32(this.h, 'big'); else return utils.split32(this.h, 'big'); }; function ch64_hi(xh, xl, yh, yl, zh) { var r = (xh & yh) ^ ((~xh) & zh); if (r < 0) r += 0x100000000; return r; } function ch64_lo(xh, xl, yh, yl, zh, zl) { var r = (xl & yl) ^ ((~xl) & zl); if (r < 0) r += 0x100000000; return r; } function maj64_hi(xh, xl, yh, yl, zh) { var r = (xh & yh) ^ (xh & zh) ^ (yh & zh); if (r < 0) r += 0x100000000; return r; } function maj64_lo(xh, xl, yh, yl, zh, zl) { var r = (xl & yl) ^ (xl & zl) ^ (yl & zl); if (r < 0) r += 0x100000000; return r; } function s0_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 28); var c1_hi = rotr64_hi(xl, xh, 2); // 34 var c2_hi = rotr64_hi(xl, xh, 7); // 39 var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function s0_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 28); var c1_lo = rotr64_lo(xl, xh, 2); // 34 var c2_lo = rotr64_lo(xl, xh, 7); // 39 var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } function s1_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 14); var c1_hi = rotr64_hi(xh, xl, 18); var c2_hi = rotr64_hi(xl, xh, 9); // 41 var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function s1_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 14); var c1_lo = rotr64_lo(xh, xl, 18); var c2_lo = rotr64_lo(xl, xh, 9); // 41 var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } function g0_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 1); var c1_hi = rotr64_hi(xh, xl, 8); var c2_hi = shr64_hi(xh, xl, 7); var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function g0_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 1); var c1_lo = rotr64_lo(xh, xl, 8); var c2_lo = shr64_lo(xh, xl, 7); var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } function g1_512_hi(xh, xl) { var c0_hi = rotr64_hi(xh, xl, 19); var c1_hi = rotr64_hi(xl, xh, 29); // 61 var c2_hi = shr64_hi(xh, xl, 6); var r = c0_hi ^ c1_hi ^ c2_hi; if (r < 0) r += 0x100000000; return r; } function g1_512_lo(xh, xl) { var c0_lo = rotr64_lo(xh, xl, 19); var c1_lo = rotr64_lo(xl, xh, 29); // 61 var c2_lo = shr64_lo(xh, xl, 6); var r = c0_lo ^ c1_lo ^ c2_lo; if (r < 0) r += 0x100000000; return r; } },{"../common":229,"../utils":239,"minimalistic-assert":268}],238:[function(require,module,exports){ 'use strict'; var utils = require('../utils'); var rotr32 = utils.rotr32; function ft_1(s, x, y, z) { if (s === 0) return ch32(x, y, z); if (s === 1 || s === 3) return p32(x, y, z); if (s === 2) return maj32(x, y, z); } exports.ft_1 = ft_1; function ch32(x, y, z) { return (x & y) ^ ((~x) & z); } exports.ch32 = ch32; function maj32(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); } exports.maj32 = maj32; function p32(x, y, z) { return x ^ y ^ z; } exports.p32 = p32; function s0_256(x) { return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22); } exports.s0_256 = s0_256; function s1_256(x) { return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25); } exports.s1_256 = s1_256; function g0_256(x) { return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3); } exports.g0_256 = g0_256; function g1_256(x) { return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10); } exports.g1_256 = g1_256; },{"../utils":239}],239:[function(require,module,exports){ 'use strict'; var assert = require('minimalistic-assert'); var inherits = require('inherits'); exports.inherits = inherits; function isSurrogatePair(msg, i) { if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) { return false; } if (i < 0 || i + 1 >= msg.length) { return false; } return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00; } function toArray(msg, enc) { if (Array.isArray(msg)) return msg.slice(); if (!msg) return []; var res = []; if (typeof msg === 'string') { if (!enc) { // Inspired by stringToUtf8ByteArray() in closure-library by Google // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143 // Apache License 2.0 // https://github.com/google/closure-library/blob/master/LICENSE var p = 0; for (var i = 0; i < msg.length; i++) { var c = msg.charCodeAt(i); if (c < 128) { res[p++] = c; } else if (c < 2048) { res[p++] = (c >> 6) | 192; res[p++] = (c & 63) | 128; } else if (isSurrogatePair(msg, i)) { c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF); res[p++] = (c >> 18) | 240; res[p++] = ((c >> 12) & 63) | 128; res[p++] = ((c >> 6) & 63) | 128; res[p++] = (c & 63) | 128; } else { res[p++] = (c >> 12) | 224; res[p++] = ((c >> 6) & 63) | 128; res[p++] = (c & 63) | 128; } } } else if (enc === 'hex') { msg = msg.replace(/[^a-z0-9]+/ig, ''); if (msg.length % 2 !== 0) msg = '0' + msg; for (i = 0; i < msg.length; i += 2) res.push(parseInt(msg[i] + msg[i + 1], 16)); } } else { for (i = 0; i < msg.length; i++) res[i] = msg[i] | 0; } return res; } exports.toArray = toArray; function toHex(msg) { var res = ''; for (var i = 0; i < msg.length; i++) res += zero2(msg[i].toString(16)); return res; } exports.toHex = toHex; function htonl(w) { var res = (w >>> 24) | ((w >>> 8) & 0xff00) | ((w << 8) & 0xff0000) | ((w & 0xff) << 24); return res >>> 0; } exports.htonl = htonl; function toHex32(msg, endian) { var res = ''; for (var i = 0; i < msg.length; i++) { var w = msg[i]; if (endian === 'little') w = htonl(w); res += zero8(w.toString(16)); } return res; } exports.toHex32 = toHex32; function zero2(word) { if (word.length === 1) return '0' + word; else return word; } exports.zero2 = zero2; function zero8(word) { if (word.length === 7) return '0' + word; else if (word.length === 6) return '00' + word; else if (word.length === 5) return '000' + word; else if (word.length === 4) return '0000' + word; else if (word.length === 3) return '00000' + word; else if (word.length === 2) return '000000' + word; else if (word.length === 1) return '0000000' + word; else return word; } exports.zero8 = zero8; function join32(msg, start, end, endian) { var len = end - start; assert(len % 4 === 0); var res = new Array(len / 4); for (var i = 0, k = start; i < res.length; i++, k += 4) { var w; if (endian === 'big') w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3]; else w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k]; res[i] = w >>> 0; } return res; } exports.join32 = join32; function split32(msg, endian) { var res = new Array(msg.length * 4); for (var i = 0, k = 0; i < msg.length; i++, k += 4) { var m = msg[i]; if (endian === 'big') { res[k] = m >>> 24; res[k + 1] = (m >>> 16) & 0xff; res[k + 2] = (m >>> 8) & 0xff; res[k + 3] = m & 0xff; } else { res[k + 3] = m >>> 24; res[k + 2] = (m >>> 16) & 0xff; res[k + 1] = (m >>> 8) & 0xff; res[k] = m & 0xff; } } return res; } exports.split32 = split32; function rotr32(w, b) { return (w >>> b) | (w << (32 - b)); } exports.rotr32 = rotr32; function rotl32(w, b) { return (w << b) | (w >>> (32 - b)); } exports.rotl32 = rotl32; function sum32(a, b) { return (a + b) >>> 0; } exports.sum32 = sum32; function sum32_3(a, b, c) { return (a + b + c) >>> 0; } exports.sum32_3 = sum32_3; function sum32_4(a, b, c, d) { return (a + b + c + d) >>> 0; } exports.sum32_4 = sum32_4; function sum32_5(a, b, c, d, e) { return (a + b + c + d + e) >>> 0; } exports.sum32_5 = sum32_5; function sum64(buf, pos, ah, al) { var bh = buf[pos]; var bl = buf[pos + 1]; var lo = (al + bl) >>> 0; var hi = (lo < al ? 1 : 0) + ah + bh; buf[pos] = hi >>> 0; buf[pos + 1] = lo; } exports.sum64 = sum64; function sum64_hi(ah, al, bh, bl) { var lo = (al + bl) >>> 0; var hi = (lo < al ? 1 : 0) + ah + bh; return hi >>> 0; } exports.sum64_hi = sum64_hi; function sum64_lo(ah, al, bh, bl) { var lo = al + bl; return lo >>> 0; } exports.sum64_lo = sum64_lo; function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) { var carry = 0; var lo = al; lo = (lo + bl) >>> 0; carry += lo < al ? 1 : 0; lo = (lo + cl) >>> 0; carry += lo < cl ? 1 : 0; lo = (lo + dl) >>> 0; carry += lo < dl ? 1 : 0; var hi = ah + bh + ch + dh + carry; return hi >>> 0; } exports.sum64_4_hi = sum64_4_hi; function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) { var lo = al + bl + cl + dl; return lo >>> 0; } exports.sum64_4_lo = sum64_4_lo; function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { var carry = 0; var lo = al; lo = (lo + bl) >>> 0; carry += lo < al ? 1 : 0; lo = (lo + cl) >>> 0; carry += lo < cl ? 1 : 0; lo = (lo + dl) >>> 0; carry += lo < dl ? 1 : 0; lo = (lo + el) >>> 0; carry += lo < el ? 1 : 0; var hi = ah + bh + ch + dh + eh + carry; return hi >>> 0; } exports.sum64_5_hi = sum64_5_hi; function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) { var lo = al + bl + cl + dl + el; return lo >>> 0; } exports.sum64_5_lo = sum64_5_lo; function rotr64_hi(ah, al, num) { var r = (al << (32 - num)) | (ah >>> num); return r >>> 0; } exports.rotr64_hi = rotr64_hi; function rotr64_lo(ah, al, num) { var r = (ah << (32 - num)) | (al >>> num); return r >>> 0; } exports.rotr64_lo = rotr64_lo; function shr64_hi(ah, al, num) { return ah >>> num; } exports.shr64_hi = shr64_hi; function shr64_lo(ah, al, num) { var r = (ah << (32 - num)) | (al >>> num); return r >>> 0; } exports.shr64_lo = shr64_lo; },{"inherits":262,"minimalistic-assert":268}],240:[function(require,module,exports){ 'use strict'; var hash = require('hash.js'); var utils = require('minimalistic-crypto-utils'); var assert = require('minimalistic-assert'); function HmacDRBG(options) { if (!(this instanceof HmacDRBG)) return new HmacDRBG(options); this.hash = options.hash; this.predResist = !!options.predResist; this.outLen = this.hash.outSize; this.minEntropy = options.minEntropy || this.hash.hmacStrength; this._reseed = null; this.reseedInterval = null; this.K = null; this.V = null; var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex'); var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex'); var pers = utils.toArray(options.pers, options.persEnc || 'hex'); assert(entropy.length >= (this.minEntropy / 8), 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); this._init(entropy, nonce, pers); } module.exports = HmacDRBG; HmacDRBG.prototype._init = function init(entropy, nonce, pers) { var seed = entropy.concat(nonce).concat(pers); this.K = new Array(this.outLen / 8); this.V = new Array(this.outLen / 8); for (var i = 0; i < this.V.length; i++) { this.K[i] = 0x00; this.V[i] = 0x01; } this._update(seed); this._reseed = 1; this.reseedInterval = 0x1000000000000; // 2^48 }; HmacDRBG.prototype._hmac = function hmac() { return new hash.hmac(this.hash, this.K); }; HmacDRBG.prototype._update = function update(seed) { var kmac = this._hmac() .update(this.V) .update([ 0x00 ]); if (seed) kmac = kmac.update(seed); this.K = kmac.digest(); this.V = this._hmac().update(this.V).digest(); if (!seed) return; this.K = this._hmac() .update(this.V) .update([ 0x01 ]) .update(seed) .digest(); this.V = this._hmac().update(this.V).digest(); }; HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) { // Optional entropy enc if (typeof entropyEnc !== 'string') { addEnc = add; add = entropyEnc; entropyEnc = null; } entropy = utils.toArray(entropy, entropyEnc); add = utils.toArray(add, addEnc); assert(entropy.length >= (this.minEntropy / 8), 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits'); this._update(entropy.concat(add || [])); this._reseed = 1; }; HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) { if (this._reseed > this.reseedInterval) throw new Error('Reseed is required'); // Optional encoding if (typeof enc !== 'string') { addEnc = add; add = enc; enc = null; } // Optional additional data if (add) { add = utils.toArray(add, addEnc || 'hex'); this._update(add); } var temp = []; while (temp.length < len) { this.V = this._hmac().update(this.V).digest(); temp = temp.concat(this.V); } var res = temp.slice(0, len); this._update(add); this._reseed++; return utils.encode(res, enc); }; },{"hash.js":228,"minimalistic-assert":268,"minimalistic-crypto-utils":269}],241:[function(require,module,exports){ exports.read = function (buffer, offset, isLE, mLen, nBytes) { var e, m var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var nBits = -7 var i = isLE ? (nBytes - 1) : 0 var d = isLE ? -1 : 1 var s = buffer[offset + i] i += d e = s & ((1 << (-nBits)) - 1) s >>= (-nBits) nBits += eLen for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {} m = e & ((1 << (-nBits)) - 1) e >>= (-nBits) nBits += mLen for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {} if (e === 0) { e = 1 - eBias } else if (e === eMax) { return m ? NaN : ((s ? -1 : 1) * Infinity) } else { m = m + Math.pow(2, mLen) e = e - eBias } return (s ? -1 : 1) * m * Math.pow(2, e - mLen) } exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { var e, m, c var eLen = (nBytes * 8) - mLen - 1 var eMax = (1 << eLen) - 1 var eBias = eMax >> 1 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) var i = isLE ? 0 : (nBytes - 1) var d = isLE ? 1 : -1 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 value = Math.abs(value) if (isNaN(value) || value === Infinity) { m = isNaN(value) ? 1 : 0 e = eMax } else { e = Math.floor(Math.log(value) / Math.LN2) if (value * (c = Math.pow(2, -e)) < 1) { e-- c *= 2 } if (e + eBias >= 1) { value += rt / c } else { value += rt * Math.pow(2, 1 - eBias) } if (value * c >= 2) { e++ c /= 2 } if (e + eBias >= eMax) { m = 0 e = eMax } else if (e + eBias >= 1) { m = ((value * c) - 1) * Math.pow(2, mLen) e = e + eBias } else { m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) e = 0 } } for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} e = (e << mLen) | m eLen += mLen for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} buffer[offset + i - d] |= s * 128 } },{}],242:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const types_1 = require("./types"); const keys = Object.keys(types_1.typeHandlers); // This map helps avoid validating for every single image type const firstBytes = { 0x38: 'psd', 0x42: 'bmp', 0x44: 'dds', 0x47: 'gif', 0x49: 'tiff', 0x4d: 'tiff', 0x52: 'webp', 0x69: 'icns', 0x89: 'png', 0xff: 'jpg' }; function detector(buffer) { const byte = buffer[0]; if (byte in firstBytes) { const type = firstBytes[byte]; if (types_1.typeHandlers[type].validate(buffer)) { return type; } } const finder = (key) => types_1.typeHandlers[key].validate(buffer); return keys.find(finder); } exports.detector = detector; },{"./types":246}],243:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); // fs.promises polyfill for node 8.x if (!('promises' in fs)) { class FileHandle { constructor(fd) { this.fd = fd; } stat() { return new Promise((resolve, reject) => { fs.fstat(this.fd, (err, stats) => { if (err) { reject(err); } else { resolve(stats); } }); }); } read(buffer, offset, length, position) { return new Promise((resolve, reject) => { fs.read(this.fd, buffer, offset, length, position, (err) => { if (err) { reject(err); } else { resolve(); } }); }); } close() { return new Promise((resolve, reject) => { fs.close(this.fd, (err) => { if (err) { reject(err); } else { resolve(); } }); }); } } Object.defineProperty(fs, 'promises', { value: { open: (filepath, flags) => (new Promise((resolve, reject) => { fs.open(filepath, flags, (err, fd) => { if (err) { reject(err); } else { resolve(new FileHandle(fd)); } }); })), }, writable: false }); } },{"fs":177}],244:[function(require,module,exports){ (function (process,Buffer){ "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const path = require("path"); const queue_1 = require("queue"); const types_1 = require("./types"); const detector_1 = require("./detector"); require("./fs.promises"); // Maximum buffer size, with a default of 512 kilobytes. // TO-DO: make this adaptive based on the initial signature of the image const MaxBufferSize = 512 * 1024; // This queue is for async `fs` operations, to avoid reaching file-descriptor limits const queue = new queue_1.default({ concurrency: 100, autostart: true }); /** * Return size information based on a buffer * * @param {Buffer} buffer * @param {String} filepath * @returns {Object} */ function lookup(buffer, filepath) { // detect the file type.. don't rely on the extension const type = detector_1.detector(buffer); // find an appropriate handler for this file type if (type && type in types_1.typeHandlers) { const size = types_1.typeHandlers[type].calculate(buffer, filepath); if (size !== undefined) { size.type = type; return size; } } // throw up, if we don't understand the file throw new TypeError('unsupported file type: ' + type + ' (file: ' + filepath + ')'); } /** * Reads a file into a buffer. * @param {String} filepath * @returns {Promise} */ function asyncFileToBuffer(filepath) { return __awaiter(this, void 0, void 0, function* () { const handle = yield fs.promises.open(filepath, 'r'); const { size } = yield handle.stat(); if (size <= 0) { throw new Error('Empty file'); } const bufferSize = Math.min(size, MaxBufferSize); const buffer = Buffer.alloc(bufferSize); yield handle.read(buffer, 0, bufferSize, 0); yield handle.close(); return buffer; }); } /** * Synchronously reads a file into a buffer, blocking the nodejs process. * * @param {String} filepath * @returns {Buffer} */ function syncFileToBuffer(filepath) { // read from the file, synchronously const descriptor = fs.openSync(filepath, 'r'); const size = fs.fstatSync(descriptor).size; const bufferSize = Math.min(size, MaxBufferSize); const buffer = Buffer.alloc(bufferSize); fs.readSync(descriptor, buffer, 0, bufferSize, 0); fs.closeSync(descriptor); return buffer; } module.exports = exports = imageSize; // backwards compatibility /** * @param {Buffer|string} input - buffer or relative/absolute path of the image file * @param {Function=} [callback] - optional function for async detection */ function imageSize(input, callback) { // Handle buffer input if (Buffer.isBuffer(input)) { return lookup(input); } // input should be a string at this point if (typeof input !== 'string') { throw new TypeError('invalid invocation'); } // resolve the file path const filepath = path.resolve(input); if (typeof callback === 'function') { queue.push(() => asyncFileToBuffer(filepath) .then((buffer) => process.nextTick(callback, null, lookup(buffer, filepath))) .catch(callback)); } else { const buffer = syncFileToBuffer(filepath); return lookup(buffer, filepath); } } exports.imageSize = imageSize; exports.setConcurrency = (c) => { queue.concurrency = c; }; exports.types = Object.keys(types_1.typeHandlers); }).call(this,require('_process'),require("buffer").Buffer) },{"./detector":242,"./fs.promises":243,"./types":246,"_process":284,"buffer":182,"fs":177,"path":276,"queue":296}],245:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // Abstract reading multi-byte unsigned integers function readUInt(buffer, bits, offset, isBigEndian) { offset = offset || 0; const endian = isBigEndian ? 'BE' : 'LE'; const methodName = ('readUInt' + bits + endian); const method = buffer[methodName]; return method.call(buffer, offset); } exports.readUInt = readUInt; },{}],246:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const bmp_1 = require("./types/bmp"); const cur_1 = require("./types/cur"); const dds_1 = require("./types/dds"); const gif_1 = require("./types/gif"); const icns_1 = require("./types/icns"); const ico_1 = require("./types/ico"); const jpg_1 = require("./types/jpg"); const ktx_1 = require("./types/ktx"); const png_1 = require("./types/png"); const pnm_1 = require("./types/pnm"); const psd_1 = require("./types/psd"); const svg_1 = require("./types/svg"); const tiff_1 = require("./types/tiff"); const webp_1 = require("./types/webp"); exports.typeHandlers = { bmp: bmp_1.BMP, cur: cur_1.CUR, dds: dds_1.DDS, gif: gif_1.GIF, icns: icns_1.ICNS, ico: ico_1.ICO, jpg: jpg_1.JPG, ktx: ktx_1.KTX, png: png_1.PNG, pnm: pnm_1.PNM, psd: psd_1.PSD, svg: svg_1.SVG, tiff: tiff_1.TIFF, webp: webp_1.WEBP, }; },{"./types/bmp":247,"./types/cur":248,"./types/dds":249,"./types/gif":250,"./types/icns":251,"./types/ico":252,"./types/jpg":253,"./types/ktx":254,"./types/png":255,"./types/pnm":256,"./types/psd":257,"./types/svg":258,"./types/tiff":259,"./types/webp":260}],247:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BMP = { validate(buffer) { return ('BM' === buffer.toString('ascii', 0, 2)); }, calculate(buffer) { return { height: Math.abs(buffer.readInt32LE(22)), width: buffer.readUInt32LE(18) }; } }; },{}],248:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const ico_1 = require("./ico"); const TYPE_CURSOR = 2; exports.CUR = { validate(buffer) { if (buffer.readUInt16LE(0) !== 0) { return false; } return buffer.readUInt16LE(2) === TYPE_CURSOR; }, calculate(buffer) { return ico_1.ICO.calculate(buffer); } }; },{"./ico":252}],249:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DDS = { validate(buffer) { return buffer.readUInt32LE(0) === 0x20534444; }, calculate(buffer) { return { height: buffer.readUInt32LE(12), width: buffer.readUInt32LE(16) }; } }; },{}],250:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const gifRegexp = /^GIF8[79]a/; exports.GIF = { validate(buffer) { const signature = buffer.toString('ascii', 0, 6); return (gifRegexp.test(signature)); }, calculate(buffer) { return { height: buffer.readUInt16LE(8), width: buffer.readUInt16LE(6) }; } }; },{}],251:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * ICNS Header * * | Offset | Size | Purpose | * | 0 | 4 | Magic literal, must be "icns" (0x69, 0x63, 0x6e, 0x73) | * | 4 | 4 | Length of file, in bytes, msb first. | * */ const SIZE_HEADER = 4 + 4; // 8 const FILE_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN /** * Image Entry * * | Offset | Size | Purpose | * | 0 | 4 | Icon type, see OSType below. | * | 4 | 4 | Length of data, in bytes (including type and length), msb first. | * | 8 | n | Icon data | */ const ENTRY_LENGTH_OFFSET = 4; // MSB => BIG ENDIAN /* tslint:disable:object-literal-sort-keys */ const ICON_TYPE_SIZE = { ICON: 32, 'ICN#': 32, // m => 16 x 16 'icm#': 16, icm4: 16, icm8: 16, // s => 16 x 16 'ics#': 16, ics4: 16, ics8: 16, is32: 16, s8mk: 16, icp4: 16, // l => 32 x 32 icl4: 32, icl8: 32, il32: 32, l8mk: 32, icp5: 32, ic11: 32, // h => 48 x 48 ich4: 48, ich8: 48, ih32: 48, h8mk: 48, // . => 64 x 64 icp6: 64, ic12: 32, // t => 128 x 128 it32: 128, t8mk: 128, ic07: 128, // . => 256 x 256 ic08: 256, ic13: 256, // . => 512 x 512 ic09: 512, ic14: 512, // . => 1024 x 1024 ic10: 1024, }; /* tslint:enable:object-literal-sort-keys */ function readImageHeader(buffer, imageOffset) { const imageLengthOffset = imageOffset + ENTRY_LENGTH_OFFSET; return [ buffer.toString('ascii', imageOffset, imageLengthOffset), buffer.readUInt32BE(imageLengthOffset) ]; } function getImageSize(type) { const size = ICON_TYPE_SIZE[type]; return { width: size, height: size, type }; } exports.ICNS = { validate(buffer) { return ('icns' === buffer.toString('ascii', 0, 4)); }, calculate(buffer) { const bufferLength = buffer.length; const fileLength = buffer.readUInt32BE(FILE_LENGTH_OFFSET); let imageOffset = SIZE_HEADER; let imageHeader = readImageHeader(buffer, imageOffset); let imageSize = getImageSize(imageHeader[0]); imageOffset += imageHeader[1]; if (imageOffset === fileLength) { return imageSize; } const result = { height: imageSize.height, images: [imageSize], width: imageSize.width }; while (imageOffset < fileLength && imageOffset < bufferLength) { imageHeader = readImageHeader(buffer, imageOffset); imageSize = getImageSize(imageHeader[0]); imageOffset += imageHeader[1]; result.images.push(imageSize); } return result; } }; },{}],252:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const TYPE_ICON = 1; /** * ICON Header * * | Offset | Size | Purpose | * | 0 | 2 | Reserved. Must always be 0. | * | 2 | 2 | Image type: 1 for icon (.ICO) image, 2 for cursor (.CUR) image. Other values are invalid. | * | 4 | 2 | Number of images in the file. | * */ const SIZE_HEADER = 2 + 2 + 2; // 6 /** * Image Entry * * | Offset | Size | Purpose | * | 0 | 1 | Image width in pixels. Can be any number between 0 and 255. Value 0 means width is 256 pixels. | * | 1 | 1 | Image height in pixels. Can be any number between 0 and 255. Value 0 means height is 256 pixels. | * | 2 | 1 | Number of colors in the color palette. Should be 0 if the image does not use a color palette. | * | 3 | 1 | Reserved. Should be 0. | * | 4 | 2 | ICO format: Color planes. Should be 0 or 1. | * | | | CUR format: The horizontal coordinates of the hotspot in number of pixels from the left. | * | 6 | 2 | ICO format: Bits per pixel. | * | | | CUR format: The vertical coordinates of the hotspot in number of pixels from the top. | * | 8 | 4 | The size of the image's data in bytes | * | 12 | 4 | The offset of BMP or PNG data from the beginning of the ICO/CUR file | * */ const SIZE_IMAGE_ENTRY = 1 + 1 + 1 + 1 + 2 + 2 + 4 + 4; // 16 function getSizeFromOffset(buffer, offset) { const value = buffer.readUInt8(offset); return value === 0 ? 256 : value; } function getImageSize(buffer, imageIndex) { const offset = SIZE_HEADER + (imageIndex * SIZE_IMAGE_ENTRY); return { height: getSizeFromOffset(buffer, offset + 1), width: getSizeFromOffset(buffer, offset) }; } exports.ICO = { validate(buffer) { if (buffer.readUInt16LE(0) !== 0) { return false; } return buffer.readUInt16LE(2) === TYPE_ICON; }, calculate(buffer) { const nbImages = buffer.readUInt16LE(4); const imageSize = getImageSize(buffer, 0); if (nbImages === 1) { return imageSize; } const result = { height: imageSize.height, images: [imageSize], width: imageSize.width }; for (let imageIndex = 1; imageIndex < nbImages; imageIndex += 1) { result.images.push(getImageSize(buffer, imageIndex)); } return result; } }; },{}],253:[function(require,module,exports){ "use strict"; // NOTE: we only support baseline and progressive JPGs here // due to the structure of the loader class, we only get a buffer // with a maximum size of 4096 bytes. so if the SOF marker is outside // if this range we can't detect the file size correctly. Object.defineProperty(exports, "__esModule", { value: true }); const readUInt_1 = require("../readUInt"); const EXIF_MARKER = '45786966'; const APP1_DATA_SIZE_BYTES = 2; const EXIF_HEADER_BYTES = 6; const TIFF_BYTE_ALIGN_BYTES = 2; const BIG_ENDIAN_BYTE_ALIGN = '4d4d'; const LITTLE_ENDIAN_BYTE_ALIGN = '4949'; // Each entry is exactly 12 bytes const IDF_ENTRY_BYTES = 12; const NUM_DIRECTORY_ENTRIES_BYTES = 2; function isEXIF(buffer) { return (buffer.toString('hex', 2, 6) === EXIF_MARKER); } function extractSize(buffer, index) { return { height: buffer.readUInt16BE(index), width: buffer.readUInt16BE(index + 2) }; } function validateExifBlock(buffer, index) { // Skip APP1 Data Size const exifBlock = buffer.slice(APP1_DATA_SIZE_BYTES, index); // Consider byte alignment const byteAlign = exifBlock.toString('hex', EXIF_HEADER_BYTES, EXIF_HEADER_BYTES + TIFF_BYTE_ALIGN_BYTES); // Ignore Empty EXIF. Validate byte alignment const isBigEndian = byteAlign === BIG_ENDIAN_BYTE_ALIGN; const isLittleEndian = byteAlign === LITTLE_ENDIAN_BYTE_ALIGN; if (isBigEndian || isLittleEndian) { return extractOrientation(exifBlock, isBigEndian); } } function extractOrientation(exifBlock, isBigEndian) { // TODO: assert that this contains 0x002A // let STATIC_MOTOROLA_TIFF_HEADER_BYTES = 2 // let TIFF_IMAGE_FILE_DIRECTORY_BYTES = 4 // TODO: derive from TIFF_IMAGE_FILE_DIRECTORY_BYTES const idfOffset = 8; // IDF osset works from right after the header bytes // (so the offset includes the tiff byte align) const offset = EXIF_HEADER_BYTES + idfOffset; const idfDirectoryEntries = readUInt_1.readUInt(exifBlock, 16, offset, isBigEndian); for (let directoryEntryNumber = 0; directoryEntryNumber < idfDirectoryEntries; directoryEntryNumber++) { const start = offset + NUM_DIRECTORY_ENTRIES_BYTES + (directoryEntryNumber * IDF_ENTRY_BYTES); const end = start + IDF_ENTRY_BYTES; // Skip on corrupt EXIF blocks if (start > exifBlock.length) { return; } const block = exifBlock.slice(start, end); const tagNumber = readUInt_1.readUInt(block, 16, 0, isBigEndian); // 0x0112 (decimal: 274) is the `orientation` tag ID if (tagNumber === 274) { const dataFormat = readUInt_1.readUInt(block, 16, 2, isBigEndian); if (dataFormat !== 3) { return; } // unsinged int has 2 bytes per component // if there would more than 4 bytes in total it's a pointer const numberOfComponents = readUInt_1.readUInt(block, 32, 4, isBigEndian); if (numberOfComponents !== 1) { return; } return readUInt_1.readUInt(block, 16, 8, isBigEndian); } } } function validateBuffer(buffer, index) { // index should be within buffer limits if (index > buffer.length) { throw new TypeError('Corrupt JPG, exceeded buffer limits'); } // Every JPEG block must begin with a 0xFF if (buffer[index] !== 0xFF) { throw new TypeError('Invalid JPG, marker table corrupted'); } } exports.JPG = { validate(buffer) { const SOIMarker = buffer.toString('hex', 0, 2); return ('ffd8' === SOIMarker); }, calculate(buffer) { // Skip 4 chars, they are for signature buffer = buffer.slice(4); let orientation; let next; while (buffer.length) { // read length of the next block const i = buffer.readUInt16BE(0); if (isEXIF(buffer)) { orientation = validateExifBlock(buffer, i); } // ensure correct format validateBuffer(buffer, i); // 0xFFC0 is baseline standard(SOF) // 0xFFC1 is baseline optimized(SOF) // 0xFFC2 is progressive(SOF2) next = buffer[i + 1]; if (next === 0xC0 || next === 0xC1 || next === 0xC2) { const size = extractSize(buffer, i + 5); // TODO: is orientation=0 a valid answer here? if (!orientation) { return size; } return { height: size.height, orientation, width: size.width }; } // move to the next block buffer = buffer.slice(i + 2); } throw new TypeError('Invalid JPG, no size found'); } }; },{"../readUInt":245}],254:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const SIGNATURE = 'KTX 11'; exports.KTX = { validate(buffer) { return SIGNATURE === buffer.toString('ascii', 1, 7); }, calculate(buffer) { return { height: buffer.readUInt32LE(40), width: buffer.readUInt32LE(36), }; } }; },{}],255:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const pngSignature = 'PNG\r\n\x1a\n'; const pngImageHeaderChunkName = 'IHDR'; // Used to detect "fried" png's: http://www.jongware.com/pngdefry.html const pngFriedChunkName = 'CgBI'; exports.PNG = { validate(buffer) { if (pngSignature === buffer.toString('ascii', 1, 8)) { let chunkName = buffer.toString('ascii', 12, 16); if (chunkName === pngFriedChunkName) { chunkName = buffer.toString('ascii', 28, 32); } if (chunkName !== pngImageHeaderChunkName) { throw new TypeError('Invalid PNG'); } return true; } return false; }, calculate(buffer) { if (buffer.toString('ascii', 12, 16) === pngFriedChunkName) { return { height: buffer.readUInt32BE(36), width: buffer.readUInt32BE(32) }; } return { height: buffer.readUInt32BE(20), width: buffer.readUInt32BE(16) }; } }; },{}],256:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const PNMTypes = { P1: 'pbm/ascii', P2: 'pgm/ascii', P3: 'ppm/ascii', P4: 'pbm', P5: 'pgm', P6: 'ppm', P7: 'pam', PF: 'pfm' }; const Signatures = Object.keys(PNMTypes); const handlers = { default: (lines) => { let dimensions = []; while (lines.length > 0) { const line = lines.shift(); if (line[0] === '#') { continue; } dimensions = line.split(' '); break; } if (dimensions.length === 2) { return { height: parseInt(dimensions[1], 10), width: parseInt(dimensions[0], 10), }; } else { throw new TypeError('Invalid PNM'); } }, pam: (lines) => { const size = {}; while (lines.length > 0) { const line = lines.shift(); if (line.length > 16 || line.charCodeAt(0) > 128) { continue; } const [key, value] = line.split(' '); if (key && value) { size[key.toLowerCase()] = parseInt(value, 10); } if (size.height && size.width) { break; } } if (size.height && size.width) { return { height: size.height, width: size.width }; } else { throw new TypeError('Invalid PAM'); } } }; exports.PNM = { validate(buffer) { const signature = buffer.toString('ascii', 0, 2); return Signatures.includes(signature); }, calculate(buffer) { const signature = buffer.toString('ascii', 0, 2); const type = PNMTypes[signature]; // TODO: this probably generates garbage. move to a stream based parser const lines = buffer.toString('ascii', 3).split(/[\r\n]+/); const handler = handlers[type] || handlers.default; return handler(lines); } }; },{}],257:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PSD = { validate(buffer) { return ('8BPS' === buffer.toString('ascii', 0, 4)); }, calculate(buffer) { return { height: buffer.readUInt32BE(14), width: buffer.readUInt32BE(18) }; } }; },{}],258:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const svgReg = /"']|"[^"]*"|'[^']*')*>/; const extractorRegExps = { height: /\sheight=(['"])([^%]+?)\1/, root: svgReg, viewbox: /\sviewBox=(['"])(.+?)\1/, width: /\swidth=(['"])([^%]+?)\1/, }; const INCH_CM = 2.54; const units = { cm: 96 / INCH_CM, em: 16, ex: 8, m: 96 / INCH_CM * 100, mm: 96 / INCH_CM / 10, pc: 96 / 72 / 12, pt: 96 / 72, }; function parseLength(len) { const m = /([0-9.]+)([a-z]*)/.exec(len); if (!m) { return undefined; } return Math.round(parseFloat(m[1]) * (units[m[2]] || 1)); } function parseViewbox(viewbox) { const bounds = viewbox.split(' '); return { height: parseLength(bounds[3]), width: parseLength(bounds[2]) }; } function parseAttributes(root) { const width = root.match(extractorRegExps.width); const height = root.match(extractorRegExps.height); const viewbox = root.match(extractorRegExps.viewbox); return { height: height && parseLength(height[2]), viewbox: viewbox && parseViewbox(viewbox[2]), width: width && parseLength(width[2]), }; } function calculateByDimensions(attrs) { return { height: attrs.height, width: attrs.width, }; } function calculateByViewbox(attrs) { const viewbox = attrs && attrs.viewbox; if (!viewbox) { return; } const ratio = viewbox.width / viewbox.height; if (attrs.width) { return { height: Math.floor(attrs.width / ratio), width: attrs.width, }; } if (attrs.height) { return { height: attrs.height, width: Math.floor(attrs.height * ratio), }; } return { height: viewbox.height, width: viewbox.width, }; } exports.SVG = { validate(buffer) { const str = String(buffer); return svgReg.test(str); }, calculate(buffer) { const root = buffer.toString('utf8').match(extractorRegExps.root); if (root) { const attrs = parseAttributes(root[0]); if (attrs.width && attrs.height) { return calculateByDimensions(attrs); } if (attrs.viewbox) { return calculateByViewbox(attrs); } } throw new TypeError('Invalid SVG'); } }; },{}],259:[function(require,module,exports){ (function (Buffer){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); // based on http://www.compix.com/fileformattif.htm // TO-DO: support big-endian as well const fs = require("fs"); const readUInt_1 = require("../readUInt"); // Read IFD (image-file-directory) into a buffer function readIFD(buffer, filepath, isBigEndian) { const ifdOffset = readUInt_1.readUInt(buffer, 32, 4, isBigEndian); // read only till the end of the file let bufferSize = 1024; const fileSize = fs.statSync(filepath).size; if (ifdOffset + bufferSize > fileSize) { bufferSize = fileSize - ifdOffset - 10; } // populate the buffer const endBuffer = Buffer.alloc(bufferSize); const descriptor = fs.openSync(filepath, 'r'); fs.readSync(descriptor, endBuffer, 0, bufferSize, ifdOffset); return endBuffer.slice(2); } // TIFF values seem to be messed up on Big-Endian, this helps function readValue(buffer, isBigEndian) { const low = readUInt_1.readUInt(buffer, 16, 8, isBigEndian); const high = readUInt_1.readUInt(buffer, 16, 10, isBigEndian); return (high << 16) + low; } // move to the next tag function nextTag(buffer) { if (buffer.length > 24) { return buffer.slice(12); } } // Extract IFD tags from TIFF metadata function extractTags(buffer, isBigEndian) { const tags = {}; let temp = buffer; while (temp && temp.length) { const code = readUInt_1.readUInt(temp, 16, 0, isBigEndian); const type = readUInt_1.readUInt(temp, 16, 2, isBigEndian); const length = readUInt_1.readUInt(temp, 32, 4, isBigEndian); // 0 means end of IFD if (code === 0) { break; } else { // 256 is width, 257 is height // if (code === 256 || code === 257) { if (length === 1 && (type === 3 || type === 4)) { tags[code] = readValue(temp, isBigEndian); } // move to the next tag temp = nextTag(temp); } } return tags; } // Test if the TIFF is Big Endian or Little Endian function determineEndianness(buffer) { const signature = buffer.toString('ascii', 0, 2); if ('II' === signature) { return 'LE'; } else if ('MM' === signature) { return 'BE'; } } const signatures = [ // '492049', // currently not supported '49492a00', '4d4d002a', ]; exports.TIFF = { validate(buffer) { return signatures.includes(buffer.toString('hex', 0, 4)); }, calculate(buffer, filepath) { if (!filepath) { throw new TypeError('Tiff doesn\'t support buffer'); } // Determine BE/LE const isBigEndian = determineEndianness(buffer) === 'BE'; // read the IFD const ifdBuffer = readIFD(buffer, filepath, isBigEndian); // extract the tags from the IFD const tags = extractTags(ifdBuffer, isBigEndian); const width = tags[256]; const height = tags[257]; if (!width || !height) { throw new TypeError('Invalid Tiff. Missing tags'); } return { height, width }; } }; }).call(this,require("buffer").Buffer) },{"../readUInt":245,"buffer":182,"fs":177}],260:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function calculateExtended(buffer) { return { height: 1 + buffer.readUIntLE(7, 3), width: 1 + buffer.readUIntLE(4, 3) }; } function calculateLossless(buffer) { return { height: 1 + (((buffer[4] & 0xF) << 10) | (buffer[3] << 2) | ((buffer[2] & 0xC0) >> 6)), width: 1 + (((buffer[2] & 0x3F) << 8) | buffer[1]) }; } function calculateLossy(buffer) { // `& 0x3fff` returns the last 14 bits // TO-DO: include webp scaling in the calculations return { height: buffer.readInt16LE(8) & 0x3fff, width: buffer.readInt16LE(6) & 0x3fff }; } exports.WEBP = { validate(buffer) { const riffHeader = 'RIFF' === buffer.toString('ascii', 0, 4); const webpHeader = 'WEBP' === buffer.toString('ascii', 8, 12); const vp8Header = 'VP8' === buffer.toString('ascii', 12, 15); return (riffHeader && webpHeader && vp8Header); }, calculate(buffer) { const chunkHeader = buffer.toString('ascii', 12, 16); buffer = buffer.slice(20, 30); // Extended webp stream signature if (chunkHeader === 'VP8X') { const extendedHeader = buffer[0]; const validStart = (extendedHeader & 0xc0) === 0; const validEnd = (extendedHeader & 0x01) === 0; if (validStart && validEnd) { return calculateExtended(buffer); } else { // TODO: breaking change throw new TypeError('Invalid WebP'); } } // Lossless webp stream signature if (chunkHeader === 'VP8 ' && buffer[0] !== 0x2f) { return calculateLossy(buffer); } // Lossy webp stream signature const signature = buffer.toString('hex', 3, 6); if (chunkHeader === 'VP8L' && signature !== '9d012a') { return calculateLossless(buffer); } throw new TypeError('Invalid WebP'); } }; },{}],261:[function(require,module,exports){ var indexOf = [].indexOf; module.exports = function(arr, obj){ if (indexOf) return arr.indexOf(obj); for (var i = 0; i < arr.length; ++i) { if (arr[i] === obj) return i; } return -1; }; },{}],262:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }) } }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { if (superCtor) { ctor.super_ = superCtor var TempCtor = function () {} TempCtor.prototype = superCtor.prototype ctor.prototype = new TempCtor() ctor.prototype.constructor = ctor } } } },{}],263:[function(require,module,exports){ /*! * Determine if an object is a Buffer * * @author Feross Aboukhadijeh * @license MIT */ // The _isBuffer check is for Safari 5-7 support, because it's missing // Object.prototype.constructor. Remove this eventually module.exports = function (obj) { return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) } function isBuffer (obj) { return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) } // For Node v0.10 support. Remove this eventually. function isSlowBuffer (obj) { return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) } },{}],264:[function(require,module,exports){ var toString = {}.toString; module.exports = Array.isArray || function (arr) { return toString.call(arr) == '[object Array]'; }; },{}],265:[function(require,module,exports){ /** * martinez v0.4.3 * Martinez polygon clipping algorithm, does boolean operation on polygons (multipolygons, polygons with holes etc): intersection, union, difference, xor * * @author Alex Milevski * @license MIT * @preserve */ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.martinez = {}))); }(this, (function (exports) { 'use strict'; function DEFAULT_COMPARE (a, b) { return a > b ? 1 : a < b ? -1 : 0; } var SplayTree = function SplayTree(compare, noDuplicates) { if ( compare === void 0 ) compare = DEFAULT_COMPARE; if ( noDuplicates === void 0 ) noDuplicates = false; this._compare = compare; this._root = null; this._size = 0; this._noDuplicates = !!noDuplicates; }; var prototypeAccessors = { size: { configurable: true } }; SplayTree.prototype.rotateLeft = function rotateLeft (x) { var y = x.right; if (y) { x.right = y.left; if (y.left) { y.left.parent = x; } y.parent = x.parent; } if (!x.parent) { this._root = y; } else if (x === x.parent.left) { x.parent.left = y; } else { x.parent.right = y; } if (y) { y.left = x; } x.parent = y; }; SplayTree.prototype.rotateRight = function rotateRight (x) { var y = x.left; if (y) { x.left = y.right; if (y.right) { y.right.parent = x; } y.parent = x.parent; } if (!x.parent) { this._root = y; } else if(x === x.parent.left) { x.parent.left = y; } else { x.parent.right = y; } if (y) { y.right = x; } x.parent = y; }; SplayTree.prototype._splay = function _splay (x) { var this$1 = this; while (x.parent) { var p = x.parent; if (!p.parent) { if (p.left === x) { this$1.rotateRight(p); } else { this$1.rotateLeft(p); } } else if (p.left === x && p.parent.left === p) { this$1.rotateRight(p.parent); this$1.rotateRight(p); } else if (p.right === x && p.parent.right === p) { this$1.rotateLeft(p.parent); this$1.rotateLeft(p); } else if (p.left === x && p.parent.right === p) { this$1.rotateRight(p); this$1.rotateLeft(p); } else { this$1.rotateLeft(p); this$1.rotateRight(p); } } }; SplayTree.prototype.splay = function splay (x) { var this$1 = this; var p, gp, ggp, l, r; while (x.parent) { p = x.parent; gp = p.parent; if (gp && gp.parent) { ggp = gp.parent; if (ggp.left === gp) { ggp.left= x; } else { ggp.right = x; } x.parent = ggp; } else { x.parent = null; this$1._root = x; } l = x.left; r = x.right; if (x === p.left) { // left if (gp) { if (gp.left === p) { /* zig-zig */ if (p.right) { gp.left = p.right; gp.left.parent = gp; } else { gp.left = null; } p.right = gp; gp.parent = p; } else { /* zig-zag */ if (l) { gp.right = l; l.parent = gp; } else { gp.right = null; } x.left = gp; gp.parent = x; } } if (r) { p.left = r; r.parent = p; } else { p.left = null; } x.right= p; p.parent = x; } else { // right if (gp) { if (gp.right === p) { /* zig-zig */ if (p.left) { gp.right = p.left; gp.right.parent = gp; } else { gp.right = null; } p.left = gp; gp.parent = p; } else { /* zig-zag */ if (r) { gp.left = r; r.parent = gp; } else { gp.left = null; } x.right = gp; gp.parent = x; } } if (l) { p.right = l; l.parent = p; } else { p.right = null; } x.left = p; p.parent = x; } } }; SplayTree.prototype.replace = function replace (u, v) { if (!u.parent) { this._root = v; } else if (u === u.parent.left) { u.parent.left = v; } else { u.parent.right = v; } if (v) { v.parent = u.parent; } }; SplayTree.prototype.minNode = function minNode (u) { if ( u === void 0 ) u = this._root; if (u) { while (u.left) { u = u.left; } } return u; }; SplayTree.prototype.maxNode = function maxNode (u) { if ( u === void 0 ) u = this._root; if (u) { while (u.right) { u = u.right; } } return u; }; SplayTree.prototype.insert = function insert (key, data) { var z = this._root; var p = null; var comp = this._compare; var cmp; if (this._noDuplicates) { while (z) { p = z; cmp = comp(z.key, key); if (cmp === 0) { return; } else if (comp(z.key, key) < 0) { z = z.right; } else { z = z.left; } } } else { while (z) { p = z; if (comp(z.key, key) < 0) { z = z.right; } else { z = z.left; } } } z = { key: key, data: data, left: null, right: null, parent: p }; if (!p) { this._root = z; } else if (comp(p.key, z.key) < 0) { p.right = z; } else { p.left= z; } this.splay(z); this._size++; return z; }; SplayTree.prototype.find = function find (key) { var z = this._root; var comp = this._compare; while (z) { var cmp = comp(z.key, key); if (cmp < 0) { z = z.right; } else if (cmp > 0) { z = z.left; } else { return z; } } return null; }; /** * Whether the tree contains a node with the given key * @param{Key} key * @return {boolean} true/false */ SplayTree.prototype.contains = function contains (key) { var node = this._root; var comparator = this._compare; while (node){ var cmp = comparator(key, node.key); if (cmp === 0) { return true; } else if (cmp < 0) { node = node.left; } else { node = node.right; } } return false; }; SplayTree.prototype.remove = function remove (key) { var z = this.find(key); if (!z) { return false; } this.splay(z); if (!z.left) { this.replace(z, z.right); } else if (!z.right) { this.replace(z, z.left); } else { var y = this.minNode(z.right); if (y.parent !== z) { this.replace(y, y.right); y.right = z.right; y.right.parent = y; } this.replace(z, y); y.left = z.left; y.left.parent = y; } this._size--; return true; }; SplayTree.prototype.removeNode = function removeNode (z) { if (!z) { return false; } this.splay(z); if (!z.left) { this.replace(z, z.right); } else if (!z.right) { this.replace(z, z.left); } else { var y = this.minNode(z.right); if (y.parent !== z) { this.replace(y, y.right); y.right = z.right; y.right.parent = y; } this.replace(z, y); y.left = z.left; y.left.parent = y; } this._size--; return true; }; SplayTree.prototype.erase = function erase (key) { var z = this.find(key); if (!z) { return; } this.splay(z); var s = z.left; var t = z.right; var sMax = null; if (s) { s.parent = null; sMax = this.maxNode(s); this.splay(sMax); this._root = sMax; } if (t) { if (s) { sMax.right = t; } else { this._root = t; } t.parent = sMax; } this._size--; }; /** * Removes and returns the node with smallest key * @return {?Node} */ SplayTree.prototype.pop = function pop () { var node = this._root, returnValue = null; if (node) { while (node.left) { node = node.left; } returnValue = { key: node.key, data: node.data }; this.remove(node.key); } return returnValue; }; /* eslint-disable class-methods-use-this */ /** * Successor node * @param{Node} node * @return {?Node} */ SplayTree.prototype.next = function next (node) { var successor = node; if (successor) { if (successor.right) { successor = successor.right; while (successor && successor.left) { successor = successor.left; } } else { successor = node.parent; while (successor && successor.right === node) { node = successor; successor = successor.parent; } } } return successor; }; /** * Predecessor node * @param{Node} node * @return {?Node} */ SplayTree.prototype.prev = function prev (node) { var predecessor = node; if (predecessor) { if (predecessor.left) { predecessor = predecessor.left; while (predecessor && predecessor.right) { predecessor = predecessor.right; } } else { predecessor = node.parent; while (predecessor && predecessor.left === node) { node = predecessor; predecessor = predecessor.parent; } } } return predecessor; }; /* eslint-enable class-methods-use-this */ /** * @param{forEachCallback} callback * @return {SplayTree} */ SplayTree.prototype.forEach = function forEach (callback) { var current = this._root; var s = [], done = false, i = 0; while (!done) { // Reach the left most Node of the current Node if (current) { // Place pointer to a tree node on the stack // before traversing the node's left subtree s.push(current); current = current.left; } else { // BackTrack from the empty subtree and visit the Node // at the top of the stack; however, if the stack is // empty you are done if (s.length > 0) { current = s.pop(); callback(current, i++); // We have visited the node and its left // subtree. Now, it's right subtree's turn current = current.right; } else { done = true; } } } return this; }; /** * Walk key range from `low` to `high`. Stops if `fn` returns a value. * @param{Key} low * @param{Key} high * @param{Function} fn * @param{*?} ctx * @return {SplayTree} */ SplayTree.prototype.range = function range (low, high, fn, ctx) { var this$1 = this; var Q = []; var compare = this._compare; var node = this._root, cmp; while (Q.length !== 0 || node) { if (node) { Q.push(node); node = node.left; } else { node = Q.pop(); cmp = compare(node.key, high); if (cmp > 0) { break; } else if (compare(node.key, low) >= 0) { if (fn.call(ctx, node)) { return this$1; } // stop if smth is returned } node = node.right; } } return this; }; /** * Returns all keys in order * @return {Array} */ SplayTree.prototype.keys = function keys () { var current = this._root; var s = [], r = [], done = false; while (!done) { if (current) { s.push(current); current = current.left; } else { if (s.length > 0) { current = s.pop(); r.push(current.key); current = current.right; } else { done = true; } } } return r; }; /** * Returns `data` fields of all nodes in order. * @return {Array} */ SplayTree.prototype.values = function values () { var current = this._root; var s = [], r = [], done = false; while (!done) { if (current) { s.push(current); current = current.left; } else { if (s.length > 0) { current = s.pop(); r.push(current.data); current = current.right; } else { done = true; } } } return r; }; /** * Returns node at given index * @param{number} index * @return {?Node} */ SplayTree.prototype.at = function at (index) { // removed after a consideration, more misleading than useful // index = index % this.size; // if (index < 0) index = this.size - index; var current = this._root; var s = [], done = false, i = 0; while (!done) { if (current) { s.push(current); current = current.left; } else { if (s.length > 0) { current = s.pop(); if (i === index) { return current; } i++; current = current.right; } else { done = true; } } } return null; }; /** * Bulk-load items. Both array have to be same size * @param{Array} keys * @param{Array}[values] * @param{Boolean} [presort=false] Pre-sort keys and values, using * tree's comparator. Sorting is done * in-place * @return {AVLTree} */ SplayTree.prototype.load = function load (keys, values, presort) { if ( keys === void 0 ) keys = []; if ( values === void 0 ) values = []; if ( presort === void 0 ) presort = false; if (this._size !== 0) { throw new Error('bulk-load: tree is not empty'); } var size = keys.length; if (presort) { sort(keys, values, 0, size - 1, this._compare); } this._root = loadRecursive(null, keys, values, 0, size); this._size = size; return this; }; SplayTree.prototype.min = function min () { var node = this.minNode(this._root); if (node) { return node.key; } else { return null; } }; SplayTree.prototype.max = function max () { var node = this.maxNode(this._root); if (node) { return node.key; } else { return null; } }; SplayTree.prototype.isEmpty = function isEmpty () { return this._root === null; }; prototypeAccessors.size.get = function () { return this._size; }; /** * Create a tree and load it with items * @param{Array} keys * @param{Array?} [values] * @param{Function?} [comparator] * @param{Boolean?} [presort=false] Pre-sort keys and values, using * tree's comparator. Sorting is done * in-place * @param{Boolean?} [noDuplicates=false] Allow duplicates * @return {SplayTree} */ SplayTree.createTree = function createTree (keys, values, comparator, presort, noDuplicates) { return new SplayTree(comparator, noDuplicates).load(keys, values, presort); }; Object.defineProperties( SplayTree.prototype, prototypeAccessors ); function loadRecursive (parent, keys, values, start, end) { var size = end - start; if (size > 0) { var middle = start + Math.floor(size / 2); var key = keys[middle]; var data = values[middle]; var node = { key: key, data: data, parent: parent }; node.left = loadRecursive(node, keys, values, start, middle); node.right = loadRecursive(node, keys, values, middle + 1, end); return node; } return null; } function sort(keys, values, left, right, compare) { if (left >= right) { return; } var pivot = keys[(left + right) >> 1]; var i = left - 1; var j = right + 1; while (true) { do { i++; } while (compare(keys[i], pivot) < 0); do { j--; } while (compare(keys[j], pivot) > 0); if (i >= j) { break; } var tmp = keys[i]; keys[i] = keys[j]; keys[j] = tmp; tmp = values[i]; values[i] = values[j]; values[j] = tmp; } sort(keys, values, left, j, compare); sort(keys, values, j + 1, right, compare); } var NORMAL = 0; var NON_CONTRIBUTING = 1; var SAME_TRANSITION = 2; var DIFFERENT_TRANSITION = 3; var INTERSECTION = 0; var UNION = 1; var DIFFERENCE = 2; var XOR = 3; /** * @param {SweepEvent} event * @param {SweepEvent} prev * @param {Operation} operation */ function computeFields (event, prev, operation) { // compute inOut and otherInOut fields if (prev === null) { event.inOut = false; event.otherInOut = true; // previous line segment in sweepline belongs to the same polygon } else { if (event.isSubject === prev.isSubject) { event.inOut = !prev.inOut; event.otherInOut = prev.otherInOut; // previous line segment in sweepline belongs to the clipping polygon } else { event.inOut = !prev.otherInOut; event.otherInOut = prev.isVertical() ? !prev.inOut : prev.inOut; } // compute prevInResult field if (prev) { event.prevInResult = (!inResult(prev, operation) || prev.isVertical()) ? prev.prevInResult : prev; } } // check if the line segment belongs to the Boolean operation event.inResult = inResult(event, operation); } /* eslint-disable indent */ function inResult(event, operation) { switch (event.type) { case NORMAL: switch (operation) { case INTERSECTION: return !event.otherInOut; case UNION: return event.otherInOut; case DIFFERENCE: // return (event.isSubject && !event.otherInOut) || // (!event.isSubject && event.otherInOut); return (event.isSubject && event.otherInOut) || (!event.isSubject && !event.otherInOut); case XOR: return true; } break; case SAME_TRANSITION: return operation === INTERSECTION || operation === UNION; case DIFFERENT_TRANSITION: return operation === DIFFERENCE; case NON_CONTRIBUTING: return false; } return false; } /* eslint-enable indent */ var SweepEvent = function SweepEvent (point, left, otherEvent, isSubject, edgeType) { /** * Is left endpoint? * @type {Boolean} */ this.left = left; /** * @type {Array.} */ this.point = point; /** * Other edge reference * @type {SweepEvent} */ this.otherEvent = otherEvent; /** * Belongs to source or clipping polygon * @type {Boolean} */ this.isSubject = isSubject; /** * Edge contribution type * @type {Number} */ this.type = edgeType || NORMAL; /** * In-out transition for the sweepline crossing polygon * @type {Boolean} */ this.inOut = false; /** * @type {Boolean} */ this.otherInOut = false; /** * Previous event in result? * @type {SweepEvent} */ this.prevInResult = null; /** * Does event belong to result? * @type {Boolean} */ this.inResult = false; // connection step /** * @type {Boolean} */ this.resultInOut = false; this.isExteriorRing = true; }; /** * @param{Array.}p * @return {Boolean} */ SweepEvent.prototype.isBelow = function isBelow (p) { var p0 = this.point, p1 = this.otherEvent.point; return this.left ? (p0[0] - p[0]) * (p1[1] - p[1]) - (p1[0] - p[0]) * (p0[1] - p[1]) > 0 // signedArea(this.point, this.otherEvent.point, p) > 0 : : (p1[0] - p[0]) * (p0[1] - p[1]) - (p0[0] - p[0]) * (p1[1] - p[1]) > 0; //signedArea(this.otherEvent.point, this.point, p) > 0; }; /** * @param{Array.}p * @return {Boolean} */ SweepEvent.prototype.isAbove = function isAbove (p) { return !this.isBelow(p); }; /** * @return {Boolean} */ SweepEvent.prototype.isVertical = function isVertical () { return this.point[0] === this.otherEvent.point[0]; }; SweepEvent.prototype.clone = function clone () { var copy = new SweepEvent( this.point, this.left, this.otherEvent, this.isSubject, this.type); copy.inResult = this.inResult; copy.prevInResult = this.prevInResult; copy.isExteriorRing = this.isExteriorRing; copy.inOut = this.inOut; copy.otherInOut = this.otherInOut; return copy; }; function equals(p1, p2) { if (p1[0] === p2[0]) { if (p1[1] === p2[1]) { return true; } else { return false; } } return false; } // const EPSILON = 1e-9; // const abs = Math.abs; // TODO https://github.com/w8r/martinez/issues/6#issuecomment-262847164 // Precision problem. // // module.exports = function equals(p1, p2) { // return abs(p1[0] - p2[0]) <= EPSILON && abs(p1[1] - p2[1]) <= EPSILON; // }; /** * Signed area of the triangle (p0, p1, p2) * @param {Array.} p0 * @param {Array.} p1 * @param {Array.} p2 * @return {Number} */ function signedArea(p0, p1, p2) { return (p0[0] - p2[0]) * (p1[1] - p2[1]) - (p1[0] - p2[0]) * (p0[1] - p2[1]); } /** * @param {SweepEvent} e1 * @param {SweepEvent} e2 * @return {Number} */ function compareEvents(e1, e2) { var p1 = e1.point; var p2 = e2.point; // Different x-coordinate if (p1[0] > p2[0]) { return 1; } if (p1[0] < p2[0]) { return -1; } // Different points, but same x-coordinate // Event with lower y-coordinate is processed first if (p1[1] !== p2[1]) { return p1[1] > p2[1] ? 1 : -1; } return specialCases(e1, e2, p1, p2); } /* eslint-disable no-unused-vars */ function specialCases(e1, e2, p1, p2) { // Same coordinates, but one is a left endpoint and the other is // a right endpoint. The right endpoint is processed first if (e1.left !== e2.left) { return e1.left ? 1 : -1; } // const p2 = e1.otherEvent.point, p3 = e2.otherEvent.point; // const sa = (p1[0] - p3[0]) * (p2[1] - p3[1]) - (p2[0] - p3[0]) * (p1[1] - p3[1]) // Same coordinates, both events // are left endpoints or right endpoints. // not collinear if (signedArea(p1, e1.otherEvent.point, e2.otherEvent.point) !== 0) { // the event associate to the bottom segment is processed first return (!e1.isBelow(e2.otherEvent.point)) ? 1 : -1; } return (!e1.isSubject && e2.isSubject) ? 1 : -1; } /* eslint-enable no-unused-vars */ /** * @param {SweepEvent} se * @param {Array.} p * @param {Queue} queue * @return {Queue} */ function divideSegment(se, p, queue) { var r = new SweepEvent(p, false, se, se.isSubject); var l = new SweepEvent(p, true, se.otherEvent, se.isSubject); /* eslint-disable no-console */ if (equals(se.point, se.otherEvent.point)) { console.warn('what is that, a collapsed segment?', se); } /* eslint-enable no-console */ r.contourId = l.contourId = se.contourId; // avoid a rounding error. The left event would be processed after the right event if (compareEvents(l, se.otherEvent) > 0) { se.otherEvent.left = true; l.left = false; } // avoid a rounding error. The left event would be processed after the right event // if (compareEvents(se, r) > 0) {} se.otherEvent.otherEvent = l; se.otherEvent = r; queue.push(l); queue.push(r); return queue; } //const EPS = 1e-9; /** * Finds the magnitude of the cross product of two vectors (if we pretend * they're in three dimensions) * * @param {Object} a First vector * @param {Object} b Second vector * @private * @returns {Number} The magnitude of the cross product */ function crossProduct(a, b) { return (a[0] * b[1]) - (a[1] * b[0]); } /** * Finds the dot product of two vectors. * * @param {Object} a First vector * @param {Object} b Second vector * @private * @returns {Number} The dot product */ function dotProduct(a, b) { return (a[0] * b[0]) + (a[1] * b[1]); } /** * Finds the intersection (if any) between two line segments a and b, given the * line segments' end points a1, a2 and b1, b2. * * This algorithm is based on Schneider and Eberly. * http://www.cimec.org.ar/~ncalvo/Schneider_Eberly.pdf * Page 244. * * @param {Array.} a1 point of first line * @param {Array.} a2 point of first line * @param {Array.} b1 point of second line * @param {Array.} b2 point of second line * @param {Boolean=} noEndpointTouch whether to skip single touchpoints * (meaning connected segments) as * intersections * @returns {Array.>|Null} If the lines intersect, the point of * intersection. If they overlap, the two end points of the overlapping segment. * Otherwise, null. */ function intersection (a1, a2, b1, b2, noEndpointTouch) { // The algorithm expects our lines in the form P + sd, where P is a point, // s is on the interval [0, 1], and d is a vector. // We are passed two points. P can be the first point of each pair. The // vector, then, could be thought of as the distance (in x and y components) // from the first point to the second point. // So first, let's make our vectors: var va = [a2[0] - a1[0], a2[1] - a1[1]]; var vb = [b2[0] - b1[0], b2[1] - b1[1]]; // We also define a function to convert back to regular point form: /* eslint-disable arrow-body-style */ function toPoint(p, s, d) { return [ p[0] + s * d[0], p[1] + s * d[1] ]; } /* eslint-enable arrow-body-style */ // The rest is pretty much a straight port of the algorithm. var e = [b1[0] - a1[0], b1[1] - a1[1]]; var kross = crossProduct(va, vb); var sqrKross = kross * kross; var sqrLenA = dotProduct(va, va); //const sqrLenB = dotProduct(vb, vb); // Check for line intersection. This works because of the properties of the // cross product -- specifically, two vectors are parallel if and only if the // cross product is the 0 vector. The full calculation involves relative error // to account for possible very small line segments. See Schneider & Eberly // for details. if (sqrKross > 0/* EPS * sqrLenB * sqLenA */) { // If they're not parallel, then (because these are line segments) they // still might not actually intersect. This code checks that the // intersection point of the lines is actually on both line segments. var s = crossProduct(e, vb) / kross; if (s < 0 || s > 1) { // not on line segment a return null; } var t = crossProduct(e, va) / kross; if (t < 0 || t > 1) { // not on line segment b return null; } if (s === 0 || s === 1) { // on an endpoint of line segment a return noEndpointTouch ? null : [toPoint(a1, s, va)]; } if (t === 0 || t === 1) { // on an endpoint of line segment b return noEndpointTouch ? null : [toPoint(b1, t, vb)]; } return [toPoint(a1, s, va)]; } // If we've reached this point, then the lines are either parallel or the // same, but the segments could overlap partially or fully, or not at all. // So we need to find the overlap, if any. To do that, we can use e, which is // the (vector) difference between the two initial points. If this is parallel // with the line itself, then the two lines are the same line, and there will // be overlap. //const sqrLenE = dotProduct(e, e); kross = crossProduct(e, va); sqrKross = kross * kross; if (sqrKross > 0 /* EPS * sqLenB * sqLenE */) { // Lines are just parallel, not the same. No overlap. return null; } var sa = dotProduct(va, e) / sqrLenA; var sb = sa + dotProduct(va, vb) / sqrLenA; var smin = Math.min(sa, sb); var smax = Math.max(sa, sb); // this is, essentially, the FindIntersection acting on floats from // Schneider & Eberly, just inlined into this function. if (smin <= 1 && smax >= 0) { // overlap on an end point if (smin === 1) { return noEndpointTouch ? null : [toPoint(a1, smin > 0 ? smin : 0, va)]; } if (smax === 0) { return noEndpointTouch ? null : [toPoint(a1, smax < 1 ? smax : 1, va)]; } if (noEndpointTouch && smin === 0 && smax === 1) { return null; } // There's overlap on a segment -- two points of intersection. Return both. return [ toPoint(a1, smin > 0 ? smin : 0, va), toPoint(a1, smax < 1 ? smax : 1, va) ]; } return null; } /** * @param {SweepEvent} se1 * @param {SweepEvent} se2 * @param {Queue} queue * @return {Number} */ function possibleIntersection (se1, se2, queue) { // that disallows self-intersecting polygons, // did cost us half a day, so I'll leave it // out of respect // if (se1.isSubject === se2.isSubject) return; var inter = intersection( se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point ); var nintersections = inter ? inter.length : 0; if (nintersections === 0) { return 0; } // no intersection // the line segments intersect at an endpoint of both line segments if ((nintersections === 1) && (equals(se1.point, se2.point) || equals(se1.otherEvent.point, se2.otherEvent.point))) { return 0; } if (nintersections === 2 && se1.isSubject === se2.isSubject) { // if(se1.contourId === se2.contourId){ // console.warn('Edges of the same polygon overlap', // se1.point, se1.otherEvent.point, se2.point, se2.otherEvent.point); // } //throw new Error('Edges of the same polygon overlap'); return 0; } // The line segments associated to se1 and se2 intersect if (nintersections === 1) { // if the intersection point is not an endpoint of se1 if (!equals(se1.point, inter[0]) && !equals(se1.otherEvent.point, inter[0])) { divideSegment(se1, inter[0], queue); } // if the intersection point is not an endpoint of se2 if (!equals(se2.point, inter[0]) && !equals(se2.otherEvent.point, inter[0])) { divideSegment(se2, inter[0], queue); } return 1; } // The line segments associated to se1 and se2 overlap var events = []; var leftCoincide = false; var rightCoincide = false; if (equals(se1.point, se2.point)) { leftCoincide = true; // linked } else if (compareEvents(se1, se2) === 1) { events.push(se2, se1); } else { events.push(se1, se2); } if (equals(se1.otherEvent.point, se2.otherEvent.point)) { rightCoincide = true; } else if (compareEvents(se1.otherEvent, se2.otherEvent) === 1) { events.push(se2.otherEvent, se1.otherEvent); } else { events.push(se1.otherEvent, se2.otherEvent); } if ((leftCoincide && rightCoincide) || leftCoincide) { // both line segments are equal or share the left endpoint se2.type = NON_CONTRIBUTING; se1.type = (se2.inOut === se1.inOut) ? SAME_TRANSITION : DIFFERENT_TRANSITION; if (leftCoincide && !rightCoincide) { // honestly no idea, but changing events selection from [2, 1] // to [0, 1] fixes the overlapping self-intersecting polygons issue divideSegment(events[1].otherEvent, events[0].point, queue); } return 2; } // the line segments share the right endpoint if (rightCoincide) { divideSegment(events[0], events[1].point, queue); return 3; } // no line segment includes totally the other one if (events[0] !== events[3].otherEvent) { divideSegment(events[0], events[1].point, queue); divideSegment(events[1], events[2].point, queue); return 3; } // one line segment includes the other one divideSegment(events[0], events[1].point, queue); divideSegment(events[3].otherEvent, events[2].point, queue); return 3; } /** * @param {SweepEvent} le1 * @param {SweepEvent} le2 * @return {Number} */ function compareSegments(le1, le2) { if (le1 === le2) { return 0; } // Segments are not collinear if (signedArea(le1.point, le1.otherEvent.point, le2.point) !== 0 || signedArea(le1.point, le1.otherEvent.point, le2.otherEvent.point) !== 0) { // If they share their left endpoint use the right endpoint to sort if (equals(le1.point, le2.point)) { return le1.isBelow(le2.otherEvent.point) ? -1 : 1; } // Different left endpoint: use the left endpoint to sort if (le1.point[0] === le2.point[0]) { return le1.point[1] < le2.point[1] ? -1 : 1; } // has the line segment associated to e1 been inserted // into S after the line segment associated to e2 ? if (compareEvents(le1, le2) === 1) { return le2.isAbove(le1.point) ? -1 : 1; } // The line segment associated to e2 has been inserted // into S after the line segment associated to e1 return le1.isBelow(le2.point) ? -1 : 1; } if (le1.isSubject === le2.isSubject) { // same polygon var p1 = le1.point, p2 = le2.point; if (p1[0] === p2[0] && p1[1] === p2[1]/*equals(le1.point, le2.point)*/) { p1 = le1.otherEvent.point; p2 = le2.otherEvent.point; if (p1[0] === p2[0] && p1[1] === p2[1]) { return 0; } else { return le1.contourId > le2.contourId ? 1 : -1; } } } else { // Segments are collinear, but belong to separate polygons return le1.isSubject ? -1 : 1; } return compareEvents(le1, le2) === 1 ? 1 : -1; } function subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation) { var sweepLine = new SplayTree(compareSegments); var sortedEvents = []; var rightbound = Math.min(sbbox[2], cbbox[2]); var prev, next, begin; while (eventQueue.length !== 0) { var event = eventQueue.pop(); sortedEvents.push(event); // optimization by bboxes for intersection and difference goes here if ((operation === INTERSECTION && event.point[0] > rightbound) || (operation === DIFFERENCE && event.point[0] > sbbox[2])) { break; } if (event.left) { next = prev = sweepLine.insert(event); begin = sweepLine.minNode(); if (prev !== begin) { prev = sweepLine.prev(prev); } else { prev = null; } next = sweepLine.next(next); var prevEvent = prev ? prev.key : null; var prevprevEvent = (void 0); computeFields(event, prevEvent, operation); if (next) { if (possibleIntersection(event, next.key, eventQueue) === 2) { computeFields(event, prevEvent, operation); computeFields(event, next.key, operation); } } if (prev) { if (possibleIntersection(prev.key, event, eventQueue) === 2) { var prevprev = prev; if (prevprev !== begin) { prevprev = sweepLine.prev(prevprev); } else { prevprev = null; } prevprevEvent = prevprev ? prevprev.key : null; computeFields(prevEvent, prevprevEvent, operation); computeFields(event, prevEvent, operation); } } } else { event = event.otherEvent; next = prev = sweepLine.find(event); if (prev && next) { if (prev !== begin) { prev = sweepLine.prev(prev); } else { prev = null; } next = sweepLine.next(next); sweepLine.remove(event); if (next && prev) { possibleIntersection(prev.key, next.key, eventQueue); } } } } return sortedEvents; } /** * @param {Array.} sortedEvents * @return {Array.} */ function orderEvents(sortedEvents) { var event, i, len, tmp; var resultEvents = []; for (i = 0, len = sortedEvents.length; i < len; i++) { event = sortedEvents[i]; if ((event.left && event.inResult) || (!event.left && event.otherEvent.inResult)) { resultEvents.push(event); } } // Due to overlapping edges the resultEvents array can be not wholly sorted var sorted = false; while (!sorted) { sorted = true; for (i = 0, len = resultEvents.length; i < len; i++) { if ((i + 1) < len && compareEvents(resultEvents[i], resultEvents[i + 1]) === 1) { tmp = resultEvents[i]; resultEvents[i] = resultEvents[i + 1]; resultEvents[i + 1] = tmp; sorted = false; } } } for (i = 0, len = resultEvents.length; i < len; i++) { event = resultEvents[i]; event.pos = i; } // imagine, the right event is found in the beginning of the queue, // when his left counterpart is not marked yet for (i = 0, len = resultEvents.length; i < len; i++) { event = resultEvents[i]; if (!event.left) { tmp = event.pos; event.pos = event.otherEvent.pos; event.otherEvent.pos = tmp; } } return resultEvents; } /** * @param {Number} pos * @param {Array.} resultEvents * @param {Object>} processed * @return {Number} */ function nextPos(pos, resultEvents, processed, origIndex) { var newPos = pos + 1; var length = resultEvents.length; if (newPos > length - 1) { return pos - 1; } var p = resultEvents[pos].point; var p1 = resultEvents[newPos].point; // while in range and not the current one by value while (newPos < length && p1[0] === p[0] && p1[1] === p[1]) { if (!processed[newPos]) { return newPos; } else { newPos++; } p1 = resultEvents[newPos].point; } newPos = pos - 1; while (processed[newPos] && newPos >= origIndex) { newPos--; } return newPos; } /** * @param {Array.} sortedEvents * @return {Array.<*>} polygons */ function connectEdges(sortedEvents, operation) { var i, len; var resultEvents = orderEvents(sortedEvents); // "false"-filled array var processed = {}; var result = []; var event; for (i = 0, len = resultEvents.length; i < len; i++) { if (processed[i]) { continue; } var contour = [[]]; if (!resultEvents[i].isExteriorRing) { if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length === 0) { result.push(contour); } else if (result.length === 0) { result.push([[contour]]); } else { result[result.length - 1].push(contour[0]); } } else if (operation === DIFFERENCE && !resultEvents[i].isSubject && result.length > 1) { result[result.length - 1].push(contour[0]); } else { result.push(contour); } var ringId = result.length - 1; var pos = i; var initial = resultEvents[i].point; contour[0].push(initial); while (pos >= i) { event = resultEvents[pos]; processed[pos] = true; if (event.left) { event.resultInOut = false; event.contourId = ringId; } else { event.otherEvent.resultInOut = true; event.otherEvent.contourId = ringId; } pos = event.pos; processed[pos] = true; contour[0].push(resultEvents[pos].point); pos = nextPos(pos, resultEvents, processed, i); } pos = pos === -1 ? i : pos; event = resultEvents[pos]; processed[pos] = processed[event.pos] = true; event.otherEvent.resultInOut = true; event.otherEvent.contourId = ringId; } // Handle if the result is a polygon (eg not multipoly) // Commented it again, let's see what do we mean by that // if (result.length === 1) result = result[0]; return result; } var tinyqueue = TinyQueue; var default_1 = TinyQueue; function TinyQueue(data, compare) { var this$1 = this; if (!(this instanceof TinyQueue)) { return new TinyQueue(data, compare); } this.data = data || []; this.length = this.data.length; this.compare = compare || defaultCompare; if (this.length > 0) { for (var i = (this.length >> 1) - 1; i >= 0; i--) { this$1._down(i); } } } function defaultCompare(a, b) { return a < b ? -1 : a > b ? 1 : 0; } TinyQueue.prototype = { push: function (item) { this.data.push(item); this.length++; this._up(this.length - 1); }, pop: function () { if (this.length === 0) { return undefined; } var top = this.data[0]; this.length--; if (this.length > 0) { this.data[0] = this.data[this.length]; this._down(0); } this.data.pop(); return top; }, peek: function () { return this.data[0]; }, _up: function (pos) { var data = this.data; var compare = this.compare; var item = data[pos]; while (pos > 0) { var parent = (pos - 1) >> 1; var current = data[parent]; if (compare(item, current) >= 0) { break; } data[pos] = current; pos = parent; } data[pos] = item; }, _down: function (pos) { var this$1 = this; var data = this.data; var compare = this.compare; var halfLength = this.length >> 1; var item = data[pos]; while (pos < halfLength) { var left = (pos << 1) + 1; var right = left + 1; var best = data[left]; if (right < this$1.length && compare(data[right], best) < 0) { left = right; best = data[right]; } if (compare(best, item) >= 0) { break; } data[pos] = best; pos = left; } data[pos] = item; } }; tinyqueue.default = default_1; var max = Math.max; var min = Math.min; var contourId = 0; function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) { var i, len, s1, s2, e1, e2; for (i = 0, len = contourOrHole.length - 1; i < len; i++) { s1 = contourOrHole[i]; s2 = contourOrHole[i + 1]; e1 = new SweepEvent(s1, false, undefined, isSubject); e2 = new SweepEvent(s2, false, e1, isSubject); e1.otherEvent = e2; if (s1[0] === s2[0] && s1[1] === s2[1]) { continue; // skip collapsed edges, or it breaks } e1.contourId = e2.contourId = depth; if (!isExteriorRing) { e1.isExteriorRing = false; e2.isExteriorRing = false; } if (compareEvents(e1, e2) > 0) { e2.left = true; } else { e1.left = true; } var x = s1[0], y = s1[1]; bbox[0] = min(bbox[0], x); bbox[1] = min(bbox[1], y); bbox[2] = max(bbox[2], x); bbox[3] = max(bbox[3], y); // Pushing it so the queue is sorted from left to right, // with object on the left having the highest priority. Q.push(e1); Q.push(e2); } } function fillQueue(subject, clipping, sbbox, cbbox, operation) { var eventQueue = new tinyqueue(null, compareEvents); var polygonSet, isExteriorRing, i, ii, j, jj; //, k, kk; for (i = 0, ii = subject.length; i < ii; i++) { polygonSet = subject[i]; for (j = 0, jj = polygonSet.length; j < jj; j++) { isExteriorRing = j === 0; if (isExteriorRing) { contourId++; } processPolygon(polygonSet[j], true, contourId, eventQueue, sbbox, isExteriorRing); } } for (i = 0, ii = clipping.length; i < ii; i++) { polygonSet = clipping[i]; for (j = 0, jj = polygonSet.length; j < jj; j++) { isExteriorRing = j === 0; if (operation === DIFFERENCE) { isExteriorRing = false; } if (isExteriorRing) { contourId++; } processPolygon(polygonSet[j], false, contourId, eventQueue, cbbox, isExteriorRing); } } return eventQueue; } var EMPTY = []; function trivialOperation(subject, clipping, operation) { var result = null; if (subject.length * clipping.length === 0) { if (operation === INTERSECTION) { result = EMPTY; } else if (operation === DIFFERENCE) { result = subject; } else if (operation === UNION || operation === XOR) { result = (subject.length === 0) ? clipping : subject; } } return result; } function compareBBoxes(subject, clipping, sbbox, cbbox, operation) { var result = null; if (sbbox[0] > cbbox[2] || cbbox[0] > sbbox[2] || sbbox[1] > cbbox[3] || cbbox[1] > sbbox[3]) { if (operation === INTERSECTION) { result = EMPTY; } else if (operation === DIFFERENCE) { result = subject; } else if (operation === UNION || operation === XOR) { result = subject.concat(clipping); } } return result; } function boolean(subject, clipping, operation) { if (typeof subject[0][0][0] === 'number') { subject = [subject]; } if (typeof clipping[0][0][0] === 'number') { clipping = [clipping]; } var trivial = trivialOperation(subject, clipping, operation); if (trivial) { return trivial === EMPTY ? null : trivial; } var sbbox = [Infinity, Infinity, -Infinity, -Infinity]; var cbbox = [Infinity, Infinity, -Infinity, -Infinity]; //console.time('fill queue'); var eventQueue = fillQueue(subject, clipping, sbbox, cbbox, operation); //console.timeEnd('fill queue'); trivial = compareBBoxes(subject, clipping, sbbox, cbbox, operation); if (trivial) { return trivial === EMPTY ? null : trivial; } //console.time('subdivide edges'); var sortedEvents = subdivide(eventQueue, subject, clipping, sbbox, cbbox, operation); //console.timeEnd('subdivide edges'); //console.time('connect vertices'); var result = connectEdges(sortedEvents, operation); //console.timeEnd('connect vertices'); return result; } function union (subject, clipping) { return boolean(subject, clipping, UNION); } function diff (subject, clipping) { return boolean(subject, clipping, DIFFERENCE); } function xor (subject, clipping){ return boolean(subject, clipping, XOR); } function intersection$1 (subject, clipping) { return boolean(subject, clipping, INTERSECTION); } /** * @enum {Number} */ var operations = { UNION: UNION, DIFFERENCE: DIFFERENCE, INTERSECTION: INTERSECTION, XOR: XOR }; exports.union = union; exports.diff = diff; exports.xor = xor; exports.intersection = intersection$1; exports.operations = operations; Object.defineProperty(exports, '__esModule', { value: true }); }))); },{}],266:[function(require,module,exports){ 'use strict' var inherits = require('inherits') var HashBase = require('hash-base') var Buffer = require('safe-buffer').Buffer var ARRAY16 = new Array(16) function MD5 () { HashBase.call(this, 64) // state this._a = 0x67452301 this._b = 0xefcdab89 this._c = 0x98badcfe this._d = 0x10325476 } inherits(MD5, HashBase) MD5.prototype._update = function () { var M = ARRAY16 for (var i = 0; i < 16; ++i) M[i] = this._block.readInt32LE(i * 4) var a = this._a var b = this._b var c = this._c var d = this._d a = fnF(a, b, c, d, M[0], 0xd76aa478, 7) d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12) c = fnF(c, d, a, b, M[2], 0x242070db, 17) b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22) a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7) d = fnF(d, a, b, c, M[5], 0x4787c62a, 12) c = fnF(c, d, a, b, M[6], 0xa8304613, 17) b = fnF(b, c, d, a, M[7], 0xfd469501, 22) a = fnF(a, b, c, d, M[8], 0x698098d8, 7) d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12) c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17) b = fnF(b, c, d, a, M[11], 0x895cd7be, 22) a = fnF(a, b, c, d, M[12], 0x6b901122, 7) d = fnF(d, a, b, c, M[13], 0xfd987193, 12) c = fnF(c, d, a, b, M[14], 0xa679438e, 17) b = fnF(b, c, d, a, M[15], 0x49b40821, 22) a = fnG(a, b, c, d, M[1], 0xf61e2562, 5) d = fnG(d, a, b, c, M[6], 0xc040b340, 9) c = fnG(c, d, a, b, M[11], 0x265e5a51, 14) b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20) a = fnG(a, b, c, d, M[5], 0xd62f105d, 5) d = fnG(d, a, b, c, M[10], 0x02441453, 9) c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14) b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20) a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5) d = fnG(d, a, b, c, M[14], 0xc33707d6, 9) c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14) b = fnG(b, c, d, a, M[8], 0x455a14ed, 20) a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5) d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9) c = fnG(c, d, a, b, M[7], 0x676f02d9, 14) b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20) a = fnH(a, b, c, d, M[5], 0xfffa3942, 4) d = fnH(d, a, b, c, M[8], 0x8771f681, 11) c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16) b = fnH(b, c, d, a, M[14], 0xfde5380c, 23) a = fnH(a, b, c, d, M[1], 0xa4beea44, 4) d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11) c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16) b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23) a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4) d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11) c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16) b = fnH(b, c, d, a, M[6], 0x04881d05, 23) a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4) d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11) c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16) b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23) a = fnI(a, b, c, d, M[0], 0xf4292244, 6) d = fnI(d, a, b, c, M[7], 0x432aff97, 10) c = fnI(c, d, a, b, M[14], 0xab9423a7, 15) b = fnI(b, c, d, a, M[5], 0xfc93a039, 21) a = fnI(a, b, c, d, M[12], 0x655b59c3, 6) d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10) c = fnI(c, d, a, b, M[10], 0xffeff47d, 15) b = fnI(b, c, d, a, M[1], 0x85845dd1, 21) a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6) d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10) c = fnI(c, d, a, b, M[6], 0xa3014314, 15) b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21) a = fnI(a, b, c, d, M[4], 0xf7537e82, 6) d = fnI(d, a, b, c, M[11], 0xbd3af235, 10) c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15) b = fnI(b, c, d, a, M[9], 0xeb86d391, 21) this._a = (this._a + a) | 0 this._b = (this._b + b) | 0 this._c = (this._c + c) | 0 this._d = (this._d + d) | 0 } MD5.prototype._digest = function () { // create padding and handle blocks this._block[this._blockOffset++] = 0x80 if (this._blockOffset > 56) { this._block.fill(0, this._blockOffset, 64) this._update() this._blockOffset = 0 } this._block.fill(0, this._blockOffset, 56) this._block.writeUInt32LE(this._length[0], 56) this._block.writeUInt32LE(this._length[1], 60) this._update() // produce result var buffer = Buffer.allocUnsafe(16) buffer.writeInt32LE(this._a, 0) buffer.writeInt32LE(this._b, 4) buffer.writeInt32LE(this._c, 8) buffer.writeInt32LE(this._d, 12) return buffer } function rotl (x, n) { return (x << n) | (x >>> (32 - n)) } function fnF (a, b, c, d, m, k, s) { return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + b) | 0 } function fnG (a, b, c, d, m, k, s) { return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + b) | 0 } function fnH (a, b, c, d, m, k, s) { return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + b) | 0 } function fnI (a, b, c, d, m, k, s) { return (rotl((a + ((c ^ (b | (~d)))) + m + k) | 0, s) + b) | 0 } module.exports = MD5 },{"hash-base":227,"inherits":262,"safe-buffer":318}],267:[function(require,module,exports){ var bn = require('bn.js'); var brorand = require('brorand'); function MillerRabin(rand) { this.rand = rand || new brorand.Rand(); } module.exports = MillerRabin; MillerRabin.create = function create(rand) { return new MillerRabin(rand); }; MillerRabin.prototype._randbelow = function _randbelow(n) { var len = n.bitLength(); var min_bytes = Math.ceil(len / 8); // Generage random bytes until a number less than n is found. // This ensures that 0..n-1 have an equal probability of being selected. do var a = new bn(this.rand.generate(min_bytes)); while (a.cmp(n) >= 0); return a; }; MillerRabin.prototype._randrange = function _randrange(start, stop) { // Generate a random number greater than or equal to start and less than stop. var size = stop.sub(start); return start.add(this._randbelow(size)); }; MillerRabin.prototype.test = function test(n, k, cb) { var len = n.bitLength(); var red = bn.mont(n); var rone = new bn(1).toRed(red); if (!k) k = Math.max(1, (len / 48) | 0); // Find d and s, (n - 1) = (2 ^ s) * d; var n1 = n.subn(1); for (var s = 0; !n1.testn(s); s++) {} var d = n.shrn(s); var rn1 = n1.toRed(red); var prime = true; for (; k > 0; k--) { var a = this._randrange(new bn(2), n1); if (cb) cb(a); var x = a.toRed(red).redPow(d); if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; for (var i = 1; i < s; i++) { x = x.redSqr(); if (x.cmp(rone) === 0) return false; if (x.cmp(rn1) === 0) break; } if (i === s) return false; } return prime; }; MillerRabin.prototype.getDivisor = function getDivisor(n, k) { var len = n.bitLength(); var red = bn.mont(n); var rone = new bn(1).toRed(red); if (!k) k = Math.max(1, (len / 48) | 0); // Find d and s, (n - 1) = (2 ^ s) * d; var n1 = n.subn(1); for (var s = 0; !n1.testn(s); s++) {} var d = n.shrn(s); var rn1 = n1.toRed(red); for (; k > 0; k--) { var a = this._randrange(new bn(2), n1); var g = n.gcd(a); if (g.cmpn(1) !== 0) return g; var x = a.toRed(red).redPow(d); if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue; for (var i = 1; i < s; i++) { x = x.redSqr(); if (x.cmp(rone) === 0) return x.fromRed().subn(1).gcd(n); if (x.cmp(rn1) === 0) break; } if (i === s) { x = x.redSqr(); return x.fromRed().subn(1).gcd(n); } } return false; }; },{"bn.js":147,"brorand":148}],268:[function(require,module,exports){ module.exports = assert; function assert(val, msg) { if (!val) throw new Error(msg || 'Assertion failed'); } assert.equal = function assertEqual(l, r, msg) { if (l != r) throw new Error(msg || ('Assertion failed: ' + l + ' != ' + r)); }; },{}],269:[function(require,module,exports){ 'use strict'; var utils = exports; function toArray(msg, enc) { if (Array.isArray(msg)) return msg.slice(); if (!msg) return []; var res = []; if (typeof msg !== 'string') { for (var i = 0; i < msg.length; i++) res[i] = msg[i] | 0; return res; } if (enc === 'hex') { msg = msg.replace(/[^a-z0-9]+/ig, ''); if (msg.length % 2 !== 0) msg = '0' + msg; for (var i = 0; i < msg.length; i += 2) res.push(parseInt(msg[i] + msg[i + 1], 16)); } else { for (var i = 0; i < msg.length; i++) { var c = msg.charCodeAt(i); var hi = c >> 8; var lo = c & 0xff; if (hi) res.push(hi, lo); else res.push(lo); } } return res; } utils.toArray = toArray; function zero2(word) { if (word.length === 1) return '0' + word; else return word; } utils.zero2 = zero2; function toHex(msg) { var res = ''; for (var i = 0; i < msg.length; i++) res += zero2(msg[i].toString(16)); return res; } utils.toHex = toHex; utils.encode = function encode(arr, enc) { if (enc === 'hex') return toHex(arr); else return arr; }; },{}],270:[function(require,module,exports){ exports.endianness = function () { return 'LE' }; exports.hostname = function () { if (typeof location !== 'undefined') { return location.hostname } else return ''; }; exports.loadavg = function () { return [] }; exports.uptime = function () { return 0 }; exports.freemem = function () { return Number.MAX_VALUE; }; exports.totalmem = function () { return Number.MAX_VALUE; }; exports.cpus = function () { return [] }; exports.type = function () { return 'Browser' }; exports.release = function () { if (typeof navigator !== 'undefined') { return navigator.appVersion; } return ''; }; exports.networkInterfaces = exports.getNetworkInterfaces = function () { return {} }; exports.arch = function () { return 'javascript' }; exports.platform = function () { return 'browser' }; exports.tmpdir = exports.tmpDir = function () { return '/tmp'; }; exports.EOL = '\n'; exports.homedir = function () { return '/' }; },{}],271:[function(require,module,exports){ module.exports={"2.16.840.1.101.3.4.1.1": "aes-128-ecb", "2.16.840.1.101.3.4.1.2": "aes-128-cbc", "2.16.840.1.101.3.4.1.3": "aes-128-ofb", "2.16.840.1.101.3.4.1.4": "aes-128-cfb", "2.16.840.1.101.3.4.1.21": "aes-192-ecb", "2.16.840.1.101.3.4.1.22": "aes-192-cbc", "2.16.840.1.101.3.4.1.23": "aes-192-ofb", "2.16.840.1.101.3.4.1.24": "aes-192-cfb", "2.16.840.1.101.3.4.1.41": "aes-256-ecb", "2.16.840.1.101.3.4.1.42": "aes-256-cbc", "2.16.840.1.101.3.4.1.43": "aes-256-ofb", "2.16.840.1.101.3.4.1.44": "aes-256-cfb" } },{}],272:[function(require,module,exports){ // from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js // Fedor, you are amazing. 'use strict' var asn1 = require('asn1.js') exports.certificate = require('./certificate') var RSAPrivateKey = asn1.define('RSAPrivateKey', function () { this.seq().obj( this.key('version').int(), this.key('modulus').int(), this.key('publicExponent').int(), this.key('privateExponent').int(), this.key('prime1').int(), this.key('prime2').int(), this.key('exponent1').int(), this.key('exponent2').int(), this.key('coefficient').int() ) }) exports.RSAPrivateKey = RSAPrivateKey var RSAPublicKey = asn1.define('RSAPublicKey', function () { this.seq().obj( this.key('modulus').int(), this.key('publicExponent').int() ) }) exports.RSAPublicKey = RSAPublicKey var PublicKey = asn1.define('SubjectPublicKeyInfo', function () { this.seq().obj( this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr() ) }) exports.PublicKey = PublicKey var AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () { this.seq().obj( this.key('algorithm').objid(), this.key('none').null_().optional(), this.key('curve').objid().optional(), this.key('params').seq().obj( this.key('p').int(), this.key('q').int(), this.key('g').int() ).optional() ) }) var PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () { this.seq().obj( this.key('version').int(), this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPrivateKey').octstr() ) }) exports.PrivateKey = PrivateKeyInfo var EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () { this.seq().obj( this.key('algorithm').seq().obj( this.key('id').objid(), this.key('decrypt').seq().obj( this.key('kde').seq().obj( this.key('id').objid(), this.key('kdeparams').seq().obj( this.key('salt').octstr(), this.key('iters').int() ) ), this.key('cipher').seq().obj( this.key('algo').objid(), this.key('iv').octstr() ) ) ), this.key('subjectPrivateKey').octstr() ) }) exports.EncryptedPrivateKey = EncryptedPrivateKeyInfo var DSAPrivateKey = asn1.define('DSAPrivateKey', function () { this.seq().obj( this.key('version').int(), this.key('p').int(), this.key('q').int(), this.key('g').int(), this.key('pub_key').int(), this.key('priv_key').int() ) }) exports.DSAPrivateKey = DSAPrivateKey exports.DSAparam = asn1.define('DSAparam', function () { this.int() }) var ECPrivateKey = asn1.define('ECPrivateKey', function () { this.seq().obj( this.key('version').int(), this.key('privateKey').octstr(), this.key('parameters').optional().explicit(0).use(ECParameters), this.key('publicKey').optional().explicit(1).bitstr() ) }) exports.ECPrivateKey = ECPrivateKey var ECParameters = asn1.define('ECParameters', function () { this.choice({ namedCurve: this.objid() }) }) exports.signature = asn1.define('signature', function () { this.seq().obj( this.key('r').int(), this.key('s').int() ) }) },{"./certificate":273,"asn1.js":132}],273:[function(require,module,exports){ // from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js // thanks to @Rantanen 'use strict' var asn = require('asn1.js') var Time = asn.define('Time', function () { this.choice({ utcTime: this.utctime(), generalTime: this.gentime() }) }) var AttributeTypeValue = asn.define('AttributeTypeValue', function () { this.seq().obj( this.key('type').objid(), this.key('value').any() ) }) var AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () { this.seq().obj( this.key('algorithm').objid(), this.key('parameters').optional(), this.key('curve').objid().optional() ) }) var SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () { this.seq().obj( this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr() ) }) var RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () { this.setof(AttributeTypeValue) }) var RDNSequence = asn.define('RDNSequence', function () { this.seqof(RelativeDistinguishedName) }) var Name = asn.define('Name', function () { this.choice({ rdnSequence: this.use(RDNSequence) }) }) var Validity = asn.define('Validity', function () { this.seq().obj( this.key('notBefore').use(Time), this.key('notAfter').use(Time) ) }) var Extension = asn.define('Extension', function () { this.seq().obj( this.key('extnID').objid(), this.key('critical').bool().def(false), this.key('extnValue').octstr() ) }) var TBSCertificate = asn.define('TBSCertificate', function () { this.seq().obj( this.key('version').explicit(0).int().optional(), this.key('serialNumber').int(), this.key('signature').use(AlgorithmIdentifier), this.key('issuer').use(Name), this.key('validity').use(Validity), this.key('subject').use(Name), this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), this.key('issuerUniqueID').implicit(1).bitstr().optional(), this.key('subjectUniqueID').implicit(2).bitstr().optional(), this.key('extensions').explicit(3).seqof(Extension).optional() ) }) var X509Certificate = asn.define('X509Certificate', function () { this.seq().obj( this.key('tbsCertificate').use(TBSCertificate), this.key('signatureAlgorithm').use(AlgorithmIdentifier), this.key('signatureValue').bitstr() ) }) module.exports = X509Certificate },{"asn1.js":132}],274:[function(require,module,exports){ // adapted from https://github.com/apatil/pemstrip var findProc = /Proc-Type: 4,ENCRYPTED[\n\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\n\r]+([0-9A-z\n\r\+\/\=]+)[\n\r]+/m var startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m var fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\n\r\+\/\=]+)-----END \1-----$/m var evp = require('evp_bytestokey') var ciphers = require('browserify-aes') var Buffer = require('safe-buffer').Buffer module.exports = function (okey, password) { var key = okey.toString() var match = key.match(findProc) var decrypted if (!match) { var match2 = key.match(fullRegex) decrypted = new Buffer(match2[2].replace(/[\r\n]/g, ''), 'base64') } else { var suite = 'aes' + match[1] var iv = Buffer.from(match[2], 'hex') var cipherText = Buffer.from(match[3].replace(/[\r\n]/g, ''), 'base64') var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key var out = [] var cipher = ciphers.createDecipheriv(suite, cipherKey, iv) out.push(cipher.update(cipherText)) out.push(cipher.final()) decrypted = Buffer.concat(out) } var tag = key.match(startRegex)[1] return { tag: tag, data: decrypted } } },{"browserify-aes":152,"evp_bytestokey":222,"safe-buffer":318}],275:[function(require,module,exports){ var asn1 = require('./asn1') var aesid = require('./aesid.json') var fixProc = require('./fixProc') var ciphers = require('browserify-aes') var compat = require('pbkdf2') var Buffer = require('safe-buffer').Buffer module.exports = parseKeys function parseKeys (buffer) { var password if (typeof buffer === 'object' && !Buffer.isBuffer(buffer)) { password = buffer.passphrase buffer = buffer.key } if (typeof buffer === 'string') { buffer = Buffer.from(buffer) } var stripped = fixProc(buffer, password) var type = stripped.tag var data = stripped.data var subtype, ndata switch (type) { case 'CERTIFICATE': ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo // falls through case 'PUBLIC KEY': if (!ndata) { ndata = asn1.PublicKey.decode(data, 'der') } subtype = ndata.algorithm.algorithm.join('.') switch (subtype) { case '1.2.840.113549.1.1.1': return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der') case '1.2.840.10045.2.1': ndata.subjectPrivateKey = ndata.subjectPublicKey return { type: 'ec', data: ndata } case '1.2.840.10040.4.1': ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der') return { type: 'dsa', data: ndata.algorithm.params } default: throw new Error('unknown key id ' + subtype) } throw new Error('unknown key type ' + type) case 'ENCRYPTED PRIVATE KEY': data = asn1.EncryptedPrivateKey.decode(data, 'der') data = decrypt(data, password) // falls through case 'PRIVATE KEY': ndata = asn1.PrivateKey.decode(data, 'der') subtype = ndata.algorithm.algorithm.join('.') switch (subtype) { case '1.2.840.113549.1.1.1': return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der') case '1.2.840.10045.2.1': return { curve: ndata.algorithm.curve, privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey } case '1.2.840.10040.4.1': ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der') return { type: 'dsa', params: ndata.algorithm.params } default: throw new Error('unknown key id ' + subtype) } throw new Error('unknown key type ' + type) case 'RSA PUBLIC KEY': return asn1.RSAPublicKey.decode(data, 'der') case 'RSA PRIVATE KEY': return asn1.RSAPrivateKey.decode(data, 'der') case 'DSA PRIVATE KEY': return { type: 'dsa', params: asn1.DSAPrivateKey.decode(data, 'der') } case 'EC PRIVATE KEY': data = asn1.ECPrivateKey.decode(data, 'der') return { curve: data.parameters.value, privateKey: data.privateKey } default: throw new Error('unknown key type ' + type) } } parseKeys.signature = asn1.signature function decrypt (data, password) { var salt = data.algorithm.decrypt.kde.kdeparams.salt var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10) var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')] var iv = data.algorithm.decrypt.cipher.iv var cipherText = data.subjectPrivateKey var keylen = parseInt(algo.split('-')[1], 10) / 8 var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1') var cipher = ciphers.createDecipheriv(algo, key, iv) var out = [] out.push(cipher.update(cipherText)) out.push(cipher.final()) return Buffer.concat(out) } },{"./aesid.json":271,"./asn1":272,"./fixProc":274,"browserify-aes":152,"pbkdf2":278,"safe-buffer":318}],276:[function(require,module,exports){ (function (process){ // .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1, // backported and transplited with Babel, with backwards-compat fixes // Copyright Joyent, Inc. and other Node contributors. // // 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. // resolves . and .. elements in a path array with directory names there // must be no slashes, empty elements, or device names (c:\) in the array // (so also no leading and trailing slashes - it does not distinguish // relative and absolute paths) function normalizeArray(parts, allowAboveRoot) { // if the path tries to go above the root, `up` ends up > 0 var up = 0; for (var i = parts.length - 1; i >= 0; i--) { var last = parts[i]; if (last === '.') { parts.splice(i, 1); } else if (last === '..') { parts.splice(i, 1); up++; } else if (up) { parts.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (allowAboveRoot) { for (; up--; up) { parts.unshift('..'); } } return parts; } // path.resolve([from ...], to) // posix version exports.resolve = function() { var resolvedPath = '', resolvedAbsolute = false; for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { var path = (i >= 0) ? arguments[i] : process.cwd(); // Skip empty and invalid entries if (typeof path !== 'string') { throw new TypeError('Arguments to path.resolve must be strings'); } else if (!path) { continue; } resolvedPath = path + '/' + resolvedPath; resolvedAbsolute = path.charAt(0) === '/'; } // At this point the path should be resolved to a full absolute path, but // handle relative paths to be safe (might happen when process.cwd() fails) // Normalize the path resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { return !!p; }), !resolvedAbsolute).join('/'); return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; }; // path.normalize(path) // posix version exports.normalize = function(path) { var isAbsolute = exports.isAbsolute(path), trailingSlash = substr(path, -1) === '/'; // Normalize the path path = normalizeArray(filter(path.split('/'), function(p) { return !!p; }), !isAbsolute).join('/'); if (!path && !isAbsolute) { path = '.'; } if (path && trailingSlash) { path += '/'; } return (isAbsolute ? '/' : '') + path; }; // posix version exports.isAbsolute = function(path) { return path.charAt(0) === '/'; }; // posix version exports.join = function() { var paths = Array.prototype.slice.call(arguments, 0); return exports.normalize(filter(paths, function(p, index) { if (typeof p !== 'string') { throw new TypeError('Arguments to path.join must be strings'); } return p; }).join('/')); }; // path.relative(from, to) // posix version exports.relative = function(from, to) { from = exports.resolve(from).substr(1); to = exports.resolve(to).substr(1); function trim(arr) { var start = 0; for (; start < arr.length; start++) { if (arr[start] !== '') break; } var end = arr.length - 1; for (; end >= 0; end--) { if (arr[end] !== '') break; } if (start > end) return []; return arr.slice(start, end - start + 1); } var fromParts = trim(from.split('/')); var toParts = trim(to.split('/')); var length = Math.min(fromParts.length, toParts.length); var samePartsLength = length; for (var i = 0; i < length; i++) { if (fromParts[i] !== toParts[i]) { samePartsLength = i; break; } } var outputParts = []; for (var i = samePartsLength; i < fromParts.length; i++) { outputParts.push('..'); } outputParts = outputParts.concat(toParts.slice(samePartsLength)); return outputParts.join('/'); }; exports.sep = '/'; exports.delimiter = ':'; exports.dirname = function (path) { if (typeof path !== 'string') path = path + ''; if (path.length === 0) return '.'; var code = path.charCodeAt(0); var hasRoot = code === 47 /*/*/; var end = -1; var matchedSlash = true; for (var i = path.length - 1; i >= 1; --i) { code = path.charCodeAt(i); if (code === 47 /*/*/) { if (!matchedSlash) { end = i; break; } } else { // We saw the first non-path separator matchedSlash = false; } } if (end === -1) return hasRoot ? '/' : '.'; if (hasRoot && end === 1) { // return '//'; // Backwards-compat fix: return '/'; } return path.slice(0, end); }; function basename(path) { if (typeof path !== 'string') path = path + ''; var start = 0; var end = -1; var matchedSlash = true; var i; for (i = path.length - 1; i >= 0; --i) { if (path.charCodeAt(i) === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { start = i + 1; break; } } else if (end === -1) { // We saw the first non-path separator, mark this as the end of our // path component matchedSlash = false; end = i + 1; } } if (end === -1) return ''; return path.slice(start, end); } // Uses a mixed approach for backwards-compatibility, as ext behavior changed // in new Node.js versions, so only basename() above is backported here exports.basename = function (path, ext) { var f = basename(path); if (ext && f.substr(-1 * ext.length) === ext) { f = f.substr(0, f.length - ext.length); } return f; }; exports.extname = function (path) { if (typeof path !== 'string') path = path + ''; var startDot = -1; var startPart = 0; var end = -1; var matchedSlash = true; // Track the state of characters (if any) we see before our first dot and // after any path separator we find var preDotState = 0; for (var i = path.length - 1; i >= 0; --i) { var code = path.charCodeAt(i); if (code === 47 /*/*/) { // If we reached a path separator that was not part of a set of path // separators at the end of the string, stop now if (!matchedSlash) { startPart = i + 1; break; } continue; } if (end === -1) { // We saw the first non-path separator, mark this as the end of our // extension matchedSlash = false; end = i + 1; } if (code === 46 /*.*/) { // If this is our first dot, mark it as the start of our extension if (startDot === -1) startDot = i; else if (preDotState !== 1) preDotState = 1; } else if (startDot !== -1) { // We saw a non-dot and non-path separator before our dot, so we should // have a good chance at having a non-empty extension preDotState = -1; } } if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot preDotState === 0 || // The (right-most) trimmed path component is exactly '..' preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) { return ''; } return path.slice(startDot, end); }; function filter (xs, f) { if (xs.filter) return xs.filter(f); var res = []; for (var i = 0; i < xs.length; i++) { if (f(xs[i], i, xs)) res.push(xs[i]); } return res; } // String.prototype.substr - negative index don't work in IE8 var substr = 'ab'.substr(-1) === 'b' ? function (str, start, len) { return str.substr(start, len) } : function (str, start, len) { if (start < 0) start = str.length + start; return str.substr(start, len); } ; }).call(this,require('_process')) },{"_process":284}],277:[function(require,module,exports){ 'use strict'; module.exports = Pbf; var ieee754 = require('ieee754'); function Pbf(buf) { this.buf = ArrayBuffer.isView && ArrayBuffer.isView(buf) ? buf : new Uint8Array(buf || 0); this.pos = 0; this.type = 0; this.length = this.buf.length; } Pbf.Varint = 0; // varint: int32, int64, uint32, uint64, sint32, sint64, bool, enum Pbf.Fixed64 = 1; // 64-bit: double, fixed64, sfixed64 Pbf.Bytes = 2; // length-delimited: string, bytes, embedded messages, packed repeated fields Pbf.Fixed32 = 5; // 32-bit: float, fixed32, sfixed32 var SHIFT_LEFT_32 = (1 << 16) * (1 << 16), SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32; Pbf.prototype = { destroy: function() { this.buf = null; }, // === READING ================================================================= readFields: function(readField, result, end) { end = end || this.length; while (this.pos < end) { var val = this.readVarint(), tag = val >> 3, startPos = this.pos; this.type = val & 0x7; readField(tag, result, this); if (this.pos === startPos) this.skip(val); } return result; }, readMessage: function(readField, result) { return this.readFields(readField, result, this.readVarint() + this.pos); }, readFixed32: function() { var val = readUInt32(this.buf, this.pos); this.pos += 4; return val; }, readSFixed32: function() { var val = readInt32(this.buf, this.pos); this.pos += 4; return val; }, // 64-bit int handling is based on github.com/dpw/node-buffer-more-ints (MIT-licensed) readFixed64: function() { var val = readUInt32(this.buf, this.pos) + readUInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; this.pos += 8; return val; }, readSFixed64: function() { var val = readUInt32(this.buf, this.pos) + readInt32(this.buf, this.pos + 4) * SHIFT_LEFT_32; this.pos += 8; return val; }, readFloat: function() { var val = ieee754.read(this.buf, this.pos, true, 23, 4); this.pos += 4; return val; }, readDouble: function() { var val = ieee754.read(this.buf, this.pos, true, 52, 8); this.pos += 8; return val; }, readVarint: function(isSigned) { var buf = this.buf, val, b; b = buf[this.pos++]; val = b & 0x7f; if (b < 0x80) return val; b = buf[this.pos++]; val |= (b & 0x7f) << 7; if (b < 0x80) return val; b = buf[this.pos++]; val |= (b & 0x7f) << 14; if (b < 0x80) return val; b = buf[this.pos++]; val |= (b & 0x7f) << 21; if (b < 0x80) return val; b = buf[this.pos]; val |= (b & 0x0f) << 28; return readVarintRemainder(val, isSigned, this); }, readVarint64: function() { // for compatibility with v2.0.1 return this.readVarint(true); }, readSVarint: function() { var num = this.readVarint(); return num % 2 === 1 ? (num + 1) / -2 : num / 2; // zigzag encoding }, readBoolean: function() { return Boolean(this.readVarint()); }, readString: function() { var end = this.readVarint() + this.pos, str = readUtf8(this.buf, this.pos, end); this.pos = end; return str; }, readBytes: function() { var end = this.readVarint() + this.pos, buffer = this.buf.subarray(this.pos, end); this.pos = end; return buffer; }, // verbose for performance reasons; doesn't affect gzipped size readPackedVarint: function(arr, isSigned) { if (this.type !== Pbf.Bytes) return arr.push(this.readVarint(isSigned)); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readVarint(isSigned)); return arr; }, readPackedSVarint: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readSVarint()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readSVarint()); return arr; }, readPackedBoolean: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readBoolean()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readBoolean()); return arr; }, readPackedFloat: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readFloat()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readFloat()); return arr; }, readPackedDouble: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readDouble()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readDouble()); return arr; }, readPackedFixed32: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readFixed32()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readFixed32()); return arr; }, readPackedSFixed32: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed32()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readSFixed32()); return arr; }, readPackedFixed64: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readFixed64()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readFixed64()); return arr; }, readPackedSFixed64: function(arr) { if (this.type !== Pbf.Bytes) return arr.push(this.readSFixed64()); var end = readPackedEnd(this); arr = arr || []; while (this.pos < end) arr.push(this.readSFixed64()); return arr; }, skip: function(val) { var type = val & 0x7; if (type === Pbf.Varint) while (this.buf[this.pos++] > 0x7f) {} else if (type === Pbf.Bytes) this.pos = this.readVarint() + this.pos; else if (type === Pbf.Fixed32) this.pos += 4; else if (type === Pbf.Fixed64) this.pos += 8; else throw new Error('Unimplemented type: ' + type); }, // === WRITING ================================================================= writeTag: function(tag, type) { this.writeVarint((tag << 3) | type); }, realloc: function(min) { var length = this.length || 16; while (length < this.pos + min) length *= 2; if (length !== this.length) { var buf = new Uint8Array(length); buf.set(this.buf); this.buf = buf; this.length = length; } }, finish: function() { this.length = this.pos; this.pos = 0; return this.buf.subarray(0, this.length); }, writeFixed32: function(val) { this.realloc(4); writeInt32(this.buf, val, this.pos); this.pos += 4; }, writeSFixed32: function(val) { this.realloc(4); writeInt32(this.buf, val, this.pos); this.pos += 4; }, writeFixed64: function(val) { this.realloc(8); writeInt32(this.buf, val & -1, this.pos); writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); this.pos += 8; }, writeSFixed64: function(val) { this.realloc(8); writeInt32(this.buf, val & -1, this.pos); writeInt32(this.buf, Math.floor(val * SHIFT_RIGHT_32), this.pos + 4); this.pos += 8; }, writeVarint: function(val) { val = +val || 0; if (val > 0xfffffff || val < 0) { writeBigVarint(val, this); return; } this.realloc(4); this.buf[this.pos++] = val & 0x7f | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; this.buf[this.pos++] = ((val >>>= 7) & 0x7f) | (val > 0x7f ? 0x80 : 0); if (val <= 0x7f) return; this.buf[this.pos++] = (val >>> 7) & 0x7f; }, writeSVarint: function(val) { this.writeVarint(val < 0 ? -val * 2 - 1 : val * 2); }, writeBoolean: function(val) { this.writeVarint(Boolean(val)); }, writeString: function(str) { str = String(str); this.realloc(str.length * 4); this.pos++; // reserve 1 byte for short string length var startPos = this.pos; // write the string directly to the buffer and see how much was written this.pos = writeUtf8(this.buf, str, this.pos); var len = this.pos - startPos; if (len >= 0x80) makeRoomForExtraLength(startPos, len, this); // finally, write the message length in the reserved place and restore the position this.pos = startPos - 1; this.writeVarint(len); this.pos += len; }, writeFloat: function(val) { this.realloc(4); ieee754.write(this.buf, val, this.pos, true, 23, 4); this.pos += 4; }, writeDouble: function(val) { this.realloc(8); ieee754.write(this.buf, val, this.pos, true, 52, 8); this.pos += 8; }, writeBytes: function(buffer) { var len = buffer.length; this.writeVarint(len); this.realloc(len); for (var i = 0; i < len; i++) this.buf[this.pos++] = buffer[i]; }, writeRawMessage: function(fn, obj) { this.pos++; // reserve 1 byte for short message length // write the message directly to the buffer and see how much was written var startPos = this.pos; fn(obj, this); var len = this.pos - startPos; if (len >= 0x80) makeRoomForExtraLength(startPos, len, this); // finally, write the message length in the reserved place and restore the position this.pos = startPos - 1; this.writeVarint(len); this.pos += len; }, writeMessage: function(tag, fn, obj) { this.writeTag(tag, Pbf.Bytes); this.writeRawMessage(fn, obj); }, writePackedVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedVarint, arr); }, writePackedSVarint: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSVarint, arr); }, writePackedBoolean: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedBoolean, arr); }, writePackedFloat: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFloat, arr); }, writePackedDouble: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedDouble, arr); }, writePackedFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed32, arr); }, writePackedSFixed32: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed32, arr); }, writePackedFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedFixed64, arr); }, writePackedSFixed64: function(tag, arr) { if (arr.length) this.writeMessage(tag, writePackedSFixed64, arr); }, writeBytesField: function(tag, buffer) { this.writeTag(tag, Pbf.Bytes); this.writeBytes(buffer); }, writeFixed32Field: function(tag, val) { this.writeTag(tag, Pbf.Fixed32); this.writeFixed32(val); }, writeSFixed32Field: function(tag, val) { this.writeTag(tag, Pbf.Fixed32); this.writeSFixed32(val); }, writeFixed64Field: function(tag, val) { this.writeTag(tag, Pbf.Fixed64); this.writeFixed64(val); }, writeSFixed64Field: function(tag, val) { this.writeTag(tag, Pbf.Fixed64); this.writeSFixed64(val); }, writeVarintField: function(tag, val) { this.writeTag(tag, Pbf.Varint); this.writeVarint(val); }, writeSVarintField: function(tag, val) { this.writeTag(tag, Pbf.Varint); this.writeSVarint(val); }, writeStringField: function(tag, str) { this.writeTag(tag, Pbf.Bytes); this.writeString(str); }, writeFloatField: function(tag, val) { this.writeTag(tag, Pbf.Fixed32); this.writeFloat(val); }, writeDoubleField: function(tag, val) { this.writeTag(tag, Pbf.Fixed64); this.writeDouble(val); }, writeBooleanField: function(tag, val) { this.writeVarintField(tag, Boolean(val)); } }; function readVarintRemainder(l, s, p) { var buf = p.buf, h, b; b = buf[p.pos++]; h = (b & 0x70) >> 4; if (b < 0x80) return toNum(l, h, s); b = buf[p.pos++]; h |= (b & 0x7f) << 3; if (b < 0x80) return toNum(l, h, s); b = buf[p.pos++]; h |= (b & 0x7f) << 10; if (b < 0x80) return toNum(l, h, s); b = buf[p.pos++]; h |= (b & 0x7f) << 17; if (b < 0x80) return toNum(l, h, s); b = buf[p.pos++]; h |= (b & 0x7f) << 24; if (b < 0x80) return toNum(l, h, s); b = buf[p.pos++]; h |= (b & 0x01) << 31; if (b < 0x80) return toNum(l, h, s); throw new Error('Expected varint not more than 10 bytes'); } function readPackedEnd(pbf) { return pbf.type === Pbf.Bytes ? pbf.readVarint() + pbf.pos : pbf.pos + 1; } function toNum(low, high, isSigned) { if (isSigned) { return high * 0x100000000 + (low >>> 0); } return ((high >>> 0) * 0x100000000) + (low >>> 0); } function writeBigVarint(val, pbf) { var low, high; if (val >= 0) { low = (val % 0x100000000) | 0; high = (val / 0x100000000) | 0; } else { low = ~(-val % 0x100000000); high = ~(-val / 0x100000000); if (low ^ 0xffffffff) { low = (low + 1) | 0; } else { low = 0; high = (high + 1) | 0; } } if (val >= 0x10000000000000000 || val < -0x10000000000000000) { throw new Error('Given varint doesn\'t fit into 10 bytes'); } pbf.realloc(10); writeBigVarintLow(low, high, pbf); writeBigVarintHigh(high, pbf); } function writeBigVarintLow(low, high, pbf) { pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; pbf.buf[pbf.pos++] = low & 0x7f | 0x80; low >>>= 7; pbf.buf[pbf.pos] = low & 0x7f; } function writeBigVarintHigh(high, pbf) { var lsb = (high & 0x07) << 4; pbf.buf[pbf.pos++] |= lsb | ((high >>>= 3) ? 0x80 : 0); if (!high) return; pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; pbf.buf[pbf.pos++] = high & 0x7f | ((high >>>= 7) ? 0x80 : 0); if (!high) return; pbf.buf[pbf.pos++] = high & 0x7f; } function makeRoomForExtraLength(startPos, len, pbf) { var extraLen = len <= 0x3fff ? 1 : len <= 0x1fffff ? 2 : len <= 0xfffffff ? 3 : Math.floor(Math.log(len) / (Math.LN2 * 7)); // if 1 byte isn't enough for encoding message length, shift the data to the right pbf.realloc(extraLen); for (var i = pbf.pos - 1; i >= startPos; i--) pbf.buf[i + extraLen] = pbf.buf[i]; } function writePackedVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeVarint(arr[i]); } function writePackedSVarint(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSVarint(arr[i]); } function writePackedFloat(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFloat(arr[i]); } function writePackedDouble(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeDouble(arr[i]); } function writePackedBoolean(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeBoolean(arr[i]); } function writePackedFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed32(arr[i]); } function writePackedSFixed32(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed32(arr[i]); } function writePackedFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeFixed64(arr[i]); } function writePackedSFixed64(arr, pbf) { for (var i = 0; i < arr.length; i++) pbf.writeSFixed64(arr[i]); } // Buffer code below from https://github.com/feross/buffer, MIT-licensed function readUInt32(buf, pos) { return ((buf[pos]) | (buf[pos + 1] << 8) | (buf[pos + 2] << 16)) + (buf[pos + 3] * 0x1000000); } function writeInt32(buf, val, pos) { buf[pos] = val; buf[pos + 1] = (val >>> 8); buf[pos + 2] = (val >>> 16); buf[pos + 3] = (val >>> 24); } function readInt32(buf, pos) { return ((buf[pos]) | (buf[pos + 1] << 8) | (buf[pos + 2] << 16)) + (buf[pos + 3] << 24); } function readUtf8(buf, pos, end) { var str = ''; var i = pos; while (i < end) { var b0 = buf[i]; var c = null; // codepoint var bytesPerSequence = b0 > 0xEF ? 4 : b0 > 0xDF ? 3 : b0 > 0xBF ? 2 : 1; if (i + bytesPerSequence > end) break; var b1, b2, b3; if (bytesPerSequence === 1) { if (b0 < 0x80) { c = b0; } } else if (bytesPerSequence === 2) { b1 = buf[i + 1]; if ((b1 & 0xC0) === 0x80) { c = (b0 & 0x1F) << 0x6 | (b1 & 0x3F); if (c <= 0x7F) { c = null; } } } else if (bytesPerSequence === 3) { b1 = buf[i + 1]; b2 = buf[i + 2]; if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80) { c = (b0 & 0xF) << 0xC | (b1 & 0x3F) << 0x6 | (b2 & 0x3F); if (c <= 0x7FF || (c >= 0xD800 && c <= 0xDFFF)) { c = null; } } } else if (bytesPerSequence === 4) { b1 = buf[i + 1]; b2 = buf[i + 2]; b3 = buf[i + 3]; if ((b1 & 0xC0) === 0x80 && (b2 & 0xC0) === 0x80 && (b3 & 0xC0) === 0x80) { c = (b0 & 0xF) << 0x12 | (b1 & 0x3F) << 0xC | (b2 & 0x3F) << 0x6 | (b3 & 0x3F); if (c <= 0xFFFF || c >= 0x110000) { c = null; } } } if (c === null) { c = 0xFFFD; bytesPerSequence = 1; } else if (c > 0xFFFF) { c -= 0x10000; str += String.fromCharCode(c >>> 10 & 0x3FF | 0xD800); c = 0xDC00 | c & 0x3FF; } str += String.fromCharCode(c); i += bytesPerSequence; } return str; } function writeUtf8(buf, str, pos) { for (var i = 0, c, lead; i < str.length; i++) { c = str.charCodeAt(i); // code point if (c > 0xD7FF && c < 0xE000) { if (lead) { if (c < 0xDC00) { buf[pos++] = 0xEF; buf[pos++] = 0xBF; buf[pos++] = 0xBD; lead = c; continue; } else { c = lead - 0xD800 << 10 | c - 0xDC00 | 0x10000; lead = null; } } else { if (c > 0xDBFF || (i + 1 === str.length)) { buf[pos++] = 0xEF; buf[pos++] = 0xBF; buf[pos++] = 0xBD; } else { lead = c; } continue; } } else if (lead) { buf[pos++] = 0xEF; buf[pos++] = 0xBF; buf[pos++] = 0xBD; lead = null; } if (c < 0x80) { buf[pos++] = c; } else { if (c < 0x800) { buf[pos++] = c >> 0x6 | 0xC0; } else { if (c < 0x10000) { buf[pos++] = c >> 0xC | 0xE0; } else { buf[pos++] = c >> 0x12 | 0xF0; buf[pos++] = c >> 0xC & 0x3F | 0x80; } buf[pos++] = c >> 0x6 & 0x3F | 0x80; } buf[pos++] = c & 0x3F | 0x80; } } return pos; } },{"ieee754":241}],278:[function(require,module,exports){ exports.pbkdf2 = require('./lib/async') exports.pbkdf2Sync = require('./lib/sync') },{"./lib/async":279,"./lib/sync":282}],279:[function(require,module,exports){ (function (process,global){ var checkParameters = require('./precondition') var defaultEncoding = require('./default-encoding') var sync = require('./sync') var Buffer = require('safe-buffer').Buffer var ZERO_BUF var subtle = global.crypto && global.crypto.subtle var toBrowser = { 'sha': 'SHA-1', 'sha-1': 'SHA-1', 'sha1': 'SHA-1', 'sha256': 'SHA-256', 'sha-256': 'SHA-256', 'sha384': 'SHA-384', 'sha-384': 'SHA-384', 'sha-512': 'SHA-512', 'sha512': 'SHA-512' } var checks = [] function checkNative (algo) { if (global.process && !global.process.browser) { return Promise.resolve(false) } if (!subtle || !subtle.importKey || !subtle.deriveBits) { return Promise.resolve(false) } if (checks[algo] !== undefined) { return checks[algo] } ZERO_BUF = ZERO_BUF || Buffer.alloc(8) var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo) .then(function () { return true }).catch(function () { return false }) checks[algo] = prom return prom } function browserPbkdf2 (password, salt, iterations, length, algo) { return subtle.importKey( 'raw', password, {name: 'PBKDF2'}, false, ['deriveBits'] ).then(function (key) { return subtle.deriveBits({ name: 'PBKDF2', salt: salt, iterations: iterations, hash: { name: algo } }, key, length << 3) }).then(function (res) { return Buffer.from(res) }) } function resolvePromise (promise, callback) { promise.then(function (out) { process.nextTick(function () { callback(null, out) }) }, function (e) { process.nextTick(function () { callback(e) }) }) } module.exports = function (password, salt, iterations, keylen, digest, callback) { if (typeof digest === 'function') { callback = digest digest = undefined } digest = digest || 'sha1' var algo = toBrowser[digest.toLowerCase()] if (!algo || typeof global.Promise !== 'function') { return process.nextTick(function () { var out try { out = sync(password, salt, iterations, keylen, digest) } catch (e) { return callback(e) } callback(null, out) }) } checkParameters(password, salt, iterations, keylen) if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2') if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding) if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding) resolvePromise(checkNative(algo).then(function (resp) { if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo) return sync(password, salt, iterations, keylen, digest) }), callback) } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./default-encoding":280,"./precondition":281,"./sync":282,"_process":284,"safe-buffer":318}],280:[function(require,module,exports){ (function (process){ var defaultEncoding /* istanbul ignore next */ if (process.browser) { defaultEncoding = 'utf-8' } else { var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10) defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary' } module.exports = defaultEncoding }).call(this,require('_process')) },{"_process":284}],281:[function(require,module,exports){ (function (Buffer){ var MAX_ALLOC = Math.pow(2, 30) - 1 // default in iojs function checkBuffer (buf, name) { if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) { throw new TypeError(name + ' must be a buffer or string') } } module.exports = function (password, salt, iterations, keylen) { checkBuffer(password, 'Password') checkBuffer(salt, 'Salt') if (typeof iterations !== 'number') { throw new TypeError('Iterations not a number') } if (iterations < 0) { throw new TypeError('Bad iterations') } if (typeof keylen !== 'number') { throw new TypeError('Key length not a number') } if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */ throw new TypeError('Bad key length') } } }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) },{"../../is-buffer/index.js":263}],282:[function(require,module,exports){ var md5 = require('create-hash/md5') var RIPEMD160 = require('ripemd160') var sha = require('sha.js') var checkParameters = require('./precondition') var defaultEncoding = require('./default-encoding') var Buffer = require('safe-buffer').Buffer var ZEROS = Buffer.alloc(128) var sizes = { md5: 16, sha1: 20, sha224: 28, sha256: 32, sha384: 48, sha512: 64, rmd160: 20, ripemd160: 20 } function Hmac (alg, key, saltLen) { var hash = getDigest(alg) var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64 if (key.length > blocksize) { key = hash(key) } else if (key.length < blocksize) { key = Buffer.concat([key, ZEROS], blocksize) } var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]) var opad = Buffer.allocUnsafe(blocksize + sizes[alg]) for (var i = 0; i < blocksize; i++) { ipad[i] = key[i] ^ 0x36 opad[i] = key[i] ^ 0x5C } var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4) ipad.copy(ipad1, 0, 0, blocksize) this.ipad1 = ipad1 this.ipad2 = ipad this.opad = opad this.alg = alg this.blocksize = blocksize this.hash = hash this.size = sizes[alg] } Hmac.prototype.run = function (data, ipad) { data.copy(ipad, this.blocksize) var h = this.hash(ipad) h.copy(this.opad, this.blocksize) return this.hash(this.opad) } function getDigest (alg) { function shaFunc (data) { return sha(alg).update(data).digest() } function rmd160Func (data) { return new RIPEMD160().update(data).digest() } if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func if (alg === 'md5') return md5 return shaFunc } function pbkdf2 (password, salt, iterations, keylen, digest) { checkParameters(password, salt, iterations, keylen) if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding) if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding) digest = digest || 'sha1' var hmac = new Hmac(digest, password, salt.length) var DK = Buffer.allocUnsafe(keylen) var block1 = Buffer.allocUnsafe(salt.length + 4) salt.copy(block1, 0, 0, salt.length) var destPos = 0 var hLen = sizes[digest] var l = Math.ceil(keylen / hLen) for (var i = 1; i <= l; i++) { block1.writeUInt32BE(i, salt.length) var T = hmac.run(block1, hmac.ipad1) var U = T for (var j = 1; j < iterations; j++) { U = hmac.run(U, hmac.ipad2) for (var k = 0; k < hLen; k++) T[k] ^= U[k] } T.copy(DK, destPos) destPos += hLen } return DK } module.exports = pbkdf2 },{"./default-encoding":280,"./precondition":281,"create-hash/md5":189,"ripemd160":317,"safe-buffer":318,"sha.js":320}],283:[function(require,module,exports){ (function (process){ 'use strict'; if (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { module.exports = { nextTick: nextTick }; } else { module.exports = process } function nextTick(fn, arg1, arg2, arg3) { if (typeof fn !== 'function') { throw new TypeError('"callback" argument must be a function'); } var len = arguments.length; var args, i; switch (len) { case 0: case 1: return process.nextTick(fn); case 2: return process.nextTick(function afterTickOne() { fn.call(null, arg1); }); case 3: return process.nextTick(function afterTickTwo() { fn.call(null, arg1, arg2); }); case 4: return process.nextTick(function afterTickThree() { fn.call(null, arg1, arg2, arg3); }); default: args = new Array(len - 1); i = 0; while (i < args.length) { args[i++] = arguments[i]; } return process.nextTick(function afterTick() { fn.apply(null, args); }); } } }).call(this,require('_process')) },{"_process":284}],284:[function(require,module,exports){ // shim for using process in browser var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it // don't break things. But we need to wrap it in a try catch in case it is // wrapped in strict mode code which doesn't define any globals. It's inside a // function because try/catches deoptimize in certain engines. var cachedSetTimeout; var cachedClearTimeout; function defaultSetTimout() { throw new Error('setTimeout has not been defined'); } function defaultClearTimeout () { throw new Error('clearTimeout has not been defined'); } (function () { try { if (typeof setTimeout === 'function') { cachedSetTimeout = setTimeout; } else { cachedSetTimeout = defaultSetTimout; } } catch (e) { cachedSetTimeout = defaultSetTimout; } try { if (typeof clearTimeout === 'function') { cachedClearTimeout = clearTimeout; } else { cachedClearTimeout = defaultClearTimeout; } } catch (e) { cachedClearTimeout = defaultClearTimeout; } } ()) function runTimeout(fun) { if (cachedSetTimeout === setTimeout) { //normal enviroments in sane situations return setTimeout(fun, 0); } // if setTimeout wasn't available but was latter defined if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { cachedSetTimeout = setTimeout; return setTimeout(fun, 0); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedSetTimeout(fun, 0); } catch(e){ try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedSetTimeout.call(null, fun, 0); } catch(e){ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error return cachedSetTimeout.call(this, fun, 0); } } } function runClearTimeout(marker) { if (cachedClearTimeout === clearTimeout) { //normal enviroments in sane situations return clearTimeout(marker); } // if clearTimeout wasn't available but was latter defined if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { cachedClearTimeout = clearTimeout; return clearTimeout(marker); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedClearTimeout(marker); } catch (e){ try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedClearTimeout.call(null, marker); } catch (e){ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. // Some versions of I.E. have different rules for clearTimeout vs setTimeout return cachedClearTimeout.call(this, marker); } } } var queue = []; var draining = false; var currentQueue; var queueIndex = -1; function cleanUpNextTick() { if (!draining || !currentQueue) { return; } draining = false; if (currentQueue.length) { queue = currentQueue.concat(queue); } else { queueIndex = -1; } if (queue.length) { drainQueue(); } } function drainQueue() { if (draining) { return; } var timeout = runTimeout(cleanUpNextTick); draining = true; var len = queue.length; while(len) { currentQueue = queue; queue = []; while (++queueIndex < len) { if (currentQueue) { currentQueue[queueIndex].run(); } } queueIndex = -1; len = queue.length; } currentQueue = null; draining = false; runClearTimeout(timeout); } process.nextTick = function (fun) { var args = new Array(arguments.length - 1); if (arguments.length > 1) { for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } } queue.push(new Item(fun, args)); if (queue.length === 1 && !draining) { runTimeout(drainQueue); } }; // v8 likes predictible objects function Item(fun, array) { this.fun = fun; this.array = array; } Item.prototype.run = function () { this.fun.apply(null, this.array); }; process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; process.version = ''; // empty string to avoid regexp issues process.versions = {}; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.prependListener = noop; process.prependOnceListener = noop; process.listeners = function (name) { return [] } process.binding = function (name) { throw new Error('process.binding is not supported'); }; process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; process.umask = function() { return 0; }; },{}],285:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.proj4 = factory()); }(this, (function () { 'use strict'; var globals = function(defs) { defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"); defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"); defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"); defs.WGS84 = defs['EPSG:4326']; defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857 defs.GOOGLE = defs['EPSG:3857']; defs['EPSG:900913'] = defs['EPSG:3857']; defs['EPSG:102113'] = defs['EPSG:3857']; }; var PJD_3PARAM = 1; var PJD_7PARAM = 2; var PJD_WGS84 = 4; // WGS84 or equivalent var PJD_NODATUM = 5; // WGS84 or equivalent var SEC_TO_RAD = 4.84813681109535993589914102357e-6; var HALF_PI = Math.PI/2; // ellipoid pj_set_ell.c var SIXTH = 0.1666666666666666667; /* 1/6 */ var RA4 = 0.04722222222222222222; /* 17/360 */ var RA6 = 0.02215608465608465608; var EPSLN = (typeof Number.EPSILON === 'undefined') ? 1.0e-10 : Number.EPSILON; var D2R = 0.01745329251994329577; var R2D = 57.29577951308232088; var FORTPI = Math.PI/4; var TWO_PI = Math.PI * 2; // SPI is slightly greater than Math.PI, so values that exceed the -180..180 // degree range by a tiny amount don't get wrapped. This prevents points that // have drifted from their original location along the 180th meridian (due to // floating point error) from changing their sign. var SPI = 3.14159265359; var exports$1 = {}; exports$1.greenwich = 0.0; //"0dE", exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W", exports$1.paris = 2.337229166667; //"2d20'14.025\"E", exports$1.bogota = -74.080916666667; //"74d04'51.3\"W", exports$1.madrid = -3.687938888889; //"3d41'16.58\"W", exports$1.rome = 12.452333333333; //"12d27'8.4\"E", exports$1.bern = 7.439583333333; //"7d26'22.5\"E", exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E", exports$1.ferro = -17.666666666667; //"17d40'W", exports$1.brussels = 4.367975; //"4d22'4.71\"E", exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E", exports$1.athens = 23.7163375; //"23d42'58.815\"E", exports$1.oslo = 10.722916666667; //"10d43'22.5\"E" var units = { ft: {to_meter: 0.3048}, 'us-ft': {to_meter: 1200 / 3937} }; var ignoredChar = /[\s_\-\/\(\)]/g; function match(obj, key) { if (obj[key]) { return obj[key]; } var keys = Object.keys(obj); var lkey = key.toLowerCase().replace(ignoredChar, ''); var i = -1; var testkey, processedKey; while (++i < keys.length) { testkey = keys[i]; processedKey = testkey.toLowerCase().replace(ignoredChar, ''); if (processedKey === lkey) { return obj[testkey]; } } } var parseProj = function(defData) { var self = {}; var paramObj = defData.split('+').map(function(v) { return v.trim(); }).filter(function(a) { return a; }).reduce(function(p, a) { var split = a.split('='); split.push(true); p[split[0].toLowerCase()] = split[1]; return p; }, {}); var paramName, paramVal, paramOutname; var params = { proj: 'projName', datum: 'datumCode', rf: function(v) { self.rf = parseFloat(v); }, lat_0: function(v) { self.lat0 = v * D2R; }, lat_1: function(v) { self.lat1 = v * D2R; }, lat_2: function(v) { self.lat2 = v * D2R; }, lat_ts: function(v) { self.lat_ts = v * D2R; }, lon_0: function(v) { self.long0 = v * D2R; }, lon_1: function(v) { self.long1 = v * D2R; }, lon_2: function(v) { self.long2 = v * D2R; }, alpha: function(v) { self.alpha = parseFloat(v) * D2R; }, lonc: function(v) { self.longc = v * D2R; }, x_0: function(v) { self.x0 = parseFloat(v); }, y_0: function(v) { self.y0 = parseFloat(v); }, k_0: function(v) { self.k0 = parseFloat(v); }, k: function(v) { self.k0 = parseFloat(v); }, a: function(v) { self.a = parseFloat(v); }, b: function(v) { self.b = parseFloat(v); }, r_a: function() { self.R_A = true; }, zone: function(v) { self.zone = parseInt(v, 10); }, south: function() { self.utmSouth = true; }, towgs84: function(v) { self.datum_params = v.split(",").map(function(a) { return parseFloat(a); }); }, to_meter: function(v) { self.to_meter = parseFloat(v); }, units: function(v) { self.units = v; var unit = match(units, v); if (unit) { self.to_meter = unit.to_meter; } }, from_greenwich: function(v) { self.from_greenwich = v * D2R; }, pm: function(v) { var pm = match(exports$1, v); self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R; }, nadgrids: function(v) { if (v === '@null') { self.datumCode = 'none'; } else { self.nadgrids = v; } }, axis: function(v) { var legalAxis = "ewnsud"; if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) { self.axis = v; } } }; for (paramName in paramObj) { paramVal = paramObj[paramName]; if (paramName in params) { paramOutname = params[paramName]; if (typeof paramOutname === 'function') { paramOutname(paramVal); } else { self[paramOutname] = paramVal; } } else { self[paramName] = paramVal; } } if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){ self.datumCode = self.datumCode.toLowerCase(); } return self; }; var NEUTRAL = 1; var KEYWORD = 2; var NUMBER = 3; var QUOTED = 4; var AFTERQUOTE = 5; var ENDED = -1; var whitespace = /\s/; var latin = /[A-Za-z]/; var keyword = /[A-Za-z84]/; var endThings = /[,\]]/; var digets = /[\d\.E\-\+]/; // const ignoredChar = /[\s_\-\/\(\)]/g; function Parser(text) { if (typeof text !== 'string') { throw new Error('not a string'); } this.text = text.trim(); this.level = 0; this.place = 0; this.root = null; this.stack = []; this.currentObject = null; this.state = NEUTRAL; } Parser.prototype.readCharicter = function() { var char = this.text[this.place++]; if (this.state !== QUOTED) { while (whitespace.test(char)) { if (this.place >= this.text.length) { return; } char = this.text[this.place++]; } } switch (this.state) { case NEUTRAL: return this.neutral(char); case KEYWORD: return this.keyword(char) case QUOTED: return this.quoted(char); case AFTERQUOTE: return this.afterquote(char); case NUMBER: return this.number(char); case ENDED: return; } }; Parser.prototype.afterquote = function(char) { if (char === '"') { this.word += '"'; this.state = QUOTED; return; } if (endThings.test(char)) { this.word = this.word.trim(); this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place); }; Parser.prototype.afterItem = function(char) { if (char === ',') { if (this.word !== null) { this.currentObject.push(this.word); } this.word = null; this.state = NEUTRAL; return; } if (char === ']') { this.level--; if (this.word !== null) { this.currentObject.push(this.word); this.word = null; } this.state = NEUTRAL; this.currentObject = this.stack.pop(); if (!this.currentObject) { this.state = ENDED; } return; } }; Parser.prototype.number = function(char) { if (digets.test(char)) { this.word += char; return; } if (endThings.test(char)) { this.word = parseFloat(this.word); this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place); }; Parser.prototype.quoted = function(char) { if (char === '"') { this.state = AFTERQUOTE; return; } this.word += char; return; }; Parser.prototype.keyword = function(char) { if (keyword.test(char)) { this.word += char; return; } if (char === '[') { var newObjects = []; newObjects.push(this.word); this.level++; if (this.root === null) { this.root = newObjects; } else { this.currentObject.push(newObjects); } this.stack.push(this.currentObject); this.currentObject = newObjects; this.state = NEUTRAL; return; } if (endThings.test(char)) { this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place); }; Parser.prototype.neutral = function(char) { if (latin.test(char)) { this.word = char; this.state = KEYWORD; return; } if (char === '"') { this.word = ''; this.state = QUOTED; return; } if (digets.test(char)) { this.word = char; this.state = NUMBER; return; } if (endThings.test(char)) { this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place); }; Parser.prototype.output = function() { while (this.place < this.text.length) { this.readCharicter(); } if (this.state === ENDED) { return this.root; } throw new Error('unable to parse string "' +this.text + '". State is ' + this.state); }; function parseString(txt) { var parser = new Parser(txt); return parser.output(); } function mapit(obj, key, value) { if (Array.isArray(key)) { value.unshift(key); key = null; } var thing = key ? {} : obj; var out = value.reduce(function(newObj, item) { sExpr(item, newObj); return newObj }, thing); if (key) { obj[key] = out; } } function sExpr(v, obj) { if (!Array.isArray(v)) { obj[v] = true; return; } var key = v.shift(); if (key === 'PARAMETER') { key = v.shift(); } if (v.length === 1) { if (Array.isArray(v[0])) { obj[key] = {}; sExpr(v[0], obj[key]); return; } obj[key] = v[0]; return; } if (!v.length) { obj[key] = true; return; } if (key === 'TOWGS84') { obj[key] = v; return; } if (!Array.isArray(key)) { obj[key] = {}; } var i; switch (key) { case 'UNIT': case 'PRIMEM': case 'VERT_DATUM': obj[key] = { name: v[0].toLowerCase(), convert: v[1] }; if (v.length === 3) { sExpr(v[2], obj[key]); } return; case 'SPHEROID': case 'ELLIPSOID': obj[key] = { name: v[0], a: v[1], rf: v[2] }; if (v.length === 4) { sExpr(v[3], obj[key]); } return; case 'PROJECTEDCRS': case 'PROJCRS': case 'GEOGCS': case 'GEOCCS': case 'PROJCS': case 'LOCAL_CS': case 'GEODCRS': case 'GEODETICCRS': case 'GEODETICDATUM': case 'EDATUM': case 'ENGINEERINGDATUM': case 'VERT_CS': case 'VERTCRS': case 'VERTICALCRS': case 'COMPD_CS': case 'COMPOUNDCRS': case 'ENGINEERINGCRS': case 'ENGCRS': case 'FITTED_CS': case 'LOCAL_DATUM': case 'DATUM': v[0] = ['name', v[0]]; mapit(obj, key, v); return; default: i = -1; while (++i < v.length) { if (!Array.isArray(v[i])) { return sExpr(v, obj[key]); } } return mapit(obj, key, v); } } var D2R$1 = 0.01745329251994329577; function rename(obj, params) { var outName = params[0]; var inName = params[1]; if (!(outName in obj) && (inName in obj)) { obj[outName] = obj[inName]; if (params.length === 3) { obj[outName] = params[2](obj[outName]); } } } function d2r(input) { return input * D2R$1; } function cleanWKT(wkt) { if (wkt.type === 'GEOGCS') { wkt.projName = 'longlat'; } else if (wkt.type === 'LOCAL_CS') { wkt.projName = 'identity'; wkt.local = true; } else { if (typeof wkt.PROJECTION === 'object') { wkt.projName = Object.keys(wkt.PROJECTION)[0]; } else { wkt.projName = wkt.PROJECTION; } } if (wkt.UNIT) { wkt.units = wkt.UNIT.name.toLowerCase(); if (wkt.units === 'metre') { wkt.units = 'meter'; } if (wkt.UNIT.convert) { if (wkt.type === 'GEOGCS') { if (wkt.DATUM && wkt.DATUM.SPHEROID) { wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a; } } else { wkt.to_meter = wkt.UNIT.convert, 10; } } } var geogcs = wkt.GEOGCS; if (wkt.type === 'GEOGCS') { geogcs = wkt; } if (geogcs) { //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){ // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R; //} if (geogcs.DATUM) { wkt.datumCode = geogcs.DATUM.name.toLowerCase(); } else { wkt.datumCode = geogcs.name.toLowerCase(); } if (wkt.datumCode.slice(0, 2) === 'd_') { wkt.datumCode = wkt.datumCode.slice(2); } if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') { wkt.datumCode = 'nzgd49'; } if (wkt.datumCode === 'wgs_1984') { if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') { wkt.sphere = true; } wkt.datumCode = 'wgs84'; } if (wkt.datumCode.slice(-6) === '_ferro') { wkt.datumCode = wkt.datumCode.slice(0, - 6); } if (wkt.datumCode.slice(-8) === '_jakarta') { wkt.datumCode = wkt.datumCode.slice(0, - 8); } if (~wkt.datumCode.indexOf('belge')) { wkt.datumCode = 'rnb72'; } if (geogcs.DATUM && geogcs.DATUM.SPHEROID) { wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk'); if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') { wkt.ellps = 'intl'; } wkt.a = geogcs.DATUM.SPHEROID.a; wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10); } if (~wkt.datumCode.indexOf('osgb_1936')) { wkt.datumCode = 'osgb36'; } } if (wkt.b && !isFinite(wkt.b)) { wkt.b = wkt.a; } function toMeter(input) { var ratio = wkt.to_meter || 1; return input * ratio; } var renamer = function(a) { return rename(wkt, a); }; var list = [ ['standard_parallel_1', 'Standard_Parallel_1'], ['standard_parallel_2', 'Standard_Parallel_2'], ['false_easting', 'False_Easting'], ['false_northing', 'False_Northing'], ['central_meridian', 'Central_Meridian'], ['latitude_of_origin', 'Latitude_Of_Origin'], ['latitude_of_origin', 'Central_Parallel'], ['scale_factor', 'Scale_Factor'], ['k0', 'scale_factor'], ['latitude_of_center', 'Latitude_of_center'], ['lat0', 'latitude_of_center', d2r], ['longitude_of_center', 'Longitude_Of_Center'], ['longc', 'longitude_of_center', d2r], ['x0', 'false_easting', toMeter], ['y0', 'false_northing', toMeter], ['long0', 'central_meridian', d2r], ['lat0', 'latitude_of_origin', d2r], ['lat0', 'standard_parallel_1', d2r], ['lat1', 'standard_parallel_1', d2r], ['lat2', 'standard_parallel_2', d2r], ['alpha', 'azimuth', d2r], ['srsCode', 'name'] ]; list.forEach(renamer); if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) { wkt.long0 = wkt.longc; } if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) { wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90); wkt.lat_ts = wkt.lat1; } } var wkt = function(wkt) { var lisp = parseString(wkt); var type = lisp.shift(); var name = lisp.shift(); lisp.unshift(['name', name]); lisp.unshift(['type', type]); var obj = {}; sExpr(lisp, obj); cleanWKT(obj); return obj; }; function defs(name) { /*global console*/ var that = this; if (arguments.length === 2) { var def = arguments[1]; if (typeof def === 'string') { if (def.charAt(0) === '+') { defs[name] = parseProj(arguments[1]); } else { defs[name] = wkt(arguments[1]); } } else { defs[name] = def; } } else if (arguments.length === 1) { if (Array.isArray(name)) { return name.map(function(v) { if (Array.isArray(v)) { defs.apply(that, v); } else { defs(v); } }); } else if (typeof name === 'string') { if (name in defs) { return defs[name]; } } else if ('EPSG' in name) { defs['EPSG:' + name.EPSG] = name; } else if ('ESRI' in name) { defs['ESRI:' + name.ESRI] = name; } else if ('IAU2000' in name) { defs['IAU2000:' + name.IAU2000] = name; } else { console.log(name); } return; } } globals(defs); function testObj(code){ return typeof code === 'string'; } function testDef(code){ return code in defs; } var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS']; function testWKT(code){ return codeWords.some(function (word) { return code.indexOf(word) > -1; }); } function testProj(code){ return code[0] === '+'; } function parse(code){ if (testObj(code)) { //check to see if this is a WKT string if (testDef(code)) { return defs[code]; } if (testWKT(code)) { return wkt(code); } if (testProj(code)) { return parseProj(code); } }else{ return code; } } var extend = function(destination, source) { destination = destination || {}; var value, property; if (!source) { return destination; } for (property in source) { value = source[property]; if (value !== undefined) { destination[property] = value; } } return destination; }; var msfnz = function(eccent, sinphi, cosphi) { var con = eccent * sinphi; return cosphi / (Math.sqrt(1 - con * con)); }; var sign = function(x) { return x<0 ? -1 : 1; }; var adjust_lon = function(x) { return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI)); }; var tsfnz = function(eccent, phi, sinphi) { var con = eccent * sinphi; var com = 0.5 * eccent; con = Math.pow(((1 - con) / (1 + con)), com); return (Math.tan(0.5 * (HALF_PI - phi)) / con); }; var phi2z = function(eccent, ts) { var eccnth = 0.5 * eccent; var con, dphi; var phi = HALF_PI - 2 * Math.atan(ts); for (var i = 0; i <= 15; i++) { con = eccent * Math.sin(phi); dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi; phi += dphi; if (Math.abs(dphi) <= 0.0000000001) { return phi; } } //console.log("phi2z has NoConvergence"); return -9999; }; function init() { var con = this.b / this.a; this.es = 1 - con * con; if(!('x0' in this)){ this.x0 = 0; } if(!('y0' in this)){ this.y0 = 0; } this.e = Math.sqrt(this.es); if (this.lat_ts) { if (this.sphere) { this.k0 = Math.cos(this.lat_ts); } else { this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); } } else { if (!this.k0) { if (this.k) { this.k0 = this.k; } else { this.k0 = 1; } } } } /* Mercator forward equations--mapping lat,long to x,y --------------------------------------------------*/ function forward(p) { var lon = p.x; var lat = p.y; // convert to radians if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) { return null; } var x, y; if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { return null; } else { if (this.sphere) { x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat)); } else { var sinphi = Math.sin(lat); var ts = tsfnz(this.e, lat, sinphi); x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); y = this.y0 - this.a * this.k0 * Math.log(ts); } p.x = x; p.y = y; return p; } } /* Mercator inverse equations--mapping x,y to lat/long --------------------------------------------------*/ function inverse(p) { var x = p.x - this.x0; var y = p.y - this.y0; var lon, lat; if (this.sphere) { lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0))); } else { var ts = Math.exp(-y / (this.a * this.k0)); lat = phi2z(this.e, ts); if (lat === -9999) { return null; } } lon = adjust_lon(this.long0 + x / (this.a * this.k0)); p.x = lon; p.y = lat; return p; } var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"]; var merc = { init: init, forward: forward, inverse: inverse, names: names$1 }; function init$1() { //no-op for longlat } function identity(pt) { return pt; } var names$2 = ["longlat", "identity"]; var longlat = { init: init$1, forward: identity, inverse: identity, names: names$2 }; var projs = [merc, longlat]; var names$$1 = {}; var projStore = []; function add(proj, i) { var len = projStore.length; if (!proj.names) { console.log(i); return true; } projStore[len] = proj; proj.names.forEach(function(n) { names$$1[n.toLowerCase()] = len; }); return this; } function get(name) { if (!name) { return false; } var n = name.toLowerCase(); if (typeof names$$1[n] !== 'undefined' && projStore[names$$1[n]]) { return projStore[names$$1[n]]; } } function start() { projs.forEach(add); } var projections = { start: start, add: add, get: get }; var exports$2 = {}; exports$2.MERIT = { a: 6378137.0, rf: 298.257, ellipseName: "MERIT 1983" }; exports$2.SGS85 = { a: 6378136.0, rf: 298.257, ellipseName: "Soviet Geodetic System 85" }; exports$2.GRS80 = { a: 6378137.0, rf: 298.257222101, ellipseName: "GRS 1980(IUGG, 1980)" }; exports$2.IAU76 = { a: 6378140.0, rf: 298.257, ellipseName: "IAU 1976" }; exports$2.airy = { a: 6377563.396, b: 6356256.910, ellipseName: "Airy 1830" }; exports$2.APL4 = { a: 6378137, rf: 298.25, ellipseName: "Appl. Physics. 1965" }; exports$2.NWL9D = { a: 6378145.0, rf: 298.25, ellipseName: "Naval Weapons Lab., 1965" }; exports$2.mod_airy = { a: 6377340.189, b: 6356034.446, ellipseName: "Modified Airy" }; exports$2.andrae = { a: 6377104.43, rf: 300.0, ellipseName: "Andrae 1876 (Den., Iclnd.)" }; exports$2.aust_SA = { a: 6378160.0, rf: 298.25, ellipseName: "Australian Natl & S. Amer. 1969" }; exports$2.GRS67 = { a: 6378160.0, rf: 298.2471674270, ellipseName: "GRS 67(IUGG 1967)" }; exports$2.bessel = { a: 6377397.155, rf: 299.1528128, ellipseName: "Bessel 1841" }; exports$2.bess_nam = { a: 6377483.865, rf: 299.1528128, ellipseName: "Bessel 1841 (Namibia)" }; exports$2.clrk66 = { a: 6378206.4, b: 6356583.8, ellipseName: "Clarke 1866" }; exports$2.clrk80 = { a: 6378249.145, rf: 293.4663, ellipseName: "Clarke 1880 mod." }; exports$2.clrk58 = { a: 6378293.645208759, rf: 294.2606763692654, ellipseName: "Clarke 1858" }; exports$2.CPM = { a: 6375738.7, rf: 334.29, ellipseName: "Comm. des Poids et Mesures 1799" }; exports$2.delmbr = { a: 6376428.0, rf: 311.5, ellipseName: "Delambre 1810 (Belgium)" }; exports$2.engelis = { a: 6378136.05, rf: 298.2566, ellipseName: "Engelis 1985" }; exports$2.evrst30 = { a: 6377276.345, rf: 300.8017, ellipseName: "Everest 1830" }; exports$2.evrst48 = { a: 6377304.063, rf: 300.8017, ellipseName: "Everest 1948" }; exports$2.evrst56 = { a: 6377301.243, rf: 300.8017, ellipseName: "Everest 1956" }; exports$2.evrst69 = { a: 6377295.664, rf: 300.8017, ellipseName: "Everest 1969" }; exports$2.evrstSS = { a: 6377298.556, rf: 300.8017, ellipseName: "Everest (Sabah & Sarawak)" }; exports$2.fschr60 = { a: 6378166.0, rf: 298.3, ellipseName: "Fischer (Mercury Datum) 1960" }; exports$2.fschr60m = { a: 6378155.0, rf: 298.3, ellipseName: "Fischer 1960" }; exports$2.fschr68 = { a: 6378150.0, rf: 298.3, ellipseName: "Fischer 1968" }; exports$2.helmert = { a: 6378200.0, rf: 298.3, ellipseName: "Helmert 1906" }; exports$2.hough = { a: 6378270.0, rf: 297.0, ellipseName: "Hough" }; exports$2.intl = { a: 6378388.0, rf: 297.0, ellipseName: "International 1909 (Hayford)" }; exports$2.kaula = { a: 6378163.0, rf: 298.24, ellipseName: "Kaula 1961" }; exports$2.lerch = { a: 6378139.0, rf: 298.257, ellipseName: "Lerch 1979" }; exports$2.mprts = { a: 6397300.0, rf: 191.0, ellipseName: "Maupertius 1738" }; exports$2.new_intl = { a: 6378157.5, b: 6356772.2, ellipseName: "New International 1967" }; exports$2.plessis = { a: 6376523.0, rf: 6355863.0, ellipseName: "Plessis 1817 (France)" }; exports$2.krass = { a: 6378245.0, rf: 298.3, ellipseName: "Krassovsky, 1942" }; exports$2.SEasia = { a: 6378155.0, b: 6356773.3205, ellipseName: "Southeast Asia" }; exports$2.walbeck = { a: 6376896.0, b: 6355834.8467, ellipseName: "Walbeck" }; exports$2.WGS60 = { a: 6378165.0, rf: 298.3, ellipseName: "WGS 60" }; exports$2.WGS66 = { a: 6378145.0, rf: 298.25, ellipseName: "WGS 66" }; exports$2.WGS7 = { a: 6378135.0, rf: 298.26, ellipseName: "WGS 72" }; var WGS84 = exports$2.WGS84 = { a: 6378137.0, rf: 298.257223563, ellipseName: "WGS 84" }; exports$2.sphere = { a: 6370997.0, b: 6370997.0, ellipseName: "Normal Sphere (r=6370997)" }; function eccentricity(a, b, rf, R_A) { var a2 = a * a; // used in geocentric var b2 = b * b; // used in geocentric var es = (a2 - b2) / a2; // e ^ 2 var e = 0; if (R_A) { a *= 1 - es * (SIXTH + es * (RA4 + es * RA6)); a2 = a * a; es = 0; } else { e = Math.sqrt(es); // eccentricity } var ep2 = (a2 - b2) / b2; // used in geocentric return { es: es, e: e, ep2: ep2 }; } function sphere(a, b, rf, ellps, sphere) { if (!a) { // do we have an ellipsoid? var ellipse = match(exports$2, ellps); if (!ellipse) { ellipse = WGS84; } a = ellipse.a; b = ellipse.b; rf = ellipse.rf; } if (rf && !b) { b = (1.0 - 1.0 / rf) * a; } if (rf === 0 || Math.abs(a - b) < EPSLN) { sphere = true; b = a; } return { a: a, b: b, rf: rf, sphere: sphere }; } var exports$3 = {}; exports$3.wgs84 = { towgs84: "0,0,0", ellipse: "WGS84", datumName: "WGS84" }; exports$3.ch1903 = { towgs84: "674.374,15.056,405.346", ellipse: "bessel", datumName: "swiss" }; exports$3.ggrs87 = { towgs84: "-199.87,74.79,246.62", ellipse: "GRS80", datumName: "Greek_Geodetic_Reference_System_1987" }; exports$3.nad83 = { towgs84: "0,0,0", ellipse: "GRS80", datumName: "North_American_Datum_1983" }; exports$3.nad27 = { nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", ellipse: "clrk66", datumName: "North_American_Datum_1927" }; exports$3.potsdam = { towgs84: "606.0,23.0,413.0", ellipse: "bessel", datumName: "Potsdam Rauenberg 1950 DHDN" }; exports$3.carthage = { towgs84: "-263.0,6.0,431.0", ellipse: "clark80", datumName: "Carthage 1934 Tunisia" }; exports$3.hermannskogel = { towgs84: "653.0,-212.0,449.0", ellipse: "bessel", datumName: "Hermannskogel" }; exports$3.ire65 = { towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", ellipse: "mod_airy", datumName: "Ireland 1965" }; exports$3.rassadiran = { towgs84: "-133.63,-157.5,-158.62", ellipse: "intl", datumName: "Rassadiran" }; exports$3.nzgd49 = { towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", ellipse: "intl", datumName: "New Zealand Geodetic Datum 1949" }; exports$3.osgb36 = { towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", ellipse: "airy", datumName: "Airy 1830" }; exports$3.s_jtsk = { towgs84: "589,76,480", ellipse: 'bessel', datumName: 'S-JTSK (Ferro)' }; exports$3.beduaram = { towgs84: '-106,-87,188', ellipse: 'clrk80', datumName: 'Beduaram' }; exports$3.gunung_segara = { towgs84: '-403,684,41', ellipse: 'bessel', datumName: 'Gunung Segara Jakarta' }; exports$3.rnb72 = { towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1", ellipse: "intl", datumName: "Reseau National Belge 1972" }; function datum(datumCode, datum_params, a, b, es, ep2) { var out = {}; if (datumCode === undefined || datumCode === 'none') { out.datum_type = PJD_NODATUM; } else { out.datum_type = PJD_WGS84; } if (datum_params) { out.datum_params = datum_params.map(parseFloat); if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) { out.datum_type = PJD_3PARAM; } if (out.datum_params.length > 3) { if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) { out.datum_type = PJD_7PARAM; out.datum_params[3] *= SEC_TO_RAD; out.datum_params[4] *= SEC_TO_RAD; out.datum_params[5] *= SEC_TO_RAD; out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0; } } } out.a = a; //datum object also uses these values out.b = b; out.es = es; out.ep2 = ep2; return out; } function Projection$1(srsCode,callback) { if (!(this instanceof Projection$1)) { return new Projection$1(srsCode); } callback = callback || function(error){ if(error){ throw error; } }; var json = parse(srsCode); if(typeof json !== 'object'){ callback(srsCode); return; } var ourProj = Projection$1.projections.get(json.projName); if(!ourProj){ callback(srsCode); return; } if (json.datumCode && json.datumCode !== 'none') { var datumDef = match(exports$3, json.datumCode); if (datumDef) { json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null; json.ellps = datumDef.ellipse; json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode; } } json.k0 = json.k0 || 1.0; json.axis = json.axis || 'enu'; json.ellps = json.ellps || 'wgs84'; var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere); var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A); var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2); extend(this, json); // transfer everything over from the projection because we don't know what we'll need extend(this, ourProj); // transfer all the methods from the projection // copy the 4 things over we calulated in deriveConstants.sphere this.a = sphere_.a; this.b = sphere_.b; this.rf = sphere_.rf; this.sphere = sphere_.sphere; // copy the 3 things we calculated in deriveConstants.eccentricity this.es = ecc.es; this.e = ecc.e; this.ep2 = ecc.ep2; // add in the datum object this.datum = datumObj; // init the projection this.init(); // legecy callback from back in the day when it went to spatialreference.org callback(null, this); } Projection$1.projections = projections; Projection$1.projections.start(); function compareDatums(source, dest) { if (source.datum_type !== dest.datum_type) { return false; // false, datums are not equal } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) { // the tolerance for es is to ensure that GRS80 and WGS84 // are considered identical return false; } else if (source.datum_type === PJD_3PARAM) { return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]); } else if (source.datum_type === PJD_7PARAM) { return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]); } else { return true; // datums are equal } } // cs_compare_datums() /* * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), * according to the current ellipsoid parameters. * * Latitude : Geodetic latitude in radians (input) * Longitude : Geodetic longitude in radians (input) * Height : Geodetic height, in meters (input) * X : Calculated Geocentric X coordinate, in meters (output) * Y : Calculated Geocentric Y coordinate, in meters (output) * Z : Calculated Geocentric Z coordinate, in meters (output) * */ function geodeticToGeocentric(p, es, a) { var Longitude = p.x; var Latitude = p.y; var Height = p.z ? p.z : 0; //Z value not always supplied var Rn; /* Earth radius at location */ var Sin_Lat; /* Math.sin(Latitude) */ var Sin2_Lat; /* Square of Math.sin(Latitude) */ var Cos_Lat; /* Math.cos(Latitude) */ /* ** Don't blow up if Latitude is just a little out of the value ** range as it may just be a rounding issue. Also removed longitude ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001. */ if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) { Latitude = -HALF_PI; } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) { Latitude = HALF_PI; } else if ((Latitude < -HALF_PI) || (Latitude > HALF_PI)) { /* Latitude out of range */ //..reportError('geocent:lat out of range:' + Latitude); return null; } if (Longitude > Math.PI) { Longitude -= (2 * Math.PI); } Sin_Lat = Math.sin(Latitude); Cos_Lat = Math.cos(Latitude); Sin2_Lat = Sin_Lat * Sin_Lat; Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat)); return { x: (Rn + Height) * Cos_Lat * Math.cos(Longitude), y: (Rn + Height) * Cos_Lat * Math.sin(Longitude), z: ((Rn * (1 - es)) + Height) * Sin_Lat }; } // cs_geodetic_to_geocentric() function geocentricToGeodetic(p, es, a, b) { /* local defintions and variables */ /* end-criterium of loop, accuracy of sin(Latitude) */ var genau = 1e-12; var genau2 = (genau * genau); var maxiter = 30; var P; /* distance between semi-minor axis and location */ var RR; /* distance between center and location */ var CT; /* sin of geocentric latitude */ var ST; /* cos of geocentric latitude */ var RX; var RK; var RN; /* Earth radius at location */ var CPHI0; /* cos of start or old geodetic latitude in iterations */ var SPHI0; /* sin of start or old geodetic latitude in iterations */ var CPHI; /* cos of searched geodetic latitude */ var SPHI; /* sin of searched geodetic latitude */ var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ var X = p.x; var Y = p.y; var Z = p.z ? p.z : 0.0; //Z value not always supplied var Longitude; var Latitude; var Height; P = Math.sqrt(X * X + Y * Y); RR = Math.sqrt(X * X + Y * Y + Z * Z); /* special cases for latitude and longitude */ if (P / a < genau) { /* special case, if P=0. (X=0., Y=0.) */ Longitude = 0.0; /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis * of ellipsoid (=center of mass), Latitude becomes PI/2 */ if (RR / a < genau) { Latitude = HALF_PI; Height = -b; return { x: p.x, y: p.y, z: p.z }; } } else { /* ellipsoidal (geodetic) longitude * interval: -PI < Longitude <= +PI */ Longitude = Math.atan2(Y, X); } /* -------------------------------------------------------------- * Following iterative algorithm was developped by * "Institut for Erdmessung", University of Hannover, July 1988. * Internet: www.ife.uni-hannover.de * Iterative computation of CPHI,SPHI and Height. * Iteration of CPHI and SPHI to 10**-12 radian resp. * 2*10**-7 arcsec. * -------------------------------------------------------------- */ CT = Z / RR; ST = P / RR; RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST); CPHI0 = ST * (1.0 - es) * RX; SPHI0 = CT * RX; iter = 0; /* loop to find sin(Latitude) resp. Latitude * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ do { iter++; RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0); /* ellipsoidal (geodetic) height */ Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0); RK = es * RN / (RN + Height); RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST); CPHI = ST * (1.0 - RK) * RX; SPHI = CT * RX; SDPHI = SPHI * CPHI0 - CPHI * SPHI0; CPHI0 = CPHI; SPHI0 = SPHI; } while (SDPHI * SDPHI > genau2 && iter < maxiter); /* ellipsoidal (geodetic) latitude */ Latitude = Math.atan(SPHI / Math.abs(CPHI)); return { x: Longitude, y: Latitude, z: Height }; } // cs_geocentric_to_geodetic() /****************************************************************/ // pj_geocentic_to_wgs84( p ) // p = point to transform in geocentric coordinates (x,y,z) /** point object, nothing fancy, just allows values to be passed back and forth by reference rather than by value. Other point classes may be used as long as they have x and y properties, which will get modified in the transform method. */ function geocentricToWgs84(p, datum_type, datum_params) { if (datum_type === PJD_3PARAM) { // if( x[io] === HUGE_VAL ) // continue; return { x: p.x + datum_params[0], y: p.y + datum_params[1], z: p.z + datum_params[2], }; } else if (datum_type === PJD_7PARAM) { var Dx_BF = datum_params[0]; var Dy_BF = datum_params[1]; var Dz_BF = datum_params[2]; var Rx_BF = datum_params[3]; var Ry_BF = datum_params[4]; var Rz_BF = datum_params[5]; var M_BF = datum_params[6]; // if( x[io] === HUGE_VAL ) // continue; return { x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF, y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF, z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF }; } } // cs_geocentric_to_wgs84 /****************************************************************/ // pj_geocentic_from_wgs84() // coordinate system definition, // point to transform in geocentric coordinates (x,y,z) function geocentricFromWgs84(p, datum_type, datum_params) { if (datum_type === PJD_3PARAM) { //if( x[io] === HUGE_VAL ) // continue; return { x: p.x - datum_params[0], y: p.y - datum_params[1], z: p.z - datum_params[2], }; } else if (datum_type === PJD_7PARAM) { var Dx_BF = datum_params[0]; var Dy_BF = datum_params[1]; var Dz_BF = datum_params[2]; var Rx_BF = datum_params[3]; var Ry_BF = datum_params[4]; var Rz_BF = datum_params[5]; var M_BF = datum_params[6]; var x_tmp = (p.x - Dx_BF) / M_BF; var y_tmp = (p.y - Dy_BF) / M_BF; var z_tmp = (p.z - Dz_BF) / M_BF; //if( x[io] === HUGE_VAL ) // continue; return { x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp, y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp, z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp }; } //cs_geocentric_from_wgs84() } function checkParams(type) { return (type === PJD_3PARAM || type === PJD_7PARAM); } var datum_transform = function(source, dest, point) { // Short cut if the datums are identical. if (compareDatums(source, dest)) { return point; // in this case, zero is sucess, // whereas cs_compare_datums returns 1 to indicate TRUE // confusing, should fix this } // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) { return point; } // If this datum requires grid shifts, then apply it to geodetic coordinates. // Do we need to go through geocentric coordinates? if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) { return point; } // Convert to geocentric coordinates. point = geodeticToGeocentric(point, source.es, source.a); // Convert between datums if (checkParams(source.datum_type)) { point = geocentricToWgs84(point, source.datum_type, source.datum_params); } if (checkParams(dest.datum_type)) { point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params); } return geocentricToGeodetic(point, dest.es, dest.a, dest.b); }; var adjust_axis = function(crs, denorm, point) { var xin = point.x, yin = point.y, zin = point.z || 0.0; var v, t, i; var out = {}; for (i = 0; i < 3; i++) { if (denorm && i === 2 && point.z === undefined) { continue; } if (i === 0) { v = xin; t = 'x'; } else if (i === 1) { v = yin; t = 'y'; } else { v = zin; t = 'z'; } switch (crs.axis[i]) { case 'e': out[t] = v; break; case 'w': out[t] = -v; break; case 'n': out[t] = v; break; case 's': out[t] = -v; break; case 'u': if (point[t] !== undefined) { out.z = v; } break; case 'd': if (point[t] !== undefined) { out.z = -v; } break; default: //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName); return null; } } return out; }; var toPoint = function (array){ var out = { x: array[0], y: array[1] }; if (array.length>2) { out.z = array[2]; } if (array.length>3) { out.m = array[3]; } return out; }; function checkNotWGS(source, dest) { return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84'); } function transform(source, dest, point) { var wgs84; if (Array.isArray(point)) { point = toPoint(point); } // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84 if (source.datum && dest.datum && checkNotWGS(source, dest)) { wgs84 = new Projection$1('WGS84'); point = transform(source, wgs84, point); source = wgs84; } // DGR, 2010/11/12 if (source.axis !== 'enu') { point = adjust_axis(source, false, point); } // Transform source points to long/lat, if they aren't already. if (source.projName === 'longlat') { point = { x: point.x * D2R, y: point.y * D2R }; } else { if (source.to_meter) { point = { x: point.x * source.to_meter, y: point.y * source.to_meter }; } point = source.inverse(point); // Convert Cartesian to longlat } // Adjust for the prime meridian if necessary if (source.from_greenwich) { point.x += source.from_greenwich; } // Convert datums if needed, and if possible. point = datum_transform(source.datum, dest.datum, point); // Adjust for the prime meridian if necessary if (dest.from_greenwich) { point = { x: point.x - dest.from_greenwich, y: point.y }; } if (dest.projName === 'longlat') { // convert radians to decimal degrees point = { x: point.x * R2D, y: point.y * R2D }; } else { // else project point = dest.forward(point); if (dest.to_meter) { point = { x: point.x / dest.to_meter, y: point.y / dest.to_meter }; } } // DGR, 2010/11/12 if (dest.axis !== 'enu') { return adjust_axis(dest, true, point); } return point; } var wgs84 = Projection$1('WGS84'); function transformer(from, to, coords) { var transformedArray; if (Array.isArray(coords)) { transformedArray = transform(from, to, coords); if (coords.length === 3) { return [transformedArray.x, transformedArray.y, transformedArray.z]; } else { return [transformedArray.x, transformedArray.y]; } } else { return transform(from, to, coords); } } function checkProj(item) { if (item instanceof Projection$1) { return item; } if (item.oProj) { return item.oProj; } return Projection$1(item); } function proj4$1(fromProj, toProj, coord) { fromProj = checkProj(fromProj); var single = false; var obj; if (typeof toProj === 'undefined') { toProj = fromProj; fromProj = wgs84; single = true; } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) { coord = toProj; toProj = fromProj; fromProj = wgs84; single = true; } toProj = checkProj(toProj); if (coord) { return transformer(fromProj, toProj, coord); } else { obj = { forward: function(coords) { return transformer(fromProj, toProj, coords); }, inverse: function(coords) { return transformer(toProj, fromProj, coords); } }; if (single) { obj.oProj = toProj; } return obj; } } /** * UTM zones are grouped, and assigned to one of a group of 6 * sets. * * {int} @private */ var NUM_100K_SETS = 6; /** * The column letters (for easting) of the lower left value, per * set. * * {string} @private */ var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS'; /** * The row letters (for northing) of the lower left value, per * set. * * {string} @private */ var SET_ORIGIN_ROW_LETTERS = 'AFAFAF'; var A = 65; // A var I = 73; // I var O = 79; // O var V = 86; // V var Z = 90; // Z var mgrs = { forward: forward$1, inverse: inverse$1, toPoint: toPoint$1 }; /** * Conversion of lat/lon to MGRS. * * @param {object} ll Object literal with lat and lon properties on a * WGS84 ellipsoid. * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5. * @return {string} the MGRS string for the given location and accuracy. */ function forward$1(ll, accuracy) { accuracy = accuracy || 5; // default accuracy 1m return encode(LLtoUTM({ lat: ll[1], lon: ll[0] }), accuracy); } /** * Conversion of MGRS to lat/lon. * * @param {string} mgrs MGRS string. * @return {array} An array with left (longitude), bottom (latitude), right * (longitude) and top (latitude) values in WGS84, representing the * bounding box for the provided MGRS reference. */ function inverse$1(mgrs) { var bbox = UTMtoLL(decode(mgrs.toUpperCase())); if (bbox.lat && bbox.lon) { return [bbox.lon, bbox.lat, bbox.lon, bbox.lat]; } return [bbox.left, bbox.bottom, bbox.right, bbox.top]; } function toPoint$1(mgrs) { var bbox = UTMtoLL(decode(mgrs.toUpperCase())); if (bbox.lat && bbox.lon) { return [bbox.lon, bbox.lat]; } return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2]; } /** * Conversion from degrees to radians. * * @private * @param {number} deg the angle in degrees. * @return {number} the angle in radians. */ function degToRad(deg) { return (deg * (Math.PI / 180.0)); } /** * Conversion from radians to degrees. * * @private * @param {number} rad the angle in radians. * @return {number} the angle in degrees. */ function radToDeg(rad) { return (180.0 * (rad / Math.PI)); } /** * Converts a set of Longitude and Latitude co-ordinates to UTM * using the WGS84 ellipsoid. * * @private * @param {object} ll Object literal with lat and lon properties * representing the WGS84 coordinate to be converted. * @return {object} Object literal containing the UTM value with easting, * northing, zoneNumber and zoneLetter properties, and an optional * accuracy property in digits. Returns null if the conversion failed. */ function LLtoUTM(ll) { var Lat = ll.lat; var Long = ll.lon; var a = 6378137.0; //ellip.radius; var eccSquared = 0.00669438; //ellip.eccsq; var k0 = 0.9996; var LongOrigin; var eccPrimeSquared; var N, T, C, A, M; var LatRad = degToRad(Lat); var LongRad = degToRad(Long); var LongOriginRad; var ZoneNumber; // (int) ZoneNumber = Math.floor((Long + 180) / 6) + 1; //Make sure the longitude 180.00 is in Zone 60 if (Long === 180) { ZoneNumber = 60; } // Special zone for Norway if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { ZoneNumber = 32; } // Special zones for Svalbard if (Lat >= 72.0 && Lat < 84.0) { if (Long >= 0.0 && Long < 9.0) { ZoneNumber = 31; } else if (Long >= 9.0 && Long < 21.0) { ZoneNumber = 33; } else if (Long >= 21.0 && Long < 33.0) { ZoneNumber = 35; } else if (Long >= 33.0 && Long < 42.0) { ZoneNumber = 37; } } LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin // in middle of // zone LongOriginRad = degToRad(LongOrigin); eccPrimeSquared = (eccSquared) / (1 - eccSquared); N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad)); T = Math.tan(LatRad) * Math.tan(LatRad); C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad); A = Math.cos(LatRad) * (LongRad - LongOriginRad); M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad)); var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0); var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0))); if (Lat < 0.0) { UTMNorthing += 10000000.0; //10000000 meter offset for // southern hemisphere } return { northing: Math.round(UTMNorthing), easting: Math.round(UTMEasting), zoneNumber: ZoneNumber, zoneLetter: getLetterDesignator(Lat) }; } /** * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience * class where the Zone can be specified as a single string eg."60N" which * is then broken down into the ZoneNumber and ZoneLetter. * * @private * @param {object} utm An object literal with northing, easting, zoneNumber * and zoneLetter properties. If an optional accuracy property is * provided (in meters), a bounding box will be returned instead of * latitude and longitude. * @return {object} An object literal containing either lat and lon values * (if no accuracy was provided), or top, right, bottom and left values * for the bounding box calculated according to the provided accuracy. * Returns null if the conversion failed. */ function UTMtoLL(utm) { var UTMNorthing = utm.northing; var UTMEasting = utm.easting; var zoneLetter = utm.zoneLetter; var zoneNumber = utm.zoneNumber; // check the ZoneNummber is valid if (zoneNumber < 0 || zoneNumber > 60) { return null; } var k0 = 0.9996; var a = 6378137.0; //ellip.radius; var eccSquared = 0.00669438; //ellip.eccsq; var eccPrimeSquared; var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared)); var N1, T1, C1, R1, D, M; var LongOrigin; var mu, phi1Rad; // remove 500,000 meter offset for longitude var x = UTMEasting - 500000.0; var y = UTMNorthing; // We must know somehow if we are in the Northern or Southern // hemisphere, this is the only time we use the letter So even // if the Zone letter isn't exactly correct it should indicate // the hemisphere correctly if (zoneLetter < 'N') { y -= 10000000.0; // remove 10,000,000 meter offset used // for southern hemisphere } // There are 60 zones with zone 1 being at West -180 to -174 LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin // in middle of // zone eccPrimeSquared = (eccSquared) / (1 - eccSquared); M = y / k0; mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256)); phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu); // double phi1 = ProjMath.radToDeg(phi1Rad); N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad)); T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad); C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad); R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5); D = x / (N1 * k0); var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720); lat = radToDeg(lat); var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad); lon = LongOrigin + radToDeg(lon); var result; if (utm.accuracy) { var topRight = UTMtoLL({ northing: utm.northing + utm.accuracy, easting: utm.easting + utm.accuracy, zoneLetter: utm.zoneLetter, zoneNumber: utm.zoneNumber }); result = { top: topRight.lat, right: topRight.lon, bottom: lat, left: lon }; } else { result = { lat: lat, lon: lon }; } return result; } /** * Calculates the MGRS letter designator for the given latitude. * * @private * @param {number} lat The latitude in WGS84 to get the letter designator * for. * @return {char} The letter designator. */ function getLetterDesignator(lat) { //This is here as an error flag to show that the Latitude is //outside MGRS limits var LetterDesignator = 'Z'; if ((84 >= lat) && (lat >= 72)) { LetterDesignator = 'X'; } else if ((72 > lat) && (lat >= 64)) { LetterDesignator = 'W'; } else if ((64 > lat) && (lat >= 56)) { LetterDesignator = 'V'; } else if ((56 > lat) && (lat >= 48)) { LetterDesignator = 'U'; } else if ((48 > lat) && (lat >= 40)) { LetterDesignator = 'T'; } else if ((40 > lat) && (lat >= 32)) { LetterDesignator = 'S'; } else if ((32 > lat) && (lat >= 24)) { LetterDesignator = 'R'; } else if ((24 > lat) && (lat >= 16)) { LetterDesignator = 'Q'; } else if ((16 > lat) && (lat >= 8)) { LetterDesignator = 'P'; } else if ((8 > lat) && (lat >= 0)) { LetterDesignator = 'N'; } else if ((0 > lat) && (lat >= -8)) { LetterDesignator = 'M'; } else if ((-8 > lat) && (lat >= -16)) { LetterDesignator = 'L'; } else if ((-16 > lat) && (lat >= -24)) { LetterDesignator = 'K'; } else if ((-24 > lat) && (lat >= -32)) { LetterDesignator = 'J'; } else if ((-32 > lat) && (lat >= -40)) { LetterDesignator = 'H'; } else if ((-40 > lat) && (lat >= -48)) { LetterDesignator = 'G'; } else if ((-48 > lat) && (lat >= -56)) { LetterDesignator = 'F'; } else if ((-56 > lat) && (lat >= -64)) { LetterDesignator = 'E'; } else if ((-64 > lat) && (lat >= -72)) { LetterDesignator = 'D'; } else if ((-72 > lat) && (lat >= -80)) { LetterDesignator = 'C'; } return LetterDesignator; } /** * Encodes a UTM location as MGRS string. * * @private * @param {object} utm An object literal with easting, northing, * zoneLetter, zoneNumber * @param {number} accuracy Accuracy in digits (1-5). * @return {string} MGRS string for the given UTM location. */ function encode(utm, accuracy) { // prepend with leading zeroes var seasting = "00000" + utm.easting, snorthing = "00000" + utm.northing; return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy); } /** * Get the two letter 100k designator for a given UTM easting, * northing and zone number value. * * @private * @param {number} easting * @param {number} northing * @param {number} zoneNumber * @return the two letter 100k designator for the given UTM location. */ function get100kID(easting, northing, zoneNumber) { var setParm = get100kSetForZone(zoneNumber); var setColumn = Math.floor(easting / 100000); var setRow = Math.floor(northing / 100000) % 20; return getLetter100kID(setColumn, setRow, setParm); } /** * Given a UTM zone number, figure out the MGRS 100K set it is in. * * @private * @param {number} i An UTM zone number. * @return {number} the 100k set the UTM zone is in. */ function get100kSetForZone(i) { var setParm = i % NUM_100K_SETS; if (setParm === 0) { setParm = NUM_100K_SETS; } return setParm; } /** * Get the two-letter MGRS 100k designator given information * translated from the UTM northing, easting and zone number. * * @private * @param {number} column the column index as it relates to the MGRS * 100k set spreadsheet, created from the UTM easting. * Values are 1-8. * @param {number} row the row index as it relates to the MGRS 100k set * spreadsheet, created from the UTM northing value. Values * are from 0-19. * @param {number} parm the set block, as it relates to the MGRS 100k set * spreadsheet, created from the UTM zone. Values are from * 1-60. * @return two letter MGRS 100k code. */ function getLetter100kID(column, row, parm) { // colOrigin and rowOrigin are the letters at the origin of the set var index = parm - 1; var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index); var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index); // colInt and rowInt are the letters to build to return var colInt = colOrigin + column - 1; var rowInt = rowOrigin + row; var rollover = false; if (colInt > Z) { colInt = colInt - Z + A - 1; rollover = true; } if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) { colInt++; } if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) { colInt++; if (colInt === I) { colInt++; } } if (colInt > Z) { colInt = colInt - Z + A - 1; } if (rowInt > V) { rowInt = rowInt - V + A - 1; rollover = true; } else { rollover = false; } if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) { rowInt++; } if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) { rowInt++; if (rowInt === I) { rowInt++; } } if (rowInt > V) { rowInt = rowInt - V + A - 1; } var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt); return twoLetter; } /** * Decode the UTM parameters from a MGRS string. * * @private * @param {string} mgrsString an UPPERCASE coordinate string is expected. * @return {object} An object literal with easting, northing, zoneLetter, * zoneNumber and accuracy (in meters) properties. */ function decode(mgrsString) { if (mgrsString && mgrsString.length === 0) { throw ("MGRSPoint coverting from nothing"); } var length = mgrsString.length; var hunK = null; var sb = ""; var testChar; var i = 0; // get Zone number while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) { if (i >= 2) { throw ("MGRSPoint bad conversion from: " + mgrsString); } sb += testChar; i++; } var zoneNumber = parseInt(sb, 10); if (i === 0 || i + 3 > length) { // A good MGRS string has to be 4-5 digits long, // ##AAA/#AAA at least. throw ("MGRSPoint bad conversion from: " + mgrsString); } var zoneLetter = mgrsString.charAt(i++); // Should we check the zone letter here? Why not. if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') { throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString); } hunK = mgrsString.substring(i, i += 2); var set = get100kSetForZone(zoneNumber); var east100k = getEastingFromChar(hunK.charAt(0), set); var north100k = getNorthingFromChar(hunK.charAt(1), set); // We have a bug where the northing may be 2000000 too low. // How // do we know when to roll over? while (north100k < getMinNorthing(zoneLetter)) { north100k += 2000000; } // calculate the char index for easting/northing separator var remainder = length - i; if (remainder % 2 !== 0) { throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString); } var sep = remainder / 2; var sepEasting = 0.0; var sepNorthing = 0.0; var accuracyBonus, sepEastingString, sepNorthingString, easting, northing; if (sep > 0) { accuracyBonus = 100000.0 / Math.pow(10, sep); sepEastingString = mgrsString.substring(i, i + sep); sepEasting = parseFloat(sepEastingString) * accuracyBonus; sepNorthingString = mgrsString.substring(i + sep); sepNorthing = parseFloat(sepNorthingString) * accuracyBonus; } easting = sepEasting + east100k; northing = sepNorthing + north100k; return { easting: easting, northing: northing, zoneLetter: zoneLetter, zoneNumber: zoneNumber, accuracy: accuracyBonus }; } /** * Given the first letter from a two-letter MGRS 100k zone, and given the * MGRS table set for the zone number, figure out the easting value that * should be added to the other, secondary easting value. * * @private * @param {char} e The first letter from a two-letter MGRS 100´k zone. * @param {number} set The MGRS table set for the zone number. * @return {number} The easting value for the given letter and set. */ function getEastingFromChar(e, set) { // colOrigin is the letter at the origin of the set for the // column var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1); var eastingValue = 100000.0; var rewindMarker = false; while (curCol !== e.charCodeAt(0)) { curCol++; if (curCol === I) { curCol++; } if (curCol === O) { curCol++; } if (curCol > Z) { if (rewindMarker) { throw ("Bad character: " + e); } curCol = A; rewindMarker = true; } eastingValue += 100000.0; } return eastingValue; } /** * Given the second letter from a two-letter MGRS 100k zone, and given the * MGRS table set for the zone number, figure out the northing value that * should be added to the other, secondary northing value. You have to * remember that Northings are determined from the equator, and the vertical * cycle of letters mean a 2000000 additional northing meters. This happens * approx. every 18 degrees of latitude. This method does *NOT* count any * additional northings. You have to figure out how many 2000000 meters need * to be added for the zone letter of the MGRS coordinate. * * @private * @param {char} n Second letter of the MGRS 100k zone * @param {number} set The MGRS table set number, which is dependent on the * UTM zone number. * @return {number} The northing value for the given letter and set. */ function getNorthingFromChar(n, set) { if (n > 'V') { throw ("MGRSPoint given invalid Northing " + n); } // rowOrigin is the letter at the origin of the set for the // column var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1); var northingValue = 0.0; var rewindMarker = false; while (curRow !== n.charCodeAt(0)) { curRow++; if (curRow === I) { curRow++; } if (curRow === O) { curRow++; } // fixing a bug making whole application hang in this loop // when 'n' is a wrong character if (curRow > V) { if (rewindMarker) { // making sure that this loop ends throw ("Bad character: " + n); } curRow = A; rewindMarker = true; } northingValue += 100000.0; } return northingValue; } /** * The function getMinNorthing returns the minimum northing value of a MGRS * zone. * * Ported from Geotrans' c Lattitude_Band_Value structure table. * * @private * @param {char} zoneLetter The MGRS zone to get the min northing for. * @return {number} */ function getMinNorthing(zoneLetter) { var northing; switch (zoneLetter) { case 'C': northing = 1100000.0; break; case 'D': northing = 2000000.0; break; case 'E': northing = 2800000.0; break; case 'F': northing = 3700000.0; break; case 'G': northing = 4600000.0; break; case 'H': northing = 5500000.0; break; case 'J': northing = 6400000.0; break; case 'K': northing = 7300000.0; break; case 'L': northing = 8200000.0; break; case 'M': northing = 9100000.0; break; case 'N': northing = 0.0; break; case 'P': northing = 800000.0; break; case 'Q': northing = 1700000.0; break; case 'R': northing = 2600000.0; break; case 'S': northing = 3500000.0; break; case 'T': northing = 4400000.0; break; case 'U': northing = 5300000.0; break; case 'V': northing = 6200000.0; break; case 'W': northing = 7000000.0; break; case 'X': northing = 7900000.0; break; default: northing = -1.0; } if (northing >= 0.0) { return northing; } else { throw ("Invalid zone letter: " + zoneLetter); } } function Point(x, y, z) { if (!(this instanceof Point)) { return new Point(x, y, z); } if (Array.isArray(x)) { this.x = x[0]; this.y = x[1]; this.z = x[2] || 0.0; } else if(typeof x === 'object') { this.x = x.x; this.y = x.y; this.z = x.z || 0.0; } else if (typeof x === 'string' && typeof y === 'undefined') { var coords = x.split(','); this.x = parseFloat(coords[0], 10); this.y = parseFloat(coords[1], 10); this.z = parseFloat(coords[2], 10) || 0.0; } else { this.x = x; this.y = y; this.z = z || 0.0; } console.warn('proj4.Point will be removed in version 3, use proj4.toPoint'); } Point.fromMGRS = function(mgrsStr) { return new Point(toPoint$1(mgrsStr)); }; Point.prototype.toMGRS = function(accuracy) { return forward$1([this.x, this.y], accuracy); }; var version = "2.4.3"; var C00 = 1; var C02 = 0.25; var C04 = 0.046875; var C06 = 0.01953125; var C08 = 0.01068115234375; var C22 = 0.75; var C44 = 0.46875; var C46 = 0.01302083333333333333; var C48 = 0.00712076822916666666; var C66 = 0.36458333333333333333; var C68 = 0.00569661458333333333; var C88 = 0.3076171875; var pj_enfn = function(es) { var en = []; en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); var t = es * es; en[2] = t * (C44 - es * (C46 + es * C48)); t *= es; en[3] = t * (C66 - es * C68); en[4] = t * es * C88; return en; }; var pj_mlfn = function(phi, sphi, cphi, en) { cphi *= sphi; sphi *= sphi; return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4])))); }; var MAX_ITER = 20; var pj_inv_mlfn = function(arg, es, en) { var k = 1 / (1 - es); var phi = arg; for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */ var s = Math.sin(phi); var t = 1 - es * s * s; //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg; //phi -= t * (t * Math.sqrt(t)) * k; t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k; phi -= t; if (Math.abs(t) < EPSLN) { return phi; } } //..reportError("cass:pj_inv_mlfn: Convergence error"); return phi; }; // Heavily based on this tmerc projection implementation // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js function init$2() { this.x0 = this.x0 !== undefined ? this.x0 : 0; this.y0 = this.y0 !== undefined ? this.y0 : 0; this.long0 = this.long0 !== undefined ? this.long0 : 0; this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; if (this.es) { this.en = pj_enfn(this.es); this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en); } } /** Transverse Mercator Forward - long/lat to x/y long/lat in radians */ function forward$2(p) { var lon = p.x; var lat = p.y; var delta_lon = adjust_lon(lon - this.long0); var con; var x, y; var sin_phi = Math.sin(lat); var cos_phi = Math.cos(lat); if (!this.es) { var b = cos_phi * Math.sin(delta_lon); if ((Math.abs(Math.abs(b) - 1)) < EPSLN) { return (93); } else { x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0; y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2)); b = Math.abs(y); if (b >= 1) { if ((b - 1) > EPSLN) { return (93); } else { y = 0; } } else { y = Math.acos(y); } if (lat < 0) { y = -y; } y = this.a * this.k0 * (y - this.lat0) + this.y0; } } else { var al = cos_phi * delta_lon; var als = Math.pow(al, 2); var c = this.ep2 * Math.pow(cos_phi, 2); var cs = Math.pow(c, 2); var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0; var t = Math.pow(tq, 2); var ts = Math.pow(t, 2); con = 1 - this.es * Math.pow(sin_phi, 2); al = al / Math.sqrt(con); var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en); x = this.a * (this.k0 * al * (1 + als / 6 * (1 - t + c + als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c + als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) + this.x0; y = this.a * (this.k0 * (ml - this.ml0 + sin_phi * delta_lon * al / 2 * (1 + als / 12 * (5 - t + 9 * c + 4 * cs + als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c + als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) + this.y0; } p.x = x; p.y = y; return p; } /** Transverse Mercator Inverse - x/y to long/lat */ function inverse$2(p) { var con, phi; var lat, lon; var x = (p.x - this.x0) * (1 / this.a); var y = (p.y - this.y0) * (1 / this.a); if (!this.es) { var f = Math.exp(x / this.k0); var g = 0.5 * (f - 1 / f); var temp = this.lat0 + y / this.k0; var h = Math.cos(temp); con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2))); lat = Math.asin(con); if (y < 0) { lat = -lat; } if ((g === 0) && (h === 0)) { lon = 0; } else { lon = adjust_lon(Math.atan2(g, h) + this.long0); } } else { // ellipsoidal form con = this.ml0 + y / this.k0; phi = pj_inv_mlfn(con, this.es, this.en); if (Math.abs(phi) < HALF_PI) { var sin_phi = Math.sin(phi); var cos_phi = Math.cos(phi); var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0; var c = this.ep2 * Math.pow(cos_phi, 2); var cs = Math.pow(c, 2); var t = Math.pow(tan_phi, 2); var ts = Math.pow(t, 2); con = 1 - this.es * Math.pow(sin_phi, 2); var d = x * Math.sqrt(con) / this.k0; var ds = Math.pow(d, 2); con = con * tan_phi; lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 - ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs - ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c - ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t)))); lon = adjust_lon(this.long0 + (d * (1 - ds / 6 * (1 + 2 * t + c - ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c - ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi)); } else { lat = HALF_PI * sign(y); lon = 0; } } p.x = lon; p.y = lat; return p; } var names$3 = ["Transverse_Mercator", "Transverse Mercator", "tmerc"]; var tmerc = { init: init$2, forward: forward$2, inverse: inverse$2, names: names$3 }; var sinh = function(x) { var r = Math.exp(x); r = (r - 1 / r) / 2; return r; }; var hypot = function(x, y) { x = Math.abs(x); y = Math.abs(y); var a = Math.max(x, y); var b = Math.min(x, y) / (a ? a : 1); return a * Math.sqrt(1 + Math.pow(b, 2)); }; var log1py = function(x) { var y = 1 + x; var z = y - 1; return z === 0 ? x : x * Math.log(y) / z; }; var asinhy = function(x) { var y = Math.abs(x); y = log1py(y * (1 + y / (hypot(1, y) + 1))); return x < 0 ? -y : y; }; var gatg = function(pp, B) { var cos_2B = 2 * Math.cos(2 * B); var i = pp.length - 1; var h1 = pp[i]; var h2 = 0; var h; while (--i >= 0) { h = -h2 + cos_2B * h1 + pp[i]; h2 = h1; h1 = h; } return (B + h * Math.sin(2 * B)); }; var clens = function(pp, arg_r) { var r = 2 * Math.cos(arg_r); var i = pp.length - 1; var hr1 = pp[i]; var hr2 = 0; var hr; while (--i >= 0) { hr = -hr2 + r * hr1 + pp[i]; hr2 = hr1; hr1 = hr; } return Math.sin(arg_r) * hr; }; var cosh = function(x) { var r = Math.exp(x); r = (r + 1 / r) / 2; return r; }; var clens_cmplx = function(pp, arg_r, arg_i) { var sin_arg_r = Math.sin(arg_r); var cos_arg_r = Math.cos(arg_r); var sinh_arg_i = sinh(arg_i); var cosh_arg_i = cosh(arg_i); var r = 2 * cos_arg_r * cosh_arg_i; var i = -2 * sin_arg_r * sinh_arg_i; var j = pp.length - 1; var hr = pp[j]; var hi1 = 0; var hr1 = 0; var hi = 0; var hr2; var hi2; while (--j >= 0) { hr2 = hr1; hi2 = hi1; hr1 = hr; hi1 = hi; hr = -hr2 + r * hr1 - i * hi1 + pp[j]; hi = -hi2 + i * hr1 + r * hi1; } r = sin_arg_r * cosh_arg_i; i = cos_arg_r * sinh_arg_i; return [r * hr - i * hi, r * hi + i * hr]; }; // Heavily based on this etmerc projection implementation // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js function init$3() { if (this.es === undefined || this.es <= 0) { throw new Error('incorrect elliptical usage'); } this.x0 = this.x0 !== undefined ? this.x0 : 0; this.y0 = this.y0 !== undefined ? this.y0 : 0; this.long0 = this.long0 !== undefined ? this.long0 : 0; this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; this.cgb = []; this.cbg = []; this.utg = []; this.gtu = []; var f = this.es / (1 + Math.sqrt(1 - this.es)); var n = f / (2 - f); var np = n; this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 )))))); this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725)))))); np = np * n; this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945))))); this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945))))); np = np * n; this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835)))); this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835)))); np = np * n; this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175))); this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175))); np = np * n; this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237)); this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185)); np = np * n; this.cgb[5] = np * (601676 / 22275); this.cbg[5] = np * (444337 / 155925); np = Math.pow(n, 2); this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256))); this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800)))))); this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800)))))); this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720))))); this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360))))); np = np * n; this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 )))); this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440)))); np = np * n; this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600))); this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600))); np = np * n; this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680)); this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840)); np = np * n; this.utg[5] = np * (-20648693 / 638668800); this.gtu[5] = np * (212378941 / 319334400); var Z = gatg(this.cbg, this.lat0); this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z)); } function forward$3(p) { var Ce = adjust_lon(p.x - this.long0); var Cn = p.y; Cn = gatg(this.cbg, Cn); var sin_Cn = Math.sin(Cn); var cos_Cn = Math.cos(Cn); var sin_Ce = Math.sin(Ce); var cos_Ce = Math.cos(Ce); Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn); Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce)); Ce = asinhy(Math.tan(Ce)); var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce); Cn = Cn + tmp[0]; Ce = Ce + tmp[1]; var x; var y; if (Math.abs(Ce) <= 2.623395162778) { x = this.a * (this.Qn * Ce) + this.x0; y = this.a * (this.Qn * Cn + this.Zb) + this.y0; } else { x = Infinity; y = Infinity; } p.x = x; p.y = y; return p; } function inverse$3(p) { var Ce = (p.x - this.x0) * (1 / this.a); var Cn = (p.y - this.y0) * (1 / this.a); Cn = (Cn - this.Zb) / this.Qn; Ce = Ce / this.Qn; var lon; var lat; if (Math.abs(Ce) <= 2.623395162778) { var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce); Cn = Cn + tmp[0]; Ce = Ce + tmp[1]; Ce = Math.atan(sinh(Ce)); var sin_Cn = Math.sin(Cn); var cos_Cn = Math.cos(Cn); var sin_Ce = Math.sin(Ce); var cos_Ce = Math.cos(Ce); Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn)); Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn); lon = adjust_lon(Ce + this.long0); lat = gatg(this.cgb, Cn); } else { lon = Infinity; lat = Infinity; } p.x = lon; p.y = lat; return p; } var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc"]; var etmerc = { init: init$3, forward: forward$3, inverse: inverse$3, names: names$4 }; var adjust_zone = function(zone, lon) { if (zone === undefined) { zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1; if (zone < 0) { return 0; } else if (zone > 60) { return 60; } } return zone; }; var dependsOn = 'etmerc'; function init$4() { var zone = adjust_zone(this.zone, this.long0); if (zone === undefined) { throw new Error('unknown utm zone'); } this.lat0 = 0; this.long0 = ((6 * Math.abs(zone)) - 183) * D2R; this.x0 = 500000; this.y0 = this.utmSouth ? 10000000 : 0; this.k0 = 0.9996; etmerc.init.apply(this); this.forward = etmerc.forward; this.inverse = etmerc.inverse; } var names$5 = ["Universal Transverse Mercator System", "utm"]; var utm = { init: init$4, names: names$5, dependsOn: dependsOn }; var srat = function(esinp, exp) { return (Math.pow((1 - esinp) / (1 + esinp), exp)); }; var MAX_ITER$1 = 20; function init$6() { var sphi = Math.sin(this.lat0); var cphi = Math.cos(this.lat0); cphi *= cphi; this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi); this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es)); this.phic0 = Math.asin(sphi / this.C); this.ratexp = 0.5 * this.C * this.e; this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp)); } function forward$5(p) { var lon = p.x; var lat = p.y; p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI; p.x = this.C * lon; return p; } function inverse$5(p) { var DEL_TOL = 1e-14; var lon = p.x / this.C; var lat = p.y; var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C); for (var i = MAX_ITER$1; i > 0; --i) { lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI; if (Math.abs(lat - p.y) < DEL_TOL) { break; } p.y = lat; } /* convergence failed */ if (!i) { return null; } p.x = lon; p.y = lat; return p; } var names$7 = ["gauss"]; var gauss = { init: init$6, forward: forward$5, inverse: inverse$5, names: names$7 }; function init$5() { gauss.init.apply(this); if (!this.rc) { return; } this.sinc0 = Math.sin(this.phic0); this.cosc0 = Math.cos(this.phic0); this.R2 = 2 * this.rc; if (!this.title) { this.title = "Oblique Stereographic Alternative"; } } function forward$4(p) { var sinc, cosc, cosl, k; p.x = adjust_lon(p.x - this.long0); gauss.forward.apply(this, [p]); sinc = Math.sin(p.y); cosc = Math.cos(p.y); cosl = Math.cos(p.x); k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl); p.x = k * cosc * Math.sin(p.x); p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl); p.x = this.a * p.x + this.x0; p.y = this.a * p.y + this.y0; return p; } function inverse$4(p) { var sinc, cosc, lon, lat, rho; p.x = (p.x - this.x0) / this.a; p.y = (p.y - this.y0) / this.a; p.x /= this.k0; p.y /= this.k0; if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) { var c = 2 * Math.atan2(rho, this.R2); sinc = Math.sin(c); cosc = Math.cos(c); lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho); lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc); } else { lat = this.phic0; lon = 0; } p.x = lon; p.y = lat; gauss.inverse.apply(this, [p]); p.x = adjust_lon(p.x + this.long0); return p; } var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative"]; var sterea = { init: init$5, forward: forward$4, inverse: inverse$4, names: names$6 }; function ssfn_(phit, sinphi, eccen) { sinphi *= eccen; return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen)); } function init$7() { this.coslat0 = Math.cos(this.lat0); this.sinlat0 = Math.sin(this.lat0); if (this.sphere) { if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts)); } } else { if (Math.abs(this.coslat0) <= EPSLN) { if (this.lat0 > 0) { //North pole //trace('stere:north pole'); this.con = 1; } else { //South pole //trace('stere:south pole'); this.con = -1; } } this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e)); if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts)); } this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0); this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI; this.cosX0 = Math.cos(this.X0); this.sinX0 = Math.sin(this.X0); } } // Stereographic forward equations--mapping lat,long to x,y function forward$6(p) { var lon = p.x; var lat = p.y; var sinlat = Math.sin(lat); var coslat = Math.cos(lat); var A, X, sinX, cosX, ts, rh; var dlon = adjust_lon(lon - this.long0); if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) { //case of the origine point //trace('stere:this is the origin point'); p.x = NaN; p.y = NaN; return p; } if (this.sphere) { //trace('stere:sphere case'); A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon)); p.x = this.a * A * coslat * Math.sin(dlon) + this.x0; p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0; return p; } else { X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI; cosX = Math.cos(X); sinX = Math.sin(X); if (Math.abs(this.coslat0) <= EPSLN) { ts = tsfnz(this.e, lat * this.con, this.con * sinlat); rh = 2 * this.a * this.k0 * ts / this.cons; p.x = this.x0 + rh * Math.sin(lon - this.long0); p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0); //trace(p.toString()); return p; } else if (Math.abs(this.sinlat0) < EPSLN) { //Eq //trace('stere:equateur'); A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon)); p.y = A * sinX; } else { //other case //trace('stere:normal case'); A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon))); p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0; } p.x = A * cosX * Math.sin(dlon) + this.x0; } //trace(p.toString()); return p; } //* Stereographic inverse equations--mapping x,y to lat/long function inverse$6(p) { p.x -= this.x0; p.y -= this.y0; var lon, lat, ts, ce, Chi; var rh = Math.sqrt(p.x * p.x + p.y * p.y); if (this.sphere) { var c = 2 * Math.atan(rh / (0.5 * this.a * this.k0)); lon = this.long0; lat = this.lat0; if (rh <= EPSLN) { p.x = lon; p.y = lat; return p; } lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh); if (Math.abs(this.coslat0) < EPSLN) { if (this.lat0 > 0) { lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); } else { lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); } } else { lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c))); } p.x = lon; p.y = lat; return p; } else { if (Math.abs(this.coslat0) <= EPSLN) { if (rh <= EPSLN) { lat = this.lat0; lon = this.long0; p.x = lon; p.y = lat; //trace(p.toString()); return p; } p.x *= this.con; p.y *= this.con; ts = rh * this.cons / (2 * this.a * this.k0); lat = this.con * phi2z(this.e, ts); lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y)); } else { ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1)); lon = this.long0; if (rh <= EPSLN) { Chi = this.X0; } else { Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh); lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce))); } lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi))); } } p.x = lon; p.y = lat; //trace(p.toString()); return p; } var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"]; var stere = { init: init$7, forward: forward$6, inverse: inverse$6, names: names$8, ssfn_: ssfn_ }; /* references: Formules et constantes pour le Calcul pour la projection cylindrique conforme à axe oblique et pour la transformation entre des systèmes de référence. http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf */ function init$8() { var phy0 = this.lat0; this.lambda0 = this.long0; var sinPhy0 = Math.sin(phy0); var semiMajorAxis = this.a; var invF = this.rf; var flattening = 1 / invF; var e2 = 2 * flattening - Math.pow(flattening, 2); var e = this.e = Math.sqrt(e2); this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2)); this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4)); this.b0 = Math.asin(sinPhy0 / this.alpha); var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2)); var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2)); var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0)); this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3; } function forward$7(p) { var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2)); var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y))); var S = -this.alpha * (Sa1 + Sa2) + this.K; // spheric latitude var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4); // spheric longitude var I = this.alpha * (p.x - this.lambda0); // psoeudo equatorial rotation var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I))); var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I)); p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0; p.x = this.R * rotI + this.x0; return p; } function inverse$7(p) { var Y = p.x - this.x0; var X = p.y - this.y0; var rotI = Y / this.R; var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4); var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI)); var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB))); var lambda = this.lambda0 + I / this.alpha; var S = 0; var phy = b; var prevPhy = -1000; var iteration = 0; while (Math.abs(phy - prevPhy) > 0.0000001) { if (++iteration > 20) { //...reportError("omercFwdInfinity"); return; } //S = Math.log(Math.tan(Math.PI / 4 + phy / 2)); S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2)); prevPhy = phy; phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2; } p.x = lambda; p.y = phy; return p; } var names$9 = ["somerc"]; var somerc = { init: init$8, forward: forward$7, inverse: inverse$7, names: names$9 }; /* Initialize the Oblique Mercator projection ------------------------------------------*/ function init$9() { this.no_off = this.no_off || false; this.no_rot = this.no_rot || false; if (isNaN(this.k0)) { this.k0 = 1; } var sinlat = Math.sin(this.lat0); var coslat = Math.cos(this.lat0); var con = this.e * sinlat; this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4)); this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con); var t0 = tsfnz(this.e, this.lat0, sinlat); var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con)); if (dl * dl < 1) { dl = 1; } var fl; var gl; if (!isNaN(this.longc)) { //Central point and azimuth method if (this.lat0 >= 0) { fl = dl + Math.sqrt(dl * dl - 1); } else { fl = dl - Math.sqrt(dl * dl - 1); } this.el = fl * Math.pow(t0, this.bl); gl = 0.5 * (fl - 1 / fl); this.gamma0 = Math.asin(Math.sin(this.alpha) / dl); this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl; } else { //2 points method var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1)); var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2)); if (this.lat0 >= 0) { this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); } else { this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); } var hl = Math.pow(t1, this.bl); var ll = Math.pow(t2, this.bl); fl = this.el / hl; gl = 0.5 * (fl - 1 / fl); var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl); var pl = (ll - hl) / (ll + hl); var dlon12 = adjust_lon(this.long1 - this.long2); this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl; this.long0 = adjust_lon(this.long0); var dlon10 = adjust_lon(this.long1 - this.long0); this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl); this.alpha = Math.asin(dl * Math.sin(this.gamma0)); } if (this.no_off) { this.uc = 0; } else { if (this.lat0 >= 0) { this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); } else { this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); } } } /* Oblique Mercator forward equations--mapping lat,long to x,y ----------------------------------------------------------*/ function forward$8(p) { var lon = p.x; var lat = p.y; var dlon = adjust_lon(lon - this.long0); var us, vs; var con; if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { if (lat > 0) { con = -1; } else { con = 1; } vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5)); us = -1 * con * HALF_PI * this.al / this.bl; } else { var t = tsfnz(this.e, lat, Math.sin(lat)); var ql = this.el / Math.pow(t, this.bl); var sl = 0.5 * (ql - 1 / ql); var tl = 0.5 * (ql + 1 / ql); var vl = Math.sin(this.bl * (dlon)); var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl; if (Math.abs(Math.abs(ul) - 1) <= EPSLN) { vs = Number.POSITIVE_INFINITY; } else { vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl; } if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) { us = this.al * this.bl * (dlon); } else { us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl; } } if (this.no_rot) { p.x = this.x0 + us; p.y = this.y0 + vs; } else { us -= this.uc; p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha); p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha); } return p; } function inverse$8(p) { var us, vs; if (this.no_rot) { vs = p.y - this.y0; us = p.x - this.x0; } else { vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha); us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha); us += this.uc; } var qp = Math.exp(-1 * this.bl * vs / this.al); var sp = 0.5 * (qp - 1 / qp); var tp = 0.5 * (qp + 1 / qp); var vp = Math.sin(this.bl * us / this.al); var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp; var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl); if (Math.abs(up - 1) < EPSLN) { p.x = this.long0; p.y = HALF_PI; } else if (Math.abs(up + 1) < EPSLN) { p.x = this.long0; p.y = -1 * HALF_PI; } else { p.y = phi2z(this.e, ts); p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl); } return p; } var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"]; var omerc = { init: init$9, forward: forward$8, inverse: inverse$8, names: names$10 }; function init$10() { // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north //double c_lat; /* center latitude */ //double c_lon; /* center longitude */ //double lat1; /* first standard parallel */ //double lat2; /* second standard parallel */ //double r_maj; /* major axis */ //double r_min; /* minor axis */ //double false_east; /* x offset in meters */ //double false_north; /* y offset in meters */ if (!this.lat2) { this.lat2 = this.lat1; } //if lat2 is not defined if (!this.k0) { this.k0 = 1; } this.x0 = this.x0 || 0; this.y0 = this.y0 || 0; // Standard Parallels cannot be equal and on opposite sides of the equator if (Math.abs(this.lat1 + this.lat2) < EPSLN) { return; } var temp = this.b / this.a; this.e = Math.sqrt(1 - temp * temp); var sin1 = Math.sin(this.lat1); var cos1 = Math.cos(this.lat1); var ms1 = msfnz(this.e, sin1, cos1); var ts1 = tsfnz(this.e, this.lat1, sin1); var sin2 = Math.sin(this.lat2); var cos2 = Math.cos(this.lat2); var ms2 = msfnz(this.e, sin2, cos2); var ts2 = tsfnz(this.e, this.lat2, sin2); var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0)); if (Math.abs(this.lat1 - this.lat2) > EPSLN) { this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2); } else { this.ns = sin1; } if (isNaN(this.ns)) { this.ns = sin1; } this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns)); this.rh = this.a * this.f0 * Math.pow(ts0, this.ns); if (!this.title) { this.title = "Lambert Conformal Conic"; } } // Lambert Conformal conic forward equations--mapping lat,long to x,y // ----------------------------------------------------------------- function forward$9(p) { var lon = p.x; var lat = p.y; // singular cases : if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) { lat = sign(lat) * (HALF_PI - 2 * EPSLN); } var con = Math.abs(Math.abs(lat) - HALF_PI); var ts, rh1; if (con > EPSLN) { ts = tsfnz(this.e, lat, Math.sin(lat)); rh1 = this.a * this.f0 * Math.pow(ts, this.ns); } else { con = lat * this.ns; if (con <= 0) { return null; } rh1 = 0; } var theta = this.ns * adjust_lon(lon - this.long0); p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0; p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0; return p; } // Lambert Conformal Conic inverse equations--mapping x,y to lat/long // ----------------------------------------------------------------- function inverse$9(p) { var rh1, con, ts; var lat, lon; var x = (p.x - this.x0) / this.k0; var y = (this.rh - (p.y - this.y0) / this.k0); if (this.ns > 0) { rh1 = Math.sqrt(x * x + y * y); con = 1; } else { rh1 = -Math.sqrt(x * x + y * y); con = -1; } var theta = 0; if (rh1 !== 0) { theta = Math.atan2((con * x), (con * y)); } if ((rh1 !== 0) || (this.ns > 0)) { con = 1 / this.ns; ts = Math.pow((rh1 / (this.a * this.f0)), con); lat = phi2z(this.e, ts); if (lat === -9999) { return null; } } else { lat = -HALF_PI; } lon = adjust_lon(theta / this.ns + this.long0); p.x = lon; p.y = lat; return p; } var names$11 = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"]; var lcc = { init: init$10, forward: forward$9, inverse: inverse$9, names: names$11 }; function init$11() { this.a = 6377397.155; this.es = 0.006674372230614; this.e = Math.sqrt(this.es); if (!this.lat0) { this.lat0 = 0.863937979737193; } if (!this.long0) { this.long0 = 0.7417649320975901 - 0.308341501185665; } /* if scale not set default to 0.9999 */ if (!this.k0) { this.k0 = 0.9999; } this.s45 = 0.785398163397448; /* 45 */ this.s90 = 2 * this.s45; this.fi0 = this.lat0; this.e2 = this.es; this.e = Math.sqrt(this.e2); this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2)); this.uq = 1.04216856380474; this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa); this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2); this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g; this.k1 = this.k0; this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2)); this.s0 = 1.37008346281555; this.n = Math.sin(this.s0); this.ro0 = this.k1 * this.n0 / Math.tan(this.s0); this.ad = this.s90 - this.uq; } /* ellipsoid */ /* calculate xy from lat/lon */ /* Constants, identical to inverse transform function */ function forward$10(p) { var gfi, u, deltav, s, d, eps, ro; var lon = p.x; var lat = p.y; var delta_lon = adjust_lon(lon - this.long0); /* Transformation */ gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2)); u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45); deltav = -delta_lon * this.alfa; s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav)); d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s)); eps = this.n * d; ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n); p.y = ro * Math.cos(eps) / 1; p.x = ro * Math.sin(eps) / 1; if (!this.czech) { p.y *= -1; p.x *= -1; } return (p); } /* calculate lat/lon from xy */ function inverse$10(p) { var u, deltav, s, d, eps, ro, fi1; var ok; /* Transformation */ /* revert y, x*/ var tmp = p.x; p.x = p.y; p.y = tmp; if (!this.czech) { p.y *= -1; p.x *= -1; } ro = Math.sqrt(p.x * p.x + p.y * p.y); eps = Math.atan2(p.y, p.x); d = eps / Math.sin(this.s0); s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45); u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d)); deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u)); p.x = this.long0 - deltav / this.alfa; fi1 = u; ok = 0; var iter = 0; do { p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45); if (Math.abs(fi1 - p.y) < 0.0000000001) { ok = 1; } fi1 = p.y; iter += 1; } while (ok === 0 && iter < 15); if (iter >= 15) { return null; } return (p); } var names$12 = ["Krovak", "krovak"]; var krovak = { init: init$11, forward: forward$10, inverse: inverse$10, names: names$12 }; var mlfn = function(e0, e1, e2, e3, phi) { return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi)); }; var e0fn = function(x) { return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x))); }; var e1fn = function(x) { return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x))); }; var e2fn = function(x) { return (0.05859375 * x * x * (1 + 0.75 * x)); }; var e3fn = function(x) { return (x * x * x * (35 / 3072)); }; var gN = function(a, e, sinphi) { var temp = e * sinphi; return a / Math.sqrt(1 - temp * temp); }; var adjust_lat = function(x) { return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI)); }; var imlfn = function(ml, e0, e1, e2, e3) { var phi; var dphi; phi = ml / e0; for (var i = 0; i < 15; i++) { dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi)); phi += dphi; if (Math.abs(dphi) <= 0.0000000001) { return phi; } } //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations"); return NaN; }; function init$12() { if (!this.sphere) { this.e0 = e0fn(this.es); this.e1 = e1fn(this.es); this.e2 = e2fn(this.es); this.e3 = e3fn(this.es); this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); } } /* Cassini forward equations--mapping lat,long to x,y -----------------------------------------------------------------------*/ function forward$11(p) { /* Forward equations -----------------*/ var x, y; var lam = p.x; var phi = p.y; lam = adjust_lon(lam - this.long0); if (this.sphere) { x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam)); y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0); } else { //ellipsoid var sinphi = Math.sin(phi); var cosphi = Math.cos(phi); var nl = gN(this.a, this.e, sinphi); var tl = Math.tan(phi) * Math.tan(phi); var al = lam * Math.cos(phi); var asq = al * al; var cl = this.es * cosphi * cosphi / (1 - this.es); var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120)); y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24); } p.x = x + this.x0; p.y = y + this.y0; return p; } /* Inverse equations -----------------*/ function inverse$11(p) { p.x -= this.x0; p.y -= this.y0; var x = p.x / this.a; var y = p.y / this.a; var phi, lam; if (this.sphere) { var dd = y + this.lat0; phi = Math.asin(Math.sin(dd) * Math.cos(x)); lam = Math.atan2(Math.tan(x), Math.cos(dd)); } else { /* ellipsoid */ var ml1 = this.ml0 / this.a + y; var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3); if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) { p.x = this.long0; p.y = HALF_PI; if (y < 0) { p.y *= -1; } return p; } var nl1 = gN(this.a, this.e, Math.sin(phi1)); var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es); var tl1 = Math.pow(Math.tan(phi1), 2); var dl = x * this.a / nl1; var dsq = dl * dl; phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24); lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1); } p.x = adjust_lon(lam + this.long0); p.y = adjust_lat(phi); return p; } var names$13 = ["Cassini", "Cassini_Soldner", "cass"]; var cass = { init: init$12, forward: forward$11, inverse: inverse$11, names: names$13 }; var qsfnz = function(eccent, sinphi) { var con; if (eccent > 1.0e-7) { con = eccent * sinphi; return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con)))); } else { return (2 * sinphi); } }; /* reference "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. */ var S_POLE = 1; var N_POLE = 2; var EQUIT = 3; var OBLIQ = 4; /* Initialize the Lambert Azimuthal Equal Area projection ------------------------------------------------------*/ function init$13() { var t = Math.abs(this.lat0); if (Math.abs(t - HALF_PI) < EPSLN) { this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE; } else if (Math.abs(t) < EPSLN) { this.mode = this.EQUIT; } else { this.mode = this.OBLIQ; } if (this.es > 0) { var sinphi; this.qp = qsfnz(this.e, 1); this.mmf = 0.5 / (1 - this.es); this.apa = authset(this.es); switch (this.mode) { case this.N_POLE: this.dd = 1; break; case this.S_POLE: this.dd = 1; break; case this.EQUIT: this.rq = Math.sqrt(0.5 * this.qp); this.dd = 1 / this.rq; this.xmf = 1; this.ymf = 0.5 * this.qp; break; case this.OBLIQ: this.rq = Math.sqrt(0.5 * this.qp); sinphi = Math.sin(this.lat0); this.sinb1 = qsfnz(this.e, sinphi) / this.qp; this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1); this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1); this.ymf = (this.xmf = this.rq) / this.dd; this.xmf *= this.dd; break; } } else { if (this.mode === this.OBLIQ) { this.sinph0 = Math.sin(this.lat0); this.cosph0 = Math.cos(this.lat0); } } } /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y -----------------------------------------------------------------------*/ function forward$12(p) { /* Forward equations -----------------*/ var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi; var lam = p.x; var phi = p.y; lam = adjust_lon(lam - this.long0); if (this.sphere) { sinphi = Math.sin(phi); cosphi = Math.cos(phi); coslam = Math.cos(lam); if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; if (y <= EPSLN) { return null; } y = Math.sqrt(2 / y); x = y * cosphi * Math.sin(lam); y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { if (this.mode === this.N_POLE) { coslam = -coslam; } if (Math.abs(phi + this.phi0) < EPSLN) { return null; } y = FORTPI - phi * 0.5; y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y)); x = y * Math.sin(lam); y *= coslam; } } else { sinb = 0; cosb = 0; b = 0; coslam = Math.cos(lam); sinlam = Math.sin(lam); sinphi = Math.sin(phi); q = qsfnz(this.e, sinphi); if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { sinb = q / this.qp; cosb = Math.sqrt(1 - sinb * sinb); } switch (this.mode) { case this.OBLIQ: b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam; break; case this.EQUIT: b = 1 + cosb * coslam; break; case this.N_POLE: b = HALF_PI + phi; q = this.qp - q; break; case this.S_POLE: b = phi - HALF_PI; q = this.qp + q; break; } if (Math.abs(b) < EPSLN) { return null; } switch (this.mode) { case this.OBLIQ: case this.EQUIT: b = Math.sqrt(2 / b); if (this.mode === this.OBLIQ) { y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam); } else { y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf; } x = this.xmf * b * cosb * sinlam; break; case this.N_POLE: case this.S_POLE: if (q >= 0) { x = (b = Math.sqrt(q)) * sinlam; y = coslam * ((this.mode === this.S_POLE) ? b : -b); } else { x = y = 0; } break; } } p.x = this.a * x + this.x0; p.y = this.a * y + this.y0; return p; } /* Inverse equations -----------------*/ function inverse$12(p) { p.x -= this.x0; p.y -= this.y0; var x = p.x / this.a; var y = p.y / this.a; var lam, phi, cCe, sCe, q, rho, ab; if (this.sphere) { var cosz = 0, rh, sinz = 0; rh = Math.sqrt(x * x + y * y); phi = rh * 0.5; if (phi > 1) { return null; } phi = 2 * Math.asin(phi); if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { sinz = Math.sin(phi); cosz = Math.cos(phi); } switch (this.mode) { case this.EQUIT: phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh); x *= sinz; y = cosz * rh; break; case this.OBLIQ: phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh); x *= sinz * this.cosph0; y = (cosz - Math.sin(phi) * this.sinph0) * rh; break; case this.N_POLE: y = -y; phi = HALF_PI - phi; break; case this.S_POLE: phi -= HALF_PI; break; } lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y); } else { ab = 0; if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { x /= this.dd; y *= this.dd; rho = Math.sqrt(x * x + y * y); if (rho < EPSLN) { p.x = 0; p.y = this.phi0; return p; } sCe = 2 * Math.asin(0.5 * rho / this.rq); cCe = Math.cos(sCe); x *= (sCe = Math.sin(sCe)); if (this.mode === this.OBLIQ) { ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho; q = this.qp * ab; y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe; } else { ab = y * sCe / rho; q = this.qp * ab; y = rho * cCe; } } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { if (this.mode === this.N_POLE) { y = -y; } q = (x * x + y * y); if (!q) { p.x = 0; p.y = this.phi0; return p; } ab = 1 - q / this.qp; if (this.mode === this.S_POLE) { ab = -ab; } } lam = Math.atan2(x, y); phi = authlat(Math.asin(ab), this.apa); } p.x = adjust_lon(this.long0 + lam); p.y = phi; return p; } /* determine latitude from authalic latitude */ var P00 = 0.33333333333333333333; var P01 = 0.17222222222222222222; var P02 = 0.10257936507936507936; var P10 = 0.06388888888888888888; var P11 = 0.06640211640211640211; var P20 = 0.01641501294219154443; function authset(es) { var t; var APA = []; APA[0] = es * P00; t = es * es; APA[0] += t * P01; APA[1] = t * P10; t *= es; APA[0] += t * P02; APA[1] += t * P11; APA[2] = t * P20; return APA; } function authlat(beta, APA) { var t = beta + beta; return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t)); } var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"]; var laea = { init: init$13, forward: forward$12, inverse: inverse$12, names: names$14, S_POLE: S_POLE, N_POLE: N_POLE, EQUIT: EQUIT, OBLIQ: OBLIQ }; var asinz = function(x) { if (Math.abs(x) > 1) { x = (x > 1) ? 1 : -1; } return Math.asin(x); }; function init$14() { if (Math.abs(this.lat1 + this.lat2) < EPSLN) { return; } this.temp = this.b / this.a; this.es = 1 - Math.pow(this.temp, 2); this.e3 = Math.sqrt(this.es); this.sin_po = Math.sin(this.lat1); this.cos_po = Math.cos(this.lat1); this.t1 = this.sin_po; this.con = this.sin_po; this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po); this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po); this.sin_po = Math.sin(this.lat2); this.cos_po = Math.cos(this.lat2); this.t2 = this.sin_po; this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po); this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po); this.sin_po = Math.sin(this.lat0); this.cos_po = Math.cos(this.lat0); this.t3 = this.sin_po; this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po); if (Math.abs(this.lat1 - this.lat2) > EPSLN) { this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1); } else { this.ns0 = this.con; } this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1; this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0; } /* Albers Conical Equal Area forward equations--mapping lat,long to x,y -------------------------------------------------------------------*/ function forward$13(p) { var lon = p.x; var lat = p.y; this.sin_phi = Math.sin(lat); this.cos_phi = Math.cos(lat); var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi); var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0; var theta = this.ns0 * adjust_lon(lon - this.long0); var x = rh1 * Math.sin(theta) + this.x0; var y = this.rh - rh1 * Math.cos(theta) + this.y0; p.x = x; p.y = y; return p; } function inverse$13(p) { var rh1, qs, con, theta, lon, lat; p.x -= this.x0; p.y = this.rh - p.y + this.y0; if (this.ns0 >= 0) { rh1 = Math.sqrt(p.x * p.x + p.y * p.y); con = 1; } else { rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); con = -1; } theta = 0; if (rh1 !== 0) { theta = Math.atan2(con * p.x, con * p.y); } con = rh1 * this.ns0 / this.a; if (this.sphere) { lat = Math.asin((this.c - con * con) / (2 * this.ns0)); } else { qs = (this.c - con * con) / this.ns0; lat = this.phi1z(this.e3, qs); } lon = adjust_lon(theta / this.ns0 + this.long0); p.x = lon; p.y = lat; return p; } /* Function to compute phi1, the latitude for the inverse of the Albers Conical Equal-Area projection. -------------------------------------------*/ function phi1z(eccent, qs) { var sinphi, cosphi, con, com, dphi; var phi = asinz(0.5 * qs); if (eccent < EPSLN) { return phi; } var eccnts = eccent * eccent; for (var i = 1; i <= 25; i++) { sinphi = Math.sin(phi); cosphi = Math.cos(phi); con = eccent * sinphi; com = 1 - con * con; dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con))); phi = phi + dphi; if (Math.abs(dphi) <= 1e-7) { return phi; } } return null; } var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"]; var aea = { init: init$14, forward: forward$13, inverse: inverse$13, names: names$15, phi1z: phi1z }; /* reference: Wolfram Mathworld "Gnomonic Projection" http://mathworld.wolfram.com/GnomonicProjection.html Accessed: 12th November 2009 */ function init$15() { /* Place parameters in static storage for common use -------------------------------------------------*/ this.sin_p14 = Math.sin(this.lat0); this.cos_p14 = Math.cos(this.lat0); // Approximation for projecting points to the horizon (infinity) this.infinity_dist = 1000 * this.a; this.rc = 1; } /* Gnomonic forward equations--mapping lat,long to x,y ---------------------------------------------------*/ function forward$14(p) { var sinphi, cosphi; /* sin and cos value */ var dlon; /* delta longitude value */ var coslon; /* cos of longitude */ var ksp; /* scale factor */ var g; var x, y; var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ dlon = adjust_lon(lon - this.long0); sinphi = Math.sin(lat); cosphi = Math.cos(lat); coslon = Math.cos(dlon); g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; ksp = 1; if ((g > 0) || (Math.abs(g) <= EPSLN)) { x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g; y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g; } else { // Point is in the opposing hemisphere and is unprojectable // We still need to return a reasonable point, so we project // to infinity, on a bearing // equivalent to the northern hemisphere equivalent // This is a reasonable approximation for short shapes and lines that // straddle the horizon. x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon); y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); } p.x = x; p.y = y; return p; } function inverse$14(p) { var rh; /* Rho */ var sinc, cosc; var c; var lon, lat; /* Inverse equations -----------------*/ p.x = (p.x - this.x0) / this.a; p.y = (p.y - this.y0) / this.a; p.x /= this.k0; p.y /= this.k0; if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) { c = Math.atan2(rh, this.rc); sinc = Math.sin(c); cosc = Math.cos(c); lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh); lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc); lon = adjust_lon(this.long0 + lon); } else { lat = this.phic0; lon = 0; } p.x = lon; p.y = lat; return p; } var names$16 = ["gnom"]; var gnom = { init: init$15, forward: forward$14, inverse: inverse$14, names: names$16 }; var iqsfnz = function(eccent, q) { var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent)); if (Math.abs(Math.abs(q) - temp) < 1.0E-6) { if (q < 0) { return (-1 * HALF_PI); } else { return HALF_PI; } } //var phi = 0.5* q/(1-eccent*eccent); var phi = Math.asin(0.5 * q); var dphi; var sin_phi; var cos_phi; var con; for (var i = 0; i < 30; i++) { sin_phi = Math.sin(phi); cos_phi = Math.cos(phi); con = eccent * sin_phi; dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con))); phi += dphi; if (Math.abs(dphi) <= 0.0000000001) { return phi; } } //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations"); return NaN; }; /* reference: "Cartographic Projection Procedures for the UNIX Environment- A User's Manual" by Gerald I. Evenden, USGS Open File Report 90-284and Release 4 Interim Reports (2003) */ function init$16() { //no-op if (!this.sphere) { this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); } } /* Cylindrical Equal Area forward equations--mapping lat,long to x,y ------------------------------------------------------------*/ function forward$15(p) { var lon = p.x; var lat = p.y; var x, y; /* Forward equations -----------------*/ var dlon = adjust_lon(lon - this.long0); if (this.sphere) { x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); } else { var qs = qsfnz(this.e, Math.sin(lat)); x = this.x0 + this.a * this.k0 * dlon; y = this.y0 + this.a * qs * 0.5 / this.k0; } p.x = x; p.y = y; return p; } /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long ------------------------------------------------------------*/ function inverse$15(p) { p.x -= this.x0; p.y -= this.y0; var lon, lat; if (this.sphere) { lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts)); lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts)); } else { lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a); lon = adjust_lon(this.long0 + p.x / (this.a * this.k0)); } p.x = lon; p.y = lat; return p; } var names$17 = ["cea"]; var cea = { init: init$16, forward: forward$15, inverse: inverse$15, names: names$17 }; function init$17() { this.x0 = this.x0 || 0; this.y0 = this.y0 || 0; this.lat0 = this.lat0 || 0; this.long0 = this.long0 || 0; this.lat_ts = this.lat_ts || 0; this.title = this.title || "Equidistant Cylindrical (Plate Carre)"; this.rc = Math.cos(this.lat_ts); } // forward equations--mapping lat,long to x,y // ----------------------------------------------------------------- function forward$16(p) { var lon = p.x; var lat = p.y; var dlon = adjust_lon(lon - this.long0); var dlat = adjust_lat(lat - this.lat0); p.x = this.x0 + (this.a * dlon * this.rc); p.y = this.y0 + (this.a * dlat); return p; } // inverse equations--mapping x,y to lat/long // ----------------------------------------------------------------- function inverse$16(p) { var x = p.x; var y = p.y; p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc))); p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a))); return p; } var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"]; var eqc = { init: init$17, forward: forward$16, inverse: inverse$16, names: names$18 }; var MAX_ITER$2 = 20; function init$18() { /* Place parameters in static storage for common use -------------------------------------------------*/ this.temp = this.b / this.a; this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles this.e = Math.sqrt(this.es); this.e0 = e0fn(this.es); this.e1 = e1fn(this.es); this.e2 = e2fn(this.es); this.e3 = e3fn(this.es); this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas } /* Polyconic forward equations--mapping lat,long to x,y ---------------------------------------------------*/ function forward$17(p) { var lon = p.x; var lat = p.y; var x, y, el; var dlon = adjust_lon(lon - this.long0); el = dlon * Math.sin(lat); if (this.sphere) { if (Math.abs(lat) <= EPSLN) { x = this.a * dlon; y = -1 * this.a * this.lat0; } else { x = this.a * Math.sin(el) / Math.tan(lat); y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat)); } } else { if (Math.abs(lat) <= EPSLN) { x = this.a * dlon; y = -1 * this.ml0; } else { var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat); x = nl * Math.sin(el); y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el)); } } p.x = x + this.x0; p.y = y + this.y0; return p; } /* Inverse equations -----------------*/ function inverse$17(p) { var lon, lat, x, y, i; var al, bl; var phi, dphi; x = p.x - this.x0; y = p.y - this.y0; if (this.sphere) { if (Math.abs(y + this.a * this.lat0) <= EPSLN) { lon = adjust_lon(x / this.a + this.long0); lat = 0; } else { al = this.lat0 + y / this.a; bl = x * x / this.a / this.a + al * al; phi = al; var tanphi; for (i = MAX_ITER$2; i; --i) { tanphi = Math.tan(phi); dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1); phi += dphi; if (Math.abs(dphi) <= EPSLN) { lat = phi; break; } } lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat)); } } else { if (Math.abs(y + this.ml0) <= EPSLN) { lat = 0; lon = adjust_lon(this.long0 + x / this.a); } else { al = (this.ml0 + y) / this.a; bl = x * x / this.a / this.a + al * al; phi = al; var cl, mln, mlnp, ma; var con; for (i = MAX_ITER$2; i; --i) { con = this.e * Math.sin(phi); cl = Math.sqrt(1 - con * con) * Math.tan(phi); mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi); ma = mln / this.a; dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp); phi -= dphi; if (Math.abs(dphi) <= EPSLN) { lat = phi; break; } } //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0); cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat); lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat)); } } p.x = lon; p.y = lat; return p; } var names$19 = ["Polyconic", "poly"]; var poly = { init: init$18, forward: forward$17, inverse: inverse$17, names: names$19 }; /* reference Department of Land and Survey Technical Circular 1973/32 http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf OSG Technical Report 4.1 http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf */ /** * iterations: Number of iterations to refine inverse transform. * 0 -> km accuracy * 1 -> m accuracy -- suitable for most mapping applications * 2 -> mm accuracy */ function init$19() { this.A = []; this.A[1] = 0.6399175073; this.A[2] = -0.1358797613; this.A[3] = 0.063294409; this.A[4] = -0.02526853; this.A[5] = 0.0117879; this.A[6] = -0.0055161; this.A[7] = 0.0026906; this.A[8] = -0.001333; this.A[9] = 0.00067; this.A[10] = -0.00034; this.B_re = []; this.B_im = []; this.B_re[1] = 0.7557853228; this.B_im[1] = 0; this.B_re[2] = 0.249204646; this.B_im[2] = 0.003371507; this.B_re[3] = -0.001541739; this.B_im[3] = 0.041058560; this.B_re[4] = -0.10162907; this.B_im[4] = 0.01727609; this.B_re[5] = -0.26623489; this.B_im[5] = -0.36249218; this.B_re[6] = -0.6870983; this.B_im[6] = -1.1651967; this.C_re = []; this.C_im = []; this.C_re[1] = 1.3231270439; this.C_im[1] = 0; this.C_re[2] = -0.577245789; this.C_im[2] = -0.007809598; this.C_re[3] = 0.508307513; this.C_im[3] = -0.112208952; this.C_re[4] = -0.15094762; this.C_im[4] = 0.18200602; this.C_re[5] = 1.01418179; this.C_im[5] = 1.64497696; this.C_re[6] = 1.9660549; this.C_im[6] = 2.5127645; this.D = []; this.D[1] = 1.5627014243; this.D[2] = 0.5185406398; this.D[3] = -0.03333098; this.D[4] = -0.1052906; this.D[5] = -0.0368594; this.D[6] = 0.007317; this.D[7] = 0.01220; this.D[8] = 0.00394; this.D[9] = -0.0013; } /** New Zealand Map Grid Forward - long/lat to x/y long/lat in radians */ function forward$18(p) { var n; var lon = p.x; var lat = p.y; var delta_lat = lat - this.lat0; var delta_lon = lon - this.long0; // 1. Calculate d_phi and d_psi ... // and d_lambda // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians. var d_phi = delta_lat / SEC_TO_RAD * 1E-5; var d_lambda = delta_lon; var d_phi_n = 1; // d_phi^0 var d_psi = 0; for (n = 1; n <= 10; n++) { d_phi_n = d_phi_n * d_phi; d_psi = d_psi + this.A[n] * d_phi_n; } // 2. Calculate theta var th_re = d_psi; var th_im = d_lambda; // 3. Calculate z var th_n_re = 1; var th_n_im = 0; // theta^0 var th_n_re1; var th_n_im1; var z_re = 0; var z_im = 0; for (n = 1; n <= 6; n++) { th_n_re1 = th_n_re * th_re - th_n_im * th_im; th_n_im1 = th_n_im * th_re + th_n_re * th_im; th_n_re = th_n_re1; th_n_im = th_n_im1; z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im; z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im; } // 4. Calculate easting and northing p.x = (z_im * this.a) + this.x0; p.y = (z_re * this.a) + this.y0; return p; } /** New Zealand Map Grid Inverse - x/y to long/lat */ function inverse$18(p) { var n; var x = p.x; var y = p.y; var delta_x = x - this.x0; var delta_y = y - this.y0; // 1. Calculate z var z_re = delta_y / this.a; var z_im = delta_x / this.a; // 2a. Calculate theta - first approximation gives km accuracy var z_n_re = 1; var z_n_im = 0; // z^0 var z_n_re1; var z_n_im1; var th_re = 0; var th_im = 0; for (n = 1; n <= 6; n++) { z_n_re1 = z_n_re * z_re - z_n_im * z_im; z_n_im1 = z_n_im * z_re + z_n_re * z_im; z_n_re = z_n_re1; z_n_im = z_n_im1; th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im; th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im; } // 2b. Iterate to refine the accuracy of the calculation // 0 iterations gives km accuracy // 1 iteration gives m accuracy -- good enough for most mapping applications // 2 iterations bives mm accuracy for (var i = 0; i < this.iterations; i++) { var th_n_re = th_re; var th_n_im = th_im; var th_n_re1; var th_n_im1; var num_re = z_re; var num_im = z_im; for (n = 2; n <= 6; n++) { th_n_re1 = th_n_re * th_re - th_n_im * th_im; th_n_im1 = th_n_im * th_re + th_n_re * th_im; th_n_re = th_n_re1; th_n_im = th_n_im1; num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); } th_n_re = 1; th_n_im = 0; var den_re = this.B_re[1]; var den_im = this.B_im[1]; for (n = 2; n <= 6; n++) { th_n_re1 = th_n_re * th_re - th_n_im * th_im; th_n_im1 = th_n_im * th_re + th_n_re * th_im; th_n_re = th_n_re1; th_n_im = th_n_im1; den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); } // Complex division var den2 = den_re * den_re + den_im * den_im; th_re = (num_re * den_re + num_im * den_im) / den2; th_im = (num_im * den_re - num_re * den_im) / den2; } // 3. Calculate d_phi ... // and d_lambda var d_psi = th_re; var d_lambda = th_im; var d_psi_n = 1; // d_psi^0 var d_phi = 0; for (n = 1; n <= 9; n++) { d_psi_n = d_psi_n * d_psi; d_phi = d_phi + this.D[n] * d_psi_n; } // 4. Calculate latitude and longitude // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians. var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5); var lon = this.long0 + d_lambda; p.x = lon; p.y = lat; return p; } var names$20 = ["New_Zealand_Map_Grid", "nzmg"]; var nzmg = { init: init$19, forward: forward$18, inverse: inverse$18, names: names$20 }; /* reference "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. */ /* Initialize the Miller Cylindrical projection -------------------------------------------*/ function init$20() { //no-op } /* Miller Cylindrical forward equations--mapping lat,long to x,y ------------------------------------------------------------*/ function forward$19(p) { var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ var dlon = adjust_lon(lon - this.long0); var x = this.x0 + this.a * dlon; var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25; p.x = x; p.y = y; return p; } /* Miller Cylindrical inverse equations--mapping x,y to lat/long ------------------------------------------------------------*/ function inverse$19(p) { p.x -= this.x0; p.y -= this.y0; var lon = adjust_lon(this.long0 + p.x / this.a); var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4); p.x = lon; p.y = lat; return p; } var names$21 = ["Miller_Cylindrical", "mill"]; var mill = { init: init$20, forward: forward$19, inverse: inverse$19, names: names$21 }; var MAX_ITER$3 = 20; function init$21() { /* Place parameters in static storage for common use -------------------------------------------------*/ if (!this.sphere) { this.en = pj_enfn(this.es); } else { this.n = 1; this.m = 0; this.es = 0; this.C_y = Math.sqrt((this.m + 1) / this.n); this.C_x = this.C_y / (this.m + 1); } } /* Sinusoidal forward equations--mapping lat,long to x,y -----------------------------------------------------*/ function forward$20(p) { var x, y; var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ lon = adjust_lon(lon - this.long0); if (this.sphere) { if (!this.m) { lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat; } else { var k = this.n * Math.sin(lat); for (var i = MAX_ITER$3; i; --i) { var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat)); lat -= V; if (Math.abs(V) < EPSLN) { break; } } } x = this.a * this.C_x * lon * (this.m + Math.cos(lat)); y = this.a * this.C_y * lat; } else { var s = Math.sin(lat); var c = Math.cos(lat); y = this.a * pj_mlfn(lat, s, c, this.en); x = this.a * lon * c / Math.sqrt(1 - this.es * s * s); } p.x = x; p.y = y; return p; } function inverse$20(p) { var lat, temp, lon, s; p.x -= this.x0; lon = p.x / this.a; p.y -= this.y0; lat = p.y / this.a; if (this.sphere) { lat /= this.C_y; lon = lon / (this.C_x * (this.m + Math.cos(lat))); if (this.m) { lat = asinz((this.m * lat + Math.sin(lat)) / this.n); } else if (this.n !== 1) { lat = asinz(Math.sin(lat) / this.n); } lon = adjust_lon(lon + this.long0); lat = adjust_lat(lat); } else { lat = pj_inv_mlfn(p.y / this.a, this.es, this.en); s = Math.abs(lat); if (s < HALF_PI) { s = Math.sin(lat); temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat)); //temp = this.long0 + p.x / (this.a * Math.cos(lat)); lon = adjust_lon(temp); } else if ((s - EPSLN) < HALF_PI) { lon = this.long0; } } p.x = lon; p.y = lat; return p; } var names$22 = ["Sinusoidal", "sinu"]; var sinu = { init: init$21, forward: forward$20, inverse: inverse$20, names: names$22 }; function init$22() {} /* Mollweide forward equations--mapping lat,long to x,y ----------------------------------------------------*/ function forward$21(p) { /* Forward equations -----------------*/ var lon = p.x; var lat = p.y; var delta_lon = adjust_lon(lon - this.long0); var theta = lat; var con = Math.PI * Math.sin(lat); /* Iterate using the Newton-Raphson method to find theta -----------------------------------------------------*/ for (var i = 0; true; i++) { var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta)); theta += delta_theta; if (Math.abs(delta_theta) < EPSLN) { break; } } theta /= 2; /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting" this is done here because of precision problems with "cos(theta)" --------------------------------------------------------------------------*/ if (Math.PI / 2 - Math.abs(lat) < EPSLN) { delta_lon = 0; } var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0; var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0; p.x = x; p.y = y; return p; } function inverse$21(p) { var theta; var arg; /* Inverse equations -----------------*/ p.x -= this.x0; p.y -= this.y0; arg = p.y / (1.4142135623731 * this.a); /* Because of division by zero problems, 'arg' can not be 1. Therefore a number very close to one is used instead. -------------------------------------------------------------------*/ if (Math.abs(arg) > 0.999999999999) { arg = 0.999999999999; } theta = Math.asin(arg); var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta)))); if (lon < (-Math.PI)) { lon = -Math.PI; } if (lon > Math.PI) { lon = Math.PI; } arg = (2 * theta + Math.sin(2 * theta)) / Math.PI; if (Math.abs(arg) > 1) { arg = 1; } var lat = Math.asin(arg); p.x = lon; p.y = lat; return p; } var names$23 = ["Mollweide", "moll"]; var moll = { init: init$22, forward: forward$21, inverse: inverse$21, names: names$23 }; function init$23() { /* Place parameters in static storage for common use -------------------------------------------------*/ // Standard Parallels cannot be equal and on opposite sides of the equator if (Math.abs(this.lat1 + this.lat2) < EPSLN) { return; } this.lat2 = this.lat2 || this.lat1; this.temp = this.b / this.a; this.es = 1 - Math.pow(this.temp, 2); this.e = Math.sqrt(this.es); this.e0 = e0fn(this.es); this.e1 = e1fn(this.es); this.e2 = e2fn(this.es); this.e3 = e3fn(this.es); this.sinphi = Math.sin(this.lat1); this.cosphi = Math.cos(this.lat1); this.ms1 = msfnz(this.e, this.sinphi, this.cosphi); this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1); if (Math.abs(this.lat1 - this.lat2) < EPSLN) { this.ns = this.sinphi; } else { this.sinphi = Math.sin(this.lat2); this.cosphi = Math.cos(this.lat2); this.ms2 = msfnz(this.e, this.sinphi, this.cosphi); this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2); this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1); } this.g = this.ml1 + this.ms1 / this.ns; this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); this.rh = this.a * (this.g - this.ml0); } /* Equidistant Conic forward equations--mapping lat,long to x,y -----------------------------------------------------------*/ function forward$22(p) { var lon = p.x; var lat = p.y; var rh1; /* Forward equations -----------------*/ if (this.sphere) { rh1 = this.a * (this.g - lat); } else { var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat); rh1 = this.a * (this.g - ml); } var theta = this.ns * adjust_lon(lon - this.long0); var x = this.x0 + rh1 * Math.sin(theta); var y = this.y0 + this.rh - rh1 * Math.cos(theta); p.x = x; p.y = y; return p; } /* Inverse equations -----------------*/ function inverse$22(p) { p.x -= this.x0; p.y = this.rh - p.y + this.y0; var con, rh1, lat, lon; if (this.ns >= 0) { rh1 = Math.sqrt(p.x * p.x + p.y * p.y); con = 1; } else { rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); con = -1; } var theta = 0; if (rh1 !== 0) { theta = Math.atan2(con * p.x, con * p.y); } if (this.sphere) { lon = adjust_lon(this.long0 + theta / this.ns); lat = adjust_lat(this.g - rh1 / this.a); p.x = lon; p.y = lat; return p; } else { var ml = this.g - rh1 / this.a; lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3); lon = adjust_lon(this.long0 + theta / this.ns); p.x = lon; p.y = lat; return p; } } var names$24 = ["Equidistant_Conic", "eqdc"]; var eqdc = { init: init$23, forward: forward$22, inverse: inverse$22, names: names$24 }; /* Initialize the Van Der Grinten projection ----------------------------------------*/ function init$24() { //this.R = 6370997; //Radius of earth this.R = this.a; } function forward$23(p) { var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ var dlon = adjust_lon(lon - this.long0); var x, y; if (Math.abs(lat) <= EPSLN) { x = this.x0 + this.R * dlon; y = this.y0; } var theta = asinz(2 * Math.abs(lat / Math.PI)); if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) { x = this.x0; if (lat >= 0) { y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta); } else { y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta); } // return(OK); } var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI)); var asq = al * al; var sinth = Math.sin(theta); var costh = Math.cos(theta); var g = costh / (sinth + costh - 1); var gsq = g * g; var m = g * (2 / sinth - 1); var msq = m * m; var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq); if (dlon < 0) { con = -con; } x = this.x0 + con; //con = Math.abs(con / (Math.PI * this.R)); var q = asq + g; con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq); if (lat >= 0) { //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); y = this.y0 + con; } else { //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); y = this.y0 - con; } p.x = x; p.y = y; return p; } /* Van Der Grinten inverse equations--mapping x,y to lat/long ---------------------------------------------------------*/ function inverse$23(p) { var lon, lat; var xx, yy, xys, c1, c2, c3; var a1; var m1; var con; var th1; var d; /* inverse equations -----------------*/ p.x -= this.x0; p.y -= this.y0; con = Math.PI * this.R; xx = p.x / con; yy = p.y / con; xys = xx * xx + yy * yy; c1 = -Math.abs(yy) * (1 + xys); c2 = c1 - 2 * yy * yy + xx * xx; c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys; d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27; a1 = (c1 - c2 * c2 / 3 / c3) / c3; m1 = 2 * Math.sqrt(-a1 / 3); con = ((3 * d) / a1) / m1; if (Math.abs(con) > 1) { if (con >= 0) { con = 1; } else { con = -1; } } th1 = Math.acos(con) / 3; if (p.y >= 0) { lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; } else { lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; } if (Math.abs(xx) < EPSLN) { lon = this.long0; } else { lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx); } p.x = lon; p.y = lat; return p; } var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"]; var vandg = { init: init$24, forward: forward$23, inverse: inverse$23, names: names$25 }; function init$25() { this.sin_p12 = Math.sin(this.lat0); this.cos_p12 = Math.cos(this.lat0); } function forward$24(p) { var lon = p.x; var lat = p.y; var sinphi = Math.sin(p.y); var cosphi = Math.cos(p.y); var dlon = adjust_lon(lon - this.long0); var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5; if (this.sphere) { if (Math.abs(this.sin_p12 - 1) <= EPSLN) { //North Pole case p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon); p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon); return p; } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { //South Pole case p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon); p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon); return p; } else { //default case cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon); c = Math.acos(cos_c); kp = c / Math.sin(c); p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon); p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon)); return p; } } else { e0 = e0fn(this.es); e1 = e1fn(this.es); e2 = e2fn(this.es); e3 = e3fn(this.es); if (Math.abs(this.sin_p12 - 1) <= EPSLN) { //North Pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); Ml = this.a * mlfn(e0, e1, e2, e3, lat); p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon); p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon); return p; } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { //South Pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); Ml = this.a * mlfn(e0, e1, e2, e3, lat); p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon); p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon); return p; } else { //Default case tanphi = sinphi / cosphi; Nl1 = gN(this.a, this.e, this.sin_p12); Nl = gN(this.a, this.e, sinphi); psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi)); Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon)); if (Az === 0) { s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); } else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) { s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); } else { s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az)); } G = this.e * this.sin_p12 / Math.sqrt(1 - this.es); H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es); GH = G * H; Hs = H * H; s2 = s * s; s3 = s2 * s; s4 = s3 * s; s5 = s4 * s; c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH); p.x = this.x0 + c * Math.sin(Az); p.y = this.y0 + c * Math.cos(Az); return p; } } } function inverse$24(p) { p.x -= this.x0; p.y -= this.y0; var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F; if (this.sphere) { rh = Math.sqrt(p.x * p.x + p.y * p.y); if (rh > (2 * HALF_PI * this.a)) { return; } z = rh / this.a; sinz = Math.sin(z); cosz = Math.cos(z); lon = this.long0; if (Math.abs(rh) <= EPSLN) { lat = this.lat0; } else { lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh); con = Math.abs(this.lat0) - HALF_PI; if (Math.abs(con) <= EPSLN) { if (this.lat0 >= 0) { lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); } else { lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); } } else { /*con = cosz - this.sin_p12 * Math.sin(lat); if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) { //no-op, just keep the lon value as is } else { var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh)); lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh))); }*/ lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz)); } } p.x = lon; p.y = lat; return p; } else { e0 = e0fn(this.es); e1 = e1fn(this.es); e2 = e2fn(this.es); e3 = e3fn(this.es); if (Math.abs(this.sin_p12 - 1) <= EPSLN) { //North pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); rh = Math.sqrt(p.x * p.x + p.y * p.y); M = Mlp - rh; lat = imlfn(M / this.a, e0, e1, e2, e3); lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); p.x = lon; p.y = lat; return p; } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { //South pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); rh = Math.sqrt(p.x * p.x + p.y * p.y); M = rh - Mlp; lat = imlfn(M / this.a, e0, e1, e2, e3); lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); p.x = lon; p.y = lat; return p; } else { //default case rh = Math.sqrt(p.x * p.x + p.y * p.y); Az = Math.atan2(p.x, p.y); N1 = gN(this.a, this.e, this.sin_p12); cosAz = Math.cos(Az); tmp = this.e * this.cos_p12 * cosAz; A = -tmp * tmp / (1 - this.es); B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es); D = rh / N1; Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24; F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6; psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz); lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi))); lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es)); p.x = lon; p.y = lat; return p; } } } var names$26 = ["Azimuthal_Equidistant", "aeqd"]; var aeqd = { init: init$25, forward: forward$24, inverse: inverse$24, names: names$26 }; function init$26() { //double temp; /* temporary variable */ /* Place parameters in static storage for common use -------------------------------------------------*/ this.sin_p14 = Math.sin(this.lat0); this.cos_p14 = Math.cos(this.lat0); } /* Orthographic forward equations--mapping lat,long to x,y ---------------------------------------------------*/ function forward$25(p) { var sinphi, cosphi; /* sin and cos value */ var dlon; /* delta longitude value */ var coslon; /* cos of longitude */ var ksp; /* scale factor */ var g, x, y; var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ dlon = adjust_lon(lon - this.long0); sinphi = Math.sin(lat); cosphi = Math.cos(lat); coslon = Math.cos(dlon); g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; ksp = 1; if ((g > 0) || (Math.abs(g) <= EPSLN)) { x = this.a * ksp * cosphi * Math.sin(dlon); y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); } p.x = x; p.y = y; return p; } function inverse$25(p) { var rh; /* height above ellipsoid */ var z; /* angle */ var sinz, cosz; /* sin of z and cos of z */ var con; var lon, lat; /* Inverse equations -----------------*/ p.x -= this.x0; p.y -= this.y0; rh = Math.sqrt(p.x * p.x + p.y * p.y); z = asinz(rh / this.a); sinz = Math.sin(z); cosz = Math.cos(z); lon = this.long0; if (Math.abs(rh) <= EPSLN) { lat = this.lat0; p.x = lon; p.y = lat; return p; } lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh); con = Math.abs(this.lat0) - HALF_PI; if (Math.abs(con) <= EPSLN) { if (this.lat0 >= 0) { lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); } else { lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); } p.x = lon; p.y = lat; return p; } lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz)); p.x = lon; p.y = lat; return p; } var names$27 = ["ortho"]; var ortho = { init: init$26, forward: forward$25, inverse: inverse$25, names: names$27 }; var includedProjections = function(proj4){ proj4.Proj.projections.add(tmerc); proj4.Proj.projections.add(etmerc); proj4.Proj.projections.add(utm); proj4.Proj.projections.add(sterea); proj4.Proj.projections.add(stere); proj4.Proj.projections.add(somerc); proj4.Proj.projections.add(omerc); proj4.Proj.projections.add(lcc); proj4.Proj.projections.add(krovak); proj4.Proj.projections.add(cass); proj4.Proj.projections.add(laea); proj4.Proj.projections.add(aea); proj4.Proj.projections.add(gnom); proj4.Proj.projections.add(cea); proj4.Proj.projections.add(eqc); proj4.Proj.projections.add(poly); proj4.Proj.projections.add(nzmg); proj4.Proj.projections.add(mill); proj4.Proj.projections.add(sinu); proj4.Proj.projections.add(moll); proj4.Proj.projections.add(eqdc); proj4.Proj.projections.add(vandg); proj4.Proj.projections.add(aeqd); proj4.Proj.projections.add(ortho); }; proj4$1.defaultDatum = 'WGS84'; //default datum proj4$1.Proj = Projection$1; proj4$1.WGS84 = new proj4$1.Proj('WGS84'); proj4$1.Point = Point; proj4$1.toPoint = toPoint; proj4$1.defs = defs; proj4$1.transform = transform; proj4$1.mgrs = mgrs; proj4$1.version = version; includedProjections(proj4$1); return proj4$1; }))); },{}],286:[function(require,module,exports){ exports.publicEncrypt = require('./publicEncrypt') exports.privateDecrypt = require('./privateDecrypt') exports.privateEncrypt = function privateEncrypt (key, buf) { return exports.publicEncrypt(key, buf, true) } exports.publicDecrypt = function publicDecrypt (key, buf) { return exports.privateDecrypt(key, buf, true) } },{"./privateDecrypt":288,"./publicEncrypt":289}],287:[function(require,module,exports){ var createHash = require('create-hash') var Buffer = require('safe-buffer').Buffer module.exports = function (seed, len) { var t = Buffer.alloc(0) var i = 0 var c while (t.length < len) { c = i2ops(i++) t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]) } return t.slice(0, len) } function i2ops (c) { var out = Buffer.allocUnsafe(4) out.writeUInt32BE(c, 0) return out } },{"create-hash":188,"safe-buffer":318}],288:[function(require,module,exports){ var parseKeys = require('parse-asn1') var mgf = require('./mgf') var xor = require('./xor') var BN = require('bn.js') var crt = require('browserify-rsa') var createHash = require('create-hash') var withPublic = require('./withPublic') var Buffer = require('safe-buffer').Buffer module.exports = function privateDecrypt (privateKey, enc, reverse) { var padding if (privateKey.padding) { padding = privateKey.padding } else if (reverse) { padding = 1 } else { padding = 4 } var key = parseKeys(privateKey) var k = key.modulus.byteLength() if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) { throw new Error('decryption error') } var msg if (reverse) { msg = withPublic(new BN(enc), key) } else { msg = crt(enc, key) } var zBuffer = Buffer.alloc(k - msg.length) msg = Buffer.concat([zBuffer, msg], k) if (padding === 4) { return oaep(key, msg) } else if (padding === 1) { return pkcs1(key, msg, reverse) } else if (padding === 3) { return msg } else { throw new Error('unknown padding') } } function oaep (key, msg) { var k = key.modulus.byteLength() var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() var hLen = iHash.length if (msg[0] !== 0) { throw new Error('decryption error') } var maskedSeed = msg.slice(1, hLen + 1) var maskedDb = msg.slice(hLen + 1) var seed = xor(maskedSeed, mgf(maskedDb, hLen)) var db = xor(maskedDb, mgf(seed, k - hLen - 1)) if (compare(iHash, db.slice(0, hLen))) { throw new Error('decryption error') } var i = hLen while (db[i] === 0) { i++ } if (db[i++] !== 1) { throw new Error('decryption error') } return db.slice(i) } function pkcs1 (key, msg, reverse) { var p1 = msg.slice(0, 2) var i = 2 var status = 0 while (msg[i++] !== 0) { if (i >= msg.length) { status++ break } } var ps = msg.slice(2, i - 1) if ((p1.toString('hex') !== '0002' && !reverse) || (p1.toString('hex') !== '0001' && reverse)) { status++ } if (ps.length < 8) { status++ } if (status) { throw new Error('decryption error') } return msg.slice(i) } function compare (a, b) { a = Buffer.from(a) b = Buffer.from(b) var dif = 0 var len = a.length if (a.length !== b.length) { dif++ len = Math.min(a.length, b.length) } var i = -1 while (++i < len) { dif += (a[i] ^ b[i]) } return dif } },{"./mgf":287,"./withPublic":290,"./xor":291,"bn.js":147,"browserify-rsa":170,"create-hash":188,"parse-asn1":275,"safe-buffer":318}],289:[function(require,module,exports){ var parseKeys = require('parse-asn1') var randomBytes = require('randombytes') var createHash = require('create-hash') var mgf = require('./mgf') var xor = require('./xor') var BN = require('bn.js') var withPublic = require('./withPublic') var crt = require('browserify-rsa') var Buffer = require('safe-buffer').Buffer module.exports = function publicEncrypt (publicKey, msg, reverse) { var padding if (publicKey.padding) { padding = publicKey.padding } else if (reverse) { padding = 1 } else { padding = 4 } var key = parseKeys(publicKey) var paddedMsg if (padding === 4) { paddedMsg = oaep(key, msg) } else if (padding === 1) { paddedMsg = pkcs1(key, msg, reverse) } else if (padding === 3) { paddedMsg = new BN(msg) if (paddedMsg.cmp(key.modulus) >= 0) { throw new Error('data too long for modulus') } } else { throw new Error('unknown padding') } if (reverse) { return crt(paddedMsg, key) } else { return withPublic(paddedMsg, key) } } function oaep (key, msg) { var k = key.modulus.byteLength() var mLen = msg.length var iHash = createHash('sha1').update(Buffer.alloc(0)).digest() var hLen = iHash.length var hLen2 = 2 * hLen if (mLen > k - hLen2 - 2) { throw new Error('message too long') } var ps = Buffer.alloc(k - mLen - hLen2 - 2) var dblen = k - hLen - 1 var seed = randomBytes(hLen) var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen)) var maskedSeed = xor(seed, mgf(maskedDb, hLen)) return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k)) } function pkcs1 (key, msg, reverse) { var mLen = msg.length var k = key.modulus.byteLength() if (mLen > k - 11) { throw new Error('message too long') } var ps if (reverse) { ps = Buffer.alloc(k - mLen - 3, 0xff) } else { ps = nonZero(k - mLen - 3) } return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k)) } function nonZero (len) { var out = Buffer.allocUnsafe(len) var i = 0 var cache = randomBytes(len * 2) var cur = 0 var num while (i < len) { if (cur === cache.length) { cache = randomBytes(len * 2) cur = 0 } num = cache[cur++] if (num) { out[i++] = num } } return out } },{"./mgf":287,"./withPublic":290,"./xor":291,"bn.js":147,"browserify-rsa":170,"create-hash":188,"parse-asn1":275,"randombytes":298,"safe-buffer":318}],290:[function(require,module,exports){ var BN = require('bn.js') var Buffer = require('safe-buffer').Buffer function withPublic (paddedMsg, key) { return Buffer.from(paddedMsg .toRed(BN.mont(key.modulus)) .redPow(new BN(key.publicExponent)) .fromRed() .toArray()) } module.exports = withPublic },{"bn.js":147,"safe-buffer":318}],291:[function(require,module,exports){ module.exports = function xor (a, b) { var len = a.length var i = -1 while (++i < len) { a[i] ^= b[i] } return a } },{}],292:[function(require,module,exports){ (function (global){ /*! https://mths.be/punycode v1.4.1 by @mathias */ ;(function(root) { /** Detect free variables */ var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; var freeModule = typeof module == 'object' && module && !module.nodeType && module; var freeGlobal = typeof global == 'object' && global; if ( freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal ) { root = freeGlobal; } /** * The `punycode` object. * @name punycode * @type Object */ var punycode, /** Highest positive signed 32-bit float value */ maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 /** Bootstring parameters */ base = 36, tMin = 1, tMax = 26, skew = 38, damp = 700, initialBias = 72, initialN = 128, // 0x80 delimiter = '-', // '\x2D' /** Regular expressions */ regexPunycode = /^xn--/, regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators /** Error messages */ errors = { 'overflow': 'Overflow: input needs wider integers to process', 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', 'invalid-input': 'Invalid input' }, /** Convenience shortcuts */ baseMinusTMin = base - tMin, floor = Math.floor, stringFromCharCode = String.fromCharCode, /** Temporary variable */ key; /*--------------------------------------------------------------------------*/ /** * A generic error utility function. * @private * @param {String} type The error type. * @returns {Error} Throws a `RangeError` with the applicable error message. */ function error(type) { throw new RangeError(errors[type]); } /** * A generic `Array#map` utility function. * @private * @param {Array} array The array to iterate over. * @param {Function} callback The function that gets called for every array * item. * @returns {Array} A new array of values returned by the callback function. */ function map(array, fn) { var length = array.length; var result = []; while (length--) { result[length] = fn(array[length]); } return result; } /** * A simple `Array#map`-like wrapper to work with domain name strings or email * addresses. * @private * @param {String} domain The domain name or email address. * @param {Function} callback The function that gets called for every * character. * @returns {Array} A new string of characters returned by the callback * function. */ function mapDomain(string, fn) { var parts = string.split('@'); var result = ''; if (parts.length > 1) { // In email addresses, only the domain name should be punycoded. Leave // the local part (i.e. everything up to `@`) intact. result = parts[0] + '@'; string = parts[1]; } // Avoid `split(regex)` for IE8 compatibility. See #17. string = string.replace(regexSeparators, '\x2E'); var labels = string.split('.'); var encoded = map(labels, fn).join('.'); return result + encoded; } /** * Creates an array containing the numeric code points of each Unicode * character in the string. While JavaScript uses UCS-2 internally, * this function will convert a pair of surrogate halves (each of which * UCS-2 exposes as separate characters) into a single code point, * matching UTF-16. * @see `punycode.ucs2.encode` * @see * @memberOf punycode.ucs2 * @name decode * @param {String} string The Unicode input string (UCS-2). * @returns {Array} The new array of code points. */ function ucs2decode(string) { var output = [], counter = 0, length = string.length, value, extra; while (counter < length) { value = string.charCodeAt(counter++); if (value >= 0xD800 && value <= 0xDBFF && counter < length) { // high surrogate, and there is a next character extra = string.charCodeAt(counter++); if ((extra & 0xFC00) == 0xDC00) { // low surrogate output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); } else { // unmatched surrogate; only append this code unit, in case the next // code unit is the high surrogate of a surrogate pair output.push(value); counter--; } } else { output.push(value); } } return output; } /** * Creates a string based on an array of numeric code points. * @see `punycode.ucs2.decode` * @memberOf punycode.ucs2 * @name encode * @param {Array} codePoints The array of numeric code points. * @returns {String} The new Unicode string (UCS-2). */ function ucs2encode(array) { return map(array, function(value) { var output = ''; if (value > 0xFFFF) { value -= 0x10000; output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); value = 0xDC00 | value & 0x3FF; } output += stringFromCharCode(value); return output; }).join(''); } /** * Converts a basic code point into a digit/integer. * @see `digitToBasic()` * @private * @param {Number} codePoint The basic numeric code point value. * @returns {Number} The numeric value of a basic code point (for use in * representing integers) in the range `0` to `base - 1`, or `base` if * the code point does not represent a value. */ function basicToDigit(codePoint) { if (codePoint - 48 < 10) { return codePoint - 22; } if (codePoint - 65 < 26) { return codePoint - 65; } if (codePoint - 97 < 26) { return codePoint - 97; } return base; } /** * Converts a digit/integer into a basic code point. * @see `basicToDigit()` * @private * @param {Number} digit The numeric value of a basic code point. * @returns {Number} The basic code point whose value (when used for * representing integers) is `digit`, which needs to be in the range * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is * used; else, the lowercase form is used. The behavior is undefined * if `flag` is non-zero and `digit` has no uppercase form. */ function digitToBasic(digit, flag) { // 0..25 map to ASCII a..z or A..Z // 26..35 map to ASCII 0..9 return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); } /** * Bias adaptation function as per section 3.4 of RFC 3492. * https://tools.ietf.org/html/rfc3492#section-3.4 * @private */ function adapt(delta, numPoints, firstTime) { var k = 0; delta = firstTime ? floor(delta / damp) : delta >> 1; delta += floor(delta / numPoints); for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { delta = floor(delta / baseMinusTMin); } return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); } /** * Converts a Punycode string of ASCII-only symbols to a string of Unicode * symbols. * @memberOf punycode * @param {String} input The Punycode string of ASCII-only symbols. * @returns {String} The resulting string of Unicode symbols. */ function decode(input) { // Don't use UCS-2 var output = [], inputLength = input.length, out, i = 0, n = initialN, bias = initialBias, basic, j, index, oldi, w, k, digit, t, /** Cached calculation results */ baseMinusT; // Handle the basic code points: let `basic` be the number of input code // points before the last delimiter, or `0` if there is none, then copy // the first basic code points to the output. basic = input.lastIndexOf(delimiter); if (basic < 0) { basic = 0; } for (j = 0; j < basic; ++j) { // if it's not a basic code point if (input.charCodeAt(j) >= 0x80) { error('not-basic'); } output.push(input.charCodeAt(j)); } // Main decoding loop: start just after the last delimiter if any basic code // points were copied; start at the beginning otherwise. for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { // `index` is the index of the next character to be consumed. // Decode a generalized variable-length integer into `delta`, // which gets added to `i`. The overflow checking is easier // if we increase `i` as we go, then subtract off its starting // value at the end to obtain `delta`. for (oldi = i, w = 1, k = base; /* no condition */; k += base) { if (index >= inputLength) { error('invalid-input'); } digit = basicToDigit(input.charCodeAt(index++)); if (digit >= base || digit > floor((maxInt - i) / w)) { error('overflow'); } i += digit * w; t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (digit < t) { break; } baseMinusT = base - t; if (w > floor(maxInt / baseMinusT)) { error('overflow'); } w *= baseMinusT; } out = output.length + 1; bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`, // incrementing `n` each time, so we'll fix that now: if (floor(i / out) > maxInt - n) { error('overflow'); } n += floor(i / out); i %= out; // Insert `n` at position `i` of the output output.splice(i++, 0, n); } return ucs2encode(output); } /** * Converts a string of Unicode symbols (e.g. a domain name label) to a * Punycode string of ASCII-only symbols. * @memberOf punycode * @param {String} input The string of Unicode symbols. * @returns {String} The resulting Punycode string of ASCII-only symbols. */ function encode(input) { var n, delta, handledCPCount, basicLength, bias, j, m, q, k, t, currentValue, output = [], /** `inputLength` will hold the number of code points in `input`. */ inputLength, /** Cached calculation results */ handledCPCountPlusOne, baseMinusT, qMinusT; // Convert the input in UCS-2 to Unicode input = ucs2decode(input); // Cache the length inputLength = input.length; // Initialize the state n = initialN; delta = 0; bias = initialBias; // Handle the basic code points for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < 0x80) { output.push(stringFromCharCode(currentValue)); } } handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled; // `basicLength` is the number of basic code points. // Finish the basic string - if it is not empty - with a delimiter if (basicLength) { output.push(delimiter); } // Main encoding loop: while (handledCPCount < inputLength) { // All non-basic code points < n have been handled already. Find the next // larger one: for (m = maxInt, j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue >= n && currentValue < m) { m = currentValue; } } // Increase `delta` enough to advance the decoder's state to , // but guard against overflow handledCPCountPlusOne = handledCPCount + 1; if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { error('overflow'); } delta += (m - n) * handledCPCountPlusOne; n = m; for (j = 0; j < inputLength; ++j) { currentValue = input[j]; if (currentValue < n && ++delta > maxInt) { error('overflow'); } if (currentValue == n) { // Represent delta as a generalized variable-length integer for (q = delta, k = base; /* no condition */; k += base) { t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); if (q < t) { break; } qMinusT = q - t; baseMinusT = base - t; output.push( stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) ); q = floor(qMinusT / baseMinusT); } output.push(stringFromCharCode(digitToBasic(q, 0))); bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); delta = 0; ++handledCPCount; } } ++delta; ++n; } return output.join(''); } /** * Converts a Punycode string representing a domain name or an email address * to Unicode. Only the Punycoded parts of the input will be converted, i.e. * it doesn't matter if you call it on a string that has already been * converted to Unicode. * @memberOf punycode * @param {String} input The Punycoded domain name or email address to * convert to Unicode. * @returns {String} The Unicode representation of the given Punycode * string. */ function toUnicode(input) { return mapDomain(input, function(string) { return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; }); } /** * Converts a Unicode string representing a domain name or an email address to * Punycode. Only the non-ASCII parts of the domain name will be converted, * i.e. it doesn't matter if you call it with a domain that's already in * ASCII. * @memberOf punycode * @param {String} input The domain name or email address to convert, as a * Unicode string. * @returns {String} The Punycode representation of the given domain name or * email address. */ function toASCII(input) { return mapDomain(input, function(string) { return regexNonASCII.test(string) ? 'xn--' + encode(string) : string; }); } /*--------------------------------------------------------------------------*/ /** Define the public API */ punycode = { /** * A string representing the current Punycode.js version number. * @memberOf punycode * @type String */ 'version': '1.4.1', /** * An object of methods to convert from JavaScript's internal character * representation (UCS-2) to Unicode code points, and back. * @see * @memberOf punycode * @type Object */ 'ucs2': { 'decode': ucs2decode, 'encode': ucs2encode }, 'decode': decode, 'encode': encode, 'toASCII': toASCII, 'toUnicode': toUnicode }; /** Expose `punycode` */ // Some AMD build optimizers, like r.js, check for specific condition patterns // like the following: if ( typeof define == 'function' && typeof define.amd == 'object' && define.amd ) { define('punycode', function() { return punycode; }); } else if (freeExports && freeModule) { if (module.exports == freeExports) { // in Node.js, io.js, or RingoJS v0.8.0+ freeModule.exports = punycode; } else { // in Narwhal or RingoJS v0.7.0- for (key in punycode) { punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); } } } else { // in Rhino or a web browser root.punycode = punycode; } }(this)); }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],293:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. 'use strict'; // If obj.hasOwnProperty has been overridden, then calling // obj.hasOwnProperty(prop) will break. // See: https://github.com/joyent/node/issues/1707 function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } module.exports = function(qs, sep, eq, options) { sep = sep || '&'; eq = eq || '='; var obj = {}; if (typeof qs !== 'string' || qs.length === 0) { return obj; } var regexp = /\+/g; qs = qs.split(sep); var maxKeys = 1000; if (options && typeof options.maxKeys === 'number') { maxKeys = options.maxKeys; } var len = qs.length; // maxKeys <= 0 means that we should not limit keys count if (maxKeys > 0 && len > maxKeys) { len = maxKeys; } for (var i = 0; i < len; ++i) { var x = qs[i].replace(regexp, '%20'), idx = x.indexOf(eq), kstr, vstr, k, v; if (idx >= 0) { kstr = x.substr(0, idx); vstr = x.substr(idx + 1); } else { kstr = x; vstr = ''; } k = decodeURIComponent(kstr); v = decodeURIComponent(vstr); if (!hasOwnProperty(obj, k)) { obj[k] = v; } else if (isArray(obj[k])) { obj[k].push(v); } else { obj[k] = [obj[k], v]; } } return obj; }; var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; },{}],294:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. 'use strict'; var stringifyPrimitive = function(v) { switch (typeof v) { case 'string': return v; case 'boolean': return v ? 'true' : 'false'; case 'number': return isFinite(v) ? v : ''; default: return ''; } }; module.exports = function(obj, sep, eq, name) { sep = sep || '&'; eq = eq || '='; if (obj === null) { obj = undefined; } if (typeof obj === 'object') { return map(objectKeys(obj), function(k) { var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; if (isArray(obj[k])) { return map(obj[k], function(v) { return ks + encodeURIComponent(stringifyPrimitive(v)); }).join(sep); } else { return ks + encodeURIComponent(stringifyPrimitive(obj[k])); } }).join(sep); } if (!name) return ''; return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj)); }; var isArray = Array.isArray || function (xs) { return Object.prototype.toString.call(xs) === '[object Array]'; }; function map (xs, f) { if (xs.map) return xs.map(f); var res = []; for (var i = 0; i < xs.length; i++) { res.push(f(xs[i], i)); } return res; } var objectKeys = Object.keys || function (obj) { var res = []; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key); } return res; }; },{}],295:[function(require,module,exports){ 'use strict'; exports.decode = exports.parse = require('./decode'); exports.encode = exports.stringify = require('./encode'); },{"./decode":293,"./encode":294}],296:[function(require,module,exports){ var inherits = require('inherits') var EventEmitter = require('events').EventEmitter module.exports = Queue module.exports.default = Queue function Queue (options) { if (!(this instanceof Queue)) { return new Queue(options) } EventEmitter.call(this) options = options || {} this.concurrency = options.concurrency || Infinity this.timeout = options.timeout || 0 this.autostart = options.autostart || false this.results = options.results || null this.pending = 0 this.session = 0 this.running = false this.jobs = [] this.timers = {} } inherits(Queue, EventEmitter) var arrayMethods = [ 'pop', 'shift', 'indexOf', 'lastIndexOf' ] arrayMethods.forEach(function (method) { Queue.prototype[method] = function () { return Array.prototype[method].apply(this.jobs, arguments) } }) Queue.prototype.slice = function (begin, end) { this.jobs = this.jobs.slice(begin, end) return this } Queue.prototype.reverse = function () { this.jobs.reverse() return this } var arrayAddMethods = [ 'push', 'unshift', 'splice' ] arrayAddMethods.forEach(function (method) { Queue.prototype[method] = function () { var methodResult = Array.prototype[method].apply(this.jobs, arguments) if (this.autostart) { this.start() } return methodResult } }) Object.defineProperty(Queue.prototype, 'length', { get: function () { return this.pending + this.jobs.length } }) Queue.prototype.start = function (cb) { if (cb) { callOnErrorOrEnd.call(this, cb) } this.running = true if (this.pending >= this.concurrency) { return } if (this.jobs.length === 0) { if (this.pending === 0) { done.call(this) } return } var self = this var job = this.jobs.shift() var once = true var session = this.session var timeoutId = null var didTimeout = false var resultIndex = null var timeout = job.timeout || this.timeout function next (err, result) { if (once && self.session === session) { once = false self.pending-- if (timeoutId !== null) { delete self.timers[timeoutId] clearTimeout(timeoutId) } if (err) { self.emit('error', err, job) } else if (didTimeout === false) { if (resultIndex !== null) { self.results[resultIndex] = Array.prototype.slice.call(arguments, 1) } self.emit('success', result, job) } if (self.session === session) { if (self.pending === 0 && self.jobs.length === 0) { done.call(self) } else if (self.running) { self.start() } } } } if (timeout) { timeoutId = setTimeout(function () { didTimeout = true if (self.listeners('timeout').length > 0) { self.emit('timeout', next, job) } else { next() } }, timeout) this.timers[timeoutId] = timeoutId } if (this.results) { resultIndex = this.results.length this.results[resultIndex] = null } this.pending++ self.emit('start', job) var promise = job(next) if (promise && promise.then && typeof promise.then === 'function') { promise.then(function (result) { return next(null, result) }).catch(function (err) { return next(err || true) }) } if (this.running && this.jobs.length > 0) { this.start() } } Queue.prototype.stop = function () { this.running = false } Queue.prototype.end = function (err) { clearTimers.call(this) this.jobs.length = 0 this.pending = 0 done.call(this, err) } function clearTimers () { for (var key in this.timers) { var timeoutId = this.timers[key] delete this.timers[key] clearTimeout(timeoutId) } } function callOnErrorOrEnd (cb) { var self = this this.on('error', onerror) this.on('end', onend) function onerror (err) { self.end(err) } function onend (err) { self.removeListener('error', onerror) self.removeListener('end', onend) cb(err, this.results) } } function done (err) { this.session++ this.running = false this.emit('end', err) } },{"events":221,"inherits":262}],297:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.quickselect = factory()); }(this, (function () { 'use strict'; function quickselect(arr, k, left, right, compare) { quickselectStep(arr, k, left || 0, right || (arr.length - 1), compare || defaultCompare); } function quickselectStep(arr, k, left, right, compare) { while (right > left) { if (right - left > 600) { var n = right - left + 1; var m = k - left + 1; var z = Math.log(n); var s = 0.5 * Math.exp(2 * z / 3); var sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); var newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); var newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); quickselectStep(arr, k, newLeft, newRight, compare); } var t = arr[k]; var i = left; var j = right; swap(arr, left, k); if (compare(arr[right], t) > 0) swap(arr, left, right); while (i < j) { swap(arr, i, j); i++; j--; while (compare(arr[i], t) < 0) i++; while (compare(arr[j], t) > 0) j--; } if (compare(arr[left], t) === 0) swap(arr, left, j); else { j++; swap(arr, j, right); } if (j <= k) left = j + 1; if (k <= j) right = j - 1; } } function swap(arr, i, j) { var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } function defaultCompare(a, b) { return a < b ? -1 : a > b ? 1 : 0; } return quickselect; }))); },{}],298:[function(require,module,exports){ (function (process,global){ 'use strict' // limit of Crypto.getRandomValues() // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues var MAX_BYTES = 65536 // Node supports requesting up to this number of bytes // https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48 var MAX_UINT32 = 4294967295 function oldBrowser () { throw new Error('Secure random number generation is not supported by this browser.\nUse Chrome, Firefox or Internet Explorer 11') } var Buffer = require('safe-buffer').Buffer var crypto = global.crypto || global.msCrypto if (crypto && crypto.getRandomValues) { module.exports = randomBytes } else { module.exports = oldBrowser } function randomBytes (size, cb) { // phantomjs needs to throw if (size > MAX_UINT32) throw new RangeError('requested too many random bytes') var bytes = Buffer.allocUnsafe(size) if (size > 0) { // getRandomValues fails on IE if size == 0 if (size > MAX_BYTES) { // this is the max bytes crypto.getRandomValues // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues for (var generated = 0; generated < size; generated += MAX_BYTES) { // buffer.slice automatically checks if the end is past the end of // the buffer so we don't have to here crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES)) } } else { crypto.getRandomValues(bytes) } } if (typeof cb === 'function') { return process.nextTick(function () { cb(null, bytes) }) } return bytes } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"_process":284,"safe-buffer":318}],299:[function(require,module,exports){ (function (process,global){ 'use strict' function oldBrowser () { throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11') } var safeBuffer = require('safe-buffer') var randombytes = require('randombytes') var Buffer = safeBuffer.Buffer var kBufferMaxLength = safeBuffer.kMaxLength var crypto = global.crypto || global.msCrypto var kMaxUint32 = Math.pow(2, 32) - 1 function assertOffset (offset, length) { if (typeof offset !== 'number' || offset !== offset) { // eslint-disable-line no-self-compare throw new TypeError('offset must be a number') } if (offset > kMaxUint32 || offset < 0) { throw new TypeError('offset must be a uint32') } if (offset > kBufferMaxLength || offset > length) { throw new RangeError('offset out of range') } } function assertSize (size, offset, length) { if (typeof size !== 'number' || size !== size) { // eslint-disable-line no-self-compare throw new TypeError('size must be a number') } if (size > kMaxUint32 || size < 0) { throw new TypeError('size must be a uint32') } if (size + offset > length || size > kBufferMaxLength) { throw new RangeError('buffer too small') } } if ((crypto && crypto.getRandomValues) || !process.browser) { exports.randomFill = randomFill exports.randomFillSync = randomFillSync } else { exports.randomFill = oldBrowser exports.randomFillSync = oldBrowser } function randomFill (buf, offset, size, cb) { if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { throw new TypeError('"buf" argument must be a Buffer or Uint8Array') } if (typeof offset === 'function') { cb = offset offset = 0 size = buf.length } else if (typeof size === 'function') { cb = size size = buf.length - offset } else if (typeof cb !== 'function') { throw new TypeError('"cb" argument must be a function') } assertOffset(offset, buf.length) assertSize(size, offset, buf.length) return actualFill(buf, offset, size, cb) } function actualFill (buf, offset, size, cb) { if (process.browser) { var ourBuf = buf.buffer var uint = new Uint8Array(ourBuf, offset, size) crypto.getRandomValues(uint) if (cb) { process.nextTick(function () { cb(null, buf) }) return } return buf } if (cb) { randombytes(size, function (err, bytes) { if (err) { return cb(err) } bytes.copy(buf, offset) cb(null, buf) }) return } var bytes = randombytes(size) bytes.copy(buf, offset) return buf } function randomFillSync (buf, offset, size) { if (typeof offset === 'undefined') { offset = 0 } if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) { throw new TypeError('"buf" argument must be a Buffer or Uint8Array') } assertOffset(offset, buf.length) if (size === undefined) size = buf.length - offset assertSize(size, offset, buf.length) return actualFill(buf, offset, size) } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"_process":284,"randombytes":298,"safe-buffer":318}],300:[function(require,module,exports){ 'use strict'; module.exports = rbush; module.exports.default = rbush; var quickselect = require('quickselect'); function rbush(maxEntries, format) { if (!(this instanceof rbush)) return new rbush(maxEntries, format); // max entries in a node is 9 by default; min node fill is 40% for best performance this._maxEntries = Math.max(4, maxEntries || 9); this._minEntries = Math.max(2, Math.ceil(this._maxEntries * 0.4)); if (format) { this._initFormat(format); } this.clear(); } rbush.prototype = { all: function () { return this._all(this.data, []); }, search: function (bbox) { var node = this.data, result = [], toBBox = this.toBBox; if (!intersects(bbox, node)) return result; var nodesToSearch = [], i, len, child, childBBox; while (node) { for (i = 0, len = node.children.length; i < len; i++) { child = node.children[i]; childBBox = node.leaf ? toBBox(child) : child; if (intersects(bbox, childBBox)) { if (node.leaf) result.push(child); else if (contains(bbox, childBBox)) this._all(child, result); else nodesToSearch.push(child); } } node = nodesToSearch.pop(); } return result; }, collides: function (bbox) { var node = this.data, toBBox = this.toBBox; if (!intersects(bbox, node)) return false; var nodesToSearch = [], i, len, child, childBBox; while (node) { for (i = 0, len = node.children.length; i < len; i++) { child = node.children[i]; childBBox = node.leaf ? toBBox(child) : child; if (intersects(bbox, childBBox)) { if (node.leaf || contains(bbox, childBBox)) return true; nodesToSearch.push(child); } } node = nodesToSearch.pop(); } return false; }, load: function (data) { if (!(data && data.length)) return this; if (data.length < this._minEntries) { for (var i = 0, len = data.length; i < len; i++) { this.insert(data[i]); } return this; } // recursively build the tree with the given data from scratch using OMT algorithm var node = this._build(data.slice(), 0, data.length - 1, 0); if (!this.data.children.length) { // save as is if tree is empty this.data = node; } else if (this.data.height === node.height) { // split root if trees have the same height this._splitRoot(this.data, node); } else { if (this.data.height < node.height) { // swap trees if inserted one is bigger var tmpNode = this.data; this.data = node; node = tmpNode; } // insert the small tree into the large tree at appropriate level this._insert(node, this.data.height - node.height - 1, true); } return this; }, insert: function (item) { if (item) this._insert(item, this.data.height - 1); return this; }, clear: function () { this.data = createNode([]); return this; }, remove: function (item, equalsFn) { if (!item) return this; var node = this.data, bbox = this.toBBox(item), path = [], indexes = [], i, parent, index, goingUp; // depth-first iterative tree traversal while (node || path.length) { if (!node) { // go up node = path.pop(); parent = path[path.length - 1]; i = indexes.pop(); goingUp = true; } if (node.leaf) { // check current node index = findItem(item, node.children, equalsFn); if (index !== -1) { // item found, remove the item and condense tree upwards node.children.splice(index, 1); path.push(node); this._condense(path); return this; } } if (!goingUp && !node.leaf && contains(node, bbox)) { // go down path.push(node); indexes.push(i); i = 0; parent = node; node = node.children[0]; } else if (parent) { // go right i++; node = parent.children[i]; goingUp = false; } else node = null; // nothing found } return this; }, toBBox: function (item) { return item; }, compareMinX: compareNodeMinX, compareMinY: compareNodeMinY, toJSON: function () { return this.data; }, fromJSON: function (data) { this.data = data; return this; }, _all: function (node, result) { var nodesToSearch = []; while (node) { if (node.leaf) result.push.apply(result, node.children); else nodesToSearch.push.apply(nodesToSearch, node.children); node = nodesToSearch.pop(); } return result; }, _build: function (items, left, right, height) { var N = right - left + 1, M = this._maxEntries, node; if (N <= M) { // reached leaf level; return leaf node = createNode(items.slice(left, right + 1)); calcBBox(node, this.toBBox); return node; } if (!height) { // target height of the bulk-loaded tree height = Math.ceil(Math.log(N) / Math.log(M)); // target number of root entries to maximize storage utilization M = Math.ceil(N / Math.pow(M, height - 1)); } node = createNode([]); node.leaf = false; node.height = height; // split the items into M mostly square tiles var N2 = Math.ceil(N / M), N1 = N2 * Math.ceil(Math.sqrt(M)), i, j, right2, right3; multiSelect(items, left, right, N1, this.compareMinX); for (i = left; i <= right; i += N1) { right2 = Math.min(i + N1 - 1, right); multiSelect(items, i, right2, N2, this.compareMinY); for (j = i; j <= right2; j += N2) { right3 = Math.min(j + N2 - 1, right2); // pack each entry recursively node.children.push(this._build(items, j, right3, height - 1)); } } calcBBox(node, this.toBBox); return node; }, _chooseSubtree: function (bbox, node, level, path) { var i, len, child, targetNode, area, enlargement, minArea, minEnlargement; while (true) { path.push(node); if (node.leaf || path.length - 1 === level) break; minArea = minEnlargement = Infinity; for (i = 0, len = node.children.length; i < len; i++) { child = node.children[i]; area = bboxArea(child); enlargement = enlargedArea(bbox, child) - area; // choose entry with the least area enlargement if (enlargement < minEnlargement) { minEnlargement = enlargement; minArea = area < minArea ? area : minArea; targetNode = child; } else if (enlargement === minEnlargement) { // otherwise choose one with the smallest area if (area < minArea) { minArea = area; targetNode = child; } } } node = targetNode || node.children[0]; } return node; }, _insert: function (item, level, isNode) { var toBBox = this.toBBox, bbox = isNode ? item : toBBox(item), insertPath = []; // find the best node for accommodating the item, saving all nodes along the path too var node = this._chooseSubtree(bbox, this.data, level, insertPath); // put the item into the node node.children.push(item); extend(node, bbox); // split on node overflow; propagate upwards if necessary while (level >= 0) { if (insertPath[level].children.length > this._maxEntries) { this._split(insertPath, level); level--; } else break; } // adjust bboxes along the insertion path this._adjustParentBBoxes(bbox, insertPath, level); }, // split overflowed node into two _split: function (insertPath, level) { var node = insertPath[level], M = node.children.length, m = this._minEntries; this._chooseSplitAxis(node, m, M); var splitIndex = this._chooseSplitIndex(node, m, M); var newNode = createNode(node.children.splice(splitIndex, node.children.length - splitIndex)); newNode.height = node.height; newNode.leaf = node.leaf; calcBBox(node, this.toBBox); calcBBox(newNode, this.toBBox); if (level) insertPath[level - 1].children.push(newNode); else this._splitRoot(node, newNode); }, _splitRoot: function (node, newNode) { // split root node this.data = createNode([node, newNode]); this.data.height = node.height + 1; this.data.leaf = false; calcBBox(this.data, this.toBBox); }, _chooseSplitIndex: function (node, m, M) { var i, bbox1, bbox2, overlap, area, minOverlap, minArea, index; minOverlap = minArea = Infinity; for (i = m; i <= M - m; i++) { bbox1 = distBBox(node, 0, i, this.toBBox); bbox2 = distBBox(node, i, M, this.toBBox); overlap = intersectionArea(bbox1, bbox2); area = bboxArea(bbox1) + bboxArea(bbox2); // choose distribution with minimum overlap if (overlap < minOverlap) { minOverlap = overlap; index = i; minArea = area < minArea ? area : minArea; } else if (overlap === minOverlap) { // otherwise choose distribution with minimum area if (area < minArea) { minArea = area; index = i; } } } return index; }, // sorts node children by the best axis for split _chooseSplitAxis: function (node, m, M) { var compareMinX = node.leaf ? this.compareMinX : compareNodeMinX, compareMinY = node.leaf ? this.compareMinY : compareNodeMinY, xMargin = this._allDistMargin(node, m, M, compareMinX), yMargin = this._allDistMargin(node, m, M, compareMinY); // if total distributions margin value is minimal for x, sort by minX, // otherwise it's already sorted by minY if (xMargin < yMargin) node.children.sort(compareMinX); }, // total margin of all possible split distributions where each node is at least m full _allDistMargin: function (node, m, M, compare) { node.children.sort(compare); var toBBox = this.toBBox, leftBBox = distBBox(node, 0, m, toBBox), rightBBox = distBBox(node, M - m, M, toBBox), margin = bboxMargin(leftBBox) + bboxMargin(rightBBox), i, child; for (i = m; i < M - m; i++) { child = node.children[i]; extend(leftBBox, node.leaf ? toBBox(child) : child); margin += bboxMargin(leftBBox); } for (i = M - m - 1; i >= m; i--) { child = node.children[i]; extend(rightBBox, node.leaf ? toBBox(child) : child); margin += bboxMargin(rightBBox); } return margin; }, _adjustParentBBoxes: function (bbox, path, level) { // adjust bboxes along the given tree path for (var i = level; i >= 0; i--) { extend(path[i], bbox); } }, _condense: function (path) { // go through the path, removing empty nodes and updating bboxes for (var i = path.length - 1, siblings; i >= 0; i--) { if (path[i].children.length === 0) { if (i > 0) { siblings = path[i - 1].children; siblings.splice(siblings.indexOf(path[i]), 1); } else this.clear(); } else calcBBox(path[i], this.toBBox); } }, _initFormat: function (format) { // data format (minX, minY, maxX, maxY accessors) // uses eval-type function compilation instead of just accepting a toBBox function // because the algorithms are very sensitive to sorting functions performance, // so they should be dead simple and without inner calls var compareArr = ['return a', ' - b', ';']; this.compareMinX = new Function('a', 'b', compareArr.join(format[0])); this.compareMinY = new Function('a', 'b', compareArr.join(format[1])); this.toBBox = new Function('a', 'return {minX: a' + format[0] + ', minY: a' + format[1] + ', maxX: a' + format[2] + ', maxY: a' + format[3] + '};'); } }; function findItem(item, items, equalsFn) { if (!equalsFn) return items.indexOf(item); for (var i = 0; i < items.length; i++) { if (equalsFn(item, items[i])) return i; } return -1; } // calculate node's bbox from bboxes of its children function calcBBox(node, toBBox) { distBBox(node, 0, node.children.length, toBBox, node); } // min bounding rectangle of node children from k to p-1 function distBBox(node, k, p, toBBox, destNode) { if (!destNode) destNode = createNode(null); destNode.minX = Infinity; destNode.minY = Infinity; destNode.maxX = -Infinity; destNode.maxY = -Infinity; for (var i = k, child; i < p; i++) { child = node.children[i]; extend(destNode, node.leaf ? toBBox(child) : child); } return destNode; } function extend(a, b) { a.minX = Math.min(a.minX, b.minX); a.minY = Math.min(a.minY, b.minY); a.maxX = Math.max(a.maxX, b.maxX); a.maxY = Math.max(a.maxY, b.maxY); return a; } function compareNodeMinX(a, b) { return a.minX - b.minX; } function compareNodeMinY(a, b) { return a.minY - b.minY; } function bboxArea(a) { return (a.maxX - a.minX) * (a.maxY - a.minY); } function bboxMargin(a) { return (a.maxX - a.minX) + (a.maxY - a.minY); } function enlargedArea(a, b) { return (Math.max(b.maxX, a.maxX) - Math.min(b.minX, a.minX)) * (Math.max(b.maxY, a.maxY) - Math.min(b.minY, a.minY)); } function intersectionArea(a, b) { var minX = Math.max(a.minX, b.minX), minY = Math.max(a.minY, b.minY), maxX = Math.min(a.maxX, b.maxX), maxY = Math.min(a.maxY, b.maxY); return Math.max(0, maxX - minX) * Math.max(0, maxY - minY); } function contains(a, b) { return a.minX <= b.minX && a.minY <= b.minY && b.maxX <= a.maxX && b.maxY <= a.maxY; } function intersects(a, b) { return b.minX <= a.maxX && b.minY <= a.maxY && b.maxX >= a.minX && b.maxY >= a.minY; } function createNode(children) { return { children: children, height: 1, leaf: true, minX: Infinity, minY: Infinity, maxX: -Infinity, maxY: -Infinity }; } // sort an array so that items come in groups of n unsorted items, with groups sorted between each other; // combines selection algorithm with binary divide & conquer approach function multiSelect(arr, left, right, n, compare) { var stack = [left, right], mid; while (stack.length) { right = stack.pop(); left = stack.pop(); if (right - left <= n) continue; mid = left + Math.ceil((right - left) / n / 2) * n; quickselect(arr, mid, left, right, compare); stack.push(left, mid, mid, right); } } },{"quickselect":297}],301:[function(require,module,exports){ module.exports = require('./lib/_stream_duplex.js'); },{"./lib/_stream_duplex.js":302}],302:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. // a duplex stream is just a stream that is both readable and writable. // Since JS doesn't have multiple prototypal inheritance, this class // prototypally inherits from Readable, and then parasitically from // Writable. 'use strict'; /**/ var pna = require('process-nextick-args'); /**/ /**/ var objectKeys = Object.keys || function (obj) { var keys = []; for (var key in obj) { keys.push(key); }return keys; }; /**/ module.exports = Duplex; /**/ var util = require('core-util-is'); util.inherits = require('inherits'); /**/ var Readable = require('./_stream_readable'); var Writable = require('./_stream_writable'); util.inherits(Duplex, Readable); { // avoid scope creep, the keys array can then be collected var keys = objectKeys(Writable.prototype); for (var v = 0; v < keys.length; v++) { var method = keys[v]; if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; } } function Duplex(options) { if (!(this instanceof Duplex)) return new Duplex(options); Readable.call(this, options); Writable.call(this, options); if (options && options.readable === false) this.readable = false; if (options && options.writable === false) this.writable = false; this.allowHalfOpen = true; if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; this.once('end', onend); } Object.defineProperty(Duplex.prototype, 'writableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function () { return this._writableState.highWaterMark; } }); // the no-half-open enforcer function onend() { // if we allow half-open state, or if the writable side ended, // then we're ok. if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written. // But allow more writes to happen in this tick. pna.nextTick(onEndNT, this); } function onEndNT(self) { self.end(); } Object.defineProperty(Duplex.prototype, 'destroyed', { get: function () { if (this._readableState === undefined || this._writableState === undefined) { return false; } return this._readableState.destroyed && this._writableState.destroyed; }, set: function (value) { // we ignore the value if the stream // has not been initialized yet if (this._readableState === undefined || this._writableState === undefined) { return; } // backward compatibility, the user is explicitly // managing destroyed this._readableState.destroyed = value; this._writableState.destroyed = value; } }); Duplex.prototype._destroy = function (err, cb) { this.push(null); this.end(); pna.nextTick(cb, err); }; },{"./_stream_readable":304,"./_stream_writable":306,"core-util-is":186,"inherits":262,"process-nextick-args":283}],303:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. // a passthrough stream. // basically just the most minimal sort of Transform stream. // Every written chunk gets output as-is. 'use strict'; module.exports = PassThrough; var Transform = require('./_stream_transform'); /**/ var util = require('core-util-is'); util.inherits = require('inherits'); /**/ util.inherits(PassThrough, Transform); function PassThrough(options) { if (!(this instanceof PassThrough)) return new PassThrough(options); Transform.call(this, options); } PassThrough.prototype._transform = function (chunk, encoding, cb) { cb(null, chunk); }; },{"./_stream_transform":305,"core-util-is":186,"inherits":262}],304:[function(require,module,exports){ (function (process,global){ // Copyright Joyent, Inc. and other Node contributors. // // 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. 'use strict'; /**/ var pna = require('process-nextick-args'); /**/ module.exports = Readable; /**/ var isArray = require('isarray'); /**/ /**/ var Duplex; /**/ Readable.ReadableState = ReadableState; /**/ var EE = require('events').EventEmitter; var EElistenerCount = function (emitter, type) { return emitter.listeners(type).length; }; /**/ /**/ var Stream = require('./internal/streams/stream'); /**/ /**/ var Buffer = require('safe-buffer').Buffer; var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /**/ /**/ var util = require('core-util-is'); util.inherits = require('inherits'); /**/ /**/ var debugUtil = require('util'); var debug = void 0; if (debugUtil && debugUtil.debuglog) { debug = debugUtil.debuglog('stream'); } else { debug = function () {}; } /**/ var BufferList = require('./internal/streams/BufferList'); var destroyImpl = require('./internal/streams/destroy'); var StringDecoder; util.inherits(Readable, Stream); var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume']; function prependListener(emitter, event, fn) { // Sadly this is not cacheable as some libraries bundle their own // event emitter implementation with them. if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any // userland ones. NEVER DO THIS. This is here only because this code needs // to continue to work with older versions of Node.js that do not include // the prependListener() method. The goal is to eventually remove this hack. if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; } function ReadableState(options, stream) { Duplex = Duplex || require('./_stream_duplex'); options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different // values for the readable and the writable sides of the duplex stream. // These options can be provided separately as readableXXX and writableXXX. var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to // make all the buffer merging and length checks go away this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer // Note: 0 is a valid value, means "don't call _read preemptively ever" var hwm = options.highWaterMark; var readableHwm = options.readableHighWaterMark; var defaultHwm = this.objectMode ? 16 : 16 * 1024; if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints. this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the // linked list can remove elements from the beginning faster than // array.shift() this.buffer = new BufferList(); this.length = 0; this.pipes = null; this.pipesCount = 0; this.flowing = null; this.ended = false; this.endEmitted = false; this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted // immediately, or on a later tick. We set this to true at first, because // any actions that shouldn't happen until "later" should generally also // not happen before the first read call. this.sync = true; // whenever we return null, then we set a flag to say // that we're awaiting a 'readable' event emission. this.needReadable = false; this.emittedReadable = false; this.readableListening = false; this.resumeScheduled = false; // has it been destroyed this.destroyed = false; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled this.readingMore = false; this.decoder = null; this.encoding = null; if (options.encoding) { if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; this.decoder = new StringDecoder(options.encoding); this.encoding = options.encoding; } } function Readable(options) { Duplex = Duplex || require('./_stream_duplex'); if (!(this instanceof Readable)) return new Readable(options); this._readableState = new ReadableState(options, this); // legacy this.readable = true; if (options) { if (typeof options.read === 'function') this._read = options.read; if (typeof options.destroy === 'function') this._destroy = options.destroy; } Stream.call(this); } Object.defineProperty(Readable.prototype, 'destroyed', { get: function () { if (this._readableState === undefined) { return false; } return this._readableState.destroyed; }, set: function (value) { // we ignore the value if the stream // has not been initialized yet if (!this._readableState) { return; } // backward compatibility, the user is explicitly // managing destroyed this._readableState.destroyed = value; } }); Readable.prototype.destroy = destroyImpl.destroy; Readable.prototype._undestroy = destroyImpl.undestroy; Readable.prototype._destroy = function (err, cb) { this.push(null); cb(err); }; // Manually shove something into the read() buffer. // This returns true if the highWaterMark has not been hit yet, // similar to how Writable.write() returns true if you should // write() some more. Readable.prototype.push = function (chunk, encoding) { var state = this._readableState; var skipChunkCheck; if (!state.objectMode) { if (typeof chunk === 'string') { encoding = encoding || state.defaultEncoding; if (encoding !== state.encoding) { chunk = Buffer.from(chunk, encoding); encoding = ''; } skipChunkCheck = true; } } else { skipChunkCheck = true; } return readableAddChunk(this, chunk, encoding, false, skipChunkCheck); }; // Unshift should *always* be something directly out of read() Readable.prototype.unshift = function (chunk) { return readableAddChunk(this, chunk, null, true, false); }; function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) { var state = stream._readableState; if (chunk === null) { state.reading = false; onEofChunk(stream, state); } else { var er; if (!skipChunkCheck) er = chunkInvalid(state, chunk); if (er) { stream.emit('error', er); } else if (state.objectMode || chunk && chunk.length > 0) { if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) { chunk = _uint8ArrayToBuffer(chunk); } if (addToFront) { if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true); } else if (state.ended) { stream.emit('error', new Error('stream.push() after EOF')); } else { state.reading = false; if (state.decoder && !encoding) { chunk = state.decoder.write(chunk); if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state); } else { addChunk(stream, state, chunk, false); } } } else if (!addToFront) { state.reading = false; } } return needMoreData(state); } function addChunk(stream, state, chunk, addToFront) { if (state.flowing && state.length === 0 && !state.sync) { stream.emit('data', chunk); stream.read(0); } else { // update the buffer info. state.length += state.objectMode ? 1 : chunk.length; if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); if (state.needReadable) emitReadable(stream); } maybeReadMore(stream, state); } function chunkInvalid(state, chunk) { var er; if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { er = new TypeError('Invalid non-string/buffer chunk'); } return er; } // if it's past the high water mark, we can push in some more. // Also, if we have no data yet, we can stand some // more bytes. This is to work around cases where hwm=0, // such as the repl. Also, if the push() triggered a // readable event, and the user called read(largeNumber) such that // needReadable was set, then we ought to push more, so that another // 'readable' event will be triggered. function needMoreData(state) { return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); } Readable.prototype.isPaused = function () { return this._readableState.flowing === false; }; // backwards compatibility. Readable.prototype.setEncoding = function (enc) { if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; this._readableState.decoder = new StringDecoder(enc); this._readableState.encoding = enc; return this; }; // Don't raise the hwm > 8MB var MAX_HWM = 0x800000; function computeNewHighWaterMark(n) { if (n >= MAX_HWM) { n = MAX_HWM; } else { // Get the next highest power of 2 to prevent increasing hwm excessively in // tiny amounts n--; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; n++; } return n; } // This function is designed to be inlinable, so please take care when making // changes to the function body. function howMuchToRead(n, state) { if (n <= 0 || state.length === 0 && state.ended) return 0; if (state.objectMode) return 1; if (n !== n) { // Only flow one buffer at a time if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; } // If we're asking for more than the current hwm, then raise the hwm. if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); if (n <= state.length) return n; // Don't have enough if (!state.ended) { state.needReadable = true; return 0; } return state.length; } // you can override either this method, or the async _read(n) below. Readable.prototype.read = function (n) { debug('read', n); n = parseInt(n, 10); var state = this._readableState; var nOrig = n; if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we // already have a bunch of data in the buffer, then just trigger // the 'readable' event and move on. if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { debug('read: emitReadable', state.length, state.ended); if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); return null; } n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up. if (n === 0 && state.ended) { if (state.length === 0) endReadable(this); return null; } // All the actual chunk generation logic needs to be // *below* the call to _read. The reason is that in certain // synthetic stream cases, such as passthrough streams, _read // may be a completely synchronous operation which may change // the state of the read buffer, providing enough data when // before there was *not* enough. // // So, the steps are: // 1. Figure out what the state of things will be after we do // a read from the buffer. // // 2. If that resulting state will trigger a _read, then call _read. // Note that this may be asynchronous, or synchronous. Yes, it is // deeply ugly to write APIs this way, but that still doesn't mean // that the Readable class should behave improperly, as streams are // designed to be sync/async agnostic. // Take note if the _read call is sync or async (ie, if the read call // has returned yet), so that we know whether or not it's safe to emit // 'readable' etc. // // 3. Actually pull the requested chunks out of the buffer and return. // if we need a readable event, then we need to do some reading. var doRead = state.needReadable; debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some if (state.length === 0 || state.length - n < state.highWaterMark) { doRead = true; debug('length less than watermark', doRead); } // however, if we've ended, then there's no point, and if we're already // reading, then it's unnecessary. if (state.ended || state.reading) { doRead = false; debug('reading or ended', doRead); } else if (doRead) { debug('do read'); state.reading = true; state.sync = true; // if the length is currently zero, then we *need* a readable event. if (state.length === 0) state.needReadable = true; // call internal read method this._read(state.highWaterMark); state.sync = false; // If _read pushed data synchronously, then `reading` will be false, // and we need to re-evaluate how much data we can return to the user. if (!state.reading) n = howMuchToRead(nOrig, state); } var ret; if (n > 0) ret = fromList(n, state);else ret = null; if (ret === null) { state.needReadable = true; n = 0; } else { state.length -= n; } if (state.length === 0) { // If we have nothing in the buffer, then we want to know // as soon as we *do* get something into the buffer. if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick. if (nOrig !== n && state.ended) endReadable(this); } if (ret !== null) this.emit('data', ret); return ret; }; function onEofChunk(stream, state) { if (state.ended) return; if (state.decoder) { var chunk = state.decoder.end(); if (chunk && chunk.length) { state.buffer.push(chunk); state.length += state.objectMode ? 1 : chunk.length; } } state.ended = true; // emit 'readable' now to make sure it gets picked up. emitReadable(stream); } // Don't emit readable right away in sync mode, because this can trigger // another read() call => stack overflow. This way, it might trigger // a nextTick recursion warning, but that's not so bad. function emitReadable(stream) { var state = stream._readableState; state.needReadable = false; if (!state.emittedReadable) { debug('emitReadable', state.flowing); state.emittedReadable = true; if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream); } } function emitReadable_(stream) { debug('emit readable'); stream.emit('readable'); flow(stream); } // at this point, the user has presumably seen the 'readable' event, // and called read() to consume some data. that may have triggered // in turn another _read(n) call, in which case reading = true if // it's in progress. // However, if we're not ended, or reading, and the length < hwm, // then go ahead and try to read some more preemptively. function maybeReadMore(stream, state) { if (!state.readingMore) { state.readingMore = true; pna.nextTick(maybeReadMore_, stream, state); } } function maybeReadMore_(stream, state) { var len = state.length; while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { debug('maybeReadMore read 0'); stream.read(0); if (len === state.length) // didn't get any data, stop spinning. break;else len = state.length; } state.readingMore = false; } // abstract method. to be overridden in specific implementation classes. // call cb(er, data) where data is <= n in length. // for virtual (non-string, non-buffer) streams, "length" is somewhat // arbitrary, and perhaps not very meaningful. Readable.prototype._read = function (n) { this.emit('error', new Error('_read() is not implemented')); }; Readable.prototype.pipe = function (dest, pipeOpts) { var src = this; var state = this._readableState; switch (state.pipesCount) { case 0: state.pipes = dest; break; case 1: state.pipes = [state.pipes, dest]; break; default: state.pipes.push(dest); break; } state.pipesCount += 1; debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; var endFn = doEnd ? onend : unpipe; if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn); dest.on('unpipe', onunpipe); function onunpipe(readable, unpipeInfo) { debug('onunpipe'); if (readable === src) { if (unpipeInfo && unpipeInfo.hasUnpiped === false) { unpipeInfo.hasUnpiped = true; cleanup(); } } } function onend() { debug('onend'); dest.end(); } // when the dest drains, it reduces the awaitDrain counter // on the source. This would be more elegant with a .once() // handler in flow(), but adding and removing repeatedly is // too slow. var ondrain = pipeOnDrain(src); dest.on('drain', ondrain); var cleanedUp = false; function cleanup() { debug('cleanup'); // cleanup event handlers once the pipe is broken dest.removeListener('close', onclose); dest.removeListener('finish', onfinish); dest.removeListener('drain', ondrain); dest.removeListener('error', onerror); dest.removeListener('unpipe', onunpipe); src.removeListener('end', onend); src.removeListener('end', unpipe); src.removeListener('data', ondata); cleanedUp = true; // if the reader is waiting for a drain event from this // specific writer, then it would cause it to never start // flowing again. // So, if this is awaiting a drain, then we just call it now. // If we don't know, then assume that we are waiting for one. if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); } // If the user pushes more data while we're writing to dest then we'll end up // in ondata again. However, we only want to increase awaitDrain once because // dest will only emit one 'drain' event for the multiple writes. // => Introduce a guard on increasing awaitDrain. var increasedAwaitDrain = false; src.on('data', ondata); function ondata(chunk) { debug('ondata'); increasedAwaitDrain = false; var ret = dest.write(chunk); if (false === ret && !increasedAwaitDrain) { // If the user unpiped during `dest.write()`, it is possible // to get stuck in a permanently paused state if that write // also returned false. // => Check whether `dest` is still a piping destination. if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { debug('false write response, pause', src._readableState.awaitDrain); src._readableState.awaitDrain++; increasedAwaitDrain = true; } src.pause(); } } // if the dest has an error, then stop piping into it. // however, don't suppress the throwing behavior for this. function onerror(er) { debug('onerror', er); unpipe(); dest.removeListener('error', onerror); if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); } // Make sure our error handler is attached before userland ones. prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once. function onclose() { dest.removeListener('finish', onfinish); unpipe(); } dest.once('close', onclose); function onfinish() { debug('onfinish'); dest.removeListener('close', onclose); unpipe(); } dest.once('finish', onfinish); function unpipe() { debug('unpipe'); src.unpipe(dest); } // tell the dest that it's being piped to dest.emit('pipe', src); // start the flow if it hasn't been started already. if (!state.flowing) { debug('pipe resume'); src.resume(); } return dest; }; function pipeOnDrain(src) { return function () { var state = src._readableState; debug('pipeOnDrain', state.awaitDrain); if (state.awaitDrain) state.awaitDrain--; if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { state.flowing = true; flow(src); } }; } Readable.prototype.unpipe = function (dest) { var state = this._readableState; var unpipeInfo = { hasUnpiped: false }; // if we're not piping anywhere, then do nothing. if (state.pipesCount === 0) return this; // just one destination. most common case. if (state.pipesCount === 1) { // passed in one, but it's not the right one. if (dest && dest !== state.pipes) return this; if (!dest) dest = state.pipes; // got a match. state.pipes = null; state.pipesCount = 0; state.flowing = false; if (dest) dest.emit('unpipe', this, unpipeInfo); return this; } // slow case. multiple pipe destinations. if (!dest) { // remove all. var dests = state.pipes; var len = state.pipesCount; state.pipes = null; state.pipesCount = 0; state.flowing = false; for (var i = 0; i < len; i++) { dests[i].emit('unpipe', this, unpipeInfo); }return this; } // try to find the right one. var index = indexOf(state.pipes, dest); if (index === -1) return this; state.pipes.splice(index, 1); state.pipesCount -= 1; if (state.pipesCount === 1) state.pipes = state.pipes[0]; dest.emit('unpipe', this, unpipeInfo); return this; }; // set up data events if they are asked for // Ensure readable listeners eventually get something Readable.prototype.on = function (ev, fn) { var res = Stream.prototype.on.call(this, ev, fn); if (ev === 'data') { // Start flowing on next tick if stream isn't explicitly paused if (this._readableState.flowing !== false) this.resume(); } else if (ev === 'readable') { var state = this._readableState; if (!state.endEmitted && !state.readableListening) { state.readableListening = state.needReadable = true; state.emittedReadable = false; if (!state.reading) { pna.nextTick(nReadingNextTick, this); } else if (state.length) { emitReadable(this); } } } return res; }; Readable.prototype.addListener = Readable.prototype.on; function nReadingNextTick(self) { debug('readable nexttick read 0'); self.read(0); } // pause() and resume() are remnants of the legacy readable stream API // If the user uses them, then switch into old mode. Readable.prototype.resume = function () { var state = this._readableState; if (!state.flowing) { debug('resume'); state.flowing = true; resume(this, state); } return this; }; function resume(stream, state) { if (!state.resumeScheduled) { state.resumeScheduled = true; pna.nextTick(resume_, stream, state); } } function resume_(stream, state) { if (!state.reading) { debug('resume read 0'); stream.read(0); } state.resumeScheduled = false; state.awaitDrain = 0; stream.emit('resume'); flow(stream); if (state.flowing && !state.reading) stream.read(0); } Readable.prototype.pause = function () { debug('call pause flowing=%j', this._readableState.flowing); if (false !== this._readableState.flowing) { debug('pause'); this._readableState.flowing = false; this.emit('pause'); } return this; }; function flow(stream) { var state = stream._readableState; debug('flow', state.flowing); while (state.flowing && stream.read() !== null) {} } // wrap an old-style stream as the async data source. // This is *not* part of the readable stream interface. // It is an ugly unfortunate mess of history. Readable.prototype.wrap = function (stream) { var _this = this; var state = this._readableState; var paused = false; stream.on('end', function () { debug('wrapped end'); if (state.decoder && !state.ended) { var chunk = state.decoder.end(); if (chunk && chunk.length) _this.push(chunk); } _this.push(null); }); stream.on('data', function (chunk) { debug('wrapped data'); if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; var ret = _this.push(chunk); if (!ret) { paused = true; stream.pause(); } }); // proxy all the other methods. // important when wrapping filters and duplexes. for (var i in stream) { if (this[i] === undefined && typeof stream[i] === 'function') { this[i] = function (method) { return function () { return stream[method].apply(stream, arguments); }; }(i); } } // proxy certain important events. for (var n = 0; n < kProxyEvents.length; n++) { stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n])); } // when we try to consume some more bytes, simply unpause the // underlying stream. this._read = function (n) { debug('wrapped _read', n); if (paused) { paused = false; stream.resume(); } }; return this; }; Object.defineProperty(Readable.prototype, 'readableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function () { return this._readableState.highWaterMark; } }); // exposed for testing purposes only. Readable._fromList = fromList; // Pluck off n bytes from an array of buffers. // Length is the combined lengths of all the buffers in the list. // This function is designed to be inlinable, so please take care when making // changes to the function body. function fromList(n, state) { // nothing buffered if (state.length === 0) return null; var ret; if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { // read it all, truncate the list if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); state.buffer.clear(); } else { // read part of list ret = fromListPartial(n, state.buffer, state.decoder); } return ret; } // Extracts only enough buffered data to satisfy the amount requested. // This function is designed to be inlinable, so please take care when making // changes to the function body. function fromListPartial(n, list, hasStrings) { var ret; if (n < list.head.data.length) { // slice is the same for buffers and strings ret = list.head.data.slice(0, n); list.head.data = list.head.data.slice(n); } else if (n === list.head.data.length) { // first chunk is a perfect match ret = list.shift(); } else { // result spans more than one buffer ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); } return ret; } // Copies a specified amount of characters from the list of buffered data // chunks. // This function is designed to be inlinable, so please take care when making // changes to the function body. function copyFromBufferString(n, list) { var p = list.head; var c = 1; var ret = p.data; n -= ret.length; while (p = p.next) { var str = p.data; var nb = n > str.length ? str.length : n; if (nb === str.length) ret += str;else ret += str.slice(0, n); n -= nb; if (n === 0) { if (nb === str.length) { ++c; if (p.next) list.head = p.next;else list.head = list.tail = null; } else { list.head = p; p.data = str.slice(nb); } break; } ++c; } list.length -= c; return ret; } // Copies a specified amount of bytes from the list of buffered data chunks. // This function is designed to be inlinable, so please take care when making // changes to the function body. function copyFromBuffer(n, list) { var ret = Buffer.allocUnsafe(n); var p = list.head; var c = 1; p.data.copy(ret); n -= p.data.length; while (p = p.next) { var buf = p.data; var nb = n > buf.length ? buf.length : n; buf.copy(ret, ret.length - n, 0, nb); n -= nb; if (n === 0) { if (nb === buf.length) { ++c; if (p.next) list.head = p.next;else list.head = list.tail = null; } else { list.head = p; p.data = buf.slice(nb); } break; } ++c; } list.length -= c; return ret; } function endReadable(stream) { var state = stream._readableState; // If we get here before consuming all the bytes, then that is a // bug in node. Should never happen. if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); if (!state.endEmitted) { state.ended = true; pna.nextTick(endReadableNT, state, stream); } } function endReadableNT(state, stream) { // Check that we didn't get one last unshift. if (!state.endEmitted && state.length === 0) { state.endEmitted = true; stream.readable = false; stream.emit('end'); } } function indexOf(xs, x) { for (var i = 0, l = xs.length; i < l; i++) { if (xs[i] === x) return i; } return -1; } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./_stream_duplex":302,"./internal/streams/BufferList":307,"./internal/streams/destroy":308,"./internal/streams/stream":309,"_process":284,"core-util-is":186,"events":221,"inherits":262,"isarray":264,"process-nextick-args":283,"safe-buffer":310,"string_decoder/":333,"util":149}],305:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. // a transform stream is a readable/writable stream where you do // something with the data. Sometimes it's called a "filter", // but that's not a great name for it, since that implies a thing where // some bits pass through, and others are simply ignored. (That would // be a valid example of a transform, of course.) // // While the output is causally related to the input, it's not a // necessarily symmetric or synchronous transformation. For example, // a zlib stream might take multiple plain-text writes(), and then // emit a single compressed chunk some time in the future. // // Here's how this works: // // The Transform stream has all the aspects of the readable and writable // stream classes. When you write(chunk), that calls _write(chunk,cb) // internally, and returns false if there's a lot of pending writes // buffered up. When you call read(), that calls _read(n) until // there's enough pending readable data buffered up. // // In a transform stream, the written data is placed in a buffer. When // _read(n) is called, it transforms the queued up data, calling the // buffered _write cb's as it consumes chunks. If consuming a single // written chunk would result in multiple output chunks, then the first // outputted bit calls the readcb, and subsequent chunks just go into // the read buffer, and will cause it to emit 'readable' if necessary. // // This way, back-pressure is actually determined by the reading side, // since _read has to be called to start processing a new chunk. However, // a pathological inflate type of transform can cause excessive buffering // here. For example, imagine a stream where every byte of input is // interpreted as an integer from 0-255, and then results in that many // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in // 1kb of data being output. In this case, you could write a very small // amount of input, and end up with a very large amount of output. In // such a pathological inflating mechanism, there'd be no way to tell // the system to stop doing the transform. A single 4MB write could // cause the system to run out of memory. // // However, even in such a pathological case, only a single written chunk // would be consumed, and then the rest would wait (un-transformed) until // the results of the previous transformed chunk were consumed. 'use strict'; module.exports = Transform; var Duplex = require('./_stream_duplex'); /**/ var util = require('core-util-is'); util.inherits = require('inherits'); /**/ util.inherits(Transform, Duplex); function afterTransform(er, data) { var ts = this._transformState; ts.transforming = false; var cb = ts.writecb; if (!cb) { return this.emit('error', new Error('write callback called multiple times')); } ts.writechunk = null; ts.writecb = null; if (data != null) // single equals check for both `null` and `undefined` this.push(data); cb(er); var rs = this._readableState; rs.reading = false; if (rs.needReadable || rs.length < rs.highWaterMark) { this._read(rs.highWaterMark); } } function Transform(options) { if (!(this instanceof Transform)) return new Transform(options); Duplex.call(this, options); this._transformState = { afterTransform: afterTransform.bind(this), needTransform: false, transforming: false, writecb: null, writechunk: null, writeencoding: null }; // start out asking for a readable event once data is transformed. this._readableState.needReadable = true; // we have implemented the _read method, and done the other things // that Readable wants before the first _read call, so unset the // sync guard flag. this._readableState.sync = false; if (options) { if (typeof options.transform === 'function') this._transform = options.transform; if (typeof options.flush === 'function') this._flush = options.flush; } // When the writable side finishes, then flush out anything remaining. this.on('prefinish', prefinish); } function prefinish() { var _this = this; if (typeof this._flush === 'function') { this._flush(function (er, data) { done(_this, er, data); }); } else { done(this, null, null); } } Transform.prototype.push = function (chunk, encoding) { this._transformState.needTransform = false; return Duplex.prototype.push.call(this, chunk, encoding); }; // This is the part where you do stuff! // override this function in implementation classes. // 'chunk' is an input chunk. // // Call `push(newChunk)` to pass along transformed output // to the readable side. You may call 'push' zero or more times. // // Call `cb(err)` when you are done with this chunk. If you pass // an error, then that'll put the hurt on the whole operation. If you // never call cb(), then you'll never get another chunk. Transform.prototype._transform = function (chunk, encoding, cb) { throw new Error('_transform() is not implemented'); }; Transform.prototype._write = function (chunk, encoding, cb) { var ts = this._transformState; ts.writecb = cb; ts.writechunk = chunk; ts.writeencoding = encoding; if (!ts.transforming) { var rs = this._readableState; if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); } }; // Doesn't matter what the args are here. // _transform does all the work. // That we got here means that the readable side wants more data. Transform.prototype._read = function (n) { var ts = this._transformState; if (ts.writechunk !== null && ts.writecb && !ts.transforming) { ts.transforming = true; this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); } else { // mark that we need a transform, so that any data that comes in // will get processed, now that we've asked for it. ts.needTransform = true; } }; Transform.prototype._destroy = function (err, cb) { var _this2 = this; Duplex.prototype._destroy.call(this, err, function (err2) { cb(err2); _this2.emit('close'); }); }; function done(stream, er, data) { if (er) return stream.emit('error', er); if (data != null) // single equals check for both `null` and `undefined` stream.push(data); // if there's nothing in the write buffer, then that means // that nothing more will ever be provided if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0'); if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming'); return stream.push(null); } },{"./_stream_duplex":302,"core-util-is":186,"inherits":262}],306:[function(require,module,exports){ (function (process,global,setImmediate){ // Copyright Joyent, Inc. and other Node contributors. // // 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. // A bit simpler than readable streams. // Implement an async ._write(chunk, encoding, cb), and it'll handle all // the drain event emission and buffering. 'use strict'; /**/ var pna = require('process-nextick-args'); /**/ module.exports = Writable; /* */ function WriteReq(chunk, encoding, cb) { this.chunk = chunk; this.encoding = encoding; this.callback = cb; this.next = null; } // It seems a linked list but it is not // there will be only 2 of these for each stream function CorkedRequest(state) { var _this = this; this.next = null; this.entry = null; this.finish = function () { onCorkedFinish(_this, state); }; } /* */ /**/ var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick; /**/ /**/ var Duplex; /**/ Writable.WritableState = WritableState; /**/ var util = require('core-util-is'); util.inherits = require('inherits'); /**/ /**/ var internalUtil = { deprecate: require('util-deprecate') }; /**/ /**/ var Stream = require('./internal/streams/stream'); /**/ /**/ var Buffer = require('safe-buffer').Buffer; var OurUint8Array = global.Uint8Array || function () {}; function _uint8ArrayToBuffer(chunk) { return Buffer.from(chunk); } function _isUint8Array(obj) { return Buffer.isBuffer(obj) || obj instanceof OurUint8Array; } /**/ var destroyImpl = require('./internal/streams/destroy'); util.inherits(Writable, Stream); function nop() {} function WritableState(options, stream) { Duplex = Duplex || require('./_stream_duplex'); options = options || {}; // Duplex streams are both readable and writable, but share // the same options object. // However, some cases require setting options to different // values for the readable and the writable sides of the duplex stream. // These options can be provided separately as readableXXX and writableXXX. var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream // contains buffers or objects. this.objectMode = !!options.objectMode; if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false // Note: 0 is a valid value, means that we always return false if // the entire buffer is not flushed immediately on write() var hwm = options.highWaterMark; var writableHwm = options.writableHighWaterMark; var defaultHwm = this.objectMode ? 16 : 16 * 1024; if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints. this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called this.finalCalled = false; // drain event flag. this.needDrain = false; // at the start of calling end() this.ending = false; // when end() has been called, and returned this.ended = false; // when 'finish' is emitted this.finished = false; // has it been destroyed this.destroyed = false; // should we decode strings into buffers before passing to _write? // this is here so that some node-core streams can optimize string // handling at a lower level. var noDecode = options.decodeStrings === false; this.decodeStrings = !noDecode; // Crypto is kind of old and crusty. Historically, its default string // encoding is 'binary' so we have to make this configurable. // Everything else in the universe uses 'utf8', though. this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement // of how much we're waiting to get pushed to some underlying // socket or file. this.length = 0; // a flag to see when we're in the middle of a write. this.writing = false; // when true all writes will be buffered until .uncork() call this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately, // or on a later tick. We set this to true at first, because any // actions that shouldn't happen until "later" should generally also // not happen before the first write call. this.sync = true; // a flag to know if we're processing previously buffered items, which // may call the _write() callback in the same tick, so that we don't // end up in an overlapped onwrite situation. this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb) this.onwrite = function (er) { onwrite(stream, er); }; // the callback that the user supplies to write(chunk,encoding,cb) this.writecb = null; // the amount that is being written when _write is called. this.writelen = 0; this.bufferedRequest = null; this.lastBufferedRequest = null; // number of pending user-supplied write callbacks // this must be 0 before 'finish' can be emitted this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs // This is relevant for synchronous Transform streams this.prefinished = false; // True if the error was already emitted and should not be thrown again this.errorEmitted = false; // count buffered requests this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always // one allocated and free to use, and we maintain at most two this.corkedRequestsFree = new CorkedRequest(this); } WritableState.prototype.getBuffer = function getBuffer() { var current = this.bufferedRequest; var out = []; while (current) { out.push(current); current = current.next; } return out; }; (function () { try { Object.defineProperty(WritableState.prototype, 'buffer', { get: internalUtil.deprecate(function () { return this.getBuffer(); }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003') }); } catch (_) {} })(); // Test _writableState for inheritance to account for Duplex streams, // whose prototype chain only points to Readable. var realHasInstance; if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { realHasInstance = Function.prototype[Symbol.hasInstance]; Object.defineProperty(Writable, Symbol.hasInstance, { value: function (object) { if (realHasInstance.call(this, object)) return true; if (this !== Writable) return false; return object && object._writableState instanceof WritableState; } }); } else { realHasInstance = function (object) { return object instanceof this; }; } function Writable(options) { Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too. // `realHasInstance` is necessary because using plain `instanceof` // would return false, as no `_writableState` property is attached. // Trying to use the custom `instanceof` for Writable here will also break the // Node.js LazyTransform implementation, which has a non-trivial getter for // `_writableState` that would lead to infinite recursion. if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { return new Writable(options); } this._writableState = new WritableState(options, this); // legacy. this.writable = true; if (options) { if (typeof options.write === 'function') this._write = options.write; if (typeof options.writev === 'function') this._writev = options.writev; if (typeof options.destroy === 'function') this._destroy = options.destroy; if (typeof options.final === 'function') this._final = options.final; } Stream.call(this); } // Otherwise people can pipe Writable streams, which is just wrong. Writable.prototype.pipe = function () { this.emit('error', new Error('Cannot pipe, not readable')); }; function writeAfterEnd(stream, cb) { var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb stream.emit('error', er); pna.nextTick(cb, er); } // Checks that a user-supplied chunk is valid, especially for the particular // mode the stream is in. Currently this means that `null` is never accepted // and undefined/non-string values are only allowed in object mode. function validChunk(stream, state, chunk, cb) { var valid = true; var er = false; if (chunk === null) { er = new TypeError('May not write null values to stream'); } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { er = new TypeError('Invalid non-string/buffer chunk'); } if (er) { stream.emit('error', er); pna.nextTick(cb, er); valid = false; } return valid; } Writable.prototype.write = function (chunk, encoding, cb) { var state = this._writableState; var ret = false; var isBuf = !state.objectMode && _isUint8Array(chunk); if (isBuf && !Buffer.isBuffer(chunk)) { chunk = _uint8ArrayToBuffer(chunk); } if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; if (typeof cb !== 'function') cb = nop; if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { state.pendingcb++; ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); } return ret; }; Writable.prototype.cork = function () { var state = this._writableState; state.corked++; }; Writable.prototype.uncork = function () { var state = this._writableState; if (state.corked) { state.corked--; if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); } }; Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { // node::ParseEncoding() requires lower case. if (typeof encoding === 'string') encoding = encoding.toLowerCase(); if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); this._writableState.defaultEncoding = encoding; return this; }; function decodeChunk(state, chunk, encoding) { if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { chunk = Buffer.from(chunk, encoding); } return chunk; } Object.defineProperty(Writable.prototype, 'writableHighWaterMark', { // making it explicit this property is not enumerable // because otherwise some prototype manipulation in // userland will fail enumerable: false, get: function () { return this._writableState.highWaterMark; } }); // if we're already writing something, then just put this // in the queue, and wait our turn. Otherwise, call _write // If we return false, then we need a drain event, so set that flag. function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { if (!isBuf) { var newChunk = decodeChunk(state, chunk, encoding); if (chunk !== newChunk) { isBuf = true; encoding = 'buffer'; chunk = newChunk; } } var len = state.objectMode ? 1 : chunk.length; state.length += len; var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false. if (!ret) state.needDrain = true; if (state.writing || state.corked) { var last = state.lastBufferedRequest; state.lastBufferedRequest = { chunk: chunk, encoding: encoding, isBuf: isBuf, callback: cb, next: null }; if (last) { last.next = state.lastBufferedRequest; } else { state.bufferedRequest = state.lastBufferedRequest; } state.bufferedRequestCount += 1; } else { doWrite(stream, state, false, len, chunk, encoding, cb); } return ret; } function doWrite(stream, state, writev, len, chunk, encoding, cb) { state.writelen = len; state.writecb = cb; state.writing = true; state.sync = true; if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); state.sync = false; } function onwriteError(stream, state, sync, er, cb) { --state.pendingcb; if (sync) { // defer the callback if we are being called synchronously // to avoid piling up things on the stack pna.nextTick(cb, er); // this can emit finish, and it will always happen // after error pna.nextTick(finishMaybe, stream, state); stream._writableState.errorEmitted = true; stream.emit('error', er); } else { // the caller expect this to happen before if // it is async cb(er); stream._writableState.errorEmitted = true; stream.emit('error', er); // this can emit finish, but finish must // always follow error finishMaybe(stream, state); } } function onwriteStateUpdate(state) { state.writing = false; state.writecb = null; state.length -= state.writelen; state.writelen = 0; } function onwrite(stream, er) { var state = stream._writableState; var sync = state.sync; var cb = state.writecb; onwriteStateUpdate(state); if (er) onwriteError(stream, state, sync, er, cb);else { // Check if we're actually ready to finish, but don't emit yet var finished = needFinish(state); if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { clearBuffer(stream, state); } if (sync) { /**/ asyncWrite(afterWrite, stream, state, finished, cb); /**/ } else { afterWrite(stream, state, finished, cb); } } } function afterWrite(stream, state, finished, cb) { if (!finished) onwriteDrain(stream, state); state.pendingcb--; cb(); finishMaybe(stream, state); } // Must force callback to be called on nextTick, so that we don't // emit 'drain' before the write() consumer gets the 'false' return // value, and has a chance to attach a 'drain' listener. function onwriteDrain(stream, state) { if (state.length === 0 && state.needDrain) { state.needDrain = false; stream.emit('drain'); } } // if there's something in the buffer waiting, then process it function clearBuffer(stream, state) { state.bufferProcessing = true; var entry = state.bufferedRequest; if (stream._writev && entry && entry.next) { // Fast case, write everything using _writev() var l = state.bufferedRequestCount; var buffer = new Array(l); var holder = state.corkedRequestsFree; holder.entry = entry; var count = 0; var allBuffers = true; while (entry) { buffer[count] = entry; if (!entry.isBuf) allBuffers = false; entry = entry.next; count += 1; } buffer.allBuffers = allBuffers; doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time // as the hot path ends with doWrite state.pendingcb++; state.lastBufferedRequest = null; if (holder.next) { state.corkedRequestsFree = holder.next; holder.next = null; } else { state.corkedRequestsFree = new CorkedRequest(state); } state.bufferedRequestCount = 0; } else { // Slow case, write chunks one-by-one while (entry) { var chunk = entry.chunk; var encoding = entry.encoding; var cb = entry.callback; var len = state.objectMode ? 1 : chunk.length; doWrite(stream, state, false, len, chunk, encoding, cb); entry = entry.next; state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then // it means that we need to wait until it does. // also, that means that the chunk and cb are currently // being processed, so move the buffer counter past them. if (state.writing) { break; } } if (entry === null) state.lastBufferedRequest = null; } state.bufferedRequest = entry; state.bufferProcessing = false; } Writable.prototype._write = function (chunk, encoding, cb) { cb(new Error('_write() is not implemented')); }; Writable.prototype._writev = null; Writable.prototype.end = function (chunk, encoding, cb) { var state = this._writableState; if (typeof chunk === 'function') { cb = chunk; chunk = null; encoding = null; } else if (typeof encoding === 'function') { cb = encoding; encoding = null; } if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks if (state.corked) { state.corked = 1; this.uncork(); } // ignore unnecessary end() calls. if (!state.ending && !state.finished) endWritable(this, state, cb); }; function needFinish(state) { return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; } function callFinal(stream, state) { stream._final(function (err) { state.pendingcb--; if (err) { stream.emit('error', err); } state.prefinished = true; stream.emit('prefinish'); finishMaybe(stream, state); }); } function prefinish(stream, state) { if (!state.prefinished && !state.finalCalled) { if (typeof stream._final === 'function') { state.pendingcb++; state.finalCalled = true; pna.nextTick(callFinal, stream, state); } else { state.prefinished = true; stream.emit('prefinish'); } } } function finishMaybe(stream, state) { var need = needFinish(state); if (need) { prefinish(stream, state); if (state.pendingcb === 0) { state.finished = true; stream.emit('finish'); } } return need; } function endWritable(stream, state, cb) { state.ending = true; finishMaybe(stream, state); if (cb) { if (state.finished) pna.nextTick(cb);else stream.once('finish', cb); } state.ended = true; stream.writable = false; } function onCorkedFinish(corkReq, state, err) { var entry = corkReq.entry; corkReq.entry = null; while (entry) { var cb = entry.callback; state.pendingcb--; cb(err); entry = entry.next; } if (state.corkedRequestsFree) { state.corkedRequestsFree.next = corkReq; } else { state.corkedRequestsFree = corkReq; } } Object.defineProperty(Writable.prototype, 'destroyed', { get: function () { if (this._writableState === undefined) { return false; } return this._writableState.destroyed; }, set: function (value) { // we ignore the value if the stream // has not been initialized yet if (!this._writableState) { return; } // backward compatibility, the user is explicitly // managing destroyed this._writableState.destroyed = value; } }); Writable.prototype.destroy = destroyImpl.destroy; Writable.prototype._undestroy = destroyImpl.undestroy; Writable.prototype._destroy = function (err, cb) { this.end(); cb(err); }; }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("timers").setImmediate) },{"./_stream_duplex":302,"./internal/streams/destroy":308,"./internal/streams/stream":309,"_process":284,"core-util-is":186,"inherits":262,"process-nextick-args":283,"safe-buffer":310,"timers":335,"util-deprecate":340}],307:[function(require,module,exports){ 'use strict'; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Buffer = require('safe-buffer').Buffer; var util = require('util'); function copyBuffer(src, target, offset) { src.copy(target, offset); } module.exports = function () { function BufferList() { _classCallCheck(this, BufferList); this.head = null; this.tail = null; this.length = 0; } BufferList.prototype.push = function push(v) { var entry = { data: v, next: null }; if (this.length > 0) this.tail.next = entry;else this.head = entry; this.tail = entry; ++this.length; }; BufferList.prototype.unshift = function unshift(v) { var entry = { data: v, next: this.head }; if (this.length === 0) this.tail = entry; this.head = entry; ++this.length; }; BufferList.prototype.shift = function shift() { if (this.length === 0) return; var ret = this.head.data; if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; --this.length; return ret; }; BufferList.prototype.clear = function clear() { this.head = this.tail = null; this.length = 0; }; BufferList.prototype.join = function join(s) { if (this.length === 0) return ''; var p = this.head; var ret = '' + p.data; while (p = p.next) { ret += s + p.data; }return ret; }; BufferList.prototype.concat = function concat(n) { if (this.length === 0) return Buffer.alloc(0); if (this.length === 1) return this.head.data; var ret = Buffer.allocUnsafe(n >>> 0); var p = this.head; var i = 0; while (p) { copyBuffer(p.data, ret, i); i += p.data.length; p = p.next; } return ret; }; return BufferList; }(); if (util && util.inspect && util.inspect.custom) { module.exports.prototype[util.inspect.custom] = function () { var obj = util.inspect({ length: this.length }); return this.constructor.name + ' ' + obj; }; } },{"safe-buffer":310,"util":149}],308:[function(require,module,exports){ 'use strict'; /**/ var pna = require('process-nextick-args'); /**/ // undocumented cb() API, needed for core, not for public API function destroy(err, cb) { var _this = this; var readableDestroyed = this._readableState && this._readableState.destroyed; var writableDestroyed = this._writableState && this._writableState.destroyed; if (readableDestroyed || writableDestroyed) { if (cb) { cb(err); } else if (err && (!this._writableState || !this._writableState.errorEmitted)) { pna.nextTick(emitErrorNT, this, err); } return this; } // we set destroyed to true before firing error callbacks in order // to make it re-entrance safe in case destroy() is called within callbacks if (this._readableState) { this._readableState.destroyed = true; } // if this is a duplex stream mark the writable part as destroyed as well if (this._writableState) { this._writableState.destroyed = true; } this._destroy(err || null, function (err) { if (!cb && err) { pna.nextTick(emitErrorNT, _this, err); if (_this._writableState) { _this._writableState.errorEmitted = true; } } else if (cb) { cb(err); } }); return this; } function undestroy() { if (this._readableState) { this._readableState.destroyed = false; this._readableState.reading = false; this._readableState.ended = false; this._readableState.endEmitted = false; } if (this._writableState) { this._writableState.destroyed = false; this._writableState.ended = false; this._writableState.ending = false; this._writableState.finished = false; this._writableState.errorEmitted = false; } } function emitErrorNT(self, err) { self.emit('error', err); } module.exports = { destroy: destroy, undestroy: undestroy }; },{"process-nextick-args":283}],309:[function(require,module,exports){ module.exports = require('events').EventEmitter; },{"events":221}],310:[function(require,module,exports){ arguments[4][178][0].apply(exports,arguments) },{"buffer":182,"dup":178}],311:[function(require,module,exports){ module.exports = require('./readable').PassThrough },{"./readable":312}],312:[function(require,module,exports){ exports = module.exports = require('./lib/_stream_readable.js'); exports.Stream = exports; exports.Readable = exports; exports.Writable = require('./lib/_stream_writable.js'); exports.Duplex = require('./lib/_stream_duplex.js'); exports.Transform = require('./lib/_stream_transform.js'); exports.PassThrough = require('./lib/_stream_passthrough.js'); },{"./lib/_stream_duplex.js":302,"./lib/_stream_passthrough.js":303,"./lib/_stream_readable.js":304,"./lib/_stream_transform.js":305,"./lib/_stream_writable.js":306}],313:[function(require,module,exports){ module.exports = require('./readable').Transform },{"./readable":312}],314:[function(require,module,exports){ module.exports = require('./lib/_stream_writable.js'); },{"./lib/_stream_writable.js":306}],315:[function(require,module,exports){ 'use strict'; var proj4 = require('proj4').hasOwnProperty('default') ? require('proj4').default : require('proj4'); // Checks if `list` looks like a `[x, y]`. function isXY(list) { return list.length >= 2 && typeof list[0] === 'number' && typeof list[1] === 'number'; } function traverseCoords(coordinates, callback) { if (isXY(coordinates)) return callback(coordinates); return coordinates.map(function(coord){return traverseCoords(coord, callback);}); } // Simplistic shallow clone that will work for a normal GeoJSON object. function clone(obj) { if (null == obj || 'object' !== typeof obj) return obj; var copy = obj.constructor(); for (var attr in obj) { if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr]; } return copy; } function traverseGeoJson(geometryCb, nodeCb, geojson) { if (geojson == null) return geojson; var r = clone(geojson); var self = traverseGeoJson.bind(this, geometryCb, nodeCb); switch (geojson.type) { case 'Feature': r.geometry = self(geojson.geometry); break; case 'FeatureCollection': r.features = r.features.map(self); break; case 'GeometryCollection': r.geometries = r.geometries.map(self); break; default: geometryCb(r); break; } if (nodeCb) nodeCb(r); return r; } function detectCrs(geojson, projs) { var crsInfo = geojson.crs, crs; if (crsInfo === undefined) { throw new Error('Unable to detect CRS, GeoJSON has no "crs" property.'); } if (crsInfo.type === 'name') { crs = projs[crsInfo.properties.name]; } else if (crsInfo.type === 'EPSG') { crs = projs['EPSG:' + crsInfo.properties.code]; } if (!crs) { throw new Error('CRS defined in crs section could not be identified: ' + JSON.stringify(crsInfo)); } return crs; } function determineCrs(crs, projs) { if (typeof crs === 'string' || crs instanceof String) { return projs[crs] || proj4.Proj(crs); } return crs; } function calcBbox(geojson) { var min = [Number.MAX_VALUE, Number.MAX_VALUE], max = [-Number.MAX_VALUE, -Number.MAX_VALUE]; traverseGeoJson(function(_gj) { traverseCoords(_gj.coordinates, function(xy) { min[0] = Math.min(min[0], xy[0]); min[1] = Math.min(min[1], xy[1]); max[0] = Math.max(max[0], xy[0]); max[1] = Math.max(max[1], xy[1]); }); }, null, geojson); return [min[0], min[1], max[0], max[1]]; } function reproject(geojson, from, to, projs) { projs = projs || {}; if (!from) { from = detectCrs(geojson, projs); } else { from = determineCrs(from, projs); } to = determineCrs(to, projs); var transform = proj4(from, to).forward.bind(transform); var transformGeometryCoords = function(gj) { // No easy way to put correct CRS info into the GeoJSON, // and definitely wrong to keep the old, so delete it. if (gj.crs) { delete gj.crs; } gj.coordinates = traverseCoords(gj.coordinates, transform); } var transformBbox = function(gj) { if (gj.bbox) { gj.bbox = calcBbox(gj); } } return traverseGeoJson(transformGeometryCoords, transformBbox, geojson); } module.exports = { detectCrs: detectCrs, reproject: reproject, reverse: function(geojson) { return traverseGeoJson(function(gj) { gj.coordinates = traverseCoords(gj.coordinates, function(xy) { return [ xy[1], xy[0] ]; }); }, null, geojson); }, toWgs84: function(geojson, from, projs) { return reproject(geojson, from, proj4.WGS84, projs); } }; },{"proj4":316}],316:[function(require,module,exports){ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global.proj4 = factory()); }(this, (function () { 'use strict'; var globals = function(defs) { defs('EPSG:4326', "+title=WGS 84 (long/lat) +proj=longlat +ellps=WGS84 +datum=WGS84 +units=degrees"); defs('EPSG:4269', "+title=NAD83 (long/lat) +proj=longlat +a=6378137.0 +b=6356752.31414036 +ellps=GRS80 +datum=NAD83 +units=degrees"); defs('EPSG:3857', "+title=WGS 84 / Pseudo-Mercator +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"); defs.WGS84 = defs['EPSG:4326']; defs['EPSG:3785'] = defs['EPSG:3857']; // maintain backward compat, official code is 3857 defs.GOOGLE = defs['EPSG:3857']; defs['EPSG:900913'] = defs['EPSG:3857']; defs['EPSG:102113'] = defs['EPSG:3857']; }; var PJD_3PARAM = 1; var PJD_7PARAM = 2; var PJD_WGS84 = 4; // WGS84 or equivalent var PJD_NODATUM = 5; // WGS84 or equivalent var SEC_TO_RAD = 4.84813681109535993589914102357e-6; var HALF_PI = Math.PI/2; // ellipoid pj_set_ell.c var SIXTH = 0.1666666666666666667; /* 1/6 */ var RA4 = 0.04722222222222222222; /* 17/360 */ var RA6 = 0.02215608465608465608; var EPSLN = 1.0e-10; // you'd think you could use Number.EPSILON above but that makes // Mollweide get into an infinate loop. var D2R = 0.01745329251994329577; var R2D = 57.29577951308232088; var FORTPI = Math.PI/4; var TWO_PI = Math.PI * 2; // SPI is slightly greater than Math.PI, so values that exceed the -180..180 // degree range by a tiny amount don't get wrapped. This prevents points that // have drifted from their original location along the 180th meridian (due to // floating point error) from changing their sign. var SPI = 3.14159265359; var exports$1 = {}; exports$1.greenwich = 0.0; //"0dE", exports$1.lisbon = -9.131906111111; //"9d07'54.862\"W", exports$1.paris = 2.337229166667; //"2d20'14.025\"E", exports$1.bogota = -74.080916666667; //"74d04'51.3\"W", exports$1.madrid = -3.687938888889; //"3d41'16.58\"W", exports$1.rome = 12.452333333333; //"12d27'8.4\"E", exports$1.bern = 7.439583333333; //"7d26'22.5\"E", exports$1.jakarta = 106.807719444444; //"106d48'27.79\"E", exports$1.ferro = -17.666666666667; //"17d40'W", exports$1.brussels = 4.367975; //"4d22'4.71\"E", exports$1.stockholm = 18.058277777778; //"18d3'29.8\"E", exports$1.athens = 23.7163375; //"23d42'58.815\"E", exports$1.oslo = 10.722916666667; //"10d43'22.5\"E" var units = { ft: {to_meter: 0.3048}, 'us-ft': {to_meter: 1200 / 3937} }; var ignoredChar = /[\s_\-\/\(\)]/g; function match(obj, key) { if (obj[key]) { return obj[key]; } var keys = Object.keys(obj); var lkey = key.toLowerCase().replace(ignoredChar, ''); var i = -1; var testkey, processedKey; while (++i < keys.length) { testkey = keys[i]; processedKey = testkey.toLowerCase().replace(ignoredChar, ''); if (processedKey === lkey) { return obj[testkey]; } } } var parseProj = function(defData) { var self = {}; var paramObj = defData.split('+').map(function(v) { return v.trim(); }).filter(function(a) { return a; }).reduce(function(p, a) { var split = a.split('='); split.push(true); p[split[0].toLowerCase()] = split[1]; return p; }, {}); var paramName, paramVal, paramOutname; var params = { proj: 'projName', datum: 'datumCode', rf: function(v) { self.rf = parseFloat(v); }, lat_0: function(v) { self.lat0 = v * D2R; }, lat_1: function(v) { self.lat1 = v * D2R; }, lat_2: function(v) { self.lat2 = v * D2R; }, lat_ts: function(v) { self.lat_ts = v * D2R; }, lon_0: function(v) { self.long0 = v * D2R; }, lon_1: function(v) { self.long1 = v * D2R; }, lon_2: function(v) { self.long2 = v * D2R; }, alpha: function(v) { self.alpha = parseFloat(v) * D2R; }, lonc: function(v) { self.longc = v * D2R; }, x_0: function(v) { self.x0 = parseFloat(v); }, y_0: function(v) { self.y0 = parseFloat(v); }, k_0: function(v) { self.k0 = parseFloat(v); }, k: function(v) { self.k0 = parseFloat(v); }, a: function(v) { self.a = parseFloat(v); }, b: function(v) { self.b = parseFloat(v); }, r_a: function() { self.R_A = true; }, zone: function(v) { self.zone = parseInt(v, 10); }, south: function() { self.utmSouth = true; }, towgs84: function(v) { self.datum_params = v.split(",").map(function(a) { return parseFloat(a); }); }, to_meter: function(v) { self.to_meter = parseFloat(v); }, units: function(v) { self.units = v; var unit = match(units, v); if (unit) { self.to_meter = unit.to_meter; } }, from_greenwich: function(v) { self.from_greenwich = v * D2R; }, pm: function(v) { var pm = match(exports$1, v); self.from_greenwich = (pm ? pm : parseFloat(v)) * D2R; }, nadgrids: function(v) { if (v === '@null') { self.datumCode = 'none'; } else { self.nadgrids = v; } }, axis: function(v) { var legalAxis = "ewnsud"; if (v.length === 3 && legalAxis.indexOf(v.substr(0, 1)) !== -1 && legalAxis.indexOf(v.substr(1, 1)) !== -1 && legalAxis.indexOf(v.substr(2, 1)) !== -1) { self.axis = v; } } }; for (paramName in paramObj) { paramVal = paramObj[paramName]; if (paramName in params) { paramOutname = params[paramName]; if (typeof paramOutname === 'function') { paramOutname(paramVal); } else { self[paramOutname] = paramVal; } } else { self[paramName] = paramVal; } } if(typeof self.datumCode === 'string' && self.datumCode !== "WGS84"){ self.datumCode = self.datumCode.toLowerCase(); } return self; }; var NEUTRAL = 1; var KEYWORD = 2; var NUMBER = 3; var QUOTED = 4; var AFTERQUOTE = 5; var ENDED = -1; var whitespace = /\s/; var latin = /[A-Za-z]/; var keyword = /[A-Za-z84]/; var endThings = /[,\]]/; var digets = /[\d\.E\-\+]/; // const ignoredChar = /[\s_\-\/\(\)]/g; function Parser(text) { if (typeof text !== 'string') { throw new Error('not a string'); } this.text = text.trim(); this.level = 0; this.place = 0; this.root = null; this.stack = []; this.currentObject = null; this.state = NEUTRAL; } Parser.prototype.readCharicter = function() { var char = this.text[this.place++]; if (this.state !== QUOTED) { while (whitespace.test(char)) { if (this.place >= this.text.length) { return; } char = this.text[this.place++]; } } switch (this.state) { case NEUTRAL: return this.neutral(char); case KEYWORD: return this.keyword(char) case QUOTED: return this.quoted(char); case AFTERQUOTE: return this.afterquote(char); case NUMBER: return this.number(char); case ENDED: return; } }; Parser.prototype.afterquote = function(char) { if (char === '"') { this.word += '"'; this.state = QUOTED; return; } if (endThings.test(char)) { this.word = this.word.trim(); this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in afterquote yet, index ' + this.place); }; Parser.prototype.afterItem = function(char) { if (char === ',') { if (this.word !== null) { this.currentObject.push(this.word); } this.word = null; this.state = NEUTRAL; return; } if (char === ']') { this.level--; if (this.word !== null) { this.currentObject.push(this.word); this.word = null; } this.state = NEUTRAL; this.currentObject = this.stack.pop(); if (!this.currentObject) { this.state = ENDED; } return; } }; Parser.prototype.number = function(char) { if (digets.test(char)) { this.word += char; return; } if (endThings.test(char)) { this.word = parseFloat(this.word); this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in number yet, index ' + this.place); }; Parser.prototype.quoted = function(char) { if (char === '"') { this.state = AFTERQUOTE; return; } this.word += char; return; }; Parser.prototype.keyword = function(char) { if (keyword.test(char)) { this.word += char; return; } if (char === '[') { var newObjects = []; newObjects.push(this.word); this.level++; if (this.root === null) { this.root = newObjects; } else { this.currentObject.push(newObjects); } this.stack.push(this.currentObject); this.currentObject = newObjects; this.state = NEUTRAL; return; } if (endThings.test(char)) { this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in keyword yet, index ' + this.place); }; Parser.prototype.neutral = function(char) { if (latin.test(char)) { this.word = char; this.state = KEYWORD; return; } if (char === '"') { this.word = ''; this.state = QUOTED; return; } if (digets.test(char)) { this.word = char; this.state = NUMBER; return; } if (endThings.test(char)) { this.afterItem(char); return; } throw new Error('havn\'t handled "' +char + '" in neutral yet, index ' + this.place); }; Parser.prototype.output = function() { while (this.place < this.text.length) { this.readCharicter(); } if (this.state === ENDED) { return this.root; } throw new Error('unable to parse string "' +this.text + '". State is ' + this.state); }; function parseString(txt) { var parser = new Parser(txt); return parser.output(); } function mapit(obj, key, value) { if (Array.isArray(key)) { value.unshift(key); key = null; } var thing = key ? {} : obj; var out = value.reduce(function(newObj, item) { sExpr(item, newObj); return newObj }, thing); if (key) { obj[key] = out; } } function sExpr(v, obj) { if (!Array.isArray(v)) { obj[v] = true; return; } var key = v.shift(); if (key === 'PARAMETER') { key = v.shift(); } if (v.length === 1) { if (Array.isArray(v[0])) { obj[key] = {}; sExpr(v[0], obj[key]); return; } obj[key] = v[0]; return; } if (!v.length) { obj[key] = true; return; } if (key === 'TOWGS84') { obj[key] = v; return; } if (!Array.isArray(key)) { obj[key] = {}; } var i; switch (key) { case 'UNIT': case 'PRIMEM': case 'VERT_DATUM': obj[key] = { name: v[0].toLowerCase(), convert: v[1] }; if (v.length === 3) { sExpr(v[2], obj[key]); } return; case 'SPHEROID': case 'ELLIPSOID': obj[key] = { name: v[0], a: v[1], rf: v[2] }; if (v.length === 4) { sExpr(v[3], obj[key]); } return; case 'PROJECTEDCRS': case 'PROJCRS': case 'GEOGCS': case 'GEOCCS': case 'PROJCS': case 'LOCAL_CS': case 'GEODCRS': case 'GEODETICCRS': case 'GEODETICDATUM': case 'EDATUM': case 'ENGINEERINGDATUM': case 'VERT_CS': case 'VERTCRS': case 'VERTICALCRS': case 'COMPD_CS': case 'COMPOUNDCRS': case 'ENGINEERINGCRS': case 'ENGCRS': case 'FITTED_CS': case 'LOCAL_DATUM': case 'DATUM': v[0] = ['name', v[0]]; mapit(obj, key, v); return; default: i = -1; while (++i < v.length) { if (!Array.isArray(v[i])) { return sExpr(v, obj[key]); } } return mapit(obj, key, v); } } var D2R$1 = 0.01745329251994329577; function rename(obj, params) { var outName = params[0]; var inName = params[1]; if (!(outName in obj) && (inName in obj)) { obj[outName] = obj[inName]; if (params.length === 3) { obj[outName] = params[2](obj[outName]); } } } function d2r(input) { return input * D2R$1; } function cleanWKT(wkt) { if (wkt.type === 'GEOGCS') { wkt.projName = 'longlat'; } else if (wkt.type === 'LOCAL_CS') { wkt.projName = 'identity'; wkt.local = true; } else { if (typeof wkt.PROJECTION === 'object') { wkt.projName = Object.keys(wkt.PROJECTION)[0]; } else { wkt.projName = wkt.PROJECTION; } } if (wkt.UNIT) { wkt.units = wkt.UNIT.name.toLowerCase(); if (wkt.units === 'metre') { wkt.units = 'meter'; } if (wkt.UNIT.convert) { if (wkt.type === 'GEOGCS') { if (wkt.DATUM && wkt.DATUM.SPHEROID) { wkt.to_meter = wkt.UNIT.convert*wkt.DATUM.SPHEROID.a; } } else { wkt.to_meter = wkt.UNIT.convert, 10; } } } var geogcs = wkt.GEOGCS; if (wkt.type === 'GEOGCS') { geogcs = wkt; } if (geogcs) { //if(wkt.GEOGCS.PRIMEM&&wkt.GEOGCS.PRIMEM.convert){ // wkt.from_greenwich=wkt.GEOGCS.PRIMEM.convert*D2R; //} if (geogcs.DATUM) { wkt.datumCode = geogcs.DATUM.name.toLowerCase(); } else { wkt.datumCode = geogcs.name.toLowerCase(); } if (wkt.datumCode.slice(0, 2) === 'd_') { wkt.datumCode = wkt.datumCode.slice(2); } if (wkt.datumCode === 'new_zealand_geodetic_datum_1949' || wkt.datumCode === 'new_zealand_1949') { wkt.datumCode = 'nzgd49'; } if (wkt.datumCode === 'wgs_1984') { if (wkt.PROJECTION === 'Mercator_Auxiliary_Sphere') { wkt.sphere = true; } wkt.datumCode = 'wgs84'; } if (wkt.datumCode.slice(-6) === '_ferro') { wkt.datumCode = wkt.datumCode.slice(0, - 6); } if (wkt.datumCode.slice(-8) === '_jakarta') { wkt.datumCode = wkt.datumCode.slice(0, - 8); } if (~wkt.datumCode.indexOf('belge')) { wkt.datumCode = 'rnb72'; } if (geogcs.DATUM && geogcs.DATUM.SPHEROID) { wkt.ellps = geogcs.DATUM.SPHEROID.name.replace('_19', '').replace(/[Cc]larke\_18/, 'clrk'); if (wkt.ellps.toLowerCase().slice(0, 13) === 'international') { wkt.ellps = 'intl'; } wkt.a = geogcs.DATUM.SPHEROID.a; wkt.rf = parseFloat(geogcs.DATUM.SPHEROID.rf, 10); } if (geogcs.DATUM && geogcs.DATUM.TOWGS84) { wkt.datum_params = geogcs.DATUM.TOWGS84; } if (~wkt.datumCode.indexOf('osgb_1936')) { wkt.datumCode = 'osgb36'; } if (~wkt.datumCode.indexOf('osni_1952')) { wkt.datumCode = 'osni52'; } if (~wkt.datumCode.indexOf('tm65') || ~wkt.datumCode.indexOf('geodetic_datum_of_1965')) { wkt.datumCode = 'ire65'; } if (wkt.datumCode === 'ch1903+') { wkt.datumCode = 'ch1903'; } if (~wkt.datumCode.indexOf('israel')) { wkt.datumCode = 'isr93'; } } if (wkt.b && !isFinite(wkt.b)) { wkt.b = wkt.a; } function toMeter(input) { var ratio = wkt.to_meter || 1; return input * ratio; } var renamer = function(a) { return rename(wkt, a); }; var list = [ ['standard_parallel_1', 'Standard_Parallel_1'], ['standard_parallel_2', 'Standard_Parallel_2'], ['false_easting', 'False_Easting'], ['false_northing', 'False_Northing'], ['central_meridian', 'Central_Meridian'], ['latitude_of_origin', 'Latitude_Of_Origin'], ['latitude_of_origin', 'Central_Parallel'], ['scale_factor', 'Scale_Factor'], ['k0', 'scale_factor'], ['latitude_of_center', 'Latitude_Of_Center'], ['latitude_of_center', 'Latitude_of_center'], ['lat0', 'latitude_of_center', d2r], ['longitude_of_center', 'Longitude_Of_Center'], ['longitude_of_center', 'Longitude_of_center'], ['longc', 'longitude_of_center', d2r], ['x0', 'false_easting', toMeter], ['y0', 'false_northing', toMeter], ['long0', 'central_meridian', d2r], ['lat0', 'latitude_of_origin', d2r], ['lat0', 'standard_parallel_1', d2r], ['lat1', 'standard_parallel_1', d2r], ['lat2', 'standard_parallel_2', d2r], ['azimuth', 'Azimuth'], ['alpha', 'azimuth', d2r], ['srsCode', 'name'] ]; list.forEach(renamer); if (!wkt.long0 && wkt.longc && (wkt.projName === 'Albers_Conic_Equal_Area' || wkt.projName === 'Lambert_Azimuthal_Equal_Area')) { wkt.long0 = wkt.longc; } if (!wkt.lat_ts && wkt.lat1 && (wkt.projName === 'Stereographic_South_Pole' || wkt.projName === 'Polar Stereographic (variant B)')) { wkt.lat0 = d2r(wkt.lat1 > 0 ? 90 : -90); wkt.lat_ts = wkt.lat1; } } var wkt = function(wkt) { var lisp = parseString(wkt); var type = lisp.shift(); var name = lisp.shift(); lisp.unshift(['name', name]); lisp.unshift(['type', type]); var obj = {}; sExpr(lisp, obj); cleanWKT(obj); return obj; }; function defs(name) { /*global console*/ var that = this; if (arguments.length === 2) { var def = arguments[1]; if (typeof def === 'string') { if (def.charAt(0) === '+') { defs[name] = parseProj(arguments[1]); } else { defs[name] = wkt(arguments[1]); } } else { defs[name] = def; } } else if (arguments.length === 1) { if (Array.isArray(name)) { return name.map(function(v) { if (Array.isArray(v)) { defs.apply(that, v); } else { defs(v); } }); } else if (typeof name === 'string') { if (name in defs) { return defs[name]; } } else if ('EPSG' in name) { defs['EPSG:' + name.EPSG] = name; } else if ('ESRI' in name) { defs['ESRI:' + name.ESRI] = name; } else if ('IAU2000' in name) { defs['IAU2000:' + name.IAU2000] = name; } else { console.log(name); } return; } } globals(defs); function testObj(code){ return typeof code === 'string'; } function testDef(code){ return code in defs; } var codeWords = ['PROJECTEDCRS', 'PROJCRS', 'GEOGCS','GEOCCS','PROJCS','LOCAL_CS', 'GEODCRS', 'GEODETICCRS', 'GEODETICDATUM', 'ENGCRS', 'ENGINEERINGCRS']; function testWKT(code){ return codeWords.some(function (word) { return code.indexOf(word) > -1; }); } var codes = ['3857', '900913', '3785', '102113']; function checkMercator(item) { var auth = match(item, 'authority'); if (!auth) { return; } var code = match(auth, 'epsg'); return code && codes.indexOf(code) > -1; } function checkProjStr(item) { var ext = match(item, 'extension'); if (!ext) { return; } return match(ext, 'proj4'); } function testProj(code){ return code[0] === '+'; } function parse(code){ if (testObj(code)) { //check to see if this is a WKT string if (testDef(code)) { return defs[code]; } if (testWKT(code)) { var out = wkt(code); // test of spetial case, due to this being a very common and often malformed if (checkMercator(out)) { return defs['EPSG:3857']; } var maybeProjStr = checkProjStr(out); if (maybeProjStr) { return parseProj(maybeProjStr); } return out; } if (testProj(code)) { return parseProj(code); } }else{ return code; } } var extend = function(destination, source) { destination = destination || {}; var value, property; if (!source) { return destination; } for (property in source) { value = source[property]; if (value !== undefined) { destination[property] = value; } } return destination; }; var msfnz = function(eccent, sinphi, cosphi) { var con = eccent * sinphi; return cosphi / (Math.sqrt(1 - con * con)); }; var sign = function(x) { return x<0 ? -1 : 1; }; var adjust_lon = function(x) { return (Math.abs(x) <= SPI) ? x : (x - (sign(x) * TWO_PI)); }; var tsfnz = function(eccent, phi, sinphi) { var con = eccent * sinphi; var com = 0.5 * eccent; con = Math.pow(((1 - con) / (1 + con)), com); return (Math.tan(0.5 * (HALF_PI - phi)) / con); }; var phi2z = function(eccent, ts) { var eccnth = 0.5 * eccent; var con, dphi; var phi = HALF_PI - 2 * Math.atan(ts); for (var i = 0; i <= 15; i++) { con = eccent * Math.sin(phi); dphi = HALF_PI - 2 * Math.atan(ts * (Math.pow(((1 - con) / (1 + con)), eccnth))) - phi; phi += dphi; if (Math.abs(dphi) <= 0.0000000001) { return phi; } } //console.log("phi2z has NoConvergence"); return -9999; }; function init() { var con = this.b / this.a; this.es = 1 - con * con; if(!('x0' in this)){ this.x0 = 0; } if(!('y0' in this)){ this.y0 = 0; } this.e = Math.sqrt(this.es); if (this.lat_ts) { if (this.sphere) { this.k0 = Math.cos(this.lat_ts); } else { this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); } } else { if (!this.k0) { if (this.k) { this.k0 = this.k; } else { this.k0 = 1; } } } } /* Mercator forward equations--mapping lat,long to x,y --------------------------------------------------*/ function forward(p) { var lon = p.x; var lat = p.y; // convert to radians if (lat * R2D > 90 && lat * R2D < -90 && lon * R2D > 180 && lon * R2D < -180) { return null; } var x, y; if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { return null; } else { if (this.sphere) { x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); y = this.y0 + this.a * this.k0 * Math.log(Math.tan(FORTPI + 0.5 * lat)); } else { var sinphi = Math.sin(lat); var ts = tsfnz(this.e, lat, sinphi); x = this.x0 + this.a * this.k0 * adjust_lon(lon - this.long0); y = this.y0 - this.a * this.k0 * Math.log(ts); } p.x = x; p.y = y; return p; } } /* Mercator inverse equations--mapping x,y to lat/long --------------------------------------------------*/ function inverse(p) { var x = p.x - this.x0; var y = p.y - this.y0; var lon, lat; if (this.sphere) { lat = HALF_PI - 2 * Math.atan(Math.exp(-y / (this.a * this.k0))); } else { var ts = Math.exp(-y / (this.a * this.k0)); lat = phi2z(this.e, ts); if (lat === -9999) { return null; } } lon = adjust_lon(this.long0 + x / (this.a * this.k0)); p.x = lon; p.y = lat; return p; } var names$1 = ["Mercator", "Popular Visualisation Pseudo Mercator", "Mercator_1SP", "Mercator_Auxiliary_Sphere", "merc"]; var merc = { init: init, forward: forward, inverse: inverse, names: names$1 }; function init$1() { //no-op for longlat } function identity(pt) { return pt; } var names$2 = ["longlat", "identity"]; var longlat = { init: init$1, forward: identity, inverse: identity, names: names$2 }; var projs = [merc, longlat]; var names = {}; var projStore = []; function add(proj, i) { var len = projStore.length; if (!proj.names) { console.log(i); return true; } projStore[len] = proj; proj.names.forEach(function(n) { names[n.toLowerCase()] = len; }); return this; } function get(name) { if (!name) { return false; } var n = name.toLowerCase(); if (typeof names[n] !== 'undefined' && projStore[names[n]]) { return projStore[names[n]]; } } function start() { projs.forEach(add); } var projections = { start: start, add: add, get: get }; var exports$2 = {}; exports$2.MERIT = { a: 6378137.0, rf: 298.257, ellipseName: "MERIT 1983" }; exports$2.SGS85 = { a: 6378136.0, rf: 298.257, ellipseName: "Soviet Geodetic System 85" }; exports$2.GRS80 = { a: 6378137.0, rf: 298.257222101, ellipseName: "GRS 1980(IUGG, 1980)" }; exports$2.IAU76 = { a: 6378140.0, rf: 298.257, ellipseName: "IAU 1976" }; exports$2.airy = { a: 6377563.396, b: 6356256.910, ellipseName: "Airy 1830" }; exports$2.APL4 = { a: 6378137, rf: 298.25, ellipseName: "Appl. Physics. 1965" }; exports$2.NWL9D = { a: 6378145.0, rf: 298.25, ellipseName: "Naval Weapons Lab., 1965" }; exports$2.mod_airy = { a: 6377340.189, b: 6356034.446, ellipseName: "Modified Airy" }; exports$2.andrae = { a: 6377104.43, rf: 300.0, ellipseName: "Andrae 1876 (Den., Iclnd.)" }; exports$2.aust_SA = { a: 6378160.0, rf: 298.25, ellipseName: "Australian Natl & S. Amer. 1969" }; exports$2.GRS67 = { a: 6378160.0, rf: 298.2471674270, ellipseName: "GRS 67(IUGG 1967)" }; exports$2.bessel = { a: 6377397.155, rf: 299.1528128, ellipseName: "Bessel 1841" }; exports$2.bess_nam = { a: 6377483.865, rf: 299.1528128, ellipseName: "Bessel 1841 (Namibia)" }; exports$2.clrk66 = { a: 6378206.4, b: 6356583.8, ellipseName: "Clarke 1866" }; exports$2.clrk80 = { a: 6378249.145, rf: 293.4663, ellipseName: "Clarke 1880 mod." }; exports$2.clrk58 = { a: 6378293.645208759, rf: 294.2606763692654, ellipseName: "Clarke 1858" }; exports$2.CPM = { a: 6375738.7, rf: 334.29, ellipseName: "Comm. des Poids et Mesures 1799" }; exports$2.delmbr = { a: 6376428.0, rf: 311.5, ellipseName: "Delambre 1810 (Belgium)" }; exports$2.engelis = { a: 6378136.05, rf: 298.2566, ellipseName: "Engelis 1985" }; exports$2.evrst30 = { a: 6377276.345, rf: 300.8017, ellipseName: "Everest 1830" }; exports$2.evrst48 = { a: 6377304.063, rf: 300.8017, ellipseName: "Everest 1948" }; exports$2.evrst56 = { a: 6377301.243, rf: 300.8017, ellipseName: "Everest 1956" }; exports$2.evrst69 = { a: 6377295.664, rf: 300.8017, ellipseName: "Everest 1969" }; exports$2.evrstSS = { a: 6377298.556, rf: 300.8017, ellipseName: "Everest (Sabah & Sarawak)" }; exports$2.fschr60 = { a: 6378166.0, rf: 298.3, ellipseName: "Fischer (Mercury Datum) 1960" }; exports$2.fschr60m = { a: 6378155.0, rf: 298.3, ellipseName: "Fischer 1960" }; exports$2.fschr68 = { a: 6378150.0, rf: 298.3, ellipseName: "Fischer 1968" }; exports$2.helmert = { a: 6378200.0, rf: 298.3, ellipseName: "Helmert 1906" }; exports$2.hough = { a: 6378270.0, rf: 297.0, ellipseName: "Hough" }; exports$2.intl = { a: 6378388.0, rf: 297.0, ellipseName: "International 1909 (Hayford)" }; exports$2.kaula = { a: 6378163.0, rf: 298.24, ellipseName: "Kaula 1961" }; exports$2.lerch = { a: 6378139.0, rf: 298.257, ellipseName: "Lerch 1979" }; exports$2.mprts = { a: 6397300.0, rf: 191.0, ellipseName: "Maupertius 1738" }; exports$2.new_intl = { a: 6378157.5, b: 6356772.2, ellipseName: "New International 1967" }; exports$2.plessis = { a: 6376523.0, rf: 6355863.0, ellipseName: "Plessis 1817 (France)" }; exports$2.krass = { a: 6378245.0, rf: 298.3, ellipseName: "Krassovsky, 1942" }; exports$2.SEasia = { a: 6378155.0, b: 6356773.3205, ellipseName: "Southeast Asia" }; exports$2.walbeck = { a: 6376896.0, b: 6355834.8467, ellipseName: "Walbeck" }; exports$2.WGS60 = { a: 6378165.0, rf: 298.3, ellipseName: "WGS 60" }; exports$2.WGS66 = { a: 6378145.0, rf: 298.25, ellipseName: "WGS 66" }; exports$2.WGS7 = { a: 6378135.0, rf: 298.26, ellipseName: "WGS 72" }; var WGS84 = exports$2.WGS84 = { a: 6378137.0, rf: 298.257223563, ellipseName: "WGS 84" }; exports$2.sphere = { a: 6370997.0, b: 6370997.0, ellipseName: "Normal Sphere (r=6370997)" }; function eccentricity(a, b, rf, R_A) { var a2 = a * a; // used in geocentric var b2 = b * b; // used in geocentric var es = (a2 - b2) / a2; // e ^ 2 var e = 0; if (R_A) { a *= 1 - es * (SIXTH + es * (RA4 + es * RA6)); a2 = a * a; es = 0; } else { e = Math.sqrt(es); // eccentricity } var ep2 = (a2 - b2) / b2; // used in geocentric return { es: es, e: e, ep2: ep2 }; } function sphere(a, b, rf, ellps, sphere) { if (!a) { // do we have an ellipsoid? var ellipse = match(exports$2, ellps); if (!ellipse) { ellipse = WGS84; } a = ellipse.a; b = ellipse.b; rf = ellipse.rf; } if (rf && !b) { b = (1.0 - 1.0 / rf) * a; } if (rf === 0 || Math.abs(a - b) < EPSLN) { sphere = true; b = a; } return { a: a, b: b, rf: rf, sphere: sphere }; } var exports$3 = {}; exports$3.wgs84 = { towgs84: "0,0,0", ellipse: "WGS84", datumName: "WGS84" }; exports$3.ch1903 = { towgs84: "674.374,15.056,405.346", ellipse: "bessel", datumName: "swiss" }; exports$3.ggrs87 = { towgs84: "-199.87,74.79,246.62", ellipse: "GRS80", datumName: "Greek_Geodetic_Reference_System_1987" }; exports$3.nad83 = { towgs84: "0,0,0", ellipse: "GRS80", datumName: "North_American_Datum_1983" }; exports$3.nad27 = { nadgrids: "@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat", ellipse: "clrk66", datumName: "North_American_Datum_1927" }; exports$3.potsdam = { towgs84: "606.0,23.0,413.0", ellipse: "bessel", datumName: "Potsdam Rauenberg 1950 DHDN" }; exports$3.carthage = { towgs84: "-263.0,6.0,431.0", ellipse: "clark80", datumName: "Carthage 1934 Tunisia" }; exports$3.hermannskogel = { towgs84: "653.0,-212.0,449.0", ellipse: "bessel", datumName: "Hermannskogel" }; exports$3.osni52 = { towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", ellipse: "airy", datumName: "Irish National" }; exports$3.ire65 = { towgs84: "482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15", ellipse: "mod_airy", datumName: "Ireland 1965" }; exports$3.rassadiran = { towgs84: "-133.63,-157.5,-158.62", ellipse: "intl", datumName: "Rassadiran" }; exports$3.nzgd49 = { towgs84: "59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993", ellipse: "intl", datumName: "New Zealand Geodetic Datum 1949" }; exports$3.osgb36 = { towgs84: "446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894", ellipse: "airy", datumName: "Airy 1830" }; exports$3.s_jtsk = { towgs84: "589,76,480", ellipse: 'bessel', datumName: 'S-JTSK (Ferro)' }; exports$3.beduaram = { towgs84: '-106,-87,188', ellipse: 'clrk80', datumName: 'Beduaram' }; exports$3.gunung_segara = { towgs84: '-403,684,41', ellipse: 'bessel', datumName: 'Gunung Segara Jakarta' }; exports$3.rnb72 = { towgs84: "106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1", ellipse: "intl", datumName: "Reseau National Belge 1972" }; function datum(datumCode, datum_params, a, b, es, ep2) { var out = {}; if (datumCode === undefined || datumCode === 'none') { out.datum_type = PJD_NODATUM; } else { out.datum_type = PJD_WGS84; } if (datum_params) { out.datum_params = datum_params.map(parseFloat); if (out.datum_params[0] !== 0 || out.datum_params[1] !== 0 || out.datum_params[2] !== 0) { out.datum_type = PJD_3PARAM; } if (out.datum_params.length > 3) { if (out.datum_params[3] !== 0 || out.datum_params[4] !== 0 || out.datum_params[5] !== 0 || out.datum_params[6] !== 0) { out.datum_type = PJD_7PARAM; out.datum_params[3] *= SEC_TO_RAD; out.datum_params[4] *= SEC_TO_RAD; out.datum_params[5] *= SEC_TO_RAD; out.datum_params[6] = (out.datum_params[6] / 1000000.0) + 1.0; } } } out.a = a; //datum object also uses these values out.b = b; out.es = es; out.ep2 = ep2; return out; } function Projection(srsCode,callback) { if (!(this instanceof Projection)) { return new Projection(srsCode); } callback = callback || function(error){ if(error){ throw error; } }; var json = parse(srsCode); if(typeof json !== 'object'){ callback(srsCode); return; } var ourProj = Projection.projections.get(json.projName); if(!ourProj){ callback(srsCode); return; } if (json.datumCode && json.datumCode !== 'none') { var datumDef = match(exports$3, json.datumCode); if (datumDef) { json.datum_params = datumDef.towgs84 ? datumDef.towgs84.split(',') : null; json.ellps = datumDef.ellipse; json.datumName = datumDef.datumName ? datumDef.datumName : json.datumCode; } } json.k0 = json.k0 || 1.0; json.axis = json.axis || 'enu'; json.ellps = json.ellps || 'wgs84'; var sphere_ = sphere(json.a, json.b, json.rf, json.ellps, json.sphere); var ecc = eccentricity(sphere_.a, sphere_.b, sphere_.rf, json.R_A); var datumObj = json.datum || datum(json.datumCode, json.datum_params, sphere_.a, sphere_.b, ecc.es, ecc.ep2); extend(this, json); // transfer everything over from the projection because we don't know what we'll need extend(this, ourProj); // transfer all the methods from the projection // copy the 4 things over we calulated in deriveConstants.sphere this.a = sphere_.a; this.b = sphere_.b; this.rf = sphere_.rf; this.sphere = sphere_.sphere; // copy the 3 things we calculated in deriveConstants.eccentricity this.es = ecc.es; this.e = ecc.e; this.ep2 = ecc.ep2; // add in the datum object this.datum = datumObj; // init the projection this.init(); // legecy callback from back in the day when it went to spatialreference.org callback(null, this); } Projection.projections = projections; Projection.projections.start(); 'use strict'; function compareDatums(source, dest) { if (source.datum_type !== dest.datum_type) { return false; // false, datums are not equal } else if (source.a !== dest.a || Math.abs(source.es - dest.es) > 0.000000000050) { // the tolerance for es is to ensure that GRS80 and WGS84 // are considered identical return false; } else if (source.datum_type === PJD_3PARAM) { return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2]); } else if (source.datum_type === PJD_7PARAM) { return (source.datum_params[0] === dest.datum_params[0] && source.datum_params[1] === dest.datum_params[1] && source.datum_params[2] === dest.datum_params[2] && source.datum_params[3] === dest.datum_params[3] && source.datum_params[4] === dest.datum_params[4] && source.datum_params[5] === dest.datum_params[5] && source.datum_params[6] === dest.datum_params[6]); } else { return true; // datums are equal } } // cs_compare_datums() /* * The function Convert_Geodetic_To_Geocentric converts geodetic coordinates * (latitude, longitude, and height) to geocentric coordinates (X, Y, Z), * according to the current ellipsoid parameters. * * Latitude : Geodetic latitude in radians (input) * Longitude : Geodetic longitude in radians (input) * Height : Geodetic height, in meters (input) * X : Calculated Geocentric X coordinate, in meters (output) * Y : Calculated Geocentric Y coordinate, in meters (output) * Z : Calculated Geocentric Z coordinate, in meters (output) * */ function geodeticToGeocentric(p, es, a) { var Longitude = p.x; var Latitude = p.y; var Height = p.z ? p.z : 0; //Z value not always supplied var Rn; /* Earth radius at location */ var Sin_Lat; /* Math.sin(Latitude) */ var Sin2_Lat; /* Square of Math.sin(Latitude) */ var Cos_Lat; /* Math.cos(Latitude) */ /* ** Don't blow up if Latitude is just a little out of the value ** range as it may just be a rounding issue. Also removed longitude ** test, it should be wrapped by Math.cos() and Math.sin(). NFW for PROJ.4, Sep/2001. */ if (Latitude < -HALF_PI && Latitude > -1.001 * HALF_PI) { Latitude = -HALF_PI; } else if (Latitude > HALF_PI && Latitude < 1.001 * HALF_PI) { Latitude = HALF_PI; } else if (Latitude < -HALF_PI) { /* Latitude out of range */ //..reportError('geocent:lat out of range:' + Latitude); return { x: -Infinity, y: -Infinity, z: p.z }; } else if (Latitude > HALF_PI) { /* Latitude out of range */ return { x: Infinity, y: Infinity, z: p.z }; } if (Longitude > Math.PI) { Longitude -= (2 * Math.PI); } Sin_Lat = Math.sin(Latitude); Cos_Lat = Math.cos(Latitude); Sin2_Lat = Sin_Lat * Sin_Lat; Rn = a / (Math.sqrt(1.0e0 - es * Sin2_Lat)); return { x: (Rn + Height) * Cos_Lat * Math.cos(Longitude), y: (Rn + Height) * Cos_Lat * Math.sin(Longitude), z: ((Rn * (1 - es)) + Height) * Sin_Lat }; } // cs_geodetic_to_geocentric() function geocentricToGeodetic(p, es, a, b) { /* local defintions and variables */ /* end-criterium of loop, accuracy of sin(Latitude) */ var genau = 1e-12; var genau2 = (genau * genau); var maxiter = 30; var P; /* distance between semi-minor axis and location */ var RR; /* distance between center and location */ var CT; /* sin of geocentric latitude */ var ST; /* cos of geocentric latitude */ var RX; var RK; var RN; /* Earth radius at location */ var CPHI0; /* cos of start or old geodetic latitude in iterations */ var SPHI0; /* sin of start or old geodetic latitude in iterations */ var CPHI; /* cos of searched geodetic latitude */ var SPHI; /* sin of searched geodetic latitude */ var SDPHI; /* end-criterium: addition-theorem of sin(Latitude(iter)-Latitude(iter-1)) */ var iter; /* # of continous iteration, max. 30 is always enough (s.a.) */ var X = p.x; var Y = p.y; var Z = p.z ? p.z : 0.0; //Z value not always supplied var Longitude; var Latitude; var Height; P = Math.sqrt(X * X + Y * Y); RR = Math.sqrt(X * X + Y * Y + Z * Z); /* special cases for latitude and longitude */ if (P / a < genau) { /* special case, if P=0. (X=0., Y=0.) */ Longitude = 0.0; /* if (X,Y,Z)=(0.,0.,0.) then Height becomes semi-minor axis * of ellipsoid (=center of mass), Latitude becomes PI/2 */ if (RR / a < genau) { Latitude = HALF_PI; Height = -b; return { x: p.x, y: p.y, z: p.z }; } } else { /* ellipsoidal (geodetic) longitude * interval: -PI < Longitude <= +PI */ Longitude = Math.atan2(Y, X); } /* -------------------------------------------------------------- * Following iterative algorithm was developped by * "Institut for Erdmessung", University of Hannover, July 1988. * Internet: www.ife.uni-hannover.de * Iterative computation of CPHI,SPHI and Height. * Iteration of CPHI and SPHI to 10**-12 radian resp. * 2*10**-7 arcsec. * -------------------------------------------------------------- */ CT = Z / RR; ST = P / RR; RX = 1.0 / Math.sqrt(1.0 - es * (2.0 - es) * ST * ST); CPHI0 = ST * (1.0 - es) * RX; SPHI0 = CT * RX; iter = 0; /* loop to find sin(Latitude) resp. Latitude * until |sin(Latitude(iter)-Latitude(iter-1))| < genau */ do { iter++; RN = a / Math.sqrt(1.0 - es * SPHI0 * SPHI0); /* ellipsoidal (geodetic) height */ Height = P * CPHI0 + Z * SPHI0 - RN * (1.0 - es * SPHI0 * SPHI0); RK = es * RN / (RN + Height); RX = 1.0 / Math.sqrt(1.0 - RK * (2.0 - RK) * ST * ST); CPHI = ST * (1.0 - RK) * RX; SPHI = CT * RX; SDPHI = SPHI * CPHI0 - CPHI * SPHI0; CPHI0 = CPHI; SPHI0 = SPHI; } while (SDPHI * SDPHI > genau2 && iter < maxiter); /* ellipsoidal (geodetic) latitude */ Latitude = Math.atan(SPHI / Math.abs(CPHI)); return { x: Longitude, y: Latitude, z: Height }; } // cs_geocentric_to_geodetic() /****************************************************************/ // pj_geocentic_to_wgs84( p ) // p = point to transform in geocentric coordinates (x,y,z) /** point object, nothing fancy, just allows values to be passed back and forth by reference rather than by value. Other point classes may be used as long as they have x and y properties, which will get modified in the transform method. */ function geocentricToWgs84(p, datum_type, datum_params) { if (datum_type === PJD_3PARAM) { // if( x[io] === HUGE_VAL ) // continue; return { x: p.x + datum_params[0], y: p.y + datum_params[1], z: p.z + datum_params[2], }; } else if (datum_type === PJD_7PARAM) { var Dx_BF = datum_params[0]; var Dy_BF = datum_params[1]; var Dz_BF = datum_params[2]; var Rx_BF = datum_params[3]; var Ry_BF = datum_params[4]; var Rz_BF = datum_params[5]; var M_BF = datum_params[6]; // if( x[io] === HUGE_VAL ) // continue; return { x: M_BF * (p.x - Rz_BF * p.y + Ry_BF * p.z) + Dx_BF, y: M_BF * (Rz_BF * p.x + p.y - Rx_BF * p.z) + Dy_BF, z: M_BF * (-Ry_BF * p.x + Rx_BF * p.y + p.z) + Dz_BF }; } } // cs_geocentric_to_wgs84 /****************************************************************/ // pj_geocentic_from_wgs84() // coordinate system definition, // point to transform in geocentric coordinates (x,y,z) function geocentricFromWgs84(p, datum_type, datum_params) { if (datum_type === PJD_3PARAM) { //if( x[io] === HUGE_VAL ) // continue; return { x: p.x - datum_params[0], y: p.y - datum_params[1], z: p.z - datum_params[2], }; } else if (datum_type === PJD_7PARAM) { var Dx_BF = datum_params[0]; var Dy_BF = datum_params[1]; var Dz_BF = datum_params[2]; var Rx_BF = datum_params[3]; var Ry_BF = datum_params[4]; var Rz_BF = datum_params[5]; var M_BF = datum_params[6]; var x_tmp = (p.x - Dx_BF) / M_BF; var y_tmp = (p.y - Dy_BF) / M_BF; var z_tmp = (p.z - Dz_BF) / M_BF; //if( x[io] === HUGE_VAL ) // continue; return { x: x_tmp + Rz_BF * y_tmp - Ry_BF * z_tmp, y: -Rz_BF * x_tmp + y_tmp + Rx_BF * z_tmp, z: Ry_BF * x_tmp - Rx_BF * y_tmp + z_tmp }; } //cs_geocentric_from_wgs84() } function checkParams(type) { return (type === PJD_3PARAM || type === PJD_7PARAM); } var datum_transform = function(source, dest, point) { // Short cut if the datums are identical. if (compareDatums(source, dest)) { return point; // in this case, zero is sucess, // whereas cs_compare_datums returns 1 to indicate TRUE // confusing, should fix this } // Explicitly skip datum transform by setting 'datum=none' as parameter for either source or dest if (source.datum_type === PJD_NODATUM || dest.datum_type === PJD_NODATUM) { return point; } // If this datum requires grid shifts, then apply it to geodetic coordinates. // Do we need to go through geocentric coordinates? if (source.es === dest.es && source.a === dest.a && !checkParams(source.datum_type) && !checkParams(dest.datum_type)) { return point; } // Convert to geocentric coordinates. point = geodeticToGeocentric(point, source.es, source.a); // Convert between datums if (checkParams(source.datum_type)) { point = geocentricToWgs84(point, source.datum_type, source.datum_params); } if (checkParams(dest.datum_type)) { point = geocentricFromWgs84(point, dest.datum_type, dest.datum_params); } return geocentricToGeodetic(point, dest.es, dest.a, dest.b); }; var adjust_axis = function(crs, denorm, point) { var xin = point.x, yin = point.y, zin = point.z || 0.0; var v, t, i; var out = {}; for (i = 0; i < 3; i++) { if (denorm && i === 2 && point.z === undefined) { continue; } if (i === 0) { v = xin; t = 'x'; } else if (i === 1) { v = yin; t = 'y'; } else { v = zin; t = 'z'; } switch (crs.axis[i]) { case 'e': out[t] = v; break; case 'w': out[t] = -v; break; case 'n': out[t] = v; break; case 's': out[t] = -v; break; case 'u': if (point[t] !== undefined) { out.z = v; } break; case 'd': if (point[t] !== undefined) { out.z = -v; } break; default: //console.log("ERROR: unknow axis ("+crs.axis[i]+") - check definition of "+crs.projName); return null; } } return out; }; var toPoint = function (array){ var out = { x: array[0], y: array[1] }; if (array.length>2) { out.z = array[2]; } if (array.length>3) { out.m = array[3]; } return out; }; var checkSanity = function (point) { checkCoord(point.x); checkCoord(point.y); }; function checkCoord(num) { if (typeof Number.isFinite === 'function') { if (Number.isFinite(num)) { return; } throw new TypeError('coordinates must be finite numbers'); } if (typeof num !== 'number' || num !== num || !isFinite(num)) { throw new TypeError('coordinates must be finite numbers'); } } function checkNotWGS(source, dest) { return ((source.datum.datum_type === PJD_3PARAM || source.datum.datum_type === PJD_7PARAM) && dest.datumCode !== 'WGS84') || ((dest.datum.datum_type === PJD_3PARAM || dest.datum.datum_type === PJD_7PARAM) && source.datumCode !== 'WGS84'); } function transform(source, dest, point) { var wgs84; if (Array.isArray(point)) { point = toPoint(point); } checkSanity(point); // Workaround for datum shifts towgs84, if either source or destination projection is not wgs84 if (source.datum && dest.datum && checkNotWGS(source, dest)) { wgs84 = new Projection('WGS84'); point = transform(source, wgs84, point); source = wgs84; } // DGR, 2010/11/12 if (source.axis !== 'enu') { point = adjust_axis(source, false, point); } // Transform source points to long/lat, if they aren't already. if (source.projName === 'longlat') { point = { x: point.x * D2R, y: point.y * D2R }; } else { if (source.to_meter) { point = { x: point.x * source.to_meter, y: point.y * source.to_meter }; } point = source.inverse(point); // Convert Cartesian to longlat } // Adjust for the prime meridian if necessary if (source.from_greenwich) { point.x += source.from_greenwich; } // Convert datums if needed, and if possible. point = datum_transform(source.datum, dest.datum, point); // Adjust for the prime meridian if necessary if (dest.from_greenwich) { point = { x: point.x - dest.from_greenwich, y: point.y }; } if (dest.projName === 'longlat') { // convert radians to decimal degrees point = { x: point.x * R2D, y: point.y * R2D }; } else { // else project point = dest.forward(point); if (dest.to_meter) { point = { x: point.x / dest.to_meter, y: point.y / dest.to_meter }; } } // DGR, 2010/11/12 if (dest.axis !== 'enu') { return adjust_axis(dest, true, point); } return point; } var wgs84 = Projection('WGS84'); function transformer(from, to, coords) { var transformedArray, out, keys; if (Array.isArray(coords)) { transformedArray = transform(from, to, coords); if (coords.length === 3) { return [transformedArray.x, transformedArray.y, transformedArray.z]; } else { return [transformedArray.x, transformedArray.y]; } } else { out = transform(from, to, coords); keys = Object.keys(coords); if (keys.length === 2) { return out; } keys.forEach(function (key) { if (key === 'x' || key === 'y') { return; } out[key] = coords[key]; }); return out; } } function checkProj(item) { if (item instanceof Projection) { return item; } if (item.oProj) { return item.oProj; } return Projection(item); } function proj4$1(fromProj, toProj, coord) { fromProj = checkProj(fromProj); var single = false; var obj; if (typeof toProj === 'undefined') { toProj = fromProj; fromProj = wgs84; single = true; } else if (typeof toProj.x !== 'undefined' || Array.isArray(toProj)) { coord = toProj; toProj = fromProj; fromProj = wgs84; single = true; } toProj = checkProj(toProj); if (coord) { return transformer(fromProj, toProj, coord); } else { obj = { forward: function(coords) { return transformer(fromProj, toProj, coords); }, inverse: function(coords) { return transformer(toProj, fromProj, coords); } }; if (single) { obj.oProj = toProj; } return obj; } } /** * UTM zones are grouped, and assigned to one of a group of 6 * sets. * * {int} @private */ var NUM_100K_SETS = 6; /** * The column letters (for easting) of the lower left value, per * set. * * {string} @private */ var SET_ORIGIN_COLUMN_LETTERS = 'AJSAJS'; /** * The row letters (for northing) of the lower left value, per * set. * * {string} @private */ var SET_ORIGIN_ROW_LETTERS = 'AFAFAF'; var A = 65; // A var I = 73; // I var O = 79; // O var V = 86; // V var Z = 90; // Z var mgrs = { forward: forward$1, inverse: inverse$1, toPoint: toPoint$1 }; /** * Conversion of lat/lon to MGRS. * * @param {object} ll Object literal with lat and lon properties on a * WGS84 ellipsoid. * @param {int} accuracy Accuracy in digits (5 for 1 m, 4 for 10 m, 3 for * 100 m, 2 for 1000 m or 1 for 10000 m). Optional, default is 5. * @return {string} the MGRS string for the given location and accuracy. */ function forward$1(ll, accuracy) { accuracy = accuracy || 5; // default accuracy 1m return encode(LLtoUTM({ lat: ll[1], lon: ll[0] }), accuracy); } /** * Conversion of MGRS to lat/lon. * * @param {string} mgrs MGRS string. * @return {array} An array with left (longitude), bottom (latitude), right * (longitude) and top (latitude) values in WGS84, representing the * bounding box for the provided MGRS reference. */ function inverse$1(mgrs) { var bbox = UTMtoLL(decode(mgrs.toUpperCase())); if (bbox.lat && bbox.lon) { return [bbox.lon, bbox.lat, bbox.lon, bbox.lat]; } return [bbox.left, bbox.bottom, bbox.right, bbox.top]; } function toPoint$1(mgrs) { var bbox = UTMtoLL(decode(mgrs.toUpperCase())); if (bbox.lat && bbox.lon) { return [bbox.lon, bbox.lat]; } return [(bbox.left + bbox.right) / 2, (bbox.top + bbox.bottom) / 2]; } /** * Conversion from degrees to radians. * * @private * @param {number} deg the angle in degrees. * @return {number} the angle in radians. */ function degToRad(deg) { return (deg * (Math.PI / 180.0)); } /** * Conversion from radians to degrees. * * @private * @param {number} rad the angle in radians. * @return {number} the angle in degrees. */ function radToDeg(rad) { return (180.0 * (rad / Math.PI)); } /** * Converts a set of Longitude and Latitude co-ordinates to UTM * using the WGS84 ellipsoid. * * @private * @param {object} ll Object literal with lat and lon properties * representing the WGS84 coordinate to be converted. * @return {object} Object literal containing the UTM value with easting, * northing, zoneNumber and zoneLetter properties, and an optional * accuracy property in digits. Returns null if the conversion failed. */ function LLtoUTM(ll) { var Lat = ll.lat; var Long = ll.lon; var a = 6378137.0; //ellip.radius; var eccSquared = 0.00669438; //ellip.eccsq; var k0 = 0.9996; var LongOrigin; var eccPrimeSquared; var N, T, C, A, M; var LatRad = degToRad(Lat); var LongRad = degToRad(Long); var LongOriginRad; var ZoneNumber; // (int) ZoneNumber = Math.floor((Long + 180) / 6) + 1; //Make sure the longitude 180.00 is in Zone 60 if (Long === 180) { ZoneNumber = 60; } // Special zone for Norway if (Lat >= 56.0 && Lat < 64.0 && Long >= 3.0 && Long < 12.0) { ZoneNumber = 32; } // Special zones for Svalbard if (Lat >= 72.0 && Lat < 84.0) { if (Long >= 0.0 && Long < 9.0) { ZoneNumber = 31; } else if (Long >= 9.0 && Long < 21.0) { ZoneNumber = 33; } else if (Long >= 21.0 && Long < 33.0) { ZoneNumber = 35; } else if (Long >= 33.0 && Long < 42.0) { ZoneNumber = 37; } } LongOrigin = (ZoneNumber - 1) * 6 - 180 + 3; //+3 puts origin // in middle of // zone LongOriginRad = degToRad(LongOrigin); eccPrimeSquared = (eccSquared) / (1 - eccSquared); N = a / Math.sqrt(1 - eccSquared * Math.sin(LatRad) * Math.sin(LatRad)); T = Math.tan(LatRad) * Math.tan(LatRad); C = eccPrimeSquared * Math.cos(LatRad) * Math.cos(LatRad); A = Math.cos(LatRad) * (LongRad - LongOriginRad); M = a * ((1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256) * LatRad - (3 * eccSquared / 8 + 3 * eccSquared * eccSquared / 32 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(2 * LatRad) + (15 * eccSquared * eccSquared / 256 + 45 * eccSquared * eccSquared * eccSquared / 1024) * Math.sin(4 * LatRad) - (35 * eccSquared * eccSquared * eccSquared / 3072) * Math.sin(6 * LatRad)); var UTMEasting = (k0 * N * (A + (1 - T + C) * A * A * A / 6.0 + (5 - 18 * T + T * T + 72 * C - 58 * eccPrimeSquared) * A * A * A * A * A / 120.0) + 500000.0); var UTMNorthing = (k0 * (M + N * Math.tan(LatRad) * (A * A / 2 + (5 - T + 9 * C + 4 * C * C) * A * A * A * A / 24.0 + (61 - 58 * T + T * T + 600 * C - 330 * eccPrimeSquared) * A * A * A * A * A * A / 720.0))); if (Lat < 0.0) { UTMNorthing += 10000000.0; //10000000 meter offset for // southern hemisphere } return { northing: Math.round(UTMNorthing), easting: Math.round(UTMEasting), zoneNumber: ZoneNumber, zoneLetter: getLetterDesignator(Lat) }; } /** * Converts UTM coords to lat/long, using the WGS84 ellipsoid. This is a convenience * class where the Zone can be specified as a single string eg."60N" which * is then broken down into the ZoneNumber and ZoneLetter. * * @private * @param {object} utm An object literal with northing, easting, zoneNumber * and zoneLetter properties. If an optional accuracy property is * provided (in meters), a bounding box will be returned instead of * latitude and longitude. * @return {object} An object literal containing either lat and lon values * (if no accuracy was provided), or top, right, bottom and left values * for the bounding box calculated according to the provided accuracy. * Returns null if the conversion failed. */ function UTMtoLL(utm) { var UTMNorthing = utm.northing; var UTMEasting = utm.easting; var zoneLetter = utm.zoneLetter; var zoneNumber = utm.zoneNumber; // check the ZoneNummber is valid if (zoneNumber < 0 || zoneNumber > 60) { return null; } var k0 = 0.9996; var a = 6378137.0; //ellip.radius; var eccSquared = 0.00669438; //ellip.eccsq; var eccPrimeSquared; var e1 = (1 - Math.sqrt(1 - eccSquared)) / (1 + Math.sqrt(1 - eccSquared)); var N1, T1, C1, R1, D, M; var LongOrigin; var mu, phi1Rad; // remove 500,000 meter offset for longitude var x = UTMEasting - 500000.0; var y = UTMNorthing; // We must know somehow if we are in the Northern or Southern // hemisphere, this is the only time we use the letter So even // if the Zone letter isn't exactly correct it should indicate // the hemisphere correctly if (zoneLetter < 'N') { y -= 10000000.0; // remove 10,000,000 meter offset used // for southern hemisphere } // There are 60 zones with zone 1 being at West -180 to -174 LongOrigin = (zoneNumber - 1) * 6 - 180 + 3; // +3 puts origin // in middle of // zone eccPrimeSquared = (eccSquared) / (1 - eccSquared); M = y / k0; mu = M / (a * (1 - eccSquared / 4 - 3 * eccSquared * eccSquared / 64 - 5 * eccSquared * eccSquared * eccSquared / 256)); phi1Rad = mu + (3 * e1 / 2 - 27 * e1 * e1 * e1 / 32) * Math.sin(2 * mu) + (21 * e1 * e1 / 16 - 55 * e1 * e1 * e1 * e1 / 32) * Math.sin(4 * mu) + (151 * e1 * e1 * e1 / 96) * Math.sin(6 * mu); // double phi1 = ProjMath.radToDeg(phi1Rad); N1 = a / Math.sqrt(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad)); T1 = Math.tan(phi1Rad) * Math.tan(phi1Rad); C1 = eccPrimeSquared * Math.cos(phi1Rad) * Math.cos(phi1Rad); R1 = a * (1 - eccSquared) / Math.pow(1 - eccSquared * Math.sin(phi1Rad) * Math.sin(phi1Rad), 1.5); D = x / (N1 * k0); var lat = phi1Rad - (N1 * Math.tan(phi1Rad) / R1) * (D * D / 2 - (5 + 3 * T1 + 10 * C1 - 4 * C1 * C1 - 9 * eccPrimeSquared) * D * D * D * D / 24 + (61 + 90 * T1 + 298 * C1 + 45 * T1 * T1 - 252 * eccPrimeSquared - 3 * C1 * C1) * D * D * D * D * D * D / 720); lat = radToDeg(lat); var lon = (D - (1 + 2 * T1 + C1) * D * D * D / 6 + (5 - 2 * C1 + 28 * T1 - 3 * C1 * C1 + 8 * eccPrimeSquared + 24 * T1 * T1) * D * D * D * D * D / 120) / Math.cos(phi1Rad); lon = LongOrigin + radToDeg(lon); var result; if (utm.accuracy) { var topRight = UTMtoLL({ northing: utm.northing + utm.accuracy, easting: utm.easting + utm.accuracy, zoneLetter: utm.zoneLetter, zoneNumber: utm.zoneNumber }); result = { top: topRight.lat, right: topRight.lon, bottom: lat, left: lon }; } else { result = { lat: lat, lon: lon }; } return result; } /** * Calculates the MGRS letter designator for the given latitude. * * @private * @param {number} lat The latitude in WGS84 to get the letter designator * for. * @return {char} The letter designator. */ function getLetterDesignator(lat) { //This is here as an error flag to show that the Latitude is //outside MGRS limits var LetterDesignator = 'Z'; if ((84 >= lat) && (lat >= 72)) { LetterDesignator = 'X'; } else if ((72 > lat) && (lat >= 64)) { LetterDesignator = 'W'; } else if ((64 > lat) && (lat >= 56)) { LetterDesignator = 'V'; } else if ((56 > lat) && (lat >= 48)) { LetterDesignator = 'U'; } else if ((48 > lat) && (lat >= 40)) { LetterDesignator = 'T'; } else if ((40 > lat) && (lat >= 32)) { LetterDesignator = 'S'; } else if ((32 > lat) && (lat >= 24)) { LetterDesignator = 'R'; } else if ((24 > lat) && (lat >= 16)) { LetterDesignator = 'Q'; } else if ((16 > lat) && (lat >= 8)) { LetterDesignator = 'P'; } else if ((8 > lat) && (lat >= 0)) { LetterDesignator = 'N'; } else if ((0 > lat) && (lat >= -8)) { LetterDesignator = 'M'; } else if ((-8 > lat) && (lat >= -16)) { LetterDesignator = 'L'; } else if ((-16 > lat) && (lat >= -24)) { LetterDesignator = 'K'; } else if ((-24 > lat) && (lat >= -32)) { LetterDesignator = 'J'; } else if ((-32 > lat) && (lat >= -40)) { LetterDesignator = 'H'; } else if ((-40 > lat) && (lat >= -48)) { LetterDesignator = 'G'; } else if ((-48 > lat) && (lat >= -56)) { LetterDesignator = 'F'; } else if ((-56 > lat) && (lat >= -64)) { LetterDesignator = 'E'; } else if ((-64 > lat) && (lat >= -72)) { LetterDesignator = 'D'; } else if ((-72 > lat) && (lat >= -80)) { LetterDesignator = 'C'; } return LetterDesignator; } /** * Encodes a UTM location as MGRS string. * * @private * @param {object} utm An object literal with easting, northing, * zoneLetter, zoneNumber * @param {number} accuracy Accuracy in digits (1-5). * @return {string} MGRS string for the given UTM location. */ function encode(utm, accuracy) { // prepend with leading zeroes var seasting = "00000" + utm.easting, snorthing = "00000" + utm.northing; return utm.zoneNumber + utm.zoneLetter + get100kID(utm.easting, utm.northing, utm.zoneNumber) + seasting.substr(seasting.length - 5, accuracy) + snorthing.substr(snorthing.length - 5, accuracy); } /** * Get the two letter 100k designator for a given UTM easting, * northing and zone number value. * * @private * @param {number} easting * @param {number} northing * @param {number} zoneNumber * @return the two letter 100k designator for the given UTM location. */ function get100kID(easting, northing, zoneNumber) { var setParm = get100kSetForZone(zoneNumber); var setColumn = Math.floor(easting / 100000); var setRow = Math.floor(northing / 100000) % 20; return getLetter100kID(setColumn, setRow, setParm); } /** * Given a UTM zone number, figure out the MGRS 100K set it is in. * * @private * @param {number} i An UTM zone number. * @return {number} the 100k set the UTM zone is in. */ function get100kSetForZone(i) { var setParm = i % NUM_100K_SETS; if (setParm === 0) { setParm = NUM_100K_SETS; } return setParm; } /** * Get the two-letter MGRS 100k designator given information * translated from the UTM northing, easting and zone number. * * @private * @param {number} column the column index as it relates to the MGRS * 100k set spreadsheet, created from the UTM easting. * Values are 1-8. * @param {number} row the row index as it relates to the MGRS 100k set * spreadsheet, created from the UTM northing value. Values * are from 0-19. * @param {number} parm the set block, as it relates to the MGRS 100k set * spreadsheet, created from the UTM zone. Values are from * 1-60. * @return two letter MGRS 100k code. */ function getLetter100kID(column, row, parm) { // colOrigin and rowOrigin are the letters at the origin of the set var index = parm - 1; var colOrigin = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(index); var rowOrigin = SET_ORIGIN_ROW_LETTERS.charCodeAt(index); // colInt and rowInt are the letters to build to return var colInt = colOrigin + column - 1; var rowInt = rowOrigin + row; var rollover = false; if (colInt > Z) { colInt = colInt - Z + A - 1; rollover = true; } if (colInt === I || (colOrigin < I && colInt > I) || ((colInt > I || colOrigin < I) && rollover)) { colInt++; } if (colInt === O || (colOrigin < O && colInt > O) || ((colInt > O || colOrigin < O) && rollover)) { colInt++; if (colInt === I) { colInt++; } } if (colInt > Z) { colInt = colInt - Z + A - 1; } if (rowInt > V) { rowInt = rowInt - V + A - 1; rollover = true; } else { rollover = false; } if (((rowInt === I) || ((rowOrigin < I) && (rowInt > I))) || (((rowInt > I) || (rowOrigin < I)) && rollover)) { rowInt++; } if (((rowInt === O) || ((rowOrigin < O) && (rowInt > O))) || (((rowInt > O) || (rowOrigin < O)) && rollover)) { rowInt++; if (rowInt === I) { rowInt++; } } if (rowInt > V) { rowInt = rowInt - V + A - 1; } var twoLetter = String.fromCharCode(colInt) + String.fromCharCode(rowInt); return twoLetter; } /** * Decode the UTM parameters from a MGRS string. * * @private * @param {string} mgrsString an UPPERCASE coordinate string is expected. * @return {object} An object literal with easting, northing, zoneLetter, * zoneNumber and accuracy (in meters) properties. */ function decode(mgrsString) { if (mgrsString && mgrsString.length === 0) { throw ("MGRSPoint coverting from nothing"); } var length = mgrsString.length; var hunK = null; var sb = ""; var testChar; var i = 0; // get Zone number while (!(/[A-Z]/).test(testChar = mgrsString.charAt(i))) { if (i >= 2) { throw ("MGRSPoint bad conversion from: " + mgrsString); } sb += testChar; i++; } var zoneNumber = parseInt(sb, 10); if (i === 0 || i + 3 > length) { // A good MGRS string has to be 4-5 digits long, // ##AAA/#AAA at least. throw ("MGRSPoint bad conversion from: " + mgrsString); } var zoneLetter = mgrsString.charAt(i++); // Should we check the zone letter here? Why not. if (zoneLetter <= 'A' || zoneLetter === 'B' || zoneLetter === 'Y' || zoneLetter >= 'Z' || zoneLetter === 'I' || zoneLetter === 'O') { throw ("MGRSPoint zone letter " + zoneLetter + " not handled: " + mgrsString); } hunK = mgrsString.substring(i, i += 2); var set = get100kSetForZone(zoneNumber); var east100k = getEastingFromChar(hunK.charAt(0), set); var north100k = getNorthingFromChar(hunK.charAt(1), set); // We have a bug where the northing may be 2000000 too low. // How // do we know when to roll over? while (north100k < getMinNorthing(zoneLetter)) { north100k += 2000000; } // calculate the char index for easting/northing separator var remainder = length - i; if (remainder % 2 !== 0) { throw ("MGRSPoint has to have an even number \nof digits after the zone letter and two 100km letters - front \nhalf for easting meters, second half for \nnorthing meters" + mgrsString); } var sep = remainder / 2; var sepEasting = 0.0; var sepNorthing = 0.0; var accuracyBonus, sepEastingString, sepNorthingString, easting, northing; if (sep > 0) { accuracyBonus = 100000.0 / Math.pow(10, sep); sepEastingString = mgrsString.substring(i, i + sep); sepEasting = parseFloat(sepEastingString) * accuracyBonus; sepNorthingString = mgrsString.substring(i + sep); sepNorthing = parseFloat(sepNorthingString) * accuracyBonus; } easting = sepEasting + east100k; northing = sepNorthing + north100k; return { easting: easting, northing: northing, zoneLetter: zoneLetter, zoneNumber: zoneNumber, accuracy: accuracyBonus }; } /** * Given the first letter from a two-letter MGRS 100k zone, and given the * MGRS table set for the zone number, figure out the easting value that * should be added to the other, secondary easting value. * * @private * @param {char} e The first letter from a two-letter MGRS 100´k zone. * @param {number} set The MGRS table set for the zone number. * @return {number} The easting value for the given letter and set. */ function getEastingFromChar(e, set) { // colOrigin is the letter at the origin of the set for the // column var curCol = SET_ORIGIN_COLUMN_LETTERS.charCodeAt(set - 1); var eastingValue = 100000.0; var rewindMarker = false; while (curCol !== e.charCodeAt(0)) { curCol++; if (curCol === I) { curCol++; } if (curCol === O) { curCol++; } if (curCol > Z) { if (rewindMarker) { throw ("Bad character: " + e); } curCol = A; rewindMarker = true; } eastingValue += 100000.0; } return eastingValue; } /** * Given the second letter from a two-letter MGRS 100k zone, and given the * MGRS table set for the zone number, figure out the northing value that * should be added to the other, secondary northing value. You have to * remember that Northings are determined from the equator, and the vertical * cycle of letters mean a 2000000 additional northing meters. This happens * approx. every 18 degrees of latitude. This method does *NOT* count any * additional northings. You have to figure out how many 2000000 meters need * to be added for the zone letter of the MGRS coordinate. * * @private * @param {char} n Second letter of the MGRS 100k zone * @param {number} set The MGRS table set number, which is dependent on the * UTM zone number. * @return {number} The northing value for the given letter and set. */ function getNorthingFromChar(n, set) { if (n > 'V') { throw ("MGRSPoint given invalid Northing " + n); } // rowOrigin is the letter at the origin of the set for the // column var curRow = SET_ORIGIN_ROW_LETTERS.charCodeAt(set - 1); var northingValue = 0.0; var rewindMarker = false; while (curRow !== n.charCodeAt(0)) { curRow++; if (curRow === I) { curRow++; } if (curRow === O) { curRow++; } // fixing a bug making whole application hang in this loop // when 'n' is a wrong character if (curRow > V) { if (rewindMarker) { // making sure that this loop ends throw ("Bad character: " + n); } curRow = A; rewindMarker = true; } northingValue += 100000.0; } return northingValue; } /** * The function getMinNorthing returns the minimum northing value of a MGRS * zone. * * Ported from Geotrans' c Lattitude_Band_Value structure table. * * @private * @param {char} zoneLetter The MGRS zone to get the min northing for. * @return {number} */ function getMinNorthing(zoneLetter) { var northing; switch (zoneLetter) { case 'C': northing = 1100000.0; break; case 'D': northing = 2000000.0; break; case 'E': northing = 2800000.0; break; case 'F': northing = 3700000.0; break; case 'G': northing = 4600000.0; break; case 'H': northing = 5500000.0; break; case 'J': northing = 6400000.0; break; case 'K': northing = 7300000.0; break; case 'L': northing = 8200000.0; break; case 'M': northing = 9100000.0; break; case 'N': northing = 0.0; break; case 'P': northing = 800000.0; break; case 'Q': northing = 1700000.0; break; case 'R': northing = 2600000.0; break; case 'S': northing = 3500000.0; break; case 'T': northing = 4400000.0; break; case 'U': northing = 5300000.0; break; case 'V': northing = 6200000.0; break; case 'W': northing = 7000000.0; break; case 'X': northing = 7900000.0; break; default: northing = -1.0; } if (northing >= 0.0) { return northing; } else { throw ("Invalid zone letter: " + zoneLetter); } } function Point(x, y, z) { if (!(this instanceof Point)) { return new Point(x, y, z); } if (Array.isArray(x)) { this.x = x[0]; this.y = x[1]; this.z = x[2] || 0.0; } else if(typeof x === 'object') { this.x = x.x; this.y = x.y; this.z = x.z || 0.0; } else if (typeof x === 'string' && typeof y === 'undefined') { var coords = x.split(','); this.x = parseFloat(coords[0], 10); this.y = parseFloat(coords[1], 10); this.z = parseFloat(coords[2], 10) || 0.0; } else { this.x = x; this.y = y; this.z = z || 0.0; } console.warn('proj4.Point will be removed in version 3, use proj4.toPoint'); } Point.fromMGRS = function(mgrsStr) { return new Point(toPoint$1(mgrsStr)); }; Point.prototype.toMGRS = function(accuracy) { return forward$1([this.x, this.y], accuracy); }; var version = "2.5.0"; var C00 = 1; var C02 = 0.25; var C04 = 0.046875; var C06 = 0.01953125; var C08 = 0.01068115234375; var C22 = 0.75; var C44 = 0.46875; var C46 = 0.01302083333333333333; var C48 = 0.00712076822916666666; var C66 = 0.36458333333333333333; var C68 = 0.00569661458333333333; var C88 = 0.3076171875; var pj_enfn = function(es) { var en = []; en[0] = C00 - es * (C02 + es * (C04 + es * (C06 + es * C08))); en[1] = es * (C22 - es * (C04 + es * (C06 + es * C08))); var t = es * es; en[2] = t * (C44 - es * (C46 + es * C48)); t *= es; en[3] = t * (C66 - es * C68); en[4] = t * es * C88; return en; }; var pj_mlfn = function(phi, sphi, cphi, en) { cphi *= sphi; sphi *= sphi; return (en[0] * phi - cphi * (en[1] + sphi * (en[2] + sphi * (en[3] + sphi * en[4])))); }; var MAX_ITER = 20; var pj_inv_mlfn = function(arg, es, en) { var k = 1 / (1 - es); var phi = arg; for (var i = MAX_ITER; i; --i) { /* rarely goes over 2 iterations */ var s = Math.sin(phi); var t = 1 - es * s * s; //t = this.pj_mlfn(phi, s, Math.cos(phi), en) - arg; //phi -= t * (t * Math.sqrt(t)) * k; t = (pj_mlfn(phi, s, Math.cos(phi), en) - arg) * (t * Math.sqrt(t)) * k; phi -= t; if (Math.abs(t) < EPSLN) { return phi; } } //..reportError("cass:pj_inv_mlfn: Convergence error"); return phi; }; // Heavily based on this tmerc projection implementation // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/tmerc.js function init$2() { this.x0 = this.x0 !== undefined ? this.x0 : 0; this.y0 = this.y0 !== undefined ? this.y0 : 0; this.long0 = this.long0 !== undefined ? this.long0 : 0; this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; if (this.es) { this.en = pj_enfn(this.es); this.ml0 = pj_mlfn(this.lat0, Math.sin(this.lat0), Math.cos(this.lat0), this.en); } } /** Transverse Mercator Forward - long/lat to x/y long/lat in radians */ function forward$2(p) { var lon = p.x; var lat = p.y; var delta_lon = adjust_lon(lon - this.long0); var con; var x, y; var sin_phi = Math.sin(lat); var cos_phi = Math.cos(lat); if (!this.es) { var b = cos_phi * Math.sin(delta_lon); if ((Math.abs(Math.abs(b) - 1)) < EPSLN) { return (93); } else { x = 0.5 * this.a * this.k0 * Math.log((1 + b) / (1 - b)) + this.x0; y = cos_phi * Math.cos(delta_lon) / Math.sqrt(1 - Math.pow(b, 2)); b = Math.abs(y); if (b >= 1) { if ((b - 1) > EPSLN) { return (93); } else { y = 0; } } else { y = Math.acos(y); } if (lat < 0) { y = -y; } y = this.a * this.k0 * (y - this.lat0) + this.y0; } } else { var al = cos_phi * delta_lon; var als = Math.pow(al, 2); var c = this.ep2 * Math.pow(cos_phi, 2); var cs = Math.pow(c, 2); var tq = Math.abs(cos_phi) > EPSLN ? Math.tan(lat) : 0; var t = Math.pow(tq, 2); var ts = Math.pow(t, 2); con = 1 - this.es * Math.pow(sin_phi, 2); al = al / Math.sqrt(con); var ml = pj_mlfn(lat, sin_phi, cos_phi, this.en); x = this.a * (this.k0 * al * (1 + als / 6 * (1 - t + c + als / 20 * (5 - 18 * t + ts + 14 * c - 58 * t * c + als / 42 * (61 + 179 * ts - ts * t - 479 * t))))) + this.x0; y = this.a * (this.k0 * (ml - this.ml0 + sin_phi * delta_lon * al / 2 * (1 + als / 12 * (5 - t + 9 * c + 4 * cs + als / 30 * (61 + ts - 58 * t + 270 * c - 330 * t * c + als / 56 * (1385 + 543 * ts - ts * t - 3111 * t)))))) + this.y0; } p.x = x; p.y = y; return p; } /** Transverse Mercator Inverse - x/y to long/lat */ function inverse$2(p) { var con, phi; var lat, lon; var x = (p.x - this.x0) * (1 / this.a); var y = (p.y - this.y0) * (1 / this.a); if (!this.es) { var f = Math.exp(x / this.k0); var g = 0.5 * (f - 1 / f); var temp = this.lat0 + y / this.k0; var h = Math.cos(temp); con = Math.sqrt((1 - Math.pow(h, 2)) / (1 + Math.pow(g, 2))); lat = Math.asin(con); if (y < 0) { lat = -lat; } if ((g === 0) && (h === 0)) { lon = 0; } else { lon = adjust_lon(Math.atan2(g, h) + this.long0); } } else { // ellipsoidal form con = this.ml0 + y / this.k0; phi = pj_inv_mlfn(con, this.es, this.en); if (Math.abs(phi) < HALF_PI) { var sin_phi = Math.sin(phi); var cos_phi = Math.cos(phi); var tan_phi = Math.abs(cos_phi) > EPSLN ? Math.tan(phi) : 0; var c = this.ep2 * Math.pow(cos_phi, 2); var cs = Math.pow(c, 2); var t = Math.pow(tan_phi, 2); var ts = Math.pow(t, 2); con = 1 - this.es * Math.pow(sin_phi, 2); var d = x * Math.sqrt(con) / this.k0; var ds = Math.pow(d, 2); con = con * tan_phi; lat = phi - (con * ds / (1 - this.es)) * 0.5 * (1 - ds / 12 * (5 + 3 * t - 9 * c * t + c - 4 * cs - ds / 30 * (61 + 90 * t - 252 * c * t + 45 * ts + 46 * c - ds / 56 * (1385 + 3633 * t + 4095 * ts + 1574 * ts * t)))); lon = adjust_lon(this.long0 + (d * (1 - ds / 6 * (1 + 2 * t + c - ds / 20 * (5 + 28 * t + 24 * ts + 8 * c * t + 6 * c - ds / 42 * (61 + 662 * t + 1320 * ts + 720 * ts * t)))) / cos_phi)); } else { lat = HALF_PI * sign(y); lon = 0; } } p.x = lon; p.y = lat; return p; } var names$3 = ["Transverse_Mercator", "Transverse Mercator", "tmerc"]; var tmerc = { init: init$2, forward: forward$2, inverse: inverse$2, names: names$3 }; var sinh = function(x) { var r = Math.exp(x); r = (r - 1 / r) / 2; return r; }; var hypot = function(x, y) { x = Math.abs(x); y = Math.abs(y); var a = Math.max(x, y); var b = Math.min(x, y) / (a ? a : 1); return a * Math.sqrt(1 + Math.pow(b, 2)); }; var log1py = function(x) { var y = 1 + x; var z = y - 1; return z === 0 ? x : x * Math.log(y) / z; }; var asinhy = function(x) { var y = Math.abs(x); y = log1py(y * (1 + y / (hypot(1, y) + 1))); return x < 0 ? -y : y; }; var gatg = function(pp, B) { var cos_2B = 2 * Math.cos(2 * B); var i = pp.length - 1; var h1 = pp[i]; var h2 = 0; var h; while (--i >= 0) { h = -h2 + cos_2B * h1 + pp[i]; h2 = h1; h1 = h; } return (B + h * Math.sin(2 * B)); }; var clens = function(pp, arg_r) { var r = 2 * Math.cos(arg_r); var i = pp.length - 1; var hr1 = pp[i]; var hr2 = 0; var hr; while (--i >= 0) { hr = -hr2 + r * hr1 + pp[i]; hr2 = hr1; hr1 = hr; } return Math.sin(arg_r) * hr; }; var cosh = function(x) { var r = Math.exp(x); r = (r + 1 / r) / 2; return r; }; var clens_cmplx = function(pp, arg_r, arg_i) { var sin_arg_r = Math.sin(arg_r); var cos_arg_r = Math.cos(arg_r); var sinh_arg_i = sinh(arg_i); var cosh_arg_i = cosh(arg_i); var r = 2 * cos_arg_r * cosh_arg_i; var i = -2 * sin_arg_r * sinh_arg_i; var j = pp.length - 1; var hr = pp[j]; var hi1 = 0; var hr1 = 0; var hi = 0; var hr2; var hi2; while (--j >= 0) { hr2 = hr1; hi2 = hi1; hr1 = hr; hi1 = hi; hr = -hr2 + r * hr1 - i * hi1 + pp[j]; hi = -hi2 + i * hr1 + r * hi1; } r = sin_arg_r * cosh_arg_i; i = cos_arg_r * sinh_arg_i; return [r * hr - i * hi, r * hi + i * hr]; }; // Heavily based on this etmerc projection implementation // https://github.com/mbloch/mapshaper-proj/blob/master/src/projections/etmerc.js function init$3() { if (this.es === undefined || this.es <= 0) { throw new Error('incorrect elliptical usage'); } this.x0 = this.x0 !== undefined ? this.x0 : 0; this.y0 = this.y0 !== undefined ? this.y0 : 0; this.long0 = this.long0 !== undefined ? this.long0 : 0; this.lat0 = this.lat0 !== undefined ? this.lat0 : 0; this.cgb = []; this.cbg = []; this.utg = []; this.gtu = []; var f = this.es / (1 + Math.sqrt(1 - this.es)); var n = f / (2 - f); var np = n; this.cgb[0] = n * (2 + n * (-2 / 3 + n * (-2 + n * (116 / 45 + n * (26 / 45 + n * (-2854 / 675 )))))); this.cbg[0] = n * (-2 + n * ( 2 / 3 + n * ( 4 / 3 + n * (-82 / 45 + n * (32 / 45 + n * (4642 / 4725)))))); np = np * n; this.cgb[1] = np * (7 / 3 + n * (-8 / 5 + n * (-227 / 45 + n * (2704 / 315 + n * (2323 / 945))))); this.cbg[1] = np * (5 / 3 + n * (-16 / 15 + n * ( -13 / 9 + n * (904 / 315 + n * (-1522 / 945))))); np = np * n; this.cgb[2] = np * (56 / 15 + n * (-136 / 35 + n * (-1262 / 105 + n * (73814 / 2835)))); this.cbg[2] = np * (-26 / 15 + n * (34 / 21 + n * (8 / 5 + n * (-12686 / 2835)))); np = np * n; this.cgb[3] = np * (4279 / 630 + n * (-332 / 35 + n * (-399572 / 14175))); this.cbg[3] = np * (1237 / 630 + n * (-12 / 5 + n * ( -24832 / 14175))); np = np * n; this.cgb[4] = np * (4174 / 315 + n * (-144838 / 6237)); this.cbg[4] = np * (-734 / 315 + n * (109598 / 31185)); np = np * n; this.cgb[5] = np * (601676 / 22275); this.cbg[5] = np * (444337 / 155925); np = Math.pow(n, 2); this.Qn = this.k0 / (1 + n) * (1 + np * (1 / 4 + np * (1 / 64 + np / 256))); this.utg[0] = n * (-0.5 + n * ( 2 / 3 + n * (-37 / 96 + n * ( 1 / 360 + n * (81 / 512 + n * (-96199 / 604800)))))); this.gtu[0] = n * (0.5 + n * (-2 / 3 + n * (5 / 16 + n * (41 / 180 + n * (-127 / 288 + n * (7891 / 37800)))))); this.utg[1] = np * (-1 / 48 + n * (-1 / 15 + n * (437 / 1440 + n * (-46 / 105 + n * (1118711 / 3870720))))); this.gtu[1] = np * (13 / 48 + n * (-3 / 5 + n * (557 / 1440 + n * (281 / 630 + n * (-1983433 / 1935360))))); np = np * n; this.utg[2] = np * (-17 / 480 + n * (37 / 840 + n * (209 / 4480 + n * (-5569 / 90720 )))); this.gtu[2] = np * (61 / 240 + n * (-103 / 140 + n * (15061 / 26880 + n * (167603 / 181440)))); np = np * n; this.utg[3] = np * (-4397 / 161280 + n * (11 / 504 + n * (830251 / 7257600))); this.gtu[3] = np * (49561 / 161280 + n * (-179 / 168 + n * (6601661 / 7257600))); np = np * n; this.utg[4] = np * (-4583 / 161280 + n * (108847 / 3991680)); this.gtu[4] = np * (34729 / 80640 + n * (-3418889 / 1995840)); np = np * n; this.utg[5] = np * (-20648693 / 638668800); this.gtu[5] = np * (212378941 / 319334400); var Z = gatg(this.cbg, this.lat0); this.Zb = -this.Qn * (Z + clens(this.gtu, 2 * Z)); } function forward$3(p) { var Ce = adjust_lon(p.x - this.long0); var Cn = p.y; Cn = gatg(this.cbg, Cn); var sin_Cn = Math.sin(Cn); var cos_Cn = Math.cos(Cn); var sin_Ce = Math.sin(Ce); var cos_Ce = Math.cos(Ce); Cn = Math.atan2(sin_Cn, cos_Ce * cos_Cn); Ce = Math.atan2(sin_Ce * cos_Cn, hypot(sin_Cn, cos_Cn * cos_Ce)); Ce = asinhy(Math.tan(Ce)); var tmp = clens_cmplx(this.gtu, 2 * Cn, 2 * Ce); Cn = Cn + tmp[0]; Ce = Ce + tmp[1]; var x; var y; if (Math.abs(Ce) <= 2.623395162778) { x = this.a * (this.Qn * Ce) + this.x0; y = this.a * (this.Qn * Cn + this.Zb) + this.y0; } else { x = Infinity; y = Infinity; } p.x = x; p.y = y; return p; } function inverse$3(p) { var Ce = (p.x - this.x0) * (1 / this.a); var Cn = (p.y - this.y0) * (1 / this.a); Cn = (Cn - this.Zb) / this.Qn; Ce = Ce / this.Qn; var lon; var lat; if (Math.abs(Ce) <= 2.623395162778) { var tmp = clens_cmplx(this.utg, 2 * Cn, 2 * Ce); Cn = Cn + tmp[0]; Ce = Ce + tmp[1]; Ce = Math.atan(sinh(Ce)); var sin_Cn = Math.sin(Cn); var cos_Cn = Math.cos(Cn); var sin_Ce = Math.sin(Ce); var cos_Ce = Math.cos(Ce); Cn = Math.atan2(sin_Cn * cos_Ce, hypot(sin_Ce, cos_Ce * cos_Cn)); Ce = Math.atan2(sin_Ce, cos_Ce * cos_Cn); lon = adjust_lon(Ce + this.long0); lat = gatg(this.cgb, Cn); } else { lon = Infinity; lat = Infinity; } p.x = lon; p.y = lat; return p; } var names$4 = ["Extended_Transverse_Mercator", "Extended Transverse Mercator", "etmerc"]; var etmerc = { init: init$3, forward: forward$3, inverse: inverse$3, names: names$4 }; var adjust_zone = function(zone, lon) { if (zone === undefined) { zone = Math.floor((adjust_lon(lon) + Math.PI) * 30 / Math.PI) + 1; if (zone < 0) { return 0; } else if (zone > 60) { return 60; } } return zone; }; var dependsOn = 'etmerc'; function init$4() { var zone = adjust_zone(this.zone, this.long0); if (zone === undefined) { throw new Error('unknown utm zone'); } this.lat0 = 0; this.long0 = ((6 * Math.abs(zone)) - 183) * D2R; this.x0 = 500000; this.y0 = this.utmSouth ? 10000000 : 0; this.k0 = 0.9996; etmerc.init.apply(this); this.forward = etmerc.forward; this.inverse = etmerc.inverse; } var names$5 = ["Universal Transverse Mercator System", "utm"]; var utm = { init: init$4, names: names$5, dependsOn: dependsOn }; var srat = function(esinp, exp) { return (Math.pow((1 - esinp) / (1 + esinp), exp)); }; var MAX_ITER$1 = 20; function init$6() { var sphi = Math.sin(this.lat0); var cphi = Math.cos(this.lat0); cphi *= cphi; this.rc = Math.sqrt(1 - this.es) / (1 - this.es * sphi * sphi); this.C = Math.sqrt(1 + this.es * cphi * cphi / (1 - this.es)); this.phic0 = Math.asin(sphi / this.C); this.ratexp = 0.5 * this.C * this.e; this.K = Math.tan(0.5 * this.phic0 + FORTPI) / (Math.pow(Math.tan(0.5 * this.lat0 + FORTPI), this.C) * srat(this.e * sphi, this.ratexp)); } function forward$5(p) { var lon = p.x; var lat = p.y; p.y = 2 * Math.atan(this.K * Math.pow(Math.tan(0.5 * lat + FORTPI), this.C) * srat(this.e * Math.sin(lat), this.ratexp)) - HALF_PI; p.x = this.C * lon; return p; } function inverse$5(p) { var DEL_TOL = 1e-14; var lon = p.x / this.C; var lat = p.y; var num = Math.pow(Math.tan(0.5 * lat + FORTPI) / this.K, 1 / this.C); for (var i = MAX_ITER$1; i > 0; --i) { lat = 2 * Math.atan(num * srat(this.e * Math.sin(p.y), - 0.5 * this.e)) - HALF_PI; if (Math.abs(lat - p.y) < DEL_TOL) { break; } p.y = lat; } /* convergence failed */ if (!i) { return null; } p.x = lon; p.y = lat; return p; } var names$7 = ["gauss"]; var gauss = { init: init$6, forward: forward$5, inverse: inverse$5, names: names$7 }; function init$5() { gauss.init.apply(this); if (!this.rc) { return; } this.sinc0 = Math.sin(this.phic0); this.cosc0 = Math.cos(this.phic0); this.R2 = 2 * this.rc; if (!this.title) { this.title = "Oblique Stereographic Alternative"; } } function forward$4(p) { var sinc, cosc, cosl, k; p.x = adjust_lon(p.x - this.long0); gauss.forward.apply(this, [p]); sinc = Math.sin(p.y); cosc = Math.cos(p.y); cosl = Math.cos(p.x); k = this.k0 * this.R2 / (1 + this.sinc0 * sinc + this.cosc0 * cosc * cosl); p.x = k * cosc * Math.sin(p.x); p.y = k * (this.cosc0 * sinc - this.sinc0 * cosc * cosl); p.x = this.a * p.x + this.x0; p.y = this.a * p.y + this.y0; return p; } function inverse$4(p) { var sinc, cosc, lon, lat, rho; p.x = (p.x - this.x0) / this.a; p.y = (p.y - this.y0) / this.a; p.x /= this.k0; p.y /= this.k0; if ((rho = Math.sqrt(p.x * p.x + p.y * p.y))) { var c = 2 * Math.atan2(rho, this.R2); sinc = Math.sin(c); cosc = Math.cos(c); lat = Math.asin(cosc * this.sinc0 + p.y * sinc * this.cosc0 / rho); lon = Math.atan2(p.x * sinc, rho * this.cosc0 * cosc - p.y * this.sinc0 * sinc); } else { lat = this.phic0; lon = 0; } p.x = lon; p.y = lat; gauss.inverse.apply(this, [p]); p.x = adjust_lon(p.x + this.long0); return p; } var names$6 = ["Stereographic_North_Pole", "Oblique_Stereographic", "Polar_Stereographic", "sterea","Oblique Stereographic Alternative","Double_Stereographic"]; var sterea = { init: init$5, forward: forward$4, inverse: inverse$4, names: names$6 }; function ssfn_(phit, sinphi, eccen) { sinphi *= eccen; return (Math.tan(0.5 * (HALF_PI + phit)) * Math.pow((1 - sinphi) / (1 + sinphi), 0.5 * eccen)); } function init$7() { this.coslat0 = Math.cos(this.lat0); this.sinlat0 = Math.sin(this.lat0); if (this.sphere) { if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { this.k0 = 0.5 * (1 + sign(this.lat0) * Math.sin(this.lat_ts)); } } else { if (Math.abs(this.coslat0) <= EPSLN) { if (this.lat0 > 0) { //North pole //trace('stere:north pole'); this.con = 1; } else { //South pole //trace('stere:south pole'); this.con = -1; } } this.cons = Math.sqrt(Math.pow(1 + this.e, 1 + this.e) * Math.pow(1 - this.e, 1 - this.e)); if (this.k0 === 1 && !isNaN(this.lat_ts) && Math.abs(this.coslat0) <= EPSLN) { this.k0 = 0.5 * this.cons * msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)) / tsfnz(this.e, this.con * this.lat_ts, this.con * Math.sin(this.lat_ts)); } this.ms1 = msfnz(this.e, this.sinlat0, this.coslat0); this.X0 = 2 * Math.atan(this.ssfn_(this.lat0, this.sinlat0, this.e)) - HALF_PI; this.cosX0 = Math.cos(this.X0); this.sinX0 = Math.sin(this.X0); } } // Stereographic forward equations--mapping lat,long to x,y function forward$6(p) { var lon = p.x; var lat = p.y; var sinlat = Math.sin(lat); var coslat = Math.cos(lat); var A, X, sinX, cosX, ts, rh; var dlon = adjust_lon(lon - this.long0); if (Math.abs(Math.abs(lon - this.long0) - Math.PI) <= EPSLN && Math.abs(lat + this.lat0) <= EPSLN) { //case of the origine point //trace('stere:this is the origin point'); p.x = NaN; p.y = NaN; return p; } if (this.sphere) { //trace('stere:sphere case'); A = 2 * this.k0 / (1 + this.sinlat0 * sinlat + this.coslat0 * coslat * Math.cos(dlon)); p.x = this.a * A * coslat * Math.sin(dlon) + this.x0; p.y = this.a * A * (this.coslat0 * sinlat - this.sinlat0 * coslat * Math.cos(dlon)) + this.y0; return p; } else { X = 2 * Math.atan(this.ssfn_(lat, sinlat, this.e)) - HALF_PI; cosX = Math.cos(X); sinX = Math.sin(X); if (Math.abs(this.coslat0) <= EPSLN) { ts = tsfnz(this.e, lat * this.con, this.con * sinlat); rh = 2 * this.a * this.k0 * ts / this.cons; p.x = this.x0 + rh * Math.sin(lon - this.long0); p.y = this.y0 - this.con * rh * Math.cos(lon - this.long0); //trace(p.toString()); return p; } else if (Math.abs(this.sinlat0) < EPSLN) { //Eq //trace('stere:equateur'); A = 2 * this.a * this.k0 / (1 + cosX * Math.cos(dlon)); p.y = A * sinX; } else { //other case //trace('stere:normal case'); A = 2 * this.a * this.k0 * this.ms1 / (this.cosX0 * (1 + this.sinX0 * sinX + this.cosX0 * cosX * Math.cos(dlon))); p.y = A * (this.cosX0 * sinX - this.sinX0 * cosX * Math.cos(dlon)) + this.y0; } p.x = A * cosX * Math.sin(dlon) + this.x0; } //trace(p.toString()); return p; } //* Stereographic inverse equations--mapping x,y to lat/long function inverse$6(p) { p.x -= this.x0; p.y -= this.y0; var lon, lat, ts, ce, Chi; var rh = Math.sqrt(p.x * p.x + p.y * p.y); if (this.sphere) { var c = 2 * Math.atan(rh / (2 * this.a * this.k0)); lon = this.long0; lat = this.lat0; if (rh <= EPSLN) { p.x = lon; p.y = lat; return p; } lat = Math.asin(Math.cos(c) * this.sinlat0 + p.y * Math.sin(c) * this.coslat0 / rh); if (Math.abs(this.coslat0) < EPSLN) { if (this.lat0 > 0) { lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); } else { lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); } } else { lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(c), rh * this.coslat0 * Math.cos(c) - p.y * this.sinlat0 * Math.sin(c))); } p.x = lon; p.y = lat; return p; } else { if (Math.abs(this.coslat0) <= EPSLN) { if (rh <= EPSLN) { lat = this.lat0; lon = this.long0; p.x = lon; p.y = lat; //trace(p.toString()); return p; } p.x *= this.con; p.y *= this.con; ts = rh * this.cons / (2 * this.a * this.k0); lat = this.con * phi2z(this.e, ts); lon = this.con * adjust_lon(this.con * this.long0 + Math.atan2(p.x, - 1 * p.y)); } else { ce = 2 * Math.atan(rh * this.cosX0 / (2 * this.a * this.k0 * this.ms1)); lon = this.long0; if (rh <= EPSLN) { Chi = this.X0; } else { Chi = Math.asin(Math.cos(ce) * this.sinX0 + p.y * Math.sin(ce) * this.cosX0 / rh); lon = adjust_lon(this.long0 + Math.atan2(p.x * Math.sin(ce), rh * this.cosX0 * Math.cos(ce) - p.y * this.sinX0 * Math.sin(ce))); } lat = -1 * phi2z(this.e, Math.tan(0.5 * (HALF_PI + Chi))); } } p.x = lon; p.y = lat; //trace(p.toString()); return p; } var names$8 = ["stere", "Stereographic_South_Pole", "Polar Stereographic (variant B)"]; var stere = { init: init$7, forward: forward$6, inverse: inverse$6, names: names$8, ssfn_: ssfn_ }; /* references: Formules et constantes pour le Calcul pour la projection cylindrique conforme à axe oblique et pour la transformation entre des systèmes de référence. http://www.swisstopo.admin.ch/internet/swisstopo/fr/home/topics/survey/sys/refsys/switzerland.parsysrelated1.31216.downloadList.77004.DownloadFile.tmp/swissprojectionfr.pdf */ function init$8() { var phy0 = this.lat0; this.lambda0 = this.long0; var sinPhy0 = Math.sin(phy0); var semiMajorAxis = this.a; var invF = this.rf; var flattening = 1 / invF; var e2 = 2 * flattening - Math.pow(flattening, 2); var e = this.e = Math.sqrt(e2); this.R = this.k0 * semiMajorAxis * Math.sqrt(1 - e2) / (1 - e2 * Math.pow(sinPhy0, 2)); this.alpha = Math.sqrt(1 + e2 / (1 - e2) * Math.pow(Math.cos(phy0), 4)); this.b0 = Math.asin(sinPhy0 / this.alpha); var k1 = Math.log(Math.tan(Math.PI / 4 + this.b0 / 2)); var k2 = Math.log(Math.tan(Math.PI / 4 + phy0 / 2)); var k3 = Math.log((1 + e * sinPhy0) / (1 - e * sinPhy0)); this.K = k1 - this.alpha * k2 + this.alpha * e / 2 * k3; } function forward$7(p) { var Sa1 = Math.log(Math.tan(Math.PI / 4 - p.y / 2)); var Sa2 = this.e / 2 * Math.log((1 + this.e * Math.sin(p.y)) / (1 - this.e * Math.sin(p.y))); var S = -this.alpha * (Sa1 + Sa2) + this.K; // spheric latitude var b = 2 * (Math.atan(Math.exp(S)) - Math.PI / 4); // spheric longitude var I = this.alpha * (p.x - this.lambda0); // psoeudo equatorial rotation var rotI = Math.atan(Math.sin(I) / (Math.sin(this.b0) * Math.tan(b) + Math.cos(this.b0) * Math.cos(I))); var rotB = Math.asin(Math.cos(this.b0) * Math.sin(b) - Math.sin(this.b0) * Math.cos(b) * Math.cos(I)); p.y = this.R / 2 * Math.log((1 + Math.sin(rotB)) / (1 - Math.sin(rotB))) + this.y0; p.x = this.R * rotI + this.x0; return p; } function inverse$7(p) { var Y = p.x - this.x0; var X = p.y - this.y0; var rotI = Y / this.R; var rotB = 2 * (Math.atan(Math.exp(X / this.R)) - Math.PI / 4); var b = Math.asin(Math.cos(this.b0) * Math.sin(rotB) + Math.sin(this.b0) * Math.cos(rotB) * Math.cos(rotI)); var I = Math.atan(Math.sin(rotI) / (Math.cos(this.b0) * Math.cos(rotI) - Math.sin(this.b0) * Math.tan(rotB))); var lambda = this.lambda0 + I / this.alpha; var S = 0; var phy = b; var prevPhy = -1000; var iteration = 0; while (Math.abs(phy - prevPhy) > 0.0000001) { if (++iteration > 20) { //...reportError("omercFwdInfinity"); return; } //S = Math.log(Math.tan(Math.PI / 4 + phy / 2)); S = 1 / this.alpha * (Math.log(Math.tan(Math.PI / 4 + b / 2)) - this.K) + this.e * Math.log(Math.tan(Math.PI / 4 + Math.asin(this.e * Math.sin(phy)) / 2)); prevPhy = phy; phy = 2 * Math.atan(Math.exp(S)) - Math.PI / 2; } p.x = lambda; p.y = phy; return p; } var names$9 = ["somerc"]; var somerc = { init: init$8, forward: forward$7, inverse: inverse$7, names: names$9 }; /* Initialize the Oblique Mercator projection ------------------------------------------*/ function init$9() { this.no_off = this.no_off || false; this.no_rot = this.no_rot || false; if (isNaN(this.k0)) { this.k0 = 1; } var sinlat = Math.sin(this.lat0); var coslat = Math.cos(this.lat0); var con = this.e * sinlat; this.bl = Math.sqrt(1 + this.es / (1 - this.es) * Math.pow(coslat, 4)); this.al = this.a * this.bl * this.k0 * Math.sqrt(1 - this.es) / (1 - con * con); var t0 = tsfnz(this.e, this.lat0, sinlat); var dl = this.bl / coslat * Math.sqrt((1 - this.es) / (1 - con * con)); if (dl * dl < 1) { dl = 1; } var fl; var gl; if (!isNaN(this.longc)) { //Central point and azimuth method if (this.lat0 >= 0) { fl = dl + Math.sqrt(dl * dl - 1); } else { fl = dl - Math.sqrt(dl * dl - 1); } this.el = fl * Math.pow(t0, this.bl); gl = 0.5 * (fl - 1 / fl); this.gamma0 = Math.asin(Math.sin(this.alpha) / dl); this.long0 = this.longc - Math.asin(gl * Math.tan(this.gamma0)) / this.bl; } else { //2 points method var t1 = tsfnz(this.e, this.lat1, Math.sin(this.lat1)); var t2 = tsfnz(this.e, this.lat2, Math.sin(this.lat2)); if (this.lat0 >= 0) { this.el = (dl + Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); } else { this.el = (dl - Math.sqrt(dl * dl - 1)) * Math.pow(t0, this.bl); } var hl = Math.pow(t1, this.bl); var ll = Math.pow(t2, this.bl); fl = this.el / hl; gl = 0.5 * (fl - 1 / fl); var jl = (this.el * this.el - ll * hl) / (this.el * this.el + ll * hl); var pl = (ll - hl) / (ll + hl); var dlon12 = adjust_lon(this.long1 - this.long2); this.long0 = 0.5 * (this.long1 + this.long2) - Math.atan(jl * Math.tan(0.5 * this.bl * (dlon12)) / pl) / this.bl; this.long0 = adjust_lon(this.long0); var dlon10 = adjust_lon(this.long1 - this.long0); this.gamma0 = Math.atan(Math.sin(this.bl * (dlon10)) / gl); this.alpha = Math.asin(dl * Math.sin(this.gamma0)); } if (this.no_off) { this.uc = 0; } else { if (this.lat0 >= 0) { this.uc = this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); } else { this.uc = -1 * this.al / this.bl * Math.atan2(Math.sqrt(dl * dl - 1), Math.cos(this.alpha)); } } } /* Oblique Mercator forward equations--mapping lat,long to x,y ----------------------------------------------------------*/ function forward$8(p) { var lon = p.x; var lat = p.y; var dlon = adjust_lon(lon - this.long0); var us, vs; var con; if (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN) { if (lat > 0) { con = -1; } else { con = 1; } vs = this.al / this.bl * Math.log(Math.tan(FORTPI + con * this.gamma0 * 0.5)); us = -1 * con * HALF_PI * this.al / this.bl; } else { var t = tsfnz(this.e, lat, Math.sin(lat)); var ql = this.el / Math.pow(t, this.bl); var sl = 0.5 * (ql - 1 / ql); var tl = 0.5 * (ql + 1 / ql); var vl = Math.sin(this.bl * (dlon)); var ul = (sl * Math.sin(this.gamma0) - vl * Math.cos(this.gamma0)) / tl; if (Math.abs(Math.abs(ul) - 1) <= EPSLN) { vs = Number.POSITIVE_INFINITY; } else { vs = 0.5 * this.al * Math.log((1 - ul) / (1 + ul)) / this.bl; } if (Math.abs(Math.cos(this.bl * (dlon))) <= EPSLN) { us = this.al * this.bl * (dlon); } else { us = this.al * Math.atan2(sl * Math.cos(this.gamma0) + vl * Math.sin(this.gamma0), Math.cos(this.bl * dlon)) / this.bl; } } if (this.no_rot) { p.x = this.x0 + us; p.y = this.y0 + vs; } else { us -= this.uc; p.x = this.x0 + vs * Math.cos(this.alpha) + us * Math.sin(this.alpha); p.y = this.y0 + us * Math.cos(this.alpha) - vs * Math.sin(this.alpha); } return p; } function inverse$8(p) { var us, vs; if (this.no_rot) { vs = p.y - this.y0; us = p.x - this.x0; } else { vs = (p.x - this.x0) * Math.cos(this.alpha) - (p.y - this.y0) * Math.sin(this.alpha); us = (p.y - this.y0) * Math.cos(this.alpha) + (p.x - this.x0) * Math.sin(this.alpha); us += this.uc; } var qp = Math.exp(-1 * this.bl * vs / this.al); var sp = 0.5 * (qp - 1 / qp); var tp = 0.5 * (qp + 1 / qp); var vp = Math.sin(this.bl * us / this.al); var up = (vp * Math.cos(this.gamma0) + sp * Math.sin(this.gamma0)) / tp; var ts = Math.pow(this.el / Math.sqrt((1 + up) / (1 - up)), 1 / this.bl); if (Math.abs(up - 1) < EPSLN) { p.x = this.long0; p.y = HALF_PI; } else if (Math.abs(up + 1) < EPSLN) { p.x = this.long0; p.y = -1 * HALF_PI; } else { p.y = phi2z(this.e, ts); p.x = adjust_lon(this.long0 - Math.atan2(sp * Math.cos(this.gamma0) - vp * Math.sin(this.gamma0), Math.cos(this.bl * us / this.al)) / this.bl); } return p; } var names$10 = ["Hotine_Oblique_Mercator", "Hotine Oblique Mercator", "Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "Hotine_Oblique_Mercator_Azimuth_Center", "omerc"]; var omerc = { init: init$9, forward: forward$8, inverse: inverse$8, names: names$10 }; function init$10() { // array of: r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north //double c_lat; /* center latitude */ //double c_lon; /* center longitude */ //double lat1; /* first standard parallel */ //double lat2; /* second standard parallel */ //double r_maj; /* major axis */ //double r_min; /* minor axis */ //double false_east; /* x offset in meters */ //double false_north; /* y offset in meters */ if (!this.lat2) { this.lat2 = this.lat1; } //if lat2 is not defined if (!this.k0) { this.k0 = 1; } this.x0 = this.x0 || 0; this.y0 = this.y0 || 0; // Standard Parallels cannot be equal and on opposite sides of the equator if (Math.abs(this.lat1 + this.lat2) < EPSLN) { return; } var temp = this.b / this.a; this.e = Math.sqrt(1 - temp * temp); var sin1 = Math.sin(this.lat1); var cos1 = Math.cos(this.lat1); var ms1 = msfnz(this.e, sin1, cos1); var ts1 = tsfnz(this.e, this.lat1, sin1); var sin2 = Math.sin(this.lat2); var cos2 = Math.cos(this.lat2); var ms2 = msfnz(this.e, sin2, cos2); var ts2 = tsfnz(this.e, this.lat2, sin2); var ts0 = tsfnz(this.e, this.lat0, Math.sin(this.lat0)); if (Math.abs(this.lat1 - this.lat2) > EPSLN) { this.ns = Math.log(ms1 / ms2) / Math.log(ts1 / ts2); } else { this.ns = sin1; } if (isNaN(this.ns)) { this.ns = sin1; } this.f0 = ms1 / (this.ns * Math.pow(ts1, this.ns)); this.rh = this.a * this.f0 * Math.pow(ts0, this.ns); if (!this.title) { this.title = "Lambert Conformal Conic"; } } // Lambert Conformal conic forward equations--mapping lat,long to x,y // ----------------------------------------------------------------- function forward$9(p) { var lon = p.x; var lat = p.y; // singular cases : if (Math.abs(2 * Math.abs(lat) - Math.PI) <= EPSLN) { lat = sign(lat) * (HALF_PI - 2 * EPSLN); } var con = Math.abs(Math.abs(lat) - HALF_PI); var ts, rh1; if (con > EPSLN) { ts = tsfnz(this.e, lat, Math.sin(lat)); rh1 = this.a * this.f0 * Math.pow(ts, this.ns); } else { con = lat * this.ns; if (con <= 0) { return null; } rh1 = 0; } var theta = this.ns * adjust_lon(lon - this.long0); p.x = this.k0 * (rh1 * Math.sin(theta)) + this.x0; p.y = this.k0 * (this.rh - rh1 * Math.cos(theta)) + this.y0; return p; } // Lambert Conformal Conic inverse equations--mapping x,y to lat/long // ----------------------------------------------------------------- function inverse$9(p) { var rh1, con, ts; var lat, lon; var x = (p.x - this.x0) / this.k0; var y = (this.rh - (p.y - this.y0) / this.k0); if (this.ns > 0) { rh1 = Math.sqrt(x * x + y * y); con = 1; } else { rh1 = -Math.sqrt(x * x + y * y); con = -1; } var theta = 0; if (rh1 !== 0) { theta = Math.atan2((con * x), (con * y)); } if ((rh1 !== 0) || (this.ns > 0)) { con = 1 / this.ns; ts = Math.pow((rh1 / (this.a * this.f0)), con); lat = phi2z(this.e, ts); if (lat === -9999) { return null; } } else { lat = -HALF_PI; } lon = adjust_lon(theta / this.ns + this.long0); p.x = lon; p.y = lat; return p; } var names$11 = ["Lambert Tangential Conformal Conic Projection", "Lambert_Conformal_Conic", "Lambert_Conformal_Conic_2SP", "lcc"]; var lcc = { init: init$10, forward: forward$9, inverse: inverse$9, names: names$11 }; function init$11() { this.a = 6377397.155; this.es = 0.006674372230614; this.e = Math.sqrt(this.es); if (!this.lat0) { this.lat0 = 0.863937979737193; } if (!this.long0) { this.long0 = 0.7417649320975901 - 0.308341501185665; } /* if scale not set default to 0.9999 */ if (!this.k0) { this.k0 = 0.9999; } this.s45 = 0.785398163397448; /* 45 */ this.s90 = 2 * this.s45; this.fi0 = this.lat0; this.e2 = this.es; this.e = Math.sqrt(this.e2); this.alfa = Math.sqrt(1 + (this.e2 * Math.pow(Math.cos(this.fi0), 4)) / (1 - this.e2)); this.uq = 1.04216856380474; this.u0 = Math.asin(Math.sin(this.fi0) / this.alfa); this.g = Math.pow((1 + this.e * Math.sin(this.fi0)) / (1 - this.e * Math.sin(this.fi0)), this.alfa * this.e / 2); this.k = Math.tan(this.u0 / 2 + this.s45) / Math.pow(Math.tan(this.fi0 / 2 + this.s45), this.alfa) * this.g; this.k1 = this.k0; this.n0 = this.a * Math.sqrt(1 - this.e2) / (1 - this.e2 * Math.pow(Math.sin(this.fi0), 2)); this.s0 = 1.37008346281555; this.n = Math.sin(this.s0); this.ro0 = this.k1 * this.n0 / Math.tan(this.s0); this.ad = this.s90 - this.uq; } /* ellipsoid */ /* calculate xy from lat/lon */ /* Constants, identical to inverse transform function */ function forward$10(p) { var gfi, u, deltav, s, d, eps, ro; var lon = p.x; var lat = p.y; var delta_lon = adjust_lon(lon - this.long0); /* Transformation */ gfi = Math.pow(((1 + this.e * Math.sin(lat)) / (1 - this.e * Math.sin(lat))), (this.alfa * this.e / 2)); u = 2 * (Math.atan(this.k * Math.pow(Math.tan(lat / 2 + this.s45), this.alfa) / gfi) - this.s45); deltav = -delta_lon * this.alfa; s = Math.asin(Math.cos(this.ad) * Math.sin(u) + Math.sin(this.ad) * Math.cos(u) * Math.cos(deltav)); d = Math.asin(Math.cos(u) * Math.sin(deltav) / Math.cos(s)); eps = this.n * d; ro = this.ro0 * Math.pow(Math.tan(this.s0 / 2 + this.s45), this.n) / Math.pow(Math.tan(s / 2 + this.s45), this.n); p.y = ro * Math.cos(eps) / 1; p.x = ro * Math.sin(eps) / 1; if (!this.czech) { p.y *= -1; p.x *= -1; } return (p); } /* calculate lat/lon from xy */ function inverse$10(p) { var u, deltav, s, d, eps, ro, fi1; var ok; /* Transformation */ /* revert y, x*/ var tmp = p.x; p.x = p.y; p.y = tmp; if (!this.czech) { p.y *= -1; p.x *= -1; } ro = Math.sqrt(p.x * p.x + p.y * p.y); eps = Math.atan2(p.y, p.x); d = eps / Math.sin(this.s0); s = 2 * (Math.atan(Math.pow(this.ro0 / ro, 1 / this.n) * Math.tan(this.s0 / 2 + this.s45)) - this.s45); u = Math.asin(Math.cos(this.ad) * Math.sin(s) - Math.sin(this.ad) * Math.cos(s) * Math.cos(d)); deltav = Math.asin(Math.cos(s) * Math.sin(d) / Math.cos(u)); p.x = this.long0 - deltav / this.alfa; fi1 = u; ok = 0; var iter = 0; do { p.y = 2 * (Math.atan(Math.pow(this.k, - 1 / this.alfa) * Math.pow(Math.tan(u / 2 + this.s45), 1 / this.alfa) * Math.pow((1 + this.e * Math.sin(fi1)) / (1 - this.e * Math.sin(fi1)), this.e / 2)) - this.s45); if (Math.abs(fi1 - p.y) < 0.0000000001) { ok = 1; } fi1 = p.y; iter += 1; } while (ok === 0 && iter < 15); if (iter >= 15) { return null; } return (p); } var names$12 = ["Krovak", "krovak"]; var krovak = { init: init$11, forward: forward$10, inverse: inverse$10, names: names$12 }; var mlfn = function(e0, e1, e2, e3, phi) { return (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi)); }; var e0fn = function(x) { return (1 - 0.25 * x * (1 + x / 16 * (3 + 1.25 * x))); }; var e1fn = function(x) { return (0.375 * x * (1 + 0.25 * x * (1 + 0.46875 * x))); }; var e2fn = function(x) { return (0.05859375 * x * x * (1 + 0.75 * x)); }; var e3fn = function(x) { return (x * x * x * (35 / 3072)); }; var gN = function(a, e, sinphi) { var temp = e * sinphi; return a / Math.sqrt(1 - temp * temp); }; var adjust_lat = function(x) { return (Math.abs(x) < HALF_PI) ? x : (x - (sign(x) * Math.PI)); }; var imlfn = function(ml, e0, e1, e2, e3) { var phi; var dphi; phi = ml / e0; for (var i = 0; i < 15; i++) { dphi = (ml - (e0 * phi - e1 * Math.sin(2 * phi) + e2 * Math.sin(4 * phi) - e3 * Math.sin(6 * phi))) / (e0 - 2 * e1 * Math.cos(2 * phi) + 4 * e2 * Math.cos(4 * phi) - 6 * e3 * Math.cos(6 * phi)); phi += dphi; if (Math.abs(dphi) <= 0.0000000001) { return phi; } } //..reportError("IMLFN-CONV:Latitude failed to converge after 15 iterations"); return NaN; }; function init$12() { if (!this.sphere) { this.e0 = e0fn(this.es); this.e1 = e1fn(this.es); this.e2 = e2fn(this.es); this.e3 = e3fn(this.es); this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); } } /* Cassini forward equations--mapping lat,long to x,y -----------------------------------------------------------------------*/ function forward$11(p) { /* Forward equations -----------------*/ var x, y; var lam = p.x; var phi = p.y; lam = adjust_lon(lam - this.long0); if (this.sphere) { x = this.a * Math.asin(Math.cos(phi) * Math.sin(lam)); y = this.a * (Math.atan2(Math.tan(phi), Math.cos(lam)) - this.lat0); } else { //ellipsoid var sinphi = Math.sin(phi); var cosphi = Math.cos(phi); var nl = gN(this.a, this.e, sinphi); var tl = Math.tan(phi) * Math.tan(phi); var al = lam * Math.cos(phi); var asq = al * al; var cl = this.es * cosphi * cosphi / (1 - this.es); var ml = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); x = nl * al * (1 - asq * tl * (1 / 6 - (8 - tl + 8 * cl) * asq / 120)); y = ml - this.ml0 + nl * sinphi / cosphi * asq * (0.5 + (5 - tl + 6 * cl) * asq / 24); } p.x = x + this.x0; p.y = y + this.y0; return p; } /* Inverse equations -----------------*/ function inverse$11(p) { p.x -= this.x0; p.y -= this.y0; var x = p.x / this.a; var y = p.y / this.a; var phi, lam; if (this.sphere) { var dd = y + this.lat0; phi = Math.asin(Math.sin(dd) * Math.cos(x)); lam = Math.atan2(Math.tan(x), Math.cos(dd)); } else { /* ellipsoid */ var ml1 = this.ml0 / this.a + y; var phi1 = imlfn(ml1, this.e0, this.e1, this.e2, this.e3); if (Math.abs(Math.abs(phi1) - HALF_PI) <= EPSLN) { p.x = this.long0; p.y = HALF_PI; if (y < 0) { p.y *= -1; } return p; } var nl1 = gN(this.a, this.e, Math.sin(phi1)); var rl1 = nl1 * nl1 * nl1 / this.a / this.a * (1 - this.es); var tl1 = Math.pow(Math.tan(phi1), 2); var dl = x * this.a / nl1; var dsq = dl * dl; phi = phi1 - nl1 * Math.tan(phi1) / rl1 * dl * dl * (0.5 - (1 + 3 * tl1) * dl * dl / 24); lam = dl * (1 - dsq * (tl1 / 3 + (1 + 3 * tl1) * tl1 * dsq / 15)) / Math.cos(phi1); } p.x = adjust_lon(lam + this.long0); p.y = adjust_lat(phi); return p; } var names$13 = ["Cassini", "Cassini_Soldner", "cass"]; var cass = { init: init$12, forward: forward$11, inverse: inverse$11, names: names$13 }; var qsfnz = function(eccent, sinphi) { var con; if (eccent > 1.0e-7) { con = eccent * sinphi; return ((1 - eccent * eccent) * (sinphi / (1 - con * con) - (0.5 / eccent) * Math.log((1 - con) / (1 + con)))); } else { return (2 * sinphi); } }; /* reference "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. */ var S_POLE = 1; var N_POLE = 2; var EQUIT = 3; var OBLIQ = 4; /* Initialize the Lambert Azimuthal Equal Area projection ------------------------------------------------------*/ function init$13() { var t = Math.abs(this.lat0); if (Math.abs(t - HALF_PI) < EPSLN) { this.mode = this.lat0 < 0 ? this.S_POLE : this.N_POLE; } else if (Math.abs(t) < EPSLN) { this.mode = this.EQUIT; } else { this.mode = this.OBLIQ; } if (this.es > 0) { var sinphi; this.qp = qsfnz(this.e, 1); this.mmf = 0.5 / (1 - this.es); this.apa = authset(this.es); switch (this.mode) { case this.N_POLE: this.dd = 1; break; case this.S_POLE: this.dd = 1; break; case this.EQUIT: this.rq = Math.sqrt(0.5 * this.qp); this.dd = 1 / this.rq; this.xmf = 1; this.ymf = 0.5 * this.qp; break; case this.OBLIQ: this.rq = Math.sqrt(0.5 * this.qp); sinphi = Math.sin(this.lat0); this.sinb1 = qsfnz(this.e, sinphi) / this.qp; this.cosb1 = Math.sqrt(1 - this.sinb1 * this.sinb1); this.dd = Math.cos(this.lat0) / (Math.sqrt(1 - this.es * sinphi * sinphi) * this.rq * this.cosb1); this.ymf = (this.xmf = this.rq) / this.dd; this.xmf *= this.dd; break; } } else { if (this.mode === this.OBLIQ) { this.sinph0 = Math.sin(this.lat0); this.cosph0 = Math.cos(this.lat0); } } } /* Lambert Azimuthal Equal Area forward equations--mapping lat,long to x,y -----------------------------------------------------------------------*/ function forward$12(p) { /* Forward equations -----------------*/ var x, y, coslam, sinlam, sinphi, q, sinb, cosb, b, cosphi; var lam = p.x; var phi = p.y; lam = adjust_lon(lam - this.long0); if (this.sphere) { sinphi = Math.sin(phi); cosphi = Math.cos(phi); coslam = Math.cos(lam); if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { y = (this.mode === this.EQUIT) ? 1 + cosphi * coslam : 1 + this.sinph0 * sinphi + this.cosph0 * cosphi * coslam; if (y <= EPSLN) { return null; } y = Math.sqrt(2 / y); x = y * cosphi * Math.sin(lam); y *= (this.mode === this.EQUIT) ? sinphi : this.cosph0 * sinphi - this.sinph0 * cosphi * coslam; } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { if (this.mode === this.N_POLE) { coslam = -coslam; } if (Math.abs(phi + this.phi0) < EPSLN) { return null; } y = FORTPI - phi * 0.5; y = 2 * ((this.mode === this.S_POLE) ? Math.cos(y) : Math.sin(y)); x = y * Math.sin(lam); y *= coslam; } } else { sinb = 0; cosb = 0; b = 0; coslam = Math.cos(lam); sinlam = Math.sin(lam); sinphi = Math.sin(phi); q = qsfnz(this.e, sinphi); if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { sinb = q / this.qp; cosb = Math.sqrt(1 - sinb * sinb); } switch (this.mode) { case this.OBLIQ: b = 1 + this.sinb1 * sinb + this.cosb1 * cosb * coslam; break; case this.EQUIT: b = 1 + cosb * coslam; break; case this.N_POLE: b = HALF_PI + phi; q = this.qp - q; break; case this.S_POLE: b = phi - HALF_PI; q = this.qp + q; break; } if (Math.abs(b) < EPSLN) { return null; } switch (this.mode) { case this.OBLIQ: case this.EQUIT: b = Math.sqrt(2 / b); if (this.mode === this.OBLIQ) { y = this.ymf * b * (this.cosb1 * sinb - this.sinb1 * cosb * coslam); } else { y = (b = Math.sqrt(2 / (1 + cosb * coslam))) * sinb * this.ymf; } x = this.xmf * b * cosb * sinlam; break; case this.N_POLE: case this.S_POLE: if (q >= 0) { x = (b = Math.sqrt(q)) * sinlam; y = coslam * ((this.mode === this.S_POLE) ? b : -b); } else { x = y = 0; } break; } } p.x = this.a * x + this.x0; p.y = this.a * y + this.y0; return p; } /* Inverse equations -----------------*/ function inverse$12(p) { p.x -= this.x0; p.y -= this.y0; var x = p.x / this.a; var y = p.y / this.a; var lam, phi, cCe, sCe, q, rho, ab; if (this.sphere) { var cosz = 0, rh, sinz = 0; rh = Math.sqrt(x * x + y * y); phi = rh * 0.5; if (phi > 1) { return null; } phi = 2 * Math.asin(phi); if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { sinz = Math.sin(phi); cosz = Math.cos(phi); } switch (this.mode) { case this.EQUIT: phi = (Math.abs(rh) <= EPSLN) ? 0 : Math.asin(y * sinz / rh); x *= sinz; y = cosz * rh; break; case this.OBLIQ: phi = (Math.abs(rh) <= EPSLN) ? this.phi0 : Math.asin(cosz * this.sinph0 + y * sinz * this.cosph0 / rh); x *= sinz * this.cosph0; y = (cosz - Math.sin(phi) * this.sinph0) * rh; break; case this.N_POLE: y = -y; phi = HALF_PI - phi; break; case this.S_POLE: phi -= HALF_PI; break; } lam = (y === 0 && (this.mode === this.EQUIT || this.mode === this.OBLIQ)) ? 0 : Math.atan2(x, y); } else { ab = 0; if (this.mode === this.OBLIQ || this.mode === this.EQUIT) { x /= this.dd; y *= this.dd; rho = Math.sqrt(x * x + y * y); if (rho < EPSLN) { p.x = 0; p.y = this.phi0; return p; } sCe = 2 * Math.asin(0.5 * rho / this.rq); cCe = Math.cos(sCe); x *= (sCe = Math.sin(sCe)); if (this.mode === this.OBLIQ) { ab = cCe * this.sinb1 + y * sCe * this.cosb1 / rho; q = this.qp * ab; y = rho * this.cosb1 * cCe - y * this.sinb1 * sCe; } else { ab = y * sCe / rho; q = this.qp * ab; y = rho * cCe; } } else if (this.mode === this.N_POLE || this.mode === this.S_POLE) { if (this.mode === this.N_POLE) { y = -y; } q = (x * x + y * y); if (!q) { p.x = 0; p.y = this.phi0; return p; } ab = 1 - q / this.qp; if (this.mode === this.S_POLE) { ab = -ab; } } lam = Math.atan2(x, y); phi = authlat(Math.asin(ab), this.apa); } p.x = adjust_lon(this.long0 + lam); p.y = phi; return p; } /* determine latitude from authalic latitude */ var P00 = 0.33333333333333333333; var P01 = 0.17222222222222222222; var P02 = 0.10257936507936507936; var P10 = 0.06388888888888888888; var P11 = 0.06640211640211640211; var P20 = 0.01641501294219154443; function authset(es) { var t; var APA = []; APA[0] = es * P00; t = es * es; APA[0] += t * P01; APA[1] = t * P10; t *= es; APA[0] += t * P02; APA[1] += t * P11; APA[2] = t * P20; return APA; } function authlat(beta, APA) { var t = beta + beta; return (beta + APA[0] * Math.sin(t) + APA[1] * Math.sin(t + t) + APA[2] * Math.sin(t + t + t)); } var names$14 = ["Lambert Azimuthal Equal Area", "Lambert_Azimuthal_Equal_Area", "laea"]; var laea = { init: init$13, forward: forward$12, inverse: inverse$12, names: names$14, S_POLE: S_POLE, N_POLE: N_POLE, EQUIT: EQUIT, OBLIQ: OBLIQ }; var asinz = function(x) { if (Math.abs(x) > 1) { x = (x > 1) ? 1 : -1; } return Math.asin(x); }; function init$14() { if (Math.abs(this.lat1 + this.lat2) < EPSLN) { return; } this.temp = this.b / this.a; this.es = 1 - Math.pow(this.temp, 2); this.e3 = Math.sqrt(this.es); this.sin_po = Math.sin(this.lat1); this.cos_po = Math.cos(this.lat1); this.t1 = this.sin_po; this.con = this.sin_po; this.ms1 = msfnz(this.e3, this.sin_po, this.cos_po); this.qs1 = qsfnz(this.e3, this.sin_po, this.cos_po); this.sin_po = Math.sin(this.lat2); this.cos_po = Math.cos(this.lat2); this.t2 = this.sin_po; this.ms2 = msfnz(this.e3, this.sin_po, this.cos_po); this.qs2 = qsfnz(this.e3, this.sin_po, this.cos_po); this.sin_po = Math.sin(this.lat0); this.cos_po = Math.cos(this.lat0); this.t3 = this.sin_po; this.qs0 = qsfnz(this.e3, this.sin_po, this.cos_po); if (Math.abs(this.lat1 - this.lat2) > EPSLN) { this.ns0 = (this.ms1 * this.ms1 - this.ms2 * this.ms2) / (this.qs2 - this.qs1); } else { this.ns0 = this.con; } this.c = this.ms1 * this.ms1 + this.ns0 * this.qs1; this.rh = this.a * Math.sqrt(this.c - this.ns0 * this.qs0) / this.ns0; } /* Albers Conical Equal Area forward equations--mapping lat,long to x,y -------------------------------------------------------------------*/ function forward$13(p) { var lon = p.x; var lat = p.y; this.sin_phi = Math.sin(lat); this.cos_phi = Math.cos(lat); var qs = qsfnz(this.e3, this.sin_phi, this.cos_phi); var rh1 = this.a * Math.sqrt(this.c - this.ns0 * qs) / this.ns0; var theta = this.ns0 * adjust_lon(lon - this.long0); var x = rh1 * Math.sin(theta) + this.x0; var y = this.rh - rh1 * Math.cos(theta) + this.y0; p.x = x; p.y = y; return p; } function inverse$13(p) { var rh1, qs, con, theta, lon, lat; p.x -= this.x0; p.y = this.rh - p.y + this.y0; if (this.ns0 >= 0) { rh1 = Math.sqrt(p.x * p.x + p.y * p.y); con = 1; } else { rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); con = -1; } theta = 0; if (rh1 !== 0) { theta = Math.atan2(con * p.x, con * p.y); } con = rh1 * this.ns0 / this.a; if (this.sphere) { lat = Math.asin((this.c - con * con) / (2 * this.ns0)); } else { qs = (this.c - con * con) / this.ns0; lat = this.phi1z(this.e3, qs); } lon = adjust_lon(theta / this.ns0 + this.long0); p.x = lon; p.y = lat; return p; } /* Function to compute phi1, the latitude for the inverse of the Albers Conical Equal-Area projection. -------------------------------------------*/ function phi1z(eccent, qs) { var sinphi, cosphi, con, com, dphi; var phi = asinz(0.5 * qs); if (eccent < EPSLN) { return phi; } var eccnts = eccent * eccent; for (var i = 1; i <= 25; i++) { sinphi = Math.sin(phi); cosphi = Math.cos(phi); con = eccent * sinphi; com = 1 - con * con; dphi = 0.5 * com * com / cosphi * (qs / (1 - eccnts) - sinphi / com + 0.5 / eccent * Math.log((1 - con) / (1 + con))); phi = phi + dphi; if (Math.abs(dphi) <= 1e-7) { return phi; } } return null; } var names$15 = ["Albers_Conic_Equal_Area", "Albers", "aea"]; var aea = { init: init$14, forward: forward$13, inverse: inverse$13, names: names$15, phi1z: phi1z }; /* reference: Wolfram Mathworld "Gnomonic Projection" http://mathworld.wolfram.com/GnomonicProjection.html Accessed: 12th November 2009 */ function init$15() { /* Place parameters in static storage for common use -------------------------------------------------*/ this.sin_p14 = Math.sin(this.lat0); this.cos_p14 = Math.cos(this.lat0); // Approximation for projecting points to the horizon (infinity) this.infinity_dist = 1000 * this.a; this.rc = 1; } /* Gnomonic forward equations--mapping lat,long to x,y ---------------------------------------------------*/ function forward$14(p) { var sinphi, cosphi; /* sin and cos value */ var dlon; /* delta longitude value */ var coslon; /* cos of longitude */ var ksp; /* scale factor */ var g; var x, y; var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ dlon = adjust_lon(lon - this.long0); sinphi = Math.sin(lat); cosphi = Math.cos(lat); coslon = Math.cos(dlon); g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; ksp = 1; if ((g > 0) || (Math.abs(g) <= EPSLN)) { x = this.x0 + this.a * ksp * cosphi * Math.sin(dlon) / g; y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon) / g; } else { // Point is in the opposing hemisphere and is unprojectable // We still need to return a reasonable point, so we project // to infinity, on a bearing // equivalent to the northern hemisphere equivalent // This is a reasonable approximation for short shapes and lines that // straddle the horizon. x = this.x0 + this.infinity_dist * cosphi * Math.sin(dlon); y = this.y0 + this.infinity_dist * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); } p.x = x; p.y = y; return p; } function inverse$14(p) { var rh; /* Rho */ var sinc, cosc; var c; var lon, lat; /* Inverse equations -----------------*/ p.x = (p.x - this.x0) / this.a; p.y = (p.y - this.y0) / this.a; p.x /= this.k0; p.y /= this.k0; if ((rh = Math.sqrt(p.x * p.x + p.y * p.y))) { c = Math.atan2(rh, this.rc); sinc = Math.sin(c); cosc = Math.cos(c); lat = asinz(cosc * this.sin_p14 + (p.y * sinc * this.cos_p14) / rh); lon = Math.atan2(p.x * sinc, rh * this.cos_p14 * cosc - p.y * this.sin_p14 * sinc); lon = adjust_lon(this.long0 + lon); } else { lat = this.phic0; lon = 0; } p.x = lon; p.y = lat; return p; } var names$16 = ["gnom"]; var gnom = { init: init$15, forward: forward$14, inverse: inverse$14, names: names$16 }; var iqsfnz = function(eccent, q) { var temp = 1 - (1 - eccent * eccent) / (2 * eccent) * Math.log((1 - eccent) / (1 + eccent)); if (Math.abs(Math.abs(q) - temp) < 1.0E-6) { if (q < 0) { return (-1 * HALF_PI); } else { return HALF_PI; } } //var phi = 0.5* q/(1-eccent*eccent); var phi = Math.asin(0.5 * q); var dphi; var sin_phi; var cos_phi; var con; for (var i = 0; i < 30; i++) { sin_phi = Math.sin(phi); cos_phi = Math.cos(phi); con = eccent * sin_phi; dphi = Math.pow(1 - con * con, 2) / (2 * cos_phi) * (q / (1 - eccent * eccent) - sin_phi / (1 - con * con) + 0.5 / eccent * Math.log((1 - con) / (1 + con))); phi += dphi; if (Math.abs(dphi) <= 0.0000000001) { return phi; } } //console.log("IQSFN-CONV:Latitude failed to converge after 30 iterations"); return NaN; }; /* reference: "Cartographic Projection Procedures for the UNIX Environment- A User's Manual" by Gerald I. Evenden, USGS Open File Report 90-284and Release 4 Interim Reports (2003) */ function init$16() { //no-op if (!this.sphere) { this.k0 = msfnz(this.e, Math.sin(this.lat_ts), Math.cos(this.lat_ts)); } } /* Cylindrical Equal Area forward equations--mapping lat,long to x,y ------------------------------------------------------------*/ function forward$15(p) { var lon = p.x; var lat = p.y; var x, y; /* Forward equations -----------------*/ var dlon = adjust_lon(lon - this.long0); if (this.sphere) { x = this.x0 + this.a * dlon * Math.cos(this.lat_ts); y = this.y0 + this.a * Math.sin(lat) / Math.cos(this.lat_ts); } else { var qs = qsfnz(this.e, Math.sin(lat)); x = this.x0 + this.a * this.k0 * dlon; y = this.y0 + this.a * qs * 0.5 / this.k0; } p.x = x; p.y = y; return p; } /* Cylindrical Equal Area inverse equations--mapping x,y to lat/long ------------------------------------------------------------*/ function inverse$15(p) { p.x -= this.x0; p.y -= this.y0; var lon, lat; if (this.sphere) { lon = adjust_lon(this.long0 + (p.x / this.a) / Math.cos(this.lat_ts)); lat = Math.asin((p.y / this.a) * Math.cos(this.lat_ts)); } else { lat = iqsfnz(this.e, 2 * p.y * this.k0 / this.a); lon = adjust_lon(this.long0 + p.x / (this.a * this.k0)); } p.x = lon; p.y = lat; return p; } var names$17 = ["cea"]; var cea = { init: init$16, forward: forward$15, inverse: inverse$15, names: names$17 }; function init$17() { this.x0 = this.x0 || 0; this.y0 = this.y0 || 0; this.lat0 = this.lat0 || 0; this.long0 = this.long0 || 0; this.lat_ts = this.lat_ts || 0; this.title = this.title || "Equidistant Cylindrical (Plate Carre)"; this.rc = Math.cos(this.lat_ts); } // forward equations--mapping lat,long to x,y // ----------------------------------------------------------------- function forward$16(p) { var lon = p.x; var lat = p.y; var dlon = adjust_lon(lon - this.long0); var dlat = adjust_lat(lat - this.lat0); p.x = this.x0 + (this.a * dlon * this.rc); p.y = this.y0 + (this.a * dlat); return p; } // inverse equations--mapping x,y to lat/long // ----------------------------------------------------------------- function inverse$16(p) { var x = p.x; var y = p.y; p.x = adjust_lon(this.long0 + ((x - this.x0) / (this.a * this.rc))); p.y = adjust_lat(this.lat0 + ((y - this.y0) / (this.a))); return p; } var names$18 = ["Equirectangular", "Equidistant_Cylindrical", "eqc"]; var eqc = { init: init$17, forward: forward$16, inverse: inverse$16, names: names$18 }; var MAX_ITER$2 = 20; function init$18() { /* Place parameters in static storage for common use -------------------------------------------------*/ this.temp = this.b / this.a; this.es = 1 - Math.pow(this.temp, 2); // devait etre dans tmerc.js mais n y est pas donc je commente sinon retour de valeurs nulles this.e = Math.sqrt(this.es); this.e0 = e0fn(this.es); this.e1 = e1fn(this.es); this.e2 = e2fn(this.es); this.e3 = e3fn(this.es); this.ml0 = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); //si que des zeros le calcul ne se fait pas } /* Polyconic forward equations--mapping lat,long to x,y ---------------------------------------------------*/ function forward$17(p) { var lon = p.x; var lat = p.y; var x, y, el; var dlon = adjust_lon(lon - this.long0); el = dlon * Math.sin(lat); if (this.sphere) { if (Math.abs(lat) <= EPSLN) { x = this.a * dlon; y = -1 * this.a * this.lat0; } else { x = this.a * Math.sin(el) / Math.tan(lat); y = this.a * (adjust_lat(lat - this.lat0) + (1 - Math.cos(el)) / Math.tan(lat)); } } else { if (Math.abs(lat) <= EPSLN) { x = this.a * dlon; y = -1 * this.ml0; } else { var nl = gN(this.a, this.e, Math.sin(lat)) / Math.tan(lat); x = nl * Math.sin(el); y = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, lat) - this.ml0 + nl * (1 - Math.cos(el)); } } p.x = x + this.x0; p.y = y + this.y0; return p; } /* Inverse equations -----------------*/ function inverse$17(p) { var lon, lat, x, y, i; var al, bl; var phi, dphi; x = p.x - this.x0; y = p.y - this.y0; if (this.sphere) { if (Math.abs(y + this.a * this.lat0) <= EPSLN) { lon = adjust_lon(x / this.a + this.long0); lat = 0; } else { al = this.lat0 + y / this.a; bl = x * x / this.a / this.a + al * al; phi = al; var tanphi; for (i = MAX_ITER$2; i; --i) { tanphi = Math.tan(phi); dphi = -1 * (al * (phi * tanphi + 1) - phi - 0.5 * (phi * phi + bl) * tanphi) / ((phi - al) / tanphi - 1); phi += dphi; if (Math.abs(dphi) <= EPSLN) { lat = phi; break; } } lon = adjust_lon(this.long0 + (Math.asin(x * Math.tan(phi) / this.a)) / Math.sin(lat)); } } else { if (Math.abs(y + this.ml0) <= EPSLN) { lat = 0; lon = adjust_lon(this.long0 + x / this.a); } else { al = (this.ml0 + y) / this.a; bl = x * x / this.a / this.a + al * al; phi = al; var cl, mln, mlnp, ma; var con; for (i = MAX_ITER$2; i; --i) { con = this.e * Math.sin(phi); cl = Math.sqrt(1 - con * con) * Math.tan(phi); mln = this.a * mlfn(this.e0, this.e1, this.e2, this.e3, phi); mlnp = this.e0 - 2 * this.e1 * Math.cos(2 * phi) + 4 * this.e2 * Math.cos(4 * phi) - 6 * this.e3 * Math.cos(6 * phi); ma = mln / this.a; dphi = (al * (cl * ma + 1) - ma - 0.5 * cl * (ma * ma + bl)) / (this.es * Math.sin(2 * phi) * (ma * ma + bl - 2 * al * ma) / (4 * cl) + (al - ma) * (cl * mlnp - 2 / Math.sin(2 * phi)) - mlnp); phi -= dphi; if (Math.abs(dphi) <= EPSLN) { lat = phi; break; } } //lat=phi4z(this.e,this.e0,this.e1,this.e2,this.e3,al,bl,0,0); cl = Math.sqrt(1 - this.es * Math.pow(Math.sin(lat), 2)) * Math.tan(lat); lon = adjust_lon(this.long0 + Math.asin(x * cl / this.a) / Math.sin(lat)); } } p.x = lon; p.y = lat; return p; } var names$19 = ["Polyconic", "poly"]; var poly = { init: init$18, forward: forward$17, inverse: inverse$17, names: names$19 }; /* reference Department of Land and Survey Technical Circular 1973/32 http://www.linz.govt.nz/docs/miscellaneous/nz-map-definition.pdf OSG Technical Report 4.1 http://www.linz.govt.nz/docs/miscellaneous/nzmg.pdf */ /** * iterations: Number of iterations to refine inverse transform. * 0 -> km accuracy * 1 -> m accuracy -- suitable for most mapping applications * 2 -> mm accuracy */ function init$19() { this.A = []; this.A[1] = 0.6399175073; this.A[2] = -0.1358797613; this.A[3] = 0.063294409; this.A[4] = -0.02526853; this.A[5] = 0.0117879; this.A[6] = -0.0055161; this.A[7] = 0.0026906; this.A[8] = -0.001333; this.A[9] = 0.00067; this.A[10] = -0.00034; this.B_re = []; this.B_im = []; this.B_re[1] = 0.7557853228; this.B_im[1] = 0; this.B_re[2] = 0.249204646; this.B_im[2] = 0.003371507; this.B_re[3] = -0.001541739; this.B_im[3] = 0.041058560; this.B_re[4] = -0.10162907; this.B_im[4] = 0.01727609; this.B_re[5] = -0.26623489; this.B_im[5] = -0.36249218; this.B_re[6] = -0.6870983; this.B_im[6] = -1.1651967; this.C_re = []; this.C_im = []; this.C_re[1] = 1.3231270439; this.C_im[1] = 0; this.C_re[2] = -0.577245789; this.C_im[2] = -0.007809598; this.C_re[3] = 0.508307513; this.C_im[3] = -0.112208952; this.C_re[4] = -0.15094762; this.C_im[4] = 0.18200602; this.C_re[5] = 1.01418179; this.C_im[5] = 1.64497696; this.C_re[6] = 1.9660549; this.C_im[6] = 2.5127645; this.D = []; this.D[1] = 1.5627014243; this.D[2] = 0.5185406398; this.D[3] = -0.03333098; this.D[4] = -0.1052906; this.D[5] = -0.0368594; this.D[6] = 0.007317; this.D[7] = 0.01220; this.D[8] = 0.00394; this.D[9] = -0.0013; } /** New Zealand Map Grid Forward - long/lat to x/y long/lat in radians */ function forward$18(p) { var n; var lon = p.x; var lat = p.y; var delta_lat = lat - this.lat0; var delta_lon = lon - this.long0; // 1. Calculate d_phi and d_psi ... // and d_lambda // For this algorithm, delta_latitude is in seconds of arc x 10-5, so we need to scale to those units. Longitude is radians. var d_phi = delta_lat / SEC_TO_RAD * 1E-5; var d_lambda = delta_lon; var d_phi_n = 1; // d_phi^0 var d_psi = 0; for (n = 1; n <= 10; n++) { d_phi_n = d_phi_n * d_phi; d_psi = d_psi + this.A[n] * d_phi_n; } // 2. Calculate theta var th_re = d_psi; var th_im = d_lambda; // 3. Calculate z var th_n_re = 1; var th_n_im = 0; // theta^0 var th_n_re1; var th_n_im1; var z_re = 0; var z_im = 0; for (n = 1; n <= 6; n++) { th_n_re1 = th_n_re * th_re - th_n_im * th_im; th_n_im1 = th_n_im * th_re + th_n_re * th_im; th_n_re = th_n_re1; th_n_im = th_n_im1; z_re = z_re + this.B_re[n] * th_n_re - this.B_im[n] * th_n_im; z_im = z_im + this.B_im[n] * th_n_re + this.B_re[n] * th_n_im; } // 4. Calculate easting and northing p.x = (z_im * this.a) + this.x0; p.y = (z_re * this.a) + this.y0; return p; } /** New Zealand Map Grid Inverse - x/y to long/lat */ function inverse$18(p) { var n; var x = p.x; var y = p.y; var delta_x = x - this.x0; var delta_y = y - this.y0; // 1. Calculate z var z_re = delta_y / this.a; var z_im = delta_x / this.a; // 2a. Calculate theta - first approximation gives km accuracy var z_n_re = 1; var z_n_im = 0; // z^0 var z_n_re1; var z_n_im1; var th_re = 0; var th_im = 0; for (n = 1; n <= 6; n++) { z_n_re1 = z_n_re * z_re - z_n_im * z_im; z_n_im1 = z_n_im * z_re + z_n_re * z_im; z_n_re = z_n_re1; z_n_im = z_n_im1; th_re = th_re + this.C_re[n] * z_n_re - this.C_im[n] * z_n_im; th_im = th_im + this.C_im[n] * z_n_re + this.C_re[n] * z_n_im; } // 2b. Iterate to refine the accuracy of the calculation // 0 iterations gives km accuracy // 1 iteration gives m accuracy -- good enough for most mapping applications // 2 iterations bives mm accuracy for (var i = 0; i < this.iterations; i++) { var th_n_re = th_re; var th_n_im = th_im; var th_n_re1; var th_n_im1; var num_re = z_re; var num_im = z_im; for (n = 2; n <= 6; n++) { th_n_re1 = th_n_re * th_re - th_n_im * th_im; th_n_im1 = th_n_im * th_re + th_n_re * th_im; th_n_re = th_n_re1; th_n_im = th_n_im1; num_re = num_re + (n - 1) * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); num_im = num_im + (n - 1) * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); } th_n_re = 1; th_n_im = 0; var den_re = this.B_re[1]; var den_im = this.B_im[1]; for (n = 2; n <= 6; n++) { th_n_re1 = th_n_re * th_re - th_n_im * th_im; th_n_im1 = th_n_im * th_re + th_n_re * th_im; th_n_re = th_n_re1; th_n_im = th_n_im1; den_re = den_re + n * (this.B_re[n] * th_n_re - this.B_im[n] * th_n_im); den_im = den_im + n * (this.B_im[n] * th_n_re + this.B_re[n] * th_n_im); } // Complex division var den2 = den_re * den_re + den_im * den_im; th_re = (num_re * den_re + num_im * den_im) / den2; th_im = (num_im * den_re - num_re * den_im) / den2; } // 3. Calculate d_phi ... // and d_lambda var d_psi = th_re; var d_lambda = th_im; var d_psi_n = 1; // d_psi^0 var d_phi = 0; for (n = 1; n <= 9; n++) { d_psi_n = d_psi_n * d_psi; d_phi = d_phi + this.D[n] * d_psi_n; } // 4. Calculate latitude and longitude // d_phi is calcuated in second of arc * 10^-5, so we need to scale back to radians. d_lambda is in radians. var lat = this.lat0 + (d_phi * SEC_TO_RAD * 1E5); var lon = this.long0 + d_lambda; p.x = lon; p.y = lat; return p; } var names$20 = ["New_Zealand_Map_Grid", "nzmg"]; var nzmg = { init: init$19, forward: forward$18, inverse: inverse$18, names: names$20 }; /* reference "New Equal-Area Map Projections for Noncircular Regions", John P. Snyder, The American Cartographer, Vol 15, No. 4, October 1988, pp. 341-355. */ /* Initialize the Miller Cylindrical projection -------------------------------------------*/ function init$20() { //no-op } /* Miller Cylindrical forward equations--mapping lat,long to x,y ------------------------------------------------------------*/ function forward$19(p) { var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ var dlon = adjust_lon(lon - this.long0); var x = this.x0 + this.a * dlon; var y = this.y0 + this.a * Math.log(Math.tan((Math.PI / 4) + (lat / 2.5))) * 1.25; p.x = x; p.y = y; return p; } /* Miller Cylindrical inverse equations--mapping x,y to lat/long ------------------------------------------------------------*/ function inverse$19(p) { p.x -= this.x0; p.y -= this.y0; var lon = adjust_lon(this.long0 + p.x / this.a); var lat = 2.5 * (Math.atan(Math.exp(0.8 * p.y / this.a)) - Math.PI / 4); p.x = lon; p.y = lat; return p; } var names$21 = ["Miller_Cylindrical", "mill"]; var mill = { init: init$20, forward: forward$19, inverse: inverse$19, names: names$21 }; var MAX_ITER$3 = 20; function init$21() { /* Place parameters in static storage for common use -------------------------------------------------*/ if (!this.sphere) { this.en = pj_enfn(this.es); } else { this.n = 1; this.m = 0; this.es = 0; this.C_y = Math.sqrt((this.m + 1) / this.n); this.C_x = this.C_y / (this.m + 1); } } /* Sinusoidal forward equations--mapping lat,long to x,y -----------------------------------------------------*/ function forward$20(p) { var x, y; var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ lon = adjust_lon(lon - this.long0); if (this.sphere) { if (!this.m) { lat = this.n !== 1 ? Math.asin(this.n * Math.sin(lat)) : lat; } else { var k = this.n * Math.sin(lat); for (var i = MAX_ITER$3; i; --i) { var V = (this.m * lat + Math.sin(lat) - k) / (this.m + Math.cos(lat)); lat -= V; if (Math.abs(V) < EPSLN) { break; } } } x = this.a * this.C_x * lon * (this.m + Math.cos(lat)); y = this.a * this.C_y * lat; } else { var s = Math.sin(lat); var c = Math.cos(lat); y = this.a * pj_mlfn(lat, s, c, this.en); x = this.a * lon * c / Math.sqrt(1 - this.es * s * s); } p.x = x; p.y = y; return p; } function inverse$20(p) { var lat, temp, lon, s; p.x -= this.x0; lon = p.x / this.a; p.y -= this.y0; lat = p.y / this.a; if (this.sphere) { lat /= this.C_y; lon = lon / (this.C_x * (this.m + Math.cos(lat))); if (this.m) { lat = asinz((this.m * lat + Math.sin(lat)) / this.n); } else if (this.n !== 1) { lat = asinz(Math.sin(lat) / this.n); } lon = adjust_lon(lon + this.long0); lat = adjust_lat(lat); } else { lat = pj_inv_mlfn(p.y / this.a, this.es, this.en); s = Math.abs(lat); if (s < HALF_PI) { s = Math.sin(lat); temp = this.long0 + p.x * Math.sqrt(1 - this.es * s * s) / (this.a * Math.cos(lat)); //temp = this.long0 + p.x / (this.a * Math.cos(lat)); lon = adjust_lon(temp); } else if ((s - EPSLN) < HALF_PI) { lon = this.long0; } } p.x = lon; p.y = lat; return p; } var names$22 = ["Sinusoidal", "sinu"]; var sinu = { init: init$21, forward: forward$20, inverse: inverse$20, names: names$22 }; function init$22() {} /* Mollweide forward equations--mapping lat,long to x,y ----------------------------------------------------*/ function forward$21(p) { /* Forward equations -----------------*/ var lon = p.x; var lat = p.y; var delta_lon = adjust_lon(lon - this.long0); var theta = lat; var con = Math.PI * Math.sin(lat); /* Iterate using the Newton-Raphson method to find theta -----------------------------------------------------*/ while (true) { var delta_theta = -(theta + Math.sin(theta) - con) / (1 + Math.cos(theta)); theta += delta_theta; if (Math.abs(delta_theta) < EPSLN) { break; } } theta /= 2; /* If the latitude is 90 deg, force the x coordinate to be "0 + false easting" this is done here because of precision problems with "cos(theta)" --------------------------------------------------------------------------*/ if (Math.PI / 2 - Math.abs(lat) < EPSLN) { delta_lon = 0; } var x = 0.900316316158 * this.a * delta_lon * Math.cos(theta) + this.x0; var y = 1.4142135623731 * this.a * Math.sin(theta) + this.y0; p.x = x; p.y = y; return p; } function inverse$21(p) { var theta; var arg; /* Inverse equations -----------------*/ p.x -= this.x0; p.y -= this.y0; arg = p.y / (1.4142135623731 * this.a); /* Because of division by zero problems, 'arg' can not be 1. Therefore a number very close to one is used instead. -------------------------------------------------------------------*/ if (Math.abs(arg) > 0.999999999999) { arg = 0.999999999999; } theta = Math.asin(arg); var lon = adjust_lon(this.long0 + (p.x / (0.900316316158 * this.a * Math.cos(theta)))); if (lon < (-Math.PI)) { lon = -Math.PI; } if (lon > Math.PI) { lon = Math.PI; } arg = (2 * theta + Math.sin(2 * theta)) / Math.PI; if (Math.abs(arg) > 1) { arg = 1; } var lat = Math.asin(arg); p.x = lon; p.y = lat; return p; } var names$23 = ["Mollweide", "moll"]; var moll = { init: init$22, forward: forward$21, inverse: inverse$21, names: names$23 }; function init$23() { /* Place parameters in static storage for common use -------------------------------------------------*/ // Standard Parallels cannot be equal and on opposite sides of the equator if (Math.abs(this.lat1 + this.lat2) < EPSLN) { return; } this.lat2 = this.lat2 || this.lat1; this.temp = this.b / this.a; this.es = 1 - Math.pow(this.temp, 2); this.e = Math.sqrt(this.es); this.e0 = e0fn(this.es); this.e1 = e1fn(this.es); this.e2 = e2fn(this.es); this.e3 = e3fn(this.es); this.sinphi = Math.sin(this.lat1); this.cosphi = Math.cos(this.lat1); this.ms1 = msfnz(this.e, this.sinphi, this.cosphi); this.ml1 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat1); if (Math.abs(this.lat1 - this.lat2) < EPSLN) { this.ns = this.sinphi; } else { this.sinphi = Math.sin(this.lat2); this.cosphi = Math.cos(this.lat2); this.ms2 = msfnz(this.e, this.sinphi, this.cosphi); this.ml2 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat2); this.ns = (this.ms1 - this.ms2) / (this.ml2 - this.ml1); } this.g = this.ml1 + this.ms1 / this.ns; this.ml0 = mlfn(this.e0, this.e1, this.e2, this.e3, this.lat0); this.rh = this.a * (this.g - this.ml0); } /* Equidistant Conic forward equations--mapping lat,long to x,y -----------------------------------------------------------*/ function forward$22(p) { var lon = p.x; var lat = p.y; var rh1; /* Forward equations -----------------*/ if (this.sphere) { rh1 = this.a * (this.g - lat); } else { var ml = mlfn(this.e0, this.e1, this.e2, this.e3, lat); rh1 = this.a * (this.g - ml); } var theta = this.ns * adjust_lon(lon - this.long0); var x = this.x0 + rh1 * Math.sin(theta); var y = this.y0 + this.rh - rh1 * Math.cos(theta); p.x = x; p.y = y; return p; } /* Inverse equations -----------------*/ function inverse$22(p) { p.x -= this.x0; p.y = this.rh - p.y + this.y0; var con, rh1, lat, lon; if (this.ns >= 0) { rh1 = Math.sqrt(p.x * p.x + p.y * p.y); con = 1; } else { rh1 = -Math.sqrt(p.x * p.x + p.y * p.y); con = -1; } var theta = 0; if (rh1 !== 0) { theta = Math.atan2(con * p.x, con * p.y); } if (this.sphere) { lon = adjust_lon(this.long0 + theta / this.ns); lat = adjust_lat(this.g - rh1 / this.a); p.x = lon; p.y = lat; return p; } else { var ml = this.g - rh1 / this.a; lat = imlfn(ml, this.e0, this.e1, this.e2, this.e3); lon = adjust_lon(this.long0 + theta / this.ns); p.x = lon; p.y = lat; return p; } } var names$24 = ["Equidistant_Conic", "eqdc"]; var eqdc = { init: init$23, forward: forward$22, inverse: inverse$22, names: names$24 }; /* Initialize the Van Der Grinten projection ----------------------------------------*/ function init$24() { //this.R = 6370997; //Radius of earth this.R = this.a; } function forward$23(p) { var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ var dlon = adjust_lon(lon - this.long0); var x, y; if (Math.abs(lat) <= EPSLN) { x = this.x0 + this.R * dlon; y = this.y0; } var theta = asinz(2 * Math.abs(lat / Math.PI)); if ((Math.abs(dlon) <= EPSLN) || (Math.abs(Math.abs(lat) - HALF_PI) <= EPSLN)) { x = this.x0; if (lat >= 0) { y = this.y0 + Math.PI * this.R * Math.tan(0.5 * theta); } else { y = this.y0 + Math.PI * this.R * -Math.tan(0.5 * theta); } // return(OK); } var al = 0.5 * Math.abs((Math.PI / dlon) - (dlon / Math.PI)); var asq = al * al; var sinth = Math.sin(theta); var costh = Math.cos(theta); var g = costh / (sinth + costh - 1); var gsq = g * g; var m = g * (2 / sinth - 1); var msq = m * m; var con = Math.PI * this.R * (al * (g - msq) + Math.sqrt(asq * (g - msq) * (g - msq) - (msq + asq) * (gsq - msq))) / (msq + asq); if (dlon < 0) { con = -con; } x = this.x0 + con; //con = Math.abs(con / (Math.PI * this.R)); var q = asq + g; con = Math.PI * this.R * (m * q - al * Math.sqrt((msq + asq) * (asq + 1) - q * q)) / (msq + asq); if (lat >= 0) { //y = this.y0 + Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); y = this.y0 + con; } else { //y = this.y0 - Math.PI * this.R * Math.sqrt(1 - con * con - 2 * al * con); y = this.y0 - con; } p.x = x; p.y = y; return p; } /* Van Der Grinten inverse equations--mapping x,y to lat/long ---------------------------------------------------------*/ function inverse$23(p) { var lon, lat; var xx, yy, xys, c1, c2, c3; var a1; var m1; var con; var th1; var d; /* inverse equations -----------------*/ p.x -= this.x0; p.y -= this.y0; con = Math.PI * this.R; xx = p.x / con; yy = p.y / con; xys = xx * xx + yy * yy; c1 = -Math.abs(yy) * (1 + xys); c2 = c1 - 2 * yy * yy + xx * xx; c3 = -2 * c1 + 1 + 2 * yy * yy + xys * xys; d = yy * yy / c3 + (2 * c2 * c2 * c2 / c3 / c3 / c3 - 9 * c1 * c2 / c3 / c3) / 27; a1 = (c1 - c2 * c2 / 3 / c3) / c3; m1 = 2 * Math.sqrt(-a1 / 3); con = ((3 * d) / a1) / m1; if (Math.abs(con) > 1) { if (con >= 0) { con = 1; } else { con = -1; } } th1 = Math.acos(con) / 3; if (p.y >= 0) { lat = (-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; } else { lat = -(-m1 * Math.cos(th1 + Math.PI / 3) - c2 / 3 / c3) * Math.PI; } if (Math.abs(xx) < EPSLN) { lon = this.long0; } else { lon = adjust_lon(this.long0 + Math.PI * (xys - 1 + Math.sqrt(1 + 2 * (xx * xx - yy * yy) + xys * xys)) / 2 / xx); } p.x = lon; p.y = lat; return p; } var names$25 = ["Van_der_Grinten_I", "VanDerGrinten", "vandg"]; var vandg = { init: init$24, forward: forward$23, inverse: inverse$23, names: names$25 }; function init$25() { this.sin_p12 = Math.sin(this.lat0); this.cos_p12 = Math.cos(this.lat0); } function forward$24(p) { var lon = p.x; var lat = p.y; var sinphi = Math.sin(p.y); var cosphi = Math.cos(p.y); var dlon = adjust_lon(lon - this.long0); var e0, e1, e2, e3, Mlp, Ml, tanphi, Nl1, Nl, psi, Az, G, H, GH, Hs, c, kp, cos_c, s, s2, s3, s4, s5; if (this.sphere) { if (Math.abs(this.sin_p12 - 1) <= EPSLN) { //North Pole case p.x = this.x0 + this.a * (HALF_PI - lat) * Math.sin(dlon); p.y = this.y0 - this.a * (HALF_PI - lat) * Math.cos(dlon); return p; } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { //South Pole case p.x = this.x0 + this.a * (HALF_PI + lat) * Math.sin(dlon); p.y = this.y0 + this.a * (HALF_PI + lat) * Math.cos(dlon); return p; } else { //default case cos_c = this.sin_p12 * sinphi + this.cos_p12 * cosphi * Math.cos(dlon); c = Math.acos(cos_c); kp = c / Math.sin(c); p.x = this.x0 + this.a * kp * cosphi * Math.sin(dlon); p.y = this.y0 + this.a * kp * (this.cos_p12 * sinphi - this.sin_p12 * cosphi * Math.cos(dlon)); return p; } } else { e0 = e0fn(this.es); e1 = e1fn(this.es); e2 = e2fn(this.es); e3 = e3fn(this.es); if (Math.abs(this.sin_p12 - 1) <= EPSLN) { //North Pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); Ml = this.a * mlfn(e0, e1, e2, e3, lat); p.x = this.x0 + (Mlp - Ml) * Math.sin(dlon); p.y = this.y0 - (Mlp - Ml) * Math.cos(dlon); return p; } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { //South Pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); Ml = this.a * mlfn(e0, e1, e2, e3, lat); p.x = this.x0 + (Mlp + Ml) * Math.sin(dlon); p.y = this.y0 + (Mlp + Ml) * Math.cos(dlon); return p; } else { //Default case tanphi = sinphi / cosphi; Nl1 = gN(this.a, this.e, this.sin_p12); Nl = gN(this.a, this.e, sinphi); psi = Math.atan((1 - this.es) * tanphi + this.es * Nl1 * this.sin_p12 / (Nl * cosphi)); Az = Math.atan2(Math.sin(dlon), this.cos_p12 * Math.tan(psi) - this.sin_p12 * Math.cos(dlon)); if (Az === 0) { s = Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); } else if (Math.abs(Math.abs(Az) - Math.PI) <= EPSLN) { s = -Math.asin(this.cos_p12 * Math.sin(psi) - this.sin_p12 * Math.cos(psi)); } else { s = Math.asin(Math.sin(dlon) * Math.cos(psi) / Math.sin(Az)); } G = this.e * this.sin_p12 / Math.sqrt(1 - this.es); H = this.e * this.cos_p12 * Math.cos(Az) / Math.sqrt(1 - this.es); GH = G * H; Hs = H * H; s2 = s * s; s3 = s2 * s; s4 = s3 * s; s5 = s4 * s; c = Nl1 * s * (1 - s2 * Hs * (1 - Hs) / 6 + s3 / 8 * GH * (1 - 2 * Hs) + s4 / 120 * (Hs * (4 - 7 * Hs) - 3 * G * G * (1 - 7 * Hs)) - s5 / 48 * GH); p.x = this.x0 + c * Math.sin(Az); p.y = this.y0 + c * Math.cos(Az); return p; } } } function inverse$24(p) { p.x -= this.x0; p.y -= this.y0; var rh, z, sinz, cosz, lon, lat, con, e0, e1, e2, e3, Mlp, M, N1, psi, Az, cosAz, tmp, A, B, D, Ee, F; if (this.sphere) { rh = Math.sqrt(p.x * p.x + p.y * p.y); if (rh > (2 * HALF_PI * this.a)) { return; } z = rh / this.a; sinz = Math.sin(z); cosz = Math.cos(z); lon = this.long0; if (Math.abs(rh) <= EPSLN) { lat = this.lat0; } else { lat = asinz(cosz * this.sin_p12 + (p.y * sinz * this.cos_p12) / rh); con = Math.abs(this.lat0) - HALF_PI; if (Math.abs(con) <= EPSLN) { if (this.lat0 >= 0) { lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); } else { lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); } } else { /*con = cosz - this.sin_p12 * Math.sin(lat); if ((Math.abs(con) < EPSLN) && (Math.abs(p.x) < EPSLN)) { //no-op, just keep the lon value as is } else { var temp = Math.atan2((p.x * sinz * this.cos_p12), (con * rh)); lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz * this.cos_p12), (con * rh))); }*/ lon = adjust_lon(this.long0 + Math.atan2(p.x * sinz, rh * this.cos_p12 * cosz - p.y * this.sin_p12 * sinz)); } } p.x = lon; p.y = lat; return p; } else { e0 = e0fn(this.es); e1 = e1fn(this.es); e2 = e2fn(this.es); e3 = e3fn(this.es); if (Math.abs(this.sin_p12 - 1) <= EPSLN) { //North pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); rh = Math.sqrt(p.x * p.x + p.y * p.y); M = Mlp - rh; lat = imlfn(M / this.a, e0, e1, e2, e3); lon = adjust_lon(this.long0 + Math.atan2(p.x, - 1 * p.y)); p.x = lon; p.y = lat; return p; } else if (Math.abs(this.sin_p12 + 1) <= EPSLN) { //South pole case Mlp = this.a * mlfn(e0, e1, e2, e3, HALF_PI); rh = Math.sqrt(p.x * p.x + p.y * p.y); M = rh - Mlp; lat = imlfn(M / this.a, e0, e1, e2, e3); lon = adjust_lon(this.long0 + Math.atan2(p.x, p.y)); p.x = lon; p.y = lat; return p; } else { //default case rh = Math.sqrt(p.x * p.x + p.y * p.y); Az = Math.atan2(p.x, p.y); N1 = gN(this.a, this.e, this.sin_p12); cosAz = Math.cos(Az); tmp = this.e * this.cos_p12 * cosAz; A = -tmp * tmp / (1 - this.es); B = 3 * this.es * (1 - A) * this.sin_p12 * this.cos_p12 * cosAz / (1 - this.es); D = rh / N1; Ee = D - A * (1 + A) * Math.pow(D, 3) / 6 - B * (1 + 3 * A) * Math.pow(D, 4) / 24; F = 1 - A * Ee * Ee / 2 - D * Ee * Ee * Ee / 6; psi = Math.asin(this.sin_p12 * Math.cos(Ee) + this.cos_p12 * Math.sin(Ee) * cosAz); lon = adjust_lon(this.long0 + Math.asin(Math.sin(Az) * Math.sin(Ee) / Math.cos(psi))); lat = Math.atan((1 - this.es * F * this.sin_p12 / Math.sin(psi)) * Math.tan(psi) / (1 - this.es)); p.x = lon; p.y = lat; return p; } } } var names$26 = ["Azimuthal_Equidistant", "aeqd"]; var aeqd = { init: init$25, forward: forward$24, inverse: inverse$24, names: names$26 }; function init$26() { //double temp; /* temporary variable */ /* Place parameters in static storage for common use -------------------------------------------------*/ this.sin_p14 = Math.sin(this.lat0); this.cos_p14 = Math.cos(this.lat0); } /* Orthographic forward equations--mapping lat,long to x,y ---------------------------------------------------*/ function forward$25(p) { var sinphi, cosphi; /* sin and cos value */ var dlon; /* delta longitude value */ var coslon; /* cos of longitude */ var ksp; /* scale factor */ var g, x, y; var lon = p.x; var lat = p.y; /* Forward equations -----------------*/ dlon = adjust_lon(lon - this.long0); sinphi = Math.sin(lat); cosphi = Math.cos(lat); coslon = Math.cos(dlon); g = this.sin_p14 * sinphi + this.cos_p14 * cosphi * coslon; ksp = 1; if ((g > 0) || (Math.abs(g) <= EPSLN)) { x = this.a * ksp * cosphi * Math.sin(dlon); y = this.y0 + this.a * ksp * (this.cos_p14 * sinphi - this.sin_p14 * cosphi * coslon); } p.x = x; p.y = y; return p; } function inverse$25(p) { var rh; /* height above ellipsoid */ var z; /* angle */ var sinz, cosz; /* sin of z and cos of z */ var con; var lon, lat; /* Inverse equations -----------------*/ p.x -= this.x0; p.y -= this.y0; rh = Math.sqrt(p.x * p.x + p.y * p.y); z = asinz(rh / this.a); sinz = Math.sin(z); cosz = Math.cos(z); lon = this.long0; if (Math.abs(rh) <= EPSLN) { lat = this.lat0; p.x = lon; p.y = lat; return p; } lat = asinz(cosz * this.sin_p14 + (p.y * sinz * this.cos_p14) / rh); con = Math.abs(this.lat0) - HALF_PI; if (Math.abs(con) <= EPSLN) { if (this.lat0 >= 0) { lon = adjust_lon(this.long0 + Math.atan2(p.x, - p.y)); } else { lon = adjust_lon(this.long0 - Math.atan2(-p.x, p.y)); } p.x = lon; p.y = lat; return p; } lon = adjust_lon(this.long0 + Math.atan2((p.x * sinz), rh * this.cos_p14 * cosz - p.y * this.sin_p14 * sinz)); p.x = lon; p.y = lat; return p; } var names$27 = ["ortho"]; var ortho = { init: init$26, forward: forward$25, inverse: inverse$25, names: names$27 }; // QSC projection rewritten from the original PROJ4 // https://github.com/OSGeo/proj.4/blob/master/src/PJ_qsc.c /* constants */ var FACE_ENUM = { FRONT: 1, RIGHT: 2, BACK: 3, LEFT: 4, TOP: 5, BOTTOM: 6 }; var AREA_ENUM = { AREA_0: 1, AREA_1: 2, AREA_2: 3, AREA_3: 4 }; function init$27() { this.x0 = this.x0 || 0; this.y0 = this.y0 || 0; this.lat0 = this.lat0 || 0; this.long0 = this.long0 || 0; this.lat_ts = this.lat_ts || 0; this.title = this.title || "Quadrilateralized Spherical Cube"; /* Determine the cube face from the center of projection. */ if (this.lat0 >= HALF_PI - FORTPI / 2.0) { this.face = FACE_ENUM.TOP; } else if (this.lat0 <= -(HALF_PI - FORTPI / 2.0)) { this.face = FACE_ENUM.BOTTOM; } else if (Math.abs(this.long0) <= FORTPI) { this.face = FACE_ENUM.FRONT; } else if (Math.abs(this.long0) <= HALF_PI + FORTPI) { this.face = this.long0 > 0.0 ? FACE_ENUM.RIGHT : FACE_ENUM.LEFT; } else { this.face = FACE_ENUM.BACK; } /* Fill in useful values for the ellipsoid <-> sphere shift * described in [LK12]. */ if (this.es !== 0) { this.one_minus_f = 1 - (this.a - this.b) / this.a; this.one_minus_f_squared = this.one_minus_f * this.one_minus_f; } } // QSC forward equations--mapping lat,long to x,y // ----------------------------------------------------------------- function forward$26(p) { var xy = {x: 0, y: 0}; var lat, lon; var theta, phi; var t, mu; /* nu; */ var area = {value: 0}; // move lon according to projection's lon p.x -= this.long0; /* Convert the geodetic latitude to a geocentric latitude. * This corresponds to the shift from the ellipsoid to the sphere * described in [LK12]. */ if (this.es !== 0) {//if (P->es != 0) { lat = Math.atan(this.one_minus_f_squared * Math.tan(p.y)); } else { lat = p.y; } /* Convert the input lat, lon into theta, phi as used by QSC. * This depends on the cube face and the area on it. * For the top and bottom face, we can compute theta and phi * directly from phi, lam. For the other faces, we must use * unit sphere cartesian coordinates as an intermediate step. */ lon = p.x; //lon = lp.lam; if (this.face === FACE_ENUM.TOP) { phi = HALF_PI - lat; if (lon >= FORTPI && lon <= HALF_PI + FORTPI) { area.value = AREA_ENUM.AREA_0; theta = lon - HALF_PI; } else if (lon > HALF_PI + FORTPI || lon <= -(HALF_PI + FORTPI)) { area.value = AREA_ENUM.AREA_1; theta = (lon > 0.0 ? lon - SPI : lon + SPI); } else if (lon > -(HALF_PI + FORTPI) && lon <= -FORTPI) { area.value = AREA_ENUM.AREA_2; theta = lon + HALF_PI; } else { area.value = AREA_ENUM.AREA_3; theta = lon; } } else if (this.face === FACE_ENUM.BOTTOM) { phi = HALF_PI + lat; if (lon >= FORTPI && lon <= HALF_PI + FORTPI) { area.value = AREA_ENUM.AREA_0; theta = -lon + HALF_PI; } else if (lon < FORTPI && lon >= -FORTPI) { area.value = AREA_ENUM.AREA_1; theta = -lon; } else if (lon < -FORTPI && lon >= -(HALF_PI + FORTPI)) { area.value = AREA_ENUM.AREA_2; theta = -lon - HALF_PI; } else { area.value = AREA_ENUM.AREA_3; theta = (lon > 0.0 ? -lon + SPI : -lon - SPI); } } else { var q, r, s; var sinlat, coslat; var sinlon, coslon; if (this.face === FACE_ENUM.RIGHT) { lon = qsc_shift_lon_origin(lon, +HALF_PI); } else if (this.face === FACE_ENUM.BACK) { lon = qsc_shift_lon_origin(lon, +SPI); } else if (this.face === FACE_ENUM.LEFT) { lon = qsc_shift_lon_origin(lon, -HALF_PI); } sinlat = Math.sin(lat); coslat = Math.cos(lat); sinlon = Math.sin(lon); coslon = Math.cos(lon); q = coslat * coslon; r = coslat * sinlon; s = sinlat; if (this.face === FACE_ENUM.FRONT) { phi = Math.acos(q); theta = qsc_fwd_equat_face_theta(phi, s, r, area); } else if (this.face === FACE_ENUM.RIGHT) { phi = Math.acos(r); theta = qsc_fwd_equat_face_theta(phi, s, -q, area); } else if (this.face === FACE_ENUM.BACK) { phi = Math.acos(-q); theta = qsc_fwd_equat_face_theta(phi, s, -r, area); } else if (this.face === FACE_ENUM.LEFT) { phi = Math.acos(-r); theta = qsc_fwd_equat_face_theta(phi, s, q, area); } else { /* Impossible */ phi = theta = 0; area.value = AREA_ENUM.AREA_0; } } /* Compute mu and nu for the area of definition. * For mu, see Eq. (3-21) in [OL76], but note the typos: * compare with Eq. (3-14). For nu, see Eq. (3-38). */ mu = Math.atan((12 / SPI) * (theta + Math.acos(Math.sin(theta) * Math.cos(FORTPI)) - HALF_PI)); t = Math.sqrt((1 - Math.cos(phi)) / (Math.cos(mu) * Math.cos(mu)) / (1 - Math.cos(Math.atan(1 / Math.cos(theta))))); /* Apply the result to the real area. */ if (area.value === AREA_ENUM.AREA_1) { mu += HALF_PI; } else if (area.value === AREA_ENUM.AREA_2) { mu += SPI; } else if (area.value === AREA_ENUM.AREA_3) { mu += 1.5 * SPI; } /* Now compute x, y from mu and nu */ xy.x = t * Math.cos(mu); xy.y = t * Math.sin(mu); xy.x = xy.x * this.a + this.x0; xy.y = xy.y * this.a + this.y0; p.x = xy.x; p.y = xy.y; return p; } // QSC inverse equations--mapping x,y to lat/long // ----------------------------------------------------------------- function inverse$26(p) { var lp = {lam: 0, phi: 0}; var mu, nu, cosmu, tannu; var tantheta, theta, cosphi, phi; var t; var area = {value: 0}; /* de-offset */ p.x = (p.x - this.x0) / this.a; p.y = (p.y - this.y0) / this.a; /* Convert the input x, y to the mu and nu angles as used by QSC. * This depends on the area of the cube face. */ nu = Math.atan(Math.sqrt(p.x * p.x + p.y * p.y)); mu = Math.atan2(p.y, p.x); if (p.x >= 0.0 && p.x >= Math.abs(p.y)) { area.value = AREA_ENUM.AREA_0; } else if (p.y >= 0.0 && p.y >= Math.abs(p.x)) { area.value = AREA_ENUM.AREA_1; mu -= HALF_PI; } else if (p.x < 0.0 && -p.x >= Math.abs(p.y)) { area.value = AREA_ENUM.AREA_2; mu = (mu < 0.0 ? mu + SPI : mu - SPI); } else { area.value = AREA_ENUM.AREA_3; mu += HALF_PI; } /* Compute phi and theta for the area of definition. * The inverse projection is not described in the original paper, but some * good hints can be found here (as of 2011-12-14): * http://fits.gsfc.nasa.gov/fitsbits/saf.93/saf.9302 * (search for "Message-Id: <9302181759.AA25477 at fits.cv.nrao.edu>") */ t = (SPI / 12) * Math.tan(mu); tantheta = Math.sin(t) / (Math.cos(t) - (1 / Math.sqrt(2))); theta = Math.atan(tantheta); cosmu = Math.cos(mu); tannu = Math.tan(nu); cosphi = 1 - cosmu * cosmu * tannu * tannu * (1 - Math.cos(Math.atan(1 / Math.cos(theta)))); if (cosphi < -1) { cosphi = -1; } else if (cosphi > +1) { cosphi = +1; } /* Apply the result to the real area on the cube face. * For the top and bottom face, we can compute phi and lam directly. * For the other faces, we must use unit sphere cartesian coordinates * as an intermediate step. */ if (this.face === FACE_ENUM.TOP) { phi = Math.acos(cosphi); lp.phi = HALF_PI - phi; if (area.value === AREA_ENUM.AREA_0) { lp.lam = theta + HALF_PI; } else if (area.value === AREA_ENUM.AREA_1) { lp.lam = (theta < 0.0 ? theta + SPI : theta - SPI); } else if (area.value === AREA_ENUM.AREA_2) { lp.lam = theta - HALF_PI; } else /* area.value == AREA_ENUM.AREA_3 */ { lp.lam = theta; } } else if (this.face === FACE_ENUM.BOTTOM) { phi = Math.acos(cosphi); lp.phi = phi - HALF_PI; if (area.value === AREA_ENUM.AREA_0) { lp.lam = -theta + HALF_PI; } else if (area.value === AREA_ENUM.AREA_1) { lp.lam = -theta; } else if (area.value === AREA_ENUM.AREA_2) { lp.lam = -theta - HALF_PI; } else /* area.value == AREA_ENUM.AREA_3 */ { lp.lam = (theta < 0.0 ? -theta - SPI : -theta + SPI); } } else { /* Compute phi and lam via cartesian unit sphere coordinates. */ var q, r, s; q = cosphi; t = q * q; if (t >= 1) { s = 0; } else { s = Math.sqrt(1 - t) * Math.sin(theta); } t += s * s; if (t >= 1) { r = 0; } else { r = Math.sqrt(1 - t); } /* Rotate q,r,s into the correct area. */ if (area.value === AREA_ENUM.AREA_1) { t = r; r = -s; s = t; } else if (area.value === AREA_ENUM.AREA_2) { r = -r; s = -s; } else if (area.value === AREA_ENUM.AREA_3) { t = r; r = s; s = -t; } /* Rotate q,r,s into the correct cube face. */ if (this.face === FACE_ENUM.RIGHT) { t = q; q = -r; r = t; } else if (this.face === FACE_ENUM.BACK) { q = -q; r = -r; } else if (this.face === FACE_ENUM.LEFT) { t = q; q = r; r = -t; } /* Now compute phi and lam from the unit sphere coordinates. */ lp.phi = Math.acos(-s) - HALF_PI; lp.lam = Math.atan2(r, q); if (this.face === FACE_ENUM.RIGHT) { lp.lam = qsc_shift_lon_origin(lp.lam, -HALF_PI); } else if (this.face === FACE_ENUM.BACK) { lp.lam = qsc_shift_lon_origin(lp.lam, -SPI); } else if (this.face === FACE_ENUM.LEFT) { lp.lam = qsc_shift_lon_origin(lp.lam, +HALF_PI); } } /* Apply the shift from the sphere to the ellipsoid as described * in [LK12]. */ if (this.es !== 0) { var invert_sign; var tanphi, xa; invert_sign = (lp.phi < 0 ? 1 : 0); tanphi = Math.tan(lp.phi); xa = this.b / Math.sqrt(tanphi * tanphi + this.one_minus_f_squared); lp.phi = Math.atan(Math.sqrt(this.a * this.a - xa * xa) / (this.one_minus_f * xa)); if (invert_sign) { lp.phi = -lp.phi; } } lp.lam += this.long0; p.x = lp.lam; p.y = lp.phi; return p; } /* Helper function for forward projection: compute the theta angle * and determine the area number. */ function qsc_fwd_equat_face_theta(phi, y, x, area) { var theta; if (phi < EPSLN) { area.value = AREA_ENUM.AREA_0; theta = 0.0; } else { theta = Math.atan2(y, x); if (Math.abs(theta) <= FORTPI) { area.value = AREA_ENUM.AREA_0; } else if (theta > FORTPI && theta <= HALF_PI + FORTPI) { area.value = AREA_ENUM.AREA_1; theta -= HALF_PI; } else if (theta > HALF_PI + FORTPI || theta <= -(HALF_PI + FORTPI)) { area.value = AREA_ENUM.AREA_2; theta = (theta >= 0.0 ? theta - SPI : theta + SPI); } else { area.value = AREA_ENUM.AREA_3; theta += HALF_PI; } } return theta; } /* Helper function: shift the longitude. */ function qsc_shift_lon_origin(lon, offset) { var slon = lon + offset; if (slon < -SPI) { slon += TWO_PI; } else if (slon > +SPI) { slon -= TWO_PI; } return slon; } var names$28 = ["Quadrilateralized Spherical Cube", "Quadrilateralized_Spherical_Cube", "qsc"]; var qsc = { init: init$27, forward: forward$26, inverse: inverse$26, names: names$28 }; // Robinson projection // Based on https://github.com/OSGeo/proj.4/blob/master/src/PJ_robin.c // Polynomial coeficients from http://article.gmane.org/gmane.comp.gis.proj-4.devel/6039 var COEFS_X = [ [1.0000, 2.2199e-17, -7.15515e-05, 3.1103e-06], [0.9986, -0.000482243, -2.4897e-05, -1.3309e-06], [0.9954, -0.00083103, -4.48605e-05, -9.86701e-07], [0.9900, -0.00135364, -5.9661e-05, 3.6777e-06], [0.9822, -0.00167442, -4.49547e-06, -5.72411e-06], [0.9730, -0.00214868, -9.03571e-05, 1.8736e-08], [0.9600, -0.00305085, -9.00761e-05, 1.64917e-06], [0.9427, -0.00382792, -6.53386e-05, -2.6154e-06], [0.9216, -0.00467746, -0.00010457, 4.81243e-06], [0.8962, -0.00536223, -3.23831e-05, -5.43432e-06], [0.8679, -0.00609363, -0.000113898, 3.32484e-06], [0.8350, -0.00698325, -6.40253e-05, 9.34959e-07], [0.7986, -0.00755338, -5.00009e-05, 9.35324e-07], [0.7597, -0.00798324, -3.5971e-05, -2.27626e-06], [0.7186, -0.00851367, -7.01149e-05, -8.6303e-06], [0.6732, -0.00986209, -0.000199569, 1.91974e-05], [0.6213, -0.010418, 8.83923e-05, 6.24051e-06], [0.5722, -0.00906601, 0.000182, 6.24051e-06], [0.5322, -0.00677797, 0.000275608, 6.24051e-06] ]; var COEFS_Y = [ [-5.20417e-18, 0.0124, 1.21431e-18, -8.45284e-11], [0.0620, 0.0124, -1.26793e-09, 4.22642e-10], [0.1240, 0.0124, 5.07171e-09, -1.60604e-09], [0.1860, 0.0123999, -1.90189e-08, 6.00152e-09], [0.2480, 0.0124002, 7.10039e-08, -2.24e-08], [0.3100, 0.0123992, -2.64997e-07, 8.35986e-08], [0.3720, 0.0124029, 9.88983e-07, -3.11994e-07], [0.4340, 0.0123893, -3.69093e-06, -4.35621e-07], [0.4958, 0.0123198, -1.02252e-05, -3.45523e-07], [0.5571, 0.0121916, -1.54081e-05, -5.82288e-07], [0.6176, 0.0119938, -2.41424e-05, -5.25327e-07], [0.6769, 0.011713, -3.20223e-05, -5.16405e-07], [0.7346, 0.0113541, -3.97684e-05, -6.09052e-07], [0.7903, 0.0109107, -4.89042e-05, -1.04739e-06], [0.8435, 0.0103431, -6.4615e-05, -1.40374e-09], [0.8936, 0.00969686, -6.4636e-05, -8.547e-06], [0.9394, 0.00840947, -0.000192841, -4.2106e-06], [0.9761, 0.00616527, -0.000256, -4.2106e-06], [1.0000, 0.00328947, -0.000319159, -4.2106e-06] ]; var FXC = 0.8487; var FYC = 1.3523; var C1 = R2D/5; // rad to 5-degree interval var RC1 = 1/C1; var NODES = 18; var poly3_val = function(coefs, x) { return coefs[0] + x * (coefs[1] + x * (coefs[2] + x * coefs[3])); }; var poly3_der = function(coefs, x) { return coefs[1] + x * (2 * coefs[2] + x * 3 * coefs[3]); }; function newton_rapshon(f_df, start, max_err, iters) { var x = start; for (; iters; --iters) { var upd = f_df(x); x -= upd; if (Math.abs(upd) < max_err) { break; } } return x; } function init$28() { this.x0 = this.x0 || 0; this.y0 = this.y0 || 0; this.long0 = this.long0 || 0; this.es = 0; this.title = this.title || "Robinson"; } function forward$27(ll) { var lon = adjust_lon(ll.x - this.long0); var dphi = Math.abs(ll.y); var i = Math.floor(dphi * C1); if (i < 0) { i = 0; } else if (i >= NODES) { i = NODES - 1; } dphi = R2D * (dphi - RC1 * i); var xy = { x: poly3_val(COEFS_X[i], dphi) * lon, y: poly3_val(COEFS_Y[i], dphi) }; if (ll.y < 0) { xy.y = -xy.y; } xy.x = xy.x * this.a * FXC + this.x0; xy.y = xy.y * this.a * FYC + this.y0; return xy; } function inverse$27(xy) { var ll = { x: (xy.x - this.x0) / (this.a * FXC), y: Math.abs(xy.y - this.y0) / (this.a * FYC) }; if (ll.y >= 1) { // pathologic case ll.x /= COEFS_X[NODES][0]; ll.y = xy.y < 0 ? -HALF_PI : HALF_PI; } else { // find table interval var i = Math.floor(ll.y * NODES); if (i < 0) { i = 0; } else if (i >= NODES) { i = NODES - 1; } for (;;) { if (COEFS_Y[i][0] > ll.y) { --i; } else if (COEFS_Y[i+1][0] <= ll.y) { ++i; } else { break; } } // linear interpolation in 5 degree interval var coefs = COEFS_Y[i]; var t = 5 * (ll.y - coefs[0]) / (COEFS_Y[i+1][0] - coefs[0]); // find t so that poly3_val(coefs, t) = ll.y t = newton_rapshon(function(x) { return (poly3_val(coefs, x) - ll.y) / poly3_der(coefs, x); }, t, EPSLN, 100); ll.x /= poly3_val(COEFS_X[i], t); ll.y = (5 * i + t) * D2R; if (xy.y < 0) { ll.y = -ll.y; } } ll.x = adjust_lon(ll.x + this.long0); return ll; } var names$29 = ["Robinson", "robin"]; var robin = { init: init$28, forward: forward$27, inverse: inverse$27, names: names$29 }; var includedProjections = function(proj4){ proj4.Proj.projections.add(tmerc); proj4.Proj.projections.add(etmerc); proj4.Proj.projections.add(utm); proj4.Proj.projections.add(sterea); proj4.Proj.projections.add(stere); proj4.Proj.projections.add(somerc); proj4.Proj.projections.add(omerc); proj4.Proj.projections.add(lcc); proj4.Proj.projections.add(krovak); proj4.Proj.projections.add(cass); proj4.Proj.projections.add(laea); proj4.Proj.projections.add(aea); proj4.Proj.projections.add(gnom); proj4.Proj.projections.add(cea); proj4.Proj.projections.add(eqc); proj4.Proj.projections.add(poly); proj4.Proj.projections.add(nzmg); proj4.Proj.projections.add(mill); proj4.Proj.projections.add(sinu); proj4.Proj.projections.add(moll); proj4.Proj.projections.add(eqdc); proj4.Proj.projections.add(vandg); proj4.Proj.projections.add(aeqd); proj4.Proj.projections.add(ortho); proj4.Proj.projections.add(qsc); proj4.Proj.projections.add(robin); }; proj4$1.defaultDatum = 'WGS84'; //default datum proj4$1.Proj = Projection; proj4$1.WGS84 = new proj4$1.Proj('WGS84'); proj4$1.Point = Point; proj4$1.toPoint = toPoint; proj4$1.defs = defs; proj4$1.transform = transform; proj4$1.mgrs = mgrs; proj4$1.version = version; includedProjections(proj4$1); return proj4$1; }))); },{}],317:[function(require,module,exports){ 'use strict' var Buffer = require('buffer').Buffer var inherits = require('inherits') var HashBase = require('hash-base') var ARRAY16 = new Array(16) var zl = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 ] var zr = [ 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 ] var sl = [ 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ] var sr = [ 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ] var hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e] var hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000] function RIPEMD160 () { HashBase.call(this, 64) // state this._a = 0x67452301 this._b = 0xefcdab89 this._c = 0x98badcfe this._d = 0x10325476 this._e = 0xc3d2e1f0 } inherits(RIPEMD160, HashBase) RIPEMD160.prototype._update = function () { var words = ARRAY16 for (var j = 0; j < 16; ++j) words[j] = this._block.readInt32LE(j * 4) var al = this._a | 0 var bl = this._b | 0 var cl = this._c | 0 var dl = this._d | 0 var el = this._e | 0 var ar = this._a | 0 var br = this._b | 0 var cr = this._c | 0 var dr = this._d | 0 var er = this._e | 0 // computation for (var i = 0; i < 80; i += 1) { var tl var tr if (i < 16) { tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]) tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]) } else if (i < 32) { tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]) tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]) } else if (i < 48) { tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]) tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]) } else if (i < 64) { tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]) tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]) } else { // if (i<80) { tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]) tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]) } al = el el = dl dl = rotl(cl, 10) cl = bl bl = tl ar = er er = dr dr = rotl(cr, 10) cr = br br = tr } // update state var t = (this._b + cl + dr) | 0 this._b = (this._c + dl + er) | 0 this._c = (this._d + el + ar) | 0 this._d = (this._e + al + br) | 0 this._e = (this._a + bl + cr) | 0 this._a = t } RIPEMD160.prototype._digest = function () { // create padding and handle blocks this._block[this._blockOffset++] = 0x80 if (this._blockOffset > 56) { this._block.fill(0, this._blockOffset, 64) this._update() this._blockOffset = 0 } this._block.fill(0, this._blockOffset, 56) this._block.writeUInt32LE(this._length[0], 56) this._block.writeUInt32LE(this._length[1], 60) this._update() // produce result var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20) buffer.writeInt32LE(this._a, 0) buffer.writeInt32LE(this._b, 4) buffer.writeInt32LE(this._c, 8) buffer.writeInt32LE(this._d, 12) buffer.writeInt32LE(this._e, 16) return buffer } function rotl (x, n) { return (x << n) | (x >>> (32 - n)) } function fn1 (a, b, c, d, e, m, k, s) { return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0 } function fn2 (a, b, c, d, e, m, k, s) { return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0 } function fn3 (a, b, c, d, e, m, k, s) { return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0 } function fn4 (a, b, c, d, e, m, k, s) { return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0 } function fn5 (a, b, c, d, e, m, k, s) { return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0 } module.exports = RIPEMD160 },{"buffer":182,"hash-base":227,"inherits":262}],318:[function(require,module,exports){ /* eslint-disable node/no-deprecated-api */ var buffer = require('buffer') var Buffer = buffer.Buffer // alternative to using Object.keys for old browsers function copyProps (src, dst) { for (var key in src) { dst[key] = src[key] } } if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) { module.exports = buffer } else { // Copy properties from require('buffer') copyProps(buffer, exports) exports.Buffer = SafeBuffer } function SafeBuffer (arg, encodingOrOffset, length) { return Buffer(arg, encodingOrOffset, length) } SafeBuffer.prototype = Object.create(Buffer.prototype) // Copy static methods from Buffer copyProps(Buffer, SafeBuffer) SafeBuffer.from = function (arg, encodingOrOffset, length) { if (typeof arg === 'number') { throw new TypeError('Argument must not be a number') } return Buffer(arg, encodingOrOffset, length) } SafeBuffer.alloc = function (size, fill, encoding) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } var buf = Buffer(size) if (fill !== undefined) { if (typeof encoding === 'string') { buf.fill(fill, encoding) } else { buf.fill(fill) } } else { buf.fill(0) } return buf } SafeBuffer.allocUnsafe = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return Buffer(size) } SafeBuffer.allocUnsafeSlow = function (size) { if (typeof size !== 'number') { throw new TypeError('Argument must be a number') } return buffer.SlowBuffer(size) } },{"buffer":182}],319:[function(require,module,exports){ var Buffer = require('safe-buffer').Buffer // prototype class for hash functions function Hash (blockSize, finalSize) { this._block = Buffer.alloc(blockSize) this._finalSize = finalSize this._blockSize = blockSize this._len = 0 } Hash.prototype.update = function (data, enc) { if (typeof data === 'string') { enc = enc || 'utf8' data = Buffer.from(data, enc) } var block = this._block var blockSize = this._blockSize var length = data.length var accum = this._len for (var offset = 0; offset < length;) { var assigned = accum % blockSize var remainder = Math.min(length - offset, blockSize - assigned) for (var i = 0; i < remainder; i++) { block[assigned + i] = data[offset + i] } accum += remainder offset += remainder if ((accum % blockSize) === 0) { this._update(block) } } this._len += length return this } Hash.prototype.digest = function (enc) { var rem = this._len % this._blockSize this._block[rem] = 0x80 // zero (rem + 1) trailing bits, where (rem + 1) is the smallest // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize this._block.fill(0, rem + 1) if (rem >= this._finalSize) { this._update(this._block) this._block.fill(0) } var bits = this._len * 8 // uint32 if (bits <= 0xffffffff) { this._block.writeUInt32BE(bits, this._blockSize - 4) // uint64 } else { var lowBits = (bits & 0xffffffff) >>> 0 var highBits = (bits - lowBits) / 0x100000000 this._block.writeUInt32BE(highBits, this._blockSize - 8) this._block.writeUInt32BE(lowBits, this._blockSize - 4) } this._update(this._block) var hash = this._hash() return enc ? hash.toString(enc) : hash } Hash.prototype._update = function () { throw new Error('_update must be implemented by subclass') } module.exports = Hash },{"safe-buffer":318}],320:[function(require,module,exports){ var exports = module.exports = function SHA (algorithm) { algorithm = algorithm.toLowerCase() var Algorithm = exports[algorithm] if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)') return new Algorithm() } exports.sha = require('./sha') exports.sha1 = require('./sha1') exports.sha224 = require('./sha224') exports.sha256 = require('./sha256') exports.sha384 = require('./sha384') exports.sha512 = require('./sha512') },{"./sha":321,"./sha1":322,"./sha224":323,"./sha256":324,"./sha384":325,"./sha512":326}],321:[function(require,module,exports){ /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined * in FIPS PUB 180-1 * This source code is derived from sha1.js of the same repository. * The difference between SHA-0 and SHA-1 is just a bitwise rotate left * operation was added. */ var inherits = require('inherits') var Hash = require('./hash') var Buffer = require('safe-buffer').Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 ] var W = new Array(80) function Sha () { this.init() this._w = W Hash.call(this, 64, 56) } inherits(Sha, Hash) Sha.prototype.init = function () { this._a = 0x67452301 this._b = 0xefcdab89 this._c = 0x98badcfe this._d = 0x10325476 this._e = 0xc3d2e1f0 return this } function rotl5 (num) { return (num << 5) | (num >>> 27) } function rotl30 (num) { return (num << 30) | (num >>> 2) } function ft (s, b, c, d) { if (s === 0) return (b & c) | ((~b) & d) if (s === 2) return (b & c) | (b & d) | (c & d) return b ^ c ^ d } Sha.prototype._update = function (M) { var W = this._w var a = this._a | 0 var b = this._b | 0 var c = this._c | 0 var d = this._d | 0 var e = this._e | 0 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16] for (var j = 0; j < 80; ++j) { var s = ~~(j / 20) var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 e = d d = c c = rotl30(b) b = a a = t } this._a = (a + this._a) | 0 this._b = (b + this._b) | 0 this._c = (c + this._c) | 0 this._d = (d + this._d) | 0 this._e = (e + this._e) | 0 } Sha.prototype._hash = function () { var H = Buffer.allocUnsafe(20) H.writeInt32BE(this._a | 0, 0) H.writeInt32BE(this._b | 0, 4) H.writeInt32BE(this._c | 0, 8) H.writeInt32BE(this._d | 0, 12) H.writeInt32BE(this._e | 0, 16) return H } module.exports = Sha },{"./hash":319,"inherits":262,"safe-buffer":318}],322:[function(require,module,exports){ /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined * in FIPS PUB 180-1 * Version 2.1a Copyright Paul Johnston 2000 - 2002. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for details. */ var inherits = require('inherits') var Hash = require('./hash') var Buffer = require('safe-buffer').Buffer var K = [ 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0 ] var W = new Array(80) function Sha1 () { this.init() this._w = W Hash.call(this, 64, 56) } inherits(Sha1, Hash) Sha1.prototype.init = function () { this._a = 0x67452301 this._b = 0xefcdab89 this._c = 0x98badcfe this._d = 0x10325476 this._e = 0xc3d2e1f0 return this } function rotl1 (num) { return (num << 1) | (num >>> 31) } function rotl5 (num) { return (num << 5) | (num >>> 27) } function rotl30 (num) { return (num << 30) | (num >>> 2) } function ft (s, b, c, d) { if (s === 0) return (b & c) | ((~b) & d) if (s === 2) return (b & c) | (b & d) | (c & d) return b ^ c ^ d } Sha1.prototype._update = function (M) { var W = this._w var a = this._a | 0 var b = this._b | 0 var c = this._c | 0 var d = this._d | 0 var e = this._e | 0 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]) for (var j = 0; j < 80; ++j) { var s = ~~(j / 20) var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0 e = d d = c c = rotl30(b) b = a a = t } this._a = (a + this._a) | 0 this._b = (b + this._b) | 0 this._c = (c + this._c) | 0 this._d = (d + this._d) | 0 this._e = (e + this._e) | 0 } Sha1.prototype._hash = function () { var H = Buffer.allocUnsafe(20) H.writeInt32BE(this._a | 0, 0) H.writeInt32BE(this._b | 0, 4) H.writeInt32BE(this._c | 0, 8) H.writeInt32BE(this._d | 0, 12) H.writeInt32BE(this._e | 0, 16) return H } module.exports = Sha1 },{"./hash":319,"inherits":262,"safe-buffer":318}],323:[function(require,module,exports){ /** * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined * in FIPS 180-2 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * */ var inherits = require('inherits') var Sha256 = require('./sha256') var Hash = require('./hash') var Buffer = require('safe-buffer').Buffer var W = new Array(64) function Sha224 () { this.init() this._w = W // new Array(64) Hash.call(this, 64, 56) } inherits(Sha224, Sha256) Sha224.prototype.init = function () { this._a = 0xc1059ed8 this._b = 0x367cd507 this._c = 0x3070dd17 this._d = 0xf70e5939 this._e = 0xffc00b31 this._f = 0x68581511 this._g = 0x64f98fa7 this._h = 0xbefa4fa4 return this } Sha224.prototype._hash = function () { var H = Buffer.allocUnsafe(28) H.writeInt32BE(this._a, 0) H.writeInt32BE(this._b, 4) H.writeInt32BE(this._c, 8) H.writeInt32BE(this._d, 12) H.writeInt32BE(this._e, 16) H.writeInt32BE(this._f, 20) H.writeInt32BE(this._g, 24) return H } module.exports = Sha224 },{"./hash":319,"./sha256":324,"inherits":262,"safe-buffer":318}],324:[function(require,module,exports){ /** * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined * in FIPS 180-2 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009. * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * */ var inherits = require('inherits') var Hash = require('./hash') var Buffer = require('safe-buffer').Buffer var K = [ 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 ] var W = new Array(64) function Sha256 () { this.init() this._w = W // new Array(64) Hash.call(this, 64, 56) } inherits(Sha256, Hash) Sha256.prototype.init = function () { this._a = 0x6a09e667 this._b = 0xbb67ae85 this._c = 0x3c6ef372 this._d = 0xa54ff53a this._e = 0x510e527f this._f = 0x9b05688c this._g = 0x1f83d9ab this._h = 0x5be0cd19 return this } function ch (x, y, z) { return z ^ (x & (y ^ z)) } function maj (x, y, z) { return (x & y) | (z & (x | y)) } function sigma0 (x) { return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10) } function sigma1 (x) { return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7) } function gamma0 (x) { return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3) } function gamma1 (x) { return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10) } Sha256.prototype._update = function (M) { var W = this._w var a = this._a | 0 var b = this._b | 0 var c = this._c | 0 var d = this._d | 0 var e = this._e | 0 var f = this._f | 0 var g = this._g | 0 var h = this._h | 0 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4) for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0 for (var j = 0; j < 64; ++j) { var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0 var T2 = (sigma0(a) + maj(a, b, c)) | 0 h = g g = f f = e e = (d + T1) | 0 d = c c = b b = a a = (T1 + T2) | 0 } this._a = (a + this._a) | 0 this._b = (b + this._b) | 0 this._c = (c + this._c) | 0 this._d = (d + this._d) | 0 this._e = (e + this._e) | 0 this._f = (f + this._f) | 0 this._g = (g + this._g) | 0 this._h = (h + this._h) | 0 } Sha256.prototype._hash = function () { var H = Buffer.allocUnsafe(32) H.writeInt32BE(this._a, 0) H.writeInt32BE(this._b, 4) H.writeInt32BE(this._c, 8) H.writeInt32BE(this._d, 12) H.writeInt32BE(this._e, 16) H.writeInt32BE(this._f, 20) H.writeInt32BE(this._g, 24) H.writeInt32BE(this._h, 28) return H } module.exports = Sha256 },{"./hash":319,"inherits":262,"safe-buffer":318}],325:[function(require,module,exports){ var inherits = require('inherits') var SHA512 = require('./sha512') var Hash = require('./hash') var Buffer = require('safe-buffer').Buffer var W = new Array(160) function Sha384 () { this.init() this._w = W Hash.call(this, 128, 112) } inherits(Sha384, SHA512) Sha384.prototype.init = function () { this._ah = 0xcbbb9d5d this._bh = 0x629a292a this._ch = 0x9159015a this._dh = 0x152fecd8 this._eh = 0x67332667 this._fh = 0x8eb44a87 this._gh = 0xdb0c2e0d this._hh = 0x47b5481d this._al = 0xc1059ed8 this._bl = 0x367cd507 this._cl = 0x3070dd17 this._dl = 0xf70e5939 this._el = 0xffc00b31 this._fl = 0x68581511 this._gl = 0x64f98fa7 this._hl = 0xbefa4fa4 return this } Sha384.prototype._hash = function () { var H = Buffer.allocUnsafe(48) function writeInt64BE (h, l, offset) { H.writeInt32BE(h, offset) H.writeInt32BE(l, offset + 4) } writeInt64BE(this._ah, this._al, 0) writeInt64BE(this._bh, this._bl, 8) writeInt64BE(this._ch, this._cl, 16) writeInt64BE(this._dh, this._dl, 24) writeInt64BE(this._eh, this._el, 32) writeInt64BE(this._fh, this._fl, 40) return H } module.exports = Sha384 },{"./hash":319,"./sha512":326,"inherits":262,"safe-buffer":318}],326:[function(require,module,exports){ var inherits = require('inherits') var Hash = require('./hash') var Buffer = require('safe-buffer').Buffer var K = [ 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817 ] var W = new Array(160) function Sha512 () { this.init() this._w = W Hash.call(this, 128, 112) } inherits(Sha512, Hash) Sha512.prototype.init = function () { this._ah = 0x6a09e667 this._bh = 0xbb67ae85 this._ch = 0x3c6ef372 this._dh = 0xa54ff53a this._eh = 0x510e527f this._fh = 0x9b05688c this._gh = 0x1f83d9ab this._hh = 0x5be0cd19 this._al = 0xf3bcc908 this._bl = 0x84caa73b this._cl = 0xfe94f82b this._dl = 0x5f1d36f1 this._el = 0xade682d1 this._fl = 0x2b3e6c1f this._gl = 0xfb41bd6b this._hl = 0x137e2179 return this } function Ch (x, y, z) { return z ^ (x & (y ^ z)) } function maj (x, y, z) { return (x & y) | (z & (x | y)) } function sigma0 (x, xl) { return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25) } function sigma1 (x, xl) { return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23) } function Gamma0 (x, xl) { return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7) } function Gamma0l (x, xl) { return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25) } function Gamma1 (x, xl) { return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6) } function Gamma1l (x, xl) { return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26) } function getCarry (a, b) { return (a >>> 0) < (b >>> 0) ? 1 : 0 } Sha512.prototype._update = function (M) { var W = this._w var ah = this._ah | 0 var bh = this._bh | 0 var ch = this._ch | 0 var dh = this._dh | 0 var eh = this._eh | 0 var fh = this._fh | 0 var gh = this._gh | 0 var hh = this._hh | 0 var al = this._al | 0 var bl = this._bl | 0 var cl = this._cl | 0 var dl = this._dl | 0 var el = this._el | 0 var fl = this._fl | 0 var gl = this._gl | 0 var hl = this._hl | 0 for (var i = 0; i < 32; i += 2) { W[i] = M.readInt32BE(i * 4) W[i + 1] = M.readInt32BE(i * 4 + 4) } for (; i < 160; i += 2) { var xh = W[i - 15 * 2] var xl = W[i - 15 * 2 + 1] var gamma0 = Gamma0(xh, xl) var gamma0l = Gamma0l(xl, xh) xh = W[i - 2 * 2] xl = W[i - 2 * 2 + 1] var gamma1 = Gamma1(xh, xl) var gamma1l = Gamma1l(xl, xh) // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16] var Wi7h = W[i - 7 * 2] var Wi7l = W[i - 7 * 2 + 1] var Wi16h = W[i - 16 * 2] var Wi16l = W[i - 16 * 2 + 1] var Wil = (gamma0l + Wi7l) | 0 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0 Wil = (Wil + gamma1l) | 0 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0 Wil = (Wil + Wi16l) | 0 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0 W[i] = Wih W[i + 1] = Wil } for (var j = 0; j < 160; j += 2) { Wih = W[j] Wil = W[j + 1] var majh = maj(ah, bh, ch) var majl = maj(al, bl, cl) var sigma0h = sigma0(ah, al) var sigma0l = sigma0(al, ah) var sigma1h = sigma1(eh, el) var sigma1l = sigma1(el, eh) // t1 = h + sigma1 + ch + K[j] + W[j] var Kih = K[j] var Kil = K[j + 1] var chh = Ch(eh, fh, gh) var chl = Ch(el, fl, gl) var t1l = (hl + sigma1l) | 0 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0 t1l = (t1l + chl) | 0 t1h = (t1h + chh + getCarry(t1l, chl)) | 0 t1l = (t1l + Kil) | 0 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0 t1l = (t1l + Wil) | 0 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0 // t2 = sigma0 + maj var t2l = (sigma0l + majl) | 0 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0 hh = gh hl = gl gh = fh gl = fl fh = eh fl = el el = (dl + t1l) | 0 eh = (dh + t1h + getCarry(el, dl)) | 0 dh = ch dl = cl ch = bh cl = bl bh = ah bl = al al = (t1l + t2l) | 0 ah = (t1h + t2h + getCarry(al, t1l)) | 0 } this._al = (this._al + al) | 0 this._bl = (this._bl + bl) | 0 this._cl = (this._cl + cl) | 0 this._dl = (this._dl + dl) | 0 this._el = (this._el + el) | 0 this._fl = (this._fl + fl) | 0 this._gl = (this._gl + gl) | 0 this._hl = (this._hl + hl) | 0 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0 } Sha512.prototype._hash = function () { var H = Buffer.allocUnsafe(64) function writeInt64BE (h, l, offset) { H.writeInt32BE(h, offset) H.writeInt32BE(l, offset + 4) } writeInt64BE(this._ah, this._al, 0) writeInt64BE(this._bh, this._bl, 8) writeInt64BE(this._ch, this._cl, 16) writeInt64BE(this._dh, this._dl, 24) writeInt64BE(this._eh, this._el, 32) writeInt64BE(this._fh, this._fl, 40) writeInt64BE(this._gh, this._gl, 48) writeInt64BE(this._hh, this._hl, 56) return H } module.exports = Sha512 },{"./hash":319,"inherits":262,"safe-buffer":318}],327:[function(require,module,exports){ (function (process,Buffer,__dirname){ // We are modularizing this manually because the current modularize setting in Emscripten has some issues: // https://github.com/kripken/emscripten/issues/5820 // In addition, When you use emcc's modularization, it still expects to export a global object called `Module`, // which is able to be used/called before the WASM is loaded. // The modularization below exports a promise that loads and resolves to the actual sql.js module. // That way, this module can't be used before the WASM is finished loading. // We are going to define a function that a user will call to start loading initializing our Sql.js library // However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module // Instead, we want to return the previously loaded module // TODO: Make this not declare a global if used in the browser var initSqlJsPromise = undefined; var initSqlJs = function (moduleConfig) { if (initSqlJsPromise){ return initSqlJsPromise; } // If we're here, we've never called this function before initSqlJsPromise = new Promise((resolveModule, reject) => { // We are modularizing this manually because the current modularize setting in Emscripten has some issues: // https://github.com/kripken/emscripten/issues/5820 // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add // properties to it, like `preRun`, `postRun`, etc // We are using that to get notified when the WASM has finished loading. // Only then will we return our promise // If they passed in a moduleConfig object, use that // Otherwise, initialize Module to the empty object var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {}; // EMCC only allows for a single onAbort function (not an array of functions) // So if the user defined their own onAbort function, we remember it and call it var originalOnAbortFunction = Module['onAbort']; Module['onAbort'] = function (errorThatCausedAbort) { reject(new Error(errorThatCausedAbort)); if (originalOnAbortFunction){ originalOnAbortFunction(errorThatCausedAbort); } }; Module['postRun'] = Module['postRun'] || []; Module['postRun'].push(function () { // When Emscripted calls postRun, this promise resolves with the built Module resolveModule(Module); }); // There is a section of code in the emcc-generated code below that looks like this: // (Note that this is lowercase `module`) // if (typeof module !== 'undefined') { // module['exports'] = Module; // } // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js! // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags, // but that carries with it additional unnecessary baggage/bugs we don't want either. // So, we have three options: // 1) We undefine `module` // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later // 3) We write a script to remove those lines of code as part of the Make process. // // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future. // That's a nice side effect since we're handling the modularization efforts ourselves module = undefined; // The emcc-generated code and shell-post.js code goes below, // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort var aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {}); var wa=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.ga=a;this.db=b;this.oa=1;this.Ha=[]}a.prototype.bind=function(a){if(!this.ga)throw"Statement closed";this.reset();return Array.isArray(a)?this.pb(a):this.qb(a)};a.prototype.step=function(){var a;if(!this.ga)throw"Statement closed";this.oa=1;switch(a=fc(this.ga)){case c.lb:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.wb=function(a){null==a&&(a=this.oa++);return hc(this.ga,a)};a.prototype.xb= function(a){null==a&&(a=this.oa++);return ic(this.ga,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.oa++);var c=jc(this.ga,a);var d=kc(this.ga,a);var e=new Uint8Array(c);for(a=b=0;0<=c?bc;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=pb(this.ga);0<=d?bd;a=0<=d?++b:--b)switch(lc(this.ga,a)){case c.kb:case c.FLOAT:e.push(this.wb(a));break;case c.mb:e.push(this.xb(a));break;case c.cb:e.push(this.getBlob(a)); break;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=pb(this.ga);0<=b?ab;d=0<=b?++a:--a)c.push(mc(this.ga,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b>>0);if(null!=a){var c=this.filename,d=c?m("/",c):"/";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if("string"===typeof a){for(var e=Array(a.length),k=0,Oa=a.length;kc;e=0<=c?++g:--g){var n=q(d+4*e,"i32");var A=wc(n);e=function(){switch(!1){case 1!==A:return ub;case 2!==A:return ub;case 3!==A:return xc;case 4!==A:return function(a){var b,c;var d=zc(a);var e=Ac(a);a=new Uint8Array(d);for(b=c=0;0<=d?cd;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(n);k.push(e)}try{var v=b.apply(null,k)}catch(yc){v=yc;vb(a,v,-1);return}switch(typeof v){case "boolean":Bc(a,v?1:0);break;case "number":Cc(a, v);break;case "string":Dc(a,v,-1,-1);break;case "object":null===v?wb(a):null!=v.length?(c=ca(v),Ec(a,c,v.length,-1),fa(c)):vb(a,"Wrong API use : tried to return a value of an unknown type ("+v+").",-1);break;default:wb(a)}});this.qa[a]=d;this.handleError(Fc(this.db,a,b.length,c.nb,0,d,0,0,0));return this};return a}();var g=f.cwrap("sqlite3_open","number",["string","number"]);var k=f.cwrap("sqlite3_close_v2","number",["number"]);var n=f.cwrap("sqlite3_exec","number",["number","string","number","number", "number"]);f.cwrap("sqlite3_free","",["number"]);var v=f.cwrap("sqlite3_changes","number",["number"]);var A=f.cwrap("sqlite3_prepare_v2","number",["number","string","number","number","number"]);var ha=f.cwrap("sqlite3_prepare_v2","number",["number","number","number","number","number"]);var da=f.cwrap("sqlite3_bind_text","number",["number","number","number","number","number"]);var Pa=f.cwrap("sqlite3_bind_blob","number",["number","number","number","number","number"]);var oc=f.cwrap("sqlite3_bind_double", "number",["number","number","number"]);var nc=f.cwrap("sqlite3_bind_int","number",["number","number","number"]);var pc=f.cwrap("sqlite3_bind_parameter_index","number",["number","string"]);var fc=f.cwrap("sqlite3_step","number",["number"]);var uc=f.cwrap("sqlite3_errmsg","string",["number"]);var pb=f.cwrap("sqlite3_data_count","number",["number"]);var hc=f.cwrap("sqlite3_column_double","number",["number","number"]);var ic=f.cwrap("sqlite3_column_text","string",["number","number"]);var kc=f.cwrap("sqlite3_column_blob", "number",["number","number"]);var jc=f.cwrap("sqlite3_column_bytes","number",["number","number"]);var lc=f.cwrap("sqlite3_column_type","number",["number","number"]);var mc=f.cwrap("sqlite3_column_name","string",["number","number"]);var rc=f.cwrap("sqlite3_reset","number",["number"]);var qc=f.cwrap("sqlite3_clear_bindings","number",["number"]);var sc=f.cwrap("sqlite3_finalize","number",["number"]);var Fc=f.cwrap("sqlite3_create_function_v2","number","number string number number number number number number number".split(" ")); var wc=f.cwrap("sqlite3_value_type","number",["number"]);var zc=f.cwrap("sqlite3_value_bytes","number",["number"]);var xc=f.cwrap("sqlite3_value_text","string",["number"]);f.cwrap("sqlite3_value_int","number",["number"]);var Ac=f.cwrap("sqlite3_value_blob","number",["number"]);var ub=f.cwrap("sqlite3_value_double","number",["number"]);var Cc=f.cwrap("sqlite3_result_double","",["number","number"]);var wb=f.cwrap("sqlite3_result_null","",["number"]);var Dc=f.cwrap("sqlite3_result_text","",["number", "string","number","number"]);var Ec=f.cwrap("sqlite3_result_blob","",["number","number","number","number"]);var Bc=f.cwrap("sqlite3_result_int","",["number","number"]);f.cwrap("sqlite3_result_int64","",["number","number"]);var vb=f.cwrap("sqlite3_result_error","",["number","string","number"]);var tc=f.cwrap("RegisterExtensionFunctions","number",["number"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var ea=0;c.Aa=0;c.Dd=1;c.Wd=2;c.ge=3;c.Gb=4;c.Ib=5;c.Zd=6;c.NOMEM=7;c.je=8;c.Xd=9;c.Yd= 10;c.Lb=11;c.NOTFOUND=12;c.Vd=13;c.Jb=14;c.he=15;c.EMPTY=16;c.ke=17;c.le=18;c.Kb=19;c.$d=20;c.be=21;c.ce=22;c.Hb=23;c.Ud=24;c.ie=25;c.de=26;c.ee=27;c.me=28;c.lb=100;c.DONE=101;c.kb=1;c.FLOAT=2;c.mb=3;c.cb=4;c.fe=5;c.nb=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(wa);var xa={},w;for(w in f)f.hasOwnProperty(w)&&(xa[w]=f[w]);f.arguments=[];f.thisProgram="./this.program";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var ya=!1,x=!1,y=!1,za=!1;ya="object"===typeof window; x="function"===typeof importScripts;y="object"===typeof process&&"function"===typeof require&&!ya&&!x;za=!ya&&!y&&!x;var z=""; if(y){z=__dirname+"/";var Aa,Ba;f.read=function(a,b){var c=B(a);c||(Aa||(Aa=require("fs")),Ba||(Ba=require("path")),a=Ba.normalize(a),c=Aa.readFileSync(a));return b?c:c.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1>2];a=b+a+15&-16;if(a<=Ha())D[Ga>>2]=a;else if(!Ia(a))return 0;return b}var ra=1,t=Array(64);function va(a){for(var b=0;64>b;b++)if(!t[b])return t[b]=a,ra+b;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";}var Ja=0; function q(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return l[a>>0];case "i8":return l[a>>0];case "i16":return Ka[a>>1];case "i32":return D[a>>2];case "i64":return D[a>>2];case "float":return La[a>>2];case "double":return Ma[a>>3];default:C("invalid type for getValue: "+b)}return null}var Na=!1;function assert(a,b){a||C("Assertion failed: "+b)}function Qa(a){var b=f["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b} function Ra(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,E,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Qa(a),k=[];a=0;if(d)for(var n=0;n>0]=0;break;case "i8":l[a>>0]=0;break;case "i16":Ka[a>>1]=0;break;case "i32":D[a>>2]=0;break;case "i64":aa=[0,1<=+Sa(0)?~~+Ta(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case "float":La[a>>2]=0;break;case "double":Ma[a>>3]=0;break;default:C("invalid type for setValue: "+b)}}var Ua=0,Va=3; function ca(a){var b=Ua;if("number"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;var e;b==Va?e=g:e=[Wa,h,Fa][b](Math.max(d,1));if(c){var g=e;assert(0==(e&3));for(a=e+(d&-4);g>2]=0;for(a=e+d;g>0]=0;return e}a.subarray||a.slice?E.set(a,e):E.set(new Uint8Array(a),e);return e}var Xa="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0; function u(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function F(a){return a?u(E,a,void 0):""} function r(a,b,c,d){if(!(0=k){var n=a.charCodeAt(++g);k=65536+((k&1023)<<10)|n&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e} function oa(a){for(var b=0,c=0;c=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");function Ya(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function Za(a){0ab&&Ea("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+ab+"! (TOTAL_STACK=5242880)");f.buffer?buffer=f.buffer:buffer=new ArrayBuffer(ab);$a();D[Ga>>2]=5303376; function bb(a){for(;0>2];var c=D[b>>2]}else mb.pa=!0,I.USER=I.LOGNAME="web_user",I.PATH="/",I.PWD="/",I.HOME="/home/web_user",I.LANG="C.UTF-8",I._=f.thisProgram,c=gb?Wa(1024):Fa(1024),b=gb?Wa(256):Fa(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in I)if("string"===typeof I[e]){var g=e+"="+I[e];a.push(g);d+=g.length}if(1024>0]=d.charCodeAt(n);l[k>>0]=0;D[b+ 4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function nb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function ob(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function qb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=ob(a.split("/").filter(function(a){return!!a}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a} function rb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function sb(a){if("/"===a)return"/";var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function tb(){var a=Array.prototype.slice.call(arguments,0);return qb(a.join("/"))}function m(a,b){return qb(a+"/"+b)} function xb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:"/";if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=ob(a.split("/").filter(function(a){return!!a}),!b).join("/");return(b?"/":"")+a||"."}var yb=[];function zb(a,b){yb[a]={input:[],output:[],wa:b};Ab(a,Bb)} var Bb={open:function(a){var b=yb[a.node.rdev];if(!b)throw new J(K.Fa);a.tty=b;a.seekable=!1},close:function(a){a.tty.wa.flush(a.tty)},flush:function(a){a.tty.wa.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.wa.$a)throw new J(K.Ra);for(var e=0,g=0;g=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.da,a.da=new Uint8Array(b),0b)a.da.length=b;else for(;a.da.length=a.node.ha)return 0;a=Math.min(a.node.ha-e,d);if(8b)throw new J(K.ja);return b},Sa:function(a,b,c){L.Wa(a.node,b+c);a.node.ha=Math.max(a.node.ha,b+c)},Ca:function(a,b,c,d,e,g,k){if(32768!== (a.node.mode&61440))throw new J(K.Fa);c=a.node.da;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0>2)}catch(c){if(!c.code)throw c; throw new J(K[c.code]);}return b.mode},la:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.ka.Ka.root);b.reverse();return tb.apply(null,b)},ub:function(a){a&=-2656257;var b=0,c;for(c in O.Xa)a&c&&(b|=O.Xa[c],a^=c);if(a)throw new J(K.ja);return b},ba:{ma:function(a){a=O.la(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}O.Ba&&!b.sa&&(b.sa=4096);O.Ba&&!b.blocks&&(b.blocks=(b.size+b.sa-1)/b.sa|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink, uid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,sa:b.sa,blocks:b.blocks}},ia:function(a,b){var c=O.la(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},lookup:function(a,b){var c=m(O.la(a),b);c=O.Za(c);return O.createNode(a,b,c)},ya:function(a,b,c,d){a=O.createNode(a,b,c,d);b=O.la(a);try{M(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,"",{mode:a.mode})}catch(e){if(!e.code)throw e; throw new J(K[e.code]);}return a},rename:function(a,b,c){a=O.la(a);b=m(O.la(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},unlink:function(a,b){a=m(O.la(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},rmdir:function(a,b){a=m(O.la(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},readdir:function(a){a=O.la(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new J(K[b.code]);}},symlink:function(a, b,c){a=m(O.la(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new J(K[d.code]);}},readlink:function(a){var b=O.la(a);try{return b=fs.readlinkSync(b),b=Hb.relative(Hb.resolve(a.ka.Ka.root),b)}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}}},ea:{open:function(a){var b=O.la(a.node);try{32768===(a.node.mode&61440)&&(a.za=fs.openSync(b,O.ub(a.flags)))}catch(c){if(!c.code)throw c;throw new J(K[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.za&&fs.closeSync(a.za)}catch(b){if(!b.code)throw b; throw new J(K[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.za,O.Ua(b.buffer),c,d,e)}catch(g){throw new J(K[g.code]);}},ra:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.za).size}catch(d){throw new J(K[d.code]);}if(0>b)throw new J(K.ja);return b}}},Ib=null,Jb={},P=[],Kb=1,Q=null,Lb=!0,R={},J=null, Gb={};function S(a,b){a=xb("/",a);b=b||{};if(!a)return{path:"",node:null};var c={Ya:!0,Ma:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8>>0)%Q.length}function Pb(a){var b=Ob(a.parent.id,a.name);a.va=Q[b];Q[b]=a}function Qb(a){var b=Ob(a.parent.id,a.name);if(Q[b]===a)Q[b]=a.va;else for(b=Q[b];b;){if(b.va===a){b.va=a.va;break}b=b.va}} function N(a,b){var c;if(c=(c=Rb(a,"x"))?c:a.ba.lookup?0:13)throw new J(c,a);for(c=Q[Ob(a.id,b)];c;c=c.va){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ba.lookup(a,b)} function Fb(a,b,c,d){Sb||(Sb=function(a,b,c,d){a||(a=this);this.parent=a;this.ka=a.ka;this.ua=null;this.id=Kb++;this.name=b;this.mode=c;this.ba={};this.ea={};this.rdev=d},Sb.prototype={},Object.defineProperties(Sb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Sb(a,b,c,d);Pb(a);return a} function M(a){return 16384===(a&61440)}var Tb={r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218};function Ub(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Rb(a,b){if(Lb)return 0;if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 13}else return 13;return 0}function Vb(a,b){try{return N(a,b),17}catch(c){}return Rb(a,"wx")} function Wb(a,b,c){try{var d=N(a,b)}catch(e){return e.fa}if(a=Rb(a,"wx"))return a;if(c){if(!M(d.mode))return 20;if(d===d.parent||"/"===Nb(d))return 16}else if(M(d.mode))return 21;return 0}function Xb(a){var b=4096;for(a=a||0;a<=b;a++)if(!P[a])return a;throw new J(24);} function Yb(a,b){Zb||(Zb=function(){},Zb.prototype={},Object.defineProperties(Zb.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new Zb,d;for(d in a)c[d]=a[d];a=c;b=Xb(b);a.fd=b;return P[b]=a}var Eb={open:function(a){a.ea=Jb[a.node.rdev].ea;a.ea.open&&a.ea.open(a)},ra:function(){throw new J(29);}};function Ab(a,b){Jb[a]={ea:b}} function $b(a,b){var c="/"===b,d=!b;if(c&&Ib)throw new J(16);if(!c&&!d){var e=S(b,{Ya:!1});b=e.path;e=e.node;if(e.ua)throw new J(16);if(!M(e.mode))throw new J(20);}b={type:a,Ka:{},bb:b,Ab:[]};a=a.ka(b);a.ka=b;b.root=a;c?Ib=a:e&&(e.ua=b,e.ka&&e.ka.Ab.push(b))}function ja(a,b,c){var d=S(a,{parent:!0}).node;a=sb(a);if(!a||"."===a||".."===a)throw new J(22);var e=Vb(d,a);if(e)throw new J(e);if(!d.ba.ya)throw new J(1);return d.ba.ya(d,a,b,c)}function T(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)} function ac(a,b,c){"undefined"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function bc(a,b){if(!xb(a))throw new J(2);var c=S(b,{parent:!0}).node;if(!c)throw new J(2);b=sb(b);var d=Vb(c,b);if(d)throw new J(d);if(!c.ba.symlink)throw new J(1);c.ba.symlink(c,b,a)} function ua(a){var b=S(a,{parent:!0}).node,c=sb(a),d=N(b,c),e=Wb(b,c,!1);if(e)throw new J(e);if(!b.ba.unlink)throw new J(1);if(d.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(a)}catch(g){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.ba.unlink(b,c);Qb(d);try{if(R.onDeletePath)R.onDeletePath(a)}catch(g){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}} function Mb(a){a=S(a).node;if(!a)throw new J(2);if(!a.ba.readlink)throw new J(22);return xb(Nb(a.parent),a.ba.readlink(a))}function sa(a,b){a=S(a,{ta:!b}).node;if(!a)throw new J(2);if(!a.ba.ma)throw new J(1);return a.ba.ma(a)}function cc(a){return sa(a,!0)}function ka(a,b){var c;"string"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);c.ba.ia(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})} function dc(a){var b;"string"===typeof a?b=S(a,{ta:!0}).node:b=a;if(!b.ba.ia)throw new J(1);b.ba.ia(b,{timestamp:Date.now()})}function ec(a,b){if(0>b)throw new J(22);var c;"string"===typeof a?c=S(a,{ta:!0}).node:c=a;if(!c.ba.ia)throw new J(1);if(M(c.mode))throw new J(21);if(32768!==(c.mode&61440))throw new J(22);if(a=Rb(c,"w"))throw new J(a);c.ba.ia(c,{size:b,timestamp:Date.now()})} function p(a,b,c,d){if(""===a)throw new J(2);if("string"===typeof b){var e=Tb[b];if("undefined"===typeof e)throw Error("Unknown file open mode: "+b);b=e}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=qb(a);try{g=S(a,{ta:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new J(17);}else g=ja(a,c,0),e=!0;if(!g)throw new J(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!M(g.mode))throw new J(20);if(!e&&(c=g?40960===(g.mode&61440)?40:M(g.mode)&& ("r"!==Ub(b)||b&512)?21:Rb(g,Ub(b)):2))throw new J(c);b&512&&ec(g,0);b&=-641;d=Yb({node:g,path:Nb(g),flags:b,seekable:!0,position:0,ea:g.ea,Fb:[],error:!1},d);d.ea.open&&d.ea.open(d);!f.logReadFiles||b&1||(vc||(vc={}),a in vc||(vc[a]=1,console.log("FS.trackingDelegate error on read file: "+a)));try{R.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),R.onOpenFile(a,g))}catch(k){console.log("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+k.message)}return d} function ma(a){if(null===a.fd)throw new J(9);a.Ja&&(a.Ja=null);try{a.ea.close&&a.ea.close(a)}catch(b){throw b;}finally{P[a.fd]=null}a.fd=null}function Gc(a,b,c){if(null===a.fd)throw new J(9);if(!a.seekable||!a.ea.ra)throw new J(29);if(0!=c&&1!=c&&2!=c)throw new J(22);a.position=a.ea.ra(a,b,c);a.Fb=[]} function ta(a,b,c,d,e){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(1===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.read)throw new J(22);var g="undefined"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.read(a,b,c,d,e);g||(a.position+=b);return b} function la(a,b,c,d,e,g){if(0>d||0>e)throw new J(22);if(null===a.fd)throw new J(9);if(0===(a.flags&2097155))throw new J(9);if(M(a.node.mode))throw new J(21);if(!a.ea.write)throw new J(22);a.flags&1024&&Gc(a,0,2);var k="undefined"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new J(29);b=a.ea.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&R.onWriteToFile)R.onWriteToFile(a.path)}catch(n){console.log("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+n.message)}return b} function Hc(){J||(J=function(a,b){this.node=b;this.Db=function(a){this.fa=a};this.Db(a);this.message="FS error";this.stack&&Object.defineProperty(this,"stack",{value:Error().stack,writable:!0})},J.prototype=Error(),J.prototype.constructor=J,[2].forEach(function(a){Gb[a]=new J(a);Gb[a].stack=""}))}var Ic;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c} function Jc(a,b,c){a=m("/dev",a);var d=ia(!!b,!!c);Kc||(Kc=64);var e=Kc++<<8|0;Ab(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var V=0; function W(){V+=4;return D[V-4>>2]}function X(){return F(W())}function Y(){var a=P[W()];if(!a)throw new J(K.Na);return a}function Nc(a,b){V=b;return 0}function Ha(){return l.length} function Oc(a){try{var b=new ArrayBuffer(a);if(b.byteLength!=a)return!1;(new Int8Array(b)).set(l)}catch(c){return!1}f._emscripten_replace_memory(b);l=new Int8Array(b);Ka=new Int16Array(b);D=new Int32Array(b);E=new Uint8Array(b);new Uint16Array(b);new Uint32Array(b);La=new Float32Array(b);Ma=new Float64Array(b);return buffer=b} function Ia(a){if(2130706432=b?b=Za(2*b):b=Math.min(Za((3*b+2147483648)/4),2130706432);a=Oc(b);if(!a||a.byteLength!=b)return!1;$a();return!0}function Pc(a){if(0===a)return 0;a=F(a);if(!I.hasOwnProperty(a))return 0;Pc.pa&&fa(Pc.pa);a=I[a];var b=oa(a)+1,c=Wa(b);c&&r(a,l,c,b);Pc.pa=c;return Pc.pa}function Qc(a){return Math.log(a)/Math.LN10}r("GMT",E,60384,4); function Rc(){function a(a){return(a=a.toTimeString().match(/\(([A-Za-z ]+)\)$/))?a[1]:"GMT"}if(!Rc.pa){Rc.pa=!0;D[Sc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Tc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ca(ba(d));e=ca(ba(e));c.getTimezoneOffset()>2]=d,D[Uc()+4>>2]=e):(D[Uc()>>2]=e,D[Uc()+4>>2]=d)}} function Vc(a,b){Rc();a=new Date(1E3*D[a>>2]);D[b>>2]=a.getSeconds();D[b+4>>2]=a.getMinutes();D[b+8>>2]=a.getHours();D[b+12>>2]=a.getDate();D[b+16>>2]=a.getMonth();D[b+20>>2]=a.getFullYear()-1900;D[b+24>>2]=a.getDay();var c=new Date(a.getFullYear(),0,1);D[b+28>>2]=(a.getTime()-c.getTime())/864E5|0;D[b+36>>2]=-(60*a.getTimezoneOffset());var d=(new Date(2E3,6,1)).getTimezoneOffset();c=c.getTimezoneOffset();a=(d!=c&&a.getTimezoneOffset()==Math.min(c,d))|0;D[b+32>>2]=a;a=D[Uc()+(a?4:0)>>2];D[b+40>>2]= a;return b}function Wc(a){a/=1E3;if((ya||x)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b>4; e=(e&15)<<4|g>>2;var n=(g&3)<<6|k;b+=String.fromCharCode(d);64!==g&&(b+=String.fromCharCode(e));64!==k&&(b+=String.fromCharCode(n))}while(c>2]=c.position;c.Ja&&0===d&&0===g&&(c.Ja=null);return 0}catch(k){return"undefined"!==typeof U&&k instanceof J||C(k),-k.fa}},v:function(a,b){V=b;try{var c=X(),d=W();ka(c,d);return 0}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},w:function(a,b){V=b;try{var c=W(),d=W();if(0===d)return-K.ja;if(dd?-K.ja:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0; case 3:return c.flags;case 4:return d=W(),c.flags|=d,0;case 12:return d=W(),Ka[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-K.ja;case 9:return nb(K.ja),-1;default:return-K.ja}}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},I:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return ta(c,l,d,e)}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},J:function(a,b){V=b;try{var c=X();var d=W();if(d&-8)var e=-K.ja;else{var g=S(c,{ta:!0}).node;a="";d&4&&(a+="r"); d&2&&(a+="w");d&1&&(a+="x");e=a&&Rb(g,a)?-K.eb:0}return e}catch(k){return"undefined"!==typeof U&&k instanceof J||C(k),-k.fa}},K:function(a,b){V=b;try{var c=X(),d=W();a=c;a=qb(a);"/"===a[a.length-1]&&(a=a.substr(0,a.length-1));T(a,d);return 0}catch(e){return"undefined"!==typeof U&&e instanceof J||C(e),-e.fa}},L:function(a,b){V=b;try{var c=Y(),d=W(),e=W();return la(c,l,d,e)}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},M:function(a,b){V=b;try{var c=X(),d=S(c,{parent:!0}).node, e=sb(c),g=N(d,e),k=Wb(d,e,!0);if(k)throw new J(k);if(!d.ba.rmdir)throw new J(1);if(g.ua)throw new J(16);try{R.willDeletePath&&R.willDeletePath(c)}catch(n){console.log("FS.trackingDelegate['willDeletePath']('"+c+"') threw an exception: "+n.message)}d.ba.rmdir(d,e);Qb(g);try{if(R.onDeletePath)R.onDeletePath(c)}catch(n){console.log("FS.trackingDelegate['onDeletePath']('"+c+"') threw an exception: "+n.message)}return 0}catch(n){return"undefined"!==typeof U&&n instanceof J||C(n),-n.fa}},N:function(a,b){V= b;try{var c=X(),d=W(),e=W();return p(c,d,e).fd}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},O:function(a,b){V=b;try{var c=Y();ma(c);return 0}catch(d){return"undefined"!==typeof U&&d instanceof J||C(d),-d.fa}},P:function(a,b){V=b;try{var c=X(),d=W();var e=W();if(0>=e)var g=-K.ja;else{var k=Mb(c),n=Math.min(e,oa(k)),v=l[d+n];r(k,E,d,e+1);l[d+n]=v;g=n}return g}catch(A){return"undefined"!==typeof U&&A instanceof J||C(A),-A.fa}},Q:function(a,b){V=b;try{var c=W(),d=W(),e=Lc[c];if(!e)return 0; if(d===e.yb){var g=P[e.fd],k=e.flags,n=new Uint8Array(E.subarray(c,c+d));g&&g.ea.Da&&g.ea.Da(g,n,0,d,k);Lc[c]=null;e.Ga&&fa(e.zb)}return 0}catch(v){return"undefined"!==typeof U&&v instanceof J||C(v),-v.fa}},R:function(a,b){V=b;try{var c=W(),d=W(),e=P[c];if(!e)throw new J(9);ka(e.node,d);return 0}catch(g){return"undefined"!==typeof U&&g instanceof J||C(g),-g.fa}},S:Ha,T:function(a,b,c){E.set(E.subarray(b,b+c),a)},U:Ia,V:Pc,W:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0}, X:Qc,Y:function(a){return Qc(a)},Z:function(){C("trap!")},_:function(a){return Vc(a,60336)},$:Vc,aa:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Wc(1E6*c+a/1E3)},ab:function(a){switch(a){case 30:return 16384;case 85:return 130048;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809; case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32; case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}nb(22);return-1}, ac:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},ad:Rc,ae:Wc,af:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=F(a);try{b=c;var d=S(a,{ta:!0}).node;d.ba.ia(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof J)){a+=" : ";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d="(no stack trace available)";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+="\n"+f.extraStackTrace());d=Ya(d);throw a+d;}nb(a.fa);return-1}}, ag:function(){C("OOM")},ah:Oc,ai:60480,aj:Ga};// EMSCRIPTEN_START_ASM var Z=(/** @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.ai|0,i=env.aj|0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0.0,r=global.Infinity,s=global.Math.floor,t=global.Math.abs,u=global.Math.sqrt,v=global.Math.pow,w=global.Math.cos,x=global.Math.sin,y=global.Math.tan,z=global.Math.acos,A=global.Math.asin,B=global.Math.atan,C=global.Math.atan2,D=global.Math.exp,E=global.Math.log,F=global.Math.ceil,G=global.Math.imul,H=global.Math.min,I=global.Math.clz32,J=env.a,K=env.b,L=env.c,M=env.d,N=env.e,O=env.f,P=env.g,Q=env.h,R=env.i,S=env.j,T=env.k,U=env.l,V=env.m,W=env.n,X=env.o,Y=env.p,Z=env.q,_=env.r,$=env.s,aa=env.t,ba=env.u,ca=env.v,da=env.w,ea=env.x,fa=env.y,ga=env.z,ha=env.A,ia=env.B,ja=env.C,ka=env.D,la=env.E,ma=env.F,na=env.G,oa=env.H,pa=env.I,qa=env.J,ra=env.K,sa=env.L,ta=env.M,ua=env.N,va=env.O,wa=env.P,xa=env.Q,ya=env.R,za=env.S,Aa=env.T,Ba=env.U,Ca=env.V,Da=env.W,Ea=env.X,Fa=env.Y,Ga=env.Z,Ha=env._,Ia=env.$,Ja=env.aa,Ka=env.ab,La=env.ac,Ma=env.ad,Na=env.ae,Oa=env.af,Pa=env.ag,Qa=env.ah,Ra=60496,Sa=5303376,Ta=0.0;function Ua(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 Rg(f){f=f|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.0,v=0.0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,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,Sa=0,Ta=0,Ua=0,Va=0,$a=0,db=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,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=0,Bb=0,Cb=0,Eb=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,_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,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,ad=0,bd=0,cd=0,ed=0,fd=0,gd=0,hd=0,id=0,jd=0,kd=0,ld=0,md=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,Od=0,Pd=0,Qd=0,Rd=0,Td=0,Ud=0,Vd=0,Wd=0,Yd=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,Qe=0,Re=0,Se=0,Te=0,Ue=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,xf=0,yf=0,zf=0,Af=0,Bf=0,Cf=0,Ef=0,Ff=0,Gf=0,Hf=0;Hf=Ra;Ra=Ra+864|0;nf=Hf+848|0;yf=Hf+840|0;Be=Hf+832|0;Gf=Hf+816|0;Ff=Hf+800|0;Ef=Hf+792|0;ze=Hf+784|0;ye=Hf+776|0;xe=Hf+768|0;we=Hf+760|0;ve=Hf+752|0;ue=Hf+736|0;te=Hf+728|0;bf=Hf+720|0;Ye=Hf+712|0;Xe=Hf+704|0;We=Hf+696|0;Ue=Hf+688|0;Te=Hf+664|0;Se=Hf+656|0;Re=Hf+648|0;Qe=Hf+640|0;Oe=Hf+624|0;Ne=Hf+608|0;Me=Hf+592|0;Le=Hf+576|0;Ke=Hf+560|0;Je=Hf+544|0;ef=Hf+536|0;df=Hf+528|0;cf=Hf+520|0;Ie=Hf+512|0;He=Hf+504|0;Ge=Hf+496|0;Fe=Hf+488|0;Ee=Hf+472|0;De=Hf+456|0;Ce=Hf+440|0;Ae=Hf+432|0;lf=Hf+416|0;gf=Hf+408|0;kf=Hf+400|0;ff=Hf+392|0;rf=Hf+352|0;Hd=Hf+112|0;Td=Hf+280|0;Yd=Hf;ee=Hf+272|0;je=Hf+852|0;le=f+104|0;q=c[le>>2]|0;Cf=c[f>>2]|0;sd=a[Cf+78>>0]|0;xd=f+88|0;o=c[xd>>2]|0;i=c[f+156>>2]|0;if(i|0?(k=c[Cf+16>>2]|0,l=c[Cf+20>>2]|0,(l|0)>0):0){h=0;do{if(((h|0)!=1?1<>2]|0,m|0):0)c[(c[m+4>>2]|0)+4>>2]=c[m>>2];h=h+1|0}while((h|0)!=(l|0))}Af=Cf+320|0;if(!(c[Af>>2]|0))h=-1;else{h=c[Cf+328>>2]|0;h=h-(((c[f+176>>2]|0)>>>0)%(h>>>0)|0)|0}Bf=f+40|0;a:do if((c[Bf>>2]|0)==7){l=q;n=0;k=0;m=q;j=h;i=Cf+81|0;oa=3892}else{Zc=f+56|0;c[Zc>>2]=0;c[Zc+4>>2]=0;Zc=f+120|0;c[Zc>>2]=0;c[Cf+404>>2]=0;lc=Cf+264|0;b:do if(!(c[lc>>2]|0)){xf=f+36|0;mc=f+100|0;qf=Cf+88|0;nc=f+196|0;oc=f+96|0;pc=f+147|0;uf=Cf+16|0;vf=f+149|0;qc=rf+8|0;rc=f+44|0;sc=Cf+100|0;tc=Cf+104|0;uc=f+168|0;vc=Hd+8|0;wc=Hd+10|0;xc=Hd+4|0;zc=Hd+8|0;Ac=Hd+10|0;Bc=Hd+4|0;Cc=Cf+90|0;Dc=Td+4|0;Ec=Td+12|0;Fc=Td+16|0;Gc=Td+20|0;Hc=Td+24|0;Ic=Td+28|0;Jc=Td+8|0;Kc=Td+64|0;Lc=Td+40|0;Mc=Td+44|0;Nc=Td+48|0;Oc=Td+52|0;Pc=Td+56|0;Qc=Td+60|0;Rc=Td+61|0;Sc=Cf+32|0;$c=Cf+272|0;Tc=rf+8|0;Uc=rf+4|0;mf=f+124|0;Vc=Cf+332|0;Wc=rf+32|0;sa=rf+8|0;ad=Cf+184|0;ta=f+92|0;zf=Cf+81|0;ua=f+32|0;bd=Cf+176|0;qd=Cf+444|0;va=f+24|0;wa=Yd+8|0;xa=Yd+10|0;ya=Yd+4|0;za=Yd+14|0;Aa=Hd+8|0;Ba=Hd+4|0;Ca=Cf+232|0;Da=Cf+108|0;Ea=rf+8|0;Fa=rf+32|0;Ga=rf+24|0;Ha=Cf+172|0;hf=Cf+24|0;Ia=rf+8|0;Ja=rf+4|0;Ka=rf+16|0;Ze=Cf+480|0;La=f+204|0;Ma=Cf+148|0;Na=Cf+472|0;Oa=f+64|0;Pa=Cf+464|0;Xc=Cf+276|0;Qa=rf+12|0;Sa=Hd+8|0;Ta=Hd+32|0;Ua=rf+8|0;Va=rf+4|0;$a=Cf+4|0;db=Cf+356|0;fb=Cf+328|0;gb=Cf+324|0;hb=sd<<24>>24==1;ib=f+184|0;_e=Cf+304|0;$e=Cf+308|0;af=Cf+300|0;jb=Hd+8|0;kb=Hd+32|0;lb=Hd+24|0;mb=rf+16|0;nb=rf+12|0;ob=Cf+165|0;pb=rf+12|0;qb=rf+20|0;Yc=Cf+288|0;rb=rf+20|0;tb=rf+8|0;ub=rf+4|0;vb=rf+20|0;wb=f+108|0;hd=f+188|0;Fd=Cf+456|0;Gd=Cf+452|0;xb=rf+16|0;yb=rf+28|0;zb=Cf+40|0;Ab=Hd+8|0;Bb=Hd+20|0;Cb=Hd+24|0;Eb=Hd+16|0;Gb=Hd+12|0;Hb=f+216|0;Ib=f+28|0;cd=Cf+296|0;ed=Cf+284|0;Jb=rf+10|0;Kb=rf+20|0;Lb=Cf+180|0;of=Cf+196|0;pf=Cf+200|0;Mb=rf+8|0;Nb=rf+8|0;fd=Cf+292|0;Ob=rf+16|0;Pb=Cf+348|0;Qb=rf+24|0;Rb=Cf+86|0;gd=Cf+79|0;Sb=rf+32|0;Tb=Cf+228|0;Ub=rf+8|0;Vb=Cf+344|0;Wb=Cf+340|0;Xb=rf+12|0;Yb=Hd+16|0;_b=Hd+8|0;ac=Hd+12|0;bc=f+48|0;ra=Cf+80|0;cc=rf+8|0;dc=Cf+336|0;ec=rf+20|0;Id=Cf+87|0;fc=Hd+24|0;sf=Cf+20|0;jf=Cf+56|0;gc=f+72|0;hc=f+80|0;ic=rf+8|0;Jd=f+146|0;jc=Cf+8|0;kc=rf+4|0;m=q;p=q+((c[xf>>2]|0)*20|0)|0;K=0;k=0;qa=0;n=0;pa=o;c:while(1){n=n+1|0;z=a[p>>0]|0;d:do switch(z<<24>>24){case 81:{oa=153;break c}case 1:{oa=922;break c}case 11:{i=K;oa=20;break}case 12:{i=c[p+4>>2]|0;b[pa+(i*40|0)+8>>1]=4;oa=(p-m|0)/20|0;i=pa+(i*40|0)|0;c[i>>2]=oa;c[i+4>>2]=((oa|0)<0)<<31>>31;i=K;oa=28;break}case 66:{l=c[p+4>>2]|0;p=m+((c[pa+(l*40|0)>>2]|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 13:{na=c[p+4>>2]|0;la=(c[p+12>>2]|0)+-1|0;ma=pa+(na*40|0)|0;c[ma>>2]=la;c[ma+4>>2]=((la|0)<0)<<31>>31;b[pa+(na*40|0)+8>>1]=4;if(!(c[p+8>>2]|0)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 67:{l=c[p+4>>2]|0;p=m+(((c[m+((c[pa+(l*40|0)>>2]|0)*20|0)+8>>2]|0)+-1|0)*20|0)|0;b[pa+(l*40|0)+8>>1]=128;l=m;q=pa;o=qa;i=K;break}case 14:{l=c[p+4>>2]|0;b[pa+(l*40|0)+8>>1]=4;l=pa+(l*40|0)|0;i=c[l>>2]|0;q=(p-m|0)/20|0;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;p=m+(i*20|0)|0;i=K;break}case 68:{if(!(b[pa+((c[p+12>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else oa=34;break}case 69:{oa=34;break}case 70:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[p+4>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 71:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[p+16>>2]|0;q=c[o+4>>2]|0;l=i;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case -111:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;b[i+8>>1]=8;g[i>>3]=+g[c[p+16>>2]>>3];l=m;q=pa;o=qa;i=K;break}case 110:{oa=c[xd>>2]|0;s=p+8|0;l=c[s>>2]|0;i=oa+(l*40|0)|0;l=oa+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;a[p>>0]=72;q=p+16|0;o=c[q>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;r=p+4|0;c[r>>2]=l;if(hb)i=K;else{if(yc(i,o,-1,1,0)|0){oa=3891;break c}o=i+8|0;l=b[o>>1]|0;if((l&2)!=0?(a[i+10>>0]|0)!=sd<<24>>24:0){if(Ig(i,sd)|0){l=p;j=h;i=zf;oa=3892;break a}l=b[o>>1]|0}c[i+24>>2]=0;b[o>>1]=l|2048;l=p+1|0;e:do if((a[l>>0]|0)==-7?(ae=c[q>>2]|0,ae|0):0){if(c[Ze>>2]|0){Xd(Cf,ae);break}o=ae;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[ae>>2]=c[af>>2];c[af>>2]=ae;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ae);break}else{oa=Wa[c[29352>>2]&127](ae)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ae);break}}while(0);a[l>>0]=-7;c[q>>2]=c[i+16>>2];l=c[i+12>>2]|0;c[r>>2]=l;i=0}if((l|0)>(c[Da>>2]|0)){oa=3891;break c}else{l=s;oa=83}break}case 72:{l=p+8|0;i=K;oa=83;break}case 73:{o=c[xd>>2]|0;q=p+8|0;i=c[q>>2]|0;l=o+(i*40|0)|0;o=o+(i*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else{lh(l)|0;i=c[q>>2]|0}i=(c[p+12>>2]|0)-i|0;r=(c[p+4>>2]|0)==0?1:257;b[l+8>>1]=r;c[l+12>>2]=0;if((i|0)>0)while(1){o=l;l=l+40|0;q=o+48|0;if(!(b[q>>1]&9216))b[q>>1]=1;else Dg(l);b[q>>1]=r;c[o+52>>2]=0;if((i|0)<=1){l=m;q=pa;o=qa;i=K;break}else i=i+-1|0}else{l=m;q=pa;o=qa;i=K}break}case 74:{l=pa+((c[p+4>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&-160|1;l=m;q=pa;o=qa;i=K;break}case 75:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;yc(i,c[p+16>>2]|0,c[p+4>>2]|0,0,0)|0;a[i+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 76:{o=c[mc>>2]|0;q=(c[p+4>>2]|0)+-1|0;r=o+(q*40|0)|0;l=e[o+(q*40|0)+8>>1]|0;if(l&18|0){i=c[o+(q*40|0)+12>>2]|0;if(l&16384)i=(c[r>>2]|0)+i|0;if((i|0)>(c[(c[o+(q*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}}l=c[p+8>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(b[l>>1]&9216)Dg(i);c[i>>2]=c[r>>2];c[i+4>>2]=c[r+4>>2];c[i+8>>2]=c[r+8>>2];c[i+12>>2]=c[r+12>>2];c[i+16>>2]=c[r+16>>2];b[l>>1]=b[l>>1]&-7201|2080;l=m;q=pa;o=qa;i=K;break}case 77:{q=pa+((c[p+4>>2]|0)*40|0)|0;r=c[p+12>>2]|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!((b[t>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);ea=s;l=q;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));b[q+8>>1]=1;c[q+24>>2]=0;i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}r=r+-1|0;if(!r){l=m;q=pa;o=qa;i=K;break}else{q=q+40|0;s=s+40|0}}break}case 78:{q=c[p+12>>2]|0;r=pa+((c[p+4>>2]|0)*40|0)|0;s=pa+((c[p+8>>2]|0)*40|0)|0;while(1){t=s+8|0;if(!(b[t>>1]&9216)){c[s>>2]=c[r>>2];c[s+4>>2]=c[r+4>>2];c[s+8>>2]=c[r+8>>2];c[s+12>>2]=c[r+12>>2];c[s+16>>2]=c[r+16>>2];if(!(b[r+8>>1]&2048))b[t>>1]=b[t>>1]&-7169|4096}else mh(s,r,4096);i=b[t>>1]|0;if(i&4096){l=i&65535;do if(l&18){do if(l&16384){o=s+12|0;l=(c[s>>2]|0)+(c[o>>2]|0)|0;if((l|0)<1)if(!(i&16))break;else i=1;else i=l;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[o>>2]|0)|0,0,c[s>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+(c[s>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}while(0);b[t>>1]=i&-4097}if(!q){l=m;q=pa;o=qa;i=K;break d}q=q+-1|0;r=r+40|0;s=s+40|0}}case 79:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;q=c[p+8>>2]|0;o=pa+(q*40|0)|0;q=pa+(q*40|0)+8|0;if(b[q>>1]&9216){mh(o,l,4096);l=m;q=pa;o=qa;i=K;break d};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(!(b[pa+(i*40|0)+8>>1]&2048)){b[q>>1]=b[q>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 80:{q=c[p+8>>2]|0;i=pa+(q*40|0)|0;o=pa+((c[p+4>>2]|0)*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){c[i>>2]=l;c[i+4>>2]=o;b[q>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(i,l,o);l=m;q=pa;o=qa;i=K;break d}}case 105:{z=c[p+4>>2]|0;s=pa+(z*40|0)|0;x=c[p+8>>2]|0;w=pa+(x*40|0)|0;A=c[p+12>>2]|0;y=pa+(A*40|0)|0;r=pa+(z*40|0)+8|0;l=b[r>>1]|0;t=pa+(x*40|0)+8|0;i=b[t>>1]|0;if((i|l)&1){i=pa+(A*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(y);l=m;q=pa;o=qa;i=K;break d}}do if(l&16384){q=pa+(z*40|0)+12|0;o=(c[s>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(l&16))break;else i=1;else i=o;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(z*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[s>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[s>>2]|0);l=b[r>>1]&-16897;b[r>>1]=l;i=b[t>>1]|0}while(0);do if(i&16384){q=pa+(x*40|0)+12|0;o=(c[w>>2]|0)+(c[q>>2]|0)|0;if((o|0)<1)if(!(i&16))break;else i=1;else i=o;if(Eg(w,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[pa+(x*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[w>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[w>>2]|0);i=b[t>>1]&-16897;b[t>>1]=i;l=b[r>>1]|0}while(0);if(!(l&18)){if(Hg(s,sd,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[t>>1]|0}if((i&18)==0?Hg(w,sd,0)|0:0){l=p;j=h;i=zf;oa=3892;break a}q=pa+(z*40|0)+12|0;r=pa+(x*40|0)+12|0;s=(c[r>>2]|0)+(c[q>>2]|0)|0;if((s|0)>(c[Da>>2]|0)){oa=3891;break c}l=(A|0)==(x|0);if(Eg(y,s+2|0,l&1)|0){l=p;j=h;i=zf;oa=3892;break a}o=pa+(A*40|0)+8|0;b[o>>1]=b[o>>1]&15904|2;i=pa+(x*40|0)+16|0;if(!l){na=pa+(A*40|0)+16|0;ew(c[na>>2]|0,c[i>>2]|0,c[r>>2]|0)|0;i=na}ew((c[i>>2]|0)+(c[r>>2]|0)|0,c[pa+(z*40|0)+16>>2]|0,c[q>>2]|0)|0;a[(c[i>>2]|0)+s>>0]=0;a[(c[i>>2]|0)+(s+1)>>0]=0;b[o>>1]=b[o>>1]|512;c[pa+(A*40|0)+12>>2]=s;a[pa+(A*40|0)+10>>0]=sd;l=m;q=pa;o=qa;i=K;break}case 104:case 103:case 102:case 101:case 100:{s=c[p+4>>2]|0;t=pa+(s*40|0)|0;r=pa+(s*40|0)+8|0;i=e[r>>1]|0;l=i&12;if(!l)if(!(i&18))B=0;else B=nh(t)|0;else B=l&65535;x=c[p+8>>2]|0;y=pa+(x*40|0)|0;w=pa+(x*40|0)+8|0;i=e[w>>1]|0;l=i&12;if(!l)if(!(i&18))A=0;else A=nh(y)|0;else A=l&65535;C=c[p+12>>2]|0;D=pa+(C*40|0)|0;f:do if(!((B&4&A)<<16>>16)){if(!((b[w>>1]|b[r>>1])&1)){z=0;oa=245}}else{i=t;o=c[i>>2]|0;i=c[i+4>>2]|0;q=y;l=c[q>>2]|0;q=c[q+4>>2]|0;g:do switch(a[p>>0]|0){case 100:{if((i|0)>-1|(i|0)==-1&o>>>0>4294967295){na=Tv(-1,2147483647,l|0,q|0)|0;ma=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ma|0)<(i|0)|(ma|0)==(i|0)&na>>>0>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Sv(o|0,i|0,1,0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Sv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 101:{if((o|0)==0&(i|0)==-2147483648)if((q|0)>-1|(q|0)==-1&l>>>0>4294967295){z=1;oa=245;break f}else{i=q^-2147483648;break g}if((i|0)<0|(i|0)==0&o>>>0<1){na=Tv(0,0,o|0,i|0)|0;la=L()|0;ma=Tv(-1,2147483647,l|0,q|0)|0;ka=L()|0;if(((q|0)>0|(q|0)==0&l>>>0>0)&((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0>>0)){z=1;oa=245;break f}}else if((q|0)<0?(ma=Tv(1,-2147483648,l|0,q|0)|0,ka=L()|0,na=Tv(1,0,o|0,i|0)|0,la=L()|0,(ka|0)>(la|0)|(ka|0)==(la|0)&ma>>>0>na>>>0):0){z=1;oa=245;break f}l=Tv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 102:{do if((i|0)>0|(i|0)==0&o>>>0>0){na=_v(-1,2147483647,o|0,i|0)|0;ma=L()|0;if((q|0)>(ma|0)|(q|0)==(ma|0)&l>>>0>na>>>0){z=1;oa=245;break f}na=Wv(0,-2147483648,o|0,i|0)|0;ma=L()|0;if((q|0)<(ma|0)|(q|0)==(ma|0)&l>>>0>>0){z=1;oa=245;break f}}else if((i|0)<0){if((q|0)>0|(q|0)==0&l>>>0>0){na=Wv(0,-2147483648,l|0,q|0)|0;ma=L()|0;if((ma|0)>(i|0)|(ma|0)==(i|0)&na>>>0>o>>>0){z=1;oa=245;break f}else break}if((q|0)<0){if((o|0)==0&(i|0)==-2147483648|(l|0)==0&(q|0)==-2147483648){z=1;oa=245;break f}na=Tv(0,0,l|0,q|0)|0;la=L()|0;ma=Tv(0,0,o|0,i|0)|0;ma=Wv(-1,2147483647,ma|0,L()|0)|0;ka=L()|0;if((ka|0)<(la|0)|(ka|0)==(la|0)&ma>>>0>>0){z=1;oa=245;break f}}}while(0);l=Yv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}case 103:{if((o|0)==0&(i|0)==0)break f;if((o|0)==-1&(i|0)==-1&((l|0)==0&(q|0)==-2147483648)){z=1;oa=245;break f}l=Wv(l|0,q|0,o|0,i|0)|0;i=L()|0;break}default:{switch(o|0){case 0:{if(!i)break f;break}case -1:{if((i|0)==-1){o=1;i=0}break}default:{}}l=Zv(l|0,q|0,o|0,i|0)|0;i=L()|0}}while(0);q=D;c[q>>2]=l;c[q+4>>2]=i;l=pa+(C*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}while(0);h:do if((oa|0)==245){oa=0;i=e[r>>1]|0;do if(!(i&8)){if(i&4|0){na=t;v=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))v=0.0;else v=+Kg(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)}else v=+g[t>>3];while(0);i=e[w>>1]|0;do if(!(i&8)){if(i&4|0){na=y;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(i&18))u=0.0;else u=+Kg(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)}else u=+g[y>>3];while(0);switch(a[p>>0]|0){case 100:{u=v+u;break}case 101:{u=u-v;break}case 102:{u=v*u;break}case 103:{if(v==0.0)break h;u=u/v;break}default:{i=e[r>>1]|0;do if(!(i&4)){if(i&8|0){r=Mg(+g[t>>3])|0;i=L()|0;break}if(!(i&18)){r=0;i=0}else{r=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;i=L()|0}}else{i=t;r=c[i>>2]|0;i=c[i+4>>2]|0}while(0);l=e[w>>1]|0;do if(!(l&4)){if(l&8|0){o=Mg(+g[y>>3])|0;q=L()|0;break}if(!(l&18)){o=0;q=0}else{o=Ng(a[pa+(x*40|0)+10>>0]|0,c[pa+(x*40|0)+12>>2]|0,c[pa+(x*40|0)+16>>2]|0)|0;q=L()|0}}else{q=y;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);switch(r|0){case 0:{if(!i)break h;else l=r;break}case -1:{if((i|0)==-1){l=1;i=0}else l=r;break}default:l=r}u=+((Zv(o|0,q|0,l|0,i|0)|0)>>>0)+4294967296.0*+(L()|0)}}g[rf>>3]=u;g[Hd>>3]=+g[rf>>3];if(+g[rf>>3]==+g[Hd>>3]){g[D>>3]=u;o=pa+(C*40|0)+8|0;q=b[o>>1]&15904;b[o>>1]=q|8;if(((A|B)&8)!=0|z<<24>>24!=0){l=m;q=pa;o=qa;i=K;break d}i=Mg(u)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&u==+(i>>>0)+4294967296.0*+(l|0))){l=m;q=pa;o=qa;i=K;break d}na=D;c[na>>2]=i;c[na+4>>2]=l;b[o>>1]=q|4;l=m;q=pa;o=qa;i=K;break d}}while(0);i=pa+(C*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(D);l=m;q=pa;o=qa;i=K;break d}}case 82:{i=c[p+4>>2]|0;if(i){l=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216)){c[l>>2]=0;c[l+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(l,0,0);l=m;q=pa;o=qa;i=K;break d}}else{l=m;q=pa;o=qa;i=K}break}case 99:case 98:case 97:case 96:{s=c[p+4>>2]|0;l=c[p+8>>2]|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;q=pa+(s*40|0)+8|0;o=b[q>>1]|0;i=b[pa+(l*40|0)+8>>1]|0;if((i|o)&1){i=pa+(w*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(x);l=m;q=pa;o=qa;i=K;break d}}r=pa+(l*40|0)|0;t=pa+(s*40|0)|0;i=i&65535;do if(!(i&4)){if(i&8|0){l=Mg(+g[r>>3])|0;i=L()|0;break}if(!(i&18)){l=0;i=0}else{l=Ng(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0)|0;i=L()|0;o=b[q>>1]|0}}else{i=r;l=c[i>>2]|0;i=c[i+4>>2]|0}while(0);o=o&65535;do if(!(o&4)){if(o&8|0){q=Mg(+g[t>>3])|0;s=L()|0;break}if(!(o&18)){q=0;s=0}else{q=Ng(a[pa+(s*40|0)+10>>0]|0,c[pa+(s*40|0)+12>>2]|0,c[pa+(s*40|0)+16>>2]|0)|0;s=L()|0}}else{s=t;q=c[s>>2]|0;s=c[s+4>>2]|0}while(0);o=a[p>>0]|0;i:do switch(o<<24>>24){case 96:{l=q&l;i=s&i;break}case 97:{l=q|l;i=s|i;break}default:if(!((q|0)==0&(s|0)==0)){la=(s|0)<0;ma=(s|0)>-1|(s|0)==-1&q>>>0>4294967232;ka=Tv(0,0,q|0,s|0)|0;na=L()|0;r=la?197-(o&255)&255:o;q=la?(ma?ka:64):q;o=la?(ma?na:0):s;if((o|0)>0|(o|0)==0&q>>>0>63){i=((i|0)<0&r<<24>>24!=98)<<31>>31;l=i;i=((i|0)<0)<<31>>31;break i}if(r<<24>>24==98){l=cw(l|0,i|0,q|0)|0;i=L()|0;break i}else{l=bw(l|0,i|0,q|0)|0;na=L()|0;ma=(i|0)<0;la=Tv(64,0,q|0,o|0)|0;L()|0;la=cw(-1,-1,la|0)|0;i=L()|0;l=(ma?la:0)|l;i=(ma?i:0)|na;break i}}}while(0);q=x;c[q>>2]=l;c[q+4>>2]=i;l=pa+(w*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break}case 83:{i=c[p+4>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);q=r;c[q>>2]=l;c[q+4>>2]=o;b[s>>1]=i&15904|4;q=c[p+8>>2]|0;o=Sv(l|0,o|0,q|0,((q|0)<0)<<31>>31|0)|0;q=L()|0;l=r;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 15:{q=c[p+4>>2]|0;s=pa+(q*40|0)+8|0;i=b[s>>1]|0;if(!(i&4)){r=pa+(q*40|0)|0;l=i&65535;do if(!(l&4)){if(l&8|0){v=+g[r>>3];l=Mg(v)|0;o=L()|0;na=Sv(l|0,o|0,1,-2147483648)|0;ma=L()|0;q=i&15904|4;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(l>>>0)+4294967296.0*+(o|0)))break;i=r;c[i>>2]=l;c[i+4>>2]=o;b[s>>1]=q;i=q;break}if(l&2){l=a[pa+(q*40|0)+10>>0]|0;o=pa+(q*40|0)+16|0;i=pa+(q*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[i>>2]|0,l)|0))i=b[s>>1]|0;else{if(Og(c[o>>2]|0,Hd,c[i>>2]|0,l)|0){v=+g[rf>>3];g[r>>3]=v;l=b[s>>1]|0;i=l|8;b[s>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=r;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=334}}else{na=Hd;oa=c[na+4>>2]|0;i=r;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[s>>1]|0;oa=334}if((oa|0)==334){oa=0;i=i|4;b[s>>1]=i}i=i&-3;b[s>>1]=i}}}while(0);if(!(i&4))if(!(c[p+8>>2]|0)){i=20;oa=3855;break c}else{i=K;oa=28;break d}}b[s>>1]=i&15904|4;l=m;q=pa;o=qa;i=K;break}case 84:{l=c[p+4>>2]|0;q=pa+(l*40|0)+8|0;i=b[q>>1]|0;if(!(i&4)){l=m;q=pa;o=qa;i=K}else{r=pa+(l*40|0)|0;o=i&65535;do if(!(o&8)){if(o&4|0){na=r;u=+((c[na>>2]|0)>>>0)+4294967296.0*+(c[na+4>>2]|0);break}if(!(o&18))u=0.0;else{u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);i=b[q>>1]|0}}else u=+g[r>>3];while(0);g[r>>3]=u;b[q>>1]=i&15904|8;l=m;q=pa;o=qa;i=K}break}case 85:{o=c[p+4>>2]|0;s=pa+(o*40|0)|0;q=pa+(o*40|0)+8|0;l=b[q>>1]|0;do if(l&16384){r=pa+(o*40|0)+12|0;i=(c[s>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=0;break}else i=1;if(!(Eg(s,i,1)|0)){gw((c[pa+(o*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[s>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[s>>2]|0);b[q>>1]=b[q>>1]&-16897;i=0}else i=7}else i=0;while(0);Sg(s,c[p+8>>2]&255,sd);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 57:case 54:case 55:case 56:case 52:case 53:{s=c[p+4>>2]|0;y=pa+(s*40|0)|0;w=c[p+12>>2]|0;x=pa+(w*40|0)|0;A=pa+(s*40|0)+8|0;i=b[A>>1]|0;B=pa+(w*40|0)+8|0;l=b[B>>1]|0;q=i&65535;t=l&65535;r=(l|i)&65535;C=p+2|0;o=e[C>>1]|0;do if(r&1){if(o&128|0){if(!((i&1&l)<<16>>16!=0&(t&256|0)==0)){r=(t<<1&2^2)+-1|0;oa=389;break}q=z;o=(z&255)+-52|0;oa=392;break}if(!(o&32))if(!(o&16)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}else{l=pa+((c[p+8>>2]|0)*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=1;i=K;break d}}else{o=o&71;if(o>>>0>66){if(r&2){if((q&14|0)==2){o=a[pa+(s*40|0)+10>>0]|0;q=pa+(s*40|0)+16|0;l=pa+(s*40|0)+12|0;if(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0){if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=y;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[y>>3]=+g[rf>>3];l=8}b[A>>1]=b[A>>1]&-3|l}r=b[B>>1]|0}else r=l;if((r&14)==2){o=a[pa+(w*40|0)+10>>0]|0;q=pa+(w*40|0)+16|0;l=pa+(w*40|0)+12|0;if(!(Lg(c[q>>2]|0,rf,c[l>>2]|0,o)|0))l=b[B>>1]|0;else{if(!(Og(c[q>>2]|0,Hd,c[l>>2]|0,o)|0)){na=Hd;oa=c[na+4>>2]|0;l=x;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=4}else{g[x>>3]=+g[rf>>3];l=8}l=b[B>>1]&-3|l;b[B>>1]=l}s=r}else{s=r;l=r}}else s=l;if(!((l&4&b[A>>1])<<16>>16))l=s;else{r=x;q=c[r>>2]|0;r=c[r+4>>2]|0;o=y;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((r|0)>(o|0)|(r|0)==(o|0)&q>>>0>l>>>0)){r=((r|0)<(o|0)|(r|0)==(o|0)&q>>>0>>0)<<31>>31;l=s;oa=389;break}o=a[p>>0]|0;r=1;l=s;q=o;o=(o&255)+-52|0;oa=393;break}}else if((o|0)==66){if(!((q&2|0)!=0|(q&12|0)==0)){Hg(y,sd,1)|0;i=(q&49631|b[A>>1]&15904)&65535}if(!((t&2|0)!=0|(t&12|0)==0)){Hg(x,sd,1)|0;l=(t&49631|b[B>>1]&15904)&65535}}r=Tg(x,y,c[p+16>>2]|0)|0;oa=389}while(0);do if((oa|0)==389){oa=0;if((r|0)>=0){q=a[p>>0]|0;o=(q&255)+-52|0;if(!r){oa=392;break}else{oa=393;break}}else{na=a[p>>0]|0;s=r;o=34207+((na&255)+-52)|0;r=na;break}}while(0);if((oa|0)==392){oa=0;s=0;o=34213+o|0;r=q}else if((oa|0)==393){oa=0;s=r;o=34219+o|0;r=q}o=a[o>>0]|0;q=o&255;b[A>>1]=i;b[B>>1]=l;l=e[C>>1]|0;if(!(l&32))if(!(o<<24>>24)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}i=c[p+8>>2]|0;if(l&8|0?(q|0)==(r<<24>>24==53|0):0){l=m;q=pa;o=s;i=K;break d}l=pa+(i*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=pa+(i*40|0)|0;c[l>>2]=o&255;c[l+4>>2]=0;l=m;q=pa;o=s;i=K;break}case 58:{if(!qa){l=m;q=pa;o=0;i=K}else{i=K;oa=28}break}case -88:case 61:{l=a[qf>>0]|0;do if(l&65?((d[vf>>0]|d[vf+1>>0]<<8)&16)==0:0){i=c[p+16>>2]|0;if(!i){i=c[hd>>2]|0;if(!i)break}if(l&64){na=c[of>>2]|0;i=_c(f,i)|0;bb[na&127](c[pf>>2]|0,i);if(!i)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}if((c[Lb>>2]|0)<=1){Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;break}c[ze>>2]=i;i=dd(Cf,34793,ze)|0;Za[c[of>>2]&127](1,c[pf>>2]|0,f,i)|0;if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);q=p+4|0;i=c[q>>2]|0;if((i|0)>=(c[7392]|0)){if((a[p>>0]|0)==-88){l=m;q=pa;o=qa;i=K;break d}l=c[wb>>2]|0;if((l|0)>1){o=c[le>>2]|0;i=1;do{if((a[o+(i*20|0)>>0]|0)==17)c[o+(i*20|0)+4>>2]=0;i=i+1|0}while((i|0)!=(l|0))}c[q>>2]=0;i=0}c[q>>2]=i+1;c[ib>>2]=(c[ib>>2]|0)+1;i=K;oa=28;break}case 87:{if(!(b[p+2>>1]&1))q=0;else q=(c[p+-4>>2]|0)+4|0;s=c[p+12>>2]|0;t=c[p+16>>2]|0;w=c[p+4>>2]|0;x=c[p+8>>2]|0;if((s|0)>0){r=t+16|0;j:do if(!q){l=0;while(1){i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((l+w|0)*40|0)|0,pa+((l+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}else{l=0;while(1){o=c[q+(l<<2)>>2]|0;i=a[(c[r>>2]|0)+l>>0]|0;o=Tg(pa+((o+w|0)*40|0)|0,pa+((o+x|0)*40|0)|0,c[t+20+(l<<2)>>2]|0)|0;l=l+1|0;if(o|0)break j;if((l|0)>=(s|0)){l=m;q=pa;o=0;i=K;break d}}}while(0);l=m;q=pa;o=i<<24>>24==0?o:0-o|0;i=K}else{l=m;q=pa;o=qa;i=K}break}case 16:{if((qa|0)<0){l=m;q=pa;o=qa;p=m+(((c[p+4>>2]|0)+-1|0)*20|0)|0;i=K;break d}if(!qa){l=m;q=pa;o=0;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;i=K;break d}else{l=m;q=pa;o=qa;p=m+(((c[p+12>>2]|0)+-1|0)*20|0)|0;i=K;break d}}case 43:case 44:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];q=u!=0.0&1}else q=2;else{q=l;q=((c[q>>2]|0)!=0|(c[q+4>>2]|0)!=0)&1}i=c[p+8>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(!(o&4))if(!(o&1)){if(!(o&8))if(!(o&18))u=0.0;else u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0);else u=+g[l>>3];i=u!=0.0&1}else i=2;else{i=l;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}i=a[((a[p>>0]|0)==44?34225:34234)+(i+(q*3|0))>>0]|0;l=c[p+12>>2]|0;if(i<<24>>24==2){l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|1;l=m;q=pa;o=qa;i=K;break d}else{q=pa+(l*40|0)|0;c[q>>2]=i&255;c[q+4>>2]=0;l=pa+(l*40|0)+8|0;b[l>>1]=b[l>>1]&15904|4;l=m;q=pa;o=qa;i=K;break d}}case 88:{r=c[p+8>>2]|0;s=pa+(r*40|0)|0;l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}l=c[p+16>>2]^i;o=((l|0)<0)<<31>>31;i=pa+(r*40|0)+8|0;if(!(b[i>>1]&9216)){q=s;c[q>>2]=l;c[q+4>>2]=o;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(s,l,o);l=m;q=pa;o=qa;i=K;break d}}case 19:{l=c[p+4>>2]|0;q=c[p+8>>2]|0;r=pa+(q*40|0)|0;i=b[pa+(l*40|0)+8>>1]|0;if(i&1){i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;l=m;q=pa;o=qa;i=K;break d}else{Dg(r);l=m;q=pa;o=qa;i=K;break d}}o=pa+(l*40|0)|0;i=i&65535;if(!(i&4))if(!(i&1)){if(!(i&8))if(!(i&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0}else i=0;else{i=o;i=(c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0}l=(i^1)&1;i=pa+(q*40|0)+8|0;if(!(b[i>>1]&9216)){q=r;c[q>>2]=l;c[q+4>>2]=0;b[i>>1]=4;l=m;q=pa;o=qa;i=K;break d}else{Pg(r,l,0);l=m;q=pa;o=qa;i=K;break d}}case 107:{o=c[p+4>>2]|0;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(r);l=pa+(o*40|0)+8|0;if(!(b[l>>1]&1)){q=pa+(o*40|0)|0;b[i>>1]=4;i=e[l>>1]|0;do if(!(i&4)){if(i&8|0){i=Mg(+g[q>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[pa+(o*40|0)+10>>0]|0,c[pa+(o*40|0)+12>>2]|0,c[pa+(o*40|0)+16>>2]|0)|0;l=L()|0}}else{l=q;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);q=r;c[q>>2]=~i;c[q+4>>2]=~l;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 17:{i=c[nc>>2]|0;if(!i){l=c[(c[le>>2]|0)+4>>2]|0;i=p+4|0;if((l|0)==(c[i>>2]|0)){i=K;oa=28;break d}}else{o=(p-(c[le>>2]|0)|0)/20|0;i=(c[i+24>>2]|0)+(o>>>3)|0;l=d[i>>0]|0;o=1<<(o&7);if(o&l|0){i=K;oa=28;break d}a[i>>0]=o|l;i=p+4|0;l=c[(c[le>>2]|0)+4>>2]|0}c[i>>2]=l;l=m;q=pa;o=qa;i=K;break}case 18:{l=c[p+4>>2]|0;o=pa+(l*40|0)|0;q=e[pa+(l*40|0)+8>>1]|0;if(!(q&4)){i=c[p+12>>2]|0;if(!(q&1)){if(!(q&8))if(!(q&18))u=0.0;else u=+Kg(a[pa+(l*40|0)+10>>0]|0,c[pa+(l*40|0)+12>>2]|0,c[pa+(l*40|0)+16>>2]|0);else u=+g[o>>3];i=u!=0.0&1}}else{i=o;i=((c[i>>2]|0)!=0|(c[i+4>>2]|0)!=0)&1}if(!i){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 20:{i=c[p+4>>2]|0;l=pa+(i*40|0)|0;o=e[pa+(i*40|0)+8>>1]|0;if(o&4|0){na=l;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}if(o&1|0)if(!(c[p+12>>2]|0)){l=m;q=pa;o=qa;i=K;break d}else{i=K;oa=28;break d}if(!(o&8)){if(!(o&18)){i=K;oa=28;break d}u=+Kg(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)}else u=+g[l>>3];if(u!=0.0){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 50:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){l=m;q=pa;o=qa;i=K}else{i=K;oa=28}break}case 51:{if(!(b[pa+((c[p+4>>2]|0)*40|0)+8>>1]&1)){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 21:{if(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+2>>0]|0){i=c[p+12>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;i=K;oa=28;break d}else{Dg(pa+(i*40|0)|0);i=K;oa=28;break d}}else{l=m;q=pa;o=qa;i=K}break}case 90:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=c[p+8>>2]|0;do if(!(a[o+3>>0]|0)){if(a[c[o+40>>2]>>0]|0){i=sh(o)|0;oa=508}}else{i=c[o+24>>2]|0;if(i|0?(Kd=c[i+(l+1<<2)>>2]|0,(Kd|0)>0):0){l=Kd+-1|0;o=c[o+36>>2]|0;break}i=rh(o)|0;oa=508}while(0);if((oa|0)==508){oa=0;if(i){oa=601;break c}}F=c[p+12>>2]|0;H=pa+(F*40|0)|0;E=c[o+72>>2]|0;r=o+28|0;i=c[ua>>2]|0;k:do if((c[r>>2]|0)!=(i|0)){do if(a[o+2>>0]|0){if((a[o>>0]|0)==3){q=c[o+32>>2]|0;x=c[pa+(q*40|0)+12>>2]|0;c[o+84>>2]=x;c[o+80>>2]=x;q=c[pa+(q*40|0)+16>>2]|0;x=o+76|0;c[x>>2]=q;break}i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break k}else{Dg(H);break k}}else{na=c[o+40>>2]|0;bg(na);oa=c[na+44>>2]|0;c[o+80>>2]=oa;i=e[na+48>>1]|0;q=c[na+40>>2]|0;na=(c[(c[na+116>>2]|0)+60>>2]|0)-q|0;c[o+84>>2]=(na|0)<(i|0)?((na|0)>0?na:0):i;i=o+76|0;c[i>>2]=q;if(oa>>>0>(c[Da>>2]|0)>>>0){oa=518;break c}x=i;i=c[ua>>2]|0}while(0);c[r>>2]=i;oa=a[q>>0]|0;i=oa&255;if(oa<<24>>24>-1){c[E>>2]=i;w=1}else{r=d[q+1>>0]|0;do if(r&128){s=d[q+2>>0]|0;if(!(s&128)){c[E>>2]=(i<<14|s)&2080895|r<<7&16256;i=3;break}else{i=Of(q,rf)|0;na=rf;oa=c[na>>2]|0;c[E>>2]=((oa|0)==(oa|0)?0==(c[na+4>>2]|0):0)?oa:-1;break}}else{c[E>>2]=i<<7&16256|r;i=2}while(0);w=i&255}t=o+48|0;c[t>>2]=w;r=o+58|0;b[r>>1]=0;i=o+84|0;s=c[E>>2]|0;if((c[i>>2]|0)>>>0>=s>>>0){q=c[x>>2]|0;i=0;oa=540;break}c[x>>2]=0;c[i>>2]=0;oa=c[E>>2]|0;if(oa>>>0<=98307?oa>>>0<=(c[o+80>>2]|0)>>>0:0){i=0;oa=532}else oa=597}else{i=o+58|0;r=i;i=b[i>>1]|0;oa=532}while(0);do if((oa|0)==532){if((l|0)<(i&65535|0)){r=c[o+88+(l<<2)>>2]|0;oa=576;break}x=o+48|0;w=c[x>>2]|0;s=c[E>>2]|0;if(w>>>0>>0){q=c[o+76>>2]|0;if(!q){ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));s=c[o+40>>2]|0;t=c[E>>2]|0;oa=e[s+48>>1]|0;q=c[s+40>>2]|0;na=(c[(c[s+116>>2]|0)+60>>2]|0)-q|0;if(t>>>0>((na|0)<(oa|0)?((na|0)>0?na:0):oa)>>>0){i=uh(s,0,t,Hd)|0;if(i|0){oa=601;break c}i=b[r>>1]|0;s=c[x>>2]|0;q=c[Yb>>2]|0}else{c[Yb>>2]=q;b[_b>>1]=4112;c[ac>>2]=t;s=w}t=x;w=s;s=c[E>>2]|0;oa=540}else{t=x;oa=540}}else{q=0;oa=566}}while(0);do if((oa|0)==540){B=i&65535;D=q+s|0;i=B;s=q+w|0;B=c[E+(B<<2)>>2]|0;C=0;do{oa=a[s>>0]|0;w=oa&255;A=o+88+(i<<2)|0;c[A>>2]=w;if(oa<<24>>24>-1){s=s+1|0;y=w;w=d[3520+w>>0]|0;x=0}else{x=d[s>>0]|0;y=d[s+1>>0]|0;do if(y&128){z=d[s+2>>0]|0;if(!(z&128)){w=3;x=(x<<14|z)&2080895|y<<7&16256;oa=549;break}w=Of(s,rf)|0;oa=rf;x=c[oa>>2]|0;if((x|0)==(x|0)?0==(c[oa+4>>2]|0):0)oa=549;else{c[A>>2]=-1;x=-1;s=s+(w&255)|0;oa=550}}else{w=2;x=x<<7&16256|y;oa=549}while(0);if((oa|0)==549){oa=0;s=s+(w&255)|0;c[A>>2]=x;if(x>>>0>127)oa=550;else w=d[3520+x>>0]|0}if((oa|0)==550)w=(x+-12|0)>>>1;y=x;x=0}B=Sv(w|0,x|0,B|0,C|0)|0;C=L()|0;oa=i;i=i+1|0;c[E+(i<<2)>>2]=B;w=s>>>0>>0}while((oa|0)<(l|0)&w);if(!w)if(s>>>0<=D>>>0?((C|0)==0?(B|0)==(c[o+80>>2]|0):0):0){w=C;x=B;oa=558}else oa=559;else{w=0;x=c[o+80>>2]|0;oa=558}if((oa|0)==558){oa=0;if(C>>>0>w>>>0|(C|0)==(w|0)&B>>>0>x>>>0)oa=559}if((oa|0)==559)if(!(c[E>>2]|0)){i=0;s=D}else{if(c[o+76>>2]|0){oa=597;break}if((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0){oa=597;break}Cg(Hd);oa=597;break}i=i&65535;b[r>>1]=i;c[t>>2]=s-q;if((c[o+76>>2]|0)==0?!((b[_b>>1]&9216)==0&(c[fc>>2]|0)==0):0){Cg(Hd);q=y;i=b[r>>1]|0;oa=566}else{q=y;oa=566}}while(0);do if((oa|0)==566){oa=0;if((l|0)>=(i&65535|0)){if((a[p+1>>0]|0)!=-11){i=pa+(F*40|0)+8|0;if(!(b[i>>1]&9216)){b[i>>1]=1;break}else{Dg(H);break}}l=c[p+16>>2]|0;i=pa+(F*40|0)+8|0;if(b[i>>1]&9216){mh(H,l,2048);break};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];if(!(b[l+8>>1]&2048))b[i>>1]=b[i>>1]&-7169|2048}else{r=q;oa=576}}else if((oa|0)==597){oa=0;i=c[m+12>>2]|0;if((i|0)<=0){oa=599;break c}p=m+((i+-1|0)*20|0)|0}while(0);l:do if((oa|0)==576){oa=0;s=pa+(F*40|0)+8|0;if(b[s>>1]&9216)Dg(H);if((c[o+84>>2]|0)>>>0>=(c[E+(l+1<<2)>>2]|0)>>>0){o=(c[o+76>>2]|0)+(c[E+(l<<2)>>2]|0)|0;if(r>>>0<12){Ug(o,r,H)|0;break}q=(r+-12|0)>>>1;c[pa+(F*40|0)+12>>2]=q;a[pa+(F*40|0)+10>>0]=sd;i=q+2|0;if((c[pa+(F*40|0)+24>>2]|0)<(i|0)){b[s>>1]=1;if(Eg(H,i,0)|0){oa=602;break c}l=pa+(F*40|0)+16|0;i=l;l=c[l>>2]|0}else{l=c[pa+(F*40|0)+20>>2]|0;i=pa+(F*40|0)+16|0;c[i>>2]=l}ew(l|0,o|0,q|0)|0;a[(c[i>>2]|0)+q>>0]=0;a[(c[i>>2]|0)+(q+1)>>0]=0;b[s>>1]=b[31112+((r&1)<<1)>>1]|0;break}a[pa+(F*40|0)+10>>0]=sd;na=b[p+2>>1]|0;if(!((na&192)!=0?!((r>>>0<12|(r&1|0)!=0)&(na&128)==0):0))oa=588;do if((oa|0)==588){oa=0;if(r>>>0<=127){i=a[3520+r>>0]|0;if(!(i<<24>>24))break;else q=i&255}else q=(r+-12|0)>>>1;o=c[o+40>>2]|0;i=c[E+(l<<2)>>2]|0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if((i+q|0)>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,i,q,H)|0;if(i|0){oa=601;break c}i=c[pa+(F*40|0)+16>>2]|0}else{i=l+i|0;c[pa+(F*40|0)+16>>2]=i;b[s>>1]=4112;c[pa+(F*40|0)+12>>2]=q}Ug(i,r,H)|0;b[s>>1]=b[s>>1]&-4097;break l}while(0);Ug(59040,r,H)|0}while(0);l=m;q=pa;o=qa;i=0;break}case 91:{i=c[p+16>>2]|0;s=i;t=pa+((c[p+4>>2]|0)*40|0)|0;i=a[i>>0]|0;while(1){s=s+1|0;do if(i<<24>>24>66){r=t+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[t>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=t;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Ld=a[t+10>>0]|0,Md=t+16|0,Od=t+12|0,Lg(c[Md>>2]|0,rf,c[Od>>2]|0,Ld)|0):0){if(Og(c[Md>>2]|0,Hd,c[Od>>2]|0,Ld)|0){v=+g[rf>>3];g[t>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)){i=t;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=613}}else{na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=613}if((oa|0)==613){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=t+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(t,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[s>>0]|0;if(!(i<<24>>24)){l=m;q=pa;o=qa;i=K;break}else t=t+40|0}break}case 92:{i=c[p+16>>2]|0;E=pa+((c[p+4>>2]|0)*40|0)|0;F=E+(((c[p+8>>2]|0)+-1|0)*40|0)|0;x=a[pc>>0]|0;H=c[p+12>>2]|0;I=pa+(H*40|0)|0;if(i|0){t=E;w=i;i=a[i>>0]|0;do{s=t;t=t+40|0;w=w+1|0;do if(i<<24>>24>66){r=s+8|0;o=b[r>>1]|0;i=o&65535;if(!(i&4)){if(i&8|0){v=+g[s>>3];i=Mg(v)|0;l=L()|0;na=Sv(i|0,l|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(i>>>0)+4294967296.0*+(l|0)))break;na=s;c[na>>2]=i;c[na+4>>2]=l;b[r>>1]=o&15904|4;break}if(i&2|0?(Pd=a[s+10>>0]|0,Qd=s+16|0,Rd=s+12|0,Lg(c[Qd>>2]|0,rf,c[Rd>>2]|0,Pd)|0):0){do if(!(Og(c[Qd>>2]|0,Hd,c[Rd>>2]|0,Pd)|0)){na=Hd;oa=c[na+4>>2]|0;i=s;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=b[r>>1]|0;oa=634}else{v=+g[rf>>3];g[s>>3]=v;l=b[r>>1]|0;i=l|8;b[r>>1]=i;o=Mg(v)|0;q=L()|0;na=Sv(o|0,q|0,1,-2147483648)|0;ma=L()|0;if(!((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0)))break;i=s;c[i>>2]=o;c[i+4>>2]=q;i=l&15904;oa=634}while(0);if((oa|0)==634){oa=0;i=i|4;b[r>>1]=i}b[r>>1]=i&-3}}}else if(i<<24>>24==66){l=s+8|0;i=b[l>>1]|0;na=i&65535;if(!((na&2|0)!=0|(na&12|0)==0)){Hg(s,sd,1)|0;i=b[l>>1]|0}b[l>>1]=i&-13}while(0);i=a[w>>0]|0}while(i<<24>>24!=0)}B=(x&255)>3;C=0;A=F;z=0;y=0;s=0;t=0;while(1){w=A+8|0;r=b[w>>1]|0;l=r&65535;do if(!(l&1)){if(!(l&4)){if(l&8|0){o=8;x=7;break}i=c[A+12>>2]|0;if(l&16384)i=(c[A>>2]|0)+i|0;o=i;x=(i<<1)+12|l>>>1&1;break}l=A;i=c[l>>2]|0;l=c[l+4>>2]|0;q=aw(i|0,l|0,63)|0;q=q^i;o=(L()|0)^l;if(o>>>0<0|(o|0)==0&q>>>0<128){if(!(B&((i&1|0)==(i|0)&0==(l|0)))){o=1;x=1;break}o=0;x=q+8|0;break}if(!(o>>>0<0|(o|0)==0&q>>>0<32768))if(o>>>0<0|(o|0)==0&q>>>0<8388608){o=3;x=3}else{na=o>>>0<0|(o|0)==0&q>>>0<2147483648;x=o>>>0<32768|(o|0)==32768&q>>>0<0;o=na?4:x?6:8;x=na?4:x?5:6}else{o=2;x=2}}else{o=0;x=0}while(0);do if(!(r&16384)){i=o;oa=666}else{if(!x){w=Sv(z|0,y|0,o|0,0)|0;i=10;o=1;x=L()|0;D=s;break}if((z|0)==0&(y|0)==0){i=c[A>>2]|0;s=Sv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;i=o-i|0;t=L()|0;oa=666;break}l=A+12|0;i=(c[A>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(r&16)){i=o;oa=666;break}else i=1;if(Eg(A,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[A+16>>2]|0)+(c[l>>2]|0)|0,0,c[A>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[A>>2]|0);b[w>>1]=b[w>>1]&-16897;i=o;oa=666}while(0);if((oa|0)==666){oa=0;q=Sv(z|0,y|0,i|0,0)|0;r=L()|0;if(x>>>0<128){i=x;o=1;w=q;x=r;D=s}else{o=1;i=x;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0){i=x;w=q;x=r;D=s;break}else o=o+1|0}}}C=o+C|0;c[A+28>>2]=i;if((A|0)==(E|0))break;else{A=A+-40|0;z=w;y=x;s=D}}if(C>>>0<127)r=C+1|0;else{r=1;i=C;l=0;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else r=r+1|0}l=r+C|0;i=1;o=l;q=0;while(1){o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else i=i+1|0}r=l+(r>>>0>>0&1)|0}q=((r|0)<0)<<31>>31;z=Sv(w|0,x|0,r|0,q|0)|0;i=Sv(z|0,L()|0,D|0,t|0)|0;l=L()|0;o=c[pa+(H*40|0)+24>>2]|0;na=((o|0)<0)<<31>>31;do if((l|0)>(na|0)|(l|0)==(na|0)&i>>>0>o>>>0){na=c[Da>>2]|0;ma=((na|0)<0)<<31>>31;if((l|0)>(ma|0)|(l|0)==(ma|0)&i>>>0>na>>>0){oa=3891;break c}if((o|0)>=(z|0)){y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y;na=pa+(H*40|0)+8|0;b[na>>1]=b[na>>1]&13;break}if(Eg(I,z,0)|0){l=p;j=h;i=zf;oa=3892;break a}y=c[pa+(H*40|0)+16>>2]|0}else{y=c[pa+(H*40|0)+20>>2]|0;c[pa+(H*40|0)+16>>2]=y}while(0);do if(r>>>0>=128)if(r>>>0<16384){i=bw(r|0,q|0,7)|0;L()|0;a[y>>0]=i&255|-128;a[y+1>>0]=r&127;i=2;break}else{i=wh(y,r,q)|0;break}else{a[y>>0]=r;i=1}while(0);o=i&255;x=r;w=E;while(1){l=c[w+28>>2]|0;do if(l>>>0<128){a[y+o>>0]=l;i=o+1|0;o=y+x|0;if((l+-1|0)>>>0>=7)if(l>>>0>11){oa=699;break}else{l=0;break}s=w;l=d[3520+l>>0]|0;q=l;r=c[s>>2]|0;s=c[s+4>>2]|0;do{q=q+-1|0;a[o+q>>0]=r;r=bw(r|0,s|0,8)|0;s=L()|0}while((q|0)!=0)}else{i=y+o|0;if(l>>>0<16384){a[i>>0]=l>>>7&255|-128;a[i+1>>0]=l&127;i=2}else i=wh(i,l,0)|0;i=(i&255)+o|0;o=y+x|0;oa=699}while(0);if((oa|0)==699){oa=0;l=c[w+12>>2]|0;if(!l)l=0;else ew(o|0,c[w+16>>2]|0,l|0)|0}w=w+40|0;if(w>>>0>F>>>0)break;else{o=i;x=l+x|0}}c[pa+(H*40|0)+12>>2]=z;i=pa+(H*40|0)+8|0;b[i>>1]=16;if((D|0)==0&(t|0)==0){l=m;q=pa;o=qa;i=K}else{c[I>>2]=D;b[i>>1]=16400;l=m;q=pa;o=qa;i=K}break}case 93:{F=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=xh(F)|0;switch(i|0){case 16:{q=0;o=0;break}case 0:{y=F+116|0;z=F+70|0;A=F+68|0;B=F+50|0;C=F+1|0;D=F+20|0;E=F+2|0;q=0;o=0;m:while(1){l=c[y>>2]|0;if(!(a[l+8>>0]|0)){t=(a[l+2>>0]|0)==0;r=b[l+24>>1]|0;q=Sv((t?r&65535:0)|0,(t?0:0)|0,q|0,o|0)|0;o=L()|0;t=l;x=b[z>>1]|0;s=l}else{q=Sv(q|0,o|0,e[l+24>>1]|0,0)|0;o=L()|0;do{i=a[A>>0]|0;if(!(i<<24>>24))break m;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;s=b[F+72+((i<<24>>24)+-1<<1)>>1]|0;b[z>>1]=s;r=i+-1<<24>>24;a[A>>0]=r;r=c[F+120+(r<<24>>24<<2)>>2]|0;c[y>>2]=r;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);l=c[y>>2]|0;w=l;i=b[z>>1]|0}else{w=c[i+20>>2]|0;l=w+120|0;c[l>>2]=(c[l>>2]|0)+-1;w=w+136|0;c[i+16>>2]=c[w>>2];c[w>>2]=i;w=r;l=r;i=s}r=b[l+24>>1]|0}while((i&65535)>=(r&65535));x=i+1<<16>>16;b[z>>1]=x;t=l;s=w}i=c[t+56>>2]|0;if(x<<16>>16==r<<16>>16){i=i+((d[t+9>>0]|0)+8)|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=717;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}else{l=(c[t+64>>2]|0)+((x&65535)<<1)|0;i=i+((d[l>>0]<<8|d[l+1>>0])&e[t+26>>1])|0;l=a[A>>0]|0;if(l<<24>>24>18){oa=720;break c}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];na=c[D>>2]|0;b[B>>1]=0;a[C>>0]=a[C>>0]&-7;ma=l<<24>>24;b[F+72+(ma<<1)>>1]=x;c[F+120+(ma<<2)>>2]=s;b[z>>1]=0;a[A>>0]=l+1<<24>>24;i=yh(na,i,y,F,d[E>>0]|0)|0}if(i){oa=3845;break c}}i=xh(F)|0;if(i){oa=3855;break c}break}default:{oa=3855;break c}}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=q;c[l+4>>2]=o;l=m;q=pa;o=qa;i=0;break}case 0:{w=c[p+4>>2]|0;A=c[p+16>>2]|0;if(!w){if((c[bd>>2]|0)>0){oa=730;break c}if(!A)z=0;else z=(Eu(A)|0)&1073741823;x=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;n:do if(c[db>>2]|0){y=x+1|0;w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break n;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;o:do if((l|0)!=0?(c[i>>2]|0)>1:0){s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=y;if(!i){q=0;i=o}else{q=Xa[i&255](l,x)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break o}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3846;break c}}}while(0);l=z+33|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=761;else{l=m;q=pa;o=qa;i=0;break d}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=761}while(0);if((oa|0)==761){oa=0;i=_d(Cf,l,0)|0}if(!i){l=m;q=pa;o=qa;i=0;break d}na=i+32|0;c[i>>2]=na;ew(na|0,A|0,z+1|0)|0;if(!(a[gd>>0]|0))c[Gd>>2]=(c[Gd>>2]|0)+1;else{a[gd>>0]=0;a[Id>>0]=1}c[i+24>>2]=c[qd>>2];c[qd>>2]=i;l=Pa;q=c[l+4>>2]|0;o=i+8|0;c[o>>2]=c[l>>2];c[o+4>>2]=q;o=Na;q=c[o+4>>2]|0;l=i+16|0;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break d}i=c[qd>>2]|0;if(!i){oa=774;break c}q=d[208+(d[A>>0]|0)>>0]|0;B=i;r=0;while(1){l=c[B>>2]|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-q|0;if(!(na<<24>>24==0|(i|0)!=0)){o=A;do{l=l+1|0;o=o+1|0;na=a[l>>0]|0;i=(d[208+(na&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[B+24>>2]|0;if(!i){oa=774;break c}else{B=i;r=r+1|0}}z=(w|0)==1;if(z&(c[bd>>2]|0)>0){oa=776;break c}A=B+24|0;if(!(c[A>>2]|0)){i=(a[Id>>0]|0)!=0;if(z&i){ma=c[f>>2]|0;na=ma+464|0;ma=ma+472|0;na=Sv(c[ma>>2]|0,c[ma+4>>2]|0,c[na>>2]|0,c[na+4>>2]|0)|0;ma=L()|0;if((ma|0)>0|(ma|0)==0&na>>>0>0){oa=780;break c}a[gd>>0]=1;if((pg(f)|0)==5){oa=782;break c}a[Id>>0]=0;y=r;i=c[Bf>>2]|0;q=1}else{q=i;oa=784}}else{q=0;oa=784}if((oa|0)==784){oa=0;s=(c[Gd>>2]|0)-r|0;x=s+-1|0;t=(w|0)==2;if(t){l=c[hf>>2]&1;if((c[sf>>2]|0)>0){o=l^1;i=0;while(1){r=jg(c[(c[uf>>2]|0)+(i<<4)+4>>2]|0,516,o)|0;i=i+1|0;if(r|0){oa=3854;break c}r=c[sf>>2]|0;if((i|0)>=(r|0)){i=0;oa=790;break}}}else i=K}else{l=0;i=K;r=c[sf>>2]|0;oa=790}p:do if((oa|0)==790){oa=0;if((r|0)>0){i=(s|0)<1;if(!t){if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3853;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3853;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=wf(c[r>>2]|0,w,x)|0;if(i|0){oa=3852;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3852;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}if(!i){s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Vd=$f(i,0,0)|0,Vd|0):0){i=Vd;oa=3851;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3851;break c}i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[r+44>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3851;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break p}}}s=0;i=r;while(1){o=c[(c[uf>>2]|0)+(s<<4)+4>>2]|0;do if(o){if((a[o+8>>0]|0)!=2)break;r=c[o+4>>2]|0;c[r+4>>2]=c[o>>2];i=c[r+8>>2]|0;if(i|0?(Ud=$f(i,0,0)|0,Ud|0):0){i=Ud;oa=3850;break c}i=wf(c[r>>2]|0,2,x)|0;if(i|0){oa=3850;break c}o=r+44|0;if(b[r+22>>1]&16)c[o>>2]=0;i=Rf(r)|0;na=c[(c[r+12>>2]|0)+56>>2]|0;c[o>>2]=d[na+29>>0]<<16|d[na+28>>0]<<24|d[na+30>>0]<<8|d[na+31>>0];if(i|0){oa=3850;break c}i=c[sf>>2]|0}while(0);s=s+1|0;if((s|0)>=(i|0)){i=0;break}}}}while(0);if(!l)y=x;else{l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);$b(Cf);c[hf>>2]=c[hf>>2]|1;y=x}}l=c[qd>>2]|0;if((l|0)!=(B|0))do{c[qd>>2]=c[l+24>>2];q:do if(l|0){if(c[Ze>>2]|0){Xd(Cf,l);break}o=l;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;c[l>>2]=c[af>>2];c[af>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[Gd>>2]=(c[Gd>>2]|0)+-1;l=c[qd>>2]|0}while((l|0)!=(B|0));if(z){c[qd>>2]=c[A>>2];do if(!(c[Ze>>2]|0)){na=B;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[B>>2]=c[af>>2];c[af>>2]=B;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{na=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else Xd(Cf,B);while(0);if(q){Wd=1;oa=859}else c[Gd>>2]=(c[Gd>>2]|0)+-1}else{Wd=B+8|0;oa=c[Wd+4>>2]|0;na=Pa;c[na>>2]=c[Wd>>2];c[na+4>>2]=oa;na=B+16|0;oa=c[na+4>>2]|0;Wd=Na;c[Wd>>2]=c[na>>2];c[Wd+4>>2]=oa;Wd=q;oa=859}if((oa|0)==859?(oa=0,!((w|0)==2|Wd^1)):0)if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}if(!(c[db>>2]|0)){l=m;q=pa;o=qa;i=0}else{x=y+1|0;switch(w|0){case 0:while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;r:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=x;if(!i){q=0;i=o}else{q=Xa[i&255](l,y)|0;i=c[s>>2]|0}l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break r}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3848;break c}}case 2:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;s:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+88>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break s}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3849;break c}}}default:{w=0;while(1){if((w|0)>=(c[Vc>>2]|0)){l=m;q=pa;o=qa;i=0;break d}t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;l=c[r>>2]|0;t:do if(l){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+84>>2]|0;do if(!i){q=0;i=o}else{if((c[t+20>>2]|0)<=(y|0)){q=0;i=o;break}q=Xa[i&255](l,y)|0;i=c[s>>2]|0}while(0);l=c[t>>2]|0;na=i+-1|0;c[s>>2]=na;if(na|0){i=q;break}i=c[r>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,t);i=q;break t}i=t;if((c[l+304>>2]|0)>>>0>i>>>0)break;if((c[l+308>>2]|0)>>>0<=i>>>0)break;i=l+300|0;c[t>>2]=c[i>>2];c[i>>2]=t;i=q;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=q;break}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=q;break}}else i=0;while(0);if(!i)w=w+1|0;else{oa=3847;break c}}}}}break}case 2:{c[rf>>2]=0;o=p+8|0;i=c[o>>2]|0;if(i|0?!((c[Sc>>2]&1048576|0)==0&0==0):0){l=8;oa=1017;break c}z=p+4|0;y=c[(c[uf>>2]|0)+(c[z>>2]<<4)+4>>2]|0;do if(y){l=Zb(y,i,rf)|0;if(l|0){oa=950;break c}if((c[o>>2]|0)!=0?((d[vf>>0]|d[vf+1>>0]<<8)&128)!=0:0){if(a[gd>>0]|0?(c[Ha>>2]|0)<=1:0){i=0;break}i=c[bc>>2]|0;if(!i){l=(c[Fd>>2]|0)+1|0;c[Fd>>2]=l;l=(c[Gd>>2]|0)+l|0;c[bc>>2]=l}else l=i;x=l+-1|0;u:do if(!(c[db>>2]|0))oa=979;else{w=0;while(1){if((w|0)>=(c[Vc>>2]|0))break;t=c[(c[db>>2]|0)+(w<<2)>>2]|0;i=c[c[t+4>>2]>>2]|0;r=t+8|0;q=c[r>>2]|0;v:do if(q){if((c[i>>2]|0)<=1){i=0;break}s=t+12|0;o=(c[s>>2]|0)+1|0;c[s>>2]=o;i=c[i+80>>2]|0;c[t+20>>2]=l;if(!i)i=0;else{i=Xa[i&255](q,x)|0;o=c[s>>2]|0}q=c[t>>2]|0;na=o+-1|0;c[s>>2]=na;if(na|0)break;o=c[r>>2]|0;if(o|0)Wa[c[(c[o>>2]|0)+16>>2]&127](o)|0;do if(q|0){if(c[q+480>>2]|0){Xd(q,t);break v}o=t;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[t>>2]=c[na>>2];c[na>>2]=t;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{na=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else i=0;while(0);if(!i)w=w+1|0;else break u}l=c[bc>>2]|0;oa=979}while(0);if((oa|0)==979){oa=0;i=c[y+4>>2]|0;c[i+4>>2]=c[y>>2];i=c[i>>2]|0;if((c[i+96>>2]|0)<(l|0)?(a[i+6>>0]|0)!=0:0)i=Vf(i,l)|0;else i=0}na=Pa;ma=c[na+4>>2]|0;la=gc;c[la>>2]=c[na>>2];c[la+4>>2]=ma;la=Na;ma=c[la+4>>2]|0;na=hc;c[na>>2]=c[la>>2];c[na+4>>2]=ma}else i=0}else i=K;while(0);if(b[p+2>>1]|0){if((c[rf>>2]|0)!=(c[p+12>>2]|0)){oa=986;break c}if((c[(c[(c[uf>>2]|0)+(c[z>>2]<<4)+12>>2]|0)+4>>2]|0)!=(c[p+16>>2]|0)){oa=986;break c}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 94:{i=c[p+12>>2]|0;l=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;o=c[l+4>>2]|0;c[o+4>>2]=c[l>>2];if((i|0)==15)o=(c[l+20>>2]|0)+(c[(c[o>>2]|0)+100>>2]|0)|0;else{o=(c[(c[o+12>>2]|0)+56>>2]|0)+((i<<2)+36)|0;o=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0]}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=((o|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 95:{w=c[uf>>2]|0;x=p+4|0;y=c[x>>2]|0;l=c[w+(y<<4)+4>>2]|0;z=p+8|0;s=c[z>>2]|0;A=p+12|0;q=c[A>>2]|0;t=c[l+4>>2]|0;c[t+4>>2]=c[l>>2];l=c[t+12>>2]|0;r=c[l+56>>2]|0;l=c[l+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))oa=1035;else{i=Ve(l)|0;oa=1034}else oa=1030;do if((oa|0)==1030){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;oa=1034;break}else{i=Xf(l)|0;oa=1034;break}else o=0}while(0);if((oa|0)==1034){oa=0;if(!i)oa=1035;else o=0}if((oa|0)==1035){oa=0;na=r+((s<<2)+36)|0;a[na>>0]=q>>>24;a[na+1>>0]=q>>>16;a[na+2>>0]=q>>>8;i=q&255;a[na+3>>0]=i;if((s|0)==7){a[t+18>>0]=i;i=0;o=1}else{i=0;o=1}}switch(c[z>>2]|0){case 1:{c[c[w+(y<<4)+12>>2]>>2]=c[A>>2];c[hf>>2]=c[hf>>2]|1;break}case 2:{a[(c[w+(y<<4)+12>>2]|0)+76>>0]=c[A>>2];break}default:{}}if((c[x>>2]|0)==1){l=c[$a>>2]|0;if(l|0)do{na=l+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|1;a[na>>0]=ma;a[na+1>>0]=ma>>8;l=c[l+8>>2]|0}while((l|0)!=0);na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}if(o){l=m;q=pa;o=qa}else{oa=3855;break c}break}case 106:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((i|0)!=0?(c[i+52>>2]|0)==(c[p+8>>2]|0):0){o=i;i=K;l=p+2|0;oa=1074}else oa=1049;break}case 109:case 108:{oa=1049;break}case 111:{l=c[oc>>2]|0;w=c[l+(c[p+8>>2]<<2)>>2]|0;q=c[p+4>>2]|0;s=b[w+56>>1]|0;t=s<<16>>16;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;o=t<<3;r=o+96|0;o=o+296|0;l=c[l+(q<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;l=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;l=i+16|0;c[l>>2]=o;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=o;i=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[o+56>>1]=s;c[o+72>>2]=o+88+(t<<2);na=(c[l>>2]|0)+r|0;i=o+40|0;c[i>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;l=o+5|0;q=a[l>>0]|1;a[l>>0]=q;na=c[w+44>>2]|0;c[o+44>>2]=na;a[o+4>>0]=a[w+4>>0]|0;ma=c[w+52>>2]|0;c[o+52>>2]=ma;a[l>>0]=a[w+5>>0]&4|q&-5;l=m;q=pa;o=qa;i=Vg(c[w+8>>2]|0,ma,4,na,c[i>>2]|0)|0;break}case 113:case 112:{o=c[p+4>>2]|0;q=(c[oc>>2]|0)+(o<<2)|0;i=c[q>>2]|0;if(!i){s=c[p+8>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=s<<3;r=l+96|0;l=l+296|0;if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}w=i+16|0;l=w;i=(c[oc>>2]|0)+(o<<2)|0;w=c[w>>2]|0}else{w=c[i+20>>2]|0;l=i+16|0;c[l>>2]=w;i=i+8|0;b[i>>1]=b[i>>1]&13;i=q}c[i>>2]=w;i=w+1|0;ea=w;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=-1;b[w+56>>1]=s;c[w+72>>2]=w+88+(s<<2);na=(c[l>>2]|0)+r|0;q=w+40|0;c[q>>2]=na;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;if(!w){l=p;j=h;i=zf;oa=3892;break a}a[w+2>>0]=1;s=w+5|0;a[s>>0]=a[s>>0]|1;r=w+8|0;t=p+2|0;i=Pe(c[Cf>>2]|0,0,Cf,r,(b[t>>1]|5)&65535,1054)|0;do if(!i){i=Zb(c[r>>2]|0,1,0)|0;if(!i){l=c[p+16>>2]|0;c[w+44>>2]=l;if(!l){c[w+52>>2]=1;i=Vg(c[r>>2]|0,1,4,0,c[q>>2]|0)|0;a[w+4>>0]=1;break}o=w+52|0;i=Wg(c[r>>2]|0,o,(b[t>>1]|2)&65535)|0;if(!i)i=Vg(c[r>>2]|0,c[o>>2]|0,4,l,c[q>>2]|0)|0;a[w+4>>0]=0}}while(0);a[s>>0]=((b[t>>1]|0)!=8&1)<<2&255|a[s>>0]&-5}else{l=c[i+8>>2]|0;q=c[i+52>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;w:do if(i|0){x:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break x;i=c[i+24>>2]|0;if(!i)break w}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,md=c[(c[o>>2]|0)+8>>2]|0,md|0):0){i=md;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 114:{q=c[p+4>>2]|0;r=c[p+8>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}s=c[i+16>>2]|0}else{s=c[i+20>>2]|0;c[i+16>>2]=s;na=i+8|0;b[na>>1]=b[na>>1]&13}c[(c[oc>>2]|0)+(q<<2)>>2]=s;ea=s;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[s>>0]=1;a[s+1>>0]=-1;b[s+56>>1]=r;c[s+72>>2]=s+88+(r<<2);if(!s){l=p;j=h;i=zf;oa=3892;break a}q=c[p+16>>2]|0;l=s+44|0;c[l>>2]=q;o=c[p+12>>2]|0;q=e[q+6>>1]<<2;r=q+156|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1133;else{oa=1135;break c}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;t=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1133}while(0);if((oa|0)==1133){oa=0;t=_d(Cf,r,0)|0}if(!t){oa=1135;break c}gw(t|0,0,r|0)|0;c[s+40>>2]=t;na=t+136|0;c[t+28>>2]=na;ew(na|0,c[l>>2]|0,q+20|0)|0;c[t+148>>2]=0;if(o|0)b[t+142>>1]=o;i=c[uf>>2]|0;l=c[(c[(c[i+4>>2]|0)+4>>2]|0)+32>>2]|0;c[t+12>>2]=l;a[t+59>>0]=1;a[t+58>>0]=-1;a[t+57>>0]=0;c[t+24>>2]=Cf;c[t+72>>2]=t;if((a[ra>>0]|0)!=2?(ma=G(c[7379]|0,l)|0,c[t>>2]=ma,na=c[(c[i+12>>2]|0)+80>>2]|0,la=(na|0)<0,be=((l|0)<0)<<31>>31,na=Yv((la?-1024:l)|0,(la?-1:be)|0,na|0,((na|0)<0)<<31>>31|0)|0,la=L()|0,ka=(la|0)<0|(la|0)==0&na>>>0<536870912,na=ka?na:536870912,ka?la:0,c[t+4>>2]=(ma|0)>(na|0)?ma:na,(c[7329]|0)==0):0){c[t+52>>2]=l;na=Sv(l|0,be|0,-1,-1)|0;ma=L()|0;do if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)i=0;else{if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;break}o=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0>>0)c[14985]=l;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){i=0;break}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);c[t+40>>2]=i;i=(i|0)==0?7:0}else i=0;do if((e[t+144>>1]|0)<13){na=c[t+156>>2]|0;if(na|0?(na|0)!=(c[jc>>2]|0):0)break;a[t+60>>0]=3}while(0);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 115:{la=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;na=la;ma=c[na>>2]|0;na=c[na+4>>2]|0;ja=Sv(ma|0,na|0,1,0)|0;ka=L()|0;c[la>>2]=ja;c[la+4>>2]=ka;if((ma|0)==0&(na|0)==0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 116:{q=c[p+4>>2]|0;r=c[p+12>>2]|0;i=c[xd>>2]|0;if((q|0)>0)i=i+(((c[va>>2]|0)-q|0)*40|0)|0;l=(r<<3)+96|0;o=c[(c[oc>>2]|0)+(q<<2)>>2]|0;if(o|0){na=o+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(q<<2)>>2]|0);c[(c[oc>>2]|0)+(q<<2)>>2]=0}if((c[i+24>>2]|0)<(l|0)){if(Eg(i,l,0)|0){l=p;j=h;i=zf;oa=3892;break a}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(q<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=3;a[i+1>>0]=-1;b[i+56>>1]=r;c[i+72>>2]=i+88+(r<<2);if(!i){l=p;j=h;i=zf;oa=3892;break a}a[i+2>>0]=1;c[i+32>>2]=c[p+8>>2];a[i+4>>0]=1;c[i+40>>2]=59954;l=m;q=pa;o=qa;i=K;break}case 117:{l=p+4|0;tg(f,c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]|0);c[(c[oc>>2]|0)+(c[l>>2]<<2)>>2]=0;l=m;q=pa;o=qa;i=K;break}case 25:case 24:case 23:case 22:{w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=z&255;a[w+2>>0]=0;y:do if(!(a[w+4>>0]|0)){i=c[w+40>>2]|0;o=(d[i+3>>0]|0)>>>1&1;oa=c[p+16>>2]|0;c[Yd>>2]=c[w+44>>2];b[wa>>1]=oa;a[xa>>0]=(l<<1&2^2)+255;c[ya>>2]=pa+((c[p+12>>2]|0)*40|0);a[za>>0]=0;i=Xg(i,Yd,0,0,0,Td)|0;if(i|0){oa=1213;break c}i=o&255;if(o<<24>>24!=0&(a[za>>0]|0)==0)if(!(c[Td>>2]|0)){p=p+20|0;oa=1212}else{i=0;oa=1211}else{o=i;oa=1194}}else{r=c[p+12>>2]|0;t=pa+(r*40|0)|0;s=pa+(r*40|0)+8|0;i=b[s>>1]|0;if((i&14)==2){i=a[pa+(r*40|0)+10>>0]|0;o=pa+(r*40|0)+16|0;q=pa+(r*40|0)+12|0;if(!(Lg(c[o>>2]|0,rf,c[q>>2]|0,i)|0))i=b[s>>1]|0;else{if(!(Og(c[o>>2]|0,Hd,c[q>>2]|0,i)|0)){na=Hd;oa=c[na+4>>2]|0;i=t;c[i>>2]=c[na>>2];c[i+4>>2]=oa;i=4}else{g[t>>3]=+g[rf>>3];i=8}i=b[s>>1]&-3|i;b[s>>1]=i}}i=i&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[t>>3])|0;q=L()|0;break}if(!(i&18)){o=0;q=0}else{o=Ng(a[pa+(r*40|0)+10>>0]|0,c[pa+(r*40|0)+12>>2]|0,c[pa+(r*40|0)+16>>2]|0)|0;q=L()|0;i=e[s>>1]|0}}else{q=t;o=c[q>>2]|0;q=c[q+4>>2]|0}while(0);do if(!(i&4)){if(!(i&8)){i=K;oa=1211;break y}u=+g[t>>3];v=+(o>>>0)+4294967296.0*+(q|0);if(u>31)+l|0;break}else{l=((l&1|0)==0&u>v&1)+l|0;break}}while(0);i=Xg(c[w+40>>2]|0,0,o,q,0,Td)|0;oa=w+64|0;c[oa>>2]=o;c[oa+4>>2]=q;if(!i){o=0;oa=1194}else{oa=1213;break c}}while(0);z:do if((oa|0)==1194){oa=0;a[w+3>>0]=0;c[w+28>>2]=0;i=c[Td>>2]|0;if((l|0)>23){if((i|0)>=0?!((l|0)==25&(i|0)==0):0)c[Td>>2]=0;else oa=1197;A:do if((oa|0)==1197){c[Td>>2]=0;i=Yg(c[w+40>>2]|0,0)|0;switch(i|0){case 0:break A;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212;break}if((i|0)<=0?!((l|0)==22&(i|0)==0):0){oa=(a[c[w+40>>2]>>0]|0)!=0;c[Td>>2]=oa&1;if(oa){i=0;oa=1211;break}else{p=(o|0)==0?p:p+20|0;oa=1212;break}}c[Td>>2]=0;i=c[w+40>>2]|0;na=i+1|0;a[na>>0]=a[na>>0]&-15;b[i+50>>1]=0;if(((a[i>>0]|0)==0?(ce=i+70|0,de=b[ce>>1]|0,de<<16>>16!=0):0)?(a[(c[i+116>>2]|0)+8>>0]|0)!=0:0)b[ce>>1]=de+-1<<16>>16;else oa=1206;B:do if((oa|0)==1206){i=Hh(i)|0;switch(i|0){case 0:break B;case 101:break;default:{oa=1213;break c}}c[Td>>2]=1;i=0;oa=1211;break z}while(0);p=(o|0)==0?p:p+20|0;oa=1212}while(0);if((oa|0)==1211){oa=28;break d}else if((oa|0)==1212){oa=0;l=m;q=pa;o=qa;i=0;break d}break}case 119:{l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5|0;a[l>>0]=(c[p+8>>2]&255)<<3&8|a[l>>0]&-9;l=m;q=pa;o=qa;i=K;break}case 26:{if(!(a[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+5>>0]&8))oa=1216;else{l=m;q=pa;o=qa;i=K}break}case 29:case 28:case 27:{oa=1216;break}case 30:{i=p+12|0;o=c[i>>2]|0;t=pa+(o*40|0)+8|0;w=b[t>>1]|0;if(!(w&4)){s=pa+(o*40|0)|0;l=w&65535;do if(!(l&4)){if(l&8|0){v=+g[s>>3];o=Mg(v)|0;q=L()|0;oa=Sv(o|0,q|0,1,-2147483648)|0;na=L()|0;l=w&15904|4;if(!((na>>>0>0|(na|0)==0&oa>>>0>1)&v==+(o>>>0)+4294967296.0*+(q|0))){l=w;break}oa=s;c[oa>>2]=o;c[oa+4>>2]=q;b[t>>1]=l;break}if(l&2){q=a[pa+(o*40|0)+10>>0]|0;r=pa+(o*40|0)+16|0;l=pa+(o*40|0)+12|0;if(!(Lg(c[r>>2]|0,rf,c[l>>2]|0,q)|0))l=b[t>>1]|0;else{if(Og(c[r>>2]|0,Hd,c[l>>2]|0,q)|0){v=+g[rf>>3];g[s>>3]=v;o=b[t>>1]|0;l=o|8;b[t>>1]=l;q=Mg(v)|0;r=L()|0;na=Sv(q|0,r|0,1,-2147483648)|0;ma=L()|0;if((ma>>>0>0|(ma|0)==0&na>>>0>1)&v==+(q>>>0)+4294967296.0*+(r|0)){l=s;c[l>>2]=q;c[l+4>>2]=r;l=o&15904;oa=1281}}else{na=Hd;oa=c[na+4>>2]|0;l=s;c[l>>2]=c[na>>2];c[l+4>>2]=oa;l=b[t>>1]|0;oa=1281}if((oa|0)==1281){l=l|4;b[t>>1]=l}l=l&-3;b[t>>1]=l}}else l=w}else l=w;while(0);b[t>>1]=w;if(!(l&4)){i=K;oa=28}else oa=1287}else oa=1287;break}case 31:{i=p+12|0;oa=1287;break}case 120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+16|0;q=l;o=c[q>>2]|0;q=c[q+4>>2]|0;ma=Sv(o|0,q|0,1,0)|0;na=L()|0;c[l>>2]=ma;c[l+4>>2]=na;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break}case 121:{na=rf;c[na>>2]=0;c[na+4>>2]=0;c[Hd>>2]=0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;y=i}else{lh(i)|0;y=i}z=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=z+5|0;do if(!(a[x>>0]&2)){l=z+40|0;i=$g(c[l>>2]|0,Hd)|0;if(i|0){oa=1328;break c}if(c[Hd>>2]|0){i=rf;c[i>>2]=1;c[i+4>>2]=0;i=0;break}l=c[l>>2]|0;bg(l);l=l+32|0;i=c[l>>2]|0;l=c[l+4>>2]|0;na=rf;c[na>>2]=i;c[na+4>>2]=l;if((i|0)==-1&(l|0)==2147483647){a[x>>0]=a[x>>0]|2;i=0;break}else{ma=Sv(i|0,l|0,1,0)|0;na=L()|0;i=rf;c[i>>2]=ma;c[i+4>>2]=na;i=0;break}}else i=K;while(0);r=c[p+12>>2]|0;if(r|0){l=c[nc>>2]|0;if(!l)o=pa;else{while(1){o=c[l+4>>2]|0;if(!o)break;else l=o}o=c[l+16>>2]|0}w=o+(r*40|0)|0;s=o+(r*40|0)+8|0;l=b[s>>1]|0;q=l&65535;do if(!(q&4)){if(q&8|0){q=Mg(+g[w>>3])|0;o=L()|0;oa=1317;break}if(!(q&18)){t=w;c[t>>2]=0;c[t+4>>2]=0;b[s>>1]=l&15904|4;t=0;q=0;break}else{q=Ng(a[o+(r*40|0)+10>>0]|0,c[o+(r*40|0)+12>>2]|0,c[o+(r*40|0)+16>>2]|0)|0;o=L()|0;l=b[s>>1]|0;oa=1317;break}}else{o=w;q=c[o>>2]|0;o=c[o+4>>2]|0;oa=1317}while(0);if((oa|0)==1317){oa=0;na=w;c[na>>2]=q;c[na+4>>2]=o;b[s>>1]=l&15904|4;if((q|0)==-1&(o|0)==2147483647){i=13;oa=1328;break c}else t=o}if(a[x>>0]&2){i=13;oa=1328;break c}l=rf;o=c[l>>2]|0;l=c[l+4>>2]|0;r=Sv(q|0,t|0,1,0)|0;s=L()|0;if(!((l|0)>(t|0)|(l|0)==(t|0)&o>>>0>q>>>0)){o=rf;c[o>>2]=r;c[o+4>>2]=s;o=r;l=s}na=w;c[na>>2]=o;c[na+4>>2]=l}if(a[x>>0]&2){o=z+40|0;l=0;do{Fb(8,rf);q=rf;q=Sv(c[q>>2]|0,c[q+4>>2]&1073741823|0,1,0)|0;i=L()|0;na=rf;c[na>>2]=q;c[na+4>>2]=i;i=Xg(c[o>>2]|0,0,q,i,0,Hd)|0;q=c[Hd>>2]|0;if(q|i|0)break;l=l+1|0}while(l>>>0<100);if(i|0){oa=1328;break c}if(!q){i=13;oa=1328;break c}else i=0}a[z+3>>0]=0;c[z+28>>2]=0;o=rf;q=c[o+4>>2]|0;l=y;c[l>>2]=c[o>>2];c[l+4>>2]=q;l=m;q=pa;o=qa;break}case 122:{i=c[p+8>>2]|0;s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=pa+((c[p+12>>2]|0)*40|0)|0;t=c[w>>2]|0;w=c[w+4>>2]|0;na=qc;c[na>>2]=t;c[na+4>>2]=w;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){q=c[(c[uf>>2]|0)+(a[s+1>>0]<<4)>>2]|0;r=c[p+16>>2]|0}else{q=0;r=0}x=p+2|0;l=b[x>>1]|0;if(l&1)c[rc>>2]=(c[rc>>2]|0)+1;if(l&32){na=zb;c[na>>2]=t;c[na+4>>2]=w}c[xb>>2]=c[pa+(i*40|0)+16>>2];c[yb>>2]=c[pa+(i*40|0)+12>>2];if(!(l&16))o=0;else o=c[s+32>>2]|0;if(!(b[pa+(i*40|0)+8>>1]&16384))i=0;else i=c[pa+(i*40|0)>>2]|0;c[Sb>>2]=i;c[rf>>2]=0;i=ah(c[s+40>>2]|0,rf,l&10,o)|0;a[s+3>>0]=0;c[s+28>>2]=0;if(i|0){oa=1345;break c}if(r|0)eb[c[Ca>>2]&127](c[Tb>>2]|0,(b[x>>1]&4)==0?18:23,q,c[r>>2]|0,t,w);l=m;q=pa;o=qa;i=0;break}case 123:{q=c[p+8>>2]|0;r=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[p+1>>0]|0)==-6?(c[Ca>>2]|0)!=0:0){i=c[(c[uf>>2]|0)+(a[r+1>>0]<<4)>>2]|0;l=c[p+16>>2]|0;if((b[p+2>>1]&2)!=0?(a[r+4>>0]|0)!=0:0){ma=c[r+40>>2]|0;bg(ma);ma=ma+32|0;na=c[ma+4>>2]|0;o=r+64|0;c[o>>2]=c[ma>>2];c[o+4>>2]=na;o=i}else o=i}else{o=0;l=0}i=bh(c[r+40>>2]|0,b[p+2>>1]&255)|0;c[r+28>>2]=0;c[r+32>>2]=0;if(i|0){oa=3855;break c}if(((q&1|0)!=0?(c[rc>>2]=(c[rc>>2]|0)+1,ge=c[Ca>>2]|0,(ge|0)!=0):0)?(c[l+36>>2]&32|0)==0:0){q=r+64|0;eb[ge&127](c[Tb>>2]|0,9,o,c[l>>2]|0,c[q>>2]|0,c[q+4>>2]|0);l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case 124:{l=c[rc>>2]|0;c[sc>>2]=l;c[tc>>2]=(c[tc>>2]|0)+l;c[rc>>2]=0;l=m;q=pa;o=qa;i=K;break}case 125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;x=c[p+16>>2]|0;s=c[t+40>>2]|0;r=s+32|0;i=c[r>>2]|0;t=c[t+44>>2]|0;if(!i){q=((e[t+6>>1]|0)*40|0)+56|0;o=c[t+12>>2]|0;C:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1381;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(!i){oa=1382;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1382;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1381;break C}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1381}while(0);if((oa|0)==1381){oa=0;if(!i){oa=1382;break c}}c[i+4>>2]=i+16;c[i>>2]=t;c[r>>2]=i;b[i+8>>1]=x;o=i}else o=i;if(!(a[s+56>>0]|0)){l=c[s+36>>2]|0;i=l+8|0}else{l=c[s+20>>2]|0;na=c[l+12>>2]|0;l=c[(c[l+8>>2]|0)+4>>2]|0;i=c[na+(l*56|0)+32>>2]|0;l=na+(l*56|0)+20|0}_g(t,c[l>>2]|0,i,o);if((x|0)>0){l=c[o+4>>2]|0;i=0;do{if(b[l+(i*40|0)+8>>1]&1){i=0;oa=28;break d}i=i+1|0}while((i|0)<(x|0))}if(!(Fh(c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,o,0)|0)){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case 126:{s=c[p+8>>2]|0;i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;if(!(a[i+56>>0]|0)){i=c[i+36>>2]|0;r=i+8|0}else{i=c[i+20>>2]|0;na=c[i+12>>2]|0;i=c[(c[i+8>>2]|0)+4>>2]|0;r=c[na+(i*56|0)+32>>2]|0;i=na+(i*56|0)+20|0}i=c[i>>2]|0;if((c[pa+(s*40|0)+24>>2]|0)<(i|0)){if(Eg(pa+(s*40|0)|0,i,0)|0){i=7;oa=3855;break c}o=pa+(s*40|0)+8|0;l=o;o=b[o>>1]|0;q=c[pa+(s*40|0)+16>>2]|0}else{q=c[pa+(s*40|0)+20>>2]|0;c[pa+(s*40|0)+16>>2]=q;l=pa+(s*40|0)+8|0;o=b[l>>1]&13;b[l>>1]=o}c[pa+(s*40|0)+12>>2]=i;b[l>>1]=o&15904|16;ew(q|0,r|0,i|0)|0;c[(c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0)+28>>2]=0;l=m;q=pa;o=qa;i=0;break}case 127:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;q=i}else{lh(i)|0;q=i}i=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;bg(i);l=c[i+44>>2]|0;if(l>>>0>(c[Da>>2]|0)>>>0){oa=3891;break c}na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,q)|0;if(i|0){oa=3855;break c}}else{c[q+16>>2]=o;b[q+8>>1]=4112;c[q+12>>2]=l}if((c[p+12>>2]|0)==0?(he=q+8|0,ie=b[he>>1]|0,(ie&4096)!=0):0){i=ie&65535;do if(!(i&18))i=ie;else{do if(!(i&16384))i=ie;else{l=q+12|0;i=(c[q>>2]|0)+(c[l>>2]|0)|0;if((i|0)<1)if(!(ie&16)){i=ie;break}else i=1;if(Eg(q,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[q+16>>2]|0)+(c[l>>2]|0)|0,0,c[q>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[q>>2]|0);i=b[he>>1]&-16897;b[he>>1]=i}while(0);if(c[q+24>>2]|0?(c[q+16>>2]|0)==(c[q+20>>2]|0):0)break;if(Jg(q)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[he>>1]|0}while(0);b[he>>1]=i&-4097;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}break}case -128:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;w=i}else{lh(i)|0;w=i}l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;q=l+2|0;D:do if(!(a[q>>0]|0)){do if(!(a[l+3>>0]|0)){if((a[l>>0]|0)!=2){o=l+40|0;i=c[o>>2]|0;do if(a[i>>0]|0){i=sh(l)|0;if(i|0){oa=1481;break c}if(!(a[q>>0]|0)){i=c[o>>2]|0;break}else{b[w+8>>1]=1;i=0;break D}}while(0);bg(i);o=i+32|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=0;break}i=c[l+40>>2]|0;t=c[i>>2]|0;i=Xa[c[(c[t>>2]|0)+48>>2]&255](i,rf)|0;t=t+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;E:do if(l|0){do if(q|0){if(c[q+480>>2]|0){Xd(q,l);break E}o=l;if((c[q+304>>2]|0)>>>0>o>>>0)break;if((c[q+308>>2]|0)>>>0<=o>>>0)break;na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;F:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;G:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break F}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=1464;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break F}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1464;break G}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=1464}while(0);if((oa|0)==1464){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=1481;break c}o=rf;i=0;l=c[o>>2]|0;o=c[o+4>>2]|0}else{o=l+64|0;l=c[o>>2]|0;o=c[o+4>>2]|0;i=rf;c[i>>2]=l;c[i+4>>2]=o;i=K}while(0);na=w;c[na>>2]=l;c[na+4>>2]=o}else{b[w+8>>1]=1;i=K}while(0);l=m;q=pa;o=qa;break}case -127:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;a[i+2>>0]=1;c[i+28>>2]=0;if(!(a[i>>0]|0)){i=c[i+40>>2]|0;l=i+16|0;o=c[l>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[l>>2]=0;a[i>>0]=1;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 32:case -126:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;c[rf>>2]=0;if(z<<24>>24==-126?(c[l+32>>2]=-1,(a[i>>0]|0)==0):0){l=m;q=pa;o=qa;i=K;break d}r=$g(i,rf)|0;i=c[rf>>2]|0;a[l+2>>0]=i;a[l+3>>0]=0;c[l+28>>2]=0;if(r|0){oa=1492;break c}if((i|0)!=0&(c[p+8>>2]|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case 33:{s=c[(c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0)+40>>2]|0;i=ch(s,rf)|0;if(i|0){oa=1519;break c}do if(!(c[rf>>2]|0)){if((a[s>>0]|0)==0?(ke=c[s+116>>2]|0,a[ke+8>>0]|0):0){i=e[ke+24>>1]|0;l=a[s+68>>0]|0;if(l<<24>>24>0){q=l<<24>>24;o=0;r=0;l=0;do{i=Yv(i|0,l|0,e[(c[s+120+(r<<2)>>2]|0)+24>>1]|0,0)|0;l=L()|0;o=o+1<<24>>24;r=o&255}while((r|0)<(q|0))}else l=0;if(l>>>0<0|(l|0)==0&i>>>0<8)if(l>>>0<0|(l|0)==0&i>>>0<2)i=0;else{o=40;do{o=(o&65535)+65526|0;i=cw(i|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&i>>>0<8);o=o&65535;oa=1514}else{if(l>>>0>0|(l|0)==0&i>>>0>255){o=40;do{o=(o&65535)+40|0;oa=i;i=bw(i|0,l|0,4)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>4095);o=o&65535}else o=40;if(l>>>0>0|(l|0)==0&i>>>0>15){do{o=(o&65535)+10&65535;oa=i;i=bw(i|0,l|0,1)|0;na=l;l=L()|0}while(na>>>0>0|(na|0)==0&oa>>>0>31);oa=1514}else oa=1514}if((oa|0)==1514){oa=0;i=(o&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)|0}if((c[p+12>>2]|0)>(i<<16>>16|0)){c[rf>>2]=1;break}}l=m;q=pa;o=qa;i=0;break d}while(0);i=0;oa=28;break}case 35:case 34:{c[uc>>2]=(c[uc>>2]|0)+1;oa=1521;break}case 36:{oa=1521;break}case 3:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[l+40>>2]|0;if(a[i+56>>0]|0){c[rf>>2]=0;i=fi(c[i+20>>2]|0,rf)|0;i=(i|0)==0&(c[rf>>2]|0)!=0?101:i;oa=2160;break d}q=i+36|0;o=c[q>>2]|0;oa=o+4|0;c[q>>2]=c[oa>>2];c[oa>>2]=0;do if(!((o|0)==0|(c[i+40>>2]|0)!=0)){if(c[Ze>>2]|0){Xd(Cf,o);break}oa=o;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);i=(c[q>>2]|0)==0?101:0;oa=2160;break}case 5:case 4:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;l=i;i=Xa[c[p+16>>2]&255](c[i+40>>2]|0,c[p+12>>2]|0)|0;oa=2160;break}case -124:case -125:{t=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+8>>2]|0;o=pa+(w*40|0)|0;s=p+2|0;if(b[s>>1]&1)c[rc>>2]=(c[rc>>2]|0)+1;q=pa+(w*40|0)+8|0;l=b[q>>1]|0;do if(!(l&16384))i=z;else{r=pa+(w*40|0)+12|0;i=(c[o>>2]|0)+(c[r>>2]|0)|0;if((i|0)<1)if(!(l&16)){i=z;break}else i=1;if(Eg(o,i,1)|0){oa=2221;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[r>>2]|0)|0,0,c[o>>2]|0)|0;c[r>>2]=(c[r>>2]|0)+(c[o>>2]|0);b[q>>1]=b[q>>1]&-16897;i=a[p>>0]|0}while(0);if(i<<24>>24==-125){t=c[t+40>>2]|0;F=pa+(w*40|0)+16|0;l=c[F>>2]|0;o=l+1|0;na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){q=d[l+2>>0]|0;if(!(q&128)){i=i<<7&16256|q;break}l=d[l+3>>0]|0;if(!(l&128)){i=(i<<14|l)&2080895|q<<7&16256;break}else{Of(o,rf)|0;na=rf;i=c[na>>2]|0;i=((i|0)==(i|0)?0==(c[na+4>>2]|0):0)?i:-1;break}}while(0);do if(!((i|0)!=7&(i+-1|0)>>>0<9)){l=t+60|0;if((i|0)<11|(i&1|0)==0){a[l>>0]=0;break}else{a[l>>0]=a[l>>0]&2;break}}else{na=t+60|0;a[na>>0]=a[na>>0]&1}while(0);E=pa+(w*40|0)+12|0;D=c[E>>2]|0;o=1;i=D;l=((D|0)<0)<<31>>31;while(1){i=bw(i|0,l|0,7)|0;l=L()|0;if((i|0)==0&(l|0)==0)break;else o=o+1|0}s=D+8|0;q=o+D|0;B=t+4|0;l=c[B>>2]|0;do if(!l)i=0;else{if(!(c[t+40>>2]|0)){i=t+44|0;na=c[i>>2]|0;if((na|0)<=(l|0)?!(c[14768]|0?(na|0)>(c[t>>2]|0):0):0){i=0;break}}else{na=c[t+48>>2]|0;if((na|0)==0|(na+s|0)<=(l|0)){i=0;break}i=t+44|0}na=Vh(t)|0;c[i>>2]=0;c[t+48>>2]=0;i=na}while(0);o=t+36|0;l=t+44|0;c[l>>2]=(c[l>>2]|0)+q;l=t+8|0;if((q|0)>(c[l>>2]|0))c[l>>2]=q;A=t+40|0;l=c[A>>2]|0;r=l;if(l){C=t+48|0;q=c[C>>2]|0;y=q+s|0;z=t+52|0;s=c[z>>2]|0;if((y|0)>(s|0)){q=c[o>>2]|0;x=((y|0)<0)<<31>>31;w=s;t=((s|0)<0)<<31>>31;do{w=cw(w|0,t|0,1)|0;t=L()|0}while((t|0)<(x|0)|(t|0)==(x|0)&w>>>0>>0);s=(q|0)==0?-1:q-r|0;q=c[B>>2]|0;r=((q|0)<0)<<31>>31;na=(t|0)>(r|0)|(t|0)==(r|0)&w>>>0>q>>>0;q=na?q:w;r=na?r:t;na=(r|0)<(x|0)|(r|0)==(x|0)&q>>>0>>0;q=na?y:q;r=sb(l,q,na?x:r)|0;if(!r){oa=2221;break c}if((s|0)>-1)c[o>>2]=r+s;c[A>>2]=r;c[z>>2]=q;l=r;q=c[C>>2]|0}l=l+q|0;c[C>>2]=q+(D+15&-8);q=c[o>>2]|0;if(q)c[l+4>>2]=q-r}else{na=Sv(s|0,((s|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){oa=2221;break c}do if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;if(!l){oa=2221;break c}}else{r=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,q|0,r|0,((r|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](r)|0;if(!l){oa=2221;break c}q=Wa[c[29352>>2]&127](l)|0;q=(c[14978]|0)+q|0;c[14978]=q;if(q>>>0>(c[14982]|0)>>>0)c[14982]=q;q=(c[14981]|0)+1|0;c[14981]=q;if(q>>>0<=(c[14987]|0)>>>0)break;c[14987]=q}while(0);c[l+4>>2]=c[o>>2]}ew(l+8|0,c[F>>2]|0,c[E>>2]|0)|0;c[l>>2]=c[E>>2];c[o>>2]=l}else{na=c[pa+(w*40|0)+12>>2]|0;i=Ab;c[i>>2]=na;c[i+4>>2]=((na|0)<0)<<31>>31;c[Hd>>2]=c[pa+(w*40|0)+16>>2];c[Bb>>2]=pa+((c[p+12>>2]|0)*40|0);b[Cb>>1]=c[p+16>>2];i=e[s>>1]|0;if(!(i&16))l=0;else l=c[t+32>>2]|0;i=ah(c[t+40>>2]|0,Hd,i&10,l)|0;c[t+28>>2]=0}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -123:{l=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;o=c[l+40>>2]|0;c[Hd>>2]=c[l+44>>2];b[vc>>1]=c[p+12>>2];a[wc>>0]=0;c[xc>>2]=pa+((c[p+8>>2]|0)*40|0);i=Xg(o,Hd,0,0,0,rf)|0;if(i|0){oa=2226;break c}if((c[rf>>2]|0)==0?(me=bh(o,4)|0,me|0):0){i=me;oa=2226;break c}c[l+28>>2]=0;c[l+32>>2]=0;l=m;q=pa;o=qa;i=0;break}case -121:case -122:{s=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=s+40|0;if(a[c[i>>2]>>0]|0?(ne=sh(s)|0,ne|0):0){i=ne;oa=3855;break c}if(a[s+2>>0]|0){i=c[p+8>>2]|0;l=pa+(i*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=1;l=m;q=pa;o=qa;i=0;break d}else{Dg(pa+(i*40|0)|0);l=m;q=pa;o=qa;i=0;break d}}i=c[i>>2]|0;bg(i);l=c[i+44>>2]|0;b[jb>>1]=0;c[kb>>2]=Cf;c[lb>>2]=0;na=e[i+48>>1]|0;o=c[i+40>>2]|0;ma=(c[(c[i+116>>2]|0)+60>>2]|0)-o|0;if(l>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(i,0,l,Hd)|0;if(i|0){oa=2256;break c}o=c[Eb>>2]|0}else{c[Eb>>2]=o;b[jb>>1]=4112;c[Gb>>2]=l}na=a[o>>0]|0;i=na&255;do if(na<<24>>24<=-1){l=d[o+1>>0]|0;if(!(l&128)){i=i<<7&16256|l;oa=2241;break}q=d[o+2>>0]|0;if(q&128){Of(o,rf)|0;na=rf;i=c[na>>2]|0;if((i|0)==(i|0)?0==(c[na+4>>2]|0):0){oa=2241;break}else{i=-1;break}}else{i=(i<<14|q)&2080895|l<<7&16256;oa=2241;break}}else oa=2241;while(0);if((oa|0)==2241){oa=0;if(i>>>0<3){oa=2253;break c}}if(i>>>0>(c[Gb>>2]|0)>>>0){oa=2253;break c}o=c[Eb>>2]|0;r=o+(i+-1)|0;na=a[r>>0]|0;l=na&255;do if(na<<24>>24<=-1){o=d[o+i>>0]|0;if(!(o&128)){l=l<<7&16256|o;break}q=d[r+2>>0]|0;if(!(q&128)){l=(l<<14|q)&2080895|o<<7&16256;break}else{Of(r,rf)|0;na=rf;l=c[na>>2]|0;l=((l|0)==(l|0)?0==(c[na+4>>2]|0):0)?l:-1;break}}while(0);if((l|0)==7|(l+-1|0)>>>0>8){oa=2253;break c}o=d[3520+l>>0]|0;q=c[Gb>>2]|0;if(q>>>0<(i+o|0)>>>0){oa=2253;break c}Ug((c[Eb>>2]|0)+(q-o)|0,l,Td)|0;q=Td;o=c[q>>2]|0;q=c[q+4>>2]|0;if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);if((a[p>>0]|0)==-122){l=c[(c[oc>>2]|0)+(c[p+12>>2]<<2)>>2]|0;a[l+2>>0]=0;i=l+64|0;c[i>>2]=o;c[i+4>>2]=q;a[l+3>>0]=1;c[l+24>>2]=c[p+16>>2];c[l+36>>2]=s;l=m;q=pa;o=qa;i=0;break d}na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=0;break}case 40:case 39:case 38:case 37:{o=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Hd>>2]=c[o+44>>2];b[zc>>1]=c[p+16>>2];a[Ac>>0]=((z&255)<39)<<31>>31;c[Bc>>2]=pa+((c[p+12>>2]|0)*40|0);o=c[o+40>>2]|0;bg(o);i=c[o+44>>2]|0;if((i|0)<1){oa=2267;break c}b[Ea>>1]=0;c[Fa>>2]=Cf;c[Ga>>2]=0;na=e[o+48>>1]|0;l=c[o+40>>2]|0;ma=(c[(c[o+116>>2]|0)+60>>2]|0)-l|0;if(i>>>0>((ma|0)<(na|0)?((ma|0)>0?ma:0):na)>>>0){i=uh(o,0,i,rf)|0;if(i|0){oa=2274;break c}i=c[nb>>2]|0;l=c[mb>>2]|0}else{c[mb>>2]=l;b[Ea>>1]=4112;c[nb>>2]=i}i=Fh(i,l,Hd,0)|0;if(!((b[Ea>>1]&9216)==0&(c[Ga>>2]|0)==0))Cg(rf);if((((a[p>>0]&1)==0?i+1|0:0-i|0)|0)>0){i=0;oa=28}else{l=m;q=pa;o=qa;i=0}break}case -120:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;A=i}else{lh(i)|0;A=i}B=A+8|0;b[B>>1]=1;if((c[Ha>>2]|0)>((c[ad>>2]|0)+1|0)){oa=2280;break c}C=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(C<<4)+4>>2]|0;z=p+4|0;s=c[z>>2]|0;y=x+4|0;w=c[y>>2]|0;c[w+4>>2]=c[x>>2];if((c[w+44>>2]|0)>>>0>>0){oa=2282;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,s,rf,0)|0;if(l|0){oa=2286;break c}i=c[rf>>2]|0;r=c[i+8>>2]|0;q=r+4|0;if((c[q>>2]|0)!=(s|0)){c[r+56>>2]=c[i+4>>2];c[r+72>>2]=i;c[r+52>>2]=w;c[q>>2]=s;a[r+9>>0]=(s|0)==1?100:0}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];i=c[o+8>>2]|0;H:do if(i|0){I:do if(s)while(1){if((c[i+64>>2]|0)==(s|0))break I;i=c[i+24>>2]|0;if(!i)break H}while(0);i=$f(i,s,0)|0;if(i|0){j=i;oa=2301;break c}}while(0);l=x+11|0;if(a[l>>0]|0?(a[l>>0]=0,kd=c[(c[y>>2]|0)+8>>2]|0,kd|0):0){i=kd;do{do if(a[i+1>>0]&16){a[l>>0]=1;if((c[i+64>>2]|0)!=(s|0))break;a[i>>0]=1}while(0);i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(o,s,0,0)|0;if(i|0){j=i;oa=2301;break c}if(!(a[w+17>>0]|0)){i=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){l=c[r+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{na=c[l+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[l+16>>2]=c[na>>2];c[na>>2]=l;break}}while(0);b[B>>1]=4;na=A;c[na>>2]=0;c[na+4>>2]=0;if(!i){l=m;q=pa;o=qa;i=0;break d}else{oa=3855;break c}}t=c[y>>2]|0;c[t+4>>2]=c[x>>2];t=c[(c[t+12>>2]|0)+56>>2]|0;t=d[t+53>>0]<<16|d[t+52>>0]<<24|d[t+54>>0]<<8|d[t+55>>0];if((t|0)==(s|0)){l=Bh(c[r+52>>2]|0,r,c[q>>2]|0)|0;do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(!l)i=0;else{i=0;j=l;oa=2353;break c}}else{do if(r|0){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2319;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)!=(t|0)){c[o+56>>2]=c[i+4>>2];c[o+72>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0}l=gg(w,o,1,0,s,0)|0;do if(o|0){i=c[o+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i;break}}while(0);if(l|0){i=0;j=l;oa=2353;break c}l=c[w>>2]|0;l=Za[c[l+204>>2]&127](l,t,rf,0)|0;if(l|0){oa=2329;break c}i=c[rf>>2]|0;o=c[i+8>>2]|0;l=o+4|0;if((c[l>>2]|0)==(t|0)){l=o+72|0;i=c[o+52>>2]|0}else{c[o+56>>2]=c[i+4>>2];na=o+72|0;c[na>>2]=i;c[o+52>>2]=w;c[l>>2]=t;a[o+9>>0]=(t|0)==1?100:0;l=na;i=w}o=Bh(i,o,t)|0;i=c[l>>2]|0;if(!(b[i+28>>1]&32))Df(i);else{na=c[i+20>>2]|0;ma=na+120|0;c[ma>>2]=(c[ma>>2]|0)+-1;na=na+136|0;c[i+16>>2]=c[na>>2];c[na>>2]=i}if(!o)i=t;else{i=0;j=o;oa=2353;break c}}q=1073741824/((c[w+32>>2]|0)>>>0)|0;r=q+1|0;o=w+36|0;l=t;while(1){s=l+-1|0;if((s|0)!=(r|0)){if(s>>>0<2)l=0;else{l=l+-3|0;l=l-((l>>>0)%(((((c[o>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(q|0)?3:2)+l|0}if((l|0)!=(s|0))break}l=s}o=c[y>>2]|0;c[o+4>>2]=c[x>>2];o=c[o+12>>2]|0;l=c[o+56>>2]|0;o=c[o+72>>2]|0;q=c[o+20>>2]|0;do if(!(b[o+28>>1]&4))oa=2344;else{if((c[q+24>>2]|0)>>>0<(c[o+24>>2]|0)>>>0){oa=2344;break}if(!(c[q+96>>2]|0))break;j=Ve(o)|0;oa=2348}while(0);do if((oa|0)==2344){j=c[q+40>>2]|0;if(j|0){oa=2353;break c}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){j=Wf(o)|0;oa=2348;break}else{j=Xf(o)|0;oa=2348;break}}while(0);if((oa|0)==2348?(oa=0,j|0):0){oa=2353;break c}a[l+52>>0]=s>>>24;a[l+53>>0]=s>>>16;a[l+54>>0]=s>>>8;a[l+55>>0]=s;b[B>>1]=4;na=A;c[na>>2]=i;c[na+4>>2]=((i|0)<0)<<31>>31;if(!i){l=m;q=pa;o=qa;i=0}else{q=c[z>>2]|0;o=c[(c[uf>>2]|0)+(C<<4)+12>>2]|0;k=c[o+16>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+28|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=c[o+32>>2]|0;if(k|0)do{l=(c[k+8>>2]|0)+44|0;if((c[l>>2]|0)==(i|0))c[l>>2]=q;k=c[k>>2]|0}while((k|0)!=0);k=C+1&255;l=m;q=pa;o=qa;i=0}break}case -119:{c[rf>>2]=0;l=c[(c[uf>>2]|0)+(c[p+8>>2]<<4)+4>>2]|0;r=c[p+4>>2]|0;t=p+12|0;q=(c[t>>2]|0)==0?0:rf;o=l+4|0;s=c[o>>2]|0;c[s+4>>2]=c[l>>2];i=c[s+8>>2]|0;J:do if(i){K:do if(r)while(1){if((c[i+64>>2]|0)==(r|0))break K;i=c[i+24>>2]|0;if(!i){oa=2373;break J}}while(0);i=$f(i,r,0)|0;if(!i)oa=2373}else oa=2373;while(0);if((oa|0)==2373){oa=0;l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,ld=c[(c[o>>2]|0)+8>>2]|0,ld|0):0){i=ld;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(r|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(s,r,0,q)|0}l=c[t>>2]|0;if(l|0?(oe=c[rf>>2]|0,c[rc>>2]=(c[rc>>2]|0)+oe,pe=pa+(l*40|0)|0,(l|0)>0):0){la=pe;la=Sv(c[la>>2]|0,c[la+4>>2]|0,oe|0,((oe|0)<0)<<31>>31|0)|0;ma=L()|0;na=pe;c[na>>2]=la;c[na+4>>2]=ma}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -118:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if((a[i>>0]|0)==1){wg(Cf,c[i+40>>2]|0);l=m;q=pa;o=qa;i=K;break d}q=c[i+40>>2]|0;l=c[q+8>>2]|0;q=c[q+64>>2]|0;o=l+4|0;r=c[o>>2]|0;c[r+4>>2]=c[l>>2];i=c[r+8>>2]|0;L:do if(i|0){M:do if(q)while(1){if((c[i+64>>2]|0)==(q|0))break M;i=c[i+24>>2]|0;if(!i)break L}while(0);i=$f(i,q,0)|0;if(i|0){oa=3855;break c}}while(0);l=l+11|0;if(a[l>>0]|0?(a[l>>0]=0,jd=c[(c[o>>2]|0)+8>>2]|0,jd|0):0){i=jd;do{if(a[i+1>>0]&16?(a[l>>0]=1,(c[i+64>>2]|0)==(q|0)):0)a[i>>0]=1;i=c[i+24>>2]|0}while((i|0)!=0)}i=zh(r,q,0,0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -117:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;c[rf>>2]=0;l=Wg(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0,rf,c[p+12>>2]|0)|0;if(l|0){oa=2406;break c}q=c[rf>>2]|0;l=i;c[l>>2]=q;c[l+4>>2]=((q|0)<0)<<31>>31;l=m;q=pa;o=qa;i=0;break}case -116:{a[Cc>>0]=(a[Cc>>0]|0)+1<<24>>24;i=nd(Cf,c[p+16>>2]|0,0,0,0)|0;a[Cc>>0]=(a[Cc>>0]|0)+-1<<24>>24;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -115:{i=c[p+4>>2]|0;l=p+16|0;if(!(c[l>>2]|0)){dh(c[(c[uf>>2]|0)+(i<<4)+12>>2]|0);c[hf>>2]=c[hf>>2]&-17;i=eh(Cf,i,mf,1)|0;c[hf>>2]=c[hf>>2]|1;na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8}else{c[rf>>2]=Cf;c[Ia>>2]=i;c[Ja>>2]=mf;c[Ka>>2]=0;l=c[l>>2]|0;c[Ne>>2]=c[(c[uf>>2]|0)+(i<<4)>>2];c[Ne+4>>2]=34585;c[Ne+8>>2]=l;l=dd(Cf,34599,Ne)|0;if(!l){oa=2424;break c}a[ob>>0]=1;c[pb>>2]=0;c[qb>>2]=0;i=nd(Cf,l,77,rf,0)|0;i=(i|0)==0?c[pb>>2]|0:i;if(!(i|c[qb>>2])){c[Oe>>2]=32306;c[Oe+4>>2]=89378;c[Oe+8>>2]=31517;Db(11,32001,Oe);i=11}do if(!(c[Ze>>2]|0)){na=l;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[l>>2]=c[af>>2];c[af>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(Cf,l);while(0);a[ob>>0]=0}switch(i|0){case 7:{oa=2424;break c}case 0:break;default:{oa=2425;break c}}l=m;q=pa;o=qa;i=0;break}case -114:{i=gh(Cf,c[p+4>>2]|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -113:{i=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+8|0,c[p+16>>2]|0,0)|0;do if(i|0){if(c[Ze>>2]|0){Vi(Cf,i);break}ma=i+32|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na)Vi(Cf,i)}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -112:{o=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+24|0,c[p+16>>2]|0,0)|0;do if(o|0){l=(c[o+12>>2]|0)+8|0;i=c[l>>2]|0;if((i|0)==(o|0)){c[l>>2]=c[o+20>>2];i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;N:do if((d[na>>0]|d[na+1>>0]<<8)&16?(qe=c[o+32>>2]|0,qe|0):0){if(c[Ze>>2]|0){Xd(Cf,qe);break}i=qe;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[qe>>2]=c[af>>2];c[af>>2]=qe;break N}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](qe);break}else{na=Wa[c[29352>>2]&127](qe)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](qe);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}O:do if(i|0){while(1){l=c[i+20>>2]|0;if((l|0)==(o|0))break;if(!l)break O;else i=l}c[i+20>>2]=c[o+20>>2]}while(0);i=c[o+36>>2]|0;if(i|0)ni(Cf,i);i=c[o+40>>2]|0;if(i|0)ri(Cf,i);i=c[o+16>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);na=o+55|0;P:do if((d[na>>0]|d[na+1>>0]<<8)&16?(re=c[o+32>>2]|0,re|0):0){if(c[Ze>>2]|0){Xd(Cf,re);break}i=re;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[re>>2]=c[af>>2];c[af>>2]=re;break P}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](re);break}else{na=Wa[c[29352>>2]&127](re)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](re);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,o);break}na=o;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[o>>2]=c[af>>2];c[af>>2]=o;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K;break}case -110:{x=mi((c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+12>>2]|0)+40|0,c[p+16>>2]|0,0)|0;if(!x){l=m;q=pa;o=qa;i=K}else{q=c[x+20>>2]|0;Q:do if((q|0)==(c[x+24>>2]|0)){w=x+4|0;t=c[w>>2]|0;r=c[q+20>>2]|0;if(!r){l=q+12|0;i=q+16|0}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[q+8>>2]|0)>>>0)|0;l=r+(i<<3)|0;i=r+(i<<3)+4|0}l=c[l>>2]|0;R:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break R;if(!l){i=59292;break}}}while(0);i=(c[i+8>>2]|0)+68|0;while(1){na=c[i>>2]|0;l=na+32|0;if((na|0)==(x|0))break;else i=l}c[i>>2]=c[l>>2];Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[w>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;S:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;T:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}U:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break U}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break S}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}i=x;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[x>>2]=c[af>>2];c[af>>2]=x;break Q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else{Xi(Cf,c[x+28>>2]|0);i=c[x>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+4>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=c[x+12>>2]|0;if(i|0)ni(Cf,i);r=c[x+16>>2]|0;V:do if(r|0){q=r+4|0;i=c[r>>2]|0;if((c[q>>2]|0)>0){o=0;do{i=c[i+(o<<3)>>2]|0;W:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=o+1|0;i=c[r>>2]|0}while((o|0)<(c[q>>2]|0))}X:do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}l=i;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[i>>2]=c[af>>2];c[af>>2]=i;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,r);break}i=r;do if((c[_e>>2]|0)>>>0<=i>>>0){if((c[$e>>2]|0)>>>0<=i>>>0)break;c[r>>2]=c[af>>2];c[af>>2]=r;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{na=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(c[Ze>>2]|0){Xd(Cf,x);break}na=x;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){c[x>>2]=c[af>>2];c[af>>2]=x;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{na=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}while(0);c[hf>>2]=c[hf>>2]|1;l=m;q=pa;o=qa;i=K}break}case -109:{w=c[p+8>>2]|0;C=c[p+4>>2]|0;D=pa+(C*40|0)|0;i=c[(c[uf>>2]|0)+(e[p+2>>1]<<4)+4>>2]|0;x=(c[p+16>>2]|0)+4|0;E=pa+((c[p+12>>2]|0)*40|0)|0;na=(c[E>>2]|0)+1|0;z=c[i+4>>2]|0;y=z+4|0;B=(c[y>>2]|0)+32|0;A=c[B>>2]|0;B=c[B+4>>2]|0;c[y>>2]=c[i>>2];c[Td>>2]=z;c[Dc>>2]=c[z>>2];i=c[z+44>>2]|0;c[Ec>>2]=i;c[Fc>>2]=na;c[Jc>>2]=0;c[Kc>>2]=0;c[Gc>>2]=0;c[Gc+4>>2]=0;c[Gc+8>>2]=0;c[Gc+12>>2]=0;c[Gc+16>>2]=0;c[Mc>>2]=Yd;c[Lc>>2]=0;c[Nc>>2]=100;c[Oc>>2]=1e9;c[Pc>>2]=0;a[Qc>>0]=0;a[Rc>>0]=1;Y:do if(i){i=i>>>3;q=i+1|0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)oa=2649}else{o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0<=i>>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](o)|0;if(i){l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else oa=2649}if((oa|0)==2649){c[Jc>>2]=0;c[Hc>>2]=1;oa=2710;break}gw(i|0,0,q|0)|0;c[Jc>>2]=i;t=z+32|0;q=c[t>>2]|0;if((c[14813]|0)>=(q|0)?(se=c[14819]|0,(se|0)!=0):0){c[14819]=c[se>>2];na=c[14820]|0;c[14820]=na+-1;c[14821]=(na|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0>>0)c[14986]=q;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0){c[14983]=i;i=se}else i=se}else oa=2656;Z:do if((oa|0)==2656){oa=0;na=Sv(q|0,((q|0)<0)<<31>>31|0,-1,-1)|0;ma=L()|0;_:do if(!(ma>>>0>0|(ma|0)==0&na>>>0>2147483390)){do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;if(!i)break _}else{l=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0>>0)c[14985]=q;i=59064;o=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i)break _;l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);l=Wa[c[29352>>2]&127](i)|0;if((c[14986]|0)>>>0>>0)c[14986]=q;l=(c[14980]|0)+l|0;c[14980]=l;if(l>>>0<=(c[14984]|0)>>>0)break Z;c[14984]=l;break Z}while(0);c[Kc>>2]=0;c[Hc>>2]=1;break Y}while(0);c[Kc>>2]=i;i=(1073741824/((c[t>>2]|0)>>>0)|0)+1|0;if(i>>>0<=(c[Ec>>2]|0)>>>0){na=(c[Jc>>2]|0)+(i>>>3)|0;a[na>>0]=1<<(i&7)|d[na>>0]}c[Ic>>2]=35261;o=z+12|0;s=c[(c[o>>2]|0)+56>>2]|0;si(Td,1,d[s+33>>0]<<16|d[s+32>>0]<<24|d[s+34>>0]<<8|d[s+35>>0],d[s+37>>0]<<16|d[s+36>>0]<<24|d[s+38>>0]<<8|d[s+39>>0]);c[Ic>>2]=0;s=z+17|0;if(!(a[s>>0]|0)){na=c[(c[o>>2]|0)+56>>2]|0;if(d[na+65>>0]<<16|d[na+64>>0]<<24|d[na+66>>0]<<8|d[na+67>>0]|0)ti(Td,35322,Re)}else{if((w|0)>0){i=0;l=0;do{na=c[x+(i<<2)>>2]|0;l=(l|0)<(na|0)?na:l;i=i+1|0}while((i|0)!=(w|0))}else l=0;i=c[(c[o>>2]|0)+56>>2]|0;i=d[i+53>>0]<<16|d[i+52>>0]<<24|d[i+54>>0]<<8|d[i+55>>0];if((l|0)!=(i|0)){c[Qe>>2]=l;c[Qe+4>>2]=i;ti(Td,35277,Qe)}}l=(c[y>>2]|0)+32|0;ma=l;na=c[ma+4>>2]|0;i=l;c[i>>2]=c[ma>>2]&-2097153;c[i+4>>2]=na;i=c[Fc>>2]|0;if((w|0)>0&(i|0)!=0){r=0;do{o=x+(r<<2)|0;q=c[o>>2]|0;if(q){if((q|0)>1&(a[s>>0]|0)!=0){i=eg(c[Td>>2]|0,q,rf,Hd)|0;$:do if((i|0)<7){switch(i|0){case 0:break;default:{oa=2689;break $}}i=a[rf>>0]|0;l=c[Hd>>2]|0;if(i<<24>>24==1&(l|0)==0)break;c[Te>>2]=q;c[Te+4>>2]=1;c[Te+8>>2]=0;c[Te+12>>2]=i&255;c[Te+16>>2]=l;ti(Td,35625,Te)}else{if((i|0)<3082)switch(i|0){case 7:break;default:{oa=2689;break $}}else switch(i|0){case 3082:break;default:{oa=2689;break $}}c[Hc>>2]=1;oa=2689}while(0);if((oa|0)==2689){oa=0;c[Se>>2]=q;ti(Td,35596,Se)}i=c[o>>2]|0}else i=q;ui(Td,i,ee,-1,2147483647)|0;i=c[Fc>>2]|0}r=r+1|0}while((r|0)<(w|0)&(i|0)!=0);l=(c[y>>2]|0)+32|0}na=l;c[na>>2]=A;c[na+4>>2]=B;if((i|0)!=0&(c[Ec>>2]|0)!=0){r=z+36|0;q=1;do{l=q>>>3;o=1<<(q&7);do if(!(o&d[(c[Jc>>2]|0)+l>>0])){if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)==(q|0)?a[s>>0]|0:0)break;c[Ue>>2]=q;ti(Td,35377,Ue);if(o&d[(c[Jc>>2]|0)+l>>0]|0)oa=2704}else oa=2704;while(0);do if((oa|0)==2704){oa=0;if(q>>>0<2)i=0;else{i=q+-2|0;i=i-((i>>>0)%(((((c[r>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[t>>2]|0)>>>0)|0|0)?3:2)+i|0}if((i|0)!=(q|0))break;if(!(a[s>>0]|0))break;c[We>>2]=q;ti(Td,35399,We)}while(0);q=q+1|0}while(c[Fc>>2]|0?q>>>0<=(c[Ec>>2]|0)>>>0:0);oa=2710}else oa=2710}else oa=2710;while(0);aa:do if((oa|0)==2710?(oa=0,pd=c[Kc>>2]|0,pd|0):0){i=pd;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[pd>>2]=c[14819];c[14819]=pd;na=(c[14820]|0)+1|0;c[14820]=na;c[14821]=(na|0)<(c[14815]|0)&1;break aa}else{i=Wa[c[29352>>2]&127](pd)|0;break}else i=Wa[c[29352>>2]&127](pd)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{na=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}}while(0);i=c[Jc>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!(c[Hc>>2]|0))r=c[Gc>>2]|0;else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ba:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ba}o=l;if((c[i+304>>2]|0)>>>0<=o>>>0){if((c[i+308>>2]|0)>>>0<=o>>>0)break;na=i+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break ba}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;r=(c[Gc>>2]|0)+1|0;c[Gc>>2]=r}q=(r|0)==0;if(!q){i=c[Mc>>2]|0;if(((i|0)!=0?(a[i+(c[Pc>>2]|0)>>0]=0,(c[Oc>>2]|0)!=0):0)?(a[Rc>>0]&4)==0:0)i=$d(Lc)|0;else oa=2756}else{if(a[Rc>>0]&4){i=c[Lc>>2]|0;l=c[Mc>>2]|0;ca:do if(l|0){do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break ca}o=l;if((c[i+304>>2]|0)>>>0>o>>>0)break;if((c[i+308>>2]|0)>>>0<=o>>>0)break;oa=i+300|0;c[l>>2]=c[oa>>2];c[oa>>2]=l;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);a[Rc>>0]=a[Rc>>0]&-5}c[Nc>>2]=0;c[Pc>>2]=0;c[Mc>>2]=0;oa=2756}if((oa|0)==2756){oa=0;i=c[Mc>>2]|0}l=pa+(C*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=1;else Dg(D);if(!q){if(!i){l=p;j=h;i=zf;oa=3892;break a}la=r+-1|0;ma=E;la=Tv(c[ma>>2]|0,c[ma+4>>2]|0,la|0,((la|0)<0)<<31>>31|0)|0;ma=L()|0;na=E;c[na>>2]=la;c[na+4>>2]=ma;yc(D,i,-1,1,90)|0}if((b[l>>1]&2)!=0?(a[pa+(C*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(D,sd)|0;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -108:{i=c[p+4>>2]|0;l=c[p+8>>2]|0;if((b[pa+(i*40|0)+8>>1]&16)==0?hh(pa+(i*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}t=c[pa+(i*40|0)+16>>2]|0;s=pa+(l*40|0)|0;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;da:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2779;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break da}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2779}while(0);if((oa|0)==2779){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 41:{l=c[p+4>>2]|0;B=pa+(l*40|0)|0;C=pa+(l*40|0)+8|0;i=b[C>>1]|0;do if(i&16){D=c[pa+(l*40|0)+16>>2]|0;E=D+26|0;A=b[E>>1]|0;i=A&65535;if(!(i&2)){if(!(i&1)){z=D+8|0;i=c[z>>2]|0;gw(Hd|0,0,160)|0;if(!i)i=0;else{l=0;while(1){na=i+8|0;o=i;i=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ea:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ea}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Nb>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0;if(!i){i=l;break}}}w=1;do{o=c[Hd+(w<<2)>>2]|0;if(o)if(!i)i=o;else{l=rf;fa:while(1){t=i;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[l+8>>2]=o;l=c[o+8>>2]|0;if(!l){l=o;break fa}else{na=o;o=l;l=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0>>0){c[l+8>>2]=i;l=i}i=c[i+8>>2]|0;if(!i){i=o;break}}c[l+8>>2]=i;i=c[Mb>>2]|0}w=w+1|0}while((w|0)!=40);c[z>>2]=i}b[E>>1]=A|3}s=D+8|0;i=c[s>>2]|0;if(!i){i=b[C>>1]|0;break}w=i;t=c[w>>2]|0;w=c[w+4>>2]|0;na=c[i+8>>2]|0;c[s>>2]=na;if(!na){i=c[D>>2]|0;if(i|0){r=D+4|0;do{l=i;i=c[i>>2]|0;o=c[r>>2]|0;do if(!o)oa=2830;else{if(c[o+480>>2]|0){Xd(o,l);break}q=l;if((c[o+304>>2]|0)>>>0>q>>>0){oa=2830;break}if((c[o+308>>2]|0)>>>0<=q>>>0){oa=2830;break}na=o+300|0;c[l>>2]=c[na>>2];c[na>>2]=l}while(0);do if((oa|0)==2830){oa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0)}while((i|0)!=0)}c[D>>2]=0;b[D+24>>1]=0;c[s>>2]=0;c[D+12>>2]=0;c[D+20>>2]=0;b[E>>1]=1}l=c[p+12>>2]|0;i=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){o=i;c[o>>2]=t;c[o+4>>2]=w;b[l>>1]=4;l=m;o=pa;i=K;oa=21;break d}else{Pg(i,t,w);l=m;o=pa;i=K;oa=21;break d}}while(0);if(!(i&9216)){b[C>>1]=1;i=K;oa=20;break d}else{Dg(B);i=K;oa=20;break d}}case 42:{l=c[p+4>>2]|0;i=pa+((c[p+12>>2]|0)*40|0)|0;J=c[p+16>>2]|0;if((b[pa+(l*40|0)+8>>1]&16)==0?hh(pa+(l*40|0)|0)|0:0){l=p;j=h;i=zf;oa=3892;break a}I=pa+(l*40|0)+16|0;if(J){B=c[I>>2]|0;H=i;F=c[H>>2]|0;H=c[H+4>>2]|0;C=B+28|0;if((c[C>>2]|0)!=(J|0)){D=B+8|0;l=c[D>>2]|0;if(l|0){A=B+20|0;E=B+26|0;if(!(b[E>>1]&1)){gw(Hd|0,0,160)|0;z=l;l=0;do{na=z+8|0;o=z;z=c[na>>2]|0;c[na>>2]=0;if(!l)l=Hd;else{y=0;x=Hd;while(1){q=rf;ga:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=o;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[q+8>>2]=o;q=c[o+8>>2]|0;if(!q){q=o;break ga}else{na=o;o=q;q=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0>>0){c[q+8>>2]=l;q=l}l=c[l+8>>2]|0;if(!l){l=o;break}}c[q+8>>2]=l;o=c[Ub>>2]|0;c[x>>2]=0;y=y+1|0;q=Hd+(y<<2)|0;l=c[q>>2]|0;if(!l){l=q;break}else x=q}}c[l>>2]=o;l=c[Hd>>2]|0}while((z|0)!=0);x=1;do{q=c[Hd+(x<<2)>>2]|0;do if(q){if(!l){l=q;break}o=rf;ha:while(1){w=l;t=c[w>>2]|0;w=c[w+4>>2]|0;while(1){s=q;r=c[s>>2]|0;s=c[s+4>>2]|0;if(!((w|0)>(s|0)|(w|0)==(s|0)&t>>>0>r>>>0))break;c[o+8>>2]=q;o=c[q+8>>2]|0;if(!o){o=q;break ha}else{na=q;q=o;o=na}}if((w|0)<(s|0)|(w|0)==(s|0)&t>>>0>>0){c[o+8>>2]=l;o=l}l=c[l+8>>2]|0;if(!l){l=q;break}}c[o+8>>2]=l;l=c[ic>>2]|0}while(0);x=x+1|0}while((x|0)!=40)}o=c[A>>2]|0;ia:do if(!o){s=A;oa=2889}else{while(1){x=o+8|0;r=o+12|0;o=c[r>>2]|0;if(!o)break;wi(o,Hd,Td);c[r>>2]=0;o=rf;w=c[Hd>>2]|0;ja:do{t=w;s=c[t>>2]|0;t=c[t+4>>2]|0;while(1){r=l;q=c[r>>2]|0;r=c[r+4>>2]|0;if(!((t|0)>(r|0)|(t|0)==(r|0)&s>>>0>q>>>0))break;c[o+8>>2]=l;o=c[l+8>>2]|0;if(!o){o=l;l=w;break ja}else{na=l;l=o;o=na}}if((t|0)<(r|0)|(t|0)==(r|0)&s>>>0>>0){c[o+8>>2]=w;o=w}w=c[w+8>>2]|0}while((w|0)!=0);c[o+8>>2]=l;l=c[cc>>2]|0;o=c[x>>2]|0;if(!o){s=x;oa=2889;break ia}}na=l+8|0;o=c[na>>2]|0;c[rf>>2]=o;c[na>>2]=0;c[l+12>>2]=0;if(!o){c[r>>2]=l;break}q=1;while(1){na=o+8|0;c[rf>>2]=c[na>>2];c[o+12>>2]=l;l=xi(rf,q)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l)break;else{na=o;q=q+1|0;o=l;l=na}}c[r>>2]=o}while(0);ka:do if((oa|0)==2889){oa=0;t=B+24|0;q=b[t>>1]|0;la:do if(q<<16>>16){na=B+16|0;o=c[na>>2]|0;b[t>>1]=q+-1<<16>>16;c[na>>2]=o+16;c[s>>2]=o;if(!o)break ka}else{r=c[B+4>>2]|0;ma:do if(c[r+272>>2]|0){if(!(a[r+81>>0]|0))oa=2900}else{do if((e[r+276>>1]|0)>=1016){q=r+300|0;o=c[q>>2]|0;if(o|0){c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}q=r+296|0;o=c[q>>2]|0;if(!o){o=r+292|0;break}else{c[q>>2]=c[o>>2];oa=r+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=2901;break ma}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;oa=2900}while(0);if((oa|0)==2900){o=_d(r,1016,0)|0;oa=2901}do if((oa|0)==2901){oa=0;if(!o)break;c[o>>2]=c[B>>2];c[B>>2]=o;na=o+8|0;b[t>>1]=62;c[B+16>>2]=o+24;c[s>>2]=na;o=na;break la}while(0);c[s>>2]=0;break ka}while(0);na=o;c[na>>2]=0;c[na+4>>2]=0;c[o+8>>2]=0;na=l+8|0;q=c[na>>2]|0;c[rf>>2]=q;c[na>>2]=0;c[l+12>>2]=0;if(q){r=1;while(1){na=q+8|0;c[rf>>2]=c[na>>2];c[q+12>>2]=l;l=xi(rf,r)|0;c[na>>2]=l;l=c[rf>>2]|0;if(!l){l=q;break}else{na=q;r=r+1|0;q=l;l=na}}}c[o+12>>2]=l}while(0);c[D>>2]=0;c[B+12>>2]=0;b[E>>1]=b[E>>1]|1}c[C>>2]=J}l=c[B+20>>2]|0;if(l|0)do{o=c[l+12>>2]|0;if(o|0)do{r=o;q=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)<(H|0)|(r|0)==(H|0)&q>>>0>>0)o=o+8|0;else{if(!((r|0)>(H|0)|(r|0)==(H|0)&q>>>0>F>>>0)){i=K;oa=28;break d}o=o+12|0}o=c[o>>2]|0}while((o|0)!=0);l=c[l+8>>2]|0}while((l|0)!=0);if((J|0)<=-1){l=m;q=pa;o=qa;i=K;break d}}t=c[I>>2]|0;s=i;r=c[s>>2]|0;s=c[s+4>>2]|0;q=t+24|0;l=b[q>>1]|0;if(l<<16>>16){na=t+16|0;i=c[na>>2]|0;b[q>>1]=l+-1<<16>>16;c[na>>2]=i+16;if(!i){l=m;q=pa;o=qa;i=K;break d}}else{o=c[t+4>>2]|0;na:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))oa=2933;else{l=m;q=pa;o=qa;i=K;break d}else{do if((e[o+276>>1]|0)>=1016){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break na}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;oa=2933}while(0);if((oa|0)==2933){oa=0;i=_d(o,1016,0)|0}if(!i){l=m;q=pa;o=qa;i=K;break d}c[i>>2]=c[t>>2];c[t>>2]=i;b[q>>1]=62;c[t+16>>2]=i+24;i=i+8|0}l=i;c[l>>2]=r;c[l+4>>2]=s;c[i+8>>2]=0;l=t+12|0;o=c[l>>2]|0;if(!o)c[t+8>>2]=i;else{na=o;ma=c[na+4>>2]|0;if(!((ma|0)<(s|0)|((ma|0)==(s|0)?(c[na>>2]|0)>>>0>>0:0))){na=t+26|0;b[na>>1]=b[na>>1]&-2}c[o+8>>2]=i}c[l>>2]=i;l=m;q=pa;o=qa;i=K;break}case 45:{z=c[p+16>>2]|0;s=c[p+12>>2]|0;t=pa+(s*40|0)|0;if(b[p+2>>1]|0?(rd=c[z+20>>2]|0,od=c[nc>>2]|0,od|0):0){i=od;do{if((c[i+28>>2]|0)==(rd|0)){l=m;q=pa;o=qa;i=K;break d}i=c[i+4>>2]|0}while((i|0)!=0)}if((c[La>>2]|0)>=(c[Ma>>2]|0)){oa=2968;break c}o=pa+(s*40|0)+8|0;if(!(b[o>>1]&16)){q=z+12|0;r=c[q>>2]|0;w=r+(c[z+8>>2]|0)+((r|0)==0&1)|0;y=z+4|0;r=(r<<2)+80+(((c[y>>2]|0)+7|0)/8|0)+(w*40|0)|0;l=((r|0)<0)<<31>>31;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=2958;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0>>0|(0==(l|0)?(e[Xc>>1]|0)>>>0>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;x=i;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=2958}while(0);if((oa|0)==2958)x=_d(Cf,r,l)|0;if(!x){l=p;j=h;i=zf;oa=3892;break a}gw(x|0,0,r|0)|0;if(!((b[o>>1]&9216)==0?!(c[pa+(s*40|0)+24>>2]|0):0))Cg(t);b[o>>1]=1040;c[pa+(s*40|0)+16>>2]=x;c[pa+(s*40|0)+12>>2]=r;c[pa+(s*40|0)+36>>2]=93;c[x>>2]=f;c[x+60>>2]=w;r=c[q>>2]|0;c[x+64>>2]=r;c[x+48>>2]=(p-m|0)/20|0;c[x+16>>2]=c[xd>>2];c[x+56>>2]=c[va>>2];c[x+20>>2]=c[oc>>2];c[x+44>>2]=c[Ib>>2];c[x+8>>2]=c[le>>2];c[x+52>>2]=c[wb>>2];c[x+28>>2]=c[z+20>>2];m=x+80|0;l=m+(w*40|0)|0;if((l|0)==(m|0)){o=x;p=m;q=m;m=y;l=x;i=r}else{i=m;do{b[i+8>>1]=128;c[i+32>>2]=Cf;i=i+40|0}while((i|0)!=(l|0));o=x;p=m;q=m;m=y;l=x;i=r}}else{l=c[pa+(s*40|0)+16>>2]|0;q=l+80|0;o=l;p=q;m=z+4|0;i=c[z+12>>2]|0}c[La>>2]=(c[La>>2]|0)+1;c[o+4>>2]=c[nc>>2];na=zb;pa=c[na+4>>2]|0;oa=o+32|0;c[oa>>2]=c[na>>2];c[oa+4>>2]=pa;c[o+68>>2]=c[rc>>2];c[o+72>>2]=c[(c[f>>2]|0)+100>>2];c[o+40>>2]=c[Hb>>2];c[Hb>>2]=0;c[rc>>2]=0;c[nc>>2]=l;c[xd>>2]=p;p=c[o+60>>2]|0;c[va>>2]=p;c[Ib>>2]=c[o+64>>2]&65535;p=q+(p*40|0)|0;c[oc>>2]=p;p=p+(i<<2)|0;c[o+24>>2]=p;gw(p|0,0,((c[m>>2]|0)+7|0)/8|0|0)|0;p=c[z>>2]|0;c[le>>2]=p;c[wb>>2]=c[m>>2];l=p;p=p+-20|0;o=q;i=K;oa=21;break}case -107:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=c[nc>>2]|0;l=c[o+16>>2]|0;o=(c[(c[o+8>>2]|0)+((c[o+48>>2]|0)*20|0)+4>>2]|0)+(c[p+4>>2]|0)|0;q=l+(o*40|0)|0;r=i+8|0;if(b[r>>1]&9216){mh(i,q,4096);l=m;q=pa;o=qa;i=K;break d};c[i>>2]=c[q>>2];c[i+4>>2]=c[q+4>>2];c[i+8>>2]=c[q+8>>2];c[i+12>>2]=c[q+12>>2];c[i+16>>2]=c[q+16>>2];if(!(b[l+(o*40|0)+8>>1]&2048)){b[r>>1]=b[r>>1]&-7169|4096;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case -106:{if(!((c[Sc>>2]&524288|0)==0&0==0)){o=c[p+8>>2]|0;q=Na;o=Sv(c[q>>2]|0,c[q+4>>2]|0,o|0,((o|0)<0)<<31>>31|0)|0;q=L()|0;l=Na;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}i=c[p+8>>2]|0;l=((i|0)<0)<<31>>31;if(!(c[p+4>>2]|0)){o=Oa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Oa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}else{o=Pa;o=Sv(c[o>>2]|0,c[o+4>>2]|0,i|0,l|0)|0;q=L()|0;l=Pa;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}}case 46:if(!(c[p+4>>2]|0)){na=Oa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}else{na=Pa;if(!((c[na>>2]|0)==0&(c[na+4>>2]|0)==0)){l=m;q=pa;o=qa;i=K;break d}na=Na;if((c[na>>2]|0)==0&(c[na+4>>2]|0)==0){i=K;oa=28;break d}else{l=m;q=pa;o=qa;i=K;break d}}case -105:{i=c[nc>>2]|0;if(!i)l=pa;else{while(1){l=c[i+4>>2]|0;if(!l)break;else i=l}l=c[i+16>>2]|0}o=c[p+4>>2]|0;t=l+(o*40|0)|0;r=l+(o*40|0)+8|0;i=b[r>>1]|0;q=i&65535;do if(!(q&4)){if(q&8|0){l=Mg(+g[t>>3])|0;o=L()|0;break}if(!(q&18)){l=0;o=0}else{l=Ng(a[l+(o*40|0)+10>>0]|0,c[l+(o*40|0)+12>>2]|0,c[l+(o*40|0)+16>>2]|0)|0;o=L()|0;i=b[r>>1]|0}}else{o=t;l=c[o>>2]|0;o=c[o+4>>2]|0}while(0);s=t;c[s>>2]=l;c[s+4>>2]=o;b[r>>1]=i&15904|4;i=c[p+8>>2]|0;r=pa+(i*40|0)|0;s=pa+(i*40|0)+8|0;q=b[s>>1]|0;l=q&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[r>>3])|0;o=L()|0;i=q;break}if(!(l&18)){l=0;o=0;i=q}else{l=Ng(a[pa+(i*40|0)+10>>0]|0,c[pa+(i*40|0)+12>>2]|0,c[pa+(i*40|0)+16>>2]|0)|0;o=L()|0;i=b[s>>1]|0}}else{o=r;l=c[o>>2]|0;o=c[o+4>>2]|0;i=q}while(0);na=r;c[na>>2]=l;c[na+4>>2]=o;b[s>>1]=i&15904|4;na=t;ma=c[na+4>>2]|0;if((ma|0)<(o|0)|((ma|0)==(o|0)?(c[na>>2]|0)>>>0>>0:0)){q=t;c[q>>2]=l;c[q+4>>2]=o;l=m;q=pa;o=qa;i=K}else{l=m;q=pa;o=qa;i=K}break}case 47:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[p+12>>2]|0;na=Tv(l|0,o|0,na|0,((na|0)<0)<<31>>31|0)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -104:{o=c[p+4>>2]|0;q=c[p+12>>2]|0;na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;o=pa+(o*40|0)|0;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((o|0)<0|(o|0)==0&l>>>0<1)?(ud=pa+(q*40|0)|0,td=c[ud>>2]|0,ud=c[ud+4>>2]|0,na=(ud|0)>0|(ud|0)==0&td>>>0>0,td=na?td:0,ud=na?ud:0,na=Tv(-1,2147483647,l|0,o|0)|0,ma=L()|0,!(((ud|0)>-1|(ud|0)==-1&td>>>0>4294967295)&((ma|0)<(ud|0)|(ma|0)==(ud|0)&na>>>0>>0))):0){o=Sv(td|0,ud|0,l|0,o|0)|0;q=L()|0;l=i;c[l>>2]=o;c[l+4>>2]=q;l=m;q=pa;o=qa;i=K;break d}l=i;c[l>>2]=-1;c[l+4>>2]=-1;l=m;q=pa;o=qa;i=K;break}case 48:{i=pa+((c[p+4>>2]|0)*40|0)|0;o=i;l=c[o>>2]|0;o=c[o+4>>2]|0;if(!((l|0)==0&(o|0)==0))if((o|0)>0|(o|0)==0&l>>>0>0){na=Sv(l|0,o|0,-1,-1)|0;oa=L()|0;c[i>>2]=na;c[i+4>>2]=oa;i=K;oa=28}else{i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case 49:{i=pa+((c[p+4>>2]|0)*40|0)|0;na=i;ma=c[na>>2]|0;na=c[na+4>>2]|0;l=Sv(ma|0,na|0,-1,-1)|0;o=L()|0;if(!((ma|0)==0&(na|0)==-2147483648)?(na=i,c[na>>2]=l,c[na+4>>2]=o,(l|0)==0&(o|0)==0):0){i=K;oa=28}else{l=m;q=pa;o=qa;i=K}break}case -102:case -103:{o=b[p+2>>1]|0;q=o&65535;l=(q<<2)+68|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3026;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3026}while(0);if((oa|0)==3026)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i+8>>2]=0;s=i+28+(q<<2)|0;c[i>>2]=s;b[s+8>>1]=1;c[s+32>>2]=Cf;c[s+24>>2]=0;s=p+16|0;c[i+4>>2]=c[s>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;a[i+24>>0]=0;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[s>>2]=i;a[p>>0]=-101;s=i;oa=3029;break}case -101:{s=c[p+16>>2]|0;oa=3029;break}case -99:case -100:{o=c[p+4>>2]|0;r=pa+(o*40|0)|0;q=p+12|0;i=c[q>>2]|0;if(!i){l=c[p+16>>2]|0;c[Qa>>2]=0;c[Qa+4>>2]=0;c[Qa+8>>2]=0;c[Qa+12>>2]=0;c[Qa+16>>2]=0;ea=Hd;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));b[Sa>>1]=1;i=pa+(o*40|0)+32|0;c[Ta>>2]=c[i>>2];c[rf>>2]=Hd;c[Ua>>2]=r;c[Va>>2]=l;ab[c[l+20>>2]&127](rf);do if((c[pa+(o*40|0)+24>>2]|0)>0){l=c[i>>2]|0;i=c[pa+(o*40|0)+20>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,i);break}na=i;if((c[l+304>>2]|0)>>>0<=na>>>0?(c[l+308>>2]|0)>>>0>na>>>0:0){na=l+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=r;l=Hd;fa=ea+40|0;do{c[ea>>2]=c[l>>2];ea=ea+4|0;l=l+4|0}while((ea|0)<(fa|0));o=r;l=c[rb>>2]|0}else{l=pa+(i*40|0)|0;o=c[p+16>>2]|0;c[rf>>2]=0;c[rf+4>>2]=0;c[rf+8>>2]=0;c[rf+12>>2]=0;c[rf+16>>2]=0;c[rf+20>>2]=0;c[rf+24>>2]=0;c[rf+28>>2]=0;i=pa+(i*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(l);c[rf>>2]=l;c[tb>>2]=r;c[ub>>2]=o;ab[c[o+24>>2]&127](rf);o=pa+((c[q>>2]|0)*40|0)|0;l=c[vb>>2]|0}if(l|0){oa=3073;break c}l=o+8|0;i=b[l>>1]|0;if((i&2)!=0?(a[o+10>>0]|0)!=sd<<24>>24:0){Ig(o,sd)|0;i=b[l>>1]|0}l=i&65535;if(l&18){i=c[o+12>>2]|0;if(l&16384)i=(c[o>>2]|0)+i|0;if((i|0)>(c[(c[o+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case 6:{c[rf>>2]=0;c[Tc>>2]=-1;c[Uc>>2]=-1;i=Nd(Cf,c[p+4>>2]|0,c[p+8>>2]|0,Uc,Tc)|0;switch(i|0){case 0:{l=c[rf>>2]|0;break}case 5:{c[rf>>2]=1;l=1;break}default:{oa=3094;break c}}q=c[p+12>>2]|0;i=pa+(q*40|0)|0;o=((l|0)<0)<<31>>31;q=pa+(q*40|0)+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Uc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);i=i+40|0;l=c[Tc>>2]|0;o=((l|0)<0)<<31>>31;q=i+8|0;if(!(b[q>>1]&9216)){na=i;c[na>>2]=l;c[na+4>>2]=o;b[q>>1]=4}else Pg(i,l,o);l=m;q=pa;o=qa;i=0;break}case 7:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216)){b[l>>1]=4;B=i}else{lh(i)|0;B=i}i=c[p+12>>2]|0;x=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=x+4|0;z=c[c[s>>2]>>2]|0;o=a[z+5>>0]|0;A=o&255;i=(i|0)==-1?A:i;if((d[z+16>>0]|0)<=2){if((c[c[z+64>>2]>>2]|0)!=0?(na=z+72|0,ma=c[na+4>>2]|0,(ma|0)>0|(ma|0)==0&(c[na>>2]|0)>>>0>0):0)oa=3101}else oa=3101;if((oa|0)==3101){oa=0;i=A}if(!(a[z+15>>0]|0))l=c[z+168>>2]|0;else l=59952;if((i|0)==5)if(((l|0)!=0?((Eu(l)|0)&1073741823|0)!=0:0)?(wd=c[c[z+60>>2]>>2]|0,(a[z+13>>0]|0)==0):0)if(!(a[z+4>>0]|0))if((c[wd>>2]|0)>1?(c[wd+52>>2]|0)!=0:0){y=5;oa=3111}else{l=A;i=K}else{y=5;oa=3111}else{l=A;i=K}else{y=i;oa=3111}oa:do if((oa|0)==3111){oa=0;if((y|0)!=(A|0)){i=o<<24>>24==5;w=(y|0)==5;if(i|w){if(!(a[gd>>0]|0)){oa=3115;break c}if((c[Ha>>2]|0)>1){oa=3115;break c}if(!i){if(o<<24>>24==4)jh(z,2)|0;if(K|0){l=y;i=K;break}}else{o=z+216|0;i=c[o>>2]|0;if(!i){c[rf>>2]=0;l=z+17|0;i=a[l>>0]|0;pa:do switch(i<<24>>24){case 0:case 5:{do if(!(a[z+13>>0]|0)){i=c[z+60>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,1)|0;if(!i){i=a[l>>0]|0;break}else{l=y;break oa}}while(0);if(i<<24>>24==5)break pa;a[l>>0]=1;break}default:{}}while(0);i=c[z>>2]|0;i=Za[c[i+32>>2]&127](i,c[z+220>>2]|0,0,rf)|0;if((i|0)==0&(c[rf>>2]|0)!=0)i=Uf(z)|0;if(i|0){l=y;break}i=c[o>>2]|0;if(i|0){r=l;oa=3130}}else{r=z+17|0;oa=3130}do if((oa|0)==3130){oa=0;switch(a[r>>0]|0){case 0:case 1:case 2:case 3:case 5:{q=z+13|0;do if(!(a[q>>0]|0)){l=z+60|0;i=c[l>>2]|0;i=Xa[c[(c[i>>2]|0)+28>>2]&255](i,4)|0;if(!i){i=c[o>>2]|0;break}l=c[l>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[q>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);a[r>>0]=4;break}default:{}}i=Pf(i,Cf,d[z+11>>0]|0,c[z+152>>2]|0,c[z+208>>2]|0)|0;c[o>>2]=0;if(!i)break;if(a[z+4>>0]|0){l=y;break oa}l=c[z+60>>2]|0;o=c[l>>2]|0;if(!o){l=y;break oa}if(!(a[z+13>>0]|0))Xa[c[o+32>>2]&255](l,1)|0;if((a[r>>0]|0)==5){l=y;break oa}a[r>>0]=1;l=y;break oa}while(0);jh(z,y)|0}l=c[s>>2]|0;t=l+22|0;i=b[t>>1]|0;b[t>>1]=w?i&-33:i|32;i=Zb(x,0,0)|0;qa:do if(!i){l=l+12|0;r=c[(c[l>>2]|0)+56>>2]|0;s=r+18|0;na=a[s>>0]|0;q=w?2:1;if(na<<24>>24==q<<24>>24?(a[r+19>>0]|0)==na<<24>>24:0){i=0;break}i=Zb(x,2,0)|0;if(i|0)break;l=c[(c[l>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;do if(!(b[l+28>>1]&4))oa=3159;else{if((c[o+24>>2]|0)>>>0<(c[l+24>>2]|0)>>>0){oa=3159;break}if(!(c[o+96>>2]|0))break;id=Ve(l)|0;oa=3163}while(0);do if((oa|0)==3159){oa=0;i=c[o+40>>2]|0;if(i|0)break qa;if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){id=Wf(l)|0;oa=3163;break}else{id=Xf(l)|0;oa=3163;break}}while(0);if((oa|0)==3163?(oa=0,id|0):0){i=id;break}a[s>>0]=q;a[r+19>>0]=q;i=0}while(0);b[t>>1]=b[t>>1]&-33;l=y}else{l=y;i=K}}else{l=A;i=K}}while(0);o=(i|0)!=0;l=jh(z,o?A:l)|0;b[B+8>>1]=2562;if((l|0)==6){c[B+16>>2]=0;l=0}else{l=c[3664+(l<<2)>>2]|0;c[B+16>>2]=l;l=(Eu(l)|0)&1073741823}c[B+12>>2]=l;a[B+10>>0]=1;if(!hb)Ig(B,sd)|0;if(o){oa=3855;break c}else{l=m;q=pa;o=qa;i=0}break}case 8:{i=c[p+8>>2]|0;i=kh(mf,Cf,c[p+4>>2]|0,(i|0)==0?0:pa+(i*40|0)|0)|0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 59:{na=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;w=c[na+4>>2]|0;c[w+4>>2]=c[na>>2];if(a[w+17>>0]|0){x=w+44|0;t=c[x>>2]|0;y=w+12|0;r=c[(c[y>>2]|0)+56>>2]|0;r=d[r+37>>0]<<16|d[r+36>>0]<<24|d[r+38>>0]<<8|d[r+39>>0];l=((c[w+36>>2]|0)>>>0)/5|0;if(t>>>0<2){i=0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;q=l+1|0}else{q=l+1|0;i=t+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;o=1073741824/((c[w+32>>2]|0)>>>0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}s=t-r-(((l-t+r+i|0)>>>0)/(l>>>0)|0)|0;l=o+1|0;s=s+((l>>>0>>0&s>>>0>>0)<<31>>31)|0;while(1){if(s>>>0<2)i=0;else{i=s+-2|0;i=i-((i>>>0)%(q>>>0)|0)|0;i=((i+1|0)==(o|0)?3:2)+i|0}if((s|0)==(l|0)|(i|0)==(s|0))s=s+-1|0;else break}if(t>>>0>>0){oa=3182;break c}if(r){l=w+8|0;i=c[l>>2]|0;if(i){i=$f(i,0,0)|0;if(!i){i=c[l>>2]|0;if(!i)oa=3189;else{do{oa=i+1|0;a[oa>>0]=a[oa>>0]&-5;i=c[i+24>>2]|0}while((i|0)!=0);oa=3189}}}else oa=3189;if((oa|0)==3189){oa=0;i=_f(w,s,t,0)|0;if(!i){l=c[(c[y>>2]|0)+72>>2]|0;o=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[o+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[o+96>>2]|0))i=0;else i=Ve(l)|0;else oa=3194;do if((oa|0)==3194){oa=0;i=c[o+40>>2]|0;if(!i)if((c[o+148>>2]|0)>>>0>(c[o+152>>2]|0)>>>0){i=Wf(l)|0;break}else{i=Xf(l)|0;break}}while(0);na=c[(c[y>>2]|0)+56>>2]|0;ma=c[x>>2]|0;a[na+28>>0]=ma>>>24;a[na+29>>0]=ma>>>16;a[na+30>>0]=ma>>>8;a[na+31>>0]=ma}}switch(i|0){case 101:{i=0;oa=28;break}case 0:{l=m;q=pa;o=qa;break}default:{oa=3855;break c}}}else{i=0;oa=28}}else{i=0;oa=28}break}case -98:{l=c[p+8>>2]|0;if(c[p+4>>2]|0){l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|l+1&3;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=m;q=pa;o=qa;i=K;break d}i=c[$a>>2]|0;if(!i){l=m;q=pa;o=qa;i=K}else{l=l+1&3;do{na=i+149|0;ma=(d[na>>0]|d[na+1>>0]<<8)&-4|l;a[na>>0]=ma;a[na+1>>0]=ma>>8;i=c[i+8>>2]|0}while((i|0)!=0);l=m;q=pa;o=qa;i=K}break}case -97:{i=c[p+12>>2]|0;if((i&255|0)==0?!((c[Sc>>2]&1024|0)==0&0==0):0){l=m;q=pa;o=qa;i=K;break d}r=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;s=c[p+8>>2]|0;if(a[r+9>>0]|0){t=i+1&255;o=c[r+4>>2]|0;c[o+4>>2]=c[r>>2];if((c[o+76>>2]|0)!=(r|0)?b[o+22>>1]&64:0){oa=3236;break c}q=o+72|0;i=c[q>>2]|0;ra:do if(!i)oa=3222;else{l=i;do{if(((c[l>>2]|0)!=(r|0)?(c[l+4>>2]|0)==(s|0):0)?(a[l+8>>0]|0)!=t<<24>>24:0){oa=3215;break c}l=c[l+12>>2]|0}while((l|0)!=0);while(1){if((c[i+4>>2]|0)==(s|0)?(c[i>>2]|0)==(r|0):0)break ra;i=c[i+12>>2]|0;if(!i){oa=3222;break}}}while(0);if((oa|0)==3222){oa=0;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;oa=3855;break c}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;oa=3855;break c}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}na=i+8|0;a[na>>0]=0;a[na+1>>0]=0;a[na+2>>0]=0;a[na+3>>0]=0;c[i+4>>2]=s;c[i>>2]=r;c[i+12>>2]=c[q>>2];c[q>>2]=i}i=i+8|0;if((d[i>>0]|0)<(t&255)){a[i>>0]=t;l=m;q=pa;o=qa;i=0}else{l=m;q=pa;o=qa;i=0}}else{l=m;q=pa;o=qa;i=0}break}case -96:{x=c[p+16>>2]|0;s=c[Vc>>2]|0;q=(s|0)>0;if(q?(c[db>>2]|0)==0:0){i=6;oa=3268}else oa=3239;sa:do if((oa|0)==3239){oa=0;if(!x){l=m;q=pa;o=qa;i=0;break d}l=x+8|0;i=c[l>>2]|0;w=c[i>>2]|0;t=w+56|0;o=c[t>>2]|0;if(o){if(q){r=c[db>>2]|0;q=0;do{if((c[r+(q<<2)>>2]|0)==(x|0)){i=0;oa=3268;break sa}q=q+1|0}while((q|0)<(s|0))}if(!((s|0)%5|0)){o=cw(s|0,((s|0)<0)<<31>>31|0,2)|0;o=Sv(o|0,L()|0,20,0)|0;q=L()|0;i=c[db>>2]|0;ta:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;oa=3268;break sa}}else{do if(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3261;break ta}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,o,q)|0;oa=3261}else{na=i;if((c[_e>>2]|0)>>>0<=na>>>0?(c[$e>>2]|0)>>>0>na>>>0:0){if(!(q>>>0>0|((q|0)==0?o>>>0>(e[Xc>>1]|0)>>>0:0))){o=s;break}i=Zd(Cf,i,o,q)|0;oa=3261;break}i=Zd(Cf,i,o,q)|0;oa=3261}while(0);if((oa|0)==3261){if(!i){i=7;oa=3268;break}o=c[Vc>>2]|0}o=i+(o<<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[db>>2]=i;o=c[t>>2]|0;i=c[l>>2]|0}i=Wa[o&127](i)|0;if(!i){i=(c[Gd>>2]|0)+(c[Fd>>2]|0)|0;na=c[db>>2]|0;oa=c[Vc>>2]|0;c[Vc>>2]=oa+1;c[na+(oa<<2)>>2]=x;oa=x+12|0;c[oa>>2]=(c[oa>>2]|0)+1;if((i|0)!=0?(yd=c[w+80>>2]|0,(yd|0)!=0):0){c[x+20>>2]=i;i=Xa[yd&255](c[l>>2]|0,i+-1|0)|0;oa=3270}else{i=0;oa=3270}}else oa=3268}else{i=0;oa=3270}}while(0);if((oa|0)==3268){oa=0;if(x){l=x+8|0;oa=3270}}if((oa|0)==3270){oa=0;t=(c[l>>2]|0)+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;ua:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;va:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3306;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break ua}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break ua}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3306;break va}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3306}while(0);if((oa|0)==3306){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}}if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -95:{ea=rf;fa=ea+40|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));c[Wc>>2]=Cf;na=c[p+8>>2]|0;i=pa+(na*40|0)|0;c[rf>>2]=c[i>>2];c[rf+4>>2]=c[i+4>>2];c[rf+8>>2]=c[i+8>>2];c[rf+12>>2]=c[i+12>>2];c[rf+16>>2]=c[i+16>>2];i=b[sa>>1]&-1025;b[sa>>1]=i;i=i&65535;wa:do if((i&18|0)!=0?(b[pa+(na*40|0)+8>>1]&2048)==0:0){l=(i|4096)&65535;b[sa>>1]=l;do if(i&16384){i=(c[rf>>2]|0)+(c[Xb>>2]|0)|0;if((i|0)<1)if(!(l&16)){oa=3322;break}else i=1;if(Eg(rf,i,1)|0){i=7;break wa}gw((c[Ob>>2]|0)+(c[Xb>>2]|0)|0,0,c[rf>>2]|0)|0;c[Xb>>2]=(c[Xb>>2]|0)+(c[rf>>2]|0);i=b[sa>>1]&-16897;b[sa>>1]=i;if(!((c[Qb>>2]|0)!=0?(c[Ob>>2]|0)==(c[ec>>2]|0):0))oa=3322}else oa=3322;while(0);if((oa|0)==3322){oa=0;i=Jg(rf)|0;if(i|0)break;i=b[sa>>1]|0}b[sa>>1]=i&-4097;i=0}else i=0;while(0);l=b[sa>>1]|0;if(!((l&514)==514&(a[Jb>>0]|0)==1)){if(!(l&1)){l=Gg(rf,1)|0;oa=3329}}else{l=c[Ob>>2]|0;oa=3329}xa:do if((oa|0)==3329){oa=0;if(l){w=Sd(Cf,l,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;t=c[c[w+60>>2]>>2]|0;q=c[Pb>>2]|0;if(!q){l=Wb;i=Vb}else{l=a[t>>0]|0;if(!(l<<24>>24))i=0;else{i=0;o=t;do{o=o+1|0;i=G(i+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[o>>0]|0}while(l<<24>>24!=0)}i=(i>>>0)%((c[dc>>2]|0)>>>0)|0;l=q+(i<<3)|0;i=q+(i<<3)+4|0}l=c[l>>2]|0;ya:do if(!l)i=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;l=l+-1|0;q=c[i+12>>2]|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-s|0;if(!(na<<24>>24==0|(o|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;na=a[q>>0]|0;o=(d[208+(na&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(na<<24>>24==0|(o|0)!=0))}if(!o)break ya;if(!l){i=59292;break}}}while(0);i=c[i+8>>2]|0;if((i|0?(zd=c[i>>2]|0,Ad=c[zd+4>>2]|0,Ad|0):0)?c[zd+20>>2]|0:0){i=Ai(Cf,w,i,Ad,mf)|0;if(i|0)break;s=w+64|0;i=c[s>>2]|0;if(!i){i=0;break}l=i;while(1){if((c[l>>2]|0)==(Cf|0))break;l=c[l+24>>2]|0;if(!l){i=0;break xa}}l=c[Vc>>2]|0;if(!((l|0)%5|0)){q=cw(l|0,((l|0)<0)<<31>>31|0,2)|0;q=Sv(q|0,L()|0,20,0)|0;r=L()|0;i=c[db>>2]|0;za:do if(!i){if(c[$c>>2]|0){if(a[zf>>0]|0){i=7;break xa}}else{do if(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0))i=Yc;else{i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}i=c[cd>>2]|0;if(!i){i=fd;break}c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=3367;break za}while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(Cf,q,r)|0;oa=3367}else{o=i;do if((c[_e>>2]|0)>>>0<=o>>>0){if((c[$e>>2]|0)>>>0<=o>>>0)break;if(!(r>>>0>0|((r|0)==0?q>>>0>(e[Xc>>1]|0)>>>0:0)))break za;i=Zd(Cf,i,q,r)|0;oa=3367;break za}while(0);i=Zd(Cf,i,q,r)|0;oa=3367}while(0);if((oa|0)==3367){oa=0;if(!i){i=7;break}l=c[Vc>>2]|0}na=i+(l<<2)|0;c[na>>2]=0;c[na+4>>2]=0;c[na+8>>2]=0;c[na+12>>2]=0;c[na+16>>2]=0;c[db>>2]=i;i=c[s>>2]|0}Aa:do if(!i)i=0;else while(1){if((c[i>>2]|0)==(Cf|0))break Aa;i=c[i+24>>2]|0;if(!i){i=0;break}}while(0);ma=c[db>>2]|0;na=c[Vc>>2]|0;c[Vc>>2]=na+1;c[ma+(na<<2)>>2]=i;i=i+12|0;c[i>>2]=(c[i>>2]|0)+1;i=0;break}c[we>>2]=t;i=dd(Cf,36690,we)|0;c[mf>>2]=i;i=1}}while(0);if(!((b[sa>>1]&9216)==0&(c[Qb>>2]|0)==0))Cg(rf);if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case -94:{i=(c[ad>>2]|0)+1|0;c[ad>>2]=i;l=Sd(Cf,c[p+16>>2]|0,c[(c[uf>>2]|0)+(c[p+4>>2]<<4)>>2]|0)|0;do if(l|0?(Bd=l+64|0,Cd=c[Bd>>2]|0,Cd|0):0){l=Cd;do{if((c[(c[l+8>>2]|0)+4>>2]|0)>0){j=6;oa=3401;break c}l=c[l+24>>2]|0}while((l|0)!=0);c[Bd>>2]=0;r=Cd;l=0;while(1){o=c[r>>2]|0;q=r+24|0;i=r;r=c[q>>2]|0;if((o|0)==(Cf|0)){c[Bd>>2]=i;c[q>>2]=0;o=i}else{o=o+360|0;c[q>>2]=c[o>>2];c[o>>2]=i;o=l}if(!r)break;else l=o}i=o+8|0;l=Wa[c[(c[c[o+4>>2]>>2]|0)+20>>2]&127](c[i>>2]|0)|0;if(l|0){oa=3400;break c}c[i>>2]=0;c[Bd>>2]=0;i=c[o>>2]|0;ma=o+12|0;na=(c[ma>>2]|0)+-1|0;c[ma>>2]=na;if(!na){if(i|0){if(c[i+480>>2]|0){Xd(i,o);break}na=o;if((c[i+304>>2]|0)>>>0<=na>>>0?(c[i+308>>2]|0)>>>0>na>>>0:0){na=i+300|0;c[o>>2]=c[na>>2];c[na>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}}while(0);c[ad>>2]=(c[ad>>2]|0)+-1;l=m;q=pa;o=qa;i=0;break}case -93:{c[rf>>2]=0;w=c[(c[p+16>>2]|0)+8>>2]|0;if(!w){i=6;oa=3458;break c}x=c[w>>2]|0;if(!x){i=6;oa=3458;break c}i=Xa[c[x+24>>2]&255](w,rf)|0;t=w+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ba:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ca:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ba}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3440;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ba}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ba}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3440;break Ca}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3440}while(0);if((oa|0)==3440){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3458;break c}c[c[rf>>2]>>2]=w;o=c[p+4>>2]|0;i=c[xd>>2]|0;if((o|0)>0)i=i+(((c[va>>2]|0)-o|0)*40|0)|0;l=c[(c[oc>>2]|0)+(o<<2)>>2]|0;if(l|0){na=l+5|0;a[na>>0]=a[na>>0]&-2;tg(f,c[(c[oc>>2]|0)+(o<<2)>>2]|0);c[(c[oc>>2]|0)+(o<<2)>>2]=0}if((c[i+24>>2]|0)<96){if(Eg(i,96,0)|0){oa=3459;break c}i=c[i+16>>2]|0}else{na=c[i+20>>2]|0;c[i+16>>2]=na;i=i+8|0;b[i>>1]=b[i>>1]&13;i=na}c[(c[oc>>2]|0)+(o<<2)>>2]=i;ea=i;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[i>>0]=2;a[i+1>>0]=-1;b[i+56>>1]=0;c[i+72>>2]=i+88;if(!i){oa=3459;break c}c[i+40>>2]=c[rf>>2];l=w+4|0;c[l>>2]=(c[l>>2]|0)+1;l=m;q=pa;o=qa;i=0;break}case 9:{q=pa+((c[p+12>>2]|0)*40|0)|0;l=q+40|0;w=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[w+40>>2]|0;s=c[x>>2]|0;y=c[s>>2]|0;o=c[l>>2]|0;q=c[q>>2]|0;r=c[ta>>2]|0;if((o|0)>0){i=0;do{na=i;i=i+1|0;c[r+(na<<2)>>2]=l+(i*40|0)}while((i|0)!=(o|0))}i=_a[c[y+32>>2]&127](x,q,c[p+16>>2]|0,o,r)|0;t=s+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Da:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ea:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Da}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3499;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Da}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Da}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3499;break Ea}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3499}while(0);if((oa|0)==3499){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if(i|0){oa=3855;break c}na=Wa[c[y+40>>2]&127](x)|0;a[w+2>>0]=0;if(!na){l=m;q=pa;o=qa;i=0}else{i=0;oa=28}break}case -92:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;x=c[p+12>>2]|0;y=pa+(x*40|0)|0;if(a[i+2>>0]|0){i=pa+(x*40|0)+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else Dg(y);l=m;q=pa;o=qa;i=K;break d}i=i+40|0;q=c[c[i>>2]>>2]|0;l=c[q>>2]|0;c[kc>>2]=0;c[kc+4>>2]=0;c[kc+8>>2]=0;c[kc+12>>2]=0;c[kc+16>>2]=0;c[kc+20>>2]=0;c[kc+24>>2]=0;c[rf>>2]=y;w=pa+(x*40|0)+8|0;o=b[w>>1]|0;if(!(b[p+2>>1]&1))b[w>>1]=o&15904|1;else{if(!(o&9216))b[w>>1]=1;else Dg(y);b[w>>1]=16385;c[y>>2]=0}i=Ya[c[l+44>>2]&127](c[i>>2]|0,rf,c[p+8>>2]|0)|0;t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Fa:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ga:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Fa}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3554;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fa}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Fa}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3554;break Ga}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3554}while(0);if((oa|0)==3554){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}if((c[Kb>>2]|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(x*40|0)+10>>0]|0)==1:0)i=c[pa+(x*40|0)+16>>2]|0;else if(!(i&1))i=Gg(y,1)|0;else i=0;c[xe>>2]=i;Ag(f,31408,xe);i=c[Kb>>2]|0}l=b[w>>1]|0;if((l&2)!=0?(a[pa+(x*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(y,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(x*40|0)+12>>2]|0;if(o&16384)l=(c[y>>2]|0)+l|0;if((l|0)>(c[(c[pa+(x*40|0)+32>>2]|0)+108>>2]|0)){oa=3576;break c}else l=(i|0)==0?7:12}else l=(i|0)==0?7:12;switch(l&15){case 12:{oa=3855;break c}case 15:{oa=3891;break c}case 7:{l=m;q=pa;o=qa;break}default:{h=0;oa=3900;break c}}break}case 60:{i=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;if(!(a[i+2>>0]|0)){t=i+40|0;i=c[t>>2]|0;x=c[i>>2]|0;w=c[x>>2]|0;i=Wa[c[w+36>>2]&127](i)|0;x=x+8|0;if(c[x>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[x>>2]|0;Ha:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ia:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ha}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3616;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ha}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ha}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3616;break Ia}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3616}while(0);if((oa|0)==3616)if(!l){l=0;break}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[x>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[x>>2]=0}if(i|0){oa=3855;break c}if(!(Wa[c[w+40>>2]&127](c[t>>2]|0)|0)){i=0;oa=20}else{l=m;o=pa;i=0;oa=21}}else{l=m;q=pa;o=qa;i=K}break}case -91:{i=Sc;o=c[i>>2]|0;i=c[i+4>>2]|0;q=Sc;c[q>>2]=o|67108864;c[q+4>>2]=i;q=c[(c[p+16>>2]|0)+8>>2]|0;i=c[p+4>>2]|0;l=pa+(i*40|0)|0;if((b[pa+(i*40|0)+8>>1]&2?(a[pa+(i*40|0)+10>>0]|0)!=1:0)?(Dd=Ig(l,1)|0,Dd|0):0){i=Dd;oa=3855;break c}i=Xa[c[(c[q>>2]|0)+76>>2]&255](q,c[pa+(i*40|0)+16>>2]|0)|0;if((o&67108864|0)==0&0==0){la=Sc;ma=c[la+4>>2]|0;na=Sc;c[na>>2]=c[la>>2]&-67108865;c[na+4>>2]=ma}t=q+8|0;if(c[t>>2]|0){q=c[f>>2]|0;l=c[mf>>2]|0;do if(l|0){if(q|0){if(c[q+480>>2]|0){Xd(q,l);break}na=l;if((c[q+304>>2]|0)>>>0<=na>>>0?(c[q+308>>2]|0)>>>0>na>>>0:0){na=q+300|0;c[l>>2]=c[na>>2];c[na>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);r=c[t>>2]|0;Ja:do if(!r)l=0;else{s=(Eu(r)|0)+1|0;Ka:do if(!q){na=Sv(s|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){l=0;break Ja}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](s)|0;oa=3666;break}l=Wa[c[29356>>2]&127](s)|0;if((c[14985]|0)>>>0>>0)c[14985]=s;q=59064;o=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&o>>>0>0){na=c[14978]|0;ma=Tv(o|0,q|0,l|0,((l|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Ja}o=Wa[c[29352>>2]&127](l)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){l=0;break Ja}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){o=q+300|0;l=c[o>>2]|0;if(l|0){c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}o=q+296|0;l=c[o>>2]|0;if(!l){l=q+292|0;break}else{c[o>>2]=c[l>>2];oa=q+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3666;break Ka}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(q,s,0)|0;oa=3666}while(0);if((oa|0)==3666){oa=0;if(!l){l=0;break}}ew(l|0,r|0,s|0)|0}while(0);c[mf>>2]=l;l=c[t>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{na=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[t>>2]=0}na=(d[vf>>0]|d[vf+1>>0]<<8)&-4;a[vf>>0]=na;a[vf+1>>0]=na>>8;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}break}case 10:{if(a[zf>>0]|0){i=2;j=K;break c}y=p+16|0;t=c[(c[y>>2]|0)+8>>2]|0;if(!t){i=12;j=6;break c}i=c[t>>2]|0;if(!i){i=12;j=6;break c}s=c[p+8>>2]|0;o=i+52|0;i=c[o>>2]|0;La:do if(i){r=a[Rb>>0]|0;q=c[ta>>2]|0;if((s|0)>0){i=pa+((c[p+12>>2]|0)*40|0)|0;l=0;while(1){c[q+(l<<2)>>2]=i;l=l+1|0;if((l|0)==(s|0))break;else i=i+40|0}i=c[o>>2]|0}w=p+2|0;a[Rb>>0]=b[w>>1];x=Za[i&127](t,s,q,rf)|0;a[Rb>>0]=r;s=t+8|0;if(c[s>>2]|0){o=c[f>>2]|0;i=c[mf>>2]|0;Ma:do if(i|0){do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break Ma}l=i;if((c[o+304>>2]|0)>>>0>l>>>0)break;if((c[o+308>>2]|0)>>>0<=l>>>0)break;na=o+300|0;c[i>>2]=c[na>>2];c[na>>2]=i;break Ma}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);q=c[s>>2]|0;Na:do if(!q)i=0;else{r=(Eu(q)|0)+1|0;Oa:do if(!o){na=Sv(r|0,0,-1,-1)|0;ma=L()|0;if(ma>>>0>0|(ma|0)==0&na>>>0>2147483390){i=0;break Na}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](r)|0;oa=3718;break}i=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0>>0)c[14985]=r;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){na=c[14978]|0;ma=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break Na}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){i=0;break Na}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=3718;break Oa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,r,0)|0;oa=3718}while(0);if((oa|0)==3718){oa=0;if(!i){i=0;break}}ew(i|0,q|0,r|0)|0}while(0);c[mf>>2]=i;i=c[s>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{na=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[s>>2]=0}if(!x){if(c[p+4>>2]|0){la=rf;ma=c[la+4>>2]|0;na=zb;c[na>>2]=c[la>>2];c[na+4>>2]=ma}c[rc>>2]=(c[rc>>2]|0)+1;i=0;break}else{if((x&255|0)!=19){oa=3733;break c}if(!(a[(c[y>>2]|0)+16>>0]|0)){oa=3733;break c}i=b[w>>1]|0;switch(i<<16>>16){case 5:{i=2;oa=3732;break c}case 4:{i=0;break La}default:{oa=3731;break c}}}}else i=K;while(0);l=m;q=pa;o=qa;break}case -90:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;l=i;c[l>>2]=c[(c[(c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0)+4>>2]|0)+44>>2];c[l+4>>2]=0;l=m;q=pa;o=qa;i=K;break}case -89:{na=c[xd>>2]|0;l=c[p+8>>2]|0;i=na+(l*40|0)|0;l=na+(l*40|0)+8|0;if(!(b[l>>1]&9216))b[l>>1]=4;else lh(i)|0;q=c[(c[uf>>2]|0)+(c[p+4>>2]<<4)+4>>2]|0;l=c[p+12>>2]|0;o=c[q+4>>2]|0;if(!l)l=0;else{na=c[o+44>>2]|0;l=na>>>0>>0?l:na}c[o+4>>2]=c[q>>2];o=(c[o>>2]|0)+156|0;if((l|0)>0)c[o>>2]=l;else l=c[o>>2]|0;q=i;c[q>>2]=l;c[q+4>>2]=((l|0)<0)<<31>>31;l=m;q=pa;o=qa;i=K;break}case 63:case 62:{o=b[p+2>>1]|0;l=((o&65535)<<2)+28|0;do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=3758;else{l=p;j=m;i=zf;oa=3898;break a}else{if(!(0<0|(0==0?(e[Xc>>1]|0)>>>0>>0:0))){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=3758}while(0);if((oa|0)==3758)i=_d(Cf,l,0)|0;if(!i){l=p;j=h;i=zf;oa=3892;break a}c[i>>2]=0;oa=p+16|0;c[i+4>>2]=c[oa>>2];c[i+16>>2]=(p-m|0)/20|0;c[i+12>>2]=f;c[i+20>>2]=0;a[i+25>>0]=o;a[p+1>>0]=-16;c[oa>>2]=i;a[p>>0]=(d[p>>0]|0)+2;oa=3761;break}case 65:case 64:{oa=3761;break}default:{l=m;q=pa;o=qa;i=K}}while(0);Pa:do if((oa|0)==34){oa=0;i=c[p+4>>2]|0;if(i|0){oa=39;break c}i=c[nc>>2]|0;if(!i){oa=38;break c}c[nc>>2]=c[i+4>>2];c[La>>2]=(c[La>>2]|0)+-1;m=c[rc>>2]|0;c[sc>>2]=m;c[tc>>2]=(c[tc>>2]|0)+m;i=sg(i)|0;m=c[le>>2]|0;if((c[p+8>>2]|0)==4)i=(c[m+(i*20|0)+8>>2]|0)+-1|0;l=m;q=c[xd>>2]|0;o=qa;p=m+(i*20|0)|0;i=K}else if((oa|0)==83){oa=0;na=c[xd>>2]|0;o=c[l>>2]|0;l=na+(o*40|0)|0;o=na+(o*40|0)+8|0;if(!(b[o>>1]&9216))b[o>>1]=4;else lh(l)|0;o=l+8|0;b[o>>1]=2562;c[l+16>>2]=c[p+16>>2];c[l+12>>2]=c[p+4>>2];a[l+10>>0]=sd;l=c[p+12>>2]|0;if((l|0)>0?(na=pa+(l*40|0)|0,(c[na+4>>2]|0)==0?(c[na>>2]|0)==(e[p+2>>1]|0):0):0){b[o>>1]=2576;l=m;q=pa;o=qa}else{l=m;q=pa;o=qa}}else if((oa|0)==1049){if(((d[vf>>0]|d[vf+1>>0]<<8)&3)==1){i=516;oa=3855;break c}w=c[p+8>>2]|0;A=c[p+12>>2]|0;i=c[uf>>2]|0;C=c[i+(A<<4)+4>>2]|0;l=p+2|0;q=b[l>>1]|0;if(z<<24>>24==109){o=(q&8|4)&65535;i=a[(c[i+(A<<4)+12>>2]|0)+76>>0]|0;if((i&255)<(d[pc>>0]|0)){a[pc>>0]=i;B=o}else B=o}else B=0;if(q&16){s=pa+(w*40|0)|0;t=pa+(w*40|0)+8|0;r=b[t>>1]|0;i=r&65535;do if(!(i&4)){if(i&8|0){o=Mg(+g[s>>3])|0;q=L()|0;i=r;break}if(!(i&18)){o=0;q=0;i=r}else{o=Ng(a[pa+(w*40|0)+10>>0]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0)|0;q=L()|0;i=b[t>>1]|0}}else{q=s;o=c[q>>2]|0;q=c[q+4>>2]|0;i=r}while(0);w=s;c[w>>2]=o;c[w+4>>2]=q;b[t>>1]=i&15904|4;w=o}z=p+1|0;switch(a[z>>0]|0){case -9:{y=c[p+16>>2]|0;x=e[y+8>>1]|0;break}case -3:{x=c[p+16>>2]|0;y=0;break}default:{x=0;y=0}}s=c[p+4>>2]|0;i=c[xd>>2]|0;if((s|0)>0)i=i+(((c[va>>2]|0)-s|0)*40|0)|0;o=x<<3;t=o+96|0;o=o+296|0;q=c[(c[oc>>2]|0)+(s<<2)>>2]|0;if(q|0){oa=q+5|0;a[oa>>0]=a[oa>>0]&-2;tg(f,c[(c[oc>>2]|0)+(s<<2)>>2]|0);c[(c[oc>>2]|0)+(s<<2)>>2]=0}if((c[i+24>>2]|0)<(o|0)){if(Eg(i,o,0)|0){l=p;j=h;i=zf;oa=3892;break a}o=i+16|0;r=o;o=c[o>>2]|0}else{o=c[i+20>>2]|0;r=i+16|0;c[r>>2]=o;oa=i+8|0;b[oa>>1]=b[oa>>1]&13}c[(c[oc>>2]|0)+(s<<2)>>2]=o;i=A&255;q=o+1|0;ea=o;fa=ea+36|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));a[q>>0]=i;b[o+56>>1]=x;c[o+72>>2]=o+88+(x<<2);oa=(c[r>>2]|0)+t|0;i=o+40|0;c[i>>2]=oa;c[oa>>2]=0;c[oa+4>>2]=0;c[oa+8>>2]=0;c[oa+12>>2]=0;c[oa+16>>2]=0;if(!o){l=p;j=h;i=zf;oa=3892;break a}a[o+2>>0]=1;oa=o+5|0;a[oa>>0]=a[oa>>0]|4;c[o+52>>2]=w;i=Vg(C,w,B,y,c[i>>2]|0)|0;c[o+44>>2]=y;a[o+4>>0]=(a[z>>0]|0)!=-9&1;oa=1074}else if((oa|0)==1216){oa=0;x=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;w=c[p+12>>2]|0;r=pa+(w*40|0)|0;i=c[p+16>>2]|0;if((i|0)>0){c[Hd>>2]=c[x+44>>2];b[Aa>>1]=i;c[Ba>>2]=r;s=0;r=Hd;i=z;q=0}else{o=pa+(w*40|0)+8|0;l=b[o>>1]|0;do if(l&16384){q=pa+(w*40|0)+12|0;i=(c[r>>2]|0)+(c[q>>2]|0)|0;if((i|0)<1)if(!(l&16))break;else i=1;if(Eg(r,i,1)|0){oa=1268;break c}gw((c[pa+(w*40|0)+16>>2]|0)+(c[q>>2]|0)|0,0,c[r>>2]|0)|0;c[q>>2]=(c[q>>2]|0)+(c[r>>2]|0);b[o>>1]=b[o>>1]&-16897}while(0);r=x+44|0;s=c[r>>2]|0;t=s+6|0;q=((e[t>>1]|0)*40|0)+56|0;o=c[s+12>>2]|0;Qa:do if(!o){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](q)|0;oa=1246;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0>>0)c[14985]=q;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){na=c[14978]|0;ma=Tv(i|0,l|0,o|0,((o|0)<0)<<31>>31|0)|0;la=L()|0;c[14768]=((la|0)<0|(la|0)==0&ma>>>0<=na>>>0)&1}l=Wa[c[29340>>2]&127](o)|0;if(!l){oa=1268;break c}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){oa=1268;break c}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){l=o+300|0;i=c[l>>2]|0;if(i|0){c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}l=o+296|0;i=c[l>>2]|0;if(!i){i=o+292|0;break}else{c[l>>2]=c[i>>2];oa=o+284|0;c[oa>>2]=(c[oa>>2]|0)+1;oa=1246;break Qa}}else i=o+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(o,q,0)|0;oa=1246}while(0);if((oa|0)==1246)if(!i){oa=1268;break c}else l=i;c[l+4>>2]=l+16;c[l>>2]=s;b[l+8>>1]=(e[t>>1]|0)+1;_g(c[r>>2]|0,c[pa+(w*40|0)+12>>2]|0,c[pa+(w*40|0)+16>>2]|0,l);s=l;r=l;i=a[p>>0]|0;q=l}a[r+10>>0]=0;Ra:do if(i<<24>>24==27?(fe=b[r+8>>1]|0,fe<<16>>16!=0):0){l=c[r+4>>2]|0;o=fe&65535;i=0;while(1){if(b[l+(i*40|0)+8>>1]&1){o=1;break Ra}i=i+1|0;if(i>>>0>=o>>>0){o=0;break}}}else o=0;while(0);i=Xg(c[x+40>>2]|0,r,0,0,0,rf)|0;do if(s|0){if(c[Ze>>2]|0){Xd(Cf,q);break}oa=q;if((c[_e>>2]|0)>>>0<=oa>>>0?(c[$e>>2]|0)>>>0>oa>>>0:0){c[q>>2]=c[af>>2];c[af>>2]=q;break}if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if(i|0){oa=1270;break c}i=c[rf>>2]|0;c[x+32>>2]=i;l=(i|0)==0;a[x+2>>0]=(l^1)&1;a[x+3>>0]=0;c[x+28>>2]=0;if((a[p>>0]|0)==29)if(l)oa=1269;else oa=1267;else if(!(i|o))oa=1267;else oa=1269;if((oa|0)==1267){oa=0;l=m;q=pa;o=qa;i=0;break}else if((oa|0)==1269){i=0;oa=28;break}}else if((oa|0)==1287){oa=0;la=c[i>>2]|0;ma=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;i=c[ma+40>>2]|0;c[je>>2]=0;la=pa+(la*40|0)|0;ka=c[la>>2]|0;la=c[la+4>>2]|0;i=Xg(i,0,ka,la,0,je)|0;na=ma+64|0;c[na>>2]=ka;c[na+4>>2]=la;a[ma+2>>0]=0;c[ma+28>>2]=0;a[ma+3>>0]=0;na=c[je>>2]|0;c[ma+32>>2]=na;if(!na)if(!i){l=m;q=pa;o=qa;i=0;break}else{oa=3855;break c}else if(!(c[p+8>>2]|0)){oa=1289;break c}else{oa=28;break}}else if((oa|0)==1521){oa=0;na=c[(c[oc>>2]|0)+(c[p+4>>2]<<2)>>2]|0;c[Yd>>2]=1;do if((a[na>>0]|0)==1){ma=c[na+40>>2]|0;if(!(a[ma+56>>0]|0)){i=ma+36|0;if(!(c[i>>2]|0)){c[Yd>>2]=1;a[na+2>>0]=1;break}else{c[Yd>>2]=0;i=Uh(ma+64|0,i)|0;oa=2142;break}}i=Vh(ma)|0;if(i|0){oa=2145;break c}la=ma+59|0;R=0;ka=0;while(1){if(ka>>>0>=(d[la>>0]|0)>>>0){oa=2138;break}ha=ma+64+(ka*72|0)|0;c[rf>>2]=0;ia=ma+64+(ka*72|0)+28|0;i=c[ia>>2]|0;l=((i|0)<0)<<31>>31;if((i|0)>16){ga=0;o=16;q=0;while(1){o=cw(o|0,q|0,4)|0;q=L()|0;ja=ga+1|0;if(!((q|0)<(l|0)|(q|0)==(l|0)&o>>>0>>0))break;else ga=ja}fa=Hd;c[fa>>2]=0;c[fa+4>>2]=0;if((i|0)>=17){i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0){S=0;U=0}else oa=1537;Sa:do if((oa|0)==1537){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){S=0;U=0;break Sa}}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;o=59064;l=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,o|0,i|0,((i|0)<0)<<31>>31|0)|0;da=L()|0;c[14768]=((da|0)<0|(da|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){S=0;U=0;break Sa}l=Wa[c[29352>>2]&127](i)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}while(0);S=i+16|0;gw(S|0,0,960)|0;c[i>>2]=16;c[i+4>>2]=0;c[i+12>>2]=S;c[i+8>>2]=i+912;S=i;U=i}while(0);c[rf>>2]=U;fa=(U|0)==0;i=fa?7:0;l=c[ia>>2]|0;if((l|0)>0&(fa^1)){ba=(ga|0)==0;ca=ma+64+(ka*72|0)+8|0;da=ma+64+(ka*72|0)+64|0;o=0;aa=0;do{c[Td>>2]=0;i=l-aa|0;i=$h(ha,(i|0)<16?i:16,Hd,Td)|0;do if(!i){$=o+1|0;Z=c[Td>>2]|0;i=c[7389]|0;if((i|0)!=0?(Wa[i&127](100)|0)!=0:0)oa=1566;else oa=1554;Ta:do if((oa|0)==1554){oa=0;do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1566;break Ta}else l=i}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;q=59064;l=c[q>>2]|0;q=c[q+4>>2]|0;if((q|0)>0|(q|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,q|0,i|0,((i|0)<0)<<31>>31|0)|0;_=L()|0;c[14768]=((_|0)<0|(_|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){oa=1566;break Ta}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);ea=l+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[l+4>>2]=Z;c[l>>2]=ha;_=c[ca>>2]|0;Z=(c[_+8>>2]|0)+9|0;_=(c[_+4>>2]|0)/2|0;_=(Z|0)>(_|0)?Z:_;c[l+16>>2]=_;Z=da;_=Sv(c[Z>>2]|0,c[Z+4>>2]|0,_|0,((_|0)<0)<<31>>31|0)|0;Z=L()|0;i=da;c[i>>2]=_;c[i+4>>2]=Z;i=0;Z=l;_=l}while(0);do if((oa|0)==1566){oa=0;if(!Z){i=7;Z=0;_=0;break}if((c[Z>>2]|0)>0){X=Z+12|0;W=0;do{l=c[X>>2]|0;Y=l+(W*56|0)|0;i=c[l+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[l+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{l=c[T>>2]|0;V=l+(O*56|0)|0;i=c[l+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[l+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{l=c[M>>2]|0;N=l+(I*56|0)|0;i=c[l+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[l+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{l=c[F>>2]|0;H=l+(C*56|0)|0;i=c[l+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[l+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{l=c[A>>2]|0;B=l+(x*56|0)|0;i=c[l+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[l+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{l=c[w>>2]|0;q=l+(r*56|0)|0;i=c[l+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[l+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Y;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[Z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}else{i=Wa[c[29352>>2]&127](Z)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Z);i=7;Z=0;_=0;break}}while(0);Ua:do if(ba){if(!i){i=U;oa=1830}}else{q=1;l=1;do{q=q<<4;l=l+1|0}while((l|0)!=(ja|0));if(i|0)break;i=U;w=1;Va:while(1){t=(c[i+12>>2]|0)+((((o|0)/(q|0)|0|0)%16|0)*56|0)+48|0;i=c[t>>2]|0;if(!i){i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){i=7;break Ua}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](976)|0;if(!i){i=7;break Ua}else l=i}else{i=Wa[c[29356>>2]&127](976)|0;if((c[14985]|0)>>>0<976)c[14985]=976;r=59064;l=c[r>>2]|0;r=c[r+4>>2]|0;if((r|0)>0|(r|0)==0&l>>>0>0){fa=c[14978]|0;ea=Tv(l|0,r|0,i|0,((i|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&ea>>>0<=fa>>>0)&1}l=Wa[c[29340>>2]&127](i)|0;if(!l){i=7;break Ua}i=Wa[c[29352>>2]&127](l)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0<=(c[14987]|0)>>>0)break;c[14987]=i}while(0);i=l+16|0;gw(i|0,0,960)|0;Y=l+12|0;c[l>>2]=16;c[l+4>>2]=0;c[Y>>2]=i;c[l+8>>2]=l+912;i=c[7389]|0;if(i|0?Wa[i&127](100)|0:0){oa=1702;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](64)|0;if(!i){oa=1714;break Va}}else{i=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;s=59064;r=c[s>>2]|0;s=c[s+4>>2]|0;if((s|0)>0|(s|0)==0&r>>>0>0){fa=c[14978]|0;ea=Tv(r|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;X=L()|0;c[14768]=((X|0)<0|(X|0)==0&ea>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){oa=1714;break Va}r=Wa[c[29352>>2]&127](i)|0;r=(c[14978]|0)+r|0;c[14978]=r;if(r>>>0>(c[14982]|0)>>>0)c[14982]=r;r=(c[14981]|0)+1|0;c[14981]=r;if(r>>>0<=(c[14987]|0)>>>0)break;c[14987]=r}while(0);ea=i+8|0;fa=ea+56|0;do{a[ea>>0]=0;ea=ea+1|0}while((ea|0)<(fa|0));c[t>>2]=i;c[i+4>>2]=l;c[i>>2]=ha;Y=c[ca>>2]|0;ea=(c[Y+8>>2]|0)+9|0;Y=(c[Y+4>>2]|0)/2|0;Y=(ea|0)>(Y|0)?ea:Y;c[i+16>>2]=Y;ea=da;Y=Sv(c[ea>>2]|0,c[ea+4>>2]|0,Y|0,((Y|0)<0)<<31>>31|0)|0;ea=L()|0;fa=da;c[fa>>2]=Y;c[fa+4>>2]=ea}i=c[i+4>>2]|0;if(w>>>0>>0){q=(q|0)/16|0;w=w+1|0}else{oa=1830;break Ua}}if((oa|0)==1702){oa=0;c[t>>2]=0}else if((oa|0)==1714){oa=0;c[t>>2]=0}if((c[l>>2]|0)>0){W=0;do{o=c[Y>>2]|0;X=o+(W*56|0)|0;i=c[o+(W*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(W*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;i=c[o+(O*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(O*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;i=c[o+(I*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(I*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;i=c[o+(C*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(C*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;i=c[o+(x*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(x*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;i=c[o+(r*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[o+(r*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{fa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=X;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);i=7;break}else{i=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);i=7;break}}while(0);if((oa|0)==1830){oa=0;c[(c[i+12>>2]|0)+(((o|0)%16|0)*56|0)+48>>2]=_;o=$;i=0;break}if(!Z){o=$;break}X=c[Z+4>>2]|0;do if(X|0){if((c[X>>2]|0)>0){Y=X+12|0;W=0;do{o=c[Y>>2]|0;Z=o+(W*56|0)|0;l=c[o+(W*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(W*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);P=c[o+(W*56|0)+48>>2]|0;do if(P|0){Q=c[P+4>>2]|0;do if(Q|0){if((c[Q>>2]|0)>0){T=Q+12|0;O=0;do{o=c[T>>2]|0;V=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);zg(c[o+(r*56|0)+48>>2]|0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{fa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{fa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{fa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{fa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{fa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=V;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[Q>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{fa=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](P);break}else{fa=Wa[c[29352>>2]&127](P)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](P);break}}while(0);ea=Z;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));W=W+1|0}while((W|0)<(c[X>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](X);break}else{fa=Wa[c[29352>>2]&127](X)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](X);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](_);o=$;break}else{o=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);o=$;break}}while(0);aa=aa+16|0;l=c[ia>>2]|0}while((i|0)==0&(l|0)>(aa|0))}}else oa=1534}else{oa=Hd;c[oa>>2]=0;c[oa+4>>2]=0;oa=1534}if((oa|0)==1534){oa=0;i=$h(ha,i,Hd,rf)|0;S=c[rf>>2]|0;U=S}T=(i|0)==0;do if(!T){if(U){if((c[U>>2]|0)>0){P=U+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ja=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{ja=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{ja=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{ja=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{ja=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{ja=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{ja=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{ja=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{ja=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[U>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](S);break}else{ja=Wa[c[29352>>2]&127](S)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](S);break}}}else R=U;while(0);if(T)ka=ka+1|0;else{oa=2043;break}}do if((oa|0)==2043)if(R){if((c[R>>2]|0)>0){P=R+12|0;O=0;do{o=c[P>>2]|0;Q=o+(O*56|0)|0;l=c[o+(O*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(O*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);J=c[o+(O*56|0)+48>>2]|0;do if(J|0){K=c[J+4>>2]|0;do if(K|0){if((c[K>>2]|0)>0){M=K+12|0;I=0;do{o=c[M>>2]|0;N=o+(I*56|0)|0;l=c[o+(I*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(I*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);D=c[o+(I*56|0)+48>>2]|0;do if(D|0){E=c[D+4>>2]|0;do if(E|0){if((c[E>>2]|0)>0){F=E+12|0;C=0;do{o=c[F>>2]|0;H=o+(C*56|0)|0;l=c[o+(C*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(C*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);y=c[o+(C*56|0)+48>>2]|0;do if(y|0){z=c[y+4>>2]|0;do if(z|0){if((c[z>>2]|0)>0){A=z+12|0;x=0;do{o=c[A>>2]|0;B=o+(x*56|0)|0;l=c[o+(x*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(x*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);s=c[o+(x*56|0)+48>>2]|0;do if(s|0){t=c[s+4>>2]|0;do if(t|0){if((c[t>>2]|0)>0){w=t+12|0;r=0;do{o=c[w>>2]|0;q=o+(r*56|0)|0;l=c[o+(r*56|0)+28>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+36>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[o+(r*56|0)+48>>2]|0;do if(l|0){xg(c[l+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);ea=q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));r=r+1|0}while((r|0)<(c[t>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{oa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{oa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);ea=B;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));x=x+1|0}while((x|0)<(c[z>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{oa=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{oa=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);ea=H;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));C=C+1|0}while((C|0)<(c[E>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{oa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{oa=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);ea=N;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));I=I+1|0}while((I|0)<(c[K>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](K);break}else{oa=Wa[c[29352>>2]&127](K)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](K);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{oa=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}}while(0);ea=Q;fa=ea+56|0;do{c[ea>>2]=0;ea=ea+4|0}while((ea|0)<(fa|0));O=O+1|0}while((O|0)<(c[R>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](R);oa=2139;break}else{oa=Wa[c[29352>>2]&127](R)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](R);oa=2139;break}}else oa=2139;else if((oa|0)==2138){oa=0;i=_h(ma+64|0,R)|0;c[ma+20>>2]=R;if(!i)i=0;else oa=2139}while(0);c[Yd>>2]=0;oa=2142}else{i=ch(c[na+40>>2]|0,Yd)|0;a[na+3>>0]=0;c[na+28>>2]=0;oa=2142}while(0);if((oa|0)==2142){oa=0;if(i|0){oa=2145;break c}ma=c[Yd>>2]|0;a[na+2>>0]=ma;if(!ma){l=m;q=pa;o=qa;i=0;break}}i=0;oa=28}else if((oa|0)==2160){c[l+28>>2]=0;switch(i|0){case 0:{a[l+2>>0]=0;i=f+160+(e[p+2>>1]<<2)|0;c[i>>2]=(c[i>>2]|0)+1;i=0;oa=20;break Pa}case 101:{a[l+2>>0]=1;l=m;o=pa;i=0;oa=21;break Pa}default:{oa=3855;break c}}}else if((oa|0)==3029){oa=0;o=c[p+12>>2]|0;i=pa+(o*40|0)|0;l=s+8|0;if((c[l>>2]|0)!=(i|0)?(c[l>>2]=i,vd=a[s+25>>0]|0,vd<<24>>24):0){l=c[p+8>>2]|0;i=vd&255;do{na=i;i=i+-1|0;c[s+28+(i<<2)>>2]=pa+((i+l|0)*40|0)}while((na|0)>1)}i=pa+(o*40|0)+12|0;c[i>>2]=(c[i>>2]|0)+1;i=c[s+4>>2]|0;if(!(c[p+4>>2]|0))cb[c[i+16>>2]&255](s,d[s+25>>0]|0,s+28|0);else cb[c[i+28>>2]&255](s,d[s+25>>0]|0,s+28|0);r=s+20|0;i=c[r>>2]|0;if(i){if((i|0)>0){i=c[s>>2]|0;do if(i){l=b[i+8>>1]|0;if((l&514)==514?(a[i+10>>0]|0)==1:0){i=c[i+16>>2]|0;break}if(!(l&1))i=Gg(i,1)|0;else i=0}else i=0;while(0);c[Ye>>2]=i;Ag(f,31408,Ye);i=c[r>>2]|0}else i=K;o=s+24|0;if(a[o>>0]|0){l=c[p+-16>>2]|0;do if(l|0){q=pa+(l*40|0)|0;l=pa+(l*40|0)+8|0;if(!(b[l>>1]&9216)){na=q;c[na>>2]=1;c[na+4>>2]=0;b[l>>1]=4;break}else{Pg(q,1,0);break}}while(0);a[o>>0]=0}o=c[s>>2]|0;l=o+8|0;if(!((b[l>>1]&9216)==0?(c[o+24>>2]|0)==0:0)){Cg(o);l=(c[s>>2]|0)+8|0}b[l>>1]=1;c[r>>2]=0;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break c}}else{l=m;q=pa;o=qa;i=K}}else if((oa|0)==3761){oa=0;q=c[p+16>>2]|0;y=c[p+12>>2]|0;x=pa+(y*40|0)|0;if((c[q>>2]|0)!=(x|0)){c[q>>2]=x;i=a[q+25>>0]|0;if(!(i<<24>>24))i=0;else{o=c[p+8>>2]|0;l=i&255;do{na=l;l=l+-1|0;c[q+28+(l<<2)>>2]=pa+((l+o|0)*40|0)}while((na|0)>1)}}else i=a[q+25>>0]|0;w=pa+(y*40|0)+8|0;b[w>>1]=b[w>>1]&15904|1;cb[c[(c[q+4>>2]|0)+16>>2]&255](q,i&255,q+28|0);t=q+20|0;i=c[t>>2]|0;if(i){if((i|0)>0){i=b[w>>1]|0;if((i&514)==514?(a[pa+(y*40|0)+10>>0]|0)==1:0)i=c[pa+(y*40|0)+16>>2]|0;else if(!(i&1))i=Gg(x,1)|0;else i=0;c[ye>>2]=i;Ag(f,31408,ye);i=c[t>>2]|0}else i=K;r=c[q+16>>2]|0;s=c[p+4>>2]|0;o=c[Hb>>2]|0;Wa:do if(o|0){if((r|0)<0)while(1){l=c[o+12>>2]|0;if(l|0)ab[l&127](c[o+8>>2]|0);c[Hb>>2]=c[o+16>>2];Xa:do if(!(c[Ze>>2]|0)){l=o;do if((c[_e>>2]|0)>>>0<=l>>>0){if((c[$e>>2]|0)>>>0<=l>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Xa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(Cf,o);while(0);o=c[Hb>>2]|0;if(!o)break Wa}l=Hb;do{Ya:do if((c[o>>2]|0)==(r|0)?(Ed=c[o+4>>2]|0,(Ed|0)>-1):0){if((Ed|0)<=31?1<>2]|0;if(q|0)ab[q&127](c[o+8>>2]|0);c[l>>2]=c[o+16>>2];if(c[Ze>>2]|0){Xd(Cf,o);break}q=o;do if((c[_e>>2]|0)>>>0<=q>>>0){if((c[$e>>2]|0)>>>0<=q>>>0)break;c[o>>2]=c[af>>2];c[af>>2]=o;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{na=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else oa=3803;while(0);if((oa|0)==3803){oa=0;l=o+16|0}o=c[l>>2]|0}while((o|0)!=0)}while(0);c[t>>2]=0;if(!i)i=0;else{oa=3855;break c}}else i=K;l=b[w>>1]|0;if(l&18){if((l&2)!=0?(a[pa+(y*40|0)+10>>0]|0)!=sd<<24>>24:0){Ig(x,sd)|0;l=b[w>>1]|0}o=l&65535;if(o&18){l=c[pa+(y*40|0)+12>>2]|0;if(o&16384)l=(c[x>>2]|0)+l|0;if((l|0)>(c[(c[pa+(y*40|0)+32>>2]|0)+108>>2]|0)){oa=3891;break c}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}else{l=m;q=pa;o=qa}}while(0);if((oa|0)==20){l=m;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0;o=pa;oa=21}else if((oa|0)==28){oa=0;l=m;q=pa;o=qa;p=m+(((c[p+8>>2]|0)+-1|0)*20|0)|0}else if((oa|0)==1074){oa=0;a[(c[o+40>>2]|0)+3>>0]=b[l>>1]&3;if(!i){l=m;q=pa;o=qa;i=0}else{oa=3855;break}}Za:do if((oa|0)==21){oa=0;if(c[lc>>2]|0){j=n;i=zf;break b}if(n>>>0>>0){q=o;o=qa}else while(1){m=c[Af>>2]|0;if(!m){q=o;o=qa;break Za}pa=c[fb>>2]|0;h=pa+h|0;if(Wa[m&127](c[gb>>2]|0)|0){oa=3844;break c}if(n>>>0>>0){q=o;o=qa;break}}}while(0);m=l;p=p+20|0;K=i;qa=o;pa=q}switch(oa|0){case 38:{c[Bf>>2]=0;a[Jd>>0]=c[p+8>>2];c[xf>>2]=(p-m|0)/20|0;oa=44;break}case 39:{j=p+4|0;l=(p-m|0)/20|0;c[Bf>>2]=i;a[Jd>>0]=c[p+8>>2];c[xf>>2]=l;i=b[p+2>>1]|0;if(i<<16>>16){c[ff>>2]=c[3504+((i&65535)+-1<<2)>>2];Ag(f,34155,ff);i=c[p+16>>2]|0;if(i|0){c[kf>>2]=c[mf>>2];c[kf+4>>2]=i;zf=dd(Cf,34176,kf)|0;c[mf>>2]=zf}}else{c[gf>>2]=c[p+16>>2];Ag(f,31408,gf)}oa=c[j>>2]|0;yf=c[hd>>2]|0;zf=c[mf>>2]|0;c[lf>>2]=l;c[lf+4>>2]=yf;c[lf+8>>2]=zf;Db(oa,34183,lf);oa=44;break}case 153:{vf=Oa;uf=c[vf+4>>2]|0;if((uf|0)>0|(uf|0)==0&(c[vf>>2]|0)>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ae);o=k;q=h;h=1;i=zf;break a}if(c[(c[f>>2]|0)+456>>2]|0?c[bc>>2]|0:0)Bg(f,1)|0;c[ua>>2]=(c[ua>>2]|0)+2|1;t=pa+((c[p+4>>2]|0)*40|0)|0;c[Zc>>2]=t;r=p+8|0;if((c[r>>2]|0)>0){q=0;do{s=t+(q*40|0)|0;o=s+8|0;i=b[o>>1]|0;if(i&4096){j=i&65535;do if(j&18){do if(j&16384){l=s+12|0;j=(c[s>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(i&16))break;else i=1;else i=j;if(Eg(s,i,1)|0){l=p;j=h;i=zf;oa=3892;break a}gw((c[s+16>>2]|0)+(c[l>>2]|0)|0,0,c[s>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[s>>2]|0);i=b[o>>1]&-16897;b[o>>1]=i}while(0);if(c[s+24>>2]|0?(c[s+16>>2]|0)==(c[s+20>>2]|0):0)break;if(Jg(s)|0){l=p;j=h;i=zf;oa=3892;break a}i=b[o>>1]|0}while(0);i=i&-4097;b[o>>1]=i}if((i&514)==2)Jg(s)|0;q=q+1|0}while((q|0)<(c[r>>2]|0))}if(a[zf>>0]|0){l=p;j=m;i=zf;oa=3898;break a}if(a[qf>>0]&4)Za[c[of>>2]&127](4,c[pf>>2]|0,f,0)|0;c[xf>>2]=((p-m|0)/20|0)+1;o=k;l=100;oa=3884;break a}case 518:{oa=3891;break}case 599:{c[Ce>>2]=32306;c[Ce+4>>2]=86318;c[Ce+8>>2]=31517;Db(11,32001,Ce);i=11;oa=601;break}case 602:{l=p;j=h;i=zf;oa=3892;break a}case 717:{c[De>>2]=32306;c[De+4>>2]=68229;c[De+8>>2]=31517;Db(11,32001,De);o=k;q=h;h=11;i=zf;break a}case 720:{c[Ee>>2]=32306;c[Ee+4>>2]=68229;c[Ee+8>>2]=31517;Db(11,32001,Ee);o=k;q=h;h=11;i=zf;break a}case 730:{Ag(f,34243,Fe);o=k;q=h;h=5;i=zf;break a}case 774:{c[Ge>>2]=A;Ag(f,34294,Ge);o=k;q=h;h=1;i=zf;break a}case 776:{Ag(f,34316,He);o=k;q=h;h=5;i=zf;break a}case 780:{c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,Ie);o=k;l=1;oa=3884;break a}case 782:{c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=0;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}case 922:{j=c[p+4>>2]|0;i=c[p+8>>2]|0;if((j|0)==(d[gd>>0]|0)){Ag(f,(j|0)==0?34425:(i|0)==0?34516:34473,ef);o=k;q=h;h=1;i=zf;break a}do if(!i){if(j|0?(c[bd>>2]|0)>0:0){Ag(f,34370,cf);o=k;q=h;h=5;i=zf;break a}yf=c[f>>2]|0;zf=yf+464|0;yf=yf+472|0;zf=Sv(c[yf>>2]|0,c[yf+4>>2]|0,c[zf>>2]|0,c[zf+4>>2]|0)|0;yf=L()|0;if((yf|0)>0|(yf|0)==0&zf>>>0>0){c[Bf>>2]=787;a[Jd>>0]=2;Ag(f,32436,df);o=k;l=1;oa=3884;break a}else{i=j&255;break}}else{rg(Cf,516);i=1}while(0);a[gd>>0]=i;if((pg(f)|0)==5){c[xf>>2]=(p-m|0)/20|0;a[gd>>0]=1-j;c[Bf>>2]=5;o=k;l=5;oa=3884;break a}i=c[qd>>2]|0;if(i|0)do{c[qd>>2]=c[i+24>>2];do if(!(c[Ze>>2]|0)){zf=i;if((c[_e>>2]|0)>>>0<=zf>>>0?(c[$e>>2]|0)>>>0>zf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{zf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-zf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(Cf,i);while(0);i=c[qd>>2]|0}while((i|0)!=0);c[Gd>>2]=0;c[Fd>>2]=0;a[Id>>0]=0;o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 950:{if((l&255|0)==5){c[xf>>2]=(p-m|0)/20|0;c[Bf>>2]=l;o=k;oa=3884;break a}else oa=1017;break}case 986:{i=c[mf>>2]|0;do if(i|0){if(c[Ze>>2]|0){Xd(Cf,i);break}yf=i;if((c[_e>>2]|0)>>>0<=yf>>>0?(c[$e>>2]|0)>>>0>yf>>>0:0){c[i>>2]=c[af>>2];c[af>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{yf=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-yf;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);do if(c[$c>>2]|0)if(!(a[zf>>0]|0))oa=1003;else i=0;else{if((e[Xc>>1]|0)>=28){i=c[af>>2]|0;if(i|0){c[af>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}i=c[cd>>2]|0;if(!i)i=fd;else{c[cd>>2]=c[i>>2];c[ed>>2]=(c[ed>>2]|0)+1;oa=1004;break}}else i=Yc;c[i>>2]=(c[i>>2]|0)+1;oa=1003}while(0);if((oa|0)==1003){i=_d(Cf,28,0)|0;oa=1004}if((oa|0)==1004)if(!i)i=0;else{ea=i;l=34557;fa=ea+28|0;do{a[ea>>0]=a[l>>0]|0;ea=ea+1|0;l=l+1|0}while((ea|0)<(fa|0))}c[mf>>2]=i;j=c[uf>>2]|0;i=c[z>>2]|0;l=c[j+(i<<4)+12>>2]|0;_a:do if((c[l>>2]|0)!=(c[rf>>2]|0)){if((i|0)>-1){yf=l+78|0;b[yf>>1]=b[yf>>1]|8;yf=(c[j+28>>2]|0)+78|0;b[yf>>1]=b[yf>>1]|8;c[hf>>2]=c[hf>>2]&-17}if((c[jf>>2]|0)==0?(tf=c[sf>>2]|0,(tf|0)>0):0){i=0;l=tf;while(1){j=c[j+(i<<4)+12>>2]|0;if(!(b[j+78>>1]&8))j=l;else{dh(j);j=c[sf>>2]|0}i=i+1|0;if((i|0)>=(j|0))break _a;l=j;j=c[uf>>2]|0}}}while(0);l=(d[vf>>0]|d[vf+1>>0]<<8)&-4|1;a[vf>>0]=l;a[vf+1>>0]=l>>8;l=17;oa=1017;break}case 1135:{c[s+40>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1213:{o=k;q=h;h=i;i=zf;break a}case 1268:{l=p;j=h;i=zf;oa=3892;break a}case 1270:{o=k;q=h;h=i;i=zf;break a}case 1289:{c[Je>>2]=32306;c[Je+4>>2]=87969;c[Je+8>>2]=31517;Db(11,32001,Je);o=k;q=h;h=11;i=zf;break a}case 1328:{o=k;q=h;h=i;i=zf;break a}case 1345:{o=k;q=h;h=i;i=zf;break a}case 1382:{c[r>>2]=0;o=k;q=h;h=7;i=zf;break a}case 1481:{o=k;q=h;h=i;i=zf;break a}case 1492:{o=k;q=h;h=r;i=zf;break a}case 1519:{o=k;q=h;h=i;i=zf;break a}case 2145:{o=k;q=h;h=i;i=zf;break a}case 2221:{o=k;q=h;h=7;i=zf;break a}case 2226:{o=k;q=h;h=i;i=zf;break a}case 2253:{if(!((b[jb>>1]&9216)==0&(c[lb>>2]|0)==0))Cg(Hd);c[Ke>>2]=32306;c[Ke+4>>2]=81024;c[Ke+8>>2]=31517;Db(11,32001,Ke);i=11;oa=2256;break}case 2267:{c[Le>>2]=32306;c[Le+4>>2]=81057;c[Le+8>>2]=31517;Db(11,32001,Le);i=11;oa=2274;break}case 2280:{a[Jd>>0]=2;o=k;q=h;h=6;i=zf;break a}case 2282:{c[Me>>2]=32306;c[Me+4>>2]=72453;c[Me+8>>2]=31517;Db(11,32001,Me);i=0;j=11;oa=2353;break}case 2286:{i=0;j=l;oa=2353;break}case 2301:{if(r){i=c[r+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);i=0;oa=2353;break}else{oa=c[i+20>>2]|0;yf=oa+120|0;c[yf>>2]=(c[yf>>2]|0)+-1;oa=oa+136|0;c[i+16>>2]=c[oa>>2];c[oa>>2]=i;i=0;oa=2353;break}}else{i=0;oa=2353}break}case 2319:{i=0;j=l;oa=2353;break}case 2329:{i=0;j=l;oa=2353;break}case 2406:{o=k;q=h;h=l;i=zf;break a}case 2424:{$b(Cf);l=p;j=h;i=zf;oa=3892;break a}case 2425:{$b(Cf);o=k;q=h;h=i;i=zf;break a}case 2968:{Ag(f,34663,Xe);o=k;q=h;h=1;i=zf;break a}case 3073:{do if(o){i=b[o+8>>1]|0;if((i&514)==514?(a[o+10>>0]|0)==1:0){i=c[o+16>>2]|0;break}if(!(i&1))i=Gg(o,1)|0;else i=0}else i=0;while(0);c[bf>>2]=i;Ag(f,31408,bf);o=k;q=h;h=l;i=zf;break a}case 3094:{o=k;q=h;h=i;i=zf;break a}case 3115:{c[te>>2]=w?34752:34757;Ag(f,34700,te);o=k;q=h;h=1;i=zf;break a}case 3182:{c[ue>>2]=32306;c[ue+4>>2]=67051;c[ue+8>>2]=31517;Db(11,32001,ue);o=k;q=h;h=11;i=zf;break a}case 3215:{if(t<<24>>24==2){oa=o+22|0;b[oa>>1]=b[oa>>1]|128;oa=3236}else oa=3236;break}case 3400:{j=l;i=c[ad>>2]|0;oa=3401;break}case 3458:{o=k;q=h;h=i;i=zf;break a}case 3459:{Wa[c[x+28>>2]&127](c[rf>>2]|0)|0;l=p;j=h;i=zf;oa=3892;break a}case 3576:{oa=3891;break}case 3731:{i=i&65535;oa=3732;break}case 3733:{c[rc>>2]=(c[rc>>2]|0)+1;i=12;j=x;break}case 3844:{o=k;q=-1;m=l;h=9;i=zf;break a}case 3845:{o=k;q=h;h=i;i=zf;break a}case 3846:{o=k;q=h;h=i;i=zf;break a}case 3847:{o=k;q=h;h=i;i=zf;break a}case 3848:{o=k;q=h;h=i;i=zf;break a}case 3849:{o=k;q=h;h=i;i=zf;break a}case 3850:{o=k;q=h;h=i;i=zf;break a}case 3851:{o=k;q=h;h=i;i=zf;break a}case 3852:{o=k;q=h;h=i;i=zf;break a}case 3853:{o=k;q=h;h=i;i=zf;break a}case 3854:{o=k;q=h;h=r;i=zf;break a}case 3855:{o=k;q=h;h=i;i=zf;break a}case 3900:{Ra=Hf;return h|0}}switch(oa|0){case 44:if((pg(f)|0)==5){c[Bf>>2]=5;o=k;l=5;oa=3884;break a}else{o=k;l=(c[Bf>>2]|0)==0?101:1;oa=3884;break a}case 601:{o=k;q=h;h=i;i=zf;break a}case 1017:{o=k;q=h;h=l;i=zf;break a}case 2256:{o=k;q=h;h=i;i=zf;break a}case 2274:{o=k;q=h;h=i;i=zf;break a}case 2353:{b[B>>1]=4;o=A;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=k;q=h;h=j;i=zf;break a}case 3236:{c[ve>>2]=c[p+16>>2];Ag(f,34764,ve);o=k;q=h;h=262;i=zf;break a}case 3401:{c[ad>>2]=i+-1;o=k;q=h;h=j;i=zf;break a}case 3732:{a[Jd>>0]=i;i=12;j=x;break}case 3891:{Ag(f,31223,Be);o=k;q=h;h=18;i=zf;break a}}switch(i&15){case 12:{o=k;q=h;h=j;i=zf;break a}case 2:{l=p;j=h;i=zf;oa=3892;break a}default:h=0}Ra=Hf;return h|0}else{p=q;j=0;k=0;l=q;i=Cf+81|0}while(0);zf=(a[i>>0]|0)==0?9:7;c[Bf>>2]=zf;c[nf>>2]=c[22960+(zf<<2)>>2];Ag(f,31408,nf);n=j;o=k;q=h;m=l;h=zf}while(0);if((oa|0)==3892)if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h){c[h+12>>2]=7;h=j;j=m;oa=3898}else{h=j;j=m;oa=3898}}else{h=j;j=m;oa=3898}if((oa|0)==3898){Ag(f,34831,yf);o=k;q=h;m=j;p=l;h=7}$a:while(1){if((oa|0)==3884){if(n>>>0>>0)break;j=Cf+328|0;k=Cf+324|0;while(1){i=c[Af>>2]|0;if(!i)break $a;zf=c[j>>2]|0;h=zf+h|0;if(Wa[i&127](c[k>>2]|0)|0)break;if(n>>>0>>0)break $a}q=-1;h=9;i=Cf+81|0}k=(a[i>>0]|0)==0?h:7;j=f+124|0;if((c[j>>2]|0)==0&(k|0)!=3082){switch(k|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=k&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[Ef>>2]=h;Ag(f,31408,Ef)}c[Bf>>2]=k;if((k|0)==3082){yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Gf>>2]=(p-m|0)/20|0;c[Gf+4>>2]=yf;c[Gf+8>>2]=zf;Db(3082,34799,Gf);pg(f)|0;if((a[i>>0]|0)==0?(a[Cf+82>>0]|0)==0:0){a[i>>0]=1;if((c[Cf+180>>2]|0)>0)c[Cf+264>>2]=1;h=Cf+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[Cf+236>>2]|0;if(h|0)c[h+12>>2]=7}}else{if((k&251|4|0)==14){h=c[Cf>>2]|0;i=c[h+68>>2]|0;if(!i)h=0;else h=Ya[i&127](h,0,0)|0;c[Cf+72>>2]=h}yf=c[f+188>>2]|0;zf=c[j>>2]|0;c[Ff>>2]=(p-m|0)/20|0;c[Ff+4>>2]=yf;c[Ff+8>>2]=zf;Db(k,34799,Ff);pg(f)|0}if(!(o<<24>>24)){o=0;h=q;l=1;oa=3884;continue}k=Cf+16|0;i=c[k>>2]|0;zf=(c[i+((o&255)+-1<<4)+12>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=(c[i+28>>2]|0)+78|0;b[zf>>1]=b[zf>>1]|8;zf=Cf+24|0;c[zf>>2]=c[zf>>2]&-17;if(c[Cf+56>>2]|0){h=q;l=1;oa=3884;continue}l=Cf+20|0;j=c[l>>2]|0;if((j|0)<=0){h=q;l=1;oa=3884;continue}h=0;while(1){i=c[i+(h<<4)+12>>2]|0;if(b[i+78>>1]&8){dh(i);j=c[l>>2]|0}h=h+1|0;if((h|0)>=(j|0)){h=q;l=1;oa=3884;continue $a}i=c[k>>2]|0}}Gf=f+176|0;c[Gf>>2]=(c[Gf>>2]|0)+n;Gf=l;Ra=Hf;return Gf|0} function $i(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,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,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=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,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,fd=0,gd=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;ud=Ra;Ra=Ra+1392|0;Qc=ud+1352|0;Nc=ud+1344|0;Mc=ud+1328|0;Lc=ud+1320|0;Kc=ud+1304|0;mb=ud+1296|0;Cc=ud+1288|0;Bc=ud+1280|0;ic=ud+1272|0;Eb=ud+1264|0;na=ud+1256|0;bc=ud+1248|0;_b=ud+1232|0;ac=ud+1216|0;$b=ud+1200|0;Xb=ud+1176|0;Wb=ud+1136|0;Ub=ud+1128|0;Db=ud+1120|0;Bb=ud+1112|0;Ma=ud+1104|0;kc=ud+1096|0;Ja=ud+1088|0;Ia=ud+1080|0;Zb=ud+1056|0;Ab=ud+1048|0;xb=ud+1040|0;lb=ud+1032|0;kb=ud+1024|0;jb=ud+1016|0;fb=ud+1008|0;eb=ud+1e3|0;Vc=ud+992|0;Jc=ud+976|0;Uc=ud+960|0;Tc=ud+944|0;wc=ud+920|0;vc=ud+904|0;uc=ud+872|0;tc=ud+840|0;Ib=ud+832|0;Hb=ud+824|0;wb=ud+816|0;ib=ud+808|0;hb=ud+800|0;dc=ud+792|0;jc=ud+784|0;Pc=ud+776|0;Va=ud+768|0;Qa=ud+760|0;Yb=ud+752|0;Vb=ud+744|0;cc=ud+736|0;qc=ud+728|0;o=ud+720|0;n=ud+712|0;i=ud+704|0;od=ud+696|0;nd=ud+688|0;md=ud+680|0;ld=ud+672|0;jd=ud+664|0;id=ud+648|0;gd=ud+640|0;$c=ud+632|0;Yc=ud+624|0;Fc=ud+616|0;Ec=ud+608|0;hc=ud+600|0;bb=ud+592|0;_a=ud+584|0;Za=ud+576|0;Xc=ud+568|0;Wc=ud+544|0;mc=ud+536|0;Ic=ud+528|0;Hc=ud+512|0;Gc=ud+504|0;Oc=ud;pc=ud+496|0;Tb=ud+488|0;Sb=ud+480|0;Mb=ud+472|0;Lb=ud+464|0;Ua=ud+456|0;Ta=ud+448|0;t=ud+440|0;H=ud+432|0;ka=ud+424|0;s=ud+416|0;_=ud+408|0;M=ud+400|0;w=ud+392|0;$=ud+384|0;va=ud+376|0;ua=ud+368|0;ta=ud+360|0;sa=ud+352|0;v=ud+344|0;X=ud+336|0;K=ud+328|0;Fa=ud+320|0;ra=ud+312|0;ja=ud+304|0;u=ud+296|0;qa=ud+288|0;ia=ud+280|0;J=ud+272|0;yc=ud+264|0;Xa=ud+256|0;ha=ud+248|0;Na=ud+240|0;pa=ud+232|0;oa=ud+224|0;ma=ud+216|0;Ka=ud+208|0;Ha=ud+200|0;la=ud+192|0;nc=ud+184|0;U=ud+176|0;gb=ud+168|0;vb=ud+160|0;ub=ud+152|0;tb=ud+144|0;sb=ud+136|0;rb=ud+128|0;yb=ud+120|0;W=ud+112|0;V=ud+104|0;I=ud+96|0;F=ud+88|0;T=ud+80|0;qd=ud+48|0;_c=ud+24|0;Qb=ud+1368|0;td=c[f>>2]|0;sd=a[16752+g>>0]|0;if(sd<<24>>24==0?td>>>0>=(c[f+1208>>2]|0)>>>0:0){l=f+4|0;m=c[l>>2]|0;i=f+8|0;if(td>>>0>i>>>0?(c[f>>2]=td+-12,aj(m,b[td+2>>1]|0,td+4|0),O=c[f>>2]|0,O>>>0>i>>>0):0){k=O;do{td=c[l>>2]|0;c[f>>2]=k+-12;aj(td,b[k+2>>1]|0,k+4|0);k=c[f>>2]|0}while(k>>>0>i>>>0)}cd(m,38790,T);c[l>>2]=m;f=0;Ra=ud;return f|0}a:do switch(g|0){case 0:{a[j+199>>0]=1;break}case 1:{a[j+199>>0]=2;break}case 2:{w=c[j>>2]|0;if(!(a[j+18>>0]|0)){A=w+81|0;if((a[A>>0]|0)==0?(kd=j+36|0,(c[kd>>2]|0)==0):0){z=j+8|0;k=c[z>>2]|0;if(!k){if((c[j+116>>2]|0)==0?(b[w+76>>1]&8)==0:0)a[j+23>>0]=1;b:do if(!(c[w+272>>2]|0)){do if((e[w+276>>1]|0)>=224){k=w+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}k=w+296|0;l=c[k>>2]|0;if(!l){k=w+292|0;break}else{c[k>>2]=c[l>>2];qd=w+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break b}}else k=w+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=29}else rd=29;while(0);if((rd|0)==29)l=_d(w,224,0)|0;if(l|0){I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=w;k=w+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[z>>2]=l;Di(l,61,0,1,0)|0;rd=34}}else{l=k;rd=34}if((rd|0)==34){x=l+108|0;k=c[x>>2]|0;y=l+112|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;I=c[l+104>>2]|0;a[I+(k*20|0)>>0]=69;I=I+(k*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else Di(l,69,0,0,0)|0;do if(!(a[A>>0]|0)){v=j+84|0;i=c[v>>2]|0;if(!i){if(!(c[j+68>>2]|0))break;k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}else{k=c[x>>2]|0;if(!(a[(c[l>>2]|0)+81>>0]|0))m=c[l+104>>2]|0;else m=59308}c[m+8>>2]=k;o=w+20|0;c:do if((c[o>>2]|0)>0){p=l+152|0;q=w+16|0;r=j+80|0;s=l+104|0;t=l+156|0;u=w+165|0;k=0;while(1){m=1<>2]=c[p>>2]|m;if((k|0)!=1?a[(c[(c[(c[l>>2]|0)+16>>2]|0)+(k<<4)+4>>2]|0)+9>>0]|0:0)c[t>>2]=c[t>>2]|m;n=c[(c[q>>2]|0)+(k<<4)+12>>2]|0;i=(c[r>>2]&m|0)!=0&1;h=c[n>>2]|0;n=c[n+4>>2]|0;m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=2;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=k;c[qd+(m*20|0)+8>>2]=i;c[qd+(m*20|0)+12>>2]=h;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(l,2,k,i,h)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){qd=c[s>>2]|0;a[qd+(m*20|0)+1>>0]=-3;c[qd+(m*20|0)+16>>2]=n}if(a[u>>0]|0)break;m=c[x>>2]|0;if((m|0)<=0)break;b[(c[s>>2]|0)+((m+-1|0)*20|0)+2>>1]=1}while(0);k=k+1|0;if((k|0)>=(c[o>>2]|0))break c;i=c[v>>2]|0}}while(0);o=j+204|0;if((c[o>>2]|0)>0){p=j+252|0;q=l+104|0;n=0;do{k=c[(c[(c[p>>2]|0)+(n<<2)>>2]|0)+64>>2]|0;d:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(w|0))break d;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);m=c[x>>2]|0;if((c[y>>2]|0)>(m|0)){c[x>>2]=m+1;I=c[q>>2]|0;a[I+(m*20|0)>>0]=-96;I=I+(m*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}else m=Di(l,160,0,0,0)|0;do if(!(a[(c[l>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[x>>2]|0)+-1|0;i=c[q>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(l,i+(m*20|0)|0,k,-12);break}if(!k)break;c[i+(m*20|0)+16>>2]=k;a[h>>0]=-12;qd=k+12|0;c[qd>>2]=(c[qd>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}c[o>>2]=0;k=c[z>>2]|0;e:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;f:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=91;else{k=0;break e}else{do if((e[i+276>>1]|0)>=224){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];qd=i+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break f}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=91}while(0);if((rd|0)==91)k=_d(i,224,0)|0;if(!k)k=0;else{I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=i;m=i+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=k;c[k+8>>2]=i;c[k+4>>2]=0;c[m>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[z>>2]=k;Di(k,61,0,1,0)|0}}while(0);p=j+104|0;if((c[p>>2]|0)>0){q=j+108|0;r=k+108|0;s=k+112|0;t=k+104|0;o=0;do{u=c[q>>2]|0;i=c[u+(o<<4)>>2]|0;h=c[u+(o<<4)+4>>2]|0;n=d[u+(o<<4)+8>>0]|0;u=c[u+(o<<4)+12>>2]|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;qd=c[t>>2]|0;a[qd+(m*20|0)>>0]=-97;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=i;c[qd+(m*20|0)+8>>2]=h;c[qd+(m*20|0)+12>>2]=n;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(k,159,i,h,n)|0;do if(!(a[(c[k>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;i=c[t>>2]|0;h=i+(m*20|0)+1|0;if(a[h>>0]|0){Ei(k,i+(m*20|0)|0,u,-1);break}if(!u)break;c[i+(m*20|0)+16>>2]=u;a[h>>0]=-1}while(0);o=o+1|0}while((o|0)<(c[p>>2]|0))}o=c[z>>2]|0;k=c[j+112>>2]|0;g:do if(k|0){p=(c[j>>2]|0)+16|0;q=o+108|0;r=o+112|0;s=o+104|0;t=j+40|0;do{n=c[k+8>>2]|0;h=c[k+12>>2]|0;Gj(j,0,n,c[(c[(c[p>>2]|0)+(n<<4)+12>>2]|0)+72>>2]|0,108);n=h+-1|0;i=c[c[k+4>>2]>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;qd=c[s>>2]|0;a[qd+(m*20|0)>>0]=110;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=0;c[qd+(m*20|0)+8>>2]=n;c[qd+(m*20|0)+12>>2]=0;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else m=Di(o,110,0,n,0)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;Ei(o,(c[s>>2]|0)+(m*20|0)|0,i,0)}m=ed(o,12,17904)|0;if(!m)break g;c[m+8>>2]=h;qd=h+2|0;c[m+12>>2]=qd;c[m+52>>2]=h;c[m+64>>2]=n;c[m+72>>2]=h;b[m+62>>1]=16;c[m+88>>2]=h+1;c[m+112>>2]=h;c[m+124>>2]=h;c[m+148>>2]=qd;c[m+144>>2]=h;c[m+208>>2]=h;if(!(c[t>>2]|0))c[t>>2]=1;k=c[k>>2]|0}while((k|0)!=0)}while(0);o=c[j+68>>2]|0;if(o|0?(a[j+23>>0]=0,(c[o>>2]|0)>0):0){n=0;do{k=c[o+4+(n*20|0)>>2]|0;p=c[o+4+(n*20|0)+16>>2]|0;do if(k){if((a[k>>0]|0)!=-88){h=Jj(j,k,p)|0;rd=132;break}h=c[z>>2]|0;k=c[k+28>>2]|0;m=h+108|0;i=c[m>>2]|0;if((c[h+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[h+104>>2]|0;a[qd+(i*20|0)>>0]=78;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=k;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(h,78,k,p,0)|0;break}}else{h=Jj(j,0,p)|0;rd=132}while(0);do if((rd|0)==132){rd=0;if((h|0)==(p|0))break;k=c[z>>2]|0;if(!k)break;m=k+108|0;i=c[m>>2]|0;if((c[k+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[k+104>>2]|0;a[qd+(i*20|0)>>0]=79;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=h;c[qd+(i*20|0)+8>>2]=p;c[qd+(i*20|0)+12>>2]=0;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0;break}else{Di(k,79,h,p,0)|0;break}}while(0);n=n+1|0}while((n|0)<(c[o>>2]|0))}k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;rd=c[l+104>>2]|0;a[rd+(k*20|0)>>0]=11;b[rd+(k*20|0)+2>>1]=0;c[rd+(k*20|0)+4>>2]=0;c[rd+(k*20|0)+8>>2]=1;c[rd+(k*20|0)+12>>2]=0;c[rd+(k*20|0)+16>>2]=0;a[rd+(k*20|0)+1>>0]=0;break}else{Di(l,11,0,1,0)|0;break}}while(0);if((c[kd>>2]|0)==0?(a[A>>0]|0)==0:0){hd(l,j);c[j+12>>2]=101;break a}}c[j+12>>2]=1;break a}k=j+12|0;if(!(c[k>>2]|0))c[k>>2]=1}break}case 3:{o=c[td+-8>>2]|0;n=c[j>>2]|0;do if(((a[n+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(z=c[n+312>>2]|0,z|0):0){k=$a[z&127](c[n+316>>2]|0,22,36223,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,F);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,I);c[j+12>>2]=1;break a}}while(0);h=j+8|0;k=c[h>>2]|0;if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;h:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=167;else break a;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break h}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=167}while(0);if((rd|0)==167)m=_d(i,224,0)|0;if(!m)break a;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;r=m}else r=k;if((o|0)==7){k=r+108|0;l=c[k>>2]|0;if((c[r+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}q=n+20|0;if((c[q>>2]|0)>0){h=(o|0)==9?2:1;m=r+108|0;k=r+112|0;n=r+104|0;o=r+152|0;p=r+156|0;i=0;do{l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;j=c[n>>2]|0;a[j+(l*20|0)>>0]=2;b[j+(l*20|0)+2>>1]=0;c[j+(l*20|0)+4>>2]=i;c[j+(l*20|0)+8>>2]=h;c[j+(l*20|0)+12>>2]=0;c[j+(l*20|0)+16>>2]=0;a[j+(l*20|0)+1>>0]=0}else Di(r,2,i,h,0)|0;l=1<>2]=c[o>>2]|l;if((i|0)!=1?a[(c[(c[(c[r>>2]|0)+16>>2]|0)+(i<<4)+4>>2]|0)+9>>0]|0:0)c[p>>2]=c[p>>2]|l;i=i+1|0}while((i|0)<(c[q>>2]|0))}else{m=r+108|0;k=r+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;I=c[r+104>>2]|0;a[I+(l*20|0)>>0]=1;I=I+(l*20|0)+1|0;J=I+19|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));break a}else{Di(r,1,0,0,0)|0;break a}}case 4:{c[td+16>>2]=7;break}case 300:case 7:case 6:case 5:{c[td+4>>2]=e[td+2>>1];break}case 9:case 8:{k=(b[td+-10>>1]|0)==12;h=k&1;k=k?39254:39263;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(S=c[l+312>>2]|0,S|0):0){k=$a[S&127](c[l+316>>2]|0,22,k,0,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,V);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,W);c[j+12>>2]=1;break a}}while(0);i=j+8|0;k=c[i>>2]|0;if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;i:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=213;else break a;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break i}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=213}while(0);if((rd|0)==213)k=_d(m,224,0)|0;if(!k)break a;I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[i>>2]=k;Di(k,61,0,1,0)|0}l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[k+104>>2]|0;a[j+(m*20|0)>>0]=1;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=h;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break a}else{Di(k,1,1,h,0)|0;break a}}case 10:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;j:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;k:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=236;else break j;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break k}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=236}while(0);if((rd|0)==236)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=241}}else{i=k;rd=241}while(0);l:do if((rd|0)==241){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(pb=c[k+312>>2]|0,pb|0):0){k=$a[pb&127](c[k+316>>2]|0,32,36223,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,yb);c[j+12>>2]=23;break l}if((k|2|0)==2)if(!k)break;else break l;else{cd(j,39231,rb);c[j+12>>2]=1;break l}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=(c[i+104>>2]|0)+(k*20|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}else k=Di(i,0,0,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 11:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;m:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;n:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=291;else break m;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break n}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=291}while(0);if((rd|0)==291)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=296}}else{i=k;rd=296}while(0);o:do if((rd|0)==296){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(qb=c[k+312>>2]|0,qb|0):0){k=$a[qb&127](c[k+316>>2]|0,32,39270,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,sb);c[j+12>>2]=23;break o}if((k|2|0)==2)if(!k)break;else break o;else{cd(j,39231,tb);c[j+12>>2]=1;break o}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=1;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,1,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 12:{n=qj(c[j>>2]|0,td+4|0)|0;if(n|0){h=j+8|0;k=c[h>>2]|0;p:do if(!k){i=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[i+76>>1]&8)==0:0)a[j+23>>0]=1;q:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=346;else break p;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break q}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=346}while(0);if((rd|0)==346)m=_d(i,224,0)|0;if(m|0){I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[h>>2]=m;Di(m,61,0,1,0)|0;i=m;rd=351}}else{i=k;rd=351}while(0);r:do if((rd|0)==351){k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(nb=c[k+312>>2]|0,nb|0):0){k=$a[nb&127](c[k+316>>2]|0,32,39254,n,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,ub);c[j+12>>2]=23;break r}if((k|2|0)==2)if(!k)break;else break r;else{cd(j,39231,vb);c[j+12>>2]=1;break r}}while(0);m=i+108|0;k=c[m>>2]|0;if((c[i+112>>2]|0)>(k|0)){c[m>>2]=k+1;j=c[i+104>>2]|0;a[j+(k*20|0)>>0]=0;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=2;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(i,0,2,0,0)|0;l=c[i>>2]|0;if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;l=c[i+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-7;break a}else{Ei(i,l+(k*20|0)|0,n,-7);break a}}if(l|0){if(c[l+480>>2]|0){Xd(l,n);break a}j=n;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}while(0);k=c[j>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}j=n;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[n>>2]=c[j>>2];c[j>>2]=n;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break a}else{j=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break a}}break}case 13:{bj(j,td+-8|0,td+4|0,c[td+-44>>2]|0,0,0,c[td+-20>>2]|0);break}case 14:{rd=j+24|0;a[rd>>0]=(a[rd>>0]|0)+1<<24>>24;j=(c[j>>2]|0)+272|0;c[j>>2]=(c[j>>2]|0)+1;break}case 226:case 93:case 76:case 67:case 57:case 42:case 21:case 18:case 15:{c[td+16>>2]=0;break}case 16:{c[td+-20>>2]=1;break}case 43:case 17:{c[td+4>>2]=1;break}case 19:{cj(j,td+-20|0,td+-8|0,c[td+4>>2]&255,0);break}case 20:{k=td+4|0;cj(j,0,0,0,c[k>>2]|0);k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 22:{i=c[td+8>>2]|0;k=c[td+4>>2]|0;do if((i|0)==5)if(!k)k=0;else{l=a[k>>0]|0;do if(!(l<<24>>24)){l=38132;rd=397}else{qd=l&255;l=208+qd|0;if((qd|32|0)==114){l=a[k+1>>0]|0;if(!(l<<24>>24)){l=38133;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==111){l=a[k+2>>0]|0;if(!(l<<24>>24)){l=38134;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==119){l=a[k+3>>0]|0;if(!(l<<24>>24)){l=38135;rd=397;break}qd=l&255;l=208+qd|0;if((qd|32|0)==105){l=a[k+4>>0]|0;if(!(l<<24>>24)){l=38136;rd=397;break}l=l&255;if((l|32|0)==100)break;else{m=100;l=208+l|0}}else m=105}else m=119}else m=111}else m=114;cb=d[l>>0]|0;rd=401}while(0);if((rd|0)==397){cb=0;m=a[208+(d[l>>0]|0)>>0]|0;rd=401}if((rd|0)==401?(cb|0)!=(m&255|0):0)break;c[td+-8>>2]=96;break a}while(0);c[td+-8>>2]=0;c[gb>>2]=i;c[gb+4>>2]=k;cd(j,38466,gb);break}case 23:{h=td+-8|0;q=c[j>>2]|0;n=c[j+228>>2]|0;if(n|0){t=n+42|0;if((c[q+116>>2]|0)<=(b[t>>1]|0)){c[U>>2]=c[n>>2];cd(j,38221,U);break a}i=td+-4|0;s=td+8|0;m=(c[i>>2]|0)+2+(c[s>>2]|0)|0;p=q+272|0;s:do if(c[p>>2]|0)if(!(a[q+81>>0]|0))rd=417;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];r=q+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break s}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=417}while(0);if((rd|0)==417)r=_d(q,m,0)|0;if(r|0){t:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;u:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=443;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){pd=c[14978]|0;od=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;nd=L()|0;c[14768]=((nd|0)<0|(nd|0)==0&od>>>0<=pd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break t;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break t}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=443;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=443}while(0);if((rd|0)==443)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=r;nd=h;od=c[nd+4>>2]|0;pd=l;c[pd>>2]=c[nd>>2];c[pd+4>>2]=od;pd=j+272|0;c[k+12>>2]=c[pd>>2];c[pd>>2]=k}while(0);ew(r|0,c[h>>2]|0,c[i>>2]|0)|0;a[r+(c[i>>2]|0)>>0]=0;k=a[r>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[r+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=r+m|0;if((a[r+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[r+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}pd=b[t>>1]|0;k=pd<<16>>16;o=n+4|0;v:do if(pd<<16>>16>0){n=c[o>>2]|0;h=0;while(1){m=c[n+(h<<4)>>2]|0;if(m|0){pd=a[r>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(pd<<24>>24==0|(l|0)!=0)){i=r;do{i=i+1|0;m=m+1|0;pd=a[i>>0]|0;l=(d[208+(pd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(l|0)!=0))}if(!l)break}h=h+1|0;if((h|0)>=(k|0))break v}c[nc>>2]=r;cd(j,41735,nc);if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}while(0);do if(!(k&7)){l=c[o>>2]|0;m=(k<<4)+128|0;w:do if(!l){if(c[p>>2]|0){if(a[q+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){k=q+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}k=q+296|0;l=c[k>>2]|0;if(!l){k=q+292|0;break}else{c[k>>2]=c[l>>2];sc=q+284|0;c[sc>>2]=(c[sc>>2]|0)+1;sc=l;rd=488;break w}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}sc=_d(q,m,0)|0;rd=488}else{rd=l;if((c[q+304>>2]|0)>>>0<=rd>>>0?(c[q+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){rd=498;break}sc=Zd(q,l,m,0)|0;rd=488;break}sc=Zd(q,l,m,0)|0;rd=488}while(0);if((rd|0)==488?sc|0:0){l=sc;k=b[t>>1]|0;rd=498}if((rd|0)==498){c[o>>2]=l;q=k;p=l;break}if(c[q+480>>2]|0){Xd(q,r);break a}j=r;if((c[q+304>>2]|0)>>>0<=j>>>0?(c[q+308>>2]|0)>>>0>j>>>0:0){j=q+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break a}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break a}}else{q=k;p=c[o>>2]|0}while(0);o=p+(q<<4)|0;k=p+(q<<4)+4|0;c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[o>>2]=r;k=c[s>>2]|0;if(!k){a[p+(q<<4)+13>>0]=65;a[p+(q<<4)+14>>0]=1}else{n=r+((Eu(r)|0)&1073741823)+1|0;ew(n|0,c[td+4>>2]|0,k|0)|0;a[n+(c[s>>2]|0)>>0]=0;k=a[n>>0]|0;if((a[880+(k&255)>>0]|0)<0){i=k<<24>>24==91?93:k;m=0;k=1;while(1){l=a[n+k>>0]|0;if(l<<24>>24==i<<24>>24){k=k+1|0;l=n+m|0;if((a[n+k>>0]|0)!=i<<24>>24)break;a[l>>0]=i}else a[n+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0;k=a[n>>0]|0}x:do if(!(k<<24>>24)){k=0;m=67}else{l=67;h=0;i=n;m=0;while(1){h=h<<8|d[208+(k&255)>>0];i=i+1|0;y:do if((h|0)<1685026146){if((h|0)<1667785074){switch(h|0){case 1651273570:break;default:{rd=521;break y}}switch(l<<24>>24){case 69:case 67:break;default:{rd=520;break y}}k=a[i>>0]|0;m=k<<24>>24==40?i:m;l=65;break}if((h|0)<1668050786)switch(h|0){case 1667785074:{k=i;l=66;rd=522;break y}default:{rd=521;break y}}switch(h|0){case 1668050786:break;default:{rd=521;break y}}k=m;l=66;rd=522}else{if((h|0)>=1919246700)if((h|0)<1952807028){switch(h|0){case 1919246700:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}else{rd=520;break}}else{switch(h|0){case 1952807028:break;default:{rd=521;break y}}k=m;l=66;rd=522;break}if((h|0)<1718382433){switch(h|0){case 1685026146:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}else{switch(h|0){case 1718382433:break;default:{rd=521;break y}}if(l<<24>>24==67){k=m;l=69;rd=522;break}}k=m;rd=522}while(0);if((rd|0)==520){k=m;rd=522}else if((rd|0)==521){rd=0;if((h&16777215|0)==6909556){k=m;m=68;break x}else{k=m;rd=522}}if((rd|0)==522){rd=0;m=k;k=a[i>>0]|0}if(!(k<<24>>24)){k=m;m=l;break}}}while(0);if(o|0){c[qd>>2]=0;z:do if(m<<24>>24<67){if(!k){c[qd>>2]=16;k=5;rd=533;break}l=a[k>>0]|0;if(l<<24>>24){while(1){if(((l&255)+-48|0)>>>0<10)break;k=k+1|0;l=a[k>>0]|0;if(!(l<<24>>24)){k=1;rd=533;break z}}ii(k,qd)|0;k=c[qd>>2]|0;if((k|0)<1016){k=((k|0)/4|0)+1|0;rd=533}else k=255}else{k=1;rd=533}}else{k=1;rd=533}while(0);a[p+(q<<4)+14>>0]=k}a[p+(q<<4)+13>>0]=m;rd=p+(q<<4)+15|0;a[rd>>0]=a[rd>>0]|4}b[t>>1]=(b[t>>1]|0)+1<<16>>16;c[j+76>>2]=0}}break}case 99:case 60:case 24:{c[td+20>>2]=0;c[td+16>>2]=0;break}case 25:{c[td+-28>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-32>>2]|0);break}case 26:{c[td+-52>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-56>>2]|0);break}case 27:{c[td+-4>>2]=(c[td+4>>2]|0)+(c[td+8>>2]|0)-(c[td+-8>>2]|0);break}case 28:{c[td+16>>2]=h;break}case 62:case 29:{qd=td+4|0;rd=c[qd+4>>2]|0;j=j+72|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 30:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 31:{dj(j,c[td+-8>>2]|0,(c[td+-20>>2]|0)+1|0,c[td+4>>2]|0);break}case 32:{dj(j,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 33:{rd=ej(j,165,c[td+-8>>2]|0,0)|0;dj(j,rd,c[td+-20>>2]|0,c[td+4>>2]|0);break}case 34:{o=td+4|0;p=td+8|0;q=fj(j,110,c[o>>2]|0,c[p>>2]|0)|0;do if(q|0?(c[q+4>>2]&67108864|0)==0:0){l=c[q+8>>2]|0;n=a[l>>0]|0;h=d[208+(n&255)>>0]|0;k=h+-116|0;n=n<<24>>24==0;if(!(n|(k|0)!=0)){m=41806;i=l;do{i=i+1|0;m=m+1|0;rd=a[i>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0){k=h+-102|0;if(!(n|(k|0)!=0)){m=41811;do{l=l+1|0;m=m+1|0;rd=a[l>>0]|0;k=(d[208+(rd&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(rd<<24>>24==0|(k|0)!=0))}if(k|0)break}a[q>>0]=-97}while(0);rd=c[o>>2]|0;dj(j,q,rd,rd+(c[p>>2]|0)|0);break}case 35:{i=c[td+4>>2]|0;m=c[j+228>>2]|0;if(((m|0?(aa=m+42|0,l=b[aa>>1]|0,l<<16>>16>=1):0)?(rd=c[m+4>>2]|0,j=(l<<16>>16)+-1|0,a[rd+(j<<4)+12>>0]=i,qd=m+36|0,c[qd>>2]=c[qd>>2]|512,a[rd+(j<<4)+15>>0]&8):0)?(k=c[m+8>>2]|0,k|0):0)while(1){if(((l<<16>>16)+-1|0)==(b[c[k+4>>2]>>1]|0)){j=k+55|0;rd=d[j>>0]|d[j+1>>0]<<8|8;a[j>>0]=rd;a[j+1>>0]=rd>>8}k=c[k+20>>2]|0;if(!k)break a;l=b[aa>>1]|0}break}case 36:{gj(j,0,c[td+-8>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0);break}case 37:{hj(j,0,0,0,0,c[td+4>>2]|0,0,0,0,0,1);break}case 38:{k=c[td+-8>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Ob=j+200|0,(a[Ob>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;A:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=586;else{rd=588;break A}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=586}while(0);if((rd|0)==586)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=588}else rd=588;while(0);if((rd|0)==588){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Ob>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;C:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=621;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=621;break C}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=621}while(0);if((rd|0)==621)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 39:{ij(j,0,td+-20|0,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 40:{l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(x=c[k+16>>2]|0,x|0):0)a[x+24>>0]=l;break}case 41:{m=c[j+228>>2]|0;if(m|0?(wa=(b[m+42>>1]|0)+-1|0,ba=c[j>>2]|0,ca=qj(ba,td+4|0)|0,ca|0):0){l=c[j>>2]|0;k=a[l+78>>0]|0;qd=a[l+165>>0]|0;l=Zi(l,k,ca,qd&255)|0;do if(!(qd<<24>>24)){if(!l){N=_i(j,k,0,ca)|0;rd=636;break}if(!(c[l+12>>2]|0)){N=_i(j,k,l,ca)|0;rd=636}}else{N=l;rd=636}while(0);if((rd|0)==636?(N|0)==0:0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,ca);break a}j=ca;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[ca>>2]=c[j>>2];c[j>>2]=ca;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](ca);break a}else{j=Wa[c[29352>>2]&127](ca)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ca);break a}}l=m+4|0;k=c[(c[l>>2]|0)+(wa<<4)+8>>2]|0;do if(k|0){if(ba|0){if(c[ba+480>>2]|0){Xd(ba,k);break}j=k;if((c[ba+304>>2]|0)>>>0<=j>>>0?(c[ba+308>>2]|0)>>>0>j>>>0:0){j=ba+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[(c[l>>2]|0)+(wa<<4)+8>>2]=ca;k=c[m+8>>2]|0;if(k|0)do{if((wa|0)==(b[c[k+4>>2]>>1]|0))c[c[k+32>>2]>>2]=c[(c[l>>2]|0)+(wa<<4)+8>>2];k=c[k+20>>2]|0}while((k|0)!=0)}break}case 44:{c[td+16>>2]=0;break}case 45:{j=td+-8|0;c[j>>2]=c[j>>2]&~c[td+8>>2]|c[td+4>>2];break}case 46:{c[td+-8>>2]=0;c[td+-4>>2]=0;break}case 47:{c[td+-20>>2]=0;c[td+-16>>2]=0;break}case 48:{c[td+-20>>2]=c[td+4>>2];c[td+-16>>2]=255;break}case 49:{c[td+-20>>2]=c[td+4>>2]<<8;c[td+-16>>2]=65280;break}case 50:{c[td+-8>>2]=8;break}case 51:{c[td+-8>>2]=9;break}case 52:{c[td+4>>2]=10;break}case 53:{c[td+4>>2]=7;break}case 54:{c[td+-8>>2]=0;break}case 55:{c[td+-20>>2]=0;break}case 156:case 71:case 56:{c[td+-8>>2]=c[td+4>>2];break}case 227:case 201:case 198:case 75:case 58:{c[td+-8>>2]=1;break}case 59:{c[td+-8>>2]=0;break}case 61:{c[j+76>>2]=0;break}case 63:{gj(j,c[td+-32>>2]|0,c[td+4>>2]|0,c[td+-20>>2]|0,0);break}case 64:{hj(j,0,0,0,c[td+-20>>2]|0,c[td+4>>2]|0,0,0,0,0,1);break}case 65:{k=c[td+-20>>2]|0;l=c[j+228>>2]|0;m=c[j>>2]|0;if((l|0?(Pb=j+200|0,(a[Pb>>0]|0)!=1):0)?(b[(c[(c[(c[m+16>>2]|0)+(d[m+164>>0]<<4)+4>>2]|0)+4>>2]|0)+22>>1]&1)==0:0){o=l+24|0;n=nj(m,c[o>>2]|0,k)|0;c[o>>2]=n;o=c[j+76>>2]|0;if(!o)break a;s=j+72|0;if(!n)break a;p=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;q=c[s>>2]|0;D:do if(q){i=Sv(o|0,0,1,0)|0;h=L()|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=695;else{rd=697;break D}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=695}while(0);if((rd|0)==695)r=_d(m,i,h)|0;if(r){ew(r|0,q|0,o|0)|0;a[r+o>>0]=0;k=n+4+(p*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=697}else rd=697;while(0);if((rd|0)==697){k=n+4+(p*20|0)+4|0;c[k>>2]=0}if((d[Pb>>0]|0)<=1)break a;i=c[k>>2]|0;m=c[j>>2]|0;F:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=730;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=730;break F}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=730}while(0);if((rd|0)==730)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k;break a}if(k|0)ni(m,k);break}case 66:{ij(j,c[td+-68>>2]|0,td+-32|0,c[td+-20>>2]|0,c[td+-8>>2]|0);l=c[td+4>>2]|0;k=c[j+228>>2]|0;if(k|0?(y=c[k+16>>2]|0,y|0):0)a[y+24>>0]=l;break}case 70:case 68:{c[td+16>>2]=11;break}case 69:{c[td+-20>>2]=c[td+4>>2];break}case 72:{c[td+4>>2]=4;break}case 157:case 73:{c[td+4>>2]=5;break}case 74:{jj(j,c[td+4>>2]|0,0,c[td+-8>>2]|0);break}case 77:{h=td+-44|0;i=td+-32|0;o=c[td+-20>>2]|0;l=c[td+4>>2]|0;k=c[td+-80>>2]|0;m=c[td+-56>>2]|0;p=c[j>>2]|0;if((b[j+196>>1]|0)<=0){bj(j,h,i,k,1,0,m);n=c[j+228>>2]|0;if((n|0)!=0?(c[j+36>>2]|0)==0:0){k=c[j>>2]|0;do if(c[td+-28>>2]|0){if(a[k+165>>0]|0){cd(j,39404,Ha);h=0;break}if((wk(k,h)|0)<0){c[Ka>>2]=h;cd(j,39421,Ka);h=i}else h=i}while(0);m=c[n+72>>2]|0;if(!m)k=-1e6;else{i=c[p+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}pd=c[j>>2]|0;c[Qb>>2]=j;pd=c[pd+16>>2]|0;c[Qb+12>>2]=c[pd+(k<<4)>>2];c[Qb+4>>2]=c[pd+(k<<4)+12>>2];c[Qb+16>>2]=39579;c[Qb+20>>2]=h;c[Qb+8>>2]=(k|0)==1&1;if(!(cl(Qb,l)|0)){if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(p,l,1)|0}c[n+12>>2]=l;pd=gk(p,o,1)|0;c[n+24>>2]=pd;if(!(a[p+81>>0]|0)){m=j+188|0;l=c[m>>2]|0;m=c[m+4>>2]|0;i=_c;c[i>>2]=l;c[i+4>>2]=m;i=l;if((a[i>>0]|0)!=59){l=i+m|0;c[_c>>2]=l}m=_c+4|0;c[m>>2]=0;i=c[td+-92>>2]|0;l=l-i|0;do l=l+-1|0;while((a[880+(d[i+l>>0]|0)>>0]&1)!=0);c[_c>>2]=i+l;c[m>>2]=1;cj(j,0,_c,0,0)}}else k=l}else k=l}else{cd(j,43004,la);k=l}if(k|0)pi(p,k,1);if((d[j+200>>0]|0)>1){if(o|0){k=qd+8|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[qd>>2]=j;c[qd+4>>2]=124;k=c[o>>2]|0;if((k|0)>0){l=o+4|0;while(1){m=c[l>>2]|0;if(m|0?_j(qd,m)|0:0)break;if((k|0)>1){k=k+-1|0;l=l+20|0}else break}h=c[o>>2]|0;if((h|0)>0){m=j+272|0;l=0;do{i=c[o+4+(l*20|0)+4>>2]|0;k=c[m>>2]|0;G:do if(k|0){while(1){if((c[k>>2]|0)==(i|0))break;k=c[k+12>>2]|0;if(!k)break G}c[k>>2]=0}while(0);l=l+1|0}while((l|0)!=(h|0))}}rd=781}}else rd=781;if((rd|0)==781?o|0:0)ri(p,o);break}case 78:{jj(j,c[td+4>>2]|0,1,c[td+-8>>2]|0);break}case 79:{c[qd>>2]=c[7517];c[qd+4>>2]=c[7518];c[qd+8>>2]=c[7519];c[qd+12>>2]=c[7520];c[qd+16>>2]=c[7521];c[qd+20>>2]=c[7522];k=td+4|0;kj(j,c[k>>2]|0,qd)|0;k=c[k>>2]|0;if(k|0)pi(c[j>>2]|0,k,1);break}case 80:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){H:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break H}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,ma)}}while(0);c[td+-20>>2]=q;break}case 81:{q=c[td+4>>2]|0;do if(!q){o=c[j>>2]|0;p=c[td+-8>>2]|0;if(p|0){I:do if((c[p>>2]|0)>0){m=o+480|0;i=o+304|0;h=o+308|0;n=o+300|0;if(!o){l=0;while(1){k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(0,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(0,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=l+1|0;if((l|0)>=(c[p>>2]|0))break I}}l=0;do{k=c[p+8+(l<<4)+4>>2]|0;if(k|0)ri(o,k);k=c[p+8+(l<<4)+8>>2]|0;if(k|0)pi(o,k,1);k=c[p+8+(l<<4)>>2]|0;do if(k|0){if(c[m>>2]|0){Xd(o,k);break}j=k;if((c[i>>2]|0)>>>0<=j>>>0?(c[h>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[n>>2];c[n>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);l=l+1|0}while((l|0)<(c[p>>2]|0))}while(0);if(o|0){if(c[o+480>>2]|0){Xd(o,p);break}j=p;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[p>>2]=c[j>>2];c[j>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{j=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}}else{c[q+64>>2]=c[td+-8>>2];k=c[q+52>>2]|0;if(k|0){c[q+56>>2]=0;h=q+8|0;c[h>>2]=c[h>>2]|256;m=q;i=0;while(1){i=i+1|0;l=c[k+52>>2]|0;c[k+56>>2]=m;rd=k+8|0;c[rd>>2]=c[rd>>2]|256;if(!l)break;else{m=k;k=l}}if((c[h>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,oa)}}while(0);c[td+-32>>2]=q;break}case 82:{h=td+4|0;n=c[h>>2]|0;if(n|0?(da=c[n+52>>2]|0,da|0):0){c[n+56>>2]=0;o=n+8|0;c[o>>2]=c[o>>2]|256;m=n;i=0;l=da;while(1){i=i+1|0;k=c[l+52>>2]|0;c[l+56>>2]=m;rd=l+8|0;c[rd>>2]=c[rd>>2]|256;if(!k)break;else{m=l;l=k}}if((c[o>>2]&1024|0)==0?(rd=c[(c[j>>2]|0)+124>>2]|0,(rd|0)>0&(i|0)>=(rd|0)):0)cd(j,44434,pa)}c[h>>2]=n;break}case 83:{k=c[td+4>>2]|0;p=td+-20|0;o=c[p>>2]|0;do if(k){l=k+52|0;m=c[l>>2]|0;if(m){c[qd+4>>2]=0;c[k+56>>2]=0;n=k+8|0;c[n>>2]=c[n>>2]|256;i=k;h=0;while(1){h=h+1|0;l=c[m+52>>2]|0;c[m+56>>2]=i;pd=m+8|0;c[pd>>2]=c[pd>>2]|256;if(!l)break;else{i=m;m=l}}if((c[n>>2]&1024|0)==0?(pd=c[(c[j>>2]|0)+124>>2]|0,(pd|0)>0&(h|0)>=(pd|0)):0)cd(j,44434,Na);l=mj(j,0,lj(j,0,0,0,qd,k,0,0)|0,0,0,0,0,0,0)|0;if(!l){rd=899;break}k=l;l=l+52|0}m=td+-8|0;a[k+4>>0]=c[m>>2];c[l>>2]=o;if(o|0){qd=o+8|0;c[qd>>2]=c[qd>>2]&-1025}qd=k+8|0;c[qd>>2]=c[qd>>2]&-1025;if((c[m>>2]|0)!=128)a[j+22>>0]=1}else rd=899;while(0);if((rd|0)==899)if(!o)k=0;else{pi(c[j>>2]|0,o,1);k=0}c[p>>2]=k;break}case 86:case 84:{c[td+4>>2]=e[td+2>>1];break}case 85:{c[td+-8>>2]=128;break}case 87:{j=mj(j,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-20>>2]|0,c[td+-8>>2]|0,c[td+-80>>2]|0,c[td+4>>2]|0)|0;c[td+-92>>2]=j;break}case 88:{k=mj(j,c[td+-80>>2]|0,c[td+-68>>2]|0,c[td+-56>>2]|0,c[td+-44>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-92>>2]|0,c[td+4>>2]|0)|0;c[td+-104>>2]=k;if(k|0){c[k+72>>2]=c[td+-20>>2];break a}l=c[j>>2]|0;k=c[td+-20>>2]|0;if(k|0)do{j=k;k=c[k+32>>2]|0;oi(l,j)}while((k|0)!=0);break}case 89:{j=mj(j,c[td+-8>>2]|0,0,0,0,0,0,512,0)|0;c[td+-32>>2]=j;break}case 90:{m=td+-44|0;k=c[m>>2]|0;l=mj(j,c[td+-8>>2]|0,0,0,0,0,0,1536,0)|0;if(k|0){j=k+8|0;c[j>>2]=c[j>>2]&-1025}if(l){a[l+4>>0]=-128;c[l+52>>2]=k;k=l}c[m>>2]=k;break}case 91:{c[td+4>>2]=1;break}case 92:{c[td+4>>2]=2;break}case 222:case 217:case 214:case 134:case 127:case 94:{c[td+16>>2]=0;break}case 95:{r=td+-44|0;k=nj(c[j>>2]|0,c[r>>2]|0,c[td+-20>>2]|0)|0;c[r>>2]=k;o=c[td+8>>2]|0;if(o){s=td+4|0;J:do if(k|0){p=(c[k>>2]|0)+-1|0;i=c[j>>2]|0;q=c[s>>2]|0;K:do if(q){h=Sv(o|0,0,1,0)|0;n=L()|0;L:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=932;else{rd=934;break K}else{do if(0<0|(0==0?o>>>0<(e[i+276>>1]|0)>>>0:0)){l=i+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}l=i+296|0;m=c[l>>2]|0;if(!m){l=i+292|0;break}else{c[l>>2]=c[m>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=m;break L}}else l=i+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=932}while(0);if((rd|0)==932)n=_d(i,h,n)|0;if(n){ew(n|0,q|0,o|0)|0;a[n+o>>0]=0;k=k+4+(p*20|0)+4|0;c[k>>2]=n;l=a[n>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[n+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=n+i|0;if((a[n+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[n+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=934}else rd=934;while(0);if((rd|0)==934){k=k+4+(p*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;M:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=967;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break J;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break J}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=967;break M}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=967}while(0);if((rd|0)==967)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;od=s;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}}while(0);k=c[r>>2]|0}l=c[td+-32>>2]|0;m=c[td+-8>>2]|0;o=c[j>>2]|0;if(k|0){p=k+4+(((c[k>>2]|0)+-1|0)*20|0)+8|0;k=c[p>>2]|0;do if(k|0){if(o|0){if(c[o+480>>2]|0){Xd(o,k);break}j=k;if((c[o+304>>2]|0)>>>0<=j>>>0?(c[o+308>>2]|0)>>>0>j>>>0:0){j=o+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);n=l;while(1)if(!(a[880+(d[n>>0]|0)>>0]&1))break;else n=n+1|0;k=m-n|0;N:do if((k|0)<=0)if(!n)k=0;else{l=k;rd=988}else while(1){l=k+-1|0;if(!(a[880+(d[n+l>>0]|0)>>0]&1)){l=k;rd=988;break N}if((k|0)>1)k=l;else{rd=988;break}}while(0);O:do if((rd|0)==988){i=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;h=L()|0;P:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))rd=998;else{k=0;break O}else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[o+276>>1]|0)>>>0:0))){m=o+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}m=o+296|0;k=c[m>>2]|0;if(!k){k=o+292|0;break}else{c[m>>2]=c[k>>2];j=o+284|0;c[j>>2]=(c[j>>2]|0)+1;break P}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=998}while(0);if((rd|0)==998)k=_d(o,i,h)|0;if(!k)k=0;else{ew(k|0,n|0,l|0)|0;a[k+l>>0]=0}}while(0);c[p>>2]=k}break}case 96:{rd=c[j>>2]|0;c[qd>>2]=0;c[qd+4>>2]=0;qd=oj(rd,172,qd,0)|0;rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 97:{qd=ej(j,172,0,0)|0;qd=ej(j,134,oj(c[j>>2]|0,59,td+-20|0,1)|0,qd)|0;rd=td+-44|0;j=nj(c[j>>2]|0,c[rd>>2]|0,qd)|0;c[rd>>2]=j;break}case 239:case 238:case 109:case 98:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-8|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 100:{m=c[j>>2]|0;Q:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=1028;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1029}else rd=1029}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=80){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1028;break Q}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,80,0)|0;rd=1028}while(0);if((rd|0)==1028)if(!k)k=0;else rd=1029;if((rd|0)==1029){I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0))}c[td+16>>2]=k;break}case 101:{l=c[td+4>>2]|0;c[td+-8>>2]=l;if(l|0){k=c[l>>2]|0;if((k|0)>1)do{j=k;k=k+-1|0;a[l+8+(k*72|0)+36>>0]=a[l+8+((j+-2|0)*72|0)+36>>0]|0}while((j|0)>2);a[l+44>>0]=0}break}case 102:{k=c[td+-8>>2]|0;if(k|0?(p=c[k>>2]|0,(p|0)>0):0)a[k+8+((p+-1|0)*72|0)+36>>0]=c[td+4>>2];break}case 103:{c[td+16>>2]=0;break}case 104:{l=td+-68|0;k=lj(j,c[l>>2]|0,td+-56|0,td+-44|0,td+-32|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=td+-20|0;if(k|0?(P=c[td+-16>>2]|0,P|0):0){m=(c[k>>2]|0)+-1|0;if((P|0)==1?(c[l>>2]|0)==0:0){j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|1;break a}j=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=j;j=k+8+(m*72|0)+37|0;a[j>>0]=a[j>>0]|2}break}case 105:{l=td+-92|0;k=lj(j,c[l>>2]|0,td+-80|0,td+-68|0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[l>>2]=k;l=c[td+-44>>2]|0;if(k|0){j=(c[k>>2]|0)+-1|0;c[k+8+(j*72|0)+64>>2]=l;j=k+8+(j*72|0)+37|0;a[j>>0]=a[j>>0]|4;break a}if(l|0)ri(c[j>>2]|0,l);break}case 106:{rd=td+-68|0;j=lj(j,c[rd>>2]|0,0,0,td+-20|0,c[td+-44>>2]|0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 107:{i=td+-68|0;l=c[i>>2]|0;if((((l|0)==0?(c[td+-16>>2]|0)==0:0)?(c[td+-8>>2]|0)==0:0)?(c[td+4>>2]|0)==0:0){c[i>>2]=c[td+-44>>2];break a}p=td+-44|0;m=c[p>>2]|0;k=c[m>>2]|0;if((k|0)==1){o=lj(j,l,0,0,td+-20|0,0,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=o;if(o|0){k=(c[o>>2]|0)+-1|0;l=c[p>>2]|0;m=l+16|0;c[o+8+(k*72|0)+8>>2]=c[m>>2];i=l+12|0;c[o+8+(k*72|0)+4>>2]=c[i>>2];h=l+28|0;c[o+8+(k*72|0)+20>>2]=c[h>>2];n=l+45|0;if(a[n>>0]&4){rd=l+72|0;c[o+8+(k*72|0)+64>>2]=c[rd>>2];c[rd>>2]=0;a[n>>0]=a[n>>0]&-5;rd=o+8+(k*72|0)+37|0;a[rd>>0]=a[rd>>0]|4}c[i>>2]=0;c[m>>2]=0;c[h>>2]=0}qi(c[j>>2]|0,c[p>>2]|0);break a}if(!m)k=0;else{if((k|0)>1)do{rd=k;k=k+-1|0;a[m+8+(k*72|0)+36>>0]=a[m+8+((rd+-2|0)*72|0)+36>>0]|0}while((rd|0)>2);a[m+44>>0]=0;k=c[p>>2]|0}rd=mj(j,0,k,0,0,0,0,2048,0)|0;j=lj(j,c[i>>2]|0,0,0,td+-20|0,rd,c[td+-8>>2]|0,c[td+4>>2]|0)|0;c[i>>2]=j;break}case 122:case 108:{c[td+16>>2]=0;c[td+20>>2]=0;break}case 110:{i=td+4|0;h=pj(j,0,i,0)|0;R:do if(!((h|0)==0|(d[j+200>>0]|0)<2)){n=c[h+16>>2]|0;m=c[j>>2]|0;S:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1093;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break R;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break R}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1093;break S}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1093}while(0);if((rd|0)==1093)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=i;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=h;break}case 111:{i=td+-20|0;h=td+4|0;n=pj(j,0,i,h)|0;T:do if(!((n|0)==0|(d[j+200>>0]|0)<2)){o=c[n+16>>2]|0;m=c[j>>2]|0;U:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1120;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break T;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break T}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1120;break U}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1120}while(0);if((rd|0)==1120)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}while(0);c[i>>2]=n;break}case 112:{rd=td+4|0;j=pj(j,0,rd,0)|0;c[rd>>2]=j;break}case 113:{rd=td+-20|0;j=pj(j,0,rd,td+4|0)|0;c[rd>>2]=j;break}case 114:{k=td+-44|0;rd=pj(j,0,k,td+-20|0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 115:{k=td+-20|0;rd=pj(j,0,k,0)|0;c[k>>2]=rd;if(rd|0){j=qj(c[j>>2]|0,td+4|0)|0;c[(c[k>>2]|0)+20>>2]=j}break}case 116:{c[td+4>>2]=1;break}case 117:{rd=td+-8|0;j=rj(j,rd,0,0)|0;c[rd>>2]=j;break}case 118:{rd=td+-20|0;j=rj(j,rd,td+-8|0,0)|0;c[rd>>2]=j;break}case 119:{rd=td+-32|0;j=rj(j,rd,td+-20|0,td+-8|0)|0;c[rd>>2]=j;break}case 231:case 210:case 144:case 137:case 120:{c[td+-8>>2]=c[td+4>>2];break}case 232:case 213:case 211:case 143:case 138:case 136:case 121:{c[td+16>>2]=0;break}case 123:{qd=td+4|0;rd=c[qd+4>>2]|0;j=td+-20|0;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break}case 124:{c[td+-8>>2]=0;c[td+-4>>2]=1;break}case 125:{c[td+-32>>2]=c[td+-8>>2];break}case 158:case 126:{c[td+16>>2]=0;break}case 135:case 128:{c[td+-20>>2]=c[td+4>>2];break}case 129:{l=td+-32|0;k=nj(c[j>>2]|0,c[l>>2]|0,c[td+-8>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 130:{l=td+-8|0;k=nj(c[j>>2]|0,0,c[l>>2]|0)|0;c[l>>2]=k;l=c[td+4>>2]|0;if(!((k|0)==0|(l|0)<0))a[k+4+(((c[k>>2]|0)+-1|0)*20|0)+12>>0]=l;break}case 131:{c[td+4>>2]=0;break}case 132:{c[td+4>>2]=1;break}case 133:{c[td+16>>2]=-1;break}case 139:{j=ej(j,141,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 140:{j=ej(j,141,c[td+-20>>2]|0,c[td+4>>2]|0)|0;c[td+-32>>2]=j;break}case 141:{j=ej(j,141,c[td+4>>2]|0,c[td+-20>>2]|0)|0;c[td+-32>>2]=j;break}case 142:{k=td+-20|0;l=c[k>>2]|0;m=td+-8|0;do if(l|0?(Y=c[td+-4>>2]|0,Y|0):0){i=(c[l>>2]|0)+-1|0;if((Y|0)==1?(c[m>>2]|0)==0:0){rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,m)|0;c[l+8+(i*72|0)+64>>2]=rd;rd=l+8+(i*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);sj(j,c[k>>2]|0,c[td+4>>2]|0);break}case 145:{i=td+-44|0;k=c[i>>2]|0;l=td+-32|0;do if(k|0?(Z=c[td+-28>>2]|0,Z|0):0){m=(c[k>>2]|0)+-1|0;if((Z|0)==1?(c[l>>2]|0)==0:0){rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|1;break}rd=qj(c[j>>2]|0,l)|0;c[k+8+(m*72|0)+64>>2]=rd;rd=k+8+(m*72|0)+37|0;a[rd>>0]=a[rd>>0]|2}while(0);l=td+-8|0;k=c[l>>2]|0;if(k){if((c[k>>2]|0)>(c[(c[j>>2]|0)+116>>2]|0)){c[ha>>2]=38493;cd(j,44753,ha);k=c[l>>2]|0}}else k=0;tj(j,c[i>>2]|0,k,c[td+4>>2]|0,c[td+-56>>2]|0,0);break}case 146:{s=td+-44|0;n=nj(c[j>>2]|0,c[s>>2]|0,c[td+4>>2]|0)|0;c[s>>2]=n;s=td+-20|0;if(n|0){o=(c[n>>2]|0)+-1|0;m=c[j>>2]|0;p=c[s>>2]|0;q=c[td+-16>>2]|0;V:do if(p){i=Sv(q|0,0,1,0)|0;h=L()|0;W:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1179;else{rd=1181;break V}else{do if(0<0|(0==0?q>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=l;break W}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1179}while(0);if((rd|0)==1179)r=_d(m,i,h)|0;if(r){ew(r|0,p|0,q|0)|0;a[r+q>>0]=0;k=n+4+(o*20|0)+4|0;c[k>>2]=r;l=a[r>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[r+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=r+i|0;if((a[r+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[r+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1181}else rd=1181;while(0);if((rd|0)==1181){k=n+4+(o*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;X:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1214;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1214;break X}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1214}while(0);if((rd|0)==1214)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}break}case 147:{rd=td+-68|0;j=uj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 148:{r=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;s=td+-20|0;Y:do if(r|0){n=(c[r>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;Z:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;_:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1229;else{rd=1231;break Z}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break _}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1229}while(0);if((rd|0)==1229)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=r+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1231}else rd=1231;while(0);if((rd|0)==1231){k=r+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;$:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1264;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Y;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break Y}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1264;break $}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1264}while(0);if((rd|0)==1264)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[s>>2]=r;break}case 149:{j=uj(j,0,c[td+-32>>2]|0,c[td+4>>2]|0)|0;c[td+-44>>2]=j;break}case 150:{vj(j,c[td+-32>>2]|0,c[td+-8>>2]|0,c[td+-20>>2]|0,c[td+-56>>2]|0,c[td+4>>2]|0);break}case 151:{vj(j,c[td+-32>>2]|0,0,c[td+-20>>2]|0,c[td+-56>>2]|0,0);break}case 152:{c[td+16>>2]=0;break}case 153:{i=c[j>>2]|0;h=c[td+-80>>2]|0;n=c[td+-56>>2]|0;o=c[td+-8>>2]|0;p=c[td+4>>2]|0;aa:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1294;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1303}else rd=1303}else rd=1295}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1295;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1294;break aa}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1294}while(0);if((rd|0)==1294)if(!k)rd=1295;else rd=1303;if((rd|0)==1295){if(h|0)ri(i,h);if(n|0)ni(i,n);if(o|0)ri(i,o);if(!p)k=0;else{ni(i,p);k=0}}else if((rd|0)==1303){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=o;c[k+12>>2]=p;c[k+16>>2]=0}c[td+-116>>2]=k;break}case 154:{i=c[j>>2]|0;h=c[td+-44>>2]|0;n=c[td+-20>>2]|0;ba:do if(!i){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1328;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1333}else rd=1333}else rd=1329}else{if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=1329;break}}else{do if((e[i+276>>1]|0)>=36){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1328;break ba}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,36,0)|0;rd=1328}while(0);if((rd|0)==1328)if(!k)rd=1329;else rd=1333;if((rd|0)==1329){if(h|0)ri(i,h);if(!n)k=0;else{ni(i,n);k=0}}else if((rd|0)==1333){c[k>>2]=h;c[k+4>>2]=n;c[k+8>>2]=0;c[k+12>>2]=0;c[k+16>>2]=0}c[td+-80>>2]=k;break}case 155:{m=c[j>>2]|0;ca:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](36)|0;rd=1358;break}k=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=1359}else rd=1359}else k=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if((e[m+276>>1]|0)>=36){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1358;break ca}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,36,0)|0;rd=1358}while(0);if((rd|0)==1358)if(!k)k=0;else rd=1359;if((rd|0)==1359){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[td+-32>>2]=k;break}case 159:{c[td+-20>>2]=c[td+-8>>2];break}case 160:{rd=td+-20|0;j=wj(j,c[rd>>2]|0,td+4|0)|0;c[rd>>2]=j;break}case 161:{rd=td+4|0;j=wj(j,0,rd)|0;c[rd>>2]=j;break}case 162:{c[td+-20>>2]=c[td+-8>>2];break}case 164:case 163:{rd=td+4|0;j=fj(j,59,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 165:{h=td+-20|0;n=oj(c[j>>2]|0,59,h,1)|0;i=td+4|0;o=oj(c[j>>2]|0,59,i,1)|0;da:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ea:do if(!m){if(!(c[7324]|0)){La=Wa[c[29340>>2]&127](16)|0;rd=1390;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1391}else{k=l;rd=1391}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];La=m+284|0;c[La>>2]=(c[La>>2]|0)+1;La=l;rd=1390;break ea}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}La=_d(m,16,0)|0;rd=1390}while(0);if((rd|0)==1390?La|0:0){k=La;rd=1391}if((rd|0)==1391){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=o;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;fa:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1415;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break da;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break da}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1415;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1415}while(0);if((rd|0)==1415)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=n;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,n,o)|0;c[h>>2]=j;break}case 166:{n=td+-44|0;o=oj(c[j>>2]|0,59,n,1)|0;p=td+-20|0;q=oj(c[j>>2]|0,59,p,1)|0;i=td+4|0;h=oj(c[j>>2]|0,59,i,1)|0;r=ej(j,134,q,h)|0;ga:do if((d[j+200>>0]|0)>1){m=c[j>>2]|0;ha:do if(!m){if(!(c[7324]|0)){Ya=Wa[c[29340>>2]&127](16)|0;rd=1442;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l|0){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;k=l;rd=1443}else{k=l;rd=1443}}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];Ya=m+284|0;c[Ya>>2]=(c[Ya>>2]|0)+1;Ya=l;rd=1442;break ha}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Ya=_d(m,16,0)|0;rd=1442}while(0);if((rd|0)==1442?Ya|0:0){k=Ya;rd=1443}if((rd|0)==1443){l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=h;od=i;pd=c[od+4>>2]|0;qd=l;c[qd>>2]=c[od>>2];c[qd+4>>2]=pd;qd=j+272|0;c[k+12>>2]=c[qd>>2];c[qd>>2]=k}m=c[j>>2]|0;ia:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1467;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break ga;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break ga}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1467;break ia}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1467}while(0);if((rd|0)==1467)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=q;pd=p;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;rd=j+272|0;c[k+12>>2]=c[rd>>2];c[rd>>2]=k}while(0);j=ej(j,134,o,r)|0;c[n>>2]=j;break}case 168:case 167:{rd=td+4|0;j=fj(j,e[td+2>>1]|0,c[rd>>2]|0,c[td+8>>2]|0)|0;c[rd>>2]=j;break}case 169:{rd=td+4|0;j=oj(c[j>>2]|0,147,rd,1)|0;c[rd>>2]=j;break}case 170:{m=td+4|0;k=c[m>>2]|0;if((a[k>>0]|0)==35?((d[k+1>>0]|0)+-48|0)>>>0<10:0){pd=m;l=c[pd>>2]|0;pd=c[pd+4>>2]|0;rd=qd;c[rd>>2]=l;c[rd+4>>2]=pd;if(a[j+18>>0]|0){k=ej(j,168,0,0)|0;c[m>>2]=k;if(k|0)ii(l+1|0,k+28|0)|0}else{c[J>>2]=qd;cd(j,38502,J);c[m>>2]=0}break a}u=c[td+8>>2]|0;w=fj(j,148,k,u)|0;c[m>>2]=w;v=c[j>>2]|0;if(w|0){t=c[w+8>>2]|0;k=t+1|0;l=a[k>>0]|0;ja:do if(!(l<<24>>24)){rd=j+196|0;k=(b[rd>>1]|0)+1<<16>>16;b[rd>>1]=k}else{if((a[t>>0]|0)==63){if((u|0)==2){i=(l<<24>>24)+-48|0;m=((i|0)<0)<<31>>31;k=qd;c[k>>2]=i;c[k+4>>2]=m;k=0}else{k=(Og(k,qd,u+-1|0,1)|0)!=0;i=qd;m=c[i+4>>2]|0;i=c[i>>2]|0}l=c[v+144>>2]|0;qd=((l|0)<0)<<31>>31;if(k|((m|0)<0|(m|0)==0&i>>>0<1)|((m|0)>(qd|0)|(m|0)==(qd|0)&i>>>0>l>>>0)){c[Xa>>2]=l;cd(j,45057,Xa);break a}k=i&65535;l=j+196|0;ka:do if((b[l>>1]|0)>=k<<16>>16){h=k<<16>>16;m=j+216|0;l=c[m>>2]|0;if(!l)l=0;else{n=c[l+4>>2]|0;i=2;while(1){if((c[l+(i<<2)>>2]|0)==(h|0))break;i=(c[l+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(n|0))break ka}break ja}}else{b[l>>1]=k;l=j+216|0;m=l;l=c[l>>2]|0}while(0)}else{m=j+216|0;l=c[m>>2]|0;la:do if(l|0){h=c[l+4>>2]|0;k=2;while(1){i=l+(k+2<<2)|0;if((av(i,t,u)|0)==0?(a[i+u>>0]|0)==0:0)break;k=(c[l+(k+1<<2)>>2]|0)+k|0;if((k|0)>=(h|0))break la}k=c[l+(k<<2)>>2]|0;if(k&65535|0){k=k&65535;break ja}}while(0);qd=j+196|0;k=(b[qd>>1]|0)+1<<16>>16;b[qd>>1]=k}r=k<<16>>16;i=(u|0)/4|0;s=i+3|0;q=(l|0)==0;ma:do if(!q){o=l+4|0;i=c[o>>2]|0;h=i+s|0;n=c[l>>2]|0;if((h|0)>(n|0)){i=cw(n|0,((n|0)<0)<<31>>31|0,1)|0;i=Sv(i|0,L()|0,s|0,((s|0)<0)<<31>>31|0)|0;h=cw(i|0,L()|0,2)|0;n=L()|0;rd=l;if((c[v+304>>2]|0)>>>0<=rd>>>0?(c[v+308>>2]|0)>>>0>rd>>>0:0){if(!(n>>>0>0|((n|0)==0?h>>>0>(e[v+276>>1]|0)>>>0:0))){rd=1518;break}n=Zd(v,l,h,n)|0;rd=1515;break}n=Zd(v,l,h,n)|0;rd=1515}else{n=o;rd=1519}}else{i=i+13|0;o=cw(i|0,((i|0)<0)<<31>>31|0,2)|0;p=L()|0;if(c[v+272>>2]|0){if(a[v+81>>0]|0){l=0;break}}else{do if(!(p>>>0>0|((p|0)==0?o>>>0>(e[v+276>>1]|0)>>>0:0))){h=v+300|0;n=c[h>>2]|0;if(n|0){c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}h=v+296|0;n=c[h>>2]|0;if(!n){h=v+292|0;break}else{c[h>>2]=c[n>>2];rd=v+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1515;break ma}}else h=v+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}n=_d(v,o,p)|0;rd=1515}while(0);if((rd|0)==1515)if(n)if(q){c[n+4>>2]=2;l=n;rd=1518}else{l=n;rd=1518}if((rd|0)==1518){c[l>>2]=i;n=l+4|0;i=c[n>>2]|0;h=i+s|0;rd=1519}if((rd|0)==1519){c[l+(i<<2)>>2]=r;c[l+(i+1<<2)>>2]=s;rd=l+(i+2<<2)|0;c[n>>2]=h;ew(rd|0,t|0,u|0)|0;a[rd+u>>0]=0}c[m>>2]=l}while(0);b[w+32>>1]=k;if((c[v+144>>2]|0)<(k<<16>>16|0))cd(j,45100,yc)}break}case 171:{l=td+-20|0;k=c[l>>2]|0;if((c[td+8>>2]|0)!=0?(A=oj(c[j>>2]|0,106,td+4|0,1)|0,(A|0)!=0):0){c[A+12>>2]=k;k=A+4|0;c[k>>2]=c[k>>2]|4352;k=A}c[l>>2]=k;break}case 172:{i=oj(c[j>>2]|0,36,td+-8|0,1)|0;c[td+-56>>2]=i;k=c[j>>2]|0;l=c[td+-32>>2]|0;m=(l|0)==0;if(!i){if(m)break a;ni(k,l);break a}if(!m){c[i+12>>2]=l;j=i+4|0;c[j>>2]=c[j>>2]|c[l+4>>2]&2097412}Ym(i);break}case 173:{l=c[td+-8>>2]|0;n=td+-44|0;h=c[td+-20>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(!k)if(i)k=0;else{ri(m,l);k=0}else{if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ia>>2]=n;cd(j,45123,ia)}c[k+20>>2]=l;l=k+4|0;c[l>>2]=c[l>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),xa=c[(c[j>>2]|0)+120>>2]|0,(xa|0)<(c[k+24>>2]|0)):0){c[qa>>2]=xa;cd(j,41637,qa)}if((h|0)==1)c[l>>2]=c[l>>2]|2}c[n>>2]=k;break}case 174:{l=td+-32|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),B=c[(c[j>>2]|0)+120>>2]|0,(B|0)<(c[k+24>>2]|0)):0){c[u>>2]=B;cd(j,41637,u)}}else k=0;c[l>>2]=k;break}case 175:{l=c[td+-20>>2]|0;n=td+-56|0;h=c[td+-32>>2]|0;m=c[j>>2]|0;k=oj(m,161,n,1)|0;i=(l|0)==0;if(k){if(!i?(c[l>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ja>>2]=n;cd(j,45123,ja)}c[k+20>>2]=l;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),ya=c[(c[j>>2]|0)+120>>2]|0,(ya|0)<(c[k+24>>2]|0)):0){c[ra>>2]=ya;cd(j,41637,ra)}if((h|0)==1)c[m>>2]=c[m>>2]|2;l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,Fa)}else{if(!i)ri(m,l);oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[n>>2]=k;break}case 176:{i=td+-44|0;k=oj(c[j>>2]|0,161,i,1)|0;if(k){c[k+20>>2]=0;m=k+4|0;c[m>>2]=c[m>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Q=c[(c[j>>2]|0)+120>>2]|0,(Q|0)<(c[k+24>>2]|0)):0){c[K>>2]=Q;cd(j,41637,K)}l=c[td+4>>2]|0;if((l|0)!=0?(c[k+44>>2]=l,rd=c[m>>2]|0,c[m>>2]=rd|16777216,c[l+68>>2]=k,(rd&2|0)!=0):0)cd(j,45157,X)}else{oi(c[j>>2]|0,c[td+4>>2]|0);k=0}c[i>>2]=k;break}case 177:{l=td+4|0;k=oj(c[j>>2]|0,161,l,1)|0;if(k){c[k+20>>2]=0;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),C=c[(c[j>>2]|0)+120>>2]|0,(C|0)<(c[k+24>>2]|0)):0){c[v>>2]=C;cd(j,41637,v)}}else k=0;c[l>>2]=k;break}case 178:{k=nj(c[j>>2]|0,c[td+-32>>2]|0,c[td+-8>>2]|0)|0;l=ej(j,169,0,0)|0;c[td+-44>>2]=l;if(l|0){c[l+20>>2]=k;break a}if(k|0)ri(c[j>>2]|0,k);break}case 186:case 185:case 184:case 183:case 182:case 181:case 180:case 179:{rd=td+-20|0;j=ej(j,e[td+-10>>1]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 187:{qd=td+4|0;j=c[qd+4>>2]|0;rd=td+-8|0;c[rd>>2]=c[qd>>2];c[rd+4>>2]=j;c[td+-4>>2]=j|-2147483648;break}case 188:{l=td+-8|0;m=td+-4|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+4>>2]|0)|0;o=td+-20|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[sa>>2]=l;cd(j,45123,sa)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),za=c[(c[j>>2]|0)+120>>2]|0,(za|0)<(c[k+24>>2]|0)):0){c[ta>>2]=za;cd(j,41637,ta)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 189:{l=td+-32|0;m=td+-28|0;n=c[m>>2]|0;c[m>>2]=n&2147483647;m=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;o=td+-44|0;m=nj(c[j>>2]|0,m,c[o>>2]|0)|0;m=nj(c[j>>2]|0,m,c[td+4>>2]|0)|0;i=c[j>>2]|0;k=oj(i,161,l,1)|0;h=(m|0)==0;if(!k)if(h)k=0;else{ri(i,m);k=0}else{if(!h?(c[m>>2]|0)>(c[(c[j>>2]|0)+132>>2]|0):0){c[ua>>2]=l;cd(j,45123,ua)}c[k+20>>2]=m;rd=k+4|0;c[rd>>2]=c[rd>>2]|4;if((c[j+36>>2]|0)==0?(Ym(k),Aa=c[(c[j>>2]|0)+120>>2]|0,(Aa|0)<(c[k+24>>2]|0)):0){c[va>>2]=Aa;cd(j,41637,va)}}c[o>>2]=k;if((n|0)<0){k=ej(j,19,k,0)|0;c[o>>2]=k}if(k|0){j=k+4|0;c[j>>2]=c[j>>2]|128}break}case 190:{rd=td+-8|0;j=ej(j,e[td+2>>1]|0,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 191:{rd=td+-20|0;j=ej(j,51,c[rd>>2]|0,0)|0;c[rd>>2]=j;break}case 192:{m=td+-20|0;rd=td+4|0;k=ej(j,45,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=50;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 193:{m=td+-32|0;rd=td+4|0;k=ej(j,160,c[m>>2]|0,c[rd>>2]|0)|0;c[m>>2]=k;rd=c[rd>>2]|0;m=c[j>>2]|0;if(((k|0)!=0&(rd|0)!=0?(a[rd>>0]|0)==114:0)?(d[j+200>>0]|0)<=1:0){a[k>>0]=51;k=k+16|0;l=c[k>>2]|0;if(l|0)ni(m,l);c[k>>2]=0}break}case 195:case 194:{j=ej(j,e[td+-10>>1]|0,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 196:{j=ej(j,(b[td+-10>>1]|0)==100?166:165,c[td+4>>2]|0,0)|0;c[td+-8>>2]=j;break}case 200:case 197:{c[td+4>>2]=0;break}case 199:{k=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;k=nj(c[j>>2]|0,k,c[td+4>>2]|0)|0;l=td+-44|0;m=ej(j,48,c[l>>2]|0,0)|0;c[l>>2]=m;if(!m){if(k|0)ri(c[j>>2]|0,k)}else c[m+20>>2]=k;if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 202:{m=td+-8|0;k=c[m>>2]|0;if(!k){if((d[j+200>>0]|0)>=2)break a;k=td+-44|0;l=c[k>>2]|0;if(l|0)ni(c[j>>2]|0,l);j=oj(c[j>>2]|0,147,17136+(c[td+-32>>2]<<3)|0,1)|0;c[k>>2]=j;break a}if((c[k>>2]|0)==1){k=k+4|0;l=c[k>>2]|0;c[k>>2]=0;k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k);if(l|0){rd=l+4|0;c[rd>>2]=c[rd>>2]&-769|512}rd=td+-44|0;j=ej(j,(c[td+-32>>2]|0)==0?53:52,c[rd>>2]|0,l)|0;c[rd>>2]=j;break a}l=td+-44|0;k=ej(j,49,c[l>>2]|0,0)|0;c[l>>2]=k;if(!k){k=c[m>>2]|0;if(k|0)ri(c[j>>2]|0,k)}else{c[k+20>>2]=c[m>>2];k=c[l>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),ea=c[(c[j>>2]|0)+120>>2]|0,(ea|0)<(c[k+24>>2]|0)):0){c[$>>2]=ea;cd(j,41637,$)}}if(c[td+-32>>2]|0){j=ej(j,19,c[l>>2]|0,0)|0;c[l>>2]=j}break}case 203:{k=ej(j,131,0,0)|0;c[td+-20>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),D=c[(c[j>>2]|0)+120>>2]|0,(D|0)<(c[k+24>>2]|0)):0){c[w>>2]=D;cd(j,41637,w)}break}case 204:{k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;m=c[td+-8>>2]|0;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),R=c[(c[j>>2]|0)+120>>2]|0,(R|0)<(c[l+24>>2]|0)):0){c[M>>2]=R;cd(j,41637,M)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 205:{k=pj(j,0,td+-20|0,td+-8|0)|0;m=mj(j,0,k,0,0,0,0,0,0)|0;l=c[td+4>>2]|0;do if(l|0)if((k|0)==0|(m|0)==0){ri(c[j>>2]|0,l);break}else{rd=(c[k>>2]|0)+-1|0;c[k+8+(rd*72|0)+64>>2]=l;rd=k+8+(rd*72|0)+37|0;a[rd>>0]=a[rd>>0]|4;break}while(0);k=td+-44|0;l=ej(j,49,c[k>>2]|0,0)|0;c[k>>2]=l;if(!l){if(m|0)pi(c[j>>2]|0,m,1)}else{c[l+20>>2]=m;rd=l+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(l),fa=c[(c[j>>2]|0)+120>>2]|0,(fa|0)<(c[l+24>>2]|0)):0){c[_>>2]=fa;cd(j,41637,_)}}if(c[td+-32>>2]|0){j=ej(j,19,c[k>>2]|0,0)|0;c[k>>2]=j}break}case 206:{k=ej(j,20,0,0)|0;c[td+-32>>2]=k;l=c[td+-8>>2]|0;if(!k){if(!l)break a;pi(c[j>>2]|0,l,1);break a}c[k+20>>2]=l;rd=k+4|0;c[rd>>2]=c[rd>>2]|2099200;if((c[j+36>>2]|0)==0?(Ym(k),E=c[(c[j>>2]|0)+120>>2]|0,(E|0)<(c[k+24>>2]|0)):0){c[s>>2]=E;cd(j,41637,s)}break}case 207:{l=ej(j,149,c[td+-32>>2]|0,0)|0;i=td+-44|0;c[i>>2]=l;if(!l){k=c[td+-20>>2]|0;if(k|0)ri(c[j>>2]|0,k);k=c[td+-8>>2]|0;if(!k)break a;ni(c[j>>2]|0,k);break a}m=c[td+-8>>2]|0;k=c[td+-20>>2]|0;if(m){k=nj(c[j>>2]|0,k,m)|0;l=c[i>>2]|0}c[l+20>>2]=k;k=c[i>>2]|0;if((c[j+36>>2]|0)==0?(Ym(k),Ba=c[(c[j>>2]|0)+120>>2]|0,(Ba|0)<(c[k+24>>2]|0)):0){c[ka>>2]=Ba;cd(j,41637,ka)}break}case 208:{rd=td+-44|0;qd=nj(c[j>>2]|0,c[rd>>2]|0,c[td+-20>>2]|0)|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 209:{qd=nj(c[j>>2]|0,0,c[td+-20>>2]|0)|0;rd=td+-32|0;c[rd>>2]=qd;j=nj(c[j>>2]|0,qd,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 316:{c[td+-44>>2]=c[td+-8>>2];break}case 215:{rd=td+-20|0;j=nj(c[j>>2]|0,c[rd>>2]|0,c[td+4>>2]|0)|0;c[rd>>2]=j;break}case 216:{rd=td+4|0;j=nj(c[j>>2]|0,0,c[rd>>2]|0)|0;c[rd>>2]=j;break}case 223:case 218:{c[td+-20>>2]=c[td+-8>>2];break}case 219:{h=td+-44|0;qd=pj(j,0,h,0)|0;hj(j,td+-80|0,td+-68|0,qd,c[td+-20>>2]|0,c[td+-116>>2]|0,td+-128|0,c[td+4>>2]|0,0,c[td+-92>>2]|0,0);if((d[j+200>>0]|0)>1?(q=c[j+232>>2]|0,q|0):0){i=c[q>>2]|0;m=c[j>>2]|0;na:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1732;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break a;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break a}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1732;break na}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1732}while(0);if((rd|0)==1732)if(!k)break a;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=h;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}break}case 262:case 220:{c[td+4>>2]=2;break}case 221:{c[td+16>>2]=0;break}case 224:{r=td+-44|0;s=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;t=nj(c[j>>2]|0,c[r>>2]|0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[s>>2]|0;c[H>>2]=c[td+-16>>2];c[H+4>>2]=qd;cd(j,45206,H)}oa:do if(t|0){n=(c[t>>2]|0)+-1|0;m=c[j>>2]|0;o=c[s>>2]|0;p=c[td+-16>>2]|0;pa:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;qa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1751;else{rd=1753;break pa}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break qa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1751}while(0);if((rd|0)==1751)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=t+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1753}else rd=1753;while(0);if((rd|0)==1753){k=t+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;ra:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1786;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break oa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break oa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1786;break ra}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1786}while(0);if((rd|0)==1786)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=s;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=t;break}case 225:{r=td+-20|0;pd=c[td+-8>>2]|0;qd=c[td+4>>2]|0;s=nj(c[j>>2]|0,0,0)|0;if((pd|0)!=0|(qd|0)!=-1?(a[(c[j>>2]|0)+165>>0]|0)==0:0){qd=c[r>>2]|0;c[t>>2]=c[td+-16>>2];c[t+4>>2]=qd;cd(j,45206,t)}sa:do if(s|0){n=(c[s>>2]|0)+-1|0;m=c[j>>2]|0;o=c[r>>2]|0;p=c[td+-16>>2]|0;ta:do if(o){i=Sv(p|0,0,1,0)|0;h=L()|0;ua:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1804;else{rd=1806;break ta}else{do if(0<0|(0==0?p>>>0<(e[m+276>>1]|0)>>>0:0)){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];q=m+284|0;c[q>>2]=(c[q>>2]|0)+1;q=l;break ua}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1804}while(0);if((rd|0)==1804)q=_d(m,i,h)|0;if(q){ew(q|0,o|0,p|0)|0;a[q+p>>0]=0;k=s+4+(n*20|0)+4|0;c[k>>2]=q;l=a[q>>0]|0;if((a[880+(l&255)>>0]|0)<0){h=l<<24>>24==91?93:l;i=0;l=1;while(1){m=a[q+l>>0]|0;if(m<<24>>24==h<<24>>24){l=l+1|0;m=q+i|0;if((a[q+l>>0]|0)!=h<<24>>24)break;a[m>>0]=h}else a[q+i>>0]=m;i=i+1|0;l=l+1|0}a[m>>0]=0}}else rd=1806}else rd=1806;while(0);if((rd|0)==1806){k=s+4+(n*20|0)+4|0;c[k>>2]=0}if((d[j+200>>0]|0)>1){i=c[k>>2]|0;m=c[j>>2]|0;va:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;rd=1839;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break sa;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break sa}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=1839;break va}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;rd=1839}while(0);if((rd|0)==1839)if(!k)break;l=k+4|0;I=l;J=I+12|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[k>>2]=i;pd=r;qd=c[pd+4>>2]|0;rd=l;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;j=j+272|0;c[k+12>>2]=c[j>>2];c[j>>2]=k}}while(0);c[r>>2]=s;break}case 228:{x=c[td+4>>2]|0;o=c[td+-8>>2]|0;y=c[j>>2]|0;wa:do if(!(a[y+81>>0]|0)){xa:do if(!(a[y+165>>0]|0)){m=j+4|0;i=y+24|0;h=(c[i>>2]&1|0)==0;n=y+16|0;pd=c[(c[n>>2]|0)+12>>2]|0;a[y+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ca=eh(y,0,m,0)|0,(Ca|0)!=0):0)k=Ca;else rd=1846;ya:do if((rd|0)==1846){k=c[y+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[n>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Oa=eh(y,k,m,0)|0,Oa|0):0){k=Oa;break ya}}while((l|0)>2);if(h)c[i>>2]=c[i>>2]&-2;if(!(a[y+89>>0]|0))break xa;c[i>>2]=c[i>>2]|16;break xa}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break wa}while(0);k=c[x+12>>2]|0;w=hi(y,c[x+16>>2]|0,k)|0;if(!w){if(!o){c[Ta>>2]=x;c[Ta+4>>2]=0;cd(j,45244,Ta)}else hl(j,k);a[j+17>>0]=1;break}pd=w+55|0;if((d[pd>>0]|d[pd+1>>0]<<8)&3){c[Ua>>2]=0;cd(j,45262,Ua);break}l=c[w+24>>2]|0;u=y+16|0;m=c[u>>2]|0;if(!l)v=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){v=k;break}else k=k+1|0}n=c[w+12>>2]|0;o=c[m+(v<<4)>>2]|0;t=(v|0)==1;k=t?34855:34585;m=c[j>>2]|0;l=a[m+165>>0]|0;if(!(l<<24>>24))if((a[j+200>>0]|0)==0?(Kb=c[m+312>>2]|0,(Kb|0)!=0):0){k=$a[Kb&127](c[m+316>>2]|0,9,k,0,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Lb);c[j+12>>2]=23;break}if((k|2|0)!=2){cd(j,39231,Mb);c[j+12>>2]=1;break}if(k|0)break;m=c[j>>2]|0;h=a[m+165>>0]|0}else h=0;else h=l;i=(v|0)==0?10:12;l=c[w>>2]|0;k=c[n>>2]|0;do if((h<<24>>24==0?(a[j+200>>0]|0)==0:0)?(Rb=c[m+312>>2]|0,Rb|0):0){k=$a[Rb&127](c[m+316>>2]|0,i,l,k,o,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Sb);c[j+12>>2]=23;break wa}if((k|2|0)==2)if(!k)break;else break wa;else{cd(j,39231,Tb);c[j+12>>2]=1;break wa}}while(0);s=j+8|0;k=c[s>>2]|0;i=j+116|0;if(!k){m=c[j>>2]|0;if((c[i>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;za:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=1897;else break wa;else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];pd=m+284|0;c[pd>>2]=(c[pd>>2]|0)+1;break za}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=1897}while(0);if((rd|0)==1897)l=_d(m,224,0)|0;if(!l)break;I=l+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=j;c[s>>2]=l;Di(l,61,0,1,0)|0;r=l}else r=k;q=c[i>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<>2]=l|p,t):0)?(Dc=c[q>>2]|0,rc=Dc+16|0,(c[(c[rc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Dc>>2]|0,0,Dc,qd,0,542)|0;if(k|0){cd(q,32157,pc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[rc>>2]|0)+20>>2]=qd;k=c[Dc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=1917}while(0);do if((rd|0)==1917){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)!=7)break;k=Dc+81|0;do if(!(a[k>>0]|0)){if(a[Dc+82>>0]|0)break;a[k>>0]=1;if((c[Dc+180>>2]|0)>0)c[Dc+264>>2]=1;k=Dc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Dc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break Aa}while(0)}while(0);l=q+80|0;c[l>>2]=c[l>>2]|p;l=q+20|0;a[l>>0]=a[l>>0]|1;l=c[w>>2]|0;c[Oc>>2]=c[(c[u>>2]|0)+(v<<4)>>2];c[Oc+4>>2]=34585;c[Oc+8>>2]=l;Ak(j,45335,Oc);l=c[w>>2]|0;m=c[(c[(c[j>>2]|0)+16>>2]|0)+(v<<4)>>2]|0;c[Gc>>2]=1;Cb(24,Oc,42737,Gc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Hc>>2]=m;c[Hc+4>>2]=Oc;c[Hc+8>>2]=38091;c[Hc+12>>2]=l;Ak(j,42751,Hc)}c[Ic>>2]=2;Cb(24,Oc,42737,Ic)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Kc>>2]=m;c[Kc+4>>2]=Oc;c[Kc+8>>2]=38091;c[Kc+12>>2]=l;Ak(j,42751,Kc)}c[Lc>>2]=3;Cb(24,Oc,42737,Lc)|0;if(Sd(c[j>>2]|0,Oc,m)|0){c[Mc>>2]=m;c[Mc+4>>2]=Oc;c[Mc+8>>2]=38091;c[Mc+12>>2]=l;Ak(j,42751,Mc)}c[Nc>>2]=4;Cb(24,Oc,42737,Nc)|0;k=c[j>>2]|0;if(Sd(k,Oc,m)|0){c[Qc>>2]=m;c[Qc+4>>2]=Oc;c[Qc+8>>2]=38091;c[Qc+12>>2]=l;Ak(j,42751,Qc);k=c[j>>2]|0}i=c[s>>2]|0;k=(c[c[(c[k+16>>2]|0)+(v<<4)+12>>2]>>2]|0)+1|0;m=i+108|0;l=c[m>>2]|0;if((c[i+112>>2]|0)>(l|0)){c[m>>2]=l+1;rd=c[i+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=v;c[rd+(l*20|0)+8>>2]=1;c[rd+(l*20|0)+12>>2]=k;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(i,95,v,1,k)|0;kl(j,c[w+44>>2]|0,v);m=c[w>>2]|0;l=r+108|0;k=c[l>>2]|0;if((c[r+112>>2]|0)>(k|0)){c[l>>2]=k+1;j=c[r+104>>2]|0;a[j+(k*20|0)>>0]=-112;b[j+(k*20|0)+2>>1]=0;c[j+(k*20|0)+4>>2]=v;c[j+(k*20|0)+8>>2]=0;c[j+(k*20|0)+12>>2]=0;c[j+(k*20|0)+16>>2]=0;a[j+(k*20|0)+1>>0]=0}else k=Di(r,144,v,0,0)|0;if(!(a[(c[r>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[l>>2]|0)+-1|0;Ei(r,(c[r+104>>2]|0)+(k*20|0)|0,m,0)}}while(0);qi(y,x);break}case 229:{xj(j,0,c[td+4>>2]|0);break}case 230:{xj(j,td+-8|0,c[td+4>>2]|0);break}case 233:{yj(j,td+-8|0,td+4|0,0,0);break}case 234:{yj(j,td+-32|0,td+-20|0,td+4|0,0);break}case 235:{yj(j,td+-44|0,td+-32|0,td+-8|0,0);break}case 236:{yj(j,td+-32|0,td+-20|0,td+4|0,1);break}case 237:{yj(j,td+-44|0,td+-32|0,td+-8|0,1);break}case 240:{v=c[td+-32>>2]|0;w=(c[td+4>>2]|0)-v+(c[td+8>>2]|0)|0;k=c[td+-8>>2]|0;p=j+236|0;l=c[p>>2]|0;A=c[j>>2]|0;c[p>>2]=0;Ba:do if((l|0)!=0&(c[j+36>>2]|0)==0){z=c[l>>2]|0;i=c[l+20>>2]|0;if(!i)y=-1e6;else{h=c[A+16>>2]|0;m=0;while(1)if((c[h+(m<<4)+12>>2]|0)==(i|0)){y=m;break}else m=m+1|0}m=l+28|0;c[m>>2]=k;h=(k|0)==0;if(!h){i=k;do{c[i+4>>2]=l;i=c[i+36>>2]|0}while((i|0)!=0)}c[Qb>>2]=z;if(!z)i=0;else i=(Eu(z)|0)&1073741823;c[Qb+4>>2]=i;c[_c>>2]=j;x=A+16|0;q=c[x>>2]|0;c[_c+12>>2]=c[q+(y<<4)>>2];c[_c+4>>2]=c[q+(y<<4)+12>>2];c[_c+16>>2]=31419;c[_c+20>>2]=Qb;q=(y|0)==1;c[_c+8>>2]=q&1;if(!h)do{if(cl(_c,c[k+8>>2]|0)|0){k=0;rd=2083;break Ba}if(dl(_c,c[k+16>>2]|0)|0){k=0;rd=2083;break Ba}n=c[k+20>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}o=c[k+28>>2]|0;if(o|0){n=c[o>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+4>>2]|0)|0){k=0;rd=2083;break Ba}n=c[o+8>>2]|0;if(n|0?(c[n>>2]|0)>0:0){i=0;h=n+4|0;while(1){if(dl(_c,c[h>>2]|0)|0){k=0;rd=2083;break Ba}i=i+1|0;if((i|0)>=(c[n>>2]|0))break;else h=h+20|0}}if(dl(_c,c[o+12>>2]|0)|0){k=0;rd=2083;break Ba}}k=c[k+36>>2]|0}while((k|0)!=0);if(!(dl(_c,c[l+12>>2]|0)|0)){if((d[j+200>>0]|0)<=1){k=A+165|0;if(!(a[k>>0]|0)){u=j+8|0;i=c[u>>2]|0;o=j+116|0;if(!i){n=c[j>>2]|0;if((c[o>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[j+23>>0]=1;Ca:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))rd=2e3;else{k=0;r=l;rd=2085;break Ba}else{do if((e[n+276>>1]|0)>=224){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}i=n+296|0;h=c[i>>2]|0;if(!h){i=n+292|0;break}else{c[i>>2]=c[h>>2];od=n+284|0;c[od>>2]=(c[od>>2]|0)+1;break Ca}}else i=n+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;rd=2e3}while(0);if((rd|0)==2e3)h=_d(n,224,0)|0;if(!h){k=0;r=l;rd=2085;break}I=h+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[h>>2]=n;m=n+4|0;i=c[m>>2]|0;if(i|0)c[i+4>>2]=h;c[h+8>>2]=i;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=j;c[u>>2]=h;Di(h,61,0,1,0)|0;t=h}else t=i;s=c[o>>2]|0;s=(s|0)==0?j:s;m=s+84|0;i=c[m>>2]|0;r=1<>2]=i|r,q):0)?(Ac=c[s>>2]|0,oc=Ac+16|0,(c[(c[oc>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[Ac>>2]|0,0,Ac,qd,0,542)|0;if(m|0){cd(s,32157,mc);c[s+12>>2]=m;break}qd=c[qd>>2]|0;c[(c[oc>>2]|0)+20>>2]=qd;m=c[Ac+92>>2]|0;n=c[qd+4>>2]|0;c[n+4>>2]=c[qd>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((m+-512|0)>>>0<65025){if(m+-1&m|0)break;c[o>>2]=m;h=n+80|0;m=c[h>>2]|0;if(!m)break;i=m+-4|0;c[h>>2]=i;m=i;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020;break}else{m=Wa[c[29352>>2]&127](i)|0;rd=2020}while(0);do if((rd|0)==2020){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{qd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}while(0);qd=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((qd|0)!=7)break;m=Ac+81|0;do if(!(a[m>>0]|0)){if(a[Ac+82>>0]|0)break;a[m>>0]=1;if((c[Ac+180>>2]|0)>0)c[Ac+264>>2]=1;m=Ac+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[Ac+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break Da}while(0)}while(0);o=s+80|0;c[o>>2]=c[o>>2]|r;o=v;Ea:do if(v){h=Sv(w|0,0,1,0)|0;n=L()|0;Fa:do if(c[A+272>>2]|0)if(!(a[A+81>>0]|0))rd=2044;else{i=0;break Ea}else{do if(0<0|(0==0?w>>>0<(e[A+276>>1]|0)>>>0:0)){m=A+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}m=A+296|0;i=c[m>>2]|0;if(!i){m=A+292|0;break}else{c[m>>2]=c[i>>2];qd=A+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Fa}}else m=A+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;rd=2044}while(0);if((rd|0)==2044)i=_d(A,h,n)|0;if(i){ew(i|0,o|0,w|0)|0;a[i+w>>0]=0}else i=0}else i=0;while(0);rd=c[l+4>>2]|0;c[Wc>>2]=c[(c[x>>2]|0)+(y<<4)>>2];c[Wc+4>>2]=34585;c[Wc+8>>2]=z;c[Wc+12>>2]=rd;c[Wc+16>>2]=i;Ak(j,46058,Wc);Ga:do if(i|0){if(c[A+480>>2]|0){Xd(A,i);break}m=i;do if((c[A+304>>2]|0)>>>0<=m>>>0){if((c[A+308>>2]|0)>>>0<=m>>>0)break;rd=A+300|0;c[i>>2]=c[rd>>2];c[rd>>2]=i;break Ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{rd=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);n=c[u>>2]|0;m=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(y<<4)+12>>2]>>2]|0)+1|0;i=n+108|0;h=c[i>>2]|0;if((c[n+112>>2]|0)>(h|0)){c[i>>2]=h+1;j=c[n+104>>2]|0;a[j+(h*20|0)>>0]=95;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=y;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=m;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(n,95,y,1,m)|0;c[Xc>>2]=z;Bk(t,y,dd(A,46122,Xc)|0);rd=2060}}else{c[p>>2]=l;l=0;k=A+165|0;rd=2060}if((rd|0)==2060)if(!(a[k>>0]|0)){k=0;rd=2083;break}q=mi((c[(c[x>>2]|0)+(y<<4)+12>>2]|0)+40|0,z,l)|0;if(q|0){k=A+81|0;if(a[k>>0]|0){k=0;l=q;rd=2083;break}if(a[A+82>>0]|0){k=0;l=q;rd=2083;break}a[k>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;k=A+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[A+236>>2]|0;if(!k){k=0;l=q;rd=2083;break}c[k+12>>2]=7;k=0;l=q;rd=2083;break}h=c[l+20>>2]|0;if((h|0)==(c[l+24>>2]|0)){p=c[l+4>>2]|0;n=c[h+20>>2]|0;if(!n){m=h+12|0;k=h+16|0}else{m=a[p>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=p;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[h+8>>2]|0)>>>0)|0;m=n+(k<<3)|0;k=n+(k<<3)+4|0}m=c[m>>2]|0;Ha:do if(!m)k=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-o|0;if(!(j<<24>>24==0|(i|0)!=0)){n=p;do{h=h+1|0;n=n+1|0;j=a[h>>0]|0;i=(d[208+(j&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(j<<24>>24==0|(i|0)!=0))}if(!i)break Ha;if(!m){k=59292;break}}}while(0);k=(c[k+8>>2]|0)+68|0;c[l+32>>2]=c[k>>2];c[k>>2]=l;k=0;l=q;rd=2083}else{k=0;l=q;rd=2083}}else{k=0;r=l;rd=2085}}else rd=2083;while(0);if((rd|0)==2083)if(l){r=l;m=l+28|0;rd=2085}do if((rd|0)==2085){Xi(A,c[m>>2]|0);l=c[l>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+4>>2]|0;do if(l|0){if(A|0){if(c[A+480>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[r+12>>2]|0;if(l|0)ni(A,l);l=c[r+16>>2]|0;if(l|0){q=l+4|0;m=c[l>>2]|0;Ia:do if((c[q>>2]|0)>0){h=A+480|0;n=A+304|0;o=A+308|0;p=A+300|0;if(!A){i=0;while(1){m=c[m+(i<<3)>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);i=i+1|0;m=c[l>>2]|0;if((i|0)>=(c[q>>2]|0))break Ia}}i=0;do{m=c[m+(i<<3)>>2]|0;do if(m|0){if(c[h>>2]|0){Xd(A,m);break}j=m;if((c[n>>2]|0)>>>0<=j>>>0?(c[o>>2]|0)>>>0>j>>>0:0){c[m>>2]=c[p>>2];c[p>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{j=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);i=i+1|0;m=c[l>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);Ja:do if(m){do if(A|0){i=A+480|0;if(!(c[i>>2]|0)){h=m;if((c[A+304>>2]|0)>>>0>h>>>0)break;if((c[A+308>>2]|0)>>>0<=h>>>0)break;j=A+300|0;c[m>>2]=c[j>>2];c[j>>2]=m}else Xd(A,m);m=i;rd=2140;break Ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);rd=2138;break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);rd=2138;break}}else rd=2138;while(0);if((rd|0)==2138)if(!A){pd=l;rd=2145}else{m=A+480|0;rd=2140}do if((rd|0)==2140){if(c[m>>2]|0){Xd(A,l);break}j=l;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else{pd=l;rd=2145}}while(0);do if((rd|0)==2145?pd|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](pd);break}else{j=Wa[c[29352>>2]&127](pd)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](pd);break}while(0);if(!r)break}if(A|0){if(c[A+480>>2]|0){Xd(A,r);break}j=r;if((c[A+304>>2]|0)>>>0<=j>>>0?(c[A+308>>2]|0)>>>0>j>>>0:0){j=A+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);Xi(A,k);break}case 241:{H=td+-80|0;K=td+-68|0;y=c[td+-56>>2]|0;D=c[td+-44>>2]|0;k=c[td+-40>>2]|0;E=c[td+-20>>2]|0;F=c[td+4>>2]|0;M=td+-116|0;v=c[td+-92>>2]|0;N=c[j>>2]|0;x=(c[M>>2]|0)!=0;O=td+-64|0;l=(c[O>>2]|0)==0;do if(x)if(l)if(!E){rd=2387;break}else{l=1;m=H;rd=2171;break}else{cd(j,46151,Za);rd=2387;break}else{if(!l){if(a[N+165>>0]|0){cd(j,39404,_a);rd=2387;break}l=wk(N,H)|0;if((l|0)<0){c[bb>>2]=H;cd(j,39421,bb);rd=2387;break}else m=K}else{l=d[N+164>>0]|0;m=H}if((E|0)!=0&(l|0)>-1)rd=2171;else rd=2387}while(0);Ka:do if((rd|0)==2171){B=N+81|0;if(!(a[B>>0]|0)){t=N+165|0;if((l|0)!=1&(a[t>>0]|0)!=0){i=E+12|0;h=c[i>>2]|0;do if(h|0){if(c[N+480>>2]|0){Xd(N,h);break}pd=h;if((c[N+304>>2]|0)>>>0<=pd>>>0?(c[N+308>>2]|0)>>>0>pd>>>0:0){pd=N+300|0;c[h>>2]=c[pd>>2];c[pd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{pd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[i>>2]=0}s=E+8|0;h=c[s>>2]|0;if(!h)i=E+12|0;else{n=c[(c[j>>2]|0)+16>>2]|0;i=0;while(1)if((c[n+(i<<4)+12>>2]|0)==(h|0))break;else i=i+1|0;i=n+(i<<4)|0}C=E+16|0;i=bd(j,0,c[C>>2]|0,c[i>>2]|0)|0;h=c[j>>2]|0;u=E+24|0;n=c[u>>2]|0;do if(n|0){if(h|0?c[h+480>>2]|0:0){Vi(h,n);break}kd=n+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(h,n)}while(0);c[u>>2]=i;La:do if(i){pd=i+32|0;c[pd>>2]=(c[pd>>2]|0)+1;if(a[E+45>>0]&2){q=c[E+72>>2]|0;h=c[i+8>>2]|0;Ma:do if(h|0){r=d[208+(d[q>>0]|0)>>0]|0;while(1){o=c[h>>2]|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-r|0;if(!(pd<<24>>24==0|(n|0)!=0)){p=q;do{o=o+1|0;p=p+1|0;pd=a[o>>0]|0;n=(d[208+(pd&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(n|0)!=0))}if(!n)break;h=c[h+20>>2]|0;if(!h)break Ma}c[E+76>>2]=h;break La}while(0);c[hc>>2]=q;c[hc+4>>2]=0;cd(j,41107,hc);a[j+17>>0]=1;i=0}}else i=0;while(0);if((a[t>>0]|0)==0?(i|0)!=0&(c[O>>2]|0)==0:0)A=(c[i+72>>2]|0)==(c[(c[N+16>>2]|0)+28>>2]|0)?1:l;else A=l;if((a[B>>0]|0)==0?(Zc=c[j>>2]|0,c[_c>>2]=j,Zc=c[Zc+16>>2]|0,c[_c+12>>2]=c[Zc+(A<<4)>>2],c[_c+4>>2]=c[Zc+(A<<4)+12>>2],c[_c+16>>2]=31419,c[_c+20>>2]=m,Zc=(A|0)==1,c[_c+8>>2]=Zc&1,(al(_c,E)|0)==0):0){i=c[s>>2]|0;if(!i)l=E+12|0;else{h=c[(c[j>>2]|0)+16>>2]|0;l=0;while(1)if((c[h+(l<<4)+12>>2]|0)==(i|0))break;else l=l+1|0;l=h+(l<<4)|0}z=bd(j,0,c[C>>2]|0,c[l>>2]|0)|0;l=c[j>>2]|0;i=c[u>>2]|0;do if(i|0){if(l|0?c[l+480>>2]|0:0){Vi(l,i);break}kd=i+32|0;pd=(c[kd>>2]|0)+-1|0;c[kd>>2]=pd;if(!pd)Vi(l,i)}while(0);c[u>>2]=z;Na:do if(z|0){pd=z+32|0;c[pd>>2]=(c[pd>>2]|0)+1;Oa:do if(a[E+45>>0]&2){o=c[E+72>>2]|0;l=c[z+8>>2]|0;Pa:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){h=c[l>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=o;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break;l=c[l+20>>2]|0;if(!l)break Pa}c[E+76>>2]=l;break Oa}while(0);c[Ec>>2]=o;c[Ec+4>>2]=0;cd(j,41107,Ec);a[j+17>>0]=1;break Na}while(0);if(c[z+56>>2]|0){cd(j,46197,Fc);rd=2387;break Ka}w=qj(N,m)|0;if(!w){rd=2387;break Ka}Qa:do if(!(vk(j,w)|0)){u=j+200|0;t=a[u>>0]|0;s=(t&255)>1;do if(!s){n=c[(c[N+16>>2]|0)+(A<<4)+12>>2]|0;o=c[n+52>>2]|0;if(!o){i=n+44|0;l=n+48|0}else{i=a[w>>0]|0;if(!(i<<24>>24))l=0;else{l=0;h=w;do{h=h+1|0;l=G(l+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[h>>0]|0}while(i<<24>>24!=0)}l=(l>>>0)%((c[n+40>>2]|0)>>>0)|0;i=o+(l<<3)|0;l=o+(l<<3)+4|0}i=c[i>>2]|0;Ra:do if(!i)l=59292;else{p=d[208+(d[w>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;i=i+-1|0;n=c[l+12>>2]|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-p|0;if(!(pd<<24>>24==0|(h|0)!=0)){o=w;do{n=n+1|0;o=o+1|0;pd=a[n>>0]|0;h=(d[208+(pd&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(h|0)!=0))}if(!h)break Ra;if(!i){l=59292;break}}}while(0);if(!(c[l+8>>2]|0))break;if(!v){c[Yc>>2]=m;cd(j,46238,Yc);rd=2378;break Qa}h=c[j+116>>2]|0;h=(h|0)==0?j:h;m=h+84|0;i=c[m>>2]|0;l=1<>2]=i|l;if(!Zc){rd=2378;break Qa}q=c[h>>2]|0;l=q+16|0;if(c[(c[l>>2]|0)+20>>2]|0){rd=2378;break Qa}if(a[h+199>>0]|0){rd=2378;break Qa}m=Pe(c[q>>2]|0,0,q,qd,0,542)|0;if(m|0){cd(h,32157,$c);c[h+12>>2]=m;rd=2378;break Qa}qd=c[qd>>2]|0;c[(c[l>>2]|0)+20>>2]=qd;l=c[q+92>>2]|0;h=c[qd+4>>2]|0;c[h+4>>2]=c[qd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;i=h+80|0;l=c[i>>2]|0;if(!l)break;m=l+-4|0;c[i>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270;break}else{l=Wa[c[29352>>2]&127](m)|0;rd=2270}while(0);do if((rd|0)==2270){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{rd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);rd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((rd|0)!=7)break;l=q+81|0;do if(!(a[l>>0]|0)){if(a[q+82>>0]|0)break;a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;l=q+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);rd=2378;break Qa}while(0);rd=2378;break Qa}while(0);r=c[z>>2]|0;do if(r|0){l=a[r>>0]|0;Sa:do if(!(l<<24>>24)){l=39441;rd=2285}else{qd=l&255;l=208+qd|0;do if((qd|32|0)==115){l=a[r+1>>0]|0;if(!(l<<24>>24)){l=39442;rd=2285;break Sa}l=l&255;if((l|32|0)!=113){m=113;l=208+l|0;break}l=a[r+2>>0]|0;if(!(l<<24>>24)){l=39443;rd=2285;break Sa}l=l&255;if((l|32|0)!=108){m=108;l=208+l|0;break}l=a[r+3>>0]|0;if(!(l<<24>>24)){l=39444;rd=2285;break Sa}l=l&255;if((l|32|0)!=105){m=105;l=208+l|0;break}l=a[r+4>>0]|0;if(!(l<<24>>24)){l=39445;rd=2285;break Sa}l=l&255;if((l|32|0)!=116){m=116;l=208+l|0;break}l=a[r+5>>0]|0;if(!(l<<24>>24)){l=39446;rd=2285;break Sa}l=l&255;if((l|32|0)!=101){m=101;l=208+l|0;break}l=a[r+6>>0]|0;if(!(l<<24>>24)){l=39447;rd=2285;break Sa}if(l<<24>>24==95)break Sa;else{m=95;l=208+(l&255)|0}}else m=115;while(0);fd=d[l>>0]|0;ad=m;rd=2289}while(0);if((rd|0)==2285){fd=0;ad=a[208+(d[l>>0]|0)>>0]|0;rd=2289}if((rd|0)==2289?(fd|0)!=(ad&255|0):0)break;cd(j,46264,gd);rd=2378;break Qa}while(0);l=c[z+12>>2]|0;if((y|0)!=65&(l|0)!=0){c[id>>2]=(y|0)==33?46339:46346;c[id+4>>2]=E;c[id+8>>2]=0;cd(j,46302,id);rd=2378;break}q=(y|0)==65;if(q&(l|0)==0){c[jd>>2]=E;c[jd+4>>2]=0;cd(j,46352,jd);rd=2378;break}do if(s){h=q?33:y;if(N|0){rd=2319;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](36)|0;i=1;l=h;rd=2341;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}m=Wa[c[29340>>2]&127](l)|0;if(!m)break Qa;l=Wa[c[29352>>2]&127](m)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){q=m;i=1;break}c[14987]=l;q=m;i=1}else{m=c[z+72>>2]|0;i=c[N+16>>2]|0;if(!m)l=-1e6;else{l=0;while(1)if((c[i+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}p=c[i+(l<<4)>>2]|0;if(x)n=c[i+16>>2]|0;else n=p;o=(l|0)==1;h=x|o?5:7;i=c[j>>2]|0;l=a[i+165>>0]|0;do if(!((l|t)<<24>>24)){m=c[i+312>>2]|0;if(!m)break;l=$a[m&127](c[i+316>>2]|0,h,w,r,n,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,ld);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)!=2){cd(j,39231,md);c[j+12>>2]=1;rd=2378;break Qa}if(l|0){rd=2378;break Qa}i=c[j>>2]|0;l=a[i+165>>0]|0}while(0);m=o?34855:34585;do if(!(l<<24>>24)){if(a[u>>0]|0)break;l=c[i+312>>2]|0;if(!l)break;l=$a[l&127](c[i+316>>2]|0,18,m,0,p,c[j+240>>2]|0)|0;if((l|0)==1){cd(j,39216,nd);c[j+12>>2]=23;rd=2378;break Qa}if((l|2|0)==2)if(!l)break;else{rd=2378;break Qa}else{cd(j,39231,od);c[j+12>>2]=1;rd=2378;break Qa}}while(0);h=q?33:y;rd=2319}while(0);Ta:do if((rd|0)==2319){if(c[N+272>>2]|0){if(a[B>>0]|0){rd=2379;break Qa}}else{do if((e[N+276>>1]|0)>=36){l=N+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}l=N+296|0;m=c[l>>2]|0;if(!m){l=N+292|0;break}else{c[l>>2]=c[m>>2];i=N+284|0;c[i>>2]=(c[i>>2]|0)+1;i=0;l=h;rd=2341;break Ta}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}m=_d(N,36,0)|0;i=0;l=h;rd=2341}while(0);if((rd|0)==2341)if(!m){rd=2378;break}else{q=m;h=l}p=q+4|0;I=p;J=I+32|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[q>>2]=w;n=c[C>>2]|0;Ua:do if(!n)i=0;else{o=(Eu(n)|0)+1|0;Va:do if(i){qd=Sv(o|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){i=0;break Ua}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;rd=2367;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){qd=c[14978]|0;pd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){i=0;break Ua}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[N+272>>2]|0){if(a[B>>0]|0){i=0;break Ua}}else{do if(!(0<0|(0==0?(e[N+276>>1]|0)>>>0>>0:0))){m=N+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}m=N+296|0;l=c[m>>2]|0;if(!l){l=N+292|0;break}else{c[m>>2]=c[l>>2];rd=N+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2367;break Va}}else l=N+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(N,o,0)|0;rd=2367}while(0);if((rd|0)==2367)if(!l){i=0;break}ew(l|0,n|0,o|0)|0;i=l}while(0);c[p>>2]=i;c[q+20>>2]=c[(c[N+16>>2]|0)+(A<<4)+12>>2];c[q+24>>2]=c[z+72>>2];a[q+8>>0]=D;a[q+9>>0]=(h|0)==33?1:2;Wa:do if((d[u>>0]|0)>1){m=c[C>>2]|0;l=c[j+272>>2]|0;if(!l){m=0;l=F;break}while(1){if((c[l>>2]|0)==(m|0))break;l=c[l+12>>2]|0;if(!l){m=0;l=F;break Wa}}c[l>>2]=i;m=0;l=F}else{if(!F){m=F;l=0;break}m=F;l=dk(N,F,1,0)|0}while(0);c[q+12>>2]=l;c[q+16>>2]=k;c[j+236>>2]=q;qi(N,E);l=q;k=m;r=q;break Ka}else rd=2378;while(0);if((rd|0)==2378?N|0:0)rd=2379;do if((rd|0)==2379){if(c[N+480>>2]|0){Xd(N,w);rd=2387;break Ka}l=w;if((c[N+304>>2]|0)>>>0>l>>>0)break;if((c[N+308>>2]|0)>>>0<=l>>>0)break;rd=N+300|0;c[w>>2]=c[rd>>2];c[rd>>2]=w;rd=2387;break Ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);rd=2387;break Ka}else{rd=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);rd=2387;break Ka}}while(0);if((a[N+164>>0]|0)==1){rd=N+166|0;a[rd>>0]=a[rd>>0]|1;rd=2387}else rd=2387}else rd=2387}else rd=2387}while(0);do if((rd|0)==2387){qi(N,E);if(k){p=k+4|0;l=c[k>>2]|0;Xa:do if((c[p>>2]|0)>0){i=N+480|0;h=N+304|0;n=N+308|0;o=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[p>>2]|0))break Xa}}m=0;do{l=c[l+(m<<3)>>2]|0;do if(l|0){if(c[i>>2]|0){Xd(N,l);break}rd=l;if((c[h>>2]|0)>>>0<=rd>>>0?(c[n>>2]|0)>>>0>rd>>>0:0){c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);m=m+1|0;l=c[k>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);Ya:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;rd=N+300|0;c[l>>2]=c[rd>>2];c[rd>>2]=l}else Xd(N,l);l=m;rd=2420;break Ya}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2418;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2418;break}}else rd=2418;while(0);if((rd|0)==2418)if(N){l=N+480|0;rd=2420}if((rd|0)==2420){if(c[l>>2]|0){Xd(N,k);l=0;k=F;r=0;break}rd=k;if((c[N+304>>2]|0)>>>0<=rd>>>0?(c[N+308>>2]|0)>>>0>rd>>>0:0){l=N+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;l=0;k=F;r=0;break}}if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);l=0;k=F;r=0;break}else{l=0;k=F;r=0}}else{l=0;k=F;r=0}}while(0);if(k|0)ni(N,k);do if(!((l|0)==0|(c[j+236>>2]|0)!=0)){Xi(N,c[l+28>>2]|0);k=c[l>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+4>>2]|0;do if(k|0){if(N|0){if(c[N+480>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=c[l+12>>2]|0;if(k|0)ni(N,k);k=c[l+16>>2]|0;do if(k|0){q=k+4|0;l=c[k>>2]|0;Za:do if((c[q>>2]|0)>0){h=N+480|0;n=N+304|0;o=N+308|0;p=N+300|0;if(!N){m=0;while(1){l=c[l+(m<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=m+1|0;l=c[k>>2]|0;if((m|0)>=(c[q>>2]|0))break Za}}i=0;do{l=c[l+(i<<3)>>2]|0;_a:do if(l|0){if(c[h>>2]|0){Xd(N,l);break}m=l;do if((c[n>>2]|0)>>>0<=m>>>0){if((c[o>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[p>>2];c[p>>2]=l;break _a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0;l=c[k>>2]|0}while((i|0)<(c[q>>2]|0))}while(0);$a:do if(l){do if(N|0){m=N+480|0;if(!(c[m>>2]|0)){i=l;if((c[N+304>>2]|0)>>>0>i>>>0)break;if((c[N+308>>2]|0)>>>0<=i>>>0)break;j=N+300|0;c[l>>2]=c[j>>2];c[j>>2]=l}else Xd(N,l);l=m;rd=2487;break $a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);rd=2485;break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);rd=2485;break}}else rd=2485;while(0);if((rd|0)==2485)if(N){l=N+480|0;rd=2487}if((rd|0)==2487){if(c[l>>2]|0){Xd(N,k);break}j=k;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r|0){if(N|0){if(c[N+480>>2]|0){Xd(N,r);break}j=r;if((c[N+304>>2]|0)>>>0<=j>>>0?(c[N+308>>2]|0)>>>0>j>>>0:0){j=N+300|0;c[r>>2]=c[j>>2];c[j>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{j=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}while(0);if(!(c[O>>2]|0)){qd=H;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}else{qd=K;rd=c[qd+4>>2]|0;j=M;c[j>>2]=c[qd>>2];c[j+4>>2]=rd;break a}}case 242:{c[td+4>>2]=e[td+2>>1];break}case 243:{c[td+-8>>2]=65;break}case 244:{c[td+16>>2]=33;break}case 246:case 245:{c[td+4>>2]=e[td+2>>1];c[td+8>>2]=0;break}case 247:{c[td+-20>>2]=122;c[td+-16>>2]=c[td+4>>2];break}case 315:case 267:case 248:{c[td+16>>2]=0;break}case 268:case 249:{c[td+-8>>2]=c[td+4>>2];break}case 250:{rd=td+-8|0;j=td+-20|0;c[(c[(c[j>>2]|0)+40>>2]|0)+36>>2]=c[rd>>2];c[(c[j>>2]|0)+40>>2]=c[rd>>2];break}case 251:{j=c[td+-8>>2]|0;c[j+40>>2]=j;break}case 252:{pd=td+4|0;qd=c[pd+4>>2]|0;rd=td+-20|0;c[rd>>2]=c[pd>>2];c[rd+4>>2]=qd;cd(j,38526,i);break}case 253:{cd(j,38621,n);break}case 254:{cd(j,38705,o);break}case 255:{l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;i=c[td+-68>>2]&255;h=td+-80|0;n=c[j>>2]|0;o=an(j,122,td+-56|0,c[h>>2]|0,c[td+4>>2]|0)|0;if(!o)k=m;else{if((d[j+200>>0]|0)<=1){j=gk(n,l,1)|0;c[o+20>>2]=j;if(!m){k=m;m=0}else{k=m;m=dk(n,m,1,0)|0}}else{c[o+20>>2]=l;l=0;k=0}c[o+16>>2]=m;a[o+1>>0]=i}if(l|0)ri(n,l);if(k|0)ni(n,k);c[h>>2]=o;break}case 256:{q=c[td+-32>>2]|0;l=c[td+-20>>2]|0;m=c[td+-68>>2]&255;r=c[td+-8>>2]|0;s=td+-80|0;t=c[j>>2]|0;u=an(j,120,td+-44|0,c[s>>2]|0,c[td+4>>2]|0)|0;do if(!u){do if(q|0){p=q+4|0;k=c[q>>2]|0;ab:do if((c[p>>2]|0)>0){i=t+480|0;h=t+304|0;n=t+308|0;o=t+300|0;if(!t){m=0;while(1){k=c[k+(m<<3)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);m=m+1|0;k=c[q>>2]|0;if((m|0)>=(c[p>>2]|0))break ab}}m=0;do{k=c[k+(m<<3)>>2]|0;do if(k|0){if(c[i>>2]|0){Xd(t,k);break}j=k;if((c[h>>2]|0)>>>0<=j>>>0?(c[n>>2]|0)>>>0>j>>>0:0){c[k>>2]=c[o>>2];c[o>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);m=m+1|0;k=c[q>>2]|0}while((m|0)<(c[p>>2]|0))}while(0);bb:do if(k){do if(t|0){m=t+480|0;if(!(c[m>>2]|0)){i=k;if((c[t+304>>2]|0)>>>0>i>>>0)break;if((c[t+308>>2]|0)>>>0<=i>>>0)break;j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k}else Xd(t,k);k=q;rd=2569;break bb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);rd=2567;break}else{rd=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);rd=2567;break}}else rd=2567;while(0);if((rd|0)==2567)if(!t)k=q;else{m=t+480|0;k=q;rd=2569}if((rd|0)==2569){if(c[m>>2]|0){Xd(t,k);break}j=k;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){j=t+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}}if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(r){k=c[r>>2]|0;if(k|0)ri(t,k);k=c[r+4>>2]|0;if(k|0)ni(t,k);k=c[r+8>>2]|0;if(k|0)ri(t,k);k=c[r+12>>2]|0;if(k|0)ni(t,k);if(t|0){if(c[t+480>>2]|0){Xd(t,r);k=l;break}j=r;if((c[t+304>>2]|0)>>>0<=j>>>0?(c[t+308>>2]|0)>>>0>j>>>0:0){k=t+300|0;c[r>>2]=c[k>>2];c[k>>2]=r;k=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);k=l;break}else{k=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);k=l;break}}else k=l}else{if((d[j+200>>0]|0)>1)k=0;else{k=l;l=fk(t,l,1)|0}c[u+8>>2]=l;c[u+24>>2]=q;c[u+28>>2]=r;a[u+1>>0]=m}while(0);if(k|0)pi(t,k,1);c[s>>2]=u;break}case 257:{l=c[td+-8>>2]|0;m=td+-56|0;i=c[j>>2]|0;h=an(j,121,td+-32|0,c[m>>2]|0,c[td+4>>2]|0)|0;if(!h)k=l;else{if((d[j+200>>0]|0)<=1)if(!l){k=l;l=0}else{k=l;l=dk(i,l,1,0)|0}else k=0;c[h+16>>2]=l;a[h+1>>0]=11}if(k|0)ni(i,k);c[m>>2]=h;break}case 258:{p=c[j>>2]|0;i=c[td+-8>>2]|0;q=td+-20|0;o=c[q>>2]|0;h=c[td+4>>2]|0;cb:do if(!p){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](44)|0;rd=2630;break}k=Wa[c[29356>>2]&127](44)|0;if((c[14985]|0)>>>0<44)c[14985]=44;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){j=c[14978]|0;rd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;qd=L()|0;c[14768]=((qd|0)<0|(qd|0)==0&rd>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0){c[14987]=l;rd=2633}else rd=2633}else rd=2631}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){rd=2631;break}}else{do if((e[p+276>>1]|0)>=44){l=p+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}l=p+296|0;k=c[l>>2]|0;if(!k){k=p+292|0;break}else{c[l>>2]=c[k>>2];rd=p+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=2630;break cb}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(p,44,0)|0;rd=2630}while(0);if((rd|0)==2630)if(!k)rd=2631;else rd=2633;if((rd|0)==2631)if(!i)k=0;else{pi(p,i,1);k=0}else if((rd|0)==2633){I=k+2|0;J=I+42|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));a[k>>0]=-125;c[k+8>>2]=i;a[k+1>>0]=11;while(1)if(!(a[880+(d[o>>0]|0)>>0]&1))break;else o=o+1|0;l=h-o|0;db:do if((l|0)<=0)if(!o)l=0;else{m=l;rd=2640}else while(1){m=l+-1|0;if(!(a[880+(d[o+m>>0]|0)>>0]&1)){m=l;rd=2640;break db}if((l|0)>1)l=m;else{rd=2640;break}}while(0);eb:do if((rd|0)==2640){h=Sv(m|0,((m|0)<0)<<31>>31|0,1,0)|0;n=L()|0;fb:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))rd=2650;else{l=0;break eb}else{do if(!(n>>>0>0|((n|0)==0?h>>>0>(e[p+276>>1]|0)>>>0:0))){i=p+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}i=p+296|0;l=c[i>>2]|0;if(!l){l=p+292|0;break}else{c[i>>2]=c[l>>2];j=p+284|0;c[j>>2]=(c[j>>2]|0)+1;break fb}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;rd=2650}while(0);if((rd|0)==2650)l=_d(p,h,n)|0;if(l){ew(l|0,o|0,m|0)|0;a[l+m>>0]=0;m=a[l>>0]|0;if(m<<24>>24){h=0;i=l;do{if(a[880+(m&255)>>0]&1)a[i>>0]=32;h=h+1|0;i=l+h|0;m=a[i>>0]|0}while(m<<24>>24!=0)}}else l=0}while(0);c[k+32>>2]=l}c[q>>2]=k;break}case 259:{k=ej(j,71,0,0)|0;c[td+-32>>2]=k;if(k|0)a[k+1>>0]=4;break}case 260:{k=oj(c[j>>2]|0,71,td+-8|0,1)|0;c[td+-56>>2]=k;if(k|0)a[k+1>>0]=c[td+-32>>2];break}case 261:{c[td+4>>2]=1;break}case 263:{c[td+4>>2]=3;break}case 264:{v=c[td+4>>2]|0;u=c[td+-8>>2]|0;w=c[j>>2]|0;gb:do if(!(a[w+81>>0]|0)){hb:do if(!(a[w+165>>0]|0)){i=j+4|0;h=w+24|0;n=(c[h>>2]&1|0)==0;o=w+16|0;qd=c[(c[o>>2]|0)+12>>2]|0;a[w+78>>0]=a[qd+77>>0]|0;if((b[qd+78>>1]&1)==0?(Da=eh(w,0,i,0)|0,(Da|0)!=0):0)k=Da;else rd=2670;ib:do if((rd|0)==2670){k=w+20|0;l=c[k>>2]|0;if((l|0)>1)do{m=l;l=l+-1|0;if((b[(c[(c[o>>2]|0)+(l<<4)+12>>2]|0)+78>>1]&1)==0?(Sa=eh(w,l,i,0)|0,Sa|0):0){k=Sa;break ib}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[w+89>>0]|0))break hb;c[h>>2]=c[h>>2]|16;break hb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break gb}else k=w+20|0;while(0);t=c[v+12>>2]|0;s=c[v+16>>2]|0;q=c[k>>2]|0;if((q|0)>0){r=(t|0)==0;p=c[w+16>>2]|0;k=0;o=0;do{h=o^o>>>0<2;if(!r){m=c[p+(h<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=t;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)rd=2687}else rd=2687;if((rd|0)==2687){rd=0;i=c[p+(h<<4)+12>>2]|0;h=c[i+52>>2]|0;if(!h){l=i+44|0;k=i+48|0}else{l=a[s>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=s;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[i+40>>2]|0)>>>0)|0;l=h+(k<<3)|0;k=h+(k<<3)+4|0}l=c[l>>2]|0;jb:do if(!l)k=59292;else{n=d[208+(d[s>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;i=c[k+12>>2]|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(m|0)!=0)){h=s;do{i=i+1|0;h=h+1|0;qd=a[i>>0]|0;m=(d[208+(qd&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(m|0)!=0))}if(!m)break jb;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(k){rd=2702;break}}o=o+1|0}while((o|0)<(q|0));if(k|0){jl(j,k);break}}if(!u){c[qc>>2]=v;c[qc+4>>2]=0;cd(j,46398,qc)}else hl(j,t);a[j+17>>0]=1}while(0);qi(w,v);break}case 265:{rd=c[td+-32>>2]|0;cn(j,24,30104,rd,rd,c[td+-8>>2]|0,c[td+4>>2]|0);break}case 266:{rd=c[td+4>>2]|0;cn(j,25,30144,rd,0,0,rd);break}case 269:{m=c[j>>2]|0;kb:do if(!(a[m+165>>0]|0)){i=j+4|0;h=m+24|0;n=(c[h>>2]&1|0)==0;o=m+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[m+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(ga=eh(m,0,i,0)|0,(ga|0)!=0):0)k=ga;else rd=2715;lb:do if((rd|0)==2715){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Ga=eh(m,k,i,0)|0,Ga|0):0){k=Ga;break lb}}while((l|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[m+89>>0]|0))break kb;c[h>>2]=c[h>>2]|16;break kb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;w=k+20|0;l=c[w>>2]|0;if((l|0)>0){x=j+116|0;v=0;u=c[k+16>>2]|0;k=l;while(1){l=c[(c[u+12>>2]|0)+16>>2]|0;if(l){do{k=c[l+8>>2]|0;if((c[k+56>>2]|0)==0?(ec=c[k+8>>2]|0,ec|0):0){t=k+72|0;s=ec;do{m=c[t>>2]|0;if(!m)k=-1e6;else{i=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[i+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}r=c[x>>2]|0;r=(r|0)==0?j:r;m=r+84|0;i=c[m>>2]|0;q=1<>2]=i|q,(k|0)==1):0)?(fc=c[r>>2]|0,gc=fc+16|0,(c[(c[gc>>2]|0)+20>>2]|0)==0):0)?(a[r+199>>0]|0)==0:0){k=Pe(c[fc>>2]|0,0,fc,qd,0,542)|0;if(k|0){cd(r,32157,cc);c[r+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[gc>>2]|0)+20>>2]=pd;k=c[fc+92>>2]|0;h=c[pd+4>>2]|0;c[h+4>>2]=c[pd>>2];do if(!(b[h+22>>1]&2)){n=h+32|0;o=h+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[n>>2]=k;i=h+80|0;k=c[i>>2]|0;if(!k)break;m=k+-4|0;c[i>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750;break}else{k=Wa[c[29352>>2]&127](m)|0;rd=2750}while(0);do if((rd|0)==2750){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{pd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[i>>2]=0}while(0);pd=Se(c[h>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((pd|0)!=7)break;k=fc+81|0;do if(!(a[k>>0]|0)){if(a[fc+82>>0]|0)break;a[k>>0]=1;if((c[fc+180>>2]|0)>0)c[fc+264>>2]=1;k=fc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[fc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break mb}while(0)}while(0);pd=r+80|0;c[pd>>2]=c[pd>>2]|q;bl(j,s,-1);s=c[s+20>>2]|0}while((s|0)!=0)}l=c[l>>2]|0}while((l|0)!=0);k=c[w>>2]|0}v=v+1|0;if((v|0)>=(k|0))break;else u=u+16|0}}break}case 270:{l=td+-8|0;s=td+4|0;v=c[j>>2]|0;nb:do if(!(a[v+165>>0]|0)){i=j+4|0;h=v+24|0;n=(c[h>>2]&1|0)==0;o=v+16|0;pd=c[(c[o>>2]|0)+12>>2]|0;a[v+78>>0]=a[pd+77>>0]|0;if((b[pd+78>>1]&1)==0?(Ea=eh(v,0,i,0)|0,(Ea|0)!=0):0)k=Ea;else rd=2770;ob:do if((rd|0)==2770){k=c[v+20>>2]|0;if((k|0)>1)do{m=k;k=k+-1|0;if((b[(c[(c[o>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(Pa=eh(v,k,i,0)|0,Pa|0):0){k=Pa;break ob}}while((m|0)>2);if(n)c[h>>2]=c[h>>2]&-2;if(!(a[v+89>>0]|0))break nb;c[h>>2]=c[h>>2]|16;break nb}while(0);c[j+12>>2]=k;j=j+36|0;c[j>>2]=(c[j>>2]|0)+1;break a}while(0);k=c[j>>2]|0;do if(!(c[s>>2]|0)){q=qj(k,l)|0;if(!q)break a;p=a[v+78>>0]|0;h=c[v+392>>2]|0;if(!h){m=v+384|0;k=v+388|0}else{m=a[q>>0]|0;if(!(m<<24>>24))k=0;else{k=0;i=q;do{i=i+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[i>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[v+380>>2]|0)>>>0)|0;m=h+(k<<3)|0;k=h+(k<<3)+4|0}m=c[m>>2]|0;pb:do if(!m)k=59292;else{o=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;h=c[k+12>>2]|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-o|0;if(!(pd<<24>>24==0|(i|0)!=0)){n=q;do{h=h+1|0;n=n+1|0;pd=a[h>>0]|0;i=(d[208+(pd&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(pd<<24>>24==0|(i|0)!=0))}if(!i)break pb;if(!m){k=59292;break}}}while(0);pd=c[k+8>>2]|0;if((pd|0)==0|(pd+(((p&255)+-1|0)*20|0)|0)==0){do if(v){if(c[v+480>>2]|0){Xd(v,q);break}pd=q;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[q>>2]=c[pd>>2];c[pd>>2]=q}else rd=2818}else rd=2818;while(0);do if((rd|0)==2818)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{pd=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);k=c[j>>2]|0;if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Vb);break a}k=wk(k,l)|0;if((k|0)>=0){l=s;m=k;break}c[Yb>>2]=l;cd(j,39421,Yb);break a}k=c[j>>2]|0;h=k+20|0;l=c[h>>2]|0;if((l|0)>0){i=0;m=c[k+16>>2]|0;while(1){k=c[(c[m+12>>2]|0)+16>>2]|0;if(!k)k=l;else{do{gn(j,c[k+8>>2]|0,q);k=c[k>>2]|0}while((k|0)!=0);k=c[h>>2]|0}i=i+1|0;if((i|0)>=(k|0))break;else{m=m+16|0;l=k}}}if(v|0){if(c[v+480>>2]|0){Xd(v,q);break a}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break a}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break a}}else{if(!(c[td+8>>2]|0)){m=d[k+164>>0]|0;break}if(a[k+165>>0]|0){cd(j,39404,Qa);break a}k=wk(k,l)|0;if((k|0)<0){c[Va>>2]=l;cd(j,39421,Va);break a}else{l=s;m=k}}while(0);u=qj(v,l)|0;if(u|0){k=c[(c[v+16>>2]|0)+(m<<4)>>2]|0;l=Sd(v,u,k)|0;if(!l){r=hi(v,u,k)|0;do if(!(c[v+480>>2]|0)){pd=u;if((c[v+304>>2]|0)>>>0<=pd>>>0?(c[v+308>>2]|0)>>>0>pd>>>0:0){pd=v+300|0;c[u>>2]=c[pd>>2];c[pd>>2]=u;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{pd=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}else Xd(v,u);while(0);if(!r){cd(j,46778,dc);break a}q=c[j+116>>2]|0;q=(q|0)==0?j:q;k=q+84|0;l=c[k>>2]|0;p=1<>2]=l|p,(m|0)==1):0)?(xc=c[q>>2]|0,lc=xc+16|0,(c[(c[lc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[xc>>2]|0,0,xc,qd,0,542)|0;if(k|0){cd(q,32157,jc);c[q+12>>2]=k;break}qd=c[qd>>2]|0;c[(c[lc>>2]|0)+20>>2]=qd;k=c[xc+92>>2]|0;i=c[qd+4>>2]|0;c[i+4>>2]=c[qd>>2];if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0){c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;qd=(c[14820]|0)+1|0;c[14820]=qd;c[14821]=(qd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2903}while(0);do if((rd|0)==2903){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{rd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);rd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((rd|0)==7){k=xc+81|0;do if(!(a[k>>0]|0)){if(a[xc+82>>0]|0)break;a[k>>0]=1;if((c[xc+180>>2]|0)>0)c[xc+264>>2]=1;k=xc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[xc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break}}}while(0);rd=q+80|0;c[rd>>2]=c[rd>>2]|p;bl(j,r,-1);break a}if((c[l+56>>2]|0)==0?(r=c[l+8>>2]|0,(r|0)!=0):0){s=l+72|0;t=j+116|0;do{l=c[s>>2]|0;if(!l)k=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}q=c[t>>2]|0;q=(q|0)==0?j:q;l=q+84|0;m=c[l>>2]|0;p=1<>2]=m|p,(k|0)==1):0)?(Rc=c[q>>2]|0,Sc=Rc+16|0,(c[(c[Sc>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){k=Pe(c[Rc>>2]|0,0,Rc,qd,0,542)|0;if(k|0){cd(q,32157,Pc);c[q+12>>2]=k;break}pd=c[qd>>2]|0;c[(c[Sc>>2]|0)+20>>2]=pd;k=c[Rc+92>>2]|0;i=c[pd+4>>2]|0;c[i+4>>2]=c[pd>>2];do if(!(b[i+22>>1]&2)){h=i+32|0;n=i+36|0;o=(c[h>>2]|0)-(c[n>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[h>>2]=k;m=i+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;pd=(c[14820]|0)+1|0;c[14820]=pd;c[14821]=(pd|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856;break}else{k=Wa[c[29352>>2]&127](l)|0;rd=2856}while(0);do if((rd|0)==2856){rd=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{pd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-pd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);pd=Se(c[i>>2]|0,h,o)|0;c[n>>2]=(c[h>>2]|0)-(o&65535);if((pd|0)!=7)break;k=Rc+81|0;do if(!(a[k>>0]|0)){if(a[Rc+82>>0]|0)break;a[k>>0]=1;if((c[Rc+180>>2]|0)>0)c[Rc+264>>2]=1;k=Rc+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Rc+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break qb}while(0)}while(0);pd=q+80|0;c[pd>>2]=c[pd>>2]|p;bl(j,r,-1);r=c[r+20>>2]|0}while((r|0)!=0);if(v|0)rd=2871}else rd=2871;if((rd|0)==2871){if(c[v+480>>2]|0){Xd(v,u);break a}j=u;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[u>>2]=c[j>>2];c[j>>2]=u;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break a}else{j=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break a}}break}case 271:{zj(j,0,0);break}case 272:{zj(j,td+-8|0,td+4|0);break}case 273:{w=c[td+-32>>2]|0;i=td+4|0;x=c[j>>2]|0;y=x+24|0;z=c[y>>2]|0;do if(!(a[x+81>>0]|0)){l=c[w+8>>2]|0;if(!l)k=w+12|0;else{m=c[x+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}s=bd(j,0,c[w+16>>2]|0,c[k>>2]|0)|0;if(s){l=c[s+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[j>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}v=c[(c[x+16>>2]|0)+(u<<4)>>2]|0;c[y>>2]=c[y>>2]|2;t=qj(x,i)|0;if(t){rb:do if(!(Sd(x,t,v)|0)){if(hi(x,t,v)|0){c[ib>>2]=t;cd(j,46940,ib);rd=3010;break}if((on(j,s)|0)==0?(vk(j,t)|0)==0:0){l=c[s>>2]|0;if(c[s+12>>2]|0){c[wb>>2]=l;cd(j,46999,wb);rd=3010;break}k=c[j>>2]|0;do if(((a[k+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(Gb=c[k+312>>2]|0,Gb|0):0){k=$a[Gb&127](c[k+316>>2]|0,26,v,l,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Hb);c[j+12>>2]=23;rd=3010;break rb}if((k|2|0)==2)if(!k)break;else{rd=3010;break rb}else{cd(j,39231,Ib);c[j+12>>2]=1;rd=3010;break rb}}while(0);if(!(Sk(j,s)|0)){if(!(c[s+56>>2]|0))q=0;else{k=c[s+64>>2]|0;sb:do if(!k)k=0;else while(1){if((c[k>>2]|0)==(x|0))break sb;k=c[k+24>>2]|0;if(!k){k=0;break}}while(0);q=(c[(c[c[k+8>>2]>>2]|0)+76>>2]|0)==0?0:k}r=j+8|0;k=c[r>>2]|0;h=j+116|0;tb:do if(!k){i=c[j>>2]|0;do if(!(c[h>>2]|0)){if(b[i+76>>1]&8)break;a[j+23>>0]=1}while(0);ub:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=2968;else break tb;else{do if((e[i+276>>1]|0)>=224){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];m=i+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break ub}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=2968}while(0);if((rd|0)==2968)m=_d(i,224,0)|0;if(!m)break;I=m+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[m>>2]=i;k=i+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=j;c[r>>2]=m;Di(m,61,0,1,0)|0;p=m;rd=2973}else{p=k;rd=2973}while(0);vb:do if((rd|0)==2973){h=c[h>>2]|0;a[((h|0)==0?j:h)+21>>0]=1;h=c[s>>2]|0;m=a[h>>0]|0;if((h|0)!=(-1|0)&m<<24>>24!=0){l=h;k=0;do{i=l+1|0;if((m&255)>191){l=i;while(1){m=a[l>>0]|0;if((m&-64)<<24>>24==-128)l=l+1|0;else break}}else{l=i;m=a[i>>0]|0}k=k+1|0}while(m<<24>>24!=0&(l|0)!=(-1|0))}else k=0;n=(u|0)==1;o=n&1;c[tc>>2]=v;c[tc+4>>2]=34585;c[tc+8>>2]=v;c[tc+12>>2]=h;c[tc+16>>2]=t;c[tc+20>>2]=o;c[tc+24>>2]=h;Ak(j,47026,tc);c[uc>>2]=v;c[uc+4>>2]=34585;c[uc+8>>2]=t;c[uc+12>>2]=t;c[uc+16>>2]=t;c[uc+20>>2]=k;c[uc+24>>2]=h;Ak(j,47187,uc);if(Sd(x,39382,v)|0){qd=c[s>>2]|0;c[vc>>2]=v;c[vc+4>>2]=t;c[vc+8>>2]=qd;Ak(j,47464,vc)}if(!n){c[wc>>2]=v;c[wc+4>>2]=h;c[wc+8>>2]=t;c[wc+12>>2]=h;c[wc+16>>2]=v;c[wc+20>>2]=t;Ak(j,47522,wc)}do if(q|0){i=j+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=p+108|0;k=c[i>>2]|0;m=p+112|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=110;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=0;c[qd+(k*20|0)+8>>2]=l;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,110,0,l,0)|0;if(!(a[(c[p>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[i>>2]|0)+-1|0;Ei(p,(c[p+104>>2]|0)+(k*20|0)|0,t,0)}k=c[i>>2]|0;if((c[m>>2]|0)>(k|0)){c[i>>2]=k+1;qd=c[p+104>>2]|0;a[qd+(k*20|0)>>0]=-91;b[qd+(k*20|0)+2>>1]=0;c[qd+(k*20|0)+4>>2]=l;c[qd+(k*20|0)+8>>2]=0;c[qd+(k*20|0)+12>>2]=0;c[qd+(k*20|0)+16>>2]=0;a[qd+(k*20|0)+1>>0]=0}else k=Di(p,165,l,0,0)|0;if(a[(c[p>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[i>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=q;a[m>>0]=-12;qd=q+12|0;c[qd>>2]=(c[qd>>2]|0)+1;break}else{Ei(p,l+(k*20|0)|0,q,-12);break}}while(0);i=c[r>>2]|0;do if(!i){c[Jc>>2]=v;c[Jc+4>>2]=34585;c[Jc+8>>2]=v;c[Jc+12>>2]=o;Ak(j,47804,Jc);if(n)break vb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(u<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;qd=c[i+104>>2]|0;a[qd+(m*20|0)>>0]=95;b[qd+(m*20|0)+2>>1]=0;c[qd+(m*20|0)+4>>2]=u;c[qd+(m*20|0)+8>>2]=1;c[qd+(m*20|0)+12>>2]=k;c[qd+(m*20|0)+16>>2]=0;a[qd+(m*20|0)+1>>0]=0}else Di(i,95,u,1,k)|0;Bk(c[r>>2]|0,u,0);if(n){c[Tc>>2]=v;c[Tc+4>>2]=34585;c[Tc+8>>2]=v;c[Tc+12>>2]=o;Ak(j,47804,Tc);break vb}else{Bk(c[r>>2]|0,1,0);c[Uc>>2]=v;c[Uc+4>>2]=34585;c[Uc+8>>2]=v;c[Uc+12>>2]=o;Ak(j,47804,Uc);break}}while(0);c[Vc>>2]=34585;c[Vc+4>>2]=v;Ak(j,47948,Vc)}while(0);qi(x,w);if(x|0)rd=3013}else rd=3010}else rd=3010}else{c[hb>>2]=t;cd(j,46940,hb);rd=3010}while(0);if((rd|0)==3010){qi(x,w);rd=3013}if((rd|0)==3013){if(c[x+480>>2]|0){Xd(x,t);break}j=t;if((c[x+304>>2]|0)>>>0<=j>>>0?(c[x+308>>2]|0)>>>0>j>>>0:0){j=x+300|0;c[t>>2]=c[j>>2];c[j>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else rd=3011}else rd=3011}else rd=3011;while(0);if((rd|0)==3011)qi(x,w);c[y>>2]=z;break}case 274:{h=td+-8|0;o=td+-4|0;c[o>>2]=(c[j+188>>2]|0)-(c[h>>2]|0)+(c[j+192>>2]|0);s=c[j>>2]|0;if((c[j+36>>2]|0)==0?(Nb=s+81|0,(a[Nb>>0]|0)==0):0){r=c[j+228>>2]|0;l=c[r+72>>2]|0;m=c[s+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}p=c[m+(t<<4)>>2]|0;q=(c[r>>2]|0)+16|0;m=c[r+4>>2]|0;i=(b[r+42>>1]|0)+-1|0;l=c[m+(i<<4)+4>>2]|0;k=Sd(s,q,p)|0;k=c[k>>2]|0;do if(((a[s+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(db=c[s+312>>2]|0,db|0):0){k=$a[db&127](c[s+316>>2]|0,26,p,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,eb);c[j+12>>2]=23;break a}if((k|2|0)==2)if(!k)break;else break a;else{cd(j,39231,fb);c[j+12>>2]=1;break a}}while(0);if(!l)l=0;else l=(a[c[l+12>>2]>>0]|0)==114?0:l;if(a[m+(i<<4)+15>>0]&1){cd(j,48091,jb);break a}if(c[r+8>>2]|0){cd(j,48123,kb);break a}if(!(0==0?(c[s+32>>2]&16384|0)==0:0)?(l|0)!=0&(c[r+16>>2]|0)!=0:0){cd(j,48150,lb);break a}k=(l|0)!=0;if(!(k|(a[m+(i<<4)+12>>0]|0)==0)){cd(j,48209,xb);break a}wb:do if(k){c[qd>>2]=0;do if(!(Wj(s,l,1,65,qd)|0)){m=c[qd>>2]|0;if(!m){cd(j,48262,Ab);break}if(!((b[m+8>>1]&9216)==0?!(c[m+24>>2]|0):0))Cg(m);k=c[m+32>>2]|0;do if(!k)rd=3059;else{if(c[k+480>>2]|0){Xd(k,m);break}l=m;if((c[k+304>>2]|0)>>>0>l>>>0){rd=3059;break}if((c[k+308>>2]|0)>>>0<=l>>>0){rd=3059;break}qd=k+300|0;c[m>>2]=c[qd>>2];c[qd>>2]=m}while(0);do if((rd|0)==3059)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qd=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);break wb}while(0);break a}while(0);h=c[h>>2]|0;n=c[o>>2]|0;xb:do if(h|0){m=Sv(n|0,0,1,0)|0;i=L()|0;yb:do if(c[s+272>>2]|0)if(!(a[Nb>>0]|0))rd=3075;else break xb;else{do if(0<0|(0==0?n>>>0<(e[s+276>>1]|0)>>>0:0)){k=s+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}k=s+296|0;l=c[k>>2]|0;if(!l){k=s+292|0;break}else{c[k>>2]=c[l>>2];qd=s+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break yb}}else k=s+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3075}while(0);if((rd|0)==3075)l=_d(s,m,i)|0;if(l|0){ew(l|0,h|0,n|0)|0;a[l+n>>0]=0;k=(c[o>>2]|0)+-1|0;m=s+24|0;i=c[m>>2]|0;if((k|0)>0){k=l+k|0;do{qd=a[k>>0]|0;if(qd<<24>>24!=59?(a[880+(qd&255)>>0]&1)==0:0)break;a[k>>0]=0;k=k+-1|0}while(k>>>0>l>>>0);k=c[m>>2]|0}else k=i;c[m>>2]=k|2;qd=c[r+52>>2]|0;c[Zb>>2]=p;c[Zb+4>>2]=34585;c[Zb+8>>2]=qd;c[Zb+12>>2]=l;c[Zb+16>>2]=qd+1;c[Zb+20>>2]=q;Ak(j,48308,Zb);zb:do if(!(c[s+480>>2]|0)){k=l;do if((c[s+304>>2]|0)>>>0<=k>>>0){if((c[s+308>>2]|0)>>>0<=k>>>0)break;qd=s+300|0;c[l>>2]=c[qd>>2];c[qd>>2]=l;break zb}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{qd=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(s,l);while(0);c[m>>2]=i}}while(0);p=j+8|0;k=c[p>>2]|0;Ab:do if(!k){m=c[j>>2]|0;if((c[j+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[j+23>>0]=1;Bb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3106;else break Ab;else{do if((e[m+276>>1]|0)>=224){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];qd=m+284|0;c[qd>>2]=(c[qd>>2]|0)+1;break Bb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3106}while(0);if((rd|0)==3106)k=_d(m,224,0)|0;if(k|0){I=k+104|0;J=I+120|0;do{c[I>>2]=0;I=I+4|0}while((I|0)<(J|0));c[k>>2]=m;l=m+4|0;m=c[l>>2]|0;if(m|0)c[m+4>>2]=k;c[k+8>>2]=m;c[k+4>>2]=0;c[l>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=j;c[p>>2]=k;Di(k,61,0,1,0)|0;rd=3111}}else rd=3111;while(0);do if((rd|0)==3111){o=j+19|0;l=a[o>>0]|0;if(!(l<<24>>24)){rd=j+44|0;n=(c[rd>>2]|0)+1|0;c[rd>>2]=n}else{n=l+-1<<24>>24;a[o>>0]=n;n=c[j+148+((n&255)<<2)>>2]|0}i=k+108|0;l=c[i>>2]|0;h=k+112|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=94;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=n;c[rd+(l*20|0)+12>>2]=2;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,94,t,n,2)|0;l=1<>2]=c[rd>>2]|l;if((t|0)!=1?a[(c[(c[(c[k>>2]|0)+16>>2]|0)+(t<<4)+4>>2]|0)+9>>0]|0:0){rd=k+156|0;c[rd>>2]=c[rd>>2]|l}l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=83;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=-2;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,83,n,-2,0)|0;l=c[i>>2]|0;m=l+2|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=47;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=n;c[rd+(l*20|0)+8>>2]=m;c[rd+(l*20|0)+12>>2]=0;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,47,n,m,0)|0;l=c[i>>2]|0;if((c[h>>2]|0)>(l|0)){c[i>>2]=l+1;rd=c[k+104>>2]|0;a[rd+(l*20|0)>>0]=95;b[rd+(l*20|0)+2>>1]=0;c[rd+(l*20|0)+4>>2]=t;c[rd+(l*20|0)+8>>2]=2;c[rd+(l*20|0)+12>>2]=3;c[rd+(l*20|0)+16>>2]=0;a[rd+(l*20|0)+1>>0]=0}else Di(k,95,t,2,3)|0;if(!n)break;k=a[o>>0]|0;if((k&255)>=8)break;a[o>>0]=k+1<<24>>24;c[j+148+((k&255)<<2)>>2]=n}while(0);i=c[p>>2]|0;if(i|0){k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;l=i+108|0;m=c[l>>2]|0;if((c[i+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[i+104>>2]|0;a[j+(m*20|0)>>0]=95;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=t;c[j+(m*20|0)+8>>2]=1;c[j+(m*20|0)+12>>2]=k;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(i,95,t,1,k)|0;Bk(c[p>>2]|0,t,0);if((t|0)!=1)Bk(c[p>>2]|0,1,0)}}break}case 275:{D=j+24|0;a[D>>0]=(a[D>>0]|0)+1<<24>>24;D=c[j>>2]|0;E=D+272|0;c[E>>2]=(c[E>>2]|0)+1;F=c[td+4>>2]|0;H=D+81|0;Cb:do if(!(a[H>>0]|0)){l=c[F+8>>2]|0;if(!l)k=F+12|0;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}C=bd(j,0,c[F+16>>2]|0,c[k>>2]|0)|0;if(C|0){if(c[C+56>>2]|0){cd(j,48417,Ia);break}if(c[C+12>>2]|0){cd(j,48451,Ja);break}if(!(on(j,C)|0)){l=c[C+72>>2]|0;if(!l)A=-1e6;else{m=c[D+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){A=k;break}else k=k+1|0}B=(D|0)==0;Db:do if(B){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](80)|0;rd=3176;break}k=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break Cb;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[E>>2]|0){if(a[H>>0]|0)break Cb}else{do if((e[D+276>>1]|0)>=80){l=D+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}l=D+296|0;k=c[l>>2]|0;if(!k){k=D+292|0;break}else{c[l>>2]=c[k>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3176;break Db}}else k=D+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(D,80,0)|0;rd=3176}while(0);if((rd|0)==3176)if(!k)break;I=k;J=I+80|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));c[j+228>>2]=k;y=k+32|0;c[y>>2]=1;h=b[C+42>>1]|0;z=k+42|0;b[z>>1]=h;h=((((h<<16>>16)+-1|0)/8|0)<<7)+128|0;Eb:do if(B){j=Sv(h|0,0,-1,-1)|0;qd=L()|0;if(!(qd>>>0>0|(qd|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](h)|0;rd=3201;break}l=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;rd=3202}else rd=3202}else l=0}else l=0}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break}}else{do if(!(0<0|(0==0?(e[D+276>>1]|0)>>>0>>0:0))){m=D+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}m=D+296|0;l=c[m>>2]|0;if(!l){l=D+292|0;break}else{c[m>>2]=c[l>>2];rd=D+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3201;break Eb}}else l=D+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,h,0)|0;rd=3201}while(0);if((rd|0)==3201)if(!l)l=0;else rd=3202;if((rd|0)==3202)gw(l|0,0,h|0)|0;x=k+4|0;c[x>>2]=l;c[kc>>2]=c[C>>2];j=dd(D,48481,kc)|0;c[k>>2]=j;l=c[x>>2]|0;if(!((j|0)==0|(l|0)==0)){ew(l|0,c[C+4>>2]|0,b[z>>1]<<4|0)|0;if((b[z>>1]|0)>0){p=D+276|0;q=D+288|0;r=D+300|0;s=D+296|0;t=D+284|0;u=D+292|0;o=0;do{v=c[x>>2]|0;w=v+(o<<4)|0;h=c[w>>2]|0;Fb:do if(!h)l=0;else{n=(Eu(h)|0)+1|0;Gb:do if(B){j=Sv(n|0,0,-1,-1)|0;qd=L()|0;if(qd>>>0>0|(qd|0)==0&j>>>0>2147483390){l=0;break Fb}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](n)|0;rd=3229;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;i=59064;m=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&m>>>0>0){j=c[14978]|0;qd=Tv(m|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=j>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break Fb}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[E>>2]|0){if(a[H>>0]|0){l=0;break Fb}}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0>>0:0))l=q;else{l=c[r>>2]|0;if(l|0){c[r>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}l=c[s>>2]|0;if(!l){l=u;break}c[s>>2]=c[l>>2];c[t>>2]=(c[t>>2]|0)+1;rd=3229;break Gb}while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(D,n,0)|0;rd=3229}while(0);if((rd|0)==3229){rd=0;if(!l){l=0;break}}ew(l|0,h|0,n|0)|0}while(0);c[w>>2]=l;c[v+(o<<4)+8>>2]=0;c[v+(o<<4)+4>>2]=0;o=o+1|0}while((o|0)<(b[z>>1]|0))}c[k+72>>2]=c[(c[D+16>>2]|0)+(A<<4)+12>>2];c[k+52>>2]=c[C+52>>2];c[y>>2]=1}}}}while(0);qi(D,F);break}case 276:{u=c[td+-56>>2]|0;i=td+-20|0;p=td+4|0;v=c[j>>2]|0;l=c[u+8>>2]|0;if(!l)k=u+12|0;else{m=c[v+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;k=m+(k<<4)|0}r=bd(j,0,c[u+16>>2]|0,c[k>>2]|0)|0;Hb:do if(r|0?(on(j,r)|0)==0:0){k=(c[r+56>>2]|0)==0?((c[r+12>>2]|0)==0?0:39579):48814;if(k|0){rd=c[r>>2]|0;c[Ma>>2]=k;c[Ma+4>>2]=rd;cd(j,48828,Ma);break}l=c[r+72>>2]|0;m=c[v+16>>2]|0;if(!l)t=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){t=k;break}else k=k+1|0}s=c[m+(t<<4)>>2]|0;k=c[r>>2]|0;l=c[j>>2]|0;do if(((a[l+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zb=c[l+312>>2]|0,zb|0):0){k=$a[zb&127](c[l+316>>2]|0,26,s,k,0,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bb);c[j+12>>2]=23;break Hb}if((k|2|0)==2)if(!k)break;else break Hb;else{cd(j,39231,Db);c[j+12>>2]=1;break Hb}}while(0);q=qj(v,i)|0;if(q|0){qd=b[r+42>>1]|0;o=qd<<16>>16;Ib:do if(qd<<16>>16>0){h=c[r+4>>2]|0;n=d[208+(d[q>>0]|0)>>0]|0;k=0;do{m=c[h+(k<<4)>>2]|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-n|0;if(!(qd<<24>>24==0|(l|0)!=0)){i=q;do{m=m+1|0;i=i+1|0;qd=a[m>>0]|0;l=(d[208+(qd&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(qd<<24>>24==0|(l|0)!=0))}if(!l)break Ib;k=k+1|0}while((k|0)<(o|0))}else k=0;while(0);Jb:do if((k|0)!=(o|0)){l=c[j+116>>2]|0;a[((l|0)==0?j:l)+21>>0]=1;l=qj(v,p)|0;if(!l)l=0;else{h=a[880+(d[c[p>>2]>>0]|0)>>0]&-128&255;n=c[r>>2]|0;o=(t|0)==1;p=o&1;c[Wb>>2]=s;c[Wb+4>>2]=34585;c[Wb+8>>2]=s;c[Wb+12>>2]=n;c[Wb+16>>2]=k;c[Wb+20>>2]=l;c[Wb+24>>2]=h;c[Wb+28>>2]=p;c[Wb+32>>2]=n;Ak(j,48500,Wb);n=c[r>>2]|0;c[Xb>>2]=34585;c[Xb+4>>2]=s;c[Xb+8>>2]=n;c[Xb+12>>2]=k;c[Xb+16>>2]=l;c[Xb+20>>2]=h;Ak(j,48694,Xb);h=j+8|0;n=c[h>>2]|0;do if(!n){c[_b>>2]=s;c[_b+4>>2]=34585;c[_b+8>>2]=s;c[_b+12>>2]=p;Ak(j,47804,_b);if(o)break Jb}else{k=(c[c[(c[(c[j>>2]|0)+16>>2]|0)+(t<<4)+12>>2]>>2]|0)+1|0;m=n+108|0;i=c[m>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[m>>2]=i+1;qd=c[n+104>>2]|0;a[qd+(i*20|0)>>0]=95;b[qd+(i*20|0)+2>>1]=0;c[qd+(i*20|0)+4>>2]=t;c[qd+(i*20|0)+8>>2]=1;c[qd+(i*20|0)+12>>2]=k;c[qd+(i*20|0)+16>>2]=0;a[qd+(i*20|0)+1>>0]=0}else Di(n,95,t,1,k)|0;Bk(c[h>>2]|0,t,0);if(o){c[$b>>2]=s;c[$b+4>>2]=34585;c[$b+8>>2]=s;c[$b+12>>2]=p;Ak(j,47804,$b);break Jb}else{Bk(c[h>>2]|0,1,0);c[ac>>2]=s;c[ac+4>>2]=34585;c[ac+8>>2]=s;c[ac+12>>2]=p;Ak(j,47804,ac);break}}while(0);c[bc>>2]=34585;c[bc+4>>2]=s;Ak(j,47948,bc)}}else{c[Ub>>2]=q;cd(j,31333,Ub);l=0}while(0);qi(v,u);k=(v|0)==0;do if(!k){if(c[v+480>>2]|0){Xd(v,q);break}j=q;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[q>>2]=c[j>>2];c[j>>2]=q}else rd=3281}else rd=3281;while(0);do if((rd|0)==3281)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{j=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!l)break a;if(!k){if(c[v+480>>2]|0){Xd(v,l);break a}j=l;if((c[v+304>>2]|0)>>>0<=j>>>0?(c[v+308>>2]|0)>>>0>j>>>0:0){j=v+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;break a}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break a}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break a}}}while(0);qi(v,u);break}case 277:{Aj(j,0);break}case 278:{Aj(j,td+4|0);break}case 279:{o=td+4|0;bj(j,td+-32|0,td+-20|0,0,0,1,c[td+-44>>2]|0);r=c[j+228>>2]|0;if(r|0){q=c[j>>2]|0;h=qj(q,o)|0;p=r+56|0;rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[na>>2]=c[r>>2];cd(j,38221,na)}n=r+60|0;k=c[n>>2]|0;Kb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3317;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3316;break Kb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3316}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0>>0:0))){rd=3326;break}k=Zd(i,k,m,0)|0;rd=3316;break}k=Zd(i,k,m,0)|0;rd=3316}while(0);if((rd|0)==3316)if(!k)rd=3317;else rd=3326;do if((rd|0)==3317){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}qd=h;if((c[i+304>>2]|0)>>>0<=qd>>>0?(c[i+308>>2]|0)>>>0>qd>>>0:0){qd=i+300|0;c[h>>2]=c[qd>>2];c[qd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{qd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-qd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3326){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=h;c[k+(qd<<2)>>2]=0;c[n>>2]=k}while(0);qd=c[p>>2]|0;m=(qd<<2)+8|0;i=c[j>>2]|0;if((qd+3|0)>=(c[i+116>>2]|0)){c[Eb>>2]=c[r>>2];cd(j,38221,Eb)}k=c[n>>2]|0;Lb:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0>>0:0))){k=i+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}k=i+296|0;l=c[k>>2]|0;if(!l){k=i+292|0;break}else{c[k>>2]=c[l>>2];Jb=i+284|0;c[Jb>>2]=(c[Jb>>2]|0)+1;Jb=l;rd=3346;break Lb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Jb=_d(i,m,0)|0;rd=3346}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0>>0:0))){rd=3347;break}Jb=Zd(i,k,m,0)|0;rd=3346;break}Jb=Zd(i,k,m,0)|0;rd=3346}while(0);if((rd|0)==3346?Jb|0:0){k=Jb;rd=3347}if((rd|0)==3347){pd=c[p>>2]|0;qd=pd+1|0;c[p>>2]=qd;c[k+(pd<<2)>>2]=0;c[k+(qd<<2)>>2]=0;c[n>>2]=k}i=c[r>>2]|0;Mb:do if(!i)h=0;else{h=(Eu(i)|0)+1|0;Nb:do if(!q){qd=Sv(h|0,0,-1,-1)|0;pd=L()|0;if(pd>>>0>0|(pd|0)==0&qd>>>0>2147483390){h=0;break Mb}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](h)|0;rd=3373;break}k=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){qd=c[14978]|0;pd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;od=L()|0;c[14768]=((od|0)<0|(od|0)==0&pd>>>0<=qd>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){h=0;break Mb}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){h=0;break Mb}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];rd=q+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3373;break Nb}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(q,h,0)|0;rd=3373}while(0);if((rd|0)==3373)if(!k){h=0;break}ew(k|0,i|0,h|0)|0;h=k}while(0);rd=c[p>>2]|0;m=(rd<<2)+8|0;i=c[j>>2]|0;if((rd+3|0)>=(c[i+116>>2]|0)){c[ic>>2]=c[r>>2];cd(j,38221,ic)}k=c[n>>2]|0;Ob:do if(!k){if(c[i+272>>2]|0){if(a[i+81>>0]|0){rd=3395;break}}else{do if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0>>0:0))){l=i+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}l=i+296|0;k=c[l>>2]|0;if(!k){k=i+292|0;break}else{c[l>>2]=c[k>>2];rd=i+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3394;break Ob}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(i,m,0)|0;rd=3394}else{rd=k;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[i+276>>1]|0)>>>0>>0:0))){rd=3404;break}k=Zd(i,k,m,0)|0;rd=3394;break}k=Zd(i,k,m,0)|0;rd=3394}while(0);if((rd|0)==3394)if(!k)rd=3395;else rd=3404;do if((rd|0)==3395){if(h|0){if(c[i+480>>2]|0){Xd(i,h);break}rd=h;if((c[i+304>>2]|0)>>>0<=rd>>>0?(c[i+308>>2]|0)>>>0>rd>>>0:0){rd=i+300|0;c[h>>2]=c[rd>>2];c[rd>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{rd=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}else if((rd|0)==3404){qd=c[p>>2]|0;rd=qd+1|0;c[p>>2]=rd;c[k+(qd<<2)>>2]=h;c[k+(rd<<2)>>2]=0;c[n>>2]=k}while(0);c[j+184>>2]=(c[o>>2]|0)+(c[td+8>>2]|0)-(c[j+180>>2]|0);h=c[n>>2]|0;if(h|0){m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[q+16>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}i=c[r>>2]|0;l=c[h>>2]|0;m=c[j>>2]|0;k=c[(c[m+16>>2]|0)+(k<<4)>>2]|0;if(((a[m+165>>0]|0)==0?(a[j+200>>0]|0)==0:0)?(zc=c[m+312>>2]|0,zc|0):0){k=$a[zc&127](c[m+316>>2]|0,29,i,l,k,c[j+240>>2]|0)|0;if((k|0)==1){cd(j,39216,Bc);c[j+12>>2]=23;break a}if((k|2|0)!=2){cd(j,39231,Cc);c[j+12>>2]=1}}}}break}case 280:{p=j+244|0;n=c[p>>2]|0;do if(n|0?(ob=c[j+228>>2]|0,ob|0):0){o=c[j+248>>2]|0;m=c[j>>2]|0;i=Sv(o|0,((o|0)<0)<<31>>31|0,1,0)|0;h=L()|0;Pb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3428;else n=0;else{do if(!(h>>>0>0|((h|0)==0?i>>>0>(e[m+276>>1]|0)>>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3429;break Pb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3428}while(0);if((rd|0)==3428){k=_d(m,i,h)|0;rd=3429}if((rd|0)==3429)if(!k)n=0;else{ew(k|0,n|0,o|0)|0;a[k+o>>0]=0;n=k}o=ob+56|0;qd=c[o>>2]|0;i=(qd<<2)+8|0;h=c[j>>2]|0;if((qd+3|0)>=(c[h+116>>2]|0)){c[mb>>2]=c[ob>>2];cd(j,38221,mb)}m=ob+60|0;k=c[m>>2]|0;Qb:do if(!k){if(c[h+272>>2]|0){if(a[h+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0>>0:0))){k=h+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}k=h+296|0;l=c[k>>2]|0;if(!l){k=h+292|0;break}else{c[k>>2]=c[l>>2];Fb=h+284|0;c[Fb>>2]=(c[Fb>>2]|0)+1;Fb=l;rd=3450;break Qb}}else k=h+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}Fb=_d(h,i,0)|0;rd=3450}else{rd=k;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){if(!(0<0|(0==0?(e[h+276>>1]|0)>>>0>>0:0))){rd=3460;break}Fb=Zd(h,k,i,0)|0;rd=3450;break}Fb=Zd(h,k,i,0)|0;rd=3450}while(0);if((rd|0)==3450?Fb|0:0){k=Fb;rd=3460}if((rd|0)==3460){qd=c[o>>2]|0;rd=qd+1|0;c[o>>2]=rd;c[k+(qd<<2)>>2]=n;c[k+(rd<<2)>>2]=0;c[m>>2]=k;break}if(n|0){if(c[h+480>>2]|0){Xd(h,n);break}rd=n;if((c[h+304>>2]|0)>>>0<=rd>>>0?(c[h+308>>2]|0)>>>0>rd>>>0:0){rd=h+300|0;c[n>>2]=c[rd>>2];c[rd>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{rd=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-rd;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}while(0);c[p>>2]=0;c[j+248>>2]=0;break}case 283:case 282:case 281:{k=j+244|0;l=c[k>>2]|0;m=c[td+4>>2]|0;if(!l){c[k>>2]=m;k=c[td+8>>2]|0}else k=m+(c[td+8>>2]|0)-l|0;c[j+248>>2]=k;break}case 285:case 284:{k=c[td+4>>2]|0;if(k|0){rd=j+264|0;c[k+4>>2]=c[rd>>2];c[rd>>2]=k;c[j+268>>2]=k}break}case 286:{rd=td+-56|0;j=Bj(j,0,rd,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 287:{rd=td+-80|0;j=Bj(j,c[rd>>2]|0,td+-56|0,c[td+-44>>2]|0,c[td+-8>>2]|0)|0;c[rd>>2]=j;break}case 314:{m=c[j>>2]|0;Rb:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](92)|0;rd=3591;break}k=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){rd=c[14978]|0;qd=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;pd=L()|0;c[14768]=((pd|0)<0|(pd|0)==0&qd>>>0<=rd>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;rd=3592}else rd=3592}else rd=3607}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){rd=3607;break}}else{do if((e[m+276>>1]|0)>=92){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];rd=m+284|0;c[rd>>2]=(c[rd>>2]|0)+1;rd=3591;break Rb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,92,0)|0;rd=3591}while(0);if((rd|0)==3591)if(!k)rd=3607;else{l=k;rd=3592}if((rd|0)==3592){I=l;J=I+92|0;do{a[I>>0]=0;I=I+1|0}while((I|0)<(J|0));i=c[j>>2]|0;o=c[td+4>>2]|0;p=c[td+8>>2]|0;Sb:do if(o){h=Sv(p|0,0,1,0)|0;n=L()|0;Tb:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))rd=3603;else{k=0;break Sb}else{do if(0<0|(0==0?p>>>0<(e[i+276>>1]|0)>>>0:0)){m=i+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}m=i+296|0;k=c[m>>2]|0;if(!k){k=i+292|0;break}else{c[m>>2]=c[k>>2];j=i+284|0;c[j>>2]=(c[j>>2]|0)+1;break Tb}}else k=i+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3603}while(0);if((rd|0)==3603)k=_d(i,h,n)|0;if(k){ew(k|0,o|0,p|0)|0;a[k+p>>0]=0}else k=0}else k=0;while(0);c[l>>2]=k;c[l+36>>2]=c[td+-20>>2];k=l}else if((rd|0)==3607){k=c[td+-20>>2]|0;if(!k)k=0;else{ni(c[j>>2]|0,k);k=0}}c[td+-20>>2]=k;break}case 289:{qd=td+4|0;rd=td+-20|0;Cj(j,c[qd>>2]|0,c[rd>>2]|0);c[(c[qd>>2]|0)+32>>2]=c[rd>>2];c[rd>>2]=c[qd>>2];break}case 290:{p=td+-8|0;if(!(c[p>>2]|0))k=0;else{m=c[j>>2]|0;n=c[td+-44>>2]|0;o=c[td+-40>>2]|0;Ub:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Vb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3483;else{k=0;break Ub}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Vb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3483}while(0);if((rd|0)==3483)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[c[p>>2]>>2]=k;k=c[p>>2]|0}c[td+-44>>2]=k;break}case 291:{k=c[td+4>>2]|0;l=c[td+-20>>2]|0;m=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l);if(m|0)ri(c[j>>2]|0,m)}else{c[k+8>>2]=l;c[k+12>>2]=m}c[td+-44>>2]=k;break}case 292:{p=c[td+4>>2]|0;k=c[td+-20>>2]|0;l=c[td+-8>>2]|0;q=td+-56|0;if(!p){if(k|0)ri(c[j>>2]|0,k);if(l|0)ri(c[j>>2]|0,l)}else{c[p+8>>2]=k;c[p+12>>2]=l;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-52>>2]|0;Wb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Xb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3507;else{k=0;break Wb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Xb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3507}while(0);if((rd|0)==3507)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 293:{k=c[td+4>>2]|0;l=c[td+-8>>2]|0;if(!k){if(l|0)ri(c[j>>2]|0,l)}else{c[k+8>>2]=0;c[k+12>>2]=l}c[td+-32>>2]=k;break}case 294:{p=c[td+4>>2]|0;k=c[td+-8>>2]|0;q=td+-44|0;if(!p){if(k|0)ri(c[j>>2]|0,k)}else{c[p+8>>2]=0;c[p+12>>2]=k;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-40>>2]|0;Yb:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;Zb:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3533;else{k=0;break Yb}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break Zb}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3533}while(0);if((rd|0)==3533)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 313:{rd=c[td+-8>>2]|0;j=td+-44|0;c[rd+36>>2]=c[j>>2];c[j>>2]=rd;break}case 296:{p=c[td+4>>2]|0;q=td+-8|0;if(p|0){c[p+8>>2]=0;c[p+12>>2]=0;m=c[j>>2]|0;n=c[q>>2]|0;o=c[td+-4>>2]|0;_b:do if(n){i=Sv(o|0,0,1,0)|0;h=L()|0;$b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))rd=3552;else{k=0;break _b}else{do if(0<0|(0==0?o>>>0<(e[m+276>>1]|0)>>>0:0)){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];j=m+284|0;c[j>>2]=(c[j>>2]|0)+1;break $b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;rd=3552}while(0);if((rd|0)==3552)k=_d(m,i,h)|0;if(k){ew(k|0,n|0,o|0)|0;a[k+o>>0]=0}else k=0}else k=0;while(0);c[p+4>>2]=k}c[q>>2]=p;break}case 297:{j=Dj(j,0,87,0,82,0,0)|0;c[td+16>>2]=j;break}case 298:{rd=td+-20|0;j=Dj(j,c[rd>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,82,0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 299:{rd=td+-56|0;j=Dj(j,c[rd>>2]|0,c[td+-32>>2]|0,c[td+-28>>2]|0,c[td+-8>>2]|0,c[td+-4>>2]|0,a[td+4>>0]|0)|0;c[rd>>2]=j;break}case 312:{c[td+-8>>2]=c[td+4>>2];break}case 311:{a[td+4>>0]=b[td+2>>1];break}case 306:case 304:case 302:{c[td+-8>>2]=e[td+-10>>1];c[td+-4>>2]=0;break}case 305:{rd=td+-8|0;j=c[rd>>2]|0;c[rd>>2]=e[td+2>>1];c[td+-4>>2]=j;break}case 307:{a[td+16>>0]=0;break}case 308:{a[td+-8>>0]=a[td+4>>0]|0;break}case 310:case 309:{a[td+-8>>0]=b[td+-10>>1];break}default:{}}while(0);j=b[17152+(g<<1)>>1]|0;sd=sd<<24>>24;g=b[11376+((b[18656+(e[td+(sd*12|0)>>1]<<1)>>1]|0)+(j&65535)<<1)>>1]|0;sd=sd+1|0;rd=td+(sd*12|0)|0;c[f>>2]=rd;b[rd>>1]=g;b[td+(sd*12|0)+2>>1]=j;f=g;Ra=ud;return f|0} function zj(f,g,h){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,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;I=Ra;Ra=Ra+64|0;B=I+48|0;A=I+40|0;s=I+32|0;r=I+24|0;q=I+16|0;p=I+8|0;u=I;F=I+52|0;G=c[f>>2]|0;a:do if(!(a[G+165>>0]|0)){n=f+4|0;o=G+24|0;k=(c[o>>2]&1|0)==0;l=G+16|0;C=c[(c[l>>2]|0)+12>>2]|0;a[G+78>>0]=a[C+77>>0]|0;if(!((b[C+78>>1]&1)==0?(i=eh(G,0,n,0)|0,(i|0)!=0):0))H=4;b:do if((H|0)==4){i=c[G+20>>2]|0;if((i|0)>1)do{j=i;i=i+-1|0;if((b[(c[(c[l>>2]|0)+(i<<4)+12>>2]|0)+78>>1]&1)==0?(m=eh(G,i,n,0)|0,m|0):0){i=m;break b}}while((j|0)>2);if(k)c[o>>2]=c[o>>2]&-2;if(!(a[G+89>>0]|0))break a;c[o>>2]=c[o>>2]|16;break a}while(0);c[f+12>>2]=i;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;Ra=I;return}while(0);c:do if(!g){n=G+20|0;if((c[n>>2]|0)>0){o=f+116|0;p=f+40|0;q=f+44|0;r=f+8|0;s=f+23|0;m=0;do{d:do if((m|0)!=1){l=c[(c[(c[f>>2]|0)+16>>2]|0)+(m<<4)+12>>2]|0;k=c[o>>2]|0;k=(k|0)==0?f:k;i=k+84|0;g=c[i>>2]|0;j=1<>2]=g|j;g=k+80|0;c[g>>2]=c[g>>2]|j;g=c[p>>2]|0;c[p>>2]=g+3;hn(f,m,g,0,0);j=(c[q>>2]|0)+1|0;k=c[p>>2]|0;i=c[l+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);i=c[r>>2]|0;if(!i){j=c[f>>2]|0;if((c[o>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[s>>0]=1;e:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=37;else break d;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break e}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=37}while(0);if((H|0)==37){H=0;i=_d(j,224,0)|0}if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[r>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=m;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,m,0,0)|0;break}}while(0);m=m+1|0}while((m|0)<(c[n>>2]|0))}}else{j=h+4|0;do if(!(c[j>>2]|0)){C=wk(G,g)|0;i=c[f>>2]|0;if((C|0)<=-1){if(!(c[j>>2]|0)){i=d[i+164>>0]|0;break}if(a[i+165>>0]|0){cd(f,39404,r);break c}i=wk(i,g)|0;if((i|0)>=0){g=h;break}c[s>>2]=g;cd(f,39421,s);break c}p=c[(c[i+16>>2]|0)+(C<<4)+12>>2]|0;q=f+116|0;o=c[q>>2]|0;o=(o|0)==0?f:o;i=o+84|0;g=c[i>>2]|0;n=1<>2]=g|n,(C|0)==1):0)?(x=c[o>>2]|0,t=x+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[o+199>>0]|0)==0:0){i=Pe(c[x>>2]|0,0,x,F,0,542)|0;if(i|0){cd(o,32157,u);c[o+12>>2]=i;break}F=c[F>>2]|0;c[(c[t>>2]|0)+20>>2]=F;i=c[x+92>>2]|0;j=c[F+4>>2]|0;c[j+4>>2]=c[F>>2];if(!(b[j+22>>1]&2)){k=j+32|0;l=j+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0)?(c[k>>2]=i,w=j+80|0,v=c[w>>2]|0,v|0):0){g=v+-4|0;c[w>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63;break}else{i=Wa[c[29352>>2]&127](g)|0;H=63}while(0);do if((H|0)==63){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[w>>2]=0}F=Se(c[j>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((F|0)==7){i=x+81|0;do if((a[i>>0]|0)==0?(a[x+82>>0]|0)==0:0){a[i>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;i=x+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[x+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=o+80|0;c[k>>2]=c[k>>2]|n;k=f+40|0;g=c[k>>2]|0;c[k>>2]=g+3;hn(f,C,g,0,0);j=(c[f+44>>2]|0)+1|0;k=c[k>>2]|0;i=c[p+16>>2]|0;if(i|0)do{jn(f,c[i+8>>2]|0,0,g,j,k);i=c[i>>2]|0}while((i|0)!=0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[q>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=93;else break c;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break f}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=93}while(0);if((H|0)==93)i=_d(j,224,0)|0;if(!i)break c;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=C;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break c}else{Di(i,142,C,0,0)|0;break c}}else{i=c[f>>2]|0;if(a[i+165>>0]|0){cd(f,39404,p);break c}i=wk(i,g)|0;if((i|0)<0){c[q>>2]=g;cd(f,39421,q);break c}else g=h}while(0);if(!(c[j>>2]|0))i=0;else i=c[(c[G+16>>2]|0)+(i<<4)>>2]|0;t=qj(G,g)|0;if(t|0){s=hi(G,t,i)|0;g:do if(!s){q=bd(f,0,t,i)|0;if(q|0){g=c[q+72>>2]|0;if(!g)s=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){s=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<>2]=g|o,(s|0)==1):0)?(E=c[p>>2]|0,z=E+16|0,(c[(c[z>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[E>>2]|0,0,E,F,0,542)|0;if(i|0){cd(p,32157,B);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[z>>2]|0)+20>>2]=F;i=c[E+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025){if(i+-1&i|0)break;c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187;break}else{i=Wa[c[29352>>2]&127](g)|0;H=187}while(0);do if((H|0)==187){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=E+81|0;do if(!(a[i>>0]|0)){if(a[E+82>>0]|0)break;a[i>>0]=1;if((c[E+180>>2]|0)>0)c[E+264>>2]=1;i=E+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[E+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,s,i,c[q>>2]|0,38087);jn(f,q,0,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=214;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break h}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=214}while(0);if((H|0)==214)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=s;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,s,0,0)|0;break}}}else{q=c[s+12>>2]|0;g=c[q+72>>2]|0;if(!g)h=-1e6;else{j=c[(c[f>>2]|0)+16>>2]|0;i=0;while(1)if((c[j+(i<<4)+12>>2]|0)==(g|0)){h=i;break}else i=i+1|0}r=f+116|0;p=c[r>>2]|0;p=(p|0)==0?f:p;i=p+84|0;g=c[i>>2]|0;o=1<>2]=g|o,(h|0)==1):0)?(D=c[p>>2]|0,y=D+16|0,(c[(c[y>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){i=Pe(c[D>>2]|0,0,D,F,0,542)|0;if(i|0){cd(p,32157,A);c[p+12>>2]=i;break}F=c[F>>2]|0;c[(c[y>>2]|0)+20>>2]=F;i=c[D+92>>2]|0;k=c[F+4>>2]|0;c[k+4>>2]=c[F>>2];if(!(b[k+22>>1]&2)){l=k+32|0;m=k+36|0;n=(c[l>>2]|0)-(c[m>>2]|0)|0;do if((i+-512|0)>>>0<65025?(i+-1&i|0)==0:0){c[l>>2]=i;j=k+80|0;i=c[j>>2]|0;if(!i)break;g=i+-4|0;c[j>>2]=g;i=g;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[g>>2]=c[14819];c[14819]=g;F=(c[14820]|0)+1|0;c[14820]=F;c[14821]=(F|0)<(c[14815]|0)&1;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133;break}else{i=Wa[c[29352>>2]&127](g)|0;H=133}while(0);do if((H|0)==133){c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{F=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[j>>2]=0}while(0);F=Se(c[k>>2]|0,l,n)|0;c[m>>2]=(c[l>>2]|0)-(n&65535);if((F|0)==7){i=D+81|0;do if(!(a[i>>0]|0)){if(a[D+82>>0]|0)break;a[i>>0]=1;if((c[D+180>>2]|0)>0)c[D+264>>2]=1;i=D+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[D+236>>2]|0;if(!i)break;c[i+12>>2]=7}while(0);break}}}while(0);k=p+80|0;c[k>>2]=c[k>>2]|o;k=f+40|0;i=c[k>>2]|0;c[k>>2]=i+3;hn(f,h,i,c[s>>2]|0,38091);jn(f,q,s,i,(c[f+44>>2]|0)+1|0,c[k>>2]|0);k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[r>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;i:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=160;else break g;else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];F=j+284|0;c[F>>2]=(c[F>>2]|0)+1;break i}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=160}while(0);if((H|0)==160)i=_d(j,224,0)|0;if(!i)break;g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;F=c[i+104>>2]|0;a[F+(j*20|0)>>0]=-114;b[F+(j*20|0)+2>>1]=0;c[F+(j*20|0)+4>>2]=h;c[F+(j*20|0)+8>>2]=0;c[F+(j*20|0)+12>>2]=0;c[F+(j*20|0)+16>>2]=0;a[F+(j*20|0)+1>>0]=0;break}else{Di(i,142,h,0,0)|0;break}}while(0);if(G|0){if(c[G+480>>2]|0){Xd(G,t);break}F=t;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){F=G+300|0;c[t>>2]=c[F>>2];c[F>>2]=t;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{F=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}}while(0);if(a[G+90>>0]|0){Ra=I;return}k=f+8|0;i=c[k>>2]|0;if(!i){j=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[f+23>>0]=1;j:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))H=246;else{Ra=I;return}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;i=c[g>>2]|0;if(i|0){c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}g=j+296|0;i=c[g>>2]|0;if(!i){i=j+292|0;break}else{c[g>>2]=c[i>>2];G=j+284|0;c[G>>2]=(c[G>>2]|0)+1;break j}}else i=j+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;H=246}while(0);if((H|0)==246)i=_d(j,224,0)|0;if(!i){Ra=I;return}g=i+104|0;l=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(l|0));c[i>>2]=j;g=j+4|0;j=c[g>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=f;c[k>>2]=i;Di(i,61,0,1,0)|0}g=i+108|0;j=c[g>>2]|0;if((c[i+112>>2]|0)>(j|0)){c[g>>2]=j+1;g=c[i+104>>2]|0;a[g+(j*20|0)>>0]=-98;g=g+(j*20|0)+1|0;l=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(l|0));Ra=I;return}else{Di(i,158,0,0,0)|0;Ra=I;return}}function Aj(d,f){d=d|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;w=Ra;Ra=Ra+48|0;t=w+40|0;s=w+16|0;q=w+8|0;n=w;o=d+228|0;u=c[o>>2]|0;v=c[d>>2]|0;if(!u){Ra=w;return}p=d+244|0;m=c[p>>2]|0;do if(m){l=c[d+248>>2]|0;j=Sv(l|0,((l|0)<0)<<31>>31|0,1,0)|0;k=L()|0;a:do if(c[v+272>>2]|0)if(!(a[v+81>>0]|0))r=14;else m=0;else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[v+276>>1]|0)>>>0:0))){i=v+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}i=v+296|0;g=c[i>>2]|0;if(!g){g=v+292|0;break}else{c[i>>2]=c[g>>2];r=v+284|0;c[r>>2]=(c[r>>2]|0)+1;r=15;break a}}else g=v+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=14}while(0);if((r|0)==14){g=_d(v,j,k)|0;r=15}if((r|0)==15)if(!g)m=0;else{ew(g|0,m|0,l|0)|0;a[g+l>>0]=0;m=g}g=u+56|0;l=c[g>>2]|0;j=(l<<2)+8|0;k=c[d>>2]|0;if((l+3|0)>=(c[k+116>>2]|0)){c[n>>2]=c[u>>2];cd(d,38221,n)}l=u+60|0;i=c[l>>2]|0;b:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0>>0:0))){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;r=36;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(k,j,0)|0;r=36}else{r=i;if((c[k+304>>2]|0)>>>0<=r>>>0?(c[k+308>>2]|0)>>>0>r>>>0:0){if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0>>0:0))){h=i;r=46;break}h=Zd(k,i,j,0)|0;r=36;break}h=Zd(k,i,j,0)|0;r=36}while(0);if((r|0)==36?h|0:0)r=46;if((r|0)==46){k=c[g>>2]|0;n=k+1|0;c[g>>2]=n;c[h+(k<<2)>>2]=m;c[h+(n<<2)>>2]=0;c[l>>2]=h;break}if(m){if(c[k+480>>2]|0){Xd(k,m);break}n=m;if((c[k+304>>2]|0)>>>0<=n>>>0?(c[k+308>>2]|0)>>>0>n>>>0:0){n=k+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}else g=u+56|0;while(0);c[p>>2]=0;if((c[g>>2]|0)<1){Ra=w;return}if(a[v+165>>0]|0){if(!(mi((c[u+72>>2]|0)+8|0,c[u>>2]|0,u)|0)){c[o>>2]=0;Ra=w;return}g=v+81|0;if(a[g>>0]|0){Ra=w;return}if(a[v+82>>0]|0){Ra=w;return}a[g>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;g=v+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[v+236>>2]|0;if(!g){Ra=w;return}c[g+12>>2]=7;Ra=w;return}if(!f)g=d+180|0;else{g=d+180|0;c[d+184>>2]=(c[f>>2]|0)-(c[g>>2]|0)+(c[f+4>>2]|0)}c[q>>2]=g;j=dd(v,48861,q)|0;h=c[u+72>>2]|0;i=c[v+16>>2]|0;if(!h)m=-1e6;else{g=0;while(1)if((c[i+(g<<4)+12>>2]|0)==(h|0)){m=g;break}else g=g+1|0}p=c[u>>2]|0;q=c[d+88>>2]|0;c[s>>2]=c[i+(m<<4)>>2];c[s+4>>2]=34585;c[s+8>>2]=p;c[s+12>>2]=p;c[s+16>>2]=j;c[s+20>>2]=q;Ak(d,48885,s);do if(j|0){if(c[v+480>>2]|0){Xd(v,j);break}s=j;if((c[v+304>>2]|0)>>>0<=s>>>0?(c[v+308>>2]|0)>>>0>s>>>0:0){s=v+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);k=d+8|0;g=c[k>>2]|0;c:do if(!g){j=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[j+76>>1]&8)==0:0)a[d+23>>0]=1;d:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))r=78;else{l=0;break c}else{do if((e[j+276>>1]|0)>=224){g=j+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}g=j+296|0;h=c[g>>2]|0;if(!h){g=j+292|0;break}else{c[g>>2]=c[h>>2];i=j+284|0;c[i>>2]=(c[i>>2]|0)+1;i=h;break d}}else g=j+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;r=78}while(0);if((r|0)==78)i=_d(j,224,0)|0;if(!i)l=0;else{g=i+104|0;h=g+120|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));c[i>>2]=j;g=j+4|0;h=c[g>>2]|0;if(h|0)c[h+4>>2]=i;c[i+8>>2]=h;c[i+4>>2]=0;c[g>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[k>>2]=i;Di(i,61,0,1,0)|0;l=i}}else l=g;while(0);g=c[k>>2]|0;h=(c[c[(c[(c[d>>2]|0)+16>>2]|0)+(m<<4)+12>>2]>>2]|0)+1|0;i=g+108|0;j=c[i>>2]|0;if((c[g+112>>2]|0)>(j|0)){c[i>>2]=j+1;s=c[g+104>>2]|0;a[s+(j*20|0)>>0]=95;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=m;c[s+(j*20|0)+8>>2]=1;c[s+(j*20|0)+12>>2]=h;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(g,95,m,1,h)|0;j=l+108|0;g=c[j>>2]|0;k=l+112|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;h=c[l+104>>2]|0;a[h+(g*20|0)>>0]=-98;g=h+(g*20|0)+1|0;h=g+19|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0))}else Di(l,158,0,0,0)|0;c[t>>2]=c[u>>2];Bk(l,m,dd(v,48973,t)|0);h=d+44|0;i=(c[h>>2]|0)+1|0;c[h>>2]=i;h=c[u>>2]|0;g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=110;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=0;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0}else g=Di(l,110,0,i,0)|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){if((g|0)<0)g=(c[j>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(g*20|0)|0,h,0)}g=c[j>>2]|0;if((c[k>>2]|0)>(g|0)){c[j>>2]=g+1;v=c[l+104>>2]|0;a[v+(g*20|0)>>0]=-95;b[v+(g*20|0)+2>>1]=0;c[v+(g*20|0)+4>>2]=m;c[v+(g*20|0)+8>>2]=i;c[v+(g*20|0)+12>>2]=0;c[v+(g*20|0)+16>>2]=0;a[v+(g*20|0)+1>>0]=0;Ra=w;return}else{Di(l,161,m,i,0)|0;Ra=w;return}}function Bj(b,f,g,h,i){b=b|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;s=Ra;Ra=Ra+16|0;o=s;r=c[b>>2]|0;q=qj(r,g)|0;n=(f|0)!=0;if(n&(q|0)!=0?(j=c[f>>2]|0,(j|0)>0):0){m=0;g=j;do{k=c[f+8+(m<<4)>>2]|0;l=a[q>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=q;do{l=l+1|0;k=k+1|0;t=a[l>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){c[o>>2]=q;cd(b,49e3,o);g=c[f>>2]|0}m=m+1|0}while((m|0)<(g|0))}a:do if(n){g=(c[f>>2]<<4)+24|0;t=f;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0>>0:0))){g=f;break}g=Zd(r,f,g,0)|0;break}g=Zd(r,f,g,0)|0}else{b:do if(!r){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;p=39;break}k=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;j=59064;g=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&g>>>0>0){t=c[14978]|0;o=Tv(g|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&o>>>0<=t>>>0)&1}g=Wa[c[29340>>2]&127](k)|0;if(!g){g=0;break a}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[r+272>>2]|0){if(a[r+81>>0]|0){g=0;break a}}else{do if((e[r+276>>1]|0)>=24){j=r+300|0;g=c[j>>2]|0;if(g|0){c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}j=r+296|0;g=c[j>>2]|0;if(!g){g=r+292|0;break}else{c[j>>2]=c[g>>2];p=r+284|0;c[p>>2]=(c[p>>2]|0)+1;p=39;break b}}else g=r+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(r,24,0)|0;p=39}while(0);if((p|0)==39)if(!g){g=0;break}j=g;k=j+24|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}while(0);if(!(a[r+81>>0]|0)){r=g+8|0;t=c[g>>2]|0;c[r+(t<<4)+8>>2]=i;c[r+(t<<4)+4>>2]=h;c[r+(t<<4)>>2]=q;c[r+(t<<4)+12>>2]=0;c[g>>2]=t+1;t=g;Ra=s;return t|0}if(h|0)ri(r,h);if(i|0)pi(r,i,1);if(!q){t=f;Ra=s;return t|0}if(c[r+480>>2]|0){Xd(r,q);t=f;Ra=s;return t|0}t=q;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[q>>2]=c[t>>2];c[t>>2]=q;t=f;Ra=s;return t|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);t=f;Ra=s;return t|0}return 0}function Cj(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;p=Ra;Ra=Ra+16|0;m=p+8|0;k=p;n=e+4|0;l=c[n>>2]|0;if(!l){Ra=p;return}o=c[b>>2]|0;a:do if(f|0){j=d[208+(d[l>>0]|0)>>0]|0;while(1){h=c[f>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(g|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;q=a[h>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}if(!g)break;f=c[f+32>>2]|0;if(!f)break a}if(!f){Ra=p;return}g=e+8|0;do if(!(c[g>>2]|0)){h=f+12|0;if(c[h>>2]|0?c[e+12>>2]|0:0){f=49047;break}if(!(a[f+19>>0]|0))f=49063;else{f=gk(o,c[f+8>>2]|0,0)|0;c[g>>2]=f;f=c[h>>2]|0;if(f|0){q=gk(o,f,0)|0;c[e+12>>2]=q}f=c[n>>2]|0;do if(f|0){if(o|0){if(c[o+480>>2]|0){Xd(o,f);break}q=f;if((c[o+304>>2]|0)>>>0<=q>>>0?(c[o+308>>2]|0)>>>0>q>>>0:0){q=o+300|0;c[f>>2]=c[q>>2];c[q>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[n>>2]=0;Ra=p;return}}else f=49030;while(0);c[m>>2]=f;c[m+4>>2]=l;cd(b,49083,m);Ra=p;return}while(0);c[k>>2]=l;cd(b,40596,k);Ra=p;return}function Dj(d,f,g,h,i,j,k){d=d|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;r=Ra;Ra=Ra+16|0;l=r;p=(f|0)==0;q=p&1;a:do if((g|0)==82&(i|0)==85)o=4;else{if((g|0)==83)switch(i|0){case 82:case 85:{o=4;break a}default:{}}n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](92)|0;o=28;break}l=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break a;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break a}else{do if((e[n+276>>1]|0)>=92){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];o=n+284|0;c[o>>2]=(c[o>>2]|0)+1;o=28;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(n,92,0)|0;o=28}while(0);if((o|0)==28)if(!l)break;m=l;n=m+92|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));a[l+16>>0]=p?86:f&255;a[l+17>>0]=g;a[l+18>>0]=i;if(!(k<<24>>24))k=(b[(c[d>>2]|0)+76>>1]&2)==0?0:66;a[l+20>>0]=k;a[l+19>>0]=q;s=pn(d,j)|0;c[l+28>>2]=s;s=pn(d,h)|0;c[l+24>>2]=s;s=l;Ra=r;return s|0}while(0);if((o|0)==4)cd(d,49116,l);if(j|0)ni(c[d>>2]|0,j);if(!h){s=0;Ra=r;return s|0}ni(c[d>>2]|0,h);s=0;Ra=r;return s|0}function Ej(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;e=c[i>>2]|0;if(e|0){i=e;return i|0}e=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[e+76>>1]&8)==0:0)a[d+23>>0]=1;h=Yd(e,224,0)|0;if(!h){i=0;return i|0}f=h+104|0;g=f+120|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));c[h>>2]=e;e=e+4|0;f=c[e>>2]|0;if(f|0)c[f+4>>2]=h;c[h+8>>2]=f;c[h+4>>2]=0;c[e>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[i>>2]=h;Di(h,61,0,1,0)|0;i=h;return i|0}function Fj(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;k=d+108|0;l=c[k>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[k>>2]=l+1;k=c[d+104>>2]|0;a[k+(l*20|0)>>0]=e;b[k+(l*20|0)+2>>1]=0;c[k+(l*20|0)+4>>2]=f;c[k+(l*20|0)+8>>2]=g;c[k+(l*20|0)+12>>2]=h;c[k+(l*20|0)+16>>2]=0;a[k+(l*20|0)+1>>0]=0;gd(d,l,i,j);return l|0}else{l=Di(d,e,f,g,h)|0;gd(d,l,i,j);return l|0}return 0}function Gj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0;p=f+8|0;k=c[p>>2]|0;a:do if(!k){o=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{o=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)o=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[p>>2]=m;Di(m,61,0,1,0)|0;o=m}}else o=k;while(0);k=i+28|0;Hj(f,h,c[k>>2]|0,(j|0)==109&1,c[i>>2]|0);if(!(c[i+36>>2]&32)){m=c[k>>2]|0;n=b[i+42>>1]|0;l=o+108|0;k=c[l>>2]|0;if((c[o+112>>2]|0)>(k|0)){c[l>>2]=k+1;f=c[o+104>>2]|0;a[f+(k*20|0)>>0]=j;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=g;c[f+(k*20|0)+8>>2]=m;c[f+(k*20|0)+12>>2]=h;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else k=Di(o,j,g,m,h)|0;if(a[(c[o>>2]|0)+81>>0]|0)return;j=c[o+104>>2]|0;a[j+(k*20|0)+1>>0]=-3;c[j+(k*20|0)+16>>2]=n;return}k=c[i+8>>2]|0;c:do if(!k)k=0;else while(1){i=k+55|0;if(((d[i>>0]|d[i+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);l=c[k+44>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;i=c[o+104>>2]|0;a[i+(n*20|0)>>0]=j;b[i+(n*20|0)+2>>1]=0;c[i+(n*20|0)+4>>2]=g;c[i+(n*20|0)+8>>2]=l;c[i+(n*20|0)+12>>2]=h;c[i+(n*20|0)+16>>2]=0;a[i+(n*20|0)+1>>0]=0}else Di(o,j,g,l,h)|0;m=c[p>>2]|0;l=Ij(f,k)|0;if(!l)return;k=c[m>>2]|0;if(!(a[k+81>>0]|0)){h=c[m+104>>2]|0;j=(c[m+108>>2]|0)+-1|0;a[h+(j*20|0)+1>>0]=-9;c[h+(j*20|0)+16>>2]=l;return}if(c[k+480>>2]|0)return;j=(c[l>>2]|0)+-1|0;c[l>>2]=j;if(j|0)return;k=c[l+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,l);return}j=l;if((c[k+304>>2]|0)>>>0<=j>>>0?(c[k+308>>2]|0)>>>0>j>>>0:0){j=k+300|0;c[l>>2]=c[j>>2];c[j>>2]=l;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);return}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);return}}function Hj(b,d,f,g,h){b=b|0;d=d|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;l=c[b+116>>2]|0;l=(l|0)==0?b:l;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;r=l+104|0;p=c[r>>2]|0;i=l+108|0;a:do if((p|0)<=0){j=c[i>>2]|0;k=(p<<4)+16|0;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;if(!j){b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))q=21;else{b=l;q=39;break a}else{do if(!(0>>0|(0==(m|0)?(e[n+276>>1]|0)>>>0>>0:0))){j=n+300|0;b=c[j>>2]|0;if(b|0){c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}j=n+296|0;b=c[j>>2]|0;if(!b){b=n+292|0;break}else{c[j>>2]=c[b>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else b=n+288|0;while(0);c[b>>2]=(c[b>>2]|0)+1;q=21}while(0);if((q|0)==21)b=_d(n,k,m)|0;c[i>>2]=b;if(!b)b=l;else q=37}else{b=l;o=j;j=k;q=22}}else{j=c[i>>2]|0;b=0;while(1){if((c[j+(b<<4)>>2]|0)==(d|0)?(c[j+(b<<4)+4>>2]|0)==(f|0):0)break;b=b+1|0;if((b|0)>=(p|0)){q=9;break}}if((q|0)==9){k=(p<<4)+16|0;b=l;o=j;n=c[l>>2]|0;m=((k|0)<0)<<31>>31;j=k;q=22;break}r=j+(b<<4)+8|0;a[r>>0]=(a[r>>0]|g)<<24>>24!=0&1;return}while(0);do if((q|0)==22){k=o;l=n+304|0;if(((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0)?!(m>>>0>0|((m|0)==0?j>>>0>(e[n+276>>1]|0)>>>0:0)):0){c[i>>2]=o;b=o;i=p;q=38;break}j=Zd(n,o,j,m)|0;if(j|0){c[i>>2]=j;b=j;q=37;break}if(c[n+480>>2]|0){Xd(n,o);q=39;break}if((c[l>>2]|0)>>>0<=k>>>0?(c[n+308>>2]|0)>>>0>k>>>0:0){q=n+300|0;c[o>>2]=c[q>>2];c[q>>2]=o;q=39;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);q=39;break}else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);q=39;break}}while(0);if((q|0)==37){i=c[r>>2]|0;q=38}else if((q|0)==39)c[i>>2]=0;if((q|0)==38){c[r>>2]=i+1;c[b+(i<<4)>>2]=d;c[b+(i<<4)+4>>2]=f;a[b+(i<<4)+8>>0]=g;c[b+(i<<4)+12>>2]=h;return}c[r>>2]=0;b=c[b>>2]|0;i=b+81|0;if(a[i>>0]|0)return;if(a[b+82>>0]|0)return;a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;r=b+272|0;c[r>>2]=(c[r>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Ij(f,g){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;q=b[g+52>>1]|0;r=q&65535;j=b[g+50>>1]|0;s=f+36|0;if(c[s>>2]|0){t=0;return t|0}t=g+55|0;n=c[f>>2]|0;l=r*5|0;k=l+20|0;o=n+272|0;h=(c[o>>2]|0)==0;do if(!((d[t>>0]|d[t+1>>0]<<8)&8)){a:do if(!h)if(!(a[n+81>>0]|0))m=32;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=32}while(0);if((m|0)==32)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=q;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}else{b:do if(!h)if(!(a[n+81>>0]|0))m=13;else{t=0;return t|0}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0>>0:0))){i=n+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=n+296|0;h=c[i>>2]|0;if(!h){h=n+292|0;break}else{c[i>>2]=c[h>>2];p=n+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;m=13}while(0);if((m|0)==13)h=_d(n,k,0)|0;if(h|0){c[h+16>>2]=h+20+(r<<2);b[h+6>>1]=j;b[h+8>>1]=q;a[h+4>>0]=a[n+78>>0]|0;c[h+12>>2]=n;c[h>>2]=1;gw(h+24|0,0,l+-4|0)|0;p=h;o=h;break}i=n+81|0;if((a[i>>0]|0)==0?(a[n+82>>0]|0)==0:0){a[i>>0]=1;if((c[n+180>>2]|0)>0)c[n+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;i=c[n+236>>2]|0;if(i){c[i+12>>2]=7;m=41}else m=41}else m=41}while(0);if((m|0)==41)if(!h){t=0;return t|0}else{p=h;o=0}if(q<<16>>16){n=g+32|0;l=g+28|0;m=p+16|0;k=0;do{i=c[(c[n>>2]|0)+(k<<2)>>2]|0;do if((i|0)!=34049){h=c[f>>2]|0;j=a[h+78>>0]|0;g=a[h+165>>0]|0;h=Zi(h,j,i,g&255)|0;if(!(g<<24>>24)){if(!h){h=_i(f,j,0,i)|0;break}if(!(c[h+12>>2]|0))h=_i(f,j,h,i)|0}}else h=0;while(0);c[p+20+(k<<2)>>2]=h;a[(c[m>>2]|0)+k>>0]=a[(c[l>>2]|0)+k>>0]|0;k=k+1|0}while((k|0)!=(r|0))}if(!(c[s>>2]|0)){t=p;return t|0}h=d[t>>0]|d[t+1>>0]<<8;if(!(h&256)){s=h|256;a[t>>0]=s;a[t+1>>0]=s>>8;c[f+12>>2]=513}t=(c[p>>2]|0)+-1|0;c[p>>2]=t;if(t|0){t=0;return t|0}h=c[p+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);t=0;return t|0}t=p;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[p>>2]=c[t>>2];c[t>>2]=o;t=0;return t|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=0;return t|0}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=0;return t|0}return 0}function Jj(f,i,j){f=f|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0.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,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=Ra;Ra=Ra+208|0;m=Z+80|0;l=Z+72|0;s=Z+64|0;n=Z+56|0;t=Z+48|0;p=Z+40|0;w=Z+32|0;S=Z;R=Z+144|0;T=Z+140|0;W=Z+136|0;E=Z+84|0;M=f+8|0;Y=c[M>>2]|0;c[T>>2]=0;c[W>>2]=0;if(!Y){j=0;Ra=Z;return j|0}Q=i;a:while(1){if(!Q)v=114;else v=d[Q>>0]|0;u=v&255;switch(u<<24>>24){case -92:{X=6;break a}case -94:{X=12;break a}case -109:{X=36;break a}case -97:{X=37;break a}case -111:{X=40;break a}case 110:{X=80;break a}case 114:{X=87;break a}case -110:{X=90;break a}case -108:{X=127;break a}case -88:{X=138;break a}case 36:{X=139;break a}case -96:case 45:{X=157;break a}case 53:case 52:case 57:case 54:case 55:case 56:{l=0;k=v;X=158;break a}case 105:case 99:case 98:case 103:case 97:case 96:case 104:case 101:case 102:case 100:case 43:case 44:{X=228;break a}case -91:{X=231;break a}case 19:case 107:{X=276;break a}case -89:{X=279;break a}case 51:case 50:{X=284;break a}case -93:{X=296;break a}case -95:{X=299;break a}case -125:case 20:{X=420;break a}case -86:{X=424;break a}case 49:{X=436;break a}case 48:{X=451;break a}case 77:{X=453;break a}case -87:{X=461;break a}case -85:{X=462;break a}case 71:{X=542;break a}case -90:case 106:case -83:break;default:{X=469;break a}}Q=c[Q+12>>2]|0}b:switch(X|0){case 6:{i=c[Q+40>>2]|0;k=c[i+28>>2]|0;l=b[Q+34>>1]|0;if(!(a[i>>0]|0)){j=c[k+(l*24|0)+16>>2]|0;Ra=Z;return j|0}if(a[i+1>>0]|0){m=c[i+8>>2]|0;i=c[k+(l*24|0)+12>>2]|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=90;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=m;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,90,m,i,j)|0;Ra=Z;return j|0}}else X=12;break}case 36:{Kj(f,Q,0,j);Ra=Z;return j|0}case 37:{i=(a[(c[Q+8>>2]|0)+4>>0]|0)==0&1;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=70;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=j;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,70,i,j,0)|0;Ra=Z;return j|0}}case 40:{i=c[Q+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;l=c[Y>>2]|0;c:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=51;else X=71;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=52;break c}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=51}while(0);if((X|0)==51){k=_d(l,8,0)|0;X=52}do if((X|0)==52)if(k){i=S;W=c[i>>2]|0;i=c[i+4>>2]|0;m=k;f=m;a[f>>0]=W;a[f+1>>0]=W>>8;a[f+2>>0]=W>>16;a[f+3>>0]=W>>24;m=m+4|0;a[m>>0]=i;a[m+1>>0]=i>>8;a[m+2>>0]=i>>16;a[m+3>>0]=i>>24;m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=71;while(0);if((X|0)==71){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}case 80:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=110;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,110,0,j,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);Ra=Z;return j|0}case 87:{i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;Y=c[Y+104>>2]|0;a[Y+(k*20|0)>>0]=73;b[Y+(k*20|0)+2>>1]=0;c[Y+(k*20|0)+4>>2]=0;c[Y+(k*20|0)+8>>2]=j;c[Y+(k*20|0)+12>>2]=0;c[Y+(k*20|0)+16>>2]=0;a[Y+(k*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,73,0,j,0)|0;Ra=Z;return j|0}}case 90:{q=(c[Q+8>>2]|0)+2|0;p=(Eu(q)|0)&1073741823;r=p+-1|0;k=c[Y>>2]|0;s=(r|0)/2|0;m=s+1|0;n=((m|0)<0)<<31>>31;d:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))X=100;else{m=0;n=1}else{do if(!(0>>0|(0==(n|0)?(e[k+276>>1]|0)>>>0>>0:0))){i=k+300|0;l=c[i>>2]|0;if(l|0){c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}i=k+296|0;l=c[i>>2]|0;if(!l){i=k+292|0;break}else{c[i>>2]=c[l>>2];X=k+284|0;c[X>>2]=(c[X>>2]|0)+1;X=101;break d}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=100}while(0);if((X|0)==100){l=_d(k,m,n)|0;X=101}if((X|0)==101){k=p+-2|0;if(!l){m=0;n=1}else{if(p>>>0>2){i=0;do{f=a[q+i>>0]|0;X=a[q+(i|1)>>0]|0;a[l+(i>>>1)>>0]=(0-(X>>>6&1)&9)+X&15|(0-(f>>>6&1)&9)+f<<4;i=i+2|0}while((i|0)<(k|0));i=r>>>1}else i=0;a[l+i>>0]=0;m=l;n=0}}l=Y+108|0;i=c[l>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[l>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=75;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=s;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,75,s,j,0)|0;k=c[Y>>2]|0;if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[l>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,m,-7);Ra=Z;return j|0}if(n){Ra=Z;return j|0}c[k+(i*20|0)+16>>2]=m;a[l>>0]=-7;Ra=Z;return j|0}if(n){Ra=Z;return j|0}if(k|0){if(c[k+480>>2]|0){Xd(k,m);Ra=Z;return j|0}Y=m;if((c[k+304>>2]|0)>>>0<=Y>>>0?(c[k+308>>2]|0)>>>0>Y>>>0:0){Y=k+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;Ra=Z;return j|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);Ra=Z;return j|0}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);Ra=Z;return j|0}}case 127:{l=Q+32|0;i=b[l>>1]|0;n=Y+108|0;k=c[n>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[n>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=76;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=i;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,76,i,j,0)|0;if(!(a[(c[Q+8>>2]|0)+1>>0]|0)){Ra=Z;return j|0}m=c[f+216>>2]|0;k=b[l>>1]|0;e:do if(!m)i=0;else{l=c[m+4>>2]|0;i=2;while(1){if((c[m+(i<<2)>>2]|0)==(k|0))break;i=(c[m+(i+1<<2)>>2]|0)+i|0;if((i|0)>=(l|0)){i=0;break e}}i=m+(i+2<<2)|0}while(0);c[m>>2]=0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}f=c[Y+104>>2]|0;Y=(c[n>>2]|0)+-1|0;a[f+(Y*20|0)+1>>0]=-1;c[f+(Y*20|0)+16>>2]=i;Ra=Z;return j|0}case 138:{j=c[Q+28>>2]|0;Ra=Z;return j|0}case 139:{i=Jj(f,c[Q+12>>2]|0,j)|0;do if((i|0)!=(j|0)){k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[Y+104>>2]|0;a[f+(l*20|0)>>0]=79;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=i;c[f+(l*20|0)+8>>2]=j;c[f+(l*20|0)+12>>2]=0;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0;break}else{Di(Y,79,i,j,0)|0;break}}while(0);k=c[Q+8>>2]|0;l=a[k>>0]|0;f:do if(!(l<<24>>24))i=67;else{i=67;m=0;do{m=m<<8|d[208+(l&255)>>0];k=k+1|0;g:do if((m|0)<1685026146){if((m|0)<1667785074){switch(m|0){case 1651273570:break;default:{X=152;break g}}switch(i<<24>>24){case 69:case 67:{i=65;break g}default:{X=151;break g}}}if((m|0)<1668050786)switch(m|0){case 1667785074:{i=66;break g}default:{X=152;break g}}else switch(m|0){case 1668050786:{i=66;break g}default:{X=152;break g}}}else{if((m|0)>=1919246700){if((m|0)>=1952807028)switch(m|0){case 1952807028:{i=66;break g}default:{X=152;break g}}switch(m|0){case 1919246700:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}else{X=151;break}}if((m|0)<1718382433){switch(m|0){case 1685026146:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}else{switch(m|0){case 1718382433:break;default:{X=152;break g}}if(i<<24>>24==67){i=69;break}}}while(0);if((X|0)==151)X=0;else if((X|0)==152){X=0;if((m&16777215|0)==6909556){i=68;break f}}l=a[k>>0]|0}while(l<<24>>24!=0)}while(0);i=i<<24>>24;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=85;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=j;c[Y+(l*20|0)+8>>2]=i;c[Y+(l*20|0)+12>>2]=0;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;Ra=Z;return j|0}else{Di(Y,85,j,i,0)|0;Ra=Z;return j|0}}case 157:{l=128;k=(v|0)==45?53:52;X=158;break}case 228:{m=Lj(f,c[Q+12>>2]|0,T)|0;i=Lj(f,c[Q+16>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=u;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,m,j)|0;m=j;break}}case 231:{k=Q+12|0;i=c[k>>2]|0;switch(a[i>>0]|0){case -109:{Kj(f,i,1,j);Ra=Z;return j|0}case -111:{i=c[i+8>>2]|0;if(!i){Ra=Z;return j|0}Lg(i,S,(Eu(i)|0)&1073741823,1)|0;o=-+g[S>>3];g[S>>3]=o;l=c[Y>>2]|0;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=244;else X=264;else{do if((e[l+276>>1]|0)>=8){i=l+300|0;k=c[i>>2]|0;if(k|0){c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}i=l+296|0;k=c[i>>2]|0;if(!k){i=l+292|0;break}else{c[i>>2]=c[k>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=245;break h}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=244}while(0);if((X|0)==244){k=_d(l,8,0)|0;X=245}do if((X|0)==245)if(k){g[h>>3]=o;a[k>>0]=a[h>>0];a[k+1>>0]=a[h+1>>0];a[k+2>>0]=a[h+2>>0];a[k+3>>0]=a[h+3>>0];a[k+4>>0]=a[h+4>>0];a[k+5>>0]=a[h+5>>0];a[k+6>>0]=a[h+6>>0];a[k+7>>0]=a[h+7>>0];m=Y+108|0;i=c[m>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;l=c[Y>>2]|0;if(!(a[l+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(i*20|0)+16>>2]=k;a[m>>0]=-13;break}else{Ei(Y,l+(i*20|0)|0,k,-13);break}}if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Y=k;if((c[l+304>>2]|0)>>>0<=Y>>>0?(c[l+308>>2]|0)>>>0>Y>>>0:0){Y=l+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else X=264;while(0);if((X|0)==264){k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=-111;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=0;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,145,0,j,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[k>>2]|0)+-1|0;k=c[Y+104>>2]|0;if(a[k+(i*20|0)+1>>0]|0)Ei(Y,k+(i*20|0)|0,0,-13)}}Ra=Z;return j|0}default:{a[E>>0]=-109;c[E+4>>2]=17408;c[E+8>>2]=0;m=Lj(f,E,T)|0;i=Lj(f,c[k>>2]|0,W)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;Y=c[Y+104>>2]|0;a[Y+(l*20|0)>>0]=101;b[Y+(l*20|0)+2>>1]=0;c[Y+(l*20|0)+4>>2]=i;c[Y+(l*20|0)+8>>2]=m;c[Y+(l*20|0)+12>>2]=j;c[Y+(l*20|0)+16>>2]=0;a[Y+(l*20|0)+1>>0]=0;m=j;break b}else{Di(Y,101,i,m,j)|0;m=j;break b}}}}case 276:{i=Lj(f,c[Q+12>>2]|0,T)|0;k=Y+108|0;l=c[k>>2]|0;if((c[Y+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[Y+104>>2]|0;a[m+(l*20|0)>>0]=u;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=i;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(Y,v,i,j,0)|0;m=j;break}}case 279:{l=Lj(f,c[Q+12>>2]|0,T)|0;n=(a[(c[(c[Q+16>>2]|0)+8>>2]|0)+4>>0]|0)==0;m=(n^1)&1;n=(n^(a[Q+38>>0]|0)==45)&1;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=88;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=l;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=m;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,88,l,j,m)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){m=c[Y+104>>2]|0;a[m+(i*20|0)+1>>0]=-3;c[m+(i*20|0)+16>>2]=n;m=j}else m=j;break}case 284:{k=Y+108|0;i=c[k>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=1;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;i=Lj(f,c[Q+12>>2]|0,T)|0;l=c[k>>2]|0;if((c[m>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=u;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=0;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else l=Di(Y,v,i,0,0)|0;i=c[k>>2]|0;if((c[m>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=70;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=j;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,70,0,j,0)|0;k=c[k>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0))i=(c[Y+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else i=59308;c[i+8>>2]=k;m=j;break}case 296:{i=c[Q+40>>2]|0;if(!i){c[p>>2]=c[Q+8>>2];cd(f,38820,p);m=j;break}j=c[(c[i+40>>2]|0)+(b[Q+34>>1]<<4)+8>>2]|0;Ra=Z;return j|0}case 299:{x=c[f>>2]|0;k=a[x+78>>0]|0;w=Q+4|0;i=c[w>>2]|0;if(i&16777216|0){j=c[(c[Q+44>>2]|0)+52>>2]|0;Ra=Z;return j|0}do if(a[f+23>>0]|0){R=S+20|0;a[R>>0]=2;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,Q)|0;if(!(a[R>>0]|0)){i=c[w>>2]|0;break}j=Nj(f,Q,-1)|0;Ra=Z;return j|0}while(0);if((i&16384|0)==0?(r=c[Q+20>>2]|0,(r|0)!=0):0){A=r;B=c[r>>2]|0;s=1}else{A=0;B=0;s=0}i=c[Q+8>>2]|0;v=Jd(x,i,B,k,0)|0;if(v|0?(c[v+20>>2]|0)==0:0){t=v+4|0;i=c[t>>2]|0;if(i&512|0){i=f+56|0;t=c[i>>2]|0;s=t+-1|0;c[i>>2]=s;i=c[A+4>>2]|0;do if(i){if((a[i>>0]|0)!=-88){z=Jj(f,i,j)|0;X=319;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{z=Jj(f,0,j)|0;X=319}while(0);do if(((X|0)==319?(z|0)!=(j|0):0)?(y=c[M>>2]|0,y|0):0){i=y+108|0;k=c[i>>2]|0;if((c[y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[y+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=z;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(y,79,z,j,0)|0;break}}while(0);if((B|0)>1){p=Y+108|0;q=Y+112|0;r=Y+104|0;n=1;do{i=c[p>>2]|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;S=c[r>>2]|0;a[S+(i*20|0)>>0]=51;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=j;c[S+(i*20|0)+8>>2]=s;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(Y,51,j,s,0)|0;i=c[A+4+(n*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){D=Jj(f,i,j)|0;X=336;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(m,78,i,j,0)|0;break}}else{D=Jj(f,0,j)|0;X=336}while(0);do if(((X|0)==336?(X=0,(D|0)!=(j|0)):0)?(C=c[M>>2]|0,C|0):0){i=C+108|0;k=c[i>>2]|0;if((c[C+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[C+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=D;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(C,79,D,j,0)|0;break}}while(0);n=n+1|0}while((n|0)!=(B|0))}k=c[Y+12>>2]|0;i=0-t|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}}if(i&1024|0){j=Jj(f,c[A+4>>2]|0,j)|0;Ra=Z;return j|0}if((B|0)>0){m=S+20|0;p=S+4|0;q=S+8|0;r=S+24|0;i=0;n=0;l=0;do{if(l>>>0<32){k=c[A+4+(l*20|0)>>2]|0;a[m>>0]=1;c[p>>2]=127;c[q>>2]=128;c[r>>2]=0;if(!k)k=1<>0]|0)==0?0:1<>2]&32|0)==0))n=Yi(f,c[A+4+(l*20|0)>>2]|0)|0;l=l+1|0}while((l|0)!=(B|0));u=i}else{u=0;n=0}if(s){do if(!u)if((B|0)==1){i=f+19|0;k=a[i>>0]|0;if(!(k<<24>>24)){W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;break}else{l=k+-1<<24>>24;a[i>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0;break}}else{i=f+32|0;l=c[i>>2]|0;k=f+28|0;m=c[k>>2]|0;if((m|0)<(B|0)){W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0;break}else{c[i>>2]=l+B;c[k>>2]=m-B;break}}else{W=f+44|0;l=c[W>>2]|0;c[W>>2]=l+B;l=l+1|0}while(0);i=c[t>>2]&192;i:do if(i|0){k=c[A+4>>2]|0;switch(a[k>>0]|0){case -92:case -94:break;default:break i}a[k+38>>0]=i}while(0);Oj(f,A,l,0,3);r=l}else r=0;if((B|0)>1)if(!(c[w>>2]&128))X=375;else{i=A+24|0;X=376}else if((B|0)==1)X=375;else q=v;if((X|0)==375){i=A+4|0;X=376}if((X|0)==376)q=Pj(x,v,B,c[i>>2]|0)|0;do if(c[q+4>>2]&32){if(!n)n=c[x+8>>2]|0;p=Y+108|0;i=c[p>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;l=c[Y+104>>2]|0;a[l+(i*20|0)>>0]=82;l=l+(i*20|0)+1|0;m=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0))}else i=Di(Y,82,0,0,0)|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;l=c[Y+104>>2]|0;m=l+(i*20|0)+1|0;if(a[m>>0]|0){Ei(Y,l+(i*20|0)|0,n,-2);break}if(!n)break;c[l+(i*20|0)+16>>2]=n;a[m>>0]=-2}}else{p=Y+108|0;k=Y+112|0}while(0);l=(c[f+52>>2]|0)==0?63:62;i=c[p>>2]|0;if((c[k>>2]|0)>(i|0)){c[p>>2]=i+1;X=c[Y+104>>2]|0;a[X+(i*20|0)>>0]=l;b[X+(i*20|0)+2>>1]=0;c[X+(i*20|0)+4>>2]=u;c[X+(i*20|0)+8>>2]=r;c[X+(i*20|0)+12>>2]=j;c[X+(i*20|0)+16>>2]=0;a[X+(i*20|0)+1>>0]=0}else i=Di(Y,l,u,r,j)|0;k=c[Y>>2]|0;j:do if(!(a[k+81>>0]|0)){if((i|0)<0)i=(c[p>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(Y,k+(i*20|0)|0,q,-8);break}if(q|0){c[k+(i*20|0)+16>>2]=q;a[l>>0]=-8}}else if(c[q+4>>2]&16|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,q);break j}i=q;if((c[k+304>>2]|0)>>>0>i>>>0)break;if((c[k+308>>2]|0)>>>0<=i>>>0)break;X=k+300|0;c[q>>2]=c[X>>2];c[X>>2]=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{X=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-X;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);i=c[p>>2]|0;if((i|0)>0)b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=B&255;if(!((B|0)!=0&(u|0)==0)){Ra=Z;return j|0}if((B|0)!=1){i=f+28|0;if((c[i>>2]|0)>=(B|0)){Ra=Z;return j|0}c[i>>2]=B;c[f+32>>2]=r;Ra=Z;return j|0}if(!r){Ra=Z;return j|0}i=f+19|0;k=a[i>>0]|0;if((k&255)>=8){Ra=Z;return j|0}a[i>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=r;Ra=Z;return j|0}c[t>>2]=i;cd(f,38846,t);m=j;break}case 420:{if((v|0)==131?(k=c[c[c[Q+20>>2]>>2]>>2]|0,(k|0)!=1):0){c[n>>2]=k;c[n+4>>2]=1;cd(f,39001,n);m=j;break}j=Qj(f,Q)|0;Ra=Z;return j|0}case 424:{m=Q+12|0;i=c[m>>2]|0;if(!(c[i+28>>2]|0)){j=Qj(f,i)|0;i=c[m>>2]|0;c[i+28>>2]=j}l=c[Q+28>>2]|0;if(l){k=a[i>>0]|0;if(k<<24>>24==-88)k=a[i+38>>0]|0;switch(k<<24>>24){case -87:{k=i+20|0;X=432;break}case -125:{k=c[i+20>>2]|0;X=432;break}default:k=1}if((X|0)==432)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){c[s>>2]=l;c[s+4>>2]=k;cd(f,38869,s);i=c[m>>2]|0}}j=(c[i+28>>2]|0)+(b[Q+32>>1]|0)|0;Ra=Z;return j|0}case 436:{p=f+56|0;n=c[p>>2]|0;i=n+-2|0;c[p>>2]=i;p=Y+108|0;k=c[p>>2]|0;m=Y+112|0;if((c[m>>2]|0)>(k|0)){c[p>>2]=k+1;X=c[Y+104>>2]|0;a[X+(k*20|0)>>0]=73;b[X+(k*20|0)+2>>1]=0;c[X+(k*20|0)+4>>2]=0;c[X+(k*20|0)+8>>2]=j;c[X+(k*20|0)+12>>2]=0;c[X+(k*20|0)+16>>2]=0;a[X+(k*20|0)+1>>0]=0}else Di(Y,73,0,j,0)|0;Rj(f,Q,n+-1|0,i);i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=70;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,70,1,j,0)|0;l=Y+12|0;i=c[l>>2]|0;k=0-n|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,Y,k);else c[(c[i+64>>2]|0)+(k<<2)>>2]=c[p>>2];i=c[p>>2]|0;if((c[m>>2]|0)>(i|0)){c[p>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=83;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=0;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(Y,83,j,0,0)|0;k=c[l>>2]|0;i=1-n|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);Ra=Z;return j|0}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[p>>2];Ra=Z;return j|0}}case 451:{Sj(f,c[Q+12>>2]|0,c[Q+20>>2]|0,j,0,0);Ra=Z;return j|0}case 453:{m=c[Q+44>>2]|0;k=G((b[m+42>>1]|0)+1|0,c[Q+28>>2]|0)|0;i=Q+32|0;k=(b[i>>1]|0)+1+k|0;n=Y+108|0;l=c[n>>2]|0;p=Y+112|0;if((c[p>>2]|0)>(l|0)){c[n>>2]=l+1;S=c[Y+104>>2]|0;a[S+(l*20|0)>>0]=-107;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=k;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(Y,149,k,j,0)|0;S=b[i>>1]|0;if(S<<16>>16>-1?(a[(c[m+4>>2]|0)+(S<<16>>16<<4)+13>>0]|0)==69:0){i=c[n>>2]|0;if((c[p>>2]|0)>(i|0)){c[n>>2]=i+1;m=c[Y+104>>2]|0;a[m+(i*20|0)>>0]=84;b[m+(i*20|0)+2>>1]=0;c[m+(i*20|0)+4>>2]=j;c[m+(i*20|0)+8>>2]=0;c[m+(i*20|0)+12>>2]=0;c[m+(i*20|0)+16>>2]=0;a[m+(i*20|0)+1>>0]=0;m=j;break}else{Di(Y,84,j,0,0)|0;m=j;break}}else m=j;break}case 461:{cd(f,38899,l);m=j;break}case 462:{i=c[Q+28>>2]|0;l=Y+108|0;k=c[l>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[l>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=21;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=i;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else k=Di(Y,21,i,0,0)|0;m=Jj(f,c[Q+12>>2]|0,j)|0;i=c[l>>2]|0;if(!(a[(c[Y>>2]|0)+81>>0]|0)){j=(k|0)<0?i+-1|0:k;Y=c[Y+104>>2]|0;c[Y+(j*20|0)+8>>2]=i;i=Y+(j*20|0)|0}else{c[14829]=i;i=59308}c[i+12>>2]=m;break}case 469:{C=c[Q+20>>2]|0;D=c[C>>2]|0;F=f+56|0;I=c[F>>2]|0;H=I+-1|0;c[F>>2]=H;i=c[Q+12>>2]|0;z=(i|0)!=0;if(z){l=E;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[i+4>>2]|0;ew(E|0,i|0,((k&16384|0)==0?((k&8192|0)==0?52:28):12)|0)|0;k=a[E>>0]|0;y=E+38|0;switch((k<<24>>24==-88?a[y>>0]|0:k)<<24>>24){case -87:{l=c[E+20>>2]|0;i=l;X=473;break}case -125:{l=c[E+20>>2]|0;i=c[l>>2]|0;X=473;break}default:X=474}k:do if((X|0)==473){x=c[i>>2]|0;if((x|0)!=1){c[T>>2]=0;if(k<<24>>24==-125){i=Qj(f,E)|0;break}Q=f+44|0;P=c[Q>>2]|0;i=P+1|0;c[Q>>2]=P+x;if((x|0)>0){r=E+20|0;s=f+23|0;t=S+20|0;u=S+4|0;v=S+8|0;w=S+24|0;k=0;while(1){l=c[l+4+(k*20|0)>>2]|0;q=k+i|0;do if(!(a[s>>0]|0))if(!l){B=Jj(f,0,q)|0;X=491}else X=485;else{a[t>>0]=2;c[u>>2]=127;c[v>>2]=128;c[w>>2]=0;if(l){_j(S,l)|0;if(!(a[t>>0]|0)){X=485;break}}Nj(f,l,q)|0}while(0);do if((X|0)==485){X=0;if((a[l>>0]|0)!=-88){B=Jj(f,l,q)|0;X=491;break}p=c[M>>2]|0;l=c[l+28>>2]|0;m=p+108|0;n=c[m>>2]|0;if((c[p+112>>2]|0)>(n|0)){c[m>>2]=n+1;Q=c[p+104>>2]|0;a[Q+(n*20|0)>>0]=78;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=l;c[Q+(n*20|0)+8>>2]=q;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;break}else{Di(p,78,l,q,0)|0;break}}while(0);do if(((X|0)==491?(X=0,(B|0)!=(q|0)):0)?(A=c[M>>2]|0,A|0):0){l=A+108|0;m=c[l>>2]|0;if((c[A+112>>2]|0)>(m|0)){c[l>>2]=m+1;Q=c[A+104>>2]|0;a[Q+(m*20|0)>>0]=79;b[Q+(m*20|0)+2>>1]=0;c[Q+(m*20|0)+4>>2]=B;c[Q+(m*20|0)+8>>2]=q;c[Q+(m*20|0)+12>>2]=0;c[Q+(m*20|0)+16>>2]=0;a[Q+(m*20|0)+1>>0]=0;break}else{Di(A,79,B,q,0)|0;break}}while(0);k=k+1|0;if((k|0)==(x|0))break k;l=c[r>>2]|0}}}else X=474}while(0);if((X|0)==474)i=Lj(f,E,T)|0;a[y>>0]=a[E>>0]|0;a[E>>0]=-88;c[E+28>>2]=i;l=E+4|0;c[l>>2]=c[l>>2]&-4097;l=R;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));a[R>>0]=53;c[R+12>>2]=E;c[T>>2]=0;i=R}else i=0;w=D+-1|0;if((D|0)>1){r=R+16|0;s=Y+108|0;t=Y+112|0;u=Y+104|0;v=Y+12|0;q=0;do{k=c[C+4+(q*20|0)>>2]|0;if(z)c[r>>2]=k;else i=k;p=c[F>>2]|0;k=p+-1|0;c[F>>2]=k;Tj(f,i,k,16);k=c[C+4+((q|1)*20|0)>>2]|0;do if(k){if((a[k>>0]|0)!=-88){K=Jj(f,k,j)|0;X=510;break}n=c[M>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;S=c[n+104>>2]|0;a[S+(m*20|0)>>0]=78;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=k;c[S+(m*20|0)+8>>2]=j;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0;break}else{Di(n,78,k,j,0)|0;break}}else{K=Jj(f,0,j)|0;X=510}while(0);do if(((X|0)==510?(X=0,(K|0)!=(j|0)):0)?(J=c[M>>2]|0,J|0):0){k=J+108|0;l=c[k>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[J+104>>2]|0;a[S+(l*20|0)>>0]=79;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=K;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break}else{Di(J,79,K,j,0)|0;break}}while(0);k=c[s>>2]|0;if((c[t>>2]|0)>(k|0)){c[s>>2]=k+1;S=c[u>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=H;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(Y,11,0,H,0)|0;l=c[v>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Y,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[s>>2];q=q+2|0}while((q|0)<(w|0))}l:do if(!(D&1)){i=Y+108|0;k=c[i>>2]|0;if((c[Y+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[Y+104>>2]|0;a[S+(k*20|0)>>0]=73;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(Y,73,0,j,0)|0;break}}else{i=c[C+4+(w*20|0)>>2]|0;do if(i){if((a[i>>0]|0)!=-88){l=Jj(f,i,j)|0;break}m=c[M>>2]|0;i=c[i+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[m+104>>2]|0;a[S+(l*20|0)>>0]=78;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=i;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0;break l}else{Di(m,78,i,j,0)|0;break l}}else l=Jj(f,0,j)|0;while(0);if((l|0)!=(j|0)?(L=c[M>>2]|0,L|0):0){i=L+108|0;k=c[i>>2]|0;if((c[L+112>>2]|0)>(k|0)){c[i>>2]=k+1;S=c[L+104>>2]|0;a[S+(k*20|0)>>0]=79;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=l;c[S+(k*20|0)+8>>2]=j;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0;break}else{Di(L,79,l,j,0)|0;break}}}while(0);k=c[Y+12>>2]|0;i=0-I|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,Y,i);else c[(c[k+64>>2]|0)+(i<<2)>>2]=c[Y+108>>2];m=j;break}case 542:{if(!(c[f+120>>2]|0)){cd(f,38917,m);j=0;Ra=Z;return j|0}i=a[Q+1>>0]|0;switch(i<<24>>24){case 2:{Y=c[f+116>>2]|0;a[((Y|0)==0?f:Y)+21>>0]=1;break}case 4:{l=c[Q+8>>2]|0;k=Y+108|0;i=c[k>>2]|0;if((c[Y+112>>2]|0)>(i|0)){c[k>>2]=i+1;S=c[Y+104>>2]|0;a[S+(i*20|0)>>0]=69;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=0;c[S+(i*20|0)+8>>2]=4;c[S+(i*20|0)+12>>2]=0;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else i=Di(Y,69,0,4,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){m=j;break b}if((i|0)<0)i=(c[k>>2]|0)+-1|0;Ei(Y,(c[Y+104>>2]|0)+(i*20|0)|0,l,0);m=j;break b}default:{}}Uj(f,1811,i<<24>>24,c[Q+8>>2]|0,0,0);m=j;break}}if((X|0)==12){i=c[Q+28>>2]|0;if(!(c[Q+4>>2]&8)){do if((i|0)<0){i=c[f+52>>2]|0;if((i|0)>=0){i=i+-1|0;break}j=(b[Q+32>>1]|0)-i|0;Ra=Z;return j|0}while(0);k=a[Q+38>>0]|0;Vj(Y,c[Q+44>>2]|0,i,b[Q+32>>1]|0,j);if(!(k<<24>>24)){Ra=Z;return j|0}i=c[Y+108>>2]|0;if((i|0)<=0){Ra=Z;return j|0}b[(c[Y+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=k&255;Ra=Z;return j|0}m=Jj(f,c[Q+12>>2]|0,j)|0;i=b[Q+32>>1]|0;if(i<<16>>16>-1){i=a[(c[(c[Q+44>>2]|0)+4>>2]|0)+(i<<16>>16<<4)+13>>0]|0;if(i<<24>>24==65){j=m;Ra=Z;return j|0}else l=i<<24>>24}else l=68;n=Y+108|0;do if((m|0)!=(j|0)){i=c[n>>2]|0;k=Y+112|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=79;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=m;c[f+(i*20|0)+8>>2]=j;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0;break}else{Di(Y,79,m,j,0)|0;break}}else k=Y+112|0;while(0);m=38812+((l<<1)+-132)|0;i=c[n>>2]|0;if((c[k>>2]|0)>(i|0)){c[n>>2]=i+1;f=c[Y+104>>2]|0;a[f+(i*20|0)>>0]=91;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=j;c[f+(i*20|0)+8>>2]=1;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else i=Di(Y,91,j,1,0)|0;if(a[(c[Y>>2]|0)+81>>0]|0){Ra=Z;return j|0}if((i|0)<0)i=(c[n>>2]|0)+-1|0;k=c[Y+104>>2]|0;l=k+(i*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(i*20|0)+16>>2]=m;a[l>>0]=-1;Ra=Z;return j|0}else{Ei(Y,k+(i*20|0)|0,m,-1);Ra=Z;return j|0}}do if((X|0)==158){N=c[Q+12>>2]|0;n=a[N>>0]|0;m=n<<24>>24==-88;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{q=N+20|0;X=163;break}case -125:{q=c[N+20>>2]|0;X=163;break}default:{}}if((X|0)==163?(c[c[q>>2]>>2]|0)>=2:0){M=k&255;p=l&255;L=c[Q+16>>2]|0;if(m)i=a[N+38>>0]|0;else i=n;switch(i<<24>>24){case -87:{i=N+20|0;X=169;break}case -125:{i=c[N+20>>2]|0;X=169;break}default:l=1}if((X|0)==169)l=c[c[i>>2]>>2]|0;i=f+56|0;K=c[i>>2]|0;J=K+-1|0;c[i>>2]=J;i=a[L>>0]|0;if(i<<24>>24==-88)k=a[L+38>>0]|0;else k=i;switch(k<<24>>24){case -87:{k=L+20|0;X=175;break}case -125:{k=c[L+20>>2]|0;X=175;break}default:k=1}if((X|0)==175)k=c[c[k>>2]>>2]|0;if((l|0)!=(k|0)){cd(f,38899,w);m=j;break}k=M<<24>>24==55?56:M;if(n<<24>>24==-125){H=Qj(f,N)|0;i=a[L>>0]|0}else H=0;if(i<<24>>24==-125)t=Qj(f,L)|0;else t=0;u=N+38|0;v=N+20|0;w=N+28|0;x=N+20|0;y=L+38|0;z=L+20|0;A=L+28|0;B=L+20|0;C=f+19|0;D=l+-1|0;I=Y+108|0;E=Y+112|0;F=Y+104|0;s=l+-2|0;i=p|32;r=0;k=k<<24>>24==57?54:k;while(1){c[S>>2]=0;c[R>>2]=0;switch(a[N>>0]|0){case -88:{m=a[u>>0]|0;switch(m<<24>>24){case -87:{l=x;X=186;break}case -125:{l=c[v>>2]|0;X=186;break}default:l=N}do if((X|0)==186){X=0;if((c[c[l>>2]>>2]|0)>=2)if(m<<24>>24==-125){l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{l=c[(c[x>>2]|0)+4+(r*20|0)>>2]|0;break}else l=N}while(0);p=(c[w>>2]|0)+r|0;break}case -125:{p=r+H|0;l=c[(c[c[v>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{l=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;p=Lj(f,l,S)|0}}switch(a[L>>0]|0){case -88:{n=a[y>>0]|0;switch(n<<24>>24){case -87:{m=B;X=196;break}case -125:{m=c[z>>2]|0;X=196;break}default:m=L}do if((X|0)==196){X=0;if((c[c[m>>2]>>2]|0)>=2)if(n<<24>>24==-125){m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}else{m=c[(c[B>>2]|0)+4+(r*20|0)>>2]|0;break}else m=L}while(0);n=(c[A>>2]|0)+r|0;break}case -125:{n=r+t|0;m=c[(c[c[z>>2]>>2]|0)+4+(r*20|0)>>2]|0;break}default:{m=c[(c[z>>2]|0)+4+(r*20|0)>>2]|0;n=Lj(f,m,R)|0}}q=i&255;Mj(f,l,m,k&255,p,n,j,q);l=c[S>>2]|0;if(l|0?(O=a[C>>0]|0,(O&255)<8):0){a[C>>0]=O+1<<24>>24;c[f+148+((O&255)<<2)>>2]=l}l=c[R>>2]|0;if(l|0?(P=a[C>>0]|0,(P&255)<8):0){a[C>>0]=P+1<<24>>24;c[f+148+((P&255)<<2)>>2]=l}if((r|0)==(D|0))break;switch(k<<24>>24){case 53:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=20;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,20,j,J,0)|0;i=(q|8)&255;k=53;break}case 52:{i=c[I>>2]|0;if((c[E>>2]|0)>(i|0)){c[I>>2]=i+1;Q=c[F>>2]|0;a[Q+(i*20|0)>>0]=18;b[Q+(i*20|0)+2>>1]=0;c[Q+(i*20|0)+4>>2]=j;c[Q+(i*20|0)+8>>2]=J;c[Q+(i*20|0)+12>>2]=0;c[Q+(i*20|0)+16>>2]=0;a[Q+(i*20|0)+1>>0]=0}else Di(Y,18,j,J,0)|0;i=(q|8)&255;k=52;break}default:{l=c[I>>2]|0;if((c[E>>2]|0)>(l|0)){c[I>>2]=l+1;Q=c[F>>2]|0;a[Q+(l*20|0)>>0]=58;b[Q+(l*20|0)+2>>1]=0;c[Q+(l*20|0)+4>>2]=0;c[Q+(l*20|0)+8>>2]=J;c[Q+(l*20|0)+12>>2]=0;c[Q+(l*20|0)+16>>2]=0;a[Q+(l*20|0)+1>>0]=0}else Di(Y,58,0,J,0)|0;k=(r|0)==(s|0)?M:k}}r=r+1|0}k=c[Y+12>>2]|0;i=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Y,i);m=j;break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[I>>2];m=j;break}}Y=Lj(f,N,T)|0;X=Q+16|0;m=Lj(f,c[X>>2]|0,W)|0;Mj(f,N,c[X>>2]|0,k,Y,m,j,l|32);m=j}while(0);i=c[T>>2]|0;if(i|0?(U=f+19|0,V=a[U>>0]|0,(V&255)<8):0){a[U>>0]=V+1<<24>>24;c[f+148+((V&255)<<2)>>2]=i}i=c[W>>2]|0;if(!i){j=m;Ra=Z;return j|0}k=f+19|0;l=a[k>>0]|0;if((l&255)>=8){j=m;Ra=Z;return j|0}a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=i;j=m;Ra=Z;return j|0}function Kj(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var 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=Ra;Ra=Ra+32|0;s=w+16|0;u=w+8|0;n=w;v=c[f+8>>2]|0;if(c[h+4>>2]&1024|0){l=c[h+8>>2]|0;l=(i|0)==0?l:0-l|0;h=v+108|0;k=c[h>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[h>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=70;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=j;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;Ra=w;return}else{Di(v,70,l,j,0)|0;Ra=w;return}}q=c[h+8>>2]|0;h=Vd(q,n)|0;r=(i|0)!=0;do if(!((h|0)==2|(r|(h|0)!=3)^1)?(o=n,m=c[o>>2]|0,o=c[o+4>>2]|0,!(r&((m|0)==0&(o|0)==-2147483648))):0){if(r){h=(h|0)==3;m=Tv(0,0,m|0,o|0)|0;o=L()|0;m=h?0:m;o=h?-2147483648:o;c[n>>2]=m;c[n+4>>2]=o}n=c[v>>2]|0;a:do if(c[n+272>>2]|0){if(!(a[n+81>>0]|0))t=68}else{do if((e[n+276>>1]|0)>=8){h=n+300|0;l=c[h>>2]|0;if(l|0){c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}h=n+296|0;l=c[h>>2]|0;if(!l){h=n+292|0;break}else{c[h>>2]=c[l>>2];t=n+284|0;c[t>>2]=(c[t>>2]|0)+1;t=69;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=68}while(0);if((t|0)==68){l=_d(n,8,0)|0;t=69}if((t|0)==69?l|0:0){n=l;h=n;a[h>>0]=m;a[h+1>>0]=m>>8;a[h+2>>0]=m>>16;a[h+3>>0]=m>>24;n=n+4|0;a[n>>0]=o;a[n+1>>0]=o>>8;a[n+2>>0]=o>>16;a[n+3>>0]=o>>24;n=v+108|0;h=c[n>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[n>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;m=c[v>>2]|0;if(!(a[m+81>>0]|0)){if((h|0)<0)h=(c[n>>2]|0)+-1|0;m=c[v+104>>2]|0;n=m+(h*20|0)+1|0;if(!(a[n>>0]|0)){c[m+(h*20|0)+16>>2]=l;a[n>>0]=-14;break}else{Ei(v,m+(h*20|0)|0,l,-14);break}}if(m|0){if(c[m+480>>2]|0){Xd(m,l);break}o=l;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;o=c[v+104>>2]|0;a[o+(h*20|0)>>0]=71;b[o+(h*20|0)+2>>1]=0;c[o+(h*20|0)+4>>2]=0;c[o+(h*20|0)+8>>2]=j;c[o+(h*20|0)+12>>2]=0;c[o+(h*20|0)+16>>2]=0;a[o+(h*20|0)+1>>0]=0}else h=Di(v,71,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;l=c[v+104>>2]|0;if(a[l+(h*20|0)+1>>0]|0)Ei(v,l+(h*20|0)|0,0,-14)}}else t=7;while(0);do if((t|0)==7?q|0:0){l=a[q>>0]|0;do if(!(l<<24>>24)){h=38972;t=9}else{h=l&255;if(l<<24>>24==48){h=a[q+1>>0]|0;if(!(h<<24>>24)){h=38973;t=9;break}h=h&255;if((h|32|0)==120)break;else k=120}else k=48;p=d[208+h>>0]|0;t=13}while(0);if((t|0)==9){p=0;k=a[208+(d[h>>0]|0)>>0]|0;t=13}if((t|0)==13?(p|0)!=(k&255|0):0){Lg(q,u,(Eu(q)|0)&1073741823,1)|0;if(i|0)g[u>>3]=-+g[u>>3];l=c[v>>2]|0;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))t=27;else t=47;else{do if((e[l+276>>1]|0)>=8){h=l+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}h=l+296|0;k=c[h>>2]|0;if(!k){h=l+292|0;break}else{c[h>>2]=c[k>>2];m=l+284|0;c[m>>2]=(c[m>>2]|0)+1;m=k;t=28;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;t=27}while(0);if((t|0)==27){m=_d(l,8,0)|0;t=28}do if((t|0)==28)if(m){h=u;s=c[h>>2]|0;h=c[h+4>>2]|0;l=m;u=l;a[u>>0]=s;a[u+1>>0]=s>>8;a[u+2>>0]=s>>16;a[u+3>>0]=s>>24;l=l+4|0;a[l>>0]=h;a[l+1>>0]=h>>8;a[l+2>>0]=h>>16;a[l+3>>0]=h>>24;l=v+108|0;h=c[l>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[l>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;k=c[v>>2]|0;if(!(a[k+81>>0]|0)){if((h|0)<0)h=(c[l>>2]|0)+-1|0;k=c[v+104>>2]|0;l=k+(h*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(h*20|0)+16>>2]=m;a[l>>0]=-13;break}else{Ei(v,k+(h*20|0)|0,m,-13);break}}if(k|0){if(c[k+480>>2]|0){Xd(k,m);break}v=m;if((c[k+304>>2]|0)>>>0<=v>>>0?(c[k+308>>2]|0)>>>0>v>>>0:0){v=k+300|0;c[m>>2]=c[v>>2];c[v>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else t=47;while(0);if((t|0)==47){k=v+108|0;h=c[k>>2]|0;if((c[v+112>>2]|0)>(h|0)){c[k>>2]=h+1;u=c[v+104>>2]|0;a[u+(h*20|0)>>0]=-111;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=0;c[u+(h*20|0)+8>>2]=j;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else h=Di(v,145,0,j,0)|0;if(!(a[(c[v>>2]|0)+81>>0]|0)){if((h|0)<0)h=(c[k>>2]|0)+-1|0;k=c[v+104>>2]|0;if(a[k+(h*20|0)+1>>0]|0)Ei(v,k+(h*20|0)|0,0,-13)}}break}c[s>>2]=r?34064:59952;c[s+4>>2]=q;cd(f,38975,s)}while(0);Ra=w;return}function Lj(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;g=i;a:do if(!d)f=0;else while(1){f=c[d+4>>2]|0;if(!(f&4096)){f=d;break a}if(!(f&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){f=0;break}}while(0);if((a[b+23>>0]|0?(a[f>>0]|0)!=-88:0)?(d=g+20|0,a[d>>0]=2,c[g+4>>2]=127,c[g+8>>2]=128,c[g+24>>2]=0,_j(g,f)|0,a[d>>0]|0):0){c[e>>2]=0;e=Nj(b,f,-1)|0;Ra=i;return e|0}g=b+19|0;d=a[g>>0]|0;if(!(d<<24>>24)){j=b+44|0;d=(c[j>>2]|0)+1|0;c[j>>2]=d}else{d=d+-1<<24>>24;a[g>>0]=d;d=c[b+148+((d&255)<<2)>>2]|0}f=Jj(b,f,d)|0;if((f|0)!=(d|0))if((d|0)!=0?(h=a[g>>0]|0,(h&255)<8):0){a[g>>0]=h+1<<24>>24;c[b+148+((h&255)<<2)>>2]=d;d=0}else d=0;c[e>>2]=d;j=f;Ra=i;return j|0}function Mj(d,e,f,g,h,i,j,k){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;do if(!(c[e+4>>2]&256)){if(f|0?c[f+4>>2]&256|0:0){n=Yi(d,f)|0;break}l=Yi(d,e)|0;if(!l)n=Yi(d,f)|0;else n=l}else n=Yi(d,e)|0;while(0);f=Xj(f)|0;l=Xj(e)|0;if(f<<24>>24==0|l<<24>>24==0)l=(l|f)<<24>>24==0?65:(l&255)+(f&255)|0;else l=f<<24>>24>66|l<<24>>24>66?67:65;m=l|k;k=d+8|0;d=c[k>>2]|0;f=d+108|0;l=c[f>>2]|0;if((c[d+112>>2]|0)>(l|0)){c[f>>2]=l+1;e=c[d+104>>2]|0;a[e+(l*20|0)>>0]=g;b[e+(l*20|0)+2>>1]=0;c[e+(l*20|0)+4>>2]=i;c[e+(l*20|0)+8>>2]=j;c[e+(l*20|0)+12>>2]=h;c[e+(l*20|0)+16>>2]=0;a[e+(l*20|0)+1>>0]=0}else l=Di(d,g,i,j,h)|0;do if(!(a[(c[d>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[f>>2]|0)+-1|0;f=c[d+104>>2]|0;e=f+(l*20|0)+1|0;if(a[e>>0]|0){Ei(d,f+(l*20|0)|0,n,-2);break}if(n|0){c[f+(l*20|0)+16>>2]=n;a[e>>0]=-2}}while(0);l=c[k>>2]|0;f=c[l+108>>2]|0;if((f|0)<=0)return;b[(c[l+104>>2]|0)+((f+-1|0)*20|0)+2>>1]=m&255;return}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;j=b+68|0;h=c[j>>2]|0;i=(e|0)<0;a:do if(i&(h|0)!=0?(f=c[h>>2]|0,(f|0)>0):0){g=h+4|0;while(1){if(a[g+13>>0]&4?(bk(0,c[g>>2]|0,d,-1)|0)==0:0)break;if((f|0)>1){f=f+-1|0;g=g+20|0}else break a}j=c[g+16>>2]|0;return j|0}while(0);if(!d)f=0;else f=dk(c[b>>2]|0,d,0,0)|0;g=nj(c[b>>2]|0,h,f)|0;if(g){f=(c[g>>2]|0)+-1|0;h=g+4+(f*20|0)+13|0;a[h>>0]=a[h>>0]&-5|e>>>29&4;if(i){i=b+44|0;e=(c[i>>2]|0)+1|0;c[i>>2]=e}c[g+4+(f*20|0)+16>>2]=e}c[j>>2]=g;j=e;return j|0}function Oj(d,e,f,g,h){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;F=Ra;Ra=Ra+32|0;A=F;i=h&255;D=79-(i&1)|0;y=c[d+8>>2]|0;j=c[e>>2]|0;if((j|0)<=0){Ra=F;return}w=((a[d+23>>0]|0)==0?i&253:h)&255;q=(w&4|0)==0;r=(w&2|0)==0;s=A+20|0;t=A+4|0;u=A+8|0;v=A+24|0;w=(w&8|0)==0;x=(D|0)==78;l=g+-1|0;m=y+108|0;n=y+112|0;o=y+104|0;p=D&255;k=e+4|0;h=0;i=j;while(1){g=c[k>>2]|0;do if(!q?(j=b[k+16>>1]|0,z=j&65535,j<<16>>16!=0):0){if(!w){h=h+-1|0;i=i+-1|0;break}g=l+z|0;e=h+f|0;j=c[m>>2]|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;G=c[o>>2]|0;a[G+(j*20|0)>>0]=p;b[G+(j*20|0)+2>>1]=0;c[G+(j*20|0)+4>>2]=g;c[G+(j*20|0)+8>>2]=e;c[G+(j*20|0)+12>>2]=0;c[G+(j*20|0)+16>>2]=0;a[G+(j*20|0)+1>>0]=0;break}else{Di(y,D,g,e,0)|0;break}}else E=10;while(0);a:do if((E|0)==10){E=0;do if(!r){a[s>>0]=2;c[t>>2]=127;c[u>>2]=128;c[v>>2]=0;if(g){_j(A,g)|0;if(!(a[s>>0]|0))break}Nj(d,g,h+f|0)|0;break a}while(0);j=h+f|0;e=Jj(d,g,j)|0;if((e|0)!=(j|0)){if(x){if(!(a[(c[y>>2]|0)+81>>0]|0))g=(c[o>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0;else g=59308;if(((a[g>>0]|0)==78?(B=g+12|0,C=(c[B>>2]|0)+1|0,(C+(c[g+4>>2]|0)|0)==(e|0)):0)?(C+(c[g+8>>2]|0)|0)==(j|0):0){c[B>>2]=C;break}}g=c[m>>2]|0;if((c[n>>2]|0)>(g|0)){c[m>>2]=g+1;G=c[o>>2]|0;a[G+(g*20|0)>>0]=p;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=e;c[G+(g*20|0)+8>>2]=j;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0;break}else{Di(y,D,e,j,0)|0;break}}}while(0);h=h+1|0;if((h|0)>=(i|0))break;else k=k+20|0}Ra=F;return}function Pj(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;l=n+4|0;m=n;c[l>>2]=0;c[m>>2]=0;if(!g){m=d;Ra=n;return m|0}if((a[g>>0]|0)!=-94){m=d;Ra=n;return m|0}g=c[g+44>>2]|0;if(!g){m=d;Ra=n;return m|0}if(!(c[g+56>>2]|0)){m=d;Ra=n;return m|0}g=g+64|0;while(1){g=c[g>>2]|0;if((c[g>>2]|0)==(b|0))break;else g=g+24|0}g=c[g+8>>2]|0;h=c[(c[g>>2]|0)+72>>2]|0;if(!h){m=d;Ra=n;return m|0}k=d+32|0;if(!(_a[h&127](g,f,c[k>>2]|0,l,m)|0)){m=d;Ra=n;return m|0}g=c[k>>2]|0;if(!g)i=41;else i=((Eu(g)|0)&1073741823)+41|0;a:do if(!b){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;j=34;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0>>0)c[14985]=i;f=59064;h=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&h>>>0>0){b=c[14978]|0;f=Tv(h|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&f>>>0<=b>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){m=d;Ra=n;return m|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;b=h}else b=h}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){m=d;Ra=n;return m|0}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];j=b+284|0;c[j>>2]=(c[j>>2]|0)+1;j=34;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,i,0)|0;j=34}while(0);if((j|0)==34)if(!g){m=d;Ra=n;return m|0}else b=g;gw(b+40|0,0,i+-40|0)|0;f=b;g=d;h=f+40|0;do{c[f>>2]=c[g>>2];f=f+4|0;g=g+4|0}while((f|0)<(h|0));f=b+40|0;c[b+32>>2]=f;h=c[k>>2]|0;if(!h)g=1;else g=((Eu(h)|0)&1073741823)+1|0;ew(f|0,h|0,g|0)|0;c[b+16>>2]=c[l>>2];c[b+8>>2]=c[m>>2];m=b+4|0;c[m>>2]=c[m>>2]|16;m=b;Ra=n;return m|0}function Qj(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;r=Ra;Ra=Ra+48|0;k=r+8|0;h=r;o=r+16|0;q=c[d+8>>2]|0;p=c[e+20>>2]|0;f=e+4|0;g=c[f>>2]|0;do if(!(g&32)){if(g&33554432|0){c[h>>2]=c[p+20>>2];nk(d,0,39045,h);f=c[e+48>>2]|0;g=c[e+44>>2]|0;h=q+108|0;i=c[h>>2]|0;if((c[q+112>>2]|0)>(i|0)){c[h>>2]=i+1;q=c[q+104>>2]|0;a[q+(i*20|0)>>0]=12;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=f;c[q+(i*20|0)+8>>2]=g;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0}else Di(q,12,f,g,0)|0;q=c[e+28>>2]|0;Ra=r;return q|0}c[f>>2]=g|33554432;i=d+44|0;f=(c[i>>2]|0)+1|0;c[i>>2]=f;c[e+48>>2]=f;i=q+108|0;g=c[i>>2]|0;j=q+112|0;if((c[j>>2]|0)>(g|0)){n=g+1|0;c[i>>2]=n;m=c[q+104>>2]|0;a[m+(g*20|0)>>0]=70;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=0;c[m+(g*20|0)+8>>2]=f;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0;f=n}else f=(Di(q,70,0,f,0)|0)+1|0;c[e+44>>2]=f;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;f=c[q+104>>2]|0;a[f+(h*20|0)>>0]=17;f=f+(h*20|0)+1|0;g=f+19|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));n=h;break}else{n=Di(q,17,0,0,0)|0;break}}else n=0;while(0);m=(n|0)!=0;f=c[p+20>>2]|0;c[k>>2]=m?59952:39084;c[k+4>>2]=f;nk(d,1,39063,k);f=(a[e>>0]|0)==-125;if(f)i=c[c[p>>2]>>2]|0;else i=1;s=d+44|0;j=c[s>>2]|0;k=j+1|0;a[o>>0]=0;l=o+4|0;c[l>>2]=k;c[o+16>>2]=0;g=o+8|0;c[g>>2]=0;h=o+12|0;c[h>>2]=0;j=j+i|0;c[s>>2]=j;do if(f){a[o>>0]=10;c[g>>2]=k;c[h>>2]=i;f=q+108|0;g=c[f>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[f>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=73;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=0;c[s+(g*20|0)+8>>2]=k;c[s+(g*20|0)+12>>2]=j;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(q,73,0,k,j)|0;break}}else{a[o>>0]=3;g=q+108|0;f=c[g>>2]|0;if((c[q+112>>2]|0)>(f|0)){c[g>>2]=f+1;s=c[q+104>>2]|0;a[s+(f*20|0)>>0]=70;b[s+(f*20|0)+2>>1]=0;c[s+(f*20|0)+4>>2]=0;c[s+(f*20|0)+8>>2]=k;c[s+(f*20|0)+12>>2]=0;c[s+(f*20|0)+16>>2]=0;a[s+(f*20|0)+1>>0]=0;break}else{Di(q,70,0,k,0)|0;break}}while(0);i=oj(c[d>>2]|0,147,17144,0)|0;h=p+60|0;f=c[h>>2]|0;if(!f){s=ej(d,141,i,0)|0;c[h>>2]=s}else{f=f+12|0;g=c[f>>2]|0;if(g){ni(c[d>>2]|0,g);f=(c[h>>2]|0)+12|0}c[f>>2]=i}c[p+12>>2]=0;if(kj(d,p,o)|0){s=0;Ra=r;return s|0}i=c[l>>2]|0;c[e+28>>2]=i;if(!m){s=i;Ra=r;return s|0}h=q+108|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+(((n|0)<0?g+-1|0:n)*20|0)|0;else f=59308;c[f+8>>2]=g;f=c[e+48>>2]|0;if((c[q+112>>2]|0)>(g|0)){c[h>>2]=g+1;s=c[q+104>>2]|0;a[s+(g*20|0)>>0]=66;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=f;c[s+(g*20|0)+8>>2]=0;c[s+(g*20|0)+12>>2]=0;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0}else Di(q,66,f,0,0)|0;f=c[e+44>>2]|0;g=c[h>>2]|0;if(!(a[(c[q>>2]|0)+81>>0]|0))f=(c[q+104>>2]|0)+((((f|0)<1?g:f)+-1|0)*20|0)|0;else f=59308;c[f+4>>2]=g+-1;s=i;Ra=r;return s|0}function Rj(d,f,g,h){d=d|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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0;U=Ra;Ra=Ra+48|0;G=U+12|0;E=U+8|0;m=U+4|0;D=U;c[E>>2]=0;c[D>>2]=0;B=f+12|0;N=c[B>>2]|0;if(ok(d,f)|0){Ra=U;return}T=pk(d,f)|0;j=c[B>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;J=7;break}case -125:{i=c[j+20>>2]|0;J=7;break}default:K=1}if((J|0)==7)K=c[c[i>>2]>>2]|0;k=c[d>>2]|0;l=(K*5|0)+1|0;a:do if(!k){Q=Sv(l|0,0,-1,-1)|0;P=L()|0;if(!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;J=32;break}i=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0>>0)c[14985]=l;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Q=c[14978]|0;P=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;J=33}else J=33}else Q=0}else Q=0}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){Q=0;break}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];J=k+284|0;c[J>>2]=(c[J>>2]|0)+1;J=32;break a}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,l,0)|0;J=32}while(0);if((J|0)==32)if(!i)Q=0;else J=33;if((J|0)==33){gw(i|0,0,l|0)|0;Q=i}i=c[d>>2]|0;if(!(a[i+81>>0]|0)){w=d+8|0;P=c[w>>2]|0;C=(g|0)==(h|0);z=qk(d,f,3,C?0:E,Q,D)|0;j=a[N>>0]|0;if(j<<24>>24==-88)i=a[N+38>>0]|0;else i=j;switch(i<<24>>24){case -87:{i=N+20|0;J=40;break}case -125:{i=c[N+20>>2]|0;J=40;break}default:J=41}do if((J|0)==40){v=c[c[i>>2]>>2]|0;if((v|0)!=1){c[m>>2]=0;if(j<<24>>24==-125){O=Qj(d,N)|0;break}O=d+44|0;M=c[O>>2]|0;n=M+1|0;c[O>>2]=M+v;if((v|0)>0){o=N+20|0;p=d+23|0;q=G+20|0;r=G+4|0;s=G+8|0;t=G+24|0;m=0;do{i=c[(c[o>>2]|0)+4+(m*20|0)>>2]|0;u=m+n|0;do if(!(a[p>>0]|0))if(!i){y=Jj(d,0,u)|0;J=58}else J=52;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(i){_j(G,i)|0;if(!(a[q>>0]|0)){J=52;break}}Nj(d,i,u)|0}while(0);do if((J|0)==52){J=0;if((a[i>>0]|0)!=-88){y=Jj(d,i,u)|0;J=58;break}l=c[w>>2]|0;i=c[i+28>>2]|0;j=l+108|0;k=c[j>>2]|0;if((c[l+112>>2]|0)>(k|0)){c[j>>2]=k+1;O=c[l+104>>2]|0;a[O+(k*20|0)>>0]=78;b[O+(k*20|0)+2>>1]=0;c[O+(k*20|0)+4>>2]=i;c[O+(k*20|0)+8>>2]=u;c[O+(k*20|0)+12>>2]=0;c[O+(k*20|0)+16>>2]=0;a[O+(k*20|0)+1>>0]=0;break}else{Di(l,78,i,u,0)|0;break}}while(0);do if(((J|0)==58?(J=0,(y|0)!=(u|0)):0)?(x=c[w>>2]|0,x|0):0){i=x+108|0;j=c[i>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[i>>2]=j+1;O=c[x+104>>2]|0;a[O+(j*20|0)>>0]=79;b[O+(j*20|0)+2>>1]=0;c[O+(j*20|0)+4>>2]=y;c[O+(j*20|0)+8>>2]=u;c[O+(j*20|0)+12>>2]=0;c[O+(j*20|0)+16>>2]=0;a[O+(j*20|0)+1>>0]=0;break}else{Di(x,79,y,u,0)|0;break}}while(0);m=m+1|0}while((m|0)!=(v|0));O=n}else O=n}else J=41}while(0);if((J|0)==41)O=Lj(d,N,m)|0;r=(K|0)>0;b:do if(r){i=0;do{if((c[Q+(i<<2)>>2]|0)!=(i|0))break b;i=i+1|0}while((i|0)<(K|0))}else i=0;while(0);if((i|0)!=(K|0)){do if((K|0)==1){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){M=d+44|0;j=(c[M>>2]|0)+1|0;c[M>>2]=j;break}else{j=j+-1<<24>>24;a[i>>0]=j;j=c[d+148+((j&255)<<2)>>2]|0;break}}else{i=d+32|0;j=c[i>>2]|0;k=d+28|0;l=c[k>>2]|0;if((l|0)<(K|0)){M=d+44|0;j=c[M>>2]|0;c[M>>2]=j+K;j=j+1|0;break}else{c[i>>2]=j+K;c[k>>2]=l-K;break}}while(0);if(r){k=P+108|0;l=P+112|0;m=P+104|0;i=0;do{n=i+O|0;o=(c[Q+(i<<2)>>2]|0)+j|0;p=c[k>>2]|0;if((c[l>>2]|0)>(p|0)){c[k>>2]=p+1;M=c[m>>2]|0;a[M+(p*20|0)>>0]=78;b[M+(p*20|0)+2>>1]=0;c[M+(p*20|0)+4>>2]=n;c[M+(p*20|0)+8>>2]=o;c[M+(p*20|0)+12>>2]=0;c[M+(p*20|0)+16>>2]=0;a[M+(p*20|0)+1>>0]=0}else Di(P,78,n,o,0)|0;i=i+1|0}while((i|0)!=(K|0));M=j}else M=j}else M=O;c:do if((z|0)==5){v=c[f+20>>2]|0;s=Yi(d,c[B>>2]|0)|0;u=d+56|0;x=c[u>>2]|0;t=x+-1|0;c[u>>2]=t;u=(h|0)!=(g|0);do if(u){i=d+19|0;j=a[i>>0]|0;if(!(j<<24>>24)){N=d+44|0;i=(c[N>>2]|0)+1|0;c[N>>2]=i}else{N=j+-1<<24>>24;a[i>>0]=N;i=c[d+148+((N&255)<<2)>>2]|0}j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;w=c[P+104>>2]|0;a[w+(k*20|0)>>0]=96;b[w+(k*20|0)+2>>1]=0;c[w+(k*20|0)+4>>2]=M;c[w+(k*20|0)+8>>2]=M;c[w+(k*20|0)+12>>2]=i;c[w+(k*20|0)+16>>2]=0;a[w+(k*20|0)+1>>0]=0;w=i;break}else{Di(P,96,M,M,i)|0;w=i;break}}else w=0;while(0);if((c[v>>2]|0)>0){m=(w|0)==0;n=P+108|0;o=P+112|0;p=P+104|0;q=d+19|0;r=(s|0)==0;l=0;do{i=v+4+(l*20|0)|0;k=Lj(d,c[i>>2]|0,G)|0;d:do if(!m){i=c[i>>2]|0;j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;e:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break d;case -94:{if(!(c[i+4>>2]&1048576)){j=c[i+44>>2]|0;if(!j)break e;i=b[i+32>>1]|0;if(i<<16>>16<=-1)break d;if(a[(c[j+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0)break d}break}default:{}}while(0);i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=96;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=k;c[N+(i*20|0)+12>>2]=w;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0;break}else{Di(P,96,w,k,w)|0;break}}while(0);i=c[n>>2]|0;j=(c[o>>2]|0)>(i|0);if(u|(l|0)<((c[v>>2]|0)+-1|0)){if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=53;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=t;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,53,M,t,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=a[T>>0]|0}else{if(j){c[n>>2]=i+1;N=c[p>>2]|0;a[N+(i*20|0)>>0]=52;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=M;c[N+(i*20|0)+8>>2]=g;c[N+(i*20|0)+12>>2]=k;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else i=Di(P,52,M,g,k)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[p>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(P,j+(i*20|0)|0,s,-2);break}if(r)break;c[j+(i*20|0)+16>>2]=s;a[k>>0]=-2}while(0);i=c[n>>2]|0;if((i|0)>0)b[(c[p>>2]|0)+((i+-1|0)*20|0)+2>>1]=(a[T>>0]|16)<<24>>24}i=c[G>>2]|0;if(i|0?(F=a[q>>0]|0,(F&255)<8):0){a[q>>0]=F+1<<24>>24;c[d+148+((F&255)<<2)>>2]=i}l=l+1|0}while((l|0)<(c[v>>2]|0))}l=(w|0)==0;do if(!l){j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;N=c[P+104>>2]|0;a[N+(i*20|0)>>0]=50;b[N+(i*20|0)+2>>1]=0;c[N+(i*20|0)+4>>2]=w;c[N+(i*20|0)+8>>2]=h;c[N+(i*20|0)+12>>2]=0;c[N+(i*20|0)+16>>2]=0;a[N+(i*20|0)+1>>0]=0}else Di(P,50,w,h,0)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=11;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=0;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[P+12>>2]|0;i=0-x|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,P,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[P+108>>2];if(!l?(H=d+19|0,I=a[H>>0]|0,(I&255)<8):0){a[H>>0]=I+1<<24>>24;c[d+148+((I&255)<<2)>>2]=w}}else{if(C){l=g;q=0}else{l=d+56|0;q=(c[l>>2]|0)+-1|0;c[l>>2]=q;l=q}f:do if(r){n=P+108|0;o=P+112|0;p=P+104|0;m=0;while(1){i=c[B>>2]|0;k=a[i>>0]|0;if(k<<24>>24==-88)j=a[i+38>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=i+20|0;J=158;break}case -125:{j=c[i+20>>2]|0;J=158;break}default:{}}do if((J|0)==158){J=0;if((c[c[j>>2]>>2]|0)>=2){if(k<<24>>24!=-125?(a[i+38>>0]|0)!=-125:0){i=c[(c[i+20>>2]|0)+4+(m*20|0)>>2]|0;break}i=c[(c[c[i+20>>2]>>2]|0)+4+(m*20|0)>>2]|0}}while(0);j=a[i>>0]|0;if((j+91&255)<2)do{i=c[i+12>>2]|0;j=a[i>>0]|0}while((j+91&255)<2);if(j<<24>>24==-88)j=a[i+38>>0]|0;g:do switch(j<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if((c[i+4>>2]&1048576|0)==0?(A=c[i+44>>2]|0,(A|0)!=0):0){i=b[i+32>>1]|0;if(i<<16>>16<=-1)break g;if(!(a[(c[A+4>>2]|0)+(i<<16>>16<<4)+12>>0]|0))J=173}else J=173;break}default:J=173}while(0);do if((J|0)==173){J=0;i=m+M|0;j=c[n>>2]|0;if((c[o>>2]|0)>(j|0)){c[n>>2]=j+1;I=c[p>>2]|0;a[I+(j*20|0)>>0]=50;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=i;c[I+(j*20|0)+8>>2]=l;c[I+(j*20|0)+12>>2]=0;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0;break}else{Di(P,50,i,l,0)|0;break}}while(0);m=m+1|0;if((m|0)==(K|0))break f}}while(0);do if((z|0)==1){l=c[D>>2]|0;j=P+108|0;i=c[j>>2]|0;k=P+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=30;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=l;c[I+(i*20|0)+8>>2]=g;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else Di(P,30,l,g,M)|0;i=c[j>>2]|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;j=c[P+104>>2]|0;a[j+(i*20|0)>>0]=11;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));z=l;break}else{i=Di(P,11,0,0,0)|0;z=l;break}}else{n=P+108|0;i=c[n>>2]|0;m=P+112|0;if((c[m>>2]|0)>(i|0)){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=91;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=M;c[I+(i*20|0)+8>>2]=K;c[I+(i*20|0)+12>>2]=0;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,91,M,K,0)|0;j=c[P>>2]|0;h:do if(a[j+81>>0]|0){if((K|0)!=-12)kg(j,K,T)}else{if((i|0)<0)i=(c[n>>2]|0)+-1|0;j=c[P+104>>2]|0;k=j+(i*20|0)|0;do if((K|0)<=-1){l=j+(i*20|0)+1|0;if(a[l>>0]|0)break;if((K|0)==-3){c[j+(i*20|0)+16>>2]=T;a[l>>0]=-3;break h}if(!T)break h;c[j+(i*20|0)+16>>2]=T;a[l>>0]=K;if((K|0)!=-12)break h;I=T+12|0;c[I>>2]=(c[I>>2]|0)+1;break h}while(0);Ei(P,k,T,K)}while(0);k=c[D>>2]|0;i=c[n>>2]|0;j=(c[m>>2]|0)>(i|0);if(C){if(j){c[n>>2]=i+1;h=c[P+104>>2]|0;a[h+(i*20|0)>>0]=28;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=k;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=M;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0}else i=Di(P,28,k,g,M)|0;if(a[(c[P>>2]|0)+81>>0]|0)break c;g=c[P+104>>2]|0;a[g+(i*20|0)+1>>0]=-3;c[g+(i*20|0)+16>>2]=K;break c}else{if(j){c[n>>2]=i+1;I=c[P+104>>2]|0;a[I+(i*20|0)>>0]=29;b[I+(i*20|0)+2>>1]=0;c[I+(i*20|0)+4>>2]=k;c[I+(i*20|0)+8>>2]=0;c[I+(i*20|0)+12>>2]=M;c[I+(i*20|0)+16>>2]=0;a[I+(i*20|0)+1>>0]=0}else i=Di(P,29,k,0,M)|0;if(a[(c[P>>2]|0)+81>>0]|0){z=k;break}z=c[P+104>>2]|0;a[z+(i*20|0)+1>>0]=-3;c[z+(i*20|0)+16>>2]=K;z=k;break}}while(0);j=c[E>>2]|0;do if((K|0)==1&(j|0)!=0){k=P+108|0;l=c[k>>2]|0;if((c[P+112>>2]|0)>(l|0)){c[k>>2]=l+1;I=c[P+104>>2]|0;a[I+(l*20|0)>>0]=51;b[I+(l*20|0)+2>>1]=0;c[I+(l*20|0)+4>>2]=j;c[I+(l*20|0)+8>>2]=g;c[I+(l*20|0)+12>>2]=0;c[I+(l*20|0)+16>>2]=0;a[I+(l*20|0)+1>>0]=0;break}else{Di(P,51,j,g,0)|0;break}}while(0);do if(C){j=P+108|0;k=c[j>>2]|0;if((c[P+112>>2]|0)>(k|0)){c[j>>2]=k+1;I=c[P+104>>2]|0;a[I+(k*20|0)>>0]=11;b[I+(k*20|0)+2>>1]=0;c[I+(k*20|0)+4>>2]=0;c[I+(k*20|0)+8>>2]=g;c[I+(k*20|0)+12>>2]=0;c[I+(k*20|0)+16>>2]=0;a[I+(k*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);do if(q|0){k=c[P+12>>2]|0;j=~q;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,P,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[P+108>>2];break}}while(0);y=P+108|0;j=c[y>>2]|0;f=P+112|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;x=c[P+104>>2]|0;a[x+(j*20|0)>>0]=36;b[x+(j*20|0)+2>>1]=0;c[x+(j*20|0)+4>>2]=z;c[x+(j*20|0)+8>>2]=g;c[x+(j*20|0)+12>>2]=0;c[x+(j*20|0)+16>>2]=0;a[x+(j*20|0)+1>>0]=0;x=j}else x=Di(P,36,z,g,0)|0;v=(K|0)>1;if(v){I=d+56|0;w=(c[I>>2]|0)+-1|0;c[I>>2]=w}else w=g;i:do if(r){p=d+19|0;q=d+44|0;r=N+38|0;s=N+20|0;t=N+20|0;u=P+104|0;o=0;while(1){j=a[p>>0]|0;if(!(j<<24>>24)){n=(c[q>>2]|0)+1|0;c[q>>2]=n}else{n=j+-1<<24>>24;a[p>>0]=n;n=c[d+148+((n&255)<<2)>>2]|0}k=a[N>>0]|0;if(k<<24>>24==-88)j=a[r>>0]|0;else j=k;switch(j<<24>>24){case -87:{j=s;J=237;break}case -125:{j=c[t>>2]|0;J=237;break}default:j=N}j:do if((J|0)==237){J=0;if((c[c[j>>2]>>2]|0)<2){j=N;break}do if(k<<24>>24!=-125){if((a[r>>0]|0)==-125)break;j=c[(c[s>>2]|0)+4+(o*20|0)>>2]|0;break j}while(0);j=c[(c[c[t>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);m=Yi(d,j)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=90;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=o;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(P,90,z,o,n)|0;k=o+M|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;I=c[u>>2]|0;a[I+(j*20|0)>>0]=52;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=k;c[I+(j*20|0)+8>>2]=w;c[I+(j*20|0)+12>>2]=n;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else j=Di(P,52,k,w,n)|0;do if(!(a[(c[P>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[y>>2]|0)+-1|0;k=c[u>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(P,k+(j*20|0)|0,m,-2);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-2}while(0);do if(n|0){j=a[p>>0]|0;if((j&255)>=8)break;a[p>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=n}while(0);o=o+1|0;if((o|0)==(K|0))break i}}while(0);j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;N=c[P+104>>2]|0;a[N+(j*20|0)>>0]=11;b[N+(j*20|0)+2>>1]=0;c[N+(j*20|0)+4>>2]=0;c[N+(j*20|0)+8>>2]=h;c[N+(j*20|0)+12>>2]=0;c[N+(j*20|0)+16>>2]=0;a[N+(j*20|0)+1>>0]=0}else Di(P,11,0,h,0)|0;do if(v){k=c[P+12>>2]|0;j=~w;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,P,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[y>>2];j=x+1|0;k=c[y>>2]|0;if((c[f>>2]|0)>(k|0)){c[y>>2]=k+1;h=c[P+104>>2]|0;a[h+(k*20|0)>>0]=5;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=z;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0}else Di(P,5,z,j,0)|0;j=c[y>>2]|0;if((c[f>>2]|0)>(j|0)){c[y>>2]=j+1;h=c[P+104>>2]|0;a[h+(j*20|0)>>0]=11;b[h+(j*20|0)+2>>1]=0;c[h+(j*20|0)+4>>2]=0;c[h+(j*20|0)+8>>2]=g;c[h+(j*20|0)+12>>2]=0;c[h+(j*20|0)+16>>2]=0;a[h+(j*20|0)+1>>0]=0;break}else{Di(P,11,0,g,0)|0;break}}while(0);j=c[y>>2]|0;if(!(a[(c[P>>2]|0)+81>>0]|0))i=(c[P+104>>2]|0)+(((i|0)<0?j+-1|0:i)*20|0)|0;else i=59308;c[i+8>>2]=j}while(0);if(!((M|0)==(O|0)|(M|0)==0)?(R=d+19|0,S=a[R>>0]|0,(S&255)<8):0){a[R>>0]=S+1<<24>>24;c[d+148+((S&255)<<2)>>2]=M}i=c[d>>2]|0}do if(Q|0){if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break}S=Q;if((c[i+304>>2]|0)>>>0<=S>>>0?(c[i+308>>2]|0)>>>0>S>>>0:0){S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}while(0);i=c[d>>2]|0;if(!T){Ra=U;return}if(i|0){if(c[i+480>>2]|0){Xd(i,T);Ra=U;return}d=T;if((c[i+304>>2]|0)>>>0<=d>>>0?(c[i+308>>2]|0)>>>0>d>>>0:0){d=i+300|0;c[T>>2]=c[d>>2];c[d>>2]=T;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](T);Ra=U;return}else{d=Wa[c[29352>>2]&127](T)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](T);Ra=U;return}}function Sj(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,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=Ra;Ra=Ra+240|0;y=E+212|0;C=E+160|0;j=E+108|0;k=E+56|0;B=E+4|0;D=E;c[D>>2]=0;l=j;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=k;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=C;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));l=B;m=l+52|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));w=c[e+4>>2]|0;ew(B|0,e|0,((w&16384|0)==0?((w&8192|0)==0?52:28):12)|0)|0;a[C>>0]=44;c[C+12>>2]=j;c[C+16>>2]=k;a[j>>0]=57;c[j+12>>2]=B;c[j+16>>2]=c[f+4>>2];a[k>>0]=55;c[k+12>>2]=B;c[k+16>>2]=c[f+24>>2];f=a[B>>0]|0;w=B+38|0;switch((f<<24>>24==-88?a[w>>0]|0:f)<<24>>24){case -87:{j=c[B+20>>2]|0;e=j;x=4;break}case -125:{j=c[B+20>>2]|0;e=c[j>>2]|0;x=4;break}default:x=5}a:do if((x|0)==4){v=c[e>>2]|0;if((v|0)!=1){c[D>>2]=0;if(f<<24>>24==-125){e=Qj(d,B)|0;break}u=d+44|0;t=c[u>>2]|0;e=t+1|0;c[u>>2]=t+v;if((v|0)>0){o=B+20|0;p=d+23|0;q=y+20|0;r=y+4|0;s=y+8|0;t=y+24|0;u=d+8|0;f=0;while(1){j=c[j+4+(f*20|0)>>2]|0;n=f+e|0;do if(!(a[p>>0]|0))if(!j){A=Jj(d,0,n)|0;x=22}else x=16;else{a[q>>0]=2;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(j){_j(y,j)|0;if(!(a[q>>0]|0)){x=16;break}}Nj(d,j,n)|0}while(0);do if((x|0)==16){x=0;if((a[j>>0]|0)!=-88){A=Jj(d,j,n)|0;x=22;break}m=c[u>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[m+104>>2]|0;a[m+(l*20|0)>>0]=78;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=j;c[m+(l*20|0)+8>>2]=n;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,n,0)|0;break}}while(0);do if(((x|0)==22?(x=0,(A|0)!=(n|0)):0)?(z=c[u>>2]|0,z|0):0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;m=c[z+104>>2]|0;a[m+(k*20|0)>>0]=79;b[m+(k*20|0)+2>>1]=0;c[m+(k*20|0)+4>>2]=A;c[m+(k*20|0)+8>>2]=n;c[m+(k*20|0)+12>>2]=0;c[m+(k*20|0)+16>>2]=0;a[m+(k*20|0)+1>>0]=0;break}else{Di(z,79,A,n,0)|0;break}}while(0);f=f+1|0;if((f|0)==(v|0))break a;j=c[o>>2]|0}}}else x=5}while(0);if((x|0)==5)e=Lj(d,B,D)|0;a[w>>0]=a[B>>0]|0;a[B>>0]=-88;c[B+28>>2]=e;e=B+4|0;f=c[e>>2]&-4097;c[e>>2]=f;if(!h){c[e>>2]=f|1;Jj(d,C,g)|0}else db[h&127](d,C,g,i);e=c[D>>2]|0;if(!e){Ra=E;return}f=d+19|0;j=a[f>>0]|0;if((j&255)>=8){Ra=E;return}a[f>>0]=j+1<<24>>24;c[d+148+((j&255)<<2)>>2]=e;Ra=E;return}function Tj(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}h=a[e>>0]|0;j=h^1;k=j&255;a:do switch(h<<24>>24){case 44:{Tj(d,c[e+12>>2]|0,f,g);Tj(d,c[e+16>>2]|0,f,g);break}case 43:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;tk(d,c[e+12>>2]|0,h,g^16);Tj(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 19:{tk(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?0:16;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){Tj(d,h,f,g);break a}else{tk(d,h,f,g);break a}}case -96:case 45:{g=128;i=h<<24>>24==45?52:53;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,66,g);break}case 49:{if(g|0){Rj(d,e,f,f);break a}m=d+56|0;g=c[m>>2]|0;h=g+-1|0;c[m>>2]=h;Rj(d,e,f,h);h=c[o+12>>2]|0;g=0-g|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)==0&1;else h=0;n=36;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==36){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(c[m>>2]|0)break}else n=42;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=20;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,20,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function Uj(d,f,g,h,i,j){d=d|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,o=0,p=0,q=0;p=d+8|0;k=c[p>>2]|0;a:do if(!k){o=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))n=15;else{p=0;break a}else{do if((e[o+276>>1]|0)>=224){k=o+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}k=o+296|0;l=c[k>>2]|0;if(!l){k=o+292|0;break}else{c[k>>2]=c[l>>2];m=o+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break b}}else k=o+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;n=15}while(0);if((n|0)==15)m=_d(o,224,0)|0;if(!m)p=0;else{k=m+104|0;l=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));c[m>>2]=o;k=o+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=d;c[p>>2]=m;Di(m,61,0,1,0)|0;p=m}}else p=k;while(0);if((g|0)==2){o=c[d+116>>2]|0;a[((o|0)==0?d:o)+21>>0]=1}n=i<<24>>24;o=p+108|0;k=c[o>>2]|0;if((c[p+112>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[p+104>>2]|0;a[d+(k*20|0)>>0]=69;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=f;c[d+(k*20|0)+8>>2]=g;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else k=Di(p,69,f,g,0)|0;l=c[p>>2]|0;do if(a[l+81>>0]|0){if(i<<24>>24!=-12)kg(l,n,h)}else{if((k|0)<0)k=(c[o>>2]|0)+-1|0;l=c[p+104>>2]|0;m=l+(k*20|0)|0;if(i<<24>>24<=-1?(q=l+(k*20|0)+1|0,(a[q>>0]|0)==0):0){if(i<<24>>24==-3){c[l+(k*20|0)+16>>2]=h;a[q>>0]=-3;break}if(!h)break;c[l+(k*20|0)+16>>2]=h;a[q>>0]=i;if(i<<24>>24!=-12)break;q=h+12|0;c[q>>2]=(c[q>>2]|0)+1;break}Ei(p,m,h,n)}while(0);k=c[o>>2]|0;if((k|0)<=0)return;b[(c[p+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=j&255;return}function Vj(e,f,g,h,i){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;r=Ra;Ra=Ra+16|0;p=r;if(!f){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=90;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=g;c[e+(k*20|0)+8>>2]=h;c[e+(k*20|0)+12>>2]=i;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,90,g,h,i)|0;Ra=r;return}}do if((h|0)>=0?(b[f+40>>1]|0)!=(h|0):0){m=(c[f+56>>2]|0)!=0;n=m?164:90;if(m|(c[f+36>>2]&32|0)==0)j=h;else{j=c[f+8>>2]|0;a:do if(!j)j=0;else while(1){m=j+55|0;if(((d[m>>0]|d[m+1>>0]<<8)&3)==2)break a;j=c[j+20>>2]|0;if(!j){j=0;break}}while(0);m=h&65535;k=b[j+52>>1]|0;b:do if(!(k<<16>>16))j=-1;else{l=c[j+4>>2]|0;k=k&65535;j=0;while(1){if((b[l+(j<<1)>>1]|0)==m<<16>>16)break b;j=j+1|0;if(j>>>0>=k>>>0){j=-1;break}}}while(0);j=j<<16>>16}k=e+108|0;l=c[k>>2]|0;if((c[e+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[e+104>>2]|0;a[m+(l*20|0)>>0]=n;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=g;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=i;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;break}else{Di(e,n,g,j,i)|0;break}}else o=7;while(0);do if((o|0)==7){j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;o=c[e+104>>2]|0;a[o+(k*20|0)>>0]=-128;b[o+(k*20|0)+2>>1]=0;c[o+(k*20|0)+4>>2]=g;c[o+(k*20|0)+8>>2]=i;c[o+(k*20|0)+12>>2]=0;c[o+(k*20|0)+16>>2]=0;a[o+(k*20|0)+1>>0]=0;break}else{Di(e,128,g,i,0)|0;break}}while(0);if((h|0)<=-1){Ra=r;return}if(!(c[f+12>>2]|0)){c[p>>2]=0;m=c[e>>2]|0;j=f+4|0;k=c[j>>2]|0;l=c[k+(h<<4)+4>>2]|0;do if(l|0?(Wj(m,l,a[m+78>>0]|0,a[k+(h<<4)+13>>0]|0,p)|0,q=c[p>>2]|0,q|0):0){k=c[e>>2]|0;if(!(a[k+81>>0]|0)){g=c[e+104>>2]|0;p=(c[e+108>>2]|0)+-1|0;a[g+(p*20|0)+1>>0]=-11;c[g+(p*20|0)+16>>2]=q;break}else{kg(k,-11,q);break}}while(0)}else j=f+4|0;if((a[(c[j>>2]|0)+(h<<4)+13>>0]|0)!=69){Ra=r;return}j=e+108|0;k=c[j>>2]|0;if((c[e+112>>2]|0)>(k|0)){c[j>>2]=k+1;e=c[e+104>>2]|0;a[e+(k*20|0)>>0]=84;b[e+(k*20|0)+2>>1]=0;c[e+(k*20|0)+4>>2]=i;c[e+(k*20|0)+8>>2]=0;c[e+(k*20|0)+12>>2]=0;c[e+(k*20|0)+16>>2]=0;a[e+(k*20|0)+1>>0]=0;Ra=r;return}else{Di(e,84,i,0,0)|0;Ra=r;return}}function Wj(f,i,j,k,l){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0.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;H=Ra;Ra=Ra+32|0;u=H+16|0;D=H+8|0;E=H;F=H+24|0;c[F>>2]=0;p=i;a:while(1){i=a[p>>0]|0;switch(i<<24>>24){case -90:case -83:break;default:break a}p=c[p+12>>2]|0}if(i<<24>>24==-88)i=d[p+38>>0]|0;else i=i&255;b:do switch((i&255)<<24>>24){case 36:{i=c[p+8>>2]|0;n=a[i>>0]|0;c:do if(!(n<<24>>24))m=67;else{m=67;o=0;do{o=o<<8|d[208+(n&255)>>0];i=i+1|0;d:do if((o|0)<1685026146){if((o|0)<1667785074){switch(o|0){case 1651273570:break;default:{G=16;break d}}switch(m<<24>>24){case 69:case 67:{m=65;break d}default:{G=15;break d}}}if((o|0)<1668050786)switch(o|0){case 1667785074:{m=66;break d}default:{G=16;break d}}else switch(o|0){case 1668050786:{m=66;break d}default:{G=16;break d}}}else{if((o|0)>=1919246700){if((o|0)>=1952807028)switch(o|0){case 1952807028:{m=66;break d}default:{G=16;break d}}switch(o|0){case 1919246700:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}else{G=15;break}}if((o|0)<1718382433){switch(o|0){case 1685026146:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}else{switch(o|0){case 1718382433:break;default:{G=16;break d}}if(m<<24>>24==67){m=69;break}}}while(0);if((G|0)==15)G=0;else if((G|0)==16){G=0;if((o&16777215|0)==6909556){m=68;break c}}n=a[i>>0]|0}while(n<<24>>24!=0)}while(0);s=Wj(f,c[p+12>>2]|0,j,m,l)|0;i=c[l>>2]|0;if(!i){l=s;Ra=H;return l|0}Sg(i,m,1);r=c[l>>2]|0;if(k<<24>>24<=66){if(k<<24>>24!=66){l=s;Ra=H;return l|0}m=r+8|0;i=b[m>>1]|0;l=i&65535;if(!((l&2|0)!=0|(l&12|0)==0)){Hg(r,1,1)|0;i=b[m>>1]|0}b[m>>1]=i&-13;l=s;Ra=H;return l|0}p=r+8|0;n=b[p>>1]|0;i=n&65535;if(i&4|0){l=s;Ra=H;return l|0}if(i&8|0){q=+g[r>>3];i=Mg(q)|0;m=L()|0;l=Sv(i|0,m|0,1,-2147483648)|0;G=L()|0;if(!((G>>>0>0|(G|0)==0&l>>>0>1)&q==+(i>>>0)+4294967296.0*+(m|0))){l=s;Ra=H;return l|0}l=r;c[l>>2]=i;c[l+4>>2]=m;b[p>>1]=n&15904|4;l=s;Ra=H;return l|0}if(!(i&2)){l=s;Ra=H;return l|0}i=a[r+10>>0]|0;m=r+16|0;n=r+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[r>>3]=q;m=b[p>>1]|0;i=m|8;b[p>>1]=i;n=Mg(q)|0;o=L()|0;l=Sv(n|0,o|0,1,-2147483648)|0;f=L()|0;if((f>>>0>0|(f|0)==0&l>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=r;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=28}}else{l=E;G=c[l+4>>2]|0;i=r;c[i>>2]=c[l>>2];c[i+4>>2]=G;i=b[p>>1]|0;G=28}if((G|0)==28){i=i|4;b[p>>1]=i}b[p>>1]=i&-3}l=s;Ra=H;return l|0}case -91:{i=c[p+12>>2]|0;m=a[i>>0]|0;switch(m<<24>>24){case -111:case -109:break;default:{G=107;break b}}t=34064;p=i;s=m&255;o=-1;r=-1;G=39;break}default:{t=59952;s=i;o=1;r=0;G=39}}while(0);e:do if((G|0)==39){f:do switch(s|0){case 110:case 145:case 147:{g:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=64;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){C=c[14978]|0;B=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&B>>>0<=C>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;C=m}else C=m}else G=65}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=65;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=64;break g}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=64}while(0);if((G|0)==64)if(!i)G=65;else C=i;if((G|0)==65){c[F>>2]=0;n=0;m=0;break f}m=C;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));B=C+8|0;b[B>>1]=1;c[C+32>>2]=f;c[F>>2]=C;i=C;if(!(c[p+4>>2]&1024)){m=c[p+8>>2]|0;c[u>>2]=t;c[u+4>>2]=m;m=dd(f,38967,u)|0;if(!m){n=C;m=C;break f}yc(C,m,-1,1,116)|0}else{u=c[p+8>>2]|0;u=Yv(o|0,r|0,u|0,((u|0)<0)<<31>>31|0)|0;F=L()|0;f=C;c[f>>2]=u;c[f+4>>2]=F;b[B>>1]=4}do if(k<<24>>24==65&(s|2|0)==147){o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(v=a[C+10>>0]|0,w=C+16|0,x=C+12|0,Lg(c[w>>2]|0,D,c[x>>2]|0,v)|0):0){if(Og(c[w>>2]|0,E,c[x>>2]|0,v)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=79}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=79}if((G|0)==79){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}else{if(k<<24>>24<=66){if(k<<24>>24!=66)break;m=b[B>>1]|0;f=m&65535;if(!((f&2|0)!=0|(f&12|0)==0)){Hg(C,1,1)|0;m=b[B>>1]|0}b[B>>1]=m&-13;break}o=b[B>>1]|0;m=o&65535;if(!(m&4)){if(m&8|0){q=+g[C>>3];m=Mg(q)|0;n=L()|0;f=Sv(m|0,n|0,1,-2147483648)|0;F=L()|0;if(!((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0)))break;f=C;c[f>>2]=m;c[f+4>>2]=n;b[B>>1]=o&15904|4;break}if(m&2|0?(y=a[C+10>>0]|0,z=C+16|0,A=C+12|0,Lg(c[z>>2]|0,D,c[A>>2]|0,y)|0):0){if(Og(c[z>>2]|0,E,c[A>>2]|0,y)|0){q=+g[D>>3];g[C>>3]=q;n=b[B>>1]|0;m=n|8;b[B>>1]=m;o=Mg(q)|0;p=L()|0;f=Sv(o|0,p|0,1,-2147483648)|0;F=L()|0;if((F>>>0>0|(F|0)==0&f>>>0>1)&q==+(o>>>0)+4294967296.0*+(p|0)){m=C;c[m>>2]=o;c[m+4>>2]=p;m=n&15904;G=93}}else{f=E;G=c[f+4>>2]|0;m=C;c[m>>2]=c[f>>2];c[m+4>>2]=G;m=b[B>>1]|0;G=93}if((G|0)==93){m=m|4;b[B>>1]=m}b[B>>1]=m&-3}}}while(0);m=b[B>>1]|0;n=m&65535;if(n&12){m=n&65533;b[B>>1]=m}if(j<<24>>24==1|(m&2)==0){m=0;break e}if((a[C+10>>0]|0)==j<<24>>24){m=0;break e}m=Ig(C,j)|0;break e}case 165:{i=c[p+12>>2]|0;G=107;break e}case 114:{h:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=154;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=156}else G=156}else G=155}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=155;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=154;break h}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=154}while(0);if((G|0)==154)if(!i)G=155;else G=156;if((G|0)==155){c[F>>2]=0;n=0;m=0;break f}else if((G|0)==156){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[i+8>>1]=1;c[i+32>>2]=f;c[F>>2]=i;oh(i);m=0;break e}break}case 146:{i:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=180;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){j=c[14978]|0;E=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=j>>>0)&1}m=Wa[c[29340>>2]&127](i)|0;if(m){i=Wa[c[29352>>2]&127](m)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;v=m}else v=m}else G=181}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=181;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=180;break i}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=180}while(0);if((G|0)==180)if(!i)G=181;else v=i;if((G|0)==181){c[F>>2]=0;n=0;m=0;break f}m=v;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));b[v+8>>1]=1;c[v+32>>2]=f;c[F>>2]=v;i=v;s=(c[p+8>>2]|0)+2|0;r=(Eu(s)|0)&1073741823;t=r+-1|0;u=(t|0)/2|0;o=u+1|0;p=((o|0)<0)<<31>>31;j:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))G=192;else m=0;else{do if(!(0

      >>0|(0==(p|0)?(e[f+276>>1]|0)>>>0>>0:0))){n=f+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}n=f+296|0;m=c[n>>2]|0;if(!m){m=f+292|0;break}else{c[n>>2]=c[m>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=193;break j}}else m=f+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;G=192}while(0);if((G|0)==192){m=_d(f,o,p)|0;G=193}if((G|0)==193){o=r+-2|0;if(!m)m=0;else{if(r>>>0>2){n=0;do{f=a[s+n>>0]|0;j=a[s+(n|1)>>0]|0;a[m+(n>>>1)>>0]=(0-(j>>>6&1)&9)+j&15|(0-(f>>>6&1)&9)+f<<4;n=n+2|0}while((n|0)<(o|0));n=t>>>1}else n=0;a[m+n>>0]=0}}yc(v,m,u,0,116)|0;m=0;break e}case 159:{k:do if(!f){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](40)|0;G=223;break}i=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){G=c[14978]|0;j=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&j>>>0<=G>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;G=225}else G=225}else G=224}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){G=224;break}}else{do if((e[f+276>>1]|0)>=40){m=f+300|0;i=c[m>>2]|0;if(i|0){c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}m=f+296|0;i=c[m>>2]|0;if(!i){i=f+292|0;break}else{c[m>>2]=c[i>>2];G=f+284|0;c[G>>2]=(c[G>>2]|0)+1;G=223;break k}}else i=f+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(f,40,0)|0;G=223}while(0);if((G|0)==223)if(!i)G=224;else G=225;if((G|0)==224){c[F>>2]=0;m=0;i=0;break e}else if((G|0)==225){m=i;n=m+40|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(n|0));c[i+32>>2]=f;c[F>>2]=i;b[i+8>>1]=4;m=i;c[m>>2]=(a[(c[p+8>>2]|0)+4>>0]|0)==0&1;c[m+4>>2]=0;m=0;break e}break}default:{m=0;i=0;break e}}while(0);i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!n){l=7;Ra=H;return l|0}if(!((b[n+8>>1]&9216)==0?!(c[n+24>>2]|0):0))Cg(n);i=c[n+32>>2]|0;if(i|0){if(c[i+480>>2]|0){Xd(i,m);l=7;Ra=H;return l|0}l=n;if((c[i+304>>2]|0)>>>0<=l>>>0?(c[i+308>>2]|0)>>>0>l>>>0:0){l=i+300|0;c[n>>2]=c[l>>2];c[l>>2]=m;l=7;Ra=H;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}else{l=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);l=7;Ra=H;return l|0}}while(0);do if((G|0)==107){f=(Wj(f,i,j,k,F)|0)==0;p=c[F>>2]|0;s=p;if(f&(p|0)!=0){oh(p);r=p+8|0;i=b[r>>1]|0;do if(!(i&8)){n=p;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==0&(n|0)==-2147483648){g[p>>3]=9223372036854775808.0;i=i&15904|8;b[r>>1]=i;q=9223372036854775808.0;break}else{F=Tv(0,0,m|0,n|0)|0;f=L()|0;C=p;c[C>>2]=F;c[C+4>>2]=f;c[h>>2]=F;c[h+4>>2]=f;q=+g[h>>3];break}}else{q=-+g[p>>3];g[p>>3]=q}while(0);if(k<<24>>24<=66){if(k<<24>>24!=66){m=0;i=s;break}G=i&65535;if(!((G&2|0)!=0|(G&12|0)==0)){Hg(p,j,1)|0;i=b[r>>1]|0}b[r>>1]=i&-13;m=0;i=s;break}m=i&65535;if(!(m&4)){if(m&8|0){m=Mg(q)|0;n=L()|0;G=Sv(m|0,n|0,1,-2147483648)|0;f=L()|0;if(!((f>>>0>0|(f|0)==0&G>>>0>1)&q==+(m>>>0)+4294967296.0*+(n|0))){m=0;i=s;break}G=p;c[G>>2]=m;c[G+4>>2]=n;b[r>>1]=i&15904|4;m=0;i=s;break}if(m&2){i=a[p+10>>0]|0;m=p+16|0;n=p+12|0;if(Lg(c[m>>2]|0,D,c[n>>2]|0,i)|0){if(Og(c[m>>2]|0,E,c[n>>2]|0,i)|0){q=+g[D>>3];g[p>>3]=q;m=b[r>>1]|0;i=m|8;b[r>>1]=i;n=Mg(q)|0;o=L()|0;f=Sv(n|0,o|0,1,-2147483648)|0;j=L()|0;if((j>>>0>0|(j|0)==0&f>>>0>1)&q==+(n>>>0)+4294967296.0*+(o|0)){i=p;c[i>>2]=n;c[i+4>>2]=o;i=m&15904;G=122}}else{f=E;G=c[f+4>>2]|0;i=p;c[i>>2]=c[f>>2];c[i+4>>2]=G;i=b[r>>1]|0;G=122}if((G|0)==122){i=i|4;b[r>>1]=i}b[r>>1]=i&-3}m=0;i=s}else{m=0;i=s}}else{m=0;i=s}}else{m=0;i=s}}while(0);c[l>>2]=i;l=m;Ra=H;return l|0}function Xj(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;a:while(1){f=c[e+4>>2]|0;if(f&4096)do{if(!(f&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;f=c[e+4>>2]|0}while((f&4096|0)!=0);if(f&512|0){g=0;k=31;break}f=a[e>>0]|0;if(f<<24>>24==-125)e=(c[c[e+20>>2]>>2]|0)+4|0;else{if(f<<24>>24==-88)f=d[e+38>>0]|0;else f=f&255;switch((f&255)<<24>>24){case 36:{k=15;break a}case -94:case -92:{k=26;break a}case -86:break;default:break a}e=(c[c[(c[e+12>>2]|0)+20>>2]>>2]|0)+4+((b[e+32>>1]|0)*20|0)|0}e=c[e>>2]|0}if((k|0)==15){f=c[e+8>>2]|0;g=a[f>>0]|0;if(!(g<<24>>24)){k=67;return k|0}h=67;i=0;while(1){i=i<<8|d[208+(g&255)>>0];f=f+1|0;b:do if((i|0)<1685026146){if((i|0)<1667785074){switch(i|0){case 1651273570:break;default:{k=24;break b}}switch(h<<24>>24){case 69:case 67:{j=65;break b}default:{k=23;break b}}}if((i|0)<1668050786)switch(i|0){case 1667785074:{j=66;break b}default:{k=24;break b}}else switch(i|0){case 1668050786:{j=66;break b}default:{k=24;break b}}}else{if((i|0)>=1919246700){if((i|0)>=1952807028)switch(i|0){case 1952807028:{j=66;break b}default:{k=24;break b}}switch(i|0){case 1919246700:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}else{k=23;break}}if((i|0)<1718382433){switch(i|0){case 1685026146:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}else{switch(i|0){case 1718382433:break;default:{k=24;break b}}if(h<<24>>24==67){j=69;break}}j=h}while(0);if((k|0)==23){k=0;j=h}else if((k|0)==24){k=0;if((i&16777215|0)==6909556){g=68;k=31;break}else j=h}g=a[f>>0]|0;if(!(g<<24>>24)){g=j;k=31;break}else h=j}if((k|0)==31)return g|0}else if((k|0)==26){f=c[e+44>>2]|0;if(f|0){e=b[e+32>>1]|0;if(e<<16>>16<=-1){k=68;return k|0}k=a[(c[f+4>>2]|0)+(e<<16>>16<<4)+13>>0]|0;return k|0}}else if((k|0)==31)return g|0;k=a[e+1>>0]|0;return k|0}function Yj(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;l=b+20|0;m=a[l>>0]|0;n=m<<24>>24==2;if(n?c[e+4>>2]&1|0:0){a[l>>0]=0;n=2;return n|0}a:do switch(a[e>>0]|0){case -95:{if((m&255)>3){n=0;return n|0}if(c[e+4>>2]&524288|0){n=0;return n|0}a[l>>0]=0;n=2;return n|0}case 59:{if(!(c[e+4>>2]&67108864)){g=c[e+8>>2]|0;k=a[g>>0]|0;j=d[208+(k&255)>>0]|0;f=j+-116|0;k=k<<24>>24==0;if(!(k|(f|0)!=0)){h=41806;i=g;do{i=i+1|0;h=h+1|0;o=a[i>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=j+-102|0;if(!(k|(f|0)!=0)){h=41811;do{g=g+1|0;h=h+1|0;o=a[g>>0]|0;f=(d[208+(o&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(f|0)!=0))}if(f|0){f=18;break a}}a[e>>0]=-97;o=1;return o|0}else f=18;break}case -92:case -93:case -94:{f=18;break}case -88:case -85:break;case -108:switch(m<<24>>24){case 5:{a[e>>0]=114;o=0;return o|0}case 4:{a[l>>0]=0;o=2;return o|0}default:{o=0;return o|0}}default:{o=0;return o|0}}while(0);do if((f|0)==18){if(c[e+4>>2]&8|0){if(n)break;else f=0;return f|0}if(m<<24>>24==3?(c[e+28>>2]|0)==(c[b+24>>2]|0):0){o=0;return o|0}}while(0);a[l>>0]=0;o=2;return o|0}function Zj(b,c){b=b|0;c=c|0;a[b+20>>0]=0;return 2}function _j(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;f=b+4|0;e=Xa[c[f>>2]&255](b,d)|0;a:do if(!e){p=d;while(1){if(c[p+4>>2]&8404992|0){g=0;d=56;break}d=c[p+12>>2]|0;if(d|0?_j(b,d)|0:0){g=2;d=56;break}e=c[p+16>>2]|0;if(!e){d=9;break}d=Xa[c[f>>2]&255](b,e)|0;if(!d)p=e;else{q=d;break a}}if((d|0)==9){k=p+4|0;b:do if(!(c[k>>2]&2048)){d=c[p+20>>2]|0;if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=d+4|0;d=i;while(1){e=c[f>>2]|0;if(e|0?_j(b,e)|0:0){g=2;break}if((d|0)>1){f=f+20|0;d=d+-1|0}else break b}return g|0}}else{e=c[p+20>>2]|0;if(e|0?(m=b+8|0,h=c[m>>2]|0,h|0):0){j=b+12|0;d=Xa[h&255](b,e)|0;c:do if(!d){d:while(1){if(ak(b,e)|0){g=2;d=56;break}d=c[e+32>>2]|0;f=c[d>>2]|0;if((f|0)>0){i=d+8|0;while(1){d=c[i+20>>2]|0;if(d|0?$j(b,d)|0:0){g=2;d=56;break d}if((a[i+37>>0]&4?(n=c[i+64>>2]|0,n|0):0)?(o=c[n>>2]|0,(o|0)>0):0){d=n+4|0;g=o;while(1){h=c[d>>2]|0;if(h|0?_j(b,h)|0:0){g=2;d=56;break d}if((g|0)>1){d=d+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}d=c[j>>2]|0;if(d|0)bb[d&127](b,e);e=c[e+52>>2]|0;if(!e)break b;d=Xa[c[m>>2]&255](b,e)|0;if(d|0){l=d;break c}}if((d|0)==56)return g|0}else l=d;while(0);if(l&2|0){s=2;return s|0}}}while(0);if(!(c[k>>2]&16777216)){s=0;return s|0}d=c[p+44>>2]|0;if(!d){s=0;return s|0}e:while(1){e=c[d+12>>2]|0;if(e|0?(s=c[e>>2]|0,(s|0)>0):0){e=e+4|0;f=s;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+8>>2]|0;if(e|0?(r=c[e>>2]|0,(r|0)>0):0){e=e+4|0;f=r;while(1){g=c[e>>2]|0;if(g|0?_j(b,g)|0:0){g=2;d=56;break e}if((f|0)>1){e=e+20|0;f=f+-1|0}else break}}e=c[d+36>>2]|0;if(e|0?_j(b,e)|0:0){g=2;d=56;break}d=c[d+32>>2]|0;if(!d){g=0;d=56;break}}if((d|0)==56)return g|0}else if((d|0)==56)return g|0}else q=e;while(0);s=q&2;return s|0}function $j(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;if(!d){m=0;return m|0}l=b+8|0;e=c[l>>2]|0;if(!e){m=0;return m|0}m=b+12|0;e=Xa[e&255](b,d)|0;a:do if(!e){b:while(1){if(ak(b,d)|0){e=2;d=23;break}e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){i=e+8|0;while(1){e=c[i+20>>2]|0;if(e|0?$j(b,e)|0:0){e=2;d=23;break b}if((a[i+37>>0]&4?(j=c[i+64>>2]|0,j|0):0)?(k=c[j>>2]|0,(k|0)>0):0){e=j+4|0;g=k;while(1){h=c[e>>2]|0;if(h|0?_j(b,h)|0:0){e=2;d=23;break b}if((g|0)>1){e=e+20|0;g=g+-1|0}else break}}if((f|0)>1){i=i+72|0;f=f+-1|0}else break}}e=c[m>>2]|0;if(e|0)bb[e&127](b,d);d=c[d+52>>2]|0;if(!d){e=0;d=23;break}e=Xa[c[l>>2]&255](b,d)|0;if(e|0)break a}if((d|0)==23)return e|0}while(0);m=e&2;return m|0}function ak(a,b){a=a|0;b=b|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=c[b>>2]|0;a:do if(e|0?(f=c[e>>2]|0,(f|0)>0):0){g=e+4|0;e=f;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break a}return e|0}while(0);e=c[b+36>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+40>>2]|0;b:do if(e|0?(h=c[e>>2]|0,(h|0)>0):0){g=e+4|0;e=h;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break b}return e|0}while(0);e=c[b+44>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[b+48>>2]|0;c:do if(e|0?(i=c[e>>2]|0,(i|0)>0):0){g=e+4|0;e=i;while(1){f=c[g>>2]|0;if(f|0?_j(a,f)|0:0){e=2;break}if((e|0)>1){g=g+20|0;e=e+-1|0}else break c}return e|0}while(0);e=c[b+60>>2]|0;if(e|0?_j(a,e)|0:0){k=2;return k|0}e=c[a>>2]|0;if(!e){k=0;return k|0}if((d[e+200>>0]|0)<=1){k=0;return k|0}e=c[b+72>>2]|0;if(!e){k=0;return k|0}d:while(1){f=c[e+12>>2]|0;if(f|0?(j=c[f>>2]|0,(j|0)>0):0){f=f+4|0;g=j;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+8>>2]|0;if(f|0?(k=c[f>>2]|0,(k|0)>0):0){f=f+4|0;g=k;while(1){h=c[f>>2]|0;if(h|0?_j(a,h)|0:0){e=2;f=44;break d}if((g|0)>1){f=f+20|0;g=g+-1|0}else break}}f=c[e+36>>2]|0;if(f|0?_j(a,f)|0:0){e=2;f=44;break}e=c[e+32>>2]|0;if(!e){e=0;f=44;break}}if((f|0)==44)return e|0;return 0}function bk(f,g,h,i){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;t=Ra;Ra=Ra+16|0;j=t;if((g|0)==0|(h|0)==0){i=(h|0)==(g|0)?0:2;Ra=t;return i|0}do if(f|0?(a[g>>0]|0)==-108:0){c[j>>2]=0;Wj(c[f>>2]|0,h,1,65,j)|0;s=c[j>>2]|0;if(!s)break;n=b[g+32>>1]|0;j=n<<16>>16;o=c[f+8>>2]|0;n=n<<16>>16>31;k=o+208|0;o=o+208|0;c[(n?o:k)>>2]=c[(n?o:k)>>2]|(n?-2147483648:1<>2]|0;a:do if((k|0)!=0?(o=c[k+100>>2]|0,q=j+-1|0,p=o+(q*40|0)|0,q=o+(q*40|0)+8|0,(b[q>>1]&1)==0):0){n=c[k>>2]|0;b:do if(!n){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;r=32;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){o=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=o>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){n=0;l=0;m=0;k=1;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;o=k}else o=k}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){n=0;l=0;m=0;k=1;break a}}else{do if((e[n+276>>1]|0)>=40){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=32;break b}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,40,0)|0;r=32}while(0);if((r|0)==32)if(!j){n=0;l=0;m=0;k=1;break}else o=j;j=o;k=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));m=o+8|0;b[m>>1]=1;c[o+32>>2]=n;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];j=b[m>>1]&-1025;b[m>>1]=j;j=j&65535;c:do if(j&18|0?(b[q>>1]&2048)==0:0){k=(j|4096)&65535;b[m>>1]=k;do if(j&16384){l=o+12|0;j=(c[o>>2]|0)+(c[l>>2]|0)|0;if((j|0)<1)if(!(k&16)){r=41;break}else j=1;if(Eg(o,j,1)|0)break c;q=o+16|0;gw((c[q>>2]|0)+(c[l>>2]|0)|0,0,c[o>>2]|0)|0;c[l>>2]=(c[l>>2]|0)+(c[o>>2]|0);j=b[m>>1]&-16897;b[m>>1]=j;if(!((c[o+24>>2]|0)!=0?(c[q>>2]|0)==(c[o+20>>2]|0):0))r=41}else r=41;while(0);if((r|0)==41){if(Jg(o)|0)break;j=b[m>>1]|0}b[m>>1]=j&-4097}while(0);j=b[m>>1]|0;do if((j&15|16)<<16>>16==18){if((j&514)==514){if(!((j&1)==0&(a[o+10>>0]|0)!=1))break}else if(j&1)break;Gg(o,1)|0}while(0);n=(Tg(o,s,0)|0)==0&1;l=o;m=o;k=0}else{n=0;l=0;m=0;k=1}while(0);if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j){if(c[j+480>>2]|0){Xd(j,s);break}q=s;if((c[j+304>>2]|0)>>>0<=q>>>0?(c[j+308>>2]|0)>>>0>q>>>0:0){q=j+300|0;c[s>>2]=c[q>>2];c[q>>2]=s}else r=59}else r=59;while(0);do if((r|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(!k){if(!((b[l+8>>1]&9216)==0?!(c[l+24>>2]|0):0))Cg(l);j=c[l+32>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}s=m;if((c[j+304>>2]|0)>>>0<=s>>>0?(c[j+308>>2]|0)>>>0>s>>>0:0){s=j+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;break}}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(n|0){i=0;Ra=t;return i|0}}while(0);o=g+4|0;p=c[o>>2]|0;n=h+4|0;k=c[n>>2]|0;q=k|p;if(q&1024|0){if(p&1024&k|0?(c[g+8>>2]|0)==(c[h+8>>2]|0):0){i=0;Ra=t;return i|0}i=2;Ra=t;return i|0}m=a[g>>0]|0;j=a[h>>0]|0;if(m<<24>>24==71?1:m<<24>>24!=j<<24>>24){do if(m<<24>>24==106)if((bk(f,c[g+12>>2]|0,h,i)|0)<2){i=1;Ra=t;return i|0}else{j=a[h>>0]|0;break}while(0);if(j<<24>>24==106?(bk(f,g,c[h+12>>2]|0,i)|0)<2:0){i=1;Ra=t;return i|0}i=2;Ra=t;return i|0}d:do switch(m<<24>>24){case -92:case -94:{j=p;break}default:{l=c[g+8>>2]|0;if(!l)j=p;else switch(m<<24>>24){case -95:{m=c[h+8>>2]|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(j|0){i=2;Ra=t;return i|0}if(!(p&16777216)){j=p;break d}if(!(ck(f,c[g+44>>2]|0,c[h+44>>2]|0)|0)){k=c[n>>2]|0;j=c[o>>2]|0;break d}else{i=2;Ra=t;return i|0}}case 106:{m=c[h+8>>2]|0;if(!m){i=2;Ra=t;return i|0}s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(j|0)!=0))do{l=l+1|0;m=m+1|0;s=a[l>>0]|0;j=(d[208+(s&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(j|0)!=0));if(!j){j=p;break d}else j=2;Ra=t;return j|0}case 114:{i=0;Ra=t;return i|0}default:{j=c[h+8>>2]|0;if(!j){j=p;break d}if(!(Bu(l,j)|0)){j=p;break d}else j=2;Ra=t;return j|0}}}}while(0);if((k^j)&2|0){i=2;Ra=t;return i|0}e:do if(!(q&16384)){if(q&2048|0){i=2;Ra=t;return i|0}if((q&8|0)==0?bk(f,c[g+12>>2]|0,c[h+12>>2]|0,i)|0:0){i=2;Ra=t;return i|0}if(bk(f,c[g+16>>2]|0,c[h+16>>2]|0,i)|0){i=2;Ra=t;return i|0}l=c[g+20>>2]|0;m=c[h+20>>2]|0;j=(l|0)==0;k=(m|0)==0;f:do if(!(j&k)){if(j|k){i=2;Ra=t;return i|0}j=c[l>>2]|0;if((j|0)!=(c[m>>2]|0)){i=2;Ra=t;return i|0}if((j|0)>0){j=0;while(1){if((a[l+4+(j*20|0)+12>>0]|0)!=(a[m+4+(j*20|0)+12>>0]|0)){j=2;r=125;break}if(bk(0,c[l+4+(j*20|0)>>2]|0,c[m+4+(j*20|0)>>2]|0,i)|0){j=2;r=125;break}j=j+1|0;if((j|0)>=(c[l>>2]|0))break f}if((r|0)==125){Ra=t;return j|0}}}while(0);switch(a[g>>0]|0){case -97:case 110:break e;default:{}}if(!(q&8192)){if((b[g+32>>1]|0)!=(b[h+32>>1]|0)){i=2;Ra=t;return i|0}g=c[g+28>>2]|0;h=c[h+28>>2]|0;if((g|0)!=(h|0)?(g|0)!=(i|0)|(h|0)>-1:0){i=2;Ra=t;return i|0}}}while(0);i=0;Ra=t;return i|0}function ck(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((a[d+16>>0]|0)!=(a[e+16>>0]|0)){e=1;return e|0}if((a[d+17>>0]|0)!=(a[e+17>>0]|0)){e=1;return e|0}if((a[d+18>>0]|0)!=(a[e+18>>0]|0)){e=1;return e|0}if((a[d+20>>0]|0)!=(a[e+20>>0]|0)){e=1;return e|0}if(bk(b,c[d+24>>2]|0,c[e+24>>2]|0,-1)|0){e=1;return e|0}if(bk(b,c[d+28>>2]|0,c[e+28>>2]|0,-1)|0){e=1;return e|0}g=c[d+8>>2]|0;h=c[e+8>>2]|0;b=(g|0)==0;f=(h|0)==0;a:do if(!(b&f)){if(b|f){e=1;return e|0}b=c[g>>2]|0;if((b|0)!=(c[h>>2]|0)){e=1;return e|0}if((b|0)>0){b=0;while(1){if((a[g+4+(b*20|0)+12>>0]|0)!=(a[h+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[g+4+(b*20|0)>>2]|0,c[h+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[g>>2]|0))break a}if((f|0)==23)return b|0}}while(0);h=c[d+12>>2]|0;g=c[e+12>>2]|0;b=(h|0)==0;f=(g|0)==0;if(b&f){e=0;return e|0}if(b|f){e=1;return e|0}b=c[h>>2]|0;if((b|0)!=(c[g>>2]|0)){e=1;return e|0}if((b|0)<=0){e=0;return e|0}b=0;while(1){if((a[h+4+(b*20|0)+12>>0]|0)!=(a[g+4+(b*20|0)+12>>0]|0)){b=1;f=23;break}if(bk(0,c[h+4+(b*20|0)>>2]|0,c[g+4+(b*20|0)>>2]|0,-1)|0){b=1;f=23;break}b=b+1|0;if((b|0)>=(c[h>>2]|0)){b=0;f=23;break}}if((f|0)==23)return b|0;return 0}function dk(b,d,f,g){b=b|0;d=d|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;t=Ra;Ra=Ra+16|0;r=t;s=(g|0)!=0;a:do if(s){m=134217728;q=c[g>>2]|0}else{j=ek(d,f)|0;k=((j|0)<0)<<31>>31;if(c[b+272>>2]|0){if(a[b+81>>0]|0){c[r>>2]=0;b=0;Ra=t;return b|0}}else{do if(!(0>>0|(0==(k|0)?(e[b+276>>1]|0)>>>0>>0:0))){h=b+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}h=b+296|0;i=c[h>>2]|0;if(!i){h=b+292|0;break}else{c[h>>2]=c[i>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=0;q=i;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}m=0;q=_d(b,j,k)|0}while(0);c[r>>2]=q;if(!q){b=q;Ra=t;return b|0}n=(f|0)==0;if((!n?(a[d>>0]|0)!=-86:0)?(c[d+4>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))j=(c[d+20>>2]|0)==0?16396:8220;else j=8220;else j=52;k=j&60;o=d+4|0;h=c[o>>2]|0;if((h&1024|0)==0?(l=c[d+8>>2]|0,(l|0)!=0):0)i=((Eu(l)|0)&1073741823)+1|0;else i=0;if(n){h=(h&16384|0)==0?((h&8192|0)==0?52:28):12;ew(q|0,d|0,h|0)|0;if(h>>>0<52)gw(q+h|0,0,52-h|0)|0}else ew(q|0,d|0,k|0)|0;l=q+4|0;h=j&24576|m|c[l>>2]&-134307841;c[l>>2]=h;if(i){h=q+k|0;c[q+8>>2]=h;ew(h|0,c[d+8>>2]|0,i|0)|0;h=c[l>>2]|0}i=c[o>>2]|0;do if(!((h|i)&8404992)){h=d+20|0;if(!(i&2048)){f=gk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}else{f=fk(b,c[h>>2]|0,f)|0;c[q+20>>2]=f;break}}while(0);j=c[l>>2]|0;if(!(j&16801792)){if(c[o>>2]&8404992|0){b=q;Ra=t;return b|0}h=d+12|0;if((a[q>>0]|0)==-86)c[q+12>>2]=c[h>>2];else{h=c[h>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+12>>2]=h}h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,0,0)|0;c[q+16>>2]=h;b=q;Ra=t;return b|0}if((!n?(a[d>>0]|0)!=-86:0)?(c[o>>2]&16777216|0)==0:0)if(!(c[d+12>>2]|0))i=(c[d+20>>2]|0)==0?12:28;else i=28;else i=52;h=c[o>>2]|0;if((h&1024|0)==0?(p=c[d+8>>2]|0,(p|0)!=0):0)i=((Eu(p)|0)&1073741823)+(i|1)|0;c[r>>2]=q+(i+7&-8);if(!(j&8404992)){h=c[d+12>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+12>>2]=h;h=c[d+16>>2]|0;if(!h)h=0;else h=dk(b,h,1,r)|0;c[q+16>>2]=h;h=c[o>>2]|0}if(h&16777216|0){b=hk(b,q,c[d+44>>2]|0)|0;c[q+44>>2]=b}if(!s){b=q;Ra=t;return b|0}c[g>>2]=c[r>>2];b=q;Ra=t;return b|0}function ek(b,d){b=b|0;d=d|0;var e=0,f=0;if(!b){d=0;return d|0}if(((d|0)!=0?(a[b>>0]|0)!=-86:0)?(c[b+4>>2]&16777216|0)==0:0)if(!(c[b+12>>2]|0))e=(c[b+20>>2]|0)==0?12:28;else e=28;else e=52;if((c[b+4>>2]&1024|0)==0?(f=c[b+8>>2]|0,(f|0)!=0):0)e=((Eu(f)|0)&1073741823)+(e|1)|0;e=e+7&-8;if(!(d&1)){d=e;return d|0}else{f=ek(c[b+12>>2]|0,d)|0;return f+e+(ek(c[b+16>>2]|0,d)|0)|0}return 0}function fk(d,f,g){d=d|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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+32|0;A=G+4|0;B=G;c[B>>2]=0;C=d+81|0;if(!f){F=0;Ra=G;return F|0}D=d+272|0;E=d+276|0;F=d+288|0;s=d+300|0;t=d+296|0;u=d+284|0;v=d+292|0;w=A+4|0;x=A+8|0;y=A+12|0;z=A+24|0;j=0;r=B;a:while(1){do if(c[D>>2]|0)if(!(a[C>>0]|0))q=11;else break a;else{if((e[E>>1]|0)>=76){h=c[s>>2]|0;if(h|0){c[s>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}h=c[t>>2]|0;if(!h)h=v;else{c[t>>2]=c[h>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else h=F;c[h>>2]=(c[h>>2]|0)+1;q=11}while(0);if((q|0)==11){q=0;h=_d(d,76,0)|0}if(!h)break;i=gk(d,c[f>>2]|0,g)|0;c[h>>2]=i;i=ik(d,c[f+32>>2]|0,g)|0;c[h+32>>2]=i;i=c[f+36>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+36>>2]=i;i=gk(d,c[f+40>>2]|0,g)|0;c[h+40>>2]=i;i=c[f+44>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+44>>2]=i;p=gk(d,c[f+48>>2]|0,g)|0;c[h+48>>2]=p;a[h+4>>0]=a[f+4>>0]|0;c[h+56>>2]=j;p=r;r=h+52|0;c[r>>2]=0;i=c[f+60>>2]|0;if(!i)i=0;else i=dk(d,i,g,0)|0;c[h+60>>2]=i;c[h+12>>2]=0;c[h+16>>2]=0;c[h+8>>2]=c[f+8>>2]&-33;c[h+24>>2]=-1;c[h+28>>2]=-1;b[h+6>>1]=b[f+6>>1]|0;o=c[f+64>>2]|0;b:do if(o){j=c[o>>2]<<4|8;do if(c[D>>2]|0)if(!(a[C>>0]|0))q=28;else{i=0;break b}else{if(!(0<0|(0==0?(e[E>>1]|0)>>>0>>0:0))){i=c[s>>2]|0;if(i|0){c[s>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}i=c[t>>2]|0;if(!i)i=v;else{c[t>>2]=c[i>>2];c[u>>2]=(c[u>>2]|0)+1;break}}else i=F;c[i>>2]=(c[i>>2]|0)+1;q=28}while(0);if((q|0)==28){q=0;i=_d(d,j,0)|0}if(i){gw(i|0,0,j|0)|0;c[i>>2]=c[o>>2];if((c[o>>2]|0)>0){n=i+8|0;m=0;do{k=fk(d,c[o+8+(m<<4)+8>>2]|0,0)|0;c[n+(m<<4)+8>>2]=k;k=gk(d,c[o+8+(m<<4)+4>>2]|0,0)|0;c[n+(m<<4)+4>>2]=k;k=c[o+8+(m<<4)>>2]|0;c:do if(k){l=(Eu(k)|0)+1|0;d:do if(c[D>>2]|0)if(!(a[C>>0]|0))q=41;else{j=0;break c}else{do if(0<0|(0==0?(e[E>>1]|0)>>>0>>0:0))j=F;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break d}while(0);c[j>>2]=(c[j>>2]|0)+1;q=41}while(0);if((q|0)==41){q=0;j=_d(d,l,0)|0}if(j)ew(j|0,k|0,l|0)|0;else j=0}else j=0;while(0);c[n+(m<<4)>>2]=j;m=m+1|0}while((m|0)<(c[o>>2]|0))}}else i=0}else i=0;while(0);c[h+64>>2]=i;c[h+68>>2]=0;i=c[f+72>>2]|0;c[A>>2]=0;if(!i)i=0;else{k=A;while(1){j=hk(d,0,i)|0;c[k>>2]=j;if(!j)break;i=c[i+32>>2]|0;if(!i)break;else k=j+32|0}i=c[A>>2]|0}c[h+72>>2]=i;if(c[f+68>>2]|0){c[w>>2]=137;c[x>>2]=138;c[y>>2]=0;c[A>>2]=0;c[z>>2]=h;$j(A,h)|0}c[h+20>>2]=c[f+20>>2];c[p>>2]=h;f=c[f+52>>2]|0;if(!f)break;else j=h}F=c[B>>2]|0;Ra=G;return F|0}function gk(d,f,g){d=d|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,x=0,y=0,z=0,A=0,B=0;if(!f){A=0;return A|0}A=(d|0)==0;if((!A?(h=f,(c[d+304>>2]|0)>>>0<=h>>>0):0)?(c[d+308>>2]|0)>>>0>h>>>0:0)j=e[d+276>>1]|0;else j=Wa[c[29352>>2]&127](f)|0;k=((j|0)<0)<<31>>31;z=d+272|0;a:do if(c[z>>2]|0)if(!(a[d+81>>0]|0))y=17;else{A=0;return A|0}else{do if(!(0>>0|(0==(k|0)?(e[d+276>>1]|0)>>>0>>0:0))){i=d+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}i=d+296|0;h=c[i>>2]|0;if(!h){h=d+292|0;break}else{c[i>>2]=c[h>>2];x=d+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;y=17}while(0);if((y|0)==17)h=_d(d,j,k)|0;if(!h){A=0;return A|0}c[h>>2]=c[f>>2];if((c[f>>2]|0)<=0){A=h;return A|0}r=d+276|0;s=d+81|0;t=d+288|0;u=d+300|0;v=d+296|0;w=d+284|0;x=d+292|0;o=h+4|0;i=0;p=0;q=f+4|0;while(1){j=c[q>>2]|0;do if(j){k=dk(d,j,g,0)|0;c[o>>2]=k;if(!((k|0)==0|(a[j>>0]|0)!=-86))if(!(b[k+32>>1]|0)){n=c[k+16>>2]|0;c[k+12>>2]=n;break}else{c[k+12>>2]=i;n=i;break}else n=i}else{c[o>>2]=0;n=i}while(0);l=c[q+4>>2]|0;b:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){k=Sv(m|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){i=0;break b}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=50;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break b}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=50;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=50}while(0);if((y|0)==50){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+4>>2]=i;l=c[q+8>>2]|0;c:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;do if(A){B=Sv(m|0,0,-1,-1)|0;k=L()|0;if(k>>>0>0|(k|0)==0&B>>>0>2147483390){i=0;break c}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;y=75;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){B=c[14978]|0;k=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break c}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[z>>2]|0){if(a[s>>0]|0){i=0;break c}}else{if(!(0<0|(0==0?(e[r>>1]|0)>>>0>>0:0))){i=c[u>>2]|0;if(i|0){c[u>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}i=c[v>>2]|0;if(!i)i=x;else{c[v>>2]=c[i>>2];c[w>>2]=(c[w>>2]|0)+1;y=75;break}}else i=t;c[i>>2]=(c[i>>2]|0)+1}i=_d(d,m,0)|0;y=75}while(0);if((y|0)==75){y=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[o+8>>2]=i;a[o+12>>0]=a[q+12>>0]|0;B=o+13|0;l=a[B>>0]|0;a[B>>0]=l&-2;m=q+13|0;l=a[m>>0]&2|l&-4;a[B>>0]=l;a[B>>0]=l&-10|a[m>>0]&8;c[o+16>>2]=c[q+16>>2];p=p+1|0;if((p|0)>=(c[f>>2]|0))break;else{o=o+20|0;i=n;q=q+20|0}}return h|0}function hk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(!f){d=0;return d|0}j=(b|0)==0;a:do if(j){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](92)|0;m=25;break}g=Wa[c[29356>>2]&127](92)|0;if((c[14985]|0)>>>0<92)c[14985]=92;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;k=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&k>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){d=0;return d|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){d=0;return d|0}}else{do if((e[b+276>>1]|0)>=92){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=25;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,92,0)|0;m=25}while(0);if((m|0)==25)if(!g){d=0;return d|0}else h=g;g=h;i=g+92|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(i|0));k=c[f>>2]|0;b:do if(!k)g=0;else{l=(Eu(k)|0)+1|0;c:do if(j){j=Sv(l|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;m=51;break}g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0>>0)c[14985]=l;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;j=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}i=Wa[c[29352>>2]&127](g)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0>>0:0))){i=b+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}i=b+296|0;g=c[i>>2]|0;if(!g){g=b+292|0;break}else{c[i>>2]=c[g>>2];m=b+284|0;c[m>>2]=(c[m>>2]|0)+1;m=51;break c}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(b,l,0)|0;m=51}while(0);if((m|0)==51)if(!g){g=0;break}ew(g|0,k|0,l|0)|0}while(0);c[h>>2]=g;g=c[f+36>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+36>>2]=g;c[h+40>>2]=c[f+40>>2];g=gk(b,c[f+8>>2]|0,0)|0;c[h+8>>2]=g;g=gk(b,c[f+12>>2]|0,0)|0;c[h+12>>2]=g;a[h+16>>0]=a[f+16>>0]|0;a[h+18>>0]=a[f+18>>0]|0;a[h+17>>0]=a[f+17>>0]|0;a[h+20>>0]=a[f+20>>0]|0;g=c[f+24>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+24>>2]=g;g=c[f+28>>2]|0;if(!g)g=0;else g=dk(b,g,0,0)|0;c[h+28>>2]=g;c[h+68>>2]=d;n=h;return n|0}function ik(b,d,f){b=b|0;d=d|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;if(!d){f=0;return f|0}i=c[d>>2]|0;v=(i|0)>0;i=(i*72|0)+8|0;j=v?i:80;i=v?((i|0)<0)<<31>>31:0;v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))u=12;else{f=0;return f|0}else{do if(!(i>>>0>0|((i|0)==0?j>>>0>(e[b+276>>1]|0)>>>0:0))){h=b+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}h=b+296|0;g=c[h>>2]|0;if(!g){g=b+292|0;break}else{c[h>>2]=c[g>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;break a}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;u=12}while(0);if((u|0)==12)g=_d(b,j,i)|0;if(!g){f=0;return f|0}t=c[d>>2]|0;c[g+4>>2]=t;c[g>>2]=t;if((c[d>>2]|0)<=0){f=g;return f|0}m=g+8|0;n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;t=b+292|0;l=0;do{c[m+(l*72|0)>>2]=c[d+8+(l*72|0)>>2];i=c[d+8+(l*72|0)+4>>2]|0;b:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=25;else{h=0;break b}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=25}while(0);if((u|0)==25){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+4>>2]=h;i=c[d+8+(l*72|0)+8>>2]|0;c:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=37;else{h=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=37}while(0);if((u|0)==37){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+8>>2]=h;i=c[d+8+(l*72|0)+12>>2]|0;d:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=49;else{h=0;break d}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=49}while(0);if((u|0)==49){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+12>>2]=h;c[m+(l*72|0)+36>>2]=c[d+8+(l*72|0)+36>>2];c[m+(l*72|0)+40>>2]=c[d+8+(l*72|0)+40>>2];c[m+(l*72|0)+24>>2]=c[d+8+(l*72|0)+24>>2];c[m+(l*72|0)+28>>2]=c[d+8+(l*72|0)+28>>2];k=m+(l*72|0)+37|0;h=a[k>>0]|0;if(h&2){i=c[d+8+(l*72|0)+64>>2]|0;e:do if(i){j=(Eu(i)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))u=62;else{h=0;break e}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0>>0:0))){h=c[q>>2]|0;if(h|0){c[q>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}h=c[r>>2]|0;if(!h)h=t;else{c[r>>2]=c[h>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else h=p;c[h>>2]=(c[h>>2]|0)+1;u=62}while(0);if((u|0)==62){u=0;h=_d(b,j,0)|0}if(h)ew(h|0,i|0,j|0)|0;else h=0}else h=0;while(0);c[m+(l*72|0)+64>>2]=h;h=a[k>>0]|0}c[m+(l*72|0)+68>>2]=c[d+8+(l*72|0)+68>>2];if(h&4){k=gk(b,c[d+8+(l*72|0)+64>>2]|0,f)|0;c[m+(l*72|0)+64>>2]=k}h=c[d+8+(l*72|0)+16>>2]|0;c[m+(l*72|0)+16>>2]=h;if(h|0){k=h+32|0;c[k>>2]=(c[k>>2]|0)+1}h=fk(b,c[d+8+(l*72|0)+20>>2]|0,f)|0;c[m+(l*72|0)+20>>2]=h;h=c[d+8+(l*72|0)+44>>2]|0;if(!h)h=0;else h=dk(b,h,f,0)|0;c[m+(l*72|0)+44>>2]=h;i=jk(b,c[d+8+(l*72|0)+48>>2]|0)|0;c[m+(l*72|0)+48>>2]=i;i=d+8+(l*72|0)+56|0;j=c[i+4>>2]|0;k=m+(l*72|0)+56|0;c[k>>2]=c[i>>2];c[k+4>>2]=j;l=l+1|0}while((l|0)<(c[d>>2]|0));return g|0}function jk(b,d){b=b|0;d=d|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;if(!d){v=0;return v|0}v=b+272|0;a:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=12;else{v=0;return v|0}else{do if((e[b+276>>1]|0)>=8){g=b+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}g=b+296|0;f=c[g>>2]|0;if(!f){f=b+292|0;break}else{c[g>>2]=c[f>>2];u=b+284|0;c[u>>2]=(c[u>>2]|0)+1;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=12}while(0);if((t|0)==12)f=_d(b,8,0)|0;if(!f){v=0;return v|0}u=d+4|0;c[f+4>>2]=c[u>>2];i=c[u>>2]<<3;b:do if(c[v>>2]|0)if(!(a[b+81>>0]|0))t=25;else c[f>>2]=0;else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0>>0:0))){g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}else{c[g>>2]=c[h>>2];t=b+284|0;c[t>>2]=(c[t>>2]|0)+1;t=26;break b}}else g=b+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;t=25}while(0);if((t|0)==25){h=_d(b,i,0)|0;t=26}if((t|0)==26?(c[f>>2]=h,h|0):0){if((c[u>>2]|0)<=0){v=f;return v|0}n=b+276|0;o=b+81|0;p=b+288|0;q=b+300|0;r=b+296|0;s=b+284|0;m=b+292|0;g=0;while(1){l=c[d>>2]|0;j=c[l+(g<<3)>>2]|0;c:do if(j){k=(Eu(j)|0)+1|0;do if(c[v>>2]|0)if(!(a[o>>0]|0))t=46;else{i=0;break c}else{if(!(0<0|(0==0?(e[n>>1]|0)>>>0>>0:0))){i=c[q>>2]|0;if(i|0){c[q>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}i=c[r>>2]|0;if(!i)i=m;else{c[r>>2]=c[i>>2];c[s>>2]=(c[s>>2]|0)+1;break}}else i=p;c[i>>2]=(c[i>>2]|0)+1;t=46}while(0);if((t|0)==46){t=0;i=_d(b,k,0)|0}if(i)ew(i|0,j|0,k|0)|0;else i=0}else i=0;while(0);c[h+(g<<3)>>2]=i;c[h+(g<<3)+4>>2]=c[l+(g<<3)+4>>2];g=g+1|0;if((g|0)>=(c[u>>2]|0))break;h=c[f>>2]|0}return f|0}if(c[b+480>>2]|0){Xd(b,f);v=0;return v|0}v=f;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[f>>2]=c[v>>2];c[v>>2]=f;v=0;return v|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=0;return v|0}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=0;return v|0}return 0}function kk(b,d){b=b|0;d=d|0;var e=0;if((a[d>>0]|0)!=-95)return 0;d=d+44|0;e=c[d>>2]|0;if(!e)return 0;b=b+24|0;c[e+32>>2]=c[(c[b>>2]|0)+68>>2];c[(c[b>>2]|0)+68>>2]=c[d>>2];return 0}function lk(a,b){a=a|0;b=b|0;return (c[a+24>>2]|0)!=(b|0)|0}function mk(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=10-(c[b+56>>2]|0)|0;l=c[b>>2]|0;m=b+64|0;j=c[m>>2]|0;k=n<<2;a:do if(!j){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))i=12;else{i=28;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0>>0:0))){g=l+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}g=l+296|0;h=c[g>>2]|0;if(!h){g=l+292|0;break}else{c[g>>2]=c[h>>2];l=l+284|0;c[l>>2]=(c[l>>2]|0)+1;break b}}else g=l+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;i=12}while(0);if((i|0)==12)h=_d(l,k,0)|0;c[m>>2]=h;g=b+60|0;if(h)i=30}else{g=j;i=l+304|0;if(((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0>>0:0)):0){h=j;g=b+60|0;i=30;break}h=Zd(l,j,k,0)|0;if(h|0){c[m>>2]=h;g=b+60|0;i=30;break}if(c[l+480>>2]|0){Xd(l,j);i=28;break}if((c[i>>2]|0)>>>0<=g>>>0?(c[l+308>>2]|0)>>>0>g>>>0:0){i=l+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;i=28;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);i=28;break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);i=28;break}}while(0);if((i|0)==28){c[m>>2]=0;g=b+60|0}else if((i|0)==30){c[g>>2]=n;c[h+(f<<2)>>2]=c[d+108>>2];return}c[g>>2]=0;return}function nk(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;g=h;if((a[b+199>>0]|0)!=2){Ra=h;return}c[g>>2]=f;f=Me(c[b>>2]|0,e,g)|0;i=c[b+8>>2]|0;g=c[i+108>>2]|0;e=b+212|0;Fj(i,171,g,c[e>>2]|0,0,f,-7)|0;if(d<<24>>24)c[e>>2]=g;Ra=h;return}function ok(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=Ra;Ra=Ra+32|0;i=l+16|0;h=l+8|0;k=l;g=c[d+12>>2]|0;e=a[g>>0]|0;if(e<<24>>24==-88)e=a[g+38>>0]|0;switch(e<<24>>24){case -87:{e=g+20|0;j=6;break}case -125:{e=c[g+20>>2]|0;j=6;break}default:f=1}if((j|0)==6)f=c[c[e>>2]>>2]|0;if(c[d+4>>2]&2048|0){e=c[c[c[d+20>>2]>>2]>>2]|0;if((f|0)==(e|0)){k=0;Ra=l;return k|0}c[k>>2]=e;c[k+4>>2]=f;cd(b,39001,k);k=1;Ra=l;return k|0}if((f|0)==1){k=0;Ra=l;return k|0}if(!(c[g+4>>2]&2048)){cd(b,38899,i);k=1;Ra=l;return k|0}else{c[h>>2]=c[c[c[g+20>>2]>>2]>>2];c[h+4>>2]=1;cd(b,39001,h);k=1;Ra=l;return k|0}return 0}function pk(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=c[d+12>>2]|0;f=a[n>>0]|0;if(f<<24>>24==-88)f=a[n+38>>0]|0;switch(f<<24>>24){case -87:{f=n+20|0;l=6;break}case -125:{f=c[n+20>>2]|0;l=6;break}default:m=1}if((l|0)==6)m=c[c[f>>2]>>2]|0;if(!(c[d+4>>2]&2048))k=0;else k=c[d+20>>2]|0;b=c[b>>2]|0;h=m+1|0;g=((h|0)<0)<<31>>31;a:do if(!b){j=Sv(h|0,g|0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){n=0;return n|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;l=33;break}b=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;d=59064;f=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&f>>>0>0){j=c[14978]|0;i=Tv(f|0,d|0,b|0,((b|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](b)|0;if(!f){n=0;return n|0}d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0){n=0;return n|0}}else{do if(!(0>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0>>0:0))){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}d=b+296|0;f=c[d>>2]|0;if(!f){f=b+292|0;break}else{c[d>>2]=c[f>>2];l=b+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break a}}else f=b+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(b,h,g)|0;l=33}while(0);if((l|0)==33)if(!f){n=0;return n|0}b:do if((m|0)>0){h=n+38|0;i=n+20|0;j=n+20|0;if(!k){g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=42;break}case -125:{d=c[j>>2]|0;l=42;break}default:d=n}do if((l|0)==42){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);k=Xj(d)|0;a[f+g>>0]=k;g=g+1|0;if((g|0)==(m|0))break b}}g=0;while(1){b=a[n>>0]|0;if(b<<24>>24==-88)d=a[h>>0]|0;else d=b;switch(d<<24>>24){case -87:{d=i;l=52;break}case -125:{d=c[j>>2]|0;l=52;break}default:d=n}do if((l|0)==52){l=0;if((c[c[d>>2]>>2]|0)<2)d=n;else{if(b<<24>>24!=-125?(a[h>>0]|0)!=-125:0){d=c[(c[i>>2]|0)+4+(g*20|0)>>2]|0;break}d=c[(c[c[j>>2]>>2]|0)+4+(g*20|0)>>2]|0}}while(0);d=Xj(d)|0;b=Xj(c[(c[k>>2]|0)+4+(g*20|0)>>2]|0)|0;if(d<<24>>24==0|b<<24>>24==0)d=(b|d)<<24>>24==0?65:(b&255)+(d&255)&255;else d=d<<24>>24>66|b<<24>>24>66?67:65;a[f+g>>0]=d;g=g+1|0;if((g|0)==(m|0))break b}}while(0);a[f+m>>0]=0;n=f;return n|0} function gm(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;m=c[j>>2]|0;l=c[m+12>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)k=a[l+38>>0]|0;switch(k<<24>>24){case -87:{k=l+20|0;v=6;break}case -125:{k=c[l+20>>2]|0;v=6;break}default:k=1}if((v|0)==6)k=c[c[k>>2]>>2]|0;r=(e[h+52>>1]|0)-i|0;r=(k|0)<(r|0)?k:r;s=h+28|0;if((r|0)<=1){v=1;return v|0}t=h+4|0;u=h+12|0;q=h+32|0;k=1;while(1){o=c[(c[l+20>>2]|0)+4+(k*20|0)>>2]|0;p=c[m+16>>2]|0;l=p+20|0;if(c[p+4>>2]&2048)l=c[l>>2]|0;n=c[(c[l>>2]|0)+4+(k*20|0)>>2]|0;if((a[o>>0]|0)!=-94){v=36;break}if((c[o+28>>2]|0)!=(g|0)){v=36;break}h=b[o+32>>1]|0;p=k+i|0;if(h<<16>>16!=(b[(c[t>>2]|0)+(p<<1)>>1]|0)){v=36;break}m=c[s>>2]|0;if((a[m+p>>0]|0)!=(a[m+i>>0]|0)){v=36;break}l=Xj(o)|0;m=Xj(n)|0;if(l<<24>>24==0|m<<24>>24==0)m=(m|l)<<24>>24==0?65:(m&255)+(l&255)&255;else m=l<<24>>24>66|m<<24>>24>66?67:65;if(h<<16>>16>-1)l=a[(c[(c[u>>2]|0)+4>>2]|0)+(h<<16>>16<<4)+13>>0]|0;else l=68;if(m<<24>>24!=l<<24>>24){v=36;break}do if(!(c[o+4>>2]&256)){if(n|0?c[n+4>>2]&256|0:0){l=Yi(f,n)|0;v=29;break}l=Yi(f,o)|0;if(!l){l=Yi(f,n)|0;v=29}}else{l=Yi(f,o)|0;v=29}while(0);if((v|0)==29){v=0;if(!l){v=36;break}}m=c[l>>2]|0;h=c[(c[q>>2]|0)+(p<<2)>>2]|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(p<<24>>24==0|(l|0)!=0))do{m=m+1|0;h=h+1|0;p=a[m>>0]|0;l=(d[208+(p&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(l|0)!=0));if(l|0){v=36;break}k=k+1|0;if((k|0)>=(r|0)){v=36;break}m=c[j>>2]|0;l=c[m+12>>2]|0}if((v|0)==36)return k|0;return 0}function hm(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,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,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;eb=Ra;Ra=Ra+96|0;$a=eb;ab=j&65535;if(j<<16>>16?b[(c[c[f>>2]>>2]|0)+76>>1]&64:0){db=0;Ra=eb;return db|0}Ea=c[g>>2]|0;j=Ea&65535;if(j>>>0>63){db=0;Ra=eb;return db|0}Fa=cw(1,0,j|0)|0;Fa=Sv(Fa|0,L()|0,-1,-1)|0;Ga=L()|0;i=i&65535;Ca=i&2048;Ba=(Ca|0)==0;Ca=Ca>>>11&65535|386;a:do if(!((Fa|0)==0&(Ga|0)==0)){ba=h+24|0;ca=f+4|0;da=(j|0)==0;ea=f+80|0;fa=Ca&65535;ga=$a+4|0;ha=$a+12|0;ia=$a+16|0;ja=$a+8|0;ka=$a+20|0;la=$a+24|0;ma=$a+28|0;na=$a+17|0;oa=$a+18|0;pa=$a+72|0;qa=$a+20|0;ra=$a+4|0;sa=$a+8|0;ta=$a+24|0;ua=f+488|0;xa=(j|0)!=0;ya=(i&192|0)==0;X=(i&64|0)==0;C=1;m=0;W=0;S=0;T=0;i=0;h=0;A=0;B=0;b:while(1){if(!W){U=i;V=h}else{V=m+8|0;U=c[V>>2]|i;V=c[V+4>>2]|h}if(W>>>0>>0){i=c[(c[ba>>2]|0)+(W<<2)>>2]|0;if(Ba){Na=i;za=10}else{r=C;s=i;q=B;p=A;o=S;n=T}}else{Na=k;za=10}if((za|0)==10){za=0;z=Na+36|0;i=c[z>>2]|0;P=Na+24|0;if(i&1024|0){za=11;break}Q=Na+30|0;b[Q>>1]=0;R=c[(c[ca>>2]|0)+8+((d[Na+16>>0]|0)*72|0)+40>>2]|0;if(da){o=A;p=B}else{v=~U;w=~V;x=Na+40|0;y=Na+48|0;u=0;h=A;m=B;do{s=cw(1,0,u|0)|0;t=L()|0;c:do if((s&h|0)==0&(t&m|0)==0){r=g+4+(u*20|0)|0;i=c[r>>2]|0;n=c[i+4>>2]|0;if(n&4096)do{if(!(n&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;n=c[i+4>>2]|0}while((n&4096|0)!=0);if((a[i>>0]|0)==-94?(c[i+28>>2]|0)==(R|0):0){q=i+32|0;i=b[q>>1]|0;c[$a>>2]=ea;c[ga>>2]=ea;c[ha>>2]=0;a[ia>>0]=0;c[ja>>2]=0;c[ka>>2]=fa;c[la>>2]=0;c[ma>>2]=R;a[na>>0]=1;a[oa>>0]=1;if(i<<16>>16!=-2?(b[pa>>1]=i,Qa=Tl($a)|0,Qa|0):0){o=0;p=Qa;while(1){n=p+32|0;i=c[n>>2]|0;n=c[n+4>>2]|0;if((i&v|0)==0&(n&w|0)==0){if((i|0)==0&(n|0)==0?(Sa=b[p+12>>1]|0,Sa&130):0){za=29;break}Ka=(o|0)==0?p:o}else Ka=o;i=Tl($a)|0;if(!i){za=33;break}else{o=Ka;p=i}}if((za|0)==29){za=0;Ha=p;Ta=Sa}else if((za|0)==33){za=0;if(!Ka)break;Ha=Ka;Ta=b[Ka+12>>1]|0}d:do if(Ta<<16>>16==1){i=b[x>>1]|0;if(!(i<<16>>16))break c;o=c[y>>2]|0;n=i&65535;i=0;while(1){if((Ha|0)==(c[o+(i<<2)>>2]|0))break d;i=i+1|0;if(i>>>0>=n>>>0)break c}}while(0);do if(Ta&130){if((b[q>>1]|0)<=-1)break;p=c[f>>2]|0;o=c[Ha>>2]|0;i=Yi(p,c[r>>2]|0)|0;if(!i)n=c[(c[p>>2]|0)+8>>2]|0;else n=i;i=Yi(p,o)|0;if(!i)i=c[(c[p>>2]|0)+8>>2]|0;n=c[n>>2]|0;o=c[i>>2]|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(i|0)!=0))do{n=n+1|0;o=o+1|0;O=a[n>>0]|0;i=(d[208+(O&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(i|0)!=0));if(i|0)break c}while(0);h=s|h;m=t|m;break}}}while(0);u=u+1|0}while((u|0)!=(j|0));i=c[z>>2]|0;o=h;p=m}do if(!(i&4096)){if(!(i&256)){m=c[Na+32>>2]|0;if(!m){bb=0;za=135;break b}O=m+55|0;if((d[O>>0]|d[O+1>>0]<<8)&4){bb=0;za=135;break b}h=b[m+52>>1]|0;i=(a[m+54>>0]|0)!=0&1;if(!(h<<16>>16)){La=i;Va=o;Wa=p;za=117;break}else{n=m;O=b[m+50>>1]|0;N=h&65535}}else{n=0;O=0;i=C;N=1}F=Na+42|0;G=(n|0)==0;H=Na+48|0;I=n+4|0;J=n+28|0;K=n+12|0;M=n+40|0;C=n+32|0;D=cw(1,0,W|0)|0;E=L()|0;h=0;y=0;A=0;B=0;z=o;x=p;e:while(1){o=e[P>>1]|0;q=B>>>0>>0;f:do if(q?B>>>0>=(e[F>>1]|0)>>>0:0){p=c[H>>2]|0;m=c[p+(B<<2)>>2]|0;w=b[m+12>>1]|0;n=w&65535;if((w&Ca)<<16>>16){Aa=h;Y=y;Z=A;$=(n&256|0)==0?i:0;aa=B+1|0;va=z;wa=x;break}if((n&1|0)!=0?(Ua=c[m>>2]|0,Oa=B+1|0,Oa>>>0>>0):0){m=Oa;while(1){if((c[c[p+(m<<2)>>2]>>2]|0)==(Ua|0)){Da=0;za=68;break f}m=m+1|0;if(m>>>0>=o>>>0){Da=1;za=68;break}}}else{Da=1;za=68}}else{Da=1;za=68}while(0);if((za|0)==68){za=0;if(!G){o=b[(c[I>>2]|0)+(B<<1)>>1]|0;m=a[(c[J>>2]|0)+B>>0]|0;n=c[K>>2]|0;o=o<<16>>16==(b[n+40>>1]|0)?-1:o<<16>>16;if(q|(i<<24>>24==0|(o|0)<0)){u=o;_=i}else{u=o;_=(a[(c[n+4>>2]|0)+(o<<4)+12>>0]|0)==0?0:i}}else{m=0;u=-1;_=i}if(!(xa&Da<<24>>24!=0)){za=114;break}s=(u|0)>-2;t=(u|0)==-1;i=0;n=1;g:while(1){v=cw(1,0,i|0)|0;w=L()|0;do if((v&z|0)==0&(w&x|0)==0){r=g+4+(i*20|0)|0;o=c[r>>2]|0;h:do if(!o)o=0;else while(1){p=c[o+4>>2]|0;if(!(p&4096))break h;if(!(p&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);n=ya?0:n;if(s){if((a[o>>0]|0)!=-94)break;if((c[o+28>>2]|0)!=(R|0))break;if((u|0)!=(b[o+32>>1]|0))break}else{p=c[(c[M>>2]|0)+4+(B*20|0)>>2]|0;i:do if(!o)o=0;else while(1){q=c[o+4>>2]|0;if(!(q&4096))break i;if(!(q&262144))o=o+12|0;else o=(c[o+20>>2]|0)+4|0;o=c[o>>2]|0;if(!o){o=0;break}}while(0);j:do if(!p)p=0;else while(1){q=c[p+4>>2]|0;if(!(q&4096))break j;if(!(q&262144))p=p+12|0;else p=(c[p+20>>2]|0)+4|0;p=c[p>>2]|0;if(!p){p=0;break}}while(0);if(bk(0,o,p,R)|0)break}if(t){n=-1;break g}p=c[f>>2]|0;o=Yi(p,c[r>>2]|0)|0;if(!o)o=c[(c[p>>2]|0)+8>>2]|0;p=c[o>>2]|0;q=c[(c[C>>2]|0)+(B<<2)>>2]|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(r<<24>>24==0|(o|0)!=0))do{p=p+1|0;q=q+1|0;r=a[p>>0]|0;o=(d[208+(r&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(o|0)!=0));if(!o){n=u;break g}}while(0);i=i+1|0;if(!(i>>>0>>0&n<<24>>24!=0)){za=114;break e}}o=B+1|0;b[Q>>1]=o;do if(X){if(h<<24>>24)if((m^y)<<24>>24==(a[g+4+(i*20|0)+12>>0]|0)){i=y;break}else{za=114;break e}i=a[g+4+(i*20|0)+12>>0]^m;if(!(i<<24>>24)){h=1;i=0;break}wa=l;Aa=c[wa+4>>2]|E;h=l;c[h>>2]=c[wa>>2]|D;c[h+4>>2]=Aa;h=1}else i=y;while(0);Aa=h;Y=i;Z=(n|0)==-1?1:A;$=_;aa=o;va=v|z;wa=w|x}if(aa>>>0>>0){h=Aa;y=Y;A=Z;B=aa;i=$;z=va;x=wa}else{Ja=Z;Pa=$;Xa=va;Ya=wa;break}}if((za|0)==114){za=0;Ja=A;Pa=(B|0)==0|B>>>0<(O&65535)>>>0?0:_;Xa=z;Ya=x}if(!(Ja<<24>>24)){La=Pa;Va=Xa;Wa=Ya;za=117}else{Ma=1;Za=Xa;_a=Ya}}else{La=C;Va=o;Wa=p;za=117}while(0);if((za|0)==117){za=0;if(!(La<<24>>24)){Ia=0;cb=Va;db=Wa;break a}else{Ma=La;Za=Va;_a=Wa}}v=Na+8|0;u=c[v>>2]|S;v=c[v+4>>2]|T;if(da){r=Ma;s=Na;q=_a;p=Za;o=u;n=v}else{s=~u;t=~v;r=0;q=Za;i=_a;while(1){o=cw(1,0,r|0)|0;p=L()|0;do if((o&q|0)==0&(p&i|0)==0){m=c[g+4+(r*20|0)>>2]|0;if(m){n=Pl(ua,m)|0;h=L()|0;if((n|0)==0&(h|0)==0){a[qa>>0]=1;c[ra>>2]=127;c[sa>>2]=128;c[ta>>2]=0;_j($a,m)|0;if(!(a[qa>>0]|0)){h=q;break}else{n=0;h=0}}}else{n=0;h=0}T=(n&s|0)==0&(h&t|0)==0;h=(T?o:0)|q;i=(T?p:0)|i}else h=q;while(0);r=r+1|0;if((r|0)==(j|0)){r=Ma;s=Na;q=i;p=h;o=u;n=v;break}else q=h}}}if(W>>>0>=ab>>>0|(q>>>0>Ga>>>0|(q|0)==(Ga|0)&p>>>0>=Fa>>>0|r<<24>>24==0)){Ia=r;cb=p;db=q;break a}else{C=r;m=s;W=W+1|0;S=o;T=n;i=U;h=V;A=p;B=q}}if((za|0)==11){db=(a[P+5>>0]|0)==0;Ia=C;cb=db?A:Fa;db=db?B:Ga;break}else if((za|0)==135){Ra=eb;return bb|0}}else{Ia=1;cb=0;db=0}while(0);if((cb|0)==(Fa|0)&(db|0)==(Ga|0)){db=Ea&255;Ra=eb;return db|0}if(Ia<<24>>24){db=-1;Ra=eb;return db|0}if(j>>>0<=1){db=0;Ra=eb;return db|0}while(1){i=j;j=j+-1|0;$a=cw(1,0,j|0)|0;$a=Sv($a|0,L()|0,-1,-1)|0;ab=L()|0;if(($a&cb|0)==($a|0)&(ab&db|0)==(ab|0))break;if((i|0)<=2){bb=0;za=135;break}}if((za|0)==135){Ra=eb;return bb|0}db=j&255;Ra=eb;return db|0}function im(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,o=0,p=0,q=0,r=0,s=0;do if(h|0){h=d+16|0;j=c[h>>2]|0;k=j+5|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;s=(c[d+4>>2]|0)+j|0;a[s>>0]=a[43977]|0;a[s+1>>0]=a[43978]|0;a[s+2>>0]=a[43979]|0;a[s+3>>0]=a[43980]|0;a[s+4>>0]=a[43981]|0;break}else{wb(d,43977,5);break}}while(0);s=(f|0)>1;do if(s){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=40;break}else{wb(d,44003,1);break}}else if((f|0)!=1){h=d+16|0;j=c[h>>2]|0;k=j+1|0;if(k>>>0<(c[d+8>>2]|0)>>>0){c[h>>2]=k;a[(c[d+4>>2]|0)+j>>0]=a[i>>0]|0;return}else{wb(d,i,1);return}}while(0);o=e+4|0;q=d+16|0;r=d+8|0;m=e+12|0;n=d+4|0;l=0;do{do if(l|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[n>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=b[(c[o>>2]|0)+(l+g<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;p=21;break}case -1:{h=38132;p=21;break}default:{h=c[(c[(c[m>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0;if(!h){e=0;h=0}else p=21}}if((p|0)==21){p=0;e=(Eu(h)|0)&1073741823}j=c[q>>2]|0;k=j+e|0;if(k>>>0<(c[r>>2]|0)>>>0){if(e|0){c[q>>2]=k;ew((c[n>>2]|0)+j|0,h|0,e|0)|0}}else wb(d,h,e);l=l+1|0}while((l|0)!=(f|0));h=c[q>>2]|0;j=h+1|0;k=j>>>0<(c[r>>2]|0)>>>0;do if(s){if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41}else wb(d,34066,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0}else wb(d,i,1);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=40;break}else{wb(d,44003,1);break}}else if(k){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=a[i>>0]|0;break}else{wb(d,i,1);break}while(0);e=d+4|0;k=0;do{do if(k|0){h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=44;break}else{wb(d,41685,1);break}}while(0);h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[e>>2]|0)+h>>0]=63}else wb(d,35133,1);k=k+1|0}while((k|0)!=(f|0));if(!s)return;h=c[q>>2]|0;j=h+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[q>>2]=j;a[(c[d+4>>2]|0)+h>>0]=41;return}else{wb(d,34066,1);return}}function jm(d,f,g,h,i,j){d=d|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,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,M=0;M=Ra;Ra=Ra+16|0;J=M;y=c[f>>2]|0;K=c[d+8>>2]|0;a:do switch(a[y>>0]|0){case 45:case 53:{j=Jj(d,c[y+16>>2]|0,j)|0;break}case 50:{k=K+108|0;i=c[k>>2]|0;if((c[K+112>>2]|0)>(i|0)){c[k>>2]=i+1;K=c[K+104>>2]|0;a[K+(i*20|0)>>0]=73;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=0;c[K+(i*20|0)+8>>2]=j;c[K+(i*20|0)+12>>2]=0;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break a}else{Di(K,73,0,j,0)|0;break a}}default:{D=c[g+64>>2]|0;H=D+36|0;if((c[H>>2]&1024|0)==0?(k=c[D+32>>2]|0,(k|0)!=0):0)i=(a[(c[k+28>>2]|0)+h>>0]|0)==0?i:(i|0)==0&1;G=(h|0)>0;b:do if(G){l=c[D+48>>2]|0;k=0;while(1){F=c[l+(k<<2)>>2]|0;if(F|0?(c[F>>2]|0)==(y|0):0)break;k=k+1|0;if((k|0)>=(h|0))break b}lm(g,f);g=j;Ra=M;return g|0}while(0);F=D+40|0;m=e[F>>1]|0;if((m|0)>(h|0)){n=c[D+48>>2]|0;k=0;l=h;do{k=k+((c[c[n+(l<<2)>>2]>>2]|0)==(y|0)&1)|0;l=l+1|0}while((l|0)<(m|0));C=k}else C=0;c[J>>2]=0;if((c[y+4>>2]&2048|0)!=0?(c[c[c[y+20>>2]>>2]>>2]|0)!=1:0){A=c[d>>2]|0;B=dk(A,y,0,0)|0;u=A+81|0;if(!(a[u>>0]|0)){s=B+20|0;q=c[c[s>>2]>>2]|0;t=B+12|0;r=c[(c[t>>2]|0)+20>>2]|0;m=b[F>>1]|0;if((m&65535|0)>(h|0)){p=D+48|0;k=0;o=h;l=0;do{n=c[(c[p>>2]|0)+(o<<2)>>2]|0;if((c[n>>2]|0)==(y|0)?(v=(c[n+24>>2]|0)+-1|0,w=q+4+(v*20|0)|0,x=c[w>>2]|0,(x|0)!=0):0){l=nj(c[d>>2]|0,l,x)|0;c[w>>2]=0;m=r+4+(v*20|0)|0;k=nj(c[d>>2]|0,k,c[m>>2]|0)|0;c[m>>2]=0;m=b[F>>1]|0}o=o+1|0}while((o|0)<(m&65535|0))}else{l=0;k=0}if(q|0)ri(A,q);if(r|0)ri(A,r);c[(c[t>>2]|0)+20>>2]=k;c[c[s>>2]>>2]=l;if(k|0?(c[k>>2]|0)==1:0){l=k+4|0;k=c[l>>2]|0;c[l>>2]=0;l=c[t>>2]|0;if(l|0)ni(A,l);c[t>>2]=k}l=c[(c[s>>2]|0)+48>>2]|0;if(l|0?(z=c[l>>2]|0,(z|0)>0):0){k=0;do{b[l+4+(k*20|0)+16>>1]=0;k=k+1|0}while((k|0)!=(z|0))}if(!(a[u>>0]|0)){m=c[d>>2]|0;n=C<<2;c:do if(!m){z=Sv(n|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390)k=0;else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;E=66;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=0;break}l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){E=67;break}c[14987]=l;E=67}}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){k=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];E=m+284|0;c[E>>2]=(c[E>>2]|0)+1;E=66;break c}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;E=66}while(0);if((E|0)==66)if(!k)k=0;else E=67;if((E|0)==67)gw(k|0,0,n|0)|0;m=qk(d,B,4,0,k,J)|0;n=c[J>>2]|0;c[(c[f>>2]|0)+28>>2]=n;l=k}else{l=0;m=5;n=0;k=0}}else{l=0;m=5;n=0;k=0}if(B|0)ni(A,B);y=c[f>>2]|0;B=k}else{m=qk(d,y,4,0,0,J)|0;l=0;n=c[J>>2]|0;B=0}x=(((m|0)==4?(i|0)==0&1:i)|0)!=0;k=x?32:36;z=K+108|0;i=c[z>>2]|0;A=K+112|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;w=c[K+104>>2]|0;a[w+(i*20|0)>>0]=k;b[w+(i*20|0)+2>>1]=0;c[w+(i*20|0)+4>>2]=n;c[w+(i*20|0)+8>>2]=0;c[w+(i*20|0)+12>>2]=0;c[w+(i*20|0)+16>>2]=0;a[w+(i*20|0)+1>>0]=0}else Di(K,k,n,0,0)|0;c[H>>2]=c[H>>2]|2048;t=g+56|0;k=c[t>>2]|0;if(!k){w=d+56|0;k=(c[w>>2]|0)+-1|0;c[w>>2]=k;c[g+16>>2]=k;k=c[t>>2]|0}q=k+C|0;c[t>>2]=q;r=c[d>>2]|0;s=g+60|0;i=c[s>>2]|0;q=q*20|0;d:do if(!i){e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))E=88;else{E=126;break d}else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0>>0:0))){n=r+300|0;i=c[n>>2]|0;if(i|0){c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}n=r+296|0;i=c[n>>2]|0;if(!i){i=r+292|0;break}else{c[n>>2]=c[i>>2];C=r+284|0;c[C>>2]=(c[C>>2]|0)+1;break e}}else i=r+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;E=88}while(0);if((E|0)==88)i=_d(r,q,0)|0;c[s>>2]=i;if(!i)E=127;else E=103}else{o=i;p=r+304|0;if(((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0)?!(0<0|(0==0?(e[r+276>>1]|0)>>>0>>0:0)):0){E=103;break}n=Zd(r,i,q,0)|0;if(n|0){c[s>>2]=n;i=n;E=103;break}if(c[r+480>>2]|0){Xd(r,i);E=126;break}if((c[p>>2]|0)>>>0<=o>>>0?(c[r+308>>2]|0)>>>0>o>>>0:0){E=r+300|0;c[i>>2]=c[E>>2];c[E>>2]=i;E=126;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);E=126;break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);E=126;break}}while(0);if((E|0)==103){n=b[F>>1]|0;if((n&65535|0)>(h|0)){v=D+48|0;w=j-h|0;s=(m|0)==1;t=(l|0)==0;u=K+104|0;r=x?4:5;o=0;m=i+(k*20|0)|0;q=h;i=n;while(1){if((c[c[(c[v>>2]|0)+(q<<2)>>2]>>2]|0)==(y|0)){p=w+q|0;do if(s){n=c[J>>2]|0;k=c[z>>2]|0;if((c[A>>2]|0)>(k|0)){c[z>>2]=k+1;i=c[u>>2]|0;a[i+(k*20|0)>>0]=-128;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=n;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=k;k=o;break}else{i=Di(K,128,n,p,0)|0;k=o;break}}else{if(t){k=o;n=0}else{k=o+1|0;n=c[l+(o<<2)>>2]|0}o=c[J>>2]|0;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=90;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=o;c[D+(i*20|0)+8>>2]=n;c[D+(i*20|0)+12>>2]=p;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0;n=o;break}else{i=Di(K,90,o,n,p)|0;n=o;break}}while(0);c[m+4>>2]=i;i=c[z>>2]|0;if((c[A>>2]|0)>(i|0)){c[z>>2]=i+1;D=c[u>>2]|0;a[D+(i*20|0)>>0]=50;b[D+(i*20|0)+2>>1]=0;c[D+(i*20|0)+4>>2]=p;c[D+(i*20|0)+8>>2]=0;c[D+(i*20|0)+12>>2]=0;c[D+(i*20|0)+16>>2]=0;a[D+(i*20|0)+1>>0]=0}else Di(K,50,p,0,0)|0;do if((q|0)==(h|0)){c[m>>2]=n;a[m+16>>0]=r;if(G?(I=c[H>>2]|0,(I&1024|0)==0):0){c[m+8>>2]=w;c[m+12>>2]=h;c[H>>2]=I|262144;break}c[m+12>>2]=0}else a[m+16>>0]=-86;while(0);m=m+20|0;i=b[F>>1]|0}else k=o;q=q+1|0;if((q|0)>=(i&65535|0))break;else o=k}}}else if((E|0)==126){c[s>>2]=0;E=127}if((E|0)==127)c[t>>2]=0;k=c[d>>2]|0;do if(B|0){if(k|0){if(c[k+480>>2]|0){Xd(k,B);break}K=B;if((c[k+304>>2]|0)>>>0<=K>>>0?(c[k+308>>2]|0)>>>0>K>>>0:0){K=k+300|0;c[B>>2]=c[K>>2];c[K>>2]=B;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{K=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}while(0)}}while(0);lm(g,f);g=j;Ra=M;return g|0}function km(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;if(!e){k=Jj(d,0,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}h=a[e>>0]|0;j=h<<24>>24==-88;if(j)h=a[e+38>>0]|0;switch(h<<24>>24){case -87:{i=e+20|0;q=7;break}case -125:{i=c[e+20>>2]|0;q=7;break}default:{}}if((q|0)==7?(c[c[i>>2]>>2]|0)>=2:0){if(c[e+4>>2]&2048|0){l=c[d+8>>2]|0;k=Qj(d,e)|0;h=g+-1|0;i=l+108|0;j=c[i>>2]|0;if((c[l+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[l+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=h;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(l,78,k,f,h)|0;return}}e=c[e+20>>2]|0;if((g|0)<=0)return;m=d+8|0;l=0;do{h=c[e+4+(l*20|0)>>2]|0;n=l+f|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(d,h,n)|0;q=21;break}k=c[m>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;k=c[k+104>>2]|0;a[k+(j*20|0)>>0]=78;b[k+(j*20|0)+2>>1]=0;c[k+(j*20|0)+4>>2]=h;c[k+(j*20|0)+8>>2]=n;c[k+(j*20|0)+12>>2]=0;c[k+(j*20|0)+16>>2]=0;a[k+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,n,0)|0;break}}else{p=Jj(d,0,n)|0;q=21}while(0);do if(((q|0)==21?(q=0,(p|0)!=(n|0)):0)?(o=c[m>>2]|0,o|0):0){h=o+108|0;i=c[h>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[h>>2]=i+1;k=c[o+104>>2]|0;a[k+(i*20|0)>>0]=79;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=p;c[k+(i*20|0)+8>>2]=n;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;break}else{Di(o,79,p,n,0)|0;break}}while(0);l=l+1|0}while((l|0)!=(g|0));return}if(j){k=c[d+8>>2]|0;h=c[e+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[k+104>>2]|0;a[d+(j*20|0)>>0]=78;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(k,78,h,f,0)|0;return}}k=Jj(d,e,f)|0;if((k|0)==(f|0))return;h=c[d+8>>2]|0;if(!h)return;i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;d=c[h+104>>2]|0;a[d+(j*20|0)>>0]=79;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=f;c[d+(j*20|0)+12>>2]=0;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;return}else{Di(h,79,k,f,0)|0;return}}function lm(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;h=e+10|0;g=b[h>>1]|0;if(g&4)return;q=d+72|0;if(!(c[d>>2]|0)){m=q;l=c[m>>2]|0;m=c[m+4>>2]|0;f=e;k=0;i=g;n=h;while(1){j=f+40|0;if(!((c[j>>2]&l|0)==0?(c[j+4>>2]&m|0)==0:0)){d=22;break}if((k|0)!=0?(o=i&65535,(o&1024|0)!=0):0)d=(o|512)&65535;else d=i|4;b[n>>1]=d;j=c[f+16>>2]|0;if((j|0)<0){d=22;break}d=c[(c[f+4>>2]|0)+20>>2]|0;i=d+(j*48|0)+14|0;n=(a[i>>0]|0)+-1<<24>>24;a[i>>0]=n;if(n<<24>>24){d=22;break}n=d+(j*48|0)+10|0;i=b[n>>1]|0;if(i&4){d=22;break}else{f=d+(j*48|0)|0;k=k+1|0}}if((d|0)==22)return}i=0;while(1){if(!(c[(c[e>>2]|0)+4>>2]&1)){d=22;break}o=q;n=e+40|0;if(!((c[n>>2]&c[o>>2]|0)==0?(c[n+4>>2]&c[o+4>>2]|0)==0:0)){d=22;break}if((i|0)!=0?(p=g&65535,(p&1024|0)!=0):0)d=(p|512)&65535;else d=g|4;b[h>>1]=d;f=c[e+16>>2]|0;if((f|0)<0){d=22;break}d=c[(c[e+4>>2]|0)+20>>2]|0;n=d+(f*48|0)+14|0;o=(a[n>>0]|0)+-1<<24>>24;a[n>>0]=o;if(o<<24>>24){d=22;break}h=d+(f*48|0)+10|0;g=b[h>>1]|0;if(g&4){d=22;break}else{e=d+(f*48|0)|0;i=i+1|0}}if((d|0)==22)return}function mm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;if((a[d>>0]|0)==44)do{mm(c[d+12>>2]|0,e,f);d=c[d+16>>2]|0}while((a[d>>0]|0)==44);i=f+12|0;if((c[i>>2]|0)<=0)return;f=c[f+20>>2]|0;g=0;while(1){h=f+10|0;if((b[h>>1]&4)==0?(bk(0,c[f>>2]|0,d,e)|0)==0:0)b[h>>1]=b[h>>1]|4;g=g+1|0;if((g|0)>=(c[i>>2]|0))break;else f=f+48|0}return}function nm(d,e){d=d|0;e=e|0;d=c[d+24>>2]|0;if(bk(0,e,c[d>>2]|0,c[d+4>>2]|0)|0){e=0;return e|0}a[e>>0]=-94;c[e+28>>2]=c[d+8>>2];b[e+32>>1]=c[d+12>>2];c[e+44>>2]=0;e=1;return e|0}function om(a){a=a|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=c[c[c[a>>2]>>2]>>2]|0;d=c[a+12>>2]|0;o=a+20|0;if((d|0)>0){p=(q|0)==0;i=q+480|0;j=q+304|0;k=q+308|0;l=q+300|0;h=c[o>>2]|0;while(1){g=d;d=d+-1|0;f=h+10|0;e=b[f>>1]|0;if((e&1)!=0?(m=c[h>>2]|0,(m|0)!=0):0){ni(q,m);e=b[f>>1]|0}e=e&65535;do if(!(e&16)){if(e&32|0?(n=c[h+28>>2]|0,om(n),n|0):0){if(!p){if(c[i>>2]|0){Xd(q,n);break}f=n;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[n>>2]=c[l>>2];c[l>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}}else{e=c[h+28>>2]|0;om(e);if(e|0){if(!p){if(c[i>>2]|0){Xd(q,e);break}f=e;if((c[j>>2]|0)>>>0<=f>>>0?(c[k>>2]|0)>>>0>f>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}}while(0);if((g|0)<=1)break;else h=h+48|0}}d=c[o>>2]|0;if((d|0)==(a+24|0))return;if(!d)return;if(q|0){if(c[q+480>>2]|0){Xd(q,d);return}a=d;if((c[q+304>>2]|0)>>>0<=a>>>0?(c[q+308>>2]|0)>>>0>a>>>0:0){q=q+300|0;c[d>>2]=c[q>>2];c[q>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{q=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function pm(d,f,g){d=d|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;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);p=d+19|0;i=a[p>>0]|0;if(!(i<<24>>24)){n=d+44|0;o=(c[n>>2]|0)+1|0;c[n>>2]=o}else{o=i+-1<<24>>24;a[p>>0]=o;o=c[d+148+((o&255)<<2)>>2]|0}m=h+108|0;i=c[m>>2]|0;n=h+112|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=70;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=0;c[l+(i*20|0)+8>>2]=o;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,70,0,o,0)|0;do if((g|0)>2){i=a[p>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[p>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=110;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=0;c[k+(i*20|0)+8>>2]=l;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else i=Di(h,110,0,l,0)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[m>>2]|0)+-1|0;j=c[h+104>>2]|0;k=j+(i*20|0)+1|0;if(!(a[k>>0]|0)){c[j+(i*20|0)+16>>2]=59952;a[k>>0]=-1;break}else{Ei(h,j+(i*20|0)|0,59952,-1);break}}while(0);i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;k=c[h+104>>2]|0;a[k+(i*20|0)>>0]=57;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=l;c[k+(i*20|0)+8>>2]=j;c[k+(i*20|0)+12>>2]=f;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(h,57,l,j,f)|0;i=c[m>>2]|0;if((i|0)>0)b[(c[h+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=83}else{i=c[m>>2]|0;j=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=15;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=f;c[l+(i*20|0)+8>>2]=j;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0;break}else{Di(h,15,f,j,0)|0;break}}while(0);j=c[18208+(g<<2)>>2]|0;i=c[m>>2]|0;k=i+2|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;l=c[h+104>>2]|0;a[l+(i*20|0)>>0]=j;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=o;c[l+(i*20|0)+8>>2]=k;c[l+(i*20|0)+12>>2]=f;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else Di(h,j,o,k,f)|0;i=c[d+116>>2]|0;a[((i|0)==0?d:i)+21>>0]=1;i=c[m>>2]|0;if((c[n>>2]|0)>(i|0)){c[m>>2]=i+1;f=c[h+104>>2]|0;a[f+(i*20|0)>>0]=69;b[f+(i*20|0)+2>>1]=0;c[f+(i*20|0)+4>>2]=1;c[f+(i*20|0)+8>>2]=2;c[f+(i*20|0)+12>>2]=0;c[f+(i*20|0)+16>>2]=0;a[f+(i*20|0)+1>>0]=0}else Di(h,69,1,2,0)|0;if(!(a[(c[h>>2]|0)+81>>0]|0)){n=c[18176+(g<<2)>>2]|0;f=c[h+104>>2]|0;g=(c[m>>2]|0)+-1|0;a[f+(g*20|0)+1>>0]=-1;c[f+(g*20|0)+16>>2]=n}if(!o)return;h=a[p>>0]|0;if((h&255)>=8)return;a[p>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=o;return}function qm(d,f,g){d=d|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;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))q=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];p=k+284|0;c[p>>2]=(c[p>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;q=15}while(0);if((q|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);if(!f)return;n=f+84|0;o=h+108|0;p=h+112|0;g=(g|0)==0;m=h+104|0;do{if(((c[n>>2]|0)==0?(c[(c[f+40>>2]|0)+4>>2]&4096|0)!=0:0)?(a[f+17>>0]|0)!=87:0){d=f+52|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,73,0,i,0)|0;i=f+56|0;j=c[i>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;l=c[m>>2]|0;a[l+(k*20|0)>>0]=32;b[l+(k*20|0)+2>>1]=0;c[l+(k*20|0)+4>>2]=j;c[l+(k*20|0)+8>>2]=0;c[l+(k*20|0)+12>>2]=0;c[l+(k*20|0)+16>>2]=0;a[l+(k*20|0)+1>>0]=0}else Di(h,32,j,0,0)|0;k=c[i>>2]|0;i=c[d>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=90;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=0;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,90,k,0,i)|0;j=c[o>>2]|0;if(!(a[(c[h>>2]|0)+81>>0]|0))i=(c[m>>2]|0)+((((j|0)<2?-1:-2)+j|0)*20|0)|0;else i=59308;c[i+8>>2]=j}else q=37;do if((q|0)==37?(q=0,(c[f+60>>2]|0)==0):0){i=c[(c[f+68>>2]|0)+20>>2]|0;if(!i)d=0;else d=c[i>>2]|0;l=f+48|0;k=c[l>>2]|0;if(g){i=c[f+52>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=-100;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=d;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(h,156,k,d,i)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;if(!(a[j+81>>0]|0)){d=c[m>>2]|0;l=(c[o>>2]|0)+-1|0;a[d+(l*20|0)+1>>0]=-8;c[d+(l*20|0)+16>>2]=i;break}if(!(c[i+4>>2]&16))break;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}i=c[o>>2]|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;j=c[m>>2]|0;a[j+(i*20|0)>>0]=-99;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=k;c[j+(i*20|0)+8>>2]=d;c[j+(i*20|0)+12>>2]=0;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0}else Di(h,157,k,d,0)|0;i=c[f+40>>2]|0;j=c[h>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}d=i;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[i>>2]=c[d>>2];c[d>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{k=c[m>>2]|0;d=(c[o>>2]|0)+-1|0;a[k+(d*20|0)+1>>0]=-8;c[k+(d*20|0)+16>>2]=i}while(0);i=c[l>>2]|0;j=c[f+52>>2]|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;d=c[m>>2]|0;a[d+(k*20|0)>>0]=78;b[d+(k*20|0)+2>>1]=0;c[d+(k*20|0)+4>>2]=i;c[d+(k*20|0)+8>>2]=j;c[d+(k*20|0)+12>>2]=0;c[d+(k*20|0)+16>>2]=0;a[d+(k*20|0)+1>>0]=0}else Di(h,78,i,j,0)|0;i=c[l>>2]|0;j=c[o>>2]|0;if((c[p>>2]|0)>(j|0)){c[o>>2]=j+1;l=c[m>>2]|0;a[l+(j*20|0)>>0]=73;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=i;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;break}else{Di(h,73,0,i,0)|0;break}}while(0);f=c[f+32>>2]|0}while((f|0)!=0);return}function rm(d){d=d|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;J=d+4|0;K=c[J>>2]|0;M=c[d+8>>2]|0;l=K+84|0;L=c[d>>2]|0;do if(!(c[l>>2]|0)){if(!K){j=M+108|0;h=M+112|0;break}s=L+56|0;t=L+19|0;u=L+44|0;j=M+108|0;h=M+112|0;v=M+104|0;w=K+44|0;x=M+12|0;r=K;do{o=(c[r+40>>2]|0)+32|0;f=c[o>>2]|0;if((f|0)==43457|(f|0)==43467){m=c[r+56>>2]|0;p=c[s>>2]|0;k=p+-1|0;c[s>>2]=k;f=a[t>>0]|0;if(!(f<<24>>24)){n=(c[u>>2]|0)+1|0;c[u>>2]=n}else{n=f+-1<<24>>24;a[t>>0]=n;n=c[L+148+((n&255)<<2)>>2]|0}l=r+52|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,73,0,f,0)|0;do if((c[o>>2]|0)!=43457){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=70;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=1;c[K+(f*20|0)+8>>2]=n;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0;break}else{Di(M,70,1,n,0)|0;break}}else{f=c[w>>2]|0;g=(c[r+76>>2]|0)+1|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=f;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,f,g,n)|0;pm(L,n,2)}while(0);f=r+60|0;g=c[f>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=100;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=g;c[K+(i*20|0)+12>>2]=n;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,100,n,g,n)|0;f=(c[f>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=54;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=f;c[K+(g*20|0)+8>>2]=k;c[K+(g*20|0)+12>>2]=n;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,54,f,k,n)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=m;c[K+(f*20|0)+8>>2]=0;c[K+(f*20|0)+12>>2]=n;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,m,0,n)|0;i=c[r+76>>2]|0;f=c[l>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=m;c[K+(g*20|0)+8>>2]=i;c[K+(g*20|0)+12>>2]=f;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,m,i,f)|0;g=c[x>>2]|0;f=0-p|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(n|0?(y=a[t>>0]|0,(y&255)<8):0){a[t>>0]=y+1<<24>>24;c[L+148+((y&255)<<2)>>2]=n}}else if((f|0)==40587|(f|0)==40592){k=c[c[(c[r+68>>2]|0)+20>>2]>>2]|0;n=c[r+56>>2]|0;q=c[s>>2]|0;m=q+-1|0;c[s>>2]=m;f=a[t>>0]|0;if(!(f<<24>>24)){p=(c[u>>2]|0)+1|0;c[u>>2]=p}else{p=f+-1<<24>>24;a[t>>0]=p;p=c[L+148+((p&255)<<2)>>2]|0}l=c[w>>2]|0;do if((k|0)<3){f=c[r+52>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=73;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=0;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,73,0,f,0)|0;break}}else{f=(c[r+76>>2]|0)+2|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=l;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0;break}else{Di(M,90,l,f,g)|0;break}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=-128;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=l;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,128,l,p,0)|0;f=(c[o>>2]|0)==40587;do if((k|0)<2){f=f?1:-1;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=83;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=p;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=0;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0;break}else{Di(M,83,p,f,0)|0;break}}else{k=f?100:101;f=a[t>>0]|0;if(!(f<<24>>24)){i=(c[u>>2]|0)+1|0;c[u>>2]=i}else{i=f+-1<<24>>24;a[t>>0]=i;i=c[L+148+((i&255)<<2)>>2]|0}f=(c[r+76>>2]|0)+1|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;K=c[v>>2]|0;a[K+(g*20|0)>>0]=90;b[K+(g*20|0)+2>>1]=0;c[K+(g*20|0)+4>>2]=l;c[K+(g*20|0)+8>>2]=f;c[K+(g*20|0)+12>>2]=i;c[K+(g*20|0)+16>>2]=0;a[K+(g*20|0)+1>>0]=0}else Di(M,90,l,f,i)|0;f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=k;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=i;c[K+(f*20|0)+8>>2]=p;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,k,i,p,p)|0;if(i|0?(z=a[t>>0]|0,(z&255)<8):0){a[t>>0]=z+1<<24>>24;c[L+148+((z&255)<<2)>>2]=i}}while(0);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=30;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=n;c[K+(f*20|0)+8>>2]=m;c[K+(f*20|0)+12>>2]=p;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,30,n,m,p)|0;f=c[r+76>>2]|0;g=c[r+52>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;K=c[v>>2]|0;a[K+(i*20|0)>>0]=90;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=f;c[K+(i*20|0)+12>>2]=g;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(M,90,n,f,g)|0;g=c[x>>2]|0;f=0-q|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,M,f);else c[(c[g+64>>2]|0)+(f<<2)>>2]=c[j>>2];if(p|0?(A=a[t>>0]|0,(A&255)<8):0){a[t>>0]=A+1<<24>>24;c[L+148+((A&255)<<2)>>2]=p}}r=c[r+32>>2]|0}while((r|0)!=0)}else{C=c[K+56>>2]|0;n=K+12|0;f=c[n>>2]|0;if(!f)E=0;else E=c[f>>2]|0;D=L+56|0;A=c[D>>2]|0;y=A+-1|0;m=A+-2|0;c[D>>2]=m;D=L+19|0;f=a[D>>0]|0;do if(f<<24>>24){B=f+-1<<24>>24;a[D>>0]=B;g=c[L+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24)){h=L+44|0;f=h;h=c[h>>2]|0;t=8;break}else{f=f+-2<<24>>24;a[D>>0]=f;B=c[L+148+((f&255)<<2)>>2]|0;break}}else{f=L+44|0;h=(c[f>>2]|0)+1|0;c[f>>2]=h;g=h;t=8}while(0);if((t|0)==8){B=h+1|0;c[f>>2]=B;f=0}z=(E|0)!=0;a:do if(z)if((E|0)!=1){j=L+32|0;h=c[j>>2]|0;k=L+28|0;f=c[k>>2]|0;if((f|0)<(E|0)){x=L+44|0;i=c[x>>2]|0;c[x>>2]=i+E;i=i+1|0}else{x=h+E|0;c[j>>2]=x;f=f-E|0;c[k>>2]=f;i=h;h=x}if((f|0)<(E|0)){w=L+44|0;x=c[w>>2]|0;c[w>>2]=x+E;w=i;x=x+1|0;break}else{c[j>>2]=h+E;c[k>>2]=f-E;w=i;x=h;break}}else{do if(f<<24>>24){x=f+-1<<24>>24;a[D>>0]=x;h=c[L+148+((x&255)<<2)>>2]|0;if(!(x<<24>>24)){i=L+44|0;f=i;i=c[i>>2]|0;break}else{x=f+-2<<24>>24;a[D>>0]=x;w=h;x=c[L+148+((x&255)<<2)>>2]|0;break a}}else{f=L+44|0;i=(c[f>>2]|0)+1|0;c[f>>2]=i;h=i}while(0);x=i+1|0;c[f>>2]=x;w=h;break}else{w=0;x=0}while(0);k=K+44|0;f=c[k>>2]|0;j=M+108|0;i=c[j>>2]|0;h=M+112|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;v=M+104|0;u=c[v>>2]|0;a[u+(i*20|0)>>0]=-128;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=f;c[u+(i*20|0)+8>>2]=g;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else{Di(M,128,f,g,0)|0;v=M+104|0}vm(d,c[k>>2]|0,w);f=K;do{i=c[f+48>>2]|0;k=c[j>>2]|0;if((c[h>>2]|0)>(k|0)){c[j>>2]=k+1;u=c[v>>2]|0;a[u+(k*20|0)>>0]=73;b[u+(k*20|0)+2>>1]=0;c[u+(k*20|0)+4>>2]=0;c[u+(k*20|0)+8>>2]=i;c[u+(k*20|0)+12>>2]=0;c[u+(k*20|0)+16>>2]=0;a[u+(k*20|0)+1>>0]=0}else Di(M,73,0,i,0)|0;f=c[f+32>>2]|0}while((f|0)!=0);f=c[l>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;u=c[v>>2]|0;a[u+(i*20|0)>>0]=24;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=C;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=f;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0}else Di(M,24,C,m,f)|0;u=c[j>>2]|0;if((c[h>>2]|0)>(u|0)){c[j>>2]=u+1;s=c[v>>2]|0;a[s+(u*20|0)>>0]=-128;b[s+(u*20|0)+2>>1]=0;c[s+(u*20|0)+4>>2]=C;c[s+(u*20|0)+8>>2]=B;c[s+(u*20|0)+12>>2]=0;c[s+(u*20|0)+16>>2]=0;a[s+(u*20|0)+1>>0]=0}else Di(M,128,C,B,0)|0;f=c[K+88>>2]|0;i=c[j>>2]|0;if((c[h>>2]|0)>(i|0)){c[j>>2]=i+1;s=c[v>>2]|0;a[s+(i*20|0)>>0]=54;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=f;c[s+(i*20|0)+8>>2]=m;c[s+(i*20|0)+12>>2]=B;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0}else Di(M,54,f,m,B)|0;s=K+20|0;f=a[s>>0]|0;b:do switch(f<<24>>24){case 82:{f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=53;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=g;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=B;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break b}else{Di(M,53,g,y,B)|0;break b}}case 66:break;default:{p=c[n>>2]|0;if(!p){k=0;l=0}else{q=c[L>>2]|0;r=c[p>>2]|0;m=r+1|0;n=m*5|0;k=n+20|0;l=q+272|0;c:do if(c[l>>2]|0)if(!(a[q+81>>0]|0))t=56;else{f=0;i=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){f=q+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}f=q+296|0;i=c[f>>2]|0;if(!i){f=q+292|0;break}else{c[f>>2]=c[i>>2];o=q+284|0;c[o>>2]=(c[o>>2]|0)+1;o=i;t=57;break c}}else f=q+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;t=56}while(0);if((t|0)==56){o=_d(q,k,0)|0;t=57}d:do if((t|0)==57){if(o|0){l=o+16|0;c[l>>2]=o+20+(m<<2);b[o+6>>1]=r;b[o+8>>1]=m;a[o+4>>0]=a[q+78>>0]|0;c[o+12>>2]=q;c[o>>2]=1;gw(o+24|0,0,n+-4|0)|0;if((r|0)<=0){f=o;i=o;break}i=p+4|0;k=0;while(1){f=Yi(L,c[i>>2]|0)|0;if(!f)f=c[(c[L>>2]|0)+8>>2]|0;c[o+20+(k<<2)>>2]=f;a[(c[l>>2]|0)+k>>0]=a[i+12>>0]|0;k=k+1|0;if((k|0)==(r|0)){f=o;i=o;break d}else i=i+20|0}}f=q+81|0;if((a[f>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[f>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[l>>2]=(c[l>>2]|0)+1;f=c[q+236>>2]|0;if(f){c[f+12>>2]=7;f=o;i=0}else{f=o;i=0}}else{f=o;i=0}}while(0);k=f;f=a[s>>0]|0;l=i}do if(f<<24>>24==91){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;m=c[v>>2]|0;a[m+(f*20|0)>>0]=53;b[m+(f*20|0)+2>>1]=0;c[m+(f*20|0)+4>>2]=g;c[m+(f*20|0)+8>>2]=0;c[m+(f*20|0)+12>>2]=B;c[m+(f*20|0)+16>>2]=0;a[m+(f*20|0)+1>>0]=0;m=f;break}else{m=Di(M,53,g,0,B)|0;break}}else m=0;while(0);do if(!k){f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=11;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=0;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=0;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,11,0,y,0)|0;break}}else{vm(d,C,x);f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;t=c[v>>2]|0;a[t+(f*20|0)>>0]=87;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=x;c[t+(f*20|0)+8>>2]=w;c[t+(f*20|0)+12>>2]=E;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0}else Di(M,87,x,w,E)|0;f=c[M>>2]|0;e:do if(a[f+81>>0]|0){if(!((l|0)==0|(c[f+480>>2]|0)!=0)?(t=(c[l>>2]|0)+-1|0,c[l>>2]=t,(t|0)==0):0){f=c[l+12>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,l);break e}i=l;if((c[f+304>>2]|0)>>>0>i>>>0)break;if((c[f+308>>2]|0)>>>0<=i>>>0)break;t=f+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{s=c[v>>2]|0;t=(c[j>>2]|0)+-1|0;a[s+(t*20|0)+1>>0]=-9;c[s+(t*20|0)+16>>2]=l}while(0);f=c[j>>2]|0;i=f+1|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=i;t=c[v>>2]|0;a[t+(f*20|0)>>0]=16;b[t+(f*20|0)+2>>1]=0;c[t+(f*20|0)+4>>2]=i;c[t+(f*20|0)+8>>2]=y;c[t+(f*20|0)+12>>2]=i;c[t+(f*20|0)+16>>2]=0;a[t+(f*20|0)+1>>0]=0;break}else{Di(M,16,i,y,i)|0;break}}while(0);if(m|0){i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))f=(c[v>>2]|0)+(((m|0)<0?i+-1|0:m)*20|0)|0;else f=59308;c[f+8>>2]=i}}}while(0);wm(L,K,C,0,c[d+20>>2]|0);i=c[M+12>>2]|0;f=0-A|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,M,f);else c[(c[i+64>>2]|0)+(f<<2)>>2]=c[j>>2];f=c[j>>2]|0;if((c[h>>2]|0)>(f|0)){c[j>>2]=f+1;K=c[v>>2]|0;a[K+(f*20|0)>>0]=5;b[K+(f*20|0)+2>>1]=0;c[K+(f*20|0)+4>>2]=C;c[K+(f*20|0)+8>>2]=u;c[K+(f*20|0)+12>>2]=0;c[K+(f*20|0)+16>>2]=0;a[K+(f*20|0)+1>>0]=0}else Di(M,5,C,u,0)|0;i=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0)){f=c[v>>2]|0;c[f+((((u|0)<1?i:u)+-1|0)*20|0)+8>>2]=i;f=f+(((u|0)<-1?i+-1|0:u+1|0)*20|0)|0}else{c[14829]=i;f=59308}c[f+8>>2]=i;if(B|0?(F=a[D>>0]|0,(F&255)<8):0){a[D>>0]=F+1<<24>>24;c[L+148+((F&255)<<2)>>2]=B}if(g|0?(G=a[D>>0]|0,(G&255)<8):0){a[D>>0]=G+1<<24>>24;c[L+148+((G&255)<<2)>>2]=g}do if(z){if((E|0)!=1){f=L+28|0;if((c[f>>2]|0)>=(E|0))break;c[f>>2]=E;c[L+32>>2]=x;break}if(x|0?(H=a[D>>0]|0,(H&255)<8):0){a[D>>0]=H+1<<24>>24;c[L+148+((H&255)<<2)>>2]=x}if(w|0?(I=a[D>>0]|0,(I&255)<8):0){a[D>>0]=I+1<<24>>24;c[L+148+((I&255)<<2)>>2]=w}}while(0);qm(c[d>>2]|0,c[J>>2]|0,1)}while(0);i=c[d+12>>2]|0;f=c[d+16>>2]|0;g=c[j>>2]|0;if((c[h>>2]|0)>(g|0)){c[j>>2]=g+1;M=c[M+104>>2]|0;a[M+(g*20|0)>>0]=12;b[M+(g*20|0)+2>>1]=0;c[M+(g*20|0)+4>>2]=i;c[M+(g*20|0)+8>>2]=f;c[M+(g*20|0)+12>>2]=0;c[M+(g*20|0)+16>>2]=0;a[M+(g*20|0)+1>>0]=0;return}else{Di(M,12,i,f,0)|0;return}}function sm(d,f,g,h,i){d=d|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;n=d+8|0;j=c[n>>2]|0;a:do if(!j){m=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))r=15;else{t=0;break a}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];t=m+284|0;c[t>>2]=(c[t>>2]|0)+1;break b}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=15}while(0);if((r|0)==15)k=_d(m,224,0)|0;if(!k)t=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[n>>2]=k;Di(k,61,0,1,0)|0;t=k}}else t=j;while(0);if(!f){j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;h=c[t+104>>2]|0;a[h+(k*20|0)>>0]=11;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=0;c[h+(k*20|0)+8>>2]=i;c[h+(k*20|0)+12>>2]=0;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;return}else{Di(t,11,0,i,0)|0;return}}s=c[f>>2]|0;o=c[d>>2]|0;m=s+1|0;n=m*5|0;l=n+20|0;p=o+272|0;c:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))r=31;else{l=0;k=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];q=o+284|0;c[q>>2]=(c[q>>2]|0)+1;q=k;r=32;break c}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;r=31}while(0);if((r|0)==31){q=_d(o,l,0)|0;r=32}if((r|0)==32){if(!q){j=o+81|0;if((a[j>>0]|0)==0?(a[o+82>>0]|0)==0:0){a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(j){c[j+12>>2]=7;l=0;k=1}else{l=0;k=1}}else{l=0;k=1}}else{c[q+16>>2]=q+20+(m<<2);b[q+6>>1]=s;b[q+8>>1]=m;a[q+4>>0]=a[o+78>>0]|0;c[q+12>>2]=o;c[q>>2]=1;gw(q+24|0,0,n+-4|0)|0;l=q;k=0}if((s|0)>0&(q|0)!=0){o=q+16|0;m=f+4|0;n=0;while(1){j=Yi(d,c[m>>2]|0)|0;if(!j)j=c[(c[d>>2]|0)+8>>2]|0;c[q+20+(n<<2)>>2]=j;a[(c[o>>2]|0)+n>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}m=t+108|0;j=c[m>>2]|0;n=t+112|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=j+1;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=87;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=h;c[d+(j*20|0)+8>>2]=g;c[d+(j*20|0)+12>>2]=s;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,87,h,g,s)|0;j=c[t>>2]|0;do if(a[j+81>>0]|0){if(!(k|(c[j+480>>2]|0)!=0)?(d=(c[l>>2]|0)+-1|0,c[l>>2]=d,(d|0)==0):0){j=c[l+12>>2]|0;if(j|0){if(c[j+480>>2]|0){Xd(j,l);break}d=l;if((c[j+304>>2]|0)>>>0<=d>>>0?(c[j+308>>2]|0)>>>0>d>>>0:0){d=j+300|0;c[l>>2]=c[d>>2];c[d>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else{f=c[t+104>>2]|0;d=(c[m>>2]|0)+-1|0;a[f+(d*20|0)+1>>0]=-9;c[f+(d*20|0)+16>>2]=l}while(0);j=c[m>>2]|0;k=j+1|0;if((c[n>>2]|0)>(j|0)){c[m>>2]=k;d=c[t+104>>2]|0;a[d+(j*20|0)>>0]=16;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=k;c[d+(j*20|0)+8>>2]=i;c[d+(j*20|0)+12>>2]=k;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0}else Di(t,16,k,i,k)|0;j=s+-1|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=78;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=g;c[i+(k*20|0)+8>>2]=h;c[i+(k*20|0)+12>>2]=j;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;return}else{Di(t,78,g,h,j)|0;return}}function tm(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,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;y=c[d>>2]|0;l=d+4|0;u=c[l>>2]|0;A=c[d+8>>2]|0;h=a[u+16>>0]|0;s=h<<24>>24!=76;m=y+56|0;z=c[m>>2]|0;i=z+-1|0;c[m>>2]=i;m=(e|0)==2;if(m?(a[u+17>>0]|0)==87:0){A=0;return A|0}do if((f|0)>0){k=A+108|0;j=c[k>>2]|0;if(h<<24>>24!=86)if((c[A+112>>2]|0)>(j|0)){c[k>>2]=j+1;n=c[A+104>>2]|0;a[n+(j*20|0)>>0]=47;b[n+(j*20|0)+2>>1]=0;c[n+(j*20|0)+4>>2]=f;c[n+(j*20|0)+8>>2]=0;c[n+(j*20|0)+12>>2]=1;c[n+(j*20|0)+16>>2]=0;a[n+(j*20|0)+1>>0]=0;n=0;f=j;r=14;break}else{n=0;f=Di(A,47,f,0,1)|0;r=14;break}if(!m){um(d,54,c[d+44>>2]|0,f,c[d+36>>2]|0,i);n=j;f=0;r=14;break}if((a[u+17>>0]|0)==83)um(d,55,c[d+36>>2]|0,f,c[d+28>>2]|0,i);else um(d,57,c[d+28>>2]|0,f,c[d+36>>2]|0,i);l=0;m=k;k=c[k>>2]|0;r=19}else{n=0;f=0;r=14}while(0);do if((r|0)==14){if((e|0)==1){if(!(c[u+84>>2]|0))qm(c[d>>2]|0,c[l>>2]|0,0);j=A+108|0;p=c[j>>2]|0;t=c[d+36>>2]|0;q=c[d+40>>2]|0;rm(d);v=f;break}o=A+108|0;k=c[o>>2]|0;if(!m){h=c[d+44>>2]|0;j=c[d+48>>2]|0;if(!(c[u+84>>2]|0)){wm(y,u,h,0,c[d+20>>2]|0);t=h;q=j;v=f;p=k;j=o;break}i=c[u+88>>2]|0;if((c[A+112>>2]|0)>(k|0)){c[o>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;q=j;v=f;p=k;j=o;break}else{Di(A,83,i,1,0)|0;t=h;q=j;v=f;p=k;j=o;break}}else{j=n;l=f;m=o;r=19}}while(0);do if((r|0)==19){h=c[d+28>>2]|0;f=c[d+32>>2]|0;i=c[u+84>>2]|0;if(!i){wm(y,u,h,1,c[d+20>>2]|0);t=h;n=j;q=f;v=l;p=k;j=m;break}if((c[A+112>>2]|0)>(k|0)){c[A+108>>2]=k+1;t=c[A+104>>2]|0;a[t+(k*20|0)>>0]=83;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=i;c[t+(k*20|0)+8>>2]=1;c[t+(k*20|0)+12>>2]=0;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=h;n=j;q=f;v=l;p=k;j=m;break}else{Di(A,83,i,1,0)|0;t=h;n=j;q=f;v=l;p=k;j=m;break}}while(0);if((c[d+24>>2]|0)==(e|0)){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;e=c[A+104>>2]|0;a[e+(i*20|0)>>0]=123;b[e+(i*20|0)+2>>1]=0;c[e+(i*20|0)+4>>2]=t;c[e+(i*20|0)+8>>2]=0;c[e+(i*20|0)+12>>2]=0;c[e+(i*20|0)+16>>2]=0;a[e+(i*20|0)+1>>0]=0}else Di(A,123,t,0,0)|0;h=c[h>>2]|0;if((h|0)>0)b[(c[A+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=2}h=c[j>>2]|0;do if(!g){h=(s?2:1)+h|0;f=A+108|0;i=c[f>>2]|0;k=A+112|0;if((c[k>>2]|0)>(i|0)){c[f>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;if(s){j=c[f>>2]|0;if((c[k>>2]|0)>(j|0)){c[f>>2]=j+1;i=c[A+104>>2]|0;a[i+(j*20|0)>>0]=11;i=i+(j*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0));f=0;r=50;break}else{f=0;j=Di(A,11,0,0,0)|0;r=50;break}}else{f=0;j=0}}else{h=h+2|0;j=A+108|0;i=c[j>>2]|0;f=A+112|0;if((c[f>>2]|0)>(i|0)){c[j>>2]=i+1;g=c[A+104>>2]|0;a[g+(i*20|0)>>0]=5;b[g+(i*20|0)+2>>1]=0;c[g+(i*20|0)+4>>2]=t;c[g+(i*20|0)+8>>2]=h;c[g+(i*20|0)+12>>2]=0;c[g+(i*20|0)+16>>2]=0;a[g+(i*20|0)+1>>0]=0}else Di(A,5,t,h,0)|0;h=c[j>>2]|0;if((c[f>>2]|0)>(h|0)){c[j>>2]=h+1;i=c[A+104>>2]|0;a[i+(h*20|0)>>0]=11;i=i+(h*20|0)+1|0;f=i+19|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(f|0))}else h=Di(A,11,0,0,0)|0;if(s){f=h;j=0;r=50}else{f=h;j=0}}while(0);do if((r|0)==50){o=u+12|0;h=c[o>>2]|0;a:do if(!h){k=0;i=0}else{i=c[h>>2]|0;switch(i|0){case 0:{k=i;break a}case 1:{h=y+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){i=y+44|0;k=(c[i>>2]|0)+1|0;c[i>>2]=k;i=1;break a}else{k=i+-1<<24>>24;a[h>>0]=k;k=c[y+148+((k&255)<<2)>>2]|0;i=1;break a}}default:{h=y+32|0;k=c[h>>2]|0;l=y+28|0;m=c[l>>2]|0;if((m|0)<(i|0)){u=y+44|0;k=c[u>>2]|0;c[u>>2]=k+i;k=k+1|0;break a}else{c[h>>2]=k+i;c[l>>2]=m-i;break a}}}}while(0);vm(d,t,k);sm(y,c[o>>2]|0,k,q,p);if((i|0)!=1){h=y+28|0;if((c[h>>2]|0)>=(i|0))break;c[h>>2]=i;c[y+32>>2]=k;break}if((k|0)!=0?(w=y+19|0,x=a[w>>0]|0,(x&255)<8):0){a[w>>0]=x+1<<24>>24;c[y+148+((x&255)<<2)>>2]=k}}while(0);do if(n|0){h=A+108|0;i=c[h>>2]|0;if((c[A+112>>2]|0)>(i|0)){c[h>>2]=i+1;y=c[A+104>>2]|0;a[y+(i*20|0)>>0]=11;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=0;c[y+(i*20|0)+8>>2]=n;c[y+(i*20|0)+12>>2]=0;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0;break}else{Di(A,11,0,n,0)|0;break}}while(0);i=c[A+12>>2]|0;h=0-z|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,A,h);else c[(c[i+64>>2]|0)+(h<<2)>>2]=c[A+108>>2];if(j|0){i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((j|0)<0?i+-1|0:j)*20|0)|0;else h=59308;c[h+8>>2]=i}if(!v){A=f;return A|0}i=c[A+108>>2]|0;if(!(a[(c[A>>2]|0)+81>>0]|0))h=(c[A+104>>2]|0)+(((v|0)<0?i+-1|0:v)*20|0)|0;else h=59308;c[h+8>>2]=i;A=f;return A|0}function um(d,f,g,h,i,j){d=d|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,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0;w=c[d>>2]|0;o=w+8|0;k=c[o>>2]|0;a:do if(!k){n=c[w>>2]|0;if((c[w+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[w+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))p=15;else{t=0;break a}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];u=n+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;p=15}while(0);if((p|0)==15)l=_d(n,224,0)|0;if(!l)t=0;else{k=l+104|0;m=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(m|0));c[l>>2]=n;k=n+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=w;c[o>>2]=l;Di(l,61,0,1,0)|0;t=l}}else t=k;while(0);u=w+19|0;l=a[u>>0]|0;if(l<<24>>24){s=l+-1<<24>>24;a[u>>0]=s;k=c[w+148+((s&255)<<2)>>2]|0;if(!(s<<24>>24))p=23;else{s=l+-2<<24>>24;a[u>>0]=s;q=w+44|0;r=k;s=c[w+148+((s&255)<<2)>>2]|0;l=q;k=c[q>>2]|0}}else{p=w+44|0;k=(c[p>>2]|0)+1|0;c[p>>2]=k;p=23}if((p|0)==23){l=w+44|0;q=(c[l>>2]|0)+1|0;c[l>>2]=q;r=k;s=q;k=q}p=k+1|0;c[l>>2]=p;n=(a[(c[(c[d+4>>2]|0)+12>>2]|0)+16>>0]|0)==0;q=n?100:101;f=n?f:(f|0)==57?55:(f|0)==54?56:57;vm(d,g,r);vm(d,i,s);n=t+108|0;k=c[n>>2]|0;o=t+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=110;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=0;c[i+(k*20|0)+8>>2]=p;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,110,0,p,0)|0;do if(!(a[(c[t>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;l=c[t+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=59952;a[m>>0]=-1;break}else{Ei(t,l+(k*20|0)|0,59952,-1);break}}while(0);k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;i=c[t+104>>2]|0;a[i+(k*20|0)>>0]=57;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=p;c[i+(k*20|0)+8>>2]=0;c[i+(k*20|0)+12>>2]=r;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(t,57,p,0,r)|0;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[t+104>>2]|0;a[i+(l*20|0)>>0]=q;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=h;c[i+(l*20|0)+8>>2]=r;c[i+(l*20|0)+12>>2]=r;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0}else Di(t,q,h,r,r)|0;l=c[n>>2]|0;if(!(a[(c[t>>2]|0)+81>>0]|0))k=(c[t+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;h=c[t+104>>2]|0;a[h+(l*20|0)>>0]=f;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=s;c[h+(l*20|0)+8>>2]=j;c[h+(l*20|0)+12>>2]=r;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0}else Di(t,f,s,j,r)|0;k=c[n>>2]|0;if((k|0)>0)b[(c[t+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=128;if(r|0?(v=a[u>>0]|0,(v&255)<8):0){a[u>>0]=v+1<<24>>24;c[w+148+((v&255)<<2)>>2]=r}if(!s)return;k=a[u>>0]|0;if((k&255)>=8)return;a[u>>0]=k+1<<24>>24;c[w+148+((k&255)<<2)>>2]=s;return}function vm(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;g=c[d+4>>2]|0;o=c[g+12>>2]|0;if(!o)return;n=Ej(c[d>>2]|0)|0;d=c[g+8>>2]|0;if(!d)d=0;else d=c[d>>2]|0;g=d+(c[g+72>>2]|0)|0;if((c[o>>2]|0)<=0)return;h=n+108|0;i=n+112|0;j=n+104|0;d=0;do{k=g+d|0;l=d+f|0;m=c[h>>2]|0;if((c[i>>2]|0)>(m|0)){c[h>>2]=m+1;p=c[j>>2]|0;a[p+(m*20|0)>>0]=90;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=e;c[p+(m*20|0)+8>>2]=k;c[p+(m*20|0)+12>>2]=l;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0}else Di(n,90,e,k,l)|0;d=d+1|0}while((d|0)<(c[o>>2]|0));return}function wm(d,f,g,h,i){d=d|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;m=d+8|0;j=c[m>>2]|0;a:do if(!j){l=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))F=15;else{j=0;break a}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];E=l+284|0;c[E>>2]=(c[E>>2]|0)+1;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;F=15}while(0);if((F|0)==15)j=_d(l,224,0)|0;if(!j)j=0;else{n=j+104|0;o=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(o|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[m>>2]=j;Di(j,61,0,1,0)|0}}while(0);if(!f)return;t=f+84|0;u=j+108|0;v=j+112|0;w=f+44|0;x=j+104|0;y=1-h|0;z=(h|0)==0;A=d+19|0;B=z?154:153;C=d+44|0;D=B&255;E=i+1|0;s=f;do{r=c[s+40>>2]|0;q=s+68|0;k=c[(c[q>>2]|0)+20>>2]|0;if(k){o=c[k>>2]|0;if((o|0)>0){f=r+32|0;p=s+76|0;n=0;do{do if((n|0)==1?(c[f>>2]|0)==43457:0){k=c[w>>2]|0;l=(c[p>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=k;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=E;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,k,l,E)|0;break}}else F=27;while(0);do if((F|0)==27){F=0;k=(c[p>>2]|0)+n|0;l=n+i|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=90;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=g;c[H+(m*20|0)+8>>2]=k;c[H+(m*20|0)+12>>2]=l;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,90,g,k,l)|0;break}}while(0);n=n+1|0}while((n|0)!=(o|0));p=o}else p=o}else p=0;if(((c[t>>2]|0)==0?(c[r+4>>2]&4096|0)!=0:0)?(a[s+17>>0]|0)!=87:0){k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=50;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=i;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=0;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,50,i,0,0)|0;do if(z){o=s+60|0;l=(c[o>>2]|0)+1|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=83;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=1;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,83,l,1,0)|0;l=c[o>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=79;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=i;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,79,i,l,0)|0;l=c[o>>2]|0;m=l+2|0;n=c[u>>2]|0;if((c[v>>2]|0)>(n|0)){c[u>>2]=n+1;H=c[x>>2]|0;a[H+(n*20|0)>>0]=92;b[H+(n*20|0)+2>>1]=0;c[H+(n*20|0)+4>>2]=l;c[H+(n*20|0)+8>>2]=2;c[H+(n*20|0)+12>>2]=m;c[H+(n*20|0)+16>>2]=0;a[H+(n*20|0)+1>>0]=0}else Di(j,92,l,2,m)|0;n=c[s+56>>2]|0;l=(c[o>>2]|0)+2|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=-124;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=n;c[H+(m*20|0)+8>>2]=l;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0;break}else{Di(j,132,n,l,0)|0;break}}else{n=s+56|0;m=c[n>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=24;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=0;c[H+(l*20|0)+12>>2]=i;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else l=Di(j,24,m,0,i)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){H=c[x>>2]|0;a[H+(l*20|0)+1>>0]=-3;c[H+(l*20|0)+16>>2]=1}l=c[n>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;H=c[x>>2]|0;a[H+(m*20|0)>>0]=123;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=l;c[H+(m*20|0)+8>>2]=0;c[H+(m*20|0)+12>>2]=0;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else Di(j,123,l,0,0)|0;m=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+((((m|0)<2?-1:-2)+m|0)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0);l=c[u>>2]|0;if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l}else F=67;do if((F|0)==67){F=0;k=c[s+60>>2]|0;if(k|0){k=y+k|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=83;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=k;c[H+(l*20|0)+8>>2]=1;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;break}else{Di(j,83,k,1,0)|0;break}}if((c[r+16>>2]|0)!=110){if(c[s+36>>2]|0){k=a[A>>0]|0;if(!(k<<24>>24)){m=(c[C>>2]|0)+1|0;c[C>>2]=m}else{m=k+-1<<24>>24;a[A>>0]=m;m=c[d+148+((m&255)<<2)>>2]|0}k=(c[s+76>>2]|0)+p|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=90;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=g;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=m;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,90,g,k,m)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;H=c[x>>2]|0;a[H+(k*20|0)>>0]=20;b[H+(k*20|0)+2>>1]=0;c[H+(k*20|0)+4>>2]=m;c[H+(k*20|0)+8>>2]=0;c[H+(k*20|0)+12>>2]=1;c[H+(k*20|0)+16>>2]=0;a[H+(k*20|0)+1>>0]=0}else k=Di(j,20,m,0,1)|0;if((m|0)!=0?(G=a[A>>0]|0,(G&255)<8):0){a[A>>0]=G+1<<24>>24;c[d+148+((G&255)<<2)>>2]=m;f=k}else f=k}else f=0;do if(c[r+4>>2]&32|0){k=Yi(d,c[(c[(c[q>>2]|0)+20>>2]|0)+4>>2]|0)|0;if(!k)k=c[(c[d>>2]|0)+8>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;n=c[x>>2]|0;a[n+(l*20|0)>>0]=82;n=n+(l*20|0)+1|0;o=n+19|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(o|0))}else l=Di(j,82,0,0,0)|0;if(!(a[(c[j>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[u>>2]|0)+-1|0;m=c[x>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(j,m+(l*20|0)|0,k,-2);break}if(k|0){c[m+(l*20|0)+16>>2]=k;a[n>>0]=-2}}}while(0);k=c[s+48>>2]|0;l=c[u>>2]|0;if((c[v>>2]|0)>(l|0)){c[u>>2]=l+1;H=c[x>>2]|0;a[H+(l*20|0)>>0]=D;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=h;c[H+(l*20|0)+8>>2]=i;c[H+(l*20|0)+12>>2]=k;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0}else Di(j,B,h,i,k)|0;k=c[j>>2]|0;do if(a[k+81>>0]|0){if(c[r+4>>2]&16|0){if(k|0){if(c[k+480>>2]|0){Xd(k,r);break}H=r;if((c[k+304>>2]|0)>>>0<=H>>>0?(c[k+308>>2]|0)>>>0>H>>>0:0){H=k+300|0;c[r>>2]=c[H>>2];c[H>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{H=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}}else{q=c[x>>2]|0;H=(c[u>>2]|0)+-1|0;a[q+(H*20|0)+1>>0]=-8;c[q+(H*20|0)+16>>2]=r}while(0);l=c[u>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=p&255;if(f|0){if(!(a[(c[j>>2]|0)+81>>0]|0))k=(c[x>>2]|0)+(((f|0)<0?l+-1|0:f)*20|0)|0;else k=59308;c[k+8>>2]=l}}}while(0);s=c[s+32>>2]|0}while((s|0)!=0);return}function xm(a,b,c){a=a|0;b=b|0;c=c|0;return}function ym(d,e,f,g,h){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;m=c[d+8>>2]|0;n=d+19|0;i=a[n>>0]|0;if(!(i<<24>>24)){k=d+44|0;l=(c[k>>2]|0)+1|0;c[k>>2]=l}else{l=i+-1<<24>>24;a[n>>0]=l;l=c[d+148+((l&255)<<2)>>2]|0}k=m+108|0;i=c[k>>2]|0;j=m+112|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=29;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,29,e,f,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=92;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=l;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(m,92,h,g,l)|0;i=c[k>>2]|0;if((c[j>>2]|0)>(i|0)){c[k>>2]=i+1;o=c[m+104>>2]|0;a[o+(i*20|0)>>0]=-124;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=e;c[o+(i*20|0)+8>>2]=l;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else i=Di(m,132,e,l,h)|0;if(!(a[(c[m>>2]|0)+81>>0]|0)){o=c[m+104>>2]|0;a[o+(i*20|0)+1>>0]=-3;c[o+(i*20|0)+16>>2]=g}i=c[k>>2]|0;if((i|0)>0)b[(c[m+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16;if(!l)return;i=a[n>>0]|0;if((i&255)>=8)return;a[n>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=l;return}function zm(d,f,g,h,i,j,k){d=d|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,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;E=d+8|0;J=c[E>>2]|0;F=f+32|0;n=a[F>>0]&1;p=n<<24>>24==0;n=(n^1)&255;l=c[f>>2]|0;C=c[l>>2]|0;H=C+n+j|0;D=f+4|0;I=c[D>>2]|0;o=(k|0)==0;if(o){B=d+44|0;G=c[B>>2]|0;c[B>>2]=G+H;G=G+1|0}else G=h-k|0;k=c[g+16>>2]|0;if(!k)B=c[g+12>>2]|0;else B=k+1|0;z=d+56|0;y=(c[z>>2]|0)+-1|0;c[z>>2]=y;A=f+24|0;c[A>>2]=y;Oj(d,l,G,i,(i|0)==0?1:5);do if(p){k=c[f+8>>2]|0;l=G+C|0;i=J+108|0;m=c[i>>2]|0;if((c[J+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[J+104>>2]|0;a[y+(m*20|0)>>0]=120;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=k;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=0;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(J,120,k,l,0)|0;break}}while(0);do if((j|0)>0&o){l=G+C+n|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;y=c[k+104>>2]|0;a[y+(m*20|0)>>0]=77;b[y+(m*20|0)+2>>1]=0;c[y+(m*20|0)+4>>2]=h;c[y+(m*20|0)+8>>2]=l;c[y+(m*20|0)+12>>2]=j;c[y+(m*20|0)+16>>2]=0;a[y+(m*20|0)+1>>0]=0;break}else{Di(k,77,h,l,j)|0;break}}while(0);if((I|0)>0){l=c[D>>2]|0;n=c[E>>2]|0;w=d+44|0;o=(c[w>>2]|0)+1|0;c[w>>2]=o;k=c[f+36>>2]|0;if(k|0)Oj(d,c[g>>2]|0,c[k>>2]|0,0,a[k+4>>0]|0);m=l+G|0;k=H-l|0;l=n+108|0;i=c[l>>2]|0;if((c[n+112>>2]|0)>(i|0)){c[l>>2]=i+1;y=c[n+104>>2]|0;a[y+(i*20|0)>>0]=92;b[y+(i*20|0)+2>>1]=0;c[y+(i*20|0)+4>>2]=m;c[y+(i*20|0)+8>>2]=k;c[y+(i*20|0)+12>>2]=o;c[y+(i*20|0)+16>>2]=0;a[y+(i*20|0)+1>>0]=0}else Di(n,92,m,k,o)|0;v=c[w>>2]|0;y=v+1|0;n=c[D>>2]|0;c[w>>2]=n+v;do if(p){k=G+C|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=20;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,20,k,0,0)|0;v=m;break}}else{k=c[f+8>>2]|0;m=J+108|0;l=c[m>>2]|0;i=J+112|0;if((c[i>>2]|0)>(l|0)){c[m>>2]=l+1;u=c[J+104>>2]|0;a[u+(l*20|0)>>0]=115;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=0;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;v=m;break}else{u=Di(J,115,k,0,0)|0;v=m;break}}while(0);k=c[D>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[J+104>>2]|0;a[t+(l*20|0)>>0]=87;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=y;c[t+(l*20|0)+8>>2]=G;c[t+(l*20|0)+12>>2]=k;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else Di(J,87,y,G,k)|0;k=c[f+20>>2]|0;if((k|0)<0)k=(c[v>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;if(a[(c[d>>2]|0)+81>>0]|0)return;c[k+8>>2]=H-n;t=k+16|0;n=c[t>>2]|0;h=n+6|0;gw(c[n+16>>2]|0,0,e[h>>1]|0)|0;k=c[J>>2]|0;a:do if(!(a[k+81>>0]|0)){k=(c[v>>2]|0)+-1|0;l=c[J+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(J,l+(k*20|0)|0,n,-9);break}if(n|0){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9}}else if(!((n|0)==0|(c[k+480>>2]|0)!=0)?(s=(c[n>>2]|0)+-1|0,c[n>>2]=s,(s|0)==0):0){k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break a}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);r=c[f>>2]|0;q=c[d>>2]|0;s=c[r>>2]|0;p=s-I|0;n=p+((e[n+8>>1]|0)-(e[h>>1]|0))|0;h=n*5|0;m=h+20|0;j=q+272|0;b:do if(c[j>>2]|0)if(!(a[q+81>>0]|0))x=62;else k=0;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){l=q+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}l=q+296|0;k=c[l>>2]|0;if(!k){k=q+292|0;break}else{c[l>>2]=c[k>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;x=63;break b}}else k=q+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;x=62}while(0);if((x|0)==62){k=_d(q,m,0)|0;x=63}if((x|0)==63){do if(!k){l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[j>>2]=(c[j>>2]|0)+1;l=c[q+236>>2]|0;if(!l)break;c[l+12>>2]=7}}else{c[k+16>>2]=k+20+(n<<2);b[k+6>>1]=p;b[k+8>>1]=n;a[k+4>>0]=a[q+78>>0]|0;c[k+12>>2]=q;c[k>>2]=1;gw(k+24|0,0,h+-4|0)|0}while(0);if((s|0)>(I|0)&(k|0)!=0){h=k+16|0;m=r+4+(I*20|0)|0;n=I;while(1){l=Yi(d,c[m>>2]|0)|0;if(!l)l=c[(c[d>>2]|0)+8>>2]|0;x=n-I|0;c[k+20+(x<<2)>>2]=l;a[(c[h>>2]|0)+x>>0]=a[m+12>>0]|0;n=n+1|0;if((n|0)==(s|0))break;else m=m+20|0}}}c[t>>2]=k;n=c[v>>2]|0;k=n+1|0;if((c[i>>2]|0)>(n|0)){c[v>>2]=k;x=c[J+104>>2]|0;a[x+(n*20|0)>>0]=16;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=k;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=k;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0}else Di(J,16,k,0,k)|0;m=(c[z>>2]|0)+-1|0;c[z>>2]=m;c[f+16>>2]=m;l=(c[w>>2]|0)+1|0;c[w>>2]=l;c[f+12>>2]=l;k=c[v>>2]|0;if((c[i>>2]|0)>(k|0)){c[v>>2]=k+1;z=c[J+104>>2]|0;a[z+(k*20|0)>>0]=12;b[z+(k*20|0)+2>>1]=0;c[z+(k*20|0)+4>>2]=l;c[z+(k*20|0)+8>>2]=m;c[z+(k*20|0)+12>>2]=0;c[z+(k*20|0)+16>>2]=0;a[z+(k*20|0)+1>>0]=0}else Di(J,12,l,m,0)|0;k=c[f+8>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;z=c[J+104>>2]|0;a[z+(l*20|0)>>0]=-118;b[z+(l*20|0)+2>>1]=0;c[z+(l*20|0)+4>>2]=k;c[z+(l*20|0)+8>>2]=0;c[z+(l*20|0)+12>>2]=0;c[z+(l*20|0)+16>>2]=0;a[z+(l*20|0)+1>>0]=0}else Di(J,138,k,0,0)|0;do if(B|0){k=c[A>>2]|0;l=c[v>>2]|0;if((c[i>>2]|0)>(l|0)){c[v>>2]=l+1;A=c[J+104>>2]|0;a[A+(l*20|0)>>0]=20;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=B;c[A+(l*20|0)+8>>2]=k;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;break}else{Di(J,20,B,k,0)|0;break}}while(0);l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l;l=c[D>>2]|0;k=c[E>>2]|0;i=k+108|0;m=c[i>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[i>>2]=m+1;A=c[k+104>>2]|0;a[A+(m*20|0)>>0]=77;b[A+(m*20|0)+2>>1]=0;c[A+(m*20|0)+4>>2]=G;c[A+(m*20|0)+8>>2]=y;c[A+(m*20|0)+12>>2]=l;c[A+(m*20|0)+16>>2]=0;a[A+(m*20|0)+1>>0]=0}else Di(k,77,G,y,l)|0;l=c[v>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((n|0)<0?l+-1|0:n)*20|0)|0;else k=59308;c[k+8>>2]=l}else o=0;do if(B){m=c[f+8>>2]|0;i=J+108|0;k=c[i>>2]|0;l=k+4|0;n=J+112|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;A=c[J+104>>2]|0;a[A+(k*20|0)>>0]=48;b[A+(k*20|0)+2>>1]=0;c[A+(k*20|0)+4>>2]=B;c[A+(k*20|0)+8>>2]=l;c[A+(k*20|0)+12>>2]=0;c[A+(k*20|0)+16>>2]=0;a[A+(k*20|0)+1>>0]=0}else Di(J,48,B,l,0)|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=32;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=0;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else Di(J,32,m,0,0)|0;l=G+I|0;k=c[i>>2]|0;if((c[n>>2]|0)>(k|0)){c[i>>2]=k+1;B=c[J+104>>2]|0;a[B+(k*20|0)>>0]=37;b[B+(k*20|0)+2>>1]=0;c[B+(k*20|0)+4>>2]=m;c[B+(k*20|0)+8>>2]=0;c[B+(k*20|0)+12>>2]=l;c[B+(k*20|0)+16>>2]=0;a[B+(k*20|0)+1>>0]=0}else k=Di(J,37,m,0,l)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){B=c[J+104>>2]|0;a[B+(k*20|0)+1>>0]=-3;c[B+(k*20|0)+16>>2]=C-I}l=c[i>>2]|0;if((c[n>>2]|0)>(l|0)){c[i>>2]=l+1;C=c[J+104>>2]|0;a[C+(l*20|0)>>0]=123;b[C+(l*20|0)+2>>1]=0;c[C+(l*20|0)+4>>2]=m;c[C+(l*20|0)+8>>2]=0;c[C+(l*20|0)+12>>2]=0;c[C+(l*20|0)+16>>2]=0;a[C+(l*20|0)+1>>0]=0;break}else{Di(J,123,m,0,0)|0;break}}else k=0;while(0);do if(!o){i=c[D>>2]|0;h=c[E>>2]|0;l=d+44|0;o=(c[l>>2]|0)+1|0;c[l>>2]=o;l=c[f+36>>2]|0;if(l|0)Oj(d,c[g>>2]|0,c[l>>2]|0,0,a[l+4>>0]|0);n=i+G|0;l=H-i|0;i=h+108|0;m=c[i>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[i>>2]=m+1;g=c[h+104>>2]|0;a[g+(m*20|0)>>0]=92;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=n;c[g+(m*20|0)+8>>2]=l;c[g+(m*20|0)+12>>2]=o;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0;break}else{Di(h,92,n,l,o)|0;break}}while(0);m=132-(a[F>>0]&1)|0;n=c[f+8>>2]|0;i=G+I|0;h=J+108|0;l=c[h>>2]|0;if((c[J+112>>2]|0)>(l|0)){c[h>>2]=l+1;G=c[J+104>>2]|0;a[G+(l*20|0)>>0]=m;b[G+(l*20|0)+2>>1]=0;c[G+(l*20|0)+4>>2]=n;c[G+(l*20|0)+8>>2]=o;c[G+(l*20|0)+12>>2]=i;c[G+(l*20|0)+16>>2]=0;a[G+(l*20|0)+1>>0]=0}else l=Di(J,m,n,o,i)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){G=c[J+104>>2]|0;a[G+(l*20|0)+1>>0]=-3;c[G+(l*20|0)+16>>2]=H-I}if(!k)return;l=c[f+28>>2]|0;if(!l){l=c[h>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;return}if((k|0)<0)k=(c[h>>2]|0)+-1|0;if(!(a[(c[J>>2]|0)+81>>0]|0))k=(c[J+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+8>>2]=l;return}function Am(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=Ra;Ra=Ra+64|0;l=m;if((a[d>>0]|0)==44){l=0;Ra=m;return l|0}e=c[b+24>>2]|0;j=c[b>>2]|0;i=c[e+40>>2]|0;k=l+20|0;a[k>>0]=1;c[l+4>>2]=149;c[l+8>>2]=0;c[l+24>>2]=i;c[l>>2]=j;_j(l,d)|0;if(!(a[k>>0]|0)){l=1;Ra=m;return l|0}j=c[c[b>>2]>>2]|0;k=oj(j,147,17144,0)|0;if(!k){l=1;Ra=m;return l|0}e=e+36|0;f=c[e>>2]|0;g=l;h=k;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=k;h=d;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));g=d;h=l;i=g+52|0;do{c[g>>2]=c[h>>2];g=g+4|0;h=h+4|0}while((g|0)<(i|0));l=Xk(j,f,k)|0;c[e>>2]=l;a[b+20>>0]=1;l=1;Ra=m;return l|0}function Bm(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[b+24>>2]|0;a:do if((c[h>>2]|0)>0){g=0;while(1){e=c[h+4+(g*20|0)>>2]|0;if((bk(0,d,e,-1)|0)<2){f=c[b>>2]|0;e=Yi(f,e)|0;if(!e){e=c[(c[f>>2]|0)+8>>2]|0;if(!e){e=1;f=12;break}}if((c[e+12>>2]|0)==78?(c[e+8>>2]|0)==0:0){e=1;f=12;break}}g=g+1|0;if((g|0)>=(c[h>>2]|0))break a}if((f|0)==12)return e|0}while(0);if(!(c[d+4>>2]&2048)){d=Yj(b,d)|0;return d|0}else{a[b+20>>0]=0;d=2;return d|0}return 0}function Cm(f,g){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;h=c[f+24>>2]|0;s=c[h>>2]|0;j=c[h+4>>2]|0;t=c[h+8>>2]|0;switch(a[g>>0]|0){case -94:case -92:{if(!j){t=1;return t|0}i=c[j>>2]|0;if((i|0)<=0){t=1;return t|0}o=g+28|0;l=c[o>>2]|0;h=0;f=j+8|0;while(1){if((l|0)==(c[f+40>>2]|0))break;h=h+1|0;if((h|0)>=(i|0)){f=1;r=80;break}else f=f+72|0}if((r|0)==80)return f|0;j=t+28|0;n=t+32|0;p=c[n>>2]|0;a:do if((p|0)>0){k=c[j>>2]|0;i=g+32|0;h=k;f=0;while(1){if((c[h+4>>2]|0)==(l|0)?(c[h+8>>2]|0)==(b[i>>1]|0):0)break a;f=f+1|0;if((f|0)>=(p|0))break;else h=h+24|0}m=j;f=k;r=13}else{m=j;f=c[j>>2]|0;r=13}while(0);b:do if((r|0)==13){l=c[s>>2]|0;h=((p|0)<0)<<31>>31;k=Sv(p|0,h|0,-1,-1)|0;c:do if((k&p|0)==0&((L()|0)&h|0)==0){i=(p|0)==0;j=Yv(p|0,h|0,48,0)|0;k=L()|0;j=i?24:j;k=i?0:k;d:do if(!f){if(c[l+272>>2]|0){if(a[l+81>>0]|0){f=0;break}}else{do if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];r=l+284|0;c[r>>2]=(c[r>>2]|0)+1;r=31;break d}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,j,k)|0;r=31}else{r=f;if((c[l+304>>2]|0)>>>0<=r>>>0?(c[l+308>>2]|0)>>>0>r>>>0:0){if(!(k>>>0>0|((k|0)==0?j>>>0>(e[l+276>>1]|0)>>>0:0)))break c;h=Zd(l,f,j,k)|0;r=31;break}h=Zd(l,f,j,k)|0;r=31}while(0);if((r|0)==31)if(h){f=h;break}c[m>>2]=f;f=-1;break b}while(0);h=f+(p*24|0)|0;j=h+24|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[n>>2]=(c[n>>2]|0)+1;c[m>>2]=f;if((p|0)>-1){c[f+(p*24|0)>>2]=c[g+44>>2];j=c[o>>2]|0;c[f+(p*24|0)+4>>2]=j;k=b[g+32>>1]|0;c[f+(p*24|0)+8>>2]=k<<16>>16;s=s+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;c[f+(p*24|0)+16>>2]=i;i=f+(p*24|0)+12|0;c[i>>2]=-1;c[f+(p*24|0)+20>>2]=g;f=c[t+24>>2]|0;e:do if(f|0?(q=c[f>>2]|0,(q|0)>0):0){h=f+4|0;f=0;while(1){s=c[h>>2]|0;if(((a[s>>0]|0)==-94?(c[s+28>>2]|0)==(j|0):0)?(b[s+32>>1]|0)==k<<16>>16:0)break;f=f+1|0;if((f|0)<(q|0))h=h+20|0;else break e}c[i>>2]=f;f=p;break b}while(0);s=t+12|0;f=c[s>>2]|0;c[s>>2]=f+1;c[i>>2]=f;f=p}else f=p}while(0);c[g+40>>2]=t;a[g>>0]=-92;b[g+34>>1]=f;t=1;return t|0}case -93:{if(b[h+24>>1]&8){t=0;return t|0}if((c[f+16>>2]|0)!=(d[g+38>>0]|0)){t=0;return t|0}p=t+40|0;o=t+44|0;h=c[o>>2]|0;f:do if((h|0)>0){h=c[p>>2]|0;f=0;while(1){if(!(bk(0,c[h>>2]|0,g,-1)|0))break;f=f+1|0;i=c[o>>2]|0;if((f|0)<(i|0))h=h+16|0;else break f}i=c[o>>2]|0}else{f=0;i=h}while(0);g:do if((f|0)>=(i|0)){m=c[s>>2]|0;n=a[m+78>>0]|0;f=c[p>>2]|0;h=((i|0)<0)<<31>>31;q=Sv(i|0,h|0,-1,-1)|0;h:do if((q&i|0)==0&((L()|0)&h|0)==0){q=(i|0)==0;k=cw(i|0,h|0,5)|0;l=L()|0;k=q?16:k;l=q?0:l;i:do if(!f){if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0))){j=m+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}j=m+296|0;h=c[j>>2]|0;if(!h){h=m+292|0;break}else{c[j>>2]=c[h>>2];r=m+284|0;c[r>>2]=(c[r>>2]|0)+1;r=71;break i}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(m,k,l)|0;r=71}else{r=f;if((c[m+304>>2]|0)>>>0<=r>>>0?(c[m+308>>2]|0)>>>0>r>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[m+276>>1]|0)>>>0:0)))break h;h=Zd(m,f,k,l)|0;r=71;break}h=Zd(m,f,k,l)|0;r=71}while(0);if((r|0)==71)if(h){f=h;break}c[p>>2]=f;f=-1;break g}while(0);h=f+(i<<4)|0;j=h+16|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(j|0));c[o>>2]=(c[o>>2]|0)+1;c[p>>2]=f;if((i|0)>-1){c[f+(i<<4)>>2]=g;r=s+44|0;h=(c[r>>2]|0)+1|0;c[r>>2]=h;c[f+(i<<4)+8>>2]=h;h=c[g+20>>2]|0;if(!h)h=0;else h=c[h>>2]|0;r=Jd(c[s>>2]|0,c[g+8>>2]|0,h,n,0)|0;c[f+(i<<4)+4>>2]=r;if(!(c[g+4>>2]&2)){c[f+(i<<4)+12>>2]=-1;f=i;break}else{r=s+40|0;s=c[r>>2]|0;c[r>>2]=s+1;c[f+(i<<4)+12>>2]=s;f=i;break}}else f=i}while(0);b[g+34>>1]=f;c[g+40>>2]=t;t=1;return t|0}default:{t=0;return t|0}}return 0}function Dm(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Em(a,b){a=a|0;b=b|0;b=a+16|0;c[b>>2]=(c[b>>2]|0)+-1;return}function Fm(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=Ra;Ra=Ra+16|0;j=l+8|0;i=l;do if(!(c[d+56>>2]|0)){f=c[d+36>>2]|0;if(f&1025|0){g=c[b>>2]|0;h=c[g+32>>2]|0;if(f&1|0){if((h&268435457|0)==1&0==0)break;if(!(a[b+18>>0]|0)){k=12;break}else break}if((!((h&268435456|0)==0&0==0)?(c[g+352>>2]|0)==0:0)?(c[g+180>>2]|0)==0:0)k=12}}else{g=c[b>>2]|0;f=d+64|0;while(1){f=c[f>>2]|0;if((c[f>>2]|0)==(g|0))break;else f=f+24|0}if(!(c[(c[c[f+4>>2]>>2]|0)+52>>2]|0))k=12}while(0);if((k|0)==12){c[i>>2]=c[d>>2];cd(b,44627,i);k=1;Ra=l;return k|0}if(e|0){k=0;Ra=l;return k|0}if(!(c[d+12>>2]|0)){k=0;Ra=l;return k|0}c[j>>2]=c[d>>2];cd(b,44656,j);k=1;Ra=l;return k|0}function Gm(b,d,f,g){b=b|0;d=d|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;q=Ra;Ra=Ra+32|0;o=q;p=c[b>>2]|0;j=c[d+72>>2]|0;if(!j)k=-1e6;else{i=c[p+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0)){k=h;break}else h=h+1|0}if(!f)m=0;else m=dk(p,f,0,0)|0;n=pj(b,0,0,0)|0;if(!n)h=mj(b,0,0,m,0,0,0,131072,0)|0;else{f=c[d>>2]|0;a:do if(!f)h=0;else{d=(Eu(f)|0)+1|0;b:do if(!p){j=Sv(d|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&j>>>0>2147483390){h=0;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](d)|0;l=32;break}h=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0>>0)c[14985]=d;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break a}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){h=0;break a}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];l=p+284|0;c[l>>2]=(c[l>>2]|0)+1;l=32;break b}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,d,0)|0;l=32}while(0);if((l|0)==32)if(!h){h=0;break}ew(h|0,f|0,d|0)|0}while(0);c[n+16>>2]=h;j=c[(c[p+16>>2]|0)+(k<<4)>>2]|0;c:do if(j){f=(Eu(j)|0)+1|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))l=45;else{h=0;break c}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){i=p+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}i=p+296|0;h=c[i>>2]|0;if(!h){h=p+292|0;break}else{c[i>>2]=c[h>>2];r=p+284|0;c[r>>2]=(c[r>>2]|0)+1;break d}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;l=45}while(0);if((l|0)==45)h=_d(p,f,0)|0;if(h)ew(h|0,j|0,f|0)|0;else h=0}else h=0;while(0);c[n+12>>2]=h;h=mj(b,0,n,m,0,0,0,131072,0)|0}a[o>>0]=12;c[o+4>>2]=g;c[o+16>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;kj(b,h,o)|0;if(!h){Ra=q;return}pi(p,h,1);Ra=q;return}function Hm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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;if(c[g+56>>2]|0){f=0;return f|0}q=c[f>>2]|0;o=c[g+72>>2]|0;if(!o)y=-1e6;else{p=c[q+16>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0)){y=n;break}else n=n+1|0}z=f+8|0;n=c[z>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[q+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))r=19;else{n=0;break a}else{do if((e[q+276>>1]|0)>=224){o=q+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}o=q+296|0;n=c[o>>2]|0;if(!n){n=q+292|0;break}else{c[o>>2]=c[n>>2];x=q+284|0;c[x>>2]=(c[x>>2]|0)+1;break b}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=19}while(0);if((r|0)==19)n=_d(q,224,0)|0;if(!n)n=0;else{o=n+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[n>>2]=q;o=q+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=n;c[n+8>>2]=p;c[n+4>>2]=0;c[o>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[z>>2]=n;Di(n,61,0,1,0)|0}}while(0);if((j|0)<0)p=c[f+40>>2]|0;else p=j;o=p+1|0;q=(l|0)!=0;if(q)c[l>>2]=p;x=g+36|0;do if(!(c[x>>2]&32)){if(k|0?(a[k>>0]|0)==0:0){r=32;break}Gj(f,p,y,g,h)}else r=32;while(0);if((r|0)==32)Hj(f,y,c[g+28>>2]|0,(h|0)==109&1,c[g>>2]|0);if(m|0)c[m>>2]=o;p=c[g+8>>2]|0;if(!p)p=0;else{m=q^1;s=(k|0)==0;t=n+108|0;u=n+112|0;v=n+104|0;w=h&255;r=p;p=0;while(1){g=o+1|0;j=r+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2){q=(c[x>>2]&32|0)==0;if(q|m)j=q?i:0;else{c[l>>2]=o;j=0}}else j=i;if(!(!s?!(a[k+(p+1)>>0]|0):0)){q=c[r+44>>2]|0;i=c[t>>2]|0;if((c[u>>2]|0)>(i|0)){c[t>>2]=i+1;A=c[v>>2]|0;a[A+(i*20|0)>>0]=w;b[A+(i*20|0)+2>>1]=0;c[A+(i*20|0)+4>>2]=o;c[A+(i*20|0)+8>>2]=q;c[A+(i*20|0)+12>>2]=y;c[A+(i*20|0)+16>>2]=0;a[A+(i*20|0)+1>>0]=0}else Di(n,h,o,q,y)|0;o=c[z>>2]|0;i=Ij(f,r)|0;c:do if(i|0){q=c[o>>2]|0;if(!(a[q+81>>0]|0)){q=c[o+104>>2]|0;A=(c[o+108>>2]|0)+-1|0;a[q+(A*20|0)+1>>0]=-9;c[q+(A*20|0)+16>>2]=i;break}if((c[q+480>>2]|0)==0?(A=(c[i>>2]|0)+-1|0,c[i>>2]=A,(A|0)==0):0){o=c[i+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,i);break c}q=i;if((c[o+304>>2]|0)>>>0>q>>>0)break;if((c[o+308>>2]|0)>>>0<=q>>>0)break;A=o+300|0;c[i>>2]=c[A>>2];c[A>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{A=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);o=c[t>>2]|0;if((o|0)>0)b[(c[v>>2]|0)+((o+-1|0)*20|0)+2>>1]=j&255}p=p+1|0;r=c[r+20>>2]|0;if(!r){o=g;break}else{i=j;o=g}}}n=f+40|0;if((o|0)<=(c[n>>2]|0)){A=p;return A|0}c[n>>2]=o;A=p;return A|0}function Im(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0;N=f+8|0;Q=c[N>>2]|0;I=f+56|0;P=c[I>>2]|0;O=P+-1|0;c[I>>2]=O;I=(c[g+36>>2]&32|0)==0?31:28;J=o<<24>>24==0;if(J){r=Q+108|0;q=c[r>>2]|0;if((c[Q+112>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[Q+104>>2]|0;a[M+(q*20|0)>>0]=I;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=i;c[M+(q*20|0)+8>>2]=O;c[M+(q*20|0)+12>>2]=k;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){M=c[Q+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=l<<16>>16}}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){w=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[w>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=w;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;a:do if(!r)q=59292;else{v=d[208+(d[w>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-v|0;if(!(M<<24>>24==0|(s|0)!=0)){u=w;do{t=t+1|0;u=u+1|0;M=a[t>>0]|0;s=(d[208+(M&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(s|0)!=0))}if(!s)break a;if(!r){q=59292;break}}}while(0);if(!(c[q+8>>2]|0)){q=(c[g+16>>2]|0)!=0&1;M=23}else M=24}else{q=0;M=23}if((M|0)==23)if((h|0)!=0|(q|0)!=0)M=24;else F=0;if((M|0)==24){H=n&255;u=(h|0)==0;if(u)q=0;else{t=f+116|0;q=0;s=h;do{do if((a[s+8>>0]|0)==121?(a[s+9>>0]&3)!=0:0){r=c[t>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;b:do if(!r)M=33;else while(1){if((c[r>>2]|0)==(s|0)?(c[r+12>>2]|0)==(H|0):0)break b;r=c[r+4>>2]|0;if(!r){M=33;break}}while(0);if((M|0)==33){M=0;r=Nm(f,s,g,H)|0;if(!r)break}q=c[r+16>>2]|q}while(0);s=c[s+32>>2]|0}while((s|0)!=0)}s=Km(f,g)|0|q;C=f+44|0;F=(c[C>>2]|0)+1|0;t=g+42|0;c[C>>2]=F+(b[t>>1]|0);D=Q+108|0;q=c[D>>2]|0;E=Q+112|0;if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;B=c[Q+104>>2]|0;a[B+(q*20|0)>>0]=78;b[B+(q*20|0)+2>>1]=0;c[B+(q*20|0)+4>>2]=k;c[B+(q*20|0)+8>>2]=F;c[B+(q*20|0)+12>>2]=0;c[B+(q*20|0)+16>>2]=0;a[B+(q*20|0)+1>>0]=0}else Di(Q,78,k,F,0)|0;q=b[t>>1]|0;c:do if(q<<16>>16>0){if((s|0)==-1){q=0;while(1){B=q;q=q+1|0;Vj(Q,g,i,B,q+F|0);if((q|0)>=(b[t>>1]|0))break c}}r=0;do{if(r>>>0<32?(1<>1]|0}r=r+1|0}while((r|0)<(q<<16>>16|0))}while(0);A=c[D>>2]|0;if(u)q=A;else{y=f+116|0;z=f+23|0;x=h;do{do if((a[x+8>>0]|0)==121?(a[x+9>>0]|0)==1:0){q=c[N>>2]|0;d:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;e:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=66;else{q=0;break d}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];B=s+284|0;c[B>>2]=(c[B>>2]|0)+1;break e}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=66}while(0);if((M|0)==66){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;f:do if(!r)M=76;else while(1){if((c[r>>2]|0)==(x|0)?(c[r+12>>2]|0)==(H|0):0)break f;r=c[r+4>>2]|0;if(!r){M=76;break}}while(0);if((M|0)==76){M=0;r=Nm(f,x,g,H)|0;if(!r)break}if(!(c[x>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}s=(c[C>>2]|0)+1|0;c[C>>2]=s;u=c[r+8>>2]|0;v=q+108|0;r=c[v>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[v>>2]=r+1;B=c[q+104>>2]|0;a[B+(r*20|0)>>0]=45;b[B+(r*20|0)+2>>1]=0;c[B+(r*20|0)+4>>2]=F;c[B+(r*20|0)+8>>2]=O;c[B+(r*20|0)+12>>2]=s;c[B+(r*20|0)+16>>2]=0;a[B+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[v>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(!u)break;c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}while(0);r=c[v>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=w}while(0);x=c[x+32>>2]|0}while((x|0)!=0);q=c[D>>2]|0}if((A|0)<(q|0)){if((c[E>>2]|0)>(q|0)){c[D>>2]=q+1;H=c[Q+104>>2]|0;a[H+(q*20|0)>>0]=I;b[H+(q*20|0)+2>>1]=0;c[H+(q*20|0)+4>>2]=i;c[H+(q*20|0)+8>>2]=O;c[H+(q*20|0)+12>>2]=k;c[H+(q*20|0)+16>>2]=0;a[H+(q*20|0)+1>>0]=0}else q=Di(Q,I&255,i,O,k)|0;if(!(a[(c[Q>>2]|0)+81>>0]|0)){k=c[Q+104>>2]|0;a[k+(q*20|0)+1>>0]=-3;c[k+(q*20|0)+16>>2]=l<<16>>16;q=-1}else q=-1}else q=p;Lm(f,g,F,0,0,0);p=q}if(!(c[g+12>>2]|0)){Mm(f,g,i,j,0,p);q=m<<24>>24!=0&1;t=Q+108|0;r=c[t>>2]|0;u=Q+112|0;if((c[u>>2]|0)>(r|0)){c[t>>2]=r+1;m=c[Q+104>>2]|0;a[m+(r*20|0)>>0]=123;b[m+(r*20|0)+2>>1]=0;c[m+(r*20|0)+4>>2]=i;c[m+(r*20|0)+8>>2]=q;c[m+(r*20|0)+12>>2]=0;c[m+(r*20|0)+16>>2]=0;a[m+(r*20|0)+1>>0]=0}else Di(Q,123,i,q,0)|0;if(a[f+18>>0]|0){r=c[g>>2]|0;if(r|0){m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)+-115|0;if(!(m<<24>>24==0|(q|0)!=0)){s=35174;do{r=r+1|0;s=s+1|0;m=a[r>>0]|0;q=(d[208+(m&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(q|0)!=0))}if(!q)M=110}}else M=110;if((M|0)==110?(a[(c[Q>>2]|0)+81>>0]|0)==0:0){j=c[Q+104>>2]|0;m=(c[t>>2]|0)+-1|0;a[j+(m*20|0)+1>>0]=-6;c[j+(m*20|0)+16>>2]=g}if(!J?(K=c[t>>2]|0,(K|0)>0):0)b[(c[Q+104>>2]|0)+((K+-1|0)*20|0)+2>>1]=4;do if(!((p|0)<0|(p|0)==(i|0))){q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;K=c[Q+104>>2]|0;a[K+(q*20|0)>>0]=123;b[K+(q*20|0)+2>>1]=0;c[K+(q*20|0)+4>>2]=p;c[K+(q*20|0)+8>>2]=0;c[K+(q*20|0)+12>>2]=0;c[K+(q*20|0)+16>>2]=0;a[K+(q*20|0)+1>>0]=0;break}else{Di(Q,123,p,0,0)|0;break}}while(0);q=c[t>>2]|0;if((q|0)>0)b[(c[Q+104>>2]|0)+((q+-1|0)*20|0)+2>>1]=o<<24>>24==2?2:0}if(!(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)){v=c[g>>2]|0;t=c[g+72>>2]|0;u=c[t+68>>2]|0;if(!u){r=t+60|0;q=t+64|0}else{r=a[v>>0]|0;if(!(r<<24>>24))q=0;else{q=0;s=v;do{s=s+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[s>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[t+56>>2]|0)>>>0)|0;r=u+(q<<3)|0;q=u+(q<<3)+4|0}r=c[r>>2]|0;g:do if(!r)q=59292;else{p=d[208+(d[v>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;t=c[q+12>>2]|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-p|0;if(!(o<<24>>24==0|(s|0)!=0)){u=v;do{t=t+1|0;u=u+1|0;o=a[t>>0]|0;s=(d[208+(o&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(o<<24>>24==0|(s|0)!=0))}if(!s)break g;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(q|0){x=f+116|0;y=f+23|0;z=f+44|0;do{u=Rm(f,g,q,0)|0;do if(u|0){r=c[N>>2]|0;h:do if(!r){t=c[f>>2]|0;if((c[x>>2]|0)==0?(b[t+76>>1]&8)==0:0)a[y>>0]=1;i:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))M=152;else{r=0;break h}else{do if((e[t+276>>1]|0)>=224){s=t+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}s=t+296|0;r=c[s>>2]|0;if(!r){r=t+292|0;break}else{c[s>>2]=c[r>>2];o=t+284|0;c[o>>2]=(c[o>>2]|0)+1;break i}}else r=t+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;M=152}while(0);if((M|0)==152){M=0;r=_d(t,224,0)|0}if(!r)r=0;else{v=r+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[r>>2]=t;s=t+4|0;t=c[s>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[s>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[N>>2]=r;Di(r,61,0,1,0)|0}}while(0);s=c[x>>2]|0;s=c[((s|0)==0?f:s)+260>>2]|0;j:do if(!s)M=162;else while(1){if((c[s>>2]|0)==(u|0)?(c[s+12>>2]|0)==2:0)break j;s=c[s+4>>2]|0;if(!s){M=162;break}}while(0);if((M|0)==162){M=0;s=Nm(f,u,g,2)|0;if(!s)break}if(!(c[u>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}t=(c[z>>2]|0)+1|0;c[z>>2]=t;p=c[s+8>>2]|0;v=r+108|0;s=c[v>>2]|0;if((c[r+112>>2]|0)>(s|0)){c[v>>2]=s+1;o=c[r+104>>2]|0;a[o+(s*20|0)>>0]=45;b[o+(s*20|0)+2>>1]=0;c[o+(s*20|0)+4>>2]=F;c[o+(s*20|0)+8>>2]=0;c[o+(s*20|0)+12>>2]=t;c[o+(s*20|0)+16>>2]=0;a[o+(s*20|0)+1>>0]=0}else s=Di(r,45,F,0,t)|0;do if(!(a[(c[r>>2]|0)+81>>0]|0)){if((s|0)<0)s=(c[v>>2]|0)+-1|0;t=c[r+104>>2]|0;u=t+(s*20|0)+1|0;if(a[u>>0]|0){Ei(r,t+(s*20|0)|0,p,-4);break}if(p|0){c[t+(s*20|0)+16>>2]=p;a[u>>0]=-4}}while(0);s=c[v>>2]|0;if((s|0)>0)b[(c[r+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=w}while(0);q=c[q+12>>2]|0}while((q|0)!=0)}}x=n&255;if(h|0){y=f+116|0;z=f+23|0;A=f+44|0;w=h;do{do if((a[w+8>>0]|0)==121?(a[w+9>>0]|0)==2:0){q=c[N>>2]|0;k:do if(!q){s=c[f>>2]|0;if((c[y>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[z>>0]=1;l:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))M=196;else{q=0;break k}else{do if((e[s+276>>1]|0)>=224){r=s+300|0;q=c[r>>2]|0;if(q|0){c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}r=s+296|0;q=c[r>>2]|0;if(!q){q=s+292|0;break}else{c[r>>2]=c[q>>2];h=s+284|0;c[h>>2]=(c[h>>2]|0)+1;break l}}else q=s+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;M=196}while(0);if((M|0)==196){M=0;q=_d(s,224,0)|0}if(!q)q=0;else{v=q+104|0;B=v+120|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(B|0));c[q>>2]=s;r=s+4|0;s=c[r>>2]|0;if(s|0)c[s+4>>2]=q;c[q+8>>2]=s;c[q+4>>2]=0;c[r>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[N>>2]=q;Di(q,61,0,1,0)|0}}while(0);r=c[y>>2]|0;r=c[((r|0)==0?f:r)+260>>2]|0;m:do if(!r)M=206;else while(1){if((c[r>>2]|0)==(w|0)?(c[r+12>>2]|0)==(x|0):0)break m;r=c[r+4>>2]|0;if(!r){M=206;break}}while(0);if((M|0)==206){M=0;r=Nm(f,w,g,x)|0;if(!r)break}if(!(c[w>>2]|0))v=0;else{v=(c[f>>2]|0)+32|0;v=bw(c[v>>2]|0,c[v+4>>2]|0,13)|0;L()|0;v=v&1^1}s=(c[A>>2]|0)+1|0;c[A>>2]=s;u=c[r+8>>2]|0;p=q+108|0;r=c[p>>2]|0;if((c[q+112>>2]|0)>(r|0)){c[p>>2]=r+1;h=c[q+104>>2]|0;a[h+(r*20|0)>>0]=45;b[h+(r*20|0)+2>>1]=0;c[h+(r*20|0)+4>>2]=F;c[h+(r*20|0)+8>>2]=O;c[h+(r*20|0)+12>>2]=s;c[h+(r*20|0)+16>>2]=0;a[h+(r*20|0)+1>>0]=0}else r=Di(q,45,F,O,s)|0;do if(!(a[(c[q>>2]|0)+81>>0]|0)){if((r|0)<0)r=(c[p>>2]|0)+-1|0;s=c[q+104>>2]|0;t=s+(r*20|0)+1|0;if(a[t>>0]|0){Ei(q,s+(r*20|0)|0,u,-4);break}if(u|0){c[s+(r*20|0)+16>>2]=u;a[t>>0]=-4}}while(0);r=c[p>>2]|0;if((r|0)>0)b[(c[q+104>>2]|0)+((r+-1|0)*20|0)+2>>1]=v}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}r=c[Q+12>>2]|0;q=0-P|0;if(((c[r+56>>2]|0)+(c[r+60>>2]|0)|0)<0){mk(r,Q,q);return}else{c[(c[r+64>>2]|0)+(q<<2)>>2]=c[Q+108>>2];return}}function Jm(e,f,g,h){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,v=0,w=0;t=c[f+20>>2]|0;if((t|0)<=0){v=0;return v|0}q=b[e+42>>1]|0;u=q<<16>>16>0;s=e+4|0;r=e+40|0;n=(h|0)==0;o=q<<16>>16;p=q<<16>>16;q=q<<16>>16;m=0;a:while(1){l=c[f+36+(m<<3)+4>>2]|0;b:do if(u){k=(l|0)==0;if(!n){j=0;while(1){if(!((c[g+(j<<2)>>2]|0)<=-1?(j|0)!=(b[r>>1]|0):0))v=8;do if((v|0)==8){v=0;e=c[s>>2]|0;if(k)if(!(a[e+(j<<4)+15>>0]&1))break;else{e=1;v=28;break a}h=c[e+(j<<4)>>2]|0;i=a[h>>0]|0;e=(d[208+(i&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}while(0);j=j+1|0;if((j|0)>=(o|0))break b}}if(k){e=0;while(1){if((c[g+(e<<2)>>2]|0)>-1?a[(c[s>>2]|0)+(e<<4)+15>>0]&1:0){e=1;v=28;break a}e=e+1|0;if((e|0)>=(p|0))break b}}j=0;do{if((c[g+(j<<2)>>2]|0)>-1){h=c[(c[s>>2]|0)+(j<<4)>>2]|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(w<<24>>24==0|(e|0)!=0)){i=l;do{h=h+1|0;i=i+1|0;w=a[h>>0]|0;e=(d[208+(w&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(e|0)!=0))}if(!e){e=1;v=28;break a}}j=j+1|0}while((j|0)<(q|0))}while(0);m=m+1|0;if((m|0)>=(t|0)){e=0;v=28;break}}if((v|0)==28)return e|0;return 0}function Km(e,f){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=Ra;Ra=Ra+16|0;o=q;if(0==0?(c[(c[e>>2]|0)+32>>2]&16384|0)==0:0){p=0;Ra=q;return p|0}g=c[f+16>>2]|0;if(!g)g=0;else{j=g;g=0;do{i=c[j+20>>2]|0;if((i|0)>0){h=0;do{n=c[j+36+(h<<3)>>2]|0;g=((n|0)>31?-1:1<>2]|0}while((j|0)!=0)}n=c[f>>2]|0;k=c[f+72>>2]|0;l=c[k+68>>2]|0;if(!l){i=k+60|0;h=k+64|0}else{i=a[n>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=n;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[k+56>>2]|0)>>>0)|0;i=l+(h<<3)|0;h=l+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[n>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=n;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);h=c[h+8>>2]|0;if(!h){r=g;Ra=q;return r|0}do{c[o>>2]=0;Om(e,f,h,o,0)|0;i=c[o>>2]|0;if((i|0)!=0?(p=b[i+50>>1]|0,p<<16>>16!=0):0){j=c[i+4>>2]|0;k=p&65535;i=0;do{r=b[j+(i<<1)>>1]|0;g=(r<<16>>16>31?-1:1<<(r<<16>>16))|g;i=i+1|0}while(i>>>0>>0)}h=c[h+12>>2]|0}while((h|0)!=0);Ra=q;return g|0}function Lm(f,g,h,i,j,k){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,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,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;_=Ra;Ra=Ra+16|0;X=_+8|0;Y=_+4|0;S=_;Z=c[f>>2]|0;R=f+146|0;V=a[R>>0]|0;W=Z+32|0;if((c[W>>2]&16384|0)==0&0==0){Ra=_;return}T=g+72|0;p=c[T>>2]|0;m=c[Z+16>>2]|0;if(!p)l=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(p|0))break;else l=l+1|0}Q=c[m+(l<<4)>>2]|0;m=c[g+16>>2]|0;do if(!m)l=g;else{x=(j|0)==0;y=V<<24>>24==0;z=g+40|0;A=(k|0)==0;B=Z+81|0;C=f+8|0;D=f+40|0;E=(h|0)==0;F=Z+312|0;H=f+116|0;I=(i|0)==0;J=h+1|0;K=f+23|0;L=(Z|0)==0;M=Z+480|0;N=Z+304|0;O=Z+308|0;P=Z+300|0;a:while(1){c[X>>2]=0;c[Y>>2]=0;b:do if(!x){p=c[g>>2]|0;n=c[m+8>>2]|0;if(p){if(n|0){U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(U<<24>>24==0|(o|0)!=0)U=16;else{q=n;do{p=p+1|0;q=q+1|0;U=a[p>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0));U=16}}}else{o=((n|0)!=0)<<31>>31;U=16}if((U|0)==16?(U=0,(o|0)==0):0){U=26;break}r=c[m+20>>2]|0;if((r|0)>0){if(A){p=0;while(1){if((c[j+(c[m+36+(p<<3)>>2]<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((p|0)>=(r|0))break b}}p=0;do{q=c[m+36+(p<<3)>>2]|0;if((c[j+(q<<2)>>2]|0)>-1){U=26;break b}p=p+1|0;if((q|0)==(b[z>>1]|0)){U=26;break b}}while((p|0)<(r|0))}}else{n=c[m+8>>2]|0;U=26}while(0);c:do if((U|0)==26){U=0;if(!(a[R>>0]|0))w=bd(f,0,n,Q)|0;else w=Sd(Z,n,Q)|0;n=(w|0)==0;if(!n?(Om(f,w,m,X,Y)|0)==0:0){n=c[Y>>2]|0;if(!n){c[S>>2]=c[m+36>>2];n=S}u=m+20|0;if((c[u>>2]|0)>0){v=w+4|0;r=c[X>>2]|0;s=w+40|0;t=r+4|0;if(!r){q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[s>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}else{q=0;r=0;do{p=n+(r<<2)|0;if((c[p>>2]|0)==(b[z>>1]|0))c[p>>2]=-1;if(c[F>>2]|0)q=(Ik(f,c[w>>2]|0,c[(c[v>>2]|0)+(b[(c[t>>2]|0)+(r<<1)>>1]<<4)>>2]|0,l)|0)==2&1;r=r+1|0}while((r|0)<(c[u>>2]|0));p=w}}else{q=0;p=w}Hj(f,l,c[w+28>>2]|0,0,c[p>>2]|0);c[D>>2]=(c[D>>2]|0)+1;if(!E)Pm(f,l,w,c[X>>2]|0,m,n,h,-1,q);do if(!I){p=c[H>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;if(p|0){p=c[p>>2]|0;if((p|0)==(c[m+28>>2]|0)?(a[m+25>>0]|0)==8:0)break;if((p|0)==(c[m+32>>2]|0)?(a[m+26>>0]|0)==8:0)break}Pm(f,l,w,c[X>>2]|0,m,n,i,1,q)}while(0);n=c[Y>>2]|0;if(!n)break;do if(!L){if(c[M>>2]|0){Xd(Z,n);break c}p=n;if((c[N>>2]|0)>>>0<=p>>>0){if((c[O>>2]|0)>>>0<=p>>>0)break;c[n>>2]=c[P>>2];c[P>>2]=n;break c}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{w=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}if(y)break a;if(a[B>>0]|0)break a;if(n){n=c[C>>2]|0;d:do if(!n){r=c[f>>2]|0;if((c[H>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[K>>0]=1;e:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))U=48;else{n=0;break d}else{do if((e[r+276>>1]|0)>=224){p=r+300|0;n=c[p>>2]|0;if(n|0){c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}p=r+296|0;n=c[p>>2]|0;if(!n){n=r+292|0;break}else{c[p>>2]=c[n>>2];w=r+284|0;c[w>>2]=(c[w>>2]|0)+1;break e}}else n=r+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;U=48}while(0);if((U|0)==48){U=0;n=_d(r,224,0)|0}if(!n)n=0;else{p=n+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[n>>2]=r;p=r+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=n;c[n+8>>2]=q;c[n+4>>2]=0;c[p>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[C>>2]=n;Di(n,61,0,1,0)|0}}while(0);v=n+108|0;q=c[v>>2]|0;s=m+20|0;u=c[s>>2]|0;t=q+1+u|0;w=n+112|0;if((u|0)>0){u=n+104|0;r=0;do{p=J+(c[m+36+(r<<3)>>2]|0)|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[u>>2]|0;a[$+(q*20|0)>>0]=50;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=t;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0}else Di(n,50,p,t,0)|0;r=r+1|0;q=c[v>>2]|0}while((r|0)<(c[s>>2]|0))}p=d[m+24>>0]|0;if((c[w>>2]|0)>(q|0)){c[v>>2]=q+1;$=c[n+104>>2]|0;a[$+(q*20|0)>>0]=-106;b[$+(q*20|0)+2>>1]=0;c[$+(q*20|0)+4>>2]=p;c[$+(q*20|0)+8>>2]=-1;c[$+(q*20|0)+12>>2]=0;c[$+(q*20|0)+16>>2]=0;a[$+(q*20|0)+1>>0]=0;break}else{Di(n,150,p,-1,0)|0;break}}}while(0);m=c[m+4>>2]|0;if(!m){U=100;break}}if((U|0)==100){l=g;p=c[T>>2]|0;break}Ra=_;return}while(0);r=c[l>>2]|0;o=c[p+68>>2]|0;if(!o){m=p+60|0;l=p+64|0}else{m=a[r>>0]|0;if(!(m<<24>>24))l=0;else{l=0;n=r;do{n=n+1|0;l=G(l+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[n>>0]|0}while(m<<24>>24!=0)}l=(l>>>0)%((c[p+56>>2]|0)>>>0)|0;m=o+(l<<3)|0;l=o+(l<<3)+4|0}m=c[m>>2]|0;f:do if(!m)l=59292;else{q=d[208+(d[r>>0]|0)>>0]|0;while(1){l=c[l>>2]|0;m=m+-1|0;o=c[l+12>>2]|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-q|0;if(!($<<24>>24==0|(n|0)!=0)){p=r;do{o=o+1|0;p=p+1|0;$=a[o>>0]|0;n=(d[208+($&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!($<<24>>24==0|(n|0)!=0))}if(!n)break f;if(!m){l=59292;break}}}while(0);l=c[l+8>>2]|0;if(!l){Ra=_;return}B=(j|0)!=0;C=f+116|0;p=V<<24>>24==0;q=f+20|0;r=f+40|0;s=(i|0)==0;t=Z+81|0;u=(Z|0)==0;v=(h|0)==0;w=Z+480|0;x=B&1;y=Z+304|0;z=Z+308|0;A=Z+300|0;g:while(1){c[X>>2]=0;c[Y>>2]=0;if(B?(Jm(g,l,j,k)|0)==0:0)U=142;else U=118;do if((U|0)==118){U=0;o=l+24|0;if((((a[o>>0]|0)==0?(c[W>>2]&524288|0)==0&0==0:0)?(c[C>>2]|0)==0:0)?(a[q>>0]|0)==0:0){U=142;break}if(Om(f,g,l,X,Y)|0){if(p){U=124;break g}if(!(a[t>>0]|0))break;else{U=145;break g}}m=pj(f,0,0,0)|0;if(m|0){$=c[l>>2]|0;c[m+24>>2]=$;n=m+16|0;c[n>>2]=c[$>>2];$=$+32|0;c[$>>2]=(c[$>>2]|0)+1;$=c[r>>2]|0;c[r>>2]=$+1;c[m+48>>2]=$;if(!s)Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,i,-1);if(!v?($=a[l+25+x>>0]|0,Qm(f,m,g,c[X>>2]|0,l,c[Y>>2]|0,h,1),($|2)<<24>>24!=10&(a[o>>0]|0)==0):0){$=c[C>>2]|0;a[(($|0)==0?f:$)+21>>0]=1}c[n>>2]=0;qi(Z,m)}m=c[Y>>2]|0;if(m){if(!u){if(c[w>>2]|0){Xd(Z,m);U=142;break}$=m;if((c[y>>2]|0)>>>0<=$>>>0?(c[z>>2]|0)>>>0>$>>>0:0){c[m>>2]=c[A>>2];c[A>>2]=m;U=142;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);U=142;break}else{U=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);U=142;break}}else U=142}while(0);l=c[l+12>>2]|0;if(!l){U=145;break}}if((U|0)==124){Ra=_;return}else if((U|0)==145){Ra=_;return}}function Mm(f,g,h,i,j,k){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,t=0,u=0,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;w=z;x=f+8|0;y=c[x>>2]|0;n=c[g+8>>2]|0;a:do if(!(c[g+36>>2]&32))g=0;else{if(!n){Ra=z;return}g=n;while(1){v=g+55|0;if(((d[v>>0]|d[v+1>>0]<<8)&3)==2)break a;g=c[g+20>>2]|0;if(!g){g=0;break}}}while(0);if(!n){Ra=z;return}t=y+108|0;u=y+112|0;v=y+104|0;if(!j){l=-1;m=0;p=n;q=0;while(1){do if((p|0)!=(g|0)?(r=q+i|0,(r|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;s=c[v>>2]|0;a[s+(n*20|0)>>0]=-123;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=r;c[s+(n*20|0)+8>>2]=l;c[s+(n*20|0)+12>>2]=m;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(y,133,r,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}else{l=-1;m=0;p=n;q=0;while(1){do if(!((p|0)==(g|0)?1:(c[j+(q<<2)>>2]|0)==0)?(s=q+i|0,(s|0)!=(k|0)):0){l=el(f,p,h,0,1,w,m,l)|0;m=p+55|0;m=e[(((d[m>>0]|d[m+1>>0]<<8)&8)==0?p+52|0:p+50|0)>>1]|0;n=c[t>>2]|0;if((c[u>>2]|0)>(n|0)){c[t>>2]=n+1;r=c[v>>2]|0;a[r+(n*20|0)>>0]=-123;b[r+(n*20|0)+2>>1]=0;c[r+(n*20|0)+4>>2]=s;c[r+(n*20|0)+8>>2]=l;c[r+(n*20|0)+12>>2]=m;c[r+(n*20|0)+16>>2]=0;a[r+(n*20|0)+1>>0]=0}else Di(y,133,s,l,m)|0;m=c[w>>2]|0;if(m){n=c[x>>2]|0;o=c[n+12>>2]|0;m=~m;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,n,m);m=p;break}else{c[(c[o+64>>2]|0)+(m<<2)>>2]=c[n+108>>2];m=p;break}}else m=p}while(0);p=c[p+20>>2]|0;if(!p)break;else q=q+1|0}Ra=z;return}}function Nm(f,g,h,i){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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+96|0;X=$+16|0;q=$+8|0;p=$;W=$+56|0;r=$+24|0;Y=c[f+116>>2]|0;Y=(Y|0)==0?f:Y;_=c[f>>2]|0;m=(_|0)==0;a:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](24)|0;P=24;break}j=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){Z=c[14978]|0;U=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=Z>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Z=k}else Z=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=24){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=24;break a}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,24,0)|0;P=24}while(0);if((P|0)==24)if(!j){_=0;Ra=$;return _|0}else Z=j;l=Z;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));U=Y+260|0;c[Z+4>>2]=c[U>>2];c[U>>2]=Z;b:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](28)|0;P=48;break}j=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(k){j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;Q=k}else Q=k}else P=49}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){P=49;break}}else{do if((e[_+276>>1]|0)>=28){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=48;break b}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,28,0)|0;P=48}while(0);if((P|0)==48)if(!j)P=49;else Q=j;if((P|0)==49){c[Z+8>>2]=0;_=0;Ra=$;return _|0}l=Q;n=l+24|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));c[Z+8>>2]=Q;R=(c[Y+8>>2]|0)+212|0;c[Q+24>>2]=c[R>>2];c[R>>2]=Q;c[Z>>2]=g;c[Z+12>>2]=i;R=Z+16|0;c[R>>2]=-1;S=Z+20|0;c[S>>2]=-1;c:do if(m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](276)|0;P=73;break}j=Wa[c[29356>>2]&127](276)|0;if((c[14985]|0)>>>0<276)c[14985]=276;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){U=c[14978]|0;T=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&T>>>0<=U>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){_=0;Ra=$;return _|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;U=k}else U=k}else{if(c[_+272>>2]|0){if(a[_+81>>0]|0){_=0;Ra=$;return _|0}}else{do if((e[_+276>>1]|0)>=276){k=_+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}k=_+296|0;j=c[k>>2]|0;if(!j){j=_+292|0;break}else{c[k>>2]=c[j>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=73;break c}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(_,276,0)|0;P=73}while(0);if((P|0)==73)if(!j){_=0;Ra=$;return _|0}else U=j;O=U+4|0;gw(O|0,0,272)|0;k=r+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[r>>2]=U;c[U>>2]=_;c[U+120>>2]=h;c[U+116>>2]=Y;k=c[g>>2]|0;c[U+240>>2]=k;a[U+144>>0]=a[g+8>>0]|0;c[U+132>>2]=c[f+132>>2];a[U+25>>0]=a[f+25>>0]|0;o=U+8|0;j=c[o>>2]|0;T=U;d:do if(!j){e:do if(c[_+272>>2]|0)if(!(a[_+81>>0]|0))P=86;else k=_;else{do if((e[_+276>>1]|0)>=224){j=_+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}j=_+296|0;k=c[j>>2]|0;if(!k){j=_+292|0;break}else{c[j>>2]=c[k>>2];P=_+284|0;c[P>>2]=(c[P>>2]|0)+1;P=87;break e}}else j=_+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;P=86}while(0);if((P|0)==86){k=_d(_,224,0)|0;P=87}do if((P|0)==87){if(k|0){l=k+104|0;n=l+120|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[k>>2]=_;j=_+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=U;c[o>>2]=k;Di(k,61,0,1,0)|0;N=k;j=c[g>>2]|0;P=91;break d}j=c[U>>2]|0;k=c[U+64>>2]|0;if(k){if(j|0){if(c[j+480>>2]|0){Xd(j,k);k=j;break}Y=k;if((c[j+304>>2]|0)>>>0<=Y>>>0?(c[j+308>>2]|0)>>>0>Y>>>0:0){Y=j+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k;k=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=j;break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=j;break}}else k=j}while(0);j=c[U+68>>2]|0;if(j|0)ri(k,j);j=U+24|0;if(k){Y=k+272|0;c[Y>>2]=(c[Y>>2]|0)-(d[j>>0]|0)}}else{N=j;j=k;P=91}while(0);if((P|0)==91){do if(j|0){c[p>>2]=j;m=dd(_,44694,p)|0;j=c[N>>2]|0;if(!(a[j+81>>0]|0)){j=(c[N+108>>2]|0)+-1|0;k=c[N+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(N,k+(j*20|0)|0,m,-7);break}if(!m)break;c[k+(j*20|0)+16>>2]=m;a[l>>0]=-7;break}if(m|0){if(j|0){if(c[j+480>>2]|0){Xd(j,m);break}M=m;if((c[j+304>>2]|0)>>>0<=M>>>0?(c[j+308>>2]|0)>>>0>M>>>0:0){M=j+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);j=c[g+12>>2]|0;do if(!j)j=0;else{h=dk(_,j,0,0)|0;n=(h|0)==0;do if(n)P=115;else{k=r+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;c[W>>2]=T;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=r;m=h+24|0;j=U+208|0;M=(c[j>>2]|0)+(c[m>>2]|0)|0;c[j>>2]=M;j=c[(c[U>>2]|0)+120>>2]|0;if((j|0)>=(M|0)){_j(W,h)|0;j=c[W>>2]|0;M=j+208|0;c[M>>2]=(c[M>>2]|0)-(c[m>>2]|0);M=b[k>>1]|0;K=h+4|0;c[K>>2]=c[K>>2]|M&-32752&65535;b[k>>1]=l&36880|M&65535;if((c[r+20>>2]|0)<=0)if((c[j+36>>2]|0)<1){P=115;break}else{j=0;break}}else{c[q>>2]=j;cd(U,41637,q)}j=0}while(0);if((P|0)==115){if(!(a[_+81>>0]|0)){M=U+56|0;j=(c[M>>2]|0)+-1|0;c[M>>2]=j;Tj(U,h,j,16)}else j=0;if(n)break}ni(_,h)}while(0);I=c[o>>2]|0;J=c[U>>2]|0;k=c[g+28>>2]|0;f:do if(k|0){K=(i|0)==11;M=U+145|0;u=i&255;v=I+108|0;w=I+112|0;x=W+4|0;y=I+104|0;z=(J|0)==0;A=J+272|0;B=J+276|0;C=J+81|0;D=J+288|0;E=J+300|0;F=J+296|0;G=J+284|0;H=J+292|0;while(1){if(K)l=d[k+1>>0]|0;else l=u;a[M>>0]=l;l=c[k+32>>2]|0;g:do if(l|0){c[X>>2]=l;h=dd(J,34793,X)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;t=c[y>>2]|0;a[t+(l*20|0)>>0]=-88;b[t+(l*20|0)+2>>1]=0;c[t+(l*20|0)+4>>2]=2147483647;c[t+(l*20|0)+8>>2]=1;c[t+(l*20|0)+12>>2]=0;c[t+(l*20|0)+16>>2]=0;a[t+(l*20|0)+1>>0]=0}else l=Di(I,168,2147483647,1,0)|0;m=c[I>>2]|0;if(!(a[m+81>>0]|0)){if((l|0)<0)l=(c[v>>2]|0)+-1|0;m=c[y>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(I,m+(l*20|0)|0,h,-7);break}if(!h)break;c[m+(l*20|0)+16>>2]=h;a[n>>0]=-7;break}if(h|0){do if(m|0){if(c[m+480>>2]|0){Xd(m,h);break g}l=h;if((c[m+304>>2]|0)>>>0<=l>>>0){if((c[m+308>>2]|0)>>>0<=l>>>0)break;t=m+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break g}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}}while(0);switch(a[k>>0]|0){case 122:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;h:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;i:do if(!p){t=Sv(o|0,0,-1,-1)|0;s=L()|0;if(s>>>0>0|(s|0)==0&t>>>0>2147483390){l=0;break h}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=171;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){t=c[14978]|0;s=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&s>>>0<=t>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break h}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break h}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=171;break i}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=171}while(0);if((P|0)==171){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;j:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;k:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=188;else{l=0;break j}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];t=p+284|0;c[t>>2]=(c[t>>2]|0)+1;break k}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=188}while(0);if((P|0)==188){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}m=gk(J,c[k+20>>2]|0,0)|0;l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;tj(U,q,m,l,d[M>>0]|0,0);break}case 120:{p=c[U>>2]|0;t=pj(U,0,0,0)|0;if(t|0){h=c[k+12>>2]|0;l:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;m:do if(!p){s=Sv(o|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&s>>>0>2147483390){l=0;break l}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=221;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){s=c[14978]|0;i=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;r=L()|0;c[14768]=((r|0)<0|(r|0)==0&i>>>0<=s>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break l}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break l}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=221;break m}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=221}while(0);if((P|0)==221){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;n:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;o:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=238;else{l=0;break n}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];s=p+284|0;c[s>>2]=(c[s>>2]|0)+1;break o}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=238}while(0);if((P|0)==238){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[t+8+(((c[t>>2]|0)+-1|0)*72|0)+4>>2]=l}}r=fk(J,c[k+8>>2]|0,0)|0;i=jk(J,c[k+24>>2]|0)|0;s=d[M>>0]|0;m=c[k+28>>2]|0;do if(!m)l=0;else{q=gk(J,c[m>>2]|0,0)|0;l=c[m+4>>2]|0;if(!l)p=0;else p=dk(J,l,0,0)|0;o=gk(J,c[m+8>>2]|0,0)|0;l=c[m+12>>2]|0;if(!l)h=0;else h=dk(J,l,0,0)|0;p:do if(z){if(!(c[7324]|0)){V=Wa[c[29340>>2]&127](36)|0;P=268;break}l=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;n=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l)break;m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){P=277;break}c[14987]=m;P=277}else{if(c[A>>2]|0){if(a[C>>0]|0)break}else{do if((e[B>>1]|0)<36)l=D;else{l=c[E>>2]|0;if(l|0){c[E>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}l=c[F>>2]|0;if(!l){l=H;break}c[F>>2]=c[l>>2];c[G>>2]=(c[G>>2]|0)+1;V=l;P=268;break p}while(0);c[l>>2]=(c[l>>2]|0)+1}V=_d(J,36,0)|0;P=268}while(0);if((P|0)==268?(P=0,V|0):0){l=V;P=277}if((P|0)==277){P=0;c[l>>2]=q;c[l+4>>2]=p;c[l+8>>2]=o;c[l+12>>2]=h;c[l+16>>2]=0;break}if(q|0)ri(J,q);if(p|0)ni(J,p);if(o|0)ri(J,o);if(!h){l=0;break}ni(J,h);l=0}while(0);vj(U,t,r,i,s,l);break}case 121:{p=c[U>>2]|0;q=pj(U,0,0,0)|0;if(q|0){h=c[k+12>>2]|0;q:do if(!h)l=0;else{o=(Eu(h)|0)+1|0;r:do if(!p){aa=Sv(o|0,0,-1,-1)|0;t=L()|0;if(t>>>0>0|(t|0)==0&aa>>>0>2147483390){l=0;break q}if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](o)|0;P=305;break}l=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){aa=c[14978]|0;t=Tv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=aa>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(!l){l=0;break q}m=Wa[c[29352>>2]&127](l)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){l=0;break q}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];P=p+284|0;c[P>>2]=(c[P>>2]|0)+1;P=305;break r}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(p,o,0)|0;P=305}while(0);if((P|0)==305){P=0;if(!l){l=0;break}}ew(l|0,h|0,o|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+8>>2]=l;m=c[(c[k+4>>2]|0)+20>>2]|0;if(!m)l=-1e6;else{n=c[p+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}if((l|0)==0|(l|0)>1){n=c[(c[p+16>>2]|0)+(l<<4)>>2]|0;s:do if(!n)l=0;else{h=(Eu(n)|0)+1|0;t:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))P=322;else{l=0;break s}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){m=p+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}m=p+296|0;l=c[m>>2]|0;if(!l){l=p+292|0;break}else{c[m>>2]=c[l>>2];aa=p+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break t}}else l=p+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;P=322}while(0);if((P|0)==322){P=0;l=_d(p,h,0)|0}if(!l){l=0;break}ew(l|0,n|0,h|0)|0}while(0);c[q+8+(((c[q>>2]|0)+-1|0)*72|0)+4>>2]=l}}l=c[k+16>>2]|0;if(!l)l=0;else l=dk(J,l,0,0)|0;sj(U,q,l);break}default:{l=fk(J,c[k+8>>2]|0,0)|0;a[W>>0]=4;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;kj(U,l,W)|0;if(l|0)pi(J,l,1)}}do if((a[k>>0]|0)!=-125){l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;n=c[y>>2]|0;a[n+(l*20|0)>>0]=124;l=n+(l*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0));break}else{Di(I,124,0,0,0)|0;break}}while(0);k=c[k+36>>2]|0;if(!k)break f}}while(0);do if(j|0){k=c[N+12>>2]|0;j=~j;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,N,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[N+108>>2];break}}while(0);m=N+108|0;j=c[m>>2]|0;if((c[N+112>>2]|0)>(j|0)){c[m>>2]=j+1;l=c[N+104>>2]|0;a[l+(j*20|0)>>0]=69;l=l+(j*20|0)+1|0;n=l+19|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(n|0))}else Di(N,69,0,0,0)|0;l=f+36|0;do if(c[l>>2]|0){k=c[U>>2]|0;j=c[O>>2]|0;if(j|0){if(k|0){if(c[k+480>>2]|0){Xd(k,j);break}aa=j;if((c[k+304>>2]|0)>>>0<=aa>>>0?(c[k+308>>2]|0)>>>0>aa>>>0:0){aa=k+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}else{c[f+4>>2]=c[O>>2];c[l>>2]=c[U+36>>2];c[f+12>>2]=c[U+12>>2]}while(0);if((a[_+81>>0]|0)==0?(c[l>>2]|0)==0:0){f=N+104|0;aa=c[f>>2]|0;Fi(N,Y+96|0);c[Q+4>>2]=c[m>>2];c[f>>2]=0;c[Q>>2]=aa}c[Q+8>>2]=c[U+44>>2];c[Q+12>>2]=c[U+40>>2];c[Q+20>>2]=g;c[R>>2]=c[U+136>>2];c[S>>2]=c[U+140>>2];l=c[N>>2]|0;kb(l,N);m=c[N+4>>2]|0;k=N+8|0;j=c[k>>2]|0;if(!m)c[l+4>>2]=j;else{c[m+8>>2]=j;j=c[k>>2]|0}if(j|0)c[j+4>>2]=m;c[N+20>>2]=1443283912;c[N>>2]=0;do if(l){if(c[l+480>>2]|0){Xd(l,N);break}aa=N;if((c[l+304>>2]|0)>>>0<=aa>>>0?(c[l+308>>2]|0)>>>0>aa>>>0:0){aa=l+300|0;c[N>>2]=c[aa>>2];c[aa>>2]=N}else P=370}else P=370;while(0);do if((P|0)==370)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{aa=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);l=c[U>>2]|0;j=c[U+64>>2]|0;u:do if(j|0){do if(l|0){if(c[l+480>>2]|0){Xd(l,j);break u}k=j;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;aa=l+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[U+68>>2]|0;if(j|0)ri(l,j);j=U+24|0;if(l){aa=l+272|0;c[aa>>2]=(c[aa>>2]|0)-(d[j>>0]|0)}}a[j>>0]=0;if(c[_+480>>2]|0){Xd(_,U);aa=Z;Ra=$;return aa|0}if((c[_+304>>2]|0)>>>0<=T>>>0?(c[_+308>>2]|0)>>>0>T>>>0:0){aa=_+300|0;c[U>>2]=c[aa>>2];c[aa>>2]=U;aa=Z;Ra=$;return aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}else{aa=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);aa=Z;Ra=$;return aa|0}return 0}function Om(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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;B=Ra;Ra=Ra+16|0;z=B;A=c[h+20>>2]|0;o=c[h+40>>2]|0;do if((A|0)==1){x=b[g+40>>1]|0;k=x<<16>>16;if(x<<16>>16>-1){if(!o){A=0;Ra=B;return A|0}l=c[(c[g+4>>2]|0)+(k<<4)>>2]|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(x<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;x=a[l>>0]|0;k=(d[208+(x&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(k|0)!=0))}if(!k){A=0;Ra=B;return A|0}else{x=0;w=0}}else{x=0;w=0}}else if(j){m=c[f>>2]|0;n=A<<2;a:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))y=19;else{A=1;Ra=B;return A|0}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];x=m+284|0;c[x>>2]=(c[x>>2]|0)+1;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;y=19}while(0);if((y|0)==19)k=_d(m,n,0)|0;if(!k){A=1;Ra=B;return A|0}else{c[j>>2]=k;x=k;w=k;break}}else{x=0;w=0}while(0);k=c[g+8>>2]|0;b:do if(k|0){u=(o|0)==0;v=(A|0)>0;s=g+4|0;t=(x|0)==0;r=k;c:while(1){do if(((A|0)==(e[r+50>>1]|0)?a[r+54>>0]|0:0)?(c[r+36>>2]|0)==0:0){if(u){q=r+55|0;if(((d[q>>0]|d[q+1>>0]<<8)&3)==2){y=29;break c}else break}d:do if(v){q=r+32|0;p=c[r+4>>2]|0;k=0;do{g=b[p+(k<<1)>>1]|0;j=g<<16>>16;if(g<<16>>16<0)break d;o=c[s>>2]|0;n=c[o+(j<<4)+8>>2]|0;n=(n|0)==0?34049:n;m=c[(c[q>>2]|0)+(k<<2)>>2]|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(l|0)!=0))do{m=m+1|0;n=n+1|0;g=a[m>>0]|0;l=(d[208+(g&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(g<<24>>24==0|(l|0)!=0));if(l|0)break d;o=c[o+(j<<4)>>2]|0;g=d[208+(d[o>>0]|0)>>0]|0;l=0;do{n=c[h+36+(l<<3)+4>>2]|0;j=a[n>>0]|0;m=(d[208+(j&255)>>0]|0)-g|0;if(!(j<<24>>24==0|(m|0)!=0)){j=o;do{n=n+1|0;j=j+1|0;C=a[n>>0]|0;m=(d[208+(C&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(m|0)!=0))}if(!m){y=45;break}l=l+1|0}while((l|0)<(A|0));if((y|0)==45){y=0;if(!t)c[x+(k<<2)>>2]=c[h+36+(l<<3)>>2]}if((l|0)==(A|0))break d;k=k+1|0}while((k|0)<(A|0))}else k=0;while(0);if((k|0)==(A|0))break c}while(0);k=c[r+20>>2]|0;if(!k)break b;else r=k}if((y|0)==29?(x|0)!=0&v:0){k=0;do{c[x+(k<<2)>>2]=c[h+36+(k<<3)>>2];k=k+1|0}while((k|0)!=(A|0))}c[i>>2]=r;C=0;Ra=B;return C|0}while(0);if(!(a[f+146>>0]|0)){C=c[h+8>>2]|0;c[z>>2]=c[c[h>>2]>>2];c[z+4>>2]=C;cd(f,44708,z)}k=c[f>>2]|0;if(!w){C=1;Ra=B;return C|0}if(k|0){if(c[k+480>>2]|0){Xd(k,w);C=1;Ra=B;return C|0}C=w;if((c[k+304>>2]|0)>>>0<=C>>>0?(c[k+308>>2]|0)>>>0>C>>>0:0){C=k+300|0;c[w>>2]=c[C>>2];c[C>>2]=w;C=1;Ra=B;return C|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}else{C=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);C=1;Ra=B;return C|0}return 0}function Pm(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0;A=f+8|0;o=c[A>>2]|0;a:do if(!o){r=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[r+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))L=15;else{J=0;break a}else{do if((e[r+276>>1]|0)>=224){o=r+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}o=r+296|0;p=c[o>>2]|0;if(!p){o=r+292|0;break}else{c[o>>2]=c[p>>2];K=r+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else o=r+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;L=15}while(0);if((L|0)==15)p=_d(r,224,0)|0;if(!p)J=0;else{o=p+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[p>>2]=r;o=r+4|0;q=c[o>>2]|0;if(q|0)c[q+4>>2]=p;c[p+8>>2]=q;c[p+4>>2]=0;c[o>>2]=p;c[p+20>>2]=381479589;c[p+12>>2]=f;c[A>>2]=p;Di(p,61,0,1,0)|0;J=p}}else J=o;while(0);K=(c[f+40>>2]|0)+-1|0;D=f+56|0;I=c[D>>2]|0;H=I+-1|0;c[D>>2]=H;do if((m|0)<0){o=d[j+24>>0]|0;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;D=c[J+104>>2]|0;a[D+(q*20|0)>>0]=46;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=o;c[D+(q*20|0)+8>>2]=H;c[D+(q*20|0)+12>>2]=0;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0;break}else{Di(J,46,o,H,0)|0;break}}while(0);v=j+20|0;o=c[v>>2]|0;if((o|0)>0){r=l+1|0;s=J+108|0;t=J+112|0;u=J+104|0;q=0;do{o=r+(c[k+(q<<2)>>2]|0)|0;p=c[s>>2]|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[u>>2]|0;a[D+(p*20|0)>>0]=50;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=o;c[D+(p*20|0)+8>>2]=H;c[D+(p*20|0)+12>>2]=0;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(J,50,o,H,0)|0;q=q+1|0;o=c[v>>2]|0}while((q|0)<(o|0));D=o}else D=o;do if(!n){if(!i){u=f+19|0;o=a[u>>0]|0;if(!(o<<24>>24)){G=f+44|0;t=(c[G>>2]|0)+1|0;c[G>>2]=t}else{t=o+-1<<24>>24;a[u>>0]=t;t=c[f+148+((t&255)<<2)>>2]|0}o=l+1+(c[k>>2]|0)|0;r=J+108|0;p=c[r>>2]|0;s=J+112|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;G=c[J+104>>2]|0;a[G+(p*20|0)>>0]=79;b[G+(p*20|0)+2>>1]=0;c[G+(p*20|0)+4>>2]=o;c[G+(p*20|0)+8>>2]=t;c[G+(p*20|0)+12>>2]=0;c[G+(p*20|0)+16>>2]=0;a[G+(p*20|0)+1>>0]=0}else Di(J,79,o,t,0)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;q=c[J+104>>2]|0;a[q+(o*20|0)>>0]=15;b[q+(o*20|0)+2>>1]=0;c[q+(o*20|0)+4>>2]=t;c[q+(o*20|0)+8>>2]=0;c[q+(o*20|0)+12>>2]=0;c[q+(o*20|0)+16>>2]=0;a[q+(o*20|0)+1>>0]=0;q=o}else q=Di(J,15,t,0,0)|0;if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;G=c[J+104>>2]|0;a[G+(o*20|0)>>0]=53;b[G+(o*20|0)+2>>1]=0;c[G+(o*20|0)+4>>2]=l;c[G+(o*20|0)+8>>2]=H;c[G+(o*20|0)+12>>2]=t;c[G+(o*20|0)+16>>2]=0;a[G+(o*20|0)+1>>0]=0}else Di(J,53,l,H,t)|0;o=c[r>>2]|0;if((o|0)>0)b[(c[J+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=144}Gj(f,K,g,h,108);o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=31;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=0;c[l+(o*20|0)+12>>2]=t;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,31,K,0,t)|0;o=c[r>>2]|0;if((c[s>>2]|0)>(o|0)){c[r>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else Di(J,11,0,H,0)|0;p=c[r>>2]|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){o=c[J+104>>2]|0;c[o+((((p|0)<2?-1:-2)+p|0)*20|0)+8>>2]=p;o=o+(((q|0)<0?p+-1|0:q)*20|0)|0}else{c[14829]=p;o=59308}c[o+8>>2]=p;if(!t)break;o=a[u>>0]|0;if((o&255)>=8)break;a[u>>0]=o+1<<24>>24;c[f+148+((o&255)<<2)>>2]=t;break}C=(D|0)==1;do if(C){o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){z=f+44|0;B=(c[z>>2]|0)+1|0;c[z>>2]=B;break}else{B=p+-1<<24>>24;a[o>>0]=B;B=c[f+148+((B&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)<(D|0)){z=f+44|0;B=c[z>>2]|0;c[z>>2]=B+D;B=B+1|0;break}else{c[o>>2]=p+D;c[q>>2]=r-D;B=p;break}}while(0);z=f+19|0;o=a[z>>0]|0;if(!(o<<24>>24)){x=f+44|0;y=(c[x>>2]|0)+1|0;c[x>>2]=y}else{y=o+-1<<24>>24;a[z>>0]=y;y=c[f+148+((y&255)<<2)>>2]|0}o=c[i+44>>2]|0;w=J+108|0;p=c[w>>2]|0;x=J+112|0;if((c[x>>2]|0)>(p|0)){c[w>>2]=p+1;n=c[J+104>>2]|0;a[n+(p*20|0)>>0]=108;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=K;c[n+(p*20|0)+8>>2]=o;c[n+(p*20|0)+12>>2]=g;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0}else Di(J,108,K,o,g)|0;o=c[A>>2]|0;q=Ij(f,i)|0;do if(q|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){A=c[o+104>>2]|0;g=(c[o+108>>2]|0)+-1|0;a[A+(g*20|0)+1>>0]=-9;c[A+(g*20|0)+16>>2]=q;break}if((c[p+480>>2]|0)==0?(g=(c[q>>2]|0)+-1|0,c[q>>2]=g,(g|0)==0):0){o=c[q+12>>2]|0;if(o|0){if(c[o+480>>2]|0){Xd(o,q);break}g=q;if((c[o+304>>2]|0)>>>0<=g>>>0?(c[o+308>>2]|0)>>>0>g>>>0:0){g=o+300|0;c[q>>2]=c[g>>2];c[g>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{g=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);u=(D|0)>0;if(u){p=l+1|0;q=J+104|0;o=0;do{r=p+(c[k+(o<<2)>>2]|0)|0;s=o+B|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;g=c[q>>2]|0;a[g+(t*20|0)>>0]=78;b[g+(t*20|0)+2>>1]=0;c[g+(t*20|0)+4>>2]=r;c[g+(t*20|0)+8>>2]=s;c[g+(t*20|0)+12>>2]=0;c[g+(t*20|0)+16>>2]=0;a[g+(t*20|0)+1>>0]=0}else Di(J,78,r,s,0)|0;o=o+1|0}while((o|0)!=(D|0))}do if((m|0)==1?(c[j>>2]|0)==(h|0):0){o=c[w>>2]|0;n=D+1+o|0;if(u){u=l+1|0;v=i+4|0;s=h+40|0;t=J+104|0;r=0;do{p=u+(c[k+(r<<2)>>2]|0)|0;q=b[(c[v>>2]|0)+(r<<1)>>1]|0;q=(q<<16>>16==(b[s>>1]|0)?0:(q<<16>>16)+1|0)+l|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;h=c[t>>2]|0;a[h+(o*20|0)>>0]=52;b[h+(o*20|0)+2>>1]=0;c[h+(o*20|0)+4>>2]=p;c[h+(o*20|0)+8>>2]=n;c[h+(o*20|0)+12>>2]=q;c[h+(o*20|0)+16>>2]=0;a[h+(o*20|0)+1>>0]=0}else Di(J,52,p,n,q)|0;o=c[w>>2]|0;if((o|0)>0)b[(c[t>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;r=r+1|0}while((r|0)!=(D|0))}if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=11;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=0;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=0;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0;break}else{Di(J,11,0,H,0)|0;break}}while(0);r=gl(c[f>>2]|0,i)|0;o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=92;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=B;c[l+(o*20|0)+8>>2]=D;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,92,B,D,y)|0;p=c[J>>2]|0;do if(a[p+81>>0]|0){if((D|0)!=-12)kg(p,D,r)}else{if((o|0)<0)o=(c[w>>2]|0)+-1|0;p=c[J+104>>2]|0;q=p+(o*20|0)|0;if((D|0)<=-1?(E=p+(o*20|0)+1|0,(a[E>>0]|0)==0):0){if((D|0)==-3){c[p+(o*20|0)+16>>2]=r;a[E>>0]=-3;break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[E>>0]=D;if((D|0)!=-12)break;l=r+12|0;c[l>>2]=(c[l>>2]|0)+1;break}Ei(J,q,r,D)}while(0);o=c[w>>2]|0;if((c[x>>2]|0)>(o|0)){c[w>>2]=o+1;l=c[J+104>>2]|0;a[l+(o*20|0)>>0]=29;b[l+(o*20|0)+2>>1]=0;c[l+(o*20|0)+4>>2]=K;c[l+(o*20|0)+8>>2]=H;c[l+(o*20|0)+12>>2]=y;c[l+(o*20|0)+16>>2]=0;a[l+(o*20|0)+1>>0]=0}else o=Di(J,29,K,H,y)|0;if(!(a[(c[J>>2]|0)+81>>0]|0)){H=c[J+104>>2]|0;a[H+(o*20|0)+1>>0]=-3;c[H+(o*20|0)+16>>2]=0}if(y|0?(F=a[z>>0]|0,(F&255)<8):0){a[z>>0]=F+1<<24>>24;c[f+148+((F&255)<<2)>>2]=y}if(!C){o=f+28|0;if((c[o>>2]|0)>=(D|0))break;c[o>>2]=D;c[f+32>>2]=B;break}if(B|0?(G=a[z>>0]|0,(G&255)<8):0){a[z>>0]=G+1<<24>>24;c[f+148+((G&255)<<2)>>2]=B}}while(0);o=a[j+24>>0]|0;p=o<<24>>24==0;do if(p){if(((0==0?(c[(c[f>>2]|0)+32>>2]&524288|0)==0:0)?(c[f+116>>2]|0)==0:0)?(a[f+20>>0]|0)==0:0){Uj(f,787,2,0,-1,4);break}if(!((m|0)<1|p^1)){L=c[f+116>>2]|0;a[((L|0)==0?f:L)+21>>0]=1;L=141}else L=141}else L=141;while(0);do if((L|0)==141){o=o&255;p=J+108|0;q=c[p>>2]|0;if((c[J+112>>2]|0)>(q|0)){c[p>>2]=q+1;f=c[J+104>>2]|0;a[f+(q*20|0)>>0]=-106;b[f+(q*20|0)+2>>1]=0;c[f+(q*20|0)+4>>2]=o;c[f+(q*20|0)+8>>2]=m;c[f+(q*20|0)+12>>2]=0;c[f+(q*20|0)+16>>2]=0;a[f+(q*20|0)+1>>0]=0;break}else{Di(J,150,o,m,0)|0;break}}while(0);p=c[J+12>>2]|0;o=0-I|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,J,o);o=J+108|0}else{m=J+108|0;c[(c[p+64>>2]|0)+(o<<2)>>2]=c[m>>2];o=m}p=c[o>>2]|0;if((c[J+112>>2]|0)>(p|0)){c[o>>2]=p+1;m=c[J+104>>2]|0;a[m+(p*20|0)>>0]=117;b[m+(p*20|0)+2>>1]=0;c[m+(p*20|0)+4>>2]=K;c[m+(p*20|0)+8>>2]=0;c[m+(p*20|0)+12>>2]=0;c[m+(p*20|0)+16>>2]=0;a[m+(p*20|0)+1>>0]=0;return}else{Di(J,117,K,0,0)|0;return}}function Qm(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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;P=Ra;Ra=Ra+80|0;N=P;M=P+40|0;L=P+8|0;O=c[f>>2]|0;q=f+8|0;n=c[q>>2]|0;a:do if(!n){if((c[f+116>>2]|0)==0?(b[O+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[O+272>>2]|0)if(!(a[O+81>>0]|0))p=15;else{K=0;break a}else{do if((e[O+276>>1]|0)>=224){n=O+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}n=O+296|0;o=c[n>>2]|0;if(!o){n=O+292|0;break}else{c[n>>2]=c[o>>2];K=O+284|0;c[K>>2]=(c[K>>2]|0)+1;break b}}else n=O+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;p=15}while(0);if((p|0)==15)o=_d(O,224,0)|0;if(!o)K=0;else{n=o+104|0;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=O;n=O+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[q>>2]=o;Di(o,61,0,1,0)|0;K=o}}else K=n;while(0);do if((m|0)<0){n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;H=c[K+104>>2]|0;a[H+(p*20|0)>>0]=46;b[H+(p*20|0)+2>>1]=0;c[H+(p*20|0)+4>>2]=n;c[H+(p*20|0)+8>>2]=0;c[H+(p*20|0)+12>>2]=0;c[H+(p*20|0)+16>>2]=0;a[H+(p*20|0)+1>>0]=0;H=p;break}else{H=Di(K,46,n,0,0)|0;break}}else H=0;while(0);t=j+20|0;if((c[t>>2]|0)>0){u=(i|0)==0;v=M+4|0;w=i+4|0;x=(k|0)==0;y=j+36|0;z=M+4|0;A=h+40|0;B=h+4|0;C=l+1|0;D=M+4|0;E=M+4|0;r=0;s=0;do{if(u)o=-1;else o=b[(c[w>>2]|0)+(s<<1)>>1]|0;p=o&65535;q=c[f>>2]|0;c[M>>2]=0;c[v>>2]=0;n=oj(q,168,M,0)|0;do if(!n)n=0;else{if(p<<16>>16>-1?(b[A>>1]|0)!=p<<16>>16:0){p=c[B>>2]|0;c[n+28>>2]=C+o;a[n+1>>0]=a[p+(o<<4)+13>>0]|0;o=c[p+(o<<4)+8>>2]|0;if(o|0){c[M>>2]=o;q=(Eu(o)|0)&1073741823;c[D>>2]=q;if((q|0)!=0?(F=oj(c[f>>2]|0,106,M,0)|0,(F|0)!=0):0){c[F+12>>2]=n;n=F+4|0;c[n>>2]=c[n>>2]|4352;n=F}break}o=c[c[q+8>>2]>>2]|0;c[M>>2]=o;if(o){q=(Eu(o)|0)&1073741823;c[E>>2]=q;if((q|0)!=0?(G=oj(c[f>>2]|0,106,M,0)|0,(G|0)!=0):0){c[G+12>>2]=n;n=G+4|0;c[n>>2]=c[n>>2]|4352;n=G}}else c[E>>2]=0;break}c[n+28>>2]=l;a[n+1>>0]=68}while(0);o=c[(c[(c[j>>2]|0)+4>>2]|0)+(c[(x?y:k+(s<<2)|0)>>2]<<16>>16<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[z>>2]=o;r=Xk(O,r,ej(f,53,n,oj(O,59,M,0)|0)|0)|0;s=s+1|0}while((s|0)<(c[t>>2]|0));n=j}else{r=0;n=j}if((m|0)>0?(c[n>>2]|0)==(h|0):0){if(!(c[h+36>>2]&32)){n=c[f>>2]|0;c[M>>2]=0;c[M+4>>2]=0;n=oj(n,168,M,0)|0;if(!n)n=0;else{c[n+28>>2]=l;a[n+1>>0]=68}o=c[g+48>>2]|0;c[M>>2]=0;c[M+4>>2]=0;p=oj(O,162,M,0)|0;if(p|0){c[p+44>>2]=h;c[p+28>>2]=o;b[p+32>>1]=-1}n=ej(f,52,n,p)|0}else{C=i+50|0;if(!(b[C>>1]|0))n=0;else{y=i+4|0;z=M+4|0;A=h+4|0;B=M+4|0;u=h+40|0;v=l+1|0;w=M+4|0;x=M+4|0;n=0;t=0;do{p=b[(c[y>>2]|0)+(t<<1)>>1]|0;q=c[f>>2]|0;c[M>>2]=0;c[z>>2]=0;o=oj(q,168,M,0)|0;s=p<<16>>16;do if(!o)p=0;else{if(p<<16>>16>-1?(b[u>>1]|0)!=p<<16>>16:0){p=c[A>>2]|0;c[o+28>>2]=v+s;a[o+1>>0]=a[p+(s<<4)+13>>0]|0;p=c[p+(s<<4)+8>>2]|0;if(p|0){c[M>>2]=p;h=(Eu(p)|0)&1073741823;c[w>>2]=h;if((h|0)!=0?(I=oj(c[f>>2]|0,106,M,0)|0,(I|0)!=0):0){c[I+12>>2]=o;o=I+4|0;c[o>>2]=c[o>>2]|4352;o=I}p=o;break}p=c[c[q+8>>2]>>2]|0;c[M>>2]=p;if(p){h=(Eu(p)|0)&1073741823;c[x>>2]=h;if((h|0)!=0?(J=oj(c[f>>2]|0,106,M,0)|0,(J|0)!=0):0){c[J+12>>2]=o;o=J+4|0;c[o>>2]=c[o>>2]|4352;o=J}}else c[x>>2]=0;p=o;break}c[o+28>>2]=l;a[o+1>>0]=68;p=o}while(0);o=c[(c[A>>2]|0)+(s<<4)>>2]|0;c[M>>2]=o;if(!o)o=0;else o=(Eu(o)|0)&1073741823;c[B>>2]=o;n=Xk(O,n,ej(f,45,p,oj(O,59,M,0)|0)|0)|0;t=t+1|0}while(t>>>0<(e[C>>1]|0)>>>0)}n=ej(f,19,n,0)|0}r=Xk(O,r,n)|0}s=L+8|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[L+4>>2]=g;c[L>>2]=f;s=(r|0)==0;do if(!s){p=L+24|0;b[p>>1]=0;c[M>>2]=f;c[M+4>>2]=125;c[M+8>>2]=126;c[M+12>>2]=0;c[M+24>>2]=L;n=r+24|0;o=f+208|0;L=(c[o>>2]|0)+(c[n>>2]|0)|0;c[o>>2]=L;o=c[(c[f>>2]|0)+120>>2]|0;if((o|0)<(L|0)){c[N>>2]=o;cd(f,41637,N);break}else{_j(M,r)|0;N=(c[M>>2]|0)+208|0;c[N>>2]=(c[N>>2]|0)-(c[n>>2]|0);N=r+4|0;c[N>>2]=c[N>>2]|b[p>>1]&-32752&65535;break}}while(0);if(!(c[f+36>>2]|0)){q=ql(f,g,r,0,0,0,0)|0;n=d[j+24>>0]|0;o=K+108|0;p=c[o>>2]|0;if((c[K+112>>2]|0)>(p|0)){c[o>>2]=p+1;j=c[K+104>>2]|0;a[j+(p*20|0)>>0]=-106;b[j+(p*20|0)+2>>1]=0;c[j+(p*20|0)+4>>2]=n;c[j+(p*20|0)+8>>2]=m;c[j+(p*20|0)+12>>2]=0;c[j+(p*20|0)+16>>2]=0;a[j+(p*20|0)+1>>0]=0}else Di(K,150,n,m,0)|0;if(q|0)sl(q)}if(!s)ni(O,r);if(!H){Ra=P;return}o=c[K+108>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))n=(c[K+104>>2]|0)+(((H|0)<0?o+-1|0:H)*20|0)|0;else n=59308;c[n+8>>2]=o;Ra=P;return}function Rm(f,g,h,i){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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;aa=Ra;Ra=Ra+48|0;V=aa+16|0;Q=aa+36|0;T=aa+32|0;W=aa+8|0;R=aa;S=aa+24|0;$=c[f>>2]|0;_=(i|0)!=0;i=_&1;Y=a[h+25+i>>0]|0;U=Y<<24>>24==7;if(U?!(0==0?(c[$+32>>2]&524288|0)==0:0):0){$=0;Ra=aa;return $|0}Z=h+28+(i<<2)|0;i=c[Z>>2]|0;if(Y<<24>>24==0|(i|0)!=0){$=i;Ra=aa;return $|0}c[Q>>2]=0;c[T>>2]=0;a:do if(!(Om(f,g,h,Q,T)|0)){u=h+20|0;if((c[u>>2]|0)>0){w=29616;v=c[w>>2]|0;w=c[w+4>>2]|0;y=29624;x=c[y>>2]|0;y=c[y+4>>2]|0;z=h+36|0;A=g+4|0;B=g+40|0;C=S+4|0;D=R+4|0;P=Y<<24>>24!=7&(_|Y<<24>>24!=10);E=$+272|0;F=$+276|0;G=$+81|0;H=$+288|0;I=$+300|0;J=f+200|0;K=$+296|0;M=$+284|0;N=$+292|0;O=f+272|0;s=0;t=0;m=0;j=0;while(1){k=V;c[k>>2]=v;c[k+4>>2]=w;k=W;c[k>>2]=x;c[k+4>>2]=y;k=c[T>>2]|0;k=c[((k|0)==0?z:k+(t<<2)|0)>>2]|0;i=c[Q>>2]|0;if(!i)i=B;else i=(c[i+4>>2]|0)+(t<<1)|0;i=c[(c[A>>2]|0)+(b[i>>1]<<4)>>2]|0;c[S>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[C>>2]=i;i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)>>2]|0;c[R>>2]=i;if(!i)i=0;else i=(Eu(i)|0)&1073741823;c[D>>2]=i;r=oj($,59,V,0)|0;r=ej(f,134,r,oj($,59,S,0)|0)|0;j=Xk($,j,ej(f,53,r,oj($,59,R,0)|0)|0)|0;if(_){q=oj($,59,V,0)|0;q=ej(f,134,q,oj($,59,S,0)|0)|0;r=oj($,59,W,0)|0;s=Xk($,s,ej(f,45,q,ej(f,134,r,oj($,59,S,0)|0)|0)|0)|0}b:do if(P){c:do switch(Y<<24>>24){case 10:{i=ej(f,134,oj($,59,W,0)|0,oj($,59,S,0)|0)|0;break}case 9:{i=c[(c[(c[h>>2]|0)+4>>2]|0)+(k<<4)+4>>2]|0;if(i|0){i=dk($,i,0,0)|0;break c}d:do if(c[E>>2]|0)if(!(a[G>>0]|0))X=28;else{i=0;break c}else{do if((e[F>>1]|0)<52)i=H;else{i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}i=c[K>>2]|0;if(!i){i=N;break}c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break d}while(0);c[i>>2]=(c[i>>2]|0)+1;X=28}while(0);if((X|0)==28){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}break}default:{do if(c[E>>2]|0)if(!(a[G>>0]|0))X=39;else{i=0;break c}else{if((e[F>>1]|0)>=52){i=c[I>>2]|0;if(i|0){c[I>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}i=c[K>>2]|0;if(!i)i=N;else{c[K>>2]=c[i>>2];c[M>>2]=(c[M>>2]|0)+1;break}}else i=H;c[i>>2]=(c[i>>2]|0)+1;X=39}while(0);if((X|0)==39){X=0;i=_d($,52,0)|0}if(i){k=i;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[i>>0]=114;b[i+34>>1]=-1;c[i+24>>2]=1}}}while(0);r=nj(c[f>>2]|0,m,i)|0;if(r){q=(c[r>>2]|0)+-1|0;l=c[f>>2]|0;o=c[R>>2]|0;p=c[D>>2]|0;e:do if(o){m=Sv(p|0,0,1,0)|0;n=L()|0;f:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))X=54;else{m=0;break e}else{do if(0<0|(0==0?p>>>0<(e[l+276>>1]|0)>>>0:0)){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];n=l+284|0;c[n>>2]=(c[n>>2]|0)+1;break f}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;X=54}while(0);if((X|0)==54){X=0;i=_d(l,m,n)|0}if(i){ew(i|0,o|0,p|0)|0;a[i+p>>0]=0;m=i}else m=0}else m=0;while(0);c[r+4+(q*20|0)+4>>2]=m;if((d[J>>0]|0)>1){l=c[f>>2]|0;g:do if(!l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;X=81;break}i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=r;break b}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){i=r;break b}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}k=l+296|0;i=c[k>>2]|0;if(!i){i=l+292|0;break}else{c[k>>2]=c[i>>2];X=l+284|0;c[X>>2]=(c[X>>2]|0)+1;X=81;break g}}else i=l+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(l,16,0)|0;X=81}while(0);if((X|0)==81){X=0;if(!i){i=r;break}}o=i+4|0;p=o;a[p>>0]=0;a[p+1>>0]=0;a[p+2>>0]=0;a[p+3>>0]=0;o=o+4|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;c[i>>2]=m;o=R;p=c[o+4>>2]|0;q=i+4|0;c[q>>2]=c[o>>2];c[q+4>>2]=p;c[i+12>>2]=c[O>>2];c[O>>2]=i;i=r}else i=r}else i=0}else i=m;while(0);t=t+1|0;if((t|0)>=(c[u>>2]|0)){t=i;break}else m=i}}else{s=0;t=0;j=0}i=c[T>>2]|0;do if(i|0){if($|0){if(c[$+480>>2]|0){Xd($,i);break}T=i;if((c[$+304>>2]|0)>>>0<=T>>>0?(c[$+308>>2]|0)>>>0>T>>>0:0){T=$+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);o=c[c[h>>2]>>2]|0;if(!o)n=0;else n=(Eu(o)|0)&1073741823;if(U){c[W>>2]=o;c[W+4>>2]=n;c[V>>2]=32436;c[V+4>>2]=29;i=oj($,71,V,0)|0;if(!i)i=nj(c[f>>2]|0,0,0)|0;else{a[i+1>>0]=2;i=nj(c[f>>2]|0,0,i)|0}r=mj(f,i,pj(f,0,W,0)|0,j,0,0,0,0,0)|0;p=0}else{r=0;p=j}q=$+272|0;i=(c[q>>2]|0)+1|0;c[q>>2]=i;m=n+81|0;h:do if(!$){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;X=124;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){W=c[14978]|0;V=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=W>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(j){i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;l=j;X=125}else{l=j;X=125}}else{m=0;k=0;i=s;l=0}}else{if(i){if(a[$+81>>0]|0){m=0;k=0;i=s;l=0;break}}else{do if(!(0<0|(0==0?(e[$+276>>1]|0)>>>0>>0:0))){j=$+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}j=$+296|0;i=c[j>>2]|0;if(!i){i=$+292|0;break}else{c[j>>2]=c[i>>2];X=$+284|0;c[X>>2]=(c[X>>2]|0)+1;X=124;break h}}else i=$+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d($,m,0)|0;X=124}while(0);if((X|0)==124)if(!i){m=0;k=0;i=s;l=0}else{l=i;X=125}if((X|0)==125){gw(l|0,0,m|0)|0;k=l+36|0;c[l+28>>2]=k;W=l+80|0;c[l+48>>2]=W;ew(W|0,o|0,n|0)|0;if(!p)i=0;else i=dk($,p,1,0)|0;c[l+52>>2]=i;W=gk($,t,1)|0;c[l+56>>2]=W;W=fk($,r,1)|0;c[l+44>>2]=W;if(!s){m=l;i=0}else{j=ej(f,19,s,0)|0;if(!j)i=0;else i=dk($,j,1,0)|0;c[l+12>>2]=i;m=l;i=j}}c[q>>2]=(c[q>>2]|0)+-1;if(p|0)ni($,p);if(i|0)ni($,i);if(t|0)ri($,t);if(r|0)pi($,r,1);if((a[$+81>>0]|0)!=1){switch(Y<<24>>24){case 7:{i=-125;break}case 10:{if(_)X=159;else i=121;break}default:X=159}if((X|0)==159)i=122;a[k>>0]=i;c[k+4>>2]=m;$=c[g+72>>2]|0;c[m+20>>2]=$;c[m+24>>2]=$;c[Z>>2]=m;a[m+8>>0]=_?122:121;$=l;Ra=aa;return $|0}if(l|0){j=c[l+28>>2]|0;i=c[j+16>>2]|0;if(i|0)ni($,i);i=c[j+20>>2]|0;if(i|0)ri($,i);i=c[j+8>>2]|0;if(i|0)pi($,i,1);i=c[l+12>>2]|0;if(i|0)ni($,i);if(c[$+480>>2]|0){Xd($,m);break}i=l;do if((c[$+304>>2]|0)>>>0<=i>>>0){if((c[$+308>>2]|0)>>>0<=i>>>0)break;$=$+300|0;c[l>>2]=c[$>>2];c[$>>2]=l;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{$=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}}while(0);$=0;Ra=aa;return $|0} function Sm(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;p=c[d+8>>2]|0;e=c[d+112>>2]|0;if(!e)return;r=(c[d>>2]|0)+16|0;s=d+19|0;t=d+44|0;n=p+108|0;u=p+112|0;o=p+104|0;while(1){j=c[r>>2]|0;k=e+8|0;l=c[k>>2]|0;m=c[e+12>>2]|0;f=a[s>>0]|0;if(!(f<<24>>24)){i=(c[t>>2]|0)+1|0;c[t>>2]=i}else{i=f+-1<<24>>24;a[s>>0]=i;i=c[d+148+((i&255)<<2)>>2]|0}g=m+2|0;f=c[n>>2]|0;h=f+7|0;if((c[u>>2]|0)>(f|0)){c[n>>2]=f+1;v=c[o>>2]|0;a[v+(f*20|0)>>0]=55;b[v+(f*20|0)+2>>1]=0;c[v+(f*20|0)+4>>2]=g;c[v+(f*20|0)+8>>2]=h;c[v+(f*20|0)+12>>2]=m;c[v+(f*20|0)+16>>2]=0;a[v+(f*20|0)+1>>0]=0}else Di(p,55,g,h,m)|0;Gj(d,0,c[k>>2]|0,c[(c[j+(l<<4)+12>>2]|0)+72>>2]|0,109);f=ed(p,5,18320)|0;if(!f){e=14;break}v=m+1|0;c[f+4>>2]=v;c[f+28>>2]=v;c[f+44>>2]=m+-1;c[f+52>>2]=i;c[f+68>>2]=i;c[f+72>>2]=v;b[f+62>>1]=8;if(i|0?(q=a[s>>0]|0,(q&255)<8):0){a[s>>0]=q+1<<24>>24;c[d+148+((q&255)<<2)>>2]=i}e=c[e>>2]|0;if(!e){e=14;break}}if((e|0)==14)return}function Tm(f,g,h,i,j,k,l,m,n,o,p,q,r){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;r=r|0;var 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,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0,Ja=0;Ja=Ra;Ra=Ra+48|0;T=Ja+16|0;S=Ja+8|0;P=Ja;Q=Ja+20|0;Ha=(l|0)!=0;U=c[f>>2]|0;Ia=f+8|0;s=c[Ia>>2]|0;a:do if(!s){if((c[f+116>>2]|0)==0?(b[U+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[U+272>>2]|0)if(!(a[U+81>>0]|0))Ca=15;else{Ga=0;break a}else{do if((e[U+276>>1]|0)>=224){s=U+300|0;t=c[s>>2]|0;if(t|0){c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}s=U+296|0;t=c[s>>2]|0;if(!t){s=U+292|0;break}else{c[s>>2]=c[t>>2];Ga=U+284|0;c[Ga>>2]=(c[Ga>>2]|0)+1;break b}}else s=U+288|0;while(0);c[s>>2]=(c[s>>2]|0)+1;Ca=15}while(0);if((Ca|0)==15)t=_d(U,224,0)|0;if(!t)Ga=0;else{y=t+104|0;z=y+120|0;do{c[y>>2]=0;y=y+4|0}while((y|0)<(z|0));c[t>>2]=U;s=U+4|0;u=c[s>>2]|0;if(u|0)c[u+4>>2]=t;c[t+8>>2]=u;c[t+4>>2]=0;c[s>>2]=t;c[t+20>>2]=381479589;c[t+12>>2]=f;c[Ia>>2]=t;Di(t,61,0,1,0)|0;Ga=t}}else Ga=s;while(0);t=b[g+42>>1]|0;M=t<<16>>16;Fa=g+36|0;if(!(c[Fa>>2]&32)){Ea=0;Da=1}else{s=g+8|0;while(1){s=c[s>>2]|0;Ea=s+55|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2)break;else s=s+20|0}Ea=s;Da=e[s+50>>1]|0}if(t<<16>>16>0){A=g+40|0;B=(q|0)==0;C=g+4|0;D=n<<24>>24==11;E=k+1|0;F=Ga+108|0;H=Ga+112|0;I=f+56|0;J=f+116|0;K=Ga+104|0;L=Ga+12|0;z=0;do{c:do if((z|0)!=(b[A>>1]|0)){if(!B?(c[q+(z<<2)>>2]|0)<0:0)break;u=c[C>>2]|0;s=a[u+(z<<4)+12>>0]|0;if(s<<24>>24){Ba=D?(s<<24>>24==11?2:s):n;s=Ba&255;if(Ba<<24>>24==5)s=(c[u+(z<<4)+4>>2]|0)==0?2:s;switch((s&255)<<24>>24){case 5:{Ca=33;break}case 2:{t=0;Ca=51;break}case 3:case 1:{t=0;break}default:{s=z+E|0;t=c[F>>2]|0;if((c[H>>2]|0)>(t|0)){c[F>>2]=t+1;Ba=c[K>>2]|0;a[Ba+(t*20|0)>>0]=50;b[Ba+(t*20|0)+2>>1]=0;c[Ba+(t*20|0)+4>>2]=s;c[Ba+(t*20|0)+8>>2]=o;c[Ba+(t*20|0)+12>>2]=0;c[Ba+(t*20|0)+16>>2]=0;a[Ba+(t*20|0)+1>>0]=0;break c}else{Di(Ga,50,s,o,0)|0;break c}}}do if((Ca|0)==33){Ca=0;t=(c[I>>2]|0)+-1|0;c[I>>2]=t;y=z+E|0;s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ba=c[K>>2]|0;a[Ba+(s*20|0)>>0]=51;b[Ba+(s*20|0)+2>>1]=0;c[Ba+(s*20|0)+4>>2]=y;c[Ba+(s*20|0)+8>>2]=t;c[Ba+(s*20|0)+12>>2]=0;c[Ba+(s*20|0)+16>>2]=0;a[Ba+(s*20|0)+1>>0]=0}else Di(Ga,51,y,t,0)|0;s=c[(c[C>>2]|0)+(z<<4)+4>>2]|0;do if(s){if((a[s>>0]|0)!=-88){O=Jj(f,s,y)|0;Ca=43;break}w=c[Ia>>2]|0;s=c[s+28>>2]|0;u=w+108|0;v=c[u>>2]|0;if((c[w+112>>2]|0)>(v|0)){c[u>>2]=v+1;Ba=c[w+104>>2]|0;a[Ba+(v*20|0)>>0]=78;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=s;c[Ba+(v*20|0)+8>>2]=y;c[Ba+(v*20|0)+12>>2]=0;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0;break}else{Di(w,78,s,y,0)|0;break}}else{O=Jj(f,0,y)|0;Ca=43}while(0);do if(((Ca|0)==43?(0,(O|0)!=(y|0)):0)?(N=c[Ia>>2]|0,N|0):0){s=N+108|0;u=c[s>>2]|0;if((c[N+112>>2]|0)>(u|0)){c[s>>2]=u+1;Ca=c[N+104>>2]|0;a[Ca+(u*20|0)>>0]=79;b[Ca+(u*20|0)+2>>1]=0;c[Ca+(u*20|0)+4>>2]=O;c[Ca+(u*20|0)+8>>2]=y;c[Ca+(u*20|0)+12>>2]=0;c[Ca+(u*20|0)+16>>2]=0;a[Ca+(u*20|0)+1>>0]=0;break}else{Di(N,79,O,y,0)|0;break}}while(0);s=c[F>>2]|0;if((c[H>>2]|0)>(s|0)){c[F>>2]=s+1;Ca=c[K>>2]|0;a[Ca+(s*20|0)>>0]=51;b[Ca+(s*20|0)+2>>1]=0;c[Ca+(s*20|0)+4>>2]=y;c[Ca+(s*20|0)+8>>2]=t;c[Ca+(s*20|0)+12>>2]=0;c[Ca+(s*20|0)+16>>2]=0;a[Ca+(s*20|0)+1>>0]=0;s=2;Ca=51;break}else{Di(Ga,51,y,t,0)|0;s=2;Ca=51;break}}while(0);if((Ca|0)==51){Ca=0;u=c[J>>2]|0;a[((u|0)==0?f:u)+21>>0]=1;u=c[C>>2]|0}w=c[u+(z<<4)>>2]|0;c[P>>2]=c[g>>2];c[P+4>>2]=w;w=dd(U,40358,P)|0;u=z+E|0;v=c[F>>2]|0;if((c[H>>2]|0)>(v|0)){c[F>>2]=v+1;Ba=c[K>>2]|0;a[Ba+(v*20|0)>>0]=68;b[Ba+(v*20|0)+2>>1]=0;c[Ba+(v*20|0)+4>>2]=1299;c[Ba+(v*20|0)+8>>2]=s;c[Ba+(v*20|0)+12>>2]=u;c[Ba+(v*20|0)+16>>2]=0;a[Ba+(v*20|0)+1>>0]=0}else Di(Ga,68,1299,s,u)|0;s=c[Ga>>2]|0;do if(a[s+81>>0]|0){if(w|0){if(s|0){if(c[s+480>>2]|0){Xd(s,w);break}Ba=w;if((c[s+304>>2]|0)>>>0<=Ba>>>0?(c[s+308>>2]|0)>>>0>Ba>>>0:0){Ba=s+300|0;c[w>>2]=c[Ba>>2];c[Ba>>2]=w;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{Ba=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}}}else{Aa=c[K>>2]|0;Ba=(c[F>>2]|0)+-1|0;a[Aa+(Ba*20|0)+1>>0]=-7;c[Aa+(Ba*20|0)+16>>2]=w}while(0);u=c[F>>2]|0;if((u|0)>0)b[(c[K>>2]|0)+((u+-1|0)*20|0)+2>>1]=1;if(t|0){v=c[L>>2]|0;s=~t;if(((c[v+56>>2]|0)+(c[v+60>>2]|0)|0)<0){mk(v,Ga,s);break}else{c[(c[v+64>>2]|0)+(s<<2)>>2]=u;break}}}}while(0);z=z+1|0}while((z|0)!=(M|0))}B=c[g+24>>2]|0;if(B|0?(0==0?(c[U+32>>2]&512|0)==0:0):0){C=f+52|0;c[C>>2]=~k;t=n<<24>>24==11?2:n&255;d:do if((c[B>>2]|0)>0){D=f+56|0;y=Q+20|0;z=Q+4|0;A=Q+24|0;E=Ga+108|0;F=Ga+112|0;H=Ga+12|0;I=Ga+104|0;if(!q){w=0;while(1){Aa=c[B+4+(w*20|0)>>2]|0;v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,Aa,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0)mk(u,Ga,s);else c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];w=w+1|0;if((w|0)>=(c[B>>2]|0))break d}}if(!(m<<24>>24)){w=0;do{s=c[B+4+(w*20|0)>>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[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]&-3)<<24>>24!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}else{w=0;do{s=c[B+4+(w*20|0)>>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[z>>2]=136;c[A>>2]=q;do if((s|0)!=0?(_j(Q,s)|0,(a[y>>0]|0)!=0):0){v=c[D>>2]|0;Ba=v+-1|0;c[D>>2]=Ba;tk(f,s,Ba,16);do if((t|0)==4){s=c[E>>2]|0;if((c[F>>2]|0)>(s|0)){c[E>>2]=s+1;t=c[I>>2]|0;a[t+(s*20|0)>>0]=11;b[t+(s*20|0)+2>>1]=0;c[t+(s*20|0)+4>>2]=0;c[t+(s*20|0)+8>>2]=o;c[t+(s*20|0)+12>>2]=0;c[t+(s*20|0)+16>>2]=0;a[t+(s*20|0)+1>>0]=0;t=4;break}else{Di(Ga,11,0,o,0)|0;t=4;break}}else{s=c[B+4+(w*20|0)+4>>2]|0;if(!s)s=c[g>>2]|0;t=(t|0)==5?2:t;Uj(f,275,t,s,0,3)}while(0);u=c[H>>2]|0;s=0-v|0;if(((c[u+56>>2]|0)+(c[u+60>>2]|0)|0)<0){mk(u,Ga,s);break}else{c[(c[u+64>>2]|0)+(s<<2)>>2]=c[E>>2];break}}while(0);w=w+1|0}while((w|0)<(c[B>>2]|0))}}while(0);c[C>>2]=0}do if(r)if(c[r>>2]|0){t=c[r+16>>2]|0;if(t){s=Ga+108|0;u=c[s>>2]|0;if((c[Ga+112>>2]|0)>(u|0)){c[s>>2]=u+1;y=c[Ga+104>>2]|0;a[y+(u*20|0)>>0]=11;y=y+(u*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));Ba=t;Aa=u;break}else{Ba=t;Aa=Di(Ga,11,0,0,0)|0;break}}else{Ba=0;Aa=0}}else{n=4;r=0;Ba=0;Aa=0}else{r=0;Ba=0;Aa=0}while(0);if(m<<24>>24!=0&(Ea|0)==0){t=f+56|0;D=c[t>>2]|0;v=D+-1|0;c[t>>2]=v;t=a[g+48>>0]|0;s=n&255;t=n<<24>>24==11?(t<<24>>24==11?2:t&255):s;if((r|0)!=0?(c[r+16>>2]|0)==0:0){E=0;t=(c[r+8>>2]|0)==0?4:6}else Ca=135;do if((Ca|0)==135)if(!((t|0)!=5|(t|0)==(s|0)))if(c[g+8>>2]|0){s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){u=t+1|0;c[s>>2]=u;y=c[Ga+104>>2]|0;a[y+(t*20|0)>>0]=11;y=y+(t*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));E=u;t=5;break}else{E=(Di(Ga,11,0,0,0)|0)+1|0;t=5;break}}else{E=0;t=5}else E=0;while(0);C=Ga+108|0;s=c[C>>2]|0;B=Ga+112|0;if(Ha){if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=53;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=k;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=l;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,53,k,v,l)|0;s=c[C>>2]|0;if((s|0)>0)b[(c[Ga+104>>2]|0)+((s+-1|0)*20|0)+2>>1]=144}if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;za=c[Ga+104>>2]|0;a[za+(s*20|0)>>0]=31;b[za+(s*20|0)+2>>1]=0;c[za+(s*20|0)+4>>2]=i;c[za+(s*20|0)+8>>2]=v;c[za+(s*20|0)+12>>2]=k;c[za+(s*20|0)+16>>2]=0;a[za+(s*20|0)+1>>0]=0}else Di(Ga,31,i,v,k)|0;e:do switch(t|0){case 3:case 2:case 1:{Ca=151;break}case 5:{s=c[f>>2]|0;A=c[s+32>>2]|0;do if(!((0==0?(c[U+32>>2]&8192|0)==0:0)|(A&262144|0)==0&0==0)?(R=c[(c[s+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){z=c[g+72>>2]|0;if((z|0)!=(R|0)?(x=c[R+48>>2]|0,(x|0)!=0):0){y=g+68|0;s=0;do{w=c[x+8>>2]|0;do if((c[w+24>>2]|0)==(z|0)){u=c[w+4>>2]|0;v=c[g>>2]|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(za<<24>>24==0|(t|0)!=0))do{u=u+1|0;v=v+1|0;za=a[u>>0]|0;t=(d[208+(za&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(t|0)!=0));if(t|0)break;if(!s)s=c[y>>2]|0;c[w+32>>2]=s;s=w}while(0);x=c[x>>2]|0}while((x|0)!=0);if(!s)Ca=170}else Ca=170;if((Ca|0)==170){s=c[g+68>>2]|0;if(!s){Ca=176;break}}t=0;u=s;do{if((a[u+8>>0]|0)==121)t=t|d[u+9>>0];u=c[u+32>>2]|0}while((u|0)!=0);if((s|0)==0|(t|0)==0)Ca=176}else Ca=176;while(0);do if((Ca|0)==176){if(!((A&16384|0)==0&0==0)){y=c[g>>2]|0;v=c[g+72>>2]|0;w=c[v+68>>2]|0;if(!w){t=v+60|0;s=v+64|0}else{t=a[y>>0]|0;if(!(t<<24>>24))s=0;else{s=0;u=y;do{u=u+1|0;s=G(s+(d[208+(t&255)>>0]|0)|0,-1640531535)|0;t=a[u>>0]|0}while(t<<24>>24!=0)}s=(s>>>0)%((c[v+56>>2]|0)>>>0)|0;t=w+(s<<3)|0;s=w+(s<<3)+4|0}t=c[t>>2]|0;f:do if(!t)s=59292;else{x=d[208+(d[y>>0]|0)>>0]|0;while(1){s=c[s>>2]|0;t=t+-1|0;v=c[s+12>>2]|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-x|0;if(!(za<<24>>24==0|(u|0)!=0)){w=y;do{v=v+1|0;w=w+1|0;za=a[v>>0]|0;u=(d[208+(za&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(u|0)!=0))}if(!u)break f;if(!t){s=59292;break}}}while(0);if(c[s+8>>2]|0){s=0;break}if(c[g+16>>2]|0){s=0;break}}if(!(c[g+8>>2]|0)){u=1;break e}u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Mm(f,g,i,j,0,-1);u=1;break e}while(0);u=c[f+116>>2]|0;a[((u|0)==0?f:u)+20>>0]=1;Im(f,g,s,i,j,k,1,0,5,1,-1);u=1;break}case 6:{za=r+8|0;Ca=r+12|0;tj(f,ik(c[f>>2]|0,c[r+20>>2]|0,0)|0,c[za>>2]|0,c[Ca>>2]|0,2,r);c[za>>2]=0;c[Ca>>2]=0;Ca=196;break}case 4:{Ca=196;break}default:{t=2;Ca=151}}while(0);do if((Ca|0)==151){s=b[g+40>>1]|0;v=c[f>>2]|0;u=c[g>>2]|0;if(s<<16>>16>-1){s=c[(c[g+4>>2]|0)+(s<<16>>16<<4)>>2]|0;c[S>>2]=u;c[S+4>>2]=s;u=1555;s=dd(v,40358,S)|0}else{c[T>>2]=u;u=2579;s=dd(v,44808,T)|0}Uj(f,u,t,s,-7,2);u=0}else if((Ca|0)==196){s=c[C>>2]|0;if((c[B>>2]|0)>(s|0)){c[C>>2]=s+1;u=c[Ga+104>>2]|0;a[u+(s*20|0)>>0]=11;b[u+(s*20|0)+2>>1]=0;c[u+(s*20|0)+4>>2]=0;c[u+(s*20|0)+8>>2]=o;c[u+(s*20|0)+12>>2]=0;c[u+(s*20|0)+16>>2]=0;a[u+(s*20|0)+1>>0]=0;u=0;break}else{Di(Ga,11,0,o,0)|0;u=0;break}}while(0);t=c[Ga+12>>2]|0;s=0-D|0;if(((c[t+56>>2]|0)+(c[t+60>>2]|0)|0)<0)mk(t,Ga,s);else c[(c[t+64>>2]|0)+(s<<2)>>2]=c[C>>2];if(!E){v=0;za=0}else{v=c[C>>2]|0;if((c[B>>2]|0)>(v|0)){c[C>>2]=v+1;y=c[Ga+104>>2]|0;a[y+(v*20|0)>>0]=11;y=y+(v*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0))}else v=Di(Ga,11,0,0,0)|0;t=c[C>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+((((E|0)<1?t:E)+-1|0)*20|0)|0;else s=59308;c[s+8>>2]=t;za=E}}else{u=0;v=0;za=0}na=g+8|0;s=c[na>>2]|0;if(s){oa=Aa+1|0;pa=Ga+108|0;qa=Ga+112|0;ra=(Ba|0)==0;sa=f+56|0;ta=Ga+104|0;ua=k+1|0;va=(Aa|0)<0;wa=g+40|0;xa=~k;ya=f+52|0;ja=m<<24>>24==0;ka=Ga+12|0;la=n<<24>>24==11;ma=r+8|0;U=U+32|0;V=g+16|0;T=f+146|0;W=(Da|0)==1;m=g+72|0;X=f+19|0;Y=f+32|0;Z=f+28|0;_=g+68|0;$=r+28|0;aa=f+44|0;ba=Ea+50|0;ca=Da&65535;da=f+116|0;ea=r+20|0;fa=r+12|0;ga=Ea+4|0;ha=Ea+32|0;ia=l+1|0;S=0;w=0;t=0;while(1){H=h+(S<<2)|0;g:do if(c[H>>2]|0){Q=(Ba|0)==(s|0);if(Q){w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;y=c[ta>>2]|0;a[y+(w*20|0)>>0]=11;y=y+(w*20|0)+1|0;z=y+19|0;do{a[y>>0]=0;y=y+1|0}while((y|0)<(z|0));y=w}else y=Di(Ga,11,0,0,0)|0;x=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))w=(c[ta>>2]|0)+((va?x+-1|0:Aa)*20|0)|0;else w=59308;c[w+8>>2]=x;q=oa}else{q=(c[sa>>2]|0)+-1|0;c[sa>>2]=q;y=w}if((ra|Q)&t<<24>>24==0){zk(Ga,g,ua);R=1}else R=t;O=S+j|0;t=s+36|0;if(c[t>>2]|0){w=c[H>>2]|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;P=c[ta>>2]|0;a[P+(x*20|0)>>0]=73;b[P+(x*20|0)+2>>1]=0;c[P+(x*20|0)+4>>2]=0;c[P+(x*20|0)+8>>2]=w;c[P+(x*20|0)+12>>2]=0;c[P+(x*20|0)+16>>2]=0;a[P+(x*20|0)+1>>0]=0}else Di(Ga,73,0,w,0)|0;c[ya>>2]=xa;t=c[t>>2]|0;w=c[f>>2]|0;if(!t)t=0;else t=dk(w,t,0,0)|0;if(!(a[w+81>>0]|0))Tj(f,t,q,16);if(t|0)ni(w,t);c[ya>>2]=0}t=c[H>>2]|0;P=t+1|0;N=s+52|0;if(!(b[N>>1]|0))x=0;else{E=s+4|0;F=s+40|0;D=0;do{t=b[(c[E>>2]|0)+(D<<1)>>1]|0;switch(t<<16>>16){case -2:{c[ya>>2]=xa;t=c[(c[F>>2]|0)+4+(D*20|0)>>2]|0;A=D+P|0;C=c[f>>2]|0;if(!t)B=0;else B=dk(C,t,0,0)|0;h:do if(!(a[C+81>>0]|0)){do if(B){if((a[B>>0]|0)!=-88){z=Jj(f,B,A)|0;break}t=c[Ia>>2]|0;w=c[B+28>>2]|0;x=t+108|0;z=c[x>>2]|0;if((c[t+112>>2]|0)>(z|0)){c[x>>2]=z+1;Ca=c[t+104>>2]|0;a[Ca+(z*20|0)>>0]=78;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=w;c[Ca+(z*20|0)+8>>2]=A;c[Ca+(z*20|0)+12>>2]=0;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0;Ca=252;break h}else{Di(t,78,w,A,0)|0;Ca=252;break h}}else z=Jj(f,0,A)|0;while(0);if((z|0)==(A|0)){Ca=251;break}t=c[Ia>>2]|0;if(!t){Ca=251;break}w=t+108|0;x=c[w>>2]|0;if((c[t+112>>2]|0)>(x|0)){c[w>>2]=x+1;Ca=c[t+104>>2]|0;a[Ca+(x*20|0)>>0]=79;b[Ca+(x*20|0)+2>>1]=0;c[Ca+(x*20|0)+4>>2]=z;c[Ca+(x*20|0)+8>>2]=A;c[Ca+(x*20|0)+12>>2]=0;c[Ca+(x*20|0)+16>>2]=0;a[Ca+(x*20|0)+1>>0]=0;Ca=251;break}else{Di(t,79,z,A,0)|0;Ca=251;break}}else Ca=251;while(0);if((Ca|0)==251?(Ca=0,B|0):0)Ca=252;if((Ca|0)==252){Ca=0;ni(C,B)}c[ya>>2]=0;break}case -1:{z=k;Ca=255;break}default:{z=t<<16>>16==(b[wa>>1]|0)?k:ua+(t<<16>>16)|0;Ca=255}}do if((Ca|0)==255){Ca=0;x=((t&65535)>>>15)+79<<16>>16;t=D+P|0;w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=x;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=z;c[M+(w*20|0)+8>>2]=t;c[M+(w*20|0)+12>>2]=0;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0;break}else{Di(Ga,x&65535,z,t,0)|0;break}}while(0);D=D+1|0;t=b[N>>1]|0}while(D>>>0<(t&65535)>>>0);x=t&65535;t=c[H>>2]|0}w=c[pa>>2]|0;if((c[qa>>2]|0)>(w|0)){c[pa>>2]=w+1;M=c[ta>>2]|0;a[M+(w*20|0)>>0]=92;b[M+(w*20|0)+2>>1]=0;c[M+(w*20|0)+4>>2]=P;c[M+(w*20|0)+8>>2]=x;c[M+(w*20|0)+12>>2]=t;c[M+(w*20|0)+16>>2]=0;a[M+(w*20|0)+1>>0]=0}else Di(Ga,92,P,x,t)|0;F=(Ea|0)==(s|0);if(ja&(Ha&F)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}t=a[s+54>>0]|0;if(!(t<<24>>24)){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break}}if(Q)E=(c[ma>>2]|0)==0?4:6;else E=(la?(t<<24>>24==11?2:t):n)&255;i:do if(!S){if(!(F&(E|0)==5&(c[s+20>>2]|0)==0))break;D=c[U>>2]|0;do if(!((D&8192|0)==0&0==0)){t=c[f>>2]|0;if(0==0?(c[t+32>>2]&262144|0)==0:0)break;t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0)break;C=c[m>>2]|0;do if((C|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=291;break}B=t;t=0;do{A=c[B+8>>2]|0;do if((c[A+24>>2]|0)==(C|0)){x=c[A+4>>2]|0;z=c[g>>2]|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0;if(!(M<<24>>24==0|(w|0)!=0))do{x=x+1|0;z=z+1|0;M=a[x>>0]|0;w=(d[208+(M&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(w|0)!=0));if(w|0)break;if(!t)t=c[_>>2]|0;c[A+32>>2]=t;t=A}while(0);B=c[B>>2]|0}while((B|0)!=0);if(!t)Ca=291}else Ca=291;while(0);if((Ca|0)==291){Ca=0;t=c[_>>2]|0;if(!t)break}w=0;x=t;do{if((a[x+8>>0]|0)==121)w=w|d[x+9>>0];x=c[x+32>>2]|0}while((x|0)!=0);if(!((t|0)==0|(w|0)==0))break i}while(0);if(!((D&16384|0)==0&0==0)){if(c[V>>2]|0)break;C=c[g>>2]|0;z=c[m>>2]|0;A=c[z+68>>2]|0;if(!A){w=z+60|0;t=z+64|0}else{w=a[C>>0]|0;if(!(w<<24>>24))t=0;else{t=0;x=C;do{x=x+1|0;t=G(t+(d[208+(w&255)>>0]|0)|0,-1640531535)|0;w=a[x>>0]|0}while(w<<24>>24!=0)}t=(t>>>0)%((c[z+56>>2]|0)>>>0)|0;w=A+(t<<3)|0;t=A+(t<<3)+4|0}w=c[w>>2]|0;j:do if(!w)t=59292;else{B=d[208+(d[C>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;w=w+-1|0;z=c[t+12>>2]|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-B|0;if(!(M<<24>>24==0|(x|0)!=0)){A=C;do{z=z+1|0;A=A+1|0;M=a[z>>0]|0;x=(d[208+(M&255)>>0]|0)-(d[208+(d[A>>0]|0)>>0]|0)|0}while(!(M<<24>>24==0|(x|0)!=0))}if(!x)break j;if(!w){t=59292;break}}}while(0);if(c[t+8>>2]|0)break}w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);w=y;t=R;break g}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];w=y;t=R;break g}}while(0);w=e[s+50>>1]|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;M=c[ta>>2]|0;a[M+(t*20|0)>>0]=27;b[M+(t*20|0)+2>>1]=0;c[M+(t*20|0)+4>>2]=O;c[M+(t*20|0)+8>>2]=q;c[M+(t*20|0)+12>>2]=P;c[M+(t*20|0)+16>>2]=0;a[M+(t*20|0)+1>>0]=0}else t=Di(Ga,27,O,q,P)|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0)){M=c[ta>>2]|0;a[M+(t*20|0)+1>>0]=-3;c[M+(t*20|0)+16>>2]=w}do if(!F)if(W){t=a[X>>0]|0;if(!(t<<24>>24)){M=(c[aa>>2]|0)+1|0;c[aa>>2]=M;break}else{M=t+-1<<24>>24;a[X>>0]=M;M=c[f+148+((M&255)<<2)>>2]|0;break}}else{t=c[Y>>2]|0;w=c[Z>>2]|0;if((w|0)<(Da|0)){M=c[aa>>2]|0;c[aa>>2]=M+Da;M=M+1|0;break}else{c[Y>>2]=t+Da;c[Z>>2]=w-Da;M=t;break}}else M=P;while(0);do if(Ha|(E|0)==5){if(!(c[Fa>>2]&32)){t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=-121;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=O;c[L+(t*20|0)+8>>2]=M;c[L+(t*20|0)+12>>2]=0;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,135,O,M,0)|0;if(!Ha)break;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=53;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=M;c[L+(t*20|0)+8>>2]=q;c[L+(t*20|0)+12>>2]=l;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else Di(Ga,53,M,q,l)|0;t=c[pa>>2]|0;if((t|0)<=0)break;b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;break}do if(!F){if(!(b[ba>>1]|0))break;B=s+4|0;A=0;do{x=b[(c[ga>>2]|0)+(A<<1)>>1]|0;t=b[N>>1]|0;k:do if(!(t<<16>>16))t=-1;else{z=c[B>>2]|0;w=t&65535;t=0;while(1){if((b[z+(t<<1)>>1]|0)==x<<16>>16)break k;t=t+1|0;if(t>>>0>=w>>>0){t=-1;break}}}while(0);t=t<<16>>16;w=A+M|0;x=c[pa>>2]|0;if((c[qa>>2]|0)>(x|0)){c[pa>>2]=x+1;L=c[ta>>2]|0;a[L+(x*20|0)>>0]=90;b[L+(x*20|0)+2>>1]=0;c[L+(x*20|0)+4>>2]=O;c[L+(x*20|0)+8>>2]=t;c[L+(x*20|0)+12>>2]=w;c[L+(x*20|0)+16>>2]=0;a[L+(x*20|0)+1>>0]=0}else Di(Ga,90,O,t,w)|0;A=A+1|0}while(A>>>0<(e[ba>>1]|0)>>>0)}while(0);if(!Ha)break;D=s+55|0;D=((d[D>>0]|d[D+1>>0]<<8)&3)==2?P:M;t=b[ba>>1]|0;if(!(t<<16>>16))break;C=52;A=(c[pa>>2]|0)+(t&65535)|0;B=0;do{t=c[(c[ha>>2]|0)+(B<<2)>>2]|0;x=c[f>>2]|0;w=a[x+78>>0]|0;L=a[x+165>>0]|0;x=Zi(x,w,t,L&255)|0;do if(!(L<<24>>24)){if(!x){x=_i(f,w,0,t)|0;break}if(c[x+12>>2]|0)break;x=_i(f,w,x,t)|0}while(0);w=(B|0)==((e[ba>>1]|0)+-1|0);A=w?q:A;C=w?53:C;w=ia+(b[(c[ga>>2]|0)+(B<<1)>>1]|0)|0;z=B+D|0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;L=c[ta>>2]|0;a[L+(t*20|0)>>0]=C;b[L+(t*20|0)+2>>1]=0;c[L+(t*20|0)+4>>2]=w;c[L+(t*20|0)+8>>2]=A;c[L+(t*20|0)+12>>2]=z;c[L+(t*20|0)+16>>2]=0;a[L+(t*20|0)+1>>0]=0}else t=Di(Ga,C,w,A,z)|0;do if(!(a[(c[Ga>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[pa>>2]|0)+-1|0;w=c[ta>>2]|0;z=w+(t*20|0)+1|0;if(a[z>>0]|0){Ei(Ga,w+(t*20|0)|0,x,-2);break}if(!x)break;c[w+(t*20|0)+16>>2]=x;a[z>>0]=-2}while(0);t=c[pa>>2]|0;if((t|0)>0)b[(c[ta>>2]|0)+((t+-1|0)*20|0)+2>>1]=144;B=B+1|0}while(B>>>0<(e[ba>>1]|0)>>>0)}while(0);switch((E&255)<<24>>24){case 3:case 2:case 1:{fl(f,E,s);break}case 6:{K=c[Ia>>2]|0;L=c[f>>2]|0;J=c[$>>2]|0;do if((J|0)!=(O|0)){if(!(c[Fa>>2]&32)){t=a[X>>0]|0;if(!(t<<24>>24)){z=(c[aa>>2]|0)+1|0;c[aa>>2]=z}else{z=t+-1<<24>>24;a[X>>0]=z;z=c[f+148+((z&255)<<2)>>2]|0}w=K+108|0;t=c[w>>2]|0;x=K+112|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=-121;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=O;c[Ca+(t*20|0)+8>>2]=z;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,135,O,z,0)|0;t=c[w>>2]|0;if((c[x>>2]|0)>(t|0)){c[w>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=30;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=J;c[Ca+(t*20|0)+8>>2]=0;c[Ca+(t*20|0)+12>>2]=z;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else Di(K,30,J,0,z)|0;if(!z)break;t=a[X>>0]|0;if((t&255)>=8)break;a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=z;break}t=c[na>>2]|0;l:do if(!t)t=0;else while(1){Ca=t+55|0;if(((d[Ca>>0]|d[Ca+1>>0]<<8)&3)==2)break l;t=c[t+20>>2]|0;if(!t){t=0;break}}while(0);Ca=b[t+50>>1]|0;I=Ca&65535;F=c[aa>>2]|0;H=F+1|0;c[aa>>2]=F+I;if(!(Ca<<16>>16)){A=K+108|0;w=K+112|0}else{D=t+4|0;A=K+108|0;w=K+112|0;E=s+4|0;F=K+104|0;C=0;do{z=b[(c[D>>2]|0)+(C<<1)>>1]|0;t=b[N>>1]|0;m:do if(!(t<<16>>16))t=-1;else{B=c[E>>2]|0;x=t&65535;t=0;while(1){if((b[B+(t<<1)>>1]|0)==z<<16>>16)break m;t=t+1|0;if(t>>>0>=x>>>0){t=-1;break}}}while(0);t=t<<16>>16;x=C+H|0;z=c[A>>2]|0;if((c[w>>2]|0)>(z|0)){c[A>>2]=z+1;Ca=c[F>>2]|0;a[Ca+(z*20|0)>>0]=90;b[Ca+(z*20|0)+2>>1]=0;c[Ca+(z*20|0)+4>>2]=O;c[Ca+(z*20|0)+8>>2]=t;c[Ca+(z*20|0)+12>>2]=x;c[Ca+(z*20|0)+16>>2]=0;a[Ca+(z*20|0)+1>>0]=0}else Di(K,90,O,t,x)|0;C=C+1|0}while((C|0)!=(I|0))}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;z=c[K+104>>2]|0;a[z+(t*20|0)>>0]=29;b[z+(t*20|0)+2>>1]=0;c[z+(t*20|0)+4>>2]=J;c[z+(t*20|0)+8>>2]=0;c[z+(t*20|0)+12>>2]=H;c[z+(t*20|0)+16>>2]=0;a[z+(t*20|0)+1>>0]=0;z=t}else z=Di(K,29,J,0,H)|0;if(!(a[(c[K>>2]|0)+81>>0]|0)){Ca=c[K+104>>2]|0;a[Ca+(z*20|0)+1>>0]=-3;c[Ca+(z*20|0)+16>>2]=I}t=c[A>>2]|0;if((c[w>>2]|0)>(t|0)){c[A>>2]=t+1;Ca=c[K+104>>2]|0;a[Ca+(t*20|0)>>0]=69;b[Ca+(t*20|0)+2>>1]=0;c[Ca+(t*20|0)+4>>2]=11;c[Ca+(t*20|0)+8>>2]=2;c[Ca+(t*20|0)+12>>2]=0;c[Ca+(t*20|0)+16>>2]=0;a[Ca+(t*20|0)+1>>0]=0}else t=Di(K,69,11,2,0)|0;do if(!(a[(c[K>>2]|0)+81>>0]|0)){if((t|0)<0)t=(c[A>>2]|0)+-1|0;w=c[K+104>>2]|0;x=w+(t*20|0)+1|0;if(!(a[x>>0]|0)){c[w+(t*20|0)+16>>2]=39404;a[x>>0]=-1;break}else{Ei(K,w+(t*20|0)|0,39404,-1);break}}while(0);w=c[A>>2]|0;if(!(a[(c[K>>2]|0)+81>>0]|0))t=(c[K+104>>2]|0)+(((z|0)<0?w+-1|0:z)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);tj(f,ik(L,c[ea>>2]|0,0)|0,c[ma>>2]|0,c[fa>>2]|0,2,r);c[ma>>2]=0;c[fa>>2]=0;Ca=421;break}case 4:{Ca=421;break}default:{t=c[f>>2]|0;C=c[t+32>>2]|0;do if(!((c[U>>2]&8192|0)==0&0==0|(C&262144|0)==0&0==0)){t=c[(c[t+16>>2]|0)+28>>2]|0;if(a[T>>0]|0){Ca=445;break}B=c[m>>2]|0;do if((B|0)!=(t|0)){t=c[t+48>>2]|0;if(!t){Ca=439;break}A=t;t=0;do{z=c[A+8>>2]|0;do if((c[z+24>>2]|0)==(B|0)){w=c[z+4>>2]|0;x=c[g>>2]|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(N<<24>>24==0|(u|0)!=0))do{w=w+1|0;x=x+1|0;N=a[w>>0]|0;u=(d[208+(N&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(u|0)!=0));if(u|0)break;if(!t)t=c[_>>2]|0;c[z+32>>2]=t;t=z}while(0);A=c[A>>2]|0}while((A|0)!=0);if(!t)Ca=439}else Ca=439;while(0);if((Ca|0)==439){t=c[_>>2]|0;if(!t){Ca=445;break}}u=0;w=t;do{if((a[w+8>>0]|0)==121)u=u|d[w+9>>0];w=c[w+32>>2]|0}while((w|0)!=0);if(!((t|0)==0|(u|0)==0))Ca=461;else Ca=445}else Ca=445;while(0);do if((Ca|0)==445){Ca=0;if((C&16384|0)==0&0==0){t=0;break}B=c[g>>2]|0;x=c[m>>2]|0;z=c[x+68>>2]|0;if(!z){u=x+60|0;t=x+64|0}else{u=a[B>>0]|0;if(!(u<<24>>24))t=0;else{t=0;w=B;do{w=w+1|0;t=G(t+(d[208+(u&255)>>0]|0)|0,-1640531535)|0;u=a[w>>0]|0}while(u<<24>>24!=0)}t=(t>>>0)%((c[x+56>>2]|0)>>>0)|0;u=z+(t<<3)|0;t=z+(t<<3)+4|0}u=c[u>>2]|0;n:do if(!u)t=59292;else{A=d[208+(d[B>>0]|0)>>0]|0;while(1){t=c[t>>2]|0;u=u+-1|0;x=c[t+12>>2]|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-A|0;if(!(N<<24>>24==0|(w|0)!=0)){z=B;do{x=x+1|0;z=z+1|0;N=a[x>>0]|0;w=(d[208+(N&255)>>0]|0)-(d[208+(d[z>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(w|0)!=0))}if(!w)break n;if(!u){t=59292;break}}}while(0);if(c[t+8>>2]|0){t=0;Ca=461;break}if(!(c[V>>2]|0))t=0;else{t=0;Ca=461}}while(0);if((Ca|0)==461){Ca=0;N=c[da>>2]|0;a[((N|0)==0?f:N)+20>>0]=1}Im(f,g,t,i,j,M,ca,0,5,F&1,O);u=1}}do if((Ca|0)==421){Ca=0;t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;O=c[ta>>2]|0;a[O+(t*20|0)>>0]=11;b[O+(t*20|0)+2>>1]=0;c[O+(t*20|0)+4>>2]=0;c[O+(t*20|0)+8>>2]=o;c[O+(t*20|0)+12>>2]=0;c[O+(t*20|0)+16>>2]=0;a[O+(t*20|0)+1>>0]=0;break}else{Di(Ga,11,0,o,0)|0;break}}while(0);do if(!Q){w=c[ka>>2]|0;t=~q;if(((c[w+56>>2]|0)+(c[w+60>>2]|0)|0)<0){mk(w,Ga,t);break}else{c[(c[w+64>>2]|0)+(t<<2)>>2]=c[pa>>2];break}}else{t=c[pa>>2]|0;if((c[qa>>2]|0)>(t|0)){c[pa>>2]=t+1;Q=c[ta>>2]|0;a[Q+(t*20|0)>>0]=11;b[Q+(t*20|0)+2>>1]=0;c[Q+(t*20|0)+4>>2]=0;c[Q+(t*20|0)+8>>2]=oa;c[Q+(t*20|0)+12>>2]=0;c[Q+(t*20|0)+16>>2]=0;a[Q+(t*20|0)+1>>0]=0}else Di(Ga,11,0,oa,0)|0;w=c[pa>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))t=(c[ta>>2]|0)+(((y|0)<0?w+-1|0:y)*20|0)|0;else t=59308;c[t+8>>2]=w}while(0);if((M|0)==(P|0)){w=y;t=R;break}if(!W){if((c[Z>>2]|0)>=(Da|0)){w=y;t=R;break}c[Z>>2]=Da;c[Y>>2]=M;w=y;t=R;break}if(!M){w=y;t=R;break}t=a[X>>0]|0;if((t&255)>=8){w=y;t=R;break}a[X>>0]=t+1<<24>>24;c[f+148+((t&255)<<2)>>2]=M;w=y;t=R}while(0);s=c[s+20>>2]|0;if(!s)break;else S=S+1|0}}if(!za){c[p>>2]=u;Ra=Ja;return}s=Ga+108|0;t=c[s>>2]|0;if((c[Ga+112>>2]|0)>(t|0)){c[s>>2]=t+1;o=c[Ga+104>>2]|0;a[o+(t*20|0)>>0]=11;b[o+(t*20|0)+2>>1]=0;c[o+(t*20|0)+4>>2]=0;c[o+(t*20|0)+8>>2]=za;c[o+(t*20|0)+12>>2]=0;c[o+(t*20|0)+16>>2]=0;a[o+(t*20|0)+1>>0]=0}else Di(Ga,11,0,za,0)|0;t=c[s>>2]|0;if(!(a[(c[Ga>>2]|0)+81>>0]|0))s=(c[Ga+104>>2]|0)+(((v|0)<0?t+-1|0:v)*20|0)|0;else s=59308;c[s+8>>2]=t;c[p>>2]=u;Ra=Ja;return}function Um(f,g,h,i,j,k,l,m,n){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;t=f+8|0;o=c[t>>2]|0;a:do if(!o){s=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[s+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[s+272>>2]|0)if(!(a[s+81>>0]|0))r=15;else{C=0;break a}else{do if((e[s+276>>1]|0)>=224){o=s+300|0;p=c[o>>2]|0;if(p|0){c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}o=s+296|0;p=c[o>>2]|0;if(!p){o=s+292|0;break}else{c[o>>2]=c[p>>2];q=s+284|0;c[q>>2]=(c[q>>2]|0)+1;q=p;break b}}else o=s+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;r=15}while(0);if((r|0)==15)q=_d(s,224,0)|0;if(!q)C=0;else{o=q+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[q>>2]=s;o=s+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=q;c[q+8>>2]=p;c[q+4>>2]=0;c[o>>2]=q;c[q+20>>2]=381479589;c[q+12>>2]=f;c[t>>2]=q;Di(q,61,0,1,0)|0;C=q}}else C=o;while(0);p=c[g+8>>2]|0;if(!p){u=0;o=g+36|0}else{y=(n|0)==0?0:16;x=C+108|0;z=C+112|0;o=g+36|0;A=C+104|0;B=(l&2|(y|1)&255)&255;w=0;u=0;while(1){t=k+(w<<2)|0;s=c[t>>2]|0;if(s){do if(c[p+36>>2]|0){q=c[x>>2]|0;r=q+2|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;v=c[A>>2]|0;a[v+(q*20|0)>>0]=50;b[v+(q*20|0)+2>>1]=0;c[v+(q*20|0)+4>>2]=s;c[v+(q*20|0)+8>>2]=r;c[v+(q*20|0)+12>>2]=0;c[v+(q*20|0)+16>>2]=0;a[v+(q*20|0)+1>>0]=0;break}else{Di(C,50,s,r,0)|0;break}}while(0);q=p+55|0;q=d[q>>0]|d[q+1>>0]<<8;if((q&3)==2)v=(c[o>>2]&32|0)==0?y:B;else v=y;u=w+i|0;s=c[t>>2]|0;t=s+1|0;r=e[((q&8)==0?p+52|0:p+50|0)>>1]|0;q=c[x>>2]|0;if((c[z>>2]|0)>(q|0)){c[x>>2]=q+1;D=c[A>>2]|0;a[D+(q*20|0)>>0]=-124;b[D+(q*20|0)+2>>1]=0;c[D+(q*20|0)+4>>2]=u;c[D+(q*20|0)+8>>2]=s;c[D+(q*20|0)+12>>2]=t;c[D+(q*20|0)+16>>2]=0;a[D+(q*20|0)+1>>0]=0}else q=Di(C,132,u,s,t)|0;if(!(a[(c[C>>2]|0)+81>>0]|0)){D=c[A>>2]|0;a[D+(q*20|0)+1>>0]=-3;c[D+(q*20|0)+16>>2]=r}q=c[x>>2]|0;if((q|0)>0){b[(c[A>>2]|0)+((q+-1|0)*20|0)+2>>1]=v&255;u=1}else u=1}p=c[p+20>>2]|0;if(!p)break;else w=w+1|0}}if(c[o>>2]&32|0)return;q=j+1|0;o=f+19|0;p=a[o>>0]|0;if(!(p<<24>>24)){D=f+44|0;r=(c[D>>2]|0)+1|0;c[D>>2]=r}else{r=p+-1<<24>>24;a[o>>0]=r;r=c[f+148+((r&255)<<2)>>2]|0}o=b[g+42>>1]|0;s=C+108|0;p=c[s>>2]|0;t=C+112|0;if((c[t>>2]|0)>(p|0)){c[s>>2]=p+1;D=c[C+104>>2]|0;a[D+(p*20|0)>>0]=92;b[D+(p*20|0)+2>>1]=0;c[D+(p*20|0)+4>>2]=q;c[D+(p*20|0)+8>>2]=o;c[D+(p*20|0)+12>>2]=r;c[D+(p*20|0)+16>>2]=0;a[D+(p*20|0)+1>>0]=0}else Di(C,92,q,o,r)|0;if(!(u<<24>>24))zk(C,g,0);q=f+18|0;p=(a[q>>0]|0)==0?((l|0)==0?33:(l|1)&255):0;p=(m|0)==0?p:p|8;p=(n|0)==0?p:p|16;o=c[s>>2]|0;if((c[t>>2]|0)>(o|0)){c[s>>2]=o+1;D=c[C+104>>2]|0;a[D+(o*20|0)>>0]=122;b[D+(o*20|0)+2>>1]=0;c[D+(o*20|0)+4>>2]=h;c[D+(o*20|0)+8>>2]=r;c[D+(o*20|0)+12>>2]=j;c[D+(o*20|0)+16>>2]=0;a[D+(o*20|0)+1>>0]=0}else Di(C,122,h,r,j)|0;if((a[q>>0]|0)==0?(a[(c[C>>2]|0)+81>>0]|0)==0:0){j=c[C+104>>2]|0;D=(c[s>>2]|0)+-1|0;a[j+(D*20|0)+1>>0]=-6;c[j+(D*20|0)+16>>2]=g}o=c[s>>2]|0;if((o|0)<=0)return;b[(c[C+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=p&255;return}function Vm(d,e){d=d|0;e=e|0;if((a[e>>0]|0)!=-94)return 0;e=b[e+32>>1]|0;if(e<<16>>16<=-1){d=d+20|0;a[d>>0]=a[d>>0]|2;return 0}if((c[(c[d+24>>2]|0)+(e<<16>>16<<2)>>2]|0)<=-1)return 0;d=d+20|0;a[d>>0]=a[d>>0]|1;return 0}function Wm(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;if(!(c[g+36>>2]&8)){l=0;return l|0}j=c[d>>2]|0;if(c[j+24>>2]&4|0){l=0;return l|0}k=c[d+116>>2]|0;k=(k|0)==0?d:k;i=c[(c[(c[j+16>>2]|0)+(f<<4)+12>>2]|0)+72>>2]|0;if(((i|0?(c[i+36>>2]&32|0)==0:0)?(c[i+56>>2]|0)==0:0)?(b[i+42>>1]|0)==2:0){i=k+112|0;d=c[i>>2]|0;a:do if(!d)l=12;else while(1){if((c[d+4>>2]|0)==(g|0))break a;d=c[d>>2]|0;if(!d){l=12;break}}while(0);do if((l|0)==12){b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))l=22;else{l=0;return l|0}else{do if((e[j+276>>1]|0)>=16){h=j+300|0;d=c[h>>2]|0;if(d|0){c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}h=j+296|0;d=c[h>>2]|0;if(!d){d=j+292|0;break}else{c[h>>2]=c[d>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;l=22}while(0);if((l|0)==22)d=_d(j,16,0)|0;if(!d){l=0;return l|0}else{c[d>>2]=c[i>>2];c[i>>2]=d;c[d+4>>2]=g;c[d+8>>2]=f;l=k+44|0;k=c[l>>2]|0;c[d+12>>2]=k+2;c[l>>2]=k+4;break}}while(0);l=c[d+12>>2]|0;return l|0}l=d+36|0;c[l>>2]=(c[l>>2]|0)+1;c[d+12>>2]=523;l=0;return l|0}function Xm(f,g){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;h=b[f+50>>1]|0;t=g+50|0;if(h<<16>>16!=(b[t>>1]|0)){g=0;return g|0}if((a[f+54>>0]|0)!=(a[g+54>>0]|0)){g=0;return g|0}a:do if(h<<16>>16){l=g+4|0;m=f+4|0;n=g+40|0;o=f+40|0;p=g+28|0;q=f+28|0;r=g+32|0;s=f+32|0;k=0;while(1){h=b[(c[l>>2]|0)+(k<<1)>>1]|0;if(h<<16>>16!=(b[(c[m>>2]|0)+(k<<1)>>1]|0)){h=0;i=18;break}if(h<<16>>16==-2?bk(0,c[(c[n>>2]|0)+4+(k*20|0)>>2]|0,c[(c[o>>2]|0)+4+(k*20|0)>>2]|0,-1)|0:0){h=0;i=18;break}if((a[(c[p>>2]|0)+k>>0]|0)!=(a[(c[q>>2]|0)+k>>0]|0)){h=0;i=18;break}i=c[(c[r>>2]|0)+(k<<2)>>2]|0;j=c[(c[s>>2]|0)+(k<<2)>>2]|0;if(i){if(!j){h=0;i=18;break}u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;u=a[i>>0]|0;h=(d[208+(u&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(h|0)!=0))}else h=((j|0)!=0)<<31>>31;k=k+1|0;if(h|0){h=0;i=18;break}if(k>>>0>=(e[t>>1]|0)>>>0)break a}if((i|0)==18)return h|0}while(0);u=(bk(0,c[g+36>>2]|0,c[f+36>>2]|0,-1)|0)==0&1;return u|0}function Ym(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;b=c[a+12>>2]|0;if(!b)b=0;else{b=c[b+24>>2]|0;b=(b|0)>0?b:0}d=c[a+16>>2]|0;if(d){k=c[d+24>>2]|0;b=(k|0)>(b|0)?k:b}j=a+4|0;k=c[j>>2]|0;d=a+20|0;if(!(k&2048)){h=c[d>>2]|0;if(!h){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}i=c[h>>2]|0;g=(i|0)>0;if(g){f=0;e=i;while(1){d=c[h+4+(f*20|0)>>2]|0;if(!d)d=e;else{m=c[d+24>>2]|0;d=(m|0)>(b|0);b=d?m:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}if(g){d=0;e=0;do{d=c[(c[h+4+(e*20|0)>>2]|0)+4>>2]|d;e=e+1|0}while((e|0)!=(i|0));d=d&2097412}else d=0}else d=0;c[j>>2]=d|k;m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}d=c[d>>2]|0;if(!d){m=b;m=m+1|0;a=a+24|0;c[a>>2]=m;return}do{e=c[d+36>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+44>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}e=c[d+60>>2]|0;if(e){k=c[e+24>>2]|0;b=(k|0)>(b|0)?k:b}h=c[d>>2]|0;if((h|0)!=0?(i=c[h>>2]|0,(i|0)>0):0){g=0;f=i;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?i:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+40>>2]|0;if((h|0)!=0?(l=c[h>>2]|0,(l|0)>0):0){g=0;f=l;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?l:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}h=c[d+48>>2]|0;if((h|0)!=0?(m=c[h>>2]|0,(m|0)>0):0){g=0;f=m;while(1){e=c[h+4+(g*20|0)>>2]|0;if(!e)e=f;else{k=c[e+24>>2]|0;e=(k|0)>(b|0);b=e?k:b;e=e?m:f}g=g+1|0;if((g|0)>=(e|0))break;else f=e}}d=c[d+52>>2]|0}while((d|0)!=0);m=b+1|0;a=a+24|0;c[a>>2]=m;return}function Zm(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;g=i;a:do if(((d[b>>0]|0)+-48|0)>>>0<10){c[g>>2]=0;ii(b,g)|0;f=c[g>>2]&255}else{h=Eu(b)|0;g=(h&1073741823|0)==2;b:do if(!e){if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:{if(!(Ib(18548,b,5)|0)){f=3;break b}if(!(Ib(18559,b,5)|0)){f=6;break b}else break a}case 4:{if(!(Ib(18556,b,4)|0)){f=5;break b}if(!(Ib(18564,b,4)|0)){f=7;break b}else break a}default:break a}}else{if(g){if(!(Ib(18544,b,2)|0)){f=0;break}if(!(Ib(18545,b,2)|0)){f=1;break}else break a}switch(h&1073741823|0){case 3:{if(!(Ib(18546,b,3)|0)){f=2;break b}if(!(Ib(18553,b,3)|0)){f=4;break b}else break a}case 5:if(!(Ib(18548,b,5)|0)){f=3;break b}else break a;case 4:if(!(Ib(18556,b,4)|0)){f=5;break b}else break a;default:break a}}while(0);f=a[45920+f>>0]|0}while(0);Ra=i;return f|0}function _m(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;i=Ra;Ra=Ra+16|0;g=i;c[g>>2]=f;f=0;a:while(1){switch(a[e+f>>0]|0){case 0:break a;case 115:{k=(c[g>>2]|0)+(4-1)&~(4-1);j=c[k>>2]|0;c[g>>2]=k+4;Fj(b,(j|0)==0?73:110,0,f+d|0,0,j,0)|0;break}case 105:{j=(c[g>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[g>>2]=j+4;Ci(b,70,k,f+d|0)|0;break}default:{h=7;break a}}f=f+1|0}if((h|0)==7){Ra=i;return}Ci(b,81,d,f)|0;Ra=i;return}function $m(e,f,g){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;k=c[(c[e>>2]|0)+32>>2]|0;o=c[(c[e+4>>2]|0)+8>>2]|0;h=c[g>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){n=c[h+16>>2]|0;break}if(!(i&1))n=Gg(h,1)|0;else n=0}else n=0;while(0);h=c[g+4>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;break}if(!(i&1))m=Gg(h,1)|0;else m=0}else m=0;while(0);j=c[g>>2]|0;h=b[j+8>>1]|0;if((h&2)!=0?(a[j+10>>0]|0)==1:0)h=c[j+12>>2]|0;else l=16;do if((l|0)==16){i=h&65535;if(!(i&16)){if(i&1|0){h=0;break}h=Fg(j,1)|0;break}else{h=c[j+12>>2]|0;if(!(i&16384))break;h=(c[j>>2]|0)+h|0;break}}while(0);if((h|0)>(c[k+140>>2]|0)){c[e+20>>2]=1;yc(c[e>>2]|0,45980,-1,1,-1)|0;return}do if((f|0)==3){h=c[g+8>>2]|0;if(!h)return;i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else l=28;do if((l|0)==28)if(!(i&1)){g=Gg(h,1)|0;break}else return;while(0);if(!g)return;k=a[g>>0]|0;if((g|0)!=(-1|0)&k<<24>>24!=0){h=g;f=0;j=k;while(1){i=h+1|0;if((j&255)>191){h=i;while(1){j=a[h>>0]|0;if((j&-64)<<24>>24==-128)h=h+1|0;else break}}else{h=i;j=a[i>>0]|0}if(j<<24>>24!=0&(h|0)!=(-1|0))f=f+1|0;else break}if(!f){j=g+1|0;h=k&255;if((k&255)<=191)break;h=d[2736+(h+-192)>>0]|0;i=a[j>>0]|0;if((i&-64)<<24>>24==-128)do{j=j+1|0;h=h<<6|i&63;i=a[j>>0]|0}while((i&-64)<<24>>24==-128);h=(h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)?65533:h;break}}c[e+20>>2]=1;yc(c[e>>2]|0,46013,-1,1,-1)|0;return}else h=d[o+2>>0]|0;while(0);if(!((n|0)!=0&(m|0)!=0))return;i=(md(n,m,o,h)|0)==0;h=c[e>>2]|0;i=i&1;j=h+8|0;if(!(b[j>>1]&9216)){o=h;c[o>>2]=i;c[o+4>>2]=0;b[j>>1]=4;return}else{Pg(h,i,0);return}}function an(b,f,g,h,i){b=b|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;p=c[b>>2]|0;o=g+4|0;m=(c[o>>2]|0)+45|0;a:do if(!p){r=Sv(m|0,0,-1,-1)|0;n=L()|0;if(n>>>0>0|(n|0)==0&r>>>0>2147483390){g=0;return g|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;q=25;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){r=c[14978]|0;n=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&n>>>0<=r>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){g=0;return g|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;r=k}else r=k}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){g=0;return g|0}}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){k=p+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}k=p+296|0;j=c[k>>2]|0;if(!j){j=p+292|0;break}else{c[k>>2]=c[j>>2];q=p+284|0;c[q>>2]=(c[q>>2]|0)+1;q=25;break a}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,0)|0;q=25}while(0);if((q|0)==25)if(!j){g=0;return g|0}else r=j;gw(r|0,0,m|0)|0;n=r+44|0;ew(n|0,c[g>>2]|0,c[o>>2]|0)|0;j=a[n>>0]|0;if((a[880+(j&255)>>0]|0)<0){m=j<<24>>24==91?93:j;l=0;j=1;while(1){k=a[n+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=n+l|0;if((a[n+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[n+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}o=r+12|0;c[o>>2]=n;a[r>>0]=f;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;b:do if((j|0)<=0)if(!h)j=0;else{k=j;q=41}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;q=41;break b}if((j|0)>1)j=k;else{q=41;break}}while(0);c:do if((q|0)==41){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))q=51;else{j=0;break c}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break d}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;q=51}while(0);if((q|0)==51)j=_d(p,m,n)|0;if(j){ew(j|0,h|0,k|0)|0;a[j+k>>0]=0;k=a[j>>0]|0;if(k<<24>>24){m=0;l=j;do{if(a[880+(k&255)>>0]&1)a[l>>0]=32;m=m+1|0;l=j+m|0;k=a[l>>0]|0}while(k<<24>>24!=0)}}else j=0}while(0);c[r+32>>2]=j;if((d[b+200>>0]|0)<=1){g=r;return g|0}m=c[o>>2]|0;l=c[b>>2]|0;e:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;q=82;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){p=c[14978]|0;i=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=p>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){g=r;return g|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){g=r;return g|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];q=l+284|0;c[q>>2]=(c[q>>2]|0)+1;q=82;break e}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;q=82}while(0);if((q|0)==82)if(!j){g=r;return g|0}k=j+4|0;l=k+12|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[j>>2]=m;p=g;q=c[p+4>>2]|0;g=j+4|0;c[g>>2]=c[p>>2];c[g+4>>2]=q;g=b+272|0;c[j+12>>2]=c[g>>2];c[g>>2]=j;g=r;return g|0}function bn(f,g,h){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,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;H=Ra;Ra=Ra+64|0;D=H+40|0;E=H+32|0;w=H+24|0;v=H+16|0;n=H+8|0;k=H;x=H+60|0;t=H+56|0;r=H+52|0;F=H+48|0;s=H+44|0;G=c[(c[f>>2]|0)+32>>2]|0;c[x>>2]=0;c[t>>2]=0;c[F>>2]=0;g=c[h>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;break}if(!(i&1))j=Gg(g,1)|0;else j=0}else j=0;while(0);g=c[h+4>>2]|0;do if(g){i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(i&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);A=(j|0)==0?59952:j;u=(g|0)==0?59952:g;z=G+20|0;m=c[z>>2]|0;g=c[G+136>>2]|0;a:do if((m|0)<(g+2|0)){y=G+16|0;l=c[y>>2]|0;b:do if((m|0)>0){k=d[208+(d[u>>0]|0)>>0]|0;h=0;while(1){i=c[l+(h<<4)>>2]|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-k|0;if(!(q<<24>>24==0|(g|0)!=0)){j=u;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;g=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(g|0)!=0))}h=h+1|0;if(!g)break;if((h|0)>=(m|0))break b}c[n>>2]=u;i=dd(G,46469,n)|0;c[F>>2]=i;g=0;C=142;break a}while(0);c:do if((l|0)==(G+412|0)){d:do if(c[G+272>>2]|0)if(!(a[G+81>>0]|0))C=34;else{Ra=H;return}else{do if((e[G+276>>1]|0)>=48){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break d}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;C=34}while(0);if((C|0)==34)g=_d(G,48,0)|0;if(!g){Ra=H;return}else{p=c[y>>2]|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[g+20>>2]=c[p+20>>2];c[g+24>>2]=c[p+24>>2];c[g+28>>2]=c[p+28>>2];p=g;break}}else{j=(m<<4)+16|0;e:do if(!l){if(c[G+272>>2]|0){if(a[G+81>>0]|0){Ra=H;return}}else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0>>0:0))){i=G+300|0;g=c[i>>2]|0;if(g|0){c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}i=G+296|0;g=c[i>>2]|0;if(!g){g=G+292|0;break}else{c[i>>2]=c[g>>2];q=G+284|0;c[q>>2]=(c[q>>2]|0)+1;break e}}else g=G+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(G,j,0)|0}else{q=l;if((c[G+304>>2]|0)>>>0<=q>>>0?(c[G+308>>2]|0)>>>0>q>>>0:0){if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0>>0:0))){p=l;break c}g=Zd(G,l,j,0)|0;break}g=Zd(G,l,j,0)|0}while(0);if(!g){Ra=H;return}else p=g}while(0);c[y>>2]=p;q=c[z>>2]|0;o=p+(q<<4)|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[o+12>>2]=0;c[r>>2]=c[G+60>>2];switch(dn(c[(c[G>>2]|0)+16>>2]|0,A,r,s,x,t)|0){case 0:{g=c[r>>2]|256;c[r>>2]=g;k=p+(q<<4)+4|0;g=Pe(c[s>>2]|0,c[x>>2]|0,G,k,0,g)|0;c[z>>2]=(c[z>>2]|0)+1;h=(Eu(u)|0)+1|0;r=G+272|0;f:do if(c[r>>2]|0)if(!(a[G+81>>0]|0))C=76;else i=0;else{do if(!(0<0|(0==0?(e[G+276>>1]|0)>>>0>>0:0))){j=G+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}j=G+296|0;i=c[j>>2]|0;if(!i){i=G+292|0;break}else{c[j>>2]=c[i>>2];C=G+284|0;c[C>>2]=(c[C>>2]|0)+1;C=77;break f}}else i=G+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;C=76}while(0);if((C|0)==76){i=_d(G,h,0)|0;C=77}if((C|0)==77)if(!i)i=0;else ew(i|0,u|0,h|0)|0;c[o>>2]=i;a[G+89>>0]=0;switch(g|0){case 19:{g=dd(G,46499,v)|0;c[F>>2]=g;g=1;C=98;break}case 0:{g=en(G,c[k>>2]|0)|0;c[p+(q<<4)+12>>2]=g;if(g)if((a[g+76>>0]|0)!=0?(a[g+77>>0]|0)!=(a[G+78>>0]|0):0){g=dd(G,34948,w)|0;c[F>>2]=g;g=1}else g=0;else g=7;j=c[k>>2]|0;k=c[j>>2]|0;h=c[j+4>>2]|0;l=h+4|0;c[l>>2]=k;m=c[h>>2]|0;i=a[G+83>>0]|0;n=(a[m+12>>0]|0)==0;do if(n){w=c[m+216>>2]|0;if(w|0?(a[w+43>>0]|0)==2:0)break;a[m+4>>0]=i}while(0);i=c[(c[y>>2]|0)+4>>2]|0;if(!i)i=0;else{w=c[i+4>>2]|0;c[w+4>>2]=c[i>>2];i=(e[w+22>>1]|0)>>>2&3}if(j|0){c[l>>2]=k;w=h+22|0;b[w>>1]=i<<2|b[w>>1]&-13&65535}h=c[G+32>>2]|0;c[l>>2]=k;j=n^1;a[m+7>>0]=j&1;a[m+8>>0]=n&1;a[m+9>>0]=0;do if(n){i=m+10|0;if(!(h&8)){a[i>>0]=2;i=2;break}else{a[i>>0]=3;i=3;break}}else{a[m+10>>0]=0;i=0}while(0);w=(i<<2|(n?i:0))&255;a[m+11>>0]=(h&16|0)==0|j?w:w|12;w=m+20|0;v=d[w>>0]|0;a[w>>0]=(h&32|0)==0?v|1:v&254;a[p+(q<<4)+8>>0]=3;if(!g)g=(c[o>>2]|0)==0?7:0;break}default:C=98}if((C|0)==98)a[p+(q<<4)+8>>0]=3;i=c[x>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g:do if(!g){g=c[z>>2]|0;h=c[y>>2]|0;if((g|0)>0){i=0;do{j=c[h+(i<<4)+4>>2]|0;if(j|0)c[(c[j+4>>2]|0)+4>>2]=c[j>>2];i=i+1|0}while((i|0)!=(g|0))}a[G+164>>0]=0;j=G+24|0;k=c[j>>2]|0;c[j>>2]=k&-17;k=(k&1|0)==0;x=c[h+12>>2]|0;a[G+78>>0]=a[x+77>>0]|0;if(!(b[x+78>>1]&1)){g=eh(G,0,F,0)|0;if(g|0)break;g=c[z>>2]|0}if((g|0)>1)do{i=g;g=g+-1|0;if((b[(c[(c[y>>2]|0)+(g<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(G,g,F,0)|0,B|0):0){g=B;break g}}while((i|0)>2);if(!k){Ra=H;return}c[j>>2]=c[j>>2]&-2;Ra=H;return}while(0);i=(c[z>>2]|0)+-1|0;j=c[(c[y>>2]|0)+(i<<4)+4>>2]|0;if(j|0){ug(j);B=c[y>>2]|0;c[B+(i<<4)+4>>2]=0;c[B+(i<<4)+12>>2]=0}$b(G);c[z>>2]=i;if((g|0)<3082)switch(g|0){case 7:break;default:C=140}else switch(g|0){case 3082:break;default:C=140}if((C|0)==140){i=c[F>>2]|0;if(i|0){C=143;break a}c[D>>2]=A;i=dd(G,46528,D)|0;c[F>>2]=i;C=142;break a}i=G+81|0;if((a[i>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[i>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;i=c[G+236>>2]|0;if(i|0)c[i+12>>2]=7}i=c[F>>2]|0;do if(i|0){if(c[G+480>>2]|0){Xd(G,i);break}D=i;if((c[G+304>>2]|0)>>>0<=D>>>0?(c[G+308>>2]|0)>>>0>D>>>0:0){D=G+300|0;c[i>>2]=c[D>>2];c[D>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{D=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=dd(G,34831,E)|0;c[F>>2]=i;C=142;break a}case 7:{g=G+81|0;if((a[g>>0]|0)==0?(a[G+82>>0]|0)==0:0){a[g>>0]=1;if((c[G+180>>2]|0)>0)c[G+264>>2]=1;g=G+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[G+236>>2]|0;if(g|0)c[g+12>>2]=7}break}default:{}}g=c[t>>2]|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=H;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=H;return}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=H;return}}else{c[k>>2]=g;i=dd(G,46432,k)|0;c[F>>2]=i;g=0;C=142}while(0);if((C|0)==142)if(i)C=143;do if((C|0)==143){c[f+20>>2]=1;yc(c[f>>2]|0,i,-1,1,-1)|0;i=c[F>>2]|0;if(i){if(G|0){if(c[G+480>>2]|0){Xd(G,i);break}F=i;if((c[G+304>>2]|0)>>>0<=F>>>0?(c[G+308>>2]|0)>>>0>F>>>0:0){G=G+300|0;c[i>>2]=c[G>>2];c[G>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{G=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}while(0);if(!g){Ra=H;return}c[f+20>>2]=g;i=c[f>>2]|0;if(!(b[i+8>>1]&1)){Ra=H;return}switch(g|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=g&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(i,g,-1,1,0)|0;Ra=H;return}function cn(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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;J=Ra;Ra=Ra+112|0;x=J+32|0;w=J+24|0;t=J+16|0;r=J+8|0;n=J;s=J+72|0;u=J+40|0;I=c[f>>2]|0;a:do if(!(c[f+36>>2]|0)){z=u+4|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[z+24>>2]=0;c[u>>2]=f;z=(j|0)==0;m=f;do if(z)m=0;else{if((a[j>>0]|0)==59){a[j>>0]=110;m=0;break}p=u+24|0;b[p>>1]=0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=j+24|0;m=f+208|0;A=(c[m>>2]|0)+(c[o>>2]|0)|0;c[m>>2]=A;m=c[I+120>>2]|0;if((m|0)>=(A|0)){_j(s,j)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[o>>2]|0);m=b[p>>1]|0;A=j+4|0;c[A>>2]=c[A>>2]|m&-32752&65535;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=121;break a}}else{c[n>>2]=m;cd(f,41637,n)}F=121;break a}while(0);A=(k|0)==0;do if(!A){if((a[k>>0]|0)==59){a[k>>0]=110;break}q=u+24|0;o=m&65535;b[q>>1]=o&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;p=k+24|0;n=m+208|0;y=(c[n>>2]|0)+(c[p>>2]|0)|0;c[n>>2]=y;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(y|0)){_j(s,k)|0;n=c[s>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[q>>1]|0;y=k+4|0;c[y>>2]=c[y>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[q>>1]=m;if((c[u+20>>2]|0)<=0)if((c[n+36>>2]|0)<1)break;else{F=120;break a}}else{c[r>>2]=n;cd(m,41637,r)}F=120;break a}while(0);y=(l|0)==0;do if(!y){if((a[l>>0]|0)==59){a[l>>0]=110;break}q=u+24|0;p=m&65535;b[q>>1]=p&28655;m=c[u>>2]|0;c[s>>2]=m;c[s+4>>2]=125;c[s+8>>2]=126;c[s+12>>2]=0;c[s+24>>2]=u;o=l+24|0;n=m+208|0;r=(c[n>>2]|0)+(c[o>>2]|0)|0;c[n>>2]=r;n=c[(c[m>>2]|0)+120>>2]|0;if((n|0)>=(r|0)){_j(s,l)|0;m=c[s>>2]|0;t=m+208|0;c[t>>2]=(c[t>>2]|0)-(c[o>>2]|0);t=b[q>>1]|0;s=l+4|0;c[s>>2]=c[s>>2]|t&-32752&65535;b[q>>1]=p&36880|t&65535;if((c[u+20>>2]|0)<=0)if((c[m+36>>2]|0)<1)break;else{F=120;break a}}else{c[t>>2]=n;cd(m,41637,t)}F=120;break a}while(0);do if(i|0){if((a[i>>0]|0)==110)m=c[i+8>>2]|0;else m=0;n=c[f>>2]|0;if(((a[n+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(v=c[n+312>>2]|0,v|0):0){m=$a[v&127](c[n+316>>2]|0,g,m,0,0,c[f+240>>2]|0)|0;if((m|0)==1){cd(f,39216,w);c[f+12>>2]=23;F=120;break a}if((m|2|0)==2)if(!m)break;else{F=120;break a}else{cd(f,39231,x);c[f+12>>2]=1;F=120;break a}}}while(0);s=f+8|0;m=c[s>>2]|0;b:do if(!m){p=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[p+76>>1]&8)==0:0)a[f+23>>0]=1;c:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))F=51;else{t=0;break b}else{do if((e[p+276>>1]|0)>=224){m=p+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}m=p+296|0;n=c[m>>2]|0;if(!n){m=p+292|0;break}else{c[m>>2]=c[n>>2];x=p+284|0;c[x>>2]=(c[x>>2]|0)+1;break c}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;F=51}while(0);if((F|0)==51)n=_d(p,224,0)|0;if(!n)t=0;else{m=n+104|0;o=m+120|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(o|0));c[n>>2]=p;m=p+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[s>>2]=n;Di(n,61,0,1,0)|0;t=n}}else t=m;while(0);n=f+32|0;o=c[n>>2]|0;m=f+28|0;p=c[m>>2]|0;if((p|0)<4){m=f+44|0;n=c[m>>2]|0;r=n+1|0;n=n+4|0}else{c[n>>2]=o+4;r=o;n=p+-4|0}c[m>>2]=n;do if(!z){if((a[j>>0]|0)!=-88){C=Jj(f,j,r)|0;F=66;break}m=c[s>>2]|0;n=c[j+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;z=c[m+104>>2]|0;a[z+(p*20|0)>>0]=78;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=n;c[z+(p*20|0)+8>>2]=r;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,r,0)|0;break}}else{C=Jj(f,0,r)|0;F=66}while(0);do if(((F|0)==66?(C|0)!=(r|0):0)?(B=c[s>>2]|0,B|0):0){m=B+108|0;n=c[m>>2]|0;if((c[B+112>>2]|0)>(n|0)){c[m>>2]=n+1;B=c[B+104>>2]|0;a[B+(n*20|0)>>0]=79;b[B+(n*20|0)+2>>1]=0;c[B+(n*20|0)+4>>2]=C;c[B+(n*20|0)+8>>2]=r;c[B+(n*20|0)+12>>2]=0;c[B+(n*20|0)+16>>2]=0;a[B+(n*20|0)+1>>0]=0;break}else{Di(B,79,C,r,0)|0;break}}while(0);q=r+1|0;do if(!A){if((a[k>>0]|0)!=-88){E=Jj(f,k,q)|0;F=78;break}m=c[s>>2]|0;n=c[k+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;C=c[m+104>>2]|0;a[C+(p*20|0)>>0]=78;b[C+(p*20|0)+2>>1]=0;c[C+(p*20|0)+4>>2]=n;c[C+(p*20|0)+8>>2]=q;c[C+(p*20|0)+12>>2]=0;c[C+(p*20|0)+16>>2]=0;a[C+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{E=Jj(f,0,q)|0;F=78}while(0);do if(((F|0)==78?(E|0)!=(q|0):0)?(D=c[s>>2]|0,D|0):0){m=D+108|0;n=c[m>>2]|0;if((c[D+112>>2]|0)>(n|0)){c[m>>2]=n+1;D=c[D+104>>2]|0;a[D+(n*20|0)>>0]=79;b[D+(n*20|0)+2>>1]=0;c[D+(n*20|0)+4>>2]=E;c[D+(n*20|0)+8>>2]=q;c[D+(n*20|0)+12>>2]=0;c[D+(n*20|0)+16>>2]=0;a[D+(n*20|0)+1>>0]=0;break}else{Di(D,79,E,q,0)|0;break}}while(0);q=r+2|0;do if(!y){if((a[l>>0]|0)!=-88){H=Jj(f,l,q)|0;F=90;break}m=c[s>>2]|0;n=c[l+28>>2]|0;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;f=c[m+104>>2]|0;a[f+(p*20|0)>>0]=78;b[f+(p*20|0)+2>>1]=0;c[f+(p*20|0)+4>>2]=n;c[f+(p*20|0)+8>>2]=q;c[f+(p*20|0)+12>>2]=0;c[f+(p*20|0)+16>>2]=0;a[f+(p*20|0)+1>>0]=0;break}else{Di(m,78,n,q,0)|0;break}}else{H=Jj(f,0,q)|0;F=90}while(0);do if(((F|0)==90?(H|0)!=(q|0):0)?(G=c[s>>2]|0,G|0):0){m=G+108|0;n=c[m>>2]|0;if((c[G+112>>2]|0)>(n|0)){c[m>>2]=n+1;G=c[G+104>>2]|0;a[G+(n*20|0)>>0]=79;b[G+(n*20|0)+2>>1]=0;c[G+(n*20|0)+4>>2]=H;c[G+(n*20|0)+8>>2]=q;c[G+(n*20|0)+12>>2]=0;c[G+(n*20|0)+16>>2]=0;a[G+(n*20|0)+1>>0]=0;break}else{Di(G,79,H,q,0)|0;break}}while(0);if(t){n=r+3|0;o=n-(a[h>>0]|0)|0;p=t+108|0;m=c[p>>2]|0;q=t+112|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;H=c[t+104>>2]|0;a[H+(m*20|0)>>0]=63;b[H+(m*20|0)+2>>1]=0;c[H+(m*20|0)+4>>2]=0;c[H+(m*20|0)+8>>2]=o;c[H+(m*20|0)+12>>2]=n;c[H+(m*20|0)+16>>2]=0;a[H+(m*20|0)+1>>0]=0}else m=Di(t,63,0,o,n)|0;n=c[t>>2]|0;d:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[p>>2]|0)+-1|0;n=c[t+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=h;a[o>>0]=-8;break}else{Ei(t,n+(m*20|0)|0,h,-8);break}}else if(c[h+4>>2]&16|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,h);break d}m=h;if((c[n+304>>2]|0)>>>0<=m>>>0){if((c[n+308>>2]|0)>>>0<=m>>>0)break;H=n+300|0;c[h>>2]=c[H>>2];c[H>>2]=h;break d}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[p>>2]|0;if((n|0)>0)b[(c[t+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=d[h>>0]|0;m=(g|0)==24&1;if((c[q>>2]|0)>(n|0)){c[p>>2]=n+1;F=c[t+104>>2]|0;a[F+(n*20|0)>>0]=-98;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=m;c[F+(n*20|0)+8>>2]=0;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;F=120;break}else{Di(t,158,m,0,0)|0;F=120;break}}else F=120}else F=120;while(0);if((F|0)==120?j|0:0)F=121;if((F|0)==121)ni(I,j);if(k|0)ni(I,k);if(!l){Ra=J;return}ni(I,l);Ra=J;return}function dn(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,v=0,w=0;w=Ra;Ra=Ra+32|0;v=w+24|0;t=w+16|0;s=w+8|0;n=w;j=c[e>>2]|0;a:do if(d){i=(Eu(d)|0)&1073741823;if(i>>>0>4&(c[7327]|j&64|0)!=0?(Lu(d,46556,5)|0)==0:0){j=j|64;k=0;l=i+2|0;m=0;do{l=Sv(l|0,m|0,(a[d+k>>0]|0)==38|0,0)|0;m=L()|0;k=k+1|0}while((k|0)!=(i|0));k=pb(l,m)|0;if(!k){g=7;Ra=w;return g|0}b:do if((a[d+5>>0]|0)==47?(a[d+6>>0]|0)==47:0){l=7;c:while(1){switch(a[d+l>>0]|0){case 0:case 47:break c;default:{}}l=l+1|0}switch(l&2147483647|0){case 7:{l=7;break b}case 16:{i=d+7|0;if(!(Lu(46562,i,9)|0)){l=16;break b}break}default:i=d+7|0}c[n>>2]=l+-7;c[n+4>>2]=i;l=k;i=1;k=Bb(46572,n)|0;u=86;break a}else l=5;while(0);i=0;n=0;d:while(1){p=k+(i+-1)|0;e:while(1){m=a[d+l>>0]|0;switch(m<<24>>24){case 0:case 35:break d;default:{}}o=l+1|0;f:do if((m<<24>>24==37?(q=a[d+o>>0]|0,(a[880+(q&255)>>0]&8)!=0):0)?(r=a[d+(l+2)>>0]|0,(a[880+(r&255)>>0]&8)!=0):0){m=q<<24>>24;l=l+3|0;o=r<<24>>24;m=(0-(o>>>6&1)&9)+o&15|(0-(m>>>6&1)&9)+m<<4&240;if(m|0){u=37;break e}switch(n|0){case 0:while(1){switch(a[d+l>>0]|0){case 63:case 35:case 0:break f;default:{}}l=l+1|0}case 1:while(1){switch(a[d+l>>0]|0){case 38:case 61:case 35:case 0:break f;default:{}}l=l+1|0}case 2:while(1){switch(a[d+l>>0]|0){case 38:case 35:case 0:break f;default:{}}l=l+1|0}default:while(1){switch(a[d+l>>0]|0){case 35:case 0:break f;default:{}}l=l+1|0}}}else u=38;while(0);g:do if((u|0)==38){u=0;switch(n|0){case 0:{u=47;break e}case 2:{u=48;break e}case 1:break;default:{l=o;break e}}switch(m<<24>>24){case 38:case 61:break;default:{n=1;l=o;break e}}if(a[p>>0]|0){u=45;break e}l=o;while(1){switch(a[d+l>>0]|0){case 35:case 0:break g;default:{}}if((a[d+(l+-1)>>0]|0)==38)break g;l=l+1|0}}while(0)}if((u|0)==37){u=0;m=m&255}else if((u|0)==45){u=0;if(m<<24>>24==38){a[k+i>>0]=0;m=0;i=i+1|0;n=1;l=o}else{m=0;n=2;l=o}}else if((u|0)==47){u=0;if(m<<24>>24==63)u=49;else{n=0;l=o}}else if((u|0)==48){u=0;if(m<<24>>24==38)u=49;else{n=2;l=o}}if((u|0)==49){u=0;m=0;n=1;l=o}a[k+i>>0]=m;i=i+1|0}if((n|0)==1){a[k+i>>0]=0;i=i+1|0}a[k+i>>0]=0;a[k+(i+1)>>0]=0;i=k+(((Eu(k)|0)&1073741823)+1)|0;if(a[i>>0]|0){r=b;b=i;h:while(1){i:do if(!b){i=1;l=(Eu(1)|0)&1073741823;u=71}else{d=Eu(b)|0;i=b+((d&1073741823)+1)|0;l=(Eu(i)|0)&1073741823;switch(d&1073741823|0){case 3:if(!(Lu(46600,b,3)|0)){m=i;break i}else{u=71;break i}case 5:{if(!(Lu(46604,b,5)|0)){o=393216;p=-393217;q=46604;n=18576}else{u=71;break i}break}case 4:{if(!(Lu(58212,b,4)|0)){o=j&135;p=-136;q=31701;n=18608}else{u=71;break i}break}default:{u=71;break i}}b=c[n>>2]|0;if(!b){u=67;break h}m=0;while(1){if((l|0)==((Eu(b)|0)&1073741823|0)?(Lu(i,b,l)|0)==0:0)break;m=m+1|0;b=c[n+(m<<3)>>2]|0;if(!b){u=67;break h}}b=c[n+(m<<3)+4>>2]|0;if(!b){u=67;break h}if((b&-129|0)>(o|0)){u=69;break h}j=b|p&j;u=71}while(0);if((u|0)==71){u=0;m=r}b=i+(l+1)|0;if(!(a[b>>0]|0)){b=m;u=77;break a}else r=m}if((u|0)==67){c[s>>2]=q;c[s+4>>2]=i;l=k;i=1;k=Bb(46635,s)|0;u=86;break}else if((u|0)==69){c[t>>2]=q;c[t+4>>2]=i;l=k;i=3;k=Bb(46655,t)|0;u=86;break}}else u=77}else u=73}else{i=0;u=73}while(0);if((u|0)==73){k=pb(i+2|0,0)|0;if(!k){g=7;Ra=w;return g|0}if(i|0)ew(k|0,d|0,i|0)|0;a[k+i>>0]=0;a[k+(i+1)>>0]=0;j=j&-65;u=77}j:do if((u|0)==77){k:do if(!(mb()|0)){i=c[14770]|0;l=(i|0)==0;if((b|0)==0|l){c[f>>2]=i;if(l)break;else{i=0;break j}}while(1){if(!(Bu(b,c[i+16>>2]|0)|0))break;i=c[i+12>>2]|0;if(!i){u=83;break k}}c[f>>2]=i;i=0;break j}else u=83;while(0);if((u|0)==83)c[f>>2]=0;c[v>>2]=b;l=k;i=1;k=Bb(46679,v)|0;u=86}while(0);do if((u|0)==86){c[h>>2]=k;if(l)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);k=0;break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);k=0;break}else k=0}while(0);c[e>>2]=j;c[g>>2]=k;g=i;Ra=w;return g|0}function en(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;do if(d){i=c[d+4>>2]|0;c[i+4>>2]=c[d>>2];h=i+48|0;d=c[h>>2]|0;if(!d){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)g=26;else g=27}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){g=c[14978]|0;f=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(d){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=27}else g=27}else g=26}if((g|0)==26){c[h>>2]=0;c[i+52>>2]=95;break}else if((g|0)==27){f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));c[h>>2]=d;c[i+52>>2]=95;g=34;break}}else g=34}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](84)|0;if(!d)break}else{d=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e)break;d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=e}else d=e}f=d;g=f+84|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(g|0));g=34}while(0);if((g|0)==34){if(a[d+76>>0]|0){b=d;return b|0}e=d+77|0;f=d+8|0;g=f+64|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[e>>0]=1;b=d;return b|0}d=b+81|0;if(a[d>>0]|0){b=0;return b|0}if(a[b+82>>0]|0){b=0;return b|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){b=0;return b|0}c[d+12>>2]=7;b=0;return b|0}function fn(e,f,g){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,x=0;w=Ra;Ra=Ra+160|0;r=w+144|0;q=w+136|0;p=w+128|0;o=w;f=c[g>>2]|0;do if(f){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0){f=c[f+16>>2]|0;break}if(!(g&1))f=Gg(f,1)|0;else f=0}else f=0;while(0);v=c[(c[e>>2]|0)+32>>2]|0;n=(f|0)==0?59952:f;t=v+20|0;l=c[t>>2]|0;a:do if((l|0)>0){u=v+16|0;m=c[u>>2]|0;f=0;while(1){j=m+(f<<4)+4|0;k=c[j>>2]|0;if(k|0){h=c[m+(f<<4)>>2]|0;i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=n;do{h=h+1|0;i=i+1|0;x=a[h>>0]|0;g=(d[208+(x&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(g|0)!=0))}if(!g)break}f=f+1|0;if((f|0)>=(l|0)){s=15;break a}}if(f>>>0<2){c[q>>2]=n;Cb(128,o,46730,q)|0;break}if((a[k+8>>0]|0)==0?(c[k+16>>2]|0)==0:0){ug(k);c[j>>2]=0;c[m+(f<<4)+12>>2]=0;if((c[t>>2]|0)>2){j=v+480|0;k=v+304|0;l=v+308|0;m=v+300|0;i=2;f=2;do{g=c[u>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(v,g);break}x=g;if((c[k>>2]|0)>>>0<=x>>>0?(c[l>>2]|0)>>>0>x>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){x=g+(f<<4)|0;c[x>>2]=c[h>>2];c[x+4>>2]=c[h+4>>2];c[x+8>>2]=c[h+8>>2];c[x+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[t>>2]|0));c[t>>2]=f;if((f|0)>=3){Ra=w;return}}else c[t>>2]=2;f=c[u>>2]|0;g=v+412|0;if((f|0)==(g|0)){Ra=w;return};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];c[g+20>>2]=c[f+20>>2];c[g+24>>2]=c[f+24>>2];c[g+28>>2]=c[f+28>>2];do if(f|0){if(c[v+480>>2]|0){Xd(v,f);break}x=f;if((c[v+304>>2]|0)>>>0<=x>>>0?(c[v+308>>2]|0)>>>0>x>>>0:0){x=v+300|0;c[f>>2]=c[x>>2];c[x>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[u>>2]=g;Ra=w;return}c[r>>2]=n;Cb(128,o,46756,r)|0}else s=15;while(0);if((s|0)==15){c[p>>2]=n;Cb(128,o,46709,p)|0}c[e+20>>2]=1;yc(c[e>>2]|0,o,-1,1,-1)|0;Ra=w;return}function gn(e,f,g){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;if(c[f+56>>2]|0)return;h=c[f+8>>2]|0;if(!h)return;p=f+72|0;o=e+116|0;if(!g){do{i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<>2]=j|k,(f|0)==1):0)Oe(l)|0;g=l+80|0;c[g>>2]=c[g>>2]|k;bl(e,h,-1);h=c[h+20>>2]|0}while((h|0)!=0);return}do{f=b[h+52>>1]|0;a:do if(f<<16>>16){m=c[h+4>>2]|0;n=h+32|0;l=f&65535;k=0;while(1){if((b[m+(k<<1)>>1]|0)>-1){i=c[(c[n>>2]|0)+(k<<2)>>2]|0;j=a[i>>0]|0;f=(d[208+(j&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(j<<24>>24==0|(f|0)!=0)){j=g;do{i=i+1|0;j=j+1|0;q=a[i>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break}k=k+1|0;if(k>>>0>=l>>>0)break a}i=c[p>>2]|0;if(!i)f=-1e6;else{j=c[(c[e>>2]|0)+16>>2]|0;f=0;while(1)if((c[j+(f<<4)+12>>2]|0)==(i|0))break;else f=f+1|0}l=c[o>>2]|0;l=(l|0)==0?e:l;i=l+84|0;j=c[i>>2]|0;k=1<>2]=j|k,(f|0)==1):0)Oe(l)|0;q=l+80|0;c[q>>2]=c[q>>2]|k;bl(e,h,-1)}while(0);h=c[h+20>>2]|0}while((h|0)!=0);return}function hn(d,f,g,h,i){d=d|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;A=Ra;Ra=Ra+96|0;t=A+64|0;r=A+48|0;q=A+32|0;p=A+16|0;o=A;y=A+80|0;z=A+92|0;x=c[d>>2]|0;m=d+8|0;j=c[m>>2]|0;do if(!j){if((c[d+116>>2]|0)==0?(b[x+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[x+272>>2]|0){if(!(a[x+81>>0]|0))l=15}else{do if((e[x+276>>1]|0)>=224){j=x+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}j=x+296|0;k=c[j>>2]|0;if(!k){j=x+292|0;break}else{c[j>>2]=c[k>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=16;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;l=15}while(0);if((l|0)==15){k=_d(x,224,0)|0;l=16}if((l|0)==16?k|0:0){j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=x;j=x+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=d;c[m>>2]=k;Di(k,61,0,1,0)|0;u=k;break}Ra=A;return}else u=j;while(0);n=(c[x+16>>2]|0)+(f<<4)|0;j=d+92|0;v=u+108|0;s=u+112|0;w=u+104|0;k=c[n>>2]|0;l=Sd(x,35174,k)|0;m=(l|0)==0;do if(!h){do if(!m){k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[w>>2]|0;a[l+(j*20|0)>>0]=-119;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=k;c[l+(j*20|0)+8>>2]=f;c[l+(j*20|0)+12>>2]=0;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0;l=0;break}else{Di(u,137,k,f,0)|0;l=0;break}}else{c[o>>2]=k;c[o+4>>2]=35174;c[o+8>>2]=46824;Ak(d,46863,o);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}while(0);j=Sd(x,46837,c[n>>2]|0)|0;do if(j|0){j=c[j+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);m=c[v>>2]|0;if((c[s>>2]|0)>(m|0)){c[v>>2]=m+1;t=c[w>>2]|0;a[t+(m*20|0)>>0]=-119;b[t+(m*20|0)+2>>1]=0;c[t+(m*20|0)+4>>2]=j;c[t+(m*20|0)+8>>2]=f;c[t+(m*20|0)+12>>2]=0;c[t+(m*20|0)+16>>2]=0;a[t+(m*20|0)+1>>0]=0;break}else{Di(u,137,j,f,0)|0;break}}while(0);j=Sd(x,46850,c[n>>2]|0)|0;if(j){m=c[j+28>>2]|0;c[y+8>>2]=m;a[z+2>>0]=0;Hj(d,f,m,1,46850);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=-119;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=m;c[z+(j*20|0)+8>>2]=f;c[z+(j*20|0)+12>>2]=0;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0;break}else{Di(u,137,m,f,0)|0;break}}}else{if(m){c[p>>2]=k;c[p+4>>2]=35174;c[p+8>>2]=46824;Ak(d,46863,p);k=c[j>>2]|0;c[y>>2]=k;a[z>>0]=16;l=16}else{k=c[l+28>>2]|0;c[y>>2]=k;a[z>>0]=0;Hj(d,f,k,1,35174);c[q>>2]=c[n>>2];c[q+4>>2]=35174;c[q+8>>2]=i;c[q+12>>2]=h;Ak(d,42751,q);l=0}j=c[n>>2]|0;m=Sd(x,46837,j)|0;if(m){j=c[m+28>>2]|0;c[y+4>>2]=j;a[z+1>>0]=0;Hj(d,f,j,1,46837);c[r>>2]=c[n>>2];c[r+4>>2]=46837;c[r+8>>2]=i;c[r+12>>2]=h;Ak(d,42751,r);j=c[n>>2]|0}j=Sd(x,46850,j)|0;if(j){x=c[j+28>>2]|0;c[y+8>>2]=x;a[z+2>>0]=0;Hj(d,f,x,1,46850);c[t>>2]=c[n>>2];c[t+4>>2]=46850;c[t+8>>2]=i;c[t+12>>2]=h;Ak(d,42751,t)}}while(0);j=c[v>>2]|0;if((c[s>>2]|0)>(j|0)){c[v>>2]=j+1;z=c[w>>2]|0;a[z+(j*20|0)>>0]=109;b[z+(j*20|0)+2>>1]=0;c[z+(j*20|0)+4>>2]=g;c[z+(j*20|0)+8>>2]=k;c[z+(j*20|0)+12>>2]=f;c[z+(j*20|0)+16>>2]=0;a[z+(j*20|0)+1>>0]=0}else j=Di(u,109,g,k,f)|0;if(!(a[(c[u>>2]|0)+81>>0]|0)){g=c[w>>2]|0;a[g+(j*20|0)+1>>0]=-3;c[g+(j*20|0)+16>>2]=3}j=c[v>>2]|0;if((j|0)<=0){Ra=A;return}b[(c[w>>2]|0)+((j+-1|0)*20|0)+2>>1]=l&255;Ra=A;return}function jn(f,g,h,i,j,k){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,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+16|0;t=fa+8|0;s=fa;Z=c[f>>2]|0;_=j+1|0;$=j+2|0;ea=j+3|0;da=j+4|0;ca=j+5|0;ba=j+6|0;W=j+7|0;X=f+44|0;Y=c[X>>2]|0;c[X>>2]=(Y|0)>(W|0)?Y:W;Y=f+8|0;l=c[Y>>2]|0;if(!l){if((c[f+116>>2]|0)==0?(b[Z+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Z+272>>2]|0)if(!(a[Z+81>>0]|0))V=15;else{Ra=fa;return}else{do if((e[Z+276>>1]|0)>=224){l=Z+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}l=Z+296|0;m=c[l>>2]|0;if(!m){l=Z+292|0;break}else{c[l>>2]=c[m>>2];aa=Z+284|0;c[aa>>2]=(c[aa>>2]|0)+1;break a}}else l=Z+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;V=15}while(0);if((V|0)==15)m=_d(Z,224,0)|0;if(!m){Ra=fa;return}o=m+104|0;p=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[m>>2]=Z;l=Z+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[Y>>2]=m;Di(m,61,0,1,0)|0;aa=m}else aa=l;if((g|0)==0|(aa|0)==0){Ra=fa;return}q=g+28|0;m=c[q>>2]|0;if(!m){Ra=fa;return}l=c[g>>2]|0;if(!(md(46886,l,31415,92)|0)){Ra=fa;return}o=c[g+72>>2]|0;p=c[Z+16>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}o=c[p+(n<<4)>>2]|0;p=c[f>>2]|0;do if(((a[p+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[p+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[p+316>>2]|0,28,l,0,o,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=fa;return}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;Ra=fa;return}if(!l){m=c[q>>2]|0;l=c[g>>2]|0;break}else{Ra=fa;return}}while(0);Hj(f,n,m,0,l);S=k+1|0;T=k+2|0;m=f+40|0;l=c[m>>2]|0;c[m>>2]=(l|0)>(T|0)?l:T;Gj(f,k,n,g,108);m=c[g>>2]|0;T=aa+108|0;l=c[T>>2]|0;U=aa+112|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;R=c[aa+104>>2]|0;a[R+(l*20|0)>>0]=110;b[R+(l*20|0)+2>>1]=0;c[R+(l*20|0)+4>>2]=0;c[R+(l*20|0)+8>>2]=da;c[R+(l*20|0)+12>>2]=0;c[R+(l*20|0)+16>>2]=0;a[R+(l*20|0)+1>>0]=0}else l=Di(aa,110,0,da,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,m,0)}m=c[g+8>>2]|0;R=(h|0)==0;if(!m)l=1;else{B=g+36|0;C=aa+104|0;D=f+56|0;E=Z+272|0;F=Z+276|0;G=Z+81|0;H=Z+288|0;I=Z+300|0;J=Z+296|0;K=Z+284|0;L=Z+292|0;M=aa+12|0;N=(Z|0)==0;O=Z+480|0;P=Z+304|0;Q=Z+308|0;l=1;do{b:do if(R|(m|0)==(h|0)){l=(c[m+36>>2]|0)==0?0:l;o=m+55|0;o=d[o>>0]|d[o+1>>0]<<8;if(!((c[B>>2]&32|0)!=0&(o&3)==2)){q=e[m+52>>1]|0;p=c[m>>2]|0;if(!(o&8))t=q;else t=e[m+50>>1]|0}else{q=e[m+50>>1]|0;t=q;p=c[g>>2]|0}A=t+-1|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=110;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=ca;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,110,0,ca,0)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,p,0)}p=c[X>>2]|0;o=A+W|0;c[X>>2]=(p|0)>(o|0)?p:o;o=c[m+44>>2]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=108;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=S;c[z+(p*20|0)+8>>2]=o;c[z+(p*20|0)+12>>2]=n;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,108,S,o,n)|0;o=c[Y>>2]|0;r=Ij(f,m)|0;c:do if(r|0){p=c[o>>2]|0;if(!(a[p+81>>0]|0)){y=c[o+104>>2]|0;z=(c[o+108>>2]|0)+-1|0;a[y+(z*20|0)+1>>0]=-9;c[y+(z*20|0)+16>>2]=r;break}if(c[p+480>>2]|0)break;z=(c[r>>2]|0)+-1|0;c[r>>2]=z;if(z|0)break;o=c[r+12>>2]|0;do if(o|0){if(c[o+480>>2]|0){Xd(o,r);break c}p=r;if((c[o+304>>2]|0)>>>0>p>>>0)break;if((c[o+308>>2]|0)>>>0<=p>>>0)break;z=o+300|0;c[r>>2]=c[z>>2];c[z>>2]=r;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{z=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=70;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=q;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else Di(aa,70,q,$,0)|0;s=m+50|0;o=e[s>>1]|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;z=c[C>>2]|0;a[z+(p*20|0)>>0]=70;b[z+(p*20|0)+2>>1]=0;c[z+(p*20|0)+4>>2]=o;c[z+(p*20|0)+8>>2]=ea;c[z+(p*20|0)+12>>2]=0;c[z+(p*20|0)+16>>2]=0;a[z+(p*20|0)+1>>0]=0}else Di(aa,70,o,ea,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=63;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=0;c[z+(o*20|0)+8>>2]=$;c[z+(o*20|0)+12>>2]=_;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,$,_)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30184;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30184,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;z=c[C>>2]|0;a[z+(o*20|0)>>0]=36;b[z+(o*20|0)+2>>1]=0;c[z+(o*20|0)+4>>2]=S;c[z+(o*20|0)+8>>2]=0;c[z+(o*20|0)+12>>2]=0;c[z+(o*20|0)+16>>2]=0;a[z+(o*20|0)+1>>0]=0;z=o}else z=Di(aa,36,S,0,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;y=c[C>>2]|0;a[y+(o*20|0)>>0]=70;b[y+(o*20|0)+2>>1]=0;c[y+(o*20|0)+4>>2]=0;c[y+(o*20|0)+8>>2]=$;c[y+(o*20|0)+12>>2]=0;c[y+(o*20|0)+16>>2]=0;a[y+(o*20|0)+1>>0]=0}else Di(aa,70,0,$,0)|0;o=c[T>>2]|0;d:do if(t>>>0>1){y=c[D>>2]|0;w=y+-1|0;c[D>>2]=w;p=A<<2;e:do if(c[E>>2]|0)if(!(a[G>>0]|0))V=105;else break b;else{do if(0<0|(0==0?(e[F>>1]|0)>>>0

      >>0:0))o=H;else{o=c[I>>2]|0;if(o|0){c[I>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}o=c[J>>2]|0;if(!o){o=L;break}c[J>>2]=c[o>>2];c[K>>2]=(c[K>>2]|0)+1;x=o;break e}while(0);c[o>>2]=(c[o>>2]|0)+1;V=105}while(0);if((V|0)==105){V=0;x=_d(Z,p,0)|0}if(!x)break b;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;p=c[C>>2]|0;a[p+(o*20|0)>>0]=11;o=p+(o*20|0)+1|0;p=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0))}else Di(aa,11,0,0,0)|0;r=c[T>>2]|0;do if((A|0)==1){if((b[s>>1]|0)!=1)break;if(!(a[m+54>>0]|0))break;if((c[U>>2]|0)>(r|0)){c[T>>2]=r+1;v=c[C>>2]|0;a[v+(r*20|0)>>0]=51;b[v+(r*20|0)+2>>1]=0;c[v+(r*20|0)+4>>2]=W;c[v+(r*20|0)+8>>2]=w;c[v+(r*20|0)+12>>2]=0;c[v+(r*20|0)+16>>2]=0;a[v+(r*20|0)+1>>0]=0;break}else{Di(aa,51,W,w,0)|0;break}}while(0);v=m+32|0;u=0;do{o=c[(c[v>>2]|0)+(u<<2)>>2]|0;q=c[f>>2]|0;p=a[q+78>>0]|0;t=a[q+165>>0]|0;q=Zi(q,p,o,t&255)|0;do if(!(t<<24>>24)){if(!q){q=_i(f,p,0,o)|0;break}if(c[q+12>>2]|0)break;q=_i(f,p,q,o)|0}while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=70;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=u;c[t+(o*20|0)+8>>2]=$;c[t+(o*20|0)+12>>2]=0;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,70,u,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;t=c[C>>2]|0;a[t+(o*20|0)>>0]=90;b[t+(o*20|0)+2>>1]=0;c[t+(o*20|0)+4>>2]=S;c[t+(o*20|0)+8>>2]=u;c[t+(o*20|0)+12>>2]=ea;c[t+(o*20|0)+16>>2]=0;a[t+(o*20|0)+1>>0]=0}else Di(aa,90,S,u,ea)|0;o=u+W|0;p=c[T>>2]|0;if((c[U>>2]|0)>(p|0)){c[T>>2]=p+1;t=c[C>>2]|0;a[t+(p*20|0)>>0]=52;b[t+(p*20|0)+2>>1]=0;c[t+(p*20|0)+4>>2]=ea;c[t+(p*20|0)+8>>2]=0;c[t+(p*20|0)+12>>2]=o;c[t+(p*20|0)+16>>2]=0;a[t+(p*20|0)+1>>0]=0}else p=Di(aa,52,ea,0,o)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((p|0)<0)o=(c[T>>2]|0)+-1|0;else o=p;s=c[C>>2]|0;t=s+(o*20|0)+1|0;if(a[t>>0]|0){Ei(aa,s+(o*20|0)|0,q,-2);break}if(!q)break;c[s+(o*20|0)+16>>2]=q;a[t>>0]=-2}while(0);c[x+(u<<2)>>2]=p;o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=128;u=u+1|0}while((u|0)<(A|0));if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=70;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=A;c[v+(o*20|0)+8>>2]=$;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,70,A,$,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;v=c[C>>2]|0;a[v+(o*20|0)>>0]=11;b[v+(o*20|0)+2>>1]=0;c[v+(o*20|0)+4>>2]=0;c[v+(o*20|0)+8>>2]=w;c[v+(o*20|0)+12>>2]=0;c[v+(o*20|0)+16>>2]=0;a[v+(o*20|0)+1>>0]=0}else Di(aa,11,0,w,0)|0;q=c[T>>2]|0;p=a[(c[aa>>2]|0)+81>>0]|0;if(!(p<<24>>24))o=(c[C>>2]|0)+((((r|0)<1?q:r)+-1|0)*20|0)|0;else o=59308;c[o+8>>2]=q;o=0;s=q;while(1){q=c[x+(o<<2)>>2]|0;if(!(p<<24>>24))p=(c[C>>2]|0)+(((q|0)<0?s+-1|0:q)*20|0)|0;else p=59308;c[p+8>>2]=s;p=o+W|0;if((c[U>>2]|0)>(s|0)){c[T>>2]=s+1;w=c[C>>2]|0;a[w+(s*20|0)>>0]=90;b[w+(s*20|0)+2>>1]=0;c[w+(s*20|0)+4>>2]=S;c[w+(s*20|0)+8>>2]=o;c[w+(s*20|0)+12>>2]=p;c[w+(s*20|0)+16>>2]=0;a[w+(s*20|0)+1>>0]=0}else Di(aa,90,S,o,p)|0;o=o+1|0;if((o|0)>=(A|0))break;p=a[(c[aa>>2]|0)+81>>0]|0;s=c[T>>2]|0}p=c[M>>2]|0;o=0-y|0;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0)mk(p,aa,o);else c[(c[p+64>>2]|0)+(o<<2)>>2]=c[T>>2];do if(!N){if(c[O>>2]|0){Xd(Z,x);break d}o=x;if((c[P>>2]|0)>>>0>o>>>0)break;if((c[Q>>2]|0)>>>0<=o>>>0)break;c[x>>2]=c[I>>2];c[I>>2]=x;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{A=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}}else r=o;while(0);o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=1;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,1,_,ea)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30224;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30224,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=2;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=5;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=S;c[A+(o*20|0)+8>>2]=r;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,5,S,r,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=63;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=0;c[A+(o*20|0)+8>>2]=_;c[A+(o*20|0)+12>>2]=ba;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,63,0,_,ba)|0;do if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;p=c[C>>2]|0;q=p+(o*20|0)+1|0;if(!(a[q>>0]|0)){c[p+(o*20|0)+16>>2]=30264;a[q>>0]=-8;break}else{Ei(aa,p+(o*20|0)|0,30264,-8);break}}while(0);o=c[T>>2]|0;if((o|0)>0)b[(c[C>>2]|0)+((o+-1|0)*20|0)+2>>1]=1;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=92;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=da;c[A+(o*20|0)+8>>2]=3;c[A+(o*20|0)+12>>2]=ea;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else o=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(aa,(c[C>>2]|0)+(o*20|0)|0,46896,0)}o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=121;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=j;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;o=c[T>>2]|0;if((c[U>>2]|0)>(o|0)){c[T>>2]=o+1;A=c[C>>2]|0;a[A+(o*20|0)>>0]=122;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=i;c[A+(o*20|0)+8>>2]=ea;c[A+(o*20|0)+12>>2]=j;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;p=c[T>>2]|0;if((p|0)>0)b[(c[C>>2]|0)+((p+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))o=(c[C>>2]|0)+(((z|0)<0?p+-1|0:z)*20|0)|0;else o=59308;c[o+8>>2]=p}while(0);m=c[m+20>>2]|0}while((m|0)!=0)}if(l<<24>>24==0|R^1){Ra=fa;return}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[aa+104>>2]|0;a[$+(l*20|0)>>0]=93;b[$+(l*20|0)+2>>1]=0;c[$+(l*20|0)+4>>2]=k;c[$+(l*20|0)+8>>2]=ba;c[$+(l*20|0)+12>>2]=0;c[$+(l*20|0)+16>>2]=0;a[$+(l*20|0)+1>>0]=0}else Di(aa,93,k,ba,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;n=c[aa+104>>2]|0;a[n+(l*20|0)>>0]=20;b[n+(l*20|0)+2>>1]=0;c[n+(l*20|0)+4>>2]=ba;c[n+(l*20|0)+8>>2]=0;c[n+(l*20|0)+12>>2]=0;c[n+(l*20|0)+16>>2]=0;a[n+(l*20|0)+1>>0]=0;n=l}else n=Di(aa,20,ba,0,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ba=c[aa+104>>2]|0;a[ba+(l*20|0)>>0]=73;b[ba+(l*20|0)+2>>1]=0;c[ba+(l*20|0)+4>>2]=0;c[ba+(l*20|0)+8>>2]=ca;c[ba+(l*20|0)+12>>2]=0;c[ba+(l*20|0)+16>>2]=0;a[ba+(l*20|0)+1>>0]=0}else Di(aa,73,0,ca,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;ca=c[aa+104>>2]|0;a[ca+(l*20|0)>>0]=92;b[ca+(l*20|0)+2>>1]=0;c[ca+(l*20|0)+4>>2]=da;c[ca+(l*20|0)+8>>2]=3;c[ca+(l*20|0)+12>>2]=ea;c[ca+(l*20|0)+16>>2]=0;a[ca+(l*20|0)+1>>0]=0}else l=Di(aa,92,da,3,ea)|0;if(!(a[(c[aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[T>>2]|0)+-1|0;Ei(aa,(c[aa+104>>2]|0)+(l*20|0)|0,46896,0)}l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=121;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=j;c[da+(l*20|0)+12>>2]=0;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,121,i,j,0)|0;l=c[T>>2]|0;if((c[U>>2]|0)>(l|0)){c[T>>2]=l+1;da=c[aa+104>>2]|0;a[da+(l*20|0)>>0]=122;b[da+(l*20|0)+2>>1]=0;c[da+(l*20|0)+4>>2]=i;c[da+(l*20|0)+8>>2]=ea;c[da+(l*20|0)+12>>2]=j;c[da+(l*20|0)+16>>2]=0;a[da+(l*20|0)+1>>0]=0}else Di(aa,122,i,ea,j)|0;m=c[T>>2]|0;if((m|0)>0)b[(c[aa+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if(!(a[(c[aa>>2]|0)+81>>0]|0))l=(c[aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;Ra=fa;return}function kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;f=c[h>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){o=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))o=0;else{o=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else o=c[f>>2]|0;while(0);p=o+1&-2;f=c[h+4>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){l=Mg(+g[f>>3])|0;L()|0;break}if(!(i&18))l=0;else{l=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0}}else l=c[f>>2]|0;while(0);m=(p<<3)+60|0;n=c[(c[d>>2]|0)+32>>2]|0;h=((m|0)<0)<<31>>31;a:do if(!n){h=Sv(m|0,h|0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;k=37;break}h=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){q=c[14978]|0;i=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&i>>>0<=q>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;k=47}else k=47}}}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0>>0|(0==(h|0)?(e[n+276>>1]|0)>>>0>>0:0))){f=n+300|0;i=c[f>>2]|0;if(i|0){c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}f=n+296|0;i=c[f>>2]|0;if(!i){f=n+292|0;break}else{c[f>>2]=c[i>>2];j=n+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;k=37;break a}}else f=n+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}j=_d(n,m,h)|0;k=37}while(0);if((k|0)==37?j|0:0){f=j;k=47}if((k|0)==47){gw(f|0,0,m|0)|0;c[f+56>>2]=n;c[f>>2]=0;c[f+8>>2]=o;c[f+12>>2]=l;q=f+60|0;c[f+24>>2]=q;c[f+20>>2]=q+(p<<2);if((yc(c[d>>2]|0,f,60,0,96)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0)return;if(a[f+82>>0]|0)return;a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;q=f+272|0;c[q>>2]=(c[q>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function ln(a){a=a|0;var b=0,d=0;b=c[a+56>>2]|0;if(!a)return;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}d=a;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[a>>2]=c[d>>2];c[d>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function mn(b,d,f){b=b|0;d=d|0;f=f|0;var h=0,i=0,j=0;j=mc(c[f>>2]|0)|0;b=c[f+4>>2]|0;d=e[b+8>>1]|0;do if(!(d&4)){if(d&8|0){i=Mg(+g[b>>3])|0;L()|0;break}if(!(d&18))i=0;else{i=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0}}else i=c[b>>2]|0;while(0);if(!(c[j>>2]|0)){d=j+8|0;if((c[d>>2]|0)<=0){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+20>>2]|0;b=0;do{c[f+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}if((i|0)>0){d=c[j+20>>2]|0;b=0;do{h=d+(b<<2)|0;c[h>>2]=(c[h>>2]|0)+1;b=b+1|0}while((b|0)!=(i|0))}d=j+8|0;if((i|0)>=(c[d>>2]|0)){i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}f=c[j+24>>2]|0;h=c[j+20>>2]|0;b=i;do{i=f+(b<<2)|0;c[i>>2]=(c[i>>2]|0)+1;c[h+(b<<2)>>2]=1;b=b+1|0}while((b|0)<(c[d>>2]|0));i=c[j>>2]|0;i=i+1|0;c[j>>2]=i;return}function nn(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;m=Ra;Ra=Ra+16|0;l=m+8|0;i=m;j=mc(c[f>>2]|0)|0;k=j+12|0;h=((c[k>>2]|0)*25|0)+25|0;g=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](h)|0;if(!e)break}else{e=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){n=c[14978]|0;g=Tv(f|0,g|0,e|0,((e|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=n>>>0)&1}e=Wa[c[29340>>2]&127](e)|0;if(!e)break;f=Wa[c[29352>>2]&127](e)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(e|0,0,h|0)|0;n=i;c[n>>2]=c[j>>2];c[n+4>>2]=0;Cb(24,e,46929,i)|0;if((c[k>>2]|0)>0){i=j+24|0;g=0;h=e+((Eu(e)|0)&1073741823)|0;while(1){o=(c[(c[i>>2]|0)+(g<<2)>>2]|0)+1|0;f=c[j>>2]|0;n=Sv(o|0,0,-1,-1)|0;f=Sv(n|0,L()|0,f|0,0)|0;o=_v(f|0,L()|0,o|0,0)|0;f=L()|0;n=l;c[n>>2]=o;c[n+4>>2]=f;Cb(24,h,46934,l)|0;if(!h)f=0;else f=(Eu(h)|0)&1073741823;g=g+1|0;if((g|0)>=(c[k>>2]|0))break;else h=h+f|0}}if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18){Ra=m;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=m;return}while(0);e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0){Ra=m;return}if(a[e+82>>0]|0){Ra=m;return}a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;o=e+272|0;c[o>>2]=(c[o>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=m;return}c[e+12>>2]=7;Ra=m;return}function on(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;k=l;j=c[e>>2]|0;a:do if(j){f=a[j>>0]|0;do if(!(f<<24>>24)){f=39441;i=3}else{h=f&255;f=208+h|0;if((h|32|0)==115){f=a[j+1>>0]|0;if(!(f<<24>>24)){f=39442;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==113){f=a[j+2>>0]|0;if(!(f<<24>>24)){f=39443;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==108){f=a[j+3>>0]|0;if(!(f<<24>>24)){f=39444;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==105){f=a[j+4>>0]|0;if(!(f<<24>>24)){f=39445;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==116){f=a[j+5>>0]|0;if(!(f<<24>>24)){f=39446;i=3;break}h=f&255;f=208+h|0;if((h|32|0)==101){f=a[j+6>>0]|0;if(!(f<<24>>24)){f=39447;i=3;break}if(f<<24>>24==95)break a;else{h=95;f=208+(f&255)|0}}else h=101}else h=116}else h=105}else h=108}else h=113}else h=115;g=d[f>>0]|0;f=h}while(0);if((i|0)==3){g=0;f=a[208+(d[f>>0]|0)>>0]|0}if((g|0)!=(f&255|0))i=8}else i=8;while(0);if((i|0)==8){if(!(c[e+36>>2]&1024)){k=0;Ra=l;return k|0}f=c[b>>2]|0;if(0==0?(c[f+32>>2]&268435456|0)==0:0){k=0;Ra=l;return k|0}if(c[f+180>>2]|0){k=0;Ra=l;return k|0}}c[k>>2]=j;cd(b,47776,k);k=1;Ra=l;return k|0}function pn(f,g){f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+32|0;h=k;i=h+20|0;a[i>>0]=1;c[h+4>>2]=127;c[h+8>>2]=128;c[h+24>>2]=0;if(!g){j=0;Ra=k;return j|0}_j(h,g)|0;if(a[i>>0]|0){j=g;Ra=k;return j|0}if((d[f+200>>0]|0)>1){i=h+8|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[h>>2]=f;c[h+4>>2]=124;_j(h,g)|0}ni(c[f>>2]|0,g);g=c[f>>2]|0;a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))j=15;else{j=0;Ra=k;return j|0}else{do if((e[g+276>>1]|0)>=52){f=g+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}f=g+296|0;h=c[f>>2]|0;if(!h){f=g+292|0;break}else{c[f>>2]=c[h>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;break a}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(g,52,0)|0;if(!h){j=h;Ra=k;return j|0}f=h;g=f+52|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));a[h>>0]=114;b[h+34>>1]=-1;c[h+24>>2]=1;j=h;Ra=k;return j|0}function qn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;e=c[f>>2]|0;if(!e)return;f=b[e+8>>1]|0;if((f&514)==514?(a[e+10>>0]|0)==1:0)e=c[e+16>>2]|0;else g=5;do if((g|0)==5)if(!(f&1)){e=Gg(e,1)|0;break}else return;while(0);if(!e)return;h=Wd(e)|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}function rn(b,d,f){b=b|0;d=d|0;f=f|0;d=c[f>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){d=Mg(+g[d>>3])|0;L()|0;f=7;break}if(!(f&18)){d=26464;f=8}else{d=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0;f=7}}else{d=c[d>>2]|0;f=7}while(0);if((f|0)==7)if(d>>>0<7){d=26464+(d<<2)|0;f=8}else d=0;if((f|0)==8)d=c[d>>2]|0;if((yc(c[b>>2]|0,d,-1,1,0)|0)!=18)return;c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0;return}function sn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31142,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function tn(e,f,g){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;h=c[g>>2]|0;i=b[h+8>>1]|0;if((h|0)==0|(-1431655766>>>(i&31)&1|0)!=0)return;if((i&514)==514?(a[h+10>>0]|0)==1:0)i=c[h+16>>2]|0;else q=5;do if((q|0)==5)if(!(i&1)){i=Gg(h,1)|0;break}else return;while(0);if(!i)return;k=c[g>>2]|0;h=b[k+8>>1]|0;if((h&2)!=0?(a[k+10>>0]|0)==1:0)h=c[k+12>>2]|0;else q=11;do if((q|0)==11){j=h&65535;if(!(j&16)){if(j&1|0){h=0;break}h=Fg(k,1)|0;break}else{h=c[k+12>>2]|0;if(!(j&16384))break;h=(c[k>>2]|0)+h|0;break}}while(0);a:do if((f|0)!=1){j=c[g+4>>2]|0;if(!j)return;k=b[j+8>>1]|0;if((k&514)==514?(a[j+10>>0]|0)==1:0)p=c[j+16>>2]|0;else q=21;do if((q|0)==21)if(!(k&1)){p=Gg(j,1)|0;break}else return;while(0);if(!p)return;k=a[p>>0]|0;if(k<<24>>24){j=p;l=0;do{f=j+1|0;if((k&255)>191){j=f;while(1){k=a[j>>0]|0;if((k&-64)<<24>>24==-128)j=j+1|0;else break}}else{j=f;k=a[f>>0]|0}l=l+1|0}while(k<<24>>24!=0);f=Yv(l|0,0,5,0)|0;j=L()|0;k=c[e>>2]|0;o=c[(c[k+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((j|0)>(n|0)|(j|0)==(n|0)&f>>>0>o>>>0){c[e+20>>2]=18;yc(k,31223,-1,1,0)|0;return}o=Sv(f|0,j|0,-1,-1)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](f)|0;if(!j)break}else{g=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0>>0)c[14985]=f;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){o=c[14978]|0;n=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}j=Wa[c[29340>>2]&127](g)|0;if(!j)break;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}m=j+(l<<2)|0;if(!(a[p>>0]|0))break a;g=0;k=p;while(1){c[j+(g<<2)>>2]=k;f=k+1|0;l=k;if((d[k>>0]|0)>191){k=f;while(1)if((a[k>>0]&-64)<<24>>24==-128)k=k+1|0;else break}else k=f;a[m+g>>0]=k-l;f=g+1|0;if(!(a[k>>0]|0)){o=j;n=j;q=60;break a}else g=f}}while(0);h=c[e>>2]|0;i=h+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(h);h=c[e>>2]|0}c[e+20>>2]=7;h=c[h+32>>2]|0;i=h+81|0;if(a[i>>0]|0)return;if(a[h+82>>0]|0)return;a[i>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;e=h+272|0;c[e>>2]=(c[e>>2]|0)+1;h=c[h+236>>2]|0;if(!h)return;c[h+12>>2]=7;return}}else{p=0;o=30304;m=49513;f=1;n=30304;q=60}while(0);do if((q|0)==60){l=c[(c[e+4>>2]|0)+8>>2]|0;b:do if((l&1|0)!=0&(h|0)>0)do{j=0;while(1){k=a[m+j>>0]|0;g=k&255;if((h|0)>=(g|0)?(Lu(i,c[o+(j<<2)>>2]|0,g)|0)==0:0)break;j=j+1|0;if(j>>>0>=f>>>0){q=67;break b}}g=k&255;i=i+g|0;h=h-g|0}while((h|0)>0);else q=67;while(0);c:do if((q|0)==67)if((l&2|0)!=0&(h|0)>0)while(1){j=0;while(1){k=d[m+j>>0]|0;if((h|0)>=(k|0)?(r=h-k|0,(Lu(i+r|0,c[o+(j<<2)>>2]|0,k)|0)==0):0)break;j=j+1|0;if(j>>>0>=f>>>0)break c}if((r|0)>0)h=r;else{h=r;break}}while(0);if(!((n|0)==0|(p|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{r=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((yc(c[e>>2]|0,i,h,1,-1)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}function un(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=((c[(c[a+4>>2]|0)+8>>2]|0)!=0)<<31>>31;i=c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0;f=c[e>>2]|0;if(-1431655766>>>(b[f+8>>1]&31)&1|0)return;do if((d|0)>1){h=0;f=1;while(1){g=c[e+(f<<2)>>2]|0;if(-1431655766>>>(b[g+8>>1]&31)&1|0){g=8;break}g=((Tg(c[e+(h<<2)>>2]|0,g,i)|0)^j|0)>-1;h=g?f:h;f=f+1|0;if((f|0)>=(d|0)){g=6;break}}if((g|0)==6){f=c[e+(h<<2)>>2]|0;break}else if((g|0)==8)return}while(0);Dc(a,f);return}function vn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[f>>2]|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))i=Ic(d,40)|0;else i=c[e+16>>2]|0;if(!i)return;h=g+8|0;j=i+8|0;e=(b[j>>1]|0)!=0;if(-1431655766>>>(b[h>>1]&31)&1|0){if(!e)return;c[d+20>>2]=-1;a[d+24>>0]=1;return}if(!e){c[i+32>>2]=c[(c[d>>2]|0)+32>>2];c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=49;do if((k|0)==49)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}e=(c[(c[d+4>>2]|0)+8>>2]|0)!=0;f=Tg(i,g,c[(c[(c[d+12>>2]|0)+104>>2]|0)+(((c[d+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0;if(e&(f|0)<0){if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=22;do if((k|0)==22)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}if(!((f|0)>0&(e^1))){c[d+20>>2]=-1;a[d+24>>0]=1;return}if(b[j>>1]&9216)Dg(i);c[i>>2]=c[g>>2];c[i+4>>2]=c[g+4>>2];c[i+8>>2]=c[g+8>>2];c[i+12>>2]=c[g+12>>2];c[i+16>>2]=c[g+16>>2];f=b[j>>1]&-1025;b[j>>1]=f;f=f&65535;if(!(f&18))return;if(b[h>>1]&2048)return;e=(f|4096)&65535;b[j>>1]=e;do if(f&16384){g=i+12|0;f=(c[i>>2]|0)+(c[g>>2]|0)|0;if((f|0)<1)if(!(e&16))break;else e=1;else e=f;if(!(Eg(i,e,1)|0)){gw((c[i+16>>2]|0)+(c[g>>2]|0)|0,0,c[i>>2]|0)|0;c[g>>2]=(c[g>>2]|0)+(c[i>>2]|0);e=b[j>>1]&-16897;b[j>>1]=e;break}else return}while(0);if(!((c[i+24>>2]|0)!=0?(c[i+16>>2]|0)==(c[i+20>>2]|0):0))k=36;do if((k|0)==36)if(!(Jg(i)|0)){e=b[j>>1]|0;break}else return;while(0);b[j>>1]=e&-4097;return}function wn(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;if(!((b[e>>1]|0)!=0?(Dc(a,d),(b[e>>1]&9216)!=0):0))f=7;if((f|0)==7?(c[d+24>>2]|0)==0:0)return;Cg(d);return}function xn(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;if(!(b[d+8>>1]|0))return;Dc(a,d);return}function yn(a,e,f){a=a|0;e=e|0;f=f|0;if((yc(c[a>>2]|0,c[21712+((d[816+(b[(c[f>>2]|0)+8>>1]&31)>>0]|0)+-1<<2)>>2]|0,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function zn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[f>>2]|0;e=b[g+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 2:case 1:case 4:{if((e&2)!=0?(a[g+10>>0]|0)==1:0)f=c[g+12>>2]|0;else i=5;do if((i|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){f=0;break}f=Fg(g,1)|0;break}else{f=c[g+12>>2]|0;if(!(e&16384))break;f=(c[g>>2]|0)+f|0;break}}while(0);e=c[d>>2]|0;g=((f|0)<0)<<31>>31;h=e+8|0;if(!(b[h>>1]&9216)){d=e;c[d>>2]=f;c[d+4>>2]=g;b[h>>1]=4;return}else{Pg(e,f,g);return}}case 3:{if(!g)return;if((e&514)==514?(a[g+10>>0]|0)==1:0)h=c[g+16>>2]|0;else i=17;do if((i|0)==17)if(!(e&1)){h=Gg(g,1)|0;break}else return;while(0);if(!h)return;g=a[h>>0]|0;if(!(g<<24>>24)){f=h;e=h}else{e=h;f=h;do{f=f+1|0;h=a[f>>0]|0;if((g&255)>191&(h&-64)<<24>>24==-128)do{f=f+1|0;e=e+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);else g=h}while(g<<24>>24!=0)}h=f-e|0;e=c[d>>2]|0;f=((h|0)<0)<<31>>31;g=e+8|0;if(!(b[g>>1]&9216)){d=e;c[d>>2]=h;c[d+4>>2]=f;b[g>>1]=4;return}else{Pg(e,h,f);return}}default:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;return}else{Dg(e);return}}}}function An(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;g=c[f>>2]|0;e=b[g+8>>1]|0;m=e&31;n=f+4|0;i=c[n>>2]|0;j=b[i+8>>1]|0;l=j&31;if((-1431655766>>>l|-1431655766>>>m)&1|0)return;if((e&2)!=0?(a[g+10>>0]|0)==1:0){h=c[g+12>>2]|0;e=j}else k=5;do if((k|0)==5){e=e&65535;if(!(e&16)){if(e&1|0){h=0;e=j;break}h=Fg(g,1)|0;i=c[n>>2]|0;e=b[i+8>>1]|0;break}else{h=c[g+12>>2]|0;if(!(e&16384)){e=j;break}h=(c[g>>2]|0)+h|0;e=j;break}}while(0);if((e&2)!=0?(a[i+10>>0]|0)==1:0){o=c[i+12>>2]|0;k=18}else k=13;do if((k|0)==13){g=e&65535;if(!(g&16)){if(g&1|0){e=1;i=0;break}o=Fg(i,1)|0;k=18;break}else{e=c[i+12>>2]|0;if(!(g&16384)){o=e;k=18;break}o=(c[i>>2]|0)+e|0;k=18;break}}while(0);a:do if((k|0)==18)if((o|0)>0){g=c[f>>2]|0;do if(!((m|16|0)==16&(l|16|0)==16)){do if(g){e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(e&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);i=c[n>>2]|0;if(!i)return;e=b[i+8>>1]|0;if((e&514)==514?(a[i+10>>0]|0)==1:0){e=1;k=c[i+16>>2]|0;break}if(!(e&1)){e=1;k=Gg(i,1)|0;break}else return}else{g=mc(g)|0;e=0;k=mc(c[n>>2]|0)|0}while(0);if(!k)return;if((h|0)!=0&(g|0)==0)return;l=a[k>>0]|0;if((o|0)>(h|0)){e=0;i=0}else{b:do if(!e){e=1;while(1){if((a[g>>0]|0)==l<<24>>24?(Lu(g,k,o)|0)==0:0)break b;if((o|0)<(h|0)){e=e+1|0;h=h+-1|0;g=g+1|0}else{e=0;i=0;break a}}}else{e=1;j=g;g=a[g>>0]|0;while(1){if(g<<24>>24==l<<24>>24?(Lu(j,k,o)|0)==0:0)break b;while(1){i=h+-1|0;j=j+1|0;g=a[j>>0]|0;if((g&-64)<<24>>24!=-128)break;else h=i}if((o|0)<(h|0)){e=e+1|0;h=i}else{e=0;i=0;break a}}}while(0);i=0}}else{e=1;i=0}while(0);g=c[d>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){d=g;c[d>>2]=e;c[d+4>>2]=i;b[h>>1]=4;return}else{Pg(g,e,i);return}}function Bn(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;n=Ra;Ra=Ra+48|0;l=n;k=n+32|0;m=n+8|0;j=c[(c[d>>2]|0)+32>>2]|0;if((e|0)<=0){Ra=n;return}h=c[f>>2]|0;if(!h){Ra=n;return}g=b[h+8>>1]|0;if((g&514)==514?(a[h+10>>0]|0)==1:0)g=c[h+16>>2]|0;else i=6;do if((i|0)==6)if(!(g&1)){g=Gg(h,1)|0;break}else{Ra=n;return}while(0);if(!g){Ra=n;return}c[k>>2]=e+-1;c[k+4>>2]=0;c[k+8>>2]=f+4;h=c[j+108>>2]|0;i=m+4|0;c[i>>2]=0;c[m>>2]=j;c[m+8>>2]=0;e=m+12|0;c[e>>2]=h;h=m+16|0;c[h>>2]=0;a[m+20>>0]=0;f=m+21|0;a[f>>0]=2;c[l>>2]=k;Eb(m,g,l);h=c[h>>2]|0;g=c[i>>2]|0;if(((g|0)!=0?(a[g+h>>0]=0,(c[e>>2]|0)!=0):0)?(a[f>>0]&4)==0:0)g=$d(m)|0;else g=c[i>>2]|0;if((yc(c[d>>2]|0,g,h,1,116)|0)!=18){Ra=n;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=n;return}function Cn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;f=c[g>>2]|0;if(!f)return;g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else h=5;do if((h|0)==5)if(!(g&1)){f=Gg(f,1)|0;break}else return;while(0);if(!f)return;g=a[f>>0]|0;if(!(g<<24>>24))return;h=f+1|0;f=g&255;if((g&255)>191){f=d[2736+(f+-192)>>0]|0;g=a[h>>0]|0;if((g&-64)<<24>>24==-128)do{h=h+1|0;f=f<<6|g&63;g=a[h>>0]|0}while((g&-64)<<24>>24==-128);f=(f&-2|0)==65534|(f>>>0<128|(f&-2048|0)==55296)?65533:f}g=c[e>>2]|0;h=((f|0)<0)<<31>>31;e=g+8|0;if(!(b[e>>1]&9216)){c[g>>2]=f;c[g+4>>2]=h;b[e>>1]=4;return}else{Pg(g,f,h);return}}function Dn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=f<<2|1;q=pb(q,((q|0)<0)<<31>>31)|0;if(!q){i=c[d>>2]|0;j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0)return;if(a[i+82>>0]|0)return;a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i)return;c[i+12>>2]=7;return}if((f|0)>0){o=0;i=q;do{j=c[h+(o<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[j>>3])|0;j=L()|0;p=19;break}if(!(k&18)){n=i;m=1;j=0}else{k=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=L()|0;p=19}}else{k=j;j=c[k+4>>2]|0;k=c[k>>2]|0;p=19}while(0);do if((p|0)==19){p=0;l=k&2097151;if(!(j>>>0>0|(j|0)==0&k>>>0>1114111)){if(l>>>0<128){n=i;m=1;j=l;break}if(l>>>0<2048){a[i>>0]=k>>>6&31|192;n=i+1|0;m=2;j=k&63|128;break}if(l>>>0<65536)j=l;else{a[i>>0]=l>>>18|240;a[i+1>>0]=k>>>12&63|128;a[i+2>>0]=k>>>6&63|128;n=i+3|0;m=4;j=k&63|128;break}}else j=65533;a[i>>0]=j>>>12&15|224;a[i+1>>0]=j>>>6&63|128;n=i+2|0;m=3;j=j&63|128}while(0);i=i+m|0;a[n>>0]=j;o=o+1|0}while((o|0)!=(f|0))}else i=q;i=i-q|0;if((i|0)>=0){if((yc(c[d>>2]|0,q,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{p=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}function En(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;i=l+8|0;j=l;f=c[f>>2]|0;e=b[f+8>>1]|0;switch(a[816+(e&31)>>0]|0){case 1:{e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[f>>3])|0;f=L()|0;k=8;break}if(!(e&18)){e=0;j=0}else{e=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;k=8}}else{e=f;f=c[e+4>>2]|0;e=c[e>>2]|0;k=8}while(0);do if((k|0)==8)if((f|0)<0){if(!((e|0)==0&(f|0)==-2147483648)){e=Tv(0,0,e|0,f|0)|0;j=L()|0;break}c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=l;return}else j=f;while(0);f=c[d>>2]|0;i=f+8|0;if(!(b[i>>1]&9216)){d=f;c[d>>2]=e;c[d+4>>2]=j;b[i>>1]=4;Ra=l;return}else{Pg(f,e,j);Ra=l;return}}case 5:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;Ra=l;return}else{Dg(e);Ra=l;return}}default:{e=e&65535;do if(!(e&8)){if(e&4|0){k=f;h=+((c[k>>2]|0)>>>0)+4294967296.0*+(c[k+4>>2]|0);break}if(!(e&18))h=0.0;else h=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else h=+g[f>>3];while(0);h=h<0.0?-h:h;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=l;return}g[e>>3]=h;b[f>>1]=8;Ra=l;return}}}function Fn(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+24|0;l=n+16|0;m=n+8|0;k=n;a:do if((e|0)==2){h=c[f+4>>2]|0;e=b[h+8>>1]|0;if(-1431655766>>>(e&31)&1|0){Ra=n;return}e=e&65535;do if(!(e&4)){if(e&8|0){e=Mg(+g[h>>3])|0;L()|0;break}if(!(e&18)){e=0;break a}e=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else e=c[h>>2]|0;while(0);if((e|0)<30){if((e|0)<=0){e=0;break}}else e=30}else e=0;while(0);f=c[f>>2]|0;h=b[f+8>>1]|0;if(-1431655766>>>(h&31)&1|0){Ra=n;return}h=h&65535;do if(!(h&8)){if(h&4|0){i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(h&18))i=0.0;else i=+Kg(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)}else i=+g[f>>3];while(0);g[k>>3]=i;h=(e|0)==0;do if(i<9223372036854775808.0&(h&i>=0.0)){i=i+.5;i=+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0);g[k>>3]=i}else{if(i>-9223372036854775808.0&(h&i<0.0)){i=.5-i;i=-(+(~~i>>>0>>>0)+4294967296.0*+((+t(i)>=1.0?(i>0.0?~~+H(+s(i/4294967296.0),4294967295.0)>>>0:~~+F((i-+(~~i>>>0))/4294967296.0)>>>0):0)|0));g[k>>3]=i;break}c[j>>2]=e;g[j+8>>3]=i;e=Bb(49541,j)|0;if(e|0){Lg(e,k,(Eu(e)|0)&1073741823,1)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;h=e+81|0;if(a[h>>0]|0){Ra=n;return}if(a[e+82>>0]|0){Ra=n;return}a[h>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e){Ra=n;return}c[e+12>>2]=7;Ra=n;return}while(0);i=+g[k>>3];e=c[d>>2]|0;h=e+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(e);g[l>>3]=i;g[m>>3]=+g[l>>3];if(!(+g[l>>3]==+g[m>>3])){Ra=n;return}g[e>>3]=i;b[h>>1]=8;Ra=n;return}function Gn(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=c[f>>2]|0;e=b[g+8>>1]|0;if((e&514)==514?(a[g+10>>0]|0)==1:0){j=c[g+16>>2]|0;f=g}else if(!(e&1)){j=Gg(g,1)|0;f=c[f>>2]|0}else{j=0;f=g}e=b[f+8>>1]|0;if((e&2)!=0?(a[f+10>>0]|0)==1:0)i=c[f+12>>2]|0;else h=9;do if((h|0)==9){e=e&65535;if(!(e&16)){if(e&1|0){i=0;break}i=Fg(f,1)|0;break}else{g=c[f+12>>2]|0;if(!(e&16384)){i=g;break}i=(c[f>>2]|0)+g|0;break}}while(0);if(!j)return;g=Sv(i|0,((i|0)<0)<<31>>31|0,1,0)|0;L()|0;e=c[d>>2]|0;if((i|0)>=(c[(c[e+32>>2]|0)+108>>2]|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}do if(i>>>0<=2147483390){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](g)|0;if(!e)break}else{f=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0>>0)c[14985]=g;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){h=c[14978]|0;g=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e)break;g=Wa[c[29352>>2]&127](e)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}if((i|0)>0){g=0;do{h=a[j+g>>0]|0;a[e+g>>0]=h&~(a[880+(h&255)>>0]&32);g=g+1|0}while((g|0)!=(i|0))}if((yc(c[d>>2]|0,e,i,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Hn(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){k=c[h+16>>2]|0;g=h}else if(!(f&1)){k=Gg(h,1)|0;g=c[g>>2]|0}else{k=0;g=h}f=b[g+8>>1]|0;if((f&2)!=0?(a[g+10>>0]|0)==1:0)j=c[g+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){j=0;break}j=Fg(g,1)|0;break}else{h=c[g+12>>2]|0;if(!(f&16384)){j=h;break}j=(c[g>>2]|0)+h|0;break}}while(0);if(!k)return;h=Sv(j|0,((j|0)<0)<<31>>31|0,1,0)|0;L()|0;f=c[e>>2]|0;if((j|0)>=(c[(c[f+32>>2]|0)+108>>2]|0)){c[e+20>>2]=18;yc(f,31223,-1,1,0)|0;return}do if(j>>>0<=2147483390){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f)break}else{g=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){i=c[14978]|0;h=Tv(f|0,h|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f)break;h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}if((j|0)>0){h=0;do{a[f+h>>0]=a[208+(d[k+h>>0]|0)>>0]|0;h=h+1|0}while((h|0)!=(j|0))}if((yc(c[e>>2]|0,f,j,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function In(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=mc(c[g>>2]|0)|0;h=c[g>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=4;do if((i|0)==4){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);i=cw(g|0,((g|0)<0)<<31>>31|0,1)|0;f=L()|0;i=i|1;h=c[e>>2]|0;k=c[(c[h+32>>2]|0)+108>>2]|0;j=((k|0)<0)<<31>>31;if((f|0)>(j|0)|(f|0)==(j|0)&i>>>0>k>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(i|0,f|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f)break;else h=f}else{j=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0>>0)c[14985]=i;h=59064;f=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&f>>>0>0){k=c[14978]|0;i=Tv(f|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](j)|0;if(!h)break;f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}k=g<<1;if((g|0)>0){j=h;f=l;i=0;while(1){l=d[f>>0]|0;a[j>>0]=a[21744+(l>>>4)>>0]|0;a[j+1>>0]=a[21744+(l&15)>>0]|0;i=i+1|0;if((i|0)==(g|0))break;else{j=j+2|0;f=f+1|0}}f=h+k|0}else f=h;a[f>>0]=0;if((yc(c[e>>2]|0,h,k,1,90)|0)!=18)return;c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[e>>2]|0;g=f+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;g=f+81|0;if(a[g>>0]|0)return;if(a[f+82>>0]|0)return;a[g>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Jn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h;Fb(8,d);f=d;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)<0){g=Tv(0,0,e|0,f&2147483647|0)|0;f=L()|0;e=d;c[e>>2]=g;c[e+4>>2]=f}else g=e;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=g;c[a+4>>2]=f;b[e>>1]=4;Ra=h;return}else{Pg(d,g,f);Ra=h;return}}function Kn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){i=0;f=1}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){j=(f|0)>0|(f|0)==0&h>>>0>1;i=j?f:0;f=j?h:1}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0){c[d+20>>2]=18;yc(h,31223,-1,1,0)|0;return}k=Sv(f|0,i|0,-1,-1)|0;j=L()|0;do if(!(j>>>0>0|(j|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){k=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}Fb(f,h);if((yc(c[d>>2]|0,h,f,0,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);f=c[d>>2]|0;h=f+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else{Dg(f);f=c[d>>2]|0}c[d+20>>2]=7;f=c[f+32>>2]|0;h=f+81|0;if(a[h>>0]|0)return;if(a[f+82>>0]|0)return;a[h>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;f=c[f+236>>2]|0;if(!f)return;c[f+12>>2]=7;return}function Ln(a,b,d){a=a|0;b=b|0;d=d|0;if(!(Tg(c[d>>2]|0,c[d+4>>2]|0,c[(c[(c[a+12>>2]|0)+104>>2]|0)+(((c[a+16>>2]|0)+-1|0)*20|0)+16>>2]|0)|0))return;Dc(a,c[d>>2]|0);return}function Mn(a,b,d){a=a|0;b=b|0;d=d|0;if((yc(c[a>>2]|0,31497,-1,1,0)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Nn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;j=k;d=c[h>>2]|0;f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);d=c[h+4>>2]|0;do if(d){f=b[d+8>>1]|0;if((f&514)==514?(a[d+10>>0]|0)==1:0){d=c[d+16>>2]|0;break}if(!(f&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);c[j>>2]=d;Db(i,31408,j);Ra=k;return}function On(e,f,h){e=e|0;f=f|0;h=h|0;var i=0,j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+80|0;n=q+72|0;m=q+64|0;k=q+56|0;l=q;i=c[h>>2]|0;f=b[i+8>>1]|0;switch(a[816+(f&31)>>0]|0){case 2:{f=f&65535;do if(!(f&8)){if(f&4|0){p=i;j=+((c[p>>2]|0)>>>0)+4294967296.0*+(c[p+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else j=+g[i>>3];while(0);g[m>>3]=j;Cb(50,l,32529,m)|0;Lg(l,k,20,1)|0;if(j!=+g[k>>3]){g[n>>3]=j;Cb(50,l,49546,n)|0}if((yc(c[e>>2]|0,l,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}Ra=q;return}case 1:{Dc(e,i);Ra=q;return}case 4:{m=mc(i)|0;h=c[h>>2]|0;f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)l=c[h+12>>2]|0;else o=17;do if((o|0)==17){f=f&65535;if(!(f&16)){if(f&1|0){l=0;break}l=Fg(h,1)|0;break}else{i=c[h+12>>2]|0;if(!(f&16384)){l=i;break}l=(c[h>>2]|0)+i|0;break}}while(0);f=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;i=L()|0;k=Sv(f|0,i|0,4,0)|0;n=L()|0;h=c[e>>2]|0;p=c[(c[h+32>>2]|0)+108>>2]|0;o=((p|0)<0)<<31>>31;if((n|0)>(o|0)|(n|0)==(o|0)&k>>>0>p>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}p=Sv(f|0,i|0,3,0)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){p=c[14978]|0;o=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}if((l|0)>0){i=0;do{o=m+i|0;p=i<<1;a[f+(p+2)>>0]=a[21744+((d[o>>0]|0)>>>4)>>0]|0;a[f+(p+3)>>0]=a[21744+(a[o>>0]&15)>>0]|0;i=i+1|0}while((i|0)!=(l|0))}p=l<<1;a[f+(p+2)>>0]=39;a[f+(p+3)>>0]=0;a[f>>0]=88;a[f+1>>0]=39;if((yc(c[e>>2]|0,f,-1,1,-1)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=q;return}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=q;return}}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}case 3:{if(!i){Ra=q;return}if((f&514)==514?(a[i+10>>0]|0)==1:0)p=c[i+16>>2]|0;else o=57;do if((o|0)==57)if(!(f&1)){p=Gg(i,1)|0;break}else{Ra=q;return}while(0);if(!p){Ra=q;return}h=0;f=0;i=0;a:while(1){switch(a[p+h>>0]|0){case 0:break a;case 39:{f=Sv(f|0,i|0,1,0)|0;i=L()|0;break}default:{}}h=h+1|0}f=Sv(f|0,i|0,h|0,0)|0;i=L()|0;k=Sv(f|0,i|0,3,0)|0;m=L()|0;h=c[e>>2]|0;o=c[(c[h+32>>2]|0)+108>>2]|0;n=((o|0)<0)<<31>>31;if((m|0)>(n|0)|(m|0)==(n|0)&k>>>0>o>>>0){c[e+20>>2]=18;yc(h,31223,-1,1,0)|0;Ra=q;return}o=Sv(f|0,i|0,2,0)|0;n=L()|0;do if(!(n>>>0>0|(n|0)==0&o>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;i=59064;f=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&f>>>0>0){o=c[14978]|0;n=Tv(f|0,i|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(!f)break;i=Wa[c[29352>>2]&127](f)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}a[f>>0]=39;i=a[p>>0]|0;h=f+1|0;if(!(i<<24>>24))i=2;else{k=1;n=0;m=i;l=p;i=2;do{a[h>>0]=m;if((a[l>>0]|0)==39){a[f+i>>0]=39;k=k+2|0}else k=i;n=n+1|0;l=p+n|0;m=a[l>>0]|0;i=k+1|0;h=f+k|0}while(m<<24>>24!=0)}a[h>>0]=39;a[f+i>>0]=0;if((yc(c[e>>2]|0,f,i,1,90)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}while(0);f=c[e>>2]|0;i=f+8|0;if(!(b[i>>1]&9216))b[i>>1]=1;else{Dg(f);f=c[e>>2]|0}c[e+20>>2]=7;f=c[f+32>>2]|0;i=f+81|0;if(a[i>>0]|0){Ra=q;return}if(a[f+82>>0]|0){Ra=q;return}a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;f=c[f+236>>2]|0;if(!f){Ra=q;return}c[f+12>>2]=7;Ra=q;return}default:{if((yc(c[e>>2]|0,31171,4,1,0)|0)!=18){Ra=q;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=q;return}}}function Pn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;e=c[a>>2]|0;a=(c[e+32>>2]|0)+40|0;f=c[a>>2]|0;a=c[a+4>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){c[e>>2]=f;c[e+4>>2]=a;b[d>>1]=4;return}else{Pg(e,f,a);return}}function Qn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+100>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Rn(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a>>2]|0;e=c[(c[d+32>>2]|0)+104>>2]|0;f=((e|0)<0)<<31>>31;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function Sn(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,y=0,z=0,A=0,B=0;i=c[(c[d>>2]|0)+32>>2]|0;e=c[f>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)A=c[e+16>>2]|0;else B=5;do if((B|0)==5)if(!(g&1)){A=Gg(e,1)|0;break}else return;while(0);if(!A)return;h=c[f>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)z=c[h+12>>2]|0;else B=11;do if((B|0)==11){e=e&65535;if(!(e&16)){if(e&1|0){z=0;break}z=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){z=g;break}z=(c[h>>2]|0)+g|0;break}}while(0);h=f+4|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)y=c[e+16>>2]|0;else B=20;do if((B|0)==20)if(!(g&1)){y=Gg(e,1)|0;break}else return;while(0);if(!y)return;if(!(a[y>>0]|0)){Dc(d,c[f>>2]|0);return}h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)x=c[h+12>>2]|0;else B=28;do if((B|0)==28){e=e&65535;if(!(e&16)){if(e&1|0){x=0;break}x=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){x=g;break}x=(c[h>>2]|0)+g|0;break}}while(0);h=f+8|0;e=c[h>>2]|0;if(!e)return;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)w=c[e+16>>2]|0;else B=37;do if((B|0)==37)if(!(g&1)){w=Gg(e,1)|0;break}else return;while(0);if(!w)return;h=c[h>>2]|0;e=b[h+8>>1]|0;if((e&2)!=0?(a[h+10>>0]|0)==1:0)v=c[h+12>>2]|0;else B=43;do if((B|0)==43){e=e&65535;if(!(e&16)){if(e&1|0){v=0;break}v=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(e&16384)){v=g;break}v=(c[h>>2]|0)+g|0;break}}while(0);k=z+1|0;j=((k|0)<0)<<31>>31;e=c[d>>2]|0;if((c[(c[e+32>>2]|0)+108>>2]|0)<=(z|0)){c[d+20>>2]=18;yc(e,31223,-1,1,0)|0;return}u=Sv(k|0,j|0,-1,-1)|0;t=L()|0;a:do if(!(t>>>0>0|(t|0)==0&u>>>0>2147483390)){do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break a}else{e=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){u=c[14978]|0;t=Tv(g|0,h|0,e|0,((e|0)<0)<<31>>31|0)|0;s=L()|0;c[14768]=((s|0)<0|(s|0)==0&t>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](e)|0;if(!h)break a;e=Wa[c[29352>>2]&127](h)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);u=z-x|0;b:do if((u|0)>=0){r=v-x|0;s=((r|0)<0)<<31>>31;o=i+108|0;t=x+-1|0;p=~z;q=((p|0)<0)<<31>>31;if((v|0)<=(x|0)){g=0;e=0;while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=86;break}ew(h+g|0,w|0,v|0)|0;g=g+v|0;f=t+e|0}else B=86;while(0);if((B|0)==86){B=0;a[h+g>>0]=i;g=g+1|0;f=e}e=f+1|0;if((f|0)>=(u|0))break b}}n=0;g=0;e=0;c:while(1){f=A+e|0;i=a[f>>0]|0;do if(i<<24>>24==(a[y>>0]|0)){if(Lu(f,y,x)|0){B=77;break}j=Sv(k|0,j|0,r|0,s|0)|0;l=L()|0;k=Sv(j|0,l|0,-1,-1)|0;f=L()|0;m=c[o>>2]|0;i=((m|0)<0)<<31>>31;if((f|0)>(i|0)|(f|0)==(i|0)&k>>>0>m>>>0){B=87;break c}i=n+1|0;if(!(i&n)){if(mb()|0)break c;n=aw(0,j|0,32)|0;f=L()|0;m=Sv(j|0,l|0,p|0,q|0)|0;f=Sv(m|0,L()|0,n|0,f|0)|0;f=sb(h,f,L()|0)|0;if(!f)break c;else h=f}ew(h+g|0,w|0,v|0)|0;g=g+v|0;m=t+e|0;f=i;k=j;i=l}else B=77;while(0);if((B|0)==77){B=0;a[h+g>>0]=i;g=g+1|0;m=e;f=n;i=j}e=m+1|0;if((m|0)<(u|0)){n=f;j=i}else break b}if((B|0)==87){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;do if(!(a[g>>0]|0)){if(a[e+82>>0]|0)break;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)break;c[e+12>>2]=7}while(0);if(!h)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}else{g=0;e=0}while(0);B=z-e|0;ew(h+g|0,A+e|0,B|0)|0;B=g+B|0;a[h+B>>0]=0;if((yc(c[d>>2]|0,h,B,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}while(0);e=c[d>>2]|0;g=e+8|0;if(!(b[g>>1]&9216))b[g>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;g=e+81|0;if(a[g>>0]|0)return;if(a[e+82>>0]|0)return;a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Tn(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0;f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){h=Mg(+g[f>>3])|0;f=L()|0;j=7;break}if(!(h&18)){f=0;i=0}else{h=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;f=L()|0;j=7}}else{h=f;f=c[h+4>>2]|0;h=c[h>>2]|0;j=7}while(0);if((j|0)==7){i=(f|0)>0|(f|0)==0&h>>>0>0;f=i?f:0;i=i?h:0}h=c[d>>2]|0;j=c[(c[h+32>>2]|0)+108>>2]|0;k=((j|0)<0)<<31>>31;if(f>>>0>k>>>0|(f|0)==(k|0)&i>>>0>j>>>0){c[d+20>>2]=18;if(!(b[h+8>>1]&1))return;yc(h,31223,-1,1,0)|0;return}f=h+8|0;if(!((b[f>>1]&9216)==0?!(c[h+24>>2]|0):0))Cg(h);b[f>>1]=16400;c[h+12>>2]=0;c[h>>2]=(i|0)>0?i:0;a[h+10>>0]=1;c[h+16>>2]=0;return}function Un(d,f,h){d=d|0;f=f|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;k=c[h+4>>2]|0;i=b[k+8>>1]|0;if(-1431655766>>>(i&31)&1|0)return;n=(f|0)==3;if(n?-1431655766>>>(b[(c[h+8>>2]|0)+8>>1]&31)&1|0:0)return;j=c[h>>2]|0;l=b[j+8>>1]&15;f=i&65535;do if(!(f&4)){if(f&8|0){r=Mg(+g[k>>3])|0;L()|0;break}if(!(f&18))r=0;else{r=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;j=c[h>>2]|0}}else r=c[k>>2]|0;while(0);q=((r|0)<0)<<31>>31;t=(l|16)<<16>>16==16;if(t){f=b[j+8>>1]|0;if((f&2)!=0?(a[j+10>>0]|0)==1:0){i=c[j+12>>2]|0;f=j}else s=14;do if((s|0)==14){f=f&65535;if(!(f&16)){if(f&1|0){i=0;f=j;break}i=Fg(j,1)|0;f=c[h>>2]|0;break}else{i=c[j+12>>2]|0;if(!(f&16384)){f=j;break}i=(c[j>>2]|0)+i|0;f=j;break}}while(0);f=mc(f)|0;if(!f)return;else{p=f;o=i}}else{if(!j)return;f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0)l=c[j+16>>2]|0;else s=24;do if((s|0)==24)if(!(f&1)){l=Gg(j,1)|0;break}else return;while(0);if(!l)return;if((r|0)<0?(m=a[l>>0]|0,m<<24>>24!=0):0){k=0;f=l;j=m;while(1){i=f+1|0;if((j&255)>191){f=i;while(1){j=a[f>>0]|0;if((j&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=i;j=a[i>>0]|0}i=k+1|0;if(!(j<<24>>24)){p=l;o=i;break}else k=i}}else{p=l;o=0}}if(n){f=c[h+8>>2]|0;i=e[f+8>>1]|0;do if(!(i&4)){if(i&8|0){f=Mg(+g[f>>3])|0;L()|0;s=42;break}if(!(i&18)){i=0;f=0;j=0}else{f=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;L()|0;s=42}}else{f=c[f>>2]|0;s=42}while(0);if((s|0)==42){j=((f|0)<0)<<31>>31;h=(f|0)<0;n=Tv(0,0,f|0,j|0)|0;s=L()|0;i=f;f=h?n:f;j=h?s:j}l=i>>>31;i=j}else{i=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2]|0;l=0;f=i;i=((i|0)<0)<<31>>31}do if((r|0)>=0)if(!r){j=((i|0)>0|(i|0)==0&f>>>0>0)<<31>>31;f=Sv(f|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;j=0;k=0;i=L()|0;break}else{j=Sv(r|0,q|0,-1,-1)|0;k=L()|0;break}else{j=Sv(o|0,((o|0)<0)<<31>>31|0,r|0,q|0)|0;k=L()|0;q=(k|0)<0;h=Sv(f|0,i|0,j|0,k|0)|0;s=L()|0;r=(s|0)>0|(s|0)==0&h>>>0>0;j=q?0:j;k=q?0:k;f=q?(r?h:0):f;i=q?(r?s:0):i}while(0);r=(l|0)==0;m=Tv(j|0,k|0,f|0,i|0)|0;l=L()|0;s=(l|0)<0;m=r?j:s?0:m;l=r?k:s?0:l;n=r?f:s?j:f;k=r?i:s?k:i;if(t){r=Sv(m|0,l|0,n|0,k|0)|0;t=L()|0;f=((o|0)<0)<<31>>31;r=(t|0)>(f|0)|(t|0)==(f|0)&r>>>0>o>>>0;f=Tv(o|0,f|0,m|0,l|0)|0;t=L()|0;s=(t|0)>0|(t|0)==0&f>>>0>0;f=r?(s?f:0):n;t=r?(s?t:0):k;if(t>>>0>0|(t|0)==0&f>>>0>2147483647){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,p+m|0,f,0,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}i=a[p>>0]|0;if(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0){f=p;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}m=Sv(m|0,l|0,-1,-1)|0;l=L()|0}while(((m|0)!=0|(l|0)!=0)&i<<24>>24!=0);m=f}else m=p;if(i<<24>>24!=0&((n|0)!=0|(k|0)!=0)){f=m;l=n;do{j=f+1|0;if((i&255)>191){f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24==-128)f=f+1|0;else break}}else{f=j;i=a[j>>0]|0}l=Sv(l|0,k|0,-1,-1)|0;k=L()|0}while(i<<24>>24!=0&((l|0)!=0|(k|0)!=0))}else f=m;f=f-m|0;if((f|0)<0){if(!d)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}else{if((yc(c[d>>2]|0,m,f,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}function Vn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;f=b[m>>1]&31;k=d[816+f>>0]|0;if((f|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}k=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(k|0)!=5)){Ra=q;return}h=p+16|0;o=h;o=Sv(c[o>>2]|0,c[o+4>>2]|0,1,0)|0;f=L()|0;c[h>>2]=o;c[h+4>>2]=f;h=c[i>>2]|0;f=e[h+8>>1]|0;if((k|0)!=1){do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=j+ +g[p>>3];a[p+25>>0]=1;Ra=q;return}do if(!(f&4)){if(f&8|0){m=Mg(+g[h>>3])|0;n=L()|0;break}if(!(f&18)){m=0;n=0}else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;n=L()|0}}else{n=h;m=c[n>>2]|0;n=c[n+4>>2]|0}while(0);g[p>>3]=+g[p>>3]+(+(m>>>0)+4294967296.0*+(n|0));o=p+25|0;i=p+24|0;if((a[i>>0]|a[o>>0])<<24>>24){Ra=q;return}h=p+8|0;k=h;f=c[k>>2]|0;k=c[k+4>>2]|0;if((n|0)>-1|(n|0)==-1&m>>>0>4294967295){p=Tv(-1,2147483647,f|0,k|0)|0;l=L()|0;if(((k|0)>0|(k|0)==0&f>>>0>0)&((l|0)<(n|0)|(l|0)==(n|0)&p>>>0>>0))l=26;else l=25}else if((k|0)<0?(l=Tv(1,-2147483648,f|0,k|0)|0,s=L()|0,p=Sv(m|0,n|0,1,0)|0,r=L()|0,(s|0)>(r|0)|(s|0)==(r|0)&l>>>0>p>>>0):0)l=26;else l=25;if((l|0)==25){p=Sv(f|0,k|0,m|0,n|0)|0;r=L()|0;s=h;c[s>>2]=p;c[s+4>>2]=r;Ra=q;return}else if((l|0)==26){a[i>>0]=1;a[o>>0]=1;Ra=q;return}}function Wn(d){d=d|0;var e=0,f=0,h=0,i=0.0,j=0,k=0,l=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e){Ra=j;return}k=e+16|0;l=c[k+4>>2]|0;if(!((l|0)>0|(l|0)==0&(c[k>>2]|0)>>>0>0)){Ra=j;return}if(a[e+24>>0]|0){c[d+20>>2]=1;yc(c[d>>2]|0,49524,-1,1,-1)|0;Ra=j;return}if(!(a[e+25>>0]|0)){h=e+8|0;f=c[h>>2]|0;h=c[h+4>>2]|0;e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216)){l=e;c[l>>2]=f;c[l+4>>2]=h;b[d>>1]=4;Ra=j;return}else{Pg(e,f,h);Ra=j;return}}i=+g[e>>3];e=c[d>>2]|0;d=e+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(e);g[f>>3]=i;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return}g[e>>3]=i;b[d>>1]=8;Ra=j;return}function Xn(f,h,i){f=f|0;h=h|0;i=i|0;var j=0.0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+16|0;n=q+8|0;o=q;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))p=Ic(f,32)|0;else p=c[h+16>>2]|0;l=c[i>>2]|0;m=l+8|0;k=b[m>>1]&31;h=d[816+k>>0]|0;if((k|16|0)==18){h=a[l+10>>0]|0;f=l+16|0;k=l+12|0;if(!(Lg(c[f>>2]|0,n,c[k>>2]|0,h)|0))h=b[m>>1]|0;else{if(!(Og(c[f>>2]|0,o,c[k>>2]|0,h)|0)){n=o;o=c[n+4>>2]|0;h=l;c[h>>2]=c[n>>2];c[h+4>>2]=o;h=4}else{g[l>>3]=+g[n>>3];h=8}h=b[m>>1]&-3|h;b[m>>1]=h}h=d[816+(h&31)>>0]|0}if(!((p|0)!=0&(h|0)!=5)){Ra=q;return}o=p+16|0;m=o;m=Sv(c[m>>2]|0,c[m+4>>2]|0,-1,-1)|0;n=L()|0;c[o>>2]=m;c[o+4>>2]=n;if((h|0)==1?(a[p+25>>0]|0)==0:0){h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;f=L()|0;break}if(!(f&18)){h=0;f=0}else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;f=L()|0}}else{f=h;h=c[f>>2]|0;f=c[f+4>>2]|0}while(0);g[p>>3]=+g[p>>3]-(+(h>>>0)+4294967296.0*+(f|0));p=p+8|0;o=p;o=Tv(c[o>>2]|0,c[o+4>>2]|0,h|0,f|0)|0;i=L()|0;c[p>>2]=o;c[p+4>>2]=i;Ra=q;return}h=c[i>>2]|0;f=e[h+8>>1]|0;do if(!(f&8)){if(f&4|0){i=h;j=+((c[i>>2]|0)>>>0)+4294967296.0*+(c[i+4>>2]|0);break}if(!(f&18))j=0.0;else j=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else j=+g[h>>3];while(0);g[p>>3]=+g[p>>3]-j;Ra=q;return}function Yn(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)e=0.0;else e=+g[d>>3];d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Zn(a){a=a|0;var d=0,e=0,f=0,h=0.0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;i=k+8|0;j=k;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=k;return}f=d+16|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if(!((f|0)>0|(f|0)==0&e>>>0>0)){Ra=k;return}h=+g[d>>3]/(+(e>>>0)+4294967296.0*+(f|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[i>>3]=h;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){Ra=k;return}g[d>>3]=h;b[e>>1]=8;Ra=k;return}function _n(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function $n(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function ao(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=c[a+8>>2]|0;if(!(b[f+8>>1]&8192))a=Ic(a,8)|0;else a=c[f+16>>2]|0;if(!d){if(!a)return}else if(!(a|0?(1431655765>>>(b[(c[e>>2]|0)+8>>1]&31)&1|0)!=0:0))return;f=a;f=Sv(c[f>>2]|0,c[f+4>>2]|0,-1,-1)|0;d=L()|0;e=a;c[e>>2]=f;c[e+4>>2]=d;return}function bo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=k+12|0;i=(c[h>>2]|0)==0;c[h>>2]=c[(c[(c[d>>2]|0)+32>>2]|0)+108>>2];do if(!i){if((e|0)==2){d=f+4|0;e=c[d>>2]|0;g=b[e+8>>1]|0;if((g&514)==514?(a[e+10>>0]|0)==1:0)h=c[e+16>>2]|0;else if(!(g&1)){h=Gg(e,1)|0;e=c[d>>2]|0}else h=0;g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)g=c[e+12>>2]|0;else j=16;do if((j|0)==16){d=g&65535;if(!(d&16)){if(d&1|0){g=0;break}g=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(d&16384))break;g=(c[e>>2]|0)+g|0;break}}while(0);if(!h)break;else d=h}else{g=1;d=41685}e=k+16|0;h=c[e>>2]|0;i=h+g|0;if(i>>>0>=(c[k+8>>2]|0)>>>0){wb(k,d,g);break}if(g|0){c[e>>2]=i;ew((c[k+4>>2]|0)+h|0,d|0,g|0)|0}}while(0);d=c[f>>2]|0;g=b[d+8>>1]|0;if((g&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;e=d}else if(!(g&1)){i=Gg(d,1)|0;e=c[f>>2]|0}else{i=0;e=d}g=b[e+8>>1]|0;if((g&2)!=0?(a[e+10>>0]|0)==1:0)d=c[e+12>>2]|0;else j=34;do if((j|0)==34){g=g&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(e,1)|0;break}else{d=c[e+12>>2]|0;if(!(g&16384))break;d=(c[e>>2]|0)+d|0;break}}while(0);if(!i)return;g=k+16|0;e=c[g>>2]|0;h=e+d|0;if(h>>>0>=(c[k+8>>2]|0)>>>0){wb(k,i,d);return}if(!d)return;c[g>>2]=h;ew((c[k+4>>2]|0)+e|0,i|0,d|0)|0;return}function co(d){d=d|0;var e=0,f=0,g=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=e+4|0;g=c[f>>2]|0;if(((g|0)!=0?(a[g+(c[e+16>>2]|0)>>0]=0,(c[e+12>>2]|0)!=0):0)?(a[e+21>>0]&4)==0:0)e=$d(e)|0;else e=c[f>>2]|0;if((yc(c[d>>2]|0,e,-1,1,90)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function eo(d){d=d|0;var e=0,f=0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,0)|0;else e=c[e+16>>2]|0;if(!e)return;switch(a[e+20>>0]|0){case 18:{c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}case 7:{e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}default:{f=c[e+16>>2]|0;if(!f)e=0;else{e=e+4|0;a[(c[e>>2]|0)+f>>0]=0;e=c[e>>2]|0}if((yc(c[d>>2]|0,e,-1,1,-1)|0)!=18)return;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return}}}function fo(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0)return;g=c[d+8>>2]|0;if(!(b[g+8>>1]&8192))k=Ic(d,24)|0;else k=c[g+16>>2]|0;if(!k)return;h=c[f>>2]|0;d=b[h+8>>1]|0;if((d&2)!=0?(a[h+10>>0]|0)==1:0)j=c[h+12>>2]|0;else i=9;do if((i|0)==9){d=d&65535;if(!(d&16)){if(d&1|0){j=0;break}j=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(d&16384)){j=g;break}j=(c[h>>2]|0)+g|0;break}}while(0);do if((e|0)==2){h=c[f+4>>2]|0;d=b[h+8>>1]|0;if(d&2?(a[h+10>>0]|0)==1:0){d=c[h+12>>2]|0;break}g=d&65535;if(!(g&16)){if(g&1|0){d=0;break}d=Fg(h,1)|0;break}else{d=c[h+12>>2]|0;if(!(g&16384))break;d=(c[h>>2]|0)+d|0;break}}else d=1;while(0);d=d+j|0;g=k+16|0;h=c[g>>2]|0;if((h|0)>(d|0)){f=h-d|0;c[g>>2]=f;e=c[k+4>>2]|0;fw(e|0,e+d|0,f|0)|0;if(c[g>>2]|0)return}else c[g>>2]=0;c[k+12>>2]=0;return}function go(f,h,i){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,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0;J=Ra;Ra=Ra+368|0;F=J+16|0;r=J;q=J+356|0;G=J+336|0;H=J+60|0;u=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){t=c[h+16>>2]|0;break}if(!(j&1))t=Gg(h,1)|0;else t=0}else t=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){y=c[h+16>>2]|0;break}if(!(j&1))y=Gg(h,1)|0;else y=0}else y=0;while(0);h=c[i+20>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){x=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))x=0;else{x=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else x=c[h>>2]|0;while(0);h=c[i+24>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+28>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){z=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))z=0;else{z=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else z=c[h>>2]|0;while(0);h=c[i+32>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))l=0;else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else l=c[h>>2]|0;while(0);C=I+312|0;D=c[C>>2]|0;if((x|0)<0|((B|0)==0|(y|0)==0|(A|0)==0)){Ra=J;return}m=c[I+20>>2]|0;n=(m|0)>0;if(n){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(m|0))}p=Sd(I,y,t)|0;if(!p){Ra=J;return}if((x|0)>=(b[p+42>>1]|0)){Ra=J;return}w=c[(c[p+4>>2]|0)+(x<<4)>>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;s=G+8|0;c[s>>2]=(x|0)==(b[p+40>>1]|0)?-1:x;c[C>>2]=0;c[q>>2]=0;o=(l|0)==0;if(o){a:do if(t){j=m+-1|0;if(n){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(j|0)!=0)){l=t;do{k=k+1|0;l=l+1|0;v=a[k>>0]|0;j=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!h){j=t;k=50919;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;v=H+4|0;gw(v|0,0,272)|0;a[H+200>>0]=2;c[H>>2]=I;c[H+132>>2]=1;h=ud(H,B,q)|0;c[v>>2]=c[q>>2];k=I+81|0;h=(a[k>>0]|0)==0?h:7;if(!h)if(((c[H+228>>2]|0)==0?(c[H+232>>2]|0)==0:0)?(c[H+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);h=11}else h=0;a[j>>0]=0;n=u+12|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[u>>2]=H;c[u+4>>2]=150;c[u+8>>2]=151;c[u+24>>2]=G;n=G+12|0;c[n>>2]=p;b:do if(!h){q=H+228|0;l=c[q>>2]|0;m=l;do if(l){j=c[l+12>>2]|0;if(j|0){h=H+12|0;c[h>>2]=0;Kk(H,j,0);h=(a[k>>0]|0)==0?c[h>>2]|0:7;if(h|0){E=171;break b}$j(u,j)|0;break}j=c[l>>2]|0;do if(!j){c[n>>2]=m;u=0}else{t=a[y>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(t<<24>>24==0|(h|0)!=0)){k=y;do{k=k+1|0;j=j+1|0;t=a[k>>0]|0;h=(d[208+(t&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(h|0)!=0))}c[n>>2]=m;if(h|0){u=0;break}m=c[(c[l+4>>2]|0)+(x<<4)>>2]|0;k=H+272|0;h=c[k>>2]|0;c:do if(h|0){l=k;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break c;else l=j}c[l>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);d:do if((c[s>>2]|0)<0){l=(c[q>>2]|0)+40|0;h=c[k>>2]|0;if(!h)break;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break d;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[G>>2];c[G>>2]=h;t=G+4|0;c[t>>2]=(c[t>>2]|0)+1}while(0);h=c[q>>2]|0;k=c[h+24>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[q>>2]|0}while(0);h=c[h+8>>2]|0;if(h|0)do{k=c[h+40>>2]|0;e:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break e;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0}while((h|0)!=0);h=c[H+232>>2]|0;if(!h){u=1;break}while(1){k=c[h+40>>2]|0;f:do if(k|0){j=c[k>>2]|0;if((j|0)<=0)break;k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(u,l)|0:0)break f;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}}while(0);h=c[h+20>>2]|0;if(!h){u=1;break}}}while(0);h=c[(c[q>>2]|0)+16>>2]|0;if(h|0){q=H+272|0;r=((w|0)!=0)<<31>>31;s=(w|0)==0;t=G+4|0;do{o=c[h+20>>2]|0;if((o|0)>0){p=h+8|0;n=0;do{g:do if(u){m=h+36+(n<<3)|0;if((c[m>>2]|0)!=(x|0))break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break g;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);k=c[p>>2]|0;h:do if(k|0){m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(j|0)!=0)){l=y;do{k=k+1|0;l=l+1|0;m=a[k>>0]|0;j=(d[208+(m&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(j|0)!=0))}if(j|0)break;m=c[h+36+(n<<3)+4>>2]|0;do if(!m)j=r;else{if(s)break h;l=a[m>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[208+(d[w>>0]|0)>>0]|0)|0;if(l<<24>>24==0|(j|0)!=0)break;k=w;l=m;do{l=l+1|0;k=k+1|0;K=a[l>>0]|0;j=(d[208+(K&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(K<<24>>24==0|(j|0)!=0))}while(0);if(j|0)break;j=c[q>>2]|0;if(!j)break;l=q;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break h;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[G>>2];c[G>>2]=j;c[t>>2]=(c[t>>2]|0)+1}while(0);n=n+1|0}while((n|0)<(o|0))}h=c[h+4>>2]|0}while((h|0)!=0)}}else{l=H+232|0;h=c[l>>2]|0;if(h|0){k=c[h+40>>2]|0;do if(k){j=c[k>>2]|0;if((j|0)<=0)break;h=k+4|0;while(1){k=c[h>>2]|0;if(k|0?_j(u,k)|0:0)break;if((j|0)>1){j=j+-1|0;h=h+20|0}else break}h=c[l>>2]|0}while(0);h=c[h+36>>2]|0;if(!h)break;_j(u,h)|0;break}h=lo(H,o?t:0)|0;if(h|0){E=171;break b}k=H+236|0;h=c[(c[k>>2]|0)+28>>2]|0;if(h|0)do{j=c[h+12>>2]|0;do if(j|0){if((bd(H,0,j,t)|0)!=(p|0))break;j=c[h+28>>2]|0;if(j|0)mo(H,G,c[j+8>>2]|0,w);no(H,G,c[h+24>>2]|0,w);mo(H,G,c[h+20>>2]|0,w)}while(0);h=c[h+36>>2]|0}while((h|0)!=0);if((c[H+120>>2]|0)==(p|0))no(H,G,c[(c[k>>2]|0)+16>>2]|0,w);oo(u,c[k>>2]|0)}while(0);h=po(f,G,B,A,z)|0;if(h|0)E=171}else E=171;while(0);do if((E|0)==171){if(!(c[v>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;i:do switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29){if(!(520028155>>>h&1)){h=50724;break i}h=c[22960+(h<<2)>>2]|0}else h=50724}}while(0);yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;j:do if(j){h=b[j+8>>1]|0;do if((h&514)==514){if((a[j+10>>0]|0)!=1)break;j=c[j+16>>2]|0;break j}while(0);if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);k:do if(!k)h=0;else{h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1)break;h=c[k+16>>2]|0;break k}while(0);if(h&1){h=0;break}h=Gg(k,1)|0}while(0);K=c[v>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=K;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(H);ro(I,c[G>>2]|0);c[C>>2]=D;Ra=J;return} function oe(a,d,f,g){a=a|0;d=d|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;r=Ra;Ra=Ra+48|0;j=r+16|0;n=r+8|0;m=r;p=r+24|0;q=c[a+36>>2]|0;h=c[q>>2]|0;o=(1<>2]|0;if(!i)h=0;else{h=0;do{if((i|0)!=(q|0))h=b[i+10>>1]|h;i=c[i+4>>2]|0}while((i|0)!=0)}i=o&65535;if(((o&(h&65535)|0)==0?(l=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(l|0)>-1):0)?(b[p>>1]=2,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[m>>2]=p,(Ya[f&127](l,13,m)|0)==-1):0){q=5;Ra=r;return q|0}p=~i;f=q+12|0;b[f>>1]=(e[f>>1]|0)&p;q=q+10|0;b[q>>1]=(e[q>>1]|0)&p;q=0;Ra=r;return q|0}h=c[h+32>>2]|0;i=(h|0)==0;if(!(g&4)){a:do if(!i){while(1){if(o&(e[h+12>>1]|0)|0){h=5;i=33;break}if(o&(e[h+10>>1]|0)|0){h=5;i=33;break}h=c[h+4>>2]|0;if(!h)break a}if((i|0)==33){Ra=r;return h|0}}while(0);h=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0;if((h|0)>-1?(b[p>>1]=1,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[j>>2]=p,(Ya[f&127](h,13,j)|0)==-1):0){q=5;Ra=r;return q|0}q=q+12|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}else{b:do if(i)h=0;else{i=0;while(1){if(o&(e[h+12>>1]|0)|0){h=5;break}i=b[h+10>>1]|i;h=c[h+4>>2]|0;if(!h){h=i;break b}}Ra=r;return h|0}while(0);if(((o&(h&65535)|0)==0?(k=c[(c[(c[a+8>>2]|0)+40>>2]|0)+12>>2]|0,(k|0)>-1):0)?(b[p>>1]=0,b[p+2>>1]=0,c[p+4>>2]=d+120,c[p+8>>2]=f,f=c[606]|0,c[n>>2]=p,(Ya[f&127](k,13,n)|0)==-1):0){q=5;Ra=r;return q|0}q=q+10|0;b[q>>1]=o|(e[q>>1]|0);q=0;Ra=r;return q|0}return 0}function pe(a){a=a|0;return}function qe(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;e=a+36|0;f=c[e>>2]|0;if(!f)return 0;g=c[f>>2]|0;d=g+32|0;while(1){h=c[d>>2]|0;if((h|0)==(f|0))break;else d=h+4|0}c[d>>2]=c[f+4>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}c[e>>2]=0;f=g+28|0;h=(c[f>>2]|0)+-1|0;c[f>>2]=h;if(h|0)return 0;if(b|0?(c[g+12>>2]|0)>-1:0)Wa[c[2532>>2]&127](c[g+8>>2]|0)|0;Ae(a);return 0}function re(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;c[f>>2]=0;return 0}function se(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return 0}function te(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+192|0;i=j+24|0;g=j+16|0;f=j+8|0;e=j;h=j+104|0;d=j+28|0;if(b[a+18>>1]&128){Ra=j;return}if(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0){c[e>>2]=c[a+32>>2];Db(28,31582,e);Ra=j;return}switch(c[d+16>>2]|0){case 0:{c[f>>2]=c[a+32>>2];Db(28,31606,f);Ra=j;return}case 1:{e=a+8|0;if(!(c[e>>2]|0)){Ra=j;return}d=a+32|0;if(!(Xa[c[2388>>2]&255](c[d>>2]|0,h)|0)){a=(c[e>>2]|0)+8|0;if((c[a+4>>2]|0)==0?(c[a>>2]|0)==(c[h+72>>2]|0):0){Ra=j;return}}c[i>>2]=c[d>>2];Db(28,31662,i);Ra=j;return}default:{c[g>>2]=c[a+32>>2];Db(28,31635,g);Ra=j;return}}}function ue(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;d=Mu(a,b,f)|0;Ra=e;return d|0}function ve(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+576|0;g=j+552|0;h=j+536|0;e=j+528|0;k=j+520|0;f=j;c[k>>2]=b;Cb(512,f,31408,k)|0;b=Eu(f)|0;a:do if((b|0)>0)while(1){if((a[f+b>>0]|0)==47)break a;if((b|0)>1)b=b+-1|0;else{i=5;break}}else i=5;while(0);if((i|0)==5)if((a[f>>0]|0)==47)b=1;else{a[f>>0]=46;b=1}a[f+b>>0]=0;while(1){b=Ya[c[2340>>2]&127](f,524288,420)|0;if((b|0)<0){k=uu()|0;if((c[k>>2]|0)!=4){i=14;break}}else{if((b|0)>2){i=13;break}Wa[c[2352>>2]&127](b)|0;c[e>>2]=f;c[e+4>>2]=b;Db(28,31900,e);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){b=-1;i=14;break}}}if((i|0)==13){c[d>>2]=b;k=0;Ra=j;return k|0}else if((i|0)==14){c[d>>2]=b;c[h>>2]=31984;c[h+4>>2]=36187;c[h+8>>2]=31517;Db(14,32001,h);i=uu()|0;i=c[i>>2]|0;k=dv(i)|0;c[g>>2]=36187;c[g+4>>2]=i;c[g+8>>2]=31807;c[g+12>>2]=f;c[g+16>>2]=k;Db(14,31953,g);k=14;Ra=j;return k|0}return 0}function we(){return Ka(30)|0}function xe(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;k=Ra;Ra=Ra+96|0;h=k;i=k+8|0;j=(d|0)!=0;f=j?d:420;g=b|524288;while(1){e=Ya[c[2340>>2]&127](a,g,f)|0;if((e|0)<0){l=uu()|0;if((c[l>>2]|0)!=4){a=13;break}}else{if((e|0)>2){a=7;break}Wa[c[2352>>2]&127](e)|0;c[h>>2]=a;c[h+4>>2]=e;Db(28,31900,h);if((Ya[c[2340>>2]&127](31943,b,d)|0)<0){e=-1;a=13;break}}}if((a|0)==7){if(!j){l=e;Ra=k;return l|0}if(((Xa[c[2400>>2]&255](e,i)|0)==0?(c[i+36>>2]|0)==0:0)?(c[i+12>>2]&511|0)!=(d|0):0)Xa[c[2508>>2]&255](e,d)|0;l=e;Ra=k;return l|0}else if((a|0)==13){Ra=k;return e|0}return 0}function ye(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=Ra;Ra=Ra+112|0;j=k+80|0;i=k;a[d>>0]=0;e=c[14771]|0;if(!(c[672]|0)){g=Ca(32077)|0;c[672]=g}if(!(c[673]|0)){g=Ca(32091)|0;c[673]=g}f=i+12|0;g=e;e=0;while(1){if(((g|0?(Xa[c[2388>>2]&255](g,i)|0)==0:0)?(c[f>>2]&61440|0)==16384:0)?(Xa[c[2364>>2]&255](g,3)|0)==0:0)break;if(e>>>0>5){h=11;break}g=c[2688+(e<<2)>>2]|0;e=e+1|0}if((h|0)==11){j=6410;Ra=k;return j|0}f=d+(b+-2)|0;e=0;while(1){Fb(8,i);a[f>>0]=0;l=i;m=c[l>>2]|0;l=c[l+4>>2]|0;c[j>>2]=g;h=j+8|0;c[h>>2]=m;c[h+4>>2]=l;c[j+16>>2]=0;Cb(b,d,32037,j)|0;if(e>>>0>10|(a[f>>0]|0)!=0){e=1;h=16;break}if(!(Xa[c[2364>>2]&255](d,0)|0))e=e+1|0;else{e=0;h=16;break}}if((h|0)==16){Ra=k;return e|0}return 0}function ze(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;m=Ra;Ra=Ra+80|0;l=m+48|0;i=m+24|0;h=m+16|0;k=m;f=m+56|0;b[f+2>>1]=0;c[f+4>>2]=128;c[f+8>>2]=1;b[f>>1]=1;o=c[606]|0;g=e+12|0;n=c[g>>2]|0;c[k>>2]=f;if(Ya[o&127](n,12,k)|0){o=3850;Ra=m;return o|0}a:do switch(b[f>>1]|0){case 2:{if(a[e+22>>0]|0){a[e+23>>0]=1;o=1288;Ra=m;return o|0}d=d+8|0;f=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((f|0)>-1?(b[k>>1]=1,b[k+2>>1]=0,c[k+4>>2]=128,c[k+8>>2]=1,o=c[606]|0,c[h>>2]=k,(Ya[o&127](f,13,h)|0)==-1):0){o=5;Ra=m;return o|0}f=c[g>>2]|0;do{g=Xa[c[2412>>2]&255](f,3)|0;if((g|0)>=0){j=12;break}o=uu()|0}while((c[o>>2]|0)==4);if((j|0)==12?(g|0)==0:0)break a;n=c[e+8>>2]|0;l=uu()|0;l=c[l>>2]|0;o=dv(l)|0;c[i>>2]=36954;c[i+4>>2]=l;c[i+8>>2]=31726;c[i+12>>2]=(n|0)==0?59952:n;c[i+16>>2]=o;Db(4618,31953,i);o=4618;Ra=m;return o|0}case 1:{o=5;Ra=m;return o|0}default:d=d+8|0}while(0);d=c[(c[(c[d>>2]|0)+40>>2]|0)+12>>2]|0;if((d|0)>-1){b[k>>1]=0;b[k+2>>1]=0;c[k+4>>2]=128;c[k+8>>2]=1;o=c[606]|0;c[l>>2]=k;d=(Ya[o&127](d,13,l)|0)==-1;d=d?5:0}else d=0;o=d;Ra=m;return o|0}function Ae(a){a=a|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+32|0;m=n;l=c[(c[a+8>>2]|0)+40>>2]|0;if(!l){Ra=n;return}if(c[l+28>>2]|0){Ra=n;return}f=Va[c[2640>>2]&127]()|0;f=(f|0)<32768?1:(f|0)/32768|0;h=l+20|0;if(!(b[h>>1]|0))d=l+24|0;else{i=l+12|0;d=l+24|0;j=l+16|0;g=0;do{do if((c[i>>2]|0)<=-1){k=c[(c[d>>2]|0)+(g<<2)>>2]|0;if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{o=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xa[c[2616>>2]&255](c[(c[d>>2]|0)+(g<<2)>>2]|0,c[j>>2]|0)|0;while(0);g=g+f|0}while((g|0)<(e[h>>1]|0))}d=c[d>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);f=l+12|0;d=c[f>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){if(!a)d=0;else d=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;o=dv(a)|0;c[m>>2]=36897;c[m+4>>2]=a;c[m+8>>2]=31695;c[m+12>>2]=(d|0)==0?59952:d;c[m+16>>2]=o;Db(4106,31953,m)}c[f>>2]=-1}c[(c[l>>2]|0)+40>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ra=n;return}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ra=n;return}}function Be(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;f=Ra;Ra=Ra+32|0;e=f;b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){g=c[a+32>>2]|0;h=uu()|0;h=c[h>>2]|0;d=dv(h)|0;c[e>>2]=34584;c[e+4>>2]=h;c[e+8>>2]=31695;c[e+12>>2]=(g|0)==0?59952:g;c[e+16>>2]=d;Db(4106,31953,e)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=f;return 0}return 0}function Ce(a,b){a=a|0;b=b|0;return 0}function De(a,b){a=a|0;b=b|0;return 0}function Ee(a,b){a=a|0;b=b|0;c[b>>2]=0;return 0}function Fe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;g=Ra;Ra=Ra+32|0;f=g;e=b+24|0;d=b+16|0;do if(a[d>>0]|0){if((Wa[c[2568>>2]&127](c[e>>2]|0)|0)>=0){a[d>>0]=0;break}d=uu()|0;d=c[d>>2]|0;if((d|0)!=2)c[b+20>>2]=d}while(0);d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+12|0;e=c[d>>2]|0;if((e|0)>-1){if(Wa[c[2352>>2]&127](e)|0){h=c[b+32>>2]|0;i=uu()|0;i=c[i>>2]|0;e=dv(i)|0;c[f>>2]=34584;c[f+4>>2]=i;c[f+8>>2]=31695;c[f+12>>2]=(h|0)==0?59952:h;c[f+16>>2]=e;Db(4106,31953,f)}c[d>>2]=-1}d=c[b+28>>2]|0;if(!d){d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);d=b;e=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));Ra=g;return 0}return 0}function Ge(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[b+24>>2]|0;f=b+16|0;if(a[f>>0]|0){a[f>>0]=d;Oa(e|0,0)|0;b=0;return b|0}e=Xa[c[2556>>2]&255](e,511)|0;if((e|0)>=0){a[f>>0]=d;b=e;return b|0}d=uu()|0;d=c[d>>2]|0;switch(d|0){case 1:{e=3;break}case 37:case 4:case 16:case 110:case 11:case 13:case 17:{b=5;return b|0}default:e=3850}c[b+20>>2]=d;b=e;return b|0}function He(b,e){b=b|0;e=e|0;var f=0,g=0;f=c[b+24>>2]|0;g=b+16|0;if((d[g>>0]|0|0)==(e|0)){b=0;return b|0}if((e|0)==1){a[g>>0]=1;b=0;return b|0}if((Wa[c[2568>>2]&127](f)|0)>=0){a[g>>0]=0;b=0;return b|0}e=uu()|0;e=c[e>>2]|0;if((e|0)==2){b=0;return b|0}c[b+20>>2]=e;b=2058;return b|0}function Ie(a,b){a=a|0;b=b|0;a=(Xa[c[2364>>2]&255](c[a+24>>2]|0,0)|0)==0&1;c[b>>2]=a;return 0}function Je(a,b){a=a|0;b=b|0;return 29744}function Ke(a,b){a=a|0;b=b|0;return 29820}function Le(a,b){a=a|0;b=b|0;var d=0;if((b|0)==3082)return;if((b&251|4|0)!=14)return;b=c[a>>2]|0;d=c[b+68>>2]|0;if(!d)b=0;else b=Ya[d&127](b,0,0)|0;c[a+72>>2]=b;return}function Me(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=Ra;Ra=Ra+96|0;h=f+72|0;g=c[b+108>>2]|0;c[h+4>>2]=f;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,e);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function Ne(a,d){a=a|0;d=d|0;var e=0,f=0;e=c[a+260>>2]|0;do if(e|0){f=e+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;break}else{Dg(e);break}}while(0);if((d|0)==3082)return;if((d&251|4|0)!=14)return;d=c[a>>2]|0;e=c[d+68>>2]|0;if(!e)d=0;else d=Ya[e&127](d,0,0)|0;c[a+72>>2]=d;return}function Oe(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;d=h+4|0;f=c[b>>2]|0;g=f+16|0;if(c[(c[g>>2]|0)+20>>2]|0){g=0;Ra=h;return g|0}if(a[b+199>>0]|0){g=0;Ra=h;return g|0}e=Pe(c[f>>2]|0,0,f,d,0,542)|0;if(e|0){cd(b,32157,h);c[b+12>>2]=e;g=1;Ra=h;return g|0}e=c[d>>2]|0;c[(c[g>>2]|0)+20>>2]=e;if((Ud(e,c[f+92>>2]|0,-1,0)|0)==7){Fc(f);g=1;Ra=h;return g|0}else{g=0;Ra=h;return g|0}return 0}function Pe(e,f,g,h,i,j){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,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;J=Ra;Ra=Ra+128|0;p=J+104|0;D=J+120|0;A=J+116|0;H=J;G=(f|0)==0;if(!G){k=(a[f>>0]|0)==0;if(Bu(f,32227)|0)if(k)B=4;else{k=0;B=5}else B=6}else B=4;if((B|0)==4)if((a[g+80>>0]|0)==2){k=1;B=6}else{k=1;B=5}if((B|0)==5)if(!(j&128)){F=0;E=i}else B=6;if((B|0)==6){F=1;E=i|2}C=(j&256|0)!=0&(F|k)?j&-769|512:j;if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](48)|0;if(!i){h=7;Ra=J;return h|0}else I=i}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;l=59064;j=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&j>>>0>0){I=c[14978]|0;z=Tv(j|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){h=7;Ra=J;return h|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;I=j}else I=j}l=I+4|0;s=l+44|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));c[I>>2]=g;c[I+32>>2]=I;c[I+36>>2]=1;a:do if(!k?!((C&131072|0)==0|F&(C&64|0)==0):0){if(G)k=0;else k=(Eu(f)|0)&1073741823;l=k+1|0;m=(c[e+8>>2]|0)+1|0;k=(m|0)>(l|0)?m:l;z=Sv(k|0,0,-1,-1)|0;y=L()|0;do if(!(y>>>0>0|(y|0)==0&z>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;a[I+9>>0]=1;if(!k)break;else n=k}else{j=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;k=59064;i=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,k|0,j|0,((j|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){B=33;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;a[I+9>>0]=1;n=i}if(!F){a[n>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,n)|0;if(k|0){if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=k;Ra=J;return h|0}}}else ew(n|0,f|0,l|0)|0;j=c[14822]|0;b:do if(!j)j=0;else{while(1){k=c[j>>2]|0;if((Bu(n,c[k+168>>2]|0)|0)==0?(c[k>>2]|0)==(e|0):0)break;j=c[j+68>>2]|0;if(!j){j=0;break b}}k=c[g+20>>2]|0;c:do if((k|0)>0){l=c[g+16>>2]|0;while(1){i=k;k=k+-1|0;z=c[l+(k<<4)+4>>2]|0;if(z|0?(c[z+4>>2]|0)==(j|0):0)break;if((i|0)<=1)break c}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{h=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=19;Ra=J;return h|0}}while(0);c[I+4>>2]=j;z=j+64|0;c[z>>2]=(c[z>>2]|0)+1}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}if(!j){B=69;break a}if(!(a[I+9>>0]|0))break a;else{B=213;break a}}else B=33;while(0);if((B|0)==33)a[I+9>>0]=1;if(!(c[7324]|0)){ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}else{h=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);h=7;Ra=J;return h|0}}else B=69;while(0);d:do if((B|0)==69){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](84)|0;if(!j)k=7;else B=80}else{k=Wa[c[29356>>2]&127](84)|0;if((c[14985]|0)>>>0<84)c[14985]=84;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){z=c[14978]|0;y=Tv(i|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](k)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;B=80}else B=80}else k=7}do if((B|0)==80){l=j+4|0;s=l+80|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(s|0));y=E&1;z=(y|0)!=0;c[D>>2]=4096;s=e+4|0;u=c[s>>2]|0;u=((u|0)>72?u:72)+7&-8;c[j>>2]=0;do if(!(E&2))if(!G)if(a[f>>0]|0){o=e+8|0;m=(c[o>>2]|0)+1|0;k=m<<1;B=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;x=L()|0;if(!(x>>>0>0|(x|0)==0&B>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}else i=k}else{l=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){B=c[14978]|0;x=Tv(k|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}i=Wa[c[29340>>2]&127](l)|0;if(!i){k=7;B=229;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}a[i>>0]=0;k=Za[c[e+36>>2]&127](e,f,m,i)|0;n=(Eu(i)|0)&1073741823;m=f+(((Eu(f)|0)&1073741823)+1)|0;if(!(a[m>>0]|0))l=m;else{l=m;do{l=l+(((Eu(l)|0)&1073741823)+1)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0}while((a[l>>0]|0)!=0)}if(!k){if((n+8|0)<=(c[o>>2]|0)){x=0;r=l+1-m|0;p=m;q=1;B=119;break}c[p>>2]=31984;c[p+4>>2]=55390;c[p+8>>2]=31517;Db(14,32001,p);k=14}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);B=229;break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);B=229;break}}else{k=7;B=229}}else{x=0;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=0;r=0;p=0;i=0;n=0;q=0;B=119}else if(!G)if(a[f>>0]|0){m=(Eu(f)|0)+1|0;B=Sv(m|0,0,-1,-1)|0;x=L()|0;if(x>>>0>0|(x|0)==0&B>>>0>2147483390){k=7;B=229}else{if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](m)|0;if(!k){k=7;B=229;break}}else{k=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;l=59064;i=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&i>>>0>0){B=c[14978]|0;x=Tv(i|0,l|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&x>>>0<=B>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k){k=7;B=229;break}i=Wa[c[29352>>2]&127](k)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}ew(k|0,f|0,m|0)|0;f=0;x=1;r=0;p=0;i=k;n=(Eu(k)|0)&1073741823;q=0;B=119}}else{x=1;r=0;p=0;i=0;n=0;q=1;B=119}else{f=0;x=1;r=0;p=0;i=0;n=0;q=0;B=119}while(0);e:do if((B|0)==119){o=(u<<1)+17+(n*3|0)+r+((c[s>>2]|0)+279&-8)|0;w=Sv(o|0,0,-1,-1)|0;v=L()|0;do if(!(v>>>0>0|(v|0)==0&w>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;if(!k)break;else w=k}else{k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){w=c[14978]|0;v=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&v>>>0<=w>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l)break;k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;w=l}else w=l}gw(w|0,0,o|0)|0;t=w+212|0;c[t>>2]=w+224;k=w+272|0;v=w+60|0;c[v>>2]=k;k=k+((c[s>>2]|0)+7&-8)|0;c[w+68>>2]=k;k=k+u|0;c[w+64>>2]=k;k=k+u|0;m=w+168|0;c[m>>2]=k;do if(i|0){l=n+1|0;o=w+172|0;c[o>>2]=k+(r+l);ew(k|0,i|0,n|0)|0;if(r|0)ew((c[m>>2]|0)+l|0,p|0,r|0)|0;ew(c[o>>2]|0,i|0,n|0)|0;l=(c[o>>2]|0)+n|0;k=32236;s=l+10|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(s|0));s=(c[o>>2]|0)+(n+9)|0;u=w+220|0;c[u>>2]=s;ew(s|0,i|0,n|0)|0;u=(c[u>>2]|0)+n|0;a[u>>0]=a[32246]|0;a[u+1>>0]=a[32247]|0;a[u+2>>0]=a[32248]|0;a[u+3>>0]=a[32249]|0;a[u+4>>0]=a[32250]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[w>>2]=e;c[w+144>>2]=C;f:do if(q?(a[f>>0]|0)!=0:0){c[A>>2]=0;k=_a[c[e+24>>2]&127](e,c[m>>2]|0,c[v>>2]|0,C&556927,A)|0;m=c[A>>2]&1;if(k|0)break;l=c[v>>2]|0;l=Wa[c[(c[l>>2]|0)+48>>2]&127](l)|0;g:do if(!m){do if(!(a[w+12>>0]|0)){B=c[v>>2]|0;if((Wa[c[(c[B>>2]|0)+48>>2]&127](B)|0)&4096|0)break;k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;do if(i){B=Wa[i&127](k)|0;k=(B|0)<65536?B:65536;if((B|0)<32){k=512;break}c[w+148>>2]=k;if(k>>>0<=4096)break g;if(k>>>0>8192){c[D>>2]=8192;break g}else{c[D>>2]=k;break g}}else k=4096;while(0);c[w+148>>2]=k;break g}while(0);c[w+148>>2]=512}while(0);k=f+(((Eu(f)|0)&1073741823)+1)|0;h:do if(!(a[k>>0]|0))k=0;else{while(1){B=Bu(k,32252)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0)){k=0;break h}}k=(Zm(k,1,0)|0)<<24>>24!=0}while(0);a[w+13>>0]=k&1;i:do if(!(l&8192)){k=f+(((Eu(f)|0)&1073741823)+1)|0;j:do if(a[k>>0]|0){while(1){B=Bu(k,32259)|0;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!B)break;k=k+(((Eu(k)|0)&1073741823)+1)|0;if(!(a[k>>0]|0))break j}if((Zm(k,1,0)|0)<<24>>24)break i}while(0);q=m;f=0;B=170;break f}while(0);k=C|1;B=168}else{k=C;B=168}while(0);if((B|0)==168){a[w+16>>0]=1;a[w+17>>0]=4;a[w+13>>0]=1;q=k&1;f=1;B=170}if((B|0)==170){k=Se(w,D,-1)|0;if(!k){p=c[D>>2]|0;r=(x|0)==0;i=x^1;k=r?119:0;n=c[t>>2]|0;l=n;s=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));o=n+24|0;c[o>>2]=1;l=n+28|0;c[l>>2]=88;a[n+32>>0]=i;a[n+33>>0]=2;c[n+36>>2]=k;c[n+40>>2]=w;k=n+16|0;c[k>>2]=100;c[n+20>>2]=1;m=Ya[c[29424>>2]&127](p,128,i)|0;if(!m)k=7;else{i=c[7357]|0;k=c[k>>2]|0;if((k|0)<=-1){C=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;D=L()|0;k=(c[l>>2]|0)+(c[o>>2]|0)|0;k=Wv(C|0,D|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[i&127](m,k);k=n+44|0;i=c[k>>2]|0;if(i|0)ab[c[29452>>2]&127](i);c[k>>2]=m;c[o>>2]=p;a[w+6>>0]=y^1;c[w+156>>2]=1073741823;a[w+12>>0]=f;a[w+4>>0]=f;a[w+18>>0]=f;a[w+15>>0]=x;a[w+14>>0]=q;a[w+7>>0]=f;do if(!(f<<24>>24)){a[w+8>>0]=1;a[w+9>>0]=0;a[w+10>>0]=2;a[w+11>>0]=10;b[w+140>>1]=88;D=w+160|0;c[D>>2]=-1;c[D+4>>2]=-1;D=c[v>>2]|0;if((Wa[c[(c[D>>2]|0)+48>>2]&127](D)|0)&4096|0){k=512;break}k=c[v>>2]|0;i=c[(c[k>>2]|0)+44>>2]|0;if(!i){k=4096;break}k=Wa[i&127](k)|0;k=(k|0)<32?512:(k|0)<65536?k:65536}else{b[w+140>>1]=88;k=w+160|0;c[k>>2]=-1;c[k+4>>2]=-1;k=512}while(0);c[w+148>>2]=k;if(z|r^1)a[w+5>>0]=((y&255)<<1&255^2)+2<<24>>24;c[w+200>>2]=92;c[w+204>>2]=(c[w+40>>2]|0)==0?74:75;c[j>>2]=w;D=g+48|0;s=c[D+4>>2]|0;l=w+128|0;c[l>>2]=c[D>>2];c[l+4>>2]=s;l=H;s=l+100|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(s|0));k=c[v>>2]|0;i=c[k>>2]|0;if(i|0){k=_a[c[i+8>>2]&127](k,H,100,0,0)|0;switch(k|0){case 0:case 522:break;default:{B=230;break e}}}a[j+16>>0]=E;c[j+4>>2]=g;k=c[j>>2]|0;i=k+176|0;c[i>>2]=117;c[k+180>>2]=j;l=c[k+60>>2]|0;m=c[l>>2]|0;if(!m)l=k;else{Ya[c[m+40>>2]&127](l,15,i)|0;l=c[j>>2]|0}c[I+4>>2]=j;c[j+8>>2]=0;c[j+12>>2]=0;if(a[l+14>>0]|0){E=j+22|0;b[E>>1]=b[E>>1]|1}k=d[H+17>>0]<<16|d[H+16>>0]<<8;m=j+32|0;c[m>>2]=k;do if((k+-512|0)>>>0>65024)B=205;else{if(k+16777215&k|0){B=205;break}k=a[H+20>>0]|0;i=j+22|0;b[i>>1]=b[i>>1]|2;a[j+17>>0]=(d[H+53>>0]<<16|d[H+52>>0]<<24|d[H+54>>0]<<8|d[H+55>>0]|0)!=0&1;i=(d[H+65>>0]<<16|d[H+64>>0]<<24|d[H+66>>0]<<8|d[H+67>>0]|0)!=0&1;B=208}while(0);do if((B|0)==205){c[m>>2]=0;if(G|F){k=0;break}a[j+17>>0]=0;k=0;i=0;B=208}while(0);if((B|0)==208)a[j+18>>0]=i;i=k&255;k=Se(l,m,i)|0;if(k|0){B=230;break e}c[j+36>>2]=(c[m>>2]|0)-i;c[j+64>>2]=1;if(!(a[I+9>>0]|0))break d;c[j+68>>2]=c[14822];c[14822]=j;B=213;break d}}}i=c[v>>2]|0;l=c[i>>2]|0;if(l|0){Wa[c[l+4>>2]&127](i)|0;c[i>>2]=0}l=c[w+208>>2]|0;k:do if(l|0){i=l;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break k}else{i=Wa[c[29352>>2]&127](l)|0;break}else i=Wa[c[29352>>2]&127](l)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](w);B=229;break e}else{B=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);B=229;break e}}while(0);if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);k=7;B=229;break}else{k=7;B=229}}while(0);if((B|0)==229)if(j)B=230;if((B|0)==230){i=c[j>>2]|0;if(i)Te(i,0)}if(j)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{g=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](I);else{g=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I)}c[h>>2]=0;h=k;Ra=J;return h|0}while(0);l:do if((B|0)==213){m=c[g+20>>2]|0;if((m|0)>0){l=c[g+16>>2]|0;k=0;while(1){i=c[l+(k<<4)+4>>2]|0;if(i|0?a[i+9>>0]|0:0)break;k=k+1|0;if((k|0)>=(m|0))break l}while(1){k=c[i+28>>2]|0;if(!k)break;else i=k}m=c[I+4>>2]|0;if(m>>>0<(c[i+4>>2]|0)>>>0){c[I+24>>2]=i;c[I+28>>2]=0;c[i+28>>2]=I;break}k=i+24|0;l=c[k>>2]|0;m:do if(!l)B=224;else{while(1){if((c[l+4>>2]|0)>>>0>=m>>>0)break;k=l+24|0;i=c[k>>2]|0;if(!i){i=l;B=224;break m}else{g=l;l=i;i=g}}c[I+24>>2]=l;c[I+28>>2]=i;c[l+28>>2]=I}while(0);if((B|0)==224){c[I+24>>2]=0;c[I+28>>2]=i}c[k>>2]=I}}while(0);c[h>>2]=I;k=c[I+4>>2]|0;c[k+4>>2]=c[I>>2];if(!(c[k+48>>2]|0)){h=c[(c[k>>2]|0)+212>>2]|0;c[h+16>>2]=-2e3;g=c[7357]|0;I=c[h+44>>2]|0;h=(c[h+28>>2]|0)+(c[h+24>>2]|0)|0;h=Wv(2048e3,0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0;bb[g&127](I,h)}k=c[(c[j>>2]|0)+60>>2]|0;i=c[k>>2]|0;if(!i){h=0;Ra=J;return h|0}Ya[c[i+40>>2]&127](k,30,j+4|0)|0;h=0;Ra=J;return h|0}function Qe(d){d=d|0;var e=0;e=c[d+8>>2]|0;if(!(a[e>>0]|0))return;a[e>>0]=0;if((b[d+30>>1]|0)<=1)return;Gf(e)|0;return}function Re(b){b=b|0;var d=0,e=0,f=0,g=0;f=c[b+4>>2]|0;b=c[(c[b>>2]|0)+60>>2]|0;d=c[f+396>>2]|0;if(!d){g=0;return g|0}g=f+404|0;e=c[g>>2]|0;if((e|0)<0){g=0;return g|0}if(!(a[f+408>>0]|0))b=Xa[d&255](c[f+400>>2]|0,e)|0;else b=Ya[d&127](c[f+400>>2]|0,e,b)|0;if(!b)d=-1;else d=(c[g>>2]|0)+1|0;c[g>>2]=d;g=b;return g|0}function Se(e,f,g){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;r=Ra;Ra=Ra+16|0;o=r;p=c[f>>2]|0;if(!((a[e+15>>0]|0)!=0?(c[e+24>>2]|0)!=0:0))l=3;a:do if(((l|0)==3?(m=e+212|0,p|0?(c[(c[m>>2]|0)+12>>2]|0)==0:0):0)?(q=e+152|0,(p|0)!=(c[q>>2]|0)):0){n=o;c[n>>2]=0;c[n+4>>2]=0;if(((a[e+16>>0]|0)!=0?(i=c[e+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Xa[c[j+24>>2]&255](i,o)|0,(k|0)!=0):0)g=k;else l=8;b:do if((l|0)==8){k=p+8|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];n=c[14820]|0;c[14820]=n+-1;c[14821]=(n|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else{n=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&n>>>0>2147483390){g=7;break}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){g=7;break}}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){n=c[14978]|0;l=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&l>>>0<=n>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){g=7;break}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0>(c[14984]|0)>>>0)c[14984]=i}k=h+p|0;n=k;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;Ff(e);k=c[m>>2]|0;m=k+24|0;do if(c[m>>2]|0){j=k+28|0;n=Ya[c[29424>>2]&127](p,(c[j>>2]|0)+40|0,d[k+32>>0]|0)|0;if(n|0){l=c[7357]|0;i=c[k+16>>2]|0;if((i|0)<=-1){t=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;s=L()|0;i=(c[j>>2]|0)+(c[m>>2]|0)|0;i=Wv(t|0,s|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](n,i);i=k+44|0;j=c[i>>2]|0;if(j|0)ab[c[29452>>2]&127](j);c[i>>2]=n;c[m>>2]=p;break}g=h;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[h>>2]=c[14819];c[14819]=h;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;break}else g=Wa[c[29352>>2]&127](h)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);g=7;break b}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);g=7;break b}}while(0);j=e+208|0;k=c[j>>2]|0;c:do if(k|0){i=k;do if((c[14816]|0)>>>0<=i>>>0)if((c[14817]|0)>>>0>i>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break c}else{i=Wa[c[29352>>2]&127](k)|0;break}else i=Wa[c[29352>>2]&127](k)|0;while(0);c[14980]=(c[14980]|0)-i;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=h;t=o;s=c[t>>2]|0;t=c[t+4>>2]|0;o=Sv(p|0,0,-1,-1)|0;t=Sv(o|0,L()|0,s|0,t|0)|0;t=Wv(t|0,L()|0,p|0,0)|0;L()|0;c[e+24>>2]=t;c[q>>2]=p;break a}while(0);c[f>>2]=c[q>>2];t=g;Ra=r;return t|0}while(0);c[f>>2]=c[e+152>>2];h=e+142|0;if((g|0)<0)g=b[h>>1]|0;b[h>>1]=g;t=0;Ra=r;return t|0}function Te(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;o=Ra;Ra=Ra+16|0;h=o;n=c[b+208>>2]|0;f=c[b+136>>2]|0;if(f|0)do{g=f;f=c[f+16>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);l=b+4|0;a[l>>0]=0;do if((e|0)!=0?(0==0?(c[e+32>>2]&2048|0)==0:0):0){c[h>>2]=0;if((((a[b+12>>0]|0)==0?(c[b+24>>2]|0)!=0:0)?(i=c[b+60>>2]|0,j=c[i>>2]|0,(j|0)!=0):0)?(k=Ya[c[j+40>>2]&127](i,20,h)|0,(k|0)!=12):0){if(c[h>>2]|k|0){f=0;break}}else m=14;f=n}else f=0;while(0);k=b+216|0;Pf(c[k>>2]|0,e,d[b+11>>0]|0,c[b+152>>2]|0,f)|0;c[k>>2]=0;Ff(b);if(!(a[b+15>>0]|0)){h=b+64|0;f=c[h>>2]|0;g=c[f>>2]|0;a:do if(g|0){if(!(a[b+7>>0]|0)){f=Xa[c[g+20>>2]&255](f,2)|0;if(!f){f=c[h>>2]|0;g=c[f>>2]|0;m=22}}else m=22;if((m|0)==22)f=Xa[c[g+24>>2]&255](f,b+80|0)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:break a}c[b+40>>2]=f;a[b+16>>0]=6;c[b+204>>2]=(f|0)==0?74:75}while(0);switch(a[b+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l>>0]|0))uf(b,0,0)|0;break}default:tf(b)|0}vf(b)}else vf(b);f=c[b+64>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}f=c[b+60>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}b:do if(n|0){f=n;do if((c[14816]|0)>>>0<=f>>>0)if((c[14817]|0)>>>0>f>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;n=(c[14820]|0)+1|0;c[14820]=n;c[14821]=(n|0)<(c[14815]|0)&1;break b}else{f=Wa[c[29352>>2]&127](n)|0;break}else f=Wa[c[29352>>2]&127](n)|0;while(0);c[14980]=(c[14980]|0)-f;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ab[c[29452>>2]&127](c[(c[b+212>>2]|0)+44>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=o;return}else{n=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=o;return}}function Ue(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;h=d+40|0;if(c[h>>2]|0){e=0;return e|0}g=a[d+20>>0]|0;if(g<<24>>24){if(g&3){e=0;return e|0}if(b[e+28>>1]&8){e=0;return e|0}}j=d+196|0;c[j>>2]=(c[j>>2]|0)+1;c[e+16>>2]=0;do if(c[d+216>>2]|0){f=Ve(e)|0;if(!f){f=We(d,e,0,0)|0;i=12}}else{if(!((b[e+28>>1]&8)==0?(a[d+16>>0]|0)!=3:0))i=10;if((i|0)==10?(f=Xe(d,1)|0,f|0):0)break;f=Ye(d,e)|0;i=12}while(0);if((i|0)==12)if(!f){j=c[e+12>>2]|0;f=j+8|0;g=e+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(e|0))c[f>>2]=d;h=c[e+32>>2]|0;i=(h|0)==0;if(i){c[j+4>>2]=d;f=d}else{c[h+36>>2]=d;f=c[g>>2]|0}if(!f){c[j>>2]=h;if(i)a[j+33>>0]=2}else c[f+32>>2]=h;i=e+28|0;b[i>>1]=b[i>>1]&-16|1;if(b[e+30>>1]|0){e=0;return e|0}if(!(a[j+32>>0]|0)){e=0;return e|0}cb[c[29440>>2]&255](c[j+44>>2]|0,c[e>>2]|0,0);e=0;return e|0}switch((f&255)<<24>>24){case 10:case 13:break;default:{e=f;return e|0}}c[h>>2]=f;a[d+16>>0]=6;c[d+204>>2]=75;e=f;return e|0}function Ve(b){b=b|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;v=Ra;Ra=Ra+16|0;r=v;q=c[b+20>>2]|0;s=b+24|0;i=c[s>>2]|0;t=q+96|0;g=c[t>>2]|0;if((g|0)<=0){u=0;Ra=v;return u|0}u=q+92|0;m=c[u>>2]|0;n=i+-1|0;l=0;a:while(1){b:do if((c[m+(l*48|0)+20>>2]|0)>>>0>=i>>>0){h=c[m+(l*48|0)+16>>2]|0;e=c[h>>2]|0;if(n>>>0>=e>>>0)break a;f=c[h+8>>2]|0;if(!f)j=n;else{j=n;k=h;do{e=(j>>>0)/(f>>>0)|0;k=c[k+12+(e<<2)>>2]|0;if(!k)break a;j=j-(G(e,f)|0)|0;f=c[k+8>>2]|0}while((f|0)!=0);h=k;e=c[k>>2]|0}if(e>>>0<4001)if(!(1<<(j&7)&d[h+12+(j>>>3)>>0]))break a;else break;k=j+1|0;e=(j>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a;while(1){if((f|0)==(k|0))break b;e=((e+1|0)>>>0)%125|0;f=c[h+12+(e<<2)>>2]|0;if(!f)break a}}while(0);l=l+1|0;if((l|0)>=(g|0)){e=0;p=35;break}}if((p|0)==35){Ra=v;return e|0}e=a[q+5>>0]|0;do if(e<<24>>24!=2){k=q+68|0;h=c[k>>2]|0;c:do if(!(c[h>>2]|0)){do if(e<<24>>24!=4?(o=c[7334]|0,(a[q+21>>0]|0)==0):0){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));if(o|0){g=o;f=(o|0)>0?o:1020;break}e=_a[c[e+24>>2]&127](e,0,h,8222,0)|0;if(!e)break c;Ra=v;return e|0}else p=22;while(0);if((p|0)==22){e=c[q>>2]|0;f=h;g=f+72|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));g=-1;f=1020}c[h+4>>2]=f;c[h>>2]=29896;c[h+8>>2]=g;c[h+56>>2]=8222;c[h+64>>2]=0;c[h+60>>2]=e}while(0);i=c[b+4>>2]|0;j=q+52|0;f=q+152|0;g=(c[f>>2]|0)+4|0;g=Yv(g|0,((g|0)<0)<<31>>31|0,c[j>>2]|0,0)|0;h=L()|0;e=c[k>>2]|0;q=c[s>>2]|0;a[r>>0]=q>>>24;a[r+1>>0]=q>>>16;a[r+2>>0]=q>>>8;a[r+3>>0]=q;e=_a[c[(c[e>>2]|0)+12>>2]&127](e,r,4,g,h)|0;if(e|0){u=e;Ra=v;return u|0}b=c[k>>2]|0;q=c[f>>2]|0;r=Sv(g|0,h|0,4,0)|0;e=L()|0;e=_a[c[(c[b>>2]|0)+12>>2]&127](b,i,q,r,e)|0;if(!e){e=j;g=c[t>>2]|0;i=c[s>>2]|0;break}else{u=e;Ra=v;return u|0}}else e=q+52|0;while(0);c[e>>2]=(c[e>>2]|0)+1;if((g|0)<=0){u=0;Ra=v;return u|0}e=0;h=0;while(1){f=c[u>>2]|0;if((c[f+(h*48|0)+20>>2]|0)>>>0>>0)f=g;else{e=df(c[f+(h*48|0)+16>>2]|0,i)|0|e;f=c[t>>2]|0}h=h+1|0;if((h|0)>=(f|0))break;else g=f}Ra=v;return e|0}function We(e,f,g,h){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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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;za=Ra;Ra=Ra+48|0;sa=za+32|0;qa=za;k=za+36|0;c[k>>2]=f;R=(h|0)==0;if(!R){c[k>>2]=f;if(!f){ya=0;f=0}else{i=f;f=0;j=k;do{xa=(c[i+24>>2]|0)>>>0>g>>>0;ya=i+16|0;f=f+((xa^1)&1)|0;j=xa?j:ya;i=c[ya>>2]|0;c[j>>2]=i}while((i|0)!=0);ya=c[k>>2]|0}}else{ya=f;f=1}xa=e+192|0;c[xa>>2]=(c[xa>>2]|0)+f;if((c[ya+24>>2]|0)==1){va=c[ya+20>>2]|0;va=(d[va+105>>0]<<16|d[va+104>>0]<<24|d[va+106>>0]<<8|d[va+107>>0])+1|0;xa=ya+4|0;wa=c[xa>>2]|0;oa=va>>>24&255;a[wa+24>>0]=oa;ra=va>>>16&255;a[wa+25>>0]=ra;ua=va>>>8&255;a[wa+26>>0]=ua;va=va&255;a[wa+27>>0]=va;wa=c[xa>>2]|0;a[wa+92>>0]=oa;a[wa+93>>0]=ra;a[wa+94>>0]=ua;a[wa+95>>0]=va;xa=c[xa>>2]|0;a[xa+96>>0]=0;a[xa+97>>0]=46;a[xa+98>>0]=52;a[xa+99>>0]=32}wa=c[e+216>>2]|0;ua=c[e+152>>2]|0;U=d[e+11>>0]|0;va=wa+32|0;f=c[c[va>>2]>>2]|0;xa=wa+52|0;if(!(Lu(xa,f,48)|0))B=0;else B=(c[f+16>>2]|0)+1|0;o=wa+40|0;if(!(b[o>>1]|0)){a:do if(!(c[f+96>>2]|0)){l=wa+43|0;$=20}else{Fb(4,qa);k=wa+43|0;b:do if(!(a[k>>0]|0)){f=c[wa+4>>2]|0;f=Za[c[(c[f>>2]|0)+56>>2]&127](f,4,4,10)|0;switch(f|0){case 0:{$=15;break b}case 5:break b;default:{}}p=f;break a}else $=15;while(0);if(($|0)==15){m=c[qa>>2]|0;i=c[va>>2]|0;f=c[i>>2]|0;j=f+96|0;$=wa+84|0;oa=wa+112|0;c[oa>>2]=(c[oa>>2]|0)+1;c[wa+68>>2]=0;oa=$+1|0;ra=$+2|0;n=$+3|0;l=(d[oa>>0]<<16|d[$>>0]<<24|d[ra>>0]<<8|d[n>>0])+1|0;a[$>>0]=l>>>24;a[oa>>0]=l>>>16;a[ra>>0]=l>>>8;a[n>>0]=l;c[wa+88>>2]=m;i=c[i>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;n=c[xa+4>>2]|0;l=n+6014e3+(c[xa+8>>2]|0)|0;n=n+3007e3+(c[xa+12>>2]|0)+l|0;l=n+l|0;n=n+(c[xa+20>>2]|0)+l|0;l=l+(c[xa+24>>2]|0)+n|0;n=n+(c[xa+28>>2]|0)+l|0;l=l+(c[xa+32>>2]|0)+n|0;c[wa+92>>2]=l;c[wa+96>>2]=n+m+l;l=i+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[k>>0]|0)!=2){ra=c[wa+4>>2]|0;ab[c[(c[ra>>2]|0)+60>>2]&127](ra)}l=i;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[j>>2]=0;c[f+128>>2]=0;c[f+104>>2]=0;c[f+108>>2]=-1;c[f+112>>2]=-1;c[f+116>>2]=-1;if(!(a[k>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,4,4,9)|0}}l=k;$=20}while(0);if(($|0)==20){if(!(a[l>>0]|0)){ra=c[wa+4>>2]|0;Za[c[(c[ra>>2]|0)+56>>2]&127](ra,3,1,5)|0}b[o>>1]=-1;f=0;do{f=f+1|0;i=gf(wa,qa,1,f)|0}while((i|0)==-1);p=i}if(p|0){g=p;Ra=za;return g|0}}ra=wa+68|0;l=c[ra>>2]|0;c:do if(!l){a[qa>>0]=55;a[qa+1>>0]=127;a[qa+2>>0]=6;a[qa+3>>0]=-126;f=qa+4|0;a[f>>0]=0;a[qa+5>>0]=45;a[qa+6>>0]=-30;a[qa+7>>0]=24;i=qa+8|0;a[i>>0]=ua>>>24;a[qa+9>>0]=ua>>>16;a[qa+10>>0]=ua>>>8;a[qa+11>>0]=ua;j=qa+12|0;oa=c[wa+112>>2]|0;a[j>>0]=oa>>>24;a[qa+13>>0]=oa>>>16;a[qa+14>>0]=oa>>>8;a[qa+15>>0]=oa;k=wa+84|0;if(!oa)Fb(8,k);oa=k;Y=c[oa>>2]|0;oa=c[oa+4>>2]|0;W=qa+16|0;c[W>>2]=Y;c[W+4>>2]=oa;W=c[qa>>2]|0;X=(c[f>>2]|0)+W|0;f=X+W+(c[i>>2]|0)|0;i=(c[j>>2]|0)+X+f|0;f=f+Y+i|0;i=i+oa+f|0;a[qa+24>>0]=f>>>24;a[qa+25>>0]=f>>>16;a[qa+26>>0]=f>>>8;a[qa+27>>0]=f;a[qa+28>>0]=i>>>24;a[qa+29>>0]=i>>>16;a[qa+30>>0]=i>>>8;a[qa+31>>0]=i;c[wa+36>>2]=ua;a[wa+65>>0]=0;c[wa+76>>2]=f;c[wa+80>>2]=i;a[wa+47>>0]=1;i=wa+8|0;f=c[i>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,32,0,0)|0;do if(!f){if((a[wa+48>>0]|0?(q=c[i>>2]|0,r=U>>>2&3,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){f=s;break}Y=i;break c}while(0);g=f;Ra=za;return g|0}else Y=wa+8|0;while(0);V=c[Y>>2]|0;W=ua+24|0;X=((W|0)<0)<<31>>31;i=Yv(l|0,0,W|0,X|0)|0;i=Sv(i|0,L()|0,32,0)|0;f=L()|0;oa=(ya|0)==0;d:do if(!oa){q=(B|0)==0;r=V;s=U&3;t=(s|0)==0;u=wa+104|0;v=((ua|0)<0)<<31>>31;p=ya;m=0;o=f;n=i;e:while(1){do if(q)$=47;else{j=p+16|0;if(!(R|(c[j>>2]|0)!=0)){K=0;S=l+1|0;$=49;break}c[qa>>2]=0;ef(wa,c[p+24>>2]|0,qa)|0;k=c[qa>>2]|0;if(k>>>0>>0){$=47;break}f=Yv(k+-1|0,0,W|0,X|0)|0;f=Sv(f|0,L()|0,56,0)|0;i=L()|0;if(((c[u>>2]|0)+-1|0)>>>0>=k>>>0)c[u>>2]=k;C=c[Y>>2]|0;C=_a[c[(c[C>>2]|0)+12>>2]&127](C,c[p+4>>2]|0,ua,f,i)|0;if(C|0){$=45;break e}w=p+28|0;b[w>>1]=b[w>>1]&-65;w=l;x=m;y=j;z=n;A=o}while(0);if(($|0)==47){f=l+1|0;if(R){M=0;T=f;$=50}else{K=c[p+16>>2]|0;S=f;$=49}}if(($|0)==49){M=(K|0)==0?g:0;T=S;$=50}if(($|0)==50){$=0;m=c[p+4>>2]|0;mf(wa,c[p+24>>2]|0,M,m,qa);if(!(o>>>0<4294967295|(o|0)==-1&n>>>0<4294967272)){l=0-n|0;f=_a[c[(c[r>>2]|0)+12>>2]&127](r,qa,l,n,o)|0;if(f|0){E=f;$=63;break}f=Sv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=n+24|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){H=j;J=qa+l|0;N=f;O=i;$=55}else F=k}else{H=24;J=qa;N=n;O=o;$=55}if(($|0)==55){$=0;F=_a[c[(c[r>>2]|0)+12>>2]&127](r,J,H,N,O)|0}if(F|0){E=F;$=63;break}f=Sv(n|0,o|0,24,0)|0;i=L()|0;Sv(f|0,i|0,ua|0,v|0)|0;if(!((o|0)>-1|(o|0)==-1&n>>>0>4294967271|(L()|0)<0)){l=-24-n|0;j=_a[c[(c[r>>2]|0)+12>>2]&127](r,m,l,f,i)|0;if(j|0){E=j;$=63;break}f=Sv(f|0,i|0,l|0,((l|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-l|0;if(t)k=0;else k=Xa[c[(c[r>>2]|0)+20>>2]&255](r,s)|0;if((j|0)!=0&(k|0)==0){G=j;I=m+l|0;P=f;Q=i;$=62}else D=k}else{G=ua;I=m;P=f;Q=i;$=62}if(($|0)==62){$=0;D=_a[c[(c[r>>2]|0)+12>>2]&127](r,I,G,P,Q)|0}f=p+28|0;if(D|0){da=D;$=127;break}z=Sv(n|0,o|0,W|0,X|0)|0;A=L()|0;b[f>>1]=b[f>>1]|64;w=T;x=p;y=p+16|0}p=c[y>>2]|0;if(!p){ma=w;ta=x;Z=z;_=A;break d}else{l=w;m=x;o=A;n=z}}if(($|0)==45){g=C;Ra=za;return g|0}else if(($|0)==63){g=E;Ra=za;return g|0}else if(($|0)==127){Ra=za;return da|0}}else{ma=l;ta=0;Z=i;_=f}while(0);A=(h|0)!=0;if(A){i=wa+104|0;if(c[i>>2]|0){m=(c[wa+36>>2]|0)+24|0;v=nb(m)|0;if(!v){g=7;Ra=za;return g|0}p=c[i>>2]|0;o=(p|0)==1;n=((m|0)<0)<<31>>31;p=Yv(p+-2|0,0,m|0,n|0)|0;p=Sv(p|0,L()|0,48,0)|0;f=L()|0;q=c[Y>>2]|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,v,8,o?24:p,o?0:f)|0;o=v+1|0;p=v+2|0;q=v+3|0;c[wa+76>>2]=d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0];r=v+4|0;s=v+5|0;t=v+6|0;u=v+7|0;c[wa+80>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];j=c[i>>2]|0;c[i>>2]=0;f:do if(!((f|0)!=0|j>>>0>ma>>>0)){l=v+24|0;do{i=Yv(j+-1|0,0,m|0,n|0)|0;i=Sv(i|0,L()|0,32,0)|0;k=L()|0;f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,v,m,i,k)|0;if(f|0)break f;mf(wa,d[o>>0]<<16|d[v>>0]<<24|d[p>>0]<<8|d[q>>0],d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],l,qa);f=c[Y>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,qa,24,i,k)|0;j=j+1|0}while(!(j>>>0>ma>>>0|(f|0)!=0))}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{T=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(f|0){g=f;Ra=za;return g|0}}z=U&3;do if(!z){i=0;k=0}else{if(a[wa+49>>0]|0){f=c[Y>>2]|0;i=c[(c[f>>2]|0)+44>>2]|0;if(!i){f=4096;i=0}else{i=Wa[i&127](f)|0;U=(i|0)<32;i=(i|0)<65536?i:65536;f=U?512:i;i=U?0:((i|0)<0)<<31>>31}y=Sv(Z|0,_|0,-1,-1)|0;y=Sv(y|0,L()|0,f|0,i|0)|0;v=L()|0;u=Zv(y|0,v|0,f|0,i|0)|0;u=Tv(y|0,v|0,u|0,L()|0)|0;v=L()|0;y=(u|0)==(Z|0)&(v|0)==(_|0);g:do if((v|0)>(_|0)|(v|0)==(_|0)&u>>>0>Z>>>0){s=ta+4|0;t=ta+24|0;w=V;x=((ua|0)<0)<<31>>31;k=0;r=Z;q=_;while(1){p=c[s>>2]|0;mf(wa,c[t>>2]|0,g,p,qa);n=Sv(r|0,q|0,24,0)|0;o=L()|0;if(!((v|0)>(o|0)|(v|0)==(o|0)&u>>>0>n>>>0)){m=Tv(u|0,v|0,r|0,q|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,qa,m,r,q)|0;if(f|0){ba=f;break}f=Sv(r|0,q|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=24-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){fa=j;ha=qa+m|0;ia=f;ja=i;$=89}else ca=l}else{fa=24;ha=qa;ia=r;ja=q;$=89}if(($|0)==89){$=0;ca=_a[c[(c[w>>2]|0)+12>>2]&127](w,ha,fa,ia,ja)|0}if(ca|0){ba=ca;break}_=Sv(n|0,o|0,ua|0,x|0)|0;Z=L()|0;if(!((v|0)<(o|0)|(v|0)==(o|0)&u>>>0<=n>>>0|((Z|0)<(v|0)|(Z|0)==(v|0)&_>>>0>>0))){m=Tv(u|0,v|0,n|0,o|0)|0;L()|0;f=_a[c[(c[w>>2]|0)+12>>2]&127](w,p,m,n,o)|0;if(f|0){ba=f;break}f=Sv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;i=L()|0;j=ua-m|0;l=Xa[c[(c[w>>2]|0)+20>>2]&255](w,z)|0;if((j|0)!=0&(l|0)==0){ea=j;ga=p+m|0;ka=f;la=i;$=94}else aa=l}else{ea=ua;ga=p;ka=n;la=o;$=94}if(($|0)==94){$=0;aa=_a[c[(c[w>>2]|0)+12>>2]&127](w,ga,ea,ka,la)|0}if(aa|0){da=aa;$=127;break}r=Sv(r|0,q|0,W|0,X|0)|0;q=L()|0;k=k+1|0;if(!((v|0)>(q|0)|(v|0)==(q|0)&u>>>0>r>>>0))break g}if(($|0)==127){Ra=za;return da|0}g=ba;Ra=za;return g|0}else k=0;while(0);if(!y){i=0;break}}else k=0;i=V;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,z)|0}while(0);m=wa+47|0;if((a[m>>0]|0)!=0?(pa=wa+16|0,na=c[pa>>2]|0,pa=c[pa+4>>2]|0,(pa|0)>-1|(pa|0)==-1&na>>>0>4294967295):0){l=Yv(k+ma|0,0,W|0,X|0)|0;l=Sv(l|0,L()|0,32,0)|0;j=L()|0;f=(j|0)>(pa|0)|(j|0)==(pa|0)&l>>>0>na>>>0;l=f?l:na;j=f?j:pa;f=c[Y>>2]|0;f=Xa[c[(c[f>>2]|0)+24>>2]&255](f,qa)|0;pa=c[qa+4>>2]|0;if((f|0)==0&((pa|0)>(j|0)|((pa|0)==(j|0)?(c[qa>>2]|0)>>>0>l>>>0:0))){f=c[Y>>2]|0;f=Ya[c[(c[f>>2]|0)+16>>2]&127](f,l,j)|0}if(f|0){c[sa>>2]=c[wa+108>>2];Db(f,32326,sa)}a[m>>0]=0}}else{i=0;k=0}f=c[ra>>2]|0;if((ya|0)!=0&(i|0)==0){l=ya;do{j=f+1|0;if(!(b[l+28>>1]&64))i=0;else{i=ff(wa,j,c[l+24>>2]|0)|0;f=j}l=c[l+16>>2]|0}while((i|0)==0&(l|0)!=0)}j=(i|0)==0;if((k|0)>0&j){l=ta+24|0;while(1){f=f+1|0;i=ff(wa,f,c[l>>2]|0)|0;j=(i|0)==0;if((k|0)>1&j)k=k+-1|0;else{k=f;break}}}else k=f;if(j){b[wa+66>>1]=ua&65280|ua>>>16;c[ra>>2]=k;if(A){f=wa+60|0;m=c[f>>2]|0;c[f>>2]=m+1;c[wa+72>>2]=g;f=c[c[va>>2]>>2]|0;a[wa+64>>0]=1;c[xa>>2]=3007e3;l=c[xa+4>>2]|0;m=m+6014001+l|0;l=l+3007e3+(c[xa+12>>2]|0)+m|0;m=m+k+l|0;l=l+g+m|0;m=m+(c[xa+24>>2]|0)+l|0;l=l+(c[xa+28>>2]|0)+m|0;m=m+(c[xa+32>>2]|0)+l|0;l=l+(c[xa+36>>2]|0)+m|0;c[wa+92>>2]=m;c[wa+96>>2]=l;l=f+48|0;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));if((a[wa+43>>0]|0)!=2){g=c[wa+4>>2]|0;ab[c[(c[g>>2]|0)+60>>2]&127](g)}l=f;m=xa;n=l+48|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));c[wa+12>>2]=k}}else if(i|0){g=i;Ra=za;return g|0}j=e+88|0;i=c[j>>2]|0;if((i|0)==0|oa){g=0;Ra=za;return g|0}f=ya;while(1){if(i|0)nf(i,c[f+24>>2]|0,c[f+4>>2]|0);f=c[f+16>>2]|0;if(!f){da=0;break}i=c[j>>2]|0}Ra=za;return da|0}function Xe(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;t=Ra;Ra=Ra+32|0;l=t+16|0;p=t;f=c[d+40>>2]|0;if(f|0){d=f;Ra=t;return d|0}a:do if(!(c[d+216>>2]|0)){k=d+17|0;g=d+13|0;h=d+60|0;i=d+176|0;j=d+180|0;b:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}if(a[g>>0]|0){g=7;break}f=c[h>>2]|0;f=Xa[c[(c[f>>2]|0)+28>>2]&255](f,4)|0;switch(f|0){case 0:{g=7;break b}case 5:break;default:{g=36;break b}}if(!(Wa[c[i>>2]&127](c[j>>2]|0)|0)){f=5;g=36;break}}if((g|0)==7){a[k>>0]=4;break}else if((g|0)==36){Ra=t;return f|0}}while(0);do if(!(a[d+7>>0]|0)){j=d+64|0;if(c[c[j>>2]>>2]|0?(a[d+5>>0]|0)!=4:0){i=c[d+60>>2]|0;i=Wa[c[(c[i>>2]|0)+48>>2]&127](i)|0;k=(i&512|0)==0;c:do if(k){g=p;c[g>>2]=-117058087;c[g+4>>2]=-681336544;g=c[d+44>>2]|0;a[p+8>>0]=g>>>24;a[p+9>>0]=g>>>16;a[p+10>>0]=g>>>8;a[p+11>>0]=g;g=d+72|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((f|0)==0&(g|0)==0){g=0;h=0}else{f=Sv(f|0,g|0,-1,-1)|0;h=L()|0;g=c[d+148>>2]|0;h=Wv(f|0,h|0,g|0,0)|0;h=Sv(h|0,L()|0,1,0)|0;g=Yv(h|0,L()|0,g|0,0)|0;h=L()|0}f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+8>>2]&127](f,l,8,g,h)|0;if(!f)if(!(Lu(l,32352,8)|0)){f=c[j>>2]|0;f=_a[c[(c[f>>2]|0)+12>>2]&127](f,59953,1,g,h)|0;g=19}else g=20;else g=19;if((g|0)==19)switch(f|0){case 0:case 522:{g=20;break}default:{}}do if((g|0)==20){g=i&1024;if(((g|0)==0&(a[d+8>>0]|0)!=0?(m=c[j>>2]|0,n=a[d+10>>0]|0,n<<24>>24):0)?(o=Xa[c[(c[m>>2]|0)+20>>2]&255](m,n&255)|0,o|0):0){f=o;break}o=c[j>>2]|0;f=d+80|0;f=_a[c[(c[o>>2]|0)+12>>2]&127](o,p,12,c[f>>2]|0,c[f+4>>2]|0)|0;if(!f){f=g;break c}}while(0);d=f;Ra=t;return d|0}else f=i&1024;while(0);if(((f|0)==0?(q=c[j>>2]|0,r=a[d+10>>0]|0,r=(r<<24>>24==3?16:0)|r&255,r|0):0)?(s=Xa[c[(c[q>>2]|0)+20>>2]&255](q,r)|0,s|0):0){d=s;Ra=t;return d|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r;if((e|0)==0|k^1)break;c[d+44>>2]=0;f=of(d)|0;if(!f)break;Ra=t;return f|0}q=d+72|0;r=c[q+4>>2]|0;s=d+80|0;c[s>>2]=c[q>>2];c[s+4>>2]=r}while(0);g=c[d+212>>2]|0;f=c[g>>2]|0;if(f|0)do{s=f+28|0;b[s>>1]=b[s>>1]&-9;f=c[f+32>>2]|0}while((f|0)!=0);c[g+8>>2]=c[g+4>>2];a[d+16>>0]=4;d=0;Ra=t;return d|0}function Ye(e,f){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;t=Ra;Ra=Ra+16|0;l=t;s=e+60|0;h=c[s>>2]|0;if((c[h>>2]|0)==0?(g=c[e>>2]|0,g=_a[c[g+24>>2]&127](g,0,h,c[e+144>>2]&556897|30,0)|0,g|0):0){s=g;Ra=t;return s|0}k=e+36|0;h=c[k>>2]|0;j=e+24|0;g=c[j>>2]|0;do if(h>>>0>>0){if((c[f+16>>2]|0)==0?(c[f+24>>2]|0)>>>0<=h>>>0:0)break;r=c[e+152>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,g|0,0)|0;i=L()|0;h=l;c[h>>2]=r;c[h+4>>2]=i;h=c[s>>2]|0;i=c[h>>2]|0;if(i){Ya[c[i+40>>2]&127](h,5,l)|0;g=c[j>>2]|0}c[k>>2]=g}while(0);if(!f){s=0;Ra=t;return s|0}n=e+24|0;o=e+152|0;p=e+104|0;q=e+32|0;r=e+192|0;m=e+88|0;do{e=c[f+24>>2]|0;if(e>>>0<=(c[n>>2]|0)>>>0?(b[f+28>>1]&16)==0:0){g=c[o>>2]|0;h=Yv(g|0,((g|0)<0)<<31>>31|0,e+-1|0,0)|0;i=L()|0;j=(e|0)==1;if(j){k=c[f+20>>2]|0;k=((d[k+105>>0]|0)<<16|(d[k+104>>0]|0)<<24|(d[k+106>>0]|0)<<8|(d[k+107>>0]|0))+1|0;l=f+4|0;g=c[l>>2]|0;w=k>>>24&255;a[g+24>>0]=w;v=k>>>16&255;a[g+25>>0]=v;u=k>>>8&255;a[g+26>>0]=u;k=k&255;a[g+27>>0]=k;g=c[l>>2]|0;a[g+92>>0]=w;a[g+93>>0]=v;a[g+94>>0]=u;a[g+95>>0]=k;g=c[l>>2]|0;a[g+96>>0]=0;a[g+97>>0]=46;a[g+98>>0]=52;a[g+99>>0]=32;g=c[o>>2]|0}else l=f+4|0;k=c[l>>2]|0;w=c[s>>2]|0;g=_a[c[(c[w>>2]|0)+12>>2]&127](w,k,g,h,i)|0;if(j){j=p;h=k+24|0;i=j+16|0;do{a[j>>0]=a[h>>0]|0;j=j+1|0;h=h+1|0}while((j|0)<(i|0))}if(e>>>0>(c[q>>2]|0)>>>0)c[q>>2]=e;c[r>>2]=(c[r>>2]|0)+1;h=c[m>>2]|0;if(h)nf(h,e,c[l>>2]|0)}else g=0;f=c[f+16>>2]|0}while((g|0)==0&(f|0)!=0);Ra=t;return g|0}function Ze(a){a=a|0;var b=0,d=0,e=0;d=a+16|0;a=c[d>>2]|0;if(!a){c[d>>2]=0;return 0}do{b=a;a=c[a>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}}while((a|0)!=0);c[d>>2]=0;return 0}function _e(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=a+40|0;k=l;a:do if((e|0)==0&(f|0)==0|((c[k>>2]|0)!=(e|0)?1:(c[k+4>>2]|0)!=(f|0))){g=c[a+16>>2]|0;if(!g)g=0;else{j=c[a+4>>2]|0;k=((j|0)<0)<<31>>31;h=0;i=0;while(1){h=Sv(h|0,i|0,j|0,k|0)|0;i=L()|0;if((i|0)>(f|0)|(i|0)==(f|0)&h>>>0>e>>>0)break a;g=c[g>>2]|0;if(!g){g=0;break}}}}else g=c[a+48>>2]|0;while(0);k=a+4|0;i=c[k>>2]|0;j=Zv(e|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;i=i-j|0;h=(i|0)>(d|0)?d:i;ew(b|0,g+4+j|0,h|0)|0;i=d-i|0;b:do if((i|0)>-1){j=b;do{g=c[g>>2]|0;if(!((i|0)!=0&(g|0)!=0))break b;j=j+h|0;b=c[k>>2]|0;h=(i|0)<(b|0)?i:b;ew(j|0,g+4|0,h|0)|0;i=i-b|0}while((i|0)>-1)}while(0);b=(g|0)==0;e=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0;f=L()|0;c[l>>2]=b?0:e;c[l+4>>2]=b?0:f;c[a+48>>2]=g;return 0}function $e(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,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;I=Ra;Ra=Ra+32|0;G=I;H=a+8|0;g=c[H>>2]|0;if((g|0)>0?(F=Sv(d|0,((d|0)<0)<<31>>31|0,e|0,f|0)|0,D=L()|0,E=((g|0)<0)<<31>>31,(D|0)>(E|0)|(D|0)==(E|0)&F>>>0>g>>>0):0){m=c[a>>2]|0;t=a+4|0;u=c[t>>2]|0;D=H;C=c[D>>2]|0;D=c[D+4>>2]|0;v=a+16|0;g=c[v>>2]|0;w=a+20|0;x=c[w>>2]|0;y=a+24|0;F=y;E=c[F>>2]|0;F=c[F+4>>2]|0;z=a+32|0;c[G>>2]=c[z>>2];c[G+4>>2]=c[z+4>>2];c[G+8>>2]=c[z+8>>2];c[G+12>>2]=c[z+12>>2];c[G+16>>2]=c[z+16>>2];c[G+20>>2]=c[z+20>>2];A=a+56|0;B=c[A>>2]|0;n=a+60|0;o=c[n>>2]|0;p=a+64|0;q=c[p>>2]|0;r=a+68|0;s=c[r>>2]|0;h=a;i=h+72|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));h=_a[c[o+24>>2]&127](o,q,a,B&556927,0)|0;a:do if(!h){if(g|0){i=u;j=g;k=0;l=0;do{J=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;K=L()|0;h=Tv(E|0,F|0,k|0,l|0)|0;L()|0;i=(K|0)>(F|0)|(K|0)==(F|0)&J>>>0>E>>>0?h:i;h=_a[c[(c[a>>2]|0)+12>>2]&127](a,j+4|0,i,k,l)|0;if(h|0){i=a;break a}k=Sv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;j=c[j>>2]|0}while((j|0)!=0);do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0)}K=_a[c[(c[a>>2]|0)+12>>2]&127](a,b,d,e,f)|0;Ra=I;return K|0}else i=a;while(0);j=c[i>>2]|0;if(j|0){Wa[c[j+4>>2]&127](a)|0;c[i>>2]=0}c[a>>2]=m;c[t>>2]=u;K=H;c[K>>2]=C;c[K+4>>2]=D;c[v>>2]=g;c[w>>2]=x;K=y;c[K>>2]=E;c[K+4>>2]=F;c[z>>2]=c[G>>2];c[z+4>>2]=c[G+4>>2];c[z+8>>2]=c[G+8>>2];c[z+12>>2]=c[G+12>>2];c[z+16>>2]=c[G+16>>2];c[z+20>>2]=c[G+20>>2];c[A>>2]=B;c[n>>2]=o;c[p>>2]=q;c[r>>2]=s;K=h;Ra=I;return K|0}b:do if((d|0)>0){m=a+24|0;n=a+32|0;o=a+4|0;p=a+16|0;i=m;l=d;h=c[i>>2]|0;i=c[i+4>>2]|0;while(1){g=c[n>>2]|0;j=c[o>>2]|0;i=Zv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0;k=j-i|0;k=(l|0)<(k|0)?l:k;if(!i){h=nb(j+4|0)|0;if(!h){g=3082;break}c[h>>2]=0;if(!g)c[p>>2]=h;else c[g>>2]=h;c[n>>2]=h;g=h}ew(g+4+i|0,b|0,k|0)|0;l=l-k|0;h=m;h=Sv(c[h>>2]|0,c[h+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;i=L()|0;K=m;c[K>>2]=h;c[K+4>>2]=i;if((l|0)<=0)break b;else b=b+k|0}Ra=I;return g|0}while(0);c[a+12>>2]=e+d;K=0;Ra=I;return K|0}function af(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(!((b|0)==0&(d|0)==0))return 0;e=a+16|0;b=c[e>>2]|0;if(b|0)do{d=b;b=c[b>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);c[e>>2]=0;c[a+12>>2]=0;c[a+32>>2]=0;f=a+24|0;c[f>>2]=0;c[f+4>>2]=0;c[a+48>>2]=0;f=a+40|0;c[f>>2]=0;c[f+4>>2]=0;return 0}function bf(a,b){a=a|0;b=b|0;return 0}function cf(a,b){a=a|0;b=b|0;var d=0;d=a+24|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function df(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;if(!b){m=0;return m|0}e=e+-1|0;a:do if((c[b>>2]|0)>>>0>4e3){l=b;j=b;while(1){i=c[l+8>>2]|0;if(!i)break;h=(e>>>0)/(i>>>0)|0;e=e-(G(h,i)|0)|0;h=l+12+(h<<2)|0;b=c[h>>2]|0;if(!b){if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](512)|0;if(!b){m=17;break}}else{b=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){l=c[14978]|0;k=Tv(f|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=17;break}f=Wa[c[29352>>2]&127](b)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(b+4|0,0,508)|0;c[b>>2]=i;c[h>>2]=b}if((c[b>>2]|0)>>>0>4e3){l=b;j=b}else break a}if((m|0)==17){c[h>>2]=0;m=7;return m|0}i=l+8|0;k=e+1|0;b=(e>>>0)%125|0;h=l+12|0;f=l+12+(b<<2)|0;e=c[f>>2]|0;if(!e){b=l+4|0;e=c[b>>2]|0;if(e>>>0<124)m=46}else{f=b;do{if((e|0)==(k|0)){e=0;m=47;break}e=f+1|0;f=e>>>0>124?0:e;e=c[l+12+(f<<2)>>2]|0}while((e|0)!=0);if((m|0)==47)return e|0;b=l+4|0;e=c[b>>2]|0;if(e>>>0<=61){f=l+12+(f<<2)|0;m=46}}if((m|0)==46){c[b>>2]=e+1;c[f>>2]=k;m=0;return m|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](500)|0;if(!e){m=7;return m|0}else g=e}else{b=Wa[c[29356>>2]&127](500)|0;if((c[14985]|0)>>>0<500)c[14985]=500;e=59064;f=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&f>>>0>0){m=c[14978]|0;g=Tv(f|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=m>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){m=7;return m|0}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0){c[14987]=e;g=b}else g=b}ew(g|0,h|0,500)|0;gw(h|0,0,500)|0;c[i>>2]=(((c[j>>2]|0)+124|0)>>>0)/125|0;e=df(l,k)|0;f=0;do{b=c[g+(f<<2)>>2]|0;if(b)e=df(l,b)|0|e;f=f+1|0}while((f|0)!=125);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);m=e;return m|0}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);m=e;return m|0}}while(0);m=b+12+(e>>>3)|0;a[m>>0]=1<<(e&7)|(d[m>>0]|0);m=0;return m|0}function ef(d,f,g){d=d|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,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+32|0;A=C;x=C+12|0;z=c[d+68>>2]|0;do if(z|0){if((b[d+40>>1]|0)==0?(a[d+50>>0]|0)==0:0)break;r=d+100|0;s=((c[r>>2]|0)+33|0)>>>12;h=(z+33|0)>>>12;a:do if(h>>>0>>0)h=0;else{t=x+4|0;u=d+24|0;v=d+32|0;w=x+8|0;q=f*383&8191;p=h;b:while(1){if((c[u>>2]|0)>(p|0)?(y=c[(c[v>>2]|0)+(p<<2)>>2]|0,c[t>>2]=y,(y|0)!=0):0)h=y;else{h=kf(d,p,t)|0;if(h|0)break;h=c[t>>2]|0}n=h+16384|0;c[x>>2]=n;if(!p){h=h+136|0;c[t>>2]=h;o=0}else o=(p<<12)+-34|0;c[w>>2]=o;m=h+-4|0;c[t>>2]=m;i=n+(q<<1)|0;if(b[i>>1]|0){k=8192;l=q;h=0;while(1){j=o+(e[i>>1]|0)|0;if(j>>>0<=z>>>0?j>>>0>=(c[r>>2]|0)>>>0:0)h=(c[m+(e[i>>1]<<2)>>2]|0)==(f|0)?j:h;if(!k){B=22;break b}l=l+1&8191;i=n+(l<<1)|0;if(!(b[i>>1]|0))break;else k=k+-1|0}if(h|0)break a}if((p|0)>(s|0))p=p+-1|0;else{h=0;break a}}if((B|0)==22){c[A>>2]=32306;c[A+4>>2]=61232;c[A+8>>2]=31517;Db(11,32001,A);h=11}B=h;Ra=C;return B|0}while(0);c[g>>2]=h;B=0;Ra=C;return B|0}while(0);c[g>>2]=0;B=0;Ra=C;return B|0}function ff(a,d,f){a=a|0;d=d|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=Ra;Ra=Ra+48|0;r=s;p=s+24|0;l=s+12|0;j=d+33|0;k=j>>>12;m=l+4|0;n=a+24|0;if(!((c[n>>2]|0)>(k|0)?(g=c[(c[a+32>>2]|0)+(k<<2)>>2]|0,c[m>>2]=g,(g|0)!=0):0))i=3;do if((i|0)==3){g=kf(a,k,m)|0;if(!g){g=c[m>>2]|0;break}else{f=g;Ra=s;return f|0}}while(0);q=g+16384|0;c[l>>2]=q;if(!k){k=g+136|0;c[m>>2]=k;i=0}else{i=(j&-4096)+-34|0;k=g}c[l+8>>2]=i;j=k+-4|0;c[m>>2]=j;o=d-i|0;if((o|0)==1)gw(k|0,0,g+32768-k|0)|0;m=j+(o<<2)|0;if(c[m>>2]|0){d=a+68|0;g=c[d>>2]|0;do if(g|0){g=g+33|0;i=g>>>12;k=p+4|0;if(!((c[n>>2]|0)>(i|0)?(h=c[(c[a+32>>2]|0)+(i<<2)>>2]|0,c[k>>2]=h,(h|0)!=0):0)){if(kf(a,i,k)|0)break;h=c[k>>2]|0}l=h+16384|0;c[p>>2]=l;if(!i){j=h+136|0;c[k>>2]=j;g=0}else{g=(g&-4096)+-34|0;j=h}c[p+8>>2]=g;c[k>>2]=j+-4;h=(c[d>>2]|0)-g|0;g=0;do{i=l+(g<<1)|0;if((h|0)<(e[i>>1]|0))b[i>>1]=0;g=g+1|0}while((g|0)!=8192);p=j+(h<<2)|0;gw(p|0,0,l-p|0)|0}while(0)}h=f*383&8191;g=q+(h<<1)|0;a:do if(b[g>>1]|0){i=o;while(1){if(!i)break;h=h+1&8191;g=q+(h<<1)|0;if(!(b[g>>1]|0))break a;else i=i+-1|0}c[r>>2]=32306;c[r+4>>2]=59401;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=s;return f|0}while(0);c[m>>2]=f;b[g>>1]=o;f=0;Ra=s;return f|0}function gf(d,f,g,h){d=d|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,v=0,w=0,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;u=A+32|0;k=A;j=A+48|0;v=A+44|0;w=A+40|0;do if((h|0)>5)if((h|0)>100){d=15;Ra=A;return d|0}else{z=h+-9|0;z=G(z*39|0,z)|0;y=c[d>>2]|0;Xa[c[y+60>>2]&255](y,(h|0)>9?z:1)|0;break}while(0);a:do if(!g){z=d+50|0;if(!(a[z>>0]|0)){g=hf(d,f)|0;b:do if((g|0)==5){if(!(c[c[d+32>>2]>>2]|0)){d=-1;Ra=A;return d|0}h=d+43|0;if(a[h>>0]|0){d=-1;Ra=A;return d|0}i=d+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,2,1,6)|0;switch(g|0){case 0:break;case 5:{d=261;Ra=A;return d|0}default:break b}if(a[h>>0]|0){d=-1;Ra=A;return d|0}d=c[i>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,2,1,5)|0;d=-1;Ra=A;return d|0}while(0);if(g|0){d=g;Ra=A;return d|0}if(!(a[z>>0]|0)){j=d+32|0;m=(c[c[j>>2]>>2]|0)+96|0;l=d+52|0;h=d+68|0;if((c[m>>2]|0)!=(c[h>>2]|0)){g=0;break}k=d+43|0;i=a[k>>0]|0;if(!(i<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;i=a[k>>0]|0}else g=0;if(i<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}switch(g|0){case 5:break a;case 0:break;default:{d=g;Ra=A;return d|0}}if(!(Lu(c[c[j>>2]>>2]|0,l,48)|0)){b[d+40>>1]=0;d=0;Ra=A;return d|0}if(a[k>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,3,1,5)|0;d=-1;Ra=A;return d|0}}x=d+43|0;y=d+4|0;if(!(a[x>>0]|0)){g=c[y>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,3,1,6)|0;switch(g|0){case 0:{t=17;break}case 5:{g=-1;t=35;break}default:t=34}}else t=17;c:do if((t|0)==17){b[d+40>>1]=0;g=c[y>>2]|0;g=_a[c[(c[g>>2]|0)+52>>2]&127](g,0,32768,0,j)|0;switch(g|0){case 8:{g=-1;t=35;break c}case 1288:break;default:{t=34;break c}}g=d+52|0;h=c[c[d+32>>2]>>2]|0;i=g+48|0;do{a[g>>0]=a[h>>0]|0;g=g+1|0;h=h+1|0}while((g|0)<(i|0));t=d+8|0;g=c[t>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,u)|0;if(!g){s=u;r=c[s+4>>2]|0;if((r|0)<0|(r|0)==0&(c[s>>2]|0)>>>0<32){c[f>>2]=1;g=((c[d+68>>2]|0)!=0)<<31>>31;t=34;break}g=c[t>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,k,32,0,0)|0;if(!g)if(!(Lu(d+84|0,k+16|0,8)|0)){g=d+66|0;n=(e[g>>1]|0)+24|0;o=pb(n,0)|0;if(o){m=o+24|0;p=d+76|0;q=c[p>>2]|0;r=d+80|0;s=c[r>>2]|0;i=Yv((e[g>>1]|0)+24|0,0,c[d+68>>2]|0,0)|0;i=Sv(i|0,L()|0,32,0)|0;j=L()|0;g=Sv(i|0,j|0,n|0,0)|0;h=L()|0;l=u;k=c[l+4>>2]|0;d:do if((h|0)>(k|0)|((h|0)==(k|0)?g>>>0>(c[l>>2]|0)>>>0:0))g=0;else{l=g;k=h;h=i;g=j;while(1){j=c[t>>2]|0;g=_a[c[(c[j>>2]|0)+8>>2]&127](j,o,n,h,g)|0;if(g|0)break;if(!(lf(d,v,w,m,o)|0)){g=0;break}if(c[w>>2]|0){g=-1;break d}g=Sv(l|0,k|0,n|0,0)|0;h=L()|0;j=u;i=c[j+4>>2]|0;if((h|0)>(i|0)|((h|0)==(i|0)?g>>>0>(c[j>>2]|0)>>>0:0)){g=0;break d}else{i=k;j=l;l=g;k=h;g=i;h=j}}}while(0);c[p>>2]=q;c[r>>2]=s;if(!(c[7324]|0)){ab[c[29344>>2]&127](o);t=34;break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);t=34;break}}else{g=7;t=35}}else{g=-1;t=35}else t=35}else t=35}while(0);if((t|0)==34)if(!g)g=0;else t=35;if((t|0)==35){i=d+24|0;if((c[i>>2]|0)>0){j=d+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[i>>2]|0))}a[z>>0]=0;h=d+44|0;if(a[h>>0]|0){if(!(a[x>>0]|0)){z=c[y>>2]|0;Za[c[(c[z>>2]|0)+56>>2]&127](z,0,1,9)|0}a[h>>0]=0;c[d+104>>2]=0;a[d+47>>0]=0}h=d+40|0;i=b[h>>1]|0;if(i<<16>>16>-1){if(!(a[x>>0]|0)){d=c[y>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,(i<<16>>16)+3|0,1,5)|0}b[h>>1]=-1}c[f>>2]=1}d=g;Ra=A;return d|0}else{g=0;l=d+52|0;h=d+68|0;m=(c[c[d+32>>2]>>2]|0)+96|0}while(0);s=c[h>>2]|0;i=m+8|0;o=c[i>>2]|0;k=o>>>0>s>>>0;o=k?0:o;n=m+12|0;p=c[n>>2]|0;y=o>>>0>p>>>0|p>>>0>s>>>0;p=y?o:p;o=m+16|0;f=c[o>>2]|0;x=p>>>0>f>>>0|f>>>0>s>>>0;f=x?p:f;p=m+20|0;j=c[p>>2]|0;z=f>>>0>j>>>0|j>>>0>s>>>0;k=z?(x?(y?(k^1)&1:2):3):4;j=z?f:j;e:do if(!(a[d+46>>0]&2)){if((k|0)==0|j>>>0>>0){q=d+43|0;r=d+4|0;f:do if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,4,1,10)|0;switch(g|0){case 0:{k=1;h=4;g=i;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,5,1,10)|0;switch(g|0){case 0:{k=2;h=5;g=n;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,6,1,10)|0;switch(g|0){case 0:{k=3;h=6;g=o;break f}case 5:break;default:{d=g;Ra=A;return d|0}}if(!(a[q>>0]|0)){g=c[r>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,7,1,10)|0;switch(g|0){case 5:{t=69;break e}case 0:{k=4;h=7;g=p;break f}default:{}}Ra=A;return g|0}else{k=4;h=7;g=p}}else{k=3;h=6;g=o}}else{k=2;h=5;g=n}}else{k=1;h=4;g=i}while(0);c[g>>2]=s;if(!(a[q>>0]|0)){j=c[r>>2]|0;Za[c[(c[j>>2]|0)+56>>2]&127](j,h,1,9)|0;j=s}else j=s}}else t=69;while(0);if((t|0)==69)if(!k){d=(g|0)==5?-1:1288;Ra=A;return d|0}h=k+3|0;i=d+43|0;g=a[i>>0]|0;do if(!(g<<24>>24)){g=c[d+4>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,h,1,6)|0;if(!g){g=a[i>>0]|0;break}d=(g|0)==5?-1:g;Ra=A;return d|0}while(0);c[d+100>>2]=(c[m>>2]|0)+1;if(g<<24>>24!=2){f=c[d+4>>2]|0;ab[c[(c[f>>2]|0)+60>>2]&127](f)}if((c[m+4+(k<<2)>>2]|0)==(j|0)?(Lu(c[c[d+32>>2]>>2]|0,l,48)|0)==0:0){b[d+40>>1]=k;d=0;Ra=A;return d|0}if(a[i>>0]|0){d=-1;Ra=A;return d|0}d=c[d+4>>2]|0;Za[c[(c[d>>2]|0)+56>>2]&127](d,h,1,5)|0;d=-1;Ra=A;return d|0}function hf(e,f){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,M=0,N=0,O=0,P=0;O=Ra;Ra=Ra+96|0;K=O+64|0;G=O+56|0;p=O+40|0;B=O+32|0;m=O;C=O+84|0;D=O+80|0;j=O+76|0;N=e+24|0;if((c[N>>2]|0)>0?(M=c[c[e+32>>2]>>2]|0,c[j>>2]=M,(M|0)!=0):0){g=0;M=6}else{g=kf(e,0,j)|0;switch(g|0){case 0:break;case 1288:{a[e+50>>0]=1;a[e+43>>0]=2;c[f>>2]=1;break}default:{N=g;Ra=O;return N|0}}if(!(c[j>>2]|0)){h=1;M=7}else M=6}if((M|0)==6){h=jf(e,f)|0;if(!h)M=67;else M=7}do if((M|0)==7){if((a[e+50>>0]|0)==0?a[e+46>>0]&2:0){h=e+43|0;if(a[h>>0]|0){g=264;break}i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,6)|0;if(g|0)break;if(a[h>>0]|0){g=264;break}g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,0,1,5)|0;g=264;break}I=e+43|0;if((a[I>>0]|0)==0?(i=c[e+4>>2]|0,i=Za[c[(c[i>>2]|0)+56>>2]&127](i,0,1,10)|0,i|0):0){g=i;break}H=e+44|0;a[H>>0]=1;if((c[N>>2]|0)>0?(F=c[c[e+32>>2]>>2]|0,c[j>>2]=F,(F|0)!=0):0)M=18;else{g=kf(e,0,j)|0;if(!g)M=18}if((M|0)==18){h=jf(e,f)|0;if(!h){h=0;g=0}else{F=d[e+45>>0]|0;E=F+1|0;F=2-F|0;if(!(a[I>>0]|0)){i=e+4|0;g=c[i>>2]|0;g=Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,10)|0;if(!g)if((a[I>>0]|0)==0?(k=c[i>>2]|0,k=Za[c[(c[k>>2]|0)+56>>2]&127](k,4,4,10)|0,(k|0)!=0):0)if(!(a[I>>0]|0)){g=c[i>>2]|0;Za[c[(c[g>>2]|0)+56>>2]&127](g,E,F,9)|0;g=k}else g=k;else M=25}else M=25;if((M|0)==25){A=e+52|0;i=A;l=i+48|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(l|0));z=e+8|0;g=c[z>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,B)|0;a:do if(!g){y=B;x=c[y+4>>2]|0;b:do if((x|0)>0|(x|0)==0&(c[y>>2]|0)>>>0>32){g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,m,32,0,0)|0;c:do if(!g){g=d[m+3>>0]|0;i=m+8|0;n=d[m+9>>0]<<16|d[i>>0]<<24;o=d[m+10>>0]<<8;l=n|o|d[m+11>>0];if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|g&254|0)==931071618?!((l+-512|0)>>>0>65024|(l+-1&l|0)!=0):0){x=g&1;a[e+65>>0]=x;c[e+36>>2]=l;g=m+12|0;c[e+112>>2]=d[m+13>>0]<<16|d[g>>0]<<24|d[m+14>>0]<<8|d[m+15>>0];w=m+16|0;j=c[w>>2]|0;w=c[w+4>>2]|0;y=e+84|0;c[y>>2]=j;c[y+4>>2]=w;y=e+76|0;if(!x){x=c[m>>2]|0;k=c[m+4>>2]|0;w=k+x|0;x=w+x+(c[i>>2]|0)|0;i=(c[g>>2]|0)+w+x|0;g=i+(c[m+20>>2]|0)|0;i=x+j+i|0}else{w=dw(c[m>>2]|0)|0;k=c[m+4>>2]|0;x=(dw(k|0)|0)+w|0;i=x+w+(dw(c[i>>2]|0)|0)|0;g=(dw(c[g>>2]|0)|0)+x+i|0;i=i+(dw(j|0)|0)+g|0;g=g+(dw(c[m+20>>2]|0)|0)|0}g=g+i|0;c[y>>2]=i;x=e+80|0;c[x>>2]=g;do if((i|0)==(d[m+25>>0]<<16|d[m+24>>0]<<24|d[m+26>>0]<<8|d[m+27>>0]|0)){if((g|0)!=(d[m+29>>0]<<16|d[m+28>>0]<<24|d[m+30>>0]<<8|d[m+31>>0]|0))break;if((d[m+5>>0]<<16|k<<24|d[m+6>>0]<<8|d[m+7>>0]|0)!=3007e3){c[p>>2]=31984;c[p+4>>2]=59539;c[p+8>>2]=31517;Db(14,32001,p);g=14;break a}r=l+24|0;s=((r|0)<0)<<31>>31;w=pb(r,s)|0;if(!w){g=7;break c}t=w+24|0;g=Sv(r|0,s|0,32,0)|0;m=L()|0;v=B;u=c[v+4>>2]|0;d:do if((m|0)>(u|0)|((m|0)==(u|0)?g>>>0>(c[v>>2]|0)>>>0:0)){g=0;i=0;j=0}else{u=e+68|0;v=e+72|0;p=(n>>>16|o)&65535;q=e+66|0;o=0;i=0;j=0;k=32;l=0;n=g;while(1){o=o+1|0;g=c[z>>2]|0;g=_a[c[(c[g>>2]|0)+8>>2]&127](g,w,r,k,l)|0;if(g|0)break;if(!(lf(e,C,D,t,w)|0)){g=0;break}g=ff(e,o,c[C>>2]|0)|0;if(g|0)break;g=c[D>>2]|0;if(g){c[u>>2]=o;c[v>>2]=g;b[q>>1]=p;i=c[y>>2]|0;j=c[x>>2]|0}g=Sv(n|0,m|0,r|0,s|0)|0;k=L()|0;l=B;P=c[l+4>>2]|0;if((k|0)>(P|0)|((k|0)==(P|0)?g>>>0>(c[l>>2]|0)>>>0:0)){g=0;break d}else{l=m;P=n;n=g;m=k;k=P}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](w);else{P=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w)}if(!g){g=j;break b}else break a}while(0);i=0;g=0;break b}i=0;g=0;break b}while(0);break a}else{i=0;g=0}while(0);c[e+76>>2]=i;c[e+80>>2]=g;j=e+32|0;k=c[c[j>>2]>>2]|0;a[e+64>>0]=1;c[A>>2]=3007e3;P=c[A+4>>2]|0;l=P+6014e3+(c[A+8>>2]|0)|0;P=P+3007e3+(c[A+12>>2]|0)+l|0;l=(c[A+16>>2]|0)+l+P|0;P=(c[A+20>>2]|0)+P+l|0;l=l+i+P|0;i=P+g+l|0;g=l+(c[A+32>>2]|0)+i|0;i=i+(c[A+36>>2]|0)+g|0;c[e+92>>2]=g;c[e+96>>2]=i;i=k+48|0;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));if((a[I>>0]|0)!=2){P=c[e+4>>2]|0;ab[c[(c[P>>2]|0)+60>>2]&127](P)}i=k;g=A;l=i+48|0;do{a[i>>0]=a[g>>0]|0;i=i+1|0;g=g+1|0}while((i|0)<(l|0));j=c[c[j>>2]>>2]|0;c[j+96>>2]=0;g=e+68|0;c[j+128>>2]=c[g>>2];c[j+100>>2]=0;i=j+104|0;c[i>>2]=-1;c[j+108>>2]=-1;c[j+112>>2]=-1;c[j+116>>2]=-1;j=c[g>>2]|0;if(j|0)c[i>>2]=j;if(!(c[e+72>>2]|0))g=0;else{P=c[e+108>>2]|0;c[G>>2]=c[g>>2];c[G+4>>2]=P;Db(283,32269,G);g=0}}while(0);if((a[I>>0]|0)==0?(J=e+4|0,P=c[J>>2]|0,Za[c[(c[P>>2]|0)+56>>2]&127](P,E,F,9)|0,(a[I>>0]|0)==0):0){P=c[J>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,4,4,9)|0}}c[f>>2]=1}}a[H>>0]=0;if(!(a[I>>0]|0)){P=c[e+4>>2]|0;Za[c[(c[P>>2]|0)+56>>2]&127](P,0,1,9)|0}if(!h)M=67}while(0);if((M|0)==67)if((c[e+52>>2]|0)!=3007e3){c[K>>2]=31984;c[K+4>>2]=60517;c[K+8>>2]=31517;Db(14,32001,K);g=14}i=e+50|0;if(!(a[i>>0]|0)){P=g;Ra=O;return P|0}l=e+43|0;if(!g)g=0;else{if((c[N>>2]|0)>0){j=e+32|0;h=0;do{k=c[(c[j>>2]|0)+(h<<2)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{P=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[(c[j>>2]|0)+(h<<2)>>2]=0;h=h+1|0}while((h|0)<(c[N>>2]|0))}if((a[l>>0]|0)!=2){P=c[e+4>>2]|0;Xa[c[(c[P>>2]|0)+64>>2]&255](P,0)|0}a[i>>0]=0;g=(g|0)==522?-1:g}a[l>>0]=0;P=g;Ra=O;return P|0}function jf(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+96|0;k=l+48|0;g=l;h=c[c[b+32>>2]>>2]|0;f=k;i=h;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if((a[b+43>>0]|0)!=2){j=c[b+4>>2]|0;ab[c[(c[j>>2]|0)+60>>2]&127](j)}f=g;i=h+48|0;j=f+48|0;do{a[f>>0]=a[i>>0]|0;f=f+1|0;i=i+1|0}while((f|0)<(j|0));if(Lu(k,g,48)|0){k=1;Ra=l;return k|0}if(!(a[k+12>>0]|0)){k=1;Ra=l;return k|0}g=c[k>>2]|0;f=(c[k+4>>2]|0)+g|0;g=g+f+(c[k+8>>2]|0)|0;f=(c[k+12>>2]|0)+f+g|0;g=g+f+(c[k+16>>2]|0)|0;f=(c[k+20>>2]|0)+f+g|0;g=g+f+(c[k+24>>2]|0)|0;f=(c[k+28>>2]|0)+f+g|0;g=g+f+(c[k+32>>2]|0)|0;if((g|0)!=(c[k+40>>2]|0)){k=1;Ra=l;return k|0}if(((c[k+36>>2]|0)+f+g|0)!=(c[k+44>>2]|0)){k=1;Ra=l;return k|0}f=b+52|0;if(!(Lu(f,k,48)|0)){k=0;Ra=l;return k|0}c[d>>2]=1;i=k;j=f+48|0;do{c[f>>2]=c[i>>2];f=f+4|0;i=i+4|0}while((f|0)<(j|0));k=e[b+66>>1]|0;c[b+36>>2]=k<<16&65536|k&65024;k=0;Ra=l;return k|0}function kf(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;h=b+24|0;do if((c[h>>2]|0)<=(e|0)){i=e+1|0;j=b+32|0;k=c[j>>2]|0;if((mb()|0)==0?(g=sb(k,i<<2,0)|0,g|0):0){k=c[h>>2]|0;gw(g+(k<<2)|0,0,i-k<<2|0)|0;c[j>>2]=g;c[h>>2]=i;break}c[f>>2]=0;f=7;return f|0}while(0);if((a[b+43>>0]|0)!=2){h=c[b+4>>2]|0;g=b+32|0;h=_a[c[(c[h>>2]|0)+52>>2]&127](h,e,32768,d[b+44>>0]|0,(c[g>>2]|0)+(e<<2)|0)|0;i=b+46|0;if((h&255|0)==8){a[i>>0]=a[i>>0]|2;h=(h|0)==8?0:h}}else{if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](32768)|0;if(!g)g=0;else l=18}else{g=Wa[c[29356>>2]&127](32768)|0;if((c[14985]|0)>>>0<32768)c[14985]=32768;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;j=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=18}else l=18}else g=0}if((l|0)==18)gw(g|0,0,32768)|0;b=b+32|0;c[(c[b>>2]|0)+(e<<2)>>2]=g;h=(c[(c[b>>2]|0)+(e<<2)>>2]|0)==0?7:0;g=b}c[f>>2]=c[(c[g>>2]|0)+(e<<2)>>2];f=h;return f|0}function lf(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;n=b+76|0;if(Lu(b+84|0,h+8|0,8)|0){n=0;return n|0}l=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];if(!l){n=0;return n|0}i=c[n>>2]|0;m=b+80|0;j=c[m>>2]|0;if(!(a[b+65>>0]|0)){i=i+j+(c[h>>2]|0)|0;o=(c[h+4>>2]|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(c[j>>2]|0)|0;b=(c[j+4>>2]|0)+b+i|0;j=j+8|0}while(j>>>0>>0)}else{i=i+j+(dw(c[h>>2]|0)|0)|0;o=(dw(c[h+4>>2]|0)|0)+j+i|0;c[n>>2]=i;c[m>>2]=o;k=g+(c[b+36>>2]|0)|0;j=g;b=o;do{i=i+b+(dw(c[j>>2]|0)|0)|0;b=(dw(c[j+4>>2]|0)|0)+b+i|0;j=j+8|0}while(j>>>0>>0)}c[n>>2]=i;c[m>>2]=b;if((i|0)!=(d[h+17>>0]<<16|d[h+16>>0]<<24|d[h+18>>0]<<8|d[h+19>>0]|0)){o=0;return o|0}if((b|0)!=(d[h+21>>0]<<16|d[h+20>>0]<<24|d[h+22>>0]<<8|d[h+23>>0]|0)){o=0;return o|0}c[e>>2]=l;c[f>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];o=1;return o|0}function mf(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;j=b+76|0;a[h>>0]=e>>>24;a[h+1>>0]=e>>>16;a[h+2>>0]=e>>>8;a[h+3>>0]=e;a[h+4>>0]=f>>>24;a[h+5>>0]=f>>>16;a[h+6>>0]=f>>>8;a[h+7>>0]=f;e=h+8|0;if(c[b+104>>2]|0){f=e+16|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));return}i=b+84|0;k=i;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;i=i+4|0;i=d[i>>0]|d[i+1>>0]<<8|d[i+2>>0]<<16|d[i+3>>0]<<24;f=e;a[f>>0]=k;a[f+1>>0]=k>>8;a[f+2>>0]=k>>16;a[f+3>>0]=k>>24;e=e+4|0;a[e>>0]=i;a[e+1>>0]=i>>8;a[e+2>>0]=i>>16;a[e+3>>0]=i>>24;e=c[j>>2]|0;i=b+80|0;f=c[i>>2]|0;if(!(a[b+65>>0]|0)){k=e+f+(c[h>>2]|0)|0;e=(c[h+4>>2]|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(c[g>>2]|0)|0;e=(c[g+4>>2]|0)+e+f|0;g=g+8|0}while(g>>>0>>0)}else{k=e+f+(dw(c[h>>2]|0)|0)|0;e=(dw(c[h+4>>2]|0)|0)+f+k|0;c[j>>2]=k;c[i>>2]=e;b=g+(c[b+36>>2]|0)|0;f=k;do{f=f+e+(dw(c[g>>2]|0)|0)|0;e=(dw(c[g+4>>2]|0)|0)+e+f|0;g=g+8|0}while(g>>>0>>0)}c[j>>2]=f;c[i>>2]=e;a[h+16>>0]=f>>>24;a[h+17>>0]=f>>>16;a[h+18>>0]=f>>>8;a[h+19>>0]=f;k=c[i>>2]|0;a[h+20>>0]=k>>>24;a[h+21>>0]=k>>>16;a[h+22>>0]=k>>>8;a[h+23>>0]=k;return}function nf(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;do{e=a+28|0;switch(c[e>>2]|0){case 6:case 0:case 5:{if((c[a+16>>2]|0)>>>0>b>>>0?(f=_b(a,b,d,1)|0,f|0):0)c[e>>2]=f;break}default:{}}a=c[a+44>>2]|0}while((a|0)!=0);return}function of(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;k=c[b+208>>2]|0;j=b+152|0;m=c[j>>2]|0;l=b+148|0;i=c[l>>2]|0;m=m>>>0>i>>>0?i:m;h=c[b+96>>2]|0;if((h|0)>0){e=c[b+92>>2]|0;f=b+72|0;d=0;do{g=e+(d*48|0)+8|0;n=g;if((c[n>>2]|0)==0&(c[n+4>>2]|0)==0){p=f;o=c[p+4>>2]|0;n=g;c[n>>2]=c[p>>2];c[n+4>>2]=o}d=d+1|0}while((d|0)<(h|0));g=f}else g=b+72|0;e=g;d=c[e>>2]|0;e=c[e+4>>2]|0;if((d|0)==0&(e|0)==0){d=0;e=0}else{d=Sv(d|0,e|0,-1,-1)|0;d=Wv(d|0,L()|0,i|0,0)|0;d=Sv(d|0,L()|0,1,0)|0;d=Yv(d|0,L()|0,i|0,0)|0;e=L()|0}p=g;c[p>>2]=d;c[p+4>>2]=e;p=b+80|0;c[p>>2]=d;c[p+4>>2]=e;if(((a[b+7>>0]|0)==0?(a[b+5>>0]|0)!=4:0)?(p=c[b+60>>2]|0,((Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0)&512|0)==0):0){d=k;e=d+12|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(e|0))}else{p=k;o=p;a[o>>0]=-117058087;a[o+1>>0]=-117058087>>8;a[o+2>>0]=-117058087>>16;a[o+3>>0]=-117058087>>24;p=p+4|0;a[p>>0]=-681336544;a[p+1>>0]=-681336544>>8;a[p+2>>0]=-681336544>>16;a[p+3>>0]=-681336544>>24;p=k+8|0;a[p>>0]=-1;a[p+1>>0]=-1>>8;a[p+2>>0]=-1>>16;a[p+3>>0]=-1>>24}f=b+48|0;Fb(4,f);f=c[f>>2]|0;a[k+12>>0]=f>>>24;a[k+13>>0]=f>>>16;a[k+14>>0]=f>>>8;a[k+15>>0]=f;f=c[b+28>>2]|0;a[k+16>>0]=f>>>24;a[k+17>>0]=f>>>16;a[k+18>>0]=f>>>8;a[k+19>>0]=f;f=c[l>>2]|0;a[k+20>>0]=f>>>24;a[k+21>>0]=f>>>16;a[k+22>>0]=f>>>8;a[k+23>>0]=f;f=c[j>>2]|0;a[k+24>>0]=f>>>24;a[k+25>>0]=f>>>16;a[k+26>>0]=f>>>8;a[k+27>>0]=f;gw(k+28|0,0,m+-28|0)|0;f=b+64|0;e=0;while(1){if(e>>>0>=(c[l>>2]|0)>>>0){d=0;e=17;break}n=c[f>>2]|0;d=g;d=_a[c[(c[n>>2]|0)+12>>2]&127](n,k,m,c[d>>2]|0,c[d+4>>2]|0)|0;n=g;n=Sv(c[n>>2]|0,c[n+4>>2]|0,m|0,0)|0;o=L()|0;p=g;c[p>>2]=n;c[p+4>>2]=o;if(!d)e=e+m|0;else{e=17;break}}if((e|0)==17)return d|0;return 0}function pf(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;c[d>>2]=0;return c[a+40>>2]|0}function qf(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=Ra;Ra=Ra+32|0;l=q+16|0;h=q;if(!e){c[h>>2]=32306;c[h+4>>2]=56058;c[h+8>>2]=31517;Db(11,32001,h);d=11;Ra=q;return d|0}p=d+212|0;h=c[p>>2]|0;h=Ya[c[29436>>2]&127](c[h+44>>2]|0,e,a[h+33>>0]&3)|0;a:do if(!h){j=c[p>>2]|0;if((a[j+33>>0]|0)!=2){k=j+44|0;n=Wa[c[29432>>2]&127](c[k>>2]|0)|0;b:do if((n|0)>(c[j+20>>2]|0)){i=j+8|0;h=c[i>>2]|0;c:do if(!h)m=12;else{while(1){if((b[h+30>>1]|0)==0?(b[h+28>>1]&8)==0:0)break;h=c[h+36>>2]|0;if(!h){m=12;break c}}c[i>>2]=h}while(0);d:do if((m|0)==12){c[i>>2]=0;h=c[j+4>>2]|0;if(!h)break b;while(1){if(!(b[h+30>>1]|0))break d;h=c[h+36>>2]|0;if(!h)break b}}while(0);h=Xa[c[j+36>>2]&255](c[j+40>>2]|0,h)|0;switch(h|0){case 0:case 5:break;default:break a}}while(0);h=Ya[c[29436>>2]&127](c[k>>2]|0,e,2)|0;if(h)m=18;else h=7}else h=7}else m=18;while(0);do if((m|0)==18){i=c[p>>2]|0;j=c[h+4>>2]|0;if(!(c[j>>2]|0))n=sf(i,e,h)|0;else{n=i+12|0;c[n>>2]=(c[n>>2]|0)+1;n=j+30|0;b[n>>1]=(b[n>>1]|0)+1<<16>>16;n=j}c[f>>2]=n;h=g&1;i=n+20|0;j=(h|0)!=0;if(!(j|(c[i>>2]|0)==0)){d=d+184|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=q;return d|0}do if((e|0)>=0?(o=d+152|0,((1073741824/(c[o>>2]|0)|0)+1|0)!=(e|0)):0){c[i>>2]=d;if(c[c[d+60>>2]>>2]|0?((h|0)==0?(c[d+24>>2]|0)>>>0>=e>>>0:0):0){h=d+188|0;c[h>>2]=(c[h>>2]|0)+1;h=rf(n)|0;if(!h)h=0;else break;Ra=q;return h|0}if((c[d+156>>2]|0)>>>0>>0)h=13;else{if(j){if((c[d+28>>2]|0)>>>0>=e>>>0)df(c[d+56>>2]|0,e)|0;g=d+96|0;h=c[g>>2]|0;if((h|0)>0){k=d+92|0;j=0;do{i=c[k>>2]|0;if((c[i+(j*48|0)+20>>2]|0)>>>0>=e>>>0){df(c[i+(j*48|0)+16>>2]|0,e)|0;h=c[g>>2]|0}j=j+1|0}while((j|0)<(h|0))}}gw(c[n+4>>2]|0,0,c[o>>2]|0)|0;d=0;Ra=q;return d|0}}else m=38;while(0);if((m|0)==38){c[l>>2]=32306;c[l+4>>2]=56090;c[l+8>>2]=31517;Db(11,32001,l);if(!n){h=11;break}else h=11}m=c[n+12>>2]|0;do if(b[n+28>>1]&2){i=m+8|0;j=n+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(n|0))c[i>>2]=k;g=c[n+32>>2]|0;l=(g|0)==0;if(l){c[m+4>>2]=k;i=k}else{c[g+36>>2]=k;i=c[j>>2]|0}if(i|0){c[i+32>>2]=g;break}c[m>>2]=g;if(l)a[m+33>>0]=2}while(0);o=m+12|0;c[o>>2]=(c[o>>2]|0)+-1;cb[c[29440>>2]&255](c[m+44>>2]|0,c[n>>2]|0,1)}while(0);if(!(c[(c[p>>2]|0)+12>>2]|0)){switch(a[d+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[d+4>>0]|0))uf(d,0,0)|0;break}default:tf(d)|0}vf(d)}c[f>>2]=0;d=h;Ra=q;return d|0}function rf(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=Ra;Ra=Ra+16|0;f=k;i=c[b+20>>2]|0;c[f>>2]=0;g=i+216|0;d=c[g>>2]|0;h=b+24|0;if(d){d=ef(d,c[h>>2]|0,f)|0;if(d|0){b=d;Ra=k;return b|0}d=c[f>>2]|0;if(d){l=c[g>>2]|0;f=c[i+152>>2]|0;m=c[b+4>>2]|0;n=c[l+8>>2]|0;l=e[l+66>>1]|0;l=l<<16&65536|l&65024;g=Yv(l|24|0,0,d+-1|0,0)|0;g=Sv(g|0,L()|0,56,0)|0;d=L()|0;d=_a[c[(c[n>>2]|0)+8>>2]&127](n,m,(l|0)<(f|0)?l:f,g,d)|0}else j=5}else j=5;if((j|0)==5){m=c[i+152>>2]|0;n=Yv((c[h>>2]|0)+-1|0,0,m|0,((m|0)<0)<<31>>31|0)|0;d=L()|0;l=c[i+60>>2]|0;d=_a[c[(c[l>>2]|0)+8>>2]&127](l,c[b+4>>2]|0,m,n,d)|0;d=(d|0)==522?0:d}if((c[h>>2]|0)!=1){n=d;Ra=k;return n|0}if(!d){g=i+104|0;d=(c[b+4>>2]|0)+24|0;f=g+16|0;do{a[g>>0]=a[d>>0]|0;g=g+1|0;d=d+1|0}while((g|0)<(f|0));n=0;Ra=k;return n|0}else{n=i+104|0;c[n>>2]=-1;c[n+4>>2]=-1;c[n+8>>2]=-1;c[n+12>>2]=-1;n=d;Ra=k;return n|0}return 0}function sf(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;g=f+4|0;h=c[g>>2]|0;do{i=h+16|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[h>>2]=f;c[h+4>>2]=c[f>>2];i=h+40|0;c[h+8>>2]=i;j=i;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;i=i+4|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;c[h+12>>2]=d;c[h+24>>2]=e;b[h+28>>1]=1;h=c[g>>2]|0}while(!(c[h>>2]|0));j=d+12|0;c[j>>2]=(c[j>>2]|0)+1;j=h+30|0;b[j>>1]=(b[j>>1]|0)+1<<16>>16;return h|0}function tf(b){b=b|0;var e=0,f=0,g=0;g=b+16|0;f=a[g>>0]|0;if(f<<24>>24==6){g=c[b+40>>2]|0;return g|0}if((f&255)<2){g=0;return g|0}do if(!(c[b+216>>2]|0)){if(!(f<<24>>24==2?1:(c[c[b+64>>2]>>2]|0)==0)){e=xf(b,0)|0;break}e=uf(b,0,0)|0;if((f&255)>2&(a[b+15>>0]|0)==0){c[b+40>>2]=4;a[g>>0]=6;c[b+204>>2]=75;g=e;return g|0}}else{e=wf(b,2,-1)|0;f=uf(b,d[b+19>>0]|0,0)|0;e=(e|0)==0?f:e}while(0);switch((e&255)<<24>>24){case 10:case 13:break;default:{g=e;return g|0}}c[b+40>>2]=e;a[g>>0]=6;c[b+204>>2]=(e|0)==0?74:75;g=e;return g|0}function uf(e,f,g){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,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+16|0;w=B;A=e+16|0;if((d[A>>0]|0)<2?(d[e+17>>0]|0)<2:0){A=0;Ra=B;return A|0}l=e+96|0;if((c[l>>2]|0)>0){k=e+92|0;i=0;do{yf(c[(c[k>>2]|0)+(i*48|0)+16>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0))}z=e+4|0;k=c[e+68>>2]|0;i=c[k>>2]|0;if(!(a[z>>0]|0)){if(i|0)y=9}else if((i|0)==29896){i=29896;y=9}if((y|0)==9){Wa[c[i+4>>2]&127](k)|0;c[k>>2]=0}i=e+92|0;k=c[i>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[i>>2]=0;c[l>>2]=0;c[e+52>>2]=0;n=e+64|0;o=c[n>>2]|0;m=c[o>>2]|0;a:do if(!m)i=0;else{if((m|0)==29896){l=o+16|0;i=c[l>>2]|0;if(i|0)do{k=i;i=c[i>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((i|0)!=0);c[l>>2]=0;c[o>>2]=0;i=0;break}i=a[e+5>>0]|0;switch(i<<24>>24){case 3:{k=e+72|0;s=k;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){i=Ya[c[m+16>>2]&127](o,0,0)|0;if(!i)if((a[e+8>>0]|0)!=0?(p=c[n>>2]|0,q=a[e+10>>0]|0,q<<24>>24!=0):0)i=Xa[c[(c[p>>2]|0)+20>>2]&255](p,q&255)|0;else i=0}else i=0;s=k;c[s>>2]=0;c[s+4>>2]=0;break a}case 1:break;default:if(i<<24>>24==5|(a[z>>0]|0)==0){s=(a[e+12>>0]|0)==0;Wa[c[m+4>>2]&127](o)|0;c[o>>2]=0;if(!s){i=0;break a}i=c[e>>2]|0;i=Ya[c[i+28>>2]&127](i,c[e+172>>2]|0,d[e+9>>0]|0)|0;break a}}if(!f)i=(a[e+12>>0]|0)!=0&1;else i=1;f=e+72|0;s=f;if(!((c[s>>2]|0)==0&(c[s+4>>2]|0)==0)){l=e+160|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((i|0)!=0|(k|0)==0&(l|0)==0)i=Ya[c[m+16>>2]&127](o,0,0)|0;else i=_a[c[m+12>>2]&127](o,59008,28,0,0)|0;if(!i){if(!(a[e+7>>0]|0)){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+20>>2]&255](i,(a[e+10>>0]|16)&255)|0}else i=0;if(((l|0)>0|(l|0)==0&k>>>0>0)&(i|0)==0){i=c[n>>2]|0;i=Xa[c[(c[i>>2]|0)+24>>2]&255](i,w)|0;s=w;r=c[s+4>>2]|0;if((i|0)==0&((r|0)>(l|0)|((r|0)==(l|0)?(c[s>>2]|0)>>>0>k>>>0:0))){i=c[n>>2]|0;i=Ya[c[(c[i>>2]|0)+16>>2]&127](i,k,l)|0}}}}else i=0;s=f;c[s>>2]=0;c[s+4>>2]=0}while(0);s=e+56|0;yf(c[s>>2]|0);c[s>>2]=0;c[e+44>>2]=0;s=(i|0)==0;if(s){do if((a[e+15>>0]|0)==0?(a[e+12>>0]|0)!=0:0){if(g|0?c[c[e+60>>2]>>2]|0:0){l=c[e+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){q=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;r=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(q|0,r|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}l=c[l>>2]|0;if(!l){l=0;f=0}else{f=0;do{f=f+1|0;l=c[l+32>>2]|0}while((l|0)!=0);l=Yv(f|0,0,100,0)|0;f=L()|0}if(k|0?(r=Wv(l|0,f|0,k|0,((k|0)<0)<<31>>31|0)|0,L()|0,(r|0)>=25):0){y=60;break}}l=c[e+212>>2]|0;k=c[l>>2]|0;if(k|0)do{r=k+28|0;b[r>>1]=b[r>>1]&-13;k=c[k+32>>2]|0}while((k|0)!=0);c[l+8>>2]=c[l+4>>2]}else y=60;while(0);if((y|0)==60){r=e+212|0;l=c[r>>2]|0;k=c[l>>2]|0;if(k){do{q=c[k+12>>2]|0;f=q+8|0;m=k+36|0;n=c[m>>2]|0;if((c[f>>2]|0)==(k|0))c[f>>2]=n;o=c[k+32>>2]|0;p=(o|0)==0;if(p){c[q+4>>2]=n;f=n}else{c[o+36>>2]=n;f=c[m>>2]|0}if(!f){c[q>>2]=o;if(p)a[q+33>>0]=2}else c[f+32>>2]=o;p=k+28|0;b[p>>1]=b[p>>1]&-16|1;if((b[k+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[k>>2]|0,0);k=c[l>>2]|0}while((k|0)!=0);l=c[r>>2]|0}}k=c[e+24>>2]|0;r=l+44|0;if(c[r>>2]|0){f=c[l>>2]|0;if(f|0)do{p=f;f=c[f+32>>2]|0;if((c[p+24>>2]|0)>>>0>k>>>0){q=c[p+12>>2]|0;n=q+8|0;o=p+36|0;m=c[o>>2]|0;if((c[n>>2]|0)==(p|0))c[n>>2]=m;n=(f|0)==0;if(n)c[q+4>>2]=m;else{c[f+36>>2]=m;m=c[o>>2]|0}if(!m){c[q>>2]=f;if(n)a[q+33>>0]=2}else c[m+32>>2]=f;o=p+28|0;b[o>>1]=b[o>>1]&-16|1;if((b[p+30>>1]|0)==0?a[q+32>>0]|0:0)cb[c[29440>>2]&255](c[q+44>>2]|0,c[p>>2]|0,0)}}while((f|0)!=0);if(!k)if((c[l+12>>2]|0)!=0?(t=Ya[c[29436>>2]&127](c[r>>2]|0,1,0)|0,(t|0)!=0):0){gw(c[t>>2]|0,0,c[l+24>>2]|0)|0;k=1}else k=0;bb[c[29448>>2]&127](c[r>>2]|0,k+1|0)}}q=e+216|0;k=c[q>>2]|0;if(!k)if((g|0)!=0&s){n=e+32|0;o=c[e+24>>2]|0;if(((c[n>>2]|0)>>>0>o>>>0?(x=e+60|0,u=c[x>>2]|0,v=c[u>>2]|0,(v|0)!=0):0)?((a[A>>0]|0)+-1&255)>2:0){p=c[e+152>>2]|0;i=Xa[c[v+24>>2]&255](u,w)|0;l=((p|0)<0)<<31>>31;f=Yv(p|0,l|0,o|0,0)|0;m=L()|0;do if(!i){k=w;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)==(f|0)&(k|0)==(m|0))h=0;else{if(!((k|0)>(m|0)|(k|0)==(m|0)&i>>>0>f>>>0)){w=Sv(i|0,k|0,p|0,l|0)|0;v=L()|0;if(!((v|0)>(m|0)|(v|0)==(m|0)&w>>>0>f>>>0)){w=c[e+208>>2]|0;gw(w|0,0,p|0)|0;x=c[x>>2]|0;y=Tv(f|0,m|0,p|0,l|0)|0;h=L()|0;h=_a[c[(c[x>>2]|0)+12>>2]&127](x,w,p,y,h)|0;y=117}}else{h=c[x>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,f,m)|0;y=117}if((y|0)==117?h|0:0)break;c[n>>2]=o;h=0}}else h=i;while(0)}else h=0}else h=i;else{h=k+44|0;if(!(a[h>>0]|0))h=i;else{if(!(a[k+43>>0]|0)){y=c[k+4>>2]|0;Za[c[(c[y>>2]|0)+56>>2]&127](y,0,1,9)|0}a[h>>0]=0;c[k+104>>2]=0;a[k+47>>0]=0;h=i}}do if((g|0)!=0&(h|0)==0){h=c[e+60>>2]|0;i=c[h>>2]|0;if(i|0?(j=Ya[c[i+40>>2]&127](h,22,0)|0,(j|0)!=12):0)break;j=0}else j=h;while(0);b:do if(!(a[z>>0]|0)){h=c[q>>2]|0;do if(h|0){i=h+43|0;if(!(a[i>>0]|0)){h=0;break b}a[i>>0]=0;z=c[h+4>>2]|0;if(!(Za[c[(c[z>>2]|0)+56>>2]&127](z,(b[h+40>>1]|0)+3|0,1,6)|0))if(!(a[i>>0]|0))break;else{h=0;break b}else{a[i>>0]=1;h=0;break b}}while(0);h=c[e+60>>2]|0;i=c[h>>2]|0;if(i){if(!(a[e+13>>0]|0))h=Xa[c[i+32>>2]&255](h,1)|0;else h=0;i=e+17|0;if((a[i>>0]|0)!=5)a[i>>0]=1}else h=0;a[e+18>>0]=0}else h=0;while(0);a[A>>0]=1;a[e+19>>0]=0;A=(j|0)==0?h:j;Ra=B;return A|0}function vf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;g=d+56|0;yf(c[g>>2]|0);c[g>>2]=0;g=d+96|0;if((c[g>>2]|0)>0){f=d+92|0;e=0;do{yf(c[(c[f>>2]|0)+(e*48|0)+16>>2]|0);e=e+1|0}while((e|0)<(c[g>>2]|0))}h=d+4|0;f=c[d+68>>2]|0;e=c[f>>2]|0;if(!(a[h>>0]|0)){if(e|0)k=7}else if((e|0)==29896){e=29896;k=7}if((k|0)==7){Wa[c[e+4>>2]&127](f)|0;c[f>>2]=0}e=d+92|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[g>>2]=0;c[d+52>>2]=0;g=c[d+216>>2]|0;if(!g){if(!(a[h>>0]|0)){e=d+60|0;f=c[e>>2]|0;g=c[f>>2]|0;if(!(((g|0)!=0?((Wa[c[g+48>>2]&127](f)|0)&2048|0)!=0:0)?(a[d+5>>0]&5)==1:0))k=25;if((k|0)==25?(i=c[d+64>>2]|0,j=c[i>>2]|0,j|0):0){Wa[c[j+4>>2]&127](i)|0;c[i>>2]=0}e=c[e>>2]|0;f=c[e>>2]|0;if(f|0){if(!(a[d+13>>0]|0))f=Xa[c[f+32>>2]&255](e,0)|0;else f=0;e=d+17|0;if((a[e>>0]|0)!=5)a[e>>0]=0;if(f|0?(a[d+16>>0]|0)==6:0)a[e>>0]=5}a[d+18>>0]=0;k=36}}else{e=g+44|0;if(a[e>>0]|0){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,0,1,9)|0}a[e>>0]=0;c[g+104>>2]=0;a[g+47>>0]=0}e=g+40|0;f=b[e>>1]|0;if(f<<16>>16>-1){if(!(a[g+43>>0]|0)){l=c[g+4>>2]|0;Za[c[(c[l>>2]|0)+56>>2]&127](l,(f<<16>>16)+3|0,1,5)|0}b[e>>1]=-1;k=36}else k=36}if((k|0)==36)a[d+16>>0]=0;f=d+40|0;if(!(c[f>>2]|0)){l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}if(!(a[d+12>>0]|0)){Ff(d);a[d+18>>0]=0;e=0}else e=(c[c[d+64>>2]>>2]|0)==0&1;a[d+16>>0]=e;c[f>>2]=0;c[d+204>>2]=74;l=d+72|0;d=d+19|0;a[d>>0]=0;c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;c[l+12>>2]=0;return}function wf(d,f,g){d=d|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,x=0,y=0;y=Ra;Ra=Ra+32|0;x=y+8|0;w=y;h=c[d+40>>2]|0;if(h|0){d=h;Ra=y;return d|0}k=d+96|0;h=c[k>>2]|0;if((h|0)<=(g|0)){d=0;Ra=y;return d|0}j=(f|0)==1;g=((j^1)&1)+g|0;if((g|0)<(h|0)){f=d+92|0;h=g;do{yf(c[(c[f>>2]|0)+(h*48|0)+16>>2]|0);h=h+1|0}while((h|0)<(c[k>>2]|0))}c[k>>2]=g;if(j){if(g|0){d=0;Ra=y;return d|0}g=c[d+68>>2]|0;h=c[g>>2]|0;if(!h){d=0;Ra=y;return d|0}if((h|0)==29896){i=g+16|0;h=c[i>>2]|0;if(h|0)do{f=h;h=c[h>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((h|0)!=0);c[i>>2]=0;c[g+12>>2]=0;c[g+32>>2]=0;x=g+24|0;c[x>>2]=0;c[x+4>>2]=0;c[g+48>>2]=0;x=g+40|0;c[x>>2]=0;c[x+4>>2]=0}c[d+52>>2]=0;d=0;Ra=y;return d|0}s=d+216|0;if((c[s>>2]|0)==0?(c[c[d+64>>2]>>2]|0)==0:0){d=0;Ra=y;return d|0}if((g|0)!=0?(l=g+-1|0,u=c[d+92>>2]|0,m=u+(l*48|0)|0,l=u+(l*48|0)+20|0,(m|0)!=0):0){j=c[l>>2]|0;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](512)|0;if(!h){d=7;Ra=y;return d|0}}else{h=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){u=c[14978]|0;r=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=u>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){d=7;Ra=y;return d|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}gw(h+4|0,0,508)|0;c[h>>2]=j;u=h;h=l;g=d+28|0;r=m;q=1}else{g=d+28|0;u=0;h=g;r=0;q=0}f=d+24|0;c[f>>2]=c[h>>2];a[d+18>>0]=a[d+12>>0]|0;a:do if(q){l=d+72|0;f=l;i=c[f>>2]|0;f=c[f+4>>2]|0;if(!(c[s>>2]|0)){j=r+8|0;g=c[j>>2]|0;j=c[j+4>>2]|0;h=(g|0)==0&(j|0)==0;g=h?i:g;j=h?f:j;h=r;k=c[h>>2]|0;h=c[h+4>>2]|0;p=l;c[p>>2]=k;c[p+4>>2]=h;if((h|0)<(j|0)|(h|0)==(j|0)&k>>>0>>0)while(1){h=zf(d,l,u,1,1)|0;if(h|0){p=i;o=f;break a}h=l;k=c[h>>2]|0;h=c[h+4>>2]|0;if(!((h|0)<(j|0)|(h|0)==(j|0)&k>>>0>>0)){p=i;t=71;break}}else{p=i;t=71}}else{h=l;t=70}}else{o=c[s>>2]|0;if(!o){h=d+72|0;f=h;i=c[f>>2]|0;f=c[f+4>>2]|0;t=70;break}c[f>>2]=c[g>>2];if(a[o+44>>0]|0){n=o+68|0;l=c[n>>2]|0;m=o+32|0;j=c[m>>2]|0;h=o+52|0;f=c[j>>2]|0;g=h+48|0;do{a[h>>0]=a[f>>0]|0;h=h+1|0;f=f+1|0}while((h|0)<(g|0));f=c[n>>2]|0;h=f+1|0;if(h>>>0>l>>>0)h=0;else{k=h;g=j;while(1){h=f+34|0;f=h>>>12;if(!f)h=(c[g>>2]|0)+(h<<2)|0;else h=(c[g+(f<<2)>>2]|0)+((h&4095)<<2)|0;h=Bf(d,c[h>>2]|0)|0;f=k+1|0;if(f>>>0>l>>>0|(h|0)!=0)break;w=k;k=f;g=c[m>>2]|0;f=w}f=c[n>>2]|0}if((l|0)!=(f|0))do if(f|0){f=f+33|0;g=f>>>12;k=x+4|0;if(!((c[o+24>>2]|0)>(g|0)?(i=c[(c[m>>2]|0)+(g<<2)>>2]|0,c[k>>2]=i,(i|0)!=0):0)){if(kf(o,g,k)|0)break;i=c[k>>2]|0}l=i+16384|0;c[x>>2]=l;if(!g){j=i+136|0;c[k>>2]=j;f=0}else{f=(f&-4096)+-34|0;j=i}c[x+8>>2]=f;c[k>>2]=j+-4;i=(c[n>>2]|0)-f|0;f=0;do{g=l+(f<<1)|0;if((i|0)<(e[g>>1]|0))b[g>>1]=0;f=f+1|0}while((f|0)!=8192);x=j+(i<<2)|0;gw(x|0,0,l-x|0)|0}while(0)}else h=0;f=Cf(c[d+212>>2]|0)|0;if(!((h|0)==0&(f|0)!=0)){d=h;Ra=y;return d|0}do{h=f;f=c[f+16>>2]|0;h=Bf(d,c[h+24>>2]|0)|0}while((f|0)!=0&(h|0)==0);Ra=y;return h|0}while(0);if((t|0)==70){l=h;c[l>>2]=0;c[l+4>>2]=0;l=h;h=0;k=0;p=i;t=71}b:do if((t|0)==71){m=d+80|0;n=d+148|0;o=d+152|0;if((h|0)<(f|0)|(h|0)==(f|0)&k>>>0

      >>0)while(1){c[x>>2]=0;h=Af(d,0,p,f,x,w)|0;i=c[x>>2]|0;if(!i){i=m;i=Sv(c[i>>2]|0,c[i+4>>2]|0,c[n>>2]|0,0)|0;g=L()|0;t=l;if((i|0)==(c[t>>2]|0)?(g|0)==(c[t+4>>2]|0):0){k=Tv(p|0,f|0,i|0,g|0)|0;t=L()|0;i=(c[o>>2]|0)+8|0;i=Wv(k|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0;c[x>>2]=i;t=76}else t=81}else t=76;c:do if((t|0)==76){t=0;if((h|0)==0&(i|0)!=0){j=0;while(1){g=l;h=c[g>>2]|0;g=c[g+4>>2]|0;if(!((g|0)<(f|0)|(g|0)==(f|0)&h>>>0

      >>0))break;h=zf(d,l,u,1,1)|0;j=j+1|0;if(!(j>>>0>>0&(h|0)==0)){t=81;break c}}i=g}else t=81}while(0);if((t|0)==81){t=0;if(h|0){o=f;break b}h=l;i=c[h+4>>2]|0;h=c[h>>2]|0}if(!((i|0)<(f|0)|(i|0)==(f|0)&h>>>0

      >>0)){h=0;o=f;break}}else{h=0;o=f}}while(0);if(q){n=r+24|0;f=c[n>>2]|0;m=(c[d+152>>2]|0)+4|0;m=Yv(m|0,((m|0)<0)<<31>>31|0,f|0,0)|0;q=L()|0;k=w;c[k>>2]=m;c[k+4>>2]=q;k=c[s>>2]|0;if(!k){if(!h)t=105}else{h=r+28|0;i=r+40|0;g=k+112|0;if((c[i>>2]|0)==(c[g>>2]|0))h=c[h>>2]|0;else{c[h>>2]=0;c[i>>2]=c[g>>2];h=0}m=k+68|0;if(h>>>0<(c[m>>2]|0)>>>0){c[m>>2]=h;c[k+76>>2]=c[r+32>>2];c[k+80>>2]=c[r+36>>2];do if(h|0){h=h+33|0;i=h>>>12;j=x+4|0;if((c[k+24>>2]|0)>(i|0)?(v=c[(c[k+32>>2]|0)+(i<<2)>>2]|0,c[j>>2]=v,(v|0)!=0):0)f=v;else{if(kf(k,i,j)|0)break;f=c[j>>2]|0}k=f+16384|0;c[x>>2]=k;if(!i){g=f+136|0;c[j>>2]=g;h=0}else{h=(h&-4096)+-34|0;g=f}c[x+8>>2]=h;c[j>>2]=g+-4;f=(c[m>>2]|0)-h|0;h=0;do{i=k+(h<<1)|0;if((f|0)<(e[i>>1]|0))b[i>>1]=0;h=h+1|0}while((h|0)!=8192);x=g+(f<<2)|0;gw(x|0,0,k-x|0)|0}while(0);f=c[n>>2]|0;t=105}else t=105}d:do if((t|0)==105){i=d+52|0;while(1){if(f>>>0>=(c[i>>2]|0)>>>0){h=0;break d}h=zf(d,w,u,0,1)|0;if(!h)f=f+1|0;else break}}while(0)}yf(u);if(h|0){d=h;Ra=y;return d|0}d=l;c[d>>2]=p;c[d+4>>2]=o;d=0;Ra=y;return d|0}function xf(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,M=0;M=Ra;Ra=Ra+48|0;K=M+16|0;H=M+8|0;I=M+40|0;x=M;y=M+36|0;z=M+32|0;G=M+28|0;A=M+24|0;h=c[b>>2]|0;c[z>>2]=0;c[G>>2]=1;w=b+152|0;c[A>>2]=c[w>>2];C=b+64|0;g=c[C>>2]|0;g=Xa[c[(c[g>>2]|0)+24>>2]&255](g,x)|0;a:do if(!g){B=b+208|0;f=c[B>>2]|0;g=Ef(c[C>>2]|0,f,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(!(a[f>>0]|0))f=0;else f=Za[c[h+32>>2]&127](h,f,0,G)|0;b:do if((f|0)==0&(c[G>>2]|0)!=0){p=b+72|0;q=p;c[q>>2]=0;c[q+4>>2]=0;q=b+148|0;r=b+80|0;s=b+60|0;t=b+24|0;u=b+16|0;v=b+32|0;f=0;h=d;c:while(1){do{g=x;g=Af(b,d,c[g>>2]|0,c[g+4>>2]|0,y,z)|0;switch(g|0){case 101:{h=f;break b}case 0:break;default:{e=g;J=37;break b}}g=c[y>>2]|0;if((g|0)==-1){n=x;n=Tv(c[n>>2]|0,c[n+4>>2]|0,c[q>>2]|0,0)|0;o=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(n|0,o|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g}if(!(g|d)){j=r;l=c[q>>2]|0;j=Sv(c[j>>2]|0,c[j+4>>2]|0,l|0,0)|0;i=L()|0;m=p;k=c[m>>2]|0;m=c[m+4>>2]|0;if((j|0)==(k|0)&(i|0)==(m|0)){o=x;o=Tv(c[o>>2]|0,c[o+4>>2]|0,j|0,i|0)|0;k=L()|0;g=(c[w>>2]|0)+8|0;g=Wv(o|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;L()|0;c[y>>2]=g;k=j;j=0}else{i=m;j=0}}else{i=p;k=c[i>>2]|0;l=c[q>>2]|0;i=c[i+4>>2]|0;j=0}if((k|0)==(l|0)&(i|0)==(j|0)){n=c[z>>2]|0;i=c[s>>2]|0;j=c[i>>2]|0;if(j|0?((a[u>>0]|0)+-1&255)>2:0){o=c[w>>2]|0;i=Xa[c[j+24>>2]&255](i,H)|0;k=((o|0)<0)<<31>>31;l=Yv(o|0,k|0,n|0,0)|0;m=L()|0;if(i|0){e=i;break c}j=H;i=c[j>>2]|0;j=c[j+4>>2]|0;if(!((i|0)==(l|0)&(j|0)==(m|0))){do if((j|0)>(m|0)|(j|0)==(m|0)&i>>>0>l>>>0){e=c[s>>2]|0;e=Ya[c[(c[e>>2]|0)+16>>2]&127](e,l,m)|0;J=24}else{j=Sv(i|0,j|0,o|0,k|0)|0;i=L()|0;if((i|0)>(m|0)|(i|0)==(m|0)&j>>>0>l>>>0)break;j=c[B>>2]|0;gw(j|0,0,o|0)|0;i=c[s>>2]|0;J=Tv(l|0,m|0,o|0,k|0)|0;e=L()|0;e=_a[c[(c[i>>2]|0)+12>>2]&127](i,j,o,J,e)|0;J=24}while(0);if((J|0)==24?(J=0,e|0):0)break c;c[v>>2]=n}}c[t>>2]=n}}while(!(g|0));i=0;d:while(1){if(h|0)Ff(b);h=zf(b,p,0,1,0)|0;switch(h|0){case 522:{h=f;break b}case 101:{J=35;break d}case 0:break;default:{e=h;J=37;break b}}f=f+1|0;i=i+1|0;if(i>>>0>=g>>>0)break;else h=0}if((J|0)==35){J=0;m=x;n=c[m+4>>2]|0;o=p;c[o>>2]=c[m>>2];c[o+4>>2]=n}h=0}J=38;break a}else{e=f;f=0;J=37}while(0);if((J|0)==37)if(!e)h=f;else{J=38;break}g=Se(b,A,-1)|0;e=b+12|0;a[b+18>>0]=a[e>>0]|0;if(!g){s=c[B>>2]|0;g=Ef(c[C>>2]|0,s,(c[(c[b>>2]|0)+8>>2]|0)+1|0)|0;if(!g){if(((a[b+16>>0]|0)+-1&255)>2){i=b+60|0;f=c[i>>2]|0;g=c[f>>2]|0;if(g|0){g=Ya[c[g+40>>2]&127](f,21,0)|0;switch(g|0){case 0:case 12:break;default:break a}}if(((a[b+7>>0]|0)==0?(D=c[i>>2]|0,E=a[b+10>>0]|0,E<<24>>24):0)?(F=Xa[c[(c[D>>2]|0)+20>>2]&255](D,E&255)|0,F|0):0){g=F;break}}g=uf(b,(a[s>>0]|0)!=0&1,0)|0;if(!g)if((a[s>>0]|0)!=0&(c[G>>2]|0)!=0){r=c[b>>2]|0;j=r+4|0;k=c[j>>2]<<1;G=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;F=L()|0;do if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](k)|0;if(!f){f=7;break}else q=f}else{f=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){G=c[14978]|0;F=Tv(g|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){f=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;q=g}else q=g}gw(q|0,0,k|0)|0;o=q+(c[j>>2]|0)|0;p=r+24|0;f=_a[c[p>>2]&127](r,s,q,16385,0)|0;e:do if(!f){f=Xa[c[(c[q>>2]|0)+24>>2]&255](q,H)|0;if(!f){n=(c[r+8>>2]|0)+1|0;G=H;G=Sv(c[G>>2]|0,c[G+4>>2]|0,n|0,((n|0)<0)<<31>>31|0)|0;F=L()|0;f=Sv(G|0,F|0,1,0)|0;L()|0;if(!(F>>>0>0|(F|0)==0&G>>>0>2147483390)){do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](f)|0;if(!f){f=7;break e}else g=f}else{i=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0>>0)c[14985]=f;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){G=c[14978]|0;F=Tv(f|0,g|0,i|0,((i|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=G>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){f=7;break e}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);f=c[H>>2]|0;m=g+(f+1)|0;f=_a[c[(c[q>>2]|0)+8>>2]&127](q,g,f,0,0)|0;if(!f){a[g+(c[H>>2]|0)>>0]=0;k=g;G=H;F=c[G+4>>2]|0;f:do if((F|0)>0|(F|0)==0&(c[G>>2]|0)>>>0>0){l=r+32|0;j=g;g:while(1){f=Za[c[l>>2]&127](r,j,0,I)|0;if(f|0)break;do if(c[I>>2]|0){f=_a[c[p>>2]&127](r,j,o,2049,0)|0;if(f|0)break g;f=Ef(o,m,n)|0;i=c[o>>2]|0;if(i|0){Wa[c[i+4>>2]&127](o)|0;c[o>>2]=0}if(f|0)break g;if(!(a[m>>0]|0))break;if(!(Bu(m,s)|0)){f=0;break g}}while(0);j=j+(((Eu(j)|0)&1073741823)+1)|0;G=j-k|0;E=((G|0)<0)<<31>>31;F=H;D=c[F+4>>2]|0;if(!((D|0)>(E|0)|((D|0)==(E|0)?(c[F>>2]|0)>>>0>G>>>0:0))){J=88;break f}}}else J=88;while(0);if((J|0)==88){f=c[q>>2]|0;if(f|0){Wa[c[f+4>>2]&127](q)|0;c[q>>2]=0}f=Ya[c[r+28>>2]&127](r,s,0)|0}if(!g)break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{I=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else f=7}}while(0);g=c[q>>2]|0;if(g|0){Wa[c[g+4>>2]&127](q)|0;c[q>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{I=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else f=7;while(0);g=f}else g=0}}}else{f=0;e=g;J=38}}else{f=0;e=g;J=38}while(0);if((J|0)==38){J=b+12|0;a[b+18>>0]=a[J>>0]|0;h=f;g=e;e=J}if((d|0)!=0&(h|0)!=0){d=c[b+172>>2]|0;c[K>>2]=h;c[K+4>>2]=d;Db(539,32360,K)}if(a[e>>0]|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=b+60|0;K=c[e>>2]|0;if((Wa[c[(c[K>>2]|0)+48>>2]&127](K)|0)&4096|0){K=512;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}e=c[e>>2]|0;f=c[(c[e>>2]|0)+44>>2]|0;if(!f){K=4096;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}K=Wa[f&127](e)|0;K=(K|0)<32?512:(K|0)<65536?K:65536;b=b+148|0;c[b>>2]=K;Ra=M;return g|0}function yf(a){a=a|0;var b=0,d=0;if(!a)return;if(c[a+8>>2]|0){d=a+12|0;b=0;do{yf(c[d+(b<<2)>>2]|0);b=b+1|0}while((b|0)!=125)}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function zf(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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,H=0,I=0,J=0,K=0;K=Ra;Ra=Ra+16|0;v=K+4|0;J=K;I=c[f+208>>2]|0;C=(i|0)!=0;r=c[(C?f+64|0:f+68|0)>>2]|0;k=g;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,c[k>>2]|0,c[k+4>>2]|0)|0;if(k|0){J=k;Ra=K;return J|0}s=v+1|0;t=v+2|0;u=v+3|0;D=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];H=f+152|0;q=c[H>>2]|0;w=g;w=Sv(c[w>>2]|0,c[w+4>>2]|0,4,0)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,I,q,w,k)|0;if(k|0){J=k;Ra=K;return J|0}k=c[H>>2]|0;p=(i<<2)+4+k|0;q=g;p=Sv(c[q>>2]|0,c[q+4>>2]|0,p|0,((p|0)<0)<<31>>31|0)|0;q=L()|0;w=g;c[w>>2]=p;c[w+4>>2]=q;if(!D){J=101;Ra=K;return J|0}if((D|0)==((1073741824/(k|0)|0)+1|0)){J=101;Ra=K;return J|0}if(D>>>0>(c[f+24>>2]|0)>>>0){J=0;Ra=K;return J|0}w=(h|0)==0;a:do if(!w?(m=D+-1|0,n=c[h>>2]|0,m>>>0>>0):0){l=c[h+8>>2]|0;if(!l){o=h;k=n}else{n=h;do{k=(m>>>0)/(l>>>0)|0;n=c[n+12+(k<<2)>>2]|0;if(!n)break a;m=m-(G(k,l)|0)|0;l=c[n+8>>2]|0}while((l|0)!=0);o=n;k=c[n>>2]|0}if(k>>>0<4001){if(!(1<<(m&7)&d[o+12+(m>>>3)>>0]))break;else k=0;Ra=K;return k|0}n=m+1|0;k=(m>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(l|0){while(1){if((l|0)==(n|0)){k=0;break}k=((k+1|0)>>>0)%125|0;l=c[o+12+(k<<2)>>2]|0;if(!l)break a}Ra=K;return k|0}}while(0);if(C){q=Sv(p|0,q|0,-4,-1)|0;k=L()|0;k=_a[c[(c[r>>2]|0)+8>>2]&127](r,v,4,q,k)|0;if(k|0){J=k;Ra=K;return J|0}m=d[s>>0]<<16|d[v>>0]<<24|d[t>>0]<<8|d[u>>0];if(!j){k=c[f+48>>2]|0;l=c[H>>2]|0;if((l|0)>200)do{j=l;l=l+-200|0;k=k+(d[I+l>>0]|0)|0}while((j|0)>400);if((k|0)!=(m|0)){J=101;Ra=K;return J|0}}}if(!w?(x=df(h,D)|0,x|0):0){J=x;Ra=K;return J|0}p=(D|0)==1;if(p?(y=f+142|0,z=a[I+20>>0]|0,(b[y>>1]|0)!=(z&255|0)):0)b[y>>1]=z&255;do if((c[f+216>>2]|0)==0?(A=f+212|0,B=Ya[c[29436>>2]&127](c[(c[A>>2]|0)+44>>2]|0,D,0)|0,(B|0)!=0):0){k=c[A>>2]|0;l=c[B+4>>2]|0;if(!(c[l>>2]|0)){l=sf(k,D,B)|0;break}else{B=k+12|0;c[B>>2]=(c[B>>2]|0)+1;B=l+30|0;b[B>>1]=(b[B>>1]|0)+1<<16>>16;break}}else l=0;while(0);c[J>>2]=l;if(C)if(!(a[f+7>>0]|0)){C=g;B=c[C+4>>2]|0;k=f+80|0;g=c[k+4>>2]|0;k=((B|0)<(g|0)|((B|0)==(g|0)?(c[C>>2]|0)>>>0<=(c[k>>2]|0)>>>0:0))&1}else k=1;else if(!l)k=1;else k=((e[l+28>>1]|0)>>>3&1^1)&65535;m=c[f+60>>2]|0;n=c[m>>2]|0;do if(n){o=a[f+16>>0]|0;if((o&255)>3){if(!k){F=51;break}}else if(!((k|0)!=0&o<<24>>24==0)){F=51;break}E=c[H>>2]|0;k=Yv(E|0,((E|0)<0)<<31>>31|0,D+-1|0,0)|0;l=L()|0;l=_a[c[n+12>>2]&127](m,I,E,k,l)|0;k=f+32|0;if(D>>>0>(c[k>>2]|0)>>>0)c[k>>2]=D;k=c[f+88>>2]|0;if(!k)n=l;else{nf(k,D,I);n=l}}else F=51;while(0);if((F|0)==51)if((i|0)==0&(l|0)==0){F=f+20|0;a[F>>0]=a[F>>0]|2;k=Za[c[f+204>>2]&127](f,D,J,1)|0;a[F>>0]=a[F>>0]&-3;if(k|0){J=k;Ra=K;return J|0}n=c[J>>2]|0;l=n+28|0;k=e[l>>1]|0;if((k&17|0)!=0?(E=k&65519,b[l>>1]=E,(k&1|0)!=0):0){m=(E^3)&65535;b[l>>1]=m;k=c[n+12>>2]|0;c[n+36>>2]=0;l=c[k>>2]|0;c[n+32>>2]=l;if(!l){c[k+4>>2]=n;if(a[k+32>>0]|0)a[k+33>>0]=1}else c[l+36>>2]=n;c[k>>2]=n;k=k+8|0;if((m&8)==0&(c[k>>2]|0)==0){c[k>>2]=n;n=0}else n=0}else n=0}else n=0;k=c[J>>2]|0;if(!k){J=n;Ra=K;return J|0}k=c[k+4>>2]|0;ew(k|0,I|0,c[H>>2]|0)|0;ab[c[f+200>>2]&127](c[J>>2]|0);if(p){m=f+104|0;k=k+24|0;l=m+16|0;do{a[m>>0]=a[k>>0]|0;m=m+1|0;k=k+1|0}while((m|0)<(l|0))}Df(c[J>>2]|0);J=n;Ra=K;return J|0}function Af(a,b,e,f,g,h){a=a|0;b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+32|0;p=t+16|0;k=t+8|0;q=t;s=a+72|0;j=s;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==0&(j|0)==0){i=a+148|0;r=i;n=0;o=0;i=c[i>>2]|0;j=0}else{o=Sv(i|0,j|0,-1,-1)|0;n=L()|0;r=a+148|0;i=c[r>>2]|0;n=Wv(o|0,n|0,i|0,0)|0;n=Sv(n|0,L()|0,1,0)|0;n=Yv(n|0,L()|0,i|0,0)|0;o=L()|0;j=0}m=s;c[m>>2]=n;c[m+4>>2]=o;m=Sv(n|0,o|0,i|0,j|0)|0;l=L()|0;if((l|0)>(f|0)|(l|0)==(f|0)&m>>>0>e>>>0){s=101;Ra=t;return s|0}if((b|0)==0?(m=a+80|0,(n|0)==(c[m>>2]|0)?(o|0)==(c[m+4>>2]|0):0):0)e=a+64|0;else{i=a+64|0;j=c[i>>2]|0;j=_a[c[(c[j>>2]|0)+8>>2]&127](j,k,8,n,o)|0;if(j|0){s=j;Ra=t;return s|0}if(!(Lu(k,32352,8)|0))e=i;else{s=101;Ra=t;return s|0}}l=c[e>>2]|0;m=Sv(n|0,o|0,8,0)|0;i=L()|0;i=_a[c[(c[l>>2]|0)+8>>2]&127](l,p,4,m,i)|0;if(i|0){s=i;Ra=t;return s|0}k=p+1|0;l=p+2|0;m=p+3|0;c[g>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,12,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[a+48>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);f=c[e>>2]|0;g=Sv(n|0,o|0,16,0)|0;i=L()|0;i=_a[c[(c[f>>2]|0)+8>>2]&127](f,p,4,g,i)|0;if(i|0){s=i;Ra=t;return s|0}c[h>>2]=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;a:do if((b|0)==0&(j|0)==0){g=c[e>>2]|0;h=Sv(n|0,o|0,20,0)|0;i=L()|0;i=_a[c[(c[g>>2]|0)+8>>2]&127](g,p,4,h,i)|0;do if(!i){f=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);h=c[e>>2]|0;o=Sv(n|0,o|0,24,0)|0;i=L()|0;i=_a[c[(c[h>>2]|0)+8>>2]&127](h,p,4,o,i)|0;if(i|0)break;i=(d[k>>0]|0)<<16|(d[p>>0]|0)<<24|(d[l>>0]|0)<<8|(d[m>>0]|0);c[q>>2]=i;if(!i){i=c[a+152>>2]|0;c[q>>2]=i}if((!((f+-32|0)>>>0>65504|(i+-512|0)>>>0>65024)?(i+-1&i|0)==0:0)?(f+-1&f|0)==0:0){e=Se(a,q,-1)|0;c[r>>2]=f;j=s;b=c[j>>2]|0;j=c[j+4>>2]|0;i=f;break a}else i=101}while(0);s=i;Ra=t;return s|0}else{e=0;i=c[r>>2]|0}while(0);q=Sv(b|0,j|0,i|0,0)|0;r=L()|0;c[s>>2]=q;c[s+4>>2]=r;s=e;Ra=t;return s|0}function Bf(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;f=d+212|0;h=Ya[c[29436>>2]&127](c[(c[f>>2]|0)+44>>2]|0,e,0)|0;do if(!h)g=0;else{f=c[f>>2]|0;g=c[h+4>>2]|0;if(!(c[g>>2]|0)){f=sf(f,e,h)|0;if(!f){g=0;break}g=f;f=b[f+30>>1]|0}else{k=f+12|0;c[k>>2]=(c[k>>2]|0)+1;k=g+30|0;f=(b[k>>1]|0)+1<<16>>16;b[k>>1]=f}if(f<<16>>16!=1){f=rf(g)|0;if(!f){ab[c[d+200>>2]&127](g);if(!(b[g+28>>1]&32)){Df(g);g=0;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=0;break}}else if(!(b[g+28>>1]&32)){Df(g);g=f;break}else{k=c[g+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[g+16>>2]=c[k>>2];c[k>>2]=g;g=f;break}}k=c[g+12>>2]|0;do if(b[g+28>>1]&2){f=k+8|0;e=g+36|0;h=c[e>>2]|0;if((c[f>>2]|0)==(g|0))c[f>>2]=h;i=c[g+32>>2]|0;j=(i|0)==0;if(j){c[k+4>>2]=h;f=h}else{c[i+36>>2]=h;f=c[e>>2]|0}if(f|0){c[f+32>>2]=i;break}c[k>>2]=i;if(j)a[k+33>>0]=2}while(0);j=k+12|0;c[j>>2]=(c[j>>2]|0)+-1;cb[c[29440>>2]&255](c[k+44>>2]|0,c[g>>2]|0,1);g=0}while(0);f=c[d+88>>2]|0;if(!f)return g|0;do{c[f+16>>2]=1;f=c[f+44>>2]|0}while((f|0)!=0);return g|0}function Cf(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+176|0;m=o+128|0;n=o;e=c[a>>2]|0;d=(e|0)==0;if(!d){a=e;do{l=a;a=c[a+32>>2]|0;c[l+16>>2]=a}while((a|0)!=0);a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));if(d)a=0;else{l=m+16|0;j=m+16|0;k=n+124|0;do{h=e+16|0;a=e;e=c[h>>2]|0;c[h>>2]=0;h=0;while(1){i=n+(h<<2)|0;b=c[i>>2]|0;if(!b){b=9;break}d=m;g=b;a:while(1){f=c[g+24>>2]|0;b=d;while(1){b=b+16|0;if(f>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=g;break a}else{d=a;a=b;b=d}}c[b>>2]=g;b=c[g+16>>2]|0;if(!b){b=g;break}else{d=g;g=b}}c[b+16>>2]=a;a=c[l>>2]|0;c[i>>2]=0;h=h+1|0;if(h>>>0>=31){b=16;break}}if((b|0)==9)c[i>>2]=a;else if((b|0)==16?(0,(h|0)==31):0){b=m;f=c[k>>2]|0;b:while(1){d=c[f+24>>2]|0;while(1){b=b+16|0;if(d>>>0<(c[a+24>>2]|0)>>>0)break;c[b>>2]=a;b=c[a+16>>2]|0;if(!b){b=a;a=f;break b}else{i=a;a=b;b=i}}c[b>>2]=f;b=c[f+16>>2]|0;if(!b){b=f;break}else{i=f;f=b;b=i}}c[b+16>>2]=a;c[k>>2]=c[j>>2]}}while((e|0)!=0);a=c[n>>2]|0}}else{a=n;b=a+128|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=0}g=m+16|0;f=1;do{b=c[n+(f<<2)>>2]|0;if(b)if(!a)a=b;else{d=m;c:while(1){e=c[a+24>>2]|0;while(1){d=d+16|0;if(e>>>0<(c[b+24>>2]|0)>>>0)break;c[d>>2]=b;d=c[b+16>>2]|0;if(!d){d=b;break c}else{l=b;b=d;d=l}}c[d>>2]=a;d=c[a+16>>2]|0;if(!d){d=a;a=b;break}else{l=a;a=d;d=l}}c[d+16>>2]=a;a=c[g>>2]|0}f=f+1|0}while((f|0)!=32);Ra=o;return a|0}function Df(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;k=c[d+12>>2]|0;m=k+12|0;c[m>>2]=(c[m>>2]|0)+-1;m=d+30|0;n=(b[m>>1]|0)+-1<<16>>16;b[m>>1]=n;if(n<<16>>16)return;m=b[d+28>>1]|0;if(m&1){if(!(a[k+32>>0]|0))return;cb[c[29440>>2]&255](c[k+44>>2]|0,c[d>>2]|0,0);return}n=k+8|0;e=c[n>>2]|0;j=d+36|0;g=c[j>>2]|0;if((e|0)==(d|0)){c[n>>2]=g;l=g}else l=e;i=d+32|0;f=c[i>>2]|0;h=(f|0)==0;if(h){c[k+4>>2]=g;e=g}else{c[f+36>>2]=g;e=c[j>>2]|0}do if(!e){c[k>>2]=f;if(h){a[k+33>>0]=2;c[j>>2]=0;c[i>>2]=0;e=k;g=16;break}else{c[j>>2]=0;e=k;g=15;break}}else{c[e+32>>2]=f;f=c[k>>2]|0;c[j>>2]=0;c[i>>2]=f;if(!f){e=k;g=16}else{e=k;g=15}}while(0);if((g|0)==15)c[f+36>>2]=d;else if((g|0)==16){c[k+4>>2]=d;if(a[k+32>>0]|0)a[k+33>>0]=1}c[e>>2]=d;if(!((m&8)==0&(l|0)==0))return;c[n>>2]=d;return}function Ef(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;p=Ra;Ra=Ra+32|0;l=p+16|0;n=p;o=p+8|0;a[e>>0]=0;i=Xa[c[(c[b>>2]|0)+24>>2]&255](b,n)|0;h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;if((i|0)!=0|((h|0)<0|(h|0)==0&g>>>0<16)){e=i;Ra=p;return e|0}m=Sv(g|0,h|0,-16,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,m,g)|0;if(g|0){e=g;Ra=p;return e|0}i=l+1|0;j=l+2|0;k=l+3|0;m=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];if(m>>>0>=f>>>0){e=0;Ra=p;return e|0}h=n;g=c[h>>2]|0;h=c[h+4>>2]|0;f=Sv(g|0,h|0,-16,-1)|0;q=L()|0;if((m|0)==0|((q|0)<0|(q|0)==0&f>>>0>>0)){q=0;Ra=p;return q|0}q=Sv(g|0,h|0,-12,-1)|0;g=L()|0;g=_a[c[(c[b>>2]|0)+8>>2]&127](b,l,4,q,g)|0;if(g|0){q=g;Ra=p;return q|0}g=d[i>>0]<<16|d[l>>0]<<24|d[j>>0]<<8|d[k>>0];q=n;q=Sv(c[q>>2]|0,c[q+4>>2]|0,-8,-1)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,o,8,q,h)|0;if(h|0){q=h;Ra=p;return q|0}if(Lu(o,32352,8)|0){q=0;Ra=p;return q|0}q=n;h=c[q>>2]|0;q=c[q+4>>2]|0;o=Tv(-16,-1,m|0,0)|0;q=Sv(o|0,L()|0,h|0,q|0)|0;h=L()|0;h=_a[c[(c[b>>2]|0)+8>>2]&127](b,e,m,q,h)|0;if(h|0){q=h;Ra=p;return q|0}h=0;do{g=g-(a[e+h>>0]|0)|0;h=h+1|0}while((h|0)!=(m|0));a[e+((g|0)==0?m:0)>>0]=0;q=0;Ra=p;return q|0}function Ff(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;e=d+100|0;c[e>>2]=(c[e>>2]|0)+1;e=c[d+88>>2]|0;if(e|0)do{c[e+16>>2]=1;e=c[e+44>>2]|0}while((e|0)!=0);j=c[d+212>>2]|0;k=j+44|0;if(!(c[k>>2]|0))return;e=c[j>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;if(c[h+24>>2]|0){i=c[h+12>>2]|0;f=i+8|0;g=h+36|0;d=c[g>>2]|0;if((c[f>>2]|0)==(h|0))c[f>>2]=d;f=(e|0)==0;if(f)c[i+4>>2]=d;else{c[e+36>>2]=d;d=c[g>>2]|0}if(!d){c[i>>2]=e;if(f)a[i+33>>0]=2}else c[d+32>>2]=e;g=h+28|0;b[g>>1]=b[g>>1]&-16|1;if((b[h+30>>1]|0)==0?a[i+32>>0]|0:0)cb[c[29440>>2]&255](c[i+44>>2]|0,c[h>>2]|0,0)}}while((e|0)!=0);if((c[j+12>>2]|0)!=0?(l=Ya[c[29436>>2]&127](c[k>>2]|0,1,0)|0,(l|0)!=0):0){gw(c[l>>2]|0,0,c[j+24>>2]|0)|0;e=2}else e=1;bb[c[29448>>2]&127](c[k>>2]|0,e);return}function Gf(e){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;p=Ra;Ra=Ra+48|0;o=p+32|0;g=p+16|0;f=p;k=c[e+52>>2]|0;l=c[e+56>>2]|0;m=d[e+9>>0]|0;n=l+m|0;q=d[n>>0]|0;j=q>>>3;h=j&255;a[e+8>>0]=h;j=4-(j<<2)|0;a[e+10>>0]=j;i=e+76|0;c[i>>2]=120;switch((q&247)<<24>>24){case 5:{a[e+2>>0]=1;f=e+3|0;if(!(h<<24>>24)){a[f>>0]=0;c[i>>2]=121;f=181}else{a[f>>0]=1;f=180}c[e+80>>2]=f;b[e+14>>1]=b[k+28>>1]|0;f=k+30|0;break}case 2:{a[e+2>>0]=0;a[e+3>>0]=0;c[e+80>>2]=179;b[e+14>>1]=b[k+24>>1]|0;f=k+26|0;break}default:{c[f>>2]=32306;c[f+4>>2]=65035;c[f+8>>2]=31517;Db(11,32001,f);c[g>>2]=32306;c[g+4>>2]=65185;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}}b[e+16>>1]=b[f>>1]|0;a[e+11>>0]=a[k+21>>0]|0;q=c[k+32>>2]|0;b[e+26>>1]=q+65535;a[e+12>>0]=0;j=j&252;b[e+18>>1]=m+8+j;c[e+64>>2]=n+j+8;c[e+60>>2]=l+(c[k+36>>2]|0);c[e+68>>2]=l+j;n=n+3|0;n=(d[n>>0]|0)<<8|(d[n+1>>0]|0);b[e+24>>1]=n;if(n>>>0>(((q+-8|0)>>>0)/6|0)>>>0){c[o>>2]=32306;c[o+4>>2]=65199;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}c[e+20>>2]=-1;a[e>>0]=1;if(0==0?(c[(c[k+4>>2]|0)+32>>2]&2097152|0)==0:0){q=0;Ra=p;return q|0}q=Hf(e)|0;Ra=p;return q|0}function Hf(f){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=Ra;Ra=Ra+32|0;q=r+16|0;p=r;k=e[f+18>>1]|0;m=f+24|0;l=b[m>>1]|0;n=((l&65535)<<1)+k|0;h=c[(c[f+52>>2]|0)+36>>2]|0;i=c[f+56>>2]|0;o=((a[f+8>>0]|0)==0?-5:-4)+h|0;if(!(l<<16>>16)){q=0;Ra=r;return q|0}j=f+76|0;g=0;while(1){l=i+((g<<1)+k)|0;l=d[l>>0]<<8|d[l+1>>0];if(l>>>0>>0|(l|0)>(o|0)){f=5;break}g=g+1|0;if((l+((Xa[c[j>>2]&255](f,i+l|0)|0)&65535)|0)>(h|0)){f=7;break}if(g>>>0>=(e[m>>1]|0)>>>0){g=0;f=8;break}}if((f|0)==5){c[p>>2]=32306;c[p+4>>2]=65148;c[p+8>>2]=31517;Db(11,32001,p);q=11;Ra=r;return q|0}else if((f|0)==7){c[q>>2]=32306;c[q+4>>2]=65153;c[q+8>>2]=31517;Db(11,32001,q);q=11;Ra=r;return q|0}else if((f|0)==8){Ra=r;return g|0}return 0}function If(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0;i=f+(d[b+10>>0]|0)|0;j=a[i>>0]|0;h=j&255;if(j<<24>>24<0){g=0;h=h&127;do{g=g+1|0;j=a[i+g>>0]|0;h=h<<7|j&127}while(j<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[b+2>>0]|0))g=i+1|0;else{g=1;do{h=g;g=g+1|0}while((a[i+h>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[b+14>>1]|0;if(j>>>0>h>>>0){i=e[b+16>>1]|0;b=(((j-i|0)>>>0)%(((c[(c[b+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;f=(g-f&65535)+4+(b>>>0>h>>>0?i:b)|0;f=f&65535;return f|0}else{f=g-f+j|0;f=f>>>0>4?f:4;f=f&65535;return f|0}return 0}function Jf(e,f,g){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=a[f>>0]|0;i=n&255;if(n<<24>>24<0){h=0;i=i&127;do{h=h+1|0;n=a[f+h>>0]|0;i=i<<7|n&127}while(n<<24>>24<0&h>>>0<8);n=f+h|0}else n=f;h=n+1|0;m=a[h>>0]|0;j=m&255;do if(m<<24>>24<0){j=cw(j|0,0,7)|0;L()|0;h=n+2|0;m=a[h>>0]|0;j=j&16256|m&127;if(m<<24>>24<=-1){k=2;h=1;l=0;while(1){if(h>>>0>6){m=10;break}j=cw(j|0,l|0,7)|0;l=L()|0;h=k+1|0;m=a[n+h>>0]|0;j=j|m&127;if(m<<24>>24>-1){m=11;break}else{m=k;k=h;h=m}}if((m|0)==10){m=cw(j|0,l|0,8)|0;l=L()|0;j=n+k+1|0;h=j;j=m|(d[j>>0]|0);break}else if((m|0)==11){h=n+h|0;break}}else l=0}else l=0;while(0);k=h+1|0;h=g;c[h>>2]=j;c[h+4>>2]=l;c[g+12>>2]=i;c[g+8>>2]=k;h=b[e+14>>1]|0;if(i>>>0>(h&65535)>>>0){Nf(h,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=k-f+i|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=i;return}}function Kf(b,c){b=b|0;c=c|0;var d=0;b=4;do{d=b;b=b+1|0}while((a[c+d>>0]|0)<0&b>>>0<13);return b&65535|0}function Lf(a,d,e){a=a|0;d=d|0;e=e|0;d=((Of(d+4|0,e)|0)&255)+4&65535;b[e+18>>1]=d;c[e+12>>2]=0;b[e+16>>1]=0;c[e+8>>2]=0;return}function Mf(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;k=f+(d[e+10>>0]|0)|0;i=a[k>>0]|0;j=i&255;if(i<<24>>24<0){h=0;i=j&127;do{h=h+1|0;j=a[k+h>>0]|0;i=i<<7|j&127}while(j<<24>>24<0&h>>>0<8);h=k+h|0;j=i}else h=k;h=h+1|0;i=g;c[i>>2]=j;c[i+4>>2]=0;c[g+12>>2]=j;c[g+8>>2]=h;i=b[e+14>>1]|0;if(j>>>0>(i&65535)>>>0){Nf(i,b[e+16>>1]|0,c[(c[e+52>>2]|0)+36>>2]|0,f,g);return}else{f=h-f+j|0;b[g+18>>1]=(f&65532|0)==0?4:f&65535;b[g+16>>1]=j;return}}function Nf(a,d,e,f,g){a=a|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=d&65535;e=((((c[g+12>>2]|0)-h|0)>>>0)%((e+-4|0)>>>0)|0)+h|0;a=(e|0)>(a&65535|0);b[g+16>>1]=a?d:e&65535;b[g+18>>1]=4-f+((c[g+8>>2]|0)+(a?h:e&65535));return}function Of(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b>>0]|0;g=f&255;do if(g&128){f=d[b+1>>0]|0;if(!(f&128)){l=2;j=0;f=g<<7&16256|f;break}l=d[b+2>>0]|0;g=(g<<14|l)&2080895;if(!(l&128)){l=3;j=0;f=g|f<<7&16256;break}l=d[b+3>>0]|0;f=(f<<14|l)&2080895;if(!(l&128)){l=4;j=0;f=f|g<<7;break}k=a[b+4>>0]|0;l=k&255;h=g<<14|l;if(!(l&128)){l=5;j=g>>>18;f=h|f<<7;break}j=f|g<<7;l=d[b+5>>0]|0;i=f<<14|l;if(!(l&128)){l=6;j=j>>>18;f=i|h<<7&266354560;break}l=d[b+6>>0]|0;f=h<<14|l;if(!(l&128)){l=7;j=j>>>11;f=f&-266354561|i<<7&266354560;break}g=f&2080895;l=d[b+7>>0]|0;f=i<<14|l;if(!(l&128)){l=8;j=j>>>4;f=f&-266354561|g<<7;break}else{l=9;j=(k&120)>>>3|j<<4;f=f<<8&532709120|g<<15|(d[b+8>>0]|0);break}}else{l=1;j=0;f=f&255}while(0);c[e>>2]=f;c[e+4>>2]=j;return l|0}function Pf(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=Ra;Ra=Ra+16|0;l=n+8|0;k=n;j=n+12|0;if(!b){b=0;Ra=n;return b|0}if(g){i=b+4|0;h=c[i>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;if(!h){h=b+43|0;if(!(a[h>>0]|0))a[h>>0]=1;h=Qf(b,d,0,0,0,e,f,g,0,0)|0;if(!h){c[j>>2]=-1;h=c[i>>2]|0;d=c[h>>2]|0;if((d|0)!=0?(Ya[c[d+40>>2]&127](h,10,j)|0,(c[j>>2]|0)==1):0){j=b+16|0;i=c[j+4>>2]|0;if((i|0)>-1|(i|0)==-1&(c[j>>2]|0)>>>0>4294967295){d=b+8|0;h=c[d>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,k)|0;j=c[k+4>>2]|0;if((h|0)==0&((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)){h=c[d>>2]|0;h=Ya[c[(c[h>>2]|0)+16>>2]&127](h,0,0)|0}if(h|0){c[l>>2]=c[b+108>>2];Db(h,32326,l)}h=0}else h=0}else h=1;j=0}else{j=h;h=0}}else{j=h;h=0}}else{j=0;h=0}g=b+43|0;d=a[g>>0]|0;if(d<<24>>24!=2?(a[b+50>>0]|0)==0:0)m=27;else{i=b+24|0;if((c[i>>2]|0)>0){e=b+32|0;d=0;do{f=c[(c[e>>2]|0)+(d<<2)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[(c[e>>2]|0)+(d<<2)>>2]=0;d=d+1|0}while((d|0)<(c[i>>2]|0));d=a[g>>0]|0}if(d<<24>>24!=2)m=27}if((m|0)==27){m=c[b+4>>2]|0;Xa[c[(c[m>>2]|0)+64>>2]&255](m,h)|0}d=c[b+8>>2]|0;e=c[d>>2]|0;if(e|0){Wa[c[e+4>>2]&127](d)|0;c[d>>2]=0}if(h|0){m=c[b>>2]|0;Ya[c[m+28>>2]&127](m,c[b+108>>2]|0,0)|0}h=c[b+32>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=j;Ra=n;return b|0}return 0}function Qf(f,g,h,i,j,k,l,m,n,o){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0;la=Ra;Ra=Ra+144|0;r=la+120|0;fa=la;Z=la+104|0;ia=la+132|0;c[ia>>2]=0;if(a[f+46>>0]|0){h=8;Ra=la;return h|0}ka=f+43|0;if((a[ka>>0]|0)==0?(p=c[f+4>>2]|0,p=Za[c[(c[p>>2]|0)+56>>2]&127](p,1,1,10)|0,p|0):0){h=p;Ra=la;return h|0}ja=f+45|0;a[ja>>0]=1;a:do if(!h){p=0;ea=14}else{p=f+4|0;b:do if(!i){if(!(a[ka>>0]|0)){q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;ea=12}}else while(1){if(a[ka>>0]|0)break b;q=c[p>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,0,1,10)|0;if((q|0)!=5){ea=12;break b}if(!(Wa[i&127](j)|0)){p=0;i=0;ea=14;break a}}while(0);if((ea|0)==12)switch(q|0){case 5:{p=0;i=0;ea=14;break a}case 0:break;default:{ha=h;break a}}a[f+44>>0]=1;p=h;ea=14}while(0);if((ea|0)==14){ha=p;q=hf(f,ia)|0}c:do if(!q){ga=f+68|0;s=c[ga>>2]|0;aa=e[f+66>>1]|0;aa=aa<<16&65536|aa&65024;if(!((s|0)==0|(aa|0)==(l|0))){c[r>>2]=32306;c[r+4>>2]=61939;c[r+8>>2]=31517;Db(11,32001,r);q=11;break}da=f+32|0;S=c[c[da>>2]>>2]|0;ca=S+96|0;d:do if((c[ca>>2]|0)>>>0>>0){_=f+72|0;$=c[_>>2]|0;ba=f+4|0;p=S+104|0;l=c[p>>2]|0;e:do if(s>>>0>l>>>0){f:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;i=0}else{i=0;ea=28}else while(1){if(a[ka>>0]|0){ea=28;break f}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,10)|0;if((q|0)!=5)break f;if(!(Wa[i&127](j)|0)){i=0;q=5;break e}}while(0);if((ea|0)==28){c[p>>2]=s;q=0;l=s;break}switch(q|0){case 5:{i=0;break e}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=s;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,4,1,9)|0;q=0;l=s}else{q=0;l=s}}else{q=0;l=s}while(0);p=S+108|0;r=c[p>>2]|0;g:do if(l>>>0>r>>>0){h:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0}else ea=161;else while(1){if(a[ka>>0]|0){ea=161;break h}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,10)|0;if((q|0)!=5)break h;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break g}}while(0);if((ea|0)==161){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break g}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,5,1,9)|0;q=0}else q=0}while(0);p=S+112|0;r=c[p>>2]|0;i:do if(l>>>0>r>>>0){j:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0}else ea=173;else while(1){if(a[ka>>0]|0){ea=173;break j}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,10)|0;if((q|0)!=5)break j;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break i}}while(0);if((ea|0)==173){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break i}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,6,1,9)|0;q=0}else q=0}while(0);p=S+116|0;r=c[p>>2]|0;k:do if(l>>>0>r>>>0){l:do if(!i)if(!(a[ka>>0]|0)){q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0}else ea=185;else while(1){if(a[ka>>0]|0){ea=185;break l}q=c[ba>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,10)|0;if((q|0)!=5)break l;if(!(Wa[i&127](j)|0)){i=0;q=5;l=r;break k}}while(0);if((ea|0)==185){c[p>>2]=-1;q=0;break}switch(q|0){case 5:{i=0;l=r;break k}case 0:break;default:break d}W=a[ka>>0]|0;c[p>>2]=-1;if(!(W<<24>>24)){q=c[ba>>2]|0;Za[c[(c[q>>2]|0)+56>>2]&127](q,7,1,9)|0;q=0}else q=0}while(0);m:do if((c[ca>>2]|0)>>>0>>0){q=c[ca>>2]|0;P=c[ga>>2]|0;Q=(P+33|0)>>>12;p=(P<<1)+28+(Q*20|0)|0;W=pb(p,0)|0;if(!W){q=7;break c}gw(W|0,0,p|0)|0;R=W+4|0;c[R>>2]=Q+1;N=pb((P>>>0<4096?P:4096)<<1,0)|0;O=(N|0)==0;p=(q+34|0)>>>12;n:do if(p>>>0>Q>>>0|O)q=O?7:0;else{H=Z+4|0;I=f+24|0;J=Z+8|0;K=W+8|0;M=fa+4|0;while(1){if((c[I>>2]|0)>(p|0)?(T=c[(c[da>>2]|0)+(p<<2)>>2]|0,c[H>>2]=T,(T|0)!=0):0)q=T;else{q=kf(f,p,H)|0;if(q|0)break;q=c[H>>2]|0}r=q+16384|0;c[Z>>2]=r;if(!p){q=q+136|0;c[H>>2]=q;s=0}else s=(p<<12)+-34|0;c[H>>2]=q;G=q;E=(p|0)==(Q|0)?P-s|0:r-G>>2;F=K+((c[R>>2]|0)*20|0)+(s<<1)|0;D=s+1|0;c[J>>2]=D;if((E|0)>0){r=0;do{b[F+(r<<1)>>1]=r;r=r+1|0}while((r|0)!=(E|0));v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));C=0;do{t=F+(C<<1)|0;if(!(C&1)){u=0;r=1;s=M}else{r=1;A=0;s=M;while(1){B=c[s>>2]|0;z=c[fa+(A<<3)>>2]|0;u=(r|0)>0;s=(z|0)>0;if(u|s){w=0;y=0;v=0;while(1){do if(s){s=B+(v<<1)|0;if(u?(U=t+(w<<1)|0,(c[q+(e[s>>1]<<2)>>2]|0)>>>0>=(c[q+(e[U>>1]<<2)>>2]|0)>>>0):0){s=U;ea=57;break}u=v+1|0}else{s=t+(w<<1)|0;ea=57}while(0);if((ea|0)==57){ea=0;u=v;w=w+1|0}v=b[s>>1]|0;s=c[q+((v&65535)<<2)>>2]|0;x=y+1|0;b[N+(y<<1)>>1]=v;if((u|0)<(z|0))v=u+((c[q+(e[B+(u<<1)>>1]<<2)>>2]|0)==(s|0)&1)|0;else v=u;u=(w|0)<(r|0);s=(v|0)<(z|0);if(!(u|s)){r=x;break}else y=x}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=A+1|0;s=fa+(t<<3)+4|0;if(!(1<>2]=t;c[fa+(u<<3)>>2]=r;C=C+1|0}while((C|0)!=(E|0));s=u+1|0;if(s>>>0<13)ea=64;else q=r}else{v=fa;w=v+104|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0));r=0;s=1;t=0;ea=64}if((ea|0)==64){ea=0;do{if(1<>2]|0;A=c[fa+(s<<3)>>2]|0;v=(r|0)>0;u=(A|0)>0;if(v|u){x=0;z=0;w=0;while(1){do if(u){u=B+(w<<1)|0;if(v?(V=t+(x<<1)|0,(c[q+(e[u>>1]<<2)>>2]|0)>>>0>=(c[q+(e[V>>1]<<2)>>2]|0)>>>0):0){u=V;ea=73;break}v=w+1|0}else{u=t+(x<<1)|0;ea=73}while(0);if((ea|0)==73){ea=0;v=w;x=x+1|0}C=b[u>>1]|0;u=c[q+((C&65535)<<2)>>2]|0;y=z+1|0;b[N+(z<<1)>>1]=C;if((v|0)<(A|0))w=v+((c[q+(e[B+(v<<1)>>1]<<2)>>2]|0)==(u|0)&1)|0;else w=v;v=(x|0)<(r|0);u=(w|0)<(A|0);if(!(v|u)){r=y;break}else z=y}}else r=0;ew(B|0,N|0,r<<1|0)|0;t=B}s=s+1|0}while((s|0)!=13);q=r}c[K+(p*20|0)+16>>2]=D;c[K+(p*20|0)+12>>2]=q;c[K+(p*20|0)+4>>2]=F;c[K+(p*20|0)+8>>2]=G;if(p>>>0>>0)p=p+1|0;else{q=0;break n}}}while(0);do if(!O)if(!(c[7324]|0)){ab[c[29344>>2]&127](N);break}else{V=Wa[c[29352>>2]&127](N)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](N);break}while(0);if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}else{p=Wa[c[29352>>2]&127](W)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](W);p=0;l=0;ea=129;break}o:do if(!i){if(a[ka>>0]|0)break;X=c[ba>>2]|0;X=Za[c[(c[X>>2]|0)+56>>2]&127](X,3,1,10)|0;ea=95}else while(1){if(a[ka>>0]|0)break o;p=c[ba>>2]|0;p=Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,10)|0;if((p|0)!=5){X=p;ea=95;break o}if(!(Wa[i&127](j)|0)){p=W;l=W;break m}}while(0);if((ea|0)==95?X|0:0){q=X;p=W;l=W;ea=129;break}F=c[ca>>2]|0;c[S+128>>2]=l;E=f+8|0;p=c[E>>2]|0;G=k>>>2&3;H=(G|0)==0;if(!H?(Y=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0,(Y|0)!=0):0)q=Y;else ea=98;p:do if((ea|0)==98){k=Yv($|0,0,aa|0,0)|0;Y=L()|0;q=fa;c[q>>2]=k;c[q+4>>2]=Y;q=c[ba>>2]|0;q=Xa[c[(c[q>>2]|0)+24>>2]&255](q,Z)|0;if(q|0)break;Y=Z;X=c[Y+4>>2]|0;Z=fa;k=c[Z+4>>2]|0;do if((X|0)<(k|0)|((X|0)==(k|0)?(c[Y>>2]|0)>>>0<(c[Z>>2]|0)>>>0:0)){p=c[ba>>2]|0;q=c[p>>2]|0;if(!q)break;Ya[c[q+40>>2]&127](p,5,fa)|0}while(0);C=g+264|0;D=aa|24;p=c[R>>2]|0;q:do if((p|0)>0){q=0;while(1){B=c[W>>2]|0;r=-1;A=p;while(1){z=A;A=A+-1|0;u=W+8+(A*20|0)|0;s=c[u>>2]|0;v=c[W+8+(A*20|0)+12>>2]|0;r:do if((s|0)<(v|0)){w=c[W+8+(A*20|0)+8>>2]|0;x=c[W+8+(A*20|0)+4>>2]|0;while(1){t=b[x+(s<<1)>>1]|0;y=c[w+((t&65535)<<2)>>2]|0;if(y>>>0>B>>>0)break;s=s+1|0;c[u>>2]=s;if((s|0)>=(v|0)){s=q;break r}}if(y>>>0>=r>>>0){s=q;break}s=(c[W+8+(A*20|0)+16>>2]|0)+(t&65535)|0;r=y}else s=q;while(0);if((z|0)<=1)break;else q=s}c[W>>2]=r;if((r|0)==-1)break q;if(c[C>>2]|0)break;if(!(s>>>0<=F>>>0|s>>>0>l>>>0|r>>>0>$>>>0)){Z=Yv(s+-1|0,0,D|0,0)|0;Z=Sv(Z|0,L()|0,56,0)|0;q=L()|0;Y=c[E>>2]|0;q=_a[c[(c[Y>>2]|0)+8>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;Z=Yv(r+-1|0,0,aa|0,0)|0;q=L()|0;Y=c[ba>>2]|0;q=_a[c[(c[Y>>2]|0)+12>>2]&127](Y,m,aa,Z,q)|0;if(q|0)break p;p=c[R>>2]|0}if((p|0)>0)q=s;else{ea=105;break q}}q=(a[g+81>>0]|0)==0?9:7;break p}else ea=105;while(0);if((ea|0)==105)c[W>>2]=-1;do if((l|0)==(c[(c[c[da>>2]>>2]|0)+16>>2]|0)){ea=Yv(c[_>>2]|0,0,aa|0,0)|0;q=L()|0;m=c[ba>>2]|0;q=Ya[c[(c[m>>2]|0)+16>>2]&127](m,ea,q)|0;if(q|0)break p;p=c[ba>>2]|0;if(H)break;q=Xa[c[(c[p>>2]|0)+20>>2]&255](p,G)|0;if(q|0)break p}while(0);c[ca>>2]=l;q=0}while(0);if(a[ka>>0]|0){p=W;l=W;ea=129;break}p=c[ba>>2]|0;Za[c[(c[p>>2]|0)+56>>2]&127](p,3,1,9)|0;p=W;l=W;ea=129}else{p=0;l=0;ea=129}while(0);if((ea|0)==129)if((q|0)!=5){u=l;ea=131;break}q=0;u=l;ea=131}else{q=0;p=0;u=0;ea=131}while(0);do if((ea|0)==131){if((ha|0)!=0&(q|0)==0)if((c[ca>>2]|0)>>>0>=(c[ga>>2]|0)>>>0)if((ha|0)>1){Fb(4,fa);t=f+4|0;s:do if(!i)if(!(a[ka>>0]|0)){q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;ea=141}else ea=142;else while(1){if(a[ka>>0]|0){ea=142;break s}q=c[t>>2]|0;q=Za[c[(c[q>>2]|0)+56>>2]&127](q,4,4,10)|0;if((q|0)!=5){ea=141;break s}if(!(Wa[i&127](j)|0)){q=5;break}}while(0);if((ea|0)==141)if(!q)ea=142;if((ea|0)==142){if((ha|0)==3){s=c[fa>>2]|0;i=c[da>>2]|0;q=c[i>>2]|0;l=q+96|0;ea=f+84|0;fa=f+112|0;c[fa>>2]=(c[fa>>2]|0)+1;c[ga>>2]=0;fa=ea+1|0;v=ea+2|0;r=ea+3|0;w=(d[fa>>0]<<16|d[ea>>0]<<24|d[v>>0]<<8|d[r>>0])+1|0;a[ea>>0]=w>>>24;a[fa>>0]=w>>>16;a[v>>0]=w>>>8;a[r>>0]=w;c[f+88>>2]=s;i=c[i>>2]|0;r=f+52|0;a[f+64>>0]=1;c[r>>2]=3007e3;w=c[r+4>>2]|0;v=w+6014e3+(c[r+8>>2]|0)|0;w=w+3007e3+(c[r+12>>2]|0)+v|0;v=w+v|0;w=w+(c[r+20>>2]|0)+v|0;v=v+(c[r+24>>2]|0)+w|0;w=w+(c[r+28>>2]|0)+v|0;v=v+(c[r+32>>2]|0)+w|0;c[f+92>>2]=v;c[f+96>>2]=w+s+v;v=i+48|0;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));if((a[ka>>0]|0)!=2){fa=c[t>>2]|0;ab[c[(c[fa>>2]|0)+60>>2]&127](fa)}v=i;s=r;w=v+48|0;do{a[v>>0]=a[s>>0]|0;v=v+1|0;s=s+1|0}while((v|0)<(w|0));c[l>>2]=0;c[q+128>>2]=0;c[q+104>>2]=0;c[q+108>>2]=-1;c[q+112>>2]=-1;c[q+116>>2]=-1;q=c[f+8>>2]|0;q=Ya[c[(c[q>>2]|0)+16>>2]&127](q,0,0)|0}else q=0;if(!(a[ka>>0]|0)){fa=c[t>>2]|0;Za[c[(c[fa>>2]|0)+56>>2]&127](fa,4,4,9)|0}}}else q=0;else q=5;if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);switch(q|0){case 0:case 5:break;default:break c}if(n|0)c[n>>2]=c[ga>>2];if(o)c[o>>2]=c[(c[c[da>>2]>>2]|0)+96>>2]}while(0);if(c[ia>>2]|0){v=f+52|0;w=v+48|0;do{c[v>>2]=0;v=v+4|0}while((v|0)<(w|0))}p=f+44|0;if(a[p>>0]|0){if(!(a[ka>>0]|0)){ia=c[f+4>>2]|0;Za[c[(c[ia>>2]|0)+56>>2]&127](ia,0,1,9)|0}a[p>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}if(!(a[ka>>0]|0)){ka=c[f+4>>2]|0;Za[c[(c[ka>>2]|0)+56>>2]&127](ka,1,1,9)|0}a[ja>>0]=0;h=(ha|0)==(h|0)|(q|0)!=0?q:5;Ra=la;return h|0}function Rf(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;l=e+44|0;if(c[l>>2]|0){n=0;return n|0}m=c[e+12>>2]|0;j=m+56|0;n=c[j>>2]|0;i=c[m+72>>2]|0;h=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(i)|0;g=10}}else g=6;do if((g|0)==6){f=c[h+40>>2]|0;if(f|0){n=f;return n|0}if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(i)|0;g=10;break}else{f=Xf(i)|0;g=10;break}}while(0);if((g|0)==10?f|0:0){n=f;return n|0}f=n;g=2720;h=f+16|0;do{a[f>>0]=a[g>>0]|0;f=f+1|0;g=g+1|0}while((f|0)<(h|0));f=e+32|0;a[n+16>>0]=(c[f>>2]|0)>>>8;a[n+17>>0]=(c[f>>2]|0)>>>16;a[n+18>>0]=1;a[n+19>>0]=1;a[n+20>>0]=(c[f>>2]|0)-(c[e+36>>2]|0);a[n+21>>0]=64;a[n+22>>0]=32;a[n+23>>0]=32;f=n+24|0;h=f+76|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(h|0));h=c[j>>2]|0;i=m+52|0;j=c[i>>2]|0;k=d[m+9>>0]|0;if(!(b[j+22>>1]&12)){f=h+k|0;g=j+36|0}else{g=j+36|0;f=h+k|0;gw(f|0,0,(c[g>>2]|0)-k|0)|0}a[f>>0]=13;f=k+8|0;o=h+(k+1)|0;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;a[h+(k+7)>>0]=0;k=h+(k+5)|0;a[k>>0]=(c[g>>2]|0)>>>8;a[k+1>>0]=c[g>>2];c[m+20>>2]=(c[g>>2]|0)-f&65535;a[m+8>>0]=1;a[m+10>>0]=0;c[m+76>>2]=120;k=c[i>>2]|0;a[m+2>>0]=1;a[m+3>>0]=1;c[m+80>>2]=180;b[m+14>>1]=b[k+28>>1]|0;b[m+16>>1]=b[k+30>>1]|0;a[m+11>>0]=a[k+21>>0]|0;b[m+18>>1]=f;c[m+60>>2]=h+(c[g>>2]|0);c[m+64>>2]=h+f;c[m+68>>2]=h;a[m+12>>0]=0;b[m+26>>1]=(c[j+32>>2]|0)+65535;b[m+24>>1]=0;a[m>>0]=1;m=e+22|0;b[m>>1]=b[m>>1]|2;m=a[e+17>>0]|0;a[n+52>>0]=0;a[n+53>>0]=0;a[n+54>>0]=0;a[n+55>>0]=m;m=a[e+18>>0]|0;a[n+64>>0]=0;a[n+65>>0]=0;a[n+66>>0]=0;a[n+67>>0]=m;c[l>>2]=1;a[n+31>>0]=1;n=0;return n|0}function Sf(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,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+48|0;p=F+16|0;D=F;u=F+32|0;h=F+28|0;B=d+216|0;f=c[B>>2]|0;a:do if(!f){A=d+16|0;b:do if(!(a[A>>0]|0)){q=d+17|0;z=d+13|0;y=d+60|0;f=d+176|0;g=d+180|0;c:while(1){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 5:break;default:{t=11;break c}}if(a[z>>0]|0){t=8;break}e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+28>>2]&255](e,1)|0;switch(e|0){case 0:{t=7;break c}case 5:break;default:{t=136;break a}}if(!(Wa[c[f>>2]&127](c[g>>2]|0)|0)){e=5;t=138;break a}}if((t|0)==7){e=a[q>>0]|0;t=8}else if((t|0)==11)if((e&255)<2)t=12;else t=48;if((t|0)==8)if(e<<24>>24==5)t=48;else{a[q>>0]=1;t=12}if((t|0)==12){g=c[d>>2]|0;c[u>>2]=1;j=d+64|0;k=(c[c[j>>2]>>2]|0)!=0;if(k){e=0;f=1}else{e=Za[c[g+32>>2]&127](g,c[d+172>>2]|0,0,u)|0;f=c[u>>2]|0}if((f|0)!=0&(e|0)==0){c[h>>2]=0;e=c[y>>2]|0;e=Xa[c[(c[e>>2]|0)+36>>2]&255](e,h)|0;d:do if(!(c[h>>2]|e)){e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(i=c[e+72>>2]|0,(i|0)!=0):0){e=i;t=22}else t=19;do if((t|0)==19){e=c[y>>2]|0;f=c[e>>2]|0;if(f){i=D;c[i>>2]=0;c[i+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){i=D;t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;i=Sv(c[i>>2]|0,c[i+4>>2]|0,-1,-1)|0;i=Sv(i|0,L()|0,t|0,e|0)|0;e=Wv(i|0,L()|0,t|0,e|0)|0;L()|0;t=22;break}else{f=0;break d}}else{l=0;t=25}}while(0);if((t|0)==22){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e;else{l=e;t=25}}if((t|0)==25?!(k|(l|0)!=0):0){e=a[q>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:{if(!(a[z>>0]|0)){n=c[y>>2]|0;if(Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0){f=0;e=0;break d}e=a[q>>0]|0}if(e<<24>>24!=5)a[q>>0]=2;break}default:{}}Ya[c[g+28>>2]&127](g,c[d+172>>2]|0,0)|0;if(a[d+4>>0]|0){f=0;e=0;break}e=c[y>>2]|0;f=c[e>>2]|0;if(!f){f=0;e=0;break}if(!(a[z>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[q>>0]|0)==5){f=0;e=0;break}a[q>>0]=1;f=0;e=0;break}e:do if(!k){c[D>>2]=2049;e=_a[c[g+24>>2]&127](g,c[d+172>>2]|0,c[j>>2]|0,2049,D)|0;switch(e|0){case 0:break e;case 14:break;default:{f=0;break d}}f=1;e=0;break d}while(0);a[D>>0]=0;e=c[j>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,1,0,0)|0;e=(e|0)==522?0:e;if(!k?(m=c[j>>2]|0,n=c[m>>2]|0,n|0):0){Wa[c[n+4>>2]&127](m)|0;c[m>>2]=0}f=(a[D>>0]|0)!=0&1}else f=0;while(0)}else f=0;if(e|0){t=138;break a}if(f|0)t=48}do if((t|0)==48){if(a[d+14>>0]|0){e=776;t=138;break a}switch(a[q>>0]|0){case 0:case 1:case 2:case 3:case 5:{if((a[z>>0]|0)==0?(o=c[y>>2]|0,o=Xa[c[(c[o>>2]|0)+28>>2]&255](o,4)|0,o|0):0){e=o;t=138;break a}a[q>>0]=4;break}default:{}}h=d+64|0;e=c[h>>2]|0;f=c[e>>2]|0;if(!f){f=c[d>>2]|0;g=d+172|0;e=Za[c[f+32>>2]&127](f,c[g>>2]|0,0,D)|0;if((e|0)==0&(c[D>>2]|0)!=0){c[u>>2]=0;e=_a[c[f+24>>2]&127](f,c[g>>2]|0,c[h>>2]|0,2050,u)|0;if(!e)if(c[u>>2]&1){c[p>>2]=31984;c[p+4>>2]=55845;c[p+8>>2]=31517;Db(14,32001,p);e=c[h>>2]|0;f=c[e>>2]|0;if(!f)e=14;else{Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;e=14}}else e=0}g=c[h>>2]|0;f=c[g>>2]|0;if(!f)if((a[d+4>>0]|0)==0?(r=c[y>>2]|0,s=c[r>>2]|0,(s|0)!=0):0){if(!(a[z>>0]|0))Xa[c[s+32>>2]&255](r,1)|0;if((a[q>>0]|0)!=5){a[q>>0]=1;t=72}else t=72}else t=72;else{e=g;t=61}}else t=61;do if((t|0)==61){if(!(a[d+7>>0]|0)){e=Xa[c[f+20>>2]&255](e,2)|0;if(e|0)break;e=c[h>>2]|0;f=c[e>>2]|0}e=Xa[c[f+24>>2]&255](e,d+80|0)|0;if(!e){e=xf(d,(a[d+12>>0]|0)==0&1)|0;a[A>>0]=0;t=72}}while(0);if((t|0)==72)if(!e)break;switch((e&255)<<24>>24){case 10:case 13:break;default:{t=138;break a}}c[d+40>>2]=e;a[A>>0]=6;c[d+204>>2]=75;t=138;break a}while(0);h=d+12|0;if(!(a[h>>0]|0)){if(a[d+23>>0]|0){e=c[y>>2]|0;e=_a[c[(c[e>>2]|0)+8>>2]&127](e,D,16,24,0)|0;switch(e|0){case 0:break;case 522:{c[D>>2]=0;c[D+4>>2]=0;c[D+8>>2]=0;c[D+12>>2]=0;break}default:{t=136;break a}}if(Lu(d+104|0,D,16)|0)Ff(d);if(a[h>>0]|0){e=0;break}}e=c[d>>2]|0;g=d+220|0;e=Za[c[e+32>>2]&127](e,c[g>>2]|0,0,u)|0;f:do if(!e){if(!(c[u>>2]|0)){e=d+5|0;if((a[e>>0]|0)!=5){e=0;break}a[e>>0]=0;e=0;break}e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(v=c[e+72>>2]|0,(v|0)!=0):0){f=v;t=91}else t=88;do if((t|0)==88?(w=c[y>>2]|0,x=c[w>>2]|0,x|0):0){e=D;c[e>>2]=0;c[e+4>>2]=0;e=Xa[c[x+24>>2]&255](w,D)|0;if(!e){x=D;t=c[d+152>>2]|0;f=((t|0)<0)<<31>>31;x=Sv(c[x>>2]|0,c[x+4>>2]|0,-1,-1)|0;x=Sv(x|0,L()|0,t|0,f|0)|0;f=Wv(x|0,L()|0,t|0,f|0)|0;L()|0;t=91;break}else break b}while(0);do if((t|0)==91){e=d+156|0;if(f>>>0<=(c[e>>2]|0)>>>0){if(!f)break}else c[e>>2]=f;if(a[h>>0]|0)Ga();if(c[B>>2]|0)Ga();e=c[c[y>>2]>>2]|0;if(a[z>>0]|0){e=14;break f}if(!(a[d+4>>0]|0)){if((c[e>>2]|0)<=1){e=14;break f}if(!(c[e+52>>2]|0)){e=14;break f}}e=c[d+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}e=Uf(d)|0;if(e|0)break f;a[d+5>>0]=5;a[A>>0]=0;e=0;break f}while(0);e=c[d>>2]|0;e=Ya[c[e+28>>2]&127](e,c[g>>2]|0,0)|0}while(0)}else e=0}else e=0;while(0);f=c[B>>2]|0;if(!f)t=124;else t=111}else t=111;while(0);if((t|0)==111){c[D>>2]=0;e=f+44|0;if(a[e>>0]|0){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,0,1,9)|0}a[e>>0]=0;c[f+104>>2]=0;a[f+47>>0]=0}e=f+40|0;g=b[e>>1]|0;if(g<<16>>16>-1){if(!(a[f+43>>0]|0)){A=c[f+4>>2]|0;Za[c[(c[A>>2]|0)+56>>2]&127](A,(g<<16>>16)+3|0,1,5)|0}b[e>>1]=-1}g=c[B>>2]|0;f=0;do{f=f+1|0;e=gf(g,D,0,f)|0}while((e|0)==-1);if(c[D>>2]|e|0)Ff(d);t=124}g:do if((t|0)==124)if((a[d+12>>0]|0)==0?(E=d+16|0,(e|0)==0&(a[E>>0]|0)==0):0){g=d+24|0;e=c[B>>2]|0;if(((e|0)!=0?(b[e+40>>1]|0)>-1:0)?(C=c[e+72>>2]|0,(C|0)!=0):0){e=C;t=133}else t=129;do if((t|0)==129){e=c[d+60>>2]|0;f=c[e>>2]|0;if(f){C=D;c[C>>2]=0;c[C+4>>2]=0;e=Xa[c[f+24>>2]&255](e,D)|0;if(!e){t=c[d+152>>2]|0;e=((t|0)<0)<<31>>31;D=Sv(c[D>>2]|0,c[D+4>>2]|0,-1,-1)|0;D=Sv(D|0,L()|0,t|0,e|0)|0;e=Wv(D|0,L()|0,t|0,e|0)|0;L()|0;t=133;break}else{t=138;break g}}else e=0}while(0);if((t|0)==133){f=d+156|0;if(e>>>0>(c[f>>2]|0)>>>0)c[f>>2]=e}c[g>>2]=e;e=E;t=139}else t=136;while(0);if((t|0)==136)if(!e){e=d+16|0;t=139}else t=138;if((t|0)==138){vf(d);d=e;Ra=F;return d|0}else if((t|0)==139){a[e>>0]=1;a[d+23>>0]=1;d=0;Ra=F;return d|0}return 0}function Tf(a){a=a|0;var b=0,d=0,e=0;d=a+80|0;a=c[d>>2]|0;if(!a)return;b=a+-4|0;c[d>>2]=b;a=b;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[b>>2]=c[14819];c[14819]=b;b=(c[14820]|0)+1|0;c[14820]=b;c[14821]=(b|0)<(c[14815]|0)&1;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7;break}else{a=Wa[c[29352>>2]&127](b)|0;e=7}while(0);do if((e|0)==7){c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);c[d>>2]=0;return}function Uf(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;u=Ra;Ra=Ra+16|0;s=u;f=d+4|0;e=a[f>>0]|0;a:do if(!(e<<24>>24))e=0;else{i=d+17|0;switch(a[i>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:break a}h=d+13|0;do if(!(a[h>>0]|0)){e=d+60|0;g=c[e>>2]|0;g=Xa[c[(c[g>>2]|0)+28>>2]&255](g,4)|0;if(!g){e=a[f>>0]|0;break}e=c[e>>2]|0;f=c[e>>2]|0;if(!f){t=g;Ra=u;return t|0}if(!(a[h>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5){t=g;Ra=u;return t|0}a[i>>0]=1;t=g;Ra=u;return t|0}while(0);a[i>>0]=4}while(0);n=c[d>>2]|0;p=c[d+60>>2]|0;o=c[d+220>>2]|0;k=d+160|0;j=c[k>>2]|0;k=c[k+4>>2]|0;q=d+216|0;c[q>>2]=0;i=(c[n+4>>2]|0)+120|0;r=Sv(i|0,0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&r>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=7;break}else r=f}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){r=c[14978]|0;m=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=r>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(!g){e=7;break}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=g}else r=g}gw(r|0,0,i|0)|0;c[r>>2]=n;i=r+120|0;l=r+8|0;c[l>>2]=i;m=r+4|0;c[m>>2]=p;b[r+40>>1]=-1;f=r+16|0;c[f>>2]=j;c[f+4>>2]=k;c[r+108>>2]=o;f=r+48|0;a[f>>0]=1;g=r+49|0;a[g>>0]=1;d=r+43|0;a[d>>0]=e<<24>>24==0?0:2;c[s>>2]=524294;e=_a[c[n+24>>2]&127](n,o,i,524294,s)|0;if(!e){if(c[s>>2]&1|0)a[r+46>>0]=1;e=Wa[c[(c[p>>2]|0)+48>>2]&127](p)|0;if(e&1024|0)a[f>>0]=0;if(e&4096|0)a[g>>0]=0;c[q>>2]=r;e=0;break}f=a[d>>0]|0;if(f<<24>>24!=2?(a[r+50>>0]|0)==0:0)t=38;else{i=r+24|0;if((c[i>>2]|0)>0){g=r+32|0;f=0;do{h=c[(c[g>>2]|0)+(f<<2)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[(c[g>>2]|0)+(f<<2)>>2]=0;f=f+1|0}while((f|0)<(c[i>>2]|0));f=a[d>>0]|0}if(f<<24>>24!=2)t=38}if((t|0)==38){t=c[m>>2]|0;Xa[c[(c[t>>2]|0)+64>>2]&255](t,0)|0}f=c[l>>2]|0;g=c[f>>2]|0;if(g|0){Wa[c[g+4>>2]&127](f)|0;c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else e=7;while(0);t=e;Ra=u;return t|0}function Vf(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;n=a+96|0;e=c[n>>2]|0;d=a+92|0;q=sb(c[d>>2]|0,b*48|0,0)|0;if(!q){r=7;return r|0}gw(q+(e*48|0)|0,0,(b-e|0)*48|0)|0;c[d>>2]=q;if((e|0)>=(b|0)){r=0;return r|0}i=a+24|0;j=a+64|0;k=a+148|0;l=a+52|0;m=a+72|0;h=a+216|0;d=e;while(1){g=c[i>>2]|0;c[q+(d*48|0)+20>>2]=g;if((c[c[j>>2]>>2]|0)!=0?(p=m,o=c[p>>2]|0,p=c[p+4>>2]|0,(p|0)>0|(p|0)==0&o>>>0>0):0){a=o;e=p}else{a=c[k>>2]|0;e=0}f=q+(d*48|0)|0;c[f>>2]=a;c[f+4>>2]=e;c[q+(d*48|0)+24>>2]=c[l>>2];if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](512)|0;if(!a)break}else{a=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;f=Tv(e|0,f|0,a|0,((a|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&f>>>0<=s>>>0)&1}a=Wa[c[29340>>2]&127](a)|0;if(!a)break;e=Wa[c[29352>>2]&127](a)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(a+4|0,0,508)|0;c[a>>2]=g;c[q+(d*48|0)+16>>2]=a;a=c[h>>2]|0;if(a|0){c[q+(d*48|0)+28>>2]=c[a+68>>2];c[q+(d*48|0)+32>>2]=c[a+76>>2];c[q+(d*48|0)+36>>2]=c[a+80>>2];c[q+(d*48|0)+40>>2]=c[a+112>>2]}d=d+1|0;c[n>>2]=d;if((d|0)>=(b|0)){d=0;r=22;break}}if((r|0)==22)return d|0;c[q+(d*48|0)+16>>2]=0;s=7;return s|0}function Wf(e){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;C=Ra;Ra=Ra+16|0;s=C;x=c[e+20>>2]|0;w=x+152|0;g=((c[x+148>>2]|0)>>>0)/((c[w>>2]|0)>>>0)|0;B=x+20|0;a[B>>0]=a[B>>0]|4;p=e+24|0;i=c[p>>2]|0;f=i+-1|0;e=0-g|0;q=f&e;A=q+1|0;e=~(f&e);f=c[x+24>>2]|0;if(i>>>0>f>>>0)z=i+1+e|0;else z=(q+g|0)>>>0>f>>>0?f+1+e|0:g;r=(z|0)>0;if(!r){A=0;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}m=x+56|0;n=x+204|0;o=x+212|0;h=0;g=0;e=i;a:while(1){l=h+A|0;b:do if(((l|0)!=(e|0)?(t=c[m>>2]|0,(t|0)!=0):0)?(u=h+q|0,v=c[t>>2]|0,u>>>0>>0):0){e=c[t+8>>2]|0;if(!e){f=u;k=t;e=v}else{i=u;j=t;do{f=(i>>>0)/(e>>>0)|0;j=c[j+12+(f<<2)>>2]|0;if(!j){y=20;break b}i=i-(G(f,e)|0)|0;e=c[j+8>>2]|0}while((e|0)!=0);f=i;k=j;e=c[j>>2]|0}c:do if(e>>>0<4001){if(!(1<<(f&7)&(d[k+12+(f>>>3)>>0]|0))){y=20;break b}}else{i=f+1|0;e=(f>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}while(1){if((f|0)==(i|0))break c;e=((e+1|0)>>>0)%125|0;f=c[k+12+(e<<2)>>2]|0;if(!f){y=20;break b}}}while(0);f=Ya[c[29436>>2]&127](c[(c[o>>2]|0)+44>>2]|0,l,0)|0;if(!f){c[s>>2]=0;e=0;break}i=c[o>>2]|0;e=c[f+4>>2]|0;if(!(c[e>>2]|0)){e=sf(i,l,f)|0;c[s>>2]=e;if(!e){e=0;break}}else{l=i+12|0;c[l>>2]=(c[l>>2]|0)+1;l=e+30|0;b[l>>1]=(b[l>>1]|0)+1<<16>>16;c[s>>2]=e}l=b[e+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(e);e=0;break}else{l=c[e+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[e+16>>2]=c[l>>2];c[l>>2]=e;e=0;break}}else y=20;while(0);do if((y|0)==20){y=0;if((l|0)!=((1073741824/(c[w>>2]|0)|0)+1|0)){e=Za[c[n>>2]&127](x,l,s,0)|0;if(e|0){y=22;break a}e=Xf(c[s>>2]|0)|0;f=c[s>>2]|0;l=b[f+28>>1]|0;g=(l&8)==0?g:1;if(!(l&32)){Df(f);break}else{l=c[f+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[f+16>>2]=c[l>>2];c[l>>2]=f;break}}else e=0}while(0);h=h+1|0;f=(e|0)==0;if(!((h|0)<(z|0)&f))break;e=c[p>>2]|0}if((y|0)==22)f=0;if(!((g|0)!=0&f&r)){A=e;z=a[B>>0]|0;z=z&-5;a[B>>0]=z;Ra=C;return A|0}k=x+212|0;j=0;do{g=j+A|0;h=Ya[c[29436>>2]&127](c[(c[k>>2]|0)+44>>2]|0,g,0)|0;do if(h|0){i=c[k>>2]|0;f=c[h+4>>2]|0;if(!(c[f>>2]|0)){f=sf(i,g,h)|0;if(!f)break}else{y=i+12|0;c[y>>2]=(c[y>>2]|0)+1;y=f+30|0;b[y>>1]=(b[y>>1]|0)+1<<16>>16}x=f+28|0;y=b[x>>1]|0;b[x>>1]=y|8;if(!(y&32)){Df(f);break}else{y=c[f+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[f+16>>2]=c[y>>2];c[y>>2]=f;break}}while(0);j=j+1|0}while((j|0)!=(z|0));A=a[B>>0]|0;A=A&-5;a[B>>0]=A;Ra=C;return e|0} function Zc(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;if(!d){i=0;return i|0}h=(Eu(d)|0)&1073741823;if(!b){i=0;return i|0}g=c[b+128>>2]|0;if(!g){i=0;return i|0}f=c[g+4>>2]|0;b=2;while(1){e=g+(b+2<<2)|0;if((av(e,d,h)|0)==0?(a[e+h>>0]|0)==0:0)break;b=(c[g+(b+1<<2)>>2]|0)+b|0;if((b|0)>=(f|0)){b=0;i=9;break}}if((i|0)==9)return b|0;i=c[g+(b<<2)>>2]|0;return i|0}function _c(f,h){f=f|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,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;N=Ra;Ra=Ra+224|0;D=N+184|0;C=N+176|0;F=N+168|0;E=N+160|0;B=N+152|0;A=N+144|0;w=N+220|0;x=N+216|0;I=N+192|0;y=N+104|0;i=N;c[x>>2]=0;z=c[f>>2]|0;L=c[z+108>>2]|0;K=I+4|0;c[K>>2]=i;c[I>>2]=0;J=I+8|0;c[J>>2]=100;H=I+12|0;c[H>>2]=L;L=I+16|0;c[L>>2]=0;G=I+20|0;a[G>>0]=0;M=I+21|0;a[M>>0]=0;a:do if((c[z+180>>2]|0)>1){f=a[h>>0]|0;if(f<<24>>24)while(1){i=h+1|0;b:do if(f<<24>>24!=10)do{f=a[i>>0]|0;if(!(f<<24>>24))break b;i=i+1|0}while(f<<24>>24!=10);while(0);f=c[L>>2]|0;j=f+3|0;if(j>>>0<(c[J>>2]|0)>>>0){c[L>>2]=j;F=(c[K>>2]|0)+f|0;a[F>>0]=a[36874]|0;a[F+1>>0]=a[36875]|0;a[F+2>>0]=a[36876]|0}else wb(I,36874,3);f=i-h|0;j=c[L>>2]|0;k=j+f|0;if(k>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=k;ew((c[K>>2]|0)+j|0,h|0,f|0)|0}}else wb(I,h,f);f=a[i>>0]|0;if(!(f<<24>>24))break;else h=i}}else{if(!(b[f+16>>1]|0)){if(!h)break;f=(Eu(h)|0)&1073741823;if(f>>>0>=100){wb(I,h,f);break}if(!f)break;c[L>>2]=f;ew(i|0,h|0,f|0)|0;break}if(a[h>>0]|0){v=f+100|0;n=f+128|0;o=z+78|0;p=y+32|0;q=y+8|0;r=y+12|0;s=y+16|0;t=y+10|0;u=y+24|0;m=1;do{f=0;i=h;while(1){j=Bi(i,w)|0;if((c[w>>2]|0)==148){l=j;break}f=j+f|0;i=i+j|0;if(!(a[i>>0]|0)){l=0;break}}i=c[L>>2]|0;j=i+f|0;if(j>>>0<(c[J>>2]|0)>>>0){if(f|0){c[L>>2]=j;ew((c[K>>2]|0)+i|0,h|0,f|0)|0}}else wb(I,h,f);h=h+f|0;if(!l)break a;do if((a[h>>0]|0)==63)if((l|0)>1){ii(h+1|0,x)|0;f=c[x>>2]|0;break}else{c[x>>2]=m;f=m;break}else{j=c[n>>2]|0;c:do if(!j)f=0;else{k=c[j+4>>2]|0;f=2;while(1){i=j+(f+2<<2)|0;if((av(i,h,l)|0)==0?(a[i+l>>0]|0)==0:0)break;f=(c[j+(f+1<<2)>>2]|0)+f|0;if((f|0)>=(k|0)){f=0;break c}}f=c[j+(f<<2)>>2]|0}while(0);c[x>>2]=f}while(0);h=h+l|0;m=f+1|0;l=c[v>>2]|0;k=f+-1|0;f=l+(k*40|0)|0;i=e[l+(k*40|0)+8>>1]|0;do if(!(i&1)){if(i&4|0){j=f;k=c[j+4>>2]|0;l=A;c[l>>2]=c[j>>2];c[l+4>>2]=k;Eb(I,32524,A);break}if(i&8|0){g[B>>3]=+g[f>>3];Eb(I,32529,B);break}if(i&2|0){f=a[o>>0]|0;if(f<<24>>24==1){j=c[l+(k*40|0)+16>>2]|0;c[F>>2]=c[l+(k*40|0)+12>>2];c[F+4>>2]=j;Eb(I,36878,F);break}i=y;j=i+40|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[p>>2]=z;yc(y,c[l+(k*40|0)+16>>2]|0,c[l+(k*40|0)+12>>2]|0,f,0)|0;if(!((b[q>>1]&2)==0|(a[t>>0]|0)==1)?(Ig(y,1)|0)==7:0){a[G>>0]=7;c[J>>2]=0}l=c[s>>2]|0;c[E>>2]=c[r>>2];c[E+4>>2]=l;Eb(I,36878,E);if((b[q>>1]&9216)==0&(c[u>>2]|0)==0)break;Cg(y);break}if(i&16384|0){c[C>>2]=c[f>>2];Eb(I,36885,C);break}f=c[L>>2]|0;i=f+2|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;j=(c[K>>2]|0)+f|0;a[j>>0]=120;a[j+1>>0]=39}else wb(I,36898,2);j=c[l+(k*40|0)+12>>2]|0;if((j|0)>0){i=l+(k*40|0)+16|0;f=0;do{c[D>>2]=d[(c[i>>2]|0)+f>>0];Eb(I,36901,D);f=f+1|0}while((f|0)!=(j|0))}f=c[L>>2]|0;i=f+1|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;a[(c[K>>2]|0)+f>>0]=39;break}else{wb(I,36906,1);break}}else{f=c[L>>2]|0;i=f+4|0;if(i>>>0<(c[J>>2]|0)>>>0){c[L>>2]=i;l=(c[K>>2]|0)+f|0;a[l>>0]=78;a[l+1>>0]=85;a[l+2>>0]=76;a[l+3>>0]=76;break}else{wb(I,31171,4);break}}while(0)}while((a[h>>0]|0)!=0)}}while(0);if(!(a[G>>0]|0)){f=c[K>>2]|0;if((f|0?(a[f+(c[L>>2]|0)>>0]=0,c[H>>2]|0):0)?(a[M>>0]&4)==0:0){M=$d(I)|0;Ra=N;return M|0}}else{if(a[M>>0]&4){f=c[I>>2]|0;i=c[K>>2]|0;do if(i|0){if(f|0){if(c[f+480>>2]|0){Xd(f,i);break}I=i;if((c[f+304>>2]|0)>>>0<=I>>>0?(c[f+308>>2]|0)>>>0>I>>>0:0){I=f+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);a[M>>0]=a[M>>0]&-5}c[J>>2]=0;c[L>>2]=0;c[K>>2]=0}M=c[K>>2]|0;Ra=N;return M|0}function $c(e){e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;j=m+8|0;k=m;l=e+8|0;f=b[l>>1]&31;if((f|16|0)!=18){l=d[816+f>>0]|0;Ra=m;return l|0}f=a[e+10>>0]|0;h=e+16|0;i=e+12|0;if(!(Lg(c[h>>2]|0,j,c[i>>2]|0,f)|0))f=b[l>>1]|0;else{if(!(Og(c[h>>2]|0,k,c[i>>2]|0,f)|0)){j=k;k=c[j+4>>2]|0;f=e;c[f>>2]=c[j>>2];c[f+4>>2]=k;f=4}else{g[e>>3]=+g[j>>3];f=8}f=b[l>>1]&-3|f;b[l>>1]=f}l=d[816+(f&31)>>0]|0;Ra=m;return l|0}function ad(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0;ea=Ra;Ra=Ra+336|0;ca=ea+40|0;Y=ea+32|0;_=ea+24|0;Z=ea+16|0;X=ea+8|0;W=ea;ba=ea+320|0;da=ea+44|0;c[ba>>2]=0;c[m>>2]=0;P=(l|0)!=0;Q=P&1;aa=(f|0)==0;a:do if(aa){if(!(c[7324]|0)){l=Wa[c[29340>>2]&127](32)|0;u=24;break}l=Wa[c[29356>>2]&127](32)|0;if((c[14985]|0)>>>0<32)c[14985]=32;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){$=c[14978]|0;V=Tv(n|0,o|0,l|0,((l|0)<0)<<31>>31|0)|0;U=L()|0;c[14768]=((U|0)<0|(U|0)==0&V>>>0<=$>>>0)&1}l=Wa[c[29340>>2]&127](l)|0;if(l){n=Wa[c[29352>>2]&127](l)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0){c[14987]=n;u=25}else u=25}else O=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){O=0;break}}else{do if((e[f+276>>1]|0)>=32){n=f+300|0;l=c[n>>2]|0;if(l|0){c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}n=f+296|0;l=c[n>>2]|0;if(!l){l=f+292|0;break}else{c[n>>2]=c[l>>2];u=f+284|0;c[u>>2]=(c[u>>2]|0)+1;u=24;break a}}else l=f+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(f,32,0)|0;u=24}while(0);if((u|0)==24)if(!l)O=0;else u=25;if((u|0)==25){n=l;p=n+32|0;do{a[n>>0]=0;n=n+1|0}while((n|0)<(p|0));O=l}M=(O|0)!=0;C=f+20|0;D=f+16|0;S=f+480|0;T=f+304|0;U=f+308|0;V=f+300|0;E=O+28|0;F=O+24|0;G=f+32|0;N=O+16|0;H=O+8|0;I=O+20|0;$=f+81|0;J=da+8|0;K=da+196|0;A=da+44|0;B=da+40|0;z=0;l=0;while(1){gw(da|0,0,276)|0;if(!M){u=117;break}c[da>>2]=f;n=c[ba>>2]|0;do if(n|0){if(!aa){if(c[S>>2]|0){Xd(f,n);break}y=n;if((c[T>>2]|0)>>>0<=y>>>0?(c[U>>2]|0)>>>0>y>>>0:0){c[n>>2]=c[V>>2];c[V>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{y=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[ba>>2]=0;o=c[C>>2]|0;if((o|0)>0){p=c[D>>2]|0;n=0;do{q=c[p+(n<<4)+4>>2]|0;if(q|0)c[(c[q+4>>2]|0)+4>>2]=c[q>>2];n=n+1|0}while((n|0)!=(o|0))}y=bd(da,0,h,g)|0;if(!y){u=50;break}if(c[y+56>>2]|0){u=45;break}if(c[y+36>>2]&32|0){u=47;break}if(c[y+12>>2]|0){u=49;break}c[E>>2]=y;p=c[D>>2]|0;w=y+72|0;o=c[w>>2]|0;if(!o)n=-1e6;else{n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(o|0))break;else n=n+1|0}c[F>>2]=c[p+(n<<4)>>2];x=y+42|0;v=b[x>>1]|0;t=v<<16>>16;b:do if(v<<16>>16>0){r=c[y+4>>2]|0;s=d[208+(d[i>>0]|0)>>0]|0;n=0;while(1){p=c[r+(n<<4)>>2]|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-s|0;if(!(v<<24>>24==0|(o|0)!=0)){q=i;do{p=p+1|0;q=q+1|0;v=a[p>>0]|0;o=(d[208+(v&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(o|0)!=0))}if(!o){v=n;break b}n=n+1|0;if((n|0)>=(t|0)){v=n;break}}}else v=0;while(0);if((v|0)==(t|0)){u=63;break}if(P){if(!((c[G>>2]&16384|0)==0&0==0)?(R=c[y+16>>2]|0,(R|0)!=0):0){q=R;n=0;do{p=c[q+20>>2]|0;if((p|0)>0){o=0;do{n=(c[q+36+(o<<3)>>2]|0)==(v|0)?31354:n;o=o+1|0}while((o|0)<(p|0))}q=c[q+4>>2]|0}while((q|0)!=0);o=n}else o=0;n=c[y+8>>2]|0;if(!n)n=o;else{do{p=b[n+50>>1]|0;if(p<<16>>16){r=c[n+4>>2]|0;q=p&65535;p=0;do{u=b[r+(p<<1)>>1]|0;o=u<<16>>16==-2|(v|0)==(u<<16>>16|0)?31366:o;p=p+1|0}while(p>>>0>>0)}n=c[n+20>>2]|0}while((n|0)!=0);n=o}if(n|0){u=79;break}}q=c[da>>2]|0;c:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))u=90;else u=94;else{do if((e[q+276>>1]|0)>=224){n=q+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}n=q+296|0;o=c[n>>2]|0;if(!o){n=q+292|0;break}else{c[n>>2]=c[o>>2];u=q+284|0;c[u>>2]=(c[u>>2]|0)+1;u=91;break c}}else n=q+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;u=90}while(0);if((u|0)==90){o=_d(q,224,0)|0;u=91}do if((u|0)==91){u=0;if(!o)u=94;else{t=o+104|0;n=t;p=n+120|0;do{c[n>>2]=0;n=n+4|0}while((n|0)<(p|0));c[o>>2]=q;n=q+4|0;p=c[n>>2]|0;if(p|0)c[p+4>>2]=o;c[o+8>>2]=p;c[o+4>>2]=0;c[n>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=da;c[J>>2]=o;Di(o,61,0,1,0)|0;c[N>>2]=o;q=c[w>>2]|0;if(!q)s=-1e6;else{p=c[D>>2]|0;n=0;while(1)if((c[p+(n<<4)+12>>2]|0)==(q|0)){s=n;break}else n=n+1|0}p=c[q>>2]|0;q=c[q+4>>2]|0;r=o+108|0;n=c[r>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[r>>2]=n+1;w=c[t>>2]|0;a[w+(n*20|0)>>0]=2;b[w+(n*20|0)+2>>1]=0;c[w+(n*20|0)+4>>2]=s;c[w+(n*20|0)+8>>2]=Q;c[w+(n*20|0)+12>>2]=p;c[w+(n*20|0)+16>>2]=0;a[w+(n*20|0)+1>>0]=0}else n=Di(o,2,s,Q,p)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){w=c[t>>2]|0;a[w+(n*20|0)+1>>0]=-3;c[w+(n*20|0)+16>>2]=q}n=c[r>>2]|0;if((n|0)>0)b[(c[t>>2]|0)+((n+-1|0)*20|0)+2>>1]=1;p=ed(o,6,848)|0;n=1<>2]=c[w>>2]|n;do if((s|0)!=1){if(!(a[(c[(c[(c[o>>2]|0)+16>>2]|0)+(s<<4)+4>>2]|0)+9>>0]|0))break;w=o+156|0;c[w>>2]=c[w>>2]|n}while(0);if(a[$>>0]|0)break;c[p+4>>2]=s;n=y+28|0;c[p+8>>2]=c[n>>2];c[p+12>>2]=Q;if((a[(c[o>>2]|0)+81>>0]|0)==0?(Ei(o,(c[t>>2]|0)+40|0,c[y>>2]|0,0),a[$>>0]|0):0)break;if(P)a[p+20>>0]=109;c[p+28>>2]=c[n>>2];c[p+32>>2]=s;a[p+21>>0]=-3;c[p+36>>2]=(b[x>>1]|0)+1;c[p+68>>2]=b[x>>1];b[K>>1]=0;c[A>>2]=1;c[B>>2]=1;hd(o,da)}}while(0);if((u|0)==94)c[N>>2]=0;b[H>>1]=v;c[I>>2]=f;if(a[$>>0]|0){u=116;break}l=id(O,j,k,ba)|0;z=z+1|0;if(!(z>>>0<50&(l|0)==17)){u=116;break}else l=17}if((u|0)==45){c[W>>2]=h;cd(da,31246,W);u=50}else if((u|0)==47){c[X>>2]=h;cd(da,31276,X);u=50}else if((u|0)==49){c[Z>>2]=h;cd(da,31312,Z);u=50}else if((u|0)==63){c[_>>2]=i;l=dd(f,31333,_)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==79){c[Y>>2]=n;l=dd(f,31374,Y)|0;c[ba>>2]=l;l=1;u=119}else if((u|0)==116)if(!l)u=117;else u=119;if((u|0)==50){l=da+4|0;n=c[l>>2]|0;if(!n){l=1;u=119}else{c[ba>>2]=n;c[l>>2]=0;l=1;u=119}}else if((u|0)==117)if(!(a[$>>0]|0)){c[m>>2]=O;o=0}else{l=0;u=119}do if((u|0)==119)if(M){r=c[N>>2]|0;do if(r|0){s=r+20|0;n=c[s>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{u=122;break}default:{}}else switch(n|0){case 832317811:{u=122;break}default:{}}if((u|0)==122)kc(r)|0;p=c[r>>2]|0;kb(p,r);q=c[r+4>>2]|0;o=r+8|0;n=c[o>>2]|0;if(!q)c[p+4>>2]=n;else{c[q+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=q;c[s>>2]=1443283912;c[r>>2]=0;if(p|0){if(c[p+480>>2]|0){Xd(p,r);break}m=r;if((c[p+304>>2]|0)>>>0<=m>>>0?(c[p+308>>2]|0)>>>0>m>>>0:0){m=p+300|0;c[r>>2]=c[m>>2];c[m>>2]=r;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{m=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(!aa){if(c[S>>2]|0){Xd(f,O);o=l;break}m=O;if((c[T>>2]|0)>>>0<=m>>>0?(c[U>>2]|0)>>>0>m>>>0:0){c[O>>2]=c[V>>2];c[V>>2]=O;o=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](O);o=l;break}else{o=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);o=l;break}}else o=l;while(0);l=c[ba>>2]|0;ba=(l|0)==0;c[ca>>2]=l;Vb(f,o,ba?0:31408,ca);do if(!ba){if(!aa){if(c[S>>2]|0){Xd(f,l);break}ca=l;if((c[T>>2]|0)>>>0<=ca>>>0?(c[U>>2]|0)>>>0>ca>>>0:0){c[l>>2]=c[V>>2];c[V>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=c[da>>2]|0;l=c[da+64>>2]|0;do if(l|0){if(n|0){if(c[n+480>>2]|0){Xd(n,l);break}ca=l;if((c[n+304>>2]|0)>>>0<=ca>>>0?(c[n+308>>2]|0)>>>0>ca>>>0:0){ca=n+300|0;c[l>>2]=c[ca>>2];c[ca>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[da+68>>2]|0;if(l|0)ri(n,l);l=da+24|0;if(n|0){da=n+272|0;c[da>>2]=(c[da>>2]|0)-(d[l>>0]|0)}a[l>>0]=0;if((o|0)==3082|(a[$>>0]|0)!=0){og(f);f=7;Ra=ea;return f|0}else{f=c[f+68>>2]&o;Ra=ea;return f|0}return 0}function bd(f,g,h,i){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;F=Ra;Ra=Ra+64|0;E=F+48|0;D=F+32|0;C=F+24|0;A=F+16|0;y=F+8|0;w=F;B=F+56|0;s=c[f>>2]|0;p=s+24|0;k=c[p>>2]|0;a:do if((k&16|0)==0?(a[s+165>>0]|0)==0:0){n=f+4|0;l=(k&1|0)==0;m=s+16|0;v=c[(c[m>>2]|0)+12>>2]|0;a[s+78>>0]=a[v+77>>0]|0;if(!((b[v+78>>1]&1)==0?(j=eh(s,0,n,0)|0,(j|0)!=0):0))x=5;b:do if((x|0)==5){j=c[s+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[m>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(o=eh(s,j,n,0)|0,o|0):0){j=o;break b}}while((k|0)>2);if(l)c[p>>2]=c[p>>2]&-2;if(!(a[s+89>>0]|0))break a;c[p>>2]=c[p>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;f=0;Ra=F;return f|0}while(0);j=Sd(s,h,i)|0;do if(!j){c:do if(!(a[f+25>>0]|0)){m=c[s+348>>2]|0;if(!m){k=s+340|0;j=s+344|0}else{k=a[h>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=h;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[s+336>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;d:do if(!k)j=59292;else{o=d[208+(d[h>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(l|0)!=0)){n=h;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){j=59292;break}}}while(0);l=c[j+8>>2]|0;do if((h|0)==0|(l|0)!=0)r=l;else{j=a[h>>0]|0;e:do if(!(j<<24>>24)){j=36975;x=32}else{v=j&255;j=208+v|0;do if((v|32|0)==112){j=a[h+1>>0]|0;if(!(j<<24>>24)){j=36976;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==114){j=a[h+2>>0]|0;if(!(j<<24>>24)){j=36977;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==97){j=a[h+3>>0]|0;if(!(j<<24>>24)){j=36978;x=32;break e}v=j&255;j=208+v|0;if((v|32|0)==103){j=a[h+4>>0]|0;if(!(j<<24>>24)){j=36979;x=32;break e}j=j&255;if((j|32|0)!=109){k=109;j=208+j|0;break}j=a[h+5>>0]|0;if(!(j<<24>>24)){j=36980;x=32;break e}j=j&255;if((j|32|0)!=97){k=97;j=208+j|0;break}j=a[h+6>>0]|0;if(!(j<<24>>24)){j=36981;x=32;break e}if(j<<24>>24==95)break e;else{k=95;j=208+(j&255)|0}}else k=103}else k=97}else k=114}else k=112;while(0);r=d[j>>0]|0;q=k;x=36}while(0);if((x|0)==32){r=0;q=a[208+(d[j>>0]|0)>>0]|0;x=36}if((x|0)==36?(r|0)!=(q&255|0):0){r=l;break}p=h+7|0;v=a[p>>0]|0;q=d[208+(v&255)>>0]|0;f:do if(!(v<<24>>24)){k=0;l=59;while(1){j=(k+l|0)/2|0;m=q-(d[208+(d[c[4544+(j<<4)>>2]>>0]|0)>>0]|0)|0;if(!m)break f;v=(m|0)<0;k=v?k:j+1|0;l=v?j+-1|0:l;if((k|0)>(l|0))break c}}else{n=0;o=59;while(1){j=(n+o|0)/2|0;l=c[4544+(j<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=p;do{m=m+1|0;l=l+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0));if(!k)break f}v=(k|0)<0;n=v?n:j+1|0;o=v?j+-1|0:o;if((n|0)>(o|0))break c}}while(0);if(!(a[4544+(j<<4)+5>>0]&48))break c;r=Hi(s,h,29972,4544+(j<<4)|0,0)|0}while(0);if(r|0){s=c[r>>2]|0;c[B>>2]=0;u=c[f>>2]|0;v=r+16|0;j=c[v>>2]|0;g:do if(!j){t=c[s+4>>2]|0;if(!((t|0)!=0?(t|0)!=(c[s+8>>2]|0):0))x=53;h:do if((x|0)==53){t=(u|0)==0;i:do if(t){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](80)|0;x=76;break}j=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){q=c[14978]|0;p=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;o=L()|0;c[14768]=((o|0)<0|(o|0)==0&p>>>0<=q>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break h;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0)break h}else{do if((e[u+276>>1]|0)>=80){k=u+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}k=u+296|0;j=c[k>>2]|0;if(!j){j=u+292|0;break}else{c[k>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=76;break i}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,80,0)|0;x=76}while(0);if((x|0)==76)if(!j)break;else k=j;j=k;l=j+80|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=c[r+4>>2]|0;j:do if(!n)x=105;else{o=(Eu(n)|0)+1|0;k:do if(t){q=Sv(o|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=103;break k}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;p=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=q>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l)break;j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){p=l;break k}c[14987]=j;p=l;break k}while(0);c[k>>2]=0;break j}else{do if(!(c[u+272>>2]|0)){do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=103;break k}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}else{if(!(a[u+81>>0]|0))break;c[k>>2]=0;x=106;break j}while(0);j=_d(u,o,0)|0;x=103}while(0);if((x|0)==103)if(!j){x=105;break}else p=j;ew(p|0,n|0,o|0)|0;c[k>>2]=p;c[v>>2]=k;c[k+32>>2]=1;c[k+72>>2]=c[(c[u+16>>2]|0)+12>>2];b[k+40>>1]=-1;n=(Eu(p)|0)+1|0;l:do if(t){q=Sv(n|0,0,-1,-1)|0;o=L()|0;if(o>>>0>0|(o|0)==0&q>>>0>2147483390)j=0;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;x=138;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){q=c[14978]|0;o=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0){x=139;break}c[14987]=l;x=139}}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){j=0;break}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=138;break l}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,n,0)|0;x=138}while(0);if((x|0)==138)if(!j)j=0;else x=139;if((x|0)==139)ew(j|0,p|0,n|0)|0;q=k+56|0;x=c[q>>2]|0;n=(x<<2)+8|0;o=c[f>>2]|0;if((x+3|0)>=(c[o+116>>2]|0)){c[w>>2]=c[k>>2];cd(f,38221,w)}p=k+60|0;l=c[p>>2]|0;m:do if(!l){if(c[o+272>>2]|0){if(a[o+81>>0]|0){x=160;break}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){m=o+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}m=o+296|0;l=c[m>>2]|0;if(!l){l=o+292|0;break}else{c[m>>2]=c[l>>2];x=o+284|0;c[x>>2]=(c[x>>2]|0)+1;x=159;break m}}else l=o+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1}l=_d(o,n,0)|0;x=159}else{m=l;do if((c[o+304>>2]|0)>>>0<=m>>>0){if((c[o+308>>2]|0)>>>0<=m>>>0)break;if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){x=169;break m}l=Zd(o,l,n,0)|0;x=159;break m}while(0);l=Zd(o,l,n,0)|0;x=159}while(0);if((x|0)==159)if(!l)x=160;else x=169;n:do if((x|0)==160){if(!j)break;if(c[o+480>>2]|0){Xd(o,j);break}l=j;do if((c[o+304>>2]|0)>>>0<=l>>>0){if((c[o+308>>2]|0)>>>0<=l>>>0)break;w=o+300|0;c[j>>2]=c[w>>2];c[w>>2]=j;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{w=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else if((x|0)==169){o=c[q>>2]|0;w=o+1|0;c[q>>2]=w;c[l+(o<<2)>>2]=j;c[l+(w<<2)>>2]=0;c[p>>2]=l}while(0);w=c[q>>2]|0;m=(w<<2)+8|0;n=c[f>>2]|0;if((w+3|0)>=(c[n+116>>2]|0)){c[y>>2]=c[k>>2];cd(f,38221,y)}j=c[p>>2]|0;o:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0>>0:0))){j=n+300|0;l=c[j>>2]|0;if(l|0){c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}j=n+296|0;l=c[j>>2]|0;if(!l){j=n+292|0;break}else{c[j>>2]=c[l>>2];z=n+284|0;c[z>>2]=(c[z>>2]|0)+1;z=l;x=189;break o}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}z=_d(n,m,0)|0;x=189}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0>>0:0))){x=190;break o}z=Zd(n,j,m,0)|0;x=189;break o}while(0);z=Zd(n,j,m,0)|0;x=189}while(0);if((x|0)==189?z|0:0){j=z;x=190}if((x|0)==190){y=c[q>>2]|0;z=y+1|0;c[q>>2]=z;c[j+(y<<2)>>2]=0;c[j+(z<<2)>>2]=0;c[p>>2]=j}n=c[k>>2]|0;p:do if(!n)o=0;else{o=(Eu(n)|0)+1|0;q:do if(t){z=Sv(o|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){o=0;break p}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;x=216;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){z=c[14978]|0;y=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&y>>>0<=z>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){o=0;break p}l=Wa[c[29352>>2]&127](j)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0<=(c[14987]|0)>>>0)break;c[14987]=l}else{if(c[u+272>>2]|0){if(a[u+81>>0]|0){o=0;break p}}else{do if(!(0<0|(0==0?(e[u+276>>1]|0)>>>0>>0:0))){l=u+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}l=u+296|0;j=c[l>>2]|0;if(!j){j=u+292|0;break}else{c[l>>2]=c[j>>2];x=u+284|0;c[x>>2]=(c[x>>2]|0)+1;x=216;break q}}else j=u+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(u,o,0)|0;x=216}while(0);if((x|0)==216)if(!j){o=0;break}ew(j|0,n|0,o|0)|0;o=j}while(0);z=c[q>>2]|0;m=(z<<2)+8|0;n=c[f>>2]|0;if((z+3|0)>=(c[n+116>>2]|0)){c[A>>2]=c[k>>2];cd(f,38221,A)}j=c[p>>2]|0;r:do if(!j){if(c[n+272>>2]|0){if(a[n+81>>0]|0){x=238;break}}else{do if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0>>0:0))){l=n+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}l=n+296|0;j=c[l>>2]|0;if(!j){j=n+292|0;break}else{c[l>>2]=c[j>>2];x=n+284|0;c[x>>2]=(c[x>>2]|0)+1;x=237;break r}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(n,m,0)|0;x=237}else{l=j;do if((c[n+304>>2]|0)>>>0<=l>>>0){if((c[n+308>>2]|0)>>>0<=l>>>0)break;if(!(0<0|(0==0?(e[n+276>>1]|0)>>>0>>0:0))){x=247;break r}j=Zd(n,j,m,0)|0;x=237;break r}while(0);j=Zd(n,j,m,0)|0;x=237}while(0);if((x|0)==237)if(!j)x=238;else x=247;s:do if((x|0)==238){if(!o)break;if(c[n+480>>2]|0){Xd(n,o);break}j=o;do if((c[n+304>>2]|0)>>>0<=j>>>0){if((c[n+308>>2]|0)>>>0<=j>>>0)break;A=n+300|0;c[o>>2]=c[A>>2];c[A>>2]=o;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{A=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else if((x|0)==247){z=c[q>>2]|0;A=z+1|0;c[q>>2]=A;c[j+(z<<2)>>2]=o;c[j+(A<<2)>>2]=0;c[p>>2]=j}while(0);if(!(Ai(u,k,r,c[s+8>>2]|0,B)|0)){j=c[v>>2]|0;break g}k=c[B>>2]|0;c[C>>2]=k;cd(f,31408,C);t:do if(k|0){do if(!t){if(c[u+480>>2]|0){Xd(u,k);break t}j=k;if((c[u+304>>2]|0)>>>0>j>>>0)break;if((c[u+308>>2]|0)>>>0<=j>>>0)break;C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);j=c[v>>2]|0;if(!j)break h;C=j+36|0;c[C>>2]=c[C>>2]|2;do if(t)x=263;else{if(!(c[u+480>>2]|0)){x=263;break}Vi(u,j)}while(0);do if((x|0)==263){B=j+32|0;C=(c[B>>2]|0)+-1|0;c[B>>2]=C;if(C|0)break;Vi(u,j)}while(0);c[v>>2]=0;break h}while(0);if((x|0)==105?(c[k>>2]=0,!t):0)x=106;if((x|0)==106){if(c[u+480>>2]|0){Xd(u,k);break}C=k;if((c[u+304>>2]|0)>>>0<=C>>>0?(c[u+308>>2]|0)>>>0>C>>>0:0){C=u+300|0;c[k>>2]=c[C>>2];c[C>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{C=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);break c}while(0);f=j;Ra=F;return f|0}}while(0);if(!(g&2)){a[f+17>>0]=1;break}else{f=0;Ra=F;return f|0}}else{if(!(c[j+56>>2]|0)){f=j;Ra=F;return f|0}if(!(a[f+25>>0]|0)){f=j;Ra=F;return f|0}}while(0);j=(g&1|0)==0?36996:36983;if(!i){c[E>>2]=j;c[E+4>>2]=h;cd(f,37020,E);f=0;Ra=F;return f|0}else{c[D>>2]=j;c[D+4>>2]=i;c[D+8>>2]=h;cd(f,37010,D);f=0;Ra=F;return f|0}return 0}function cd(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=Ra;Ra=Ra+112|0;k=n+88|0;o=n;m=c[b>>2]|0;c[o>>2]=e;g=c[m+108>>2]|0;i=k+4|0;c[i>>2]=n+16;c[k>>2]=m;c[k+8>>2]=70;f=k+12|0;c[f>>2]=g;g=k+16|0;c[g>>2]=0;j=k+20|0;a[j>>0]=0;h=k+21|0;a[h>>0]=1;tb(k,d,o);e=c[i>>2]|0;if(((e|0)!=0?(a[e+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;if(((a[j>>0]|0)==7?(l=m+81|0,(a[l>>0]|0)==0):0)?(a[m+82>>0]|0)==0:0){a[l>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;e=m+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[m+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!(a[m+85>>0]|0)){e=b+36|0;c[e>>2]=(c[e>>2]|0)+1;e=b+4|0;d=c[e>>2]|0;do if(d|0){if(c[m+480>>2]|0){Xd(m,d);break}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);c[e>>2]=f;c[b+12>>2]=1;Ra=n;return}if(!f){Ra=n;return}if(c[m+480>>2]|0){Xd(m,f);Ra=n;return}o=f;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;Ra=n;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=n;return}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=n;return}}function dd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;f=Ra;Ra=Ra+112|0;h=f+88|0;i=f;c[i>>2]=e;g=c[b+108>>2]|0;c[h+4>>2]=f+16;c[h>>2]=b;c[h+8>>2]=70;c[h+12>>2]=g;c[h+16>>2]=0;g=h+20|0;a[g>>0]=0;a[h+21>>0]=1;tb(h,d,i);e=yb(h)|0;if((a[g>>0]|0)!=7){Ra=f;return e|0}d=b+81|0;if(a[d>>0]|0){Ra=f;return e|0}if(a[b+82>>0]|0){Ra=f;return e|0}a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[b+236>>2]|0;if(!d){Ra=f;return e|0}c[d+12>>2]=7;Ra=f;return e|0}function ed(d,f,g){d=d|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=d+108|0;h=c[o>>2]|0;n=d+112|0;i=c[n>>2]|0;if((h+f|0)>(i|0)){m=c[d+12>>2]|0;k=(i|0)==0;h=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;j=L()|0;h=k?51:h;j=k?0:j;k=c[m>>2]|0;l=c[k+128>>2]|0;i=((l|0)<0)<<31>>31;if((j|0)>(i|0)|(j|0)==(i|0)&h>>>0>l>>>0){h=k+81|0;if(a[h>>0]|0){o=0;return o|0}if(a[k+82>>0]|0){o=0;return o|0}a[h>>0]=1;if((c[k+180>>2]|0)>0)c[k+264>>2]=1;h=k+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[k+236>>2]|0;if(!h){o=0;return o|0}c[h+12>>2]=7;o=0;return o|0}l=d+104|0;i=c[l>>2]|0;d=Yv(h|0,j|0,20,0)|0;j=L()|0;a:do if(!i){if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=0;return o|0}}else{do if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];d=k+284|0;c[d>>2]=(c[d>>2]|0)+1;d=27;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(k,d,j)|0;d=27}else{h=i;if((c[k+304>>2]|0)>>>0<=h>>>0?(c[k+308>>2]|0)>>>0>h>>>0:0){if(!(j>>>0>0|((j|0)==0?d>>>0>(e[k+276>>1]|0)>>>0:0))){h=k;d=29;break}i=Zd(k,i,d,j)|0;d=27;break}i=Zd(k,i,d,j)|0;d=27}while(0);do if((d|0)==27)if(i){h=c[m>>2]|0;if(!h){h=i;d=31;break}else{d=29;break}}else{o=0;return o|0}while(0);if((d|0)==29){k=i;if((c[h+304>>2]|0)>>>0<=k>>>0?(c[h+308>>2]|0)>>>0>k>>>0:0)h=e[h+276>>1]|0;else{h=i;d=31}}if((d|0)==31){i=h;h=Wa[c[29352>>2]&127](h)|0}c[m+48>>2]=h;c[n>>2]=(h>>>0)/20|0;c[l>>2]=i;h=c[o>>2]|0}else i=c[d+104>>2]|0;l=i+(h*20|0)|0;if((f|0)>0){j=l;k=0;h=g;while(1){g=a[h>>0]|0;a[j>>0]=g;c[j+4>>2]=a[h+1>>0];n=a[h+2>>0]|0;i=n<<24>>24;d=j+8|0;c[d>>2]=i;if(n<<24>>24>0?(a[4368+(g&255)>>0]&1)!=0:0)c[d>>2]=(c[o>>2]|0)+i;c[j+12>>2]=a[h+3>>0];a[j+1>>0]=0;c[j+16>>2]=0;b[j+2>>1]=0;k=k+1|0;if((k|0)==(f|0))break;else{j=j+20|0;h=h+4|0}}h=c[o>>2]|0}c[o>>2]=h+f;o=l;return o|0}function fd(b,d){b=b|0;d=d|0;var e=0,f=0;e=1<>2]=c[f>>2]|e;if((d|0)==1)return;if(!(a[(c[(c[(c[b>>2]|0)+16>>2]|0)+(d<<4)+4>>2]|0)+9>>0]|0))return;f=b+156|0;c[f>>2]=c[f>>2]|e;return}function gd(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0;g=c[b>>2]|0;if(a[g+81>>0]|0){if((f|0)==-12)return;kg(g,f,e);return}if((d|0)<0)d=(c[b+108>>2]|0)+-1|0;g=c[b+104>>2]|0;h=g+(d*20|0)|0;if((f|0)<=-1?(i=g+(d*20|0)+1|0,(a[i>>0]|0)==0):0){if((f|0)==-3){c[g+(d*20|0)+16>>2]=e;a[i>>0]=-3;return}if(!e)return;c[g+(d*20|0)+16>>2]=e;a[i>>0]=f;if((f|0)!=-12)return;f=e+12|0;c[f>>2]=(c[f>>2]|0)+1;return}Ei(b,h,e,f);return}function hd(f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;m=F;E=c[f>>2]|0;D=b[g+196>>1]|0;j=D<<16>>16;i=c[g+44>>2]|0;B=c[g+40>>2]|0;c[m>>2]=c[g+96>>2];i=B+i|0;i=i+((B|0)==0&(i|0)>0&1)|0;k=((c[f+108>>2]|0)*20|0)+7&-8;n=(c[f+104>>2]|0)+k|0;k=(c[g+48>>2]|0)-k&-8;l=((k|0)<0)<<31>>31;Fi(f,m);if(!(a[g+20>>0]|0))h=0;else h=((a[g+21>>0]|0)!=0&1)<<7&65535;C=f+149|0;p=(d[C>>0]|d[C+1>>0]<<8)&-129|h;a[C>>0]=p;a[C+1>>0]=p>>8;y=g+199|0;i=(i|0)<10&(a[y>>0]|0)!=0?10:i;p=p&-4;a[C>>0]=p;a[C+1>>0]=p>>8;p=i*40|0;t=(l|0)<0|(l|0)==0&k>>>0

      >>0;q=Tv(k|0,l|0,p|0,0)|0;z=L()|0;x=t?k:q;l=t?l:z;z=f+88|0;c[z>>2]=t?0:n+q|0;q=j*40|0;s=(l|0)<0|(l|0)==0&x>>>0>>0;r=Tv(x|0,l|0,q|0,0)|0;v=L()|0;x=s?x:r;v=s?l:v;t=Sv((s?q:0)|0,(s?0:0)|0,(t?p:0)|0,(t?0:0)|0)|0;l=L()|0;w=f+100|0;c[w>>2]=s?0:n+r|0;r=Sv(c[m>>2]<<2|0,0,7,0)|0;r=r&-8;s=(L()|0)&1;u=(v|0)<(s|0)|(v|0)==(s|0)&x>>>0>>0;A=Tv(x|0,v|0,r|0,s|0)|0;k=L()|0;x=u?x:A;k=u?v:k;m=Sv(t|0,l|0,(u?r:0)|0,(u?s:0)|0)|0;l=L()|0;t=f+92|0;c[t>>2]=u?0:n+A|0;A=B<<2;u=Sv(A|0,0,7,0)|0;u=u&-8;v=(L()|0)&1;h=(k|0)<(v|0)|(k|0)==(v|0)&x>>>0>>0;k=Tv(x|0,k|0,u|0,v|0)|0;L()|0;l=Sv(m|0,l|0,(h?u:0)|0,(h?v:0)|0)|0;m=L()|0;x=f+96|0;c[x>>2]=h?0:n+k|0;if(!((l|0)==0&(m|0)==0)){a:do if(c[E+272>>2]|0)if(!(a[E+81>>0]|0))o=15;else n=0;else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[E+276>>1]|0)>>>0:0))){h=E+300|0;k=c[h>>2]|0;if(k|0){c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}h=E+296|0;k=c[h>>2]|0;if(!k){h=E+292|0;break}else{c[h>>2]=c[k>>2];n=E+284|0;c[n>>2]=(c[n>>2]|0)+1;n=k;break a}}else h=E+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=15}while(0);if((o|0)==15)n=_d(E,l,m)|0;c[f+192>>2]=n;h=E+81|0;if(!(a[h>>0]|0)){k=c[z>>2]|0;if(!k)if(m>>>0<0|(m|0)==0&l>>>0

      >>0)k=0;else{l=Tv(l|0,m|0,p|0,0)|0;k=n+l|0;m=L()|0}c[z>>2]=k;k=c[w>>2]|0;if(!k)if((m|0)<0|(m|0)==0&l>>>0>>0)k=0;else{l=Tv(l|0,m|0,q|0,0)|0;k=n+l|0;m=L()|0}c[w>>2]=k;k=c[t>>2]|0;if(!k)if((m|0)<(s|0)|(m|0)==(s|0)&l>>>0>>0)k=0;else{l=Tv(l|0,m|0,r|0,s|0)|0;k=n+l|0;m=L()|0}c[t>>2]=k;k=c[x>>2]|0;if(!k)if((m|0)<(v|0)|(m|0)==(v|0)&l>>>0>>0)k=0;else{k=Tv(l|0,m|0,u|0,v|0)|0;L()|0;k=n+k|0}c[x>>2]=k}}else h=E+81|0;g=g+216|0;c[f+128>>2]=c[g>>2];c[g>>2]=0;g=(d[C>>0]|d[C+1>>0]<<8)&-13|a[y>>0]<<2&12;a[C>>0]=g;a[C+1>>0]=g>>8;if(a[h>>0]|0){b[f+16>>1]=0;c[f+28>>2]=0;c[f+24>>2]=0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}c[f+28>>2]=B;b[f+16>>1]=D;if(D<<16>>16>0){h=c[w>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=1;c[h+24>>2]=0;if((j|0)>1){j=j+-1|0;h=h+40|0}else break}}c[f+24>>2]=i;if((i|0)>0){h=c[z>>2]|0;while(1){c[h+32>>2]=E;b[h+8>>1]=128;c[h+24>>2]=0;if((i|0)>1){i=i+-1|0;h=h+40|0}else break}}gw(c[x>>2]|0,0,A|0)|0;E=f+20|0;c[E>>2]=770837923;E=f+36|0;c[E>>2]=-1;E=f+40|0;c[E>>2]=0;E=f+146|0;a[E>>0]=2;E=f+44|0;c[E>>2]=0;E=f+32|0;c[E>>2]=1;E=f+147|0;a[E>>0]=-1;E=f+48|0;c[E>>2]=0;E=f+64|0;f=E;c[f>>2]=0;E=E+4|0;c[E>>2]=0;Ra=F;return}function id(f,g,h,i){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;r=Ra;Ra=Ra+32|0;n=r+16|0;m=r+8|0;o=r;q=f+16|0;l=c[q>>2]|0;j=c[l+88>>2]|0;b[j+48>>1]=4;j=j+40|0;c[j>>2]=g;c[j+4>>2]=h;j=l+36|0;if((c[j>>2]|0)>4){c[j>>2]=4;k=Rg(l)|0}else k=Gc(c[q>>2]|0)|0;if((k|0)!=100){j=c[q>>2]|0;if(!j){p=0;q=k;c[i>>2]=p;Ra=r;return q|0}k=gc(j)|0;c[q>>2]=0;j=c[f+20>>2]|0;if(!k){p=m;c[p>>2]=g;c[p+4>>2]=h;p=dd(j,36955,m)|0;q=1;c[i>>2]=p;Ra=r;return q|0}else{p=pd(j)|0;c[n>>2]=p;p=dd(j,31408,n)|0;q=k;c[i>>2]=p;Ra=r;return q|0}}l=c[c[l+96>>2]>>2]|0;j=b[f+8>>1]|0;a:do if((e[l+58>>1]|0)>(j&65535)){j=j&65535;k=c[l+88+(j<<2)>>2]|0;if(k>>>0<12){j=c[f+20>>2]|0;switch(k|0){case 7:{k=36942;break a}case 0:{p=9;break a}default:{}}k=36947;break}c[f+4>>2]=c[l+88+((b[l+56>>1]|0)+j<<2)>>2];if(k>>>0>127)j=(k+-12|0)>>>1;else j=d[3520+k>>0]|0;c[f>>2]=j;p=c[l+40>>2]|0;c[f+12>>2]=p;q=p+1|0;a[q>>0]=a[q>>0]|16;a[(c[p+8>>2]|0)+11>>0]=1;p=0;q=0;c[i>>2]=p;Ra=r;return q|0}else{j=c[f+20>>2]|0;p=9}while(0);if((p|0)==9)k=36937;c[o>>2]=k;p=dd(j,36908,o)|0;gc(c[q>>2]|0)|0;c[q>>2]=0;q=1;c[i>>2]=p;Ra=r;return q|0}function jd(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;m=Ra;Ra=Ra+16|0;h=m;if(!b){c[h>>2]=58063;c[h+4>>2]=91595;c[h+8>>2]=31517;Db(21,32001,h);l=21;Ra=m;return l|0}k=c[b+20>>2]|0;i=b+16|0;j=c[i>>2]|0;do if((f|e|0)>=0?(n=Sv(f|0,((f|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0,p=L()|0,h=c[b>>2]|0,o=((h|0)<0)<<31>>31,!((p|0)>(o|0)|(p|0)==(o|0)&n>>>0>h>>>0)):0)if(!j){h=4;l=24}else{h=c[b+12>>2]|0;p=c[h+8>>2]|0;c[(c[p+4>>2]|0)+4>>2]=c[p>>2];h=Za[g&127](h,(c[b+4>>2]|0)+f|0,e,d)|0;if((h|0)!=4){c[j+40>>2]=h;c[k+64>>2]=h;if(h|0){l=27;break}if(!(c[k+260>>2]|0)){h=0;break}Ne(k,0);h=0;break}f=j+20|0;h=c[f>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{l=8;break}default:{}}else switch(h|0){case 832317811:{l=8;break}default:{}}if((l|0)==8)kc(j)|0;d=c[j>>2]|0;kb(d,j);e=c[j+4>>2]|0;b=j+8|0;h=c[b>>2]|0;if(!e)c[d+4>>2]=h;else{c[e+8>>2]=h;h=c[b>>2]|0}if(h|0)c[h+4>>2]=e;c[f>>2]=1443283912;c[j>>2]=0;do if(d){if(c[d+480>>2]|0){Xd(d,j);break}p=j;if((c[d+304>>2]|0)>>>0<=p>>>0?(c[d+308>>2]|0)>>>0>p>>>0:0){p=d+300|0;c[j>>2]=c[p>>2];c[p>>2]=j}else l=20}else l=20;while(0);do if((l|0)==20)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;h=4;l=24}else{h=1;l=24}while(0);if((l|0)==24){c[k+64>>2]=h;l=27}if((l|0)==27)Ne(k,h);if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);p=7;Ra=m;return p|0}else{p=c[k+68>>2]&h;Ra=m;return p|0}return 0}function kd(b,c,d,e){b=b|0;c=c|0;d=d|0;e=e|0;if(!(a[b>>0]|0)){e=cg(b,c,d,e,0)|0;return e|0}else{e=Gi(b,c,d,e)|0;return e|0}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;k=Ra;Ra=Ra+32|0;j=k+16|0;f=k;h=k+20|0;if(!b){c[f>>2]=58063;c[f+4>>2]=91693;c[f+8>>2]=31517;Db(21,32001,f);j=21;Ra=k;return j|0}i=c[b+20>>2]|0;if(!(c[b+16>>2]|0))f=4;else{f=id(b,d,e,h)|0;do if(f|0?(g=c[h>>2]|0,h=(g|0)==0,c[j>>2]=g,Vb(i,f,h?0:31408,j),!h):0){if(i|0){if(c[i+480>>2]|0){Xd(i,g);break}j=g;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);j=7;Ra=k;return j|0}else{j=c[i+68>>2]&f;Ra=k;return j|0}return 0}function md(b,c,e,f){b=b|0;c=c|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;M=Ra;Ra=Ra+16|0;I=M;C=d[e+1>>0]|0;D=d[e>>0]|0;B=e+2|0;G=(a[e+3>>0]|0)==0;r=0;a:while(1){x=c;c=b;while(1){j=a[c>>0]|0;c=c+1|0;b=j&255;if(j<<24>>24>-1)if(!(j<<24>>24)){E=124;break a}else{g=c;A=b;E=10}else if((j&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);if((b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)){y=c;z=65533}else{g=c;A=b;E=10}}else{g=c;A=b;E=10}if((E|0)==10){E=0;if((A|0)==(D|0)){E=11;break a}else{y=g;z=A}}if((z|0)!=(f|0)){i=z;w=r;u=y;break}if(!(a[B>>0]|0)){E=66;break}c=x+1|0;b=a[x>>0]|0;j=b&255;if((b&255)<=191)if(!(b<<24>>24)){h=1;E=125;break a}else q=c;else{b=d[2736+(j+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);q=c;j=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}c=y+1|0;b=a[y>>0]|0;k=b&255;do if((b&255)<=191){if(b<<24>>24==94){l=y+2|0;p=a[c>>0]|0;c=p&255;if((p&255)>191){c=d[2736+(c+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}n=1;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b;break}else{n=1;k=c;c=l}}else n=0;if((k|0)==93){m=(j|0)==93&1;l=c+1|0;p=a[c>>0]|0;k=p&255;if((p&255)>191){c=d[2736+(k+-192)>>0]|0;k=a[l>>0]|0;if((k&-64)<<24>>24==-128){b=c;c=l;do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128)}else{b=c;c=l}k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}else c=l}else m=0}else{b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);n=0;m=0;k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}while(0);p=0;o=m;b:while(1){switch(k|0){case 0:{h=1;E=125;break a}case 93:break b;case 45:{m=a[c>>0]|0;if(m<<24>>24!=93?(p|0)!=0&m<<24>>24!=0:0){b=c+1|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;m=a[b>>0]|0;if((m&-64)<<24>>24==-128)do{b=b+1|0;l=l<<6|m&63;m=a[b>>0]|0}while((m&-64)<<24>>24==-128);l=(l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)?65533:l}v=0;t=b;s=j>>>0

      >>0|j>>>0>l>>>0?o:1}else E=105;break}default:E=105}if((E|0)==105){E=0;v=k;t=c;s=(j|0)==(k|0)?1:o}c=t+1|0;p=a[t>>0]|0;k=p&255;if((p&255)>191){b=d[2736+(k+-192)>>0]|0;k=a[c>>0]|0;if((k&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|k&63;k=a[c>>0]|0}while((k&-64)<<24>>24==-128);k=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}p=v;o=s}if((o|0)==(n|0)){h=1;E=125;break a}else x=q}do if((E|0)==66){E=0;b=y+1|0;c=a[y>>0]|0;i=c&255;if((c&255)<=191)if(!(c<<24>>24)){h=1;E=125;break a}else{w=b;u=b;break}c=d[2736+(i+-192)>>0]|0;i=a[b>>0]|0;if((i&-64)<<24>>24==-128)do{b=b+1|0;c=c<<6|i&63;i=a[b>>0]|0}while((i&-64)<<24>>24==-128);i=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c;w=b;u=b}while(0);r=a[x>>0]|0;c=x+1|0;b=r&255;if((r&255)>191){b=d[2736+(b+-192)>>0]|0;j=a[c>>0]|0;if((j&-64)<<24>>24==-128)do{c=c+1|0;b=b<<6|j&63;j=a[c>>0]|0}while((j&-64)<<24>>24==-128);b=(b&-2|0)==65534|(b>>>0<128|(b&-2048|0)==55296)?65533:b}do if((i|0)!=(b|0)){if(!G?((b|i)>>>0<128?(a[208+(i&255)>>0]|0)==(a[208+(b&255)>>0]|0):0):0)break;if((i|0)!=(C|0)){h=1;E=125;break a}if(!((u|0)!=(w|0)&(b|0)!=0)){h=1;E=125;break a}}while(0);r=w;b=u}if((E|0)==11){j=x;c:while(1){while(1){A=a[g>>0]|0;g=g+1|0;c=A&255;if((A&255)>191){c=d[2736+(c+-192)>>0]|0;i=a[g>>0]|0;if((i&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|i&63;i=a[g>>0]|0}while((i&-64)<<24>>24==-128);b=g;c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}else b=g;g=(c|0)==(C|0);if(!((c|0)==(D|0)|g))break c;if(g)break;else g=b}g=j+1|0;i=a[j>>0]|0;if((i&255)>191){if((a[g>>0]&-64)<<24>>24==-128)do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128)}else if(!(i<<24>>24)){h=2;E=125;break}j=g;g=b}if((E|0)==125){Ra=M;return h|0}if(!c){f=0;Ra=M;return f|0}do if((c|0)==(f|0)){if(!(a[B>>0]|0)){g=b+1|0;c=a[b>>0]|0;h=c&255;if((c&255)<=191){if(!(c<<24>>24))h=2;else{F=h;H=g;E=43;break}Ra=M;return h|0}c=d[2736+(h+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);if((c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)){J=65533;K=g;break}else{F=c;H=g;E=43;break}}i=b+-1|0;c=a[j>>0]|0;if(!(c<<24>>24)){f=2;Ra=M;return f|0}g=j;while(1){h=md(i,g,e,f)|0;if((h|0)!=1){E=125;break}h=g+1|0;if((c&255)>191){g=h;while(1){c=a[g>>0]|0;if((c&-64)<<24>>24==-128)g=g+1|0;else break}}else{g=h;c=a[h>>0]|0}if(!(c<<24>>24)){h=2;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else{F=c;H=b;E=43}while(0);if((E|0)==43)if(F>>>0<129){if(G){a[I>>0]=F;g=0}else{g=F&255;a[I>>0]=F&(~(a[880+g>>0]&32)&255);g=a[208+g>>0]|0;a[I+2>>0]=0}a[I+1>>0]=g;g=j+(Mv(j,I)|0)|0;d:do if(a[g>>0]|0){while(1){g=g+1|0;c=md(H,g,e,f)|0;if((c|0)!=1)break;g=g+(Mv(g,I)|0)|0;if(!(a[g>>0]|0))break d}f=c;Ra=M;return f|0}while(0);f=2;Ra=M;return f|0}else{J=F;K=H}g=j;while(1){h=a[g>>0]|0;g=g+1|0;c=h&255;if(h<<24>>24>-1){if(!(h<<24>>24)){h=2;E=125;break}}else if((h&255)>191){c=d[2736+(c+-192)>>0]|0;h=a[g>>0]|0;if((h&-64)<<24>>24==-128)do{g=g+1|0;c=c<<6|h&63;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);c=(c&-2|0)==65534|(c>>>0<128|(c&-2048|0)==55296)?65533:c}if((c|0)==(J|0)?(L=md(K,g,e,f)|0,(L|0)!=1):0){h=L;E=125;break}}if((E|0)==125){Ra=M;return h|0}}else if((E|0)==124){f=(a[x>>0]|0)!=0&1;Ra=M;return f|0}else if((E|0)==125){Ra=M;return h|0}return 0}function nd(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+48|0;n=T+24|0;m=T+16|0;l=T+8|0;k=T;J=T+40|0;K=T+36|0;c[K>>2]=0;a:do if(!f){c[k>>2]=31171;Db(21,38253,k)}else{k=c[f+96>>2]|0;b:do if((k|0)<-264537850){switch(k|0){case -1607883113:break;default:break b}R=f+64|0;c[R>>2]=0;if(c[f+260>>2]|0)Ne(f,0);x=(h|0)==0;y=f+32|0;z=f+272|0;A=f+276|0;M=f+81|0;B=f+288|0;N=f+300|0;C=f+296|0;D=f+284|0;E=f+292|0;F=f+82|0;G=f+180|0;H=f+264|0;I=f+236|0;O=f+480|0;P=f+304|0;Q=f+308|0;l=(g|0)==0?59952:g;c:while(1){if(!(a[l>>0]|0)){k=0;w=135;break}c[K>>2]=0;k=qd(f,l,-1,128,0,K,J)|0;do if(!k){p=c[K>>2]|0;if(!p){k=0;l=c[J>>2]|0;break}o=0;m=0;n=0;g=0;l=0;q=0;while(1){k=Gc(p)|0;if(!x){v=(k|0)==100;if(v)if(!n)w=20;else{u=m;t=n;v=g;w=48}else{if((n|0)!=0|(k|0)!=101){w=105;break}if((c[y>>2]&256|0)==0&0==0){w=105;break}else w=20}if((w|0)==20){w=0;n=(p|0)==0;if(n)u=0;else u=e[p+144>>1]|0;m=u<<3|4;d:do if(c[z>>2]|0)if(!(a[M>>0]|0))w=30;else{l=0;w=136;break c}else{do if(0<0|(0==0?(e[A>>1]|0)>>>0>>0:0))l=B;else{l=c[N>>2]|0;if(l|0){c[N>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}l=c[C>>2]|0;if(!l){l=E;break}c[C>>2]=c[l>>2];c[D>>2]=(c[D>>2]|0)+1;break d}while(0);c[l>>2]=(c[l>>2]|0)+1;w=30}while(0);if((w|0)==30){w=0;l=_d(f,m,0)|0}if(!l){l=0;w=136;break c}do if(u|0){s=p+144|0;t=p+116|0;if(n){gw(l|0,0,u<<2|0)|0;break}r=0;do{q=c[p>>2]|0;do if(r>>>0<(e[s>>1]|0)>>>0){m=c[t>>2]|0;n=m+(r*40|0)|0;e:do if(!n)m=0;else{g=b[m+(r*40|0)+8>>1]|0;do if((g&514)==514){if((a[m+(r*40|0)+10>>0]|0)!=1)break;m=c[m+(r*40|0)+16>>2]|0;break e}while(0);if(g&1){m=0;break}m=Gg(n,1)|0}while(0);n=q+81|0;if(!(a[n>>0]|0))break;if(c[q+180>>2]|0){m=0;break}a[n>>0]=0;c[q+264>>2]=0;m=q+272|0;c[m>>2]=(c[m>>2]|0)+-1;m=0}else m=0;while(0);c[l+(r<<2)>>2]=m;r=r+1|0}while((r|0)!=(u|0))}while(0);if(v){t=1;v=l;q=l;w=48}else{m=u;n=1;g=l;q=l}}if((w|0)==48){w=0;s=v+(u<<2)|0;f:do if((u|0)>0){m=0;while(1){o=(p|0)==0;g:do if(o)n=29576;else{n=c[p+120>>2]|0;do if(n|0){if(m>>>0>=(e[p+144>>1]|0)>>>0)break;n=n+(m*40|0)|0;break g}while(0);n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}while(0);g=b[n+8>>1]|0;do if((g&514)==514){if((a[n+10>>0]|0)!=1){w=58;break}r=c[n+16>>2]|0}else w=58;while(0);do if((w|0)==58){w=0;if(g&1){r=0;break}r=Gg(n,1)|0}while(0);if(!o){g=c[p>>2]|0;o=p+40|0;n=c[o>>2]|0;if((n|0)==3082|(a[g+81>>0]|0)!=0){og(g);n=7}else n=c[g+68>>2]&n;c[o>>2]=n}c[s+(m<<2)>>2]=r;if(!r){p=c[K>>2]|0;if(!p)n=1;else{n=c[p+120>>2]|0;do if(!n)w=70;else{if(m>>>0>=(e[p+144>>1]|0)>>>0){w=70;break}n=n+(m*40|0)|0;g=p}while(0);if((w|0)==70){w=0;n=c[p>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576;g=p}n=b[n+8>>1]&31;g=c[g>>2]|0;r=p+40|0;o=c[r>>2]|0;if((o|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&o;c[r>>2]=g}if(!(-1431655766>>>n&1)){w=76;break c}}m=m+1|0;if((m|0)>=(u|0))break f;p=c[K>>2]|0}}else m=0;while(0);c[s+(m<<2)>>2]=0;o=s;m=u;n=t;g=v}if(Za[h&127](i,m,o,g)|0){w=86;break c}}if((k|0)!=100){w=104;break}p=c[K>>2]|0}if((w|0)==104){w=0;p=c[K>>2]|0}else if((w|0)==105)w=0;o=p+20|0;k=c[o>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=107;break}default:k=0}else switch(k|0){case 832317811:{w=107;break}default:k=0}if((w|0)==107){w=0;k=kc(p)|0}n=c[p>>2]|0;kb(n,p);g=c[p+4>>2]|0;m=p+8|0;l=c[m>>2]|0;if(!g)c[n+4>>2]=l;else{c[g+8>>2]=l;l=c[m>>2]|0}if(l|0)c[l+4>>2]=g;c[o>>2]=1443283912;c[p>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,p);break}v=p;if((c[n+304>>2]|0)>>>0<=v>>>0?(c[n+308>>2]|0)>>>0>v>>>0:0){v=n+300|0;c[p>>2]=c[v>>2];c[v>>2]=p}else w=119}else w=119;while(0);do if((w|0)==119)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{w=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);c[K>>2]=0;l=c[J>>2]|0;while(1)if(!(a[880+(d[l>>0]|0)>>0]&1))break;else l=l+1|0;if(q){if(c[O>>2]|0){Xd(f,q);break}w=q;if((c[P>>2]|0)>>>0<=w>>>0?(c[Q>>2]|0)>>>0>w>>>0:0){c[q>>2]=c[N>>2];c[N>>2]=q;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{w=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}}while(0);if(k){w=135;break}}if((w|0)==76)if((a[M>>0]|0)==0?(a[F>>0]|0)==0:0){a[M>>0]=1;if((c[G>>2]|0)>0)c[H>>2]=1;c[z>>2]=(c[z>>2]|0)+1;m=c[I>>2]|0;if(m){c[m+12>>2]=7;w=136}else w=136}else w=136;else if((w|0)==86){o=c[K>>2]|0;p=o+20|0;k=c[p>>2]|0;if((k|0)<832317811)switch(k|0){case 770837923:{w=87;break}default:{}}else switch(k|0){case 832317811:{w=87;break}default:{}}if((w|0)==87)kc(o)|0;n=c[o>>2]|0;kb(n,o);g=c[o+4>>2]|0;m=o+8|0;k=c[m>>2]|0;if(!g)c[n+4>>2]=k;else{c[g+8>>2]=k;k=c[m>>2]|0}if(k|0)c[k+4>>2]=g;c[p>>2]=1443283912;c[o>>2]=0;do if(n){if(c[n+480>>2]|0){Xd(n,o);break}J=o;if((c[n+304>>2]|0)>>>0<=J>>>0?(c[n+308>>2]|0)>>>0>J>>>0:0){J=n+300|0;c[o>>2]=c[J>>2];c[J>>2]=o}else w=99}else w=99;while(0);do if((w|0)==99)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{J=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[K>>2]=0;c[R>>2]=4;Ne(f,4);k=4}else if((w|0)==135){l=0;p=c[K>>2]|0;w=136}do if((w|0)==136)if(p){q=p+20|0;m=c[q>>2]|0;if((m|0)<832317811)switch(m|0){case 770837923:{w=138;break}default:{}}else switch(m|0){case 832317811:{w=138;break}default:{}}if((w|0)==138)kc(p)|0;g=c[p>>2]|0;kb(g,p);o=c[p+4>>2]|0;n=p+8|0;m=c[n>>2]|0;if(!o)c[g+4>>2]=m;else{c[o+8>>2]=m;m=c[n>>2]|0}if(m|0)c[m+4>>2]=o;c[q>>2]=1443283912;c[p>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,p);break}K=p;if((c[g+304>>2]|0)>>>0<=K>>>0?(c[g+308>>2]|0)>>>0>K>>>0:0){K=g+300|0;c[p>>2]=c[K>>2];c[K>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{K=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if(l|0){if(c[O>>2]|0){Xd(f,l);break}O=l;if((c[P>>2]|0)>>>0<=O>>>0?(c[Q>>2]|0)>>>0>O>>>0:0){c[l>>2]=c[N>>2];c[N>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if((k|0)==3082|(a[M>>0]|0)!=0){og(f);g=7}else g=c[f+68>>2]&k;k=(j|0)!=0;if(!(k&(g|0)!=0)){if(!k){j=g;Ra=T;return j|0}c[j>>2]=0;j=g;Ra=T;return j|0}n=pd(f)|0;do if(n|0?(S=(Eu(n)|0)+1|0,Q=Sv(S|0,0,-1,-1)|0,P=L()|0,!(P>>>0>0|(P|0)==0&Q>>>0>2147483390)):0){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](S)|0;if(!k)break}else{k=Wa[c[29356>>2]&127](S)|0;if((c[14985]|0)>>>0>>0)c[14985]=S;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){Q=c[14978]|0;P=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;O=L()|0;c[14768]=((O|0)<0|(O|0)==0&P>>>0<=Q>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}ew(k|0,n|0,S|0)|0;c[j>>2]=k;j=g;Ra=T;return j|0}while(0);c[j>>2]=0;c[R>>2]=7;Ne(f,7);j=7;Ra=T;return j|0}else{if((k|0)<1266094736)switch(k|0){case -264537850:break;default:break b}else switch(k|0){case 1266094736:break;default:break b}c[m>>2]=38244;Db(21,38253,m);break a}while(0);c[l>>2]=50924;Db(21,38253,l)}while(0);c[n>>2]=58063;c[n+4>>2]=118947;c[n+8>>2]=31517;Db(21,32001,n);j=21;Ra=T;return j|0}function od(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return qd(a,b,c,128,0,d,e)|0}function pd(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;g=i+8|0;f=i;a:do if(d){e=c[d+96>>2]|0;b:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break b;default:{h=3;break b}}else switch(e|0){case 1266094736:break b;default:{h=3;break b}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=157025;c[g+8>>2]=31517;Db(21,32001,g);e=50552;break}if(!(a[d+81>>0]|0)){h=d+64|0;e=c[h>>2]|0;c:do if(!e)e=0;else{g=c[d+260>>2]|0;do if(g){f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0)e=c[g+16>>2]|0;else{if(f&1)break;e=Gg(g,1)|0}if(e|0)break a;e=c[h>>2]|0}while(0);switch(e|0){case 516:{e=50738;break a}case 100:{e=50760;break a}case 101:{e=50782;break a}default:{e=e&255;if(e>>>0<29)break c;else{e=50724;break a}}}}while(0);if(!(520028155>>>e&1))e=50724;else e=c[22960+(e<<2)>>2]|0}else e=34831}else e=34831;while(0);Ra=i;return e|0}function qd(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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;za=Ra;Ra=Ra+352|0;ya=za+56|0;xa=za+48|0;wa=za+40|0;p=za+24|0;o=za+16|0;n=za+8|0;m=za;ta=za+336|0;ua=za+60|0;c[k>>2]=0;a:do if(!f){c[m>>2]=31171;Db(21,38253,m)}else{m=c[f+96>>2]|0;b:do if((m|0)<-264537850){switch(m|0){case -1607883113:break;default:break b}if(!g)break a;ma=f+20|0;n=c[ma>>2]|0;na=f+16|0;if((n|0)>0){o=c[na>>2]|0;m=0;do{p=c[o+(m<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];m=m+1|0}while((m|0)!=(n|0))}D=ua+188|0;E=ua+220|0;F=(i&1|0)==0;G=i>>>2&1;H=ua+25|0;I=ua+24|0;J=f+272|0;K=f+360|0;M=ua+64|0;N=(h|0)>-1;O=f+4|0;P=ua+68|0;Q=(h|0)==0;R=ua+12|0;S=f+112|0;T=g+(h+-1)|0;U=ua+17|0;V=f+81|0;W=f+68|0;X=g+h|0;Y=ua+224|0;Z=Sv(h|0,((h|0)<0)<<31>>31|0,1,0)|0;_=L()|0;$=(l|0)==0;aa=f+276|0;ba=f+288|0;ca=f+300|0;da=f+480|0;ea=ua+8|0;fa=f+165|0;ga=f+296|0;ha=f+284|0;ia=f+304|0;ja=ua+199|0;ka=g;v=i&255;w=f+292|0;x=f+308|0;y=v<<24>>24>-1;z=f+64|0;A=ua+260|0;B=f+260|0;C=f+56|0;u=0;c:while(1){d:while(1){c[ta>>2]=0;gw(ua|0,0,148)|0;m=D;n=m+88|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));c[E>>2]=j;if(!F){a[I>>0]=1;c[J>>2]=(c[J>>2]|0)+1}a[H>>0]=G;i=c[ma>>2]|0;e:do if((i|0)>0){p=c[na>>2]|0;m=0;f:while(1){o=c[p+(m<<4)+4>>2]|0;if(o|0?(va=c[o+4>>2]|0,c[va+4>>2]=c[o>>2],a[o+9>>0]|0):0){if((c[va+76>>2]|0)!=(o|0)?b[va+22>>1]&64:0)break;n=c[va+72>>2]|0;if(n|0)do{do if((c[n>>2]|0)!=(o|0)){if((c[n+4>>2]|0)!=1)break;if((a[n+8>>0]|0)!=1)break f}while(0);n=c[n+12>>2]|0}while((n|0)!=0)}m=m+1|0;if((m|0)>=(i|0)){la=31;break e}}c[wa>>2]=c[p+(m<<4)>>2];Vb(f,262,38298,wa);n=262}else la=31;while(0);g:do if((la|0)==31){la=0;n=c[K>>2]|0;c[K>>2]=0;if(n|0){m=c[O>>2]|0;if(m|0)do{t=m+149|0;s=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=s;a[t+1>>0]=s>>8;m=c[m+8>>2]|0}while((m|0)!=0);do{o=n;n=c[n+24>>2]|0;p=c[o>>2]|0;s=o+12|0;t=(c[s>>2]|0)+-1|0;c[s>>2]=t;h:do if(!t){m=c[o+8>>2]|0;if(m|0)Wa[c[(c[m>>2]|0)+16>>2]&127](m)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,o);break h}m=o;if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;t=p+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break h}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0)}while((n|0)!=0)}c[ua>>2]=f;i:do if(N){if(!Q?(a[T>>0]|0)==0:0){la=75;break}if((c[S>>2]|0)<(h|0)){Vb(f,18,38328,xa);if(!(a[V>>0]|0)){n=c[W>>2]&18;break g}else{og(f);n=7;break g}}j:do if(c[J>>2]|0){if(!(a[V>>0]|0))la=64}else{do if(_>>>0>0|((_|0)==0?Z>>>0>(e[aa>>1]|0)>>>0:0))m=ba;else{m=c[ca>>2]|0;if(m|0){c[ca>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}m=c[ga>>2]|0;if(!m){m=w;break}c[ga>>2]=c[m>>2];c[ha>>2]=(c[ha>>2]|0)+1;oa=m;la=65;break j}while(0);c[m>>2]=(c[m>>2]|0)+1;la=64}while(0);if((la|0)==64){oa=_d(f,Z,_)|0;la=65}if((la|0)==65?(la=0,oa|0):0){ew(oa|0,g|0,h|0)|0;a[oa+h>>0]=0;ud(ua,oa,ta)|0;m=oa;c[Y>>2]=g+((c[Y>>2]|0)-m);if(c[da>>2]|0){Xd(f,oa);break}do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[oa>>2]=c[ca>>2];c[ca>>2]=oa;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](oa);break}else{t=Wa[c[29352>>2]&127](oa)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](oa);break}}c[Y>>2]=X}else la=75;while(0);if((la|0)==75){la=0;ud(ua,g,ta)|0}if((c[R>>2]|0)==101)c[R>>2]=0;k:do if(a[U>>0]|0?(pa=c[ua>>2]|0,qa=pa+20|0,(c[qa>>2]|0)>0):0){q=pa+16|0;r=pa+24|0;s=pa+56|0;i=0;l:while(1){m=c[q>>2]|0;t=c[m+(i<<4)+4>>2]|0;do if(t|0){if(!(a[t+8>>0]|0)){m=Zb(t,0,0)|0;if((m|0)>=7)break l;switch(m|0){case 0:break;default:break k}o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=1;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0];m=c[q>>2]|0}else{o=c[t+4>>2]|0;c[o+4>>2]=c[t>>2];o=c[(c[o+12>>2]|0)+56>>2]|0;p=0;o=d[o+41>>0]<<16|d[o+40>>0]<<24|d[o+42>>0]<<8|d[o+43>>0]}n=c[m+(i<<4)+12>>2]|0;if((o|0)!=(c[n>>2]|0)){o=n+78|0;b[o>>1]=b[o>>1]|8;o=(c[m+28>>2]|0)+78|0;b[o>>1]=b[o>>1]|8;c[r>>2]=c[r>>2]&-17;m:do if(!(c[s>>2]|0)){n=c[qa>>2]|0;if((n|0)<=0)break;o=0;while(1){m=c[m+(o<<4)+12>>2]|0;if(b[m+78>>1]&8){dh(m);n=c[qa>>2]|0}m=o+1|0;if((m|0)>=(n|0))break m;o=m;m=c[q>>2]|0}}while(0);c[R>>2]=17}if(!p)break;c[(c[t+4>>2]|0)+4>>2]=c[t>>2];if(cc(t,0)|0)break;bc(t,0)|0}while(0);i=i+1|0;if((i|0)>=(c[qa>>2]|0))break k}if((m|0)<3082)switch(m|0){case 7:break;default:break k}else switch(m|0){case 3082:break;default:break k}m=pa+81|0;if((a[m>>0]|0)==0?(a[pa+82>>0]|0)==0:0){a[m>>0]=1;if((c[pa+180>>2]|0)>0)c[pa+264>>2]=1;m=pa+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[pa+236>>2]|0;if(!m)break;c[m+12>>2]=7}}while(0);if(a[V>>0]|0)c[R>>2]=7;if(!$)c[l>>2]=c[Y>>2];t=c[R>>2]|0;s=(t|0)==0;n:do if(s?(ra=c[ea>>2]|0,ra|0):0){switch(a[ja>>0]|0){case 0:break n;case 2:{Wi(ra,4);m=12;n=8;break}default:{Wi(ra,8);m=8;n=0}}o=n;do{p=c[ea>>2]|0;if(!(a[(c[p>>2]|0)+81>>0]|0))yc((c[p+116>>2]|0)+((o-n|0)*40|0)|0,c[5696+(o<<2)>>2]|0,-1,1,0)|0;o=o+1|0}while(o>>>0>>0)}while(0);do if(!(a[fa>>0]|0)){r=c[ea>>2]|0;q=(c[Y>>2]|0)-ka|0;if(!r){m=0;la=155;break}a[r+148>>0]=v;if(y)c[r+208>>2]=0;o=c[r>>2]|0;p=Sv(q|0,((q|0)<0)<<31>>31|0,1,0)|0;i=L()|0;o:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))la=132;else m=0;else{do if(!(i>>>0>0|((i|0)==0?p>>>0>(e[o+276>>1]|0)>>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];la=o+284|0;c[la>>2]=(c[la>>2]|0)+1;la=133;break o}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;la=132}while(0);if((la|0)==132){m=_d(o,p,i)|0;la=133}do if((la|0)==133){if(!m){m=0;break}ew(m|0,g|0,q|0)|0;a[m+q>>0]=0}while(0);c[r+188>>2]=m;la=136}else la=136;while(0);p:do if((la|0)==136){la=0;q=c[ea>>2]|0;m=q;if(!q){la=155;break}if(s?(a[V>>0]|0)==0:0){la=155;break}r=q+20|0;n=c[r>>2]|0;if((n|0)<832317811)switch(n|0){case 770837923:{la=140;break}default:{}}else switch(n|0){case 832317811:{la=140;break}default:{}}if((la|0)==140){la=0;kc(q)|0}p=c[q>>2]|0;kb(p,q);i=c[q+4>>2]|0;o=q+8|0;n=c[o>>2]|0;if(!i)c[p+4>>2]=n;else{c[i+8>>2]=n;n=c[o>>2]|0}if(n|0)c[n+4>>2]=i;c[r>>2]=1443283912;c[q>>2]=0;do if(p|0){if(c[p+480>>2]|0){Xd(p,q);break p}if((c[p+304>>2]|0)>>>0>m>>>0)break;if((c[p+308>>2]|0)>>>0<=m>>>0)break;r=p+300|0;c[q>>2]=c[r>>2];c[r>>2]=q;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{r=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);if((la|0)==155){la=0;c[k>>2]=m}n=c[ta>>2]|0;q:do if(n){c[ya>>2]=n;Vb(f,t,31408,ya);if(c[da>>2]|0){Xd(f,n);break}m=n;do if((c[ia>>2]|0)>>>0<=m>>>0){if((c[x>>2]|0)>>>0<=m>>>0)break;c[n>>2]=c[ca>>2];c[ca>>2]=n;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{c[z>>2]=t;if(!s){Ne(f,t);break}if(!(c[B>>2]|0))break;Ne(f,0)}while(0);m=c[A>>2]|0;if(!m){n=t;break}while(1){c[A>>2]=c[m+4>>2];r:do if(!(c[da>>2]|0)){n=m;do if((c[ia>>2]|0)>>>0<=n>>>0){if((c[x>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[ca>>2];c[ca>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(f,m);while(0);m=c[A>>2]|0;if(!m){n=t;break}}}while(0);o=c[ua>>2]|0;m=c[M>>2]|0;do if(m|0){if(o|0){if(c[o+480>>2]|0){Xd(o,m);break}t=m;if((c[o+304>>2]|0)>>>0<=t>>>0?(c[o+308>>2]|0)>>>0>t>>>0:0){t=o+300|0;c[m>>2]=c[t>>2];c[t>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{t=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[P>>2]|0;if(m|0)ri(o,m);if(o|0){t=o+272|0;c[t>>2]=(c[t>>2]|0)-(d[I>>0]|0)}switch(n|0){case 513:break;case 17:break d;default:{la=205;break c}}}if((c[C>>2]|0)==0?(sa=c[ma>>2]|0,(sa|0)>0):0){o=0;m=sa;do{n=c[(c[na>>2]|0)+(o<<4)+12>>2]|0;if(b[n+78>>1]&8){dh(n);m=c[ma>>2]|0}o=o+1|0}while((o|0)<(m|0))}if(!u)u=1;else{la=202;break}}if((la|0)==202)if(!(a[V>>0]|0)){ya=c[W>>2]&17;Ra=za;return ya|0}else{og(f);ya=7;Ra=za;return ya|0}else if((la|0)==205)if((n|0)==3082|(a[V>>0]|0)!=0){og(f);ya=7;Ra=za;return ya|0}else{ya=c[W>>2]&n;Ra=za;return ya|0}}else{if((m|0)<1266094736)switch(m|0){case -264537850:break;default:break b}else switch(m|0){case 1266094736:break;default:break b}c[o>>2]=38244;Db(21,38253,o);break a}while(0);c[n>>2]=50924;Db(21,38253,n)}while(0);c[p>>2]=58063;c[p+4>>2]=124395;c[p+8>>2]=31517;Db(21,32001,p);ya=21;Ra=za;return ya|0}function rd(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;o=Ra;Ra=Ra+16|0;n=o;k=c[b+348>>2]|0;if(!k){i=b+340|0;h=b+344|0}else{i=a[e>>0]|0;if(!(i<<24>>24))h=0;else{h=0;j=e;do{j=j+1|0;h=G(h+(d[208+(i&255)>>0]|0)|0,-1640531535)|0;i=a[j>>0]|0}while(i<<24>>24!=0)}h=(h>>>0)%((c[b+336>>2]|0)>>>0)|0;i=k+(h<<3)|0;h=k+(h<<3)+4|0}i=c[i>>2]|0;a:do if(!i)h=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;i=i+-1|0;k=c[h+12>>2]|0;l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-m|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;p=a[k>>0]|0;j=(d[208+(p&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(j|0)!=0))}if(!j)break a;if(!i){h=59292;break}}}while(0);if(!(c[h+8>>2]|0)){Hi(b,e,f,g,0)|0;h=0}else{c[n>>2]=58063;c[n+4>>2]=134381;c[n+8>>2]=31517;Db(21,32001,n);h=21}if(!(a[b+81>>0]|0)){p=c[b+68>>2]&h;Ra=o;return p|0}else{og(b);p=7;Ra=o;return p|0}return 0}function sd(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;p=Ra;Ra=Ra+16|0;o=p;l=c[b+348>>2]|0;if(!l){j=b+340|0;i=b+344|0}else{j=a[e>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=e;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[b+336>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=e;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);if(!(c[i+8>>2]|0)){Hi(b,e,f,g,h)|0;i=0}else{c[o>>2]=58063;c[o+4>>2]=134381;c[o+8>>2]=31517;Db(21,32001,o);i=21}if(!(a[b+81>>0]|0))i=c[b+68>>2]&i;else{og(b);i=7}if(!((h|0)!=0&(i|0)!=0)){Ra=p;return i|0}ab[h&127](g);Ra=p;return i|0}function td(e,f){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=Ra;Ra=Ra+304|0;j=q+16|0;g=q;h=q+296|0;p=q+20|0;c[h>>2]=0;i=c[e+352>>2]|0;if(i|0?(m=i+12|0,(c[m>>2]|0)==0):0){l=c[i+4>>2]|0;gw(p+4|0,0,272)|0;n=p+200|0;a[n>>0]=1;c[p>>2]=e;c[p+132>>2]=1;if(((((ud(p,f,h)|0)==0?(k=c[p+228>>2]|0,(k|0)!=0):0)?(a[e+81>>0]|0)==0:0)?(c[k+12>>2]|0)==0:0)?(c[k+56>>2]|0)==0:0){g=l+4|0;if(!(c[g>>2]|0)){h=k+4|0;c[g>>2]=c[h>>2];f=k+42|0;b[l+42>>1]=b[f>>1]|0;j=k+36|0;g=l+36|0;c[g>>2]=c[g>>2]|c[j>>2]&96;b[f>>1]=0;c[h>>2]=0;if((c[j>>2]&32|0)!=0?(c[(c[c[(c[i>>2]|0)+4>>2]>>2]|0)+52>>2]|0)!=0:0){g=k+8|0;while(1){g=c[g>>2]|0;j=g+55|0;if(((d[j>>0]|d[j+1>>0]<<8)&3)==2)break;else g=g+20|0}g=(b[g+50>>1]|0)!=1&1}else g=0;f=k+8|0;h=c[f>>2]|0;if(h){c[l+8>>2]=h;c[f>>2]=0;c[h+12>>2]=l}}else g=0;c[m>>2]=1;l=g}else o=18;do if((o|0)==18){g=c[h>>2]|0;m=(g|0)==0;c[j>>2]=g;Vb(e,1,m?0:31408,j);if(!m){if(c[e+480>>2]|0){Xd(e,g);l=1;break}m=g;if((c[e+304>>2]|0)>>>0<=m>>>0?(c[e+308>>2]|0)>>>0>m>>>0:0){l=e+300|0;c[g>>2]=c[l>>2];c[l>>2]=g;l=1;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=1;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=1;break}}else l=1}while(0);a[n>>0]=0;j=c[p+8>>2]|0;do if(j|0){k=j+20|0;g=c[k>>2]|0;if((g|0)<832317811)switch(g|0){case 770837923:{o=29;break}default:{}}else switch(g|0){case 832317811:{o=29;break}default:{}}if((o|0)==29)kc(j)|0;i=c[j>>2]|0;kb(i,j);h=c[j+4>>2]|0;f=j+8|0;g=c[f>>2]|0;if(!h)c[i+4>>2]=g;else{c[h+8>>2]=g;g=c[f>>2]|0}if(g|0)c[g+4>>2]=h;c[k>>2]=1443283912;c[j>>2]=0;if(i|0){if(c[i+480>>2]|0){Xd(i,j);break}o=j;if((c[i+304>>2]|0)>>>0<=o>>>0?(c[i+308>>2]|0)>>>0>o>>>0:0){o=i+300|0;c[j>>2]=c[o>>2];c[o>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=c[p+228>>2]|0;do if(g|0){if(e|0?c[e+480>>2]|0:0){Vi(e,g);break}n=g+32|0;o=(c[n>>2]|0)+-1|0;c[n>>2]=o;if(!o)Vi(e,g)}while(0);f=c[p>>2]|0;g=c[p+64>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}o=g;if((c[f+304>>2]|0)>>>0<=o>>>0?(c[f+308>>2]|0)>>>0>o>>>0:0){o=f+300|0;c[g>>2]=c[o>>2];c[o>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{o=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[p+68>>2]|0;if(g|0)ri(f,g);g=p+24|0;if(f|0){p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[g>>0]|0)}a[g>>0]=0;if(!(a[e+81>>0]|0)){e=c[e+68>>2]&l;Ra=q;return e|0}else{og(e);e=7;Ra=q;return e|0}}c[e+64>>2]=21;Ne(e,21);c[g>>2]=58063;c[g+4>>2]=135056;c[g+8>>2]=31517;Db(21,32001,g);e=21;Ra=q;return e|0}function ud(d,f,g){d=d|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,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;V=Ra;Ra=Ra+1280|0;O=V+48|0;M=V+40|0;I=V+32|0;H=V+24|0;G=V+16|0;F=V+8|0;C=V+1272|0;D=V;E=V+1268|0;i=V+56|0;S=c[d>>2]|0;j=c[S+112>>2]|0;if(!(c[S+168>>2]|0))c[S+264>>2]=0;N=d+12|0;c[N>>2]=0;P=d+224|0;c[P>>2]=f;J=i+4|0;c[J>>2]=d;h=i+8|0;c[i>>2]=h;b[h>>1]=0;b[i+10>>1]=0;B=i+1208|0;c[B>>2]=i+1196;T=S+236|0;U=d+124|0;c[U>>2]=c[T>>2];c[T>>2]=d;k=Bi(f,E)|0;j=j-k|0;a:do if((j|0)>=0){w=S+264|0;x=d+188|0;y=d+192|0;z=i+8|0;v=D+4|0;u=C+4|0;l=-1;b:while(1){m=k;t=j;while(1){j=c[E>>2]|0;if((j|0)<=155){s=m;break}if(c[w>>2]|0){Q=10;break b}if((j|0)!=174){Q=13;break}f=f+m|0;j=Bi(f,E)|0;k=t-j|0;if((k|0)<0){Q=7;break a}else{m=j;t=k}}c:do if((Q|0)==13){Q=0;if(!(a[f>>0]|0)){switch(l|0){case 0:{j=f;break a}case 1:{j=0;break}default:j=1}c[E>>2]=j;s=0;break}switch(j|0){case 156:{j=f+6|0;d:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=23;break d}default:{Q=20;break d}}}do if((Q|0)==20){Q=0;if((k|0)>=95){j=59;break}if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==59)Q=25;else j=59;else Q=23}while(0);if((Q|0)==23)Q=25;do if((Q|0)==25){e:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=29;break e}default:{Q=27;break e}}}if((Q|0)==27?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)==59)Q=29;else{j=(k|0)==24?156:59;break}if((Q|0)==29){Q=0;c[C>>2]=59}j=59}while(0);c[E>>2]=j;s=m;break c}case 157:{f:do if((l|0)==23){j=f+4|0;g:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:break g;default:{Q=36;break g}}}do if((Q|0)==36){Q=0;if((k|0)<95?(b[5744+(k<<1)>>1]|0)==59:0)break;switch(k|0){case 22:case 59:{j=157;break f}default:{}}j=59;break f}while(0);j=157}else j=59;while(0);c[E>>2]=j;s=m;break c}case 158:{do if((l|0)==23){j=f+6|0;h:while(1){j=j+(Bi(j,C)|0)|0;k=c[C>>2]|0;switch(k|0){case 174:break;case 59:case 110:case 111:case 156:case 157:{Q=47;break h}default:{Q=45;break h}}}if((Q|0)==45?(Q=0,(k|0)<95):0)if((b[5744+(k<<1)>>1]|0)!=59)if((k|0)==22){j=158;break}else{Q=50;break}else Q=47;if((Q|0)==47)c[C>>2]=59;Q=50}else Q=50;while(0);if((Q|0)==50){Q=0;j=59}c[E>>2]=j;s=m;break c}default:{Q=52;break b}}}while(0);c[x>>2]=f;c[y>>2]=s;q=f;p=c[J>>2]|0;o=c[i>>2]|0;r=j&65535;k=b[o>>1]|0;while(1){n=k&65535;if((k&65535)<=540){l=e[5936+(n<<1)>>1]|0;m=r;while(1){j=m&65535;k=j+l|0;if(k>>>0<=2168?(b[7024+(k<<1)>>1]|0)==m<<16>>16:0){Q=64;break}if((m&65535)>=95){Q=60;break}j=b[5744+(j<<1)>>1]|0;if(!(j<<16>>16)){Q=60;break}else m=j}do if((Q|0)==60){Q=0;j=l+95|0;if(j>>>0<2169?!(m<<16>>16==0?1:(b[7024+(j<<1)>>1]|0)!=95):0){j=11376+(j<<1)|0;break}j=15664+(n<<1)|0}else if((Q|0)==64){Q=0;j=11376+(k<<1)|0}while(0);k=b[j>>1]|0}if((k&65535)<=1161){Q=68;break}k=$i(i,(k&65535)+-1162|0,f,s,p)|0;j=c[i>>2]|0;if(j>>>0<=h>>>0)break;else o=j}do if((Q|0)==68){Q=0;if((k&65535)>=1159){if(k<<16>>16==1160){c[i>>2]=o+-12;break}c[D>>2]=q;c[v>>2]=s;c[C>>2]=f;c[u>>2]=s;j=c[J>>2]|0;if(!(a[f>>0]|0))cd(j,49148,I);else{c[H>>2]=C;cd(j,38502,H)}c[J>>2]=j;aj(j,r,D);break}j=o+12|0;c[i>>2]=j;if(j>>>0<=(c[B>>2]|0)>>>0){b[j>>1]=(k&65535)>540?(k&65535)+378&65535:k;b[o+14>>1]=r;c[o+16>>2]=q;c[o+20>>2]=s;break}c[i>>2]=o;k=c[J>>2]|0;if(o>>>0>z>>>0?(c[i>>2]=o+-12,aj(k,b[o+2>>1]|0,o+4|0),A=c[i>>2]|0,A>>>0>z>>>0):0){j=A;do{r=c[J>>2]|0;c[i>>2]=j+-12;aj(r,b[j+2>>1]|0,j+4|0);j=c[i>>2]|0}while(j>>>0>z>>>0)}cd(k,38790,G);c[J>>2]=k}while(0);f=f+s|0;if(c[N>>2]|0){j=f;break a}l=c[E>>2]|0;k=Bi(f,E)|0;j=t-k|0;if((j|0)<0){Q=7;break a}}if((Q|0)==10){c[N>>2]=9;j=f;break}else if((Q|0)==52){c[F>>2]=m;c[F+4>>2]=f;cd(d,38428,F);j=f;break}}else Q=7;while(0);if((Q|0)==7){c[N>>2]=18;j=f}f=c[i>>2]|0;if(f>>>0>h>>>0)do{c[i>>2]=f+-12;aj(c[J>>2]|0,b[f+2>>1]|0,f+4|0);f=c[i>>2]|0}while(f>>>0>h>>>0);if(!(a[S+81>>0]|0)){h=c[N>>2]|0;switch(h|0){case 101:case 0:break;default:{K=h;Q=90}}}else{c[N>>2]=7;K=7;Q=90}if((Q|0)==90?(L=d+4|0,(c[L>>2]|0)==0):0){switch(K|0){case 516:{h=50738;break}case 100:{h=50760;break}default:{h=K&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}c[M>>2]=h;M=dd(S,31408,M)|0;c[L>>2]=M}h=d+4|0;f=c[h>>2]|0;if(!f)p=0;else{c[g>>2]=f;p=c[N>>2]|0;g=c[P>>2]|0;c[O>>2]=f;c[O+4>>2]=g;Db(p,38455,O);c[h>>2]=0;p=1}c[P>>2]=j;i=d+8|0;j=c[i>>2]|0;if((j|0?(c[d+36>>2]|0)>0:0)?(a[d+18>>0]|0)==0:0){k=c[j>>2]|0;kb(k,j);l=c[j+4>>2]|0;f=j+8|0;h=c[f>>2]|0;if(!l)c[k+4>>2]=h;else{c[l+8>>2]=h;h=c[f>>2]|0}if(h|0)c[h+4>>2]=l;c[j+20>>2]=1443283912;c[j>>2]=0;do if(k){if(c[k+480>>2]|0){Xd(k,j);break}P=j;if((c[k+304>>2]|0)>>>0<=P>>>0?(c[k+308>>2]|0)>>>0>P>>>0:0){P=k+300|0;c[j>>2]=c[P>>2];c[P>>2]=j}else Q=113}else Q=113;while(0);do if((Q|0)==113)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}if(!(a[d+18>>0]|0)){h=d+108|0;f=c[h>>2]|0;do if(f|0){if(c[S+480>>2]|0){Xd(S,f);break}Q=f;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[h>>2]=0;c[d+104>>2]=0}h=c[d+252>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=d+200|0;h=a[f>>0]|0;if(!(h<<24>>24)){h=c[d+228>>2]|0;do if(h|0){if(c[S+480>>2]|0){Vi(S,h);break}P=h+32|0;Q=(c[P>>2]|0)+-1|0;c[P>>2]=Q;if(!Q)Vi(S,h)}while(0);h=a[f>>0]|0}do if((h&255)<=1?(R=c[d+236>>2]|0,R|0):0){Xi(S,c[R+28>>2]|0);h=c[R>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+4>>2]|0;do if(h|0){if(c[S+480>>2]|0){Xd(S,h);break}Q=h;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{Q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[R+12>>2]|0;if(h|0)ni(S,h);h=c[R+16>>2]|0;i:do if(h){k=h+4|0;f=c[h>>2]|0;if((c[k>>2]|0)>0){l=S+480|0;m=S+304|0;n=S+308|0;o=S+300|0;j=0;do{f=c[f+(j<<3)>>2]|0;j:do if(f|0){if(c[l>>2]|0){Xd(S,f);break}i=f;do if((c[m>>2]|0)>>>0<=i>>>0){if((c[n>>2]|0)>>>0<=i>>>0)break;c[f>>2]=c[o>>2];c[o>>2]=f;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);j=j+1|0;f=c[h>>2]|0}while((j|0)<(c[k>>2]|0))}k:do if(f){do if(S|0){i=S+480|0;if(!(c[i>>2]|0)){j=f;if((c[S+304>>2]|0)>>>0>j>>>0)break;if((c[S+308>>2]|0)>>>0<=j>>>0)break;Q=S+300|0;c[f>>2]=c[Q>>2];c[Q>>2]=f}else Xd(S,f);f=i;Q=187;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Q=185;break}else{Q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Q=185;break}}else Q=185;while(0);do if((Q|0)==185){if(!S)break;f=S+480|0;Q=187}while(0);do if((Q|0)==187){if(c[f>>2]|0){Xd(S,h);Q=196;break i}f=h;if((c[S+304>>2]|0)>>>0>f>>>0)break;if((c[S+308>>2]|0)>>>0<=f>>>0)break;Q=S+300|0;c[h>>2]=c[Q>>2];c[Q>>2]=h;Q=196;break i}while(0);do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{P=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);if(!S)h=R;else{h=R;Q=198}}else Q=196;while(0);if((Q|0)==196){h=R;Q=198}if((Q|0)==198){if(c[S+480>>2]|0){Xd(S,h);break}Q=R;if((c[S+304>>2]|0)>>>0<=Q>>>0?(c[S+308>>2]|0)>>>0>Q>>>0:0){Q=S+300|0;c[R>>2]=c[Q>>2];c[Q>>2]=R;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);n=c[d+268>>2]|0;do if(n|0){l:do if((c[n>>2]|0)>0){j=S+480|0;k=S+304|0;l=S+308|0;m=S+300|0;if(!S){f=0;while(1){h=c[n+8+(f<<4)+4>>2]|0;if(h|0)ri(0,h);h=c[n+8+(f<<4)+8>>2]|0;if(h|0)pi(0,h,1);h=c[n+8+(f<<4)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+1|0;if((f|0)>=(c[n>>2]|0))break l}}i=0;do{h=c[n+8+(i<<4)+4>>2]|0;if(h|0)ri(S,h);h=c[n+8+(i<<4)+8>>2]|0;if(h|0)pi(S,h,1);h=c[n+8+(i<<4)>>2]|0;m:do if(h|0){if(c[j>>2]|0){Xd(S,h);break}f=h;do if((c[k>>2]|0)>>>0<=f>>>0){if((c[l>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[m>>2];c[m>>2]=h;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0}while((i|0)<(c[n>>2]|0))}while(0);if(S|0){if(c[S+480>>2]|0){Xd(S,n);break}R=n;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[n>>2]=c[R>>2];c[R>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{R=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);h=c[d+216>>2]|0;do if(h|0){if(S|0){if(c[S+480>>2]|0){Xd(S,h);break}R=h;if((c[S+304>>2]|0)>>>0<=R>>>0?(c[S+308>>2]|0)>>>0>R>>>0:0){R=S+300|0;c[h>>2]=c[R>>2];c[R>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);m=d+112|0;h=c[m>>2]|0;n:do if(h|0){i=S+480|0;j=S+304|0;k=S+308|0;l=S+300|0;if(!S)while(1){c[m>>2]=c[h>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[m>>2]|0;if(!h)break n}do{c[m>>2]=c[h>>2];o:do if(!(c[i>>2]|0)){f=h;do if((c[j>>2]|0)>>>0<=f>>>0){if((c[k>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{R=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(S,h);while(0);h=c[m>>2]|0}while((h|0)!=0)}while(0);i=d+256|0;h=c[i>>2]|0;if(!h){S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}f=S+480|0;if(!S){do{f=c[h+76>>2]|0;c[i>>2]=f;d=h+32|0;S=(c[d>>2]|0)+-1|0;c[d>>2]=S;if(!S){Vi(0,h);h=c[i>>2]|0}else h=f}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}do{c[i>>2]=c[h+76>>2];if(!((c[f>>2]|0)==0?(R=h+32|0,d=(c[R>>2]|0)+-1|0,c[R>>2]=d,(d|0)!=0):0))Vi(S,h);h=c[i>>2]|0}while((h|0)!=0);S=c[U>>2]|0;c[T>>2]=S;c[U>>2]=0;Ra=V;return p|0}function vd(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+48|0;f=i+32|0;h=i+16|0;g=i;c[g>>2]=e;do if((d|0)==1){d=c[b+352>>2]|0;if(!d){c[h>>2]=58063;c[h+4>>2]=135531;c[h+8>>2]=31517;Db(21,32001,h);break}b=(c[g>>2]|0)+(4-1)&~(4-1);h=c[b>>2]|0;c[g>>2]=b+4;a[(c[d>>2]|0)+16>>0]=h;h=0;Ra=i;return h|0}else{c[f>>2]=58063;c[f+4>>2]=135539;c[f+8>>2]=31517;Db(21,32001,f)}while(0);c[b+64>>2]=21;Ne(b,21);h=21;Ra=i;return h|0}function wd(d){d=d|0;var f=0,g=0,h=0;a:do if(!d)f=ob(40,0)|0;else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){d=0;return d|0}}else{do if((e[d+276>>1]|0)>=40){g=d+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}g=d+296|0;f=c[g>>2]|0;if(!f){f=d+292|0;break}else{c[g>>2]=c[f>>2];h=d+284|0;c[h>>2]=(c[h>>2]|0)+1;break a}}else f=d+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(d,40,0)|0}while(0);if(!f){d=0;return d|0}g=f;h=g+40|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));b[f+8>>1]=1;c[f+32>>2]=d;d=f;return d|0}function xd(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+40|0;f=h+32|0;e=h+16|0;d=h;if(c[7380]|0){c[e>>2]=58063;c[e+4>>2]=154986;c[e+8>>2]=31517;Db(21,32001,e);b=21;Ra=h;return b|0}c[d>>2]=b;do switch(a|0){case 4:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7335]=c[a>>2];c[7336]=c[a+4>>2];c[7337]=c[a+8>>2];c[7338]=c[a+12>>2];c[7339]=c[a+16>>2];c[7340]=c[a+20>>2];c[7341]=c[a+24>>2];c[7342]=c[a+28>>2];a=0;break}case 5:{if(!(c[7335]|0)){c[f>>2]=30308;xd(4,f)|0}b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=c[7335];c[a+4>>2]=c[7336];c[a+8>>2]=c[7337];c[a+12>>2]=c[7338];c[a+16>>2]=c[7339];c[a+20>>2]=c[7340];c[a+24>>2]=c[7341];c[a+28>>2]=c[7342];a=0;break}case 9:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7324]=a;a=0;break}case 27:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7329]=a;a=0;break}case 7:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7374]=a;a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7375]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7376]=a;a=0;break}case 24:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[a>>2]=160;a=0;break}case 14:{a=0;break}case 15:{a=1;break}case 18:{a=(c[d>>2]|0)+(4-1)&~(4-1);e=c[a>>2]|0;c[d>>2]=a+4;a=29408;d=e;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 19:{if(!(c[7354]|0)){c[g>>2]=30340;xd(18,g)|0}e=(c[d>>2]|0)+(4-1)&~(4-1);a=c[e>>2]|0;c[d>>2]=e+4;d=29408;e=a+52|0;do{c[a>>2]=c[d>>2];a=a+4|0;d=d+4|0}while((a|0)<(e|0));a=0;break}case 13:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7332]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7333]=a;a=0;break}case 16:{a=(c[d>>2]|0)+(4-1)&~(4-1);b=c[a>>2]|0;c[d>>2]=a+4;c[7387]=b;b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7388]=a;a=0;break}case 17:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7327]=a;a=0;break}case 20:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7328]=a;a=0;break}case 22:{c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[d>>2]=((c[d>>2]|0)+(8-1)&~(8-1))+8;c[7370]=0;c[7371]=0;c[7372]=0;c[7373]=0;a=0;break}case 25:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7379]=a;a=0;break}case 26:{b=(c[d>>2]|0)+(4-1)&~(4-1);a=c[b>>2]|0;c[d>>2]=b+4;c[7334]=a;a=0;break}default:a=1}while(0);b=a;Ra=h;return b|0}function yd(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=Ra;Ra=Ra+16|0;h=n;c[h>>2]=f;do switch(e|0){case 1e3:{l=(c[h>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[h>>2]=l+4;c[c[b+16>>2]>>2]=m;m=0;Ra=n;return m|0}case 1001:{j=(c[h>>2]|0)+(4-1)&~(4-1);k=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);m=c[j>>2]|0;c[h>>2]=j+4;m=zd(b,k,l,m)|0;Ra=n;return m|0}case 1002:{k=0;break}case 1003:{k=1;break}case 1004:{k=2;break}case 1005:{k=3;break}case 1006:{k=4;break}case 1007:{k=5;break}case 1008:{k=6;break}case 1009:{k=7;break}case 1010:{k=8;break}case 1011:{k=9;break}default:{m=1;Ra=n;return m|0}}while(0);j=(c[h>>2]|0)+(4-1)&~(4-1);e=c[j>>2]|0;c[h>>2]=j+4;j=(c[h>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[h>>2]=j+4;j=b+32|0;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;if((e|0)<=0)if(!e){e=h&~c[2208+(k<<3)+4>>2];f=i;m=17}else{e=h;f=i}else{e=h|c[2208+(k<<3)+4>>2];f=i;m=17}if((m|0)==17){m=j;c[m>>2]=e;c[m+4>>2]=f}if(!((h|0)==(e|0)&(i|0)==(f|0))?(g=c[b+4>>2]|0,g|0):0)do{m=g+149|0;b=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=b;a[m+1>>0]=b>>8;g=c[g+8>>2]|0}while((g|0)!=0);if(!l){m=0;Ra=n;return m|0}c[l>>2]=(0?1:(c[j>>2]&c[2208+(k<<3)+4>>2]|0)!=0)&1;m=0;Ra=n;return m|0}function zd(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0;q=d+296|0;h=c[q>>2]|0;if(!h)i=0;else{i=0;do{h=c[h>>2]|0;i=i+1|0}while((h|0)!=0)}p=d+300|0;h=c[p>>2]|0;if(!h)h=0;else{j=0;do{h=c[h>>2]|0;j=j+1|0}while((h|0)!=0);h=j}m=d+280|0;if(((c[m>>2]|0)-(h+i)|0)>0){e=5;return e|0}n=d+272|0;o=d+278|0;do if(a[o>>0]|0?(k=c[d+304>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);l=f&-8;k=(l|0)<5?0:l;i=(g|0)>0?g:0;if(!((g|0)<1|(k|0)==0))if(!e){h=Yv(k|0,((k|0)<0)<<31>>31|0,i|0,0)|0;g=Sv(h|0,L()|0,-1,-1)|0;f=L()|0;do if(!(f>>>0>0|(f|0)==0&g>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;break}f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){g=c[14978]|0;j=Tv(h|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=g>>>0)&1}j=Wa[c[29340>>2]&127](f)|0;if(j){h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else j=0}else j=0;while(0);if(!j)h=0;else{h=j;i=(Wa[c[29352>>2]&127](j)|0)/(l|0)|0}}else h=e;else{h=0;k=0}j=d+304|0;c[j>>2]=h;c[q>>2]=0;c[p>>2]=0;b[d+276>>1]=k;if(!h){c[j>>2]=d;c[d+308>>2]=d;c[n>>2]=1;a[o>>0]=0;c[m>>2]=0;e=0;return e|0}c[m>>2]=i;if((i|0)>0){j=0;while(1){c[h>>2]=j;f=h+k|0;j=h;if((i|0)<=1)break;else{h=f;i=i+-1|0}}c[q>>2]=h;h=f}c[d+308>>2]=h;c[n>>2]=0;a[o>>0]=(e|0)==0&1;e=0;return e|0}function Ad(a){a=a|0;return c[a+100>>2]|0}function Bd(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=Ra;Ra=Ra+32|0;o=p+24|0;g=p+8|0;f=p;if(!b){o=0;Ra=p;return o|0}n=b+96|0;e=c[n>>2]|0;a:do if((e|0)>=-264537850)if((e|0)<1266094736)switch(e|0){case -264537850:break a;default:{h=3;break a}}else switch(e|0){case 1266094736:break a;default:{h=3;break a}}else switch(e|0){case -1607883113:break;default:h=3}while(0);if((h|0)==3){c[f>>2]=50924;Db(21,38253,f);c[g>>2]=58063;c[g+4>>2]=155713;c[g+8>>2]=31517;Db(21,32001,g);o=21;Ra=p;return o|0}if(!(a[b+88>>0]&8)){Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;g=j+8|0;e=c[g>>2]|0;if(e|0?(m=c[(c[e>>2]|0)+68>>2]|0,m|0):0)Wa[m&127](e)|0;c[j+20>>2]=0;f=c[j>>2]|0;e=j+12|0;l=(c[e>>2]|0)+-1|0;c[e>>2]=l;do if(!l){e=c[g>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}l=j;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}else{Za[c[b+196>>2]&127](8,c[b+200>>2]|0,b,0)|0;Bp(b);e=b+356|0;k=c[e>>2]|0;if(k|0){c[e>>2]=0;i=b+332|0;if((c[i>>2]|0)>0){h=0;do{j=c[k+(h<<2)>>2]|0;f=j+8|0;e=c[f>>2]|0;if(e|0?(l=c[(c[e>>2]|0)+68>>2]|0,l|0):0)Wa[l&127](e)|0;c[j+20>>2]=0;g=c[j>>2]|0;e=j+12|0;m=(c[e>>2]|0)+-1|0;c[e>>2]=m;do if(!m){e=c[f>>2]|0;if(e|0)Wa[c[(c[e>>2]|0)+16>>2]&127](e)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}m=j;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[j>>2]=c[m>>2];c[m>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);h=h+1|0}while((h|0)<(c[i>>2]|0))}do if(!(c[b+480>>2]|0)){m=k;if((c[b+304>>2]|0)>>>0<=m>>>0?(c[b+308>>2]|0)>>>0>m>>>0:0){m=b+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(b,k);while(0);c[i>>2]=0}}b:do if(!d){c:do if(!(c[b+4>>2]|0)){f=c[b+20>>2]|0;if((f|0)<=0)break b;g=c[b+16>>2]|0;e=0;while(1){d=c[g+(e<<4)+4>>2]|0;if(d|0?c[d+16>>2]|0:0)break c;e=e+1|0;if((e|0)>=(f|0))break b}}while(0);Vb(b,5,50150,o);o=5;Ra=p;return o|0}while(0);c[n>>2]=1691352191;fc(b);o=0;Ra=p;return o|0}function Cd(a){a=a|0;return Bd(a,1)|0}function Dd(a,b,d){a=a|0;b=b|0;d=d|0;if(((b*1e3|0)+1e3|0)>(c[a+448>>2]|0)){d=0;return d|0}d=c[a>>2]|0;Xa[c[d+60>>2]&255](d,1e6)|0;d=1;return d|0}function Ed(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;d=Hd(b,d,e,f,g,h,i,j,0,0,0)|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);b=7;return b|0}else{b=c[b+68>>2]&d;return b|0}return 0}function Fd(a,b,d,e,f,g,h,i,j,k,l){a=a|0;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;l=l|0;var m=0;do if(l){m=ob(12,0)|0;if(!m){Fc(a);ab[l&127](f);b=1;break}c[m>>2]=0;c[m+4>>2]=l;c[m+8>>2]=f;b=Hd(a,b,d,e,f,g,h,i,j,k,m)|0;if(!(c[m>>2]|0)){ab[l&127](f);qb(m)}}else b=Hd(a,b,d,e,f,g,h,i,j,k,0)|0;while(0);return ic(a,b)|0}function Gd(a,b,c,d,e,f,g,h,i){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;return Fd(a,b,c,d,e,f,g,h,0,0,i)|0}function Hd(b,e,f,g,h,i,j,k,l,m,n){b=b|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;var o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+32|0;p=s+16|0;o=s;if((((e|0?(r=(i|0)!=0,!(r&(k|0)!=0)):0)?!((j|0)==0^(k|0)==0):0)?!((f+1|0)>>>0>128|(l|0)==0^(m|0)==0):0)?((Eu(e)|0)&1073741568|0)==0:0){q=g&2048;switch(g&7){case 4:{o=2;break}case 5:{o=Hd(b,e,f,q|1,h,i,j,k,l,m,n)|0;if(o|0){m=o;Ra=s;return m|0}o=Hd(b,e,f,q|2,h,i,j,k,l,m,n)|0;if(!o)o=3;else{m=o;Ra=s;return m|0}break}default:o=g&7}g=o&255;t=Jd(b,e,f,g,0)|0;if((t|0?(c[t+4>>2]&3|0)==(o|0):0)?(a[t>>0]|0)==(f|0):0){if(c[b+168>>2]|0){Vb(b,5,50805,p);t=5;Ra=s;return t|0}o=c[b+4>>2]|0;if(o|0)do{t=o+149|0;p=(d[t>>0]|d[t+1>>0]<<8)&-4|1;a[t>>0]=p;a[t+1>>0]=p>>8;o=c[o+8>>2]|0}while((o|0)!=0)}o=Jd(b,e,f,g,1)|0;if(!o){t=7;Ra=s;return t|0}g=o+36|0;p=c[g>>2]|0;do if(p|0?(t=(c[p>>2]|0)+-1|0,c[p>>2]=t,(t|0)==0):0){ab[c[p+4>>2]&127](c[p+8>>2]|0);if(b|0){if(c[b+480>>2]|0){Xd(b,p);break}t=p;if((c[b+304>>2]|0)>>>0<=t>>>0?(c[b+308>>2]|0)>>>0>t>>>0:0){t=b+300|0;c[p>>2]=c[t>>2];c[t>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{t=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(n|0)c[n>>2]=(c[n>>2]|0)+1;c[g>>2]=n;t=o+4|0;c[t>>2]=c[t>>2]&3|q;c[o+16>>2]=r?i:j;c[o+20>>2]=k;c[o+24>>2]=l;c[o+28>>2]=m;c[o+8>>2]=h;a[o>>0]=f;t=0;Ra=s;return t|0}c[o>>2]=58063;c[o+4>>2]=156338;c[o+8>>2]=31517;Db(21,32001,o);t=21;Ra=s;return t|0}function Id(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=Ra;Ra=Ra+16|0;if(Jd(b,d,e,1,0)|0){b=0;Ra=j;return b|0}i=Bb(d,j)|0;if(!i){b=7;Ra=j;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](12)|0;if(!f)h=14;else{g=f;h=23}}else{f=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=k>>>0)&1}g=Wa[c[29340>>2]&127](f)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;h=23}else h=23}else h=14}do if((h|0)==14){f=b+81|0;if((a[f>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[f>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;f=b+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[b+236>>2]|0;if(f|0)c[f+12>>2]=7}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=1;break}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=1;break}}else if((h|0)==23){c[g>>2]=0;c[g+4>>2]=90;c[g+8>>2]=i;f=Hd(b,d,e,1,i,174,0,0,0,0,g)|0;if(!(c[g>>2]|0)){if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{k=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);if((f|0)==3082|(a[b+81>>0]|0)!=0){og(b);k=7;Ra=j;return k|0}else{k=c[b+68>>2]&f;Ra=j;return k|0}return 0}function Jd(b,f,g,h,i){b=b|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;if(!f)t=0;else t=(Eu(f)|0)&1073741823;u=b+364|0;m=c[b+376>>2]|0;if(!m){k=b+368|0;j=b+372|0}else{k=a[f>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=f;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[u>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[f>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);j=c[j+8>>2]|0;b:do if(!j){l=0;j=0}else{o=h&255;if((g|0)==-2){l=0;k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break b}}}l=0;n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;break}else n=k}}while(0);c:do if(!(i<<24>>24)){if(l|0?(c[b+24>>2]&2|0)==0:0){q=l;r=0;o=94;break}o=d[208+(d[f>>0]|0)>>0]|0;j=c[59088+((((t+o|0)>>>0)%23|0)<<2)>>2]|0;if(j){while(1){m=c[j+32>>2]|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-o|0;if(!(v<<24>>24==0|(k|0)!=0)){n=f;do{m=m+1|0;n=n+1|0;v=a[m>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k)break;j=c[j+36>>2]|0;if(!j){j=0;o=46;break c}}if(!j){j=0;o=46}else{o=h&255;if((g|0)==-2){k=0;while(1){o=(c[j+16>>2]|0)==0?0:6;v=(o|0)>(k|0);k=v?o:k;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break c}}}n=0;while(1){v=a[j>>0]|0;k=v<<24>>24;do if(!(v<<24>>24>-1&(k|0)!=(g|0))){k=(k|0)==(g|0)?4:1;m=c[j+4>>2]|0;if((m&3|0)==(o|0)){k=k|2;break}else{k=((m&o)>>>1&1)+k|0;break}}else k=0;while(0);v=(k|0)>(n|0);k=v?k:n;l=v?j:l;j=c[j+12>>2]|0;if(!j){j=k;o=46;break}else n=k}}}else{p=l;s=0;o=93}}else o=46;while(0);d:do if((o|0)==46){k=i<<24>>24!=0;if(k&(j|0)<6){n=t+41|0;i=(b|0)==0;e:do if(i){v=Sv(n|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&v>>>0>2147483390)break d;if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](n)|0;o=71;break}j=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){v=c[14978]|0;m=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k)break d;j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;m=k}else m=k}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)break d}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0>>0:0))){k=b+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}k=b+296|0;j=c[k>>2]|0;if(!j){j=b+292|0;break}else{c[k>>2]=c[j>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=71;break e}}else j=b+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(b,n,0)|0;o=71}while(0);if((o|0)==71)if(!j)break;else m=j;gw(m|0,0,n|0)|0;j=m+40|0;l=m+32|0;c[l>>2]=j;a[m>>0]=g;c[m+4>>2]=h&255;ew(j|0,f|0,t+1|0)|0;k=a[j>>0]|0;if(k<<24>>24){do{a[j>>0]=a[208+(k&255)>>0]|0;j=j+1|0;k=a[j>>0]|0}while(k<<24>>24!=0);j=c[l>>2]|0}j=mi(u,j,m)|0;if((j|0)!=(m|0)){c[m+12>>2]=j;v=m;return v|0}do if(!i){if(c[b+480>>2]|0){Xd(b,m);break}v=m;if((c[b+304>>2]|0)>>>0<=v>>>0?(c[b+308>>2]|0)>>>0>v>>>0:0){v=b+300|0;c[m>>2]=c[v>>2];c[v>>2]=m}else o=83}else o=83;while(0);do if((o|0)==83)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{v=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);j=b+81|0;if(a[j>>0]|0){v=0;return v|0}if(a[b+82>>0]|0){v=0;return v|0}a[j>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;j=b+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[b+236>>2]|0;if(!j){v=0;return v|0}c[j+12>>2]=7;v=0;return v|0}else{p=l;s=k;o=93}}while(0);if((o|0)==93?p|0:0){q=p;r=s;o=94}if((o|0)==94?r|(c[q+16>>2]|0)!=0:0){v=q;return v|0}v=0;return v|0}function Kd(a,b,d){a=a|0;b=b|0;d=d|0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=c[(c[a+4>>2]|0)+8>>2];b=Bb(50868,b)|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,-1,1,-1)|0;if(!b){Ra=d;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=d;return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=d;return}}function Ld(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((a|0)>(d|0))return 0;Md(b,c,0,0,0)|0;return 0}function Md(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;q=Ra;Ra=Ra+16|0;o=q;if(g|0)c[g>>2]=-1;if(h|0)c[h>>2]=-1;if(f>>>0>3){b=21;Ra=q;return b|0}if((e|0)!=0?(i=a[e>>0]|0,i<<24>>24!=0):0){n=c[b+20>>2]|0;j=n+-1|0;a:do if((n|0)>0){n=208+(i&255)|0;i=j;m=(c[b+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){l=a[k>>0]|0;j=(d[208+(l&255)>>0]|0)-(d[n>>0]|0)|0;if(!(l<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!i)break;j=i+-1|0;if((i|0)>0){i=j;m=m+-16|0}else{i=j;break a}}i=109-(d[n>>0]|0)|0;if(!i){j=e;k=50919;do{k=k+1|0;j=j+1|0;r=a[k>>0]|0;i=(d[208+(r&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(i|0)!=0))}i=((i|0)!=0)<<31>>31}else i=j;while(0);if((i|0)<0){c[o>>2]=e;Vb(b,1,31432,o);i=1}else p=23}else{i=10;p=23}do if((p|0)==23){c[b+404>>2]=0;i=Nd(b,i,f,g,h)|0;c[b+64>>2]=i;if(i|0){Ne(b,i);break}if(!(c[b+260>>2]|0))i=0;else{Ne(b,0);i=0}}while(0);if((i|0)==3082|(a[b+81>>0]|0)!=0){og(b);i=7}else i=c[b+68>>2]&i;if(c[b+168>>2]|0){r=i;Ra=q;return r|0}c[b+264>>2]=0;r=i;Ra=q;return r|0}function Nd(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;o=b+20|0;k=c[o>>2]|0;if((k|0)<=0){n=0;o=0;f=1;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}n=b+16|0;m=(f|0)==0;if((e|0)==10){b=c[(c[n>>2]|0)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;j=c[i+216>>2]|0;if(!j)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(j,l,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;j=(b|0)==5;i=j?0:b;j=j&1;b=(i|0)==0;if(!(b&(k|0)>1)){n=j;o=i;f=b;n=(n|0)!=0;n=f&n;o=n?5:o;return o|0}h=1;do{b=c[(c[n>>2]|0)+(h<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;g=c[b>>2]|0;c[i+4>>2]=g;if(!(a[i+20>>0]|0)){i=c[i>>2]|0;l=c[i+216>>2]|0;if(!l)b=0;else{if(m)b=0;else b=c[i+176>>2]|0;b=Qf(l,g,f,b,c[i+180>>2]|0,d[i+11>>0]|0,c[i+152>>2]|0,c[i+208>>2]|0,0,0)|0;k=c[o>>2]|0}}else b=6}else b=0;e=(b|0)==5;i=e?0:b;j=e?1:j;h=h+1|0;b=(i|0)==0}while(b&(h|0)<(k|0));o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}if(m){m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,0,0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}else{m=0;j=0;while(1){if((m|0)==(e|0)){b=c[(c[n>>2]|0)+(e<<4)+4>>2]|0;if(b){i=c[b+4>>2]|0;l=c[b>>2]|0;c[i+4>>2]=l;if(!(a[i+20>>0]|0)){b=c[i>>2]|0;i=c[b+216>>2]|0;if(!i)b=0;else{b=Qf(i,l,f,c[b+176>>2]|0,c[b+180>>2]|0,d[b+11>>0]|0,c[b+152>>2]|0,c[b+208>>2]|0,g,h)|0;k=c[o>>2]|0}}else b=6}else b=0;i=(b|0)==5;j=i?1:j;i=i?0:b;l=0;g=0}else{i=0;l=h}m=m+1|0;b=(i|0)==0;if(!(b&(m|0)<(k|0)))break;else h=l}o=(j|0)!=0;o=b&o;o=o?5:i;return o|0}return 0}function Od(a,b){a=a|0;b=b|0;return Pd(a,b,6,0)|0}function Pd(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,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;H=Ra;Ra=Ra+128|0;F=H+88|0;E=H+80|0;z=H+64|0;y=H+56|0;x=H+48|0;v=H+32|0;u=H+24|0;t=H+16|0;q=H;w=H+112|0;r=H+104|0;G=H+108|0;s=H+100|0;c[r>>2]=f;c[G>>2]=0;c[s>>2]=0;c[e>>2]=0;h=mb()|0;if(h|0){G=h;Ra=H;return G|0}if((f&32768|0)==0&(c[7325]|0)!=0)k=(f&65536|0)==0?c[7326]|0:1;else k=0;if(!(f&262144)){if(c[7378]|0){f=f|131072;c[r>>2]=f}}else{f=f&-131073;c[r>>2]=f}p=f&-655129;c[r>>2]=p;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](488)|0;if(!h){h=0;B=148}else B=19}else{h=Wa[c[29356>>2]&127](488)|0;if((c[14985]|0)>>>0<488)c[14985]=488;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){D=c[14978]|0;C=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&C>>>0<=D>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(h){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;B=19}else B=19}else{h=0;B=148}}a:do if((B|0)==19){gw(h|0,0,488)|0;if(k|0)c[h+12>>2]=8;C=h+68|0;c[C>>2]=255;c[h+20>>2]=2;D=h+96|0;c[D>>2]=-264537850;n=h+16|0;c[n>>2]=h+412;o=h+272|0;c[o>>2]=1;i=h+108|0;j=2288;k=i+44|0;do{c[i>>2]=c[j>>2];i=i+4|0;j=j+4|0}while((i|0)<(k|0));c[h+152>>2]=0;a[h+79>>0]=1;a[h+84>>0]=-1;m=29480;A=c[m+4>>2]|0;i=h+48|0;c[i>>2]=c[m>>2];c[i+4>>2]=A;c[h+92>>2]=0;c[h+156>>2]=2147483647;i=h+32|0;c[i>>2]=295008;c[i+4>>2]=0;i=h+380|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;A=h+336|0;c[A>>2]=0;c[A+4>>2]=0;c[A+8>>2]=0;c[A+12>>2]=0;Qd(h,34049,1,0,78,0)|0;Qd(h,34049,3,0,78,0)|0;Qd(h,34049,2,0,78,0)|0;Qd(h,43602,1,0,79,0)|0;Qd(h,50932,1,1,78,0)|0;A=h+81|0;b:do if(!(a[A>>0]|0)){k=c[h+392>>2]|0;if(!k){j=h+384|0;i=h+388|0}else{i=783505461%((c[i>>2]|0)>>>0)|0;j=k+(i<<3)|0;i=k+(i<<3)+4|0}j=c[j>>2]|0;c:do if(!j)i=59292;else while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)+-98|0;if(!(m<<24>>24==0|(k|0)!=0)){m=34049;do{l=l+1|0;m=m+1|0;I=a[l>>0]|0;k=(d[208+(I&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(k|0)!=0))}if(!k)break c;if(!j){i=59292;break}}while(0);c[h+8>>2]=c[i+8>>2];c[h+60>>2]=p;d:do if(!(1<<(f&7)&70)){c[q>>2]=58063;c[q+4>>2]=157776;c[q+8>>2]=31517;Db(21,32001,q);i=21}else{i=dn(g,b,r,h,G,s)|0;switch(i|0){case 0:break;case 7:{if(a[A>>0]|0){i=7;break d}if(a[h+82>>0]|0){i=7;break d}a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f){i=7;break d}c[f+12>>2]=7;i=7;break d}default:break d}f=Pe(c[h>>2]|0,c[G>>2]|0,h,(c[n>>2]|0)+4|0,0,c[r>>2]|256)|0;e:do if((f|0)<3082){switch(f|0){case 0:break;default:{B=46;break e}}f=c[(c[n>>2]|0)+4>>2]|0;c[(c[f+4>>2]|0)+4>>2]=c[f>>2];f=en(h,f)|0;c[(c[n>>2]|0)+12>>2]=f;if(!(a[A>>0]|0))a[h+78>>0]=a[f+77>>0]|0;B=en(h,0)|0;I=c[n>>2]|0;c[I+28>>2]=B;c[I>>2]=50919;a[I+8>>0]=3;c[I+16>>2]=31427;a[I+24>>0]=1;c[D>>2]=-1607883113;if(a[A>>0]|0){B=148;break a}p=h+64|0;c[p>>2]=0;if(c[h+260>>2]|0)Ne(h,0);do if((Id(h,50938,2)|0)==7?(a[A>>0]|0)==0:0){if(a[h+82>>0]|0)break;a[A>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;c[o>>2]=(c[o>>2]|0)+1;f=c[h+236>>2]|0;if(!f)break;c[f+12>>2]=7}while(0);f=c[D>>2]|0;f:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=62;break f}default:{B=61;break f}}else switch(f|0){case 1266094736:{B=62;break f}default:{B=61;break f}}else switch(f|0){case -1607883113:{B=62;break}default:B=61}while(0);g:do if((B|0)==61){c[u>>2]=50924;Db(21,38253,u);c[v>>2]=58063;c[v+4>>2]=157091;c[v+8>>2]=31517;Db(21,32001,v);f=21;B=142}else if((B|0)==62){if(a[A>>0]|0){f=7;B=142;break}f=c[C>>2]&c[p>>2];if(f|0){B=142;break}h:do if(0){f=1;k=0;i=0;do{j=c[0+(k<<2)>>2]|0;c[w>>2]=0;if(j){i=Ya[j&127](h,w,0)|0;if(i){c[x>>2]=c[w>>2];Vb(h,i,50944,x);f=0}i=c[w>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);if(!f)break h;else i=0}k=k+1|0}while(k>>>0>>0)}while(0);f=c[D>>2]|0;i:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:break i;default:{B=78;break i}}else switch(f|0){case 1266094736:break i;default:{B=78;break i}}else switch(f|0){case -1607883113:break;default:B=78}while(0);if((B|0)==78){c[y>>2]=50924;Db(21,38253,y);c[z>>2]=58063;c[z+4>>2]=157091;c[z+8>>2]=31517;Db(21,32001,z);break b}if(a[A>>0]|0)break b;if(c[C>>2]&c[p>>2]|0)break b;f=rd(h,51142,30516,0)|0;if(f|0){B=142;break}if(mb()|0){f=7;B=142;break}do if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](20)|0;if(!f){f=7;B=142;break g}else i=f}else{f=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){I=c[14978]|0;z=Tv(i|0,j|0,f|0,((f|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&z>>>0<=I>>>0)&1}i=Wa[c[29340>>2]&127](f)|0;if(!i){f=7;B=142;break g}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0<=(c[14987]|0)>>>0)break;c[14987]=f}while(0);a[i>>0]=1;m=i+1|0;a[m>>0]=1;n=i+4|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;do if(!(Ep(i,50983,7,30612)|0)){if(Ep(i,50990,7,30640)|0){f=7;B=111;break}if(Ep(i,50997,10,30488)|0){f=7;B=111;break}f=Hd(h,51007,1,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Hd(h,51007,2,5,i,175,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=111;break}f=c[C>>2]&f;if(f|0){B=111;break}f=Id(h,51022,-1)|0;if(f|0){B=111;break}f=Id(h,51030,1)|0;if(f|0){B=111;break}f=Id(h,51038,1)|0;if(f|0){B=111;break}f=Id(h,51038,2)|0;if(f|0){B=111;break}f=Id(h,37598,1)|0;if(f|0){B=111;break}f=sd(h,51048,30392,i,91)|0;if(f|0){B=142;break g}f=sd(h,51053,30392,i,0)|0;if(f|0){B=142;break g}f=rd(h,55534,30668,i)|0}else{f=7;B=111}while(0);do if((B|0)==111){k=i+8|0;j=c[k>>2]|0;c[k>>2]=0;k=i+16|0;l=c[k>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[k>>2]=0;c[i+12>>2]=0;if(j|0)do{k=j;j=c[j>>2]|0;do if(a[m>>0]|0){l=c[k+12>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{I=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);c[n>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if((f|0)==0&(a[A>>0]|0)==0){f=Hd(h,55598,2,1,0,176,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55608,1,1,0,177,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=Hd(h,55619,-1,1,0,178,0,0,0,0,0)|0;if((f|0)==3082|(a[A>>0]|0)!=0){og(h);f=7;B=142;break}f=c[C>>2]&f;if(f|0){B=142;break}f=sd(h,55630,30764,0,0)|0;if(f|0){B=142;break}f=sd(h,55636,30764,1,0)|0}if(f|0)B=142}while(0);if((B|0)==142){c[p>>2]=f;Ne(h,f)}zd(h,0,c[7332]|0,c[7333]|0)|0;c[h+240>>2]=76;c[h+244>>2]=1e3;break b}else switch(f|0){case 3082:{f=7;break}default:B=46}while(0);c[h+64>>2]=f;Ne(h,f);break b}while(0);f=c[s>>2]|0;I=(f|0)==0;c[t>>2]=f;Vb(h,i,I?0:31408,t);if(!I)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{I=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[D>>2]|0;j:do if((f|0)>=-264537850)if((f|0)<1266094736)switch(f|0){case -264537850:{B=146;break j}default:{B=145;break j}}else switch(f|0){case 1266094736:{B=146;break j}default:{B=145;break j}}else switch(f|0){case -1607883113:{B=146;break}default:B=145}while(0);if((B|0)==145){c[E>>2]=50924;Db(21,38253,E);c[F>>2]=58063;c[F+4>>2]=157091;c[F+8>>2]=31517;Db(21,32001,F);f=21}else if((B|0)==146){if(a[A>>0]|0){B=148;break}f=c[C>>2]&c[h+64>>2];switch(f|0){case 7:{B=148;break a}case 0:break a;default:{}}}c[D>>2]=1266094736}while(0);if((B|0)==148){Bd(h,0)|0;f=7;h=0}c[e>>2]=h;h=c[G>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);I=f&255;Ra=H;return I|0}function Qd(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;t=Ra;Ra=Ra+32|0;k=t+16|0;j=t;s=f&255;switch(f<<24>>24){case 4:case 8:{r=2;break}default:if((s+-1|0)>>>0>2){c[j>>2]=58063;c[j+4>>2]=157148;c[j+8>>2]=31517;Db(21,32001,j);s=21;Ra=t;return s|0}else r=s}q=r&255;j=Zi(b,q,e,0)|0;if(j|0?c[j+12>>2]|0:0){if(c[b+168>>2]|0){Vb(b,5,57995,k);s=5;Ra=t;return s|0}f=c[b+4>>2]|0;if(f|0)do{p=f+149|0;o=(d[p>>0]|d[p+1>>0]<<8)&-4|1;a[p>>0]=o;a[p+1>>0]=o>>8;f=c[f+8>>2]|0}while((f|0)!=0);p=j+4|0;f=a[p>>0]|0;if((r|0)==(f&-9&255|0)){m=c[b+392>>2]|0;if(!m){k=b+384|0;j=b+388|0}else{k=a[e>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=e;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[b+380>>2]|0)>>>0)|0;k=m+(j<<3)|0;j=m+(j<<3)+4|0}k=c[k>>2]|0;a:do if(!k)j=59292;else{o=d[208+(d[e>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;n=a[m>>0]|0;l=(d[208+(n&255)>>0]|0)-o|0;if(!(n<<24>>24==0|(l|0)!=0)){n=e;do{m=m+1|0;n=n+1|0;u=a[m>>0]|0;l=(d[208+(u&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(l|0)!=0))}if(!l)break a;if(!k){j=59292;break}}}while(0);k=c[j+8>>2]|0;if((a[k+4>>0]|0)==f<<24>>24){j=c[k+16>>2]|0;if(j){ab[j&127](c[k+8>>2]|0);f=a[p>>0]|0}c[k+12>>2]=0}if((a[k+24>>0]|0)==f<<24>>24){j=c[k+36>>2]|0;if(j){ab[j&127](c[k+28>>2]|0);f=a[p>>0]|0}c[k+32>>2]=0}if((a[k+44>>0]|0)==f<<24>>24){f=c[k+56>>2]|0;if(f|0)ab[f&127](c[k+48>>2]|0);c[k+52>>2]=0}}}f=Zi(b,q,e,1)|0;if(!f){u=7;Ra=t;return u|0}c[f+12>>2]=h;c[f+8>>2]=g;c[f+16>>2]=i;a[f+4>>0]=r|s&8;c[b+64>>2]=0;if(!(c[b+260>>2]|0)){u=0;Ra=t;return u|0}Ne(b,0);u=0;Ra=t;return u|0}function Rd(e,f,g,h,i,j,k,l,m){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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;z=Ra;Ra=Ra+16|0;y=z+8|0;w=z;x=z+12|0;c[x>>2]=0;r=e+20|0;n=c[r>>2]|0;t=e+16|0;q=c[t>>2]|0;if((n|0)>0){o=0;do{p=c[q+(o<<4)+4>>2]|0;if(p|0)c[(c[p+4>>2]|0)+4>>2]=c[p>>2];o=o+1|0}while((o|0)!=(n|0))}p=e+24|0;s=(c[p>>2]&1|0)==0;v=c[q+12>>2]|0;a[e+78>>0]=a[v+77>>0]|0;if(!(b[v+78>>1]&1)){n=eh(e,0,x,0)|0;if(!n){n=c[r>>2]|0;v=9}else v=16}else v=9;a:do if((v|0)==9){if((n|0)>1)do{o=n;n=n+-1|0;if((b[(c[(c[t>>2]|0)+(n<<4)+12>>2]|0)+78>>1]&1)==0?(u=eh(e,n,x,0)|0,u|0):0){n=u;v=16;break a}}while((o|0)>2);if(s)c[p>>2]=c[p>>2]&-2;u=Sd(e,g,f)|0;if((u|0)!=0?(c[u+12>>2]|0)==0:0){do if(h){f=b[u+42>>1]|0;t=f<<16>>16;b:do if(f<<16>>16>0){s=c[u+4>>2]|0;f=d[208+(d[h>>0]|0)>>0]|0;n=0;do{o=s+(n<<4)|0;q=c[o>>2]|0;r=a[q>>0]|0;p=(d[208+(r&255)>>0]|0)-f|0;if(!(r<<24>>24==0|(p|0)!=0)){r=h;do{q=q+1|0;r=r+1|0;A=a[q>>0]|0;p=(d[208+(A&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(p|0)!=0))}if(!p)break b;n=n+1|0}while((n|0)<(t|0))}else{n=0;o=0}while(0);if((n|0)==(t|0)){if(c[u+36>>2]&32|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}r=a[h>>0]|0;q=d[208+(r&255)>>0]|0;n=q+-95|0;r=r<<24>>24==0;if(!(r|(n|0)!=0)){o=58070;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-114|0;if(!(r|(n|0)!=0)){o=40352;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){n=q+-111|0;if(!(r|(n|0)!=0)){o=58078;p=h;do{p=p+1|0;o=o+1|0;A=a[p>>0]|0;n=(d[208+(A&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(A<<24>>24==0|(n|0)!=0))}if(n|0){o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0;break a}}}A=b[u+40>>1]|0;n=A<<16>>16;if(A<<16>>16<=-1){q=0;n=1;s=0;r=0;p=31453;break}q=n;o=(c[u+4>>2]|0)+(n<<4)|0}else q=n;if(o){n=a[o+15>>0]|0;if(!(n&4))p=0;else{p=c[o>>2]|0;p=p+(Eu(p)|0)+1|0}r=c[o+8>>2]|0;o=(a[o+12>>0]|0)!=0&1;n=n&1;if((q|0)==(b[u+40>>1]|0)){q=(c[u+36>>2]|0)>>>3&1;s=o}else{q=0;s=o}}else{q=0;n=1;s=0;r=0;p=31453}}else{q=0;n=1;s=0;r=0;p=31453}while(0);o=0;t=q;f=n;r=(r|0)==0?34049:r;q=0}else{o=0;u=0;t=0;f=0;s=0;r=0;p=0;q=0}}while(0);if((v|0)==16){o=n;u=0;t=0;f=0;s=0;r=0;p=0;q=(n|0)!=0}if(i|0)c[i>>2]=p;if(j|0)c[j>>2]=r;if(k|0)c[k>>2]=s;if(l|0)c[l>>2]=f;if(m|0)c[m>>2]=t;n=c[x>>2]|0;if(!(q|(u|0)!=0)){do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[w>>2]=g;c[w+4>>2]=h;n=dd(e,31461,w)|0;c[x>>2]=n;o=1}c[y>>2]=n;Vb(e,o,(n|0)==0?0:31408,y);n=c[x>>2]|0;do if(n|0){if(e|0){if(c[e+480>>2]|0){Xd(e,n);break}A=n;if((c[e+304>>2]|0)>>>0<=A>>>0?(c[e+308>>2]|0)>>>0>A>>>0:0){A=e+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if((o|0)==3082|(a[e+81>>0]|0)!=0){og(e);A=7;Ra=z;return A|0}else{A=c[e+68>>2]&o;Ra=z;return A|0}return 0}function Sd(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;k=c[a+20>>2]|0;l=(d|0)==0;e=a+16|0;if((k|0)<=0){a=b;while(1){if(Hb(a,34585)|0){h=0;a=18;break}if(!(Gb(d,c[(c[e>>2]|0)+16>>2]|0)|0))a=34855;else{h=0;a=18;break}}if((a|0)==18)return h|0}f=c[e>>2]|0;g=f+16|0;a:while(1){if(l){a=0;do{j=ji((c[f+((a^a>>>0<2)<<4)+12>>2]|0)+8|0,b)|0;if(j|0){a=16;break a}a=a+1|0}while((a|0)<(k|0))}else{a=0;do{e=a^a>>>0<2;if((Hb(d,c[f+(e<<4)>>2]|0)|0)==0?(i=ji((c[f+(e<<4)+12>>2]|0)+8|0,b)|0,i|0):0){a=17;break a}a=a+1|0}while((a|0)<(k|0))}if(Hb(b,34585)|0){h=0;a=18;break}if(!(Gb(d,c[g>>2]|0)|0))b=34855;else{h=0;a=18;break}}if((a|0)==16){l=j;return l|0}else if((a|0)==17){l=i;return l|0}else if((a|0)==18)return h|0;return 0}function Td(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(e){j=c[b+20>>2]|0;g=j+-1|0;a:do if((j|0)>0){f=g;j=(c[b+16>>2]|0)+(g<<4)|0;while(1){h=c[j>>2]|0;if(h|0){i=a[h>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{h=h+1|0;i=i+1|0;k=a[h>>0]|0;g=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(g|0)!=0))}if(!g)break a}if(!f)break;g=f+-1|0;if((f|0)>0){f=g;j=j+-16|0}else{f=g;break a}}f=109-(d[208+(d[e>>0]|0)>>0]|0)|0;if(!f){g=50919;do{g=g+1|0;e=e+1|0;k=a[g>>0]|0;f=(d[208+(k&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(f|0)!=0))}f=((f|0)!=0)<<31>>31}else f=g;while(0);if((f|0)<0){k=0;return k|0}}else f=0;k=c[(c[b+16>>2]|0)+(f<<4)+4>>2]|0;return k|0}function Ud(a,d,e,f){a=a|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=c[a+4>>2]|0;c[h+4>>2]=c[a>>2];g=h+22|0;if(b[g>>1]&2){h=8;return h|0}if((e|0)<0)e=(c[h+32>>2]|0)-(c[h+36>>2]|0)|0;if((d+-512|0)>>>0<65025?(d+-1&d|0)==0:0){c[h+32>>2]=d;Tf(h)}d=h+32|0;a=Se(c[h>>2]|0,d,e)|0;c[h+36>>2]=(c[d>>2]|0)-(e&65535);if(!f){h=a;return h|0}b[g>>1]=b[g>>1]|2;h=a;return h|0}function Vd(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;if((a[b>>0]|0)!=48){i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}switch(a[b+1>>0]|0){case 88:case 120:break;default:{i=xb(b)|0;d=Og(b,d,i,1)|0;return d|0}}i=2;while(1){h=a[b+i>>0]|0;if(h<<24>>24==48)i=i+1|0;else break}if(!(a[880+(h&255)>>0]&8)){f=i;g=0;e=0}else{f=i;g=0;e=0;do{j=cw(g|0,e|0,4)|0;e=L()|0;g=h<<24>>24;g=j|(0-(g>>>6&1)&9)+g&15;f=f+1|0;h=a[b+f>>0]|0}while((a[880+(h&255)>>0]&8)!=0)}j=d;c[j>>2]=g;c[j+4>>2]=e;return ((a[b+f>>0]|0)==0?((f-i|0)>16?2:0):2)|0}function Wd(b){b=b|0;var c=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;if(!b){w=0;return w|0}c=a[b>>0]|0;do if(!(c<<24>>24)){c=31489;f=3}else{o=c&255;c=208+o|0;if((o|32|0)==115){c=a[b+1>>0]|0;if(!(c<<24>>24)){c=31490;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==113){c=a[b+2>>0]|0;if(!(c<<24>>24)){c=31491;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==108){c=a[b+3>>0]|0;if(!(c<<24>>24)){c=31492;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==105){c=a[b+4>>0]|0;if(!(c<<24>>24)){c=31493;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==116){c=a[b+5>>0]|0;if(!(c<<24>>24)){c=31494;f=3;break}o=c&255;c=208+o|0;if((o|32|0)==101){c=a[b+6>>0]|0;if(!(c<<24>>24)){c=31495;f=3;break}if(c<<24>>24==95){e=b+7|0;break}else{f=95;c=208+(c&255)|0}}else f=101}else f=116}else f=105}else f=108}else f=113}else f=115;e=d[c>>0]|0;c=f;f=7}while(0);if((f|0)==3){e=0;c=a[208+(d[c>>0]|0)>>0]|0;f=7}if((f|0)==7)e=(e|0)==(c&255|0)?b+7|0:b;o=(Eu(e)|0)&1073741823;if(!o){w=0;return w|0}f=e;h=58082;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=11;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=13;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=16;break}}if((f|0)==11){i=0;j=a[208+(d[h>>0]|0)>>0]|0;f=15}else if((f|0)==13){i=c&255;j=g;f=15}if((f|0)==15?(i|0)==(j&255|0):0)f=16;if((f|0)==16?(a[880+(d[58082+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58103;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=23;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=21;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=25;break}}if((f|0)==21){k=c&255;l=g;f=24}else if((f|0)==23){k=0;l=a[208+(d[h>>0]|0)>>0]|0;f=24}if((f|0)==24?(k|0)==(l&255|0):0)f=25;if((f|0)==25?(a[880+(d[58103+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58115;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=31;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=29;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=33;break}}if((f|0)==29){m=c&255;n=g;f=32}else if((f|0)==31){m=0;n=a[208+(d[h>>0]|0)>>0]|0;f=32}if((f|0)==32?(m|0)==(n&255|0):0)f=33;if((f|0)==33?(a[880+(d[58115+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58127;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=39;break}g=a[208+(c&255)>>0]|0;c=a[208+(d[h>>0]|0)>>0]|0;if(g<<24>>24!=c<<24>>24){f=37;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=41;break}}if((f|0)==37){p=g&255;q=c;f=40}else if((f|0)==39){p=0;q=a[208+(d[h>>0]|0)>>0]|0;f=40}if((f|0)==40?(p|0)==(q&255|0):0)f=41;if((f|0)==41?(a[880+(d[58127+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58151;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=47;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=45;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=49;break}}if((f|0)==45){r=c&255;s=g;f=48}else if((f|0)==47){r=0;s=a[208+(d[h>>0]|0)>>0]|0;f=48}if((f|0)==48?(r|0)==(s&255|0):0)f=49;if((f|0)==49?(a[880+(d[58151+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}f=e;h=58164;b=o;while(1){c=a[f>>0]|0;if(!(c<<24>>24)){f=55;break}c=a[208+(c&255)>>0]|0;g=a[208+(d[h>>0]|0)>>0]|0;if(c<<24>>24!=g<<24>>24){f=53;break}if((b|0)>1){f=f+1|0;h=h+1|0;b=b+-1|0}else{f=57;break}}if((f|0)==53){t=c&255;u=g;f=56}else if((f|0)==55){t=0;u=a[208+(d[h>>0]|0)>>0]|0;f=56}if((f|0)==56?(t|0)==(u&255|0):0)f=57;if((f|0)==57?(a[880+(d[58164+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}g=58184;f=o;while(1){c=a[e>>0]|0;if(!(c<<24>>24)){f=63;break}c=a[208+(c&255)>>0]|0;b=a[208+(d[g>>0]|0)>>0]|0;if(c<<24>>24!=b<<24>>24){f=61;break}if((f|0)>1){e=e+1|0;g=g+1|0;f=f+-1|0}else{f=65;break}}if((f|0)==61){v=c&255;w=b;f=64}else if((f|0)==63){v=0;w=a[208+(d[g>>0]|0)>>0]|0;f=64}if((f|0)==64?(v|0)==(w&255|0):0)f=65;if((f|0)==65?(a[880+(d[58184+o>>0]|0)>>0]&70)==0:0){w=1;return w|0}w=0;return w|0}function Xd(a,b){a=a|0;b=b|0;var d=0;if(((a|0)!=0?(d=b,(c[a+304>>2]|0)>>>0<=d>>>0):0)?(c[a+308>>2]|0)>>>0>d>>>0:0)b=e[a+276>>1]|0;else b=Wa[c[29352>>2]&127](b)|0;a=c[a+480>>2]|0;c[a>>2]=(c[a>>2]|0)+b;return}function Yd(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0;if(c[b+272>>2]|0){if(a[b+81>>0]|0){f=0;return f|0}}else{do if(0>>0|(0==(f|0)?(e[b+276>>1]|0)>>>0>>0:0))g=b+288|0;else{g=b+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}g=b+296|0;h=c[g>>2]|0;if(!h){g=b+292|0;break}c[g>>2]=c[h>>2];f=b+284|0;c[f>>2]=(c[f>>2]|0)+1;f=h;return f|0}while(0);c[g>>2]=(c[g>>2]|0)+1}f=_d(b,d,f)|0;return f|0}function Zd(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;h=b+81|0;if(a[h>>0]|0){m=0;return m|0}l=d;m=b+304|0;if((c[m>>2]|0)>>>0<=l>>>0?(k=b+308|0,(c[k>>2]|0)>>>0>l>>>0):0){a:do if(!(c[b+272>>2]|0)){do if(!(0>>0|(0==(g|0)?(e[b+276>>1]|0)>>>0>>0:0))){i=b+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}i=b+296|0;h=c[i>>2]|0;if(!h){h=b+292|0;break}else{c[i>>2]=c[h>>2];g=b+284|0;c[g>>2]=(c[g>>2]|0)+1;break a}}else h=b+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=13}else j=13;while(0);if((j|0)==13)h=_d(b,f,g)|0;if(!h){m=0;return m|0}ew(h|0,d|0,e[b+276>>1]|0)|0;if(!d){m=h;return m|0}if(c[b+480>>2]|0){Xd(b,d);m=h;return m|0}if((c[m>>2]|0)>>>0<=l>>>0?(c[k>>2]|0)>>>0>l>>>0:0){m=b+300|0;c[d>>2]=c[m>>2];c[m>>2]=d;m=h;return m|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);m=h;return m|0}else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);m=h;return m|0}}if((mb()|0)==0?(i=sb(d,f,g)|0,i|0):0){m=i;return m|0}if(a[h>>0]|0){m=0;return m|0}if(a[b+82>>0]|0){m=0;return m|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){m=0;return m|0}c[h+12>>2]=7;m=0;return m|0}function _d(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Sv(d|0,e|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&f>>>0>2147483390)){if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](d)|0;if(!e)break;return e|0}f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0>>0)c[14985]=d;d=59064;e=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&e>>>0>0){g=c[14978]|0;d=Tv(e|0,d|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&d>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(d|0){e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0){g=d;return g|0}c[14987]=e;g=d;return g|0}}while(0);e=b+81|0;if(a[e>>0]|0){g=0;return g|0}if(a[b+82>>0]|0){g=0;return g|0}a[e>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;e=b+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[b+236>>2]|0;if(!e){g=0;return g|0}c[e+12>>2]=7;g=0;return g|0}function $d(b){b=b|0;var d=0,f=0,g=0,h=0,i=0,j=0,k=0;g=c[b>>2]|0;k=b+16|0;j=(c[k>>2]|0)+1|0;a:do if(!g){h=Sv(j|0,0,-1,-1)|0;g=L()|0;if(!(g>>>0>0|(g|0)==0&h>>>0>2147483390)){if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;i=25;break}h=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0>>0)c[14985]=j;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){j=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](h)|0;if(f|0){d=Wa[c[29352>>2]&127](f)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0){c[14987]=d;d=f;i=26}else{d=f;i=26}}}}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[g+276>>1]|0)>>>0>>0:0))){f=g+300|0;d=c[f>>2]|0;if(d|0){c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}f=g+296|0;d=c[f>>2]|0;if(!d){d=g+292|0;break}else{c[f>>2]=c[d>>2];i=g+284|0;c[i>>2]=(c[i>>2]|0)+1;i=25;break a}}else d=g+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(g,j,0)|0;i=25}while(0);if((i|0)==25?d|0:0)i=26;if((i|0)==26){ew(d|0,c[b+4>>2]|0,(c[k>>2]|0)+1|0)|0;k=b+21|0;a[k>>0]=a[k>>0]|4;k=d;b=b+4|0;c[b>>2]=k;return k|0}a[b+20>>0]=7;if(!(c[b+12>>2]|0)){k=0;b=b+4|0;c[b>>2]=k;return k|0}f=b+21|0;if(!(a[f>>0]&4))d=b+4|0;else{g=c[b>>2]|0;d=b+4|0;h=c[d>>2]|0;do if(h|0){if(g|0){if(c[g+480>>2]|0){Xd(g,h);break}j=h;if((c[g+304>>2]|0)>>>0<=j>>>0?(c[g+308>>2]|0)>>>0>j>>>0:0){j=g+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);a[f>>0]=a[f>>0]&-5}c[b+8>>2]=0;c[k>>2]=0;c[d>>2]=0;k=0;b=b+4|0;c[b>>2]=k;return k|0}function ae(a,b){a=a|0;b=b|0;return 29668}function be(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;j=Ra;Ra=Ra+48|0;i=j+24|0;g=j;h=a+8|0;f=c[h>>2]|0;te(a);ie(a,0)|0;h=c[h>>2]|0;if(c[f+24>>2]|0){f=a+28|0;d=c[f>>2]|0;e=h+32|0;c[d+8>>2]=c[e>>2];c[e>>2]=d;c[a+12>>2]=-1;c[f>>2]=0}do if(h|0?(e=h+36|0,f=(c[e>>2]|0)+-1|0,c[e>>2]=f,(f|0)==0):0){e=h+32|0;b=c[e>>2]|0;if(b|0){f=a+32|0;do{d=b;b=c[b+8>>2]|0;if(Wa[c[2352>>2]&127](c[d>>2]|0)|0){l=c[f>>2]|0;m=uu()|0;m=c[m>>2]|0;k=dv(m)|0;c[g>>2]=33804;c[g+4>>2]=m;c[g+8>>2]=31695;c[g+12>>2]=(l|0)==0?59952:l;c[g+16>>2]=k;Db(4106,31953,g)}if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0)}c[e>>2]=0;e=c[h+48>>2]|0;d=h+44|0;b=c[d>>2]|0;if(!e)c[14795]=b;else{c[e+44>>2]=b;b=c[d>>2]|0}if(b|0)c[b+48>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);b=a+12|0;d=c[b>>2]|0;if((d|0)>-1){if(Wa[c[2352>>2]&127](d)|0){l=c[a+32>>2]|0;k=uu()|0;k=c[k>>2]|0;m=dv(k)|0;c[i>>2]=34584;c[i+4>>2]=k;c[i+8>>2]=31695;c[i+12>>2]=(l|0)==0?59952:l;c[i+16>>2]=m;Db(4106,31953,i)}c[b>>2]=-1}b=c[a+28>>2]|0;if(!b){b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=a;d=b+52|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));Ra=j;return 0}return 0}function ce(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=a+12|0;g=0;h=d;i=b;while(1){if((xv(c[l>>2]|0,e,0)|0)<0){f=3;break}j=Ya[c[2436>>2]&127](c[l>>2]|0,i,h)|0;if((h|0)==(j|0)){f=10;break}if((j|0)<0){k=uu()|0;if((c[k>>2]|0)==4)k=1;else{f=7;break}}else{e=Sv(e|0,f|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;k=j;g=j+g|0;h=h-j|0;i=(j|0)==0?i:i+j|0}if((k|0)<=0){h=0;f=10;break}}if((f|0)==3){g=uu()|0;c[a+20>>2]=c[g>>2];g=-1}else if((f|0)==7){h=uu()|0;c[a+20>>2]=c[h>>2];h=j;g=0;f=10}if((f|0)==10)g=g+h|0;if((g|0)==(d|0)){d=0;return d|0}if((g|0)<0){d=266;return d|0}c[a+20>>2]=0;gw(b+g|0,0,d-g|0)|0;d=522;return d|0}function de(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;i=a+12|0;j=d;h=f;a:while(1){d=c[i>>2]|0;g=j&131071;while(1){if((xv(d,e,0)|0)<0){f=-1;b=6;break a}f=Ya[c[2472>>2]&127](d,b,g)|0;if((f|0)>=0)break;k=uu()|0;if((c[k>>2]|0)!=4){b=6;break a}}d=(j|0)>(f|0);if(!(d&(f|0)!=0)){b=9;break}k=Sv(e|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=j-f|0;b=b+f|0;h=L()|0;e=k}if((b|0)==6){d=a+20|0;b=uu()|0;b=c[b>>2]|0;c[d>>2]=b;if((j|0)<=(f|0)){k=0;return k|0}if((b|0)!=28){k=778;return k|0}}else if((b|0)==9)if(d)d=a+20|0;else{k=0;return k|0}c[d>>2]=0;k=13;return k|0}function ee(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=Ra;Ra=Ra+32|0;h=j;f=c[a+40>>2]|0;g=((f|0)<0)<<31>>31;d=Sv(b|0,d|0,-1,-1)|0;d=Sv(d|0,L()|0,f|0,g|0)|0;e=L()|0;if((f|0)>0){b=Zv(d|0,e|0,f|0,g|0)|0;b=Tv(d|0,e|0,b|0,L()|0)|0;L()|0}d=c[a+12>>2]|0;do{e=Xa[c[2412>>2]&255](d,b)|0;if((e|0)>=0){i=6;break}g=uu()|0}while((c[g>>2]|0)==4);if((i|0)==6?(e|0)==0:0){i=0;Ra=j;return i|0}g=uu()|0;c[a+20>>2]=c[g>>2];a=c[a+32>>2]|0;g=uu()|0;g=c[g>>2]|0;i=dv(g)|0;c[h>>2]=36273;c[h+4>>2]=g;c[h+8>>2]=31726;c[h+12>>2]=(a|0)==0?59952:a;c[h+16>>2]=i;Db(1546,31953,h);i=1546;Ra=j;return i|0}function fe(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+48|0;g=h+24|0;d=h;f=h+44|0;if(zv(c[a+12>>2]|0)|0){f=uu()|0;c[a+20>>2]=c[f>>2];f=c[a+32>>2]|0;a=uu()|0;a=c[a>>2]|0;g=dv(a)|0;c[d>>2]=36228;c[d+4>>2]=a;c[d+8>>2]=32026;c[d+12>>2]=(f|0)==0?59952:f;c[d+16>>2]=g;Db(1034,31953,d);g=1034;Ra=h;return g|0}e=a+18|0;if(!(b[e>>1]&8)){g=0;Ra=h;return g|0}d=a+32|0;if((Xa[c[2544>>2]&255](c[d>>2]|0,f)|0)==0?(zv(c[f>>2]|0)|0,Wa[c[2352>>2]&127](c[f>>2]|0)|0):0){a=c[d>>2]|0;d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=36242;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=(a|0)==0?59952:a;c[g+16>>2]=f;Db(4106,31953,g)}b[e>>1]=b[e>>1]&-9;g=0;Ra=h;return g|0}function ge(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Ra;Ra=Ra+80|0;d=e;if(!(Xa[c[2400>>2]&255](c[a+12>>2]|0,d)|0)){a=c[d+36>>2]|0;f=(a|0)==1;d=b;c[d>>2]=f?0:a;c[d+4>>2]=f?0:((a|0)<0)<<31>>31;d=0;Ra=e;return d|0}else{f=uu()|0;c[a+20>>2]=c[f>>2];f=1802;Ra=e;return f|0}return 0}function he(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,A=0,B=0,C=0;C=Ra;Ra=Ra+96|0;r=C+56|0;t=C+48|0;q=C+40|0;s=C+32|0;l=C+24|0;m=C+16|0;h=C+8|0;j=C;y=C+80|0;x=C+64|0;B=d+16|0;g=a[B>>0]|0;if((g&255|0)>=(e|0)){d=0;Ra=C;return d|0}w=d+8|0;v=c[w>>2]|0;A=v+28|0;f=a[A>>0]|0;if(g<<24>>24!=f<<24>>24?(e|0)>1|(f&255)>2:0){d=5;Ra=C;return d|0}k=(e|0)==1;do if(!k){f=x+8|0;c[f>>2]=1;b[x+2>>1]=0;if((e|0)==4)if((g&255)<3){o=f;z=10}else z=43;else z=42}else{if((f+-1&255)>=2){o=x+8|0;c[o>>2]=1;b[x+2>>1]=0;z=10;break}a[B>>0]=1;d=v+20|0;c[d>>2]=(c[d>>2]|0)+1;d=v+24|0;c[d>>2]=(c[d>>2]|0)+1;d=0;Ra=C;return d|0}while(0);a:do if((z|0)==10){b[x>>1]=(k^1)&1;n=x+4|0;c[n>>2]=1073741824;p=d+18|0;do if((b[p>>1]&3)==1){g=v+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[j>>2]=y;f=Ya[z&127](f,13,j)|0;if((f|0)<0){z=17;break}else{a[g>>0]=1;i=v+24|0;c[i>>2]=(c[i>>2]|0)+1;i=f;z=16;break}}}else{z=c[606]|0;i=c[d+12>>2]|0;c[h>>2]=x;i=Ya[z&127](i,13,h)|0;z=16}while(0);if((z|0)==16?i|0:0)z=17;if((z|0)==17){g=uu()|0;g=c[g>>2]|0;switch(g|0){case 1:{f=3;break}case 37:case 4:case 16:case 110:case 11:case 13:{d=5;Ra=C;return d|0}default:f=3850}c[d+20>>2]=g;d=f;Ra=C;return d|0}if(k){f=1073741826;c[n>>2]=f;c[o>>2]=510;h=c[w>>2]|0;do if((b[p>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=f;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;f=c[d+12>>2]|0;c[m>>2]=y;f=Ya[z&127](f,13,m)|0;if((f|0)<0){z=28;break}else{a[g>>0]=1;z=h+24|0;c[z>>2]=(c[z>>2]|0)+1;z=27;break}}else{f=0;g=0}}else{z=c[606]|0;f=c[d+12>>2]|0;c[l>>2]=x;f=Ya[z&127](f,13,l)|0;z=27}while(0);if((z|0)==27)if(!f){f=0;g=0}else z=28;b:do if((z|0)==28){f=uu()|0;f=c[f>>2]|0;switch(f|0){case 37:case 4:case 16:case 110:case 11:case 13:{g=5;break b}case 1:{f=1;g=3;break b}default:{g=3850;break b}}}while(0);c[n>>2]=1073741824;c[o>>2]=1;b[x>>1]=2;j=c[w>>2]|0;do if((b[p>>1]&3)==1){i=j+29|0;if(!(a[i>>0]|0)){b[y+2>>1]=0;c[y+4>>2]=1073741826;c[y+8>>2]=510;b[y>>1]=1;z=c[606]|0;h=c[d+12>>2]|0;c[s>>2]=y;h=Ya[z&127](h,13,s)|0;if((h|0)<0){z=37;break}else{a[i>>0]=1;z=j+24|0;c[z>>2]=(c[z>>2]|0)+1;z=37;break}}else z=39}else{z=c[606]|0;h=c[d+12>>2]|0;c[q>>2]=x;h=Ya[z&127](h,13,q)|0;z=37}while(0);if((z|0)==37)if((g|0)==0&(h|0)!=0){f=uu()|0;g=2058;f=c[f>>2]|0}else z=39;c:do if((z|0)==39)switch(g&4095){case 0:{a[B>>0]=1;z=v+24|0;c[z>>2]=(c[z>>2]|0)+1;c[v+20>>2]=1;z=58;break a}case 5:{d=5;Ra=C;return d|0}default:break c}while(0);c[d+20>>2]=f;d=g;Ra=C;return d|0}else{f=o;z=42}}while(0);if((z|0)==42)if((e|0)!=4){b[x>>1]=1;if((e|0)==2){h=1073741825;i=1073741824;g=1;z=48}else{g=1073741824;z=47}}else z=43;if((z|0)==43)if((c[v+20>>2]|0)>1){f=5;z=60}else{b[x>>1]=1;g=1073741824;z=47}if((z|0)==47){h=g+2|0;i=g;g=510;z=48}d:do if((z|0)==48){c[x+4>>2]=h;c[f>>2]=g;h=c[w>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(a[g>>0]|0){z=58;break d}b[y+2>>1]=0;c[y+4>>2]=i+2;c[y+8>>2]=510;b[y>>1]=1;x=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=y;f=Ya[x&127](f,13,t)|0;if((f|0)<0)break;else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=f;z=54;break}}else{z=c[606]|0;u=c[d+12>>2]|0;c[r>>2]=x;u=Ya[z&127](u,13,r)|0;z=54}while(0);if((z|0)==54?(u|0)==0:0){z=58;break}g=uu()|0;g=c[g>>2]|0;switch(g|0){case 37:case 4:case 16:case 110:case 11:case 13:{f=5;break}case 1:{f=3;z=57;break}default:{f=3850;z=57}}if((z|0)==57)c[d+20>>2]=g;if((e|0)==4)z=60;else{d=f;Ra=C;return d|0}}while(0);if((z|0)==58){d=e&255;a[B>>0]=d;a[A>>0]=d;d=0;Ra=C;return d|0}else if((z|0)==60){a[B>>0]=3;a[A>>0]=3;d=f;Ra=C;return d|0}return 0}function ie(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,A=0;z=Ra;Ra=Ra+112|0;y=z+48|0;r=z+40|0;t=z+32|0;n=z+24|0;o=z+16|0;k=z+8|0;l=z;s=z+88|0;q=z+72|0;x=d+16|0;f=a[x>>0]|0;if((f&255|0)<=(e|0)){y=0;Ra=z;return y|0}v=d+8|0;w=c[v>>2]|0;do if((f&255)>1){a:do if((e|0)==1){b[q>>1]=0;j=q+2|0;b[j>>1]=0;i=1073741826;h=q+4|0;c[h>>2]=i;g=q+8|0;c[g>>2]=510;f=d+18|0;do if((b[f>>1]&3)==1){k=w+29|0;if(a[k>>0]|0){i=w;break a}b[s+2>>1]=0;c[s+4>>2]=i;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;i=c[d+12>>2]|0;c[l>>2]=s;i=Ya[A&127](i,13,l)|0;if((i|0)<0)break;else{a[k>>0]=1;m=w+24|0;c[m>>2]=(c[m>>2]|0)+1;m=i;u=11;break}}else{u=c[606]|0;m=c[d+12>>2]|0;c[k>>2]=q;m=Ya[u&127](m,13,k)|0;u=11}while(0);if((u|0)==11?(m|0)==0:0){i=c[v>>2]|0;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2314;Ra=z;return A|0}else{j=q+2|0;h=q+4|0;g=q+8|0;f=d+18|0;i=w}while(0);b[q>>1]=2;b[j>>1]=0;c[h>>2]=1073741824;c[g>>2]=2;do if((b[f>>1]&3)==1){g=i+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[o>>2]=s;f=Ya[A&127](f,13,o)|0;if((f|0)<0)break;else{a[g>>0]=1;p=i+24|0;c[p>>2]=(c[p>>2]|0)+1;p=f;u=20;break}}else u=21}else{u=c[606]|0;p=c[d+12>>2]|0;c[n>>2]=q;p=Ya[u&127](p,13,n)|0;u=20}while(0);if((u|0)==20?(p|0)==0:0)u=21;if((u|0)==21){a[w+28>>0]=1;break}A=uu()|0;c[d+20>>2]=c[A>>2];A=2058;Ra=z;return A|0}while(0);if(!e){u=w+20|0;A=(c[u>>2]|0)+-1|0;c[u>>2]=A;if(!A){b[q>>1]=2;b[q+2>>1]=0;c[q+8>>2]=0;c[q+4>>2]=0;h=c[v>>2]|0;do if((b[d+18>>1]&3)==1){g=h+29|0;if(!(a[g>>0]|0)){b[s+2>>1]=0;c[s+4>>2]=1073741826;c[s+8>>2]=510;b[s>>1]=1;A=c[606]|0;f=c[d+12>>2]|0;c[t>>2]=s;f=Ya[A&127](f,13,t)|0;if((f|0)<0){u=33;break}else{a[g>>0]=1;u=h+24|0;c[u>>2]=(c[u>>2]|0)+1;u=31;break}}else u=32}else{u=c[606]|0;f=c[d+12>>2]|0;c[r>>2]=q;f=Ya[u&127](f,13,r)|0;u=31}while(0);if((u|0)==31)if(!f)u=32;else u=33;if((u|0)==32){f=0;g=w+28|0}else if((u|0)==33){f=uu()|0;c[d+20>>2]=c[f>>2];a[w+28>>0]=0;f=2058;g=x}a[g>>0]=0;j=f}else j=0;w=w+24|0;A=(c[w>>2]|0)+-1|0;c[w>>2]=A;if(!A){i=(c[v>>2]|0)+32|0;f=c[i>>2]|0;if(f|0){h=d+32|0;do{g=f;f=c[f+8>>2]|0;if(Wa[c[2352>>2]&127](c[g>>2]|0)|0){d=c[h>>2]|0;w=uu()|0;w=c[w>>2]|0;A=dv(w)|0;c[y>>2]=33804;c[y+4>>2]=w;c[y+8>>2]=31695;c[y+12>>2]=(d|0)==0?59952:d;c[y+16>>2]=A;Db(4106,31953,y)}if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{A=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}c[i>>2]=0}if(j|0){A=j;Ra=z;return A|0}}a[x>>0]=e;A=0;Ra=z;return A|0}function je(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+32|0;h=j;i=j+8|0;g=c[e+8>>2]|0;if((d[g+28>>0]|0)>1){i=0;h=1;c[f>>2]=h;Ra=j;return i|0}if(a[g+29>>0]|0){i=0;h=0;c[f>>2]=h;Ra=j;return i|0}b[i+2>>1]=0;c[i+4>>2]=1073741825;c[i+8>>2]=1;b[i>>1]=1;k=c[606]|0;g=c[e+12>>2]|0;c[h>>2]=i;if(!(Ya[k&127](g,12,h)|0)){g=0;e=(b[i>>1]|0)!=2&1}else{g=uu()|0;c[e+20>>2]=c[g>>2];g=3594;e=0}k=g;i=e;c[f>>2]=i;Ra=j;return k|0}function ke(a,f,g){a=a|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=Ra;Ra=Ra+80|0;h=v;m=v+4|0;do switch(f|0){case 1:{c[g>>2]=d[a+16>>0];a=0;Ra=v;return a|0}case 4:{c[g>>2]=c[a+20>>2];a=0;Ra=v;return a|0}case 6:{c[a+40>>2]=c[g>>2];a=0;Ra=v;return a|0}case 5:{h=g;f=c[h>>2]|0;h=c[h+4>>2]|0;i=a+40|0;if((c[i>>2]|0)<=0){a=0;Ra=v;return a|0}o=a+12|0;a:do if(!(Xa[c[2400>>2]&255](c[o>>2]|0,m)|0)){g=c[i>>2]|0;j=((g|0)<0)<<31>>31;f=Sv(f|0,h|0,-1,-1)|0;f=Sv(f|0,L()|0,g|0,j|0)|0;k=L()|0;j=Zv(f|0,k|0,g|0,j|0)|0;j=Tv(f|0,k|0,j|0,L()|0)|0;k=L()|0;f=c[m+36>>2]|0;g=((f|0)<0)<<31>>31;b:do if((k|0)>(g|0)|(k|0)==(g|0)&j>>>0>f>>>0?(p=c[m+40>>2]|0,n=f+-1+p-((f|0)%(p|0)|0)|0,l=((n|0)<0)<<31>>31,q=((p|0)<0)<<31>>31,r=Sv(j|0,k|0,-1,-1)|0,s=L()|0,t=Sv(r|0,s|0,p|0,q|0)|0,u=L()|0,(u|0)>(l|0)|(u|0)==(l|0)&t>>>0>n>>>0):0){h=l;f=n;c:while(1){n=(h|0)<(k|0)|(h|0)==(k|0)&f>>>0>>0;i=n?f:r;f=n?h:s;h=c[o>>2]|0;while(1){if((xv(h,i,0)|0)<0)break c;g=Ya[c[2472>>2]&127](h,59952,1)|0;if((g|0)>=0)break;n=uu()|0;if((c[n>>2]|0)!=4)break c}f=Sv(i|0,f|0,p|0,q|0)|0;h=L()|0;if((g|0)!=1){f=778;break a}if(!((h|0)<(u|0)|(h|0)==(u|0)&f>>>0>>0))break b}f=uu()|0;c[a+20>>2]=c[f>>2];f=778;break a}while(0);a=0;Ra=v;return a|0}else f=1802;while(0);a=f;Ra=v;return a|0}case 10:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>2&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65531;a=0;Ra=v;return a|0}else{b[f>>1]=h|4;a=0;Ra=v;return a|0}}case 13:{i=c[g>>2]|0;if((i|0)<0){c[g>>2]=(e[a+18>>1]|0)>>>4&1;a=0;Ra=v;return a|0}f=a+18|0;h=e[f>>1]|0;if(!i){b[f>>1]=h&65519;a=0;Ra=v;return a|0}else{b[f>>1]=h|16;a=0;Ra=v;return a|0}}case 12:{c[h>>2]=c[(c[a+4>>2]|0)+16>>2];a=Bb(31408,h)|0;c[g>>2]=a;a=0;Ra=v;return a|0}case 16:{f=a+4|0;h=c[(c[f>>2]|0)+8>>2]|0;h=pb(h,((h|0)<0)<<31>>31)|0;if(!h){a=0;Ra=v;return a|0}ye(c[(c[f>>2]|0)+8>>2]|0,h)|0;c[g>>2]=h;a=0;Ra=v;return a|0}case 20:{f=a+8|0;if(c[f>>2]|0)if(!(Xa[c[2388>>2]&255](c[a+32>>2]|0,m)|0)){f=(c[f>>2]|0)+8|0;f=(c[f+4>>2]|0?1:(c[f>>2]|0)!=(c[m+72>>2]|0))&1}else f=1;else f=0;c[g>>2]=f;a=0;Ra=v;return a|0}default:{a=12;Ra=v;return a|0}}while(0);return 0}function le(a){a=a|0;var d=0,e=0;d=a+44|0;e=c[d>>2]|0;if(e|0)return e|0;if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096;e=4096;return e|0}function me(a){a=a|0;var d=0,e=0;d=a+44|0;if(!(c[d>>2]|0)){if(b[a+18>>1]&16){e=a+48|0;c[e>>2]=c[e>>2]|4096}c[d>>2]=4096}return c[a+48>>2]|0}function ne(d,f,g,h,i){d=d|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;D=Ra;Ra=Ra+176|0;C=D+72|0;y=D+48|0;v=D+24|0;u=D+8|0;r=D;x=D+92|0;B=Va[c[2640>>2]&127]()|0;B=(B|0)<32768?1:(B|0)/32768|0;w=d+36|0;j=c[w>>2]|0;if(!j){if(mb()|0){i=7;Ra=D;return i|0}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;if(!j){i=7;Ra=D;return i|0}else t=j}else{j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){t=c[14978]|0;q=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=t>>>0)&1}k=Wa[c[29340>>2]&127](j)|0;if(!k){i=7;Ra=D;return i|0}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;t=k}else t=k};c[t>>2]=0;c[t+4>>2]=0;c[t+8>>2]=0;c[t+12>>2]=0;o=d+8|0;p=c[o>>2]|0;k=c[p+40>>2]|0;a:do if(!k){n=d+32|0;l=c[n>>2]|0;b:do if(!(Xa[c[2400>>2]&255](c[d+12>>2]|0,x)|0)){m=Eu(l)|0;j=m+42|0;k=pb(j,0)|0;if(!k)j=7;else{gw(k|0,0,j|0)|0;q=k+36|0;c[k+8>>2]=q;c[r>>2]=l;Cb(m+6|0,q,32098,r)|0;l=k+12|0;c[l>>2]=-1;r=c[o>>2]|0;c[r+40>>2]=k;c[k>>2]=r;if(c[7325]|0)c[k+4>>2]=8;if(!(a[p+29>>0]|0)){j=c[n>>2]|0;c:do if((j|0)!=0?(s=j+(((Eu(j)|0)&1073741823)+1)|0,(a[s>>0]|0)!=0):0){j=s;while(1){s=Bu(j,32105)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!s)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){A=26;break c}}if((Zm(j,1,0)|0)<<24>>24)m=c[l>>2]|0;else A=26}else A=26;while(0);if((A|0)==26){m=xe(q,66,c[x+12>>2]&511)|0;c[l>>2]=m}do if((m|0)<0){m=xe(q,0,c[x+12>>2]&511)|0;c[l>>2]=m;if((m|0)<0){c[u>>2]=31984;c[u+4>>2]=37077;c[u+8>>2]=31517;Db(14,32001,u);i=uu()|0;i=c[i>>2]|0;j=dv(i)|0;c[v>>2]=37077;c[v+4>>2]=i;c[v+8>>2]=31690;c[v+12>>2]=q;c[v+16>>2]=j;Db(14,31953,v);j=14;break b}else{a[k+22>>0]=1;break}}while(0);j=c[x+20>>2]|0;l=c[x+24>>2]|0;if(!(Va[c[2592>>2]&127]()|0))Ya[c[2580>>2]&127](m,j,l)|0;j=ze(d,k)|0;switch(j|0){case 0:case 1288:break;default:break b}}else j=0;break a}}else j=1802;while(0);Ae(d);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}else{i=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);i=j;Ra=D;return i|0}}else j=0;while(0);c[t>>2]=k;v=k+28|0;c[v>>2]=(c[v>>2]|0)+1;c[w>>2]=t;w=k+32|0;c[t+4>>2]=c[w>>2];c[w>>2]=t;if(!j)j=t;else{i=j;Ra=D;return i|0}}t=c[j>>2]|0;j=t+23|0;do if(a[j>>0]|0){k=ze(d,t)|0;if(!k){a[j>>0]=0;A=44;break}else{j=t+20|0;break}}else A=44;while(0);if((A|0)==44){q=B+f|0;q=q-((q|0)%(B|0)|0)|0;s=t+20|0;if((q|0)>(e[s>>1]|0)){k=G(q,g)|0;c[t+16>>2]=g;r=t+12|0;j=c[r>>2]|0;d:do if((j|0)>-1)if(!(Xa[c[2400>>2]&255](j,x)|0)){j=c[x+36>>2]|0;if((j|0)<(k|0))if(h){j=(j|0)/4096|0;n=(k|0)/4096|0;if((j|0)<(n|0)){e:while(1){k=c[r>>2]|0;l=j<<12|4095;while(1){if((xv(k,l,0)|0)<0){A=56;break e}m=Ya[c[2472>>2]&127](k,59952,1)|0;if((m|0)>=0)break;h=uu()|0;if((c[h>>2]|0)!=4){A=56;break e}}j=j+1|0;if((m|0)!=1)break;if((j|0)>=(n|0)){A=59;break d}}C=c[t+8>>2]|0;g=uu()|0;g=c[g>>2]|0;j=dv(g)|0;c[y>>2]=37221;c[y+4>>2]=g;c[y+8>>2]=31761;c[y+12>>2]=(C|0)==0?59952:C;c[y+16>>2]=j;Db(4874,31953,y);j=4874}else A=59}else j=0;else A=59}else j=4874;else A=59;while(0);f:do if((A|0)==59){m=t+24|0;j=c[m>>2]|0;k=q<<2;if((mb()|0)==0?(z=sb(j,(k|0)>0?k:0,0)|0,(z|0)!=0):0){c[m>>2]=z;j=e[s>>1]|0;if((q|0)>(j|0)){n=G(B,g)|0;o=t+22|0;p=((n|0)<0)<<31>>31;g:do if((B|0)>0)while(1){k=c[r>>2]|0;if((k|0)>-1){j=G(j,g)|0;j=$a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,j)|0;if((j|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}l=e[s>>1]|0;k=0;do{A=j+(G(k,g)|0)|0;c[(c[m>>2]|0)+(k+l<<2)>>2]=A;k=k+1|0}while((k|0)!=(B|0));j=B+l|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}else while(1){k=c[r>>2]|0;if((k|0)>-1){A=G(j,g)|0;if(($a[c[2604>>2]&127](0,n,(a[o>>0]|0)==0?3:1,1,k,A)|0)==(-1|0))break g}else{j=pb(n,p)|0;if(!j){j=7;break f}gw(j|0,0,n|0)|0}j=B+(e[s>>1]|0)|0;b[s>>1]=j;j=j&65535;if((q|0)<=(j|0)){j=0;break f}}while(0);g=c[t+8>>2]|0;B=uu()|0;B=c[B>>2]|0;j=dv(B)|0;c[C>>2]=37248;c[C+4>>2]=B;c[C+8>>2]=31848;c[C+12>>2]=(g|0)==0?59952:g;c[C+16>>2]=j;Db(5386,31953,C);j=5386}else j=0}else j=3082}while(0);k=j;j=s}else{k=0;j=s}}if((e[j>>1]|0)>(f|0))j=c[(c[t+24>>2]|0)+(f<<2)>>2]|0;else j=0;c[i>>2]=j;i=(k|0)==0&(a[t+22>>0]|0)!=0?8:k;Ra=D;return i|0} function fb(a){a=a|0;var b=0;b=Ra;Ra=Ra+a|0;Ra=Ra+15&-16;return b|0}function gb(){return Ra|0}function hb(a){a=a|0;Ra=a}function ib(a,b){a=a|0;b=b|0;Ra=a;Sa=b}function jb(a){a=a|0;var b=0,d=0,e=0;e=c[a+20>>2]|0;if((e|0)<=0)return;b=c[a+16>>2]|0;a=0;do{d=c[b+(a<<4)+4>>2]|0;if(d|0)c[(c[d+4>>2]|0)+4>>2]=c[d>>2];a=a+1|0}while((a|0)<(e|0));return}function kb(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;s=e+116|0;f=c[s>>2]|0;g=b[e+144>>1]|0;a:do if((f|0)!=0&g<<16>>16!=0){o=f+(((g&65535)<<1)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(h=c[f+20>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}while(1){do if(c[f+24>>2]|0?(i=c[f+20>>2]|0,i|0):0){if(c[k>>2]|0){Xd(j,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break a}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{n=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break a}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0>>0)}while(0);f=c[e+212>>2]|0;if(f|0){k=(d|0)==0;l=d+480|0;m=d+304|0;n=d+308|0;o=d+300|0;do{i=f;f=c[f+24>>2]|0;j=c[i>>2]|0;g=c[i+4>>2]|0;if(j){if((g|0)>=1){g=j+((g+-1|0)*20|0)|0;do{h=a[g+1>>0]|0;if(h<<24>>24<-6)kg(d,h<<24>>24,c[g+16>>2]|0);g=g+-20|0}while(g>>>0>=j>>>0)}do if(!k){if(c[l>>2]|0){Xd(d,j);break}t=j;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j}else p=63}else p=63;while(0);do if((p|0)==63){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);if(i|0)p=67}else p=67;do if((p|0)==67){p=0;if(!k){if(c[l>>2]|0){Xd(d,i);break}t=i;if((c[m>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[o>>2];c[o>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0)}while((f|0)!=0)}do if((c[e+20>>2]|0)!=381479589){f=c[e+100>>2]|0;g=b[e+16>>1]|0;b:do if((f|0)!=0&g<<16>>16!=0){o=f+((g<<16>>16)*40|0)|0;j=c[f+32>>2]|0;k=j+480|0;g=(j|0)==0;l=j+304|0;m=j+308|0;n=j+300|0;if(c[k>>2]|0){if(g)while(1){do if(c[f+24>>2]|0?(q=c[f+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{t=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}while(1){do if(c[f+24>>2]|0?(r=c[f+20>>2]|0,r|0):0){if(c[k>>2]|0){Xd(j,r);break}t=r;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[r>>2]=c[n>>2];c[n>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{t=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);f=f+40|0;if(f>>>0>=o>>>0)break b}}if(g)while(1){g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0;if(f>>>0>=o>>>0)break b}do{g=f+8|0;if(!(b[g>>1]&9216)){h=f+24|0;if(c[h>>2]|0){i=c[f+20>>2]|0;do if(!(c[k>>2]|0)){t=i;if((c[l>>2]|0)>>>0<=t>>>0?(c[m>>2]|0)>>>0>t>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(j,i);while(0);c[h>>2]=0}}else Cg(f);b[g>>1]=128;f=f+40|0}while(f>>>0>>0)}while(0);f=c[e+128>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+192>>2]|0;if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);h=c[e+104>>2]|0;f=c[e+108>>2]|0;do if(h|0){if((f|0)>=1){f=h+((f+-1|0)*20|0)|0;do{g=a[f+1>>0]|0;if(g<<24>>24<-6)kg(d,g<<24>>24,c[f+16>>2]|0);f=f+-20|0}while(f>>>0>=h>>>0)}if(d|0){if(c[d+480>>2]|0){Xd(d,h);break}t=h;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[h>>2]=c[t>>2];c[t>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=c[s>>2]|0;do if(f|0){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+188>>2]|0;if(!f)return;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return}t=f;if((c[d+304>>2]|0)>>>0<=t>>>0?(c[d+308>>2]|0)>>>0>t>>>0:0){t=d+300|0;c[f>>2]=c[t>>2];c[t>>2]=f;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return}}function lb(a,b){a=a|0;b=b|0;var d=0;if(!b)return;if(a|0){if(c[a+480>>2]|0){Xd(a,b);return}d=b;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[b>>2]=c[d>>2];c[d>>2]=b;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mb(){var b=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;p=Ra;Ra=Ra+16|0;n=p+8|0;b=p;if(c[7380]|0){o=0;Ra=p;return o|0}c[7382]=1;if(!(c[7383]|0)){if(!(c[7335]|0)){c[b>>2]=30308;xd(4,b)|0};c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;c[14764]=8;if((c[7374]|0)==0|(c[7375]|0)<512|(c[7376]|0)<1){c[7374]=0;c[7375]=0}b=Wa[c[29360>>2]&127](c[7342]|0)|0;if(b|0){c[14764]=0;c[14765]=0;c[14766]=0;c[14767]=0;c[14768]=0;c[14769]=0;o=b;Ra=p;return o|0}}c[7383]=1;if(!(c[7386]|0))c[7386]=8;e=(c[7385]|0)+1|0;c[7385]=e;if(!(c[7381]|c[7380])){c[7381]=1;b=59088;e=b+92|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(e|0));k=c[5448]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;a:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=23;break a}}if(e){b=e+12|0;c[5443]=c[b>>2]}else o=23}else o=23;while(0);if((o|0)==23){c[5443]=0;c[5449]=j}c[b>>2]=21760;k=c[5458]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;b:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=35;break b}}if(e){b=e+12|0;c[5453]=c[b>>2]}else o=35}else o=35;while(0);if((o|0)==35){c[5453]=0;c[5459]=j}c[b>>2]=21800;k=c[5468]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;c:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-i|0;if(!(m<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;m=a[g>>0]|0;f=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=47;break c}}if(e){b=e+12|0;c[5463]=c[b>>2]}else o=47}else o=47;while(0);if((o|0)==47){c[5463]=0;c[5469]=j}c[b>>2]=21840;l=0;do{m=21888+(l*40|0)|0;k=c[21888+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;d:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;h=a[g>>0]|0;f=(d[208+(h&255)>>0]|0)-i|0;if(!(h<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=60;break d}}if(e){b=e+12|0;c[21888+(l*40|0)+12>>2]=c[b>>2]}else o=60}else o=60;while(0);if((o|0)==60){o=0;c[21888+(l*40|0)+12>>2]=0;c[21888+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=15);l=0;do{m=22496+(l*40|0)|0;k=c[22496+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;e:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=74;break e}}if(e){b=e+12|0;c[22496+(l*40|0)+12>>2]=c[b>>2]}else o=74}else o=74;while(0);if((o|0)==74){o=0;c[22496+(l*40|0)+12>>2]=0;c[22496+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=8);l=0;do{m=19424+(l*40|0)|0;k=c[19424+(l*40|0)+32>>2]|0;if(!k)b=0;else b=(Eu(k)|0)&1073741823;f=a[k>>0]|0;b=59088+(((b+(f<<24>>24)|0)%23|0)<<2)|0;e=c[b>>2]|0;j=e;f:do if(e){i=d[208+(f&255)>>0]|0;while(1){g=c[e+32>>2]|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-i|0;if(!(q<<24>>24==0|(f|0)!=0)){h=k;do{g=g+1|0;h=h+1|0;q=a[g>>0]|0;f=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(f|0)!=0))}if(!f)break;e=c[e+36>>2]|0;if(!e){o=88;break f}}if(e){b=e+12|0;c[19424+(l*40|0)+12>>2]=c[b>>2]}else o=88}else o=88;while(0);if((o|0)==88){o=0;c[19424+(l*40|0)+12>>2]=0;c[19424+(l*40|0)+36>>2]=j}c[b>>2]=m;l=l+1|0}while((l|0)!=57);if(!(c[7384]|0)){b=c[7354]|0;if(!b){c[n>>2]=30340;xd(18,n)|0;b=c[7354]|0}b=Wa[b&127](c[7353]|0)|0;if(!b)o=94}else o=94;g:do if((o|0)==94){c[7384]=1;if(!(mb()|0)){do if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](10)|0;if(!b){b=7;break g}}else{b=Wa[c[29356>>2]&127](10)|0;if((c[14985]|0)>>>0<10)c[14985]=10;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){q=c[14978]|0;o=Tv(e|0,f|0,b|0,((b|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=q>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){b=7;break g}e=Wa[c[29352>>2]&127](b)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0<=(c[14987]|0)>>>0)break;c[14987]=e}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{q=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==464){b=c[119]|0;c[14770]=b}else{if(!b){b=0;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=464&(f|0)!=0)e=f;else break}if((f|0)!=464)break;c[e+12>>2]=c[119]}while(0);c[119]=b;c[14770]=464}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==552){b=c[141]|0;c[14770]=b;o=138}else{if(!b){o=140;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=552&(f|0)!=0)e=f;else break}if((f|0)!=552){o=138;break}c[e+12>>2]=c[141];o=138}while(0);do if((o|0)==138){if(!b){o=140;break}b=b+12|0;c[141]=c[b>>2]}while(0);if((o|0)==140){c[141]=0;b=59080}c[b>>2]=552}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==640){b=c[163]|0;c[14770]=b;o=150}else{if(!b){o=152;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=640&(f|0)!=0)e=f;else break}if((f|0)!=640){o=150;break}c[e+12>>2]=c[163];o=150}while(0);do if((o|0)==150){if(!b){o=152;break}b=b+12|0;c[163]=c[b>>2]}while(0);if((o|0)==152){c[163]=0;b=59080}c[b>>2]=640}if(!(mb()|0)){b=c[14770]|0;do if((b|0)==728){b=c[185]|0;c[14770]=b;o=162}else{if(!b){o=164;break}e=b;while(1){f=c[e+12>>2]|0;if((f|0)!=728&(f|0)!=0)e=f;else break}if((f|0)!=728){o=162;break}c[e+12>>2]=c[185];o=162}while(0);do if((o|0)==162){if(!b){o=164;break}b=b+12|0;c[185]=c[b>>2]}while(0);if((o|0)==164){c[185]=0;b=59080}c[b>>2]=728}b=c[7374]|0;if(c[14810]|0){i=(b|0)==0;j=i?0:c[7376]|0;e=(j|0)==0;i=i|e?0:c[7375]&-8;c[14813]=i;c[14820]=j;c[14814]=j;if((j|0)>90)f=10;else f=((j|0)/10|0)+1|0;c[14815]=f;c[14816]=b;c[14819]=0;c[14821]=0;if(!e){g=G(i,j+-1|0)|0;e=b;f=j;h=0;while(1){f=f+-1|0;c[e>>2]=h;h=e;if(!f)break;else e=e+i|0}q=G(i,j)|0;c[14819]=b+g;b=b+q|0}c[14817]=b}c[7380]=1;b=0}else b=7}while(0);c[7381]=0;e=c[7385]|0}else b=0;c[7385]=e+-1;if((e|0)>=2){q=b;Ra=p;return q|0}c[7386]=0;q=b;Ra=p;return q|0}function nb(a){a=a|0;var b=0,d=0,e=0;if((a|0)<1|(mb()|0)!=0){d=0;return d|0}d=Sv(a|0,((a|0)<0)<<31>>31|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0>>0)c[14985]=a;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){e=c[14978]|0;b=Tv(a|0,b|0,d|0,((d|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](d)|0;if(!b){e=0;return e|0}a=Wa[c[29352>>2]&127](b)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=a;e=b;return e|0}function ob(a,b){a=a|0;b=b|0;var d=0,e=0;d=Sv(a|0,b|0,-1,-1)|0;b=L()|0;if(b>>>0>0|(b|0)==0&d>>>0>2147483390){d=0;return d|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](a)|0;return d|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function pb(a,b){a=a|0;b=b|0;var d=0,e=0;d=(mb()|0)!=0;b=Sv(a|0,b|0,-1,-1)|0;e=L()|0;if(e>>>0>0|(e|0)==0&b>>>0>2147483390|d){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](a)|0;return e|0}d=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0>>0)c[14985]=a;a=59064;b=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&b>>>0>0){e=c[14978]|0;a=Tv(b|0,a|0,d|0,((d|0)<0)<<31>>31|0)|0;b=L()|0;c[14768]=((b|0)<0|(b|0)==0&a>>>0<=e>>>0)&1}a=Wa[c[29340>>2]&127](d)|0;if(!a){e=0;return e|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0<=(c[14987]|0)>>>0){e=a;return e|0}c[14987]=b;e=a;return e|0}function qb(a){a=a|0;var b=0;if(!a)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function rb(a){a=a|0;return Wa[c[29352>>2]&127](a)|0}function sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;if(!a){e=Sv(b|0,d|0,-1,-1)|0;a=L()|0;if(a>>>0>0|(a|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){e=Wa[c[29340>>2]&127](b)|0;return e|0}a=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0>>0)c[14985]=b;b=59064;d=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&d>>>0>0){e=c[14978]|0;b=Tv(d|0,b|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&b>>>0<=e>>>0)&1}b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0<=(c[14987]|0)>>>0){e=b;return e|0}c[14987]=d;e=b;return e|0}if((b|0)==0&(d|0)==0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);e=0;return e|0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);e=0;return e|0}if(d>>>0>0|(d|0)==0&b>>>0>2147483391){e=0;return e|0}e=Wa[c[29352>>2]&127](a)|0;d=Wa[c[29356>>2]&127](b)|0;if((d|0)==(e|0)){e=a;return e|0}if(!(c[7324]|0)){e=Xa[c[29348>>2]&255](a,d)|0;return e|0}if((c[14985]|0)>>>0>>0)c[14985]=b;b=Xa[c[29348>>2]&255](a,d)|0;f=59064;g=c[f+4>>2]|0;if((b|0)==0&((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0))b=Xa[c[29348>>2]&255](a,d)|0;if(!b){g=0;return g|0}d=(Wa[c[29352>>2]&127](b)|0)-e|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0<=(c[14982]|0)>>>0){g=b;return g|0}c[14982]=d;g=b;return g|0}function tb(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0.0,t=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0;fa=Ra;Ra=Ra+96|0;X=fa+80|0;Z=fa+72|0;_=fa;ba=f+21|0;if(!(a[ba>>0]&2)){I=1;J=0}else{I=(c[i>>2]|0)+(4-1)&~(4-1);J=c[I>>2]|0;c[i>>2]=I+4;I=0}Q=J+4|0;R=J+8|0;ca=f+16|0;da=f+8|0;ea=f+4|0;S=f+20|0;T=_+1|0;U=_+2|0;V=_+3|0;W=f+12|0;j=0;H=0;a:while(1){switch(a[h>>0]|0){case 0:{F=543;break a}case 37:{z=j;break}default:{j=h;b:while(1){j=j+1|0;switch(a[j>>0]|0){case 37:case 0:break b;default:{}}}k=j-h|0;l=c[ca>>2]|0;m=l+k|0;if(m>>>0<(c[da>>2]|0)>>>0){if(k|0){c[ca>>2]=m;ew((c[ea>>2]|0)+l|0,h|0,k|0)|0}}else wb(f,h,k);if(!(a[j>>0]|0)){F=543;break a}else{z=h;h=j}}}l=h+1|0;h=a[l>>0]|0;if(!(h<<24>>24)){F=13;break}k=h<<24>>24;m=-1;h=0;y=0;j=0;x=0;E=0;D=0;v=0;w=l;c:while(1){switch(k|0){case 108:{F=24;break c}case 45:{p=x;q=E;u=D;n=1;k=w;break}case 43:{j=43;p=x;q=E;u=D;n=y;k=w;break}case 32:{j=32;p=x;q=E;u=D;n=y;k=w;break}case 35:{p=1;q=E;u=D;n=y;k=w;break}case 33:{p=x;q=1;u=D;n=y;k=w;break}case 48:{p=x;q=E;u=1;n=y;k=w;break}case 44:{p=x;q=E;u=D;v=44;n=y;k=w;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:{h=k+-48|0;n=w+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10){k=n;while(1){h=l+(h*10|0)+-48|0;n=k+1|0;p=a[n>>0]|0;l=p<<24>>24;if((p+-48&255)<10)k=n;else break}}else k=w;h=h&2147483647;switch(p<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=y;break}default:{G=n;n=0;k=l;break c}}break}case 42:{do if(!I){h=c[Q>>2]|0;if((c[J>>2]|0)>(h|0)){k=c[R>>2]|0;c[Q>>2]=h+1;h=c[k+(h<<2)>>2]|0;k=e[h+8>>1]|0;if(k&4|0){h=c[h>>2]|0;F=39;break}if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;F=39;break}if(k&18){h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;F=39}else{h=0;F=40}}else{h=0;F=40}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);h=c[F>>2]|0;c[i>>2]=F+4;F=39}while(0);if((F|0)==39){F=0;if((h|0)<0){l=1;h=(h|0)==-2147483648?0:0-h|0}else F=40}if((F|0)==40){F=0;l=y}k=a[w+1>>0]|0;switch(k<<24>>24){case 46:case 108:{p=x;q=E;u=D;n=l;k=w;break}default:{F=61;break c}}break}case 46:{l=w+1|0;k=a[l>>0]|0;if(k<<24>>24==42){do if(!I){k=c[Q>>2]|0;if((c[J>>2]|0)>(k|0)){l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){k=c[k>>2]|0;F=52;break}if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;F=52;break}if(l&18){k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0;F=52}else k=0}else k=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);k=c[F>>2]|0;c[i>>2]=F+4;F=52}while(0);if((F|0)==52){F=0;k=(k|0)<0?((k|0)==-2147483648?-1:0-k|0):k}l=w+2|0;p=a[l>>0]|0}else{k=k<<24>>24;if((k+-48|0)>>>0<10){n=0;do{n=k+-48+(n*10|0)|0;l=l+1|0;m=a[l>>0]|0;k=m<<24>>24}while((k+-48|0)>>>0<10);k=m<<24>>24}else n=0;p=k;k=n&2147483647}if((p|0)==108){p=x;q=E;u=D;n=y;m=k;k=l+-1|0}else{G=l;n=0;m=k;k=p;break c}break}default:{G=w;n=0;break c}}l=k+1|0;k=a[l>>0]|0;if(!(k<<24>>24)){F=543;break a}else{k=k<<24>>24;y=n;x=p;E=q;D=u;w=l}}if((F|0)==24){F=0;k=w+1|0;l=a[k>>0]|0;if(l<<24>>24==108){k=w+2|0;G=k;n=2;k=a[k>>0]|0}else{G=k;n=1;k=l<<24>>24}}else if((F|0)==61){F=0;G=w+1|0;y=l;n=0;k=k<<24>>24}d:do switch(k|0){case 100:{C=0;break}case 115:{C=1;break}case 103:{C=2;break}case 122:{C=3;break}case 113:{C=4;break}case 81:{C=5;break}case 119:{C=6;break}case 99:{C=7;break}case 111:{C=8;break}case 117:{C=9;break}case 120:{C=10;break}case 88:{C=11;break}case 102:{C=12;break}case 101:{C=13;break}case 69:{C=14;break}case 71:{C=15;break}case 105:{C=16;break}case 110:{C=17;break}case 37:{C=18;break}case 112:{C=19;break}case 84:{C=20;break}default:{switch(k|0){case 83:{C=21;break d}case 114:break;default:{F=543;break a}}C=22}}while(0);k=a[16+(C*6|0)+3>>0]|0;e:do switch(k<<24>>24){case 13:{k=1;F=86;break}case 0:case 15:{k=n;F=86;break}case 16:{k=n;F=87;break}case 3:case 2:case 1:{do if(I){F=(c[i>>2]|0)+(8-1)&~(8-1);o=+g[F>>3];c[i>>2]=F+8;F=208}else{l=c[Q>>2]|0;if((c[J>>2]|0)>(l|0)){n=c[R>>2]|0;c[Q>>2]=l+1;l=c[n+(l<<2)>>2]|0;n=e[l+8>>1]|0;if(n&8|0){o=+g[l>>3];F=208;break}if(n&4|0){F=l;o=+((c[F>>2]|0)>>>0)+4294967296.0*+(c[F+4>>2]|0);F=208;break}if(n&18|0){o=+Kg(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0);F=208;break}}o=0.0;B=j;l=(m|0)<0?6:m}while(0);if((F|0)==208){F=0;l=(m|0)<0?6:m;if(o<0.0){o=-o;B=45}else B=j}q=(C|0)==2|(C|0)==15;p=l+((q&(l|0)>0)<<31>>31)|0;j=p&4095;if(!j)r=.5;else{r=.5;while(1){r=r*.1;if((j|0)>1)j=j+-1|0;else break}}n=(C|0)==12;o=n?o+r:o;g[X>>3]=o;g[Z>>3]=+g[X>>3];if(+g[X>>3]==+g[Z>>3]){if(o>0.0){s=1.0;m=0;while(1){t=s*1.e+100;if(m>>>0<351&o>=t){s=t;m=m+100|0}else break}while(1){t=s*1.0e10;if(m>>>0<351&o>=t){s=t;m=m+10|0}else break}while(1){t=s*10.0;if(m>>>0<351&o>=t){s=t;m=m+1|0}else break}o=o/s;if(o<1.0e-08)do{o=o*1.0e8;m=m+-8|0}while(o<1.0e-08);if(o<1.0)do{o=o*10.0;m=m+-1|0}while(o<1.0);j=B<<24>>24!=0;if((m|0)>350){n=_+(j&1)|0;a[_>>0]=B;a[n>>0]=73;a[n+1>>0]=110;a[n+2>>0]=102;a[n+3>>0]=0;n=j?4:3;j=_;m=H;q=0;break e}}else m=0;if(!n){o=r+o;if(o>=10.0){o=o*.1;m=m+1|0}}z=(m|0)<-4|(p|0)<(m|0);A=q?x<<24>>24==0&1:E;l=q?p-(z?0:m)|0:l;z=(q?(z?2:1):k)<<24>>24==2;p=z?0:m;j=Sv(l|0,((l|0)<0)<<31>>31|0,h|0,((h|0)<0)<<31>>31|0)|0;j=Sv(j|0,L()|0,((p|0)>0?p:0)|0,0)|0;k=L()|0;f:do if((k|0)>0|(k|0)==0&j>>>0>55){u=Sv(j|0,k|0,15,0)|0;n=L()|0;if(a[S>>0]|0){F=543;break a}if((n|0)>0|((n|0)==0?u>>>0>(c[da>>2]|0)>>>0:0)?($=c[W>>2]|0,(n|0)>0|(n|0)==0&u>>>0>$>>>0):0){F=236;break a}q=c[f>>2]|0;g:do if(!q){w=Sv(j|0,k|0,14,0)|0;v=L()|0;if(v>>>0>0|(v|0)==0&w>>>0>2147483390){F=278;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](u)|0;break}n=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0>>0)c[14985]=u;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){w=c[14978]|0;v=Tv(j|0,k|0,n|0,((n|0)<0)<<31>>31|0)|0;u=L()|0;c[14768]=((u|0)<0|(u|0)==0&v>>>0<=w>>>0)&1}k=Wa[c[29340>>2]&127](n)|0;if(!k){F=278;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break f}c[14987]=j;j=k;q=k;break f}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){F=278;break a}}else{do if(!(n>>>0>0|((n|0)==0?u>>>0>(e[q+276>>1]|0)>>>0:0))){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];w=q+284|0;c[w>>2]=(c[w>>2]|0)+1;break g}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(q,u,n)|0}while(0);if(!k){F=278;break a}else{j=k;q=k}}else{j=_;q=0}while(0);n=((E&255)*10|0)+16|0;v=(E|x)&255|(l|0)>0;if(!(B<<24>>24))k=j;else{a[j>>0]=B;k=j+1|0}if((p|0)<0){a[k>>0]=48;k=k+1|0}else{u=k;while(1){w=(n|0)<1;x=~~o;o=w?o:(o-+(x|0))*10.0;n=n+((w^1)<<31>>31)|0;k=u+1|0;a[u>>0]=w?48:x+48&255;if((p|0)>0){u=k;p=p+-1|0}else{p=-1;break}}}w=(v|0)==0;if(!w){a[k>>0]=46;k=k+1|0}if((p|0)<-1){gw(k|0,48,~p|0)|0;while(1){k=k+1|0;l=l+-1|0;if((p|0)<-2)p=p+1|0;else break}}if((l|0)>0){v=n;while(1){n=(v|0)<1;p=~~o;u=k+1|0;a[k>>0]=n?48:p+48&255;if((l|0)>1){l=l+-1|0;k=u;v=v+((n^1)<<31>>31)|0;o=n?o:(o-+(p|0))*10.0}else{k=u;break}}}h:do if(!(A<<24>>24==0|w)){i:while(1){l=k+-1|0;switch(a[l>>0]|0){case 46:break i;case 48:break;default:break h}a[l>>0]=0;k=l}if(!(E<<24>>24)){a[l>>0]=0;k=l;break}else{a[k>>0]=48;k=k+1|0;break}}while(0);if(z){n=k+1|0;a[k>>0]=a[160+(d[16+(C*6|0)+4>>0]|0)>>0]|0;l=k+2|0;if((m|0)<0){a[n>>0]=45;m=0-m|0}else a[n>>0]=43;if((m|0)>99){E=(m>>>0)/100|0;a[l>>0]=E+48;l=k+3|0;k=m-(E*100|0)|0}else k=m;E=(k|0)/10|0;a[l>>0]=E+48;a[l+1>>0]=k-(E*10|0)+48;k=l+2|0}a[k>>0]=0;k=k-j|0;if(y<<24>>24==0&D<<24>>24!=0&(h|0)>(k|0)){l=h-k|0;if((k|0)>=0){k=h;while(1){a[j+k>>0]=a[j+(k-l)>>0]|0;if((k|0)>(l|0))k=k+-1|0;else break}}if(!l){n=h;m=H}else{gw(j+(B<<24>>24!=0&1)|0,48,l|0)|0;n=h;m=H}}else{n=k;m=H}}else{n=3;j=31167;m=H;q=0}break}case 4:{if(I){h=c[ca>>2]|0;j=(c[i>>2]|0)+(4-1)&~(4-1);n=c[j>>2]|0;c[i>>2]=j+4;c[n>>2]=h;n=0;h=0;j=z;m=H;q=0}else{n=0;h=0;j=z;m=H;q=0}break}case 7:{a[_>>0]=37;n=1;j=_;m=H;q=0;break}case 8:{j:do if(I){F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;if(j>>>0<128){a[_>>0]=j;n=1;break}if(j>>>0<2048){a[_>>0]=j>>>6&31|192;a[T>>0]=j&63|128;n=2;break}if(j>>>0<65536){a[_>>0]=j>>>12&15|224;a[T>>0]=j>>>6&63|128;a[U>>0]=j&63|128;n=3;break}else{a[_>>0]=j>>>18&7|240;a[T>>0]=j>>>12&63|128;a[U>>0]=j>>>6&63|128;a[V>>0]=j&63|128;n=4;break}}else{j=c[Q>>2]|0;do if((c[J>>2]|0)>(j|0)?(aa=c[R>>2]|0,c[Q>>2]=j+1,aa=c[aa+(j<<2)>>2]|0,aa|0):0){j=b[aa+8>>1]|0;if((j&514)==514?(a[aa+10>>0]|0)==1:0)k=c[aa+16>>2]|0;else{if(j&1)break;k=Gg(aa,1)|0}if(k|0){F=a[k>>0]|0;a[_>>0]=F;if((F&255)<=191){n=1;break j}j=a[k+1>>0]|0;if((j&-64)<<24>>24!=-128){n=1;break j}a[T>>0]=j;j=a[k+2>>0]|0;if((j&-64)<<24>>24!=-128){n=2;break j}a[U>>0]=j;j=a[k+3>>0]|0;if((j&-64)<<24>>24!=-128){n=3;break j}a[V>>0]=j;n=4;break j}}while(0);a[_>>0]=0;n=1}while(0);if((m|0)>1){h=1-m+h|0;do if(!((h|0)<2|y<<24>>24!=0)){h=h+-1|0;F=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?F>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1){h=0;break}}while(1){E=c[ea>>2]|0;F=c[ca>>2]|0;c[ca>>2]=F+1;a[E+F>>0]=32;if((h|0)>1)h=h+-1|0;else{h=0;break}}}while(0);j=m;while(1){k=c[ca>>2]|0;l=k+n|0;if(l>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,_|0,n|0)|0}else wb(f,_,n);if((j|0)>2)j=j+-1|0;else{j=_;m=1;q=0;k=n;F=395;break}}}else{j=_;m=1;q=0;k=n;F=395}break}case 6:case 5:{do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(K=c[R>>2]|0,c[Q>>2]=j+1,K=c[K+(j<<2)>>2]|0,(K|0)!=0):0){j=b[K+8>>1]|0;if((j&514)==514?(a[K+10>>0]|0)==1:0){j=c[K+16>>2]|0;k=5;F=369;break}if(!(j&1)){j=Gg(K,1)|0;k=5;F=369}else{p=59952;k=0;F=380}}else{p=59952;k=0;F=380}}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4;F=369}while(0);if((F|0)==369){F=0;if(j)if(k<<24>>24==6)if((c[ca>>2]|0)==0?(m|0)<0&((h|0)==0&(c[W>>2]|0)!=0):0)if(!(a[S>>0]|0)){c[ea>>2]=j;h=c[f>>2]|0;if(((h|0)!=0?(M=j,(c[h+304>>2]|0)>>>0<=M>>>0):0)?(c[h+308>>2]|0)>>>0>M>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](j)|0;c[da>>2]=h;n=(Eu(j)|0)&2147483647;c[ca>>2]=n;a[ba>>0]=a[ba>>0]|4;n=0;h=0;m=H;q=0;break e}else{l=j;h=0;k=j}else{p=j;k=j;F=380}else{p=j;k=0;F=380}else{p=59952;k=0;F=380}}if((F|0)==380){F=0;if((m|0)>-1){j=(m|0)!=0;if(!(E<<24>>24)){if(!j){n=0;j=p;m=H;q=k;break e}j=0;while(1){if(!(a[p+j>>0]|0)){n=j;j=p;m=H;q=k;break e}j=j+1|0;if((j|0)>=(m|0)){n=j;j=p;m=H;q=k;break e}}}k:do if(j){j=p;while(1){n=m;m=m+-1|0;l=a[j>>0]|0;if(!(l<<24>>24)){l=j;break k}j=j+1|0;if((l&255)>191)while(1)if((a[j>>0]&-64)<<24>>24==-128)j=j+1|0;else break;if((n|0)<=1){l=j;break}}}else l=p;while(0);j=p;m=E;q=k;k=l-p|0;F=395;break e}else l=p}j=l;m=E;q=k;k=(Eu(l)|0)&2147483647;F=395;break}case 14:case 10:case 9:{x=(C|0)==6?34:39;do if(!I){j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)?(N=c[R>>2]|0,c[Q>>2]=j+1,N=c[N+(j<<2)>>2]|0,(N|0)!=0):0){j=b[N+8>>1]|0;if((j&514)==514?(a[N+10>>0]|0)==1:0){j=c[N+16>>2]|0;break}if(!(j&1))j=Gg(N,1)|0;else j=0}else j=0}else{F=(c[i>>2]|0)+(4-1)&~(4-1);j=c[F>>2]|0;c[i>>2]=F+4}while(0);q=(j|0)==0;p=(C|0)==5;w=q?(p?31171:31176):j;l:do if(!m){l=0;v=0}else{n=x&255;if(!(E<<24>>24)){l=0;k=0;while(1){j=a[w+k>>0]|0;if(!(j<<24>>24)){v=k;break l}j=l+((j<<24>>24|0)==(n|0)&1)|0;k=k+1|0;m=m+-1|0;if(!m){l=j;v=k;break l}else l=j}}l=0;j=0;while(1){F=a[w+j>>0]|0;k=F<<24>>24;if(!(F<<24>>24)){v=j;break l}l=l+((k|0)==(n|0)&1)|0;if((k&192|0)==192)do j=j+1|0;while((a[w+j>>0]&-64)<<24>>24==-128);else j=j+1|0;m=m+-1|0;if(!m){v=j;break}}}while(0);u=p&(q^1);n=v+3+l|0;m:do if((n|0)>70){l=((n|0)<0)<<31>>31;if(a[S>>0]|0){F=543;break a}if(0<(l|0)|(0==(l|0)?(c[da>>2]|0)>>>0>>0:0)?(O=c[W>>2]|0,0<(l|0)|0==(l|0)&O>>>0>>0):0){F=423;break a}m=c[f>>2]|0;n:do if(!m){F=Sv(n|0,l|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&F>>>0>2147483390){F=465;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){F=c[14978]|0;D=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=F>>>0)&1}k=Wa[c[29340>>2]&127](l)|0;if(!k){F=465;break a}j=Wa[c[29352>>2]&127](k)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){j=k;q=k;break m}c[14987]=j;j=k;q=k;break m}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){F=465;break a}}else{do if(!(0>>0|(0==(l|0)?(e[m+276>>1]|0)>>>0>>0:0))){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];F=m+284|0;c[F>>2]=(c[F>>2]|0)+1;break n}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}k=_d(m,n,l)|0}while(0);if(!k){F=465;break a}else{j=k;q=k}}else{j=_;q=0}while(0);if(u){a[j>>0]=x;k=1}else k=0;if((v|0)>0){p=x&255;n=0;do{l=a[w+n>>0]|0;m=k+1|0;a[j+k>>0]=l;if((l<<24>>24|0)==(p|0)){a[j+m>>0]=l;k=k+2|0}else k=m;n=n+1|0}while((n|0)!=(v|0))}if(u){a[j+k>>0]=x;k=k+1|0}a[j+k>>0]=0;m=E;F=395;break}case 11:{if(!(a[ba>>0]&1)){F=543;break a}E=(c[i>>2]|0)+(4-1)&~(4-1);h=c[E>>2]|0;c[i>>2]=E+4;if((h|0)!=0?(P=c[h+4>>2]|0,(P|0)!=0):0){h=c[h>>2]|0;j=c[ca>>2]|0;k=j+P|0;if(k>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=k;ew((c[ea>>2]|0)+j|0,h|0,P|0)|0;n=0;h=0;j=z;m=H;q=0;break e}else{wb(f,h,P);n=0;h=0;j=z;m=H;q=0;break e}}else{n=0;h=0;j=z;m=H;q=0}break}case 12:{if(!(a[ba>>0]&1)){F=543;break a}h=(c[i>>2]|0)+(4-1)&~(4-1);m=c[h>>2]|0;c[i>>2]=h+4;h=(c[i>>2]|0)+(4-1)&~(4-1);n=c[h>>2]|0;c[i>>2]=h+4;h=c[m+8+(n*72|0)+4>>2]|0;do if(h|0){j=(Eu(h)|0)&1073741823;k=c[ca>>2]|0;l=k+j|0;if(l>>>0<(c[da>>2]|0)>>>0){if(j|0){c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,h|0,j|0)|0}}else wb(f,h,j);h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=46;break}else{wb(f,31183,1);break}}while(0);j=c[m+8+(n*72|0)+8>>2]|0;if(!j)h=0;else h=(Eu(j)|0)&1073741823;k=c[ca>>2]|0;l=k+h|0;if(l>>>0>=(c[da>>2]|0)>>>0){wb(f,j,h);n=0;h=0;j=z;m=H;q=0;break e}if(!h){n=0;h=0;j=z;m=H;q=0}else{c[ca>>2]=l;ew((c[ea>>2]|0)+k|0,j|0,h|0)|0;n=0;h=0;j=z;m=H;q=0}break}default:{F=543;break a}}while(0);if((F|0)==86){v=0;F=87}else if((F|0)==395){F=0;if(m<<24>>24!=0&(h|0)>0&(k|0)>0){l=k;do{E=l;l=l+-1|0;h=h+((a[j+l>>0]&-64)<<24>>24==-128&1)|0}while((E|0)>1);n=k;m=H}else{n=k;m=H}}if((F|0)==87){F=0;o:do if(4067322>>>C&1){if(I)switch(k<<24>>24){case 0:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}case 2:{j=(c[i>>2]|0)+(8-1)&~(8-1);k=j;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=j+8;j=0;F=113;break o}default:{j=(c[i>>2]|0)+(4-1)&~(4-1);l=c[j>>2]|0;c[i>>2]=j+4;j=0;k=0;F=113;break o}}j=c[Q>>2]|0;if((c[J>>2]|0)>(j|0)){k=c[R>>2]|0;c[Q>>2]=j+1;j=c[k+(j<<2)>>2]|0;k=e[j+8>>1]|0;if(k&4|0){k=j;j=0;l=c[k>>2]|0;k=c[k+4>>2]|0;F=113;break}if(k&8|0){l=Mg(+g[j>>3])|0;j=0;k=L()|0;F=113;break}if(k&18){l=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;j=0;k=L()|0;F=113}else{j=0;F=114}}else{j=0;F=114}}else{do if(I)if(k<<24>>24!=2){p=(c[i>>2]|0)+(4-1)&~(4-1);n=c[p>>2]|0;c[i>>2]=p+4;p=((n|0)<0)<<31>>31;l=Tv(0,0,n|0,p|0)|0;k=L()|0;if((n|0)<0)break;else{l=n;k=p;F=113;break o}}else{F=(c[i>>2]|0)+(8-1)&~(8-1);k=F;l=c[k>>2]|0;k=c[k+4>>2]|0;c[i>>2]=F+8;F=99;break}else{k=c[Q>>2]|0;if((c[J>>2]|0)<=(k|0)){F=114;break o}l=c[R>>2]|0;c[Q>>2]=k+1;k=c[l+(k<<2)>>2]|0;l=e[k+8>>1]|0;if(l&4|0){l=k;k=c[l+4>>2]|0;l=c[l>>2]|0;F=99;break}if(l&8|0){l=Mg(+g[k>>3])|0;k=L()|0;F=99;break}if(!(l&18)){F=114;break o}l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;k=L()|0;F=99}while(0);if((F|0)==99){p=(l|0)==0&(k|0)==-2147483648;n=Tv(0,0,l|0,k|0)|0;q=L()|0;if((k|0)<0){l=p?0:n;k=p?-2147483648:q}else{F=113;break}}j=45;F=113}while(0);if((F|0)==113){F=0;if((l|0)==0&(k|0)==0)F=114;else z=j}if((F|0)==114){F=0;z=j;l=0;k=0;x=0}u=h-(z<<24>>24!=0&1)|0;u=D<<24>>24==0?m:(m|0)<(u|0)?u:m;if((u|0)<37){n=_;q=0;w=70}else{m=Sv(u|0,((u|0)<0)<<31>>31|0,10,0)|0;j=L()|0;if(!(v<<24>>24))q=j;else{m=Sv(m|0,j|0,(u>>>0)/3|0|0,0)|0;q=L()|0}if(a[S>>0]|0){F=543;break}if((q|0)>0|((q|0)==0?m>>>0>(c[da>>2]|0)>>>0:0)?(Y=c[W>>2]|0,(q|0)>0|(q|0)==0&m>>>0>Y>>>0):0){F=121;break}p=c[f>>2]|0;p:do if(!p){E=Sv(m|0,q|0,-1,-1)|0;D=L()|0;if(D>>>0>0|(D|0)==0&E>>>0>2147483390){F=164;break a}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;F=162;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){E=c[14978]|0;D=Tv(n|0,p|0,j|0,((j|0)<0)<<31>>31|0)|0;B=L()|0;c[14768]=((B|0)<0|(B|0)==0&D>>>0<=E>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){F=164;break a}n=Wa[c[29352>>2]&127](j)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0>(c[14987]|0)>>>0)c[14987]=n}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){F=164;break a}}else{do if(!(q>>>0>0|((q|0)==0?m>>>0>(e[p+276>>1]|0)>>>0:0))){n=p+300|0;j=c[n>>2]|0;if(j|0){c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}n=p+296|0;j=c[n>>2]|0;if(!j){j=p+292|0;break}else{c[n>>2]=c[j>>2];F=p+284|0;c[F>>2]=(c[F>>2]|0)+1;F=162;break p}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,m,q)|0;F=162}while(0);if((F|0)==162){F=0;if(!j){F=164;break}}n=j;q=j;w=(j|0)==0?H:m}m=n+(w+-1)|0;if((C|0)==22){E=_v(l|0,k|0,10,0)|0;j=L()|0;H=Yv(E|0,j|0,10,0)|0;H=Tv(l|0,k|0,H|0,L()|0)|0;L()|0;j=$v(E|0,j|0,10,0)|0;j=(H|0)>3|(j|0)==1&(L()|0)==0;H=(j?0:H)<<1;j=m+-1|0;a[j>>0]=a[31151+(H|1)>>0]|0;j=j+-1|0;a[j>>0]=a[31151+H>>0]|0}else j=m;n=160+(d[16+(C*6|0)+4>>0]|0)|0;p=d[16+(C*6|0)+1>>0]|0;do{H=l;l=_v(l|0,k|0,p|0,0)|0;E=k;k=L()|0;D=Yv(l|0,k|0,p|0,0)|0;D=Tv(H|0,E|0,D|0,L()|0)|0;L()|0;j=j+-1|0;a[j>>0]=a[n+D>>0]|0}while(!(E>>>0<0|(E|0)==0&H>>>0

      >>0));p=m;k=j;l=p-k|0;if((u|0)>(l|0)){j=j+(p-u-k)|0;gw(j|0,48,u+k-p|0)|0;l=u}if(v<<24>>24){k=l+-1|0;m=(k|0)/3|0;j=j+(0-m)|0;if((l|0)>3){k=k-(m*3|0)+1|0;l=0;do{a[j+l>>0]=a[j+(l+m)>>0]|0;k=k+-1|0;n=l+1|0;if(!k){a[j+n>>0]=v;k=3;m=m+-1|0;l=l+2|0}else l=n}while((m|0)>0)}}if(z<<24>>24){j=j+-1|0;a[j>>0]=z}if(x<<24>>24!=0?(7860991>>>C&1|0)==0:0){k=31160+(d[16+(C*6|0)+5>>0]|0)|0;l=k;k=a[k>>0]|0;do{j=j+-1|0;a[j>>0]=k;l=l+1|0;k=a[l>>0]|0}while(k<<24>>24!=0)}n=p-j|0;m=w}h=h-n|0;do if((h|0)>0){l=c[ca>>2]|0;if(!(y<<24>>24)){H=Sv(l|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)>=1)F=514}else F=514;if((F|0)==514){F=0;while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(!n)break;c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0;break}else{k=l+n|0;if(k>>>0<(c[da>>2]|0)>>>0){if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+l|0,j|0,n|0)|0}}else wb(f,j,n);H=Sv(c[ca>>2]|0,0,h|0,((h|0)<0)<<31>>31|0)|0;E=L()|0;if(!((E|0)<0|((E|0)==0?H>>>0<(c[da>>2]|0)>>>0:0))){h=vb(f,h)|0;if((h|0)<1)break}while(1){E=c[ea>>2]|0;H=c[ca>>2]|0;c[ca>>2]=H+1;a[E+H>>0]=32;if((h|0)>1)h=h+-1|0;else break}}}else{h=c[ca>>2]|0;k=h+n|0;if(k>>>0>=(c[da>>2]|0)>>>0){wb(f,j,n);break}if(n|0){c[ca>>2]=k;ew((c[ea>>2]|0)+h|0,j|0,n|0)|0}}while(0);do if(q|0){h=c[f>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,q);break}H=q;if((c[h+304>>2]|0)>>>0<=H>>>0?(c[h+308>>2]|0)>>>0>H>>>0:0){H=h+300|0;c[q>>2]=c[H>>2];c[H>>2]=q;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{H=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);h=G+1|0;H=m}if((F|0)==13){h=c[ca>>2]|0;j=h+1|0;if(j>>>0<(c[da>>2]|0)>>>0){c[ca>>2]=j;a[(c[ea>>2]|0)+h>>0]=37;Ra=fa;return}else{wb(f,31149,1);Ra=fa;return}}else if((F|0)==121){a[S>>0]=18;if(Y|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==164){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==236){a[S>>0]=18;if($|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==278){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==423){a[S>>0]=18;if(O|0){if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}aa=j;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[j>>2]=c[aa>>2];c[aa>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{aa=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0}h=c[f>>2]|0;if(!h){Ra=fa;return}h=c[h+236>>2]|0;if(!h){Ra=fa;return}c[h+12>>2]=18;ea=h+36|0;c[ea>>2]=(c[ea>>2]|0)+1;Ra=fa;return}else if((F|0)==465){a[S>>0]=7;if(!(c[W>>2]|0)){Ra=fa;return}if(a[ba>>0]&4){h=c[f>>2]|0;j=c[ea>>2]|0;do if(j|0){if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}f=j;if((c[h+304>>2]|0)>>>0<=f>>>0?(c[h+308>>2]|0)>>>0>f>>>0:0){f=h+300|0;c[j>>2]=c[f>>2];c[f>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a[ba>>0]=a[ba>>0]&-5}c[da>>2]=0;c[ca>>2]=0;c[ea>>2]=0;Ra=fa;return}else if((F|0)==543){Ra=fa;return}}function ub(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=a+16|0;f=c[e>>2]|0;g=f+d|0;if(g>>>0>=(c[a+8>>2]|0)>>>0){wb(a,b,d);return}if(!d)return;c[e>>2]=g;ew((c[a+4>>2]|0)+f|0,b|0,d|0)|0;return}function vb(b,d){b=b|0;d=d|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;q=b+20|0;if(a[q>>0]|0){s=0;return s|0}p=b+12|0;i=c[p>>2]|0;if(!i){a[q>>0]=18;f=c[b>>2]|0;if(f|0?(g=c[f+236>>2]|0,g|0):0){c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1}s=(c[b+8>>2]|0)+-1-(c[b+16>>2]|0)|0;return s|0}s=b+21|0;g=a[s>>0]|0;f=(g&4)==0;if(f)j=0;else j=c[b+4>>2]|0;r=b+16|0;k=c[r>>2]|0;v=d+1|0;v=Sv(k|0,0,v|0,((v|0)<0)<<31>>31|0)|0;t=L()|0;k=Sv(v|0,t|0,k|0,0)|0;o=L()|0;u=(o|0)>0|(o|0)==0&k>>>0>i>>>0;k=u?v:k;o=u?t:o;if((o|0)>0|(o|0)==0&k>>>0>i>>>0){if(!f){f=c[b>>2]|0;h=b+4|0;g=c[h>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}v=g;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[g>>2]=c[v>>2];c[v>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{v=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=a[s>>0]&-5;a[s>>0]=g;v=c[p>>2]|0;f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[h>>2]=0;a[q>>0]=18;if(v|0)n=23}else{f=b+8|0;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0;a[q>>0]=18;n=23}if((n|0)==23){if(g&4)a[s>>0]=g&-5;c[f>>2]=0;c[r>>2]=0;c[b+4>>2]=0}f=c[b>>2]|0;if(!f){v=0;return v|0}f=c[f+236>>2]|0;if(!f){v=0;return v|0}c[f+12>>2]=18;v=f+36|0;c[v>>2]=(c[v>>2]|0)+1;v=0;return v|0}o=b+8|0;c[o>>2]=k;i=c[b>>2]|0;a:do if(!i){if(!(mb()|0)){h=sb(j,k,0)|0;n=49}}else{if(j|0){v=j;if((c[i+304>>2]|0)>>>0<=v>>>0?(c[i+308>>2]|0)>>>0>v>>>0:0){if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){h=j;n=51;break}h=Zd(i,j,k,0)|0;n=49;break}h=Zd(i,j,k,0)|0;n=49;break}if(c[i+272>>2]|0){if(a[i+81>>0]|0)break}else{do if(!(0>0|(0==0?k>>>0>(e[i+276>>1]|0)>>>0:0))){f=i+300|0;h=c[f>>2]|0;if(h|0){c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}f=i+296|0;h=c[f>>2]|0;if(!h){f=i+292|0;break}else{c[f>>2]=c[h>>2];n=i+284|0;c[n>>2]=(c[n>>2]|0)+1;n=49;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}h=_d(i,k,0)|0;n=49}while(0);if((n|0)==49?h|0:0){g=a[s>>0]|0;n=51}if((n|0)==51){if((g&4)==0?(l=c[r>>2]|0,l|0):0)ew(h|0,c[b+4>>2]|0,l|0)|0;c[b+4>>2]=h;f=c[b>>2]|0;if(((f|0)!=0?(m=h,(c[f+304>>2]|0)>>>0<=m>>>0):0)?(c[f+308>>2]|0)>>>0>m>>>0:0)f=e[f+276>>1]|0;else f=Wa[c[29352>>2]&127](h)|0;c[o>>2]=f;a[s>>0]=a[s>>0]|4;v=d;return v|0}f=a[s>>0]|0;if(!(f&4))g=b+4|0;else{f=c[b>>2]|0;g=b+4|0;h=c[g>>2]|0;do if(h|0){if(f|0){if(c[f+480>>2]|0){Xd(f,h);break}v=h;if((c[f+304>>2]|0)>>>0<=v>>>0?(c[f+308>>2]|0)>>>0>v>>>0:0){v=f+300|0;c[h>>2]=c[v>>2];c[v>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{v=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);f=a[s>>0]&-5;a[s>>0]=f}c[o>>2]=0;c[r>>2]=0;c[g>>2]=0;a[q>>0]=7;if(!(c[p>>2]|0)){v=0;return v|0}if(f&4)a[s>>0]=f&-5;c[o>>2]=0;c[r>>2]=0;c[b+4>>2]=0;v=0;return v|0}function wb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;d=vb(a,d)|0;if((d|0)<=0)return;e=a+16|0;ew((c[a+4>>2]|0)+(c[e>>2]|0)|0,b|0,d|0)|0;c[e>>2]=(c[e>>2]|0)+d;return}function xb(a){a=a|0;if(!a){a=0;return a|0}a=(Eu(a)|0)&1073741823;return a|0}function yb(b){b=b|0;var d=0,e=0;d=b+4|0;e=c[d>>2]|0;if((e|0?(a[e+(c[b+16>>2]|0)>>0]=0,c[b+12>>2]|0):0)?(a[b+21>>0]&4)==0:0){e=$d(b)|0;return e|0}e=c[d>>2]|0;return e|0}function zb(b){b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=29632;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=29632;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=29632;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}if(!b){c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=1e9;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}else{g=c[b+108>>2]|0;c[d+4>>2]=0;c[d>>2]=0;c[d+8>>2]=0;c[d+12>>2]=g;c[d+16>>2]=0;a[d+20>>0]=0;a[d+21>>0]=0;g=d;return g|0}return 0}function Ab(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+96|0;f=j+72|0;if(mb()|0){i=0;Ra=j;return i|0}g=f+4|0;c[g>>2]=j;c[f>>2]=0;c[f+8>>2]=70;h=f+12|0;c[h>>2]=1e9;i=f+16|0;c[i>>2]=0;a[f+20>>0]=0;e=f+21|0;a[e>>0]=0;tb(f,b,d);b=c[g>>2]|0;if((b|0?(a[b+(c[i>>2]|0)>>0]=0,c[h>>2]|0):0)?(a[e>>0]&4)==0:0){i=$d(f)|0;Ra=j;return i|0}i=c[g>>2]|0;Ra=j;return i|0}function Bb(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+112|0;j=k+88|0;h=k;if(mb()|0){j=0;Ra=k;return j|0}c[h>>2]=d;do if(!(mb()|0)){i=j+4|0;c[i>>2]=k+16;c[j>>2]=0;c[j+8>>2]=70;e=j+12|0;c[e>>2]=1e9;f=j+16|0;c[f>>2]=0;a[j+20>>0]=0;g=j+21|0;a[g>>0]=0;tb(j,b,h);d=c[i>>2]|0;if((d|0?(a[d+(c[f>>2]|0)>>0]=0,c[e>>2]|0):0)?(a[g>>0]&4)==0:0){d=$d(j)|0;break}d=c[i>>2]|0}else d=0;while(0);j=d;Ra=k;return j|0}function Cb(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;j=Ra;Ra=Ra+48|0;h=j+16|0;i=j;c[i>>2]=g;if((d|0)<1){Ra=j;return e|0}c[h+4>>2]=e;c[h>>2]=0;c[h+8>>2]=d;g=h+12|0;c[g>>2]=0;c[g+4>>2]=0;b[g+8>>1]=0;tb(h,f,i);a[e+(c[h+16>>2]|0)>>0]=0;Ra=j;return e|0}function Db(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;l=Ra;Ra=Ra+256|0;k=l+232|0;g=l;if(!(c[7387]|0)){Ra=l;return}c[g>>2]=f;i=k+4|0;c[i>>2]=l+16;c[k>>2]=0;c[k+8>>2]=210;j=k+12|0;h=k+21|0;c[j>>2]=0;c[j+4>>2]=0;b[j+8>>1]=0;tb(k,e,g);e=c[7387]|0;g=c[7388]|0;f=c[i>>2]|0;if(((f|0)!=0?(a[f+(c[k+16>>2]|0)>>0]=0,(c[j>>2]|0)!=0):0)?(a[h>>0]&4)==0:0)f=$d(k)|0;else f=c[i>>2]|0;cb[e&255](g,d,f);Ra=l;return}function Eb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=d;tb(a,b,f);Ra=e;return}function Fb(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;i=Ra;Ra=Ra+256|0;h=i;if(mb()|0){Ra=i;return}if((b|0)<1|(e|0)==0){a[59955]=0;Ra=i;return}if(!(a[59955]|0)){a[59957]=0;a[59956]=0;f=(mb()|0)==0;f=f?c[14770]|0:0;Ya[c[f+56>>2]&127](f,256,h)|0;f=0;do{a[59958+f>>0]=f;f=f+1|0}while((f|0)!=256);f=0;g=a[59957]|0;do{j=59958+f|0;m=a[j>>0]|0;l=(d[h+f>>0]|0)+(m&255)+(g&255)|0;g=l&255;l=59958+(l&255)|0;k=a[l>>0]|0;a[l>>0]=m;a[j>>0]=k;f=f+1|0}while((f|0)!=256);a[59957]=g;a[59955]=1}while(1){l=(a[59956]|0)+1<<24>>24;a[59956]=l;l=59958+(l&255)|0;j=a[l>>0]|0;m=j&255;k=(d[59957]|0)+m|0;a[59957]=k;k=59958+(k&255)|0;a[l>>0]=a[k>>0]|0;a[k>>0]=j;a[e>>0]=a[59958+((d[l>>0]|0)+m&255)>>0]|0;b=b+-1|0;if(!b)break;else e=e+1|0}Ra=i;return}function Gb(b,c){b=b|0;c=c|0;var e=0,f=0;if(!b){e=((c|0)!=0)<<31>>31;return e|0}if(!c){e=1;return e|0}f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Hb(b,c){b=b|0;c=c|0;var e=0,f=0;f=a[b>>0]|0;e=(d[208+(f&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(f<<24>>24==0|(e|0)!=0){f=e;return f|0}e=c;do{b=b+1|0;e=e+1|0;f=a[b>>0]|0;c=(d[208+(f&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(f<<24>>24==0|(c|0)!=0));return c|0}function Ib(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!b){g=((c|0)!=0)<<31>>31;return g|0}if(!c){g=1;return g|0}if((e|0)<=0){g=0;return g|0}f=e;while(1){e=a[b>>0]|0;if(!(e<<24>>24)){f=7;break}e=a[208+(e&255)>>0]|0;g=a[208+(d[c>>0]|0)>>0]|0;if(e<<24>>24!=g<<24>>24){f=9;break}if((f|0)>1){b=b+1|0;c=c+1|0;f=f+-1|0}else{b=0;f=12;break}}if((f|0)==7){e=0;b=a[208+(d[c>>0]|0)>>0]|0}else if((f|0)==9){e=e&255;b=g}else if((f|0)==12)return b|0;g=e-(b&255)|0;return g|0}function Jb(d,e,f,g,h){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,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;H=Ra;Ra=Ra+1232|0;E=H+1200|0;D=H+1192|0;F=H+1168|0;w=H+1144|0;v=H+1128|0;G=H+1048|0;C=H+528|0;n=H;m=g&-256;s=g&16;z=g&8;q=g&4;k=g&1;r=g&2;a:do if(!q)A=0;else{b:do if((m|0)>=16384)if((m|0)<524288)switch(m|0){case 16384:{A=1;break a}default:break b}else switch(m|0){case 524288:{A=1;break a}default:break b}else switch(m|0){case 2048:{A=1;break a}default:{}}while(0);A=0}while(0);y=c[14796]|0;if((y|0)!=(Ju()|0)?(y=Ju()|0,c[14796]=y,(mb()|0)==0):0)a[59955]=0;o=f;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));y=(m|0)==256;if(!y)if(!e){i=ye(c[d+8>>2]|0,n)|0;if(!i){u=n;i=-1}else{f=i;Ra=H;return f|0}}else{u=e;i=-1}else{c:do if(((c[14795]|0)!=0?(Xa[c[2388>>2]&255](e,G)|0)==0:0)?(i=c[14795]|0,(i|0)!=0):0){m=c[G>>2]|0;n=c[G+72>>2]|0;while(1){if((c[i>>2]|0)==(m|0)?(u=i+8|0,(c[u+4>>2]|0)==0?(c[u>>2]|0)==(n|0):0):0)break;i=c[i+44>>2]|0;if(!i){B=20;break c}}i=i+32|0;m=c[i>>2]|0;if(m){while(1){n=m+8|0;if((c[m+4>>2]|0)==(g|0))break;m=c[n>>2]|0;if(!m){B=20;break c}else i=n}c[i>>2]=c[n>>2];i=m;m=c[m>>2]|0}else B=20}else B=20;while(0);do if((B|0)==20){if(mb()|0){f=7;Ra=H;return f|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](12)|0;if(!i)i=7;else{m=-1;break}Ra=H;return i|0}i=Wa[c[29356>>2]&127](12)|0;if((c[14985]|0)>>>0<12)c[14985]=12;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){u=c[14978]|0;t=Tv(m|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&t>>>0<=u>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;Ra=H;return f|0}m=Wa[c[29352>>2]&127](i)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m;m=-1}while(0);c[f+28>>2]=i;u=e;i=m}t=(r|0)!=0;q=q<<4|r;q=(s|0)==0?q:q|131200;d:do if((i|0)<0){i=g&526336;e:do if(!i)if(!z)if(!((g&64|0)==0|(u|0)==0)?(l=u+(((Eu(u)|0)&1073741823)+1)|0,(a[l>>0]|0)!=0):0){while(1){s=Bu(l,32118)|0;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!s)break;l=l+(((Eu(l)|0)&1073741823)+1)|0;if(!(a[l>>0]|0)){p=0;n=0;m=0;break e}}if(!(Xa[c[2388>>2]&255](l,G)|0)){l=0;m=c[G+24>>2]|0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{l=1802;m=0;n=0;o=0}B=57}else{p=0;n=0;m=0}else{p=0;n=0;m=384}else{if(!u)l=-1;else l=((Eu(u)|0)&1073741823)+-1|0;m=a[u+l>>0]|0;f:do if(m<<24>>24!=45){while(1){if(m<<24>>24==46|(l|0)==0)break;l=l+-1|0;m=a[u+l>>0]|0;if(m<<24>>24==45)break f}p=0;n=0;m=0;break e}while(0);ew(C|0,u|0,l|0)|0;a[C+l>>0]=0;if(!(Xa[c[2388>>2]&255](C,G)|0)){m=c[G+24>>2]|0;l=0;n=c[G+20>>2]|0;o=c[G+12>>2]&511}else{m=0;l=1802;n=0;o=0}B=57}while(0);if((B|0)==57)if(!l){p=m;m=o}else{f=l;Ra=H;return f|0}l=xe(u,q,m)|0;do if((l|0)<0){if((A?(s=uu()|0,(c[s>>2]|0)==13):0)?(Xa[c[2364>>2]&255](u,0)|0)!=0:0)i=1544;else{s=uu()|0;if(t&(c[s>>2]|0)!=21?(x=xe(u,q&131200,m)|0,(x|0)>=0):0){m=g&-8|1;k=1;l=x;i=g&526336;break}else i=0}c[v>>2]=31984;c[v+4>>2]=38565;c[v+8>>2]=31517;Db(14,32001,v);G=uu()|0;G=c[G>>2]|0;j=dv(G)|0;c[w>>2]=38565;c[w+4>>2]=G;c[w+8>>2]=31690;c[w+12>>2]=(u|0)==0?59952:u;c[w+16>>2]=j;Db(14,31953,w);j=(i|0)==0?14:i;i=f+28|0;break d}else m=g;while(0);if((i|0)!=0?(Va[c[2592>>2]&127]()|0)==0:0){Ya[c[2580>>2]&127](l,n,p)|0;o=l;B=69}else{o=l;B=69}}else{m=g;o=i;B=69}while(0);g:do if((B|0)==69){if(h|0)c[h>>2]=m;p=f+28|0;i=c[p>>2]|0;if(i|0){c[i>>2]=o;c[i+4>>2]=m}if(z|0)Wa[c[2532>>2]&127](u)|0;l=z<<2;l=(k|0)==0?l:l|2;l=y?l:l|128;l=A?l|8:l;A=l|m&64;m=f+12|0;c[m>>2]=o;c[f+4>>2]=d;n=f+32|0;c[n>>2]=e;i=A&255;k=f+18|0;b[k>>1]=i;h:do if(!((e|0)==0|(A&64|0)==0)?(j=e+(((Eu(e)|0)&1073741823)+1)|0,(a[j>>0]|0)!=0):0){while(1){A=Bu(j,32125)|0;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!A)break;j=j+(((Eu(j)|0)&1073741823)+1)|0;if(!(a[j>>0]|0)){B=82;break h}}if((Zm(j,1,1)|0)<<24>>24){i=b[k>>1]|0;B=82}}else B=82;while(0);if((B|0)==82)b[k>>1]=i|16;if(!(Bu(c[d+16>>2]|0,31213)|0))b[k>>1]=b[k>>1]|1;i:do if(!(l&128)){i=Xa[c[c[d+20>>2]>>2]&255](e,f)|0;if((i|0)!=29668){if((i|0)!=29820)break;i=(Eu(e)|0)+6|0;j=pb(i,((i|0)<0)<<31>>31)|0;if(j|0){c[D>>2]=e;Cb(i,j,32130,D)|0;c[f+24>>2]=j;i=29820;break}c[f+24>>2]=0;c[f+20>>2]=0;if((o|0)<=-1){j=7;i=p;break g}if(!(Wa[c[2352>>2]&127](o)|0)){j=7;i=p;break g}i=c[n>>2]|0;f=uu()|0;f=c[f>>2]|0;j=dv(f)|0;c[E>>2]=38152;c[E+4>>2]=f;c[E+8>>2]=31695;c[E+12>>2]=(i|0)==0?59952:i;c[E+16>>2]=j;Db(4106,31953,E);j=7;i=p;break g}l=f+8|0;j:do if(!(Xa[c[2400>>2]&255](c[m>>2]|0,C)|0)){i=G;c[i>>2]=0;c[i+4>>2]=0;c[G>>2]=c[C>>2];i=G+8|0;c[i>>2]=c[C+72>>2];c[i+4>>2]=0;i=c[14795]|0;k:do if(!i)B=93;else{while(1){if(!(Lu(G,i,16)|0))break;i=c[i+44>>2]|0;if(!i){B=93;break k}}G=i+36|0;c[G>>2]=(c[G>>2]|0)+1}while(0);if((B|0)==93){if(mb()|0){j=7;break}do if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](56)|0;if(!i){j=7;break j}}else{i=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){E=c[14978]|0;D=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&D>>>0<=E>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){j=7;break j}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}while(0);j=i+16|0;o=j;p=o+40|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));c[i>>2]=c[G>>2];c[i+4>>2]=c[G+4>>2];c[i+8>>2]=c[G+8>>2];c[i+12>>2]=c[G+12>>2];if(c[7325]|0)c[j>>2]=8;c[i+36>>2]=1;j=c[14795]|0;c[i+44>>2]=j;c[i+48>>2]=0;if(j|0)c[j+48>>2]=i;c[14795]=i}c[l>>2]=i;i=29668;break i}else{j=uu()|0;j=c[j>>2]|0;c[f+20>>2]=j;j=(j|0)==75?22:10}while(0);if(Wa[c[2352>>2]&127](o)|0){if(!f)i=0;else i=c[n>>2]|0;E=uu()|0;E=c[E>>2]|0;G=dv(E)|0;c[F>>2]=38067;c[F+4>>2]=E;c[F+8>>2]=31695;c[F+12>>2]=(i|0)==0?59952:i;c[F+16>>2]=G;Db(4106,31953,F)}c[f+20>>2]=0;i=p;break g}else i=29744;while(0);c[f+20>>2]=0;c[f>>2]=i;te(f);f=0;Ra=H;return f|0}while(0);i=c[i>>2]|0;if(!i){f=j;Ra=H;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}else{f=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);f=j;Ra=H;return f|0}return 0}function Kb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+80|0;g=h+48|0;e=h+24|0;a=h;f=h+68|0;if((Wa[c[2532>>2]&127](b)|0)==-1){g=uu()|0;if((c[g>>2]|0)==2){g=5898;Ra=h;return g|0}f=uu()|0;f=c[f>>2]|0;g=dv(f)|0;c[a>>2]=38695;c[a+4>>2]=f;c[a+8>>2]=31800;c[a+12>>2]=(b|0)==0?59952:b;c[a+16>>2]=g;Db(2570,31953,a);g=2570;Ra=h;return g|0}if(!(d&1)){g=0;Ra=h;return g|0}if(!(Xa[c[2544>>2]&255](b,f)|0)){if(!(zv(c[f>>2]|0)|0))a=0;else{d=uu()|0;d=c[d>>2]|0;a=dv(d)|0;c[e>>2]=38705;c[e+4>>2]=d;c[e+8>>2]=32138;c[e+12>>2]=(b|0)==0?59952:b;c[e+16>>2]=a;Db(1290,31953,e);a=1290}if(Wa[c[2352>>2]&127](c[f>>2]|0)|0){d=uu()|0;d=c[d>>2]|0;f=dv(d)|0;c[g>>2]=38707;c[g+4>>2]=d;c[g+8>>2]=31695;c[g+12>>2]=59952;c[g+16>>2]=f;Db(4106,31953,g)}}else a=0;g=a;Ra=h;return g|0}function Lb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0;f=Ra;Ra=Ra+80|0;a=f;if(!d){d=(Xa[c[2388>>2]&255](b,a)|0)==0;c[e>>2]=d&(c[a+36>>2]|0)>0&1;Ra=f;return 0}else{d=(Xa[c[2364>>2]&255](b,6)|0)==0&1;c[e>>2]=d;Ra=f;return 0}return 0}function Mb(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,B=0,C=0;B=Ra;Ra=Ra+256|0;z=B+168|0;y=B+152|0;x=B+128|0;w=B+112|0;u=B+96|0;t=B+72|0;s=B+56|0;r=B+40|0;v=B+16|0;q=B;l=B+172|0;m=l+12|0;n=e+-1|0;o=e+-2|0;p=(f|0)==0;b=0;g=1;while(1){if(!(Xa[c[2664>>2]&255](d,l)|0))if((c[m>>2]&61440|0)==40960){if(!b){b=nb(e)|0;if(!b){b=0;d=7;C=34;break}else j=g}else if((g|0)>99){C=9;break}else j=g+1|0;g=Ya[c[2652>>2]&127](d,b,n)|0;if((g|0)<0){C=11;break}do if((a[b>>0]|0)!=47){a:do if((d|0)!=0?(A=(Eu(d)|0)&1073741823,(A|0)!=0):0){h=A;while(1){i=h+-1|0;if((a[d+i>>0]|0)==47)break a;if((h|0)>1)h=i;else{h=i;break}}}else h=0;while(0);i=h+g|0;if((i|0)<(e|0)){fw(b+h|0,b|0,g+1|0)|0;ew(b|0,d|0,h|0)|0;g=i;d=0;break}else{c[u>>2]=31984;c[u+4>>2]=38842;c[u+8>>2]=31517;Db(14,32001,u);d=14;break}}else d=0;while(0);a[b+g>>0]=0;k=b;g=j;i=0}else{k=d;d=0;i=1}else{k=uu()|0;if((c[k>>2]|0)==2){k=d;d=0;i=1}else{C=4;break}}if((d|0)!=0|(k|0)==(f|0)){if(i){C=36;break}}else{d=(k|0)==0;if(d)h=0;else h=(Eu(k)|0)&1073741823;if((a[k>>0]|0)==47)d=0;else{if(!(Xa[c[2376>>2]&255](f,o)|0)){C=27;break}if(p)d=0;else d=(Eu(f)|0)&1073741823;a[f+d>>0]=47;d=d+1|0}if((d+h|0)>=(e|0)){C=32;break}c[z>>2]=k;Cb(e-d|0,f+d|0,31408,z)|0;if(i){d=0;C=36;break}else d=0}if(!d)d=f;else break}if((C|0)==4){c[q>>2]=31984;c[q+4>>2]=38819;c[q+8>>2]=31517;Db(14,32001,q);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[v>>2]=38819;c[v+4>>2]=f;c[v+8>>2]=31888;c[v+12>>2]=(d|0)==0?59952:d;c[v+16>>2]=A;Db(14,31953,v);d=14;C=36}else if((C|0)==9){c[r>>2]=31984;c[r+4>>2]=38830;c[r+8>>2]=31517;Db(14,32001,r);d=14;C=34}else if((C|0)==11){c[s>>2]=31984;c[s+4>>2]=38836;c[s+8>>2]=31517;Db(14,32001,s);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[t>>2]=38836;c[t+4>>2]=f;c[t+8>>2]=31879;c[t+12>>2]=(d|0)==0?59952:d;c[t+16>>2]=A;Db(14,31953,t);d=14;C=34}else if((C|0)==27){c[w>>2]=31984;c[w+4>>2]=38762;c[w+8>>2]=31517;Db(14,32001,w);f=uu()|0;f=c[f>>2]|0;A=dv(f)|0;c[x>>2]=38762;c[x+4>>2]=f;c[x+8>>2]=31708;c[x+12>>2]=d?59952:k;c[x+16>>2]=A;Db(14,31953,x);d=14;C=34}else if((C|0)==32){a[f+d>>0]=0;c[y>>2]=31984;c[y+4>>2]=38771;c[y+8>>2]=31517;Db(14,32001,y);d=14;C=34}if(!b){Ra=B;return d|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);Ra=B;return d|0}else{C=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);Ra=B;return d|0}return 0}function Nb(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+32|0;h=i+8|0;g=i;b=i+28|0;gw(e|0,0,d|0)|0;f=Ju()|0;c[14796]=f;while(1){f=Ya[c[2340>>2]&127](32144,524288,420)|0;if((f|0)<0){f=uu()|0;if((c[f>>2]|0)!=4){j=8;break}}else{if((f|0)>2)break;Wa[c[2352>>2]&127](f)|0;c[g>>2]=32144;c[g+4>>2]=f;Db(28,31900,g);if((Ya[c[2340>>2]&127](31943,0,0)|0)<0){j=8;break}}}if((j|0)==8){La(b|0)|0;j=c[b>>2]|0;a[e>>0]=j;a[e+1>>0]=j>>8;a[e+2>>0]=j>>16;a[e+3>>0]=j>>24;j=e+4|0;e=c[14796]|0;a[j>>0]=e;a[j+1>>0]=e>>8;a[j+2>>0]=e>>16;a[j+3>>0]=e>>24;j=8;Ra=i;return j|0}do{if((Ya[c[2436>>2]&127](f,e,d)|0)>=0)break;j=uu()|0}while((c[j>>2]|0)==4);if(!(Wa[c[2352>>2]&127](f)|0)){j=d;Ra=i;return j|0}e=uu()|0;e=c[e>>2]|0;j=dv(e)|0;c[h>>2]=38966;c[h+4>>2]=e;c[h+8>>2]=31695;c[h+12>>2]=59952;c[h+16>>2]=j;Db(4106,31953,h);j=d;Ra=i;return j|0}function Ob(a,b){a=a|0;b=b|0;b=(b+999999|0)/1e6|0;Av(b)|0;return b*1e6|0}function Pb(a,b){a=a|0;b=b|0;var d=0.0,e=0,f=0,h=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;h=c[e>>2]|0;h=Yv(h|0,((h|0)<0)<<31>>31|0,1e3,0)|0;h=Sv(h|0,L()|0,1045635584,49096)|0;f=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(h|0,f|0,e|0,((e|0)<0)<<31>>31|0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))/864.0e5;g[b>>3]=d;Ra=a;return 0}function Qb(a,b,d){a=a|0;b=b|0;d=d|0;d=uu()|0;return c[d>>2]|0}function Rb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a=Ra;Ra=Ra+16|0;e=a;Da(e|0,0)|0;f=c[e>>2]|0;f=Yv(f|0,((f|0)<0)<<31>>31|0,1e3,0)|0;f=Sv(f|0,L()|0,1045635584,49096)|0;d=L()|0;e=(c[e+4>>2]|0)/1e3|0;e=Sv(f|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;Ra=a;return 0}function Sb(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(b|0){do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(!(Bu(b,c[632]|0)|0))e=16;else{if(!(Bu(b,c[635]|0)|0)){e=17;break}if(!(Bu(b,c[638]|0)|0)){e=18;break}if(!(Bu(b,c[641]|0)|0)){e=19;break}if(!(Bu(b,c[644]|0)|0)){e=20;break}if(!(Bu(b,c[647]|0)|0)){e=21;break}if(!(Bu(b,c[650]|0)|0)){e=22;break}if(!(Bu(b,c[653]|0)|0)){e=23;break}if(!(Bu(b,c[656]|0)|0)){e=24;break}if(!(Bu(b,c[659]|0)|0)){e=25;break}if(!(Bu(b,c[662]|0)|0)){e=26;break}if(!(Bu(b,c[665]|0)|0)){e=27;break}if(!(Bu(b,c[668]|0)|0)){e=28;break}else a=12;return a|0}else e=15;else e=14;else e=13;else e=12;else e=11;else e=10;else e=9;else e=8;else e=7;else e=6;else e=5;else e=4;else e=3;else e=2;else e=1;else e=0;while(0);b=2336+(e*12|0)+8|0;a=c[b>>2]|0;if(!a){a=c[2336+(e*12|0)+4>>2]|0;c[b>>2]=a}c[2336+(e*12|0)+4>>2]=(d|0)==0?a:d;d=0;return d|0}a=c[586]|0;if(a|0)c[585]=a;a=c[589]|0;if(a|0)c[588]=a;a=c[592]|0;if(a|0)c[591]=a;a=c[595]|0;if(a|0)c[594]=a;a=c[598]|0;if(a|0)c[597]=a;a=c[601]|0;if(a|0)c[600]=a;a=c[604]|0;if(a|0)c[603]=a;a=c[607]|0;if(a|0)c[606]=a;a=c[610]|0;if(a|0)c[609]=a;a=c[613]|0;if(a|0)c[612]=a;a=c[616]|0;if(a|0)c[615]=a;a=c[619]|0;if(a|0)c[618]=a;a=c[622]|0;if(a|0)c[621]=a;a=c[625]|0;if(a|0)c[624]=a;a=c[628]|0;if(a|0)c[627]=a;a=c[631]|0;if(a|0)c[630]=a;a=c[634]|0;if(a|0)c[633]=a;a=c[637]|0;if(a|0)c[636]=a;a=c[640]|0;if(a|0)c[639]=a;a=c[643]|0;if(a|0)c[642]=a;a=c[646]|0;if(a|0)c[645]=a;a=c[649]|0;if(a|0)c[648]=a;a=c[652]|0;if(a|0)c[651]=a;a=c[655]|0;if(a|0)c[654]=a;a=c[658]|0;if(a|0)c[657]=a;a=c[661]|0;if(a|0)c[660]=a;a=c[664]|0;if(a|0)c[663]=a;a=c[667]|0;if(a|0)c[666]=a;a=c[670]|0;if(!a){d=0;return d|0}c[669]=a;d=0;return d|0}function Tb(a,b){a=a|0;b=b|0;do if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(Bu(b,c[635]|0)|0)if(!(Bu(b,c[638]|0)|0))a=18;else{if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}if(!(Bu(b,c[668]|0)|0)){a=28;break}else a=0;return a|0}else a=17;else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;while(0);b=c[2336+(a*12|0)+4>>2]|0;return b|0}function Ub(a,b){a=a|0;b=b|0;var d=0;do if(b)if(Bu(b,c[584]|0)|0)if(Bu(b,c[587]|0)|0)if(Bu(b,c[590]|0)|0)if(Bu(b,c[593]|0)|0)if(Bu(b,c[596]|0)|0)if(Bu(b,c[599]|0)|0)if(Bu(b,c[602]|0)|0)if(Bu(b,c[605]|0)|0)if(Bu(b,c[608]|0)|0)if(Bu(b,c[611]|0)|0)if(Bu(b,c[614]|0)|0)if(Bu(b,c[617]|0)|0)if(Bu(b,c[620]|0)|0)if(Bu(b,c[623]|0)|0)if(Bu(b,c[626]|0)|0)if(Bu(b,c[629]|0)|0)if(Bu(b,c[632]|0)|0)if(!(Bu(b,c[635]|0)|0))a=17;else{if(!(Bu(b,c[638]|0)|0)){a=18;break}if(!(Bu(b,c[641]|0)|0)){a=19;break}if(!(Bu(b,c[644]|0)|0)){a=20;break}if(!(Bu(b,c[647]|0)|0)){a=21;break}if(!(Bu(b,c[650]|0)|0)){a=22;break}if(!(Bu(b,c[653]|0)|0)){a=23;break}if(!(Bu(b,c[656]|0)|0)){a=24;break}if(!(Bu(b,c[659]|0)|0)){a=25;break}if(!(Bu(b,c[662]|0)|0)){a=26;break}if(!(Bu(b,c[665]|0)|0)){a=27;break}else a=0;return a|0}else a=16;else a=15;else a=14;else a=13;else a=12;else a=11;else a=10;else a=9;else a=8;else a=7;else a=6;else a=5;else a=4;else a=3;else a=2;else a=1;else a=0;else a=-1;while(0);while(1){b=a;a=a+1|0;if(c[2336+(a*12|0)+4>>2]|0)break;if((b|0)>=27){a=0;d=8;break}}if((d|0)==8)return a|0;d=c[2336+(a*12|0)>>2]|0;return d|0}function Vb(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;f=g;c[a+64>>2]=b;Le(a,b);if(!d){Xb(a,b);Ra=g;return}b=a+260|0;if((c[b>>2]|0)==0?(h=wd(a)|0,c[b>>2]=h,(h|0)==0):0){Ra=g;return}c[f>>2]=e;a=Me(a,d,f)|0;b=c[b>>2]|0;if(b|0)yc(b,a,-1,1,116)|0;Ra=g;return}function Wb(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;e=Sv(a|0,b|0,-1,-1)|0;d=L()|0;if(d>>>0>0|(d|0)==0&e>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){b=Wa[c[29340>>2]&127](a)|0;if(!b){e=0;return e|0}}else{b=Wa[c[29356>>2]&127](a)|0;if((c[14985]|0)>>>0>>0)c[14985]=a;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){f=c[14978]|0;e=Tv(d|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=f>>>0)&1}b=Wa[c[29340>>2]&127](b)|0;if(!b){f=0;return f|0}d=Wa[c[29352>>2]&127](b)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}gw(b|0,0,a|0)|0;f=b;return f|0}function Xb(a,b){a=a|0;b=b|0;c[a+64>>2]=b;if(b|0){Ne(a,b);return}if(!(c[a+260>>2]|0))return;Ne(a,0);return}function Yb(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,A=0,B=0,C=0,D=0,E=0,F=0;F=Ra;Ra=Ra+16|0;v=F;D=d+24|0;i=c[D>>2]|0;h=c[i+4>>2]|0;c[h+4>>2]=c[i>>2];E=d+28|0;g=c[E>>2]|0;switch(g|0){case 6:case 0:case 5:break;default:{E=g;Ra=F;return E|0}}u=c[h>>2]|0;x=d+4|0;w=c[c[(c[x>>2]|0)+4>>2]>>2]|0;if((c[d>>2]|0)!=0?(a[h+20>>0]|0)==2:0){C=0;g=5}else if(!(a[i+8>>0]|0)){C=1;g=Zb(i,0,0)|0}else{C=0;g=0}o=d+12|0;if((c[o>>2]|g|0)==0?(t=c[x>>2]|0,j=c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0,p=c[t+4>>2]|0,c[p+4>>2]=c[t>>2],(b[p+22>>1]&2)==0):0){k=p+32|0;l=p+36|0;m=(c[k>>2]|0)-(c[l>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[k>>2]=j,q=p+80|0,n=c[q>>2]|0,n|0):0){i=n+-4|0;c[q>>2]=i;h=i;do if((c[14816]|0)>>>0<=h>>>0)if((c[14817]|0)>>>0>h>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16;break}else{h=Wa[c[29352>>2]&127](i)|0;B=16}while(0);do if((B|0)==16){c[14980]=(c[14980]|0)-h;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0}t=Se(c[p>>2]|0,k,m)|0;c[l>>2]=(c[k>>2]|0)-(m&65535);if((t|0)==7)g=7;else B=21}else B=21;if((B|0)==21)if(!g)if(!(c[o>>2]|0)){g=Zb(c[x>>2]|0,2,d+8|0)|0;if(!g){c[o>>2]=1;g=0}}else g=0;l=c[(c[D>>2]|0)+4>>2]|0;t=c[l+32>>2]|0;n=c[(c[x>>2]|0)+4>>2]|0;s=c[n+32>>2]|0;n=(a[(c[n>>2]|0)+5>>0]|0)==5;g=(t|0)==(s|0)|(g|0)==0&n^1?g:8;l=c[l+44>>2]|0;a:do if(e){j=d+16|0;k=u+204|0;i=0;h=c[j>>2]|0;do{if(!((g|0)==0&h>>>0<=l>>>0))break a;if((h|0)==((1073741824/((c[(c[(c[D>>2]|0)+4>>2]|0)+32>>2]|0)>>>0)|0)+1|0))g=0;else{g=Za[c[k>>2]&127](u,h,v,2)|0;do if(!g){g=_b(d,h,c[(c[v>>2]|0)+4>>2]|0,0)|0;h=c[v>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{q=c[h+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[h+16>>2]=c[q>>2];c[q>>2]=h;break}}while(0);h=c[j>>2]|0}h=h+1|0;c[j>>2]=h;i=i+1|0}while(i>>>0>>0)}while(0);switch(g|0){case 0:{c[d+36>>2]=l;e=c[d+16>>2]|0;c[d+32>>2]=l+1-e;if(e>>>0<=l>>>0){f=d+40|0;if(!(c[f>>2]|0)){A=(c[c[(c[D>>2]|0)+4>>2]>>2]|0)+88|0;c[d+44>>2]=c[A>>2];c[A>>2]=d;c[f>>2]=1;f=0}else f=0}else B=40;break}case 101:{B=40;break}default:f=g}b:do if((B|0)==40){if(!l){e=c[x>>2]|0;g=c[e+4>>2]|0;c[g+4>>2]=c[e>>2];c[g+44>>2]=0;g=Rf(g)|0;switch(g|0){case 0:case 101:{m=1;break}default:{f=g;break b}}}else m=l;i=c[x>>2]|0;h=(c[d+8>>2]|0)+1|0;j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];j=c[j+12>>2]|0;i=c[j+56>>2]|0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){r=Ve(j)|0;B=50}}else B=46;do if((B|0)==46){g=c[k+40>>2]|0;if(g|0){f=g;break b}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){r=Wf(j)|0;B=50;break}else{r=Xf(j)|0;B=50;break}}while(0);if((B|0)==50?r|0:0){f=r;break}a[i+40>>0]=h>>>24;a[i+41>>0]=h>>>16;a[i+42>>0]=h>>>8;a[i+43>>0]=h;g=c[d>>2]|0;if(g|0)$b(g);c:do if(n){i=c[x>>2]|0;g=c[i+4>>2]|0;l=g+22|0;b[l>>1]=b[l>>1]&-33;h=Zb(i,0,0)|0;d:do if(!h){h=g+12|0;j=c[(c[h>>2]|0)+56>>2]|0;k=j+18|0;if(!((a[k>>0]|0)==2?(a[j+19>>0]|0)==2:0)){g=Zb(i,2,0)|0;if(g|0){f=g;break}g=c[(c[h>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[h+96>>2]|0){f=Ve(g)|0;B=66}}else B=62;do if((B|0)==62){f=c[h+40>>2]|0;if(f|0)break d;if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;B=66;break}else{f=Xf(g)|0;B=66;break}}while(0);if((B|0)==66?f|0:0)break;a[k>>0]=2;a[j+19>>0]=2}b[l>>1]=b[l>>1]&-33;break c}else f=h;while(0);b[l>>1]=b[l>>1]&-33;break b}while(0);if((t|0)<(s|0)){f=(s|0)/(t|0)|0;f=(m+-1+f|0)/(f|0)|0;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0;f=f+(((f|0)==((1073741824/(g>>>0)|0)+1|0))<<31>>31)|0;n=((t|0)<0)<<31>>31;o=Yv(m|0,((m|0)<0)<<31>>31|0,t|0,n|0)|0;p=L()|0;q=w+60|0;m=c[q>>2]|0;j=c[w+24>>2]|0;if(f>>>0<=j>>>0){k=w+204|0;i=f;f=0;h=1073741824;while(1){if((i|0)!=(((h>>>0)/(g>>>0)|0)+1|0)){f=Za[c[k>>2]&127](w,i,v,0)|0;do if(!f){g=c[v>>2]|0;h=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(!(c[h+96>>2]|0)){f=0;break}f=Ve(g)|0}else B=79;while(0);do if((B|0)==79){B=0;f=c[h+40>>2]|0;if(!f)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){f=Wf(g)|0;break}else{f=Xf(g)|0;break}}while(0);g=c[v>>2]|0;if(g)if(!(b[g+28>>1]&32)){Df(g);break}else{d=c[g+20>>2]|0;r=d+120|0;c[r>>2]=(c[r>>2]|0)+-1;d=d+136|0;c[g+16>>2]=c[d>>2];c[d>>2]=g;break}}while(0)}g=i+1|0;h=(f|0)==0;if(g>>>0>j>>>0|h^1)break;i=g;h=1073741824;g=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}if(h)B=91}else B=91;if((B|0)==91)f=ac(w,0,1)|0;k=1073741824+s|0;l=((k|0)<0)<<31>>31;h=(p|0)>(l|0)|(p|0)==(l|0)&o>>>0>k>>>0;k=h?k:o;l=h?l:p;h=1073741824+t|0;i=((h|0)<0)<<31>>31;g=(f|0)==0;if(((l|0)>(i|0)|(l|0)==(i|0)&k>>>0>h>>>0)&g){j=u+204|0;do{c[v>>2]=0;f=Wv(h|0,i|0,t|0,n|0)|0;L()|0;f=Za[c[j>>2]&127](u,f+1|0,v,0)|0;if(!f)f=_a[c[(c[m>>2]|0)+12>>2]&127](m,c[(c[v>>2]|0)+4>>2]|0,t,h,i)|0;g=c[v>>2]|0;do if(g|0)if(!(b[g+28>>1]&32)){Df(g);break}else{s=c[g+20>>2]|0;d=s+120|0;c[d>>2]=(c[d>>2]|0)+-1;s=s+136|0;c[g+16>>2]=c[s>>2];c[s>>2]=g;break}while(0);h=Sv(h|0,i|0,t|0,n|0)|0;i=L()|0;g=(f|0)==0}while(((i|0)<(l|0)|(i|0)==(l|0)&h>>>0>>0)&g)}if(!g)break;f=Xa[c[(c[m>>2]|0)+24>>2]&255](m,v)|0;u=c[v+4>>2]|0;if((f|0)==0&((u|0)>(p|0)|((u|0)==(p|0)?(c[v>>2]|0)>>>0>o>>>0:0)))f=Ya[c[(c[m>>2]|0)+16>>2]&127](m,o,p)|0;if(f|0)break;f=c[q>>2]|0;g=c[f>>2]|0;if(g|0){f=Ya[c[g+40>>2]&127](f,21,0)|0;switch(f|0){case 0:case 12:break;default:break b}}if((a[w+7>>0]|0)==0?(z=c[q>>2]|0,A=a[w+10>>0]|0,A<<24>>24):0){y=Xa[c[(c[z>>2]|0)+20>>2]&255](z,A&255)|0;B=111}}else{y=G((t|0)/(s|0)|0,m)|0;c[w+24>>2]=y;y=ac(w,0,0)|0;B=111}if((B|0)==111?y|0:0){f=y;break}f=bc(c[x>>2]|0,0)|0;f=(f|0)==0?101:f}while(0);if(C|0){cc(c[D>>2]|0,0)|0;bc(c[D>>2]|0,0)|0}D=(f|0)==3082?7:f;c[E>>2]=D;E=D;Ra=F;return E|0}function Zb(e,f,g){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,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;X=Ra;Ra=Ra+16|0;Q=X;K=X+12|0;W=c[e+4>>2]|0;m=c[e>>2]|0;P=W+4|0;c[P>>2]=m;U=e+8|0;n=a[U>>0]|0;do if(n<<24>>24!=2?(R=(f|0)!=0,R|n<<24>>24!=1):0){if(!(0==0?(c[m+32>>2]&33554432|0)==0:0)?(a[(c[W>>2]|0)+14>>0]|0)==0:0){T=W+22|0;b[T>>1]=b[T>>1]&-2}L=W+22|0;q=b[L>>1]|0;if(R&(q&1)!=0){e=8;Ra=X;return e|0}a:do if(R)if((q&128)==0&(a[W+20>>0]|0)!=2){if((f|0)>1?(o=c[W+72>>2]|0,o|0):0){m=o;do{n=c[m>>2]|0;if((n|0)!=(e|0)){p=n;J=16;break a}m=c[m+12>>2]|0}while((m|0)!=0)}}else J=10;else if(q&128)J=10;while(0);if((J|0)==10){p=c[W+76>>2]|0;J=16}if((J|0)==16?c[p>>2]|0:0){e=262;Ra=X;return e|0}I=e+9|0;b:do if(a[I>>0]|0){if(!((q&64)==0?1:(c[W+76>>2]|0)==(e|0))){e=262;Ra=X;return e|0}m=c[W+72>>2]|0;if(m|0){while(1){if(((c[m>>2]|0)!=(e|0)?(c[m+4>>2]|0)==1:0)?(a[m+8>>0]|0)!=1:0){h=262;break}m=c[m+12>>2]|0;if(!m)break b}Ra=X;return h|0}}while(0);b[L>>1]=q&-17;T=W+44|0;if(!(c[T>>2]|0))b[L>>1]=q|16;G=W+12|0;H=W+20|0;v=W+36|0;w=W+24|0;x=W+26|0;y=W+28|0;z=W+30|0;A=W+21|0;B=W+32|0;C=W+80|0;D=W+17|0;E=W+18|0;F=(f|0)<2;n=0;c:while(1){d:do if(!(c[G>>2]|0)){e:while(1){m=Sf(c[W>>2]|0)|0;if(m|0){J=135;break d}m=c[W>>2]|0;m=Za[c[m+204>>2]&127](m,1,K,0)|0;if(m|0){J=35;break}n=c[K>>2]|0;m=c[n+8>>2]|0;o=m+4|0;if((c[o>>2]|0)==1)s=c[m+56>>2]|0;else{s=c[n+4>>2]|0;c[m+56>>2]=s;c[m+72>>2]=n;c[m+52>>2]=W;c[o>>2]=1;a[m+9>>0]=100}t=m;n=d[s+29>>0]<<16|d[s+28>>0]<<24|d[s+30>>0]<<8|d[s+31>>0];u=c[W>>2]|0;r=c[u+24>>2]|0;if(!((n|0)!=0?(Lu(s+24|0,s+92|0,4)|0)==0:0))n=r;p=c[(c[P>>2]|0)+32>>2]|0;q=(p&33554432|0)==0&0==0?n:0;do if(!q){n=c[v>>2]|0;J=85}else{if(Lu(s,2720,16)|0){n=26;break e}if((d[s+18>>0]|0)>2)b[L>>1]=b[L>>1]|1;n=a[s+19>>0]|0;if((n&255)>2){n=26;break e}do if(n<<24>>24==2){if(b[L>>1]&32){J=62;break}if(a[u+12>>0]|0){J=62;break}if(c[u+216>>2]|0){J=62;break}n=c[c[u+60>>2]>>2]|0;if(a[u+13>>0]|0){n=14;break e}if(!(a[u+4>>0]|0)){if((c[n>>2]|0)<=1){n=14;break e}if(!(c[n+52>>2]|0)){n=14;break e}}n=c[u+64>>2]|0;o=c[n>>2]|0;if(o|0){Wa[c[o+4>>2]&127](n)|0;c[n>>2]=0}n=Uf(u)|0;if(n|0)break e;a[u+5>>0]=5;a[u+16>>0]=0;u=c[m+72>>2]|0;m=c[u+20>>2]|0;Df(u);if(c[(c[m+212>>2]|0)+12>>2]|0)break;f:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break f;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}else J=62;while(0);if((J|0)==62){J=0;if(Lu(s+21|0,32387,3)|0){n=26;break e}o=d[s+17>>0]<<16|d[s+16>>0]<<8;if((o+-257|0)>>>0>65279|(o+16777215&o|0)!=0){n=26;break e}b[L>>1]=b[L>>1]|2;u=d[s+20>>0]|0;n=o-u|0;if((o|0)==(c[B>>2]|0)){if(((p&268435457|0)!=1|0!=0)&q>>>0>r>>>0){J=82;break e}if(n>>>0<480){n=26;break e}c[B>>2]=o;c[v>>2]=n;a[D>>0]=(d[s+53>>0]<<16|d[s+52>>0]<<24|d[s+54>>0]<<8|d[s+55>>0]|0)!=0&1;a[E>>0]=(d[s+65>>0]<<16|d[s+64>>0]<<24|d[s+66>>0]<<8|d[s+67>>0]|0)!=0&1;J=85;break}t=c[m+72>>2]|0;m=c[t+20>>2]|0;Df(t);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){g:do switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(a[m+4>>0]|0)break g;uf(m,0,0)|0;break}default:tf(m)|0}while(0);vf(m)}c[v>>2]=n;c[B>>2]=o;m=c[C>>2]|0;if(m|0){n=m+-4|0;c[C>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77;break}else{m=Wa[c[29352>>2]&127](n)|0;J=77}while(0);do if((J|0)==77){J=0;c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[C>>2]=0}m=Se(c[W>>2]|0,B,u)|0;if(m|0){J=135;break d}}m=c[G>>2]|0}while(0);if((J|0)==85){J=0;u=((((n<<6)+-768|0)>>>0)/255|0)+65513|0;s=u&65535;b[w>>1]=s;r=((((n<<5)+-384|0)>>>0)/255|0)+65513&65535;b[x>>1]=r;b[y>>1]=n+65501;b[z>>1]=r;a[A>>0]=(s&65535)>127?127:u&255;c[G>>2]=t;c[T>>2]=q}if(m|0){n=0;J=96;break d}}if((J|0)==35){J=135;break}else if((J|0)==82){c[Q>>2]=32306;c[Q+4>>2]=66365;c[Q+8>>2]=31517;Db(11,32001,Q);n=11}J=c[m+72>>2]|0;m=c[J+20>>2]|0;Df(J);if(!(c[(c[m+212>>2]|0)+12>>2]|0)){switch(a[m+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[m+4>>0]|0))uf(m,0,0)|0;break}default:tf(m)|0}vf(m)}c[G>>2]=0;m=n;J=135}else J=96;while(0);h:do if((J|0)==96){J=0;i:do if(R&(n|0)==0){if(b[L>>1]&1){m=8;J=135;break h}u=c[W>>2]|0;n=c[u+40>>2]|0;j:do if(!n){a[u+21>>0]=(a[(c[e>>2]|0)+80>>0]|0)==2&1;t=u+16|0;if((a[t>>0]|0)==1){p=u+216|0;m=c[p>>2]|0;k:do if(!m){s=u+17|0;m=a[s>>0]|0;l:do switch(m<<24>>24){case 0:case 1:case 5:{if(!(a[u+13>>0]|0)){n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,2)|0;if(n|0){J=132;break j}m=a[s>>0]|0}if(m<<24>>24==5){m=5;break l}a[s>>0]=2;m=2;break}default:{}}while(0);if(!F){o=u+13|0;p=u+60|0;q=u+176|0;r=u+180|0;m:while(1){switch(m<<24>>24){case 0:case 1:case 2:case 3:case 5:break;default:break k}if(a[o>>0]|0)break;n=c[p>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;switch(n|0){case 0:break m;case 5:break;default:{J=132;break j}}if(!(Wa[c[q>>2]&127](c[r>>2]|0)|0)){m=5;J=135;break h}m=a[s>>0]|0}a[s>>0]=4}}else{do if(a[u+4>>0]|0){n=m+43|0;if(a[n>>0]|0)break;o=u+17|0;n:do switch(a[o>>0]|0){case 0:case 1:case 2:case 3:case 5:{if(a[u+13>>0]|0){a[o>>0]=4;J=108;break n}n=c[u+60>>2]|0;n=Xa[c[(c[n>>2]|0)+28>>2]&255](n,4)|0;if(n|0){J=132;break j}m=c[p>>2]|0;n=m+43|0;s=a[n>>0]|0;a[o>>0]=4;if(!(s<<24>>24))J=108;break}default:J=108}while(0);if((J|0)==108){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,(b[m+40>>1]|0)+3|0,1,5)|0;m=c[p>>2]|0}a[n>>0]=1}while(0);if(a[m+46>>0]|0){m=8;J=135;break h}n=m+43|0;if((a[n>>0]|0)==0?(M=c[m+4>>2]|0,M=Za[c[(c[M>>2]|0)+56>>2]&127](M,0,1,10)|0,M|0):0){n=M;J=132;break j}o=m+44|0;a[o>>0]=1;if(!(Lu(m+52|0,c[c[m+32>>2]>>2]|0,48)|0))break;if(!(a[n>>0]|0)){J=c[m+4>>2]|0;Za[c[(c[J>>2]|0)+56>>2]&127](J,0,1,9)|0}a[o>>0]=0;J=134;break j}while(0);a[t>>0]=2;J=c[u+24>>2]|0;c[u+36>>2]=J;c[u+32>>2]=J;c[u+28>>2]=J;J=u+72|0;c[J>>2]=0;c[J+4>>2]=0;J=133}else J=133}else J=132;while(0);if((J|0)==132){J=0;switch(n|0){case 0:{J=133;break}case 517:{J=134;break}default:break i}}if((J|0)==133){J=0;n=Rf(W)|0;break}else if((J|0)==134){m=(a[H>>0]|0)==0?5:517;J=135;break h}}while(0);if(!n){n=0;break c}else s=0}while(0);if((J|0)==135){J=0;n=m;s=(m|0)==0}if(((a[H>>0]|0)==0?(N=c[G>>2]|0,N|0):0)?(c[G>>2]=0,u=c[N+72>>2]|0,O=c[u+20>>2]|0,Df(u),(c[(c[O+212>>2]|0)+12>>2]|0)==0):0){switch(a[O+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[O+4>>0]|0))uf(O,0,0)|0;break}default:tf(O)|0}vf(O)}if((n&255|0)!=5){J=156;break}if(a[H>>0]|0){J=156;break}o=c[P>>2]|0;m=c[(c[W>>2]|0)+60>>2]|0;p=c[o+396>>2]|0;if(!p){J=154;break}r=o+404|0;q=c[r>>2]|0;if((q|0)<0){J=154;break}if(!(a[o+408>>0]|0))m=Xa[p&255](c[o+400>>2]|0,q)|0;else m=Ya[p&127](c[o+400>>2]|0,q,m)|0;if(!m){J=153;break}c[r>>2]=(c[r>>2]|0)+1}if((J|0)==153){c[r>>2]=-1;if(!s){e=n;Ra=X;return e|0}}else if((J|0)==154){if(!s){e=n;Ra=X;return e|0}}else if((J|0)==156)if(!s){e=n;Ra=X;return e|0}if((a[U>>0]|0)==0?(Q=W+40|0,c[Q>>2]=(c[Q>>2]|0)+1,a[I>>0]|0):0){a[e+40>>0]=1;Q=W+72|0;c[e+44>>2]=c[Q>>2];c[Q>>2]=e+32}m=R?2:1;a[U>>0]=m;if((m&255)>(d[H>>0]|0))a[H>>0]=m;if(R?(S=c[G>>2]|0,c[W+76>>2]=e,h=b[L>>1]|0,b[L>>1]=(f|0)>1?h|64:h&-65,h=c[T>>2]|0,V=S+56|0,j=c[V>>2]|0,i=j+28|0,l=j+29|0,k=j+30|0,j=j+31|0,(h|0)!=(d[l>>0]<<16|d[i>>0]<<24|d[k>>0]<<8|d[j>>0]|0)):0){m=c[S+72>>2]|0;n=c[m+20>>2]|0;if((b[m+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){h=Ve(m)|0;J=172}}else J=168;do if((J|0)==168){h=c[n+40>>2]|0;if(h|0){e=h;Ra=X;return e|0}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){h=Wf(m)|0;J=172;break}else{h=Xf(m)|0;J=172;break}}while(0);do if((J|0)==172)if(!h){i=c[V>>2]|0;l=i+29|0;k=i+30|0;j=i+31|0;i=i+28|0;h=c[T>>2]|0;break}else{e=h;Ra=X;return e|0}while(0);a[i>>0]=h>>>24;a[l>>0]=h>>>16;a[k>>0]=h>>>8;a[j>>0]=h;break}if(n|0){e=n;Ra=X;return e|0}}while(0);if(g|0){V=c[(c[W+12>>2]|0)+56>>2]|0;c[g>>2]=d[V+41>>0]<<16|d[V+40>>0]<<24|d[V+42>>0]<<8|d[V+43>>0]}if(!f){e=0;Ra=X;return e|0}i=c[W>>2]|0;h=c[(c[e>>2]|0)+452>>2]|0;if((c[i+96>>2]|0)>=(h|0)){e=0;Ra=X;return e|0}if(!(a[i+6>>0]|0)){e=0;Ra=X;return e|0}e=Vf(i,h)|0;Ra=X;return e|0}function _b(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,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=Ra;Ra=Ra+16|0;w=z;x=d+4|0;q=c[(c[x>>2]|0)+4>>2]|0;v=c[q>>2]|0;u=d+24|0;r=c[(c[(c[u>>2]|0)+4>>2]|0)+32>>2]|0;q=c[q+32>>2]|0;s=(r|0)<(q|0)?r:q;t=((r|0)<0)<<31>>31;o=Yv(r|0,t|0,e|0,0)|0;p=L()|0;if((r|0)==(q|0))d=0;else d=(a[v+12>>0]|0)==0?0:8;if(!((r|0)>0&(d|0)==0)){y=d;Ra=z;return y|0}e=Tv(o|0,p|0,r|0,t|0)|0;m=((q|0)<0)<<31>>31;n=v+204|0;l=(g|0)==0;g=L()|0;d=q;while(1){c[w>>2]=0;j=Wv(e|0,g|0,q|0,m|0)|0;k=L()|0;do if((1073741824/(d>>>0)|0|0)!=(j|0)){d=Za[c[n>>2]&127](v,j+1|0,w,0)|0;a:do if(!d){h=c[w>>2]|0;i=c[h+20>>2]|0;if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))d=h;else{d=Ve(h)|0;y=15}else y=11;do if((y|0)==11){y=0;d=c[i+40>>2]|0;if(d|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){d=Wf(h)|0;y=15;break}else{d=Xf(h)|0;y=15;break}}while(0);if((y|0)==15){y=0;if(d|0)break;d=c[w>>2]|0}i=Zv(e|0,g|0,r|0,t|0)|0;L()|0;h=c[d+4>>2]|0;d=Yv(j|0,k|0,q|0,m|0)|0;d=Tv(e|0,g|0,d|0,L()|0)|0;L()|0;d=h+d|0;ew(d|0,f+i|0,s|0)|0;a[c[(c[w>>2]|0)+8>>2]>>0]=0;if(l&((e|0)==0&(g|0)==0)){d=d+28|0;k=c[(c[(c[u>>2]|0)+4>>2]|0)+44>>2]|0;a[d>>0]=k>>>24;a[d+1>>0]=k>>>16;a[d+2>>0]=k>>>8;a[d+3>>0]=k;d=0}else d=0}while(0);h=c[w>>2]|0;if(h)if(!(b[h+28>>1]&32)){Df(h);break}else{k=c[h+20>>2]|0;j=k+120|0;c[j>>2]=(c[j>>2]|0)+-1;k=k+136|0;c[h+16>>2]=c[k>>2];c[k>>2]=h;break}}else d=0;while(0);e=Sv(e|0,g|0,q|0,m|0)|0;g=L()|0;if(!(((g|0)<(p|0)|(g|0)==(p|0)&e>>>0>>0)&(d|0)==0))break;d=c[(c[(c[x>>2]|0)+4>>2]|0)+32>>2]|0}Ra=z;return d|0}function $b(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=a+20|0;e=c[i>>2]|0;f=(e|0)>0;if(f){g=c[a+16>>2]|0;d=0;do{h=c[g+(d<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];d=d+1|0}while((d|0)!=(e|0));if(f){h=a+16|0;d=a+56|0;g=0;do{f=c[(c[h>>2]|0)+(g<<4)+12>>2]|0;do if(f)if(!(c[d>>2]|0)){dh(f);e=c[i>>2]|0;break}else{f=f+78|0;b[f>>1]=b[f>>1]|8;break}while(0);g=g+1|0}while((g|0)<(e|0))}else j=7}else j=7;if((j|0)==7)d=a+56|0;j=a+24|0;c[j>>2]=c[j>>2]&-18;Ti(a);if(c[d>>2]|0)return;Ui(a);return}function ac(e,f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0;C=Ra;Ra=Ra+16|0;z=C+8|0;r=C;h=c[e+40>>2]|0;if(h|0){e=h;Ra=C;return e|0}h=c[7389]|0;if(h|0?Wa[h&127](400)|0:0){e=10;Ra=C;return e|0}B=e+16|0;if((d[B>>0]|0)<3){e=0;Ra=C;return e|0}do if(a[e+12>>0]|0){if(c[c[e+60>>2]>>2]|0){i=c[e+212>>2]|0;h=c[i+16>>2]|0;if((h|0)<=-1){n=Yv(h|0,((h|0)<0)<<31>>31|0,-1024,-1)|0;p=L()|0;h=(c[i+28>>2]|0)+(c[i+24>>2]|0)|0;h=Wv(n|0,p|0,h|0,((h|0)<0)<<31>>31|0)|0;L()|0}i=c[i>>2]|0;if(!i){i=0;j=0}else{j=0;do{j=j+1|0;i=c[i+32>>2]|0}while((i|0)!=0);i=Yv(j|0,0,100,0)|0;j=L()|0}if(h|0?(p=Wv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0,L()|0,(p|0)>=25):0){A=18;break}}h=c[e+88>>2]|0;if(h|0)do{c[h+16>>2]=1;h=c[h+44>>2]|0}while((h|0)!=0)}else A=18;while(0);do if((A|0)==18){if(!(c[e+216>>2]|0)){k=e+18|0;if((a[k>>0]|0)==0?c[e+24>>2]|0:0){h=Za[c[e+204>>2]&127](e,1,z,0)|0;a:do if(!h){j=c[z>>2]|0;i=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0))h=j;else{h=Ve(j)|0;A=53}else A=49;do if((A|0)==49){h=c[i+40>>2]|0;if(h|0)break a;if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){h=Wf(j)|0;A=53;break}else{h=Xf(j)|0;A=53;break}}while(0);if((A|0)==53){if(h|0)break;h=c[z>>2]|0;i=c[h+20>>2]|0}o=(d[i+105>>0]<<16|d[i+104>>0]<<24|d[i+106>>0]<<8|d[i+107>>0])+1|0;h=h+4|0;p=c[h>>2]|0;l=o>>>24&255;a[p+24>>0]=l;m=o>>>16&255;a[p+25>>0]=m;n=o>>>8&255;a[p+26>>0]=n;o=o&255;a[p+27>>0]=o;p=c[h>>2]|0;a[p+92>>0]=l;a[p+93>>0]=m;a[p+94>>0]=n;a[p+95>>0]=o;h=c[h>>2]|0;a[h+96>>0]=0;a[h+97>>0]=46;a[h+98>>0]=52;a[h+99>>0]=32;a[k>>0]=1;h=0}while(0);i=c[z>>2]|0;do if(i|0)if(!(b[i+28>>1]&32)){Df(i);break}else{p=c[i+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[i+16>>2]=c[p>>2];c[p>>2]=i;break}while(0);if(h|0){e=h;Ra=C;return e|0}}b:do if(((f|0)!=0?(a[e+5>>0]|0)!=4:0)?(s=e+64|0,q=c[s>>2]|0,(c[q>>2]|0)!=0):0){a[e+19>>0]=1;h=a[f>>0]|0;if(!(h<<24>>24)){i=0;j=0}else{j=0;i=0;do{i=i+(h<<24>>24)|0;j=j+1|0;h=a[f+j>>0]|0}while(h<<24>>24!=0)}p=e+72|0;k=p;h=c[k>>2]|0;k=c[k+4>>2]|0;if(!(a[e+8>>0]|0))l=h;else{if((h|0)==0&(k|0)==0){h=0;k=0}else{o=Sv(h|0,k|0,-1,-1)|0;k=L()|0;h=c[e+148>>2]|0;k=Wv(o|0,k|0,h|0,0)|0;k=Sv(k|0,L()|0,1,0)|0;h=Yv(k|0,L()|0,h|0,0)|0;k=L()|0}l=p;c[l>>2]=h;c[l+4>>2]=k;l=h}h=(1073741824/(c[e+152>>2]|0)|0)+1|0;a[z>>0]=h>>>24;m=z+1|0;a[m>>0]=h>>>16;n=z+2|0;a[n>>0]=h>>>8;o=z+3|0;a[o>>0]=h;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,z,4,l,k)|0;do if(!h){h=c[s>>2]|0;k=Sv(l|0,k|0,4,0)|0;l=L()|0;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,f,j,k,l)|0;if(!h){h=c[s>>2]|0;k=Sv(k|0,l|0,j|0,0)|0;l=L()|0;a[z>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;h=_a[c[(c[h>>2]|0)+12>>2]&127](h,z,4,k,l)|0;if(!h){D=c[s>>2]|0;q=Sv(k|0,l|0,4,0)|0;h=L()|0;a[z>>0]=i>>>24;a[m>>0]=i>>>16;a[n>>0]=i>>>8;a[o>>0]=i;h=_a[c[(c[D>>2]|0)+12>>2]&127](D,z,4,q,h)|0;if(!h){q=c[s>>2]|0;D=Sv(k|0,l|0,8,0)|0;h=L()|0;h=_a[c[(c[q>>2]|0)+12>>2]&127](q,32352,8,D,h)|0;if(!h){q=p;q=Sv(c[q>>2]|0,c[q+4>>2]|0,j+20|0,0)|0;D=L()|0;h=p;c[h>>2]=q;c[h+4>>2]=D;h=c[s>>2]|0;h=Xa[c[(c[h>>2]|0)+24>>2]&255](h,r)|0;if(h|0)break;D=r;r=c[D+4>>2]|0;i=p;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((r|0)>(i|0)|((r|0)==(i|0)?(c[D>>2]|0)>>>0>h>>>0:0))){A=79;break b}D=c[s>>2]|0;h=Ya[c[(c[D>>2]|0)+16>>2]&127](D,h,i)|0;if(!h)break b;Ra=C;return h|0}}}}}while(0);D=h;Ra=C;return D|0}else A=79;while(0);h=Xe(e,0)|0;if(h|0){D=h;Ra=C;return D|0}h=e+212|0;i=Ye(e,Cf(c[h>>2]|0)|0)|0;if(i|0){D=i;Ra=C;return D|0}o=c[h>>2]|0;h=c[o>>2]|0;if(h|0)do{n=c[h+12>>2]|0;i=n+8|0;j=h+36|0;k=c[j>>2]|0;if((c[i>>2]|0)==(h|0))c[i>>2]=k;l=c[h+32>>2]|0;m=(l|0)==0;if(m){c[n+4>>2]=k;i=k}else{c[l+36>>2]=k;i=c[j>>2]|0}if(!i){c[n>>2]=l;if(m)a[n+33>>0]=2}else c[i+32>>2]=l;D=h+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[h+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[h>>2]|0,0);h=c[o>>2]|0}while((h|0)!=0);h=c[e+24>>2]|0;m=e+32|0;c:do if((h>>>0>(c[m>>2]|0)>>>0?(w=c[e+152>>2]|0,x=h-((h|0)==((1073741824/(w|0)|0)+1|0)&1)|0,y=e+60|0,t=c[y>>2]|0,u=c[t>>2]|0,u|0):0)?((a[B>>0]|0)+-1&255)>2:0){h=Xa[c[u+24>>2]&255](t,z)|0;j=((w|0)<0)<<31>>31;k=Yv(x|0,0,w|0,j|0)|0;l=L()|0;do if(!h){i=z;h=c[i>>2]|0;i=c[i+4>>2]|0;if(!((h|0)==(k|0)&(i|0)==(l|0))){do if((i|0)>(l|0)|(i|0)==(l|0)&h>>>0>k>>>0){v=c[y>>2]|0;v=Ya[c[(c[v>>2]|0)+16>>2]&127](v,k,l)|0;A=107}else{D=Sv(h|0,i|0,w|0,j|0)|0;z=L()|0;if((z|0)>(l|0)|(z|0)==(l|0)&D>>>0>k>>>0)break;D=c[e+208>>2]|0;gw(D|0,0,w|0)|0;z=c[y>>2]|0;A=Tv(k|0,l|0,w|0,j|0)|0;v=L()|0;v=_a[c[(c[z>>2]|0)+12>>2]&127](z,D,w,A,v)|0;A=107}while(0);if((A|0)==107?v|0:0){h=v;break}c[m>>2]=x}break c}while(0);D=h;Ra=C;return D|0}while(0);if(g|0)break;j=e+60|0;h=c[j>>2]|0;i=c[h>>2]|0;d:do if(i|0){h=Ya[c[i+40>>2]&127](h,21,f)|0;switch(h|0){case 0:case 12:break d;default:{}}Ra=C;return h|0}while(0);if(a[e+7>>0]|0)break;h=c[j>>2]|0;i=a[e+10>>0]|0;if(!(i<<24>>24))break;h=Xa[c[(c[h>>2]|0)+20>>2]&255](h,i&255)|0}else{c[z>>2]=0;j=e+212|0;h=Cf(c[j>>2]|0)|0;if(!h){h=Za[c[e+204>>2]&127](e,1,z,0)|0;i=c[z>>2]|0;c[i+16>>2]=0;if(i){h=i;A=21}}else A=21;do if((A|0)==21){h=We(e,h,c[e+24>>2]|0,1)|0;i=c[z>>2]|0;if(i)if(!(b[i+28>>1]&32)){Df(i);break}else{D=c[i+20>>2]|0;A=D+120|0;c[A>>2]=(c[A>>2]|0)+-1;D=D+136|0;c[i+16>>2]=c[D>>2];c[D>>2]=i;break}}while(0);if((h|0)==0?(o=c[j>>2]|0,m=c[o>>2]|0,m|0):0)do{n=c[m+12>>2]|0;j=n+8|0;l=m+36|0;i=c[l>>2]|0;if((c[j>>2]|0)==(m|0))c[j>>2]=i;j=c[m+32>>2]|0;k=(j|0)==0;if(k)c[n+4>>2]=i;else{c[j+36>>2]=i;i=c[l>>2]|0}if(!i){c[n>>2]=j;if(k)a[n+33>>0]=2}else c[i+32>>2]=j;D=m+28|0;b[D>>1]=b[D>>1]&-16|1;if((b[m+30>>1]|0)==0?a[n+32>>0]|0:0)cb[c[29440>>2]&255](c[n+44>>2]|0,c[m>>2]|0,0);m=c[o>>2]|0}while((m|0)!=0)}if(h|0){D=h;Ra=C;return D|0}}while(0);if(c[e+216>>2]|0){D=0;Ra=C;return D|0}a[B>>0]=5;D=0;Ra=C;return D|0}function bc(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;f=a[b+8>>0]|0;if(!(f<<24>>24)){l=0;return l|0}l=c[b+4>>2]|0;c[l+4>>2]=c[b>>2];if(f<<24>>24==2){i=c[l>>2]|0;j=i+40|0;f=c[j>>2]|0;a:do if(!f){g=i+16|0;if(((a[g>>0]|0)==2?a[i+4>>0]|0:0)?(a[i+5>>0]|0)==1:0){a[g>>0]=1;break}f=i+100|0;c[f>>2]=(c[f>>2]|0)+1;f=uf(i,d[i+19>>0]|0,1)|0;switch((f&255)<<24>>24){case 10:case 13:break;default:{h=f;k=10;break a}}c[j>>2]=f;a[g>>0]=6;c[i+204>>2]=(f|0)==0?74:75;h=f;k=10}else{h=f;k=10}while(0);if((k|0)==10?(e|0)==0&(h|0)!=0:0){l=h;return l|0}e=b+20|0;c[e>>2]=(c[e>>2]|0)+-1;a[l+20>>0]=1;l=l+60|0;yf(c[l>>2]|0);c[l>>2]=0}Zf(b);l=0;return l|0}function cc(e,f){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=Ra;Ra=Ra+32|0;o=v+16|0;g=v;if((a[e+8>>0]|0)!=2){u=0;Ra=v;return u|0}u=c[e+4>>2]|0;c[u+4>>2]=c[e>>2];do if(a[u+17>>0]|0){t=c[u>>2]|0;k=c[u+8>>2]|0;l=(k|0)==0;if(!l){e=k;do{r=e+1|0;a[r>>0]=a[r>>0]&-5;e=c[e+24>>2]|0}while((e|0)!=0)}if(!(a[u+18>>0]|0)){r=u+44|0;h=c[r>>2]|0;i=h>>>0<2;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(((((c[u+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;e=((e+1|0)==(1073741824/((c[u+32>>2]|0)>>>0)|0|0)?3:2)+e|0}if((e|0)!=(h|0)?(m=1073741824/((c[u+32>>2]|0)>>>0)|0,n=m+1|0,(h|0)!=(n|0)):0){q=u+12|0;p=c[(c[q>>2]|0)+56>>2]|0;p=d[p+37>>0]<<16|d[p+36>>0]<<24|d[p+38>>0]<<8|d[p+39>>0];g=((c[u+36>>2]|0)>>>0)/5|0;j=g+1|0;if(i)e=0;else{e=h+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}i=h-p-(((g-h+p+e|0)>>>0)/(g>>>0)|0)|0;i=i+((n>>>0>>0&i>>>0>>0)<<31>>31)|0;while(1){if(i>>>0<2)e=0;else{e=i+-2|0;e=e-((e>>>0)%(j>>>0)|0)|0;e=((e+1|0)==(m|0)?3:2)+e|0}if((i|0)==(n|0)|(e|0)==(i|0))i=i+-1|0;else break}if(i>>>0>h>>>0){c[o>>2]=32306;c[o+4>>2]=67104;c[o+8>>2]=31517;Db(11,32001,o);u=11;Ra=v;return u|0}if(l|i>>>0>=h>>>0)e=0;else e=$f(k,0,0)|0;g=(e|0)==0;if(h>>>0>i>>>0&g)do{e=_f(u,i,h,1)|0;h=h+-1|0;g=(e|0)==0}while(g&h>>>0>i>>>0);if((p|0)!=0&((e|0)==101|g)){g=c[(c[q>>2]|0)+72>>2]|0;h=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[h+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[h+96>>2]|0))e=0;else e=Ve(g)|0;else s=30;do if((s|0)==30){e=c[h+40>>2]|0;if(!e)if((c[h+148>>2]|0)>>>0>(c[h+152>>2]|0)>>>0){e=Wf(g)|0;break}else{e=Xf(g)|0;break}}while(0);s=(c[(c[q>>2]|0)+56>>2]|0)+32|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=(c[(c[q>>2]|0)+56>>2]|0)+36|0;a[s>>0]=0;a[s+1>>0]=0;a[s+2>>0]=0;a[s+3>>0]=0;s=c[(c[q>>2]|0)+56>>2]|0;a[s+28>>0]=i>>>24;a[s+29>>0]=i>>>16;a[s+30>>0]=i>>>8;a[s+31>>0]=i;a[u+19>>0]=1;c[r>>2]=i}if(!e)break;tf(t)|0;u=e;Ra=v;return u|0}c[g>>2]=32306;c[g+4>>2]=67099;c[g+8>>2]=31517;Db(11,32001,g);u=11;Ra=v;return u|0}}while(0);e=c[u>>2]|0;if(a[u+19>>0]|0)c[e+24>>2]=c[u+44>>2];u=ac(e,f,0)|0;Ra=v;return u|0}function dc(a){a=a|0;var b=0,d=0,e=0;if(!a){e=0;return e|0}e=c[a+20>>2]|0;b=c[a+24>>2]|0;d=c[b+4>>2]|0;c[d+4>>2]=c[b>>2];if(c[a>>2]|0){b=b+16|0;c[b>>2]=(c[b>>2]|0)+-1}if(c[a+40>>2]|0){b=(c[d>>2]|0)+88|0;while(1){d=c[b>>2]|0;if((d|0)==(a|0))break;else b=d+44|0}c[b>>2]=c[a+44>>2]}ec(c[a+4>>2]|0,0,0);d=c[a+28>>2]|0;d=(d|0)==101?0:d;b=c[a>>2]|0;do if(b|0){c[b+64>>2]=d;if(!d){if(c[b+260>>2]|0)Ne(b,0)}else Ne(b,d);fc(c[a>>2]|0);if(c[a>>2]|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);fc(e);e=d;return e|0}function ec(b,e,f){b=b|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+16|0;h=k;j=c[b+4>>2]|0;c[j+4>>2]=c[b>>2];if(!e){f=c[j+8>>2]|0;if(f|0?(g=$f(f,0,0)|0,g|0):0){e=g;f=0;i=4}}else i=4;if((i|0)==4)jg(b,e,f)|0;if((a[b+8>>0]|0)!=2){Zf(b);Ra=k;return}tf(c[j>>2]|0)|0;i=c[j>>2]|0;if(!(Za[c[i+204>>2]&127](i,1,h,0)|0)){f=c[h>>2]|0;g=c[f+8>>2]|0;e=g+4|0;if((c[e>>2]|0)==1)f=c[g+56>>2]|0;else{i=c[f+4>>2]|0;c[g+56>>2]=i;c[g+72>>2]=f;c[g+52>>2]=j;c[e>>2]=1;a[g+9>>0]=100;f=i}f=d[f+29>>0]<<16|d[f+28>>0]<<24|d[f+30>>0]<<8|d[f+31>>0];if(!f)f=c[(c[j>>2]|0)+24>>2]|0;c[j+44>>2]=f;i=c[g+72>>2]|0;f=c[i+20>>2]|0;Df(i);if(!(c[(c[f+212>>2]|0)+12>>2]|0)){switch(a[f+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[f+4>>0]|0))uf(f,0,0)|0;break}default:tf(f)|0}vf(f)}}a[j+20>>0]=1;j=j+60|0;yf(c[j>>2]|0);c[j>>2]=0;Zf(b);Ra=k;return}function fc(e){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;t=e+96|0;if((c[t>>2]|0)!=1691352191)return;l=e+4|0;if(c[l>>2]|0)return;p=e+20|0;h=c[p>>2]|0;a:do if((h|0)>0){g=c[e+16>>2]|0;f=0;while(1){r=c[g+(f<<4)+4>>2]|0;if(r|0?c[r+16>>2]|0:0)break;f=f+1|0;if((f|0)>=(h|0))break a}return}while(0);rg(e,0);g=e+444|0;f=c[g>>2]|0;if(f|0){h=e+480|0;i=e+304|0;j=e+308|0;k=e+300|0;do{c[g>>2]=c[f+24>>2];do if(!(c[h>>2]|0)){r=f;if((c[i>>2]|0)>>>0<=r>>>0?(c[j>>2]|0)>>>0>r>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}else Xd(e,f);while(0);f=c[g>>2]|0}while((f|0)!=0)}c[e+452>>2]=0;c[e+456>>2]=0;a[e+87>>0]=0;r=e+16|0;f=c[r>>2]|0;if((c[p>>2]|0)>0){i=0;do{g=f+(i<<4)+4|0;h=c[g>>2]|0;if(h|0?(ug(h),c[g>>2]=0,(i|0)!=1):0)c[f+(i<<4)+12>>2]=0;i=i+1|0;f=c[r>>2]|0}while((i|0)<(c[p>>2]|0))}f=c[f+28>>2]|0;if(f|0)dh(f);m=e+360|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){f=c[l>>2]|0;if(f|0)do{m=f+149|0;l=(d[m>>0]|d[m+1>>0]<<8)&-4|1;a[m>>0]=l;a[m+1>>0]=l>>8;f=c[f+8>>2]|0}while((f|0)!=0);f=g;do{g=f;f=c[f+24>>2]|0;h=c[g>>2]|0;l=g+12|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;do if(!m){i=c[g+8>>2]|0;if(i|0)Wa[c[(c[i>>2]|0)+16>>2]&127](i)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}m=g;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((f|0)!=0)}if((c[p>>2]|0)>2){j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;i=2;f=2;do{g=c[r>>2]|0;h=g+(i<<4)|0;if(!(c[g+(i<<4)+4>>2]|0)){g=c[h>>2]|0;do if(g|0){if(c[j>>2]|0){Xd(e,g);break}u=g;if((c[k>>2]|0)>>>0<=u>>>0?(c[l>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[h>>2]=0}else{if((f|0)<(i|0)){u=g+(f<<4)|0;c[u>>2]=c[h>>2];c[u+4>>2]=c[h+4>>2];c[u+8>>2]=c[h+8>>2];c[u+12>>2]=c[h+12>>2]}f=f+1|0}i=i+1|0}while((i|0)<(c[p>>2]|0));c[p>>2]=f;if((f|0)<3)q=64}else{c[p>>2]=2;q=64}if((q|0)==64?(n=c[r>>2]|0,o=e+412|0,(n|0)!=(o|0)):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[o+20>>2]=c[n+20>>2];c[o+24>>2]=c[n+24>>2];c[o+28>>2]=c[n+28>>2];do if(n|0){if(c[e+480>>2]|0){Xd(e,n);break}u=n;if((c[e+304>>2]|0)>>>0<=u>>>0?(c[e+308>>2]|0)>>>0>u>>>0:0){u=e+300|0;c[n>>2]=c[u>>2];c[u>>2]=n;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{u=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[r>>2]=o}m=e+372|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;do{g=c[h+36>>2]|0;do if(g|0?(u=(c[g>>2]|0)+-1|0,c[g>>2]=u,(u|0)==0):0){ab[c[g+4>>2]&127](c[g+8>>2]|0);if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=h;h=c[h+12>>2]|0;do if(g|0){if(c[i>>2]|0){Xd(e,g);break}u=g;if((c[j>>2]|0)>>>0<=u>>>0?(c[k>>2]|0)>>>0>u>>>0:0){c[g>>2]=c[l>>2];c[l>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0)}while((h|0)!=0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+376|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+364>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+368>>2]=0;m=e+388|0;f=c[m>>2]|0;if(!f)f=0;else{i=e+480|0;j=e+304|0;k=e+308|0;l=e+300|0;do{h=c[f+8>>2]|0;g=c[h+16>>2]|0;if(g|0)ab[g&127](c[h+8>>2]|0);g=c[h+36>>2]|0;if(g|0)ab[g&127](c[h+28>>2]|0);g=c[h+56>>2]|0;if(g|0)ab[g&127](c[h+48>>2]|0);b:do if(!(c[i>>2]|0)){g=h;do if((c[j>>2]|0)>>>0<=g>>>0){if((c[k>>2]|0)>>>0<=g>>>0)break;c[h>>2]=c[l>>2];c[l>>2]=h;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(e,h);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[m>>2]|0}c[m>>2]=0;g=e+392|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+380>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+384>>2]=0;n=e+344|0;f=c[n>>2]|0;if(!f)f=0;else{j=e+480|0;k=e+304|0;l=e+308|0;m=e+300|0;do{i=c[f+8>>2]|0;g=c[i+12>>2]|0;if(g|0)ab[g&127](c[i+8>>2]|0);g=i+16|0;h=c[g>>2]|0;if(h|0){u=h+36|0;c[u>>2]=c[u>>2]|2;do if(!(c[j>>2]|0)){q=h+32|0;u=(c[q>>2]|0)+-1|0;c[q>>2]=u;if(u|0)break;Vi(e,h)}else Vi(e,h);while(0);c[g>>2]=0}c:do if(!(c[j>>2]|0)){g=i;do if((c[k>>2]|0)>>>0<=g>>>0){if((c[l>>2]|0)>>>0<=g>>>0)break;c[i>>2]=c[m>>2];c[m>>2]=i;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{u=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(e,i);while(0);f=c[f>>2]|0}while((f|0)!=0);f=c[n>>2]|0}c[n>>2]=0;g=e+348|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;c[e+336>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[e+340>>2]=0;c[e+64>>2]=0;f=e+260|0;d:do if(c[f>>2]|0?(Ne(e,0),s=c[f>>2]|0,s|0):0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);f=c[s+32>>2]|0;do if(f|0){if(c[f+480>>2]|0){Xd(f,s);break d}g=s;if((c[f+304>>2]|0)>>>0>g>>>0)break;if((c[f+308>>2]|0)>>>0<=g>>>0)break;u=f+300|0;c[s>>2]=c[u>>2];c[u>>2]=s;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{u=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[t>>2]=-1254786768;f=c[(c[r>>2]|0)+28>>2]|0;e:do if(f|0){if(c[e+480>>2]|0){Xd(e,f);break}g=f;do if((c[e+304>>2]|0)>>>0<=g>>>0){if((c[e+308>>2]|0)>>>0<=g>>>0)break;u=e+300|0;c[f>>2]=c[u>>2];c[u>>2]=f;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[t>>2]=-1623446221;do if(a[e+278>>0]|0){f=c[e+304>>2]|0;if(!f)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{u=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{u=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function gc(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+32|0;d=l+8|0;if(!b){k=0;Ra=l;return k|0}k=c[b>>2]|0;if(!k){Db(21,32391,l);c[d>>2]=58063;c[d+4>>2]=81403;c[d+8>>2]=31517;Db(21,32001,d);k=21;Ra=l;return k|0}i=b+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(k,b);i=b+20|0;d=c[i>>2]|0;if((d|0)<832317811)switch(d|0){case 770837923:{j=6;break}default:f=0}else switch(d|0){case 832317811:{j=6;break}default:f=0}if((j|0)==6)f=kc(b)|0;g=c[b>>2]|0;kb(g,b);h=c[b+4>>2]|0;e=b+8|0;d=c[e>>2]|0;if(!h)c[g+4>>2]=d;else{c[h+8>>2]=d;d=c[e>>2]|0}if(d|0)c[d+4>>2]=h;c[i>>2]=1443283912;c[b>>2]=0;do if(g){if(c[g+480>>2]|0){Xd(g,b);break}i=b;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[b>>2]=c[i>>2];c[i>>2]=b}else j=18}else j=18;while(0);do if((j|0)==18)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if((f|0)==3082|(a[k+81>>0]|0)!=0){og(k);d=7}else d=c[k+68>>2]&f;fc(k);k=d;Ra=l;return k|0}function hc(b,d){b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;k=Ra;Ra=Ra+32|0;e=k+16|0;f=k+8|0;j=k;h=c[b>>2]|0;if((c[h>>2]|0)>1?(i=c[h+72>>2]|0,(i|0)!=0):0){Xa[i&255](h,f)|0;e=c[f>>2]|0;f=c[f+4>>2]|0}else{Xa[c[h+64>>2]&255](h,e)|0;l=+g[e>>3]*864.0e5;e=~~l>>>0;i=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;c[f>>2]=e;c[f+4>>2]=i;f=i}i=d+136|0;h=i;e=Tv(e|0,f|0,c[h>>2]|0,c[h+4>>2]|0)|0;e=Yv(e|0,L()|0,1e6,0)|0;f=L()|0;h=j;c[h>>2]=e;c[h+4>>2]=f;h=c[b+204>>2]|0;if(h|0)db[h&127](c[b+208>>2]|0,c[d+188>>2]|0,e,f);if(!(a[b+88>>0]&2)){j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}Za[c[b+196>>2]&127](2,c[b+200>>2]|0,d,j)|0;j=i;d=j;c[d>>2]=0;j=j+4|0;c[j>>2]=0;Ra=k;return}function ic(b,d){b=b|0;d=d|0;if((d|0)==3082|(a[b+81>>0]|0)!=0){og(b);d=7;return d|0}else{d=c[b+68>>2]&d;return d|0}return 0}function jc(b){b=b|0;var d=0,e=0,f=0;if(!b){e=0;return e|0}e=c[b>>2]|0;d=b+136|0;f=c[d+4>>2]|0;if((f|0)>0|(f|0)==0&(c[d>>2]|0)>>>0>0)hc(e,b);d=kc(b)|0;c[b+20>>2]=770837923;c[b+36>>2]=-1;c[b+40>>2]=0;a[b+146>>0]=2;c[b+44>>2]=0;c[b+32>>2]=1;a[b+147>>0]=-1;c[b+48>>2]=0;f=b+64|0;c[f>>2]=0;c[f+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);f=7;return f|0}else{f=c[e+68>>2]&d;return f|0}return 0}function kc(b){b=b|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+16|0;f=h;g=c[b>>2]|0;pg(b)|0;if((c[b+36>>2]|0)>-1){qg(b)|0;e=b+149|0;f=d[e>>0]|d[e+1>>0]<<8;if(f&64){f=f&-4|1;a[e>>0]=f;a[e+1>>0]=f>>8}}else{e=c[b+40>>2]|0;if(e|0?(i=b+149|0,(d[i>>0]|d[i+1>>0]<<8)&3):0){i=c[b+124>>2]|0;c[f>>2]=i;Vb(g,e,(i|0)==0?0:31408,f)}}e=b+124|0;f=c[e>>2]|0;do if(f|0){if(g|0){if(c[g+480>>2]|0){Xd(g,f);break}i=f;if((c[g+304>>2]|0)>>>0<=i>>>0?(c[g+308>>2]|0)>>>0>i>>>0:0){i=g+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);c[e>>2]=0;c[b+120>>2]=0;c[b+20>>2]=1224384374;Ra=h;return c[g+68>>2]&c[b+40>>2]|0}function lc(e){e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=e+16|0;f=b[k>>1]|0;if(f<<16>>16>0){l=e+100|0;j=0;g=c[l>>2]|0;do{h=g+(j*40|0)|0;i=g+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[g+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[l>>2]|0;i=g+(j*40|0)+8|0;f=b[k>>1]|0}b[i>>1]=1;j=j+1|0}while((j|0)<(f<<16>>16|0))}if(!(c[e+208>>2]|0))return 0;l=e+149|0;k=(d[l>>0]|d[l+1>>0]<<8)&-4|1;a[l>>0]=k;a[l+1>>0]=k>>8;return 0}function mc(d){d=d|0;var e=0,f=0,g=0,h=0,i=0;i=d+8|0;f=b[i>>1]|0;e=f&65535;if(!(e&18)){if((f&514)==514?(a[d+10>>0]|0)==1:0){i=c[d+16>>2]|0;return i|0}if(f&1){i=0;return i|0}i=Gg(d,1)|0;return i|0}g=d+12|0;h=c[g>>2]|0;do if(e&16384){e=(c[d>>2]|0)+h|0;if((e|0)<1)if(!(f&16)){e=h;break}else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[g>>2]|0)|0,0,c[d>>2]|0)|0;e=(c[g>>2]|0)+(c[d>>2]|0)|0;c[g>>2]=e;f=b[i>>1]&-16897;b[i>>1]=f;break}else{i=0;return i|0}}else e=h;while(0);b[i>>1]=f|16;if(!e){i=0;return i|0}i=c[d+16>>2]|0;return i|0}function nc(d){d=d|0;var e=0;if(!d){e=0;return e|0}e=b[d+8>>1]|0;if((e&514)==514?(a[d+10>>0]|0)==1:0){e=c[d+16>>2]|0;return e|0}if(e&1){e=0;return e|0}e=Gg(d,1)|0;return e|0}function oc(d){d=d|0;var e=0,f=0;e=b[d+8>>1]|0;if(e&2?(a[d+10>>0]|0)==1:0){d=c[d+12>>2]|0;return d|0}e=e&65535;if(!(e&16)){if(e&1|0){d=0;return d|0}d=Fg(d,1)|0;return d|0}else{f=c[d+12>>2]|0;if(!(e&16384)){d=f;return d|0}d=(c[d>>2]|0)+f|0;return d|0}return 0}function pc(b){b=b|0;var d=0,f=0.0;d=e[b+8>>1]|0;if(d&8|0){f=+g[b>>3];return +f}if(d&4|0){d=b;f=+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0);return +f}if(!(d&18)){f=0.0;return +f}f=+Kg(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0);return +f}function qc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=c[b>>2]|0;return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;L()|0;return d|0}if(!(d&18)){d=0;return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;L()|0;return d|0}function rc(b){b=b|0;var d=0;d=e[b+8>>1]|0;if(d&4|0){d=b;b=c[d+4>>2]|0;d=c[d>>2]|0;K(b|0);return d|0}if(d&8|0){d=Mg(+g[b>>3])|0;b=L()|0;K(b|0);return d|0}if(!(d&18)){b=0;d=0;K(b|0);return d|0}d=Ng(a[b+10>>0]|0,c[b+12>>2]|0,c[b+16>>2]|0)|0;b=L()|0;K(b|0);return d|0}function sc(a){a=a|0;return d[816+(b[a+8>>1]&31)>>0]|0|0}function tc(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!a){i=0;return i|0}if(mb()|0){i=0;return i|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](40)|0;if(!d){i=0;return i|0}else e=d}else{f=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;g=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;c[14768]=((e|0)<0|(e|0)==0&g>>>0<=h>>>0)&1}e=Wa[c[29340>>2]&127](f)|0;if(!e){i=0;return i|0}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}h=e+20|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[e>>2]=c[a>>2];c[e+4>>2]=c[a+4>>2];c[e+8>>2]=c[a+8>>2];c[e+12>>2]=c[a+12>>2];c[e+16>>2]=c[a+16>>2];h=e+8|0;d=b[h>>1]&-1025;b[h>>1]=d;g=e+32|0;c[g>>2]=0;d=d&65535;if(!(d&18)){i=e;return i|0}f=(d&58367|4096)&65535;b[h>>1]=f;do if(d&16384){a=e+12|0;d=(c[e>>2]|0)+(c[a>>2]|0)|0;if((d|0)<1)if(!(f&16)){i=21;break}else d=1;if(!(Eg(e,d,1)|0)){gw((c[e+16>>2]|0)+(c[a>>2]|0)|0,0,c[e>>2]|0)|0;c[a>>2]=(c[a>>2]|0)+(c[e>>2]|0);d=b[h>>1]&-16897;b[h>>1]=d;if((c[e+24>>2]|0)!=0?(c[e+16>>2]|0)==(c[e+20>>2]|0):0)i=23;else i=21}}else i=21;while(0);if((i|0)==21?(Jg(e)|0)==0:0){d=b[h>>1]|0;i=23}if((i|0)==23){b[h>>1]=d&-4097;i=e;return i|0}if(!((b[h>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);i=0;return i|0}i=e;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;i=0;return i|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);i=0;return i|0}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);i=0;return i|0}return 0}function uc(a){a=a|0;var d=0,e=0;if(!a)return;if(!((b[a+8>>1]&9216)==0?!(c[a+24>>2]|0):0))Cg(a);d=c[a+32>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}e=a;if((c[d+304>>2]|0)>>>0<=e>>>0?(c[d+308>>2]|0)>>>0>e>>>0:0){e=d+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,0,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function wc(a,d){a=a|0;d=+d;var e=0,f=0,h=0,i=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;a=c[a>>2]|0;e=a+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(a);g[f>>3]=d;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[a>>3]=d;b[e>>1]=8;Ra=i;return}function xc(a,b,d){a=a|0;b=b|0;d=d|0;c[a+20>>2]=1;yc(c[a>>2]|0,b,d,1,-1)|0;return}function yc(d,f,g,h,i){d=d|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;if(!f){g=d+8|0;if(!(b[g>>1]&9216)){b[g>>1]=1;s=0;return s|0}else{Dg(d);s=0;return s|0}}k=d+32|0;l=c[k>>2]|0;m=(l|0)==0;if(m)s=1e9;else s=c[l+108>>2]|0;p=h<<24>>24==0;j=p?16:2;if((g|0)<0){a:do if(h<<24>>24!=1)if((s|0)<0)g=0;else{g=0;do{if(!((a[f+(g|1)>>0]|a[f+g>>0])<<24>>24))break a;g=g+2|0}while((g|0)<=(s|0))}else g=(Eu(f)|0)&2147483647;while(0);o=j|512;q=g}else{o=j;q=g}do if((i|0)==(-1|0)){k=((o&512)==0?0:h<<24>>24==1?1:2)+q|0;if((q|0)>(s|0)){if(m){s=18;return s|0}g=c[l+236>>2]|0;if(!g){s=18;return s|0}c[g+12>>2]=18;s=g+36|0;c[s>>2]=(c[s>>2]|0)+1;s=18;return s|0}else{g=k>>>0>32?k:32;do if((c[d+24>>2]|0)<(g|0))if(!(Eg(d,g,0)|0)){j=d+8|0;g=c[d+16>>2]|0;break}else{s=7;return s|0}else{g=c[d+20>>2]|0;c[d+16>>2]=g;j=d+8|0;b[j>>1]=b[j>>1]&13}while(0);ew(g|0,f|0,k|0)|0;i=o;break}}else{j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);c[d+16>>2]=f;if((i|0)!=116){c[d+36>>2]=i;i=(((i|0)==0?2048:1024)|o&65535)&65535;break}c[d+20>>2]=f;g=c[k>>2]|0;if(((g|0)!=0?(n=f,(c[g+304>>2]|0)>>>0<=n>>>0):0)?(c[g+308>>2]|0)>>>0>n>>>0:0)g=e[g+276>>1]|0;else g=Wa[c[29352>>2]&127](f)|0;c[d+24>>2]=g;i=o}while(0);f=d+12|0;c[f>>2]=q;b[j>>1]=i;h=p?1:h;n=d+10|0;a[n>>0]=h;do if(h<<24>>24!=1&(q|0)>1){o=d+16|0;g=c[o>>2]|0;l=a[g>>0]|0;k=a[g+1>>0]|0;if(!(l<<24>>24==-1&k<<24>>24==-2))if(l<<24>>24==-2&k<<24>>24==-1)m=3;else break;else m=2;k=i&65535;do if(k&18){do if(k&16384){g=(c[d>>2]|0)+q|0;if((g|0)<1)if(!(i&16)){k=q;g=i;break}else g=1;if(!(Eg(d,g,1)|0)){gw((c[o>>2]|0)+(c[f>>2]|0)|0,0,c[d>>2]|0)|0;k=(c[f>>2]|0)+(c[d>>2]|0)|0;c[f>>2]=k;g=b[j>>1]&-16897;b[j>>1]=g;break}else{s=7;return s|0}}else{k=q;g=i}while(0);if(c[d+24>>2]|0?(r=c[o>>2]|0,(r|0)==(c[d+20>>2]|0)):0){l=g;g=r;break}if(!(Jg(d)|0)){l=b[j>>1]|0;k=c[f>>2]|0;g=c[o>>2]|0;break}else{s=7;return s|0}}else{l=i;k=q}while(0);b[j>>1]=l&-4097;r=k+-2|0;c[f>>2]=r;fw(g|0,g+2|0,r|0)|0;a[(c[o>>2]|0)+(c[f>>2]|0)>>0]=0;a[(c[o>>2]|0)+((c[f>>2]|0)+1)>>0]=0;b[j>>1]=b[j>>1]|512;a[n>>0]=m}while(0);s=(q|0)>(s|0)?18:0;return s|0}function zc(a,d){a=a|0;d=d|0;var e=0,f=0;a=c[a>>2]|0;e=((d|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Ac(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;a=c[a>>2]|0;f=a+8|0;if(!(b[f>>1]&9216)){c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}else{Pg(a,d,e);return}}function Bc(a){a=a|0;var d=0;a=c[a>>2]|0;d=a+8|0;if(!(b[d>>1]&9216)){b[d>>1]=1;return}else{Dg(a);return}}function Cc(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;if((yc(c[a>>2]|0,b,d,1,e)|0)!=18)return;c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0;return}function Dc(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;f=c[a>>2]|0;g=f+8|0;if(b[g>>1]&9216)Dg(f);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];e=b[g>>1]&-1025;b[g>>1]=e;e=e&65535;if(!(e&18))return;if(b[d+8>>1]&2048)return;a=(e|4096)&65535;b[g>>1]=a;do if(e&16384){e=f+12|0;d=(c[f>>2]|0)+(c[e>>2]|0)|0;if((d|0)<1)if(!(a&16))break;else a=1;else a=d;if(!(Eg(f,a,1)|0)){gw((c[f+16>>2]|0)+(c[e>>2]|0)|0,0,c[f>>2]|0)|0;c[e>>2]=(c[e>>2]|0)+(c[f>>2]|0);a=b[g>>1]&-16897;b[g>>1]=a;break}else return}while(0);if(!((c[f+24>>2]|0)!=0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0))h=12;do if((h|0)==12)if(!(Jg(f)|0)){a=b[g>>1]|0;break}else return;while(0);b[g>>1]=a&-4097;return}function Ec(d){d=d|0;var e=0,f=0;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;f=c[e+32>>2]|0;e=f+81|0;if(a[e>>0]|0)return;if(a[f+82>>0]|0)return;a[e>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;e=f+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[f+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Fc(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0)return;if(a[b+82>>0]|0)return;a[d>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;d=b+272|0;c[d>>2]=(c[d>>2]|0)+1;b=c[b+236>>2]|0;if(!b)return;c[b+12>>2]=7;return}function Gc(f){f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0.0;Ga=Ra;Ra=Ra+384|0;Aa=Ga+368|0;za=Ga+360|0;ya=Ga+352|0;xa=Ga+344|0;wa=Ga+336|0;va=Ga+328|0;ua=Ga+320|0;ta=Ga+312|0;sa=Ga+304|0;ra=Ga+296|0;qa=Ga+288|0;pa=Ga+280|0;oa=Ga+272|0;Ca=Ga+264|0;Ba=Ga+256|0;i=Ga+240|0;h=Ga+232|0;fa=Ga;ia=Ga+372|0;do if(!f)Db(21,32555,Ga+224|0);else{Fa=c[f>>2]|0;if(!Fa){Db(21,32391,h);break}ba=f+149|0;ca=(d[ba>>0]|d[ba+1>>0]<<8)&-17;a[ba>>0]=ca;a[ba+1>>0]=ca>>8;ca=f+20|0;da=f+136|0;C=f+36|0;Ea=f+40|0;D=f+146|0;E=f+44|0;G=f+32|0;I=f+147|0;J=f+48|0;K=f+64|0;L=f+148|0;M=f+88|0;N=f+188|0;O=f+120|0;P=f+8|0;Q=f+4|0;R=f+208|0;S=f+160|0;T=f+180|0;U=f+108|0;V=f+100|0;W=f+104|0;X=fa+4|0;Y=fa+8|0;Z=fa+12|0;_=fa+16|0;$=fa+21|0;aa=f+144|0;B=0;a:while(1){if((c[ca>>2]|0)!=770837923){h=c[f>>2]|0;Da=da;A=c[Da+4>>2]|0;if((A|0)>0|(A|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;A=K;c[A>>2]=0;c[A+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h)}A=c[f>>2]|0;if(a[A+81>>0]|0){Da=13;break}do if((c[C>>2]|0)<0){if((d[ba>>0]|d[ba+1>>0]<<8)&3){c[Ea>>2]=17;h=1;Da=246;break}h=A+168|0;if(!(c[h>>2]|0))c[A+264>>2]=0;do if(((a[A+88>>0]&-126)<<24>>24?(a[A+165>>0]|0)==0:0)?c[N>>2]|0:0){i=c[A>>2]|0;if((c[i>>2]|0)>1?(na=c[i+72>>2]|0,na|0):0){Xa[na&255](i,da)|0;break}Xa[c[i+64>>2]&255](i,fa)|0;Ha=+g[fa>>3]*864.0e5;z=+t(Ha)>=1.0?(Ha>0.0?~~+H(+s(Ha/4294967296.0),4294967295.0)>>>0:~~+F((Ha-+(~~Ha>>>0))/4294967296.0)>>>0):0;Da=da;c[Da>>2]=~~Ha>>>0;c[Da+4>>2]=z}while(0);c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&256)){h=A+176|0;c[h>>2]=(c[h>>2]|0)+1;h=d[ba>>0]|d[ba+1>>0]<<8}if(h&512){Da=A+172|0;c[Da>>2]=(c[Da>>2]|0)+1}c[C>>2]=0;Da=31}else Da=31;while(0);if((Da|0)==31){Da=0;h=(d[ba>>0]|d[ba+1>>0]<<8)&12;b:do if(!(h<<16>>16)){z=A+180|0;c[z>>2]=(c[z>>2]|0)+1;h=Rg(f)|0;c[z>>2]=(c[z>>2]|0)+-1;if((h|0)==100)h=100;else Da=226}else{z=c[f>>2]|0;y=c[M>>2]|0;x=y+40|0;if(h<<16>>16==4)r=1;else r=0?1:(c[z+32>>2]&16777216|0)!=0;m=c[y+72>>2]|0;n=m+480|0;h=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;c:do if(c[n>>2]|0){if(!h){h=1;while(1){d:do if(c[y+(h*40|0)+24>>2]|0?(ha=c[y+(h*40|0)+20>>2]|0,ha|0):0){if(c[n>>2]|0){Xd(m,ha);break}i=ha;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[ha>>2]=c[q>>2];c[q>>2]=ha;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](ha);break}else{w=Wa[c[29352>>2]&127](ha)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ha);break}}while(0);h=h+1|0;if((h|0)==9)break c}}do if(c[y+64>>2]|0?(ga=c[y+60>>2]|0,ga|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ga);break}else{w=Wa[c[29352>>2]&127](ga)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ga);break}while(0);do if(c[y+104>>2]|0?(ja=c[y+100>>2]|0,ja|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ja);break}else{w=Wa[c[29352>>2]&127](ja)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ja);break}while(0);do if(c[y+144>>2]|0?(ka=c[y+140>>2]|0,ka|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](ka);break}else{w=Wa[c[29352>>2]&127](ka)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](ka);break}while(0);do if(c[y+184>>2]|0?(la=c[y+180>>2]|0,la|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](la);break}else{w=Wa[c[29352>>2]&127](la)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](la);break}while(0);do if(c[y+224>>2]|0){h=c[y+220>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+264>>2]|0){h=c[y+260>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(c[y+304>>2]|0){h=c[y+300>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[y+344>>2]|0))break;h=c[y+340>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else{if(h){h=1;while(1){i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0;if((h|0)==9)break c}}h=1;do{i=y+(h*40|0)+8|0;if(!(b[i>>1]&9216)){j=y+(h*40|0)+24|0;if(c[j>>2]|0){k=c[y+(h*40|0)+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{w=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(y+(h*40|0)|0);b[i>>1]=128;h=h+1|0}while((h|0)!=9)}while(0);c[O>>2]=0;if((c[Ea>>2]|0)==7){h=z+81|0;if(a[h>>0]|0){h=1;Da=226;break}if(a[z+82>>0]|0){h=1;Da=226;break}a[h>>0]=1;if((c[z+180>>2]|0)>0)c[z+264>>2]=1;h=z+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[z+236>>2]|0;if(!h){h=1;Da=226;break}c[h+12>>2]=7;h=1;Da=226;break}o=c[U>>2]|0;if(r){h=c[M>>2]|0;j=h+360|0;if(b[h+368>>1]&16){k=(c[h+372>>2]|0)>>>2;l=c[h+376>>2]|0;if(!k){q=o;k=0}else{h=o;i=0;do{h=(c[(c[l+(i<<2)>>2]|0)+4>>2]|0)+h|0;i=i+1|0}while((i|0)!=(k|0));q=h}}else{q=o;k=0;l=0}}else{j=0;q=o;k=0;l=0}i=c[C>>2]|0;h=i+1|0;c[C>>2]=h;f:do if((i|0)<(q|0)){u=j+16|0;v=j+8|0;w=j+12|0;g:do if(r){h=o;while(1){if((i|0)<(h|0))p=(c[W>>2]|0)+(i*20|0)|0;else{i=i-h|0;h=c[l>>2]|0;m=c[h+4>>2]|0;if((i|0)>=(m|0)){n=0;do{i=i-m|0;n=n+1|0;h=c[l+(n<<2)>>2]|0;m=c[h+4>>2]|0}while((i|0)>=(m|0))}p=(c[h>>2]|0)+(i*20|0)|0}do if((a[p+1>>0]|0)==-4){o=k+1|0;n=o<<2;h:do if((k|0)>0){m=c[p+16>>2]|0;h=0;do{if((c[l+(h<<2)>>2]|0)==(m|0))break h;h=h+1|0}while((h|0)<(k|0))}else h=0;while(0);if((h|0)!=(k|0)){n=q;break}r=Eg(j,n,(k|0)!=0&1)|0;c[Ea>>2]=r;if(r|0){h=1;Da=226;break b}l=c[u>>2]|0;r=p+16|0;c[l+(k<<2)>>2]=c[r>>2];b[v>>1]=b[v>>1]|16;c[w>>2]=n;n=(c[(c[r>>2]|0)+4>>2]|0)+q|0;k=o}else n=q;while(0);h=d[ba>>0]|d[ba+1>>0]<<8;if(!(h&8))break g;switch(a[p>>0]|0){case -85:break g;case 61:{m=c[C>>2]|0;if((m|0)>1)break g;else i=m;break}default:i=c[C>>2]|0}c[C>>2]=i+1;if((i|0)>=(n|0))break f;q=n;h=c[U>>2]|0}}else{n=d[ba>>0]|d[ba+1>>0]<<8;if(!(n&8)){if((i|0)<(o|0)){p=(c[W>>2]|0)+(i*20|0)|0;h=n;break}i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}p=(c[h>>2]|0)+(i*20|0)|0;h=n;break}m=h;while(1){if((i|0)<(o|0))h=(c[W>>2]|0)+(i*20|0)|0;else{i=i-o|0;h=c[l>>2]|0;j=c[h+4>>2]|0;if((i|0)>=(j|0)){k=0;do{i=i-j|0;k=k+1|0;h=c[l+(k<<2)>>2]|0;j=c[h+4>>2]|0}while((i|0)>=(j|0))}h=(c[h>>2]|0)+(i*20|0)|0}switch(a[h>>0]|0){case -85:{p=h;h=n;break g}case 61:{if((m|0)>1){p=h;h=n;break g}break}default:{}}h=m+1|0;c[C>>2]=h;if((m|0)<(q|0)){i=m;m=h}else break f}}while(0);if(c[z+264>>2]|0){c[Ea>>2]=9;Ag(f,50367,Ba);h=1;Da=226;break b}if((h&12)==4){b[y+48>>1]=4;q=x;c[q>>2]=i;c[q+4>>2]=((i|0)<0)<<31>>31;b[y+88>>1]=2562;q=c[2800+(d[p>>0]<<2)>>2]|0;c[y+96>>2]=q;q=(Eu(q)|0)&1073741823;c[y+92>>2]=q;a[y+90>>0]=1;q=y+120|0}else q=x;b[q+8>>1]=4;i=c[p+4>>2]|0;o=q;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;b[q+48>>1]=4;o=c[p+8>>2]|0;i=q+40|0;c[i>>2]=o;c[i+4>>2]=((o|0)<0)<<31>>31;b[q+88>>1]=4;i=c[p+12>>2]|0;o=q+80|0;c[o>>2]=i;c[o+4>>2]=((i|0)<0)<<31>>31;o=q+120|0;i=q+144|0;j=c[i>>2]|0;if((j|0)<100){if(Eg(o,100,0)|0){h=1;Da=226;break b}h=q+136|0;k=q+128|0;n=h;h=c[h>>2]|0;j=c[i>>2]|0}else{h=c[q+140>>2]|0;n=q+136|0;c[n>>2]=h;k=q+128|0;b[k>>1]=b[k>>1]&13}b[k>>1]=514;c[X>>2]=h;c[fa>>2]=0;c[Y>>2]=j;c[Z>>2]=0;c[Z+4>>2]=0;b[Z+8>>1]=0;i:do switch(a[p+1>>0]|0){case -9:{k=c[p+16>>2]|0;l=k+6|0;c[Ca>>2]=e[l>>1];Eb(fa,34044,Ca);if(b[l>>1]|0){m=k+16|0;j=0;do{i=c[k+20+(j<<2)>>2]|0;if(!i)i=59952;else i=c[i>>2]|0;z=(Bu(i,34049)|0)==0;c[oa>>2]=(a[(c[m>>2]|0)+j>>0]|0)==0?59952:34064;c[oa+4>>2]=z?34056:i;Eb(fa,34058,oa);j=j+1|0}while(j>>>0<(e[l>>1]|0)>>>0)}i=c[_>>2]|0;j=i+1|0;if(j>>>0<(c[Y>>2]|0)>>>0){c[_>>2]=j;a[(c[X>>2]|0)+i>>0]=41;break i}else{wb(fa,34066,1);break i}}case -2:{c[pa>>2]=c[c[p+16>>2]>>2];Eb(fa,34068,pa);break}case -8:{y=c[p+16>>2]|0;z=a[y>>0]|0;c[qa>>2]=c[y+32>>2];c[qa+4>>2]=z;Eb(fa,34076,qa);break}case -14:{x=c[p+16>>2]|0;y=c[x+4>>2]|0;z=ra;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ra);break}case -3:{c[sa>>2]=c[p+16>>2];Eb(fa,34083,sa);break}case -13:{g[ta>>3]=+g[c[p+16>>2]>>3];Eb(fa,34086,ta);break}case -11:{i=c[p+16>>2]|0;j=e[i+8>>1]|0;if(j&2|0){h=c[i+16>>2]|0;break i}if(j&4|0){x=i;y=c[x+4>>2]|0;z=ua;c[z>>2]=c[x>>2];c[z+4>>2]=y;Eb(fa,32524,ua);break i}if(!(j&8)){h=(j&1|0)==0?34092:31171;break i}else{g[va>>3]=+g[i>>3];Eb(fa,34086,va);break i}}case -12:{c[wa>>2]=c[(c[p+16>>2]|0)+8>>2];Eb(fa,34099,wa);break}case -15:{k=c[p+16>>2]|0;l=c[k>>2]|0;if((l|0)<1)k=0;else{i=1;while(1){c[xa>>2]=c[k+(i<<2)>>2];Eb(fa,34107,xa);if((i|0)==(l|0))break;else i=i+1|0}k=c[_>>2]|0;j=c[Y>>2]|0}a[h>>0]=91;i=k+1|0;if(i>>>0>>0){c[_>>2]=i;a[(c[X>>2]|0)+k>>0]=93;break i}else{wb(fa,34111,1);break i}}case -4:{Eb(fa,34113,ya);break}case -5:case -17:{a[h>>0]=0;break}case -6:{c[za>>2]=c[c[p+16>>2]>>2];Eb(fa,31408,za);break}default:{i=c[p+16>>2]|0;if(i|0){h=i;break i}a[h>>0]=0}}while(0);i=c[X>>2]|0;do if(i|0){a[i+(c[_>>2]|0)>>0]=0;if(!(c[Z>>2]|0))break;if(a[$>>0]&4)break;$d(fa)|0}while(0);if((h|0)==(c[n>>2]|0)){if(!h)h=0;else h=(Eu(h)|0)&1073741823;c[q+132>>2]=h;a[q+130>>0]=1}else{c[q+132>>2]=0;yc(o,h,-1,1,0)|0}h=(d[ba>>0]|d[ba+1>>0]<<8)&12;if(h<<16>>16==4){if((c[q+184>>2]|0)<4){if(Eg(q+160|0,4,0)|0){h=1;Da=226;break b}h=q+168|0;i=c[q+176>>2]|0}else{i=c[q+180>>2]|0;c[q+176>>2]=i;h=q+168|0;b[h>>1]=b[h>>1]&13}b[h>>1]=514;c[q+172>>2]=2;c[Aa>>2]=e[p+2>>1];Cb(3,i,32595,Aa)|0;a[q+170>>0]=1;b[q+208>>1]=1;h=(d[ba>>0]|d[ba+1>>0]<<8)&12}b[aa>>1]=12-(h&65535);c[O>>2]=(c[M>>2]|0)+40;c[Ea>>2]=0;h=100;break b}while(0);c[Ea>>2]=0;h=101;Da=226}while(0);do if((Da|0)==226){Da=0;z=da;y=c[z+4>>2]|0;if((y|0)>0|(y|0)==0&(c[z>>2]|0)>>>0>0)hc(A,f);if((h|0)==101)if(!(a[A+79>>0]|0))h=101;else{m=A+20|0;h=c[m>>2]|0;if((h|0)>0){n=A+16|0;o=A+240|0;p=A+244|0;l=0;i=0;do{k=c[n>>2]|0;j=c[k+(l<<4)+4>>2]|0;do if(((j|0)!=0?(ea=c[j+4>>2]|0,c[ea+4>>2]=c[j>>2],ea=c[(c[ea>>2]|0)+216>>2]|0,(ea|0)!=0):0)?(z=ea+12|0,ma=c[z>>2]|0,c[z>>2]=0,(ma|0)>0):0){j=c[o>>2]|0;if(!((i|0)==0&(j|0)!=0))break;i=Za[j&127](c[p>>2]|0,A,c[k+(l<<4)>>2]|0,ma)|0;h=c[m>>2]|0}while(0);l=l+1|0}while((l|0)<(h|0));c[Ea>>2]=i;if(i|0){h=1;break}}else c[Ea>>2]=0;h=101}}while(0);c[A+64>>2]=h;i=c[f>>2]|0;j=c[Ea>>2]|0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){if((c[i+68>>2]&j|0)==7)Da=244}else{og(i);Da=244}if((Da|0)==244){Da=0;c[Ea>>2]=7}if((h|1|0)!=101)Da=246}if((Da|0)==246){Da=0;if((a[L>>0]|0)<0)h=qg(f)|0}h=c[A+68>>2]&h;if((h|0)!=17){Da=322;break}u=B+1|0;if(B>>>0>=50){h=17;Da=322;break}r=c[C>>2]|0;i=c[f>>2]|0;n=qd(i,c[N>>2]|0,-1,d[L>>0]|0,f,ia,0)|0;switch(n|0){case 7:{Da=251;break a}case 0:break;default:{Da=281;break a}}q=c[ia>>2]|0;ew(fa|0,q|0,224)|0;ew(q|0,f|0,224)|0;ew(f|0,fa|0,224)|0;p=q+8|0;o=c[p>>2]|0;c[p>>2]=c[P>>2];c[P>>2]=o;o=q+4|0;B=c[o>>2]|0;c[o>>2]=c[Q>>2];c[Q>>2]=B;B=q+188|0;l=c[B>>2]|0;c[B>>2]=c[N>>2];c[N>>2]=l;c[R>>2]=c[q+208>>2];a[L>>0]=a[q+148>>0]|0;l=q+160|0;c[S>>2]=c[l>>2];c[S+4>>2]=c[l+4>>2];c[S+8>>2]=c[l+8>>2];c[S+12>>2]=c[l+12>>2];c[S+16>>2]=c[l+16>>2];c[S+20>>2]=c[l+20>>2];c[S+24>>2]=c[l+24>>2];c[T>>2]=(c[T>>2]|0)+1;l=q+16|0;if((b[l>>1]|0)>0){m=q+100|0;k=0;do{B=c[V>>2]|0;h=B+(k*40|0)|0;n=c[m>>2]|0;i=n+(k*40|0)|0;if(!((b[B+(k*40|0)+8>>1]&9216)==0?!(c[B+(k*40|0)+24>>2]|0):0))Cg(h);j=h+40|0;do{c[h>>2]=c[i>>2];h=h+4|0;i=i+4|0}while((h|0)<(j|0));b[n+(k*40|0)+8>>1]=1;c[n+(k*40|0)+24>>2]=0;k=k+1|0}while((k|0)<(b[l>>1]|0))}c[q+40>>2]=0;k=q+20|0;h=c[k>>2]|0;if((h|0)<832317811)switch(h|0){case 770837923:{Da=264;break}default:{}}else switch(h|0){case 832317811:{Da=264;break}default:{}}if((Da|0)==264){Da=0;kc(q)|0}j=c[q>>2]|0;kb(j,q);i=c[o>>2]|0;h=c[p>>2]|0;if(!i)c[j+4>>2]=h;else{c[i+8>>2]=h;h=c[p>>2]|0}if(h|0)c[h+4>>2]=i;c[k>>2]=1443283912;c[q>>2]=0;do if(j){if(c[j+480>>2]|0){Xd(j,q);break}B=q;if((c[j+304>>2]|0)>>>0<=B>>>0?(c[j+308>>2]|0)>>>0>B>>>0:0){B=j+300|0;c[q>>2]=c[B>>2];c[B>>2]=q}else Da=276}else Da=276;while(0);do if((Da|0)==276)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Da=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);h=c[f>>2]|0;Da=da;B=c[Da+4>>2]|0;if((B|0)>0|(B|0)==0&(c[Da>>2]|0)>>>0>0)hc(h,f);Da=kc(f)|0;c[ca>>2]=770837923;c[C>>2]=-1;c[Ea>>2]=0;a[D>>0]=2;c[E>>2]=0;c[G>>2]=1;a[I>>0]=-1;c[J>>2]=0;B=K;c[B>>2]=0;c[B+4>>2]=0;if((Da|0)==3082|(a[h+81>>0]|0)!=0)og(h);if((r|0)>-1){Da=d[ba>>0]|d[ba+1>>0]<<8|16;a[ba>>0]=Da;a[ba+1>>0]=Da>>8}B=u}if((Da|0)==13){c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}else if((Da|0)==251){h=i+81|0;if((a[h>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[h>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;h=i+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[i+236>>2]|0;if(h|0)c[h+12>>2]=7}n=7}else if((Da|0)!=281)if((Da|0)==322){Ra=Ga;return h|0}h=c[Fa+260>>2]|0;do if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){l=c[h+16>>2]|0;break}if(!(i&1))l=Gg(h,1)|0;else l=0}else l=0;while(0);m=f+124|0;h=c[m>>2]|0;do if(h|0){if(c[Fa+480>>2]|0){Xd(Fa,h);break}f=h;if((c[Fa+304>>2]|0)>>>0<=f>>>0?(c[Fa+308>>2]|0)>>>0>f>>>0:0){f=Fa+300|0;c[h>>2]=c[f>>2];c[f>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=Fa+81|0;if(a[k>>0]|0){c[m>>2]=0;c[Ea>>2]=7;Fa=7;Ra=Ga;return Fa|0}if(l){j=(Eu(l)|0)+1|0;j:do if(!(c[Fa+272>>2]|0)){do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0>>0:0))){i=Fa+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}i=Fa+296|0;h=c[i>>2]|0;if(!h){h=Fa+292|0;break}else{c[i>>2]=c[h>>2];f=Fa+284|0;c[f>>2]=(c[f>>2]|0)+1;break j}}else h=Fa+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Da=308}else Da=308;while(0);if((Da|0)==308)h=_d(Fa,j,0)|0;if(h)ew(h|0,l|0,j|0)|0;else h=0}else h=0;c[m>>2]=h;if((n|0)==3082|(a[k>>0]|0)!=0){og(Fa);h=7}else h=c[Fa+68>>2]&n;c[Ea>>2]=h;Fa=h;Ra=Ga;return Fa|0}while(0);c[i>>2]=58063;c[i+4>>2]=81990;c[i+8>>2]=31517;Db(21,32001,i);Fa=21;Ra=Ga;return Fa|0}function Hc(a,d){a=a|0;d=d|0;var e=0;e=c[a+8>>2]|0;if(!(b[e+8>>1]&8192)){e=Ic(a,d)|0;return e|0}else{e=c[e+16>>2]|0;return e|0}return 0}function Ic(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0;h=c[a+8>>2]|0;if((d|0)<1){e=h+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(h);c[h+16>>2]=0;h=0;return h|0}if((c[h+24>>2]|0)<(d|0)){Eg(h,d,0)|0;g=h+16|0;e=h+8|0;f=g;g=c[g>>2]|0}else{g=c[h+20>>2]|0;f=h+16|0;c[f>>2]=g;e=h+8|0;b[e>>1]=b[e>>1]&13}b[e>>1]=8192;c[h>>2]=c[a+4>>2];if(!g){h=g;return h|0}gw(g|0,0,d|0)|0;h=c[f>>2]|0;return h|0}function Jc(a){a=a|0;if(!a){a=0;return a|0}if(!(c[a+120>>2]|0)){a=0;return a|0}a=e[a+144>>1]|0;return a|0}function Kc(b,d){b=b|0;d=d|0;var f=0,g=0;if(!b){g=mc(29576)|0;return g|0}f=c[b+120>>2]|0;if((f|0)!=0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;f=b}else{d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576;f=b}g=mc(d)|0;f=c[f>>2]|0;b=b+40|0;d=c[b>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[b>>2]=d;return g|0}function Lc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0;j=(d|0)==0;do if(j)h=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){h=g+(f*40|0)|0;break}h=c[d>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);f=b[h+8>>1]|0;if((f&2)!=0?(a[h+10>>0]|0)==1:0)g=c[h+12>>2]|0;else i=9;do if((i|0)==9){f=f&65535;if(!(f&16)){if(f&1|0){g=0;break}g=Fg(h,1)|0;break}else{g=c[h+12>>2]|0;if(!(f&16384))break;g=(c[h>>2]|0)+g|0;break}}while(0);if(j)return g|0;h=c[d>>2]|0;i=d+40|0;f=c[i>>2]|0;if((f|0)==3082|(a[h+81>>0]|0)!=0){og(h);f=7}else f=c[h+68>>2]&f;c[i>>2]=f;return g|0}function Mc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0.0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&8)){if(f&4|0){f=d;i=+((c[f>>2]|0)>>>0)+4294967296.0*+(c[f+4>>2]|0);break}if(!(f&18))i=0.0;else i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)}else i=+g[d>>3];while(0);if(h)return +i;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return +i}function Nc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){i=Mg(+g[d>>3])|0;L()|0;break}if(!(f&18))i=0;else{i=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;L()|0}}else i=c[d>>2]|0;while(0);if(h)return i|0;f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;return i|0}function Oc(b,d){b=b|0;d=d|0;var f=0,h=0,i=0,j=0;h=(b|0)==0;do if(h)d=29576;else{f=c[b+120>>2]|0;if(f|0?(e[b+144>>1]|0)>>>0>d>>>0:0){d=f+(d*40|0)|0;break}d=c[b>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);f=e[d+8>>1]|0;do if(!(f&4)){if(f&8|0){j=Mg(+g[d>>3])|0;i=L()|0;break}if(!(f&18)){i=0;j=0}else{j=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;i=L()|0}}else{j=d;i=c[j+4>>2]|0;j=c[j>>2]|0}while(0);if(h){K(i|0);return j|0}f=c[b>>2]|0;h=b+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);d=7}else d=c[f+68>>2]&d;c[h>>2]=d;K(i|0);return j|0}function Pc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;h=(d|0)==0;do if(h)f=29576;else{g=c[d+120>>2]|0;if(g|0?(e[d+144>>1]|0)>>>0>f>>>0:0){f=g+(f*40|0)|0;break}f=c[d>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}while(0);g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)i=c[f+16>>2]|0;else if(!(g&1))i=Gg(f,1)|0;else i=0;if(h)return i|0;g=c[d>>2]|0;h=d+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[h>>2]=f;return i|0}function Qc(f,g){f=f|0;g=g|0;var h=0,i=0,j=0;i=(f|0)==0;do if(i)g=29576;else{h=c[f+120>>2]|0;if(h|0?(e[f+144>>1]|0)>>>0>g>>>0:0){g=h+(g*40|0)|0;break}g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);j=d[816+(b[g+8>>1]&31)>>0]|0;if(i)return j|0;h=c[f>>2]|0;i=f+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g;return j|0}function Rc(d,f){d=d|0;f=f|0;var g=0,h=0,i=0;i=c[d>>2]|0;if(!d){i=0;return i|0}if((e[d+144>>1]|0)>>>0<=f>>>0){i=0;return i|0}h=c[d+116>>2]|0;d=h+(f*40|0)|0;do if(d){g=b[h+(f*40|0)+8>>1]|0;if((g&514)==514?(a[h+(f*40|0)+10>>0]|0)==1:0){d=c[h+(f*40|0)+16>>2]|0;break}if(!(g&1))d=Gg(d,1)|0;else d=0}else d=0;while(0);g=i+81|0;if(!(a[g>>0]|0)){i=d;return i|0}if(c[i+180>>2]|0){i=0;return i|0}a[g>>0]=0;c[i+264>>2]=0;i=i+272|0;c[i>>2]=(c[i>>2]|0)+-1;i=0;return i|0}function Sc(b,d,e,f,g){b=b|0;d=d|0;e=e|0;f=f|0;g=g|0;var h=0;h=Vc(b,d)|0;if(h|0){switch(g|0){case 0:case -1:{b=h;return b|0}default:{}}ab[g&127](e);b=h;return b|0}if(!e){b=0;return b|0}e=yc((c[b+100>>2]|0)+((d+-1|0)*40|0)|0,e,f,0,g)|0;if(!e){b=0;return b|0}d=c[b>>2]|0;c[d+64>>2]=e;Ne(d,e);d=c[b>>2]|0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;return b|0}else{b=c[d+68>>2]&e;return b|0}return 0}function Tc(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;j=Vc(d,e)|0;if(j|0){switch(h|0){case 0:case -1:{d=j;return d|0}default:{}}ab[h&127](f);d=j;return d|0}if(!f){d=0;return d|0}m=c[d+100>>2]|0;k=e+-1|0;l=m+(k*40|0)|0;e=yc(l,f,g,i,h)|0;do if(!(i<<24>>24==0|(e|0)!=0)){j=a[(c[d>>2]|0)+78>>0]|0;if(!(b[m+(k*40|0)+8>>1]&2)){d=0;return d|0}if((a[m+(k*40|0)+10>>0]|0)==j<<24>>24){d=0;return d|0}else{e=Ig(l,j)|0;break}}while(0);if(!e){d=0;return d|0}j=c[d>>2]|0;c[j+64>>2]=e;Ne(j,e);j=c[d>>2]|0;if((e|0)==3082|(a[j+81>>0]|0)!=0){og(j);d=7;return d|0}else{d=c[j+68>>2]&e;return d|0}return 0}function Uc(a,d,e){a=a|0;d=d|0;e=+e;var f=0,h=0,i=0,j=0,k=0;j=Ra;Ra=Ra+16|0;f=j+8|0;h=j;i=Vc(a,d)|0;if(i|0){Ra=j;return i|0}k=c[a+100>>2]|0;d=d+-1|0;a=k+(d*40|0)|0;d=k+(d*40|0)+8|0;if(!(b[d>>1]&9216))b[d>>1]=1;else Dg(a);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=j;return i|0}g[a>>3]=e;b[d>>1]=8;Ra=j;return i|0}function Vc(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+64|0;i=l+40|0;k=l+32|0;j=l+16|0;h=l+8|0;do if(!e)Db(21,32555,l);else{g=c[e>>2]|0;if(!g){Db(21,32391,h);break}if((c[e+20>>2]|0)==770837923?(c[e+36>>2]|0)<=-1:0){if((f|0)>=1?(b[e+16>>1]|0)>=(f|0):0){j=f+-1|0;k=c[e+100>>2]|0;h=k+(j*40|0)|0;i=k+(j*40|0)+8|0;if(!((b[i>>1]&9216)==0?(c[k+(j*40|0)+24>>2]|0)==0:0)){Cg(h);g=c[e>>2]|0}b[i>>1]=1;c[g+64>>2]=0;g=c[e+208>>2]|0;if(!g){f=0;Ra=l;return f|0}if(!(g&((f|0)>31?-2147483648:1<>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=e;a[f+1>>0]=e>>8;f=0;Ra=l;return f|0}c[g+64>>2]=25;Ne(g,25);f=25;Ra=l;return f|0}c[g+64>>2]=21;Ne(g,21);c[k>>2]=c[e+188>>2];Db(21,36834,k);c[i>>2]=58063;c[i+4>>2]=82575;c[i+8>>2]=31517;Db(21,32001,i);f=21;Ra=l;return f|0}while(0);c[j>>2]=58063;c[j+4>>2]=82567;c[j+8>>2]=31517;Db(21,32001,j);f=21;Ra=l;return f|0}function Wc(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0;f=((e|0)<0)<<31>>31;g=Vc(a,d)|0;if(g|0)return g|0;h=c[a+100>>2]|0;d=d+-1|0;a=h+(d*40|0)|0;d=h+(d*40|0)+8|0;if(!(b[d>>1]&9216)){h=a;c[h>>2]=e;c[h+4>>2]=f;b[d>>1]=4;return g|0}else{Pg(a,e,f);return g|0}return 0}function Xc(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Tc(a,b,c,d,e,1)|0}function Yc(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;i=t+8|0;j=t;h=b[f+8>>1]|0;switch(a[816+(h&31)>>0]|0){case 1:{j=f;i=c[j>>2]|0;j=c[j+4>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216)){d=h;c[d>>2]=i;c[d+4>>2]=j;b[f>>1]=4;d=0;Ra=t;return d|0}else{Pg(h,i,j);d=0;Ra=t;return d|0}}case 2:{k=+g[f>>3];h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}d=c[d+100>>2]|0;f=e+-1|0;h=d+(f*40|0)|0;f=d+(f*40|0)+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(h);g[i>>3]=k;g[j>>3]=+g[i>>3];if(!(+g[i>>3]==+g[j>>3])){d=0;Ra=t;return d|0}g[h>>3]=k;b[f>>1]=8;d=0;Ra=t;return d|0}case 4:{if(h&16384){l=c[f>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}j=c[d+100>>2]|0;h=e+-1|0;f=j+(h*40|0)|0;i=j+(h*40|0)+8|0;if(!((b[i>>1]&9216)==0?!(c[j+(h*40|0)+24>>2]|0):0))Cg(f);b[i>>1]=16400;c[j+(h*40|0)+12>>2]=0;c[f>>2]=(l|0)>0?l:0;a[j+(h*40|0)+10>>0]=1;c[j+(h*40|0)+16>>2]=0;d=0;Ra=t;return d|0}r=c[f+16>>2]|0;f=c[f+12>>2]|0;h=Vc(d,e)|0;if(h|0){d=h;Ra=t;return d|0}if(!r){d=0;Ra=t;return d|0}q=c[d+100>>2]|0;p=e+-1|0;n=q+(p*40|0)|0;l=c[q+(p*40|0)+32>>2]|0;e=(l|0)==0;if(e)i=1e9;else i=c[l+108>>2]|0;a:do if((f|0)<0)if((i|0)<0){o=528;j=0}else{h=0;while(1){if(!((a[r+(h|1)>>0]|a[r+h>>0])<<24>>24)){o=528;j=h;break a}h=h+2|0;if((h|0)>(i|0)){o=528;j=h;break}}}else{o=16;j=f}while(0);m=j+((o&65535)>>>8&65535)|0;do if((j|0)>(i|0))if(!e?(s=c[l+236>>2]|0,(s|0)!=0):0){c[s+12>>2]=18;f=s+36|0;c[f>>2]=(c[f>>2]|0)+1;f=18}else f=18;else{h=m>>>0>32?m:32;if((c[q+(p*40|0)+24>>2]|0)<(h|0)){if(Eg(n,h,0)|0){f=7;break}h=q+(p*40|0)+8|0;f=c[q+(p*40|0)+16>>2]|0}else{f=c[q+(p*40|0)+20>>2]|0;c[q+(p*40|0)+16>>2]=f;h=q+(p*40|0)+8|0;b[h>>1]=b[h>>1]&13}ew(f|0,r|0,m|0)|0;c[q+(p*40|0)+12>>2]=j;b[h>>1]=o;a[q+(p*40|0)+10>>0]=1;d=0;Ra=t;return d|0}while(0);h=c[d>>2]|0;c[h+64>>2]=f;Ne(h,f);h=c[d>>2]|0;if(!(a[h+81>>0]|0)){d=c[h+68>>2]&f;Ra=t;return d|0}else{og(h);d=7;Ra=t;return d|0}}case 3:{d=Tc(d,e,c[f+16>>2]|0,c[f+12>>2]|0,-1,a[f+10>>0]|0)|0;Ra=t;return d|0}default:{d=Vc(d,e)|0;Ra=t;return d|0}}return 0} function ho(f,h,i){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,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0;J=Ra;Ra=Ra+400|0;F=J+16|0;p=J;r=J+360|0;G=J+80|0;H=J+60|0;z=J+32|0;I=c[(c[f>>2]|0)+32>>2]|0;h=c[i>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){u=c[h+16>>2]|0;break}if(!(j&1))u=Gg(h,1)|0;else u=0}else u=0;while(0);h=c[i+12>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){B=c[h+16>>2]|0;break}if(!(j&1))B=Gg(h,1)|0;else B=0}else B=0;while(0);h=c[i+16>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){x=c[h+16>>2]|0;break}if(!(j&1))x=Gg(h,1)|0;else x=0}else x=0;while(0);h=c[i+20>>2]|0;do if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){A=c[h+16>>2]|0;break}if(!(j&1))A=Gg(h,1)|0;else A=0}else A=0;while(0);h=c[i+24>>2]|0;j=e[h+8>>1]|0;do if(!(j&4)){if(j&8|0){m=Mg(+g[h>>3])|0;L()|0;break}if(!(j&18))m=0;else{m=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else m=c[h>>2]|0;while(0);if(!((B|0)!=0&(x|0)!=0&(A|0)!=0)){Ra=J;return}C=I+312|0;D=c[C>>2]|0;c[C>>2]=0;n=I+20|0;l=c[n>>2]|0;if((l|0)>0){j=c[I+16>>2]|0;h=0;do{k=c[j+(h<<4)+4>>2]|0;if(k|0)c[(c[k+4>>2]|0)+4>>2]=c[k>>2];h=h+1|0}while((h|0)!=(l|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;o=Sd(I,x,u)|0;w=H+12|0;c[w>>2]=o;o=z+12|0;c[o>>2]=0;c[o+4>>2]=0;c[o+8>>2]=0;c[z>>2]=G;c[z+4>>2]=152;c[z+8>>2]=153;c[z+24>>2]=H;c[r>>2]=0;o=(m|0)==0;if(o){a:do if(u){y=c[n>>2]|0;j=y+-1|0;if((y|0)>0){h=j;m=(c[I+16>>2]|0)+(j<<4)|0;while(1){k=c[m>>2]|0;if(k|0){y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(y<<24>>24==0|(j|0)!=0)){l=u;do{k=k+1|0;l=l+1|0;y=a[k>>0]|0;j=(d[208+(y&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(j|0)!=0))}if(!j)break a}if(!h)break;j=h+-1|0;if((h|0)>0){h=j;m=m+-16|0}else{h=j;break a}}h=109-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!h){j=u;k=50919;do{k=k+1|0;j=j+1|0;y=a[k>>0]|0;h=(d[208+(y&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=j}else h=-1;while(0);h=h&255}else h=1;j=I+164|0;a[j>>0]=h;y=G+4|0;gw(y|0,0,272)|0;a[G+200>>0]=3;c[G>>2]=I;c[G+132>>2]=1;h=ud(G,B,r)|0;c[y>>2]=c[r>>2];h=(a[I+81>>0]|0)==0?h:7;b:do if(!h){q=c[G+228>>2]|0;h=(q|0)==0;if((h?(c[G+232>>2]|0)==0:0)?(c[G+236>>2]|0)==0:0){c[p>>2]=32306;c[p+4>>2]=103316;c[p+8>>2]=31517;Db(11,32001,p);h=11;E=58;break}a[j>>0]=0;k=c[I+32>>2]|0;n=k&67108864;c:do if(h){m=G+232|0;h=c[m>>2]|0;if(h|0){l=c[h>>2]|0;h=G+272|0;j=c[h>>2]|0;d:do if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break d;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;x=H+4|0;c[x>>2]=(c[x>>2]|0)+1}while(0);if(n|0)break;h=c[(c[m>>2]|0)+36>>2]|0;if(!h)break;_j(z,h)|0;break}m=c[G+236>>2]|0;l=c[m+4>>2]|0;e:do if(l|0){s=a[l>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(s<<24>>24==0|(h|0)!=0)){j=x;k=l;do{k=k+1|0;j=j+1|0;s=a[k>>0]|0;h=(d[208+(s&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(h|0)!=0))}if(((h|0)==0?(c[(c[w>>2]|0)+72>>2]|0)==(c[m+24>>2]|0):0)?(t=G+272|0,v=c[t>>2]|0,v|0):0){k=t;h=v;while(1){j=h+12|0;if((c[h>>2]|0)==(l|0))break;h=c[j>>2]|0;if(!h)break e;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;w=H+4|0;c[w>>2]=(c[w>>2]|0)+1}}while(0);if(!n){h=lo(G,o?u:0)|0;if(h|0){E=131;break b}oo(z,m);h=c[m+28>>2]|0;if(h|0){n=G+272|0;o=H+4|0;do{m=c[h+12>>2]|0;f:do if(m|0){z=a[m>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(z<<24>>24==0|(j|0)!=0)){k=x;l=m;do{l=l+1|0;k=k+1|0;z=a[l>>0]|0;j=(d[208+(z&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(z<<24>>24==0|(j|0)!=0))}if(j|0)break;j=c[n>>2]|0;if(!j)break;l=n;while(1){k=j+12|0;if((c[j>>2]|0)==(m|0))break;j=c[k>>2]|0;if(!j)break f;else l=k}c[l>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;c[o>>2]=(c[o>>2]|0)+1}while(0);h=c[h+36>>2]|0}while((h|0)!=0)}}}else{j=q+12|0;p=(n|0)==0;if(c[j>>2]|0){if(!p)break;x=r+4|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[x+24>>2]=0;c[r>>2]=G;Kk(G,c[j>>2]|0,r);x=(c[G+36>>2]|0)==0;h=c[G+12>>2]|0;$j(z,c[j>>2]|0)|0;if(x|(h|0)==0)break;else{E=131;break b}}if(!((k&16384|0)==0&0==0&(p^1))?(s=c[q+16>>2]|0,s|0):0){n=G+272|0;o=H+4|0;l=s;do{m=c[l+8>>2]|0;g:do if(m|0){v=a[m>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){j=x;k=m;do{k=k+1|0;j=j+1|0;v=a[k>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(h|0)!=0))}if(h|0)break;h=c[n>>2]|0;if(!h)break;k=n;while(1){j=h+12|0;if((c[h>>2]|0)==(m|0))break;h=c[j>>2]|0;if(!h)break g;else k=j}c[k>>2]=c[j>>2];c[j>>2]=c[H>>2];c[H>>2]=h;c[o>>2]=(c[o>>2]|0)+1}while(0);l=c[l+4>>2]|0}while((l|0)!=0)}l=c[q>>2]|0;if(l|0){v=a[x>>0]|0;h=(d[208+(v&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(v<<24>>24==0|(h|0)!=0)){k=l;j=x;do{j=j+1|0;k=k+1|0;x=a[j>>0]|0;h=(d[208+(x&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(x<<24>>24==0|(h|0)!=0))}if(!h){c[w>>2]=q;do if(p){j=c[q+24>>2]|0;if(!j)break;h=c[j>>2]|0;if((h|0)<=0)break;k=h;h=j+4|0;while(1){j=c[h>>2]|0;if(j|0?_j(z,j)|0:0)break;if((k|0)>1){k=k+-1|0;h=h+20|0}else break}l=c[q>>2]|0}while(0);h=G+272|0;j=c[h>>2]|0;if(j|0){while(1){k=j+12|0;if((c[j>>2]|0)==(l|0))break;j=c[k>>2]|0;if(!j)break c;else h=k}c[h>>2]=c[k>>2];c[k>>2]=c[H>>2];c[H>>2]=j;z=H+4|0;c[z>>2]=(c[z>>2]|0)+1}}}}while(0);h=po(f,H,B,A,1)|0;if(h|0)E=131}else E=58;while(0);if((E|0)==58){a[j>>0]=0;E=131}do if((E|0)==131){if(!(c[y>>2]|0)){c[f+20>>2]=h;j=c[f>>2]|0;if(!(b[j+8>>1]&1))break;switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0;break}j=c[i+4>>2]|0;k=c[i+8>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);i=c[y>>2]|0;c[F>>2]=j;c[F+4>>2]=h;c[F+8>>2]=59952;c[F+12>>2]=i;h=Bb(49618,F)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{f=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(G);ro(I,c[H>>2]|0);c[C>>2]=D;Ra=J;return}function io(f,h,i){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,z=0,A=0,B=0;A=Ra;Ra=Ra+352|0;u=A+16|0;r=A;s=A+312|0;z=A+32|0;v=c[(c[f>>2]|0)+32>>2]|0;j=c[i>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);h=c[i+4>>2]|0;do if(h){k=b[h+8>>1]|0;if((k&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;break}if(!(k&1))o=Gg(h,1)|0;else o=0}else o=0;while(0);h=c[i+16>>2]|0;k=e[h+8>>1]|0;do if(!(k&4)){if(k&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(k&18))h=0;else{h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}}else h=c[h>>2]|0;while(0);p=c[v+32>>2]|0;w=v+312|0;x=c[w>>2]|0;c[w>>2]=0;if(!((j|0)!=0&(o|0)!=0)){c[w>>2]=x;Ra=A;return}c[s>>2]=0;q=(h|0)==0;if(q){n=c[v+20>>2]|0;k=n+-1|0;a:do if((n|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break a}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break a}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=j;l=50919;do{l=l+1|0;k=k+1|0;B=a[l>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);h=h&255}else h=1;l=v+164|0;a[l>>0]=h;m=z+4|0;gw(m|0,0,272)|0;a[z+200>>0]=3;c[z>>2]=v;c[z+132>>2]=1;B=ud(z,o,s)|0;c[m>>2]=c[s>>2];do if((B|0)==0&(a[v+81>>0]|0)==0){h=c[z+228>>2]|0;k=(h|0)==0;if((k?(c[z+232>>2]|0)==0:0)?(c[z+236>>2]|0)==0:0){c[r>>2]=32306;c[r+4>>2]=103316;c[r+8>>2]=31517;Db(11,32001,r);y=40;break}a[l>>0]=0;l=(p&67108864|0)==0&0==0;if(!(k|l^1)?(t=h+12|0,c[t>>2]|0):0){B=s+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[s>>2]=z;Kk(z,c[t>>2]|0,s);if((c[z+36>>2]|0)==0|(c[z+12>>2]|0)==0)break;else{y=68;break}}k=z+236|0;h=c[k>>2]|0;if(h|0){if(l){if(lo(z,q?j:0)|0){y=68;break}h=c[k>>2]|0}k=c[h+24>>2]|0;if(!k)o=-1e6;else{l=c[v+16>>2]|0;h=0;while(1)if((c[l+(h<<4)+12>>2]|0)==(k|0)){o=h;break}else h=h+1|0}B=c[v+20>>2]|0;k=B+-1|0;b:do if((B|0)>0){h=k;n=(c[v+16>>2]|0)+(k<<4)|0;while(1){l=c[n>>2]|0;if(l|0){B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(B<<24>>24==0|(k|0)!=0)){m=j;do{l=l+1|0;m=m+1|0;B=a[l>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0))}if(!k)break b}if(!h)break;k=h+-1|0;if((h|0)>0){h=k;n=n+-16|0}else{h=k;break b}}h=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!h){k=50919;do{k=k+1|0;j=j+1|0;B=a[k>>0]|0;h=(d[208+(B&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(h|0)!=0))}h=((h|0)!=0)<<31>>31}else h=k;while(0);if((o|0)==(h|0)){h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216)){B=h;c[B>>2]=1;c[B+4>>2]=0;b[j>>1]=4;break}else{Pg(h,1,0);break}}}}else y=40;while(0);if((y|0)==40){a[l>>0]=0;y=68}do if((y|0)==68){j=c[i+8>>2]|0;k=c[i+12>>2]|0;do if(j){h=b[j+8>>1]|0;if((h&514)==514?(a[j+10>>0]|0)==1:0){j=c[j+16>>2]|0;break}if(!(h&1))j=Gg(j,1)|0;else j=0}else j=0;while(0);do if(k){h=b[k+8>>1]|0;if((h&514)==514?(a[k+10>>0]|0)==1:0){h=c[k+16>>2]|0;break}if(!(h&1))h=Gg(k,1)|0;else h=0}else h=0;while(0);B=c[m>>2]|0;c[u>>2]=j;c[u+4>>2]=h;c[u+8>>2]=49639;c[u+12>>2]=B;h=Bb(49618,u)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{B=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);qo(z);c[w>>2]=x;Ra=A;return}function jo(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+24>>2]|0;switch(a[e>>0]|0){case 77:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;d=c[d>>2]|0;if((c[d+120>>2]|0)!=(c[i+12>>2]|0))return 0;d=d+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}case -94:{if((c[i+8>>2]|0)!=(b[e+32>>1]|0))return 0;if((c[i+12>>2]|0)!=(c[e+44>>2]|0))return 0;d=(c[d>>2]|0)+272|0;f=c[d>>2]|0;if(!f)return 0;while(1){h=f+12|0;if((c[f>>2]|0)==(e|0))break;g=c[h>>2]|0;if(!g){j=16;break}else{d=h;f=g}}if((j|0)==16)return 0;c[d>>2]=c[h>>2];c[h>>2]=c[i>>2];c[i>>2]=f;j=i+4|0;c[j>>2]=(c[j>>2]|0)+1;return 0}default:return 0}return 0}function ko(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;g=h;e=b+64|0;b=c[e>>2]|0;if(!b){Ra=h;return 0}if((c[b>>2]|0)<=0){Ra=h;return 0}f=g+4|0;d=0;do{i=c[b+8+(d<<4)+8>>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;j=c[a>>2]|0;c[g>>2]=j;Kk(j,i,g);$j(a,i)|0;d=d+1|0;b=c[e>>2]|0}while((d|0)<(c[b>>2]|0));Ra=h;return 0}function lo(d,f){d=d|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,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0;ea=Ra;Ra=Ra+208|0;aa=ea+128|0;$=ea+120|0;_=ea+112|0;ca=ea+104|0;ba=ea+96|0;Z=ea+88|0;n=ea+80|0;W=ea+168|0;X=ea+136|0;Y=ea;k=c[d>>2]|0;o=c[d+236>>2]|0;i=X+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[X>>2]=d;i=c[o+4>>2]|0;j=c[k+16>>2]|0;h=c[o+24>>2]|0;m=d;if(!h)g=-1e6;else{g=0;while(1)if((c[j+(g<<4)+12>>2]|0)==(h|0))break;else g=g+1|0}g=Sd(k,i,c[j+(g<<4)>>2]|0)|0;c[d+120>>2]=g;a[d+144>>0]=a[o+8>>0]|0;if(g|0?(l=Sk(d,g)|0,l|0):0){da=l;Ra=ea;return da|0}i=c[o+12>>2]|0;if(!i)g=0;else{j=X+24|0;b[j>>1]=0;c[W>>2]=m;c[W+4>>2]=125;c[W+8>>2]=126;c[W+12>>2]=0;c[W+24>>2]=X;h=i+24|0;g=d+208|0;U=(c[g>>2]|0)+(c[h>>2]|0)|0;c[g>>2]=U;g=c[(c[d>>2]|0)+120>>2]|0;if((g|0)>=(U|0)){_j(W,i)|0;g=c[W>>2]|0;U=g+208|0;c[U>>2]=(c[U>>2]|0)-(c[h>>2]|0);U=i+4|0;c[U>>2]=c[U>>2]|b[j>>1]&-32752&65535;if((c[X+20>>2]|0)>0)g=1;else g=(c[g+36>>2]|0)>0&1}else{c[n>>2]=g;cd(d,41637,n);g=1}}h=c[o+28>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=g;Ra=ea;return da|0}q=d+36|0;r=d+12|0;s=Y+16|0;t=Y+24|0;u=X+4|0;v=X+24|0;w=W+4|0;x=W+8|0;y=W+12|0;z=W+24|0;A=X+8|0;B=X+20|0;C=W+4|0;D=W+8|0;E=W+12|0;F=W+24|0;G=W+4|0;H=W+8|0;I=W+12|0;J=W+24|0;K=W+4|0;L=W+8|0;M=W+12|0;N=W+24|0;O=W+4|0;P=W+8|0;Q=W+12|0;R=W+24|0;S=W+4|0;T=W+8|0;U=W+12|0;p=W+24|0;while(1){g=c[h+8>>2]|0;if((g|0?(Kk(d,g,X),c[q>>2]|0):0)?(V=c[r>>2]|0,V|0):0){g=V;da=76;break}k=h+12|0;g=c[k>>2]|0;if(!g)g=0;else{j=bd(d,0,g,f)|0;if(!j){g=1;da=76;break}g=Sk(d,j)|0;if(g|0){da=76;break}g=Y;i=g+80|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(i|0));c[Y>>2]=1;c[s>>2]=c[k>>2];c[t>>2]=j;c[u>>2]=Y;j=c[h+16>>2]|0;do if(!j)da=26;else{k=e[v>>1]|0;b[v>>1]=k&28655;g=c[X>>2]|0;c[W>>2]=g;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=X;l=j+24|0;i=g+208|0;o=(c[i>>2]|0)+(c[l>>2]|0)|0;c[i>>2]=o;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)>=(o|0)){_j(W,j)|0;g=c[W>>2]|0;o=g+208|0;c[o>>2]=(c[o>>2]|0)-(c[l>>2]|0);o=b[v>>1]|0;n=j+4|0;c[n>>2]=c[n>>2]|o&-32752&65535;b[v>>1]=k&36880|o&65535;if((c[B>>2]|0)<=0)if((c[g+36>>2]|0)<1){da=26;break}else{g=1;break}}else{c[Z>>2]=i;cd(g,41637,Z)}g=1}while(0);a:do if((da|0)==26){da=0;k=c[h+20>>2]|0;if((k|0)!=0?(c[k>>2]|0)>0:0){j=0;while(1){l=c[k+4+(j*20|0)>>2]|0;if(l){m=e[v>>1]|0;b[v>>1]=m&28655;g=c[X>>2]|0;c[W>>2]=g;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=X;n=l+24|0;i=g;fa=i+208|0;o=(c[fa>>2]|0)+(c[n>>2]|0)|0;c[fa>>2]=o;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(o|0)){da=33;break}_j(W,l)|0;g=c[W>>2]|0;fa=g+208|0;c[fa>>2]=(c[fa>>2]|0)-(c[n>>2]|0);fa=b[v>>1]|0;o=l+4|0;c[o>>2]=c[o>>2]|fa&-32752&65535;b[v>>1]=m&36880|fa&65535;if((c[B>>2]|0)>0)break;if((c[g+36>>2]|0)>=1){g=2;break a}}j=j+1|0;if((j|0)>=(c[k>>2]|0)){g=0;break a}}if((da|0)==33){da=0;c[ba>>2]=i;cd(g,41637,ba)}g=2}else g=0}while(0);o=c[h+28>>2]|0;if(o){c[o+20>>2]=Y;c[A>>2]=o;b[v>>1]=512;n=c[o>>2]|0;b:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;g=512;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=X;k=l+24|0;i=g;ga=i+208|0;fa=(c[ga>>2]|0)+(c[k>>2]|0)|0;c[ga>>2]=fa;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(fa|0)){da=45;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break b}}m=m+1|0;if((m|0)>=(c[n>>2]|0)){da=49;break b}}if((da|0)==45){da=0;c[ca>>2]=i;cd(g,41637,ca)}g=2}else{g=512;da=49}while(0);c:do if((da|0)==49){da=0;n=c[o+8>>2]|0;d:do if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;while(1){l=c[n+4+(m*20|0)>>2]|0;if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[O>>2]=125;c[P>>2]=126;c[Q>>2]=0;c[R>>2]=X;k=l+24|0;i=g;fa=i+208|0;ga=(c[fa>>2]|0)+(c[k>>2]|0)|0;c[fa>>2]=ga;i=c[(c[i>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){da=56;break}_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)>=1){g=2;break c}}m=m+1|0;if((m|0)>=(c[n>>2]|0))break d}if((da|0)==56){da=0;c[_>>2]=i;cd(g,41637,_)}g=2;break c}while(0);l=c[o+12>>2]|0;e:do if(l){j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[K>>2]=125;c[L>>2]=126;c[M>>2]=0;c[N>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;do if((i|0)>=(ga|0)){_j(W,l)|0;i=c[W>>2]|0;g=i+208|0;c[g>>2]=(c[g>>2]|0)-(c[k>>2]|0);g=b[v>>1]|0;ga=l+4|0;c[ga>>2]=c[ga>>2]|g&-32752&65535;g=(j&36880|g&65535)&65535;b[v>>1]=g;if((c[B>>2]|0)>0)break;if((c[i+36>>2]|0)<1)break e;else{g=1;break c}}else{c[$>>2]=i;cd(g,41637,$)}while(0);g=1;break c}while(0);l=c[o+4>>2]|0;do if(!l)g=0;else{j=g&65535;b[v>>1]=j&28655;g=c[X>>2]|0;c[W>>2]=g;c[S>>2]=125;c[T>>2]=126;c[U>>2]=0;c[p>>2]=X;k=l+24|0;i=g+208|0;ga=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=ga;i=c[(c[g>>2]|0)+120>>2]|0;if((i|0)<(ga|0)){c[aa>>2]=i;cd(g,41637,aa);g=1;break}_j(W,l)|0;g=c[W>>2]|0;ga=g+208|0;c[ga>>2]=(c[ga>>2]|0)-(c[k>>2]|0);ga=b[v>>1]|0;fa=l+4|0;c[fa>>2]=c[fa>>2]|ga&-32752&65535;b[v>>1]=j&36880|ga&65535;if((c[B>>2]|0)>0){g=1;break}g=(c[g+36>>2]|0)>0&1}while(0)}while(0);b[v>>1]=0}c[u>>2]=0}h=c[h+36>>2]|0;if(!((g|0)==0&(h|0)!=0)){da=76;break}}if((da|0)==76){Ra=ea;return g|0}return 0}function mo(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;if(!f)return;p=c[f>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[f+4+(h*20|0)+4>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[f+4+(j*20|0)+4>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function no(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;if(!f)return;p=c[f+4>>2]|0;if((p|0)<=0)return;m=((g|0)!=0)<<31>>31;n=b+272|0;o=e+4|0;if(!g){h=0;do{a:do if((c[(c[f>>2]|0)+(h<<3)>>2]|0)==0?(k=c[n>>2]|0,k|0):0){i=n;b=k;while(1){j=b+12|0;if(!(c[b>>2]|0))break;b=c[j>>2]|0;if(!b)break a;else i=j}c[i>>2]=c[j>>2];c[j>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);h=h+1|0}while((h|0)<(p|0));return}j=0;do{k=c[(c[f>>2]|0)+(j<<3)>>2]|0;if(k){i=a[k>>0]|0;b=(d[208+(i&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(b|0)!=0)){h=g;i=k;do{i=i+1|0;h=h+1|0;q=a[i>>0]|0;b=(d[208+(q&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(b|0)!=0))}}else b=m;b:do if((b|0)==0?(l=c[n>>2]|0,l|0):0){h=n;b=l;while(1){i=b+12|0;if((c[b>>2]|0)==(k|0))break;b=c[i>>2]|0;if(!b)break b;else h=i}c[h>>2]=c[i>>2];c[i>>2]=c[e>>2];c[e>>2]=b;c[o>>2]=(c[o>>2]|0)+1}while(0);j=j+1|0}while((j|0)<(p|0));return}function oo(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;d=c[b+12>>2]|0;if(d|0)_j(a,d)|0;b=c[b+28>>2]|0;if(!b)return;do{$j(a,c[b+8>>2]|0)|0;d=c[b+16>>2]|0;if(d|0)_j(a,d)|0;d=c[b+20>>2]|0;a:do if(d|0?(h=c[d>>2]|0,(h|0)>0):0){f=h;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break a;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);g=c[b+28>>2]|0;if(g|0){d=c[g>>2]|0;b:do if(d|0?(i=c[d>>2]|0,(i|0)>0):0){f=i;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break b;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+8>>2]|0;c:do if(d|0?(j=c[d>>2]|0,(j|0)>0):0){f=j;d=d+4|0;while(1){e=c[d>>2]|0;if(e|0?_j(a,e)|0:0)break c;if((f|0)>1){f=f+-1|0;d=d+20|0}else break}}while(0);d=c[g+12>>2]|0;if(d|0)_j(a,d)|0;d=c[g+4>>2]|0;if(d|0)_j(a,d)|0}b=c[b+36>>2]|0}while((b|0)!=0);return}function po(b,f,g,h,i){b=b|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;z=Ra;Ra=Ra+16|0;j=z;if(!h)k=0;else k=(Eu(h)|0)&1073741823;if(!g)n=0;else n=(Eu(g)|0)&1073741823;x=c[(c[b>>2]|0)+32>>2]|0;c[j>>2]=h;y=dd(x,49613,j)|0;if(!y){y=7;Ra=z;return y|0}w=(Eu(y)|0)&1073741823;u=(i|0)==0;v=u?k:w;u=u?h:y;h=n+1+(G(c[f+4>>2]|0,w)|0)|0;i=((h|0)<0)<<31>>31;t=(x|0)==0;a:do if(t){s=Sv(h|0,i|0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](h)|0;l=30;break}j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;i=59064;k=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;l=31}else l=31}else j=7}else j=7}else{if(c[x+272>>2]|0){if(a[x+81>>0]|0){j=7;break}}else{do if(!(0>>0|(0==(i|0)?(e[x+276>>1]|0)>>>0>>0:0))){k=x+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}k=x+296|0;j=c[k>>2]|0;if(!j){j=x+292|0;break}else{c[k>>2]=c[j>>2];l=x+284|0;c[l>>2]=(c[l>>2]|0)+1;l=30;break a}}else j=x+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(x,h,i)|0;l=30}while(0);if((l|0)==30)if(!j)j=7;else l=31;do if((l|0)==31){gw(j+n|0,0,(h>>>0>n>>>0?h-n|0:0)|0)|0;ew(j|0,g|0,n|0)|0;l=c[f>>2]|0;b:do if(l|0){s=g;o=x+480|0;p=x+304|0;q=x+308|0;r=x+300|0;if(t)while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{r=g+i|0;fw(j+(h+g)|0,j+r|0,n-r|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{r=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}l=c[f>>2]|0;if(!l)break b;else n=k}while(1){k=c[l+12>>2]|0;if(!k)m=l;else{h=k;i=l;do{i=(c[h+4>>2]|0)>>>0>(c[i+4>>2]|0)>>>0?h:i;h=c[h+12>>2]|0}while((h|0)!=0);m=i}if((l|0)==(m|0))k=f;else{if((k|0)==(m|0))k=l;else while(1){i=c[k+12>>2]|0;if((i|0)==(m|0))break;else k=i}k=k+12|0}c[k>>2]=c[m+12>>2];g=c[m+4>>2]|0;l=(a[880+(d[g>>0]|0)>>0]&70)==0;h=l?w:v;g=g-s|0;k=m+8|0;i=c[k>>2]|0;if((i|0)==(h|0))k=n;else{i=g+i|0;fw(j+(h+g)|0,j+i|0,n-i|0)|0;k=h-(c[k>>2]|0)+n|0;a[j+k>>0]=0}ew(j+g|0,(l?y:u)|0,h|0)|0;do if(!(c[o>>2]|0)){n=m;if((c[p>>2]|0)>>>0<=n>>>0?(c[q>>2]|0)>>>0>n>>>0:0){c[m>>2]=c[r>>2];c[r>>2]=m;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(x,m);while(0);l=c[f>>2]|0;if(!l)break;else n=k}}while(0);if((yc(c[b>>2]|0,j,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}if(!t){if(c[x+480>>2]|0){Xd(x,j);j=0;break}f=j;if((c[x+304>>2]|0)>>>0<=f>>>0?(c[x+308>>2]|0)>>>0>f>>>0:0){x=x+300|0;c[j>>2]=c[x>>2];c[x>>2]=j;j=0;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}else{x=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);y=j;Ra=z;return y|0}return 0}function qo(b){b=b|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;o=c[b>>2]|0;i=c[b+8>>2]|0;do if(i|0){j=i+20|0;e=c[j>>2]|0;if((e|0)<832317811)switch(e|0){case 770837923:{m=3;break}default:{}}else switch(e|0){case 832317811:{m=3;break}default:{}}if((m|0)==3)kc(i)|0;g=c[i>>2]|0;kb(g,i);h=c[i+4>>2]|0;f=i+8|0;e=c[f>>2]|0;if(!h)c[g+4>>2]=e;else{c[h+8>>2]=e;e=c[f>>2]|0}if(e|0)c[e+4>>2]=h;c[j>>2]=1443283912;c[i>>2]=0;if(g|0){if(c[g+480>>2]|0){Xd(g,i);break}m=i;if((c[g+304>>2]|0)>>>0<=m>>>0?(c[g+308>>2]|0)>>>0>m>>>0:0){m=g+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+228>>2]|0;do if(e|0){if(o|0?c[o+480>>2]|0:0){Vi(o,e);break}l=e+32|0;m=(c[l>>2]|0)+-1|0;c[l>>2]=m;if(!m)Vi(o,e)}while(0);g=b+232|0;e=c[g>>2]|0;if(e|0){h=(o|0)==0;i=o+480|0;j=o+304|0;k=o+308|0;l=o+300|0;do{c[g>>2]=c[e+20>>2];f=c[e+36>>2]|0;if(f|0)ni(o,f);f=c[e+40>>2]|0;if(f|0)ri(o,f);f=c[e+16>>2]|0;do if(f|0){if(!h){if(c[i>>2]|0){Xd(o,f);break}m=f;if((c[j>>2]|0)>>>0<=m>>>0?(c[k>>2]|0)>>>0>m>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=e+55|0;a:do if(((d[m>>0]|d[m+1>>0]<<8)&16)!=0?(n=c[e+32>>2]|0,(n|0)!=0):0){do if(!h){if(!(c[i>>2]|0)){f=n;if((c[j>>2]|0)>>>0>f>>>0)break;if((c[k>>2]|0)>>>0<=f>>>0)break;c[n>>2]=c[l>>2];c[l>>2]=n}else Xd(o,n);f=e;m=53;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);m=52;break}else{m=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);m=52;break}}else m=52;while(0);if((m|0)==52)if(h)m=58;else{f=e;m=53}do if((m|0)==53){m=0;if(c[i>>2]|0){Xd(o,f);break}p=e;if((c[j>>2]|0)>>>0<=p>>>0?(c[k>>2]|0)>>>0>p>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e}else{e=f;m=58}}while(0);do if((m|0)==58)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[g>>2]|0}while((e|0)!=0)}n=c[b+236>>2]|0;do if(n|0){Xi(o,c[n+28>>2]|0);e=c[n>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[n+12>>2]|0;if(e|0)ni(o,e);e=c[n+16>>2]|0;b:do if(e){l=e+4|0;f=c[e>>2]|0;c:do if((c[l>>2]|0)>0){h=o+480|0;i=o+304|0;j=o+308|0;k=o+300|0;if(!o){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[l>>2]|0))break c}}g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(o,f);break}p=f;if((c[i>>2]|0)>>>0<=p>>>0?(c[j>>2]|0)>>>0>p>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;f=c[e>>2]|0}while((g|0)<(c[l>>2]|0))}while(0);d:do if(f){do if(o|0){g=o+480|0;if(!(c[g>>2]|0)){h=f;if((c[o+304>>2]|0)>>>0>h>>>0)break;if((c[o+308>>2]|0)>>>0<=h>>>0)break;p=o+300|0;c[f>>2]=c[p>>2];c[p>>2]=f}else Xd(o,f);f=g;g=e;m=118;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);m=116;break}else{m=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);m=116;break}}else m=116;while(0);if((m|0)==116)if(o){f=o+480|0;g=e;m=118}do if((m|0)==118){if(!(c[f>>2]|0)){e=g;if((c[o+304>>2]|0)>>>0>e>>>0){e=g;break}if((c[o+308>>2]|0)>>>0<=e>>>0){e=g;break}p=o+300|0;c[g>>2]=c[p>>2];c[p>>2]=g}else Xd(o,g);e=n;m=129;break b}while(0);if(e)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);m=128;break}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);m=128;break}else m=128}else m=128;while(0);if((m|0)==128)if(!o)e=n;else{e=n;m=129}if((m|0)==129){if(c[o+480>>2]|0){Xd(o,e);break}p=n;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[n>>2]=c[p>>2];c[p>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+4>>2]|0;do if(e|0){if(o|0){if(c[o+480>>2]|0){Xd(o,e);break}p=e;if((c[o+304>>2]|0)>>>0<=p>>>0?(c[o+308>>2]|0)>>>0>p>>>0:0){p=o+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);ro(o,c[b+272>>2]|0);f=c[b>>2]|0;e=c[b+64>>2]|0;do if(e|0){if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}p=e;if((c[f+304>>2]|0)>>>0<=p>>>0?(c[f+308>>2]|0)>>>0>p>>>0:0){p=f+300|0;c[e>>2]=c[p>>2];c[p>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[b+68>>2]|0;if(e|0)ri(f,e);e=b+24|0;if(!f){a[e>>0]=0;return}p=f+272|0;c[p>>2]=(c[p>>2]|0)-(d[e>>0]|0);a[e>>0]=0;return}function ro(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;e=a+480|0;f=a+304|0;g=a+308|0;h=a+300|0;if(!a){do{d=b;b=c[b+12>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((b|0)!=0);return}do{d=b;b=c[b+12>>2]|0;do if(!(c[e>>2]|0)){i=d;if((c[f>>2]|0)>>>0<=i>>>0?(c[g>>2]|0)>>>0>i>>>0:0){c[d>>2]=c[h>>2];c[h>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else Xd(a,d);while(0)}while((b|0)!=0);return}function so(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=c[b+24>>2]|0;if((a[d>>0]|0)!=-94)return 0;f=d+44|0;if((c[g+12>>2]|0)!=(c[f>>2]|0))return 0;d=(c[b>>2]|0)+272|0;b=c[d>>2]|0;if(!b)return 0;while(1){e=b+12|0;if((c[b>>2]|0)==(f|0))break;b=c[e>>2]|0;if(!b){h=8;break}else d=e}if((h|0)==8)return 0;c[d>>2]=c[e>>2];c[e>>2]=c[g>>2];c[g>>2]=b;h=g+4|0;c[h>>2]=(c[h>>2]|0)+1;return 0}function to(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=Ra;Ra=Ra+32|0;p=q;m=c[a+24>>2]|0;n=c[b+32>>2]|0;if(!n){p=2;Ra=q;return p|0}o=c[n>>2]|0;if((o|0)>0){g=m+12|0;h=m+4|0;f=0;do{a:do if((c[n+8+(f*72|0)+16>>2]|0)==(c[g>>2]|0)?(i=c[n+8+(f*72|0)+8>>2]|0,j=(c[a>>2]|0)+272|0,k=c[j>>2]|0,k|0):0){e=j;d=k;while(1){l=d+12|0;if((c[d>>2]|0)==(i|0))break;d=c[l>>2]|0;if(!d)break a;else e=l}c[e>>2]=c[l>>2];c[l>>2]=c[m>>2];c[m>>2]=d;c[h>>2]=(c[h>>2]|0)+1}while(0);f=f+1|0}while((f|0)<(o|0))}f=b+64|0;d=c[f>>2]|0;if(!d){p=0;Ra=q;return p|0}if((c[d>>2]|0)<=0){p=0;Ra=q;return p|0}b=p+4|0;e=0;do{o=c[d+8+(e<<4)+8>>2]|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;n=c[a>>2]|0;c[p>>2]=n;Kk(n,o,p);$j(a,o)|0;e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0));d=0;Ra=q;return d|0}function uo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;f=d;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;e=L()|0;a=d;c[a>>2]=f;c[a+4>>2]=e;return}function vo(a){a=a|0;var d=0,e=0,f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d){e=0;f=0}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[a>>1]=4;return}else{Pg(d,e,f);return}}function wo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+8|0;c[a>>2]=1;c[a+4>>2]=0;return}function xo(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+8|0;h=e;g=d;f=c[g>>2]|0;g=c[g+4>>2]|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){f=Sv(f|0,g|0,1,0)|0;g=L()|0;h=d;c[h>>2]=f;c[h+4>>2]=g;h=e;c[h>>2]=0;c[h+4>>2]=0}d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){h=d;c[h>>2]=f;c[h+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}function yo(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;f=d+8|0;e=f;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;a=L()|0;c[f>>2]=e;c[f+4>>2]=a;f=d;if(!((c[f>>2]|0)==0&(c[f+4>>2]|0)==0))return;f=d;c[f>>2]=e;c[f+4>>2]=a;return}function zo(a){a=a|0;var d=0,e=0,f=0,g=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))e=Ic(a,24)|0;else e=c[d+16>>2]|0;if(!e)return;g=e;f=c[g>>2]|0;g=c[g+4>>2]|0;d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216)){c[d>>2]=f;c[d+4>>2]=g;b[a>>1]=4}else Pg(d,f,g);g=e;c[g>>2]=0;c[g+4>>2]=0;return}function Ao(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Bo(a){a=a|0;var d=0,e=0,f=0.0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d){Ra=l;return}i=d+8|0;h=c[i>>2]|0;i=c[i+4>>2]|0;e=d;c[e>>2]=h;c[e+4>>2]=i;e=d+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>1){d=Sv(d|0,e|0,-1,-1)|0;f=(+(h>>>0)+4294967296.0*+(i|0))/(+(d>>>0)+4294967296.0*+(L()|0));d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=f;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=f;b[e>>1]=8;Ra=l;return}else{d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216))b[e>>1]=1;else Dg(d);g[j>>3]=0.0;g[k>>3]=+g[j>>3];if(!(+g[j>>3]==+g[k>>3])){Ra=l;return}g[d>>3]=0.0;b[e>>1]=8;Ra=l;return}}function Co(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Do(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;if(!d)return;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Eo(a){a=a|0;var d=0,e=0.0,f=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i+8|0;h=i;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d){Ra=i;return}j=d+8|0;d=d+16|0;e=(+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0))/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));d=c[a>>2]|0;a=d+8|0;if(!(b[a>>1]&9216))b[a>>1]=1;else Dg(d);g[f>>3]=e;g[h>>3]=+g[f>>3];if(!(+g[f>>3]==+g[h>>3])){Ra=i;return}g[d>>3]=e;b[a>>1]=8;Ra=i;return}function Fo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+8|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Go(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0;f=c[d+8>>2]|0;if(!(b[f+8>>1]&8192))i=Ic(d,24)|0;else i=c[f+16>>2]|0;if(!i)return;f=i;do if((c[f>>2]|0)==0&(c[f+4>>2]|0)==0){f=c[h>>2]|0;h=e[f+8>>1]|0;do if(!(h&4)){if(h&8|0){j=Mg(+g[f>>3])|0;k=L()|0;l=13;break}if(!(h&18)){h=i+8|0;c[h>>2]=0;c[h+4>>2]=0;break}else{j=Ng(a[f+10>>0]|0,c[f+12>>2]|0,c[f+16>>2]|0)|0;k=L()|0;l=13;break}}else{k=f;j=c[k>>2]|0;k=c[k+4>>2]|0;l=13}while(0);if((l|0)==13?(l=i+8|0,c[l>>2]=j,c[l+4>>2]=k,!((k|0)<0|(k|0)==0&j>>>0<1)):0)break;c[d+20>>2]=1;yc(c[d>>2]|0,49664,-1,1,-1)|0}while(0);j=i;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;l=i;c[l>>2]=j;c[l+4>>2]=k;return}function Ho(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))l=Ic(a,24)|0;else l=c[d+16>>2]|0;if(!l)return;e=l+8|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if(!((e|0)>0|(e|0)==0&d>>>0>0))return;g=l;f=c[g>>2]|0;g=c[g+4>>2]|0;m=Wv(f|0,g|0,d|0,e|0)|0;L()|0;if(!m){f=l+16|0;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}n=((m|0)<0)<<31>>31;h=Yv(d|0,e|0,m|0,n|0)|0;f=Tv(f|0,g|0,h|0,L()|0)|0;g=L()|0;h=m+1|0;i=((h|0)<0)<<31>>31;j=Yv(f|0,g|0,h|0,i|0)|0;k=L()|0;e=l+16|0;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)<(k|0)|(e|0)==(k|0)&d>>>0>>0){f=Wv(d|0,e|0,h|0,i|0)|0;f=Sv(f|0,L()|0,1,0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}else{l=Sv(f|0,g|0,1,0)|0;g=L()|0;f=Tv(d|0,e|0,j|0,k|0)|0;f=Wv(f|0,L()|0,m|0,n|0)|0;f=Sv(l|0,g|0,f|0,L()|0)|0;g=L()|0;d=c[a>>2]|0;e=d+8|0;if(!(b[e>>1]&9216)){a=d;c[a>>2]=f;c[a+4>>2]=g;b[e>>1]=4;return}else{Pg(d,f,g);return}}}function Io(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,24)|0;else d=c[d+16>>2]|0;a=d+16|0;d=a;d=Sv(c[d>>2]|0,c[d+4>>2]|0,1,0)|0;e=L()|0;c[a>>2]=d;c[a+4>>2]=e;return}function Jo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,8)|0;else e=c[e+16>>2]|0;if(!e)return;uc(c[e>>2]|0);f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0){d=e+4|0;c[d>>2]=(c[d>>2]|0)+1;return}e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ko(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Lo(a){a=a|0;var d=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=c[d>>2]|0;if(!d)return;Dc(a,d);return}function Mo(a,d,e){a=a|0;d=d|0;e=e|0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,8)|0;else d=c[d+16>>2]|0;if(!d)return;e=d+4|0;a=(c[e>>2]|0)+-1|0;c[e>>2]=a;if(a|0)return;uc(c[d>>2]|0);c[d>>2]=0;return}function No(f,h,i){f=f|0;h=h|0;i=i|0;var j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;o=x+8|0;p=x;h=c[f+8>>2]|0;if(!(b[h+8>>1]&8192))r=Ic(f,16)|0;else r=c[h+16>>2]|0;if(!r){Ra=x;return}q=i+4|0;m=c[q>>2]|0;n=m+8|0;l=b[n>>1]&31;h=d[816+l>>0]|0;if((l|16|0)==18){h=a[m+10>>0]|0;j=m+16|0;l=m+12|0;if(!(Lg(c[j>>2]|0,o,c[l>>2]|0,h)|0))h=b[n>>1]|0;else{if(!(Og(c[j>>2]|0,p,c[l>>2]|0,h)|0)){o=p;p=c[o+4>>2]|0;h=m;c[h>>2]=c[o>>2];c[h+4>>2]=p;h=4}else{g[m>>3]=+g[o>>3];h=8}h=b[n>>1]&-3|h;b[n>>1]=h}h=d[816+(h&31)>>0]|0}a:do switch((h&255)<<24>>24){case 1:{h=c[q>>2]|0;j=e[h+8>>1]|0;if(j&4|0){v=h;u=c[v+4>>2]|0;v=c[v>>2]|0;w=27;break a}if(j&8|0){v=Mg(+g[h>>3])|0;u=L()|0;w=27;break a}if(j&18|0){v=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;u=L()|0;w=27}break}case 2:{h=c[q>>2]|0;j=e[h+8>>1]|0;do if(!(j&8)){if(j&4|0){q=h;k=+((c[q>>2]|0)>>>0)+4294967296.0*+(c[q+4>>2]|0);break}if(!(j&18))k=0.0;else k=+Kg(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)}else k=+g[h>>3];while(0);h=~~k>>>0;j=+t(k)>=1.0?(k>0.0?~~+H(+s(k/4294967296.0),4294967295.0)>>>0:~~+F((k-+(~~k>>>0))/4294967296.0)>>>0):0;if(k==+(h>>>0)+4294967296.0*+(j|0)){u=j;v=h;w=27}break}default:{}}while(0);if((w|0)==27?!((u|0)<0|(u|0)==0&v>>>0<1):0){q=r;q=Sv(c[q>>2]|0,c[q+4>>2]|0,1,0)|0;w=L()|0;p=r;c[p>>2]=q;c[p+4>>2]=w;if(!((v|0)==(q|0)&(u|0)==(w|0))){Ra=x;return}w=tc(c[i>>2]|0)|0;c[r+8>>2]=w;if(w|0){Ra=x;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=x;return}if(a[h+82>>0]|0){Ra=x;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;f=h+272|0;c[f>>2]=(c[f>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=x;return}c[h+12>>2]=7;Ra=x;return}c[f+20>>2]=1;yc(c[f>>2]|0,44153,-1,1,-1)|0;Ra=x;return}function Oo(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,0)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function Po(a){a=a|0;return}function Qo(d,e,f){d=d|0;e=e|0;f=f|0;e=c[d+8>>2]|0;if(!(b[e+8>>1]&8192))e=Ic(d,16)|0;else e=c[e+16>>2]|0;if(!e)return;e=e+8|0;if(c[e>>2]|0)return;f=tc(c[f>>2]|0)|0;c[e>>2]=f;if(f|0)return;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else{Dg(e);e=c[d>>2]|0}c[d+20>>2]=7;e=c[e+32>>2]|0;f=e+81|0;if(a[f>>0]|0)return;if(a[e+82>>0]|0)return;a[f>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;d=e+272|0;c[d>>2]=(c[d>>2]|0)+1;e=c[e+236>>2]|0;if(!e)return;c[e+12>>2]=7;return}function Ro(a){a=a|0;var d=0,e=0;d=c[a+8>>2]|0;if(!(b[d+8>>1]&8192))d=Ic(a,16)|0;else d=c[d+16>>2]|0;if(!d)return;d=d+8|0;e=c[d>>2]|0;if(!e)return;Dc(a,e);uc(c[d>>2]|0);c[d>>2]=0;return}function So(d,e,f){d=d|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+56|0;q=r+48|0;o=r;if(_o(d,e,f,o)|0){Ra=r;return}l=o+40|0;do if(!(a[l>>0]|0)){n=o+42|0;if(a[n>>0]|0){e=c[o+8>>2]|0;if((e+4713|0)>>>0<=14712){i=c[o+12>>2]|0;j=c[o+16>>2]|0;k=e;m=6}}else{i=1;j=1;k=2e3;m=6}if((m|0)==6?(a[o+41>>0]|0)==0:0){e=(i|0)<3;f=k+(e<<31>>31)|0;h=(+(j+2+((f|0)/-100|0)+((f|0)/400|0)+((((e?i+12|0:i)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;j=o;c[j>>2]=f;c[j+4>>2]=e;a[l>>0]=1;j=o+43|0;if(!(a[j>>0]|0))break;i=G(c[o+20>>2]|0,36e5)|0;i=((c[o+24>>2]|0)*6e4|0)+i|0;h=+g[o+32>>3]*1.0e3;f=Sv(~~h>>>0|0,(+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0)|0,f|0,e|0)|0;f=Sv(f|0,L()|0,i|0,((i|0)<0)<<31>>31|0)|0;e=L()|0;i=o;c[i>>2]=f;c[i+4>>2]=e;i=o+44|0;if(!(a[i>>0]|0))break;m=(c[o+28>>2]|0)*6e4|0;f=Tv(f|0,e|0,m|0,((m|0)<0)<<31>>31|0)|0;e=L()|0;c[o>>2]=f;c[o+4>>2]=e;a[n>>0]=0;a[j>>0]=0;a[i>>0]=0;break}e=o;f=e+48|0;do{c[e>>2]=0;e=e+4|0}while((e|0)<(f|0));a[o+46>>0]=1;f=0;e=0}else{e=o;f=c[e>>2]|0;e=c[e+4>>2]|0}while(0);h=(+(f>>>0)+4294967296.0*+(e|0))/864.0e5;e=c[d>>2]|0;f=e+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(e);g[p>>3]=h;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){Ra=r;return}g[e>>3]=h;b[f>>1]=8;Ra=r;return}function To(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;k=Ra;Ra=Ra+176|0;j=k+152|0;h=k+104|0;i=k;if(_o(b,d,e,h)|0){Ra=k;return}g=h+42|0;a:do if(!(a[g>>0]|0)){do if(a[h+40>>0]|0){e=h;d=c[e>>2]|0;e=c[e+4>>2]|0;if(e>>>0>108096|(e|0)==108096&d>>>0>275971583){d=h;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[h+46>>0]=1;e=0;f=0;d=0;break a}else{e=Sv(d|0,e|0,432e5,0)|0;e=Wv(e|0,L()|0,864e5,0)|0;L()|0;d=~~((+(e|0)+-1867216.25)/36524.25);d=e+1525+d+((d|0)/-4|0)|0;e=~~((+(d|0)+-122.1)/365.25);d=d-((((e&32767)*36525|0)>>>0)/100|0)|0;f=~~(+(d|0)/30.6001);d=d-~~(+(f|0)*30.6001)|0;c[h+16>>2]=d;f=((f|0)<14?-1:-13)+f|0;c[h+12>>2]=f;e=((f|0)>2?-4716:-4715)+e|0;c[h+8>>2]=e;break}}else{c[h+8>>2]=2e3;c[h+12>>2]=1;c[h+16>>2]=1;d=1;f=1;e=2e3}while(0);a[g>>0]=1}else{e=c[h+8>>2]|0;f=c[h+12>>2]|0;d=c[h+16>>2]|0}while(0);c[j>>2]=e;c[j+4>>2]=f;c[j+8>>2]=d;Cb(100,i,49994,j)|0;if((yc(c[b>>2]|0,i,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=k;return}function Uo(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,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+176|0;o=p+152|0;m=p+104|0;n=p;if(_o(b,d,e,m)|0){Ra=p;return}l=m+43|0;if(!(a[l>>0]|0)){d=m+40|0;do if(!(a[d>>0]|0)){if(a[m+42>>0]|0){e=c[m+8>>2]|0;if((e+4713|0)>>>0<=14712){h=c[m+12>>2]|0;i=c[m+16>>2]|0;j=e;k=8}}else{h=1;i=1;j=2e3;k=8}if((k|0)==8?(a[m+41>>0]|0)==0:0){e=(h|0)<3;k=j+(e<<31>>31)|0;f=(+(i+2+((k|0)/-100|0)+((k|0)/400|0)+((((e?h+12|0:h)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~f>>>0;e=+t(f)>=1.0?(f>0.0?~~+H(+s(f/4294967296.0),4294967295.0)>>>0:~~+F((f-+(~~f>>>0))/4294967296.0)>>>0):0;j=m;c[j>>2]=k;c[j+4>>2]=e;a[d>>0]=1;d=k;break}d=m;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[m+46>>0]=1;d=0;e=0}else{e=m;d=c[e>>2]|0;e=c[e+4>>2]|0}while(0);j=Sv(d|0,e|0,432e5,0)|0;j=Zv(j|0,L()|0,864e5,0)|0;L()|0;f=+(j|0)/1.0e3;j=~~f;e=(j|0)/3600|0;c[m+20>>2]=e;k=(G(e,-3600)|0)+j|0;d=(k|0)/60|0;c[m+24>>2]=d;f=f-+(j|0)+ +((G(d,-60)|0)+k|0);g[m+32>>3]=f;a[m+41>>0]=0;a[l>>0]=1}else{f=+g[m+32>>3];e=c[m+20>>2]|0;d=c[m+24>>2]|0}c[o>>2]=e;c[o+4>>2]=d;c[o+8>>2]=~~f;Cb(100,n,50009,o)|0;if((yc(c[b>>2]|0,n,-1,1,-1)|0)==18){c[b+20>>2]=18;yc(c[b>>2]|0,31223,-1,1,0)|0}Ra=p;return}function Vo(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0;i=Ra;Ra=Ra+176|0;h=i+152|0;e=i+104|0;f=i;if(_o(a,b,d,e)|0){Ra=i;return}dp(e);l=c[e+12>>2]|0;k=c[e+16>>2]|0;j=c[e+20>>2]|0;b=c[e+24>>2]|0;d=~~+g[e+32>>3];c[h>>2]=c[e+8>>2];c[h+4>>2]=l;c[h+8>>2]=k;c[h+12>>2]=j;c[h+16>>2]=b;c[h+20>>2]=d;Cb(100,f,50024,h)|0;if((yc(c[a>>2]|0,f,-1,1,-1)|0)==18){c[a+20>>2]=18;yc(c[a>>2]|0,31223,-1,1,0)|0}Ra=i;return}function Wo(d,f,h){d=d|0;f=f|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0.0;$=Ra;Ra=Ra+240|0;Y=$+232|0;X=$+224|0;W=$+216|0;V=$+208|0;U=$+200|0;T=$+192|0;S=$+184|0;_=$+176|0;Z=$+168|0;R=$+160|0;Q=$+152|0;O=$+104|0;P=$;if(!f){Ra=$;return}i=c[h>>2]|0;if(!i){Ra=$;return}j=b[i+8>>1]|0;if((j&514)==514?(a[i+10>>0]|0)==1:0)N=c[i+16>>2]|0;else M=6;do if((M|0)==6)if(!(j&1)){N=Gg(i,1)|0;break}else{Ra=$;return}while(0);if(!N){Ra=$;return}if(_o(d,f+-1|0,h+4|0,O)|0){Ra=$;return}i=c[d>>2]|0;k=c[i+32>>2]|0;j=0;h=1;f=0;a:while(1){b:do switch(a[N+j>>0]|0){case 0:break a;case 37:{j=j+1|0;switch(a[N+j>>0]|0){case 37:case 119:break b;case 87:case 83:case 77:case 109:case 72:case 100:{h=Sv(h|0,f|0,1,0)|0;f=L()|0;break b}case 102:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 106:{h=Sv(h|0,f|0,3,0)|0;f=L()|0;break b}case 89:{h=Sv(h|0,f|0,8,0)|0;f=L()|0;break b}case 74:case 115:{h=Sv(h|0,f|0,50,0)|0;f=L()|0;break b}default:{M=86;break a}}}default:{}}while(0);h=Sv(h|0,f|0,1,0)|0;j=j+1|0;f=L()|0}if((M|0)==86){Ra=$;return}do if(f>>>0<0|(f|0)==0&h>>>0<100)i=P;else{K=c[k+108>>2]|0;J=((K|0)<0)<<31>>31;if(f>>>0>J>>>0|(f|0)==(J|0)&h>>>0>K>>>0){c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=$;return}f=aw(0,h|0,32)|0;h=L()|0;c:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))M=32}else{do if(!(h>>>0>0|((h|0)==0?f>>>0>(e[k+276>>1]|0)>>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];M=k+284|0;c[M>>2]=(c[M>>2]|0)+1;M=33;break c}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;M=32}while(0);if((M|0)==32){i=_d(k,f,h)|0;M=33}if((M|0)==33){if(i|0)break;i=c[d>>2]|0}j=i+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(i);i=c[d>>2]|0}c[d+20>>2]=7;i=c[i+32>>2]|0;j=i+81|0;if(a[j>>0]|0){Ra=$;return}if(a[i+82>>0]|0){Ra=$;return}a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;d=i+272|0;c[d>>2]=(c[d>>2]|0)+1;i=c[i+236>>2]|0;if(!i){Ra=$;return}c[i+12>>2]=7;Ra=$;return}while(0);h=O+40|0;K=O+42|0;do if(!(a[h>>0]|0)){if(a[K>>0]|0){j=c[O+8>>2]|0;if((j+4713|0)>>>0<=14712){l=c[O+12>>2]|0;m=c[O+16>>2]|0;n=j;M=47}}else{l=1;m=1;n=2e3;M=47}if((M|0)==47?(a[O+41>>0]|0)==0:0){f=(l|0)<3;j=n+(f<<31>>31)|0;o=(+(m+2+((j|0)/-100|0)+((j|0)/400|0)+((((f?l+12|0:l)*306001|0)+306001|0)/1e4|0)+(((j*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;j=~~o>>>0;f=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;k=O;c[k>>2]=j;c[k+4>>2]=f;a[h>>0]=1;k=O+43|0;if(!(a[k>>0]|0))break;h=G(c[O+20>>2]|0,36e5)|0;h=((c[O+24>>2]|0)*6e4|0)+h|0;o=+g[O+32>>3]*1.0e3;j=Sv(~~o>>>0|0,(+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0)|0,j|0,f|0)|0;j=Sv(j|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;h=O;c[h>>2]=j;c[h+4>>2]=f;h=O+44|0;if(!(a[h>>0]|0))break;E=(c[O+28>>2]|0)*6e4|0;E=Tv(j|0,f|0,E|0,((E|0)<0)<<31>>31|0)|0;I=L()|0;J=O;c[J>>2]=E;c[J+4>>2]=I;a[K>>0]=0;a[k>>0]=0;a[h>>0]=0;break}j=O;f=j+48|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(f|0));a[O+46>>0]=1}while(0);dp(O);D=O+16|0;E=O+32|0;I=O+20|0;C=O+8|0;x=O+24|0;y=O+28|0;z=O+41|0;A=O+43|0;B=O+44|0;J=O+12|0;w=0;j=0;d:while(1){f=a[N+j>>0]|0;e:do switch(f<<24>>24){case 0:break d;case 37:{v=j+1|0;u=a[N+v>>0]|0;do switch(u<<24>>24|0){case 100:{c[Q>>2]=c[D>>2];Cb(3,i+w|0,50054,Q)|0;f=w+2|0;j=v;break e}case 102:{o=+g[E>>3];j=i+w|0;g[R>>3]=o>59.999?59.999:o;Cb(7,j,50059,R)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 72:{c[Z>>2]=c[I>>2];Cb(3,i+w|0,50054,Z)|0;f=w+2|0;j=v;break e}case 106:case 87:{r=O;q=c[r>>2]|0;r=c[r+4>>2]|0;j=c[C>>2]|0;h=c[I>>2]|0;l=c[x>>2]|0;m=c[y>>2]|0;o=+g[E>>3];f=a[z>>0]|0;n=a[A>>0]|0;p=a[B>>0]|0;if(a[K>>0]|0)if((j+4713|0)>>>0>14712){k=0;j=0}else M=63;else{j=2e3;M=63}if((M|0)==63){M=0;if(!(f<<24>>24)){k=j+-1|0;aa=(+(((k|0)/-100|0)+431+((k|0)/400|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~aa>>>0;j=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;if(n<<24>>24){l=(l*6e4|0)+(G(h,36e5)|0)|0;aa=o*1.0e3;h=+t(aa)>=1.0?(aa>0.0?~~+H(+s(aa/4294967296.0),4294967295.0)>>>0:~~+F((aa-+(~~aa>>>0))/4294967296.0)>>>0):0;n=p<<24>>24==0;m=m*6e4|0;m=Tv(0,0,m|0,((m|0)<0)<<31>>31|0)|0;p=L()|0;l=Sv(~~aa>>>0|0,h|0,l|0,((l|0)<0)<<31>>31|0)|0;p=Sv(l|0,L()|0,(n?0:m)|0,(n?0:p)|0)|0;k=Sv(p|0,L()|0,k|0,j|0)|0;j=L()|0}}else{k=0;j=0}}f=Sv(q|0,r|0,432e5,0)|0;h=L()|0;j=Wv(Tv(f|0,h|0,k|0,j|0)|0,L()|0,864e5,0)|0;L()|0;if(u<<24>>24==87){f=Wv(f|0,h|0,864e5,0)|0;f=Zv(f|0,L()|0,7,0)|0;L()|0;c[_>>2]=(7-f+j|0)/7|0;Cb(3,i+w|0,50054,_)|0;f=w+2|0;j=v;break e}else{c[S>>2]=j+1;Cb(4,i+w|0,50066,S)|0;f=w+3|0;j=v;break e}}case 74:{j=i+w|0;u=O;g[T>>3]=(+((c[u>>2]|0)>>>0)+4294967296.0*+(c[u+4>>2]|0))/864.0e5;Cb(20,j,34086,T)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 109:{c[U>>2]=c[J>>2];Cb(3,i+w|0,50054,U)|0;f=w+2|0;j=v;break e}case 77:{c[V>>2]=c[x>>2];Cb(3,i+w|0,50054,V)|0;f=w+2|0;j=v;break e}case 115:{j=i+w|0;q=O;q=Sv(Wv(c[q>>2]|0,c[q+4>>2]|0,1e3,0)|0,L()|0,-413362496,-50)|0;r=L()|0;u=W;c[u>>2]=q;c[u+4>>2]=r;Cb(30,j,32524,W)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}case 83:{c[X>>2]=~~+g[E>>3];Cb(3,i+w|0,50054,X)|0;f=w+2|0;j=v;break e}case 119:{f=O;f=Zv(Wv(Sv(c[f>>2]|0,c[f+4>>2]|0,1296e5,0)|0,L()|0,864e5,0)|0,L()|0,7,0)|0;L()|0;a[i+w>>0]=f+48;f=w+1|0;j=v;break e}case 89:{j=i+w|0;c[Y>>2]=c[C>>2];Cb(5,j,50071,Y)|0;if(!j)j=0;else j=(Eu(j)|0)&1073741823;f=j+w|0;j=v;break e}default:{a[i+w>>0]=37;f=w+1|0;j=v;break e}}while(0)}default:{a[i+w>>0]=f;f=w+1|0}}while(0);w=f;j=j+1|0}a[i+w>>0]=0;if((yc(c[d>>2]|0,i,-1,1,(i|0)==(P|0)?-1:116)|0)!=18){Ra=$;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=$;return}function Xo(a,b,c){a=a|0;b=b|0;c=c|0;Uo(a,0,0);return}function Yo(a,b,c){a=a|0;b=b|0;c=c|0;Vo(a,0,0);return}function Zo(a,b,c){a=a|0;b=b|0;c=c|0;To(a,0,0);return}function _o(e,f,h,i){e=e|0;f=f|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0.0,n=0,o=0,p=0,q=0,r=0,u=0.0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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;ya=Ra;Ra=Ra+96|0;p=ya+72|0;xa=ya+64|0;va=ya+56|0;wa=ya+8|0;q=ya;l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!f){l=(c[e+12>>2]|0)+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(n=c[j+72>>2]|0,(n|0)!=0):0)j=Xa[n&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,xa)|0;u=+g[xa>>3]*864.0e5;e=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;xa=l;c[xa>>2]=~~u>>>0;c[xa+4>>2]=e}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}xa=l;c[xa>>2]=0;c[xa+4>>2]=0;c[i>>2]=0;c[i+4>>2]=0;i=1;Ra=ya;return i|0}while(0);xa=i;c[xa>>2]=k;c[xa+4>>2]=j;if(!((j|0)>0|(j|0)==0&k>>>0>0)){i=1;Ra=ya;return i|0}a[i+40>>0]=1;i=0;Ra=ya;return i|0}k=c[h>>2]|0;j=b[k+8>>1]|0;if(((d[816+(j&31)>>0]|0)+-1|0)>>>0<2){j=j&65535;do if(!(j&8)){if(j&4|0){aa=k;m=+((c[aa>>2]|0)>>>0)+4294967296.0*+(c[aa+4>>2]|0);break}if(!(j&18))m=0.0;else m=+Kg(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)}else m=+g[k>>3];while(0);g[i+32>>3]=m;a[i+41>>0]=1;if(m>=0.0&m<5373484.5){u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1}}else{if(!k){i=1;Ra=ya;return i|0}if((j&514)==514?(a[k+10>>0]|0)==1:0)n=c[k+16>>2]|0;else v=25;do if((v|0)==25)if(!(j&1)){n=Gg(k,1)|0;break}else{i=1;Ra=ya;return i|0}while(0);if(!n){i=1;Ra=ya;return i|0}k=(a[n>>0]|0)==45;j=k?n+1|0:n;c[p>>2]=xa;c[p+4>>2]=va;c[p+8>>2]=wa;a:do if((bp(j,49795,p)|0)==3){j=j+10|0;while(1){aa=a[j>>0]|0;if(aa<<24>>24==84?1:(a[880+(aa&255)>>0]&1)!=0)j=j+1|0;else break}do if(ap(j,i)|0)if(!(a[j>>0]|0)){a[i+43>>0]=0;break}else{v=39;break a}while(0);a[i+40>>0]=0;a[i+42>>0]=1;aa=c[xa>>2]|0;c[i+8>>2]=k?0-aa|0:aa;c[i+12>>2]=c[va>>2];c[i+16>>2]=c[wa>>2];if(a[i+44>>0]|0)$o(i)}else v=39;while(0);b:do if((v|0)==39?ap(n,i)|0:0){aa=a[n>>0]|0;j=(d[208+(aa&255)>>0]|0)+-110|0;if(!(aa<<24>>24==0|(j|0)!=0)){k=49791;l=n;do{l=l+1|0;k=k+1|0;aa=a[l>>0]|0;j=(d[208+(aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(aa<<24>>24==0|(j|0)!=0))}c:do if(!j){j=c[e+12>>2]|0;if((a[(c[j+104>>2]|0)+((c[e+16>>2]|0)*20|0)>>0]|0)==64){c[e+20>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=56;break}l=j+56|0;j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;do if((k|0)==0&(j|0)==0){j=c[c[(c[e>>2]|0)+32>>2]>>2]|0;if((c[j>>2]|0)>1?(o=c[j+72>>2]|0,(o|0)!=0):0)j=Xa[o&255](j,l)|0;else{j=Xa[c[j+64>>2]&255](j,p)|0;u=+g[p>>3]*864.0e5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=l;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$}if(!j){j=l;k=c[j>>2]|0;j=c[j+4>>2]|0;break}else{aa=l;c[aa>>2]=0;c[aa+4>>2]=0;aa=i;c[aa>>2]=0;c[aa+4>>2]=0;break c}}while(0);aa=i;c[aa>>2]=k;c[aa+4>>2]=j;if((j|0)>0|(j|0)==0&k>>>0>0){a[i+40>>0]=1;break b}}else v=56;while(0);if((v|0)==56?Lg(n,q,(Eu(n)|0)&1073741823,1)|0:0){m=+g[q>>3];g[i+32>>3]=m;a[i+41>>0]=1;if(!(m>=0.0&m<5373484.5))break;u=m*864.0e5+.5;$=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;aa=i;c[aa>>2]=~~u>>>0;c[aa+4>>2]=$;a[i+40>>0]=1;break}i=1;Ra=ya;return i|0}while(0)}d:do if((f|0)>1){x=e+12|0;y=e+16|0;z=i+41|0;A=i+40|0;B=i+42|0;C=e+20|0;D=i+43|0;E=i+44|0;I=i+32|0;J=i+24|0;K=i+20|0;M=i+45|0;N=i+8|0;O=i+12|0;P=i+16|0;j=i+46|0;Q=wa+40|0;R=wa+42|0;S=wa+41|0;T=wa+46|0;U=wa+8|0;V=wa+12|0;W=wa+16|0;X=wa+43|0;Y=wa+20|0;Z=wa+24|0;_=wa+32|0;$=wa+44|0;aa=wa+28|0;w=1;e:while(1){l=h+(w<<2)|0;n=c[l>>2]|0;k=b[n+8>>1]|0;if((k&514)==514?(a[n+10>>0]|0)==1:0){q=c[n+16>>2]|0;k=n}else if(!(k&1)){q=Gg(n,1)|0;k=c[l>>2]|0}else{q=0;k=n}l=b[k+8>>1]|0;if(!(l&2)){if(!(l&17))v=72}else if((a[k+10>>0]|0)!=1&(l&17)==0)v=72;if((v|0)==72){v=0;Fg(k,1)|0}if(!q){j=1;v=197;break}c[xa>>2]=1;k=a[q>>0]|0;l=k&255;f:do switch(a[208+l>>0]|0){case 108:{if(!(k<<24>>24==0|(l|32|0)!=108)){n=49894;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}else{$o(i);r=cp(i,e,xa)|0;q=L()|0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193;break f}}case 117:{o=k<<24>>24==0;if(!(o|(l|32|0)!=117)){k=49904;l=q;do{l=l+1|0;k=k+1|0;r=a[l>>0]|0;n=(d[208+(r&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(n|0)!=0));if(!n)v=87}else v=87;if((v|0)==87?(0,a[z>>0]|0):0){m=+g[I>>3]*1.0e3+21086676.0e7;g[va>>3]=m;if(!(m>=0.0&m<4642690608.0e5)){v=193;break f}a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;r=+t(m)>=1.0?(m>0.0?~~+H(+s(m/4294967296.0),4294967295.0)>>>0:~~+F((m-+(~~m>>>0))/4294967296.0)>>>0):0;v=i;c[v>>2]=~~m>>>0;c[v+4>>2]=r;a[A>>0]=1;a[z>>0]=0;c[xa>>2]=0;v=192;break f}if(!o){n=49914;k=q;do{k=k+1|0;n=n+1|0;v=a[k>>0]|0;l=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(l|0)!=0));if(l|0){v=193;break f}}if((a[(c[(c[x>>2]|0)+104>>2]|0)+((c[y>>2]|0)*20|0)>>0]|0)==64){c[C>>2]=1;yc(c[e>>2]|0,49827,-1,1,-1)|0;v=193;break f}if(a[M>>0]|0){c[xa>>2]=0;v=192;break f}$o(i);k=cp(i,e,xa)|0;l=L()|0;if(!(c[xa>>2]|0)){q=i;q=Tv(c[q>>2]|0,c[q+4>>2]|0,k|0,l|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=cp(i,e,xa)|0;v=Tv(k|0,l|0,v|0,L()|0)|0;r=L()|0;q=i;q=Sv(v|0,r|0,c[q>>2]|0,c[q+4>>2]|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r}a[M>>0]=1;v=193;break}case 119:{g:do if(!(k<<24>>24)){k=49918;v=105}else{o=q;k=49918;l=8;p=7;while(1){o=o+1|0;if(l>>>0<=1)break g;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=105;break g}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}sa=l&255;ba=n;v=108}while(0);if((v|0)==105){sa=0;ba=a[208+(d[k>>0]|0)>>0]|0;v=108}if((v|0)==108?(0,(sa|0)!=(ba&255|0)):0){v=193;break f}v=q+8|0;if((Lg(v,va,(Eu(v)|0)&1073741823,1)|0)!=0?(u=+g[va>>3],ua=~~u,u<7.0&((ua|0)>-1&u==+(ua|0))):0){dp(i);a[E>>0]=0;a[A>>0]=0;$o(i);q=i;r=c[q>>2]|0;q=c[q+4>>2]|0;n=Sv(r|0,q|0,1296e5,0)|0;n=Wv(n|0,L()|0,864e5,0)|0;n=Zv(n|0,L()|0,7,0)|0;v=L()|0;k=((ua|0)<0)<<31>>31;o=(v|0)>(k|0)|(v|0)==(k|0)&n>>>0>ua>>>0;l=Sv(n|0,v|0,-7,-1)|0;p=L()|0;v=Tv(ua|0,k|0,(o?l:n)|0,(o?p:v)|0)|0;v=Yv(v|0,L()|0,864e5,0)|0;q=Sv(v|0,L()|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;c[xa>>2]=0;v=192}else v=193;break}case 115:{h:do if(!(k<<24>>24)){k=49927;v=116}else{o=q;k=49927;l=9;p=8;while(1){o=o+1|0;if(l>>>0<=1)break h;k=k+1|0;l=a[o>>0]|0;if(!(l<<24>>24)){v=116;break h}l=a[208+(l&255)>>0]|0;n=a[208+(d[k>>0]|0)>>0]|0;if(l<<24>>24!=n<<24>>24)break;else{l=p;p=p+-1|0}}ta=l&255;ca=n;v=119}while(0);if((v|0)==116){ta=0;ca=a[208+(d[k>>0]|0)>>0]|0;v=119}if((v|0)==119?(v=0,(ta|0)!=(ca&255|0)):0){v=193;break f}l=a[B>>0]|0;do if(a[A>>0]|0){k=q+9|0;if(!(l<<24>>24)){n=i;l=c[n>>2]|0;n=c[n+4>>2]|0;if(n>>>0>108096|(n|0)==108096&l>>>0>275971583){l=i;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[j>>0]=1;l=k;break}else{v=Sv(l|0,n|0,432e5,0)|0;v=Wv(v|0,L()|0,864e5,0)|0;L()|0;q=~~((+(v|0)+-1867216.25)/36524.25);q=v+1525+q+((q|0)/-4|0)|0;v=~~((+(q|0)+-122.1)/365.25);q=q-((((v&32767)*36525|0)>>>0)/100|0)|0;r=~~(+(q|0)/30.6001);c[P>>2]=q-~~(+(r|0)*30.6001);r=((r|0)<14?-1:-13)+r|0;c[O>>2]=r;c[N>>2]=((r|0)>2?-4716:-4715)+v;v=129;break}}else l=k}else{if(l<<24>>24){l=q+9|0;break}if(!(a[D>>0]|0)){v=193;break f}c[N>>2]=2e3;c[O>>2]=1;c[P>>2]=1;k=q+9|0;v=129}while(0);if((v|0)==129){a[B>>0]=1;l=k}a[D>>0]=1;c[J>>2]=0;c[K>>2]=0;g[I>>3]=0.0;a[z>>0]=0;a[E>>0]=0;a[A>>0]=0;q=a[l>>0]|0;p=d[208+(q&255)>>0]|0;k=p+-109|0;q=q<<24>>24==0;if(!(q|(k|0)!=0)){n=49937;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-121|0;if(!(q|(k|0)!=0)){n=49943;o=l;do{o=o+1|0;n=n+1|0;v=a[o>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[O>>2]=1;c[P>>2]=1;c[xa>>2]=0;v=192;break f}k=p+-100|0;if(!(q|(k|0)!=0)){n=49948;do{l=l+1|0;n=n+1|0;v=a[l>>0]|0;k=(d[208+(v&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(v<<24>>24==0|(k|0)!=0))}if(!k){c[xa>>2]=0;v=192}else v=193;break}case 57:case 56:case 55:case 54:case 53:case 52:case 51:case 50:case 49:case 48:case 45:case 43:{l=1;i:while(1){k=a[q+l>>0]|0;switch(k<<24>>24){case 58:case 0:break i;default:{}}if(a[880+(k&255)>>0]&1)break;l=l+1|0}k=q+l|0;if(!(Lg(q,va,l,1)|0)){v=149;break e}l=a[k>>0]|0;if(l<<24>>24==58){k=((d[q>>0]|0)+-48|0)>>>0<10?q:q+1|0;l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));if(!(ap(k,wa)|0)){do if(!(a[Q>>0]|0)){if(a[R>>0]|0){k=c[U>>2]|0;if((k+4713|0)>>>0<=14712){da=c[V>>2]|0;ea=c[W>>2]|0;fa=k;v=156}}else{da=1;ea=1;fa=2e3;v=156}if((v|0)==156?(0,(a[S>>0]|0)==0):0){l=(da|0)<3;k=fa+(l<<31>>31)|0;u=(+(ea+2+((k|0)/-100|0)+((k|0)/400|0)+((((l?da+12|0:da)*306001|0)+306001|0)/1e4|0)+(((k*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;k=~~u>>>0;l=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[Q>>0]=1;if(!(a[X>>0]|0))break;v=G(c[Y>>2]|0,36e5)|0;v=((c[Z>>2]|0)*6e4|0)+v|0;u=+g[_>>3]*1.0e3;k=Sv(~~u>>>0|0,(+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0)|0,k|0,l|0)|0;k=Sv(k|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;if(!(a[$>>0]|0))break;v=(c[aa>>2]|0)*6e4|0;k=Tv(k|0,l|0,v|0,((v|0)<0)<<31>>31|0)|0;l=L()|0;v=wa;c[v>>2]=k;c[v+4>>2]=l;a[R>>0]=0;a[X>>0]=0;a[$>>0]=0;break}l=wa;r=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(r|0));a[T>>0]=1;k=0;l=0}else{l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0}while(0);r=Sv(k|0,l|0,-432e5,-1)|0;r=Zv(r|0,L()|0,864e5,0)|0;v=L()|0;p=(a[q>>0]|0)==45;o=Tv(0,0,r|0,v|0)|0;q=L()|0;r=p?o:r;q=p?q:v;v=wa;c[v>>2]=r;c[v+4>>2]=q;$o(i);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=i;q=Sv(c[v>>2]|0,c[v+4>>2]|0,r|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}v=193;break f}if(a[880+(l&255)>>0]&1)do k=k+1|0;while((a[880+(d[k>>0]|0)>>0]&1)!=0);l=(Eu(k)|0)&1073741823;if((l+-3|0)>>>0>7)v=193;else{r=l+-1|0;l=(a[k+r>>0]|32)<<24>>24==115?r:l;$o(i);c[xa>>2]=1;m=+g[va>>3];u=m<0.0?-.5:.5;j:do if((l|0)>0){k:do switch(l|0){case 6:{v=d[k>>0]|0;l=208+v|0;do if((v|32|0)==115){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==101){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==99){l=d[k+3>>0]|0;if((l|32|0)!=111){ga=208+l|0;ha=111;v=170;break}l=d[k+4>>0]|0;if((l|32|0)!=110){ga=208+l|0;ha=110;v=170;break}l=d[k+5>>0]|0;if((l|32|0)==100)v=171;else{ga=208+l|0;ha=100;v=170}}else{ga=l;ha=99;v=170}}else{ga=l;ha=101;v=170}}else{ga=l;ha=115;v=170}while(0);if((v|0)==170?(v=0,(ha|0)==(d[ga>>0]|0)):0)v=171;if((v|0)==171?(v=0,m>-464269060800.0&m<464269060800.0):0){k=0;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==105){l=d[k+2>>0]|0;if((l|32|0)!=110){ia=208+l|0;ja=110;v=178;break}l=d[k+3>>0]|0;if((l|32|0)!=117){ia=208+l|0;ja=117;v=178;break}l=d[k+4>>0]|0;if((l|32|0)!=116){ia=208+l|0;ja=116;v=178;break}k=d[k+5>>0]|0;if((k|32|0)!=101){ia=208+k|0;ja=101;v=178}}else{ia=l;ja=105;v=178}}else{ia=l;ja=109;v=178}while(0);if((v|0)==178?(0,(ja|0)!=(d[ia>>0]|0)):0)break j;if(m>-7737817680.0&m<7737817680.0)k=1;else break j;break}case 4:{v=d[k>>0]|0;l=208+v|0;if((v|32|0)==104){v=d[k+1>>0]|0;l=208+v|0;if((v|32|0)==111){v=d[k+2>>0]|0;l=208+v|0;if((v|32|0)==117){l=d[k+3>>0]|0;if((l|32|0)==114)v=182;else{ka=208+l|0;la=114;v=181}}else{ka=l;la=117;v=181}}else{ka=l;la=111;v=181}}else{ka=l;la=104;v=181}if((v|0)==181?(v=0,(la|0)==(d[ka>>0]|0)):0)v=182;if((v|0)==182?(v=0,m>-128963628.0&m<128963628.0):0){k=2;break k}r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==121){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==101){l=d[k+2>>0]|0;if((l|32|0)!=97){qa=208+l|0;ra=97;v=190;break}k=d[k+3>>0]|0;if((k|32|0)!=114){qa=208+k|0;ra=114;v=190}}else{qa=l;ra=101;v=190}}else{qa=l;ra=121;v=190}while(0);if((v|0)==190?(0,(ra|0)!=(d[qa>>0]|0)):0)break j;if(m>-14713.0&m<14713.0)k=5;else break j;break}case 3:{r=d[k>>0]|0;l=208+r|0;if((r|32|0)==100){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==97){k=d[k+2>>0]|0;if((k|32|0)!=121){ma=208+k|0;na=121;v=184}}else{ma=l;na=97;v=184}}else{ma=l;na=100;v=184}if((v|0)==184?(0,(na|0)!=(d[ma>>0]|0)):0)break j;if(m>-5373485.0&m<5373485.0)k=3;else break j;break}case 5:{r=d[k>>0]|0;l=208+r|0;do if((r|32|0)==109){r=d[k+1>>0]|0;l=208+r|0;if((r|32|0)==111){r=d[k+2>>0]|0;l=208+r|0;if((r|32|0)==110){l=d[k+3>>0]|0;if((l|32|0)!=116){oa=208+l|0;pa=116;v=187;break}k=d[k+4>>0]|0;if((k|32|0)!=104){oa=208+k|0;pa=104;v=187}}else{oa=l;pa=110;v=187}}else{oa=l;pa=111;v=187}}else{oa=l;pa=109;v=187}while(0);if((v|0)==187?(0,(pa|0)!=(d[oa>>0]|0)):0)break j;if(m>-176546.0&m<176546.0)k=4;else break j;break}default:break j}while(0);switch(a[22816+(k*24|0)>>0]|0){case 1:{dp(i);v=~~m;r=(c[O>>2]|0)+v|0;q=(((r|0)>0?-1:-12)+r|0)/12|0;c[N>>2]=q+(c[N>>2]|0);r=(G(q,-12)|0)+r|0;c[O>>2]=r;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}case 2:{v=~~m;dp(i);c[N>>2]=(c[N>>2]|0)+v;a[A>>0]=0;m=m-+(v|0);g[va>>3]=m;break}default:{}}$o(i);u=u+m*+g[22816+(k*24|0)+16>>3];q=+t(u)>=1.0?(u>0.0?~~+H(+s(u/4294967296.0),4294967295.0)>>>0:~~+F((u-+(~~u>>>0))/4294967296.0)>>>0):0;r=i;q=Sv(c[r>>2]|0,c[r+4>>2]|0,~~u>>>0|0,q|0)|0;r=L()|0;v=i;c[v>>2]=q;c[v+4>>2]=r;c[xa>>2]=0}while(0);a[B>>0]=0;a[D>>0]=0;a[E>>0]=0;v=193}break}default:v=193}while(0);if((v|0)==192)v=0;else if((v|0)==193?(v=0,c[xa>>2]|0):0){j=1;v=197;break}w=w+1|0;if((w|0)>=(f|0))break d}if((v|0)==149){i=1;Ra=ya;return i|0}else if((v|0)==197){Ra=ya;return j|0}}else j=i+46|0;while(0);$o(i);if(!(a[j>>0]|0)){xa=c[i+4>>2]|0;Ra=ya;return (xa>>>0>108096|(xa|0)==108096&(c[i>>2]|0)>>>0>275971583)&1|0}else{i=1;Ra=ya;return i|0}return 0}function $o(b){b=b|0;var d=0,e=0,f=0,h=0,i=0,j=0,k=0,l=0.0;j=b+40|0;if(a[j>>0]|0)return;k=b+42|0;if(a[k>>0]|0){h=c[b+8>>2]|0;if((h+4713|0)>>>0<=14712){d=c[b+12>>2]|0;e=c[b+16>>2]|0;f=h;i=4}}else{d=1;e=1;f=2e3;i=4}if((i|0)==4?(a[b+41>>0]|0)==0:0){i=(d|0)<3;h=f+(i<<31>>31)|0;l=(+(e+2+((h|0)/-100|0)+((h|0)/400|0)+((((i?d+12|0:d)*306001|0)+306001|0)/1e4|0)+(((h*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;d=~~l>>>0;e=+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0;h=b;c[h>>2]=d;c[h+4>>2]=e;a[j>>0]=1;h=b+43|0;if(!(a[h>>0]|0))return;f=G(c[b+20>>2]|0,36e5)|0;f=((c[b+24>>2]|0)*6e4|0)+f|0;l=+g[b+32>>3]*1.0e3;d=Sv(~~l>>>0|0,(+t(l)>=1.0?(l>0.0?~~+H(+s(l/4294967296.0),4294967295.0)>>>0:~~+F((l-+(~~l>>>0))/4294967296.0)>>>0):0)|0,d|0,e|0)|0;d=Sv(d|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;e=L()|0;f=b;c[f>>2]=d;c[f+4>>2]=e;f=b+44|0;if(!(a[f>>0]|0))return;i=(c[b+28>>2]|0)*6e4|0;i=Tv(d|0,e|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;c[b>>2]=i;c[b+4>>2]=j;a[k>>0]=0;a[h>>0]=0;a[f>>0]=0;return}d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));a[b+46>>0]=1;return}function ap(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+48|0;r=t+16|0;h=t+8|0;q=t;p=t+36|0;m=t+32|0;n=t+28|0;o=t+24|0;c[q>>2]=m;c[q+4>>2]=n;if((bp(b,49807,q)|0)!=2){e=1;Ra=t;return e|0}l=b+5|0;if((a[l>>0]|0)==58){c[h>>2]=o;if((bp(b+6|0,49815,h)|0)!=1){e=1;Ra=t;return e|0}h=b+8|0;if((a[h>>0]|0)==46?(i=b+9|0,f=a[i>>0]|0,((f&255)+-48|0)>>>0<10):0){k=0.0;j=1.0;do{k=k*10.0+ +(f<<24>>24)+-48.0;j=j*10.0;i=i+1|0;f=a[i>>0]|0}while(((f&255)+-48|0)>>>0<10);j=k/j}else{j=0.0;i=h}}else{c[o>>2]=0;j=0.0;i=l}a[e+40>>0]=0;a[e+41>>0]=0;a[e+43>>0]=1;c[e+20>>2]=c[m>>2];c[e+24>>2]=c[n>>2];g[e+32>>3]=j+ +(c[o>>2]|0);while(1){f=i+1|0;if(!(a[880+(d[i>>0]|0)>>0]&1))break;else i=f}b=e+28|0;c[b>>2]=0;h=a[i>>0]|0;switch(h<<24>>24){case 45:{h=-1;s=15;break}case 43:{h=1;s=15;break}default:if((h|32)<<24>>24==122){i=0;s=18}else f=0}do if((s|0)==15){c[r>>2]=q;c[r+4>>2]=p;if((bp(f,49819,r)|0)==2){s=G(((c[q>>2]|0)*60|0)+(c[p>>2]|0)|0,h)|0;c[b>>2]=s;f=i+6|0;i=s;s=18;break}e=1;Ra=t;return e|0}while(0);if((s|0)==18){while(1)if(!(a[880+(d[f>>0]|0)>>0]&1))break;else f=f+1|0;a[e+45>>0]=1;h=a[f>>0]|0;f=i}if(h<<24>>24){e=1;Ra=t;return e|0}a[e+44>>0]=(f|0)!=0&1;e=0;Ra=t;return e|0}function bp(e,f,g){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=Ra;Ra=Ra+16|0;n=o;c[n>>2]=g;g=e;e=0;a:while(1){h=(d[f>>0]|0)+208&255;m=d[f+1>>0]|0;k=b[31130+((a[f+2>>0]|0)+-97<<1)>>1]|0;l=a[f+3>>0]|0;if(!(h<<24>>24))h=0;else{j=0;i=h;while(1){i=i+-1<<24>>24;h=a[g>>0]|0;if(((h&255)+-48|0)>>>0>=10){g=11;break a}h=(j*10|0)+-48+(h<<24>>24)|0;g=g+1|0;if(!(i<<24>>24))break;else j=h}}if((h|0)<((m<<24)+-805306368>>24|0)|(h|0)>(k&65535|0)){g=11;break}if(!(l<<24>>24)){g=8;break}if(l<<24>>24!=(a[g>>0]|0)){g=11;break}l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;g=g+1|0;f=f+4|0;e=e+1|0}if((g|0)==8){l=(c[n>>2]|0)+(4-1)&~(4-1);m=c[l>>2]|0;c[n>>2]=l+4;c[m>>2]=h;n=e+1|0;Ra=o;return n|0}else if((g|0)==11){Ra=o;return e|0}return 0}function cp(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0;o=Ra;Ra=Ra+64|0;m=o;n=o+48|0;h=m;f=h+48|0;do{c[h>>2]=c[b>>2];h=h+4|0;b=b+4|0}while((h|0)<(f|0));dp(m);b=m+8|0;f=c[b>>2]|0;if((f+-1971|0)>>>0>66){c[b>>2]=2e3;c[m+12>>2]=1;c[m+16>>2]=1;c[m+20>>2]=0;c[m+24>>2]=0;g[m+32>>3]=0.0;f=2e3;j=0;k=0}else{j=m+32|0;p=+(~~(+g[j>>3]+.5)|0);g[j>>3]=p;p=p*1.0e3;j=~~p>>>0;k=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0}c[m+28>>2]=0;i=m+40|0;a[i>>0]=0;l=m+42|0;h=(a[l>>0]|0)==0;b=h?1:c[m+12>>2]|0;if(!(a[m+41>>0]|0)){q=(b|0)<3;f=(h?2e3:f)+(q<<31>>31)|0;p=(+((h?3:(c[m+16>>2]|0)+2|0)+((f|0)/-100|0)+((f|0)/400|0)+((((q?b+12|0:b)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;f=~~p>>>0;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;h=m;c[h>>2]=f;c[h+4>>2]=b;a[i>>0]=1;i=m+43|0;if(a[i>>0]|0){h=G(c[m+20>>2]|0,36e5)|0;h=((c[m+24>>2]|0)*6e4|0)+h|0;f=Sv(j|0,k|0,f|0,b|0)|0;f=Sv(f|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;h=m;c[h>>2]=f;c[h+4>>2]=b;h=m+44|0;if(!(a[h>>0]|0))j=m;else{j=m;c[j>>2]=f;c[j+4>>2]=b;a[l>>0]=0;a[i>>0]=0;a[h>>0]=0;j=m}}else j=m}else{h=m;f=h+48|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(f|0));a[m+46>>0]=1;j=m;f=0;b=0}i=Wv(f|0,b|0,1e3,0)|0;L()|0;c[n>>2]=i+-413362496;i=Ha(n|0)|0;if((i|0)==0|(c[7390]|0)!=0){c[d+20>>2]=1;yc(c[d>>2]|0,49952,-1,1,-1)|0;c[e>>2]=1;e=0;q=0;K(e|0);Ra=o;return q|0}b=c[i+16>>2]|0;f=c[i+20>>2]|0;h=b+1|0;if((f+6613|0)>>>0>14712){b=0;f=0}else{d=c[i>>2]|0;d=Yv(d|0,((d|0)<0)<<31>>31|0,1e3,0)|0;q=L()|0;n=G(c[i+8>>2]|0,36e5)|0;m=(h|0)<3;f=f+1900+(m<<31>>31)|0;p=(+(((f|0)/-100|0)+((c[i+12>>2]|0)+2)+((f|0)/400|0)+((((m?b+13|0:h)*306001|0)+306001|0)/1e4|0)+(((f*36525|0)+172251900|0)/100|0)|0)+-1524.5)*864.0e5;b=+t(p)>=1.0?(p>0.0?~~+H(+s(p/4294967296.0),4294967295.0)>>>0:~~+F((p-+(~~p>>>0))/4294967296.0)>>>0):0;f=((c[i+4>>2]|0)*6e4|0)+n|0;f=Sv(d|0,q|0,f|0,((f|0)<0)<<31>>31|0)|0;b=Sv(f|0,L()|0,~~p>>>0|0,b|0)|0;f=L()|0}c[e>>2]=0;q=j;q=Tv(b|0,f|0,c[q>>2]|0,c[q+4>>2]|0)|0;e=L()|0;K(e|0);Ra=o;return q|0}function dp(b){b=b|0;var d=0,e=0,f=0,h=0,i=0.0;d=b+42|0;if(!(a[d>>0]|0)){do if(a[b+40>>0]|0){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;if(f>>>0>108096|(f|0)==108096&e>>>0>275971583){d=b;e=d+48|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));d=b+46|0;break}else{f=Sv(e|0,f|0,432e5,0)|0;f=Wv(f|0,L()|0,864e5,0)|0;L()|0;h=~~((+(f|0)+-1867216.25)/36524.25);h=f+1525+h+((h|0)/-4|0)|0;f=~~((+(h|0)+-122.1)/365.25);h=h-((((f&32767)*36525|0)>>>0)/100|0)|0;e=~~(+(h|0)/30.6001);c[b+16>>2]=h-~~(+(e|0)*30.6001);e=((e|0)<14?-1:-13)+e|0;c[b+12>>2]=e;c[b+8>>2]=((e|0)>2?-4716:-4715)+f;break}}else{c[b+8>>2]=2e3;c[b+12>>2]=1;c[b+16>>2]=1}while(0);a[d>>0]=1}d=b+43|0;if(a[d>>0]|0)return;$o(b);e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,432e5,0)|0;e=Zv(e|0,L()|0,864e5,0)|0;L()|0;i=+(e|0)/1.0e3;e=~~i;h=(e|0)/3600|0;c[b+20>>2]=h;h=(G(h,-3600)|0)+e|0;f=(h|0)/60|0;c[b+24>>2]=f;i=i-+(e|0)+ +((G(f,-60)|0)+h|0);g[b+32>>3]=i;a[b+41>>0]=0;a[d>>0]=1;return}function ep(a){a=a|0;var b=0,d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;b=lu(a+8|0)|0;if(!b){c[d>>2]=a;Db(7,50076,d);d=0;Ra=e;return d|0}else{d=b;c[d>>2]=a;c[d+4>>2]=((a|0)<0)<<31>>31;d=b+8|0;Ra=e;return d|0}return 0}function fp(a){a=a|0;mu(a+-8|0);return}function gp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a=a+-8|0;d=ou(a,b+8|0)|0;if(!d){c[e>>2]=c[a>>2];c[e+4>>2]=b;Db(7,50114,e);e=0;Ra=f;return e|0}else{e=d;c[e>>2]=b;c[e+4>>2]=((b|0)<0)<<31>>31;e=d+8|0;Ra=f;return e|0}return 0}function hp(a){a=a|0;return c[a+-8>>2]|0}function ip(a){a=a|0;return a+7&-8|0}function jp(a){a=a|0;return 0}function kp(a){a=a|0;return}function lp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));a=(c[7374]|0)==0;c[14811]=a&1;b=c[7376]|0;c[14812]=a&(b|0)!=0?b:0;c[14800]=10;c[14810]=1;return 0}function mp(a){a=a|0;var b=0;a=59188;b=a+100|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(b|0));return}function np(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;i=((c[14811]|0)*52|0)+68|0;h=Sv(i|0,((i|0)<0)<<31>>31|0,-1,-1)|0;g=L()|0;if(g>>>0>0|(g|0)==0&h>>>0>2147483390){e=0;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](i)|0;if(!f){e=0;return e|0}}else{f=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){j=0;return j|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}gw(f|0,0,i|0)|0;if(!(c[14811]|0))g=59188;else{c[f+80>>2]=10;g=f+68|0}h=g+20|0;i=g+34|0;if(!(b[i>>1]|0)){b[i>>1]=1;c[g+44>>2]=h;c[g+48>>2]=h}c[f>>2]=g;c[f+8>>2]=a;c[f+12>>2]=d;c[f+16>>2]=a+32+d;j=(e|0)!=0;c[f+20>>2]=j&1;wp(f);if(j){c[f+24>>2]=10;e=g+8|0;j=c[e>>2]|0;c[e>>2]=j+10;c[g+12>>2]=-10-j+10+(c[g+4>>2]|0);c[f+4>>2]=g+16}else c[f+4>>2]=f+40;if(c[f+52>>2]|0){j=f;return j|0}up(f);j=0;return j|0}function op(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[a+20>>2]|0))return;e=c[a>>2]|0;d=a+28|0;g=e+4|0;f=(c[g>>2]|0)+(b-(c[d>>2]|0))|0;c[g>>2]=f;c[e+12>>2]=f+10-(c[e+8>>2]|0);c[d>>2]=b;c[a+32>>2]=((b*9|0)>>>0)/10|0;xp(a);return}function pp(a){a=a|0;return c[a+48>>2]|0}function qp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[(c[a+56>>2]|0)+(((b>>>0)%((c[a+52>>2]|0)>>>0)|0)<<2)>>2]|0;a:do if(e|0){f=e;while(1){if((c[f+8>>2]|0)==(b|0))break;e=c[f+16>>2]|0;if(!e)break a;else f=e}e=f+24|0;a=c[e>>2]|0;if(!a){d=f;return d|0}d=c[f+28>>2]|0;c[d+24>>2]=a;c[(c[e>>2]|0)+28>>2]=d;c[e>>2]=0;d=(c[f+20>>2]|0)+44|0;c[d>>2]=(c[d>>2]|0)+-1;d=f;return d|0}while(0);if(!d){d=0;return d|0}d=Ap(a,b,d)|0;return d|0}function rp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[a>>2]|0;if((d|0)==0?(c[e+16>>2]|0)>>>0<=(c[e+4>>2]|0)>>>0:0){d=e+44|0;c[b+28>>2]=e+20;e=c[d>>2]|0;c[b+24>>2]=e;c[e+28>>2]=b;c[d>>2]=b;b=a+44|0;c[b>>2]=(c[b>>2]|0)+1;return}d=c[b+20>>2]|0;a=(c[d+56>>2]|0)+((((c[b+8>>2]|0)>>>0)%((c[d+52>>2]|0)>>>0)|0)<<2)|0;while(1){f=c[a>>2]|0;e=f+16|0;if((f|0)==(b|0))break;else a=e}c[a>>2]=c[e>>2];f=d+48|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b);return}function sp(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=c[a+52>>2]|0;h=a+56|0;d=(c[h>>2]|0)+(((d>>>0)%(g>>>0)|0)<<2)|0;while(1){f=c[d>>2]|0;if((f|0)==(b|0))break;else d=f+16|0}f=b+16|0;c[d>>2]=c[f>>2];c[b+8>>2]=e;d=(c[h>>2]|0)+(((e>>>0)%(g>>>0)|0)<<2)|0;c[f>>2]=c[d>>2];c[d>>2]=b;d=a+36|0;if((c[d>>2]|0)>>>0>=e>>>0)return;c[d>>2]=e;return}function tp(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+36|0;d=c[k>>2]|0;if(d>>>0>>0)return;l=a+52|0;e=c[l>>2]|0;if((d-b|0)>>>0>>0){f=(b>>>0)%(e>>>0)|0;i=(d>>>0)%(e>>>0)|0}else{i=e>>>1;f=i;i=i+-1|0}j=a+56|0;h=a+48|0;while(1){d=(c[j>>2]|0)+(f<<2)|0;e=c[d>>2]|0;if(e|0)do{do if((c[e+8>>2]|0)>>>0>=b>>>0){c[h>>2]=(c[h>>2]|0)+-1;c[d>>2]=c[e+16>>2];a=e+24|0;g=c[a>>2]|0;if(!g){zp(e);break}else{m=c[e+28>>2]|0;c[m+24>>2]=g;c[(c[a>>2]|0)+28>>2]=m;c[a>>2]=0;g=(c[e+20>>2]|0)+44|0;c[g>>2]=(c[g>>2]|0)+-1;zp(e);break}}else d=e+16|0;while(0);e=c[d>>2]|0}while((e|0)!=0);if((f|0)==(i|0))break;f=((f+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}c[k>>2]=b+-1;return}function up(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;j=c[a>>2]|0;k=a+48|0;a:do if(c[k>>2]|0){b=c[a+36>>2]|0;l=a+52|0;d=c[l>>2]|0;if(b>>>0>>0){e=0;h=(b>>>0)%(d>>>0)|0}else{h=d>>>1;e=h;h=h+-1|0}i=a+56|0;while(1){g=(c[i>>2]|0)+(e<<2)|0;b=c[g>>2]|0;if(b|0)do{c[k>>2]=(c[k>>2]|0)+-1;c[g>>2]=c[b+16>>2];d=b+24|0;f=c[d>>2]|0;if(!f)zp(b);else{m=c[b+28>>2]|0;c[m+24>>2]=f;c[(c[d>>2]|0)+28>>2]=m;c[d>>2]=0;f=(c[b+20>>2]|0)+44|0;c[f>>2]=(c[f>>2]|0)+-1;zp(b)}b=c[g>>2]|0}while((b|0)!=0);if((e|0)==(h|0))break a;e=((e+1|0)>>>0)%((c[l>>2]|0)>>>0)|0}}while(0);l=j+4|0;m=(c[l>>2]|0)-(c[a+28>>2]|0)|0;c[l>>2]=m;l=j+8|0;b=(c[l>>2]|0)-(c[a+24>>2]|0)|0;c[l>>2]=b;c[j+12>>2]=m+10-b;xp(a);b=c[a+64>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+56>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{m=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{m=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function vp(a){a=a|0;var b=0,d=0;if(!(c[a+20>>2]|0))return;b=(c[a>>2]|0)+4|0;d=c[b>>2]|0;c[b>>2]=0;xp(a);c[b>>2]=d;return}function wp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;e=a+52|0;h=c[e>>2]<<1;h=h>>>0>256?h:256;f=Wb(h<<2,0)|0;if(!f)return;g=c[e>>2]|0;d=a+56|0;if(g|0){b=0;do{a=c[(c[d>>2]|0)+(b<<2)>>2]|0;if(a|0)do{k=a+16|0;j=a;a=c[k>>2]|0;i=f+((((c[j+8>>2]|0)>>>0)%(h>>>0)|0)<<2)|0;c[k>>2]=c[i>>2];c[i>>2]=j}while((a|0)!=0);b=b+1|0}while(b>>>0>>0)}qb(c[d>>2]|0);c[d>>2]=f;c[e>>2]=h;return}function xp(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=c[a>>2]|0;d=f+48|0;e=f+16|0;f=f+4|0;a:do if((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0)do{g=c[d>>2]|0;if(b[g+14>>1]|0)break a;h=g+24|0;i=c[g+28>>2]|0;c[i+24>>2]=c[h>>2];c[(c[h>>2]|0)+28>>2]=i;c[h>>2]=0;h=(c[g+20>>2]|0)+44|0;c[h>>2]=(c[h>>2]|0)+-1;yp(g,1)}while((c[e>>2]|0)>>>0>(c[f>>2]|0)>>>0);while(0);if(c[a+48>>2]|0)return;d=a+64|0;e=c[d>>2]|0;if(!e)return;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}c[a+60>>2]=0;c[d>>2]=0;return}function yp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;f=c[a+20>>2]|0;d=(c[f+56>>2]|0)+((((c[a+8>>2]|0)>>>0)%((c[f+52>>2]|0)>>>0)|0)<<2)|0;while(1){g=c[d>>2]|0;e=g+16|0;if((g|0)==(a|0))break;else d=e}c[d>>2]=c[e>>2];g=f+48|0;c[g>>2]=(c[g>>2]|0)+-1;if(!b)return;zp(a);return}function zp(a){a=a|0;var d=0,e=0;e=c[a+20>>2]|0;a:do if(!(b[a+12>>1]|0)){d=c[a>>2]|0;if(d|0){a=d;do if((c[14816]|0)>>>0<=a>>>0)if((c[14817]|0)>>>0>a>>>0){c[14979]=(c[14979]|0)+-1;c[d>>2]=c[14819];c[14819]=d;d=(c[14820]|0)+1|0;c[14820]=d;c[14821]=(d|0)<(c[14815]|0)&1;break a}else{a=Wa[c[29352>>2]&127](d)|0;break}else a=Wa[c[29352>>2]&127](d)|0;while(0);c[14980]=(c[14980]|0)-a;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{a=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}}else{d=e+60|0;c[a+16>>2]=c[d>>2];c[d>>2]=a}while(0);e=c[e+4>>2]|0;c[e>>2]=(c[e>>2]|0)+-1;return}function Ap(a,d,e){a=a|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;m=c[a>>2]|0;q=a+48|0;j=c[q>>2]|0;g=c[a+44>>2]|0;i=j-g|0;if((e|0)==1){if(i>>>0>=(c[m+12>>2]|0)>>>0){d=0;return d|0}if(i>>>0>=(c[a+32>>2]|0)>>>0){d=0;return d|0}if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(g>>>0>>0&(c[e>>2]|0)!=0){d=0;return d|0}}p=a+52|0;if(j>>>0>=(c[p>>2]|0)>>>0)wp(a);k=c[a+20>>2]|0;do if((k|0)!=0?(h=c[m+48>>2]|0,(b[h+14>>1]|0)==0):0){if(((c[q>>2]|0)+1|0)>>>0<(c[a+28>>2]|0)>>>0){if((c[14814]|0)!=0?((c[a+12>>2]|0)+(c[a+8>>2]|0)|0)<=(c[14813]|0):0)e=59284;else e=59072;if(!(c[e>>2]|0)){r=22;break}}g=h+20|0;i=c[g>>2]|0;l=h+8|0;e=(c[i+56>>2]|0)+((((c[l>>2]|0)>>>0)%((c[i+52>>2]|0)>>>0)|0)<<2)|0;while(1){s=c[e>>2]|0;j=s+16|0;if((s|0)==(h|0))break;else e=j}c[e>>2]=c[j>>2];e=i+48|0;c[e>>2]=(c[e>>2]|0)+-1;e=h+24|0;i=c[h+28>>2]|0;c[i+24>>2]=c[e>>2];c[(c[e>>2]|0)+28>>2]=i;c[e>>2]=0;i=c[g>>2]|0;s=i+44|0;c[s>>2]=(c[s>>2]|0)+-1;if((c[i+16>>2]|0)==(c[a+16>>2]|0)){f=m+16|0;c[f>>2]=k-(c[i+20>>2]|0)+(c[f>>2]|0);f=l;break}else{zp(h);r=22;break}}else r=22;while(0);if((r|0)==22){m=a+60|0;e=c[m>>2]|0;do if(!e){if(((c[q>>2]|0)==0?(n=c[14812]|0,n|0):0)?(o=a+28|0,(c[o>>2]|0)>>>0>=3):0){if((n|0)>0){j=a+16|0;e=c[j>>2]|0;g=((e|0)<0)<<31>>31;h=Yv(e|0,g|0,n|0,((n|0)<0)<<31>>31|0)|0;i=L()|0}else{h=Yv(n|0,((n|0)<0)<<31>>31|0,-1024,-1)|0;i=L()|0;j=a+16|0;g=c[j>>2]|0;e=g;g=((g|0)<0)<<31>>31}e=Yv(e|0,g|0,c[o>>2]|0,0)|0;s=L()|0;o=(i|0)>(s|0)|(i|0)==(s|0)&h>>>0>e>>>0;e=o?e:h;s=Sv(e|0,(o?s:i)|0,-1,-1)|0;o=L()|0;do if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](e)|0;break}h=Wa[c[29356>>2]&127](e)|0;if((c[14985]|0)>>>0>>0)c[14985]=e;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(g){e=Wa[c[29352>>2]&127](g)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}else g=0}else g=0;while(0);c[a+64>>2]=g;if(!g)e=c[m>>2]|0;else{e=Wa[c[29352>>2]&127](g)|0;i=c[j>>2]|0;e=(e|0)/(i|0)|0;j=c[a+8>>2]|0;k=G(e+-1|0,i)|0;h=g;l=c[m>>2]|0;while(1){s=l;l=h+j|0;c[l>>2]=h;c[l+4>>2]=l+32;b[l+12>>1]=1;b[l+14>>1]=0;c[l+16>>2]=s;c[l+28>>2]=0;e=e+-1|0;if(!e)break;else h=h+i|0}e=g+(k+j)|0;c[m>>2]=e}if(e|0){f=e;r=47;break}}h=c[a+16>>2]|0;if((c[14813]|0)>=(h|0)?(f=c[14819]|0,(f|0)!=0):0){c[14819]=c[f>>2];s=c[14820]|0;c[14820]=s+-1;c[14821]=(s|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0>>0)c[14986]=h;e=(c[14979]|0)+1|0;c[14979]=e;if(e>>>0>(c[14983]|0)>>>0)c[14983]=e}else r=54;do if((r|0)==54){s=Sv(h|0,((h|0)<0)<<31>>31|0,-1,-1)|0;o=L()|0;if(!(o>>>0>0|(o|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](h)|0;if(!f){f=0;break}}else{f=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;g=59064;e=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&e>>>0>0){s=c[14978]|0;o=Tv(e|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=s>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){f=0;break}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=Wa[c[29352>>2]&127](f)|0;if((c[14986]|0)>>>0>>0)c[14986]=h;e=(c[14980]|0)+e|0;c[14980]=e;if(e>>>0>(c[14984]|0)>>>0)c[14984]=e}else f=0}while(0);e=f+(c[a+8>>2]|0)|0;if(!f){s=0;return s|0}else{c[e>>2]=f;c[e+4>>2]=e+32;b[e+12>>1]=0;b[e+14>>1]=0;f=e;break}}else{f=e;r=47}while(0);if((r|0)==47){s=f+16|0;c[m>>2]=c[s>>2];c[s>>2]=0}h=c[a+4>>2]|0;c[h>>2]=(c[h>>2]|0)+1;h=f;g=f+20|0;e=f+24|0;f=f+8|0}s=(d>>>0)%((c[p>>2]|0)>>>0)|0;c[q>>2]=(c[q>>2]|0)+1;c[f>>2]=d;f=a+56|0;c[h+16>>2]=c[(c[f>>2]|0)+(s<<2)>>2];c[g>>2]=a;c[e>>2]=0;c[c[h+4>>2]>>2]=0;c[(c[f>>2]|0)+(s<<2)>>2]=h;f=a+36|0;if((c[f>>2]|0)>>>0>=d>>>0){s=h;return s|0}c[f>>2]=d;s=h;return s|0}function Bp(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;jb(a);g=a+20|0;if((c[g>>2]|0)>0){h=a+16|0;f=0;do{b=c[(c[h>>2]|0)+(f<<4)+12>>2]|0;if(b|0?(e=c[b+16>>2]|0,e|0):0){b=e;do{d=c[b+8>>2]|0;if(c[d+56>>2]|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0)}f=f+1|0}while((f|0)<(c[g>>2]|0))}b=c[a+344>>2]|0;if(!b){Ti(a);return}do{d=c[(c[b+8>>2]|0)+16>>2]|0;if(d|0)Cp(a,d);b=c[b>>2]|0}while((b|0)!=0);Ti(a);return}function Cp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;b=b+64|0;d=c[b>>2]|0;if(!d)return;while(1){e=d+24|0;if((c[d>>2]|0)==(a|0))break;d=c[e>>2]|0;if(!d){f=6;break}else b=e}if((f|0)==6)return;c[b>>2]=c[e>>2];ng(d);return}function Dp(b,c,e,f,g){b=b|0;c=c|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;b=(c|0)<(f|0)?c:f;a:do if(e){if(!g){k=1;return k|0}if((b|0)>0){i=g;h=b;while(1){b=a[e>>0]|0;if(!(b<<24>>24)){k=7;break}g=a[208+(b&255)>>0]|0;b=a[208+(d[i>>0]|0)>>0]|0;if(g<<24>>24!=b<<24>>24){k=9;break}if((h|0)>1){e=e+1|0;i=i+1|0;h=h+-1|0}else break a}if((k|0)==7){e=0;b=a[208+(d[i>>0]|0)>>0]|0}else if((k|0)==9)e=g&255;j=e-(b&255)|0;k=12}}else{j=((g|0)!=0)<<31>>31;k=12}while(0);if((k|0)==12?j|0:0){k=j;return k|0}k=c-f|0;return k|0}function Ep(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;q=Xa[(a[b>>0]<<24>>24==1?154:155)&255](d,e)|0;r=b+12|0;m=(c[r>>2]|0)+-1&q;s=b+16|0;i=c[s>>2]|0;a:do if(i|0?(h=c[i+(m<<3)>>2]|0,j=(a[b>>0]|0)==1?79:80,g=c[i+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){l=g;while(1){h=h+-1|0;if(!(Za[j&127](c[l+12>>2]|0,c[l+16>>2]|0,d,e)|0))break;g=c[l>>2]|0;if(!((h|0)!=0&(g|0)!=0))break a;else l=g}g=l+8|0;k=c[g>>2]|0;if(f|0){c[g>>2]=f;b=k;return b|0}h=c[l+4>>2]|0;g=c[l>>2]|0;if(!h){c[b+8>>2]=g;i=g;j=g}else{c[h>>2]=g;j=c[l>>2]|0;i=j}if(i|0)c[i+4>>2]=h;g=c[s>>2]|0;h=g+(m<<3)+4|0;if((c[h>>2]|0)==(l|0))c[h>>2]=j;q=g+(m<<3)|0;f=c[q>>2]|0;c[q>>2]=f+-1;if((f|0)<2)c[h>>2]=0;j=b+1|0;do if(a[j>>0]|0?(n=c[l+12>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{f=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}i=b+4|0;f=c[i>>2]|0;c[i>>2]=f+-1;if((f|0)>=2){b=k;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=0;c[r>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;do if(a[j>>0]|0?(o=c[h+12>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{b=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[i>>2]=0;b=k;return b|0}while(0);if(!f){b=0;return b|0}g=c[r>>2]|0;do if(!g){if(!(mb()|0)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](64)|0;if(!g)break}else{g=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){p=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;g=h}else g=h}i=g;j=i+64|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));h=c[s>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[s>>2]=g;c[r>>2]=8;n=(a[b>>0]|0)==1?154:155;m=b+8|0;h=c[m>>2]|0;c[m>>2]=0;if(!h){g=8;k=69}else{do{k=(Xa[n&255](c[h+12>>2]|0,c[h+16>>2]|0)|0)&7;j=h;h=c[h>>2]|0;l=g+(k<<3)+4|0;i=c[l>>2]|0;if(!i){i=c[m>>2]|0;c[j>>2]=i;if(i|0)c[i+4>>2]=j;c[j+4>>2]=0;i=m}else{c[j>>2]=i;i=i+4|0;c[j+4>>2]=c[i>>2];p=c[i>>2]|0;c[((p|0)==0?m:p)>>2]=j}c[i>>2]=j;p=g+(k<<3)|0;c[p>>2]=(c[p>>2]|0)+1;c[l>>2]=j}while((h|0)!=0);g=c[r>>2]|0;k=69}}}else k=69;while(0);do if((k|0)==69){p=b+4|0;if((c[p>>2]|0)>=(g|0)){h=g<<1;g=g<<4;o=pb(g,0)|0;if(!o)break;gw(o|0,0,g|0)|0;g=c[s>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[s>>2]=o;c[r>>2]=h;n=(a[b>>0]|0)==1?154:155;m=b+8|0;g=c[m>>2]|0;c[m>>2]=0;if(g|0){l=h+-1|0;do{j=(Xa[n&255](c[g+12>>2]|0,c[g+16>>2]|0)|0)&l;i=g;g=c[g>>2]|0;k=o+(j<<3)+4|0;h=c[k>>2]|0;if(!h){h=c[m>>2]|0;c[i>>2]=h;if(h|0)c[h+4>>2]=i;c[i+4>>2]=0;h=m}else{c[i>>2]=h;h=h+4|0;c[i+4>>2]=c[h>>2];t=c[h>>2]|0;c[((t|0)==0?m:t)>>2]=i}c[h>>2]=i;t=o+(j<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[k>>2]=i}while((g|0)!=0)}}if(mb()|0){t=f;return t|0}do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](20)|0;if(!g){t=f;return t|0}else{i=g;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=g;break}}else{g=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){t=c[14978]|0;o=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=t>>>0)&1}h=Wa[c[29340>>2]&127](g)|0;if(!h){t=f;return t|0}g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;i=h;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));l=h}while(0);do if((d|0)!=0&(a[b+1>>0]|0)!=0){g=pb(e,((e|0)<0)<<31>>31)|0;if(g|0){gw(g|0,0,e|0)|0;c[l+12>>2]=g;ew(g|0,d|0,e|0)|0;break}c[l+12>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);t=f;return t|0}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);t=f;return t|0}}else c[l+12>>2]=d;while(0);c[l+16>>2]=e;c[p>>2]=(c[p>>2]|0)+1;k=(c[r>>2]|0)+-1&q;i=c[s>>2]|0;j=i+(k<<3)+4|0;g=c[j>>2]|0;if(!g){g=b+8|0;h=c[g>>2]|0;c[l>>2]=h;if(h|0)c[h+4>>2]=l;c[l+4>>2]=0}else{c[l>>2]=g;g=g+4|0;c[l+4>>2]=c[g>>2];t=c[g>>2]|0;c[((t|0)==0?b+8|0:t)>>2]=l}c[g>>2]=l;t=i+(k<<3)|0;c[t>>2]=(c[t>>2]|0)+1;c[j>>2]=l;c[l+8>>2]=f;t=0;return t|0}while(0);c[b+4>>2]=0;t=f;return t|0}function Fp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;e=b+8|0;d=c[e>>2]|0;c[e>>2]=0;e=b+16|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[b+12>>2]=0;if(d|0){f=b+1|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(g=c[e+12>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[b+4>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Gp(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;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;if(!f){d=7;return d|0}}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){i=c[14978]|0;h=Tv(e|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&h>>>0<=i>>>0)&1}f=Wa[c[29340>>2]&127](g)|0;if(!f){d=7;return d|0}e=Wa[c[29352>>2]&127](f)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;i=f+4|0;c[i>>2]=1;do if((a|0)>0){h=0;a:while(1){e=c[b+(h<<2)>>2]|0;g=Eu(e)|0;do if((g|0)==19){if(!(Lu(51058,e,19)|0)){c[i>>2]=1;e=0;break}if(!(Lu(51078,e,19)|0)){c[i>>2]=0;e=0;break}if(!(Lu(51098,e,19)|0)){c[i>>2]=2;e=0}else j=23}else if((g|0)>10)j=23;else{e=1;break a}while(0);do if((j|0)==23){j=0;if(!(Lu(51118,e,11)|0)){e=Lp(f,1,e+11|0,g+-11|0)|0;break}if(Lu(51130,e,11)|0){e=1;break a}e=Lp(f,0,e+11|0,g+-11|0)|0}while(0);h=h+1|0;g=(e|0)==0;if(!((h|0)<(a|0)&g)){j=28;break}}if((j|0)==28)if(g){e=0;break}if(f){g=c[f+12>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=0;break}else{j=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=0;break}}else f=0}else e=0;while(0);c[d>>2]=f;d=e;return d|0}function Hp(a){a=a|0;var b=0,d=0;if(!a)return 0;b=c[a+12>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ip(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};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[a+24>>2]=0;c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;c[e>>2]=a;h=0;return h|0}function Jp(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Kp(b,f,g,h,i,j){b=b|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,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;u=c[b>>2]|0;D=b+4|0;z=c[D>>2]|0;E=b+12|0;A=c[E>>2]|0;k=z+A|0;C=c[b+8>>2]|0;z=z+C|0;if((A|0)>=(C|0)){E=101;return E|0}A=u+8|0;x=c[A>>2]|0;C=u+12|0;s=x+-1|0;a:do if((x|0)>0){t=c[C>>2]|0;while(1){m=k+1|0;n=a[k>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;b:do if((m|0)==(z|0))m=z;else while(1){n=a[m>>0]|0;if((n&-64)<<24>>24!=-128)break b;m=m+1|0;l=l<<6|n&63;if((m|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=15;else n=1;else{l=65533;y=15}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=15;if((y|0)==15){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}r=n&1;n=s;o=0;while(1){p=(o+n|0)/2|0;x=c[t+(p<<2)>>2]|0;q=(x|0)<(l|0);if((x|0)==(l|0)){n=1;break}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}if((n|0)!=(r|0)){x=k;break a}if(m>>>0>>0)k=m;else{k=101;break}}return k|0}else{while(1){n=k+1|0;m=a[k>>0]|0;l=m&255;if((m&255)>191){l=d[2736+(l+-192)>>0]|0;c:do if((n|0)==(z|0))m=z;else while(1){m=a[n>>0]|0;if((m&-64)<<24>>24!=-128){m=n;break c}n=n+1|0;l=l<<6|m&63;if((n|0)==(z|0)){m=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=32;else{x=k;break a}else{l=65533;y=32}}else if(m<<24>>24>-1)if(!(c[24720+(l>>>5<<2)>>2]&1<<(l&31))){x=k;m=n;break a}else k=n;else{m=n;y=32}if((y|0)==32){y=0;q=l<<10|1023;n=0;o=405;p=0;do{x=(o+n|0)/2|0;w=q>>>0<(c[23088+(x<<2)>>2]|0)>>>0;p=w?p:x;o=w?x+-1|0:o;n=w?n:x+1|0}while((o|0)>=(n|0));x=c[23088+(p<<2)>>2]|0;if(((x>>>10)+(x&1023)|0)>>>0>l>>>0)k=m;else{x=k;break a}}if(k>>>0>=z>>>0){k=101;break}}return k|0}while(0);w=b+20|0;k=c[w>>2]|0;v=b+24|0;u=u+4|0;p=k;while(1){o=p;n=c[v>>2]|0;if((o-k|0)<(n+-4|0))t=p;else{if(mb()|0){k=7;y=86;break}y=n+64|0;k=sb(k,y,((y|0)<0)<<31>>31)|0;if(!k){k=7;y=86;break}t=k+(o-(c[w>>2]|0))|0;c[w>>2]=k;c[v>>2]=(c[v>>2]|0)+64}q=c[u>>2]|0;do if((l|0)>=128){if((l|0)>=65536)if((l+-66560|0)>>>0<40){l=l+40|0;y=58;break}else{y=61;break}k=162;o=-1;n=0;do{y=(n+k|0)/2|0;s=(l|0)<(e[24736+(y<<2)>>1]|0);n=s?n:y+1|0;o=s?o:y;k=s?y+-1|0:k}while((k|0)>=(n|0));k=e[24736+(o<<2)>>1]|0;if(((d[24736+(o<<2)+3>>0]|0)+k|0)>(l|0)?(B=d[24736+(o<<2)+2>>0]|0,((l^k)&1&B|0)==0):0)l=l+(e[25392+(B>>>1<<1)>>1]|0)&65535;if(q){p=l<<3|7;k=0;n=125;o=0;do{y=(n+k|0)/2|0;s=p>>>0<(e[25552+(y<<1)>>1]|0)>>>0;o=s?o:y;n=s?y+-1|0:n;k=s?k:y+1|0}while((n|0)>=(k|0));if((q|0)!=2?(a[25808+o>>0]|0)<0:0){y=57;break}y=e[25552+(o<<1)>>1]|0;if(((y>>>3)+(y&7)|0)>=(l|0)){l=a[25808+o>>0]&127;y=57}else y=57}else y=57}else{l=(l+-65|0)>>>0<26?l+32|0:l;y=57}while(0);if((y|0)==57){y=0;if(l)y=58}if((y|0)==58)if((l|0)>=128)if((l|0)>=2048)if((l|0)<65536){o=t;k=3;n=2;p=1;q=224;r=15;y=62}else y=61;else{q=t;k=2;n=1;o=192;p=31;y=63}else{n=t;k=1;y=64}if((y|0)==61){a[t>>0]=l>>>18&7|240;o=t+1|0;k=4;n=3;p=2;q=128;r=63;y=62}if((y|0)==62){a[o>>0]=l>>>12&r|q;q=t+p|0;o=128;p=63;y=63}if((y|0)==63){a[q>>0]=l>>>6&p|o;n=t+n|0;l=l&63|128;y=64}if((y|0)==64){y=0;a[n>>0]=l;t=t+k|0}if(m>>>0>=z>>>0){k=m;y=85;break}k=m+1|0;n=a[m>>0]|0;l=n&255;if((n&255)>191){l=d[2736+(l+-192)>>0]|0;d:do if((k|0)==(z|0))k=z;else while(1){n=a[k>>0]|0;if((n&-64)<<24>>24!=-128)break d;k=k+1|0;l=l<<6|n&63;if((k|0)==(z|0)){k=z;break}}while(0);if(!((l&-2|0)==65534|(l>>>0<128|(l&-2048|0)==55296)))if(l>>>0<4194304)y=75;else n=1;else{l=65533;y=75}}else if(n<<24>>24>-1)n=(c[24720+(l>>>5<<2)>>2]&1<<(l&31)|0)==0;else y=75;if((y|0)==75){q=l<<10|1023;n=0;o=405;p=0;do{y=(o+n|0)/2|0;s=q>>>0<(c[23088+(y<<2)>>2]|0)>>>0;p=s?p:y;o=s?y+-1|0:o;n=s?n:y+1|0}while((o|0)>=(n|0));n=c[23088+(p<<2)>>2]|0;n=((n>>>10)+(n&1023)|0)>>>0<=l>>>0}s=n&1;n=c[A>>2]|0;e:do if((n|0)>0){r=c[C>>2]|0;n=n+-1|0;o=0;while(1){p=(o+n|0)/2|0;y=c[r+(p<<2)>>2]|0;q=(y|0)<(l|0);if((y|0)==(l|0)){n=1;break e}n=q?n:p+-1|0;o=q?p+1|0:o;if((n|0)<(o|0)){n=0;break}}}else n=0;while(0);if((n|0)==(s|0)){n=l+-768|0;if(n>>>0>49){y=85;break}y=(l|0)<800;if(!(1<<(y?n:l+-800|0)&(y?134389727:221688))){y=85;break}}p=t;m=k;k=c[w>>2]|0}if((y|0)==85){c[E>>2]=k-(c[D>>2]|0);c[f>>2]=c[w>>2];c[g>>2]=t-(c[w>>2]|0);D=c[D>>2]|0;c[h>>2]=x-D;c[i>>2]=m-D;D=b+16|0;E=c[D>>2]|0;c[D>>2]=E+1;c[j>>2]=E;E=0;return E|0}else if((y|0)==86)return k|0;return 0}function Lp(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;p=f+g|0;n=(g|0)>0;if(!n){q=0;return q|0}m=0;g=f;while(1){j=g+1|0;g=a[g>>0]|0;h=g&255;if((g&255)>191){g=d[2736+(h+-192)>>0]|0;a:do if((j|0)==(p|0)){h=g;g=p}else{h=g;g=j;while(1){i=a[g>>0]|0;if((i&-64)<<24>>24!=-128)break a;g=g+1|0;h=h<<6|i&63;if((g|0)==(p|0)){g=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=12;else i=1;else{h=65533;q=12}}else if(g<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;g=j}else{g=j;q=12}if((q|0)==12){q=0;l=h<<10|1023;i=0;j=405;k=0;do{o=(j+i|0)/2|0;r=l>>>0<(c[23088+(o<<2)>>2]|0)>>>0;k=r?k:o;j=r?o+-1|0:j;i=r?i:o+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)==(e|0))i=m;else{i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0){i=m;break}i=m+1|0}while(0);if(g>>>0

      >>0)m=i;else break}if(!i){r=0;return r|0}o=b+12|0;h=c[o>>2]|0;b=b+8|0;g=c[b>>2]|0;if(mb()|0){r=7;return r|0}m=sb(h,g+i<<2,0)|0;if(!m){r=7;return r|0}g=c[b>>2]|0;if(n)do{j=f+1|0;f=a[f>>0]|0;h=f&255;if((f&255)>191){f=d[2736+(h+-192)>>0]|0;b:do if((j|0)==(p|0)){h=f;f=p}else{h=f;f=j;while(1){i=a[f>>0]|0;if((i&-64)<<24>>24!=-128)break b;f=f+1|0;h=h<<6|i&63;if((f|0)==(p|0)){f=p;break}}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<4194304)q=34;else i=1;else{h=65533;q=34}}else if(f<<24>>24>-1){i=(c[24720+(h>>>5<<2)>>2]&1<<(h&31)|0)==0;f=j}else{f=j;q=34}if((q|0)==34){q=0;l=h<<10|1023;i=0;j=405;k=0;do{r=(j+i|0)/2|0;n=l>>>0<(c[23088+(r<<2)>>2]|0)>>>0;k=n?k:r;j=n?r+-1|0:j;i=n?i:r+1|0}while((j|0)>=(i|0));i=c[23088+(k<<2)>>2]|0;i=((i>>>10)+(i&1023)|0)>>>0<=h>>>0}do if((i&1|0)!=(e|0)){i=h+-768|0;if(i>>>0<=49?(r=(h|0)<800,1<<(r?i:h+-800|0)&(r?134389727:221688)|0):0)break;c:do if((g|0)>0){i=0;do{if((c[m+(i<<2)>>2]|0)>=(h|0))break c;i=i+1|0}while((i|0)<(g|0))}else i=0;while(0);if((g|0)>(i|0)){j=g;do{r=j;j=j+-1|0;c[m+(r<<2)>>2]=c[m+(j<<2)>>2]}while((j|0)>(i|0))}c[m+(i<<2)>>2]=h;g=g+1|0}while(0)}while(f>>>0

      >>0);c[o>>2]=m;c[b>>2]=g;r=0;return r|0}function Mp(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;p=Ra;Ra=Ra+16|0;j=p;do if((f|1|0)==5){l=c[g+4>>2]|0;k=Eu(l)|0;if((f|0)==5){if((l|0)==0|(k|0)!=4)break;k=d[l>>0]|0;e=208+k|0;if((k|32|0)==116){k=d[l+1>>0]|0;e=208+k|0;if((k|32|0)==101){k=d[l+2>>0]|0;e=208+k|0;if((k|32|0)==109){e=d[l+3>>0]|0;if((e|32|0)!=112){m=208+e|0;n=112;o=5}}else{m=e;n=109;o=5}}else{m=e;n=101;o=5}}else{m=e;n=116;o=5}if((o|0)==5?(n|0)!=(d[m>>0]|0):0)break;k=c[g+12>>2]|0;l=k;k=Eu(k)|0;e=4}else e=3;f=c[g+(e<<2)>>2]|0;j=Eu(f)|0;e=td(b,51150)|0;if(e|0){h=e;Ra=p;return h|0}e=k+306+j|0;n=pb(e,0)|0;if(!n){h=7;Ra=p;return h|0}gw(n|0,0,e|0)|0;m=n+12|0;c[m>>2]=n+16;g=n+304|0;c[n+32>>2]=g;e=g+(k+1)|0;c[n+36>>2]=e;c[n+28>>2]=b;c[n+268>>2]=1;ew(g|0,l|0,k|0)|0;ew(e|0,f|0,j|0)|0;m=c[(c[m>>2]|0)+20>>2]|0;e=a[m>>0]|0;switch(e<<24>>24){case 34:case 39:case 91:case 96:{l=e<<24>>24==91?93:e;f=a[m+1>>0]|0;a:do if(!(f<<24>>24))e=0;else{j=1;e=0;do{k=j+1|0;if(f<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break a;a[m+e>>0]=l;j=j+2|0}else{a[m+e>>0]=f;j=k}e=e+1|0;f=a[m+j>>0]|0}while(f<<24>>24!=0)}while(0);a[m+e>>0]=0;break}default:{}}c[h>>2]=n;h=0;Ra=p;return h|0}while(0);Wp(i,51219,j);h=1;Ra=p;return h|0}function Np(b,d){b=b|0;d=d|0;var e=0,f=0.0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;if(((c[d+8>>2]|0)==1?(e=c[d+12>>2]|0,(c[e>>2]|0)==0):0)?(a[e+4>>0]|0)==0:0)c[d+32>>2]=1;m=c[d>>2]|0;if((m|0)<=0){c[d+20>>2]=0;g[d+40>>3]=2.0e4;return 0}n=c[d+4>>2]|0;b=-1;k=-1;h=-1;e=-1;l=0;while(1){if(!(a[n+(l*12|0)+5>>0]|0))j=h;else{i=a[n+(l*12|0)+4>>0]|0;j=c[n+(l*12|0)>>2]|0;if(!j){b=i<<24>>24==2?l:b;e=i<<24>>24==32|i<<24>>24==4?l:e;h=i<<24>>24==8|i<<24>>24==16?l:h}k=i<<24>>24==2&(j|0)==4?l:k;j=h}l=l+1|0;if((l|0)>=(m|0))break;else h=j}i=d+20|0;if((b|0)<=-1){c[i>>2]=0;h=d+40|0;g[h>>3]=2.0e4;if((e|0)>-1){c[i>>2]=2;c[(c[d+16>>2]|0)+(e<<3)>>2]=1;g[h>>3]=1.0e4;b=2;e=6;f=1.0e4}else{b=1;e=4;f=2.0e4}if((j|0)>-1){c[i>>2]=e;c[(c[d+16>>2]|0)+(j<<3)>>2]=b;f=f*.5;g[h>>3]=f;b=b+1|0}}else{c[i>>2]=1;c[(c[d+16>>2]|0)+(b<<3)>>2]=1;g[d+40>>3]=5.0;b=2;f=5.0}if((k|0)<=-1)return 0;c[(c[d+16>>2]|0)+(k<<3)>>2]=b;g[d+40>>3]=f+-1.0;return 0}function Op(a){a=a|0;var b=0,d=0;b=c[a+12>>2]|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;gc(c[b+160>>2]|0)|0;gc(c[b+164>>2]|0)|0;gc(c[b+168>>2]|0)|0;gc(c[b+172>>2]|0)|0;gc(c[b+176>>2]|0)|0;gc(c[b+180>>2]|0)|0;gc(c[b+184>>2]|0)|0;gc(c[b+188>>2]|0)|0;gc(c[b+192>>2]|0)|0;gc(c[b+196>>2]|0)|0;gc(c[b+200>>2]|0)|0;gc(c[b+204>>2]|0)|0;gc(c[b+208>>2]|0)|0;gc(c[b+212>>2]|0)|0;b=c[b+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Pp(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](120)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](120)|0;if((c[14985]|0)>>>0<120)c[14985]=120;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+120|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function Qp(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;d=(c[(c[b>>2]|0)+12>>2]|0)+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;h=b+4|0;i=b+8|0;d=c[h>>2]|0;if((c[i>>2]|0)>0){g=0;do{d=c[d+(g<<2)>>2]|0;do if(d|0){do if((c[d+56>>2]|0)==0?(j=c[d+64>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);do if((a[d+5>>0]|0)==0?(k=c[d+40>>2]|0,k|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);e=c[d+52>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}l=e;if((c[f+304>>2]|0)>>>0<=l>>>0?(c[f+308>>2]|0)>>>0>l>>>0:0){l=f+300|0;c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);g=g+1|0;d=c[h>>2]|0}while((g|0)<(c[i>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+20|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;c[h>>2]=0;c[d>>2]=0;d=c[b+60>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+76>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+112>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{l=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return 0}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return 0}return 0}function Rp(d,f,h,i,j){d=d|0;f=f|0;h=h|0;i=i|0;j=j|0;var 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;y=Ra;Ra=Ra+16|0;u=y+8|0;s=y;x=c[(c[d>>2]|0)+12>>2]|0;if((f|0)==1){q=-1;o=0;w=0;h=1;p=-1}else{h=f&2;p=(h|0)==0;v=(p^1)&1;t=(f&4|0)==0;q=t?-1:v;o=-1;w=1;h=t?v:(h>>>1)+1|0;p=p<<31>>31}t=(h|0)<(i|0)?h:-1;v=d+4|0;l=d+8|0;h=c[v>>2]|0;if((c[l>>2]|0)>0){k=0;do{h=c[h+(k<<2)>>2]|0;do if(h|0){do if((c[h+56>>2]|0)==0?(m=c[h+64>>2]|0,m|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{i=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);do if((a[h+5>>0]|0)==0?(n=c[h+40>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{i=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);f=c[h+52>>2]|0;do if(f|0){i=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,f);break}z=f;if((c[i+304>>2]|0)>>>0<=z>>>0?(c[i+308>>2]|0)>>>0>z>>>0:0){z=i+300|0;c[f>>2]=c[z>>2];c[z>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);k=k+1|0;h=c[v>>2]|0}while((k|0)<(c[l>>2]|0))}do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=d+20|0;f=c[h>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{z=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[l>>2]=0;c[v>>2]=0;c[h>>2]=0;n=d+60|0;h=c[n>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);h=c[d+112>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{z=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);l=v;m=l+116|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));c[d+72>>2]=(w|0)==0?3:19;do if((p&o|0)>-1?(r=c[j>>2]|0,r|0):0){h=b[r+8>>1]|0;if((h&514)==514?(a[r+10>>0]|0)==1:0)h=c[r+16>>2]|0;else{if(h&1)break;h=Gg(r,1)|0}if(h|0){c[s>>2]=h;h=Bb(31408,s)|0;c[n>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+64>>2]=z;break}}}while(0);do if((q|0)>-1){h=c[j+(q<<2)>>2]|0;do if(h){f=b[h+8>>1]|0;if((f&514)==514?(a[h+10>>0]|0)==1:0){h=c[h+16>>2]|0;break}if(!(f&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);c[u>>2]=h;h=Bb(31408,u)|0;c[d+76>>2]=h;if(!h){z=7;Ra=y;return z|0}else{z=Eu(h)|0;c[d+80>>2]=z;break}}while(0);a:do if((t|0)>-1){h=c[j+(t<<2)>>2]|0;f=e[h+8>>1]|0;do if(!(f&4)){if(f&8|0){h=Mg(+g[h>>3])|0;L()|0;break}if(!(f&18)){h=0;break a}h=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0}else h=c[h>>2]|0;while(0);h=(h|0)>0?h:0}else h=0;while(0);c[d+84>>2]=h;f=c[n>>2]|0;k=d+64|0;i=c[k>>2]|0;l=v;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));h=Xp(x,h,0,-2,f,i,0,w,v)|0;if(h|0){z=h;Ra=y;return z|0}c[d+16>>2]=n;h=eq(x,v,c[n>>2]|0,c[k>>2]|0)|0;if(h|0){z=h;Ra=y;return z|0}z=Sp(d)|0;Ra=y;return z|0}function Sp(b){b=b|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;h=c[(c[b>>2]|0)+12>>2]|0;o=b+96|0;p=o;p=Sv(c[p>>2]|0,c[p+4>>2]|0,1,0)|0;e=L()|0;c[o>>2]=p;c[o+4>>2]=e;o=b+104|0;e=(c[o>>2]|0)+1|0;c[o>>2]=e;p=b+108|0;f=c[p>>2]|0;a:do if((e|0)<(f|0)){g=c[b+112>>2]|0;while(1){n=g+(e<<4)|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0){e=0;break}e=e+1|0;c[o>>2]=e;if((e|0)>=(f|0))break a}return e|0}while(0);e=gq(h,b+4|0)|0;if((e|0)!=100){c[b+88>>2]=1;q=e;return q|0}m=c[b+56>>2]|0;n=c[b+52>>2]|0;e=c[b+76>>2]|0;do if(e|0){j=c[b+80>>2]|0;k=c[b+48>>2]|0;l=(j|0)<(k|0);k=Lu(e,c[b+44>>2]|0,l?j:k)|0;if((k|0)>=0?(k|0)!=0|l^1:0)break;c[b+88>>2]=1;q=0;return q|0}while(0);f=c[p>>2]|0;l=b+112|0;e=c[l>>2]|0;do if((f|0)<2){if(mb()|0){q=7;return q|0}e=sb(e,32,0)|0;if(!e){q=7;return q|0}else{f=c[p>>2]|0;gw(e+(f<<4)|0,0,32-(f<<4)|0)|0;c[l>>2]=e;c[p>>2]=2;f=32;break}}else f=f<<4;while(0);gw(e|0,0,f|0)|0;b:do if((m|0)>0){e=0;f=0;k=0;c:while(1){j=n+k|0;h=a[j>>0]|0;g=h&255;do if(!(g&128)){b=1;i=0;g=h&255}else{i=d[j+1>>0]|0;g=i<<7|g&127;if(!(i&128)){b=2;i=0;break}i=d[j+2>>0]|0;g=i<<14|g&16383;if(!(i&128)){b=3;i=0;break}i=d[j+3>>0]|0;g=i<<21|g&2097151;if(!(i&128)){b=4;i=0;break}h=28;b=j+4|0;g=g&268435455;i=0;do{r=b;b=b+1|0;r=d[r>>0]|0;s=cw(r&127|0,0,h|0)|0;g=Sv(s|0,L()|0,g|0,i|0)|0;i=L()|0;h=h+7|0}while(h>>>0<64&((r&128|0)!=0|0!=0));b=b-j|0}while(0);k=b+k|0;switch(e|0){case 0:{f=c[l>>2]|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=0;e=1;break}case 1:{if((i|0)>0|(i|0)==0&g>>>0>1){q=(c[l>>2]|0)+16|0;r=q;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[q>>2]=r;c[q+4>>2]=s;q=32}else q=32;break}case 2:{q=32;break}default:{f=g+2|0;if((c[p>>2]|0)<(f|0)){e=c[l>>2]|0;if(mb()|0){e=7;q=46;break c}e=sb(e,f<<4,0)|0;if(!e){e=7;q=46;break c}s=c[p>>2]|0;gw(e+(s<<4)|0,0,f-s<<4|0)|0;c[l>>2]=e;c[p>>2]=f}else e=c[l>>2]|0;f=e+(g+1<<4)|0;s=f;s=Sv(c[s>>2]|0,c[s+4>>2]|0,1,0)|0;e=L()|0;c[f>>2]=s;c[f+4>>2]=e;f=g;e=2}}d:do if((q|0)==32){q=0;switch(g|0){case 0:{if(!i){e=0;break d}break}case 1:{if(!i){e=3;break d}break}default:{}}e=c[l>>2]|0;r=e+(f+1<<4)+8|0;j=r;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;s=L()|0;c[r>>2]=j;c[r+4>>2]=s;e=e+8|0;r=e;r=Sv(c[r>>2]|0,c[r+4>>2]|0,1,0)|0;s=L()|0;c[e>>2]=r;c[e+4>>2]=s;e=2}while(0);if((k|0)>=(m|0))break b}if((q|0)==46)return e|0}while(0);c[o>>2]=0;s=0;return s|0}function Tp(a){a=a|0;return c[a+88>>2]|0}function Up(a,d,e){a=a|0;d=d|0;e=e|0;var f=0,g=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+44>>2]|0,c[a+48>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{a=c[a+104>>2]|0;if(!a){if((yc(c[d>>2]|0,40769,-1,1,0)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}g=a+-1|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}case 2:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}case 3:{g=(c[a+112>>2]|0)+(c[a+104>>2]<<4)+8|0;f=c[g>>2]|0;g=c[g+4>>2]|0;a=c[d>>2]|0;e=a+8|0;if(!(b[e>>1]&9216)){d=a;c[d>>2]=f;c[d+4>>2]=g;b[e>>1]=4;return 0}else{Pg(a,f,g);return 0}}default:{g=c[a+84>>2]|0;a=c[d>>2]|0;e=((g|0)<0)<<31>>31;f=a+8|0;if(!(b[f>>1]&9216)){d=a;c[d>>2]=g;c[d+4>>2]=e;b[f>>1]=4;return 0}else{Pg(a,g,e);return 0}}}return 0}function Vp(a,b){a=a|0;b=b|0;var d=0;d=a+96|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Wp(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=d;h=Ab(b,e)|0;c[a>>2]=h;Ra=g;return}function Xp(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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,M=0;M=Ra;Ra=Ra+32|0;p=M+24|0;z=M+16|0;K=M+8|0;H=M;do if((h|0)<0){p=c[d+256>>2]|0;a:do if(p){v=(l|k|0)!=0;b:do if(v){o=c[p+(g*24|0)+12>>2]|0;c[K>>2]=o;if(!o){n=0;break a}if(!j){p=0;t=0;n=0;q=0;s=o;o=0;while(1){if((t|0)==(n|0)){o=t+16|0;n=o<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}n=sb(q,(n|0)>0?n:0,0)|0;if(!n){r=0;o=p;n=7;q=0;break b}else{r=o;p=n;o=n;q=n}}else r=n;n=t+1|0;c[p+(t<<2)>>2]=s;s=c[c[K>>2]>>2]|0;c[K>>2]=s;if(!s)break;else{t=n;n=r}}}else{p=0;n=0;s=0;u=o;t=0;o=0;while(1){q=u;r=u;if((c[r+16>>2]|0)>=(j|0)?(Lu(c[r+12>>2]|0,i,j)|0)==0:0){if((n|0)==(s|0)){q=n+16|0;o=q<<2;if(mb()|0){r=0;o=p;n=7;q=0;break b}r=sb(t,(o|0)>0?o:0,0)|0;if(!r){r=0;o=p;n=7;q=0;break b}else{p=r;o=r}}else{q=s;r=t}c[p+(n<<2)>>2]=u;s=q;n=n+1|0;q=c[K>>2]|0}else r=t;u=c[q>>2]|0;c[K>>2]=u;if(!u)break;else t=r}}if((n|0)<=1)if((n|0)==1){n=1;G=31;break}else{r=0;o=p;n=0;q=0;break}else{pv(o,n,4,156);G=31;break}}else{q=p+(g*24|0)+20|0;c:do if((c[q>>2]|0?(r=p+(g*24|0)+4|0,s=Xa[(a[r>>0]<<24>>24==1?154:155)&255](i,j)|0,s=(c[p+(g*24|0)+16>>2]|0)+-1&s,t=c[q>>2]|0,t|0):0)?(o=c[t+(s<<3)>>2]|0,u=(a[r>>0]|0)==1?79:80,n=c[t+(s<<3)+4>>2]|0,(o|0)!=0&(n|0)!=0):0){while(1){o=o+-1|0;if(!(Za[u&127](c[n+12>>2]|0,c[n+16>>2]|0,i,j)|0))break;n=c[n>>2]|0;if(!((o|0)!=0&(n|0)!=0))break c}c[K>>2]=n;n=1;p=K;G=31;break b}while(0);c[K>>2]=0;r=0;o=0;n=0;q=0}while(0);if((G|0)==31){n=n<<2;o=n+100|0;q=pb(o,0)|0;if(!q){r=q;o=p;n=7;q=0}else{gw(q|0,0,o|0)|0;c[q>>2]=2147483647;r=q+96|0;c[q+56>>2]=r;ew(r|0,p|0,n|0)|0;r=q;o=p;n=0}}do if(v?o|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if((n|0)==0&(r|0)!=0){p=m+4|0;o=c[p>>2]|0;do if(!(o&15)){n=c[m>>2]|0;if((mb()|0)==0?(y=sb(n,(o<<2)+64|0,0)|0,y|0):0){c[m>>2]=y;o=c[p>>2]|0;n=y;break}do if((c[r+56>>2]|0)==0?(w=c[r+64>>2]|0,w|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](w);break}else{F=Wa[c[29352>>2]&127](w)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](w);break}while(0);do if((a[r+5>>0]|0)==0?(x=c[r+40>>2]|0,x|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](x);break}else{F=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);break}while(0);n=c[r+52>>2]|0;do if(n|0){o=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(o|0){if(c[o+480>>2]|0){Xd(o,n);break}F=n;if((c[o+304>>2]|0)>>>0<=F>>>0?(c[o+308>>2]|0)>>>0>F>>>0:0){F=o+300|0;c[n>>2]=c[F>>2];c[F>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{F=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!q){n=7;break a}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=7;break a}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=7;break a}}else n=c[m>>2]|0;while(0);c[p>>2]=o+1;c[n+(o<<2)>>2]=q;n=0}}else n=0;while(0);if(!((h|0)!=-1&(n|0)==0)){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}q=d+108|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){p=c[d+20>>2]|0;c[z>>2]=c[d+16>>2];c[z+4>>2]=p;p=Bb(51885,z)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}v=o;n=d+252|0;r=c[n>>2]|0;p=((f|0)<0)<<31>>31;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;q=((g|0)<0)<<31>>31;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;s=L()|0;do if(!(Vc(v,1)|0)){t=c[v+100>>2]|0;u=t+8|0;if(!(b[u>>1]&9216)){G=t;c[G>>2]=r;c[G+4>>2]=s;b[u>>1]=4;break}else{Pg(t,r,s);break}}while(0);r=c[n>>2]|0;r=Yv(r|0,((r|0)<0)<<31>>31|0,f|0,p|0)|0;r=Sv(r|0,L()|0,g|0,q|0)|0;r=cw(r|0,L()|0,10)|0;q=L()|0;r=r|1023;if(!(Vc(v,2)|0)){p=c[v+100>>2]|0;n=p+40|0;p=p+48|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=r;c[G+4>>2]=q;b[p>>1]=4;G=98;break}else{Pg(n,r,q);G=98;break}}else G=98}else{q=d+104|0;F=c[q>>2]|0;c[K>>2]=F;o=F;if(!F){F=c[d+20>>2]|0;c[p>>2]=c[d+16>>2];c[p+4>>2]=F;p=Bb(51773,p)|0;if(!p){n=7;break}n=qd(c[d+12>>2]|0,p,-1,133,0,K,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{F=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}o=c[K>>2]|0;c[q>>2]=o;if(n)break}n=o;q=c[d+252>>2]|0;q=Yv(q|0,((q|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;q=Sv(q|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;q=cw(q|0,L()|0,10)|0;q=Sv(q|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;r=L()|0;if(!(Vc(n,1)|0)){n=c[n+100>>2]|0;p=n+8|0;if(!(b[p>>1]&9216)){G=n;c[G>>2]=q;c[G+4>>2]=r;b[p>>1]=4;G=98;break}else{Pg(n,q,r);G=98;break}}else G=98}while(0);d:do if((G|0)==98){B=o;C=(o|0)==0;D=(i|0)!=0;E=B+120|0;A=(k|0)==0?0:H;F=m+4|0;f=(l|k|0)==0;g=B+40|0;k=B+144|0;l=f&1;n=Gc(B)|0;if((n|0)==100){while(1){y=Oc(B,1)|0;z=L()|0;h=K;c[h>>2]=y;c[h+4>>2]=z;h=Oc(B,2)|0;z=L()|0;y=H;c[y>>2]=h;c[y+4>>2]=z;y=Oc(B,3)|0;z=L()|0;h=Lc(B,4)|0;if(C)q=mc(29576)|0;else{n=c[E>>2]|0;if((n|0)!=0?(e[k>>1]|0)>4:0)n=n+160|0;else{n=c[B>>2]|0;c[n+64>>2]=25;Ne(n,25);n=29576}q=mc(n)|0;n=c[B>>2]|0;p=c[g>>2]|0;if((p|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=7}else n=c[n+68>>2]&p;c[g>>2]=n}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if((q|0)!=0&(D&((n|0)!=0|(p|0)!=0))){n=Yp(d,i,j,q,h,K,A)|0;if(n|0){G=152;break}p=K;n=c[p>>2]|0;p=c[p+4>>2]|0;if(f){w=H;c[w>>2]=n;c[w+4>>2]=p;w=n;v=p;u=n;r=p}else G=114}else G=114;if((G|0)==114){G=0;r=H;w=n;v=p;u=c[r>>2]|0;r=c[r+4>>2]|0}p=(c[F>>2]|0)+1|0;if((w|0)==0&(v|0)==0){if(!((u|0)==0&(r|0)==0)){n=267;G=152;break}n=h+20|0}else n=0;x=nb(n+96|0)|0;if(!x){n=7;G=152;break}s=x;t=s+96|0;do{c[s>>2]=0;s=s+4|0}while((s|0)<(t|0));c[x>>2]=p;a[x+4>>0]=l;t=x+8|0;c[t>>2]=w;c[t+4>>2]=v;t=x+16|0;c[t>>2]=u;c[t+4>>2]=r;u=x+24|0;c[u>>2]=y;c[u+4>>2]=z;if(!n){y=Sv(w|0,v|0,-1,-1)|0;z=L()|0;h=x+32|0;c[h>>2]=y;c[h+4>>2]=z}else{n=x+96|0;c[x+40>>2]=n;a[x+5>>0]=1;c[x+44>>2]=h;if(h|0)ew(n|0,q|0,h|0)|0;s=n+h|0;t=s+20|0;do{a[s>>0]=0;s=s+1|0}while((s|0)<(t|0))}n=c[F>>2]|0;if(!(n&15)){p=c[m>>2]|0;if(mb()|0)break;p=sb(p,(n<<2)+64|0,0)|0;if(!p)break;c[m>>2]=p;n=c[F>>2]|0}else p=c[m>>2]|0;c[F>>2]=n+1;c[p+(n<<2)>>2]=x;n=Gc(B)|0;if((n|0)!=100)break d}if((G|0)==152)break;do if((c[x+56>>2]|0)==0?(I=c[x+64>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{K=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);do if((a[x+5>>0]|0)==0?(J=c[x+40>>2]|0,J|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](J);break}else{K=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J);break}while(0);n=c[x+52>>2]|0;do if(n|0){p=c[n+20>>2]|0;gc(c[n+16>>2]|0)|0;if(p|0){if(c[p+480>>2]|0){Xd(p,n);break}K=n;if((c[p+304>>2]|0)>>>0<=K>>>0?(c[p+308>>2]|0)>>>0>K>>>0:0){K=p+300|0;c[n>>2]=c[K>>2];c[K>>2]=n;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](x);else{K=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x)}n=7}}while(0);q=o;if(!o){m=0;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}o=c[q>>2]|0;K=q+136|0;m=c[K+4>>2]|0;if((m|0)>0|(m|0)==0&(c[K>>2]|0)>>>0>0)hc(o,q);p=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((p|0)==3082|(a[o+81>>0]|0)!=0){og(o);m=7;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}else{m=c[o+68>>2]&p;K=n;j=(K|0)==101;K=j?m:K;Ra=M;return K|0}return 0}function Yp(b,e,f,g,h,i,j){b=b|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,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;F=Ra;Ra=Ra+16|0;E=F+4|0;C=F;l=a[g>>0]|0;k=l&255;if(k&128){z=d[g+1>>0]|0;k=z<<7|l&127;if(z&128){z=d[g+2>>0]|0;k=z<<14|k&16383;if(z&128){z=d[g+3>>0]|0;k=z<<21|k&2097151;if(!(z&128))z=k;else z=(a[g+4>>0]&7)<<28|k&268435455}else z=k}else z=k}else z=k;y=g+h|0;if(l<<24>>24<=-1)if((a[g+1>>0]|0)<=-1)if((a[g+2>>0]|0)<=-1)if((a[g+3>>0]|0)>-1)k=4;else{k=28;h=g+4|0;do{x=h;h=h+1|0;k=k+7|0}while(k>>>0<64&(a[x>>0]|0)<0);k=h-g|0}else k=3;else k=2;else k=1;n=g+k|0;h=a[n>>0]|0;k=h&255;do if(!(k&128)){m=1;l=h&255;h=0}else{x=d[n+1>>0]|0;k=x<<7|k&127;if(!(x&128)){m=2;l=k;h=0;break}x=d[n+2>>0]|0;k=x<<14|k&16383;if(!(x&128)){m=3;l=k;h=0;break}x=d[n+3>>0]|0;l=x<<21|k&2097151;if(!(x&128)){m=4;h=0;break}k=28;m=n+4|0;l=l&268435455;h=0;do{x=m;m=m+1|0;x=d[x>>0]|0;w=cw(x&127|0,0,k|0)|0;l=Sv(w|0,L()|0,l|0,h|0)|0;h=L()|0;k=k+7|0}while(k>>>0<64&((x&128|0)!=0|0!=0));m=m-n|0}while(0);o=n+m|0;if(o>>>0>y>>>0){E=267;Ra=F;return E|0}a:do if(o>>>0>>0){w=g;x=y;n=i;m=j;g=1;k=0;r=0;t=0;while(1){u=(n|0)!=0;v=(m|0)!=0;if(!(u|v)){h=0;break a}if(!g){p=a[o>>0]|0;g=p&255;if(g&128){s=d[o+1>>0]|0;g=s<<7|p&127;if(s&128){s=d[o+2>>0]|0;g=s<<14|g&16383;if(s&128){s=d[o+3>>0]|0;g=s<<21|g&2097151;if(!(s&128))p=4;else{g=(a[o+4>>0]&7)<<28|g&268435455;p=5}}else p=3}else p=2}else p=1;o=o+p|0}else g=0;q=a[o>>0]|0;p=q&255;if(p&128){s=d[o+1>>0]|0;p=s<<7|q&127;if(s&128){s=d[o+2>>0]|0;p=s<<14|p&16383;if(s&128){s=d[o+3>>0]|0;p=s<<21|p&2097151;if(!(s&128))q=4;else{p=(a[o+4>>0]&7)<<28|p&268435455;q=5}}else q=3}else q=2}else q=1;s=o+q|0;o=s;if((g|0)>(o-w|0)){h=267;break a}if((p|0)==0|(p|0)>(x-o|0)){h=267;break a}o=Sv(p|0,((p|0)<0)<<31>>31|0,g|0,((g|0)<0)<<31>>31|0)|0;q=L()|0;if((q|0)>(r|0)|(q|0)==(r|0)&o>>>0>t>>>0){q=cw(o|0,q|0,1)|0;r=L()|0;if(mb()|0){h=7;break a}o=sb(k,q,r)|0;if(!o){h=7;break a}else k=o}else q=t;ew(k+g|0,s|0,p|0)|0;t=p+g|0;o=s+p|0;g=(t|0)>(f|0);p=Lu(e,k,g?f:t)|0;do if(u){if((p|0)>=0?(p|0)!=0|g^1:0)break;D=n;c[D>>2]=l;c[D+4>>2]=h;D=49}else D=49;while(0);if((D|0)==49){D=0;if(v&(p|0)<0){n=m;c[n>>2]=l;c[n+4>>2]=h;n=0;m=0}else n=0}l=Sv(l|0,h|0,1,0)|0;h=L()|0;if(o>>>0>=y>>>0){D=52;break}else{g=0;t=q}}}else{n=i;m=j;k=0;D=52}while(0);if((D|0)==52){if(n|0){y=n;c[y>>2]=l;c[y+4>>2]=h}if(!m)h=0;else{y=m;c[y>>2]=l;c[y+4>>2]=h;h=0}}do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!((z|0)>1&(h|0)==0)){E=h;Ra=F;return E|0}c[E>>2]=0;c[C>>2]=0;if((i|0)!=0&(j|0)!=0?(B=i,A=c[B>>2]|0,B=c[B+4>>2]|0,z=j,!((A|0)==(c[z>>2]|0)?(B|0)==(c[z+4>>2]|0):0)):0){k=dq(b,A,B,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,0)|0;i=c[E>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{B=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[E>>2]=0;if(!k){k=j;i=0;D=71}}else{k=(i|0)==0?j:i;D=71}do if((D|0)==71){k=dq(b,c[k>>2]|0,c[k+4>>2]|0,E,C)|0;if(!k)k=Yp(b,e,f,c[E>>2]|0,c[C>>2]|0,i,j)|0;i=c[E>>2]|0;if(i)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{E=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);E=k;Ra=F;return E|0}function Zp(a,b){a=a|0;b=b|0;var d=0,e=0;e=c[a>>2]|0;b=c[b>>2]|0;d=c[e+16>>2]|0;a=c[b+16>>2]|0;b=Lu(c[e+12>>2]|0,c[b+12>>2]|0,(d|0)<(a|0)?d:a)|0;return ((b|0)==0?d-a|0:b)|0}function _p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<1){c=Eu(b)|0;if((c|0)<=0){d=0;return d|0}}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function $p(b,c){b=b|0;c=c|0;var d=0;if((c|0)<=0){d=0;return d|0}d=0;while(1){d=d<<3^d^a[b>>0];if((c|0)<=1)break;else{b=b+1|0;c=c+-1|0}}d=d&2147483647;return d|0}function aq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=av(a,c,b)|0;else a=1;return a|0}function bq(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;if((b|0)==(d|0))a=Lu(a,c,b)|0;else a=1;return a|0}function cq(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,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;k=n+24|0;h=n+16|0;g=n;l=n+32|0;m=a+56+(d<<2)|0;i=c[m>>2]|0;c[l>>2]=i;j=i;if(!i){switch(d|0){case 18:{k=c[a+20>>2]|0;d=c[a+224>>2]|0;c[g>>2]=c[a+16>>2];c[g+4>>2]=k;c[g+8>>2]=d;g=Bb(52240,g)|0;d=133;break}case 7:{c[h>>2]=c[a+220>>2];g=Bb(51509,h)|0;d=129;break}default:{g=c[25936+(d<<2)>>2]|0;d=c[a+20>>2]|0;c[k>>2]=c[a+16>>2];c[k+4>>2]=d;g=Bb(g,k)|0;d=133}}if(!g){d=7;i=0}else{d=qd(c[a+12>>2]|0,g,-1,d,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{a=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}j=c[l>>2]|0;c[m>>2]=j;i=j}}else d=0;if((f|0)==0|(i|0)==0){f=d;c[e>>2]=j;Ra=n;return f|0}m=b[i+16>>1]|0;h=m<<16>>16;if(!(m<<16>>16>0&(d|0)==0)){f=d;c[e>>2]=j;Ra=n;return f|0}g=0;do{d=g;g=g+1|0;d=Yc(i,g,c[f+(d<<2)>>2]|0)|0}while((g|0)<(h|0)&(d|0)==0);c[e>>2]=j;Ra=n;return d|0}function dq(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=Ra;Ra=Ra+16|0;j=l;k=b+248|0;h=c[k>>2]|0;if(!h){i=b+244|0;h=c[i>>2]|0;if(!h){c[j>>2]=c[b+20>>2];h=Bb(53537,j)|0;c[i>>2]=h;if(!h){f=7;Ra=l;return f|0}}h=ad(c[b+12>>2]|0,c[b+16>>2]|0,h,53549,d,e,0,k)|0}else h=ld(h,d,e)|0;if(h|0){f=h;Ra=l;return f|0}h=c[k>>2]|0;if((h|0)!=0?(c[h+16>>2]|0)!=0:0)j=c[h>>2]|0;else j=0;c[g>>2]=j;if(!f){f=0;Ra=l;return f|0}i=nb(j+20|0)|0;do if(i){h=jd(c[k>>2]|0,i,j,0,81)|0;j=i+j|0;b=j+20|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(b|0));if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=0;break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=0;break}else h=0}else{i=0;h=7}while(0);c[f>>2]=i;f=h;Ra=l;return f|0}function eq(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;m=d+4|0;p=c[m>>2]|0;n=d+28|0;a:do if((c[n>>2]|0)==0?(o=(e|0)==0,(p|0)>0):0){l=0;b:while(1){j=c[(c[d>>2]|0)+(l<<2)>>2]|0;k=j+40|0;h=j+60|0;i=j+64|0;c:do if(o){g=fq(b,j)|0;if(g|0){q=43;break b}}else{do{g=fq(b,j)|0;if(g|0){q=43;break b}if(!(c[k>>2]|0))break c;r=c[h>>2]|0;g=Lu(c[i>>2]|0,e,(r|0)>(f|0)?f:r)|0;g=(g|0)==0?r-f|0:g}while((g|0)<0);if((g|0)!=0&(a[j+4>>0]|0)!=0){if(!(a[j+5>>0]|0)){g=c[k>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{r=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=j+52|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}r=h;if((c[i+304>>2]|0)>>>0<=r>>>0?(c[i+308>>2]|0)>>>0>r>>>0:0){r=i+300|0;c[h>>2]=c[r>>2];c[r>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{r=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0}c[k>>2]=0}}while(0);if(c[n>>2]|0)break a;l=l+1|0;if((l|0)>=(c[m>>2]|0))break a}if((q|0)==43)return g|0}while(0);e=c[d>>2]|0;n=p+-1|0;if((p|0)<=1){r=0;return r|0}b=n;while(1){d=b;b=b+-1|0;d:do if((d|0)<(p|0)){k=b;j=c[e+(b<<2)>>2]|0;do{l=k;k=k+1|0;f=e+(k<<2)|0;i=c[f>>2]|0;h=(c[j+40>>2]|0)==0;m=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;q=37}else{o=c[j+60>>2]|0;g=c[i+60>>2]|0;r=o-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(r|0)<0?o:g)|0;g=(g|0)==0?r:g}else q=37;if((q|0)==37){q=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break d;r=e+(l<<2)|0;j=c[r>>2]|0;c[f>>2]=j;c[r>>2]=m}while((k|0)<(n|0))}while(0);if((d|0)<=1){g=0;break}}return g|0}function fq(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=e+72|0;f=c[s>>2]|0;if(!f)f=c[e+40>>2]|0;else f=f+(c[e+76>>2]|0)|0;if((f|0)!=0?(g=e+40|0,h=c[g>>2]|0,f>>>0<(h+(c[e+44>>2]|0)|0)>>>0):0){l=f;i=h;q=g}else r=6;do if((r|0)==6){k=e+56|0;f=c[k>>2]|0;if(f|0){g=c[f>>2]|0;j=e+40|0;f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{r=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[j>>2]=0;if(!g){s=0;return s|0}h=c[g+8>>2]|0;i=(c[h>>2]|0)+1|0;c[e+64>>2]=c[g+12>>2];c[e+60>>2]=c[g+16>>2];f=nb(i)|0;if(!f){s=7;return s|0}ew(f|0,c[h+4>>2]|0,i|0)|0;c[e+76>>2]=i;c[e+44>>2]=i;c[s>>2]=f;c[j>>2]=f;c[k>>2]=(c[k>>2]|0)+4;s=0;return s|0}j=e+40|0;if(!(a[e+5>>0]|0)){f=c[j>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{q=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=e+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}q=g;if((c[h+304>>2]|0)>>>0<=q>>>0?(c[h+308>>2]|0)>>>0>q>>>0:0){q=h+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[j>>2]=0;h=e+32|0;g=h;f=c[g>>2]|0;g=c[g+4>>2]|0;q=e+16|0;o=c[q+4>>2]|0;if(!((g|0)<(o|0)|((g|0)==(o|0)?f>>>0<(c[q>>2]|0)>>>0:0))){s=0;return s|0}q=Sv(f|0,g|0,1,0)|0;f=L()|0;o=h;c[o>>2]=q;c[o+4>>2]=f;f=dq(b,q,f,j,e+44|0)|0;if(!f){i=c[j>>2]|0;l=i;q=j;break}else{s=f;return s|0}}while(0);o=e+52|0;h=c[o>>2]|0;a:do if(h){f=i;j=l+20|0;b=e+48|0;k=e+44|0;g=c[b>>2]|0;if((j-f|0)>(g|0)){while(1){i=(c[k>>2]|0)-g|0;i=(i|0)<4096?i:4096;f=jd(h,f+g|0,i,g,81)|0;if(f|0){p=f;r=94;break}h=(c[b>>2]|0)+i|0;c[b>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));g=c[b>>2]|0;m=c[o>>2]|0;if((g|0)==(c[k>>2]|0))break;if(!m){k=0;break a}f=c[q>>2]|0;if((j-f|0)<=(g|0)){k=m;break a}else h=m}if((r|0)==94)return p|0;do if(m|0){f=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,m);break}n=m;if((c[f+304>>2]|0)>>>0<=n>>>0?(c[f+308>>2]|0)>>>0>n>>>0:0){n=f+300|0;c[m>>2]=c[n>>2];c[n>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{n=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[o>>2]=0;c[b>>2]=0;k=0}else k=h}else k=0;while(0);g=a[l>>0]|0;f=g&255;if(f&128){n=d[l+1>>0]|0;f=n<<7|g&127;if(n&128){n=d[l+2>>0]|0;f=n<<14|f&16383;if(n&128){n=d[l+3>>0]|0;f=n<<21|f&2097151;if(!(n&128))g=4;else{f=(a[l+4>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;i=l+g|0;h=a[i>>0]|0;g=h&255;if(g&128){n=d[i+1>>0]|0;g=n<<7|h&127;if(n&128){n=d[i+2>>0]|0;g=n<<14|g&16383;if(n&128){n=d[i+3>>0]|0;g=n<<21|g&2097151;if(!(n&128))h=4;else{g=(a[i+4>>0]&7)<<28|g&268435455;h=5}}else h=3}else h=2}else h=1;m=i+h|0;if((g|0)<1){s=267;return s|0}n=e+44|0;l=m;if(((c[q>>2]|0)+(c[n>>2]|0)-l|0)<(g|0)){s=267;return s|0}b=e+68|0;h=c[b>>2]|0;if((f|0)>(h|0)){s=267;return s|0}i=Sv(g|0,((g|0)<0)<<31>>31|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;t=((h|0)<0)<<31>>31;do if((j|0)>(t|0)|(j|0)==(t|0)&i>>>0>h>>>0){j=cw(i|0,j|0,1)|0;h=L()|0;k=e+64|0;i=c[k>>2]|0;if(mb()|0){t=7;return t|0}h=sb(i,j,h)|0;if(!h){t=7;return t|0}else{c[k>>2]=h;c[b>>2]=j;h=c[o>>2]|0;break}}else h=k;while(0);b:do if(h|0){b=g+10+l|0;l=e+48|0;i=c[l>>2]|0;k=h;while(1){h=c[q>>2]|0;if((b-h|0)<=(i|0))break b;j=(c[n>>2]|0)-i|0;j=(j|0)<4096?j:4096;h=jd(k,h+i|0,j,i,81)|0;if(h|0){p=h;r=94;break}h=(c[l>>2]|0)+j|0;c[l>>2]=h;h=(c[q>>2]|0)+h|0;i=h+20|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));i=c[l>>2]|0;k=c[o>>2]|0;if((i|0)==(c[n>>2]|0))break;if(!k)break b}if((r|0)==94)return p|0;do if(k|0){h=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}t=k;if((c[h+304>>2]|0)>>>0<=t>>>0?(c[h+308>>2]|0)>>>0>t>>>0:0){t=h+300|0;c[k>>2]=c[t>>2];c[t>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[o>>2]=0;c[l>>2]=0}while(0);ew((c[e+64>>2]|0)+f|0,m|0,g|0)|0;c[e+60>>2]=g+f;h=m+g|0;f=a[h>>0]|0;g=f&255;i=e+76|0;if(g&128){t=d[h+1>>0]|0;f=t<<7|f&127;if(t&128){t=d[h+2>>0]|0;f=t<<14|f&16383;if(t&128){t=d[h+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=f;f=4}else{g=(a[h+4>>0]&7)<<28|f&268435455;f=5}}else{g=f;f=3}}else{g=f;f=2}}else f=1;c[i>>2]=g;f=h+f|0;c[s>>2]=f;c[e+80>>2]=0;if((g|0)>((c[n>>2]|0)-f+(c[q>>2]|0)|0)){t=267;return t|0}if((c[e+48>>2]|0)==0?a[f+(g+-1)>>0]|0:0){t=267;return t|0}t=0;return t|0} function qk(f,g,h,i,j,k){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,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,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;Y=Ra;Ra=Ra+96|0;R=Y+32|0;Q=Y+24|0;O=Y+16|0;w=Y+8|0;u=Y;S=Y+56|0;T=Y+84|0;P=f+40|0;X=c[P>>2]|0;c[P>>2]=X+1;P=f+8|0;l=c[P>>2]|0;a:do if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))W=15;else{V=0;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];V=n+284|0;c[V>>2]=(c[V>>2]|0)+1;break b}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=15}while(0);if((W|0)==15)m=_d(n,224,0)|0;if(!m)V=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[P>>2]=m;Di(m,61,0,1,0)|0;V=m}}else V=l;while(0);N=(h&4|0)!=0;if(i)if(!(c[g+4>>2]&2048))M=i;else{o=c[c[g+20>>2]>>2]|0;p=c[o>>2]|0;c:do if((p|0)>0){l=0;while(1){m=c[o+4+(l*20|0)>>2]|0;n=a[m>>0]|0;if((n+91&255)<2)do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2);if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0)break c;n=c[m+44>>2]|0;if(!n)break c;M=b[m+32>>1]|0;if(M<<16>>16>-1?(a[(c[n+4>>2]|0)+(M<<16>>16<<4)+12>>0]|0)==0:0)break c;break}default:break c}l=l+1|0;if((l|0)>=(p|0))break c}}else l=0;while(0);M=(l|0)==(p|0)?0:i}else M=0;d:do if(((((((((c[f+36>>2]|0)==0?(c[g+4>>2]&2080|0)==2048:0)?(s=c[g+20>>2]|0,(c[s+52>>2]|0)==0):0)?(c[s+8>>2]&9|0)==0:0)?(c[s+60>>2]|0)==0:0)?(c[s+36>>2]|0)==0:0)?(r=c[s+32>>2]|0,(c[r>>2]|0)==1):0)?(c[r+28>>2]|0)==0:0)?(x=c[r+24>>2]|0,(c[x+56>>2]|0)==0):0){H=c[s>>2]|0;I=c[H>>2]|0;J=(I|0)>0;if(J){l=0;do{if((a[c[H+4+(l*20|0)>>2]>>0]|0)!=-94){W=191;break d}l=l+1|0}while((l|0)<(I|0));if(!s){W=191;break}}m=c[x+72>>2]|0;if(!m)l=-1e6;else{n=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0}o=l<<16;K=o>>16;p=c[f+116>>2]|0;p=(p|0)==0?f:p;l=p+84|0;m=c[l>>2]|0;n=1<>2]=n|m,(o|0)==65536):0)?(v=c[p>>2]|0,t=v+16|0,(c[(c[t>>2]|0)+20>>2]|0)==0):0)?(a[p+199>>0]|0)==0:0){l=Pe(c[v>>2]|0,0,v,S,0,542)|0;if(l|0){cd(p,32157,u);c[p+12>>2]=l;break}G=c[S>>2]|0;c[(c[t>>2]|0)+20>>2]=G;l=c[v+92>>2]|0;o=c[G+4>>2]|0;c[o+4>>2]=c[G>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;i=o+36|0;q=(c[p>>2]|0)-(c[i>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;G=(c[14820]|0)+1|0;c[14820]=G;c[14821]=(G|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68;break}else{l=Wa[c[29352>>2]&127](m)|0;W=68}while(0);do if((W|0)==68){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{G=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);G=Se(c[o>>2]|0,p,q)|0;c[i>>2]=(c[p>>2]|0)-(q&65535);if((G|0)!=7)break;l=v+81|0;do if(!(a[l>>0]|0)){if(a[v+82>>0]|0)break;a[l>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;l=v+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[v+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);Hj(f,K,c[x+28>>2]|0,0,c[x>>2]|0);G=(I|0)==1;if(G?(b[(c[H+4>>2]|0)+32>>1]|0)<0:0){m=V+108|0;l=c[m>>2]|0;if((c[V+112>>2]|0)>(l|0)){c[m>>2]=l+1;o=c[V+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else l=Di(V,17,0,0,0)|0;Gj(f,X,K,x,108);c[w>>2]=c[x>>2];nk(f,0,39096,w);m=c[m>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[V+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;n=1;break}if(J){r=c[g+12>>2]|0;i=a[r>>0]|0;q=r+38|0;s=r+20|0;t=r+20|0;u=x+4|0;v=i<<24>>24==-125;f:do if(i<<24>>24==-88){p=1;i=0;m=a[q>>0]|0;while(1){switch(m<<24>>24){case -87:{l=s;W=95;break}case -125:{l=c[t>>2]|0;W=95;break}default:o=r}g:do if((W|0)==95){W=0;if((c[c[l>>2]>>2]|0)<2){o=r;break}do if(v)l=m;else{if(m<<24>>24==-125){l=-125;break}o=c[(c[s>>2]|0)+4+(i*20|0)>>2]|0;break g}while(0);o=c[(c[c[t>>2]>>2]|0)+4+(i*20|0)>>2]|0;m=l}while(0);l=b[(c[H+4+(i*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(o)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;p=((l<<24>>24)+-65|0)>>>0<2?p:n<<24>>24>66&1;i=i+1|0;l=(p|0)!=0;if(!((i|0)<(I|0)&l))break f}}else{o=1;p=0;while(1){switch(i<<24>>24){case -87:{l=s;W=108;break}case -125:{l=c[t>>2]|0;W=108;break}default:m=r}h:do if((W|0)==108){W=0;if((c[c[l>>2]>>2]|0)<2){m=r;break}do if(!v){if((a[q>>0]|0)==-125)break;m=c[(c[s>>2]|0)+4+(p*20|0)>>2]|0;break h}while(0);m=c[(c[c[t>>2]>>2]|0)+4+(p*20|0)>>2]|0}while(0);l=b[(c[H+4+(p*20|0)>>2]|0)+32>>1]|0;if(l<<16>>16>-1)n=a[(c[u>>2]|0)+(l<<16>>16<<4)+13>>0]|0;else n=68;l=Xj(m)|0;if(n<<24>>24==0|l<<24>>24==0)l=(l|n)<<24>>24==0?65:(l&255)+(n&255)|0;else l=n<<24>>24>66|l<<24>>24>66?67:65;o=((l<<24>>24)+-65|0)>>>0<2?o:n<<24>>24>66&1;p=p+1|0;l=(o|0)!=0;if(!((p|0)<(I|0)&l))break f}}while(0);if(!l){W=191;break}}l=c[x+8>>2]|0;if(l){w=cw(1,0,I|0)|0;w=Sv(w|0,L()|0,-1,-1)|0;x=L()|0;y=g+12|0;z=(j|0)==0;D=V+108|0;A=V+112|0;F=V+104|0;C=(M|0)==0;E=f+44|0;B=l;i:while(1){l=b[B+52>>1]|0;m=l&65535;j:do if((I|0)<=(m|0)){if((l&65535)>62|(c[B+36>>2]|0)!=0)break;do if(N){if((I|0)<(e[B+50>>1]|0))break j;if((I|0)>=(m|0))break;if(!(a[B+54>>0]|0))break j}while(0);k:do if(J){u=B+4|0;v=B+32|0;t=0;m=0;l=0;while(1){n=c[y>>2]|0;p=a[n>>0]|0;if(p<<24>>24==-88)o=a[n+38>>0]|0;else o=p;switch(o<<24>>24){case -87:{o=n+20|0;W=135;break}case -125:{o=c[n+20>>2]|0;W=135;break}default:{}}l:do if((W|0)==135){if((c[c[o>>2]>>2]|0)<2)break;do if(p<<24>>24!=-125){if((a[n+38>>0]|0)==-125)break;n=c[(c[n+20>>2]|0)+4+(t*20|0)>>2]|0;break l}while(0);n=c[(c[c[n+20>>2]>>2]|0)+4+(t*20|0)>>2]|0}while(0);o=c[H+4+(t*20|0)>>2]|0;m:do if(!(c[n+4>>2]&256)){do if(o|0){if(!(c[o+4>>2]&256))break;n=Yi(f,o)|0;W=148;break m}while(0);n=Yi(f,n)|0;if(!n){n=Yi(f,o)|0;W=148;break}else{s=c[u>>2]|0;r=b[o+32>>1]|0;W=152;break}}else{n=Yi(f,n)|0;W=148}while(0);n:do if((W|0)==148){W=0;p=c[u>>2]|0;o=b[o+32>>1]|0;if(n|0){s=p;r=o;W=152;break}n=0;do{if((b[p+(n<<1)>>1]|0)==o<<16>>16)break n;n=n+1|0}while((n|0)<(I|0))}while(0);o:do if((W|0)==152){W=0;o=0;while(1){if((b[s+(o<<1)>>1]|0)==r<<16>>16){i=c[n>>2]|0;q=c[(c[v>>2]|0)+(o<<2)>>2]|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0;if(!(Z<<24>>24==0|(p|0)!=0))do{i=i+1|0;q=q+1|0;Z=a[i>>0]|0;p=(d[208+(Z&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(Z<<24>>24==0|(p|0)!=0));if(!p){n=o;break o}}o=o+1|0;if((o|0)>=(I|0)){n=o;break}}}while(0);if((n|0)==(I|0))break k;o=cw(1,0,n|0)|0;p=L()|0;if(!((o&m|0)==0&(p&l|0)==0))break k;m=o|m;l=p|l;if(!z)c[j+(t<<2)>>2]=n;t=t+1|0;if((t|0)>=(I|0))break k}}else{m=0;l=0}while(0);if((m|0)==(w|0)&(l|0)==(x|0))break i}while(0);l=c[B+20>>2]|0;if(!l){W=191;break d}else B=l}l=c[D>>2]|0;if((c[A>>2]|0)>(l|0)){c[D>>2]=l+1;o=c[F>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(V,17,0,0,0)|0;c[O>>2]=c[B>>2];nk(f,0,39143,O);l=c[B+44>>2]|0;m=c[D>>2]|0;if((c[A>>2]|0)>(m|0)){c[D>>2]=m+1;Z=c[F>>2]|0;a[Z+(m*20|0)>>0]=108;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=K;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(V,108,X,l,K)|0;m=c[P>>2]|0;n=Ij(f,B)|0;p:do if(n|0){l=c[m>>2]|0;if(!(a[l+81>>0]|0)){f=c[m+104>>2]|0;Z=(c[m+108>>2]|0)+-1|0;a[f+(Z*20|0)+1>>0]=-9;c[f+(Z*20|0)+16>>2]=n;break}if(c[l+480>>2]|0)break;Z=(c[n>>2]|0)+-1|0;c[n>>2]=Z;if(Z|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break p}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[n>>2]=c[Z>>2];c[Z>>2]=n;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Z=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);n=(d[c[B+28>>2]>>0]|0)+3|0;do if(!C){l=(c[E>>2]|0)+1|0;c[E>>2]=l;c[M>>2]=l;if(!G)break;sk(V,X,l)}while(0);m=c[D>>2]|0;if(!(a[(c[V>>2]|0)+81>>0]|0))l=(c[F>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else W=191}else W=191;while(0);do if((W|0)==191){if(h&1|0?(c[g+4>>2]&2048|0)==0:0){O=g+12|0;h=c[O>>2]|0;c[O>>2]=0;Z=S+20|0;a[Z>>0]=1;c[S+4>>2]=127;c[S+8>>2]=128;c[S+24>>2]=0;_j(S,g)|0;Z=a[Z>>0]|0;c[O>>2]=h;if(!(Z<<24>>24)){n=5;break}if((c[c[g+20>>2]>>2]|0)<3){n=5;break}}F=f+132|0;G=c[F>>2]|0;if(!N)if(!M)E=0;else{Z=f+44|0;E=(c[Z>>2]|0)+1|0;c[Z>>2]=E;c[M>>2]=E}else{c[F>>2]=0;E=0}D=c[P>>2]|0;u=g+4|0;l=c[u>>2]|0;do if((l&32|0)==0?(c[f+52>>2]|0)==0:0){if(!(l&33554432)){c[u>>2]=l|33554432;n=f+44|0;l=(c[n>>2]|0)+1|0;c[n>>2]=l;c[g+48>>2]=l;n=D+108|0;m=c[n>>2]|0;o=D+112|0;if((c[o>>2]|0)>(m|0)){Z=m+1|0;c[n>>2]=Z;W=c[D+104>>2]|0;a[W+(m*20|0)>>0]=70;b[W+(m*20|0)+2>>1]=0;c[W+(m*20|0)+4>>2]=0;c[W+(m*20|0)+8>>2]=l;c[W+(m*20|0)+12>>2]=0;c[W+(m*20|0)+16>>2]=0;a[W+(m*20|0)+1>>0]=0;l=Z}else l=(Di(D,70,0,l,0)|0)+1|0;c[g+44>>2]=l;l=c[n>>2]|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));m=l;W=223;break}else{m=Di(D,17,0,0,0)|0;W=223;break}}p=D+108|0;l=c[p>>2]|0;i=D+112|0;if((c[i>>2]|0)>(l|0)){c[p>>2]=l+1;o=c[D+104>>2]|0;a[o+(l*20|0)>>0]=17;o=o+(l*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0));o=l}else o=Di(D,17,0,0,0)|0;if(c[u>>2]&2048|0){c[Q>>2]=c[(c[g+20>>2]|0)+20>>2];nk(f,0,39174,Q)}l=c[g+48>>2]|0;m=c[g+44>>2]|0;n=c[p>>2]|0;if((c[i>>2]|0)>(n|0)){c[p>>2]=n+1;Z=c[D+104>>2]|0;a[Z+(n*20|0)>>0]=12;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=l;c[Z+(n*20|0)+8>>2]=m;c[Z+(n*20|0)+12>>2]=0;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else Di(D,12,l,m,0)|0;l=c[g+28>>2]|0;m=c[p>>2]|0;if((c[i>>2]|0)>(m|0)){c[p>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=111;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=X;c[Z+(m*20|0)+8>>2]=l;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,111,X,l,0)|0;m=c[p>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m}else{m=0;W=223}while(0);do if((W|0)==223){s=g+12|0;v=c[s>>2]|0;l=a[v>>0]|0;if(l<<24>>24==-88)l=a[v+38>>0]|0;switch(l<<24>>24){case -87:{l=v+20|0;W=228;break}case -125:{l=c[v+20>>2]|0;W=228;break}default:t=1}if((W|0)==228)t=c[c[l>>2]>>2]|0;c[g+28>>2]=X;C=D+108|0;l=c[C>>2]|0;B=D+112|0;if((c[B>>2]|0)>(l|0)){c[C>>2]=l+1;A=c[D+104>>2]|0;a[A+(l*20|0)>>0]=113;b[A+(l*20|0)+2>>1]=0;c[A+(l*20|0)+4>>2]=X;c[A+(l*20|0)+8>>2]=t;c[A+(l*20|0)+12>>2]=0;c[A+(l*20|0)+16>>2]=0;a[A+(l*20|0)+1>>0]=0;A=l}else A=Di(D,113,X,t,0)|0;q=c[f>>2]|0;p=t+1|0;i=p*5|0;o=i+20|0;r=q+272|0;q:do if(c[r>>2]|0)if(!(a[q+81>>0]|0))W=242;else{z=0;y=1;x=0}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){l=q+300|0;n=c[l>>2]|0;if(n|0){c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}l=q+296|0;n=c[l>>2]|0;if(!n){l=q+292|0;break}else{c[l>>2]=c[n>>2];W=q+284|0;c[W>>2]=(c[W>>2]|0)+1;W=243;break q}}else l=q+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;W=242}while(0);if((W|0)==242){n=_d(q,o,0)|0;W=243}do if((W|0)==243){if(n|0){c[n+16>>2]=n+20+(p<<2);b[n+6>>1]=t;b[n+8>>1]=p;a[n+4>>0]=a[q+78>>0]|0;c[n+12>>2]=q;c[n>>2]=1;gw(n+24|0,0,i+-4|0)|0;z=n;y=0;x=n;break}l=q+81|0;if((a[l>>0]|0)==0?(a[q+82>>0]|0)==0:0){a[l>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;c[r>>2]=(c[r>>2]|0)+1;l=c[q+236>>2]|0;if(l){c[l+12>>2]=7;z=0;y=1;x=n}else{z=0;y=1;x=n}}else{z=0;y=1;x=n}}while(0);if(!(c[u>>2]&2048)){o=c[g+20>>2]|0;if(!o)o=m;else{Z=Xj(v)|0;a[T>>0]=Z<<24>>24==0?65:Z;if(x|0){Z=Yi(f,c[s>>2]|0)|0;c[x+20>>2]=Z}w=f+19|0;n=a[w>>0]|0;if(n<<24>>24){Z=n+-1<<24>>24;a[w>>0]=Z;l=c[f+148+((Z&255)<<2)>>2]|0;if(!(Z<<24>>24))W=302;else{v=n+-2<<24>>24;a[w>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0}}else{W=f+44|0;l=(c[W>>2]|0)+1|0;c[W>>2]=l;W=302}if((W|0)==302){Z=f+44|0;v=(c[Z>>2]|0)+1|0;c[Z>>2]=v}n=c[o>>2]|0;if((n|0)>0){q=S+20|0;r=S+4|0;s=S+8|0;t=S+24|0;u=D+104|0;i=o+4|0;p=n;while(1){o=c[i>>2]|0;do if(!m)m=0;else{a[q>>0]=1;c[r>>2]=127;c[s>>2]=128;c[t>>2]=0;if(!o)break;_j(S,o)|0;if(a[q>>0]|0)break;n=c[D>>2]|0;if(a[n+81>>0]|0){m=0;break}Z=c[u>>2]|0;Q=Z+(m*20|0)+1|0;R=Z+(m*20|0)+16|0;kg(n,a[Q>>0]|0,c[R>>2]|0);a[Q>>0]=0;c[R>>2]=0;a[Z+(m*20|0)>>0]=-86;m=0}while(0);o=Jj(f,o,l)|0;n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=92;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=o;c[Z+(n*20|0)+8>>2]=1;c[Z+(n*20|0)+12>>2]=v;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,92,o,1,v)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[C>>2]|0)+-1|0;Ei(D,(c[u>>2]|0)+(n*20|0)|0,T,1)}n=c[C>>2]|0;if((c[B>>2]|0)>(n|0)){c[C>>2]=n+1;Z=c[u>>2]|0;a[Z+(n*20|0)>>0]=-124;b[Z+(n*20|0)+2>>1]=0;c[Z+(n*20|0)+4>>2]=X;c[Z+(n*20|0)+8>>2]=v;c[Z+(n*20|0)+12>>2]=o;c[Z+(n*20|0)+16>>2]=0;a[Z+(n*20|0)+1>>0]=0}else n=Di(D,132,X,v,o)|0;if(!(a[(c[D>>2]|0)+81>>0]|0)){Z=c[u>>2]|0;a[Z+(n*20|0)+1>>0]=-3;c[Z+(n*20|0)+16>>2]=1}if((p|0)>1){i=i+20|0;p=p+-1|0}else break}}if(l|0?(U=a[w>>0]|0,(U&255)<8):0){a[w>>0]=U+1<<24>>24;c[f+148+((U&255)<<2)>>2]=l}do if(v|0){l=a[w>>0]|0;if((l&255)>=8)break;a[w>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=v}while(0);o=m}}else{l=c[g+20>>2]|0;r=c[l>>2]|0;Z=c[l+20>>2]|0;c[R>>2]=(m|0)==0?39084:59952;c[R+4>>2]=Z;nk(f,1,39197,R);if((c[r>>2]|0)==(t|0)){a[R>>0]=11;c[R+4>>2]=X;o=R+16|0;c[R+8>>2]=0;c[R+12>>2]=0;n=pk(f,g)|0;c[o>>2]=n;c[l+12>>2]=0;l=(kj(f,l,R)|0)==0;n=c[f>>2]|0;o=c[o>>2]|0;r:do if(o|0){do if(n|0){if(c[n+480>>2]|0){Xd(n,o);break r}p=o;if((c[n+304>>2]|0)>>>0<=p>>>0){if((c[n+308>>2]|0)>>>0<=p>>>0)break;Z=n+300|0;c[o>>2]=c[Z>>2];c[Z>>2]=o;break r}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{Z=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);if(!l){s:do if(x|0?(Z=(c[x>>2]|0)+-1|0,c[x>>2]=Z,(Z|0)==0):0){l=c[x+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break s}m=x;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[x>>2]=c[Z>>2];c[Z>>2]=x;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}while(0);break}t:do if((t|0)>0){p=v+38|0;i=v+20|0;q=v+20|0;o=0;while(1){n=a[v>>0]|0;if(n<<24>>24==-88)l=a[p>>0]|0;else l=n;switch(l<<24>>24){case -87:{l=i;W=281;break}case -125:{l=c[q>>2]|0;W=281;break}default:l=v}u:do if((W|0)==281){W=0;if((c[c[l>>2]>>2]|0)<2){l=v;break}do if(n<<24>>24!=-125){if((a[p>>0]|0)==-125)break;l=c[(c[i>>2]|0)+4+(o*20|0)>>2]|0;break u}while(0);l=c[(c[c[q>>2]>>2]|0)+4+(o*20|0)>>2]|0}while(0);n=c[r+4+(o*20|0)>>2]|0;v:do if(!(c[l+4>>2]&256)){do if(n|0){if(!(c[n+4>>2]&256))break;l=Yi(f,n)|0;break v}while(0);l=Yi(f,l)|0;if(l|0)break;l=Yi(f,n)|0}else l=Yi(f,l)|0;while(0);c[x+20+(o<<2)>>2]=l;o=o+1|0;if((o|0)==(t|0))break t}}while(0);o=m}else o=m}w:do if(x|0){l=c[D>>2]|0;if(!(a[l+81>>0]|0)){if((A|0)<0)l=(c[C>>2]|0)+-1|0;else l=A;m=c[D+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(D,m+(l*20|0)|0,z,-9);break}if(y)break;c[m+(l*20|0)+16>>2]=z;a[n>>0]=-9;break}if(!(y|(c[l+480>>2]|0)!=0)?(Z=(c[z>>2]|0)+-1|0,c[z>>2]=Z,(Z|0)==0):0){l=c[z+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,z);break w}m=z;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Z=l+300|0;c[z>>2]=c[Z>>2];c[Z>>2]=z;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{Z=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}}}while(0);if(o|0){m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;l=c[g+48>>2]|0;if((c[B>>2]|0)>(m|0)){c[C>>2]=m+1;Z=c[D+104>>2]|0;a[Z+(m*20|0)>>0]=66;b[Z+(m*20|0)+2>>1]=0;c[Z+(m*20|0)+4>>2]=l;c[Z+(m*20|0)+8>>2]=0;c[Z+(m*20|0)+12>>2]=0;c[Z+(m*20|0)+16>>2]=0;a[Z+(m*20|0)+1>>0]=0}else Di(D,66,l,0,0)|0;l=c[g+44>>2]|0;m=c[C>>2]|0;if(!(a[(c[D>>2]|0)+81>>0]|0))l=(c[D+104>>2]|0)+((((l|0)<1?m:l)+-1|0)*20|0)|0;else l=59308;c[l+4>>2]=m+-1}}while(0);if(E|0)sk(V,X,E);c[F>>2]=G;n=2}while(0);if(!((j|0)!=0&(n+-3|0)>>>0>1)){c[k>>2]=X;Ra=Y;return n|0}m=c[g+12>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)l=a[m+38>>0]|0;switch(l<<24>>24){case -87:{l=m+20|0;W=369;break}case -125:{l=c[m+20>>2]|0;W=369;break}default:l=1}if((W|0)==369){l=c[c[l>>2]>>2]|0;if((l|0)<=0){c[k>>2]=X;Ra=Y;return n|0}}m=0;do{c[j+(m<<2)>>2]=m;m=m+1|0}while((m|0)!=(l|0));c[k>>2]=X;Ra=Y;return n|0}function rk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[a+116>>2]|0;f=(f|0)==0?a:f;a=f+84|0;d=c[a>>2]|0;e=1<>2]=d|e;if((b|0)!=1)return;Oe(f)|0;return}function sk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=d+108|0;g=c[i>>2]|0;j=d+112|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=70;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=0;c[h+(g*20|0)+8>>2]=f;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else Di(d,70,0,f,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=36;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0;h=g}else h=Di(d,36,e,0,0)|0;g=c[i>>2]|0;if((c[j>>2]|0)>(g|0)){c[i>>2]=g+1;j=c[d+104>>2]|0;a[j+(g*20|0)>>0]=90;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=e;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=f;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0}else Di(d,90,e,0,f)|0;g=c[i>>2]|0;if((g|0)>0)b[(c[d+104>>2]|0)+((g+-1|0)*20|0)+2>>1]=128;if(a[(c[d>>2]|0)+81>>0]|0){d=59308;d=d+8|0;c[d>>2]=g;return}d=(c[d+104>>2]|0)+(((h|0)<0?g+-1|0:h)*20|0)|0;d=d+8|0;c[d>>2]=g;return}function tk(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;m=t+8|0;p=t+4|0;s=t;o=c[d+8>>2]|0;c[p>>2]=0;c[s>>2]=0;if((e|0)==0|(o|0)==0){Ra=t;return}j=a[e>>0]|0;k=j&255;a:do switch(j<<24>>24){case 44:{l=d+56|0;m=c[l>>2]|0;h=m+-1|0;c[l>>2]=h;Tj(d,c[e+12>>2]|0,h,g^16);tk(d,c[e+16>>2]|0,f,g);h=c[o+12>>2]|0;g=0-m|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,o,g);break a}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[o+108>>2];break a}}case 43:{tk(d,c[e+12>>2]|0,f,g);tk(d,c[e+16>>2]|0,f,g);break}case 19:{Tj(d,c[e+12>>2]|0,f,g);break}case -89:{o=(a[e+38>>0]|0)==-96;h=c[e+12>>2]|0;g=o?16:0;if(o^(a[(c[(c[e+16>>2]|0)+8>>2]|0)+4>>0]|0)==0){tk(d,h,f,g);break a}else{Tj(d,h,f,g);break a}}case -96:case 45:{g=128;i=j<<24>>24==45?53:52;n=12;break}case 53:case 52:case 57:case 54:case 55:case 56:{i=k;n=12;break}case 51:case 50:{h=Lj(d,c[e+12>>2]|0,p)|0;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=j;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break a}else{Di(o,k,h,f,0)|0;break a}}case 48:{Sj(d,c[e+12>>2]|0,c[e+20>>2]|0,f,67,g);break}case 49:{h=d+56|0;j=c[h>>2]|0;i=j+-1|0;c[h>>2]=i;Rj(d,e,i,(g|0)==0?i:f);i=o+108|0;h=c[i>>2]|0;if((c[o+112>>2]|0)>(h|0)){c[i>>2]=h+1;e=c[o+104>>2]|0;a[e+(h*20|0)>>0]=11;b[e+(h*20|0)+2>>1]=0;c[e+(h*20|0)+4>>2]=0;c[e+(h*20|0)+8>>2]=f;c[e+(h*20|0)+12>>2]=0;c[e+(h*20|0)+16>>2]=0;a[e+(h*20|0)+1>>0]=0}else Di(o,11,0,f,0)|0;g=c[o+12>>2]|0;h=0-j|0;if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,o,h);break a}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[i>>2];break a}}default:{c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37}}while(0);do if((n|0)==12){j=e+12|0;k=c[j>>2]|0;h=a[k>>0]|0;if(h<<24>>24==-88)h=a[k+38>>0]|0;switch(h<<24>>24){case -87:{l=k+20|0;n=17;break}case -125:{l=c[k+20>>2]|0;n=17;break}default:{}}if((n|0)==17?(c[c[l>>2]>>2]|0)>=2:0){c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0)h=(c[m>>2]|0)!=0&1;else h=0;n=37;break}m=Lj(d,k,p)|0;e=e+16|0;o=Lj(d,c[e>>2]|0,s)|0;Mj(d,c[j>>2]|0,c[e>>2]|0,i,m,o,f,g)}while(0);do if((n|0)==37){if(h|0){h=o+108|0;g=c[h>>2]|0;if((c[o+112>>2]|0)>(g|0)){c[h>>2]=g+1;o=c[o+104>>2]|0;a[o+(g*20|0)>>0]=11;b[o+(g*20|0)+2>>1]=0;c[o+(g*20|0)+4>>2]=0;c[o+(g*20|0)+8>>2]=f;c[o+(g*20|0)+12>>2]=0;c[o+(g*20|0)+16>>2]=0;a[o+(g*20|0)+1>>0]=0;break}else{Di(o,11,0,f,0)|0;break}}c[m>>2]=0;if((c[e+4>>2]&1|0)==0?(uk(e,m)|0)!=0:0){if(!(c[m>>2]|0))break}else n=43;j=Lj(d,e,p)|0;h=(g|0)!=0&1;g=o+108|0;i=c[g>>2]|0;if((c[o+112>>2]|0)>(i|0)){c[g>>2]=i+1;o=c[o+104>>2]|0;a[o+(i*20|0)>>0]=18;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=j;c[o+(i*20|0)+8>>2]=f;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0;break}else{Di(o,18,j,f,h)|0;break}}while(0);h=c[p>>2]|0;if(h|0?(q=d+19|0,r=a[q>>0]|0,(r&255)<8):0){a[q>>0]=r+1<<24>>24;c[d+148+((r&255)<<2)>>2]=h}h=c[s>>2]|0;if(!h){Ra=t;return}g=d+19|0;i=a[g>>0]|0;if((i&255)>=8){Ra=t;return}a[g>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=h;Ra=t;return}function uk(b,d){b=b|0;d=d|0;var e=0,f=0;f=Ra;Ra=Ra+16|0;e=f;a:do if(!b)b=0;else{if(c[b+4>>2]&1024|0){c[d>>2]=c[b+8>>2];b=1;break}switch(a[b>>0]|0){case -90:{b=uk(c[b+12>>2]|0,d)|0;break a}case -91:break;default:{b=0;break a}}if(!(uk(c[b+12>>2]|0,e)|0))b=0;else{c[d>>2]=0-(c[e>>2]|0);b=1}}while(0);Ra=f;return b|0}function vk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=Ra;Ra=Ra+16|0;j=k;f=c[b>>2]|0;if(a[f+165>>0]|0){j=0;Ra=k;return j|0}if(a[b+18>>0]|0){j=0;Ra=k;return j|0}if((e|0)==0|(0==0?(c[f+32>>2]&268435457|0)==1:0)){j=0;Ra=k;return j|0}f=a[e>>0]|0;do if(!(f<<24>>24)){f=39441;h=5}else{l=f&255;f=208+l|0;if((l|32|0)==115){f=a[e+1>>0]|0;if(!(f<<24>>24)){f=39442;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==113){f=a[e+2>>0]|0;if(!(f<<24>>24)){f=39443;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==108){f=a[e+3>>0]|0;if(!(f<<24>>24)){f=39444;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==105){f=a[e+4>>0]|0;if(!(f<<24>>24)){f=39445;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==116){f=a[e+5>>0]|0;if(!(f<<24>>24)){f=39446;h=5;break}l=f&255;f=208+l|0;if((l|32|0)==101){f=a[e+6>>0]|0;if(!(f<<24>>24)){f=39447;h=5;break}if(f<<24>>24==95)break;else{g=95;f=208+(f&255)|0}}else g=101}else g=116}else g=105}else g=108}else g=113}else g=115;i=d[f>>0]|0;h=9}while(0);if((h|0)==5){i=0;g=a[208+(d[f>>0]|0)>>0]|0;h=9}if((h|0)==9?(i|0)!=(g&255|0):0){l=0;Ra=k;return l|0}c[j>>2]=e;cd(b,39449,j);l=1;Ra=k;return l|0}function wk(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;j=qj(b,e)|0;if(!j){k=-1;return k|0}i=c[b+20>>2]|0;e=i+-1|0;if((i|0)>0){i=e;h=(c[b+16>>2]|0)+(e<<4)|0;while(1){f=c[h>>2]|0;if(f|0){g=a[f>>0]|0;e=(d[208+(g&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(g<<24>>24==0|(e|0)!=0)){g=j;do{f=f+1|0;g=g+1|0;l=a[f>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}if(!e){e=i;break}}if(!i){k=10;break}e=i+-1|0;if((i|0)>0){i=e;h=h+-16|0}else break}if((k|0)==10){e=109-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!e){f=j;g=50919;do{g=g+1|0;f=f+1|0;l=a[g>>0]|0;e=(d[208+(l&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(l<<24>>24==0|(e|0)!=0))}e=((e|0)!=0)<<31>>31}if(b)k=16}else k=16;if((k|0)==16){if(c[b+480>>2]|0){Xd(b,j);l=e;return l|0}l=j;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[j>>2]=c[l>>2];c[l>>2]=j;l=e;return l|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);l=e;return l|0}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);l=e;return l|0}return 0}function xk(a){a=a|0;var f=0,g=0,h=0,i=0,j=0,k=0;j=c[(c[a+12>>2]|0)+4>>2]|0;f=b[a+52>>1]|0;if(!(f<<16>>16)){k=0;a=a+48|0;b[a>>1]=k;return}k=c[a+4>>2]|0;i=f&65535;g=0;h=0;do{f=b[k+(g<<1)>>1]|0;if(f<<16>>16<0)f=1;else f=d[j+(f<<16>>16<<4)+14>>0]|0;h=f+h|0;g=g+1|0}while(g>>>0>>0);f=h<<2;if(f>>>0>=8){if(f>>>0>255){h=40;g=0;do{h=(h&65535)+40|0;k=f;f=bw(f|0,g|0,4)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>4095);h=h&65535}else{h=40;g=0}if(g>>>0>0|(g|0)==0&f>>>0>15)do{h=(h&65535)+10&65535;k=f;f=bw(f|0,g|0,1)|0;j=g;g=L()|0}while(j>>>0>0|(j|0)==0&k>>>0>31)}else{if(!f){k=0;a=a+48|0;b[a>>1]=k;return}h=40;g=0;do{h=(h&65535)+65526|0;f=cw(f|0,g|0,1)|0;g=L()|0}while(g>>>0<0|(g|0)==0&f>>>0<8);h=h&65535}k=(h&65535)+65526+(e[3648+((f&7)<<1)>>1]|0)&65535;a=a+48|0;b[a>>1]=k;return}function yk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;j=k+32|0;h=j;g=c[h>>2]|0;h=c[h+4>>2]|0;l=j;c[l>>2]=g&-69|64;c[l+4>>2]=h;Kk(d,f,0);c[j>>2]=g;c[j+4>>2]=h;if(c[d+36>>2]|0){l=0;return l|0}j=f;while(1){f=c[j+52>>2]|0;if(!f)break;else j=f}a:do if(!k){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](80)|0;i=27;break}f=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;h=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){l=0;return l|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){l=0;return l|0}}else{do if((e[k+276>>1]|0)>=80){g=k+300|0;f=c[g>>2]|0;if(f|0){c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}g=k+296|0;f=c[g>>2]|0;if(!f){f=k+292|0;break}else{c[g>>2]=c[f>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;i=27;break a}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(k,80,0)|0;i=27}while(0);if((i|0)==27)if(!f){l=0;return l|0}g=f+4|0;h=g+76|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));g=f+32|0;c[g>>2]=1;c[f>>2]=0;b[f+44>>1]=200;Tk(c[d>>2]|0,c[j>>2]|0,f+42|0,f+4|0);Uk(d,f,j);b[f+40>>1]=-1;if(!(a[k+81>>0]|0)){l=f;return l|0}if(c[k+480>>2]|0){Vi(k,f);l=0;return l|0}l=(c[g>>2]|0)+-1|0;c[g>>2]=l;if(l|0){l=0;return l|0}Vi(k,f);l=0;return l|0}function zk(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;l=e+20|0;g=c[l>>2]|0;a:do if(!g){j=c[d>>2]|0;k=e+42|0;i=b[k>>1]|0;g=(i<<16>>16)+1|0;do if(i<<16>>16>=0){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;if(!g)break;else j=g}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){m=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=m>>>0)&1}h=Wa[c[29340>>2]&127](i)|0;if(!h)break;g=Wa[c[29352>>2]&127](h)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;j=h}else j=h}if((b[k>>1]|0)>0){h=e+4|0;g=0;do{a[j+g>>0]=a[(c[h>>2]|0)+(g<<4)+13>>0]|0;g=g+1|0}while((g|0)<(b[k>>1]|0))}else g=0;do{a[j+g>>0]=0;if((g|0)<=0)break;g=g+-1|0}while((a[j+g>>0]|0)==65);c[l>>2]=j;break a}while(0);g=j+81|0;if(a[g>>0]|0)return;if(a[j+82>>0]|0)return;a[g>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;g=j+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[j+236>>2]|0;if(!g)return;c[g+12>>2]=7;return}else j=g;while(0);e=(Eu(j)|0)&1073741823;if(!e)return;if(!f){g=c[d>>2]|0;if(!(a[g+81>>0]|0)){Ei(d,(c[d+104>>2]|0)+(((c[d+108>>2]|0)+-1|0)*20|0)|0,j,e);return}else{kg(g,e,j);return}}i=d+108|0;g=c[i>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[i>>2]=g+1;m=c[d+104>>2]|0;a[m+(g*20|0)>>0]=91;b[m+(g*20|0)+2>>1]=0;c[m+(g*20|0)+4>>2]=f;c[m+(g*20|0)+8>>2]=e;c[m+(g*20|0)+12>>2]=0;c[m+(g*20|0)+16>>2]=0;a[m+(g*20|0)+1>>0]=0}else g=Di(d,91,f,e,0)|0;h=c[d>>2]|0;if(a[h+81>>0]|0){kg(h,e,j);return}if((g|0)<0)g=(c[i>>2]|0)+-1|0;Ei(d,(c[d+104>>2]|0)+(g*20|0)|0,j,e);return}function Ak(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=Ra;Ra=Ra+224|0;l=r+192|0;j=r+96|0;o=r+184|0;p=r;c[o>>2]=0;q=c[b>>2]|0;n=b+36|0;if(c[n>>2]|0){Ra=r;return}c[j>>2]=e;h=c[q+108>>2]|0;f=l+4|0;c[f>>2]=r+112;c[l>>2]=q;c[l+8>>2]=70;g=l+12|0;c[g>>2]=h;h=l+16|0;c[h>>2]=0;k=l+20|0;a[k>>0]=0;i=l+21|0;a[i>>0]=1;tb(l,d,j);e=c[f>>2]|0;if(((e|0)!=0?(a[e+(c[h>>2]|0)>>0]=0,(c[g>>2]|0)!=0):0)?(a[i>>0]&4)==0:0)i=$d(l)|0;else i=c[f>>2]|0;if(((a[k>>0]|0)==7?(m=q+81|0,(a[m>>0]|0)==0):0)?(a[q+82>>0]|0)==0:0){a[m>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;e=q+272|0;c[e>>2]=(c[e>>2]|0)+1;e=c[q+236>>2]|0;if(e|0)c[e+12>>2]=7}if(!i){if(!(a[q+81>>0]|0))c[b+12>>2]=18;c[n>>2]=(c[n>>2]|0)+1;Ra=r;return}g=b+18|0;a[g>>0]=(a[g>>0]|0)+1<<24>>24;h=b+188|0;e=p;d=h;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));e=h;f=e+88|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));ud(b,i,o)|0;d=c[o>>2]|0;e=q+480|0;do if(d|0){if(c[e>>2]|0){Xd(q,d);break}o=d;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){o=q+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);do if(!(c[e>>2]|0)){o=i;if((c[q+304>>2]|0)>>>0<=o>>>0?(c[q+308>>2]|0)>>>0>o>>>0:0){q=q+300|0;c[i>>2]=c[q>>2];c[q>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{q=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}else Xd(q,i);while(0);e=h;d=p;f=e+88|0;do{a[e>>0]=a[d>>0]|0;e=e+1|0;d=d+1|0}while((e|0)<(f|0));a[g>>0]=(a[g>>0]|0)+-1<<24>>24;Ra=r;return}function Bk(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0;h=d+108|0;g=c[h>>2]|0;if((c[d+112>>2]|0)>(g|0)){c[h>>2]=g+1;h=c[d+104>>2]|0;a[h+(g*20|0)>>0]=-115;b[h+(g*20|0)+2>>1]=0;c[h+(g*20|0)+4>>2]=e;c[h+(g*20|0)+8>>2]=0;c[h+(g*20|0)+12>>2]=0;c[h+(g*20|0)+16>>2]=0;a[h+(g*20|0)+1>>0]=0}else g=Di(d,141,e,0,0)|0;gd(d,g,f,-7);if((c[(c[d>>2]|0)+20>>2]|0)<=0)return;g=0;do{fd(d,g);g=g+1|0}while((g|0)<(c[(c[d>>2]|0)+20>>2]|0));return}function Ck(a,d){a=a|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+32|0;i=m;g=m+4|0;if(!d){l=0;Ra=m;return l|0}k=a+24|0;l=e[k>>1]|0;b[k>>1]=l&28655;f=c[a>>2]|0;c[g>>2]=f;c[g+4>>2]=125;c[g+8>>2]=126;c[g+12>>2]=0;c[g+24>>2]=a;j=d+24|0;h=f+208|0;n=(c[h>>2]|0)+(c[j>>2]|0)|0;c[h>>2]=n;h=c[(c[f>>2]|0)+120>>2]|0;if((h|0)<(n|0)){c[i>>2]=h;cd(f,41637,i);n=1;Ra=m;return n|0}_j(g,d)|0;f=c[g>>2]|0;n=f+208|0;c[n>>2]=(c[n>>2]|0)-(c[j>>2]|0);n=b[k>>1]|0;j=d+4|0;c[j>>2]=c[j>>2]|n&-32752&65535;b[k>>1]=l&36880|n&65535;if((c[a+20>>2]|0)>0){n=1;Ra=m;return n|0}n=(c[f+36>>2]|0)>0&1;Ra=m;return n|0}function Dk(f,h){f=f|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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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.0,qa=0;oa=Ra;Ra=Ra+272|0;r=oa+248|0;m=oa+240|0;p=oa+232|0;O=oa+224|0;N=oa+216|0;M=oa+208|0;J=oa+200|0;I=oa+192|0;H=oa+176|0;G=oa+160|0;D=oa+152|0;C=oa+144|0;B=oa+136|0;z=oa+128|0;y=oa+120|0;w=oa+112|0;ja=oa+104|0;ia=oa+88|0;ha=oa+72|0;ba=oa+64|0;ga=oa+56|0;da=oa+48|0;ca=oa+40|0;o=oa+32|0;R=oa;K=oa+252|0;i=c[f+24>>2]|0;na=c[i>>2]|0;a:do switch(a[h>>0]|0){case 55:case 56:case 52:case 53:case 48:case 54:case 57:{ma=385;break}case -95:{F=h+20|0;v=c[F>>2]|0;u=(v|0)==0;if(u)p=0;else p=c[v>>2]|0;j=c[na>>2]|0;m=a[j+78>>0]|0;P=i+24|0;Q=b[P>>1]&16385;t=c[h+8>>2]|0;if(!t)s=0;else s=(Eu(t)|0)&1073741823;r=Jd(j,t,p,m,0)|0;if(r){o=(c[r+20>>2]|0)!=0&1;q=r+4|0;do if(c[q>>2]&1024|0){la=h+4|0;c[la>>2]=c[la>>2]|266240;if((p|0)!=2){c[h+28>>2]=(a[c[r+32>>2]>>0]|0)==117?8388608:125829120;break}j=c[v+24>>2]|0;g[R>>3]=-1.0;if((a[j>>0]|0)==-111){m=c[j+8>>2]|0;if(!m)j=0;else j=(Eu(m)|0)&1073741823;Lg(m,R,j,1)|0;pa=+g[R>>3];j=~~(pa*134217728.0);if(!(pa>1.0)){c[h+28>>2]=j;if((j|0)>=0)break}else ma=247}else ma=247;if((ma|0)==247)c[h+28>>2]=-1;cd(na,39784,w);la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}while(0);p=r+32|0;j=c[p>>2]|0;m=c[na>>2]|0;b:do if(((a[m+165>>0]|0)==0?(a[na+200>>0]|0)==0:0)?(x=c[m+312>>2]|0,x|0):0){j=$a[x&127](c[m+316>>2]|0,31,0,j,0,c[na+240>>2]|0)|0;do if((j|0)!=1)if((j|2|0)==2)if(!j)break b;else break;else{cd(na,39231,z);j=1;ma=259;break}else{cd(na,39216,y);j=23;ma=259}while(0);if((ma|0)==259){c[na+12>>2]=j;c[B>>2]=c[p>>2];cd(na,39855,B);na=i+20|0;c[na>>2]=(c[na>>2]|0)+1}a[h>>0]=114;na=1;Ra=oa;return na|0}while(0);j=c[q>>2]|0;if(j&10240|0){la=h+4|0;c[la>>2]=c[la>>2]|524288}if((j&2048|0)==0?(A=e[P>>1]|0,(A&34|0)!=0):0){c[C>>2]=39890;c[C+4>>2]=(A&32|0)==0?((A&4|0)==0?40098:40144):40126;cd(na,40162,C);j=c[q>>2]|0}if(!(j&262144)){q=0;w=r;p=0}else{w=(a[na+18>>0]|0)==0&(c[7391]|0)==0;q=w;w=w?0:r;p=0}}else{w=Jd(c[na>>2]|0,t,-2,m,0)|0;p=(w|0)==0;q=p;p=(p^1)&1;o=0}c:do if((d[na+200>>0]|0)<2){if(((w|0)!=0?(c[w+24>>2]|0)==0:0)?(c[h+4>>2]&16777216|0)!=0:0){c[D>>2]=s;c[D+4>>2]=t;cd(na,39918,D);ma=287}else ma=273;do if((ma|0)==273){do if(o|0){m=b[P>>1]|0;j=c[w+4>>2]|0;if((m&1?(E=c[h+44>>2]|0,!((j&65536|0)!=0&(E|0)==0)):0)?!((m&16384)==0&(E|0)!=0):0)break;if((j&65536|0)==0?(c[h+44>>2]|0)==0:0){c[G>>2]=39969;c[G+4>>2]=s;c[G+8>>2]=t;cd(na,39979,G)}else{c[H>>2]=39962;c[H+4>>2]=s;c[H+8>>2]=t;cd(na,39979,H)}o=i+20|0;c[o>>2]=(c[o>>2]|0)+1;o=0;break c}while(0);if(q?(a[(c[na>>2]|0)+165>>0]|0)==0:0){c[I>>2]=s;c[I+4>>2]=t;cd(na,40008,I);ma=287;break}if(p|0){c[J>>2]=s;c[J+4>>2]=t;cd(na,40031,J);ma=287}}while(0);if((ma|0)==287){la=i+20|0;c[la>>2]=(c[la>>2]|0)+1}if(!o)o=0;else{b[P>>1]=((c[h+44>>2]|0)==0^49151)&e[P>>1];o=1}}while(0);d:do if(!u?(n=c[v>>2]|0,(n|0)>0):0){j=v+4|0;while(1){m=c[j>>2]|0;if(m|0?_j(f,m)|0:0)break d;if((n|0)>1){n=n+-1|0;j=j+20|0}else break}}while(0);if(!o){na=1;Ra=oa;return na|0}t=h+44|0;r=c[t>>2]|0;e:do if(!r){a[h>>0]=-93;m=h+38|0;a[m>>0]=0;if(i|0){n=R+4|0;o=R+8|0;p=R+24|0;q=K+4|0;r=K+8|0;while(1){na=c[i+4>>2]|0;k=c[F>>2]|0;c[n>>2]=139;c[o>>2]=0;c[p>>2]=K;c[K>>2]=na;c[q>>2]=0;c[r>>2]=0;if(!k){ma=369;break}j=c[k>>2]|0;if((j|0)<=0){ma=369;break}k=k+4|0;while(1){l=c[k>>2]|0;if(l|0?_j(R,l)|0:0)break;if((j|0)>1){j=j+-1|0;k=k+20|0}else break}if((c[r>>2]|0)==0|(c[q>>2]|0)>0)break;a[m>>0]=(a[m>>0]|0)+1<<24>>24;i=c[i+12>>2]|0;if(!i)break e}na=i+24|0;b[na>>1]=c[w+4>>2]&4096|e[na>>1]|16}}else{s=c[i+28>>2]|0;i=c[s+72>>2]|0;o=c[r>>2]|0;q=r+16|0;f:do if((o|0)!=0?(a[q>>0]|0)==0:0){g:do if(i|0){n=d[208+(d[o>>0]|0)>>0]|0;p=i;while(1){j=c[p>>2]|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-n|0;if(!(h<<24>>24==0|(i|0)!=0)){m=o;do{j=j+1|0;m=m+1|0;h=a[j>>0]|0;i=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(i|0)!=0))}if(!i)break;i=c[p+32>>2]|0;if(!i)break g;else p=i}if(!p)break f;i=gk(c[na>>2]|0,c[p+8>>2]|0,0)|0;c[r+8>>2]=i;i=gk(c[na>>2]|0,c[p+12>>2]|0,0)|0;c[r+12>>2]=i;i=c[p+24>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+24>>2]=i;i=c[p+28>>2]|0;if(!i)i=0;else i=dk(c[na>>2]|0,i,0,0)|0;c[r+28>>2]=i;a[r+17>>0]=a[p+17>>0]|0;a[r+18>>0]=a[p+18>>0]|0;i=a[p+16>>0]|0;a[q>>0]=i;a[r+20>>0]=a[p+20>>0]|0;ma=315;break f}while(0);c[M>>2]=o;cd(na,40596,M)}else ma=314;while(0);if((ma|0)==314){Cj(na,r,i);i=a[q>>0]|0;ma=315}if((ma|0)==315){do if(i<<24>>24==86){if((c[r+24>>2]|0)==0?(c[r+28>>2]|0)==0:0){ma=321;break}h=c[r+12>>2]|0;if(h|0?(c[h>>2]|0)==1:0){ma=321;break}cd(na,40397,N)}else ma=321;while(0);h:do if((ma|0)==321?c[w+4>>2]&65536|0:0){o=c[na>>2]|0;if(c[r+36>>2]|0){cd(na,40468,O);break}i=c[w+32>>2]|0;do if((i|0)!=40531)if((i|0)!=40542)if((i|0)!=40553)if((i|0)!=40558){if((i|0)==40571){m=4;break}if((i|0)==40581){m=5;break}if((i|0)==40587){m=6;break}if((i|0)==40592)m=7;else break h}else m=3;else m=2;else m=1;else m=0;while(0);n=r+24|0;i=c[n>>2]|0;if(i|0)ni(o,i);i=r+28|0;j=c[i>>2]|0;if(j|0)ni(o,j);c[n>>2]=0;c[i>>2]=0;a[q>>0]=c[17952+(m<<4)+4>>2];h=c[17952+(m<<4)+8>>2]&255;a[r+17>>0]=h;a[r+18>>0]=c[17952+(m<<4)+12>>2];a[r+20>>0]=0;if(h<<24>>24==83){c[R>>2]=34874;c[R+4>>2]=1;h=oj(o,147,R,0)|0;c[n>>2]=h}}while(0);c[r+40>>2]=w}i=c[t>>2]|0;j=c[i+8>>2]|0;if((j|0)!=0?(l=c[j>>2]|0,(l|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((l|0)>1){l=l+-1|0;i=i+20|0}else break}i=c[t>>2]|0}j=c[i+12>>2]|0;if((j|0)!=0?(k=c[j>>2]|0,(k|0)>0):0){i=j+4|0;while(1){j=c[i>>2]|0;if(j|0?_j(f,j)|0:0)break;if((k|0)>1){k=k+-1|0;i=i+20|0}else break}i=c[t>>2]|0}i=c[i+36>>2]|0;if(i|0)_j(f,i)|0;k=s+68|0;i=c[k>>2]|0;if(i){if(!(ck(na,i,c[t>>2]|0)|0)){j=k;i=c[k>>2]|0;ma=359}}else{j=k;ma=359}if((ma|0)==359){c[(c[t>>2]|0)+32>>2]=i;c[j>>2]=c[t>>2]}b[P>>1]=b[P>>1]|-32768}while(0);b[P>>1]=b[P>>1]|Q;na=1;Ra=oa;return na|0}case 49:case 20:case -125:{k=h+4|0;if(c[k>>2]&2048|0){l=i+16|0;m=c[l>>2]|0;i=i+24|0;j=e[i>>1]|0;if(j&38|0){c[p>>2]=40076;c[p+4>>2]=(j&32|0)==0?((j&4|0)==0?40098:40144):40126;cd(na,40162,p)}$j(f,c[h+20>>2]|0)|0;if((m|0)!=(c[l>>2]|0)){c[k>>2]=c[k>>2]|32;b[i>>1]=b[i>>1]|64}}break}case -108:{i=e[i+24>>1]|0;if(i&38|0){c[m>>2]=40087;c[m+4>>2]=(i&32|0)==0?((i&4|0)==0?40098:40144):40126;cd(na,40162,m)}break}case -96:case 45:{i=c[h+16>>2]|0;if((a[i>>0]|0)==59){if((Dk(f,i)|0)==2){na=2;Ra=oa;return na|0}if((a[i>>0]|0)==-97){a[h+38>>0]=a[h>>0]|0;a[h>>0]=-89;na=0;Ra=oa;return na|0}else ma=385}else ma=385;break}case 59:{s=c[h+8>>2]|0;W=c[na>>2]|0;Z=h+28|0;c[Z>>2]=-1;t=0;u=0;l=0;v=na+200|0;X=na;ma=28;break}case -122:{l=c[h+12>>2]|0;n=i+24|0;if(b[n>>1]&32){c[o>>2]=39767;c[o+4>>2]=40126;cd(na,40162,o)}k=c[h+16>>2]|0;if((a[k>>0]|0)==59){u=0;m=k}else{u=c[l+8>>2]|0;m=c[k+16>>2]|0;l=c[k+12>>2]|0}t=c[l+8>>2]|0;s=c[m+8>>2]|0;v=na+200|0;i:do if((d[v>>0]|0)>1?(q=na+272|0,j=c[q>>2]|0,j|0):0){k=j;do{if((c[k>>2]|0)==(m|0)){ma=12;break}k=c[k+12>>2]|0}while((k|0)!=0);if((ma|0)==12){c[k>>2]=h;j=c[q>>2]|0}k=h+44|0;if(j|0){while(1){if((c[j>>2]|0)==(l|0))break;j=c[j+12>>2]|0;if(!j)break i}c[j>>2]=k}}while(0);r=c[na>>2]|0;q=h+28|0;c[q>>2]=-1;if((u|0)!=0?(b[n>>1]&6)==0:0){n=c[r+20>>2]|0;if((n|0)>0){p=c[r+16>>2]|0;o=d[208+(d[u>>0]|0)>>0]|0;j=0;while(1){l=c[p+(j<<4)>>2]|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-o|0;if(!(ma<<24>>24==0|(k|0)!=0)){m=u;do{l=l+1|0;m=m+1|0;ma=a[l>>0]|0;k=(d[208+(ma&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ma<<24>>24==0|(k|0)!=0))}if(!k)break;j=j+1|0;if((j|0)>=(n|0)){l=0;Z=q;W=r;X=na;ma=28;break a}}l=c[p+(j<<4)+12>>2]|0;Z=q;W=r;X=na;ma=28}else{l=0;Z=q;W=r;X=na;ma=28}}else{u=0;l=0;Z=q;W=r;X=na;ma=28}break}default:{}}while(0);if((ma|0)==28){U=(u|0)==0;V=(t|0)!=0;R=V&U;j=na+120|0;P=(t|0)==0;_=h+32|0;f=h+44|0;T=na+272|0;Q=na+144|0;Y=h+4|0;M=h+1|0;N=na+136|0;O=na+140|0;m=i;q=0;S=0;o=162;p=0;r=-1;j:while(1){k=c[m+4>>2]|0;if(k){K=c[k>>2]|0;if((K|0)>0){I=k+8|0;J=0;w=0;while(1){H=c[I+16>>2]|0;k=c[I+20>>2]|0;if((k|0)!=0?(c[k+8>>2]&2048|0)!=0:0){x=c[k>>2]|0;y=c[x>>2]|0;if((y|0)>0){n=0;k=0;do{if(Fk(c[x+4+(n*20|0)+8>>2]|0,s,t,u)|0){b[_>>1]=n;k=1;w=w+1|0;q=2;p=I}n=n+1|0}while((n|0)!=(y|0))}else k=0;if(V&(k|0)==0)ma=40}else ma=40;k:do if((ma|0)==40){ma=0;if(!U?(c[H+72>>2]|0)!=(l|0):0)break;l:do if(!P){n=c[I+12>>2]|0;y=(n|0)==0;if(y){n=c[H>>2]|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}else{G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(G<<24>>24==0|(k|0)!=0)){x=t;do{n=n+1|0;x=x+1|0;G=a[n>>0]|0;k=(d[208+(G&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(G<<24>>24==0|(k|0)!=0))}}if(k|0)break k;if(!(y|(d[v>>0]|0)<2)?($=c[T>>2]|0,$|0):0){k=$;while(1){if((c[k>>2]|0)==(f|0))break;k=c[k+12>>2]|0;if(!k)break l}c[k>>2]=0}}while(0);G=q+1|0;p=(q|0)==0?I:p;n=c[H+4>>2]|0;k=b[H+42>>1]|0;if(k<<16>>16>0){F=d[208+(d[s>>0]|0)>>0]|0;C=I+36|0;D=I+48|0;E=k<<16>>16;m:do if((w|0)==1){k=0;while(1){x=c[n>>2]|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-F|0;if(!(B<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;B=a[x>>0]|0;q=(d[208+(B&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(q|0)!=0))}n:do if((q|0)==0?(a[C>>0]&4)==0:0){q=c[D>>2]|0;if(!q)break m;B=c[q+4>>2]|0;if((B|0)<=0)break m;A=c[q>>2]|0;z=0;while(1){x=c[A+(z<<3)>>2]|0;y=a[x>>0]|0;q=(d[208+(y&255)>>0]|0)-F|0;if(!(y<<24>>24==0|(q|0)!=0)){y=s;do{x=x+1|0;y=y+1|0;qa=a[x>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[y>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}z=z+1|0;if(!q)break n;if((z|0)>=(B|0))break m}}while(0);k=k+1|0;if((k|0)>=(E|0)){w=1;q=G;break k}else n=n+16|0}}else{y=n;k=0;while(1){q=c[y>>2]|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-F|0;if(!(qa<<24>>24==0|(n|0)!=0)){x=s;do{q=q+1|0;x=x+1|0;qa=a[q>>0]|0;n=(d[208+(qa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(n|0)!=0))}if(!n)break m;k=k+1|0;if((k|0)>=(E|0)){q=G;break k}else y=y+16|0}}while(0);b[_>>1]=(k|0)==(b[H+40>>1]|0)?-1:k&65535;w=w+1|0;q=G;p=I}else q=G}while(0);J=J+1|0;if((J|0)==(K|0))break;else I=I+72|0}}else w=0;if(!p){A=w;C=0}else{n=c[p+40>>2]|0;c[Z>>2]=n;k=c[p+16>>2]|0;c[f>>2]=k;if(a[p+36>>0]&8)c[Y>>2]=c[Y>>2]|1048576;l=c[k+72>>2]|0;A=w;C=p;r=n}}else{A=0;C=p}do if(R&(q|0)==0){q=c[j>>2]|0;do if(q){x=a[Q>>0]|0;w=a[t>>0]|0;k=w|32;if(x<<24>>24==121){if(k<<24>>24!=111){q=0;break}}else{if(k<<24>>24==110){k=t;n=40182;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=1;r=1;break}}if(!(x<<24>>24!=120&(w|32)<<24>>24==111)){q=0;break}}k=t;n=40186;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){c[Z>>2]=0;r=0}else q=0}else q=0;while(0);w=b[m+24>>1]|0;if(((w&512)!=0?(aa=c[m+8>>2]|0,(aa|0)!=0):0)?(a[t>>0]|32)<<24>>24==101:0){k=t;n=40190;do{n=n+1|0;k=k+1|0;qa=a[n>>0]|0;p=(d[208+(qa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(p|0)!=0));if(!p){z=c[(c[aa+20>>2]|0)+24>>2]|0;c[Z>>2]=2;r=2}else z=q}else z=q;if(!z){B=o;q=0;o=A;n=(C|0)!=0;z=w;break}l=c[z+72>>2]|0;qa=b[z+42>>1]|0;y=qa<<16>>16;o:do if(qa<<16>>16>0){x=d[208+(d[s>>0]|0)>>0]|0;n=0;w=c[z+4>>2]|0;while(1){p=c[w>>2]|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-x|0;if(!(qa<<24>>24==0|(k|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k)break;n=n+1|0;if((n|0)<(y|0))w=w+16|0;else break o}n=(n|0)==(b[z+40>>1]|0)?-1:n}else n=0;while(0);do if((n|0)>=(y|0)){x=a[s>>0]|0;w=d[208+(x&255)>>0]|0;k=w+-95|0;x=x<<24>>24==0;if(!(x|(k|0)!=0)){p=58070;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-114|0;if(!(x|(k|0)!=0)){p=40352;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=w+-111|0;if(!(x|(k|0)!=0)){p=58078;q=s;do{q=q+1|0;p=p+1|0;qa=a[q>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0)break}}n=(c[z+36>>2]&64|0)==0?-1:n}while(0);if((n|0)<(y|0)){p=A+1|0;if((r|0)==2)if((d[v>>0]|0)>1){b[_>>1]=n;c[f>>2]=z;o=162;q=1;r=2;ma=142;break}else{r=(c[(c[m+8>>2]|0)+24>>2]|0)+n|0;c[Z>>2]=r;c[Y>>2]=c[Y>>2]|4194304;o=168;q=1;ma=142;break}do if((n|0)>=0){k=(n|0)>31?-1:1<>2]=c[N>>2]|k;break}else{c[O>>2]=c[O>>2]|k;break}}else a[M>>0]=68;while(0);c[f>>2]=z;b[_>>1]=n;o=77;q=1;ma=142}else{q=1;p=A;ma=142}}else{p=A;ma=142}while(0);do if((ma|0)==142){ma=0;n=(C|0)!=0;z=b[m+24>>1]|0;if(n&((q|0)==1&(p|0)==0))if(!(z&32)){w=a[s>>0]|0;q=d[208+(w&255)>>0]|0;k=q+-95|0;w=w<<24>>24==0;if(!(w|(k|0)!=0)){n=58070;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-114|0;if(!(w|(k|0)!=0)){n=40352;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-111|0;if(!(w|(k|0)!=0)){n=58078;p=s;do{p=p+1|0;n=n+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){B=o;q=1;o=0;n=1;break}}}if(!(c[(c[C+16>>2]|0)+36>>2]&64)){ma=157;break j}else{B=o;q=1;o=0;n=1}}else{B=o;q=1;o=0;n=1}else{B=o;o=p}}while(0);k=(o|0)==0;if(P&(k&(z&128)!=0)){A=c[m+8>>2]|0;w=c[A>>2]|0;if((w|0)>0){y=0;while(1){x=c[A+4+(y*20|0)+4>>2]|0;if(x|0){qa=a[x>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[s>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(k|0)!=0)){o=s;p=x;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(!k){ma=166;break j}}k=y+1|0;if((k|0)<(w|0))y=k;else break}}}else if(!k){ma=201;break}m=c[m+12>>2]|0;if(!m){ma=188;break}else{S=S+1|0;o=B;p=C}}p:do if((ma|0)==157){b[_>>1]=-1;a[M>>0]=68;q=m;p=1;n=1;ma=208}else if((ma|0)==166){n=c[A+4+(y*20|0)>>2]|0;if((z&1)==0?c[n+4>>2]&16|0:0){c[ca>>2]=x;cd(na,40199,ca);qa=2;Ra=oa;return qa|0}if((z&16384)==0?c[n+4>>2]&32768|0:0){c[da>>2]=x;cd(na,40230,da);qa=2;Ra=oa;return qa|0}k=a[n>>0]|0;if(k<<24>>24==-88)k=a[n+38>>0]|0;switch(k<<24>>24){case -87:{fa=n+20|0;ma=177;break}case -125:{fa=c[n+20>>2]|0;ma=177;break}default:{}}if((ma|0)==177?(c[c[fa>>2]>>2]|0)!=1:0){cd(na,38899,ga);qa=2;Ra=oa;return qa|0}Gk(na,A,y,h,59952,S);if((d[v>>0]|0)>1?(ea=c[T>>2]|0,(ea|0)!=0):0){k=ea;while(1){if((c[k>>2]|0)==(h|0))break;k=c[k+12>>2]|0;if(!k){n=m;break p}}c[k>>2]=0;n=m}else n=m}else if((ma|0)==188)if(P){k=c[Y>>2]|0;if(k&64|0){c[ba>>2]=s;Db(28,40267,ba);a[h>>0]=110;c[f>>2]=0;qa=1;Ra=oa;return qa|0}if(!(k&67108864)){m=c[h+8>>2]|0;r=a[m>>0]|0;q=d[208+(r&255)>>0]|0;k=q+-116|0;r=r<<24>>24==0;if(!(r|(k|0)!=0)){o=41806;p=m;do{p=p+1|0;o=o+1|0;qa=a[p>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){k=q+-102|0;if(!(r|(k|0)!=0)){o=41811;do{m=m+1|0;o=o+1|0;qa=a[m>>0]|0;k=(d[208+(qa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(k|0)!=0))}if(k|0){m=0;o=0;k=40302;ma=202;break}}a[h>>0]=-97;qa=1;Ra=oa;return qa|0}else{m=0;o=0;k=40302;ma=202}}else{m=0;o=0;k=40302;ma=202}else if((ma|0)==201)if((o|0)==1){q=m;p=1;o=B;ma=208}else{k=40317;ma=202}while(0);if((ma|0)==202){do if(U)if(V){c[ia>>2]=k;c[ia+4>>2]=t;c[ia+8>>2]=s;cd(na,37010,ia);break}else{c[ja>>2]=k;c[ja+4>>2]=s;cd(na,37020,ja);break}else{c[ha>>2]=k;c[ha+4>>2]=u;c[ha+8>>2]=t;c[ha+12>>2]=s;cd(na,40339,ha)}while(0);a[na+17>>0]=1;q=i+20|0;c[q>>2]=(c[q>>2]|0)+1;q=m;p=o;o=B;ma=208}if((ma|0)==208){qa=b[_>>1]|0;m=qa<<16>>16;k=C+56|0;if(n&qa<<16>>16>-1){ia=cw(1,0,((m|0)<63?m:63)|0)|0;ja=L()|0;ha=k;ja=c[ha+4>>2]|ja;qa=k;c[qa>>2]=c[ha>>2]|ia;c[qa+4>>2]=ja}k=h+12|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;k=h+16|0;m=c[k>>2]|0;if(m|0)ni(W,m);c[k>>2]=0;a[h>>0]=o;c[Y>>2]=c[Y>>2]|8388608;if((p|0)==1)n=q;else{qa=2;Ra=oa;return qa|0}}q:do if((c[Y>>2]&4194304|0)==0?(la=c[n+4>>2]|0,ka=c[X>>2]|0,!((l|0)==0|(c[ka+312>>2]|0)==0)):0){k=c[ka+16>>2]|0;m=0;while(1)if((c[k+(m<<4)+12>>2]|0)==(l|0))break;else m=m+1|0;if((a[h>>0]|0)!=77){l=c[la>>2]|0;if((l|0)<=0)break;k=c[Z>>2]|0;j=0;while(1){if((k|0)==(c[la+8+(j*72|0)+40>>2]|0))break;j=j+1|0;if((j|0)>=(l|0))break q}j=la+8+(j*72|0)+16|0}l=c[j>>2]|0;k=b[_>>1]|0;j=k<<16>>16;if(l|0){if(k<<16>>16<=-1){j=b[l+40>>1]|0;if(j<<16>>16>-1){j=j<<16>>16;ma=229}else j=40352}else ma=229;if((ma|0)==229)j=c[(c[l+4>>2]|0)+(j<<4)>>2]|0;if((Ik(na,c[l>>2]|0,j,m)|0)==2)a[h>>0]=114}}while(0);qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1;if((n|0)==(i|0)){qa=1;Ra=oa;return qa|0}do{i=c[i+12>>2]|0;qa=i+16|0;c[qa>>2]=(c[qa>>2]|0)+1}while((i|0)!=(n|0));i=1;Ra=oa;return i|0}else if((ma|0)==385?(a[(c[na>>2]|0)+81>>0]|0)==0:0){j=c[h+12>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=391;break}case -125:{i=c[j+20>>2]|0;ma=391;break}default:l=1}if((ma|0)==391)l=c[c[i>>2]>>2]|0;r:do if((a[h>>0]|0)==48){k=c[h+20>>2]|0;j=c[k+4>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;ma=398;break}case -125:{i=c[j+20>>2]|0;ma=398;break}default:i=1}if((ma|0)==398)i=c[c[i>>2]>>2]|0;if((i|0)==(l|0)){j=c[k+24>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}}else{j=c[h+16>>2]|0;i=a[j>>0]|0;if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=c[c[j+20>>2]>>2]|0;break r}case -125:{i=c[c[c[j+20>>2]>>2]>>2]|0;break r}default:{i=1;break r}}}while(0);if((l|0)!=(i|0))cd(na,38899,r)}if(c[na+36>>2]|0){qa=2;Ra=oa;return qa|0}qa=(a[(c[na>>2]|0)+81>>0]|0)==0?0:2;Ra=oa;return qa|0}function Ek(f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,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,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;fb=Ra;Ra=Ra+240|0;eb=fb+120|0;bb=fb+112|0;ab=fb+96|0;Sa=fb+88|0;Pa=fb+80|0;La=fb+72|0;Ka=fb+64|0;Ja=fb+56|0;Ia=fb+48|0;Ha=fb+40|0;Oa=fb+32|0;Na=fb+24|0;Ma=fb+16|0;Ga=fb+8|0;Fa=fb;Xa=fb+200|0;Ya=fb+168|0;Za=fb+160|0;qa=fb+128|0;h=c[g+8>>2]|0;if(h&4|0){eb=1;Ra=fb;return eb|0}ma=c[f+24>>2]|0;db=c[f>>2]|0;f=c[db>>2]|0;if(!(h&64)){Kk(db,g,ma);if(c[db+36>>2]|0){eb=2;Ra=fb;return eb|0}eb=(a[f+81>>0]|0)==0?1:2;Ra=fb;return eb|0}Qa=g+52|0;oa=(c[Qa>>2]|0)!=0;W=oa&1;X=qa+28|0;Y=qa+24|0;Z=Xa+4|0;_=Xa+8|0;$=Xa+12|0;aa=Xa+24|0;ba=qa+20|0;ca=qa+4|0;da=qa+12|0;ea=db+240|0;fa=(ma|0)==0;ga=Xa+4|0;ha=Xa+8|0;ia=Xa+12|0;ja=Xa+24|0;ka=db+36|0;s=f+81|0;t=Xa+4|0;u=Xa+8|0;v=Xa+12|0;w=Xa+24|0;x=qa+8|0;y=Xa+4|0;z=Xa+8|0;A=Xa+12|0;B=Xa+24|0;C=Xa+4|0;D=Xa+8|0;E=Xa+12|0;F=Xa+24|0;G=Xa+4|0;H=Xa+8|0;I=Xa+12|0;J=Xa+24|0;K=db+200|0;L=Xa+4|0;M=Xa+8|0;N=Xa+12|0;O=Xa+24|0;P=Xa+4|0;Q=Xa+8|0;R=Xa+12|0;S=Xa+24|0;T=qa+4|0;U=db;V=db+208|0;q=g;r=0;f=h;a:while(1){p=q+8|0;c[p>>2]=f|4;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;c[T+12>>2]=0;c[T+16>>2]=0;c[T+20>>2]=0;c[qa>>2]=db;c[X>>2]=q;f=c[q+60>>2]|0;if(f){b[Y>>1]=0;c[Xa>>2]=U;c[Z>>2]=125;c[_>>2]=126;c[$>>2]=0;c[aa>>2]=qa;h=f+24|0;o=(c[V>>2]|0)+(c[h>>2]|0)|0;c[V>>2]=o;Ea=c[(c[db>>2]|0)+120>>2]|0;if((Ea|0)<(o|0)){K=9;break}_j(Xa,f)|0;i=c[Xa>>2]|0;o=i+208|0;c[o>>2]=(c[o>>2]|0)-(c[h>>2]|0);o=f+4|0;c[o>>2]=c[o>>2]|b[Y>>1]&-32752&65535;if((c[ba>>2]|0)>0){K=11;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}o=q+32|0;h=c[o>>2]|0;if(c[p>>2]&65536|0){n=q+48|0;c[(c[h+28>>2]|0)+48>>2]=c[n>>2];c[n>>2]=0}f=h;b:do if((c[h>>2]|0)>0){if(fa){k=0;while(1){j=c[h+8+(k*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){f=c[ea>>2]|0;i=c[h+8+(k*72|0)+8>>2]|0;if(i|0)c[ea>>2]=i;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=0;$j(Xa,j)|0;c[ea>>2]=f;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}f=h+8+(k*72|0)+37|0;a[f>>0]=a[f>>0]&-9;f=c[o>>2]|0;h=f}k=k+1|0;if((k|0)>=(c[h>>2]|0))break b}}l=0;k=h;while(1){j=c[k+8+(l*72|0)+20>>2]|0;if((j|0)!=0?(c[j+8>>2]&4|0)==0:0){i=c[ea>>2]|0;f=0;h=ma;do{f=(c[h+16>>2]|0)+f|0;h=c[h+12>>2]|0}while((h|0)!=0);h=c[k+8+(l*72|0)+8>>2]|0;if(h|0)c[ea>>2]=h;c[ga>>2]=125;c[ha>>2]=126;c[ia>>2]=0;c[Xa>>2]=db;c[ja>>2]=ma;$j(Xa,j)|0;c[ea>>2]=i;if(c[ka>>2]|0){cb=2;K=206;break a}if(a[s>>0]|0){cb=2;K=206;break a}h=ma;do{f=f-(c[h+16>>2]|0)|0;h=c[h+12>>2]|0}while((h|0)!=0);h=k+8+(l*72|0)+37|0;a[h>>0]=a[h>>0]&-9|((f|0)!=0&1)<<3&255;f=c[o>>2]|0;h=f}else h=k;l=l+1|0;if((l|0)>=(c[h>>2]|0))break;else k=h}}while(0);b[Y>>1]=16385;c[ca>>2]=f;c[da>>2]=ma;l=c[q>>2]|0;if((l|0)!=0?(c[l>>2]|0)>0:0){k=0;f=16385;do{i=c[l+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;ra=c[qa>>2]|0;c[Xa>>2]=ra;c[t>>2]=125;c[u>>2]=126;c[v>>2]=0;c[w>>2]=qa;h=i+24|0;sa=ra;m=sa+208|0;n=(c[m>>2]|0)+(c[h>>2]|0)|0;c[m>>2]=n;sa=c[(c[sa>>2]|0)+120>>2]|0;if((sa|0)<(n|0)){K=46;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;n=j+208|0;c[n>>2]=(c[n>>2]|0)-(c[h>>2]|0);n=b[Y>>1]|0;m=i+4|0;c[m>>2]=c[m>>2]|n&-32752&65535;f=(f&36880|n&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=48;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[l>>2]|0))}else f=16385;h=f&-16385;b[Y>>1]=h;n=c[q+40>>2]|0;m=(n|0)!=0;if(!m?(na=h&65535,(na&16|0)==0):0){h=na&49150;b[Y>>1]=h}else c[p>>2]=c[p>>2]|(f&4096|8)&65535;j=c[q+44>>2]|0;i=(j|0)==0;if(!(m|i)){K=55;break}c[x>>2]=c[q>>2];f=h|128;b[Y>>1]=f;if(!i){f=f&65535;b[Y>>1]=f&28655;ta=c[qa>>2]|0;c[Xa>>2]=ta;c[y>>2]=125;c[z>>2]=126;c[A>>2]=0;c[B>>2]=qa;h=j+24|0;ua=ta;k=ua+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;ua=c[(c[ua>>2]|0)+120>>2]|0;if((ua|0)<(l|0)){K=59;break}_j(Xa,j)|0;i=c[Xa>>2]|0;l=i+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=j+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=61;break}if((c[i+36>>2]|0)>=1){cb=2;K=206;break}}i=c[q+36>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;va=c[qa>>2]|0;c[Xa>>2]=va;c[C>>2]=125;c[D>>2]=126;c[E>>2]=0;c[F>>2]=qa;h=i+24|0;wa=va;k=wa+208|0;l=(c[k>>2]|0)+(c[h>>2]|0)|0;c[k>>2]=l;wa=c[(c[wa>>2]|0)+120>>2]|0;if((wa|0)<(l|0)){K=66;break}_j(Xa,i)|0;j=c[Xa>>2]|0;l=j+208|0;c[l>>2]=(c[l>>2]|0)-(c[h>>2]|0);l=b[Y>>1]|0;k=i+4|0;c[k>>2]=c[k>>2]|l&-32752&65535;f=(f&36880|l&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=68;break}if((c[j+36>>2]|0)>=1){cb=2;K=206;break}}h=c[o>>2]|0;if((c[h>>2]|0)>0){l=0;do{if(((a[h+8+(l*72|0)+37>>0]&4)!=0?(pa=c[h+8+(l*72|0)+64>>2]|0,(pa|0)!=0):0)?(c[pa>>2]|0)>0:0){k=0;do{i=c[pa+4+(k*20|0)>>2]|0;if(i){f=f&65535;b[Y>>1]=f&28655;xa=c[qa>>2]|0;c[Xa>>2]=xa;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=qa;h=i+24|0;ya=xa;gb=ya+208|0;j=(c[gb>>2]|0)+(c[h>>2]|0)|0;c[gb>>2]=j;ya=c[(c[ya>>2]|0)+120>>2]|0;if((ya|0)<(j|0)){K=80;break a}_j(Xa,i)|0;j=c[Xa>>2]|0;gb=j+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[h>>2]|0);gb=b[Y>>1]|0;i=i+4|0;c[i>>2]=c[i>>2]|gb&-32752&65535;f=(f&36880|gb&65535)&65535;b[Y>>1]=f;if((c[ba>>2]|0)>0){K=82;break a}if((c[j+36>>2]|0)>=1){cb=2;K=206;break a}}k=k+1|0}while((k|0)<(c[pa>>2]|0))}l=l+1|0;h=c[o>>2]|0}while((l|0)<(c[h>>2]|0))}c[da>>2]=0;b[Y>>1]=f|16385;if(c[p>>2]&65536|0){gb=(c[h+28>>2]|0)+48|0;c[q+48>>2]=c[gb>>2];c[gb>>2]=0}if(r>>>0>=W>>>0?Lk(qa,q,c[q+48>>2]|0,40659)|0:0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}b[Y>>1]=b[Y>>1]&-16385;if(m){if(Lk(qa,q,n,40665)|0){cb=2;K=206;break}if(a[s>>0]|0){cb=2;K=206;break}i=c[n>>2]|0;if((i|0)>0){f=n+4|0;h=0;while(1){if(c[(c[f>>2]|0)+4>>2]&16|0){K=96;break a}h=h+1|0;if((h|0)>=(i|0))break;else f=f+20|0}}}if((d[K>>0]|0)>1?(la=c[q+72>>2]|0,la|0):0){m=la;do{h=c[m+12>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;za=c[qa>>2]|0;c[Xa>>2]=za;c[L>>2]=125;c[M>>2]=126;c[N>>2]=0;c[O>>2]=qa;k=i+24|0;Aa=za;p=Aa+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Aa=c[(c[Aa>>2]|0)+120>>2]|0;if((Aa|0)<(gb|0)){K=108;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=110;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);h=c[m+8>>2]|0;do if(h|0){if((c[h>>2]|0)<=0)break;f=0;do{i=c[h+4+(f*20|0)>>2]|0;if(i){j=e[Y>>1]|0;b[Y>>1]=j&28655;Ba=c[qa>>2]|0;c[Xa>>2]=Ba;c[P>>2]=125;c[Q>>2]=126;c[R>>2]=0;c[S>>2]=qa;k=i+24|0;Ca=Ba;p=Ca+208|0;gb=(c[p>>2]|0)+(c[k>>2]|0)|0;c[p>>2]=gb;Ca=c[(c[Ca>>2]|0)+120>>2]|0;if((Ca|0)<(gb|0)){K=119;break a}_j(Xa,i)|0;l=c[Xa>>2]|0;gb=l+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[k>>2]|0);gb=b[Y>>1]|0;p=i+4|0;c[p>>2]=c[p>>2]|gb&-32752&65535;b[Y>>1]=j&36880|gb&65535;if((c[ba>>2]|0)>0){K=121;break a}if((c[l+36>>2]|0)>=1){cb=2;K=206;break a}}f=f+1|0}while((f|0)<(c[h>>2]|0))}while(0);m=c[m+32>>2]|0}while((m|0)!=0)}Da=c[q+56>>2]|0;if(Da|0?(c[c[q>>2]>>2]|0)!=(c[c[Da>>2]>>2]|0):0){K=126;break}f=c[q+52>>2]|0;if(!f){K=135;break}q=f;r=r+1|0;f=c[f+8>>2]|0}switch(K|0){case 9:{c[Fa>>2]=Ea;cd(db,41637,Fa);K=11;break}case 46:{c[Ga>>2]=sa;cd(ra,41637,Ga);K=48;break}case 55:{cd(db,40615,Ma);gb=2;Ra=fb;return gb|0}case 59:{c[Na>>2]=ua;cd(ta,41637,Na);K=61;break}case 66:{c[Oa>>2]=wa;cd(va,41637,Oa);K=68;break}case 80:{c[Ha>>2]=ya;cd(xa,41637,Ha);K=82;break}case 96:{cd(db,40671,Ia);gb=2;Ra=fb;return gb|0}case 108:{c[Ja>>2]=Aa;cd(za,41637,Ja);K=110;break}case 119:{c[Ka>>2]=Ca;cd(Ba,41637,Ka);K=121;break}case 126:{if(c[Da+8>>2]&512|0){cd(db,41381,La);gb=2;Ra=fb;return gb|0}switch(a[Da+4>>0]|0){case -128:{f=41509;break}case -126:{f=41519;break}case -127:{f=41529;break}default:f=41536}c[Pa>>2]=f;cd(db,41427,Pa);gb=2;Ra=fb;return gb|0}case 135:{if(!oa){gb=1;Ra=fb;return gb|0}J=c[g+48>>2]|0;if(!J){gb=1;Ra=fb;return gb|0}I=c[db>>2]|0;i=c[J>>2]|0;if((i|0)>(c[I+116>>2]|0)){cd(db,41542,Sa);gb=2;Ra=fb;return gb|0}if((i|0)>0){f=0;do{gb=J+4+(f*20|0)+13|0;a[gb>>0]=a[gb>>0]&-2;f=f+1|0}while((f|0)!=(i|0))}c[g+56>>2]=0;h=c[Qa>>2]|0;if(!h)h=g;else{f=g;while(1){c[h+56>>2]=f;f=c[h+52>>2]|0;if(!f)break;else{gb=h;h=f;f=gb}}}t=J+4|0;u=db+200|0;v=Xa+4|0;w=I+81|0;x=Ya+12|0;y=Ya+4|0;z=Ya+8|0;A=Ya+24|0;B=Ya+20|0;C=db;D=Xa+4|0;E=Xa+8|0;F=Xa+12|0;G=Xa+24|0;H=db+208|0;f=i;c:while(1){s=c[h>>2]|0;if((f|0)<=0){cb=1;K=206;break}r=h+32|0;q=t;p=0;Va=0;while(1){c[Za>>2]=-1;o=q+13|0;d:do if(!(a[o>>0]&1)){f=c[q>>2]|0;e:do if(!f)f=0;else while(1){i=c[f+4>>2]|0;if(!(i&4096))break e;if(!(i&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break}}while(0);f:do if(!(uk(f,Za)|0)){g:do if((a[f>>0]|0)==59?(_a=c[f+8>>2]|0,$a=c[s>>2]|0,($a|0)>0):0){i=0;while(1){k=c[s+4+(i*20|0)+4>>2]|0;if(k|0){gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[_a>>0]|0)>>0]|0)|0;if(!(gb<<24>>24==0|(j|0)!=0)){l=_a;do{k=k+1|0;l=l+1|0;gb=a[k>>0]|0;j=(d[208+(gb&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(gb<<24>>24==0|(j|0)!=0))}if(!j)break}i=i+1|0;if((i|0)>=($a|0))break g}i=i+1|0;c[Za>>2]=i;break f}while(0);c[Za>>2]=0;if((d[u>>0]|0)<=1)if(!f)n=0;else n=dk(I,f,0,0)|0;else n=f;if(!(a[w>>0]|0)){m=c[h>>2]|0;c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[Ya>>2]=db;c[y>>2]=c[r>>2];c[z>>2]=m;b[A>>1]=129;c[B>>2]=0;i=c[db>>2]|0;j=i+85|0;k=a[j>>0]|0;a[j>>0]=1;h:do if(!n){a[j>>0]=k;K=180}else{b[A>>1]=129;c[Xa>>2]=C;c[D>>2]=125;c[E>>2]=126;c[F>>2]=0;c[G>>2]=Ya;l=n+24|0;gb=(c[H>>2]|0)+(c[l>>2]|0)|0;c[H>>2]=gb;i=c[i+120>>2]|0;do if((i|0)>=(gb|0)){_j(Xa,n)|0;i=c[Xa>>2]|0;gb=i+208|0;c[gb>>2]=(c[gb>>2]|0)-(c[l>>2]|0);gb=n+4|0;c[gb>>2]=c[gb>>2]|b[A>>1]&-32752&65535;if((c[B>>2]|0)>0)break;gb=(c[i+36>>2]|0)<1;a[j>>0]=k;if(gb){K=180;break h}else{Ua=0;break h}}else{c[bb>>2]=i;cd(db,41637,bb)}while(0);a[j>>0]=k;Ua=0}while(0);i:do if((K|0)==180){K=0;if((c[m>>2]|0)<=0){Ua=0;break}i=0;while(1){gb=i;i=i+1|0;if((bk(0,c[m+4+(gb*20|0)>>2]|0,n,-1)|0)<2){Ua=i;break i}if((i|0)>=(c[m>>2]|0)){Ua=0;break}}}while(0);c[Za>>2]=Ua;i=Ua}else i=0;if(!((n|0)==0|(d[u>>0]|0)>1))ni(I,n);if((i|0)<=0){f=1;break d}}else{i=c[Za>>2]|0;Wa=c[s>>2]|0;if((i|0)<1|(i|0)>(Wa|0)){K=158;break c}}while(0);if((d[u>>0]|0)<=1){c[Xa>>2]=0;c[v>>2]=0;l=oj(I,147,Xa,0)|0;if(!l)break c;j=l+4|0;c[j>>2]=c[j>>2]|1024;c[l+8>>2]=i;j=c[q>>2]|0;if((j|0)==(f|0))j=q;else{while(1){k=c[j+12>>2]|0;if((a[k>>0]|0)==106)j=k;else break}j=j+12|0}c[j>>2]=l;if(f|0)ni(I,f);b[q+16>>1]=i}a[o>>0]=a[o>>0]|1;f=p}else f=p;while(0);i=Va+1|0;Ta=c[J>>2]|0;if((i|0)<(Ta|0)){q=q+20|0;p=f;Va=i}else break}h=c[h+56>>2]|0;if((f|0)!=0&(h|0)!=0)f=Ta;else{K=201;break}}if((K|0)==158){c[ab>>2]=Va+1;c[ab+4>>2]=40659;c[ab+8>>2]=Wa;cd(db,41294,ab)}else if((K|0)==201){if((Ta|0)<=0){gb=1;Ra=fb;return gb|0}f=0;while(1){gb=f;f=f+1|0;if(!(a[J+4+(gb*20|0)+13>>0]&1))break;if((f|0)>=(Ta|0)){cb=1;K=206;break}}if((K|0)==206){Ra=fb;return cb|0}c[eb>>2]=f;cd(db,41576,eb);gb=2;Ra=fb;return gb|0}else if((K|0)==206){Ra=fb;return cb|0}gb=2;Ra=fb;return gb|0}case 206:{Ra=fb;return cb|0}}if((K|0)==11){gb=2;Ra=fb;return gb|0}else if((K|0)==48){gb=2;Ra=fb;return gb|0}else if((K|0)==61){gb=2;Ra=fb;return gb|0}else if((K|0)==68){gb=2;Ra=fb;return gb|0}else if((K|0)==82){gb=2;Ra=fb;return gb|0}else if((K|0)==110){gb=2;Ra=fb;return gb|0}else if((K|0)==121){gb=2;Ra=fb;return gb|0}return 0}function Fk(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=0;a:while(1){switch(a[b+l>>0]|0){case 46:case 0:break a;default:{}}l=l+1|0}if(f|0){b:do if(l|0){h=b;k=f;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=8;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=10;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break b}if((i|0)==8){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==10)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[f+l>>0]|0){e=0;return e|0}}b=b+(l+1)|0;l=0;c:while(1){switch(a[b+l>>0]|0){case 46:case 0:break c;default:{}}l=l+1|0}if(e|0){d:do if(l|0){h=b;k=e;i=l;while(1){g=a[h>>0]|0;if(!(g<<24>>24)){i=21;break}j=a[208+(g&255)>>0]|0;g=a[208+(d[k>>0]|0)>>0]|0;if(j<<24>>24!=g<<24>>24){i=23;break}if((i|0)>1){h=h+1|0;k=k+1|0;i=i+-1|0}else break d}if((i|0)==21){h=0;g=a[208+(d[k>>0]|0)>>0]|0}else if((i|0)==23)h=j&255;if((h|0)!=(g&255|0)){e=0;return e|0}}while(0);if(a[e+l>>0]|0){e=0;return e|0}}if(c|0){h=b+(l+1)|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0;if(!(e<<24>>24==0|(g|0)!=0))do{h=h+1|0;c=c+1|0;e=a[h>>0]|0;g=(d[208+(e&255)>>0]|0)-(d[208+(d[c>>0]|0)>>0]|0)|0}while(!(e<<24>>24==0|(g|0)!=0));if(g|0){e=0;return e|0}}e=1;return e|0}function Gk(b,d,f,g,h,i){b=b|0;d=d|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;p=Ra;Ra=Ra+32|0;k=p;d=c[d+4+(f*20|0)>>2]|0;m=c[b>>2]|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}d=dk(m,d,0,0)|0;if(!d){o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}if((i|0)>0&(a[h>>0]|0)!=71){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+4>>2]=140;c[k+24>>2]=i;_j(k,d)|0}if((a[g>>0]|0)==106){f=c[g+8>>2]|0;c[k>>2]=f;if(f){i=(Eu(f)|0)&1073741823;c[k+4>>2]=i;if((i|0)!=0?(j=oj(c[b>>2]|0,106,k,0)|0,(j|0)!=0):0){c[j+12>>2]=d;d=j+4|0;c[d>>2]=c[d>>2]|4352;d=j}}else c[k+4>>2]=0}j=g+4|0;c[j>>2]=c[j>>2]|134217728;ni(m,g);f=g;h=d;i=f+52|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));if((c[j>>2]&1024|0)==0?(o=g+8|0,n=c[o>>2]|0,n|0):0){b=(Eu(n)|0)+1|0;a:do if(!m){k=Sv(b|0,0,-1,-1)|0;i=L()|0;if(!(i>>>0>0|(i|0)==0&k>>>0>2147483390)){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](b)|0;l=38;break}f=Wa[c[29356>>2]&127](b)|0;if((c[14985]|0)>>>0>>0)c[14985]=b;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){k=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=k>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=39}else l=39}else f=0}else f=0}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){f=0;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0>>0:0))){h=m+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}h=m+296|0;f=c[h>>2]|0;if(!f){f=m+292|0;break}else{c[h>>2]=c[f>>2];l=m+284|0;c[l>>2]=(c[l>>2]|0)+1;l=38;break a}}else f=m+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(m,b,0)|0;l=38}while(0);if((l|0)==38)if(!f)f=0;else l=39;if((l|0)==39)ew(f|0,n|0,b|0)|0;c[o>>2]=f;c[j>>2]=c[j>>2]|65536}if(m|0){if(c[m+480>>2]|0){Xd(m,d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}o=d;if((c[m+304>>2]|0)>>>0<=o>>>0?(c[m+308>>2]|0)>>>0>o>>>0:0){o=m+300|0;c[d>>2]=c[o>>2];c[o>>2]=d;o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}else{o=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);o=g+4|0;g=c[o>>2]|0;g=g|4194304;c[o>>2]=g;Ra=p;return}}function Hk(b,e){b=b|0;e=e|0;if((a[e>>0]|0)!=-93)return 0;e=e+38|0;a[e>>0]=(c[b+24>>2]|0)+(d[e>>0]|0);return 0}function Ik(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=Ra;Ra=Ra+32|0;i=n+24|0;m=n+16|0;l=n+8|0;h=n;j=c[b>>2]|0;k=c[(c[j+16>>2]|0)+(f<<4)>>2]|0;if(a[j+165>>0]|0){m=0;Ra=n;return m|0}g=$a[c[j+312>>2]&127](c[j+316>>2]|0,20,d,e,k,c[b+240>>2]|0)|0;if((g|0)==1){c[h>>2]=d;c[h+4>>2]=e;d=Bb(40358,h)|0;if(f|0?1:(c[j+20>>2]|0)>2){c[l>>2]=k;c[l+4>>2]=d;d=Bb(40364,l)|0}c[m>>2]=d;cd(b,40370,m);c[b+12>>2]=23;m=1;Ra=n;return m|0}else{if((g|2|0)==2){m=g;Ra=n;return m|0}cd(b,39231,i);c[b+12>>2]=1;m=g;Ra=n;return m|0}return 0}function Jk(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;switch(a[d>>0]|0){case -92:case -94:break;default:return 0}e=c[b+24>>2]|0;f=c[e>>2]|0;a:do if((f|0)!=0?(g=c[f>>2]|0,(g|0)>0):0){d=c[d+28>>2]|0;b=0;while(1){if((d|0)==(c[f+8+(b*72|0)+40>>2]|0))break;b=b+1|0;if((b|0)>=(g|0)){h=8;break a}}b=e+4|0}else h=8;while(0);if((h|0)==8)b=e+8|0;c[b>>2]=(c[b>>2]|0)+1;return 0}function Kk(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i;if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}if(c[d+8>>2]&128|0){Ra=i;return}c[h+4>>2]=141;c[h>>2]=b;f=h+8|0;if(!(a[b+22>>0]|0))g=h+12|0;else{c[f>>2]=142;g=h+12|0;c[g>>2]=0;$j(h,d)|0}c[f>>2]=143;c[g>>2]=68;$j(h,d)|0;f=b+36|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+4>>2]=125;c[h+8>>2]=126;c[h+12>>2]=0;c[h>>2]=b;c[h+24>>2]=e;$j(h,d)|0;if(c[f>>2]|0){Ra=i;return}if(a[(c[b>>2]|0)+81>>0]|0){Ra=i;return}c[h+8>>2]=132;c[h+12>>2]=69;c[h+4>>2]=141;c[h>>2]=b;$j(h,d)|0;Ra=i;return}function Lk(e,f,g,h){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,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;H=Ra;Ra=Ra+80|0;F=H+24|0;B=H+16|0;A=H;x=H+40|0;y=H+36|0;if(!g){G=0;Ra=H;return G|0}z=c[c[f>>2]>>2]|0;E=c[e>>2]|0;k=g+4|0;j=c[g>>2]|0;a:do if((j|0)>0){t=x+4|0;u=x+24|0;i=0;s=k;b:while(1){r=c[s>>2]|0;q=(r|0)==0;c:do if(q)j=0;else{j=r;while(1){l=c[j+4>>2]|0;if(!(l&4096))break c;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}}while(0);d:do if((a[h>>0]|0)==71)G=23;else{p=c[f>>2]|0;e:do if((a[j>>0]|0)==59?(v=c[j+8>>2]|0,w=c[p>>2]|0,(w|0)>0):0){l=0;while(1){n=c[p+4+(l*20|0)+4>>2]|0;if(n|0){o=a[n>>0]|0;m=(d[208+(o&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0;if(!(o<<24>>24==0|(m|0)!=0)){o=v;do{n=n+1|0;o=o+1|0;I=a[n>>0]|0;m=(d[208+(I&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(I<<24>>24==0|(m|0)!=0))}if(!m)break}l=l+1|0;if((l|0)>=(w|0))break e}I=l+1|0;c[y>>2]=I;b[s+16>>1]=I;break d}while(0);c[y>>2]=0;G=23}while(0);f:do if((G|0)==23){G=0;if(uk(j,y)|0){j=c[y>>2]|0;if((j+-1|0)>>>0>65534)break b;b[s+16>>1]=j;break}m=s+16|0;b[m>>1]=0;if(Ck(e,r)|0){C=1;G=50;break b}j=c[f>>2]|0;if((c[j>>2]|0)>0){if(q){l=0;while(1){I=l;l=l+1|0;if(!(bk(0,0,c[j+4+(I*20|0)>>2]|0,-1)|0))b[m>>1]=l;j=c[f>>2]|0;if((l|0)>=(c[j>>2]|0))break f}}l=0;do{if(!(bk(0,r,c[j+4+(l*20|0)>>2]|0,-1)|0)){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;c[x+16>>2]=0;c[x+20>>2]=0;c[t>>2]=144;c[u>>2]=f;_j(x,r)|0;l=l+1|0;b[m>>1]=l}else l=l+1|0;j=c[f>>2]|0}while((l|0)<(c[j>>2]|0))}}while(0);i=i+1|0;j=c[g>>2]|0;if((i|0)<(j|0))s=s+20|0;else break a}if((G|0)==50){Ra=H;return C|0}c[A>>2]=i+1;c[A+4>>2]=h;c[A+8>>2]=z;cd(E,41294,A);I=1;Ra=H;return I|0}while(0);i=c[E>>2]|0;if(a[i+81>>0]|0){I=0;Ra=H;return I|0}if((j|0)>(c[i+116>>2]|0)){c[B>>2]=h;cd(E,41350,B);I=1;Ra=H;return I|0}m=c[f>>2]|0;if((j|0)<=0){I=0;Ra=H;return I|0}l=0;while(1){i=b[k+16>>1]|0;if(i<<16>>16){i=i&65535;D=c[m>>2]|0;if((D|0)<(i|0))break;Gk(E,m,i+-1|0,c[k>>2]|0,h,0);j=c[g>>2]|0}i=l+1|0;if((i|0)<(j|0)){l=i;k=k+20|0}else{C=0;G=50;break}}if((G|0)==50){Ra=H;return C|0}c[F>>2]=l+1;c[F+4>>2]=h;c[F+8>>2]=D;cd(E,41294,F);I=1;Ra=H;return I|0}function Mk(a,b){a=a|0;b=b|0;return 0}function Nk(b,d){b=b|0;d=d|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=Ra;Ra=Ra+16|0;n=p+8|0;m=p;o=d+52|0;if(!(c[o>>2]|0)){o=0;Ra=p;return o|0}k=c[d+48>>2]|0;if(!k){o=0;Ra=p;return o|0}f=d;a:while(1){switch(a[f+4>>0]|0){case -125:case -128:break;default:break a}f=c[f+52>>2]|0;if(!f){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}f=c[k>>2]|0;if((f|0)<=0){o=0;Ra=p;return o|0}while(1){i=f;f=f+-1|0;if(c[(c[k+4+(f*20|0)>>2]|0)+4>>2]&256|0)break;if((i|0)<=1){j=0;l=36;break}}if((l|0)==36){Ra=p;return j|0}b=c[b>>2]|0;k=c[b>>2]|0;b:do if(!k){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](76)|0;l=33;break}f=Wa[c[29356>>2]&127](76)|0;if((c[14985]|0)>>>0<76)c[14985]=76;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){j=c[14978]|0;i=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](f)|0;if(!h){o=2;Ra=p;return o|0}f=Wa[c[29352>>2]&127](h)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){o=2;Ra=p;return o|0}}else{do if((e[k+276>>1]|0)>=76){f=k+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}f=k+296|0;g=c[f>>2]|0;if(!g){f=k+292|0;break}else{c[f>>2]=c[g>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=33;break b}}else f=k+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}g=_d(k,76,0)|0;l=33}while(0);if((l|0)==33)if(!g){o=2;Ra=p;return o|0}else h=g;i=h;j=i+76|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));f=m;c[f>>2]=0;c[f+4>>2]=0;f=lj(b,0,0,0,m,h,0,0)|0;if(!f){o=2;Ra=p;return o|0}i=h;g=d;j=i+76|0;do{c[i>>2]=c[g>>2];i=i+4|0;g=g+4|0}while((i|0)<(j|0));c[d+32>>2]=f;c[n>>2]=0;c[n+4>>2]=0;n=oj(k,172,n,0)|0;n=nj(c[b>>2]|0,0,n)|0;c[d>>2]=n;a[d+4>>0]=-125;c[d+36>>2]=0;c[h+40>>2]=0;c[h+44>>2]=0;c[h+48>>2]=0;c[o>>2]=0;c[d+56>>2]=0;c[d+64>>2]=0;o=d+8|0;c[o>>2]=c[o>>2]&-65793|65536;c[(c[h+52>>2]|0)+56>>2]=h;c[h+60>>2]=0;o=0;Ra=p;return o|0}function Ok(f,g){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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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;qa=Ra;Ra=Ra+144|0;pa=qa+128|0;la=qa+120|0;ka=qa+112|0;ja=qa+96|0;ia=qa+88|0;P=qa+80|0;O=qa+72|0;N=qa+64|0;I=qa+56|0;H=qa+48|0;G=qa+40|0;K=qa+24|0;J=qa+16|0;F=qa+8|0;E=qa;ga=qa+136|0;ma=c[f>>2]|0;na=c[ma>>2]|0;oa=g+8|0;h=c[oa>>2]|0;c[oa>>2]=h|64;ha=na+81|0;if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}if(h&64|0){pa=1;Ra=qa;return pa|0}A=g+32|0;ea=c[A>>2]|0;fa=c[g>>2]|0;h=c[g+64>>2]|0;if(h|0){da=ma+264|0;c[h+4>>2]=c[da>>2];c[da>>2]=h}Qk(ma,ea);da=ea+8|0;a:do if((c[ea>>2]|0)>0){y=0;z=da;b:while(1){x=z+37|0;q=a[x>>0]|0;do if(!(q&32)){u=c[f>>2]|0;s=c[u>>2]|0;v=u+264|0;h=c[v>>2]|0;w=z+4|0;c:do if((c[w>>2]|0)==0?(D=c[z+8>>2]|0,!((h|0)==0|(D|0)==0)):0){d:while(1){o=c[h>>2]|0;e:do if((o|0)>0){ba=a[D>>0]|0;p=a[208+(ba&255)>>0]|0;if(!(ba<<24>>24)){i=0;while(1){j=h+8+(i<<4)|0;k=c[j>>2]|0;i=i+1|0;if(p<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=j;j=k;break d}if((i|0)>=(o|0))break e}}l=0;do{m=h+8+(l<<4)|0;j=c[m>>2]|0;if(p<<24>>24==(a[208+(d[j>>0]|0)>>0]|0)){i=j;k=D;do{k=k+1|0;i=i+1|0;ba=a[k>>0]|0;n=(d[208+(ba&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(n|0)!=0));if(!n)break d}l=l+1|0}while((l|0)<(o|0))}while(0);h=c[h+4>>2]|0;if(!h)break c}t=m+12|0;i=c[t>>2]|0;if(i|0){ca=24;break b}if(q&4){ca=26;break b}l=(s|0)==0;f:do if(l){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](80)|0;ca=50;break}i=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){ba=c[14978]|0;aa=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){ca=51;break b}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){ca=51;break b}}else{do if((e[s+276>>1]|0)>=80){j=s+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}j=s+296|0;i=c[j>>2]|0;if(!i){i=s+292|0;break}else{c[j>>2]=c[i>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=50;break f}}else i=s+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(s,80,0)|0;ca=50}while(0);if((ca|0)==50){ca=0;if(!i){ca=51;break b}}o=i;p=o+80|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(p|0));c[z+16>>2]=i;r=i+32|0;c[r>>2]=1;n=c[m>>2]|0;g:do if(!n)j=0;else{o=(Eu(n)|0)+1|0;h:do if(l){ba=Sv(o|0,0,-1,-1)|0;aa=L()|0;if(aa>>>0>0|(aa|0)==0&ba>>>0>2147483390){j=0;break g}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=77;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){ba=c[14978]|0;aa=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;$=L()|0;c[14768]=(($|0)<0|($|0)==0&aa>>>0<=ba>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break g}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[s+272>>2]|0){if(a[s+81>>0]|0){j=0;break g}}else{do if(!(0<0|(0==0?(e[s+276>>1]|0)>>>0>>0:0))){k=s+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}k=s+296|0;j=c[k>>2]|0;if(!j){j=s+292|0;break}else{c[k>>2]=c[j>>2];ca=s+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=77;break h}}else j=s+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(s,o,0)|0;ca=77}while(0);if((ca|0)==77){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}while(0);c[i>>2]=j;b[i+40>>1]=-1;b[i+44>>1]=200;q=i+36|0;c[q>>2]=c[q>>2]|66;q=fk(s,c[m+8>>2]|0,0)|0;c[z+20>>2]=q;if(a[s+81>>0]|0){h=2;ca=421;break b}p=((a[q+4>>0]|0)+-127&255)<2;if(p?(B=c[q+32>>2]|0,C=c[B>>2]|0,(C|0)>0):0){o=q+8|0;n=0;do{do if(!(c[B+8+(n*72|0)+4>>2]|0)){k=c[B+8+(n*72|0)+8>>2]|0;if(!k)break;l=c[m>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(ba<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0));if(j|0)break;c[B+8+(n*72|0)+16>>2]=i;ba=B+8+(n*72|0)+37|0;a[ba>>0]=a[ba>>0]|32;c[r>>2]=(c[r>>2]|0)+1;c[o>>2]=c[o>>2]|8192}while(0);n=n+1|0}while((n|0)!=(C|0))}if((c[r>>2]|0)>>>0>2){ca=92;break b}c[t>>2]=40892;l=c[v>>2]|0;c[v>>2]=h;if(p){aa=c[q+52>>2]|0;ba=aa+64|0;c[ba>>2]=c[q+64>>2];$j(f,aa)|0;c[ba>>2]=0}else $j(f,q)|0;c[v>>2]=h;h=q;while(1){j=c[h+52>>2]|0;if(!j)break;else h=j}h=c[h>>2]|0;k=c[m+4>>2]|0;do if(k){if(!h){h=k;break}h=c[h>>2]|0;j=c[k>>2]|0;if((h|0)==(j|0))h=k;else{ca=101;break b}}while(0);Tk(c[u>>2]|0,h,i+42|0,i+4|0);if(p){c[t>>2]=(c[q+8>>2]&8192|0)==0?40987:40953;$j(f,q)|0}c[t>>2]=0;c[v>>2]=l}while(0);l=z+16|0;h=c[l>>2]|0;if(!h){k=c[z+8>>2]|0;do if(!k){if($j(f,c[z+20>>2]|0)|0){h=2;ca=421;break b}if(Rk(ma,z)|0){h=2;ca=421;break b}}else{j=c[z>>2]|0;if(!j)h=w;else{i=c[(c[ma>>2]|0)+16>>2]|0;h=0;while(1)if((c[i+(h<<4)+12>>2]|0)==(j|0))break;else h=h+1|0;h=i+(h<<4)|0}h=bd(ma,0,k,c[h>>2]|0)|0;c[l>>2]=h;if(!h){h=2;ca=421;break b}i=h+32|0;j=c[i>>2]|0;if(j>>>0>65534){ca=115;break b}c[i>>2]=j+1;if(!(c[h+56>>2]|0)){if(a[x>>0]&4){ca=118;break b}if(!(c[h+12>>2]|0))break}if(Sk(ma,h)|0){h=2;ca=421;break b}$=fk(na,c[h+12>>2]|0,0)|0;c[z+20>>2]=$;ba=h+42|0;aa=b[ba>>1]|0;b[ba>>1]=-1;$j(f,$)|0;b[ba>>1]=aa}while(0);h=c[l>>2]|0;if(!h)break}if(a[x>>0]&2){m=c[z+64>>2]|0;h=c[h+8>>2]|0;if(!h){ca=132;break b}l=d[208+(d[m>>0]|0)>>0]|0;while(1){j=c[h>>2]|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-l|0;if(!(ba<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;ba=a[j>>0]|0;i=(d[208+(ba&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(i|0)!=0))}if(!i)break;h=c[h+20>>2]|0;if(!h){ca=132;break b}}c[z+68>>2]=h}}while(0);y=y+1|0;if((y|0)>=(c[ea>>2]|0))break a;else z=z+72|0}if((ca|0)==24){c[E>>2]=j;cd(u,i,E);pa=2;Ra=qa;return pa|0}else if((ca|0)==26){c[F>>2]=D;cd(u,41054,F);pa=2;Ra=qa;return pa|0}else if((ca|0)==51){c[z+16>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==92){c[J>>2]=c[m>>2];cd(u,40849,J);pa=2;Ra=qa;return pa|0}else if((ca|0)==101){c[K>>2]=c[m>>2];c[K+4>>2]=h;c[K+8>>2]=j;cd(u,40915,K);c[v>>2]=l;pa=2;Ra=qa;return pa|0}else if((ca|0)==115){c[G>>2]=c[h>>2];cd(ma,40730,G);c[l>>2]=0;pa=2;Ra=qa;return pa|0}else if((ca|0)==118){c[H>>2]=c[z+8>>2];cd(ma,41054,H);pa=2;Ra=qa;return pa|0}else if((ca|0)==132){c[I>>2]=m;c[I+4>>2]=0;cd(ma,41107,I);a[ma+17>>0]=1;pa=2;Ra=qa;return pa|0}else if((ca|0)==421){Ra=qa;return h|0}}while(0);if(a[ha>>0]|0){pa=2;Ra=qa;return pa|0}G=c[A>>2]|0;i:do if((c[G>>2]|0)>1){H=g+36|0;D=0;E=G+8|0;F=G+80|0;j:while(1){B=c[F+16>>2]|0;if(!((B|0)==0|(c[E+16>>2]|0)==0)){ba=d[F+36>>0]|0;C=ba&32;A=(C|0)==0;f=F+44|0;if(ba&4){if(c[f>>2]|0){ca=142;break}i=F+48|0;if(c[i>>2]|0){ca=142;break}u=B+42|0;h=b[u>>1]|0;if(h<<16>>16>0){v=B+4|0;z=D+1|0;w=(C|0)!=0;x=G+8+(z*72|0)+16|0;y=G+8+(z*72|0)+40|0;z=G+8+(z*72|0)+56|0;t=0;do{p=c[(c[v>>2]|0)+(t<<4)>>2]|0;r=0;k:while(1){s=G+8+(r*72|0)+16|0;j=c[s>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){n=c[j+4>>2]|0;o=d[208+(d[p>>0]|0)>>0]|0;m=k<<16>>16;q=0;while(1){k=c[n+(q<<4)>>2]|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-o|0;if(!(ba<<24>>24==0|(j|0)!=0)){l=p;do{k=k+1|0;l=l+1|0;ba=a[k>>0]|0;j=(d[208+(ba&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(j|0)!=0))}if(!j){ca=154;break k}j=q+1|0;if((j|0)<(m|0))q=j;else break}}if(r>>>0>>0)r=r+1|0;else break}if((ca|0)==154){ca=0;m=c[ma>>2]|0;l=m+272|0;l:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=164;else k=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=165;break l}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=164}while(0);if((ca|0)==164){j=_d(m,52,0)|0;ca=165}do if((ca|0)==165){ca=0;if(j){o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[s>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[G+8+(r*72|0)+40>>2];if((q|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;k=j;break}else{b[j+32>>1]=q;aa=cw(1,0,(q>>>0<63?q:63)|0)|0;ba=L()|0;k=G+8+(r*72|0)+56|0;$=k;ba=c[$+4>>2]|ba;c[k>>2]=c[$>>2]|aa;c[k+4>>2]=ba;k=j;break}}else k=0}while(0);m:do if(c[l>>2]|0)if(!(a[m+81>>0]|0))ca=179;else j=0;else{do if((e[m+276>>1]|0)>=52){h=m+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}h=m+296|0;j=c[h>>2]|0;if(!j){h=m+292|0;break}else{c[h>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=180;break m}}else h=m+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=179}while(0);if((ca|0)==179){j=_d(m,52,0)|0;ca=180}do if((ca|0)==180){ca=0;if(!j){j=0;break}o=j;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[j>>0]=-94;b[j+34>>1]=-1;c[j+24>>2]=1;ba=c[x>>2]|0;c[j+44>>2]=ba;c[j+28>>2]=c[y>>2];if((t|0)==(b[ba+40>>1]|0)){b[j+32>>1]=-1;break}else{b[j+32>>1]=t;$=cw(1,0,(t>>>0<63?t:63)|0)|0;aa=L()|0;_=z;aa=c[_+4>>2]|aa;ba=z;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}while(0);h=ej(ma,53,k,j)|0;if(w&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[j+28>>2]}h=Xk(m,c[H>>2]|0,h)|0;c[H>>2]=h;h=b[u>>1]|0}t=t+1|0}while((t|0)<(h<<16>>16|0))}}else i=F+48|0;h=c[f>>2]|0;if(h|0){if(c[i>>2]|0){ca=190;break}if(!A){Wk(h,c[F+40>>2]|0);h=c[f>>2]|0}ba=Xk(c[ma>>2]|0,c[H>>2]|0,h)|0;c[H>>2]=ba;c[f>>2]=0}y=c[i>>2]|0;if(y|0?(M=y+4|0,(c[M>>2]|0)>0):0){z=B+42|0;x=B+4|0;w=D+1|0;t=(C|0)!=0;u=G+8+(w*72|0)+16|0;v=G+8+(w*72|0)+40|0;w=G+8+(w*72|0)+56|0;s=0;do{o=c[(c[y>>2]|0)+(s<<3)>>2]|0;h=b[z>>1]|0;if(h<<16>>16<=0){ca=246;break j}l=c[x>>2]|0;p=d[208+(d[o>>0]|0)>>0]|0;k=h<<16>>16;r=0;while(1){i=c[l+(r<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break;h=r+1|0;if((h|0)<(k|0))r=h;else{ca=246;break j}}n=0;n:while(1){q=G+8+(n*72|0)+16|0;h=c[q>>2]|0;i=b[h+42>>1]|0;if(i<<16>>16>0){l=c[h+4>>2]|0;k=i<<16>>16;m=0;while(1){i=c[l+(m<<4)>>2]|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-p|0;if(!(ba<<24>>24==0|(h|0)!=0)){j=o;do{i=i+1|0;j=j+1|0;ba=a[i>>0]|0;h=(d[208+(ba&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(ba<<24>>24==0|(h|0)!=0))}if(!h)break n;h=m+1|0;if((h|0)<(k|0))m=h;else break}}if(n>>>0>>0)n=n+1|0;else{ca=246;break j}}l=c[ma>>2]|0;k=l+272|0;o:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=223;else j=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=224;break o}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=223}while(0);if((ca|0)==223){i=_d(l,52,0)|0;ca=224}do if((ca|0)==224){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[q>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[G+8+(n*72|0)+40>>2];if((m|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;j=i;break}else{b[i+32>>1]=m;aa=cw(1,0,(m>>>0<63?m:63)|0)|0;ba=L()|0;j=G+8+(n*72|0)+56|0;$=j;ba=c[$+4>>2]|ba;c[j>>2]=c[$>>2]|aa;c[j+4>>2]=ba;j=i;break}}else j=0}while(0);p:do if(c[k>>2]|0)if(!(a[l+81>>0]|0))ca=238;else i=0;else{do if((e[l+276>>1]|0)>=52){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];ca=l+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=239;break p}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;ca=238}while(0);if((ca|0)==238){i=_d(l,52,0)|0;ca=239}do if((ca|0)==239){ca=0;if(i){o=i;p=o+52|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(p|0));a[i>>0]=-94;b[i+34>>1]=-1;c[i+24>>2]=1;ba=c[u>>2]|0;c[i+44>>2]=ba;c[i+28>>2]=c[v>>2];if((r|0)==(b[ba+40>>1]|0)){b[i+32>>1]=-1;break}else{b[i+32>>1]=r;$=cw(1,0,(r>>>0<63?r:63)|0)|0;aa=L()|0;_=w;aa=c[_+4>>2]|aa;ba=w;c[ba>>2]=c[_>>2]|$;c[ba+4>>2]=aa;break}}else i=0}while(0);h=ej(ma,53,j,i)|0;if(t&(h|0)!=0){ba=h+4|0;c[ba>>2]=c[ba>>2]|1;b[h+36>>1]=c[i+28>>2]}ba=Xk(l,c[H>>2]|0,h)|0;c[H>>2]=ba;s=s+1|0}while((s|0)<(c[M>>2]|0))}}D=D+1|0;if((D|0)>=((c[G>>2]|0)+-1|0))break i;else{E=E+72|0;F=F+72|0}}if((ca|0)==142){c[N>>2]=0;cd(ma,41125,N);pa=2;Ra=qa;return pa|0}else if((ca|0)==190){cd(ma,41175,O);pa=2;Ra=qa;return pa|0}else if((ca|0)==246){c[P>>2]=o;cd(ma,41230,P);pa=2;Ra=qa;return pa|0}}while(0);k=c[fa>>2]|0;q:do if((k|0)>0){j=0;h=0;r:while(1){i=c[fa+4+(j*20|0)>>2]|0;switch(a[i>>0]|0){case -84:break r;case -122:{if((a[c[i+16>>2]>>0]|0)==-84)break r;break}default:{}}h=c[i+4>>2]|h;j=j+1|0;if((j|0)>=(k|0)){ca=415;break q}}M=0==0?(c[(c[ma>>2]|0)+32>>2]&68|0)==4:0;N=ga+4|0;O=ga+4|0;P=ga+4|0;Q=(na|0)==0;R=ma+200|0;S=na+480|0;T=na+304|0;U=ma+272|0;V=na+308|0;W=na+300|0;X=na+272|0;Y=na+276|0;Z=na+288|0;_=na+296|0;$=na+284|0;aa=na+292|0;ba=na+16|0;i=0;K=0;do{k=fa+4+(K*20|0)|0;j=c[k>>2]|0;h=c[j+4>>2]|h;switch(a[j>>0]|0){case -84:{J=0;ca=260;break}case -122:{if((a[c[j+16>>2]>>0]|0)==-84){J=c[(c[j+12>>2]|0)+8>>2]|0;ca=260}else ca=256;break}default:ca=256}do if((ca|0)==256){ca=0;i=nj(c[ma>>2]|0,i,j)|0;if(i|0){I=fa+4+(K*20|0)+4|0;H=(c[i>>2]|0)+-1|0;c[i+4+(H*20|0)+4>>2]=c[I>>2];J=fa+4+(K*20|0)+8|0;c[i+4+(H*20|0)+8>>2]=c[J>>2];c[I>>2]=0;c[J>>2]=0}c[k>>2]=0}else if((ca|0)==260){ca=0;if((c[ea>>2]|0)>0){H=(J|0)==0;I=(J|0)!=0;j=0;F=0;G=da;while(1){n=c[G+16>>2]|0;l=c[G+20>>2]|0;k=c[G+12>>2]|0;if(!k)E=c[n>>2]|0;else E=k;if(a[ha>>0]|0)break;if((l|0)!=0?(c[l+8>>2]&2048|0)!=0:0){D=0;ca=276}else ca=267;do if((ca|0)==267){ca=0;if(!H){D=a[J>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[E>>0]|0)>>0]|0)|0;if(!(D<<24>>24==0|(k|0)!=0)){l=E;m=J;do{m=m+1|0;l=l+1|0;D=a[m>>0]|0;k=(d[208+(D&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(D<<24>>24==0|(k|0)!=0))}if(k|0)break}l=c[n+72>>2]|0;if(!l){D=40769;l=0;ca=276}else{m=c[ba>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0;D=c[m+(k<<4)>>2]|0;l=0;ca=276}}while(0);if((ca|0)==276){ca=0;C=n+42|0;if((b[C>>1]|0)>0){v=n+4|0;w=(l|0)!=0;f=I&w;B=H&(F|0)!=0;x=G+36|0;y=G+48|0;z=(E|0)==0;A=(D|0)==0;u=0;do{r=c[v>>2]|0;s=c[r+(u<<4)>>2]|0;s:do if(f){m=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;k=0;t:while(1){switch(a[m+k>>0]|0){case 46:case 0:break t;default:{}}k=k+1|0}k=m+(k+1)|0;q=0;u:while(1){switch(a[k+q>>0]|0){case 46:case 0:break u;default:{}}q=q+1|0}v:do if(q|0){p=J;n=q;while(1){m=a[k>>0]|0;if(!(m<<24>>24)){ca=288;break}m=a[208+(m&255)>>0]|0;o=a[208+(d[p>>0]|0)>>0]|0;if(m<<24>>24!=o<<24>>24){ca=290;break}if((n|0)>1){k=k+1|0;p=p+1|0;n=n+-1|0}else break v}if((ca|0)==288){ca=0;m=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((ca|0)==290){ca=0;m=m&255;k=o}if((m|0)!=(k&255|0))break s}while(0);if(!(a[J+q>>0]|0))ca=294}else ca=294;while(0);w:do if((ca|0)==294){ca=0;if((c[oa>>2]&131072|0)==0?a[r+(u<<4)+15>>0]&2:0)break;do if(B){if(a[x>>0]&4){r=0;do{j=c[ea+8+(r*72|0)+16>>2]|0;k=b[j+42>>1]|0;if(k<<16>>16>0){p=c[j+4>>2]|0;q=d[208+(d[s>>0]|0)>>0]|0;o=k<<16>>16;n=0;do{k=c[p+(n<<4)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-q|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(o|0))}r=r+1|0}while(r>>>0>>0)}j=c[y>>2]|0;if(!j)break;q=c[j+4>>2]|0;if((q|0)<=0)break;o=c[j>>2]|0;p=d[208+(d[s>>0]|0)>>0]|0;n=0;do{k=c[o+(n<<3)>>2]|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-p|0;if(!(t<<24>>24==0|(j|0)!=0)){m=s;do{k=k+1|0;m=m+1|0;t=a[k>>0]|0;j=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(j|0)!=0))}if(!j){j=1;break w}n=n+1|0}while((n|0)<(q|0))}while(0);c[ga>>2]=s;if(!s)j=0;else j=(Eu(s)|0)&1073741823;c[N>>2]=j;j=oj(na,59,ga,0)|0;if(!M?(c[ea>>2]|0)<=1:0){t=0;r=s}else ca=319;do if((ca|0)==319){ca=0;c[ga>>2]=E;if(z)k=0;else k=(Eu(E)|0)&1073741823;c[O>>2]=k;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0;if(!A){c[ga>>2]=D;t=(Eu(D)|0)&1073741823;c[P>>2]=t;j=ej(ma,134,oj(na,59,ga,0)|0,j)|0}if(!M){t=0;r=s;break}c[ia>>2]=E;c[ia+4>>2]=s;r=dd(na,40358,ia)|0;t=r}while(0);i=nj(c[ma>>2]|0,i,j)|0;q=r;j=(r|0)==0;if(j)p=0;else p=(Eu(r)|0)&1073741823;do if(i|0){o=(c[i>>2]|0)+-1|0;n=c[ma>>2]|0;x:do if(j)n=0;else{m=p+1|0;y:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))ca=339;else{n=0;break x}else{do if(!(0>0|(0==0?m>>>0>(e[n+276>>1]|0)>>>0:0))){k=n+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}k=n+296|0;j=c[k>>2]|0;if(!j){j=n+292|0;break}else{c[k>>2]=c[j>>2];s=n+284|0;c[s>>2]=(c[s>>2]|0)+1;break y}}else j=n+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=339}while(0);if((ca|0)==339){ca=0;j=_d(n,m,0)|0}if(!j){n=0;break}ew(j|0,r|0,p|0)|0;a[j+p>>0]=0;n=j}while(0);c[i+4+(o*20|0)+4>>2]=n;z:do if((d[R>>0]|0)>1){m=c[ma>>2]|0;A:do if(!m){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;ca=366;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;o=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&o>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j)break z;k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break z}else{do if((e[m+276>>1]|0)>=16){k=m+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}k=m+296|0;j=c[k>>2]|0;if(!j){j=m+292|0;break}else{c[k>>2]=c[j>>2];ca=m+284|0;c[ca>>2]=(c[ca>>2]|0)+1;ca=366;break A}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(m,16,0)|0;ca=366}while(0);if((ca|0)==366){ca=0;if(!j)break}c[j>>2]=n;c[j+4>>2]=q;c[j+8>>2]=p;c[j+12>>2]=c[U>>2];c[U>>2]=j}while(0);if(!(c[oa>>2]&2048))break;p=(c[i>>2]|0)+-1|0;B:do if(w){n=c[(c[l>>2]|0)+4+(u*20|0)+8>>2]|0;if(!n){j=0;break}o=(Eu(n)|0)+1|0;C:do if(Q){s=Sv(o|0,0,-1,-1)|0;r=L()|0;if(r>>>0>0|(r|0)==0&s>>>0>2147483390){j=0;break B}if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](o)|0;ca=393;break}j=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){s=c[14978]|0;r=Tv(k|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){j=0;break B}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}else{if(c[X>>2]|0){if(a[ha>>0]|0){j=0;break B}}else{do if(0<0|(0==0?(e[Y>>1]|0)>>>0>>0:0))j=Z;else{j=c[W>>2]|0;if(j|0){c[W>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}j=c[_>>2]|0;if(!j){j=aa;break}c[_>>2]=c[j>>2];c[$>>2]=(c[$>>2]|0)+1;ca=393;break C}while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(na,o,0)|0;ca=393}while(0);if((ca|0)==393){ca=0;if(!j){j=0;break}}ew(j|0,n|0,o|0)|0}else{c[ja>>2]=D;c[ja+4>>2]=E;c[ja+8>>2]=r;j=dd(na,40771,ja)|0}while(0);c[i+4+(p*20|0)+8>>2]=j;s=i+4+(p*20|0)+13|0;a[s>>0]=a[s>>0]|2}while(0);if(!t){j=1;break}do if(!Q){if(c[S>>2]|0){Xd(na,t);j=1;break w}j=t;if((c[T>>2]|0)>>>0>j>>>0)break;if((c[V>>2]|0)>>>0<=j>>>0)break;c[t>>2]=c[W>>2];c[W>>2]=t;j=1;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);j=1;break}else{j=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);j=1;break}}while(0);u=u+1|0}while((u|0)<(b[C>>1]|0))}}F=F+1|0;if((F|0)>=(c[ea>>2]|0))break;else G=G+72|0}if(j)break}if(!J){cd(ma,40798,la);break}else{c[ka>>2]=J;cd(ma,40780,ka);break}}while(0);K=K+1|0}while((K|0)<(c[fa>>2]|0));ri(na,fa);c[g>>2]=i}else{h=0;ca=415}while(0);if((ca|0)==415)i=c[g>>2]|0;if(!i){pa=0;Ra=qa;return pa|0}if((c[i>>2]|0)>(c[na+116>>2]|0)){cd(ma,40818,pa);pa=2;Ra=qa;return pa|0}if(!(h&2097156)){pa=0;Ra=qa;return pa|0}c[oa>>2]=c[oa>>2]|262144;pa=0;Ra=qa;return pa|0}function Pk(a,b){a=a|0;b=b|0;var d=0;d=(c[a>>2]|0)+264|0;if(!(c[d>>2]|0))return;if(c[b+52>>2]|0)return;a=b;while(1){b=c[a+56>>2]|0;if(!b)break;else a=b}a=c[a+64>>2]|0;if(!a)return;c[d>>2]=c[a+4>>2];return}function Qk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;if(!b)return;d=c[b>>2]|0;if((d|0)<=0)return;h=a+40|0;f=0;g=b+8|0;while(1){e=g+40|0;if((c[e>>2]|0)>-1){d=8;break}i=c[h>>2]|0;c[h>>2]=i+1;c[e>>2]=i;e=c[g+20>>2]|0;if(e){Qk(a,c[e+32>>2]|0);d=c[b>>2]|0}f=f+1|0;if((f|0)>=(d|0)){d=8;break}else g=g+72|0}if((d|0)==8)return}function Rk(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o;g=c[f+20>>2]|0;j=c[d>>2]|0;a:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](80)|0;n=24;break}h=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){m=c[14978]|0;k=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=m>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;m=i}else m=i}else n=25}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){n=25;break}}else{do if((e[j+276>>1]|0)>=80){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=24;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,80,0)|0;n=24}while(0);if((n|0)==24)if(!h)n=25;else m=h;if((n|0)==25){c[f+16>>2]=0;d=7;Ra=o;return d|0}h=m;i=h+80|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(i|0));c[f+16>>2]=m;c[m+32>>2]=1;k=c[f+12>>2]|0;j=c[d>>2]|0;b:do if(!k){c[l>>2]=c[g+20>>2];h=dd(j,41042,l)|0}else{f=(Eu(k)|0)+1|0;c:do if(!j){l=Sv(f|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&l>>>0>2147483390){h=0;break b}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;n=51;break}h=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0>>0)c[14985]=f;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){l=c[14978]|0;j=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&j>>>0<=l>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){h=0;break b}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break b}}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];n=j+284|0;c[n>>2]=(c[n>>2]|0)+1;n=51;break c}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,0)|0;n=51}while(0);if((n|0)==51)if(!h){h=0;break}ew(h|0,k|0,f|0)|0}while(0);c[m>>2]=h;while(1){h=c[g+52>>2]|0;if(!h)break;else g=h}Tk(c[d>>2]|0,c[g>>2]|0,m+42|0,m+4|0);b[m+40>>1]=-1;b[m+44>>1]=200;d=m+36|0;c[d>>2]=c[d>>2]|2;d=0;Ra=o;return d|0}function Sk(e,f){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;v=Ra;Ra=Ra+32|0;s=v+16|0;r=v+8|0;n=v;o=v+20|0;u=c[e>>2]|0;p=u+56|0;i=c[p>>2]|0;c[p>>2]=i+1;q=f+56|0;g=c[q>>2]|0;a:do if(g){h=c[f+64>>2]|0;if(h|0)do{if((c[h>>2]|0)==(u|0)){t=33;break a}h=c[h+24>>2]|0}while((h|0)!=0);m=c[c[f+60>>2]>>2]|0;j=c[u+348>>2]|0;if(!j){h=u+340|0;g=u+344|0}else{h=a[m>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=m;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}g=(g>>>0)%((c[u+336>>2]|0)>>>0)|0;h=j+(g<<3)|0;g=j+(g<<3)+4|0}h=c[h>>2]|0;b:do if(!h)g=59292;else{l=d[208+(d[m>>0]|0)>>0]|0;while(1){g=c[g>>2]|0;h=h+-1|0;j=c[g+12>>2]|0;k=a[j>>0]|0;i=(d[208+(k&255)>>0]|0)-l|0;if(!(k<<24>>24==0|(i|0)!=0)){k=m;do{j=j+1|0;k=k+1|0;w=a[j>>0]|0;i=(d[208+(w&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(w<<24>>24==0|(i|0)!=0))}if(!i)break b;if(!h){g=59292;break}}}while(0);g=c[g+8>>2]|0;if(!g){c[n>>2]=m;cd(e,36690,n);c[p>>2]=(c[p>>2]|0)+-1;w=1;Ra=v;return w|0}c[o>>2]=0;h=Ai(u,f,g,c[(c[g>>2]|0)+8>>2]|0,o)|0;i=(h|0)==0;g=c[o>>2]|0;if(!i){c[r>>2]=g;cd(e,31408,r);c[e+12>>2]=h}do if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[p>>2]=(c[p>>2]|0)+-1;if(i){g=c[q>>2]|0;break}else{w=1;Ra=v;return w|0}}else t=33;while(0);if((t|0)==33)c[p>>2]=i;if(g|0){w=0;Ra=v;return w|0}p=f+42|0;g=b[p>>1]|0;if(g<<16>>16>0){w=0;Ra=v;return w|0}if(g<<16>>16<0){c[s>>2]=c[f>>2];cd(e,41077,s);w=1;Ra=v;return w|0}i=fk(u,c[f+12>>2]|0,0)|0;if(!i)o=1;else{j=e+200|0;k=a[j>>0]|0;a[j>>0]=0;h=e+40|0;w=c[h>>2]|0;Qk(e,c[i+32>>2]|0);b[p>>1]=-1;l=u+272|0;c[l>>2]=(c[l>>2]|0)+1;s=u+312|0;r=c[s>>2]|0;c[s>>2]=0;g=yk(e,i)|0;c[s>>2]=r;c[h>>2]=w;h=c[f+24>>2]|0;do if(!h)if(!g){b[p>>1]=0;g=1;break}else{w=g+42|0;b[p>>1]=b[w>>1]|0;t=g+4|0;c[f+4>>2]=c[t>>2];b[w>>1]=0;c[t>>2]=0;t=50;break}else{Tk(c[e>>2]|0,h,p,f+4|0);if(((a[u+81>>0]|0)==0?(c[e+36>>2]|0)==0:0)?(c[c[i>>2]>>2]|0)==(b[p>>1]|0):0)Uk(e,f,i);if(!g)g=0;else t=50}while(0);do if((t|0)==50){if(c[u+480>>2]|0){Vi(u,g);g=0;break}t=g+32|0;w=(c[t>>2]|0)+-1|0;c[t>>2]=w;if(!w){Vi(u,g);g=0}else g=0}while(0);pi(u,i,1);c[l>>2]=(c[l>>2]|0)+-1;a[j>>0]=k;o=g}w=(c[f+72>>2]|0)+78|0;b[w>>1]=b[w>>1]|2;if(!(a[u+81>>0]|0)){w=o;Ra=v;return w|0}n=f+4|0;g=c[n>>2]|0;do if(g|0){if((b[p>>1]|0)>0){j=u+480|0;k=u+304|0;l=u+308|0;m=u+300|0;i=0;while(1){h=c[g>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[g+4>>2]|0;if(h|0)ni(u,h);h=c[g+8>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(u,h);break}w=h;if((c[k>>2]|0)>>>0<=w>>>0?(c[l>>2]|0)>>>0>w>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{w=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;if((i|0)>=(b[p>>1]|0))break;else g=g+16|0}g=c[n>>2]|0}if(g|0){if(u|0){if(c[u+480>>2]|0){Xd(u,g);break}w=g;if((c[u+304>>2]|0)>>>0<=w>>>0?(c[u+308>>2]|0)>>>0>w>>>0:0){w=u+300|0;c[g>>2]=c[w>>2];c[w>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{w=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);c[n>>2]=0;b[p>>1]=0;w=o;Ra=v;return w|0}function Tk(f,g,h,i){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,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0;R=Ra;Ra=Ra+48|0;P=R+8|0;O=R;N=R+40|0;Q=R+24|0;c[Q>>2]=0;c[Q+4>>2]=0;c[Q+8>>2]=0;c[Q+12>>2]=0;do if(g){n=c[g>>2]|0;m=n<<4;a:do if(!f){M=Sv(m|0,0,-1,-1)|0;K=L()|0;if(!(K>>>0>0|(K|0)==0&M>>>0>2147483390)){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](m)|0;s=27;break}j=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){M=c[14978]|0;K=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;J=L()|0;c[14768]=((J|0)<0|(J|0)==0&K>>>0<=M>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(j){k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;s=28}else s=28}else M=0}else M=0}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){M=0;break}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0>>0:0))){k=f+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}k=f+296|0;j=c[k>>2]|0;if(!j){j=f+292|0;break}else{c[k>>2]=c[j>>2];s=f+284|0;c[s>>2]=(c[s>>2]|0)+1;s=27;break a}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(f,m,0)|0;s=27}while(0);if((s|0)==27)if(!j)M=0;else s=28;if((s|0)==28){gw(j|0,0,m|0)|0;M=j}if((n|0)<32767){b[h>>1]=n;c[i>>2]=M;k=f+81|0;if((n|0)>0)K=k;else{j=M;l=M;s=32;break}}else{b[h>>1]=32767;c[i>>2]=M;n=32767;K=f+81|0}H=(f|0)==0;J=Q+12|0;I=Q+8|0;u=Q+4|0;v=f+272|0;w=f+276|0;x=f+288|0;y=f+300|0;z=f+296|0;A=f+284|0;B=f+292|0;C=f+82|0;D=f+180|0;E=f+264|0;F=f+236|0;t=M;l=0;while(1){if(a[K>>0]|0)break;j=c[g+4+(l*20|0)+4>>2]|0;do if(!j){j=c[g+4+(l*20|0)>>2]|0;b:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break b;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);c:while(1){switch(a[j>>0]|0){case -94:{s=46;break c}case 59:{s=50;break c}case -122:break;default:{s=51;break c}}j=c[j+16>>2]|0}if((s|0)==46){k=b[j+32>>1]|0;m=c[j+44>>2]|0;if(k<<16>>16<0)j=b[m+40>>1]|0;else j=k<<16>>16;if((j|0)<=-1){j=38132;s=53;break}j=(c[m+4>>2]|0)+(j<<4)|0}else if((s|0)==50)j=j+8|0;else if((s|0)==51)j=g+4+(l*20|0)+8|0;j=c[j>>2]|0;if(!j){c[O>>2]=l+1;j=dd(f,41025,O)|0;c[N>>2]=0;if(!j)s=107;else s=78}else s=53}else s=53;while(0);do if((s|0)==53){p=(Eu(j)|0)+1|0;do if(H){s=Sv(p|0,0,-1,-1)|0;r=L()|0;if(!(r>>>0>0|(r|0)==0&s>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](p)|0;s=74;break}k=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0

      >>0)c[14985]=p;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){s=c[14978]|0;r=Tv(m|0,o|0,k|0,((k|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(k){m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0){c[14987]=m;s=75}else s=75}else s=76}else s=76}else{if(!(c[v>>2]|0)){if(!(0<0|(0==0?(e[w>>1]|0)>>>0

      >>0:0))){k=c[y>>2]|0;if(k|0){c[y>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}k=c[z>>2]|0;if(!k)k=B;else{c[z>>2]=c[k>>2];c[A>>2]=(c[A>>2]|0)+1;s=74;break}}else k=x;c[k>>2]=(c[k>>2]|0)+1}k=_d(f,p,0)|0;s=74}while(0);if((s|0)==74)if(!k)s=76;else s=75;if((s|0)==75){ew(k|0,j|0,p|0)|0;c[N>>2]=0;j=k;s=78;break}else if((s|0)==76){c[N>>2]=0;s=107;break}}while(0);d:do if((s|0)==78){s=0;while(1){p=c[J>>2]|0;if(!p){m=u;k=I}else{m=a[j>>0]|0;if(!(m<<24>>24))k=0;else{k=0;o=j;do{o=o+1|0;k=G(k+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}k=(k>>>0)%((c[Q>>2]|0)>>>0)|0;m=p+(k<<3)|0;k=p+(k<<3)+4|0}m=c[m>>2]|0;e:do if(!m)k=59292;else{r=d[208+(d[j>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;m=m+-1|0;p=c[k+12>>2]|0;q=a[p>>0]|0;o=(d[208+(q&255)>>0]|0)-r|0;if(!(q<<24>>24==0|(o|0)!=0)){q=j;do{p=p+1|0;q=q+1|0;S=a[p>>0]|0;o=(d[208+(S&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(o|0)!=0))}if(!o)break e;if(!m){k=59292;break}}}while(0);if(!(c[k+8>>2]|0))break;S=Eu(j)|0;k=S&1073741823;f:do switch(S&1073741823|0){case 0:break;case 1:{m=0;s=96;break}default:{o=k+-1|0;while(1){if(((d[j+o>>0]|0)+-48|0)>>>0>=10){m=o;s=96;break f}m=o+-1|0;if((o|0)>1)o=m;else{s=96;break}}}}while(0);if((s|0)==96){s=0;k=(a[j+m>>0]|0)==58?m:k}S=(c[N>>2]|0)+1|0;c[N>>2]=S;c[P>>2]=k;c[P+4>>2]=j;c[P+8>>2]=S;j=dd(f,41034,P)|0;if((c[N>>2]|0)>>>0>3)Fb(4,N);if(!j){s=107;break d}}c[t>>2]=j;if(((mi(Q,j,t)|0)==(t|0)?(a[K>>0]|0)==0:0)?(a[C>>0]|0)==0:0){a[K>>0]=1;if((c[D>>2]|0)>0)c[E>>2]=1;c[v>>2]=(c[v>>2]|0)+1;j=c[F>>2]|0;if(j|0)c[j+12>>2]=7}}while(0);if((s|0)==107){s=0;c[t>>2]=0}l=l+1|0;if((l|0)<(n|0))t=t+16|0;else break}j=c[I>>2]|0;k=c[J>>2]|0;c[I>>2]=0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[J>>2]=0;c[Q>>2]=0;if(!j){r=M;q=l;j=K;l=M}else{do{k=j;j=c[j>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while((j|0)!=0);r=M;q=l;j=K;l=M}}else{b[h>>1]=0;c[i>>2]=0;j=0;k=f+81|0;l=0;s=32}while(0);if((s|0)==32){c[Q+8>>2]=0;c[Q+12>>2]=0;c[Q>>2]=0;r=j;q=0;j=k}c[Q+4>>2]=0;if(!(a[j>>0]|0)){Ra=R;return}g:do if(q|0){k=f+480|0;m=f+304|0;n=f+308|0;o=f+300|0;if(!f){j=0;while(1){k=c[r+(j<<4)>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);j=j+1|0;if((j|0)==(q|0))break g}}j=0;do{p=c[r+(j<<4)>>2]|0;do if(p|0){if(c[k>>2]|0){Xd(f,p);break}S=p;if((c[m>>2]|0)>>>0<=S>>>0?(c[n>>2]|0)>>>0>S>>>0:0){c[p>>2]=c[o>>2];c[o>>2]=p;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{S=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);j=j+1|0}while((j|0)!=(q|0))}while(0);do if(l|0){if(f|0){if(c[f+480>>2]|0){Xd(f,l);break}S=l;if((c[f+304>>2]|0)>>>0<=S>>>0?(c[f+308>>2]|0)>>>0>S>>>0:0){S=f+300|0;c[l>>2]=c[S>>2];c[S>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{S=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[i>>2]=0;b[h>>1]=0;Ra=R;return}function Uk(d,f,g){d=d|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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+32|0;F=I;G=c[d>>2]|0;H=G+81|0;if(a[H>>0]|0){Ra=I;return};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;c[F+4>>2]=c[g+32>>2];r=c[g>>2]|0;s=f+42|0;if((b[s>>1]|0)>0){t=G+272|0;u=G+304|0;v=G+276|0;w=G+308|0;x=G+288|0;y=G+300|0;z=G+480|0;A=(G|0)==0;B=G+296|0;C=G+284|0;D=G+292|0;p=0;q=c[f+4>>2]|0;while(1){m=c[r+4+(p*20|0)>>2]|0;l=Vk(F,m)|0;g=Xj(m)|0;n=q+13|0;a[n>>0]=g;if(l){k=(Eu(l)|0)&1073741823;h=c[q>>2]|0;a:do if(!h){h=k+2|0;do if(c[t>>2]|0)if(!(a[H>>0]|0))o=15;else{c[q>>2]=0;break a}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1;o=15}while(0);if((o|0)==15){o=0;g=_d(G,h,0)|0}c[q>>2]=g;if(g|0){g=g+1|0;o=32}}else{i=(Eu(h)|0)&1073741823;g=k+2+i|0;j=h;if(((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[v>>1]|0)>>>0>>0:0)):0){g=h+(i+1)|0;o=32;break}g=Zd(G,h,g,0)|0;if(g|0){c[q>>2]=g;g=g+(i+1)|0;o=32;break}do if(!(c[z>>2]|0)){if((c[u>>2]|0)>>>0<=j>>>0?(c[w>>2]|0)>>>0>j>>>0:0){c[h>>2]=c[y>>2];c[y>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(G,h);while(0);c[q>>2]=0}while(0);if((o|0)==32){o=0;j=q+15|0;ew(g|0,l|0,k+1|0)|0;a[j>>0]=a[j>>0]|4}g=a[n>>0]|0}if(!(g<<24>>24))a[n>>0]=65;g=Yi(d,m)|0;if(g|0?(E=q+8|0,(c[E>>2]|0)==0):0){j=c[g>>2]|0;b:do if(!j)g=0;else{k=(Eu(j)|0)+1|0;do if(A){n=Sv(k|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&n>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;o=61;break}g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[t>>2]|0){if(a[H>>0]|0){g=0;break b}}else{if(!(0<0|(0==0?(e[v>>1]|0)>>>0>>0:0))){g=c[y>>2]|0;if(g|0){c[y>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}g=c[B>>2]|0;if(!g)g=D;else{c[B>>2]=c[g>>2];c[C>>2]=(c[C>>2]|0)+1;o=61;break}}else g=x;c[g>>2]=(c[g>>2]|0)+1}g=_d(G,k,0)|0;o=61}while(0);if((o|0)==61){o=0;if(!g){g=0;break}}ew(g|0,j|0,k|0)|0}while(0);c[E>>2]=g}p=p+1|0;if((p|0)>=(b[s>>1]|0))break;else q=q+16|0}}b[f+46>>1]=1;Ra=I;return}function Vk(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;o=Ra;Ra=Ra+32|0;m=o;switch(a[e>>0]|0){case -94:{k=b[e+32>>1]|0;n=k<<16>>16;if(!d){n=0;Ra=o;return n|0}j=e+28|0;f=0;do{i=c[d+4>>2]|0;g=c[i>>2]|0;a:do if((g|0)>0){h=c[j>>2]|0;e=0;while(1){if((c[i+8+(e*72|0)+40>>2]|0)==(h|0))break;e=e+1|0;if((e|0)>=(g|0)){l=9;break a}}g=c[i+8+(e*72|0)+16>>2]|0;f=c[i+8+(e*72|0)+20>>2]|0}else l=9;while(0);if((l|0)==9){l=0;d=c[d+12>>2]|0;g=0}e=(g|0)==0}while(e&(d|0)!=0);if(e){n=0;Ra=o;return n|0}if(!f){if(k<<16>>16<0){n=31453;Ra=o;return n|0}e=c[g+4>>2]|0;if(!(a[e+(n<<4)+15>>0]&4)){n=0;Ra=o;return n|0}n=c[e+(n<<4)>>2]|0;n=n+(Eu(n)|0)+1|0;Ra=o;return n|0}else{if(k<<16>>16<=-1){n=0;Ra=o;return n|0}e=c[f>>2]|0;if((c[e>>2]|0)<=(n|0)){n=0;Ra=o;return n|0}n=c[e+4+(n*20|0)>>2]|0;c[m+4>>2]=c[f+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}}case -125:{l=c[e+20>>2]|0;n=c[(c[l>>2]|0)+4>>2]|0;c[m+4>>2]=c[l+32>>2];c[m+12>>2]=d;c[m>>2]=c[d>>2];n=Vk(m,n)|0;Ra=o;return n|0}default:{n=0;Ra=o;return n|0}}return 0}function Wk(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;if(!d)return;j=e&65535;do{g=d+4|0;c[g>>2]=c[g>>2]|1;b[d+36>>1]=j;if(((a[d>>0]|0)==-95?(h=d+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){f=0;g=i;do{Wk(c[g+4+(f*20|0)>>2]|0,e);f=f+1|0;g=c[h>>2]|0}while((f|0)<(c[g>>2]|0))}Wk(c[d+12>>2]|0,e);d=c[d+16>>2]|0}while((d|0)!=0);return}function Xk(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;h=m;if(!f){l=g;Ra=m;return l|0}if(!g){l=f;Ra=m;return l|0}c[h>>2]=0;l=f+4|0;if((c[l>>2]&1|0)==0?(uk(f,h)|0)!=0:0)if(!(c[h>>2]|0)){ni(d,f);ni(d,g)}else j=7;else j=7;do if((j|0)==7){c[h>>2]=0;k=g+4|0;if((c[k>>2]&1|0)==0?(uk(g,h)|0)!=0:0){if(!(c[h>>2]|0)){ni(d,f);ni(d,g);break}}else j=9;a:do if(c[d+272>>2]|0){if(!(a[d+81>>0]|0))j=24}else{do if((e[d+276>>1]|0)>=52){h=d+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}h=d+296|0;i=c[h>>2]|0;if(!i){h=d+292|0;break}else{c[h>>2]=c[i>>2];j=d+284|0;c[j>>2]=(c[j>>2]|0)+1;j=25;break a}}else h=d+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=24}while(0);if((j|0)==24){i=_d(d,52,0)|0;j=25}if((j|0)==25?i|0:0){h=i;j=h+52|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));a[i>>0]=44;b[i+34>>1]=-1;c[i+24>>2]=1;c[i+16>>2]=g;k=c[k>>2]&2097412;g=i+4|0;c[g>>2]=k;c[i+12>>2]=f;c[g>>2]=k|c[l>>2]&2097412;Ym(i);l=i;Ra=m;return l|0}ni(d,f);ni(d,g);l=0;Ra=m;return l|0}while(0);l=oj(d,147,17136,0)|0;Ra=m;return l|0}function Yk(a,b){a=a|0;b=b|0;return 0}function Zk(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=b+8|0;e=c[d>>2]|0;if(e&128|0)return;c[d>>2]=e|128;h=c[a>>2]|0;g=c[b+32>>2]|0;a=c[g>>2]|0;if((a|0)<=0)return;b=0;f=g+8|0;while(1){e=c[f+16>>2]|0;if((c[e+36>>2]&2|0)!=0?(i=c[f+20>>2]|0,(i|0)!=0):0){a=i;while(1){d=c[a+52>>2]|0;if(!d)break;else a=d}Uk(h,e,a);a=c[g>>2]|0}b=b+1|0;if((b|0)>=(a|0))break;else f=f+72|0}return}function _k(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!(c[b+4>>2]&16777216))return 0;a=(c[a+24>>2]|0)+68|0;e=c[a>>2]|0;if(!e)return 0;f=c[b+44>>2]|0;d=a;b=e;while(1){a=b+32|0;if((b|0)==(f|0))break;b=c[a>>2]|0;if(!b){g=7;break}else d=a}if((g|0)==7)return 0;c[d>>2]=c[a>>2];return 0}function $k(a,b){a=a|0;b=b|0;var d=0;a=c[(c[a>>2]|0)+272>>2]|0;if(!a)return 0;while(1){if((c[a>>2]|0)==(b|0))break;a=c[a+12>>2]|0;if(!a){d=6;break}}if((d|0)==6)return 0;c[a>>2]=0;return 0}function al(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;r=Ra;Ra=Ra+16|0;q=r;if(!e){q=0;Ra=r;return q|0}m=c[b+12>>2]|0;if((c[e>>2]|0)<=0){q=0;Ra=r;return q|0}n=b+8|0;p=b+4|0;k=0;l=e+8|0;a:while(1){if(!(c[n>>2]|0)){i=l+4|0;j=c[i>>2]|0;do if(j|0){h=a[j>>0]|0;f=(d[208+(h&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(h<<24>>24==0|(f|0)!=0)){g=m;h=j;do{h=h+1|0;g=g+1|0;s=a[h>>0]|0;f=(d[208+(s&255)>>0]|0)-(d[208+(d[g>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(f|0)!=0))}h=c[b>>2]|0;if(f|0){g=10;break a}f=c[h>>2]|0;if(f|0){if(c[f+480>>2]|0){Xd(f,j);break}s=j;if((c[f+304>>2]|0)>>>0<=s>>>0?(c[f+308>>2]|0)>>>0>s>>>0:0){s=f+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[i>>2]=0;c[l>>2]=c[p>>2]}if(cl(b,c[l+20>>2]|0)|0){f=1;g=30;break}if(dl(b,c[l+44>>2]|0)|0){f=1;g=30;break}if((a[l+37>>0]&4?(o=c[l+64>>2]|0,o|0):0)?(c[o>>2]|0)>0:0){f=o+4|0;g=0;while(1){if(dl(b,c[f>>2]|0)|0){f=1;g=30;break a}g=g+1|0;if((g|0)>=(c[o>>2]|0))break;else f=f+20|0}}k=k+1|0;if((k|0)>=(c[e>>2]|0)){f=0;g=30;break}else l=l+72|0}if((g|0)==10){s=c[b+20>>2]|0;c[q>>2]=c[b+16>>2];c[q+4>>2]=s;c[q+8>>2]=j;cd(h,42344,q);s=1;Ra=r;return s|0}else if((g|0)==30){Ra=r;return f|0}return 0}function bl(d,f,g){d=d|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,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+16|0;n=A+8|0;m=A;s=A+12|0;q=c[f+12>>2]|0;p=d+40|0;y=c[p>>2]|0;z=y+1|0;c[p>>2]=y+2;k=c[d>>2]|0;i=c[f+24>>2]|0;j=c[k+16>>2]|0;if(!i)t=-1e6;else{h=0;while(1)if((c[j+(h<<4)+12>>2]|0)==(i|0)){t=h;break}else h=h+1|0}i=c[f>>2]|0;h=c[j+(t<<4)>>2]|0;do if(((a[k+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(l=c[k+312>>2]|0,l|0):0){h=$a[l&127](c[k+316>>2]|0,27,i,0,h,c[d+240>>2]|0)|0;if((h|0)==1){cd(d,39216,m);c[d+12>>2]=23;Ra=A;return}if((h|2|0)==2){if(!h)break;Ra=A;return}else{cd(d,39231,n);c[d+12>>2]=1;Ra=A;return}}while(0);Hj(d,t,c[q+28>>2]|0,1,c[q>>2]|0);n=d+8|0;h=c[n>>2]|0;if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;a:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))o=26;else{Ra=A;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break a}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;o=26}while(0);if((o|0)==26)j=_d(k,224,0)|0;if(!j){Ra=A;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=d;c[n>>2]=j;Di(j,61,0,1,0)|0;w=j}else w=h;if((g|0)>-1)l=g;else l=c[f+44>>2]|0;o=Ij(d,f)|0;x=c[p>>2]|0;c[p>>2]=x+1;r=f+50|0;i=e[r>>1]|0;m=(o|0)==0;if(!m)c[o>>2]=(c[o>>2]|0)+1;u=w+108|0;h=c[u>>2]|0;v=w+112|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[w+104>>2]|0;a[p+(h*20|0)>>0]=114;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=x;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=i;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else h=Di(w,114,x,0,i)|0;i=c[w>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(p=(c[o>>2]|0)+-1|0,c[o>>2]=p,(p|0)==0):0){h=c[o+12>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,o);break}p=o;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[o>>2]=c[p>>2];c[p>>2]=o;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);Gj(d,y,t,q,108);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;q=c[w+104>>2]|0;a[q+(h*20|0)>>0]=36;b[q+(h*20|0)+2>>1]=0;c[q+(h*20|0)+4>>2]=y;c[q+(h*20|0)+8>>2]=0;c[q+(h*20|0)+12>>2]=0;c[q+(h*20|0)+16>>2]=0;a[q+(h*20|0)+1>>0]=0}else h=Di(w,36,y,0,0)|0;q=d+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){k=d+44|0;p=(c[k>>2]|0)+1|0;c[k>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[d+148+((p&255)<<2)>>2]|0}i=c[d+116>>2]|0;a[((i|0)==0?d:i)+20>>0]=1;el(d,f,y,p,0,s,0,0)|0;i=c[u>>2]|0;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;k=c[w+104>>2]|0;a[k+(i*20|0)>>0]=-125;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=x;c[k+(i*20|0)+8>>2]=p;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0}else Di(w,131,x,p,0)|0;i=c[s>>2]|0;do if(i|0){j=c[n>>2]|0;k=c[j+12>>2]|0;i=~i;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,j,i);break}else{c[(c[k+64>>2]|0)+(i<<2)>>2]=c[j+108>>2];break}}while(0);i=h+1|0;j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;s=c[w+104>>2]|0;a[s+(j*20|0)>>0]=5;b[s+(j*20|0)+2>>1]=0;c[s+(j*20|0)+4>>2]=y;c[s+(j*20|0)+8>>2]=i;c[s+(j*20|0)+12>>2]=0;c[s+(j*20|0)+16>>2]=0;a[s+(j*20|0)+1>>0]=0}else Di(w,5,y,i,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((h|0)<0?i+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=i;do if((g|0)<0)if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;s=c[w+104>>2]|0;a[s+(i*20|0)>>0]=-119;b[s+(i*20|0)+2>>1]=0;c[s+(i*20|0)+4>>2]=l;c[s+(i*20|0)+8>>2]=t;c[s+(i*20|0)+12>>2]=0;c[s+(i*20|0)+16>>2]=0;a[s+(i*20|0)+1>>0]=0;break}else{Di(w,137,l,t,0)|0;break}while(0);h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;s=c[w+104>>2]|0;a[s+(h*20|0)>>0]=109;b[s+(h*20|0)+2>>1]=0;c[s+(h*20|0)+4>>2]=z;c[s+(h*20|0)+8>>2]=l;c[s+(h*20|0)+12>>2]=t;c[s+(h*20|0)+16>>2]=0;a[s+(h*20|0)+1>>0]=0}else h=Di(w,109,z,l,t)|0;i=c[w>>2]|0;b:do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[u>>2]|0)+-1|0;i=c[w+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(w,i+(h*20|0)|0,o,-9);break}if(!m){c[i+(h*20|0)+16>>2]=o;a[j>>0]=-9}}else if(!(m|(c[i+480>>2]|0)!=0)?(t=(c[o>>2]|0)+-1|0,c[o>>2]=t,(t|0)==0):0){h=c[o+12>>2]|0;do if(h|0){if(c[h+480>>2]|0){Xd(h,o);break b}i=o;if((c[h+304>>2]|0)>>>0>i>>>0)break;if((c[h+308>>2]|0)>>>0<=i>>>0)break;t=h+300|0;c[o>>2]=c[t>>2];c[t>>2]=o;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(g>>31)+16&65520|1;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;l=c[w+104>>2]|0;a[l+(h*20|0)>>0]=34;b[l+(h*20|0)+2>>1]=0;c[l+(h*20|0)+4>>2]=x;c[l+(h*20|0)+8>>2]=0;c[l+(h*20|0)+12>>2]=0;c[l+(h*20|0)+16>>2]=0;a[l+(h*20|0)+1>>0]=0;l=h}else l=Di(w,34,x,0,0)|0;h=c[u>>2]|0;if(!(a[f+54>>0]|0))k=h;else{if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;j=c[w+104>>2]|0;a[j+(h*20|0)>>0]=11;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=0;c[j+(h*20|0)+8>>2]=1;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0;j=h}else j=Di(w,11,0,1,0)|0;k=c[u>>2]|0;i=e[r>>1]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;h=c[w+104>>2]|0;a[h+(k*20|0)>>0]=125;b[h+(k*20|0)+2>>1]=0;c[h+(k*20|0)+4>>2]=x;c[h+(k*20|0)+8>>2]=j;c[h+(k*20|0)+12>>2]=p;c[h+(k*20|0)+16>>2]=0;a[h+(k*20|0)+1>>0]=0;h=k}else h=Di(w,125,x,j,p)|0;if(!(a[(c[w>>2]|0)+81>>0]|0)){g=c[w+104>>2]|0;a[g+(h*20|0)+1>>0]=-3;c[g+(h*20|0)+16>>2]=i}fl(d,2,f);h=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))i=(c[w+104>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else i=59308;c[i+8>>2]=h}if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=x;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=z;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,126,x,p,z)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-126;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=0;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,130,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;f=c[w+104>>2]|0;a[f+(h*20|0)>>0]=-124;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=z;c[f+(h*20|0)+8>>2]=p;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else Di(w,132,z,p,0)|0;h=c[u>>2]|0;if((h|0)>0)b[(c[w+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=16;do if(p){i=a[q>>0]|0;if((i&255)>=8)break;a[q>>0]=i+1<<24>>24;c[d+148+((i&255)<<2)>>2]=p;h=c[u>>2]|0}while(0);if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;d=c[w+104>>2]|0;a[d+(h*20|0)>>0]=3;b[d+(h*20|0)+2>>1]=0;c[d+(h*20|0)+4>>2]=x;c[d+(h*20|0)+8>>2]=k;c[d+(h*20|0)+12>>2]=0;c[d+(h*20|0)+16>>2]=0;a[d+(h*20|0)+1>>0]=0}else Di(w,3,x,k,0)|0;i=c[u>>2]|0;if(!(a[(c[w>>2]|0)+81>>0]|0))h=(c[w+104>>2]|0)+(((l|0)<0?i+-1|0:l)*20|0)|0;else h=59308;c[h+8>>2]=i;if((c[v>>2]|0)>(i|0)){c[u>>2]=i+1;d=c[w+104>>2]|0;a[d+(i*20|0)>>0]=117;b[d+(i*20|0)+2>>1]=0;c[d+(i*20|0)+4>>2]=y;c[d+(i*20|0)+8>>2]=0;c[d+(i*20|0)+12>>2]=0;c[d+(i*20|0)+16>>2]=0;a[d+(i*20|0)+1>>0]=0}else Di(w,117,y,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;y=c[w+104>>2]|0;a[y+(h*20|0)>>0]=117;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=z;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else Di(w,117,z,0,0)|0;h=c[u>>2]|0;if((c[v>>2]|0)>(h|0)){c[u>>2]=h+1;z=c[w+104>>2]|0;a[z+(h*20|0)>>0]=117;b[z+(h*20|0)+2>>1]=0;c[z+(h*20|0)+4>>2]=x;c[z+(h*20|0)+8>>2]=0;c[z+(h*20|0)+12>>2]=0;c[z+(h*20|0)+16>>2]=0;a[z+(h*20|0)+1>>0]=0;Ra=A;return}else{Di(w,117,x,0,0)|0;Ra=A;return}}function cl(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(!b){a=0;return a|0}a:while(1){f=c[b>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(al(a,c[b+32>>2]|0)|0){b=1;d=28;break}if(dl(a,c[b+36>>2]|0)|0){b=1;d=28;break}f=c[b+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+44>>2]|0)|0){b=1;d=28;break}f=c[b+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){d=f+4|0;e=0;while(1){if(dl(a,c[d>>2]|0)|0){b=1;d=28;break a}e=e+1|0;if((e|0)>=(c[f>>2]|0))break;else d=d+20|0}}if(dl(a,c[b+60>>2]|0)|0){b=1;d=28;break}f=b+64|0;d=c[f>>2]|0;if(d|0?(c[d>>2]|0)>0:0){e=0;do{if(cl(a,c[d+8+(e<<4)+8>>2]|0)|0){b=1;d=28;break a}e=e+1|0;d=c[f>>2]|0}while((e|0)<(c[d>>2]|0))}b=c[b+52>>2]|0;if(!b){b=0;d=28;break}}if((d|0)==28)return b|0;return 0}function dl(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+16|0;h=i;if(!d){h=0;Ra=i;return h|0}a:while(1){if((a[d>>0]|0)==-108){e=c[b>>2]|0;if(!(a[(c[e>>2]|0)+165>>0]|0)){f=6;break}a[d>>0]=114}e=c[d+4>>2]|0;if(e&8404992|0){d=0;f=17;break}f=d+20|0;if(!(e&2048)){g=c[f>>2]|0;if(g|0?(c[g>>2]|0)>0:0){e=g+4|0;f=0;while(1){if(dl(b,c[e>>2]|0)|0){d=1;f=17;break a}f=f+1|0;if((f|0)>=(c[g>>2]|0))break;else e=e+20|0}}}else if(cl(b,c[f>>2]|0)|0){d=1;f=17;break}if(dl(b,c[d+16>>2]|0)|0){d=1;f=17;break}d=c[d+12>>2]|0;if(!d){d=0;f=17;break}}if((f|0)==6){c[h>>2]=c[b+16>>2];cd(e,42390,h);h=1;Ra=i;return h|0}else if((f|0)==17){Ra=i;return d|0}return 0}function el(e,f,g,h,i,j,k,l){e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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;I=e+8|0;K=c[I>>2]|0;if(j|0){n=c[f+36>>2]|0;if(n){o=e+56|0;m=(c[o>>2]|0)+-1|0;c[o>>2]=m;c[j>>2]=m;m=e+52|0;c[m>>2]=g+1;o=c[j>>2]|0;p=c[e>>2]|0;j=dk(p,n,0,0)|0;if(!(a[p+81>>0]|0))Tj(e,j,o,16);if(j)ni(p,j)}else m=j;c[m>>2]=0}if((i|0)!=0?(C=f+55|0,((d[C>>0]|d[C+1>>0]<<8)&8)!=0):0)m=f+50|0;else m=f+52|0;p=b[m>>1]|0;C=p&65535;B=p<<16>>16==1;do if(B){m=e+19|0;j=a[m>>0]|0;if(!(j<<24>>24)){y=e+44|0;z=(c[y>>2]|0)+1|0;c[y>>2]=z;break}else{z=j+-1<<24>>24;a[m>>0]=z;z=c[e+148+((z&255)<<2)>>2]|0;break}}else{m=e+32|0;j=c[m>>2]|0;n=e+28|0;o=c[n>>2]|0;if((o|0)<(C|0)){y=e+44|0;z=c[y>>2]|0;c[y>>2]=z+C;z=z+1|0;break}else{c[m>>2]=j+C;c[n>>2]=o-C;z=j;break}}while(0);do if(!k)m=0;else{if((z|0)==(l|0)?(c[k+36>>2]|0)==0:0){m=k;break}m=0}while(0);if(p<<16>>16){x=(m|0)==0;y=f+4|0;q=m+4|0;r=g+1|0;s=e+52|0;t=f+40|0;u=K+108|0;v=f+12|0;w=K+104|0;l=0;do{if(!x){k=b[(c[q>>2]|0)+(l<<1)>>1]|0;m=b[(c[y>>2]|0)+(l<<1)>>1]|0;if(k<<16>>16==-2?1:k<<16>>16!=m<<16>>16)A=28}else{m=b[(c[y>>2]|0)+(l<<1)>>1]|0;A=28}if((A|0)==28){A=0;k=l+z|0;if(m<<16>>16==-2){c[s>>2]=r;m=c[(c[t>>2]|0)+4+(l*20|0)>>2]|0;i=c[e>>2]|0;if(!m)p=0;else p=dk(i,m,0,0)|0;a:do if(!(a[i+81>>0]|0)){do if(p){if((a[p>>0]|0)!=-88){n=Jj(e,p,k)|0;break}m=c[I>>2]|0;j=c[p+28>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;A=c[m+104>>2]|0;a[A+(o*20|0)>>0]=78;b[A+(o*20|0)+2>>1]=0;c[A+(o*20|0)+4>>2]=j;c[A+(o*20|0)+8>>2]=k;c[A+(o*20|0)+12>>2]=0;c[A+(o*20|0)+16>>2]=0;a[A+(o*20|0)+1>>0]=0;A=45;break a}else{Di(m,78,j,k,0)|0;A=45;break a}}else n=Jj(e,0,k)|0;while(0);if((n|0)!=(k|0)?(D=c[I>>2]|0,(D|0)!=0):0){m=D+108|0;j=c[m>>2]|0;if((c[D+112>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[D+104>>2]|0;a[A+(j*20|0)>>0]=79;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=n;c[A+(j*20|0)+8>>2]=k;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0;A=44;break}else{Di(D,79,n,k,0)|0;A=44;break}}else A=44}else A=44;while(0);if((A|0)==44?(A=0,p|0):0)A=45;if((A|0)==45){A=0;ni(i,p)}c[s>>2]=0}else Vj(c[I>>2]|0,c[v>>2]|0,g,m<<16>>16,k);m=c[u>>2]|0;if(((m|0)>0?(E=c[w>>2]|0,F=m+-1|0,G=E+(F*20|0)|0,(a[G>>0]|0)==84):0)?(H=c[K>>2]|0,(a[H+81>>0]|0)==0):0){i=E+(F*20|0)+1|0;k=E+(F*20|0)+16|0;kg(H,a[i>>0]|0,c[k>>2]|0);a[i>>0]=0;c[k>>2]=0;a[G>>0]=-86}}l=l+1|0}while((l|0)!=(C|0))}if(h|0){m=K+108|0;j=c[m>>2]|0;if((c[K+112>>2]|0)>(j|0)){c[m>>2]=j+1;I=c[K+104>>2]|0;a[I+(j*20|0)>>0]=92;b[I+(j*20|0)+2>>1]=0;c[I+(j*20|0)+4>>2]=z;c[I+(j*20|0)+8>>2]=C;c[I+(j*20|0)+12>>2]=h;c[I+(j*20|0)+16>>2]=0;a[I+(j*20|0)+1>>0]=0}else Di(K,92,z,C,h)|0;if(c[(c[f+12>>2]|0)+12>>2]|0?(J=gl(c[e>>2]|0,f)|0,(a[(c[K>>2]|0)+81>>0]|0)==0):0)Ei(K,(c[K+104>>2]|0)+(((c[m>>2]|0)+-1|0)*20|0)|0,J,0)}if(!B){m=e+28|0;if((c[m>>2]|0)>=(C|0))return z|0;c[m>>2]=C;c[e+32>>2]=z;return z|0}if(!z)return z|0;m=e+19|0;j=a[m>>0]|0;if((j&255)>=8)return z|0;a[m>>0]=j+1<<24>>24;c[e+148+((j&255)<<2)>>2]=z;return z|0}function fl(f,g,h){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,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;i=y;w=y+8|0;s=c[h+12>>2]|0;r=c[f>>2]|0;u=c[r+108>>2]|0;x=w+4|0;c[x>>2]=0;c[w>>2]=r;r=w+8|0;c[r>>2]=0;t=w+12|0;c[t>>2]=u;u=w+16|0;c[u>>2]=0;a[w+20>>0]=0;v=w+21|0;a[v>>0]=0;if(!(c[h+40>>2]|0)){n=h+50|0;if(b[n>>1]|0){o=s+4|0;p=h+4|0;m=0;do{q=c[(c[o>>2]|0)+(b[(c[p>>2]|0)+(m<<1)>>1]<<4)>>2]|0;do if(m|0){i=c[u>>2]|0;j=i+2|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;l=(c[x>>2]|0)+i|0;a[l>>0]=44;a[l+1>>0]=32;break}else{wb(w,42425,2);break}}while(0);j=c[s>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=c[u>>2]|0;l=k+i|0;if(l>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=l;ew((c[x>>2]|0)+k|0,j|0,i|0)|0}}else wb(w,j,i);i=c[u>>2]|0;j=i+1|0;if(j>>>0<(c[r>>2]|0)>>>0){c[u>>2]=j;a[(c[x>>2]|0)+i>>0]=46}else wb(w,31183,1);if(!q)i=0;else i=(Eu(q)|0)&1073741823;j=c[u>>2]|0;k=j+i|0;if(k>>>0<(c[r>>2]|0)>>>0){if(i|0){c[u>>2]=k;ew((c[x>>2]|0)+j|0,q|0,i|0)|0}}else wb(w,q,i);m=m+1|0}while(m>>>0<(e[n>>1]|0)>>>0)}}else{c[i>>2]=c[h>>2];Eb(w,42414,i)}i=c[x>>2]|0;if((i|0?(a[i+(c[u>>2]|0)>>0]=0,c[t>>2]|0):0)?(a[v>>0]&4)==0:0){x=$d(w)|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}x=c[x>>2]|0;w=h+55|0;w=d[w>>0]|d[w+1>>0]<<8;w=w&3;w=w<<16>>16==2;w=w?1555:2067;Uj(f,w,g,x,-7,2);Ra=y;return}function gl(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=f+16|0;g=c[m>>2]|0;if(g|0){m=g;return m|0}k=c[f+12>>2]|0;l=f+52|0;h=e[l>>1]|0;g=h+1|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](g)|0;c[m>>2]=g;if(!g)h=15;else h=21}else{i=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0<=h>>>0)c[14985]=g;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){j=c[14978]|0;h=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=j>>>0)&1}g=Wa[c[29340>>2]&127](i)|0;if(!g){c[m>>2]=0;h=15;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;c[m>>2]=g;h=21}while(0);if((h|0)==15){g=d+81|0;if(a[g>>0]|0){m=0;return m|0}if(a[d+82>>0]|0){m=0;return m|0}a[g>>0]=1;if((c[d+180>>2]|0)>0)c[d+264>>2]=1;g=d+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[d+236>>2]|0;if(!g){m=0;return m|0}c[g+12>>2]=7;m=0;return m|0}else if((h|0)==21){if(!(b[l>>1]|0))h=0;else{j=f+4|0;d=k+4|0;i=f+40|0;h=0;do{g=b[(c[j>>2]|0)+(h<<1)>>1]|0;if(g<<16>>16<=-1)if(g<<16>>16==-1)g=68;else{g=Xj(c[(c[i>>2]|0)+4+(h*20|0)>>2]|0)|0;g=g<<24>>24==0?65:g}else g=a[(c[d>>2]|0)+(g<<16>>16<<4)+13>>0]|0;a[(c[m>>2]|0)+h>>0]=g;h=h+1|0}while(h>>>0<(e[l>>1]|0)>>>0);g=c[m>>2]|0}a[g+h>>0]=0;m=c[m>>2]|0;return m|0}return 0}function hl(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;g=c[b>>2]|0;l=g+20|0;f=c[l>>2]|0;if((f|0)<=0)return;k=g+16|0;if(!e){g=0;do{if(c[(c[k>>2]|0)+(g<<4)+4>>2]|0){rk(b,g);f=c[l>>2]|0}g=g+1|0}while((g|0)<(f|0));return}j=0;do{g=c[k>>2]|0;if(c[g+(j<<4)+4>>2]|0){h=c[g+(j<<4)>>2]|0;i=a[e>>0]|0;g=(d[208+(i&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(i<<24>>24==0|(g|0)!=0)){i=e;do{i=i+1|0;h=h+1|0;m=a[i>>0]|0;g=(d[208+(m&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(g|0)!=0))}if(!g){rk(b,j);f=c[l>>2]|0}}j=j+1|0}while((j|0)<(f|0));return}function il(f,g,h,i){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;E=Ra;Ra=Ra+32|0;y=E+16|0;x=E+8|0;o=E;m=E+28|0;C=c[f>>2]|0;D=C+16|0;v=c[D>>2]|0;B=f+8|0;j=c[B>>2]|0;A=f+116|0;a:do if(!j){if((c[A>>2]|0)==0?(b[C+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[C+272>>2]|0)if(!(a[C+81>>0]|0))w=15;else{z=0;break a}else{do if((e[C+276>>1]|0)>=224){j=C+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}j=C+296|0;k=c[j>>2]|0;if(!k){j=C+292|0;break}else{c[j>>2]=c[k>>2];z=C+284|0;c[z>>2]=(c[z>>2]|0)+1;break b}}else j=C+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;w=15}while(0);if((w|0)==15)k=_d(C,224,0)|0;if(!k)z=0;else{j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=C;j=C+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[B>>2]=k;Di(k,61,0,1,0)|0;z=k}}else z=j;while(0);q=c[A>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<>2]=k|p,(h|0)==1):0)?(t=c[q>>2]|0,n=t+16|0,(c[(c[n>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[t>>2]|0,0,t,m,0,542)|0;if(j|0){cd(q,32157,o);c[q+12>>2]=j;break}o=c[m>>2]|0;c[(c[n>>2]|0)+20>>2]=o;j=c[t+92>>2]|0;l=c[o+4>>2]|0;c[l+4>>2]=c[o>>2];if(!(b[l+22>>1]&2)){m=l+32|0;n=l+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[m>>2]=j,s=l+80|0,r=c[s>>2]|0,r|0):0){k=r+-4|0;c[s>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;r=(c[14820]|0)+1|0;c[14820]=r;c[14821]=(r|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35;break}else{j=Wa[c[29352>>2]&127](k)|0;w=35}while(0);do if((w|0)==35){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{r=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[s>>2]=0}s=Se(c[l>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((s|0)==7){j=t+81|0;if((a[j>>0]|0)==0?(a[t+82>>0]|0)==0:0){a[j>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;j=t+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[t+236>>2]|0;if(j|0)c[j+12>>2]=7}break}}}while(0);r=q+80|0;c[r>>2]=c[r>>2]|p;r=q+20|0;a[r>>0]=a[r>>0]|1;r=g+56|0;do if(c[r>>2]|0){j=z+108|0;k=c[j>>2]|0;if((c[z+112>>2]|0)>(k|0)){c[j>>2]=k+1;j=c[z+104>>2]|0;a[j+(k*20|0)>>0]=-96;j=j+(k*20|0)+1|0;l=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));break}else{Di(z,160,0,0,0)|0;break}}while(0);j=c[(c[(c[f>>2]|0)+16>>2]|0)+28>>2]|0;do if(!(a[f+146>>0]|0)){q=c[g+72>>2]|0;if((q|0)!=(j|0)?(u=c[j+48>>2]|0,(u|0)!=0):0){p=g+68|0;o=u;j=0;do{n=c[o+8>>2]|0;if((c[n+24>>2]|0)==(q|0)){l=c[n+4>>2]|0;m=c[g>>2]|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(u<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;u=a[l>>0]|0;k=(d[208+(u&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(u<<24>>24==0|(k|0)!=0));if(!k){if(!j)j=c[p>>2]|0;c[n+32>>2]=j;j=n}}o=c[o>>2]|0}while((o|0)!=0);if(!j)w=66}else w=66;if((w|0)==66){j=c[g+68>>2]|0;if(!j)break}do{jl(f,j);j=c[j+32>>2]|0}while((j|0)!=0)}while(0);j=v+(h<<4)|0;if(!(c[g+36>>2]&8))q=g;else{q=c[g>>2]|0;c[x>>2]=c[j>>2];c[x+4>>2]=q;Ak(f,42781,x);q=g}x=c[q>>2]|0;c[y>>2]=c[j>>2];c[y+4>>2]=34585;c[y+8>>2]=x;Ak(f,42826,y);c:do if(!i)if(!(c[r>>2]|0)){o=c[g+28>>2]|0;p=g+8|0;n=g+72|0;l=0;while(1){m=(l|0)==0;k=m|(o|0)<(l|0)?o:0;j=c[p>>2]|0;if(j)do{g=c[j+44>>2]|0;k=(g|0)>(k|0)&(m|(g|0)<(l|0))?g:k;j=c[j+20>>2]|0}while((j|0)!=0);if(!k){w=83;break c}l=c[n>>2]|0;if(!l)j=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[m+(j<<4)+12>>2]|0)==(l|0))break;else j=j+1|0}kl(f,k,j);l=k}}else w=85;else w=83;while(0);if((w|0)==83)if(!(c[r>>2]|0)){m=z+108|0;k=z+112|0}else w=85;if((w|0)==85){l=c[q>>2]|0;m=z+108|0;j=c[m>>2]|0;k=z+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;g=c[z+104>>2]|0;a[g+(j*20|0)>>0]=-94;b[g+(j*20|0)+2>>1]=0;c[g+(j*20|0)+4>>2]=h;c[g+(j*20|0)+8>>2]=0;c[g+(j*20|0)+12>>2]=0;c[g+(j*20|0)+16>>2]=0;a[g+(j*20|0)+1>>0]=0}else j=Di(z,162,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}A=c[A>>2]|0;a[((A|0)==0?f:A)+21>>0]=1}l=c[q>>2]|0;j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;A=c[z+104>>2]|0;a[A+(j*20|0)>>0]=-113;b[A+(j*20|0)+2>>1]=0;c[A+(j*20|0)+4>>2]=h;c[A+(j*20|0)+8>>2]=0;c[A+(j*20|0)+12>>2]=0;c[A+(j*20|0)+16>>2]=0;a[A+(j*20|0)+1>>0]=0}else j=Di(z,143,h,0,0)|0;if(!(a[(c[z>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;Ei(z,(c[z+104>>2]|0)+(j*20|0)|0,l,0)}m=c[B>>2]|0;j=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(h<<4)+12>>2]>>2]|0)+1|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;f=c[m+104>>2]|0;a[f+(l*20|0)>>0]=95;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=h;c[f+(l*20|0)+8>>2]=1;c[f+(l*20|0)+12>>2]=j;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else Di(m,95,h,1,j)|0;l=c[(c[D>>2]|0)+(h<<4)+12>>2]|0;k=l+78|0;j=b[k>>1]|0;if(!(j&2)){Ra=E;return}l=c[l+16>>2]|0;if(l){q=C+480|0;r=C+304|0;s=C+308|0;t=C+300|0;do{j=c[l+8>>2]|0;if(c[j+12>>2]|0){p=j+4|0;k=c[p>>2]|0;d:do if(k){j=j+42|0;if((b[j>>1]|0)>0){o=0;while(1){m=c[k>>2]|0;e:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);m=c[k+4>>2]|0;if(m|0)ni(C,m);m=c[k+8>>2]|0;f:do if(m|0){if(c[q>>2]|0){Xd(C,m);break}n=m;do if((c[r>>2]|0)>>>0<=n>>>0){if((c[s>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[t>>2];c[t>>2]=m;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{f=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);o=o+1|0;if((o|0)>=(b[j>>1]|0))break;else k=k+16|0}k=c[p>>2]|0}if(k){if(c[q>>2]|0){Xd(C,k);break}m=k;do if((c[r>>2]|0)>>>0<=m>>>0){if((c[s>>2]|0)>>>0<=m>>>0)break;c[k>>2]=c[t>>2];c[t>>2]=k;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}}else j=j+42|0;while(0);c[p>>2]=0;b[j>>1]=0}l=c[l>>2]|0}while((l|0)!=0);j=(c[(c[D>>2]|0)+(h<<4)+12>>2]|0)+78|0;k=j;j=b[j>>1]|0}b[k>>1]=j&-3;Ra=E;return} function ls(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](36)|0;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](36)|0;if((c[14985]|0)>>>0<36)c[14985]=36;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}d=a;e=d+36|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));c[b>>2]=a;f=0;return f|0}function ms(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;d=c[b>>2]|0;if(d|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](d)|0;c[b>>2]=0}d=a+4|0;b=c[d>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;e=a+12|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(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function ns(d,e,f,g,h){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;k=c[d>>2]|0;n=d+8|0;f=c[n>>2]|0;if(f|0){Wa[c[(c[k+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}m=d+4|0;f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>2]=0;l=d+12|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;if((e|0)!=1){d=1;return d|0}g=c[h>>2]|0;f=b[g+8>>1]|0;if((f&514)==514?(a[g+10>>0]|0)==1:0){i=c[g+16>>2]|0;e=g}else if(!(f&1)){i=Gg(g,1)|0;e=c[h>>2]|0}else{i=0;e=g}f=b[e+8>>1]|0;if((f&2)!=0?(a[e+10>>0]|0)==1:0)e=c[e+12>>2]|0;else j=16;do if((j|0)==16){f=f&65535;if(!(f&16)){if(f&1|0){e=0;break}e=Fg(e,1)|0;break}else{g=c[e+12>>2]|0;if(!(f&16384)){e=g;break}e=(c[e>>2]|0)+g|0;break}}while(0);f=e+1|0;f=pb(f,((f|0)<0)<<31>>31)|0;c[m>>2]=f;if(!f){d=7;return d|0}ew(f|0,i|0,e|0)|0;a[(c[m>>2]|0)+e>>0]=0;g=k+16|0;f=Za[c[(c[k+12>>2]|0)+12>>2]&127](c[g>>2]|0,c[m>>2]|0,e,n)|0;if(f|0){d=f;return d|0}k=c[n>>2]|0;c[k>>2]=c[g>>2];g=c[d>>2]|0;c[l>>2]=(c[l>>2]|0)+1;g=$a[c[(c[g+12>>2]|0)+20>>2]&127](k,d+16|0,d+20|0,d+24|0,d+28|0,d+32|0)|0;if(!g){d=0;return d|0}f=c[n>>2]|0;if(f|0){Wa[c[(c[(c[d>>2]|0)+12>>2]|0)+16>>2]&127](f)|0;c[n>>2]=0}f=c[m>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{d=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[m>>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;d=(g|0)==101?0:g;return d|0}function os(a){a=a|0;var b=0,d=0,e=0,f=0;e=c[a>>2]|0;f=a+12|0;c[f>>2]=(c[f>>2]|0)+1;d=a+8|0;e=$a[c[(c[e+12>>2]|0)+20>>2]&127](c[d>>2]|0,a+16|0,a+20|0,a+24|0,a+28|0,a+32|0)|0;if(!e)return 0;b=c[d>>2]|0;if(b|0){Wa[c[(c[(c[a>>2]|0)+12>>2]|0)+16>>2]&127](b)|0;c[d>>2]=0}a=a+4|0;b=c[a>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[a>>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;return ((e|0)==101?0:e)|0}function ps(a){a=a|0;return (c[a+16>>2]|0)==0|0}function qs(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,c[a+4>>2]|0,-1,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 1:{if((yc(c[d>>2]|0,c[a+16>>2]|0,c[a+20>>2]|0,1,-1)|0)!=18)return 0;c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;return 0}case 2:{f=c[a+24>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}case 3:{f=c[a+28>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}default:{f=c[a+32>>2]|0;a=c[d>>2]|0;e=((f|0)<0)<<31>>31;d=a+8|0;if(!(b[d>>1]&9216)){c[a>>2]=f;c[a+4>>2]=e;b[d>>1]=4;return 0}else{Pg(a,f,e);return 0}}}return 0}function rs(a,b){a=a|0;b=b|0;a=c[a+12>>2]|0;c[b>>2]=a;c[b+4>>2]=((a|0)<0)<<31>>31;return 0}function ss(h,i,j){h=h|0;i=i|0;j=j|0;var 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=Ra;Ra=Ra+64|0;z=A+56|0;y=A+48|0;x=A;i=c[j>>2]|0;k=e[i+8>>1]|0;do if(!(k&4)){if(k&8|0){k=Mg(+g[i>>3])|0;L()|0;break}if(!(k&18)){Ra=A;return}else{k=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0;break}}else k=c[i>>2]|0;while(0);i=k&255;if((i+-1|0)>>>0>4){Ra=A;return}m=i<<1;l=(k<<3)+8|0;j=j+4|0;w=mc(c[j>>2]|0)|0;j=c[j>>2]|0;i=b[j+8>>1]|0;if((i&2)!=0?(a[j+10>>0]|0)==1:0)k=c[j+12>>2]|0;else n=11;do if((n|0)==11){i=i&65535;if(i&16|0){k=c[j+12>>2]|0;if(!(i&16384))break;k=(c[j>>2]|0)+k|0;break}if(!(i&1)){k=Fg(j,1)|0;break}else{Ra=A;return}}while(0);if((k|0)<4){Ra=A;return}u=w+2|0;t=w+3|0;s=l&248;if((k|0)<(G(d[u>>0]<<8|d[t>>0],s)|0)){Ra=A;return}v=zb(0)|0;if(!(d[u>>0]<<8|d[t>>0]))if(!v){i=0;j=7}else n=34;else{n=m&254;o=v+16|0;p=v+8|0;q=v+4|0;r=(n|0)==0;m=0;do{k=G(m,s)|0;j=w+(k|4)|0;E=cw(d[j>>0]|0,0,56)|0;l=L()|0;F=cw(d[j+1>>0]|0,0,48)|0;l=L()|0|l;D=cw(d[j+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[j+3>>0];C=cw(d[j+4>>0]|0,0,24)|0;l=l|(L()|0);B=cw(d[j+5>>0]|0,0,16)|0;l=l|(L()|0);i=cw(d[j+6>>0]|0,0,8)|0;l=l|(L()|0);j=Sv(F|E|D|C|B|i|0,l|0,d[j+7>>0]|0,0)|0;l=L()|0;i=x;c[i>>2]=j;c[i+4>>2]=l;i=0;k=w+(k+12)|0;while(1){c[x+8+(i<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[x+8+((i|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];i=i+2|0;if(i>>>0>=n>>>0)break;else k=k+8|0}do if(m|0){i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=32;break}else{wb(v,44513,1);break}}while(0);F=y;c[F>>2]=j;c[F+4>>2]=l;Eb(v,55646,y);if(!r){i=0;do{g[z>>3]=+f[x+8+(i<<2)>>2];Eb(v,55652,z);i=i+1|0}while((i|0)!=(n|0))}i=c[o>>2]|0;k=i+1|0;if(k>>>0<(c[p>>2]|0)>>>0){c[o>>2]=k;a[(c[q>>2]|0)+i>>0]=125}else wb(v,55656,1);m=m+1|0}while(m>>>0<(d[u>>0]<<8|d[t>>0])>>>0);n=34}do if((n|0)==34){j=d[v+20>>0]|0;if((v|0)!=29632){i=v+4|0;k=c[i>>2]|0;if(((k|0)!=0?(a[k+(c[v+16>>2]|0)>>0]=0,(c[v+12>>2]|0)!=0):0)?(a[v+21>>0]&4)==0:0)i=$d(v)|0;else i=c[i>>2]|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](v);break}else{F=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);break}}else i=0}while(0);k=h+20|0;if((yc(c[h>>2]|0,i,-1,1,90)|0)==18){c[k>>2]=18;yc(c[h>>2]|0,31223,-1,1,0)|0}c[k>>2]=(j|0)==0?-1:j;k=c[h>>2]|0;if(!(b[k+8>>1]&1)){Ra=A;return}switch((j&255)<<24>>24){case 101:{i=50782;break}case 100:{i=50760;break}default:if(j>>>0<29?(520028155>>>j&1|0)!=0:0)i=c[22960+(j<<2)>>2]|0;else i=50724}yc(k,i,-1,1,0)|0;Ra=A;return}function ts(e,f,g){e=e|0;f=f|0;g=g|0;var h=0,i=0;i=c[g>>2]|0;f=b[i+8>>1]|0;a:do if((f&15|16)<<16>>16==16){if((f&2)!=0?(a[i+10>>0]|0)==1:0)f=c[i+12>>2]|0;else h=5;do if((h|0)==5){h=f&65535;if(!(h&16)){if(h&1|0)break a;f=Fg(i,1)|0;break}else{f=c[i+12>>2]|0;if(!(h&16384))break;f=(c[i>>2]|0)+f|0;break}}while(0);if((f|0)>=2){i=mc(c[g>>2]|0)|0;i=d[i>>0]<<8|d[i+1>>0];f=c[e>>2]|0;h=f+8|0;if(!(b[h>>1]&9216)){e=f;c[e>>2]=i;c[e+4>>2]=0;b[h>>1]=4;return}else{Pg(f,i,0);return}}}while(0);c[e+20>>2]=1;yc(c[e>>2]|0,55658,-1,1,-1)|0;return}function us(d,f,g){d=d|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;t=Ra;Ra=Ra+80|0;o=t+16|0;m=t+8|0;k=t;s=t+20|0;if((f+-1|0)>>>0>1){c[d+20>>2]=1;yc(c[d>>2]|0,55691,-1,1,-1)|0;Ra=t;return}i=c[g>>2]|0;do if(i){h=b[i+8>>1]|0;if((h&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;break}if(!(h&1))j=Gg(i,1)|0;else j=0}else j=0;while(0);do if((f|0)!=1){h=c[g+4>>2]|0;if(h){i=b[h+8>>1]|0;if((i&514)==514?(a[h+10>>0]|0)==1:0){g=c[h+16>>2]|0;break}if(!(i&1))g=Gg(h,1)|0;else g=0}else g=0}else{g=j;j=50919}while(0);r=c[(c[d>>2]|0)+32>>2]|0;q=s+12|0;h=q;i=h+40|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[s>>2]=r;c[s+4>>2]=j;c[s+8>>2]=g;if(a[r+79>>0]|0){n=nd(r,36223,0,0,0)|0;i=s+40|0;c[i>>2]=n;if(!n){f=1;p=19}else{n=1;h=0;l=i}}else{f=0;i=s+40|0;p=19}if((p|0)==19){c[k>>2]=j;c[k+4>>2]=g;h=vs(s,55742,k)|0;if(!h)h=0;else{p=(e[h+144>>1]|0)+-2|0;gc(h)|0;h=p}c[i>>2]=0;n=f;l=i}c[m>>2]=j;c[m+4>>2]=g;k=vs(s,53869,m)|0;if(k){f=k+144|0;p=(e[f>>1]|0)+~h|0;h=s+16|0;c[h>>2]=(p|0)/2|0;if((p|0)>=2){if((Gc(k)|0)==100){i=c[k+120>>2]|0;if((i|0)!=0?(e[f>>1]|0)>1:0){i=i+40|0;f=k}else{i=c[k>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;f=k}j=b[i+8>>1]&31;i=c[f>>2]|0;g=k+40|0;f=c[g>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&f;c[g>>2]=i;c[q>>2]=1347440720>>>j&1}}else ws(s,55770,o);i=gc(k)|0;if((i|0)!=11)c[l>>2]=i}else h=s+16|0;if((c[h>>2]|0)>0){if(!(c[l>>2]|0))xs(s,0,0,1,0);q=c[s+32>>2]|0;ys(s,55801,q,((q|0)<0)<<31>>31);q=c[s+36>>2]|0;ys(s,55808,q,((q|0)<0)<<31>>31)}gc(c[s+20>>2]|0)|0;gc(c[s+24>>2]|0)|0;gc(c[s+28>>2]|0)|0;do if(n){h=nd(r,55816,0,0,0)|0;i=c[l>>2]|0;if(!i){c[l>>2]=h;p=46;break}else{h=i;i=c[s+44>>2]|0;p=49;break}}else{h=c[l>>2]|0;p=46}while(0);if((p|0)==46){i=c[s+44>>2]|0;if(!h){if((yc(c[d>>2]|0,(i|0)==0?45704:i,-1,1,-1)|0)==18){c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0}}else p=49}if((p|0)==49){c[d+20>>2]=h;f=c[d>>2]|0;if(b[f+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(f,h,-1,1,0)|0}}h=i;if(!i){Ra=t;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=t;return}else{d=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=t;return}}function vs(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;e=h;f=h+16|0;c[f>>2]=0;c[e>>2]=d;b=Ab(b,e)|0;d=a+40|0;e=(b|0)==0;do if(!(c[d>>2]|0))if(e){c[d>>2]=7;break}else{g=qd(c[a>>2]|0,b,-1,128,0,f,0)|0;c[d>>2]=g;g=6;break}else if(!e)g=6;while(0);do if((g|0)==6)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{g=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);Ra=h;return c[f>>2]|0}function ws(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;i=Ra;Ra=Ra+32|0;h=i+16|0;e=i;c[e>>2]=d;f=a+40|0;if(c[f>>2]|0){Ra=i;return}g=a+48|0;if((c[g>>2]|0)>=100){Ra=i;return}d=Ab(b,e)|0;if(!((d|0)!=0?(a=a+44|0,e=c[a>>2]|0,c[h>>2]=e,c[h+4>>2]=(e|0)==0?59952:35594,c[h+8>>2]=d,h=Bb(55820,h)|0,c[a>>2]=h,(h|0)!=0):0))c[f>>2]=7;c[g>>2]=(c[g>>2]|0)+1;Ra=i;return}function xs(e,g,i,j,k){e=e|0;g=g|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,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,H=0,I=0,J=0,K=0.0;J=Ra;Ra=Ra+112|0;H=J+88|0;F=J+72|0;E=J+56|0;v=J+40|0;u=J+32|0;t=J+16|0;s=J+8|0;m=J;r=e+40|0;if(c[r>>2]|0){Ra=J;return}q=e+20|0;l=c[q>>2]|0;if(!l){l=c[e+8>>2]|0;c[m>>2]=c[e+4>>2];c[m+4>>2]=l;l=vs(e,55946,m)|0;c[q>>2]=l;if(c[r>>2]|0){Ra=J;return}}do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){D=l;c[D>>2]=j;c[D+4>>2]=k;b[m>>1]=4;break}else{Pg(l,j,k);break}}while(0);do if((Gc(c[q>>2]|0)|0)==100){p=Lc(c[q>>2]|0,0)|0;o=c[q>>2]|0;if(!o)m=mc(29576)|0;else{l=c[o+120>>2]|0;if((l|0)!=0?(b[o+144>>1]|0)!=0:0)n=o;else{l=c[o>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;n=o}m=mc(l)|0;n=c[n>>2]|0;o=o+40|0;l=c[o>>2]|0;if((l|0)==3082|(a[n+81>>0]|0)!=0){og(n);l=7}else l=c[n+68>>2]&l;c[o>>2]=l}l=pb(p,((p|0)<0)<<31>>31)|0;if(!l){c[r>>2]=7;D=0;o=0;break}else{ew(l|0,m|0,p|0)|0;D=l;o=p;break}}else{D=0;o=0}while(0);l=c[q>>2]|0;do if(l){m=c[l>>2]|0;C=l+136|0;B=c[C+4>>2]|0;if((B|0)>0|(B|0)==0&(c[C>>2]|0)>>>0>0)hc(m,l);n=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;C=l+64|0;c[C>>2]=0;c[C+4>>2]=0;if((n|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7;break}else{l=c[m+68>>2]&n;break}}else l=0;while(0);if((c[r>>2]|0)==0?(c[r>>2]=l,(D|0)==0&(l|0)==0):0){I=s;c[I>>2]=j;c[I+4>>2]=k;ws(e,55991,s);Ra=J;return}if(!D){Ra=J;return}if((o|0)<4){I=t;c[I>>2]=j;c[I+4>>2]=k;c[t+8>>2]=o;ws(e,55827,t);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}C=(i|0)==0;if(C){g=d[D>>0]<<8|d[D+1>>0];if(g>>>0>40){c[u>>2]=g;ws(e,55861,u);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}}A=d[D+2>>0]<<8|d[D+3>>0];B=e+16|0;l=c[B>>2]|0;a:do if((G((l<<3)+8|0,A)|0|4|0)<=(o|0)){if(A|0){y=e+12|0;z=(g|0)>0;v=g+-1|0;w=e+36|0;x=e+32|0;g=0;while(1){u=D+(G((l<<3)+8|0,g)|0|4)|0;o=cw(d[u>>0]|0,0,56)|0;s=L()|0;n=cw(d[u+1>>0]|0,0,48)|0;s=L()|0|s;p=cw(d[u+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[u+3>>0];q=cw(d[u+4>>0]|0,0,24)|0;s=s|(L()|0);r=cw(d[u+5>>0]|0,0,16)|0;s=s|(L()|0);t=cw(d[u+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(n|o|p|q|r|t|0,s|0,d[u+7>>0]|0,0)|0;t=L()|0;u=u+8|0;b:do if((l|0)>0){if(C){o=0;while(1){n=o<<3;m=u+n|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];n=u+(n|4)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(!(c[y>>2]|0)){K=(c[h>>2]=m,+f[h>>2]);if(K>(c[h>>2]=n,+f[h>>2]))I=52}else if((m|0)>(n|0))I=52;if((I|0)==52){I=0;c[E>>2]=o;c[E+4>>2]=g;l=E+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,E);l=c[B>>2]|0}o=o+1|0;if((o|0)>=(l|0))break b}}p=0;do{m=p<<3;q=u+m|0;q=d[q+1>>0]<<16|d[q>>0]<<24|d[q+2>>0]<<8|d[q+3>>0];o=m|4;r=u+o|0;r=d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0];l=c[y>>2]|0;if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K>(c[h>>2]=r,+f[h>>2]))I=57;else l=0}else if((q|0)>(r|0))I=57;if((I|0)==57){I=0;c[F>>2]=p;c[F+4>>2]=g;l=F+8|0;c[l>>2]=j;c[l+4>>2]=k;ws(e,56023,F);l=c[y>>2]|0}n=i+m|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];m=i+o|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];do if(!l){K=(c[h>>2]=q,+f[h>>2]);if(K<(c[h>>2]=n,+f[h>>2])){I=62;break}K=(c[h>>2]=r,+f[h>>2]);if(K>(c[h>>2]=m,+f[h>>2]))I=62}else if((q|0)<(n|0)|(r|0)>(m|0))I=62;while(0);if((I|0)==62){I=0;c[H>>2]=p;c[H+4>>2]=g;r=H+8|0;c[r>>2]=j;c[r+4>>2]=k;ws(e,56071,H)}p=p+1|0}while((p|0)<(c[B>>2]|0))}while(0);if(z){zs(e,0,s,t,j,k);xs(e,v,u,s,t);l=w}else{zs(e,1,s,t,j,k);l=x}c[l>>2]=(c[l>>2]|0)+1;g=g+1|0;if((g|0)==(A|0))break a;l=c[B>>2]|0}}}else{I=v;c[I>>2]=j;c[I+4>>2]=k;c[v+8>>2]=A;c[v+12>>2]=o;ws(e,55891,v)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);Ra=J;return}else{I=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);Ra=J;return}}function ys(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=Ra;Ra=Ra+48|0;j=k+16|0;f=k;i=a+40|0;if(c[i>>2]|0){Ra=k;return}l=c[a+8>>2]|0;c[f>>2]=c[a+4>>2];c[f+4>>2]=l;c[f+8>>2]=b;f=vs(a,56360,f)|0;if(!f){Ra=k;return}if((Gc(f)|0)==100?(g=Oc(f,0)|0,h=L()|0,!((g|0)==(d|0)&(h|0)==(e|0))):0){c[j>>2]=b;l=j+8|0;c[l>>2]=d;c[l+4>>2]=e;l=j+16|0;c[l>>2]=g;c[l+4>>2]=h;ws(a,56391,j)}l=gc(f)|0;c[i>>2]=l;Ra=k;return}function zs(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,o=0,p=0;p=Ra;Ra=Ra+80|0;o=p+32|0;m=p+8|0;l=p;j=d+24+(e<<2)|0;k=c[j>>2]|0;if(!k){n=c[30860+(e<<2)>>2]|0;k=c[d+8>>2]|0;c[l>>2]=c[d+4>>2];c[l+4>>2]=k;l=vs(d,n,l)|0;c[j>>2]=l}else l=k;n=d+40|0;if(c[n>>2]|0){Ra=p;return}do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){c[j>>2]=f;c[j+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);switch(Gc(l)|0){case 101:{o=m;c[o>>2]=f;c[o+4>>2]=g;o=m+8|0;c[o>>2]=h;c[o+4>>2]=i;c[m+16>>2]=(e|0)==0?56293:56285;ws(d,56240,m);break}case 100:{j=Oc(l,0)|0;k=L()|0;if(!((j|0)==(h|0)&(k|0)==(i|0))){m=o;c[m>>2]=f;c[m+4>>2]=g;m=o+8|0;c[m>>2]=j;c[m+4>>2]=k;c[o+16>>2]=(e|0)==0?56293:56285;e=o+24|0;c[e>>2]=f;c[e+4>>2]=g;g=o+32|0;c[g>>2]=h;c[g+4>>2]=i;ws(d,56302,o)}break}default:{}}do if(l){j=c[l>>2]|0;o=l+136|0;i=c[o+4>>2]|0;if((i|0)>0|(i|0)==0&(c[o>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;o=l+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);if(c[n>>2]|0){Ra=p;return}c[n>>2]=j;Ra=p;return}function As(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 Ss(a,b,c,d,e,f,1)|0}function Bs(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 Ss(a,b,c,d,e,f,0)|0}function Cs(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+64|0;p=r+48|0;o=r;f=o;h=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));a[o+40>>0]=0;n=c[e>>2]|0;h=(n|0)>0;if(h){i=c[e+4>>2]|0;f=0;j=0;do{j=(a[i+(f*12|0)+4>>0]|0)==64?1:j;f=f+1|0}while((f|0)<(n|0));if(h){k=c[e+4>>2]|0;l=b+21|0;m=e+16|0;a:do if(!j){h=0;f=0;b:while(1){j=k+(f*12|0)|0;c:do if(a[k+(f*12|0)+5>>0]|0){if((c[j>>2]|0)==0?(a[k+(f*12|0)+4>>0]|0)==2:0)break b;i=c[j>>2]|0;d:do if((i|0)>0?(i|0)<=(d[l>>0]|0):0)switch(a[k+(f*12|0)+4>>0]|0){case 2:{i=65;break d}case 64:{q=15;break d}case 4:{i=69;break d}case 8:{i=66;break d}case 16:{i=67;break d}case 32:{i=68;break d}default:break c}else q=13;while(0);if((q|0)==13){q=0;if((a[k+(f*12|0)+4>>0]|0)==64)q=15;else break}if((q|0)==15){q=0;i=70}a[o+h>>0]=i;i=h+2|0;a[o+(h+1)>>0]=(c[j>>2]|0)+47;h=c[m>>2]|0;c[h+(f<<3)>>2]=(i|0)/2|0;a[h+(f<<3)+4>>0]=1;h=i}while(0);f=f+1|0;if(!((f|0)<(n|0)&(h|0)<40)){f=h;break a}}i=c[m>>2]|0;if(!f)f=0;else{h=0;do{c[i+(h<<3)>>2]=0;a[i+(h<<3)+4>>0]=0;h=h+1|0}while((h|0)!=(f|0))}c[e+20>>2]=1;c[i+(f<<3)>>2]=1;a[i+(f<<3)+4>>0]=1;g[e+40>>3]=30.0;q=e+48|0;c[q>>2]=1;c[q+4>>2]=0;c[e+56>>2]=1;e=0;Ra=r;return e|0}else{f=0;j=0;do{e:do if(a[k+(j*12|0)+5>>0]|0){i=k+(j*12|0)|0;h=c[i>>2]|0;f:do if((h|0)>0?(h|0)<=(d[l>>0]|0):0)switch(a[k+(j*12|0)+4>>0]|0){case 2:{h=65;break f}case 64:{q=34;break f}case 4:{h=69;break f}case 8:{h=66;break f}case 16:{h=67;break f}case 32:{h=68;break f}default:break e}else q=28;while(0);if((q|0)==28){q=0;if((a[k+(j*12|0)+4>>0]|0)==64)q=34;else break}if((q|0)==34){q=0;h=70}a[o+f>>0]=h;h=f+2|0;a[o+(f+1)>>0]=(c[i>>2]|0)+47;f=c[m>>2]|0;c[f+(j<<3)>>2]=(h|0)/2|0;a[f+(j<<3)+4>>0]=1;f=h}while(0);j=j+1|0}while((j|0)<(n|0)&(f|0)<40)}while(0);c[e+20>>2]=2;c[e+28>>2]=1;if((f|0)>0?(c[p>>2]=o,p=Bb(31408,p)|0,c[e+24>>2]=p,(p|0)==0):0){e=7;Ra=r;return e|0}}else q=38}else q=38;if((q|0)==38){c[e+20>>2]=2;c[e+28>>2]=1;f=0}b=b+48|0;b=aw(c[b>>2]|0,c[b+4>>2]|0,(f|0)/2|0|0)|0;q=L()|0;g[e+40>>3]=(+(b>>>0)+4294967296.0*+(q|0))*6.0;e=e+48|0;c[e>>2]=b;c[e+4>>2]=q;e=0;Ra=r;return e|0}function Ds(a){a=a|0;Ts(a);return 0}function Es(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+32|0;f=g;d=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=d;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=e;c[f+16>>2]=d;c[f+20>>2]=e;f=Bb(57667,f)|0;if(!f){f=7;Ra=g;return f|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(d|0){h=d;Ra=g;return h|0}Ts(b);h=0;Ra=g;return h|0}function Fs(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){a=7;f=0;c[b>>2]=f;return a|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](248)|0;if(!d){a=7;f=0;c[b>>2]=f;return a|0}}else{f=Wa[c[29356>>2]&127](248)|0;if((c[14985]|0)>>>0<248)c[14985]=248;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;a=0;c[b>>2]=a;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}gw(d|0,0,248)|0;c[d>>2]=a;g=a+56|0;c[g>>2]=(c[g>>2]|0)+1;g=0;a=d;c[b>>2]=a;return g|0}function Gs(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b>>2]|0;h=b+16|0;d=c[h>>2]|0;if(d|0){g=b+12|0;if((c[g>>2]|0)>0){f=0;while(1){d=c[d+(f*24|0)+16>>2]|0;do if(d|0){e=c[d+16>>2]|0;if(e|0)ab[e&127](c[d+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=f+1|0;if((d|0)>=(c[g>>2]|0))break;f=d;d=c[h>>2]|0}d=c[h>>2]|0}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[h>>2]=0}gc(c[b+36>>2]|0)|0;d=c[b+32>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);Us(i,c[b+64>>2]|0)|0;Us(i,c[b+68>>2]|0)|0;Us(i,c[b+72>>2]|0)|0;Us(i,c[b+76>>2]|0)|0;Us(i,c[b+80>>2]|0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{h=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}e=i+56|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;e=i+76|0;f=c[e>>2]|0;if(!f)return 0;if(!((d|0)==0&(a[i+24>>0]|0)==0))return 0;c[e>>2]=0;d=c[f+20>>2]|0;gc(c[f+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,f);return 0}i=f;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[f>>2]=c[i>>2];c[i>>2]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);return 0}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);return 0}return 0}function Hs(f,h,i,j,k){f=f|0;h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0,p=0.0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0;y=Ra;Ra=Ra+16|0;w=y+4|0;t=y;x=c[f>>2]|0;c[w>>2]=0;v=x+40|0;c[v>>2]=(c[v>>2]|0)+1;v=f+16|0;l=c[v>>2]|0;if(l|0){o=f+12|0;if((c[o>>2]|0)>0){n=0;while(1){l=c[l+(n*24|0)+16>>2]|0;do if(l|0){m=c[l+16>>2]|0;if(m|0)ab[m&127](c[l+12>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=n+1|0;if((l|0)>=(c[o>>2]|0))break;n=l;l=c[v>>2]|0}l=c[v>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[v>>2]=0}l=c[f+32>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);u=f+36|0;s=c[u>>2]|0;gw(f|0,0,248)|0;c[f>>2]=x;c[u>>2]=s;c[f+8>>2]=h;a:do if((h|0)!=1){l=Xs(x,1,0,0,w)|0;if(!((j|0)>0&(l|0)==0)){if(l|0)break}else{l=j*24|0;m=pb(l,0)|0;c[v>>2]=m;c[f+12>>2]=j;if(!m){l=7;break}gw(m|0,0,l|0)|0;r=f+84|0;s=x+28|0;gw(r|0,0,(c[s>>2]<<2)+4|0)|0;t=x+21|0;q=0;do{u=c[v>>2]|0;m=q<<1;o=a[i+m>>0]|0;h=u+(q*24|0)+4|0;c[h>>2]=o<<24>>24;c[u+(q*24|0)>>2]=(a[i+(m|1)>>0]|0)+-48;m=c[k+(q<<2)>>2]|0;l=b[m+8>>1]|0;if(o<<24>>24>69){if((l&-15393)<<16>>16!=-32255){l=1;break a}if((a[m+11>>0]|0)!=112){l=1;break a}if(Bu(c[m>>2]|0,57762)|0){l=1;break a}l=c[m+16>>2]|0;if(!l){l=1;break a}o=pb((c[l>>2]|0)+80|0,0)|0;if(!o){l=7;break a}m=o;n=m+80|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(n|0));ew(o+80|0,l|0,c[l>>2]|0)|0;c[o>>2]=c[o+96>>2];c[o+4>>2]=c[o+100>>2];c[o+8>>2]=o+112;c[o+72>>2]=c[o+104>>2];l=c[o+84>>2]|0;if(!l){c[h>>2]=71;c[u+(q*24|0)+8>>2]=c[o+88>>2]}else c[u+(q*24|0)+8>>2]=l;c[u+(q*24|0)+16>>2]=o;c[o+28>>2]=d[t>>0];c[o+24>>2]=r;c[o+36>>2]=(c[s>>2]|0)+1}else{l=l&65535;do if(!(l&8)){if(l&4|0){h=m;p=+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0);break}if(!(l&18))p=0.0;else p=+Kg(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)}else p=+g[m>>3];while(0);g[u+(q*24|0)+8>>3]=p}q=q+1|0}while((q|0)<(j|0))}l=Ws(f,0.0,(c[x+28>>2]|0)+1&255)|0;if(!l){x=7;Ra=y;return x|0}else{k=l+8|0;c[k>>2]=1;c[k+4>>2]=0;a[l+18>>0]=0;a[l+17>>0]=1;c[f+64>>2]=c[w>>2];c[w>>2]=0;l=Ys(f)|0;break}}else{l=c[k>>2]|0;m=e[l+8>>1]|0;do if(!(m&4)){if(m&8|0){s=Mg(+g[l>>3])|0;r=L()|0;break}if(!(m&18)){r=0;s=0}else{s=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;r=L()|0}}else{s=l;r=c[s+4>>2]|0;s=c[s>>2]|0}while(0);c[t>>2]=0;q=x+88|0;l=c[q>>2]|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){k=l;c[k>>2]=s;c[k+4>>2]=r;b[m>>1]=4;break}else{Pg(l,s,r);break}}while(0);k=(Gc(c[q>>2]|0)|0)==100;n=c[q>>2]|0;do if(k){o=Oc(n,0)|0;h=L()|0;l=Xs(x,o,h,0,t)|0;m=c[q>>2]|0;if(m){n=c[m>>2]|0;k=m+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(n,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;j=m+64|0;c[j>>2]=0;c[j+4>>2]=0;if((k|0)==3082|(a[n+81>>0]|0)!=0){og(n);n=h;q=45}else{n=h;q=45}}else{n=h;q=45}}else if(n){l=c[n>>2]|0;k=n+136|0;j=c[k+4>>2]|0;if((j|0)>0|(j|0)==0&(c[k>>2]|0)>>>0>0)hc(l,n);m=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;k=n+64|0;c[k>>2]=0;c[k+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);l=7;q=51;break}else{l=c[l+68>>2]&m;o=0;n=0;q=45;break}}else{l=0;o=0;n=0;q=45}while(0);if((q|0)==45){m=c[t>>2]|0;if((l|0)==0&(m|0)!=0){h=Ws(f,0.0,0)|0;c[f+64>>2]=m;l=h+8|0;c[l>>2]=o;c[l+4>>2]=n;a[h+17>>0]=1;l=c[m+24>>2]|0;n=d[l+2>>0]<<8|d[l+3>>0];b:do if(!n){l=267;m=0}else{o=d[x+23>>0]|0;m=0;while(1){f=l+((G(m,o)|0)+4)|0;t=cw(d[f>>0]|0,0,56)|0;k=L()|0;z=cw(d[f+1>>0]|0,0,48)|0;k=L()|0|k;u=cw(d[f+2>>0]|0,0,40)|0;k=k|(L()|0);k=k|d[f+3>>0];v=cw(d[f+4>>0]|0,0,24)|0;k=k|(L()|0);i=cw(d[f+5>>0]|0,0,16)|0;k=k|(L()|0);j=cw(d[f+6>>0]|0,0,8)|0;k=k|(L()|0);f=Sv(z|t|u|v|i|j|0,k|0,d[f+7>>0]|0,0)|0;if((f|0)==(s|0)&(L()|0)==(r|0)){l=0;break b}m=m+1|0;if(m>>>0>=n>>>0){l=267;m=0;break}}}while(0);a[h+18>>0]=m}else q=51}if((q|0)==51)a[f+4>>0]=1}while(0);Us(x,c[w>>2]|0)|0;Ts(x);z=l;Ra=y;return z|0}function Is(b){b=b|0;var d=0,e=0,f=0,g=0;d=b+6|0;if(!(a[d>>0]|0)){Zs(b);b=Ys(b)|0;return b|0}a[d>>0]=0;d=c[b+36>>2]|0;if(!d){Zs(b);b=Ys(b)|0;return b|0}e=c[d>>2]|0;f=d+136|0;g=c[f+4>>2]|0;if((g|0)>0|(g|0)==0&(c[f>>2]|0)>>>0>0)hc(e,d);g=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;f=d+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[e+81>>0]|0)!=0)){Zs(b);g=Ys(b)|0;return g|0}og(e);Zs(b);g=Ys(b)|0;return g|0}function Js(a){a=a|0;return d[a+4>>0]|0|0}function Ks(i,j,k){i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;u=Ra;Ra=Ra+16|0;p=u+8|0;q=u;t=c[i>>2]|0;l=a[i+5>>0]|0;if(!(l<<24>>24))if(!(c[i+24>>2]|0))s=0;else s=c[i+32>>2]|0;else s=i+40|0;l=1-(l&255)|0;n=i+64+(l<<2)|0;m=c[n>>2]|0;if(!m){if(!l)l=i+48|0;else l=(c[i+32>>2]|0)+8|0;l=Xs(t,c[l>>2]|0,c[l+4>>2]|0,0,n)|0;if(!l)m=c[n>>2]|0;else{j=l;Ra=u;return j|0}}if(!s){j=0;Ra=u;return j|0}if(!k){n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;s=cw(d[n>>0]|0,0,56)|0;i=L()|0;r=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;t=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];k=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);m=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);l=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(r|s|t|k|m|l|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){j=l;c[j>>2]=n;c[j+4>>2]=i;b[m>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,n,i);j=0;Ra=u;return j|0}}r=t+21|0;l=d[r>>0]|0;if((l|0)>=(k|0)){i=(c[m+24>>2]|0)+((k<<2)+8+(G(d[t+23>>0]|0,d[s+18>>0]|0)|0))|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(a[t+22>>0]|0){l=c[j>>2]|0;m=((i|0)<0)<<31>>31;n=l+8|0;if(!(b[n>>1]&9216)){j=l;c[j>>2]=i;c[j+4>>2]=m;b[n>>1]=4;j=0;Ra=u;return j|0}else{Pg(l,i,m);j=0;Ra=u;return j|0}}o=(c[h>>2]=i,+f[h>>2]);l=c[j>>2]|0;m=l+8|0;if(!(b[m>>1]&9216))b[m>>1]=1;else Dg(l);g[p>>3]=o;g[q>>3]=+g[p>>3];if(!(+g[p>>3]==+g[q>>3])){j=0;Ra=u;return j|0}g[l>>3]=o;b[m>>1]=8;j=0;Ra=u;return j|0}p=i+6|0;q=i+36|0;do if(!(a[p>>0]|0)){l=c[q>>2]|0;do if(!l){l=qd(c[t+12>>2]|0,c[t+64>>2]|0,-1,128,0,q,0)|0;if(!l){l=c[q>>2]|0;break}else{j=l;Ra=u;return j|0}}while(0);n=(c[m+24>>2]|0)+((G(d[t+23>>0]|0,d[s+18>>0]|0)|0)+4)|0;w=cw(d[n>>0]|0,0,56)|0;i=L()|0;x=cw(d[n+1>>0]|0,0,48)|0;i=L()|0|i;v=cw(d[n+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[n+3>>0];m=cw(d[n+4>>0]|0,0,24)|0;i=i|(L()|0);s=cw(d[n+5>>0]|0,0,16)|0;i=i|(L()|0);t=cw(d[n+6>>0]|0,0,8)|0;i=i|(L()|0);n=Sv(x|w|v|m|s|t|0,i|0,d[n+7>>0]|0,0)|0;i=L()|0;do if(!(Vc(l,1)|0)){l=c[l+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){x=l;c[x>>2]=n;c[x+4>>2]=i;b[m>>1]=4;break}else{Pg(l,n,i);break}}while(0);n=Gc(c[q>>2]|0)|0;if((n|0)==100){a[p>>0]=1;l=d[r>>0]|0;break}l=c[q>>2]|0;if(!l){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}m=c[l>>2]|0;x=l+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(m,l);x=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;w=l+64|0;c[w>>2]=0;c[w+4>>2]=0;if(!((x|0)==3082|(a[m+81>>0]|0)!=0)){x=(n|0)==101;x=x?0:n;Ra=u;return x|0}og(m);x=(n|0)==101;x=x?0:n;Ra=u;return x|0}while(0);p=c[q>>2]|0;l=k-l+1|0;n=(p|0)==0;do if(n)i=29576;else{m=c[p+120>>2]|0;if(m|0?l>>>0<(e[p+144>>1]|0)>>>0:0){i=m+(l*40|0)|0;break}i=c[p>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576}while(0);l=i+8|0;m=e[l>>1]|0;if(m&2048|0)b[l>>1]=m&59391|4096;if(!n){m=c[p>>2]|0;n=p+40|0;l=c[n>>2]|0;if((l|0)==3082|(a[m+81>>0]|0)!=0){og(m);l=7}else l=c[m+68>>2]&l;c[n>>2]=l}Dc(j,i);x=0;Ra=u;return x|0}function Ls(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;f=a[b+5>>0]|0;if(!(f<<24>>24))if(!(c[b+24>>2]|0))i=0;else i=c[b+32>>2]|0;else i=b+40|0;g=1-(f&255)|0;h=b+64+(g<<2)|0;f=c[h>>2]|0;if(!f){if(!g)f=b+48|0;else f=(c[b+32>>2]|0)+8|0;g=f;g=Xs(c[b>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,h)|0;f=c[h>>2]|0}else g=0;if(!((i|0)!=0&(g|0)==0))return g|0;h=(c[f+24>>2]|0)+((G(d[(c[b>>2]|0)+23>>0]|0,d[i+18>>0]|0)|0)+4)|0;l=cw(d[h>>0]|0|0,0,56)|0;b=L()|0;m=cw(d[h+1>>0]|0|0,0,48)|0;b=L()|0|b;k=cw(d[h+2>>0]|0|0,0,40)|0;b=b|(L()|0);b=b|(d[h+3>>0]|0);j=cw(d[h+4>>0]|0|0,0,24)|0;b=b|(L()|0);f=cw(d[h+5>>0]|0|0,0,16)|0;b=b|(L()|0);i=cw(d[h+6>>0]|0|0,0,8)|0;b=b|(L()|0);h=Sv(m|l|k|j|f|i|0,b|0,d[h+7>>0]|0|0,0)|0;b=L()|0;i=e;c[i>>2]=h;c[i+4>>2]=b;return g|0}function Ms(h,i,j,k){h=h|0;i=i|0;j=j|0;k=k|0;var l=0,m=0,n=0,o=0.0,p=0,q=0,r=0.0,s=0,t=0,u=0,v=0,w=0,x=0,y=0.0;x=Ra;Ra=Ra+64|0;u=x;v=x+48|0;if(c[h+60>>2]|0){h=518;Ra=x;return h|0}t=h+40|0;c[t>>2]=(c[t>>2]|0)+1;t=u;c[t>>2]=0;c[t+4>>2]=0;t=(i|0)>1;a:do if(t){p=i+-4|0;i=d[h+21>>0]|0;p=(p|0)>(i|0)?i:p;i=(p|0)>0;b:do if(!(a[h+22>>0]|0)){if(i){m=0;while(1){i=c[j+(m+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);r=o;r=o>2]=r;i=c[j+(m+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&8)){if(l&4|0){s=i;o=+((c[s>>2]|0)>>>0)+4294967296.0*+(c[s+4>>2]|0);break}if(!(l&18))o=0.0;else o=+Kg(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)}else o=+g[i>>3];while(0);y=o;o=o>y?o*(o<0.0?.9999998807907104:1.0000001192092896):y;i=m|1;f[u+8+(i<<2)>>2]=o;m=m+2|0;if(r>o)break;if((m|0)>=(p|0))break b}i=_s(h,i)|0;break a}}else if(i){n=0;while(1){i=c[j+(n+3<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){m=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))m=0;else{m=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else m=c[i>>2]|0;while(0);c[u+8+(n<<2)>>2]=m;i=c[j+(n+4<<2)>>2]|0;l=e[i+8>>1]|0;do if(!(l&4)){if(l&8|0){i=Mg(+g[i>>3])|0;L()|0;break}if(!(l&18))i=0;else{i=Ng(a[i+10>>0]|0,c[i+12>>2]|0,c[i+16>>2]|0)|0;L()|0}}else i=c[i>>2]|0;while(0);l=n|1;c[u+8+(l<<2)>>2]=i;n=n+2|0;if((m|0)>(i|0))break;if((n|0)>=(p|0))break b}i=_s(h,l)|0;break a}while(0);l=c[j+8>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){p=Mg(+g[l>>3])|0;s=L()|0;break}if(!(i&18)){p=0;s=0}else{p=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;s=L()|0}}else{s=l;p=c[s>>2]|0;s=c[s+4>>2]|0}while(0);l=u;c[l>>2]=p;c[l+4>>2]=s;l=c[j>>2]|0;i=b[l+8>>1]|0;if(!(-1431655766>>>(i&31)&1)){i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[l>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[l+10>>0]|0,c[l+12>>2]|0,c[l+16>>2]|0)|0;l=L()|0}}else{i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);if((i|0)==(p|0)&(l|0)==(s|0)){q=1;i=0;n=s;w=67;break}}m=h+88|0;i=c[m>>2]|0;do if(!(Vc(i,1)|0)){i=c[i+100>>2]|0;l=i+8|0;if(!(b[l>>1]&9216)){q=i;c[q>>2]=p;c[q+4>>2]=s;b[l>>1]=4;break}else{Pg(i,p,s);break}}while(0);n=Gc(c[m>>2]|0)|0;i=c[m>>2]|0;do if(i){l=c[i>>2]|0;q=i+136|0;m=c[q+4>>2]|0;if((m|0)>0|(m|0)==0&(c[q>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;q=i+64|0;c[q>>2]=0;c[q+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);if((n|0)==100)if((a[(c[h+12>>2]|0)+86>>0]|0)==5){q=1;i=$s(h,p,s)|0;n=s;w=67;break}else{i=_s(h,0)|0;break}else{q=1;n=s;w=67}}else{q=0;i=0;p=0;n=0;w=67}}else{q=0;i=0;p=0;n=0;w=67}while(0);if((w|0)==67){m=c[j>>2]|0;l=b[m+8>>1]|0;if(!(-1431655766>>>(l&31)&1)){i=l&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[m>>3])|0;l=L()|0;break}if(!(i&18)){i=0;l=0}else{i=Ng(a[m+10>>0]|0,c[m+12>>2]|0,c[m+16>>2]|0)|0;l=L()|0}}else{l=m;i=c[l>>2]|0;l=c[l+4>>2]|0}while(0);i=$s(h,i,l)|0}if(t&(i|0)==0){c[v>>2]=0;if(!q){i=h+92|0;Vc(c[i>>2]|0,1)|0;Vc(c[i>>2]|0,2)|0;Gc(c[i>>2]|0)|0;i=c[i>>2]|0;do if(i){l=c[i>>2]|0;t=i+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(l,i);m=kc(i)|0;c[i+20>>2]=770837923;c[i+36>>2]=-1;c[i+40>>2]=0;a[i+146>>0]=2;c[i+44>>2]=0;c[i+32>>2]=1;a[i+147>>0]=-1;c[i+48>>2]=0;t=i+64|0;c[t>>2]=0;c[t+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);i=7;break}else{i=c[l+68>>2]&m;break}}else i=0;while(0);s=(c[h+12>>2]|0)+40|0;q=c[s>>2]|0;s=c[s+4>>2]|0;t=u;c[t>>2]=q;c[t+4>>2]=s;t=k;c[t>>2]=q;c[t+4>>2]=s;if(!i)w=85}else{w=k;c[w>>2]=p;c[w+4>>2]=n;w=85}do if((w|0)==85){i=at(h,u,0,v)|0;if(!i){c[h+72>>2]=-1;w=c[v>>2]|0;i=bt(h,w,u,0)|0;w=Us(h,w)|0;i=(i|0)==0?w:i;if(!i){p=h+25|0;if(a[p>>0]|0){q=c[h+112>>2]|0;l=k;i=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(q,1)|0)){m=c[q+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){k=m;c[k>>2]=i;c[k+4>>2]=l;b[n>>1]=4;break}else{Pg(m,i,l);break}}while(0);if(a[p>>0]|0){l=h+21|0;i=0;do{Yc(q,i+2|0,c[j+(i+3+(d[l>>0]|0)<<2)>>2]|0)|0;i=i+1|0}while(i>>>0<(d[p>>0]|0)>>>0)}Gc(q)|0;if(q){i=c[q>>2]|0;j=q+136|0;k=c[j+4>>2]|0;if((k|0)>0|(k|0)==0&(c[j>>2]|0)>>>0>0)hc(i,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;j=q+64|0;c[j>>2]=0;c[j+4>>2]=0;if((l|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&l;break}}else i=0}else i=0}}}while(0)}}Ts(h);h=i;Ra=x;return h|0}function Ns(b){b=b|0;b=b+24|0;a[b>>0]=(a[b>>0]|0)+1<<24>>24;return 0}function Os(b){b=b|0;var d=0,e=0;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;if(!e)return 0;if(c[b+56>>2]|0)return 0;c[d>>2]=0;b=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,e);return 0}d=e;if((c[b+304>>2]|0)>>>0<=d>>>0?(c[b+308>>2]|0)>>>0>d>>>0:0){d=b+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return 0}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return 0}return 0}function Ps(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;g=Ra;Ra=Ra+48|0;f=g;h=c[b+32>>2]|0;e=c[b+36>>2]|0;c[f>>2]=h;c[f+4>>2]=e;c[f+8>>2]=d;c[f+12>>2]=h;c[f+16>>2]=e;c[f+20>>2]=d;c[f+24>>2]=h;c[f+28>>2]=e;c[f+32>>2]=d;f=Bb(57845,f)|0;if(!f){h=7;Ra=g;return h|0}d=b+76|0;e=c[d>>2]|0;do if((e|0?(a[b+24>>0]|0)==0:0)?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=nd(c[b+12>>2]|0,f,0,0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=d;Ra=g;return h|0}return 0}function Qs(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;e=b+24|0;f=a[e>>0]|0;a[e>>0]=0;d=b+76|0;g=c[d>>2]|0;if(!g){a[e>>0]=f;return 0}if(c[b+56>>2]|0){a[e>>0]=f;return 0}c[d>>2]=0;d=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,g);a[e>>0]=f;return 0}b=g;if((c[d+304>>2]|0)>>>0<=b>>>0?(c[d+308>>2]|0)>>>0>b>>>0:0){b=d+300|0;c[g>>2]=c[b>>2];c[b>>2]=g;a[e>>0]=f;return 0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);a[e>>0]=f;return 0}return 0}function Rs(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){h=0;return h|0}h=a[b>>0]|0;g=d[208+(h&255)>>0]|0;c=g+-110|0;h=h<<24>>24==0;if(!(h|(c|0)!=0)){e=57990;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-112|0;if(!(h|(c|0)!=0)){e=38138;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-114|0;if(h|(c|0)!=0){i=c;i=(i|0)==0;i=i&1;return i|0}e=38132;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Ss(b,e,f,g,h,i,j){b=b|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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+240|0;s=T+232|0;S=T+224|0;P=T+216|0;O=T+208|0;N=T+192|0;M=T+184|0;K=T+176|0;J=T+168|0;G=T+160|0;D=T+144|0;C=T+136|0;B=T+128|0;A=T+120|0;z=T+112|0;x=T+104|0;v=T+96|0;u=T+88|0;t=T+80|0;r=T+72|0;H=T+64|0;p=T+56|0;q=T+48|0;I=T;l=T+40|0;k=T+32|0;if((f|0)>103){c[k>>2]=56536;S=Bb(31408,k)|0;c[i>>2]=S;i=1;Ra=T;return i|0}c[l>>2]=1;vd(b,1,l)|0;w=g+4|0;l=Eu(c[w>>2]|0)|0;y=g+8|0;m=Eu(c[y>>2]|0)|0;k=l+506+m|0;R=pb(k,0)|0;if(!R){i=7;Ra=T;return i|0}gw(R|0,0,k|0)|0;c[R+40>>2]=1;c[R>>2]=30764;n=R+504|0;E=R+32|0;c[E>>2]=n;o=n+(l+1)|0;F=R+36|0;c[F>>2]=o;a[R+22>>0]=(e|0)!=0&1;ew(n|0,c[w>>2]|0,l|0)|0;ew(o|0,c[y>>2]|0,m|0)|0;o=zb(b)|0;c[I>>2]=c[g+12>>2];Eb(o,56609,I);a:do if((f|0)>4){l=R+25|0;m=R+21|0;k=4;while(1){e=c[g+(k<<2)>>2]|0;n=a[l>>0]|0;if((a[e>>0]|0)==43){a[l>>0]=n+1<<24>>24;c[q>>2]=e+1;Eb(o,56627,q)}else{if(n<<24>>24){m=1;break a}a[m>>0]=(a[m>>0]|0)+1<<24>>24;c[p>>2]=e;Eb(o,56627,p)}k=k+1|0;if((k|0)>=(f|0)){m=0;break}}}else m=0;while(0);Eb(o,56631,H);do if((o|0)!=0&(o|0)!=29632){k=o+4|0;l=c[k>>2]|0;if(((l|0)!=0?(a[l+(c[o+16>>2]|0)>>0]=0,(c[o+12>>2]|0)!=0):0)?(a[o+21>>0]&4)==0:0)e=$d(o)|0;else e=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{q=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(e){if(!m){k=td(b,e)|0;if(!k)k=0;else{l=pd(b)|0;Q=24}}else{k=1;l=56572;Q=24}if((Q|0)==24){c[r>>2]=l;r=Bb(31408,r)|0;c[i>>2]=r}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{r=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k){k=a[R+21>>0]|0;r=(k&255)>>>1;a[R+20>>0]=r;if(r<<24>>24)if((k&255)<=10)if(!(k&1)){e=R+23|0;a[e>>0]=((k&255)<<2)+8;n=(j|0)==0;k=c[E>>2]|0;do if(n){l=c[F>>2]|0;c[u>>2]=k;c[u+4>>2]=l;l=Bb(56634,u)|0;m=R+16|0;if(!l){k=7;Q=48}else{c[u>>2]=0;k=qd(b,l,-1,128,0,u,0)|0;if(k|0){Q=48;break}k=c[u>>2]|0;if((Gc(k)|0)==100){u=Nc(k,0)|0;c[m>>2]=u}k=gc(k)|0;if(k|0){Q=48;break}if((c[m>>2]|0)>=448){k=0;break}c[v>>2]=c[F>>2];k=Bb(56691,v)|0;c[i>>2]=k;k=267}}else{c[t>>2]=k;l=Bb(54428,t)|0;if(!l){k=7;Q=48}else{c[t>>2]=0;k=qd(b,l,-1,128,0,t,0)|0;if(k|0){Q=48;break}k=c[t>>2]|0;if((Gc(k)|0)==100)m=(Nc(k,0)|0)+-64|0;else m=-64;k=gc(k)|0;if(k|0){Q=48;break}k=((d[e>>0]|0)*51|0)+4|0;c[R+16>>2]=(k|0)<(m|0)?k:m;k=0}}while(0);if((Q|0)==48){v=pd(b)|0;c[x>>2]=v;x=Bb(31408,x)|0;c[i>>2]=x;if(!l)break}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{x=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k|0)break;f=c[w>>2]|0;o=c[y>>2]|0;c[R+12>>2]=b;do if(!n){m=zb(b)|0;c[z>>2]=f;c[z+4>>2]=o;Eb(m,57135,z);l=R+25|0;if(a[l>>0]|0){k=0;do{c[A>>2]=k;Eb(m,57197,A);k=k+1|0}while(k>>>0<(d[l>>0]|0)>>>0)}c[B>>2]=f;c[B+4>>2]=o;Eb(m,57202,B);c[C>>2]=f;c[C+4>>2]=o;Eb(m,57266,C);C=c[R+16>>2]|0;c[D>>2]=f;c[D+4>>2]=o;c[D+8>>2]=C;Eb(m,57336,D);if(!((m|0)!=0&(m|0)!=29632)){k=7;Q=122;break}k=m+4|0;l=c[k>>2]|0;do if(!l)Q=62;else{a[l+(c[m+16>>2]|0)>>0]=0;if(!(c[m+12>>2]|0)){Q=62;break}if(a[m+21>>0]&4){Q=62;break}l=$d(m)|0}while(0);if((Q|0)==62)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{Q=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!l){k=7;Q=122;break}k=nd(b,l,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{Q=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}if(k)Q=122;else Q=71}else Q=71;while(0);b:do if((Q|0)==71){c[I>>2]=R+80;c[I+4>>2]=R+84;c[I+8>>2]=R+88;c[I+12>>2]=R+92;c[I+16>>2]=R+96;c[I+20>>2]=R+100;c[I+24>>2]=R+104;c[I+28>>2]=R+108;k=Rd(b,c[E>>2]|0,35174,0,0,0,0,0,0)|0;do if(!k){e=c[F>>2]|0;c[G>>2]=c[E>>2];c[G+4>>2]=e;e=Bb(57611,G)|0;if(!e){k=7;Q=85;break}k=qd(b,e,-1,128,0,H,0)|0;c:do switch(k|0){case 0:{k=c[H>>2]|0;if((Gc(k)|0)==100){l=Oc(k,0)|0;m=L()|0}else{l=0;m=0}k=gc(k)|0;if(k|0)break c;if((l|0)==0&(m|0)==0){Q=79;break c}H=(m|0)>0|(m|0)==0&l>>>0>100;k=R+48|0;c[k>>2]=H?l:100;c[k+4>>2]=H?m:0;k=0;break}case 7:break;default:Q=79}while(0);if((Q|0)==79){k=R+48|0;c[k>>2]=1048576;c[k+4>>2]=0;k=0}if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{Q=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}if(!k)Q=88;else Q=87}else{Q=R+48|0;c[Q>>2]=1048576;c[Q+4>>2]=0;if((k|0)!=1){Q=85;break}Q=88}while(0);d:do if((Q|0)==85)Q=87;else if((Q|0)==88){e=R+25|0;m=0;while(1){if((m|0)==3?(a[e>>0]|0)!=0:0)k=57385;else k=c[26432+(m<<2)>>2]|0;c[J>>2]=f;c[J+4>>2]=o;l=Bb(k,J)|0;if(!l){k=7;g=e;break d}k=qd(b,l,-1,133,0,c[I+(m<<2)>>2]|0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{H=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}m=m+1|0;if(!(m>>>0<8&(k|0)==0)){g=e;break}}}while(0);if((Q|0)==87)g=R+25|0;do if(a[g>>0]|0){c[K>>2]=f;c[K+4>>2]=o;K=Bb(57493,K)|0;c[R+64>>2]=K;if(!K){k=7;Q=122;break b}p=zb(b)|0;c[M>>2]=f;c[M+4>>2]=o;Eb(p,57538,M);if(a[g>>0]|0){e=R+26|0;n=p+16|0;o=p+8|0;f=p+4|0;m=0;do{do if(m|0){k=c[n>>2]|0;l=k+1|0;if(l>>>0<(c[o>>2]|0)>>>0){c[n>>2]=l;a[(c[f>>2]|0)+k>>0]=44;break}else{wb(p,41685,1);break}}while(0);k=m+2|0;if(m>>>0<(d[e>>0]|0)>>>0){c[N>>2]=m;c[N+4>>2]=k;c[N+8>>2]=m;Eb(p,57565,N)}else{c[O>>2]=m;c[O+4>>2]=k;Eb(p,57587,O)}m=m+1|0}while(m>>>0<(d[g>>0]|0)>>>0)}Eb(p,57595,P);if(!((p|0)!=0&(p|0)!=29632)){k=7;Q=122;break b}k=p+4|0;l=c[k>>2]|0;do if(!l)Q=114;else{a[l+(c[p+16>>2]|0)>>0]=0;if(!(c[p+12>>2]|0)){Q=114;break}if(a[p+21>>0]&4){Q=114;break}l=$d(p)|0}while(0);if((Q|0)==114)l=c[k>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](p);else{P=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p)}if(!l){k=7;Q=122;break b}k=qd(b,l,-1,133,0,R+112|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{P=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-P;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(k|0)break;c[h>>2]=R;i=0;Ra=T;return i|0}while(0);b=pd(b)|0;c[S>>2]=b;S=Bb(31408,S)|0;c[i>>2]=S;break}else k=1;else k=3;else k=2;c[s>>2]=c[26400+(k<<2)>>2];k=Bb(31408,s)|0;c[i>>2]=k;k=1}}else k=7}else k=7;while(0);Ts(R);i=k;Ra=T;return i|0}function Ts(b){b=b|0;var d=0,e=0,f=0;d=b+40|0;e=(c[d>>2]|0)+-1|0;c[d>>2]=e;if(e|0)return;a[b+24>>0]=0;d=b+76|0;e=c[d>>2]|0;do if(e|0?(c[b+56>>2]|0)==0:0){c[d>>2]=0;d=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}f=e;if((c[d+304>>2]|0)>>>0<=f>>>0?(c[d+308>>2]|0)>>>0>f>>>0:0){f=d+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;d=c[b+64>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{f=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function Us(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(!b){b=0;return b|0}f=b+16|0;g=(c[f>>2]|0)+-1|0;c[f>>2]=g;if(g|0){b=0;return b|0}f=a+60|0;c[f>>2]=(c[f>>2]|0)+-1;f=b+8|0;g=f;if((c[g>>2]|0)==1&(c[g+4>>2]|0)==0)c[a+28>>2]=-1;d=c[b>>2]|0;if((d|0)!=0?(e=Us(a,d)|0,(e|0)!=0):0)g=e;else g=Vs(a,b)|0;d=c[f>>2]|0;if(!((d|0)==0&(c[f+4>>2]|0)==0)){d=a+116+(((d>>>0)%97|0)<<2)|0;while(1){e=c[d>>2]|0;if((e|0)==(b|0))break;else d=e+28|0}a=b+28|0;c[d>>2]=c[a>>2];c[a>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);b=g;return b|0}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);b=g;return b|0}return 0}function Vs(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;j=e+20|0;if(!(c[j>>2]|0)){n=0;return n|0}m=c[d+80>>2]|0;n=e+8|0;g=n;f=c[g>>2]|0;g=c[g+4>>2]|0;do if(((f|0)!=0|(g|0)!=0)&(Vc(m,1)|0)==0){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){c[h>>2]=f;c[h+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);f=c[e+24>>2]|0;g=c[d+16>>2]|0;if((f|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;c[j>>2]=0;if(!m)f=0;else l=12}else{f=yc((c[m+100>>2]|0)+40|0,f,g,0,0)|0;if(f|0?(k=c[m>>2]|0,c[k+64>>2]=f,Ne(k,f),k=c[m>>2]|0,(f|0)==3082|(a[k+81>>0]|0)!=0):0)og(k);Gc(m)|0;c[j>>2]=0;l=12}do if((l|0)==12){f=c[m>>2]|0;l=m+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(f,m);g=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;l=m+64|0;c[l>>2]=0;c[l+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}while(0);Vc(m,2)|0;m=n;if(!((f|0)==0&((c[m>>2]|0)==0&(c[m+4>>2]|0)==0))){n=f;return n|0}l=(c[d+12>>2]|0)+40|0;m=c[l>>2]|0;l=c[l+4>>2]|0;c[n>>2]=m;c[n+4>>2]=l;n=d+116+(((m>>>0)%97|0)<<2)|0;c[e+28>>2]=c[n>>2];c[n>>2]=e;n=0;return n|0}function Ws(b,e,f){b=b|0;e=+e;f=f|0;var 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;u=Ra;Ra=Ra+32|0;t=u;s=b+5|0;i=(a[s>>0]|0)==0;do if(i)if(c[b+24>>2]|0){h=c[b+32>>2]|0;q=b+84+((f&255)<<2)|0;c[q>>2]=(c[q>>2]|0)+1;if(!h)break;else{r=6;break}}else{t=b+84+((f&255)<<2)|0;c[t>>2]=(c[t>>2]|0)+1;break}else{h=b+84+((f&255)<<2)|0;c[h>>2]=(c[h>>2]|0)+1;h=b+40|0;r=6}while(0);if((r|0)==6){k=+g[h>>3];do if(!(k>e)){if(k==e?(d[h+16>>0]|0)>(f&255):0)break;m=b+24|0;i=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((i|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;p=j;i=c[m>>2]|0;j=h;break}}else{j=b+32|0;p=j;j=c[j>>2]|0}while(0);c[m>>2]=i+1;h=j+(i*24|0)|0;g[h>>3]=e;a[j+(i*24|0)+16>>0]=f;if((i|0)<=0){b=h;Ra=u;return b|0}o=b+32|0;a:while(1){l=(i+-1|0)/2|0;m=j+(l*24|0)|0;k=+g[m>>3];if(!(ek){r=49;break}if((d[h+16>>0]|0)>=(d[j+(l*24|0)+16>>0]|0)){r=49;break}}h=j+(l*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];j=j+(i*24|0)|0;c[h>>2]=c[j>>2];c[h+4>>2]=c[j+4>>2];c[h+8>>2]=c[j+8>>2];c[h+12>>2]=c[j+12>>2];c[h+16>>2]=c[j+16>>2];c[h+20>>2]=c[j+20>>2];h=(c[o>>2]|0)+(i*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=l+1|0;j=i+1|0;do if((i|0)<9)if((i|0)<=3){r=b+64+(h<<2)|0;s=c[r>>2]|0;f=b+64+(j<<2)|0;c[r>>2]=c[f>>2];c[f>>2]=s;if((i|0)==3)break;else{h=m;r=49;break a}}else{f=b+64+(h<<2)|0;Us(c[b>>2]|0,c[f>>2]|0)|0;c[f>>2]=0;break}while(0);i=l;h=m;j=c[p>>2]|0;e=+g[m>>3]}if((r|0)==49){Ra=u;return h|0}}while(0);if(!i){m=b+24|0;j=c[m>>2]|0;l=b+20|0;h=c[l>>2]|0;do if((j|0)>=(h|0)){i=(h<<1)+8|0;j=b+32|0;h=c[j>>2]|0;if(mb()|0){b=0;Ra=u;return b|0}h=sb(h,i*24|0,0)|0;if(!h){b=0;Ra=u;return b|0}else{c[j>>2]=h;c[l>>2]=i;q=j;i=h;j=c[m>>2]|0;l=h;break}}else{q=b+32|0;l=c[q>>2]|0;i=l}while(0);c[m>>2]=j+1;h=l+(j*24|0)|0;g[h>>3]=e;a[l+(j*24|0)+16>>0]=f;b:do if((j|0)>0){p=b+32|0;n=e;while(1){m=(j+-1|0)/2|0;o=l+(m*24|0)|0;k=+g[o>>3];if(!(nk){r=26;break b}if((d[h+16>>0]|0)>=(d[l+(m*24|0)+16>>0]|0))break b}h=l+(m*24|0)|0;c[t>>2]=c[h>>2];c[t+4>>2]=c[h+4>>2];c[t+8>>2]=c[h+8>>2];c[t+12>>2]=c[h+12>>2];c[t+16>>2]=c[h+16>>2];c[t+20>>2]=c[h+20>>2];i=l+(j*24|0)|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[h+20>>2]=c[i+20>>2];h=(c[p>>2]|0)+(j*24|0)|0;c[h>>2]=c[t>>2];c[h+4>>2]=c[t+4>>2];c[h+8>>2]=c[t+8>>2];c[h+12>>2]=c[t+12>>2];c[h+16>>2]=c[t+16>>2];c[h+20>>2]=c[t+20>>2];h=m+1|0;i=j+1|0;do if((j|0)<9)if((j|0)<=3){v=b+64+(h<<2)|0;h=c[v>>2]|0;l=b+64+(i<<2)|0;c[v>>2]=c[l>>2];c[l>>2]=h;if((j|0)==3)break;else{h=o;r=26;break b}}else{v=b+64+(h<<2)|0;Us(c[b>>2]|0,c[v>>2]|0)|0;c[v>>2]=0;break}while(0);l=c[q>>2]|0;j=m;h=o;i=l;n=+g[o>>3]}}else r=26;while(0);do if((r|0)==26)if(!h){v=0;Ra=u;return v|0}else{i=c[b+32>>2]|0;break}while(0);i=h-i|0;if((i|0)<96){c[b+64+(((i|0)/24|0)+1<<2)>>2]=c[b+64>>2];i=b+64|0}else{i=b+64|0;Us(c[b>>2]|0,c[i>>2]|0)|0}c[i>>2]=0;v=b+40|0;c[h>>2]=c[v>>2];c[h+4>>2]=c[v+4>>2];c[h+8>>2]=c[v+8>>2];c[h+12>>2]=c[v+12>>2];c[h+16>>2]=c[v+16>>2];c[h+20>>2]=c[v+20>>2]}}v=b+40|0;g[v>>3]=e;a[b+56>>0]=f;a[s>>0]=1;Ra=u;return v|0}function Xs(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;p=Ra;Ra=Ra+16|0;m=p;i=c[b+116+(((e>>>0)%97|0)<<2)>>2]|0;a:do if(i|0){j=i;while(1){o=j+8|0;if((c[o>>2]|0)==(e|0)?(c[o+4>>2]|0)==(f|0):0)break;i=c[j+28>>2]|0;if(!i)break a;else j=i}do if(g|0?(c[j>>2]|0)==0:0){i=g;while(1){if((i|0)==(j|0)){i=267;n=63;break}i=c[i>>2]|0;if(!i){n=10;break}}if((n|0)==10){b=g+16|0;c[b>>2]=(c[b>>2]|0)+1;c[j>>2]=g;break}else if((n|0)==63){Ra=p;return i|0}}while(0);b=j+16|0;c[b>>2]=(c[b>>2]|0)+1;c[h>>2]=j;h=0;Ra=p;return h|0}while(0);o=b+76|0;k=c[o>>2]|0;do if(k){c[o>>2]=0;i=ld(k,e,f)|0;c[o>>2]=k;if(!i){l=b+16|0;i=c[l>>2]|0;n=48;break}j=b+24|0;do if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}n=k;if((c[l+304>>2]|0)>>>0<=n>>>0?(c[l+308>>2]|0)>>>0>n>>>0:0){n=l+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if((i|0)!=7){k=c[o>>2]|0;if(!k){n=28;break}else{n=35;break}}else{h=7;Ra=p;return h|0}}else n=28;while(0);do if((n|0)==28){c[m>>2]=c[b+36>>2];j=Bb(57749,m)|0;if(!j){h=7;Ra=p;return h|0}i=ad(c[b+12>>2]|0,c[b+32>>2]|0,j,57757,e,f,0,o)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{n=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}k=c[o>>2]|0;if(!i){l=b+16|0;i=c[l>>2]|0;if(!k){j=0;k=l;n=50;break}else{n=48;break}}if(!k)n=46;else{j=b+24|0;n=35}}while(0);do if((n|0)==35)if((a[j>>0]|0)==0?(c[b+56>>2]|0)==0:0){c[o>>2]=0;j=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,k);n=46;break}b=k;if((c[j+304>>2]|0)>>>0<=b>>>0?(c[j+308>>2]|0)>>>0>b>>>0:0){n=j+300|0;c[k>>2]=c[n>>2];c[n>>2]=k;n=46;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);n=46;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);n=46;break}}else n=46;else if((n|0)==48)if(!(c[k+16>>2]|0)){j=0;k=l;n=50}else{j=c[k>>2]|0;k=l;n=50}while(0);do if((n|0)==46){c[h>>2]=0;i=(i|0)==1?267:i;j=0}else if((n|0)==50)if((i|0)==(j|0)){j=pb(i+32|0,0)|0;if(j){c[j>>2]=g;i=j+32|0;c[j+24>>2]=i;c[j+16>>2]=1;n=b+60|0;c[n>>2]=(c[n>>2]|0)+1;n=j+8|0;c[n>>2]=e;c[n+4>>2]=f;c[j+20>>2]=0;c[j+28>>2]=0;i=jd(c[o>>2]|0,i,c[k>>2]|0,0,81)|0;if((e|0)==1&(f|0)==0){f=c[j+24>>2]|0;f=d[f>>0]<<8|d[f+1>>0];c[b+28>>2]=f;i=f>>>0>40?267:i}if(!i){f=c[j+24>>2]|0;if((d[f+2>>0]<<8|d[f+3>>0]|0)>(((c[b+16>>2]|0)+-4|0)/(d[b+23>>0]|0)|0|0))i=267;else{if(g|0){g=g+16|0;c[g>>2]=(c[g>>2]|0)+1}i=b+116+((((c[j+8>>2]|0)>>>0)%97|0)<<2)|0;c[j+28>>2]=c[i>>2];c[i>>2]=j;i=0;break}}b=b+60|0;c[b>>2]=(c[b>>2]|0)+-1;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=0;break}else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=0;break}}else{i=7;j=0}}else{i=267;j=0}while(0);c[h>>2]=j;h=i;Ra=p;return h|0}function Ys(b){b=b|0;var e=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0.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,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,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,Sa=0,Ta=0,Ua=0,Va=0,Xa=0;Pa=Ra;Ra=Ra+96|0;ua=Pa;Fa=Pa+80|0;za=c[b>>2]|0;Ma=c[b+12>>2]|0;Na=(a[za+22>>0]|0)==1;Oa=b+5|0;va=b+24|0;wa=b+40|0;xa=b+32|0;ya=b+48|0;za=za+23|0;Aa=(Ma|0)>0;Ba=b+16|0;Ca=ua+8|0;Da=ua+72|0;Ea=ua+64|0;Ga=ua+56|0;Ha=ua+48|0;Ia=ua+40|0;Ja=ua+32|0;Ka=ua+24|0;La=ua+16|0;m=0;e=0;a:while(1){j=a[Oa>>0]|0;if(!(j<<24>>24)){if(!(c[va>>2]|0)){e=1;ta=66;break}i=c[xa>>2]|0;if(!i){e=1;ta=66;break}}else i=wa;if(!(a[i+16>>0]|0)){e=0;ta=66;break}k=1-(j&255)|0;l=b+64+(k<<2)|0;j=c[l>>2]|0;if(!j){if(!k)e=ya;else e=(c[xa>>2]|0)+8|0;e=Xs(c[b>>2]|0,c[e>>2]|0,c[e+4>>2]|0,0,l)|0;j=c[l>>2]|0}if(e|0){ta=67;break}ra=j+24|0;sa=c[ra>>2]|0;sa=d[sa+2>>0]<<8|d[sa+3>>0];qa=i;j=m;e=0;b:while(1){oa=qa+18|0;k=a[oa>>0]|0;i=k&255;if(sa>>>0<=i>>>0)break;pa=(c[ra>>2]|0)+((G(d[za>>0]|0,i)|0)+4)|0;c:do if(Aa){O=qa+16|0;P=pa+8|0;Q=pa+1|0;R=pa+2|0;S=pa+3|0;T=pa+4|0;U=pa+5|0;V=pa+6|0;W=pa+7|0;X=pa+12|0;Y=pa+13|0;Z=pa+14|0;_=pa+15|0;$=pa+9|0;aa=pa+10|0;ba=pa+11|0;ca=pa+44|0;da=pa+45|0;ea=pa+46|0;fa=pa+47|0;ga=pa+40|0;ha=pa+41|0;ia=pa+42|0;ja=pa+43|0;ka=pa+36|0;la=pa+37|0;ma=pa+38|0;na=pa+39|0;r=pa+32|0;s=pa+33|0;t=pa+34|0;u=pa+35|0;v=pa+28|0;w=pa+29|0;x=pa+30|0;y=pa+31|0;z=pa+24|0;A=pa+25|0;B=pa+26|0;C=pa+27|0;D=pa+20|0;E=pa+21|0;F=pa+22|0;H=pa+23|0;I=pa+16|0;J=pa+17|0;K=pa+18|0;M=pa+19|0;N=qa+17|0;o=2;n=0;p=-1.0;d:do{l=c[Ba>>2]|0;m=c[l+(n*24|0)+4>>2]|0;e:do if((m|0)>69){e=c[l+(n*24|0)+16>>2]|0;i=c[e+28>>2]|0;if((m|0)==71?(a[O>>0]|0)==1:0){Va=cw(d[pa>>0]|0,0,56)|0;Sa=L()|0;Xa=cw(d[Q>>0]|0,0,48)|0;Sa=L()|0|Sa;Ua=cw(d[R>>0]|0,0,40)|0;Sa=Sa|(L()|0);Sa=Sa|d[S>>0];Ta=cw(d[T>>0]|0,0,24)|0;Sa=Sa|(L()|0);k=cw(d[U>>0]|0,0,16)|0;Sa=Sa|(L()|0);Qa=cw(d[V>>0]|0,0,8)|0;Sa=Sa|(L()|0);Sa=Sv(Xa|Va|Ua|Ta|k|Qa|0,Sa|0,d[W>>0]|0,0)|0;Qa=L()|0;k=e+40|0;c[k>>2]=Sa;c[k+4>>2]=Qa}if(Na){switch(i|0){case 10:{g[Da>>3]=+(d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0]|0);g[Ea>>3]=+(d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0]|0);ta=29;break}case 8:{ta=29;break}case 6:{ta=30;break}case 4:{ta=31;break}default:{}}if((ta|0)==29){g[Ga>>3]=+(d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0]|0);g[Ha>>3]=+(d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0]|0);ta=30}if((ta|0)==30){g[Ia>>3]=+(d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0]|0);g[Ja>>3]=+(d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0]|0);ta=31}if((ta|0)==31){ta=0;g[Ka>>3]=+(d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0]|0);g[La>>3]=+(d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0]|0)}g[Ca>>3]=+(d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0]|0);q=+(d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0]|0)}else{switch(i|0){case 10:{g[Da>>3]=(c[h>>2]=d[da>>0]<<16|d[ca>>0]<<24|d[ea>>0]<<8|d[fa>>0],+f[h>>2]);g[Ea>>3]=(c[h>>2]=d[ha>>0]<<16|d[ga>>0]<<24|d[ia>>0]<<8|d[ja>>0],+f[h>>2]);ta=23;break}case 8:{ta=23;break}case 6:{ta=24;break}case 4:{ta=25;break}default:{}}if((ta|0)==23){g[Ga>>3]=(c[h>>2]=d[la>>0]<<16|d[ka>>0]<<24|d[ma>>0]<<8|d[na>>0],+f[h>>2]);g[Ha>>3]=(c[h>>2]=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0],+f[h>>2]);ta=24}if((ta|0)==24){g[Ia>>3]=(c[h>>2]=d[w>>0]<<16|d[v>>0]<<24|d[x>>0]<<8|d[y>>0],+f[h>>2]);g[Ja>>3]=(c[h>>2]=d[A>>0]<<16|d[z>>0]<<24|d[B>>0]<<8|d[C>>0],+f[h>>2]);ta=25}if((ta|0)==25){ta=0;g[Ka>>3]=(c[h>>2]=d[E>>0]<<16|d[D>>0]<<24|d[F>>0]<<8|d[H>>0],+f[h>>2]);g[La>>3]=(c[h>>2]=d[J>>0]<<16|d[I>>0]<<24|d[K>>0]<<8|d[M>>0],+f[h>>2])}g[Ca>>3]=(c[h>>2]=d[Y>>0]<<16|d[X>>0]<<24|d[Z>>0]<<8|d[_>>0],+f[h>>2]);q=(c[h>>2]=d[$>>0]<<16|d[P>>0]<<24|d[aa>>0]<<8|d[ba>>0],+f[h>>2])}g[ua>>3]=q;if((m|0)==70){c[Fa>>2]=0;e=Za[c[l+(n*24|0)+8>>2]&127](e,i,ua,Fa)|0;p=0.0;o=(c[Fa>>2]|0)==0?0:o}else{c[e+20>>2]=ua;c[e+32>>2]=(d[O>>0]|0)+-1;q=+g[qa>>3];g[e+48>>3]=q;Va=e+64|0;g[Va>>3]=q;Ua=d[N>>0]|0;c[e+56>>2]=Ua;Xa=e+60|0;c[Xa>>2]=Ua;e=Wa[c[l+(n*24|0)+8>>2]&127](e)|0;Xa=c[Xa>>2]|0;q=+g[Va>>3];p=p<0.0|q>2]<<2;if((a[O>>0]|0)!=1){k=pa+((i&1016)+8)|0;if((m+-65|0)>>>0<3){i=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];q=+g[l+(n*24|0)+8>>3];if(q>=(Na?+(i|0):(c[h>>2]=i,+f[h>>2]))){ta=49;break}if((m|0)!=65){ta=50;break}}else q=+g[l+(n*24|0)+8>>3];i=k+4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];if(!(q<=(Na?+(i|0):(c[h>>2]=i,+f[h>>2])))){ta=50;break}else{ta=49;break}}i=pa+(i+8)|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];q=Na?+(i|0):(c[h>>2]=i,+f[h>>2]);switch(m|0){case 66:if(!(q<=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 67:if(q<+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}case 68:if(!(q>=+g[l+(n*24|0)+8>>3])){ta=50;break e}else{ta=49;break e}case 69:if(q>+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}default:if(q==+g[l+(n*24|0)+8>>3]){ta=49;break e}else{ta=50;break e}}}while(0);if((ta|0)==49){ta=0;if(!o)ta=50;else k=0}if((ta|0)==50){ta=0;k=6;o=0}switch(k&7){case 6:break d;case 0:break;default:{i=qa;break c}}n=n+1|0}while((n|0)<(Ma|0));i=(a[oa>>0]|0)+1<<24>>24;a[oa>>0]=i;if(!o){i=qa;k=4}else ta=54}else{i=k+1<<24>>24;a[oa>>0]=i;p=-1.0;o=2;ta=54}while(0);if((ta|0)==54){ta=0;n=(d[qa+16>>0]|0)+255&255;if(!(n<<24>>24)){m=qa+8|0;k=i&255;i=k;k=k+255&255;l=c[m>>2]|0;m=c[m+4>>2]|0}else{Ua=cw(d[pa>>0]|0,0,56)|0;l=L()|0;Ta=cw(d[pa+1>>0]|0,0,48)|0;l=L()|0|l;Va=cw(d[pa+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[pa+3>>0];Xa=cw(d[pa+4>>0]|0,0,24)|0;l=l|(L()|0);m=cw(d[pa+5>>0]|0,0,16)|0;l=l|(L()|0);k=cw(d[pa+6>>0]|0,0,8)|0;l=l|(L()|0);l=Sv(Ta|Ua|Va|Xa|m|k|0,l|0,d[pa+7>>0]|0,0)|0;i=i&255;k=0;m=L()|0}if(sa>>>0<=i>>>0)Zs(b);i=Ws(b,p<0.0?0.0:p,n)|0;if(!i){e=7;ta=67;break a}a[i+17>>0]=o;Xa=i+8|0;c[Xa>>2]=l;c[Xa+4>>2]=m;a[i+18>>0]=k;k=5}switch(k|0){case 4:{qa=i;break}case 5:{ta=62;break b}default:{e=j;ta=67;break a}}}if((ta|0)==62){ta=0;i=d[i+18>>0]|0}if(sa>>>0<=i>>>0)Zs(b);m=j}if((ta|0)==66){a[b+4>>0]=e;Xa=0;Ra=Pa;return Xa|0}else if((ta|0)==67){Ra=Pa;return e|0}return 0}function Zs(b){b=b|0;var e=0,f=0,h=0,i=0,j=0.0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+32|0;p=r;i=b+5|0;e=a[i>>0]|0;f=b+64+(1-(e&255)<<2)|0;h=c[f>>2]|0;if(h){Us(c[b>>2]|0,h)|0;c[f>>2]=0;e=a[i>>0]|0}if(e<<24>>24){q=b+84+((d[b+56>>0]|0)<<2)|0;c[q>>2]=(c[q>>2]|0)+-1;a[i>>0]=0;Ra=r;return}e=b+24|0;f=c[e>>2]|0;if(!f){Ra=r;return}n=b+32|0;m=c[n>>2]|0;o=b+84+((d[m+16>>0]|0)<<2)|0;c[o>>2]=(c[o>>2]|0)+-1;o=f+-1|0;c[e>>2]=o;e=m+(o*24|0)|0;c[m>>2]=c[e>>2];c[m+4>>2]=c[e+4>>2];c[m+8>>2]=c[e+8>>2];c[m+12>>2]=c[e+12>>2];c[m+16>>2]=c[e+16>>2];c[m+20>>2]=c[e+20>>2];e=b+64+(f<<2)|0;if((f|0)<5?(c[b+68>>2]=c[e>>2],c[e>>2]=0,(f|0)<=2):0){Ra=r;return}e=0;m=1;a:while(1){l=m+1|0;i=c[n>>2]|0;do if((l|0)<(o|0)){h=i+(l*24|0)|0;k=+g[h>>3];j=+g[i+(m*24|0)>>3];if(!(kj){q=21;break}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(m*24|0)+16>>0]|0)){q=21;break}}f=i+(e*24|0)|0;j=+g[f>>3];if(!(kj){q=30;break a}if((d[i+(l*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break a}};c[p>>2]=c[f>>2];c[p+4>>2]=c[f+4>>2];c[p+8>>2]=c[f+8>>2];c[p+12>>2]=c[f+12>>2];c[p+16>>2]=c[f+16>>2];c[p+20>>2]=c[f+20>>2];c[f>>2]=c[h>>2];c[f+4>>2]=c[h+4>>2];c[f+8>>2]=c[h+8>>2];c[f+12>>2]=c[h+12>>2];c[f+16>>2]=c[h+16>>2];c[f+20>>2]=c[h+20>>2];f=(c[n>>2]|0)+(l*24|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];c[f+20>>2]=c[p+20>>2];f=e+1|0;h=m+2|0;do if((e|0)<4)if((m|0)>2){m=b+64+(f<<2)|0;Us(c[b>>2]|0,c[m>>2]|0)|0;c[m>>2]=0;break}else{f=b+64+(f<<2)|0;i=c[f>>2]|0;m=b+64+(h<<2)|0;c[f>>2]=c[m>>2];c[m>>2]=i;break}while(0);e=l}else q=21;while(0);if((q|0)==21){q=0;f=i+(m*24|0)|0;h=i+(e*24|0)|0;j=+g[f>>3];k=+g[h>>3];if(!(jk){q=30;break}if((d[i+(m*24|0)+16>>0]|0)>=(d[i+(e*24|0)+16>>0]|0)){q=30;break}};c[p>>2]=c[h>>2];c[p+4>>2]=c[h+4>>2];c[p+8>>2]=c[h+8>>2];c[p+12>>2]=c[h+12>>2];c[p+16>>2]=c[h+16>>2];c[p+20>>2]=c[h+20>>2];c[h>>2]=c[f>>2];c[h+4>>2]=c[f+4>>2];c[h+8>>2]=c[f+8>>2];c[h+12>>2]=c[f+12>>2];c[h+16>>2]=c[f+16>>2];c[h+20>>2]=c[f+20>>2];f=(c[n>>2]|0)+(m*24|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];c[f+20>>2]=c[p+20>>2];f=e+1|0;do if((e|0)<4)if((m|0)>3){l=b+64+(f<<2)|0;Us(c[b>>2]|0,c[l>>2]|0)|0;c[l>>2]=0;break}else{h=b+64+(f<<2)|0;i=c[h>>2]|0;l=b+64+(l<<2)|0;c[h>>2]=c[l>>2];c[l>>2]=i;break}while(0);e=m}m=e<<1|1;if((m|0)>=(o|0)){q=30;break}}if((q|0)==30){Ra=r;return}}function _s(d,f){d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+32|0;l=o+16|0;j=o+8|0;g=o;i=o+28|0;c[i>>2]=0;n=d+36|0;m=c[n>>2]|0;c[g>>2]=c[d+32>>2];c[g+4>>2]=m;g=Bb(53869,g)|0;do if(!g){h=7;g=0}else{h=qd(c[d+12>>2]|0,g,-1,128,0,i,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}if(h|0){g=c[i>>2]|0;break}m=c[i>>2]|0;k=c[m>>2]|0;g=(m|0)==0;if(!f){if(!g?(b[m+144>>1]|0)!=0:0){g=c[m+116>>2]|0;do if(g){h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0){g=c[g+16>>2]|0;break}if(!(h&1))g=Gg(g,1)|0;else g=0}else g=0;while(0);h=k+81|0;if(a[h>>0]|0)if(!(c[k+180>>2]|0)){a[h>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0;c[j>>2]=c[n>>2];c[j+4>>2]=g;g=Bb(57776,j)|0}else{if(!g){j=m+144|0;if((e[j>>1]|0)>>>0>f>>>0){g=c[m+116>>2]|0;h=g+(f*40|0)|0;do if(h){i=b[g+(f*40|0)+8>>1]|0;if((i&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){h=c[g+(f*40|0)+16>>2]|0;break}if(!(i&1))h=Gg(h,1)|0;else h=0}else h=0;while(0);g=k+81|0;if(a[g>>0]|0)if(!(c[k+180>>2]|0)){a[g>>0]=0;c[k+264>>2]=0;h=k+272|0;c[h>>2]=(c[h>>2]|0)+-1;h=0}else h=0}else h=0;f=f+1|0;k=c[m>>2]|0;if(f>>>0<(e[j>>1]|0)>>>0){g=c[m+116>>2]|0;i=g+(f*40|0)|0;do if(i){j=b[g+(f*40|0)+8>>1]|0;if((j&514)==514?(a[g+(f*40|0)+10>>0]|0)==1:0){g=c[g+(f*40|0)+16>>2]|0;break}if(!(j&1))g=Gg(i,1)|0;else g=0}else g=0;while(0);i=k+81|0;if(a[i>>0]|0)if(!(c[k+180>>2]|0)){a[i>>0]=0;c[k+264>>2]=0;g=k+272|0;c[g>>2]=(c[g>>2]|0)+-1;g=0}else g=0}else g=0}else{h=0;g=0}c[l>>2]=c[n>>2];c[l+4>>2]=h;c[l+8>>2]=g;g=Bb(57808,l)|0}c[d+8>>2]=g;gc(m)|0;d=19;Ra=o;return d|0}while(0);gc(g)|0;d=h;Ra=o;return d|0}function $s(e,f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;x=Ra;Ra=Ra+64|0;t=x+56|0;u=x;v=x+52|0;w=x+48|0;c[v>>2]=0;c[w>>2]=0;i=Xs(e,1,0,0,w)|0;a:do if(!i){c[v>>2]=0;k=e+88|0;h=c[k>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){s=h;c[s>>2]=f;c[s+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);s=(Gc(c[k>>2]|0)|0)==100;j=c[k>>2]|0;do if(s){i=Oc(j,0)|0;i=Xs(e,i,L()|0,0,v)|0;h=c[k>>2]|0;if(h){j=c[h>>2]|0;s=h+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(j,h);s=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;r=h+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[j+81>>0]|0)!=0)og(j)}}else if(j){h=c[j>>2]|0;s=j+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;s=j+64|0;c[s>>2]=0;c[s+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){og(h);i=7;break a}else{i=c[h+68>>2]&i;break}}else i=0;while(0);l=c[v>>2]|0;b:do if((i|0)==0&(l|0)!=0){i=c[l+24>>2]|0;j=d[i+2>>0]<<8|d[i+3>>0];c:do if(j|0){k=d[e+23>>0]|0;h=0;while(1){s=i+((G(h,k)|0)+4)|0;A=cw(d[s>>0]|0,0,56)|0;r=L()|0;B=cw(d[s+1>>0]|0,0,48)|0;r=L()|0|r;z=cw(d[s+2>>0]|0,0,40)|0;r=r|(L()|0);r=r|d[s+3>>0];y=cw(d[s+4>>0]|0,0,24)|0;r=r|(L()|0);p=cw(d[s+5>>0]|0,0,16)|0;r=r|(L()|0);q=cw(d[s+6>>0]|0,0,8)|0;r=r|(L()|0);s=Sv(B|A|z|y|p|q|0,r|0,d[s+7>>0]|0,0)|0;if((s|0)==(f|0)&(L()|0)==(g|0))break;h=h+1|0;if(h>>>0>=j>>>0)break c}h=ct(e,l,h,0)|0;i=Us(e,l)|0;if(!h)break b;else{i=h;break a}}while(0);Us(e,l)|0;i=267;break a}while(0);if(!i){j=e+96|0;h=c[j>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){B=h;c[B>>2]=f;c[B+4>>2]=g;b[i>>1]=4;break}else{Pg(h,f,g);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;B=h+136|0;A=c[B+4>>2]|0;if((A|0)>0|(A|0)==0&(c[B>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;B=h+64|0;c[B>>2]=0;c[B+4>>2]=0;if(!((j|0)==3082|(a[i+81>>0]|0)!=0)){i=c[i+68>>2]&j;if(!i)break;else break a}else{og(i);i=7;break a}}while(0);j=e+28|0;if((c[j>>2]|0)>0?(n=c[w>>2]|0,o=n+24|0,m=c[o>>2]|0,(d[m+2>>0]<<8|d[m+3>>0]|0)==1):0){c[t>>2]=0;y=cw(d[m+4>>0]|0,0,56)|0;h=L()|0;s=cw(d[m+5>>0]|0,0,48)|0;h=L()|0|h;z=cw(d[m+6>>0]|0,0,40)|0;h=h|(L()|0);h=h|d[m+7>>0];A=cw(d[m+8>>0]|0,0,24)|0;h=h|(L()|0);B=cw(d[m+9>>0]|0,0,16)|0;h=h|(L()|0);i=cw(d[m+10>>0]|0,0,8)|0;h=h|(L()|0);h=Sv(s|y|z|A|B|i|0,h|0,d[m+11>>0]|0,0)|0;h=Xs(e,h,L()|0,n,t)|0;i=c[t>>2]|0;if(!h)h=dt(e,i,(c[j>>2]|0)+-1|0)|0;i=Us(e,i)|0;i=(h|0)==0?i:h;if(!i){A=(c[j>>2]|0)+-1|0;c[j>>2]=A;B=c[o>>2]|0;a[B>>0]=A>>>8;a[B+1>>0]=A;c[n+20>>2]=1}}else i=0}}while(0);q=e+68|0;j=c[q>>2]|0;c[v>>2]=j;h=(i|0)==0;if(!j){B=i;z=h;A=c[w>>2]|0;A=Us(e,A)|0;B=z?A:B;Ra=x;return B|0}r=e+60|0;p=e+23|0;s=e+21|0;do{o=j;n=j;d:do if(h){f=n+24|0;h=c[f>>2]|0;g=d[h+2>>0]<<8|d[h+3>>0];if(!g)i=0;else{m=n+8|0;l=0;while(1){B=G(l,d[p>>0]|0)|0;A=h+(B+4)|0;D=cw(d[A>>0]|0,0,56)|0;i=L()|0;E=cw(d[A+1>>0]|0,0,48)|0;i=L()|0|i;C=cw(d[A+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[A+3>>0];y=cw(d[A+4>>0]|0,0,24)|0;i=i|(L()|0);z=cw(d[A+5>>0]|0,0,16)|0;i=i|(L()|0);k=cw(d[A+6>>0]|0,0,8)|0;i=i|(L()|0);A=Sv(E|D|C|y|z|k|0,i|0,d[A+7>>0]|0,0)|0;i=L()|0;k=u;c[k>>2]=A;c[k+4>>2]=i;k=d[s>>0]|0;i=0;h=h+(B+12)|0;while(1){c[u+8+(i<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[u+8+((i|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];i=i+2|0;if(i>>>0>=k>>>0)break;else h=h+8|0}i=at(e,u,c[m>>2]|0,t)|0;if(!i){E=c[t>>2]|0;i=bt(e,E,u,c[m>>2]|0)|0;E=Us(e,E)|0;i=(i|0)==0?E:i}h=l+1|0;if(!(h>>>0>>0&(i|0)==0))break d;l=h;h=c[f>>2]|0}}}while(0);h=c[n+28>>2]|0;c[q>>2]=h;c[r>>2]=(c[r>>2]|0)+-1;if(!j)j=h;else{if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{E=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}j=c[q>>2]|0}c[v>>2]=j;h=(i|0)==0}while((j|0)!=0);E=c[w>>2]|0;E=Us(e,E)|0;E=h?E:i;Ra=x;return E|0}function at(b,e,g,h){b=b|0;e=e|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0,m=0,n=0.0,o=0,p=0.0,q=0.0,r=0.0,s=0.0,t=0,u=0,v=0,w=0.0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Ba=Ra;Ra=Ra+112|0;wa=Ba+48|0;za=Ba+96|0;xa=Ba;c[za>>2]=0;i=Xs(b,1,0,0,za)|0;ya=b+28|0;if(i|0){Aa=i;za=c[za>>2]|0;c[h>>2]=za;Ra=Ba;return Aa|0}D=b+23|0;H=b+21|0;E=b+20|0;F=b+22|0;I=wa+12|0;J=wa+8|0;K=wa+44|0;M=wa+40|0;N=wa+36|0;O=wa+32|0;P=wa+28|0;Q=wa+24|0;R=wa+20|0;S=wa+16|0;T=wa+12|0;U=wa+8|0;V=wa+44|0;W=wa+40|0;X=wa+36|0;Y=wa+32|0;Z=wa+28|0;_=wa+24|0;$=wa+20|0;aa=wa+16|0;ba=xa+12|0;ca=xa+8|0;da=xa+44|0;ea=xa+40|0;fa=xa+36|0;ga=xa+32|0;ha=xa+28|0;ia=xa+24|0;ja=xa+20|0;ka=xa+16|0;la=xa+12|0;ma=xa+8|0;na=xa+44|0;oa=xa+40|0;pa=xa+36|0;qa=xa+32|0;ra=xa+28|0;sa=xa+24|0;ta=xa+20|0;ua=xa+16|0;C=0;while(1){if((C|0)>=((c[ya>>2]|0)-g|0)){i=0;Aa=56;break}va=c[za>>2]|0;x=va+24|0;i=c[x>>2]|0;y=d[i+2>>0]<<8|d[i+3>>0];a:do if(!y){j=0;i=0}else{B=a[H>>0]|0;z=d[D>>0]|0;A=B&255;B=B&255;k=0;p=0.0;w=0.0;l=i;u=0;v=0;while(1){t=G(k,z)|0;j=l+(t+4)|0;Ea=cw(d[j>>0]|0,0,56)|0;i=L()|0;Fa=cw(d[j+1>>0]|0,0,48)|0;i=L()|0|i;Da=cw(d[j+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[j+3>>0];Ca=cw(d[j+4>>0]|0,0,24)|0;i=i|(L()|0);o=cw(d[j+5>>0]|0,0,16)|0;i=i|(L()|0);m=cw(d[j+6>>0]|0,0,8)|0;i=i|(L()|0);j=Sv(Fa|Ea|Da|Ca|o|m|0,i|0,d[j+7>>0]|0,0)|0;i=L()|0;m=xa;c[m>>2]=j;c[m+4>>2]=i;m=0;l=l+(t+12)|0;while(1){c[xa+8+(m<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[xa+8+((m|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];m=m+2|0;if(m>>>0>=A>>>0)break;else l=l+8|0}l=wa;m=xa;o=l+48|0;do{c[l>>2]=c[m>>2];l=l+4|0;m=m+4|0}while((l|0)<(o|0));t=a[E>>0]|0;o=(a[F>>0]|0)==0;if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=11;break}case 4:{n=1.0;Aa=11;break}case 3:{n=1.0;Aa=12;break}case 2:{n=1.0;Aa=13;break}default:q=1.0}if((Aa|0)==11){n=n*(+f[N>>2]-+f[O>>2]);Aa=12}if((Aa|0)==12){n=n*(+f[P>>2]-+f[Q>>2]);Aa=13}if((Aa|0)==13){Aa=0;q=n*(+f[R>>2]-+f[S>>2])}n=+f[J>>2];r=+f[I>>2]-n;m=0;while(1){s=+f[e+8+(m<<2)>>2];f[wa+8+(m<<2)>>2]=n>2];s=+f[e+8+(Fa<<2)>>2];f[l>>2]=n>s?n:s;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;n=+f[wa+8+(l<<2)>>2]}s=q*r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=16;break}case 4:{n=1.0;Aa=16;break}case 3:{n=1.0;Aa=17;break}case 2:{n=1.0;Aa=18;break}default:n=1.0}if((Aa|0)==16){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=17}if((Aa|0)==17){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=18}if((Aa|0)==18){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}m=c[T>>2]|0;l=c[U>>2]|0;m=Tv(m|0,((m|0)<0)<<31>>31|0,l|0,((l|0)<0)<<31>>31|0)|0;q=+(m>>>0)+4294967296.0*+(L()|0);m=0;while(1){Fa=c[e+8+(m<<2)>>2]|0;c[wa+8+(m<<2)>>2]=(l|0)<(Fa|0)?l:Fa;Fa=m|1;l=wa+8+(Fa<<2)|0;Ea=c[l>>2]|0;Fa=c[e+8+(Fa<<2)>>2]|0;c[l>>2]=(Ea|0)>(Fa|0)?Ea:Fa;l=m+2|0;if(l>>>0>=B>>>0)break;m=l;l=c[wa+8+(l<<2)>>2]|0}s=n*q}if(o){switch(t<<24>>24){case 5:{n=+f[K>>2]-+f[M>>2];Aa=30;break}case 4:{n=1.0;Aa=30;break}case 3:{n=1.0;Aa=31;break}case 2:{n=1.0;Aa=32;break}default:n=1.0}if((Aa|0)==30){n=n*(+f[N>>2]-+f[O>>2]);Aa=31}if((Aa|0)==31){n=n*(+f[P>>2]-+f[Q>>2]);Aa=32}if((Aa|0)==32){Aa=0;n=n*(+f[R>>2]-+f[S>>2])}r=n*(+f[I>>2]-+f[J>>2]);switch(t<<24>>24){case 5:{n=+f[da>>2]-+f[ea>>2];Aa=40;break}case 4:{n=1.0;Aa=40;break}case 3:{n=1.0;Aa=41;break}case 2:{n=1.0;Aa=42;break}default:n=1.0}if((Aa|0)==40){n=n*(+f[fa>>2]-+f[ga>>2]);Aa=41}if((Aa|0)==41){n=n*(+f[ha>>2]-+f[ia>>2]);Aa=42}if((Aa|0)==42){Aa=0;n=n*(+f[ja>>2]-+f[ka>>2])}q=n*(+f[ba>>2]-+f[ca>>2]);n=r}else{switch(t<<24>>24){case 5:{Fa=c[V>>2]|0;Aa=c[W>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=35;break}case 4:{n=1.0;Aa=35;break}case 3:{n=1.0;Aa=36;break}case 2:{n=1.0;Aa=37;break}default:n=1.0}if((Aa|0)==35){Ea=c[X>>2]|0;Fa=c[Y>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=36}if((Aa|0)==36){Ea=c[Z>>2]|0;Fa=c[_>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=37}if((Aa|0)==37){Aa=0;Ea=c[$>>2]|0;Fa=c[aa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[T>>2]|0;Fa=c[U>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;r=n*(+(Fa>>>0)+4294967296.0*+(L()|0));switch(t<<24>>24){case 5:{Fa=c[na>>2]|0;Aa=c[oa>>2]|0;n=+((Tv(Fa|0,((Fa|0)<0)<<31>>31|0,Aa|0,((Aa|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Aa=46;break}case 4:{n=1.0;Aa=46;break}case 3:{n=1.0;Aa=47;break}case 2:{n=1.0;Aa=48;break}default:n=1.0}if((Aa|0)==46){Ea=c[pa>>2]|0;Fa=c[qa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=47}if((Aa|0)==47){Ea=c[ra>>2]|0;Fa=c[sa>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0));Aa=48}if((Aa|0)==48){Aa=0;Ea=c[ta>>2]|0;Fa=c[ua>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;n=n*(+(Fa>>>0)+4294967296.0*+(L()|0))}Ea=c[la>>2]|0;Fa=c[ma>>2]|0;Fa=Tv(Ea|0,((Ea|0)<0)<<31>>31|0,Fa|0,((Fa|0)<0)<<31>>31|0)|0;q=n*(+(Fa>>>0)+4294967296.0*+(L()|0));n=r}n=n-s;if(!((k|0)==0|n>2]|0;u=j;v=i}}while(0);i=Xs(b,j,i,va,za)|0;Us(b,va)|0;if(!i)C=C+1|0;else{Aa=56;break}}if((Aa|0)==56){Fa=c[za>>2]|0;c[h>>2]=Fa;Ra=Ba;return i|0}return 0}function bt(b,e,h,i){b=b|0;e=e|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0,o=0,p=0.0,q=0,r=0.0,s=0.0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0.0,D=0,E=0,F=0.0,H=0,I=0,J=0.0,K=0.0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,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,Sa=0,Ta=0.0;Sa=Ra;Ra=Ra+192|0;Ea=Sa;Ia=Sa+144|0;Fa=Sa+96|0;Ga=Sa+48|0;Ma=(i|0)>0;a:do if(Ma?(l=h,k=c[l>>2]|0,l=c[l+4>>2]|0,j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0,j|0):0){while(1){Qa=j+8|0;if((c[Qa>>2]|0)==(k|0)?(c[Qa+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break a}Us(b,c[j>>2]|0)|0;if(e|0){Qa=e+16|0;c[Qa>>2]=(c[Qa>>2]|0)+1}c[j>>2]=e}while(0);La=b+16|0;Qa=b+23|0;j=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(j|0)|0;E=e+24|0;k=c[E>>2]|0;n=d[k+2>>0]<<8|d[k+3>>0];if((n|0)<(m|0)){j=k+((G(n,j)|0)+4)|0;Oa=h;l=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(l|0,Oa|0,56)|0;L()|0;a[j>>0]=Na;Na=bw(l|0,Oa|0,48)|0;L()|0;a[j+1>>0]=Na;Na=bw(l|0,Oa|0,40)|0;L()|0;a[j+2>>0]=Na;a[j+3>>0]=Oa;Na=bw(l|0,Oa|0,24)|0;L()|0;a[j+4>>0]=Na;Na=bw(l|0,Oa|0,16)|0;L()|0;a[j+5>>0]=Na;Oa=bw(l|0,Oa|0,8)|0;L()|0;a[j+6>>0]=Oa;a[j+7>>0]=l;l=b+21|0;if(a[l>>0]|0){k=0;j=j+8|0;while(1){Oa=c[h+8+(k<<2)>>2]|0;a[j>>0]=Oa>>>24;a[j+1>>0]=Oa>>>16;a[j+2>>0]=Oa>>>8;a[j+3>>0]=Oa;k=k+1|0;if(k>>>0>=(d[l>>0]|0)>>>0)break;else j=j+4|0}}Oa=c[E>>2]|0;Na=n+1|0;a[Oa+2>>0]=Na>>>8;a[Oa+3>>0]=Na;c[e+20>>2]=1}if((n|0)!=(m|0)){j=ft(b,e,h)|0;if(j|0){b=j;Ra=Sa;return b|0}m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;if(!i){b=gt(b,l,m,j,k)|0;Ra=Sa;return b|0}else{b=ht(b,l,m,j,k)|0;Ra=Sa;return b|0}}j=b+72|0;if((c[j>>2]|0)<(i|0)?(D=e+8|0,Oa=D,!((c[Oa>>2]|0)==1&(c[Oa+4>>2]|0)==0)):0){c[j>>2]=i;m=Ea;I=m+40|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(I|0));z=c[E>>2]|0;z=d[z+2>>0]<<8|d[z+3>>0];w=z+1|0;u=z+2|0;j=u&131070;B=pb(j<<6,0)|0;do if(B){A=B+(j*48|0)|0;x=A+(j<<2)|0;v=x+(j<<2)|0;o=b+20|0;y=b+21|0;t=b+22|0;n=0;do{j=B+(n*48|0)|0;if((n|0)==(z|0)){m=j;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0))}else{Pa=c[E>>2]|0;k=G(n,d[Qa>>0]|0)|0;Na=Pa+(k+4)|0;Ga=cw(d[Na>>0]|0,0,56)|0;Oa=L()|0;Fa=cw(d[Na+1>>0]|0,0,48)|0;Oa=L()|0|Oa;Ha=cw(d[Na+2>>0]|0,0,40)|0;Oa=Oa|(L()|0);Oa=Oa|d[Na+3>>0];Ja=cw(d[Na+4>>0]|0,0,24)|0;Oa=Oa|(L()|0);Ka=cw(d[Na+5>>0]|0,0,16)|0;Oa=Oa|(L()|0);Ma=cw(d[Na+6>>0]|0,0,8)|0;Oa=Oa|(L()|0);Na=Sv(Fa|Ga|Ha|Ja|Ka|Ma|0,Oa|0,d[Na+7>>0]|0,0)|0;Oa=L()|0;c[j>>2]=Na;c[j+4>>2]=Oa;j=0;k=Pa+(k+12)|0;while(1){c[B+(n*48|0)+8+(j<<2)>>2]=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];c[B+(n*48|0)+8+((j|1)<<2)>>2]=d[k+5>>0]<<16|d[k+4>>0]<<24|d[k+6>>0]<<8|d[k+7>>0];j=j+2|0;if(j>>>0>=(d[y>>0]|0)>>>0)break;else k=k+8|0}}c[A+(n<<2)>>2]=n;m=a[o>>0]|0;l=m<<24>>24==0;if(!l){k=m&255;if(!(a[t>>0]|0)){j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +f[B+(n*48|0)+8+(Oa<<2)>>2]+ +f[B+(n*48|0)+8+((Oa|1)<<2)>>2];j=j+1|0}while(j>>>0>>0)}else{j=0;do{Oa=j<<1;Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]+ +(c[B+(n*48|0)+8+(Oa<<2)>>2]|0)+ +(c[B+(n*48|0)+8+((Oa|1)<<2)>>2]|0);j=j+1|0}while(j>>>0>>0)}}n=n+1|0}while((n|0)!=(w|0));q=m&255;if(!l){p=+(w|0)*2.0;j=0;do{Pa=Ea+(j<<3)|0;g[Pa>>3]=+g[Pa>>3]/p;j=j+1|0}while(j>>>0>>0);if(m<<24>>24){n=(a[t>>0]|0)==0;l=0;do{o=v+(l<<3)|0;g[o>>3]=0.0;m=0;s=0.0;do{k=m<<1;j=B+(l*48|0)+8+((k|1)<<2)|0;if(n){r=+f[j>>2];p=+f[B+(l*48|0)+8+(k<<2)>>2]}else{r=+(c[j>>2]|0);p=+(c[B+(l*48|0)+8+(k<<2)>>2]|0)}K=r-p-+g[Ea+(m<<3)>>3];s=s+K*K;g[o>>3]=s;m=m+1|0}while((m|0)!=(q|0));l=l+1|0}while((l|0)!=(w|0))}else Ba=210}else Ba=210;if((Ba|0)==210)gw(B+((u>>>1)*112|0)|0,0,(z<<3)+8|0)|0;jt(A,w,v,x);gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;t=e+20|0;c[t>>2]=1;u=(i|0)==0;l=0;while(1){k=d[Qa>>0]|0;m=((c[La>>2]|0)+-4|0)/(k|0)|0;if((l|0)>=(z+((m|0)/-3|0)|0)){Ba=224;break}o=c[A+(l<<2)>>2]|0;j=B+(o*48|0)|0;n=c[E>>2]|0;q=d[n+2>>0]<<8|d[n+3>>0];if((q|0)<(m|0)){k=n+((G(q,k)|0)+4)|0;Oa=j;Pa=c[Oa>>2]|0;Oa=c[Oa+4>>2]|0;Na=bw(Pa|0,Oa|0,56)|0;L()|0;a[k>>0]=Na;Na=bw(Pa|0,Oa|0,48)|0;L()|0;a[k+1>>0]=Na;Na=bw(Pa|0,Oa|0,40)|0;L()|0;a[k+2>>0]=Na;a[k+3>>0]=Oa;Na=bw(Pa|0,Oa|0,24)|0;L()|0;a[k+4>>0]=Na;Na=bw(Pa|0,Oa|0,16)|0;L()|0;a[k+5>>0]=Na;Oa=bw(Pa|0,Oa|0,8)|0;L()|0;a[k+6>>0]=Oa;a[k+7>>0]=Pa;if(a[y>>0]|0){m=0;k=k+8|0;while(1){Pa=c[B+(o*48|0)+8+(m<<2)>>2]|0;a[k>>0]=Pa>>>24;a[k+1>>0]=Pa>>>16;a[k+2>>0]=Pa>>>8;a[k+3>>0]=Pa;m=m+1|0;if(m>>>0>=(d[y>>0]|0)>>>0)break;else k=k+4|0}}Pa=c[E>>2]|0;Oa=q+1|0;a[Pa+2>>0]=Oa>>>8;a[Pa+3>>0]=Oa;c[t>>2]=1}k=j;j=c[k>>2]|0;k=c[k+4>>2]|0;Pa=h;do if((j|0)==(c[Pa>>2]|0)?(k|0)==(c[Pa+4>>2]|0):0){n=D;m=c[n>>2]|0;n=c[n+4>>2]|0;if(u){j=gt(b,j,k,m,n)|0;break}else{j=ht(b,j,k,m,n)|0;break}}else j=0;while(0);if(!j)l=l+1|0;else break}b:do if((Ba|0)==224){j=et(b,e)|0;if(!((j|0)!=0|l>>>0>z>>>0))while(1){k=B+((c[A+(l<<2)>>2]|0)*48|0)|0;j=at(b,k,i,Ia)|0;if(j|0)break;Qa=c[Ia>>2]|0;j=bt(b,Qa,k,i)|0;Qa=Us(b,Qa)|0;j=(j|0)==0?Qa:j;if((j|0)!=0|l>>>0>=z>>>0)break b;else l=l+1|0}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](B);break}else{b=Wa[c[29352>>2]&127](B)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](B);break}}else j=7;while(0);b=j;Ra=Sa;return b|0}Aa=c[E>>2]|0;Aa=d[Aa+2>>0]<<8|d[Aa+3>>0];Ca=Aa+1|0;Na=pb(Ca*52|0,0)|0;Oa=(Na|0)==0;c:do if(!Oa){n=Ca<<2;gw(Na+(Ca*48|0)|0,0,n|0)|0;o=(Aa|0)==0;if(!o){m=b+21|0;k=0;do{Ja=c[E>>2]|0;l=G(k,d[Qa>>0]|0)|0;Ba=Ja+(l+4)|0;wa=cw(d[Ba>>0]|0,0,56)|0;Ha=L()|0;va=cw(d[Ba+1>>0]|0,0,48)|0;Ha=L()|0|Ha;xa=cw(d[Ba+2>>0]|0,0,40)|0;Ha=Ha|(L()|0);Ha=Ha|d[Ba+3>>0];ya=cw(d[Ba+4>>0]|0,0,24)|0;Ha=Ha|(L()|0);za=cw(d[Ba+5>>0]|0,0,16)|0;Ha=Ha|(L()|0);j=cw(d[Ba+6>>0]|0,0,8)|0;Ha=Ha|(L()|0);Ba=Sv(va|wa|xa|ya|za|j|0,Ha|0,d[Ba+7>>0]|0,0)|0;Ha=L()|0;j=Na+(k*48|0)|0;c[j>>2]=Ba;c[j+4>>2]=Ha;j=0;l=Ja+(l+12)|0;while(1){c[Na+(k*48|0)+8+(j<<2)>>2]=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];c[Na+(k*48|0)+8+((j|1)<<2)>>2]=d[l+5>>0]<<16|d[l+4>>0]<<24|d[l+6>>0]<<8|d[l+7>>0];j=j+2|0;if(j>>>0>=(d[m>>0]|0)>>>0)break;else l=l+8|0}k=k+1|0}while((k|0)!=(Aa|0))}gw((c[E>>2]|0)+2|0,0,(c[La>>2]|0)+-2|0)|0;l=e+20|0;c[l>>2]=1;m=Na+(Aa*48|0)|0;H=h;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));Ha=e+8|0;Ja=Ha;if((c[Ja>>2]|0)==1&(c[Ja+4>>2]|0)==0){j=pb((c[La>>2]|0)+32|0,0)|0;if(j|0){gw(j|0,0,(c[La>>2]|0)+32|0)|0;c[j+24>>2]=j+32;c[j+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[j>>2]=e;c[j+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0){gw(k|0,0,(c[La>>2]|0)+32|0)|0;c[k+24>>2]=k+32;c[k+16>>2]=1;Ja=b+60|0;c[Ja>>2]=(c[Ja>>2]|0)+1;c[k>>2]=e;c[k+20>>2]=1;Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=b+28|0;e=(c[Ja>>2]|0)+1|0;c[Ja>>2]=e;c[l>>2]=1;Ja=c[E>>2]|0;a[Ja>>0]=e>>>8;a[Ja+1>>0]=e;Ja=j;e=k}else{j=c[e>>2]|0;k=pb((c[La>>2]|0)+32|0,0)|0;if(k|0?(gw(k|0,0,(c[La>>2]|0)+32|0)|0,c[k+24>>2]=k+32,c[k+16>>2]=1,Ja=b+60|0,c[Ja>>2]=(c[Ja>>2]|0)+1,c[k>>2]=j,c[k+20>>2]=1,j|0):0){Ja=j+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1}Ja=e+16|0;c[Ja>>2]=(c[Ja>>2]|0)+1;Ja=k}if((e|0)!=0&(Ja|0)!=0?(Pa=e+24|0,gw(c[Pa>>2]|0,0,c[La>>2]|0)|0,Ka=Ja+24|0,gw(c[Ka>>2]|0,0,c[La>>2]|0)|0,t=b+20|0,q=G((d[t>>0]|0)+1|0,n+4|0)|0,Da=pb(q,0)|0,(Da|0)!=0):0){m=d[t>>0]|0;m=Da+(m<<2)+((G(Ca,m)|0)<<2)|0;gw(Da|0,0,q|0)|0;j=a[t>>0]|0;if(j<<24>>24){j=j&255;if(o){l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0>>0);za=j}else{l=0;do{k=Da+(j<<2)+((G(l,Ca)|0)<<2)|0;c[Da+(l<<2)>>2]=k;c[k>>2]=0;j=1;do{c[k+(j<<2)>>2]=j;j=j+1|0}while((j|0)!=(Ca|0));it(b,k,Ca,l,Na,m);l=l+1|0;k=a[t>>0]|0;j=k&255}while(l>>>0>>0);za=j}if(k<<24>>24){z=Aa>>>0>1;A=b+21|0;B=b+22|0;D=Ea+12|0;E=Ea+8|0;M=Ea+44|0;N=Ea+40|0;O=Ea+36|0;P=Ea+32|0;Q=Ea+28|0;R=Ea+24|0;S=Ea+20|0;T=Ea+16|0;U=Ea+12|0;V=Ea+8|0;W=Ea+44|0;X=Ea+40|0;Y=Ea+36|0;Z=Ea+32|0;_=Ea+28|0;$=Ea+24|0;aa=Ea+20|0;ba=Ea+16|0;ca=Ia+12|0;da=Ia+8|0;ea=Ia+44|0;fa=Ia+40|0;ga=Ia+36|0;ha=Ia+32|0;ia=Ia+28|0;ja=Ia+24|0;ka=Ia+20|0;la=Ia+16|0;ma=Ia+12|0;na=Ia+8|0;oa=Ia+44|0;pa=Ia+40|0;qa=Ia+36|0;ra=Ia+32|0;sa=Ia+28|0;ta=Ia+24|0;ua=Ia+20|0;va=Ia+16|0;wa=(((c[La>>2]|0)+-4|0)/(d[Qa>>0]|0)|0|0)/3|0;xa=Ca-wa|0;ya=(wa|0)>(xa|0);j=0;w=0;K=0.0;y=0;while(1){if(ya){l=0;p=0.0}else{x=Da+(y<<2)|0;v=wa;l=0;J=0.0;r=0.0;p=0.0;while(1){m=Ea;H=Na+((c[c[x>>2]>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ia;H=Na+((c[(c[x>>2]|0)+(Aa<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));if(z){o=a[B>>0]|0;u=a[A>>0]|0;t=u&255;if(!(o<<24>>24)){n=1;do{o=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;F=+f[I>>2];C=+f[Na+(o*48|0)+8+(m<<2)>>2];f[I>>2]=F>2];F=+f[Na+(o*48|0)+8+(I<<2)>>2];f[Ba>>2]=C>F?C:F;m=m+2|0}while(m>>>0>>0)}n=n+1|0}while((n|0)!=(Aa|0));n=t;o=u;Ba=66}else{n=1;do{q=c[(c[x>>2]|0)+(n<<2)>>2]|0;if((n|0)<(v|0)){m=0;do{I=Ea+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ea+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0>>0)}else{m=0;do{I=Ia+8+(m<<2)|0;H=c[I>>2]|0;Ba=c[Na+(q*48|0)+8+(m<<2)>>2]|0;c[I>>2]=(H|0)<(Ba|0)?H:Ba;I=m|1;Ba=Ia+8+(I<<2)|0;H=c[Ba>>2]|0;I=c[Na+(q*48|0)+8+(I<<2)>>2]|0;c[Ba>>2]=(H|0)>(I|0)?H:I;m=m+2|0}while(m>>>0>>0)}n=n+1|0}while((n|0)!=(Aa|0));m=o;n=t;o=u;Ba=64}}else{o=a[A>>0]|0;m=a[B>>0]|0;n=o&255;Ba=64}do if((Ba|0)==64){Ba=0;q=m<<24>>24==0;if(q){Ba=66;break}m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+(c[Ea+8+(I+-1<<2)>>2]|0)-+(c[Ea+8+(m<<2)>>2]|0))}while((I|0)>3)}while(0);if((Ba|0)==66){Ba=0;m=n;s=0.0;do{I=m;m=m+-2|0;s=s+(+f[Ea+8+(I+-1<<2)>>2]-+f[Ea+8+(m<<2)>>2])}while((I|0)>3);q=1}s=p+s;if(q){m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+f[Ia+8+(I+-1<<2)>>2]-+f[Ia+8+(m<<2)>>2])}while((I|0)>3)}else{m=n;p=0.0;do{I=m;m=m+-2|0;p=p+(+(c[Ia+8+(I+-1<<2)>>2]|0)-+(c[Ia+8+(m<<2)>>2]|0))}while((I|0)>3)}p=s+p;d:do if(o<<24>>24)if(q){s=1.0;m=0;do{Ta=+f[Ea+8+(m<<2)>>2];F=+f[Ia+8+(m<<2)>>2];F=Ta>F?Ta:F;I=m|1;Ta=+f[Ea+8+(I<<2)>>2];C=+f[Ia+8+(I<<2)>>2];C=Ta>>0>>0)}else{s=1.0;m=0;do{H=Ea+8+(m<<2)|0;I=Ia+8+(m<<2)|0;Ta=+(c[((c[H>>2]|0)>(c[I>>2]|0)?H:I)>>2]|0);I=m|1;C=+(c[Ea+8+(I<<2)>>2]|0);F=+(c[Ia+8+(I<<2)>>2]|0);F=C>>0>>0)}else s=1.0;while(0);F=s+0.0;if(q){switch(k<<24>>24){case 5:{s=+f[M>>2]-+f[N>>2];Ba=85;break}case 4:{s=1.0;Ba=85;break}case 3:{s=1.0;Ba=86;break}case 2:{s=1.0;Ba=87;break}default:s=1.0}if((Ba|0)==85){s=s*(+f[O>>2]-+f[P>>2]);Ba=86}if((Ba|0)==86){s=s*(+f[Q>>2]-+f[R>>2]);Ba=87}if((Ba|0)==87){Ba=0;s=s*(+f[S>>2]-+f[T>>2])}s=s*(+f[D>>2]-+f[E>>2]);switch(k<<24>>24){case 5:{C=+f[ea>>2]-+f[fa>>2];Ba=95;break}case 4:{C=1.0;Ba=95;break}case 3:{C=1.0;Ba=96;break}case 2:{C=1.0;Ba=97;break}default:C=1.0}if((Ba|0)==95){C=C*(+f[ga>>2]-+f[ha>>2]);Ba=96}if((Ba|0)==96){C=C*(+f[ia>>2]-+f[ja>>2]);Ba=97}if((Ba|0)==97)C=C*(+f[ka>>2]-+f[la>>2]);C=C*(+f[ca>>2]-+f[da>>2])}else{switch(k<<24>>24){case 5:{I=c[W>>2]|0;Ba=c[X>>2]|0;s=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=90;break}case 4:{s=1.0;Ba=90;break}case 3:{s=1.0;Ba=91;break}case 2:{s=1.0;Ba=92;break}default:s=1.0}if((Ba|0)==90){H=c[Y>>2]|0;I=c[Z>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=91}if((Ba|0)==91){H=c[_>>2]|0;I=c[$>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));Ba=92}if((Ba|0)==92){Ba=0;H=c[aa>>2]|0;I=c[ba>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0))}H=c[U>>2]|0;I=c[V>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;s=s*(+(I>>>0)+4294967296.0*+(L()|0));switch(k<<24>>24){case 5:{I=c[oa>>2]|0;Ba=c[pa>>2]|0;C=+((Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0)>>>0)+4294967296.0*+(L()|0);Ba=101;break}case 4:{C=1.0;Ba=101;break}case 3:{C=1.0;Ba=102;break}case 2:{C=1.0;Ba=103;break}default:C=1.0}if((Ba|0)==101){H=c[qa>>2]|0;I=c[ra>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=102}if((Ba|0)==102){H=c[sa>>2]|0;I=c[ta>>2]|0;I=Tv(H|0,((H|0)<0)<<31>>31|0,I|0,((I|0)<0)<<31>>31|0)|0;C=C*(+(I>>>0)+4294967296.0*+(L()|0));Ba=103}if((Ba|0)==103){I=c[ua>>2]|0;Ba=c[va>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}I=c[ma>>2]|0;Ba=c[na>>2]|0;Ba=Tv(I|0,((I|0)<0)<<31>>31|0,Ba|0,((Ba|0)<0)<<31>>31|0)|0;C=C*(+(Ba>>>0)+4294967296.0*+(L()|0))}s=s+C;if(!((v|0)==(wa|0)|F>2]|0;k=c[j>>2]|0;m=Fa;H=Na+(k*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));m=Ga;H=Na+((c[j+(w<<2)>>2]|0)*48|0)|0;I=m+48|0;do{c[m>>2]=c[H>>2];m=m+4|0;H=H+4|0}while((m|0)<(I|0));x=b+21|0;u=b+22|0;t=0;while(1){q=(t|0)<(w|0);m=q?e:Ja;q=q?Fa:Ga;j=d[Qa>>0]|0;n=m+24|0;l=c[n>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if((o|0)<(((c[La>>2]|0)+-4|0)/(j|0)|0|0)){j=l+((G(o,j)|0)+4)|0;Ea=Na+(k*48|0)|0;Ia=c[Ea>>2]|0;Ea=c[Ea+4>>2]|0;Ba=bw(Ia|0,Ea|0,56)|0;L()|0;a[j>>0]=Ba;Ba=bw(Ia|0,Ea|0,48)|0;L()|0;a[j+1>>0]=Ba;Ba=bw(Ia|0,Ea|0,40)|0;L()|0;a[j+2>>0]=Ba;a[j+3>>0]=Ea;Ba=bw(Ia|0,Ea|0,24)|0;L()|0;a[j+4>>0]=Ba;Ba=bw(Ia|0,Ea|0,16)|0;L()|0;a[j+5>>0]=Ba;Ea=bw(Ia|0,Ea|0,8)|0;L()|0;a[j+6>>0]=Ea;a[j+7>>0]=Ia;if(a[x>>0]|0){l=0;j=j+8|0;while(1){Ia=c[Na+(k*48|0)+8+(l<<2)>>2]|0;a[j>>0]=Ia>>>24;a[j+1>>0]=Ia>>>16;a[j+2>>0]=Ia>>>8;a[j+3>>0]=Ia;l=l+1|0;if(l>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}Ia=c[n>>2]|0;Ea=o+1|0;a[Ia+2>>0]=Ea>>>8;a[Ia+3>>0]=Ea;c[m+20>>2]=1}l=d[x>>0]|0;if(!(a[u>>0]|0)){j=0;do{Ea=q+8+(j<<2)|0;Ta=+f[Ea>>2];K=+f[Na+(k*48|0)+8+(j<<2)>>2];f[Ea>>2]=Ta>2];Ta=+f[Na+(k*48|0)+8+(Ea<<2)>>2];f[Ia>>2]=K>Ta?K:Ta;j=j+2|0}while(j>>>0>>0)}else{j=0;do{Ea=q+8+(j<<2)|0;Ba=c[Ea>>2]|0;Ia=c[Na+(k*48|0)+8+(j<<2)>>2]|0;c[Ea>>2]=(Ba|0)<(Ia|0)?Ba:Ia;Ea=j|1;Ia=q+8+(Ea<<2)|0;Ba=c[Ia>>2]|0;Ea=c[Na+(k*48|0)+8+(Ea<<2)>>2]|0;c[Ia>>2]=(Ba|0)>(Ea|0)?Ba:Ea;j=j+2|0}while(j>>>0>>0)}j=t+1|0;if((j|0)==(Ca|0))break;t=j;k=c[(c[v>>2]|0)+(j<<2)>>2]|0}if(!(c[7324]|0))ab[c[29344>>2]&127](Da);else{La=Wa[c[29352>>2]&127](Da)|0;c[14978]=(c[14978]|0)-La;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Da)}j=Vs(b,Ja)|0;if(!j){u=e+8|0;k=u;j=c[k>>2]|0;k=c[k+4>>2]|0;if((j|0)==0&(k|0)==0){j=Vs(b,e)|0;if(j|0){l=e;k=Ja;break}k=u;j=c[k>>2]|0;k=c[k+4>>2]|0}t=Ja+8|0;Ia=t;q=c[Ia+4>>2]|0;La=Ga;c[La>>2]=c[Ia>>2];c[La+4>>2]=q;La=Fa;c[La>>2]=j;c[La+4>>2]=k;La=Ha;q=c[e>>2]|0;if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){k=i+1|0;j=bt(b,q,Fa,k)|0;if(!j)j=k;else{l=e;k=Ja;break}}else{e:do if(!q){m=-1;n=d[Qa>>0]|0;l=c[6]|0}else{l=c[q+24>>2]|0;o=d[l+2>>0]<<8|d[l+3>>0];if(!o){l=e;k=Ja;j=267;break c}n=d[Qa>>0]|0;m=0;while(1){La=l+((G(m,n)|0)+4)|0;Aa=cw(d[La>>0]|0,0,56)|0;Ia=L()|0;za=cw(d[La+1>>0]|0,0,48)|0;Ia=L()|0|Ia;Ba=cw(d[La+2>>0]|0,0,40)|0;Ia=Ia|(L()|0);Ia=Ia|d[La+3>>0];Ca=cw(d[La+4>>0]|0,0,24)|0;Ia=Ia|(L()|0);Da=cw(d[La+5>>0]|0,0,16)|0;Ia=Ia|(L()|0);Ea=cw(d[La+6>>0]|0,0,8)|0;Ia=Ia|(L()|0);La=Sv(za|Aa|Ba|Ca|Da|Ea|0,Ia|0,d[La+7>>0]|0,0)|0;if((La|0)==(j|0)&(L()|0)==(k|0))break e;m=m+1|0;if(m>>>0>=o>>>0){l=e;k=Ja;j=267;break c}}}while(0);l=l+((G(m,n)|0)+4)|0;La=bw(j|0,k|0,56)|0;L()|0;a[l>>0]=La;La=bw(j|0,k|0,48)|0;L()|0;a[l+1>>0]=La;La=bw(j|0,k|0,40)|0;L()|0;a[l+2>>0]=La;a[l+3>>0]=k;La=bw(j|0,k|0,24)|0;L()|0;a[l+4>>0]=La;La=bw(j|0,k|0,16)|0;L()|0;a[l+5>>0]=La;La=bw(j|0,k|0,8)|0;L()|0;a[l+6>>0]=La;a[l+7>>0]=j;if(a[x>>0]|0){k=0;j=l+8|0;while(1){La=c[Fa+8+(k<<2)>>2]|0;a[j>>0]=La>>>24;a[j+1>>0]=La>>>16;a[j+2>>0]=La>>>8;a[j+3>>0]=La;k=k+1|0;if(k>>>0>=(d[x>>0]|0)>>>0)break;else j=j+4|0}}c[q+20>>2]=1;j=ft(b,q,Fa)|0;if(j|0){l=e;k=Ja;break}j=i+1|0}j=bt(b,c[Ja>>2]|0,Ga,j)|0;if(!j){k=c[Ka>>2]|0;f:do if(!(d[k+2>>0]<<8|d[k+3>>0]))j=0;else{q=(i|0)==0?80:81;o=Ja+16|0;if(!Ma){m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break f;else m=j}}m=0;n=0;while(1){k=k+((G(n,d[Qa>>0]|0)|0)+4)|0;Fa=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ea=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ga=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];Ia=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);La=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ea|Fa|Ga|Ia|La|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;g:do if(j|0){while(1){La=j+8|0;if((c[La>>2]|0)==(k|0)?(c[La+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break g}Us(b,c[j>>2]|0)|0;c[o>>2]=(c[o>>2]|0)+1;c[j>>2]=Ja}while(0);j=t;j=_a[q&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}j=h;j=((k|0)==(c[j>>2]|0)?(l|0)==(c[j+4>>2]|0):0)?1:m;n=n+1|0;k=c[Ka>>2]|0;if(n>>>0>=(d[k+2>>0]<<8|d[k+3>>0])>>>0)break;else m=j}}while(0);La=Ha;h:do if((c[La>>2]|0)==1&(c[La+4>>2]|0)==0){j=c[Pa>>2]|0;if(d[j+2>>0]<<8|d[j+3>>0]|0){o=(i|0)==0?80:81;n=e+16|0;if(!Ma){k=0;while(1){h=j+((G(k,d[Qa>>0]|0)|0)+4)|0;Ia=cw(d[h>>0]|0,0,56)|0;i=L()|0;Ha=cw(d[h+1>>0]|0,0,48)|0;i=L()|0|i;Ka=cw(d[h+2>>0]|0,0,40)|0;i=i|(L()|0);i=i|d[h+3>>0];La=cw(d[h+4>>0]|0,0,24)|0;i=i|(L()|0);Ma=cw(d[h+5>>0]|0,0,16)|0;i=i|(L()|0);j=cw(d[h+6>>0]|0,0,8)|0;i=i|(L()|0);h=Sv(Ha|Ia|Ka|La|Ma|j|0,i|0,d[h+7>>0]|0,0)|0;i=L()|0;j=u;j=_a[o&127](b,h,i,c[j>>2]|0,c[j+4>>2]|0)|0;k=k+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0;if(k>>>0>=(d[j+2>>0]<<8|d[j+3>>0])>>>0)break h}}m=0;do{k=j+((G(m,d[Qa>>0]|0)|0)+4)|0;La=cw(d[k>>0]|0,0,56)|0;l=L()|0;Ka=cw(d[k+1>>0]|0,0,48)|0;l=L()|0|l;Ma=cw(d[k+2>>0]|0,0,40)|0;l=l|(L()|0);l=l|d[k+3>>0];h=cw(d[k+4>>0]|0,0,24)|0;l=l|(L()|0);i=cw(d[k+5>>0]|0,0,16)|0;l=l|(L()|0);j=cw(d[k+6>>0]|0,0,8)|0;l=l|(L()|0);k=Sv(Ka|La|Ma|h|i|j|0,l|0,d[k+7>>0]|0,0)|0;l=L()|0;j=c[b+116+(((k>>>0)%97|0)<<2)>>2]|0;i:do if(j|0){while(1){i=j+8|0;if((c[i>>2]|0)==(k|0)?(c[i+4>>2]|0)==(l|0):0)break;j=c[j+28>>2]|0;if(!j)break i}Us(b,c[j>>2]|0)|0;c[n>>2]=(c[n>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[o&127](b,k,l,c[j>>2]|0,c[j+4>>2]|0)|0;m=m+1|0;if(j|0){l=e;k=Ja;break c}j=c[Pa>>2]|0}while(m>>>0<(d[j+2>>0]<<8|d[j+3>>0])>>>0)}}else if(!j){m=h;l=c[m>>2]|0;m=c[m+4>>2]|0;k=(i|0)==0?80:81;j:do if(Ma){j=c[b+116+(((l>>>0)%97|0)<<2)>>2]|0;if(!j)break;while(1){i=j+8|0;if((c[i>>2]|0)==(l|0)?(c[i+4>>2]|0)==(m|0):0)break;j=c[j+28>>2]|0;if(!j)break j}Us(b,c[j>>2]|0)|0;i=e+16|0;c[i>>2]=(c[i>>2]|0)+1;c[j>>2]=e}while(0);j=u;j=_a[k&127](b,l,m,c[j>>2]|0,c[j+4>>2]|0)|0;if(j|0){l=e;k=Ja;break c}}while(0);j=Us(b,Ja)|0;if(!j){l=0;k=0;j=Us(b,e)|0}else{l=e;k=0}}else{l=e;k=Ja}}else{l=e;k=Ja}}else{l=e;k=Ja;j=7}}else{l=0;k=0;j=7}while(0);Us(b,k)|0;Us(b,l)|0;do if(!Oa)if(!(c[7324]|0)){ab[c[29344>>2]&127](Na);break}else{b=Wa[c[29352>>2]&127](Na)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Na);break}while(0);b=j;Ra=Sa;return b|0}function ct(e,f,g,h){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;n=e+100|0;a:do if(f|0?(j=f+8|0,i=c[j>>2]|0,j=c[j+4>>2]|0,!((i|0)==1&(j|0)==0)):0){m=f;while(1){if(c[m>>2]|0)break a;k=c[n>>2]|0;do if(!(Vc(k,1)|0)){k=c[k+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){c[k>>2]=i;c[k+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);b:do if((Gc(c[n>>2]|0)|0)==100){j=Oc(c[n>>2]|0,0)|0;k=L()|0;i=f;do{l=i+8|0;if((c[l>>2]|0)==(j|0)?(c[l+4>>2]|0)==(k|0):0){i=0;break b}i=c[i>>2]|0}while((i|0)!=0);i=Xs(e,j,k,0,m)|0}else i=0;while(0);j=c[n>>2]|0;if(j|0){l=c[j>>2]|0;k=j+136|0;o=c[k+4>>2]|0;if((o|0)>0|(o|0)==0&(c[k>>2]|0)>>>0>0)hc(l,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;o=j+64|0;c[o>>2]=0;c[o+4>>2]=0;if((k|0)==3082|(a[l+81>>0]|0)!=0){j=19;break}j=c[l+68>>2]&k;if(j|0){i=j;j=27;break}}if(i|0){j=27;break}m=c[m>>2]|0;if(!m){i=267;j=27;break}j=m+8|0;i=c[j>>2]|0;j=c[j+4>>2]|0;if((i|0)==1&(j|0)==0)break a}if((j|0)==19){og(l);o=7;return o|0}else if((j|0)==27)return i|0}while(0);i=e+23|0;j=f+24|0;n=c[j>>2]|0;o=d[i>>0]|0;m=n+((G(o,g)|0)+4)|0;fw(m|0,m+o|0,G((d[n+2>>0]<<8|d[n+3>>0])+~g|0,o)|0)|0;o=c[j>>2]|0;n=o+2|0;o=o+3|0;g=(d[n>>0]<<8|d[o>>0])+-1|0;a[n>>0]=g>>>8;a[o>>0]=g;c[f+20>>2]=1;if(!(c[f>>2]|0)){o=0;return o|0}o=c[j>>2]|0;if((d[o+2>>0]<<8|d[o+3>>0]|0)<((((c[e+16>>2]|0)+-4|0)/(d[i>>0]|0)|0|0)/3|0|0)){o=dt(e,f,h)|0;return o|0}else{o=et(e,f)|0;return o|0}return 0}function dt(e,f,g){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;n=c[f>>2]|0;a:do if(!n)h=-1;else{j=f+8|0;m=c[j>>2]|0;j=c[j+4>>2]|0;i=c[n+24>>2]|0;k=d[i+2>>0]<<8|d[i+3>>0];if(k|0){l=d[e+23>>0]|0;h=0;do{o=i+((G(h,l)|0)+4)|0;u=cw(d[o>>0]|0,0,56)|0;p=L()|0;v=cw(d[o+1>>0]|0,0,48)|0;p=L()|0|p;t=cw(d[o+2>>0]|0,0,40)|0;p=p|(L()|0);p=p|d[o+3>>0];s=cw(d[o+4>>0]|0,0,24)|0;p=p|(L()|0);r=cw(d[o+5>>0]|0,0,16)|0;p=p|(L()|0);q=cw(d[o+6>>0]|0,0,8)|0;p=p|(L()|0);o=Sv(v|u|t|s|r|q|0,p|0,d[o+7>>0]|0,0)|0;if((o|0)==(m|0)&(L()|0)==(j|0))break a;h=h+1|0}while(h>>>0>>0)}Us(e,0)|0;v=267;return v|0}while(0);c[f>>2]=0;i=ct(e,n,h,g+1|0)|0;h=Us(e,n)|0;if(i|0){v=i;return v|0}if(h|0){v=h;return v|0}j=e+84|0;h=c[j>>2]|0;m=f+8|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);j=e+108|0;h=c[j>>2]|0;l=m;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(Vc(h,1)|0)){h=c[h+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){v=h;c[v>>2]=k;c[v+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);Gc(c[j>>2]|0)|0;h=c[j>>2]|0;do if(h|0){i=c[h>>2]|0;v=h+136|0;u=c[v+4>>2]|0;if((u|0)>0|(u|0)==0&(c[v>>2]|0)>>>0>0)hc(i,h);j=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;v=h+64|0;c[v>>2]=0;c[v+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);v=7;return v|0}else{h=c[i+68>>2]&j;if(!h)break;return h|0}}while(0);v=m;h=c[v>>2]|0;if((h|0)==0&(c[v+4>>2]|0)==0)h=f+28|0;else{h=e+116+(((h>>>0)%97|0)<<2)|0;while(1){i=c[h>>2]|0;if((i|0)==(f|0))break;else h=i+28|0}v=f+28|0;c[h>>2]=c[v>>2];c[v>>2]=0;h=v}v=m;c[v>>2]=g;c[v+4>>2]=((g|0)<0)<<31>>31;v=e+68|0;c[h>>2]=c[v>>2];u=f+16|0;c[u>>2]=(c[u>>2]|0)+1;c[v>>2]=f;v=0;return v|0}function et(b,e){b=b|0;e=e|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.0,C=0.0;t=Ra;Ra=Ra+96|0;q=t+48|0;n=t;r=c[e>>2]|0;if(!r){s=0;Ra=t;return s|0}o=c[e+24>>2]|0;l=d[o+2>>0]|0;k=d[o+3>>0]|0;p=a[b+23>>0]|0;m=cw(d[o+4>>0]|0,0,56)|0;j=L()|0;u=cw(d[o+5>>0]|0,0,48)|0;j=L()|0|j;h=cw(d[o+6>>0]|0,0,40)|0;j=j|(L()|0);j=j|d[o+7>>0];g=cw(d[o+8>>0]|0,0,24)|0;j=j|(L()|0);s=cw(d[o+9>>0]|0,0,16)|0;j=j|(L()|0);i=cw(d[o+10>>0]|0,0,8)|0;j=j|(L()|0);j=Sv(u|m|h|g|s|i|0,j|0,d[o+11>>0]|0,0)|0;i=L()|0;s=q;c[s>>2]=j;c[s+4>>2]=i;s=b+21|0;i=a[s>>0]|0;j=i&255;g=0;h=o+12|0;while(1){c[q+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[q+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=j>>>0)break;else h=h+8|0}m=i&255;i=l<<8|k;if(i>>>0>1){j=p&255;k=b+22|0;l=1;do{h=G(l,j)|0;v=o+(h+4)|0;z=cw(d[v>>0]|0,0,56)|0;u=L()|0;A=cw(d[v+1>>0]|0,0,48)|0;u=L()|0|u;y=cw(d[v+2>>0]|0,0,40)|0;u=u|(L()|0);u=u|d[v+3>>0];x=cw(d[v+4>>0]|0,0,24)|0;u=u|(L()|0);w=cw(d[v+5>>0]|0,0,16)|0;u=u|(L()|0);g=cw(d[v+6>>0]|0,0,8)|0;u=u|(L()|0);v=Sv(A|z|y|x|w|g|0,u|0,d[v+7>>0]|0,0)|0;u=L()|0;g=n;c[g>>2]=v;c[g+4>>2]=u;g=0;h=o+(h+12)|0;while(1){c[n+8+(g<<2)>>2]=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];c[n+8+((g|1)<<2)>>2]=d[h+5>>0]<<16|d[h+4>>0]<<24|d[h+6>>0]<<8|d[h+7>>0];g=g+2|0;if(g>>>0>=m>>>0)break;else h=h+8|0}if(!(a[k>>0]|0)){g=0;do{z=q+8+(g<<2)|0;B=+f[z>>2];C=+f[n+8+(g<<2)>>2];f[z>>2]=B>2];B=+f[n+8+(z<<2)>>2];f[A>>2]=C>B?C:B;g=g+2|0}while(g>>>0>>0)}else{g=0;do{z=q+8+(g<<2)|0;y=c[z>>2]|0;A=c[n+8+(g<<2)>>2]|0;c[z>>2]=(y|0)<(A|0)?y:A;z=g|1;A=q+8+(z<<2)|0;y=c[A>>2]|0;z=c[n+8+(z<<2)>>2]|0;c[A>>2]=(y|0)>(z|0)?y:z;g=g+2|0}while(g>>>0>>0)}l=l+1|0}while((l|0)!=(i|0))}k=e+8|0;j=c[k>>2]|0;k=c[k+4>>2]|0;i=q;c[i>>2]=j;c[i+4>>2]=k;i=c[r+24>>2]|0;l=d[i+2>>0]<<8|d[i+3>>0];a:do if(!l)g=267;else{h=p&255;g=0;while(1){m=i+((G(g,h)|0)+4)|0;v=cw(d[m>>0]|0,0,56)|0;A=L()|0;u=cw(d[m+1>>0]|0,0,48)|0;A=L()|0|A;w=cw(d[m+2>>0]|0,0,40)|0;A=A|(L()|0);A=A|d[m+3>>0];x=cw(d[m+4>>0]|0,0,24)|0;A=A|(L()|0);y=cw(d[m+5>>0]|0,0,16)|0;A=A|(L()|0);z=cw(d[m+6>>0]|0,0,8)|0;A=A|(L()|0);A=Sv(u|v|w|x|y|z|0,A|0,d[m+7>>0]|0,0)|0;if((A|0)==(j|0)&(L()|0)==(k|0))break;g=g+1|0;if(g>>>0>=l>>>0){g=267;break a}}A=bw(j|0,k|0,56)|0;L()|0;a[m>>0]=A;A=bw(j|0,k|0,48)|0;L()|0;a[m+1>>0]=A;A=bw(j|0,k|0,40)|0;L()|0;a[m+2>>0]=A;a[m+3>>0]=k;A=bw(j|0,k|0,24)|0;L()|0;a[m+4>>0]=A;A=bw(j|0,k|0,16)|0;L()|0;a[m+5>>0]=A;A=bw(j|0,k|0,8)|0;L()|0;a[m+6>>0]=A;a[m+7>>0]=j;if(a[s>>0]|0){h=0;g=m+8|0;while(1){A=c[q+8+(h<<2)>>2]|0;a[g>>0]=A>>>24;a[g+1>>0]=A>>>16;a[g+2>>0]=A>>>8;a[g+3>>0]=A;h=h+1|0;if(h>>>0>=(d[s>>0]|0)>>>0)break;else g=g+4|0}}c[r+20>>2]=1;g=et(b,r)|0}while(0);A=g;Ra=t;return A|0}function ft(b,e,g){b=b|0;e=e|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,x=0,y=0,z=0,A=0,B=0,C=0,D=0.0,E=0.0;C=Ra;Ra=Ra+48|0;z=C;h=c[e>>2]|0;if(!h){B=0;Ra=C;return B|0}y=b+23|0;A=b+21|0;x=b+22|0;w=0;b=e;a:while(1){if(w>>>0>999)break;w=w+1|0;u=b+8|0;t=c[u>>2]|0;u=c[u+4>>2]|0;j=c[h+24>>2]|0;e=d[j+2>>0]<<8|d[j+3>>0];if(!e)break;i=d[y>>0]|0;b=0;while(1){k=G(b,i)|0;v=j+(k+4)|0;n=cw(d[v>>0]|0,0,56)|0;s=L()|0;m=cw(d[v+1>>0]|0,0,48)|0;s=L()|0|s;o=cw(d[v+2>>0]|0,0,40)|0;s=s|(L()|0);s=s|d[v+3>>0];p=cw(d[v+4>>0]|0,0,24)|0;s=s|(L()|0);q=cw(d[v+5>>0]|0,0,16)|0;s=s|(L()|0);r=cw(d[v+6>>0]|0,0,8)|0;s=s|(L()|0);s=Sv(m|n|o|p|q|r|0,s|0,d[v+7>>0]|0,0)|0;if((s|0)==(t|0)&(L()|0)==(u|0))break;b=b+1|0;if(b>>>0>=e>>>0)break a}l=v+1|0;m=v+2|0;n=v+3|0;o=v+4|0;p=v+5|0;q=v+6|0;r=v+7|0;i=z;c[i>>2]=t;c[i+4>>2]=u;i=a[A>>0]|0;s=i&255;e=0;b=j+(k+12)|0;while(1){c[z+8+(e<<2)>>2]=d[b+1>>0]<<16|d[b>>0]<<24|d[b+2>>0]<<8|d[b+3>>0];c[z+8+((e|1)<<2)>>2]=d[b+5>>0]<<16|d[b+4>>0]<<24|d[b+6>>0]<<8|d[b+7>>0];e=e+2|0;if(e>>>0>=s>>>0)break;else b=b+8|0}b:do if(i<<24>>24){j=a[x>>0]|0;c:do if(j<<24>>24==1){b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if((c[i>>2]|0)<(c[e>>2]|0))break c;if((c[i+4>>2]|0)>(c[e+4>>2]|0))break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}else{b=0;while(1){e=z+8+(b<<2)|0;i=g+8+(b<<2)|0;if(+f[i>>2]<+f[e>>2])break c;if(+f[i+4>>2]>+f[e+4>>2])break c;b=b+2|0;if(b>>>0>=s>>>0)break b}}while(0);if(!(j<<24>>24)){b=0;do{j=z+8+(b<<2)|0;D=+f[j>>2];E=+f[g+8+(b<<2)>>2];f[j>>2]=D>2];D=+f[g+8+(j<<2)>>2];f[k>>2]=E>D?E:D;b=b+2|0}while(b>>>0>>0)}else{b=0;do{j=z+8+(b<<2)|0;i=c[j>>2]|0;k=c[g+8+(b<<2)>>2]|0;c[j>>2]=(i|0)<(k|0)?i:k;j=b|1;k=z+8+(j<<2)|0;i=c[k>>2]|0;j=c[g+8+(j<<2)>>2]|0;c[k>>2]=(i|0)>(j|0)?i:j;b=b+2|0}while(b>>>0>>0)}s=bw(t|0,u|0,56)|0;L()|0;a[v>>0]=s;s=bw(t|0,u|0,48)|0;L()|0;a[l>>0]=s;s=bw(t|0,u|0,40)|0;L()|0;a[m>>0]=s;a[n>>0]=u;s=bw(t|0,u|0,24)|0;L()|0;a[o>>0]=s;s=bw(t|0,u|0,16)|0;L()|0;a[p>>0]=s;u=bw(t|0,u|0,8)|0;L()|0;a[q>>0]=u;a[r>>0]=t;if(a[A>>0]|0){e=0;b=v+8|0;while(1){v=c[z+8+(e<<2)>>2]|0;a[b>>0]=v>>>24;a[b+1>>0]=v>>>16;a[b+2>>0]=v>>>8;a[b+3>>0]=v;e=e+1|0;if(e>>>0>=(d[A>>0]|0)>>>0)break;else b=b+4|0}}c[h+20>>2]=1}while(0);b=c[h>>2]|0;if(!b){b=0;B=31;break}else{v=h;h=b;b=v}}if((B|0)==31){Ra=C;return b|0}B=267;Ra=C;return B|0}function gt(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+92|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function ht(d,e,f,g,h){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;var i=0,j=0;j=d+104|0;d=c[j>>2]|0;do if(!(Vc(d,1)|0)){d=c[d+100>>2]|0;i=d+8|0;if(!(b[i>>1]&9216)){c[d>>2]=e;c[d+4>>2]=f;b[i>>1]=4;break}else{Pg(d,e,f);break}}while(0);d=c[j>>2]|0;do if(!(Vc(d,2)|0)){i=c[d+100>>2]|0;d=i+40|0;i=i+48|0;if(!(b[i>>1]&9216)){f=d;c[f>>2]=g;c[f+4>>2]=h;b[i>>1]=4;break}else{Pg(d,g,h);break}}while(0);Gc(c[j>>2]|0)|0;d=c[j>>2]|0;if(!d){h=0;return h|0}i=c[d>>2]|0;h=d+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,d);e=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((e|0)==3082|(a[i+81>>0]|0)!=0){og(i);h=7;return h|0}else{h=c[i+68>>2]&e;return h|0}return 0}function it(b,d,e,g,h,i){b=b|0;d=d|0;e=e|0;g=g|0;h=h|0;i=i|0;var j=0.0,k=0.0,l=0.0,m=0.0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0;if((e|0)<=1)return;t=e>>>1;r=e-t|0;s=d+(t<<2)|0;it(b,d,t,g,h,i);it(b,s,r,g,h,i);ew(i|0,d|0,t<<2|0)|0;if(!((r|0)>0|(t|0)!=0))return;p=g<<1;q=p|1;o=(a[b+22>>0]|0)==0;e=0;g=0;do{n=c[i+(g<<2)>>2]|0;b=h+(n*48|0)+8+(p<<2)|0;if(o){v=c[s+(e<<2)>>2]|0;j=+f[b>>2];k=+f[h+(v*48|0)+8+(p<<2)>>2];l=+f[h+(n*48|0)+8+(q<<2)>>2];m=+f[h+(v*48|0)+8+(q<<2)>>2];b=v}else{v=c[s+(e<<2)>>2]|0;j=+(c[b>>2]|0);k=+(c[h+(v*48|0)+8+(p<<2)>>2]|0);l=+(c[h+(n*48|0)+8+(q<<2)>>2]|0);m=+(c[h+(v*48|0)+8+(q<<2)>>2]|0);b=v}do if((g|0)==(t|0))u=11;else{if(!((e|0)==(r|0)|j>2]=n;g=g+1|0}while(0);if((u|0)==11){u=0;c[d+(g+e<<2)>>2]=b;e=e+1|0}}while((e|0)<(r|0)|(g|0)<(t|0));return}function jt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0;if((b|0)<=1)return;m=b>>>1;k=b-m|0;l=a+(m<<2)|0;jt(a,m,d,e);jt(l,k,d,e);ew(e|0,a|0,m<<2|0)|0;if(!((k|0)>0|(m|0)!=0))return;b=0;f=0;do do if((f|0)!=(m|0)){h=c[e+(f<<2)>>2]|0;if((b|0)==(k|0)){c[a+(f+k<<2)>>2]=h;f=f+1|0;b=k;break}i=c[l+(b<<2)>>2]|0;j=a+(f+b<<2)|0;if(+g[d+(h<<3)>>3]<+g[d+(i<<3)>>3]){c[j>>2]=h;f=f+1|0;break}else{c[j>>2]=i;b=b+1|0;break}}else{c[a+(m+b<<2)>>2]=c[l+(b<<2)>>2];f=m;b=b+1|0}while(0);while((b|0)<(k|0)|(f|0)<(m|0));return}function kt(b){b=b|0;var e=0,f=0;f=0;do{switch(a[26496+(f*12|0)+5>>0]|0){case 1:{e=b;break}case 2:{e=-1;break}default:e=0}Ed(b,c[26496+(f*12|0)>>2]|0,a[26496+(f*12|0)+4>>0]|0,d[26496+(f*12|0)+6>>0]|0,e,c[26496+(f*12|0)+8>>2]|0,0,0)|0;f=f+1|0}while((f|0)!=40);Ed(b,58197,1,1,0,0,182,99)|0;Ed(b,58203,1,1,0,0,182,100)|0;Ed(b,58212,1,1,0,0,183,101)|0;Ed(b,58217,1,1,0,0,183,102)|0;Ed(b,58224,1,1,0,0,183,103)|0;Ed(b,58239,1,1,0,0,183,104)|0;return 0}function lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,h=0.0,i=0,j=0,k=0;if((b|0)!=1)Y(58254,58262,1395,58332);a=Hc(a,24)|0;if(($c(c[d>>2]|0)|0)==5)return;b=a+16|0;k=b;k=Sv(c[k>>2]|0,c[k+4>>2]|0,1,0)|0;j=L()|0;i=b;c[i>>2]=k;c[i+4>>2]=j;f=+pc(c[d>>2]|0);e=+g[a>>3];h=f-e;d=b;e=e+h/(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0));g[a>>3]=e;d=a+8|0;g[d>>3]=+g[d>>3]+h*(f-e);return}function mt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,+u(+(f/(+(e>>>0)+4294967296.0*+(L()|0)))));return}wc(a,0.0);return}function nt(a){a=a|0;var b=0,d=0,e=0,f=0.0;b=Hc(a,0)|0;if(b|0?(e=b+16|0,d=c[e>>2]|0,e=c[e+4>>2]|0,(e|0)>0|(e|0)==0&d>>>0>1):0){f=+g[b+8>>3];e=Sv(d|0,e|0,-1,-1)|0;wc(a,f/(+(e>>>0)+4294967296.0*+(L()|0)));return}wc(a,0.0);return}function ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,h=0,i=0,j=0.0;if((b|0)!=1)Y(58254,58262,1418,58323);e=$c(c[d>>2]|0)|0;if((e|0)==5)return;a=Hc(a,64)|0;h=a+56|0;do if(!(c[h>>2]|0)){b=nu(1,12)|0;c[h>>2]=b;if((e|0)==1){c[b>>2]=0;c[b+4>>2]=159;b=a+48|0;c[b>>2]=0;c[b+4>>2]=0;b=a+16|0;a=b;a=Sv(c[a>>2]|0,c[a+4>>2]|0,1,0)|0;e=L()|0;c[b>>2]=a;c[b+4>>2]=e;b=c[d>>2]|0;break}else{f=a+48|0;e=f;c[e>>2]=1;c[e+4>>2]=0;c[b>>2]=0;c[b+4>>2]=160;b=f;f=9;break}}else{b=a+48|0;f=9}while(0);if((f|0)==9){f=b;e=c[f>>2]|0;f=c[f+4>>2]|0;b=a+16|0;i=b;i=Sv(c[i>>2]|0,c[i+4>>2]|0,1,0)|0;a=L()|0;c[b>>2]=i;c[b+4>>2]=a;b=c[d>>2]|0;if(!((e|0)==0&(f|0)==0)){j=+pc(b);d=nu(1,8)|0;g[d>>3]=j;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;a:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break a}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}}a=rc(b)|0;e=L()|0;d=nu(1,8)|0;b=d;c[b>>2]=a;c[b+4>>2]=e;b=c[h>>2]|0;e=c[b+4>>2]|0;a=c[b>>2]|0;b:do if(a){while(1){a=Xa[e&255](c[a+8>>2]|0,d)|0;if(!a)break;b=c[b>>2]|0;b=(a|0)>0?b:b+4|0;a=c[b>>2]|0;if(!a)break b}i=(c[b>>2]|0)+16|0;f=i;f=Sv(c[f>>2]|0,c[f+4>>2]|0,1,0)|0;h=L()|0;c[i>>2]=f;c[i+4>>2]=h;mu(d);return}while(0);i=nu(1,24)|0;c[i+8>>2]=d;h=i+16|0;c[h>>2]=1;c[h+4>>2]=0;c[b>>2]=i;return}function pt(a){a=a|0;var b=0,d=0,e=0;b=Hc(a,0)|0;if(!b)return;d=b+56|0;e=c[d>>2]|0;if(!e)return;vt(c[e>>2]|0,68,b);wt(c[c[d>>2]>>2]|0);mu(c[d>>2]|0);e=b+40|0;if(!((c[e>>2]|0)==1&(c[e+4>>2]|0)==0))return;e=b+48|0;if((c[e>>2]|0)==0&(c[e+4>>2]|0)==0){e=b;Ac(a,c[e>>2]|0,c[e+4>>2]|0);return}else{wc(a,+g[b+8>>3]);return}}function qt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.5;tt(a);return}function rt(a){a=a|0;var b=0,d=0;b=Hc(a,0)|0;if(!b)return;d=b+16|0;g[b+24>>3]=(+((c[d>>2]|0)>>>0)+4294967296.0*+(c[d+4>>2]|0))*.25;tt(a);return}function st(a){a=a|0;var b=0,d=0.0,e=0;b=Hc(a,0)|0;if(!b)return;e=b+16|0;e=Yv(c[e>>2]|0,c[e+4>>2]|0,3,0)|0;d=(+(e>>>0)+4294967296.0*+(L()|0))*.25;g[b+24>>3]=d;tt(a);return}function tt(a){a=a|0;var b=0,d=0,e=0,f=0,h=0;e=Hc(a,0)|0;if(!e)return;b=e+56|0;d=c[b>>2]|0;if(!d)return;c[e+60>>2]=0;vt(c[d>>2]|0,69,e);wt(c[c[b>>2]>>2]|0);mu(c[b>>2]|0);h=e+48|0;if(!((c[h>>2]|0)==0&(c[h+4>>2]|0)==0)){h=e+40|0;wc(a,+g[e+8>>3]/(+((c[h>>2]|0)>>>0)+4294967296.0*+(c[h+4>>2]|0)));return}h=e+40|0;f=c[h>>2]|0;h=c[h+4>>2]|0;d=e;b=c[d>>2]|0;d=c[d+4>>2]|0;if((f|0)==1&(h|0)==0){Ac(a,b,d);return}else{wc(a,(+(b>>>0)+4294967296.0*+(d|0))/(+(f>>>0)+4294967296.0*+(h|0)));return}}function ut(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0.0;l=e+60|0;if((c[l>>2]|0)>0)return;m=+g[e+24>>3];h=e+16|0;f=c[h>>2]|0;h=c[h+4>>2]|0;i=e+32|0;k=i;j=c[k>>2]|0;k=c[k+4>>2]|0;b=Sv(j|0,k|0,b|0,d|0)|0;d=L()|0;do if(m<=+(b|0)){k=Tv(f|0,h|0,j|0,k|0)|0;L()|0;if(!(+(f>>>0)+4294967296.0*+(h|0)-m<=+(k|0))){c[l>>2]=1;break}l=e+40|0;j=l;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;k=L()|0;c[l>>2]=j;c[l+4>>2]=k;l=e+48|0;if((c[l>>2]|0)==0&(c[l+4>>2]|0)==0){j=c[a>>2]|0;k=e;j=Sv(c[k>>2]|0,c[k+4>>2]|0,j|0,((j|0)<0)<<31>>31|0)|0;k=L()|0;l=e;c[l>>2]=j;c[l+4>>2]=k;break}else{l=e+8|0;g[l>>3]=+g[a>>3]+ +g[l>>3];break}}while(0);l=i;c[l>>2]=b;c[l+4>>2]=d;return}function vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0;if(!a)return;do{e=c[a>>2]|0;if(e|0)vt(e,b,d);e=a+16|0;db[b&127](c[a+8>>2]|0,c[e>>2]|0,c[e+4>>2]|0,d);a=c[a+4>>2]|0}while((a|0)!=0);return}function wt(a){a=a|0;var b=0;if(!a)return;mu(c[a+8>>2]|0);b=c[a>>2]|0;if(b|0)wt(b);b=c[a+4>>2]|0;if(b|0)wt(b);mu(a);return}function xt(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,h=0,i=0,j=0.0;i=e+48|0;if((c[i>>2]|0)==0&(c[i+4>>2]|0)==0){a=c[a>>2]|0;f=e+32|0;i=f;h=c[i>>2]|0;i=c[i+4>>2]|0;if((h|0)==(b|0)&(i|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((i|0)<(d|0)|(i|0)==(d|0)&h>>>0>>0))return;i=e;c[i>>2]=a;c[i+4>>2]=((a|0)<0)<<31>>31;i=f;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}else{j=+g[a>>3];a=e+32|0;h=a;f=c[h>>2]|0;h=c[h+4>>2]|0;if((f|0)==(b|0)&(h|0)==(d|0)){e=e+40|0;b=e;b=Sv(c[b>>2]|0,c[b+4>>2]|0,1,0)|0;d=L()|0;c[e>>2]=b;c[e+4>>2]=d;return}if(!((h|0)<(d|0)|(h|0)==(d|0)&f>>>0>>0))return;g[e+8>>3]=j;i=a;c[i>>2]=b;c[i+4>>2]=d;e=e+40|0;c[e>>2]=1;c[e+4>>2]=0;return}}function yt(a,b){a=a|0;b=b|0;var d=0,e=0;e=a;a=c[e>>2]|0;e=c[e+4>>2]|0;d=b;b=c[d>>2]|0;d=c[d+4>>2]|0;return ((a|0)==(b|0)&(e|0)==(d|0)?0:(e|0)<(d|0)|(e|0)==(d|0)&a>>>0>>0?-1:1)|0}function zt(a,b){a=a|0;b=b|0;var c=0.0,d=0.0;d=+g[a>>3];c=+g[b>>3];return (d==c?0:d>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+z(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Bt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,379,58968);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+A(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ct(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,380,58959);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+B(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Dt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=2)Y(58580,58262,570,58950);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);wc(a,+C(+f,+(+pc(c[e>>2]|0))));return}Bc(a);return}function Et(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,394,58940);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Hv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ft(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,402,58930);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Gt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,410,58920);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ht(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;o=Ra;Ra=Ra+16|0;k=o+8|0;j=o;if((e|0)!=2)Y(58580,58262,1680,58900);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){h=nc(c[f>>2]|0)|0;i=nc(c[g>>2]|0)|0;e=a[h>>0]|0;a:do if(!(e<<24>>24))n=17;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[h+f>>0]|0;if(!(e<<24>>24)){n=17;break a}}e=(zu(e)|0)&255;a[k>>0]=e;e=1;while(1){g=a[h+f>>0]|0;if(!(g<<24>>24)){n=15;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[k+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==15)gw(k+e|0,48,4-e|0)|0;a[k+4>>0]=0}while(0);if((n|0)==17){a[k>>0]=a[58915]|0;a[k+1>>0]=a[58916]|0;a[k+2>>0]=a[58917]|0;a[k+3>>0]=a[58918]|0;a[k+4>>0]=a[58919]|0}e=a[i>>0]|0;b:do if(!(e<<24>>24))n=29;else{f=0;while(1){e=e&255;if(yu(e)|0)break;f=f+1|0;e=a[i+f>>0]|0;if(!(e<<24>>24)){n=29;break b}}e=(zu(e)|0)&255;a[j>>0]=e;e=1;while(1){g=a[i+f>>0]|0;if(!(g<<24>>24)){n=27;break}g=a[27264+(g&127)>>0]|0;if(g<<24>>24){a[j+e>>0]=(g&255)+48;e=e+1|0}if((e|0)<4)f=f+1|0;else break}if((n|0)==27)gw(j+e|0,48,4-e|0)|0;a[j+4>>0]=0}while(0);if((n|0)==29){a[j>>0]=a[58915]|0;a[j+1>>0]=a[58916]|0;a[j+2>>0]=a[58917]|0;a[j+3>>0]=a[58918]|0;a[j+4>>0]=a[58919]|0}g=j;m=0;f=0;h=k;e=a[k>>0]|0;while(1){i=h+1|0;e=e&255;l=a[26976+e>>0]|0;k=l&255;switch(l<<24>>24){case 4:{l=65533;break}case 3:{j=h+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=34;break}case 2:{j=i;n=34;break}case 1:{n=35;break}default:l=e}if((n|0)==34){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=35}if((n|0)==35){n=0;l=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(k<<2)>>2]|0)==0)?65533:l}i=g+1|0;e=d[g>>0]|0;j=a[26976+e>>0]|0;k=j&255;switch(j<<24>>24){case 4:{e=65533;break}case 3:{j=g+2|0;e=(e<<6)+(d[i>>0]|0)|0;n=39;break}case 2:{j=i;n=39;break}case 1:{n=40;break}default:{}}if((n|0)==39){i=j+1|0;e=(e<<6)+(d[j>>0]|0)|0;n=40}if((n|0)==40){n=0;e=(e<<6)+(d[i>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;e=(e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(k<<2)>>2]|0)==0)?65533:e}e=(l|0)==(e|0)&1;do{h=h+1|0;i=a[h>>0]|0}while((i&-64)<<24>>24==-128);do g=g+1|0;while((a[g>>0]&-64)<<24>>24==-128);f=f+e|0;e=m+1|0;if((e|0)==4)break;else{m=e;e=i}}zc(b,f);Ra=o;return}Bc(b);Ra=o;return}function It(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,498,58888);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*180.0/3.141592653589793);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Jt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,499,58876);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,e*3.141592653589793/180.0);return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Kt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,420,58868);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+w(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Lt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,419,58860);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+x(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Mt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,421,58852);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Nt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,422,58844);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+y(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ot(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,446,58835);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Pt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,438,58826);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+jv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Qt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,454,58817);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Rt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,456,58808);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,1.0/+Iv(e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function St(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,474,58800);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+D(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Tt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,472,58792);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+E(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Ut(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,473,58782);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+Fa(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Vt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0,f=0.0,g=0;if((b|0)!=2)Y(58580,58262,546,58772);if((sc(c[d>>2]|0)|0)!=5?(g=d+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=+pc(c[d>>2]|0);e=+pc(c[g>>2]|0);g=uu()|0;c[g>>2]=0;g=uu()|0;if(!(c[g>>2]|0)){wc(a,+v(+f,+e));return}else{d=uu()|0;d=dv(c[d>>2]|0)|0;g=uu()|0;xc(a,d,c[g>>2]|0);return}}Bc(a);return}function Wt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0.0;if((b|0)!=1)Y(58254,58262,590,58763);switch(sc(c[d>>2]|0)|0){case 1:{e=rc(c[d>>2]|0)|0;d=L()|0;b=(d|0)>0|(d|0)==0&e>>>0>0;d=((e|0)!=0|(d|0)!=0)<<31>>31;Ac(a,b?1:d,b?0:((d|0)<0)<<31>>31);return}case 5:{Bc(a);return}default:{f=+pc(c[d>>2]|0);wc(a,f>0.0?1.0:+((f<0.0)<<31>>31));return}}}function Xt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,375,58754);if((sc(c[d>>2]|0)|0)==5){Bc(a);return}e=+pc(c[d>>2]|0);d=uu()|0;c[d>>2]=0;d=uu()|0;if(!(c[d>>2]|0)){wc(a,+u(+e));return}else{b=uu()|0;b=dv(c[b>>2]|0)|0;d=uu()|0;xc(a,b,c[d>>2]|0);return}}function Yt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,514,58743);switch(sc(c[d>>2]|0)|0){case 1:{b=rc(c[d>>2]|0)|0;d=L()|0;Ac(a,Yv(b|0,d|0,b|0,d|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+pc(c[d>>2]|0);wc(a,e*e);return}}}function Zt(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,620,58734);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+F(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function _t(a,b,d){a=a|0;b=b|0;d=d|0;var e=0.0;if((b|0)!=1)Y(58254,58262,645,58724);switch(sc(c[d>>2]|0)|0){case 1:{Ac(a,rc(c[d>>2]|0)|0,L()|0);return}case 5:{Bc(a);return}default:{e=+s(+(+pc(c[d>>2]|0)));Ac(a,~~e>>>0,+t(e)>=1.0?(e>0.0?~~+H(+s(e/4294967296.0),4294967295.0)>>>0:~~+F((e-+(~~e>>>0))/4294967296.0)>>>0):0);return}}}function $t(a,b,c){a=a|0;b=b|0;c=c|0;wc(a,3.141592653589793);return}function au(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;if((b|0)!=2)return;if((sc(c[d>>2]|0)|0)==5)return;j=rc(c[d+4>>2]|0)|0;f=L()|0;if((f|0)<0){xc(a,58611,-1);return}g=oc(c[d>>2]|0)|0;h=nb((G(g,j)|0)+1|0)|0;i=nb(g+1|0)|0;b=(h|0)!=0;e=(i|0)!=0;if(b&e){Su(i,nc(c[d>>2]|0)|0)|0;if((f|0)>0|(f|0)==0&j>>>0>0){b=0;e=0;do{Su(h+(G(g,b)|0)|0,i)|0;b=Sv(b|0,e|0,1,0)|0;e=L()|0}while((e|0)<(f|0)|(e|0)==(f|0)&b>>>0>>0)}Cc(a,h,-1,-1);qb(h);qb(i);return}Ec(a);if(b)qb(h);if(!e)return;qb(i);return}function bu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=(b|0)==3;if((b|1|0)!=3)Y(58692,58262,1038,58710);if((sc(c[d>>2]|0)|0)!=5?(e=d+4|0,(sc(c[e>>2]|0)|0)!=5):0){f=nc(c[d>>2]|0)|0;if(!f)return;e=nc(c[e>>2]|0)|0;if(g){b=(qc(c[d+8>>2]|0)|0)+-1|0;b=(b|0)>0?b:0}else b=0;zc(a,(ku(f,e,b)|0)+1|0);return}Bc(a);return}function cu(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;if((e|0)!=2)Y(58580,58262,1073,58683);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){n=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;i=n;e=a[n>>0]|0;while(1){g=i+1|0;e=e&255;f=a[26976+e>>0]|0;h=f&255;switch(f<<24>>24){case 4:break;case 3:{f=i+2|0;e=(e<<6)+(d[g>>0]|0)|0;q=10;break}case 2:{f=g;q=10;break}case 1:{m=g;l=e;q=11;break}default:{p=e;q=12}}if((q|0)==10){m=f+1|0;l=(e<<6)+(d[f>>0]|0)|0;q=11}if((q|0)==11?(q=0,o=(l<<6)+(d[m>>0]|0)-(c[27232+(h<<2)>>2]|0)|0,!((o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(h<<2)>>2]|0)==0))):0){p=o;q=12}if((q|0)==12?(q=0,(p|0)==0):0)break;f=j+1|0;if((j|0)>=(k|0))break;e=i;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=f;i=e;e=g}e=i-n|0;f=nb(e+1|0)|0;if(!f){Ec(b);return}else{nv(f,n,e)|0;a[f+e>>0]=0;Cc(b,f,-1,-1);qb(f);return}}Bc(b);return}function du(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;if((e|0)!=2)Y(58580,58262,1113,58673);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){f=nc(c[f>>2]|0)|0;k=qc(c[g>>2]|0)|0;j=0;q=f;e=a[f>>0]|0;while(1){h=q+1|0;e=e&255;g=a[26976+e>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=q+2|0;e=(e<<6)+(d[h>>0]|0)|0;p=9;break}case 2:{g=h;p=9;break}case 1:{m=h;l=e;p=10;break}default:{o=e;p=11}}if((p|0)==9){m=g+1|0;l=(e<<6)+(d[g>>0]|0)|0;p=10}if((p|0)==10?(p=0,n=(l<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=11}if((p|0)==11?(p=0,(o|0)==0):0)break;e=q;do{e=e+1|0;g=a[e>>0]|0}while((g&-64)<<24>>24==-128);j=j+1|0;q=e;e=g}e=j-k|0;if((e|0)>0)while(1){do f=f+1|0;while((a[f>>0]&-64)<<24>>24==-128);if((e|0)>1)e=e+-1|0;else break}e=nb(q+1-f|0)|0;if(!e){Ec(b);return}else{Su(e,f)|0;Cc(b,e,-1,-1);qb(e);return}}Bc(b);return}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,o=0,p=0;if((e|0)!=1)Y(58653,58262,1323,58661);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}e=nc(c[f>>2]|0)|0;f=Eu(e)|0;l=nb(f+1|0)|0;if(!l){Ec(b);return}j=l+f|0;a[j>>0]=0;j=j+-1|0;a:while(1){while(1){h=e+1|0;f=d[e>>0]|0;g=a[26976+f>>0]|0;i=g&255;switch(g<<24>>24){case 4:break;case 3:{g=e+2|0;f=(f<<6)+(d[h>>0]|0)|0;p=12;break}case 2:{g=h;p=12;break}case 1:{m=h;k=f;p=13;break}default:{o=f;p=14}}if((p|0)==12){m=g+1|0;k=(f<<6)+(d[g>>0]|0)|0;p=13}if((p|0)==13?(p=0,n=(k<<6)+(d[m>>0]|0)-(c[27232+(i<<2)>>2]|0)|0,!((n&-2|0)==65534|((n&-2048|0)==55296?1:(n&c[27248+(i<<2)>>2]|0)==0))):0){o=n;p=14}if((p|0)==14?(p=0,(o|0)==0):0)break a;f=e;while(1){i=f+1|0;if((a[i>>0]&-64)<<24>>24==-128)f=i;else break}if(f>>>0>>0)e=i;else break}h=1;g=j;while(1){j=g;g=g+-1|0;a[j>>0]=a[f>>0]|0;f=i+~h|0;if(f>>>0>>0)break;else h=h+1|0}j=g;e=i}Cc(b,l,-1,-1);qb(l);return}function fu(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if((d|0)!=1)Y(58254,58262,724,58642);if((sc(c[e>>2]|0)|0)==5){Bc(b);return}f=nc(c[e>>2]|0)|0;d=nb((Eu(f)|0)+1|0)|0;i=Su(d,f)|0;if(!i){Ec(b);return}e=a[f>>0]|0;if(e<<24>>24){h=1;g=e<<24>>24;while(1){f=f+1|0;if(!(wu(g)|0)){if((h|0)==1)e=zu(g)|0;else e=Du(g)|0;h=0;e=e&255}else h=1;g=d+1|0;a[d>>0]=e;e=a[f>>0]|0;if(!(e<<24>>24)){d=g;break}else{d=g;g=e<<24>>24}}}a[d>>0]=0;Cc(b,i,-1,-1);qb(i);return}function gu(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;if((e|0)!=2)Y(58580,58262,771,58633);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){e=nb(j+1-f+(Eu(l)|0)|0)|0;if(!e){Ec(b);return}g=1;h=e;do{m=h;h=h+1|0;a[m>>0]=32;g=g+1|0;m=Sv(g|0,0,f|0,i|0)|0;n=L()|0}while(!((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0));Su(h,l)|0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function hu(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((e|0)!=2)Y(58580,58262,825,58624);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}h=nc(c[f>>2]|0)|0;j=rc(c[f+4>>2]|0)|0;k=L()|0;if((k|0)<0){xc(b,58611,-1);return}e=a[h>>0]|0;if((h|0)==(-1|0)|e<<24>>24==0)f=0;else{f=0;g=h;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)))}i=((f|0)<0)<<31>>31;do if((k|0)>(i|0)|(k|0)==(i|0)&j>>>0>f>>>0){g=Eu(h)|0;e=nb(j+1-f+g|0)|0;if(!e){Ec(b);return}Su(e,h)|0;h=1;g=e+g|0;do{l=g;g=g+1|0;a[l>>0]=32;h=h+1|0;l=Sv(h|0,0,f|0,i|0)|0;m=L()|0}while(!((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>j>>>0));a[g>>0]=0}else{e=nb((Eu(h)|0)+1|0)|0;f=Su(e,h)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function iu(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;if((e|0)!=2)Y(58580,58262,880,58602);if((sc(c[f>>2]|0)|0)==5){Bc(b);return}l=nc(c[f>>2]|0)|0;m=rc(c[f+4>>2]|0)|0;n=L()|0;if((n|0)<0){xc(b,58611,-1);return}e=a[l>>0]|0;if((l|0)==(-1|0)|e<<24>>24==0)j=0;else{f=0;g=l;do{g=g+((d[26976+(e&255)>>0]|0)+1)|0;f=f+1|0;e=a[g>>0]|0}while(!(e<<24>>24==0|(g|0)==(-1|0)));j=f}k=((j|0)<0)<<31>>31;do if((n|0)>(k|0)|(n|0)==(k|0)&m>>>0>j>>>0){i=Eu(l)|0;e=nb(m+1-j+i|0)|0;if(!e){Ec(b);return}h=Sv(j|0,k|0,2,0)|0;g=L()|0;if((g|0)>(n|0)|(g|0)==(n|0)&h>>>0>m>>>0){f=e;h=1}else{h=1;g=e;while(1){f=g+1|0;a[g>>0]=32;h=h+1|0;g=Sv(h<<1|0,0,j|0,k|0)|0;o=L()|0;if((o|0)>(n|0)|(o|0)==(n|0)&g>>>0>m>>>0)break;else g=f}}Su(f,l)|0;f=f+i|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if(!((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0))while(1){g=f+1|0;a[f>>0]=32;h=h+1|0;o=Sv(h|0,0,j|0,k|0)|0;l=L()|0;if((l|0)>(n|0)|(l|0)==(n|0)&o>>>0>m>>>0){f=g;break}else f=g}a[f>>0]=0}else{e=nb((Eu(l)|0)+1|0)|0;f=Su(e,l)|0;if(f|0){Cc(b,f,-1,-1);break}Ec(b);return}while(0);Cc(b,e,-1,-1);qb(e);return}function ju(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;if((e|0)!=2)Y(58580,58262,939,58588);if((sc(c[f>>2]|0)|0)!=5?(g=f+4|0,(sc(c[g>>2]|0)|0)!=5):0){e=nc(c[f>>2]|0)|0;m=nc(c[g>>2]|0)|0;n=nb((Eu(e)|0)+1|0)|0;if(!n){Ec(b);return}l=n;f=e;e=a[e>>0]|0;while(1){g=f+1|0;e=e&255;k=a[26976+e>>0]|0;i=k&255;switch(k<<24>>24){case 4:{e=65533;break}case 3:{h=f+2|0;e=(e<<6)+(d[g>>0]|0)|0;o=12;break}case 2:{h=g;o=12;break}case 1:{o=13;break}default:o=14}if((o|0)==12){g=h+1|0;e=(e<<6)+(d[h>>0]|0)|0;o=13}if((o|0)==13){o=0;e=(e<<6)+(d[g>>0]|0)-(c[27232+(i<<2)>>2]|0)|0;if((e&-2|0)==65534|((e&-2048|0)==55296?1:(e&c[27248+(i<<2)>>2]|0)==0))e=65533;else o=14}if((o|0)==14){o=0;if(!e)break}g=m;h=a[m>>0]|0;while(1){j=g+1|0;i=h&255;h=a[26976+i>>0]|0;k=h&255;switch(h<<24>>24){case 4:{i=65533;break}case 3:{h=g+2|0;i=(i<<6)+(d[j>>0]|0)|0;o=20;break}case 2:{h=j;o=20;break}case 1:{o=21;break}default:{}}if((o|0)==20){j=h+1|0;i=(i<<6)+(d[h>>0]|0)|0;o=21}if((o|0)==21){o=0;i=(i<<6)+(d[j>>0]|0)-(c[27232+(k<<2)>>2]|0)|0;i=(i&-2|0)==65534|((i&-2048|0)==55296?1:(i&c[27248+(k<<2)>>2]|0)==0)?65533:i}h=(i|0)!=0;if((i|0)==(e|0)|h^1)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128)}if(h){e=g;do e=e+1|0;while((a[e>>0]&-64)<<24>>24==-128);e=e-g|0;nv(l,g,e)|0;e=l+e|0}else e=l;do{f=f+1|0;g=a[f>>0]|0}while((g&-64)<<24>>24==-128);l=e;e=g}a[l>>0]=0;Cc(b,n,-1,-1);qb(n);return}Bc(b);return}function ku(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;t=a[b>>0]|0;if(!(t<<24>>24)){w=-1;return w|0}g=e;n=0;l=a[e>>0]|0;while(1){j=g+1|0;e=l&255;i=a[26976+e>>0]|0;k=i&255;switch(i<<24>>24){case 4:break;case 3:{h=g+2|0;e=(e<<6)+(d[j>>0]|0)|0;w=6;break}case 2:{h=j;w=6;break}case 1:{o=j;m=e;w=7;break}default:{q=e;w=8}}if((w|0)==6){o=h+1|0;m=(e<<6)+(d[h>>0]|0)|0;w=7}if((w|0)==7?(w=0,p=(m<<6)+(d[o>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((p&-2|0)==65534|((p&-2048|0)==55296?1:(p&c[27248+(k<<2)>>2]|0)==0))):0){q=p;w=8}if((w|0)==8?(w=0,(q|0)==0):0)break;h=n+1|0;if((n|0)>=(f|0))break;do{g=g+1|0;e=a[g>>0]|0}while((e&-64)<<24>>24==-128);n=h;l=e}e=0;while(1){j=g+1|0;h=l&255;k=i&255;switch(i<<24>>24){case 4:break;case 3:{i=g+2|0;h=(h<<6)+(d[j>>0]|0)|0;w=15;break}case 2:{i=j;w=15;break}case 1:{s=j;r=h;w=16;break}default:{v=h;w=17}}if((w|0)==15){s=i+1|0;r=(h<<6)+(d[i>>0]|0)|0;w=16}if((w|0)==16?(w=0,u=(r<<6)+(d[s>>0]|0)-(c[27232+(k<<2)>>2]|0)|0,!((u&-2|0)==65534|((u&-2048|0)==55296?1:(u&c[27248+(k<<2)>>2]|0)==0))):0){v=u;w=17}if((w|0)==17?(w=0,(v|0)==0):0){e=-1;f=0;break}i=g;j=b;n=l;h=t;while(1){k=j+1|0;h=h&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{o=65533;break}case 3:{l=j+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=22;break}case 2:{l=k;w=22;break}case 1:{w=23;break}default:o=h}if((w|0)==22){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=23}if((w|0)==23){w=0;o=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;o=(o&-2|0)==65534|((o&-2048|0)==55296?1:(o&c[27248+(m<<2)>>2]|0)==0)?65533:o}k=i+1|0;h=n&255;q=a[26976+h>>0]|0;m=q&255;switch(q<<24>>24){case 4:{l=65533;break}case 3:{l=i+2|0;h=(h<<6)+(d[k>>0]|0)|0;w=27;break}case 2:{l=k;w=27;break}case 1:{w=28;break}default:l=h}if((w|0)==27){k=l+1|0;h=(h<<6)+(d[l>>0]|0)|0;w=28}if((w|0)==28){w=0;l=(h<<6)+(d[k>>0]|0)-(c[27232+(m<<2)>>2]|0)|0;l=(l&-2|0)==65534|((l&-2048|0)==55296?1:(l&c[27248+(m<<2)>>2]|0)==0)?65533:l}do{j=j+1|0;h=a[j>>0]|0}while((h&-64)<<24>>24==-128);do{i=i+1|0;k=a[i>>0]|0}while((k&-64)<<24>>24==-128);if((l|0)!=0&((o|0)!=0&(o|0)==(l|0)))n=k;else break}if(!o)break;do{g=g+1|0;h=a[g>>0]|0}while((h&-64)<<24>>24==-128);e=e+1|0;l=h;i=a[26976+(h&255)>>0]|0}w=f+e|0;return w|0} function Mh(f){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,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,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,Sa=0,Ta=0,Ua=0,Va=0,Ya=0,Za=0,_a=0,$a=0,bb=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,mb=0,nb=0;nb=Ra;Ra=Ra+560|0;lb=nb+416|0;kb=nb+400|0;jb=nb+384|0;ib=nb+368|0;hb=nb+352|0;fb=nb+336|0;eb=nb+320|0;bb=nb+304|0;$a=nb+288|0;mb=nb+272|0;gb=nb+256|0;_a=nb+240|0;da=nb+216|0;la=nb+524|0;va=nb+512|0;La=nb+192|0;Sa=nb+504|0;Ua=nb+160|0;Va=nb+96|0;Ya=nb+64|0;Za=nb+496|0;ea=nb+551|0;fa=nb+32|0;ga=nb;ha=nb+528|0;ia=nb+432|0;ja=nb+538|0;ka=f+20|0;ma=(c[(c[ka>>2]|0)+36>>2]<<1>>>0)/3|0;na=f+68|0;oa=f+116|0;pa=f+124|0;qa=f+70|0;ra=f+72|0;sa=f+120|0;ta=f+3|0;ua=ia+8|0;wa=ja+4|0;ya=Va+4|0;Ca=Va+8|0;Ea=Va+12|0;Fa=Va+16|0;Ga=Va+40|0;Ha=ia+12|0;Ia=ia+4|0;Ja=da+16|0;Ka=da+12|0;Ma=da+18|0;Na=ja;Oa=da+16|0;Pa=da+12|0;Qa=da+18|0;i=0;j=a[na>>0]|0;ca=c[oa>>2]|0;do{g=j<<24>>24;u=ca+20|0;if((c[u>>2]|0)<0?Jh(ca)|0:0){h=0;break}ba=ca+12|0;h=(a[ba>>0]|0)==0;if(!(j<<24>>24)){if(h){h=0;break}c[la>>2]=0;c[va>>2]=0;v=ca+52|0;l=c[v>>2]|0;g=c[ca+72>>2]|0;j=c[g+20>>2]|0;do if((b[g+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0)){c[da>>2]=0;aa=17;break}else{h=Ve(g)|0;aa=16;break}else aa=11;while(0);do if((aa|0)==11){h=c[j+40>>2]|0;if(h|0){c[da>>2]=h;aa=26;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(g)|0;aa=16;break}else{h=Xf(g)|0;aa=16;break}}while(0);if((aa|0)==16){c[da>>2]=h;if(!h)aa=17;else aa=26}do if((aa|0)==17){aa=0;j=ca+4|0;h=fg(l,la,va,c[j>>2]|0,0)|0;c[da>>2]=h;k=c[la>>2]|0;w=k;do if(!h){g=c[v>>2]|0;$=c[ca+56>>2]|0;Z=c[k+56>>2]|0;h=d[ca+9>>0]|0;_=(c[k+4>>2]|0)==1?100:0;Y=$+(h+5)|0;Y=d[Y>>0]<<8|d[Y+1>>0];ew(Z+Y|0,$+Y|0,(c[g+36>>2]|0)-Y|0)|0;ew(Z+_|0,$+h|0,(e[ca+24>>1]<<1)+(e[ca+18>>1]|0)|0)|0;a[k>>0]=0;h=Gf(k)|0;if(!h){h=Jh(k)|0;if(!h){if(!(a[g+17>>0]|0)){h=0;break}h=hg(k)|0;c[da>>2]=h;break}}c[da>>2]=h}while(0);if(a[l+17>>0]|0){ig(l,c[va>>2]|0,5,c[j>>2]|0,da);h=c[da>>2]|0}if(h|0){c[pa>>2]=0;if(!k)break;g=c[k+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ba=c[g+20>>2]|0;aa=ba+120|0;c[aa>>2]=(c[aa>>2]|0)+-1;ba=ba+136|0;c[g+16>>2]=c[ba>>2];c[ba>>2]=g;break}}ew(k+28|0,ca+28|0,d[ba>>0]<<1|0)|0;ew(k+36|0,ca+36|0,d[ba>>0]<<2|0)|0;a[k+12>>0]=a[ba>>0]|0;m=a[c[k+56>>2]>>0]&-9;q=ca+56|0;r=c[q>>2]|0;s=c[v>>2]|0;t=ca+9|0;h=d[t>>0]|0;if(!(b[s+22>>1]&12)){g=r+h|0;p=s+36|0}else{p=s+36|0;g=r+h|0;gw(g|0,0,(c[p>>2]|0)-h|0)|0}a[g>>0]=m;n=h+12|0;o=n&65535;g=r+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[r+(h+7)>>0]=0;g=r+(h+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[u>>2]=(c[p>>2]|0)-n&65535;g=(m&255)>>>3;j=g&255;a[ca+8>>0]=j;g=4-(g<<2)&255;h=ca+10|0;a[h>>0]=g;k=ca+76|0;c[k>>2]=120;l=c[v>>2]|0;switch(m<<24>>24){case 5:{a[ca+2>>0]=1;h=ca+3|0;if(!(j<<24>>24)){a[h>>0]=0;c[k>>2]=121;h=181}else{a[h>>0]=1;h=180}c[ca+80>>2]=h;b[ca+14>>1]=b[l+28>>1]|0;h=l+30|0;aa=41;break}case 2:{a[ca+2>>0]=0;a[ca+3>>0]=0;c[ca+80>>2]=179;b[ca+14>>1]=b[l+24>>1]|0;h=l+26|0;aa=41;break}default:{c[_a>>2]=32306;c[_a+4>>2]=65035;c[_a+8>>2]=31517;Db(11,32001,_a);g=a[h>>0]|0}}if((aa|0)==41){b[ca+16>>1]=b[h>>1]|0;a[ca+11>>0]=a[l+21>>0]|0}b[ca+18>>1]=o;c[ca+60>>2]=r+(c[p>>2]|0);c[ca+64>>2]=r+n;c[ca+68>>2]=r+(g&255);a[ba>>0]=0;b[ca+26>>1]=(c[s+32>>2]|0)+65535;b[ca+24>>1]=0;a[ca>>0]=1;h=(c[q>>2]|0)+((d[t>>0]|0)+8)|0;ba=c[va>>2]|0;a[h>>0]=ba>>>24;a[h+1>>0]=ba>>>16;a[h+2>>0]=ba>>>8;a[h+3>>0]=ba;c[pa>>2]=w;h=0}else if((aa|0)==26)c[pa>>2]=0;while(0);if(h|0)break;a[na>>0]=1;b[qa>>1]=0;b[ra>>1]=0;c[sa>>2]=ca;h=0;j=1;g=pa}else{if(h?(c[u>>2]|0)<=(ma|0):0){h=0;break}m=g+-1|0;$=c[f+120+(m<<2)>>2]|0;m=b[f+72+(m<<1)>>1]|0;n=m&65535;g=c[$+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0))aa=56;else{h=Ve(g)|0;aa=55}else aa=51;do if((aa|0)==51){h=c[k+40>>2]|0;if(!h)if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){h=Wf(g)|0;aa=55;break}else{h=Xf(g)|0;aa=55;break}else aa=523}while(0);if((aa|0)==55)if(!h)aa=56;else aa=523;do if((aa|0)==56){aa=0;if((c[$+20>>2]|0)<0?(xa=Jh($)|0,xa|0):0){h=xa;aa=523;break}if(((((a[ca+3>>0]|0)!=0?(a[ba>>0]|0)==1:0)?(za=b[ca+28>>1]|0,Aa=ca+24|0,za<<16>>16==(b[Aa>>1]|0)):0)?(Ba=$+4|0,(c[Ba>>2]|0)!=1):0)?(Da=$+24|0,(b[Da>>1]|0)==m<<16>>16):0){q=c[ca+52>>2]|0;do if(za<<16>>16){h=fg(q,la,La,0,0)|0;c[va>>2]=h;if(!h){r=c[ca+36>>2]|0;c[Sa>>2]=r;r=Xa[c[ca+76>>2]&255](ca,r)|0;b[Ua>>1]=r;r=c[la>>2]|0;m=c[r+56>>2]|0;s=r+52|0;n=c[s>>2]|0;h=d[r+9>>0]|0;if(!(b[n+22>>1]&12)){g=m+h|0;l=n+36|0}else{l=n+36|0;g=m+h|0;gw(g|0,0,(c[l>>2]|0)-h|0)|0}a[g>>0]=13;_=h+8|0;g=m+(h+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[m+(h+7)>>0]=0;g=m+(h+5)|0;a[g>>0]=(c[l>>2]|0)>>>8;a[g+1>>0]=c[l>>2];g=r+20|0;c[g>>2]=(c[l>>2]|0)-_&65535;a[r+8>>0]=1;a[r+10>>0]=0;c[r+76>>2]=120;k=c[s>>2]|0;a[r+2>>0]=1;a[r+3>>0]=1;o=r+80|0;c[o>>2]=180;b[r+14>>1]=b[k+28>>1]|0;j=r+16|0;b[j>>1]=b[k+30>>1]|0;a[r+11>>0]=a[k+21>>0]|0;k=r+18|0;b[k>>1]=_;p=r+60|0;c[p>>2]=m+(c[l>>2]|0);c[r+64>>2]=m+_;c[r+68>>2]=m;a[r+12>>0]=0;b[r+26>>1]=(c[n+32>>2]|0)+65535;b[r+24>>1]=0;a[r>>0]=1;c[Va>>2]=1;c[ya>>2]=ca;c[Ca>>2]=Sa;c[Ea>>2]=Ua;c[Fa>>2]=c[ca+60>>2];c[Ga>>2]=2;h=Rh(Va,0,1,r)|0;c[va>>2]=h;if(h|0){g=c[r+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g}break}c[g>>2]=(c[q+36>>2]|0)+-2-(e[k>>1]|0)-(e[Ua>>1]|0);do if(a[q+17>>0]|0){ig(q,c[La>>2]|0,5,c[Ba>>2]|0,va);if((e[Ua>>1]|0)<=(e[j>>1]|0))break;j=c[Sa>>2]|0;a:do if(!(c[va>>2]|0)){cb[c[o>>2]&255](r,j,da);h=e[Ja>>1]|0;if((c[Ka>>2]|0)>>>0<=h>>>0)break;g=c[p>>2]|0;do if(g>>>0>=j>>>0){if(g>>>0>=(j+h|0)>>>0)break;c[mb>>2]=32306;c[mb+4>>2]=64569;c[mb+8>>2]=31517;Db(11,32001,mb);c[va>>2]=11;break a}while(0);_=j+((e[Ma>>1]|0)+-4)|0;ig(c[s>>2]|0,d[_+1>>0]<<16|d[_>>0]<<24|d[_+2>>0]<<8|d[_+3>>0],3,c[r+4>>2]|0,va)}while(0)}while(0);k=(c[ca+64>>2]|0)+((e[Aa>>1]<<1)+-2)|0;k=(c[ca+56>>2]|0)+((d[k>>0]<<8|d[k+1>>0])&e[ca+26>>1])|0;c[Sa>>2]=k;g=0;while(1){j=g+1|0;c[Sa>>2]=k+j;if(j>>>0<9&(a[k+g>>0]|0)<0)g=j;else break}l=k+g+10|0;h=wa;g=k+j|0;do{c[Sa>>2]=g+1;_=a[g>>0]|0;Z=h;h=h+1|0;a[Z>>0]=_;g=c[Sa>>2]|0}while(_<<24>>24<0&g>>>0>>0);if(!(c[va>>2]|0))Lh($,e[Da>>1]|0,ja,h-Na|0,0,c[ca+4>>2]|0,va);g=(c[$+56>>2]|0)+((d[$+9>>0]|0)+8)|0;$=c[La>>2]|0;a[g>>0]=$>>>24;a[g+1>>0]=$>>>16;a[g+2>>0]=$>>>8;a[g+3>>0]=$;g=c[la>>2]|0;do if(g|0){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{$=c[g+20>>2]|0;_=$+120|0;c[_>>2]=(c[_>>2]|0)+-1;$=$+136|0;c[g+16>>2]=c[$>>2];c[$>>2]=g;break}}while(0);h=c[va>>2]|0}}else{c[gb>>2]=32306;c[gb+4>>2]=70410;c[gb+8>>2]=31517;Db(11,32001,gb);h=11}while(0)}else aa=95;b:do if((aa|0)==95){aa=0;l=c[(c[ka>>2]|0)+32>>2]|0;if((c[14813]|0)>=(l|0)?(Ta=c[14819]|0,(Ta|0)!=0):0){c[14819]=c[Ta>>2];_=c[14820]|0;c[14820]=_+-1;c[14821]=(_|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0>>0)c[14986]=l;g=(c[14979]|0)+1|0;c[14979]=g;if(g>>>0>(c[14983]|0)>>>0){c[14983]=g;_=Ta}else _=Ta}else aa=101;do if((aa|0)==101){aa=0;_=Sv(l|0,((l|0)<0)<<31>>31|0,-1,-1)|0;Z=L()|0;if(!(Z>>>0>0|(Z|0)==0&_>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](l)|0;if(!g){_=0;break}}else{g=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0>>0)c[14985]=l;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){_=c[14978]|0;Z=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;Y=L()|0;c[14768]=((Y|0)<0|(Y|0)==0&Z>>>0<=_>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){_=0;break}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}h=Wa[c[29352>>2]&127](g)|0;if((c[14986]|0)>>>0>>0)c[14986]=l;h=(c[14980]|0)+h|0;c[14980]=h;if(h>>>0>(c[14984]|0)>>>0){c[14984]=h;_=g}else _=g}else _=0}while(0);W=j<<24>>24==1;I=a[ta>>0]&1;j=I&255;c[la>>2]=0;a[ea>>0]=0;a[ea+1>>0]=0;a[ea+2>>0]=0;a[ea+3>>0]=0;a[ea+4>>0]=0;c[ia>>2]=0;c[ua>>2]=0;Y=c[$+52>>2]|0;if(!_)h=7;else{x=$+12|0;k=d[x>>0]|0;X=$+24|0;l=e[X>>1]|0;g=l+k|0;if(g>>>0<2)h=0;else{do if(m<<16>>16)if((g|0)==(n|0)){h=(j|-2)+n|0;break}else{h=n+-1|0;break}else h=0;while(0);g=2-j|0}Z=g+1|0;j=h-k+g|0;V=$+56|0;if((j|0)==(l|0))j=(d[$+9>>0]|0)+8|0;else{j=(c[$+64>>2]|0)+(j<<1)|0;j=(d[j>>0]<<8|d[j+1>>0])&e[$+26>>1]}K=(c[V>>2]|0)+j|0;M=K+1|0;N=K+2|0;O=K+3|0;k=d[M>>0]<<16|d[K>>0]<<24|d[N>>0]<<8|d[O>>0];c[Za>>2]=k;j=va+(g<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;c:do if(!U){s=$+26|0;t=$+64|0;S=$+76|0;u=Y+22|0;v=$+28|0;D=Y+36|0;w=$+36|0;r=g;while(1){j=c[j>>2]|0;if((c[j+20>>2]|0)<0?(U=Jh(j)|0,c[la>>2]=U,U|0):0){aa=133;break}q=r+-1|0;if(!r){aa=144;break}j=a[x>>0]|0;p=q+h|0;do if(!(j<<24>>24))aa=138;else{if((p|0)!=(e[v>>1]|0)){aa=138;break}U=c[w>>2]|0;c[Sa+(q<<2)>>2]=U;k=d[U+1>>0]<<16|d[U>>0]<<24|d[U+2>>0]<<8|d[U+3>>0];U=(Xa[c[S>>2]&255]($,U)|0)&65535;c[Ya+(q<<2)>>2]=U;a[x>>0]=0}while(0);if((aa|0)==138){aa=0;j=(c[t>>2]|0)+(p-(j&255)<<1)|0;j=(c[V>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[s>>1])|0;l=Sa+(q<<2)|0;c[l>>2]=j;k=d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0];m=(Xa[c[S>>2]&255]($,j)|0)&65535;c[Ya+(q<<2)>>2]=m;n=j;if(b[u>>1]&12){o=n-(c[V>>2]|0)|0;if((o+m|0)>(c[D>>2]|0)){aa=141;break}ew(_+o|0,j|0,m|0)|0;c[l>>2]=_+(n-(c[V>>2]|0))}Kh($,p-(d[x>>0]|0)|0,m,la)}j=va+(q<<2)|0;U=yh(Y,k,j,0,0)|0;c[la>>2]=U;if(U|0){aa=129;break}else r=q}if((aa|0)==129){c[Za>>2]=k;g=q;aa=130;break}else if((aa|0)==133){aa=0;c[Za>>2]=k;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==141){aa=0;c[Za>>2]=k;c[$a>>2]=32306;c[$a+4>>2]=70767;c[$a+8>>2]=31517;Db(11,32001,$a);c[la>>2]=11;gw(va|0,0,r<<2|0)|0;g=0;break}else if((aa|0)==144){aa=0;c[Za>>2]=k;j=c[Y+32>>2]|0;m=(G((((j+-8|0)>>>0)/6|0)+4|0,Z)|0)+3&-4;j=(m*6|0)+j|0;U=Sv(j|0,((j|0)<0)<<31>>31|0,-1,-1)|0;T=L()|0;do if(T>>>0>0|(T|0)==0&U>>>0>2147483390)aa=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[ua>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){U=c[14978]|0;T=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&T>>>0<=U>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){aa=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[ua>>2]=j}r=j+(m<<2)|0;c[Ha>>2]=r;A=r+(m<<1)|0;p=c[va>>2]|0;c[Ia>>2]=p;R=d[p+8>>0]<<2;U=R&65535;C=a[p+3>>0]|0;E=C&255;F=p+56|0;B=C<<24>>24!=0;w=c[F>>2]|0;u=p+18|0;m=e[u>>1]|0;j=0;z=0;y=p;l=w+m|0;x=F;while(1){t=y+24|0;v=b[y+26>>1]|0;k=c[ia>>2]|0;s=y+12|0;gw(r+(k<<1)|0,0,(d[s>>0]|0)+(e[t>>1]|0)<<1|0)|0;s=a[s>>0]|0;if(s<<24>>24){T=b[y+28>>1]|0;r=T&65535;if(T<<16>>16){q=v&65535;o=(r<<1)+m|0;n=0;m=k;while(1){c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&q);m=m+1|0;c[ia>>2]=m;n=n+1|0;if((n|0)==(r|0))break;else l=l+2|0}l=w+o|0;k=k+r|0}n=s&255;m=0;o=k;while(1){c[(c[ua>>2]|0)+(o<<2)>>2]=c[y+36+(m<<2)>>2];m=m+1|0;if((m|0)==(n|0))break;else o=o+1|0}k=k+n|0;c[ia>>2]=k}n=e[u>>1]|0;m=e[t>>1]<<1;q=w+n+m|0;if(l>>>0>>0){o=v&65535;n=(w+-1+(m+n-l)|0)>>>1;m=k;do{c[(c[ua>>2]|0)+(m<<2)>>2]=w+((d[l>>0]<<8|d[l+1>>0])&o);l=l+2|0;m=m+1|0;c[ia>>2]=m}while(l>>>0>>0);k=k+1+n|0}c[Va+(z<<2)>>2]=k;if(!(B|(z|0)>=(g|0))){l=c[Ya+(z<<2)>>2]|0;b[(c[Ha>>2]|0)+(k<<1)>>1]=l;T=A+j|0;l=l&65535;j=l+j|0;ew(T|0,c[Sa+(z<<2)>>2]|0,l|0)|0;c[(c[ua>>2]|0)+(k<<2)>>2]=T+R;T=(c[Ha>>2]|0)+(k<<1)|0;l=(e[T>>1]|0)-R&65535;b[T>>1]=l;do if(!(a[y+8>>0]|0)){k=c[(c[ua>>2]|0)+(k<<2)>>2]|0;T=(c[x>>2]|0)+8|0;T=d[T>>0]|d[T+1>>0]<<8|d[T+2>>0]<<16|d[T+3>>0]<<24;a[k>>0]=T;a[k+1>>0]=T>>8;a[k+2>>0]=T>>16;a[k+3>>0]=T>>24;k=c[ia>>2]|0}else{if((l&65535)>=4)break;while(1){l=j+1|0;a[A+j>>0]=0;k=c[ia>>2]|0;Q=(c[Ha>>2]|0)+(k<<1)|0;T=(b[Q>>1]|0)+1<<16>>16;b[Q>>1]=T;if((T&65535)<4)j=l;else{j=l;break}}}while(0);c[ia>>2]=k+1}l=z+1|0;if((z|0)>=(g|0))break;k=c[va+(l<<2)>>2]|0;q=k+56|0;n=c[q>>2]|0;o=k+18|0;m=e[o>>1]|0;if((a[n>>0]|0)!=(a[c[F>>2]>>0]|0)){aa=179;break}z=l;y=k;l=n+m|0;r=c[Ha>>2]|0;w=n;u=o;x=q}if((aa|0)==179){aa=0;c[bb>>2]=32306;c[bb+4>>2]=70833;c[bb+8>>2]=31517;Db(11,32001,bb);c[la>>2]=11;g=0;break c}T=R+-12+(c[D>>2]|0)|0;J=C<<24>>24==0;s=$+60|0;d:do if(J){k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=o+1|0;c[ia+16+(j<<2)>>2]=c[s>>2];c[ia+40+(j<<2)>>2]=q+1;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+2|0;r=j;p=c[va+(j<<2)>>2]|0}}else{k=0;r=0;while(1){c[ia+16+(k<<2)>>2]=c[p+60>>2];q=c[Va+(r<<2)>>2]|0;c[ia+40+(k<<2)>>2]=q;j=k+-1|0;if(!k)o=0;else o=(q|0)==(c[ia+40+(j<<2)>>2]|0)?j:k;j=T-(c[p+20>>2]|0)|0;l=Ya+(r<<2)|0;c[l>>2]=j;m=p+12|0;if(a[m>>0]|0){n=p+76|0;k=0;do{j=j+2+((Xa[c[n>>2]&255](p,c[p+36+(k<<2)>>2]|0)|0)&65535)|0;c[l>>2]=j;k=k+1|0}while(k>>>0<(d[m>>0]|0)>>>0)}c[Ua+(r<<2)>>2]=q;j=r+1|0;if((j|0)==(Z|0))break d;k=o+1|0;r=j;p=c[va+(j<<2)>>2]|0}}while(0);e:do if((g|0)>-1){o=Z;j=0;f:while(1){u=Ya+(j<<2)|0;l=c[u>>2]|0;g:do if((l|0)>(T|0)){p=j+1|0;t=Ua+(j<<2)|0;q=j+2|0;s=Ya+(p<<2)|0;r=Ua+(p<<2)|0;if(q>>>0>5){if((p|0)>=(o|0)){aa=232;break f}k=c[t>>2]|0;if(!J){m=l;while(1){k=k+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;Q=(l&65535)+2|0;l=m-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))m=l;else{r=o;q=t;break g}}}n=k;m=l;while(1){k=n+-1|0;l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;m=m-((l&65535)+2)|0;c[u>>2]=m;if((n|0)<(c[ia>>2]|0)){l=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,n)|0;l=(l&65535)+2|0}else l=0;c[s>>2]=(c[s>>2]|0)+l;c[t>>2]=k;if((m|0)>(T|0))n=k;else{r=o;q=t;l=m;break g}}}if(!J){k=o;while(1){if((p|0)<(k|0))n=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];n=q}k=(c[t>>2]|0)+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;Q=(m&65535)+2|0;l=l-Q|0;c[u>>2]=l;c[s>>2]=(c[s>>2]|0)+Q;c[t>>2]=k;if((l|0)>(T|0))k=n;else{r=n;q=t;break g}}}k=o;while(1){if((p|0)<(k|0))o=k;else{c[s>>2]=0;c[r>>2]=c[ia>>2];o=q}n=c[t>>2]|0;k=n+-1|0;m=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,k)|0;l=l+-2-(m&65535)|0;c[u>>2]=l;if((n|0)<(c[ia>>2]|0)){m=b[(c[Ha>>2]|0)+(n<<1)>>1]|0;if(!(m<<16>>16))m=Sh(ia,n)|0;m=(m&65535)+2|0}else m=0;c[s>>2]=(c[s>>2]|0)+m;c[t>>2]=k;if((l|0)>(T|0))k=o;else{r=o;q=t;break}}}else{k=Ua+(j<<2)|0;r=o;q=k;k=c[k>>2]|0}while(0);h:do if((k|0)<(c[ia>>2]|0)){p=Ya+(j+1<<2)|0;if(!J){m=l;while(1){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;l=(l&65535)+2|0;m=l+m|0;if((m|0)>(T|0))break h;c[u>>2]=m;k=k+1|0;c[q>>2]=k;c[p>>2]=(c[p>>2]|0)-l;if((k|0)>=(c[ia>>2]|0))break h}}o=l;do{l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16))l=Sh(ia,k)|0;o=o+2+(l&65535)|0;if((o|0)>(T|0))break h;c[u>>2]=o;k=k+1|0;c[q>>2]=k;m=c[ia>>2]|0;if((k|0)<(m|0)){l=b[(c[Ha>>2]|0)+(k<<1)>>1]|0;if(!(l<<16>>16)){l=Sh(ia,k)|0;m=c[ia>>2]|0}n=(l&65535)+2|0;l=m}else{n=0;l=m}c[p>>2]=(c[p>>2]|0)-n}while((k|0)<(l|0))}while(0);if((k|0)>=(c[ia>>2]|0)){aa=254;break}if(!j)l=0;else l=c[Ua+(j+-1<<2)>>2]|0;if((k|0)<=(l|0)){aa=258;break}j=j+1|0;if((j|0)<(r|0))o=r;else{H=r;break e}}if((aa|0)==232){aa=0;c[eb>>2]=32306;c[eb+4>>2]=70953;c[eb+8>>2]=31517;Db(11,32001,eb);c[la>>2]=11;g=0;break c}else if((aa|0)==254){aa=0;H=j+1|0;break}else if((aa|0)==258){aa=0;c[fb>>2]=32306;c[fb+4>>2]=70986;c[fb+8>>2]=31517;Db(11,32001,fb);c[la>>2]=11;g=0;break c}}else H=Z;while(0);t=H+-1|0;i:do if((H|0)>1){j=c[Ya+(t<<2)>>2]|0;j:do if(!(I<<24>>24)){x=t;m=c[Ha>>2]|0;while(1){u=Ya+(x<<2)|0;w=x;x=x+-1|0;v=Ya+(x<<2)|0;n=c[v>>2]|0;s=Ua+(x<<2)|0;l=c[s>>2]|0;k=l-E|0;if(!(b[m+(k<<1)>>1]|0)){Sh(ia,k)|0;m=c[Ha>>2]|0}r=(w|0)==(t|0)?0:-2;while(1){q=l+-1|0;if(!(b[m+(q<<1)>>1]|0)){Sh(ia,q)|0;m=c[Ha>>2]|0}o=b[m+(k<<1)>>1]|0;if(j){p=j+2+(o&65535)|0;o=e[m+(q<<1)>>1]|0;if((p|0)>(n+r-o|0))break;else j=p}else{j=(o&65535)+2|0;o=e[m+(q<<1)>>1]|0}n=n+-2-o|0;c[s>>2]=q;if((l|0)>1){k=k+-1|0;l=q}else{l=q;break}}c[u>>2]=j;c[v>>2]=n;k=(w|0)>1;if(k)j=c[Ua+(w+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=n}}else while(1){q=Ya+(t<<2)|0;s=t;t=t+-1|0;r=Ya+(t<<2)|0;m=c[r>>2]|0;p=Ua+(t<<2)|0;n=c[p>>2]|0;l=n-E|0;k=c[Ha>>2]|0;if(!(b[k+(l<<1)>>1]|0)){Sh(ia,l)|0;k=c[Ha>>2]|0}o=l;while(1){l=n+-1|0;if(!(b[k+(l<<1)>>1]|0))Sh(ia,l)|0;if(j|0){l=n;break}k=c[Ha>>2]|0;j=(e[k+(o<<1)>>1]|0)+2|0;m=m+-2-(e[k+(l<<1)>>1]|0)|0;c[p>>2]=l;if((n|0)<=1)break;else{o=o+-1|0;n=l}}c[q>>2]=j;c[r>>2]=m;k=(s|0)>1;if(k)j=c[Ua+(s+-2<<2)>>2]|0;else j=0;if((l|0)<=(j|0))break j;if(!k)break i;else j=m}while(0);c[hb>>2]=32306;c[hb+4>>2]=71028;c[hb+8>>2]=31517;Db(11,32001,hb);c[la>>2]=11;g=0;break c}while(0);D=a[c[F>>2]>>0]|0;F=D&255;do if((H|0)>0){v=I<<24>>24==0;w=F>>>1&4^12;y=F>>>3;x=y&255;y=4-(y<<2)&255;C=F&247;z=Y+17|0;A=x<<24>>24==0;B=$+4|0;t=0;u=0;k:while(1){l:do if((u|0)>(g|0)){Q=fg(Y,da,Za,v?c[Za>>2]|0:1,0)|0;c[la>>2]=Q;if(Q|0){g=t;break k}s=c[da>>2]|0;p=c[s+56>>2]|0;l=s+52|0;q=c[l>>2]|0;k=d[s+9>>0]|0;r=s;if(!(b[q+22>>1]&12)){j=p+k|0;o=q+36|0}else{o=q+36|0;j=p+k|0;gw(j|0,0,(c[o>>2]|0)-k|0)|0}a[j>>0]=D;m=w+k|0;n=m&65535;j=p+(k+1)|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;a[p+(k+7)>>0]=0;j=p+(k+5)|0;a[j>>0]=(c[o>>2]|0)>>>8;a[j+1>>0]=c[o>>2];c[s+20>>2]=(c[o>>2]|0)-m&65535;a[s+8>>0]=x;j=s+10|0;a[j>>0]=y;k=s+76|0;c[k>>2]=120;l=c[l>>2]|0;switch(C<<24>>24){case 5:{a[s+2>>0]=1;j=s+3|0;if(A){a[j>>0]=0;c[k>>2]=121;j=181}else{a[j>>0]=1;j=180}c[s+80>>2]=j;b[s+14>>1]=b[l+28>>1]|0;j=l+30|0;aa=314;break}case 2:{a[s+2>>0]=0;a[s+3>>0]=0;c[s+80>>2]=179;b[s+14>>1]=b[l+24>>1]|0;j=l+26|0;aa=314;break}default:{c[ib>>2]=32306;c[ib+4>>2]=65035;c[ib+8>>2]=31517;Db(11,32001,ib);j=a[j>>0]|0}}if((aa|0)==314){aa=0;b[s+16>>1]=b[j>>1]|0;a[s+11>>0]=a[l+21>>0]|0;j=y}b[s+18>>1]=n;c[s+60>>2]=p+(c[o>>2]|0);c[s+64>>2]=p+m;c[s+68>>2]=p+(j&255);a[s+12>>0]=0;b[s+26>>1]=(c[q+32>>2]|0)+65535;b[s+24>>1]=0;a[s>>0]=1;c[La+(u<<2)>>2]=r;j=t+1|0;c[Va+(u<<2)>>2]=c[ia>>2];if(!(a[z>>0]|0)){E=j;break}ig(Y,c[s+4>>2]|0,5,c[B>>2]|0,la);if(!(c[la>>2]|0))E=j;else{g=j;break k}}else{k=va+(u<<2)|0;j=c[k>>2]|0;c[La+(u<<2)>>2]=j;c[da>>2]=j;c[k>>2]=0;j=c[j+72>>2]|0;k=c[j+20>>2]|0;do if(b[j+28>>1]&4){if((c[k+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){aa=297;break}if(!(c[k+96>>2]|0)){c[la>>2]=0;E=t+1|0;break l}else{k=Ve(j)|0;break}}else aa=297;while(0);do if((aa|0)==297){aa=0;l=c[k+40>>2]|0;if(l|0){aa=298;break k}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);c[la>>2]=k;j=t+1|0;if(!k)E=j;else{g=j;break k}}while(0);u=u+1|0;if((u|0)>=(H|0)){aa=319;break}else t=E}if((aa|0)==298){aa=0;c[la>>2]=l;g=t+1|0}else if((aa|0)==319){aa=0;if((E|0)<=0){Q=0;break}k=0;m:do{Q=c[La+(k<<2)>>2]|0;l=c[Q+4>>2]|0;c[fa+(k<<2)>>2]=l;c[ga+(k<<2)>>2]=l;b[ha+(k<<1)>>1]=b[(c[Q+72>>2]|0)+28>>1]|0;if(k|0){j=0;do{if((c[fa+(j<<2)>>2]|0)==(l|0)){aa=325;break m}j=j+1|0}while(j>>>0>>0)}k=k+1|0}while((k|0)<(E|0));if((aa|0)==325){aa=0;c[jb>>2]=32306;c[jb+4>>2]=71102;c[jb+8>>2]=31517;Db(11,32001,jb);c[la>>2]=11;g=E;break c}x=(E|0)==1;y=Y+44|0;w=0;do{if(x)j=0;else{j=0;k=1;do{j=(c[ga+(k<<2)>>2]|0)>>>0<(c[ga+(j<<2)>>2]|0)>>>0?k:j;k=k+1|0}while((k|0)<(E|0))}Q=ga+(j<<2)|0;v=c[Q>>2]|0;c[Q>>2]=-1;if((j|0)!=(w|0)){do if((j|0)>(w|0)){t=c[(c[La+(j<<2)>>2]|0)+72>>2]|0;P=j+1+(c[y>>2]|0)|0;u=t+28|0;b[u>>1]=0;k=t+12|0;Q=t+24|0;db[c[29444>>2]&127](c[(c[k>>2]|0)+44>>2]|0,c[t>>2]|0,c[Q>>2]|0,P);c[Q>>2]=P;u=b[u>>1]|0;if((u&10)!=10)break;q=c[k>>2]|0;s=q+8|0;k=c[s>>2]|0;p=t+36|0;m=c[p>>2]|0;if((k|0)==(t|0)){c[s>>2]=m;r=m}else r=k;o=t+32|0;l=c[o>>2]|0;n=(l|0)==0;if(n){c[q+4>>2]=m;k=m}else{c[l+36>>2]=m;k=c[p>>2]|0}do if(!k){c[q>>2]=l;if(n){a[q+33>>0]=2;c[p>>2]=0;c[o>>2]=0;k=q;aa=345;break}else{c[p>>2]=0;k=q;aa=344;break}}else{c[k+32>>2]=l;l=c[q>>2]|0;c[p>>2]=0;c[o>>2]=l;if(!l){k=q;aa=345}else{k=q;aa=344}}while(0);do if((aa|0)==344){aa=0;c[l+36>>2]=t}else if((aa|0)==345){aa=0;c[q+4>>2]=t;if(!(a[q+32>>0]|0))break;a[q+33>>0]=1}while(0);c[k>>2]=t;if(!((u&8)==0&(r|0)==0))break;c[s>>2]=t}while(0);t=La+(w<<2)|0;u=c[(c[t>>2]|0)+72>>2]|0;s=u+28|0;b[s>>1]=b[ha+(j<<1)>>1]|0;j=u+12|0;Q=u+24|0;db[c[29444>>2]&127](c[(c[j>>2]|0)+44>>2]|0,c[u>>2]|0,c[Q>>2]|0,v);c[Q>>2]=v;s=b[s>>1]|0;do if((s&10)==10){p=c[j>>2]|0;r=p+8|0;j=c[r>>2]|0;o=u+36|0;l=c[o>>2]|0;if((j|0)==(u|0)){c[r>>2]=l;q=l}else q=j;n=u+32|0;k=c[n>>2]|0;m=(k|0)==0;if(m){c[p+4>>2]=l;j=l}else{c[k+36>>2]=l;j=c[o>>2]|0}do if(!j){c[p>>2]=k;if(m){a[p+33>>0]=2;c[o>>2]=0;c[n>>2]=0;j=p;aa=361;break}else{c[o>>2]=0;j=p;aa=360;break}}else{c[j+32>>2]=k;k=c[p>>2]|0;c[o>>2]=0;c[n>>2]=k;if(!k){j=p;aa=361}else{j=p;aa=360}}while(0);do if((aa|0)==360){aa=0;c[k+36>>2]=u}else if((aa|0)==361){aa=0;c[p+4>>2]=u;if(!(a[p+32>>0]|0))break;a[p+33>>0]=1}while(0);c[j>>2]=u;if(!((s&8)==0&(q|0)==0))break;c[r>>2]=u}while(0);c[(c[t>>2]|0)+4>>2]=v}w=w+1|0}while((w|0)!=(E|0));c[Za>>2]=v;Q=1;break}break c}else{E=0;Q=0}while(0);v=E+-1|0;j=c[La+(v<<2)>>2]|0;P=c[j+4>>2]|0;a[K>>0]=P>>>24;a[M>>0]=P>>>16;a[N>>0]=P>>>8;a[O>>0]=P;if(!((F&8|0)!=0|(Z|0)==(E|0))){P=(c[j+56>>2]|0)+8|0;O=(c[(c[((E|0)>(Z|0)?La:va)+(g<<2)>>2]|0)+56>>2]|0)+8|0;O=d[O>>0]|d[O+1>>0]<<8|d[O+2>>0]<<16|d[O+3>>0]<<24;a[P>>0]=O;a[P+1>>0]=O>>8;a[P+2>>0]=O>>16;a[P+3>>0]=O>>24}P=Y+17|0;do if(a[P>>0]|0){j=c[La>>2]|0;k=c[ia>>2]|0;if((k|0)<=0)break;t=J&1;u=U<<16>>16==0;q=0;l=0;n=(e[j+24>>1]|0)+(d[j+12>>0]|0)|0;p=j;o=j;s=0;while(1){r=c[(c[ua>>2]|0)+(s<<2)>>2]|0;if((s|0)==(n|0)){n=s+t|0;j=q;do{j=j+1|0;o=c[((j|0)<(E|0)?La+(j<<2)|0:va+(j<<2)|0)>>2]|0;m=n+(e[o+24>>1]|0)+(d[o+12>>0]|0)|0}while((s|0)==(m|0));n=m}else j=q;if((s|0)==(c[Ua+(l<<2)>>2]|0)){l=l+1|0;m=c[La+(l<<2)>>2]|0;if(!J){p=m;aa=378}}else aa=378;n:do if((aa|0)==378){aa=0;do if((j|0)<(E|0)){if((c[p+4>>2]|0)!=(c[fa+(j<<2)>>2]|0))break;m=r;if((c[o+56>>2]|0)>>>0>m>>>0)break;if((c[o+60>>2]|0)>>>0>m>>>0){m=p;break n}}while(0);if(u)ig(Y,d[r+1>>0]<<16|d[r>>0]<<24|d[r+2>>0]<<8|d[r+3>>0],5,c[p+4>>2]|0,la);k=b[(c[Ha>>2]|0)+(s<<1)>>1]|0;if(!(k<<16>>16))k=Sh(ia,s)|0;if((k&65535)>(e[p+16>>1]|0))o:do if(!(c[la>>2]|0)){cb[c[p+80>>2]&255](p,r,da);k=e[Oa>>1]|0;if((c[Pa>>2]|0)>>>0<=k>>>0)break;m=c[o+60>>2]|0;do if(m>>>0>=r>>>0){if(m>>>0>=(r+k|0)>>>0)break;c[kb>>2]=32306;c[kb+4>>2]=64569;c[kb+8>>2]=31517;Db(11,32001,kb);c[la>>2]=11;break o}while(0);O=r+((e[Qa>>1]|0)+-4)|0;ig(c[p+52>>2]|0,d[O+1>>0]<<16|d[O>>0]<<24|d[O+2>>0]<<8|d[O+3>>0],3,c[p+4>>2]|0,la)}while(0);if(c[la>>2]|0){g=E;break c}m=p;k=c[ia>>2]|0}while(0);s=s+1|0;if((s|0)>=(k|0))break;else{q=j;p=m}}}while(0);p:do if((E|0)>1){if(J){m=0;n=0;while(1){o=c[La+(n<<2)>>2]|0;l=c[Ua+(n<<2)>>2]|0;j=c[(c[ua>>2]|0)+(l<<2)>>2]|0;l=b[(c[Ha>>2]|0)+(l<<1)>>1]|0;k=R+(l&65535)|0;p=_+m|0;do if(!(a[o+8>>0]|0)){O=(c[o+56>>2]|0)+8|0;N=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[O>>0]=N;a[O+1>>0]=N>>8;a[O+2>>0]=N>>16;a[O+3>>0]=N>>24}else{j=j+-4|0;if(l<<16>>16!=4)break;k=(Xa[c[S>>2]&255]($,j)|0)&65535}while(0);Lh($,n+h|0,j,k,p,c[o+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}n=n+1|0;if((n|0)>=(v|0))break p;else m=k+m|0}}n=0;o=0;while(1){p=c[La+(o<<2)>>2]|0;k=c[Ua+(o<<2)>>2]|0;l=c[ua>>2]|0;j=c[l+(k<<2)>>2]|0;m=_+n|0;if(!(a[p+8>>0]|0)){k=R+(e[(c[Ha>>2]|0)+(k<<1)>>1]|0)|0;l=(c[p+56>>2]|0)+8|0;S=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[l>>0]=S;a[l+1>>0]=S>>8;a[l+2>>0]=S>>16;a[l+3>>0]=S>>24;l=m}else{cb[c[p+80>>2]&255](p,c[l+(k+-1<<2)>>2]|0,da);j=m+4|0;l=da;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){S=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=S&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);k=j+4|0;l=0;j=m}Lh($,o+h|0,j,k,l,c[p+4>>2]|0,la);if(c[la>>2]|0){g=E;break c}o=o+1|0;if((o|0)>=(v|0))break;else n=k+n|0}}while(0);h=1-E|0;q:do if((h|0)<(E|0)){O=c[Ua>>2]|0;N=J&1;r:while(1){K=(h|0)<0?0-h|0:h;M=ea+K|0;do if(!(a[M>>0]|0)){if((h|0)<=-1?(S=K+-1|0,(c[Va+(S<<2)>>2]|0)<(c[Ua+(S<<2)>>2]|0)):0)break;if(!K){J=O;k=0;H=0}else{if((K|0)>(g|0)){j=K+-1|0;k=c[ia>>2]|0}else{k=K+-1|0;j=k;k=(c[Va+(k<<2)>>2]|0)+N|0}H=(c[Ua+(j<<2)>>2]|0)+N|0;J=(c[Ua+(K<<2)>>2]|0)-H|0}I=c[La+(K<<2)>>2]|0;w=I+56|0;z=c[w>>2]|0;x=I+9|0;A=d[x>>0]|0;B=I+64|0;C=(c[B>>2]|0)+(J<<1)|0;D=I+24|0;v=e[D>>1]|0;F=I+12|0;y=k+v+(d[F>>0]|0)|0;q=J+H|0;if((k|0)<(H|0)){s=z+(c[(c[I+52>>2]|0)+36>>2]|0)|0;t=z+(A+8+(d[I+10>>0]|0))|0;u=z;j=0;l=0;m=0;r=k;while(1){p=c[(c[ua>>2]|0)+(r<<2)>>2]|0;if(p>>>0>=t>>>0&p>>>0>>0){n=e[(c[Ha>>2]|0)+(r<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-u&65535,l&65535)|0;if(o>>>0>s>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}r=r+1|0;if((r|0)>=(H|0)){aa=437;break}}if((aa|0)==437){aa=0;if(m|0)Oh(I,m-u&65535,l&65535)|0;if((j|0)>(v|0))break r}u=c[B>>2]|0;fw(u|0,u+(j<<1)|0,v<<1|0)|0;u=v-j|0}else u=v;if((y|0)>(q|0)){s=c[w>>2]|0;t=s+(c[(c[I+52>>2]|0)+36>>2]|0)|0;r=s+((d[x>>0]|0)+8+(d[I+10>>0]|0))|0;j=0;l=0;m=0;while(1){p=c[(c[ua>>2]|0)+(q<<2)>>2]|0;if(p>>>0>=r>>>0&p>>>0>>0){n=e[(c[Ha>>2]|0)+(q<<1)>>1]|0;o=p+n|0;if((m|0)!=(o|0)){if(m|0)Oh(I,m-s&65535,l&65535)|0;if(o>>>0>t>>>0){j=0;break}else l=n}else l=l+n|0;j=j+1|0;m=p}q=q+1|0;if((q|0)>=(y|0)){aa=452;break}}do if((aa|0)==452){aa=0;if(!m)break;Oh(I,m-s&65535,l&65535)|0}while(0);j=u-j|0}else j=u;p=z+(A+5)|0;q=p+1|0;S=z+(((d[p>>0]<<8|d[q>>0])+65535&65535)+1)|0;c[da>>2]=S;s:do if(S>>>0>>0)aa=468;else{if((k|0)>(H|0)){l=k-H|0;l=(l|0)>(J|0)?J:l;S=c[B>>2]|0;fw(S+(l<<1)|0,S|0,j<<1|0)|0;if(!(Th(I,C,da,S,H,l,ia)|0))j=j+l|0;else{aa=468;break}}l=a[F>>0]|0;if(l<<24>>24){o=0;do{m=k+(e[I+28+(o<<1)>>1]|0)|0;n=m-H|0;if((n|0)>-1&(n|0)<(J|0)){l=(c[B>>2]|0)+(n<<1)|0;if((j|0)>(n|0))fw(l+2|0,l|0,j-n<<1|0)|0;if(Th(I,C,da,l,m,1,ia)|0){aa=468;break s}j=j+1|0;l=a[F>>0]|0}o=o+1|0}while(o>>>0<(l&255)>>>0)}if(Th(I,C,da,(c[B>>2]|0)+(j<<1)|0,j+H|0,J-j|0,ia)|0){aa=468;break}b[D>>1]=J;a[F>>0]=0;S=z+(A+3)|0;a[S>>0]=J>>>8;a[S+1>>0]=b[D>>1];S=(c[da>>2]|0)-z|0;a[p>>0]=S>>>8;a[q>>0]=S;c[la>>2]=0}while(0);if((aa|0)==468){aa=0;if((J|0)>0){k=H;l=J;j=c[Ha>>2]|0;while(1){if(!(b[j+(k<<1)>>1]|0)){S=c[Ia>>2]|0;S=Xa[c[S+76>>2]&255](S,c[(c[ua>>2]|0)+(k<<2)>>2]|0)|0;j=c[Ha>>2]|0;b[j+(k<<1)>>1]=S}if((l|0)>1){k=k+1|0;l=l+-1|0}else break}}S=Rh(ia,H,J,I)|0;c[la>>2]=S;if(S|0){g=E;break c}}a[M>>0]=1;c[I+20>>2]=T-(c[Ya+(K<<2)>>2]|0)}while(0);h=h+1|0;if((h|0)>=(E|0))break q}c[lb>>2]=32306;c[lb+4>>2]=70299;c[lb+8>>2]=31517;Db(11,32001,lb);c[la>>2]=11;g=E;break c}while(0);t:do if(W){if(b[X>>1]|0){aa=488;break}l=c[La>>2]|0;if((c[l+20>>2]|0)<(d[$+9>>0]|0)){aa=488;break}Y=Qh(l,-1)|0;c[la>>2]=Y;if(Y|0)break;k=l+52|0;j=c[k>>2]|0;Y=c[l+56>>2]|0;W=c[V>>2]|0;h=d[l+9>>0]|0;X=(c[$+4>>2]|0)==1?100:0;V=Y+(h+5)|0;V=d[V>>0]<<8|d[V+1>>0];ew(W+V|0,Y+V|0,(c[j+36>>2]|0)-V|0)|0;ew(W+X|0,Y+h|0,(e[l+24>>1]<<1)+(e[l+18>>1]|0)|0)|0;a[$>>0]=0;h=Gf($)|0;do if(!h){h=Jh($)|0;if(h|0)break;if(!(a[j+17>>0]|0))h=c[la>>2]|0;else{h=hg($)|0;c[la>>2]=h}if(h|0)break t;$=Bh(c[k>>2]|0,l,c[l+4>>2]|0)|0;c[la>>2]=$;break t}while(0);c[la>>2]=h}else aa=488;while(0);do if((aa|0)==488){aa=0;if(!(Q&(U<<16>>16==0&(a[P>>0]|0)!=0)))break;h=0;do{$=c[La+(h<<2)>>2]|0;X=c[$+56>>2]|0;ig(Y,d[X+9>>0]<<16|d[X+8>>0]<<24|d[X+10>>0]<<8|d[X+11>>0],5,c[$+4>>2]|0,la);h=h+1|0}while((h|0)!=(E|0))}while(0);if((E|0)>(g|0)){g=E;break c}k=E;h=c[la>>2]|0;while(1){j=c[va+(k<<2)>>2]|0;if(!h){h=Bh(c[j+52>>2]|0,j,c[j+4>>2]|0)|0;c[la>>2]=h}if((k|0)<(g|0))k=k+1|0;else{g=E;break c}}}while(0);if((aa|0)==155){aa=0;c[ua>>2]=0}c[la>>2]=7;g=0;break}}else aa=130;while(0);if((aa|0)==130){aa=0;gw(va|0,0,(g<<2)+4|0)|0;g=0}h=c[ua>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{$=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);j=0;do{h=c[va+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Y=$+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(Z|0));if((g|0)>0){j=0;do{h=c[La+(j<<2)>>2]|0;do if(h|0){h=c[h+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);break}else{$=c[h+20>>2]|0;Z=$+120|0;c[Z>>2]=(c[Z>>2]|0)+-1;$=$+136|0;c[h+16>>2]=c[$>>2];c[$>>2]=h;break}}while(0);j=j+1|0}while((j|0)!=(g|0))}h=c[la>>2]|0}if(i){g=i;do if((c[14816]|0)>>>0<=g>>>0)if((c[14817]|0)>>>0>g>>>0){c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;i=(c[14820]|0)+1|0;c[14820]=i;c[14821]=(i|0)<(c[14815]|0)&1;i=_;break b}else{g=Wa[c[29352>>2]&127](i)|0;break}else g=Wa[c[29352>>2]&127](i)|0;while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);i=_;break}else{$=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);i=_;break}}else i=_}while(0);a[ba>>0]=0;if(ca)aa=525}while(0);if((aa|0)==523){a[ba>>0]=0;aa=525}do if((aa|0)==525){g=c[ca+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{ca=c[g+20>>2]|0;ba=ca+120|0;c[ba>>2]=(c[ba>>2]|0)+-1;ca=ca+136|0;c[g+16>>2]=c[ca>>2];c[ca>>2]=g;break}}while(0);g=(a[na>>0]|0)+-1<<24>>24;a[na>>0]=g;j=g;g=f+120+(g<<24>>24<<2)|0}ca=c[g>>2]|0;c[oa>>2]=ca}while(!(h|0));if(!i){Ra=nb;return h|0}g=i;do if((c[14816]|0)>>>0>g>>>0)g=Wa[c[29352>>2]&127](i)|0;else{if((c[14817]|0)>>>0<=g>>>0){g=Wa[c[29352>>2]&127](i)|0;break}c[14979]=(c[14979]|0)+-1;c[i>>2]=c[14819];c[14819]=i;mb=(c[14820]|0)+1|0;c[14820]=mb;c[14821]=(mb|0)<(c[14815]|0)&1;Ra=nb;return h|0}while(0);c[14980]=(c[14980]|0)-g;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=nb;return h|0}else{mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=nb;return h|0}return 0}function Nh(d,e,f,g,h){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;i=c[f+28>>2]|0;j=i-g|0;if((j|0)<1){if((h|0)<=0){n=0;return n|0}i=0;while(1){if(a[e+i>>0]|0)break;i=i+1|0;if((i|0)>=(h|0)){i=0;n=30;break}}if((n|0)==30)return i|0;l=e+i|0;f=c[d+72>>2]|0;k=c[f+20>>2]|0;if((b[f+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[f+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){m=Ve(f)|0;n=14}}else n=10;do if((n|0)==10){j=c[k+40>>2]|0;if(j|0){n=j;return n|0}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){m=Wf(f)|0;n=14;break}else{m=Xf(f)|0;n=14;break}}while(0);if((n|0)==14?m|0:0){n=m;return n|0}gw(l|0,0,h-i|0)|0;n=0;return n|0}else{if((j|0)<(h|0)){i=Nh(d,e+j|0,f,i,h-j|0)|0;if(!i)l=j;else{n=i;return n|0}}else l=h;k=f+16|0;i=(c[k>>2]|0)+g|0;if(!(Lu(e,i,l)|0)){n=0;return n|0}j=c[d+72>>2]|0;f=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[f+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[f+96>>2]|0){i=Ve(j)|0;n=27}}else n=23;do if((n|0)==23){i=c[f+40>>2]|0;if(i|0){n=i;return n|0}if((c[f+148>>2]|0)>>>0>(c[f+152>>2]|0)>>>0){i=Wf(j)|0;n=27;break}else{i=Xf(j)|0;n=27;break}}while(0);do if((n|0)==27)if(!i){i=(c[k>>2]|0)+g|0;break}else{n=i;return n|0}while(0);fw(e|0,i|0,l|0)|0;n=0;return n|0}return 0}function Oh(e,f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0;E=Ra;Ra=Ra+112|0;B=E+96|0;y=E+80|0;v=E+64|0;t=E+48|0;s=E+32|0;r=E+16|0;q=E;k=f&65535;C=g&65535;u=C+k|0;D=c[e+56>>2]|0;z=d[e+9>>0]|0;A=z+1|0;o=A&65535;p=a[D+(z+2)>>0]|0;h=a[D+A>>0]|0;if(p<<24>>24==0?h<<24>>24==0:0){q=u;p=0;n=0;m=f&255;l=(f&65535)>>>8&255}else w=3;do if((w|0)==3){m=p&255;h=(h&255)<<8|m;i=h&65535;n=(i&65535)>>>8&255;do if(h>>>0>>0){l=A;while(1){if(h>>>0<(l+4|0)>>>0)break;l=i&65535;h=D+l|0;p=a[h+1>>0]|0;m=p&255;h=(d[h>>0]|0)<<8|m;j=h&65535;if(h>>>0>>0){o=i;i=j}else{w=10;break}}if((w|0)==10){o=i;n=(j&65535)>>>8&255;w=11;break}if(!h){n=(i&65535)>>>8&255;j=0;i=c[(c[e+52>>2]|0)+36>>2]|0;break}c[q>>2]=32306;c[q+4>>2]=64915;c[q+8>>2]=31517;Db(11,32001,q);D=11;Ra=E;return D|0}else{l=A;w=11}while(0);if((w|0)==11){i=c[(c[e+52>>2]|0)+36>>2]|0;if(h>>>0>(i+-4|0)>>>0){c[r>>2]=32306;c[r+4>>2]=64920;c[r+8>>2]=31517;Db(11,32001,r);D=11;Ra=E;return D|0}else j=h}do if((j+-1|0)>>>0<(u+3|0)>>>0){if(u>>>0>j>>>0){c[s>>2]=32306;c[s+4>>2]=64932;c[s+8>>2]=31517;Db(11,32001,s);D=11;Ra=E;return D|0}h=D+(j+2)|0;h=((d[h>>0]|0)<<8|(d[h+1>>0]|0))+j|0;if(h>>>0<=i>>>0){n=D+j|0;q=h;g=h-k&65535;h=m-u&255;p=a[n+1>>0]|0;n=a[n>>0]|0;break}c[t>>2]=32306;c[t+4>>2]=64935;c[t+8>>2]=31517;Db(11,32001,t);D=11;Ra=E;return D|0}else{q=u;h=0}while(0);do if(A>>>0>>0?(x=D+(l+2)|0,x=((d[x>>0]|0)<<8|(d[x+1>>0]|0))+l|0,(x+3|0)>>>0>=k>>>0):0){if(x>>>0<=k>>>0){f=o;g=q-l&65535;h=(h&255)+k-x&255;break}c[v>>2]=32306;c[v+4>>2]=64948;c[v+8>>2]=31517;Db(11,32001,v);D=11;Ra=E;return D|0}while(0);i=D+(z+7)|0;j=a[i>>0]|0;if((j&255)>=(h&255)){a[i>>0]=(j&255)-(h&255);m=f&255;l=(f&65535)>>>8&255;k=f&65535;break}c[y>>2]=32306;c[y+4>>2]=64954;c[y+8>>2]=31517;Db(11,32001,y);D=11;Ra=E;return D|0}while(0);h=D+(z+5)|0;i=h+1|0;j=(d[h>>0]|0)<<8|(d[i>>0]|0);do if(j>>>0>>0){B=D+(o&65535)|0;a[B>>0]=l;a[B+1>>0]=m}else{if((A|0)==(o&65535|0)&j>>>0<=k>>>0){B=D+A|0;a[B>>0]=n;a[B+1>>0]=p;a[h>>0]=q>>>8;a[i>>0]=q;break}c[B>>2]=32306;c[B+4>>2]=64962;c[B+8>>2]=31517;Db(11,32001,B);D=11;Ra=E;return D|0}while(0);if(!(b[(c[e+52>>2]|0)+22>>1]&12))h=D+k|0;else{h=D+k|0;gw(h|0,0,g&65535|0)|0}a[h>>0]=n;a[D+k+1>>0]=p;D=D+(k+2)|0;a[D>>0]=(g&65535)>>>8;a[D+1>>0]=g;D=e+20|0;c[D>>2]=(c[D>>2]|0)+C;D=0;Ra=E;return D|0}function Ph(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=Ra;Ra=Ra+48|0;r=t+32|0;o=t+16|0;s=t;n=b&255;i=n+1|0;b=f+i|0;b=(d[b>>0]|0)<<8|(d[b+1>>0]|0);q=e-g|0;a:do if((b|0)<=(q|0)){l=i;while(1){k=f+(b+2)|0;j=(d[k>>0]|0)<<8|(d[k+1>>0]|0);m=j-g|0;if((m|0)>-1)break;i=f+b|0;i=(d[i>>0]|0)<<8|(d[i+1>>0]|0);if((i|0)<=(j+b|0)){p=13;break}if((i|0)>(q|0)){b=i;break a}else{l=b;b=i}}if((p|0)==13){if(!i){f=0;Ra=t;return f|0}c[o>>2]=32306;c[o+4>>2]=64770;c[o+8>>2]=31517;Db(11,32001,o);c[h>>2]=11;f=0;Ra=t;return f|0}i=k+1|0;do if((m|0)<4){i=f+(n+7)|0;if((d[i>>0]|0)>57){f=0;Ra=t;return f|0}else{h=f+l|0;s=f+b|0;s=d[s>>0]|d[s+1>>0]<<8;a[h>>0]=s;a[h+1>>0]=s>>8;a[i>>0]=m+(d[i>>0]|0);b=m+b|0;break}}else{b=m+b|0;if((b|0)<=(q|0)){a[k>>0]=m>>>8;a[i>>0]=m;break}c[s>>2]=32306;c[s+4>>2]=64756;c[s+8>>2]=31517;Db(11,32001,s);c[h>>2]=11;f=0;Ra=t;return f|0}while(0);f=f+b|0;Ra=t;return f|0}while(0);if((b|0)<=(e+-4|0)){f=0;Ra=t;return f|0}c[r>>2]=32306;c[r+4>>2]=64777;c[r+8>>2]=31517;Db(11,32001,r);c[h>>2]=11;f=0;Ra=t;return f|0}function Qh(f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;G=Ra;Ra=Ra+144|0;F=G+128|0;x=G+112|0;w=G+96|0;o=G+80|0;p=G+64|0;l=G+48|0;k=G+32|0;i=G+16|0;h=G;D=c[f+56>>2]|0;E=d[f+9>>0]|0;z=e[f+18>>1]|0;q=b[f+24>>1]|0;u=q&65535;B=(u<<1)+z|0;v=f+52|0;y=c[(c[v>>2]|0)+36>>2]|0;C=D+(E+7)|0;do if((d[C>>0]|0)<=(g|0)){s=D+(E+1)|0;s=d[s>>0]<<8|d[s+1>>0];g=y+-4|0;if((s|0)>(g|0)){c[h>>2]=32306;c[h+4>>2]=64627;c[h+8>>2]=31517;Db(11,32001,h);F=11;Ra=G;return F|0}if(s){r=D+s|0;r=d[r>>0]<<8|d[r+1>>0];if((r|0)>(g|0)){c[i>>2]=32306;c[i+4>>2]=64630;c[i+8>>2]=31517;Db(11,32001,i);F=11;Ra=G;return F|0}j=(r|0)==0;if(!j){if(a[D+r>>0]|0){t=g;A=27;break}if(a[D+(r+1)>>0]|0){t=g;A=27;break}}n=D+B|0;m=D+(s+2)|0;m=d[m>>0]<<8|d[m+1>>0];i=D+(E+5)|0;i=d[i>>0]<<8|d[i+1>>0];if(s>>>0<=i>>>0){c[k>>2]=32306;c[k+4>>2]=64638;c[k+8>>2]=31517;Db(11,32001,k);F=11;Ra=G;return F|0}h=m+s|0;do if(j)if((h|0)>(y|0)){c[o>>2]=32306;c[o+4>>2]=64647;c[o+8>>2]=31517;Db(11,32001,o);F=11;Ra=G;return F|0}else l=0;else{if(r>>>0>>0){c[l>>2]=32306;c[l+4>>2]=64641;c[l+8>>2]=31517;Db(11,32001,l);F=11;Ra=G;return F|0}g=D+(r+2)|0;g=d[g>>0]<<8|d[g+1>>0];if((g+r|0)<=(y|0)){fw(D+(g+h)|0,D+h|0,r-h|0)|0;m=g+m|0;l=g;break}c[p>>2]=32306;c[p+4>>2]=64643;c[p+8>>2]=31517;Db(11,32001,p);F=11;Ra=G;return F|0}while(0);g=m+i|0;fw(D+g|0,D+i|0,s-i|0)|0;if(q<<16>>16){i=D+z|0;do{j=i+1|0;k=d[i>>0]<<8|d[j>>0];if(k>>>0>=s>>>0){if(k>>>0>>0){h=l;A=25}}else{h=m;A=25}if((A|0)==25){A=0;z=k+h|0;a[i>>0]=z>>>8;a[j>>0]=z}i=i+2|0}while(i>>>0>>0)}}else{t=g;A=27}}else{t=y+-4|0;A=27}while(0);if((A|0)==27){a:do if(q<<16>>16){q=f+76|0;r=D+(E+5)|0;s=r+1|0;p=0;i=0;h=D;k=y;while(1){l=D+((p<<1)+z)|0;m=l+1|0;n=d[l>>0]<<8|d[m>>0];if(n>>>0>>0|(n|0)>(t|0)){A=30;break}j=h+n|0;o=(Xa[c[q>>2]&255](f,j)|0)&65535;g=k-o|0;if((g|0)<(B|0)|(n+o|0)>(y|0)){A=32;break}a[l>>0]=g>>>8;a[m>>0]=g;if(!i)if((g|0)==(n|0))i=0;else{j=c[(c[c[v>>2]>>2]|0)+208>>2]|0;i=d[r>>0]<<8|d[s>>0];ew(j+i|0,D+i|0,k-i|0)|0;i=j;h=j;j=j+n|0;A=36}else A=36;if((A|0)==36){A=0;ew(D+g|0,j|0,o|0)|0}p=p+1|0;if(p>>>0>=u>>>0)break a;else k=g}if((A|0)==30){c[w>>2]=32306;c[w+4>>2]=64675;c[w+8>>2]=31517;Db(11,32001,w);F=11;Ra=G;return F|0}else if((A|0)==32){c[x>>2]=32306;c[x+4>>2]=64681;c[x+8>>2]=31517;Db(11,32001,x);F=11;Ra=G;return F|0}}else g=y;while(0);a[C>>0]=0}h=g-B|0;if((h+(d[C>>0]|0)|0)==(c[f+20>>2]|0)){F=D+(E+5)|0;a[F>>0]=g>>>8;a[F+1>>0]=g;a[D+(E+1)>>0]=0;a[D+(E+2)>>0]=0;gw(D+B|0,0,h|0)|0;F=0;Ra=G;return F|0}else{c[F>>2]=32306;c[F+4>>2]=64702;c[F+8>>2]=31517;Db(11,32001,F);F=11;Ra=G;return F|0}return 0}function Rh(f,g,h,i){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;F=Ra;Ra=Ra+48|0;E=F+32|0;D=F+16|0;C=F;A=d[i+9>>0]|0;B=c[i+56>>2]|0;s=c[i+52>>2]|0;x=c[s+36>>2]|0;t=B+x|0;j=c[i+64>>2]|0;s=c[(c[s>>2]|0)+208>>2]|0;y=B+(A+5)|0;z=y+1|0;k=(d[y>>0]|0)<<8|(d[z>>0]|0);k=k>>>0>x>>>0?0:k;ew(s+k|0,B+k|0,x-k|0)|0;k=0;while(1)if(k>>>0<6?(c[f+40+(k<<2)>>2]|0)<=(g|0):0)k=k+1|0;else break;u=h+g|0;v=f+8|0;w=f+12|0;x=B;l=t;a:while(1){q=c[f+16+(k<<2)>>2]|0;r=f+40+(k<<2)|0;p=l;do{l=c[(c[v>>2]|0)+(g<<2)>>2]|0;m=l;o=e[(c[w>>2]|0)+(g<<1)>>1]|0;n=l+o|0;if(!(l>>>0>=B>>>0&l>>>0>>0)){if(l>>>0>>0&n>>>0>q>>>0){g=10;break a}}else{if(n>>>0>t>>>0){g=7;break a}l=s+(m-x)|0}p=p+(0-o)|0;n=p-x|0;m=n>>>8&255;a[j>>0]=m;n=n&255;a[j+1>>0]=n;j=j+2|0;if(p>>>0>>0){g=12;break a}ew(p|0,l|0,o|0)|0;g=g+1|0;if((g|0)>=(u|0)){g=16;break a}}while((c[r>>2]|0)>(g|0));l=p;k=k+1|0}if((g|0)==7){c[C>>2]=32306;c[C+4>>2]=70094;c[C+8>>2]=31517;Db(11,32001,C);E=11;Ra=F;return E|0}else if((g|0)==10){c[D>>2]=32306;c[D+4>>2]=70099;c[D+8>>2]=31517;Db(11,32001,D);E=11;Ra=F;return E|0}else if((g|0)==12){c[E>>2]=32306;c[E+4>>2]=70105;c[E+8>>2]=31517;Db(11,32001,E);E=11;Ra=F;return E|0}else if((g|0)==16){D=i+24|0;b[D>>1]=h;a[i+12>>0]=0;E=B+(A+1)|0;a[E>>0]=0;a[E+1>>0]=0;E=B+(A+3)|0;a[E>>0]=(e[D>>1]|0)>>>8;a[E+1>>0]=b[D>>1];a[y>>0]=m;a[z>>0]=n;a[B+(A+7)>>0]=0;E=0;Ra=F;return E|0}return 0}function Sh(a,d){a=a|0;d=d|0;var e=0;e=c[a+4>>2]|0;e=Xa[c[e+76>>2]&255](e,c[(c[a+8>>2]|0)+(d<<2)>>2]|0)|0;b[(c[a+12>>2]|0)+(d<<1)>>1]=e;return e|0}function Th(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,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=Ra;Ra=Ra+16|0;y=A;w=A+12|0;x=d+56|0;k=c[x>>2]|0;l=c[f>>2]|0;v=i+h|0;if((i|0)<1){z=0;Ra=A;return z|0}i=0;while(1)if(i>>>0<6?(c[j+40+(i<<2)>>2]|0)<=(h|0):0)i=i+1|0;else break;s=j+12|0;t=k+1|0;u=k+2|0;r=j+8|0;q=d+9|0;p=d+52|0;o=c[j+16+(i<<2)>>2]|0;n=i;while(1){i=b[(c[s>>2]|0)+(h<<1)>>1]|0;if(!(i<<16>>16))i=Sh(j,h)|0;m=i&65535;if((a[t>>0]|0)==0?(a[u>>0]|0)==0:0)z=10;else{i=Ph(a[q>>0]|0,c[(c[p>>2]|0)+36>>2]|0,c[x>>2]|0,m,w)|0;if(!i)z=10}if((z|0)==10){z=0;if((l-e|0)<(m|0))break;l=l+(0-m)|0;i=l}d=c[(c[r>>2]|0)+(h<<2)>>2]|0;if(d>>>0>>0&(d+m|0)>>>0>o>>>0){z=13;break}fw(i|0,d|0,m|0)|0;m=i-k|0;a[g>>0]=m>>>8;a[g+1>>0]=m;h=h+1|0;if((h|0)>=(v|0)){z=19;break}d=n+1|0;if((c[j+40+(n<<2)>>2]|0)>(h|0)){i=o;d=n}else i=c[j+16+(d<<2)>>2]|0;o=i;g=g+2|0;n=d}if((z|0)==13){c[y>>2]=32306;c[y+4>>2]=70190;c[y+8>>2]=31517;Db(11,32001,y)}else if((z|0)==19){c[f>>2]=l;z=0;Ra=A;return z|0}z=1;Ra=A;return z|0}function Uh(f,g){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=Ra;Ra=Ra+16|0;t=w+4|0;u=w;v=f+12|0;n=f+8|0;h=c[n>>2]|0;do if(!(c[v>>2]|0)){m=c[h+28>>2]|0;l=((e[m+6>>1]|0)*40|0)+56|0;j=c[m+12>>2]|0;a:do if(!j){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](l)|0;r=25;break}k=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0>>0)c[14985]=l;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){s=c[14978]|0;q=Tv(h|0,j|0,k|0,((k|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=s>>>0)&1}h=Wa[c[29340>>2]&127](k)|0;if(h|0){i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;r=26}else r=26}}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0)break}else{do if(!(0<0|(0==0?(e[j+276>>1]|0)>>>0>>0:0))){h=j+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}h=j+296|0;i=c[h>>2]|0;if(!i){h=j+292|0;break}else{c[h>>2]=c[i>>2];r=j+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break a}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}i=_d(j,l,0)|0;r=25}while(0);if((r|0)==25?i|0:0){h=i;r=26}if((r|0)==26){c[h+4>>2]=h+16;c[h>>2]=m;c[v>>2]=h;s=c[n>>2]|0;b[h+8>>1]=b[(c[s+28>>2]|0)+6>>1]|0;a[h+11>>0]=0;h=s;break}c[v>>2]=0;v=7;Ra=w;return v|0}while(0);l=c[g>>2]|0;r=a[h+60>>0]|0;s=f+32|0;c[s>>2]=r<<24>>24==1?78:r<<24>>24==2?76:77;if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](256)|0;if(!h){v=7;Ra=w;return v|0}}else{h=Wa[c[29356>>2]&127](256)|0;if((c[14985]|0)>>>0<256)c[14985]=256;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;q=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=r>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){v=7;Ra=w;return v|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}gw(h|0,0,256)|0;if(l|0){q=g+4|0;k=l;j=l;while(1){i=c[q>>2]|0;if(i)if((j|0)==(i|0)){p=0;j=0}else{j=i+(c[k+4>>2]|0)|0;p=j}else{j=c[k+4>>2]|0;p=j}c[k+4>>2]=0;l=c[h>>2]|0;if(!l)i=h;else{o=0;i=h;do{c[t>>2]=0;c[u>>2]=0;m=t;b:while(1){n=l+8|0;while(1){if(($a[c[s>>2]&127](f,u,k+8|0,c[k>>2]|0,n,c[l>>2]|0)|0)>=1)break;c[m>>2]=k;m=k+4|0;k=c[m>>2]|0;if(!k){r=51;break b}}c[m>>2]=l;m=l+4|0;l=c[m>>2]|0;c[u>>2]=0;if(!l){r=53;break}}if((r|0)==51)c[m>>2]=l;else if((r|0)==53)c[m>>2]=k;k=c[t>>2]|0;c[i>>2]=0;o=o+1|0;i=h+(o<<2)|0;l=c[i>>2]|0}while((l|0)!=0)}c[i>>2]=k;if(!p)break;else k=p}}m=0;i=0;do{k=c[h+(m<<2)>>2]|0;if(k)if(!i)i=k;else{c[t>>2]=0;c[u>>2]=0;j=t;c:while(1){l=k+8|0;while(1){if(($a[c[s>>2]&127](f,u,i+8|0,c[i>>2]|0,l,c[k>>2]|0)|0)>=1)break;c[j>>2]=i;j=i+4|0;i=c[j>>2]|0;if(!i){r=63;break c}}c[j>>2]=k;j=k+4|0;k=c[j>>2]|0;c[u>>2]=0;if(!k){r=65;break}}if((r|0)==63)c[j>>2]=k;else if((r|0)==65)c[j>>2]=i;i=c[t>>2]|0}m=m+1|0}while((m|0)!=64);c[g>>2]=i;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{u=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}v=d[(c[v>>2]|0)+11>>0]|0;Ra=w;return v|0}function Vh(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;x=Ra;Ra=Ra+16|0;t=x;a[b+56>>0]=1;e=b+64|0;w=b+36|0;g=b+72|0;f=b+104|0;if((c[f>>2]|0)==0?(d=Zh(c[(c[g>>2]|0)+24>>2]|0,f)|0,d|0):0){w=d;Ra=x;return w|0}d=Uh(e,w)|0;if(d|0){w=d;Ra=x;return w|0}k=c[f>>2]|0;j=c[(c[g>>2]|0)+12>>2]|0;v=b+112|0;h=v;g=c[h>>2]|0;h=c[h+4>>2]|0;i=((j|0)<0)<<31>>31;s=Sv(j|0,i|0,-1,-1)|0;r=L()|0;do if(r>>>0>0|(r|0)==0&s>>>0>2147483390){d=7;s=0;q=0;i=0;r=0;f=0;e=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](j)|0;if(!d){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}else e=d}else{d=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0>>0)c[14985]=j;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){s=c[14978]|0;r=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;q=L()|0;c[14768]=((q|0)<0|(q|0)==0&r>>>0<=s>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;s=0;q=0;i=0;r=0;f=0;e=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}i=Zv(g|0,h|0,j|0,i|0)|0;L()|0;f=Tv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;d=0;s=e;q=j;r=k;e=L()|0}while(0);g=b+92|0;c[g>>2]=(c[g>>2]|0)+1;g=c[b+44>>2]|0;h=((g|0)<0)<<31>>31;do if(g>>>0>=128)if(g>>>0>=16384){g=wh(t,g,h)|0;if((g|0)>0){u=22;break}else{h=i;g=i;break}}else{u=bw(g|0,h|0,7)|0;L()|0;a[t>>0]=u&255|-128;a[t+1>>0]=g&127;g=2;u=22;break}else{a[t>>0]=g&127;g=1;u=22}while(0);a:do if((u|0)==22){l=((q|0)<0)<<31>>31;k=g;h=i;while(1){if(d|0){g=i;break a}j=q-i|0;j=(k|0)>(j|0)?j:k;ew(s+i|0,t+(g-k)|0,j|0)|0;i=j+i|0;if((i|0)==(q|0)){i=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,l|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,i,d)|0;h=0;i=0}else d=0;k=k-j|0;if((k|0)<=0){g=i;break}}}while(0);i=c[w>>2]|0;if(i){p=((q|0)<0)<<31>>31;n=b+40|0;o=t+1|0;do{m=i;i=c[i+4>>2]|0;l=c[m>>2]|0;j=((l|0)<0)<<31>>31;do if(l>>>0>=128)if(l>>>0>=16384){j=wh(t,l,j)|0;if((j|0)>0){u=34;break}else break}else{j=bw(l|0,j|0,7)|0;L()|0;a[t>>0]=j&255|-128;j=2;k=o;u=33;break}else{j=1;k=t;u=33}while(0);if((u|0)==33){a[k>>0]=l&127;u=34}b:do if((u|0)==34){u=0;l=j;do{if(d|0)break b;k=q-g|0;k=(l|0)>(k|0)?k:l;ew(s+g|0,t+(j-l)|0,k|0)|0;g=k+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;l=l-k|0}while((l|0)>0)}while(0);l=m+8|0;b=c[m>>2]|0;c:do if((b|0)>0){k=b;do{if(d|0)break c;j=q-g|0;j=(k|0)>(j|0)?j:k;ew(s+g|0,l+(b-k)|0,j|0)|0;g=j+g|0;if((g|0)==(q|0)){g=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;f=Sv(f|0,e|0,q|0,p|0)|0;e=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,q-h|0,g,d)|0;h=0;g=0}else d=0;k=k-j|0}while((k|0)>0)}while(0);do if(!((m|0)==0|(c[n>>2]|0)!=0))if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{b=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0)}while((i|0)!=0)}c[w>>2]=0;if(d){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;if(!s){w=d;Ra=x;return w|0}}else{if(!s){t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u;w=0;Ra=x;return w|0}if((g|0)>(h|0)){w=Sv(f|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[r>>2]|0)+12>>2]&127](r,s+h|0,g-h|0,w,d)|0}else d=0;t=Sv(f|0,e|0,g|0,((g|0)<0)<<31>>31|0)|0;u=L()|0;w=v;c[w>>2]=t;c[w+4>>2]=u}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);w=d;Ra=x;return w|0}return 0}function Wh(b,f,g,h,i,j){b=b|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,o=0,p=0,q=0,r=0;k=a[g+1>>0]|0;o=k&255;l=a[i+1>>0]|0;p=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;a:do if(k<<24>>24!=l<<24>>24){m=(k&255)>7;n=(l&255)>7;k=o-(l&255)|0;do if(!(m&n)){k=n?1:m?-1:k;if((k|0)<=0)if((a[q>>0]|0)<0){k=1;r=12;break a}else break;else{k=(a[p>>0]|0)<0?-1:k;break}}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0;if(k){j=k;i=l;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}}else{m=d[34845+o>>0]|0;b:do if((o+-1|0)>>>0<6){k=0;while(1){l=(d[p+k>>0]|0)-(d[q+k>>0]|0)|0;k=k+1|0;if(l|0)break;if(k>>>0>=m>>>0)break b}k=a[p>>0]|0;k=(a[q>>0]^k)<<24>>24<0?(((k&255)>>>6&2^2)&255)+-1|0:l;r=12;break a}while(0);l=c[(c[b+8>>2]|0)+28>>2]|0}while(0);if((r|0)==12){j=k;i=c[(c[b+8>>2]|0)+28>>2]|0;i=i+16|0;i=c[i>>2]|0;i=a[i>>0]|0;i=i<<24>>24==0;r=0-j|0;r=i?j:r;return r|0}if((e[l+6>>1]|0)<=1){r=0;return r|0}k=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(l,j,i,k);c[f>>2]=1}r=Fh(h,g,k,1)|0;return r|0}function Xh(b,f,g,h,i,j){b=b|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,o=0,p=0,q=0,r=0,s=0;s=Ra;Ra=Ra+16|0;p=s;r=g+(d[g>>0]|0)|0;q=i+(d[i>>0]|0)|0;k=g+1|0;o=a[k>>0]|0;l=o&255;do if(o<<24>>24<=-1){m=d[g+2>>0]|0;if(!(m&128)){o=l<<7&16256|m;break}n=d[g+3>>0]|0;if(!(n&128)){o=(l<<14|n)&2080895|m<<7&16256;break}else{Of(k,p)|0;n=p;o=c[n>>2]|0;o=((o|0)==(o|0)?0==(c[n+4>>2]|0):0)?o:-1;break}}else o=l;while(0);l=i+1|0;n=a[l>>0]|0;k=n&255;do if(n<<24>>24<=-1){m=d[i+2>>0]|0;if(!(m&128)){k=k<<7&16256|m;break}n=d[i+3>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|m<<7&16256;break}else{Of(l,p)|0;k=c[p>>2]|0;k=((k|0)==(k|0)?0==(c[p+4>>2]|0):0)?k:-1;break}}while(0);l=Lu(r,q,(((o|0)<(k|0)?o:k)+-13|0)/2|0)|0;m=o-k|0;if(!l){k=c[(c[b+8>>2]|0)+28>>2]|0;if(!m){if((e[k+6>>1]|0)<=1){j=0;Ra=s;return j|0}l=c[b+12>>2]|0;if(!(c[f>>2]|0)){_g(k,j,i,l);c[f>>2]=1}j=Fh(h,g,l,1)|0;Ra=s;return j|0}else l=m}else k=c[(c[b+8>>2]|0)+28>>2]|0;j=(a[c[k+16>>2]>>0]|0)==0?l:0-l|0;Ra=s;return j|0}function Yh(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;h=c[a+12>>2]|0;if(!(c[b>>2]|0)){_g(c[(c[a+8>>2]|0)+28>>2]|0,g,f,h);c[b>>2]=1}return Fh(e,d,h,0)|0}function Zh(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=Ra;Ra=Ra+16|0;i=j+8|0;h=j;d=c[7389]|0;if(d|0?Wa[d&127](202)|0:0){i=3338;Ra=j;return i|0}g=c[a>>2]|0;f=c[g+4>>2]|0;e=Sv(f|0,((f|0)<0)<<31>>31|0,-1,-1)|0;d=L()|0;do if(d>>>0>0|(d|0)==0&e>>>0>2147483390)a=7;else{if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](f)|0;if(!a){a=7;break}else d=a}else{a=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0>>0)c[14985]=f;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){k=c[14978]|0;e=Tv(d|0,e|0,a|0,((a|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](a)|0;if(!d){a=7;break}a=Wa[c[29352>>2]&127](d)|0;a=(c[14978]|0)+a|0;c[14978]=a;if(a>>>0>(c[14982]|0)>>>0)c[14982]=a;a=(c[14981]|0)+1|0;c[14981]=a;if(a>>>0>(c[14987]|0)>>>0)c[14987]=a}gw(d|0,0,f|0)|0;a=_a[c[g+24>>2]&127](g,0,d,4126,i)|0;if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}c[b>>2]=d;c[i>>2]=0;a=h;c[a>>2]=0;c[a+4>>2]=0;a=c[d>>2]|0;if(!a)a=0;else{Ya[c[a+40>>2]&127](d,18,h)|0;a=c[i>>2]|0}k=a;Ra=j;return k|0}while(0);c[i>>2]=a;k=a;Ra=j;return k|0}function _h(a,b){a=a|0;b=b|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=Ra;Ra=Ra+16|0;o=q;p=b+4|0;c[p>>2]=a;m=c[b>>2]|0;a:do if((m|0)>0){n=b+12|0;l=0;while(1){j=c[n>>2]|0;k=j+(l*56|0)|0;j=c[j+(l*56|0)+48>>2]|0;if(j|0){f=c[j>>2]|0;g=c[(c[f+8>>2]|0)+24>>2]|0;e=_h(f,c[j+4>>2]|0)|0;if(e|0){f=22;break}i=c[j+16>>2]|0;h=f+56|0;e=c[h>>2]|0;if(!e){f=f+64|0;e=Zh(g,h)|0;g=f;c[g>>2]=0;c[g+4>>2]=0;if(e|0){f=22;break}e=c[h>>2]|0;g=0;h=0}else{f=f+64|0;h=f;g=c[h>>2]|0;h=c[h+4>>2]|0}c[j+48>>2]=e;j=j+8|0;c[j>>2]=g;c[j+4>>2]=h;i=Sv(g|0,h|0,i|0,((i|0)<0)<<31>>31|0)|0;j=L()|0;e=f;c[e>>2]=i;c[e+4>>2]=j;e=ci(k)|0;if(e|0){f=22;break}}l=l+1|0;if((l|0)>=(m|0)){f=11;break}}if((f|0)==11){e=c[b>>2]|0;if((e|0)<=1)break;j=b+12|0;k=b+8|0;i=e;while(1){h=i+-1|0;e=(e|0)/2|0;if((i|0)>(e|0)){f=h-e<<1;e=f;f=f|1}else{n=c[k>>2]|0;f=h<<1;e=c[n+(f<<2)>>2]|0;f=c[n+((f|1)<<2)>>2]|0}g=c[j>>2]|0;if(c[g+(e*56|0)+24>>2]|0){if(c[g+(f*56|0)+24>>2]|0){n=c[p>>2]|0;c[o>>2]=0;n=($a[c[n+32>>2]&127](n,o,c[g+(e*56|0)+32>>2]|0,c[g+(e*56|0)+20>>2]|0,c[g+(f*56|0)+32>>2]|0,c[g+(f*56|0)+20>>2]|0)|0)<1;e=n?e:f}}else e=f;c[(c[k>>2]|0)+(h<<2)>>2]=e;if((i|0)<=2)break a;i=h;e=c[b>>2]|0}}else if((f|0)==22){Ra=q;return e|0}}while(0);p=d[(c[a+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function $h(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;r=Ra;Ra=Ra+16|0;o=r;f=d;h=c[f>>2]|0;f=c[f+4>>2]|0;l=2;while(1)if((l|0)<(b|0))l=l<<1;else break;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](100)|0)!=0:0)q=17;else q=5;a:do if((q|0)==5){k=(l*60|0)+16|0;p=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;n=L()|0;if(!(n>>>0>0|(n|0)==0&p>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](k)|0;if(!g){q=17;break}else p=g}else{g=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){q=17;break}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;p=i}else p=i}gw(p|0,0,k|0)|0;n=p+16|0;c[p>>2]=l;c[p+4>>2]=0;c[p+12>>2]=n;c[p+8>>2]=n+(l*56|0);c[e>>2]=p;n=(p|0)==0;g=n?7:0;i=n^1;b:do if((b|0)>0&i){l=p+12|0;m=a+40|0;j=0;while(1){i=c[l>>2]|0;k=i+(j*56|0)|0;g=ai(a,k,m,h,f)|0;if(g|0){q=21;break}g=o;c[g>>2]=0;c[g+4>>2]=0;g=bi(k,o)|0;s=k;h=o;s=Sv(c[h>>2]|0,c[h+4>>2]|0,c[s>>2]|0,c[s+4>>2]|0)|0;h=L()|0;f=i+(j*56|0)+8|0;i=f;c[i>>2]=s;c[i+4>>2]=h;if(g|0)break;g=ci(k)|0;h=c[f>>2]|0;f=c[f+4>>2]|0;j=j+1|0;i=(g|0)==0;if(!((j|0)<(b|0)&i)){q=25;break b}}if((q|0)==21)f=i+(j*56|0)+8|0;h=c[f>>2]|0;f=c[f+4>>2]|0}else q=25;while(0);do if((q|0)==25)if(!i)if(n)break a;else break;else{s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}while(0);if((c[p>>2]|0)>0){m=p+12|0;l=0;do{j=c[m>>2]|0;k=j+(l*56|0)|0;i=c[j+(l*56|0)+28>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[j+(l*56|0)+48>>2]|0;do if(i|0){xg(c[i+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{s=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=k;j=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));l=l+1|0}while((l|0)<(c[p>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{s=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else q=17}while(0);if((q|0)==17){c[e>>2]=0;g=7}c[e>>2]=0;s=g;p=h;q=f;e=d;d=e;c[d>>2]=p;e=e+4|0;c[e>>2]=q;Ra=r;return s|0}function ai(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;g=c[7389]|0;if(g|0?Wa[g&127](201)|0:0){b=266;return b|0}h=b+44|0;if(c[h>>2]|0)c[h>>2]=0;n=b;c[n>>2]=e;c[n+4>>2]=f;n=d+8|0;l=c[n>>2]|0;n=c[n+4>>2]|0;k=b+8|0;i=k;c[i>>2]=l;c[i+4>>2]=n;i=c[d>>2]|0;j=b+24|0;c[j>>2]=i;d=a+8|0;g=c[d>>2]|0;a=c[(c[g+24>>2]|0)+156>>2]|0;m=((a|0)<0)<<31>>31;if(!((n|0)>(m|0)|(n|0)==(m|0)&l>>>0>a>>>0)?(c[c[i>>2]>>2]|0)>2:0){c[h>>2]=0;g=c[d>>2]|0}i=c[g+12>>2]|0;d=((i|0)<0)<<31>>31;e=Zv(e|0,f|0,i|0,d|0)|0;L()|0;h=b+36|0;g=c[h>>2]|0;if(!g){n=Sv(i|0,d|0,-1,-1)|0;m=L()|0;do if(!(m>>>0>0|(m|0)==0&n>>>0>2147483390)){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](i)|0;break}g=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0>>0)c[14985]=i;a=59064;d=c[a>>2]|0;a=c[a+4>>2]|0;if((a|0)>0|(a|0)==0&d>>>0>0){n=c[14978]|0;m=Tv(d|0,a|0,g|0,((g|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){d=Wa[c[29352>>2]&127](g)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}else g=0}else g=0;while(0);c[h>>2]=g;c[b+40>>2]=i;d=(g|0)==0?7:0}else d=0;if(!((e|0)!=0&(d|0)==0)){n=d;return n|0}l=i-e|0;n=b;m=c[n>>2]|0;n=c[n+4>>2]|0;i=Sv(m|0,n|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;f=k;k=c[f>>2]|0;f=c[f+4>>2]|0;b=Tv(k|0,f|0,m|0,n|0)|0;L()|0;j=c[j>>2]|0;n=_a[c[(c[j>>2]|0)+8>>2]&127](j,g+e|0,(h|0)>(f|0)|(h|0)==(f|0)&i>>>0>k>>>0?b:l,m,n)|0;return n|0}function bi(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j;h=j+16|0;f=c[b+44>>2]|0;e=b;g=c[e>>2]|0;e=c[e+4>>2]|0;if(f|0){h=(Of(f+g|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}f=c[b+40>>2]|0;e=Zv(g|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;L()|0;if((e|0)!=0&(f-e|0)>8){h=(Of((c[b+36>>2]|0)+e|0,d)|0)&255;d=b;h=Sv(c[d>>2]|0,c[d+4>>2]|0,h|0,0)|0;d=L()|0;i=b;c[i>>2]=h;c[i+4>>2]=d;i=0;Ra=j;return i|0}e=0;while(1){f=di(b,1,h)|0;if(f|0){e=9;break}g=a[c[h>>2]>>0]|0;a[i+(e&15)>>0]=g;if(g<<24>>24<0)e=e+1|0;else{e=8;break}}if((e|0)==8){Of(i,d)|0;i=0;Ra=j;return i|0}else if((e|0)==9){i=f;Ra=j;return i|0}return 0}function ci(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;f=g;c[f>>2]=0;c[f+4>>2]=0;f=a;d=c[f+4>>2]|0;h=a+8|0;e=c[h+4>>2]|0;do if(!((d|0)<(e|0)|((d|0)==(e|0)?(c[f>>2]|0)>>>0<(c[h>>2]|0)>>>0:0))){h=a+48|0;b=c[h>>2]|0;if(b){d=ei(b)|0;j=b+32|0;f=b+48|0;c[j>>2]=c[f>>2];c[j+4>>2]=c[f+4>>2];c[j+8>>2]=c[f+8>>2];c[j+12>>2]=c[f+12>>2];j=b+40|0;f=b+8|0;e=c[f>>2]|0;f=c[f+4>>2]|0;if((c[j>>2]|0)==(e|0)?(c[j+4>>2]|0)==(f|0):0)c[b+20>>2]=1;if(!d)if(!(c[b+20>>2]|0)){b=ai(c[b>>2]|0,a,b+32|0,e,f)|0;if(!b)break;Ra=i;return b|0}else g=0;else g=d}else g=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[h>>2]|0;do if(d|0){e=c[d+4>>2]|0;do if(e|0){if((c[e>>2]|0)>0){f=e+12|0;b=0;do{yg((c[f>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[e>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);b=a;d=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));j=g;Ra=i;return j|0}while(0);b=bi(a,g)|0;if(b|0){j=b;Ra=i;return j|0}j=c[g>>2]|0;c[a+20>>2]=j;j=di(a,j,a+32|0)|0;Ra=i;return j|0}function di(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;o=Ra;Ra=Ra+16|0;n=o;e=c[a+44>>2]|0;g=a;h=c[g>>2]|0;g=c[g+4>>2]|0;if(e|0){c[d>>2]=e+h;b=Sv(h|0,g|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}m=a+40|0;e=c[m>>2]|0;f=((e|0)<0)<<31>>31;l=Zv(h|0,g|0,e|0,f|0)|0;L()|0;do if(!l){k=a+8|0;k=Tv(c[k>>2]|0,c[k+4>>2]|0,h|0,g|0)|0;j=L()|0;i=c[a+24>>2]|0;e=_a[c[(c[i>>2]|0)+8>>2]&127](i,c[a+36>>2]|0,(j|0)>(f|0)|(j|0)==(f|0)&k>>>0>e>>>0?e:k,h,g)|0;if(!e){e=c[m>>2]|0;break}else{n=e;Ra=o;return n|0}}while(0);k=e-l|0;if((k|0)>=(b|0)){c[d>>2]=(c[a+36>>2]|0)+l;d=a;b=Sv(c[d>>2]|0,c[d+4>>2]|0,b|0,((b|0)<0)<<31>>31|0)|0;d=L()|0;n=a;c[n>>2]=b;c[n+4>>2]=d;n=0;Ra=o;return n|0}j=a+16|0;e=c[j>>2]|0;do if((e|0)<(b|0)){g=(e|0)<64;i=cw(e|0,((e|0)<0)<<31>>31|0,1)|0;h=L()|0;e=((b|0)<0)<<31>>31;h=g?0:h;i=g?128:i;while(1){f=cw(i|0,h|0,1)|0;g=L()|0;if((h|0)<(e|0)|(h|0)==(e|0)&i>>>0>>0){h=g;i=f}else break}f=a+28|0;e=sb(c[f>>2]|0,i,h)|0;if(!e){n=7;Ra=o;return n|0}else{c[j>>2]=i;c[f>>2]=e;h=f;break}}else{e=a+28|0;h=e;e=c[e>>2]|0}while(0);ew(e|0,(c[a+36>>2]|0)+l|0,k|0)|0;j=a;j=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;e=a;c[e>>2]=j;c[e+4>>2]=l;e=b-k|0;a:do if((e|0)>0){while(1){g=c[m>>2]|0;g=(e|0)>(g|0)?g:e;f=di(a,g,n)|0;if(f|0)break;ew((c[h>>2]|0)+(b-e)|0,c[n>>2]|0,g|0)|0;e=e-g|0;if((e|0)<=0)break a}n=f;Ra=o;return n|0}while(0);c[d>>2]=c[h>>2];n=0;Ra=o;return n|0}function ei(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;E=Ra;Ra=Ra+16|0;y=E+4|0;A=E;C=b+8|0;B=c[C>>2]|0;C=c[C+4>>2]|0;z=b+4|0;j=c[z>>2]|0;i=c[b+48>>2]|0;h=c[(c[(c[b>>2]|0)+8>>2]|0)+12>>2]|0;g=((h|0)<0)<<31>>31;x=Sv(h|0,g|0,-1,-1)|0;w=L()|0;do if(w>>>0>0|(w|0)==0&x>>>0>2147483390){d=7;x=0;v=0;e=0;w=0;g=0;f=0}else{if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](h)|0;if(!d){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}else e=d}else{d=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;f=59064;e=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&e>>>0>0){x=c[14978]|0;w=Tv(e|0,f|0,d|0,((d|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}e=Wa[c[29340>>2]&127](d)|0;if(!e){d=7;x=0;v=0;e=0;w=0;g=0;f=0;break}d=Wa[c[29352>>2]&127](e)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d}w=Zv(B|0,C|0,h|0,g|0)|0;L()|0;g=Tv(B|0,C|0,w|0,((w|0)<0)<<31>>31|0)|0;d=0;x=e;v=h;e=w;w=i;f=L()|0}while(0);u=j+12|0;q=j+8|0;r=b+16|0;s=((v|0)<0)<<31>>31;t=y+1|0;i=e;h=e;while(1){n=c[u>>2]|0;o=c[(c[q>>2]|0)+4>>2]|0;p=c[n+(o*56|0)+20>>2]|0;if(!(c[n+(o*56|0)+24>>2]|0)){D=35;break}j=((h|0)<0)<<31>>31;k=((p|0)<0)<<31>>31;e=1;l=p;m=k;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else e=e+1|0}l=Sv(g|0,f|0,h|0,j|0)|0;l=Sv(l|0,L()|0,p|0,k|0)|0;l=Sv(l|0,L()|0,e|0,0)|0;e=L()|0;m=c[r>>2]|0;m=Sv(B|0,C|0,m|0,((m|0)<0)<<31>>31|0)|0;j=L()|0;if((e|0)>(j|0)|(e|0)==(j|0)&l>>>0>m>>>0){D=35;break}do if(p>>>0>=128)if(p>>>0>=16384){e=wh(y,p,k)|0;if((e|0)>0){D=24;break}else break}else{e=bw(p|0,k|0,7)|0;L()|0;a[y>>0]=e&255|-128;e=2;j=t;D=23;break}else{e=1;j=y;D=23}while(0);if((D|0)==23){a[j>>0]=p&127;D=24}a:do if((D|0)==24){D=0;k=e;do{if(d|0)break a;j=v-h|0;j=(k|0)>(j|0)?j:k;ew(x+h|0,y+(e-k)|0,j|0)|0;h=j+h|0;if((h|0)==(v|0)){l=Sv(g|0,f|0,v|0,s|0)|0;m=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=l;f=m}else d=0;k=k-j|0}while((k|0)>0)}while(0);k=c[n+(o*56|0)+32>>2]|0;b:do if((p|0)>0){j=p;do{if(d|0)break b;e=v-h|0;e=(j|0)>(e|0)?e:j;ew(x+h|0,k+(p-j)|0,e|0)|0;h=e+h|0;if((h|0)==(v|0)){n=Sv(g|0,f|0,v|0,s|0)|0;o=L()|0;h=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,v-i|0,h,d)|0;i=0;h=0;g=n;f=o}else d=0;j=j-e|0}while((j|0)>0)}while(0);e=fi(c[z>>2]|0,A)|0;if(e){j=e;break}}if((D|0)==35)j=0;e=b+56|0;if(d){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;if(!x){D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}}else{if(!x){C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b;D=0;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}if((h|0)>(i|0)){D=Sv(g|0,f|0,i|0,((i|0)<0)<<31>>31|0)|0;d=L()|0;d=_a[c[(c[w>>2]|0)+12>>2]&127](w,x+i|0,h-i|0,D,d)|0}else d=0;C=Sv(g|0,f|0,h|0,((h|0)<0)<<31>>31|0)|0;b=L()|0;D=e;c[D>>2]=C;c[D+4>>2]=b}if(!(c[7324]|0)){ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}else{D=Wa[c[29352>>2]&127](x)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](x);D=d;b=(j|0)==0;D=b?D:j;Ra=E;return D|0}return 0}function fi(a,b){a=a|0;b=b|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=Ra;Ra=Ra+16|0;k=q;l=a+8|0;f=c[(c[l>>2]|0)+4>>2]|0;p=c[a+4>>2]|0;n=a+12|0;e=ci((c[n>>2]|0)+(f*56|0)|0)|0;if(e|0){p=e;Ra=q;return p|0}c[k>>2]=0;e=c[n>>2]|0;a=(c[a>>2]|0)+f|0;if((a|0)>1){j=p+32|0;g=e+((f|1)*56|0)|0;f=e+((f&65534)*56|0)|0;h=a;do{i=h;h=(h|0)/2|0;e=f+24|0;do if(!(c[e>>2]|0))o=12;else{if((c[g+24>>2]|0?(m=$a[c[j>>2]&127](p,k,c[f+32>>2]|0,c[f+20>>2]|0,c[g+32>>2]|0,c[g+20>>2]|0)|0,(m|0)>=0):0)?!(f>>>0>>0&(m|0)==0):0){if(!(c[e>>2]|0)){o=12;break}c[k>>2]=0;o=12;break}e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(f-e|0)/56|0;g=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0;c[k>>2]=0}while(0);if((o|0)==12){o=0;e=c[n>>2]|0;a=c[l>>2]|0;c[a+(h<<2)>>2]=(g-e|0)/56|0;f=e+((c[a+((h^1)<<2)>>2]|0)*56|0)|0}}while((i|0)>3)}else a=c[l>>2]|0;c[b>>2]=(c[e+((c[a+4>>2]|0)*56|0)+24>>2]|0)==0&1;p=d[(c[p+12>>2]|0)+11>>0]|0;Ra=q;return p|0}function gi(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+48|0;j=n+32|0;i=n+24|0;h=n+16|0;g=n;k=c[b>>2]|0;do if(!(a[k+81>>0]|0)){m=b+4|0;if(c[c[m>>2]>>2]|0){Ra=n;return}if(!(c[b+16>>2]&1)){if(!(0==0?(c[k+32>>2]&1|0)==0:0)){c[g>>2]=32306;c[g+4>>2]=123725;c[g+8>>2]=31517;Db(11,32001,g);d=11;break}c[h>>2]=(d|0)==0?35133:d;d=dd(k,35135,h)|0;if((f|0)!=0?(a[f>>0]|0)!=0:0){c[i>>2]=d;c[i+4>>2]=f;d=dd(k,35166,i)|0}c[c[m>>2]>>2]=d;c[j>>2]=32306;c[j+4>>2]=123732;c[j+8>>2]=31517;Db(11,32001,j);d=11;break}a:do if(!f)d=0;else{i=(Eu(f)|0)+1|0;b:do if(!k){k=Sv(i|0,0,-1,-1)|0;j=L()|0;if(j>>>0>0|(j|0)==0&k>>>0>2147483390){d=0;break a}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](i)|0;l=28;break}d=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0>>0)c[14985]=i;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){k=c[14978]|0;j=Tv(g|0,h|0,d|0,((d|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=k>>>0)&1}d=Wa[c[29340>>2]&127](d)|0;if(!d){d=0;break a}g=Wa[c[29352>>2]&127](d)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else{if(!(c[k+272>>2]|0)){do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0>>0:0))){g=k+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}g=k+296|0;d=c[g>>2]|0;if(!d){d=k+292|0;break}else{c[g>>2]=c[d>>2];l=k+284|0;c[l>>2]=(c[l>>2]|0)+1;l=28;break b}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(k,i,0)|0;l=28}while(0);if((l|0)==28)if(!d){d=0;break}ew(d|0,f|0,i|0)|0}while(0);c[c[m>>2]>>2]=d;d=1}else d=7;while(0);c[b+12>>2]=d;Ra=n;return}function hi(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;q=c[b+20>>2]|0;if((q|0)<=0){r=0;return r|0}o=c[b+16>>2]|0;if(!f){b=0;while(1){g=ji((c[o+((b^b>>>0<2)<<4)+12>>2]|0)+24|0,e)|0;if(g|0)break;b=b+1|0;if((b|0)>=(q|0)){p=0;r=15;break}}if((r|0)==15)return p|0;r=g;return r|0}m=a[f>>0]|0;l=d[208+(m&255)>>0]|0;m=m<<24>>24==0;b=0;k=0;while(1){h=k^k>>>0<2;j=c[o+(h<<4)+12>>2]|0;h=c[o+(h<<4)>>2]|0;g=l-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(m|(g|0)!=0)){i=f;do{i=i+1|0;h=h+1|0;s=a[i>>0]|0;g=(d[208+(s&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(s<<24>>24==0|(g|0)!=0))}if(!g){n=ji(j+24|0,e)|0;if(!n)b=n;else break}k=k+1|0;if((k|0)>=(q|0)){p=b;r=15;break}}if((r|0)==15)return p|0;s=n;return s|0}function ii(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;e=a[b>>0]|0;a:do switch(e<<24>>24){case 45:{e=1;f=b+1|0;g=15;break}case 43:{e=0;f=b+1|0;g=15;break}case 48:{switch(a[b+1>>0]|0){case 88:case 120:break;default:{h=0;e=48;break a}}e=b+2|0;f=a[e>>0]|0;if(!(a[880+(f&255)>>0]&8)){e=0;f=b;g=15}else{if(f<<24>>24==48){b=b+3|0;while(1){e=a[b>>0]|0;if(e<<24>>24==48)b=b+1|0;else{f=e;break}}}else b=e;if(!(a[880+(f&255)>>0]&8)){e=0;b=1}else{g=0;e=0;do{h=f<<24>>24;e=(0-(h>>>6&1)&9)+h&15|e<<4;g=g+1|0;f=a[b+g>>0]|0;h=a[880+(f&255)>>0]&8}while(g>>>0<8&h<<24>>24!=0);b=h<<24>>24==0}if(!((e|0)>-1&b)){d=0;return d|0}c[d>>2]=e;d=1;return d|0}break}default:h=0}while(0);if((g|0)==15){h=e;b=f;e=a[f>>0]|0}if(((e&255)+-48|0)>>>0>=10){d=0;return d|0}if(e<<24>>24==48)do{b=b+1|0;e=a[b>>0]|0}while(e<<24>>24==48);if((e+-48&255)<10){e=(e<<24>>24)+-48|0;g=((e|0)<0)<<31>>31;f=a[b+1>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+2>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+3>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+4>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+5>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+6>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+7>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+8>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;g=L()|0;f=a[b+9>>0]|0;if((f+-48&255)<10){f=(f<<24>>24)+-48|0;e=Yv(e|0,g|0,10,0)|0;e=Sv(e|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;f=L()|0;if(((a[b+10>>0]|0)+-48&255)<10){d=0;return d|0}else b=f}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else b=g}else{e=0;b=0}g=Tv(e|0,b|0,h|0,0)|0;f=L()|0;if((f|0)>0|(f|0)==0&g>>>0>2147483647){d=0;return d|0}c[d>>2]=(h|0)==0?e:0-e|0;d=1;return d|0}function ji(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;i=c[b+12>>2]|0;if(!i){g=b+4|0;f=b+8|0}else{g=a[e>>0]|0;if(!(g<<24>>24))f=0;else{f=0;h=e;do{h=h+1|0;f=G(f+(d[208+(g&255)>>0]|0)|0,-1640531535)|0;g=a[h>>0]|0}while(g<<24>>24!=0)}f=(f>>>0)%((c[b>>2]|0)>>>0)|0;g=i+(f<<3)|0;f=i+(f<<3)+4|0}g=c[g>>2]|0;if(!g){e=59292;e=e+8|0;e=c[e>>2]|0;return e|0}j=d[208+(d[e>>0]|0)>>0]|0;while(1){f=c[f>>2]|0;g=g+-1|0;b=c[f+12>>2]|0;i=a[b>>0]|0;h=(d[208+(i&255)>>0]|0)-j|0;if(!(i<<24>>24==0|(h|0)!=0)){i=e;do{b=b+1|0;i=i+1|0;k=a[b>>0]|0;h=(d[208+(k&255)>>0]|0)-(d[208+(d[i>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(h|0)!=0))}if(!h){g=14;break}if(!g){f=59292;g=14;break}}if((g|0)==14){k=f+8|0;k=c[k>>2]|0;return k|0}return 0}function ki(f,g,h,i){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;o=Ra;Ra=Ra+80|0;l=o;if(!h){Ra=o;return 0}i=c[h>>2]|0;if(!i){Ra=o;return 0}n=c[h+8>>2]|0;if(!n){Ra=o;return 0}k=c[f>>2]|0;j=c[f+4>>2]|0;m=Sd(k,i,j)|0;if(!m){Ra=o;return 0}h=c[h+4>>2]|0;a:do if(h|0){f=a[i>>0]|0;g=(d[208+(f&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0;if(!(f<<24>>24==0|(g|0)!=0)){f=h;do{i=i+1|0;f=f+1|0;p=a[i>>0]|0;g=(d[208+(p&255)>>0]|0)-(d[208+(d[f>>0]|0)>>0]|0)|0}while(!(p<<24>>24==0|(g|0)!=0))}if(!g){g=c[m+8>>2]|0;if(!g)break;while(1){f=g+55|0;f=d[f>>0]|d[f+1>>0]<<8;if((f&3)==2)break;g=c[g+20>>2]|0;if(!g)break a}h=g;i=g+55|0;g=f}else{g=hi(k,h,j)|0;if(!g)break;p=g+55|0;h=g;i=p;g=d[p>>0]|d[p+1>>0]<<8}p=(e[h+50>>1]|0)+1|0;g=g&-5;a[i>>0]=g;a[i+1>>0]=g>>8;g=h+8|0;li(n,p,c[g>>2]|0,h);p=d[i>>0]|d[i+1>>0]<<8|128;a[i>>0]=p;a[i+1>>0]=p>>8;if(c[h+36>>2]|0){Ra=o;return 0}b[m+44>>1]=b[c[g>>2]>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}while(0);p=m+46|0;k=l+48|0;b[k>>1]=b[p>>1]|0;li(n,1,m+44|0,l);b[p>>1]=b[k>>1]|0;p=m+36|0;c[p>>2]=c[p>>2]|16;Ra=o;return 0}function li(f,g,h,i){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;p=Ra;Ra=Ra+16|0;o=p;k=a[f>>0]|0;if((g|0)>0&k<<24>>24!=0){m=0;do{do if((k+-48&255)<10){j=0;do{j=(j*10|0)+-48+(k<<24>>24)|0;f=f+1|0;k=a[f>>0]|0}while((k+-48&255)<10);if(j>>>0>=8){if(j>>>0>255){l=40;k=0;do{l=(l&65535)+40|0;q=j;j=bw(j|0,k|0,4)|0;r=k;k=L()|0}while(r>>>0>0|(r|0)==0&q>>>0>4095);l=l&65535}else{l=40;k=0}if(k>>>0>0|(k|0)==0&j>>>0>15)do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31)}else{if(j>>>0<2){j=0;break}l=40;k=0;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535}j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}else j=0;while(0);b[h+(m<<1)>>1]=j;f=(a[f>>0]|0)==32?f+1|0:f;m=m+1|0;k=a[f>>0]|0}while((m|0)<(g|0)&k<<24>>24!=0)}g=i+55|0;r=(d[g>>0]|d[g+1>>0]<<8)&-69;a[g>>0]=r;a[g+1>>0]=r>>8;if(!(a[f>>0]|0)){Ra=p;return}m=i+48|0;do{do if(!(md(35228,f,31411,91)|0)){r=d[g>>0]|d[g+1>>0]<<8|4;a[g>>0]=r;a[g+1>>0]=r>>8}else{if(md(35239,f,31411,91)|0){if(md(35249,f,31411,91)|0)break;r=d[g>>0]|d[g+1>>0]<<8|64;a[g>>0]=r;a[g+1>>0]=r>>8;break}c[o>>2]=0;ii(f+3|0,o)|0;j=c[o>>2]|0;k=((j|0)<0)<<31>>31;if(j>>>0<8)if(j>>>0<2)j=0;else{l=40;do{l=(l&65535)+65526|0;j=cw(j|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&j>>>0<8);l=l&65535;n=39}else{if(j>>>0>255){l=40;do{l=(l&65535)+40|0;r=j;j=bw(j|0,k|0,4)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;r=j;j=bw(j|0,k|0,1)|0;q=k;k=L()|0}while(q>>>0>0|(q|0)==0&r>>>0>31);n=39}else n=39}if((n|0)==39){n=0;j=(l&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535}b[m>>1]=j}while(0);a:while(1){j=a[f>>0]|0;switch(j<<24>>24){case 32:{n=45;break a}case 0:break a;default:{}}f=f+1|0}if((n|0)==45){n=0;do{f=f+1|0;j=a[f>>0]|0}while(j<<24>>24==32)}}while(j<<24>>24!=0);Ra=p;return}function mi(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;t=b+12|0;o=c[t>>2]|0;n=(o|0)==0;if(n){h=0;g=b+4|0;i=b+8|0}else{h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;i=e;do{i=i+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[i>>0]|0}while(h<<24>>24!=0)}i=(g>>>0)%((c[b>>2]|0)>>>0)|0;h=i;g=o+(i<<3)|0;i=o+(i<<3)+4|0}g=c[g>>2]|0;a:do if(!g)k=59292;else{m=d[208+(d[e>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;g=g+-1|0;k=c[i+12>>2]|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-m|0;if(!(r<<24>>24==0|(j|0)!=0)){l=e;do{k=k+1|0;l=l+1|0;r=a[k>>0]|0;j=(d[208+(r&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(r<<24>>24==0|(j|0)!=0))}if(!j){k=i;break a}if(!g){k=59292;break}}}while(0);g=k+8|0;l=c[g>>2]|0;i=(f|0)==0;if(l|0){if(!i){c[g>>2]=f;c[k+12>>2]=e;b=l;return b|0}e=c[k+4>>2]|0;g=c[k>>2]|0;if(!e){c[b+8>>2]=g;i=g;j=g}else{c[e>>2]=g;j=c[k>>2]|0;i=j}if(i|0)c[i+4>>2]=e;if(!n){g=o+(h<<3)+4|0;if((c[g>>2]|0)==(k|0))c[g>>2]=j;s=o+(h<<3)|0;c[s>>2]=(c[s>>2]|0)+-1}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}e=b+4|0;s=(c[e>>2]|0)+-1|0;c[e>>2]=s;if(s|0){b=l;return b|0}h=b+8|0;g=c[h>>2]|0;c[h>>2]=0;h=c[t>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[t>>2]=0;c[b>>2]=0;if(g|0)do{h=g;g=c[g>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{b=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);c[e>>2]=0;b=l;return b|0}if(i){b=0;return b|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](16)|0;if(!g){b=f;return b|0}else r=g}else{g=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){r=c[14978]|0;o=Tv(i|0,j|0,g|0,((g|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&o>>>0<=r>>>0)&1}i=Wa[c[29340>>2]&127](g)|0;if(!i){b=f;return b|0}g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0){c[14987]=g;r=i}else r=i}c[r+12>>2]=e;c[r+8>>2]=f;f=b+4|0;g=(c[f>>2]|0)+1|0;c[f>>2]=g;if((g>>>0>9?(p=c[b>>2]|0,g>>>0>p<<1>>>0):0)?(q=g<<4>>>0>1024?128:g<<1,(q|0)!=(p|0)):0){g=q<<3;q=Sv(g|0,0,-1,-1)|0;p=L()|0;do if(!(p>>>0>0|(p|0)==0&q>>>0>2147483390)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](g)|0;break}j=Wa[c[29356>>2]&127](g)|0;if((c[14985]|0)>>>0>>0)c[14985]=g;i=59064;g=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&g>>>0>0){q=c[14978]|0;p=Tv(g|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&p>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){g=Wa[c[29352>>2]&127](i)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else i=0}else i=0;while(0);if(i){g=c[t>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[t>>2]=i;o=Wa[c[29352>>2]&127](i)|0;n=o>>>3;c[b>>2]=n;gw(i|0,0,o&-8|0)|0;o=b+8|0;g=c[o>>2]|0;c[o>>2]=0;if(g|0){j=0;while(1){k=c[g+12>>2]|0;l=a[k>>0]|0;if(!(l<<24>>24))h=0;else{h=0;do{k=k+1|0;h=G(h+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[k>>0]|0}while(l<<24>>24!=0)}k=(h>>>0)%(n>>>0)|0;h=g;g=c[g>>2]|0;l=i+(k<<3)|0;do if(l){m=c[l>>2]|0;if(!m){c[l>>2]=1;c[i+(k<<3)+4>>2]=h;s=86;break}q=i+(k<<3)+4|0;k=c[q>>2]|0;c[l>>2]=m+1;c[q>>2]=h;if(k){c[h>>2]=k;l=k+4|0;c[h+4>>2]=c[l>>2];k=c[l>>2]|0;if(!k){c[o>>2]=h;j=h}else c[k>>2]=h;c[l>>2]=h;h=j}else s=86}else s=86;while(0);if((s|0)==86){s=0;c[h>>2]=j;if(j|0)c[j+4>>2]=h;c[h+4>>2]=0;c[o>>2]=h}if(!g)break;else j=h}}h=a[e>>0]|0;if(!(h<<24>>24))g=0;else{g=0;do{e=e+1|0;g=G(g+(d[208+(h&255)>>0]|0)|0,-1640531535)|0;h=a[e>>0]|0}while(h<<24>>24!=0)}h=(g>>>0)%((c[b>>2]|0)>>>0)|0}}g=c[t>>2]|0;e=g+(h<<3)|0;do if(!((g|0)==0|(e|0)==0)){i=c[e>>2]|0;if(!i){c[e>>2]=1;c[g+(h<<3)+4>>2]=r;break}t=g+(h<<3)+4|0;g=c[t>>2]|0;c[e>>2]=i+1;c[t>>2]=r;if(g|0){c[r>>2]=g;t=g+4|0;c[r+4>>2]=c[t>>2];s=c[t>>2]|0;c[((s|0)==0?b+8|0:s)>>2]=r;c[t>>2]=r;b=0;return b|0}}while(0);g=b+8|0;h=c[g>>2]|0;c[r>>2]=h;if(h|0)c[h+4>>2]=r;c[r+4>>2]=0;c[g>>2]=r;b=0;return b|0}function ni(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d+4|0;e=c[f>>2]|0;if(!(e&8404992)){e=c[d+12>>2]|0;if(e|0?(a[d>>0]|0)!=-86:0)ni(b,e);e=c[d+16>>2]|0;do if(!e){e=d+20|0;if(!(c[f>>2]&2048)){e=c[e>>2]|0;if(!e)break;ri(b,e);break}else{e=c[e>>2]|0;if(!e)break;pi(b,e,1);break}}else ni(b,e);while(0);e=c[f>>2]|0;if(e&16777216){oi(b,c[d+44>>2]|0);e=c[f>>2]|0}}do if(e&65536|0?(g=c[d+8>>2]|0,g|0):0){if(b|0){if(c[b+480>>2]|0){Xd(b,g);break}e=g;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[g>>2]=c[e>>2];c[e>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{e=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);if(c[f>>2]&134217728|0)return;if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}g=d;if((c[b+304>>2]|0)>>>0<=g>>>0?(c[b+308>>2]|0)>>>0>g>>>0:0){g=b+300|0;c[d>>2]=c[g>>2];c[g>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{g=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function oi(a,b){a=a|0;b=b|0;var d=0,e=0;if(!b)return;d=c[b+36>>2]|0;if(d|0)ni(a,d);d=c[b+8>>2]|0;if(d|0)ri(a,d);d=c[b+12>>2]|0;if(d|0)ri(a,d);d=c[b+28>>2]|0;if(d|0)ni(a,d);d=c[b+24>>2]|0;if(d|0)ni(a,d);d=c[b>>2]|0;do if(d|0){if(a|0){if(c[a+480>>2]|0){Xd(a,d);break}e=d;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);d=c[b+4>>2]|0;a:do if(d){do if(a|0){if(!(c[a+480>>2]|0)){e=d;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[d>>2]=c[e>>2];c[e>>2]=d}else Xd(a,d);d=b;e=34;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=33;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=33;break}}else e=33;while(0);if((e|0)==33)if(a){d=b;e=34}if((e|0)==34){if(c[a+480>>2]|0){Xd(a,d);return}e=b;if((c[a+304>>2]|0)>>>0<=e>>>0?(c[a+308>>2]|0)>>>0>e>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}else b=d}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function pi(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;if(!b)return;j=(a|0)==0;k=a+480|0;l=a+304|0;m=a+308|0;n=a+300|0;while(1){i=b;b=c[b+52>>2]|0;e=c[i>>2]|0;if(e|0)ri(a,e);qi(a,c[i+32>>2]|0);e=c[i+36>>2]|0;if(e|0)ni(a,e);e=c[i+40>>2]|0;if(e|0)ri(a,e);e=c[i+44>>2]|0;if(e|0)ni(a,e);e=c[i+48>>2]|0;if(e|0)ri(a,e);e=c[i+60>>2]|0;if(e|0)ni(a,e);e=c[i+72>>2]|0;if(e|0)do{h=e;e=c[e+32>>2]|0;oi(a,h)}while((e|0)!=0);h=c[i+64>>2]|0;do if(h|0){a:do if((c[h>>2]|0)>0){if(j){f=0;while(1){e=c[h+8+(f<<4)+4>>2]|0;if(e|0)ri(0,e);e=c[h+8+(f<<4)+8>>2]|0;if(e|0)pi(0,e,1);e=c[h+8+(f<<4)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{g=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;if((f|0)>=(c[h>>2]|0))break a}}g=0;do{e=c[h+8+(g<<4)+4>>2]|0;if(e|0)ri(a,e);e=c[h+8+(g<<4)+8>>2]|0;if(e|0)pi(a,e,1);e=c[h+8+(g<<4)>>2]|0;b:do if(e|0){if(c[k>>2]|0){Xd(a,e);break}f=e;do if((c[l>>2]|0)>>>0<=f>>>0){if((c[m>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[n>>2];c[n>>2]=e;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);g=g+1|0}while((g|0)<(c[h>>2]|0))}while(0);if(!j){if(c[k>>2]|0){Xd(a,h);break}g=h;if((c[l>>2]|0)>>>0<=g>>>0?(c[m>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(d|0){if(!j){if(c[k>>2]|0){Xd(a,i);break}h=i;if((c[l>>2]|0)>>>0<=h>>>0?(c[m>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[n>>2];c[n>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!b)break;else d=1}return}function qi(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;if(!d)return;if((c[d>>2]|0)>0){n=(b|0)==0;o=b+480|0;q=b+304|0;r=b+308|0;l=b+300|0;j=0;k=d+8|0;while(1){e=c[k+4>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+8>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[k+12>>2]|0;do if(e|0){if(!n){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=k+37|0;do if(a[e>>0]&2?(p=c[k+64>>2]|0,p|0):0){if(!n){if(c[o>>2]|0){Xd(b,p);break}i=p;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[p>>2]=c[l>>2];c[l>>2]=p;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{i=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);if(a[e>>0]&4?(m=c[k+64>>2]|0,m|0):0)ri(b,m);e=c[k+16>>2]|0;do if(e|0){if(!n?c[o>>2]|0:0){Vi(b,e);break}h=e+32|0;i=(c[h>>2]|0)+-1|0;c[h>>2]=i;if(!i)Vi(b,e)}while(0);e=c[k+20>>2]|0;if(e|0)pi(b,e,1);e=c[k+44>>2]|0;if(e|0)ni(b,e);e=c[k+48>>2]|0;do if(e|0){i=e+4|0;f=c[e>>2]|0;a:do if((c[i>>2]|0)>0){if(n){g=0;while(1){f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[e>>2]|0;if((g|0)>=(c[i>>2]|0))break a}}h=0;do{f=c[f+(h<<3)>>2]|0;b:do if(f|0){if(c[o>>2]|0){Xd(b,f);break}g=f;do if((c[q>>2]|0)>>>0<=g>>>0){if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;f=c[e>>2]|0}while((h|0)<(c[i>>2]|0))}while(0);c:do if(f){do if(!n){if(!(c[o>>2]|0)){g=f;if((c[q>>2]|0)>>>0>g>>>0)break;if((c[r>>2]|0)>>>0<=g>>>0)break;c[f>>2]=c[l>>2];c[l>>2]=f}else Xd(b,f);f=90;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);f=89;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);f=89;break}}else f=89;while(0);if((f|0)==89){f=0;if(!n)f=90}if((f|0)==90){if(c[o>>2]|0){Xd(b,e);break}i=e;if((c[q>>2]|0)>>>0<=i>>>0?(c[r>>2]|0)>>>0>i>>>0:0){c[e>>2]=c[l>>2];c[l>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);j=j+1|0;if((j|0)>=(c[d>>2]|0))break;else k=k+72|0}}if(b|0){if(c[b+480>>2]|0){Xd(b,d);return}r=d;if((c[b+304>>2]|0)>>>0<=r>>>0?(c[b+308>>2]|0)>>>0>r>>>0:0){r=b+300|0;c[d>>2]=c[r>>2];c[r>>2]=d;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{r=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ri(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=c[b>>2]|0;d=b+4|0;g=(a|0)==0;h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(g){f=e;while(1){e=c[d>>2]|0;if(e|0)ni(0,e);e=c[d+4>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}else{f=e;while(1){e=c[d>>2]|0;if(e|0)ni(a,e);e=c[d+4>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);e=c[d+8>>2]|0;do if(e|0){if(c[h>>2]|0){Xd(a,e);break}l=e;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[e>>2]=c[k>>2];c[k>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);if((f|0)>1){d=d+20|0;f=f+-1|0}else break}}if(!g){if(c[h>>2]|0){Xd(a,b);return}l=b;if((c[i>>2]|0)>>>0<=l>>>0?(c[j>>2]|0)>>>0>l>>>0:0){c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{l=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function si(e,f,g,h){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,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;P=Ra;Ra=Ra+176|0;O=P+144|0;I=P+120|0;H=P+112|0;G=P+104|0;F=P+96|0;E=P+72|0;D=P+64|0;C=P+56|0;B=P+32|0;K=P+24|0;J=P+16|0;A=P+8|0;z=P;w=P+164|0;x=P+160|0;y=P+156|0;M=e+20|0;N=c[M>>2]|0;a:do if(!g)i=h;else{r=e+16|0;s=e+12|0;q=e+8|0;t=e+4|0;u=(f|0)==0;v=e+24|0;i=h;while(1){if(!(c[r>>2]|0))break a;if((g+-1|0)>>>0>=(c[s>>2]|0)>>>0){L=5;break}j=(c[q>>2]|0)+(g>>>3)|0;k=d[j>>0]|0;l=1<<(g&7);if(l&k|0){L=7;break}a[j>>0]=l|k;o=i+-1|0;p=c[t>>2]|0;if(Za[c[p+204>>2]&127](p,g,y,0)|0){L=9;break}p=c[(c[y>>2]|0)+4>>2]|0;do if(u){i=c[e>>2]|0;if((o|0)!=0&(a[i+17>>0]|0)!=0){k=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];i=eg(i,k,w,x)|0;b:do if((i|0)<7){switch(i|0){case 0:break;default:{L=40;break b}}i=a[w>>0]|0;j=c[x>>2]|0;if(!(i<<24>>24==4&(j|0)==(g|0))){c[I>>2]=k;c[I+4>>2]=4;c[I+8>>2]=g;c[I+12>>2]=i&255;c[I+16>>2]=j;ti(e,35625,I)}}else{if((i|0)<3082)switch(i|0){case 7:break;default:{L=40;break b}}else switch(i|0){case 3082:break;default:{L=40;break b}}c[v>>2]=1;L=40}while(0);if((L|0)==40){L=0;c[H>>2]=k;ti(e,35596,H)}i=o}else i=o}else{n=d[p+5>>0]<<16|d[p+4>>0]<<24|d[p+6>>0]<<8|d[p+7>>0];j=c[e>>2]|0;if(a[j+17>>0]|0){j=eg(j,g,w,x)|0;c:do if((j|0)<7){switch(j|0){case 0:break;default:{L=14;break c}}j=a[w>>0]|0;k=c[x>>2]|0;if(!(j<<24>>24==2&(k|0)==0)){c[B>>2]=g;c[B+4>>2]=2;c[B+8>>2]=0;c[B+12>>2]=j&255;c[B+16>>2]=k;ti(e,35625,B)}}else{if((j|0)<3082)switch(j|0){case 7:break;default:{L=14;break c}}else switch(j|0){case 3082:break;default:{L=14;break c}}c[v>>2]=1;L=14}while(0);if((L|0)==14){L=0;c[K>>2]=g;ti(e,35596,K)}j=c[e>>2]|0}if(n>>>0>(((c[j+36>>2]|0)>>>2)+-2|0)>>>0){c[C>>2]=g;ti(e,35455,C);i=i+-2|0;break}d:do if((n|0)>0){i=0;while(1){m=p+((i<<2)+8)|0;l=d[m+3>>0]|0;m=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|l;if(a[j+17>>0]|0){g=eg(j,m,w,x)|0;e:do if((g|0)<7){switch(g|0){case 0:break;default:{L=25;break e}}j=a[w>>0]|0;g=c[x>>2]|0;if(!(j<<24>>24==2&(g|0)==0)){c[E>>2]=m;c[E+4>>2]=2;c[E+8>>2]=0;c[E+12>>2]=j&255;c[E+16>>2]=g;ti(e,35625,E)}}else{if((g|0)<3082)switch(g|0){case 7:break;default:{L=25;break e}}else switch(g|0){case 3082:break;default:{L=25;break e}}c[v>>2]=1;L=25}while(0);if((L|0)==25){L=0;c[D>>2]=m;ti(e,35596,D)}}do if((m+-1|0)>>>0<(c[s>>2]|0)>>>0){j=(c[q>>2]|0)+(m>>>3)|0;k=d[j>>0]|0;g=1<<(l&7);if(!(g&k)){a[j>>0]=g|k;break}else{c[G>>2]=m;ti(e,35569,G);break}}else{c[F>>2]=m;ti(e,35546,F)}while(0);i=i+1|0;if((i|0)==(n|0))break d;j=c[e>>2]|0}}while(0);i=o-n|0}while(0);g=d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0];j=c[y>>2]|0;do if(j|0)if(!(b[j+28>>1]&32)){Df(j);break}else{p=c[j+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[j+16>>2]=c[p>>2];c[p>>2]=j;break}while(0);if(!g)break a}if((L|0)==5){c[z>>2]=g;ti(e,35546,z)}else if((L|0)==7){c[A>>2]=g;ti(e,35569,A)}else if((L|0)==9){c[J>>2]=g;ti(e,35433,J);i=o}}while(0);if(!i){Ra=P;return}if((N|0)!=(c[M>>2]|0)){Ra=P;return}c[O>>2]=(f|0)==0?35525:35520;c[O+4>>2]=h-i;c[O+8>>2]=h;ti(e,35494,O);Ra=P;return}function ti(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=Ra;Ra=Ra+32|0;i=j+16|0;h=j;f=b+16|0;g=c[f>>2]|0;if(!g){Ra=j;return}c[f>>2]=g+-1;f=b+20|0;c[f>>2]=(c[f>>2]|0)+1;c[h>>2]=e;f=b+40|0;if(c[b+56>>2]|0)ub(f,35594,1);g=c[b+28>>2]|0;if(g|0){e=c[b+36>>2]|0;c[i>>2]=c[b+32>>2];c[i+4>>2]=e;Eb(f,g,i)}tb(f,d,h);if((a[b+60>>0]|0)!=7){Ra=j;return}c[b+24>>2]=1;Ra=j;return}function ui(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0,la=0,ma=0;ma=Ra;Ra=Ra+240|0;fa=ma+216|0;da=ma+208|0;U=ma+200|0;T=ma+176|0;S=ma+168|0;R=ma+144|0;Q=ma+136|0;P=ma+128|0;O=ma+120|0;N=ma+104|0;t=ma+80|0;s=ma+72|0;q=ma+64|0;p=ma+56|0;o=ma+48|0;n=ma+40|0;k=ma+32|0;K=ma+232|0;L=ma+228|0;W=ma+24|0;M=ma;ga=W;c[ga>>2]=i;c[ga+4>>2]=j;ga=f+28|0;ha=c[ga>>2]|0;ia=f+32|0;ja=c[ia>>2]|0;ka=f+36|0;la=c[ka>>2]|0;u=c[f>>2]|0;ea=c[u+36>>2]|0;if(!g){la=0;Ra=ma;return la|0}if((g+-1|0)>>>0>=(c[f+12>>2]|0)>>>0){c[k>>2]=g;ti(f,35546,k);la=0;Ra=ma;return la|0}k=(c[f+8>>2]|0)+(g>>>3)|0;l=d[k>>0]|0;m=1<<(g&7);if(m&l|0){c[n>>2]=g;ti(f,35569,n);la=0;Ra=ma;return la|0}a[k>>0]=m|l;c[ga>>2]=35679;c[ia>>2]=g;k=c[u>>2]|0;k=Za[c[k+204>>2]&127](k,g,K,0)|0;a:do if(!k){k=c[K>>2]|0;ca=c[k+8>>2]|0;l=ca+4|0;if((c[l>>2]|0)!=(g|0)){c[ca+56>>2]=c[k+4>>2];c[ca+72>>2]=k;c[ca+52>>2]=u;c[l>>2]=g;a[ca+9>>0]=(g|0)==1?100:0}J=a[ca>>0]|0;a[ca>>0]=0;k=Gf(ca)|0;do if(!k){k=Jh(ca)|0;if(k|0){c[q>>2]=k;ti(f,35765,q);k=-1;break}aa=c[ca+56>>2]|0;ba=d[ca+9>>0]|0;c[ga>>2]=35787;l=aa+(ba+5)|0;l=(d[l>>0]<<8|d[l+1>>0])+65535&65535;H=l+1|0;o=aa+(ba+3)|0;o=d[o>>0]<<8|d[o+1>>0];I=ca+8|0;G=a[I>>0]|0;X=ba+12-((G&255)<<2)|0;r=o+-1|0;p=aa+(X+(r<<1))|0;if(!(G<<24>>24)){n=aa+(ba+8)|0;n=d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0];if(a[u+17>>0]|0){c[ga>>2]=35813;k=eg(c[f>>2]|0,n,K,L)|0;b:do if((k|0)<7){switch(k|0){case 0:break;default:{V=18;break b}}k=a[K>>0]|0;m=c[L>>2]|0;if(!(k<<24>>24==5&(m|0)==(g|0))){c[t>>2]=n;c[t+4>>2]=5;c[t+8>>2]=g;c[t+12>>2]=k&255;c[t+16>>2]=m;ti(f,35625,t)}}else{if((k|0)<3082)switch(k|0){case 7:break;default:{V=18;break b}}else switch(k|0){case 3082:break;default:{V=18;break b}}c[f+24>>2]=1;V=18}while(0);if((V|0)==18){c[s>>2]=n;ti(f,35596,s)}}k=ui(f,n,W,i,j)|0;n=0;i=0}else{i=c[f+64>>2]|0;c[i>>2]=0;k=-1;n=1}F=f+16|0;G=(o|0)==0;if(!G){y=ea+-4|0;z=ca+80|0;A=M+18|0;B=ca+2|0;C=M+12|0;D=M+16|0;E=ea+-5|0;w=u+17|0;x=f+24|0;v=r;m=1;u=p;while(1){if(!(c[F>>2]|0))break;c[ka>>2]=v;j=d[u>>0]<<8|d[u+1>>0];u=u+-2|0;c:do if(j>>>0<=l>>>0|j>>>0>y>>>0){c[N>>2]=j;c[N+4>>2]=H;c[N+8>>2]=y;ti(f,35841,N);m=0}else{t=aa+j|0;cb[c[z>>2]&255](ca,t,M);if((j+(e[A>>1]|0)|0)>>>0>ea>>>0){ti(f,35871,O);m=0;break}if(a[B>>0]|0){s=M;o=c[s>>2]|0;s=c[s+4>>2]|0;q=W;p=c[q>>2]|0;q=c[q+4>>2]|0;if(!n)if((s|0)<(q|0)|(s|0)==(q|0)&o>>>0

      >>0)n=s;else V=36;else if((s|0)>(q|0)|(s|0)==(q|0)&o>>>0>p>>>0)V=36;else n=s;if((V|0)==36){V=0;n=P;c[n>>2]=o;c[n+4>>2]=s;ti(f,35895,P);n=M;o=c[n>>2]|0;n=c[n+4>>2]|0}s=W;c[s>>2]=o;c[s+4>>2]=n;n=0}o=c[C>>2]|0;p=e[D>>1]|0;if(o>>>0>p>>>0){q=((E+o-p|0)>>>0)/(y>>>0)|0;s=t+((e[A>>1]|0)+-4)|0;s=d[s+1>>0]<<16|d[s>>0]<<24|d[s+2>>0]<<8|d[s+3>>0];if(a[w>>0]|0){o=eg(c[f>>2]|0,s,K,L)|0;d:do if((o|0)<7){switch(o|0){case 0:break;default:{V=42;break d}}o=a[K>>0]|0;p=c[L>>2]|0;if(o<<24>>24==3&(p|0)==(g|0))break;c[R>>2]=s;c[R+4>>2]=3;c[R+8>>2]=g;c[R+12>>2]=o&255;c[R+16>>2]=p;ti(f,35625,R)}else{if((o|0)<3082)switch(o|0){case 7:break;default:{V=42;break d}}else switch(o|0){case 3082:break;default:{V=42;break d}}c[x>>2]=1;V=42}while(0);if((V|0)==42){V=0;c[Q>>2]=s;ti(f,35596,Q)}}si(f,0,s,q)}if(a[I>>0]|0){p=j+-1+(e[A>>1]|0)|j<<16;o=(c[i>>2]|0)+1|0;c[i>>2]=o;c[i+(o<<2)>>2]=p;q=o>>>1;if(!q)break;s=i+(q<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break;while(1){c[s>>2]=p;c[i+(o<<2)>>2]=j;o=q>>>1;if(!o)break c;p=c[s>>2]|0;s=i+(o<<2)|0;j=c[s>>2]|0;if(j>>>0<=p>>>0)break c;else{t=q;q=o;o=t}}}p=d[t+1>>0]<<16|d[t>>0]<<24|d[t+2>>0]<<8|d[t+3>>0];if(a[w>>0]|0){n=eg(c[f>>2]|0,p,K,L)|0;e:do if((n|0)<7){switch(n|0){case 0:break;default:{V=51;break e}}n=a[K>>0]|0;o=c[L>>2]|0;if(n<<24>>24==5&(o|0)==(g|0))break;c[T>>2]=p;c[T+4>>2]=5;c[T+8>>2]=g;c[T+12>>2]=n&255;c[T+16>>2]=o;ti(f,35625,T)}else{if((n|0)<3082)switch(n|0){case 7:break;default:{V=51;break e}}else switch(n|0){case 3082:break;default:{V=51;break e}}c[x>>2]=1;V=51}while(0);if((V|0)==51){V=0;c[S>>2]=p;ti(f,35596,S)}}n=W;n=ui(f,p,W,c[n>>2]|0,c[n+4>>2]|0)|0;if((n|0)==(k|0)){n=0;break}ti(f,35919,U);k=n;n=0}while(0);if((v|0)<=0)break;else v=v+-1|0}U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0;if(!m){a[ca>>0]=J;break}}else{U=W;V=c[U+4>>2]|0;W=h;c[W>>2]=c[U>>2];c[W+4>>2]=V;c[ga>>2]=0}f:do if((c[F>>2]|0)>0){if(!(a[I>>0]|0)){i=c[f+64>>2]|0;c[i>>2]=0;if(!G){s=ca+76|0;while(1){n=aa+((r<<1)+X)|0;n=d[n>>0]<<8|d[n+1>>0];n=n+-1+((Xa[c[s>>2]&255](ca,aa+n|0)|0)&65535)|n<<16;m=(c[i>>2]|0)+1|0;c[i>>2]=m;c[i+(m<<2)>>2]=n;o=m>>>1;g:do if(o|0?(Y=i+(o<<2)|0,Z=c[Y>>2]|0,Z>>>0>n>>>0):0){p=Y;q=Z;while(1){c[p>>2]=n;c[i+(m<<2)>>2]=q;m=o>>>1;if(!m)break g;n=c[p>>2]|0;p=i+(m<<2)|0;q=c[p>>2]|0;if(q>>>0<=n>>>0)break;else{W=o;o=m;m=W}}}while(0);if((r|0)>0)r=r+-1|0;else break}}}m=aa+(ba+1)|0;m=d[m>>0]<<8|d[m+1>>0];if(m|0)do{o=aa+(m+2)|0;o=m+-1+(d[o>>0]<<8|d[o+1>>0])|m<<16;n=(c[i>>2]|0)+1|0;c[i>>2]=n;c[i+(n<<2)>>2]=o;p=n>>>1;h:do if(p|0?(_=i+(p<<2)|0,$=c[_>>2]|0,$>>>0>o>>>0):0){q=_;r=$;while(1){c[q>>2]=o;c[i+(n<<2)>>2]=r;n=p>>>1;if(!n)break h;o=c[q>>2]|0;q=i+(n<<2)|0;r=c[q>>2]|0;if(r>>>0<=o>>>0)break;else{Z=p;p=n;n=Z}}}while(0);Z=aa+m|0;m=d[Z>>0]<<8|d[Z+1>>0]}while((m|0)!=0);n=c[i>>2]|0;i:do if(n){t=i+4|0;m=0;while(1){j=c[t>>2]|0;n=i+(n<<2)|0;c[t>>2]=c[n>>2];c[n>>2]=-1;n=(c[i>>2]|0)+-1|0;c[i>>2]=n;j:do if(n>>>0>=2){s=c[t>>2]|0;r=1;o=2;do{p=o|1;q=r;r=(c[i+(o<<2)>>2]|0)>>>0>(c[i+(p<<2)>>2]|0)>>>0?p:o;o=i+(r<<2)|0;p=c[o>>2]|0;if(s>>>0

      >>0)break j;c[i+(q<<2)>>2]=p;c[o>>2]=s;o=r<<1;n=c[i>>2]|0}while(o>>>0<=n>>>0)}while(0);o=l&65535;p=j>>>16;if(p>>>0<=o>>>0)break;m=m+-1-o+p|0;if(!n){l=j;break i}else l=j}c[da>>2]=p;c[da+4>>2]=g;ti(f,35944,da);if(c[i>>2]|0)break f}else m=0;while(0);m=m+-1+ea-(l&65535)|0;l=d[aa+(ba+7)>>0]|0;if((m|0)!=(l|0)){c[fa>>2]=m;c[fa+4>>2]=l;c[fa+8>>2]=g;ti(f,35981,fa)}}while(0);if(!ca)break a}else{c[p>>2]=k;ti(f,35727,p);k=-1}while(0);l=c[ca+72>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{fa=c[l+20>>2]|0;g=fa+120|0;c[g>>2]=(c[g>>2]|0)+-1;fa=fa+136|0;c[l+16>>2]=c[fa>>2];c[fa>>2]=l;break}}else{c[o>>2]=k;ti(f,35689,o);k=-1}while(0);c[ga>>2]=ha;c[ia>>2]=ja;c[ka>>2]=la;la=k+1|0;Ra=ma;return la|0}function vi(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=c[a>>2]|0;g=a+4|0;if(d|0)do{e=d;d=c[d>>2]|0;f=c[g>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,e);break}i=e;if((c[f+304>>2]|0)>>>0<=i>>>0?(c[f+308>>2]|0)>>>0>i>>>0:0){i=f+300|0;c[e>>2]=c[i>>2];c[i>>2]=e}else h=9}else h=9;while(0);do if((h|0)==9){h=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0)}while((d|0)!=0);c[a>>2]=0;b[a+24>>1]=0;c[a+8>>2]=0;c[a+12>>2]=0;c[a+20>>2]=0;b[a+26>>1]=1;d=c[g>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,a);return}i=a;if((c[d+304>>2]|0)>>>0<=i>>>0?(c[d+308>>2]|0)>>>0>i>>>0:0){i=d+300|0;c[a>>2]=c[i>>2];c[i>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{i=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function wi(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;e=g;f=c[a+12>>2]|0;if(!f)c[b>>2]=a;else{wi(f,b,e);c[(c[e>>2]|0)+8>>2]=a}e=a+8|0;b=c[e>>2]|0;if(!b){c[d>>2]=a;Ra=g;return}else{wi(b,e,d);Ra=g;return}}function xi(a,b){a=a|0;b=b|0;var d=0,e=0;d=c[a>>2]|0;if(!d){a=0;return a|0}if((b|0)<=1){e=d+8|0;c[a>>2]=c[e>>2];c[e>>2]=0;c[d+12>>2]=0;a=d;return a|0}b=b+-1|0;d=xi(a,b)|0;e=c[a>>2]|0;if(!e){a=d;return a|0}else{c[e+12>>2]=d;d=e+8|0;c[a>>2]=c[d>>2];a=xi(a,b)|0;c[d>>2]=a;return e|0}return 0}function yi(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=Ra;Ra=Ra+16|0;g=f;c[g>>2]=e;d=Me(a,d,g)|0;if(!d){g=7;Ra=f;return g|0}g=zi(a,b,d)|0;lb(a,d);Ra=f;return g|0}function zi(d,f,g){d=d|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=Ra;Ra=Ra+16|0;h=o;g=qd(d,g,-1,128,0,h,0)|0;if(g|0){f=g;Ra=o;return f|0}n=c[h>>2]|0;g=Gc(n)|0;a:do if((g|0)==100){j=n+120|0;k=n+144|0;l=n+40|0;if(!n)while(1){g=Gc(0)|0;if((g|0)!=100)break a}do{g=c[j>>2]|0;if(!((g|0)!=0?(b[k>>1]|0)!=0:0)){g=c[n>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)i=c[g+16>>2]|0;else if(!(h&1))i=Gg(g,1)|0;else i=0;g=c[n>>2]|0;h=c[l>>2]|0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7}else g=c[g+68>>2]&h;c[l>>2]=g;do if(i|0){if(av(i,36682,3)|0?av(i,36686,3)|0:0)break;g=zi(d,f,i)|0;if(g|0)break a}while(0);g=Gc(n)|0}while((g|0)==100)}while(0);l=(g|0)==101?0:g;if(l|0){k=pd(d)|0;g=c[f>>2]|0;do if(g|0){if(d|0){if(c[d+480>>2]|0){Xd(d,g);break}j=g;if((c[d+304>>2]|0)>>>0<=j>>>0?(c[d+308>>2]|0)>>>0>j>>>0:0){j=d+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);b:do if(!k)g=0;else{j=(Eu(k)|0)+1|0;c:do if(!d){d=Sv(j|0,0,-1,-1)|0;i=L()|0;if(i>>>0>0|(i|0)==0&d>>>0>2147483390){g=0;break b}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](j)|0;m=59;break}g=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0>>0)c[14985]=j;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){d=c[14978]|0;i=Tv(h|0,i|0,g|0,((g|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=d>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){g=0;break b}h=Wa[c[29352>>2]&127](g)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[d+272>>2]|0){if(a[d+81>>0]|0){g=0;break b}}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0>>0:0))){h=d+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}h=d+296|0;g=c[h>>2]|0;if(!g){g=d+292|0;break}else{c[h>>2]=c[g>>2];m=d+284|0;c[m>>2]=(c[m>>2]|0)+1;m=59;break c}}else g=d+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(d,j,0)|0;m=59}while(0);if((m|0)==59)if(!g){g=0;break}ew(g|0,k|0,j|0)|0}while(0);c[f>>2]=g}gc(n)|0;f=l;Ra=o;return f|0}function Ai(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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=Ra;Ra=Ra+48|0;u=D+24|0;x=D+16|0;w=D+8|0;l=D;q=D+32|0;v=D+28|0;p=g+60|0;s=c[p>>2]|0;r=c[g+56>>2]|0;c[v>>2]=0;t=f+352|0;k=c[t>>2]|0;a:do if(k|0){while(1){if((c[k+4>>2]|0)==(g|0))break;k=c[k+8>>2]|0;if(!k)break a}c[l>>2]=c[g>>2];f=dd(f,36709,l)|0;c[j>>2]=f;f=6;Ra=D;return f|0}while(0);n=c[g>>2]|0;if(!n){f=7;Ra=D;return f|0}o=(Eu(n)|0)+1|0;z=(f|0)==0;b:do if(z){y=Sv(o|0,0,-1,-1)|0;m=L()|0;if(m>>>0>0|(m|0)==0&y>>>0>2147483390){f=7;Ra=D;return f|0}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;A=31;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){y=c[14978]|0;m=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=y>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){f=7;Ra=D;return f|0}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;y=l}else y=l}else{if(c[f+272>>2]|0){if(a[f+81>>0]|0){f=7;Ra=D;return f|0}}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0>>0:0))){l=f+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}l=f+296|0;k=c[l>>2]|0;if(!k){k=f+292|0;break}else{c[l>>2]=c[k>>2];A=f+284|0;c[A>>2]=(c[A>>2]|0)+1;A=31;break b}}else k=f+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(f,o,0)|0;A=31}while(0);if((A|0)==31)if(!k){f=7;Ra=D;return f|0}else y=k;ew(y|0,n|0,o|0)|0;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](28)|0;if(!k)A=43;else n=k}else{k=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){o=c[14978]|0;n=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=o>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;n=l}else n=l}else A=43}if((A|0)==43){k=f+81|0;if((a[k>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[k>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;k=f+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[f+236>>2]|0;if(k|0)c[k+12>>2]=7}if(c[f+480>>2]|0){Xd(f,y);f=7;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=7;Ra=D;return f|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=7;Ra=D;return f|0}}k=n+8|0;l=k+20|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(l|0));c[n>>2]=f;c[n+4>>2]=h;l=c[g+72>>2]|0;m=c[f+16>>2]|0;if(!l)k=-1e6;else{k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0))break;else k=k+1|0}c[(c[p>>2]|0)+4>>2]=c[m+(k<<4)>>2];c[q+4>>2]=g;c[q>>2]=n;p=q+8|0;c[p>>2]=c[t>>2];l=q+12|0;c[l>>2]=0;c[t>>2]=q;m=n+8|0;k=$a[i&127](f,c[h+8>>2]|0,r,s,m,v)|0;c[t>>2]=c[p>>2];c:do switch(k|0){case 7:{l=f+81|0;if((a[l>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[l>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;l=f+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[f+236>>2]|0;if(l){c[l+12>>2]=7;A=67}else A=67}else A=67;break}case 0:{k=c[m>>2]|0;if(k){c[k>>2]=0;c[k+4>>2]=0;c[k+8>>2]=0;c[c[m>>2]>>2]=c[h>>2];k=n+12|0;c[k>>2]=1;if(!(c[l>>2]|0)){c[u>>2]=c[g>>2];l=dd(f,36781,u)|0;c[j>>2]=l;l=c[n>>2]|0;C=(c[k>>2]|0)+-1|0;c[k>>2]=C;if(C|0){k=1;A=117;break c}k=c[m>>2]|0;if(k|0)Wa[c[(c[k>>2]|0)+16>>2]&127](k)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,n);k=1;A=117;break c}C=n;if((c[l+304>>2]|0)>>>0<=C>>>0?(c[l+308>>2]|0)>>>0>C>>>0:0){k=l+300|0;c[n>>2]=c[k>>2];c[k>>2]=n;k=1;A=117;break c}}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);k=1;A=117;break c}else{k=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);k=1;A=117;break c}}h=g+64|0;c[n+24>>2]=c[h>>2];c[h>>2]=n;h=g+42|0;k=b[h>>1]|0;if(k<<16>>16>0){u=g+4|0;t=g+36|0;m=0;s=0;l=c[u>>2]|0;do{if(!(a[l+(s<<4)+15>>0]&4))i=59952;else{i=c[l+(s<<4)>>2]|0;i=i+(Eu(i)|0)+1|0}q=(Eu(i)|0)&1073741823;d:do if(!q)A=114;else{n=0;e:while(1){r=i+n|0;do if(r|0){j=d[r>>0]|0;o=208+j|0;do if((j|32|0)==104){o=r+1|0;j=d[o>>0]|0;p=208+j|0;if((j|32|0)==105){o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=100){B=208+p|0;C=100;A=103;break}o=o+1|0;p=d[o>>0]|0;if((p|32|0)!=101){B=208+p|0;C=101;A=103;break}o=d[o+1>>0]|0;if((o|32|0)!=110){B=208+o|0;C=110;A=103}}else{B=p;C=105;A=103}}else{B=o;C=104;A=103}while(0);if((A|0)==103?(A=0,(C|0)!=(d[B>>0]|0)):0)break;if(n|0?(a[i+(n+-1)>>0]|0)!=32:0)break;o=a[i+(n+6)>>0]|0;switch(o<<24>>24){case 32:case 0:break e;default:{}}}while(0);n=n+1|0;if(n>>>0>=q>>>0){A=114;break d}}o=o<<24>>24==0?6:7;k=n+o|0;if(k>>>0<=q>>>0){m=q+1-o|0;l=n;while(1){a[i+l>>0]=a[i+k>>0]|0;k=l+1|0;if((k|0)==(m|0))break;else{l=k;k=k+o|0}}}if((n|0)!=0&(a[r>>0]|0)==0)a[i+(n+-1)>>0]=0;l=c[u>>2]|0;m=l+(s<<4)+15|0;a[m>>0]=a[m>>0]|2;m=-128;k=b[h>>1]|0}while(0);if((A|0)==114){A=0;c[t>>2]=c[t>>2]|m&255}s=s+1|0}while((s|0)<(k<<16>>16|0))}if(z)k=0;else{k=0;A=117}}else{k=0;A=117}break}default:A=67}while(0);do if((A|0)==67){l=c[v>>2]|0;do if(l){c[x>>2]=l;l=dd(f,31408,x)|0;c[j>>2]=l;l=c[v>>2]|0;if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{c[w>>2]=y;C=dd(f,36751,w)|0;c[j>>2]=C}while(0);if(c[f+480>>2]|0){Xd(f,n);A=117;break}C=n;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){A=f+300|0;c[n>>2]=c[A>>2];c[A>>2]=n;A=117;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](n);A=117;break}else{A=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);A=117;break}}while(0);if((A|0)==117){if(c[f+480>>2]|0){Xd(f,y);f=k;Ra=D;return f|0}C=y;if((c[f+304>>2]|0)>>>0<=C>>>0?(c[f+308>>2]|0)>>>0>C>>>0:0){f=f+300|0;c[y>>2]=c[f>>2];c[f>>2]=y;f=k;Ra=D;return f|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}else{f=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);f=k;Ra=D;return f|0}return 0}function Bi(b,f){b=b|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;i=a[b>>0]|0;do switch(a[3696+(i&255)>>0]|0){case 7:{g=1;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&1))break;else g=g+1|0;c[f>>2]=174;f=g;return f|0}case 11:{if((a[b+1>>0]|0)!=45){c[f>>2]=101;f=1;return f|0}g=2;a:while(1){switch(a[b+g>>0]|0){case 0:case 10:break a;default:{}}g=g+1|0}c[f>>2]=174;f=g;return f|0}case 17:{c[f>>2]=22;f=1;return f|0}case 18:{c[f>>2]=23;f=1;return f|0}case 19:{c[f>>2]=1;f=1;return f|0}case 20:{c[f>>2]=100;f=1;return f|0}case 21:{c[f>>2]=102;f=1;return f|0}case 16:{if((a[b+1>>0]|0)==42?(g=a[b+2>>0]|0,g<<24>>24):0){h=a[b+3>>0]|0;b:do if(g<<24>>24==42&h<<24>>24==47){h=1;g=3}else{g=3;while(1){if(!(h<<24>>24)){h=0;break b}g=g+1|0;k=h;h=a[b+g>>0]|0;if(k<<24>>24==42&h<<24>>24==47){h=1;break}}}while(0);c[f>>2]=174;f=h+g|0;return f|0}c[f>>2]=103;f=1;return f|0}case 22:{c[f>>2]=104;f=1;return f|0}case 14:{c[f>>2]=53;f=(a[b+1>>0]|0)==61?2:1;return f|0}case 12:switch(a[b+1>>0]|0){case 61:{c[f>>2]=55;f=2;return f|0}case 62:{c[f>>2]=52;f=2;return f|0}case 60:{c[f>>2]=98;f=2;return f|0}default:{c[f>>2]=56;f=1;return f|0}}case 13:switch(a[b+1>>0]|0){case 61:{c[f>>2]=57;f=2;return f|0}case 62:{c[f>>2]=99;f=2;return f|0}default:{c[f>>2]=54;f=1;return f|0}}case 15:if((a[b+1>>0]|0)==61){c[f>>2]=52;f=2;return f|0}else{c[f>>2]=175;f=1;return f|0}case 10:if((a[b+1>>0]|0)==124){c[f>>2]=105;f=2;return f|0}else{c[f>>2]=97;f=1;return f|0}case 23:{c[f>>2]=26;f=1;return f|0}case 24:{c[f>>2]=96;f=1;return f|0}case 25:{c[f>>2]=107;f=1;return f|0}case 8:{h=a[b+1>>0]|0;c:do if(h<<24>>24){g=1;while(1){if(h<<24>>24==i<<24>>24){g=g+1|0;if((a[b+g>>0]|0)!=i<<24>>24)break}g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24))break c}if(i<<24>>24==39){c[f>>2]=110;f=g;return f|0}else{c[f>>2]=59;f=g;return f|0}}else g=1;while(0);c[f>>2]=175;f=g;return f|0}case 26:{if(((d[b+1>>0]|0)+-48|0)>>>0>=10){c[f>>2]=134;f=1;return f|0}break}case 3:break;case 9:{d:do if(i<<24>>24==93){g=1;h=59}else{g=1;while(1){h=a[b+g>>0]|0;if(!(h<<24>>24)){h=175;break d}g=g+1|0;if(h<<24>>24==93){h=59;break}}}while(0);c[f>>2]=h;f=g;return f|0}case 6:{c[f>>2]=148;g=1;while(1)if(((d[b+g>>0]|0)+-48|0)>>>0<10)g=g+1|0;else break;return g|0}case 5:case 4:{c[f>>2]=148;h=a[b+1>>0]|0;if(h<<24>>24){j=0;g=1;while(1){if(!(a[880+(h&255)>>0]&70)){if((j|0)>0&h<<24>>24==40){k=91;break}if(h<<24>>24!=58){h=j;break}h=g+1|0;if((a[b+h>>0]|0)==58){i=j;g=h}else{h=j;break}}else i=j+1|0;g=g+1|0;h=a[b+g>>0]|0;if(!(h<<24>>24)){h=i;break}else j=i}do if((k|0)==91){while(1){i=g+1|0;h=a[b+i>>0]|0;if(!(h<<24>>24))break;if(h<<24>>24!=41?(a[880+(h&255)>>0]&1)==0:0)g=i;else{k=94;break}}if((k|0)==94?h<<24>>24==41:0){h=j;g=g+2|0;break}c[f>>2]=175;h=j;g=i}while(0);if(h){f=g;return f|0}}else g=1;c[f>>2]=175;f=g;return f|0}case 1:{g=1;while(1){h=a[b+g>>0]|0;i=g+1|0;if((d[3696+(h&255)>>0]|0)<2)g=i;else break}if(!(a[880+(h&255)>>0]&70)){c[f>>2]=59;if(g>>>0<=1){f=g;return f|0}h=a[3952+(((d[208+(d[b>>0]|0)>>0]<<2^g^(d[208+(d[b+(g+-1)>>0]|0)>>0]|0)*3)>>>0)%127|0)>>0]|0;if(!(h<<24>>24)){f=g;return f|0}h=h&255;e:while(1){i=h+-1|0;f:do if((g|0)==(d[2064+i>>0]|0)){j=1136+(e[1776+(i<<1)>>1]|0)|0;h=0;while(1){if((a[b+h>>0]&-33)<<24>>24!=(a[j+h>>0]|0))break f;h=h+1|0;if(h>>>0>=g>>>0)break e}}while(0);h=a[4224+i>>0]|0;if(!(h<<24>>24)){k=127;break}else h=h&255}if((k|0)==127)return g|0;c[f>>2]=d[4080+i>>0];f=g;return f|0}else{g=i;k=114}break}case 0:{if((a[b+1>>0]|0)==39){c[f>>2]=146;g=2;while(1){h=a[b+g>>0]|0;if(!(a[880+(h&255)>>0]&8))break;else g=g+1|0}if(h<<24>>24==39&(g&1|0)==0){h=g;g=1}else{c[f>>2]=175;g:while(1){i=a[b+g>>0]|0;switch(i<<24>>24){case 39:case 0:break g;default:{}}g=g+1|0}h=g;g=i<<24>>24!=0&1}f=h+g|0;return f|0}else{g=1;k=114}break}case 2:{g=1;k=114;break}case 28:{c[f>>2]=175;f=0;return f|0}default:{c[f>>2]=175;f=1;return f|0}}while(0);if((k|0)==114){while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&70))break;else g=g+1|0;c[f>>2]=59;f=g;return f|0}c[f>>2]=147;h=a[b>>0]|0;h:do if(h<<24>>24==48){switch(a[b+1>>0]|0){case 88:case 120:break;default:break h}if(a[880+(d[b+2>>0]|0)>>0]&8){g=3;while(1)if(!(a[880+(d[b+g>>0]|0)>>0]&8))break;else g=g+1|0;return g|0}}while(0);if(((h&255)+-48|0)>>>0<10){g=1;while(1){h=a[b+g>>0]|0;if(((h&255)+-48|0)>>>0<10)g=g+1|0;else break}}else g=0;if(h<<24>>24==46){h=g;do h=h+1|0;while(((d[b+h>>0]|0)+-48|0)>>>0<10);c[f>>2]=145;g=h;h=a[b+h>>0]|0}i:do switch(h<<24>>24){case 69:case 101:{i=a[b+(g+1)>>0]|0;if(((i&255)+-48|0)>>>0>=10){switch(i<<24>>24){case 45:case 43:break;default:break i}i=g+2|0;if(((d[b+i>>0]|0)+-48|0)>>>0<10)g=i;else break i}else g=g+2|0;h=g;while(1)if(((d[b+h>>0]|0)+-48|0)>>>0<10)h=h+1|0;else break;c[f>>2]=145;g=h;h=a[b+h>>0]|0;break}default:{}}while(0);if(!(a[880+(h&255)>>0]&70)){f=g;return f|0}do{c[f>>2]=175;g=g+1|0}while((a[880+(d[b+g>>0]|0)>>0]&70)!=0);return g|0}function Ci(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0;h=d+108|0;i=c[h>>2]|0;if((c[d+112>>2]|0)>(i|0)){c[h>>2]=i+1;h=c[d+104>>2]|0;a[h+(i*20|0)>>0]=e;b[h+(i*20|0)+2>>1]=0;c[h+(i*20|0)+4>>2]=f;c[h+(i*20|0)+8>>2]=g;c[h+(i*20|0)+12>>2]=0;c[h+(i*20|0)+16>>2]=0;a[h+(i*20|0)+1>>0]=0;return i|0}else{i=Di(d,e,f,g,0)|0;return i|0}return 0}function Di(d,f,g,h,i){d=d|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;r=d+12|0;k=c[r>>2]|0;s=d+112|0;l=c[s>>2]|0;j=(l|0)==0;l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;m=L()|0;l=j?51:l;m=j?0:m;j=c[k>>2]|0;q=c[j+128>>2]|0;p=((q|0)<0)<<31>>31;a:do if(!((m|0)>(p|0)|(m|0)==(p|0)&l>>>0>q>>>0)){q=d+104|0;p=d+108|0;o=k;n=k;d=c[q>>2]|0;b:while(1){l=Yv(l|0,m|0,20,0)|0;m=L()|0;c:do if(!d){if(c[j+272>>2]|0){if(a[j+81>>0]|0){d=1;k=35;break b}}else{do if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=j+300|0;d=c[k>>2]|0;if(d|0){c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}k=j+296|0;d=c[k>>2]|0;if(!d){d=j+292|0;break}else{c[k>>2]=c[d>>2];k=j+284|0;c[k>>2]=(c[k>>2]|0)+1;k=27;break c}}else d=j+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1}d=_d(j,l,m)|0;k=27}else{k=d;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){if(!(m>>>0>0|((m|0)==0?l>>>0>(e[j+276>>1]|0)>>>0:0))){k=29;break}d=Zd(j,d,l,m)|0;k=27;break}d=Zd(j,d,l,m)|0;k=27}while(0);if((k|0)==27){if(!d){d=1;k=35;break}j=c[o>>2]|0;if(!j)k=31;else k=29}if((k|0)==29){k=0;o=d;if((c[j+304>>2]|0)>>>0<=o>>>0?(c[j+308>>2]|0)>>>0>o>>>0:0)l=e[j+276>>1]|0;else k=31}if((k|0)==31)l=Wa[c[29352>>2]&127](d)|0;c[n+48>>2]=l;k=(l>>>0)/20|0;c[s>>2]=k;c[q>>2]=d;j=c[p>>2]|0;if((k|0)>(j|0)){k=34;break}n=c[r>>2]|0;m=l>>>0<20;l=m?51:k<<1;m=m?0:0;j=c[n>>2]|0;o=c[j+128>>2]|0;k=((o|0)<0)<<31>>31;if((m|0)>(k|0)|(m|0)==(k|0)&l>>>0>o>>>0)break a;else o=n}if((k|0)==34){c[p>>2]=j+1;a[d+(j*20|0)>>0]=f;b[d+(j*20|0)+2>>1]=0;c[d+(j*20|0)+4>>2]=g;c[d+(j*20|0)+8>>2]=h;c[d+(j*20|0)+12>>2]=i;c[d+(j*20|0)+16>>2]=0;a[d+(j*20|0)+1>>0]=0;s=j;return s|0}else if((k|0)==35)return d|0}while(0);d=j+81|0;if(a[d>>0]|0){s=1;return s|0}if(a[j+82>>0]|0){s=1;return s|0}a[d>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;d=j+272|0;c[d>>2]=(c[d>>2]|0)+1;d=c[j+236>>2]|0;if(!d){s=1;return s|0}c[d+12>>2]=7;s=1;return s|0}function Ei(b,d,f,g){b=b|0;d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0;k=b+104|0;l=b+108|0;if((g|0)<0){while(1){h=d+1|0;i=a[h>>0]|0;if(i<<24>>24){m=d+16|0;kg(c[b>>2]|0,i<<24>>24,c[m>>2]|0);a[h>>0]=0;c[m>>2]=0}h=c[k>>2]|0;i=d-h|0;d=c[b>>2]|0;j=h;if(a[d+81>>0]|0){n=12;break}if((i|0)<0)i=(c[l>>2]|0)+-1|0;else i=(i|0)/20|0;d=j+(i*20|0)+1|0;if(!(a[d>>0]|0))break;d=j+(i*20|0)|0}if((n|0)==12){if((g|0)==-12)return;kg(d,g,f);return}if((g|0)==-3){c[h+(i*20|0)+16>>2]=f;a[d>>0]=-3;return}if(!f)return;c[h+(i*20|0)+16>>2]=f;a[d>>0]=g;if((g|0)!=-12)return;f=f+12|0;c[f>>2]=(c[f>>2]|0)+1;return}else{m=d+1|0;h=a[m>>0]|0;if(h<<24>>24){l=d+16|0;kg(c[b>>2]|0,h<<24>>24,c[l>>2]|0);a[m>>0]=0;c[l>>2]=0}h=(f|0)==0;if(!g)if(h)h=0;else{g=(Eu(f)|0)&1073741823;n=23}else if(h)h=0;else n=23;a:do if((n|0)==23){j=c[b>>2]|0;k=Sv(g|0,((g|0)<0)<<31>>31|0,1,0)|0;l=L()|0;b:do if(c[j+272>>2]|0)if(!(a[j+81>>0]|0))n=33;else{h=0;break a}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[j+276>>1]|0)>>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];b=j+284|0;c[b>>2]=(c[b>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=33}while(0);if((n|0)==33)h=_d(j,k,l)|0;if(!h)h=0;else{ew(h|0,f|0,g|0)|0;a[h+g>>0]=0}}while(0);c[d+16>>2]=h;a[m>>0]=-7;return}}function Fi(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;f=c[e>>2]|0;n=c[b+12>>2]|0;o=n+64|0;k=c[o>>2]|0;l=b+149|0;j=(d[l>>0]|d[l+1>>0]<<8)&-769|256;a[l>>0]=j;a[l+1>>0]=j>>8;j=b+104|0;i=(c[j>>2]|0)+(((c[b+108>>2]|0)+-1|0)*20|0)|0;while(1){g=a[i>>0]|0;a:do if((g&255)<62){switch(g<<24>>24){case 2:{if(!(c[i+8>>2]|0))m=6;else{m=(d[l>>0]|d[l+1>>0]<<8)&-257;a[l>>0]=m;a[l+1>>0]=m>>8;m=6}break}case 0:case 1:{m=6;break}case 7:case 8:case 6:{h=(d[l>>0]|d[l+1>>0]<<8)&-769|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break a}case 3:case 5:{c[i+16>>2]=122;a[i+1>>0]=-5;h=f;break a}case 4:{c[i+16>>2]=123;a[i+1>>0]=-5;h=f;break a}case 10:{h=c[i+8>>2]|0;h=(h|0)>(f|0)?h:f;break a}case 9:{h=c[i+-16>>2]|0;f=(h|0)>(f|0)?h:f;break}default:{}}if((m|0)==6){m=0;h=d[l>>0]|d[l+1>>0]<<8|512;a[l>>0]=h;a[l+1>>0]=h>>8;h=f;break}g=i+8|0;h=c[g>>2]|0;if((h|0)<0){c[g>>2]=c[k+(~h<<2)>>2];h=f}else h=f}else h=f;while(0);if((i|0)==(c[j>>2]|0))break;else{f=h;i=i+-20|0}}f=c[b>>2]|0;g=c[o>>2]|0;if(!g){c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}if(f|0){if(c[f+480>>2]|0){Xd(f,g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}m=g;if((c[f+304>>2]|0)>>>0<=m>>>0?(c[f+308>>2]|0)>>>0>m>>>0:0){m=f+300|0;c[g>>2]=c[m>>2];c[m>>2]=g;c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}else{m=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[o>>2]=0;o=n+56|0;c[o>>2]=0;c[e>>2]=h;return}}function Gi(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;k=Ra;Ra=Ra+16|0;i=k;g=a[b>>0]|0;if(g<<24>>24==1){f=4;Ra=k;return f|0}c[i>>2]=0;do if(g<<24>>24==4){g=c[b+4>>2]|0;if(g|0){f=g;Ra=k;return f|0}}else{a[b>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=b+16|0;g=b+56|0;g=th(b,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=b+4|0;if(!h){if(c[g>>2]|0)j=13}else{c[g>>2]=h;j=13}if((j|0)==13?(a[b>>0]|0)==0:0)a[b>>0]=2;break}}l=g;Ra=k;return l|0}while(0);l=cg(b,d,e,f,0)|0;Ra=k;return l|0}function Hi(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;if(d){h=(Eu(d)|0)&1073741823;if((h+20|0)>>>0>2147483390)i=0;else{k=h;h=h+21|0;j=3}}else{k=0;h=21;j=3}do if((j|0)==3){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](h)|0;if(!i)break;else{j=i;h=i}}else{j=Wa[c[29356>>2]&127](h)|0;if((c[14985]|0)>>>0>>0)c[14985]=h;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){l=c[14978]|0;i=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&i>>>0<=l>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(!i){i=0;break}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h;j=i;h=i}i=j+20|0;ew(i|0,d|0,k+1|0)|0;c[j+4>>2]=i;c[j>>2]=e;c[j+8>>2]=f;c[j+12>>2]=g;c[j+16>>2]=0;i=mi(b+336|0,i,j)|0;if(!i){l=h;return l|0}h=b+81|0;if((a[h>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(h|0)c[h+12>>2]=7}if(c[b+480>>2]|0){Xd(b,i);l=0;return l|0}l=i;if((c[b+304>>2]|0)>>>0<=l>>>0?(c[b+308>>2]|0)>>>0>l>>>0:0){l=b+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;l=0;return l|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);l=0;return l|0}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);l=0;return l|0}}while(0);h=b+81|0;if(a[h>>0]|0){l=i;return l|0}if(a[b+82>>0]|0){l=i;return l|0}a[h>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;h=b+272|0;c[h>>2]=(c[h>>2]|0)+1;h=c[b+236>>2]|0;if(!h){l=i;return l|0}c[h+12>>2]=7;l=i;return l|0}function Ii(e,f,g,h,i,j){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,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+256|0;w=y+224|0;g=y+216|0;o=y+208|0;h=y+200|0;u=y+232|0;v=y;p=u+4|0;c[p>>2]=v;c[u>>2]=0;q=u+8|0;c[q>>2]=200;r=u+12|0;s=u+16|0;t=u+21|0;c[r>>2]=0;c[r+4>>2]=0;b[r+8>>1]=0;c[s>>2]=14;l=v;m=37929;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0));k=f+7|0;if(a[k>>0]|0){g=d[f+6>>0]|0;x=c[5504+(g<<2)>>2]|0;c[h>>2]=40;c[h+4>>2]=x;Eb(u,37944,h);if((d[k>>0]|0)>1){h=1;do{g=g+1|0;x=c[5504+(g<<2)>>2]|0;c[o>>2]=44;c[o+4>>2]=x;Eb(u,37944,o);h=h+1|0}while(h>>>0<(d[k>>0]|0)>>>0);x=h&255}else x=1}else{c[g>>2]=c[f>>2];Eb(u,37951,g);x=1}k=f+5|0;g=a[k>>0]|0;if(!(g&32))o=0;else{g=c[s>>2]|0;h=g+11|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37957;n=l+11|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37957,11);o=1;g=a[k>>0]|0}if((g&255)>63){g=c[s>>2]|0;h=g+14|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;l=(c[p>>2]|0)+g|0;m=37969;n=l+14|0;do{a[l>>0]=a[m>>0]|0;l=l+1|0;m=m+1|0}while((l|0)<(n|0))}else wb(u,37969,14);o=o+1|0}g=c[s>>2]|0;h=g+1|0;if(h>>>0<(c[q>>2]|0)>>>0){c[s>>2]=h;a[(c[p>>2]|0)+g>>0]=41}else wb(u,34066,1);g=c[p>>2]|0;if((g|0?(a[g+(c[s>>2]|0)>>0]=0,c[r>>2]|0):0)?(a[t>>0]&4)==0:0)$d(u)|0;g=td(e,v)|0;if(g|0){f=pd(e)|0;c[w>>2]=f;f=Bb(31408,w)|0;c[j>>2]=f;f=g;e=0;c[i>>2]=e;Ra=y;return f|0}if(mb()|0){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](24)|0;if(!g){f=7;e=g;c[i>>2]=e;Ra=y;return f|0}else h=g}else{g=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;k=59064;h=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&h>>>0>0){j=c[14978]|0;w=Tv(h|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=j>>>0)&1}k=Wa[c[29340>>2]&127](g)|0;if(!k){f=7;e=0;c[i>>2]=e;Ra=y;return f|0}g=Wa[c[29352>>2]&127](k)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g;h=k;g=k};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+16>>2]=f;c[h+12>>2]=e;a[h+21>>0]=x;a[h+20>>0]=o;f=0;e=g;c[i>>2]=e;Ra=y;return f|0}function Ji(b,e){b=b|0;e=e|0;var f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;k=o;n=e+40|0;g[n>>3]=1.0;if(!(a[b+20>>0]|0)){Ra=o;return 0}f=c[e+4>>2]|0;c[k>>2]=0;m=k+4|0;c[m>>2]=0;i=c[e>>2]|0;if((i|0)>0){h=b+21|0;b=f;f=0;while(1){if((a[b+5>>0]|0?(a[b+4>>0]|0)==2:0)?(j=c[b>>2]|0,l=d[h>>0]|0,(j|0)>=(l|0)):0)c[k+(j-l<<2)>>2]=f+1;f=f+1|0;if((f|0)>=(i|0))break;else b=b+12|0}b=c[k>>2]|0;if(b|0){b=b+-1|0;f=c[e+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;m=c[m>>2]|0;b=m+-1|0;if(!m){Ra=o;return 0}g[n>>3]=20.0;n=e+48|0;c[n>>2]=20;c[n+4>>2]=0;c[f+(b<<3)>>2]=2;a[f+(b<<3)+4>>0]=1;Ra=o;return 0}}g[n>>3]=2147483647.0;n=e+48|0;c[n>>2]=2147483647;c[n+4>>2]=0;Ra=o;return 0}function Ki(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Li(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](24)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](24)|0;if((c[14985]|0)>>>0<24)c[14985]=24;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){g=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=g>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){g=7;return g|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e};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>>2]=a;c[b>>2]=d;g=0;return g|0}function Mi(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;b=a+20|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Ni(e,f,g,h,i){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;y=Ra;Ra=Ra+64|0;u=y+24|0;r=y+16|0;q=y+8|0;l=y;s=y+32|0;t=c[e>>2]|0;v=e+4|0;gc(c[v>>2]|0)|0;c[v>>2]=0;x=e+16|0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{w=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;w=e+20|0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;o=t+16|0;a:do if((h|0)>0){j=0;k=((d[(c[o>>2]|0)+5>>0]|0)>>>5&1^1)&255;b:while(1){f=c[i+(j<<2)>>2]|0;do if(f|0){g=b[f+8>>1]|0;if((g&514)==514?(a[f+10>>0]|0)==1:0)f=c[f+16>>2]|0;else{if(g&1)break;f=Gg(f,1)|0}if(f|0?(c[l>>2]=f,p=Bb(31408,l)|0,c[x+(k<<2)>>2]=p,(p|0)==0):0){f=7;break b}}while(0);j=j+1|0;if((j|0)>=(h|0))break a;else k=k+1|0}Ra=y;return f|0}while(0);p=t+12|0;m=c[(c[p>>2]|0)+112>>2]|0;h=s+4|0;c[h>>2]=0;c[s>>2]=0;l=s+8|0;c[l>>2]=0;i=s+12|0;c[i>>2]=m;m=s+16|0;c[m>>2]=0;a[s+20>>0]=0;n=s+21|0;a[n>>0]=0;wb(s,38205,7);f=c[w>>2]|0;if(f|0){c[q>>2]=f;Eb(s,38213,q)}g=c[c[o>>2]>>2]|0;if(!g)f=0;else f=(Eu(g)|0)&1073741823;j=c[m>>2]|0;k=j+f|0;if(k>>>0<(c[l>>2]|0)>>>0){if(f|0){c[m>>2]=k;ew((c[h>>2]|0)+j|0,g|0,f|0)|0}}else wb(s,g,f);f=c[x>>2]|0;if(f|0){c[r>>2]=f;Eb(s,38217,r)}f=c[h>>2]|0;if(((f|0)!=0?(a[f+(c[m>>2]|0)>>0]=0,(c[i>>2]|0)!=0):0)?(a[n>>0]&4)==0:0)f=$d(s)|0;else f=c[h>>2]|0;if(!f){x=7;Ra=y;return x|0}g=qd(c[p>>2]|0,f,-1,128,0,v,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{s=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(g|0){x=pd(c[p>>2]|0)|0;c[u>>2]=x;x=Bb(31408,u)|0;c[t+8>>2]=x;x=g;Ra=y;return x|0}e=e+8|0;t=e;t=Sv(c[t>>2]|0,c[t+4>>2]|0,1,0)|0;u=L()|0;c[e>>2]=t;c[e+4>>2]=u;if((Gc(c[v>>2]|0)|0)==100){x=0;Ra=y;return x|0}g=gc(c[v>>2]|0)|0;c[v>>2]=0;gc(0)|0;c[v>>2]=0;f=c[x>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[x>>2]=0;f=c[w>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{x=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;x=g;Ra=y;return x|0}function Oi(a){a=a|0;var b=0,d=0,e=0;b=a+8|0;e=b;e=Sv(c[e>>2]|0,c[e+4>>2]|0,1,0)|0;d=L()|0;c[b>>2]=e;c[b+4>>2]=d;b=a+4|0;if((Gc(c[b>>2]|0)|0)==100){e=0;return e|0}e=gc(c[b>>2]|0)|0;c[b>>2]=0;Si(a);return e|0}function Pi(a){a=a|0;return (c[a+4>>2]|0)==0|0}function Qi(f,g,h){f=f|0;g=g|0;h=h|0;var i=0,j=0,k=0,l=0;i=d[(c[f>>2]|0)+21>>0]|0;if((i|0)<=(h|0)){if((yc(c[g>>2]|0,c[f+16+(h-i<<2)>>2]|0,-1,1,-1)|0)!=18)return 0;c[g+20>>2]=18;yc(c[g>>2]|0,31223,-1,1,0)|0;return 0}k=c[f+4>>2]|0;j=(k|0)==0;do if(j)l=29576;else{f=c[k+120>>2]|0;if(f|0?(e[k+144>>1]|0)>>>0>h>>>0:0){l=f+(h*40|0)|0;break}l=c[k>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576}while(0);f=l+8|0;i=e[f>>1]|0;if(i&2048|0)b[f>>1]=i&59391|4096;if(!j){i=c[k>>2]|0;h=k+40|0;f=c[h>>2]|0;if((f|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7}else f=c[i+68>>2]&f;c[h>>2]=f}Dc(g,l);return 0}function Ri(a,b){a=a|0;b=b|0;var d=0;d=a+8|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Si(a){a=a|0;var b=0,d=0,e=0;b=a+4|0;gc(c[b>>2]|0)|0;c[b>>2]=0;b=a+16|0;d=c[b>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;a=a+20|0;b=c[a>>2]|0;if(!b){c[a>>2]=0;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);c[a>>2]=0;return}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);c[a>>2]=0;return}}function Ti(b){b=b|0;var e=0,f=0,g=0;f=b+360|0;e=c[f>>2]|0;c[f>>2]=0;if(!e)return;b=c[b+4>>2]|0;if(b|0)do{f=b+149|0;g=(d[f>>0]|d[f+1>>0]<<8)&-4|1;a[f>>0]=g;a[f+1>>0]=g>>8;b=c[b+8>>2]|0}while((b|0)!=0);do{g=e;e=c[e+24>>2]|0;ng(g)}while((e|0)!=0);return}function Ui(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0;g=a+20|0;if((c[g>>2]|0)>2){h=a+16|0;f=2;b=2;do{d=c[h>>2]|0;e=d+(f<<4)|0;if(!(c[d+(f<<4)+4>>2]|0)){lb(a,c[e>>2]|0);c[e>>2]=0}else{if((b|0)<(f|0)){d=d+(b<<4)|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=b+1|0}f=f+1|0}while((f|0)<(c[g>>2]|0));c[g>>2]=b;if((b|0)>=3)return}else c[g>>2]=2;b=a+16|0;d=c[b>>2]|0;e=a+412|0;if((d|0)==(e|0))return;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];c[e+16>>2]=c[d+16>>2];c[e+20>>2]=c[d+20>>2];c[e+24>>2]=c[d+24>>2];c[e+28>>2]=c[d+28>>2];lb(a,d);c[b>>2]=e;return} function jl(f,g){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,x=0,y=0;x=Ra;Ra=Ra+48|0;v=x+32|0;t=x+24|0;s=x+16|0;q=x+8|0;p=x;h=c[f>>2]|0;j=c[g+20>>2]|0;if(!j)w=-1e6;else{k=c[h+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0)){w=i;break}else i=i+1|0}o=c[g+4>>2]|0;l=c[g+24>>2]|0;m=c[l+20>>2]|0;if(!m){i=l+12|0;j=l+16|0}else{j=a[o>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=o;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}j=(i>>>0)%((c[l+8>>2]|0)>>>0)|0;i=m+(j<<3)|0;j=m+(j<<3)+4|0}i=c[i>>2]|0;a:do if(!i)j=59292;else{n=d[208+(d[o>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;i=i+-1|0;l=c[j+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=o;do{l=l+1|0;m=m+1|0;y=a[l>>0]|0;k=(d[208+(y&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(y<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!i){j=59292;break}}}while(0);o=h+16|0;m=c[(c[o>>2]|0)+(w<<4)>>2]|0;l=(w|0)==1;n=l?34855:34585;l=l?14:16;k=c[g>>2]|0;i=c[c[j+8>>2]>>2]|0;do if((a[h+165>>0]|0)==0?(r=f+200|0,(a[r>>0]|0)==0):0){j=c[h+312>>2]|0;if(j){h=$a[j&127](c[h+316>>2]|0,l,k,i,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,p);c[f+12>>2]=23;Ra=x;return}if((h|2|0)!=2){cd(f,39231,q);c[f+12>>2]=1;Ra=x;return}if(h|0){Ra=x;return}h=c[f>>2]|0;if(a[h+165>>0]|0)break;if(a[r>>0]|0)break}i=c[h+312>>2]|0;if(i|0){h=$a[i&127](c[h+316>>2]|0,9,n,0,m,c[f+240>>2]|0)|0;if((h|0)==1){cd(f,39216,s);c[f+12>>2]=23;Ra=x;return}if((h|2|0)==2){if(!h)break;Ra=x;return}else{cd(f,39231,t);c[f+12>>2]=1;Ra=x;return}}}while(0);m=f+8|0;h=c[m>>2]|0;if(!h){k=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))u=47;else{Ra=x;return}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];j=k+284|0;c[j>>2]=(c[j>>2]|0)+1;j=i;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=47}while(0);if((u|0)==47)j=_d(k,224,0)|0;if(!j){Ra=x;return}h=j+104|0;i=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(i|0));c[j>>2]=k;h=k+4|0;i=c[h>>2]|0;if(i|0)c[i+4>>2]=j;c[j+8>>2]=i;c[j+4>>2]=0;c[h>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[m>>2]=j;Di(j,61,0,1,0)|0;l=j}else l=h;k=c[g>>2]|0;c[v>>2]=c[(c[o>>2]|0)+(w<<4)>>2];c[v+4>>2]=34585;c[v+8>>2]=k;Ak(f,42882,v);k=c[m>>2]|0;h=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(w<<4)+12>>2]>>2]|0)+1|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;y=c[k+104>>2]|0;a[y+(j*20|0)>>0]=95;b[y+(j*20|0)+2>>1]=0;c[y+(j*20|0)+4>>2]=w;c[y+(j*20|0)+8>>2]=1;c[y+(j*20|0)+12>>2]=h;c[y+(j*20|0)+16>>2]=0;a[y+(j*20|0)+1>>0]=0}else Di(k,95,w,1,h)|0;j=c[g>>2]|0;i=l+108|0;h=c[i>>2]|0;if((c[l+112>>2]|0)>(h|0)){c[i>>2]=h+1;y=c[l+104>>2]|0;a[y+(h*20|0)>>0]=-110;b[y+(h*20|0)+2>>1]=0;c[y+(h*20|0)+4>>2]=w;c[y+(h*20|0)+8>>2]=0;c[y+(h*20|0)+12>>2]=0;c[y+(h*20|0)+16>>2]=0;a[y+(h*20|0)+1>>0]=0}else h=Di(l,146,w,0,0)|0;if(a[(c[l>>2]|0)+81>>0]|0){Ra=x;return}if((h|0)<0)h=(c[i>>2]|0)+-1|0;Ei(l,(c[l+104>>2]|0)+(h*20|0)|0,j,0);Ra=x;return}function kl(d,f,g){d=d|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=Ra;Ra=Ra+32|0;n=o+8|0;m=o;l=d+8|0;h=c[l>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))j=15;else{h=0;break a}else{do if((e[k+276>>1]|0)>=224){i=k+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}i=k+296|0;h=c[i>>2]|0;if(!h){h=k+292|0;break}else{c[i>>2]=c[h>>2];i=k+284|0;c[i>>2]=(c[i>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=15}while(0);if((j|0)==15)h=_d(k,224,0)|0;if(!h)h=0;else{i=h+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[h>>2]=k;i=k+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=h;c[h+8>>2]=j;c[h+4>>2]=0;c[i>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=d;c[l>>2]=h;Di(h,61,0,1,0)|0}}while(0);l=d+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){j=d+44|0;k=(c[j>>2]|0)+1|0;c[j>>2]=k}else{k=i+-1<<24>>24;a[l>>0]=k;k=c[d+148+((k&255)<<2)>>2]|0}if((f|0)<2)cd(d,42933,m);i=h+108|0;j=c[i>>2]|0;if((c[h+112>>2]|0)>(j|0)){c[i>>2]=j+1;m=c[h+104>>2]|0;a[m+(j*20|0)>>0]=-120;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=f;c[m+(j*20|0)+8>>2]=k;c[m+(j*20|0)+12>>2]=g;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0}else Di(h,136,f,k,g)|0;m=c[d+116>>2]|0;a[((m|0)==0?d:m)+21>>0]=1;c[n>>2]=c[(c[(c[d>>2]|0)+16>>2]|0)+(g<<4)>>2];c[n+4>>2]=34585;c[n+8>>2]=f;c[n+12>>2]=k;c[n+16>>2]=k;Ak(d,42948,n);if(!k){Ra=o;return}h=a[l>>0]|0;if((h&255)>=8){Ra=o;return}a[l>>0]=h+1<<24>>24;c[d+148+((h&255)<<2)>>2]=k;Ra=o;return}function ll(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+32|0;g=h;a:do if(!b){b=0;e=1}else{while(1){e=c[b+4>>2]|0;if(!(e&4096))break;if(!(e&262144))b=b+12|0;else b=(c[b+20>>2]|0)+4|0;b=c[b>>2]|0;if(!b){b=0;e=1;break a}}b:while(1){switch(a[b>>0]|0){case 51:{b=b+12|0;break}case 44:{if(ll(c[b+12>>2]|0,d)|0){b=1;break b}b=b+16|0;break}default:{e=0;break a}}b=c[b>>2]|0;if(!b){b=0;e=1;break a}}Ra=h;return b|0}while(0);c[g+4>>2]=145;c[g+8>>2]=0;c[g+12>>2]=0;f=g+20|0;a[f>>0]=0;c[g+24>>2]=d;if(e)b=0;else{_j(g,b)|0;b=a[f>>0]|0}g=b&255;Ra=h;return g|0}function ml(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d)return;if((e|0)<0){g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(h=g+20|0,i=c[h>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){d=0;f=i;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[h>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}g=d;do{d=g+4|0;f=c[d>>2]|0;if(f&1|0?(b[g+36>>1]|0)==(e|0):0)c[d>>2]=f&-2;if(((a[g>>0]|0)==-95?(j=g+20|0,k=c[j>>2]|0,k|0):0)?(c[k>>2]|0)>0:0){d=0;f=k;do{ml(c[f+4+(d*20|0)>>2]|0,e);d=d+1|0;f=c[j>>2]|0}while((d|0)<(c[f>>2]|0))}ml(c[g+12>>2]|0,e);g=c[g+16>>2]|0}while((g|0)!=0);return}function nl(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){j=0;return j|0}b=0;do{d=c[a+36>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+44>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}d=c[a+60>>2]|0;if(d){g=c[d+24>>2]|0;b=(g|0)>(b|0)?g:b}g=c[a>>2]|0;if((g|0)!=0?(h=c[g>>2]|0,(h|0)>0):0){f=0;e=h;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?h:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+40>>2]|0;if((g|0)!=0?(i=c[g>>2]|0,(i|0)>0):0){f=0;e=i;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?i:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}g=c[a+48>>2]|0;if((g|0)!=0?(j=c[g>>2]|0,(j|0)>0):0){f=0;e=j;while(1){d=c[g+4+(f*20|0)>>2]|0;if(!d)d=e;else{k=c[d+24>>2]|0;d=(k|0)>(b|0);b=d?k:b;d=d?j:e}f=f+1|0;if((f|0)>=(d|0))break;else e=d}}a=c[a+52>>2]|0}while((a|0)!=0);return b|0}function ol(d,e,f,g,h){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;o=Ra;Ra=Ra+32|0;n=o;if(!f){n=0;Ra=o;return n|0}if(c[e+8>>2]&8192|0){n=0;Ra=o;return n|0}if(c[e+68>>2]|0){n=0;Ra=o;return n|0}if(c[e+60>>2]|0){n=0;Ra=o;return n|0}if((a[f>>0]|0)==44){i=0;do{i=(ol(d,e,c[f+16>>2]|0,g,h)|0)+i|0;f=c[f+12>>2]|0}while((a[f>>0]|0)==44)}else i=0;j=(c[f+4>>2]&1|0)==0;if(!h){if(!j)k=12}else{if(j){n=0;Ra=o;return n|0}if((b[f+36>>1]|0)==(g|0))k=12;else{n=0;Ra=o;return n|0}}if((k|0)==12?(b[f+36>>1]|0)!=(g|0):0){n=0;Ra=o;return n|0}m=n+20|0;a[m>>0]=3;c[n+4>>2]=127;c[n+8>>2]=128;c[n+24>>2]=g;_j(n,f)|0;if(!(a[m>>0]|0)){n=i;Ra=o;return n|0}i=i+1|0;if(!e){n=i;Ra=o;return n|0}h=n+4|0;k=n+8|0;l=n+12|0;m=n+16|0;j=e;do{r=dk(c[d>>2]|0,f,0,0)|0;ml(r,-1);c[n>>2]=d;c[h>>2]=g;c[k>>2]=g;c[l>>2]=0;c[m>>2]=c[j>>2];r=zl(n,r)|0;q=(c[j+8>>2]&8|0)==0;p=j+36|0;e=j+44|0;r=Xk(c[d>>2]|0,c[(q?p:e)>>2]|0,r)|0;c[(q?p:e)>>2]=r;j=c[j+52>>2]|0}while((j|0)!=0);Ra=o;return i|0}function pl(d,f,g){d=d|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=Ra;Ra=Ra+16|0;l=w;q=c[f+60>>2]|0;h=f+12|0;if((q|0)==0|(c[h>>2]|0)!=0){Ra=w;return}s=d+44|0;v=(c[s>>2]|0)+1|0;c[s>>2]=v;c[h>>2]=v;t=d+8|0;h=c[t>>2]|0;a:do if(!h){k=c[d>>2]|0;if((c[d+116>>2]|0)==0?(b[k+76>>1]&8)==0:0)a[d+23>>0]=1;b:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))p=16;else{r=0;break a}else{do if((e[k+276>>1]|0)>=224){h=k+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}h=k+296|0;i=c[h>>2]|0;if(!i){h=k+292|0;break}else{c[h>>2]=c[i>>2];r=k+284|0;c[r>>2]=(c[r>>2]|0)+1;break b}}else h=k+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=16}while(0);if((p|0)==16)i=_d(k,224,0)|0;if(!i)r=0;else{h=i+104|0;j=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));c[i>>2]=k;h=k+4|0;j=c[h>>2]|0;if(j|0)c[j+4>>2]=i;c[i+8>>2]=j;c[i+4>>2]=0;c[h>>2]=i;c[i+20>>2]=381479589;c[i+12>>2]=d;c[t>>2]=i;Di(i,61,0,1,0)|0;r=i}}else r=h;while(0);h=q+12|0;do if(!(uk(c[h>>2]|0,l)|0)){h=c[h>>2]|0;do if(h){if((a[h>>0]|0)!=-88){n=Jj(d,h,v)|0;p=67;break}k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;o=c[k+104>>2]|0;a[o+(j*20|0)>>0]=78;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=h;c[o+(j*20|0)+8>>2]=v;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,v,0)|0;break}}else{n=Jj(d,0,v)|0;p=67}while(0);do if(((p|0)==67?(n|0)!=(v|0):0)?(m=c[t>>2]|0,m|0):0){h=m+108|0;i=c[h>>2]|0;if((c[m+112>>2]|0)>(i|0)){c[h>>2]=i+1;p=c[m+104>>2]|0;a[p+(i*20|0)>>0]=79;b[p+(i*20|0)+2>>1]=0;c[p+(i*20|0)+4>>2]=n;c[p+(i*20|0)+8>>2]=v;c[p+(i*20|0)+12>>2]=0;c[p+(i*20|0)+16>>2]=0;a[p+(i*20|0)+1>>0]=0;break}else{Di(m,79,n,v,0)|0;break}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=15;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=0;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0}else Di(r,15,v,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=20;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=v;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,20,v,g,0)|0;break}}else{h=c[l>>2]|0;j=r+108|0;i=c[j>>2]|0;k=r+112|0;if((c[k>>2]|0)>(i|0)){c[j>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=70;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=h;c[o+(i*20|0)+8>>2]=v;c[o+(i*20|0)+12>>2]=0;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,70,h,v,0)|0;if(!h){h=c[j>>2]|0;if((c[k>>2]|0)>(h|0)){c[j>>2]=h+1;p=c[r+104>>2]|0;a[p+(h*20|0)>>0]=11;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=0;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=0;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(r,11,0,g,0)|0;break}}if((h|0)>-1){o=f+6|0;n=b[o>>1]|0;i=((h|0)<0)<<31>>31;g=h>>>0<8;if(g)if(h>>>0<2)j=0;else{j=40;l=h;k=i;do{j=(j&65535)+65526|0;l=cw(l|0,k|0,1)|0;k=L()|0}while(k>>>0<0|(k|0)==0&l>>>0<8);k=j&65535;j=l;p=43}else{if(h>>>0>255){j=40;m=h;k=i;do{j=(j&65535)+40|0;p=m;m=bw(m|0,k|0,4)|0;l=k;k=L()|0}while(l>>>0>0|(l|0)==0&p>>>0>4095);l=j&65535;j=m}else{l=40;k=i;j=h}if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;p=j;j=bw(j|0,k|0,1)|0;m=k;k=L()|0}while(m>>>0>0|(m|0)==0&p>>>0>31);k=l;p=43}else{k=l;p=43}}if((p|0)==43)j=(k&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)&65535;if(n<<16>>16>j<<16>>16){if(g)if(h>>>0<2)h=0;else{j=40;do{j=(j&65535)+65526|0;h=cw(h|0,i|0,1)|0;i=L()|0}while(i>>>0<0|(i|0)==0&h>>>0<8);j=j&65535;p=58}else{if(h>>>0>255){j=40;do{j=(j&65535)+40|0;p=h;h=bw(h|0,i|0,4)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>4095);j=j&65535}else j=40;if(i>>>0>0|(i|0)==0&h>>>0>15){do{j=(j&65535)+10&65535;p=h;h=bw(h|0,i|0,1)|0;g=i;i=L()|0}while(g>>>0>0|(g|0)==0&p>>>0>31);p=58}else p=58}if((p|0)==58)h=(j&65535)+65526+(e[3648+((h&7)<<1)>>1]|0)&65535;b[o>>1]=h;p=f+8|0;c[p>>2]=c[p>>2]|16384}}}while(0);h=c[q+16>>2]|0;if(!h){Ra=w;return}l=c[s>>2]|0;m=l+1|0;c[f+16>>2]=m;l=l+2|0;c[s>>2]=l;do if((a[h>>0]|0)==-88){k=c[t>>2]|0;h=c[h+28>>2]|0;i=k+108|0;j=c[i>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[i>>2]=j+1;u=c[k+104>>2]|0;a[u+(j*20|0)>>0]=78;b[u+(j*20|0)+2>>1]=0;c[u+(j*20|0)+4>>2]=h;c[u+(j*20|0)+8>>2]=m;c[u+(j*20|0)+12>>2]=0;c[u+(j*20|0)+16>>2]=0;a[u+(j*20|0)+1>>0]=0;break}else{Di(k,78,h,m,0)|0;break}}else{j=Jj(d,h,m)|0;if((j|0)!=(m|0)?(u=c[t>>2]|0,u|0):0){h=u+108|0;i=c[h>>2]|0;if((c[u+112>>2]|0)>(i|0)){c[h>>2]=i+1;u=c[u+104>>2]|0;a[u+(i*20|0)>>0]=79;b[u+(i*20|0)+2>>1]=0;c[u+(i*20|0)+4>>2]=j;c[u+(i*20|0)+8>>2]=m;c[u+(i*20|0)+12>>2]=0;c[u+(i*20|0)+16>>2]=0;a[u+(i*20|0)+1>>0]=0;break}else{Di(u,79,j,m,0)|0;break}}}while(0);i=r+108|0;h=c[i>>2]|0;j=r+112|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=15;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=m;c[u+(h*20|0)+8>>2]=0;c[u+(h*20|0)+12>>2]=0;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0}else Di(r,15,m,0,0)|0;h=c[i>>2]|0;if((c[j>>2]|0)>(h|0)){c[i>>2]=h+1;u=c[r+104>>2]|0;a[u+(h*20|0)>>0]=-104;b[u+(h*20|0)+2>>1]=0;c[u+(h*20|0)+4>>2]=v;c[u+(h*20|0)+8>>2]=l;c[u+(h*20|0)+12>>2]=m;c[u+(h*20|0)+16>>2]=0;a[u+(h*20|0)+1>>0]=0;Ra=w;return}else{Di(r,152,v,l,m)|0;Ra=w;return}}function ql(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,Aa=0,Ba=0;Ba=Ra;Ra=Ra+176|0;xa=Ba+40|0;ja=Ba+32|0;V=Ba+24|0;y=Ba+16|0;q=Ba+8|0;m=Ba;va=Ba+80|0;U=Ba+48|0;wa=f+8|0;ua=c[wa>>2]|0;Aa=c[f>>2]|0;c[U>>2]=0;c[U+4>>2]=0;c[U+8>>2]=0;c[U+12>>2]=0;c[U+16>>2]=0;c[U+20>>2]=0;c[U+24>>2]=0;if(!i)I=0;else I=(c[i>>2]|0)>63?0:i;$=U+8|0;c[$>>2]=I;_=Aa+76|0;ta=(b[_>>1]&16)==0?k:k&-257;i=c[g>>2]|0;if((i|0)>64){c[m>>2]=64;cd(f,43479,m);Aa=0;Ra=Ba;return Aa|0}da=ta&65535;ia=da&32;ea=(ia|0)!=0;o=ea?1:i;n=o*80|0;p=n+759&-16;m=p+72|0;a:do if(c[Aa+272>>2]|0)if(!(a[Aa+81>>0]|0))ka=15;else i=0;else{do if(!(0<0|(0==0?(e[Aa+276>>1]|0)>>>0>>0:0))){k=Aa+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}k=Aa+296|0;i=c[k>>2]|0;if(!i){i=Aa+292|0;break}else{c[k>>2]=c[i>>2];za=Aa+284|0;c[za>>2]=(c[za>>2]|0)+1;break a}}else i=Aa+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;ka=15}while(0);if((ka|0)==15)i=_d(Aa,m,0)|0;ra=Aa+81|0;if(a[ra>>0]|0){if(!i){Aa=0;Ra=Ba;return Aa|0}if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}}c[i>>2]=f;ca=i+4|0;c[ca>>2]=g;X=i+8|0;c[X>>2]=I;c[i+16>>2]=h;c[i+12>>2]=j;ga=i+24|0;ha=i+28|0;c[ha>>2]=-1;c[ga>>2]=-1;za=i+46|0;a[za>>0]=o;sa=f+56|0;fa=(c[sa>>2]|0)+-1|0;c[sa>>2]=fa;na=i+32|0;c[na>>2]=fa;z=i+36|0;c[z>>2]=fa;fa=i+44|0;b[fa>>1]=ta;b[i+20>>1]=l;oa=f+132|0;pa=i+40|0;c[pa>>2]=c[oa>>2];k=i+47|0;A=k;B=A+33|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));qa=i+752|0;gw(qa|0,0,n+72|0)|0;aa=i+488|0;c[U>>2]=i;ya=i+80|0;ba=U+4|0;c[ba>>2]=ya;u=i+p|0;O=U+12|0;c[O>>2]=u;c[u+48>>2]=u+56;b[u+40>>1]=0;b[u+44>>1]=3;c[u+36>>2]=0;u=i+492|0;c[u>>2]=0;c[ya>>2]=i;a[i+89>>0]=0;c[i+84>>2]=0;la=i+92|0;c[la>>2]=0;c[i+96>>2]=8;ma=i+100|0;c[ma>>2]=i+104;Il(ya,h,44);v=(o|0)==0;if(v){if(I|0)a[k>>0]=c[I>>2];if(da&256|0)a[i+51>>0]=1;nk(f,0,43507,q)}else{q=0;do{r=g+8+(q*72|0)+40|0;K=c[r>>2]|0;T=c[u>>2]|0;c[u>>2]=T+1;c[aa+8+(T<<2)>>2]=K;b:do if((a[g+8+(q*72|0)+37>>0]&4?(w=c[g+8+(q*72|0)+16>>2]|0,x=c[g+8+(q*72|0)+64>>2]|0,x|0):0)?(c[x>>2]|0)>0:0){s=w+42|0;t=w+4|0;m=0;h=0;c:while(1){n=b[s>>1]|0;if((m|0)>=(n|0))break;p=c[t>>2]|0;while(1){if(a[p+(m<<4)+15>>0]&2)break;k=m+1|0;if((k|0)<(n|0))m=k;else break c}p=c[f>>2]|0;d:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))ka=52;else break b;else{do if((e[p+276>>1]|0)>=52){k=p+300|0;n=c[k>>2]|0;if(n|0){c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}k=p+296|0;n=c[k>>2]|0;if(!n){k=p+292|0;break}else{c[k>>2]=c[n>>2];T=p+284|0;c[T>>2]=(c[T>>2]|0)+1;break d}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;ka=52}while(0);if((ka|0)==52){ka=0;n=_d(p,52,0)|0}if(!n)break b;A=n;B=A+52|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));a[n>>0]=-94;b[n+34>>1]=-1;c[n+24>>2]=1;c[n+28>>2]=c[r>>2];b[n+32>>1]=m;c[n+44>>2]=w;k=c[x+4+(h*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;Ml(ya,ej(f,53,n,ej(f,166,k,0)|0)|0,1)|0;k=h+1|0;if((k|0)<(c[x>>2]|0)){m=m+1|0;h=k}else break b}c[y>>2]=c[w>>2];c[y+4>>2]=h;cd(f,43525,y)}while(0);q=q+1|0}while((q|0)<(c[g>>2]|0))}k=c[la>>2]|0;if((k|0)>0)do{T=k;k=k+-1|0;Nl(g,ya,k)}while((T|0)>1);e:do if(!(a[ra>>0]|0)){f:do if((c[i+92>>2]|0)>0){h=va+20|0;q=va+4|0;r=va+8|0;if(v){p=0;k=ya;while(1){m=c[k+20>>2]|0;n=m+(p*48|0)+10|0;if((b[n>>1]&2)==0?(T=m+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){Tj(f,c[m+(p*48|0)>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4;k=c[ba>>2]|0}p=p+1|0;if((p|0)>=(c[k+12>>2]|0))break f}}p=0;k=ya;do{k=c[k+20>>2]|0;n=k+(p*48|0)+10|0;do if((b[n>>1]&2)==0?(T=k+(p*48|0)+40|0,(c[T>>2]|0)==0&(c[T+4>>2]|0)==0):0){k=k+(p*48|0)|0;m=c[k>>2]|0;c[va>>2]=0;c[va+4>>2]=0;c[va+8>>2]=0;c[va+12>>2]=0;c[va+16>>2]=0;c[va+20>>2]=0;c[va+24>>2]=0;a[h>>0]=1;c[q>>2]=146;c[r>>2]=128;if(m){_j(va,m)|0;if(!(a[h>>0]|0))break}Tj(f,c[k>>2]|0,c[z>>2]|0,16);b[n>>1]=b[n>>1]|4}while(0);p=p+1|0;k=c[ba>>2]|0}while((p|0)<(c[k+12>>2]|0))}while(0);T=(da&256|0)==0;g:do if(!T){h:do if((c[g>>2]|0)==1){H=c[g+48>>2]|0;p=c[g+24>>2]|0;h=c[j>>2]|0;i:do if((h|0)>0){n=0;while(1){k=c[j+4+(n*20|0)>>2]|0;j:do if(!k)k=0;else while(1){m=c[k+4>>2]|0;if(!(m&4096))break j;if(!(m&262144))k=k+12|0;else k=(c[k+20>>2]|0)+4|0;k=c[k>>2]|0;if(!k){k=0;break}}while(0);if(((a[k>>0]|0)==-94?(c[k+28>>2]|0)==(H|0):0)?(b[k+32>>1]|0)<0:0)break i;n=n+1|0;if((n|0)>=(h|0)){ka=92;break}}}else ka=92;while(0);k:do if((ka|0)==92){k=c[p+8>>2]|0;if(!k)break h;x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;while(1){if(a[k+54>>0]|0){w=k+50|0;l:do if(!(b[w>>1]|0))m=0;else{s=k+4|0;t=k+40|0;u=k+32|0;v=k+12|0;m=0;do{c[va>>2]=ya;c[x>>2]=ya;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=2;c[C>>2]=0;c[D>>2]=H;a[E>>0]=1;a[F>>0]=1;p=b[(c[s>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[t>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2];b[G>>1]=-2;n=Ul(va)|0}else{h=c[v>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[u>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;n=Tl(va)|0}do if(n){p=0;while(1){ka=n+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0){if(b[n+12>>1]&2){ka=108;break}p=(p|0)==0?n:p}n=Tl(va)|0;if(!n){ka=111;break}}if((ka|0)==108){ka=0;break}else if((ka|0)==111){ka=0;if(!p){ka=112;break}else break}}else ka=112;while(0);if((ka|0)==112){r=c[(c[u>>2]|0)+(m<<2)>>2]|0;if((c[j>>2]|0)<=0)break l;q=0;m:while(1){h=c[j+4+(q*20|0)>>2]|0;n:do if(!h)n=0;else{n=h;while(1){p=c[n+4>>2]|0;if(!(p&4096))break n;if(!(p&262144))n=n+12|0;else n=(c[n+20>>2]|0)+4|0;n=c[n>>2]|0;if(!n){n=0;break}}}while(0);do if((a[n>>0]|0)==-94){if((b[n+32>>1]|0)!=(b[(c[s>>2]|0)+(m<<1)>>1]|0))break;if((c[n+28>>2]|0)!=(H|0))break;n=Yi(f,h)|0;if(!n)n=c[(c[f>>2]|0)+8>>2]|0;p=c[n>>2]|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0)){h=r;do{p=p+1|0;h=h+1|0;ka=a[p>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[h>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0))}if(!n)break m}while(0);q=q+1|0;if((q|0)>=(c[j>>2]|0))break l}n=b[(c[s>>2]|0)+(m<<1)>>1]|0;if(n<<16>>16>-1)n=d[(c[(c[v>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0;else n=n<<16>>16==-1&1;if(!n)break l}m=m+1|0}while(m>>>0<(e[w>>1]|0)>>>0)}while(0);if((m|0)==(e[w>>1]|0))break k}k=c[k+20>>2]|0;if(!k)break h}}while(0);a[i+51>>0]=1;break g}while(0);if(!I){b[fa>>1]=b[fa>>1]|128;c[X>>2]=j}}while(0);if((((o|0)==1?(R=c[U>>2]|0,P=c[O>>2]|0,S=R+44|0,(b[S>>1]&32)==0):0)?(Q=c[R+4>>2]|0,M=c[Q+24>>2]|0,(c[M+56>>2]|0)==0):0)?(a[Q+45>>0]&2)==0:0){I=c[Q+48>>2]|0;J=R+80|0;K=P+36|0;c[K>>2]=0;b[P+42>>1]=0;c[va>>2]=J;c[va+4>>2]=J;c[va+12>>2]=0;a[va+16>>0]=0;c[va+8>>2]=0;c[va+20>>2]=130;c[va+24>>2]=0;c[va+28>>2]=I;a[va+17>>0]=1;a[va+18>>0]=1;b[va+72>>1]=-1;m=Tl(va)|0;do if(!m)ka=154;else{k=0;while(1){ka=m+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?b[m+12>>1]&130:0){ka=150;break}k=(k|0)==0?m:k;m=Tl(va)|0;if(!m){ka=152;break}}if((ka|0)==150)k=m;else if((ka|0)==152)if(!k){ka=154;break}c[K>>2]=4353;c[c[P+48>>2]>>2]=k;b[P+40>>1]=1;b[P+24>>1]=1;b[P+20>>1]=33}while(0);o:do if((ka|0)==154?(N=c[M+8>>2]|0,N|0):0){x=va+4|0;y=va+12|0;z=va+16|0;A=va+8|0;B=va+20|0;C=va+24|0;D=va+28|0;E=va+17|0;F=va+18|0;G=va+72|0;H=P+48|0;k=N;p:while(1){do if(a[k+54>>0]|0){if(c[k+36>>2]|0)break;w=k+50|0;m=b[w>>1]|0;if((m&65535)>3)break;u=k+55|0;u=(d[u>>0]|d[u+1>>0]<<8)<<4&128|2;v=u&65535;q:do if(!(m<<16>>16))m=0;else{q=k+4|0;r=k+40|0;s=k+32|0;t=k+12|0;m=0;while(1){c[va>>2]=J;c[x>>2]=J;c[y>>2]=0;a[z>>0]=0;c[A>>2]=0;c[B>>2]=v;c[C>>2]=0;c[D>>2]=I;a[E>>0]=1;a[F>>0]=1;p=b[(c[q>>2]|0)+(m<<1)>>1]|0;n=p<<16>>16;if(p<<16>>16==-2){c[y>>2]=c[(c[r>>2]|0)+4+(m*20|0)>>2];c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2];b[G>>1]=-2;p=Ul(va)|0}else{h=c[t>>2]|0;do if(p<<16>>16==(b[h+40>>1]|0))n=-1;else{if(p<<16>>16<=-1)break;a[z>>0]=a[(c[h+4>>2]|0)+(n<<4)+13>>0]|0;c[A>>2]=c[(c[s>>2]|0)+(m<<2)>>2]}while(0);b[G>>1]=n;p=Tl(va)|0}if(!p)break;n=0;while(1){ka=p+32|0;if((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(b[p+12>>1]&u)<<16>>16:0){ka=172;break}n=(n|0)==0?p:n;p=Tl(va)|0;if(!p){ka=174;break}}if((ka|0)==172)n=p;else if((ka|0)==174)if(!n)break q;c[(c[H>>2]|0)+(m<<2)>>2]=n;m=m+1|0;if(m>>>0>=(e[w>>1]|0)>>>0)break q}}while(0);if((m|0)==(e[w>>1]|0))break p}while(0);k=c[k+20>>2]|0;if(!k)break o}ka=k+55|0;c[K>>2]=4609;if(!(((d[ka>>0]|d[ka+1>>0]<<8)&32)==0?(ka=Q+64|0,Q=k+64|0,!((c[Q>>2]&c[ka>>2]|0)==0?(c[Q+4>>2]&c[ka+4>>2]|0)==0:0)):0))c[K>>2]=4673;ka=m&65535;b[P+40>>1]=ka;b[P+24>>1]=ka;c[P+32>>2]=k;b[P+20>>1]=39}while(0);if(c[K>>2]|0){b[P+22>>1]=1;c[R+816>>2]=P;k=P+8|0;c[k>>2]=1;c[k+4>>2]=0;c[R+756>>2]=I;b[R+72>>1]=1;k=c[R+8>>2]|0;if(k|0)a[R+47>>0]=c[k>>2];if(!(b[S>>1]&256))ka=264;else{a[R+51>>0]=1;ka=264}}else ka=187}else ka=187;if((ka|0)==187){E=c[U>>2]|0;k=c[E+4>>2]|0;S=a[E+46>>0]|0;F=k+8+((S&255)*72|0)|0;H=c[c[E>>2]>>2]|0;G=c[O>>2]|0;I=G+56|0;J=G+48|0;c[J>>2]=I;K=G+40|0;b[K>>1]=0;M=G+44|0;b[M>>1]=3;N=G+36|0;c[N>>2]=0;z=U+24|0;c[z>>2]=2e4;do if(S<<24>>24){A=G+16|0;B=E+492|0;C=G+8|0;D=H+81|0;s=0;y=0;m=k+8|0;p=2e4;r=0;n=0;q=0;x=0;r:while(1){a[A>>0]=y;c[z>>2]=p+1e3;p=c[m+40>>2]|0;t=c[B>>2]|0;h=(t|0)>0;s:do if(h){k=0;while(1){if((c[E+496+(k<<2)>>2]|0)==(p|0))break;k=k+1|0;if((k|0)>=(t|0)){k=0;p=0;break s}}k=cw(1,0,k|0)|0;p=L()|0}else{k=0;p=0}while(0);u=C;c[u>>2]=k;c[u+4>>2]=p;u=a[m+36>>0]|0;w=((u|s)&10)==0;v=w?r:n;w=w?q:x;if(!(c[(c[m+16>>2]|0)+56>>2]|0)){k=Xl(U,v,w)|0;h=0;p=0}else{k=m+72|0;if(k>>>0>=F>>>0|h^1){h=0;p=0}else{q=m;h=0;p=0;while(1){if((h|0)==0&(p|0)==0?(a[q+108>>0]&10)==0:0){h=0;p=0}else{r=c[q+112>>2]|0;q=0;while(1){if((c[E+496+(q<<2)>>2]|0)==(r|0)){ka=202;break}q=q+1|0;if((q|0)>=(t|0)){q=0;r=0;break}}if((ka|0)==202){ka=0;q=cw(1,0,q|0)|0;r=L()|0}h=q|h;p=r|p}q=k+72|0;if(q>>>0>>0){S=k;k=q;q=S}else break}}k=Wl(U,v,w,h,p)|0}do if(!k)if(!(a[(c[ba>>2]|0)+9>>0]|0)){k=C;n=c[k>>2]|n;k=c[k+4>>2]|x;ka=212;break}else{k=Yl(U,v,w,h,p)|0;ka=211;break}else ka=211;while(0);t:do if((ka|0)==211){ka=0;p=C;n=c[p>>2]|n;p=c[p+4>>2]|x;switch(k|0){case 0:{k=p;ka=212;break t}case 101:break;default:break r}Db(28,43626,V);k=p}while(0);if((ka|0)==212){ka=0;if(a[D>>0]|0){k=0;break}}m=m+72|0;if(m>>>0>=F>>>0){k=0;break}s=u;y=y+1|0;p=c[z>>2]|0;r=v;q=w;x=k}m=c[J>>2]|0;if((m|0)!=(I|0)){if(H|0){if(c[H+480>>2]|0){Xd(H,m);p=k;break}V=m;if((c[H+304>>2]|0)>>>0<=V>>>0?(c[H+308>>2]|0)>>>0>V>>>0:0){p=H+300|0;c[m>>2]=c[p>>2];c[p>>2]=m;p=k;break}}if(m)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);p=k;break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);p=k;break}else p=k}else p=k}else p=0;while(0);k=c[N>>2]|0;do if(k&17408|0){if(k&1024|0?(Y=G+28|0,a[Y>>0]|0):0){k=G+32|0;m=c[k>>2]|0;do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Z=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);a[Y>>0]=0;c[k>>2]=0;break}if(k&16384|0?(Z=G+32|0,W=c[Z>>2]|0,W|0):0){k=c[W+16>>2]|0;u:do if(k){do if(H|0){m=H+480|0;if(!(c[m>>2]|0)){n=k;if((c[H+304>>2]|0)>>>0>n>>>0)break;if((c[H+308>>2]|0)>>>0<=n>>>0)break;ka=H+300|0;c[k>>2]=c[ka>>2];c[ka>>2]=k}else Xd(H,k);k=c[Z>>2]|0;ka=250;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);ka=248;break}else{ka=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);ka=248;break}}else ka=248;while(0);do if((ka|0)==248){k=c[Z>>2]|0;if(!H){ka=255;break}m=H+480|0;ka=250}while(0);do if((ka|0)==250){if(c[m>>2]|0){Xd(H,k);break}m=k;if((c[H+304>>2]|0)>>>0>m>>>0){ka=255;break}if((c[H+308>>2]|0)>>>0<=m>>>0){ka=255;break}Y=H+300|0;c[k>>2]=c[Y>>2];c[Y>>2]=k}while(0);do if((ka|0)==255){if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Y=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[Z>>2]=0}}while(0);c[J>>2]=I;b[K>>1]=0;b[M>>1]=3;c[N>>2]=0;if(p|0){ka=625;break}Jl(i,0);if(a[ra>>0]|0){ka=625;break}if(c[X>>2]|0){Jl(i,(e[i+72>>1]|0)+1&65535);if(!(a[ra>>0]|0))ka=264;else break}else ka=265}if((ka|0)==264?(c[X>>2]|0)==0:0)ka=265;if((ka|0)==265?!(0==0?(c[Aa+32>>2]&4096|0)==0:0):0){Z=i+64|0;c[Z>>2]=-1;c[Z+4>>2]=-1}if((c[f+36>>2]|0)==0?(a[ra>>0]|0)==0:0){v:do if((j|0)!=0&(d[za>>0]|0)>1?(b[_>>1]&256)==0:0){k=c[j>>2]|0;if((k|0)>0){q=0;h=0;n=0;while(1){m=c[j+4+(q*20|0)>>2]|0;if(!m){m=0;p=0}else{m=Pl(aa,m)|0;p=L()|0;k=c[j>>2]|0}m=m|h;n=p|n;q=q+1|0;if((q|0)>=(k|0)){t=m;s=n;break}else h=m}}else{t=0;s=0}r=c[$>>2]|0;if(!r)A=t;else{k=c[r>>2]|0;if((k|0)>0){q=0;h=k;m=0;k=0;do{n=c[r+4+(q*20|0)>>2]|0;if(!n){n=0;p=0}else{n=Pl(aa,n)|0;p=L()|0;h=c[r>>2]|0}m=n|m;k=p|k;q=q+1|0}while((q|0)<(h|0))}else{m=0;k=0}s=k|s;A=m|t}k=a[za>>0]|0;m=k&255;n=m+-1|0;if((k&255)>1){if(!T){z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;w:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{w=p+8|0;u=c[w>>2]|0;w=c[w+4>>2]|0;if(!((u&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;v=r+(t*48|0)|0;t=(t|0)>0;do if(t){h=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){q=c[p>>2]|0;if(!(c[q+4>>2]&1)){m=x;break w}if((c[h>>2]|0)!=(b[q+36>>1]|0)){m=x;break w}}p=p+48|0}while(p>>>0>>0);h=x&~u;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&u|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0>>0)}else{h=x&~u;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break v}}}z=n;x=-1;n=-1;while(1){y=qa+(z*80|0)|0;p=c[qa+(z*80|0)+64>>2]|0;h=c[ca>>2]|0;q=d[p+16>>0]|0;x:do if(!(a[h+8+(q*72|0)+36>>0]&8))m=x;else{if(!(c[p+36>>2]&4096)){m=x;break}w=p+8|0;v=c[w>>2]|0;w=c[w+4>>2]|0;if(!((v&A|0)==0&(w&s|0)==0)){m=x;break}t=c[ba>>2]|0;r=c[t+20>>2]|0;t=c[t+12>>2]|0;u=r+(t*48|0)|0;t=(t|0)>0;do if(t){q=h+8+(q*72|0)+40|0;p=r;do{aa=p+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){h=c[p>>2]|0;if(!(c[h+4>>2]&1)){m=x;break x}if((c[q>>2]|0)!=(b[h+36>>1]|0)){m=x;break x}}p=p+48|0}while(p>>>0>>0);h=x&~v;p=n&~w;if(!t)break;n=r;do{aa=n+40|0;if(!((c[aa>>2]&v|0)==0?(c[aa+4>>2]&w|0)==0:0)){aa=n+10|0;b[aa>>1]=b[aa>>1]|4}n=n+48|0}while(n>>>0>>0)}else{h=x&~v;p=n&~w}while(0);n=(k&255)+-1|0;if((n|0)!=(z|0)){fw(y|0,qa+(m*80|0)|0,(n-z|0)*80|0)|0;k=a[za>>0]|0}k=k+-1<<24>>24;a[za>>0]=k;o=o+-1|0;m=h;n=p}while(0);if((z|0)>1){aa=z;z=z+-1|0;x=m;m=aa}else{ba=o;J=m;I=n;break}}}else{ba=o;J=-1;I=-1}}else{ba=o;J=-1;I=-1}while(0);ca=(c[i>>2]|0)+132|0;c[ca>>2]=(c[ca>>2]|0)+(b[i+72>>1]|0);do if(da&4){m=(c[i+816>>2]|0)+36|0;n=c[m>>2]|0;o=n&4096;if(!o){if(!(da&8)){D=0;break}k=c[g+24>>2]|0;if(c[k+56>>2]|0){D=0;break}if((da&16|0)==0&(n&8192|0)!=0){D=0;break}}else k=c[g+24>>2]|0;a[i+49>>0]=2-(o>>>12);if(!((n&64|0)==0?1:(c[k+36>>2]&32|0)!=0)){c[m>>2]=n&-65;D=ta&8}else D=0}else D=0;while(0);H=(ba|0)>0;if(H){E=Aa+16|0;F=f+116|0;G=i+49|0;w=ea^1;x=ua+108|0;y=ua+112|0;C=(l|0)==0|w;z=ua+104|0;A=f+40|0;B=i+51|0;u=qa;v=0;while(1){p=d[u+44>>0]|0;s=g+8+(p*72|0)+16|0;o=c[s>>2]|0;m=c[o+72>>2]|0;if(!m)t=-1e6;else{n=c[E>>2]|0;k=0;while(1)if((c[n+(k<<4)+12>>2]|0)==(m|0)){t=k;break}else k=k+1|0}q=c[u+64>>2]|0;r=o+36|0;do if(!(c[r>>2]&2)){if(c[o+12>>2]|0)break;k=c[q+36>>2]|0;if(k&1024|0){k=c[o+64>>2]|0;y:do if(!k)o=0;else while(1){if((c[k>>2]|0)==(Aa|0)){o=k;break y}k=c[k+24>>2]|0;if(!k){o=0;break}}while(0);m=c[g+8+(p*72|0)+40>>2]|0;k=c[x>>2]|0;if((c[y>>2]|0)>(k|0)){c[x>>2]=k+1;ea=c[z>>2]|0;a[ea+(k*20|0)>>0]=-93;b[ea+(k*20|0)+2>>1]=0;c[ea+(k*20|0)+4>>2]=m;c[ea+(k*20|0)+8>>2]=0;c[ea+(k*20|0)+12>>2]=0;c[ea+(k*20|0)+16>>2]=0;a[ea+(k*20|0)+1>>0]=0}else k=Di(ua,163,m,0,0)|0;if(a[(c[ua>>2]|0)+81>>0]|0)break;if((k|0)<0)k=(c[x>>2]|0)+-1|0;m=c[z>>2]|0;n=m+(k*20|0)+1|0;if(a[n>>0]|0){Ei(ua,m+(k*20|0)|0,o,-12);break}if(!o)break;c[m+(k*20|0)+16>>2]=o;a[n>>0]=-12;ea=o+12|0;c[ea>>2]=(c[ea>>2]|0)+1;break}if(c[o+56>>2]|0)break;if(k&64|ia|0){Hj(f,t,c[o+28>>2]|0,0,c[o>>2]|0);break}m=g+8+(p*72|0)+40|0;if(!(a[G>>0]|0))k=108;else{c[ga>>2]=c[m>>2];k=109}Gj(f,c[m>>2]|0,t,o,k);do if(!(a[G>>0]|0)){if((b[o+42>>1]|0)>=64)break;if(c[r>>2]&32|0)break;n=g+8+(p*72|0)+56|0;k=c[n>>2]|0;n=c[n+4>>2]|0;if((k|0)==0&(n|0)==0)m=0;else{m=0;do{k=bw(k|0,n|0,1)|0;n=L()|0;m=m+1|0}while(!((k|0)==0&(n|0)==0))}if(a[(c[ua>>2]|0)+81>>0]|0)break;k=(c[x>>2]|0)+-1|0;n=c[z>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-3;break}else{Ei(ua,n+(k*20|0)|0,m,-3);break}}while(0);k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=D}while(0);h=q+36|0;z:do if(c[h>>2]&512|0){p=c[q+32>>2]|0;do if(c[r>>2]&32|0){ea=p+55|0;if(((d[ea>>0]|d[ea+1>>0]<<8)&3)!=2|w)break;c[u+8>>2]=c[u+4>>2];break z}while(0);do if(!(a[G>>0]|0)){if(!C){o=106;k=l;break}k=c[A>>2]|0;c[A>>2]=k+1;o=108}else{k=c[(c[s>>2]|0)+8>>2]|0;if((k|0)==0|(k|0)==(p|0))k=l;else{m=l;do{m=m+1|0;k=c[k+20>>2]|0}while(!((k|0)==0|(k|0)==(p|0)));k=m}c[ha>>2]=k;o=109}while(0);c[u+8>>2]=k;m=c[p+44>>2]|0;n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ea=c[z>>2]|0;a[ea+(n*20|0)>>0]=o;b[ea+(n*20|0)+2>>1]=0;c[ea+(n*20|0)+4>>2]=k;c[ea+(n*20|0)+8>>2]=m;c[ea+(n*20|0)+12>>2]=t;c[ea+(n*20|0)+16>>2]=0;a[ea+(n*20|0)+1>>0]=0}else Di(ua,o,k,m,t)|0;m=c[wa>>2]|0;n=Ij(f,p)|0;A:do if(n|0){k=c[m>>2]|0;if(!(a[k+81>>0]|0)){da=c[m+104>>2]|0;ea=(c[m+108>>2]|0)+-1|0;a[da+(ea*20|0)+1>>0]=-9;c[da+(ea*20|0)+16>>2]=n;break}if(c[k+480>>2]|0)break;ea=(c[n>>2]|0)+-1|0;c[n>>2]=ea;if(ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;ea=k+300|0;c[n>>2]=c[ea>>2];c[ea>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);ea=c[h>>2]|0;if(!((ea&15|0)!=0&(ea&32770|0)==0))break;if(b[fa>>1]&1)break;if((a[B>>0]|0)==2)break;k=c[x>>2]|0;if((k|0)<=0)break;b[(c[z>>2]|0)+((k+-1|0)*20|0)+2>>1]=2}while(0);B:do if((t|0)>-1){o=c[F>>2]|0;o=(o|0)==0?f:o;k=o+84|0;m=c[k>>2]|0;n=1<>2]=m|n;if((t|0)!=1)break;r=c[o>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,va,0,542)|0;if(m|0){cd(o,32157,ja);c[o+12>>2]=m;break}ea=c[va>>2]|0;c[(c[k>>2]|0)+20>>2]=ea;k=c[r+92>>2]|0;o=c[ea+4>>2]|0;c[o+4>>2]=c[ea>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;h=o+36|0;q=(c[p>>2]|0)-(c[h>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[p>>2]=k;n=o+80|0;k=c[n>>2]|0;if(!k)break;m=k+-4|0;c[n>>2]=m;k=m;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ea=(c[14820]|0)+1|0;c[14820]=ea;c[14821]=(ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421;break}else{k=Wa[c[29352>>2]&127](m)|0;ka=421}while(0);do if((ka|0)==421){ka=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ea=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ea=Se(c[o>>2]|0,p,q)|0;c[h>>2]=(c[p>>2]|0)-(q&65535);if((ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break B}while(0)}while(0);v=v+1|0;if((v|0)==(ba|0)){aa=x;break}else u=u+80|0}}else aa=ua+108|0;c[i+56>>2]=c[aa>>2];if(!(a[ra>>0]|0)){if(!H){Aa=i;Ra=Ba;return Aa|0}W=va+20|0;X=va+4|0;Y=va+8|0;Z=va+24|0;_=f+40|0;j=f+19|0;$=f+44|0;V=0;U=I;do{T=qa+(V*80|0)|0;m=qa+(V*80|0)+64|0;if(c[(c[m>>2]|0)+36>>2]&16384|0){O=qa+(V*80|0)+44|0;I=d[O>>0]|0;S=c[wa>>2]|0;R=S+108|0;k=c[R>>2]|0;P=S+112|0;if((c[P>>2]|0)>(k|0)){c[R>>2]=k+1;A=c[S+104>>2]|0;a[A+(k*20|0)>>0]=17;A=A+(k*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0));Q=k}else Q=Di(S,17,0,0,0)|0;M=g+8+(I*72|0)+16|0;H=c[M>>2]|0;k=c[ma>>2]|0;ja=c[la>>2]|0;N=k+(ja*48|0)|0;G=c[m>>2]|0;C:do if((ja|0)>0){y=g+8+(I*72|0)+40|0;z=g+8+(I*72|0)+36|0;A=H+4|0;B=G+44|0;C=G+48|0;D=G+56|0;w=0;x=k;p=0;k=0;m=0;n=0;while(1){o=c[x>>2]|0;ja=G;do if((c[ja>>2]|0)==0&(c[ja+4>>2]|0)==0){if(b[x+10>>1]&2)break;if(c[o+4>>2]&1|0)break;ja=c[y>>2]|0;a[W>>0]=3;c[X>>2]=127;c[Y>>2]=128;c[Z>>2]=ja;_j(va,o)|0;if(!(a[W>>0]|0))break;ja=c[f>>2]|0;k=Xk(ja,k,dk(ja,o,0,0)|0)|0}while(0);do if((c[x+20>>2]|0)==(c[y>>2]|0)){o=e[x+12>>1]|0;if(!(o&130)){o=w;break}if(a[z>>0]&8?!((o&128|0)==0?1:(c[(c[x>>2]|0)+4>>2]&1|0)!=0):0){o=w;break}ja=x+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=w;break}o=c[x+28>>2]|0;if((o|0)<0){o=w;break}if(!(Vl(c[x>>2]|0,a[(c[(c[M>>2]|0)+4>>2]|0)+(o<<4)+13>>0]|0)|0)){o=w;break}ja=(o|0)>63;u=cw(1,0,o|0)|0;v=L()|0;u=ja?0:u;v=ja?-2147483648:v;if(!(p<<24>>24)){t=c[(c[A>>2]|0)+(o<<4)>>2]|0;c[xa>>2]=c[H>>2];c[xa+4>>2]=t;Db(284,43705,xa);t=1}else t=p;if(!((u&m|0)==0&(v&n|0)==0)){p=t;o=w;break}r=c[f>>2]|0;o=w+1|0;if((w|0)<(e[B>>1]|0))p=c[C>>2]|0;else{s=w+8&-8;q=s<<2;D:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))ka=471;else break C;else{do if(!(0<0|(0==0?(e[r+276>>1]|0)>>>0>>0:0))){h=r+300|0;p=c[h>>2]|0;if(p|0){c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}h=r+296|0;p=c[h>>2]|0;if(!p){p=r+292|0;break}else{c[h>>2]=c[p>>2];ja=r+284|0;c[ja>>2]=(c[ja>>2]|0)+1;break D}}else p=r+288|0;while(0);c[p>>2]=(c[p>>2]|0)+1;ka=471}while(0);if((ka|0)==471){ka=0;p=_d(r,q,0)|0}if(!p)break C;ew(p|0,c[C>>2]|0,e[B>>1]<<2|0)|0;h=c[C>>2]|0;E:do if((h|0)!=(D|0)){if(c[r+480>>2]|0){Xd(r,h);break}q=h;do if((c[r+304>>2]|0)>>>0<=q>>>0){if((c[r+308>>2]|0)>>>0<=q>>>0)break;ja=r+300|0;c[h>>2]=c[ja>>2];c[ja>>2]=h;break E}while(0);if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{ja=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[C>>2]=p;b[B>>1]=s}c[p+(w<<2)>>2]=x;p=t;m=u|m;n=v|n}else o=w;while(0);x=x+48|0;if(x>>>0>=N>>>0){ka=486;break}else w=o}}else{o=0;k=0;n=0;m=0;ka=486}while(0);F:do if((ka|0)==486){ka=0;K=o&65535;b[G+40>>1]=K;b[G+24>>1]=K;K=G+36|0;c[K>>2]=16961;D=g+8+(I*72|0)+56|0;B=D;h=c[B+4>>2]|0;B=c[B>>2]&~m;z=h&((n|-2147483648)^2147483647);E=H+42|0;y=b[E>>1]|0;p=y<<16>>16;A=(y<<16>>16<63?y:63)<<16>>16;y=y<<16>>16>0;if(y){n=0;m=o;do{ja=cw(1,0,n|0)|0;m=m+(((ja&B|0)!=0|((L()|0)&z|0)!=0)&1)|0;n=n+1|0}while((n|0)<(A|0))}else m=o;q=c[f>>2]|0;C=((h|0)<0?p+-62|0:1)+m|0;s=C&65535;u=C<<16;t=u>>16;h=(u>>14)+7&-8;u=u>>15;r=u+2|0;p=h+72+(t+7+u+r&-8)|0;o=((p|0)<0)<<31>>31;G:do if(!q){ja=Sv(p|0,o|0,-1,-1)|0;l=L()|0;if(l>>>0>0|(l|0)==0&ja>>>0>2147483390)break F;if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](p)|0;ka=513;break}m=Wa[c[29356>>2]&127](p)|0;if((c[14985]|0)>>>0

      >>0)c[14985]=p;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ja=c[14978]|0;l=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;ia=L()|0;c[14768]=((ia|0)<0|(ia|0)==0&l>>>0<=ja>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n)break F;m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){F=n;break}c[14987]=m;F=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0)break F}else{do if(!(0>>0|(0==(o|0)?(e[q+276>>1]|0)>>>0

      >>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ka=q+284|0;c[ka>>2]=(c[ka>>2]|0)+1;ka=513;break G}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,p,o)|0;ka=513}while(0);if((ka|0)==513){ka=0;if(!m)break;else F=m}gw(F|0,0,p|0)|0;n=F+72|0;x=F+32|0;c[x>>2]=n;n=n+h|0;c[F+8>>2]=n;n=n+r|0;w=F+4|0;c[w>>2]=n;c[F+28>>2]=n+u;b[F+52>>1]=s;b[F+50>>1]=t+65535;c[G+32>>2]=F;c[F>>2]=43731;c[F+12>>2]=H;n=c[ma>>2]|0;if(n>>>0>>0){v=g+8+(I*72|0)+40|0;u=g+8+(I*72|0)+36|0;m=0;p=0;s=0;while(1){do if((c[n+20>>2]|0)==(c[v>>2]|0)){o=e[n+12>>1]|0;if(!(o&130)){o=s;break}if(a[u>>0]&8?!((o&128|0)==0?1:(c[(c[n>>2]|0)+4>>2]&1|0)!=0):0){o=s;break}ja=n+32|0;if(!((c[ja>>2]&J|0)==0?(c[ja+4>>2]&U|0)==0:0)){o=s;break}q=c[n+28>>2]|0;if((q|0)<0){o=s;break}r=c[n>>2]|0;if(!(Vl(r,a[(c[(c[M>>2]|0)+4>>2]|0)+(q<<4)+13>>0]|0)|0)){o=s;break}ja=(q|0)>63;o=cw(1,0,q|0)|0;h=L()|0;o=ja?0:o;h=ja?-2147483648:h;if(!((o&p|0)==0&(h&s|0)==0)){o=s;break}t=o|p;h=h|s;b[(c[w>>2]|0)+(m<<1)>>1]=q;o=c[r+12>>2]|0;p=c[r+16>>2]|0;H:do if(!(c[o+4>>2]&256)){do if(p|0){if(!(c[p+4>>2]&256))break;o=Yi(f,p)|0;ka=531;break H}while(0);o=Yi(f,o)|0;if(o|0){ka=532;break}o=Yi(f,p)|0;ka=531}else{o=Yi(f,o)|0;ka=531}while(0);if((ka|0)==531){ka=0;if(!o)o=34049;else ka=532}if((ka|0)==532){ka=0;o=c[o>>2]|0}c[(c[x>>2]|0)+(m<<2)>>2]=o;m=m+1|0;p=t;o=h}else o=s;while(0);n=n+48|0;if(n>>>0>=N>>>0)break;else s=o}}else m=0;if(y){n=0;do{ja=cw(1,0,n|0)|0;if(!((ja&B|0)==0&((L()|0)&z|0)==0)){b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0}n=n+1|0}while((n|0)<(A|0))}do if((c[D+4>>2]|0)<0){if((b[E>>1]|0)<=63){z=m;break}n=63;do{b[(c[w>>2]|0)+(m<<1)>>1]=n;c[(c[x>>2]|0)+(m<<2)>>2]=34049;m=m+1|0;n=n+1|0}while((n|0)<(b[E>>1]|0));z=m}else z=m;while(0);b[(c[w>>2]|0)+(z<<1)>>1]=-1;c[(c[x>>2]|0)+(z<<2)>>2]=34049;m=c[_>>2]|0;c[_>>2]=m+1;u=qa+(V*80|0)+8|0;c[u>>2]=m;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;ja=c[S+104>>2]|0;a[ja+(n*20|0)>>0]=112;b[ja+(n*20|0)+2>>1]=0;c[ja+(n*20|0)+4>>2]=m;c[ja+(n*20|0)+8>>2]=C;c[ja+(n*20|0)+12>>2]=0;c[ja+(n*20|0)+16>>2]=0;a[ja+(n*20|0)+1>>0]=0}else Di(S,112,m,C,0)|0;m=c[wa>>2]|0;o=Ij(f,F)|0;I:do if(o|0){n=c[m>>2]|0;if(!(a[n+81>>0]|0)){l=c[m+104>>2]|0;ja=(c[m+108>>2]|0)+-1|0;a[l+(ja*20|0)+1>>0]=-9;c[l+(ja*20|0)+16>>2]=o;break}if(c[n+480>>2]|0)break;ja=(c[o>>2]|0)+-1|0;c[o>>2]=ja;if(ja|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break I}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ja=m+300|0;c[o>>2]=c[ja>>2];c[ja>>2]=o;break I}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ja=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ja;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);v=c[(c[ya>>2]|0)+4>>2]|0;t=d[O>>0]|0;y=v+8+(t*72|0)+37|0;do if(!(a[y>>0]&16)){m=c[qa+(V*80|0)+4>>2]|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=36;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=m;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;m=0;break}else{x=Di(S,36,m,0,0)|0;m=0;break}}else{p=c[v+8+(t*72|0)+28>>2]|0;m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;A=c[S+104>>2]|0;a[A+(m*20|0)>>0]=70;A=A+(m*20|0)+1|0;B=A+19|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}else m=Di(S,70,0,0,0)|0;n=c[v+8+(t*72|0)+24>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=13;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=p;c[ja+(o*20|0)+8>>2]=0;c[ja+(o*20|0)+12>>2]=n;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,13,p,0,n)|0;n=c[R>>2]|0;if((c[P>>2]|0)>(n|0)){c[R>>2]=n+1;x=c[S+104>>2]|0;a[x+(n*20|0)>>0]=14;b[x+(n*20|0)+2>>1]=0;c[x+(n*20|0)+4>>2]=p;c[x+(n*20|0)+8>>2]=0;c[x+(n*20|0)+12>>2]=0;c[x+(n*20|0)+16>>2]=0;a[x+(n*20|0)+1>>0]=0;x=n;break}else{x=Di(S,14,p,0,0)|0;break}}while(0);q=(k|0)!=0;if(q){h=(c[sa>>2]|0)+-1|0;c[sa>>2]=h;Tj(f,k,h,16);c[K>>2]=c[K>>2]|131072}else h=0;n=a[j>>0]|0;if(!(n<<24>>24)){w=(c[$>>2]|0)+1|0;c[$>>2]=w}else{w=n+-1<<24>>24;a[j>>0]=w;w=c[f+148+((w&255)<<2)>>2]|0}s=qa+(V*80|0)+4|0;r=el(f,F,c[s>>2]|0,w,0,0,0,0)|0;n=c[u>>2]|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=-124;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=n;c[ja+(o*20|0)+8>>2]=w;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0}else Di(S,132,n,w,0)|0;p=c[R>>2]|0;if((p|0)>0)b[(c[S+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=16;do if(q){o=c[S+12>>2]|0;n=~h;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,S,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=p;break}}while(0);do if(!(a[y>>0]&16)){m=c[s>>2]|0;n=x+1|0;o=c[R>>2]|0;if((c[P>>2]|0)>(o|0)){c[R>>2]=o+1;ja=c[S+104>>2]|0;a[ja+(o*20|0)>>0]=5;b[ja+(o*20|0)+2>>1]=0;c[ja+(o*20|0)+4>>2]=m;c[ja+(o*20|0)+8>>2]=n;c[ja+(o*20|0)+12>>2]=0;c[ja+(o*20|0)+16>>2]=0;a[ja+(o*20|0)+1>>0]=0;break}else{Di(S,5,m,n,0)|0;break}}else{if((m|0)<0)m=(c[R>>2]|0)+-1|0;if(!(a[(c[S>>2]|0)+81>>0]|0))m=(c[S+104>>2]|0)+(m*20|0)|0;else m=59308;c[m+8>>2]=r+z;q=c[s>>2]|0;h=c[v+8+(t*72|0)+32>>2]|0;n=c[wa>>2]|0;if((x|0)<0)m=(c[n+108>>2]|0)+-1|0;else m=x;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;p=c[n+108>>2]|0;if((p|0)>(x|0)?(a[(c[f>>2]|0)+81>>0]|0)==0:0){n=x;while(1){o=m+4|0;J:do if((c[o>>2]|0)==(q|0))switch(a[m>>0]|0){case 90:{a[m>>0]=78;l=m+8|0;c[o>>2]=(c[l>>2]|0)+h;ja=m+12|0;c[l>>2]=c[ja>>2];c[ja>>2]=0;break J}case -128:{a[m>>0]=83;ja=m+8|0;c[o>>2]=c[ja>>2];c[ja>>2]=1;break J}default:break J}while(0);n=n+1|0;if((n|0)==(p|0))break;else m=m+20|0}}m=c[R>>2]|0;if((c[P>>2]|0)>(m|0)){c[R>>2]=m+1;ja=c[S+104>>2]|0;a[ja+(m*20|0)>>0]=11;b[ja+(m*20|0)+2>>1]=0;c[ja+(m*20|0)+4>>2]=0;c[ja+(m*20|0)+8>>2]=x;c[ja+(m*20|0)+12>>2]=0;c[ja+(m*20|0)+16>>2]=0;a[ja+(m*20|0)+1>>0]=0}else Di(S,11,0,x,0)|0;a[y>>0]=a[y>>0]&-17}while(0);n=c[R>>2]|0;if((n|0)>0)b[(c[S+104>>2]|0)+((n+-1|0)*20|0)+2>>1]=3;o=(a[(c[S>>2]|0)+81>>0]|0)==0;if(o)m=(c[S+104>>2]|0)+(((x|0)<0?n+-1|0:x)*20|0)|0;else m=59308;c[m+8>>2]=n;do if(w){m=a[j>>0]|0;if((m&255)>=8)break;a[j>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=w;n=c[R>>2]|0}while(0);if(o)m=(c[S+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+8>>2]=n}while(0);if(k|0)ni(c[f>>2]|0,k);if(a[ra>>0]|0){ka=625;break e}}Kl(f,g,T,ta);c[qa+(V*80|0)+32>>2]=c[aa>>2];J=Ll(f,ua,i,V,T,J,U)|0;U=L()|0;c[na>>2]=c[qa+(V*80|0)+24>>2];V=V+1|0}while((V|0)<(ba|0));Ra=Ba;return i|0}}}else ka=625;while(0);if((ka|0)==625?(i|0)==0:0){Aa=0;Ra=Ba;return Aa|0}c[oa>>2]=c[pa>>2];k=a[za>>0]|0;K:do if(k<<24>>24){n=Aa+480|0;o=Aa+304|0;p=Aa+308|0;h=Aa+300|0;if(!Aa){m=0;while(1){xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=a[za>>0]|0}m=m+1|0;if(m>>>0>=(k&255)>>>0)break K}}m=0;do{xa=c[i+752+(m*80|0)+64>>2]|0;if((xa|0)!=0?(c[xa+36>>2]&2048|0)!=0:0){k=c[i+752+(m*80|0)+60>>2]|0;do if(k|0){if(c[n>>2]|0){Xd(Aa,k);break}xa=k;if((c[o>>2]|0)>>>0<=xa>>>0?(c[p>>2]|0)>>>0>xa>>>0:0){c[k>>2]=c[h>>2];c[h>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{xa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-xa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);k=a[za>>0]|0}m=m+1|0}while(m>>>0<(k&255)>>>0)}while(0);om(ya);m=i+60|0;k=c[m>>2]|0;if(k|0)do{c[m>>2]=c[k+52>>2];$l(Aa,k);k=c[m>>2]|0}while((k|0)!=0);if(Aa|0){if(c[Aa+480>>2]|0){Xd(Aa,i);Aa=0;Ra=Ba;return Aa|0}za=i;if((c[Aa+304>>2]|0)>>>0<=za>>>0?(c[Aa+308>>2]|0)>>>0>za>>>0:0){Aa=Aa+300|0;c[i>>2]=c[Aa>>2];c[Aa>>2]=i;Aa=0;Ra=Ba;return Aa|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}else{Aa=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Aa=0;Ra=Ba;return Aa|0}return 0}function rl(f,g,h,i,j,k,l,m){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var 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;P=Ra;Ra=Ra+16|0;u=P;O=c[f+8>>2]|0;K=a[k>>0]|0;y=k+4|0;M=c[y>>2]|0;if(!j)s=0;else s=d[j+1>>0]|0;if(!i)N=0;else N=(c[i>>2]|0)==0?0:i;F=(N|0)!=0;v=(s|0)!=0;do if(!(v|F)?(o=c[g+16>>2]|0,(o|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;L=c[O+104>>2]|0;a[L+(n*20|0)>>0]=47;b[L+(n*20|0)+2>>1]=0;c[L+(n*20|0)+4>>2]=o;c[L+(n*20|0)+8>>2]=l;c[L+(n*20|0)+12>>2]=1;c[L+(n*20|0)+16>>2]=0;a[L+(n*20|0)+1>>0]=0;break}else{Di(O,47,o,l,1)|0;break}}while(0);n=c[g>>2]|0;t=c[n>>2]|0;q=k+8|0;r=c[q>>2]|0;if(r){p=f+44|0;o=c[p>>2]|0;if((r+t|0)>(o|0)){i=0;E=16}else{C=0;L=r}}else{if(F){i=(c[c[N>>2]>>2]|0)+((a[N+32>>0]&1^1)&255)|0;p=f+44|0;o=i+(c[p>>2]|0)|0;c[p>>2]=o}else{o=f+44|0;i=0;p=o;o=c[o>>2]|0}r=o+1|0;c[q>>2]=r;E=16}if((E|0)==16){c[p>>2]=o+t;C=i;L=r}c[k+12>>2]=t;a:do if((h|0)>-1)if((t|0)>0){n=O+108|0;o=O+112|0;p=O+104|0;i=0;do{q=i+L|0;r=c[n>>2]|0;if((c[o>>2]|0)>(r|0)){c[n>>2]=r+1;G=c[p>>2]|0;a[G+(r*20|0)>>0]=90;b[G+(r*20|0)+2>>1]=0;c[G+(r*20|0)+4>>2]=h;c[G+(r*20|0)+8>>2]=i;c[G+(r*20|0)+12>>2]=q;c[G+(r*20|0)+16>>2]=0;a[G+(r*20|0)+1>>0]=0}else Di(O,90,h,i,q)|0;i=i+1|0}while((i|0)!=(t|0));G=t;x=L}else{G=t;x=L}else{switch(K<<24>>24){case 3:{G=t;x=L;break a}case 9:case 10:case 13:{i=1;break}default:i=0}if((K|2)<<24>>24!=14&((s|0)==0&F)){i=i|12;q=N+4|0;p=c[q>>2]|0;o=c[N>>2]|0;if((p|0)<(c[o>>2]|0)){n=p;do{p=b[o+4+(n*20|0)+16>>1]|0;if(!(p<<16>>16))n=n+1|0;else{n=n+1|0;b[(c[g>>2]|0)+4+(((p&65535)+-1|0)*20|0)+16>>1]=n-(c[q>>2]|0);o=c[N>>2]|0}}while((n|0)<(c[o>>2]|0));n=c[g>>2]|0;r=c[n>>2]|0}else r=t;if((r|0)>0){p=t;o=L;q=0;do{G=(b[n+4+(q*20|0)+16>>1]|0)==0;o=G?o:0;p=p+((G^1)<<31>>31)|0;q=q+1|0}while((q|0)<(r|0))}else{p=t;o=L}}else{p=t;o=L}c[u>>2]=L;a[u+4>>0]=i;if(c[g+12>>2]|0?(C|0)>0&(i&8)!=0:0){c[N+36>>2]=u;G=p;x=0;break}Oj(f,n,L,0,i);G=p;x=o}while(0);do if(v){b:do switch(a[j+1>>0]|0){case 2:{n=f+44|0;i=c[n>>2]|0;w=i+1|0;c[n>>2]=i+G;n=j+8|0;i=c[n>>2]|0;o=c[O>>2]|0;if(!(a[o+81>>0]|0)){j=c[O+104>>2]|0;u=j+(i*20|0)+1|0;v=j+(i*20|0)+16|0;kg(o,a[u>>0]|0,c[v>>2]|0);a[u>>0]=0;c[v>>2]=0;a[j+(i*20|0)>>0]=-86;i=c[n>>2]|0}if((i|0)<0)i=(c[O+108>>2]|0)+-1|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(i*20|0)|0;else i=59308;a[i>>0]=73;c[i+4>>2]=1;c[i+8>>2]=w;t=O+108|0;i=c[t>>2]|0;h=i+G|0;u=G+-1|0;v=O+112|0;if((G|0)>0){s=O+104|0;r=0;do{q=Yi(f,c[(c[g>>2]|0)+4+(r*20|0)>>2]|0)|0;i=r+L|0;n=r+w|0;o=c[t>>2]|0;p=(c[v>>2]|0)>(o|0);do if((r|0)<(u|0))if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=52;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=h;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,52,i,h,n)|0;break}else if(p){c[t>>2]=o+1;j=c[s>>2]|0;a[j+(o*20|0)>>0]=53;b[j+(o*20|0)+2>>1]=0;c[j+(o*20|0)+4>>2]=i;c[j+(o*20|0)+8>>2]=l;c[j+(o*20|0)+12>>2]=n;c[j+(o*20|0)+16>>2]=0;a[j+(o*20|0)+1>>0]=0;break}else{Di(O,53,i,l,n)|0;break}while(0);do if(!(a[(c[O>>2]|0)+81>>0]|0)){i=(c[t>>2]|0)+-1|0;n=c[s>>2]|0;o=n+(i*20|0)+1|0;if(a[o>>0]|0){Ei(O,n+(i*20|0)|0,q,-2);break}if(q|0){c[n+(i*20|0)+16>>2]=q;a[o>>0]=-2}}while(0);i=c[t>>2]|0;if((i|0)>0)b[(c[s>>2]|0)+((i+-1|0)*20|0)+2>>1]=128;r=r+1|0}while((r|0)!=(G|0))}if((c[v>>2]|0)>(i|0)){c[t>>2]=i+1;j=c[O+104>>2]|0;a[j+(i*20|0)>>0]=78;b[j+(i*20|0)+2>>1]=0;c[j+(i*20|0)+4>>2]=L;c[j+(i*20|0)+8>>2]=w;c[j+(i*20|0)+12>>2]=u;c[j+(i*20|0)+16>>2]=0;a[j+(i*20|0)+1>>0]=0;break b}else{Di(O,78,L,w,u)|0;break b}}case 1:{i=c[j+8>>2]|0;n=c[O>>2]|0;if(!(a[n+81>>0]|0)){j=c[O+104>>2]|0;v=j+(i*20|0)+1|0;w=j+(i*20|0)+16|0;kg(n,a[v>>0]|0,c[w>>2]|0);a[v>>0]=0;c[w>>2]=0;a[j+(i*20|0)>>0]=-86}break}default:ym(f,c[j+4>>2]|0,l,G,L)}while(0);if((N|0)==0?(z=c[g+16>>2]|0,(z|0)>0):0){i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;j=c[O+104>>2]|0;a[j+(n*20|0)>>0]=47;b[j+(n*20|0)+2>>1]=0;c[j+(n*20|0)+4>>2]=z;c[j+(n*20|0)+8>>2]=l;c[j+(n*20|0)+12>>2]=1;c[j+(n*20|0)+16>>2]=0;a[j+(n*20|0)+1>>0]=0;break}else{Di(O,47,z,l,1)|0;break}}}while(0);c:do switch(K<<24>>24){case 1:{q=f+19|0;i=a[q>>0]|0;if(!(i<<24>>24)){K=f+44|0;p=(c[K>>2]|0)+1|0;c[K>>2]=p}else{p=i+-1<<24>>24;a[q>>0]=p;p=c[f+148+((p&255)<<2)>>2]|0}n=O+108|0;i=c[n>>2]|0;o=O+112|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=p;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;i=c[n>>2]|0;if((c[o>>2]|0)>(i|0)){c[n>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=p;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,p,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if((p|0)!=0?(A=a[q>>0]|0,(A&255)<8):0){a[q>>0]=A+1<<24>>24;c[f+148+((A&255)<<2)>>2]=p;E=237}else E=237;break}case 2:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=-123;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=M;c[E+(n*20|0)+8>>2]=L;c[E+(n*20|0)+12>>2]=G;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,133,M,L,G)|0;E=237;break c}}case 12:case 14:case 6:case 5:{t=C+1|0;h=(C|0)==0;do if(h){i=f+19|0;n=a[i>>0]|0;if(!(n<<24>>24)){E=f+44|0;s=(c[E>>2]|0)+1|0;c[E>>2]=s;break}else{s=n+-1<<24>>24;a[i>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0;break}}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)>(C|0)){c[i>>2]=n+t;c[o>>2]=p-t;s=n;break}else{E=f+44|0;s=c[E>>2]|0;c[E>>2]=s+t;s=s+1|0;break}}while(0);p=s+C|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;E=c[O+104>>2]|0;a[E+(i*20|0)>>0]=92;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=L;c[E+(i*20|0)+8>>2]=G;c[E+(i*20|0)+12>>2]=p;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(O,92,L,G,p)|0;if(K<<24>>24==6){i=c[q>>2]|0;n=i+4|0;o=M+1|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=n;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,o,n,s)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){K=c[O+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=o;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,o,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){L=c[O+104>>2]|0;a[L+(i*20|0)+1>>0]=-3;c[L+(i*20|0)+16>>2]=G}}if(!F){o=f+19|0;i=a[o>>0]|0;if(!(i<<24>>24)){L=f+44|0;n=(c[L>>2]|0)+1|0;c[L>>2]=n}else{n=i+-1<<24>>24;a[o>>0]=n;n=c[f+148+((n&255)<<2)>>2]|0}i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=121;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=n;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,121,M,n,0)|0;i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=122;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=s;c[L+(i*20|0)+12>>2]=n;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,122,M,s,n)|0;i=c[q>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=8;if(n|0?(H=a[o>>0]|0,(H&255)<8):0){a[o>>0]=H+1<<24>>24;c[f+148+((H&255)<<2)>>2]=n}}else zm(f,N,g,p,x,1,C);if(!h){i=f+28|0;if((c[i>>2]|0)>(C|0)){E=237;break c}c[i>>2]=t;c[f+32>>2]=s;E=237;break c}if((s|0)!=0?(I=f+19|0,J=a[I>>0]|0,(J&255)<8):0){a[I>>0]=J+1<<24>>24;c[f+148+((J&255)<<2)>>2]=s;E=237}else E=237;break}case 11:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}h=f+19|0;i=a[h>>0]|0;if(!(i<<24>>24)){K=f+44|0;s=(c[K>>2]|0)+1|0;c[K>>2]=s}else{s=i+-1<<24>>24;a[h>>0]=s;s=c[f+148+((s&255)<<2)>>2]|0}p=c[k+16>>2]|0;q=O+108|0;i=c[q>>2]|0;r=O+112|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=s;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,92,L,G,s)|0;n=c[O>>2]|0;do if(a[n+81>>0]|0){if((G|0)!=-12)kg(n,G,p)}else{if((i|0)<0)i=(c[q>>2]|0)+-1|0;n=c[O+104>>2]|0;o=n+(i*20|0)|0;if((G|0)<=-1?(B=n+(i*20|0)+1|0,(a[B>>0]|0)==0):0){if((G|0)==-3){c[n+(i*20|0)+16>>2]=p;a[B>>0]=-3;break}if(!p)break;c[n+(i*20|0)+16>>2]=p;a[B>>0]=G;if((G|0)!=-12)break;K=p+12|0;c[K>>2]=(c[K>>2]|0)+1;break}Ei(O,o,p,G)}while(0);i=c[q>>2]|0;if((c[r>>2]|0)>(i|0)){c[q>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=M;c[K+(i*20|0)+8>>2]=s;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,132,M,s,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=G}if(s|0?(D=a[h>>0]|0,(D&255)<8):0){a[h>>0]=D+1<<24>>24;c[f+148+((D&255)<<2)>>2]=s}break}case 3:{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;E=c[O+104>>2]|0;a[E+(n*20|0)>>0]=70;b[E+(n*20|0)+2>>1]=0;c[E+(n*20|0)+4>>2]=1;c[E+(n*20|0)+8>>2]=M;c[E+(n*20|0)+12>>2]=0;c[E+(n*20|0)+16>>2]=0;a[E+(n*20|0)+1>>0]=0;E=237;break c}else{Di(O,70,1,M,0)|0;E=237;break c}}case 10:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}break}case 9:case 13:{if(F){zm(f,N,g,L,x,G,C);Ra=P;return}if(K<<24>>24==13){i=c[y>>2]|0;n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;f=c[O+104>>2]|0;a[f+(o*20|0)>>0]=14;b[f+(o*20|0)+2>>1]=0;c[f+(o*20|0)+4>>2]=i;c[f+(o*20|0)+8>>2]=0;c[f+(o*20|0)+12>>2]=0;c[f+(o*20|0)+16>>2]=0;a[f+(o*20|0)+1>>0]=0;break c}else{Di(O,14,i,0,0)|0;break c}}else{i=O+108|0;n=c[i>>2]|0;if((c[O+112>>2]|0)>(n|0)){c[i>>2]=n+1;f=c[O+104>>2]|0;a[f+(n*20|0)>>0]=81;b[f+(n*20|0)+2>>1]=0;c[f+(n*20|0)+4>>2]=L;c[f+(n*20|0)+8>>2]=G;c[f+(n*20|0)+12>>2]=0;c[f+(n*20|0)+16>>2]=0;a[f+(n*20|0)+1>>0]=0;break c}else{Di(O,81,L,G,0)|0;break c}}}case 7:case 8:{v=c[k+20>>2]|0;w=c[v>>2]|0;l=f+19|0;i=a[l>>0]|0;if(!(i<<24>>24)){i=f+44|0;j=(c[i>>2]|0)+1|0;c[i>>2]=j;i=0}else{i=i+-1<<24>>24;a[l>>0]=i;j=c[f+148+((i&255)<<2)>>2]|0}z=w+2|0;y=(z|0)==1;do if(y)if(!(i<<24>>24)){J=f+44|0;x=(c[J>>2]|0)+1|0;c[J>>2]=x;break}else{x=i+-1<<24>>24;a[l>>0]=x;x=c[f+148+((x&255)<<2)>>2]|0;break}else{i=f+32|0;n=c[i>>2]|0;o=f+28|0;p=c[o>>2]|0;if((p|0)<(z|0)){J=f+44|0;x=c[J>>2]|0;c[J>>2]=x+z;x=x+1|0;break}else{c[i>>2]=n+z;c[o>>2]=p-z;x=n;break}}while(0);u=x+w|0;r=u+1|0;q=K<<24>>24==8;if(q){n=M+1|0;o=O+108|0;i=c[o>>2]|0;p=O+112|0;if((c[p>>2]|0)>(i|0)){c[o>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=29;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=n;c[K+(i*20|0)+8>>2]=0;c[K+(i*20|0)+12>>2]=L;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(O,29,n,0,L)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){t=c[O+104>>2]|0;a[t+(i*20|0)+1>>0]=-3;c[t+(i*20|0)+16>>2]=G;t=i;h=o;s=p}else{t=i;h=o;s=p}}else{t=0;h=O+108|0;s=O+112|0}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;K=c[O+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=L;c[K+(i*20|0)+8>>2]=G;c[K+(i*20|0)+12>>2]=r;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else Di(O,92,L,G,r)|0;if(q){i=M+1|0;n=c[h>>2]|0;if((c[s>>2]|0)>(n|0)){c[h>>2]=n+1;K=c[O+104>>2]|0;a[K+(n*20|0)>>0]=-124;b[K+(n*20|0)+2>>1]=0;c[K+(n*20|0)+4>>2]=i;c[K+(n*20|0)+8>>2]=r;c[K+(n*20|0)+12>>2]=0;c[K+(n*20|0)+16>>2]=0;a[K+(n*20|0)+1>>0]=0}else Di(O,132,i,r,0)|0;i=c[h>>2]|0;if((i|0)>0)b[(c[O+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}if((w|0)>0){n=L+-1|0;o=O+104|0;i=0;do{p=n+(e[v+4+(i*20|0)+16>>1]|0)|0;q=i+x|0;r=c[h>>2]|0;if((c[s>>2]|0)>(r|0)){c[h>>2]=r+1;L=c[o>>2]|0;a[L+(r*20|0)>>0]=79;b[L+(r*20|0)+2>>1]=0;c[L+(r*20|0)+4>>2]=p;c[L+(r*20|0)+8>>2]=q;c[L+(r*20|0)+12>>2]=0;c[L+(r*20|0)+16>>2]=0;a[L+(r*20|0)+1>>0]=0}else Di(O,79,p,q,0)|0;i=i+1|0}while((i|0)!=(w|0))}i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=120;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=u;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,120,M,u,0)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=92;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=x;c[L+(i*20|0)+8>>2]=z;c[L+(i*20|0)+12>>2]=j;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(O,92,x,z,j)|0;i=c[h>>2]|0;if((c[s>>2]|0)>(i|0)){c[h>>2]=i+1;L=c[O+104>>2]|0;a[L+(i*20|0)>>0]=-124;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=M;c[L+(i*20|0)+8>>2]=j;c[L+(i*20|0)+12>>2]=x;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else i=Di(O,132,M,j,x)|0;if(!(a[(c[O>>2]|0)+81>>0]|0)){M=c[O+104>>2]|0;a[M+(i*20|0)+1>>0]=-3;c[M+(i*20|0)+16>>2]=z}if(t|0){n=c[h>>2]|0;if(!(a[(c[O>>2]|0)+81>>0]|0))i=(c[O+104>>2]|0)+(((t|0)<0?n+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=n}do if(j|0){i=a[l>>0]|0;if((i&255)>=8)break;a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=j}while(0);if(!y){i=f+28|0;if((c[i>>2]|0)>=(z|0)){E=237;break c}c[i>>2]=z;c[f+32>>2]=x;E=237;break c}if(!x){E=237;break c}i=a[l>>0]|0;if((i&255)>=8){E=237;break c}a[l>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=x;E=237;break}default:E=237}while(0);if((E|0)==237?N|0:0){Ra=P;return}i=c[g+12>>2]|0;if(!i){Ra=P;return}n=O+108|0;o=c[n>>2]|0;if((c[O+112>>2]|0)>(o|0)){c[n>>2]=o+1;O=c[O+104>>2]|0;a[O+(o*20|0)>>0]=49;b[O+(o*20|0)+2>>1]=0;c[O+(o*20|0)+4>>2]=i;c[O+(o*20|0)+8>>2]=m;c[O+(o*20|0)+12>>2]=0;c[O+(o*20|0)+16>>2]=0;a[O+(o*20|0)+1>>0]=0;Ra=P;return}else{Di(O,49,i,m,0)|0;Ra=P;return}}function sl(e){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;D=c[e>>2]|0;E=D+8|0;F=c[E>>2]|0;G=c[e+4>>2]|0;I=c[D>>2]|0;H=e+46|0;g=a[H>>0]|0;if(!(g<<24>>24))f=F+12|0;else{f=F+12|0;u=e+51|0;v=F+108|0;w=F+112|0;x=F+104|0;y=D+44|0;s=g&255;do{t=s;s=s+-1|0;m=c[e+752+(s*80|0)+64>>2]|0;r=e+752+(s*80|0)+45|0;do if((a[r>>0]|0)==-86){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+24>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0){mk(g,F,h);break}else{c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}else{do if((((((a[u>>0]|0)==2?(t|0)==(d[H>>0]|0):0)?(c[m+36>>2]&512|0)!=0:0)?(A=c[m+32>>2]|0,q=A+55|0,((d[q>>0]|d[q+1>>0]<<8)&128)!=0):0)?(q=b[m+30>>1]|0,B=q&65535,q<<16>>16!=0):0)?(b[(c[A+8>>2]|0)+(B<<1)>>1]|0)>35:0){l=(c[y>>2]|0)+1|0;k=e+752+(s*80|0)+8|0;g=0;do{h=c[k>>2]|0;i=g+l|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;q=c[x>>2]|0;a[q+(j*20|0)>>0]=90;b[q+(j*20|0)+2>>1]=0;c[q+(j*20|0)+4>>2]=h;c[q+(j*20|0)+8>>2]=g;c[q+(j*20|0)+12>>2]=i;c[q+(j*20|0)+16>>2]=0;a[q+(j*20|0)+1>>0]=0}else Di(F,90,h,g,i)|0;g=g+1|0}while((g|0)!=(B|0));i=a[r>>0]|0;c[y>>2]=B+1+(c[y>>2]|0);i=i<<24>>24==4?22:25;h=c[k>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;q=c[x>>2]|0;a[q+(g*20|0)>>0]=i;b[q+(g*20|0)+2>>1]=0;c[q+(g*20|0)+4>>2]=h;c[q+(g*20|0)+8>>2]=0;c[q+(g*20|0)+12>>2]=l;c[q+(g*20|0)+16>>2]=0;a[q+(g*20|0)+1>>0]=0}else g=Di(F,i,h,0,l)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){q=c[x>>2]|0;a[q+(g*20|0)+1>>0]=-3;c[q+(g*20|0)+16>>2]=B}h=c[e+752+(s*80|0)+52>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;q=c[x>>2]|0;a[q+(i*20|0)>>0]=11;b[q+(i*20|0)+2>>1]=0;c[q+(i*20|0)+4>>2]=1;c[q+(i*20|0)+8>>2]=h;c[q+(i*20|0)+12>>2]=0;c[q+(i*20|0)+16>>2]=0;a[q+(i*20|0)+1>>0]=0;break}else{Di(F,11,1,h,0)|0;break}}else g=0;while(0);h=c[f>>2]|0;i=~c[e+752+(s*80|0)+24>>2];if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,F,i);else c[(c[h+64>>2]|0)+(i<<2)>>2]=c[v>>2];h=a[r>>0]|0;i=c[e+752+(s*80|0)+48>>2]|0;j=c[e+752+(s*80|0)+52>>2]|0;k=d[e+752+(s*80|0)+46>>0]|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;q=c[x>>2]|0;a[q+(l*20|0)>>0]=h;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=i;c[q+(l*20|0)+8>>2]=j;c[q+(l*20|0)+12>>2]=k;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0}else Di(F,h&255,i,j,k)|0;h=c[v>>2]|0;if((h|0)>0)b[(c[x>>2]|0)+((h+-1|0)*20|0)+2>>1]=d[e+752+(s*80|0)+47>>0]|0;if(g|0){if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((g|0)<0?h+-1|0:g)*20|0)|0;else g=59308;c[g+8>>2]=h}}while(0);q=m+36|0;if(c[q>>2]&2048|0?(z=e+752+(s*80|0)+56|0,(c[z>>2]|0)>0):0){g=c[f>>2]|0;h=~c[e+752+(s*80|0)+16>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=c[z>>2]|0;if((g|0)>0){p=e+752+(s*80|0)+8|0;o=g;n=(c[e+752+(s*80|0)+60>>2]|0)+((g+-1|0)*20|0)|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;while(1){m=n+4|0;g=c[m>>2]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+(((g|0)<-1?l+-1|0:g+1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;j=n+16|0;do if((a[j>>0]|0)!=-86){k=c[n+12>>2]|0;if(k|0){g=c[p>>2]|0;h=l+2|0;i=c[n+8>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;J=c[x>>2]|0;a[J+(l*20|0)>>0]=26;b[J+(l*20|0)+2>>1]=0;c[J+(l*20|0)+4>>2]=g;c[J+(l*20|0)+8>>2]=h;c[J+(l*20|0)+12>>2]=i;c[J+(l*20|0)+16>>2]=0;a[J+(l*20|0)+1>>0]=0;g=l}else g=Di(F,26,g,h,i)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=c[x>>2]|0;a[J+(g*20|0)+1>>0]=-3;c[J+(g*20|0)+16>>2]=k}}g=a[j>>0]|0;h=c[n>>2]|0;i=c[m>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;J=c[x>>2]|0;a[J+(j*20|0)>>0]=g;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=h;c[J+(j*20|0)+8>>2]=i;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0;break}else{Di(F,g&255,h,i,0)|0;break}}while(0);g=c[m>>2]|0;l=c[v>>2]|0;h=a[(c[F>>2]|0)+81>>0]|0;if(!(h<<24>>24))g=(c[x>>2]|0)+((((g|0)<1?l:g)+-1|0)*20|0)|0;else g=59308;c[g+8>>2]=l;if((o|0)<=1)break;else{o=o+-1|0;n=n+-20|0}}}}g=c[f>>2]|0;h=~c[e+752+(s*80|0)+12>>2];if(((c[g+56>>2]|0)+(c[g+60>>2]|0)|0)<0)mk(g,F,h);else c[(c[g+64>>2]|0)+(h<<2)>>2]=c[v>>2];g=e+752+(s*80|0)+20|0;h=c[g>>2]|0;if(h|0){i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=11;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=0;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else Di(F,11,0,h,0)|0;g=c[g>>2]|0;h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){J=h+-1|0;p=c[x>>2]|0;c[p+(((g|0)<0?J:g)*20|0)+8>>2]=h;g=p+(((g|0)<2?J:g+-2|0)*20|0)|0}else{c[14829]=h;g=59308}c[g+8>>2]=h}g=c[e+752+(s*80|0)+40>>2]|0;do if(g|0){h=(c[e+752+(s*80|0)+36>>2]|0)>>>1;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=49;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=h;c[J+(i*20|0)+8>>2]=g;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,49,h,g,0)|0;break}}while(0);h=c[e+752+(s*80|0)>>2]|0;if(h|0){i=c[q>>2]|0;g=c[v>>2]|0;if((c[w>>2]|0)>(g|0)){c[v>>2]=g+1;j=c[x>>2]|0;a[j+(g*20|0)>>0]=47;b[j+(g*20|0)+2>>1]=0;c[j+(g*20|0)+4>>2]=h;c[j+(g*20|0)+8>>2]=0;c[j+(g*20|0)+12>>2]=0;c[j+(g*20|0)+16>>2]=0;a[j+(g*20|0)+1>>0]=0;j=g}else j=Di(F,47,h,0,0)|0;do if(!(i&64)){g=c[e+752+(s*80|0)+4>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);if(!(i&512)){if(i&8192|0?c[e+752+(s*80|0)+56>>2]|0:0)C=87}else C=87;do if((C|0)==87){C=0;g=c[e+752+(s*80|0)+8>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=-127;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=g;c[J+(h*20|0)+8>>2]=0;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,129,g,0,0)|0;break}}while(0);do if((a[r>>0]|0)==66){g=c[e+752+(s*80|0)+48>>2]|0;h=c[e+752+(s*80|0)+28>>2]|0;i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;J=c[x>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=g;c[J+(i*20|0)+8>>2]=h;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0;break}else{Di(F,12,g,h,0)|0;break}}else{g=c[e+752+(s*80|0)+28>>2]|0;h=c[v>>2]|0;if((c[w>>2]|0)>(h|0)){c[v>>2]=h+1;J=c[x>>2]|0;a[J+(h*20|0)>>0]=11;b[J+(h*20|0)+2>>1]=0;c[J+(h*20|0)+4>>2]=0;c[J+(h*20|0)+8>>2]=g;c[J+(h*20|0)+12>>2]=0;c[J+(h*20|0)+16>>2]=0;a[J+(h*20|0)+1>>0]=0;break}else{Di(F,11,0,g,0)|0;break}}while(0);h=c[v>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))g=(c[x>>2]|0)+(((j|0)<0?h+-1|0:j)*20|0)|0;else g=59308;c[g+8>>2]=h}}while((t|0)>1)}f=c[f>>2]|0;g=~c[e+36>>2];if(((c[f+56>>2]|0)+(c[f+60>>2]|0)|0)<0)mk(f,F,g);else c[(c[f+64>>2]|0)+(g<<2)>>2]=c[F+108>>2];f=a[H>>0]|0;a:do if(f<<24>>24){y=e+49|0;z=I+81|0;x=F+108|0;A=F+104|0;B=f&255;v=e+752|0;w=0;while(1){g=d[v+44>>0]|0;i=c[G+8+(g*72|0)+16>>2]|0;h=c[v+64>>2]|0;do if(!(a[G+8+(g*72|0)+37>>0]&16)){g=c[h+36>>2]|0;if(!(g&576)){if(!(g&8192))break;g=v+56|0}else g=h+32|0;g=c[g>>2]|0;if(g|0){if(a[y>>0]|0?(c[(c[g+12>>2]|0)+36>>2]&32|0)==0:0)break;if(!(a[z>>0]|0)){r=c[x>>2]|0;j=c[v+32>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))h=(c[A>>2]|0)+(((j|0)<0?r+-1|0:j)*20|0)|0;else h=59308;if((j|0)<(r|0)){s=i+36|0;t=v+8|0;u=g+52|0;q=i+8|0;p=g+4|0;o=c[v+4>>2]|0;while(1){m=h+4|0;b:do if((c[m>>2]|0)==(o|0))switch(a[h>>0]|0){case 90:{n=h+8|0;g=c[n>>2]|0;if(c[s>>2]&32){i=q;while(1){i=c[i>>2]|0;J=i+55|0;if(((d[J>>0]|d[J+1>>0]<<8)&3)==2)break;else i=i+20|0}g=b[(c[i+4>>2]|0)+(g<<1)>>1]|0}k=g&65535;g=b[u>>1]|0;if(!(g<<16>>16))break b;l=c[p>>2]|0;i=g&65535;g=0;while(1){if((b[l+(g<<1)>>1]|0)==k<<16>>16)break;g=g+1|0;if(g>>>0>=i>>>0)break b}if((g&65535)<<16>>16<=-1)break b;c[n>>2]=g<<16>>16;c[m>>2]=c[t>>2];break b}case -128:{c[m>>2]=c[t>>2];a[h>>0]=-121;break b}case 21:{c[m>>2]=c[t>>2];break b}default:break b}while(0);j=j+1|0;if((j|0)==(r|0))break;else h=h+20|0}}}}}else{k=c[v+32>>2]|0;m=c[v+4>>2]|0;l=c[G+8+(g*72|0)+32>>2]|0;h=c[E>>2]|0;if((k|0)<0)g=(c[h+108>>2]|0)+-1|0;else g=k;if(!(a[(c[h>>2]|0)+81>>0]|0))g=(c[h+104>>2]|0)+(g*20|0)|0;else g=59308;j=c[h+108>>2]|0;if((j|0)>(k|0)?(a[(c[D>>2]|0)+81>>0]|0)==0:0){i=g;g=k;while(1){h=i+4|0;c:do if((c[h>>2]|0)==(m|0))switch(a[i>>0]|0){case 90:{a[i>>0]=78;C=i+8|0;c[h>>2]=(c[C>>2]|0)+l;J=i+12|0;c[C>>2]=c[J>>2];c[J>>2]=0;break c}case -128:{a[i>>0]=73;c[h>>2]=0;c[i+12>>2]=0;break c}default:break c}while(0);g=g+1|0;if((g|0)==(j|0))break;else i=i+20|0}}}while(0);w=w+1|0;if(w>>>0>=B>>>0)break;else v=v+80|0}c[D+132>>2]=c[e+40>>2];if(f<<24>>24){h=I+480|0;i=I+304|0;j=I+308|0;k=I+300|0;if(!I){g=0;while(1){J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=a[H>>0]|0}g=g+1|0;if(g>>>0>=(f&255)>>>0)break a}}g=0;do{J=c[e+752+(g*80|0)+64>>2]|0;if((J|0)!=0?(c[J+36>>2]&2048|0)!=0:0){f=c[e+752+(g*80|0)+60>>2]|0;do if(f|0){if(c[h>>2]|0){Xd(I,f);break}J=f;if((c[i>>2]|0)>>>0<=J>>>0?(c[j>>2]|0)>>>0>J>>>0:0){c[f>>2]=c[k>>2];c[k>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{J=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=a[H>>0]|0}g=g+1|0}while(g>>>0<(f&255)>>>0)}}else c[D+132>>2]=c[e+40>>2];while(0);om(e+80|0);g=e+60|0;f=c[g>>2]|0;if(f|0)do{c[g>>2]=c[f+52>>2];$l(I,f);f=c[g>>2]|0}while((f|0)!=0);if(I|0){if(c[I+480>>2]|0){Xd(I,e);return}J=e;if((c[I+304>>2]|0)>>>0<=J>>>0?(c[I+308>>2]|0)>>>0>J>>>0:0){J=I+300|0;c[e>>2]=c[J>>2];c[J>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{J=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function tl(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,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;E=d+8|0;H=c[E>>2]|0;a[f>>0]=1;C=f+44|0;if((c[C>>2]|0)>0){r=d+56|0;s=d+19|0;t=d+32|0;u=d+28|0;v=H+108|0;w=H+112|0;y=d+44|0;z=H+104|0;A=f+36|0;B=H+12|0;p=c[f+40>>2]|0;g=0;q=0;while(1){k=c[(c[p>>2]|0)+20>>2]|0;if(!k){h=0;o=0}else{j=c[k>>2]|0;do if((j|0)==1){h=a[s>>0]|0;if(!(h<<24>>24)){h=(c[y>>2]|0)+1|0;c[y>>2]=h;break}else{h=h+-1<<24>>24;a[s>>0]=h;h=c[d+148+((h&255)<<2)>>2]|0;break}}else{h=c[t>>2]|0;i=c[u>>2]|0;if((i|0)<(j|0)){h=c[y>>2]|0;c[y>>2]=h+j;h=h+1|0;break}else{c[t>>2]=h+j;c[u>>2]=i-j;break}}while(0);Oj(d,k,h,0,1);o=j}i=c[p+12>>2]|0;if((i|0)>-1){n=(c[r>>2]|0)+-1|0;c[r>>2]=n;ym(d,i,n,1,h)}else n=0;m=p+4|0;do if(c[(c[m>>2]|0)+4>>2]&32){if((o|0)>0){l=0;i=k+4|0;while(1){j=Yi(d,c[i>>2]|0)|0;l=l+1|0;k=(j|0)!=0;if(!((l|0)<(o|0)&(k^1)))break;else i=i+20|0}if(!k)G=19}else G=19;if((G|0)==19){G=0;j=c[(c[d>>2]|0)+8>>2]|0}if(!g)if(!(c[A>>2]|0))g=0;else{g=(c[y>>2]|0)+1|0;c[y>>2]=g}i=c[v>>2]|0;if((c[w>>2]|0)>(i|0)){c[v>>2]=i+1;l=c[z>>2]|0;a[l+(i*20|0)>>0]=82;b[l+(i*20|0)+2>>1]=0;c[l+(i*20|0)+4>>2]=g;c[l+(i*20|0)+8>>2]=0;c[l+(i*20|0)+12>>2]=0;c[l+(i*20|0)+16>>2]=0;a[l+(i*20|0)+1>>0]=0}else i=Di(H,82,g,0,0)|0;if(!(a[(c[H>>2]|0)+81>>0]|0)){if((i|0)<0)i=(c[v>>2]|0)+-1|0;k=c[z>>2]|0;l=k+(i*20|0)+1|0;if(a[l>>0]|0){Ei(H,k+(i*20|0)|0,j,-2);break}if(j){c[k+(i*20|0)+16>>2]=j;a[l>>0]=-2}}}while(0);i=c[p+8>>2]|0;j=c[v>>2]|0;if((c[w>>2]|0)>(j|0)){c[v>>2]=j+1;l=c[z>>2]|0;a[l+(j*20|0)>>0]=-102;b[l+(j*20|0)+2>>1]=0;c[l+(j*20|0)+4>>2]=0;c[l+(j*20|0)+8>>2]=h;c[l+(j*20|0)+12>>2]=i;c[l+(j*20|0)+16>>2]=0;a[l+(j*20|0)+1>>0]=0}else Di(H,154,0,h,i)|0;i=c[m>>2]|0;j=c[H>>2]|0;do if(a[j+81>>0]|0){if(c[i+4>>2]&16|0){if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}m=i;if((c[j+304>>2]|0)>>>0<=m>>>0?(c[j+308>>2]|0)>>>0>m>>>0:0){m=j+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}}else{l=c[z>>2]|0;m=(c[v>>2]|0)+-1|0;a[l+(m*20|0)+1>>0]=-8;c[l+(m*20|0)+16>>2]=i}while(0);i=c[v>>2]|0;if((i|0)>0)b[(c[z>>2]|0)+((i+-1|0)*20|0)+2>>1]=o&255;if((o|0)==1){if(h|0?(x=a[s>>0]|0,(x&255)<8):0){a[s>>0]=x+1<<24>>24;c[d+148+((x&255)<<2)>>2]=h}}else if((c[u>>2]|0)<(o|0)){c[u>>2]=o;c[t>>2]=h}do if(n|0){i=c[B>>2]|0;h=~n;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0){mk(i,H,h);break}else{c[(c[i+64>>2]|0)+(h<<2)>>2]=c[v>>2];break}}while(0);q=q+1|0;if((q|0)>=(c[C>>2]|0))break;else p=p+16|0}if(g)G=63;else G=62}else G=62;if((G|0)==62)if((e|0)==0|(c[f+36>>2]|0)==0)i=0;else{g=e;G=63}do if((G|0)==63){h=H+108|0;i=c[h>>2]|0;if((c[H+112>>2]|0)>(i|0)){c[h>>2]=i+1;C=c[H+104>>2]|0;a[C+(i*20|0)>>0]=18;b[C+(i*20|0)+2>>1]=0;c[C+(i*20|0)+4>>2]=g;c[C+(i*20|0)+8>>2]=0;c[C+(i*20|0)+12>>2]=0;c[C+(i*20|0)+16>>2]=0;a[C+(i*20|0)+1>>0]=0;break}else{i=Di(H,18,g,0,0)|0;break}}while(0);n=f+36|0;if((c[n>>2]|0)>0){l=c[f+28>>2]|0;m=0;while(1){g=c[l+20>>2]|0;o=c[l+16>>2]|0;do if(g){if((a[g>>0]|0)!=-88){F=Jj(d,g,o)|0;G=75;break}k=c[E>>2]|0;g=c[g+28>>2]|0;h=k+108|0;j=c[h>>2]|0;if((c[k+112>>2]|0)>(j|0)){c[h>>2]=j+1;C=c[k+104>>2]|0;a[C+(j*20|0)>>0]=78;b[C+(j*20|0)+2>>1]=0;c[C+(j*20|0)+4>>2]=g;c[C+(j*20|0)+8>>2]=o;c[C+(j*20|0)+12>>2]=0;c[C+(j*20|0)+16>>2]=0;a[C+(j*20|0)+1>>0]=0;break}else{Di(k,78,g,o,0)|0;break}}else{F=Jj(d,0,o)|0;G=75}while(0);do if(((G|0)==75?(G=0,(F|0)!=(o|0)):0)?(D=c[E>>2]|0,D|0):0){g=D+108|0;h=c[g>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[g>>2]=h+1;C=c[D+104>>2]|0;a[C+(h*20|0)>>0]=79;b[C+(h*20|0)+2>>1]=0;c[C+(h*20|0)+4>>2]=F;c[C+(h*20|0)+8>>2]=o;c[C+(h*20|0)+12>>2]=0;c[C+(h*20|0)+16>>2]=0;a[C+(h*20|0)+1>>0]=0;break}else{Di(D,79,F,o,0)|0;break}}while(0);m=m+1|0;if((m|0)>=(c[n>>2]|0))break;else l=l+24|0}}a[f>>0]=0;if(!i)return;h=c[H+108>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))g=(c[H+104>>2]|0)+(((i|0)<0?h+-1|0:i)*20|0)|0;else g=59308;c[g+8>>2]=h;return}function ul(d,f){d=d|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=Ra;Ra=Ra+16|0;t=u;r=c[d+8>>2]|0;s=f+44|0;if((c[s>>2]|0)==(0-(c[f+32>>2]|0)|0)){Ra=u;return}g=c[f+16>>2]|0;h=c[f+20>>2]|0;p=r+108|0;i=c[p>>2]|0;q=r+112|0;if((c[q>>2]|0)>(i|0)){c[p>>2]=i+1;o=c[r+104>>2]|0;a[o+(i*20|0)>>0]=73;b[o+(i*20|0)+2>>1]=0;c[o+(i*20|0)+4>>2]=0;c[o+(i*20|0)+8>>2]=g;c[o+(i*20|0)+12>>2]=h;c[o+(i*20|0)+16>>2]=0;a[o+(i*20|0)+1>>0]=0}else Di(r,73,0,g,h)|0;if((c[s>>2]|0)<=0){Ra=u;return}o=r+104|0;m=c[f+40>>2]|0;n=0;while(1){k=m+12|0;do if((c[k>>2]|0)>-1){j=c[(c[m>>2]|0)+20>>2]|0;if(j|0?(c[j>>2]|0)==1:0){i=c[d>>2]|0;f=i+272|0;a:do if(c[f>>2]|0)if(!(a[i+81>>0]|0))l=21;else{j=0;f=1}else{do if((e[i+276>>1]|0)>=30){g=i+300|0;h=c[g>>2]|0;if(h|0){c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}g=i+296|0;h=c[g>>2]|0;if(!h){g=i+292|0;break}else{c[g>>2]=c[h>>2];l=i+284|0;c[l>>2]=(c[l>>2]|0)+1;l=22;break a}}else g=i+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;l=21}while(0);if((l|0)==21){h=_d(i,30,0)|0;l=22}do if((l|0)==22){l=0;if(!h){g=i+81|0;if((a[g>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[g>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;c[f>>2]=(c[f>>2]|0)+1;g=c[i+236>>2]|0;if(g|0)c[g+12>>2]=7}if(!h){j=0;f=1;break}else{i=0;f=1}}else{c[h+16>>2]=h+28;b[h+6>>1]=1;b[h+8>>1]=2;a[h+4>>0]=a[i+78>>0]|0;c[h+12>>2]=i;c[h>>2]=1;i=h+24|0;c[i>>2]=0;b[i+4>>1]=0;i=h;f=0}g=Yi(d,c[j+4>>2]|0)|0;if(!g)g=c[(c[d>>2]|0)+8>>2]|0;c[h+20>>2]=g;a[c[h+16>>2]>>0]=a[j+16>>0]|0;j=i}while(0);h=c[k>>2]|0;g=c[p>>2]|0;if((c[q>>2]|0)>(g|0)){c[p>>2]=g+1;k=c[o>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=h;c[k+(g*20|0)+8>>2]=0;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else g=Di(r,113,h,0,0)|0;h=c[r>>2]|0;if(!(a[h+81>>0]|0)){if((g|0)<0)g=(c[p>>2]|0)+-1|0;h=c[o>>2]|0;i=h+(g*20|0)+1|0;if(a[i>>0]|0){Ei(r,h+(g*20|0)|0,j,-9);break}if(f)break;c[h+(g*20|0)+16>>2]=j;a[i>>0]=-9;break}if(f|(c[h+480>>2]|0)!=0)break;k=(c[j>>2]|0)+-1|0;c[j>>2]=k;if(k|0)break;g=c[j+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}k=j;if((c[g+304>>2]|0)>>>0<=k>>>0?(c[g+308>>2]|0)>>>0>k>>>0:0){k=g+300|0;c[j>>2]=c[k>>2];c[k>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{k=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}cd(d,44342,t);c[k>>2]=-1}while(0);n=n+1|0;if((n|0)>=(c[s>>2]|0))break;else m=m+16|0}Ra=u;return}function vl(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0;j=c[d+24>>2]|0;i=c[d>>2]|0;d=a[e>>0]|0;a:do if(!(c[j+12>>2]|0)){switch(d<<24>>24){case -94:case -93:break a;case -95:break;default:{j=0;return j|0}}if(!(c[e+4>>2]&16777216)){j=0;return j|0}d=c[j>>2]|0;if(d|0){f=c[e+44>>2]|0;while(1){if((f|0)==(d|0)){d=1;break}d=c[d+32>>2]|0;if(!d)break a}return d|0}}else{if(d<<24>>24!=-94){j=0;return j|0}f=c[j+4>>2]|0;h=c[f>>2]|0;b:do if((h|0)>0){g=c[e+28>>2]|0;d=0;do{if((g|0)==(c[f+8+(d*72|0)+40>>2]|0))break b;d=d+1|0}while((d|0)<(h|0))}else d=0;while(0);if((d|0)==(h|0)){j=0;return j|0}}while(0);h=dk(c[i>>2]|0,e,0,0)|0;g=j+8|0;h=nj(c[i>>2]|0,c[g>>2]|0,h)|0;c[g>>2]=h;if(!h){j=0;return j|0}d=e+4|0;c[d>>2]=c[d>>2]|134217728;ni(c[i>>2]|0,e);c[d>>2]=c[d>>2]&-134217729;d=e;f=d+52|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(f|0));a[e>>0]=-94;b[e+32>>1]=(c[c[g>>2]>>2]|0)+65535;c[e+28>>2]=c[(c[j>>2]|0)+44>>2];j=0;return j|0}function wl(a,b){a=a|0;b=b|0;var d=0,e=0;d=(c[a+24>>2]|0)+12|0;e=c[d>>2]|0;if((e|0)==(b|0)){e=0;return e|0}c[d>>2]=b;$j(a,b)|0;c[d>>2]=e;e=1;return e|0}function xl(b,d){b=b|0;d=d|0;if(c[d+4>>2]&1|0){d=1;return d|0}switch(a[d>>0]|0){case -94:{if((c[b+24>>2]|0)!=(c[d+28>>2]|0)){d=1;return d|0}a[b+20>>0]=1;d=2;return d|0}case 57:case 54:case 55:case 56:case 52:case 53:{b=c[d+12>>2]|0;if((a[b>>0]|0)==-94?c[(c[b+44>>2]|0)+56>>2]|0:0){d=1;return d|0}d=c[d+16>>2]|0;if((a[d>>0]|0)==-94?c[(c[d+44>>2]|0)+56>>2]|0:0){d=1;return d|0}break}case -95:case 49:case -107:case 43:case 45:case 51:case 50:case 19:case -96:{d=1;return d|0}default:{}}d=0;return d|0}function yl(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(!d)return;h=(e|0)==0;while(1){f=c[d>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{g=f+4+(e*20|0)|0;j=zl(b,c[g>>2]|0)|0;c[g>>2]=j;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+40>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}f=c[d+48>>2]|0;if(f|0?(c[f>>2]|0)>0:0){e=0;do{j=f+4+(e*20|0)|0;g=zl(b,c[j>>2]|0)|0;c[j>>2]=g;e=e+1|0}while((e|0)<(c[f>>2]|0))}e=d+44|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=d+36|0;f=zl(b,c[e>>2]|0)|0;c[e>>2]=f;e=c[d+32>>2]|0;f=c[e>>2]|0;if((f|0)>0){g=e+8|0;while(1){yl(b,c[g+20>>2]|0,1);if((a[g+37>>0]&4?(i=c[g+64>>2]|0,i|0):0)?(c[i>>2]|0)>0:0){e=0;do{j=i+4+(e*20|0)|0;k=zl(b,c[j>>2]|0)|0;c[j>>2]=k;e=e+1|0}while((e|0)<(c[i>>2]|0))}if((f|0)>1){g=g+72|0;f=f+-1|0}else break}}if(h){e=25;break}d=c[d+52>>2]|0;if(!d){e=25;break}}if((e|0)==25)return}function zl(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;o=Ra;Ra=Ra+64|0;j=o+8|0;i=o;f=o+12|0;if(!e){n=0;Ra=o;return n|0}n=e+4|0;if(c[n>>2]&1|0?(g=e+36|0,(c[d+4>>2]|0)==(b[g>>1]|0)):0)b[g>>1]=c[d+8>>2];switch(a[e>>0]|0){case -94:{if((c[e+28>>2]|0)==(c[d+4>>2]|0)){g=b[e+32>>1]|0;if(g<<16>>16<0){a[e>>0]=114;n=e;Ra=o;return n|0}l=c[(c[d+16>>2]|0)+4+((g<<16>>16)*20|0)>>2]|0;k=a[l>>0]|0;if(k<<24>>24==-88)g=a[l+38>>0]|0;else g=k;switch(g<<24>>24){case -87:{h=l+20|0;m=15;break}case -125:{h=c[l+20>>2]|0;m=15;break}default:{g=c[d>>2]|0;m=19}}do if((m|0)==15){g=c[d>>2]|0;if((c[c[h>>2]>>2]|0)>=2)if(!(c[l+4>>2]&2048)){cd(g,38899,j);break}else{c[i>>2]=c[c[c[l+20>>2]>>2]>>2];c[i+4>>2]=1;cd(g,39001,i);break}else m=19}while(0);if((m|0)==19){j=c[g>>2]|0;i=d+12|0;if(k<<24>>24==-94|(c[i>>2]|0)==0)if(!l)f=0;else{f=l;m=22}else{g=f;h=g+52|0;do{c[g>>2]=0;g=g+4|0}while((g|0)<(h|0));a[f>>0]=-85;c[f+12>>2]=l;c[f+28>>2]=c[d+8>>2];m=22}if((m|0)==22){f=dk(j,f,0,0)|0;if(f){if(c[i>>2]|0){d=f+4|0;c[d>>2]=c[d>>2]|1048576}if(c[n>>2]&1){b[f+36>>1]=b[e+36>>1]|0;n=f+4|0;c[n>>2]=c[n>>2]|1}}else f=0}ni(j,e);e=f}n=e;Ra=o;return n|0}break}case -85:{f=e+28|0;if((c[f>>2]|0)==(c[d+4>>2]|0))c[f>>2]=c[d+8>>2];break}default:{}}f=e+12|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+16|0;m=zl(d,c[f>>2]|0)|0;c[f>>2]=m;f=e+20|0;if(c[n>>2]&2048|0){yl(d,c[f>>2]|0,1);n=e;Ra=o;return n|0}g=c[f>>2]|0;if(!g){n=e;Ra=o;return n|0}if((c[g>>2]|0)<=0){n=e;Ra=o;return n|0}f=0;do{n=g+4+(f*20|0)|0;m=zl(d,c[n>>2]|0)|0;c[n>>2]=m;f=f+1|0}while((f|0)<(c[g>>2]|0));Ra=o;return e|0}function Al(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,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0;I=Ra;Ra=Ra+80|0;G=I+40|0;F=I+32|0;p=I+24|0;j=I+16|0;i=I+8|0;E=I+48|0;k=c[e+32>>2]|0;l=c[c[e>>2]>>2]|0;H=c[d+8>>2]|0;C=e+52|0;D=c[C>>2]|0;if(c[e+68>>2]|0){cd(d,43323,I);Ra=I;return}g=c[d>>2]|0;do if(((a[g+165>>0]|0)==0?(a[d+200>>0]|0)==0:0)?(h=c[g+312>>2]|0,h|0):0){g=$a[h&127](c[g+316>>2]|0,33,0,0,0,c[d+240>>2]|0)|0;if((g|0)==1){cd(d,39216,i);c[d+12>>2]=23;Ra=I;return}if((g|2|0)==2){if(!g)break;Ra=I;return}else{cd(d,39231,j);c[d+12>>2]=1;Ra=I;return}}while(0);s=d+56|0;x=c[s>>2]|0;v=x+-1|0;c[s>>2]=v;b[e+6>>1]=320;pl(d,e,v);y=e+60|0;z=c[y>>2]|0;A=e+12|0;w=c[A>>2]|0;B=e+16|0;t=c[B>>2]|0;c[y>>2]=0;c[B>>2]=0;c[A>>2]=0;A=e+48|0;B=c[A>>2]|0;h=c[k>>2]|0;a:do if((h|0)>0){g=0;while(1){if(a[k+8+(g*72|0)+37>>0]&32)break;g=g+1|0;if((g|0)>=(h|0)){q=0;break a}}q=c[k+8+(g*72|0)+40>>2]|0}else q=0;while(0);g=d+40|0;o=c[g>>2]|0;h=o+1|0;c[g>>2]=h;m=(B|0)!=0;if((a[e+4>>0]|0)==127){c[g>>2]=o+2;g=m?8:6}else{h=0;g=m?7:5}a[E>>0]=g;c[E+4>>2]=o;c[E+16>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;u=d+44|0;n=(c[u>>2]|0)+1|0;c[u>>2]=n;u=H+108|0;g=c[u>>2]|0;r=H+112|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=116;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=q;c[k+(g*20|0)+8>>2]=n;c[k+(g*20|0)+12>>2]=l;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0}else Di(H,116,q,n,l)|0;do if(!m){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=113;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=l;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;break}else{Di(H,113,o,l,0)|0;break}}else{k=Dl(d,e)|0;i=(c[B>>2]|0)+2|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=o;c[l+(g*20|0)+8>>2]=i;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,o,i,0)|0;i=c[H>>2]|0;do if(!(a[i+81>>0]|0)){if((g|0)<0)g=(c[u>>2]|0)+-1|0;i=c[H+104>>2]|0;j=i+(g*20|0)+1|0;if(a[j>>0]|0){Ei(H,i+(g*20|0)|0,k,-9);break}if(k|0){c[i+(g*20|0)+16>>2]=k;a[j>>0]=-9}}else if(!((k|0)==0|(c[i+480>>2]|0)!=0)?(l=(c[k>>2]|0)+-1|0,c[k>>2]=l,(l|0)==0):0){g=c[k+12>>2]|0;if(g|0){if(c[g+480>>2]|0){Xd(g,k);break}l=k;if((c[g+304>>2]|0)>>>0<=l>>>0?(c[g+308>>2]|0)>>>0>l>>>0:0){l=g+300|0;c[k>>2]=c[l>>2];c[l>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{l=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[E+20>>2]=B}while(0);if(h|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;l=c[H+104>>2]|0;a[l+(g*20|0)>>0]=113;b[l+(g*20|0)+2>>1]=0;c[l+(g*20|0)+4>>2]=h;c[l+(g*20|0)+8>>2]=0;c[l+(g*20|0)+12>>2]=0;c[l+(g*20|0)+16>>2]=0;a[l+(g*20|0)+1>>0]=0}else g=Di(H,113,h,0,0)|0;c[e+24>>2]=g;l=e+8|0;c[l>>2]=c[l>>2]|32}c[A>>2]=0;l=D+56|0;c[l>>2]=0;nk(d,1,43372,p);p=kj(d,D,E)|0;c[l>>2]=e;do if(!p){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;k=c[H+104>>2]|0;a[k+(g*20|0)>>0]=36;b[k+(g*20|0)+2>>1]=0;c[k+(g*20|0)+4>>2]=o;c[k+(g*20|0)+8>>2]=v;c[k+(g*20|0)+12>>2]=0;c[k+(g*20|0)+16>>2]=0;a[k+(g*20|0)+1>>0]=0;k=g}else k=Di(H,36,o,v,0)|0;g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=-127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=q;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,129,q,0,0)|0;do if(m){g=(c[B>>2]|0)+1|0;h=c[u>>2]|0;if((c[r>>2]|0)>(h|0)){c[u>>2]=h+1;p=c[H+104>>2]|0;a[p+(h*20|0)>>0]=90;b[p+(h*20|0)+2>>1]=0;c[p+(h*20|0)+4>>2]=o;c[p+(h*20|0)+8>>2]=g;c[p+(h*20|0)+12>>2]=n;c[p+(h*20|0)+16>>2]=0;a[p+(h*20|0)+1>>0]=0;break}else{Di(H,90,o,g,n)|0;break}}else{g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=127;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=n;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0;break}else{Di(H,127,o,n,0)|0;break}}while(0);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;p=c[H+104>>2]|0;a[p+(g*20|0)>>0]=123;b[p+(g*20|0)+2>>1]=0;c[p+(g*20|0)+4>>2]=o;c[p+(g*20|0)+8>>2]=0;c[p+(g*20|0)+12>>2]=0;c[p+(g*20|0)+16>>2]=0;a[p+(g*20|0)+1>>0]=0}else Di(H,123,o,0,0)|0;j=c[s>>2]|0;h=j+-1|0;c[s>>2]=h;do if((t|0)>0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;s=c[H+104>>2]|0;a[s+(g*20|0)>>0]=47;b[s+(g*20|0)+2>>1]=0;c[s+(g*20|0)+4>>2]=t;c[s+(g*20|0)+8>>2]=h;c[s+(g*20|0)+12>>2]=1;c[s+(g*20|0)+16>>2]=0;a[s+(g*20|0)+1>>0]=0;break}else{Di(H,47,t,h,1)|0;break}}while(0);rl(d,e,q,0,0,f,h,v);do if(w|0){g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;f=c[H+104>>2]|0;a[f+(g*20|0)>>0]=49;b[f+(g*20|0)+2>>1]=0;c[f+(g*20|0)+4>>2]=w;c[f+(g*20|0)+8>>2]=v;c[f+(g*20|0)+12>>2]=0;c[f+(g*20|0)+16>>2]=0;a[f+(g*20|0)+1>>0]=0;break}else{Di(H,49,w,v,0)|0;break}}while(0);i=H+12|0;h=c[i>>2]|0;g=0-j|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0)mk(h,H,g);else c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];if(!(c[e+8>>2]&8)){c[C>>2]=0;nk(d,1,43420,G);kj(d,e,E)|0;c[C>>2]=D}else cd(d,43378,F);g=c[u>>2]|0;if((c[r>>2]|0)>(g|0)){c[u>>2]=g+1;G=c[H+104>>2]|0;a[G+(g*20|0)>>0]=11;b[G+(g*20|0)+2>>1]=0;c[G+(g*20|0)+4>>2]=0;c[G+(g*20|0)+8>>2]=k;c[G+(g*20|0)+12>>2]=0;c[G+(g*20|0)+16>>2]=0;a[G+(g*20|0)+1>>0]=0}else Di(H,11,0,k,0)|0;h=c[i>>2]|0;g=0-x|0;if(((c[h+56>>2]|0)+(c[h+60>>2]|0)|0)<0){mk(h,H,g);break}else{c[(c[h+64>>2]|0)+(g<<2)>>2]=c[u>>2];break}}while(0);g=c[A>>2]|0;if(g|0)ri(c[d>>2]|0,g);c[A>>2]=B;c[y>>2]=z;Ra=I;return}function Bl(f,g,h){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,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;Z=Ra;Ra=Ra+128|0;G=Z+64|0;F=Z+56|0;D=Z+48|0;B=Z+32|0;x=Z+24|0;v=Z+8|0;u=Z;p=Z+120|0;H=Z+96|0;I=Z+72|0;X=c[f>>2]|0;Y=f+8|0;U=c[Y>>2]|0;C=f+56|0;T=c[C>>2]|0;L=T+-1|0;R=T+-2|0;c[C>>2]=R;C=g+4|0;J=a[C>>0]|0;V=g+52|0;W=c[V>>2]|0;t=g+48|0;i=c[t>>2]|0;j=c[i>>2]|0;P=J<<24>>24==-128;a:do if(!P?(n=X+81|0,(a[n>>0]|0)==0):0){o=p+4|0;m=1;l=j;while(1){if((m|0)>(c[c[g>>2]>>2]|0)){m=i;S=l;break a}b:do if((l|0)>0){k=i+4|0;j=0;while(1){if((m|0)==(e[k+16>>1]|0))break b;j=j+1|0;if((j|0)<(l|0))k=k+20|0;else break}}else j=0;while(0);if((j|0)==(l|0)){c[p>>2]=0;c[o>>2]=0;j=oj(X,147,p,0)|0;if(!j){i=7;break}S=j+4|0;c[S>>2]=c[S>>2]|1024;c[j+8>>2]=m;i=nj(c[f>>2]|0,i,j)|0;c[t>>2]=i;if(!i){i=0;j=l}else{b[i+4+(l*20|0)+16>>1]=m;j=l+1|0}}else j=l;if(!(a[n>>0]|0)){m=m+1|0;l=j}else{m=i;S=j;break a}}Ra=Z;return i|0}else{m=i;S=j}while(0);k=(S<<2)+4|0;q=X+272|0;c:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=24;else{O=0;Q=0;M=0;N=1}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];r=X+284|0;c[r>>2]=(c[r>>2]|0)+1;r=25;break c}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=24}while(0);if((r|0)==24){j=_d(X,k,0)|0;r=25}if((r|0)==25)if(!j){O=0;Q=0;M=j;N=1}else{c[j>>2]=S;if((S|0)>=1){i=m+4|0;k=1;while(1){c[j+(k<<2)>>2]=(e[i+16>>1]|0)+-1;if((k|0)==(S|0))break;else{i=i+20|0;k=k+1|0}}}O=j;Q=Dl(f,g)|0;M=j;N=0}c[t>>2]=m;K=gk(c[f>>2]|0,m,0)|0;s=W+48|0;c[s>>2]=K;d:do if(!P){o=c[c[g>>2]>>2]|0;i=f+44|0;j=c[i>>2]|0;p=j+1|0;n=o+1|0;c[i>>2]=j+n;i=U+108|0;j=c[i>>2]|0;if((c[U+112>>2]|0)>(j|0)){c[i>>2]=j+1;K=c[U+104>>2]|0;a[K+(j*20|0)>>0]=70;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=0;c[K+(j*20|0)+8>>2]=p;c[K+(j*20|0)+12>>2]=0;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else Di(U,70,0,p,0)|0;m=n*5|0;k=m+20|0;e:do if(c[q>>2]|0)if(!(a[X+81>>0]|0))r=44;else{z=0;y=0;break d}else{do if(!(0<0|(0==0?(e[X+276>>1]|0)>>>0>>0:0))){i=X+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}i=X+296|0;j=c[i>>2]|0;if(!j){i=X+292|0;break}else{c[i>>2]=c[j>>2];l=X+284|0;c[l>>2]=(c[l>>2]|0)+1;l=j;break e}}else i=X+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;r=44}while(0);if((r|0)==44)l=_d(X,k,0)|0;if(!l){i=X+81|0;if((a[i>>0]|0)==0?(a[X+82>>0]|0)==0:0){a[i>>0]=1;if((c[X+180>>2]|0)>0)c[X+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;i=c[X+236>>2]|0;if(i|0)c[i+12>>2]=7}if(!l){z=0;y=0;break}else k=0}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=o;b[l+8>>1]=n;a[l+4>>0]=a[X+78>>0]|0;c[l+12>>2]=X;c[l>>2]=1;gw(l+24|0,0,m+-4|0)|0;k=l}if((o|0)>0){j=l+16|0;i=0;do{K=Cl(f,g,i)|0;c[l+20+(i<<2)>>2]=K;a[(c[j>>2]|0)+i>>0]=0;i=i+1|0}while((i|0)!=(o|0));z=l;y=k}else{z=l;y=k}}else{z=0;p=0;y=0}while(0);c[V>>2]=0;K=W+56|0;c[K>>2]=0;n=c[t>>2]|0;i=c[f>>2]|0;f:do if(n|0?(a[i+81>>0]|0)==0:0){k=c[n>>2]|0;if((k|0)>(c[i+116>>2]|0)){c[u>>2]=40659;cd(f,41350,u);break}m=c[g>>2]|0;if((k|0)>0){i=0;l=n+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[n>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break f}c[v>>2]=i+1;c[v+4>>2]=40659;c[v+8>>2]=k;cd(f,41294,v)}}while(0);g:do if(((c[W+52>>2]|0)==0?(A=c[s>>2]|0,w=c[f>>2]|0,A|0):0)?(a[w+81>>0]|0)==0:0){k=c[A>>2]|0;if((k|0)>(c[w+116>>2]|0)){c[x>>2]=40659;cd(f,41350,x);break}m=c[W>>2]|0;if((k|0)>0){i=0;l=A+4|0;while(1){j=b[l+16>>1]|0;if(!(j<<16>>16))j=k;else{j=j&65535;k=c[m>>2]|0;if((k|0)<(j|0))break;Gk(f,m,j+-1|0,c[l>>2]|0,40659,0);j=c[A>>2]|0}i=i+1|0;if((i|0)<(j|0)){l=l+20|0;k=j}else break g}c[B>>2]=i+1;c[B+4>>2]=40659;c[B+8>>2]=k;cd(f,41294,B)}}while(0);pl(f,g,L);o=g+12|0;i=c[o>>2]|0;do if(P&(i|0)!=0){j=f+44|0;m=c[j>>2]|0;n=m+1|0;m=m+2|0;c[j>>2]=m;j=c[g+16>>2]|0;j=(j|0)==0?i:j+1|0;k=U+108|0;i=c[k>>2]|0;l=U+112|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=j;c[E+(i*20|0)+8>>2]=n;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0}else Di(U,78,j,n,0)|0;i=c[k>>2]|0;if((c[l>>2]|0)>(i|0)){c[k>>2]=i+1;E=c[U+104>>2]|0;a[E+(i*20|0)>>0]=78;b[E+(i*20|0)+2>>1]=0;c[E+(i*20|0)+4>>2]=n;c[E+(i*20|0)+8>>2]=m;c[E+(i*20|0)+12>>2]=0;c[E+(i*20|0)+16>>2]=0;a[E+(i*20|0)+1>>0]=0;break}else{Di(U,78,n,m,0)|0;break}}else{m=0;n=0}while(0);i=g+60|0;j=c[i>>2]|0;if(j|0)ni(X,j);c[i>>2]=0;A=f+44|0;v=c[A>>2]|0;w=v+1|0;x=v+2|0;u=v+3|0;v=v+4|0;c[A>>2]=v;a[H>>0]=13;c[H+4>>2]=w;c[H+16>>2]=0;A=H+8|0;c[A>>2]=0;c[H+12>>2]=0;a[I>>0]=13;c[I+4>>2]=x;c[I+16>>2]=0;B=I+8|0;c[B>>2]=0;c[I+12>>2]=0;switch(a[C>>0]|0){case -128:{i=41509;break}case -126:{i=41519;break}case -127:{i=41529;break}default:i=41536}c[D>>2]=i;nk(f,1,43435,D);E=U+108|0;i=c[E>>2]|0;j=i+1|0;D=U+112|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=j;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=13;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=w;c[k+(i*20|0)+8>>2]=0;c[k+(i*20|0)+12>>2]=j;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,13,w,0,j)|0;c[W+12>>2]=n;nk(f,1,43446,F);kj(f,W,H)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;F=c[U+104>>2]|0;a[F+(i*20|0)>>0]=67;b[F+(i*20|0)+2>>1]=0;c[F+(i*20|0)+4>>2]=w;c[F+(i*20|0)+8>>2]=0;c[F+(i*20|0)+12>>2]=0;c[F+(i*20|0)+16>>2]=0;a[F+(i*20|0)+1>>0]=0}else Di(U,67,w,0,0)|0;C=U+12|0;j=c[C>>2]|0;a[j+19>>0]=0;c[j+28>>2]=0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((k|0)<0?j+-1|0:k)*20|0)|0;else i=59308;c[i+8>>2]=j;i=j+1|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=i;t=c[U+104>>2]|0;a[t+(j*20|0)>>0]=13;b[t+(j*20|0)+2>>1]=0;c[t+(j*20|0)+4>>2]=x;c[t+(j*20|0)+8>>2]=0;c[t+(j*20|0)+12>>2]=i;c[t+(j*20|0)+16>>2]=0;a[t+(j*20|0)+1>>0]=0;t=j}else t=Di(U,13,x,0,i)|0;s=c[o>>2]|0;i=g+16|0;F=c[i>>2]|0;c[o>>2]=m;c[i>>2]=0;nk(f,1,43451,G);kj(f,g,I)|0;c[o>>2]=s;c[i>>2]=F;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;G=c[U+104>>2]|0;a[G+(i*20|0)>>0]=67;b[G+(i*20|0)+2>>1]=0;c[G+(i*20|0)+4>>2]=x;c[G+(i*20|0)+8>>2]=0;c[G+(i*20|0)+12>>2]=0;c[G+(i*20|0)+16>>2]=0;a[G+(i*20|0)+1>>0]=0}else Di(U,67,x,0,0)|0;q=c[C>>2]|0;a[q+19>>0]=0;c[q+28>>2]=0;q=El(f,g,H,h,u,p,z,L)|0;s=(J+-127&255)<2;if(s)r=El(f,g,I,h,v,p,z,L)|0;else r=0;h:do if(z|0?(I=(c[z>>2]|0)+-1|0,c[z>>2]=I,(I|0)==0):0){i=c[z+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,y);break h}j=z;if((c[i+304>>2]|0)>>>0<=j>>>0){if((c[i+308>>2]|0)>>>0<=j>>>0)break;I=i+300|0;c[z>>2]=c[I>>2];c[I>>2]=y;break h}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](y);break}else{I=Wa[c[29352>>2]&127](y)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](y);break}}while(0);p=J<<24>>24==-126;if((J+127&255)<2){l=L;n=L}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=v;c[J+(i*20|0)+8>>2]=r;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,v,r,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=x;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else j=Di(U,14,x,L,0)|0;k=c[E>>2]|0;if((c[D>>2]|0)>(k|0)){c[E>>2]=k+1;J=c[U+104>>2]|0;a[J+(k*20|0)>>0]=11;b[J+(k*20|0)+2>>1]=0;c[J+(k*20|0)+4>>2]=0;c[J+(k*20|0)+8>>2]=i;c[J+(k*20|0)+12>>2]=0;c[J+(k*20|0)+16>>2]=0;a[J+(k*20|0)+1>>0]=0}else Di(U,11,0,i,0)|0;o=g+6|0;k=b[o>>1]|0;l=b[W+6>>1]|0;m=k<<16>>16;n=l<<16>>16;do if(k<<16>>16>16){if((m+49|0)<(n|0)){k=l;break}if((m+31|0)<(n|0)){k=n+1&65535;break}else{k=(d[18112+(n-m)>>0]|0)+n&65535;break}}else{if((n+49|0)<(m|0))break;if((n+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-n)>>0]|0)+m&65535;break}}while(0);b[o>>1]=k;l=i;n=j}do if(p){i=g+6|0;j=b[W+6>>1]|0;if((b[i>>1]|0)>j<<16>>16){b[i>>1]=j;m=l}else m=l}else{i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;J=c[U+104>>2]|0;a[J+(i*20|0)>>0]=12;b[J+(i*20|0)+2>>1]=0;c[J+(i*20|0)+4>>2]=u;c[J+(i*20|0)+8>>2]=q;c[J+(i*20|0)+12>>2]=0;c[J+(i*20|0)+16>>2]=0;a[J+(i*20|0)+1>>0]=0}else i=Di(U,12,u,q,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;J=c[U+104>>2]|0;a[J+(j*20|0)>>0]=14;b[J+(j*20|0)+2>>1]=0;c[J+(j*20|0)+4>>2]=w;c[J+(j*20|0)+8>>2]=L;c[J+(j*20|0)+12>>2]=0;c[J+(j*20|0)+16>>2]=0;a[J+(j*20|0)+1>>0]=0}else Di(U,14,w,L,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;m=c[U+104>>2]|0;a[m+(j*20|0)>>0]=11;b[m+(j*20|0)+2>>1]=0;c[m+(j*20|0)+4>>2]=0;c[m+(j*20|0)+8>>2]=i;c[m+(j*20|0)+12>>2]=0;c[m+(j*20|0)+16>>2]=0;a[m+(j*20|0)+1>>0]=0;m=i;break}else{Di(U,11,0,i,0)|0;m=i;break}}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;k=c[U+104>>2]|0;a[k+(i*20|0)>>0]=12;b[k+(i*20|0)+2>>1]=0;c[k+(i*20|0)+4>>2]=u;c[k+(i*20|0)+8>>2]=q;c[k+(i*20|0)+12>>2]=0;c[k+(i*20|0)+16>>2]=0;a[k+(i*20|0)+1>>0]=0;k=i}else k=Di(U,12,u,q,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=14;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=w;c[L+(i*20|0)+8>>2]=l;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,14,w,l,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;L=c[U+104>>2]|0;a[L+(i*20|0)>>0]=11;b[L+(i*20|0)+2>>1]=0;c[L+(i*20|0)+4>>2]=0;c[L+(i*20|0)+8>>2]=R;c[L+(i*20|0)+12>>2]=0;c[L+(i*20|0)+16>>2]=0;a[L+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;do if(!P){if(p){p=k+1|0;l=k;break}i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=w;c[P+(i*20|0)+8>>2]=l;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else i=Di(U,14,w,l,0)|0;j=c[E>>2]|0;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;p=c[U+104>>2]|0;a[p+(j*20|0)>>0]=11;b[p+(j*20|0)+2>>1]=0;c[p+(j*20|0)+4>>2]=0;c[p+(j*20|0)+8>>2]=R;c[p+(j*20|0)+12>>2]=0;c[p+(j*20|0)+16>>2]=0;a[p+(j*20|0)+1>>0]=0;p=k;l=i;break}else{Di(U,11,0,R,0)|0;p=k;l=i;break}}else{p=k;l=k}while(0);o=c[E>>2]|0;do if(s)if((c[D>>2]|0)>(o|0)){c[E>>2]=o+1;P=c[U+104>>2]|0;a[P+(o*20|0)>>0]=12;b[P+(o*20|0)+2>>1]=0;c[P+(o*20|0)+4>>2]=v;c[P+(o*20|0)+8>>2]=r;c[P+(o*20|0)+12>>2]=0;c[P+(o*20|0)+16>>2]=0;a[P+(o*20|0)+1>>0]=0;break}else{Di(U,12,v,r,0)|0;break}while(0);i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=14;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=x;c[P+(i*20|0)+8>>2]=m;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;P=c[U+104>>2]|0;a[P+(i*20|0)>>0]=11;b[P+(i*20|0)+2>>1]=0;c[P+(i*20|0)+4>>2]=0;c[P+(i*20|0)+8>>2]=R;c[P+(i*20|0)+12>>2]=0;c[P+(i*20|0)+16>>2]=0;a[P+(i*20|0)+1>>0]=0}else Di(U,11,0,R,0)|0;j=c[E>>2]|0;if(!(a[(c[U>>2]|0)+81>>0]|0))i=(c[U+104>>2]|0)+(((t|0)<0?j+-1|0:t)*20|0)|0;else i=59308;c[i+8>>2]=j;if((c[D>>2]|0)>(j|0)){c[E>>2]=j+1;R=c[U+104>>2]|0;a[R+(j*20|0)>>0]=14;b[R+(j*20|0)+2>>1]=0;c[R+(j*20|0)+4>>2]=w;c[R+(j*20|0)+8>>2]=n;c[R+(j*20|0)+12>>2]=0;c[R+(j*20|0)+16>>2]=0;a[R+(j*20|0)+1>>0]=0}else Di(U,14,w,n,0)|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=14;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=x;c[R+(i*20|0)+8>>2]=m;c[R+(i*20|0)+12>>2]=0;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else Di(U,14,x,m,0)|0;i=c[C>>2]|0;j=1-T|0;if(((c[i+56>>2]|0)+(c[i+60>>2]|0)|0)<0)mk(i,U,j);else c[(c[i+64>>2]|0)+(j<<2)>>2]=c[E>>2];i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;j=c[U+104>>2]|0;a[j+(i*20|0)>>0]=86;j=j+(i*20|0)+1|0;k=j+19|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0))}else i=Di(U,86,0,0,0)|0;j=c[U>>2]|0;i:do if(a[j+81>>0]|0){if(N)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,O);break i}i=O;if((c[j+304>>2]|0)>>>0>i>>>0)break;if((c[j+308>>2]|0)>>>0<=i>>>0)break;R=j+300|0;c[M>>2]=c[R>>2];c[R>>2]=O;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](O);break}else{R=Wa[c[29352>>2]&127](O)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](O);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,O,-15);break}if(N)break;c[j+(i*20|0)+16>>2]=O;a[k>>0]=-15}while(0);k=c[A>>2]|0;j=c[B>>2]|0;i=c[E>>2]|0;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;R=c[U+104>>2]|0;a[R+(i*20|0)>>0]=87;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=k;c[R+(i*20|0)+8>>2]=j;c[R+(i*20|0)+12>>2]=S;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(U,87,k,j,S)|0;j=c[U>>2]|0;j:do if(a[j+81>>0]|0){if((Q|0)==0|(c[j+480>>2]|0)!=0)break;S=(c[Q>>2]|0)+-1|0;c[Q>>2]=S;if(S|0)break;i=c[Q+12>>2]|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,Q);break j}j=Q;if((c[i+304>>2]|0)>>>0>j>>>0)break;if((c[i+308>>2]|0)>>>0<=j>>>0)break;S=i+300|0;c[Q>>2]=c[S>>2];c[S>>2]=Q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](Q);break}else{S=Wa[c[29352>>2]&127](Q)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Q);break}}else{if((i|0)<0)i=(c[E>>2]|0)+-1|0;j=c[U+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(U,j+(i*20|0)|0,Q,-9);break}if(!Q)break;c[j+(i*20|0)+16>>2]=Q;a[k>>0]=-9}while(0);i=c[E>>2]|0;if((i|0)>0)b[(c[U+104>>2]|0)+((i+-1|0)*20|0)+2>>1]=1;if((c[D>>2]|0)>(i|0)){c[E>>2]=i+1;S=c[U+104>>2]|0;a[S+(i*20|0)>>0]=16;b[S+(i*20|0)+2>>1]=0;c[S+(i*20|0)+4>>2]=p;c[S+(i*20|0)+8>>2]=l;c[S+(i*20|0)+12>>2]=o;c[S+(i*20|0)+16>>2]=0;a[S+(i*20|0)+1>>0]=0}else Di(U,16,p,l,o)|0;j=c[C>>2]|0;i=0-T|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,U,i);else c[(c[j+64>>2]|0)+(i<<2)>>2]=c[E>>2];i=c[V>>2]|0;if(i|0)pi(X,i,1);c[V>>2]=W;c[K>>2]=g;k=f+212|0;i=c[k>>2]|0;if(!i)i=0;else{j=c[Y>>2]|0;if((i|0)<0)i=(c[j+108>>2]|0)+-1|0;if(!(a[(c[j>>2]|0)+81>>0]|0))i=(c[j+104>>2]|0)+(i*20|0)|0;else i=59308;i=c[i+8>>2]|0}c[k>>2]=i;f=(c[f+36>>2]|0)!=0&1;Ra=Z;return f|0}function Cl(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=c[b+52>>2]|0;if(e|0?(f=Cl(a,e,d)|0,f|0):0){d=f;return d|0}b=c[b>>2]|0;if((c[b>>2]|0)<=(d|0)){d=0;return d|0}d=Yi(a,c[b+4+(d*20|0)>>2]|0)|0;return d|0}function Dl(d,f){d=d|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=Ra;Ra=Ra+16|0;q=u;r=c[f+48>>2]|0;s=c[r>>2]|0;p=c[d>>2]|0;k=s+1|0;l=s+2|0;m=l*5|0;i=m+20|0;n=p+272|0;a:do if(c[n>>2]|0)if(!(a[p+81>>0]|0))j=11;else{t=0;Ra=u;return t|0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){h=p+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}h=p+296|0;g=c[h>>2]|0;if(!g){g=p+292|0;break}else{c[h>>2]=c[g>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;break a}}else g=p+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;j=11}while(0);if((j|0)==11)g=_d(p,i,0)|0;if(!g){h=p+81|0;if((a[h>>0]|0)==0?(a[p+82>>0]|0)==0:0){a[h>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[n>>2]=(c[n>>2]|0)+1;h=c[p+236>>2]|0;if(h|0)c[h+12>>2]=7}if(!g){t=0;Ra=u;return t|0}}else{c[g+16>>2]=g+20+(l<<2);b[g+6>>1]=k;b[g+8>>1]=l;a[g+4>>0]=a[p+78>>0]|0;c[g+12>>2]=p;c[g>>2]=1;gw(g+24|0,0,m+-4|0)|0}if((s|0)<=0){t=g;Ra=u;return t|0}o=g+16|0;m=p+8|0;n=q+4|0;l=0;do{k=r+4+(l*20|0)|0;i=c[k>>2]|0;if(!(c[i+4>>2]&256)){h=Cl(d,f,(e[r+4+(l*20|0)+16>>1]|0)+-1|0)|0;if(!h)h=c[m>>2]|0;j=c[h>>2]|0;c[q>>2]=j;if(j){p=(Eu(j)|0)&1073741823;c[n>>2]=p;if((p|0)!=0?(t=oj(c[d>>2]|0,106,q,0)|0,(t|0)!=0):0){c[t+12>>2]=i;i=t+4|0;c[i>>2]=c[i>>2]|4352;i=t}}else c[n>>2]=0;c[k>>2]=i}else h=Yi(d,i)|0;c[g+20+(l<<2)>>2]=h;a[(c[o>>2]|0)+l>>0]=a[r+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)!=(s|0));Ra=u;return g|0}function El(d,e,f,g,h,i,j,k){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,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=d+8|0;F=c[A>>2]|0;D=F+108|0;E=c[D>>2]|0;u=d+56|0;C=c[u>>2]|0;v=C+-1|0;c[u>>2]=v;do if(i|0){u=F+112|0;if((c[u>>2]|0)>(E|0)){c[D>>2]=E+1;q=c[F+104>>2]|0;a[q+(E*20|0)>>0]=20;b[q+(E*20|0)+2>>1]=0;c[q+(E*20|0)+4>>2]=i;c[q+(E*20|0)+8>>2]=0;c[q+(E*20|0)+12>>2]=0;c[q+(E*20|0)+16>>2]=0;a[q+(E*20|0)+1>>0]=0;q=E}else q=Di(F,20,i,0,0)|0;r=f+8|0;l=c[r>>2]|0;t=i+1|0;s=f+12|0;m=c[s>>2]|0;p=(j|0)==0;if(!p)c[j>>2]=(c[j>>2]|0)+1;n=c[D>>2]|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;o=c[F+104>>2]|0;a[o+(n*20|0)>>0]=87;b[o+(n*20|0)+2>>1]=0;c[o+(n*20|0)+4>>2]=l;c[o+(n*20|0)+8>>2]=t;c[o+(n*20|0)+12>>2]=m;c[o+(n*20|0)+16>>2]=0;a[o+(n*20|0)+1>>0]=0}else n=Di(F,87,l,t,m)|0;l=c[F>>2]|0;do if(!(a[l+81>>0]|0)){if((n|0)<0)l=(c[D>>2]|0)+-1|0;else l=n;m=c[F+104>>2]|0;o=m+(l*20|0)+1|0;if(a[o>>0]|0){Ei(F,m+(l*20|0)|0,j,-9);break}if(!p){c[m+(l*20|0)+16>>2]=j;a[o>>0]=-9}}else if(!(p|(c[l+480>>2]|0)!=0)?(p=(c[j>>2]|0)+-1|0,c[j>>2]=p,(p|0)==0):0){l=c[j+12>>2]|0;if(l|0){if(c[l+480>>2]|0){Xd(l,j);break}p=j;if((c[l+304>>2]|0)>>>0<=p>>>0?(c[l+308>>2]|0)>>>0>p>>>0:0){p=l+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=n+2|0;m=c[D>>2]|0;if((c[u>>2]|0)>(m|0)){c[D>>2]=m+1;j=c[F+104>>2]|0;a[j+(m*20|0)>>0]=16;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=l;c[j+(m*20|0)+8>>2]=v;c[j+(m*20|0)+12>>2]=l;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(F,16,l,v,l)|0;n=c[D>>2]|0;if(!(a[(c[F>>2]|0)+81>>0]|0))l=(c[F+104>>2]|0)+(((q|0)<0?n+-1|0:q)*20|0)|0;else l=59308;c[l+8>>2]=n;m=c[r>>2]|0;l=(c[s>>2]|0)+-1|0;if((c[u>>2]|0)>(n|0)){c[D>>2]=n+1;s=c[F+104>>2]|0;a[s+(n*20|0)>>0]=78;b[s+(n*20|0)+2>>1]=0;c[s+(n*20|0)+4>>2]=m;c[s+(n*20|0)+8>>2]=t;c[s+(n*20|0)+12>>2]=l;c[s+(n*20|0)+16>>2]=0;a[s+(n*20|0)+1>>0]=0}else Di(F,78,m,t,l)|0;l=c[D>>2]|0;if((c[u>>2]|0)>(l|0)){c[D>>2]=l+1;u=c[F+104>>2]|0;a[u+(l*20|0)>>0]=70;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=1;c[u+(l*20|0)+8>>2]=i;c[u+(l*20|0)+12>>2]=0;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;break}else{Di(F,70,1,i,0)|0;break}}while(0);if(a[(c[d>>2]|0)+81>>0]|0){F=0;return F|0}l=c[e+16>>2]|0;do if((l|0)>0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;i=c[F+104>>2]|0;a[i+(m*20|0)>>0]=47;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=l;c[i+(m*20|0)+8>>2]=v;c[i+(m*20|0)+12>>2]=1;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break}else{Di(F,47,l,v,1)|0;break}}while(0);a:do switch(a[g>>0]|0){case 12:{q=d+19|0;m=a[q>>0]|0;if(m<<24>>24){B=m+-1<<24>>24;a[q>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;if(!(B<<24>>24))w=48;else{j=m+-2<<24>>24;a[q>>0]=j;p=l;j=c[d+148+((j&255)<<2)>>2]|0}}else{w=d+44|0;l=(c[w>>2]|0)+1|0;c[w>>2]=l;w=48}if((w|0)==48){p=d+44|0;j=(c[p>>2]|0)+1|0;c[p>>2]=j;p=l}n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;o=F+112|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[F+104>>2]|0;a[f+(m*20|0)>>0]=92;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=p;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(F,92,n,l,p)|0;l=g+4|0;m=c[l>>2]|0;n=c[D>>2]|0;if((c[o>>2]|0)>(n|0)){c[D>>2]=n+1;g=c[F+104>>2]|0;a[g+(n*20|0)>>0]=121;b[g+(n*20|0)+2>>1]=0;c[g+(n*20|0)+4>>2]=m;c[g+(n*20|0)+8>>2]=j;c[g+(n*20|0)+12>>2]=0;c[g+(n*20|0)+16>>2]=0;a[g+(n*20|0)+1>>0]=0}else Di(F,121,m,j,0)|0;l=c[l>>2]|0;m=c[D>>2]|0;if((c[o>>2]|0)>(m|0)){c[D>>2]=m+1;g=c[F+104>>2]|0;a[g+(m*20|0)>>0]=122;b[g+(m*20|0)+2>>1]=0;c[g+(m*20|0)+4>>2]=l;c[g+(m*20|0)+8>>2]=p;c[g+(m*20|0)+12>>2]=j;c[g+(m*20|0)+16>>2]=0;a[g+(m*20|0)+1>>0]=0}else Di(F,122,l,p,j)|0;l=c[D>>2]|0;if((l|0)>0)b[(c[F+104>>2]|0)+((l+-1|0)*20|0)+2>>1]=8;if(j|0?(y=a[q>>0]|0,(y&255)<8):0){a[q>>0]=y+1<<24>>24;c[d+148+((y&255)<<2)>>2]=j}if(p|0?(z=a[q>>0]|0,(z&255)<8):0){a[q>>0]=z+1<<24>>24;c[d+148+((z&255)<<2)>>2]=p}break}case 11:{t=d+19|0;l=a[t>>0]|0;if(!(l<<24>>24)){A=d+44|0;s=(c[A>>2]|0)+1|0;c[A>>2]=s}else{s=l+-1<<24>>24;a[t>>0]=s;s=c[d+148+((s&255)<<2)>>2]|0}j=f+8|0;m=c[j>>2]|0;q=f+12|0;o=c[q>>2]|0;p=c[g+16>>2]|0;l=c[D>>2]|0;r=F+112|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;f=c[F+104>>2]|0;a[f+(l*20|0)>>0]=92;b[f+(l*20|0)+2>>1]=0;c[f+(l*20|0)+4>>2]=m;c[f+(l*20|0)+8>>2]=o;c[f+(l*20|0)+12>>2]=s;c[f+(l*20|0)+16>>2]=0;a[f+(l*20|0)+1>>0]=0}else l=Di(F,92,m,o,s)|0;m=c[F>>2]|0;do if(a[m+81>>0]|0){if((o|0)!=-12)kg(m,o,p)}else{if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[F+104>>2]|0;n=m+(l*20|0)|0;if((o|0)<=-1?(x=m+(l*20|0)+1|0,(a[x>>0]|0)==0):0){if((o|0)==-3){c[m+(l*20|0)+16>>2]=p;a[x>>0]=-3;break}if(!p)break;c[m+(l*20|0)+16>>2]=p;a[x>>0]=o;if((o|0)!=-12)break;f=p+12|0;c[f>>2]=(c[f>>2]|0)+1;break}Ei(F,n,p,o)}while(0);o=c[g+4>>2]|0;m=c[j>>2]|0;n=c[q>>2]|0;l=c[D>>2]|0;if((c[r>>2]|0)>(l|0)){c[D>>2]=l+1;g=c[F+104>>2]|0;a[g+(l*20|0)>>0]=-124;b[g+(l*20|0)+2>>1]=0;c[g+(l*20|0)+4>>2]=o;c[g+(l*20|0)+8>>2]=s;c[g+(l*20|0)+12>>2]=m;c[g+(l*20|0)+16>>2]=0;a[g+(l*20|0)+1>>0]=0}else l=Di(F,132,o,s,m)|0;if(!(a[(c[F>>2]|0)+81>>0]|0)){g=c[F+104>>2]|0;a[g+(l*20|0)+1>>0]=-3;c[g+(l*20|0)+16>>2]=n}if(s|0?(B=a[t>>0]|0,(B&255)<8):0){a[t>>0]=B+1<<24>>24;c[d+148+((B&255)<<2)>>2]=s}break}case 10:{p=c[f+8>>2]|0;o=c[g+4>>2]|0;l=c[A>>2]|0;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;d=c[l+104>>2]|0;a[d+(n*20|0)>>0]=77;b[d+(n*20|0)+2>>1]=0;c[d+(n*20|0)+4>>2]=p;c[d+(n*20|0)+8>>2]=o;c[d+(n*20|0)+12>>2]=1;c[d+(n*20|0)+16>>2]=0;a[d+(n*20|0)+1>>0]=0;break a}else{Di(l,77,p,o,1)|0;break a}}case 13:{j=g+8|0;l=c[j>>2]|0;q=f+12|0;if(!l){p=c[q>>2]|0;do if((p|0)==1){l=d+19|0;m=a[l>>0]|0;if(!(m<<24>>24)){d=d+44|0;l=(c[d>>2]|0)+1|0;c[d>>2]=l;break}else{B=m+-1<<24>>24;a[l>>0]=B;l=c[d+148+((B&255)<<2)>>2]|0;break}}else{m=d+32|0;l=c[m>>2]|0;n=d+28|0;o=c[n>>2]|0;if((o|0)<(p|0)){d=d+44|0;l=c[d>>2]|0;c[d>>2]=l+p;l=l+1|0;break}else{c[m>>2]=l+p;c[n>>2]=o-p;break}}while(0);c[j>>2]=l;c[g+12>>2]=p}j=c[f+8>>2]|0;p=c[q>>2]|0;m=c[A>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;d=c[m+104>>2]|0;a[d+(o*20|0)>>0]=77;b[d+(o*20|0)+2>>1]=0;c[d+(o*20|0)+4>>2]=j;c[d+(o*20|0)+8>>2]=l;c[d+(o*20|0)+12>>2]=p;c[d+(o*20|0)+16>>2]=0;a[d+(o*20|0)+1>>0]=0}else Di(m,77,j,l,p)|0;l=c[g+4>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=14;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=l;c[d+(m*20|0)+8>>2]=0;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,14,l,0,0)|0;break a}}default:{n=c[f+8>>2]|0;l=c[f+12>>2]|0;m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;d=c[F+104>>2]|0;a[d+(m*20|0)>>0]=81;b[d+(m*20|0)+2>>1]=0;c[d+(m*20|0)+4>>2]=n;c[d+(m*20|0)+8>>2]=l;c[d+(m*20|0)+12>>2]=0;c[d+(m*20|0)+16>>2]=0;a[d+(m*20|0)+1>>0]=0;break a}else{Di(F,81,n,l,0)|0;break a}}}while(0);l=c[e+12>>2]|0;do if(l|0){m=c[D>>2]|0;if((c[F+112>>2]|0)>(m|0)){c[D>>2]=m+1;e=c[F+104>>2]|0;a[e+(m*20|0)>>0]=49;b[e+(m*20|0)+2>>1]=0;c[e+(m*20|0)+4>>2]=l;c[e+(m*20|0)+8>>2]=k;c[e+(m*20|0)+12>>2]=0;c[e+(m*20|0)+16>>2]=0;a[e+(m*20|0)+1>>0]=0;break}else{Di(F,49,l,k,0)|0;break}}while(0);m=c[F+12>>2]|0;l=0-C|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,F,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[D>>2];l=c[D>>2]|0;if((c[F+112>>2]|0)>(l|0)){c[D>>2]=l+1;F=c[F+104>>2]|0;a[F+(l*20|0)>>0]=66;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=h;c[F+(l*20|0)+8>>2]=0;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0;F=E;return F|0}else{Di(F,66,h,0,0)|0;F=E;return F|0}return 0}function Fl(d,f){d=d|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=Ra;Ra=Ra+32|0;o=A;if(!f){Ra=A;return}if(c[f+4>>2]&1|0){Ra=A;return}switch(a[f>>0]|0){case 44:{Fl(d,c[f+16>>2]|0);Fl(d,c[f+12>>2]|0);Ra=A;return}case 53:{g=c[f+16>>2]|0;f=c[f+12>>2]|0;do if((a[g>>0]|0)==-94?(j=g+4|0,(c[j>>2]&8|0)==0):0){i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;if(f){_j(o,f)|0;if(!(a[i>>0]|0))break}i=c[d>>2]|0;t=f+4|0;if(!(c[t>>2]&256))if((c[j>>2]&256|0)==0?(k=Yi(i,f)|0,(k|0)!=0):0){l=k;u=14}else{m=g;u=13}else{m=f;u=13}if((u|0)==13?(n=Yi(i,m)|0,n|0):0){l=n;u=14}if((u|0)==14){if((c[l+12>>2]|0)!=78)break;if(c[l+8>>2]|0)break}m=d+4|0;k=c[m>>2]|0;n=d+12|0;do if((k|0)>0){l=c[n>>2]|0;i=c[g+28>>2]|0;j=g+32|0;h=0;while(1){z=c[l+(h<<1<<2)>>2]|0;if((c[z+28>>2]|0)==(i|0)?(b[z+32>>1]|0)==(b[j>>1]|0):0){u=107;break}h=h+1|0;if((h|0)>=(k|0)){u=22;break}}if((u|0)==22){x=n;r=l;break}else if((u|0)==107){Ra=A;return}}else{x=n;r=c[n>>2]|0}while(0);k=k+1|0;c[m>>2]=k;l=c[c[d>>2]>>2]|0;k=k<<3;a:do if(!r){b:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))u=34;else{u=48;break a}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];s=l+284|0;c[s>>2]=(c[s>>2]|0)+1;s=i;break b}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;u=34}while(0);if((u|0)==34)s=_d(l,k,0)|0;c[x>>2]=s;if(s|0){w=s;u=51}}else{i=r;j=l+304|0;if(((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0)?!(0<0|(0==0?(e[l+276>>1]|0)>>>0>>0:0)):0)h=r;else{h=Zd(l,r,k,0)|0;if(!h){if(c[l+480>>2]|0){Xd(l,r);u=48;break}if((c[j>>2]|0)>>>0<=i>>>0?(c[l+308>>2]|0)>>>0>i>>>0:0){u=l+300|0;c[r>>2]=c[u>>2];c[u>>2]=r;u=48;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);u=48;break}else{u=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);u=48;break}}}c[x>>2]=h;w=h;u=51}while(0);if((u|0)==48)c[x>>2]=0;else if((u|0)==51){if(c[t>>2]&8)f=c[f+12>>2]|0;z=c[m>>2]<<1;c[w+(z+-2<<2)>>2]=g;c[(c[n>>2]|0)+(z+-1<<2)>>2]=f;Ra=A;return}c[m>>2]=0;Ra=A;return}while(0);if((a[f>>0]|0)!=-94){Ra=A;return}k=f+4|0;if(c[k>>2]&8|0){Ra=A;return}i=o+20|0;a[i>>0]=1;c[o+4>>2]=127;c[o+8>>2]=128;c[o+24>>2]=0;l=(g|0)==0;if(!l){_j(o,g)|0;if(!(a[i>>0]|0)){Ra=A;return}}j=c[d>>2]|0;do if(!(c[k>>2]&256)){if(!l?c[g+4>>2]&256|0:0){p=Yi(j,g)|0;u=66;break}i=Yi(j,f)|0;if(!i){p=Yi(j,g)|0;u=66}else{q=i;u=67}}else{p=Yi(j,f)|0;u=66}while(0);if((u|0)==66?p|0:0){q=p;u=67}if((u|0)==67){if((c[q+12>>2]|0)!=78){Ra=A;return}if(c[q+8>>2]|0){Ra=A;return}}n=d+4|0;l=c[n>>2]|0;o=d+12|0;do if((l|0)>0){m=c[o>>2]|0;j=c[f+28>>2]|0;k=f+32|0;i=0;while(1){x=c[m+(i<<1<<2)>>2]|0;if((c[x+28>>2]|0)==(j|0)?(b[x+32>>1]|0)==(b[k>>1]|0):0){u=107;break}i=i+1|0;if((i|0)>=(l|0)){u=75;break}}if((u|0)==75){z=o;v=m;break}else if((u|0)==107){Ra=A;return}}else{z=o;v=c[o>>2]|0}while(0);l=l+1|0;c[n>>2]=l;m=c[c[d>>2]>>2]|0;l=l<<3;c:do if(!v){d:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))u=87;else{u=101;break c}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0>>0:0))){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];y=m+284|0;c[y>>2]=(c[y>>2]|0)+1;y=j;break d}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;u=87}while(0);if((u|0)==87)y=_d(m,l,0)|0;c[z>>2]=y;if(y|0){h=y;u=104}}else{j=v;k=m+304|0;if(((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0)?!(0<0|(0==0?(e[m+276>>1]|0)>>>0>>0:0)):0)h=v;else{i=Zd(m,v,l,0)|0;if(!i){if(c[m+480>>2]|0){Xd(m,v);u=101;break}if((c[k>>2]|0)>>>0<=j>>>0?(c[m+308>>2]|0)>>>0>j>>>0:0){u=m+300|0;c[v>>2]=c[u>>2];c[u>>2]=v;u=101;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);u=101;break}else{u=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);u=101;break}}else h=i}c[z>>2]=h;u=104}while(0);if((u|0)==101)c[z>>2]=0;else if((u|0)==104){if(c[g+4>>2]&8)g=c[g+12>>2]|0;z=c[n>>2]<<1;c[h+(z+-2<<2)>>2]=f;c[(c[o>>2]|0)+(z+-1<<2)>>2]=g;Ra=A;return}c[n>>2]=0;Ra=A;return}default:{Ra=A;return}}}function Gl(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;if((a[e>>0]|0)!=-94){e=0;return e|0}k=e+4|0;l=c[k>>2]|0;if(l&8|0){e=0;return e|0}m=c[d+24>>2]|0;f=c[m+4>>2]|0;if((f|0)<=0){e=1;return e|0}g=c[m+12>>2]|0;h=e+28|0;i=e+32|0;d=0;while(1){j=d<<1;o=c[g+(j<<2)>>2]|0;if(((o|0)!=(e|0)?(c[o+28>>2]|0)==(c[h>>2]|0):0)?(b[o+32>>1]|0)==(b[i>>1]|0):0)break;d=d+1|0;if((d|0)>=(f|0)){d=1;n=12;break}}if((n|0)==12)return d|0;d=m+8|0;c[d>>2]=(c[d>>2]|0)+1;c[k>>2]=l&-8388617|8;d=c[g+((j|1)<<2)>>2]|0;if(!d)d=0;else d=dk(c[c[m>>2]>>2]|0,d,0,0)|0;c[e+12>>2]=d;o=1;return o|0}function Hl(b,c,d,e,f){b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;var g=0,h=0;h=(c|0)<(e|0)?c:e;g=Lu(d,f,h)|0;if(g|0){e=g;return e|0}if(b|0){g=d+h|0;b=c-h|0;a:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break a;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){g=f+h|0;b=e-h|0;b:do if((b|0)>0)while(1){d=b+-1|0;if((a[g+d>>0]|0)!=32)break b;if((b|0)>1)b=d;else{b=d;break}}while(0);if(!b){e=0;return e|0}}}e=c-e|0;return e|0}function Il(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;h=b+8|0;a:do if(d|0){while(1){f=d;while(1){g=c[f+4>>2]|0;if(!(g&4096))break;if(!(g&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f)break a}a[h>>0]=e;if((a[f>>0]|0)!=e<<24>>24)break;Il(b,c[f+12>>2]|0,e);d=c[f+16>>2]|0;if(!d)break a}Ml(b,d,0)|0;return}while(0);a[h>>0]=e;return}function Jl(f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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;na=Ra;Ra=Ra+16|0;ba=na+8|0;ja=na;aa=c[f>>2]|0;ka=c[aa>>2]|0;la=a[f+46>>0]|0;ma=la&255;Y=(la&255)<2?1:la<<24>>24==2?5:10;ia=f+8|0;h=c[ia>>2]|0;da=g<<16>>16==0;if(da|(h|0)==0)W=0;else W=c[h>>2]|0;l=Y<<1;m=W<<1;j=m+(G(l,(ma<<2)+32|0)|0)|0;k=((j|0)<0)<<31>>31;a:do if(c[ka+272>>2]|0)if(!(a[ka+81>>0]|0))V=13;else{Ra=na;return}else{do if(!(0>>0|(0==(k|0)?(e[ka+276>>1]|0)>>>0>>0:0))){h=ka+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}h=ka+296|0;i=c[h>>2]|0;if(!i){h=ka+292|0;break}else{c[h>>2]=c[i>>2];fa=ka+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=i;break a}}else h=ka+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;V=13}while(0);if((V|0)==13)fa=_d(ka,j,k)|0;if(!fa){Ra=na;return}o=fa+(Y<<5)|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]=0;h=l;j=o+(Y<<5)|0;i=fa;while(1){c[i+24>>2]=j;j=j+(ma<<2)|0;if((h|0)<=1)break;else{h=h+-1|0;i=i+32|0}}h=(W|0)!=0;if(h)gw(j|0,0,m|0)|0;else j=0;ca=c[aa+132>>2]|0;b[fa+(Y<<5)+16>>1]=ca>>>0<48?ca:48;if(h)a[fa+(Y<<5)+22>>0]=la<<24>>24==0?W&255:-1;ca=la<<24>>24==0;b:do if(!ca){Q=f+60|0;R=f+44|0;S=Y>>>0>1;T=f+20|0;U=((g&65535)<<16)+1048576|0;P=0;l=0;k=0;h=0;i=fa;m=1;while(1){if((m|0)>0){K=P&65535;M=P<<2;N=i+18|0;O=i+16|0;p=0;J=0;I=o;while(1){n=c[Q>>2]|0;if(!n)n=p;else{C=I+22|0;D=I+16|0;E=I+20|0;F=I+8|0;H=I+24|0;x=p;while(1){w=a[C>>0]|0;B=ja;c[B>>2]=0;c[B+4>>2]=0;B=n;v=I;u=c[v>>2]|0;v=c[v+4>>2]|0;c:do if((((c[B>>2]&~u|0)==0?(c[B+4>>2]&~v|0)==0:0)?(Z=n+8|0,$=Z,_=c[$>>2]|0,$=c[$+4>>2]|0,(_&u|0)==0&($&v|0)==0):0)?(X=b[D>>1]|0,!(X<<16>>16<3?(c[n+36>>2]&16384|0)!=0:0)):0){p=b[n+18>>1]|0;t=X&65535;s=t+(e[n+20>>1]|0)|0;q=s&65535;r=p<<16>>16;s=s<<16>>16;do if(p<<16>>16>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=s+(d[18112+(s-r)>>0]|0)&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);q=b[E>>1]|0;r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16>16){if((r+49|0)<(s|0)){p=q;break}if((r+31|0)<(s|0)){p=s+1&65535;break}else{p=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0))break;if((s+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);A=(e[n+22>>1]|0)+t|0;B=A&65535;z=_|u;y=$|v;if(w<<24>>24<0)w=hm(f,c[ia>>2]|0,I,b[R>>1]|0,K,n,ja)|0;else{t=F;u=c[t+4>>2]|0;v=ja;c[v>>2]=c[t>>2];c[v+4>>2]=u}r=w<<24>>24;if(w<<24>>24>-1&(W|0)>(r|0)){v=j+(r<<1)|0;q=b[v>>1]|0;if(!(q<<16>>16)){q=((W-r|0)*100|0)/(W|0)|0;r=((q|0)<0)<<31>>31;do if(q>>>0<8){if(q>>>0<2){u=-4325376;break}s=40;do{s=(s&65535)+65526|0;q=cw(q|0,r|0,1)|0;r=L()|0}while(r>>>0<0|(r|0)==0&q>>>0<8);s=s&65535;V=66}else{if(q>>>0>255){s=40;do{s=(s&65535)+40|0;V=q;q=bw(q|0,r|0,4)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>4095);s=s&65535}else s=40;if(!(r>>>0>0|(r|0)==0&q>>>0>15)){V=66;break}do{s=(s&65535)+10&65535;V=q;q=bw(q|0,r|0,1)|0;u=r;r=L()|0}while(u>>>0>0|(u|0)==0&V>>>0>31);V=66}while(0);if((V|0)==66){V=0;u=((s&65535)+65526+(e[3648+((q&7)<<1)>>1]|0)<<16)+-4325376|0}if(!(b[R>>1]&16384))r=g;else{r=b[T>>1]|0;r=r<<16>>16>16?r:g}if(r<<16>>16<11)q=0;else{q=r<<16>>16;t=((q|0)<0)<<31>>31;if((r&65535)>255){s=40;r=t;do{s=(s&65535)+40|0;t=q;q=bw(q|0,r|0,4)|0;oa=r;r=L()|0}while(oa>>>0>0|(oa|0)==0&t>>>0>4095);s=s&65535}else{s=40;r=t}if(r>>>0>0|(r|0)==0&q>>>0>15){do{s=(s&65535)+10&65535;oa=q;q=bw(q|0,r|0,1)|0;t=r;r=L()|0}while(t>>>0>0|(t|0)==0&oa>>>0>31);r=s}else r=s;q=(r&65535)+65493+(e[3648+((q&7)<<1)>>1]|0)&65535}q=q+((U+u|0)>>>16)&65535;b[v>>1]=q}r=p<<16>>16;s=q<<16>>16;do if(p<<16>>16>16){if((r+49|0)<(s|0))break;if((r+31|0)<(s|0)){q=s+1&65535;break}else{q=(d[18112+(s-r)>>0]|0)+s&65535;break}}else{if((s+49|0)<(r|0)){q=p;break}if((s+31|0)<(r|0)){q=r+1&65535;break}else{q=(d[18112+(r-s)>>0]|0)+r&65535;break}}while(0);v=p;u=(q&65535)+5&65535}else{v=(p&65535)+65534&65535;u=p}d:do if((x|0)>0){p=0;t=i;while(1){oa=t;if(((c[oa>>2]|0)==(z|0)?(c[oa+4>>2]|0)==(y|0):0)?(a[t+22>>0]^w)<<24>>24>-1:0)break;p=p+1|0;if((p|0)>=(x|0)){V=96;break d}else t=t+32|0}q=t+22|0;r=t+18|0;p=b[r>>1]|0;if(p<<16>>16>16){p=x;break c}if(p<<16>>16!=u<<16>>16){s=t;p=t;break}s=b[t+16>>1]|0;p=A<<16>>16;if((p|0)>(s|0)){p=x;break c}if((p|0)!=(s|0)){s=t;p=t;break}if((b[t+20>>1]|0)>v<<16>>16){s=t;p=t}else{p=x;break c}}else V=96;while(0);if((V|0)==96){V=0;p=(x|0)<(Y|0);if(!p){if(u<<16>>16>k<<16>>16){p=x;break}if(!(u<<16>>16!=k<<16>>16?1:v<<16>>16>16)){p=x;break}}q=p?x:l;oa=i+(q<<5)|0;s=oa;x=x+(p&1)|0;r=i+(q<<5)+18|0;q=i+(q<<5)+22|0;p=oa}oa=I;y=Z;A=c[y+4>>2]|c[oa+4>>2];z=p;c[z>>2]=c[y>>2]|c[oa>>2];c[z+4>>2]=A;z=ja;A=c[z+4>>2]|0;oa=s+8|0;c[oa>>2]=c[z>>2];c[oa+4>>2]=A;b[s+16>>1]=B;b[r>>1]=u;b[s+20>>1]=v;a[q>>0]=w;oa=s+24|0;ew(c[oa>>2]|0,c[H>>2]|0,M|0)|0;c[(c[oa>>2]|0)+(P<<2)>>2]=n;if((x|0)<(Y|0)){p=x;break}k=b[N>>1]|0;h=b[O>>1]|0;if(!S){p=x;l=0;break}r=i;s=1;l=0;do{q=b[r+50>>1]|0;do if(q<<16>>16<=k<<16>>16){if(q<<16>>16!=k<<16>>16)break;p=b[r+52>>1]|0;if(p<<16>>16>h<<16>>16){h=p;V=112}}else{h=b[r+52>>1]|0;V=112}while(0);r=r+32|0;if((V|0)==112){V=0;l=s;k=q}s=s+1|0}while((s|0)!=(Y|0));p=x}else p=x;while(0);n=c[n+52>>2]|0;if(!n){n=p;break}else x=p}}J=J+1|0;if((J|0)==(m|0)){m=n;break}else{p=n;I=I+32|0}}}else m=0;P=P+1|0;if((P|0)==(ma|0))break;else{oa=o;o=i;i=oa}}if(m|0){if((m|0)>1){j=1;h=i;do{h=(b[h+18>>1]|0)>(b[i+(j<<5)+18>>1]|0)?i+(j<<5)|0:h;j=j+1|0}while((j|0)!=(m|0));i=h}if(ca){o=i;break}j=c[i+24>>2]|0;k=c[f+4>>2]|0;h=0;while(1){oa=c[j+(h<<2)>>2]|0;c[f+752+(h*80|0)+64>>2]=oa;oa=a[oa+16>>0]|0;a[f+752+(h*80|0)+44>>0]=oa;c[f+752+(h*80|0)+4>>2]=c[k+8+((oa&255)*72|0)+40>>2];h=h+1|0;if((h|0)==(ma|0)){o=i;break b}}}cd(aa,43687,ba);if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}while(0);n=f+44|0;if(((b[n>>1]&384)==256?(ea=f+51|0,!(da|(a[ea>>0]|0)!=0)):0)?(da=f+12|0,oa=ma+-1|0,oa=(hm(f,c[da>>2]|0,o,128,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[da>>2]>>2]|0)==(oa|0)):0)a[ea>>0]=2;l=f+52|0;a[l>>0]=0;h=c[ia>>2]|0;if(h|0){i=b[n>>1]|0;j=a[o+22>>0]|0;if(!(i&128)){k=f+47|0;a[k>>0]=j;da=o+8|0;ea=c[da+4>>2]|0;m=f+64|0;oa=m;c[oa>>2]=c[da>>2];c[oa+4>>2]=ea;if((j<<24>>24<1?(a[k>>0]=0,!ca):0)?(ga=ma+-1|0,ha=c[(c[o+24>>2]|0)+(ga<<2)>>2]|0,oa=c[ha+36>>2]|0,!((oa&4096|0)!=0|(oa&260|0)==260)):0){oa=ja;c[oa>>2]=0;c[oa+4>>2]=0;oa=(hm(f,h,o,2048,ga&65535,ha,ja)|0)<<24>>24;h=c[ia>>2]|0;if((c[h>>2]|0)==(oa|0)){a[l>>0]=1;ga=ja;ha=c[ga+4>>2]|0;oa=m;c[oa>>2]=c[ga>>2];c[oa+4>>2]=ha}i=b[n>>1]|0}}else if((c[h>>2]|0)==(j<<24>>24|0))a[f+51>>0]=2;if((i&512?(la<<24>>24?(c[h>>2]|0)==(a[f+47>>0]|0):0):0)?(oa=ja,c[oa>>2]=0,c[oa+4>>2]=0,oa=ma+-1|0,oa=(hm(f,h,o,0,oa&65535,c[(c[o+24>>2]|0)+(oa<<2)>>2]|0,ja)|0)<<24>>24,(c[c[ia>>2]>>2]|0)==(oa|0)):0){a[f+48>>0]=1;la=ja;ma=c[la+4>>2]|0;oa=f+64|0;c[oa>>2]=c[la>>2];c[oa+4>>2]=ma}}b[f+72>>1]=b[o+16>>1]|0;if(ka|0){if(c[ka+480>>2]|0){Xd(ka,fa);Ra=na;return}oa=fa;if((c[ka+304>>2]|0)>>>0<=oa>>>0?(c[ka+308>>2]|0)>>>0>oa>>>0:0){oa=ka+300|0;c[fa>>2]=c[oa>>2];c[oa>>2]=fa;Ra=na;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](fa);Ra=na;return}else{oa=Wa[c[29352>>2]&127](fa)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](fa);Ra=na;return}}function Kl(f,g,h,i){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;E=Ra;Ra=Ra+192|0;o=E+152|0;r=E+144|0;u=E+136|0;t=E+128|0;p=E+120|0;n=E+112|0;m=E+104|0;C=E+160|0;l=E;D=c[f+116>>2]|0;if((a[((D|0)==0?f:D)+199>>0]|0)!=2){Ra=E;return}s=d[h+44>>0]|0;D=c[f+8>>2]|0;k=c[f>>2]|0;x=c[h+64>>2]|0;v=x+36|0;q=c[v>>2]|0;if((q&8192|0)==0?(j=i&65535,(j&32|0)==0):0){i=q&48;do if(!i){if((q&1024|0)==0?b[x+24>>1]|0:0){j=1;break}j=(j&3|0)!=0}else j=1;while(0);B=C+4|0;c[B>>2]=l;c[C>>2]=k;w=C+8|0;c[w>>2]=100;y=C+12|0;c[y>>2]=1e9;z=C+16|0;c[z>>2]=0;a[C+20>>0]=0;A=C+21|0;a[A>>0]=0;h=j?6:4;c[z>>2]=h;ew(l|0,(j?43742:43749)|0,h|0)|0;h=c[g+8+(s*72|0)+20>>2]|0;if(!h){c[n>>2]=c[g+8+(s*72|0)+8>>2];Eb(C,43767,n)}else{c[m>>2]=c[h+20>>2];Eb(C,43754,m)}h=c[g+8+(s*72|0)+12>>2]|0;if(h|0){c[p>>2]=h;Eb(C,43777,p)}do if(!(q&1280)){k=x+32|0;l=c[k>>2]|0;if((c[(c[g+8+(s*72|0)+16>>2]|0)+36>>2]&32|0)!=0?(s=l+55|0,((d[s>>0]|d[s+1>>0]<<8)&3)==2):0)if(j)h=43784;else break;else if(!(q&131072))h=(q&16384|0)==0?((q&64|0)==0?43872:43854):43829;else h=43796;i=c[z>>2]|0;j=i+7|0;if(j>>>0<(c[w>>2]|0)>>>0){c[z>>2]=j;s=(c[B>>2]|0)+i|0;a[s>>0]=a[43881]|0;a[s+1>>0]=a[43882]|0;a[s+2>>0]=a[43883]|0;a[s+3>>0]=a[43884]|0;a[s+4>>0]=a[43885]|0;a[s+5>>0]=a[43886]|0;a[s+6>>0]=a[43887]|0}else wb(C,43881,7);c[t>>2]=c[l>>2];Eb(C,h,t);p=c[k>>2]|0;h=b[x+24>>1]|0;l=b[x+42>>1]|0;i=h&65535;h=h<<16>>16==0;if(h?(c[v>>2]&48|0)==0:0)break;j=c[z>>2]|0;k=j+2|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=32;a[t+1>>0]=40}else wb(C,43974,2);a:do if(h)i=0;else{n=p+4|0;o=p+12|0;m=l&65535;l=0;while(1){h=b[(c[n>>2]|0)+(l<<1)>>1]|0;switch(h<<16>>16){case -2:{h=43996;break}case -1:{h=38132;break}default:h=c[(c[(c[o>>2]|0)+4>>2]|0)+(h<<16>>16<<4)>>2]|0}do if(l|0){j=c[z>>2]|0;k=j+5|0;if(k>>>0<(c[w>>2]|0)>>>0){c[z>>2]=k;t=(c[B>>2]|0)+j|0;a[t>>0]=a[43977]|0;a[t+1>>0]=a[43978]|0;a[t+2>>0]=a[43979]|0;a[t+3>>0]=a[43980]|0;a[t+4>>0]=a[43981]|0;break}else{wb(C,43977,5);break}}while(0);c[u>>2]=h;Eb(C,l>>>0>>0?43988:43983,u);l=l+1|0;if((l|0)==(i|0))break a}}while(0);h=c[v>>2]|0;if(!(h&32))j=i;else{im(C,p,e[x+26>>1]|0,i,i,43905);j=1;h=c[v>>2]|0}if(h&16|0)im(C,p,e[x+28>>1]|0,i,j,43907);h=c[z>>2]|0;i=h+1|0;if(i>>>0<(c[w>>2]|0)>>>0){c[z>>2]=i;a[(c[B>>2]|0)+h>>0]=41;break}else{wb(C,34066,1);break}}else{if((q&256|0)==0|(q&15|0)==0){if(!(q&1024))break;w=c[x+32>>2]|0;c[o>>2]=c[x+24>>2];c[o+4>>2]=w;Eb(C,43947,o);break}if(!(q&5))h=(i|0)==48?43891:(q&32|0)==0?43907:43905;else h=43889;c[r>>2]=h;Eb(C,43909,r)}while(0);h=c[B>>2]|0;if(((h|0)!=0?(a[h+(c[z>>2]|0)>>0]=0,(c[y>>2]|0)!=0):0)?(a[A>>0]&4)==0:0)k=$d(C)|0;else k=c[B>>2]|0;j=D+108|0;h=c[j>>2]|0;i=c[f+212>>2]|0;if((c[D+112>>2]|0)>(h|0)){c[j>>2]=h+1;f=c[D+104>>2]|0;a[f+(h*20|0)>>0]=-85;b[f+(h*20|0)+2>>1]=0;c[f+(h*20|0)+4>>2]=h;c[f+(h*20|0)+8>>2]=i;c[f+(h*20|0)+12>>2]=0;c[f+(h*20|0)+16>>2]=0;a[f+(h*20|0)+1>>0]=0}else h=Di(D,171,h,i,0)|0;i=c[D>>2]|0;do if(!(a[i+81>>0]|0)){if((h|0)<0)h=(c[j>>2]|0)+-1|0;i=c[D+104>>2]|0;j=i+(h*20|0)+1|0;if(a[j>>0]|0){Ei(D,i+(h*20|0)|0,k,-7);break}if(k|0){c[i+(h*20|0)+16>>2]=k;a[j>>0]=-7}}else if(k|0){if(i|0){if(c[i+480>>2]|0){Xd(i,k);break}D=k;if((c[i+304>>2]|0)>>>0<=D>>>0?(c[i+308>>2]|0)>>>0>D>>>0:0){D=i+300|0;c[k>>2]=c[D>>2];c[D>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);Ra=E;return}Ra=E;return} 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,k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0;r=Ra;Ra=Ra+16|0;p=r+4|0;j=r;d=c[a>>2]|0;n=c[d>>2]|0;do if(b){if((n+-3|0)>>>0<2){e=b<<2;q=pb(e,0)|0;if(!q){e=7;break}gw(q|0,0,e|0)|0;c[p>>2]=d;if((c[d>>2]|0)==(n|0)){e=d;do e=c[e+12>>2]|0;while((c[e>>2]|0)==(n|0));c[p>>2]=e}else e=d;m=b+-1|0;o=(b|0)>0;a:do if(o){f=0;b:while(1){k=e+8|0;l=c[k>>2]|0;c[k>>2]=0;k=(l|0)==0;if(k)d=0;else c[l+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}g=c[p>>2]|0;if(g){j=0;e=f;h=c[p>>2]|0;while(1){i=q+(j<<2)|0;f=c[i>>2]|0;if(!f)break;c[e+12>>2]=f;c[e+16>>2]=g;c[f+8>>2]=e;c[g+8>>2]=e;h=e+8|0;f=c[h>>2]|0;c[h>>2]=0;c[i>>2]=0;j=j+1|0;if(!((j|0)<(b|0)&(e|0)!=0))break b;else{g=e;h=e;e=f}}c[p>>2]=h;c[i>>2]=g;c[p>>2]=0;f=e}if(k){k=37;break a}h=l+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=l+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=l}c[p>>2]=e;k=30}else{f=0;while(1){g=e+8|0;j=c[g>>2]|0;c[g>>2]=0;g=(j|0)==0;if(g)d=0;else c[j+12>>2]=0;e=cr(p,m)|0;if(e|0){k=46;break a}e=c[p>>2]|0;if(e|0){k=30;break a}if(g){k=37;break a}h=j+16|0;e=h;while(1){e=c[e>>2]|0;g=e;if((c[g>>2]|0)==(n|0))e=g+12|0;else break}c[p>>2]=e;i=j+8|0;g=c[h>>2]|0;c[g+8>>2]=c[i>>2];h=c[i>>2]|0;if(!h)d=g;else c[h+12>>2]=g;c[i>>2]=f;f=j}}while(0);if((k|0)==30){ar(e);e=18;k=46}else if((k|0)==37){c[p>>2]=0;if(o){h=0;d=0;do{e=q+(h<<2)|0;g=c[e>>2]|0;if(g){if(!d){d=g;e=g+8|0}else{c[f+16>>2]=d;e=c[e>>2]|0;c[f+12>>2]=e;c[e+8>>2]=f;c[d+8>>2]=f;e=f+8|0;d=f;f=c[e>>2]|0}c[e>>2]=0}h=h+1|0}while((h|0)!=(b|0));c[p>>2]=d;e=0}else{e=0;d=0}}if((k|0)==46){if(o){g=0;do{ar(c[q+(g<<2)>>2]|0);g=g+1|0}while((g|0)!=(b|0))}if(f)do{g=f;f=c[f+8>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{b=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0)}if(!(c[7324]|0))ab[c[29344>>2]&127](q);else{b=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q)}}else{if((n|0)!=2){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}h=d+12|0;g=c[h>>2]|0;c[p>>2]=g;i=d+16|0;f=c[i>>2]|0;c[j>>2]=f;c[h>>2]=0;c[i>>2]=0;c[g+8>>2]=0;c[f+8>>2]=0;g=b+-1|0;e=cr(p,g)|0;do if(!e){e=cr(j,g)|0;if(!e){e=c[p>>2]|0;c[h>>2]=e;c[e+8>>2]=d;e=c[j>>2]|0;c[i>>2]=e;c[e+8>>2]=d;e=0;break}else{f=c[j>>2]|0;k=63;break}}else k=63;while(0);if((k|0)==63){ar(f);ar(c[p>>2]|0)}}if(!e){q=0;b=d;c[a>>2]=b;Ra=r;return q|0}}else e=1;while(0);ar(d);q=e;b=0;c[a>>2]=b;Ra=r;return q|0}function dr(a,b){a=a|0;b=b|0;var d=0;if(!a){d=0;return d|0}d=b;while(1){if((d|0)<0){b=18;a=6;break}d=d+-1|0;b=dr(c[a+12>>2]|0,d)|0;if(b|0){a=6;break}a=c[a+16>>2]|0;if(!a){b=0;a=6;break}}if((a|0)==6)return b|0;return 0}function er(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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;W=Ra;Ra=Ra+32|0;R=W+20|0;S=W+16|0;T=W+12|0;U=W+8|0;V=W+4|0;E=W;F=b+24|0;H=b+20|0;I=b+16|0;J=b+32|0;K=b+8|0;M=b+4|0;N=b+12|0;m=0;j=f;l=1;D=e;e=0;a:while(1){c[E>>2]=0;c[F>>2]=0;b:do if((j|0)>0){n=j;k=D;while(1){switch(a[k>>0]|0){case 12:case 11:case 13:case 10:case 9:case 32:break;default:{C=k;break b}}i=n+-1|0;k=k+1|0;if((n|0)>1)n=i;else{w=6;break b}}}else{i=j;k=D;w=6}while(0);if((w|0)==6){w=0;if(!i){k=101;i=0;w=171;break}else{n=i;C=k}}i=C+4|0;k=C+5|0;c:do if((n|0)<2)w=187;else{if(!(Lu(C,54896,2)|0))switch(a[C+2>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=0;q=2;o=10;break}default:w=25}else w=25;d:do if((w|0)==25){w=0;if((n|0)<3){w=187;break c}if(!(Lu(C,54899,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=1;q=3;o=10;break d}default:{}}if(!(Lu(C,54903,3)|0))switch(a[C+3>>0]|0){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=2;q=3;o=10;break d}default:{}}if((n|0)<4){w=187;break c}if(Lu(C,54907,4)|0){w=187;break c}i=a[i>>0]|0;if(i<<24>>24==47){i=a[k>>0]|0;if((i+-48&255)>=10){w=187;break c}k=5;o=0;do{o=(o*10|0)+-48+(i<<24>>24)|0;k=k+1|0;i=a[C+k>>0]|0}while((i+-48&255)<10)}else{k=4;o=10}switch(i<<24>>24){case 0:case 34:case 40:case 41:case 12:case 11:case 13:case 10:case 9:case 32:{i=3;q=k;break}default:{w=187;break c}}}while(0);p=26336+(i<<3)+6|0;if(mb()|0){k=7;i=0;w=171;break a}if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](48)|0;if(!n){k=7;i=0;w=171;break a}t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}else{i=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;n=59064;k=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&k>>>0>0){B=c[14978]|0;A=Tv(k|0,n|0,i|0,((i|0)<0)<<31>>31|0)|0;z=L()|0;c[14768]=((z|0)<0|(z|0)==0&A>>>0<=B>>>0)&1}n=Wa[c[29340>>2]&127](i)|0;if(!n){k=7;i=0;w=171;break a}i=Wa[c[29352>>2]&127](n)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i;t=n;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0))}c[n>>2]=d[p>>0];c[n+4>>2]=o;c[E>>2]=n;k=0;i=C-D+q|0}while(0);e:do if((w|0)==187){w=0;switch(a[C>>0]|0){case 41:{w=87;break a}case 34:{f:do if((n|0)>1){i=1;while(1){if((a[C+i>>0]|0)==34){k=i;break f}i=i+1|0;if((i|0)>=(n|0)){k=i;break}}}else k=1;while(0);i=k+1-D+C|0;if((k|0)==(n|0)){k=1;w=171;break a}A=C+1|0;z=k+-1|0;o=c[b>>2]|0;B=c[o>>2]|0;n=c[M>>2]|0;c[R>>2]=0;k=Za[c[B+12>>2]&127](o,A,z,R)|0;g:do if(!k){c[c[R>>2]>>2]=o;if((c[B>>2]|0)>0?(G=Xa[c[B+24>>2]&255](c[R>>2]|0,n)|0,G|0):0){Wa[c[B+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=G;o=0;w=36;break}o=c[R>>2]|0;w=B+20|0;y=o;t=0;r=0;s=0;q=0;n=0;u=0;p=0;while(1){c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[w>>2]&127](y,R,S,T,U,V)|0;x=(k|0)==0;if(x){if(mb()|0){w=42;break}v=sb(u,(t*24|0)+144|0,0)|0;if(!v){w=42;break}n=c[S>>2]|0;if(mb()|0){w=48;break}u=n+s|0;u=sb(q,u,((u|0)<0)<<31>>31)|0;if(!u){w=48;break}p=v+120|0;q=p+(t*24|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;ew(u+s|0,c[R>>2]|0,c[S>>2]|0)|0;q=c[S>>2]|0;c[p+(t*24|0)+4>>2]=q;n=c[U>>2]|0;if((n|0)<(z|0))n=(a[A+n>>0]|0)==42;else n=0;c[p+(t*24|0)+8>>2]=n&1;n=c[T>>2]|0;if((n|0)>0)n=(a[C+n>>0]|0)==94;else n=0;c[p+(t*24|0)+12>>2]=n&1;t=t+1|0;n=v;r=t;s=q+s|0;q=u;p=v;u=v}else t=t+1|0;if(!x){w=58;break}}do if((w|0)==42)if(u)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);n=q;k=0;break}else{n=q;k=0}else if((w|0)==48)if(q)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);n=0;k=v;break}else{n=0;k=v}else if((w|0)==58){Wa[c[B+16>>2]&127](y)|0;o=0;w=59;break g}while(0);w=75}else{o=c[R>>2]|0;w=36}while(0);if((w|0)==36){n=0;r=0;s=0;q=0;p=0;w=59}h:do if((w|0)==59){w=0;if((k|0)==101){if((mb()|0)==0?(O=sb(p,s+144+(r*24|0)|0,0)|0,O|0):0){n=O+48|0;t=O;u=t+112|0;do{c[t>>2]=0;t=t+4|0}while((t|0)<(u|0));c[O>>2]=5;k=O+20|0;c[k>>2]=n;c[O+116>>2]=c[H>>2];c[O+112>>2]=r;n=n+72+(r*24|0)|0;do if(q|0){ew(n|0,q|0,s|0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{C=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}while(0);p=c[k>>2]|0;q=c[p+64>>2]|0;if((q|0)<=0){k=0;n=O;break}c[p+72>>2]=n;if((q|0)==1){k=0;n=O;break}k=n+(c[p+76>>2]|0)|0;n=1;while(1){c[p+72+(n*24|0)>>2]=k;o=n+1|0;if((o|0)<(q|0)){k=k+(c[p+72+(n*24|0)+4>>2]|0)|0;n=o}else{k=0;n=O;break h}}}if(p)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);n=q;k=0;w=75;break}else{n=q;k=0;w=75}}}while(0);do if((w|0)==75){w=0;if(o|0)Wa[c[B+16>>2]&127](o)|0;do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{C=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(k)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);k=7;n=0;break}else{n=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);k=7;n=0;break}else{k=7;n=0}}while(0);c[E>>2]=n;break e}case 40:{c[R>>2]=0;c[J>>2]=(c[J>>2]|0)+1;k=er(b,C+1|0,n+-1|0,E,R)|0;i=1-D+C+(c[R>>2]|0)|0;n=c[E>>2]|0;break e}default:{s=c[H>>2]|0;t=c[I>>2]|0;i:do if((t|0)>0){u=c[K>>2]|0;i=0;j:while(1){k=c[u+(i<<2)>>2]|0;v=Eu(k)|0;if((n|0)>(v|0)?!((k|0)==0?1:(a[C+v>>0]|0)!=58):0){if((v|0)<=0){w=99;break}r=C;p=v;while(1){o=a[k>>0]|0;if(!(o<<24>>24)){w=95;break}o=a[208+(o&255)>>0]|0;q=a[208+(d[r>>0]|0)>>0]|0;if(o<<24>>24!=q<<24>>24){w=97;break}if((p|0)>1){k=k+1|0;r=r+1|0;p=p+-1|0}else{w=99;break j}}if((w|0)==95){w=0;o=0;k=a[208+(d[r>>0]|0)>>0]|0}else if((w|0)==97){w=0;o=o&255;k=q}if((o|0)==(k&255|0)){w=102;break}}i=i+1|0;if((i|0)>=(t|0)){q=s;u=0;break i}}if((w|0)==99){w=0;q=i;u=v+1-D+C|0;break}else if((w|0)==102){w=0;q=i;u=v+1-D+C|0;break}}else{q=s;u=0}while(0);s=D+u|0;p=j-u|0;o=c[b>>2]|0;t=c[o>>2]|0;k:do if((p|0)>0){i=0;while(1){switch(a[s+i>>0]|0){case 34:case 41:case 40:break k;default:{}}i=i+1|0;if((i|0)>=(p|0))break k}}else i=0;while(0);n=c[M>>2]|0;c[R>>2]=0;k=Za[c[t+12>>2]&127](o,s,i,R)|0;do if(!k){c[c[R>>2]>>2]=o;if((c[t>>2]|0)>0?(P=Xa[c[t+24>>2]&255](c[R>>2]|0,n)|0,P|0):0){Wa[c[t+16>>2]&127](c[R>>2]|0)|0;c[R>>2]=0;k=P;w=111;break}r=c[R>>2]|0;c[S>>2]=0;c[T>>2]=0;c[U>>2]=0;c[V>>2]=0;k=$a[c[t+20>>2]&127](r,R,S,T,U,V)|0;l:do if(!k){i=(c[S>>2]|0)+144|0;n=pb(i,0)|0;if(!n){n=0;k=7;i=c[U>>2]|0;break}gw(n|0,0,i|0)|0;c[n>>2]=5;c[n+20>>2]=n+48;c[n+112>>2]=1;c[n+116>>2]=q;i=c[S>>2]|0;c[n+124>>2]=i;C=n+144|0;c[n+120>>2]=C;ew(C|0,c[R>>2]|0,i|0)|0;i=c[U>>2]|0;if((i|0)<(p|0)?(Q=i+1|0,(a[s+i>>0]|0)==42):0){c[n+128>>2]=1;c[U>>2]=Q;i=Q}k=c[T>>2]|0;if((c[N>>2]|0)!=0&(k|0)>0){p=n+132|0;while(1){o=k;k=k+-1|0;if((a[s+k>>0]|0)!=94){k=0;break l}c[p>>2]=1;c[T>>2]=k;if((o|0)<=1){k=0;break}}}else k=0}else{n=0;k=(i|0)!=0&(k|0)==101?0:k}while(0);Wa[c[t+16>>2]&127](r)|0}else w=111;while(0);if((w|0)==111){w=0;n=0}c[E>>2]=n;i=i+u|0;break e}}}while(0);if((k|0)==0&(n|0)!=0){r=c[n>>2]|0;if((r|0)!=5){p=(c[n+12>>2]|0)!=0;o=p^1;k=(l|0)!=0;if(k&o){w=129;break}else q=p}else{k=(l|0)!=0;o=0;q=1}if(k|o)if(!m)m=0;else w=154;else{if(mb()|0){w=152;break}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](48)|0;if(!k){w=152;break}t=k;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=k}else{k=Wa[c[29356>>2]&127](48)|0;if((c[14985]|0)>>>0<48)c[14985]=48;p=59064;l=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&l>>>0>0){C=c[14978]|0;B=Tv(l|0,p|0,k|0,((k|0)<0)<<31>>31|0)|0;A=L()|0;c[14768]=((A|0)<0|(A|0)==0&B>>>0<=C>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(!l){w=152;break}k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;t=l;u=t+48|0;do{a[t>>0]=0;t=t+1|0}while((t|0)<(u|0));p=l}c[p>>2]=3;k=m+8|0;l=c[k>>2]|0;m:do if(!l)w=150;else{n=l;while(1){if((c[n>>2]|0)>3)break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=150;break m}else{m=n;n=l}}c[n+16>>2]=p;c[p+8>>2]=c[k>>2]}while(0);if((w|0)==150)e=p;c[p+12>>2]=m;c[k>>2]=p;m=p;w=154}if((w|0)==154){w=0;if(!((r|0)!=1|q)?(c[m>>2]|0)!=5:0){w=158;break}if((r|0)!=5&q?(c[m>>2]|0)==1:0){w=158;break}}if(q){k=c[E>>2]|0;l=k;if(!e){e=k;m=l}else{c[m+16>>2]=k;c[l+8>>2]=m;m=l}}else{q=c[E>>2]|0;k=m+8|0;l=c[k>>2]|0;n:do if(!l)w=167;else{p=c[q>>2]|0;n=l;while(1){if((c[n>>2]|0)>(p|0))break;k=n+8|0;l=c[k>>2]|0;if(!l){m=n;w=167;break n}else{m=n;n=l}}c[n+16>>2]=q;c[q+8>>2]=c[k>>2]}while(0);if((w|0)==167){w=0;e=q}c[q+12>>2]=m;c[k>>2]=q;m=c[E>>2]|0}l=o&1;k=0}j=j-i|0;if(!k)D=D+i|0;else{w=173;break}}if((w|0)==87){c[J>>2]=(c[J>>2]|0)+-1;c[E>>2]=0;k=101;i=1-D+C|0;w=171}else if((w|0)==129){ar(n);i=1;w=170}else if((w|0)==152){ar(n);i=7;w=170}else if((w|0)==158){ar(c[E>>2]|0);i=1;w=170}if((w|0)!=170)if((w|0)==171){j=j-i|0;w=173}if((w|0)==173){i=(e|0)!=0&(k|0)==101&(l|0)!=0?1:k;c[h>>2]=f-j;if((i|0)==101){h=0;f=e;c[g>>2]=f;Ra=W;return h|0}}ar(e);h=i;f=0;c[g>>2]=f;Ra=W;return h|0}function fr(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,q=0,r=0,s=0,t=0,u=0,v=0;if(!b)return;while(1){if(c[f>>2]|0){v=38;break}g=c[b>>2]|0;if((g|0)==5){v=5;break}c[e>>2]=(c[e>>2]|0)+((g|0)==4&1);fr(a,c[b+12>>2]|0,d,e,f);b=c[b+16>>2]|0;if(!b){v=38;break}}if((v|0)==5){t=b+20|0;b=c[t>>2]|0;u=c[b+64>>2]|0;c[d>>2]=(c[d>>2]|0)+u;a:do if((u|0)>0){s=a+20|0;r=0;b:while(1){o=c[b+72+(r*24|0)>>2]|0;p=c[b+72+(r*24|0)+4>>2]|0;n=c[b+72+(r*24|0)+8>>2]|0;q=b+72+(r*24|0)+20|0;if(mb()|0){g=0;b=7;v=34;break}if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](56)|0;if(!g){g=0;b=7;v=34;break}}else{b=Wa[c[29356>>2]&127](56)|0;if((c[14985]|0)>>>0<56)c[14985]=56;e=59064;g=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&g>>>0>0){m=c[14978]|0;l=Tv(g|0,e|0,b|0,((b|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=m>>>0)&1}g=Wa[c[29340>>2]&127](b)|0;if(!g){g=0;b=7;v=34;break}b=Wa[c[29352>>2]&127](g)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}m=c[a>>2]|0;l=(n|0)!=0;c:do if(l){h=m+256|0;d=g+36|0;k=c[m+252>>2]|0;i=(k|0)>1;if(i){e=c[h>>2]|0;j=1;while(1){if((c[e+(j*24|0)>>2]|0)==(p|0)){v=25;break}b=j+1|0;if((b|0)<(k|0))j=b;else break}if((v|0)==25){v=0;b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,j,-2,o,p,0,0,g)|0;c[d>>2]=1;break}j=p+1|0;if(i){e=c[h>>2]|0;h=1;while(1){if((c[e+(h*24|0)>>2]|0)==(j|0))break;b=h+1|0;if((b|0)<(k|0))h=b;else{v=33;break c}}b=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));b=Xp(m,b,h,-2,o,p,1,0,g)|0;if(b|0){v=34;break b}b=Xp(m,c[s>>2]|0,0,-2,o,p,0,0,g)|0}else v=33}else v=33}else{d=g+36|0;v=33}while(0);if((v|0)==33){v=0;b=(l^1)&1;e=c[s>>2]|0;i=g;k=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(k|0));p=Xp(m,e,0,-2,o,p,n,0,g)|0;c[d>>2]=b;b=p}c[q>>2]=g;r=r+1|0;if(b|0)break;b=c[t>>2]|0;if((r|0)>=(u|0))break a}if((v|0)==34)c[q>>2]=g;c[f>>2]=b;return}while(0);c[b+44>>2]=-1;return}else if((v|0)==38)return}function gr(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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0;D=Ra;Ra=Ra+16|0;C=D;if(c[h>>2]|0){Ra=D;return}j=e;a:while(1){switch(c[j>>2]|0){case 5:{e=5;break a}case 2:{e=31;break a}case 4:{i=j+12|0;e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4;break}default:{e=d;i=j+12|0}}gr(b,e,c[i>>2]|0,f,g,h);i=j+16|0;if((c[j>>2]|0)==4){e=c[i>>2]|0;c[c[g>>2]>>2]=e;c[g>>2]=(c[g>>2]|0)+4}if(!(c[h>>2]|0)){d=e;j=c[i>>2]|0}else{e=31;break}}if((e|0)==5){v=c[j+20>>2]|0;w=v+64|0;x=v+68|0;u=0;while(1){if((u|0)>=(c[w>>2]|0)){e=31;break}y=c[f>>2]|0;c[f>>2]=y+24;c[y>>2]=v;c[y+4>>2]=u;c[y+12>>2]=d;c[y+8>>2]=v+72+(u*24|0);c[y+20>>2]=c[x>>2];m=c[v+72+(u*24|0)+20>>2]|0;y=y+16|0;t=c[b>>2]|0;n=c[t+240>>2]|0;o=m+4|0;p=t+20|0;q=t+248|0;r=t+244|0;s=t+12|0;t=t+16|0;i=0;l=0;while(1){if((l|0)>=(c[o>>2]|0)){e=0;break}e=c[(c[m>>2]|0)+(l<<2)>>2]|0;b:do if(((c[e+56>>2]|0)==0?(a[e+5>>0]|0)==0:0)?(A=e+8|0,z=c[A>>2]|0,A=c[A+4>>2]|0,B=e+16|0,k=B,g=c[k+4>>2]|0,!((A|0)>(g|0)|((A|0)==(g|0)?z>>>0>(c[k>>2]|0)>>>0:0))):0){j=c[q>>2]|0;g=z;k=A;while(1){if(!j){e=c[r>>2]|0;if(!e){c[C>>2]=c[p>>2];e=Bb(53537,C)|0;c[r>>2]=e;if(!e){e=7;break b}}e=ad(c[s>>2]|0,c[t>>2]|0,e,53549,g,k,0,q)|0}else e=ld(j,g,k)|0;if(e|0)break b;j=c[q>>2]|0;if((j|0)!=0?(c[j+16>>2]|0)!=0:0)e=c[j>>2]|0;else e=0;if((e+35|0)>(n|0))i=((e+34|0)/(n|0)|0)+i|0;E=g;g=Sv(g|0,k|0,1,0)|0;G=k;k=L()|0;e=B;F=c[e+4>>2]|0;if(!((G|0)<(F|0)|((G|0)==(F|0)?E>>>0<(c[e>>2]|0)>>>0:0))){e=0;break}}}else e=0;while(0);if(!e)l=l+1|0;else break}c[y>>2]=i;c[h>>2]=e;if(!e)u=u+1|0;else{e=31;break}}if((e|0)==31){Ra=D;return}}else if((e|0)==31){Ra=D;return}}function hr(e,f,g,h){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;B=Ra;Ra=Ra+16|0;x=B+4|0;y=B;z=c[e>>2]|0;if(c[z+40>>2]|0){A=0;Ra=B;return A|0}v=(h|0)>0;if(!v){A=0;Ra=B;return A|0}i=0;j=0;k=0;while(1){if((c[g+(k*24|0)+12>>2]|0)==(f|0)){u=i+1|0;j=(c[g+(k*24|0)+16>>2]|0)+j|0}else u=i;k=k+1|0;if((k|0)==(h|0))break;else i=u}if((j|0)==0|(u|0)<2){A=0;Ra=B;return A|0}s=e+60|0;i=c[s>>2]|0;do if(!i){i=lr(z,x)|0;if(!i){r=c[x>>2]|0;q=(r|0)==0;if(q)l=mc(29576)|0;else{i=c[r+120>>2]|0;if((i|0)!=0?(b[r+144>>1]|0)!=0:0)j=r;else{i=c[r>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=r}l=mc(i)|0;i=c[j>>2]|0;k=r+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i}n=Lc(r,0)|0;p=l+n|0;j=a[l>>0]|0;i=j&255;do if(!(i&128)){k=1;i=j&255;o=0}else{t=d[l+1>>0]|0;i=t<<7|i&127;if(!(t&128)){k=2;o=0;break}t=d[l+2>>0]|0;i=t<<14|i&16383;if(!(t&128)){k=3;o=0;break}t=d[l+3>>0]|0;i=t<<21|i&2097151;if(!(t&128)){k=4;o=0;break}j=28;k=l+4|0;i=i&268435455;m=0;do{t=k;k=k+1|0;t=d[t>>0]|0;o=cw(t&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));k=k-l|0;o=m}while(0);if((k|0)<(n|0)){n=l+k|0;do{k=a[n>>0]|0;j=k&255;do if(!(j&128)){l=1;j=k&255;k=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;k=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;k=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;k=0;break}l=28;m=n+4|0;j=j&268435455;k=0;do{t=m;m=m+1|0;t=d[t>>0]|0;C=cw(t&127|0,0,l|0)|0;j=Sv(C|0,L()|0,j|0,k|0)|0;k=L()|0;l=l+7|0}while(l>>>0<64&((t&128|0)!=0|0!=0));l=m-n|0}while(0);n=n+l|0}while(n>>>0

      >>0);if(!((i|0)==0&(o|0)==0|(j|0)==0&(k|0)==0)){p=e+64|0;c[p>>2]=i;c[p+4>>2]=o;o=Wv(j|0,k|0,i|0,o|0)|0;p=L()|0;t=c[z+240>>2]|0;C=((t|0)<0)<<31>>31;p=Sv(o|0,p|0,t|0,C|0)|0;C=Wv(p|0,L()|0,t|0,C|0)|0;L()|0;c[s>>2]=C;do if(!q){i=c[r>>2]|0;C=r+136|0;t=c[C+4>>2]|0;if((t|0)>0|(t|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);j=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;C=r+64|0;c[C>>2]=0;c[C+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0;while(0);t=c[s>>2]|0;break}}if(!q){i=c[r>>2]|0;C=r+136|0;A=c[C+4>>2]|0;if((A|0)>0|(A|0)==0&(c[C>>2]|0)>>>0>0)hc(i,r);C=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;A=r+64|0;c[A>>2]=0;c[A+4>>2]=0;if((C|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=267}else i=267}else i=267}C=i;Ra=B;return C|0}else{t=i;i=0}while(0);if(!((u|0)>0&(i|0)==0)){C=i;Ra=B;return C|0}s=u+-1|0;r=e+28|0;p=0;o=1;q=0;while(1){if(v){i=0;k=0;do{j=g+(k*24|0)|0;do if((c[g+(k*24|0)+8>>2]|0)!=0?(c[g+(k*24|0)+12>>2]|0)==(f|0):0){if(i|0?(c[g+(k*24|0)+16>>2]|0)>=(c[i+16>>2]|0):0)break;i=j}while(0);k=k+1|0}while((k|0)!=(h|0));m=i}else m=0;n=(q|0)==0;do if(n){o=o<<2;A=88}else{C=(o|0)/4|0;if((c[m+16>>2]|0)<(G((p+-1+C|0)/(C|0)|0,t)|0)){j=q>>>0<12?o<<2:o;if(!((q|0)==(s|0)?1:(c[(c[m>>2]|0)+64>>2]|0)<2)){o=j;A=88;break}i=0;l=j;k=p;j=m+8|0;break}j=m+8|0;n=c[j>>2]|0;m=c[m+20>>2]|0;do if(!(mb()|0)){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](16)|0;if(!i){i=7;break}}else{i=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){C=c[14978]|0;e=Tv(k|0,l|0,i|0,((i|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&e>>>0<=C>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=7;break}k=Wa[c[29352>>2]&127](i)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}c[i+12>>2]=0;c[i>>2]=n;c[i+8>>2]=c[r>>2];c[i+4>>2]=m;c[r>>2]=i;c[n+16>>2]=i;i=0}else i=7;while(0);l=n+20|0;br(c[l>>2]|0);c[l>>2]=0;l=o;k=p}while(0);if((A|0)==88){A=0;j=m+8|0;i=c[j>>2]|0;c[x>>2]=0;c[y>>2]=0;i=jr(z,i,c[m+20>>2]|0,x,y)|0;if(!i){i=kr(z,c[m>>2]|0,c[m+4>>2]|0,c[y>>2]|0,c[x>>2]|0)|0;if(!i){k=c[m>>2]|0;i=c[k>>2]|0;k=c[k+4>>2]|0;if((i|0)!=0?(w=i+k|0,(k|0)>0):0){k=0;do{do{C=i;i=i+1|0}while((a[C>>0]|0)<0);l=0;while(1){m=a[i>>0]|0;i=i+1|0;if(!(l<<24>>24|m))break;else l=m&128}k=k+1|0}while(i>>>0>>0)}else k=0;i=0;k=n|(k|0)<(p|0)?k:p}else k=p}else k=p;l=o}c[j>>2]=0;q=q+1|0;if(!((q|0)<(u|0)&(i|0)==0))break;else{p=k;o=l}}Ra=B;return i|0}function ir(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(!d)return;if(c[e>>2]|0)return;if((c[d>>2]|0)!=5){h=d+12|0;ir(b,c[h>>2]|0,e);f=d+16|0;ir(b,c[f>>2]|0,e);if(!(a[(c[h>>2]|0)+34>>0]|0))f=0;else f=(a[(c[f>>2]|0)+34>>0]|0)!=0&1;a[d+34>>0]=f;return}h=c[d+20>>2]|0;g=c[h+64>>2]|0;if(g|0){a:do if((g|0)>0){f=0;do{if(!(c[h+72+(f*24|0)+16>>2]|0))break a;f=f+1|0}while((f|0)<(g|0))}else f=0;while(0);a[d+34>>0]=(f|0)==(g|0)&1}d=pr(b,1,h)|0;c[e>>2]=d;return}function jr(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,u=0,v=0,w=0,x=0;x=Ra;Ra=Ra+160|0;r=x+148|0;s=x+144|0;u=x+16|0;i=x;w=e+20|0;v=c[w>>2]|0;j=u;k=j+128|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[i+12>>2]=((c[e+12>>2]|0)==0?0:32)|((c[e+8>>2]|0)==0?3:11)|((c[b+24>>2]|0)>(f|0)?4:0);c[i+8>>2]=f;q=c[e>>2]|0;c[i>>2]=q;e=c[e+4>>2]|0;c[i+4>>2]=e;c[v+12>>2]=i;e=eq(b,v,q,e)|0;a:do if(!e){n=v+48|0;o=v+52|0;p=u+64|0;q=b+235|0;b:while(1){e=gq(b,v)|0;switch(e|0){case 0:break b;case 100:break;default:break a}m=c[n>>2]|0;f=c[o>>2]|0;e=c[u>>2]|0;c:do if(!e){e=nb(f+11|0)|0;c[u>>2]=e;c[p>>2]=f;if(!e)e=7;else{ew(e|0,m|0,f|0)|0;j=e+f|0;k=j+10|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(k|0));e=0}}else{l=0;j=m;i=u;while(1){k=u+64+(l<<2)|0;e=mr(d[q>>0]|0,j,f,e,c[k>>2]|0,r,s)|0;f=(j|0)==(m|0)|(j|0)==0;if(e|0){t=10;break}do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{f=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);e=c[i>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[i>>2]=0;j=c[r>>2]|0;f=c[s>>2]|0;if((l|0)==15){t=23;break}l=l+1|0;if(l>>>0>=16){e=0;break c}i=u+(l<<2)|0;e=c[i>>2]|0;if(!e){t=8;break}}if((t|0)==8){t=0;c[i>>2]=j;c[u+64+(l<<2)>>2]=f;e=0;break}else if((t|0)==10){t=0;do if(!f)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{m=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);break}else if((t|0)==23){t=0;c[i>>2]=j;c[k>>2]=f;e=0;break}}while(0);if(e|0)break a}l=0;f=0;j=0;d:while(1){i=u+(l<<2)|0;k=c[i>>2]|0;do if(!k)e=j;else{if(!j){f=c[u+64+(l<<2)>>2]|0;c[i>>2]=0;e=k;break}e=mr(d[q>>0]|0,k,c[u+64+(l<<2)>>2]|0,j,f,s,r)|0;f=(c[7324]|0)==0;if(e|0)break d;if(f)ab[c[29344>>2]&127](k);else{b=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{b=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}c[i>>2]=0;f=c[r>>2]|0;e=c[s>>2]|0}while(0);l=l+1|0;if(l>>>0>=16){t=45;break}else j=e}if((t|0)==45){c[u>>2]=e;c[p>>2]=f;c[h>>2]=e;c[g>>2]=f;u=0;br(v);c[w>>2]=0;Ra=x;return u|0}if(f)ab[c[29344>>2]&127](j);else{t=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}}while(0);f=0;do{i=c[u+(f<<2)>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{t=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);f=f+1|0}while((f|0)!=16);br(v);c[w>>2]=0;Ra=x;return e|0}function kr(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,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,M=0,N=0;M=Ra;Ra=Ra+16|0;F=M+8|0;G=M+4|0;H=M;do if(!g){i=c[e>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{K=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[e>>2]=0;c[e+4>>2]=0;j=0;i=e+44|0}else{i=e+44|0;j=c[i>>2]|0;if((j|0)<0){c[e>>2]=g;c[e+4>>2]=h;j=0;break}l=c[e>>2]|0;if(!l)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);j=0;break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);j=0;break}K=e+4|0;k=c[K>>2]|0;if((j|0)<(f|0)){D=f-j|0;m=k;J=l;l=g}else{D=j-f|0;m=h;J=g;h=k}E=l;p=a[b+235>>0]|0;A=J+m|0;B=l+h|0;c[F>>2]=J;c[G>>2]=l;C=p<<24>>24!=0;if(C){j=Sv(h|0,((h|0)<0)<<31>>31|0,10,0)|0;j=pb(j,L()|0)|0;if(!j){j=7;k=E}else{g=j;k=j;I=19}}else{g=l;k=E;I=19}do if((I|0)==19){c[H>>2]=g;if((m|0)>0){g=a[J>>0]|0;j=g&255;do if(!(j&128)){b=1;j=g&255;g=0}else{z=d[J+1>>0]|0;j=z<<7|j&127;if(!(z&128)){b=2;g=0;break}z=d[J+2>>0]|0;j=z<<14|j&16383;if(!(z&128)){b=3;g=0;break}z=d[J+3>>0]|0;j=z<<21|j&2097151;if(!(z&128)){b=4;g=0;break}g=28;b=J+4|0;j=j&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;j=Sv(y|0,L()|0,j|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-J|0;g=m}while(0);o=J+b|0;n=g}else{o=0;j=0;n=0}c[F>>2]=o;if((h|0)>0){g=a[l>>0]|0;h=g&255;do if(!(h&128)){b=1;h=g&255;m=0}else{z=d[l+1>>0]|0;h=z<<7|h&127;if(!(z&128)){b=2;m=0;break}z=d[l+2>>0]|0;h=z<<14|h&16383;if(!(z&128)){b=3;m=0;break}z=d[l+3>>0]|0;h=z<<21|h&2097151;if(!(z&128)){b=4;m=0;break}g=28;b=l+4|0;h=h&268435455;m=0;do{z=b;b=b+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,g|0)|0;h=Sv(y|0,L()|0,h|0,m|0)|0;m=L()|0;g=g+7|0}while(g>>>0<64&((z&128|0)!=0|0!=0));b=b-E|0}while(0);g=l+b|0;c[G>>2]=g;if((o|0)!=0&(g|0)!=0){y=C?-1:1;z=C?-1:0;x=p<<24>>24==0;w=0;s=n;v=0;u=0;t=g;r=o;a:while(1){q=Tv(j|0,s|0,h|0,m|0)|0;q=Yv(q|0,L()|0,y|0,z|0)|0;g=L()|0;do if(!((q|0)==0&(g|0)==0))if((g|0)<0){n=r;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[F>>2]=q;if(q>>>0>=A>>>0){I=85;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{r=d[n+2>>0]|0;g=r<<7|g&127;if(!(r&128)){n=2;b=g;g=0;break}r=d[n+3>>0]|0;g=r<<14|g&16383;if(!(r&128)){n=3;b=g;g=0;break}r=d[n+4>>0]|0;b=r<<21|g&2097151;if(!(r&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{r=n;n=n+1|0;r=d[r>>0]|0;N=cw(r&127|0,0,o|0)|0;b=Sv(N|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((r&128|0)!=0|0!=0));n=n-p|0}while(0);p=q+n|0;c[F>>2]=p;o=Tv(0,0,b|0,g|0)|0;q=L()|0;j=Sv((x?b:o)|0,(x?g:q)|0,j|0,s|0)|0;q=w;o=t;n=L()|0;b=v;g=u;break}else{n=t;g=0;while(1){b=a[n>>0]|0;q=n+1|0;if(!(g<<24>>24|b))break;else{n=q;g=b&128}}p=q;c[G>>2]=q;if(q>>>0>=B>>>0){I=100;break a}b=a[q>>0]|0;g=b&255;do if(!(g&128)){n=1;b=b&255;g=0}else{N=d[n+2>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=g;g=0;break}N=d[n+3>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=g;g=0;break}N=d[n+4>>0]|0;b=N<<21|g&2097151;if(!(N&128)){n=4;g=0;break}o=28;n=n+5|0;b=b&268435455;g=0;do{N=n;n=n+1|0;N=d[N>>0]|0;t=cw(N&127|0,0,o|0)|0;b=Sv(t|0,L()|0,b|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((N&128|0)!=0|0!=0));n=n-p|0}while(0);o=q+n|0;c[G>>2]=o;p=Tv(0,0,b|0,g|0)|0;q=L()|0;h=Sv((x?b:p)|0,(x?g:q)|0,h|0,m|0)|0;q=w;p=r;n=s;m=L()|0;b=v;g=u;break}else{b=c[H>>2]|0;t=x|(w|0)==0;r=Tv(j|0,s|0,v|0,u|0)|0;N=L()|0;o=Tv(v|0,u|0,j|0,s|0)|0;q=L()|0;g=b;o=t?r:o;q=t?N:q;while(1){n=o&255;p=g+1|0;a[g>>0]=n|-128;o=bw(o|0,q|0,7)|0;q=L()|0;if((o|0)==0&(q|0)==0)break;else g=p}a[g>>0]=n&127;c[H>>2]=(c[H>>2]|0)+(p-b);if(!(or(H,D,0,1,F,G)|0)){c[H>>2]=b;q=w;t=v}else{q=1;t=j;u=s}p=c[F>>2]|0;if(p>>>0>>0){b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);r=p+n|0;c[F>>2]=r;w=Tv(0,0,g|0,b|0)|0;N=L()|0;j=Sv((x?g:w)|0,(x?b:N)|0,j|0,s|0)|0;s=L()|0}else{c[F>>2]=0;r=0}p=c[G>>2]|0;if(p>>>0>=B>>>0){I=67;break a}b=a[p>>0]|0;g=b&255;do if(!(g&128)){n=1;g=b&255;b=0}else{N=d[p+1>>0]|0;g=N<<7|g&127;if(!(N&128)){n=2;b=0;break}N=d[p+2>>0]|0;g=N<<14|g&16383;if(!(N&128)){n=3;b=0;break}N=d[p+3>>0]|0;g=N<<21|g&2097151;if(!(N&128)){n=4;b=0;break}n=28;o=p+4|0;g=g&268435455;b=0;do{N=o;o=o+1|0;N=d[N>>0]|0;w=cw(N&127|0,0,n|0)|0;g=Sv(w|0,L()|0,g|0,b|0)|0;b=L()|0;n=n+7|0}while(n>>>0<64&((N&128|0)!=0|0!=0));n=o-p|0}while(0);o=p+n|0;c[G>>2]=o;n=Tv(0,0,g|0,b|0)|0;p=L()|0;h=Sv((x?g:n)|0,(x?b:p)|0,h|0,m|0)|0;p=r;n=s;m=L()|0;b=t;g=u}while(0);if((o|0)!=0&(p|0)!=0){w=q;s=n;v=b;u=g;t=o;r=p}else break}if((I|0)==67)c[G>>2]=0;else if((I|0)==85)c[F>>2]=0;else if((I|0)==100)c[G>>2]=0;j=c[H>>2]|0}else j=k}else{c[G>>2]=0;j=k}h=j-k|0;if(C)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);j=0;break}else{j=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);j=0;break}else{j=0;k=E}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](J);else{N=Wa[c[29352>>2]&127](J)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](J)}c[e>>2]=k;c[K>>2]=h}while(0);if((c[i>>2]|0)>=(f|0)){Ra=M;return j|0}c[i>>2]=f;Ra=M;return j|0}function lr(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;f=l;h=l+8|0;i=d+144|0;k=c[i>>2]|0;c[h>>2]=k;g=k;if(!k){k=c[d+20>>2]|0;c[f>>2]=c[d+16>>2];c[f+4>>2]=k;f=Bb(52411,f)|0;if(!f){k=7;j=g;c[e>>2]=j;Ra=l;return k|0}d=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[i>>2]=f;if(!d)i=f;else{k=d;j=f;c[e>>2]=j;Ra=l;return k|0}}else i=g;k=i;do if(!(Vc(k,1)|0)){f=c[k+100>>2]|0;d=f+8|0;if(!(b[d>>1]&9216)){h=f;c[h>>2]=0;c[h+4>>2]=0;b[d>>1]=4;break}else{Pg(f,0,0);break}}while(0);if((Gc(k)|0)==100){if(i|0){f=c[k+120>>2]|0;if(!((f|0)!=0?(b[k+144>>1]|0)!=0:0)){f=c[k>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}g=b[f+8>>1]&15;f=c[k>>2]|0;h=k+40|0;d=c[h>>2]|0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&d;c[h>>2]=f;if((g|16)<<16>>16==16){k=0;j=i;c[e>>2]=j;Ra=l;return k|0}else j=22}}else j=22;do if((j|0)==22?i|0:0){f=c[k>>2]|0;j=k+136|0;i=c[j+4>>2]|0;if((i|0)>0|(i|0)==0&(c[j>>2]|0)>>>0>0)hc(f,k);d=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;k=k+64|0;c[k>>2]=0;c[k+4>>2]=0;if((d|0)==3082|(a[f+81>>0]|0)!=0){og(f);k=7;j=0;c[e>>2]=j;Ra=l;return k|0}else{f=c[f+68>>2]&d;if(!f)break;else d=0;c[e>>2]=d;Ra=l;return f|0}}while(0);k=267;j=0;c[e>>2]=j;Ra=l;return k|0}function mr(b,e,f,g,h,i,j){b=b|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,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0;C=Ra;Ra=Ra+16|0;y=C+8|0;z=C+4|0;A=C;w=e+f|0;x=g+h|0;c[y>>2]=e;c[z>>2]=g;c[i>>2]=0;c[j>>2]=0;l=Sv(f|0,((f|0)<0)<<31>>31|0,17,0)|0;l=Sv(l|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=pb(l,L()|0)|0;if(!l){B=7;Ra=C;return B|0}c[A>>2]=l;if((f|0)>0){k=a[e>>0]|0;f=k&255;do if(!(f&128)){m=1;f=k&255;k=0}else{v=d[e+1>>0]|0;f=v<<7|f&127;if(!(v&128)){m=2;k=0;break}v=d[e+2>>0]|0;f=v<<14|f&16383;if(!(v&128)){m=3;k=0;break}v=d[e+3>>0]|0;f=v<<21|f&2097151;if(!(v&128)){m=4;k=0;break}m=28;n=e+4|0;f=f&268435455;k=0;do{v=n;n=n+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,m|0)|0;f=Sv(u|0,L()|0,f|0,k|0)|0;k=L()|0;m=m+7|0}while(m>>>0<64&((v&128|0)!=0|0!=0));m=n-e|0}while(0);p=k;o=e+m|0}else{f=0;p=0;o=0}c[y>>2]=o;if((h|0)>0){m=a[g>>0]|0;k=m&255;do if(!(k&128)){n=1;k=m&255;m=0}else{v=d[g+1>>0]|0;k=v<<7|k&127;if(!(v&128)){n=2;m=0;break}v=d[g+2>>0]|0;k=v<<14|k&16383;if(!(v&128)){n=3;m=0;break}v=d[g+3>>0]|0;k=v<<21|k&2097151;if(!(v&128)){n=4;m=0;break}n=28;e=g+4|0;k=k&268435455;m=0;do{v=e;e=e+1|0;v=d[v>>0]|0;u=cw(v&127|0,0,n|0)|0;k=Sv(u|0,L()|0,k|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((v&128|0)!=0|0!=0));n=e-g|0}while(0);e=m;m=g+n|0}else{k=0;e=0;m=0}c[z>>2]=m;n=(o|0)!=0;m=(m|0)!=0;a:do if(n|m){t=(b|0)==0;u=t?1:-1;v=t?0:-1;g=0;s=f;r=p;q=e;b=n;p=m;n=0;m=0;b:while(1){o=Tv(s|0,r|0,k|0,q|0)|0;o=Yv(o|0,L()|0,u|0,v|0)|0;f=L()|0;do if(!((o|0)==0&(f|0)==0&(b&p))){g=t|(g|0)==0;if((f|0)<0&b|p^1){p=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,s|0,r|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[y>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[y>>2]=g;if(g>>>0>=w>>>0){c[y>>2]=0;o=s;f=r;e=k;h=q;n=s;m=r;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[y>>2]=g+n;e=Tv(0,0,m|0,f|0)|0;o=L()|0;o=Sv((t?m:e)|0,(t?f:o)|0,s|0,r|0)|0;f=L()|0;e=k;h=q;n=s;m=r;break}else{p=Tv(k|0,q|0,n|0,m|0)|0;b=L()|0;o=Tv(n|0,m|0,k|0,q|0)|0;n=L()|0;h=c[A>>2]|0;e=h;o=g?p:o;n=g?b:n;while(1){f=o&255;m=e+1|0;a[e>>0]=f|-128;o=bw(o|0,n|0,7)|0;n=L()|0;if((o|0)==0&(n|0)==0)break;else e=m}a[e>>0]=f&127;n=(c[A>>2]|0)+(m-h)|0;c[A>>2]=n;e=c[z>>2]|0;h=e;f=0;while(1){m=a[h>>0]|0;g=h+1|0;if(!(f<<24>>24|m))break;else{h=g;f=m&128}}o=g;b=o-e|0;ew(n|0,e|0,b|0)|0;c[A>>2]=n+b;c[z>>2]=g;if(g>>>0>=x>>>0){c[z>>2]=0;o=s;f=r;e=k;h=q;n=k;m=q;break}m=a[g>>0]|0;f=m&255;do if(!(f&128)){n=1;m=m&255;f=0}else{b=d[h+2>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=f;f=0;break}b=d[h+3>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=f;f=0;break}b=d[h+4>>0]|0;m=b<<21|f&2097151;if(!(b&128)){n=4;f=0;break}e=28;n=h+5|0;m=m&268435455;f=0;do{b=n;n=n+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,e|0)|0;m=Sv(p|0,L()|0,m|0,f|0)|0;f=L()|0;e=e+7|0}while(e>>>0<64&((b&128|0)!=0|0!=0));n=n-o|0}while(0);c[z>>2]=g+n;o=Tv(0,0,m|0,f|0)|0;e=L()|0;e=Sv((t?m:o)|0,(t?f:e)|0,k|0,q|0)|0;o=s;f=r;h=L()|0;n=k;m=q;break}}else{p=t|(g|0)==0;g=Tv(s|0,r|0,n|0,m|0)|0;b=L()|0;e=Tv(n|0,m|0,s|0,r|0)|0;o=L()|0;m=c[A>>2]|0;f=m;e=p?g:e;o=p?b:o;while(1){n=e&255;h=f+1|0;a[f>>0]=n|-128;e=bw(e|0,o|0,7)|0;o=L()|0;if((e|0)==0&(o|0)==0)break;else f=h}a[f>>0]=n&127;c[A>>2]=(c[A>>2]|0)+(h-m);f=nr(A,y,z)|0;if(f|0)break b;h=c[y>>2]|0;if(h>>>0>>0){m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[y>>2]=h+n;g=Tv(0,0,f|0,m|0)|0;o=L()|0;o=Sv((t?f:g)|0,(t?m:o)|0,s|0,r|0)|0;g=L()|0}else{c[y>>2]=0;o=s;g=r}h=c[z>>2]|0;if(h>>>0>=x>>>0){c[z>>2]=0;f=g;e=k;h=q;n=s;m=r;break}m=a[h>>0]|0;f=m&255;do if(!(f&128)){n=1;f=m&255;m=0}else{b=d[h+1>>0]|0;f=b<<7|f&127;if(!(b&128)){n=2;m=0;break}b=d[h+2>>0]|0;f=b<<14|f&16383;if(!(b&128)){n=3;m=0;break}b=d[h+3>>0]|0;f=b<<21|f&2097151;if(!(b&128)){n=4;m=0;break}n=28;e=h+4|0;f=f&268435455;m=0;do{b=e;e=e+1|0;b=d[b>>0]|0;p=cw(b&127|0,0,n|0)|0;f=Sv(p|0,L()|0,f|0,m|0)|0;m=L()|0;n=n+7|0}while(n>>>0<64&((b&128|0)!=0|0!=0));n=e-h|0}while(0);c[z>>2]=h+n;h=Tv(0,0,f|0,m|0)|0;e=L()|0;e=Sv((t?f:h)|0,(t?m:e)|0,k|0,q|0)|0;f=g;h=L()|0;n=s;m=r}while(0);b=(c[y>>2]|0)!=0;p=(c[z>>2]|0)!=0;if(!(b|p)){B=104;break a}else{g=1;s=o;r=f;k=e;q=h}}if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{z=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[A>>2]=0;l=0;k=0}else B=104;while(0);if((B|0)==104){k=c[A>>2]|0;f=k;B=f;a[B>>0]=0;a[B+1>>0]=0;a[B+2>>0]=0;a[B+3>>0]=0;f=f+4|0;a[f>>0]=0;a[f+1>>0]=0;a[f+2>>0]=0;a[f+3>>0]=0;f=0}c[i>>2]=l;c[j>>2]=k-l;B=f;Ra=C;return B|0}function nr(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;g=c[f>>2]|0;p=c[e>>2]|0;h=c[b>>2]|0;a:while(1){r=h;q=p;n=a[q>>0]|0;switch(n<<24>>24){case 0:{if(!(a[g>>0]|0)){i=123;break a}else i=2147483647;break}case 1:{j=a[q+1>>0]|0;i=j&255;if(i&128){y=d[q+2>>0]|0;i=y<<7|j&127;if(y&128){y=d[q+3>>0]|0;i=y<<14|i&16383;if(y&128){y=d[q+4>>0]|0;i=y<<21|i&2097151;if(y&128)i=(a[q+5>>0]&7)<<28|i&268435455}}}if(!i){g=267;i=124;break a}break}default:i=0}o=g;l=a[o>>0]|0;switch(l<<24>>24){case 1:{k=a[o+1>>0]|0;j=k&255;if(j&128){y=d[o+2>>0]|0;j=y<<7|k&127;if(y&128){y=d[o+3>>0]|0;j=y<<14|j&16383;if(y&128){y=d[o+4>>0]|0;j=y<<21|j&2097151;if(y&128)j=(a[o+5>>0]&7)<<28|j&268435455}}}if(!j){g=267;i=124;break a}else m=j;break}case 0:{m=2147483647;break}default:m=0}do if((i|0)!=(m|0))if((i|0)<(m|0)){if(!i){h=0;l=r;i=n}else{l=r+1|0;k=l;m=i;j=((i|0)<0)<<31>>31;while(1){h=m&255;i=k+1|0;a[k>>0]=h|-128;m=bw(m|0,j|0,7)|0;j=L()|0;if((m|0)==0&(j|0)==0)break;else k=i}a[k>>0]=h&127;i=i-l+1|0;a[r>>0]=1;h=i;l=r+i|0;i=a[q+i>>0]|0}j=q+h|0;k=j;i=i<<24>>24;if(!(i&254))h=k;else{h=j;do{h=h+1|0;y=i;i=a[h>>0]|0}while((i&254|y&128|0)!=0)}y=h-k|0;ew(l|0,j|0,y|0)|0;i=h;h=l+y|0;break}else{if(!m){g=0;k=r;h=l}else{k=r+1|0;j=k;l=m;i=((m|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;h=h-k+1|0;a[r>>0]=1;g=h;k=r+h|0;h=a[o+h>>0]|0}i=o+g|0;j=i;h=h<<24>>24;if(!(h&254))g=j;else{g=i;do{g=g+1|0;y=h;h=a[g>>0]|0}while((h&254|y&128|0)!=0)}h=g-j|0;ew(k|0,i|0,h|0)|0;i=p;h=k+h|0;break}else{if(!i){g=0;i=n}else{k=r+1|0;j=k;l=i;i=((i|0)<0)<<31>>31;while(1){g=l&255;h=j+1|0;a[j>>0]=g|-128;l=bw(l|0,i|0,7)|0;i=L()|0;if((l|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;i=h-k+1|0;a[r>>0]=1;g=i;h=r+i|0;i=a[q+i>>0]|0}m=q+g|0;l=m;q=o+g|0;p=q;g=i&255;do if(!(g&128)){j=1;o=i&255;n=0}else{y=d[m+1>>0]|0;g=y<<7|g&127;if(!(y&128)){j=2;o=g;n=0;break}y=d[m+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){j=3;o=g;n=0;break}y=d[m+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){j=4;o=g;n=0;break}i=28;j=m+4|0;g=g&268435455;k=0;do{y=j;j=j+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,i|0)|0;g=Sv(x|0,L()|0,g|0,k|0)|0;k=L()|0;i=i+7|0}while(i>>>0<64&((y&128|0)!=0|0!=0));j=j-l|0;o=g;n=k}while(0);i=m+j|0;j=a[q>>0]|0;g=j&255;do if(!(g&128)){k=1;j=j&255;l=0}else{y=d[q+1>>0]|0;g=y<<7|g&127;if(!(y&128)){k=2;j=g;l=0;break}y=d[q+2>>0]|0;g=y<<14|g&16383;if(!(y&128)){k=3;j=g;l=0;break}y=d[q+3>>0]|0;g=y<<21|g&2097151;if(!(y&128)){k=4;j=g;l=0;break}j=28;k=q+4|0;g=g&268435455;l=0;do{y=k;k=k+1|0;y=d[y>>0]|0;x=cw(y&127|0,0,j|0)|0;g=Sv(x|0,L()|0,g|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((y&128|0)!=0|0!=0));k=k-p|0;j=g}while(0);g=q+k|0;y=n;x=o;t=j;u=0;v=0;while(1){q=(y|0)<(l|0)|(y|0)==(l|0)&x>>>0>>0;r=q?x:t;s=q?y:l;p=h;m=Tv(r|0,s|0,u|0,v|0)|0;j=p;o=L()|0;while(1){k=m&255;n=j+1|0;a[j>>0]=k|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else j=n}a[j>>0]=k&127;w=p+(n-h)|0;h=w;u=Sv(r|0,s|0,-2,-1)|0;v=L()|0;do if((x|0)==(t|0)&(y|0)==(l|0)){n=i;k=a[n>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;i=0}else{t=d[n+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;i=0;break}t=d[n+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;i=0;break}t=d[n+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;i=0;break}k=28;l=n+4|0;j=j&268435455;m=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-i|0;i=m}while(0);m=Sv(x|0,y|0,-2,-1)|0;m=Sv(m|0,L()|0,j|0,i|0)|0;i=n+l|0;p=L()|0}else{m=2147483647;p=0}o=g;k=a[o>>0]|0;if((k&255)>1){j=k&255;do if(!(j&128)){l=1;j=k&255;g=0}else{t=d[o+1>>0]|0;j=t<<7|j&127;if(!(t&128)){l=2;g=0;break}t=d[o+2>>0]|0;j=t<<14|j&16383;if(!(t&128)){l=3;g=0;break}t=d[o+3>>0]|0;j=t<<21|j&2097151;if(!(t&128)){l=4;g=0;break}k=28;l=o+4|0;j=j&268435455;n=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;j=Sv(s|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));l=l-g|0;g=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+l|0;j=p;l=L()|0}else{j=p;k=2147483647;l=0}}else if(q){o=i;k=a[o>>0]|0;if((k&255)<=1){m=2147483647;j=0;k=t;break}j=k&255;do if(!(j&128)){m=1;j=k&255;i=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;i=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;i=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;i=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-i|0;i=n}while(0);k=Sv(x|0,y|0,-2,-1)|0;j=Sv(k|0,L()|0,j|0,i|0)|0;i=o+m|0;m=j;j=L()|0;k=t;break}else{o=g;k=a[o>>0]|0;if((k&255)<=1){m=x;j=y;k=2147483647;l=0;break}j=k&255;do if(!(j&128)){m=1;j=k&255;g=0}else{s=d[o+1>>0]|0;j=s<<7|j&127;if(!(s&128)){m=2;g=0;break}s=d[o+2>>0]|0;j=s<<14|j&16383;if(!(s&128)){m=3;g=0;break}s=d[o+3>>0]|0;j=s<<21|j&2097151;if(!(s&128)){m=4;g=0;break}k=28;m=o+4|0;j=j&268435455;n=0;do{s=m;m=m+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,n|0)|0;n=L()|0;k=k+7|0}while(k>>>0<64&((s&128|0)!=0|0!=0));m=m-g|0;g=n}while(0);k=Sv(t|0,l|0,-2,-1)|0;k=Sv(k|0,L()|0,j|0,g|0)|0;g=o+m|0;m=x;j=y;l=L()|0;break}while(0);if(!((m|0)!=2147483647|(j|0)!=0|((k|0)!=2147483647|(l|0)!=0))){h=w;break}else{y=j;x=m;t=k}}}while(0);p=i}if((i|0)==123){y=h;a[y>>0]=0;c[b>>2]=y+1;c[e>>2]=p+1;c[f>>2]=g+1;f=0;return f|0}else if((i|0)==124)return g|0;return 0}function or(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,z=0,A=0,B=0,C=0,D=0,E=0;j=c[b>>2]|0;k=c[h>>2]|0;n=c[i>>2]|0;m=k;if((a[m>>0]|0)==1){o=m+1|0;l=a[o>>0]|0;k=l&255;if(k&128){D=d[m+2>>0]|0;k=D<<7|l&127;if(D&128){D=d[m+3>>0]|0;k=D<<14|k&16383;if(D&128){D=d[m+4>>0]|0;k=D<<21|k&2097151;if(!(D&128))l=4;else{k=(a[m+5>>0]&7)<<28|k&268435455;l=5}}else l=3}else l=2}else l=1;p=k;k=o+l|0}else p=0;o=n;if((a[o>>0]|0)==1){n=o+1|0;m=a[n>>0]|0;l=m&255;if(l&128){D=d[o+2>>0]|0;l=D<<7|m&127;if(D&128){D=d[o+3>>0]|0;l=D<<14|l&16383;if(D&128){D=d[o+4>>0]|0;l=D<<21|l&2097151;if(!(D&128))m=4;else{l=(a[o+5>>0]&7)<<28|l&268435455;m=5}}else m=3}else m=2}else m=1;n=n+m|0}else l=0;C=((e|0)<0)<<31>>31;D=(f|0)==0;B=(f|0)!=0;A=(g|0)!=0;m=p;a:while(1){b:while(1){while(1){if((m|0)==(l|0))break b;if((m|0)<(l|0))break;l=a[n>>0]|0;o=l<<24>>24;if(o&254)do{n=n+1|0;l=a[n>>0]|0;z=o;o=l<<24>>24}while((o&254|z&128|0)!=0);if(!(l<<24>>24)){l=123;break a}p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){z=d[n+2>>0]|0;l=z<<7|o&127;if(z&128){z=d[n+3>>0]|0;l=z<<14|l&16383;if(z&128){z=d[n+4>>0]|0;l=z<<21|l&2097151;if(!(z&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}m=a[k>>0]|0;o=m<<24>>24;if(o&254)do{k=k+1|0;m=a[k>>0]|0;z=o;o=m<<24>>24}while((o&254|z&128|0)!=0);if(!(m<<24>>24)){l=124;break a}p=k+1|0;o=a[p>>0]|0;m=o&255;if(m&128){z=d[k+2>>0]|0;m=z<<7|o&127;if(z&128){z=d[k+3>>0]|0;m=z<<14|m&16383;if(z&128){z=d[k+4>>0]|0;m=z<<21|m&2097151;if(!(z&128))k=4;else{m=(a[k+5>>0]&7)<<28|m&268435455;k=5}}else k=3}else k=2}else k=1;k=p+k|0}t=j;if(m){a[t>>0]=1;o=t+1|0;p=m;m=((m|0)<0)<<31>>31;while(1){l=p&255;j=o+1|0;a[o>>0]=l|-128;p=bw(p|0,m|0,7)|0;m=L()|0;if((p|0)==0&(m|0)==0)break;else o=j}a[o>>0]=l&127}f=k;m=a[f>>0]|0;l=m&255;do if(!(l&128)){k=1;l=m&255;p=0}else{z=d[f+1>>0]|0;l=z<<7|l&127;if(!(z&128)){k=2;p=0;break}z=d[f+2>>0]|0;l=z<<14|l&16383;if(!(z&128)){k=3;p=0;break}z=d[f+3>>0]|0;l=z<<21|l&2097151;if(!(z&128)){k=4;p=0;break}m=28;o=f+4|0;l=l&268435455;p=0;do{z=o;o=o+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,m|0)|0;l=Sv(y|0,L()|0,l|0,p|0)|0;p=L()|0;m=m+7|0}while(m>>>0<64&((z&128|0)!=0|0!=0));k=o-k|0}while(0);k=f+k|0;r=Sv(l|0,p|0,-2,-1)|0;s=L()|0;q=n;o=a[q>>0]|0;m=o&255;do if(!(m&128)){n=1;g=0;m=o&255}else{z=d[q+1>>0]|0;m=z<<7|m&127;if(!(z&128)){n=2;g=0;break}z=d[q+2>>0]|0;m=z<<14|m&16383;if(!(z&128)){n=3;g=0;break}z=d[q+3>>0]|0;m=z<<21|m&2097151;if(!(z&128)){n=4;g=0;break}o=28;f=q+4|0;m=m&268435455;g=0;do{z=f;f=f+1|0;z=d[z>>0]|0;y=cw(z&127|0,0,o|0)|0;m=Sv(y|0,L()|0,m|0,g|0)|0;g=L()|0;o=o+7|0}while(o>>>0<64&((z&128|0)!=0|0!=0));n=f-n|0}while(0);n=q+n|0;if((p|0)<0|(p|0)==0&l>>>0<2|((g|0)<0|(g|0)==0&m>>>0<2)){l=120;break}l=Sv(m|0,g|0,-2,-1)|0;f=t;z=r;o=0;p=0;m=L()|0;c:while(1){w=k;u=Sv(z|0,s|0,e|0,C|0)|0;v=L()|0;x=l;y=m;l=p;while(1){if(!((x|0)==(u|0)&(y|0)==(v|0))?(y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0|(A|((y|0)<(s|0)|(y|0)==(s|0)&x>>>0<=z>>>0)):0){t=f;q=o;r=l}else{q=D?x:z;r=D?y:s;g=j;o=Tv(2,0,o|0,l|0)|0;o=Sv(o|0,L()|0,q|0,r|0)|0;l=g;p=L()|0;while(1){m=o&255;f=l+1|0;a[l>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else l=f}a[l>>0]=m&127;t=0;j=g+(f-j)|0}if(((y|0)>(s|0)|(y|0)==(s|0)&x>>>0>z>>>0)&(B|((y|0)>(v|0)|(y|0)==(v|0)&x>>>0>u>>>0)))break;g=n;m=a[g>>0]|0;if((m&255)<2)break c;l=m&255;do if(!(l&128)){n=1;l=m&255;m=0}else{f=d[g+1>>0]|0;l=f<<7|l&127;if(!(f&128)){n=2;m=0;break}f=d[g+2>>0]|0;l=f<<14|l&16383;if(!(f&128)){n=3;m=0;break}f=d[g+3>>0]|0;l=f<<21|l&2097151;if(!(f&128)){n=4;m=0;break}o=28;p=g+4|0;l=l&268435455;m=0;do{f=p;p=p+1|0;f=d[f>>0]|0;E=cw(f&127|0,0,o|0)|0;l=Sv(E|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((f&128|0)!=0|0!=0));n=p-n|0}while(0);o=Sv(x|0,y|0,-2,-1)|0;o=Sv(o|0,L()|0,l|0,m|0)|0;f=t;n=g+n|0;x=o;y=L()|0;o=q;l=r}m=a[k>>0]|0;if((m&255)<2)break;l=m&255;do if(!(l&128)){o=1;l=m&255;m=0}else{E=d[k+1>>0]|0;l=E<<7|l&127;if(!(E&128)){o=2;m=0;break}E=d[k+2>>0]|0;l=E<<14|l&16383;if(!(E&128)){o=3;m=0;break}E=d[k+3>>0]|0;l=E<<21|l&2097151;if(!(E&128)){o=4;m=0;break}o=28;p=k+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;v=cw(E&127|0,0,o|0)|0;l=Sv(v|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));o=p-w|0}while(0);p=Sv(z|0,s|0,-2,-1)|0;p=Sv(p|0,L()|0,l|0,m|0)|0;f=t;k=k+o|0;z=p;s=L()|0;o=q;p=r;l=x;m=y}j=(t|0)==0?j:t;l=a[k>>0]|0;m=l<<24>>24;if(!(m&254))o=l;else{do{k=k+1|0;l=a[k>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);o=l}l=a[n>>0]|0;m=l<<24>>24;if(m&254)do{n=n+1|0;l=a[n>>0]|0;E=m;m=l<<24>>24}while((m&254|E&128|0)!=0);if(!(o<<24>>24)){l=122;break}if(!(l<<24>>24)){l=121;break}o=k+1|0;l=a[o>>0]|0;m=l&255;if(m&128){E=d[k+2>>0]|0;l=E<<7|l&127;if(E&128){E=d[k+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[k+4>>0]|0;l=E<<21|l&2097151;if(!(E&128)){m=l;k=4}else{m=(a[k+5>>0]&7)<<28|l&268435455;k=5}}else{m=l;k=3}}else{m=l;k=2}}else k=1;k=o+k|0;p=n+1|0;o=a[p>>0]|0;l=o&255;if(l&128){E=d[n+2>>0]|0;l=E<<7|o&127;if(E&128){E=d[n+3>>0]|0;l=E<<14|l&16383;if(E&128){E=d[n+4>>0]|0;l=E<<21|l&2097151;if(!(E&128))n=4;else{l=(a[n+5>>0]&7)<<28|l&268435455;n=5}}else n=3}else n=2}else n=1;n=p+n|0}l=0;while(1){m=a[n>>0]|0;n=n+1|0;if(!(l<<24>>24|m))break;else l=m&128}l=0;while(1){m=a[k>>0]|0;k=k+1|0;if(!(l<<24>>24|m))break;else l=m&128}c[h>>2]=k;c[i>>2]=n;if((c[b>>2]|0)==(j|0)){E=0;return E|0}a[j>>0]=0;c[b>>2]=j+1;E=1;return E|0}function pr(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;C=Ra;Ra=Ra+16|0;z=C+4|0;A=C;B=c[b>>2]|0;a:do if(((e|0)!=0?(a[b+52>>0]|0)==(a[B+235>>0]|0):0)?((c[f+64>>2]|0)+-1|0)>>>0<4:0){v=f+64|0;h=c[v>>2]|0;if((h|0)>0){e=0;g=0;do{if(c[f+72+(e*24|0)+12>>2]|0){y=v;break a}b=c[f+72+(e*24|0)+20>>2]|0;if(b){if(!(c[b+36>>2]|0)){y=v;break a}}else b=0;g=(b|0)==0?g:1;e=e+1|0}while((e|0)<(h|0));if(g){u=c[f+68>>2]|0;u=(u|0)<(c[B+24>>2]|0)?u:-1;t=B+235|0;if((h|0)<=0){B=0;z=1;A=f+40|0;c[A>>2]=z;Ra=C;return B|0}q=0;b:while(1){r=c[f+72+(q*24|0)+20>>2]|0;if(r|0){e=c[f+72+(q*24|0)>>2]|0;g=c[f+72+(q*24|0)+4>>2]|0;h=c[r+4>>2]|0;s=(a[t>>0]|0)==0?157:158;b=eq(B,r,e,g)|0;if(b|0){e=1;k=74;break}do if((h|0)>0){j=c[r>>2]|0;i=0;while(1){b=c[j+(i<<2)>>2]|0;if(!(c[b+40>>2]|0)){k=23;break}o=c[b+60>>2]|0;p=Lu(c[b+64>>2]|0,e,(o|0)>(g|0)?g:o)|0;if(((p|0)==0?o-g|0:p)|0){k=23;break}x=i+1|0;if((x|0)<(h|0))i=x;else{k=22;break}}if((k|0)==22){w=r+8|0;c[w>>2]=x}else if((k|0)==23){b=r+8|0;c[b>>2]=i;if(!i)break;else w=b}p=0;k=j;while(1){o=c[k+(p<<2)>>2]|0;if((a[t>>0]|0)!=0?(c[o+56>>2]|0)!=0:0){a[z>>0]=0;m=o+88|0;n=m;c[n>>2]=0;c[n+4>>2]=0;n=o+84|0;c[n>>2]=0;kq(0,c[o+72>>2]|0,c[o+76>>2]|0,o+80|0,m,n,z)}else{l=o+72|0;j=o+40|0;m=o+52|0;b=c[m>>2]|0;c:do if(b|0){k=(c[l>>2]|0)+10|0;n=o+48|0;i=o+44|0;e=c[n>>2]|0;h=b;while(1){b=c[j>>2]|0;if((k-b|0)<=(e|0))break c;g=(c[i>>2]|0)-e|0;g=(g|0)<4096?g:4096;b=jd(h,b+e|0,g,e,81)|0;if(b|0){e=1;k=74;break b}b=(c[n>>2]|0)+g|0;c[n>>2]=b;b=(c[j>>2]|0)+b|0;e=b+20|0;do{a[b>>0]=0;b=b+1|0}while((b|0)<(e|0));e=c[n>>2]|0;h=c[m>>2]|0;if((e|0)==(c[i>>2]|0))break;if(!h)break c}d:do if(h|0){b=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(b|0){if(c[b+480>>2]|0){Xd(b,h);break d}e=h;if((c[b+304>>2]|0)>>>0>e>>>0)break;if((c[b+308>>2]|0)>>>0<=e>>>0)break;k=b+300|0;c[h>>2]=c[k>>2];c[k>>2]=h;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{k=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[m>>2]=0;c[n>>2]=0}while(0);j=c[l>>2]|0;i=o+88|0;b=a[j>>0]|0;e=b&255;do if(!(e&128)){n=i;c[n>>2]=b&255;c[n+4>>2]=0;b=1}else{n=d[j+1>>0]|0;b=n<<7|e&127;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=2;break}n=d[j+2>>0]|0;b=n<<14|b&16383;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=3;break}n=d[j+3>>0]|0;b=n<<21|b&2097151;if(!(n&128)){n=i;c[n>>2]=b;c[n+4>>2]=0;b=4;break}g=28;h=j+4|0;b=b&268435455;e=0;do{n=h;h=h+1|0;n=d[n>>0]|0;m=cw(n&127|0,0,g|0)|0;b=Sv(m|0,L()|0,b|0,e|0)|0;e=L()|0;g=g+7|0}while(g>>>0<64&((n&128|0)!=0|0!=0));n=i;c[n>>2]=b;c[n+4>>2]=e;b=h-j|0}while(0);c[o+80>>2]=j+b}b=p+1|0;k=c[r>>2]|0;if((b|0)>=(c[w>>2]|0))break;else p=b}if(p|0){g=p;do{h=g;g=g+-1|0;e:do if((h|0)<=(p|0)){b=g;j=c[k+(g<<2)>>2]|0;do{e=b;b=b+1|0;i=k+(b<<2)|0;if((Xa[s&255](j,c[i>>2]|0)|0)<0)break e;o=k+(e<<2)|0;n=c[i>>2]|0;j=c[o>>2]|0;c[i>>2]=j;c[o>>2]=n}while((b|0)<(p|0))}while(0)}while((h|0)>1)}}else c[r+8>>2]=0;while(0);c[r+24>>2]=u}q=q+1|0;if((q|0)>=(c[v>>2]|0)){b=0;e=1;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}}else y=v}else y=v}else k=4;while(0);if((k|0)==4)y=f+64|0;g=f+68|0;e=0;while(1){if((e|0)>=(c[y>>2]|0)){b=0;e=0;k=74;break}if(!(c[f+72+(e*24|0)+20>>2]|0))b=0;else{c[z>>2]=0;c[A>>2]=0;b=jr(B,f+72+(e*24|0)|0,c[g>>2]|0,z,A)|0;if(!b)b=kr(B,f,e,c[A>>2]|0,c[z>>2]|0)|0}if(!b)e=e+1|0;else{e=0;k=74;break}}if((k|0)==74){B=f+40|0;c[B>>2]=e;Ra=C;return b|0}return 0}function qr(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;F=Ra;Ra=Ra+112|0;B=F+108|0;x=F;y=F+104|0;z=F+100|0;A=F+96|0;if(c[e>>2]|0){Ra=F;return}h=b+52|0;q=a[h>>0]|0;a[d+33>>0]=1;switch(c[d>>2]|0){case 3:case 1:{n=c[d+12>>2]|0;m=c[d+16>>2]|0;if(a[n+34>>0]|0){qr(b,m,e);D=m+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[m+32>>0]|0;Ra=F;return}D=(a[m+34>>0]|0)==0;qr(b,n,e);if(!D){D=n+24|0;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=a[n+32>>0]|0;Ra=F;return}qr(b,m,e);o=n+32|0;a:do if(!(a[o>>0]|0)){l=m+32|0;h=q<<24>>24==0;g=h?1:-1;h=h?0:-1;f=n+24|0;i=m+24|0;while(1){j=a[l>>0]|0;if(j<<24>>24)break;if(c[e>>2]|0)break;k=f;D=i;D=Tv(c[k>>2]|0,c[k+4>>2]|0,c[D>>2]|0,c[D+4>>2]|0)|0;D=Yv(D|0,L()|0,g|0,h|0)|0;k=L()|0;if((D|0)==0&(k|0)==0)break;if((k|0)<0)qr(b,n,e);else qr(b,m,e);if(a[o>>0]|0){E=17;break a}}C=f;D=c[C+4>>2]|0;f=d+24|0;c[f>>2]=c[C>>2];c[f+4>>2]=D;f=j<<24>>24!=0&1}else{f=n+24|0;E=17}while(0);if((E|0)==17){D=f;E=c[D+4>>2]|0;f=d+24|0;c[f>>2]=c[D>>2];c[f+4>>2]=E;f=1}a[d+32>>0]=f;if(f<<24>>24==0|(c[d>>2]|0)!=1){Ra=F;return}f=c[m+20>>2]|0;b:do if(c[f>>2]|0?(r=m+32|0,(c[e>>2]|0)==0):0){g=f+28|0;f=f+32|0;do{if(a[r>>0]|0)break b;gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,m,e)}while(!(c[e>>2]|0))}while(0);f=c[n+20>>2]|0;if(!f){Ra=F;return}if(!(c[f>>2]|0)){Ra=F;return}if(c[e>>2]|0){Ra=F;return}g=f+28|0;f=f+32|0;while(1){if(a[o>>0]|0){E=120;break}gw(c[g>>2]|0,0,c[f>>2]|0)|0;qr(b,n,e);if(c[e>>2]|0){E=120;break}}if((E|0)==120){Ra=F;return}break}case 4:{h=c[d+12>>2]|0;i=c[d+16>>2]|0;m=q<<24>>24==0;l=m?1:-1;m=m?0:-1;k=h+24|0;g=k;j=i+24|0;f=j;f=Tv(c[g>>2]|0,c[g+4>>2]|0,c[f>>2]|0,c[f+4>>2]|0)|0;f=Yv(f|0,L()|0,l|0,m|0)|0;g=L()|0;n=i+32|0;o=h+32|0;do if((a[n>>0]|0)==0?(p=a[o>>0]|0,!((g|0)<0&p<<24>>24==0)):0)if((g|0)>0|(g|0)==0&f>>>0>0|p<<24>>24!=0){qr(b,i,e);break}else{qr(b,h,e);qr(b,i,e);break}else E=33;while(0);if((E|0)==33)qr(b,h,e);if(!(a[o>>0]|0))f=0;else f=(a[n>>0]|0)!=0&1;a[d+32>>0]=f;i=j;h=c[i>>2]|0;i=c[i+4>>2]|0;g=k;f=c[g>>2]|0;g=c[g+4>>2]|0;if((a[n>>0]|0)==0?(e=Tv(f|0,g|0,h|0,i|0)|0,Yv(e|0,L()|0,l|0,m|0)|0,e=L()|0,!((a[o>>0]|0)==0&(e|0)<0)):0){d=d+24|0;c[d>>2]=h;c[d+4>>2]=i;Ra=F;return}d=d+24|0;c[d>>2]=f;c[d+4>>2]=g;Ra=F;return}case 2:{g=c[d+12>>2]|0;k=c[d+16>>2]|0;if(!(a[k+33>>0]|0))qr(b,k,e);qr(b,g,e);l=g+32|0;f=a[l>>0]|0;if(!(f<<24>>24)){j=k+32|0;i=q<<24>>24==0;h=i?1:-1;i=i?0:-1;g=g+24|0;if(!(c[e>>2]|0)){f=k+24|0;do{if(a[j>>0]|0)break;D=g;E=f;E=Tv(c[D>>2]|0,c[D+4>>2]|0,c[E>>2]|0,c[E+4>>2]|0)|0;E=Yv(E|0,L()|0,h|0,i|0)|0;D=L()|0;if(!((D|0)>0|(D|0)==0&E>>>0>0))break;qr(b,k,e)}while(!(c[e>>2]|0));f=a[l>>0]|0}else f=0}else g=g+24|0;D=g;E=c[D+4>>2]|0;e=d+24|0;c[e>>2]=c[D>>2];c[e+4>>2]=E;a[d+32>>0]=f;Ra=F;return}default:{D=c[d+20>>2]|0;u=D+24|0;w=D+28|0;do if(c[u>>2]|0?(f=c[w>>2]|0,f|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{C=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[w>>2]=0;v=D+32|0;c[v>>2]=0;c[u>>2]=0;C=d+32|0;t=c[b>>2]|0;do if(!(c[D+40>>2]|0)){E=a[t+235>>0]|0;f=E&255;if((a[h>>0]|0)!=E<<24>>24?(g=c[D+4>>2]|0,g|0):0){E=D+8|0;kq(f,c[D>>2]|0,g,E,D+16|0,v,C);c[w>>2]=c[E>>2];f=0;break}sr(t,D,C);f=0}else{a[B>>0]=0;s=D+64|0;do if((c[s>>2]|0)==1){f=tr(t,c[D+92>>2]|0,D+16|0,w,v)|0;if(!(c[w>>2]|0)){a[B>>0]=1;g=1;E=113}else{g=0;E=113}}else{h=a[h>>0]|0;f=x;g=f+96|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));r=D+44|0;b=D+16|0;q=h<<24>>24==0;p=q?1:-1;q=q?0:-1;f=0;while(1){c:do if(!f){g=c[s>>2]|0;if((g|0)>0){k=0;l=0;i=0;j=0;while(1){g=x+(l*24|0)|0;do if((c[r>>2]|0)!=(l|0)){f=c[D+72+(l*24|0)+20>>2]|0;if(!f){c[g>>2]=1;f=0;break}E=x+(l*24|0)+16|0;f=tr(t,f,x+(l*24|0)+8|0,E,x+(l*24|0)+20|0)|0;if(!(c[E>>2]|0))a[B>>0]=1}else{sr(t,D,B);c[x+(l*24|0)+16>>2]=c[w>>2];c[x+(l*24|0)+20>>2]=c[v>>2];o=b;E=c[o+4>>2]|0;f=x+(l*24|0)+8|0;c[f>>2]=c[o>>2];c[f+4>>2]=E;f=0}while(0);do if(!(c[g>>2]|0)){h=x+(l*24|0)+8|0;g=c[h>>2]|0;h=c[h+4>>2]|0;if(k|0?(E=Tv(i|0,j|0,g|0,h|0)|0,Yv(E|0,L()|0,p|0,q|0)|0,(L()|0)>=0):0)break;k=1;i=g;j=h}while(0);if(f|0)break;l=l+1|0;g=a[B>>0]|0;h=c[s>>2]|0;if(!(g<<24>>24==0&(l|0)<(h|0))){f=0;E=81;break c}}g=a[B>>0]|0;E=80}else{f=0;i=0;j=0}}else{g=0;i=0;j=0;E=80}while(0);if((E|0)==80){h=c[s>>2]|0;E=81}if((E|0)==81){E=0;if((h|0)>0){m=0;k=g;o=g;l=g;while(1){if(k<<24>>24==0&(f|0)==0){g=o;while(1){f=x+(m*24|0)|0;if(c[f>>2]|0){h=m;f=0;m=l;k=0;break}k=x+(m*24|0)+8|0;o=k;o=Tv(c[o>>2]|0,c[o+4>>2]|0,i|0,j|0)|0;Yv(o|0,L()|0,p|0,q|0)|0;if((L()|0)>=0){h=m;f=0;m=l;k=0;break}do if((c[r>>2]|0)==(m|0)){sr(t,D,B);c[x+(m*24|0)+16>>2]=c[w>>2];c[x+(m*24|0)+20>>2]=c[v>>2];l=b;f=c[l+4>>2]|0;g=k;c[g>>2]=c[l>>2];c[g+4>>2]=f;g=a[B>>0]|0;f=0;l=g}else{h=c[D+72+(m*24|0)+20>>2]|0;if(!h){c[f>>2]=1;f=0;break}o=x+(m*24|0)+16|0;f=tr(t,h,k,o,x+(m*24|0)+20|0)|0;if(c[o>>2]|0)break;a[B>>0]=1;l=1;g=1}while(0);o=k;k=c[o>>2]|0;o=c[o+4>>2]|0;n=Tv(k|0,o|0,i|0,j|0)|0;n=Yv(n|0,L()|0,p|0,q|0)|0;h=L()|0;n=(h|0)>0|(h|0)==0&n>>>0>0;h=n?0:m;i=n?k:i;j=n?o:j;if(l<<24>>24==0&(f|0)==0){m=h;l=0}else{m=l;k=l;break}}n=h;h=c[s>>2]|0;l=m}else{n=m;g=o}m=n+1|0;if((m|0)>=(h|0))break;else o=g}}if(!(g<<24>>24))g=h;else break}g=c[x+((g+-1|0)*24|0)+20>>2]|0;n=nb(g+8|0)|0;if(!n){E=112;break}ew(n|0,c[x+(((c[s>>2]|0)+-1|0)*24|0)+16>>2]|0,g+1|0)|0;g=n+g|0;o=g;a[o>>0]=0;a[o+1>>0]=0;a[o+2>>0]=0;a[o+3>>0]=0;g=g+4|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;g=c[s>>2]|0;d:do if((g|0)>1){l=n;k=0;h=0;m=g+-1|0;while(1){if(!(c[x+(h*24|0)>>2]|0)){c[y>>2]=c[x+(h*24|0)+16>>2];c[z>>2]=n;c[A>>2]=n;o=(or(A,m-h|0,0,1,y,z)|0)==0;if(o)break;k=(c[A>>2]|0)-l|0;g=c[s>>2]|0}h=h+1|0;m=g+-1|0;if((m|0)<=(h|0))break d}g=c[s>>2]|0}else{k=0;h=0}while(0);if((h|0)==(g+-1|0)){E=110;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{o=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}}if((E|0)==110){g=b;c[g>>2]=i;c[g+4>>2]=j;c[w>>2]=n;c[v>>2]=k;c[u>>2]=1;g=0}else if((E|0)==112){f=7;break}E=113}while(0);if((E|0)==113)a[C>>0]=g}while(0);c[e>>2]=f;E=D+16|0;e=c[E+4>>2]|0;d=d+24|0;c[d>>2]=c[E>>2];c[d+4>>2]=e;Ra=F;return}}}function rr(d,f){d=d|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;I=Ra;Ra=Ra+32|0;y=I+24|0;F=I+20|0;z=I+16|0;A=I+12|0;B=I+8|0;C=I+4|0;H=I;g=c[f>>2]|0;c[H>>2]=g;if(g|0){f=0;H=g;H=(H|0)==0;H=f&H;H=H&1;Ra=I;return H|0}G=d+28|0;if(c[G>>2]|0?(x=ur(0,d)|0,c[H>>2]=x,(x|0)==0):0){c[F>>2]=0;a:do if(c[G>>2]|0){g=c[d>>2]|0;t=c[g+36>>2]|0;h=c[t>>2]|0;u=d+12|0;v=Oc(c[u>>2]|0,0)|0;w=L()|0;x=g+24|0;i=c[x>>2]|0;if((i|0)>0){q=g+32|0;r=d+20|0;s=h+20|0;p=h+16|0;n=0;h=i;while(1){if(!(a[(c[q>>2]|0)+n>>0]|0)){j=c[u>>2]|0;o=n+1|0;i=(j|0)==0;do if(i)g=29576;else{g=c[j+120>>2]|0;if(g|0?o>>>0<(e[j+144>>1]|0)>>>0:0){g=g+(o*40|0)|0;break}g=c[j>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);h=b[g+8>>1]|0;if((h&514)==514?(a[g+10>>0]|0)==1:0)k=c[g+16>>2]|0;else if(!(h&1))k=Gg(g,1)|0;else k=0;if(!i){h=c[j>>2]|0;i=j+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}h=c[r>>2]|0;i=c[t>>2]|0;c[y>>2]=0;g=Za[c[i+12>>2]&127](t,k,-1,y)|0;do if(!g){c[c[y>>2]>>2]=t;if((c[i>>2]|0)>0?(D=Xa[c[i+24>>2]&255](c[y>>2]|0,h)|0,D|0):0){Wa[c[i+16>>2]&127](c[y>>2]|0)|0;c[y>>2]=0;g=D;h=0;E=29;break}h=c[y>>2]|0;c[F>>2]=0;m=h;do{c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;c[C>>2]=0;g=$a[c[s>>2]&127](m,y,z,A,B,C)|0;c[F>>2]=g;i=c[G>>2]|0;if((g|0)==0&(i|0)!=0){g=0;do{l=c[i>>2]|0;k=c[i+4>>2]|0;do if((k|0)==(n|0)?1:(k|0)>=(c[x>>2]|0)){j=c[C>>2]|0;if(!((c[l+12>>2]|0)==0|(j|0)==0)){j=0;break}k=c[l+4>>2]|0;J=c[z>>2]|0;if((k|0)!=(J|0)?!((k|0)<(J|0)&(c[l+8>>2]|0)!=0):0){j=0;break}if(Lu(c[y>>2]|0,c[l>>2]|0,k)|0){j=0;break}wr(i+12|0,v,w,n,0,j,((j|0)<0)<<31>>31,F)|0;j=c[F>>2]|0;g=j}else j=0;while(0);i=c[i+8>>2]|0}while((j|0)==0&(i|0)!=0)}}while(!(g|0))}else{h=c[y>>2]|0;E=29}while(0);if((E|0)==29){E=0;c[F>>2]=g}if(h|0)Wa[c[p>>2]&127](h)|0;if((g|0)!=101)break a;c[F>>2]=0;g=o;h=c[x>>2]|0}else g=n+1|0;if((g|0)<(h|0))n=g;else break}}g=c[G>>2]|0;if(g){i=g;g=0;do{h=i+12|0;if(!(c[h>>2]|0))h=0;else{g=xr(h,0,0)|0;c[F>>2]=g;h=g}i=c[i+8>>2]|0}while((h|0)==0&(i|0)!=0)}else g=0}else g=0;while(0);c[H>>2]=g}j=(vr(d,c[d+16>>2]|0,H)|0)==0;g=c[G>>2]|0;if(g|0)do{h=g+12|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{J=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;g=c[g+8>>2]|0}while((g|0)!=0);J=c[H>>2]|0;c[f>>2]=J;H=j;J=(J|0)==0;J=H&J;J=J&1;Ra=I;return J|0}function sr(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;k=c[e>>2]|0;n=k+(c[e+4>>2]|0)|0;o=e+8|0;l=c[o>>2]|0;m=(l|0)==0;l=m?k:l;k=l;if(l>>>0>=n>>>0){o=1;a[f>>0]=o;return}h=a[l>>0]|0;g=h&255;do if(!(g&128)){i=1;g=h&255;h=0}else{j=d[l+1>>0]|0;g=j<<7|g&127;if(!(j&128)){i=2;h=0;break}j=d[l+2>>0]|0;g=j<<14|g&16383;if(!(j&128)){i=3;h=0;break}j=d[l+3>>0]|0;g=j<<21|g&2097151;if(!(j&128)){i=4;h=0;break}i=28;j=l+4|0;g=g&268435455;h=0;do{p=j;j=j+1|0;p=d[p>>0]|0;q=cw(p&127|0,0,i|0)|0;g=Sv(q|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((p&128|0)!=0|0!=0));i=j-k|0}while(0);q=l+i|0;j=q;b=m|(a[b+235>>0]|0)==0;m=e+16|0;k=m;i=c[k>>2]|0;k=c[k+4>>2]|0;l=Tv(0,0,g|0,h|0)|0;p=L()|0;p=Sv(i|0,k|0,(b?g:l)|0,(b?h:p)|0)|0;h=L()|0;g=m;c[g>>2]=p;c[g+4>>2]=h;c[e+28>>2]=j;g=q;h=0;while(1){i=a[g>>0]|0;g=g+1|0;if(!(h<<24>>24|i))break;else h=i&128}c[e+32>>2]=g-j;a:do if(g>>>0>>0)do{if(a[g>>0]|0)break a;g=g+1|0}while(g>>>0>>0);while(0);c[o>>2]=g;q=0;a[f>>0]=q;return}function tr(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,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0;D=Ra;Ra=Ra+16|0;y=D+4|0;z=D;A=c[e+8>>2]|0;B=c[e>>2]|0;t=(a[b+235>>0]|0)==0?157:158;if(!A){c[g>>2]=0;C=0;Ra=D;return C|0}i=c[B>>2]|0;a:do if(c[i+80>>2]|0){u=(A|0)>1;v=A+-1|0;w=e+24|0;x=e+20|0;s=e+16|0;while(1){r=i+88|0;q=c[r>>2]|0;r=c[r+4>>2]|0;i=jq(b,i,y,z)|0;k=(i|0)==0;b:do if(k&u){j=1;while(1){i=c[B+(j<<2)>>2]|0;if(!(c[i+80>>2]|0)){i=j;break b}p=i+88|0;if(!((c[p>>2]|0)==(q|0)?(c[p+4>>2]|0)==(r|0):0)){i=j;break b}i=jq(b,i,0,0)|0;j=j+1|0;k=(i|0)==0;if(!(k&(j|0)<(A|0))){C=11;break}}}else{j=1;C=11}while(0);if((C|0)==11){C=0;if(k)i=j;else{C=45;break}}o=c[e>>2]|0;i=i+(((i|0)==(A|0))<<31>>31)|0;if((i|0)>0)do{l=i;i=i+-1|0;c:do if((l|0)<(A|0)){j=i;n=c[o+(i<<2)>>2]|0;do{k=j;j=j+1|0;m=o+(j<<2)|0;if((Xa[t&255](n,c[m>>2]|0)|0)<0)break c;p=o+(k<<2)|0;k=c[m>>2]|0;n=c[p>>2]|0;c[m>>2]=n;c[p>>2]=k}while((j|0)<(v|0))}while(0)}while((l|0)>1);i=c[z>>2]|0;if((i|0)>0?c[(c[B>>2]|0)+56>>2]|0:0){l=c[y>>2]|0;m=i+1|0;if((c[x>>2]|0)>(i|0))j=c[s>>2]|0;else{j=m<<1;c[x>>2]=j;k=c[s>>2]|0;if(mb()|0){i=7;C=45;break}j=sb(k,(j|0)>0?j:0,0)|0;if(!j){i=7;C=45;break}c[s>>2]=j}ew(j|0,l|0,m|0)|0;c[y>>2]=c[s>>2]}o=c[w>>2]|0;if((o|0)>-1){k=c[y>>2]|0;p=k+i|0;j=k;n=i;m=0;while(1){d:do if(j>>>0

      >>0){l=0;i=j;while(1){j=a[i>>0]|0;if(!(j&254|l)){l=i;break d}i=i+1|0;if(i>>>0

      >>0)l=j&128;else{l=i;break}}}else l=j;while(0);i=l-k|0;if((m|0)==(o|0))break;n=n-i|0;if(!n){k=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;if(i&128){m=d[l+2>>0]|0;i=m<<7|j&127;if(m&128){m=d[l+3>>0]|0;i=m<<14|i&16383;if(m&128){m=d[l+4>>0]|0;i=m<<21|i&2097151;if(!(m&128))j=4;else{i=(a[l+5>>0]&7)<<28|i&268435455;j=5}}else j=3}else j=2}else j=1;j=k+j|0;k=l;m=i}j=k+i|0;if((j|0)!=(p|0))gw(j|0,0,p-j|0)|0;c[y>>2]=k;c[z>>2]=i}if((i|0)>0){C=46;break}if(!(c[(c[c[e>>2]>>2]|0)+80>>2]|0))break a;i=c[B>>2]|0}if((C|0)==45){C=i;Ra=D;return C|0}else if((C|0)==46){c[g>>2]=c[y>>2];C=f;c[C>>2]=q;c[C+4>>2]=r;c[h>>2]=i;C=0;Ra=D;return C|0}}while(0);c[g>>2]=0;C=0;Ra=D;return C|0}function ur(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=Ra;Ra=Ra+16|0;i=m;k=e+7|0;if(!(a[k>>0]|0)){d=0;Ra=m;return d|0}l=e+12|0;f=c[l>>2]|0;do if(!f){h=c[e>>2]|0;g=h+216|0;f=c[g>>2]|0;if(!f){c[i>>2]=c[h+220>>2];f=Bb(54912,i)|0;if(!f){h=7;break}h=qd(c[h+12>>2]|0,f,-1,129,0,l,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(h|0)break;f=c[l>>2]|0}else{c[l>>2]=f;c[g>>2]=0}a[e+8>>0]=1;j=13}else j=13;while(0);a:do if((j|0)==13){i=e+32|0;h=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(f,1)|0)){f=c[f+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=h;c[j+4>>2]=i;b[g>>1]=4;break}else{Pg(f,h,i);break}}while(0);a[k>>0]=0;if((Gc(c[l>>2]|0)|0)==100){d=0;Ra=m;return d|0}f=c[l>>2]|0;do if(f|0){g=c[f>>2]|0;l=f+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(g,f);h=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;l=f+64|0;c[l>>2]=0;c[l+4>>2]=0;if(!((h|0)==3082|(a[g+81>>0]|0)!=0)){f=c[g+68>>2]&h;if(!f)break;else{h=f;break a}}else{og(g);h=7;break a}}while(0);if(!(c[(c[e>>2]|0)+40>>2]|0)){a[e+6>>0]=1;h=267;break}else{d=0;Ra=m;return d|0}}while(0);if(!((d|0)!=0&(h|0)!=0)){d=h;Ra=m;return d|0}c[d+20>>2]=h;g=c[d>>2]|0;if(!(b[g+8>>1]&1)){d=h;Ra=m;return d|0}switch(h|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=h&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0;d=h;Ra=m;return d|0}function vr(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;u=Ra;Ra=Ra+16|0;s=u+8|0;t=u+4|0;p=u;if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}switch(c[d>>2]|0){case 3:case 1:{k=d+12|0;do if(vr(b,c[k>>2]|0,e)|0?(l=d+16|0,vr(b,c[l>>2]|0,e)|0):0){if(c[e>>2]|0){t=1;t=t&1;Ra=u;return t|0}if((c[d>>2]|0)!=1){t=1;t=t&1;Ra=u;return t|0}r=c[d+8>>2]|0;if(r|0?(c[r>>2]|0)==1:0){t=1;t=t&1;Ra=u;return t|0}f=c[k>>2]|0;if(!f){f=d;h=0;g=0}else{h=d;j=0;g=0;while(1){h=c[(c[(c[h+16>>2]|0)+20>>2]|0)+32>>2]|0;h=Sv(j|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;i=c[f+12>>2]|0;if(!i)break;else{r=f;j=h;f=i;h=r}}}i=f+20|0;r=c[(c[i>>2]|0)+32>>2]|0;h=Sv(h|0,g|0,r|0,((r|0)<0)<<31>>31|0)|0;h=cw(h|0,L()|0,1)|0;h=pb(h,L()|0)|0;if(!h){c[e>>2]=7;break}g=c[i>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[f+8>>2]|0;a:do if(!g)f=1;else{f=1;do{if((c[g>>2]|0)!=1)break a;f=yr(c[g+4>>2]|0,h,s,t,c[(c[g+16>>2]|0)+20>>2]|0)|0;g=c[g+8>>2]|0}while((f|0)!=0&(g|0)!=0)}while(0);g=c[(c[l>>2]|0)+20>>2]|0;c[s>>2]=c[g+28>>2];c[t>>2]=c[g+64>>2];g=c[k>>2]|0;if((f|0)!=0&(g|0)!=0)do{if((c[g>>2]|0)==1)f=c[g+16>>2]|0;else f=g;f=yr(c[(c[g+8>>2]|0)+4>>2]|0,h,s,t,c[f+20>>2]|0)|0;g=c[g+12>>2]|0}while((f|0)!=0&(g|0)!=0);if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{t=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}if(f|0){t=1;t=t&1;Ra=u;return t|0}}while(0);if((c[d>>2]|0)!=1){t=0;t=t&1;Ra=u;return t|0}t=c[d+8>>2]|0;if(t|0?(c[t>>2]|0)==1:0){t=0;t=t&1;Ra=u;return t|0}g=c[d+20>>2]|0;i=b+32|0;if(!g){h=d;while(1){d=c[h+16>>2]|0;s=d+24|0;t=i;if((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0){f=c[d+20>>2]|0;g=f+24|0;d=f+28|0;do if(c[g>>2]|0?(n=c[d>>2]|0,n|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{t=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);c[d>>2]=0;c[f+32>>2]=0;c[g>>2]=0}d=c[h+12>>2]|0;g=c[d+20>>2]|0;if(!g)h=d;else break}}s=d+24|0;t=i;if(!((c[s>>2]|0)==(c[t>>2]|0)?(c[s+4>>2]|0)==(c[t+4>>2]|0):0)){t=0;t=t&1;Ra=u;return t|0}f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(o=c[d>>2]|0,o|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{t=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0;t=0;t=t&1;Ra=u;return t|0}case 4:{t=vr(b,c[d+12>>2]|0,e)|0;t=(vr(b,c[d+16>>2]|0,e)|0|t|0)!=0;t=t&1;Ra=u;return t|0}case 2:{if(!(vr(b,c[d+12>>2]|0,e)|0)){t=0;t=t&1;Ra=u;return t|0}t=(vr(b,c[d+16>>2]|0,e)|0)==0;t=t&1;Ra=u;return t|0}default:{do if(c[b+28>>2]|0){q=d+24|0;n=q;r=b+32|0;o=r;f=a[d+34>>0]|0;if((c[n>>2]|0)==(c[o>>2]|0)?(c[n+4>>2]|0)==(c[o+4>>2]|0):0){d=c[d+20>>2]|0;if(!(f<<24>>24))g=d;else{g=d;m=55}}else{if(!(f<<24>>24))break;g=c[d+20>>2]|0;m=55}if((m|0)==55){f=g+24|0;d=g+28|0;do if(c[f>>2]|0?(h=c[d>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[d>>2]=0;c[g+32>>2]=0;c[f>>2]=0}n=g+64|0;b:do if((c[n>>2]|0)>0){d=g+28|0;o=g+32|0;m=0;b=0;h=0;j=-1;while(1){f=c[g+72+(m*24|0)+16>>2]|0;if(f){h=f+12|0;f=c[h>>2]|0;if(!f){m=66;break}l=nb(c[f>>2]|0)|0;if(!l){f=7;break b}i=c[h>>2]|0;k=c[i+4>>2]|0;if((a[k>>0]|0)<=-1)if((a[k+1>>0]|0)<=-1)if((a[k+2>>0]|0)<=-1)if((a[k+3>>0]|0)>-1)h=4;else{f=28;h=k+4|0;do{v=h;h=h+1|0;f=f+7|0}while(f>>>0<64&(a[v>>0]|0)<0);h=h-k|0}else h=3;else h=2;else h=1;i=(c[i>>2]|0)-h|0;f=l;ew(l|0,k+h|0,i|0)|0;if(!b){j=m;k=l}else{c[s>>2]=f;c[t>>2]=b;c[p>>2]=f;or(s,m-j|0,0,1,t,p)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}f=(c[s>>2]|0)-f|0;if(!f){m=85;break}j=m;k=l;i=f}}else{k=b;i=h}m=m+1|0;if((m|0)>=(c[n>>2]|0)){m=90;break}else{b=k;h=i}}if((m|0)==66){do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{v=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==85){if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{v=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}c[d>>2]=0;c[o>>2]=0;f=0;break}else if((m|0)==90){if((j|0)<=-1){f=0;break}f=c[g+44>>2]|0;if((f|0)<0){c[d>>2]=k;c[o>>2]=i;t=r;v=c[t+4>>2]|0;f=g+16|0;c[f>>2]=c[t>>2];c[f+4>>2]=v;c[g+24>>2]=1;f=0;break}if((f|0)>(j|0)){c[s>>2]=k;c[t>>2]=c[d>>2];h=f-j|0}else{c[s>>2]=c[d>>2];c[t>>2]=k;h=j-f|0}f=nb(i+8|0)|0;c[p>>2]=f;if(!f){do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=7;break}c[d>>2]=f;if(!(or(p,h,0,1,s,t)|0)){f=c[p>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[d>>2]=0;f=0}else{c[g+24>>2]=1;f=(c[p>>2]|0)-(c[d>>2]|0)|0}c[o>>2]=f;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{v=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);f=0;break}}else{f=0;d=g+28|0}while(0);c[e>>2]=f;v=(c[d>>2]|0)!=0;e=r;s=c[e+4>>2]|0;t=q;c[t>>2]=c[e>>2];c[t+4>>2]=s;v=v&1;Ra=u;return v|0}while(0);if(a[d+32>>0]|0){v=0;v=v&1;Ra=u;return v|0}t=d+24|0;v=b+32|0;v=(c[t>>2]|0)==(c[v>>2]|0)?(c[t+4>>2]|0)==(c[v+4>>2]|0):0;v=v&1;Ra=u;return v|0}}return 0}function wr(a,b,d,e,f,g,h,i){a=a|0;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;n=Ra;Ra=Ra+16|0;m=n;j=c[a>>2]|0;c[m>>2]=j;if(j){l=j+16|0;k=c[l>>2]|0;l=c[l+4>>2]|0;if((k|0)==(b|0)&(l|0)==(d|0))l=6;else{l=Tv(b|0,d|0,k|0,l|0)|0;k=L()|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=4}}else{j=b;k=d;l=4}if((l|0)==4){j=xr(m,j,k)|0;if(!j){j=c[m>>2]|0;l=j+24|0;c[l>>2]=-1;c[l+4>>2]=-1;l=j+32|0;c[l>>2]=0;c[l+4>>2]=0;l=j+16|0;c[l>>2]=b;c[l+4>>2]=d;l=6}}do if((l|0)==6){if((f|0)>0|(f|0)==0&e>>>0>0){d=j+24|0;if(!((c[d>>2]|0)==(e|0)?(c[d+4>>2]|0)==(f|0):0)){j=xr(m,1,0)|0;if(j|0)break;j=xr(m,e,f)|0;if(j|0)break;j=c[m>>2]|0;d=j+24|0;c[d>>2]=e;c[d+4>>2]=f;f=j+32|0;c[f>>2]=0;c[f+4>>2]=0}}else if(!((f|0)>-1|(f|0)==-1&e>>>0>4294967295)){j=0;break}e=Sv(g|0,h|0,2,0)|0;f=L()|0;j=j+32|0;j=Tv(e|0,f|0,c[j>>2]|0,c[j+4>>2]|0)|0;j=xr(m,j,L()|0)|0;if(!j){j=(c[m>>2]|0)+32|0;c[j>>2]=g;c[j+4>>2]=h;j=0}}while(0);c[i>>2]=j;j=c[m>>2]|0;if((j|0)==(c[a>>2]|0)){a=0;Ra=n;return a|0}c[a>>2]=j;a=1;Ra=n;return a|0}function xr(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;f=c[b>>2]|0;do if(f){g=c[f+8>>2]|0;if(((c[f>>2]|0)+11|0)>(g|0)){g=g<<1;h=g+40|0;if((mb()|0)==0?(i=sb(f,(h|0)>0?h:0,0)|0,i|0):0){c[i+8>>2]=g;c[i+4>>2]=i+40;f=i;break}f=c[b>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[b>>2]=0;b=7;return b|0}}else{if(mb()|0){b=7;return b|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](140)|0;if(!f){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](140)|0;if((c[14985]|0)>>>0<140)c[14985]=140;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){l=c[14978]|0;k=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;j=L()|0;c[14768]=((j|0)<0|(j|0)==0&k>>>0<=l>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){b=7;return b|0}g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}c[f+8>>2]=100;c[f+4>>2]=f+40;c[f>>2]=0}while(0);k=f+4|0;l=(c[k>>2]|0)+(c[f>>2]|0)|0;j=l;i=e;while(1){g=d&255;h=j+1|0;a[j>>0]=g|-128;d=bw(d|0,i|0,7)|0;i=L()|0;if((d|0)==0&(i|0)==0)break;else j=h}a[j>>0]=g&127;e=(c[f>>2]|0)+(h-l)|0;c[f>>2]=e;a[(c[k>>2]|0)+e>>0]=0;c[b>>2]=f;b=0;return b|0}function yr(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;r=Ra;Ra=Ra+32|0;l=r+20|0;k=r+16|0;h=r+12|0;m=r+8|0;i=r+4|0;p=r;q=g+64|0;t=(c[q>>2]|0)+b|0;b=(c[f>>2]|0)+b|0;o=g+28|0;n=c[o>>2]|0;c[p>>2]=n;c[i>>2]=n;c[l>>2]=d;s=c[e>>2]|0;j=d;c[k>>2]=j;or(k,t,0,0,e,i)|0;k=c[k>>2]|0;c[h>>2]=k;c[m>>2]=k;c[e>>2]=s;c[i>>2]=n;or(h,b,1,0,i,e)|0;i=k;b=(c[h>>2]|0)==(i|0);do if((i|0)==(d|0))if(b)b=0;else{b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-k|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[m>>2]=b;b=1}else{if(!b){nr(p,l,m)|0;b=1;break}b=d;h=0;while(1){i=a[b>>0]|0;b=b+1|0;if(!(h<<24>>24|i))break;else h=i&128}t=b-j|0;ew(n|0,d|0,t|0)|0;c[p>>2]=n+t;c[l>>2]=b;b=1}while(0);if(!b){Ra=r;return b|0}d=c[o>>2]|0;s=(c[p>>2]|0)-d+-1|0;t=g+32|0;gw(d+s|0,0,(c[t>>2]|0)-s|0)|0;c[t>>2]=s;c[e>>2]=c[o>>2];c[f>>2]=c[q>>2];Ra=r;return b|0}function zr(d,f,g,h){d=d|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,v=0,w=0,x=0;x=Ra;Ra=Ra+16|0;w=x+8|0;t=x;v=x+4|0;c[v>>2]=f;c[w>>2]=f;i=cq(d,7,t,w)|0;s=c[t>>2]|0;a:do if(!i){b:do if((Gc(s)|0)==100){if(!(c[d+44>>2]|0))r=0;else r=Nc(s,(c[d+24>>2]|0)+1|0)|0;j=Oc(s,0)|0;k=L()|0;l=d+272|0;i=l;f=c[i>>2]|0;i=c[i+4>>2]|0;do if(!((i|0)>(k|0)|(i|0)==(k|0)&f>>>0>j>>>0)){if((f|0)==(j|0)&(i|0)==(k|0)?(c[d+284>>2]|0)==0:0){u=10;break}f=d+280|0;if((c[f>>2]|0)==(r|0)?(c[d+264>>2]|0)<=(c[d+260>>2]|0):0)u=12;else u=10}else u=10;while(0);if((u|0)==10){f=Sr(d)|0;if(!f){f=d+280|0;u=12}}if((u|0)==12){q=l;c[q>>2]=j;c[q+4>>2]=k;c[f>>2]=r;c[d+284>>2]=1;q=d+24|0;p=d+32|0;m=s+120|0;n=s+144|0;o=s+40|0;if(!s){f=c[q>>2]|0;if((f|0)<1){i=0;f=1;break a}k=c[p>>2]|0;j=1;while(1){i=j+-1|0;if(!(a[k+i>>0]|0)){c[h+(i<<2)>>2]=0;f=c[q>>2]|0}if((j|0)<(f|0))j=j+1|0;else{f=1;break b}}}l=1;while(1){if((l|0)>(c[q>>2]|0)){f=1;break b}k=l+-1|0;if(!(a[(c[p>>2]|0)+k>>0]|0)){f=c[m>>2]|0;if((f|0)!=0?l>>>0<(e[n>>1]|0)>>>0:0)f=f+(l*40|0)|0;else{f=c[s>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576}i=b[f+8>>1]|0;if((i&514)==514?(a[f+10>>0]|0)==1:0)j=c[f+16>>2]|0;else if(!(i&1))j=Gg(f,1)|0;else j=0;f=c[s>>2]|0;i=c[o>>2]|0;if((i|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&i;c[o>>2]=f;f=Mr(d,r,j,-1,h+(k<<2)|0)|0;j=Lc(s,l)|0;k=h+(c[q>>2]<<2)|0;c[k>>2]=(c[k>>2]|0)+j}else f=0;if(!f)l=l+1|0;else break}}if(!s){i=f;f=0;break a}i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if(!((r|0)==3082|(a[i+81>>0]|0)!=0)){i=f;f=0;break a}og(i);i=f;f=0;break a}else f=0;while(0);if(s){i=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(i,s);j=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}else i=0}else if(s){f=c[s>>2]|0;r=s+136|0;q=c[r+4>>2]|0;if((q|0)>0|(q|0)==0&(c[r>>2]|0)>>>0>0)hc(f,s);r=kc(s)|0;c[s+20>>2]=770837923;c[s+36>>2]=-1;c[s+40>>2]=0;a[s+146>>0]=2;c[s+44>>2]=0;c[s+32>>2]=1;a[s+147>>0]=-1;c[s+48>>2]=0;s=s+64|0;c[s>>2]=0;c[s+4>>2]=0;if((r|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=0}else f=0}else f=0;while(0);if(!((i|0)==0&(f|0)!=0)){w=i;Ra=x;return w|0}c[w>>2]=c[v>>2];l=d+40|0;c:do if(!(c[l>>2]|0)){f=cq(d,1,t,w)|0;do if(!f){f=c[t>>2]|0;if((Gc(f)|0)==100)k=Nc(f,0)|0;else k=0;if(!f){f=k;u=61;break c}i=c[f>>2]|0;t=f+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;t=f+64|0;c[t>>2]=0;c[t+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}f=c[i+68>>2]&j;if(!f){f=k;break c}Ra=x;return f|0}while(0);w=f;Ra=x;return w|0}else{f=0;u=61}while(0);if(f|0){w=Lr(d,1)|0;c[g>>2]=0;gw(h|0,0,(c[d+24>>2]<<3)+8|0)|0;Ra=x;return w|0}c[g>>2]=(c[g>>2]|0)+-1;if(!(c[l>>2]|0)){f=cq(d,0,w,v)|0;do if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;h=f+136|0;g=c[h+4>>2]|0;if((g|0)>0|(g|0)==0&(c[h>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;h=f+64|0;c[h>>2]=0;c[h+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}while(0)}else f=0;if(!(a[d+234>>0]|0)){w=f;Ra=x;return w|0}do if(!f){f=cq(d,19,w,v)|0;if(!f){f=c[w>>2]|0;Gc(f)|0;if(f){i=c[f>>2]|0;w=f+136|0;v=c[w+4>>2]|0;if((v|0)>0|(v|0)==0&(c[w>>2]|0)>>>0>0)hc(i,f);j=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;w=f+64|0;c[w>>2]=0;c[w+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);f=7;break}else{f=c[i+68>>2]&j;break}}else f=0}}while(0);w=f;Ra=x;return w|0}function Ar(d,f,h){d=d|0;f=f|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;s=Ra;Ra=Ra+16|0;q=s;if(c[d+40>>2]|0){k=c[f+((c[d+24>>2]|0)+3<<2)>>2]|0;i=b[k+8>>1]|0;j=i&31;if(-1431655766>>>j&1){k=c[f+4>>2]|0;i=b[k+8>>1]|0;j=i&31}if(!(1347440720>>>j&1)){h=19;Ra=s;return h|0}i=i&65535;do if(!(i&4)){if(i&8|0){i=Mg(+g[k>>3])|0;j=L()|0;break}if(!(i&18)){i=0;j=0}else{i=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;j=L()|0}}else{j=k;i=c[j>>2]|0;j=c[j+4>>2]|0}while(0);c[h>>2]=i;c[h+4>>2]=j;h=0;Ra=s;return h|0}r=f+4|0;i=cq(d,18,q,r)|0;if(i|0){h=i;Ra=s;return h|0}do if(c[d+44>>2]|0){n=c[q>>2]|0;i=d+24|0;o=c[i>>2]|0;l=o+2|0;j=c[f+(o+4<<2)>>2]|0;k=e[j+8>>1]|0;do if(!(k&4)){if(k&8|0){m=Mg(+g[j>>3])|0;L()|0;break}if(!(k&18))m=0;else{m=Ng(a[j+10>>0]|0,c[j+12>>2]|0,c[j+16>>2]|0)|0;L()|0}}else m=c[j>>2]|0;while(0);p=((m|0)<0)<<31>>31;j=Vc(n,l)|0;if(j|0){h=j;Ra=s;return h|0}n=c[n+100>>2]|0;k=o+1|0;j=n+(k*40|0)|0;k=n+(k*40|0)+8|0;if(!(b[k>>1]&9216)){o=j;c[o>>2]=m;c[o+4>>2]=p;b[k>>1]=4;break}else{Pg(j,m,p);break}}else i=d+24|0;while(0);i=c[f+((c[i>>2]|0)+3<<2)>>2]|0;if(!(-1431655766>>>(b[i+8>>1]&31)&1)){if(-1431655766>>>(b[(c[f>>2]|0)+8>>1]&31)&1|0?(-1431655766>>>(b[(c[r>>2]|0)+8>>1]&31)&1|0)==0:0){h=1;Ra=s;return h|0}j=c[q>>2]|0;i=Yc(j,1,i)|0;if(i){h=i;Ra=s;return h|0}}else j=c[q>>2]|0;Gc(j)|0;do if(j){i=c[j>>2]|0;f=j+136|0;r=c[f+4>>2]|0;if((r|0)>0|(r|0)==0&(c[f>>2]|0)>>>0>0)hc(i,j);k=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;f=j+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&k;break}}else i=0;while(0);f=(c[d+12>>2]|0)+40|0;d=c[f+4>>2]|0;c[h>>2]=c[f>>2];c[h+4>>2]=d;h=i;Ra=s;return h|0}function Br(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;t=Ra;Ra=Ra+16|0;p=t;q=t+8|0;if(c[d>>2]|0){Ra=t;return}g=e+24|0;s=c[g>>2]|0;s=Yv(s|0,((s|0)<0)<<31>>31|0,10,0)|0;s=pb(s,L()|0)|0;a:do if(s){o=c[g>>2]|0;if((o|0)>0){n=0;g=0;do{i=s+g|0;h=i;k=c[f+(n<<2)>>2]|0;m=0;while(1){j=k&255;l=h+1|0;a[h>>0]=j|-128;k=bw(k|0,m|0,7)|0;m=L()|0;if((k|0)==0&(m|0)==0)break;else h=l}a[h>>0]=j&127;g=g-i+l|0;n=n+1|0}while((n|0)!=(o|0));m=g}else m=0;i=e+136|0;h=c[i>>2]|0;c[q>>2]=h;do if(!h){h=c[e+20>>2]|0;c[p>>2]=c[e+16>>2];c[p+4>>2]=h;h=Bb(52323,p)|0;if(h){g=qd(c[e+12>>2]|0,h,-1,133,0,q,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[q>>2]|0;c[i>>2]=h;if(!g)break}else g=7;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break a}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break a}}while(0);l=h;i=e+272|0;g=c[i>>2]|0;i=c[i+4>>2]|0;do if(!(Vc(l,1)|0)){j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){e=j;c[e>>2]=g;c[e+4>>2]=i;b[k>>1]=4;break}else{Pg(j,g,i);break}}while(0);if(Vc(l,2)|0){do if(90!=-1)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{r=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);Gc(l)|0;if(!h){g=0;break}}else{g=yc((c[l+100>>2]|0)+40|0,s,m,0,90)|0;if(g|0?(r=c[l>>2]|0,c[r+64>>2]=g,Ne(r,g),r=c[l>>2]|0,(g|0)==3082|(a[r+81>>0]|0)!=0):0)og(r);Gc(l)|0}g=c[l>>2]|0;s=l+136|0;r=c[s+4>>2]|0;if((r|0)>0|(r|0)==0&(c[s>>2]|0)>>>0>0)hc(g,l);h=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;s=l+64|0;c[s>>2]=0;c[s+4>>2]=0;if((h|0)==3082|(a[g+81>>0]|0)!=0){og(g);g=7;break}else{g=c[g+68>>2]&h;break}}else g=7;while(0);c[d>>2]=g;Ra=t;return}function Cr(e,f,g,h,i){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;D=Ra;Ra=Ra+32|0;x=D+8|0;k=D;y=D+16|0;u=f+24|0;v=c[u>>2]|0;w=v+2|0;if(c[e>>2]|0){Ra=D;return}C=Yv(w|0,((w|0)<0)<<31>>31|0,14,0)|0;C=pb(C,L()|0)|0;if(!C){c[e>>2]=7;Ra=D;return}z=C+(w<<2)|0;l=f+144|0;j=c[l>>2]|0;c[y>>2]=j;do if(!j){t=c[f+20>>2]|0;c[k>>2]=c[f+16>>2];c[k+4>>2]=t;k=Bb(52411,k)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{B=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}else k=j;while(0);t=k;do if(!(Vc(t,1)|0)){j=c[t+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){s=j;c[s>>2]=0;c[s+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((Gc(t)|0)==100){if(!k)n=mc(29576)|0;else{j=c[t+120>>2]|0;if((j|0)!=0?(b[t+144>>1]|0)!=0:0)l=t;else{j=c[t>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=t}n=mc(j)|0;j=c[l>>2]|0;m=t+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}s=Lc(t,0)|0;if(((s|0)!=0?(a[n+(s+-1)>>0]|0)>-1:0)?(v|0)>-2&(s|0)>0:0){j=0;r=0;do{q=n+r|0;l=d[q>>0]|0;if(l&128){p=d[q+1>>0]|0;l=p<<7|l&127;if(p&128){p=d[q+2>>0]|0;l=p<<14|l&16383;if(p&128){p=d[q+3>>0]|0;l=p<<21|l&2097151;if(!(p&128))m=4;else{o=28;p=q+4|0;l=l&268435455;m=0;do{E=p;p=p+1|0;E=d[E>>0]|0;F=cw(E&127|0,0,o|0)|0;l=Sv(F|0,L()|0,l|0,m|0)|0;m=L()|0;o=o+7|0}while(o>>>0<64&((E&128|0)!=0|0!=0));m=p-q|0}}else m=3}else m=2}else m=1;r=m+r|0;c[C+(j<<2)>>2]=l;j=j+1|0}while((j|0)<(w|0)&(r|0)<(s|0))}else j=0;if((w|0)>(j|0))gw(C+(j<<2)|0,0,w-j<<2|0)|0}else gw(C|0,0,w<<2|0)|0;do if(k|0){j=c[t>>2]|0;F=t+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,t);k=kc(t)|0;c[t+20>>2]=770837923;c[t+36>>2]=-1;c[t+40>>2]=0;a[t+146>>0]=2;c[t+44>>2]=0;c[t+32>>2]=1;a[t+147>>0]=-1;c[t+48>>2]=0;F=t+64|0;c[F>>2]=0;c[F+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;if(!j)break}else{og(j);j=7}if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);k=c[C>>2]|0;k=(i|0)<0&k>>>0<(0-i|0)>>>0?0:k+i|0;c[C>>2]=k;if((c[u>>2]|0)>=0){j=0;do{F=j;j=j+1|0;E=C+(j<<2)|0;t=(c[g+(F<<2)>>2]|0)+(c[E>>2]|0)|0;i=c[h+(F<<2)>>2]|0;c[E>>2]=t>>>0>>0?0:t-i|0}while((F|0)<(c[u>>2]|0))}a:do if((v|0)>-2){q=0;j=0;while(1){p=z+j|0;o=p;n=0;while(1){l=k&255;m=o+1|0;a[o>>0]=l|-128;k=bw(k|0,n|0,7)|0;n=L()|0;if((k|0)==0&(n|0)==0)break;else o=m}a[o>>0]=l&127;j=j-p+m|0;k=q+1|0;if((k|0)==(w|0)){n=j;break a}q=k;k=c[C+(k<<2)>>2]|0}}else n=0;while(0);l=f+148|0;k=c[l>>2]|0;c[y>>2]=k;do if(!k){k=c[f+20>>2]|0;c[x>>2]=c[f+16>>2];c[x+4>>2]=k;k=Bb(52453,x)|0;if(k){j=qd(c[f+12>>2]|0,k,-1,133,0,y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{F=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[y>>2]|0;c[l>>2]=k;if(!j)break}else j=7;if(!(c[7324]|0))ab[c[29344>>2]&127](C);else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C)}c[e>>2]=j;Ra=D;return}while(0);m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){F=j;c[F>>2]=0;c[F+4>>2]=0;b[l>>1]=4;break}else{Pg(j,0,0);break}}while(0);if((z|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else B=87}else{j=yc((c[m+100>>2]|0)+40|0,z,n,0,0)|0;if(j|0?(A=c[m>>2]|0,c[A+64>>2]=j,Ne(A,j),A=c[m>>2]|0,(j|0)==3082|(a[A+81>>0]|0)!=0):0)og(A);Gc(m)|0;B=87}do if((B|0)==87){j=c[m>>2]|0;F=m+136|0;E=c[F+4>>2]|0;if((E|0)>0|(E|0)==0&(c[F>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;F=m+64|0;c[F>>2]=0;c[F+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);c[e>>2]=j;Vc(m,2)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](C);Ra=D;return}else{F=Wa[c[29352>>2]&127](C)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](C);Ra=D;return}}function Dr(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;m=Ra;Ra=Ra+16|0;g=m;h=m+8|0;j=d+164|0;f=c[j>>2]|0;c[h>>2]=f;do if(!f){f=c[d+20>>2]|0;c[g>>2]=c[d+16>>2];c[g+4>>2]=f;f=Bb(52546,g)|0;if(!f){j=0;i=7;break}i=qd(c[d+12>>2]|0,f,-1,133,0,h,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}f=c[h>>2]|0;c[j>>2]=f;if(!i)k=9;else j=0}else k=9;while(0);if((k|0)==9){l=f;g=c[d+280>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,1)|0)){i=c[l+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){k=i;c[k>>2]=g;c[k+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);k=d+252|0;g=c[k>>2]|0;h=((g|0)<0)<<31>>31;do if(!(Vc(l,2)|0)){j=c[l+100>>2]|0;i=j+40|0;j=j+48|0;if(!(b[j>>1]&9216)){c[i>>2]=g;c[i+4>>2]=h;b[j>>1]=4;break}else{Pg(i,g,h);break}}while(0);if((Gc(l)|0)==100){g=0;h=0;while(1){j=Nc(l,0)|0;a:do if(!g){i=0;while(1){if((i|0)>=(c[k>>2]|0)){g=0;break a}g=Er(d,j,i,-2)|0;n=(g|0)==101;g=n?0:g;h=n?1:h;if(!g)i=i+1|0;else break}}while(0);if((Gc(l)|0)!=100){i=g;break}}}else{h=0;i=0}do if(f){f=c[l>>2]|0;n=l+136|0;k=c[n+4>>2]|0;if((k|0)>0|(k|0)==0&(c[n>>2]|0)>>>0>0)hc(f,l);g=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;n=l+64|0;c[n>>2]=0;c[n+4>>2]=0;if((g|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7;break}else{f=c[f+68>>2]&g;break}}else f=0;while(0);j=h;i=(i|0)==0?f:i}f=d+248|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}n=g;if((c[h+304>>2]|0)>>>0<=n>>>0?(c[h+308>>2]|0)>>>0>n>>>0:0){n=h+300|0;c[g>>2]=c[n>>2];c[n>>2]=g;c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}else{n=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;Fr(d);n=(i|0)==0;e=(e|0)!=0;e=e&n;n=(j|0)!=0;n=e&n;n=n?101:i;Ra=m;return n|0}return 0}function Er(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0;ca=Ra;Ra=Ra+128|0;R=ca+40|0;Q=ca+32|0;P=ca+24|0;O=ca+16|0;w=ca+8|0;i=ca;S=ca+120|0;x=ca+104|0;aa=ca+48|0;h=aa;j=h+56|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));h=Xp(d,e,f,g,0,0,1,0,aa)|0;ba=aa+4|0;a:do if(!h){q=c[ba>>2]|0;if(!q){h=0;j=c[aa>>2]|0;i=aa;Z=264;break}N=(g|0)!=-1;if(N){j=d+116|0;h=c[j>>2]|0;c[S>>2]=h;if(!h){Y=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=Y;i=Bb(52072,i)|0;if(!i){h=7;Z=237;break}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[j>>2]=i;if(!h)h=i;else{Z=237;break}}n=h;o=d+252|0;i=c[o>>2]|0;p=((e|0)<0)<<31>>31;i=Yv(i|0,((i|0)<0)<<31>>31|0,e|0,p|0)|0;m=((f|0)<0)<<31>>31;i=Sv(i|0,L()|0,f|0,m|0)|0;i=cw(i|0,L()|0,10)|0;j=L()|0;do if(!(Vc(n,1)|0)){k=c[n+100>>2]|0;l=k+8|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=i;c[Y+4>>2]=j;b[l>>1]=4;break}else{Pg(k,i,j);break}}while(0);j=c[o>>2]|0;j=Yv(j|0,((j|0)<0)<<31>>31|0,e|0,p|0)|0;j=Sv(j|0,L()|0,f|0,m|0)|0;j=cw(j|0,L()|0,10)|0;i=L()|0;j=j|1023;do if(!(Vc(n,2)|0)){l=c[n+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){Y=k;c[Y>>2]=j;c[Y+4>>2]=i;b[l>>1]=4;break}else{Pg(k,j,i);break}}while(0);if((Gc(n)|0)==100){k=Oc(n,0)|0;j=L()|0}else{k=0;j=0}do if(h|0){i=c[n>>2]|0;Y=n+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(i,n);h=kc(n)|0;c[n+20>>2]=770837923;c[n+36>>2]=-1;c[n+40>>2]=0;a[n+146>>0]=2;c[n+44>>2]=0;c[n+32>>2]=1;a[n+147>>0]=-1;c[n+48>>2]=0;Y=n+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((h|0)==3082|(a[i+81>>0]|0)!=0)){h=c[i+68>>2]&h;if(!h)break;else{Z=237;break a}}else{og(i);h=7;Z=237;break a}}while(0);if((g|0)==-2){if((q|0)==1?(c[(c[c[aa>>2]>>2]|0)+56>>2]|0)==0:0){h=101;Z=237;break};c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;W=0;Y=k;X=j;V=j;U=k;K=1;i=3;h=x+12|0}else{q=e;n=p;p=f;u=j;v=k;Z=33}}else{o=d+252|0;q=e;n=((e|0)<0)<<31>>31;p=f;m=((f|0)<0)<<31>>31;u=0;v=0;Z=33}do if((Z|0)==33){r=g+1|0;s=c[o>>2]|0;s=Yv(q|0,n|0,s|0,((s|0)<0)<<31>>31|0)|0;s=Sv(s|0,L()|0,p|0,m|0)|0;s=cw(s|0,L()|0,10)|0;j=((r|0)<0)<<31>>31;s=Sv(s|0,L()|0,r|0,j|0)|0;t=L()|0;k=d+88|0;l=c[k>>2]|0;c[S>>2]=l;if(!l){i=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=i;i=Bb(51533,w)|0;if(!i){h=7;Z=237;break a}h=qd(c[d+12>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{Y=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}l=c[S>>2]|0;c[k>>2]=l;if(h|0){Z=237;break a}k=c[o>>2]|0;k=Yv(q|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,p|0,m|0)|0;k=cw(k|0,L()|0,10)|0;j=Sv(k|0,L()|0,r|0,j|0)|0;k=L()|0}else{j=s;k=t}m=l;do if(!(Vc(m,1)|0)){h=c[m+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){Y=h;c[Y>>2]=j;c[Y+4>>2]=k;b[i>>1]=4;break}else{Pg(h,j,k);break}}while(0);if((Gc(m)|0)==100)j=Nc(m,0)|0;else j=0;do if(l|0){h=c[m>>2]|0;Y=m+136|0;X=c[Y+4>>2]|0;if((X|0)>0|(X|0)==0&(c[Y>>2]|0)>>>0>0)hc(h,m);i=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Y=m+64|0;c[Y>>2]=0;c[Y+4>>2]=0;if(!((i|0)==3082|(a[h+81>>0]|0)!=0)){h=c[h+68>>2]&i;if(!h)break;else{Z=237;break a}}else{og(h);h=7;Z=237;break a}}while(0);if((j|0)>15){h=Er(d,e,f,r)|0;if(!h){i=N&((t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0);h=0;Z=59}else{Z=237;break a}}else if(N){i=(t|0)>(u|0)|(t|0)==(u|0)&s>>>0>v>>>0;h=j;Z=59}else{c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;h=j;j=x+12|0}if((Z|0)==59){c[x>>2]=0;c[x+4>>2]=0;c[x+8>>2]=0;c[x+12>>2]=0;j=x+12|0;if(i){W=h;Y=s;X=t;V=u;U=v;K=0;i=3;h=j;break}}W=h;Y=s;X=t;V=u;U=v;K=0;i=1;h=j}while(0);c[h>>2]=i;c[aa+12>>2]=x;h=eq(d,aa,0,0)|0;if(!h){C=aa+40|0;D=aa+44|0;E=aa+48|0;F=aa+52|0;G=d+228|0;H=d+96|0;I=d+16|0;J=d+20|0;M=d+12|0;T=d+52|0;i=0;j=0;b:while(1){h=gq(d,aa)|0;switch(h|0){case 0:{Z=130;break b}case 100:break;default:{Z=223;break b}}A=c[C>>2]|0;B=c[D>>2]|0;y=c[E>>2]|0;z=c[F>>2]|0;if(!i){if(mb()|0){h=7;Z=237;break a}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](64)|0;if(!h){h=7;Z=237;break a}else l=h}else{h=Wa[c[29356>>2]&127](64)|0;if((c[14985]|0)>>>0<64)c[14985]=64;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){x=c[14978]|0;w=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;v=L()|0;c[14768]=((v|0)<0|(v|0)==0&w>>>0<=x>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;Z=237;break a}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;l=i}else l=i}h=l;j=h+64|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(j|0));x=nb(c[G>>2]|0)|0;c[l+48>>2]=x;if(!x){Z=222;break}c[l+40>>2]=c[G>>2];h=c[H>>2]|0;c[S>>2]=h;if(!h){i=c[J>>2]|0;c[O>>2]=c[I>>2];c[O+4>>2]=i;i=Bb(51657,O)|0;if(!i){Z=81;break}h=qd(c[M>>2]|0,i,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{x=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[S>>2]|0;c[H>>2]=i;if(!h)h=i;else{Z=224;break}}j=h;if((Gc(j)|0)==100){v=Oc(j,0)|0;w=L()|0;x=l+16|0;c[x>>2]=v;c[x+4>>2]=w;x=l+8|0;c[x>>2]=v;c[x+4>>2]=w}if(h){h=c[j>>2]|0;x=j+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(h,j);i=kc(j)|0;c[j+20>>2]=770837923;c[j+36>>2]=-1;c[j+40>>2]=0;a[j+146>>0]=2;c[j+44>>2]=0;c[j+32>>2]=1;a[j+147>>0]=-1;c[j+48>>2]=0;x=j+64|0;c[x>>2]=0;c[x+4>>2]=0;if((i|0)==3082|(a[h+81>>0]|0)!=0){Z=92;break}h=c[h+68>>2]&i;if(h){Z=225;break}else{i=l;j=l}}else{i=l;j=l}}v=i+44|0;q=c[v>>2]|0;w=i+24|0;k=c[w>>2]|0;x=i+28|0;l=c[x>>2]|0;c:do if((l|0)>0){h=0;while(1){if((a[k+h>>0]|0)!=(a[A+h>>0]|0)){o=h;break c}h=h+1|0;if((h|0)>=(l|0)){o=h;break}}}else o=0;while(0);p=B-o|0;if((p|0)<1){h=267;Z=223;break}n=0;h=o;k=((o|0)<0)<<31>>31;do{n=n+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));m=0;h=p;k=((p|0)<0)<<31>>31;do{m=m+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));u=((z|0)<0)<<31>>31;h=0;k=z;l=u;do{h=h+1|0;k=bw(k|0,l|0,7)|0;l=L()|0}while(!((k|0)==0&(l|0)==0));h=p+z+n+m+h|0;if((q|0)>0?(h+q|0)>(c[G>>2]|0):0){s=i+16|0;h=s;t=c[h>>2]|0;h=c[h+4>>2]|0;p=Sv(t|0,h|0,1,0)|0;r=L()|0;c[s>>2]=p;c[s+4>>2]=r;h=Hr(d,t,h,c[i+48>>2]|0,q)|0;if(h|0){k=i;break}c[T>>2]=(c[T>>2]|0)+1;h=Ir(d,i,A,o+1|0)|0;if(h|0){k=i;break}c[x>>2]=0;m=0;h=B;k=((B|0)<0)<<31>>31;while(1){h=bw(h|0,k|0,7)|0;k=L()|0;if((h|0)==0&(k|0)==0)break;else m=m+1|0}l=0;h=z;k=u;do{l=l+1|0;h=bw(h|0,k|0,7)|0;k=L()|0}while(!((h|0)==0&(k|0)==0));s=0;q=0;l=B+2+z+m+l|0;r=B}else{s=o;l=h;r=p}k=i+56|0;h=k;h=Sv(c[h>>2]|0,c[h+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;t=L()|0;c[k>>2]=h;c[k+4>>2]=t;k=i+40|0;t=i+48|0;h=c[t>>2]|0;if((l|0)>(c[k>>2]|0)){if(mb()|0){k=i;h=7;break}h=sb(h,(l|0)>0?l:0,0)|0;if(!h){k=i;h=7;break}c[t>>2]=h;c[k>>2]=l}k=h+q|0;h=k;m=s;o=((s|0)<0)<<31>>31;while(1){l=m&255;n=h+1|0;a[h>>0]=l|-128;m=bw(m|0,o|0,7)|0;o=L()|0;if((m|0)==0&(o|0)==0)break;else h=n}a[h>>0]=l&127;k=n-k+q|0;l=(c[t>>2]|0)+k|0;h=l;n=r;p=((r|0)<0)<<31>>31;while(1){m=n&255;o=h+1|0;a[h>>0]=m|-128;n=bw(n|0,p|0,7)|0;p=L()|0;if((n|0)==0&(p|0)==0)break;else h=o}a[h>>0]=m&127;n=o-l+k|0;ew((c[t>>2]|0)+n|0,A+s|0,r|0)|0;n=n+r|0;o=(c[t>>2]|0)+n|0;m=o;p=z;l=u;while(1){h=p&255;k=m+1|0;a[m>>0]=h|-128;p=bw(p|0,l|0,7)|0;l=L()|0;if((p|0)==0&(l|0)==0)break;else m=k}a[m>>0]=h&127;k=k-o+n|0;ew((c[t>>2]|0)+k|0,y|0,z|0)|0;c[v>>2]=k+z;k=i+32|0;if((c[k>>2]|0)<(B|0)){l=i+36|0;h=c[l>>2]|0;m=B<<1;if(mb()|0){k=i;h=7;break}h=sb(h,(m|0)>0?m:0,0)|0;if(!h){k=i;h=7;break}c[k>>2]=m;c[l>>2]=h;c[w>>2]=h}else h=c[w>>2]|0;ew(h|0,A|0,B|0)|0;c[x>>2]=B}d:do if((Z|0)==81){k=l;h=7;j=l}else if((Z|0)==92){og(h);k=l;h=7;j=l}else if((Z|0)==130){if(N){s=c[aa>>2]|0;t=c[ba>>2]|0;do if((t|0)>0){r=d+124|0;q=0;e:while(1){p=c[s+(q<<2)>>2]|0;m=p+8|0;l=m;h=c[l>>2]|0;l=c[l+4>>2]|0;do if((h|0)==0&(l|0)==0)h=0;else{k=c[r>>2]|0;c[S>>2]=k;if(!k){k=c[J>>2]|0;c[P>>2]=c[I>>2];c[P+4>>2]=k;k=Bb(52181,P)|0;if(!k){Z=137;break e}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[r>>2]=k;if(h|0){Z=223;break d}l=m;h=c[l>>2]|0;l=c[l+4>>2]|0}o=k;do if(!(Vc(o,1)|0)){m=c[o+100>>2]|0;n=m+8|0;if(!(b[n>>1]&9216)){Z=m;c[Z>>2]=h;c[Z+4>>2]=l;b[n>>1]=4;break}else{Pg(m,h,l);break}}while(0);m=p+24|0;l=c[m>>2]|0;m=c[m+4>>2]|0;if(Vc(o,2)|0){Gc(o)|0;if(!k){h=0;break}}else{k=c[o+100>>2]|0;h=k+40|0;k=k+48|0;if(!(b[k>>1]&9216)){Z=h;c[Z>>2]=l;c[Z+4>>2]=m;b[k>>1]=4}else Pg(h,l,m);Gc(o)|0}k=c[o>>2]|0;Z=o+136|0;O=c[Z+4>>2]|0;if((O|0)>0|(O|0)==0&(c[Z>>2]|0)>>>0>0)hc(k,o);h=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;Z=o+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((h|0)==3082|(a[k+81>>0]|0)!=0){Z=156;break e}h=c[k+68>>2]&h}while(0);q=q+1|0;k=(h|0)==0;if(!((q|0)<(t|0)&k)){Z=159;break}}if((Z|0)==137){h=7;Z=223;break d}else if((Z|0)==156){og(k);h=7;Z=223;break d}else if((Z|0)==159)if(k)break;else{Z=223;break d}}while(0);do if(K){l=d+160|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[Q>>2]=c[I>>2];c[Q+4>>2]=k;k=Bb(52491,Q)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=d+252|0;o=c[k>>2]|0;m=((e|0)<0)<<31>>31;o=Yv(o|0,((o|0)<0)<<31>>31|0,e|0,m|0)|0;n=((f|0)<0)<<31>>31;o=Sv(o|0,L()|0,f|0,n|0)|0;o=cw(o|0,L()|0,10)|0;p=L()|0;do if(!(Vc(l,1)|0)){q=c[l+100>>2]|0;r=q+8|0;if(!(b[r>>1]&9216)){S=q;c[S>>2]=o;c[S+4>>2]=p;b[r>>1]=4;break}else{Pg(q,o,p);break}}while(0);k=c[k>>2]|0;m=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,m|0)|0;m=Sv(m|0,L()|0,f|0,n|0)|0;m=cw(m|0,L()|0,10)|0;k=L()|0;m=m|1023;if(!(Vc(l,2)|0)){o=c[l+100>>2]|0;n=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=m;c[f+4>>2]=k;b[o>>1]=4;break}else{Pg(n,m,k);break}}}else{l=d+120|0;h=c[l>>2]|0;c[S>>2]=h;if(!h){k=c[J>>2]|0;c[R>>2]=c[I>>2];c[R+4>>2]=k;k=Bb(52138,R)|0;if(!k){h=7;Z=223;break d}h=qd(c[M>>2]|0,k,-1,133,0,S,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[S>>2]|0;c[l>>2]=k;if(!h)h=k;else{Z=223;break d}}l=h;k=c[d+252>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,e|0,((e|0)<0)<<31>>31|0)|0;k=Sv(k|0,L()|0,f|0,((f|0)<0)<<31>>31|0)|0;k=cw(k|0,L()|0,10)|0;k=Sv(k|0,L()|0,g|0,((g|0)<0)<<31>>31|0)|0;m=L()|0;if(!(Vc(l,1)|0)){n=c[l+100>>2]|0;o=n+8|0;if(!(b[o>>1]&9216)){f=n;c[f>>2]=k;c[f+4>>2]=m;b[o>>1]=4;break}else{Pg(n,k,m);break}}}while(0);Gc(l)|0;do if(h){h=c[l>>2]|0;f=l+136|0;e=c[f+4>>2]|0;if((e|0)>0|(e|0)==0&(c[f>>2]|0)>>>0>0)hc(h,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;f=l+64|0;c[f>>2]=0;c[f+4>>2]=0;if((k|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7;Z=223;break d}else{h=c[h+68>>2]&k;break}}else h=0;while(0);if(!((i|0)!=0&(h|0)==0)){Z=223;break}}else if(!i){h=0;Z=237;break a}f:do if(!(c[i>>2]|0)){h=i+56|0;h=Jr(d,Y,X,W,0,0,0,0,0,0,c[h>>2]|0,c[h+4>>2]|0,c[i+48>>2]|0,c[i+44>>2]|0)|0}else{k=i+16|0;B=k;A=c[B>>2]|0;B=c[B+4>>2]|0;e=Sv(A|0,B|0,1,0)|0;f=L()|0;h=k;c[h>>2]=e;c[h+4>>2]=f;h=Hr(d,A,B,c[i+48>>2]|0,c[i+44>>2]|0)|0;g:do if(!h){m=c[i>>2]|0;z=i+8|0;o=z;r=c[o>>2]|0;o=c[o+4>>2]|0;q=k;l=c[q>>2]|0;q=c[q+4>>2]|0;h=c[m>>2]|0;if(!h){k=m;s=1;u=l;t=q;q=o}else{p=m;y=1;x=m;while(1){k=c[p+8>>2]|0;if(!k){m=l;n=q;k=h}else{w=y&255;m=l;n=q;v=o;do{h=0;o=r;p=v;while(1){o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=w;h=(c[p>>2]|0)+(o+1)|0;t=r;u=v;while(1){s=t&255;a[h>>0]=s|-128;t=bw(t|0,u|0,7)|0;u=L()|0;if((t|0)==0&(u|0)==0)break;else h=h+1|0}a[h>>0]=s&127;h=Hr(d,m,n,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;m=Sv(m|0,n|0,1,0)|0;n=L()|0;o=(c[k+12>>2]|0)+1|0;r=Sv(r|0,v|0,o|0,((o|0)<0)<<31>>31|0)|0;v=L()|0;k=c[k+4>>2]|0;o=(h|0)==0}while(o&(k|0)!=0);if(!o)break g;k=c[x>>2]|0}y=y+1|0;h=c[k>>2]|0;if(!h)break;else{o=q;r=l;p=k;l=m;q=n;x=k}}s=y&255;u=m;t=n;r=l}h=0;l=r;m=q;while(1){l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=h+1|0}o=9-h|0;p=k+36|0;a[(c[p>>2]|0)+o>>0]=s;n=(c[p>>2]|0)+(o+1)|0;m=r;l=q;while(1){h=m&255;a[n>>0]=h|-128;m=bw(m|0,l|0,7)|0;l=L()|0;if((m|0)==0&(l|0)==0)break;else n=n+1|0}a[n>>0]=h&127;e=Sv(u|0,t|0,-1,-1)|0;f=L()|0;S=z;h=i+56|0;h=Jr(d,Y,X,W,c[S>>2]|0,c[S+4>>2]|0,A,B,e,f,c[h>>2]|0,c[h+4>>2]|0,(c[p>>2]|0)+o|0,(c[k+32>>2]|0)-o|0)|0;break f}while(0);c[T>>2]=(c[T>>2]|0)+1;Z=223;break d}while(0);c[T>>2]=(c[T>>2]|0)+1;if(!h)if((g|0)==-1|((X|0)<(V|0)|(X|0)==(V|0)&Y>>>0>>0)){h=i+56|0;k=i;h=Gr(d,Y,X,c[h>>2]|0,c[h+4>>2]|0)|0}else{k=i;h=0}else k=i}else if((Z|0)==222){i=l;h=7;j=l;Z=223}else if((Z|0)==224){k=l;j=l}else if((Z|0)==225){k=l;j=l}while(0);if((Z|0)==223)if(!i){Z=237;break}else k=i;i=c[k+48>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);i=c[k+36>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);Kr(c[k>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);Z=237;break}else{Z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);Z=237;break}}else Z=237}else Z=237;while(0);if((Z|0)==237){k=c[ba>>2]|0;j=c[aa>>2]|0;if((k|0)>0){i=0;do{l=c[j+(i<<2)>>2]|0;do if(l|0){do if((c[l+56>>2]|0)==0?(_=c[l+64>>2]|0,_|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](_);break}else{d=Wa[c[29352>>2]&127](_)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](_);break}while(0);do if((a[l+5>>0]|0)==0?($=c[l+40>>2]|0,$|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127]($);break}else{d=Wa[c[29352>>2]&127]($)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127]($);break}while(0);m=c[l+52>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}d=m;if((c[n+304>>2]|0)>>>0<=d>>>0?(c[n+308>>2]|0)>>>0>d>>>0:0){d=n+300|0;c[m>>2]=c[d>>2];c[d>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{d=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{d=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);i=i+1|0}while((i|0)!=(k|0));i=aa;Z=265}else{i=aa;Z=264}}if((Z|0)==264)if(!j)j=h;else Z=265;do if((Z|0)==265)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);j=h;break}else{$=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);j=h;break}while(0);h=c[aa+16>>2]|0;if(!h){c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);c[ba>>2]=0;c[i>>2]=0;Ra=ca;return j|0}return 0}function Fr(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b+252|0;if((c[h>>2]|0)<=0){k=b+264|0;c[k>>2]=0;return}i=b+256|0;g=0;do{k=c[i>>2]|0;f=k+(g*24|0)+12|0;d=c[f>>2]|0;if(!d)d=0;else{do{e=c[d+8>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);d=c[d>>2]|0}while((d|0)!=0);d=c[f>>2]|0}c[f>>2]=0;e=k+(g*24|0)+20|0;f=c[e>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{l=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);c[e>>2]=0;c[k+(g*24|0)+16>>2]=0;if(d|0){f=k+(g*24|0)+5|0;do{e=d;d=c[d>>2]|0;do if(a[f>>0]|0?(j=c[e+12>>2]|0,j|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{l=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{l=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0)}c[k+(g*24|0)+8>>2]=0;g=g+1|0}while((g|0)<(c[h>>2]|0));l=b+264|0;c[l>>2]=0;return}function Gr(d,f,g,h,i){d=d|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;A=Ra;Ra=Ra+32|0;w=A+16|0;v=A+8|0;k=A;x=A+24|0;l=d+204|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[k>>2]=c[d+16>>2];c[k+4>>2]=j;j=Bb(53301,k)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{z=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(k){g=k;Ra=A;return g|0}}n=Wv(f|0,g|0,1024,0)|0;n=cw(n|0,L()|0,10)|0;m=L()|0;n=n|1023;s=Yv(h|0,i|0,3,0)|0;s=Wv(s|0,L()|0,2,0)|0;t=L()|0;z=j;k=Sv(f|0,g|0,1,0)|0;l=L()|0;do if(!(Vc(z,1)|0)){h=c[z+100>>2]|0;i=h+8|0;if(!(b[i>>1]&9216)){y=h;c[y>>2]=k;c[y+4>>2]=l;b[i>>1]=4;break}else{Pg(h,k,l);break}}while(0);do if(!(Vc(z,2)|0)){l=c[z+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){y=k;c[y>>2]=n;c[y+4>>2]=m;b[l>>1]=4;break}else{Pg(k,n,m);break}}while(0);a:do if((Gc(z)|0)==100){p=z+120|0;q=z+144|0;r=z+40|0;if(!j){g=0;Ra=A;return g|0}while(1){k=c[p>>2]|0;if((k|0)!=0?(e[q>>1]|0)>2:0)k=k+80|0;else{k=c[z>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}l=b[k+8>>1]|0;if((l&514)==514?(a[k+10>>0]|0)==1:0)o=c[k+16>>2]|0;else if(!(l&1))o=Gg(k,1)|0;else o=0;k=c[z>>2]|0;l=c[r>>2]|0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&l;c[r>>2]=k;if(!o){l=0;break a}if(((a[o>>0]|0)+-48&255)<10){k=0;do k=k+1|0;while(((a[o+k>>0]|0)+-48&255)<10)}else k=0;b:while(1){l=a[o+k>>0]|0;switch(l<<24>>24){case 45:{u=40;break b}case 32:break;default:{m=1;n=0;break b}}k=k+1|0}if((u|0)==40){u=0;l=k+1|0;k=l;l=a[o+l>>0]|0;m=-1;n=-1}if((l+-48&255)<10){h=0;i=0;do{i=Yv(h|0,i|0,10,0)|0;h=(l&255)+-48|0;h=Sv(i|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;k=k+1|0;l=a[o+k>>0]|0}while((l+-48&255)<10);l=h;k=i}else{l=0;k=0}l=Yv(l|0,k|0,m|0,n|0)|0;y=L()|0;k=(y|0)<0|(y|0)==0&l>>>0<1;l=(y|0)>(t|0)|(y|0)==(t|0)&l>>>0>s>>>0;if(k|l){u=45;break}if((Gc(z)|0)!=100){u=46;break}}if((u|0)==45){l=(k|l)^1;break}else if((u|0)==46){l=(k|l)^1;break}}else l=0;while(0);do if(!j){j=0;y=1}else{j=c[z>>2]|0;y=z+136|0;u=c[y+4>>2]|0;if((u|0)>0|(u|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;y=z+64|0;c[y>>2]=0;c[y+4>>2]=0;if(!((k|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&k;y=0;break}og(j);g=7;Ra=A;return g|0}while(0);if(!(l&(j|0)==0)){g=j;Ra=A;return g|0}l=d+208|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[v>>2]=c[d+16>>2];c[v+4>>2]=j;j=Bb(53407,v)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{v=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)h=j;else{g=k;Ra=A;return g|0}}else h=j;l=d+212|0;j=c[l>>2]|0;c[x>>2]=j;if(!j){j=c[d+20>>2]|0;c[w>>2]=c[d+16>>2];c[w+4>>2]=j;j=Bb(53480,w)|0;if(!j){g=7;Ra=A;return g|0}k=qd(c[d+12>>2]|0,j,-1,133,0,x,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{d=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[x>>2]|0;c[l>>2]=j;if(!k)x=j;else{g=k;Ra=A;return g|0}}else x=j;do if(!(Vc(z,1)|0)){j=c[z+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){d=j;c[d>>2]=f;c[d+4>>2]=g;b[k>>1]=4;break}else{Pg(j,f,g);break}}while(0);c:do if((Gc(z)|0)==100){m=h;n=m+100|0;o=m+136|0;p=m+20|0;q=m+36|0;r=m+40|0;s=m+146|0;t=m+44|0;u=m+32|0;v=m+147|0;w=m+48|0;d=m+64|0;d:do if(!h){i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}}else Gc(m)|0;if((Gc(z)|0)==100)i=i+1|0;else break c}}else{i=0;while(1){do if(!(Vc(m,1)|0)){j=c[n>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){h=j;c[h>>2]=i;c[h+4>>2]=0;b[k>>1]=4;break}else{Pg(j,i,0);break}}while(0);j=Nc(z,0)|0;k=((j|0)<0)<<31>>31;do if(!(Vc(m,2)|0)){h=c[n>>2]|0;l=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4;break}else{Pg(l,j,k);break}}while(0);j=Nc(z,1)|0;k=((j|0)<0)<<31>>31;if(!(Vc(m,3)|0)){h=c[n>>2]|0;l=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){c[l>>2]=j;c[l+4>>2]=k;b[h>>1]=4}else Pg(l,j,k);Gc(m)|0}else Gc(m)|0;j=c[m>>2]|0;h=o;l=c[h+4>>2]|0;if((l|0)>0|(l|0)==0&(c[h>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[p>>2]=770837923;c[q>>2]=-1;c[r>>2]=0;a[s>>0]=2;c[t>>2]=0;c[u>>2]=1;a[v>>0]=-1;c[w>>2]=0;h=d;c[h>>2]=0;c[h+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){u=113;break d}j=c[j+68>>2]&k;if(j|0){u=115;break d}if((Gc(z)|0)==100)i=i+1|0;else break c}}while(0);if((u|0)==113){og(j);if(y){g=7;Ra=A;return g|0}else k=7}else if((u|0)==115)if(y){g=j;Ra=A;return g|0}else k=j;j=c[z>>2]|0;g=z+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,z);g=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;f=z+64|0;c[f>>2]=0;c[f+4>>2]=0;if(!((g|0)==3082|(a[j+81>>0]|0)!=0)){g=k;Ra=A;return g|0}og(j);g=k;Ra=A;return g|0}while(0);do if(!y){j=c[z>>2]|0;y=z+136|0;d=c[y+4>>2]|0;if((d|0)>0|(d|0)==0&(c[y>>2]|0)>>>0>0)hc(j,z);k=kc(z)|0;c[z+20>>2]=770837923;c[z+36>>2]=-1;c[z+40>>2]=0;a[z+146>>0]=2;c[z+44>>2]=0;c[z+32>>2]=1;a[z+147>>0]=-1;c[z+48>>2]=0;z=z+64|0;c[z>>2]=0;c[z+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{j=c[j+68>>2]&k;if(!j)break;Ra=A;return j|0}}while(0);l=x;if(Vc(l,1)|0){Gc(l)|0;if(!x){g=0;Ra=A;return g|0}}else{j=c[l+100>>2]|0;k=j+8|0;if(!(b[k>>1]&9216)){z=j;c[z>>2]=f;c[z+4>>2]=g;b[k>>1]=4}else Pg(j,f,g);Gc(l)|0}j=c[l>>2]|0;g=l+136|0;f=c[g+4>>2]|0;if((f|0)>0|(f|0)==0&(c[g>>2]|0)>>>0>0)hc(j,l);k=kc(l)|0;c[l+20>>2]=770837923;c[l+36>>2]=-1;c[l+40>>2]=0;a[l+146>>0]=2;c[l+44>>2]=0;c[l+32>>2]=1;a[l+147>>0]=-1;c[l+48>>2]=0;g=l+64|0;c[g>>2]=0;c[g+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);g=7;Ra=A;return g|0}else{g=c[j+68>>2]&k;Ra=A;return g|0}return 0}function Hr(d,e,f,g,h){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=Ra;Ra=Ra+16|0;j=o;k=o+8|0;l=d+92|0;i=c[l>>2]|0;c[k>>2]=i;if(!i){i=c[d+20>>2]|0;c[j>>2]=c[d+16>>2];c[j+4>>2]=i;i=Bb(51598,j)|0;if(!i){n=7;Ra=o;return n|0}j=qd(c[d+12>>2]|0,i,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{d=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[k>>2]|0;c[l>>2]=i;if(j){n=j;Ra=o;return n|0}}k=i;do if(!(Vc(k,1)|0)){j=c[k+100>>2]|0;d=j+8|0;if(!(b[d>>1]&9216)){l=j;c[l>>2]=e;c[l+4>>2]=f;b[d>>1]=4;break}else{Pg(j,e,f);break}}while(0);if((g|0)==0|(Vc(k,2)|0)!=0){Gc(k)|0;if(!i)i=0;else n=19}else{i=yc((c[k+100>>2]|0)+40|0,g,h,0,0)|0;if(i|0?(m=c[k>>2]|0,c[m+64>>2]=i,Ne(m,i),m=c[k>>2]|0,(i|0)==3082|(a[m+81>>0]|0)!=0):0)og(m);Gc(k)|0;n=19}do if((n|0)==19){i=c[k>>2]|0;n=k+136|0;m=c[n+4>>2]|0;if((m|0)>0|(m|0)==0&(c[n>>2]|0)>>>0>0)hc(i,k);j=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;n=k+64|0;c[n>>2]=0;c[n+4>>2]=0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7;break}else{i=c[i+68>>2]&j;break}}while(0);Vc(k,2)|0;n=i;Ra=o;return n|0}function Ir(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;x=Ra;Ra=Ra+16|0;p=x+4|0;q=x;w=c[d>>2]|0;o=(w|0)!=0;a:do if(o){t=w+32|0;j=c[t>>2]|0;u=w+16|0;n=c[u>>2]|0;v=w+20|0;h=c[v>>2]|0;b:do if((h|0)>0){g=0;while(1){if((a[n+g>>0]|0)!=(a[e+g>>0]|0)){s=g;break b}g=g+1|0;if((g|0)>=(h|0)){s=g;break}}}else s=0;while(0);k=((s|0)<0)<<31>>31;m=0;g=s;h=k;do{m=m+1|0;g=bw(g|0,h|0,7)|0;h=L()|0}while(!((g|0)==0&(h|0)==0));r=f-s|0;i=((r|0)<0)<<31>>31;g=0;h=r;l=i;do{g=g+1|0;h=bw(h|0,l|0,7)|0;l=L()|0}while(!((h|0)==0&(l|0)==0));h=r+j+m+g|0;g=c[b+228>>2]|0;do if((h|0)>(g|0)){if(n|0)break a;d=nb(h)|0;c[w+36>>2]=d;if(!d){f=7;Ra=x;return f|0}else{g=c[u>>2]|0;break}}else g=n;while(0);b=w+36|0;if(g){m=(c[b>>2]|0)+j|0;l=m;n=s;while(1){g=n&255;h=l+1|0;a[l>>0]=g|-128;n=bw(n|0,k|0,7)|0;k=L()|0;if((n|0)==0&(k|0)==0)break;else l=h}a[l>>0]=g&127;j=j-m+h|0}l=(c[b>>2]|0)+j|0;k=l;m=r;while(1){g=m&255;h=k+1|0;a[k>>0]=g|-128;m=bw(m|0,i|0,7)|0;i=L()|0;if((m|0)==0&(i|0)==0)break;else k=h}a[k>>0]=g&127;j=h-l+j|0;ew((c[b>>2]|0)+j|0,e+s|0,r|0)|0;c[t>>2]=j+r;j=w+12|0;c[j>>2]=(c[j>>2]|0)+1;j=w+24|0;i=w+28|0;g=c[i>>2]|0;do if((c[j>>2]|0)<(f|0)){h=f<<1;if(mb()|0){f=7;Ra=x;return f|0}g=sb(g,(h|0)>0?h:0,0)|0;if(!g){f=7;Ra=x;return f|0}else{c[j>>2]=h;c[i>>2]=g;break}}while(0);c[u>>2]=g;ew(g|0,e|0,f|0)|0;c[v>>2]=f;f=0;Ra=x;return f|0}else g=c[b+228>>2]|0;while(0);j=nb(g+40|0)|0;c[p>>2]=j;g=j;if(!j){f=7;Ra=x;return f|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[j+28>>2]=0;c[j+32>>2]=11;c[j+36>>2]=j+40;if(o){c[q>>2]=c[w>>2];h=Ir(b,q,e,f)|0;i=c[q>>2]|0;if(!(c[w>>2]|0))c[w>>2]=i;c[w+4>>2]=g;c[j+8>>2]=c[w+8>>2];c[j>>2]=i;f=w+28|0;c[j+28>>2]=c[f>>2];c[j+24>>2]=c[w+24>>2];c[f>>2]=0}else{c[j+8>>2]=j;h=Ir(b,p,e,f)|0;g=c[p>>2]|0}c[d>>2]=g;f=h;Ra=x;return f|0}function Jr(d,e,f,g,h,i,j,k,l,m,n,o,p,q){d=d|0;e=e|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;q=q|0;var r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0;y=Ra;Ra=Ra+32|0;v=y+8|0;s=y;t=y+24|0;u=d+100|0;r=c[u>>2]|0;c[t>>2]=r;if(!r){r=c[d+20>>2]|0;c[s>>2]=c[d+16>>2];c[s+4>>2]=r;r=Bb(51725,s)|0;if(!r){x=7;Ra=y;return x|0}s=qd(c[d+12>>2]|0,r,-1,133,0,t,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](r);else{d=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r)}r=c[t>>2]|0;c[u>>2]=r;if(!s)t=r;else{x=s;Ra=y;return x|0}}else t=r;u=t;do if(!(Vc(u,1)|0)){r=c[u+100>>2]|0;s=r+8|0;if(!(b[s>>1]&9216)){d=r;c[d>>2]=e;c[d+4>>2]=f;b[s>>1]=4;break}else{Pg(r,e,f);break}}while(0);r=((g|0)<0)<<31>>31;do if(!(Vc(u,2)|0)){d=c[u+100>>2]|0;s=d+40|0;d=d+48|0;if(!(b[d>>1]&9216)){f=s;c[f>>2]=g;c[f+4>>2]=r;b[d>>1]=4;break}else{Pg(s,g,r);break}}while(0);do if(!(Vc(u,3)|0)){s=c[u+100>>2]|0;r=s+80|0;s=s+88|0;if(!(b[s>>1]&9216)){g=r;c[g>>2]=h;c[g+4>>2]=i;b[s>>1]=4;break}else{Pg(r,h,i);break}}while(0);do if(!(Vc(u,4)|0)){s=c[u+100>>2]|0;r=s+120|0;s=s+128|0;if(!(b[s>>1]&9216)){i=r;c[i>>2]=j;c[i+4>>2]=k;b[s>>1]=4;break}else{Pg(r,j,k);break}}while(0);do if((n|0)==0&(o|0)==0){if(!(Vc(u,5)|0)){s=c[u+100>>2]|0;r=s+160|0;s=s+168|0;if(!(b[s>>1]&9216)){v=r;c[v>>2]=l;c[v+4>>2]=m;b[s>>1]=4;break}else{Pg(r,l,m);break}}}else{r=v;c[r>>2]=l;c[r+4>>2]=m;r=v+8|0;c[r>>2]=n;c[r+4>>2]=o;r=Bb(54991,v)|0;if(!r){x=7;Ra=y;return x|0}else{Tc(u,5,r,-1,90,1)|0;break}}while(0);if((p|0)==0|(Vc(u,6)|0)!=0){Gc(u)|0;if(!t)r=0;else x=38}else{r=yc((c[u+100>>2]|0)+200|0,p,q,0,0)|0;if(r|0?(w=c[u>>2]|0,c[w+64>>2]=r,Ne(w,r),w=c[u>>2]|0,(r|0)==3082|(a[w+81>>0]|0)!=0):0)og(w);Gc(u)|0;x=38}do if((x|0)==38){r=c[u>>2]|0;x=u+136|0;w=c[x+4>>2]|0;if((w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0)hc(r,u);s=kc(u)|0;c[u+20>>2]=770837923;c[u+36>>2]=-1;c[u+40>>2]=0;a[u+146>>0]=2;c[u+44>>2]=0;c[u+32>>2]=1;a[u+147>>0]=-1;c[u+48>>2]=0;x=u+64|0;c[x>>2]=0;c[x+4>>2]=0;if((s|0)==3082|(a[r+81>>0]|0)!=0){og(r);r=7;break}else{r=c[r+68>>2]&s;break}}while(0);Vc(u,6)|0;x=r;Ra=y;return x|0}function Kr(a){a=a|0;var b=0,d=0,e=0;if(!a)return;a=c[a+8>>2]|0;Kr(c[a>>2]|0);if(!a)return;do{d=a;a=c[a+4>>2]|0;b=c[d+36>>2]|0;do if(!((b|0)==(d+40|0)|(b|0)==0))if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[d+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}}while((a|0)!=0);return}function Lr(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;l=Ra;Ra=Ra+48|0;j=l+32|0;i=l+24|0;h=l+16|0;g=l+8|0;e=l;k=l+40|0;Fr(b);do if(d|0){f=b+64|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[e>>2]=c[b+16>>2];c[e+4>>2]=d;d=Bb(51372,e)|0;if(!d){k=7;Ra=l;return k|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(d|0){d=c[f>>2]|0;m=f+136|0;e=c[m+4>>2]|0;if((e|0)>0|(e|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{d=c[d+68>>2]&e;if(!d)break;Ra=l;return d|0}}}while(0);f=b+68|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[g>>2]=c[b+16>>2];c[g+4>>2]=d;d=Bb(51400,g)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(d|0){e=c[f>>2]|0;m=f+136|0;g=c[m+4>>2]|0;if((g|0)>0|(g|0)==0&(c[m>>2]|0)>>>0>0)hc(e,f);d=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((d|0)==3082|(a[e+81>>0]|0)!=0){og(e);m=7;Ra=l;return m|0}else{d=c[e+68>>2]&d;if(!d)break;Ra=l;return d|0}}while(0);f=b+72|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[h>>2]=c[b+16>>2];c[h+4>>2]=d;d=Bb(51429,h)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;do if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;h=c[m+4>>2]|0;if((h|0)>0|(h|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}while(0);do if((d|0)==0&(a[b+234>>0]|0)!=0){f=b+76|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=d;d=Bb(51456,i)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d)d=0;else{d=c[f>>2]|0;m=f+136|0;i=c[m+4>>2]|0;if((i|0)>0|(i|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if(!((e|0)==3082|(a[d+81>>0]|0)!=0)){d=c[d+68>>2]&e;break}og(d);m=7;Ra=l;return m|0}}while(0);if(!((d|0)==0&(a[b+233>>0]|0)!=0)){m=d;Ra=l;return m|0}f=b+80|0;d=c[f>>2]|0;c[k>>2]=d;if(!d){d=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=d;d=Bb(51484,j)|0;if(!d){m=7;Ra=l;return m|0}e=qd(c[b+12>>2]|0,d,-1,133,0,k,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{m=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[k>>2]|0;c[f>>2]=d;if(e){m=e;Ra=l;return m|0}}f=d;Gc(f)|0;if(!d){m=0;Ra=l;return m|0}d=c[f>>2]|0;m=f+136|0;k=c[m+4>>2]|0;if((k|0)>0|(k|0)==0&(c[m>>2]|0)>>>0>0)hc(d,f);e=kc(f)|0;c[f+20>>2]=770837923;c[f+36>>2]=-1;c[f+40>>2]=0;a[f+146>>0]=2;c[f+44>>2]=0;c[f+32>>2]=1;a[f+147>>0]=-1;c[f+48>>2]=0;m=f+64|0;c[m>>2]=0;c[m+4>>2]=0;if((e|0)==3082|(a[d+81>>0]|0)!=0){og(d);m=7;Ra=l;return m|0}else{m=c[d+68>>2]&e;Ra=l;return m|0}return 0}function Mr(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,q=0,r=0,s=0;s=Ra;Ra=Ra+32|0;i=s+20|0;n=s+16|0;o=s+12|0;p=s+8|0;q=s+4|0;m=s;c[n>>2]=0;c[o>>2]=0;c[p>>2]=0;c[m>>2]=0;g=c[a+36>>2]|0;r=c[g>>2]|0;if(!d){c[f>>2]=0;f=0;Ra=s;return f|0}c[i>>2]=0;d=Za[c[r+12>>2]&127](g,d,-1,i)|0;do if(!d){c[c[i>>2]>>2]=g;if((c[r>>2]|0)>0?(h=Xa[c[r+24>>2]&255](c[i>>2]|0,b)|0,h|0):0){Wa[c[r+16>>2]&127](c[i>>2]|0)|0;c[i>>2]=0;d=h;break}l=c[i>>2]|0;i=c[r+20>>2]|0;j=a+256|0;k=a+252|0;d=$a[i&127](l,q,m,n,o,p)|0;a:do if(!d){b=0;do{h=c[p>>2]|0;b=(h|0)<(b|0)?b:h+1|0;d=c[q>>2]|0;g=c[m>>2]|0;if((h|0)<0|(d|0)==0|(g|0)<1){d=1;break a}d=Nr(a,e,h,(c[j>>2]|0)+4|0,d,g)|0;if(d|0)break a;h=1;while(1){if((h|0)>=(c[k>>2]|0))break;d=c[j>>2]|0;g=c[d+(h*24|0)>>2]|0;if((c[m>>2]|0)<(g|0))d=0;else d=Nr(a,e,c[p>>2]|0,d+(h*24|0)+4|0,c[q>>2]|0,g)|0;if(!d)h=h+1|0;else break a}d=$a[i&127](l,q,m,n,o,p)|0}while((d|0)==0)}else b=0;while(0);Wa[c[r+16>>2]&127](l)|0;c[f>>2]=(c[f>>2]|0)+b;f=(d|0)==101?0:d;Ra=s;return f|0}while(0);f=d;Ra=s;return f|0}function Nr(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=Ra;Ra=Ra+16|0;p=r+4|0;q=r;c[q>>2]=0;a:do if((((f|0)!=0?(m=f+16|0,(c[m>>2]|0)!=0):0)?(k=Xa[(a[f>>0]<<24>>24==1?154:155)&255](g,h)|0,k=(c[f+12>>2]|0)+-1&k,l=c[m>>2]|0,(l|0)!=0):0)?(j=c[l+(k<<3)>>2]|0,n=(a[f>>0]|0)==1?79:80,i=c[l+(k<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[n&127](c[i+12>>2]|0,c[i+16>>2]|0,g,h)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0)){o=8;break a}}i=c[i+8>>2]|0;c[p>>2]=i;if(!i)i=p;else{n=b+264|0;c[n>>2]=-20-h-(c[i>>2]|0)+(c[n>>2]|0);i=p}}else o=8;while(0);if((o|0)==8){c[p>>2]=0;i=p}o=b+272|0;if(wr(p,c[o>>2]|0,c[o+4>>2]|0,d,((d|0)<0)<<31>>31,e,((e|0)<0)<<31>>31,q)|0?(o=c[p>>2]|0,(o|0)==(Ep(f,g,h,o)|0)):0){i=c[i>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[q>>2]=7;q=7;Ra=r;return q|0}i=c[q>>2]|0;if(i|0){q=i;Ra=r;return q|0}q=b+264|0;c[q>>2]=h+20+(c[c[p>>2]>>2]|0)+(c[q>>2]|0);q=0;Ra=r;return q|0} function Ll(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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;ra=Ra;Ra=Ra+160|0;ba=ra+8|0;A=ra;ma=ra+64|0;na=ra+12|0;oa=h+80|0;da=c[f>>2]|0;y=j+64|0;_=c[y>>2]|0;v=h+4|0;ea=c[v>>2]|0;p=a[j+44>>0]|0;fa=p&255;n=ea+8+(fa*72|0)|0;ia=c[ea+8+(fa*72|0)+40>>2]|0;o=c[h+492>>2]|0;a:do if((o|0)>0){m=0;while(1){if((c[h+496+(m<<2)>>2]|0)==(ia|0))break;m=m+1|0;if((m|0)>=(o|0)){m=0;o=0;break a}}m=cw(1,0,m|0)|0;o=L()|0}else{m=0;o=0}while(0);qa=j+72|0;w=qa;c[w>>2]=~m&k;c[w+4>>2]=~o&l;w=h+64|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,i|0)|0;L()|0;aa=w&1;q=f+56|0;pa=c[q>>2]|0;z=pa+-1|0;Q=j+16|0;c[Q>>2]=z;ca=j+12|0;c[ca>>2]=z;pa=pa+-2|0;c[q>>2]=pa;D=j+24|0;c[D>>2]=pa;do if(p<<24>>24?a[ea+8+(fa*72|0)+36>>0]&8:0){o=f+44|0;m=(c[o>>2]|0)+1|0;c[o>>2]=m;c[j>>2]=m;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;$=c[g+104>>2]|0;a[$+(p*20|0)>>0]=70;b[$+(p*20|0)+2>>1]=0;c[$+(p*20|0)+4>>2]=0;c[$+(p*20|0)+8>>2]=m;c[$+(p*20|0)+12>>2]=0;c[$+(p*20|0)+16>>2]=0;a[$+(p*20|0)+1>>0]=0;break}else{Di(g,70,0,m,0)|0;break}}while(0);b:do if((i|0)>0){m=i;while(1){if(c[h+752+(m*80|0)>>2]|0)break b;o=m+-1|0;if((m|0)>1)m=o;else{m=o;break}}}else m=i;while(0);p=c[h+752+(m*80|0)+12>>2]|0;m=a[ea+8+(fa*72|0)+37>>0]|0;c:do if(!(m&16)){$=_+36|0;o=c[$>>2]|0;if(o&1024|0){r=b[_+40>>1]|0;t=r&65535;m=t+2|0;n=f+32|0;o=c[n>>2]|0;p=f+28|0;q=c[p>>2]|0;if((q|0)<(m|0)){ba=f+44|0;u=c[ba>>2]|0;c[ba>>2]=u+m;u=u+1|0}else{c[n>>2]=m+o;c[p>>2]=q-m;u=o}m=c[ca>>2]|0;i=r<<16>>16==0;if(i)p=m;else{q=u+2|0;r=_+48|0;p=0;do{n=q+p|0;o=c[(c[r>>2]|0)+(p<<2)>>2]|0;do if(o)if(!(b[o+12>>1]&1)){km(f,c[(c[o>>2]|0)+16>>2]|0,n,1);break}else{jm(f,o,j,p,aa,n)|0;m=c[Q>>2]|0;break}while(0);p=p+1|0}while((p|0)!=(t|0));p=m}m=c[_+24>>2]|0;o=g+108|0;n=c[o>>2]|0;C=g+112|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=m;c[ca+(n*20|0)+8>>2]=u;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,m,u,0)|0;m=u+1|0;n=c[o>>2]|0;if((c[C>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=70;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=t;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,70,t,m,0)|0;q=c[_+32>>2]|0;r=_+28|0;s=(a[r>>0]|0)==0?-1:-7;m=c[o>>2]|0;if((c[C>>2]|0)>(m|0)){c[o>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=9;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=ia;c[ca+(m*20|0)+8>>2]=p;c[ca+(m*20|0)+12>>2]=u;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,9,ia,p,u)|0;n=c[g>>2]|0;do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[o>>2]|0)+-1|0;n=c[g+104>>2]|0;p=n+(m*20|0)+1|0;if(a[p>>0]|0){Ei(g,n+(m*20|0)|0,q,s);break}if(q|0){c[n+(m*20|0)+16>>2]=q;a[p>>0]=s}}else kg(n,s,q);while(0);a[r>>0]=0;c[j+48>>2]=ia;a[j+45>>0]=(a[h+49>>0]|0)==0?60:-86;c[j+52>>2]=c[o>>2];if(i){E=0;break}B=_+48|0;w=_+30|0;x=da+81|0;y=j+60|0;z=ma+4|0;A=g+104|0;v=u+2|0;m=c[j+56>>2]|0;while(1){u=t;t=t+-1|0;i=c[(c[B>>2]|0)+(t<<2)>>2]|0;if((u|0)<17?(1<>1]|0)!=0:0)lm(j,i);else if(b[i+12>>1]&1){do if(!(a[x>>0]|0)){m=m+-1|0;n=c[(c[y>>2]|0)+(m*20|0)+4>>2]|0;if((n|0)<0)n=(c[o>>2]|0)+-1|0;if(!(a[(c[g>>2]|0)+81>>0]|0))n=(c[A>>2]|0)+(n*20|0)|0;else n=59308;q=a[n>>0]|0;r=c[n+4>>2]|0;s=c[n+8>>2]|0;n=c[n+12>>2]|0;p=c[o>>2]|0;if((c[C>>2]|0)>(p|0)){c[o>>2]=p+1;ca=c[A>>2]|0;a[ca+(p*20|0)>>0]=q;b[ca+(p*20|0)+2>>1]=0;c[ca+(p*20|0)+4>>2]=r;c[ca+(p*20|0)+8>>2]=s;c[ca+(p*20|0)+12>>2]=n;c[ca+(p*20|0)+16>>2]=0;a[ca+(p*20|0)+1>>0]=0;break}else{Di(g,q&255,r,s,n)|0;break}}while(0);p=ej(f,53,0,0)|0;if(p){q=p+12|0;c[q>>2]=c[(c[i>>2]|0)+12>>2];c[ma>>2]=0;c[z>>2]=0;n=oj(da,168,ma,0)|0;c[p+16>>2]=n;if(n|0){c[n+28>>2]=v+t;Tj(f,p,c[D>>2]|0,0)}c[q>>2]=0;ni(da,p)}}if((u|0)<=1){E=0;break c}}}if(!((o&256|0)==0|(o&5|0)==0)){q=c[c[_+48>>2]>>2]|0;p=f+44|0;m=(c[p>>2]|0)+1|0;c[p>>2]=m;p=jm(f,q,j,0,aa,m)|0;if(!((m|0)==0|(p|0)==(m|0))?(r=f+19|0,s=a[r>>0]|0,(s&255)<8):0){a[r>>0]=s+1<<24>>24;c[f+148+((s&255)<<2)>>2]=m}m=c[Q>>2]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=30;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=ia;c[da+(n*20|0)+8>>2]=m;c[da+(n*20|0)+12>>2]=p;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,30,ia,m,p)|0;a[j+45>>0]=-86;da=q+40|0;ca=qa;if(!((c[ca>>2]&c[da>>2]|0)==0?(c[ca+4>>2]&c[da+4>>2]|0)==0:0)){E=0;break}E=q+10|0;b[E>>1]=b[E>>1]|4;E=0;break}if((o&258|0)==258){if(!(o&32)){n=0;m=0}else{n=c[c[_+48>>2]>>2]|0;m=1}if(!(o&16))m=0;else m=c[(c[_+48>>2]|0)+(m<<2)>>2]|0;da=(aa|0)==0;i=da?m:n;n=da?n:m;do if(!n){m=aa<<2^36;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=p;c[da+(o*20|0)+12>>2]=0;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0;break}else{Di(g,m,ia,p,0)|0;break}}else{q=c[n>>2]|0;o=c[q+16>>2]|0;m=a[o>>0]|0;if(m<<24>>24==-88)m=a[o+38>>0]|0;switch(m<<24>>24){case -87:{m=o+20|0;ga=90;break}case -125:{m=c[o+20>>2]|0;ga=90;break}default:ga=95}if((ga|0)==90)if((c[c[m>>2]>>2]|0)<2)ga=95;else{m=f+19|0;n=a[m>>0]|0;if(!(n<<24>>24)){da=f+44|0;m=(c[da>>2]|0)+1|0;c[da>>2]=m}else{da=n+-1<<24>>24;a[m>>0]=da;m=c[f+148+((da&255)<<2)>>2]|0}c[ma>>2]=m;km(f,o,m,1);p=m;m=((a[q>>0]|0)+1&2|1)&255}if((ga|0)==95){p=Lj(f,o,ma)|0;lm(j,n);m=(d[q>>0]|0)+-54|0}m=a[44005+m>>0]|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;da=c[g+104>>2]|0;a[da+(o*20|0)>>0]=m;b[da+(o*20|0)+2>>1]=0;c[da+(o*20|0)+4>>2]=ia;c[da+(o*20|0)+8>>2]=z;c[da+(o*20|0)+12>>2]=p;c[da+(o*20|0)+16>>2]=0;a[da+(o*20|0)+1>>0]=0}else Di(g,m&255,ia,z,p)|0;m=c[ma>>2]|0;if(m|0?(t=f+19|0,u=a[t>>0]|0,(u&255)<8):0){a[t>>0]=u+1<<24>>24;c[f+148+((u&255)<<2)>>2]=m}}while(0);do if(!i){r=0;q=170}else{o=c[i>>2]|0;s=f+44|0;r=(c[s>>2]|0)+1|0;c[s>>2]=r;s=o+16|0;km(f,c[s>>2]|0,r,1);s=c[s>>2]|0;m=a[s>>0]|0;p=m<<24>>24==-88;if(p)n=a[s+38>>0]|0;else n=m;switch(n<<24>>24){case -87:{n=s+20|0;ga=112;break}case -125:{n=c[s+20>>2]|0;ga=112;break}default:ga=113}if((ga|0)==112)if((c[c[n>>2]>>2]|0)<2)ga=113;else ga=115;d:do if((ga|0)==113){switch(a[o>>0]|0){case 54:case 56:break;default:{ga=115;break d}}q=(aa<<1^2)+55|0}while(0);if((ga|0)==115)q=(aa<<1)+54|0;if(p)m=a[s+38>>0]|0;switch(m<<24>>24){case -87:{x=s+20|0;ga=121;break}case -125:{x=c[s+20>>2]|0;ga=121;break}default:{}}if((ga|0)==121?(c[c[x>>2]>>2]|0)>=2:0)break;lm(j,i)}while(0);o=g+108|0;m=c[o>>2]|0;a[j+45>>0]=5-aa;c[j+48>>2]=ia;c[j+52>>2]=m;if((q|0)==170){E=0;break}p=f+44|0;n=(c[p>>2]|0)+1|0;c[p>>2]=n;p=g+112|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-128;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=n;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,128,ia,n,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=q;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=r;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,q,r,z,n)|0;m=c[o>>2]|0;if((m|0)<=0){E=0;break}b[(c[g+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=83;E=0;break}if(!(o&512)){if(!(o&8192)){if(m&32){a[j+45>>0]=-86;E=0;o=g+108|0;break}a[j+45>>0]=a[44045+aa>>0]|0;c[j+48>>2]=ia;m=a[44047+aa>>0]|0;o=g+108|0;n=c[o>>2]|0;if((c[g+112>>2]|0)>(n|0)){da=n+1|0;c[o>>2]=da;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=m;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=ia;c[ca+(n*20|0)+8>>2]=p;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0;m=da}else m=(Di(g,m&255,ia,p,0)|0)+1|0;c[j+52>>2]=m;a[j+47>>0]=1;E=0;break}s=f+40|0;Z=c[s>>2]|0;c[s>>2]=Z+1;W=f+44|0;X=(c[W>>2]|0)+1|0;c[W>>2]=X;$=c[q>>2]|0;Y=$+-1|0;c[q>>2]=Y;V=c[ea+8+(fa*72|0)+16>>2]|0;aa=c[c[_+48>>2]>>2]|0;u=c[aa+28>>2]|0;a[j+45>>0]=66;c[j+48>>2]=X;_=h+46|0;m=a[_>>0]|0;if((m&255)>1){r=(m&255)-i|0;q=(r*72|0)+8|0;e:do if(!da){U=Sv(q|0,0,-1,-1)|0;T=L()|0;if(T>>>0>0|(T|0)==0&U>>>0>2147483390){qa=l;f=k;K(qa|0);Ra=ra;return f|0}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=627;break}p=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0>>0)c[14985]=q;o=59064;m=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&m>>>0>0){U=c[14978]|0;T=Tv(m|0,o|0,p|0,((p|0)<0)<<31>>31|0)|0;S=L()|0;c[14768]=((S|0)<0|(S|0)==0&T>>>0<=U>>>0)&1}m=Wa[c[29340>>2]&127](p)|0;if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}o=Wa[c[29352>>2]&127](m)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0<=(c[14987]|0)>>>0)break;c[14987]=o}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){qa=l;f=k;K(qa|0);Ra=ra;return f|0}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0>>0:0))){o=da+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}o=da+296|0;m=c[o>>2]|0;if(!m){m=da+292|0;break}else{c[o>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=627;break e}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=627}while(0);if((ga|0)==627)if(!m){qa=l;f=k;K(qa|0);Ra=ra;return f|0}q=r&255;c[m+4>>2]=q;c[m>>2]=q;q=m+8|0;E=q;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));p=c[v>>2]|0;if((r|0)>1){o=1;do{E=q+(o*72|0)|0;n=p+8+((d[j+(o*80|0)+44>>0]|0)*72|0)|0;D=E+72|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));o=o+1|0}while((o|0)!=(r|0));T=m;U=m}else{T=m;U=m}}else{U=c[v>>2]|0;T=U}S=h+44|0;if(!(b[S>>1]&16)){f:do if(!(c[V+36>>2]&32)){m=(c[W>>2]|0)+1|0;c[W>>2]=m;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;R=c[g+104>>2]|0;a[R+(o*20|0)>>0]=73;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=0;c[R+(o*20|0)+8>>2]=m;c[R+(o*20|0)+12>>2]=0;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0;break}else{Di(g,73,0,m,0)|0;break}}else{m=c[V+8>>2]|0;g:do if(!m)m=0;else while(1){R=m+55|0;if(((d[R>>0]|d[R+1>>0]<<8)&3)==2)break g;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);q=c[s>>2]|0;c[s>>2]=q+1;n=e[m+50>>1]|0;o=g+108|0;p=c[o>>2]|0;if((c[g+112>>2]|0)>(p|0)){c[o>>2]=p+1;R=c[g+104>>2]|0;a[R+(p*20|0)>>0]=113;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=q;c[R+(p*20|0)+8>>2]=n;c[R+(p*20|0)+12>>2]=0;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0}else Di(g,113,q,n,0)|0;n=c[f+8>>2]|0;o=Ij(f,m)|0;if(o){m=c[n>>2]|0;if(!(a[m+81>>0]|0)){R=c[n+104>>2]|0;m=(c[n+108>>2]|0)+-1|0;a[R+(m*20|0)+1>>0]=-9;c[R+(m*20|0)+16>>2]=o;m=q;break}if(c[m+480>>2]|0){m=q;break}R=(c[o>>2]|0)+-1|0;c[o>>2]=R;if(R|0){m=q;break}m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);m=q;break f}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;m=m+300|0;c[o>>2]=c[m>>2];c[m>>2]=o;m=q;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);m=q;break}else{m=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);m=q;break}}else m=q}while(0);P=(c[W>>2]|0)+1|0;c[W>>2]=P}else{P=0;m=0}o=g+108|0;n=c[o>>2]|0;R=g+112|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;Q=c[g+104>>2]|0;a[Q+(n*20|0)>>0]=70;b[Q+(n*20|0)+2>>1]=0;c[Q+(n*20|0)+4>>2]=0;c[Q+(n*20|0)+8>>2]=X;c[Q+(n*20|0)+12>>2]=0;c[Q+(n*20|0)+16>>2]=0;a[Q+(n*20|0)+1>>0]=0;Q=n}else Q=Di(g,70,0,X,0)|0;i=h+92|0;n=c[i>>2]|0;if((n|0)>1){t=h+100|0;s=0;p=0;do{q=c[t>>2]|0;O=q+(s*48|0)|0;r=c[O>>2]|0;do if((O|0)!=(aa|0)?(b[q+(s*48|0)+10>>1]&6)==0:0){if(!(b[q+(s*48|0)+12>>1]&8191))break;if(!r)n=0;else n=dk(da,r,0,0)|0;p=Xk(da,p,n)|0;n=c[i>>2]|0}while(0);s=s+1|0}while((s|0)<(n|0));if(p)O=ej(f,65580,0,p)|0;else O=0}else O=0;N=b[S>>1]&1024|32;nk(f,1,44021,A);M=u+12|0;if((c[M>>2]|0)>0){A=u+20|0;B=(O|0)==0;C=O+12|0;D=V+36|0;E=V+8|0;F=g+104|0;G=f+19|0;H=f+32|0;I=f+28|0;p=f+212|0;J=f+8|0;n=0;r=0;q=0;do{s=c[A>>2]|0;do if((c[s+(n*48|0)+20>>2]|0)==(ia|0))ga=679;else{if(b[s+(n*48|0)+12>>1]&1024){ga=679;break}n=n+1|0}while(0);do if((ga|0)==679){ga=0;s=c[s+(n*48|0)>>2]|0;if(!B){c[C>>2]=s;s=O}z=n+1|0;c[ba>>2]=z;nk(f,1,44036,ba);y=ql(f,T,s,0,0,N,Z)|0;if(!y){n=z;break}Kl(f,T,y+752|0,0);do if(!(b[S>>1]&16)){v=(n|0)==((c[M>>2]|0)+-1|0)?-1:n;if(!(c[D>>2]&32)){Vj(g,V,ia,-1,P);s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;x=c[F>>2]|0;a[x+(s*20|0)>>0]=42;b[x+(s*20|0)+2>>1]=0;c[x+(s*20|0)+4>>2]=m;c[x+(s*20|0)+8>>2]=0;c[x+(s*20|0)+12>>2]=P;c[x+(s*20|0)+16>>2]=0;a[x+(s*20|0)+1>>0]=0}else s=Di(g,42,m,0,P)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;x=c[F>>2]|0;a[x+(s*20|0)+1>>0]=-3;c[x+(s*20|0)+16>>2]=v;break}s=c[E>>2]|0;h:do if(!s)s=0;else while(1){x=s+55|0;if(((d[x>>0]|d[x+1>>0]<<8)&3)==2)break h;s=c[s+20>>2]|0;if(!s){s=0;break}}while(0);u=b[s+50>>1]|0;w=u&65535;x=u<<16>>16==1;do if(x){i=a[G>>0]|0;if(!(i<<24>>24)){i=(c[W>>2]|0)+1|0;c[W>>2]=i;ga=701;break}else{i=i+-1<<24>>24;a[G>>0]=i;i=c[f+148+((i&255)<<2)>>2]|0;ga=701;break}}else{i=c[H>>2]|0;t=c[I>>2]|0;if((t|0)<(w|0)){i=c[W>>2]|0;c[W>>2]=i+w;i=i+1|0}else{c[H>>2]=i+w;c[I>>2]=t-w}if(!(u<<16>>16))u=i;else ga=701}while(0);if((ga|0)==701){ga=0;t=s+4|0;s=0;do{Vj(g,V,ia,b[(c[t>>2]|0)+(s<<1)>>1]|0,s+i|0);s=s+1|0}while((s|0)!=(w|0));u=i}t=(v|0)!=0;if(t){s=c[o>>2]|0;if((c[R>>2]|0)>(s|0)){c[o>>2]=s+1;i=c[F>>2]|0;a[i+(s*20|0)>>0]=29;b[i+(s*20|0)+2>>1]=0;c[i+(s*20|0)+4>>2]=m;c[i+(s*20|0)+8>>2]=0;c[i+(s*20|0)+12>>2]=u;c[i+(s*20|0)+16>>2]=0;a[i+(s*20|0)+1>>0]=0}else s=Di(g,29,m,0,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){i=c[F>>2]|0;a[i+(s*20|0)+1>>0]=-3;c[i+(s*20|0)+16>>2]=w}if((v|0)>-1)ga=710}else{s=0;ga=710}do if((ga|0)==710){ga=0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=92;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=u;c[v+(i*20|0)+8>>2]=w;c[v+(i*20|0)+12>>2]=P;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else Di(g,92,u,w,P)|0;i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;v=c[F>>2]|0;a[v+(i*20|0)>>0]=-124;b[v+(i*20|0)+2>>1]=0;c[v+(i*20|0)+4>>2]=m;c[v+(i*20|0)+8>>2]=P;c[v+(i*20|0)+12>>2]=u;c[v+(i*20|0)+16>>2]=0;a[v+(i*20|0)+1>>0]=0}else i=Di(g,132,m,P,u)|0;if(!(a[(c[g>>2]|0)+81>>0]|0)){v=c[F>>2]|0;a[v+(i*20|0)+1>>0]=-3;c[v+(i*20|0)+16>>2]=w}if(!t)break;i=c[o>>2]|0;if((i|0)<=0)break;b[(c[F>>2]|0)+((i+-1|0)*20|0)+2>>1]=16}while(0);if(!x){if((c[I>>2]|0)>=(w|0))break;c[I>>2]=w;c[H>>2]=u;break}if(!u)break;i=a[G>>0]|0;if((i&255)>=8)break;a[G>>0]=i+1<<24>>24;c[f+148+((i&255)<<2)>>2]=u}else s=0;while(0);i=c[o>>2]|0;if((c[R>>2]|0)>(i|0)){c[o>>2]=i+1;x=c[F>>2]|0;a[x+(i*20|0)>>0]=12;b[x+(i*20|0)+2>>1]=0;c[x+(i*20|0)+4>>2]=X;c[x+(i*20|0)+8>>2]=Y;c[x+(i*20|0)+12>>2]=0;c[x+(i*20|0)+16>>2]=0;a[x+(i*20|0)+1>>0]=0}else Di(g,12,X,Y,0)|0;if(s|0){i=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))s=(c[F>>2]|0)+(((s|0)<0?i+-1|0:s)*20|0)|0;else s=59308;c[s+8>>2]=i}r=(a[y+50>>0]|0)==0?r:1;s=c[y+816>>2]|0;do if(!(c[s+36>>2]&512))q=0;else{if(n|0?(c[s+32>>2]|0)!=(q|0):0){q=0;break}q=c[s+32>>2]|0;if(c[D>>2]&32|0?(x=q+55|0,((d[x>>0]|d[x+1>>0]<<8)&3)==2):0){q=0;break}}while(0);sl(y);n=c[p>>2]|0;if(!n)n=0;else{s=c[J>>2]|0;if((n|0)<0)n=(c[s+108>>2]|0)+-1|0;if(!(a[(c[s>>2]|0)+81>>0]|0))n=(c[s+104>>2]|0)+(n*20|0)|0;else n=59308;n=c[n+8>>2]|0}c[p>>2]=n;n=z}while(0)}while((n|0)<(c[M>>2]|0))}else{r=0;q=0;p=f+212|0}m=c[p>>2]|0;if(!m)m=0;else{n=c[f+8>>2]|0;if((m|0)<0)m=(c[n+108>>2]|0)+-1|0;if(!(a[(c[n>>2]|0)+81>>0]|0))m=(c[n+104>>2]|0)+(m*20|0)|0;else m=59308;m=c[m+8>>2]|0}c[p>>2]=m;c[j+56>>2]=q;if(q|0)c[j+8>>2]=Z;if(O|0){c[O+12>>2]=0;ni(da,O)}n=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((Q|0)<0?n+-1|0:Q)*20|0)|0;else m=59308;c[m+4>>2]=n;m=c[ca>>2]|0;if((c[R>>2]|0)>(n|0)){c[o>>2]=n+1;ca=c[g+104>>2]|0;a[ca+(n*20|0)>>0]=11;b[ca+(n*20|0)+2>>1]=0;c[ca+(n*20|0)+4>>2]=0;c[ca+(n*20|0)+8>>2]=m;c[ca+(n*20|0)+12>>2]=0;c[ca+(n*20|0)+16>>2]=0;a[ca+(n*20|0)+1>>0]=0}else Di(g,11,0,m,0)|0;n=c[g+12>>2]|0;m=0-$|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,g,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[o>>2];i:do if(!((U|0)==0|(d[_>>0]|0)<2)){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break i}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[U>>2]=c[da>>2];c[da>>2]=U;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{da=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);if(r|0){E=0;break}lm(j,aa);E=0;break}M=b[_+24>>1]|0;t=b[_+26>>1]|0;u=b[_+28>>1]|0;Y=c[_+32>>2]|0;x=j+8|0;Z=c[x>>2]|0;X=h+44|0;if((b[X>>1]&1)!=0?(a[h+47>>0]|0)>0:0){i=(e[Y+50>>1]|0)>(M&65535);m=i&1;i=i&1}else{m=0;i=0}p=M&65535;n=t&65535;if(!(o&32)){v=0;n=p}else{v=c[(c[_+48>>2]|0)+(p<<2)>>2]|0;m=m>>>0>n>>>0?m:n;n=p+1|0}do if(o&16){s=c[(c[_+48>>2]|0)+(n<<2)>>2]|0;ba=u&65535;m=(m|0)>(ba|0)?m:ba;if(b[s+10>>1]&256){o=f+44|0;n=(c[o>>2]|0)+1|0;c[o>>2]=n;o=j+36|0;c[o>>2]=n;q=g+108|0;r=c[q>>2]|0;if((c[g+112>>2]|0)>(r|0)){c[q>>2]=r+1;ba=c[g+104>>2]|0;a[ba+(r*20|0)>>0]=70;b[ba+(r*20|0)+2>>1]=0;c[ba+(r*20|0)+4>>2]=1;c[ba+(r*20|0)+8>>2]=n;c[ba+(r*20|0)+12>>2]=0;c[ba+(r*20|0)+16>>2]=0;a[ba+(r*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;c[j+40>>2]=c[q>>2];ba=c[o>>2]<<1;c[o>>2]=ba;c[o>>2]=aa^(a[(c[Y+28>>2]|0)+p>>0]|0)==1|ba}if(!v){n=b[(c[Y+4>>2]|0)+(p<<1)>>1]|0;if(n<<16>>16>-1){if(a[(c[(c[Y+12>>2]|0)+4>>2]|0)+(n<<16>>16<<4)+12>>0]|0){o=i;break}}else if(n<<16>>16!=-2){o=i;break}o=1}else o=i}else{s=0;o=i}while(0);n=b[Y+50>>1]|0;if((M&65535)<(n&65535)?!(((w&1|0)!=0|0!=0)^(a[(c[Y+28>>2]|0)+p>>0]|0)==0):0)ga=152;else if(aa|0?n<<16>>16==M<<16>>16:0)ga=152;else{N=t;R=0;P=v;v=s;J=o}if((ga|0)==152){N=u;u=t&255;R=o;P=s;J=0}T=f+8|0;I=c[T>>2]|0;w=c[y>>2]|0;y=b[w+24>>1]|0;G=b[w+42>>1]|0;q=c[w+32>>2]|0;V=f+44|0;o=c[V>>2]|0;F=o+1|0;H=y&65535;z=m+H|0;c[V>>2]=o+z;o=c[f>>2]|0;q=gl(o,q)|0;j:do if(!q)U=0;else{r=(Eu(q)|0)+1|0;k:do if(!o){ba=Sv(r|0,0,-1,-1)|0;U=L()|0;if(U>>>0>0|(U|0)==0&ba>>>0>2147483390){U=0;break j}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](r)|0;ga=178;break}m=Wa[c[29356>>2]&127](r)|0;if((c[14985]|0)>>>0>>0)c[14985]=r;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){ba=c[14978]|0;U=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&U>>>0<=ba>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){U=0;break j}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[o+272>>2]|0){if(a[o+81>>0]|0){U=0;break j}}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){n=o+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}n=o+296|0;m=c[n>>2]|0;if(!m){m=o+292|0;break}else{c[n>>2]=c[m>>2];ga=o+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=178;break k}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(o,r,0)|0;ga=178}while(0);if((ga|0)==178)if(!m){U=0;break}ew(m|0,q|0,r|0)|0;U=m}while(0);l:do if(G<<16>>16){s=c[x>>2]|0;q=(aa|0)==0;m=aa<<2^36;i=I+108|0;n=c[i>>2]|0;t=I+112|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[I+104>>2]|0;a[ba+(n*20|0)>>0]=m;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=0;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,m,s,0,0)|0;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;E=c[I+104>>2]|0;a[E+(m*20|0)>>0]=11;E=E+(m*20|0)+1|0;D=E+19|0;do{a[E>>0]=0;E=E+1|0}while((E|0)<(D|0));o=m}else o=Di(I,11,0,0,0)|0;n=q?25:22;r=G&65535;m=c[i>>2]|0;if((c[t>>2]|0)>(m|0)){c[i>>2]=m+1;ba=c[I+104>>2]|0;a[ba+(m*20|0)>>0]=n;b[ba+(m*20|0)+2>>1]=0;c[ba+(m*20|0)+4>>2]=s;c[ba+(m*20|0)+8>>2]=0;c[ba+(m*20|0)+12>>2]=F;c[ba+(m*20|0)+16>>2]=0;a[ba+(m*20|0)+1>>0]=0}else m=Di(I,n,s,0,F)|0;do if(!(a[(c[I>>2]|0)+81>>0]|0)){ba=c[I+104>>2]|0;a[ba+(m*20|0)+1>>0]=-3;c[ba+(m*20|0)+16>>2]=r;ba=a[(c[I>>2]|0)+81>>0]|0;c[j+20>>2]=m;n=c[i>>2]|0;if(ba<<24>>24){m=59308;break}m=(c[I+104>>2]|0)+(((o|0)<0?n+-1|0:o)*20|0)|0}else{c[j+20>>2]=m;m=59308;n=c[i>>2]|0}while(0);c[m+8>>2]=n;q=I+104|0;m=0;while(1){o=m+F|0;if((c[t>>2]|0)>(n|0)){c[i>>2]=n+1;ba=c[q>>2]|0;a[ba+(n*20|0)>>0]=90;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=s;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=o;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0}else Di(I,90,s,m,o)|0;m=m+1|0;if((m|0)==(r|0))break l;n=c[i>>2]|0}}while(0);if((G&65535)<(y&65535)){C=w+48|0;t=(z|0)==1;w=(U|0)!=0;x=I+108|0;y=I+112|0;z=f+19|0;A=I+104|0;B=(U|0)==0;q=F;i=G&65535;while(1){r=c[(c[C>>2]|0)+(i<<2)>>2]|0;m=i+q|0;o=jm(f,r,j,i,aa,m)|0;do if((o|0)!=(m|0))if(!t){n=c[x>>2]|0;if((c[y>>2]|0)>(n|0)){c[x>>2]=n+1;ba=c[A>>2]|0;a[ba+(n*20|0)>>0]=79;b[ba+(n*20|0)+2>>1]=0;c[ba+(n*20|0)+4>>2]=o;c[ba+(n*20|0)+8>>2]=m;c[ba+(n*20|0)+12>>2]=0;c[ba+(n*20|0)+16>>2]=0;a[ba+(n*20|0)+1>>0]=0;break}else{Di(I,79,o,m,0)|0;break}}else{if(!q){q=o;break}m=a[z>>0]|0;if((m&255)>=8){q=o;break}a[z>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=q;q=o;break}while(0);m=e[r+12>>1]|0;m:do if(!(m&1)){if(m&256|0)break;s=c[(c[r>>2]|0)+16>>2]|0;n:do if(!(b[r+10>>1]&2048)){n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;o:do switch(n<<24>>24){case -110:case -111:case 110:case -109:break n;case -94:{if(c[m+4>>2]&1048576|0)break o;n=c[m+44>>2]|0;if(!n)break o;m=b[m+32>>1]|0;if(m<<16>>16<=-1)break n;if(a[(c[n+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0)break n;break}default:{}}while(0);m=q+i|0;n=c[ca>>2]|0;o=c[x>>2]|0;if((c[y>>2]|0)>(o|0)){c[x>>2]=o+1;ba=c[A>>2]|0;a[ba+(o*20|0)>>0]=50;b[ba+(o*20|0)+2>>1]=0;c[ba+(o*20|0)+4>>2]=m;c[ba+(o*20|0)+8>>2]=n;c[ba+(o*20|0)+12>>2]=0;c[ba+(o*20|0)+16>>2]=0;a[ba+(o*20|0)+1>>0]=0;break}else{Di(I,50,m,n,0)|0;break}}while(0);if(B)break;o=U+i|0;r=a[o>>0]|0;m=Xj(s)|0;if(r<<24>>24==0|m<<24>>24==0)if((m|r)<<24>>24==0?1:((m&255)+(r&255)&255)<<24>>24==65)ga=232;else ga=233;else if(r<<24>>24>66|m<<24>>24>66)ga=233;else ga=232;p:do if((ga|0)==232){ga=0;a[o>>0]=65}else if((ga|0)==233){ga=0;if(r<<24>>24==65)break;n=a[s>>0]|0;if((n+91&255)<2){m=s;do{m=c[m+12>>2]|0;n=a[m>>0]|0}while((n+91&255)<2)}else m=s;if(n<<24>>24==-88)n=a[m+38>>0]|0;switch(n<<24>>24){case -110:break p;case -109:if((r+-67&255)<2)break p;else break m;case -111:switch(r<<24>>24){case 67:case 69:break p;default:break m}case 110:if(r<<24>>24==66)break p;else break m;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0)break p;else break m;default:break m}}while(0);a[o>>0]=65}else{if(!(w&(c[(c[r>>2]|0)+4>>2]&2048|0)!=0))break;a[U+i>>0]=65}while(0);i=i+1|0;if((i|0)==(H|0)){F=q;break}}}G=(U|0)==0;q:do if(!(u<<16>>16==0|G)?(O=U+p|0,(O|0)!=0):0){q=(Eu(O)|0)+1|0;r:do if(!da){ca=Sv(q|0,0,-1,-1)|0;ba=L()|0;if(ba>>>0>0|(ba|0)==0&ca>>>0>2147483390){D=0;break q}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](q)|0;ga=272;break}o=Wa[c[29356>>2]&127](q)|0;if((c[14985]|0)>>>0>>0)c[14985]=q;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){ca=c[14978]|0;ba=Tv(m|0,n|0,o|0,((o|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&ba>>>0<=ca>>>0)&1}m=Wa[c[29340>>2]&127](o)|0;if(!m){D=0;break q}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n}else{if(c[da+272>>2]|0){if(a[da+81>>0]|0){D=0;break q}}else{do if(!(0<0|(0==0?(e[da+276>>1]|0)>>>0>>0:0))){n=da+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}n=da+296|0;m=c[n>>2]|0;if(!m){m=da+292|0;break}else{c[n>>2]=c[m>>2];ga=da+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=272;break r}}else m=da+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(da,q,0)|0;ga=272}while(0);if((ga|0)==272)if(!m){D=0;break}ew(m|0,O|0,q|0)|0;D=m}else D=0;while(0);E=c[Q>>2]|0;o=(P|0)!=0;if(o)m=(b[P+12>>1]&40)!=0;else m=1;B=m&1;C=(v|0)!=0;if(C)m=(b[v+12>>1]&40)!=0;else m=1;n=m&1;A=(M<<16>>16!=0|o)&1;do if(o){z=c[(c[P>>2]|0)+16>>2]|0;q=F+p|0;y=N&65535;km(f,z,q,y);if(b[P+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[z>>0]|0;if((o+91&255)<2){m=z;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=z;if(o<<24>>24==-88)o=a[m+38>>0]|0;s:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=293;break s}o=c[m+44>>2]|0;if(!o){ga=293;break s}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break s;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=293;break}default:ga=293}while(0);do if((ga|0)==293){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=q;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,q,E,0)|0;break}}while(0);t:do if(!G){x=U+p|0;if(!(N<<16>>16))break;i=z+38|0;t=z+20|0;w=z+20|0;s=0;while(1){o=a[z>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=303;break}case -125:{m=c[w>>2]|0;ga=303;break}default:m=z}u:do if((ga|0)==303){if((c[c[m>>2]>>2]|0)<2){m=z;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break u}while(0);m=c[(c[c[w>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=x+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=321;else ga=311;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=321;else ga=311;v:do if((ga|0)==311){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=321;break v}case -109:if((r+-67&255)<2){ga=321;break v}else break v;case -111:switch(r<<24>>24){case 67:case 69:{ga=321;break v}default:break v}case 110:if(r<<24>>24==66){ga=321;break v}else break v;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=321;break v}else break v;default:break v}}while(0);if((ga|0)==321){ga=0;a[q>>0]=65}s=s+1|0;if((s|0)==(y|0))break t}}while(0);o=y+p|0;m=a[z>>0]|0;if(m<<24>>24==-88)m=a[z+38>>0]|0;switch(m<<24>>24){case -87:{S=z+20|0;ga=328;break}case -125:{S=c[z+20>>2]|0;ga=328;break}default:{}}if((ga|0)==328?(c[c[S>>2]>>2]|0)>=2:0){x=A;y=o;w=1;m=0;break}lm(j,P);x=A;y=o;w=B;m=0}else{if(!(J<<24>>24)){x=A;y=p;w=B;m=0;break}m=F+p|0;o=g+108|0;q=c[o>>2]|0;if((c[g+112>>2]|0)>(q|0)){c[o>>2]=q+1;ca=c[g+104>>2]|0;a[ca+(q*20|0)>>0]=73;b[ca+(q*20|0)+2>>1]=0;c[ca+(q*20|0)+4>>2]=0;c[ca+(q*20|0)+8>>2]=m;c[ca+(q*20|0)+12>>2]=0;c[ca+(q*20|0)+16>>2]=0;a[ca+(q*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;x=1;y=p+1|0;w=0;m=J}while(0);m=y-(m&255)|0;t=c[T>>2]|0;w:do if((U|0)!=0&(m|0)>0){q=U;o=F;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}x:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break x;if((q|0)>2)q=m;else{ga=343;break}}}else ga=343;while(0);if((ga|0)==343)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break w}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break w;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break w}while(0);Ei(t,r,i,q)}while(0);ca=b[_+42>>1]|0;do if(!(ca<<16>>16!=0&(y|0)==(ca&65535|0))){r=g+108|0;do if(c[$>>2]&262144){m=c[r>>2]|0;o=g+112|0;if((c[o>>2]|0)>(m|0)){c[r>>2]=m+1;q=c[g+104>>2]|0;a[q+(m*20|0)>>0]=119;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=Z;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=0;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=o;break}else{Di(g,119,Z,0,0)|0;q=o;break}}else q=g+112|0;while(0);o=a[44009+(x<<2|aa|w<<1)>>0]|0;m=c[r>>2]|0;if((c[q>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[g+104>>2]|0;a[ca+(m*20|0)>>0]=o;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=Z;c[ca+(m*20|0)+8>>2]=E;c[ca+(m*20|0)+12>>2]=F;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(g,o&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;ca=c[g+104>>2]|0;a[ca+(m*20|0)+1>>0]=-3;c[ca+(m*20|0)+16>>2]=y}while(0);do if(C){y=c[(c[v>>2]|0)+16>>2]|0;w=F+p|0;x=u&65535;km(f,y,w,x);if(b[v+10>>1]&256){if(!(a[(c[g>>2]|0)+81>>0]|0))m=(c[g+104>>2]|0)+(((c[g+108>>2]|0)+-1|0)*20|0)|0;else m=59308;ca=c[j+36>>2]|0;c[m+12>>2]=ca>>>1;b[m+2>>1]=ca&1}o=a[y>>0]|0;if((o+91&255)<2){m=y;do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2)}else m=y;if(o<<24>>24==-88)o=a[m+38>>0]|0;y:do switch(o<<24>>24){case -110:case -111:case 110:case -109:break;case -94:{if(c[m+4>>2]&1048576|0){ga=385;break y}o=c[m+44>>2]|0;if(!o){ga=385;break y}m=b[m+32>>1]|0;if(m<<16>>16<=-1)break y;if(!(a[(c[o+4>>2]|0)+(m<<16>>16<<4)+12>>0]|0))ga=385;break}default:ga=385}while(0);do if((ga|0)==385){m=g+108|0;o=c[m>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[m>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=50;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=w;c[ca+(o*20|0)+8>>2]=E;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0;break}else{Di(g,50,w,E,0)|0;break}}while(0);z:do if(!((D|0)==0|u<<16>>16==0)){i=y+38|0;t=y+20|0;u=y+20|0;s=0;do{o=a[y>>0]|0;if(o<<24>>24==-88)m=a[i>>0]|0;else m=o;switch(m<<24>>24){case -87:{m=t;ga=394;break}case -125:{m=c[u>>2]|0;ga=394;break}default:m=y}A:do if((ga|0)==394){if((c[c[m>>2]>>2]|0)<2){m=y;break}do if(o<<24>>24!=-125){if((a[i>>0]|0)==-125)break;m=c[(c[t>>2]|0)+4+(s*20|0)>>2]|0;break A}while(0);m=c[(c[c[u>>2]>>2]|0)+4+(s*20|0)>>2]|0}while(0);q=D+s|0;r=a[q>>0]|0;o=Xj(m)|0;if(r<<24>>24==0|o<<24>>24==0)if(r<<24>>24==65|((o|r)<<24>>24==0?1:((o&255)+(r&255)&255)<<24>>24==65))ga=412;else ga=402;else if(r<<24>>24==65|r<<24>>24<67&o<<24>>24<67)ga=412;else ga=402;B:do if((ga|0)==402){ga=0;o=a[m>>0]|0;if((o+91&255)<2)do{m=c[m+12>>2]|0;o=a[m>>0]|0}while((o+91&255)<2);if(o<<24>>24==-88)o=a[m+38>>0]|0;switch(o<<24>>24){case -110:{ga=412;break B}case -109:if((r+-67&255)<2){ga=412;break B}else break B;case -111:switch(r<<24>>24){case 67:case 69:{ga=412;break B}default:break B}case 110:if(r<<24>>24==66){ga=412;break B}else break B;case -94:if((r+-67&255)<2&(b[m+32>>1]|0)<0){ga=412;break B}else break B;default:break B}}while(0);if((ga|0)==412){ga=0;a[q>>0]=65}s=s+1|0}while((s|0)!=(x|0));t=c[T>>2]|0;q=D;m=x;o=w;while(1){if((a[q>>0]|0)!=65){i=q;break}r=m+-1|0;o=o+1|0;q=q+1|0;if((m|0)>1)m=r;else{i=q;m=r;break}}C:do if((m|0)>1){q=m;while(1){m=q+-1|0;if((a[i+m>>0]|0)!=65)break C;if((q|0)>2)q=m;else{ga=421;break}}}else ga=421;while(0);if((ga|0)==421)if((m|0)==1)q=1;else break;r=t+108|0;m=c[r>>2]|0;if((c[t+112>>2]|0)>(m|0)){c[r>>2]=m+1;ca=c[t+104>>2]|0;a[ca+(m*20|0)>>0]=91;b[ca+(m*20|0)+2>>1]=0;c[ca+(m*20|0)+4>>2]=o;c[ca+(m*20|0)+8>>2]=q;c[ca+(m*20|0)+12>>2]=0;c[ca+(m*20|0)+16>>2]=0;a[ca+(m*20|0)+1>>0]=0}else m=Di(t,91,o,q,0)|0;o=c[t>>2]|0;if(a[o+81>>0]|0){if((q|0)==-12)break;kg(o,q,i);break}if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[t+104>>2]|0;r=o+(m*20|0)|0;do if((q|0)<=-1){s=o+(m*20|0)+1|0;if(a[s>>0]|0)break;if((q|0)==-3){c[o+(m*20|0)+16>>2]=i;a[s>>0]=-3;break z}c[o+(m*20|0)+16>>2]=i;a[s>>0]=q;if((q|0)!=-12)break z;ca=i+12|0;c[ca>>2]=(c[ca>>2]|0)+1;break z}while(0);Ei(t,r,i,q)}while(0);p=x+p|0;m=a[y>>0]|0;if(m<<24>>24==-88)m=a[y+38>>0]|0;switch(m<<24>>24){case -87:{W=y+20|0;ga=442;break}case -125:{W=c[y+20>>2]|0;ga=442;break}default:{}}if((ga|0)==442?(c[c[W>>2]>>2]|0)>=2:0){n=1;break}lm(j,v)}else{if(!(R<<24>>24))break;m=F+p|0;n=g+108|0;o=c[n>>2]|0;if((c[g+112>>2]|0)>(o|0)){c[n>>2]=o+1;ca=c[g+104>>2]|0;a[ca+(o*20|0)>>0]=73;b[ca+(o*20|0)+2>>1]=0;c[ca+(o*20|0)+4>>2]=0;c[ca+(o*20|0)+8>>2]=m;c[ca+(o*20|0)+12>>2]=0;c[ca+(o*20|0)+16>>2]=0;a[ca+(o*20|0)+1>>0]=0}else Di(g,73,0,m,0)|0;n=0;p=p+1|0}while(0);D:do if(!G){do if(da|0){if(c[da+480>>2]|0){Xd(da,U);break D}m=U;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;ca=da+300|0;c[U>>2]=c[ca>>2];c[ca>>2]=U;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](U);break}else{ca=Wa[c[29352>>2]&127](U)|0;c[14978]=(c[14978]|0)-ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](U);break}}while(0);E:do if(D|0){do if(da|0){if(c[da+480>>2]|0){Xd(da,D);break E}m=D;if((c[da+304>>2]|0)>>>0>m>>>0)break;if((c[da+308>>2]|0)>>>0<=m>>>0)break;da=da+300|0;c[D>>2]=c[da>>2];c[da>>2]=D;break E}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](D);break}else{da=Wa[c[29352>>2]&127](D)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](D);break}}while(0);o=g+108|0;m=c[o>>2]|0;c[j+52>>2]=m;do if(p|0){n=a[44017+(n|aa<<1)>>0]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=n;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=E;c[da+(m*20|0)+12>>2]=F;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,n&255,Z,E,F)|0;if(a[(c[g>>2]|0)+81>>0]|0)break;da=c[g+104>>2]|0;a[da+(m*20|0)+1>>0]=-3;c[da+(m*20|0)+16>>2]=p}while(0);do if(c[$>>2]&262144|0){m=c[o>>2]|0;if((c[g+112>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=119;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=1;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0;break}else{Di(g,119,Z,1,0)|0;break}}while(0);if((c[$>>2]&64|0)!=0?(b[X>>1]&32)==0:0)w=1;else ga=481;F:do if((ga|0)==481){p=Y+12|0;m=c[p>>2]|0;if(c[m+36>>2]&32|0){if((ia|0)==(Z|0)){w=0;break}m=c[m+8>>2]|0;G:do if(!m)m=0;else while(1){da=m+55|0;if(((d[da>>0]|d[da+1>>0]<<8)&3)==2)break G;m=c[m+20>>2]|0;if(!m){m=0;break}}while(0);x=m+50|0;i=b[x>>1]|0;p=i&65535;do if(i<<16>>16==1){n=f+19|0;p=a[n>>0]|0;if(!(p<<24>>24)){n=(c[V>>2]|0)+1|0;c[V>>2]=n;ga=554;break}else{ga=p+-1<<24>>24;a[n>>0]=ga;n=c[f+148+((ga&255)<<2)>>2]|0;ga=554;break}}else{q=f+32|0;n=c[q>>2]|0;r=f+28|0;s=c[r>>2]|0;if((s|0)<(p|0)){n=c[V>>2]|0;c[V>>2]=n+p;n=n+1|0}else{c[q>>2]=n+p;c[r>>2]=s-p}if(i<<16>>16){ga=554;break}q=0;p=g+112|0}while(0);if((ga|0)==554){t=m+4|0;u=Y+52|0;p=g+112|0;v=Y+4|0;w=g+104|0;i=0;do{r=b[(c[t>>2]|0)+(i<<1)>>1]|0;m=b[u>>1]|0;H:do if(!(m<<16>>16))m=-1;else{s=c[v>>2]|0;q=m&65535;m=0;while(1){if((b[s+(m<<1)>>1]|0)==r<<16>>16)break H;m=m+1|0;if(m>>>0>=q>>>0){m=-1;break}}}while(0);m=m<<16>>16;q=i+n|0;r=c[o>>2]|0;if((c[p>>2]|0)>(r|0)){c[o>>2]=r+1;da=c[w>>2]|0;a[da+(r*20|0)>>0]=90;b[da+(r*20|0)+2>>1]=0;c[da+(r*20|0)+4>>2]=Z;c[da+(r*20|0)+8>>2]=m;c[da+(r*20|0)+12>>2]=q;c[da+(r*20|0)+16>>2]=0;a[da+(r*20|0)+1>>0]=0}else Di(g,90,Z,m,q)|0;i=i+1|0;m=b[x>>1]|0}while(i>>>0<(m&65535)>>>0);q=m&65535}m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=28;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=ia;c[da+(m*20|0)+8>>2]=pa;c[da+(m*20|0)+12>>2]=n;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,28,ia,pa,n)|0;if(a[(c[g>>2]|0)+81>>0]|0){w=0;break}w=c[g+104>>2]|0;a[w+(m*20|0)+1>>0]=-3;c[w+(m*20|0)+16>>2]=q;w=0;break}m=e[X>>1]|0;do if(!(m&1024)){if(m&4096|0?(a[h+49>>0]|0)==1:0)break;m=c[h>>2]|0;u=c[m+8>>2]|0;t=u+108|0;n=c[t>>2]|0;if((c[u+112>>2]|0)>(n|0)){c[t>>2]=n+1;da=c[u+104>>2]|0;a[da+(n*20|0)>>0]=-122;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=Z;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=ia;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(u,134,Z,0,ia)|0;if(!(b[X>>1]&32)){w=0;break F}da=c[m+116>>2]|0;if(c[((da|0)==0?m:da)+80>>2]|0){w=0;break F}q=c[m>>2]|0;s=(c[p>>2]|0)+42|0;i=(b[s>>1]<<2)+4|0;I:do if(!q){da=Sv(i|0,0,-1,-1)|0;ca=L()|0;if(ca>>>0>0|(ca|0)==0&da>>>0>2147483390){w=0;break F}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](i)|0;ga=520;break}m=Wa[c[29356>>2]&127](i)|0;if((c[14985]|0)>>>0>>0)c[14985]=i;p=59064;n=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&n>>>0>0){da=c[14978]|0;ca=Tv(n|0,p|0,m|0,((m|0)<0)<<31>>31|0)|0;ba=L()|0;c[14768]=((ba|0)<0|(ba|0)==0&ca>>>0<=da>>>0)&1}n=Wa[c[29340>>2]&127](m)|0;if(!n){w=0;break F}m=Wa[c[29352>>2]&127](n)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0){r=n;break}c[14987]=m;r=n}else{if(c[q+272>>2]|0){if(a[q+81>>0]|0){w=0;break F}}else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){n=q+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}n=q+296|0;m=c[n>>2]|0;if(!m){m=q+292|0;break}else{c[n>>2]=c[m>>2];ga=q+284|0;c[ga>>2]=(c[ga>>2]|0)+1;ga=520;break I}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(q,i,0)|0;ga=520}while(0);if((ga|0)==520)if(!m){w=0;break F}else r=m;gw(r|0,0,i|0)|0;c[r>>2]=b[s>>1];m=b[Y+52>>1]|0;if((m&65535)>1){q=c[Y+4>>2]|0;p=(m&65535)+-1|0;m=0;do{n=b[q+(m<<1)>>1]|0;if(n<<16>>16>-1){m=m+1|0;c[r+((n<<16>>16)+1<<2)>>2]=m}else m=m+1|0}while((m|0)<(p|0))}n=c[u>>2]|0;if(!(a[n+81>>0]|0)){m=(c[t>>2]|0)+-1|0;n=c[u+104>>2]|0;p=n+(m*20|0)+1|0;if(!(a[p>>0]|0)){c[n+(m*20|0)+16>>2]=r;a[p>>0]=-15;w=0;break F}else{Ei(u,n+(m*20|0)|0,r,-15);w=0;break F}}do if(n|0){if(c[n+480>>2]|0){Xd(n,r);w=0;break F}m=r;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;w=n+300|0;c[r>>2]=c[w>>2];c[w>>2]=r;w=0;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);w=0;break F}else{w=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);w=0;break F}}while(0);p=(c[V>>2]|0)+1|0;c[V>>2]=p;m=c[o>>2]|0;n=g+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=-121;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=Z;c[da+(m*20|0)+8>>2]=p;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else Di(g,135,Z,p,0)|0;m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;w=c[g+104>>2]|0;a[w+(m*20|0)>>0]=31;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=ia;c[w+(m*20|0)+8>>2]=0;c[w+(m*20|0)+12>>2]=p;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=0;break}else{Di(g,31,ia,0,p)|0;w=0;break}}while(0);do if(!(c[j>>2]|0)){if(b[X>>1]&32)break;r=c[Y+40>>2]|0;do if(r|0){c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[ma+4>>2]=147;c[ma+24>>2]=na;c[na+4>>2]=ia;c[na+8>>2]=Z;if((c[r>>2]|0)<=0)break;s=Y+4|0;i=na+12|0;t=h+16|0;u=h+8|0;v=h+12|0;q=0;do{J:do if((b[(c[s>>2]|0)+(q<<1)>>1]|0)==-2){c[i>>2]=q;c[na>>2]=c[r+4+(q*20|0)>>2];m=c[t>>2]|0;if(m|0)_j(ma,m)|0;n=c[u>>2]|0;K:do if(n|0){m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break K;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);n=c[v>>2]|0;if(!n)break;m=c[n>>2]|0;if((m|0)<=0)break;n=n+4|0;while(1){p=c[n>>2]|0;if(p|0?_j(ma,p)|0:0)break J;if((m|0)>1){m=m+-1|0;n=n+20|0}else break}}while(0);q=q+1|0}while((q|0)<(c[r>>2]|0))}while(0)}while(0);m=c[Y+36>>2]|0;if(m|0)mm(m,ia,oa);m=c[$>>2]|0;do if(!(m&4096)){n=j+45|0;if(!aa){a[n>>0]=5;break}else{a[n>>0]=4;break}}else a[j+45>>0]=-86;while(0);c[j+48>>2]=Z;a[j+46>>0]=m>>>16&1;if(!(m&15))a[j+47>>0]=1;E=w?0:Y}else{q=c[ea+8+(fa*72|0)+28>>2]|0;m=c[ea+8+(fa*72|0)+24>>2]|0;o=g+108|0;n=c[o>>2]|0;p=g+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;da=c[g+104>>2]|0;a[da+(n*20|0)>>0]=13;b[da+(n*20|0)+2>>1]=0;c[da+(n*20|0)+4>>2]=q;c[da+(n*20|0)+8>>2]=0;c[da+(n*20|0)+12>>2]=m;c[da+(n*20|0)+16>>2]=0;a[da+(n*20|0)+1>>0]=0}else Di(g,13,q,0,m)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;da=c[g+104>>2]|0;a[da+(m*20|0)>>0]=14;b[da+(m*20|0)+2>>1]=0;c[da+(m*20|0)+4>>2]=q;c[da+(m*20|0)+8>>2]=z;c[da+(m*20|0)+12>>2]=0;c[da+(m*20|0)+16>>2]=0;a[da+(m*20|0)+1>>0]=0}else m=Di(g,14,q,z,0)|0;c[j+52>>2]=m;a[j+45>>0]=11;E=0}while(0);H=h+100|0;I=h+92|0;D=ea+8+(fa*72|0)+36|0;w=h+50|0;x=j+4|0;y=na+4|0;z=ma+4|0;A=ma+24|0;v=ma+20|0;B=j+36|0;F=g+112|0;G=g+104|0;m=(E|0)==0?2:1;while(1){n=c[I>>2]|0;if((n|0)<=0){ga=813;break}C=(m|0)==1;u=(m|0)<3;m=0;t=c[H>>2]|0;while(1){i=t+10|0;p=b[i>>1]|0;L:do if(!(p&6)){h=t+40|0;fa=qa;if(!((c[fa>>2]&c[h>>2]|0)==0?(c[fa+4>>2]&c[h+4>>2]|0)==0:0)){a[w>>0]=1;break}s=c[t>>2]|0;if(a[D>>0]&8?(c[s+4>>2]&1|0)==0:0)break;do if(C){h=c[x>>2]|0;c[ma>>2]=0;c[ma+4>>2]=0;c[ma+8>>2]=0;c[ma+12>>2]=0;c[ma+16>>2]=0;c[ma+20>>2]=0;c[y>>2]=h;c[na>>2]=E;c[z>>2]=148;c[A>>2]=na;if((s|0)!=0?(_j(ma,s)|0,(a[v>>0]|0)!=0):0){m=2;break L}else{ga=797;break}}else if(u)ga=797;while(0);if((ga|0)==797){ga=0;p=b[i>>1]|0;if(p&4096){m=(m|0)==0?3:m;break}}if((p&512)!=0?(ha=c[B>>2]|0,(ha|0)!=0):0){q=(ha<<1&2)+18|0;r=ha>>>1;p=c[o>>2]|0;if((c[F>>2]|0)>(p|0)){c[o>>2]=p+1;h=c[G>>2]|0;a[h+(p*20|0)>>0]=q;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=r;c[h+(p*20|0)+8>>2]=0;c[h+(p*20|0)+12>>2]=0;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else p=Di(g,q,r,0,0)|0;Tj(f,s,pa,16);if(p|0){q=c[o>>2]|0;if(!(a[(c[g>>2]|0)+81>>0]|0))p=(c[G>>2]|0)+(((p|0)<0?q+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=q}}else Tj(f,s,pa,16);b[i>>1]=b[i>>1]|4}while(0);if((n|0)>1){t=t+48|0;n=n+-1|0}else break}if((m|0)<=0){ga=812;break}}if((ga|0)==812){m=c[I>>2]|0;if((m|0)>0){i=ma+4|0;t=ma+12|0;u=ma+16|0;v=ma+8|0;w=ma+20|0;x=ma+24|0;y=ma+28|0;z=ma+17|0;A=ma+18|0;B=ma+72|0;C=na+12|0;s=c[H>>2]|0;while(1){do if((((((b[s+10>>1]&6)==0?(ha=e[s+12>>1]|0,!((ha&130|0)==0|(ha&2048|0)==0)):0)?(c[s+20>>2]|0)==(ia|0):0)?(c[j>>2]|0)==0:0)?(ja=c[s>>2]|0,ka=c[s+28>>2]|0,c[ma>>2]=oa,c[i>>2]=oa,c[t>>2]=0,a[u>>0]=0,c[v>>2]=0,c[w>>2]=131,c[x>>2]=0,c[y>>2]=ia,a[z>>0]=1,a[A>>0]=1,(ka|0)!=-2):0)?(b[B>>1]=ka,la=Tl(ma)|0,la|0):0){p=0;n=la;while(1){r=n+32|0;q=c[r>>2]|0;r=c[r+4>>2]|0;if((q&k|0)==0&(r&l|0)==0){if((q|0)==0&(r|0)==0?b[n+12>>1]&130:0){ga=825;break}p=(p|0)==0?n:p}n=Tl(ma)|0;if(!n){ga=829;break}}if((ga|0)==825)ga=0;else if((ga|0)==829){ga=0;if(!p)break;else n=p}if(b[n+10>>1]&4)break;if(b[n+12>>1]&1){n=c[n>>2]|0;if((c[n+4>>2]&2048|0)!=0?(c[c[c[n+20>>2]>>2]>>2]|0)>1:0)break}else n=c[n>>2]|0;E=na;D=E+52|0;do{c[E>>2]=c[n>>2];E=E+4|0;n=n+4|0}while((E|0)<(D|0));c[C>>2]=c[ja+12>>2];Tj(f,na,pa,16);break}while(0);if((m|0)>1){s=s+48|0;m=m+-1|0}else{m=j;break}}}else ga=813}if((ga|0)==813)m=j;n=c[m>>2]|0;if(n|0){m=c[o>>2]|0;c[j+28>>2]=m;if((c[F>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[G>>2]|0;a[j+(m*20|0)>>0]=70;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=1;c[j+(m*20|0)+8>>2]=n;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(g,70,1,n,0)|0;m=c[I>>2]|0;if((m|0)>0){o=c[H>>2]|0;p=0;while(1){n=o+10|0;if((b[n>>1]&6)==0?(j=o+40|0,g=qa,(c[g>>2]&c[j>>2]|0)==0?(c[g+4>>2]&c[j+4>>2]|0)==0:0):0){Tj(f,c[o>>2]|0,pa,16);b[n>>1]=b[n>>1]|4;m=c[I>>2]|0}p=p+1|0;if((p|0)>=(m|0))break;else o=o+48|0}}}f=qa;qa=c[f+4>>2]|0;f=c[f>>2]|0;K(qa|0);Ra=ra;return f|0}function Ml(d,f,g){d=d|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;o=d+12|0;h=c[o>>2]|0;m=d+16|0;j=c[m>>2]|0;n=d+20|0;do if((h|0)<(j|0))m=h;else{k=c[n>>2]|0;l=c[c[c[d>>2]>>2]>>2]|0;j=j*96|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=13;else c[n>>2]=0;else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0>>0:0))){h=l+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}h=l+296|0;i=c[h>>2]|0;if(!i){h=l+292|0;break}else{c[h>>2]=c[i>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=14;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;p=13}while(0);if((p|0)==13){i=_d(l,j,0)|0;p=14}if((p|0)==14?(c[n>>2]=i,i|0):0){ew(i|0,k|0,(c[o>>2]|0)*48|0)|0;do if(!((k|0)==(d+24|0)|(k|0)==0)){if(c[l+480>>2]|0){Xd(l,k);break}j=k;if((c[l+304>>2]|0)>>>0<=j>>>0?(c[l+308>>2]|0)>>>0>j>>>0:0){j=l+300|0;c[k>>2]=c[j>>2];c[j>>2]=k;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{j=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);h=c[n>>2]|0;k=h;if((c[l+304>>2]|0)>>>0<=k>>>0?(c[l+308>>2]|0)>>>0>k>>>0:0)h=e[l+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[m>>2]=(h>>>0)/48|0;m=c[o>>2]|0;break}if(!((f|0)==0|(g&1)==0))ni(l,f);c[n>>2]=k;g=0;return g|0}while(0);l=c[n>>2]|0;c[o>>2]=m+1;b:do if(f){h=c[f+4>>2]|0;if(!(h&262144)){b[l+(m*48|0)+8>>1]=1;if(!(h&4096))break;while(1){if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0;if(!(h&4096))break b}}i=c[f+28>>2]|0;j=((i|0)<0)<<31>>31;if(i>>>0<8)if(i>>>0<2)i=-270;else{k=40;do{k=(k&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);k=k&65535;p=48}else{if(i>>>0>255){k=40;do{k=(k&65535)+40|0;p=i;i=bw(i|0,j|0,4)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>4095);k=k&65535}else k=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{k=(k&65535)+10&65535;p=i;i=bw(i|0,j|0,1)|0;o=j;j=L()|0}while(o>>>0>0|(o|0)==0&p>>>0>31);p=48}else p=48}if((p|0)==48)i=(k&65535)+65256+(e[3648+((i&7)<<1)>>1]|0)&65535;b[l+(m*48|0)+8>>1]=i;if(h&4096)do{if(!(h&262144))f=f+12|0;else f=(c[f+20>>2]|0)+4|0;f=c[f>>2]|0;if(!f){f=0;break b}h=c[f+4>>2]|0}while((h&4096|0)!=0)}else{b[l+(m*48|0)+8>>1]=1;f=0}while(0);c[l+(m*48|0)>>2]=f;b[l+(m*48|0)+10>>1]=g;c[l+(m*48|0)+4>>2]=d;c[l+(m*48|0)+16>>2]=-1;f=l+(m*48|0)+12|0;h=f+36|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(h|0));g=m;return g|0}function Nl(f,g,h){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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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;qa=Ra;Ra=Ra+16|0;q=qa;da=qa+8|0;ea=qa+4|0;p=c[g>>2]|0;la=c[p>>2]|0;ha=c[la>>2]|0;_=ha+81|0;if(a[_>>0]|0){Ra=qa;return}na=g+20|0;t=c[na>>2]|0;w=t+(h*48|0)|0;ga=p+488|0;oa=c[w>>2]|0;pa=oa+12|0;i=c[pa>>2]|0;if(!i){z=0;A=0}else{z=Pl(ga,i)|0;A=L()|0}u=a[oa>>0]|0;s=u&255;a:do switch(u<<24>>24){case 49:{if(ok(la,oa)|0){Ra=qa;return}i=oa+20|0;if(c[oa+4>>2]&2048|0){j=Ol(ga,c[i>>2]|0)|0;i=L()|0;break a}o=c[i>>2]|0;if((o|0)!=0?(j=c[o>>2]|0,(j|0)>0):0){n=0;m=j;j=0;i=0;do{k=c[o+4+(n*20|0)>>2]|0;if(!k){k=0;l=0}else{k=Pl(ga,k)|0;l=L()|0;m=c[o>>2]|0}j=k|j;i=l|i;n=n+1|0}while((n|0)<(m|0))}else{j=0;i=0}break}case 50:{j=0;i=0;break}default:{i=c[oa+16>>2]|0;if(!i){j=0;i=0}else{j=Pl(ga,i)|0;i=L()|0}}}while(0);m=t+(h*48|0)+32|0;c[m>>2]=j;c[m+4>>2]=i;c[ga>>2]=0;m=Pl(ga,oa)|0;n=L()|0;r=t+(h*48|0)+10|0;if(c[ga>>2]|0)b[r>>1]=b[r>>1]|4096;ka=oa+4|0;if(c[ka>>2]&1){j=b[oa+36>>1]|0;k=c[p+492>>2]|0;b:do if((k|0)>0){i=0;while(1){if((c[p+496+(i<<2)>>2]|0)==(j|0))break;i=i+1|0;if((i|0)>=(k|0)){k=0;l=0;break b}}k=cw(1,0,i|0)|0;l=L()|0}else{k=0;l=0}while(0);i=k|m;j=l|n;m=Sv(k|0,l|0,-1,-1)|0;n=L()|0;ja=bw(i|0,j|0,1)|0;ia=L()|0;if(ia>>>0>>0|(ia|0)==(l|0)&ja>>>0>>0){y=i;x=j;ja=m;ia=n}else{cd(la,43561,q);Ra=qa;return}}else{y=m;x=n;ja=0;ia=0}o=t+(h*48|0)+40|0;c[o>>2]=y;c[o+4>>2]=x;o=t+(h*48|0)+20|0;c[o>>2]=-1;c[t+(h*48|0)+16>>2]=-1;m=t+(h*48|0)+12|0;b[m>>1]=0;c:do switch(u<<24>>24){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{i=c[pa>>2]|0;d:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break d;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);j=c[oa+16>>2]|0;e:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break e;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);l=t+(h*48|0)+32|0;v=l;v=((c[v>>2]&z|0)==0?(c[v+4>>2]&A|0)==0:0)?8191:2048;k=c[t+(h*48|0)+24>>2]|0;if((k|0)>0)i=c[(c[i+20>>2]|0)+4+((k+-1|0)*20|0)>>2]|0;k=a[i>>0]|0;n=(s+-54|0)>>>0<4;if(n&k<<24>>24==-87){k=c[(c[i+20>>2]|0)+4>>2]|0;i=k;k=a[k>>0]|0}if(k<<24>>24!=-94){if((!((z|0)==0&(A|0)==0)?(R=Sv(z|0,A|0,-1,-1)|0,(R&z|0)==0&((L()|0)&A|0)==0):0)?Ql(f,z,A,da,i)|0:0){i=c[da>>2]|0;k=c[da+4>>2]|0;fa=51}}else{fa=c[i+28>>2]|0;c[da>>2]=fa;k=b[i+32>>1]|0;c[da+4>>2]=k;i=fa;fa=51}if((fa|0)==51){c[o>>2]=i;c[t+(h*48|0)+28>>2]=k;switch(u<<24>>24){case 49:{i=1;break}case 50:{i=256;break}case 45:{i=128;break}default:i=2<>1]=i&v}m=u<<24>>24==45;if(m)b[r>>1]=b[r>>1]|2048;do if(!j)i=w;else{k=c[l>>2]|0;l=c[l+4>>2]|0;i=a[j>>0]|0;if(n&i<<24>>24==-87){i=c[(c[j+20>>2]|0)+4>>2]|0;j=i;i=a[i>>0]|0}if(i<<24>>24!=-94){if((k|0)==0&(l|0)==0){i=w;break}R=Sv(k|0,l|0,-1,-1)|0;if(!((R&k|0)==0&((L()|0)&l|0)==0)){i=w;break}if(!(Ql(f,k,l,da,j)|0)){i=w;break}}else{c[da>>2]=c[j+28>>2];c[da+4>>2]=b[j+32>>1]}f:do if((c[o>>2]|0)>-1){if(!oa)s=0;else s=dk(ha,oa,0,0)|0;do if(!(a[_>>0]|0)){i=Ml(g,s,3)|0;if(!i)break;n=c[na>>2]|0;q=n+(i*48|0)|0;c[n+(i*48|0)+16>>2]=h;b[n+(i*48|0)+8>>1]=b[n+(h*48|0)+8>>1]|0;R=n+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=n+(i*48|0)+10|0;if(m)b[i>>1]=b[i>>1]|2048;i=n+(h*48|0)|0;R=n+(h*48|0)+10|0;b[R>>1]=b[R>>1]|8;if(b[(c[la>>2]|0)+76>>1]&128){r=0;break f}switch(a[s>>0]|0){case 45:case 53:break;default:{r=0;break f}}if(c[s+4>>2]&1|0){r=0;break f}m=s+12|0;j=c[m>>2]|0;Q=Xj(j)|0;l=s+16|0;k=c[l>>2]|0;R=Xj(k)|0;if(Q<<24>>24!=R<<24>>24?!(Q<<24>>24>66&R<<24>>24>66):0){r=0;break f}g:do if(!(c[j+4>>2]&256)){do if(k|0){if(!(c[k+4>>2]&256))break;j=Yi(la,k)|0;fa=87;break g}while(0);j=Yi(la,j)|0;if(j|0){fa=88;break}j=Yi(la,k)|0;fa=87}else{j=Yi(la,j)|0;fa=87}while(0);if((fa|0)==87?j|0:0)fa=88;do if((fa|0)==88){if((c[j+12>>2]|0)==78?(c[j+8>>2]|0)==0:0)break;k=c[l>>2]|0;j=Yi(la,c[m>>2]|0)|0;if(!j)j=c[(c[la>>2]|0)+8>>2]|0;k=Yi(la,k)|0;if(!k)k=c[(c[la>>2]|0)+8>>2]|0;m=c[j>>2]|0;k=c[k>>2]|0;R=a[m>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0;if(!(R<<24>>24==0|(j|0)!=0)){l=k;k=m;do{k=k+1|0;l=l+1|0;R=a[k>>0]|0;j=(d[208+(R&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(R<<24>>24==0|(j|0)!=0))}if(j|0){r=0;break f}}while(0);r=n+(h*48|0)+12|0;b[r>>1]=b[r>>1]|2048;r=2048;break f}else{if(!s)break;ni(ha,s)}while(0);Ra=qa;return}else{s=oa;i=w;q=w;r=0}while(0);o=s+16|0;k=(c[o>>2]|0)+4|0;l=c[k>>2]|0;m=l&256;p=s+12|0;n=c[p>>2]|0;j=n;do if((m|0)==(c[n+4>>2]&256|0)){if(m|0){c[k>>2]=l&-257;break}if(!(Yi(la,n)|0)){j=c[p>>2]|0;break}else{j=c[p>>2]|0;R=j+4|0;c[R>>2]=c[R>>2]|256;break}}while(0);R=c[o>>2]|0;c[o>>2]=j;c[p>>2]=R;j=a[s>>0]|0;if((j&255)>53)a[s>>0]=((j&255)+202^2)+54;c[q+20>>2]=c[da>>2];c[q+28>>2]=c[da+4>>2];j=q+32|0;c[j>>2]=ja|z;c[j+4>>2]=ia|A;j=q+40|0;c[j>>2]=y;c[j+4>>2]=x;j=a[s>>0]|0;switch(j<<24>>24){case 49:{j=1;break}case 50:{j=256;break}case 45:{j=128;break}default:j=2<<(j&255)+-53}b[q+12>>1]=j+r&(v&65535)}while(0);break}default:{switch(a[oa>>0]|0){case 48:{if((a[g+8>>0]|0)!=44){i=w;break c}k=c[oa+20>>2]|0;l=oa+36|0;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+4>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,57,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;i=i+(h*48|0)+14|0;a[i>>0]=(a[i>>0]|0)+1<<24>>24;i=c[pa>>2]|0;if(!i)j=0;else j=dk(ha,i,0,0)|0;i=c[k+24>>2]|0;if(!i)i=0;else i=dk(ha,i,0,0)|0;i=ej(la,55,j,i)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[ka>>2]&1;b[i+36>>1]=b[l>>1]|0}R=Ml(g,i,3)|0;Nl(f,g,R);i=c[na>>2]|0;c[i+(R*48|0)+16>>2]=h;b[i+(R*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;R=i+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;i=i+(h*48|0)|0;break c}case 43:break;default:{i=w;break c}}N=c[g>>2]|0;O=c[N>>2]|0;P=c[O>>2]|0;H=c[na>>2]|0;Q=c[H+(h*48|0)>>2]|0;h:do if(!P){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](416)|0;fa=146;break}i=Wa[c[29356>>2]&127](416)|0;if((c[14985]|0)>>>0<416)c[14985]=416;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){fa=c[14978]|0;J=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;I=L()|0;c[14768]=((I|0)<0|(I|0)==0&J>>>0<=fa>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(i){j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0){c[14987]=j;fa=148}else fa=148}else fa=147}else{if(c[P+272>>2]|0){if(a[P+81>>0]|0){fa=147;break}}else{do if((e[P+276>>1]|0)>=416){j=P+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}j=P+296|0;i=c[j>>2]|0;if(!i){i=P+292|0;break}else{c[j>>2]=c[i>>2];fa=P+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=146;break h}}else i=P+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(P,416,0)|0;fa=146}while(0);if((fa|0)==146)if(!i)fa=147;else fa=148;i:do if((fa|0)==147)c[H+(h*48|0)+28>>2]=0;else if((fa|0)==148){gw(i+8|0,0,408)|0;c[H+(h*48|0)+28>>2]=i;j=H+(h*48|0)+10|0;b[j>>1]=b[j>>1]|16;j=i+24|0;gw(j|0,0,384)|0;c[i>>2]=N;a[i+9>>0]=0;c[i+4>>2]=0;I=i+12|0;c[I>>2]=0;c[i+16>>2]=8;J=i+20|0;c[J>>2]=j;Il(i,Q,43);j=c[I>>2]|0;if((j|0)>0)do{G=j;j=j+-1|0;Nl(f,i,j)}while((G|0)>1);y=P+81|0;if(!(a[y>>0]|0)){j=c[I>>2]|0;if((j|0)>0){z=P+272|0;A=P+276|0;B=N+492|0;C=P+288|0;D=P+300|0;E=P+296|0;F=P+284|0;G=P+292|0;x=c[J>>2]|0;v=-1;l=-1;n=-1;o=-1;while(1){w=j;j=j+-1|0;m=x+12|0;u=b[m>>1]|0;j:do if(!(u&511)){do if(c[z>>2]|0)if(!(a[y>>0]|0))fa=164;else{n=0;o=0;p=v;break j}else{if((e[A>>1]|0)>=408){k=c[D>>2]|0;if(k|0){c[D>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}k=c[E>>2]|0;if(!k)k=G;else{c[E>>2]=c[k>>2];c[F>>2]=(c[F>>2]|0)+1;break}}else k=C;c[k>>2]=(c[k>>2]|0)+1;fa=164}while(0);if((fa|0)==164){fa=0;k=_d(P,408,0)|0}if(!k){n=0;o=0;p=v}else{c[x+28>>2]=k;n=x+10|0;b[n>>1]=b[n>>1]|32;b[m>>1]=1024;m=k+24|0;gw(m|0,0,384)|0;c[k>>2]=c[g>>2];a[k+9>>0]=0;n=k+4|0;c[n>>2]=0;o=k+12|0;c[o>>2]=0;c[k+16>>2]=8;p=k+20|0;c[p>>2]=m;Il(k,c[x>>2]|0,44);m=c[o>>2]|0;if((m|0)>0)do{u=m;m=m+-1|0;Nl(f,k,m)}while((u|0)>1);c[n>>2]=g;k:do if((a[y>>0]|0)==0?(K=c[o>>2]|0,(K|0)>0):0){q=c[p>>2]|0;r=0;k=0;m=0;while(1){switch(a[c[q>>2]>>0]|0){case 45:case 50:case 53:case 54:case 55:case 56:case 57:case 49:{fa=174;break}default:if((b[q+12>>1]|0)==64)fa=174}if((fa|0)==174){fa=0;o=c[q+20>>2]|0;p=c[B>>2]|0;l:do if((p|0)>0){n=0;while(1){if((c[N+496+(n<<2)>>2]|0)==(o|0))break;n=n+1|0;if((n|0)>=(p|0)){n=0;o=0;break l}}n=cw(1,0,n|0)|0;o=L()|0}else{n=0;o=0}while(0);k=n|k;m=o|m}r=r+1|0;if((r|0)>=(K|0))break k;else q=q+48|0}}else{k=0;m=0}while(0);n=0;o=0;p=k&v;l=m&l}}else{q=b[x+10>>1]|0;if(!(q&8)){m=c[x+20>>2]|0;s=c[B>>2]|0;r=(s|0)>0;m:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){p=0;t=0;break m}}p=cw(1,0,k|0)|0;t=L()|0}else{p=0;t=0}while(0);if(!(q&2))k=t;else{m=c[(c[J>>2]|0)+((c[x+16>>2]|0)*48|0)+20>>2]|0;n:do if(r){k=0;while(1){if((c[N+496+(k<<2)>>2]|0)==(m|0))break;k=k+1|0;if((k|0)>=(s|0)){k=0;m=0;break n}}k=cw(1,0,k|0)|0;m=L()|0}else{k=0;m=0}while(0);p=k|p;k=m|t}u=(u&2)==0;n=u?0:p&n;o=u?0:k&o;p=p&v;l=k&l}else p=v}while(0);k=(p|0)!=0|(l|0)!=0;if(!(k&(w|0)>1))break;else{x=x+48|0;v=p}}K=i+408|0;c[K>>2]=p;c[K+4>>2]=l;b[H+(h*48|0)+12>>1]=512;if(k)fa=198;else r=n}else{n=i+408|0;c[n>>2]=-1;c[n+4>>2]=-1;b[H+(h*48|0)+12>>1]=512;n=-1;o=-1;fa=198}o:do if((fa|0)==198){a[g+9>>0]=1;if((c[I>>2]|0)==2){j=0;k=c[J>>2]|0;while(1){m=j+1|0;if((b[k+12>>1]|0)!=1024)if(!j)j=k;else{r=n;break o}else{i=c[k+28>>2]|0;if((c[i+12>>2]|0)<=(j|0)){r=n;break o}j=(c[i+20>>2]|0)+(j*48|0)|0}if(!j){r=n;break o}l=0;while(1){if((b[k+60>>1]|0)==1024){i=c[k+76>>2]|0;if((c[i+12>>2]|0)<=(l|0))break;i=(c[i+20>>2]|0)+(l*48|0)|0;if(!i)break}else if(!l)i=k+48|0;else break;Rl(f,g,j,i);l=l+1|0;k=c[J>>2]|0}j=m}}else r=n}while(0);if(!((r|0)==0&(o|0)==0)?(R=N+492|0,M=c[I>>2]|0,(M|0)>0):0){n=M;i=c[J>>2]|0;while(1){k=n+-1|0;q=i+10|0;b[q>>1]=b[q>>1]&-65;q=c[i+20>>2]|0;if((q|0)!=-1){l=c[R>>2]|0;p:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(q|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break p}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)>=1){q:do if((l|0)==-2){j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=-2){fa=242;break q}if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}else{j=q;while(1){if((j|0)==(q|0)){if((c[i+28>>2]|0)!=(l|0)){fa=242;break q}M=c[i>>2]|0;K=Xj(c[M+16>>2]|0)|0;if(!(K<<24>>24==0|K<<24>>24==(Xj(c[M+12>>2]|0)|0)<<24>>24)){fa=242;break q}M=i+10|0;b[M>>1]=b[M>>1]|64}else{M=i+10|0;b[M>>1]=b[M>>1]&-65}if((k|0)<=0)break q;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);r:do if((fa|0)==242){i=c[I>>2]|0;if((i|0)<=0)break i;n=i;i=c[J>>2]|0;while(1){k=n+-1|0;p=i+10|0;b[p>>1]=b[p>>1]&-65;p=c[i+20>>2]|0;if((p|0)!=(q|0)){l=c[R>>2]|0;s:do if((l|0)>0){j=0;while(1){if((c[N+496+(j<<2)>>2]|0)==(p|0))break;j=j+1|0;if((j|0)>=(l|0)){j=0;l=0;break s}}j=cw(1,0,j|0)|0;l=L()|0}else{j=0;l=0}while(0);if(!((j&r|0)==0&(l&o|0)==0))break}if((n|0)>1){n=k;i=i+48|0}else break i}l=c[i+28>>2]|0;m=c[(c[i>>2]|0)+12>>2]|0;if((n|0)<1)break i;if((l|0)!=-2){j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=(l|0))break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}j=p;while(1){if((j|0)==(p|0)){if((c[i+28>>2]|0)!=-2)break i;if(bk(O,c[(c[i>>2]|0)+12>>2]|0,m,-1)|0)break i;R=c[i>>2]|0;M=Xj(c[R+16>>2]|0)|0;if(!(M<<24>>24==0|M<<24>>24==(Xj(c[R+12>>2]|0)|0)<<24>>24))break i;R=i+10|0;b[R>>1]=b[R>>1]|64}else{R=i+10|0;b[R>>1]=b[R>>1]&-65}if((k|0)<=0)break r;j=c[i+68>>2]|0;k=k+-1|0;i=i+48|0}}while(0);i=c[I>>2]|0;if((i|0)>0){k=0;j=0;m=c[J>>2]|0;while(1){l=i;i=i+-1|0;if(b[m+10>>1]&64){k=c[(c[m>>2]|0)+16>>2]|0;if(!k)k=0;else k=dk(P,k,0,0)|0;j=nj(c[c[N>>2]>>2]|0,j,k)|0;k=c[(c[m>>2]|0)+12>>2]|0}if((l|0)<=1)break;else m=m+48|0}if(!k)i=0;else i=dk(P,k,0,0)|0}else{j=0;i=0}i=ej(O,49,i,0)|0;if(i|0){R=i+4|0;c[R>>2]=c[R>>2]|c[Q+4>>2]&1;b[i+36>>1]=b[Q+36>>1]|0;c[i+20>>2]=j;Q=Ml(g,i,3)|0;Nl(f,g,Q);R=c[na>>2]|0;c[R+(Q*48|0)+16>>2]=h;b[R+(Q*48|0)+8>>1]=b[R+(h*48|0)+8>>1]|0;R=R+(h*48|0)+14|0;a[R>>0]=(a[R>>0]|0)+1<<24>>24;break}if(j|0)ri(P,j)}}}}while(0);i=(c[na>>2]|0)+(h*48|0)|0}}while(0);C=g+8|0;t:do if((a[C>>0]|0)==44){A=c[la>>2]|0;u:do if((((a[oa>>0]|0)==-95?(Z=oa+20|0,S=c[Z>>2]|0,(S|0)!=0):0)?(T=c[S>>2]|0,U=Jd(A,c[oa+8>>2]|0,T,1,0)|0,(U|0)!=0):0)?(V=c[U+4>>2]|0,(V&4|0)!=0):0){l=c[Z>>2]|0;if((T|0)>=3){j=c[l+44>>2]|0;if((a[j>>0]|0)!=110)break;j=c[j+8>>2]|0;k=a[j>>0]|0;if(!(k<<24>>24))break;if(a[j+1>>0]|0)break}else k=0;w=c[U+8>>2]|0;u=a[w>>0]|0;v=a[w+1>>0]|0;w=a[w+2>>0]|0;B=V&8;y=c[l+24>>2]|0;j=c[l+4>>2]|0;v:do if(!j)z=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096)){z=j;break v}if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){z=0;break}}while(0);j=a[z>>0]|0;x=j<<24>>24==-108;do if(x){if(!(0==0?(c[A+32>>2]&8388608|0)==0:0))break u;j=c[la+220>>2]|0;q=b[z+32>>1]|0;r=q<<16>>16;w:do if((j|0)!=0?(V=c[j+100>>2]|0,X=r+-1|0,W=V+(X*40|0)|0,X=V+(X*40|0)+8|0,(b[X>>1]&1)==0):0){p=c[j>>2]|0;x:do if(!p){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](40)|0;fa=300;break}j=Wa[c[29356>>2]&127](40)|0;if((c[14985]|0)>>>0<40)c[14985]=40;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){V=c[14978]|0;U=Tv(l|0,m|0,j|0,((j|0)<0)<<31>>31|0)|0;T=L()|0;c[14768]=((T|0)<0|(T|0)==0&U>>>0<=V>>>0)&1}l=Wa[c[29340>>2]&127](j)|0;if(!l){j=0;m=0;n=0;break w}j=Wa[c[29352>>2]&127](l)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){o=l;break}c[14987]=j;o=l}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){j=0;m=0;n=0;break w}}else{do if((e[p+276>>1]|0)>=40){l=p+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}l=p+296|0;j=c[l>>2]|0;if(!j){j=p+292|0;break}else{c[l>>2]=c[j>>2];fa=p+284|0;c[fa>>2]=(c[fa>>2]|0)+1;fa=300;break x}}else j=p+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(p,40,0)|0;fa=300}while(0);if((fa|0)==300)if(!j){j=0;m=0;n=0;break}else o=j;j=o;l=j+40|0;do{a[j>>0]=0;j=j+1|0}while((j|0)<(l|0));n=o+8|0;b[n>>1]=1;c[o+32>>2]=p;c[o>>2]=c[W>>2];c[o+4>>2]=c[W+4>>2];c[o+8>>2]=c[W+8>>2];c[o+12>>2]=c[W+12>>2];c[o+16>>2]=c[W+16>>2];j=b[n>>1]&-1025;b[n>>1]=j;j=j&65535;y:do if(j&18|0){if(b[X>>1]&2048)break;l=(j|4096)&65535;b[n>>1]=l;do if(j&16384){m=o+12|0;j=(c[o>>2]|0)+(c[m>>2]|0)|0;if((j|0)<1)if(!(l&16)){fa=309;break}else j=1;if(Eg(o,j,1)|0)break y;gw((c[o+16>>2]|0)+(c[m>>2]|0)|0,0,c[o>>2]|0)|0;c[m>>2]=(c[m>>2]|0)+(c[o>>2]|0);j=b[n>>1]&-16897;b[n>>1]=j;if(!(c[o+24>>2]|0)){fa=309;break}if((c[o+16>>2]|0)!=(c[o+20>>2]|0))fa=309}else fa=309;while(0);if((fa|0)==309){if(Jg(o)|0)break;j=b[n>>1]|0}b[n>>1]=j&-4097}while(0);j=b[n>>1]|0;if((j&15|16)<<16>>16!=18){j=0;m=o;n=o;break}do if((j&514)==514){if((a[o+10>>0]|0)!=1)break;j=c[o+16>>2]|0;m=o;n=o;break w}while(0);if(j&1){j=0;m=o;n=o;break}j=Gg(o,1)|0;m=o;n=o}else{j=0;m=0;n=0}while(0);l=c[la+8>>2]|0;if(q<<16>>16>31){s=l+208|0;c[s>>2]=c[s>>2]|-2147483648;s=m;t=n;break}else{s=l+208|0;c[s>>2]=c[s>>2]|1<>24!=110)break u;s=0;j=c[z+8>>2]|0;t=0}while(0);do if((j|0)!=0?(Y=a[j>>0]|0,Y<<24>>24!=w<<24>>24&((Y<<24>>24==v<<24>>24|(Y<<24>>24==0?1:Y<<24>>24==u<<24>>24))^1)):0){l=0;n=Y;do{m=l+1|0;if(n<<24>>24==k<<24>>24)l=(a[j+m>>0]|0)==0?m:l+2|0;else l=m;n=a[j+l>>0]|0;m=n<<24>>24==u<<24>>24}while(n<<24>>24!=w<<24>>24&((n<<24>>24==v<<24>>24|(n<<24>>24==0|m))^1));if(((l|0)!=0?(a[j+(l+-1)>>0]|0)!=-1:0)?!((l|0)<2?Y<<24>>24==k<<24>>24:0):0){if(m)q=(a[j+(l+1)>>0]|0)==0&1;else q=0;c[da>>2]=j;r=(Eu(j)|0)&1073741823;c[da+4>>2]=r;r=oj(A,110,da,0)|0;z:do if(r|0){p=c[r+8>>2]|0;a[p+l>>0]=0;if((l|0)>0){o=k&255;m=0;n=0;while(1){Y=n+((a[p+n>>0]|0)==(o|0)&1)|0;k=m+1|0;a[p+m>>0]=a[p+Y>>0]|0;n=Y+1|0;if((n|0)>=(l|0))break;else m=k}}else k=0;a[p+k>>0]=0;Y=a[p>>0]|0;if(!(Y<<24>>24==45|((Y&255)+-48|0)>>>0<10)?!((k|0)==1&Y<<24>>24==47):0)break;do if((a[y>>0]|0)==-94){if((Xj(y)|0)<<24>>24!=66)break;if(!(c[(c[y+44>>2]|0)+56>>2]|0))break z}while(0);ni(A,r);if(!s)break u;if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break u}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;_=j+300|0;c[t>>2]=c[_>>2];c[_>>2]=t;break u}while(0);if(!t)break u;if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break u}else{_=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break u}}while(0);if(!x){n=q;break}m=c[la+8>>2]|0;k=b[z+32>>1]|0;if(k<<16>>16>31)k=-2147483648;else k=1<<(k<<16>>16)+-1;Y=m+208|0;c[Y>>2]=c[Y>>2]|k;if(!q){n=0;break}if(!(a[(c[z+8>>2]|0)+1>>0]|0)){n=q;break}n=la+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){Y=la+44|0;l=(c[Y>>2]|0)+1|0;c[Y>>2]=l}else{l=k+-1<<24>>24;a[n>>0]=l;l=c[la+148+((l&255)<<2)>>2]|0}Jj(la,z,l)|0;if(!(a[(c[m>>2]|0)+81>>0]|0))k=(c[m+104>>2]|0)+(((c[m+108>>2]|0)+-1|0)*20|0)|0;else k=59308;c[k+12>>2]=0;if(!l){n=q;break}k=a[n>>0]|0;if((k&255)>=8){n=q;break}a[n>>0]=k+1<<24>>24;c[la+148+((k&255)<<2)>>2]=l;n=q}else{n=0;r=0;j=0}}else{n=0;r=0;j=0}while(0);l=(j|0)==0;A:do if(s|0){if(!((b[s+8>>1]&9216)==0?!(c[s+24>>2]|0):0))Cg(s);j=c[s+32>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,t);break A}k=t;if((c[j+304>>2]|0)>>>0>k>>>0)break;if((c[j+308>>2]|0)>>>0<=k>>>0)break;Y=j+300|0;c[t>>2]=c[Y>>2];c[Y>>2]=t;break A}while(0);if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Y=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);if(!l){p=c[(c[Z>>2]|0)+24>>2]|0;if(!r)q=0;else q=dk(ha,r,0,0)|0;o=(B|0)!=0;do if(!o){if(a[(c[la>>2]|0)+81>>0]|0)break;l=i+10|0;b[l>>1]=b[l>>1]|1024;l=r+8|0;j=c[l>>2]|0;i=a[j>>0]|0;if(!(i<<24>>24))break;m=q+8|0;k=0;do{Z=i&255;a[j>>0]=i&~(a[880+Z>>0]&32);a[(c[m>>2]|0)+k>>0]=a[208+Z>>0]|0;k=k+1|0;j=(c[l>>2]|0)+k|0;i=a[j>>0]|0}while(i<<24>>24!=0)}while(0);if(!(a[_>>0]|0)){j=c[q+8>>2]|0;if(!j)i=0;else i=(Eu(j)|0)&1073741823;k=j+(i+-1)|0;i=a[k>>0]|0;if(o){j=i;i=n}else{j=a[208+(i&255)>>0]|0;i=i<<24>>24==64?0:n}a[k>>0]=(j&255)+1;n=i}l=o?34049:43602;k=(p|0)==0;if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,57,i,r)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}m=Ml(g,i,259)|0;Nl(f,g,m);if(k)j=0;else j=dk(ha,p,0,0)|0;c[da>>2]=l;c[da+4>>2]=6;i=oj(c[la>>2]|0,106,da,0)|0;if(!i)i=j;else{c[i+12>>2]=j;_=i+4|0;c[_>>2]=c[_>>2]|4352}i=ej(la,56,i,q)|0;if(i|0){_=i+4|0;c[_>>2]=c[_>>2]|c[ka>>2]&1;b[i+36>>1]=b[oa+36>>1]|0}j=Ml(g,i,259)|0;Nl(f,g,j);k=c[na>>2]|0;i=k+(h*48|0)|0;if(!n)break;c[k+(m*48|0)+16>>2]=h;Y=k+(h*48|0)+8|0;b[k+(m*48|0)+8>>1]=b[Y>>1]|0;_=k+(h*48|0)+14|0;Z=a[_>>0]|0;c[k+(j*48|0)+16>>2]=h;b[k+(j*48|0)+8>>1]=b[Y>>1]|0;a[_>>0]=Z+2<<24>>24}}while(0);if((a[C>>0]|0)==44){j=a[oa>>0]|0;B:do switch(j<<24>>24){case -95:{j=c[oa+20>>2]|0;if((j|0)!=0?(c[j>>2]|0)==2:0){o=j+4|0;p=j+24|0;k=c[p>>2]|0;C:do if(((a[k>>0]|0)==-94?c[(c[k+44>>2]|0)+56>>2]|0:0)?(aa=c[oa+8>>2]|0,_=a[aa>>0]|0,$=_&255,_<<24>>24):0){j=(d[208+$>>0]|0)+-109|0;if(!j){l=38025;m=aa;do{m=m+1|0;l=l+1|0;_=a[m>>0]|0;j=(d[208+(_&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(_<<24>>24==0|(j|0)!=0))}D:do if(j){n=$|32;switch((n&255)<<24>>24){case 103:{m=43609;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l){j=1;break D}else break C}case 108:{fa=425;break}case 114:break;default:break C}if((fa|0)==425){j=43614;l=aa;do{l=l+1|0;j=j+1|0;fa=a[l>>0]|0;m=(d[208+(fa&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(m|0)!=0));if(!m){j=2;break}if((n|0)!=114)break C}m=43619;j=aa;do{j=j+1|0;m=m+1|0;fa=a[j>>0]|0;l=(d[208+(fa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(l|0)!=0));if(!l)j=3;else break C}else j=0;while(0);j=a[18144+(j<<3)+4>>0]|0;m=1;n=c[o>>2]|0;fa=453;break B}while(0);k=c[o>>2]|0;if((a[k>>0]|0)==-94?(ba=c[k+44>>2]|0,(c[ba+56>>2]|0)!=0):0){j=ba+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(ha|0))break;else j=j+24|0}j=c[j+8>>2]|0;l=c[(c[j>>2]|0)+72>>2]|0;if(l|0?(ca=_a[l&127](j,2,c[oa+8>>2]|0,da,ea)|0,(ca|0)>149):0){j=ca&255;m=1;n=c[p>>2]|0;fa=453;break B}fa=465}else fa=465}else fa=465;break}case 51:case -96:case 52:{k=c[pa>>2]|0;l=c[oa+16>>2]|0;if((a[k>>0]|0)==-94)m=(c[(c[k+44>>2]|0)+56>>2]|0)!=0&1;else m=0;if(l)if((a[l>>0]|0)==-94){fa=(c[(c[l+44>>2]|0)+56>>2]|0)==0;n=fa?l:k;k=fa?k:l;m=m+((fa^1)&1)|0}else n=l;else n=0;switch(j<<24>>24){case 52:{j=68;break}case -96:{j=69;break}case 51:{j=70;break}default:j=0}if((m|0)>0)fa=453;else fa=465;break}default:{}}while(0);if((fa|0)==453)while(1){u=m;m=m+-1|0;l=n;o=(n|0)==0;if(o){s=0;t=0}else{s=Pl(ga,l)|0;t=L()|0}r=k;if(!k){p=0;q=0}else{p=Pl(ga,r)|0;q=L()|0}if((p&s|0)==0&(q&t|0)==0){if(o)i=0;else i=dk(ha,l,0,0)|0;i=ej(la,46,0,i)|0;if((i|0)!=0&(c[ka>>2]&1|0)!=0){fa=i+4|0;c[fa>>2]=c[fa>>2]|1}fa=Ml(g,i,3)|0;ca=c[na>>2]|0;i=ca+(fa*48|0)+32|0;c[i>>2]=s;c[i+4>>2]=t;c[ca+(fa*48|0)+20>>2]=c[r+28>>2];c[ca+(fa*48|0)+28>>2]=b[r+32>>1];b[ca+(fa*48|0)+12>>1]=64;a[ca+(fa*48|0)+15>>0]=j;i=c[na>>2]|0;c[i+(fa*48|0)+16>>2]=h;b[i+(fa*48|0)+8>>1]=b[i+(h*48|0)+8>>1]|0;da=i+(h*48|0)+14|0;a[da>>0]=(a[da>>0]|0)+1<<24>>24;da=i+(h*48|0)+10|0;b[da>>1]=b[da>>1]|8;da=i+(h*48|0)+40|0;ea=c[da+4>>2]|0;fa=ca+(fa*48|0)+40|0;c[fa>>2]=c[da>>2];c[fa+4>>2]=ea;i=i+(h*48|0)|0}if((u|0)<=1){fa=465;break}else{fa=n;n=k;k=fa}}if((fa|0)==465){if((a[C>>0]|0)!=44)break;j=a[oa>>0]|0}switch(j<<24>>24){case 45:case 53:{m=c[pa>>2]|0;l=a[m>>0]|0;if(l<<24>>24==-88)j=a[m+38>>0]|0;else j=l;switch(j<<24>>24){case -87:{j=m+20|0;fa=473;break}case -125:{j=c[m+20>>2]|0;fa=473;break}default:{}}do if((fa|0)==473){q=c[c[j>>2]>>2]|0;if((q|0)>1){r=oa+16|0;k=c[r>>2]|0;j=a[k>>0]|0;if(j<<24>>24==-88)j=a[k+38>>0]|0;switch(j<<24>>24){case -87:{j=k+20|0;fa=479;break}case -125:{j=c[k+20>>2]|0;fa=479;break}default:j=1}if((fa|0)==479)j=c[c[j>>2]>>2]|0;if((j|0)==(q|0)){if(c[m+4>>2]&2048|0?c[k+4>>2]&2048|0:0)break;o=la+272|0;p=oa+36|0;n=0;j=l;i=m;while(1){switch(j<<24>>24){case -125:{j=ej(la,170,0,0)|0;if(!j)j=0;else{b[j+32>>1]=n;c[j+12>>2]=i}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){k=0;j=0;fa=489}else fa=488;break}default:fa=488}if((fa|0)==488){k=i;j=dk(c[la>>2]|0,i,0,0)|0;fa=489}E:do if((fa|0)==489){fa=0;i=c[o>>2]|0;if(i){while(1){if((c[i>>2]|0)==(k|0))break;i=c[i+12>>2]|0;if(!i)break E}c[i>>2]=j}}while(0);i=c[r>>2]|0;switch(a[i>>0]|0){case -125:{k=ej(la,170,0,0)|0;if(!k)i=0;else{b[k+32>>1]=n;c[k+12>>2]=i;i=k}break}case -87:{i=c[(c[i+20>>2]|0)+4+(n*20|0)>>2]|0;if(!i){l=0;i=0;fa=499}else fa=498;break}default:fa=498}if((fa|0)==498){l=i;i=dk(c[la>>2]|0,i,0,0)|0;fa=499}F:do if((fa|0)==499){fa=0;k=c[o>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break F}c[k>>2]=i}}while(0);i=ej(la,d[oa>>0]|0,j,i)|0;if(i|0){ha=i+4|0;c[ha>>2]=c[ha>>2]|c[ka>>2]&1;b[i+36>>1]=b[p>>1]|0}Nl(f,g,Ml(g,i,1)|0);i=n+1|0;if((i|0)==(q|0))break;ha=c[pa>>2]|0;n=i;j=a[ha>>0]|0;i=ha}la=a[C>>0]|0;i=c[na>>2]|0;ka=i+(h*48|0)+10|0;b[ka>>1]=b[ka>>1]|6;b[i+(h*48|0)+12>>1]=0;if(la<<24>>24==44)i=i+(h*48|0)|0;else break t}}}while(0);j=a[oa>>0]|0;break}default:{}}if(((j<<24>>24==49?(c[i+24>>2]|0)==0:0)?(ma=c[pa>>2]|0,(a[ma>>0]|0)==-87):0)?(c[(c[oa+20>>2]|0)+52>>2]|0)==0:0){k=0;i=-87;j=ma;while(1){if(i<<24>>24==-88)i=a[j+38>>0]|0;switch(i<<24>>24){case -87:{i=j+20|0;fa=520;break}case -125:{i=c[j+20>>2]|0;fa=520;break}default:i=1}if((fa|0)==520){fa=0;i=c[c[i>>2]>>2]|0}if((k|0)>=(i|0))break t;ma=Ml(g,oa,2)|0;i=k+1|0;c[(c[na>>2]|0)+(ma*48|0)+24>>2]=i;Nl(f,g,ma);j=c[na>>2]|0;c[j+(ma*48|0)+16>>2]=h;b[j+(ma*48|0)+8>>1]=b[j+(h*48|0)+8>>1]|0;j=j+(h*48|0)+14|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;j=c[pa>>2]|0;k=i;i=a[j>>0]|0}}}}while(0);h=(c[na>>2]|0)+(h*48|0)+32|0;oa=h;pa=c[oa+4>>2]|ia;c[h>>2]=c[oa>>2]|ja;c[h+4>>2]=pa;Ra=qa;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,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0;if(!d){r=0;s=0;K(r|0);return s|0}o=d;d=0;e=0;do{n=c[o+32>>2]|0;l=c[o>>2]|0;if((l|0)!=0?(s=c[l>>2]|0,(s|0)>0):0){k=0;j=s;f=0;g=0;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;i=0}else{h=Pl(b,h)|0;i=L()|0;j=c[l>>2]|0}f=h|f;g=i|g;k=k+1|0}while((k|0)<(j|0))}else{f=0;g=0}l=f|d;k=g|e;j=c[o+40>>2]|0;if((j|0)!=0?(q=c[j>>2]|0,(q|0)>0):0){i=0;h=q;d=0;e=0;do{f=c[j+4+(i*20|0)>>2]|0;if(!f){f=0;g=0}else{f=Pl(b,f)|0;g=L()|0;h=c[j>>2]|0}d=f|d;e=g|e;i=i+1|0}while((i|0)<(h|0))}else{d=0;e=0}l=l|d;k=k|e;j=c[o+48>>2]|0;if((j|0)!=0?(r=c[j>>2]|0,(r|0)>0):0){i=0;g=r;h=0;e=0;while(1){d=c[j+4+(i*20|0)>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0;g=c[j>>2]|0}d=d|h;e=f|e;i=i+1|0;if((i|0)>=(g|0)){h=d;i=e;break}else h=d}}else{h=0;i=0}d=c[o+36>>2]|0;if(!d){e=0;g=0}else{e=Pl(b,d)|0;g=L()|0}d=c[o+44>>2]|0;if(!d){d=0;f=0}else{d=Pl(b,d)|0;f=L()|0}d=l|h|e|d;e=k|i|g|f;if((n|0)!=0?(c[n>>2]|0)>0:0){m=0;do{h=Ol(b,c[n+8+(m*72|0)+20>>2]|0)|0;g=L()|0|e;e=c[n+8+(m*72|0)+44>>2]|0;if(!e){e=0;f=0}else{e=Pl(b,e)|0;f=L()|0}d=h|d|e;e=g|f;if(a[n+8+(m*72|0)+37>>0]&4){l=c[n+8+(m*72|0)+64>>2]|0;if((l|0)!=0?(p=c[l>>2]|0,(p|0)>0):0){k=0;f=0;g=0;i=p;do{h=c[l+4+(k*20|0)>>2]|0;if(!h){h=0;j=0}else{h=Pl(b,h)|0;j=L()|0;i=c[l>>2]|0}f=h|f;g=j|g;k=k+1|0}while((k|0)<(i|0))}else{f=0;g=0}d=f|d;e=g|e}m=m+1|0}while((m|0)<(c[n>>2]|0))}o=c[o+52>>2]|0}while((o|0)!=0);K(e|0);return d|0}function Pl(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;e=a[d>>0]|0;j=d+4|0;f=c[j>>2]|0;if(e<<24>>24==-94&(f&8|0)==0){g=c[d+28>>2]|0;f=c[b+4>>2]|0;if((f|0)<=0){o=0;b=0;K(o|0);return b|0}e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(f|0)){e=0;f=0;i=45;break}}if((i|0)==45){K(e|0);return f|0}b=cw(1,0,e|0)|0;o=L()|0;K(o|0);return b|0}if(f&8404992|0){o=0;b=0;K(o|0);return b|0}a:do if(e<<24>>24==-85?(g=c[d+28>>2]|0,h=c[b+4>>2]|0,(h|0)>0):0){e=0;while(1){if((c[b+8+(e<<2)>>2]|0)==(g|0))break;e=e+1|0;if((e|0)>=(h|0)){f=0;g=0;break a}}f=cw(1,0,e|0)|0;g=L()|0}else{f=0;g=0}while(0);e=c[d+12>>2]|0;if(e){n=Pl(b,e)|0;f=n|f;g=L()|0|g}e=c[d+16>>2]|0;do if(!e){e=c[j>>2]|0;if(e&2048|0){if(e&32|0)c[b>>2]=1;n=Ol(b,c[d+20>>2]|0)|0;f=n|f;g=L()|0|g;break}n=c[d+20>>2]|0;if(n){e=c[n>>2]|0;if((e|0)>0){m=0;k=0;h=0;while(1){i=c[n+4+(m*20|0)>>2]|0;if(!i){i=0;j=0}else{i=Pl(b,i)|0;j=L()|0;e=c[n>>2]|0}i=i|k;h=j|h;m=m+1|0;if((m|0)>=(e|0)){e=i;break}else k=i}}else{e=0;h=0}f=e|f;g=h|g}}else{n=Pl(b,e)|0;f=n|f;g=L()|0|g}while(0);if((a[d>>0]|0)!=-95){o=g;b=f;K(o|0);return b|0}d=d+44|0;e=c[d>>2]|0;if(!e){o=g;b=f;K(o|0);return b|0}n=c[e+8>>2]|0;if((n|0)!=0?(l=c[n>>2]|0,(l|0)>0):0){m=0;h=0;i=0;while(1){e=c[n+4+(m*20|0)>>2]|0;if(!e){j=0;k=0;e=l}else{j=Pl(b,e)|0;k=L()|0;e=c[n>>2]|0}h=j|h;i=k|i;m=m+1|0;if((m|0)>=(e|0))break;else l=e}e=c[d>>2]|0}else{h=0;i=0}m=h|f;l=i|g;k=c[e+12>>2]|0;if((k|0)!=0?(o=c[k>>2]|0,(o|0)>0):0){j=0;f=0;e=0;h=o;do{g=c[k+4+(j*20|0)>>2]|0;if(!g){g=0;i=0}else{g=Pl(b,g)|0;i=L()|0;h=c[k>>2]|0}f=g|f;e=i|e;j=j+1|0}while((j|0)<(h|0))}else{f=0;e=0}o=l|e;b=m|f;K(o|0);return b|0}function Ql(a,d,e,f,g){a=a|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;if(e>>>0>0|(e|0)==0&d>>>0>1){h=0;do{h=h+1|0;m=d;d=bw(d|0,e|0,1)|0;l=e;e=L()|0}while(l>>>0>0|(l|0)==0&m>>>0>3)}else h=0;m=c[a+8+(h*72|0)+40>>2]|0;h=c[(c[a+8+(h*72|0)+16>>2]|0)+8>>2]|0;if(!h){p=0;return p|0}l=(g|0)==0;a:while(1){j=h+40|0;b:do if(c[j>>2]|0?(n=h+50|0,o=b[n>>1]|0,o<<16>>16):0){k=h+4|0;if(l){a=0;d=o;while(1){if((b[(c[k>>2]|0)+(a<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(a*20|0)>>2]|0;c:do if(!d)d=0;else while(1){e=c[d+4>>2]|0;if(!(e&4096))break c;if(!(e&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,0,d,m)|0))break a;d=b[n>>1]|0}a=a+1|0;if(a>>>0>=(d&65535)>>>0)break b}}i=0;d=o;do{if((b[(c[k>>2]|0)+(i<<1)>>1]|0)==-2){d=c[(c[j>>2]|0)+4+(i*20|0)>>2]|0;e=g;while(1){a=c[e+4>>2]|0;if(!(a&4096))break;if(!(a&262144))e=e+12|0;else e=(c[e+20>>2]|0)+4|0;e=c[e>>2]|0;if(!e){e=0;break}}d:do if(!d)d=0;else while(1){a=c[d+4>>2]|0;if(!(a&4096))break d;if(!(a&262144))d=d+12|0;else d=(c[d+20>>2]|0)+4|0;d=c[d>>2]|0;if(!d){d=0;break}}while(0);if(!(bk(0,e,d,m)|0))break a;d=b[n>>1]|0}i=i+1|0}while(i>>>0<(d&65535)>>>0)}while(0);h=c[h+20>>2]|0;if(!h){h=0;p=41;break}}if((p|0)==41)return h|0;c[f>>2]=m;c[f+4>>2]=-2;p=1;return p|0}function Rl(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0;h=b[f+12>>1]|0;i=b[g+12>>1]|0;j=i|h;if((h&62)==0|(i&62)==0)return;i=j&65535;if(!((i&26|0)==(i|0)|(i&38|0)==(i|0)))return;if(bk(0,c[(c[f>>2]|0)+12>>2]|0,c[(c[g>>2]|0)+12>>2]|0,-1)|0)return;if(bk(0,c[(c[f>>2]|0)+16>>2]|0,c[(c[g>>2]|0)+16>>2]|0,-1)|0)return;f=c[f>>2]|0;if(!f)return;h=dk(c[c[c[e>>2]>>2]>>2]|0,f,0,0)|0;if(!h)return;g=((i+65535&i|0)==0?j:(i&24|0)==0?32:8)&65535;f=53;while(1)if((2<>0]=f;Nl(d,e,Ml(e,h,3)|0);return}function Sl(b,d){b=b|0;d=d|0;if((a[d>>0]|0)!=-95){d=0;return d|0}if(c[d+4>>2]&524288|0){d=0;return d|0}a[b+20>>0]=0;d=2;return d|0}function Tl(e){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;t=e+24|0;x=e+4|0;y=e+18|0;z=e+12|0;A=e+20|0;C=e+17|0;D=e+8|0;u=e+16|0;v=e+28|0;w=e+72|0;g=c[t>>2]|0;h=c[x>>2]|0;f=a[y>>0]|0;a:while(1){q=(f&255)+-1|0;s=b[e+72+(q<<1)>>1]|0;q=c[e+28+(q<<2)>>2]|0;r=s<<16>>16;s=s<<16>>16==-2;f=h;while(1){p=f+12|0;if((g|0)<(c[p>>2]|0)){o=(c[f+20>>2]|0)+(g*48|0)|0;while(1){do if((c[o+20>>2]|0)==(q|0)?(c[o+28>>2]|0)==(r|0):0){if(s){i=c[(c[o>>2]|0)+12>>2]|0;h=c[z>>2]|0;b:do if(!i)i=0;else while(1){j=c[i+4>>2]|0;if(!(j&4096))break b;if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);c:do if(!h)h=0;else while(1){j=c[h+4>>2]|0;if(!(j&4096))break c;if(!(j&262144))h=h+12|0;else h=(c[h+20>>2]|0)+4|0;h=c[h>>2]|0;if(!h){h=0;break}}while(0);if(bk(0,i,h,q)|0)break}if((d[y>>0]|0)>=2?c[(c[o>>2]|0)+4>>2]&1|0:0)break;n=o+12|0;h=b[n>>1]|0;if((h&2048)!=0?(B=a[C>>0]|0,(B&255)<11):0){i=c[(c[o>>2]|0)+16>>2]|0;j=c[i+4>>2]|0;if(j&4096)do{if(!(j&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;j=c[i+4>>2]|0}while((j&4096|0)!=0);if((a[i>>0]|0)==-94){m=B&255;d:do if(!(B<<24>>24))j=0;else{l=c[i+28>>2]|0;k=i+32|0;j=0;do{if((c[e+28+(j<<2)>>2]|0)==(l|0)?(b[e+72+(j<<1)>>1]|0)==(b[k>>1]|0):0)break d;j=j+1|0}while(j>>>0>>0)}while(0);if((j|0)==(m|0)){c[e+28+(m<<2)>>2]=c[i+28>>2];b[e+72+(m<<1)>>1]=b[i+32>>1]|0;a[C>>0]=B+1<<24>>24;h=b[n>>1]|0}}}i=h&65535;if(c[A>>2]&i|0){if((i&256|0)==0&(c[D>>2]|0)!=0){k=c[c[f>>2]>>2]|0;h=c[o>>2]|0;if(!(Vl(h,a[u>>0]|0)|0))break;i=c[h+12>>2]|0;j=c[h+16>>2]|0;do if(!(c[i+4>>2]&256)){if(j|0?c[j+4>>2]&256|0:0){h=Yi(k,j)|0;E=51;break}h=Yi(k,i)|0;if(!h){h=Yi(k,j)|0;E=51}}else{h=Yi(k,i)|0;E=51}while(0);if((E|0)==51){E=0;if(!h)h=c[(c[k>>2]|0)+8>>2]|0}i=c[h>>2]|0;j=c[D>>2]|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0;if(!(m<<24>>24==0|(h|0)!=0))do{i=i+1|0;j=j+1|0;m=a[i>>0]|0;h=(d[208+(m&255)>>0]|0)-(d[208+(d[j>>0]|0)>>0]|0)|0}while(!(m<<24>>24==0|(h|0)!=0));if(h|0)break;h=b[n>>1]|0}if(!(h&130))break a;h=c[(c[o>>2]|0)+16>>2]|0;if((a[h>>0]|0)!=-94)break a;if((c[h+28>>2]|0)!=(c[v>>2]|0))break a;if((b[h+32>>1]|0)!=(b[w>>1]|0))break a}}while(0);g=g+1|0;if((g|0)<(c[p>>2]|0))o=o+48|0;else break}}f=c[f+4>>2]|0;if(!f)break;else g=0}f=a[y>>0]|0;if((f&255)>=(d[C>>0]|0)){f=0;E=67;break}h=c[e>>2]|0;f=f+1<<24>>24;a[y>>0]=f;g=0}if((E|0)==67)return f|0;c[x>>2]=f;c[t>>2]=g+1;E=o;return E|0}function Ul(b){b=b|0;var d=0;d=Xj(c[b+12>>2]|0)|0;a[b+16>>0]=d;return Tl(b)|0}function Vl(a,b){a=a|0;b=b|0;var d=0,e=0;e=Xj(c[a+12>>2]|0)|0;d=c[a+16>>2]|0;do if(!d){if(!(c[a+4>>2]&2048)){a=e<<24>>24==0?65:e;break}a=Xj(c[(c[c[a+20>>2]>>2]|0)+4>>2]|0)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}else{a=Xj(d)|0;if(e<<24>>24==0|a<<24>>24==0){a=(a|e)<<24>>24==0?65:(a&255)+(e&255)&255;break}else{a=e<<24>>24>66|a<<24>>24>66?67:65;break}}while(0);switch(a<<24>>24|0){case 66:{b=b<<24>>24==66;b=b&1;return b|0}case 65:{b=1;b=b&1;return b|0}default:{b=b<<24>>24>66;b=b&1;return b|0}}return 0}function Wl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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=Ra;Ra=Ra+16|0;p=K;H=K+4|0;s=c[f>>2]|0;J=c[s>>2]|0;r=c[f+4>>2]|0;F=c[f+12>>2]|0;s=c[s+4>>2]|0;x=d[F+16>>0]|0;B=c[f+8>>2]|0;G=r+20|0;q=r+12|0;n=c[q>>2]|0;if((n|0)>0){o=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;m=c[G>>2]|0;while(1){if((c[m+20>>2]|0)==(o|0)?(E=m+32|0,(c[E>>2]&i|0)==0?(c[E+4>>2]&j|0)==0:0):0)k=k+((b[m+12>>1]&-2049)<<16>>16!=0&1)|0;l=l+1|0;if((l|0)==(n|0)){o=k;break}else m=m+48|0}}else o=0;if(!B)y=0;else{n=c[B>>2]|0;a:do if((n|0)>0){m=s+8+(x*72|0)+40|0;k=0;do{l=c[B+4+(k*20|0)>>2]|0;if((a[l>>0]|0)!=-94)break a;if((c[l+28>>2]|0)!=(c[m>>2]|0))break a;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);y=(k|0)==(n|0)?n:0}m=c[J>>2]|0;n=(o*20|0)+80+(y<<3)|0;b:do if(!m){E=Sv(n|0,0,-1,-1)|0;C=L()|0;if(!(C>>>0>0|(C|0)==0&E>>>0>2147483390)){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;D=38;break}k=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){E=c[14978]|0;C=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;w=L()|0;c[14768]=((w|0)<0|(w|0)==0&C>>>0<=E>>>0)&1}l=Wa[c[29340>>2]&127](k)|0;if(l){k=Wa[c[29352>>2]&127](l)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;E=l}else E=l}else D=39}else D=39}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){D=39;break}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];D=m+284|0;c[D>>2]=(c[D>>2]|0)+1;D=38;break b}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;D=38}while(0);if((D|0)==38)if(!k)D=39;else E=k;if((D|0)==39){cd(J,34831,p);J=7;Ra=K;return J|0}gw(E|0,0,n|0)|0;v=E+80|0;w=v+(o*12|0)|0;c[E>>2]=o;c[E+8>>2]=y;C=E+4|0;c[C>>2]=v;c[E+12>>2]=w;c[E+16>>2]=w+(y<<3);c[E+72>>2]=r;c[E+76>>2]=J;t=c[q>>2]|0;if((t|0)>0){u=s+8+(x*72|0)+36|0;s=c[s+8+(x*72|0)+40>>2]|0;l=0;k=0;q=c[G>>2]|0;r=0;while(1){do if(((c[q+20>>2]|0)==(s|0)?(x=q+32|0,(c[x>>2]&i|0)==0?(c[x+4>>2]&j|0)==0:0):0)?(z=b[q+12>>1]|0,A=z&65535,(A&63487|0)!=0):0){if(a[u>>0]&8?!((A&384|0)==0?1:(c[(c[q>>2]|0)+4>>2]&1|0)!=0):0)break;c[v+(l*12|0)>>2]=c[q+28>>2];c[v+(l*12|0)+8>>2]=r;p=z&8191;p=p<<16>>16==1?2:p;m=p&65535;c:do if(p<<16>>16!=64){if(m&384|0){m=v+(l*12|0)+4|0;if(p<<16>>16==256){a[m>>0]=71;break}else{a[m>>0]=72;break}}o=v+(l*12|0)+4|0;a[o>>0]=p;if(m&60){n=c[(c[q>>2]|0)+16>>2]|0;m=a[n>>0]|0;if(m<<24>>24==-88)m=a[n+38>>0]|0;switch(m<<24>>24){case -87:{m=n+20|0;break}case -125:{m=c[n+20>>2]|0;break}default:break c}if((c[c[m>>2]>>2]|0)>=2){k=r>>>0<16?(1<>0]=8;break c}case 4:{a[o>>0]=32;break c}default:break c}}}}else a[v+(l*12|0)+4>>0]=a[q+15>>0]|0;while(0);l=l+1|0}while(0);r=r+1|0;if((r|0)==(t|0)){i=k;break}else q=q+48|0}}else i=0;if((y|0)<=0){if(!E){J=7;Ra=K;return J|0}}else{k=0;do{c[w+(k<<3)>>2]=b[(c[B+4+(k*20|0)>>2]|0)+32>>1];a[w+(k<<3)+4>>0]=a[B+4+(k*20|0)+12>>0]|0;k=k+1|0}while((k|0)!=(y|0))}b[F+18>>1]=0;c[F+36>>2]=1024;b[F+40>>1]=0;a[F+28>>0]=0;A=c[E>>2]|0;k=c[J>>2]|0;o=F+44|0;d:do if((A|0)>(e[o>>1]|0)){p=A+7&-8;n=p<<2;e:do if(c[k+272>>2]|0)if(!(a[k+81>>0]|0))D=80;else D=94;else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0>>0:0))){l=k+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}l=k+296|0;m=c[l>>2]|0;if(!m){l=k+292|0;break}else{c[l>>2]=c[m>>2];D=k+284|0;c[D>>2]=(c[D>>2]|0)+1;D=81;break e}}else l=k+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;D=80}while(0);if((D|0)==80){m=_d(k,n,0)|0;D=81}do if((D|0)==81){if(!m){k=c[J>>2]|0;if(!k)break;else{D=94;break}}l=F+48|0;ew(m|0,c[l>>2]|0,e[o>>1]<<2|0)|0;n=c[l>>2]|0;do if((n|0)!=(F+56|0)){if(c[k+480>>2]|0){Xd(k,n);break}B=n;if((c[k+304>>2]|0)>>>0<=B>>>0?(c[k+308>>2]|0)>>>0>B>>>0:0){B=k+300|0;c[n>>2]=c[B>>2];c[B>>2]=n;break}if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{B=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[l>>2]=m;b[o>>1]=p;break d}while(0);if((D|0)==94){if(c[k+480>>2]|0){Xd(k,E);J=7;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=7;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=7;Ra=K;return J|0}}while(0);l=Zl(f,g,h,-1,-1,0,E,i,H)|0;if(!l){z=F;w=~g;x=~h;y=c[z>>2]&w;z=c[z+4>>2]&x;k=(c[H>>2]|0)!=0;if((y|0)!=0|(z|0)!=0|k){if(k){l=Zl(f,g,h,-1,-1,1,E,i,H)|0;n=F;k=c[n>>2]&w;n=c[n+4>>2]&x;m=(k|0)==0&(n|0)==0&1;if(!l){v=k;D=106}else k=m}else{m=0;v=0;n=0;D=106}f:do if((D|0)==106){u=(A|0)>0;k=m;o=0;l=0;while(1){if(!u){l=0;break f}q=c[G>>2]|0;r=c[C>>2]|0;while(1){p=0;t=-1;s=-1;do{D=q+((c[r+(p*12|0)+8>>2]|0)*48|0)+32|0;j=c[D>>2]&w;D=c[D+4>>2]&x;B=(D>>>0>l>>>0|(D|0)==(l|0)&j>>>0>o>>>0)&(D>>>0>>0|(D|0)==(t|0)&j>>>0>>0);s=B?j:s;t=B?D:t;p=p+1|0}while((p|0)!=(A|0));if((s|0)==-1&(t|0)==-1){l=0;break f}if((s|0)==(y|0)&(t|0)==(z|0)|(s|0)==(v|0)&(t|0)==(n|0)){l=t;o=s}else break}l=Zl(f,g,h,s|g,t|h,0,E,i,H)|0;D=F;if((c[D>>2]|0)==(g|0)?(c[D+4>>2]|0)==(h|0):0){k=(c[H>>2]|0)==0?1:k;m=1}if(!l){o=s;l=t}else break}}while(0);if(!(m|l)){l=Zl(f,g,h,g,h,0,E,i,H)|0;k=(c[H>>2]|0)==0?1:k}if(!(k|l))l=Zl(f,g,h,g,h,1,E,i,H)|0}else l=0}do if(c[E+28>>2]|0?(I=c[E+24>>2]|0,I|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](I);break}else{H=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);break}while(0);k=c[J>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,E);J=l;Ra=K;return J|0}J=E;if((c[k+304>>2]|0)>>>0<=J>>>0?(c[k+308>>2]|0)>>>0>J>>>0:0){J=k+300|0;c[E>>2]=c[J>>2];c[J>>2]=E;J=l;Ra=K;return J|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}else{J=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-J;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);J=l;Ra=K;return J|0}return 0}function Xl(f,g,h){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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0;ja=Ra;Ra=Ra+128|0;ca=ja+80|0;fa=ja+72|0;k=ja;l=ja+112|0;m=ja+108|0;b[m>>1]=-1;ha=c[f+12>>2]|0;_=c[f>>2]|0;P=c[_+4>>2]|0;Q=d[ha+16>>0]|0;$=P+8+(Q*72|0)|0;O=P+8+(Q*72|0)+16|0;R=c[O>>2]|0;aa=c[f+4>>2]|0;ba=P+8+(Q*72|0)+68|0;i=c[ba>>2]|0;o=(i|0)==0;do if(o){if(c[R+36>>2]&32|0){k=c[R+8>>2]|0;break}i=k;j=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));b[k+50>>1]=1;b[k+52>>1]=1;c[k+4>>2]=m;c[k+8>>2]=l;a[k+54>>0]=5;c[k+12>>2]=R;b[k+48>>1]=b[R+46>>1]|0;Z=k+55|0;a[Z>>0]=3;a[Z+1>>0]=0;b[l>>1]=b[R+44>>1]|0;b[l+2>>1]=0;if(!(a[P+8+(Q*72|0)+37>>0]&1))c[k+20>>2]=c[(c[O>>2]|0)+8>>2]}else k=i;while(0);m=b[R+44>>1]|0;if(m<<16>>16<11)i=0;else{i=m<<16>>16;j=((i|0)<0)<<31>>31;if((m&65535)>255){l=40;do{l=(l&65535)+40|0;Z=i;i=bw(i|0,j|0,4)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>4095);l=l&65535}else l=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{l=(l&65535)+10&65535;Z=i;i=bw(i|0,j|0,1)|0;Y=j;j=L()|0}while(Y>>>0>0|(Y|0)==0&Z>>>0>31);j=l}else j=l;i=(j&65535)+65493+(e[3648+((i&7)<<1)>>1]|0)&65535}a:do if((((((c[f+16>>2]|0)==0?(b[_+44>>1]&32)==0:0)?!((0==0?(c[(c[c[_>>2]>>2]|0)+32>>2]&32768|0)==0:0)|o^1):0)?(n=a[P+8+(Q*72|0)+37>>0]|0,(n&1)==0):0)?(M=R+36|0,(n&40)==0&(c[M>>2]&32|0)==0):0)?(I=c[aa+20>>2]|0,Z=c[aa+12>>2]|0,N=I+(Z*48|0)|0,(Z|0)>0):0){A=ha+8|0;B=P+8+(Q*72|0)+40|0;C=P+8+(Q*72|0)+36|0;D=ha+24|0;E=ha+42|0;F=ha+32|0;G=ha+40|0;H=ha+48|0;x=(i&65535)+(m&65535)|0;s=x&65535;t=ha+18|0;u=R+12|0;v=ha+22|0;n=i<<16>>16;w=(x&65535)+65526|0;x=(x<<16>>16)+28|0;y=ha+20|0;z=ha+36|0;o=i<<16>>16<12;p=i<<16>>16>74;q=18112+(43-n)|0;r=18112+(n+-43)|0;if(i<<16>>16<43){m=i<<16>>16<-6?43:44;l=I;while(1){j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(J=e[l+12>>1]|0,(J&130|0)!=0):0){if(a[C>>0]&8?!((J&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if(!(c[u>>2]|0))i=(c[M>>2]&2|0)==0?x:w;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(o)i=m;else i=(d[q>>0]|0)+43&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0;if(!(l>>>0>>0&(i|0)==0))break a}}m=i<<16>>16>92?i:n+1&65535;l=I;do{j=l+32|0;Z=j;Y=A;do if((((c[Y>>2]&c[Z>>2]|0)==0?(c[Y+4>>2]&c[Z+4>>2]|0)==0:0)?(c[l+20>>2]|0)==(c[B>>2]|0):0)?(K=e[l+12>>1]|0,(K&130|0)!=0):0){if(a[C>>0]&8?!((K&128|0)==0?1:(c[(c[l>>2]|0)+4>>2]&1|0)!=0):0){i=0;break}i=c[l+28>>2]|0;if((i|0)>=0?(Vl(c[l>>2]|0,a[(c[(c[O>>2]|0)+4>>2]|0)+(i<<4)+13>>0]|0)|0)!=0:0){b[D>>1]=1;b[E>>1]=0;c[F>>2]=0;b[G>>1]=1;c[c[H>>2]>>2]=l;b[t>>1]=s;if((c[u>>2]|0)==0?(c[M>>2]&2|0)==0:0)i=x;else i=w;b[t>>1]=(i&32768|0)==0?i&65535:0;b[v>>1]=43;if(p)i=m;else i=(d[r>>0]|0)+n&65535;b[y>>1]=i;c[z>>2]=16384;Y=j;Z=c[Y+4>>2]|h;i=ha;c[i>>2]=c[Y>>2]|g;c[i+4>>2]=Z;i=_l(f,ha)|0}else i=0}else i=0;while(0);l=l+48|0}while(l>>>0>>0&(i|0)==0)}else i=0;while(0);Z=ha+36|0;if(!((i|0)==0&(k|0)!=0)){ia=i;Ra=ja;return ia|0}I=P+8+(Q*72|0)+40|0;J=ha+24|0;K=ha+26|0;M=ha+28|0;N=ha+42|0;O=ha+40|0;S=ha+17|0;T=ha+18|0;U=ha+22|0;V=ha+32|0;W=ha+20|0;X=f+20|0;Y=R+36|0;H=P+8+(Q*72|0)+56|0;A=R+46|0;B=_+92|0;C=_+100|0;D=fa+4|0;E=ca+4|0;F=ca+24|0;z=ca+20|0;G=_+44|0;y=1;b:while(1){w=k+36|0;i=c[w>>2]|0;if((i|0)!=0?(bm(c[I>>2]|0,aa,i)|0)==0:0)i=0;else{v=k+55|0;if(!((d[v>>0]|d[v+1>>0]<<8)&256)){x=b[c[k+8>>2]>>1]|0;b[J>>1]=0;b[K>>1]=0;b[M>>1]=0;b[N>>1]=0;b[O>>1]=0;a[S>>0]=0;b[T>>1]=0;r=ha;c[r>>2]=g;c[r+4>>2]=h;b[U>>1]=x;c[V>>2]=k;r=c[I>>2]|0;c:do if((((d[v>>0]|d[v+1>>0]<<8)&4)==0?(da=c[(c[f>>2]|0)+8>>2]|0,(da|0)!=0):0)?(ea=c[da>>2]|0,(ea|0)>0):0){s=k+40|0;t=k+50|0;u=k+4|0;q=0;i=ea;while(1){j=c[da+4+(q*20|0)>>2]|0;d:do if(!j)j=0;else while(1){l=c[j+4>>2]|0;if(!(l&4096))break d;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);if((a[j>>0]|0)==-94?(c[j+28>>2]|0)==(r|0):0){m=b[j+32>>1]|0;if(m<<16>>16<0){j=1;break c}j=b[t>>1]|0;if(j<<16>>16){n=c[u>>2]|0;l=j&65535;j=0;do{if(m<<16>>16==(b[n+(j<<1)>>1]|0)){j=1;break c}j=j+1|0}while(j>>>0>>0)}}else ia=75;e:do if((ia|0)==75){ia=0;p=c[s>>2]|0;if((p|0)!=0?(ga=b[t>>1]|0,ga<<16>>16!=0):0){if(!j){n=c[u>>2]|0;o=ga&65535;m=0;while(1){f:do if((b[n+(m<<1)>>1]|0)==-2){j=c[p+4+(m*20|0)>>2]|0;if(!j){j=1;break c}while(1){l=c[j+4>>2]|0;if(!(l&4096))break f;if(!(l&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=1;break c}}}while(0);m=m+1|0;if(m>>>0>=o>>>0)break e}}n=0;i=ga;do{if((b[(c[u>>2]|0)+(n<<1)>>1]|0)==-2){i=c[p+4+(n*20|0)>>2]|0;l=j;while(1){m=c[l+4>>2]|0;if(!(m&4096))break;if(!(m&262144))l=l+12|0;else l=(c[l+20>>2]|0)+4|0;l=c[l>>2]|0;if(!l){l=0;break}}g:do if(!i)i=0;else while(1){m=c[i+4>>2]|0;if(!(m&4096))break g;if(!(m&262144))i=i+12|0;else i=(c[i+20>>2]|0)+4|0;i=c[i>>2]|0;if(!i){i=0;break}}while(0);if(!(bk(0,l,i,r)|0)){j=1;break c}i=b[t>>1]|0}n=n+1|0}while(n>>>0<(i&65535)>>>0);i=c[da>>2]|0}}while(0);q=q+1|0;if((q|0)>=(i|0)){j=0;break}}}else j=0;while(0);i=d[v>>0]|d[v+1>>0]<<8;do if((i&3)==3){c[Z>>2]=256;a[S>>0]=(j|0)==0?0:y&255;b[W>>1]=(x&65535)+16;cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}else{if(!(i&32)){i=H;m=k+64|0;R=c[m>>2]&c[i>>2];i=c[m+4>>2]&c[i+4>>2];m=R;n=i;i=(R|0)==0&(i|0)==0?576:512}else{m=0;n=0;i=576}c[Z>>2]=i;i=(j|0)!=0;if((!i?(c[Y>>2]&32|0)==0:0)?(c[w>>2]|0)==0:0){if(!((m|0)==0&(n|0)==0))break;if((d[v>>0]|d[v+1>>0]<<8)&4)break;if((b[k+48>>1]|0)>=(b[A>>1]|0))break;if(!((b[G>>1]&4)==0&(c[7328]|0)!=0))break;if(b[(c[c[_>>2]>>2]|0)+76>>1]&32)break}a[S>>0]=i?y&255:0;i=x<<16>>16;l=i+1+(((b[k+48>>1]|0)*15|0)/(b[A>>1]|0)|0)&65535;b[W>>1]=l;if(!((m|0)==0&(n|0)==0)){i=i+16&65535;n=c[I>>2]|0;if((c[B>>2]|0)>0){m=0;do{l=c[C>>2]|0;j=c[l+(m*48|0)>>2]|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[D>>2]=n;c[fa>>2]=k;c[E>>2]=148;c[F>>2]=fa;if(j){_j(ca,j)|0;if(a[z>>0]|0)break}j=b[l+(m*48|0)+8>>1]|0;do if(j<<16>>16<1)i=(j&65535)+(i&65535)&65535;else{i=i+-1<<16>>16;if(!(b[l+(m*48|0)+12>>1]&130))break;i=(i&65535)+65517&65535}while(0);m=m+1|0}while((m|0)<(c[B>>2]|0));l=b[W>>1]|0}j=l<<16>>16;m=i<<16>>16;do if(l<<16>>16>16){if((j+49|0)>=(m|0))if((j+31|0)<(m|0)){i=m+1&65535;break}else{i=(d[18112+(m-j)>>0]|0)+m&65535;break}}else if((m+49|0)>=(j|0))if((m+31|0)<(j|0)){i=j+1&65535;break}else{i=(d[18112+(j-m)>>0]|0)+j&65535;break}else i=l;while(0);b[W>>1]=i}cm(aa,ha,x);i=_l(f,ha)|0;b[U>>1]=x;if(i|0){ia=147;break b}}while(0);c[X>>2]=0;i=dm(f,$,k,0)|0;if((c[X>>2]|0)==1)c[Y>>2]=c[Y>>2]|256}else i=0}if(c[ba>>2]|0){ia=147;break}k=c[k+20>>2]|0;if(!((i|0)==0&(k|0)!=0)){ia=147;break}else y=y+1|0}if((ia|0)==147){Ra=ja;return i|0}return 0}function Yl(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0;ia=Ra;Ra=Ra+608|0;ba=ia+168|0;da=ia+576|0;ha=ia+112|0;ea=ia+56|0;fa=ia;k=c[f>>2]|0;_=c[f+4>>2]|0;o=c[_+20>>2]|0;n=c[_+12>>2]|0;$=o+(n*48|0)|0;aa=c[f+12>>2]|0;l=ha;m=l+56|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(m|0));k=c[k+4>>2]|0;l=d[aa+16>>0]|0;Z=c[k+8+(l*72|0)+40>>2]|0;if((n|0)<=0){ha=0;Ra=ia;return ha|0}W=aa+8|0;X=da+8|0;Y=da+16|0;E=k+8+(l*72|0)+16|0;F=da+4|0;G=ba+4|0;H=ba+8|0;I=ba+12|0;J=ba+20|0;K=fa+8|0;L=ha+8|0;M=ea+8|0;N=ha+16|0;O=aa+40|0;P=aa+48|0;Q=aa+36|0;R=aa+18|0;S=aa+17|0;T=aa+24|0;U=aa+20|0;V=aa+22|0;k=0;a:while(1){b:do if((b[o+12>>1]&512)!=0?(ca=c[o+28>>2]|0,D=ca+408|0,C=W,!((c[C>>2]&c[D>>2]|0)==0?(c[C+4>>2]&c[D+4>>2]|0)==0:0)):0){l=ca+20|0;D=(c[l>>2]|0)+((c[ca+12>>2]|0)*48|0)|0;c[da>>2]=c[f>>2];c[da+4>>2]=c[f+4>>2];c[da+8>>2]=c[f+8>>2];c[da+12>>2]=c[f+12>>2];c[da+16>>2]=c[f+16>>2];c[da+20>>2]=c[f+20>>2];c[da+24>>2]=c[f+24>>2];c[X>>2]=0;c[Y>>2]=ea;l=c[l>>2]|0;c:do if(l>>>0>>0){n=1;C=l;l=0;do{if(!(b[C+12>>1]&1024)){if((c[C+20>>2]|0)==(Z|0)){c[ba>>2]=c[_>>2];c[G>>2]=_;a[H>>0]=44;c[I>>2]=1;c[J>>2]=C;l=ba;ga=11}}else{l=c[C+28>>2]|0;ga=11}do if((ga|0)==11){ga=0;c[F>>2]=l;b[ea>>1]=0;if(!(c[(c[E>>2]|0)+56>>2]|0))l=Xl(da,g,h)|0;else l=Wl(da,g,h,i,j)|0;if(!l)l=Yl(da,g,h,i,j)|0;m=b[ea>>1]|0;if(!(m<<16>>16)){k=0;break c}if(n|0){ew(L|0,M|0,(m&65535)<<4|0)|0;n=0;k=m;break}b[fa>>1]=k;B=k&65535;ew(K|0,L|0,B<<4|0)|0;if(!(k<<16>>16))k=0;else{x=m&65535;w=0;k=0;do{y=fa+8+(w<<4)|0;z=fa+8+(w<<4)+8|0;A=fa+8+(w<<4)+10|0;v=0;do{u=y;m=ea+8+(v<<4)|0;t=c[m>>2]|c[u>>2];u=c[m+4>>2]|c[u+4>>2];m=b[z>>1]|0;n=b[ea+8+(v<<4)+8>>1]|0;p=m<<16>>16;q=n<<16>>16;do if(m<<16>>16>16){if((p+49|0)<(q|0)){m=n;break}if((p+31|0)<(q|0)){m=q+1&65535;break}else{m=(d[18112+(q-p)>>0]|0)+q&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){m=p+1&65535;break}else{m=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);n=b[A>>1]|0;p=b[ea+8+(v<<4)+10>>1]|0;q=n<<16>>16;r=p<<16>>16;do if(n<<16>>16>16){if((q+49|0)<(r|0))break;if((q+31|0)<(r|0)){p=r+1&65535;break}else{p=(d[18112+(r-q)>>0]|0)+r&65535;break}}else{if((r+49|0)<(q|0)){p=n;break}if((r+31|0)<(q|0)){p=q+1&65535;break}else{p=(d[18112+(q-r)>>0]|0)+q&65535;break}}while(0);d:do if(k<<16>>16){n=k;r=L;while(1){q=b[r+8>>1]|0;if(q<<16>>16>=m<<16>>16?(s=r,(c[s>>2]&t|0)==(t|0)?(c[s+4>>2]&u|0)==(u|0):0):0){ga=52;break}if(q<<16>>16<=m<<16>>16?(s=r,q=c[s>>2]|0,s=c[s+4>>2]|0,(q&t|0)==(q|0)&(s&u|0)==(s|0)):0)break d;n=n+-1<<16>>16;if(!(n<<16>>16))break;else r=r+16|0}if((ga|0)==52){q=r;n=r+8|0;ga=53;break}if((k&65535)<3){ga=48;break}r=k&65535;s=L;n=b[N>>1]|0;q=1;do{s=n<<16>>16>(b[ha+8+(q<<4)+8>>1]|0)?ha+8+(q<<4)|0:s;q=q+1|0;n=b[s+8>>1]|0}while((q|0)!=(r|0));if(n<<16>>16>m<<16>>16){q=s;n=s+8|0;ga=53}}else ga=48;while(0);if((ga|0)==48){n=k&65535;b[ha+8+(n<<4)+10>>1]=p;q=ha+8+(n<<4)|0;n=ha+8+(n<<4)+8|0;k=k+1<<16>>16;ga=53}do if((ga|0)==53){ga=0;s=q;c[s>>2]=t;c[s+4>>2]=u;b[n>>1]=m;m=q+10|0;if((b[m>>1]|0)<=p<<16>>16)break;b[m>>1]=p}while(0);v=v+1|0}while((v|0)!=(x|0));w=w+1|0}while((w|0)!=(B|0))}n=0}while(0);C=C+48|0}while(C>>>0>>0)}else l=0;while(0);b[O>>1]=1;c[c[P>>2]>>2]=o;c[Q>>2]=8192;b[R>>1]=0;a[S>>0]=0;c[T>>2]=0;c[T+4>>2]=0;c[T+8>>2]=0;if(l|0)break a;n=k&65535;m=0;while(1){if(m>>>0>=n>>>0)break b;b[U>>1]=(e[ha+8+(m<<4)+8>>1]|0)+1;b[V>>1]=b[ha+8+(m<<4)+10>>1]|0;C=ha+8+(m<<4)|0;D=c[C+4>>2]|0;l=aa;c[l>>2]=c[C>>2];c[l+4>>2]=D;l=_l(f,aa)|0;if(!l)m=m+1|0;else break a}}while(0);o=o+48|0;if(o>>>0>=$>>>0){l=0;break}}b[ha>>1]=k;ha=l;Ra=ia;return ha|0}function Zl(f,i,j,k,l,m,n,o,p){f=f|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0.0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;U=Ra;Ra=Ra+32|0;P=U+24|0;M=U+16|0;x=U+8|0;y=U;B=c[f+4>>2]|0;G=c[n+16>>2]|0;T=c[f+12>>2]|0;v=c[f>>2]|0;O=c[v>>2]|0;v=c[v+4>>2]|0;w=d[T+16>>0]|0;I=c[n>>2]|0;c[p>>2]=0;C=T;c[C>>2]=i;c[C+4>>2]=j;C=n+4|0;z=(I|0)>0;if(z){q=c[B+20>>2]|0;i=c[C>>2]|0;j=0;while(1){S=c[i+8>>2]|0;u=i+5|0;a[u>>0]=0;Q=q+(S*48|0)+32|0;N=c[Q>>2]|0;Q=c[Q+4>>2]|0;if((N&k|0)==(N|0)&(Q&l|0)==(Q|0)?(b[q+(S*48|0)+12>>1]&m)<<16>>16==0:0)a[u>>0]=1;j=j+1|0;if((j|0)==(I|0))break;else i=i+12|0}}gw(G|0,0,I<<3|0)|0;J=n+24|0;c[J>>2]=0;E=n+20|0;c[E>>2]=0;K=n+32|0;c[K>>2]=0;N=n+40|0;g[N>>3]=5.e+98;Q=n+48|0;S=Q;c[S>>2]=25;c[S+4>>2]=0;S=n+56|0;c[S>>2]=0;j=v+8+(w*72|0)+56|0;i=c[j+4>>2]|0;D=n+64|0;c[D>>2]=c[j>>2];c[D+4>>2]=i;D=v+8+(w*72|0)+16|0;i=c[(c[D>>2]|0)+64>>2]|0;j=c[O>>2]|0;if((c[i>>2]|0)!=(j|0))do i=c[i+24>>2]|0;while((c[i>>2]|0)!=(j|0));q=c[i+8>>2]|0;u=Xa[c[(c[q>>2]|0)+12>>2]&255](q,n)|0;a:do switch(u|0){case 0:case 19:break;case 7:{i=c[O>>2]|0;j=i+81|0;if((a[j>>0]|0)==0?(a[i+82>>0]|0)==0:0){a[j>>0]=1;if((c[i+180>>2]|0)>0)c[i+264>>2]=1;A=i+272|0;c[A>>2]=(c[A>>2]|0)+1;i=c[i+236>>2]|0;if(i|0)c[i+12>>2]=7}break}default:{i=c[q+8>>2]|0;if(i|0){c[x>>2]=i;cd(O,31408,x);break a}switch(u|0){case 516:{i=50738;break}case 100:{i=50760;break}case 101:{i=50782;break}default:{i=u&255;if(i>>>0<29?(520028155>>>i&1|0)!=0:0)i=c[22960+(i<<2)>>2]|0;else i=50724}}c[y>>2]=i;cd(O,31408,y)}}while(0);i=q+8|0;j=c[i>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0;switch(u|0){case 0:{do if(z){j=T+48|0;i=0;do{c[(c[j>>2]|0)+(i<<2)>>2]=0;i=i+1|0}while((i|0)!=(I|0));A=T+24|0;i=T+30|0;b[i>>1]=0;if(z){y=B+12|0;z=T+48|0;x=B+20|0;u=-1;v=c[C>>2]|0;w=0;while(1){q=c[G+(w<<3)>>2]|0;k=q+-1|0;if((q|0)>0){l=c[v+8>>2]|0;if((q|0)>(I|0)|(l|0)<0)break;if((l|0)>=(c[y>>2]|0))break;j=(c[z>>2]|0)+(k<<2)|0;if(c[j>>2]|0)break;if(!(a[v+5>>0]|0))break;m=c[x>>2]|0;V=m+(l*48|0)+32|0;W=T;B=c[W+4>>2]|c[V+4>>2];C=T;c[C>>2]=c[W>>2]|c[V>>2];c[C+4>>2]=B;c[j>>2]=m+(l*48|0);u=(k|0)>(u|0)?k:u;if((q|0)<17?a[G+(w<<3)+4>>0]|0:0)b[i>>1]=1<>1];if(b[m+(l*48|0)+12>>1]&1){c[K>>2]=0;c[S>>2]=c[S>>2]&-2;c[p>>2]=1}}w=w+1|0;if((w|0)>=(I|0)){R=50;break}else v=v+12|0}if((R|0)==50){j=b[i>>1]|0;q=A;k=A;break}c[M>>2]=c[c[D>>2]>>2];cd(O,43661,M);W=1;Ra=U;return W|0}else{u=-1;j=0;q=A;k=A}}else{k=T+24|0;i=T+30|0;b[i>>1]=0;u=-1;j=0;q=k}while(0);b[i>>1]=j&~o;b[T+40>>1]=u+1;b:do if((u|0)>=0){j=c[T+48>>2]|0;i=0;while(1){if(!(c[j+(i<<2)>>2]|0))break;if((i|0)<(u|0))i=i+1|0;else break b}c[P>>2]=c[c[D>>2]>>2];cd(O,43661,P);W=1;Ra=U;return W|0}while(0);c[q>>2]=c[E>>2];u=n+28|0;l=T+28|0;a[l>>0]=c[u>>2];c[u>>2]=0;u=T+32|0;c[u>>2]=c[J>>2];if(!(c[K>>2]|0))i=0;else i=c[n+8>>2]&255;a[k+5>>0]=i;b[T+18>>1]=0;r=+g[N>>3];g[h>>3]=r;i=c[h>>2]|0;j=c[h+4>>2]|0;do if(!(r<=1.0)){if(!(r<=2.0e9)){i=bw(i|0,j|0,52)|0;L()|0;i=(i*10|0)+55316&65535;break}i=~~r>>>0;j=+t(r)>=1.0?(r>0.0?~~+H(+s(r/4294967296.0),4294967295.0)>>>0:~~+F((r-+(~~r>>>0))/4294967296.0)>>>0):0;if(!(j>>>0<0|(j|0)==0&i>>>0<8)){if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15)do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31)}else{if(j>>>0<0|(j|0)==0&i>>>0<2){i=0;break}q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535}i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535}else i=0;while(0);b[T+20>>1]=i;j=Q;i=c[j>>2]|0;j=c[j+4>>2]|0;if(j>>>0<0|(j|0)==0&i>>>0<8)if(j>>>0<0|(j|0)==0&i>>>0<2)i=0;else{q=40;do{q=(q&65535)+65526|0;i=cw(i|0,j|0,1)|0;j=L()|0}while(j>>>0<0|(j|0)==0&i>>>0<8);q=q&65535;R=88}else{if(j>>>0>0|(j|0)==0&i>>>0>255){q=40;do{q=(q&65535)+40|0;W=i;i=bw(i|0,j|0,4)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>4095);q=q&65535}else q=40;if(j>>>0>0|(j|0)==0&i>>>0>15){do{q=(q&65535)+10&65535;W=i;i=bw(i|0,j|0,1)|0;V=j;j=L()|0}while(V>>>0>0|(V|0)==0&W>>>0>31);R=88}else R=88}if((R|0)==88)i=(q&65535)+65526+(e[3648+((i&7)<<1)>>1]|0)&65535;b[T+22>>1]=i;j=T+36|0;W=c[j>>2]|0;c[j>>2]=(c[S>>2]&1|0)==0?W&-4097:W|4096;j=_l(f,T)|0;if(!(a[l>>0]|0)){W=j;Ra=U;return W|0}i=c[u>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{W=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);a[l>>0]=0;W=j;Ra=U;return W|0}case 19:{W=0;Ra=U;return W|0}default:{W=u;Ra=U;return W|0}}return 0}function _l(f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0;k=c[f>>2]|0;B=c[c[k>>2]>>2]|0;h=f+24|0;i=c[h>>2]|0;if(!i){f=c[f+16>>2]|0;if(!f){g=101;return g|0}b[f>>1]=0;g=101;return g|0}c[h>>2]=i+-1;p=c[f+16>>2]|0;if(p|0){if(!(b[g+40>>1]|0)){g=0;return g|0}m=g;l=c[m>>2]|0;m=c[m+4>>2]|0;n=b[g+20>>1]|0;o=b[g+22>>1]|0;j=b[p>>1]|0;i=p+8|0;do if(j<<16>>16){f=j;k=i;while(1){h=b[k+8>>1]|0;if(h<<16>>16>=n<<16>>16?(g=k,(c[g>>2]&l|0)==(l|0)?(c[g+4>>2]&m|0)==(m|0):0):0){v=18;break}if(h<<16>>16<=n<<16>>16?(g=k,B=c[g>>2]|0,g=c[g+4>>2]|0,(B&l|0)==(B|0)&(g&m|0)==(g|0)):0){f=0;v=157;break}f=f+-1<<16>>16;if(!(f<<16>>16)){v=13;break}else k=k+16|0}if((v|0)==13){if((j&65535)<3){v=14;break}j=j&65535;f=b[p+16>>1]|0;h=1;do{i=f<<16>>16>(b[p+8+(h<<4)+8>>1]|0)?p+8+(h<<4)|0:i;h=h+1|0;f=b[i+8>>1]|0}while((h|0)!=(j|0));if(f<<16>>16>n<<16>>16){h=i;f=i+8|0;break}else f=0;return f|0}else if((v|0)==18){h=k;f=k+8|0;break}else if((v|0)==157)return f|0}else v=14;while(0);if((v|0)==14){f=j&65535;b[p>>1]=j+1<<16>>16;b[p+8+(f<<4)+10>>1]=o;h=p+8+(f<<4)|0;f=p+8+(f<<4)+8|0}g=h;c[g>>2]=l;c[g+4>>2]=m;b[f>>1]=n;f=h+10|0;if((b[f>>1]|0)<=o<<16>>16){g=0;return g|0}b[f>>1]=o;g=0;return g|0}f=k+60|0;p=c[f>>2]|0;A=g+36|0;n=c[A>>2]|0;k=(p|0)==0;if(!(k|(n&512|0)==0)){l=g+20|0;m=g+22|0;i=a[g+16>>0]|0;h=p;do{do if((a[h+16>>0]|0)==i<<24>>24?c[h+36>>2]&512|0:0){if(am(h,g)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+65535;break}if(am(g,h)|0){b[l>>1]=b[h+20>>1]|0;b[m>>1]=(e[h+22>>1]|0)+1}}while(0);h=c[h+52>>2]|0}while((h|0)!=0)}a:do if(k)v=57;else{q=a[g+16>>0]|0;r=g+17|0;o=g+42|0;s=g+18|0;t=g+20|0;u=g+22|0;if((n&513|0)!=513){m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}m=p;while(1){if((a[m+16>>0]|0)==q<<24>>24?(a[m+17>>0]|0)==(a[r>>0]|0):0){if((c[m+36>>2]&16384|0?(b[o>>1]|0)==0:0)?(p=m,v=g,n=c[v>>2]|0,v=c[v+4>>2]|0,(n&c[p>>2]|0)==(n|0)?(v&c[p+4>>2]|0)==(v|0):0):0){v=57;break a}v=m;p=c[v>>2]|0;v=c[v+4>>2]|0;i=g;h=c[i>>2]|0;i=c[i+4>>2]|0;k=h&p;l=i&v;if((((k|0)==(p|0)&(l|0)==(v|0)?(b[m+18>>1]|0)<=(b[s>>1]|0):0)?(b[m+20>>1]|0)<=(b[t>>1]|0):0)?(b[m+22>>1]|0)<=(b[u>>1]|0):0){f=0;break}if(((k|0)==(h|0)&(l|0)==(i|0)?(b[m+20>>1]|0)>=(b[t>>1]|0):0)?(b[m+22>>1]|0)>=(b[u>>1]|0):0){v=57;break a}}f=m+52|0;m=c[f>>2]|0;if(!m){i=f;v=58;break a}}return f|0}while(0);b:do if((v|0)==57){u=c[f>>2]|0;if(u){f=u+52|0;h=c[f>>2]|0;if(h){o=g+16|0;p=g+17|0;q=g+42|0;r=g+18|0;s=g+20|0;t=g+22|0;do{n=a[o>>0]|0;while(1){if((a[h+16>>0]|0)==n<<24>>24?(a[h+17>>0]|0)==(a[p>>0]|0):0){if(((c[h+36>>2]&16384|0?(b[q>>1]|0)==0:0)?(c[A>>2]&513|0)==513:0)?(l=h,m=g,k=c[m>>2]|0,m=c[m+4>>2]|0,(k&c[l>>2]|0)==(k|0)?(m&c[l+4>>2]|0)==(m|0):0):0)break;C=h;D=c[C>>2]|0;C=c[C+4>>2]|0;k=g;i=c[k>>2]|0;k=c[k+4>>2]|0;l=i&D;m=k&C;if((((l|0)==(D|0)&(m|0)==(C|0)?(b[h+18>>1]|0)<=(b[r>>1]|0):0)?(b[h+20>>1]|0)<=(b[s>>1]|0):0)?(b[h+22>>1]|0)<=(b[t>>1]|0):0)break b;if(((l|0)==(i|0)&(m|0)==(k|0)?(b[h+20>>1]|0)>=(b[s>>1]|0):0)?(b[h+22>>1]|0)>=(b[t>>1]|0):0)break}f=h+52|0;h=c[f>>2]|0;if(!h)break b}c[f>>2]=c[h+52>>2];$l(B,h);h=c[f>>2]|0}while((h|0)!=0)}}else{i=f;v=58}}while(0);do if((v|0)==58){c:do if(c[B+272>>2]|0)if(!(a[B+81>>0]|0))v=69;else{c[i>>2]=0;D=7;return D|0}else{do if((e[B+276>>1]|0)>=72){h=B+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}h=B+296|0;f=c[h>>2]|0;if(!f){f=B+292|0;break}else{c[h>>2]=c[f>>2];D=B+284|0;c[D>>2]=(c[D>>2]|0)+1;break c}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=69}while(0);if((v|0)==69)f=_d(B,72,0)|0;c[i>>2]=f;if(!f){D=7;return D|0}else{c[f+48>>2]=f+56;b[f+40>>1]=0;b[f+44>>1]=3;c[f+36>>2]=0;c[f+52>>2]=0;u=f;break}}while(0);l=u+36|0;f=c[l>>2]|0;do if(f&17408|0){if(f&1024|0?(x=u+28|0,a[x>>0]|0):0){f=u+32|0;h=c[f>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);a[x>>0]=0;c[f>>2]=0;break}if(f&16384|0?(y=u+32|0,w=c[y>>2]|0,w|0):0){f=c[w+16>>2]|0;d:do if(f){do if(B|0){h=B+480|0;if(!(c[h>>2]|0)){i=f;if((c[B+304>>2]|0)>>>0>i>>>0)break;if((c[B+308>>2]|0)>>>0<=i>>>0)break;D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else Xd(B,f);f=c[y>>2]|0;v=113;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);v=111;break}else{v=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-v;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);v=111;break}}else v=111;while(0);if((v|0)==111){f=c[y>>2]|0;if(!B){z=f;v=118}else{h=B+480|0;v=113}}do if((v|0)==113){if(c[h>>2]|0){Xd(B,f);break}D=f;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[f>>2]=c[D>>2];c[D>>2]=f}else{z=f;v=118}}while(0);do if((v|0)==118?z|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](z);break}else{D=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);break}while(0);c[y>>2]=0}}while(0);f=b[g+40>>1]|0;k=u+44|0;do if((e[k>>1]|0)<(f&65535)){i=(f&65535)+7&131064;h=i<<2;e:do if(c[B+272>>2]|0){if(!(a[B+81>>0]|0))v=135}else{do if(!(0<0|(0==0?(e[B+276>>1]|0)>>>0>>0:0))){f=B+300|0;j=c[f>>2]|0;if(j|0){c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}f=B+296|0;j=c[f>>2]|0;if(!j){f=B+292|0;break}else{c[f>>2]=c[j>>2];v=B+284|0;c[v>>2]=(c[v>>2]|0)+1;v=136;break e}}else f=B+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;v=135}while(0);if((v|0)==135){j=_d(B,h,0)|0;v=136}if((v|0)==136?j|0:0){f=u+48|0;ew(j|0,c[f>>2]|0,e[k>>1]<<2|0)|0;h=c[f>>2]|0;do if((h|0)!=(u+56|0)){if(c[B+480>>2]|0){Xd(B,h);break}D=h;if((c[B+304>>2]|0)>>>0<=D>>>0?(c[B+308>>2]|0)>>>0>D>>>0:0){D=B+300|0;c[h>>2]=c[D>>2];c[D>>2]=h;break}if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{D=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[f>>2]=j;b[k>>1]=i;v=149;break}i=u+24|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;i=7}else{j=c[u+48>>2]|0;v=149}while(0);do if((v|0)==149){f=u;h=g;i=f+44|0;do{c[f>>2]=c[h>>2];f=f+4|0;h=h+4|0}while((f|0)<(i|0));ew(j|0,c[g+48>>2]|0,e[u+40>>1]<<2|0)|0;f=c[A>>2]|0;if(f&1024|0){a[g+28>>0]=0;i=0;break}if(!(f&16384))i=0;else{c[g+32>>2]=0;i=0}}while(0);if(c[l>>2]&1024|0){D=i;return D|0}f=u+32|0;h=c[f>>2]|0;if(!h){D=i;return D|0}D=h+55|0;if(((d[D>>0]|d[D+1>>0]<<8)&3)!=3){D=i;return D|0}c[f>>2]=0;D=i;return D|0}function $l(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;l=e+48|0;f=c[l>>2]|0;m=e+56|0;do if((f|0)!=(m|0)){if(d|0){if(c[d+480>>2]|0){Xd(d,f);break}k=f;if((c[d+304>>2]|0)>>>0<=k>>>0?(c[d+308>>2]|0)>>>0>k>>>0:0){k=d+300|0;c[f>>2]=c[k>>2];c[k>>2]=f;break}}if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);k=e+36|0;f=c[k>>2]|0;do if(f&17408|0){if(f&1024|0?(h=e+28|0,a[h>>0]|0):0){f=e+32|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);a[h>>0]=0;c[f>>2]=0;break}if(f&16384|0?(i=e+32|0,g=c[i>>2]|0,g|0):0){f=c[g+16>>2]|0;a:do if(f){do if(d|0){g=d+480|0;if(!(c[g>>2]|0)){h=f;if((c[d+304>>2]|0)>>>0>h>>>0)break;if((c[d+308>>2]|0)>>>0<=h>>>0)break;h=d+300|0;c[f>>2]=c[h>>2];c[h>>2]=f}else Xd(d,f);f=c[i>>2]|0;h=35;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);h=33;break}else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);h=33;break}}else h=33;while(0);if((h|0)==33){f=c[i>>2]|0;if(!d){j=f;h=40}else{g=d+480|0;h=35}}do if((h|0)==35){if(c[g>>2]|0){Xd(d,f);break}g=f;if((c[d+304>>2]|0)>>>0<=g>>>0?(c[d+308>>2]|0)>>>0>g>>>0:0){g=d+300|0;c[f>>2]=c[g>>2];c[g>>2]=f}else{j=f;h=40}}while(0);do if((h|0)==40?j|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}while(0);c[l>>2]=m;b[e+40>>1]=0;b[e+44>>1]=3;c[k>>2]=0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);return}m=e;if((c[d+304>>2]|0)>>>0<=m>>>0?(c[d+308>>2]|0)>>>0>m>>>0:0){m=d+300|0;c[e>>2]=c[m>>2];c[m>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{m=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function am(a,d){a=a|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0;h=b[a+40>>1]|0;g=h&65535;j=b[a+42>>1]|0;i=b[d+40>>1]|0;l=i&65535;k=b[d+42>>1]|0;if((k&65535)>(j&65535)?1:(g-(j&65535)|0)>=(l-(k&65535)|0)){d=0;return d|0}e=b[a+20>>1]|0;f=b[d+20>>1]|0;if(e<<16>>16>=f<<16>>16){if(e<<16>>16>f<<16>>16){d=0;return d|0}if((b[a+22>>1]|0)>(b[d+22>>1]|0)){d=0;return d|0}}e=g+-1|0;a:do if(h<<16>>16){k=c[a+48>>2]|0;j=d+48|0;if(!(i<<16>>16)){while(1){if(c[k+(e<<2)>>2]|0){e=0;break}if((e|0)>0)e=e+-1|0;else break a}return e|0}b:while(1){h=c[k+(e<<2)>>2]|0;c:do if(h|0){i=c[j>>2]|0;f=l;while(1){g=f;f=f+-1|0;if((c[i+(f<<2)>>2]|0)==(h|0))break c;if((g|0)<=1){e=0;break b}}}while(0);if((e|0)>0)e=e+-1|0;else break a}return e|0}while(0);if(c[a+36>>2]&64|0?(c[d+36>>2]&64|0)==0:0){d=0;return d|0}d=1;return d|0}function bm(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0;g=c[c[e>>2]>>2]|0;a:do if((a[f>>0]|0)==44){while(1){if(!(bm(d,e,c[f+12>>2]|0)|0)){f=0;break}f=c[f+16>>2]|0;if((a[f>>0]|0)!=44)break a}return f|0}while(0);k=(0==0?(c[(c[g>>2]|0)+32>>2]&8388608|0)==0:0)?g:0;j=e+12|0;g=c[j>>2]|0;if((g|0)<=0){d=0;return d|0}h=c[e+20>>2]|0;i=0;while(1){e=c[h>>2]|0;if(!((c[e+4>>2]&1|0)!=0?(b[e+36>>1]|0)!=(d|0):0)){if(em(k,e,f,d)|0){f=1;g=12;break}g=c[j>>2]|0}i=i+1|0;if((i|0)>=(g|0)){f=0;g=12;break}else h=h+48|0}if((g|0)==12)return f|0;return 0}function cm(a,d,f){a=a|0;d=d|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;t=Ra;Ra=Ra+16|0;s=t;r=d;p=d+8|0;g=p;q=~(c[g>>2]|c[r>>2]);r=~(c[g+4>>2]|c[r+4>>2]);g=c[a+12>>2]|0;m=a+20|0;a:do if((g|0)>0){n=d+40|0;o=d+48|0;d=d+22|0;a=0;l=c[m>>2]|0;while(1){if(b[l+10>>1]&2)break a;k=l+40|0;i=c[k>>2]|0;k=c[k+4>>2]|0;j=p;b:do if((i&q|0)==0&(k&r|0)==0&(c[j>>2]&i|0?1:(c[j+4>>2]&k|0)!=0)){h=b[n>>1]|0;if(h<<16>>16){k=c[o>>2]|0;h=h&65535;do{i=h;h=h+-1|0;j=c[k+(h<<2)>>2]|0;if(j|0){if((j|0)==(l|0))break b;j=c[j+16>>2]|0;if((j|0)>-1?((c[m>>2]|0)+(j*48|0)|0)==(l|0):0)break b}}while((i|0)>1)}h=b[l+8>>1]|0;if(h<<16>>16<1){b[d>>1]=(e[d>>1]|0)+(h&65535);break}b[d>>1]=(b[d>>1]|0)+-1<<16>>16;if(b[l+12>>1]&130){k=(uk(c[(c[l>>2]|0)+16>>2]|0,s)|0)!=0;k=k&((c[s>>2]|0)+1|0)>>>0<3?10:20;c[s>>2]=k;a=(k|0)>(a<<16>>16|0)?k&65535:a}}while(0);if((g|0)>1){g=g+-1|0;l=l+48|0}else break}}else{a=0;d=d+22|0}while(0);a=(f<<16>>16)-(a<<16>>16)|0;if((a|0)>=(b[d>>1]|0)){Ra=t;return}b[d>>1]=a;Ra=t;return}function dm(f,g,h,i){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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0;Fa=Ra;Ra=Ra+96|0;ga=Fa;ja=c[c[f>>2]>>2]|0;ua=c[ja>>2]|0;va=c[f+12>>2]|0;sa=ua+81|0;if(a[sa>>0]|0){Ea=7;Ra=Fa;return Ea|0}wa=va+36|0;xa=c[wa>>2]|0;da=(xa&32|0)==0?447:24;ra=h+55|0;da=((d[ra>>0]|d[ra+1>>0]<<8)&4)==0?da:da&387;ya=va+24|0;za=b[ya>>1]|0;ka=va+26|0;la=b[ka>>1]|0;ma=va+28|0;na=b[ma>>1]|0;Aa=va+42|0;oa=b[Aa>>1]|0;Ba=va+40|0;m=b[Ba>>1]|0;qa=va;pa=c[qa>>2]|0;qa=c[qa+4>>2]|0;Ca=va+22|0;Da=b[Ca>>1]|0;ha=f+4|0;k=c[ha>>2]|0;ia=g+40|0;ta=c[ia>>2]|0;Ea=za&65535;c[ga>>2]=k;c[ga+4>>2]=k;k=ga+12|0;c[k>>2]=0;l=ga+16|0;a[l>>0]=0;n=ga+8|0;c[n>>2]=0;c[ga+20>>2]=da;c[ga+24>>2]=0;c[ga+28>>2]=ta;a[ga+17>>0]=1;a[ga+18>>0]=1;do if(h){o=b[(c[h+4>>2]|0)+(Ea<<1)>>1]|0;j=o<<16>>16;if(o<<16>>16==-2){c[k>>2]=c[(c[h+40>>2]|0)+4+(Ea*20|0)>>2];c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];b[ga+72>>1]=-2;n=Ul(ga)|0;break}k=c[h+12>>2]|0;if(o<<16>>16!=(b[k+40>>1]|0))if(o<<16>>16>-1){a[l>>0]=a[(c[k+4>>2]|0)+(j<<4)+13>>0]|0;c[n>>2]=c[(c[h+32>>2]|0)+(Ea<<2)>>2];ca=8}else ca=8;else{j=-1;ca=8}}else{j=Ea;ca=8}while(0);if((ca|0)==8){b[ga+72>>1]=j;n=Tl(ga)|0}b[va+18>>1]=0;ta=h+8|0;da=b[c[ta>>2]>>1]|0;if(da<<16>>16<11)M=0;else{j=da<<16>>16;k=((j|0)<0)<<31>>31;if((da&65535)>255){l=40;do{l=(l&65535)+40|0;ba=j;j=bw(j|0,k|0,4)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>4095);l=l&65535}else l=40;if(k>>>0>0|(k|0)==0&j>>>0>15){do{l=(l&65535)+10&65535;ba=j;j=bw(j|0,k|0,1)|0;aa=k;k=L()|0}while(aa>>>0>0|(aa|0)==0&ba>>>0>31);k=l}else k=l;M=(k&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)&65535}a:do if(!n)j=0;else{v=h+4|0;w=va+8|0;x=h+12|0;y=g+36|0;z=h+54|0;A=f+20|0;B=va+44|0;C=h+50|0;D=va+48|0;E=m&65535;V=E+8&131064;F=V<<2;G=ua+272|0;H=ua+276|0;I=h+48|0;J=g+16|0;K=M<<16>>16;N=ua+288|0;O=ua+300|0;P=va+56|0;Q=i<<16>>16==0;R=K+49|0;S=va+20|0;T=ua+296|0;U=ua+284|0;V=V&65535;W=ua+480|0;X=K+31|0;Y=i<<16>>16;Z=ua+292|0;_=ua+304|0;$=h+52|0;aa=K+1&65535;ba=ua+308|0;t=n;l=0;k=0;do{s=b[t+12>>1]|0;u=s&65535;if(s<<16>>16==256){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;if(j<<16>>16>-1)j=d[(c[(c[x>>2]|0)+4>>2]|0)+(j<<16>>16<<4)+12>>0]|0;else j=j<<16>>16==-1&1;if(j)j=0;else ca=26}else ca=26;b:do if((ca|0)==26){ca=0;r=t+32|0;q=r;o=w;n=c[o>>2]|0;o=c[o+4>>2]|0;if(((n&c[q>>2]|0)==0?(o&c[q+4>>2]|0)==0:0)?(ea=t+10|0,!(s<<16>>16==16&(b[ea>>1]&256)!=0)):0){if(a[y>>0]&8?(c[(c[t>>2]|0)+4>>2]&1|0)==0:0){j=0;break}if((a[z>>0]|0)!=0?((e[C>>1]|0)+-1|0)==(Ea|0):0)j=2;else j=1;c[A>>2]=c[A>>2]|j;c[wa>>2]=xa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Ba>>1]=m;if((m&65535)<(e[B>>1]|0)){q=E;p=m;j=c[D>>2]|0}else{do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=43;else{j=0;break a}else{if(!(0<0|(0==0?(e[H>>1]|0)>>>0>>0:0))){j=c[O>>2]|0;if(j|0){c[O>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}j=c[T>>2]|0;if(!j)j=Z;else{c[T>>2]=c[j>>2];c[U>>2]=(c[U>>2]|0)+1;break}}else j=N;c[j>>2]=(c[j>>2]|0)+1;ca=43}while(0);if((ca|0)==43){ca=0;j=_d(ua,F,0)|0}if(!j){j=0;break a}ew(j|0,c[D>>2]|0,e[B>>1]<<2|0)|0;n=c[D>>2]|0;c:do if((n|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,n);break}o=n;do if((c[_>>2]|0)>>>0<=o>>>0){if((c[ba>>2]|0)>>>0<=o>>>0)break;c[n>>2]=c[O>>2];c[O>>2]=n;break c}while(0);if(!n)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[D>>2]=j;b[B>>1]=V;p=b[Ba>>1]|0;o=w;q=p&65535;n=c[o>>2]|0;o=c[o+4>>2]|0}p=p+1<<16>>16;b[Ba>>1]=p;c[j+(q<<2)>>2]=t;j=r;q=(c[j+4>>2]|qa)&~o;r=va;c[r>>2]=(c[j>>2]|pa)&~n;c[r+4>>2]=q;d:do if(!(u&1)){if(u&130|0){j=b[(c[v>>2]|0)+(Ea<<1)>>1]|0;n=c[wa>>2]|0;o=n|1;c[wa>>2]=o;do if(j<<16>>16!=-1){if(!(Q&j<<16>>16>-1)){s=0;p=o;break d}j=b[C>>1]|0;if(((j&65535)+-1|0)!=(Ea|0)){s=0;p=o;break d}if((d[ra>>0]|d[ra+1>>0]<<8)&8)break;if(j<<16>>16==1?s<<16>>16==2&(a[z>>0]|0)!=0:0)break;p=n|65537;c[wa>>2]=p;s=0;break d}while(0);p=n|4097;c[wa>>2]=p;s=0;break}if(u&256|0){p=c[wa>>2]|8;c[wa>>2]=p;s=0;break}j=c[wa>>2]|0;if(!(u&36)){c[wa>>2]=j|18;j=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ma>>1]=j;j=c[wa>>2]|0;if(!(j&32)){l=t;k=0;s=0;p=j;break}l=t;k=c[(c[D>>2]|0)+((e[Ba>>1]|0)+-2<<2)>>2]|0;s=0;p=j;break}c[wa>>2]=j|34;s=(gm(ja,c[ia>>2]|0,h,Ea,t)|0)&65535;b[ka>>1]=s;if(!(b[ea>>1]&256)){l=0;k=t;s=0;p=c[wa>>2]|0;break}l=t+48|0;j=b[Ba>>1]|0;if((j&65535)<(e[B>>1]|0))k=c[D>>2]|0;else{o=(j&65535)+8&131064;n=o<<2;e:do if(c[G>>2]|0)if(!(a[sa>>0]|0))ca=117;else{j=0;break a}else{do if(0<0|(0==0?(e[H>>1]|0)>>>0>>0:0))j=N;else{k=c[O>>2]|0;if(k|0){c[O>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}k=c[T>>2]|0;if(!k){j=Z;break}c[T>>2]=c[k>>2];c[U>>2]=(c[U>>2]|0)+1;break e}while(0);c[j>>2]=(c[j>>2]|0)+1;ca=117}while(0);if((ca|0)==117){ca=0;k=_d(ua,n,0)|0}if(!k){j=0;break a}ew(k|0,c[D>>2]|0,e[B>>1]<<2|0)|0;j=c[D>>2]|0;f:do if((j|0)!=(P|0)){if(c[W>>2]|0){Xd(ua,j);break}n=j;do if((c[_>>2]|0)>>>0<=n>>>0){if((c[ba>>2]|0)>>>0<=n>>>0)break;c[j>>2]=c[O>>2];c[O>>2]=j;break f}while(0);if(!j)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[D>>2]=k;b[B>>1]=o;j=b[Ba>>1]|0}b[Ba>>1]=j+1<<16>>16;c[k+((j&65535)<<2)>>2]=l;p=c[wa>>2]|16;c[wa>>2]=p;b[ma>>1]=1;k=t;s=0}else{q=c[t>>2]|0;if(!(c[q+4>>2]&2048)){j=c[q+20>>2]|0;if((j|0)!=0?(fa=c[j>>2]|0,(fa|0)!=0):0){n=((fa|0)<0)<<31>>31;do if(fa>>>0<8){if(fa>>>0<2){j=0;break}o=40;j=fa;do{o=(o&65535)+65526|0;j=cw(j|0,n|0,1)|0;n=L()|0}while(n>>>0<0|(n|0)==0&j>>>0<8);o=o&65535;ca=78}else{if(fa>>>0>255){o=40;j=fa;do{o=(o&65535)+40|0;ca=j;j=bw(j|0,n|0,4)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>4095);o=o&65535}else{o=40;j=fa}if(!(n>>>0>0|(n|0)==0&j>>>0>15)){ca=78;break}do{o=(o&65535)+10&65535;ca=j;j=bw(j|0,n|0,1)|0;s=n;n=L()|0}while(s>>>0>0|(s|0)==0&ca>>>0>31);ca=78}while(0);if((ca|0)==78){ca=0;j=(o&65535)+65526+(e[3648+((j&7)<<1)>>1]|0)|0}r=j<<16>>16}else r=0}else{r=(p&65535)+-1|0;if((p&65535)>1){p=c[D>>2]|0;o=0;j=46;do{n=c[p+(o<<2)>>2]|0;if(n)j=(c[n>>2]|0)==(q|0)?0:j;o=o+1|0}while((o|0)!=(r|0));r=j}else r=46}if((d[ra>>0]|d[ra+1>>0]<<8)&128){q=b[(c[ta>>2]|0)+(Ea<<1)>>1]|0;n=r&65535;if(n<<16>>16<11)j=0;else{j=n<<16>>16;p=((j|0)<0)<<31>>31;if((n&65535)>255){o=40;n=p;do{o=(o&65535)+40|0;s=j;j=bw(j|0,n|0,4)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>4095);o=o&65535}else{o=40;n=p}if(n>>>0>0|(n|0)==0&j>>>0>15){do{o=(o&65535)+10&65535;s=j;j=bw(j|0,n|0,1)|0;p=n;n=L()|0}while(p>>>0>0|(p|0)==0&s>>>0>31);n=o}else n=o;j=(n&65535)+65493+(e[3648+((j&7)<<1)>>1]|0)|0}if(((q<<16>>16)+10+(j<<16>>16)|0)<(r+K|0)){j=0;break b}}p=c[wa>>2]|4;c[wa>>2]=p;s=r}while(0);do if(!(p&2)){n=(b[ya>>1]|0)+1<<16>>16;b[ya>>1]=n;n=n&65535;t=b[t+8>>1]|0;j=t&65535;if(t<<16>>16<1?(b[(c[v>>2]|0)+(Ea<<1)>>1]|0)>-1:0){j=j-s+(e[Ca>>1]|0)&65535;ca=152;break}j=c[ta>>2]|0;j=(e[j+(n<<1)>>1]|0)-(e[j+(n+-1<<1)>>1]|0)+(e[Ca>>1]|0)|0;n=j&65535;b[Ca>>1]=n;if(u&256){j=j+10&65535;ca=152}}else{j=b[Ca>>1]|0;o=j<<16>>16;do if(k){n=b[k+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);do if(l){n=b[l+8>>1]|0;if(n<<16>>16<1){j=(n&65535)+(j&65535)&65535;break}else{j=(j&65535)+65516&65535;break}}while(0);n=(k|0)!=0;do if(n){if(!((l|0)!=0&(b[k+8>>1]|0)>0))break;if((b[l+8>>1]|0)<=0)break;j=(j&65535)+65516&65535}while(0);ca=(((l|0)!=0)<<31>>31)+(n<<31>>31)+o|0;j=(j<<16>>16>10?j:10)&65535;j=((ca|0)>(j|0)?j:ca)&65535;ca=152}while(0);if((ca|0)==152){ca=0;b[Ca>>1]=j;n=j}r=n&65535;o=r+1+(((b[I>>1]|0)*15|0)/(b[(c[J>>2]|0)+46>>1]|0)|0)|0;j=o&65535;o=o<<16>>16;do if(M<<16>>16>16){if((R|0)>=(o|0))if((X|0)<(o|0)){j=o+1&65535;break}else{j=o+(d[18112+(o-K)>>0]|0)&65535;break}}else if((o+49|0)>=(K|0))if((o+31|0)<(K|0))j=aa;else j=(d[18112+(K-o)>>0]|0)+K&65535;else j=M;while(0);b[S>>1]=j;if(!(p&320)){q=r+16|0;o=q&65535;p=j<<16>>16;q=q<<16>>16;do if(j<<16>>16>16){if((p+49|0)<(q|0)){j=o;break}if((p+31|0)<(q|0)){j=q+1&65535;break}else{j=q+(d[18112+(q-p)>>0]|0)&65535;break}}else{if((q+49|0)<(p|0))break;if((q+31|0)<(p|0)){j=p+1&65535;break}else{j=(d[18112+(p-q)>>0]|0)+p&65535;break}}while(0);b[S>>1]=j}o=s+Y|0;b[S>>1]=o+(j&65535);b[Ca>>1]=o+r;cm(c[ha>>2]|0,va,da);j=_l(f,va)|0;u=c[wa>>2]|0;b[Ca>>1]=(u&2|0)==0?n:Da;if((u&16|0)==0?(e[ya>>1]|0)<(e[$>>1]|0):0)dm(f,g,h,o&65535)|0;b[Ca>>1]=Da}else j=0}while(0);t=Tl(ga)|0}while((j|0)==0&(t|0)!=0)}while(0);ja=va;c[ja>>2]=pa;c[ja+4>>2]=qa;b[ya>>1]=za;b[ka>>1]=la;b[ma>>1]=na;b[Aa>>1]=oa;c[wa>>2]=xa;b[Ca>>1]=Da;b[Ba>>1]=m;if(za<<16>>16!=oa<<16>>16){Ea=j;Ra=Fa;return Ea|0}p=Ea+1|0;if(p>>>0>=(e[h+50>>1]|0)>>>0){Ea=j;Ra=Fa;return Ea|0}if((d[ra>>0]|d[ra+1>>0]<<8)&64){Ea=j;Ra=Fa;return Ea|0}if(b[ua+76>>1]&16384){Ea=j;Ra=Fa;return Ea|0}if((b[(c[ta>>2]|0)+(p<<1)>>1]|0)<=41){Ea=j;Ra=Fa;return Ea|0}n=va+44|0;if((m&65535)<(e[n>>1]|0)){n=za;o=za;j=c[va+48>>2]|0;k=xa;l=Da}else{m=(m&65535)+8&131064;l=m<<2;g:do if(c[ua+272>>2]|0)if(!(a[sa>>0]|0))ca=194;else{Ea=7;Ra=Fa;return Ea|0}else{do if(!(0<0|(0==0?(e[ua+276>>1]|0)>>>0>>0:0))){k=ua+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}k=ua+296|0;j=c[k>>2]|0;if(!j){j=ua+292|0;break}else{c[k>>2]=c[j>>2];sa=ua+284|0;c[sa>>2]=(c[sa>>2]|0)+1;break g}}else j=ua+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;ca=194}while(0);if((ca|0)==194)j=_d(ua,l,0)|0;if(!j){Ea=7;Ra=Fa;return Ea|0}k=va+48|0;ew(j|0,c[k>>2]|0,e[n>>1]<<2|0)|0;l=c[k>>2]|0;do if((l|0)!=(va+56|0)){if(c[ua+480>>2]|0){Xd(ua,l);break}va=l;if((c[ua+304>>2]|0)>>>0<=va>>>0?(c[ua+308>>2]|0)>>>0>va>>>0:0){va=ua+300|0;c[l>>2]=c[va>>2];c[va>>2]=l;break}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{va=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-va;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=j;b[n>>1]=m;n=b[ya>>1]|0;o=b[Aa>>1]|0;m=b[Ba>>1]|0;k=c[wa>>2]|0;l=b[Ca>>1]|0}b[ya>>1]=n+1<<16>>16;b[Aa>>1]=o+1<<16>>16;b[Ba>>1]=m+1<<16>>16;c[j+((m&65535)<<2)>>2]=0;c[wa>>2]=k|32768;Ba=c[ta>>2]|0;Ea=(e[Ba+(Ea<<1)>>1]|0)-(e[Ba+(p<<1)>>1]|0)|0;b[Ca>>1]=(l&65535)-Ea;dm(f,g,h,(((Ea<<16)+327680|0)>>>16)+(i&65535)&65535)|0;b[Ca>>1]=Da;b[ya>>1]=za;b[Aa>>1]=za;c[wa>>2]=xa;Ea=0;Ra=Fa;return Ea|0}function em(b,d,e,f){b=b|0;d=d|0;e=e|0;f=f|0;var g=0;if(!(bk(b,d,e,f)|0)){f=1;return f|0}g=a[e>>0]|0;do if(g<<24>>24==43){if(em(b,d,c[e+12>>2]|0,f)|0){f=1;return f|0}if(!(em(b,d,c[e+16>>2]|0,f)|0)){g=a[e>>0]|0;break}else{f=1;return f|0}}while(0);a:do if(g<<24>>24==51){switch(a[d>>0]|0){case 45:case 50:break a;default:{}}g=c[d+12>>2]|0;b:do if(!g)g=0;else while(1){d=c[g+4>>2]|0;if(!(d&4096))break b;if(!(d&262144))g=g+12|0;else g=(c[g+20>>2]|0)+4|0;g=c[g>>2]|0;if(!g){g=0;break}}while(0);if(!(bk(b,g,c[e+12>>2]|0,f)|0)){f=1;return f|0}}while(0);f=0;return f|0}function fm(d,e){d=d|0;e=e|0;var f=0,g=0,h=0;if((a[e>>0]|0)!=-94){d=0;return d|0}f=c[d+24>>2]|0;if((c[e+28>>2]|0)!=(c[f+4>>2]|0)){d=0;return d|0}f=c[f>>2]|0;h=b[e+32>>1]|0;e=b[f+52>>1]|0;a:do if(e<<16>>16){g=c[f+4>>2]|0;e=e&65535;f=0;while(1){if((b[g+(f<<1)>>1]|0)==h<<16>>16)break;f=f+1|0;if(f>>>0>=e>>>0)break a}if((f&65535)<<16>>16>=0){d=0;return d|0}}while(0);a[d+20>>0]=1;d=2;return d|0} function gq(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,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;$=Ra;Ra=Ra+16|0;H=$+4|0;Q=$;W=c[e+12>>2]|0;f=c[W+12>>2]|0;X=c[e>>2]|0;E=c[e+4>>2]|0;F=b+235|0;G=(a[F>>0]|0)==0?157:158;if(!E){_=0;Ra=$;return _|0}_=e+8|0;I=E+-1|0;J=e+44|0;K=e+40|0;M=(f&16|0)!=0;N=(E|0)>1;O=W+4|0;P=(f&32|0)==0;R=(f&34|0)!=0;S=(f&8|0)==0;T=(f&4|0)==0;U=(f&2|0)==0;V=W+8|0;C=(f&1|0)!=0;Y=e+20|0;Z=e+16|0;f=c[_>>2]|0;a:while(1){if((f|0)>0){j=0;do{f=c[X+(j<<2)>>2]|0;if(!(a[f+4>>0]|0)){f=fq(b,f)|0;if(f|0){D=186;break a}}else{i=f+40|0;if(!(a[f+5>>0]|0)){g=c[i>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=f+52|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}B=g;if((c[h+304>>2]|0)>>>0<=B>>>0?(c[h+308>>2]|0)>>>0>B>>>0:0){B=h+300|0;c[g>>2]=c[B>>2];c[B>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{B=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0}c[i>>2]=0}j=j+1|0;f=c[_>>2]|0}while((j|0)<(f|0))}f=f+(((f|0)==(E|0))<<31>>31)|0;if((f|0)>0)do{m=f;f=f+-1|0;b:do if((m|0)<(E|0)){k=f;j=c[X+(f<<2)>>2]|0;do{l=k;k=k+1|0;n=X+(k<<2)|0;i=c[n>>2]|0;h=(c[j+40>>2]|0)==0;o=i;g=c[i+40>>2]|0;if(!h)if(!g){g=0;D=32}else{A=c[j+60>>2]|0;g=c[i+60>>2]|0;B=A-g|0;g=Lu(c[j+64>>2]|0,c[i+64>>2]|0,(B|0)<0?A:g)|0;g=(g|0)==0?B:g}else D=32;if((D|0)==32){D=0;g=(h&1)-((g|0)==0&1)|0}if(!g)g=(c[i>>2]|0)-(c[j>>2]|0)|0;if((g|0)<0)break b;B=X+(l<<2)|0;j=c[B>>2]|0;c[n>>2]=j;c[B>>2]=o}while((k|0)<(I|0))}while(0)}while((m|0)>1);c[_>>2]=0;f=c[X>>2]|0;if(!(c[f+40>>2]|0)){f=0;D=186;break}i=c[f+60>>2]|0;c[J>>2]=i;h=c[f+64>>2]|0;c[K>>2]=h;f=c[W>>2]|0;if(!(M|(f|0)==0)){g=c[O>>2]|0;if((i|0)<(g|0)|S&(i|0)>(g|0)){f=0;D=186;break}if(Lu(h,f,g)|0){f=0;D=186;break}}c:do if(N){f=1;do{g=c[X+(f<<2)>>2]|0;if(!(c[g+40>>2]|0)){D=48;break c}if((c[g+60>>2]|0)!=(i|0)){D=48;break c}if(Lu(h,c[g+64>>2]|0,i)|0){D=48;break c}f=f+1|0}while((f|0)<(E|0))}else{f=1;D=48}while(0);if((D|0)==48){D=0;if(!(R|(f|0)!=1)){f=c[X>>2]|0;g=(c[f+56>>2]|0)==0;if(!(a[F>>0]|0)){D=52;break}if(g){D=51;break}else f=1}}q=0;do{r=c[X+(q<<2)>>2]|0;if((a[F>>0]|0)!=0?(c[r+56>>2]|0)!=0:0){a[H>>0]=0;A=r+88|0;B=A;c[B>>2]=0;c[B+4>>2]=0;B=r+84|0;c[B>>2]=0;kq(0,c[r+72>>2]|0,c[r+76>>2]|0,r+80|0,A,B,H)}else D=64;d:do if((D|0)==64){D=0;n=r+72|0;k=r+40|0;o=r+52|0;g=c[o>>2]|0;e:do if(g|0){l=(c[n>>2]|0)+10|0;p=r+48|0;m=r+44|0;i=c[p>>2]|0;j=g;while(1){g=c[k>>2]|0;if((l-g|0)<=(i|0))break e;h=(c[m>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,g+i|0,h,i,81)|0)break d;g=(c[p>>2]|0)+h|0;c[p>>2]=g;g=(c[k>>2]|0)+g|0;h=g+20|0;do{a[g>>0]=0;g=g+1|0}while((g|0)<(h|0));i=c[p>>2]|0;j=c[o>>2]|0;if((i|0)==(c[m>>2]|0))break;if(!j)break e}do if(j|0){g=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(g|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[o>>2]=0;c[p>>2]=0}while(0);l=c[n>>2]|0;k=r+88|0;g=a[l>>0]|0;h=g&255;do if(!(h&128)){B=k;c[B>>2]=g&255;c[B+4>>2]=0;g=1}else{B=d[l+1>>0]|0;g=B<<7|h&127;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=2;break}B=d[l+2>>0]|0;g=B<<14|g&16383;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=3;break}B=d[l+3>>0]|0;g=B<<21|g&2097151;if(!(B&128)){B=k;c[B>>2]=g;c[B+4>>2]=0;g=4;break}i=28;j=l+4|0;g=g&268435455;h=0;do{B=j;j=j+1|0;B=d[B>>0]|0;A=cw(B&127|0,0,i|0)|0;g=Sv(A|0,L()|0,g|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((B&128|0)!=0|0!=0));B=k;c[B>>2]=g;c[B+4>>2]=h;g=j-l|0}while(0);c[r+80>>2]=l+g}while(0);q=q+1|0}while(q>>>0>>0);B=f+-1|0;A=f>>>0>1;if(A){i=B;do{j=i;i=i+-1|0;f:do if((j|0)<(f|0)){g=i;l=c[X+(i<<2)>>2]|0;do{h=g;g=g+1|0;k=X+(g<<2)|0;if((Xa[G&255](l,c[k>>2]|0)|0)<0)break f;z=X+(h<<2)|0;y=c[k>>2]|0;l=c[z>>2]|0;c[k>>2]=l;c[z>>2]=y}while((g|0)<(B|0))}while(0)}while((j|0)>1)}if(c[(c[X>>2]|0)+80>>2]|0){g=0;y=0;z=0;while(1){c[H>>2]=0;c[Q>>2]=0;x=c[X>>2]|0;n=x+88|0;o=c[n>>2]|0;n=c[n+4>>2]|0;jq(b,x,H,Q)|0;g:do if(A){h=1;do{i=c[X+(h<<2)>>2]|0;if(!(c[i+80>>2]|0))break g;x=i+88|0;if(!((c[x>>2]|0)==(o|0)?(c[x+4>>2]|0)==(n|0):0))break g;jq(b,i,0,0)|0;h=h+1|0}while(h>>>0>>0)}else h=1;while(0);if(T)i=c[Q>>2]|0;else{q=c[V>>2]|0;j=c[H>>2]|0;p=c[Q>>2]|0;r=j+p|0;k=j;m=0;while(1){h:do if(k>>>0>>0){l=0;i=k;while(1){k=a[i>>0]|0;if(!(k&254|l)){l=i;break h}i=i+1|0;if(i>>>0>>0)l=k&128;else{l=i;break}}}else l=k;while(0);i=l-j|0;if((m|0)==(q|0))break;p=p-i|0;if(!p){j=l;i=0;break}k=l+1|0;j=a[k>>0]|0;i=j&255;do if(!(i&128))j=1;else{x=d[l+2>>0]|0;i=x<<7|j&127;if(!(x&128)){j=2;break}x=d[l+3>>0]|0;i=x<<14|i&16383;if(!(x&128)){j=3;break}x=d[l+4>>0]|0;i=x<<21|i&2097151;if(!(x&128)){j=4;break}i=(a[l+5>>0]&7)<<28|i&268435455;j=5}while(0);k=k+j|0;j=l;m=i}c[H>>2]=j;c[Q>>2]=i}do if(U|(i|0)>0){w=(g|0)>0;u=w&(a[F>>0]|0)!=0;t=Tv(y|0,z|0,o|0,n|0)|0;v=L()|0;x=Tv(o|0,n|0,y|0,z|0)|0;k=L()|0;x=u?t:x;k=u?v:k;if((k|0)<0|(k|0)==0&x>>>0<1?!((x|0)==(o|0)&(k|0)==(n|0)&(w^1)):0){f=267;D=184;break a}j=0;l=x;m=k;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));j=(C?i+1|0:0)+g+j|0;if((j|0)>(c[Y>>2]|0)){j=j<<1;c[Y>>2]=j;l=c[Z>>2]|0;if(mb()|0){f=7;D=184;break a}j=sb(l,(j|0)>0?j:0,0)|0;if(!j){f=7;D=184;break a}c[Z>>2]=j}else j=c[Z>>2]|0;w=j+g|0;if(P){m=w;l=x;while(1){i=l&255;j=m+1|0;a[m>>0]=i|-128;l=bw(l|0,k|0,7)|0;k=L()|0;if((l|0)==0&(k|0)==0)break;else m=j}a[m>>0]=i&127;g=j-w+g|0;if(!C)break;z=c[Q>>2]|0;ew((c[Z>>2]|0)+g|0,c[H>>2]|0,z|0)|0;g=z+g|0;a[(c[Z>>2]|0)+g>>0]=0;g=g+1|0;break}l=c[H>>2]|0;v=l+i|0;m=a[l>>0]|0;switch(m<<24>>24){case 1:{i=0;j=0;break}case 2:{i=w;m=x;q=k;while(1){j=m&255;p=i+1|0;a[i>>0]=j|-128;m=bw(m|0,q|0,7)|0;q=L()|0;if((m|0)==0&(q|0)==0)break;else i=p}a[i>>0]=j&127;a[p>>0]=2;i=1-w+p|0;j=1;m=a[l>>0]|0;D=140;break}default:{i=0;j=0;D=140}}if((D|0)==140){D=0;m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}if(l>>>0>>0)do{r=l+1|0;p=a[r>>0]|0;m=p&255;do if(!(m&128)){l=1;u=p&255;q=0}else{u=d[l+2>>0]|0;m=u<<7|m&127;if(!(u&128)){l=2;u=m;q=0;break}u=d[l+3>>0]|0;m=u<<14|m&16383;if(!(u&128)){l=3;u=m;q=0;break}u=d[l+4>>0]|0;m=u<<21|m&2097151;if(!(u&128)){l=4;u=m;q=0;break}p=28;l=l+5|0;m=m&268435455;q=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,p|0)|0;m=Sv(t|0,L()|0,m|0,q|0)|0;q=L()|0;p=p+7|0}while(p>>>0<64&((u&128|0)!=0|0!=0));l=l-r|0;u=m}while(0);l=r+l|0;m=a[l>>0]|0;if(m<<24>>24==2){if(!j){m=w+i|0;j=m;r=x;t=k;while(1){p=r&255;s=j+1|0;a[j>>0]=p|-128;r=bw(r|0,t|0,7)|0;t=L()|0;if((r|0)==0&(t|0)==0)break;else j=s}a[j>>0]=p&127;i=i-m+s|0;j=1}t=i+1|0;a[w+i>>0]=1;s=w+t|0;r=s;p=u;while(1){i=p&255;m=r+1|0;a[r>>0]=i|-128;p=bw(p|0,q|0,7)|0;q=L()|0;if((p|0)==0&(q|0)==0)break;else r=m}a[r>>0]=i&127;i=m-s+t|0;a[w+i>>0]=2;i=i+1|0;m=a[l>>0]|0}m=m<<24>>24;if(m&254)do{l=l+1|0;u=m;m=a[l>>0]|0}while((m&254|u&128|0)!=0)}while(l>>>0>>0);if(j){a[w+i>>0]=0;i=i+1|0}x=(i|0)==0;g=i+g|0;o=x?y:o;n=x?z:n}else{o=y;n=z}while(0);h=h+(((h|0)==(f|0))<<31>>31)|0;if((h|0)>0)do{k=h;h=h+-1|0;i:do if((k|0)<(f|0)){i=h;m=c[X+(h<<2)>>2]|0;do{j=i;i=i+1|0;l=X+(i<<2)|0;if((Xa[G&255](m,c[l>>2]|0)|0)<0)break i;z=X+(j<<2)|0;y=c[l>>2]|0;m=c[z>>2]|0;c[l>>2]=m;c[z>>2]=y}while((i|0)<(B|0))}while(0)}while((k|0)>1);if(!(c[(c[X>>2]|0)+80>>2]|0))break;else{y=o;z=n}}if((g|0)>0){D=183;break}}c[_>>2]=f}do if((D|0)==51){c[e+52>>2]=c[f+76>>2];f=f+72|0;g=100}else if((D|0)==52){i=c[f+76>>2]|0;c[e+52>>2]=i;f=f+72|0;if(g)g=100;else{h=c[f>>2]|0;if((c[Y>>2]|0)<(i|0)){g=i<<1;c[Y>>2]=g;f=c[Z>>2]|0;if(mb()|0){f=Z;g=7;break}f=sb(f,(g|0)>0?g:0,0)|0;if(!f){f=Z;g=7;break}c[Z>>2]=f}else f=c[Z>>2]|0;ew(f|0,h|0,i|0)|0;f=Z;g=100}}else if((D|0)==183){c[e+48>>2]=c[Z>>2];c[e+52>>2]=g;c[_>>2]=f;_=100;Ra=$;return _|0}else if((D|0)==184){_=f;Ra=$;return _|0}else if((D|0)==186){Ra=$;return f|0}while(0);c[e+48>>2]=c[f>>2];c[_>>2]=1;_=g;Ra=$;return _|0}function hq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)<(g|0)|(e|0)==(g|0)&d>>>0>>0?1:-1;return b|0}return 0}function iq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;d=((c[a+80>>2]|0)==0&1)-((c[b+80>>2]|0)==0&1)|0;if(d|0){b=d;return b|0}e=a+88|0;d=c[e>>2]|0;e=c[e+4>>2]|0;g=b+88|0;f=c[g>>2]|0;g=c[g+4>>2]|0;if((d|0)==(f|0)&(e|0)==(g|0)){b=(c[b>>2]|0)-(c[a>>2]|0)|0;return b|0}else{b=(e|0)>(g|0)|(e|0)==(g|0)&d>>>0>f>>>0?1:-1;return b|0}return 0}function jq(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,v=0;v=Ra;Ra=Ra+16|0;n=v;i=v+4|0;u=e+80|0;h=c[u>>2]|0;c[n>>2]=h;t=b+235|0;b=h;if(a[t>>0]|0?c[e+56>>2]|0:0){a[i>>0]=0;if(!f)b=e+84|0;else{c[f>>2]=h;b=e+84|0;c[g>>2]=(c[b>>2]|0)+-1}kq(0,c[e+72>>2]|0,c[e+76>>2]|0,n,e+88|0,b,i);if(!(a[i>>0]|0))c[u>>2]=c[n>>2];else c[u>>2]=0;u=0;Ra=v;return u|0}m=(c[e+72>>2]|0)+(c[e+76>>2]|0)|0;q=e+52|0;o=e+40|0;r=e+48|0;p=e+44|0;h=0;while(1){i=a[b>>0]|0;if((i|h)<<24>>24)do{b=b+1|0;h=i&-128;i=a[b>>0]|0}while((i|h)<<24>>24!=0);i=c[q>>2]|0;if(!i)break;j=c[r>>2]|0;k=(c[o>>2]|0)+j|0;if(b>>>0>>0)break;l=(c[p>>2]|0)-j|0;l=(l|0)<4096?l:4096;i=jd(i,k,l,j,81)|0;if(i|0){s=67;break}i=(c[r>>2]|0)+l|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));if((c[r>>2]|0)==(c[p>>2]|0)){i=c[q>>2]|0;do if(i|0){j=c[i+20>>2]|0;gc(c[i+16>>2]|0)|0;if(j|0){if(c[j+480>>2]|0){Xd(j,i);break}l=i;if((c[j+304>>2]|0)>>>0<=l>>>0?(c[j+308>>2]|0)>>>0>l>>>0:0){l=j+300|0;c[i>>2]=c[l>>2];c[l>>2]=i;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[q>>2]=0;c[r>>2]=0}}if((s|0)==67){c[n>>2]=b;u=i;Ra=v;return u|0}b=b+1|0;c[n>>2]=b;if(f|0){c[f>>2]=c[u>>2];c[g>>2]=b+-1-(c[u>>2]|0)}do if(b>>>0>>0){l=b;while(1){if(a[l>>0]|0)break;b=l+1|0;if(b>>>0>>0)l=b;else{s=36;break}}if((s|0)==36){c[n>>2]=b;break}c[n>>2]=l;b=c[q>>2]|0;a:do if(b|0){k=l+10|0;i=c[r>>2]|0;j=b;while(1){b=c[o>>2]|0;if((k-b|0)<=(i|0))break a;h=(c[p>>2]|0)-i|0;h=(h|0)<4096?h:4096;if(jd(j,b+i|0,h,i,81)|0){b=0;s=68;break}i=(c[r>>2]|0)+h|0;c[r>>2]=i;i=(c[o>>2]|0)+i|0;j=i+20|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));i=c[r>>2]|0;j=c[q>>2]|0;if((i|0)==(c[p>>2]|0))break;if(!j)break a}if((s|0)==68){Ra=v;return b|0}do if(j|0){b=c[j+20>>2]|0;gc(c[j+16>>2]|0)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,j);break}s=j;if((c[b+304>>2]|0)>>>0<=s>>>0?(c[b+308>>2]|0)>>>0>s>>>0:0){s=b+300|0;c[j>>2]=c[s>>2];c[s>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{s=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c[q>>2]=0;c[r>>2]=0}while(0);h=a[l>>0]|0;b=h&255;do if(!(b&128)){i=1;b=h&255;h=0}else{s=d[l+1>>0]|0;b=s<<7|b&127;if(!(s&128)){i=2;h=0;break}s=d[l+2>>0]|0;b=s<<14|b&16383;if(!(s&128)){i=3;h=0;break}s=d[l+3>>0]|0;b=s<<21|b&2097151;if(!(s&128)){i=4;h=0;break}i=28;j=l+4|0;b=b&268435455;h=0;do{s=j;j=j+1|0;s=d[s>>0]|0;r=cw(s&127|0,0,i|0)|0;b=Sv(r|0,L()|0,b|0,h|0)|0;h=L()|0;i=i+7|0}while(i>>>0<64&((s&128|0)!=0|0!=0));i=j-l|0}while(0);c[u>>2]=l+i;r=(a[t>>0]|0)==0;u=e+88|0;t=u;e=c[t>>2]|0;t=c[t+4>>2]|0;q=Tv(0,0,b|0,h|0)|0;s=L()|0;t=Sv((r?b:q)|0,(r?h:s)|0,e|0,t|0)|0;e=L()|0;c[u>>2]=t;c[u+4>>2]=e;u=0;Ra=v;return u|0}while(0);c[u>>2]=0;u=0;Ra=v;return u|0}function kq(b,e,f,g,h,i,j){b=b|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,o=0,p=0,q=0,r=0;k=c[g>>2]|0;if(!k){p=e+f|0;if((f|0)>0){o=(b|0)==0?1:-1;j=1;f=0;b=0;while(1){l=a[e>>0]|0;k=l&255;do if(!(k&128)){n=1;m=l&255;l=0}else{n=d[e+1>>0]|0;k=n<<7|k&127;if(!(n&128)){n=2;m=k;l=0;break}n=d[e+2>>0]|0;k=n<<14|k&16383;if(!(n&128)){n=3;m=k;l=0;break}n=d[e+3>>0]|0;k=n<<21|k&2097151;if(!(n&128)){n=4;m=k;l=0;break}m=28;n=e+4|0;k=k&268435455;l=0;do{q=n;n=n+1|0;q=d[q>>0]|0;r=cw(q&127|0,0,m|0)|0;k=Sv(r|0,L()|0,k|0,l|0)|0;l=L()|0;m=m+7|0}while(m>>>0<64&((q&128|0)!=0|0!=0));n=n-e|0;m=k}while(0);k=e+n|0;m=Yv(m|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;n=L()|0;e=k;l=0;while(1){j=a[e>>0]|0;e=e+1|0;if(!(l<<24>>24|j))break;else l=j&128}f=Sv(m|0,n|0,f|0,b|0)|0;b=L()|0;a:do if(e>>>0

      >>0)do{if(a[e>>0]|0)break a;e=e+1|0}while(e>>>0

      >>0);while(0);if(e>>>0

      >>0)j=o;else break}}else{k=0;f=0;b=0}c[i>>2]=p-k;c[g>>2]=k;r=h;c[r>>2]=f;c[r+4>>2]=b;return}n=(b|0)==0;b=k+-2|0;b:do if(b>>>0>>0)o=b;else while(1){if((a[b>>0]|0)>=0){o=b;break b}b=b+-1|0;if(b>>>0>>0){o=b;break}}while(0);m=o+1|0;p=m;b=a[m>>0]|0;f=b&255;do if(!(f&128)){b=b&255;f=0}else{r=d[o+2>>0]|0;b=r<<7|f&127;if(!(r&128)){f=0;break}r=d[o+3>>0]|0;b=r<<14|b&16383;if(!(r&128)){f=0;break}r=d[o+4>>0]|0;b=r<<21|b&2097151;if(!(r&128)){f=0;break}k=28;l=o+5|0;b=b&268435455;f=0;while(1){r=d[l>>0]|0;q=cw(r&127|0,0,k|0)|0;b=Sv(q|0,L()|0,b|0,f|0)|0;f=L()|0;k=k+7|0;if(!(k>>>0<64&((r&128|0)!=0|0!=0)))break;else l=l+1|0}}while(0);q=Yv(b|0,f|0,(n?1:-1)|0,(n?0:-1)|0)|0;n=L()|0;r=h;n=Tv(c[r>>2]|0,c[r+4>>2]|0,q|0,n|0)|0;q=L()|0;r=h;c[r>>2]=n;c[r+4>>2]=q;if((m|0)==(e|0)){a[j>>0]=1;b=p}else{b=o+-1|0;c:do if(b>>>0>e>>>0){b=-1;while(1){k=b+-1|0;f=a[o+b>>0]|0;b=o+k|0;if(f<<24>>24)break c;if(b>>>0>e>>>0)b=k;else{f=0;break}}}else{f=0;k=-1}while(0);d:do if(b>>>0>e>>>0){b=f;while(1){f=a[o+k>>0]|0;if(!(f&-128&255|b<<24>>24))break;k=k+-1|0;b=o+k|0;if(b>>>0>e>>>0)b=f;else{e=47;break d}}b=o+k+2|0;e=49}else e=47;while(0);if((e|0)==47)if((k|0)<-1&f<<24>>24==0){b=o+(k+2)|0;e=49}do{r=b;b=b+1|0}while((a[r>>0]|0)<0);c[i>>2]=p-b}c[g>>2]=b;return}function lq(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0,i=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](132)|0;if(!f){e=7;return e|0}else i=f}else{h=Wa[c[29356>>2]&127](132)|0;if((c[14985]|0)>>>0<132)c[14985]=132;g=59064;f=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&f>>>0>0){i=c[14978]|0;g=Tv(f|0,g|0,h|0,((h|0)<0)<<31>>31|0)|0;f=L()|0;c[14768]=((f|0)<0|(f|0)==0&g>>>0<=i>>>0)&1}g=Wa[c[29340>>2]&127](h)|0;if(!g){e=7;return e|0}f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;i=g}else i=g}gw(i|0,0,132)|0;a:do if((b|0)>1){h=d+4|0;f=c[h>>2]|0;b=Eu(f)|0;if((b|0)>0){d=i+4|0;f=a[f>>0]|0;if(f<<24>>24>=0){g=0;do{a[d+(f&255)>>0]=1;g=g+1|0;if((g|0)>=(b|0))break a;f=a[(c[h>>2]|0)+g>>0]|0}while(f<<24>>24>=0)}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);e=1;return e|0}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);e=1;return e|0}}}else{g=i+4|0;f=1;do{a[g+f>>0]=((f+-48|0)>>>0>9&((f&2147483615)+-65|0)>>>0>25)<<31>>31;f=f+1|0}while((f|0)!=128)}while(0);c[e>>2]=i;e=0;return e|0}function mq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function nq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function oq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function pq(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;l=c[b>>2]|0;o=c[b+4>>2]|0;p=b+12|0;i=c[p>>2]|0;k=c[b+8>>2]|0;if((i|0)>=(k|0)){p=101;return p|0}while(1){a:do if((i|0)<(k|0))while(1){j=a[o+i>>0]|0;if(j<<24>>24<=-1){n=i;break a}if(!(a[(j&255)+(l+4)>>0]|0)){n=i;break a}i=i+1|0;c[p>>2]=i;if((i|0)>=(k|0)){n=i;break}}else n=i;while(0);if((n|0)<(k|0)){i=n;do{j=a[o+i>>0]|0;if(j<<24>>24>-1?a[(j&255)+(l+4)>>0]|0:0)break;i=i+1|0;c[p>>2]=i}while((i|0)<(k|0));if((i|0)>(n|0))break}else i=n;if((i|0)>=(k|0)){i=101;m=23;break}}if((m|0)==23)return i|0;l=i-n|0;i=b+24|0;do if((l|0)>(c[i>>2]|0)){j=l+20|0;c[i>>2]=j;k=b+20|0;i=c[k>>2]|0;if(mb()|0){p=7;return p|0}i=sb(i,(j|0)>0?j:0,0)|0;if(!i){p=7;return p|0}else{c[k>>2]=i;break}}while(0);j=b+20|0;if((l|0)>0){i=0;do{k=a[o+(i+n)>>0]|0;m=k&255;a[(c[j>>2]|0)+i>>0]=(k+-65&255)<26?m+32|0:m;i=i+1|0}while((i|0)!=(l|0))}c[d>>2]=c[j>>2];c[e>>2]=l;c[f>>2]=n;c[g>>2]=c[p>>2];o=b+16|0;p=c[o>>2]|0;c[o>>2]=p+1;c[h>>2]=p;p=0;return p|0}function qq(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;if(mb()|0){d=7;return d|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](4)|0;if(!a){d=7;return d|0}}else{e=Wa[c[29356>>2]&127](4)|0;if((c[14985]|0)>>>0<4)c[14985]=4;b=59064;a=c[b>>2]|0;b=c[b+4>>2]|0;if((b|0)>0|(b|0)==0&a>>>0>0){f=c[14978]|0;b=Tv(a|0,b|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&b>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a){f=7;return f|0}b=Wa[c[29352>>2]&127](a)|0;b=(c[14978]|0)+b|0;c[14978]=b;if(b>>>0>(c[14982]|0)>>>0)c[14982]=b;b=(c[14981]|0)+1|0;c[14981]=b;if(b>>>0>(c[14987]|0)>>>0)c[14987]=b}c[a>>2]=0;c[d>>2]=a;f=0;return f|0}function rq(a){a=a|0;var b=0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function sq(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if(mb()|0){e=7;return e|0}if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](28)|0;if(!a){e=7;return e|0}}else{g=Wa[c[29356>>2]&127](28)|0;if((c[14985]|0)>>>0<28)c[14985]=28;f=59064;a=c[f>>2]|0;f=c[f+4>>2]|0;if((f|0)>0|(f|0)==0&a>>>0>0){h=c[14978]|0;f=Tv(a|0,f|0,g|0,((g|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&f>>>0<=h>>>0)&1}a=Wa[c[29340>>2]&127](g)|0;if(!a){h=7;return h|0}f=Wa[c[29352>>2]&127](a)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f}c[a+4>>2]=b;if(b){if((d|0)<0)d=Eu(b)|0}else d=0;c[a+8>>2]=d;h=a+12|0;c[h>>2]=0;c[h+4>>2]=0;c[h+8>>2]=0;c[h+12>>2]=0;c[e>>2]=a;h=0;return h|0}function tq(a){a=a|0;var b=0,d=0;b=c[a+20>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function uq(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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,L=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0,ea=0,fa=0,ga=0,ha=0,ia=0,ja=0,ka=0;ka=Ra;Ra=Ra+32|0;q=ka;p=c[b+4>>2]|0;ja=b+12|0;i=c[ja>>2]|0;o=c[b+8>>2]|0;if((i|0)>=(o|0)){ja=101;Ra=ka;return ja|0}while(1){a:do if((i|0)<(o|0))while(1){l=a[p+i>>0]|0;n=l<<24>>24;if(n&128|0){ia=i;break a}if(l<<24>>24>=48?a[26096+(n+-48)>>0]|0:0){ia=i;break a}i=i+1|0;c[ja>>2]=i;if((i|0)>=(o|0)){ia=i;break}}else ia=i;while(0);if((ia|0)<(o|0)){i=ia;do{l=a[p+i>>0]|0;n=l<<24>>24;if(!(n&128)){if(l<<24>>24<48)break;if(!(a[26096+(n+-48)>>0]|0))break}i=i+1|0;c[ja>>2]=i}while((i|0)<(o|0));if((i|0)>(ia|0))break}else i=ia;if((i|0)>=(o|0)){i=101;fa=564;break}}if((fa|0)==564){Ra=ka;return i|0}r=i-ia|0;i=b+24|0;do if((r|0)>(c[i>>2]|0)){l=r+20|0;c[i>>2]=l;n=b+20|0;i=c[n>>2]|0;if(mb()|0){ja=7;Ra=ka;return ja|0}i=sb(i,(l|0)>0?l:0,0)|0;if(!i){ja=7;Ra=ka;return ja|0}else{c[n>>2]=i;ha=n;ga=i;break}}else{ga=b+20|0;ha=ga;ga=c[ga>>2]|0}while(0);o=p+ia|0;do if((r+-3|0)>>>0<=17){l=22;n=0;while(1){i=a[o+n>>0]|0;if((i+-65&255)>=26){if((i+-97&255)>=26){fa=39;break}}else i=(i&255)+32&255;a[q+l>>0]=i;n=n+1|0;if((n|0)>=(r|0))break;else l=l+-1|0}if((fa|0)==39){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));j=(i|0)==0?10:3;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}else i=r;a[ga+i>>0]=0;c[e>>2]=i;break}i=q+23|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;i=q+l|0;l=a[i>>0]|0;b:do if(l<<24>>24==115){l=i+1|0;n=a[l>>0]|0;switch(n<<24>>24){case 101:break;case 115:{a[l>>0]=115;a[i>>0]=115;l=115;break b}default:{i=l;l=n;fa=51;break b}}n=i+2|0;switch(a[n>>0]|0){case 115:break;case 105:{a[n>>0]=105;i=n;l=105;break b}default:{fa=82;break b}}i=i+3|0;if((a[i>>0]|0)==115){a[i>>0]=115;a[n>>0]=115;i=n;l=115}else fa=82}else fa=51;while(0);c:do if((fa|0)==51){d:do switch(l<<24>>24){case 100:{p=i+1|0;if((a[p>>0]|0)!=101){l=i;fa=82;break c}o=i+2|0;l=a[o>>0]|0;if(l<<24>>24!=101){n=o;while(1)if(!(yq(n)|0))break;else n=n+1|0;if(!(a[n>>0]|0)){l=i;fa=82;break c}else break d}l=i+3|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}while(1){n=(n<<24>>24)+-97|0;if((n|0)==24)n=yq(l+1|0)|0;else n=1-(a[26176+n>>0]|0)|0;if(!n)break;l=l+1|0;n=a[l>>0]|0;if(!(n<<24>>24)){l=i;fa=82;break c}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}a[o>>0]=101;a[p>>0]=101;i=p;l=101;break c}case 103:{if((a[i+1>>0]|0)!=110){l=i;fa=82;break c}if((a[i+2>>0]|0)!=105){l=i;fa=82;break c}n=i+3|0;l=n;while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=i;fa=82;break c}o=n;l=a[n>>0]|0;break}default:{l=i;fa=82;break c}}while(0);switch(l<<24>>24){case 116:{i=o+1|0;if((a[i>>0]|0)==97){a[i>>0]=97;a[o>>0]=116;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 108:{i=o+1|0;if((a[i>>0]|0)==98){a[i>>0]=98;a[o>>0]=108;i=o+-1|0;a[i>>0]=101;l=101;break c}break}case 122:{i=o+1|0;if((a[i>>0]|0)==105){a[i>>0]=105;a[o>>0]=122;i=o+-1|0;a[i>>0]=101;l=101;break c}break}default:{}}if(yq(o)|0){i=o+1|0;n=a[i>>0]|0;if(l<<24>>24==n<<24>>24)switch(l<<24>>24){case 122:case 115:case 108:break;default:{fa=83;break c}}if(!(n<<24>>24==0|((l+-119&255)<3|(vq(o)|0)==0))){i=(n<<24>>24)+-97|0;if((i|0)==24)i=yq(o+2|0)|0;else i=1-(a[26176+i>>0]|0)|0;if((i|0)!=0?(yq(o+2|0)|0)!=0:0){i=o+-1|0;a[i>>0]=101;l=101}else{l=o;fa=82}}else{l=o;fa=82}}else{l=o;fa=82}}while(0);if((fa|0)==82){i=l;l=a[l>>0]|0;fa=83}if((fa|0)==83)if(l<<24>>24==121){l=i;do l=l+1|0;while((yq(l)|0)!=0);if(!(a[l>>0]|0))l=121;else{a[i>>0]=105;l=105}}q=i+1|0;n=a[q>>0]|0;e:do switch(n<<24>>24|0){case 97:{if(l<<24>>24==108)if((n<<24>>24==97?(J=i+2|0,(a[J>>0]|0)==110):0)?(I=i+3|0,(a[I>>0]|0)==111):0){n=i+4|0;if(((a[n>>0]|0)==105?(N=i+5|0,(a[N>>0]|0)==116):0)?(M=i+6|0,(a[M>>0]|0)==97):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=108;break e}a[M>>0]=97;a[N>>0]=116;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==105?(H=i+5|0,(a[H>>0]|0)==116):0)?(v=i+6|0,x=a[v>>0]|0,x<<24>>24!=0):0){l=v;m=x;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=108;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[H>>0]=116;a[n>>0]=105;a[I>>0]=111;a[J>>0]=110;i=J;l=110}else l=108}else l=108}else l=108;break}case 99:{if(l<<24>>24==105)if(n<<24>>24==99?(Y=i+2|0,(a[Y>>0]|0)==110):0){n=i+3|0;switch(a[n>>0]|0){case 101:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}case 97:{l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[Y>>0]=110;a[q>>0]=99;a[i>>0]=101;l=101;break e}default:{l=105;break e}}}else l=105;break}case 101:{if(l<<24>>24==114)if(((n<<24>>24==101?(E=i+2|0,(a[E>>0]|0)==122):0)?(D=i+3|0,(a[D>>0]|0)==105):0)?(s=i+4|0,m=a[s>>0]|0,m<<24>>24!=0):0){l=s;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[D>>0]=105;a[E>>0]=122;a[q>>0]=101;i=q;l=101}else l=114}else l=114;break}case 103:{if(l<<24>>24==105)if(((n<<24>>24==103?(G=i+2|0,(a[G>>0]|0)==111):0)?(F=i+3|0,(a[F>>0]|0)==108):0)?(t=i+4|0,u=a[t>>0]|0,u<<24>>24!=0):0){l=t;m=u;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[F>>0]=108;a[G>>0]=111;a[q>>0]=103;i=q;l=103}else l=105}else l=105;break}case 108:{if(l<<24>>24==105)if(n<<24>>24==108){p=i+2|0;switch(a[p>>0]|0){case 98:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=98;a[q>>0]=108;a[i>>0]=101;l=101;break e}case 108:{n=i+3|0;if((a[n>>0]|0)!=97){l=105;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[p>>0]=108;i=p;l=108;break e}case 116:{o=i+3|0;if((a[o>>0]|0)!=110){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=101){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=101;a[o>>0]=110;a[p>>0]=116;i=p;l=116;break e}case 101:{l=i+3|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[p>>0]=101;i=p;l=101;break e}case 115:{o=i+3|0;if((a[o>>0]|0)!=117){l=105;break e}n=i+4|0;if((a[n>>0]|0)!=111){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=111;a[o>>0]=117;a[p>>0]=115;i=p;l=115;break e}default:{l=105;break e}}}else l=105;break}case 111:{switch(l<<24>>24){case 110:break;case 114:{if(n<<24>>24!=111){l=114;break e}o=i+2|0;if((a[o>>0]|0)!=116){l=114;break e}n=i+3|0;if((a[n>>0]|0)!=97){l=114;break e}l=i+4|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=114;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=114;break e}a[n>>0]=97;a[o>>0]=116;a[q>>0]=101;i=q;l=101;break e}default:break e}if((n<<24>>24==111?(L=i+2|0,(a[L>>0]|0)==105):0)?(K=i+3|0,(a[K>>0]|0)==116):0){n=i+4|0;if(((a[n>>0]|0)==97?(P=i+5|0,(a[P>>0]|0)==122):0)?(O=i+6|0,(a[O>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=110;break e}a[O>>0]=105;a[P>>0]=122;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if((a[n>>0]|0)==97?(w=i+5|0,y=a[w>>0]|0,y<<24>>24!=0):0){l=w;m=y;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=110;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[n>>0]=97;a[K>>0]=116;a[L>>0]=101;i=L;l=101}else l=110}else l=110}else l=110;break}case 115:{switch(l<<24>>24){case 109:{if(n<<24>>24!=115){l=109;break e}if((a[i+2>>0]|0)!=105){l=109;break e}o=i+3|0;if((a[o>>0]|0)!=108){l=109;break e}n=i+4|0;if((a[n>>0]|0)!=97){l=109;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=109;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=109;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}case 115:break;default:break e}if((n<<24>>24==115?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0){n=i+4|0;if(((a[n>>0]|0)==101?(R=i+5|0,(a[R>>0]|0)==118):0)?(Q=i+6|0,(a[Q>>0]|0)==105):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[Q>>0]=105;a[R>>0]=118;a[n>>0]=101;i=n;l=101;break e}n=i+4|0;if(((a[n>>0]|0)==108?(W=i+5|0,(a[W>>0]|0)==117):0)?(V=i+6|0,(a[V>>0]|0)==102):0){l=i+7|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=115;break e}a[V>>0]=102;a[W>>0]=117;a[n>>0]=108;i=n;l=108;break e}n=i+4|0;if((((a[n>>0]|0)==115?(T=i+5|0,(a[T>>0]|0)==117):0)?(S=i+6|0,(a[S>>0]|0)==111):0)?(z=i+7|0,B=a[z>>0]|0,B<<24>>24!=0):0){l=z;m=B;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=115;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[S>>0]=111;a[T>>0]=117;a[n>>0]=115;i=n;l=115}else l=115}else l=115}else l=115;break}case 116:{if(l<<24>>24==105)if(n<<24>>24==116?(X=i+2|0,(a[X>>0]|0)==105):0){o=i+3|0;switch(a[o>>0]|0){case 108:break;case 118:{n=i+4|0;if((a[n>>0]|0)!=105){l=105;break e}l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=105;a[o>>0]=118;a[X>>0]=101;i=X;l=101;break e}default:{l=105;break e}}n=i+4|0;if((a[n>>0]|0)==97){l=i+5|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(!(a[l>>0]|0)){l=105;break e}a[n>>0]=97;a[o>>0]=108;i=o;l=108;break e}n=i+4|0;if(((a[n>>0]|0)==105?(U=i+5|0,(a[U>>0]|0)==98):0)?(A=i+6|0,C=a[A>>0]|0,C<<24>>24!=0):0){l=A;m=C;while(1){m=(m<<24>>24)+-97|0;if((m|0)==24)m=yq(l+1|0)|0;else m=1-(a[26176+m>>0]|0)|0;if(!m)break;l=l+1|0;m=a[l>>0]|0;if(!(m<<24>>24)){l=105;break e}}while(1)if(!(yq(l)|0))break;else l=l+1|0;if(a[l>>0]|0){a[U>>0]=98;a[n>>0]=108;a[o>>0]=101;i=o;l=101}else l=105}else l=105}else l=105;break}default:{}}while(0);f:do switch(l<<24>>24|0){case 101:{if(l<<24>>24==101)switch(a[i+1>>0]|0){case 116:{if((a[i+2>>0]|0)!=97)break f;m=i+3|0;if((a[m>>0]|0)!=99)break f;l=i+4|0;if((a[l>>0]|0)!=105)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=105;a[m>>0]=99;i=m;break f}case 118:{if((a[i+2>>0]|0)!=105)break f;if((a[i+3>>0]|0)!=116)break f;if((a[i+4>>0]|0)!=97)break f;l=i+5|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}case 122:{if((a[i+2>>0]|0)!=105)break f;m=i+3|0;if((a[m>>0]|0)!=108)break f;l=i+4|0;if((a[l>>0]|0)!=97)break f;j=i+5|0;k=a[j>>0]|0;if(!(k<<24>>24))break f;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(!(a[j>>0]|0))break f;a[l>>0]=97;a[m>>0]=108;i=m;break f}default:break f}break}case 105:{if(((((l<<24>>24==105?(a[i+1>>0]|0)==116:0)?(a[i+2>>0]|0)==105:0)?(ba=i+3|0,(a[ba>>0]|0)==99):0)?(aa=i+4|0,(a[aa>>0]|0)==105):0)?(j=i+5|0,Z=a[j>>0]|0,Z<<24>>24!=0):0){k=Z;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[aa>>0]=105;a[ba>>0]=99;i=ba}}break}case 108:{if(l<<24>>24==108){switch(a[i+1>>0]|0){case 97:break;case 117:{if((a[i+2>>0]|0)!=102)break f;l=i+3|0;k=a[l>>0]|0;if(!(k<<24>>24))break f;j=l;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:l;break f}default:break f}l=i+2|0;if(((a[l>>0]|0)==99?(da=i+3|0,(a[da>>0]|0)==105):0)?(_=i+4|0,$=a[_>>0]|0,$<<24>>24!=0):0){j=_;k=$;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;if(a[j>>0]|0){a[da>>0]=105;a[l>>0]=99;i=l}}}break}case 115:{if((((l<<24>>24==115?(a[i+1>>0]|0)==115:0)?(a[i+2>>0]|0)==101:0)?(a[i+3>>0]|0)==110:0)?(ca=i+4|0,k=a[ca>>0]|0,k<<24>>24!=0):0){j=ca;while(1){k=(k<<24>>24)+-97|0;if((k|0)==24)k=yq(j+1|0)|0;else k=1-(a[26176+k>>0]|0)|0;if(!k)break;j=j+1|0;k=a[j>>0]|0;if(!(k<<24>>24))break f}while(1)if(!(yq(j)|0))break;else j=j+1|0;i=(a[j>>0]|0)==0?i:ca}break}default:{}}while(0);l=a[i+1>>0]|0;g:do switch(l<<24>>24|0){case 97:{j=a[i>>0]|0;if(j<<24>>24==108){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 99:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==110){switch(a[i+3>>0]|0){case 101:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 101:{j=a[i>>0]|0;if(j<<24>>24==114){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 105:{j=a[i>>0]|0;if(j<<24>>24==99){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else fa=400;break}case 108:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==98){switch(a[i+3>>0]|0){case 105:case 97:break;default:{j=i;fa=399;break g}}j=i+4|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}case 110:{j=a[i>>0]|0;if(j<<24>>24==116){switch(a[i+2>>0]|0){case 97:{j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 101:break;default:break g}if(l<<24>>24==110){j=i+3|0;if((a[j>>0]|0)!=109){fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}j=i+4|0;if((a[j>>0]|0)==101){j=i+5|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}else{fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}}else{j=i;fa=399}}else fa=400;break}case 111:{j=a[i>>0]|0;if(j<<24>>24==117){j=i+2|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}k=i+3|0;if(l<<24>>24==111&(j<<24>>24==110?((a[k>>0]|0)+-115&255)<2:0)?(a[i+2>>0]|0)==105:0){j=(wq(k)|0)==0;j=j?i:k;fa=399}else{j=i;fa=399}break}case 115:{j=a[i>>0]|0;if(j<<24>>24==109)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 116:switch(a[i>>0]|0){case 101:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=97){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}case 105:{if(l<<24>>24!=116){j=i;fa=399;break g}if((a[i+2>>0]|0)!=105){j=i;fa=399;break g}j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399;break g}default:{j=i;fa=399;break g}}case 117:{j=a[i>>0]|0;if(j<<24>>24==115)if((a[i+2>>0]|0)==111){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}else fa=400;break}case 122:case 118:{if((a[i>>0]|0)==101)if((a[i+2>>0]|0)==105){j=i+3|0;fa=(wq(j)|0)==0;j=fa?i:j;fa=399}else{j=i;fa=399}break}default:{j=i;fa=399}}while(0);if((fa|0)==399){i=j;j=a[j>>0]|0;fa=400}do if((fa|0)==400)if(j<<24>>24==101){k=i+1|0;if(!(wq(k)|0)){if(vq(k)|0){if((yq(k)|0?((a[k>>0]|0)+-119&255)>=3:0)?(ea=a[i+2>>0]|0,ea<<24>>24):0){j=(ea<<24>>24)+-97|0;if((j|0)==24)j=yq(i+3|0)|0;else j=1-(a[26176+j>>0]|0)|0;if(j|0?yq(i+3|0)|0:0)break}i=k}}else i=k}while(0);if((wq(i)|0)!=0?(a[i>>0]|0)==108:0){fa=i+1|0;i=(a[fa>>0]|0)==108?fa:i}k=Eu(i)|0;c[e>>2]=k;a[ga+k>>0]=0;j=a[i>>0]|0;if(j<<24>>24)do{i=i+1|0;k=k+-1|0;a[ga+k>>0]=j;j=a[i>>0]|0}while(j<<24>>24!=0)}else{if((r|0)>0){i=0;k=0;do{j=a[o+k>>0]|0;if((j+-65&255)<26)j=(j&255)+32&255;else i=(j+-48&255)<10?1:i;a[ga+k>>0]=j;k=k+1|0}while((k|0)!=(r|0));if(!i){i=r;fa=31}else{i=r;j=3}}else{i=0;fa=31}if((fa|0)==31)j=10;if((j<<1|0)<(r|0)){i=j;j=r-j|0;do{a[ga+i>>0]=a[ga+j>>0]|0;j=j+1|0;i=i+1|0}while((j|0)<(r|0))}a[ga+i>>0]=0;c[e>>2]=i}while(0);c[d>>2]=c[ha>>2];c[f>>2]=ia;c[g>>2]=c[ja>>2];g=b+16|0;ja=c[g>>2]|0;c[g>>2]=ja+1;c[h>>2]=ja;ja=0;Ra=ka;return ja|0}function vq(b){b=b|0;var c=0,d=0;c=a[b>>0]|0;if(!(c<<24>>24)){d=0;return d|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;d=17;break}}if((d|0)==17)return b|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=0;return d|0}while(1)if(!(xq(b)|0))break;else b=b+1|0;if(!(a[b>>0]|0)){d=1;return d|0}while(1)if(!(yq(b)|0))break;else b=b+1|0;d=(a[b>>0]|0)==0&1;return d|0}function wq(b){b=b|0;var c=0,d=0,e=0,f=0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;c=a[b>>0]|0;if(!(c<<24>>24)){f=0;return f|0}while(1){c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+1|0)|0;else c=1-(a[26176+c>>0]|0)|0;if(!c)break;d=b+1|0;c=a[d>>0]|0;if(!(c<<24>>24)){e=0;f=20;break}else b=d}if((f|0)==20)return e|0;while(1)if(!(yq(b)|0))break;else b=b+1|0;f=(a[b>>0]|0)!=0&1;return f|0}function xq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24){b=yq(b+1|0)|0;return b|0}else{b=1-(a[26176+c>>0]|0)|0;return b|0}return 0}function yq(b){b=b|0;var c=0;c=a[b>>0]|0;if(!(c<<24>>24)){b=0;return b|0}c=(c<<24>>24)+-97|0;if((c|0)!=24){b=a[26176+c>>0]|0;return b|0}c=a[b+1>>0]|0;if(!(c<<24>>24)){b=1;return b|0}c=(c<<24>>24)+-97|0;if((c|0)==24)c=yq(b+2|0)|0;else c=1-(a[26176+c>>0]|0)|0;b=(c|0)!=0&1;return b|0}function zq(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=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;o=x;v=x+24|0;t=c[(c[d+4>>2]|0)+8>>2]|0;j=c[f>>2]|0;i=b[j+8>>1]|0;if((i&514)==514?(a[j+10>>0]|0)==1:0){u=c[j+16>>2]|0;k=j}else if(!(i&1)){u=Gg(j,1)|0;k=c[f>>2]|0}else{u=0;k=j}i=b[k+8>>1]|0;if((i&2)!=0?(a[k+10>>0]|0)==1:0)i=c[k+12>>2]|0;else p=9;do if((p|0)==9){j=i&65535;if(!(j&16)){if(j&1|0){i=0;break}i=Fg(k,1)|0;break}else{i=c[k+12>>2]|0;if(!(j&16384))break;i=(c[k>>2]|0)+i|0;break}}while(0);k=i+1|0;a:do if((e|0)!=2){b:do if(((!((u|0)==0|(t|0)==0)?(l=t+16|0,c[l>>2]|0):0)?(m=Xa[(a[t>>0]<<24>>24==1?154:155)&255](u,k)|0,m=(c[t+12>>2]|0)+-1&m,n=c[l>>2]|0,n|0):0)?(h=c[n+(m<<3)>>2]|0,q=(a[t>>0]|0)==1?79:80,g=c[n+(m<<3)+4>>2]|0,(h|0)!=0&(g|0)!=0):0){while(1){h=h+-1|0;if(!(Za[q&127](c[g+12>>2]|0,c[g+16>>2]|0,u,k)|0))break;g=c[g>>2]|0;if(!((h|0)!=0&(g|0)!=0))break b}h=c[g+8>>2]|0;if(h|0){g=d;j=h;break a}}while(0);c[s>>2]=u;g=Bb(53600,s)|0;c[d+20>>2]=1;yc(c[d>>2]|0,g,-1,1,-1)|0;if(!g){Ra=x;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=x;return}else{d=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=x;return}}else{i=c[(c[d>>2]|0)+32>>2]|0;c[v>>2]=0;c[o>>2]=-1;c[o+4>>2]=v;yd(i,1004,o)|0;i=f+4|0;j=c[i>>2]|0;g=b[j+8>>1]|0;if((c[v>>2]|0)==0&(g&32)==0){c[d+20>>2]=1;yc(c[d>>2]|0,53578,-1,1,-1)|0;Ra=x;return}if((g&2)!=0?(a[j+10>>0]|0)==1:0){r=c[j+12>>2]|0;p=24}else p=19;do if((p|0)==19){h=g&65535;if(!(h&16)){if(h&1|0)break;r=Fg(j,1)|0;p=24;break}else{g=c[j+12>>2]|0;if(!(h&16384)){r=g;p=24;break}r=(c[j>>2]|0)+g|0;p=24;break}}while(0);if((p|0)==24?!((u|0)==0|(r|0)!=4):0){s=mc(c[i>>2]|0)|0;s=c[s>>2]|0;h=s;if((Ep(t,u,k,s)|0)!=(s|0)){g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,34831,-1,1,-1)|0;g=d;j=h;break}c[d+20>>2]=1;yc(c[d>>2]|0,53555,-1,1,-1)|0;Ra=x;return}while(0);u=c[(c[g>>2]|0)+32>>2]|0;c[v>>2]=0;c[w>>2]=-1;c[w+4>>2]=v;yd(u,1004,w)|0;if((c[v>>2]|0)==0?(b[(c[f>>2]|0)+8>>1]&32)==0:0){Ra=x;return}i=c[g>>2]|0;g=c[i+32>>2]|0;if(g|0?(c[g+108>>2]|0)<4:0){g=c[g+236>>2]|0;if(g|0){c[g+12>>2]=18;w=g+36|0;c[w>>2]=(c[w>>2]|0)+1}c[d+20>>2]=18;yc(i,31223,-1,1,0)|0;Ra=x;return}do if((c[i+24>>2]|0)<32)if(!(Eg(i,32,0)|0)){g=i+8|0;h=c[i+16>>2]|0;break}else{Ra=x;return}else{h=c[i+20>>2]|0;c[i+16>>2]=h;g=i+8|0;b[g>>1]=b[g>>1]&13}while(0);a[h>>0]=j;a[h+1>>0]=j>>8;a[h+2>>0]=j>>16;a[h+3>>0]=j>>24;c[i+12>>2]=4;b[g>>1]=16;a[i+10>>0]=1;Ra=x;return}function Aq(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 Xq(1,a,b,c,d,e,f)|0}function Bq(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 Xq(0,a,b,c,d,e,f)|0}function Cq(b,d){b=b|0;d=d|0;var e=0,f=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=d+20|0;c[t>>2]=0;o=d+40|0;g[o>>3]=5.0e6;p=c[d>>2]|0;if((p|0)>0){q=c[d+4>>2]|0;r=b+24|0;m=-1;j=-1;n=0;f=-1;l=-1;e=0;a:while(1){b:do if(!(a[q+(n*12|0)+5>>0]|0))if((a[q+(n*12|0)+4>>0]|0)==64){s=18;break a}else{h=m;i=j}else{i=c[q+(n*12|0)>>2]|0;if((i|0)<0)k=1;else k=(i|0)==((c[r>>2]|0)+1|0);h=a[q+(n*12|0)+4>>0]|0;c:do if(!((f|0)<0&(k&h<<24>>24==2))){switch(h<<24>>24){case 2:{s=13;break c}case 64:break;default:{i=j;break c}}if((i|0)>-1?(i|0)<=(c[r>>2]|0):0){e=i+2|0;c[t>>2]=e;g[o>>3]=2.0;i=j;f=n;h=64}else{i=j;h=64}}else{c[t>>2]=1;g[o>>3]=1.0;f=n;e=1;s=13}while(0);if((s|0)==13){s=0;i=(i|0)==((c[r>>2]|0)+2|0)?n:j;h=2}if(k){k=(h&255)+-4|0;switch(k>>>2|k<<30|0){case 0:case 7:{h=n;break b}case 3:case 1:{h=m;l=n;break b}default:{h=m;break b}}}else h=m}while(0);n=n+1|0;if((n|0)>=(p|0))break;else{m=h;j=i}}if((s|0)==18){c[t>>2]=0;g[o>>3]=1.e+50;d=d+48|0;c[d>>2]=0;c[d+4>>2]=262144;return 0}if((e|0)==1){e=d+56|0;c[e>>2]=c[e>>2]|1;e=1}if((f|0)>-1){s=c[d+16>>2]|0;c[s+(f<<3)>>2]=1;a[s+(f<<3)+4>>0]=1;f=2}else f=1;if((i|0)>-1){e=e|65536;c[t>>2]=e;c[(c[d+16>>2]|0)+(i<<3)>>2]=f;f=f+1|0}if((h|0)>-1){e=e|131072;c[t>>2]=e;c[(c[d+16>>2]|0)+(h<<3)>>2]=f;f=f+1|0}if((l|0)>-1){c[t>>2]=e|262144;c[(c[d+16>>2]|0)+(l<<3)>>2]=f}}if((c[d+8>>2]|0)!=1)return 0;e=c[d+12>>2]|0;t=c[e>>2]|0;if((t|0)>=0?(t|0)!=((c[b+24>>2]|0)+1|0):0)return 0;c[d+24>>2]=(a[e+4>>0]|0)==0?54528:54523;c[d+32>>2]=1;return 0}function Dq(a){a=a|0;var b=0,d=0;gc(c[a+216>>2]|0)|0;b=a+56|0;gc(c[b>>2]|0)|0;gc(c[b+4>>2]|0)|0;gc(c[b+8>>2]|0)|0;gc(c[b+12>>2]|0)|0;gc(c[b+16>>2]|0)|0;gc(c[b+20>>2]|0)|0;gc(c[b+24>>2]|0)|0;gc(c[b+28>>2]|0)|0;gc(c[b+32>>2]|0)|0;gc(c[b+36>>2]|0)|0;gc(c[b+40>>2]|0)|0;gc(c[b+44>>2]|0)|0;gc(c[b+48>>2]|0)|0;gc(c[b+52>>2]|0)|0;gc(c[b+56>>2]|0)|0;gc(c[b+60>>2]|0)|0;gc(c[b+64>>2]|0)|0;gc(c[b+68>>2]|0)|0;gc(c[b+72>>2]|0)|0;gc(c[b+76>>2]|0)|0;gc(c[b+80>>2]|0)|0;gc(c[b+84>>2]|0)|0;gc(c[b+88>>2]|0)|0;gc(c[b+92>>2]|0)|0;gc(c[b+96>>2]|0)|0;gc(c[b+100>>2]|0)|0;gc(c[b+104>>2]|0)|0;gc(c[b+108>>2]|0)|0;gc(c[b+112>>2]|0)|0;gc(c[b+116>>2]|0)|0;gc(c[b+120>>2]|0)|0;gc(c[b+124>>2]|0)|0;gc(c[b+128>>2]|0)|0;gc(c[b+132>>2]|0)|0;gc(c[b+136>>2]|0)|0;gc(c[b+140>>2]|0)|0;gc(c[b+144>>2]|0)|0;gc(c[b+148>>2]|0)|0;gc(c[b+152>>2]|0)|0;gc(c[b+156>>2]|0)|0;b=c[a+244>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+220>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+224>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+44>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);d=c[a+36>>2]|0;Wa[c[(c[d>>2]|0)+8>>2]&127](d)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Eq(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;d=Ra;Ra=Ra+48|0;e=d;b=d+44|0;c[b>>2]=0;h=c[a+16>>2]|0;f=c[a+12>>2]|0;g=c[a+20>>2]|0;i=(c[a+40>>2]|0)==0?59952:54718;c[e>>2]=h;c[e+4>>2]=g;c[e+8>>2]=h;c[e+12>>2]=g;c[e+16>>2]=h;c[e+20>>2]=g;c[e+24>>2]=h;c[e+28>>2]=g;c[e+32>>2]=i;c[e+36>>2]=h;c[e+40>>2]=g;_q(b,f,54532,e);b=c[b>>2]|0;if(b|0){i=b;Ra=d;return i|0}Dq(a)|0;i=0;Ra=d;return i|0}function Fq(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;do if(!(mb()|0)){if(!(c[7324]|0)){a=Wa[c[29340>>2]&127](96)|0;c[b>>2]=a;if(!a){b=7;return b|0}}else{e=Wa[c[29356>>2]&127](96)|0;if((c[14985]|0)>>>0<96)c[14985]=96;d=59064;a=c[d>>2]|0;d=c[d+4>>2]|0;if((d|0)>0|(d|0)==0&a>>>0>0){f=c[14978]|0;d=Tv(a|0,d|0,e|0,((e|0)<0)<<31>>31|0)|0;a=L()|0;c[14768]=((a|0)<0|(a|0)==0&d>>>0<=f>>>0)&1}a=Wa[c[29340>>2]&127](e)|0;if(!a)break;d=Wa[c[29352>>2]&127](a)|0;d=(c[14978]|0)+d|0;c[14978]=d;if(d>>>0>(c[14982]|0)>>>0)c[14982]=d;d=(c[14981]|0)+1|0;c[14981]=d;if(d>>>0>(c[14987]|0)>>>0)c[14987]=d;c[b>>2]=a}d=a+96|0;do{c[a>>2]=0;a=a+4|0}while((a|0)<(d|0));f=0;return f|0}while(0);c[b>>2]=0;f=7;return f|0}function Gq(a){a=a|0;var b=0;$q(a);if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0}function Hq(f,h,i,j,k){f=f|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,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,M=0;K=Ra;Ra=Ra+128|0;I=K+104|0;E=K+96|0;F=K+64|0;w=K+56|0;v=K+48|0;z=K+40|0;A=K;B=K+116|0;x=K+112|0;y=K+108|0;G=c[f>>2]|0;r=h&65535;if(!r){j=0;J=0}else{j=1;J=c[k>>2]|0}if(!(h&65536)){t=0;s=0}else{s=c[k+(j<<2)>>2]|0;t=s;j=j+1|0}if(!(h&131072)){D=0;o=0}else{o=c[k+(j<<2)>>2]|0;D=o;j=j+1|0}if(!(h&262144)){C=0;p=0}else{p=c[k+(j<<2)>>2]|0;C=p}$q(f);do if(D){n=D+8|0;j=b[n>>1]|0;u=j&31;k=d[816+u>>0]|0;if((u|16|0)==18){j=a[D+10>>0]|0;k=D+16|0;m=D+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){q=A;u=c[q+4>>2]|0;j=D;c[j>>2]=c[q>>2];c[j+4>>2]=u;j=4}else{g[D>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=o;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[D>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[D+10>>0]|0,c[D+12>>2]|0,c[D+16>>2]|0)|0;k=L()|0}}else{j=0;k=-2147483648}}else{j=0;k=-2147483648}while(0);u=f+72|0;q=u;c[q>>2]=j;c[q+4>>2]=k;do if(C){n=C+8|0;j=b[n>>1]|0;q=j&31;k=d[816+q>>0]|0;if((q|16|0)==18){j=a[C+10>>0]|0;k=C+16|0;m=C+12|0;if(!(Lg(c[k>>2]|0,z,c[m>>2]|0,j)|0))j=b[n>>1]|0;else{if(!(Og(c[k>>2]|0,A,c[m>>2]|0,j)|0)){o=A;q=c[o+4>>2]|0;j=C;c[j>>2]=c[o>>2];c[j+4>>2]=q;j=4}else{g[C>>3]=+g[z>>3];j=8}j=b[n>>1]&-3|j;b[n>>1]=j}k=d[816+(j&31)>>0]|0}if((k|0)==1){j=j&65535;if(j&4|0){k=p;j=c[k>>2]|0;k=c[k+4>>2]|0;break}if(j&8|0){j=Mg(+g[C>>3])|0;k=L()|0;break}if(!(j&18)){j=0;k=0}else{j=Ng(a[C+10>>0]|0,c[C+12>>2]|0,c[C+16>>2]|0)|0;k=L()|0}}else{j=-1;k=2147483647}}else{j=-1;k=2147483647}while(0);q=f+80|0;p=q;c[p>>2]=j;c[p+4>>2]=k;if(!i)j=a[G+235>>0]|0;else j=(a[i>>0]|0)==68&1;a[f+52>>0]=j;h=h&65535;b[f+4>>1]=h;do if(r>>>0>1){o=r+-2|0;k=J+8|0;do if(J){j=b[k>>1]|0;if((j&514)==514?(a[J+10>>0]|0)==1:0)j=c[J+16>>2]|0;else{if(j&1){H=52;break}j=Gg(J,1)|0}if(j){p=j;m=0}else H=52}else H=52;while(0);if((H|0)==52)if(!(-1431655766>>>(b[k>>1]&31)&1)){f=7;Ra=K;return f|0}else{p=0;m=1}k=f+20|0;c[k>>2]=0;if(!t)j=0;else{j=e[t+8>>1]|0;do if(!(j&4)){if(j&8|0){j=Mg(+g[t>>3])|0;L()|0;break}if(!(j&18))j=0;else{j=Ng(a[t+10>>0]|0,c[t+12>>2]|0,c[t+16>>2]|0)|0;L()|0}}else j=c[s>>2]|0;while(0);c[k>>2]=j}k=c[G+36>>2]|0;r=c[G+28>>2]|0;t=d[G+232>>0]|0;s=c[G+24>>2]|0;i=f+16|0;n=G+8|0;M=A+24|0;c[M>>2]=0;c[M+4>>2]=0;c[M+8>>2]=0;c[A>>2]=k;c[A+4>>2]=j;c[A+8>>2]=r;c[A+16>>2]=s;c[A+20>>2]=o;c[A+12>>2]=t;a:do if(m){c[i>>2]=0;j=0}else{j=er(A,p,Eu(p)|0,i,z)|0;do if(!j){j=c[i>>2]|0;if(c[A+32>>2]|0){ar(j);c[i>>2]=0;break}if(!j){j=0;break a}j=cr(i,12)|0;if(!j){j=c[i>>2]|0;k=dr(j,12)|0;if(!k)break a;else{l=k;H=70}}else{l=j;H=70}}else{l=j;H=70}while(0);b:do if((H|0)==70){ar(c[i>>2]|0);c[i>>2]=0;switch(l|0){case 1:break b;case 18:break;default:{M=l;Ra=K;return M|0}}c[v>>2]=12;Wp(n,54811,v);M=1;Ra=K;return M|0}while(0);c[w>>2]=p;Wp(n,54863,w);M=1;Ra=K;return M|0}while(0);M=c[f>>2]|0;c[z>>2]=0;c[A>>2]=0;c[B>>2]=0;fr(f,j,A,B,z);j=c[A>>2]|0;do if((c[z>>2]|0)==0&(j|0)>1?a[M+232>>0]|0:0){k=pb((c[B>>2]<<3)+(j*24|0)|0,0)|0;m=k+((c[A>>2]|0)*24|0)|0;if(!k){c[z>>2]=7;break}c[x>>2]=k;c[y>>2]=m;gr(f,0,c[i>>2]|0,x,y,z);j=((c[x>>2]|0)-k|0)/24|0;c[A>>2]=j;c[B>>2]=(c[y>>2]|0)-m>>2;if((c[z>>2]|0)==0?(M=hr(f,0,k,j)|0,c[z>>2]=M,(M|0)==0&(c[B>>2]|0)>0):0){j=0;do{M=hr(f,c[m+(j<<2)>>2]|0,k,c[A>>2]|0)|0;c[z>>2]=M;j=j+1|0}while((M|0)==0?(j|0)<(c[B>>2]|0):0)}if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{M=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}}while(0);ir(f,c[i>>2]|0,z);j=c[z>>2]|0;k=G+248|0;m=c[k>>2]|0;do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;if(n|0){if(c[n+480>>2]|0){Xd(n,m);break}M=m;if((c[n+304>>2]|0)>>>0<=M>>>0?(c[n+308>>2]|0)>>>0>M>>>0:0){M=n+300|0;c[m>>2]=c[M>>2];c[M>>2]=m;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{M=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[k>>2]=0;if(!j){c[f+40>>2]=c[f+44>>2];M=f+32|0;c[M>>2]=0;c[M+4>>2]=0;break}else{M=j;Ra=K;return M|0}}while(0);c:do switch(h<<16>>16){case 0:{l=c[G+220>>2]|0;if((D|0)!=0|(C|0)!=0){H=u;E=c[H>>2]|0;H=c[H+4>>2]|0;J=q;I=c[J>>2]|0;J=c[J+4>>2]|0;j=(a[f+52>>0]|0)==0?54528:54523;c[F>>2]=l;M=F+8|0;c[M>>2]=E;c[M+4>>2]=H;M=F+16|0;c[M>>2]=I;c[M+4>>2]=J;c[F+24>>2]=j;j=Bb(54721,F)|0}else{j=(a[f+52>>0]|0)==0?54528:54523;c[E>>2]=l;c[E+4>>2]=j;j=Bb(54783,E)|0}if(!j){M=7;Ra=K;return M|0}l=qd(c[G+12>>2]|0,j,-1,129,0,f+12|0,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](j);H=116;break c}else{H=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);H=116;break c}}case 1:{m=f+12|0;l=c[m>>2]|0;if(!l){k=c[f>>2]|0;j=k+216|0;l=c[j>>2]|0;do if(!l){c[I>>2]=c[k+220>>2];j=Bb(54912,I)|0;if(!j){M=7;Ra=K;return M|0}l=qd(c[k+12>>2]|0,j,-1,129,0,m,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}if(!l){l=c[m>>2]|0;break}else{M=l;Ra=K;return M|0}}else{c[m>>2]=l;c[j>>2]=0}while(0);a[f+8>>0]=1}l=Yc(l,1,J)|0;H=116;break}default:{}}while(0);if((H|0)==116?l|0:0){M=l;Ra=K;return M|0}M=Iq(f)|0;Ra=K;return M|0}function Iq(b){b=b|0;var d=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;q=Ra;Ra=Ra+16|0;d=q;if((e[b+4>>1]|0)<2){d=b+12|0;if((Gc(c[d>>2]|0)|0)==100){o=Oc(c[d>>2]|0,0)|0;p=L()|0;b=b+32|0;c[b>>2]=o;c[b+4>>2]=p;b=0;Ra=q;return b|0}a[b+6>>0]=1;g=c[d>>2]|0;if(!g){b=0;Ra=q;return b|0}d=c[g>>2]|0;b=g+136|0;p=c[b+4>>2]|0;if((p|0)>0|(p|0)==0&(c[b>>2]|0)>>>0>0)hc(d,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;b=g+64|0;c[b>>2]=0;c[b+4>>2]=0;if((f|0)==3082|(a[d+81>>0]|0)!=0){og(d);b=7;Ra=q;return b|0}else{b=c[d+68>>2]&f;Ra=q;return b|0}}c[d>>2]=0;f=c[b+16>>2]|0;if(f){g=b+7|0;h=b+12|0;i=f+32|0;j=b+6|0;k=b+88|0;l=f+24|0;o=b+32|0;do{if((a[g>>0]|0)==0?(m=c[h>>2]|0,m|0):0){n=c[m>>2]|0;r=m+136|0;s=c[r+4>>2]|0;if((s|0)>0|(s|0)==0&(c[r>>2]|0)>>>0>0)hc(n,m);s=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;r=m+64|0;c[r>>2]=0;c[r+4>>2]=0;if((s|0)==3082|(a[n+81>>0]|0)!=0)og(n)}qr(b,f,d);s=a[i>>0]|0;a[j>>0]=s;a[g>>0]=1;c[k>>2]=1;t=l;n=c[t+4>>2]|0;r=o;c[r>>2]=c[t>>2];c[r+4>>2]=n;if(s<<24>>24)break}while((rr(b,d)|0)!=0);d=c[d>>2]|0;if(!d){d=o;p=22}}else{a[b+6>>0]=1;d=b+32|0;p=22}do if((p|0)==22){f=d;d=c[f>>2]|0;f=c[f+4>>2]|0;if(!(a[b+52>>0]|0)){t=b+80|0;s=c[t+4>>2]|0;if(!((f|0)>(s|0)|((f|0)==(s|0)?d>>>0>(c[t>>2]|0)>>>0:0))){d=0;break}}else{t=b+72|0;s=c[t+4>>2]|0;if(!((f|0)<(s|0)|((f|0)==(s|0)?d>>>0<(c[t>>2]|0)>>>0:0))){d=0;break}}a[b+6>>0]=1;d=0}while(0);t=d;Ra=q;return t|0}function Jq(b){b=b|0;var c=0;c=b+6|0;if(!(a[c>>0]|0)){c=0;return c|0}$q(b);a[c>>0]=1;c=1;return c|0}function Kq(d,f,g){d=d|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=c[d>>2]|0;i=c[h+24>>2]|0;switch(g-i|0){case 0:{g=c[f>>2]|0;h=g+8|0;if(!((b[h>>1]&9216)==0?!(c[g+24>>2]|0):0))Cg(g);c[g>>2]=54938;c[g+16>>2]=d;b[h>>1]=-31231;a[g+11>>0]=112;c[g+36>>2]=97;f=0;return f|0}case 1:{d=d+32|0;i=c[d>>2]|0;d=c[d+4>>2]|0;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}case 2:{if(c[d+16>>2]|0){i=c[d+20>>2]|0;d=((i|0)<0)<<31>>31;g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=i;c[f+4>>2]=d;b[h>>1]=4;f=0;return f|0}else{Pg(g,i,d);f=0;return f|0}}if(!(c[h+44>>2]|0)){g=c[f>>2]|0;h=g+8|0;if(!(b[h>>1]&9216)){f=g;c[f>>2]=0;c[f+4>>2]=0;b[h>>1]=4;f=0;return f|0}else{Pg(g,0,0);f=0;return f|0}}break}default:i=g}g=ur(0,d)|0;if(g|0){f=g;return f|0}k=c[d+12>>2]|0;j=(k|0)==0;if(!j?(c[k+120>>2]|0)!=0:0)g=(e[k+144>>1]|0)+-1|0;else g=-1;if((g|0)<=(i|0)){f=0;return f|0}g=i+1|0;do if(j)d=29576;else{h=c[k+120>>2]|0;if(h|0?g>>>0<(e[k+144>>1]|0)>>>0:0){d=h+(g*40|0)|0;break}d=c[k>>2]|0;c[d+64>>2]=25;Ne(d,25);d=29576}while(0);g=d+8|0;h=e[g>>1]|0;if(h&2048|0)b[g>>1]=h&59391|4096;if(!j){h=c[k>>2]|0;i=k+40|0;g=c[i>>2]|0;if((g|0)==3082|(a[h+81>>0]|0)!=0){og(h);g=7}else g=c[h+68>>2]&g;c[i>>2]=g}Dc(f,d);f=0;return f|0}function Lq(a,b){a=a|0;b=b|0;var d=0;d=a+32|0;a=c[d+4>>2]|0;c[b>>2]=c[d>>2];c[b+4>>2]=a;return 0}function Mq(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;ca=Ra;Ra=Ra+160|0;q=ca+48|0;E=ca+40|0;D=ca+32|0;C=ca+24|0;Z=ca+16|0;y=ca+8|0;u=ca;O=ca+136|0;$=ca+80|0;W=ca+72|0;X=ca+68|0;Y=ca+64|0;ba=ca+60|0;z=ca+56|0;c[ba>>2]=0;c[z>>2]=0;x=(h|0)>1;a:do if(x){_=f+24|0;h=c[_>>2]|0;if(-1431655766>>>(b[(c[i>>2]|0)+8>>1]&31)&1|0?(p=c[i+(h+2<<2)>>2]|0,o=p+8|0,k=b[o>>1]|0,(-1431655766>>>(k&31)&1|0)==0):0){do if(p){if((k&514)==514?(a[p+10>>0]|0)==1:0){q=c[p+16>>2]|0;break}if(!(k&1)){q=Gg(p,1)|0;k=b[o>>1]|0}else q=0}else q=0;while(0);if((k&2)!=0?(a[p+10>>0]|0)==1:0)h=c[p+12>>2]|0;else aa=14;do if((aa|0)==14){k=k&65535;if(!(k&16)){if(k&1|0){h=0;break}h=Fg(p,1)|0;break}else{h=c[p+12>>2]|0;if(!(k&16384))break;h=(c[p>>2]|0)+h|0;break}}while(0);b:do if(!q)k=7;else{c:do switch(h|0){case 8:{o=a[q>>0]|0;d:do if(!(o<<24>>24)){k=37598;aa=22}else{_=o&255;k=208+_|0;do if((_|32|0)==111){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=37599;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==112){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=37600;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=37601;aa=22;break d}_=k&255;k=208+_|0;if((_|32|0)==105){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=37602;aa=22;break d}k=k&255;if((k|32|0)!=109){n=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=37603;aa=22;break d}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=37604;aa=22;break d}k=k&255;if((k|32|0)!=122){n=122;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=37605;aa=22;break d}k=k&255;if((k|32|0)==101)break d;else{n=101;k=208+k|0}}else n=105}else n=116}else n=112}else n=111;while(0);t=d[k>>0]|0;aa=26}while(0);if((aa|0)==22){t=0;n=a[208+(d[k>>0]|0)>>0]|0;aa=26}if((aa|0)==26?(t|0)!=(n&255|0):0)break c;k=Dr(f,0)|0;break b}case 7:{o=a[q>>0]|0;e:do if(!(o<<24>>24)){k=54949;aa=29}else{Z=o&255;k=208+Z|0;do if((Z|32|0)==114){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54950;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54951;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==98){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54952;aa=29;break e}Z=k&255;k=208+Z|0;if((Z|32|0)==117){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54953;aa=29;break e}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54954;aa=29;break e}k=k&255;if((k|32|0)!=108){n=108;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54955;aa=29;break e}k=k&255;if((k|32|0)==100)break e;else{n=100;k=208+k|0}}else n=117}else n=98}else n=101}else n=114;while(0);s=d[k>>0]|0;r=n;aa=33}while(0);if((aa|0)==29){s=0;r=a[208+(d[k>>0]|0)>>0]|0;aa=33}if((aa|0)==33?(s|0)!=(r&255|0):0)break c;k=Lr(f,0)|0;c[O>>2]=k;if(!k){c[$>>2]=0;c[u>>2]=c[f+220>>2];k=Bb(55001,u)|0;do if(k){l=qd(c[f+12>>2]|0,k,-1,128,0,$,0)|0;c[O>>2]=l;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{Z=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}if(!l){k=c[_>>2]|0;k=Yv(k|0,((k|0)<0)<<31>>31|0,12,0)|0;k=Sv(k|0,L()|0,12,0)|0;C=pb(k,L()|0)|0;if(!C){c[O>>2]=7;n=0;m=0;l=0;k=0;break}gw(C|0,0,k|0)|0;l=(c[_>>2]|0)+1|0;m=C+(l<<2)|0;l=m+(l<<2)|0;w=f+44|0;x=f+272|0;y=f+284|0;j=f+280|0;i=f+234|0;z=f+32|0;A=f+264|0;B=f+260|0;n=0;v=c[$>>2]|0;while(1){if((Gc(v)|0)!=100){aa=89;break}if(!(c[w>>2]|0))u=0;else u=Nc(v,(c[_>>2]|0)+1|0)|0;o=Oc(v,0)|0;p=L()|0;h=x;k=c[h>>2]|0;h=c[h+4>>2]|0;do if(!((h|0)>(p|0)|(h|0)==(p|0)&k>>>0>o>>>0)){if((k|0)==(o|0)&(h|0)==(p|0)?(c[y>>2]|0)==0:0){aa=52;break}if((c[j>>2]|0)!=(u|0)){aa=52;break}if((c[A>>2]|0)<=(c[B>>2]|0))aa=53;else aa=52}else aa=52;while(0);if((aa|0)==52){aa=0;k=Sr(f)|0;if(!k)aa=53}if((aa|0)==53){aa=0;k=x;c[k>>2]=o;c[k+4>>2]=p;c[j>>2]=u;c[y>>2]=0;k=0}c[O>>2]=k;gw(C|0,0,(c[_>>2]<<2)+4|0)|0;f:do if(!k){r=v+120|0;s=v+144|0;t=v+40|0;g:do if(!v){k=c[_>>2]|0;if((k|0)<=0)break;o=c[z>>2]|0;h=0;do{if(!(a[o+h>>0]|0)){c[C+(h<<2)>>2]=0;k=c[_>>2]|0}h=h+1|0}while((h|0)<(k|0))}else{q=0;do{if((q|0)>=(c[_>>2]|0))break g;p=q;q=q+1|0;if(!(a[(c[z>>2]|0)+p>>0]|0)){k=c[r>>2]|0;do if(!k)aa=66;else{if(q>>>0>=(e[s>>1]|0)>>>0){aa=66;break}k=k+(q*40|0)|0}while(0);if((aa|0)==66){aa=0;k=c[v>>2]|0;c[k+64>>2]=25;Ne(k,25);k=29576}h=b[k+8>>1]|0;do if((h&514)==514){if((a[k+10>>0]|0)!=1){aa=71;break}o=c[k+16>>2]|0}else aa=71;while(0);do if((aa|0)==71){aa=0;if(h&1){o=0;break}o=Gg(k,1)|0}while(0);k=c[v>>2]|0;h=c[t>>2]|0;if((h|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7}else k=c[k+68>>2]&h;c[t>>2]=k;k=Mr(f,u,o,p,C+(p<<2)|0)|0;Y=Lc(v,q)|0;Z=C+(c[_>>2]<<2)|0;c[Z>>2]=(c[Z>>2]|0)+Y}else k=0}while(!(k|0));c[O>>2]=k;break f}while(0);c[O>>2]=0;k=0}while(0);if(a[i>>0]|0){Br(O,f,C);k=c[O>>2]|0}h=(k|0)==0;do if(h){n=n+1|0;if((c[_>>2]|0)<0){k=v;break}k=0;while(1){aa=m+(k<<2)|0;c[aa>>2]=(c[aa>>2]|0)+(c[C+(k<<2)>>2]|0);if((k|0)<(c[_>>2]|0))k=k+1|0;else{k=v;break}}}else{gc(v)|0;k=0}while(0);if(h)v=k;else{aa=88;break}}if((aa|0)==88){c[$>>2]=k;k=C;break}else if((aa|0)==89){c[$>>2]=v;k=C;break}}else{n=0;m=0;l=0;k=0}}else{c[O>>2]=7;n=0;m=0;l=0;k=0}while(0);if(a[f+232>>0]|0)Cr(O,f,m,l,n);do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{_=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-_;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);k=c[$>>2]|0;if(k){k=gc(k)|0;l=c[O>>2]|0;if(!l)c[O>>2]=k;else k=l}else k=c[O>>2]|0}break b}case 15:{o=a[q>>0]|0;h:do if(!(o<<24>>24)){k=54957;aa=103}else{V=o&255;k=208+V|0;do if((V|32|0)==105){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54958;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==110){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54959;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==116){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54960;aa=103;break h}V=k&255;k=208+V|0;if((V|32|0)==101){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54961;aa=103;break h}k=k&255;if((k|32|0)!=103){n=103;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54962;aa=103;break h}k=k&255;if((k|32|0)!=114){n=114;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54963;aa=103;break h}k=k&255;if((k|32|0)!=105){n=105;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54964;aa=103;break h}k=k&255;if((k|32|0)!=116){n=116;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54965;aa=103;break h}k=k&255;if((k|32|0)!=121){n=121;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54966;aa=103;break h}if(k<<24>>24!=45){n=45;k=208+(k&255)|0;break}k=a[q+10>>0]|0;if(!(k<<24>>24)){k=54967;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+11>>0]|0;if(!(k<<24>>24)){k=54968;aa=103;break h}k=k&255;if((k|32|0)!=104){n=104;k=208+k|0;break}k=a[q+12>>0]|0;if(!(k<<24>>24)){k=54969;aa=103;break h}k=k&255;if((k|32|0)!=101){n=101;k=208+k|0;break}k=a[q+13>>0]|0;if(!(k<<24>>24)){k=54970;aa=103;break h}k=k&255;if((k|32|0)!=99){n=99;k=208+k|0;break}k=a[q+14>>0]|0;if(!(k<<24>>24)){k=54971;aa=103;break h}k=k&255;if((k|32|0)==107)break h;else{n=107;k=208+k|0}}else n=101}else n=116}else n=110}else n=105;while(0);w=d[k>>0]|0;v=n;aa=107}while(0);if((aa|0)==103){w=0;v=a[208+(d[k>>0]|0)>>0]|0;aa=107}if((aa|0)==107?(w|0)!=(v&255|0):0)break c;l=f+164|0;k=c[l>>2]|0;c[O>>2]=k;do if(!k){k=c[f+20>>2]|0;c[y>>2]=c[f+16>>2];c[y+4>>2]=k;k=Bb(52546,y)|0;if(!k){h=7;n=0;m=0;l=0;k=0;break}h=qd(c[f+12>>2]|0,k,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{V=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-V;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[O>>2]|0;c[l>>2]=k;if(!h)aa=116;else{n=0;m=0;l=0;k=0}}else aa=116;while(0);if((aa|0)==116){N=k;l=c[f+280>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,1)|0)){n=c[N+100>>2]|0;h=n+8|0;if(!(b[h>>1]&9216)){V=n;c[V>>2]=l;c[V+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);V=f+252|0;l=c[V>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(N,2)|0)){h=c[N+100>>2]|0;n=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){U=n;c[U>>2]=l;c[U+4>>2]=m;b[h>>1]=4;break}else{Pg(n,l,m);break}}while(0);E=O+12|0;F=$+12|0;G=$+4|0;H=$+16|0;I=$+48|0;J=$+52|0;K=$+40|0;M=$+44|0;n=0;l=0;while(1){if((Gc(N)|0)!=100){m=0;o=1;U=l;break}C=Nc(N,0)|0;if((c[V>>2]|0)>0){D=((C|0)<0)<<31>>31;B=0;do{c[O>>2]=0;c[O+4>>2]=0;c[O+8>>2]=0;c[E>>2]=19;m=$;h=m+56|0;do{c[m>>2]=0;m=m+4|0}while((m|0)<(h|0));m=Xp(f,C,B,-2,0,0,0,1,$)|0;do if(!m){c[F>>2]=O;m=eq(f,$,0,0)|0;if(m|0){v=0;o=0;break}m=gq(f,$)|0;if((m|0)!=100){v=0;o=0;break}h=0;o=0;do{t=c[I>>2]|0;s=c[J>>2]|0;A=t+s|0;p=a[t>>0]|0;m=p&255;do if(!(m&128)){q=1;m=p&255;r=0}else{U=d[t+1>>0]|0;m=U<<7|m&127;if(!(U&128)){q=2;r=0;break}U=d[t+2>>0]|0;m=U<<14|m&16383;if(!(U&128)){q=3;r=0;break}U=d[t+3>>0]|0;m=U<<21|m&2097151;if(!(U&128)){q=4;r=0;break}p=28;q=t+4|0;m=m&268435455;r=0;do{U=q;q=q+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,p|0)|0;m=Sv(T|0,L()|0,m|0,r|0)|0;r=L()|0;p=p+7|0}while(p>>>0<64&((U&128|0)!=0|0!=0));q=q-t|0}while(0);if((q|0)<(s|0)){j=c[K>>2]|0;i=c[M>>2]|0;z=(i|0)>0;y=t+q|0;p=0;w=0;x=0;while(1){s=a[y>>0]|0;q=s&255;do if(!(q&128)){v=1;u=0;t=s&255}else{U=d[y+1>>0]|0;q=U<<7|q&127;if(!(U&128)){v=2;u=0;t=q;break}U=d[y+2>>0]|0;q=U<<14|q&16383;if(!(U&128)){v=3;u=0;t=q;break}U=d[y+3>>0]|0;t=U<<21|q&2097151;if(!(U&128)){v=4;u=0;break}q=28;s=y+4|0;t=t&268435455;u=0;do{U=s;s=s+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,q|0)|0;t=Sv(T|0,L()|0,t|0,u|0)|0;u=L()|0;q=q+7|0}while(q>>>0<64&((U&128|0)!=0|0!=0));v=s-y|0}while(0);y=y+v|0;do if(y>>>0>>0){if(!(u>>>0<0|(u|0)==0&t>>>0<2)){v=Sv(w|0,x|0,-2,-1)|0;u=Sv(v|0,L()|0,t|0,u|0)|0;v=L()|0;q=cw(m|0,r|0,3)|0;T=L()|0;U=Sv(m|0,r|0,C|0,D|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=cw(T|0,q|0,3)|0;s=L()|0;q=Sv(T|0,q|0,B|0,0)|0;s=Sv(q|0,L()|0,U|0,s|0)|0;U=L()|0;q=cw(s|0,U|0,3)|0;T=L()|0;U=Sv(s|0,U|0,p|0,((p|0)<0)<<31>>31|0)|0;T=Sv(U|0,L()|0,q|0,T|0)|0;q=L()|0;U=aw(0,u|0,32)|0;s=L()|0;q=Yv(T|0,q|0,9,0)|0;q=Sv(U|0,s|0,q|0,L()|0)|0;s=L()|0;if(z){t=0;do{U=a[j+t>>0]|0;q=Yv(q|0,s|0,9,0)|0;q=Sv(q|0,L()|0,U|0,((U|0)<0)<<31>>31|0)|0;s=L()|0;t=t+1|0}while((t|0)!=(i|0))}t=y;h=q^h;o=s^o;s=u;q=v;break}s=a[y>>0]|0;p=s&255;q=(p&128|0)==0;if(!((t|0)==0&(u|0)==0)){do if(q)q=1;else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){q=2;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){q=3;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){q=4;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));q=t-y|0}while(0);t=y+q|0;s=0;q=0;break}do if(q){t=1;p=s&255;q=0}else{U=d[y+1>>0]|0;p=U<<7|p&127;if(!(U&128)){t=2;q=0;break}U=d[y+2>>0]|0;p=U<<14|p&16383;if(!(U&128)){t=3;q=0;break}U=d[y+3>>0]|0;p=U<<21|p&2097151;if(!(U&128)){t=4;q=0;break}s=28;t=y+4|0;p=p&268435455;q=0;do{U=t;t=t+1|0;U=d[U>>0]|0;T=cw(U&127|0,0,s|0)|0;p=Sv(T|0,L()|0,p|0,q|0)|0;q=L()|0;s=s+7|0}while(s>>>0<64&((U&128|0)!=0|0!=0));t=t-y|0}while(0);m=Sv(p|0,q|0,m|0,r|0)|0;t=y+t|0;p=0;r=L()|0;s=0;q=0}else{t=y;s=w;q=x}while(0);if(t>>>0>>0){y=t;w=s;x=q}else break}}m=gq(f,$)|0}while((m|0)==100);v=h}else{v=0;o=0}while(0);t=c[G>>2]|0;u=c[$>>2]|0;if((t|0)<=0){if(u|0)aa=213}else{r=0;while(1){s=c[u+(r<<2)>>2]|0;do if(s|0){do if(!(c[s+56>>2]|0)){h=c[s+64>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);do if(!(a[s+5>>0]|0)){h=c[s+40>>2]|0;if(!h)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[s+52>>2]|0;i:do if(h|0){p=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;do if(p|0){if(c[p+480>>2]|0){Xd(p,h);break i}q=h;if((c[p+304>>2]|0)>>>0>q>>>0)break;if((c[p+308>>2]|0)>>>0<=q>>>0)break;aa=p+300|0;c[h>>2]=c[aa>>2];c[aa>>2]=h;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{aa=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{aa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);r=r+1|0;if((r|0)==(t|0)){aa=213;break}}}do if((aa|0)==213){aa=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{U=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=c[H>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{U=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-U;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);n=v^n;l=o^l;B=B+1|0}while((B|0)<(c[V>>2]|0))}else m=0;if(m){o=0;U=l;break}}do if(k){k=c[N>>2]|0;T=N+136|0;S=c[T+4>>2]|0;if((S|0)>0|(S|0)==0&(c[T>>2]|0)>>>0>0)hc(k,N);l=kc(N)|0;c[N+20>>2]=770837923;c[N+36>>2]=-1;c[N+40>>2]=0;a[N+146>>0]=2;c[N+44>>2]=0;c[N+32>>2]=1;a[N+147>>0]=-1;c[N+48>>2]=0;T=N+64|0;c[T>>2]=0;c[T+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);h=7;break}else{h=c[k+68>>2]&l;break}}else h=0;while(0);if(o)if(!h){T=f+36|0;m=c[c[T>>2]>>2]|0;c[O>>2]=0;c[Z>>2]=c[f+220>>2];k=Bb(55001,Z)|0;j:do if(!k){h=7;m=0;k=0;l=0}else{h=qd(c[f+12>>2]|0,k,-1,128,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{S=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}l=c[O>>2]|0;if(h|0){m=0;k=0;break}K=f+44|0;M=f+32|0;N=(l|0)==0;O=l+120|0;P=l+144|0;Q=l+40|0;R=m+20|0;S=f+256|0;J=m+16|0;m=0;k=0;do{if((Gc(l)|0)!=100){h=0;break j}h=Oc(l,0)|0;o=L()|0;if(!(c[K>>2]|0))I=0;else I=Nc(l,(c[_>>2]|0)+1|0)|0;H=Yv(h|0,o|0,9,0)|0;H=Sv(H|0,L()|0,I|0,((I|0)<0)<<31>>31|0)|0;G=L()|0;E=Yv(H|0,G|0,81,0)|0;F=L()|0;G=Yv(H|0,G|0,9,0)|0;H=L()|0;D=0;do{if((D|0)>=(c[_>>2]|0)){h=0;break}C=D;D=D+1|0;if(!(a[(c[M>>2]|0)+C>>0]|0)){k:do if(N)h=29576;else{h=c[O>>2]|0;do if(h|0){if(D>>>0>=(e[P>>1]|0)>>>0)break;h=h+(D*40|0)|0;break k}while(0);h=c[l>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);o=b[h+8>>1]|0;do if((o&514)==514){if((a[h+10>>0]|0)!=1){aa=250;break}q=c[h+16>>2]|0}else aa=250;while(0);do if((aa|0)==250){aa=0;if(o&1){q=0;break}q=Gg(h,1)|0}while(0);if(!N){h=c[l>>2]|0;o=c[Q>>2]|0;if((o|0)==3082|(a[h+81>>0]|0)!=0){og(h);h=7}else h=c[h+68>>2]&o;c[Q>>2]=h}h=Lc(l,D)|0;o=c[T>>2]|0;p=c[o>>2]|0;c[Z>>2]=0;h=Za[c[p+12>>2]&127](o,q,h,Z)|0;l:do if(!h){c[c[Z>>2]>>2]=o;do if((c[p>>2]|0)>0){h=Xa[c[p+24>>2]&255](c[Z>>2]|0,I)|0;if(!h)break;Wa[c[p+16>>2]&127](c[Z>>2]|0)|0;c[Z>>2]=0;o=0;aa=262;break l}while(0);o=c[Z>>2]|0;z=o;A=Sv(E|0,F|0,C|0,0)|0;A=Yv(A|0,L()|0,9,0)|0;B=L()|0;do{c[$>>2]=0;c[W>>2]=0;c[X>>2]=0;c[Y>>2]=0;h=$a[c[R>>2]&127](z,Z,$,W,X,Y)|0;i=(h|0)==0;do if(i){w=c[Z>>2]|0;x=c[$>>2]|0;y=c[Y>>2]|0;j=((y|0)<0)<<31>>31;p=Sv(A|0,B|0,y|0,j|0)|0;q=L()|0;if((x|0)>0){r=0;do{v=a[w+r>>0]|0;p=Yv(p|0,q|0,9,0)|0;p=Sv(p|0,L()|0,v|0,((v|0)<0)<<31>>31|0)|0;q=L()|0;r=r+1|0}while((r|0)!=(x|0))}m=p^m;k=q^k;u=c[V>>2]|0;if((u|0)<=1)break;v=c[S>>2]|0;t=1;do{s=c[v+(t*24|0)>>2]|0;if((s|0)<=(x|0)){q=Sv(G|0,H|0,t|0,0)|0;p=L()|0;r=cw(q|0,p|0,3)|0;da=L()|0;p=Sv(q|0,p|0,C|0,0)|0;da=Sv(p|0,L()|0,r|0,da|0)|0;r=L()|0;p=cw(da|0,r|0,3)|0;q=L()|0;r=Sv(da|0,r|0,y|0,j|0)|0;q=Sv(r|0,L()|0,p|0,q|0)|0;p=L()|0;if((s|0)>0){r=0;do{da=a[w+r>>0]|0;q=Yv(q|0,p|0,9,0)|0;q=Sv(q|0,L()|0,da|0,((da|0)<0)<<31>>31|0)|0;p=L()|0;r=r+1|0}while((r|0)!=(s|0))}m=q^m;k=p^k}t=t+1|0}while((t|0)!=(u|0))}while(0)}while(i)}else{o=c[Z>>2]|0;aa=262}while(0);if((aa|0)==262)aa=0;if(o|0)Wa[c[J>>2]&127](o)|0;h=(h|0)==101?0:h}else h=0}while(!(h|0))}while((h|0)==0)}while(0);gc(l)|0;l=U}else{m=0;l=U;k=0}else{h=m;m=0;l=U;k=0}}k=(h|(n|0)==(m|0)&(l|0)==(k|0)&1|0)==0?267:h;break b}default:{if((h|0)<=6){k=1;break b}o=a[q>>0]|0}}while(0);n=o<<24>>24==0;m:do if(n){k=54973;aa=287}else{da=o&255;k=208+da|0;do if((da|32|0)==109){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54974;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==101){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54975;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==114){k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54976;aa=287;break m}da=k&255;k=208+da|0;if((da|32|0)==103){k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54977;aa=287;break m}k=k&255;if((k|32|0)!=101){m=101;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54978;aa=287;break m}if(k<<24>>24==61)break m;else{m=61;k=208+(k&255)|0}}else m=103}else m=114}else m=101}else m=109;while(0);A=d[k>>0]|0;aa=291}while(0);if((aa|0)==287){A=0;m=a[208+(d[k>>0]|0)>>0]|0;aa=291}if((aa|0)==291?(A|0)!=(m&255|0):0){if((h|0)<=10){k=1;break}n:do if(n){k=54980;aa=321}else{da=o&255;k=208+da|0;do if((da|32|0)==97){k=a[q+1>>0]|0;if(!(k<<24>>24)){k=54981;aa=321;break n}da=k&255;k=208+da|0;if((da|32|0)==117){k=a[q+2>>0]|0;if(!(k<<24>>24)){k=54982;aa=321;break n}k=k&255;if((k|32|0)!=116){l=116;k=208+k|0;break}k=a[q+3>>0]|0;if(!(k<<24>>24)){k=54983;aa=321;break n}k=k&255;if((k|32|0)!=111){l=111;k=208+k|0;break}k=a[q+4>>0]|0;if(!(k<<24>>24)){k=54984;aa=321;break n}k=k&255;if((k|32|0)!=109){l=109;k=208+k|0;break}k=a[q+5>>0]|0;if(!(k<<24>>24)){k=54985;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+6>>0]|0;if(!(k<<24>>24)){k=54986;aa=321;break n}k=k&255;if((k|32|0)!=114){l=114;k=208+k|0;break}k=a[q+7>>0]|0;if(!(k<<24>>24)){k=54987;aa=321;break n}k=k&255;if((k|32|0)!=103){l=103;k=208+k|0;break}k=a[q+8>>0]|0;if(!(k<<24>>24)){k=54988;aa=321;break n}k=k&255;if((k|32|0)!=101){l=101;k=208+k|0;break}k=a[q+9>>0]|0;if(!(k<<24>>24)){k=54989;aa=321;break n}if(k<<24>>24==61)break n;else{l=61;k=208+(k&255)|0}}else l=117}else l=97;while(0);B=d[k>>0]|0;aa=325}while(0);if((aa|0)==321){B=0;l=a[208+(d[k>>0]|0)>>0]|0;aa=325}if((aa|0)==325?(B|0)!=(l&255|0):0){k=1;break}k=q+10|0;c[$>>2]=0;l=a[k>>0]|0;o:do if(l<<24>>24>47){n=k;k=0;m=l;l=l<<24>>24;while(1){if(!(m<<24>>24<58&(k|0)<214748363))break o;n=n+1|0;k=l+-48+(k*10|0)|0;l=a[n>>0]|0;if(l<<24>>24<=47)break;else{m=l;l=l<<24>>24}}}else k=0;while(0);n=f+48|0;c[n>>2]=(k|0)==1|(k|0)>16?8:k;l=f+233|0;if(!(a[l>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[D>>2]=c[f+16>>2];c[D+4>>2]=da;_q($,k,54351,D);k=c[$>>2]|0;if(!k){a[l>>0]=1;aa=333}}else aa=333;do if((aa|0)==333){m=f+148|0;l=c[m>>2]|0;c[O>>2]=l;if(!l){l=c[f+20>>2]|0;c[E>>2]=c[f+16>>2];c[E+4>>2]=l;l=Bb(52453,E)|0;if(!l){c[$>>2]=7;k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;c[$>>2]=k;if(k)break}else c[$>>2]=0;h=l;do if(!(Vc(h,1)|0)){k=c[h+100>>2]|0;m=k+8|0;if(!(b[m>>1]&9216)){da=k;c[da>>2]=2;c[da+4>>2]=0;b[m>>1]=4;break}else{Pg(k,2,0);break}}while(0);m=c[n>>2]|0;n=((m|0)<0)<<31>>31;if(Vc(h,2)|0){Gc(h)|0;if(!l)k=0;else aa=351}else{l=c[h+100>>2]|0;k=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){da=k;c[da>>2]=m;c[da+4>>2]=n;b[l>>1]=4}else Pg(k,m,n);Gc(h)|0;aa=351}do if((aa|0)==351){k=c[h>>2]|0;da=h+136|0;_=c[da+4>>2]|0;if((_|0)>0|(_|0)==0&(c[da>>2]|0)>>>0>0)hc(k,h);l=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;da=h+64|0;c[da>>2]=0;c[da+4>>2]=0;if((l|0)==3082|(a[k+81>>0]|0)!=0){og(k);k=7;break}else{k=c[k+68>>2]&l;break}}while(0);c[$>>2]=k}while(0);break}k=q+6|0;m=a[k>>0]|0;p:do if(m<<24>>24>47){l=0;n=m;m=m<<24>>24;while(1){if(!(n<<24>>24<58&(l|0)<214748363)){aa=302;break p}k=k+1|0;l=m+-48+(l*10|0)|0;m=a[k>>0]|0;if(m<<24>>24>47){n=m;m=m<<24>>24}else{aa=296;break}}}else{l=0;aa=296}while(0);q:do if((aa|0)==296){if(m<<24>>24==44){k=k+1|0;n=a[k>>0]|0;if(n<<24>>24<=47){aa=302;break}m=0;h=n;n=n<<24>>24;while(1){if(!(h<<24>>24<58&(m|0)<214748363)){aa=302;break q}k=k+1|0;m=n+-48+(m*10|0)|0;o=a[k>>0]|0;if(o<<24>>24<=47){n=m;k=o;break}else{h=o;n=o<<24>>24}}}else{n=8;k=m}if(k<<24>>24!=0|(n|0)<2)aa=302;else{c[O>>2]=0;m=f+233|0;if(!(a[m>>0]|0)){k=c[f+12>>2]|0;da=c[f+20>>2]|0;c[C>>2]=c[f+16>>2];c[C+4>>2]=da;_q(O,k,54351,C);k=c[O>>2]|0;if(!k){a[m>>0]=1;aa=306}}else aa=306;if((aa|0)==306){k=Or(f,l,n)|0;c[O>>2]=k}l=f+248|0;m=c[l>>2]|0;r:do if(m|0){n=c[m+20>>2]|0;gc(c[m+16>>2]|0)|0;do if(n|0){if(c[n+480>>2]|0){Xd(n,m);break r}h=m;if((c[n+304>>2]|0)>>>0>h>>>0)break;if((c[n+308>>2]|0)>>>0<=h>>>0)break;da=n+300|0;c[m>>2]=c[da>>2];c[da>>2]=m;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{da=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[l>>2]=0}}while(0);if((aa|0)==302){c[O>>2]=1;k=1}}while(0);c[ba>>2]=k;break}k=c[i+(h+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){k=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18)){r=_;aa=444;break a}k=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}else k=c[k>>2]|0;while(0);if((k|0)<0)c[ba>>2]=19;else{r=_;aa=444}}else{r=f+24|0;aa=444}while(0);do if((aa|0)==444){t=c[r>>2]|0;t=cw(t|0,((t|0)<0)<<31>>31|0,3)|0;t=Sv(t|0,L()|0,8,0)|0;t=pb(t,L()|0)|0;if(!t){c[ba>>2]=7;break}o=(c[r>>2]|0)+1|0;s=t+(o<<2)|0;gw(t|0,0,o<<3|0)|0;o=f+264|0;s:do if(!(c[o>>2]|0)){m=f+120|0;k=c[m>>2]|0;c[O>>2]=k;do if(!k){l=c[f+20>>2]|0;c[q>>2]=c[f+16>>2];c[q+4>>2]=l;l=Bb(52138,q)|0;if(!l){k=7;break}k=qd(c[f+12>>2]|0,l,-1,133,0,O,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[O>>2]|0;c[m>>2]=l;if(!k){k=l;aa=455}}else aa=455;while(0);do if((aa|0)==455){m=k;Vc(m,1)|0;Gc(m)|0;if(!k){aa=461;break s}k=c[m>>2]|0;da=m+136|0;$=c[da+4>>2]|0;if(($|0)>0|($|0)==0&(c[da>>2]|0)>>>0>0)hc(k,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;da=m+64|0;c[da>>2]=0;c[da+4>>2]=0;if(!((l|0)==3082|(a[k+81>>0]|0)!=0)){da=c[k+68>>2]&l;c[ba>>2]=da;if(!da){aa=463;break s}else break s}else{og(k);k=7;break}}while(0);c[ba>>2]=k}else aa=461;while(0);if((aa|0)==461){c[ba>>2]=0;aa=463}t:do if((aa|0)==463){do if(x?(c[f+40>>2]|0)==0:0){k=c[i+((c[r>>2]|0)+3<<2)>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31);if(m&1){k=c[i+4>>2]|0;n=k+8|0;l=b[n>>1]|0;m=-1431655766>>>(l&31)}if(!(m&1)){h=c[i>>2]|0;m=b[h+8>>1]|0;if(!(-1431655766>>>(m&31)&1)){m=m&65535;do if(!(m&4)){if(m&8|0){n=Mg(+g[h>>3])|0;h=L()|0;break}if(!(m&18)){n=0;h=0}else{da=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;h=L()|0;l=b[n>>1]|0;n=da}}else{n=c[h>>2]|0;h=c[h+4>>2]|0}while(0);l=l&65535;do if(!(l&4)){if(l&8|0){l=Mg(+g[k>>3])|0;m=L()|0;break}if(!(l&18)){l=0;m=0}else{l=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;m=L()|0}}else{m=k;l=c[m>>2]|0;m=c[m+4>>2]|0}while(0);if((n|0)==(l|0)&(h|0)==(m|0)){m=0;break}}if((a[(c[f+12>>2]|0)+86>>0]|0)==5){l=0;k=zr(f,k,z,t)|0}else{l=1;k=Ar(f,i,j)|0}c[ba>>2]=k;if(!k)m=l;else break t}else m=0}else m=0;while(0);k=c[i>>2]|0;if(!(-1431655766>>>(b[k+8>>1]&31)&1)){k=zr(f,k,z,t)|0;c[ba>>2]=k}else k=0;if(x&(k|0)==0){k=c[i+((c[r>>2]|0)+4<<2)>>2]|0;l=e[k+8>>1]|0;do if(!(l&4)){if(l&8|0){p=Mg(+g[k>>3])|0;L()|0;break}if(!(l&18))p=0;else{p=Ng(a[k+10>>0]|0,c[k+12>>2]|0,c[k+16>>2]|0)|0;L()|0}}else p=c[k>>2]|0;while(0);u:do if(!m){da=Ar(f,i,j)|0;c[ba>>2]=da;switch(da|0){case 0:{aa=499;break u}case 19:break;default:break u}if(!(c[f+40>>2]|0))c[ba>>2]=267}else aa=499;while(0);v:do if((aa|0)==499){n=j;m=c[n>>2]|0;n=c[n+4>>2]|0;h=f+272|0;l=h;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!((l|0)>(n|0)|(l|0)==(n|0)&k>>>0>m>>>0)){if((k|0)==(m|0)&(l|0)==(n|0)?(c[f+284>>2]|0)==0:0){aa=504;break}k=f+280|0;if(!((c[k>>2]|0)==(p|0)?(c[o>>2]|0)<=(c[f+260>>2]|0):0))aa=504}else aa=504;while(0);do if((aa|0)==504){k=Sr(f)|0;if(!k){k=f+280|0;break}else{c[ba>>2]=k;break v}}while(0);da=h;c[da>>2]=m;c[da+4>>2]=n;c[k>>2]=p;c[f+284>>2]=0;c[ba>>2]=0;k=c[r>>2]|0;w:do if((k|0)>0){o=f+32|0;h=2;while(1){m=h+-2|0;if(!(a[(c[o>>2]|0)+m>>0]|0)){n=i+(h<<2)|0;k=c[n>>2]|0;x:do if(!k)k=0;else{l=b[k+8>>1]|0;do if((l&514)==514){if((a[k+10>>0]|0)!=1)break;k=c[k+16>>2]|0;break x}while(0);if(l&1){k=0;break}k=Gg(k,1)|0}while(0);k=Mr(f,p,k,m,s+(m<<2)|0)|0;if(k|0)break w;m=c[n>>2]|0;k=b[m+8>>1]|0;do if(!(k&2))aa=520;else{if((a[m+10>>0]|0)!=1){aa=520;break}k=c[m+12>>2]|0}while(0);do if((aa|0)==520){aa=0;l=k&65535;if(!(l&16)){if(l&1|0){k=0;break}k=Fg(m,1)|0;break}else{k=c[m+12>>2]|0;if(!(l&16384))break;k=(c[m>>2]|0)+k|0;break}}while(0);da=s+(c[r>>2]<<2)|0;c[da>>2]=(c[da>>2]|0)+k;k=c[r>>2]|0}if((h|0)>(k|0)){k=0;break}else h=h+1|0}}else k=0;while(0);c[ba>>2]=k}while(0);if(a[f+234>>0]|0)Br(ba,f,s);c[z>>2]=(c[z>>2]|0)+1}if(a[f+232>>0]|0)Cr(ba,f,s,t,c[z>>2]|0)}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{da=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);k=f+248|0;l=c[k>>2]|0;if(!l){c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;if(m|0){if(c[m+480>>2]|0){Xd(m,l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}da=l;if((c[m+304>>2]|0)>>>0<=da>>>0?(c[m+308>>2]|0)>>>0>da>>>0:0){da=m+300|0;c[l>>2]=c[da>>2];c[da>>2]=l;c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}else{da=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);c[k>>2]=0;da=c[ba>>2]|0;Ra=ca;return da|0}return 0}function Nq(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;d=g;c[b+52>>2]=0;f=b+233|0;if((a[f>>0]|0)!=2){f=0;Ra=g;return f|0}c[d>>2]=c[b+20>>2];e=Bb(55011,d)|0;if(!e){f=7;Ra=g;return f|0}d=Rd(c[b+12>>2]|0,c[b+16>>2]|0,e,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}a[f>>0]=(d|0)==0&1;f=0;Ra=g;return f|0}function Oq(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;o=Ra;Ra=Ra+16|0;d=o;f=o+8|0;m=b+12|0;l=(c[m>>2]|0)+40|0;n=c[l>>2]|0;l=c[l+4>>2]|0;g=Sr(b)|0;a:do if(!g){j=b+52|0;if((c[j>>2]|0)>>>0>4){k=b+48|0;switch(c[k>>2]|0){case 255:case 0:{g=0;break a}default:{}}h=b+200|0;e=c[h>>2]|0;c[f>>2]=e;do if(!e){g=c[b+20>>2]|0;c[d>>2]=c[b+16>>2];c[d+4>>2]=g;d=Bb(53253,d)|0;if(!d){g=7;d=0;break}g=qd(c[m>>2]|0,d,-1,133,0,f,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](d);else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d)}d=c[f>>2]|0;c[h>>2]=d;if(!g){e=d;i=12}else d=0}else i=12;while(0);do if((i|0)==12){g=e;if((Gc(g)|0)==100)d=Nc(g,0)|0;else d=0;if(e){e=c[g>>2]|0;i=g+136|0;h=c[i+4>>2]|0;if((h|0)>0|(h|0)==0&(c[i>>2]|0)>>>0>0)hc(e,g);f=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;i=g+64|0;c[i>>2]=0;c[i+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);g=7;break}else{g=c[e+68>>2]&f;break}}else g=0}while(0);d=G(c[j>>2]|0,d)|0;d=((d|0)/2|0)+d|0;if((d|0)>64)g=Or(b,d,c[k>>2]|0)|0}else g=0}while(0);d=b+248|0;e=c[d>>2]|0;do if(e|0){f=c[e+20>>2]|0;gc(c[e+16>>2]|0)|0;if(f|0){if(c[f+480>>2]|0){Xd(f,e);break}b=e;if((c[f+304>>2]|0)>>>0<=b>>>0?(c[f+308>>2]|0)>>>0>b>>>0:0){b=f+300|0;c[e>>2]=c[b>>2];c[b>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{b=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[d>>2]=0;m=(c[m>>2]|0)+40|0;c[m>>2]=n;c[m+4>>2]=l;Ra=o;return g|0}function Pq(a){a=a|0;return 0}function Qq(a){a=a|0;Fr(a);return 0}function Rq(a,b,d,e,f){a=a|0;b=b|0;d=d|0;e=e|0;f=f|0;if(Bu(d,51022)|0)if(Bu(d,51030)|0)if(Bu(d,37598)|0)if(!(Bu(d,51038)|0))a=3;else{e=0;return e|0}else a=2;else a=1;else a=0;c[e>>2]=c[26368+(a<<3)+4>>2];e=1;return e|0}function Sq(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=Ra;Ra=Ra+96|0;p=q+72|0;o=q+56|0;l=q+40|0;j=q+24|0;i=q+8|0;e=q;m=q+84|0;g=b+12|0;n=c[g>>2]|0;k=b+233|0;if((a[k>>0]|0)==2){c[e>>2]=c[b+20>>2];f=Bb(55011,e)|0;if(!f)e=7;else{e=Rd(c[g>>2]|0,c[b+16>>2]|0,f,0,0,0,0,0,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{h=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}a[k>>0]=(e|0)==0&1;h=7}}else h=7;if((h|0)==7){c[m>>2]=0;e=Sr(b)|0}c[m>>2]=e;if(!(c[b+40>>2]|0)){h=c[b+20>>2]|0;c[i>>2]=c[b+16>>2];c[i+4>>2]=h;c[i+8>>2]=d;_q(m,n,55251,i)}if(a[b+234>>0]|0){i=c[b+20>>2]|0;c[j>>2]=c[b+16>>2];c[j+4>>2]=i;c[j+8>>2]=d;_q(m,n,55304,j)}f=b+16|0;if(!(a[k>>0]|0))e=b+20|0;else{e=b+20|0;k=c[e>>2]|0;c[l>>2]=c[f>>2];c[l+4>>2]=k;c[l+8>>2]=d;_q(m,n,55357,l)}l=c[e>>2]|0;c[o>>2]=c[f>>2];c[o+4>>2]=l;c[o+8>>2]=d;_q(m,n,55404,o);o=c[e>>2]|0;c[p>>2]=c[f>>2];c[p+4>>2]=o;c[p+8>>2]=d;_q(m,n,55458,p);Ra=q;return c[m>>2]|0}function Tq(b,c){b=b|0;c=c|0;if(a[b+236>>0]|0){c=0;return c|0}c=Oq(b)|0;return c|0}function Uq(a,b){a=a|0;b=b|0;return 0}function Vq(a,b){a=a|0;b=b|0;Fr(a);return 0}function Wq(b){b=b|0;var c=0,e=0,f=0,g=0,h=0,i=0;if(!b){i=0;return i|0}i=a[b>>0]|0;g=d[208+(i&255)>>0]|0;c=g+-99|0;i=i<<24>>24==0;if(!(i|(c|0)!=0)){e=53664;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}c=g+-100|0;if(!(i|(c|0)!=0)){e=55510;f=b;do{f=f+1|0;e=e+1|0;h=a[f>>0]|0;c=(d[208+(h&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(h<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}h=g+-115|0;g=i|(h|0)!=0;if(g)c=h;else{e=55518;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g)c=h;else{e=55525;f=b;do{f=f+1|0;e=e+1|0;i=a[f>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0))}if(!c){i=1;return i|0}if(g){i=h;i=(i|0)==0;i=i&1;return i|0}e=31715;do{b=b+1|0;e=e+1|0;i=a[b>>0]|0;c=(d[208+(i&255)>>0]|0)-(d[208+(d[e>>0]|0)>>0]|0)|0}while(!(i<<24>>24==0|(c|0)!=0));i=(c|0)==0;i=i&1;return i|0}function Xq(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0,Ha=0,Ia=0;Ia=Ra;Ra=Ra+320|0;Fa=Ia+296|0;Da=Ia+288|0;Ca=Ia+280|0;Ba=Ia+272|0;za=Ia+264|0;xa=Ia+256|0;wa=Ia+248|0;va=Ia+240|0;ua=Ia+232|0;ta=Ia+216|0;sa=Ia+200|0;ra=Ia+192|0;qa=Ia+176|0;pa=Ia+168|0;oa=Ia+160|0;na=Ia+152|0;Aa=Ia+144|0;ma=Ia+128|0;ha=Ia+120|0;ga=Ia+112|0;fa=Ia+104|0;ka=Ia+96|0;ja=Ia+80|0;ia=Ia+72|0;ea=Ia+64|0;da=Ia+56|0;W=Ia+48|0;R=Ia+40|0;O=Ia+32|0;Q=Ia+24|0;P=Ia+16|0;N=Ia+8|0;M=Ia;la=Ia+316|0;Ha=Ia+312|0;Ga=Ia+308|0;c[Ha>>2]=0;ya=(a[(c[j>>2]|0)+3>>0]|0)==52;c[Ga>>2]=0;_=j+4|0;X=Eu(c[_>>2]|0)|0;$=X+1|0;Y=j+8|0;Z=(Eu(c[Y>>2]|0)|0)+1|0;o=(i<<2)+-8|0;n=pb(o,0)|0;if((n|0)!=0?(gw(n|0,0,o|0)|0,m=pb(o,0)|0,(m|0)!=0):0){gw(m|0,0,o|0)|0;a:do if((i|0)>3){w=3;y=0;v=0;t=0;s=0;r=0;q=0;u=0;F=0;x=0;p=0;o=0;while(1){H=c[j+(w<<2)>>2]|0;do if((o|0)==0?!((H|0)==0|(Eu(H)|0)>>>0<9):0){o=a[H>>0]|0;b:do if(!(o<<24>>24)){o=53622;Ea=9}else{I=o&255;o=208+I|0;do if((I|32|0)==116){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53623;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==111){o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53624;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==107){o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53625;Ea=9;break b}I=o&255;o=208+I|0;if((I|32|0)==101){o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53626;Ea=9;break b}o=o&255;if((o|32|0)!=110){z=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53627;Ea=9;break b}o=o&255;if((o|32|0)!=105){z=105;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53628;Ea=9;break b}o=o&255;if((o|32|0)!=122){z=122;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53629;Ea=9;break b}o=o&255;if((o|32|0)==101)break b;else{z=101;o=208+o|0}}else z=101}else z=107}else z=111}else z=116;while(0);K=d[o>>0]|0;J=z;Ea=13}while(0);if((Ea|0)==9){K=0;J=a[208+(d[o>>0]|0)>>0]|0;Ea=13}if((Ea|0)==13?(Ea=0,(K|0)!=(J&255|0)):0){Ea=17;break}I=a[H+8>>0]|0;if((I&128|0)==0?(a[26208+I>>0]|0)==0:0){E=Yq(h,H+9|0,Ga,l)|0;c[Ha>>2]=E;E=y}else Ea=17}else Ea=17;while(0);c:do if((Ea|0)==17){Ea=0;d:do if(ya){o=H;e:while(1){switch(a[o>>0]|0){case 0:break d;case 61:break e;default:{}}o=o+1|0}E=o-H|0;c[M>>2]=o+1;I=Bb(31408,M)|0;if(!I){c[Ha>>2]=7;E=y;break c}o=a[I>>0]|0;switch(o<<24>>24){case 34:case 39:case 91:case 96:{C=o<<24>>24==91?93:o;z=a[I+1>>0]|0;f:do if(!(z<<24>>24))o=0;else{A=1;o=0;do{B=A+1|0;if(z<<24>>24==C<<24>>24){if((a[I+B>>0]|0)!=C<<24>>24)break f;a[I+o>>0]=C;A=A+2|0}else{a[I+o>>0]=z;A=B}o=o+1|0;z=a[I+A>>0]|0}while(z<<24>>24!=0)}while(0);a[I+o>>0]=0;break}default:{}}G=I;g:do if(!H)o=8;else{switch(E|0){case 9:{A=H;C=51038;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=36;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=38;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=0;break g}}if((Ea|0)==36){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}else if((Ea|0)==38){Ea=0;z=z&255}if((z|0)==(o&255|0)){o=0;break g}switch(E|0){case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}break}case 6:{Ea=42;break}case 8:{o=E;Ea=415;break}default:{}}if((Ea|0)==42){Ea=0;A=H;C=53631;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=412;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=410;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=1;break g}}if((Ea|0)==410){Ea=0;z=z&255}else if((Ea|0)==412){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=1;break}if((E|0)==8){o=8;Ea=415}}if((Ea|0)==415){Ea=0;B=H;C=53638;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=420;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=418;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=2;break g}}if((Ea|0)==418){Ea=0;z=z&255}else if((Ea|0)==420){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=2;break}}D=(E|0)==10;if(D){o=a[H>>0]|0;h:do if(!(o<<24>>24)){o=53647;Ea=427}else{C=o&255;o=208+C|0;do if((C|32|0)==117){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53648;Ea=427;break h}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53649;Ea=427;break h}o=o&255;if((o|32|0)!=99){A=99;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53650;Ea=427;break h}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53651;Ea=427;break h}o=o&255;if((o|32|0)!=109){A=109;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53652;Ea=427;break h}o=o&255;if((o|32|0)!=112){A=112;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53653;Ea=427;break h}o=o&255;if((o|32|0)!=114){A=114;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53654;Ea=427;break h}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53655;Ea=427;break h}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53656;Ea=427;break h}o=o&255;if((o|32|0)==115){o=3;break g}else{A=115;o=208+o|0}}else A=117;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==427){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=3;break}}switch(E|0){case 5:{A=H;C=53658;B=E;while(1){o=a[A>>0]|0;if(!(o<<24>>24)){Ea=435;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=433;break}if((B|0)>1){A=A+1|0;C=C+1|0;B=B+-1|0}else{o=4;break g}}if((Ea|0)==433){Ea=0;z=z&255}else if((Ea|0)==435){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=4;break g}if((E|0)==7){o=7;Ea=438}break}case 7:{o=E;Ea=438;break}default:{}}if((Ea|0)==438){Ea=0;B=H;C=53664;A=o;while(1){o=a[B>>0]|0;if(!(o<<24>>24)){Ea=443;break}z=a[208+(o&255)>>0]|0;o=a[208+(d[C>>0]|0)>>0]|0;if(z<<24>>24!=o<<24>>24){Ea=441;break}if((A|0)>1){B=B+1|0;C=C+1|0;A=A+-1|0}else{o=5;break g}}if((Ea|0)==441){Ea=0;z=z&255}else if((Ea|0)==443){Ea=0;z=0;o=a[208+(d[C>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=5;break}}if(D){o=a[H>>0]|0;i:do if(!(o<<24>>24)){o=53672;Ea=450}else{E=o&255;o=208+E|0;do if((E|32|0)==108){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53673;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53674;Ea=450;break i}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53675;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53676;Ea=450;break i}o=o&255;if((o|32|0)!=117){A=117;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53677;Ea=450;break i}o=o&255;if((o|32|0)!=97){A=97;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53678;Ea=450;break i}o=o&255;if((o|32|0)!=103){A=103;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53679;Ea=450;break i}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53680;Ea=450;break i}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53681;Ea=450;break i}o=o&255;if((o|32|0)==100){o=6;break g}else{A=100;o=208+o|0}}else A=108;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==450){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=6;break}if(D){o=a[H>>0]|0;j:do if(!(o<<24>>24)){o=53683;Ea=457}else{E=o&255;o=208+E|0;do if((E|32|0)==110){o=a[H+1>>0]|0;if(!(o<<24>>24)){o=53684;Ea=457;break j}o=o&255;if((o|32|0)!=111){A=111;o=208+o|0;break}o=a[H+2>>0]|0;if(!(o<<24>>24)){o=53685;Ea=457;break j}o=o&255;if((o|32|0)!=116){A=116;o=208+o|0;break}o=a[H+3>>0]|0;if(!(o<<24>>24)){o=53686;Ea=457;break j}o=o&255;if((o|32|0)!=105){A=105;o=208+o|0;break}o=a[H+4>>0]|0;if(!(o<<24>>24)){o=53687;Ea=457;break j}o=o&255;if((o|32|0)!=110){A=110;o=208+o|0;break}o=a[H+5>>0]|0;if(!(o<<24>>24)){o=53688;Ea=457;break j}o=o&255;if((o|32|0)!=100){A=100;o=208+o|0;break}o=a[H+6>>0]|0;if(!(o<<24>>24)){o=53689;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+7>>0]|0;if(!(o<<24>>24)){o=53690;Ea=457;break j}o=o&255;if((o|32|0)!=120){A=120;o=208+o|0;break}o=a[H+8>>0]|0;if(!(o<<24>>24)){o=53691;Ea=457;break j}o=o&255;if((o|32|0)!=101){A=101;o=208+o|0;break}o=a[H+9>>0]|0;if(!(o<<24>>24)){o=53692;Ea=457;break j}o=o&255;if((o|32|0)==100){o=7;break g}else{A=100;o=208+o|0}}else A=110;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==457){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0)){o=7;break}}}o=8}while(0);k:do switch(o&15){case 0:{if((Eu(I)|0)==4){o=a[I>>0]|0;l:do if(!(o<<24>>24)){o=51048;Ea=46}else{H=o&255;o=208+H|0;do if((H|32|0)==102){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=51049;Ea=46;break l}o=o&255;if((o|32|0)!=116){z=116;o=208+o|0;break}o=a[I+2>>0]|0;if(!(o<<24>>24)){o=51050;Ea=46;break l}o=o&255;if((o|32|0)!=115){z=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=51051;Ea=46;break l}if(o<<24>>24==51){y=1;o=F;break k}else{z=51;o=208+(o&255)|0}}else z=102;while(0);y=d[o>>0]|0;o=z}while(0);if((Ea|0)==46){Ea=0;y=0;o=a[208+(d[o>>0]|0)>>0]|0}if((y|0)==(o&255|0)){y=1;o=F;break k}}c[N>>2]=I;Wp(l,53694,N);c[Ha>>2]=1;y=1;o=F;break}case 1:{if(!u){E=y;u=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=y;u=I;break c}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=y;u=I;break c}}case 2:{if(!q){E=y;q=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);E=y;q=I;break c}else{E=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);E=y;q=I;break c}}case 3:{if(!r){E=y;r=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);E=y;r=I;break c}else{E=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);E=y;r=I;break c}}case 4:{m:do switch(Eu(I)|0){case 3:{B=a[I>>0]|0;do if(!(B<<24>>24)){o=53721;Ea=66}else{H=B&255;o=208+H|0;if((H|32|0)==97){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=53722;Ea=66;break}H=o&255;o=208+H|0;if((H|32|0)==115){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=53723;Ea=66;break}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=115}else A=97;z=d[o>>0]|0;o=A}while(0);if((Ea|0)==66){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}case 4:{B=a[I>>0]|0;n:do if(!(B<<24>>24)){o=38073;Ea=72}else{H=B&255;o=208+H|0;do if((H|32|0)==100){o=a[I+1>>0]|0;if(!(o<<24>>24)){o=38074;Ea=72;break n}H=o&255;o=208+H|0;if((H|32|0)==101){o=a[I+2>>0]|0;if(!(o<<24>>24)){o=38075;Ea=72;break n}o=o&255;if((o|32|0)!=115){A=115;o=208+o|0;break}o=a[I+3>>0]|0;if(!(o<<24>>24)){o=38076;Ea=72;break n}o=o&255;if((o|32|0)==99){o=B;break m}else{A=99;o=208+o|0}}else A=101}else A=100;while(0);z=d[o>>0]|0;o=A}while(0);if((Ea|0)==72){Ea=0;z=0;o=a[208+(d[o>>0]|0)>>0]|0}if((z|0)==(o&255|0))o=B;else Ea=77;break}default:Ea=77}while(0);if((Ea|0)==77){Ea=0;c[P>>2]=I;Wp(l,53725,P);c[Ha>>2]=1;o=a[I>>0]|0}o=(o|32)<<24>>24==100&1;break}case 5:{if(!s){E=y;s=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](s);E=y;s=I;break c}else{E=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);E=y;s=I;break c}}case 6:{if(!t){E=y;t=I;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](t);E=y;t=I;break c}else{E=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);E=y;t=I;break c}}case 7:{c[m+(v<<2)>>2]=G;E=y;v=v+1|0;break c}default:{c[Q>>2]=H;Wp(l,53748,Q);c[Ha>>2]=1;o=F}}while(0);if(!I){E=y;F=o;break c}if(!(c[7324]|0)){ab[c[29344>>2]&127](I);E=y;F=o;break c}else{E=Wa[c[29352>>2]&127](I)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](I);E=y;F=o;break c}}while(0);p=p+1+(Eu(H)|0)|0;c[n+(x<<2)>>2]=H;x=x+1|0;E=y}while(0);w=w+1|0;o=c[Ha>>2]|0;y=(o|0)==0;if(!((w|0)<(i|0)&y))break;y=E;o=c[Ga>>2]|0}o:do if((s|0)!=0&y){do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Q=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Q=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);if(x|0){w=n;r=0;q=0;o=c[Ha>>2]|0;Ea=162;break}if(!(c[7324]|0))ab[c[29344>>2]&127](n);else{Q=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n)}o=c[_>>2]|0;c[la>>2]=0;c[O>>2]=o;c[O+4>>2]=s;o=Bb(53869,O)|0;if(o){n=qd(g,o,-1,0,0,la,0)|0;p=(n|0)==0;if(!p){Q=pd(g)|0;c[R>>2]=Q;Wp(l,31408,R)}if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{R=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}if(p){C=c[la>>2]|0;A=(C|0)==0;p:do if(!A?(T=C+144|0,S=b[T>>1]|0,U=S&65535,S<<16>>16!=0):0){y=C+116|0;o=0;q=S;x=0;n=0;while(1){w=c[C>>2]|0;do if(o>>>0<(q&65535)>>>0){p=c[y>>2]|0;q=p+(o*40|0)|0;q:do if(!q)p=0;else{r=b[p+(o*40|0)+8>>1]|0;do if((r&514)==514){if((a[p+(o*40|0)+10>>0]|0)!=1)break;p=c[p+(o*40|0)+16>>2]|0;break q}while(0);if(r&1){p=0;break}p=Gg(q,1)|0}while(0);q=w+81|0;if(!(a[q>>0]|0))break;if(c[w+180>>2]|0){p=0;break}a[q>>0]=0;c[w+264>>2]=0;p=w+272|0;c[p>>2]=(c[p>>2]|0)+-1;p=0}else p=0;while(0);p=Sv(x|0,n|0,(Eu(p)|0)+1|0,0)|0;n=L()|0;o=o+1|0;if((o|0)==(U|0)){x=U;B=p;o=0;break p}q=b[T>>1]|0;x=p}}else{x=0;B=0;n=0;o=1}while(0);D=Sv(B|0,n|0,x<<2|0,0)|0;D=pb(D,L()|0)|0;n=(D|0)==0;r:do if(o|n)o=n?7:0;else{n=D+(x<<2)|0;y=C+144|0;z=C+116|0;if(A){p=(Eu(0)|0)+1|0;o=0;while(1){ew(n|0,0,p|0)|0;c[D+(o<<2)>>2]=n;o=o+1|0;if((o|0)==(x|0)){o=0;break r}else n=n+p|0}}w=0;while(1){r=c[C>>2]|0;do if(w>>>0<(e[y>>1]|0)>>>0){o=c[z>>2]|0;p=o+(w*40|0)|0;s:do if(!p)o=0;else{q=b[o+(w*40|0)+8>>1]|0;do if((q&514)==514){if((a[o+(w*40|0)+10>>0]|0)!=1)break;o=c[o+(w*40|0)+16>>2]|0;break s}while(0);if(q&1){o=0;break}o=Gg(p,1)|0}while(0);p=r+81|0;if(!(a[p>>0]|0))break;if(c[r+180>>2]|0){o=0;break}a[p>>0]=0;c[r+264>>2]=0;o=r+272|0;c[o>>2]=(c[o>>2]|0)+-1;o=0}else o=0;while(0);p=(Eu(o)|0)+1|0;ew(n|0,o|0,p|0)|0;c[D+(w<<2)>>2]=n;w=w+1|0;if((w|0)==(x|0)){o=0;break}else n=n+p|0}}while(0);gc(C)|0;c[Ha>>2]=o;if(!((t|0)!=0&(o|0)==0)){w=D;p=B;r=0;q=0;n=D;Ea=162;break}if(!x){o=E;p=F;w=D;r=0;q=0;n=D;Ea=164;break a}n=0;while(1){p=c[D+(n<<2)>>2]|0;if(p|0){U=a[t>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(U<<24>>24==0|(o|0)!=0)){q=t;do{q=q+1|0;p=p+1|0;U=a[q>>0]|0;o=(d[208+(U&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(U<<24>>24==0|(o|0)!=0))}if(!o)break}n=n+1|0;if(n>>>0>=x>>>0){w=D;p=B;r=0;q=0;n=D;break o}}if(n>>>0>>0)do{U=n;n=n+1|0;c[D+(U<<2)>>2]=c[D+(n<<2)>>2]}while((n|0)!=(x|0));w=D;x=x+-1|0;p=B;r=0;q=0;n=D;break}}else n=7;c[Ha>>2]=n;o=0;r=0;q=0;n=0;p=0;break a}else{w=n;Ea=162}while(0);if((Ea|0)==162)if(o){o=0;p=0;break}if(!x){o=E;p=F;Ea=164}else{C=E;B=F;D=w;H=x;A=p;Ea=165}}else{o=0;v=0;t=0;s=0;u=0;p=0;w=n;r=0;q=0;Ea=164}while(0);if((Ea|0)==164){c[w>>2]=53664;C=o;B=p;D=w;H=1;A=8;Ea=165}do if((Ea|0)==165){if((c[Ga>>2]|0)==0?(h=Yq(h,50983,Ga,l)|0,c[Ha>>2]=h,h|0):0){o=0;p=0;break}x=(u|0)!=0;t:do if(x?(V=a[u>>0]|0,V<<24>>24!=0):0){w=u;o=2;p=V;while(1){switch(p<<24>>24){case 0:break t;case 44:{o=o+1|0;break}default:{}}p=w+1|0;w=p;p=a[p>>0]|0}}else o=1;while(0);p=o*24|0;O=pb(p,0)|0;u:do if(O){gw(O|0,0,p|0)|0;if(x&(o|0)>1){z=u;p=1;while(1){x=a[z>>0]|0;if((x+-48&255)>=10)break;y=z;w=0;do{w=(x<<24>>24)+-48+(w*10|0)|0;if((w|0)>1e7){w=0;break}y=y+1|0;x=a[y>>0]|0}while((x+-48&255)<10);if((y|0)==(z|0))break;if(!w){p=p+-1|0;o=o+-1|0}else c[O+(p*24|0)>>2]=w;p=p+1|0;if((p|0)>=(o|0)){p=0;Ea=185;break u}else z=y+1|0}c[Ha>>2]=1;c[W>>2]=u;Wp(l,53775,W);x=0;o=c[Ha>>2]|0}else{p=0;Ea=185}}else{o=0;p=7;Ea=185}while(0);if((Ea|0)==185){c[Ha>>2]=p;x=o;o=p}if(!o){w=x*24|0;p=X+289+Z+A+H+(H<<2)+w|0;o=pb(p,0)|0;if(!o){c[Ha>>2]=7;p=O;break}gw(o|0,0,p|0)|0;N=o+12|0;c[N>>2]=g;j=o+24|0;c[j>>2]=H;c[o+264>>2]=0;p=o+288|0;M=o+28|0;c[M>>2]=p;c[o+36>>2]=c[Ga>>2];c[o+260>>2]=1048576;I=o+234|0;a[I>>0]=ya&(C|0)==0&1;G=ya&1;K=o+233|0;a[K>>0]=G;a[o+232>>0]=G;a[o+235>>0]=B;c[o+48>>2]=255;G=o+40|0;c[G>>2]=s;i=o+44|0;c[i>>2]=t;p=p+(H<<2)|0;t=o+256|0;c[t>>2]=p;ew(p|0,O|0,w|0)|0;c[o+252>>2]=x;p=c[t>>2]|0;if((x|0)>0){s=0;do{a[p+(s*24|0)+4>>0]=1;a[p+(s*24|0)+5>>0]=1;p=p+(s*24|0)+8|0;c[p>>2]=0;c[p+4>>2]=0;c[p+8>>2]=0;c[p+12>>2]=0;s=s+1|0;p=c[t>>2]|0}while((s|0)!=(x|0))}p=p+(x*24|0)|0;E=o+32|0;c[E>>2]=p;p=p+H|0;J=o+20|0;c[J>>2]=p;ew(p|0,c[Y>>2]|0,Z|0)|0;p=p+Z|0;F=o+16|0;c[F>>2]=p;ew(p|0,c[_>>2]|0,$|0)|0;B=(H|0)>0;if(B){A=0;z=p+$|0;while(1){y=c[D+(A<<2)>>2]|0;v:while(1){x=a[y>>0]|0;s=x<<24>>24;switch(s|0){case 0:break v;case 96:case 34:case 39:{Ea=198;break v}case 91:{Ea=197;break v}default:{}}if(s&128|0){Ea=206;break}p=y+1|0;if(!(a[26208+s>>0]|0))y=p;else{Ea=208;break}}w:do if((Ea|0)==197){p=y;while(1){s=p+1|0;Ea=a[s>>0]|0;t=Ea<<24>>24==0;if(t^Ea<<24>>24!=93)p=s;else break}p=t?s:p+2|0;Ea=212}else if((Ea|0)==198){p=y+1|0;s=a[p>>0]|0;if(!(s<<24>>24))Ea=212;else{w=y;while(1){if(s<<24>>24==x<<24>>24){p=w+2|0;if((a[p>>0]|0)!=x<<24>>24){Ea=212;break w}}t=p+1|0;s=a[t>>0]|0;if(!(s<<24>>24)){p=t;Ea=212;break}else{w=p;p=t}}}}else if((Ea|0)==206){p=y+1|0;Ea=208}while(0);x:do if((Ea|0)==208)while(1){Ea=a[p>>0]|0;if((Ea&128|0)==0?(a[26208+Ea>>0]|0)==0:0){Ea=212;break x}p=p+1|0}while(0);if((Ea|0)==212){Ea=0;p=p-y|0;if((p|0)>0){ew(z|0,y|0,p|0)|0;s=p}else s=p}a[z+s>>0]=0;p=a[z>>0]|0;switch(p<<24>>24){case 34:case 39:case 91:case 96:{y=p<<24>>24==91?93:p;t=a[z+1>>0]|0;y:do if(!(t<<24>>24))p=0;else{w=1;p=0;do{x=w+1|0;if(t<<24>>24==y<<24>>24){if((a[z+x>>0]|0)!=y<<24>>24)break y;a[z+p>>0]=y;w=w+2|0}else{a[z+p>>0]=t;w=x}p=p+1|0;t=a[z+w>>0]|0}while(t<<24>>24!=0)}while(0);a[z+p>>0]=0;break}default:{}}c[(c[M>>2]|0)+(A<<2)>>2]=z;A=A+1|0;if((A|0)>=(H|0))break;else z=z+(s+1)|0}if(B){C=(v|0)>0;B=0;do{D=Eu(c[(c[M>>2]|0)+(B<<2)>>2]|0)|0;z:do if(C){if((D|0)<=0){p=0;while(1){s=m+(p<<2)|0;t=c[s>>2]|0;do if(t|0){if((D|0)!=(Eu(t)|0))break;if(!(c[(c[M>>2]|0)+(B<<2)>>2]|0))break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](t);else{$=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t)}c[s>>2]=0}while(0);p=p+1|0;if((p|0)==(v|0))break z}}y=0;do{z=m+(y<<2)|0;A=c[z>>2]|0;do if(A|0){if((D|0)!=(Eu(A)|0))break;p=c[(c[M>>2]|0)+(B<<2)>>2]|0;if(!p)break;w=A;x=D;while(1){s=a[p>>0]|0;if(!(s<<24>>24)){Ea=238;break}s=a[208+(s&255)>>0]|0;t=a[208+(d[w>>0]|0)>>0]|0;if(s<<24>>24!=t<<24>>24){Ea=236;break}if((x|0)>1){p=p+1|0;w=w+1|0;x=x+-1|0}else break}if((Ea|0)==236){aa=s&255;ba=t;Ea=239}else if((Ea|0)==238){aa=0;ba=a[208+(d[w>>0]|0)>>0]|0;Ea=239}if((Ea|0)==239?(Ea=0,(aa|0)!=(ba&255|0)):0)break;a[(c[E>>2]|0)+B>>0]=1;if(!(c[7324]|0))ab[c[29344>>2]&127](A);else{$=Wa[c[29352>>2]&127](A)|0;c[14978]=(c[14978]|0)-$;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](A)}c[z>>2]=0}while(0);y=y+1|0}while((y|0)!=(v|0))}while(0);B=B+1|0}while((B|0)<(H|0))}}if((v|0)>0){p=0;do{s=c[m+(p<<2)>>2]|0;if(s|0){c[da>>2]=s;Wp(l,44776,da);c[Ha>>2]=1}p=p+1|0}while((p|0)!=(v|0))}if((c[Ha>>2]|0)==0?(ca=(q|0)==0,ca^(r|0)==0):0){c[Ha>>2]=1;c[ea>>2]=ca?53638:53647;Wp(l,53810,ea)}c[la>>2]=0;do if(!(c[G>>2]|0)){if(r){y=((Eu(r)|0)<<1)+3|0;y=pb(y,((y|0)<0)<<31>>31)|0;if(!y){t=0;s=0}else{a[y>>0]=34;x=0;t=y;A:while(1){s=t+1|0;w=r+x|0;p=a[w>>0]|0;switch(p<<24>>24){case 0:break A;case 34:{a[s>>0]=34;s=t+2|0;p=a[w>>0]|0;break}default:{}}a[s>>0]=p;x=x+1|0;t=s}a[s>>0]=34;a[t+2>>0]=0;t=y;s=y}}else{t=59952;s=0;r=0}Zq(Ha,la,53889,ia);if((c[j>>2]|0)>0){p=0;do{ia=c[(c[M>>2]|0)+(p<<2)>>2]|0;c[ja>>2]=t;c[ja+4>>2]=p;c[ja+8>>2]=ia;Zq(Ha,la,53895,ja);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0){c[ka>>2]=53917;Zq(Ha,la,53910,ka)}if(s)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);y=r;break}else{y=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);y=r;break}else y=r}else{Zq(Ha,la,38132,fa);if((c[j>>2]|0)>0){p=0;do{c[ga>>2]=c[(c[M>>2]|0)+(p<<2)>>2];Zq(Ha,la,53924,ga);p=p+1|0}while((p|0)<(c[j>>2]|0))}p=c[i>>2]|0;if(!p)y=r;else{c[ha>>2]=p;Zq(Ha,la,53910,ha);y=r}}while(0);p=c[G>>2]|0;r=(p|0)==0;if(r)p=c[J>>2]|0;c[ma>>2]=c[F>>2];c[ma+4>>2]=p;c[ma+8>>2]=r?53956:59952;Zq(Ha,la,53933,ma);c[o+220>>2]=c[la>>2];c[ma>>2]=0;if(q){x=((Eu(q)|0)<<1)+3|0;x=pb(x,((x|0)<0)<<31>>31)|0;if(!x){s=0;r=0}else{a[x>>0]=34;w=0;s=x;B:while(1){r=s+1|0;t=q+w|0;p=a[t>>0]|0;switch(p<<24>>24){case 0:break B;case 34:{a[r>>0]=34;r=s+2|0;p=a[t>>0]|0;break}default:{}}a[r>>0]=p;w=w+1|0;s=r}a[r>>0]=34;a[s+2>>0]=0;s=x;r=x}}else{s=59952;r=0;q=0}Zq(Ha,ma,35133,Aa);if((c[j>>2]|0)>0){p=0;do{c[na>>2]=s;Zq(Ha,ma,53965,na);p=p+1|0}while((p|0)<(c[j>>2]|0))}if(c[i>>2]|0)Zq(Ha,ma,53972,oa);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);c[o+224>>2]=c[ma>>2];if(c[Ha>>2]|0){t=0;s=0;r=y;p=O;break}w=(f|0)!=0;if(w){c[Aa>>2]=0;t=c[N>>2]|0;C:do if(!(c[G>>2]|0)){s=c[i>>2]|0;p=Bb(53976,pa)|0;D:do if(p|0){r=0;while(1){if((r|0)>=(c[j>>2]|0))break;pa=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[qa>>2]=p;c[qa+4>>2]=r;c[qa+8>>2]=pa;p=Bb(54002,qa)|0;if(!p)break D;else r=r+1|0}if(s){c[ra>>2]=p;c[ra+4>>2]=s;p=Bb(54014,ra)|0;if(!p)break}sa=c[J>>2]|0;c[ta>>2]=c[F>>2];c[ta+4>>2]=sa;c[ta+8>>2]=p;_q(Aa,t,54025,ta);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break C}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break C}}while(0);c[Aa>>2]=7;ta=c[J>>2]|0;c[sa>>2]=c[F>>2];c[sa+4>>2]=ta;c[sa+8>>2]=0;_q(Aa,t,54025,sa)}while(0);ta=c[J>>2]|0;c[ua>>2]=c[F>>2];c[ua+4>>2]=ta;_q(Aa,t,54058,ua);ua=c[J>>2]|0;c[va>>2]=c[F>>2];c[va+4>>2]=ua;_q(Aa,t,54130,va);if(a[I>>0]|0){va=c[J>>2]|0;c[wa>>2]=c[F>>2];c[wa+4>>2]=va;_q(Aa,t,54283,wa)}do if(!(a[K>>0]|0))p=c[Aa>>2]|0;else{p=c[N>>2]|0;wa=c[J>>2]|0;c[xa>>2]=c[F>>2];c[xa+4>>2]=wa;_q(Aa,p,54351,xa);p=c[Aa>>2]|0;if(p|0)break;a[K>>0]=1;p=0}while(0);c[Ha>>2]=p}else p=0;if(!(w|ya))a[K>>0]=2;if(p|0){c[o+228>>2]=(c[o+240>>2]|0)+-35;t=0;s=0;r=y;p=O;break}c[za>>2]=c[F>>2];r=Bb(54428,za)|0;do if(r){p=qd(c[N>>2]|0,r,-1,0,0,Aa,0)|0;switch(p|0){case 0:{p=c[Aa>>2]|0;Gc(p)|0;Aa=Nc(p,0)|0;c[o+240>>2]=Aa;p=gc(p)|0;break}case 23:{c[o+240>>2]=1024;p=0;break}default:{}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Aa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else p=7;while(0);c[Ha>>2]=p;c[o+228>>2]=(c[o+240>>2]|0)+-35;if(p|0){t=0;s=0;r=y;p=O;break}t=c[i>>2]|0;t=(t|0)==0?54448:t;p=c[N>>2]|0;c[Ba>>2]=1;vd(p,1,Ba)|0;c[Ca>>2]=c[c[M>>2]>>2];p=Bb(54457,Ca)|0;E:do if(!p){s=0;p=0}else{r=1;while(1){if((r|0)>=(c[j>>2]|0)){s=p;p=1;break E}Ca=c[(c[M>>2]|0)+(r<<2)>>2]|0;c[Da>>2]=p;c[Da+4>>2]=Ca;p=Bb(54462,Da)|0;if(!p){s=0;p=0;break}else r=r+1|0}}while(0);r=c[J>>2]|0;c[Fa>>2]=s;c[Fa+4>>2]=r;c[Fa+8>>2]=t;r=Bb(54469,Fa)|0;if(!(p&(r|0)!=0))if(!r)p=7;else{p=7;Ea=341}else{p=td(c[N>>2]|0,r)|0;Ea=341}do if((Ea|0)==341)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);c[Ha>>2]=p;t=0;s=0;r=y;p=O}else{o=0;p=O}}while(0);do if(u|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Fa=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}while(0);do if(p|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{Fa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}while(0);do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);do if(r|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}while(0);do if(s|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{Fa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);do if(t|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{Fa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);if((v|0)>0){p=0;do{q=c[m+(p<<2)>>2]|0;do if(q|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{Fa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);p=p+1|0}while((p|0)!=(v|0))}}else{c[Ha>>2]=7;o=0;m=0}do if(n|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Fa=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Fa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!(c[Ha>>2]|0)){c[k>>2]=o;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}if(o|0){Dq(o)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}m=c[Ga>>2]|0;if(!m){Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}Wa[c[(c[m>>2]|0)+8>>2]&127](m)|0;Ha=c[Ha>>2]|0;Ra=Ia;return Ha|0}function Yq(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;x=Ra;Ra=Ra+32|0;w=x+16|0;s=x+8|0;v=x;c[v>>2]=d;v=Bb(31408,v)|0;if(!v){w=7;Ra=x;return w|0}u=v+(Eu(v)|0)|0;l=v;a:while(1){k=a[l>>0]|0;h=k<<24>>24;switch(h|0){case 0:{d=0;break a}case 96:case 34:case 39:{t=5;break a}case 91:{t=4;break a}default:{}}if(h&128|0){t=13;break}d=l+1|0;if(!(a[26208+h>>0]|0))l=d;else{t=15;break}}b:do if((t|0)==4){d=l;while(1){h=d+1|0;t=a[h>>0]|0;i=t<<24>>24==0;if(i^t<<24>>24!=93)d=h;else break}d=i?h:d+2|0;t=19}else if((t|0)==5){d=l+1|0;h=a[d>>0]|0;if(!(h<<24>>24))t=19;else{j=l;while(1){if(h<<24>>24==k<<24>>24){d=j+2|0;if((a[d>>0]|0)!=k<<24>>24){t=19;break b}}i=d+1|0;h=a[i>>0]|0;if(!(h<<24>>24)){d=i;t=19;break}else{j=d;d=i}}}}else if((t|0)==13){d=l+1|0;t=15}while(0);c:do if((t|0)==15)while(1){t=a[d>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=19;break c}d=d+1|0}while(0);if((t|0)==19){h=d-l|0;d=l}m=(d|0)==0?v:d;a[m+h>>0]=0;d=a[m>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{l=d<<24>>24==91?93:d;i=a[m+1>>0]|0;d:do if(!(i<<24>>24))d=0;else{j=1;d=0;do{k=j+1|0;if(i<<24>>24==l<<24>>24){if((a[m+k>>0]|0)!=l<<24>>24)break d;a[m+d>>0]=l;j=j+2|0}else{a[m+d>>0]=i;j=k}d=d+1|0;i=a[m+j>>0]|0}while(i<<24>>24!=0)}while(0);a[m+d>>0]=0;break}default:{}}i=(Eu(m)|0)+1|0;e:do if((((b|0)!=0?(n=b+16|0,(c[n>>2]|0)!=0):0)?(o=Xa[(a[b>>0]<<24>>24==1?154:155)&255](m,i)|0,o=(c[b+12>>2]|0)+-1&o,p=c[n>>2]|0,(p|0)!=0):0)?(q=c[p+(o<<3)>>2]|0,r=(a[b>>0]|0)==1?79:80,g=c[p+(o<<3)+4>>2]|0,(q|0)!=0&(g|0)!=0):0){d=q;while(1){d=d+-1|0;if(!(Za[r&127](c[g+12>>2]|0,c[g+16>>2]|0,m,i)|0))break;g=c[g>>2]|0;if(!((d|0)!=0&(g|0)!=0)){t=37;break e}}n=c[g+8>>2]|0;if(n){g=m+(h+1)|0;f:do if(g>>>0>>0){b=0;l=0;d=0;while(1){g:while(1){k=a[g>>0]|0;i=k<<24>>24;switch(i|0){case 0:{h=b;g=l;break f}case 96:case 34:case 39:{t=43;break g}case 91:{t=42;break g}default:{}}if(i&128|0){t=51;break}h=g+1|0;if(!(a[26208+i>>0]|0))g=h;else{t=53;break}}h:do if((t|0)==42){h=g;while(1){i=h+1|0;t=a[i>>0]|0;j=t<<24>>24==0;if(j^t<<24>>24!=93)h=i;else break}h=j?i:h+2|0;t=57}else if((t|0)==43){t=0;i=g+1|0;j=a[i>>0]|0;if(!(j<<24>>24))l=1;else{h=g;while(1){if(j<<24>>24==k<<24>>24){h=h+2|0;if((a[h>>0]|0)!=k<<24>>24){t=57;break h}}else h=i;i=h+1|0;j=a[i>>0]|0;if(!(j<<24>>24)){h=i;t=57;break}}}}else if((t|0)==51){h=g+1|0;t=53}while(0);i:do if((t|0)==53)while(1){t=a[h>>0]|0;if((t&128|0)==0?(a[26208+t>>0]|0)==0:0){t=57;break i}h=h+1|0}while(0);if((t|0)==57){t=0;if(!g){h=b;g=l;break f}else l=h-g|0}h=b;b=b+1|0;if(mb()|0)break;m=sb(d,b<<2,0)|0;if(!m)break;c[m+(h<<2)>>2]=g;a[g+l>>0]=0;d=a[g>>0]|0;switch(d<<24>>24){case 34:case 39:case 91:case 96:{k=d<<24>>24==91?93:d;h=a[g+1>>0]|0;j:do if(!(h<<24>>24))d=0;else{i=1;d=0;do{j=i+1|0;if(h<<24>>24==k<<24>>24){if((a[g+j>>0]|0)!=k<<24>>24)break j;a[g+d>>0]=k;i=i+2|0}else{a[g+d>>0]=h;i=j}d=d+1|0;h=a[g+i>>0]|0}while(h<<24>>24!=0)}while(0);a[g+d>>0]=0;break}default:{}}g=g+(l+1)|0;if(g>>>0>=u>>>0){t=77;break}else{l=m;d=m}}if((t|0)==77){h=b;g=m;d=m;break}if(!(c[7324]|0))ab[c[29344>>2]&127](v);else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v)}if(!d){w=7;Ra=x;return w|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);w=7;Ra=x;return w|0}}else{h=0;g=0;d=0}while(0);g=Ya[c[n+4>>2]&127](h,g,e)|0;if(!g)c[c[e>>2]>>2]=n;else Wp(f,53851,w);if(d)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{w=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}else t=37}else t=37;while(0);if((t|0)==37){c[s>>2]=m;Wp(f,53600,s);g=1}if(!(c[7324]|0)){ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}else{w=Wa[c[29352>>2]&127](v)|0;c[14978]=(c[14978]|0)-w;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](v);w=g;Ra=x;return w|0}return 0}function Zq(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=Ra;Ra=Ra+32|0;g=i+16|0;f=i;if(c[a>>2]|0){Ra=i;return}c[f>>2]=e;f=Ab(d,f)|0;if(f){d=c[b>>2]|0;if(d){c[g>>2]=d;c[g+4>>2]=f;d=Bb(38967,g)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{g=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}if(!d)h=8}else d=f}else h=8;if((h|0)==8){c[a>>2]=7;d=0}qb(c[b>>2]|0);c[b>>2]=d;Ra=i;return}function _q(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;if(c[a>>2]|0){Ra=g;return}c[f>>2]=e;d=Ab(d,f)|0;if(!d){c[a>>2]=7;Ra=g;return}b=nd(b,d,0,0,0)|0;c[a>>2]=b;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);Ra=g;return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);Ra=g;return}}function $q(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;f=b+8|0;if(a[f>>0]|0){d=(c[b>>2]|0)+216|0;if(!(c[d>>2]|0)){g=b+12|0;e=c[g>>2]|0;c[d>>2]=e;d=e;if(e|0){e=c[d>>2]|0;h=d+136|0;i=c[h+4>>2]|0;if((i|0)>0|(i|0)==0&(c[h>>2]|0)>>>0>0)hc(e,d);i=kc(d)|0;c[d+20>>2]=770837923;c[d+36>>2]=-1;c[d+40>>2]=0;a[d+146>>0]=2;c[d+44>>2]=0;c[d+32>>2]=1;a[d+147>>0]=-1;c[d+48>>2]=0;h=d+64|0;c[h>>2]=0;c[h+4>>2]=0;if((i|0)==3082|(a[e+81>>0]|0)!=0)og(e)}c[g>>2]=0}a[f>>0]=0}gc(c[b+12>>2]|0)|0;g=b+28|0;d=c[g>>2]|0;if(d|0)do{e=d;d=c[d+8>>2]|0;f=c[e+12>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{i=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[g>>2]=0;d=c[b+44>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=c[b+92>>2]|0;do if((d|0?(a[d>>0]=0,(a[d+1>>0]|0)==0):0)?(a[d+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{i=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);ar(c[b+16>>2]|0);d=b+4|0;e=d+92|0;do{c[d>>2]=0;d=d+4|0}while((d|0)<(e|0));return}function ar(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0;if(!a)return;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break;else a=b}else a=b}do{g=c[a+8>>2]|0;f=c[a+20>>2]|0;if(f|0){b=c[f>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{e=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);do if(c[f+24>>2]|0?(h=c[f+28>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);e=f+64|0;b=f;d=b+40|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(d|0));if((c[e>>2]|0)>0){b=0;do{d=f+72+(b*24|0)+20|0;br(c[d>>2]|0);c[d>>2]=0;b=b+1|0}while((b|0)<(c[e>>2]|0))}}b=c[a+40>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{f=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](a);else{f=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a)}a:do if(g)if((a|0)==(c[g+12>>2]|0)?(i=c[g+16>>2]|0,(i|0)!=0):0){a=i;while(1){b=c[a+12>>2]|0;if(!b){b=c[a+16>>2]|0;if(!b)break a;else a=b}else a=b}}else a=g;else a=0;while(0)}while((a|0)!=0);return}function br(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;if(!b)return;j=b+4|0;d=c[b>>2]|0;if((c[j>>2]|0)>0){g=0;do{f=c[d+(g<<2)>>2]|0;do if(f|0){do if((c[f+56>>2]|0)==0?(h=c[f+64>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{e=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);do if((a[f+5>>0]|0)==0?(i=c[f+40>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{e=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);d=c[f+52>>2]|0;do if(d|0){e=c[d+20>>2]|0;gc(c[d+16>>2]|0)|0;if(e|0){if(c[e+480>>2]|0){Xd(e,d);break}k=d;if((c[e+304>>2]|0)>>>0<=k>>>0?(c[e+308>>2]|0)>>>0>k>>>0:0){k=e+300|0;c[d>>2]=c[k>>2];c[k>>2]=d;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{k=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);g=g+1|0;d=c[b>>2]|0}while((g|0)<(c[j>>2]|0))}do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{k=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);d=b+16|0;e=c[d>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{k=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[j>>2]=0;c[b>>2]=0;c[d>>2]=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}} function kj(f,h,i){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,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,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;Pa=Ra;Ra=Ra+400|0;Ia=Pa+200|0;Ha=Pa+192|0;Ca=Pa+176|0;ya=Pa+168|0;Aa=Pa+160|0;ra=Pa+152|0;qa=Pa+144|0;pa=Pa+136|0;oa=Pa+128|0;ja=Pa+120|0;ha=Pa+112|0;ia=Pa+104|0;fa=Pa+96|0;ea=Pa+88|0;ga=Pa+80|0;ba=Pa+72|0;$=Pa+64|0;_=Pa+56|0;Z=Pa+48|0;aa=Pa+32|0;D=Pa+24|0;C=Pa+16|0;o=Pa+8|0;n=Pa;Da=Pa+360|0;Ea=Pa+308|0;Ga=Pa+296|0;La=Pa+256|0;Ma=Pa+208|0;Na=c[f>>2]|0;Oa=f+8|0;j=c[Oa>>2]|0;a:do if(!j){if((c[f+116>>2]|0)==0?(b[Na+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[Na+272>>2]|0)if(!(a[Na+81>>0]|0))Fa=15;else{Ja=0;break a}else{do if((e[Na+276>>1]|0)>=224){j=Na+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}j=Na+296|0;k=c[j>>2]|0;if(!k){j=Na+292|0;break}else{c[j>>2]=c[k>>2];Ka=Na+284|0;c[Ka>>2]=(c[Ka>>2]|0)+1;break b}}else j=Na+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=15}while(0);if((Fa|0)==15)k=_d(Na,224,0)|0;if(!k)Ja=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=Na;j=Na+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;Ja=k}}else Ja=j;while(0);if(!h){Oa=1;Ra=Pa;return Oa|0}xa=Na+81|0;if(a[xa>>0]|0){Oa=1;Ra=Pa;return Oa|0}Ka=f+36|0;if(c[Ka>>2]|0){Oa=1;Ra=Pa;return Oa|0}j=c[f>>2]|0;do if(((a[j+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(m=c[j+312>>2]|0,m|0):0){j=$a[m&127](c[j+316>>2]|0,21,0,0,0,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,n);c[f+12>>2]=23;Oa=1;Ra=Pa;return Oa|0}if((j|2|0)==2){if(!j)break;else j=1;Ra=Pa;return j|0}else{cd(f,39231,o);c[f+12>>2]=1;Oa=1;Ra=Pa;return Oa|0}}while(0);T=Ma;U=T+48|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));if((d[i>>0]|0)<9){j=h+48|0;k=c[j>>2]|0;if(k|0)ri(Na,k);c[j>>2]=0;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-2;Kk(f,h,0)}else Kk(f,h,0);c:do if((c[Ka>>2]|0)==0?(a[xa>>0]|0)==0:0){if(((a[i>>0]|0)==9?(A=c[Oa>>2]|0,B=c[f>>2]|0,(a[f+199>>0]|0)==0):0)?(p=f+16|0,(a[p>>0]|0)==0):0){k=h;while(1){j=c[k+52>>2]|0;if(!j)break;else k=j}y=c[k+32>>2]|0;z=c[k>>2]|0;a[p>>0]=1;x=c[B+32>>2]|0;w=(x&4|0)==0&0==0;x=(x&68|0)==0&0==0;Wi(A,c[z>>2]|0);j=c[z>>2]|0;if((j|0)>0){n=A+116|0;o=B+272|0;p=B+276|0;q=B+81|0;r=B+288|0;s=B+300|0;t=B+296|0;u=B+284|0;v=B+292|0;m=0;do{k=c[z+4+(m*20|0)>>2]|0;j=c[z+4+(m*20|0)+4>>2]|0;d:do if(j){if(!(a[(c[A>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0}else{do if(!x){if((a[k>>0]|0)!=-94)break;j=b[k+32>>1]|0;k=c[k+44>>2]|0;if(j<<16>>16<0)j=b[k+40>>1]|0;else j=j<<16>>16;if((j|0)<0)j=38132;else j=c[(c[k+4>>2]|0)+(j<<4)>>2]|0;if(w){if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,-1)|0;break d}else{c[C>>2]=c[k>>2];c[C+4>>2]=j;j=dd(B,40358,C)|0;if(a[(c[A>>2]|0)+81>>0]|0)break d;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0;break d}}while(0);k=c[z+4+(m*20|0)+8>>2]|0;e:do if(!k){c[D>>2]=m+1;j=dd(B,41025,D)|0}else{l=(Eu(k)|0)+1|0;f:do if(c[o>>2]|0)if(!(a[q>>0]|0))Fa=69;else{j=0;break e}else{do if(0<0|(0==0?(e[p>>1]|0)>>>0>>0:0))j=r;else{j=c[s>>2]|0;if(j|0){c[s>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}j=c[t>>2]|0;if(!j){j=v;break}c[t>>2]=c[j>>2];c[u>>2]=(c[u>>2]|0)+1;break f}while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=69}while(0);if((Fa|0)==69){Fa=0;j=_d(B,l,0)|0}if(!j){j=0;break}ew(j|0,k|0,l|0)|0}while(0);if(a[(c[A>>2]|0)+81>>0]|0)break;yc((c[n>>2]|0)+(m*40|0)|0,j,-1,1,116)|0}while(0);m=m+1|0;j=c[z>>2]|0}while((m|0)<(j|0))}n=c[Oa>>2]|0;c[Da+4>>2]=y;c[Da>>2]=f;c[Da+12>>2]=0;if((j|0)>0){l=n+116|0;m=n+144|0;k=0;do{if(!(a[(c[n>>2]|0)+81>>0]|0)){j=Vk(Da,c[z+4+(k*20|0)>>2]|0)|0;yc((c[l>>2]|0)+((k+(e[m>>1]|0)|0)*40|0)|0,j,-1,1,-1)|0;j=c[z>>2]|0}k=k+1|0}while((k|0)<(j|0))}}wa=h+68|0;ca=h+52|0;if(c[wa>>2]|0?(c[ca>>2]|0)==0:0){j=c[Oa>>2]|0;g:do if(!j){l=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[l+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=97;else{A=0;break g}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ba=l+284|0;c[Ba>>2]=(c[Ba>>2]|0)+1;break h}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=97}while(0);if((Fa|0)==97)k=_d(l,224,0)|0;if(!k)A=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;A=k}}else A=j;while(0);B=c[f>>2]|0;z=h+32|0;u=c[z>>2]|0;v=c[h+36>>2]|0;w=c[h+40>>2]|0;x=c[h+44>>2]|0;o=c[wa>>2]|0;p=o+8|0;c[z>>2]=0;c[z+4>>2]=0;c[z+8>>2]=0;c[z+12>>2]=0;j=gk(B,c[p>>2]|0,0)|0;q=o+12|0;m=c[q>>2]|0;if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)>0){l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));t=j}else t=j}else t=j;i:do if((t|0?(G=h+48|0,F=c[G>>2]|0,F|0):0)?(E=c[t>>2]|0,(E|0)==(c[F>>2]|0)):0){if((E|0)>0){j=0;do{if((a[t+4+(j*20|0)+12>>0]|0)!=(a[F+4+(j*20|0)+12>>0]|0))break i;if(bk(0,c[t+4+(j*20|0)>>2]|0,c[F+4+(j*20|0)>>2]|0,-1)|0)break i;j=j+1|0}while((j|0)<(c[t>>2]|0));j=c[G>>2]|0;if(j|0)Fa=121}else{j=F;Fa=121}if((Fa|0)==121)ri(B,j);c[G>>2]=0}while(0);j=f+40|0;m=c[j>>2]|0;y=o+44|0;c[y>>2]=m;c[j>>2]=m+4;j=c[h>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=0;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(H=c[j>>2]|0,(H|0)>0):0){l=H;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}else k=0;j=c[h+48>>2]|0;m=Da+12|0;c[m>>2]=0;c[m+4>>2]=0;c[m+8>>2]=0;c[Ea+12>>2]=0;m=Ea+8|0;c[m>>2]=k;c[Ea>>2]=o;c[Ea+4>>2]=u;c[Da>>2]=f;c[Da+4>>2]=129;c[Da+8>>2]=130;c[Da+24>>2]=Ea;if((j|0)!=0?(I=c[j>>2]|0,(I|0)>0):0){l=I;j=j+4|0;while(1){k=c[j>>2]|0;if(k|0?_j(Da,k)|0:0)break;if((l|0)>1){l=l+-1|0;j=j+20|0}else break}k=c[m>>2]|0}j=k;l=(k|0)==0;if(l)k=0;else k=c[j>>2]|0;c[o+72>>2]=k;n=c[p>>2]|0;do if(n){if(l)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);m=c[q>>2]|0;do if(m){if(!j)n=0;else n=c[j>>2]|0;if((c[m>>2]|0)<=0){Fa=159;break}l=0;do{k=c[m+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;k=(j|0)==0;if(!k)a[j+4+((l+n|0)*20|0)+12>>0]=a[m+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[m>>2]|0));if(o){l=j;Fa=161}}else Fa=159;while(0);if((Fa|0)==159){l=j;k=(j|0)==0;Fa=161}if((Fa|0)==161){p=f+44|0;q=A+108|0;r=A+112|0;s=A+104|0;j=l;do{if(k)l=0;else l=c[j>>2]|0;c[o+76>>2]=l;n=c[(c[o+68>>2]|0)+20>>2]|0;do if(n){if(k)m=0;else m=c[j>>2]|0;if((c[n>>2]|0)<=0)break;l=0;do{k=c[n+4+(l*20|0)>>2]|0;if(!k)k=0;else k=dk(c[f>>2]|0,k,0,0)|0;j=nj(c[f>>2]|0,j,k)|0;if(j|0)a[j+4+((l+m|0)*20|0)+12>>0]=a[n+4+(l*20|0)+12>>0]|0;l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);k=c[o+36>>2]|0;if(k){Ba=dk(B,k,0,0)|0;j=nj(c[f>>2]|0,j,Ba)|0}l=c[p>>2]|0;k=l+1|0;c[o+48>>2]=k;l=l+2|0;c[p>>2]=l;c[o+52>>2]=l;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Ba=c[s>>2]|0;a[Ba+(l*20|0)>>0]=73;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=0;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,73,0,k,0)|0;o=c[o+32>>2]|0;k=(j|0)==0}while((o|0)!=0)}if(k){l=oj(B,147,17136,0)|0;l=nj(c[f>>2]|0,0,l)|0}else l=j;j=mj(f,l,u,v,w,x,t,0,0)|0;k=pj(f,0,0,0)|0;c[z>>2]=k;do if(k){c[k+28>>2]=j;Qk(f,k);if(!(Rk(f,(c[z>>2]|0)+8|0)|0)){Ba=j+8|0;c[Ba>>2]=c[Ba>>2]|64;Ba=h+8|0;c[Ba>>2]=c[Ba>>2]&-9;Kk(f,j,0);j=0}else j=7;m=c[y>>2]|0;k=c[l>>2]|0;n=A+108|0;l=c[n>>2]|0;o=A+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;Ba=c[A+104>>2]|0;a[Ba+(l*20|0)>>0]=113;b[Ba+(l*20|0)+2>>1]=0;c[Ba+(l*20|0)+4>>2]=m;c[Ba+(l*20|0)+8>>2]=k;c[Ba+(l*20|0)+12>>2]=0;c[Ba+(l*20|0)+16>>2]=0;a[Ba+(l*20|0)+1>>0]=0}else Di(A,113,m,k,0)|0;k=c[y>>2]|0;l=k+1|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+2|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0}else Di(A,111,l,k,0)|0;k=c[y>>2]|0;l=k+3|0;m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[A+104>>2]|0;a[Ba+(m*20|0)>>0]=111;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=l;c[Ba+(m*20|0)+8>>2]=k;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;break}else{Di(A,111,l,k,0)|0;break}}else{if(!j){j=0;break}pi(B,j,1);j=0}while(0);if(!((j|0)==0&(a[B+81>>0]|0)==0)){m=1;break}}va=h+32|0;l=c[va>>2]|0;za=h+8|0;da=(c[za>>2]|0)>>>3&1;T=La+4|0;U=T+36|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));S=h+48|0;c[La>>2]=c[S>>2];j=c[ca>>2]|0;j:do if(!j){sa=h+36|0;ua=Na+76|0;V=f+240|0;K=h+60|0;M=(da|0)!=0;W=f+200|0;N=h+4|0;X=f+12|0;O=Da+4|0;P=Da+8|0;Q=Da+12|0;R=Da+16|0;Ba=f+116|0;k=0;ta=l;k:while(1){j=c[ta>>2]|0;if((k|0)>=(j|0))break;m=c[ta+8+(k*72|0)+20>>2]|0;n=c[ta+8+(k*72|0)+16>>2]|0;j=ta+8+(k*72|0)+36|0;if((a[j>>0]&8?(Y=ta+8+(k*72|0)+40|0,ll(c[sa>>2]|0,c[Y>>2]|0)|0):0)?(b[ua>>1]&8192)==0:0){a[j>>0]=a[j>>0]&-41;ml(c[sa>>2]|0,c[Y>>2]|0)}l:do if(m){j=b[n+42>>1]|0;l=c[c[m>>2]>>2]|0;if((l|0)!=(j<<16>>16|0)){Fa=209;break k}if(!(c[m+8>>2]&8)){do if((k|0)==0&(c[m+48>>2]|0)!=0){if(!(c[za>>2]&262144))break;if((c[ta>>2]|0)==1){j=ta;k=0;break l}if(a[ta+116>>0]&10){j=ta;k=0;break l}}while(0);s=c[V>>2]|0;I=c[f>>2]|0;m:do if(!(b[I+76>>1]&1)){t=c[va>>2]|0;J=c[t+8+(k*72|0)+40>>2]|0;u=t+8+(k*72|0)+20|0;m=c[u>>2]|0;if(c[wa>>2]|0)break;if(c[m+68>>2]|0)break;o=c[m+32>>2]|0;j=c[m+60>>2]|0;n=(j|0)==0;if(!n){if(c[K>>2]|0)break;if(c[j+16>>2]|0)break;j=c[za>>2]|0;if(j&256)break}else j=c[za>>2]|0;l=c[o>>2]|0;if(!l)break;p=c[m+8>>2]|0;if(p&1|0)break;if(!n?M|(c[t>>2]|0)>1:0)break;r=c[S>>2]|0;q=(r|0)==0;if(!q?c[m+48>>2]|0:0)break;if(M?c[m+48>>2]|0:0)break;if(n){if(p&8192|0)break}else if(!((p&8192|j&1|0)==0&(c[sa>>2]|0)==0))break;H=t+8+(k*72|0)+36|0;if(a[H>>0]&32){if(M|(l|0)>1)break;if(!(c[(c[o+24>>2]|0)+56>>2]|0))G=1;else break}else G=0;n=m+52|0;l=c[n>>2]|0;do if(l|0){if(!((j&1|0)==0&((M|(c[m+48>>2]|0)!=0)^1)))break m;if(!((c[t>>2]|0)==1&(p&9|0)==0))break m;j=l;while(1){l=(j|0)==0;if(!l?(a[m+4>>0]|0)!=-128:0)break m;if((c[c[m+32>>2]>>2]|0)<1)break m;if(l)break;if(c[j+8>>2]&9|0)break m;m=j;j=c[j+52>>2]|0}if(q)break;l=c[r>>2]|0;if((l|0)<=0)break;j=0;do{if(!(b[r+4+(j*20|0)+16>>1]|0))break m;j=j+1|0}while((j|0)<(l|0))}while(0);q=t+8+(k*72|0)+8|0;j=c[q>>2]|0;c[V>>2]=j;do if(!(a[I+165>>0]|0)){if(a[W>>0]|0)break;l=c[I+312>>2]|0;if(!l)break;j=$a[l&127](c[I+316>>2]|0,21,0,0,0,j)|0;if((j|0)==1){cd(f,39216,Z);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,_);c[X>>2]=1}while(0);c[V>>2]=s;j=c[n>>2]|0;n:do if(!j)Fa=267;else{p=I+81|0;o=c[S>>2]|0;n=c[K>>2]|0;m=c[ca>>2]|0;while(1){c[S>>2]=0;c[va>>2]=0;c[ca>>2]=0;c[K>>2]=0;l=fk(I,h,0)|0;c[K>>2]=n;c[S>>2]=o;c[va>>2]=t;a[N>>0]=-128;if(!l)l=m;else{c[l+52>>2]=m;if(m|0)c[m+56>>2]=l;c[l+56>>2]=h}c[ca>>2]=l;if(a[p>>0]|0)break n;j=c[j+52>>2]|0;if(!j){Fa=267;break}else m=l}}while(0);do if((Fa|0)==267){Fa=0;F=c[u>>2]|0;n=t+8+(k*72|0)+4|0;j=c[n>>2]|0;o:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break o}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[q>>2]|0;p:do if(j|0){if(c[I+480>>2]|0){Xd(I,j);break}l=j;do if((c[I+304>>2]|0)>>>0<=l>>>0){if((c[I+308>>2]|0)>>>0<=l>>>0)break;ta=I+300|0;c[j>>2]=c[ta>>2];c[ta>>2]=j;break p}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{ta=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=t+8+(k*72|0)+12|0;l=c[j>>2]|0;q:do if(l|0){if(c[I+480>>2]|0){Xd(I,l);break}m=l;do if((c[I+304>>2]|0)>>>0<=m>>>0){if((c[I+308>>2]|0)>>>0<=m>>>0)break;ta=I+300|0;c[l>>2]=c[ta>>2];c[ta>>2]=l;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[n>>2]=0;c[q>>2]=0;c[j>>2]=0;c[u>>2]=0;j=t+8+(k*72|0)+16|0;l=c[j>>2]|0;if(l|0){m=l+32|0;n=c[m>>2]|0;if((n|0)==1){ta=c[Ba>>2]|0;ta=((ta|0)==0?f:ta)+256|0;c[l+76>>2]=c[ta>>2];c[ta>>2]=l}else c[m>>2]=n+-1;c[j>>2]=0}y=k+1|0;z=I+480|0;A=I+304|0;B=I+308|0;C=I+300|0;D=(G|0)==0;E=I+81|0;w=h;o=-1;x=F;while(1){t=c[x+32>>2]|0;u=c[t>>2]|0;s=w+32|0;j=c[s>>2]|0;if(!j){j=pj(f,0,0,0)|0;if(!j)break;c[s>>2]=j;v=0}else v=a[H>>0]|0;if((u|0)>1){r=u+-1|0;l=c[j>>2]|0;m=l+r|0;if(m>>>0>(c[j+4>>2]|0)>>>0){l=cw(l|0,((l|0)<0)<<31>>31|0,1)|0;l=Sv(l|0,L()|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;if((m|0)>199){Fa=307;break}p=c[f>>2]|0;m=(n|0)<0|(n|0)==0&l>>>0<200;q=m?l:200;l=Yv(q|0,(m?n:0)|0,72,0)|0;l=Sv(l|0,L()|0,8,0)|0;m=L()|0;n=j;do if((c[p+304>>2]|0)>>>0<=n>>>0){if((c[p+308>>2]|0)>>>0<=n>>>0){Fa=311;break}if(m>>>0>0|((m|0)==0?l>>>0>(e[p+276>>1]|0)>>>0:0))Fa=311}else Fa=311;while(0);if((Fa|0)==311){Fa=0;j=Zd(p,j,l,m)|0;if(!j)break}c[j+4>>2]=q;n=j;m=j;j=c[j>>2]|0}else{n=j;m=j;j=l}if((j|0)>(y|0)){do{j=j+-1|0;T=n+8+((j+r|0)*72|0)|0;l=n+8+(j*72|0)|0;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0))}while((j|0)>(y|0));j=c[m>>2]|0}c[m>>2]=j+r;gw(n+8+(y*72|0)|0,0,r*72|0)|0;l=u+k|0;j=y;do{c[n+8+(j*72|0)+40>>2]=-1;j=j+1|0}while((j|0)<(l|0));c[s>>2]=n;j=n}if((u|0)>0){r=0;while(1){p=r+k|0;q=j+8+(p*72|0)|0;p=c[j+8+(p*72|0)+48>>2]|0;r:do if(p|0){o=p+4|0;l=c[p>>2]|0;if((c[o>>2]|0)>0){n=0;do{l=c[l+(n<<3)>>2]|0;s:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);n=n+1|0;l=c[p>>2]|0}while((n|0)<(c[o>>2]|0))}t:do if(l|0){if(c[z>>2]|0){Xd(I,l);break}m=l;do if((c[A>>2]|0)>>>0<=m>>>0){if((c[B>>2]|0)>>>0<=m>>>0)break;c[l>>2]=c[C>>2];c[C>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ta=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(c[z>>2]|0){Xd(I,p);break}l=p;do if((c[A>>2]|0)>>>0<=l>>>0){if((c[B>>2]|0)>>>0<=l>>>0)break;c[p>>2]=c[C>>2];c[C>>2]=p;break r}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ta=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);m=t+8+(r*72|0)|0;T=q;l=m;U=T+72|0;do{c[T>>2]=c[l>>2];T=T+4|0;l=l+4|0}while((T|0)<(U|0));l=c[t+8+(r*72|0)+40>>2]|0;T=m;U=T+72|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));r=r+1|0;if((r|0)==(u|0)){o=l;break}}}a[j+8+(k*72|0)+36>>0]=v;l=x+48|0;m=c[l>>2]|0;if(m|0){n=c[m>>2]|0;if((n|0)>0){j=0;do{b[m+4+(j*20|0)+16>>1]=0;j=j+1|0}while((j|0)!=(n|0))}c[w+48>>2]=m;c[l>>2]=0}ta=x+36|0;j=c[ta>>2]|0;c[ta>>2]=0;if(!D)Wk(j,o);ta=w+36|0;U=Xk(I,j,c[ta>>2]|0)|0;c[ta>>2]=U;if(!(a[E>>0]|0)){c[Da>>2]=f;c[O>>2]=J;c[P>>2]=o;c[Q>>2]=G;c[R>>2]=c[x>>2];yl(Da,w,0)}j=w+8|0;c[j>>2]=c[j>>2]|c[x+8>>2]&1;j=x+60|0;l=c[j>>2]|0;if(l|0){c[w+60>>2]=l;c[j>>2]=0}w=c[w+52>>2]|0;if(!w)break;else x=c[x+52>>2]|0}if((Fa|0)==307){Fa=0;c[$>>2]=200;cd(f,43159,$)}if(!F)break;pi(I,F,1)}while(0);if(!(c[Ka>>2]|0))k=-1;else{m=1;break c}}while(0);j=c[va>>2]|0;if(a[xa>>0]|0){m=1;break c}if((d[i>>0]|0)<9)break;c[La>>2]=c[S>>2]}else j=ta}else j=ta;while(0);l=c[ca>>2]|0;if(!l){k=k+1|0;ta=j}else{w=l;break j}}if((Fa|0)==209){m=c[n>>2]|0;c[aa>>2]=j<<16>>16;c[aa+4>>2]=m;c[aa+8>>2]=l;cd(f,43040,aa);m=1;break c}if((j|0)>1)if((b[ua>>1]|0)>-1){c[Da>>2]=f;m=Da+4|0;n=Da+8|0;o=Da+12|0;p=Ea+4|0;q=Ea+8|0;r=Ea+12|0;s=Ea+16|0;t=Ea+24|0;u=Ea+20|0;do{c[m>>2]=0;c[n>>2]=0;c[o>>2]=0;Fl(Da,c[sa>>2]|0);u:do if(c[m>>2]|0){c[u>>2]=0;c[Ea>>2]=f;c[p>>2]=131;c[q>>2]=132;c[r>>2]=0;c[s>>2]=0;c[t>>2]=Da;j=c[sa>>2]|0;if(j|0)_j(Ea,j)|0;j=c[c[Da>>2]>>2]|0;k=c[o>>2]|0;if(!k)break;do if(j|0){if(c[j+480>>2]|0){Xd(j,k);break u}l=k;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Fa=j+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break u}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0)}while((c[n>>2]|0)!=0);j=c[ta>>2]|0;Fa=668}else Fa=669;else Fa=668;if((Fa|0)==668?(j|0)>0:0)Fa=669;v:do if((Fa|0)==669){z=f+208|0;A=f+44|0;B=Ja+108|0;C=Ja+112|0;D=ta+116|0;E=Ja+104|0;F=Da+4|0;G=Da+16|0;H=Da+8|0;I=Da+12|0;J=Ja+12|0;K=ta+8|0;M=f+19|0;N=f+28|0;O=ta+36|0;P=ta+32|0;Q=ta+24|0;R=ta+45|0;S=ta+40|0;y=0;while(1){u=ta+8+(y*72|0)|0;ka=ta+8+(y*72|0)+56|0;do if(((c[ka>>2]|0)==0&(c[ka+4>>2]|0)==0?(la=c[ta+8+(y*72|0)+8>>2]|0,ma=c[ta+8+(y*72|0)+4>>2]|0,na=c[f>>2]|0,(a[na+165>>0]|0)==0):0)?(a[W>>0]|0)==0:0){j=c[na+312>>2]|0;if(!j)break;j=$a[j&127](c[na+316>>2]|0,20,la,59952,ma,c[V>>2]|0)|0;if((j|0)==1){cd(f,39216,oa);c[X>>2]=23;break}if((j|2|0)==2)break;cd(f,39231,pa);c[X>>2]=1}while(0);s=ta+8+(y*72|0)+20|0;v=c[s>>2]|0;if(v|0){ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)+ka;if(!(b[ua>>1]&4096))ol(f,v,c[sa>>2]|0,c[ta+8+(y*72|0)+40>>2]|0,(d[ta+8+(y*72|0)+36>>0]|0)>>>5&1)|0;x=c[V>>2]|0;t=ta+8+(y*72|0)+8|0;c[V>>2]=c[t>>2];l=(y|0)==0;do if(l){if((c[ta>>2]|0)!=1?(a[D>>0]&10)==0:0){Fa=693;break}l=c[B>>2]|0;j=l+1|0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[O>>2]=k;if((c[C>>2]|0)>(l|0)){c[B>>2]=j;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=13;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=j;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(Ja,13,k,0,j)|0;c[P>>2]=j;j=c[O>>2]|0;a[Da>>0]=13;c[F>>2]=j;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[qa>>2]=c[v+20>>2];nk(f,1,43080,qa);kj(f,v,Da)|0;b[(c[Q>>2]|0)+44>>1]=b[v+6>>1]|0;a[R>>0]=a[R>>0]|16;c[S>>2]=c[H>>2];j=c[O>>2]|0;k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;ka=c[E>>2]|0;a[ka+(k*20|0)>>0]=67;b[ka+(k*20|0)+2>>1]=0;c[ka+(k*20|0)+4>>2]=j;c[ka+(k*20|0)+8>>2]=0;c[ka+(k*20|0)+12>>2]=0;c[ka+(k*20|0)+16>>2]=0;a[ka+(k*20|0)+1>>0]=0}else Di(Ja,67,j,0,0)|0;k=c[J>>2]|0;a[k+19>>0]=0;c[k+28>>2]=0;k=c[B>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k}else Fa=693;while(0);if((Fa|0)==693){Fa=0;k=(c[A>>2]|0)+1|0;c[A>>2]=k;w=ta+8+(y*72|0)+28|0;c[w>>2]=k;j=c[B>>2]|0;if((c[C>>2]|0)>(j|0)){ka=j+1|0;c[B>>2]=ka;ja=c[E>>2]|0;a[ja+(j*20|0)>>0]=70;b[ja+(j*20|0)+2>>1]=0;c[ja+(j*20|0)+4>>2]=0;c[ja+(j*20|0)+8>>2]=k;c[ja+(j*20|0)+12>>2]=0;c[ja+(j*20|0)+16>>2]=0;a[ja+(j*20|0)+1>>0]=0;k=ka}else{k=Di(Ja,70,0,k,0)|0;j=k;k=k+1|0}c[ta+8+(y*72|0)+24>>2]=k;do if(!(a[ta+8+(y*72|0)+37>>0]&8)){k=c[B>>2]|0;if((c[C>>2]|0)>(k|0)){c[B>>2]=k+1;T=c[E>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));r=k;break}else{r=Di(Ja,17,0,0,0)|0;break}}else r=0;while(0);w:do if(l)Fa=724;else{p=ta+8+(y*72|0)+4|0;q=K;x:while(1){o=c[q+20>>2]|0;y:do if(o|0){if(a[q+37>>0]&16)break;l=c[q+8>>2]|0;if(!l)break;m=c[q+4>>2]|0;n=c[p>>2]|0;do if(!m)k=((n|0)!=0)<<31>>31;else{if(!n)break y;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(k|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0))}while(0);if(k|0)break;m=c[t>>2]|0;if(!m)break;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(k|0)!=0))do{l=l+1|0;m=m+1|0;ka=a[l>>0]|0;k=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(k|0)!=0));if(k|0)break;k=c[s>>2]|0;if((c[k+20>>2]|0)!=(c[o+20>>2]|0))break;if(!(bk(0,c[k+36>>2]|0,c[o+36>>2]|0,-1)|0))break x}while(0);k=q+72|0;if(k>>>0>>0)q=k;else{Fa=724;break w}}k=c[ta+8+(y*72|0)+40>>2]|0;l=c[q+40>>2]|0;m=c[B>>2]|0;if((c[C>>2]|0)>(m|0)){c[B>>2]=m+1;ka=c[E>>2]|0;a[ka+(m*20|0)>>0]=111;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=k;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(Ja,111,k,l,0)|0;k=b[(c[q+20>>2]|0)+6>>1]|0;b[v+6>>1]=k}while(0);if((Fa|0)==724){Fa=0;k=c[ta+8+(y*72|0)+40>>2]|0;a[Da>>0]=12;c[F>>2]=k;c[G>>2]=0;c[H>>2]=0;c[I>>2]=0;c[ra>>2]=c[v+20>>2];nk(f,1,43094,ra);kj(f,v,Da)|0;k=b[v+6>>1]|0}b[(c[ta+8+(y*72|0)+16>>2]|0)+44>>1]=k;l=c[B>>2]|0;if(r|0){if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[E>>2]|0)+(((r|0)<0?l+-1|0:r)*20|0)|0;else k=59308;c[k+8>>2]=l}k=c[w>>2]|0;if((c[C>>2]|0)>(l|0)){c[B>>2]=l+1;ka=c[E>>2]|0;a[ka+(l*20|0)>>0]=66;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=k;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;k=l}else k=Di(Ja,66,k,0,0)|0;if((j|0)<0)j=(c[B>>2]|0)+-1|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[E>>2]|0)+(j*20|0)|0;else j=59308;c[j+4>>2]=k}a[M>>0]=0;c[N>>2]=0;if(a[xa>>0]|0)break;ka=nl(h)|0;c[z>>2]=(c[z>>2]|0)-ka;c[V>>2]=x}y=y+1|0;if((y|0)>=(c[ta>>2]|0))break v}m=1;break c}while(0);$=c[h>>2]|0;D=c[sa>>2]|0;t=h+40|0;m=c[t>>2]|0;u=h+44|0;X=c[u>>2]|0;j=c[za>>2]|0;a[Ga>>0]=j&1;z:do if((j&9|0)==1){n=c[La>>2]|0;k=(n|0)==0;l=($|0)==0;do if(!(l&k)){if(l|k){U=m;break z}k=c[n>>2]|0;if((k|0)!=(c[$>>2]|0)){U=m;break z}if((k|0)<=0)break;j=0;do{if((a[n+4+(j*20|0)+12>>0]|0)!=(a[$+4+(j*20|0)+12>>0]|0)){U=m;break z}if(bk(0,c[n+4+(j*20|0)>>2]|0,c[$+4+(j*20|0)>>2]|0,-1)|0){U=m;break z}j=j+1|0}while((j|0)<(c[n>>2]|0));j=c[za>>2]|0}while(0);c[za>>2]=j&-2;U=gk(Na,$,0)|0;c[t>>2]=U}else U=m;while(0);q=c[La>>2]|0;A:do if(q){o=c[f>>2]|0;r=c[q>>2]|0;m=(c[$>>2]|0)+1+r|0;n=m*5|0;l=n+20|0;p=o+272|0;B:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=763;else{n=0;o=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=764;break B}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=763}while(0);if((Fa|0)==763){k=_d(o,l,0)|0;Fa=764}do if((Fa|0)==764){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){o=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){o=p;break}else l=l+20|0}}while(0);l=f+40|0;k=c[l>>2]|0;c[l>>2]=k+1;c[La+8>>2]=k;l=(c[c[La>>2]>>2]|0)+1+(c[$>>2]|0)|0;m=Ja+108|0;j=c[m>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[m>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=k;c[ra+(j*20|0)+8>>2]=l;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,k,l,0)|0;k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){if((j|0)<0)k=(c[m>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,n,-9);break}if(o)break;c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}if(o|(c[k+480>>2]|0)!=0)break;ra=(c[n>>2]|0)+-1|0;c[n>>2]=ra;if(ra|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break A}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[n>>2]=c[ra>>2];c[ra>>2]=n;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ra=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else j=-1;while(0);c[La+20>>2]=j;do if((a[i>>0]|0)==12){j=c[i+4>>2]|0;k=c[$>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;ra=c[Ja+104>>2]|0;a[ra+(m*20|0)>>0]=113;b[ra+(m*20|0)+2>>1]=0;c[ra+(m*20|0)+4>>2]=j;c[ra+(m*20|0)+8>>2]=k;c[ra+(m*20|0)+12>>2]=0;c[ra+(m*20|0)+16>>2]=0;a[ra+(m*20|0)+1>>0]=0;break}else{Di(Ja,113,j,k,0)|0;break}}while(0);_=f+56|0;aa=c[_>>2]|0;j=aa+-1|0;c[_>>2]=j;if(!(c[za>>2]&16384))b[h+6>>1]=320;pl(f,h,j);do if(!(c[h+12>>2]|0)){j=c[La+20>>2]|0;if((j|0)<=-1)break;if(!(a[(c[Ja>>2]|0)+81>>0]|0))j=(c[Ja+104>>2]|0)+(j*20|0)|0;else j=59308;a[j>>0]=114;ra=La+32|0;a[ra>>0]=a[ra>>0]|1}while(0);do if(!(c[za>>2]&1))j=0;else{q=f+40|0;s=c[q>>2]|0;c[q>>2]=s+1;c[Ga+4>>2]=s;q=c[h>>2]|0;o=c[f>>2]|0;r=c[q>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;C:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=820;else{o=0;n=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=821;break C}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=820}while(0);if((Fa|0)==820){k=_d(o,l,0)|0;Fa=821}do if((Fa|0)==821){do if(!k){j=o+81|0;if(a[j>>0]|0){o=0;n=1;break}if(a[o+82>>0]|0){o=0;n=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){o=0;n=1;break}c[j+12>>2]=7;o=0;n=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;o=k;n=0}while(0);if(!((r|0)>0&(k|0)!=0))break;p=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[p>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0))break;else l=l+20|0}}while(0);p=Ja+108|0;j=c[p>>2]|0;if((c[Ja+112>>2]|0)>(j|0)){c[p>>2]=j+1;ra=c[Ja+104>>2]|0;a[ra+(j*20|0)>>0]=113;b[ra+(j*20|0)+2>>1]=0;c[ra+(j*20|0)+4>>2]=s;c[ra+(j*20|0)+8>>2]=0;c[ra+(j*20|0)+12>>2]=0;c[ra+(j*20|0)+16>>2]=0;a[ra+(j*20|0)+1>>0]=0}else j=Di(Ja,113,s,0,0)|0;k=c[Ja>>2]|0;D:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;ra=(c[o>>2]|0)+-1|0;c[o>>2]=ra;if(ra|0)break;k=c[o+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,o);break D}l=o;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;ra=k+300|0;c[o>>2]=c[ra>>2];c[ra>>2]=o;break D}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ra=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ra;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((j|0)<0)k=(c[p>>2]|0)+-1|0;else k=j;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,o,-9);break}if(n)break;c[l+(k*20|0)+16>>2]=o;a[m>>0]=-9}while(0);c[Ga+8>>2]=j;j=c[p>>2]|0;if((j|0)<=0){j=3;break}b[(c[Ja+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=8;j=3}while(0);a[Ga+1>>0]=j;l=(U|0)==0;E:do if((da|0)==0&l){B=(((a[Ga>>0]|0)==0?0:256)|c[za>>2]&16384)&65535;q=c[wa>>2]|0;C=(q|0)!=0;do if(C){j=c[Oa>>2]|0;F:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);G:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=873;else{j=0;break F}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break G}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=873}while(0);if((Fa|0)==873)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);k=c[q+8>>2]|0;do if(k){m=c[k>>2]|0;k=f+44|0;o=c[k>>2]|0;l=o+1|0;c[q+64>>2]=l;m=o+m|0;c[k>>2]=m;o=j+108|0;n=c[o>>2]|0;p=j+112|0;if((c[p>>2]|0)>(n|0)){c[o>>2]=n+1;A=c[j+104>>2]|0;a[A+(n*20|0)>>0]=73;b[A+(n*20|0)+2>>1]=0;c[A+(n*20|0)+4>>2]=0;c[A+(n*20|0)+8>>2]=l;c[A+(n*20|0)+12>>2]=m;c[A+(n*20|0)+16>>2]=0;a[A+(n*20|0)+1>>0]=0;A=k;break}else{Di(j,73,0,l,m)|0;A=k;break}}else{A=f+44|0;o=j+108|0;p=j+112|0}while(0);k=(c[A>>2]|0)+1|0;c[A>>2]=k;c[q+80>>2]=k;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,k,0)|0;if(a[q+20>>0]|0){n=c[A>>2]|0;m=n+1|0;c[q+84>>2]=m;n=n+2|0;c[A>>2]=n;k=q+88|0;c[k>>2]=n;n=f+40|0;l=c[n>>2]|0;c[n>>2]=l+1;n=q+56|0;c[n>>2]=l;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=1;c[Ca+(l*20|0)+8>>2]=m;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,1,m,0)|0;k=c[k>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0}else Di(j,70,0,k,0)|0;m=c[n>>2]|0;k=c[q+44>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[j+104>>2]|0;a[Ca+(l*20|0)>>0]=111;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=m;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,111,m,k,0)|0;break}}x=f+40|0;y=q+44|0;z=j+104|0;w=q;do{v=w+40|0;k=c[v>>2]|0;do if(c[k+4>>2]&4096){if((a[w+17>>0]|0)==87){Fa=944;break}n=c[(c[w+68>>2]|0)+20>>2]|0;t=c[f>>2]|0;u=c[n>>2]|0;r=u+1|0;s=r*5|0;l=s+20|0;q=t+272|0;H:do if(c[q>>2]|0)if(!(a[t+81>>0]|0))Fa=909;else{r=0;m=0;n=1}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0>>0:0))){k=t+300|0;m=c[k>>2]|0;if(m|0){c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}k=t+296|0;m=c[k>>2]|0;if(!m){k=t+292|0;break}else{c[k>>2]=c[m>>2];Fa=t+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=910;break H}}else k=t+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=909}while(0);if((Fa|0)==909){m=_d(t,l,0)|0;Fa=910}I:do if((Fa|0)==910){Fa=0;if(m|0){q=m+16|0;c[q>>2]=m+20+(r<<2);b[m+6>>1]=u;b[m+8>>1]=r;a[m+4>>0]=a[t+78>>0]|0;c[m+12>>2]=t;c[m>>2]=1;gw(m+24|0,0,s+-4|0)|0;if((u|0)<=0){r=m;n=0;break}l=n+4|0;n=0;while(1){k=Yi(f,c[l>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[m+20+(n<<2)>>2]=k;a[(c[q>>2]|0)+n>>0]=a[l+12>>0]|0;n=n+1|0;if((n|0)==(u|0)){r=m;n=0;break I}else l=l+20|0}}k=t+81|0;if(a[k>>0]|0){r=0;n=1;break}if(a[t+82>>0]|0){r=0;n=1;break}a[k>>0]=1;if((c[t+180>>2]|0)>0)c[t+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[t+236>>2]|0;if(!k){r=0;n=1;break}c[k+12>>2]=7;r=0;n=1}while(0);l=c[x>>2]|0;c[x>>2]=l+1;k=w+56|0;c[k>>2]=l;Ca=c[A>>2]|0;q=w+60|0;c[q>>2]=Ca+1;c[A>>2]=Ca+3;do if(m){if((a[(c[(c[v>>2]|0)+32>>2]|0)+1>>0]|0)!=105)break;a[c[m+16>>2]>>0]=1;l=c[k>>2]|0}while(0);k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ca=c[z>>2]|0;a[Ca+(k*20|0)>>0]=113;b[Ca+(k*20|0)+2>>1]=0;c[Ca+(k*20|0)+4>>2]=l;c[Ca+(k*20|0)+8>>2]=2;c[Ca+(k*20|0)+12>>2]=0;c[Ca+(k*20|0)+16>>2]=0;a[Ca+(k*20|0)+1>>0]=0}else Di(j,113,l,2,0)|0;k=c[j>>2]|0;J:do if(a[k+81>>0]|0){if(n|(c[k+480>>2]|0)!=0)break;Ca=(c[r>>2]|0)+-1|0;c[r>>2]=Ca;if(Ca|0)break;k=c[r+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,r);break J}l=r;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ca=k+300|0;c[r>>2]=c[Ca>>2];c[Ca>>2]=r;break J}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{Ca=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}else{Aa=c[z>>2]|0;Ca=(c[o>>2]|0)+-1|0;a[Aa+(Ca*20|0)+1>>0]=-9;c[Aa+(Ca*20|0)+16>>2]=r}while(0);k=(c[q>>2]|0)+1|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ca=c[z>>2]|0;a[Ca+(l*20|0)>>0]=70;b[Ca+(l*20|0)+2>>1]=0;c[Ca+(l*20|0)+4>>2]=0;c[Ca+(l*20|0)+8>>2]=k;c[Ca+(l*20|0)+12>>2]=0;c[Ca+(l*20|0)+16>>2]=0;a[Ca+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}else Fa=944;while(0);do if((Fa|0)==944){Fa=0;k=c[k+32>>2]|0;if((k|0)==43457|(k|0)==43467){l=c[A>>2]|0;c[w+60>>2]=l+1;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;c[A>>2]=l+2;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}if(!((k|0)==40587|(k|0)==40592))break;k=c[x>>2]|0;c[x>>2]=k+1;c[w+56>>2]=k;l=c[y>>2]|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;Ca=c[z>>2]|0;a[Ca+(m*20|0)>>0]=111;b[Ca+(m*20|0)+2>>1]=0;c[Ca+(m*20|0)+4>>2]=k;c[Ca+(m*20|0)+8>>2]=l;c[Ca+(m*20|0)+12>>2]=0;c[Ca+(m*20|0)+16>>2]=0;a[Ca+(m*20|0)+1>>0]=0;break}else{Di(j,111,k,l,0)|0;break}}while(0);w=c[w+32>>2]|0}while((w|0)!=0)}while(0);k=h+6|0;Q=ql(f,ta,D,c[La>>2]|0,c[h>>2]|0,B,b[k>>1]|0)|0;if(!Q){m=1;break c}j=b[Q+72>>1]|0;if(j<<16>>16<(b[k>>1]|0))b[k>>1]=j;do if(a[Ga>>0]|0){j=a[Q+51>>0]|0;if(!(j<<24>>24))break;a[Ga+1>>0]=j}while(0);k=c[La>>2]|0;do if(!k)Fa=965;else{l=a[Q+47>>0]|0;c[La+4>>2]=l;if(!(a[Q+52>>0]|0))j=Q+32|0;else j=Q+752+(((d[Q+46>>0]|0)+-1|0)*80|0)+16|0;c[La+28>>2]=c[j>>2];if((c[k>>2]|0)!=(l|0))break;c[La>>2]=0;Fa=965}while(0);do if((Fa|0)==965){j=c[La+20>>2]|0;if((j|0)<=-1)break;k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Ca=c[Ja+104>>2]|0;za=Ca+(j*20|0)+1|0;Aa=Ca+(j*20|0)+16|0;kg(k,a[za>>0]|0,c[Aa>>2]|0);a[za>>0]=0;c[Aa>>2]=0;a[Ca+(j*20|0)>>0]=-86}while(0);if(!C){rl(f,h,-1,La,Ga,i,c[Q+32>>2]|0,c[Q+36>>2]|0);sl(Q);j=0;Fa=1796;break}Z=c[_>>2]|0;m=Z+-1|0;W=Z+-2|0;X=Z+-3|0;c[_>>2]=X;w=f+44|0;Y=(c[w>>2]|0)+1|0;c[w>>2]=Y;V=c[wa>>2]|0;J=c[V+12>>2]|0;j=c[Oa>>2]|0;K:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);L:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=983;else{S=0;break K}else{do if((e[l+276>>1]|0)>=224){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];Ca=l+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break L}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=983}while(0);if((Fa|0)==983)k=_d(l,224,0)|0;if(!k){S=0;break}T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=l;j=l+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;S=k}else S=j;while(0);o=c[va>>2]|0;p=c[o+48>>2]|0;o=b[(c[o+24>>2]|0)+42>>1]|0;q=o<<16>>16;K=c[_>>2]|0;E=K+-1|0;c[_>>2]=E;z=Ea+20|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[z+24>>2]=0;c[z+28>>2]=0;c[Ea>>2]=f;z=Ea+4|0;c[z>>2]=V;c[Ea+8>>2]=S;c[Ea+12>>2]=Y;c[Ea+16>>2]=m;P=c[V+44>>2]|0;R=Ea+36|0;c[R>>2]=P;O=P+1|0;B=Ea+28|0;c[B>>2]=P+2;H=Ea+44|0;c[H>>2]=P+3;P=V+17|0;M:do switch(a[P>>0]|0){case 83:{if((a[V+16>>0]|0)==86)break M;k=c[V+24>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1007;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1007;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1007;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1007)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=1;break M}while(0);break}case 87:{if(c[V+84>>2]|0)break M;j=V;do{Ca=c[(c[j+40>>2]|0)+32>>2]|0;if((Ca|0)==40592|((Ca|0)==40587|((Ca|0)==43457|(Ca|0)==43467)))break M;j=c[j+32>>2]|0}while((j|0)!=0);if((a[V+18>>0]|0)!=85){c[Ea+24>>2]=1;break M}if((a[V+16>>0]|0)==86)break M;k=c[V+28>>2]|0;j=c[f>>2]|0;c[Da>>2]=0;do if(k|0){Wj(j,k,a[j+78>>0]|0,67,Da)|0;n=c[Da>>2]|0;if(!n)break;l=n+8|0;m=b[l>>1]|0;j=m&65535;do if(!(j&4)){if(j&8|0){k=Mg(+g[n>>3])|0;L()|0;j=m;break}if(!(j&18)){k=0;j=m;break}k=Ng(a[n+10>>0]|0,c[n+12>>2]|0,c[n+16>>2]|0)|0;L()|0;j=b[l>>1]|0}else{k=c[n>>2]|0;j=m}while(0);l=(k|0)<1;if(!((j&9216)==0?!(c[n+24>>2]|0):0))Cg(n);j=c[n+32>>2]|0;do if(!j)Fa=1036;else{if(c[j+480>>2]|0){Xd(j,n);break}k=n;if((c[j+304>>2]|0)>>>0>k>>>0){Fa=1036;break}if((c[j+308>>2]|0)>>>0<=k>>>0){Fa=1036;break}Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n}while(0);do if((Fa|0)==1036)if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}while(0);if(l)break M;c[Ea+24>>2]=3;break M}while(0);break}default:c[Ea+24>>2]=2}while(0);j=c[w>>2]|0;n=j+1|0;j=j+q|0;t=j+1|0;u=j+2|0;c[w>>2]=u;switch(a[P>>0]|0){case 83:case 85:{j=j+3|0;c[w>>2]=j;G=j;break}default:{G=0;j=u}}F=V+18|0;switch(a[F>>0]|0){case 83:case 85:{j=j+1|0;c[w>>2]=j;D=j;break}default:D=0}C=V+16|0;if((a[C>>0]|0)==76){y=0;x=0}else{if(!J)m=0;else m=c[J>>2]|0;k=(c[V+72>>2]|0)+n|0;l=c[V+8>>2]|0;if(l)k=(c[l>>2]|0)+k|0;y=j+m|0;c[Ea+32>>2]=y+1;y=y+m|0;c[Ea+40>>2]=y+1;y=y+m|0;c[Ea+48>>2]=y+1;c[w>>2]=y+m;y=j+1|0;x=k}M=S+108|0;N=S+112|0;if(o<<16>>16>0){k=S+104|0;j=0;do{l=j+n|0;m=c[M>>2]|0;if((c[N>>2]|0)>(m|0)){c[M>>2]=m+1;Da=c[k>>2]|0;a[Da+(m*20|0)>>0]=90;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=p;c[Da+(m*20|0)+8>>2]=j;c[Da+(m*20|0)+12>>2]=l;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(S,90,p,j,l)|0;j=j+1|0}while((j|0)!=(q|0))}j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=92;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=n;c[Da+(j*20|0)+8>>2]=q;c[Da+(j*20|0)+12>>2]=t;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,92,n,q,t)|0;I=V+8|0;q=c[I>>2]|0;do if(q){r=c[q>>2]|0;s=(c[V+72>>2]|0)+n|0;o=c[f>>2]|0;m=r+1|0;n=m*5|0;l=n+20|0;p=o+272|0;N:do if(c[p>>2]|0)if(!(a[o+81>>0]|0))Fa=1074;else{n=0;l=1}else{do if(!(0<0|(0==0?(e[o+276>>1]|0)>>>0>>0:0))){j=o+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}j=o+296|0;k=c[j>>2]|0;if(!k){j=o+292|0;break}else{c[j>>2]=c[k>>2];Fa=o+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1075;break N}}else j=o+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1074}while(0);if((Fa|0)==1074){k=_d(o,l,0)|0;Fa=1075}do if((Fa|0)==1075){do if(!k){j=o+81|0;if(a[j>>0]|0){n=0;p=1;break}if(a[o+82>>0]|0){n=0;p=1;break}a[j>>0]=1;if((c[o+180>>2]|0)>0)c[o+264>>2]=1;c[p>>2]=(c[p>>2]|0)+1;j=c[o+236>>2]|0;if(!j){n=0;p=1;break}c[j+12>>2]=7;n=0;p=1}else{c[k+16>>2]=k+20+(m<<2);b[k+6>>1]=r;b[k+8>>1]=m;a[k+4>>0]=a[o+78>>0]|0;c[k+12>>2]=o;c[k>>2]=1;gw(k+24|0,0,n+-4|0)|0;n=k;p=0}while(0);if(!((r|0)>0&(k|0)!=0)){l=p;break}o=k+16|0;l=q+4|0;m=0;while(1){j=Yi(f,c[l>>2]|0)|0;if(!j)j=c[(c[f>>2]|0)+8>>2]|0;c[k+20+(m<<2)>>2]=j;a[(c[o>>2]|0)+m>>0]=a[l+12>>0]|0;m=m+1|0;if((m|0)==(r|0)){l=p;break}else l=l+20|0}}while(0);o=(c[w>>2]|0)+1|0;c[w>>2]=o;m=V+64|0;j=c[m>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=87;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=s;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=r;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else k=Di(S,87,s,j,r)|0;j=c[S>>2]|0;O:do if(a[j+81>>0]|0){if(l|(c[j+480>>2]|0)!=0)break;Da=(c[n>>2]|0)+-1|0;c[n>>2]=Da;if(Da|0)break;j=c[n+12>>2]|0;do if(j|0){if(c[j+480>>2]|0){Xd(j,n);break O}l=n;if((c[j+304>>2]|0)>>>0>l>>>0)break;if((c[j+308>>2]|0)>>>0<=l>>>0)break;Da=j+300|0;c[n>>2]=c[Da>>2];c[Da>>2]=n;break O}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Da=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}else{Ca=c[S+104>>2]|0;Da=(c[M>>2]|0)+-1|0;a[Ca+(Da*20|0)+1>>0]=-9;c[Ca+(Da*20|0)+16>>2]=n}while(0);l=k+2|0;j=k+4|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Da=c[S+104>>2]|0;a[Da+(k*20|0)>>0]=16;b[Da+(k*20|0)+2>>1]=0;c[Da+(k*20|0)+4>>2]=l;c[Da+(k*20|0)+8>>2]=j;c[Da+(k*20|0)+12>>2]=l;c[Da+(k*20|0)+16>>2]=0;a[Da+(k*20|0)+1>>0]=0}else Di(S,16,l,j,l)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=12;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=o;c[Da+(j*20|0)+8>>2]=0;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else j=Di(S,12,o,0,0)|0;m=c[m>>2]|0;k=r+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;v=c[S+104>>2]|0;a[v+(l*20|0)>>0]=78;b[v+(l*20|0)+2>>1]=0;c[v+(l*20|0)+4>>2]=s;c[v+(l*20|0)+8>>2]=m;c[v+(l*20|0)+12>>2]=k;c[v+(l*20|0)+16>>2]=0;a[v+(l*20|0)+1>>0]=0;v=j;A=o;break}else{Di(S,78,s,m,k)|0;v=j;A=o;break}}else{v=0;A=0}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=121;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=u;c[Da+(j*20|0)+12>>2]=0;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,121,O,u,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Da=c[S+104>>2]|0;a[Da+(j*20|0)>>0]=122;b[Da+(j*20|0)+2>>1]=0;c[Da+(j*20|0)+4>>2]=O;c[Da+(j*20|0)+8>>2]=t;c[Da+(j*20|0)+12>>2]=u;c[Da+(j*20|0)+16>>2]=0;a[Da+(j*20|0)+1>>0]=0}else Di(S,122,O,t,u)|0;j=c[V+80>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;t=c[S+104>>2]|0;a[t+(k*20|0)>>0]=52;b[t+(k*20|0)+2>>1]=0;c[t+(k*20|0)+4>>2]=j;c[t+(k*20|0)+8>>2]=0;c[t+(k*20|0)+12>>2]=u;c[t+(k*20|0)+16>>2]=0;a[t+(k*20|0)+1>>0]=0;t=k}else t=Di(S,52,j,0,u)|0;j=c[Oa>>2]|0;P:do if(!j){l=c[f>>2]|0;do if(!(c[Ba>>2]|0)){if(b[l+76>>1]&8)break;a[f+23>>0]=1}while(0);Q:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))Fa=1136;else{j=0;break P}else{do if((e[l+276>>1]|0)>=224){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];Da=l+284|0;c[Da>>2]=(c[Da>>2]|0)+1;break Q}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=1136}while(0);if((Fa|0)==1136)j=_d(l,224,0)|0;if(!j){j=0;break}T=j+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[j>>2]=l;k=l+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=j;c[j+8>>2]=l;c[j+4>>2]=0;c[k>>2]=j;c[j+20>>2]=381479589;c[j+12>>2]=f;c[Oa>>2]=j;Di(j,61,0,1,0)|0}while(0);q=j+108|0;r=j+112|0;s=j+104|0;u=V+84|0;o=V;p=0;do{n=c[o+40>>2]|0;k=c[o+48>>2]|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=73;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,73,0,k,0)|0;k=c[(c[o+68>>2]|0)+20>>2]|0;if(!k)k=0;else k=c[k>>2]|0;p=(p|0)>(k|0)?p:k;do if(!(c[u>>2]|0)){Da=c[n+32>>2]|0;do if((Da|0)==43457|(Da|0)==43467){k=o+60|0;l=c[k>>2]|0;m=c[q>>2]|0;if((c[r>>2]|0)>(m|0)){c[q>>2]=m+1;Da=c[s>>2]|0;a[Da+(m*20|0)>>0]=70;b[Da+(m*20|0)+2>>1]=0;c[Da+(m*20|0)+4>>2]=0;c[Da+(m*20|0)+8>>2]=l;c[Da+(m*20|0)+12>>2]=0;c[Da+(m*20|0)+16>>2]=0;a[Da+(m*20|0)+1>>0]=0}else Di(j,70,0,l,0)|0;k=(c[k>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);if(!(c[n+4>>2]&4096))break;k=c[o+56>>2]|0;if(!k)break;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=-118;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=k;c[Da+(l*20|0)+8>>2]=0;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0}else Di(j,138,k,0,0)|0;k=(c[o+60>>2]|0)+1|0;l=c[q>>2]|0;if((c[r>>2]|0)>(l|0)){c[q>>2]=l+1;Da=c[s>>2]|0;a[Da+(l*20|0)>>0]=70;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=0;c[Da+(l*20|0)+8>>2]=k;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,70,0,k,0)|0;break}}while(0);o=c[o+32>>2]|0}while((o|0)!=0);n=c[w>>2]|0;c[w>>2]=n+p;c[Ea+20>>2]=n+1;n=(G|0)!=0;if(n){j=c[V+24>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,G)|0;Fa=1172;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,G,0)|0;break}}else{m=Jj(f,0,G)|0;Fa=1172}while(0);do if((Fa|0)==1172){if((m|0)==(G|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[j+104>>2]|0;a[Da+(l*20|0)>>0]=79;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=m;c[Da+(l*20|0)+8>>2]=G;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,G,0)|0;break}}while(0);pm(f,G,(a[C>>0]|0)==86?3:0)}o=(D|0)!=0;if(o){j=c[V+28>>2]|0;do if(j){if((a[j>>0]|0)!=-88){m=Jj(f,j,D)|0;Fa=1186;break}m=c[Oa>>2]|0;j=c[j+28>>2]|0;k=m+108|0;l=c[k>>2]|0;if((c[m+112>>2]|0)>(l|0)){c[k>>2]=l+1;Da=c[m+104>>2]|0;a[Da+(l*20|0)>>0]=78;b[Da+(l*20|0)+2>>1]=0;c[Da+(l*20|0)+4>>2]=j;c[Da+(l*20|0)+8>>2]=D;c[Da+(l*20|0)+12>>2]=0;c[Da+(l*20|0)+16>>2]=0;a[Da+(l*20|0)+1>>0]=0;break}else{Di(m,78,j,D,0)|0;break}}else{m=Jj(f,0,D)|0;Fa=1186}while(0);do if((Fa|0)==1186){if((m|0)==(D|0))break;j=c[Oa>>2]|0;if(!j)break;k=j+108|0;l=c[k>>2]|0;if((c[j+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[j+104>>2]|0;a[Fa+(l*20|0)>>0]=79;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=m;c[Fa+(l*20|0)+8>>2]=D;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(j,79,m,D,0)|0;break}}while(0);pm(f,D,(a[C>>0]|0)==86?4:1)}j=a[P>>0]|0;if(n&j<<24>>24==(a[F>>0]|0)){j=j<<24>>24==83?57:55;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=j;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=D;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(S,j,G,0,D)|0;qm(c[Ea>>2]|0,c[z>>2]|0,0);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=36;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=1;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;rm(Ea);j=c[R>>2]|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else j=59308;c[j+8>>2]=l;j=a[P>>0]|0}do if(j<<24>>24==83){if(!(o&(a[C>>0]|0)!=86))break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=101;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=G;c[Fa+(j*20|0)+8>>2]=D;c[Fa+(j*20|0)+12>>2]=G;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{Di(S,101,G,D,G)|0;break}}while(0);do if((a[P>>0]|0)!=87){j=c[B>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,36,j,1,0)|0;break}}while(0);j=c[R>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;j=c[H>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=36;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=j;c[Fa+(k*20|0)+8>>2]=1;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,36,j,1,0)|0;m=(y|0)!=0;do if((J|0)!=0&m){j=(c[J>>2]|0)+-1|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=78;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=x;c[Fa+(k*20|0)+8>>2]=y;c[Fa+(k*20|0)+12>>2]=j;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,78,x,y,j)|0;j=c[Ea+32>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+40>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,78,y,j,k)|0;j=c[Ea+48>>2]|0;k=(c[J>>2]|0)+-1|0;l=c[M>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=78;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=y;c[Fa+(l*20|0)+8>>2]=j;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(S,78,y,j,k)|0;break}}while(0);j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=E;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,E,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((t|0)<0?k+-1|0:t)*20|0)|0;else j=59308;c[j+8>>2]=k;if(m)sm(f,J,x,y,E);j=a[P>>0]|0;R:do if(j<<24>>24==83){tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){tm(Ea,1,D,0)|0;tm(Ea,2,G,0)|0;break}l=c[_>>2]|0;j=l+-1|0;c[_>>2]=j;k=c[M>>2]|0;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,j);tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=0-l|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}else{if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0;tm(Ea,1,0,0)|0;break R}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;break}tm(Ea,3,0,0)|0;if((a[F>>0]|0)==87)break;if((a[C>>0]|0)!=86){do if(o){j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=47;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=D;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=1;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0;break}else{j=Di(S,47,D,0,1)|0;break}}else j=0;while(0);tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k;break}k=c[M>>2]|0;if(o){l=(c[_>>2]|0)+-1|0;c[_>>2]=l;um(Ea,57,c[R>>2]|0,D,c[H>>2]|0,l)}else l=0;tm(Ea,1,0,0)|0;tm(Ea,2,G,0)|0;if(!o)break;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;k=c[S+12>>2]|0;j=~l;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,S,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];break}}while(0);k=c[S+12>>2]|0;j=0-K|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,S,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M>>2];sl(Q);j=c[M>>2]|0;if(!(c[I>>2]|0))p=0;else{if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=70;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=A;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else j=Di(S,70,0,A,0)|0;l=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))k=(c[S+104>>2]|0)+(((v|0)<0?l+-1|0:v)*20|0)|0;else k=59308;c[k+8>>2]=l;p=j;j=l}if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;o=c[S+104>>2]|0;a[o+(j*20|0)>>0]=36;b[o+(j*20|0)+2>>1]=0;c[o+(j*20|0)+4>>2]=O;c[o+(j*20|0)+8>>2]=0;c[o+(j*20|0)+12>>2]=0;c[o+(j*20|0)+16>>2]=0;a[o+(j*20|0)+1>>0]=0;o=j}else o=Di(S,36,O,0,0)|0;j=a[P>>0]|0;do if((a[F>>0]|0)==85){do if(j<<24>>24==85){Fa=(a[C>>0]|0)==86;tm(Ea,3,D,0)|0;if(!Fa)break;tm(Ea,2,G,0)|0}else tm(Ea,3,D,0)|0;while(0);tm(Ea,1,0,0)|0;k=a[(c[S>>2]|0)+81>>0]|0;l=c[M>>2]|0}else{tm(Ea,3,0,0)|0;if(j<<24>>24!=83){k=c[M>>2]|0;m=tm(Ea,1,0,1)|0;tm(Ea,2,G,0)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((m|0)<0?l+-1|0:m)*20|0)|0;else j=59308;c[j+8>>2]=l;break}do if((a[C>>0]|0)!=86){j=c[M>>2]|0;if((a[F>>0]|0)==87){n=tm(Ea,1,G,1)|0;l=tm(Ea,2,0,1)|0;break}else{n=tm(Ea,1,D,1)|0;l=tm(Ea,2,G,1)|0;break}}else{j=c[M>>2]|0;l=tm(Ea,2,G,1)|0;n=tm(Ea,1,0,1)|0}while(0);k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,11,0,j,0)|0;k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((l|0)<0?k+-1|0:l)*20|0)|0;else j=59308;c[j+8>>2]=k;m=tm(Ea,1,0,1)|0;j=c[M>>2]|0;if((c[N>>2]|0)>(j|0)){c[M>>2]=j+1;Fa=c[S+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=k;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(S,11,0,k,0)|0;l=c[M>>2]|0;k=a[(c[S>>2]|0)+81>>0]|0;if(!(k<<24>>24)){j=l+-1|0;Fa=c[S+104>>2]|0;c[Fa+(((n|0)<0?j:n)*20|0)+8>>2]=l;j=Fa+(((m|0)<0?j:m)*20|0)|0}else{c[14829]=l;j=59308}c[j+8>>2]=l}while(0);if(!(k<<24>>24))j=(c[S+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else j=59308;c[j+8>>2]=l;j=c[R>>2]|0;if((c[N>>2]|0)>(l|0)){c[M>>2]=l+1;Fa=c[S+104>>2]|0;a[Fa+(l*20|0)>>0]=-118;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=j;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(S,138,j,0,0)|0;do if(c[I>>2]|0){j=c[u>>2]|0;do if(j|0){k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(S,70,1,j,0)|0;j=c[V+88>>2]|0;k=c[M>>2]|0;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=j;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,70,0,j,0)|0;break}}while(0);k=c[M>>2]|0;if(!(a[(c[S>>2]|0)+81>>0]|0))j=(c[S+104>>2]|0)+(((p|0)<0?k+-1|0:p)*20|0)|0;else j=59308;c[j+4>>2]=k;if((c[N>>2]|0)>(k|0)){c[M>>2]=k+1;Fa=c[S+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0;break}else{Di(S,66,A,0,0)|0;break}}while(0);n=Ja+108|0;j=c[n>>2]|0;m=Ja+112|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=11;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=0;c[Fa+(j*20|0)+8>>2]=X;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,11,0,X,0)|0;l=Ja+12|0;j=c[l>>2]|0;k=0-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];c[La+28>>2]=0;rl(f,h,-1,La,Ga,i,W,X);j=c[l>>2]|0;k=1-Z|0;if(((c[j+56>>2]|0)+(c[j+60>>2]|0)|0)<0)mk(j,Ja,k);else c[(c[j+64>>2]|0)+(k<<2)>>2]=c[n>>2];j=c[n>>2]|0;if((c[m>>2]|0)>(j|0)){c[n>>2]=j+1;Fa=c[Ja+104>>2]|0;a[Fa+(j*20|0)>>0]=66;b[Fa+(j*20|0)+2>>1]=0;c[Fa+(j*20|0)+4>>2]=Y;c[Fa+(j*20|0)+8>>2]=0;c[Fa+(j*20|0)+12>>2]=0;c[Fa+(j*20|0)+16>>2]=0;a[Fa+(j*20|0)+1>>0]=0}else Di(Ja,66,Y,0,0)|0;k=c[l>>2]|0;j=2-Z|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,Ja,j);j=0;Fa=1796;break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[n>>2];j=0;Fa=1796;break}}else{z=(U|0)!=0;do if(z){k=c[h>>2]|0;j=c[k>>2]|0;if((j|0)>0){k=k+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=c[U>>2]|0;if((j|0)>0){k=U+4|0;while(1){b[k+16+2>>1]=0;if((j|0)>1){k=k+20|0;j=j+-1|0}else break}}j=h+6|0;if((b[j>>1]|0)<=66)break;b[j>>1]=66}else b[h+6>>1]=0;while(0);k=c[La>>2]|0;j=(k|0)==0;S:do if(l&j)R=1;else{if(l|j){R=0;break}j=c[U>>2]|0;if((j|0)!=(c[k>>2]|0)){R=0;break}if((j|0)<=0){R=1;break}j=0;while(1){if((a[U+4+(j*20|0)+12>>0]|0)!=(a[k+4+(j*20|0)+12>>0]|0)){R=0;break S}if(bk(0,c[U+4+(j*20|0)>>2]|0,c[k+4+(j*20|0)>>2]|0,-1)|0){R=0;break S}j=j+1|0;if((j|0)>=(c[U>>2]|0)){R=1;break}}}while(0);W=c[_>>2]|0;V=W+-1|0;c[_>>2]=V;S=Ea+12|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[Ea>>2]=f;c[Ea+4>>2]=ta;c[Ea+8>>2]=Ma;S=f+44|0;c[Ma+16>>2]=(c[S>>2]|0)+1;if(z)j=c[U>>2]|0;else j=0;A=Ma+12|0;c[A>>2]=j;c[Ma+24>>2]=U;do if($|0){j=c[$>>2]|0;if((j|0)<=0)break;n=Da+4|0;o=Da+8|0;p=Da+12|0;q=Da+16|0;r=Da+24|0;l=$+4|0;m=0;while(1){k=c[l>>2]|0;c[n>>2]=133;c[o>>2]=134;c[p>>2]=67;c[q>>2]=0;c[r>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[$>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);n=c[La>>2]|0;do if(n|0){j=c[n>>2]|0;if((j|0)<=0)break;o=Da+4|0;p=Da+8|0;q=Da+12|0;r=Da+16|0;s=Da+24|0;l=n+4|0;m=0;while(1){k=c[l>>2]|0;c[o>>2]=133;c[p>>2]=134;c[q>>2]=67;c[r>>2]=0;c[s>>2]=Ea;c[Da>>2]=0;if(k){_j(Da,k)|0;j=c[n>>2]|0}m=m+1|0;if((m|0)>=(j|0))break;else l=l+20|0}}while(0);do if(!X)C=D;else{if(!z){c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0;C=D;break}j=Da+8|0;c[j>>2]=0;c[j+4>>2]=0;c[j+8>>2]=0;c[j+12>>2]=0;c[Da>>2]=f;c[Da+4>>2]=135;c[Da+24>>2]=h;j=c[u>>2]|0;if(j|0)_j(Da,j)|0;C=c[sa>>2]|0;c[Da+4>>2]=133;c[Da+8>>2]=134;c[Da+12>>2]=67;c[Da+16>>2]=0;c[Da+24>>2]=Ea;c[Da>>2]=0;_j(Da,X)|0}while(0);I=Ma+32|0;y=Ma+36|0;c[y>>2]=c[I>>2];do if(!(c[t>>2]|0)){if(c[u>>2]|0){x=0;j=0;break}if((c[Ma+44>>2]|0)!=1){x=0;j=0;break}j=c[c[Ma+40>>2]>>2]|0;p=c[j+20>>2]|0;do if(!p){j=0;k=0}else{if((c[p>>2]|0)!=1){j=0;k=0;break}k=c[j+8>>2]|0;o=a[k>>0]|0;j=(d[208+(o&255)>>0]|0)+-109|0;o=o<<24>>24==0|(j|0)!=0;if(o)l=j;else{m=44311;n=k;do{n=n+1|0;m=m+1|0;wa=a[n>>0]|0;l=(d[208+(wa&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(l|0)!=0))}if(l){if(!o){l=44315;do{k=k+1|0;l=l+1|0;wa=a[k>>0]|0;j=(d[208+(wa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(j|0)!=0))}if(!j){l=1;k=2}else{j=0;k=0;break}}else{l=0;k=1}j=gk(Na,p,0)|0;if(!j){j=0;break}a[j+16>>0]=l}while(0);x=k&255}else{x=0;j=0}while(0);T=Ma+44|0;n=c[T>>2]|0;if((n|0)>0){q=Ea+24|0;r=Ma+40|0;s=Da+4|0;t=Da+8|0;u=Da+12|0;v=Da+16|0;w=Da+24|0;p=0;k=b[q>>1]|0;do{k=k|8;b[q>>1]=k;o=c[(c[(c[r>>2]|0)+(p<<4)>>2]|0)+20>>2]|0;do if(o){l=c[o>>2]|0;if((l|0)<=0)break;m=o+4|0;n=0;k=l;while(1){l=c[m>>2]|0;c[s>>2]=133;c[t>>2]=134;c[u>>2]=67;c[v>>2]=0;c[w>>2]=Ea;c[Da>>2]=0;if(l){_j(Da,l)|0;k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0))break;else m=m+20|0}k=b[q>>1]|0;n=c[T>>2]|0}while(0);k=k&-9;b[q>>1]=k;p=p+1|0}while((p|0)<(n|0))}o=c[S>>2]|0;c[Ma+20>>2]=o;T:do if(!(a[xa>>0]|0)){do if(z){y=f+40|0;p=c[y>>2]|0;c[y>>2]=p+1;O=Ma+4|0;c[O>>2]=p;p=c[f>>2]|0;r=c[U>>2]|0;n=(c[I>>2]|0)+1+r|0;o=n*5|0;m=o+20|0;q=p+272|0;U:do if(c[q>>2]|0)if(!(a[p+81>>0]|0))Fa=1431;else{E=0;q=1;z=0}else{do if(!(0<0|(0==0?(e[p+276>>1]|0)>>>0>>0:0))){k=p+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}k=p+296|0;l=c[k>>2]|0;if(!l){k=p+292|0;break}else{c[k>>2]=c[l>>2];Fa=p+284|0;c[Fa>>2]=(c[Fa>>2]|0)+1;Fa=1432;break U}}else k=p+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=1431}while(0);if((Fa|0)==1431){l=_d(p,m,0)|0;Fa=1432}do if((Fa|0)==1432){do if(!l){k=p+81|0;if(a[k>>0]|0){m=0;q=1;break}if(a[p+82>>0]|0){m=0;q=1;break}a[k>>0]=1;if((c[p+180>>2]|0)>0)c[p+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[p+236>>2]|0;if(!k){m=0;q=1;break}c[k+12>>2]=7;m=0;q=1}else{c[l+16>>2]=l+20+(n<<2);b[l+6>>1]=r;b[l+8>>1]=n;a[l+4>>0]=a[p+78>>0]|0;c[l+12>>2]=p;c[l>>2]=1;gw(l+24|0,0,o+-4|0)|0;m=l;q=0}while(0);if(!((r|0)>0&(l|0)!=0)){E=m;z=l;break}p=l+16|0;n=U+4|0;o=0;while(1){k=Yi(f,c[n>>2]|0)|0;if(!k)k=c[(c[f>>2]|0)+8>>2]|0;c[l+20+(o<<2)>>2]=k;a[(c[p>>2]|0)+o>>0]=a[n+12>>0]|0;o=o+1|0;if((o|0)==(r|0)){E=m;z=l;break}else n=n+20|0}}while(0);m=c[O>>2]|0;k=c[A>>2]|0;P=Ja+108|0;l=c[P>>2]|0;Q=Ja+112|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;H=c[Ja+104>>2]|0;a[H+(l*20|0)>>0]=114;b[H+(l*20|0)+2>>1]=0;c[H+(l*20|0)+4>>2]=m;c[H+(l*20|0)+8>>2]=k;c[H+(l*20|0)+12>>2]=0;c[H+(l*20|0)+16>>2]=0;a[H+(l*20|0)+1>>0]=0;H=l}else H=Di(Ja,114,m,k,0)|0;k=c[Ja>>2]|0;V:do if(a[k+81>>0]|0){if(q|(c[k+480>>2]|0)!=0)break;Ea=(c[E>>2]|0)+-1|0;c[E>>2]=Ea;if(Ea|0){q=0;break}k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);q=0;break V}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;q=k+300|0;c[E>>2]=c[q>>2];c[q>>2]=E;q=0;break V}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);q=0;break}else{q=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);q=0;break}}else{if((H|0)<0)k=(c[P>>2]|0)+-1|0;else k=H;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q){q=1;break}c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9;q=0}while(0);A=c[S>>2]|0;M=A+1|0;G=A+2|0;J=A+3|0;K=c[_>>2]|0;F=K+-1|0;N=A+4|0;D=K+-2|0;c[_>>2]=D;A=A+5|0;k=c[U>>2]|0;Ea=k+N|0;B=Ea+1|0;c[S>>2]=Ea+k;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=70;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=0;c[Ea+(k*20|0)+8>>2]=G;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,70,0,G,0)|0;k=(c[U>>2]|0)+N|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=73;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=A;c[Ea+(l*20|0)+12>>2]=k;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,73,0,A,k)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=12;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=N;c[Ea+(k*20|0)+8>>2]=D;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;C=ql(f,ta,C,U,0,R?576:64,0)|0;if(!C)break T;if((c[U>>2]|0)==(a[C+47>>0]|0)){n=0;o=0;m=0}else{if(!(a[Ga>>0]|0))k=43118;else k=(c[za>>2]&1|0)==0?43109:43118;c[Aa>>2]=k;nk(f,0,44319,Aa);u=c[U>>2]|0;p=c[I>>2]|0;if((p|0)>0){n=c[Ma+28>>2]|0;l=u;k=u;m=0;while(1){o=(c[n+(m*24|0)+12>>2]|0)>=(l|0)&1;k=k+o|0;m=m+1|0;if((m|0)>=(p|0)){x=k;break}else l=l+o|0}}else x=u;w=(x|0)==1;do if(w){k=f+19|0;l=a[k>>0]|0;if(!(l<<24>>24)){v=(c[S>>2]|0)+1|0;c[S>>2]=v;break}else{v=l+-1<<24>>24;a[k>>0]=v;v=c[f+148+((v&255)<<2)>>2]|0;break}}else{k=f+32|0;l=c[k>>2]|0;m=f+28|0;n=c[m>>2]|0;if((n|0)<(x|0)){v=c[S>>2]|0;c[S>>2]=v+x;v=v+1|0;break}else{c[k>>2]=l+x;c[m>>2]=n-x;v=l;break}}while(0);t=c[Oa>>2]|0;if((u|0)>0){m=t+108|0;n=t+112|0;o=t+104|0;k=U+4|0;l=0;while(1){p=l+v|0;r=Jj(f,c[k>>2]|0,p)|0;do if((r|0)!=(p|0)){s=c[m>>2]|0;if((c[n>>2]|0)>(s|0)){c[m>>2]=s+1;Ea=c[o>>2]|0;a[Ea+(s*20|0)>>0]=79;b[Ea+(s*20|0)+2>>1]=0;c[Ea+(s*20|0)+4>>2]=r;c[Ea+(s*20|0)+8>>2]=p;c[Ea+(s*20|0)+12>>2]=0;c[Ea+(s*20|0)+16>>2]=0;a[Ea+(s*20|0)+1>>0]=0;break}else{Di(t,79,r,p,0)|0;break}}while(0);l=l+1|0;if((l|0)==(u|0))break;else k=k+20|0}l=c[I>>2]|0}else l=p;if((l|0)>0){o=Ma+28|0;k=u;n=0;do{m=c[o>>2]|0;if((c[m+(n*24|0)+12>>2]|0)>=(k|0)){Vj(Ja,c[m+(n*24|0)>>2]|0,c[m+(n*24|0)+4>>2]|0,c[m+(n*24|0)+8>>2]|0,k+v|0);k=k+1|0;l=c[I>>2]|0}n=n+1|0}while((n|0)<(l|0))}n=f+19|0;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=92;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=x;c[Ea+(k*20|0)+12>>2]=m;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,92,v,x,m)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=-125;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,131,k,m,0)|0;do if(m|0){k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=m}while(0);do if(w){if(!v)break;k=a[n>>0]|0;if((k&255)>=8)break;a[n>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=v}else{k=f+28|0;if((c[k>>2]|0)>=(x|0))break;c[k>>2]=x;c[f+32>>2]=v}while(0);sl(C);o=c[y>>2]|0;c[y>>2]=o+1;c[Ma+8>>2]=o;k=a[n>>0]|0;if(!(k<<24>>24)){m=(c[S>>2]|0)+1|0;c[S>>2]=m}else{m=k+-1<<24>>24;a[n>>0]=m;m=c[f+148+((m&255)<<2)>>2]|0}k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=116;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=o;c[Ea+(k*20|0)+8>>2]=m;c[Ea+(k*20|0)+12>>2]=x;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,116,o,m,x)|0;k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=34;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=k;c[Ea+(l*20|0)+8>>2]=V;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,34,k,V,0)|0;a[Ma+1>>0]=1;n=1}W:do if(R){if(b[ua>>1]&4){Fa=1537;break}do if(!n){if(a[C+48>>0]|0)break;u=c[P>>2]|0;t=0;break W}while(0);c[La>>2]=0;k=c[La+20>>2]|0;l=c[Ja>>2]|0;if(a[l+81>>0]|0){Fa=1537;break}Fa=c[Ja+104>>2]|0;Da=Fa+(k*20|0)+1|0;Ea=Fa+(k*20|0)+16|0;kg(l,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(k*20|0)>>0]=-86;Fa=1537}else Fa=1537;while(0);do if((Fa|0)==1537){l=c[P>>2]|0;if(!n){u=l;t=0;break}k=c[O>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;u=c[Ja+104>>2]|0;a[u+(l*20|0)>>0]=126;b[u+(l*20|0)+2>>1]=0;c[u+(l*20|0)+4>>2]=k;c[u+(l*20|0)+8>>2]=m;c[u+(l*20|0)+12>>2]=o;c[u+(l*20|0)+16>>2]=0;a[u+(l*20|0)+1>>0]=0;u=l;t=1;break}else{Di(Ja,126,k,m,o)|0;u=l;t=1;break}}while(0);l=c[U>>2]|0;if((l|0)>0){s=Ja+104|0;r=0;do{X:do if(t){k=r+B|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[s>>2]|0;a[Fa+(l*20|0)>>0]=90;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=o;c[Fa+(l*20|0)+8>>2]=r;c[Fa+(l*20|0)+12>>2]=k;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,90,o,r,k)|0;break}}else{a[Ma>>0]=1;k=c[U+4+(r*20|0)>>2]|0;p=r+B|0;do if(k){if((a[k>>0]|0)!=-88){n=Jj(f,k,p)|0;break}n=c[Oa>>2]|0;k=c[k+28>>2]|0;l=n+108|0;m=c[l>>2]|0;if((c[n+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[n+104>>2]|0;a[Fa+(m*20|0)>>0]=78;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=k;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break X}else{Di(n,78,k,p,0)|0;break X}}else n=Jj(f,0,p)|0;while(0);if((n|0)==(p|0))break;k=c[Oa>>2]|0;if(!k)break;l=k+108|0;m=c[l>>2]|0;if((c[k+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[k+104>>2]|0;a[Fa+(m*20|0)>>0]=79;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=n;c[Fa+(m*20|0)+8>>2]=p;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(k,79,n,p,0)|0;break}}while(0);r=r+1|0;l=c[U>>2]|0}while((r|0)<(l|0))}if(z|0)c[z>>2]=(c[z>>2]|0)+1;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=87;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=A;c[Fa+(k*20|0)+8>>2]=B;c[Fa+(k*20|0)+12>>2]=l;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else k=Di(Ja,87,A,B,l)|0;l=c[Ja>>2]|0;Y:do if(a[l+81>>0]|0){if(q|(c[l+480>>2]|0)!=0)break;Fa=(c[E>>2]|0)+-1|0;c[E>>2]=Fa;if(Fa|0)break;k=c[E+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,E);break Y}l=E;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Fa=k+300|0;c[E>>2]=c[Fa>>2];c[Fa>>2]=E;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](E);break}else{Fa=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);break}}else{if((k|0)<0)k=(c[P>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(a[m>>0]|0){Ei(Ja,l+(k*20|0)|0,E,-9);break}if(q)break;c[l+(k*20|0)+16>>2]=E;a[m>>0]=-9}while(0);o=c[P>>2]|0;k=o+1|0;if((c[Q>>2]|0)>(o|0)){c[P>>2]=k;Fa=c[Ja+104>>2]|0;a[Fa+(o*20|0)>>0]=16;b[Fa+(o*20|0)+2>>1]=0;c[Fa+(o*20|0)+4>>2]=k;c[Fa+(o*20|0)+8>>2]=0;c[Fa+(o*20|0)+12>>2]=k;c[Fa+(o*20|0)+16>>2]=0;a[Fa+(o*20|0)+1>>0]=0}else Di(Ja,16,k,0,k)|0;l=c[U>>2]|0;k=c[Oa>>2]|0;m=k+108|0;n=c[m>>2]|0;if((c[k+112>>2]|0)>(n|0)){c[m>>2]=n+1;Fa=c[k+104>>2]|0;a[Fa+(n*20|0)>>0]=77;b[Fa+(n*20|0)+2>>1]=0;c[Fa+(n*20|0)+4>>2]=B;c[Fa+(n*20|0)+8>>2]=A;c[Fa+(n*20|0)+12>>2]=l;c[Fa+(n*20|0)+16>>2]=0;a[Fa+(n*20|0)+1>>0]=0}else Di(k,77,B,A,l)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=47;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=G;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,47,G,V,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=N;c[Fa+(k*20|0)+8>>2]=D;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,N,D,0)|0;l=c[P>>2]|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0))k=(c[Ja+104>>2]|0)+(((o|0)<0?l+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=l;tl(f,M,Ma);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=70;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=1;c[Fa+(k*20|0)+8>>2]=M;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,70,1,M,0)|0;do if(t){k=c[O>>2]|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=3;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=k;c[Fa+(l*20|0)+8>>2]=u;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,3,k,u,0)|0;break}}else{sl(C);k=c[Ja>>2]|0;if(a[k+81>>0]|0)break;Fa=c[Ja+104>>2]|0;Da=Fa+(H*20|0)+1|0;Ea=Fa+(H*20|0)+16|0;kg(k,a[Da>>0]|0,c[Ea>>2]|0);a[Da>>0]=0;c[Ea>>2]=0;a[Fa+(H*20|0)>>0]=-86}while(0);k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=12;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=F;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,12,J,F,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=11;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=0;c[Fa+(k*20|0)+8>>2]=V;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,11,0,V,0)|0;v=c[P>>2]|0;if((c[Q>>2]|0)>(v|0)){c[P>>2]=v+1;Fa=c[Ja+104>>2]|0;a[Fa+(v*20|0)>>0]=70;b[Fa+(v*20|0)+2>>1]=0;c[Fa+(v*20|0)+4>>2]=1;c[Fa+(v*20|0)+8>>2]=G;c[Fa+(v*20|0)+12>>2]=0;c[Fa+(v*20|0)+16>>2]=0;a[Fa+(v*20|0)+1>>0]=0}else Di(Ja,70,1,G,0)|0;k=c[P>>2]|0;if((c[Q>>2]|0)>(k|0)){c[P>>2]=k+1;Fa=c[Ja+104>>2]|0;a[Fa+(k*20|0)>>0]=66;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=J;c[Fa+(k*20|0)+8>>2]=0;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;k=Ja+12|0;l=c[k>>2]|0;m=0-K|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,m);else c[(c[l+64>>2]|0)+(m<<2)>>2]=c[P>>2];u=c[P>>2]|0;l=u+2|0;if((c[Q>>2]|0)>(u|0)){c[P>>2]=u+1;Fa=c[Ja+104>>2]|0;a[Fa+(u*20|0)>>0]=47;b[Fa+(u*20|0)+2>>1]=0;c[Fa+(u*20|0)+4>>2]=M;c[Fa+(u*20|0)+8>>2]=l;c[Fa+(u*20|0)+12>>2]=0;c[Fa+(u*20|0)+16>>2]=0;a[Fa+(u*20|0)+1>>0]=0}else Di(Ja,47,M,l,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;q=c[Oa>>2]|0;if((c[T>>2]|0)>0){r=q+108|0;s=q+112|0;t=q+104|0;o=c[Ma+40>>2]|0;p=0;while(1){l=c[(c[o>>2]|0)+20>>2]|0;n=c[o+8>>2]|0;if(!l)m=0;else m=c[l>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;Fa=c[t>>2]|0;a[Fa+(l*20|0)>>0]=-99;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=n;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(q,157,n,m,0)|0;l=c[o+4>>2]|0;m=c[q>>2]|0;Z:do if(a[m+81>>0]|0){if(!(c[l+4>>2]&16))break;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break Z}n=l;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;Fa=m+300|0;c[l>>2]=c[Fa>>2];c[Fa>>2]=l;break Z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Fa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else{Ea=c[t>>2]|0;Fa=(c[r>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=l}while(0);p=p+1|0;if((p|0)>=(c[T>>2]|0))break;else o=o+16|0}}l=u+1|0;Tj(f,X,l,16);rl(f,h,-1,La,Ga,i,l,v);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=J;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,66,J,0,0)|0;m=c[k>>2]|0;l=1-K|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Ja,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[P>>2];ul(f,Ma);l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=0;c[Fa+(l*20|0)+8>>2]=M;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0}else Di(Ja,70,0,M,0)|0;l=c[P>>2]|0;if((c[Q>>2]|0)>(l|0)){c[P>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=66;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=N;c[Fa+(l*20|0)+8>>2]=0;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,66,N,0,0)|0;break}}else{z=Ma+40|0;m=c[z>>2]|0;do if(!(c[sa>>2]|0)){l=c[h>>2]|0;if((c[l>>2]|0)!=1){Fa=1752;break}k=c[va>>2]|0;if((c[k>>2]|0)!=1){Fa=1752;break}if(c[k+28>>2]|0){Fa=1752;break}w=c[k+24>>2]|0;k=c[l+4>>2]|0;if(c[w+56>>2]|0){Fa=1752;break}if((n|0)==0|(a[k>>0]|0)!=-93){Fa=1752;break}if(!(c[(c[m+4>>2]|0)+4>>2]&256)){Fa=1752;break}if((w|0)==0?1:(c[k+4>>2]&2|0)!=0){Fa=1752;break}l=c[w+72>>2]|0;if(!l)u=-1e6;else{m=c[(c[f>>2]|0)+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){u=k;break}else k=k+1|0}s=f+40|0;v=c[s>>2]|0;c[s>>2]=v+1;s=w+28|0;t=c[s>>2]|0;n=c[Ba>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<>2]=l|m;if((u|0)!=1)break;r=c[n>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,Da,0,542)|0;if(l|0){cd(n,32157,ya);c[n+12>>2]=l;break}Ea=c[Da>>2]|0;c[(c[k>>2]|0)+20>>2]=Ea;k=c[r+92>>2]|0;n=c[Ea+4>>2]|0;c[n+4>>2]=c[Ea>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ea=(c[14820]|0)+1|0;c[14820]=Ea;c[14821]=(Ea|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688;break}else{k=Wa[c[29352>>2]&127](l)|0;Fa=1688}while(0);do if((Fa|0)==1688){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ea=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Ea=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((Ea|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break _}while(0)}while(0);Hj(f,u,c[s>>2]|0,0,c[w>>2]|0);s=w+36|0;l=c[w+8>>2]|0;$:do if(!(c[s>>2]&32)){k=0;Fa=1706}else{if(!l){l=t;n=0;r=0;q=1;break}k=l;while(1){Fa=k+55|0;if(((d[Fa>>0]|d[Fa+1>>0]<<8)&3)==2){Fa=1706;break $}k=c[k+20>>2]|0;if(!k){k=0;Fa=1706;break}}}while(0);do if((Fa|0)==1706){if(l){n=w+46|0;do{Ea=l+55|0;do if(!((d[Ea>>0]|d[Ea+1>>0]<<8)&4)){m=b[l+48>>1]|0;if(m<<16>>16>=(b[n>>1]|0))break;if(c[l+36>>2]|0)break;if(k|0?m<<16>>16>=(b[k+48>>1]|0):0)break;k=l}while(0);l=c[l+20>>2]|0}while((l|0)!=0)}if(!k){l=t;n=0;r=0;q=1;break}l=c[k+44>>2]|0;n=Ij(f,k)|0;r=k;q=0}while(0);o=Ja+108|0;k=c[o>>2]|0;p=Ja+112|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=108;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=l;c[Ea+(k*20|0)+12>>2]=u;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else k=Di(Ja,108,v,l,u)|0;if(!(a[(c[Ja>>2]|0)+81>>0]|0)){Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)+1>>0]=-3;c[Ea+(k*20|0)+16>>2]=1}aa:do if(n|0){k=c[Ja>>2]|0;if(!(a[k+81>>0]|0)){k=(c[o>>2]|0)+-1|0;l=c[Ja+104>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=n;a[m>>0]=-9;break}else{Ei(Ja,l+(k*20|0)|0,n,-9);break}}if(c[k+480>>2]|0)break;Ea=(c[n>>2]|0)+-1|0;c[n>>2]=Ea;if(Ea|0)break;k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);break aa}l=n;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;Ea=k+300|0;c[n>>2]=c[Ea>>2];c[Ea>>2]=n;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{Ea=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-Ea;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);k=c[(c[z>>2]|0)+8>>2]|0;l=c[o>>2]|0;if((c[p>>2]|0)>(l|0)){c[o>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=93;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=v;c[Ea+(l*20|0)+8>>2]=k;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0}else Di(Ja,93,v,k,0)|0;k=c[o>>2]|0;if((c[p>>2]|0)>(k|0)){c[o>>2]=k+1;Ea=c[Ja+104>>2]|0;a[Ea+(k*20|0)>>0]=117;b[Ea+(k*20|0)+2>>1]=0;c[Ea+(k*20|0)+4>>2]=v;c[Ea+(k*20|0)+8>>2]=0;c[Ea+(k*20|0)+12>>2]=0;c[Ea+(k*20|0)+16>>2]=0;a[Ea+(k*20|0)+1>>0]=0}else Di(Ja,117,v,0,0)|0;if((a[f+199>>0]|0)!=2)break;do if(q){k=c[w>>2]|0;m=59952;l=59952}else{if(c[s>>2]&32){Ea=r+55|0;k=c[w>>2]|0;if(((d[Ea>>0]|d[Ea+1>>0]<<8)&3)==2){m=59952;l=59952;break}}else k=c[w>>2]|0;m=44411;l=c[r>>2]|0}while(0);c[Ca>>2]=k;c[Ca+4>>2]=m;c[Ca+8>>2]=l;nk(f,0,44393,Ca)}else Fa=1752;while(0);do if((Fa|0)==1752){do if(c[y>>2]|0){ba:do if((n|0)>0){k=0;do{if(c[(c[m+(k<<4)+4>>2]|0)+4>>2]&32|0)break ba;k=k+1|0}while((k|0)<(n|0))}else k=0;while(0);if((k|0)!=(n|0)){m=0;break}m=o+1|0;c[S>>2]=m;k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Ea=c[Ja+104>>2]|0;a[Ea+(l*20|0)>>0]=70;b[Ea+(l*20|0)+2>>1]=0;c[Ea+(l*20|0)+4>>2]=0;c[Ea+(l*20|0)+8>>2]=m;c[Ea+(l*20|0)+12>>2]=0;c[Ea+(l*20|0)+16>>2]=0;a[Ea+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,0,m,0)|0;break}}else m=0;while(0);ul(f,Ma);n=ql(f,ta,C,j,0,x,0)|0;if(!n)break T;tl(f,m,Ma);do if(m|0){k=Ja+108|0;l=c[k>>2]|0;if((c[Ja+112>>2]|0)>(l|0)){c[k>>2]=l+1;Fa=c[Ja+104>>2]|0;a[Fa+(l*20|0)>>0]=70;b[Fa+(l*20|0)+2>>1]=0;c[Fa+(l*20|0)+4>>2]=1;c[Fa+(l*20|0)+8>>2]=m;c[Fa+(l*20|0)+12>>2]=0;c[Fa+(l*20|0)+16>>2]=0;a[Fa+(l*20|0)+1>>0]=0;break}else{Di(Ja,70,1,m,0)|0;break}}while(0);do if((a[n+47>>0]|0)>0){k=c[n+36>>2]|0;l=Ja+108|0;m=c[l>>2]|0;if((c[Ja+112>>2]|0)>(m|0)){c[l>>2]=m+1;Fa=c[Ja+104>>2]|0;a[Fa+(m*20|0)>>0]=11;b[Fa+(m*20|0)+2>>1]=0;c[Fa+(m*20|0)+4>>2]=0;c[Fa+(m*20|0)+8>>2]=k;c[Fa+(m*20|0)+12>>2]=0;c[Fa+(m*20|0)+16>>2]=0;a[Fa+(m*20|0)+1>>0]=0;break}else{Di(Ja,11,0,k,0)|0;break}}while(0);sl(n);p=c[Oa>>2]|0;if((c[T>>2]|0)<=0)break;q=p+108|0;r=p+112|0;s=p+104|0;n=c[z>>2]|0;o=0;while(1){k=c[(c[n>>2]|0)+20>>2]|0;m=c[n+8>>2]|0;if(!k)l=0;else l=c[k>>2]|0;k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Fa=c[s>>2]|0;a[Fa+(k*20|0)>>0]=-99;b[Fa+(k*20|0)+2>>1]=0;c[Fa+(k*20|0)+4>>2]=m;c[Fa+(k*20|0)+8>>2]=l;c[Fa+(k*20|0)+12>>2]=0;c[Fa+(k*20|0)+16>>2]=0;a[Fa+(k*20|0)+1>>0]=0}else Di(p,157,m,l,0)|0;k=c[n+4>>2]|0;l=c[p>>2]|0;ca:do if(a[l+81>>0]|0){if(!(c[k+4>>2]&16))break;do if(l|0){if(c[l+480>>2]|0){Xd(l,k);break ca}m=k;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;Fa=l+300|0;c[k>>2]=c[Fa>>2];c[Fa>>2]=k;break ca}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Fa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else{Ea=c[s>>2]|0;Fa=(c[q>>2]|0)+-1|0;a[Ea+(Fa*20|0)+1>>0]=-8;c[Ea+(Fa*20|0)+16>>2]=k}while(0);o=o+1|0;if((o|0)>=(c[T>>2]|0))break;else n=n+16|0}}while(0);c[La>>2]=0;Tj(f,X,V,16);rl(f,h,-1,0,0,i,V,V);k=Ja+12|0}while(0);l=c[k>>2]|0;k=0-W|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];Fa=1796;break E}while(0);k=1}while(0);if((Fa|0)==1796){if((a[Ga+1>>0]|0)==3){c[Ha>>2]=43109;nk(f,0,44319,Ha)}do if(c[La>>2]|0){r=La+4|0;c[Ia>>2]=(c[r>>2]|0)>0?43127:43150;nk(f,0,44319,Ia);p=c[$>>2]|0;I=c[Oa>>2]|0;H=c[La+24>>2]|0;G=c[_>>2]|0;t=G+-1|0;c[_>>2]=t;q=c[La>>2]|0;E=a[i>>0]|0;x=i+4|0;C=c[x>>2]|0;y=c[h>>2]|0;s=La+16|0;k=c[s>>2]|0;do if(k|0){l=c[La+12>>2]|0;o=I+108|0;m=c[o>>2]|0;n=I+112|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;Ia=c[I+104>>2]|0;a[Ia+(m*20|0)>>0]=12;b[Ia+(m*20|0)+2>>1]=0;c[Ia+(m*20|0)+4>>2]=l;c[Ia+(m*20|0)+8>>2]=k;c[Ia+(m*20|0)+12>>2]=0;c[Ia+(m*20|0)+16>>2]=0;a[Ia+(m*20|0)+1>>0]=0}else Di(I,12,l,k,0)|0;k=c[o>>2]|0;if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=11;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=0;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else Di(I,11,0,H,0)|0;k=c[I+12>>2]|0;l=~c[s>>2];if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,I,l);break}else{c[(c[k+64>>2]|0)+(l<<2)>>2]=c[o>>2];break}}while(0);F=c[La+8>>2]|0;da:do switch(E<<24>>24){case 9:case 10:case 13:{z=p;A=c[i+8>>2]|0;B=0;break}default:{l=f+19|0;k=a[l>>0]|0;if(!(k<<24>>24)){k=f+44|0;o=(c[k>>2]|0)+1|0;c[k>>2]=o;k=0}else{k=k+-1<<24>>24;a[l>>0]=k;o=c[f+148+((k&255)<<2)>>2]|0}if((E|2)<<24>>24==14)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=0;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=0;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}if((p|0)==1)if(!(k<<24>>24)){z=f+44|0;A=(c[z>>2]|0)+1|0;c[z>>2]=A;z=1;B=o;break da}else{A=k+-1<<24>>24;a[l>>0]=A;z=1;A=c[f+148+((A&255)<<2)>>2]|0;B=o;break da}else{k=f+32|0;n=c[k>>2]|0;l=f+28|0;m=c[l>>2]|0;if((m|0)<(p|0)){z=f+44|0;A=c[z>>2]|0;c[z>>2]=A+p;z=p;A=A+1|0;B=o;break da}else{c[k>>2]=n+p;c[l>>2]=m-p;z=p;A=n;B=o;break da}}}}while(0);q=(c[q>>2]|0)-(c[r>>2]|0)|0;D=La+32|0;do if(!(a[D>>0]&1)){n=I+108|0;k=c[n>>2]|0;o=I+112|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=35;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,35,F,H,0)|0;l=c[h+16>>2]|0;if((l|0)<=0){l=1;v=F;break}m=c[n>>2]|0;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;v=c[I+104>>2]|0;a[v+(m*20|0)>>0]=47;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=l;c[v+(m*20|0)+8>>2]=t;c[v+(m*20|0)+12>>2]=1;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;l=1;v=F;break}else{Di(I,47,l,t,1)|0;l=1;v=F;break}}else{o=f+44|0;p=(c[o>>2]|0)+1|0;c[o>>2]=p;o=f+40|0;v=c[o>>2]|0;c[o>>2]=v+1;o=I+108|0;do if(c[s>>2]|0){k=c[o>>2]|0;l=I+112|0;if((c[l>>2]|0)>(k|0)){c[o>>2]=k+1;T=c[I+104>>2]|0;a[T+(k*20|0)>>0]=17;T=T+(k*20|0)+1|0;U=T+19|0;do{a[T>>0]=0;T=T+1|0}while((T|0)<(U|0));m=k;n=l;break}else{m=Di(I,17,0,0,0)|0;n=l;break}}else{m=0;n=I+112|0}while(0);k=z+1+q|0;l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;Ia=c[I+104>>2]|0;a[Ia+(l*20|0)>>0]=116;b[Ia+(l*20|0)+2>>1]=0;c[Ia+(l*20|0)+4>>2]=v;c[Ia+(l*20|0)+8>>2]=p;c[Ia+(l*20|0)+12>>2]=k;c[Ia+(l*20|0)+16>>2]=0;a[Ia+(l*20|0)+1>>0]=0}else Di(I,116,v,p,k)|0;k=c[o>>2]|0;if(m|0){if(!(a[(c[I>>2]|0)+81>>0]|0))l=(c[I+104>>2]|0)+(((m|0)<0?k+-1|0:m)*20|0)|0;else l=59308;c[l+8>>2]=k}if((c[n>>2]|0)>(k|0)){c[o>>2]=k+1;Ia=c[I+104>>2]|0;a[Ia+(k*20|0)>>0]=34;b[Ia+(k*20|0)+2>>1]=0;c[Ia+(k*20|0)+4>>2]=F;c[Ia+(k*20|0)+8>>2]=H;c[Ia+(k*20|0)+12>>2]=0;c[Ia+(k*20|0)+16>>2]=0;a[Ia+(k*20|0)+1>>0]=0}else k=Di(I,34,F,H,0)|0;l=c[h+16>>2]|0;do if((l|0)>0){m=c[o>>2]|0;if((c[n>>2]|0)>(m|0)){c[o>>2]=m+1;h=c[I+104>>2]|0;a[h+(m*20|0)>>0]=47;b[h+(m*20|0)+2>>1]=0;c[h+(m*20|0)+4>>2]=l;c[h+(m*20|0)+8>>2]=t;c[h+(m*20|0)+12>>2]=1;c[h+(m*20|0)+16>>2]=0;a[h+(m*20|0)+1>>0]=0;break}else{Di(I,47,l,t,1)|0;break}}while(0);l=c[o>>2]|0;if((c[n>>2]|0)>(l|0)){c[o>>2]=l+1;h=c[I+104>>2]|0;a[h+(l*20|0)>>0]=126;b[h+(l*20|0)+2>>1]=0;c[h+(l*20|0)+4>>2]=F;c[h+(l*20|0)+8>>2]=p;c[h+(l*20|0)+12>>2]=v;c[h+(l*20|0)+16>>2]=0;a[h+(l*20|0)+1>>0]=0;l=0;break}else{Di(I,126,F,p,v)|0;l=0;break}}while(0);w=k+1|0;u=l+q|0;if((z|0)>0){k=0;l=u+-1|0;do{l=l+((b[y+4+(k*20|0)+16>>1]|0)==0&1)|0;k=k+1|0}while((k|0)!=(z|0));r=I+108|0;s=I+112|0;t=I+104|0;q=z;while(1){m=q;q=q+-1|0;k=b[y+4+(q*20|0)+16>>1]|0;n=k<<16>>16==0;k=n?l:(k&65535)+-1|0;o=q+A|0;p=c[r>>2]|0;if((c[s>>2]|0)>(p|0)){c[r>>2]=p+1;h=c[t>>2]|0;a[h+(p*20|0)>>0]=90;b[h+(p*20|0)+2>>1]=0;c[h+(p*20|0)+4>>2]=v;c[h+(p*20|0)+8>>2]=k;c[h+(p*20|0)+12>>2]=o;c[h+(p*20|0)+16>>2]=0;a[h+(p*20|0)+1>>0]=0}else Di(I,90,v,k,o)|0;if((m|0)<=1)break;else l=l+(n<<31>>31)|0}}ea:do switch(E<<24>>24){case 12:case 14:{l=I+108|0;k=c[l>>2]|0;m=I+112|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=90;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=v;c[i+(k*20|0)+8>>2]=u;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,90,v,u,A)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=121;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,121,C,B,0)|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=122;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=A;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else Di(I,122,C,A,B)|0;k=c[l>>2]|0;if((k|0)<=0)break ea;b[(c[I+104>>2]|0)+((k+-1|0)*20|0)+2>>1]=8;break}case 11:{o=c[i+16>>2]|0;p=I+108|0;k=c[p>>2]|0;q=I+112|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=92;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=A;c[i+(k*20|0)+8>>2]=z;c[i+(k*20|0)+12>>2]=B;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,92,A,z,B)|0;l=c[I>>2]|0;fa:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;l=c[I+104>>2]|0;m=l+(k*20|0)|0;do if((z|0)<=-1){n=l+(k*20|0)+1|0;if(a[n>>0]|0)break;if((z|0)==-3){c[l+(k*20|0)+16>>2]=o;a[n>>0]=-3;break fa}if(!o)break fa;c[l+(k*20|0)+16>>2]=o;a[n>>0]=z;if((z|0)!=-12)break fa;i=o+12|0;c[i>>2]=(c[i>>2]|0)+1;break fa}while(0);Ei(I,m,o,z)}else{if((z|0)==-12)break;kg(l,z,o)}while(0);k=c[p>>2]|0;if((c[q>>2]|0)>(k|0)){c[p>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=-124;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=C;c[i+(k*20|0)+8>>2]=B;c[i+(k*20|0)+12>>2]=A;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0}else k=Di(I,132,C,B,A)|0;if(a[(c[I>>2]|0)+81>>0]|0)break ea;i=c[I+104>>2]|0;a[i+(k*20|0)+1>>0]=-3;c[i+(k*20|0)+16>>2]=z;break}case 10:break;case 9:{k=c[i+8>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=81;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=z;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,81,k,z,0)|0;break ea}}default:{k=c[x>>2]|0;l=I+108|0;m=c[l>>2]|0;if((c[I+112>>2]|0)>(m|0)){c[l>>2]=m+1;i=c[I+104>>2]|0;a[i+(m*20|0)>>0]=14;b[i+(m*20|0)+2>>1]=0;c[i+(m*20|0)+4>>2]=k;c[i+(m*20|0)+8>>2]=0;c[i+(m*20|0)+12>>2]=0;c[i+(m*20|0)+16>>2]=0;a[i+(m*20|0)+1>>0]=0;break ea}else{Di(I,14,k,0,0)|0;break ea}}}while(0);do if(B|0){if(E<<24>>24!=11){l=f+19|0;k=a[l>>0]|0;if(A){if((k&255)>=8)break;i=k+1<<24>>24;a[l>>0]=i;c[f+148+((k&255)<<2)>>2]=A;k=i}if((k&255)>=8)break;a[l>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=B;break}do if((z|0)==1){if(!A)break;k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=A}else{k=f+28|0;if((c[k>>2]|0)>=(z|0))break;c[k>>2]=z;c[f+32>>2]=A}while(0);k=f+19|0;l=a[k>>0]|0;if((l&255)>=8)break;a[k>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=B}while(0);o=I+12|0;l=c[o>>2]|0;k=0-G|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);n=I+108|0}else{n=I+108|0;c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2]}k=c[n>>2]|0;m=I+112|0;l=(c[m>>2]|0)>(k|0);do if(!(a[D>>0]&1))if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=5;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,5,F,w,0)|0;break}else if(l){c[n>>2]=k+1;i=c[I+104>>2]|0;a[i+(k*20|0)>>0]=3;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=F;c[i+(k*20|0)+8>>2]=w;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;break}else{Di(I,3,F,w,0)|0;break}while(0);k=c[La+12>>2]|0;do if(k|0){l=c[n>>2]|0;if((c[m>>2]|0)>(l|0)){c[n>>2]=l+1;i=c[I+104>>2]|0;a[i+(l*20|0)>>0]=66;b[i+(l*20|0)+2>>1]=0;c[i+(l*20|0)+4>>2]=k;c[i+(l*20|0)+8>>2]=0;c[i+(l*20|0)+12>>2]=0;c[i+(l*20|0)+16>>2]=0;a[i+(l*20|0)+1>>0]=0;break}else{Di(I,66,k,0,0)|0;break}}while(0);l=c[o>>2]|0;k=~H;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0){mk(l,I,k);break}else{c[(c[l+64>>2]|0)+(k<<2)>>2]=c[n>>2];break}}while(0);l=c[Ja+12>>2]|0;k=0-aa|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,Ja,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[Ja+108>>2];k=(c[Ka>>2]|0)>0&1}if(!j){m=k;break c}ri(Na,j);m=k;break c}else w=j;while(0);y=c[f>>2]|0;c[Da>>2]=c[i>>2];c[Da+4>>2]=c[i+4>>2];c[Da+8>>2]=c[i+8>>2];c[Da+12>>2]=c[i+12>>2];c[Da+16>>2]=c[i+16>>2];c[Da+20>>2]=c[i+20>>2];j=(c[w+48>>2]|0)==0;ga:do if(j?(ka=w+60|0,(c[ka>>2]|0)==0):0){j=c[Oa>>2]|0;ha:do if(!j){if((c[f+116>>2]|0)==0?(b[y+76>>1]&8)==0:0)a[f+23>>0]=1;ia:do if(c[y+272>>2]|0)if(!(a[y+81>>0]|0))Fa=393;else{x=0;break ha}else{do if((e[y+276>>1]|0)>=224){j=y+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}j=y+296|0;k=c[j>>2]|0;if(!k){j=y+292|0;break}else{c[j>>2]=c[k>>2];Na=y+284|0;c[Na>>2]=(c[Na>>2]|0)+1;break ia}}else j=y+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;Fa=393}while(0);if((Fa|0)==393)k=_d(y,224,0)|0;if(!k)x=0;else{T=k+104|0;U=T+120|0;do{c[T>>2]=0;T=T+4|0}while((T|0)<(U|0));c[k>>2]=y;j=y+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[Oa>>2]=k;Di(k,61,0,1,0)|0;x=k}}else x=j;while(0);if((a[Da>>0]|0)==12){j=c[Da+4>>2]|0;k=c[c[h>>2]>>2]|0;l=x+108|0;m=c[l>>2]|0;if((c[x+112>>2]|0)>(m|0)){c[l>>2]=m+1;Na=c[x+104>>2]|0;a[Na+(m*20|0)>>0]=113;b[Na+(m*20|0)+2>>1]=0;c[Na+(m*20|0)+4>>2]=j;c[Na+(m*20|0)+8>>2]=k;c[Na+(m*20|0)+12>>2]=0;c[Na+(m*20|0)+16>>2]=0;a[Na+(m*20|0)+1>>0]=0}else Di(x,113,j,k,0)|0;a[Da>>0]=14}j=c[za>>2]|0;if(j&1024|0){n=(c[h+60>>2]|0)==0;l=n&1;j=h;k=1;while(1){m=c[j+52>>2]|0;if(!m)break;else{j=m;k=k+l|0}}c[ga>>2]=k;c[ga+4>>2]=(k|0)==1?59952:43321;nk(f,0,43298,ga);k=k&65535;if(!n){rl(f,j,-1,0,0,Da,1,1);k=0;j=0;Fa=640;break}while(1){rl(f,j,-1,0,0,Da,1,1);b[j+6>>1]=k;j=c[j+56>>2]|0;if(!j){k=0;j=0;Fa=640;break ga}}}do if(!(j&8192)){if(c[S>>2]|0){m=Bl(f,h,i)|0;break ga}if(!(c[w+52>>2]|0)){nk(f,1,43243,ea);nk(f,1,43258,fa)}p=h+4|0;switch(a[p>>0]|0){case -128:{o=h+12|0;k=w+12|0;c[k>>2]=c[o>>2];m=h+16|0;l=w+16|0;c[l>>2]=c[m>>2];Na=h+60|0;c[ka>>2]=c[Na>>2];j=kj(f,w,Da)|0;c[Na>>2]=0;if(j|0){k=0;Fa=640;break ga}c[ca>>2]=0;k=c[k>>2]|0;c[o>>2]=k;c[m>>2]=c[l>>2];do if(k){p=x+108|0;j=c[p>>2]|0;q=x+112|0;if((c[q>>2]|0)>(j|0)){c[p>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=20;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=k;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,20,k,0,0)|0;n=c[m>>2]|0;if(!n){u=j;break}k=c[o>>2]|0;l=n+1|0;m=c[p>>2]|0;if((c[q>>2]|0)>(m|0)){c[p>>2]=m+1;u=c[x+104>>2]|0;a[u+(m*20|0)>>0]=-104;b[u+(m*20|0)+2>>1]=0;c[u+(m*20|0)+4>>2]=k;c[u+(m*20|0)+8>>2]=l;c[u+(m*20|0)+12>>2]=n;c[u+(m*20|0)+16>>2]=0;a[u+(m*20|0)+1>>0]=0;u=j;break}else{Di(x,152,k,l,n)|0;u=j;break}}else u=0;while(0);nk(f,1,41509,ia);j=kj(f,h,Da)|0;n=c[ca>>2]|0;c[ca>>2]=w;t=h+6|0;k=b[t>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[t>>1]=k;k=c[ka>>2]|0;do if(k|0){Na=(uk(c[k+12>>2]|0,Ea)|0)!=0;k=c[Ea>>2]|0;if(!(Na&(k|0)>0))break;r=b[t>>1]|0;l=((k|0)<0)<<31>>31;s=k>>>0<8;do if(s){if(k>>>0<2){m=0;break}m=40;p=k;o=l;do{m=(m&65535)+65526|0;p=cw(p|0,o|0,1)|0;o=L()|0}while(o>>>0<0|(o|0)==0&p>>>0<8);o=m&65535;m=p;Fa=450}else{if(k>>>0>255){m=40;q=k;o=l;do{m=(m&65535)+40|0;Na=q;q=bw(q|0,o|0,4)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);p=m&65535;m=q}else{p=40;o=l;m=k}if(!(o>>>0>0|(o|0)==0&m>>>0>15)){o=p;Fa=450;break}do{p=(p&65535)+10&65535;Na=m;m=bw(m|0,o|0,1)|0;Ma=o;o=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);o=p;Fa=450}while(0);if((Fa|0)==450)m=(o&65535)+65526+(e[3648+((m&7)<<1)>>1]|0)&65535;if(r<<16>>16<=m<<16>>16)break;do if(s){if(k>>>0<2){k=0;break}m=40;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;Fa=465}else{if(k>>>0>255){m=40;do{m=(m&65535)+40|0;Na=k;k=bw(k|0,l|0,4)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>4095);m=m&65535}else m=40;if(!(l>>>0>0|(l|0)==0&k>>>0>15)){Fa=465;break}do{m=(m&65535)+10&65535;Na=k;k=bw(k|0,l|0,1)|0;Ma=l;l=L()|0}while(Ma>>>0>0|(Ma|0)==0&Na>>>0>31);Fa=465}while(0);if((Fa|0)==465)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[t>>1]=k}while(0);if(u|0){l=c[x+108>>2]|0;if(!(a[(c[x>>2]|0)+81>>0]|0))k=(c[x+104>>2]|0)+(((u|0)<0?l+-1|0:u)*20|0)|0;else k=59308;c[k+8>>2]=l}break}case 127:case -127:{if((a[Da>>0]|0)==1)s=c[Da+4>>2]|0;else{k=f+40|0;l=c[k>>2]|0;c[k>>2]=l+1;k=x+108|0;j=c[k>>2]|0;if((c[x+112>>2]|0)>(j|0)){c[k>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=l;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,l,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}s=j+8|0;c[s>>2]=c[s>>2]|32;s=l}a[Ea>>0]=1;c[Ea+4>>2]=s;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}Na=a[p>>0]|0;c[ca>>2]=0;q=h+60|0;r=c[q>>2]|0;c[q>>2]=0;a[Ea>>0]=Na<<24>>24==-127?2:1;switch(Na<<24>>24){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ha>>2]=j;nk(f,1,43277,ha);j=kj(f,h,Ea)|0;k=c[S>>2]|0;if(k|0)ri(y,k);n=c[ca>>2]|0;c[ca>>2]=w;c[S>>2]=0;if((a[p>>0]|0)==127){p=h+6|0;k=b[p>>1]|0;l=b[w+6>>1]|0;m=k<<16>>16;o=l<<16>>16;do if(k<<16>>16>16){if((m+49|0)<(o|0)){k=l;break}if((m+31|0)<(o|0)){k=o+1&65535;break}else{k=(d[18112+(o-m)>>0]|0)+o&65535;break}}else{if((o+49|0)<(m|0))break;if((o+31|0)<(m|0)){k=m+1&65535;break}else{k=(d[18112+(m-o)>>0]|0)+m&65535;break}}while(0);b[p>>1]=k}k=c[q>>2]|0;if(k|0)ni(y,k);c[q>>2]=r;c[h+12>>2]=0;c[h+16>>2]=0;do if((a[Da>>0]|0)!=1){q=f+56|0;p=c[q>>2]|0;l=p+-1|0;m=p+-2|0;c[q>>2]=m;pl(f,h,l);q=x+108|0;k=c[q>>2]|0;r=x+112|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=l;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,s,l,0)|0;o=c[q>>2]|0;rl(f,h,s,0,0,Da,m,l);m=x+12|0;k=c[m>>2]|0;l=1-p|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,s,o,0)|0;l=c[m>>2]|0;k=0-p|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[q>>2];k=c[q>>2]|0;if((c[r>>2]|0)>(k|0)){c[q>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0;break}else{Di(x,117,s,0,0)|0;break}}while(0);break}default:{u=f+40|0;t=c[u>>2]|0;s=t+1|0;c[u>>2]=t+2;u=x+108|0;j=c[u>>2]|0;v=x+112|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=t;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,t,0,0)|0;c[h+24>>2]=j;j=h;while(1){k=c[j+56>>2]|0;if(!k)break;else j=k}k=j+8|0;c[k>>2]=c[k>>2]|32;a[Ea>>0]=1;k=Ea+4|0;c[k>>2]=t;c[Ea+16>>2]=0;c[Ea+8>>2]=0;c[Ea+12>>2]=0;j=kj(f,w,Ea)|0;if(j|0){k=0;Fa=640;break ga}j=c[u>>2]|0;if((c[v>>2]|0)>(j|0)){c[u>>2]=j+1;Na=c[x+104>>2]|0;a[Na+(j*20|0)>>0]=113;b[Na+(j*20|0)+2>>1]=0;c[Na+(j*20|0)+4>>2]=s;c[Na+(j*20|0)+8>>2]=0;c[Na+(j*20|0)+12>>2]=0;c[Na+(j*20|0)+16>>2]=0;a[Na+(j*20|0)+1>>0]=0}else j=Di(x,113,s,0,0)|0;c[h+28>>2]=j;c[ca>>2]=0;m=h+60|0;o=c[m>>2]|0;c[m>>2]=0;c[k>>2]=s;switch(a[p>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ja>>2]=j;nk(f,1,43277,ja);j=kj(f,h,Ea)|0;n=c[ca>>2]|0;c[ca>>2]=w;l=h+6|0;k=b[w+6>>1]|0;if((b[l>>1]|0)>k<<16>>16)b[l>>1]=k;k=c[m>>2]|0;if(k|0)ni(y,k);c[m>>2]=o;k=f+56|0;r=c[k>>2]|0;o=r+-1|0;p=r+-2|0;c[k>>2]=p;pl(f,h,o);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=36;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=o;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,36,t,o,0)|0;m=f+19|0;k=a[m>>0]|0;if(!(k<<24>>24)){Na=f+44|0;l=(c[Na>>2]|0)+1|0;c[Na>>2]=l}else{l=k+-1<<24>>24;a[m>>0]=l;l=c[f+148+((l&255)<<2)>>2]|0}k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;q=c[x+104>>2]|0;a[q+(k*20|0)>>0]=127;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=t;c[q+(k*20|0)+8>>2]=l;c[q+(k*20|0)+12>>2]=0;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k}else q=Di(x,127,t,l,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=28;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=p;c[Na+(k*20|0)+12>>2]=l;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else k=Di(x,28,s,p,l)|0;if(!(a[(c[x>>2]|0)+81>>0]|0)){Na=c[x+104>>2]|0;a[Na+(k*20|0)+1>>0]=-3;c[Na+(k*20|0)+16>>2]=0}do if(l|0){k=a[m>>0]|0;if((k&255)>=8)break;a[m>>0]=k+1<<24>>24;c[f+148+((k&255)<<2)>>2]=l}while(0);rl(f,h,t,0,0,Da,p,o);m=x+12|0;k=c[m>>2]|0;l=1-r|0;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,x,l);else c[(c[k+64>>2]|0)+(l<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=5;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=q;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,5,t,q,0)|0;l=c[m>>2]|0;k=0-r|0;if(((c[l+56>>2]|0)+(c[l+60>>2]|0)|0)<0)mk(l,x,k);else c[(c[l+64>>2]|0)+(k<<2)>>2]=c[u>>2];k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=s;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,s,0,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;Na=c[x+104>>2]|0;a[Na+(k*20|0)>>0]=117;b[Na+(k*20|0)+2>>1]=0;c[Na+(k*20|0)+4>>2]=t;c[Na+(k*20|0)+8>>2]=0;c[Na+(k*20|0)+12>>2]=0;c[Na+(k*20|0)+16>>2]=0;a[Na+(k*20|0)+1>>0]=0}else Di(x,117,t,0,0)|0}}if(c[h+56>>2]|0)break;m=f+212|0;k=c[m>>2]|0;if(!k)k=0;else{l=c[Oa>>2]|0;if((k|0)<0)k=(c[l+108>>2]|0)+-1|0;if(!(a[(c[l>>2]|0)+81>>0]|0))k=(c[l+104>>2]|0)+(k*20|0)|0;else k=59308;k=c[k+8>>2]|0}c[m>>2]=k}else{Al(f,h,Da);j=0;n=0}while(0);if(c[za>>2]&32){w=c[c[h>>2]>>2]|0;o=w+1|0;p=o*5|0;m=p+20|0;q=y+272|0;ja:do if(c[q>>2]|0)if(!(a[y+81>>0]|0))Fa=589;else{k=n;j=7;Fa=640;break ga}else{do if(!(0<0|(0==0?(e[y+276>>1]|0)>>>0>>0:0))){k=y+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}k=y+296|0;l=c[k>>2]|0;if(!l){k=y+292|0;break}else{c[k>>2]=c[l>>2];v=y+284|0;c[v>>2]=(c[v>>2]|0)+1;v=l;break ja}}else k=y+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;Fa=589}while(0);if((Fa|0)==589)v=_d(y,m,0)|0;if(!v){k=y+81|0;do if(!(a[k>>0]|0)){if(a[y+82>>0]|0)break;a[k>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;c[q>>2]=(c[q>>2]|0)+1;k=c[y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);if(!v){k=n;j=7;Fa=640;break}else{u=0;t=1}}else{c[v+16>>2]=v+20+(o<<2);b[v+6>>1]=w;b[v+8>>1]=o;a[v+4>>0]=a[y+78>>0]|0;c[v+12>>2]=y;c[v>>2]=1;gw(v+24|0,0,p+-4|0)|0;u=v;t=0}if((w|0)>0){m=y+8|0;k=v+20|0;l=0;while(1){Na=Cl(f,h,l)|0;c[k>>2]=Na;if(!Na)c[k>>2]=c[m>>2];l=l+1|0;if((l|0)==(w|0))break;else k=k+4|0}}q=x+104|0;r=u+12|0;s=u;p=h;do{o=p+24|0;m=c[o>>2]|0;k=(m|0)<0;do if(t){if(k)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[k+(m*20|0)+1>>0]|0))break;Ei(x,k+(m*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[o>>2]=-1;k=p+28|0;l=c[k>>2]|0;if((l|0)<0)break;do if(!(a[(c[x>>2]|0)+81>>0]|0)){m=c[q>>2]|0;c[m+(l*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;if(!(a[m+(l*20|0)+1>>0]|0))break;Ei(x,m+(l*20|0)|0,u,-9)}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1}while(0);c[k>>2]=-1}else{if(k)break;k=c[x>>2]|0;ka:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break ka}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break ka}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1;o=p+28|0;m=c[o>>2]|0;if((m|0)<0)break;k=c[x>>2]|0;la:do if(!(a[k+81>>0]|0)){k=c[q>>2]|0;c[k+(m*20|0)+8>>2]=w;c[v>>2]=(c[v>>2]|0)+1;l=k+(m*20|0)+1|0;if(!(a[l>>0]|0)){c[k+(m*20|0)+16>>2]=u;a[l>>0]=-9;break}else{Ei(x,k+(m*20|0)|0,u,-9);break}}else{c[14829]=w;c[v>>2]=(c[v>>2]|0)+1;if(c[k+480>>2]|0)break;Na=(c[u>>2]|0)+-1|0;c[u>>2]=Na;if(Na|0)break;k=c[r>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);break la}if((c[k+304>>2]|0)>>>0>s>>>0)break;if((c[k+308>>2]|0)>>>0<=s>>>0)break;Na=k+300|0;c[u>>2]=c[Na>>2];c[Na>>2]=u;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{Na=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-Na;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);c[o>>2]=-1}while(0);p=c[p+52>>2]|0}while((p|0)!=0);Na=(c[v>>2]|0)+-1|0;c[v>>2]=Na;if(Na|0){k=n;Fa=640;break}k=c[v+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,u);k=n;Fa=640;break ga}l=v;if((c[k+304>>2]|0)>>>0>l>>>0)break;if((c[k+308>>2]|0)>>>0<=l>>>0)break;k=k+300|0;c[v>>2]=c[k>>2];c[k>>2]=v;k=n;Fa=640;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);k=n;Fa=640;break}else{k=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);k=n;Fa=640;break}}else{k=n;Fa=640}}else Fa=374;while(0);if((Fa|0)==374){k=j?43237:43150;switch(a[h+4>>0]|0){case -128:{j=41509;break}case -126:{j=41519;break}case -127:{j=41529;break}default:j=41536}c[ba>>2]=k;c[ba+4>>2]=j;cd(f,43195,ba);k=0;j=1;Fa=640}if((Fa|0)==640){c[i+8>>2]=c[Da+8>>2];c[i+12>>2]=c[Da+12>>2];if(!k)m=j;else{pi(y,k,1);m=j}}if(c[h+56>>2]|0){Oa=m;Ra=Pa;return Oa|0}l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}else m=1;while(0);j=c[Ma+28>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);j=c[Ma+40>>2]|0;do if(j|0){if(Na|0){if(c[Na+480>>2]|0){Xd(Na,j);break}i=j;if((c[Na+304>>2]|0)>>>0<=i>>>0?(c[Na+308>>2]|0)>>>0>i>>>0:0){i=Na+300|0;c[j>>2]=c[i>>2];c[i>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);l=f+212|0;j=c[l>>2]|0;if(!j)j=0;else{k=c[Oa>>2]|0;if((j|0)<0)j=(c[k+108>>2]|0)+-1|0;if(!(a[(c[k>>2]|0)+81>>0]|0))j=(c[k+104>>2]|0)+(j*20|0)|0;else j=59308;j=c[j+8>>2]|0}c[l>>2]=j;Oa=m;Ra=Pa;return Oa|0}function lj(b,f,g,h,i,j,k,l){b=b|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var m=0,n=0,o=0,p=0,q=0,r=0,s=0,t=0;s=Ra;Ra=Ra+16|0;m=s;r=c[b>>2]|0;do if(!f){f=(k|0)!=0;if(f|(l|0)!=0){c[m>>2]=f?44504:44507;cd(b,44468,m);break}else{q=pj(b,0,g,h)|0;n=6;break}}else{q=pj(b,f,g,h)|0;n=6}while(0);if((n|0)==6?q|0:0){o=(c[q>>2]|0)+-1|0;a:do if((d[b+200>>0]|0)>1?(p=c[q+8+(o*72|0)+8>>2]|0,p|0):0){if(!((h|0)!=0?(c[h>>2]|0)!=0:0))h=g;g=c[b>>2]|0;b:do if(!g){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](16)|0;n=35;break}f=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;g=59064;m=c[g>>2]|0;g=c[g+4>>2]|0;if((g|0)>0|(g|0)==0&m>>>0>0){t=c[14978]|0;g=Tv(m|0,g|0,f|0,((f|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&g>>>0<=t>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f)break a;m=Wa[c[29352>>2]&127](f)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}else{if(c[g+272>>2]|0){if(a[g+81>>0]|0)break a}else{do if((e[g+276>>1]|0)>=16){m=g+300|0;f=c[m>>2]|0;if(f|0){c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}m=g+296|0;f=c[m>>2]|0;if(!f){f=g+292|0;break}else{c[m>>2]=c[f>>2];n=g+284|0;c[n>>2]=(c[n>>2]|0)+1;n=35;break b}}else f=g+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(g,16,0)|0;n=35}while(0);if((n|0)==35)if(!f)break;m=f+4|0;g=m+12|0;do{a[m>>0]=0;m=m+1|0}while((m|0)<(g|0));c[f>>2]=p;n=h;p=c[n+4>>2]|0;t=f+4|0;c[t>>2]=c[n>>2];c[t+4>>2]=p;t=b+272|0;c[f+12>>2]=c[t>>2];c[t>>2]=f}while(0);if(c[i+4>>2]|0){t=qj(r,i)|0;c[q+8+(o*72|0)+12>>2]=t}c[q+8+(o*72|0)+20>>2]=j;c[q+8+(o*72|0)+44>>2]=k;c[q+8+(o*72|0)+48>>2]=l;t=q;Ra=s;return t|0}if(k|0)ni(r,k);do if(l|0){b=l+4|0;f=c[l>>2]|0;c:do if((c[b>>2]|0)>0){g=r+480|0;h=r+304|0;n=r+308|0;o=r+300|0;if(!r){m=0;while(1){f=c[f+(m<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);m=m+1|0;f=c[l>>2]|0;if((m|0)>=(c[b>>2]|0))break c}}m=0;do{f=c[f+(m<<3)>>2]|0;do if(f|0){if(c[g>>2]|0){Xd(r,f);break}t=f;if((c[h>>2]|0)>>>0<=t>>>0?(c[n>>2]|0)>>>0>t>>>0:0){c[f>>2]=c[o>>2];c[o>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{t=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);m=m+1|0;f=c[l>>2]|0}while((m|0)<(c[b>>2]|0))}while(0);d:do if(f){do if(r|0){m=r+480|0;if(!(c[m>>2]|0)){g=f;if((c[r+304>>2]|0)>>>0>g>>>0)break;if((c[r+308>>2]|0)>>>0<=g>>>0)break;t=r+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(r,f);f=m;n=75;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);n=73;break}else{n=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);n=73;break}}else n=73;while(0);if((n|0)==73)if(r){f=r+480|0;n=75}if((n|0)==75){if(c[f>>2]|0){Xd(r,l);break}t=l;if((c[r+304>>2]|0)>>>0<=t>>>0?(c[r+308>>2]|0)>>>0>t>>>0:0){t=r+300|0;c[l>>2]=c[t>>2];c[t>>2]=l;break}}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{t=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!j){t=0;Ra=s;return t|0}pi(r,j,1);t=0;Ra=s;return t|0}function mj(d,f,g,h,i,j,k,l,m){d=d|0;f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;var n=0,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+96|0;q=t+80|0;s=t;p=c[d>>2]|0;a:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))r=11;else n=0;else{do if((e[p+276>>1]|0)>=76){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];p=p+284|0;c[p>>2]=(c[p>>2]|0)+1;break a}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;r=11}while(0);if((r|0)==11)n=_d(p,76,0)|0;o=(n|0)==0?s:n;if(!f){f=c[d>>2]|0;c[q>>2]=0;c[q+4>>2]=0;f=oj(f,172,q,0)|0;f=nj(c[d>>2]|0,0,f)|0}c[o>>2]=f;a[o+4>>0]=-125;c[o+8>>2]=l;c[o+12>>2]=0;c[o+16>>2]=0;q=d+100|0;l=(c[q>>2]|0)+1|0;c[q>>2]=l;c[o+20>>2]=l;c[o+24>>2]=-1;c[o+28>>2]=-1;b[o+6>>1]=0;if(!g){n=c[d>>2]|0;b:do if(!n){if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](80)|0;r=38;break}g=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;n=59064;f=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&f>>>0>0){l=c[14978]|0;q=Tv(f|0,n|0,g|0,((g|0)<0)<<31>>31|0)|0;p=L()|0;c[14768]=((p|0)<0|(p|0)==0&q>>>0<=l>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(g){f=Wa[c[29352>>2]&127](g)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0){c[14987]=f;r=39}else r=39}else g=0}else{if(c[n+272>>2]|0){if(a[n+81>>0]|0){g=0;break}}else{do if((e[n+276>>1]|0)>=80){f=n+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}f=n+296|0;g=c[f>>2]|0;if(!g){g=n+292|0;break}else{c[f>>2]=c[g>>2];r=n+284|0;c[r>>2]=(c[r>>2]|0)+1;r=38;break b}}else g=n+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1}g=_d(n,80,0)|0;r=38}while(0);if((r|0)==38)if(!g)g=0;else r=39;if((r|0)==39){f=g;n=f+80|0;do{a[f>>0]=0;f=f+1|0}while((f|0)<(n|0))}}c[o+32>>2]=g;c[o+36>>2]=h;c[o+40>>2]=i;c[o+44>>2]=j;c[o+48>>2]=k;c[o+52>>2]=0;c[o+56>>2]=0;c[o+60>>2]=m;c[o+64>>2]=0;c[o+68>>2]=0;c[o+72>>2]=0;g=c[d>>2]|0;if(!(a[g+81>>0]|0)){s=o;Ra=t;return s|0}pi(g,o,(o|0)!=(s|0)&1);s=0;Ra=t;return s|0}function nj(b,d,f){b=b|0;d=d|0;f=f|0;var g=0,h=0,i=0,j=0;a:do if(!d){b:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))i=12;else{d=0;break a}else{do if((e[b+276>>1]|0)>=24){g=b+300|0;d=c[g>>2]|0;if(d|0){c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}g=b+296|0;d=c[g>>2]|0;if(!d){d=b+292|0;break}else{c[g>>2]=c[d>>2];h=b+284|0;c[h>>2]=(c[h>>2]|0)+1;break b}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;i=12}while(0);if((i|0)==12)d=_d(b,24,0)|0;if(d){c[d>>2]=0;i=20}}else{g=c[d>>2]|0;if(!(g+-1&g)){h=Yv(g|0,((g|0)<0)<<31>>31|0,40,0)|0;g=L()|0;h=h|4;j=d;if(((c[b+304>>2]|0)>>>0<=j>>>0?(c[b+308>>2]|0)>>>0>j>>>0:0)?!(g>>>0>0|((g|0)==0?h>>>0>(e[b+276>>1]|0)>>>0:0)):0){i=20;break}g=Zd(b,d,h,g)|0;if(g){d=g;i=20}}else i=20}while(0);if((i|0)==20){j=c[d>>2]|0;c[d>>2]=j+1;i=d+4+(j*20|0)+4|0;c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=0;c[d+4+(j*20|0)>>2]=f;j=d;return j|0}if(f|0)ni(b,f);if(!d){j=0;return j|0}ri(b,d);j=0;return j|0}function oj(d,f,g,h){d=d|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=Ra;Ra=Ra+16|0;n=t;c[n>>2]=0;o=(g|0)!=0;do if(o){if(((f|0)==147?(i=c[g>>2]|0,i|0):0)?ii(i,n)|0:0){m=0;break}m=(c[g+4>>2]|0)+1|0}else m=0;while(0);k=m+52|0;a:do if(c[d+272>>2]|0)if(!(a[d+81>>0]|0))l=16;else{s=0;Ra=t;return s|0}else{do if(!(0<0|(0==0?(e[d+276>>1]|0)>>>0>>0:0))){i=d+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}i=d+296|0;j=c[i>>2]|0;if(!j){i=d+292|0;break}else{c[i>>2]=c[j>>2];p=d+284|0;c[p>>2]=(c[p>>2]|0)+1;p=j;break a}}else i=d+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=16}while(0);if((l|0)==16)p=_d(d,k,0)|0;if(!p){s=p;Ra=t;return s|0}i=p;j=i+52|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));a[p>>0]=f;b[p+34>>1]=-1;do if(o){if(!m){c[p+4>>2]=8389632;c[p+8>>2]=c[n>>2];break}k=p+52|0;d=p+8|0;c[d>>2]=k;i=g+4|0;j=c[i>>2]|0;if(!j)i=0;else{ew(k|0,c[g>>2]|0,j|0)|0;i=c[i>>2]|0}a[k+i>>0]=0;if(((h|0?(s=c[d>>2]|0,q=a[s>>0]|0,(a[880+(q&255)>>0]|0)<0):0)?(h=p+4|0,c[h>>2]=(q<<24>>24==34?67108928:67108864)|c[h>>2],s|0):0)?(r=a[s>>0]|0,(a[880+(r&255)>>0]|0)<0):0){d=r<<24>>24==91?93:r;k=0;i=1;while(1){j=a[s+i>>0]|0;if(j<<24>>24==d<<24>>24){i=i+1|0;j=s+k|0;if((a[s+i>>0]|0)!=d<<24>>24)break;a[j>>0]=d}else a[s+k>>0]=j;k=k+1|0;i=i+1|0}a[j>>0]=0}}while(0);c[p+24>>2]=1;s=p;Ra=t;return s|0}function pj(b,d,f,g){b=b|0;d=d|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=Ra;Ra=Ra+16|0;k=o;n=c[b>>2]|0;do if(!d){a:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))j=12;else{n=0;Ra=o;return n|0}else{do if((e[n+276>>1]|0)>=80){h=n+300|0;i=c[h>>2]|0;if(i|0){c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}h=n+296|0;i=c[h>>2]|0;if(!i){h=n+292|0;break}else{c[h>>2]=c[i>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;break a}}else h=n+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;j=12}while(0);if((j|0)==12)i=_d(n,80,0)|0;if(!i){n=0;Ra=o;return n|0}else{c[i+4>>2]=1;c[i>>2]=1;j=i+8|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=i;h=i+48|0;break}}else{m=c[d>>2]|0;h=m+1|0;b:do if(h>>>0>(c[d+4>>2]|0)>>>0){i=cw(m|0,((m|0)<0)<<31>>31|0,1)|0;j=L()|0;i=i|1;do if((h|0)>199){c[k>>2]=200;cd(b,43159,k)}else{h=(j|0)<0|(j|0)==0&i>>>0<200;b=h?i:200;h=Yv(b|0,(h?j:0)|0,72,0)|0;h=Sv(h|0,L()|0,8,0)|0;i=L()|0;l=d;if(((c[n+304>>2]|0)>>>0<=l>>>0?(c[n+308>>2]|0)>>>0>l>>>0:0)?!(i>>>0>0|((i|0)==0?h>>>0>(e[n+276>>1]|0)>>>0:0)):0)h=d;else{h=Zd(n,d,h,i)|0;if(!h)break}c[h+4>>2]=b;i=c[h>>2]|0;if((i|0)<=(m|0)){l=h;b=h;h=i;break b}do{j=h+8+(i*72|0)|0;i=i+-1|0;b=h+8+(i*72|0)|0;k=j+72|0;do{c[j>>2]=c[b>>2];j=j+4|0;b=b+4|0}while((j|0)<(k|0))}while((i|0)>(m|0));l=h;b=h;h=c[h>>2]|0;break b}while(0);qi(n,d);n=0;Ra=o;return n|0}else{l=d;b=d;h=m}while(0);c[b>>2]=h+1;j=l+8+(m*72|0)|0;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));b=l;h=l+8+(m*72|0)+40|0}while(0);c[h>>2]=-1;h=(c[b>>2]|0)+-1|0;if(g|0?c[g>>2]|0:0){g=qj(n,g)|0;c[b+8+(h*72|0)+8>>2]=g;n=qj(n,f)|0;c[b+8+(h*72|0)+4>>2]=n;n=b;Ra=o;return n|0}n=qj(n,f)|0;c[b+8+(h*72|0)+8>>2]=n;c[b+8+(h*72|0)+4>>2]=0;n=b;Ra=o;return n|0}function qj(b,d){b=b|0;d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0;if(!d){k=0;return k|0}k=c[d>>2]|0;i=c[d+4>>2]|0;if(!k){k=0;return k|0}g=Sv(i|0,0,1,0)|0;h=L()|0;a:do if(c[b+272>>2]|0)if(!(a[b+81>>0]|0))j=13;else{k=0;return k|0}else{do if(0<0|(0==0?i>>>0<(e[b+276>>1]|0)>>>0:0)){d=b+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}d=b+296|0;f=c[d>>2]|0;if(!f){d=b+292|0;break}else{c[d>>2]=c[f>>2];b=b+284|0;c[b>>2]=(c[b>>2]|0)+1;b=f;break a}}else d=b+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;j=13}while(0);if((j|0)==13)b=_d(b,g,h)|0;if(!b){k=0;return k|0}ew(b|0,k|0,i|0)|0;a[b+i>>0]=0;d=a[b>>0]|0;if((a[880+(d&255)>>0]|0)>=0){k=b;return k|0}h=d<<24>>24==91?93:d;g=0;d=1;while(1){f=a[b+d>>0]|0;if(f<<24>>24==h<<24>>24){d=d+1|0;f=b+g|0;if((a[b+d>>0]|0)!=h<<24>>24)break;a[f>>0]=h}else a[b+g>>0]=f;g=g+1|0;d=d+1|0}a[f>>0]=0;k=b;return k|0} function yj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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,Aa=0,Ba=0,Ca=0,Da=0,Ea=0;Ea=Ra;Ra=Ra+448|0;ha=Ea+424|0;ca=Ea+416|0;ta=Ea+408|0;sa=Ea+400|0;ra=Ea+392|0;qa=Ea+384|0;ma=Ea+376|0;na=Ea+368|0;da=Ea+336|0;W=Ea+328|0;M=Ea+320|0;U=Ea+304|0;ba=Ea+280|0;V=Ea+272|0;ga=Ea+256|0;fa=Ea+240|0;ea=Ea+224|0;Z=Ea+216|0;ja=Ea+184|0;ia=Ea+152|0;X=Ea+144|0;J=Ea+136|0;N=Ea+128|0;K=Ea+120|0;I=Ea+112|0;_=Ea+104|0;T=Ea+96|0;Q=Ea+88|0;S=Ea+80|0;A=Ea+72|0;y=Ea+64|0;z=Ea+56|0;w=Ea+48|0;q=Ea+40|0;o=Ea+32|0;n=Ea+24|0;wa=Ea+16|0;B=Ea;oa=Ea+440|0;va=Ea+436|0;pa=Ea+432|0;Da=c[f>>2]|0;ua=f+8|0;k=c[ua>>2]|0;if(!k){if((c[f+116>>2]|0)==0?(b[Da+76>>1]&8)==0:0)a[f+23>>0]=1;a:do if(c[Da+272>>2]|0)if(!(a[Da+81>>0]|0))za=15;else{Ra=Ea;return}else{do if((e[Da+276>>1]|0)>=224){k=Da+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}k=Da+296|0;l=c[k>>2]|0;if(!l){k=Da+292|0;break}else{c[k>>2]=c[l>>2];Ca=Da+284|0;c[Ca>>2]=(c[Ca>>2]|0)+1;break a}}else k=Da+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=15}while(0);if((za|0)==15)l=_d(Da,224,0)|0;if(!l){Ra=Ea;return}$=l+104|0;aa=$+120|0;do{c[$>>2]=0;$=$+4|0}while(($|0)<(aa|0));c[l>>2]=Da;k=Da+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ua>>2]=l;Di(l,61,0,1,0)|0;Aa=l}else Aa=k;F=Aa+149|0;xa=d[F>>0]|d[F+1>>0]<<8|64;a[F>>0]=xa;a[F+1>>0]=xa>>8;xa=f+44|0;c[xa>>2]=2;k=c[f>>2]|0;ka=h+4|0;if(c[ka>>2]|0){if(a[k+165>>0]|0){cd(f,39404,n);Ra=Ea;return}r=wk(k,g)|0;if((r|0)<0){c[o>>2]=g;cd(f,39421,o);Ra=Ea;return}else g=h}else r=d[k+164>>0]|0;ya=Da+16|0;aa=c[ya>>2]|0;$=(r|0)==1;if(($?(v=c[f>>2]|0,p=v+16|0,(c[(c[p>>2]|0)+20>>2]|0)==0):0)?(a[f+199>>0]|0)==0:0){k=Pe(c[v>>2]|0,0,v,wa,0,542)|0;if(k|0){cd(f,32157,q);c[f+12>>2]=k;Ra=Ea;return}Ca=c[wa>>2]|0;c[(c[p>>2]|0)+20>>2]=Ca;k=c[v+92>>2]|0;p=c[Ca+4>>2]|0;c[p+4>>2]=c[Ca>>2];if(!(b[p+22>>1]&2)){m=p+32|0;n=p+36|0;o=(c[m>>2]|0)-(c[n>>2]|0)|0;if(((k+-512|0)>>>0<65025?(k+-1&k|0)==0:0)?(c[m>>2]=k,t=p+80|0,s=c[t>>2]|0,s|0):0){l=s+-4|0;c[t>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Ca=(c[14820]|0)+1|0;c[14820]=Ca;c[14821]=(Ca|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40;break}else{k=Wa[c[29352>>2]&127](l)|0;za=40}while(0);do if((za|0)==40){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Ca=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ca;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[t>>2]=0}Ca=Se(c[p>>2]|0,m,o)|0;c[n>>2]=(c[m>>2]|0)-(o&65535);if((Ca|0)==7){k=v+81|0;if((a[k>>0]|0)==0?(a[v+82>>0]|0)==0:0){a[k>>0]=1;if((c[v+180>>2]|0)>0)c[v+264>>2]=1;k=v+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[v+236>>2]|0;if(k|0)c[k+12>>2]=7}Ra=Ea;return}}}Ca=qj(Da,g)|0;if(!Ca){Ra=Ea;return}if(!j)Ba=qj(Da,i)|0;else{c[w>>2]=i;Ba=dd(Da,45384,w)|0}if(!(c[ka>>2]|0))la=0;else la=c[aa+(r<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(x=c[k+312>>2]|0,(x|0)!=0):0){k=$a[x&127](c[k+316>>2]|0,19,Ca,Ba,la,c[f+240>>2]|0)|0;if((k|0)==1){cd(f,39216,z);c[f+12>>2]=23;za=2020;break}if((k|2|0)==2)if(!k){za=67;break}else{za=2020;break}else{cd(f,39231,y);c[f+12>>2]=1;za=2020;break}}else za=67;while(0);b:do if((za|0)==67){c[B>>2]=0;c[B+4>>2]=Ca;c[B+8>>2]=Ba;c[B+12>>2]=0;t=Da+404|0;c[t>>2]=0;k=Td(Da,la)|0;c:do if(k){l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];k=c[(c[l>>2]|0)+60>>2]|0;l=c[k>>2]|0;d:do if(l|0){k=Ya[c[l+40>>2]&127](k,14,B)|0;switch(k|0){case 12:break d;case 0:break;default:{l=c[B>>2]|0;if(!l)break c;c[A>>2]=l;cd(f,31408,A);l=c[B>>2]|0;if(!l)break c;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break c}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break c}}}Wi(Aa,1);if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc(c[Aa+116>>2]|0,c[B>>2]|0,-1,1,-1)|0;l=c[B>>2]|0;if(!l){za=2020;break b}m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;k=c[B>>2]|0;if(!k){za=2020;break b}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);za=2020;break b}else{za=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);za=2020;break b}}while(0);B=a[Ca>>0]|0;q=d[208+(B&255)>>0]|0;e:do if(!(B<<24>>24)){k=0;l=59;do{o=k+l|0;m=(o|0)/2|0;n=q-(d[208+(d[c[4544+(m<<4)>>2]>>0]|0)>>0]|0)|0;if(!n){j=m;za=103;break e}B=(n|0)<0;k=B?k:m+1|0;l=B?m+-1|0:l}while((k|0)<=(l|0))}else{n=0;p=59;do{o=n+p|0;g=(o|0)/2|0;l=c[4544+(g<<4)>>2]|0;k=q-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!k){m=Ca;do{m=m+1|0;l=l+1|0;B=a[m>>0]|0;k=(d[208+(B&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(B<<24>>24==0|(k|0)!=0));if(!k){j=g;za=103;break e}}B=(k|0)<0;n=B?n:g+1|0;p=B?g+-1|0:p}while((n|0)<=(p|0))}while(0);f:do if((za|0)==103){s=4544+(j<<4)|0;m=a[4544+(j<<4)+5>>0]|0;g:do if(m&1?(D=c[f>>2]|0,(a[D+165>>0]|0)==0):0){n=f+4|0;p=D+24|0;g=(c[p>>2]&1|0)==0;q=D+16|0;B=c[(c[q>>2]|0)+12>>2]|0;a[D+78>>0]=a[B+77>>0]|0;if((b[B+78>>1]&1)==0?(C=eh(D,0,n,0)|0,(C|0)!=0):0)k=C;else za=107;h:do if((za|0)==107){k=c[D+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[q>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(E=eh(D,k,n,0)|0,E|0):0){k=E;break h}}while((l|0)>2);if(g)c[p>>2]=c[p>>2]&-2;if(!(a[D+89>>0]|0))break g;c[p>>2]=c[p>>2]|16;break g}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);E=m&255;do if((E&2|0)==0?(Ba|0)==0|(E&4|0)==0:0){E=a[4544+(j<<4)+7>>0]|0;m=E&255;E=E<<24>>24==0;Wi(Aa,E?1:m);if(E){if(a[(c[Aa>>2]|0)+81>>0]|0)break;yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;break}n=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[n>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(m|0))break;else l=l+1|0}}while(0);do switch(a[4544+(j<<4)+4>>0]|0){case 11:{u=1<>2]=c[ya>>2]|u;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){ya=Aa+156|0;c[ya>>2]=c[ya>>2]|u}if(!Ba){c[xa>>2]=(c[xa>>2]|0)+2;Aa=ed(Aa,9,18352)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+124>>2]=-2e3;break f}c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;k=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;t=c[f+116>>2]|0;t=(t|0)==0?f:t;l=t+84|0;m=c[l>>2]|0;i:do if(!(m&u)){c[l>>2]=m|u;if(!$)break;s=c[t>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,wa,0,542)|0;if(m|0){cd(t,32157,S);c[t+12>>2]=m;break}ya=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ya;l=c[s+92>>2]|0;o=c[ya+4>>2]|0;c[o+4>>2]=c[ya>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147;break}else{l=Wa[c[29352>>2]&127](m)|0;za=147}while(0);do if((za|0)==147){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{za=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);za=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((za|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);l=t+80|0;c[l>>2]=c[l>>2]|u;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;Aa=c[Aa+104>>2]|0;a[Aa+(m*20|0)>>0]=95;b[Aa+(m*20|0)+2>>1]=0;c[Aa+(m*20|0)+4>>2]=r;c[Aa+(m*20|0)+8>>2]=3;c[Aa+(m*20|0)+12>>2]=k;c[Aa+(m*20|0)+16>>2]=0;a[Aa+(m*20|0)+1>>0]=0}else Di(Aa,95,r,3,k)|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}case 28:{k=c[aa+(r<<4)+4>>2]|0;if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;l=c[wa>>2]|0;c[Da+92>>2]=l;g=c[k+4>>2]|0;c[g+4>>2]=c[k>>2];if(b[g+22>>1]&2){za=2020;break b}n=g+32|0;o=g+36|0;p=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[n>>2]=l;m=g+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;Aa=(c[14820]|0)+1|0;c[14820]=Aa;c[14821]=(Aa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219;break}else{k=Wa[c[29352>>2]&127](l)|0;za=219}while(0);do if((za|0)==219){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{Aa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);Aa=Se(c[g>>2]|0,n,p)|0;c[o>>2]=(c[n>>2]|0)-(p&65535);if((Aa|0)!=7){za=2020;break b}k=Da+81|0;if(a[k>>0]|0){za=2020;break b}if(a[Da+82>>0]|0){za=2020;break b}a[k>>0]=1;if((c[Da+180>>2]|0)>0)c[Da+264>>2]=1;k=Da+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Da+236>>2]|0;if(!k){za=2020;break b}c[k+12>>2]=7;za=2020;break b}if(!k){n=0;o=0}else{o=c[(c[k+4>>2]|0)+32>>2]|0;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;j:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=179;else za=199;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=180;break j}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=179}while(0);if((za|0)==179){p=_d(m,8,0)|0;za=180}k:do if((za|0)==180){if(!p){za=199;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break k}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==199){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 30:{g=c[aa+(r<<4)+4>>2]|0;do if(!Ba){m=-1;n=0}else{za=a[Ba>>0]|0;k=(d[208+(za&255)>>0]|0)+-102|0;if(!(za<<24>>24==0|(k|0)!=0)){l=45388;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)m=2;else m=(Zm(Ba,1,0)|0)<<24>>24!=0&1;if(c[ka>>2]|0){n=1;break}p=c[Da+20>>2]|0;if((p|0)<=0){n=1;break}l=c[ya>>2]|0;n=m<<2;k=0;do{o=c[l+(k<<4)+4>>2]|0;if(o|0){za=c[o+4>>2]|0;c[za+4>>2]=c[o>>2];za=za+22|0;b[za>>1]=n|b[za>>1]&-13&65535}k=k+1|0}while((k|0)!=(p|0));n=1}while(0);if(!g)n=0;else{l=c[g+4>>2]|0;c[l+4>>2]=c[g>>2];l=l+22|0;k=b[l>>1]|0;if(n){k=(m<<2|k&-13&65535)&65535;b[l>>1]=k}n=(k&65535)>>>2&3}m=c[Aa>>2]|0;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=256;else za=276;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=257;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=256}while(0);if((za|0)==256){p=_d(m,8,0)|0;za=257}m:do if((za|0)==257){if(!p){za=276;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break m}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break m}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==276){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 24:{n=c[f+116>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<>2]=l|m,$):0)?(Y=c[n>>2]|0,O=Y+16|0,(c[(c[O>>2]|0)+20>>2]|0)==0):0){if(a[n+199>>0]|0)break;k=Pe(c[Y>>2]|0,0,Y,wa,0,542)|0;if(k|0){cd(n,32157,Q);c[n+12>>2]=k;break}ya=c[wa>>2]|0;c[(c[O>>2]|0)+20>>2]=ya;k=c[Y+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302;break}else{k=Wa[c[29352>>2]&127](l)|0;za=302}while(0);do if((za|0)==302){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=Y+81|0;do if(!(a[k>>0]|0)){if(a[Y+82>>0]|0)break;a[k>>0]=1;if((c[Y+180>>2]|0)>0)c[Y+264>>2]=1;k=Y+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[Y+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break n}while(0)}while(0);o=(c[xa>>2]|0)+1|0;c[xa>>2]=o;do if((a[Ca>>0]|32)<<24>>24==112){l=Aa+108|0;m=c[l>>2]|0;k=Aa+112|0;if((c[k>>2]|0)>(m|0)){c[l>>2]=m+1;za=c[Aa+104>>2]|0;a[za+(m*20|0)>>0]=-90;b[za+(m*20|0)+2>>1]=0;c[za+(m*20|0)+4>>2]=r;c[za+(m*20|0)+8>>2]=o;c[za+(m*20|0)+12>>2]=0;c[za+(m*20|0)+16>>2]=0;a[za+(m*20|0)+1>>0]=0;m=l;break}else{Di(Aa,166,r,o,0)|0;m=l;break}}else{c[wa>>2]=0;if(Ba){ii(Ba,wa)|0;k=c[wa>>2]|0;if((k|0)<0)k=(k|0)==-2147483648?2147483647:0-k|0;else za=322}else{k=0;za=322}m=Aa+108|0;l=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=-89;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=r;c[za+(l*20|0)+8>>2]=o;c[za+(l*20|0)+12>>2]=k;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;k=n;break}else{Di(Aa,167,r,o,k)|0;k=n;break}}while(0);l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;Aa=c[Aa+104>>2]|0;a[Aa+(l*20|0)>>0]=81;b[Aa+(l*20|0)+2>>1]=0;c[Aa+(l*20|0)+4>>2]=o;c[Aa+(l*20|0)+8>>2]=1;c[Aa+(l*20|0)+12>>2]=0;c[Aa+(l*20|0)+16>>2]=0;a[Aa+(l*20|0)+1>>0]=0;break f}else{Di(Aa,81,o,1,0)|0;break f}}case 23:{do if(!Ba)za=339;else{o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-101|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45400;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(k){k=n+-110|0;if(!(o|(k|0)!=0)){l=45393;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=0;else{za=339;break}}else l=1;if(c[ka>>2]|0){za=350;break}p=c[Da+20>>2]|0;if((p|0)>2){o=c[ya>>2]|0;k=l&255;m=2;do{n=c[c[(c[o+(m<<4)+4>>2]|0)+4>>2]>>2]|0;do if(!(a[n+12>>0]|0)){za=c[n+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[n+4>>0]=k}while(0);m=m+1|0}while((m|0)!=(p|0))}else k=l&255;a[Da+83>>0]=k;za=350}while(0);if((za|0)==339)if(!(c[ka>>2]|0))m=Da+83|0;else{l=-1;za=350}if((za|0)==350){k=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;do if((l|0)>-1){if(a[k+12>>0]|0)break;za=c[k+216>>2]|0;if(za|0?(a[za+43>>0]|0)==2:0)break;a[k+4>>0]=l}while(0);m=k+4|0}n=Aa+108|0;k=c[n>>2]|0;o=Aa+112|0;l=(c[o>>2]|0)>(k|0);if((a[m>>0]|0)==1){if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45400,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}else{if(l){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,45393,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}}case 20:{o:do if(Ba){m=(Eu(Ba)|0)&1073741823;if(m){n=Ba;p=36033;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=381;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=383;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=0;break o}}if((za|0)==381){l=0;k=a[208+(d[p>>0]|0)>>0]|0}else if((za|0)==383)l=l&255;if((l|0)!=(k&255|0)){n=Ba;p=36040;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2043;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2041;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=1;break o}}if((za|0)==2041)l=l&255;else if((za|0)==2043){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=1;break}n=Ba;p=36048;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2050;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2048;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=2;break o}}if((za|0)==2048)l=l&255;else if((za|0)==2050){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=2;break}n=Ba;p=36052;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2057;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2055;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=3;break o}}if((za|0)==2055)l=l&255;else if((za|0)==2057){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=3;break}n=Ba;p=36061;o=m;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2064;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[p>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2062;break}if((o|0)>1){n=n+1|0;p=p+1|0;o=o+-1|0}else{s=4;break o}}if((za|0)==2062)l=l&255;else if((za|0)==2064){l=0;k=a[208+(d[p>>0]|0)>>0]|0}if((l|0)==(k&255|0)){s=4;break}n=Ba;o=36068;while(1){k=a[n>>0]|0;if(!(k<<24>>24)){za=2071;break}l=a[208+(k&255)>>0]|0;k=a[208+(d[o>>0]|0)>>0]|0;if(l<<24>>24!=k<<24>>24){za=2069;break}if((m|0)>1){n=n+1|0;o=o+1|0;m=m+-1|0}else{s=5;break o}}if((za|0)==2069)l=l&255;else if((za|0)==2071){l=0;k=a[208+(d[o>>0]|0)>>0]|0}if((l|0)==(k&255|0))s=5;else za=387}else s=0}else s=0}else za=387;while(0);if((za|0)==387)if(!(c[ka>>2]|0)){c[ka>>2]=1;r=0;s=-1}else s=-1;l=c[Da+20>>2]|0;if((l|0)>0){p=Aa+152|0;m=Aa+108|0;k=Aa+112|0;g=Aa+104|0;q=Aa+156|0;do{o=l;l=l+-1|0;do if(c[(c[ya>>2]|0)+(l<<4)+4>>2]|0){if((l|0)!=(r|0)?c[ka>>2]|0:0)break;n=1<>2]=c[p>>2]|n;do if((l|0)!=1){if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(l<<4)+4>>2]|0)+9>>0]|0))break;c[q>>2]=c[q>>2]|n}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;za=c[g>>2]|0;a[za+(n*20|0)>>0]=7;b[za+(n*20|0)+2>>1]=0;c[za+(n*20|0)+4>>2]=l;c[za+(n*20|0)+8>>2]=1;c[za+(n*20|0)+12>>2]=s;c[za+(n*20|0)+16>>2]=0;a[za+(n*20|0)+1>>0]=0;break}else{Di(Aa,7,l,1,s)|0;break}}while(0)}while((o|0)>1)}else{m=Aa+108|0;k=Aa+112|0}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 21:{m=c[c[(c[aa+(r<<4)+4>>2]|0)+4>>2]>>2]|0;za=wa;c[za>>2]=-2;c[za+4>>2]=-1;if(Ba){Vd(Ba,wa)|0;l=wa;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)<-1|(l|0)==-1&k>>>0<4294967295){k=wa;c[k>>2]=-1;c[k+4>>2]=-1;k=-1;n=-1}else n=l;l=m+160|0;c[l>>2]=k;c[l+4>>2]=n;l=c[m+216>>2]|0;if(!l)o=k;else{o=l+16|0;c[o>>2]=k;c[o+4>>2]=n;o=k}}else{n=m+160|0;o=c[n>>2]|0;n=c[n+4>>2]|0}m=wa;c[m>>2]=o;c[m+4>>2]=n;m=c[Aa>>2]|0;p:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=421;else za=441;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=422;break p}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=421}while(0);if((za|0)==421){p=_d(m,8,0)|0;za=422}q:do if((za|0)==422)if(p){m=p;k=m;a[k>>0]=o;a[k+1>>0]=o>>8;a[k+2>>0]=o>>16;a[k+3>>0]=o>>24;m=m+4|0;a[m>>0]=n;a[m+1>>0]=n>>8;a[m+2>>0]=n>>16;a[m+3>>0]=n>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break q}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break q}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=441;while(0);do if((za|0)==441){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 1:{p=c[aa+(r<<4)+4>>2]|0;if(Ba|0){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-110|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45841;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}do if(!k)m=0;else{k=n+-102|0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=1;break}k=n+-105|0;if(!(o|(k|0)!=0)){l=45846;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){m=2;break}c[wa>>2]=0;ii(Ba,wa)|0;m=c[wa>>2]|0;m=m>>>0<3?m&255:0}while(0);a[Da+84>>0]=m;n=c[p+4>>2]|0;c[n+4>>2]=c[p>>2];l=m&255;if(b[n+22>>1]&2){k=n+17|0;if(((l|0)!=0|0)!=(d[k>>0]|0)){za=2020;break b}}else k=n+17|0;a[k>>0]=(l|0)!=0&1;a[n+18>>0]=(l|0)==2&1;k=m+-1|0;if(k>>>0>=2){za=2020;break b}ya=c[Aa+108>>2]|0;za=ed(Aa,5,18400)|0;c[za+4>>2]=r;c[za+24>>2]=r;c[za+48>>2]=ya+4;c[za+84>>2]=r;c[za+92>>2]=k;k=1<>2]=c[za>>2]|k;if($){za=2020;break b}if(!(a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0)){za=2020;break b}za=Aa+156|0;c[za>>2]=c[za>>2]|k;za=2020;break b}k=c[p+4>>2]|0;c[k+4>>2]=c[p>>2];if(!(a[k+17>>0]|0))n=0;else n=(a[k+18>>0]|0)==0?1:2;m=c[Aa>>2]|0;r:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=466;else za=486;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=467;break r}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=466}while(0);if((za|0)==466){p=_d(m,8,0)|0;za=467}s:do if((za|0)==467){if(!p){za=486;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break s}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break s}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==486){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 16:{if(!((Ba|0)!=0?(ya=(ii(Ba,oa)|0)==0,u=c[oa>>2]|0,!(ya|(u|0)<1)):0)){c[oa>>2]=2147483647;u=2147483647}t=c[f+116>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<>2]=l|s,$):0){q=c[t>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(t,32157,T);c[t+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535;break}else{k=Wa[c[29352>>2]&127](l)|0;za=535}while(0);do if((za|0)==535){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break t}while(0)}while(0);m=t+80|0;c[m>>2]=c[m>>2]|s;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=70;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=u;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,70,u,1,0)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=59;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=r;c[za+(k*20|0)+8>>2]=0;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,59,r,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=0;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,0,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=83;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=-1;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,83,1,-1,0)|0;l=c[m>>2]|0;if((c[n>>2]|0)>(l|0)){c[m>>2]=l+1;za=c[Aa+104>>2]|0;a[za+(l*20|0)>>0]=47;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,47,1,k,0)|0;l=c[m>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[Aa+104>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;break f}case 4:{if(Ba|0){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;c[(c[aa+(r<<4)+12>>2]|0)+80>>2]=k;m=c[aa+(r<<4)+4>>2]|0;l=c[m+4>>2]|0;c[l+4>>2]=c[m>>2];l=c[(c[l>>2]|0)+212>>2]|0;c[l+16>>2]=k;m=c[7357]|0;n=c[l+44>>2]|0;if((k|0)<=-1){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(za|0,Aa|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}bb[m&127](n,k);break f}n=c[(c[aa+(r<<4)+12>>2]|0)+80>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;u:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=577;else za=597;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=578;break u}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=577}while(0);if((za|0)==577){p=_d(m,8,0)|0;za=578}v:do if((za|0)==578)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break v}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break v}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=597;while(0);do if((za|0)==597){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 5:{if(Ba|0){c[wa>>2]=1;do if(!(ii(Ba,wa)|0))k=c[wa>>2]|0;else{Aa=c[aa+(r<<4)+4>>2]|0;k=c[wa>>2]|0;m=c[Aa+4>>2]|0;c[m+4>>2]=c[Aa>>2];m=c[(c[m>>2]|0)+212>>2]|0;if(!k){k=0;break}if((k|0)<0){za=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;Aa=L()|0;l=(c[m+28>>2]|0)+(c[m+24>>2]|0)|0;l=Wv(za|0,Aa|0,l|0,((l|0)<0)<<31>>31|0)|0;L()|0}else l=k;c[m+20>>2]=l}while(0);f=(Zm(Ba,1,(k|0)!=0&1)|0)<<24>>24==0;r=Da+32|0;za=r;xa=c[za>>2]|0;za=c[za+4>>2]|0;Aa=r;c[Aa>>2]=f?xa&-33:xa|32;c[Aa+4>>2]=f?za:za;do if(a[Da+79>>0]|0){k=c[Da+20>>2]|0;if((k|0)<=0)break;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break;else q=q+16|0}}while(0);break f}if(0==0?(c[Da+32>>2]&32|0)==0:0){n=0;o=0}else{k=c[aa+(r<<4)+4>>2]|0;l=c[k+4>>2]|0;c[l+4>>2]=c[k>>2];l=c[(c[l>>2]|0)+212>>2]|0;k=c[l+16>>2]|0;if((k|0)<=-1){ya=Yv(k|0,((k|0)<0)<<31>>31|0,-1024,-1)|0;za=L()|0;k=(c[l+28>>2]|0)+(c[l+24>>2]|0)|0;k=Wv(ya|0,za|0,k|0,((k|0)<0)<<31>>31|0)|0;L()|0}o=c[l+20>>2]|0;o=(k|0)<(o|0)?o:k;n=o;o=((o|0)<0)<<31>>31}m=c[Aa>>2]|0;w:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=626;else za=646;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=627;break w}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=626}while(0);if((za|0)==626){p=_d(m,8,0)|0;za=627}x:do if((za|0)==627){if(!p){za=646;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break x}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break x}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==646){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 25:{m=c[Aa>>2]|0;y:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=685;else za=705;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];za=m+284|0;c[za>>2]=(c[za>>2]|0)+1;za=686;break y}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=685}while(0);if((za|0)==685){l=_d(m,8,0)|0;za=686}z:do if((za|0)==686)if(l){m=l;k=m;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=l;a[o>>0]=-14;l=p;break}else{Ei(Aa,n+(k*20|0)|0,l,-14);l=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,l);l=p;break z}k=l;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[l>>2]=c[ya>>2];c[ya>>2]=l;l=p;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);l=p;break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);l=p;break}}else za=705;while(0);do if((za|0)==705){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}else m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 35:{if(Ba|0){l=a[Ba>>0]|0;do if((l+-48&255)<3)k=(l<<24>>24)+-48|0;else{n=d[208+(l&255)>>0]|0;k=n+-102|0;o=l<<24>>24==0;if(!(o|(k|0)!=0)){l=38150;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}if(!k){k=1;break}k=n+-109|0;if(!(o|(k|0)!=0)){l=36061;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}k=(k|0)==0?2:0}while(0);l=c[f>>2]|0;m=l+80|0;if((k|0)==(d[m>>0]|0))break f;n=l+16|0;o=c[(c[n>>2]|0)+20>>2]|0;A:do if(o|0){do if(a[l+79>>0]|0){if(a[o+8>>0]|0)break;ug(o);c[(c[n>>2]|0)+20>>2]=0;$b(l);break A}while(0);cd(f,45858,_);break f}while(0);a[m>>0]=k;break f}n=d[Da+80>>0]|0;m=c[Aa>>2]|0;B:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=727;else za=747;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=728;break B}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=727}while(0);if((za|0)==727){p=_d(m,8,0)|0;za=728}C:do if((za|0)==728)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break C}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=747;while(0);do if((za|0)==747){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 36:{if(!Ba){l=c[14771]|0;if(!l)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}do if(a[Ba>>0]|0){Aa=c[Da>>2]|0;Aa=(Za[c[Aa+32>>2]&127](Aa,Ba,1,wa)|0)!=0;if(Aa|(c[wa>>2]|0)==0){cd(f,45410,I);za=2020;break b}else break}while(0);D:do if((d[Da+80>>0]|0)<2){k=c[f>>2]|0;l=k+16|0;m=c[(c[l>>2]|0)+20>>2]|0;if(!m)break;do if(a[k+79>>0]|0){if(a[m+8>>0]|0)break;ug(m);c[(c[l>>2]|0)+20>>2]=0;$b(k);break D}while(0);cd(f,45858,K)}while(0);k=c[14771]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Aa=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);if(!(a[Ba>>0]|0)){c[14771]=0;za=2020;break b}else{c[N>>2]=Ba;za=Bb(31408,N)|0;c[14771]=za;za=2020;break b}}case 33:{if(Ba|0){k=Da+79|0;if(!(a[k>>0]|0)){cd(f,45435,J);za=2020;break b}if($){za=2020;break b}Aa=(Zm(Ba,0,1)|0)+1&7;a[aa+(r<<4)+8>>0]=Aa<<24>>24==0?1:Aa;a[aa+(r<<4)+9>>0]=1;if(!(a[k>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}n=(d[aa+(r<<4)+8>>0]|0)+-1|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;E:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=815;else za=835;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=816;break E}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=815}while(0);if((za|0)==815){p=_d(m,8,0)|0;za=816}F:do if((za|0)==816)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break F}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=835;while(0);do if((za|0)==835){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}case 2:{if(Ba|0){l=4544+(j<<4)+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;m=Da+79|0;za=(a[m>>0]|0)==0;k=za?k&-16385:k;l=za?l:l;do if(!((Zm(Ba,1,0)|0)<<24>>24)){za=Da+32|0;xa=za;f=c[xa+4>>2]&~l;c[za>>2]=c[xa>>2]&~k;c[za+4>>2]=f;if(!((k|0)==524288&(l|0)==0))break;za=Da+472|0;c[za>>2]=0;c[za+4>>2]=0}else{za=Da+32|0;xa=za;f=c[xa+4>>2]|l;c[za>>2]=c[xa>>2]|k;c[za+4>>2]=f}while(0);k=Aa+108|0;l=c[k>>2]|0;if((c[Aa+112>>2]|0)>(l|0)){c[k>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,158,0,0,0)|0;if(!(a[m>>0]|0)){za=2020;break b}k=c[Da+20>>2]|0;if((k|0)<=0){za=2020;break b}r=Da+32|0;q=c[ya>>2]|0;while(1){p=k;k=k+-1|0;l=c[q+4>>2]|0;if(l|0){g=c[r>>2]&56|d[q+8>>0];m=c[l+4>>2]|0;c[m+4>>2]=c[l>>2];m=c[m>>2]|0;za=g&7;Aa=(a[m+12>>0]|0)==0;n=(za|0)==1;o=za>>>0>2&Aa;a[m+7>>0]=(n|Aa^1)&1;a[m+8>>0]=o&1;a[m+9>>0]=(za|0)==4&Aa&1;n=Aa&(n^1);do if(n){l=m+10|0;if(!(g&8)){a[l>>0]=2;l=2;break}else{a[l>>0]=3;l=3;break}}else{a[m+10>>0]=0;l=0}while(0);Aa=(l<<2|(o?l:0))&255;a[m+11>>0]=(g&16|0)==0|n^1?Aa:Aa|12;Aa=m+20|0;za=d[Aa>>0]|0;a[Aa>>0]=(g&32|0)==0?za|1:za&254}if((p|0)<=1)break f;else q=q+16|0}}za=a[4544+(j<<4)+7>>0]|0;n=za&255;za=za<<24>>24==0;Wi(Aa,za?1:n);if(za)if(!(a[(c[Aa>>2]|0)+81>>0]|0)){yc(c[Aa+116>>2]|0,c[s>>2]|0,-1,1,0)|0;o=Aa}else o=Aa;else{m=Aa+116|0;k=0;l=d[4544+(j<<4)+6>>0]|0;while(1){if(!(a[(c[Aa>>2]|0)+81>>0]|0))yc((c[m>>2]|0)+(k*40|0)|0,c[5504+(l<<2)>>2]|0,-1,1,0)|0;k=k+1|0;if((k|0)==(n|0)){o=Aa;break}else l=l+1|0}}n=Da+32|0;m=4544+(j<<4)+8|0;n=(c[m>>2]&c[n>>2]|0?1:(c[m+4>>2]&c[n+4>>2]|0)!=0)&1;m=c[o>>2]|0;G:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=878;else za=898;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=879;break G}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=878}while(0);if((za|0)==878){p=_d(m,8,0)|0;za=879}H:do if((za|0)==879){if(!p){za=898;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[o>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break H}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==898){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[o>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 34:{if(!Ba)break f;s=bd(f,2,Ba,la)|0;if(!s)break f;m=c[s+72>>2]|0;if(!m)n=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0)){n=k;break}else k=k+1|0}k=c[s+8>>2]|0;I:do if(!k)r=0;else while(1){ya=k+55|0;if(((d[ya>>0]|d[ya+1>>0]<<8)&3)==2){r=k;break I}k=c[k+20>>2]|0;if(!k){r=0;break}}while(0);c[xa>>2]=7;o=c[f+116>>2]|0;o=(o|0)==0?f:o;k=o+84|0;l=c[k>>2]|0;m=1<>2]=l|m;if((n|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,X);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951;break}else{k=Wa[c[29352>>2]&127](l)|0;za=951}while(0);do if((za|0)==951){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{ya=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);ya=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((ya|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break J}while(0)}while(0);Sk(f,s)|0;i=s+42|0;l=b[i>>1]|0;if(l<<16>>16<=0)break f;m=c[s+4>>2]|0;t=4544+(j<<4)+8|0;u=r+4|0;if(!r){r=c[t>>2]|0;t=c[t+4>>2]|0;s=(r|0)==0&(t|0)==0;t=(r|0)==0&(t|0)==0?45496:45488;r=0;k=0;q=m;while(1){p=a[q+15>>0]|0;za=p&2;g=(za&255)>>>1&255;if(za<<24>>24!=0&s)k=k+1|0;else{n=c[q>>2]|0;if(!(p&4))m=59952;else m=n+(Eu(n)|0)+1|0;o=(a[q+12>>0]|0)!=0&1;l=c[q+4>>2]|0;if(!l)l=0;else l=c[l+8>>2]|0;c[ia>>2]=r-k;c[ia+4>>2]=n;c[ia+8>>2]=m;c[ia+12>>2]=o;c[ia+16>>2]=l;c[ia+20>>2]=p&1;c[ia+24>>2]=g;_m(Aa,1,t,ia);l=b[i>>1]|0}r=r+1|0;if((r|0)>=(l<<16>>16|0))break f;else q=q+16|0}}s=0;k=0;r=m;p=l<<16>>16;while(1){o=a[r+15>>0]|0;ya=o&2;q=(ya&255)>>>1&255;do if(!(ya<<24>>24))za=979;else{ya=t;if(!((c[ya>>2]|0)==0&(c[ya+4>>2]|0)==0)){za=979;break}k=k+1|0}while(0);if((za|0)==979){za=0;l=(o&1)==0;K:do if(l)l=(l^1)&1;else{if((p|0)<1){l=1;break}m=c[u>>2]|0;l=1;while(1){if((s|0)==(b[m+(l+-1<<1)>>1]|0))break K;n=l+1|0;if((l|0)<(p|0))l=n;else{l=n;break}}}while(0);p=t;p=(c[p>>2]|0)==0&(c[p+4>>2]|0)==0?45496:45488;g=c[r>>2]|0;if(!(o&4))n=59952;else n=g+(Eu(g)|0)+1|0;o=(a[r+12>>0]|0)!=0&1;m=c[r+4>>2]|0;if(!m)m=0;else m=c[m+8>>2]|0;c[ja>>2]=s-k;c[ja+4>>2]=g;c[ja+8>>2]=n;c[ja+12>>2]=o;c[ja+16>>2]=m;c[ja+20>>2]=l;c[ja+24>>2]=q;_m(Aa,1,p,ja);l=b[i>>1]|0}s=s+1|0;p=l<<16>>16;if((s|0)>=(p|0))break;else r=r+16|0}break}case 17:{if(!Ba)break f;i=hi(Da,Ba,la)|0;if(!i)break f;m=c[i+24>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}u=4544+(j<<4)+8|0;u=(c[u>>2]|0)==0&(c[u+4>>2]|0)==0;r=b[(u?i+50|0:i+52|0)>>1]|0;j=r&65535;c[xa>>2]=u?3:6;s=c[i+12>>2]|0;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,Z);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1010}while(0);do if((za|0)==1010){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break L}while(0)}while(0);if(!(r<<16>>16))break f;t=i+4|0;q=s+4|0;r=Aa+108|0;s=Aa+112|0;o=i+28|0;p=i+32|0;n=i+50|0;g=Aa+104|0;if(u){m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[ea>>2]=m;c[ea+4>>2]=k;c[ea+8>>2]=l;_m(Aa,1,45503,ea);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}else{m=0;do{za=b[(c[t>>2]|0)+(m<<1)>>1]|0;k=za<<16>>16;if(za<<16>>16<0)l=0;else l=c[(c[q>>2]|0)+(k<<4)>>2]|0;c[fa>>2]=m;c[fa+4>>2]=k;c[fa+8>>2]=l;_m(Aa,1,45503,fa);l=c[(c[p>>2]|0)+(m<<2)>>2]|0;k=m>>>0<(e[n>>1]|0)>>>0&1;c[ga>>2]=d[(c[o>>2]|0)+m>>0];c[ga+4>>2]=l;c[ga+8>>2]=k;_m(Aa,4,45508,ga);k=c[xa>>2]|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;za=c[g>>2]|0;a[za+(l*20|0)>>0]=81;b[za+(l*20|0)+2>>1]=0;c[za+(l*20|0)+4>>2]=1;c[za+(l*20|0)+8>>2]=k;c[za+(l*20|0)+12>>2]=0;c[za+(l*20|0)+16>>2]=0;a[za+(l*20|0)+1>>0]=0}else Di(Aa,81,1,k,0)|0;m=m+1|0}while((m|0)!=(j|0))}break}case 18:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=5;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,V);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1059}while(0);do if((za|0)==1059){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break M}while(0)}while(0);k=c[r+8>>2]|0;if(!k)break f;l=0;while(1){xa=c[k>>2]|0;f=(a[k+54>>0]|0)!=0&1;ya=k+55|0;ya=c[30092+(((d[ya>>0]|d[ya+1>>0]<<8)&3)<<2)>>2]|0;za=(c[k+36>>2]|0)!=0&1;c[ba>>2]=l;c[ba+4>>2]=xa;c[ba+8>>2]=f;c[ba+12>>2]=ya;c[ba+16>>2]=za;_m(Aa,1,45517,ba);k=c[k+20>>2]|0;if(!k)break;else l=l+1|0}break}case 10:{c[xa>>2]=3;o=Da+20|0;k=c[o>>2]|0;if((k|0)<=0){za=2020;break b}n=0;while(1){l=c[ya>>2]|0;m=c[l+(n<<4)+4>>2]|0;if(m){l=c[l+(n<<4)>>2]|0;k=c[c[m+4>>2]>>2]|0;if(!(a[k+15>>0]|0))k=c[k+168>>2]|0;else k=59952;c[U>>2]=n;c[U+4>>2]=l;c[U+8>>2]=k;_m(Aa,1,45523,U);k=c[o>>2]|0}n=n+1|0;if((n|0)>=(k|0)){za=2020;break b}}}case 7:{c[xa>>2]=2;k=c[Da+388>>2]|0;if(!k){za=2020;break b}l=0;while(1){za=c[c[k+8>>2]>>2]|0;c[M>>2]=l;c[M+4>>2]=za;_m(Aa,1,45527,M);k=c[k>>2]|0;if(!k)break;else l=l+1|0}break}case 14:{if(!Ba)break f;r=Sd(Da,Ba,la)|0;if(!r)break f;s=c[r+16>>2]|0;if(!s)break f;m=c[r+72>>2]|0;if(!m)k=-1e6;else{l=c[ya>>2]|0;k=0;while(1)if((c[l+(k<<4)+12>>2]|0)==(m|0))break;else k=k+1|0}c[xa>>2]=8;o=c[f+116>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<>2]=m|n;if((k|0)!=1)break;q=c[o>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(o,32157,W);c[o+12>>2]=l;break}ya=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=ya;k=c[q+92>>2]|0;n=c[ya+4>>2]|0;c[n+4>>2]=c[ya>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;ya=(c[14820]|0)+1|0;c[14820]=ya;c[14821]=(ya|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1106}while(0);do if((za|0)==1106){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{za=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-za;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);za=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((za|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break N}while(0)}while(0);i=r+4|0;m=s;n=0;while(1){p=m+20|0;O:do if((c[p>>2]|0)>0){g=m+8|0;q=m+26|0;r=m+25|0;o=0;while(1){s=c[g>>2]|0;t=c[(c[i>>2]|0)+(c[m+36+(o<<3)>>2]<<4)>>2]|0;u=c[m+36+(o<<3)+4>>2]|0;switch(a[q>>0]|0){case 8:{k=45928;break}case 9:{k=45937;break}case 10:{k=45949;break}case 7:{k=45957;break}default:k=45966}switch(a[r>>0]|0){case 8:{l=45928;break}case 9:{l=45937;break}case 10:{l=45949;break}case 7:{l=45957;break}default:l=45966}c[da>>2]=n;c[da+4>>2]=o;c[da+8>>2]=s;c[da+12>>2]=t;c[da+16>>2]=u;c[da+20>>2]=k;c[da+24>>2]=l;c[da+28>>2]=45539;_m(Aa,1,45530,da);o=o+1|0;if((o|0)>=(c[p>>2]|0))break O}}while(0);m=c[m+4>>2]|0;if(!m)break;else n=n+1|0}break}case 13:{k=c[xa>>2]|0;J=k+1|0;K=k+5|0;M=k+6|0;c[xa>>2]=M;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;P:do if(l|0){C=(Ba|0)==0;D=f+116|0;E=Aa+108|0;F=Aa+112|0;G=Aa+104|0;H=f+40|0;I=f+56|0;h=k+2|0;w=k+3|0;x=Aa+12|0;y=Da+480|0;z=Da+304|0;A=Da+308|0;B=Da+300|0;k=l;do{if(C){v=c[k+8>>2]|0;k=c[k>>2]|0}else{v=bd(f,0,Ba,la)|0;k=0}do if(v|0){t=v+16|0;if(!(c[t>>2]|0))break;m=c[v+72>>2]|0;if(!m)s=-1e6;else{n=c[ya>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0)){s=l;break}else l=l+1|0}o=c[D>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<>2]=m|n;if((s|0)!=1)break;r=c[o>>2]|0;l=r+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[r>>2]|0,0,r,wa,0,542)|0;if(m|0){cd(o,32157,na);c[o+12>>2]=m;break}ta=c[wa>>2]|0;c[(c[l>>2]|0)+20>>2]=ta;l=c[r+92>>2]|0;o=c[ta+4>>2]|0;c[o+4>>2]=c[ta>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;g=o+36|0;q=(c[p>>2]|0)-(c[g>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ta=(c[14820]|0)+1|0;c[14820]=ta;c[14821]=(ta|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159;break}else{l=Wa[c[29352>>2]&127](m)|0;za=1159}while(0);do if((za|0)==1159){za=0;c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ta=Se(c[o>>2]|0,p,q)|0;c[g>>2]=(c[p>>2]|0)-(q&65535);if((ta|0)!=7)break;l=r+81|0;do if(!(a[l>>0]|0)){if(a[r+82>>0]|0)break;a[l>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;l=r+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[r+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break Q}while(0)}while(0);Hj(f,s,c[v+28>>2]|0,0,c[v>>2]|0);l=M+(b[v+42>>1]|0)|0;if((l|0)>(c[xa>>2]|0)){c[xa>>2]=l;Gj(f,0,s,v,108)}else Gj(f,0,s,v,108);m=c[v>>2]|0;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;ta=c[G>>2]|0;a[ta+(l*20|0)>>0]=110;b[ta+(l*20|0)+2>>1]=0;c[ta+(l*20|0)+4>>2]=0;c[ta+(l*20|0)+8>>2]=J;c[ta+(l*20|0)+12>>2]=0;c[ta+(l*20|0)+16>>2]=0;a[ta+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,J,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[E>>2]|0)+-1|0;Ei(Aa,(c[G>>2]|0)+(l*20|0)|0,m,0)}l=c[t>>2]|0;if(!l)l=1;else{p=l;l=1;do{m=Sd(Da,c[p+8>>2]|0,la)|0;R:do if(m|0){c[oa>>2]=0;Hj(f,s,c[m+28>>2]|0,0,c[m>>2]|0);if(Om(f,m,p,oa,0)|0)break P;o=c[oa>>2]|0;if(!o){Gj(f,l,s,m,108);break}m=c[o+44>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=108;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=l;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=s;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,108,l,m,s)|0;n=c[ua>>2]|0;o=Ij(f,o)|0;if(!o)break;m=c[n>>2]|0;if(!(a[m+81>>0]|0)){sa=c[n+104>>2]|0;ta=(c[n+108>>2]|0)+-1|0;a[sa+(ta*20|0)+1>>0]=-9;c[sa+(ta*20|0)+16>>2]=o;break}if(c[m+480>>2]|0)break;ta=(c[o>>2]|0)+-1|0;c[o>>2]=ta;if(ta|0)break;m=c[o+12>>2]|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break R}n=o;if((c[m+304>>2]|0)>>>0>n>>>0)break;if((c[m+308>>2]|0)>>>0<=n>>>0)break;ta=m+300|0;c[o>>2]=c[ta>>2];c[ta>>2]=o;break R}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{ta=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}while(0);l=l+1|0;p=c[p+4>>2]|0}while((p|0)!=0)}if((c[H>>2]|0)<(l|0))c[H>>2]=l;l=c[E>>2]|0;if((c[F>>2]|0)>(l|0)){c[E>>2]=l+1;$=c[G>>2]|0;a[$+(l*20|0)>>0]=36;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));j=l}else j=Di(Aa,36,0,0,0)|0;l=c[t>>2]|0;if(l|0){i=v+36|0;u=1;while(1){s=l+8|0;m=Sd(Da,c[s>>2]|0,la)|0;c[oa>>2]=0;c[va>>2]=0;p=(m|0)!=0;if(p)Om(f,m,l,oa,va)|0;t=c[I>>2]|0;r=t+-1|0;c[I>>2]=r;g=l+20|0;m=c[g>>2]|0;if((m|0)>0){o=0;do{n=c[va>>2]|0;m=o+M|0;Vj(Aa,v,0,c[((n|0)==0?l+36+(o<<3)|0:n+(o<<2)|0)>>2]|0,m);n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=50;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=m;c[ta+(n*20|0)+8>>2]=r;c[ta+(n*20|0)+12>>2]=0;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0}else Di(Aa,50,m,r,0)|0;o=o+1|0;m=c[g>>2]|0}while((o|0)<(m|0))}n=c[oa>>2]|0;do if(!n){if(!p)break;m=c[E>>2]|0;n=m+2|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=30;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=n;c[ta+(m*20|0)+12>>2]=M;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,30,u,n,M)|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=11;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,11,0,r,0)|0;break}}else{q=gl(Da,n)|0;g=c[g>>2]|0;n=c[E>>2]|0;if((c[F>>2]|0)>(n|0)){c[E>>2]=n+1;ta=c[G>>2]|0;a[ta+(n*20|0)>>0]=92;b[ta+(n*20|0)+2>>1]=0;c[ta+(n*20|0)+4>>2]=M;c[ta+(n*20|0)+8>>2]=m;c[ta+(n*20|0)+12>>2]=K;c[ta+(n*20|0)+16>>2]=0;a[ta+(n*20|0)+1>>0]=0;m=n}else m=Di(Aa,92,M,m,K)|0;n=c[Aa>>2]|0;S:do if(!(a[n+81>>0]|0)){if((m|0)<0)m=(c[E>>2]|0)+-1|0;n=c[G>>2]|0;o=n+(m*20|0)|0;do if((g|0)<=-1){p=n+(m*20|0)+1|0;if(a[p>>0]|0)break;if((g|0)==-3){c[n+(m*20|0)+16>>2]=q;a[p>>0]=-3;break S}if(!q)break S;c[n+(m*20|0)+16>>2]=q;a[p>>0]=g;if((g|0)!=-12)break S;ta=q+12|0;c[ta>>2]=(c[ta>>2]|0)+1;break S}while(0);Ei(Aa,o,q,g)}else{if((g|0)==-12)break;kg(n,g,q)}while(0);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=29;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=u;c[ta+(m*20|0)+8>>2]=r;c[ta+(m*20|0)+12>>2]=K;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else m=Di(Aa,29,u,r,K)|0;if(a[(c[Aa>>2]|0)+81>>0]|0)break;ta=c[G>>2]|0;a[ta+(m*20|0)+1>>0]=-3;c[ta+(m*20|0)+16>>2]=0}while(0);m=c[E>>2]|0;n=(c[F>>2]|0)>(m|0);do if(!(c[i>>2]&32))if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=-128;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,128,0,h,0)|0;break}else if(n){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=73;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=h;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,h,0)|0;break}while(0);c[ma>>2]=c[s>>2];c[ma+4>>2]=u+-1;_m(Aa,w,45544,ma);m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=81;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=J;c[ta+(m*20|0)+8>>2]=4;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,81,J,4,0)|0;n=c[x>>2]|0;m=0-t|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0)mk(n,Aa,m);else c[(c[n+64>>2]|0)+(m<<2)>>2]=c[E>>2];m=c[va>>2]|0;T:do if(m|0){if(c[y>>2]|0){Xd(Da,m);break}n=m;do if((c[z>>2]|0)>>>0<=n>>>0){if((c[A>>2]|0)>>>0<=n>>>0)break;c[m>>2]=c[B>>2];c[B>>2]=m;break T}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ta=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ta;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[l+4>>2]|0;if(!l)break;else u=u+1|0}}l=j+1|0;m=c[E>>2]|0;if((c[F>>2]|0)>(m|0)){c[E>>2]=m+1;ta=c[G>>2]|0;a[ta+(m*20|0)>>0]=5;b[ta+(m*20|0)+2>>1]=0;c[ta+(m*20|0)+4>>2]=0;c[ta+(m*20|0)+8>>2]=l;c[ta+(m*20|0)+12>>2]=0;c[ta+(m*20|0)+16>>2]=0;a[ta+(m*20|0)+1>>0]=0}else Di(Aa,5,0,l,0)|0;m=c[E>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[G>>2]|0)+(((j|0)<0?m+-1|0:j)*20|0)|0;else l=59308;c[l+8>>2]=m}while(0)}while((k|0)!=0)}while(0);break f}case 6:{if(!Ba)break f;l=(Zm(Ba,1,0)|0)<<24>>24!=0;Aa=l?45976:31415;Hd(Da,43614,2,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43614,3,1,Aa,105,0,0,0,0,0)|0;Hd(Da,43609,2,1,31411,105,0,0,0,0,0)|0;Aa=Jd(Da,43609,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;Aa=Jd(Da,43609,3,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|12;l=l?12:4;Aa=Jd(Da,43614,2,1,0)|0;k=Aa+4|0;if(Aa|0)c[k>>2]=c[k>>2]|l&255;Aa=Jd(Da,43614,3,1,0)|0;k=Aa+4|0;if(!Aa)break f;c[k>>2]=c[k>>2]|l&255;break f}case 19:{V=(a[Ca>>0]|32)<<24>>24==113;U=(c[h>>2]|0)==0?-1:r;c[xa>>2]=6;c[oa>>2]=100;if(Ba){ii(Ba,oa)|0;k=c[oa>>2]|0;if((k|0)<1){c[oa>>2]=100;S=100}else S=k}else S=100;k=S+-1|0;T=Aa+108|0;l=c[T>>2]|0;R=Aa+112|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[Aa+104>>2]|0;a[oa+(l*20|0)>>0]=70;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=k;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,70,k,1,0)|0;z=Da+81|0;A=Da+20|0;U:do if((c[A>>2]|0)>0){B=(U|0)<0;C=f+116|0;D=Da+272|0;E=Da+276|0;F=Da+288|0;G=Da+300|0;H=Da+296|0;I=Da+284|0;h=f+19|0;J=f+28|0;K=Da+292|0;M=Aa+104|0;N=Da+32|0;O=f+56|0;P=Aa+12|0;Q=f+52|0;y=0;do{do if(B|(y|0)==(U|0)){n=c[C>>2]|0;n=(n|0)==0?f:n;k=n+84|0;l=c[k>>2]|0;m=1<>2]=l|m;if((y|0)!=1)break;q=c[n>>2]|0;k=q+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[n+199>>0]|0)break;l=Pe(c[q>>2]|0,0,q,wa,0,542)|0;if(l|0){cd(n,32157,qa);c[n+12>>2]=l;break}oa=c[wa>>2]|0;c[(c[k>>2]|0)+20>>2]=oa;k=c[q+92>>2]|0;n=c[oa+4>>2]|0;c[n+4>>2]=c[oa>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;g=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314;break}else{k=Wa[c[29352>>2]&127](l)|0;za=1314}while(0);do if((za|0)==1314){za=0;c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{oa=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);oa=Se(c[n>>2]|0,o,g)|0;c[p>>2]=(c[o>>2]|0)-(g&65535);if((oa|0)!=7)break;k=q+81|0;do if(!(a[k>>0]|0)){if(a[q+82>>0]|0)break;a[k>>0]=1;if((c[q+180>>2]|0)>0)c[q+264>>2]=1;k=q+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[q+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break V}while(0)}while(0);g=(c[(c[ya>>2]|0)+(y<<4)+12>>2]|0)+16|0;l=c[g>>2]|0;if(!l){m=0;k=0}else{m=0;k=0;do{n=c[l+8>>2]|0;k=((c[n+36>>2]|0)>>>5&1^1)+k|0;n=c[n+8>>2]|0;if(!n)o=0;else{o=0;do{k=k+1|0;o=o+1|0;n=c[n+20>>2]|0}while((n|0)!=0)}m=(o|0)>(m|0)?o:m;l=c[l>>2]|0}while((l|0)!=0)}l=(k<<2)+4|0;W:do if(c[D>>2]|0)if(!(a[z>>0]|0))za=1341;else break U;else{do if(0<0|(0==0?(e[E>>1]|0)>>>0>>0:0))k=F;else{k=c[G>>2]|0;if(k|0){c[G>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}k=c[H>>2]|0;if(!k){k=K;break}c[H>>2]=c[k>>2];c[I>>2]=(c[I>>2]|0)+1;p=k;break W}while(0);c[k>>2]=(c[k>>2]|0)+1;za=1341}while(0);if((za|0)==1341){za=0;p=_d(Da,l,0)|0}if(!p)break U;k=c[g>>2]|0;if(!k)l=0;else{l=0;do{o=c[k+8>>2]|0;n=l+1|0;if(!(c[o+36>>2]&32)){c[p+(n<<2)>>2]=c[o+28>>2];l=n}n=c[o+8>>2]|0;if(n)do{l=l+1|0;c[p+(l<<2)>>2]=c[n+44>>2];n=c[n+20>>2]|0}while((n|0)!=0);k=c[k>>2]|0}while((k|0)!=0)}c[p>>2]=l;oa=c[xa>>2]|0;k=m+8|0;c[xa>>2]=(oa|0)>(k|0)?oa:k;a[h>>0]=0;c[J>>2]=0;k=c[T>>2]|0;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=-109;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=l;c[oa+(k*20|0)+12>>2]=1;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,147,2,l,1)|0;l=c[Aa>>2]|0;X:do if(!(a[l+81>>0]|0)){if((k|0)<0)k=(c[T>>2]|0)+-1|0;l=c[M>>2]|0;m=l+(k*20|0)+1|0;if(!(a[m>>0]|0)){c[l+(k*20|0)+16>>2]=p;a[m>>0]=-15;break}else{Ei(Aa,l+(k*20|0)|0,p,-15);break}}else{do if(l|0){if(c[l+480>>2]|0){Xd(l,p);break X}k=p;if((c[l+304>>2]|0)>>>0>k>>>0)break;if((c[l+308>>2]|0)>>>0<=k>>>0)break;oa=l+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break X}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);k=c[T>>2]|0;if((k|0)>0)b[(c[M>>2]|0)+((k+-1|0)*20|0)+2>>1]=y&255;if((c[R>>2]|0)>(k|0)){c[T>>2]=k+1;oa=c[M>>2]|0;a[oa+(k*20|0)>>0]=50;b[oa+(k*20|0)+2>>1]=0;c[oa+(k*20|0)+4>>2]=2;c[oa+(k*20|0)+8>>2]=0;c[oa+(k*20|0)+12>>2]=0;c[oa+(k*20|0)+16>>2]=0;a[oa+(k*20|0)+1>>0]=0}else k=Di(Aa,50,2,0,0)|0;c[ra>>2]=c[(c[ya>>2]|0)+(y<<4)>>2];o=dd(Da,45548,ra)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=110;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=0;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else l=Di(Aa,110,0,3,0)|0;m=c[Aa>>2]|0;Y:do if(a[m+81>>0]|0){if(!o)break;do if(m|0){if(c[m+480>>2]|0){Xd(m,o);break Y}l=o;if((c[m+304>>2]|0)>>>0>l>>>0)break;if((c[m+308>>2]|0)>>>0<=l>>>0)break;oa=m+300|0;c[o>>2]=c[oa>>2];c[oa>>2]=o;break Y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{oa=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else{if((l|0)<0)l=(c[T>>2]|0)+-1|0;m=c[M>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(Aa,m+(l*20|0)|0,o,-7);break}if(!o)break;c[m+(l*20|0)+16>>2]=o;a[n>>0]=-7}while(0);l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=105;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=2;c[oa+(l*20|0)+8>>2]=3;c[oa+(l*20|0)+12>>2]=3;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,105,2,3,3)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=81;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=3;c[oa+(l*20|0)+8>>2]=1;c[oa+(l*20|0)+12>>2]=0;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;l=c[T>>2]|0;m=l+2|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;oa=c[M>>2]|0;a[oa+(l*20|0)>>0]=47;b[oa+(l*20|0)+2>>1]=0;c[oa+(l*20|0)+4>>2]=1;c[oa+(l*20|0)+8>>2]=m;c[oa+(l*20|0)+12>>2]=1;c[oa+(l*20|0)+16>>2]=0;a[oa+(l*20|0)+1>>0]=0}else Di(Aa,47,1,m,1)|0;l=c[T>>2]|0;if((c[R>>2]|0)>(l|0)){c[T>>2]=l+1;$=c[M>>2]|0;a[$+(l*20|0)>>0]=69;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;l=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=(c[M>>2]|0)+(((k|0)<0?l+-1|0:k)*20|0)|0;else k=59308;c[k+8>>2]=l;k=c[g>>2]|0;if(!k)break;do{u=c[k+8>>2]|0;do if((c[u+28>>2]|0)>=1){Z:do if(!(c[u+36>>2]&32))l=0;else{l=c[u+8>>2]|0;if(!l){l=0;break}while(1){oa=l+55|0;if(((d[oa>>0]|d[oa+1>>0]<<8)&3)==2)break Z;l=c[l+20>>2]|0;if(!l){l=0;break}}}while(0);Hm(f,u,108,0,1,0,wa,va)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=70;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=7;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,70,0,7,0)|0;x=u+8|0;m=c[x>>2]|0;if(m|0){n=0;while(1){o=n+8|0;p=c[T>>2]|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=70;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=0;c[oa+(p*20|0)+8>>2]=o;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else Di(Aa,70,0,o,0)|0;m=c[m+20>>2]|0;if(!m)break;else n=n+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=36;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=0;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,36,m,0,0)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;w=c[M>>2]|0;a[w+(m*20|0)>>0]=83;b[w+(m*20|0)+2>>1]=0;c[w+(m*20|0)+4>>2]=7;c[w+(m*20|0)+8>>2]=1;c[w+(m*20|0)+12>>2]=0;c[w+(m*20|0)+16>>2]=0;a[w+(m*20|0)+1>>0]=0;w=m}else w=Di(Aa,83,7,1,0)|0;do if(V)p=u+42|0;else{m=c[wa>>2]|0;p=u+42|0;n=(b[p>>1]|0)+-1|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=90;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=m;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,90,m,n,3)|0;m=c[T>>2]|0;if((m|0)<=0)break;b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128}while(0);m=b[p>>1]|0;if(m<<16>>16>0){s=u+40|0;t=u+4|0;r=0;do{do if((r|0)!=(b[s>>1]|0)){if(!(a[(c[t>>2]|0)+(r<<4)+12>>0]|0))break;Vj(Aa,u,c[wa>>2]|0,r,3);m=c[T>>2]|0;if((m|0)>0)b[(c[M>>2]|0)+((m+-1|0)*20|0)+2>>1]=128;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=51;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=0;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,51,3,0,0)|0;q=c[(c[t>>2]|0)+(r<<4)>>2]|0;c[sa>>2]=c[u>>2];c[sa+4>>2]=q;q=dd(Da,45572,sa)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;o=c[Aa>>2]|0;_:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break _}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;oa=o+300|0;c[q>>2]=c[oa>>2];c[oa>>2]=q;break _}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{oa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[T>>2]|0)+-1|0;o=c[M>>2]|0;g=o+(n*20|0)+1|0;if(a[g>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[g>>0]=-7}while(0);n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;o=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=o;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,o,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[M>>2]|0)+(((m|0)<0?n+-1|0:m)*20|0)|0;else m=59308;c[m+8>>2]=n;m=b[p>>1]|0}while(0);r=r+1|0}while((r|0)<(m<<16>>16|0))}m=c[u+24>>2]|0;$:do if(m|0){if(!((c[N>>2]&512|0)==0&0==0))break;q=gk(Da,m,0)|0;do if(!(a[z>>0]|0)){g=c[O>>2]|0;n=g+-1|0;o=g+-2|0;c[O>>2]=o;c[Q>>2]=(c[wa>>2]|0)+1;m=c[q>>2]|0;if((m|0)>1)do{oa=m;m=m+-1|0;Tj(f,c[q+4+(m*20|0)>>2]|0,n,0)}while((oa|0)>2);tk(f,c[q+4>>2]|0,o,16);m=c[P>>2]|0;n=0-g|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,n);else c[(c[m+64>>2]|0)+(n<<2)>>2]=c[T>>2];c[Q>>2]=0;c[ta>>2]=c[u>>2];p=dd(Da,45592,ta)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=3;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,3,0)|0;n=c[Aa>>2]|0;aa:do if(a[n+81>>0]|0){if(!p)break;do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break aa}m=p;if((c[n+304>>2]|0)>>>0>m>>>0)break;if((c[n+308>>2]|0)>>>0<=m>>>0)break;oa=n+300|0;c[p>>2]=c[oa>>2];c[oa>>2]=p;break aa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{oa=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else{if((m|0)<0)m=(c[T>>2]|0)+-1|0;n=c[M>>2]|0;o=n+(m*20|0)+1|0;if(a[o>>0]|0){Ei(Aa,n+(m*20|0)|0,p,-7);break}if(!p)break;c[n+(m*20|0)+16>>2]=p;a[o>>0]=-7}while(0);m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=81;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=3;c[oa+(m*20|0)+8>>2]=1;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;m=c[T>>2]|0;n=m+2|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=47;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=1;c[oa+(m*20|0)+8>>2]=n;c[oa+(m*20|0)+12>>2]=1;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,47,1,n,1)|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;$=c[M>>2]|0;a[$+(m*20|0)>>0]=69;$=$+(m*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;n=c[P>>2]|0;m=1-g|0;if(((c[n+56>>2]|0)+(c[n+60>>2]|0)|0)<0){mk(n,Aa,m);break}else{c[(c[n+64>>2]|0)+(m<<2)>>2]=c[T>>2];break}}else if(!q)break $;while(0);ri(Da,q)}while(0);if(V){l=c[wa>>2]|0;m=c[T>>2]|0;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=5;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=l;c[oa+(m*20|0)+8>>2]=w;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else Di(Aa,5,l,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else l=59308;c[l+8>>2]=m;break}m=c[x>>2]|0;if(m|0){v=u+4|0;n=-1;o=0;j=0;while(1){g=(c[O>>2]|0)+-1|0;c[O>>2]=g;do if((l|0)!=(m|0)){i=el(f,m,c[wa>>2]|0,0,0,pa,o,n)|0;n=j+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=83;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,83,n,1,0)|0;n=(c[va>>2]|0)+j|0;p=e[m+52>>1]|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=29;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=g;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0;g=o}else g=Di(Aa,29,n,g,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(g*20|0)+1>>0]=-3;c[oa+(g*20|0)+16>>2]=p}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45622,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=7;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,7,3,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,45627,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=3;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;p=c[m>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)o=(c[T>>2]|0)+-1|0;else o=n;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,p,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=105;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=4;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,105,4,3,3)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=81;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=3;c[oa+(o*20|0)+8>>2]=1;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;o=c[T>>2]|0;p=o+2|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;u=c[M>>2]|0;a[u+(o*20|0)>>0]=47;b[u+(o*20|0)+2>>1]=0;c[u+(o*20|0)+4>>2]=1;c[u+(o*20|0)+8>>2]=p;c[u+(o*20|0)+12>>2]=1;c[u+(o*20|0)+16>>2]=0;a[u+(o*20|0)+1>>0]=0;u=o}else u=Di(Aa,47,1,p,1)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;$=c[M>>2]|0;a[$+(o*20|0)>>0]=69;$=$+(o*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))o=(c[M>>2]|0)+(((g|0)<0?p+-1|0:g)*20|0)|0;else o=59308;c[o+8>>2]=p;do if(a[m+54>>0]|0){t=c[O>>2]|0;s=t+-1|0;c[O>>2]=s;r=m+50|0;if(b[r>>1]|0){p=m+4|0;o=0;do{oa=b[(c[p>>2]|0)+(o<<1)>>1]|0;if(!(oa<<16>>16>-1?(a[(c[v>>2]|0)+(oa<<16>>16<<4)+12>>0]|0)!=0:0))za=1581;do if((za|0)==1581){za=0;g=o+i|0;q=c[T>>2]|0;if((c[R>>2]|0)>(q|0)){c[T>>2]=q+1;oa=c[M>>2]|0;a[oa+(q*20|0)>>0]=50;b[oa+(q*20|0)+2>>1]=0;c[oa+(q*20|0)+4>>2]=g;c[oa+(q*20|0)+8>>2]=s;c[oa+(q*20|0)+12>>2]=0;c[oa+(q*20|0)+16>>2]=0;a[oa+(q*20|0)+1>>0]=0;break}else{Di(Aa,50,g,s,0)|0;break}}while(0);o=o+1|0}while(o>>>0<(e[r>>1]|0)>>>0);p=c[T>>2]|0}o=(c[va>>2]|0)+j|0;if((c[R>>2]|0)>(p|0)){c[T>>2]=p+1;oa=c[M>>2]|0;a[oa+(p*20|0)>>0]=5;b[oa+(p*20|0)+2>>1]=0;c[oa+(p*20|0)+4>>2]=o;c[oa+(p*20|0)+8>>2]=0;c[oa+(p*20|0)+12>>2]=0;c[oa+(p*20|0)+16>>2]=0;a[oa+(p*20|0)+1>>0]=0}else p=Di(Aa,5,o,0,0)|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,s,0)|0;o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))p=(c[M>>2]|0)+(((p|0)<0?o+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=o;p=(c[va>>2]|0)+j|0;g=e[r>>1]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=38;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=p;c[oa+(o*20|0)+8>>2]=s;c[oa+(o*20|0)+12>>2]=i;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,38,p,s,i)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){oa=c[M>>2]|0;a[oa+(o*20|0)+1>>0]=-3;c[oa+(o*20|0)+16>>2]=g}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=110;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,110,0,3,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(o*20|0)|0,45648,0)}o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=11;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=0;c[oa+(o*20|0)+8>>2]=n;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;o=c[P>>2]|0;n=0-t|0;if(((c[o+56>>2]|0)+(c[o+60>>2]|0)|0)<0){mk(o,Aa,n);break}else{c[(c[o+64>>2]|0)+(n<<2)>>2]=c[T>>2];break}}while(0);o=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((u|0)<0?o+-1|0:u)*20|0)|0;else n=59308;c[n+8>>2]=o;n=c[pa>>2]|0;if(!n){n=i;o=m;break}o=c[ua>>2]|0;p=c[o+12>>2]|0;n=~n;if(((c[p+56>>2]|0)+(c[p+60>>2]|0)|0)<0){mk(p,o,n);n=i;o=m;break}else{c[(c[p+64>>2]|0)+(n<<2)>>2]=c[o+108>>2];n=i;o=m;break}}while(0);m=c[m+20>>2]|0;if(!m)break;else j=j+1|0}}m=c[wa>>2]|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=5;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=m;c[oa+(n*20|0)+8>>2]=w;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,5,m,w,0)|0;m=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+((((w|0)<1?m:w)+-1|0)*20|0)|0;else n=59308;c[n+8>>2]=m;if((c[R>>2]|0)>(m|0)){c[T>>2]=m+1;oa=c[M>>2]|0;a[oa+(m*20|0)>>0]=110;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=2;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0}else m=Di(Aa,110,0,2,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(m*20|0)|0,45675,0)}m=c[x>>2]|0;if(!m)break;g=0;while(1){if((l|0)!=(m|0)){n=(c[va>>2]|0)+g|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=93;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=3;c[oa+(o*20|0)+12>>2]=0;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else Di(Aa,93,n,3,0)|0;n=g+8|0;o=c[T>>2]|0;if((c[R>>2]|0)>(o|0)){c[T>>2]=o+1;oa=c[M>>2]|0;a[oa+(o*20|0)>>0]=53;b[oa+(o*20|0)+2>>1]=0;c[oa+(o*20|0)+4>>2]=n;c[oa+(o*20|0)+8>>2]=0;c[oa+(o*20|0)+12>>2]=3;c[oa+(o*20|0)+16>>2]=0;a[oa+(o*20|0)+1>>0]=0}else o=Di(Aa,53,n,0,3)|0;n=c[T>>2]|0;if((n|0)>0)b[(c[M>>2]|0)+((n+-1|0)*20|0)+2>>1]=144;p=c[m>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=110;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=0;c[oa+(n*20|0)+8>>2]=4;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,4,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((n|0)<0)n=(c[T>>2]|0)+-1|0;Ei(Aa,(c[M>>2]|0)+(n*20|0)|0,p,0)}n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=105;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=4;c[oa+(n*20|0)+8>>2]=2;c[oa+(n*20|0)+12>>2]=3;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,105,4,2,3)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=81;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=3;c[oa+(n*20|0)+8>>2]=1;c[oa+(n*20|0)+12>>2]=0;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,81,3,1,0)|0;n=c[T>>2]|0;p=n+2|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;oa=c[M>>2]|0;a[oa+(n*20|0)>>0]=47;b[oa+(n*20|0)+2>>1]=0;c[oa+(n*20|0)+4>>2]=1;c[oa+(n*20|0)+8>>2]=p;c[oa+(n*20|0)+12>>2]=1;c[oa+(n*20|0)+16>>2]=0;a[oa+(n*20|0)+1>>0]=0}else Di(Aa,47,1,p,1)|0;n=c[T>>2]|0;if((c[R>>2]|0)>(n|0)){c[T>>2]=n+1;$=c[M>>2]|0;a[$+(n*20|0)>>0]=69;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else Di(Aa,69,0,0,0)|0;p=c[T>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))n=(c[M>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=p}m=c[m+20>>2]|0;if(!m)break;else g=g+1|0}}while(0);k=c[k>>2]|0}while((k|0)!=0)}while(0);y=y+1|0}while((y|0)<(c[A>>2]|0))}while(0);k=ed(Aa,7,18432)|0;if(k|0){c[k+8>>2]=1-S;a[k+41>>0]=-1;c[k+56>>2]=45704;a[k+101>>0]=-1;c[k+116>>2]=50394}if(!(a[(c[Aa>>2]|0)+81>>0]|0))k=c[Aa+104>>2]|0;else k=59308;c[k+12>>2]=(c[T>>2]|0)+-2;za=2020;break b}case 12:{if(!Ba){m=c[f>>2]|0;ba:do if(!(a[m+165>>0]|0)){n=f+4|0;o=m+24|0;p=(c[o>>2]&1|0)==0;g=m+16|0;ya=c[(c[g>>2]|0)+12>>2]|0;a[m+78>>0]=a[ya+77>>0]|0;if((b[ya+78>>1]&1)==0?(P=eh(m,0,n,0)|0,(P|0)!=0):0)k=P;else za=1682;ca:do if((za|0)==1682){k=c[m+20>>2]|0;if((k|0)>1)do{l=k;k=k+-1|0;if((b[(c[(c[g>>2]|0)+(k<<4)+12>>2]|0)+78>>1]&1)==0?(R=eh(m,k,n,0)|0,R|0):0){k=R;break ca}}while((l|0)>2);if(p)c[o>>2]=c[o>>2]&-2;if(!(a[m+89>>0]|0))break ba;c[o>>2]=c[o>>2]|16;break ba}while(0);c[f+12>>2]=k;Aa=f+36|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break f}while(0);za=a[(c[f>>2]|0)+78>>0]|0;l=c[18464+((za&255)<<3)>>2]|0;if(za<<24>>24==8)break f;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;Ei(Aa,(c[Aa+104>>2]|0)+(k*20|0)|0,l,0)}k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,1,0)|0;break f}}o=c[(c[ya>>2]|0)+12>>2]|0;if((b[o+78>>1]&5)==1){za=2020;break b}k=a[Ba>>0]|0;da:do if(k<<24>>24){k=(d[208+(k&255)>>0]|0)+-117|0;n=(k|0)==0;if(n){l=45707;m=Ba;do{m=m+1|0;l=l+1|0;Aa=a[m>>0]|0;k=(d[208+(Aa&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(k|0)!=0))}do if(k){if(!n)break da;k=45712;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18472;break}k=45718;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18480;break}k=45727;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18488;break}k=45736;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18496;break}k=45744;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18504;break}k=45752;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m){k=18512;break}k=45759;l=Ba;do{l=l+1|0;k=k+1|0;Aa=a[l>>0]|0;m=(d[208+(Aa&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(m|0)!=0));if(!m)k=18520;else break da}else k=18464;while(0);za=a[k+4>>0]|0;za=za<<24>>24==0?2:za;a[Da+78>>0]=za;a[o+77>>0]=za;za=2020;break b}while(0);c[ca>>2]=Ba;cd(f,45765,ca);break f}case 0:{k=c[4544+(j<<4)+8>>2]|0;l=1<>2]=c[za>>2]|l;if(!$?a[(c[(c[(c[Aa>>2]|0)+16>>2]|0)+(r<<4)+4>>2]|0)+9>>0]|0:0){za=Aa+156|0;c[za>>2]=c[za>>2]|l}ea:do if(Ba|0){switch(o|0){case 24:case 25:case 42:case 43:break ea;default:{}}Aa=ed(Aa,2,45790)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+28>>2]=k;c[wa>>2]=0;ii(Ba,wa)|0;c[Aa+32>>2]=c[wa>>2];break f}while(0);Aa=ed(Aa,3,45798)|0;c[Aa+4>>2]=r;c[Aa+24>>2]=r;c[Aa+32>>2]=k;Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 8:{c[xa>>2]=1;n=Aa+108|0;o=Aa+112|0;p=Aa+104|0;m=0;do{l=c[26464+(m<<2)>>2]|0;m=m+1|0;k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=110;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,110,0,1,0)|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((k|0)<0)k=(c[n>>2]|0)+-1|0;Ei(Aa,(c[p>>2]|0)+(k*20|0)|0,l,0)}k=c[n>>2]|0;if((c[o>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[p>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0}while((m|0)!=7);Aa=(d[F>>0]|d[F+1>>0]<<8)&-65;a[F>>0]=Aa;a[F+1>>0]=Aa>>8;break f}case 39:{p=(c[h>>2]|0)==0?10:r;do if(Ba){o=a[Ba>>0]|0;n=d[208+(o&255)>>0]|0;k=n+-102|0;o=o<<24>>24==0;if(!(o|(k|0)!=0)){l=45810;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k)l=1;else{k=n+-114|0;if(!(o|(k|0)!=0)){l=45815;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}if(!k){l=2;break}k=n+-116|0;if(!(o|(k|0)!=0)){l=36052;m=Ba;do{m=m+1|0;l=l+1|0;za=a[m>>0]|0;k=(d[208+(za&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(za<<24>>24==0|(k|0)!=0))}l=(k|0)==0?3:0}}else l=0;while(0);c[xa>>2]=3;m=Aa+108|0;k=c[m>>2]|0;n=Aa+112|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=6;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=p;c[za+(k*20|0)+8>>2]=l;c[za+(k*20|0)+12>>2]=1;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else Di(Aa,6,p,l,1)|0;k=c[m>>2]|0;if((c[n>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=3;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0;break f}else{Di(Aa,81,1,3,0)|0;break f}}case 38:{if(!Ba)k=c[Da+240>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;za=c[wa>>2]|0;ya=(za|0)>0;k=ya?76:0;c[Da+240>>2]=k;c[Da+244>>2]=ya?za:0}if((k|0)==76){o=c[Da+244>>2]|0;n=o;o=((o|0)<0)<<31>>31}else{n=0;o=0}m=c[Aa>>2]|0;fa:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1767;else za=1787;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1768;break fa}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1767}while(0);if((za|0)==1767){p=_d(m,8,0)|0;za=1768}ga:do if((za|0)==1768){if(!p){za=1787;break}m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break ga}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break ga}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}while(0);do if((za|0)==1787){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}case 31:{o=Da+20|0;m=c[o>>2]|0;if((m|0)<=0){za=2020;break b}n=c[ya>>2]|0;k=0;do{l=c[n+(k<<4)+4>>2]|0;if(l|0)c[(c[l+4>>2]|0)+4>>2]=c[l>>2];k=k+1|0}while((k|0)!=(m|0));k=0;while(1){l=c[n+(k<<4)+4>>2]|0;if(!l)l=m;else{ab[c[29456>>2]&127](c[(c[(c[c[l+4>>2]>>2]|0)+212>>2]|0)+44>>2]|0);l=c[o>>2]|0}k=k+1|0;if((k|0)>=(l|0)){za=2020;break b}n=c[ya>>2]|0;m=l}}case 27:{if(Ba){c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;if(!(k&2))break f}else k=65534;wa=f+40|0;w=c[wa>>2]|0;c[wa>>2]=w+1;if(!la)j=(c[Da+20>>2]|0)+-1|0;else j=r;if((r|0)>(j|0)){m=Aa+108|0;k=Aa+112|0}else{v=f+116|0;t=k&1;s=(t|0)==0;m=Aa+108|0;t=t|2;k=Aa+112|0;u=f+19|0;i=Aa+104|0;while(1){do if((r|0)!=1){l=c[v>>2]|0;l=((l|0)==0?f:l)+84|0;n=c[l>>2]|0;o=1<>2]=n|o;l=c[(c[(c[ya>>2]|0)+(r<<4)+12>>2]|0)+16>>2]|0;if(!l)break;do{q=c[l+8>>2]|0;ha:do if(c[q+36>>2]&256|0){g=(e[q+44>>1]|0)+46|0;o=g&65535;n=c[q+8>>2]|0;ia:do if(!n)za=1825;else while(1){wa=n+55|0;if(!((d[wa>>0]|d[wa+1>>0]<<8)&128))break ia;n=c[n+20>>2]|0;if(!n){za=1825;break}}while(0);do if((za|0)==1825){za=0;if(!(o<<16>>16))break;Gj(f,w,r,q,108);o=c[m>>2]|0;p=o+t|0;n=g<<16>>16;if((c[k>>2]|0)>(o|0)){c[m>>2]=o+1;wa=c[i>>2]|0;a[wa+(o*20|0)>>0]=33;b[wa+(o*20|0)+2>>1]=0;c[wa+(o*20|0)+4>>2]=w;c[wa+(o*20|0)+8>>2]=p;c[wa+(o*20|0)+12>>2]=n;c[wa+(o*20|0)+16>>2]=0;a[wa+(o*20|0)+1>>0]=0;break}else{Di(Aa,33,w,p,n)|0;break}}while(0);q=c[q>>2]|0;c[ha>>2]=c[(c[ya>>2]|0)+(r<<4)>>2];c[ha+4>>2]=q;q=dd(Da,45823,ha)|0;if(s){n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;$=c[i>>2]|0;a[$+(n*20|0)>>0]=-116;$=$+(n*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0))}else n=Di(Aa,140,0,0,0)|0;o=c[Aa>>2]|0;if(!(a[o+81>>0]|0)){if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7;break}if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ha}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ha}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}n=a[u>>0]|0;if(!(n<<24>>24)){g=(c[xa>>2]|0)+1|0;c[xa>>2]=g}else{g=n+-1<<24>>24;a[u>>0]=g;g=c[f+148+((g&255)<<2)>>2]|0}n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=110;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=0;c[wa+(n*20|0)+8>>2]=g;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0}else n=Di(Aa,110,0,g,0)|0;o=c[Aa>>2]|0;ja:do if(a[o+81>>0]|0){if(!q)break;do if(o|0){if(c[o+480>>2]|0){Xd(o,q);break ja}n=q;if((c[o+304>>2]|0)>>>0>n>>>0)break;if((c[o+308>>2]|0)>>>0<=n>>>0)break;wa=o+300|0;c[q>>2]=c[wa>>2];c[wa>>2]=q;break ja}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{wa=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}}else{if((n|0)<0)n=(c[m>>2]|0)+-1|0;o=c[i>>2]|0;p=o+(n*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(n*20|0)|0,q,-7);break}if(!q)break;c[o+(n*20|0)+16>>2]=q;a[p>>0]=-7}while(0);n=c[m>>2]|0;if((c[k>>2]|0)>(n|0)){c[m>>2]=n+1;wa=c[i>>2]|0;a[wa+(n*20|0)>>0]=81;b[wa+(n*20|0)+2>>1]=0;c[wa+(n*20|0)+4>>2]=g;c[wa+(n*20|0)+8>>2]=1;c[wa+(n*20|0)+12>>2]=0;c[wa+(n*20|0)+16>>2]=0;a[wa+(n*20|0)+1>>0]=0;break}else{Di(Aa,81,g,1,0)|0;break}}while(0);l=c[l>>2]|0}while((l|0)!=0)}while(0);if((r|0)<(j|0))r=r+1|0;else break}}l=c[m>>2]|0;if((c[k>>2]|0)>(l|0)){c[m>>2]=l+1;$=c[Aa+104>>2]|0;a[$+(l*20|0)>>0]=-98;$=$+(l*20|0)+1|0;aa=$+19|0;do{a[$>>0]=0;$=$+1|0}while(($|0)<(aa|0));break f}else{Di(Aa,158,0,0,0)|0;break f}}case 32:{if((Ba|0?(Vd(Ba,wa)|0)==0:0)?(H=wa,G=c[H>>2]|0,H=c[H+4>>2]|0,!((H|0)<0|(mb()|0)!=0)):0){za=59064;c[za>>2]=G;c[za+4>>2]=H;c[14768]=((G|0)!=0|(H|0)!=0)&((H|0)<0|(H|0)==0&G>>>0<=(c[14978]|0)>>>0)&1}m=(mb()|0)==0;o=59064;n=m?c[o>>2]|0:-1;o=m?c[o+4>>2]|0:-1;m=c[Aa>>2]|0;ka:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1942;else za=1962;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1943;break ka}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1942}while(0);if((za|0)==1942){p=_d(m,8,0)|0;za=1943}la:do if((za|0)==1943)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break la}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break la}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=1962;while(0);do if((za|0)==1962){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;break f}case 37:{if(Ba|0?(f=(Vd(Ba,wa)|0)==0,za=wa,ya=c[za+4>>2]|0,f&((ya|0)>-1|(ya|0)==-1&(c[za>>2]|0)>>>0>4294967295)):0)c[Da+152>>2]=0;n=c[Da+152>>2]|0;o=((n|0)<0)<<31>>31;m=c[Aa>>2]|0;ma:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))za=1987;else za=2007;else{do if((e[m+276>>1]|0)>=8){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];p=m+284|0;c[p>>2]=(c[p>>2]|0)+1;p=l;za=1988;break ma}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;za=1987}while(0);if((za|0)==1987){p=_d(m,8,0)|0;za=1988}na:do if((za|0)==1988)if(p){m=p;k=m;a[k>>0]=n;a[k+1>>0]=n>>8;a[k+2>>0]=n>>16;a[k+3>>0]=n>>24;m=m+4|0;a[m>>0]=o;a[m+1>>0]=o>>8;a[m+2>>0]=o>>16;a[m+3>>0]=o>>24;m=Aa+108|0;k=c[m>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[m>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=p;a[o>>0]=-14;break}else{Ei(Aa,n+(k*20|0)|0,p,-14);break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,p);break na}k=p;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[p>>2]=c[ya>>2];c[ya>>2]=p;break na}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{ya=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else za=2007;while(0);do if((za|0)==2007){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;Aa=c[Aa+104>>2]|0;a[Aa+(k*20|0)>>0]=81;b[Aa+(k*20|0)+2>>1]=0;c[Aa+(k*20|0)+4>>2]=1;c[Aa+(k*20|0)+8>>2]=1;c[Aa+(k*20|0)+12>>2]=0;c[Aa+(k*20|0)+16>>2]=0;a[Aa+(k*20|0)+1>>0]=0}else Di(Aa,81,1,1,0)|0;za=2020;break b}default:{if(!Ba)k=c[Da+448>>2]|0;else{c[wa>>2]=0;ii(Ba,wa)|0;k=c[wa>>2]|0;l=Da+396|0;if((k|0)>0){c[l>>2]=91;c[Da+400>>2]=Da;c[t>>2]=0;a[Da+408>>0]=1}else{c[l>>2]=0;c[l+4>>2]=0;c[l+8>>2]=0;a[l+12>>0]=0;k=0}c[Da+448>>2]=k}o=((k|0)<0)<<31>>31;n=c[Aa>>2]|0;oa:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))za=1897;else za=1917;else{do if((e[n+276>>1]|0)>=8){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];za=n+284|0;c[za>>2]=(c[za>>2]|0)+1;za=1898;break oa}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;za=1897}while(0);if((za|0)==1897){m=_d(n,8,0)|0;za=1898}pa:do if((za|0)==1898)if(m){p=m;l=p;a[l>>0]=k;a[l+1>>0]=k>>8;a[l+2>>0]=k>>16;a[l+3>>0]=k>>24;p=p+4|0;a[p>>0]=o;a[p+1>>0]=o>>8;a[p+2>>0]=o>>16;a[p+3>>0]=o>>24;p=Aa+108|0;k=c[p>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[p>>2]=k+1;ya=c[Aa+104>>2]|0;a[ya+(k*20|0)>>0]=71;b[ya+(k*20|0)+2>>1]=0;c[ya+(k*20|0)+4>>2]=0;c[ya+(k*20|0)+8>>2]=1;c[ya+(k*20|0)+12>>2]=0;c[ya+(k*20|0)+16>>2]=0;a[ya+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;n=c[Aa>>2]|0;if(!(a[n+81>>0]|0)){if((k|0)<0)k=(c[p>>2]|0)+-1|0;n=c[Aa+104>>2]|0;o=n+(k*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(k*20|0)+16>>2]=m;a[o>>0]=-14;m=p;break}else{Ei(Aa,n+(k*20|0)|0,m,-14);m=p;break}}do if(n|0){if(c[n+480>>2]|0){Xd(n,m);m=p;break pa}k=m;if((c[n+304>>2]|0)>>>0>k>>>0)break;if((c[n+308>>2]|0)>>>0<=k>>>0)break;ya=n+300|0;c[m>>2]=c[ya>>2];c[ya>>2]=m;m=p;break pa}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);m=p;break}else{ya=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ya;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);m=p;break}}else za=1917;while(0);do if((za|0)==1917){n=Aa+108|0;k=c[n>>2]|0;l=Aa+112|0;if((c[l>>2]|0)>(k|0)){c[n>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=71;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=0;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0}else k=Di(Aa,71,0,1,0)|0;if(a[(c[Aa>>2]|0)+81>>0]|0){m=n;break}if((k|0)<0)k=(c[n>>2]|0)+-1|0;m=c[Aa+104>>2]|0;if(!(a[m+(k*20|0)+1>>0]|0)){m=n;break}Ei(Aa,m+(k*20|0)|0,0,-14);m=n}while(0);k=c[m>>2]|0;if((c[l>>2]|0)>(k|0)){c[m>>2]=k+1;za=c[Aa+104>>2]|0;a[za+(k*20|0)>>0]=81;b[za+(k*20|0)+2>>1]=0;c[za+(k*20|0)+4>>2]=1;c[za+(k*20|0)+8>>2]=1;c[za+(k*20|0)+12>>2]=0;c[za+(k*20|0)+16>>2]=0;a[za+(k*20|0)+1>>0]=0;za=2020;break b}else{Di(Aa,81,1,1,0)|0;za=2020;break b}}}while(0)}while(0);if(!Da){za=2025;break b}else{za=2020;break b}}else k=1;while(0);za=f+36|0;c[za>>2]=(c[za>>2]|0)+1;c[f+12>>2]=k;za=2020}while(0);do if((za|0)==2020){if(c[Da+480>>2]|0){Xd(Da,Ca);break}Aa=Ca;if((c[Da+304>>2]|0)>>>0<=Aa>>>0?(c[Da+308>>2]|0)>>>0>Aa>>>0:0){Aa=Da+300|0;c[Ca>>2]=c[Aa>>2];c[Aa>>2]=Ca}else za=2025}while(0);do if((za|0)==2025)if(!(c[7324]|0)){ab[c[29344>>2]&127](Ca);break}else{Aa=Wa[c[29352>>2]&127](Ca)|0;c[14978]=(c[14978]|0)-Aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ca);break}while(0);if(!Ba){Ra=Ea;return}if(Da|0){if(c[Da+480>>2]|0){Xd(Da,Ba);Ra=Ea;return}Ca=Ba;if((c[Da+304>>2]|0)>>>0<=Ca>>>0?(c[Da+308>>2]|0)>>>0>Ca>>>0:0){Da=Da+300|0;c[Ba>>2]=c[Da>>2];c[Da>>2]=Ba;Ra=Ea;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](Ba);Ra=Ea;return}else{Da=Wa[c[29352>>2]&127](Ba)|0;c[14978]=(c[14978]|0)-Da;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Ba);Ra=Ea;return}} function Or(f,g,h){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,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,Sa=0,Ta=0,Ua=0,Va=0,Xa=0,Ya=0,Za=0,_a=0,$a=0,bb=0,cb=0,db=0,eb=0,fb=0,gb=0,hb=0,ib=0,jb=0,kb=0,lb=0,ob=0,qb=0,rb=0,tb=0,ub=0,vb=0,wb=0,xb=0,yb=0,zb=0,Ab=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;Nb=Ra;Ra=Ra+256|0;Jb=Nb+232|0;Hb=Nb+224|0;Gb=Nb+216|0;Fb=Nb+208|0;Eb=Nb+200|0;Db=Nb+192|0;Cb=Nb+184|0;Ab=Nb+176|0;zb=Nb+168|0;yb=Nb+160|0;xb=Nb+152|0;vb=Nb+144|0;ub=Nb+136|0;tb=Nb+128|0;Ib=Nb+120|0;wb=Nb+112|0;l=Nb+104|0;Kb=Nb+56|0;lb=Nb+244|0;ob=Nb+8|0;qb=Nb;rb=Nb+240|0;if(mb()|0){Mb=7;Ra=Nb;return Mb|0}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](640)|0;if(!i){Mb=7;Ra=Nb;return Mb|0}else Lb=i}else{i=Wa[c[29356>>2]&127](640)|0;if((c[14985]|0)>>>0<640)c[14985]=640;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){Lb=c[14978]|0;jb=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;ib=L()|0;c[14768]=((ib|0)<0|(ib|0)==0&jb>>>0<=Lb>>>0)&1}j=Wa[c[29340>>2]&127](i)|0;if(!j){Mb=7;Ra=Nb;return Mb|0}i=Wa[c[29352>>2]&127](j)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0){c[14987]=i;Lb=j}else Lb=j}ib=Lb+568|0;jb=Lb+584|0;k=f+144|0;i=c[k>>2]|0;c[Kb>>2]=i;do if(!i){i=c[f+20>>2]|0;c[l>>2]=c[f+16>>2];c[l+4>>2]=i;i=Bb(52411,l)|0;if(!i){j=7;i=0;break}j=qd(c[f+12>>2]|0,i,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](i);else{hb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-hb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i)}i=c[Kb>>2]|0;c[k>>2]=i;if(!j){m=i;M=21}else i=0}else{m=i;M=21}while(0);do if((M|0)==21){o=m;do if(!(Vc(o,1)|0)){i=c[o+100>>2]|0;j=i+8|0;if(!(b[j>>1]&9216)){hb=i;c[hb>>2]=1;c[hb+4>>2]=0;b[j>>1]=4;break}else{Pg(i,1,0);break}}while(0);do if((Gc(o)|0)==100){if(!m)j=mc(29576)|0;else{i=c[o+120>>2]|0;if((i|0)!=0?(b[o+144>>1]|0)!=0:0)j=o;else{i=c[o>>2]|0;c[i+64>>2]=25;Ne(i,25);i=29576;j=o}l=mc(i)|0;i=c[j>>2]|0;k=o+40|0;j=c[k>>2]|0;if((j|0)==3082|(a[i+81>>0]|0)!=0){og(i);i=7}else i=c[i+68>>2]&j;c[k>>2]=i;j=l}n=Lc(o,0)|0;if(j){if((n|0)>0){if(mb()|0){l=7;i=0;n=0;p=0;break}i=sb(0,n,0)|0;if(!i){l=7;i=0;n=0;p=0;break}else k=n}else{i=0;k=0}ew(i|0,j|0,n|0)|0;l=0;p=k}else{l=0;i=0;n=0;p=0}}else{l=0;i=0;n=0;p=0}while(0);do if(m){j=c[o>>2]|0;hb=o+136|0;gb=c[hb+4>>2]|0;if((gb|0)>0|(gb|0)==0&(c[hb>>2]|0)>>>0>0)hc(j,o);k=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;hb=o+64|0;c[hb>>2]=0;c[hb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}else j=0;while(0);j=(l|0)==0?j:l;if((j|0)==0&(g|0)>0){eb=f+252|0;fb=f+168|0;gb=f+16|0;hb=f+20|0;Q=(h|0)>2?h:2;R=f+12|0;S=Lb+580|0;T=f+88|0;U=Lb+588|0;V=f+116|0;W=Lb+600|0;X=f+104|0;Y=Lb+596|0;Z=Lb+572|0;_=Lb+624|0;$=Lb+628|0;aa=f+184|0;ba=Lb+40|0;ca=f+172|0;da=Lb+632|0;ea=Lb+636|0;fa=Lb+64|0;ga=Lb+68|0;ha=Lb+76|0;ia=Lb+80|0;ja=f+228|0;ka=Lb+56|0;la=Lb+4|0;ma=Lb+84|0;na=Lb+48|0;oa=Lb+116|0;pa=Lb+108|0;qa=Lb+8|0;ra=Lb+16|0;sa=Lb+24|0;ta=Lb+32|0;ua=f+96|0;va=Lb+112|0;wa=Lb+88|0;xa=Lb+120|0;ya=Lb+152|0;za=Lb+184|0;Aa=Lb+216|0;Ba=Lb+248|0;Ca=Lb+280|0;Da=Lb+312|0;Ea=Lb+344|0;Fa=Lb+376|0;Ga=Lb+408|0;Ha=Lb+440|0;Ia=Lb+472|0;Ja=Lb+504|0;Ka=Lb+536|0;La=f+192|0;Ma=f+176|0;Na=f+124|0;Oa=ob+4|0;Pa=f+188|0;Qa=lb+4|0;Sa=f+196|0;Ta=ob+8|0;Ua=ob+4|0;Va=f+236|0;Xa=ob+16|0;Ya=ob+24|0;Za=ob+28|0;_a=Kb+8|0;$a=Kb+4|0;bb=Kb+16|0;cb=Kb+28|0;P=Kb+24|0;db=f+180|0;K=g;k=0;o=0;h=0;while(1){u=c[eb>>2]<<10;v=((u|0)<0)<<31>>31;O=c[fb>>2]|0;c[Kb>>2]=O;j=O;if((O|0)==0?(kb=c[hb>>2]|0,c[wb>>2]=c[gb>>2],c[wb+4>>2]=kb,kb=Bb(52607,wb)|0,(kb|0)!=0):0){qd(c[R>>2]|0,kb,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](kb);else{O=Wa[c[29352>>2]&127](kb)|0;c[14978]=(c[14978]|0)-O;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](kb)}j=c[Kb>>2]|0;c[fb>>2]=j}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){O=l;c[O>>2]=Q;c[O+4>>2]=0;b[m>>1]=4;break}else{Pg(l,Q,0);break}}while(0);if((Gc(g)|0)==100){o=Oc(g,0)|0;h=L()|0;t=Nc(g,1)|0}else t=-1;do if(j){j=c[g>>2]|0;O=g+136|0;N=c[O+4>>2]|0;if((N|0)>0|(N|0)==0&(c[O>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;O=g+64|0;c[O>>2]=0;c[O+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j){M=67;break}else{M=94;break}}else{og(j);j=7;M=94;break}}else M=67;while(0);if((M|0)==67){M=0;if(n){j=n+-2|0;a:do if((n|0)>2)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0)break a;if((j|0)>1)j=l;else{j=l;break}}while(0);b:do if((j|0)>0)while(1){l=j+-1|0;if((a[i+l>>0]|0)>=0){l=j;break b}if((j|0)>1)j=l;else break}else l=j;while(0);r=i+l|0;m=a[r>>0]|0;j=m&255;do if(!(j&128)){g=1;s=m&255;q=0}else{O=d[r+1>>0]|0;j=O<<7|j&127;if(!(O&128)){g=2;s=j;q=0;break}O=d[r+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){g=3;s=j;q=0;break}O=d[r+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){g=4;s=j;q=0;break}m=28;g=r+4|0;j=j&268435455;q=0;do{O=g;g=g+1|0;O=d[O>>0]|0;N=cw(O&127|0,0,m|0)|0;j=Sv(N|0,L()|0,j|0,q|0)|0;q=L()|0;m=m+7|0}while(m>>>0<64&((O&128|0)!=0|0!=0));g=g-r|0;s=j}while(0);r=g+l|0;g=i+r|0;j=a[g>>0]|0;m=j&255;do if(!(m&128))j=1;else{O=d[g+1>>0]|0;j=O<<7|j&127;if(!(O&128)){m=j;j=2;break}O=d[g+2>>0]|0;j=O<<14|j&16383;if(!(O&128)){m=j;j=3;break}O=d[g+3>>0]|0;j=O<<21|j&2097151;if(!(O&128)){m=j;j=4;break}m=(a[g+4>>0]&7)<<28|j&268435455;j=5}while(0);j=(j+r|0)==(n|0)?0:267;if((t|0)<0){E=1;J=m;k=1;n=l;O=s;N=q}else{E=Zv(o|0,h|0,u|0,v|0)|0;O=L()|0;N=Zv(s|0,q|0,u|0,v|0)|0;J=L()|0;N=(O|0)<(J|0)|(O|0)==(J|0)&E>>>0>>0;E=(N^1)&1;J=N?t:m;k=N?k:1;n=N?n:l;O=N?o:s;N=N?h:q}}else{j=0;n=0;M=94}}if((M|0)==94){M=0;if((t|0)<0)break;else{E=0;J=t;O=o;N=h}}gw(Lb|0,0,640)|0;c[S>>2]=1;c:do if(!j){j=c[T>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[Ib>>2]=c[gb>>2];c[Ib+4>>2]=j;j=Bb(51533,Ib)|0;if(!j){s=0;M=116;break}l=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{M=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[T>>2]=j;if(!l)M=104;else{s=0;M=116}}else M=104;while(0);if((M|0)==104){M=0;g=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(g,1)|0)){o=c[g+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);Gc(g)|0;m=Nc(g,0)|0;do if(j){j=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(m)if((E|0)!=0&(m|0)==1){s=1;M=116}else D=m;else{s=0;M=116}}do if((M|0)==116){M=0;g=Sv(O|0,N|0,1,0)|0;q=L()|0;j=c[V>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[tb>>2]=c[gb>>2];c[tb+4>>2]=l;l=Bb(52072,tb)|0;if(!l){m=K;j=7;l=p;M=801;break c}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[V>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break c}}r=j;l=Sv(O|0,N|0,2,0)|0;m=L()|0;do if(!(Vc(r,1)|0)){o=c[r+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=Wv(g|0,q|0,1024,0)|0;l=cw(l|0,L()|0,10)|0;l=Sv(l|0,L()|0,1024,0)|0;m=L()|0;do if(!(Vc(r,2)|0)){h=c[r+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(r)|0)==100){if(!j)l=1;else{l=c[r+120>>2]|0;do if(!l)M=137;else{if(!(b[r+144>>1]|0)){M=137;break}m=r}while(0);if((M|0)==137){M=0;l=c[r>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=r}l=b[l+8>>1]&31;m=c[m>>2]|0;h=r+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=-1431655766>>>l&1}else m=0;do if(j){j=c[r>>2]|0;I=r+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(j,r);l=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;I=r+64|0;c[I>>2]=0;c[I+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);if(!m){D=s;break}c[S>>2]=c[S>>2]|2;D=s}while(0);if(!j){A=jb;B=A+56|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));j=J<<2;l=pb(j,0)|0;c[jb>>2]=l;if(!l){m=K;j=7;l=p;M=801}else{gw(l|0,0,j|0)|0;j=c[X>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[ub>>2]=c[gb>>2];c[ub+4>>2]=l;l=Bb(51773,ub)|0;if(!l){m=K;j=7;l=p;M=801;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[X>>2]=l;if(!j)j=l;else{m=K;l=p;M=801;break}}C=j;do if(!(Vc(C,1)|0)){l=c[C+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){I=l;c[I>>2]=O;c[I+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);y=(j|0)==0;w=C+120|0;z=C+40|0;x=C+144|0;j=(J|0)>0&(Gc(C)|0)==100;d:do if(y){if(!j){j=0;M=206;break}r=0;while(1){l=Oc(C,1)|0;m=L()|0;o=Oc(C,2)|0;h=L()|0;g=Oc(C,3)|0;q=L()|0;s=mc(29576)|0;t=Lc(C,4)|0;u=(c[jb>>2]|0)+(r<<2)|0;if((l|0)==0&(m|0)==0){if(!((o|0)==0&(h|0)==0)){j=267;break}j=t+20|0}else j=0;v=nb(j+96|0)|0;if(!v){j=7;break}A=v;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[v>>2]=r;a[v+4>>0]=0;M=v+8|0;c[M>>2]=l;c[M+4>>2]=m;M=v+16|0;c[M>>2]=o;c[M+4>>2]=h;M=v+24|0;c[M>>2]=g;c[M+4>>2]=q;if(!j){H=Sv(l|0,m|0,-1,-1)|0;I=L()|0;M=v+32|0;c[M>>2]=H;c[M+4>>2]=I}else{j=v+96|0;c[v+40>>2]=j;a[v+5>>0]=1;c[v+44>>2]=t;if(t|0)ew(j|0,s|0,t|0)|0;A=j+t|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[u>>2]=v;c[U>>2]=(c[U>>2]|0)+1;r=r+1|0;if(!((r|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}else{if(!j){j=0;l=1;M=200;break}v=0;while(1){g=Oc(C,1)|0;q=L()|0;r=Oc(C,2)|0;s=L()|0;t=Oc(C,3)|0;u=L()|0;j=c[w>>2]|0;do if(!j)M=184;else{if((e[x>>1]|0)<=4){M=184;break}j=j+160|0}while(0);if((M|0)==184){M=0;j=c[C>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}h=mc(j)|0;j=c[C>>2]|0;l=c[z>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[z>>2]=j;l=Lc(C,4)|0;m=(c[jb>>2]|0)+(v<<2)|0;if((g|0)==0&(q|0)==0){if(!((r|0)==0&(s|0)==0)){j=267;break}j=l+20|0}else j=0;o=nb(j+96|0)|0;if(!o){j=7;break}A=o;B=A+96|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[o>>2]=v;a[o+4>>0]=0;I=o+8|0;c[I>>2]=g;c[I+4>>2]=q;I=o+16|0;c[I>>2]=r;c[I+4>>2]=s;I=o+24|0;c[I>>2]=t;c[I+4>>2]=u;if(!j){F=Sv(g|0,q|0,-1,-1)|0;H=L()|0;I=o+32|0;c[I>>2]=F;c[I+4>>2]=H}else{j=o+96|0;c[o+40>>2]=j;a[o+5>>0]=1;c[o+44>>2]=l;if(l|0)ew(j|0,h|0,l|0)|0;A=j+l|0;B=A+20|0;do{a[A>>0]=0;A=A+1|0}while((A|0)<(B|0))}c[m>>2]=o;c[U>>2]=(c[U>>2]|0)+1;v=v+1|0;if(!((v|0)<(J|0)&(Gc(C)|0)==100)){j=0;l=1;M=199;break d}}c[U>>2]=(c[U>>2]|0)+1;l=0;M=199}while(0);do if((M|0)==199){M=0;if(!y){M=200;break}if(l){j=0;M=206}}while(0);do if((M|0)==200){M=0;m=c[C>>2]|0;I=C+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(m,C);o=kc(C)|0;c[C+20>>2]=770837923;c[C+36>>2]=-1;c[z>>2]=0;a[C+146>>0]=2;c[C+44>>2]=0;c[C+32>>2]=1;a[C+147>>0]=-1;c[C+48>>2]=0;I=C+64|0;c[I>>2]=0;c[I+4>>2]=0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);if(l){j=7;M=206;break}else break}else if(l){j=c[m+68>>2]&o;M=206;break}else break}while(0);if((M|0)==206)M=0;if(j|0){m=K;l=p;M=801;break}m=c[U>>2]|0;if((m|0)!=(J|0)){q=K;j=0;break}c[Y>>2]=ib;j=eq(f,jb,c[ib>>2]|0,c[Z>>2]|0)|0;if(j|0){m=K;l=p;M=801;break}j=gq(f,jb)|0;if((j|0)!=100){m=K;l=p;M=801;break}e:do if((E|0)!=0&(D|0)>0){x=c[_>>2]|0;y=c[$>>2]|0;z=D+-1|0;j=c[aa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[vb>>2]=c[gb>>2];c[vb+4>>2]=l;l=Bb(52942,vb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}D=j;l=Sv(O|0,N|0,1,0)|0;m=L()|0;do if(!(Vc(D,1)|0)){o=c[D+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){I=o;c[I>>2]=l;c[I+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);l=((z|0)<0)<<31>>31;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){I=m;c[I>>2]=z;c[I+4>>2]=l;b[o>>1]=4;break}else{Pg(m,z,l);break}}while(0);do if((Gc(D)|0)!=100){if(!j){M=421;break e}j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);m=K;g=J;j=7;l=p;M=750;break e}else{j=c[j+68>>2]&l;break}}else{v=Oc(D,1)|0;w=L()|0;t=Oc(D,2)|0;u=L()|0;C=(j|0)==0;f:do if(C)j=29576;else{j=c[D+120>>2]|0;do if(j|0){if((e[D+144>>1]|0)<=3)break;j=j+120|0;break f}while(0);j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576}while(0);l=b[j+8>>1]|0;do if((l&514)==514){if((a[j+10>>0]|0)!=1){M=237;break}s=c[j+16>>2]|0}else M=237;while(0);do if((M|0)==237){M=0;if(l&1){s=0;break}s=Gg(j,1)|0}while(0);if(!C){j=c[D>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j}if(!s){h=ba;j=c[h+4>>2]|0;h=c[h>>2]|0;o=0;r=0}else{l=a[s>>0]|0;if((l+-48&255)<10){j=0;o=0;m=0;do{m=Yv(o|0,m|0,10,0)|0;o=(l&255)+-48|0;o=Sv(m|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10)}else{j=0;o=0;m=0}g:while(1){l=a[s+j>>0]|0;switch(l<<24>>24){case 45:{M=251;break g}case 32:break;default:{q=1;r=0;break g}}j=j+1|0}if((M|0)==251){M=0;l=j+1|0;j=l;l=a[s+l>>0]|0;q=-1;r=-1}if((l+-48&255)<10){h=0;g=0;do{g=Yv(h|0,g|0,10,0)|0;h=(l&255)+-48|0;h=Sv(g|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;g=L()|0;j=j+1|0;l=a[s+j>>0]|0}while((l+-48&255)<10);l=h;j=g}else{l=0;j=0}h=Yv(l|0,j|0,q|0,r|0)|0;j=L()|0;r=ba;c[r>>2]=h;c[r+4>>2]=j;r=m}l=Tv(0,0,h|0,j|0)|0;m=L()|0;if((j|0)<0){j=ba;c[j>>2]=l;c[j+4>>2]=m;j=m}else l=h;a[na>>0]=(l|0)==0&(j|0)==0&1;s=Lc(D,4)|0;if(C)q=mc(29576)|0;else{j=c[D+120>>2]|0;do if(!j)M=263;else{if((e[D+144>>1]|0)<=4){M=263;break}j=j+160|0;l=D}while(0);if((M|0)==263){M=0;j=c[D>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;l=D}h=mc(j)|0;j=c[l>>2]|0;m=D+40|0;l=c[m>>2]|0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&l;c[m>>2]=j;q=h}j=c[La>>2]|0;c[Kb>>2]=j;do if(!j){j=c[hb>>2]|0;c[xb>>2]=c[gb>>2];c[xb+4>>2]=j;j=Bb(53128,xb)|0;if(!j){m=7;break}m=qd(c[R>>2]|0,j,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{I=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}j=c[Kb>>2]|0;c[La>>2]=j;if(!m){m=j;M=277}}else{m=j;M=277}while(0);h:do if((M|0)==277){M=0;g=m;do if(!(Vc(g,1)|0)){j=c[g+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){I=j;c[I>>2]=o;c[I+4>>2]=r;b[l>>1]=4;break}else{Pg(j,o,r);break}}while(0);h=(Gc(g)|0)==100;j=h&1;do if(m){l=c[g>>2]|0;I=g+136|0;H=c[I+4>>2]|0;if((H|0)>0|(H|0)==0&(c[I>>2]|0)>>>0>0)hc(l,g);m=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;I=g+64|0;c[I>>2]=0;c[I+4>>2]=0;if((m|0)==3082|(a[l+81>>0]|0)!=0){og(l);m=7;break h}else{m=c[l+68>>2]&m;break}}else m=0;while(0);if(h&(m|0)==0){c[Kb>>2]=0;c[lb>>2]=0;m=dq(f,t,u,Kb,lb)|0;if(!m){m=c[Kb>>2]|0;j=c[lb>>2]|0;A=Ta;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[ob>>2]=m;c[Ua>>2]=j;do if(!(a[m>>0]|0))j=1;else{g=m+1|0;j=a[g>>0]|0;l=j&255;if(!(l&128)){I=Xa;c[I>>2]=j&255;c[I+4>>2]=0;j=2;break}I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=4;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=Xa;c[I>>2]=j;c[I+4>>2]=0;j=5;break}h=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,h|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;h=h+7|0}while(h>>>0<64&((I&128|0)!=0|0!=0));I=Xa;c[I>>2]=j;c[I+4>>2]=l;j=1-g+m|0}while(0);c[Ta>>2]=j;m=Pr(ob)|0;if((m|0)==0&(c[ob>>2]|0)!=0)do m=Pr(ob)|0;while((m|0)==0&(c[ob>>2]|0)!=0);l=c[Ya>>2]|0;I=c[Za>>2]|0;j=Lu(x,l,(y|0)<(I|0)?y:I)|0;j=(((j|0)==0?y-I|0:j)|0)>0&1;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}else j=1;l=c[Kb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0)}if(!((m|0)==0&(j|0)!=0))break;h=a[q>>0]|0;g=h<<24>>24;l=Tv(o|0,r|0,v|0,w|0)|0;L()|0;l=(l+1|0)/16|0;c[Lb>>2]=l;I=sa;c[I>>2]=v;c[I+4>>2]=w;I=ta;c[I>>2]=o;c[I+4>>2]=r;I=qa;c[I>>2]=O;c[I+4>>2]=N;c[ra>>2]=z;if(h<<24>>24<15){j=g;do{I=j;j=j+1|0;E=G(j,l)|0;E=Sv(v|0,w|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Lb+56+(j<<5)|0;c[H>>2]=E;c[H+4>>2]=F}while((I|0)<14)}o=G(l,g)|0;o=Sv(v|0,w|0,o|0,((o|0)<0)<<31>>31|0)|0;m=L()|0;l=Lb+56+(g<<5)|0;c[l>>2]=o;c[l+4>>2]=m;l=c[ja>>2]|0;l=(s|0)>(l|0)?s:l;m=Lb+56+(g<<5)+28|0;o=Lb+56+(g<<5)+20|0;j=c[o>>2]|0;if((c[m>>2]|0)<(l|0)){if(mb()|0){m=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=7;break}c[m>>2]=l;c[o>>2]=j}ew(j|0,q|0,s|0)|0;c[Lb+56+(g<<5)+24>>2]=s;if(h<<24>>24<=-1){m=0;break}q=g;j=s;while(1){m=c[Lb+56+(q<<5)+20>>2]|0;A=_a;B=A+40|0;do{c[A>>2]=0;A=A+4|0}while((A|0)<(B|0));c[Kb>>2]=m;c[$a>>2]=j;if(!(a[m>>0]|0))j=1;else{h=m+1|0;j=a[h>>0]|0;l=j&255;do if(!(l&128)){I=bb;c[I>>2]=j&255;c[I+4>>2]=0;j=1}else{I=d[m+2>>0]|0;j=I<<7|l&127;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=2;break}I=d[m+3>>0]|0;j=I<<14|j&16383;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=3;break}I=d[m+4>>0]|0;j=I<<21|j&2097151;if(!(I&128)){I=bb;c[I>>2]=j;c[I+4>>2]=0;j=4;break}o=28;m=m+5|0;j=j&268435455;l=0;do{I=m;m=m+1|0;I=d[I>>0]|0;H=cw(I&127|0,0,o|0)|0;j=Sv(H|0,L()|0,j|0,l|0)|0;l=L()|0;o=o+7|0}while(o>>>0<64&((I&128|0)!=0|0!=0));I=bb;c[I>>2]=j;c[I+4>>2]=l;j=m-h|0}while(0);j=j+1|0}c[_a>>2]=j;j=Pr(Kb)|0;l=(j|0)==0;if(l&(c[Kb>>2]|0)!=0)do{j=Pr(Kb)|0;l=(j|0)==0}while(l&(c[Kb>>2]|0)!=0);o=c[cb>>2]|0;do if(l){l=Lb+56+(q<<5)+16|0;m=Lb+56+(q<<5)+8|0;if((c[l>>2]|0)<(o|0)){j=c[m>>2]|0;if(mb()|0){j=7;M=364;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;M=364;break}c[l>>2]=o;c[m>>2]=j}else j=c[m>>2]|0;l=c[P>>2]|0;ew(j|0,l|0,o|0)|0;c[Lb+56+(q<<5)+12>>2]=o;if((q|0)<=0){j=0;break}c[lb>>2]=0;c[ob>>2]=0;h=q+-1|0;j=bb;g=c[j>>2]|0;j=c[j+4>>2]|0;o=Lb+56+(h<<5)|0;c[o>>2]=g;c[o+4>>2]=j;j=dq(f,g,j,lb,ob)|0;g=c[ob>>2]|0;o=c[ja>>2]|0;o=(g|0)>(o|0)?g:o;do if(!j){l=Lb+56+(h<<5)+28|0;m=Lb+56+(h<<5)+20|0;j=c[m>>2]|0;if((c[l>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[l>>2]=o;c[m>>2]=j}ew(j|0,c[lb>>2]|0,g|0)|0;c[Lb+56+(h<<5)+24>>2]=g;j=0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);M=364}else M=364;while(0);if((M|0)==364){M=0;l=c[P>>2]|0}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{I=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=q+-1|0;if(!((q|0)>0&(j|0)==0)){m=j;break h}q=l;j=c[Lb+56+(l<<5)+24>>2]|0}}while(0);do if(!C){j=c[D>>2]|0;M=D+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,D);l=kc(D)|0;c[D+20>>2]=770837923;c[D+36>>2]=-1;c[D+40>>2]=0;a[D+146>>0]=2;c[D+44>>2]=0;c[D+32>>2]=1;a[D+147>>0]=-1;c[D+48>>2]=0;M=D+64|0;c[M>>2]=0;c[M+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m}while(0);if(!j)M=421;else{m=K;g=J;l=p;M=750}}else{j=c[ca>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[yb>>2]=c[gb>>2];c[yb+4>>2]=l;l=Bb(52726,yb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ca>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){M=l;c[M>>2]=O;c[M+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);l=c[U>>2]|0;m=((l|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){h=c[g+100>>2]|0;o=h+40|0;h=h+48|0;if(!(b[h>>1]&9216)){M=o;c[M>>2]=l;c[M+4>>2]=m;b[h>>1]=4;break}else{Pg(o,l,m);break}}while(0);if((Gc(g)|0)==100)o=Nc(g,0)|0;else o=0;do if(j|0){j=c[g>>2]|0;M=g+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;M=g+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=c[ua>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[zb>>2]=c[gb>>2];c[zb+4>>2]=l;l=Bb(51657,zb)|0;if(!l){m=K;g=J;j=7;l=p;M=750;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[ua>>2]=l;if(!j)j=l;else{m=K;g=J;l=p;M=750;break}}m=j;if((Gc(m)|0)==100){F=o<<4;F=Sv(F|0,((F|0)<0)<<31>>31|0,-1,-1)|0;M=L()|0;I=Oc(m,0)|0;H=L()|0;E=sa;c[E>>2]=I;c[E+4>>2]=H;H=Sv(F|0,M|0,I|0,H|0)|0;I=L()|0;M=ta;c[M>>2]=H;c[M+4>>2]=I}do if(j|0){j=c[m>>2]|0;M=m+136|0;I=c[M+4>>2]|0;if((I|0)>0|(I|0)==0&(c[M>>2]|0)>>>0>0)hc(j,m);l=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;M=m+64|0;c[M>>2]=0;c[M+4>>2]=0;if(!((l|0)==3082|(a[j+81>>0]|0)!=0)){j=c[j+68>>2]&l;if(!j)break;else{m=K;g=J;l=p;M=750;break e}}else{og(j);m=K;g=J;j=7;l=p;M=750;break e}}while(0);j=ta;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,0,0)|0;if(j|0){m=K;g=J;l=p;M=750;break}I=qa;c[I>>2]=O;c[I+4>>2]=N;c[Lb>>2]=o;c[ra>>2]=D;I=sa;M=c[I>>2]|0;I=c[I+4>>2]|0;H=ka;c[H>>2]=M;c[H+4>>2]=I;H=Sv(M|0,I|0,o|0,((o|0)<0)<<31>>31|0)|0;F=L()|0;E=wa;c[E>>2]=H;c[E+4>>2]=F;E=o<<1;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=xa;c[H>>2]=E;c[H+4>>2]=F;H=o*3|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=ya;c[E>>2]=H;c[E+4>>2]=F;E=o<<2;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=za;c[H>>2]=E;c[H+4>>2]=F;H=o*5|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Aa;c[E>>2]=H;c[E+4>>2]=F;E=o*6|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ba;c[H>>2]=E;c[H+4>>2]=F;H=o*7|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ca;c[E>>2]=H;c[E+4>>2]=F;E=o<<3;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Da;c[H>>2]=E;c[H+4>>2]=F;H=o*9|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ea;c[E>>2]=H;c[E+4>>2]=F;E=o*10|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Fa;c[H>>2]=E;c[H+4>>2]=F;H=o*11|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ga;c[E>>2]=H;c[E+4>>2]=F;E=o*12|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ha;c[H>>2]=E;c[H+4>>2]=F;H=o*13|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;F=L()|0;E=Ia;c[E>>2]=H;c[E+4>>2]=F;E=o*14|0;E=Sv(M|0,I|0,E|0,((E|0)<0)<<31>>31|0)|0;F=L()|0;H=Ja;c[H>>2]=E;c[H+4>>2]=F;H=o*15|0;H=Sv(M|0,I|0,H|0,((H|0)<0)<<31>>31|0)|0;I=L()|0;M=Ka;c[M>>2]=H;c[M+4>>2]=I;M=421}while(0);i:do if((M|0)==421){M=0;if(!(c[Lb>>2]|0)){m=K;g=J;j=0;l=p;M=750;break}j:while(1){E=c[_>>2]|0;F=c[$>>2]|0;H=c[da>>2]|0;I=c[ea>>2]|0;l=c[fa>>2]|0;m=c[ga>>2]|0;k:do if((m|0)>0){j=0;while(1){if((a[l+j>>0]|0)!=(a[E+j>>0]|0)){A=j;break k}j=j+1|0;if((j|0)>=(m|0)){A=j;break}}}else A=0;while(0);g=0;j=A;l=((A|0)<0)<<31>>31;do{g=g+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));h=F-A|0;o=0;j=h;l=((h|0)<0)<<31>>31;do{o=o+1|0;j=bw(j|0,l|0,7)|0;l=L()|0}while(!((j|0)==0&(l|0)==0));D=((I|0)<0)<<31>>31;j=0;l=I;m=D;do{j=j+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));l=h+I+g+o+j|0;j=c[ia>>2]|0;do if((j|0)>0){if((j+l|0)<=(c[ja>>2]|0)){M=480;break}C=ka;j=Hr(f,c[C>>2]|0,c[C+4>>2]|0,c[ha>>2]|0,j)|0;c[la>>2]=(c[la>>2]|0)+1;l:do if(!j){C=A+1|0;m=ka;v=1;l=c[m>>2]|0;m=c[m+4>>2]|0;while(1){z=Lb+56+(v<<5)+8|0;o=c[z>>2]|0;B=Lb+56+(v<<5)+12|0;q=c[B>>2]|0;m:do if((q|0)>0){j=0;while(1){if((a[o+j>>0]|0)!=(a[E+j>>0]|0)){x=j;break m}j=j+1|0;if((j|0)>=(q|0)){x=j;break}}}else x=0;while(0);t=((x|0)<0)<<31>>31;g=0;j=x;o=t;do{g=g+1|0;j=bw(j|0,o|0,7)|0;o=L()|0}while(!((j|0)==0&(o|0)==0));w=C-x|0;u=((w|0)<0)<<31>>31;j=0;o=w;h=u;do{j=j+1|0;o=bw(o|0,h|0,7)|0;h=L()|0}while(!((o|0)==0&(h|0)==0));s=g+w+j|0;y=Lb+56+(v<<5)+24|0;j=c[y>>2]|0;if(!q)break;if((j+s|0)<=(c[ja>>2]|0))break;r=Lb+56+(v<<5)|0;o=r;q=Lb+56+(v<<5)+20|0;j=Hr(f,c[o>>2]|0,c[o+4>>2]|0,c[q>>2]|0,j)|0;a[c[q>>2]>>0]=v;q=(c[q>>2]|0)+1|0;o=Sv(l|0,m|0,1,0)|0;l=q;g=L()|0;while(1){m=o&255;h=l+1|0;a[l>>0]=m|-128;o=bw(o|0,g|0,7)|0;g=L()|0;if((o|0)==0&(g|0)==0)break;else l=h}a[l>>0]=m&127;c[y>>2]=1-q+h;m=r;l=c[m>>2]|0;m=c[m+4>>2]|0;x=Sv(l|0,m|0,1,0)|0;y=L()|0;z=r;c[z>>2]=x;c[z+4>>2]=y;c[B>>2]=0;if((j|0)!=0|(l|0)==0&(m|0)==0)break l;j=v+1|0;if(j>>>0<16)v=j;else{j=0;break l}}q=Lb+56+(v<<5)+20|0;if(!j){o=c[ja>>2]|0;r=Lb+56+(v<<5)+28|0;j=c[q>>2]|0;if((c[r>>2]|0)<(o|0)){if(mb()|0){j=7;break}j=sb(j,(o|0)>0?o:0,0)|0;if(!j){j=7;break}c[r>>2]=o;c[q>>2]=j}a[j>>0]=v;g=(c[q>>2]|0)+1|0;h=g;while(1){j=l&255;o=h+1|0;a[h>>0]=j|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else h=o}a[h>>0]=j&127;j=1-g+o|0;c[y>>2]=j;m=r}else m=Lb+56+(v<<5)+28|0;l=j+s|0;if((c[m>>2]|0)<(l|0)){j=c[q>>2]|0;if(mb()|0){j=7;break}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){j=7;break}c[m>>2]=l;c[q>>2]=j}l=Lb+56+(v<<5)+16|0;if((c[l>>2]|0)<=(A|0)){j=c[z>>2]|0;if(mb()|0){j=7;break}j=sb(j,(C|0)>0?C:0,0)|0;if(!j){j=7;break}c[l>>2]=C;c[z>>2]=j}if(!(c[B>>2]|0))j=c[y>>2]|0;else{h=(c[q>>2]|0)+(c[y>>2]|0)|0;o=h;g=x;m=t;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j}h=(c[q>>2]|0)+j|0;o=h;g=w;m=u;while(1){j=g&255;l=o+1|0;a[o>>0]=j|-128;g=bw(g|0,m|0,7)|0;m=L()|0;if((g|0)==0&(m|0)==0)break;else o=l}a[o>>0]=j&127;j=(c[y>>2]|0)+(l-h)|0;c[y>>2]=j;ew((c[q>>2]|0)+j|0,E+x|0,w|0)|0;c[y>>2]=(c[y>>2]|0)+w;ew(c[z>>2]|0,E|0,C|0)|0;c[B>>2]=C;j=0}while(0);m=ka;m=Sv(c[m>>2]|0,c[m+4>>2]|0,1,0)|0;l=L()|0;h=ka;c[h>>2]=m;c[h+4>>2]=l;c[ga>>2]=0;c[ia>>2]=0;h=0;l=F;m=((F|0)<0)<<31>>31;do{h=h+1|0;l=bw(l|0,m|0,7)|0;m=L()|0}while(!((l|0)==0&(m|0)==0));o=0;m=I;l=D;do{o=o+1|0;m=bw(m|0,l|0,7)|0;l=L()|0}while(!((m|0)==0&(l|0)==0));l=F+1+I+h|0;B=l+o|0;C=ba;B=Sv(c[C>>2]|0,c[C+4>>2]|0,B|0,((B|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;if(!j){l=l+o|0;j=0;M=482}}else M=480;while(0);if((M|0)==480){B=ba;B=Sv(c[B>>2]|0,c[B+4>>2]|0,l|0,((l|0)<0)<<31>>31|0)|0;C=L()|0;D=ba;c[D>>2]=B;c[D+4>>2]=C;l=l+j|0;M=482}do if((M|0)==482){M=0;if((c[ma>>2]|0)<(l|0)){j=c[ha>>2]|0;if(mb()|0){m=K;g=J;j=7;l=p;M=750;break i}j=sb(j,(l|0)>0?l:0,0)|0;if(!j){m=K;g=J;j=7;l=p;M=750;break i}c[ma>>2]=l;c[ha>>2]=j;j=c[ia>>2]|0}if(!j){c[ia>>2]=1;a[c[ha>>2]>>0]=0}j=Qr(ha,fa,E,F,H,I)|0;if(j|0)break;j=gq(f,jb)|0}while(0);l=c[la>>2]|0;if((j|0)==100&(l|0)>=(K|0))break;switch(j|0){case 100:break;case 0:break j;default:{m=K;g=J;l=p;M=750;break i}}}F=K+-1-l|0;j=c[U>>2]|0;n:do if((j|0)>0){w=0;y=j;l=j;o:while(1){x=y+-1|0;if((l|0)>0){m=c[jb>>2]|0;j=0;do{o=c[m+(j<<2)>>2]|0;j=j+1|0}while((j|0)<(l|0)?(c[o>>2]|0)!=(x|0):0)}else o=0;do if(!(c[o+40>>2]|0)){h=o+8|0;m=h;j=c[m>>2]|0;m=c[m+4>>2]|0;do if(!((j|0)==0&(m|0)==0)){l=c[Na>>2]|0;c[Kb>>2]=l;if(!l){l=c[hb>>2]|0;c[Ab>>2]=c[gb>>2];c[Ab+4>>2]=l;l=Bb(52181,Ab)|0;if(!l){M=502;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Na>>2]=l;if(j|0){g=w;break n}m=h;j=c[m>>2]|0;m=c[m+4>>2]|0}q=l;do if(!(Vc(q,1)|0)){h=c[q+100>>2]|0;g=h+8|0;if(!(b[g>>1]&9216)){K=h;c[K>>2]=j;c[K+4>>2]=m;b[g>>1]=4;break}else{Pg(h,j,m);break}}while(0);h=o+24|0;m=c[h>>2]|0;h=c[h+4>>2]|0;if(Vc(q,2)|0){Gc(q)|0;if(!l)break}else{l=c[q+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=m;c[K+4>>2]=h;b[l>>1]=4}else Pg(j,m,h);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);l=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=521;break o}j=c[j+68>>2]&l;if(j|0){g=w;break n}}while(0);h=c[o>>2]|0;j=c[Ma>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Cb>>2]=c[gb>>2];c[Cb+4>>2]=l;l=Bb(52829,Cb)|0;if(!l){M=526;break o}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Ma>>2]=l;if(!j)j=l;else{g=w;break n}}o=j;do if(!(Vc(o,1)|0)){l=c[o+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);m=((h|0)<0)<<31>>31;if(Vc(o,2)|0){Gc(o)|0;if(!j){m=w;j=0;break}}else{l=c[o+100>>2]|0;j=l+40|0;l=l+48|0;if(!(b[l>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=m;b[l>>1]=4}else Pg(j,h,m);Gc(o)|0}j=c[o>>2]|0;K=o+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,o);l=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;K=o+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){M=544;break o}m=w;j=c[j+68>>2]&l}else{q=c[o+64>>2]|0;t=c[o+60>>2]|0;v=c[o>>2]|0;c[lb>>2]=0;c[lb+4>>2]=0;c[lb+8>>2]=0;c[ob>>2]=0;c[ob+4>>2]=0;c[ob+8>>2]=0;j=qb;c[j>>2]=0;c[j+4>>2]=0;j=c[aa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Db>>2]=c[gb>>2];c[Db+4>>2]=l;l=Bb(52942,Db)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[aa>>2]=l;if(!j){j=l;M=554}}else M=554;while(0);p:do if((M|0)==554){M=0;g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);u=((v|0)<0)<<31>>31;do if(!(Vc(g,2)|0)){m=c[g+100>>2]|0;l=m+40|0;m=m+48|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=v;c[K+4>>2]=u;b[m>>1]=4;break}else{Pg(l,v,u);break}}while(0);if((Gc(g)|0)==100){if(!j)l=mc(29576)|0;else{l=c[g+120>>2]|0;do if(!l)M=567;else{if((e[g+144>>1]|0)<=4){M=567;break}l=l+160|0;m=g}while(0);if((M|0)==567){M=0;l=c[g>>2]|0;c[l+64>>2]=25;Ne(l,25);l=29576;m=g}l=mc(l)|0;m=c[m>>2]|0;h=g+40|0;o=c[h>>2]|0;if((o|0)==3082|(a[m+81>>0]|0)!=0){og(m);m=7}else m=c[m+68>>2]&o;c[h>>2]=m}m=Lc(g,4)|0;r=Oc(g,1)|0;s=L()|0;m=Rr(l,m,lb,q,t,qb)|0}else{m=0;r=0;s=0}do if(j){j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}else j=0;while(0);j=(m|0)==0?j:m;m=qb;l=c[m>>2]|0;m=c[m+4>>2]|0;do if((j|0)==0&((l|0)!=0|(m|0)!=0)){while(1){c[Kb>>2]=0;c[rb>>2]=0;j=dq(f,l,m,Kb,rb)|0;do if(!j){j=Rr(c[Kb>>2]|0,c[rb>>2]|0,ob,q,t,qb)|0;if(j|0)break;j=Hr(f,l,m,c[ob>>2]|0,c[Oa>>2]|0)|0}while(0);o=c[Kb>>2]|0;do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);o=(j|0)==0;g=qb;h=c[g>>2]|0;g=c[g+4>>2]|0;if(o&((h|0)!=0|(g|0)!=0)){l=h;m=g}else break}if(!o)break p;j=c[Na>>2]|0;c[Kb>>2]=j;if(!j){o=c[hb>>2]|0;c[Eb>>2]=c[gb>>2];c[Eb+4>>2]=o;o=Bb(52181,Eb)|0;if(!o){j=7;break p}j=qd(c[R>>2]|0,o,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](o);else{K=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o)}o=c[Kb>>2]|0;c[Na>>2]=o;if(!j)j=o;else break p}q=j;do if(!(Vc(q,1)|0)){o=c[q+100>>2]|0;h=o+8|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=r;c[K+4>>2]=s;b[h>>1]=4;break}else{Pg(o,r,s);break}}while(0);h=Sv(l|0,m|0,-1,-1)|0;g=L()|0;if(Vc(q,2)|0){Gc(q)|0;if(!j){h=l;break}}else{o=c[q+100>>2]|0;j=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=j;c[K>>2]=h;c[K+4>>2]=g;b[o>>1]=4}else Pg(j,h,g);Gc(q)|0}j=c[q>>2]|0;K=q+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,q);o=kc(q)|0;c[q+20>>2]=770837923;c[q+36>>2]=-1;c[q+40>>2]=0;a[q+146>>0]=2;c[q+44>>2]=0;c[q+32>>2]=1;a[q+147>>0]=-1;c[q+48>>2]=0;K=q+64|0;c[K>>2]=0;c[K+4>>2]=0;if((o|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break p}else{j=c[j+68>>2]&o;M=614;break}}else{l=0;m=0;M=614}while(0);if((M|0)==614){M=0;if(!j)h=l;else break}j=c[Pa>>2]|0;c[Kb>>2]=j;if(!j){l=c[hb>>2]|0;c[Fb>>2]=c[gb>>2];c[Fb+4>>2]=l;l=Bb(53049,Fb)|0;if(!l){j=7;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Pa>>2]=l;if(!j)j=l;else break}g=j;do if(!(Vc(g,1)|0)){l=c[g+100>>2]|0;o=l+8|0;if(!(b[o>>1]&9216)){K=l;c[K>>2]=h;c[K+4>>2]=m;b[o>>1]=4;break}else{Pg(l,h,m);break}}while(0);l=c[lb>>2]|0;m=c[Qa>>2]|0;do if(!((l|0)==0|(Vc(g,2)|0)!=0)){l=yc((c[g+100>>2]|0)+40|0,l,m,0,0)|0;if(!l)break;m=c[g>>2]|0;c[m+64>>2]=l;Ne(m,l);m=c[g>>2]|0;if(!((l|0)==3082|(a[m+81>>0]|0)!=0))break;og(m)}while(0);do if(!(Vc(g,3)|0)){m=c[g+100>>2]|0;l=m+80|0;m=m+88|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);if(Vc(g,4)|0){Gc(g)|0;if(!j)j=0;else M=641}else{l=c[g+100>>2]|0;j=l+120|0;l=l+128|0;if(!(b[l>>1]&9216)){M=j;c[M>>2]=v;c[M+4>>2]=u;b[l>>1]=4}else Pg(j,v,u);Gc(g)|0;M=641}do if((M|0)==641){M=0;j=c[g>>2]|0;K=g+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,g);l=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;K=g+64|0;c[K>>2]=0;c[K+4>>2]=0;if((l|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&l;break}}while(0);Vc(g,2)|0}while(0);l=c[lb>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[ob>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);m=w+1|0}while(0);l=(j|0)==0;if(!((y|0)>1&l)){M=658;break}w=m;y=x;l=c[U>>2]|0}if((M|0)==502){M=0;g=w;j=7;break}else if((M|0)==521){M=0;og(j);g=w;j=7;break}else if((M|0)==526){M=0;g=w;j=7;break}else if((M|0)==544){M=0;og(j);g=w;j=7;break}else if((M|0)==658){M=0;if(!l){g=m;break}E=m;j=c[U>>2]|0;M=660;break}}else{E=0;M=660}while(0);do if((M|0)==660){M=0;if((E|0)==(j|0)){g=j;j=0;break}j=c[Sa>>2]|0;c[Kb>>2]=j;do if(!j){l=c[hb>>2]|0;c[Gb>>2]=c[gb>>2];c[Gb+4>>2]=l;l=Bb(53193,Gb)|0;if(!l){j=7;l=0;M=698;break}j=qd(c[R>>2]|0,l,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](l);else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l)}l=c[Kb>>2]|0;c[Sa>>2]=l;if(!j){j=l;M=669}else{l=0;M=698}}else M=669;while(0);q:do if((M|0)==669){M=0;r=j;do if(!(Vc(r,1)|0)){l=c[r+100>>2]|0;m=l+8|0;if(!(b[m>>1]&9216)){K=l;c[K>>2]=O;c[K+4>>2]=N;b[m>>1]=4;break}else{Pg(l,O,N);break}}while(0);r:do if((Gc(r)|0)==100){g=0;o=0;q=0;h=0;l=0;while(1){if((q|0)>=(o|0)){o=o+16|0;m=o<<2;if(mb()|0){o=7;break r}m=sb(h,(m|0)>0?m:0,0)|0;if(!m){o=7;break r}else{g=m;l=m;h=m}}K=Nc(r,0)|0;m=q+1|0;c[g+(q<<2)>>2]=K;if((Gc(r)|0)==100)q=m;else{q=m;o=0;break}}}else{q=0;o=0;g=0;l=0}while(0);do if(j){j=c[r>>2]|0;K=r+136|0;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,r);m=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;K=r+64|0;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&m;break}}else j=0;while(0);j=(o|0)==0?j:o;if(j|0){M=698;break}j=c[db>>2]|0;c[Kb>>2]=j;if(!j){m=c[hb>>2]|0;c[Hb>>2]=c[gb>>2];c[Hb+4>>2]=m;m=Bb(52884,Hb)|0;if(!m){j=7;M=698;break}j=qd(c[R>>2]|0,m,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{K=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}m=c[Kb>>2]|0;c[db>>2]=m;if(!j)j=m;else{M=698;break}}D=j;do if(!(Vc(D,2)|0)){o=c[D+100>>2]|0;m=o+40|0;o=o+48|0;if(!(b[o>>1]&9216)){K=m;c[K>>2]=O;c[K+4>>2]=N;b[o>>1]=4;break}else{Pg(m,O,N);break}}while(0);a[Va>>0]=1;if(!q){j=0;break}s=D+100|0;t=D+136|0;u=D+20|0;v=D+36|0;w=D+40|0;x=D+146|0;y=D+44|0;z=D+32|0;A=D+147|0;B=D+48|0;C=D+64|0;if(!j){r=0;s:while(1){j=c[g+(r<<2)>>2]|0;do if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(Vc(D,1)|0){Gc(D)|0;j=0;break}j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break s;j=c[j+68>>2]&m}while(0);r=r+1|0;if(!(r>>>0>>0&(j|0)==0))break q}og(j);j=7;break}r=0;while(1){j=c[g+(r<<2)>>2]|0;if((j|0)==(r|0))j=0;else{m=((j|0)<0)<<31>>31;do if(!(Vc(D,3)|0)){h=c[s>>2]|0;o=h+80|0;h=h+88|0;if(!(b[h>>1]&9216)){K=o;c[K>>2]=j;c[K+4>>2]=m;b[h>>1]=4;break}else{Pg(o,j,m);break}}while(0);if(!(Vc(D,1)|0)){j=c[s>>2]|0;m=j+8|0;if(!(b[m>>1]&9216)){K=j;c[K>>2]=r;c[K+4>>2]=0;b[m>>1]=4}else Pg(j,r,0);Gc(D)|0}else Gc(D)|0;j=c[D>>2]|0;K=t;J=c[K+4>>2]|0;if((J|0)>0|(J|0)==0&(c[K>>2]|0)>>>0>0)hc(j,D);m=kc(D)|0;c[u>>2]=770837923;c[v>>2]=-1;c[w>>2]=0;a[x>>0]=2;c[y>>2]=0;c[z>>2]=1;a[A>>0]=-1;c[B>>2]=0;K=C;c[K>>2]=0;c[K+4>>2]=0;if((m|0)==3082|(a[j+81>>0]|0)!=0)break;j=c[j+68>>2]&m}r=r+1|0;if(!(r>>>0>>0&(j|0)==0))break q}og(j);j=7}while(0);if((M|0)==698){M=0;a[Va>>0]=1}a[Va>>0]=0;if(!l){g=E;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);g=E;break}else{g=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);g=E;break}}while(0);if(!g){t=F;s=p;r=1;break}k=n+20|0;if(j|0){m=F;k=1;l=p;M=751;break}if((p|0)<(k|0)){if(mb()|0){m=F;k=1;j=7;l=p;M=751;break}j=sb(i,(k|0)>0?k:0,0)|0;if(!j){m=F;k=1;j=7;l=p;M=751;break}else{i=j;p=k}}k=i+n|0;j=k;m=O;h=N;while(1){l=m&255;o=j+1|0;a[j>>0]=l|-128;m=bw(m|0,h|0,7)|0;h=L()|0;if((m|0)==0&(h|0)==0)break;else j=o}a[j>>0]=l&127;n=o-k+n|0;o=i+n|0;j=o;l=g;m=((g|0)<0)<<31>>31;while(1){k=l&255;h=j+1|0;a[j>>0]=k|-128;l=bw(l|0,m|0,7)|0;m=L()|0;if((l|0)==0&(m|0)==0)break;else j=h}a[j>>0]=k&127;m=F;k=1;j=0;n=n-o+h|0;l=p;M=750}while(0);if((M|0)==750){M=0;if(!g){t=m;s=l;r=1}else M=751}if((M|0)==751){M=0;r=ba;r=Tv(0,0,c[r>>2]|0,c[r+4>>2]|0)|0;s=L()|0;t=ba;c[t>>2]=r;c[t+4>>2]=s;t=m;s=l;r=0}m=15;while(1){if((c[Lb+56+(m<<5)+24>>2]|0)>0){M=763;break}l=c[Lb+56+(m<<5)+20>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);if(!m)break;else m=m+-1|0}do if((M|0)==763){M=0;do if(m){if((m|0)>0)M=773}else{if(j|0){m=1;M=773;break}j=c[pa>>2]|0;if((c[oa>>2]|0)<11){if(mb()|0){j=7;m=1;M=773;break}j=sb(j,11,0)|0;if(!j){j=7;m=1;M=773;break}c[oa>>2]=11;c[pa>>2]=j}a[j>>0]=1;l=(c[pa>>2]|0)+1|0;p=ka;j=l;o=c[p>>2]|0;p=c[p+4>>2]|0;while(1){m=o&255;h=j+1|0;a[j>>0]=m|-128;o=bw(o|0,p|0,7)|0;p=L()|0;if((o|0)==0&(p|0)==0)break;else j=h}a[j>>0]=m&127;c[va>>2]=1-l+h;j=0;m=1;M=773}while(0);if((M|0)==773){h=0;do{l=c[Lb+56+(h<<5)+24>>2]|0;o=Lb+56+(h<<5)+20|0;if((j|0)==0&(l|0)>0){j=Lb+56+(h<<5)|0;j=Hr(f,c[j>>2]|0,c[j+4>>2]|0,c[o>>2]|0,l)|0}l=c[o>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(h<<5)+8>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0}while((h|0)!=(m|0))}if(!j){j=qa;j=Sv(c[j>>2]|0,c[j+4>>2]|0,1,0)|0;l=L()|0;o=sa;h=ka;p=ta;if(!(a[na>>0]|0)){q=ba;g=c[q>>2]|0;q=c[q+4>>2]|0}else{g=0;q=0}M=Lb+56+(m<<5)+20|0;j=Jr(f,j,l,c[ra>>2]|0,c[o>>2]|0,c[o+4>>2]|0,c[h>>2]|0,c[h+4>>2]|0,c[p>>2]|0,c[p+4>>2]|0,g,q,c[M>>2]|0,c[Lb+56+(m<<5)+24>>2]|0)|0;l=M}else l=Lb+56+(m<<5)+20|0;l=c[l>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[Lb+56+(m<<5)+8>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{M=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-M;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!r){m=t;l=s;M=801;break}if(a[na>>0]|0){m=t;l=s;M=801;break}M=Sv(O|0,N|0,1,0)|0;l=L()|0;m=ba;Gr(f,M,l,c[m>>2]|0,c[m+4>>2]|0)|0;m=t;l=s;M=801}}else{m=K;l=p;M=801}}else{m=K;l=p;M=801}while(0);if((M|0)==801){M=0;q=m;p=l;m=c[U>>2]|0}l=c[jb>>2]|0;if((m|0)>0){g=0;do{h=c[l+(g<<2)>>2]|0;do if(h|0){do if(!(c[h+56>>2]|0)){l=c[h+64>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);do if(!(a[h+5>>0]|0)){l=c[h+40>>2]|0;if(!l)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);l=c[h+52>>2]|0;t:do if(l|0){m=c[l+20>>2]|0;gc(c[l+16>>2]|0)|0;do if(m|0){if(c[m+480>>2]|0){Xd(m,l);break t}o=l;if((c[m+304>>2]|0)>>>0>o>>>0)break;if((c[m+308>>2]|0)>>>0<=o>>>0)break;K=m+300|0;c[l>>2]=c[K>>2];c[K>>2]=l;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{K=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);g=g+1|0;l=c[jb>>2]|0}while((g|0)<(c[U>>2]|0))}do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);l=c[W>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{K=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);c[U>>2]=0;c[jb>>2]=0;c[W>>2]=0;if((j|0)==0&(q|0)>0){K=q;o=O;h=N}else break}if((k|0)!=0&(j|0)==0){l=f+148|0;k=c[l>>2]|0;c[Kb>>2]=k;if(!k){k=c[f+20>>2]|0;c[Jb>>2]=c[f+16>>2];c[Jb+4>>2]=k;k=Bb(52453,Jb)|0;if(!k){j=7;break}j=qd(c[f+12>>2]|0,k,-1,133,0,Kb,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](k);else{f=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k)}k=c[Kb>>2]|0;c[l>>2]=k;if(j)break}m=k;do if(!(Vc(m,1)|0)){j=c[m+100>>2]|0;l=j+8|0;if(!(b[l>>1]&9216)){Kb=j;c[Kb>>2]=1;c[Kb+4>>2]=0;b[l>>1]=4;break}else{Pg(j,1,0);break}}while(0);if((i|0)==0|(Vc(m,2)|0)!=0){Gc(m)|0;if(!k)j=0;else M=857}else{j=yc((c[m+100>>2]|0)+40|0,i,n,0,0)|0;if(j|0?(Mb=c[m>>2]|0,c[Mb+64>>2]=j,Ne(Mb,j),Mb=c[m>>2]|0,(j|0)==3082|(a[Mb+81>>0]|0)!=0):0)og(Mb);Gc(m)|0;M=857}do if((M|0)==857){j=c[m>>2]|0;Mb=m+136|0;Kb=c[Mb+4>>2]|0;if((Kb|0)>0|(Kb|0)==0&(c[Mb>>2]|0)>>>0>0)hc(j,m);k=kc(m)|0;c[m+20>>2]=770837923;c[m+36>>2]=-1;c[m+40>>2]=0;a[m+146>>0]=2;c[m+44>>2]=0;c[m+32>>2]=1;a[m+147>>0]=-1;c[m+48>>2]=0;Mb=m+64|0;c[Mb>>2]=0;c[Mb+4>>2]=0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7;break}else{j=c[j+68>>2]&k;break}}while(0);Vc(m,2)|0}}}while(0);if(!(c[7324]|0))ab[c[29344>>2]&127](Lb);else{Mb=Wa[c[29352>>2]&127](Lb)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](Lb)}if(!i){Mb=j;Ra=Nb;return Mb|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}else{Mb=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-Mb;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Mb=j;Ra=Nb;return Mb|0}return 0}function Pr(b){b=b|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;m=b+28|0;g=(c[m>>2]|0)!=0;n=b+16|0;e=n;f=c[e>>2]|0;e=c[e+4>>2]|0;if(g&((f|0)!=0|(e|0)!=0)){l=Sv(f|0,e|0,1,0)|0;o=L()|0;p=n;c[p>>2]=l;c[p+4>>2]=o}o=b+8|0;j=c[o>>2]|0;p=b+4|0;k=c[p>>2]|0;if((j|0)>=(k|0)){c[b>>2]=0;b=0;return b|0}h=c[b>>2]|0;if(g){g=h+j|0;f=a[g>>0]|0;e=f&255;if(e&128){l=d[g+1>>0]|0;e=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;e=l<<14|e&16383;if(l&128){l=d[g+3>>0]|0;e=l<<21|e&2097151;if(!(l&128))f=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;f=5}}else f=3}else f=2}else f=1;j=f+j|0;c[o>>2]=j}else e=0;i=h+j|0;f=a[i>>0]|0;g=f&255;if(g&128){l=d[i+1>>0]|0;f=l<<7|f&127;if(l&128){l=d[i+2>>0]|0;f=l<<14|f&16383;if(l&128){l=d[i+3>>0]|0;f=l<<21|f&2097151;if(!(l&128)){l=f;f=4}else{l=(a[i+4>>0]&7)<<28|f&268435455;f=5}}else{l=f;f=3}}else{l=f;f=2}}else{l=g;f=1}g=f+j|0;c[o>>2]=g;if((e|0)>(g|0)|(l|0)>(k-g|0)){b=267;return b|0}k=l+e|0;i=b+32|0;j=b+24|0;do if((c[i>>2]|0)<(k|0)){f=c[j>>2]|0;if(mb()|0){b=7;return b|0}f=sb(f,(k|0)>0?k:0,0)|0;if(!f){b=7;return b|0}else{c[i>>2]=k;c[j>>2]=f;h=c[b>>2]|0;g=c[o>>2]|0;break}}else f=c[j>>2]|0;while(0);ew(f+e|0,h+g|0,l|0)|0;c[m>>2]=k;i=(c[o>>2]|0)+l|0;c[o>>2]=i;if(!((c[n>>2]|0)==0&(c[n+4>>2]|0)==0)){b=0;return b|0}j=c[b>>2]|0;g=j+i|0;e=a[g>>0]|0;f=e&255;h=b+40|0;do if(f&128){n=d[g+1>>0]|0;f=n<<7|e&127;if(!(n&128)){c[h>>2]=f;e=2;break}n=d[g+2>>0]|0;f=n<<14|f&16383;if(!(n&128)){c[h>>2]=f;e=3;break}n=d[g+3>>0]|0;f=n<<21|f&2097151;if(!(n&128)){c[h>>2]=f;e=4;break}else{f=(a[g+4>>0]&7)<<28|f&268435455;c[h>>2]=f;e=5;break}}else{c[h>>2]=f;e=1}while(0);e=e+i|0;c[o>>2]=e;if(((c[p>>2]|0)-e|0)<(f|0)){b=267;return b|0}c[b+36>>2]=j+e;c[o>>2]=f+e;b=0;return b|0}function Qr(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;m=d+4|0;k=c[m>>2]|0;j=d+8|0;i=c[d>>2]|0;do if((c[j>>2]|0)<(f|0)){if(mb()|0){h=7;return h|0}i=sb(i,(f|0)>0?f:0,0)|0;if(!i){h=7;return h|0}else{c[j>>2]=f;c[d>>2]=i;l=c[m>>2]|0;break}}else l=k;while(0);j=(k|0)==0;a:do if((l|0)>0){d=0;while(1){if((a[i+d>>0]|0)!=(a[e+d>>0]|0)){n=d;break a}d=d+1|0;if((d|0)>=(l|0)){n=d;break}}}else n=0;while(0);o=f-n|0;ew(i|0,e|0,f|0)|0;c[m>>2]=f;if(j){d=b+4|0;m=d;d=c[d>>2]|0}else{m=b+4|0;i=(c[b>>2]|0)+(c[m>>2]|0)|0;d=i;k=n;f=((n|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=l-i+(c[m>>2]|0)|0;c[m>>2]=d}i=(c[b>>2]|0)+d|0;d=i;k=o;f=((o|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;d=(c[m>>2]|0)+(l-i)|0;c[m>>2]=d;ew((c[b>>2]|0)+d|0,e+n|0,o|0)|0;d=(c[m>>2]|0)+o|0;c[m>>2]=d;if(!g){h=0;return h|0}i=(c[b>>2]|0)+d|0;d=i;k=h;f=((h|0)<0)<<31>>31;while(1){j=k&255;l=d+1|0;a[d>>0]=j|-128;k=bw(k|0,f|0,7)|0;f=L()|0;if((k|0)==0&(f|0)==0)break;else d=l}a[d>>0]=j&127;e=(c[m>>2]|0)+(l-i)|0;c[m>>2]=e;ew((c[b>>2]|0)+e|0,g|0,h|0)|0;c[m>>2]=(c[m>>2]|0)+h;h=0;return h|0}function Rr(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,z=0;z=Ra;Ra=Ra+64|0;x=z;y=z+48|0;c[y>>2]=0;c[y+4>>2]=0;c[y+8>>2]=0;v=(a[b>>0]|0)!=0;k=f+8|0;do if((c[k>>2]|0)<(e|0)){j=c[f>>2]|0;if(mb()|0){y=7;Ra=z;return y|0}j=sb(j,(e|0)>0?e:0,0)|0;if(!j){y=7;Ra=z;return y|0}else{c[k>>2]=e;c[f>>2]=j;break}}while(0);w=f+4|0;c[w>>2]=0;o=x+8|0;j=o;k=j+40|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[x>>2]=b;c[x+4>>2]=e;do if(!(a[b>>0]|0))j=1;else{m=b+1|0;n=x+16|0;j=a[m>>0]|0;k=j&255;if(!(k&128)){t=n;c[t>>2]=j&255;c[t+4>>2]=0;j=2;break}t=d[b+2>>0]|0;j=t<<7|k&127;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=3;break}t=d[b+3>>0]|0;j=t<<14|j&16383;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=4;break}t=d[b+4>>0]|0;j=t<<21|j&2097151;if(!(t&128)){t=n;c[t>>2]=j;c[t+4>>2]=0;j=5;break}e=28;l=b+5|0;j=j&268435455;k=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,e|0)|0;j=Sv(s|0,L()|0,j|0,k|0)|0;k=L()|0;e=e+7|0}while(e>>>0<64&((t&128|0)!=0|0!=0));t=n;c[t>>2]=j;c[t+4>>2]=k;j=1-m+l|0}while(0);c[o>>2]=j;j=Pr(x)|0;a:do if((j|0)==0&(c[x>>2]|0)!=0){o=x+24|0;q=x+28|0;r=x+36|0;s=x+40|0;t=x+16|0;while(1){if(!(c[w>>2]|0)){m=c[q>>2]|0;n=Lu(c[o>>2]|0,g,(m|0)<(h|0)?m:h)|0;n=(n|0)==0?m-h|0:n;if(!((n|0)<0|v&(n|0)==0)){k=t;j=c[k>>2]|0;k=c[k+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(k|0)==0){k=0;e=0;j=1}else{n=(c[f>>2]|0)+1|0;l=n;while(1){e=j&255;m=l+1|0;a[l>>0]=e|-128;j=bw(j|0,k|0,7)|0;k=L()|0;if((j|0)==0&(k|0)==0)break;else l=m}a[l>>0]=e&127;e=t;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-n+m|0}c[w>>2]=j;u=i;c[u>>2]=k;c[u+4>>2]=e;u=26}}else u=26;if((u|0)==26?(u=0,p=Qr(f,y,c[o>>2]|0,c[q>>2]|0,c[r>>2]|0,c[s>>2]|0)|0,p|0):0)break a;j=Pr(x)|0;if(!((j|0)==0&(c[x>>2]|0)!=0)){p=j;break}}}else p=j;while(0);if(!(c[w>>2]|0)){n=x+16|0;e=n;j=c[e>>2]|0;e=c[e+4>>2]|0;a[c[f>>2]>>0]=a[b>>0]|0;if((j|0)==0&(e|0)==0){k=0;e=0;j=1}else{o=(c[f>>2]|0)+1|0;l=o;while(1){k=j&255;m=l+1|0;a[l>>0]=k|-128;j=bw(j|0,e|0,7)|0;e=L()|0;if((j|0)==0&(e|0)==0)break;else l=m}a[l>>0]=k&127;e=n;k=c[e>>2]|0;e=c[e+4>>2]|0;j=1-o+m|0}c[w>>2]=j;c[i>>2]=k;c[i+4>>2]=e}j=c[x+24>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{x=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);j=c[y>>2]|0;if(!j){y=p;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);y=p;Ra=z;return y|0}return 0}function Sr(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0,l=0,m=0;m=Ra;Ra=Ra+16|0;i=m;j=m+8|0;f=d+252|0;g=d+280|0;a:do if((c[f>>2]|0)>0){e=0;b:while(1){h=Er(d,c[g>>2]|0,e,-1)|0;e=e+1|0;switch(h|0){case 0:case 101:break;default:break b}if((e|0)>=(c[f>>2]|0))break a}Fr(d);l=h;Ra=m;return l|0}while(0);Fr(d);if(!(a[d+233>>0]|0)){l=0;Ra=m;return l|0}k=d+48|0;if((c[k>>2]|0)!=255){l=0;Ra=m;return l|0}if(!(c[d+52>>2]|0)){l=0;Ra=m;return l|0}g=d+144|0;e=c[g>>2]|0;c[j>>2]=e;if(!e){e=c[d+20>>2]|0;c[i>>2]=c[d+16>>2];c[i+4>>2]=e;e=Bb(52411,i)|0;if(!e){l=7;Ra=m;return l|0}f=qd(c[d+12>>2]|0,e,-1,133,0,j,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}e=c[j>>2]|0;c[g>>2]=e;if(f){l=f;Ra=m;return l|0}}h=e;do if(!(Vc(h,1)|0)){f=c[h+100>>2]|0;g=f+8|0;if(!(b[g>>1]&9216)){j=f;c[j>>2]=2;c[j+4>>2]=0;b[g>>1]=4;break}else{Pg(f,2,0);break}}while(0);switch(Gc(h)|0){case 100:{f=Nc(h,0)|0;f=(f|0)==1?8:f;l=22;break}case 101:{f=0;l=22;break}default:{}}if((l|0)==22)c[k>>2]=f;if(!e){l=0;Ra=m;return l|0}e=c[h>>2]|0;l=h+136|0;k=c[l+4>>2]|0;if((k|0)>0|(k|0)==0&(c[l>>2]|0)>>>0>0)hc(e,h);f=kc(h)|0;c[h+20>>2]=770837923;c[h+36>>2]=-1;c[h+40>>2]=0;a[h+146>>0]=2;c[h+44>>2]=0;c[h+32>>2]=1;a[h+147>>0]=-1;c[h+48>>2]=0;l=h+64|0;c[l>>2]=0;c[l+4>>2]=0;if((f|0)==3082|(a[e+81>>0]|0)!=0){og(e);l=7;Ra=m;return l|0}else{l=c[e+68>>2]&f;Ra=m;return l|0}return 0}function Tr(f,h,i){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,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,Aa=0,Ba=0;Aa=Ra;Ra=Ra+176|0;m=Aa+96|0;sa=Aa+164|0;ta=Aa+152|0;ua=Aa+128|0;va=Aa+124|0;xa=Aa+120|0;ya=Aa+116|0;za=Aa+112|0;na=Aa+108|0;oa=Aa+104|0;pa=Aa+100|0;qa=Aa;if((h|0)>6){c[f+20>>2]=1;yc(c[f>>2]|0,55039,-1,1,-1)|0;Ra=Aa;return}j=c[i>>2]|0;if((((b[j+8>>1]&-15393)<<16>>16==-32255?(a[j+11>>0]|0)==112:0)?(Bu(c[j>>2]|0,54938)|0)==0:0)?(ra=c[j+16>>2]|0,ra|0):0){a:do switch(h|0){case 6:{h=c[i+20>>2]|0;j=e[h+8>>1]|0;if(j&4|0){k=c[h>>2]|0;ga=18;break a}if(j&8|0){k=Mg(+g[h>>3])|0;L()|0;ga=18;break a}if(!(j&18)){k=0;ga=18}else{k=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=18}break}case 5:{k=15;ga=18;break}case 4:{l=-1;k=15;ga=24;break}case 3:{m=55028;l=-1;k=15;ga=30;break}case 2:{o=55023;n=55028;l=-1;k=15;ga=36;break}default:{ka=55019;la=55023;ma=55028;fa=-1;q=15;ga=42}}while(0);do if((ga|0)==18){h=c[i+16>>2]|0;j=e[h+8>>1]|0;if(j&4|0){l=c[h>>2]|0;ga=24;break}if(j&8|0){l=Mg(+g[h>>3])|0;L()|0;ga=24;break}if(!(j&18)){l=0;ga=24}else{l=Ng(a[h+10>>0]|0,c[h+12>>2]|0,c[h+16>>2]|0)|0;L()|0;ga=24}}while(0);do if((ga|0)==24){h=c[i+12>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){m=c[h+16>>2]|0;ga=30;break}if(!(j&1)){m=Gg(h,1)|0;ga=30}else{m=0;ga=30}}else{m=0;ga=30}}while(0);do if((ga|0)==30){h=c[i+8>>2]|0;if(h){j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0){o=c[h+16>>2]|0;n=m;ga=36;break}if(!(j&1)){o=Gg(h,1)|0;n=m;ga=36}else{o=0;n=m;ga=36}}else{o=0;n=m;ga=36}}while(0);do if((ga|0)==36?(p=c[i+4>>2]|0,p|0):0){h=b[p+8>>1]|0;if((h&514)==514?(a[p+10>>0]|0)==1:0){ka=c[p+16>>2]|0;la=o;ma=n;fa=l;q=k;ga=42;break}if(!(h&1)){ka=Gg(p,1)|0;la=o;ma=n;fa=l;q=k;ga=42}}while(0);if((ga|0)==42?(ka|0)!=0&((la|0)!=0&(ma|0)!=0):0){if(!q){if((yc(c[f>>2]|0,59952,-1,1,0)|0)!=18){Ra=Aa;return}c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;Ra=Aa;return}if(ur(f,ra)|0){Ra=Aa;return}ja=c[ra>>2]|0;ea=ra+16|0;b:do if(!(c[ea>>2]|0)){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{V=(q|0)>-64?q:-64;V=(V|0)<64?V:64;W=(V|0)>-1;X=ja+24|0;Y=(fa|0)<0;Z=ta+4|0;_=ua+16|0;$=ua+4|0;aa=ua+8|0;ba=ua+12|0;ca=ua+20|0;da=0-V|0;ia=1;h=0;c:while(1){if(W)ha=(ia+-1+V|0)/(ia|0)|0;else ha=da;U=0;k=0;j=0;T=0;l=0;d:while(1){S=qa+(U*24|0)|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;e:do if((c[X>>2]|0)>0){Q=qa+(U*24|0)+4|0;m=qa+(U*24|0)+8|0;R=qa+(U*24|0)+16|0;P=0;O=-1;s=j;f:while(1){g:do if(Y|(P|0)==(fa|0)){c[ua>>2]=0;c[ua+4>>2]=0;c[ua+8>>2]=0;c[ua+12>>2]=0;c[ua+16>>2]=0;c[ua+20>>2]=0;h=Z;c[h>>2]=0;c[h+4>>2]=0;c[ta>>2]=ra;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,92,ta)|0;i=c[Z>>2]|0;do if(!h){h=i*24|0;j=pb(h,0)|0;c[_>>2]=j;if(!j){h=7;break}gw(j|0,0,h|0)|0;c[ua>>2]=ra;c[$>>2]=P;c[aa>>2]=ha;c[ba>>2]=i;c[ca>>2]=-1;h=c[ea>>2]|0;c[sa>>2]=0;h=Zr(h,sa,93,ua)|0;N=(h|0)==0;h:do if(N){if((i|0)>0){o=c[_>>2]|0;n=0;j=s;do{K=(c[o+(n*24|0)+12>>2]|0)==0;J=cw(1,0,n|0)|0;M=L()|0;k=(K?0:J)|k;j=(K?0:M)|j;n=n+1|0}while((n|0)!=(i|0))}else j=s;n=-1;I=0;o=c[ca>>2]|0;J=0;p=0;K=0;M=0;while(1){i:do if((o|0)<0){c[ca>>2]=0;o=c[ba>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=0;break}v=0;while(1){u=c[_>>2]|0;t=u+(v*24|0)+12|0;u=u+(v*24|0)+8|0;s=c[aa>>2]|0;q=c[t>>2]|0;if(q){i=c[u>>2]|0;o=q;j:do if((i|0)<(s|0)){o=q;do{r=a[o>>0]|0;if((r&255)<2){i=-1;o=0;break j}q=r&255;do if(!(q&128))r=1;else{ga=d[o+1>>0]|0;q=ga<<7|r&127;if(!(ga&128)){r=2;break}ga=d[o+2>>0]|0;q=ga<<14|q&16383;if(!(ga&128)){r=3;break}ga=d[o+3>>0]|0;q=ga<<21|q&2097151;if(!(ga&128)){r=4;break}q=(a[o+4>>0]&7)<<28|q&268435455;r=5}while(0);o=o+r|0;i=i+-2+q|0}while((i|0)<(s|0))}while(0);c[u>>2]=i;c[t>>2]=o;o=c[ba>>2]|0}v=v+1|0;if((v|0)>=(o|0)){ga=123;break}}}else{q=c[ba>>2]|0;if((q|0)<=0){t=P;r=I;s=j;q=J;i=K;o=M;break h}r=c[_>>2]|0;o=2147483647;i=0;while(1){if(!(c[r+(i*24|0)+12>>2]|0))x=o;else{x=c[r+(i*24|0)+8>>2]|0;x=(x|0)<(o|0)?x:o}i=i+1|0;if((i|0)==(q|0))break;else o=x}if((x|0)==2147483647){t=P;r=I;s=j;q=J;i=K;o=M;break h}w=x-(c[aa>>2]|0)|0;c[ca>>2]=w+1;i=0;while(1){u=r+(i*24|0)+12|0;v=r+(i*24|0)+8|0;o=c[u>>2]|0;if(o|0){q=c[v>>2]|0;k:do if((q|0)<=(x|0))do{t=a[o>>0]|0;if((t&255)<2){q=-1;o=0;break k}s=t&255;do if(!(s&128))t=1;else{ga=d[o+1>>0]|0;s=ga<<7|t&127;if(!(ga&128)){t=2;break}ga=d[o+2>>0]|0;s=ga<<14|s&16383;if(!(ga&128)){t=3;break}ga=d[o+3>>0]|0;s=ga<<21|s&2097151;if(!(ga&128)){t=4;break}s=(a[o+4>>0]&7)<<28|s&268435455;t=5}while(0);o=o+t|0;q=q+-2+s|0}while((q|0)<=(x|0));while(0);c[v>>2]=q;c[u>>2]=o}u=r+(i*24|0)+20|0;t=r+(i*24|0)+16|0;o=c[u>>2]|0;if(o|0){q=c[t>>2]|0;l:do if((q|0)<=(w|0))do{s=a[o>>0]|0;if((s&255)<2){q=-1;o=0;break l}r=s&255;do if(!(r&128))s=1;else{ga=d[o+1>>0]|0;r=ga<<7|s&127;if(!(ga&128)){s=2;break}ga=d[o+2>>0]|0;r=ga<<14|r&16383;if(!(ga&128)){s=3;break}ga=d[o+3>>0]|0;r=ga<<21|r&2097151;if(!(ga&128)){s=4;break}r=(a[o+4>>0]&7)<<28|r&268435455;s=5}while(0);o=o+s|0;q=q+-2+r|0}while((q|0)<=(w|0));while(0);c[t>>2]=q;c[u>>2]=o}i=i+1|0;o=c[ba>>2]|0;if((i|0)>=(o|0)){ga=123;break i}r=c[_>>2]|0}}while(0);do if((ga|0)==123){ga=0;H=c[ca>>2]|0;if((o|0)<=0){s=0;t=0;r=0;q=0;i=0;o=H;break}F=c[_>>2]|0;G=(c[aa>>2]|0)+H|0;s=0;E=0;t=0;r=0;q=0;i=0;while(1){v=c[F+(E*24|0)+20>>2]|0;m:do if(v){u=c[F+(E*24|0)+16>>2]|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;C=cw(1,0,E|0)|0;D=L()|0;B=c[F+(E*24|0)>>2]|0;if((B|0)<=0){x=v;while(1){s=(((t|T)&C|0)==0&((r|l)&D|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[x>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{B=d[x+1>>0]|0;v=B<<7|w&127;if(!(B&128)){w=2;break}B=d[x+2>>0]|0;v=B<<14|v&16383;if(!(B&128)){w=3;break}B=d[x+3>>0]|0;v=B<<21|v&2097151;if(!(B&128)){w=4;break}v=(a[x+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break m;else x=x+w|0}}A=v;while(1){w=cw(1,0,u-H|0)|0;x=L()|0;y=(t|T)&C;z=(r|l)&D;v=0;do{Ba=bw(w|0,x|0,v|0)|0;q=Ba|q;i=L()|0|i;v=v+1|0}while((v|0)!=(B|0));s=((y|0)==0&(z|0)==0?1e3:1)+s|0;t=t|C;r=r|D;w=a[A>>0]|0;if((w&255)<2)break m;v=w&255;do if(!(v&128))w=1;else{Ba=d[A+1>>0]|0;v=Ba<<7|w&127;if(!(Ba&128)){w=2;break}Ba=d[A+2>>0]|0;v=Ba<<14|v&16383;if(!(Ba&128)){w=3;break}Ba=d[A+3>>0]|0;v=Ba<<21|v&2097151;if(!(Ba&128)){w=4;break}v=(a[A+4>>0]&7)<<28|v&268435455;w=5}while(0);u=u+-2+v|0;if((u|0)<(H|0)|(u|0)>=(G|0))break;else A=A+w|0}}while(0);E=E+1|0;if((E|0)==(o|0)){o=H;break}}}while(0);Ba=(s|0)>(n|0);n=Ba?s:n;I=Ba?o:I;J=Ba?t:J;p=Ba?r:p;K=Ba?q:K;M=Ba?i:M}}else{n=0;t=0;r=0;q=0;p=0;i=0;o=0}while(0);j=c[_>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{Ba=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);if(!N){j=11;n=O;o=s;break g}if((n|0)<=(O|0)){j=0;n=O;h=0;o=s;break g}c[S>>2]=t;c[Q>>2]=r;j=m;c[j>>2]=q;c[j+4>>2]=p;j=R;c[j>>2]=i;c[j+4>>2]=o;j=0;h=0;o=s;break g}while(0);j=11;n=O;o=s}else{j=10;n=O;o=s}while(0);switch(j&15){case 10:case 0:break;default:break f}P=P+1|0;if((P|0)>=(c[X>>2]|0)){j=o;ga=158;break e}else{O=n;s=o}}if(!j){m=T;j=o}else break d}else{m=qa+(U*24|0)+8|0;ga=158}while(0);if((ga|0)==158){ga=0;Ba=m;m=c[Ba>>2]|T;l=c[Ba+4>>2]|l}U=U+1|0;if(U>>>0>=ia>>>0){ga=161;break}else T=m}if((ga|0)==161){ga=0;j=(ia|0)==4|(k|0)==(m|0)&(j|0)==(l|0)?2:0}switch(j|0){case 2:{ga=164;break c}case 11:{m=0;break c}case 0:break;default:break b}ia=ia+1|0}n:do if((ga|0)==164)if(!h){F=ia+-1|0;G=ra+12|0;H=ra+20|0;I=ha+-1|0;E=0;m=0;k=0;s=0;while(1){B=(E|0)==(F|0);i=c[qa+(E*24|0)>>2]|0;p=c[qa+(E*24|0)+4>>2]|0;r=qa+(E*24|0)+16|0;q=c[r>>2]|0;r=c[r+4>>2]|0;o=c[ra>>2]|0;c[ya>>2]=0;i=i+1|0;n=c[G>>2]|0;l=(n|0)==0;do if(l)h=29576;else{h=c[n+120>>2]|0;if(h|0?i>>>0<(e[n+144>>1]|0)>>>0:0){h=h+(i*40|0)|0;break}h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576}while(0);j=b[h+8>>1]|0;if((j&514)==514?(a[h+10>>0]|0)==1:0)A=c[h+16>>2]|0;else if(!(j&1))A=Gg(h,1)|0;else A=0;if(!l){j=c[n>>2]|0;l=n+40|0;h=c[l>>2]|0;if((h|0)==3082|(a[j+81>>0]|0)!=0){og(j);h=7}else h=c[j+68>>2]&h;c[l>>2]=h}n=c[G>>2]|0;if(!A){if(!n)h=1;else{h=c[n+120>>2]|0;do if(!h)ga=186;else{if(i>>>0>=(e[n+144>>1]|0)>>>0){ga=186;break}h=h+(i*40|0)|0;j=n}while(0);if((ga|0)==186){ga=0;h=c[n>>2]|0;c[h+64>>2]=25;Ne(h,25);h=29576;j=n}h=b[h+8>>1]&31;l=c[j>>2]|0;n=n+40|0;j=c[n>>2]|0;if((j|0)==3082|(a[l+81>>0]|0)!=0){og(l);j=7}else j=c[l+68>>2]&j;c[n>>2]=j}h=(-1431655766>>>h&1|0)==0?7:0;j=s}else{z=Lc(n,i)|0;y=o+36|0;j=c[y>>2]|0;D=c[j>>2]|0;l=c[H>>2]|0;c[sa>>2]=0;h=Za[c[D+12>>2]&127](j,A,z,sa)|0;if(h|0)break;c[c[sa>>2]>>2]=j;if((c[D>>2]|0)>0?(wa=Xa[c[D+24>>2]&255](c[sa>>2]|0,l)|0,wa|0):0){ga=195;break}C=c[sa>>2]|0;w=D+20|0;x=(E|0)!=0;t=p;v=0;o=0;j=s;s=q;o:while(1){c[na>>2]=-1;c[oa>>2]=0;c[pa>>2]=0;h=$a[c[w>>2]&127](C,za,na,oa,pa,ya)|0;switch(h|0){case 101:{ga=199;break o}case 0:break;default:{ga=274;break o}}h=c[ya>>2]|0;p:do if((h|0)<(t|0)){p=v;i=t;h=0;n=s;l=r}else{if(!o){o=c[oa>>2]|0;n=z-o|0;i=c[H>>2]|0;o=A+o|0;q:do if((s|0)==0&(r|0)==0){i=t;q=0;r=0}else{h=0;while(1){Ba=cw(1,0,h|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)h=h+1|0;else break}l=0;while(1){Ba=cw(1,0,I-l|0)|0;if((Ba&s|0)==0&((L()|0)&r|0)==0)l=l+1|0;else break}Ba=h-l|0;p=(Ba|0)/2|0;if((Ba|0)<=1){i=t;q=s;break}c[ta>>2]=0;l=c[y>>2]|0;q=c[l>>2]|0;c[sa>>2]=0;h=Za[c[q+12>>2]&127](l,o,n,sa)|0;r:do if(!h){c[c[sa>>2]>>2]=l;do if((c[q>>2]|0)>0){h=Xa[c[q+24>>2]&255](c[sa>>2]|0,i)|0;if(!h)break;Wa[c[q+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;ga=216;break r}while(0);o=c[sa>>2]|0;l=p+ha|0;n=q+20|0;while(1){if((c[ta>>2]|0)>=(l|0)){ga=219;break}c[ua>>2]=0;c[va>>2]=0;c[xa>>2]=0;h=$a[c[n>>2]&127](o,sa,ua,va,xa,ta)|0;if(h|0){ga=221;break}}if((ga|0)==219){ga=0;Wa[c[q+16>>2]&127](o)|0;h=0}else if((ga|0)==221){ga=0;Wa[c[q+16>>2]&127](o)|0;if((h|0)==101)h=1;else break}i=h-ha+(c[ta>>2]|0)|0;Ba=(i|0)>0;q=bw(s|0,r|0,(Ba?i:0)|0)|0;r=L()|0;i=(Ba?i:0)+t|0;break q}else ga=216;while(0);if((ga|0)==216)ga=0;p=v;o=1;i=t;n=s;l=r;break p}while(0);do if(x|(i|0)>0){n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}h=sb(m,l,h)|0;if(!h){p=v;o=1;h=7;n=q;l=r;break p}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;h=m+k|0;ga=238}else{h=c[oa>>2]|0;if(!h)break;if((h|0)<0)h=Eu(A)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){p=v;o=1;h=7;n=q;l=r;break p}l=sb(m,n,l)|0;if(!l){p=v;o=1;h=7;n=q;l=r;break p}m=l;j=n}ew(m+k|0,A|0,h|0)|0;k=h+k|0;h=m+k|0;ga=238}while(0);if((ga|0)==238){ga=0;a[h>>0]=0}h=c[ya>>2]|0;if((h|0)<(i|0)){p=v;o=1;h=0;n=q;l=r;break}else{u=1;t=i}}else{u=o;q=s}if((h|0)>=(t+ha|0)){ga=241;break o}p=cw(1,0,h-t|0)|0;p=(p&q|0)!=0|((L()|0)&r|0)!=0;do if((h|0)>(t|0)){o=A+v|0;h=(c[oa>>2]|0)-v|0;if((h|0)<0)h=Eu(o)|0;if((k+1+h|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;k=h+k|0;a[m+k>>0]=0;ga=255}else ga=255;while(0);do if((ga|0)==255){ga=0;if(p){n=Eu(ka)|0;o=n+k|0;if((o+1|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;break}h=sb(m,l,h)|0;if(!h){h=7;break}m=h;j=l}ew(m+k|0,ka|0,n|0)|0;a[m+o>>0]=0;k=o}h=c[oa>>2]|0;o=A+h|0;h=(c[pa>>2]|0)-h|0;if((h|0)<0)h=Eu(o)|0;i=h+k|0;if((i+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,h|0,((h|0)<0)<<31>>31|0)|0;l=L()|0;if(mb()|0){h=7;break}l=sb(m,n,l)|0;if(!l){h=7;break}m=l;j=n}ew(m+k|0,o|0,h|0)|0;h=m+i|0;a[h>>0]=0;if(!p){h=0;k=i;break}o=Eu(la)|0;k=o+i|0;if((k+1|0)>=(j|0)){n=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;n=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;k=i;break}l=sb(m,n,h)|0;if(!l){h=7;k=i;break}h=l+i|0;m=l;j=n}ew(h|0,la|0,o|0)|0;a[m+k>>0]=0;h=0}while(0);p=c[pa>>2]|0;o=u;i=t;n=q;l=r}while(0);if(!h){t=i;v=p;s=n;r=l}else break}do if((ga|0)==199){n=A+v|0;o=Eu(n)|0;if((k+1+o|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,n|0,o|0)|0;k=o+k|0;a[m+k>>0]=0;h=0;ga=274}else if((ga|0)==241){if(!B){h=0;ga=274;break}n=Eu(ma)|0;if((k+1+n|0)>=(j|0)){l=Sv(j|0,((j|0)<0)<<31>>31|0,100,0)|0;l=Sv(l|0,L()|0,n|0,((n|0)<0)<<31>>31|0)|0;h=L()|0;if(mb()|0){h=7;ga=274;break}h=sb(m,l,h)|0;if(!h){h=7;ga=274;break}m=h;j=l}ew(m+k|0,ma|0,n|0)|0;k=n+k|0;a[m+k>>0]=0;h=0;ga=274}while(0);if((ga|0)==274)ga=0;Wa[c[D+16>>2]&127](C)|0}E=E+1|0;if(!(E>>>0>>0&(h|0)==0))break n;else s=j}if((ga|0)==195){Wa[c[D+16>>2]&127](c[sa>>2]|0)|0;c[sa>>2]=0;h=wa}}else m=0;while(0);j=ja+248|0;k=c[j>>2]|0;do if(k|0){l=c[k+20>>2]|0;gc(c[k+16>>2]|0)|0;if(l|0){if(c[l+480>>2]|0){Xd(l,k);break}Ba=k;if((c[l+304>>2]|0)>>>0<=Ba>>>0?(c[l+308>>2]|0)>>>0>Ba>>>0:0){Ba=l+300|0;c[k>>2]=c[Ba>>2];c[Ba>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{Ba=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[j>>2]=0;if(!h){if((yc(c[f>>2]|0,m,-1,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=h;j=c[f>>2]|0;if(b[j+8>>1]&1){switch(h|0){case 516:{h=50738;break}case 100:{h=50760;break}case 101:{h=50782;break}default:{h=h&255;if(h>>>0<29?(520028155>>>h&1|0)!=0:0)h=c[22960+(h<<2)>>2]|0;else h=50724}}yc(j,h,-1,1,0)|0}if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Ba=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);Ra=Aa;return}h=c[f>>2]|0;j=h+8|0;if(!(b[j>>1]&9216))b[j>>1]=1;else{Dg(h);h=c[f>>2]|0}c[f+20>>2]=7;h=c[h+32>>2]|0;j=h+81|0;if(a[j>>0]|0){Ra=Aa;return}if(a[h+82>>0]|0){Ra=Aa;return}a[j>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;Ba=h+272|0;c[Ba>>2]=(c[Ba>>2]|0)+1;h=c[h+236>>2]|0;if(!h){Ra=Aa;return}c[h+12>>2]=7;Ra=Aa;return}c[m>>2]=51022;h=Bb(55087,m)|0;c[f+20>>2]=1;yc(c[f>>2]|0,h,-1,1,-1)|0;if(!h){Ra=Aa;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);Ra=Aa;return}else{Ba=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);Ra=Aa;return}}function Ur(f,g,h){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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;R=Ra;Ra=Ra+160|0;M=R+104|0;i=R+96|0;E=R;F=R+136|0;O=R+64|0;G=R+132|0;I=R+128|0;J=R+124|0;K=R+120|0;g=c[h>>2]|0;if((((b[g+8>>1]&-15393)<<16>>16==-32255?(a[g+11>>0]|0)==112:0)?(Bu(c[g>>2]|0,54938)|0)==0:0)?(j=c[g+16>>2]|0,j|0):0){if(ur(f,j)|0){Ra=R;return}P=c[j>>2]|0;C=P+36|0;h=c[c[C>>2]>>2]|0;D=j+16|0;g=c[D>>2]|0;do if(!g){if((yc(c[f>>2]|0,59952,0,1,0)|0)==18){c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0}}else{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]=0;k=F+4|0;c[k>>2]=0;c[k+4>>2]=0;c[F>>2]=j;c[E>>2]=0;k=Zr(g,E,92,F)|0;B=c[F+8>>2]|0;a:do if(!k){A=pb(B*12|0,0)|0;H=O+24|0;c[H>>2]=A;if(A){z=j+32|0;A=c[z+4>>2]|0;x=O+16|0;c[x>>2]=c[z>>2];c[x+4>>2]=A;c[O>>2]=j;x=P+24|0;if((c[x>>2]|0)>0){y=O+4|0;z=O+8|0;A=j+12|0;t=j+20|0;u=h+20|0;v=(B|0)>0;w=P+40|0;s=h+16|0;r=0;h=0;j=0;n=0;b:while(1){c[G>>2]=0;c[I>>2]=0;c[J>>2]=0;c[K>>2]=0;c[y>>2]=r;c[z>>2]=0;l=c[D>>2]|0;c[E>>2]=0;Zr(l,E,94,O)|0;l=c[A>>2]|0;q=r;r=r+1|0;k=(l|0)==0;do if(k)g=29576;else{g=c[l+120>>2]|0;if(g|0?r>>>0<(e[l+144>>1]|0)>>>0:0){g=g+(r*40|0)|0;break}g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576}while(0);i=b[g+8>>1]|0;if((i&514)==514?(a[g+10>>0]|0)==1:0)m=c[g+16>>2]|0;else if(!(i&1))m=Gg(g,1)|0;else m=0;if(!k){i=c[l>>2]|0;k=l+40|0;g=c[k>>2]|0;if((g|0)==3082|(a[i+81>>0]|0)!=0){og(i);g=7}else g=c[i+68>>2]&g;c[k>>2]=g}g=Lc(c[A>>2]|0,r)|0;if(!m){l=c[A>>2]|0;if(!l)g=1;else{g=c[l+120>>2]|0;do if(!g)Q=38;else{if(r>>>0>=(e[l+144>>1]|0)>>>0){Q=38;break}g=g+(r*40|0)|0;i=l}while(0);if((Q|0)==38){Q=0;g=c[l>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;i=l}g=b[g+8>>1]&31;k=c[i>>2]|0;l=l+40|0;i=c[l>>2]|0;if((i|0)==3082|(a[k+81>>0]|0)!=0){og(k);i=7}else i=c[k+68>>2]&i;c[l>>2]=i}if(!(-1431655766>>>g&1)){k=7;g=H;Q=83;break a}else g=n}else{i=c[C>>2]|0;k=c[t>>2]|0;l=c[i>>2]|0;c[E>>2]=0;g=Za[c[l+12>>2]&127](i,m,g,E)|0;if(g|0){Q=47;break}c[c[E>>2]>>2]=i;if((c[l>>2]|0)>0?(N=Xa[c[l+24>>2]&255](c[E>>2]|0,k)|0,N|0):0){Q=46;break}p=c[E>>2]|0;g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;i=n;c:while(1){d:while(1){switch(g|0){case 101:break c;case 0:break;default:{Q=79;break b}}do if(v){n=c[H>>2]|0;k=0;l=2147483647;m=0;while(1){g=n+(m*12|0)|0;if(!(c[g>>2]|0))o=k;else{S=(c[n+(m*12|0)+4>>2]|0)-(c[n+(m*12|0)+8>>2]|0)|0;T=(S|0)<(l|0);o=T?g:k;l=T?S:l}m=m+1|0;if((m|0)==(B|0))break;else k=o}if(!o){g=101;break}m=c[o>>2]|0;k=a[m>>0]|0;if((k&255)<2)c[o>>2]=0;else{n=o+4|0;g=k&255;do if(!(g&128))k=1;else{T=d[m+1>>0]|0;g=T<<7|k&127;if(!(T&128)){k=2;break}T=d[m+2>>0]|0;g=T<<14|g&16383;if(!(T&128)){k=3;break}T=d[m+3>>0]|0;g=T<<21|g&2097151;if(!(T&128)){k=4;break}g=(a[m+4>>0]&7)<<28|g&268435455;k=5}while(0);c[o>>2]=m+k;c[n>>2]=g+-2+(c[n>>2]|0)}if((c[K>>2]|0)>=(l|0))break d;do{g=$a[c[u>>2]&127](p,F,G,I,J,K)|0;k=(g|0)==0}while(k&(c[K>>2]|0)<(l|0));if(k)break d;if((g|0)!=101)break;g=(c[w>>2]|0)==0?267:101}else g=101;while(0)}T=(o-(c[H>>2]|0)|0)/12|0;m=c[I>>2]|0;l=(c[J>>2]|0)-m|0;c[M>>2]=q;c[M+4>>2]=T;c[M+8>>2]=m;c[M+12>>2]=l;Cb(64,E,55116,M)|0;l=Eu(E)|0;m=l+j|0;do if((m+1|0)<(i|0))Q=73;else{k=Sv(i|0,((i|0)<0)<<31>>31|0,100,0)|0;k=Sv(k|0,L()|0,l|0,((l|0)<0)<<31>>31|0)|0;g=L()|0;if(mb()|0){g=7;break}g=sb(h,k,g)|0;if(!g){g=7;break}h=g;i=k;Q=73}while(0);if((Q|0)==73){Q=0;ew(h+j|0,E|0,l|0)|0;a[h+m>>0]=0;g=0;j=m}}Wa[c[s>>2]&127](p)|0;g=i}if((r|0)>=(c[x>>2]|0)){k=0;g=H;Q=83;break a}else n=g}if((Q|0)==46){Wa[c[l+16>>2]&127](c[E>>2]|0)|0;c[E>>2]=0;g=N;Q=47}else if((Q|0)==79)Wa[c[s>>2]&127](p)|0;k=g;g=H;Q=83}else{k=0;g=H;h=0;j=0;Q=83}}else{k=7;l=0;j=0}}else{g=O+24|0;h=0;j=0;Q=83}while(0);do if((Q|0)==83){g=c[g>>2]|0;if(g)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);l=h;break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);l=h;break}else l=h}while(0);g=P+248|0;h=c[g>>2]|0;do if(h|0){i=c[h+20>>2]|0;gc(c[h+16>>2]|0)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,h);break}T=h;if((c[i+304>>2]|0)>>>0<=T>>>0?(c[i+308>>2]|0)>>>0>T>>>0:0){T=i+300|0;c[h>>2]=c[T>>2];c[T>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{T=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);c[g>>2]=0;if(!k){if((yc(c[f>>2]|0,l,j+-1|0,1,90)|0)!=18)break;c[f+20>>2]=18;yc(c[f>>2]|0,31223,-1,1,0)|0;break}c[f+20>>2]=k;h=c[f>>2]|0;if(b[h+8>>1]&1){switch(k|0){case 516:{g=50738;break}case 100:{g=50760;break}case 101:{g=50782;break}default:{g=k&255;if(g>>>0<29?(520028155>>>g&1|0)!=0:0)g=c[22960+(g<<2)>>2]|0;else g=50724}}yc(h,g,-1,1,0)|0}if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{T=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);Ra=R;return}c[i>>2]=51030;g=Bb(55087,i)|0;c[f+20>>2]=1;yc(c[f>>2]|0,g,-1,1,-1)|0;if(!g){Ra=R;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=R;return}else{T=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=R;return}}function Vr(d,e,f){d=d|0;e=e|0;f=f|0;var g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;g=i;e=c[f>>2]|0;if((((b[e+8>>1]&-15393)<<16>>16==-32255?(a[e+11>>0]|0)==112:0)?(Bu(c[e>>2]|0,54938)|0)==0:0)?(h=c[e+16>>2]|0,h|0):0){g=c[h>>2]|0;f=g+12|0;e=nd(c[f>>2]|0,55167,0,0,0)|0;a:do if(!e){e=Dr(g,1)|0;switch(e|0){case 0:case 101:{h=nd(c[f>>2]|0,55182,0,0,0)|0;e=(h|0)==0?e:h;break a}default:{nd(c[f>>2]|0,55195,0,0,0)|0;nd(c[f>>2]|0,55182,0,0,0)|0;break a}}}while(0);f=g+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}j=g;if((c[h+304>>2]|0)>>>0<=j>>>0?(c[h+308>>2]|0)>>>0>j>>>0:0){j=h+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;switch(e|0){case 0:{if((yc(c[d>>2]|0,55129,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}case 101:{if((yc(c[d>>2]|0,55145,-1,1,0)|0)!=18){Ra=i;return}c[d+20>>2]=18;yc(c[d>>2]|0,31223,-1,1,0)|0;Ra=i;return}default:{c[d+20>>2]=(e|0)==0?-1:e;f=c[d>>2]|0;if(!(b[f+8>>1]&1)){Ra=i;return}switch(e|0){case 516:{e=50738;break}case 100:{e=50760;break}default:{e=e&255;if(e>>>0<29?(520028155>>>e&1|0)!=0:0)e=c[22960+(e<<2)>>2]|0;else e=50724}}yc(f,e,-1,1,0)|0;Ra=i;return}}}c[g>>2]=37598;e=Bb(55087,g)|0;c[d+20>>2]=1;yc(c[d>>2]|0,e,-1,1,-1)|0;if(!e){Ra=i;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);Ra=i;return}else{j=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);Ra=i;return}}function Wr(e,f,g){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,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0;$=Ra;Ra=Ra+80|0;X=$+48|0;o=$+40|0;i=$+32|0;Y=$+76|0;U=$+64|0;V=$+60|0;Z=$+56|0;W=$;h=c[g>>2]|0;if((((b[h+8>>1]&-15393)<<16>>16==-32255?(a[h+11>>0]|0)==112:0)?(Bu(c[h>>2]|0,54938)|0)==0:0)?(T=c[h+16>>2]|0,T|0):0){do if((f|0)>1?(j=c[g+4>>2]|0,(j|0)!=0):0){f=b[j+8>>1]|0;if((f&514)==514?(a[j+10>>0]|0)==1:0){f=c[j+16>>2]|0;break}if(!(f&1))f=Gg(j,1)|0;else f=0}else f=0;while(0);_=c[T>>2]|0;O=(f|0)==0?55212:f;P=T+16|0;f=c[P>>2]|0;if(!f){if((yc(c[e>>2]|0,59952,0,0,0)|0)!=18){Ra=$;return}c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0;Ra=$;return}Q=W+8|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[W>>2]=T;R=W+4|0;c[R>>2]=c[_+24>>2];S=T+92|0;g=c[S>>2]|0;if(g)if(!(Bu(c[g+12>>2]|0,O)|0)){j=0;u=47}else{a[g>>0]=0;do if((a[g+1>>0]|0)==0?(a[g+2>>0]|0)==0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{N=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-N;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[S>>2]=0;f=c[P>>2]|0;u=27}else u=27;a:do if((u|0)==27){c[U>>2]=0;c[Y>>2]=0;Zr(f,Y,95,U)|0;g=c[U>>2]|0;c[T+24>>2]=g;c[Q>>2]=g;f=a[O>>0]|0;b:do if(!(f<<24>>24))f=0;else{j=_+232|0;k=_+234|0;l=c[R>>2]|0;m=G(l,g)|0;n=m*3|0;i=G((l+31|0)/32|0,g)|0;h=0;g=0;c:while(1){c[Y>>2]=0;switch(f<<24>>24){case 98:case 121:case 120:case 115:case 99:case 112:break;case 110:{if(!(a[j>>0]|0)){f=110;break c}break}case 97:{if(!(a[j>>0]|0)){f=97;break c}break}case 108:{if(!(a[k>>0]|0)){f=108;break c}break}default:break c}switch(f<<24>>24|0){case 99:case 112:case 110:{f=1;break}case 115:case 108:case 97:{f=l;break}case 121:{f=m;break}case 98:{f=i;break}default:f=n}g=f+g|0;h=h+1|0;f=a[O+h>>0]|0;if(!(f<<24>>24)){f=g;break b}}c[o>>2]=f<<24>>24;Wp(Y,55216,o);f=c[Y>>2]|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);break a}while(0);g=cw(f|0,0,3)|0;i=L()|0;g=g|4;h=Eu(O)|0;N=Sv(h|0,0,21,0)|0;i=Sv(N|0,L()|0,g|0,i|0)|0;i=pb(i,L()|0)|0;if(!i){c[S>>2]=0;c[T+88>>2]=1;i=0;f=7;h=0;u=303;break}else{j=g+20|0;gw(i|0,0,j|0)|0;u=i+16|0;c[u>>2]=20;g=f+1|0;c[u+(g<<2)>>2]=(g<<2)+20;c[i+4>>2]=f;j=i+j|0;c[i+12>>2]=j;ew(j|0,O|0,h+1|0)|0;a[i>>0]=1;c[S>>2]=i;c[T+88>>2]=1;j=1;g=i;u=47;break}}while(0);d:do if((u|0)==47){f=g+1|0;do if(a[f>>0]|0){f=g+2|0;if(!(a[f>>0]|0)){a[f>>0]=1;N=g+16+((c[g+4>>2]|0)+2<<2)|0;i=98;break}f=g+4|0;h=pb(c[f>>2]<<2,0)|0;if(!h){i=0;f=7;h=0;u=303;break d}if(!(c[g+8>>2]|0)){N=h;i=90}else{ew(h|0,g+20|0,c[f>>2]<<2|0)|0;N=h;i=90}}else{a[f>>0]=1;N=g+20|0;i=98}while(0);h=N;F=W+28|0;c[F>>2]=h;H=T+24|0;c[Q>>2]=c[H>>2];c[V>>2]=0;I=c[T>>2]|0;c[Z>>2]=0;J=W+24|0;K=U+4|0;M=(j|0)==0;x=T+32|0;y=I+140|0;z=U+4|0;A=I+16|0;B=I+20|0;C=T+28|0;D=I+12|0;E=W+16|0;w=0;g=N;while(1){v=O+w|0;f=a[v>>0]|0;if(!(f<<24>>24)){f=0;break}a[J>>0]=f;e:do switch(f<<24>>24|0){case 112:{if(M)f=0;else{c[g>>2]=c[Q>>2];f=0}break}case 99:{if(M)f=0;else{c[g>>2]=c[R>>2];f=0}break}case 110:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){k=mc(29576)|0;u=74}else u=65}else j=0}else u=65;if((u|0)==65){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=74}if((u|0)==74){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{t=d[k+1>>0]|0;f=t<<7|g&127;if(!(t&128)){g=0;break}t=d[k+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){g=0;break}t=d[k+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){t=d[j>>0]|0;s=cw(t&127|0,0,l|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((t&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);j=f;f=(f|0)==0&(g|0)==0?267:0}c[V>>2]=f;c[c[F>>2]>>2]=j}break}case 97:{if(M)f=0;else{f=c[Z>>2]|0;if(!f){f=lr(I,Z)|0;if(!f){f=c[Z>>2]|0;if(!f){l=mc(29576)|0;u=99}else u=90}}else u=90;if((u|0)==90){g=c[f+120>>2]|0;if((g|0)!=0?(b[f+144>>1]|0)!=0:0)j=f;else{g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;l=k;u=99}if((u|0)==99){u=0;g=a[l>>0]|0;f=g&255;do if(!(f&128)){j=1;f=g&255;g=0}else{t=d[l+1>>0]|0;f=t<<7|f&127;if(!(t&128)){j=2;g=0;break}t=d[l+2>>0]|0;f=t<<14|f&16383;if(!(t&128)){j=3;g=0;break}t=d[l+3>>0]|0;f=t<<21|f&2097151;if(!(t&128)){j=4;g=0;break}j=28;k=l+4|0;f=f&268435455;g=0;do{t=k;k=k+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,j|0)|0;f=Sv(s|0,L()|0,f|0,g|0)|0;g=L()|0;j=j+7|0}while(j>>>0<64&((t&128|0)!=0|0!=0));j=k-l|0}while(0);if((f|0)==0&(g|0)==0)f=267;else{c[V>>2]=0;if((c[R>>2]|0)<=0){f=0;break e}o=bw(f|0,0,1)|0;p=L()|0;n=0;m=l+j|0;while(1){j=a[m>>0]|0;g=j&255;do if(!(g&128)){k=1;g=j&255}else{t=d[m+1>>0]|0;g=t<<7|g&127;if(!(t&128)){k=2;break}t=d[m+2>>0]|0;g=t<<14|g&16383;if(!(t&128)){k=3;break}t=d[m+3>>0]|0;g=t<<21|g&2097151;if(!(t&128)){k=4;break}k=28;l=m+4|0;g=g&268435455;j=0;do{t=l;l=l+1|0;t=d[t>>0]|0;s=cw(t&127|0,0,k|0)|0;g=Sv(s|0,L()|0,g|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((t&128|0)!=0|0!=0));k=l-m|0}while(0);t=Sv(g|0,0,o|0,p|0)|0;t=_v(t|0,L()|0,f|0,0)|0;L()|0;c[(c[F>>2]|0)+(n<<2)>>2]=t;n=n+1|0;if((n|0)>=(c[R>>2]|0)){f=0;break e}else m=m+k|0}}}c[V>>2]=f}break}case 108:{l=x;k=c[l>>2]|0;l=c[l+4>>2]|0;u=c[y>>2]|0;c[Y>>2]=u;g=u;do if(!u){j=c[B>>2]|0;c[X>>2]=c[A>>2];c[X+4>>2]=j;j=Bb(52364,X)|0;if(!j){f=7;u=156;break}f=qd(c[D>>2]|0,j,-1,133,0,Y,0)|0;if(!(c[7324]|0))ab[c[29344>>2]&127](j);else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j)}g=c[Y>>2]|0;c[y>>2]=g;if(!f)u=134;else u=156}else u=134;while(0);f:do if((u|0)==134){u=0;o=g;do if(!(Vc(o,1)|0)){f=c[o+100>>2]|0;j=f+8|0;if(!(b[j>>1]&9216)){t=f;c[t>>2]=k;c[t+4>>2]=l;b[j>>1]=4;break}else{Pg(f,k,l);break}}while(0);f=(g|0)==0;do if((Gc(o)|0)==100){if(!f){m=o+120|0;f=c[m>>2]|0;do if(!f)u=143;else{if(!(b[o+144>>1]|0)){u=143;break}j=f;f=o}while(0);if((u|0)==143){u=0;j=c[o>>2]|0;c[j+64>>2]=25;Ne(j,25);j=29576;f=o}l=b[j+8>>1]&15;j=c[f>>2]|0;n=o+40|0;k=c[n>>2]|0;if((k|0)==3082|(a[j+81>>0]|0)!=0){og(j);j=7}else j=c[j+68>>2]&k;c[n>>2]=j;if((l|16)<<16>>16!=16){u=150;break}c[V>>2]=0;f=c[m>>2]|0;do if(!f)u=160;else{if(!(b[o+144>>1]|0)){u=160;break}j=o}while(0);if((u|0)==160){u=0;f=c[o>>2]|0;c[f+64>>2]=25;Ne(f,25);f=29576;j=o}k=mc(f)|0;f=c[j>>2]|0;j=c[n>>2]|0;if((j|0)==3082|(a[f+81>>0]|0)!=0){og(f);f=7}else f=c[f+68>>2]&j;c[n>>2]=f;if((c[R>>2]|0)<=0){k=o;g=o;f=0;break f}m=k;n=0;while(1){f=d[m>>0]|0;do if(!(f&128))j=1;else{u=d[m+1>>0]|0;f=u<<7|f&127;if(!(u&128)){j=2;break}u=d[m+2>>0]|0;f=u<<14|f&16383;if(!(u&128)){j=3;break}u=d[m+3>>0]|0;f=u<<21|f&2097151;if(!(u&128)){j=4;break}k=28;l=m+4|0;f=f&268435455;j=0;do{u=l;l=l+1|0;u=d[u>>0]|0;t=cw(u&127|0,0,k|0)|0;f=Sv(t|0,L()|0,f|0,j|0)|0;j=L()|0;k=k+7|0}while(k>>>0<64&((u&128|0)!=0|0!=0));j=l-m|0}while(0);c[(c[F>>2]|0)+(n<<2)>>2]=f;n=n+1|0;if((n|0)>=(c[R>>2]|0)){j=o;f=0;u=174;break f}else m=m+j|0}}}else if(!f){f=o;u=150}while(0);do if((u|0)==150){f=c[f>>2]|0;u=o+136|0;t=c[u+4>>2]|0;if((t|0)>0|(t|0)==0&(c[u>>2]|0)>>>0>0)hc(f,o);g=kc(o)|0;c[o+20>>2]=770837923;c[o+36>>2]=-1;c[o+40>>2]=0;a[o+146>>0]=2;c[o+44>>2]=0;c[o+32>>2]=1;a[o+147>>0]=-1;c[o+48>>2]=0;u=o+64|0;c[u>>2]=0;c[u+4>>2]=0;if(!((g|0)==3082|(a[f+81>>0]|0)!=0)){f=c[f+68>>2]&g;if(!f)break;else{g=0;u=156;break f}}else{og(f);f=7;g=0;u=156;break f}}while(0);f=267;g=0;u=156}while(0);if((u|0)==156){c[V>>2]=f;j=g;u=174}if((u|0)==174){u=0;if(!g)break e;k=j;g=j}g=c[g>>2]|0;t=k+136|0;s=c[t+4>>2]|0;if((s|0)>0|(s|0)==0&(c[t>>2]|0)>>>0>0)hc(g,k);t=kc(k)|0;c[k+20>>2]=770837923;c[k+36>>2]=-1;c[k+40>>2]=0;a[k+146>>0]=2;c[k+44>>2]=0;c[k+32>>2]=1;a[k+147>>0]=-1;c[k+48>>2]=0;s=k+64|0;c[s>>2]=0;c[s+4>>2]=0;if((t|0)==3082|(a[g+81>>0]|0)!=0)og(g);break}case 115:{f=z;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;f=c[P>>2]|0;c[Y>>2]=0;f=Zr(f,Y,92,U)|0;c[V>>2]=f;if(!f){t=pb(c[H>>2]<<4,0)|0;do if(t){gw(t|0,0,c[H>>2]<<4|0)|0;f=c[P>>2]|0;c[Y>>2]=0;Zr(f,Y,96,t)|0;f=c[Q>>2]|0;if((f|0)>0){g=0;j=0;do{g=g-(c[(c[(c[t+(j<<4)>>2]|0)+20>>2]|0)+64>>2]|0)|0;c[t+(j<<4)+4>>2]=g;j=j+1|0}while((j|0)!=(f|0))}g:do if((c[R>>2]|0)>0){s=0;h:while(1){i:do if((f|0)>0){g=0;q=0;do{p=t+(q<<4)+8|0;f=_r(T,c[t+(q<<4)>>2]|0,s,p)|0;if(f|0)break g;m=c[p>>2]|0;if(m){n=c[t+(q<<4)+4>>2]|0;o=t+(q<<4)+12|0;c[o>>2]=n;j=a[m>>0]|0;f=j&255;do if(!(f&128)){k=1;l=0;f=j&255}else{r=d[m+1>>0]|0;f=r<<7|f&127;if(!(r&128)){k=2;l=0;break}r=d[m+2>>0]|0;f=r<<14|f&16383;if(!(r&128)){k=3;l=0;break}r=d[m+3>>0]|0;f=r<<21|f&2097151;if(!(r&128)){k=4;l=0;break}j=28;k=m+4|0;f=f&268435455;l=0;do{r=k;k=k+1|0;r=d[r>>0]|0;aa=cw(r&127|0,0,j|0)|0;f=Sv(aa|0,L()|0,f|0,l|0)|0;l=L()|0;j=j+7|0}while(j>>>0<64&((r&128|0)!=0|0!=0));k=k-m|0}while(0);if(l>>>0<0|(l|0)==0&f>>>0<2)break h;c[o>>2]=n+-2+f;c[p>>2]=m+k;g=g+1|0}q=q+1|0;r=c[Q>>2]|0}while((q|0)<(r|0));if((g|0)<=0){f=0;break}if((r|0)<=0){f=g;g=c[2]|0;while(1){k=a[g>>0]|0;j=k&255;do if(!(j&128)){l=1;m=0;j=k&255}else{aa=d[g+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){l=2;m=0;break}aa=d[g+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){l=3;m=0;break}aa=d[g+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){l=4;m=0;break}k=28;l=g+4|0;j=j&268435455;m=0;do{aa=l;l=l+1|0;aa=d[aa>>0]|0;r=cw(aa&127|0,0,k|0)|0;j=Sv(r|0,L()|0,j|0,m|0)|0;m=L()|0;k=k+7|0}while(k>>>0<64&((aa&128|0)!=0|0!=0));l=l-g|0}while(0);if(m>>>0<0|(m|0)==0&j>>>0<2){c[2]=0;g=0;f=f+-1|0}else{g=g+l|0;c[3]=j+-2+(c[3]|0);c[2]=g}if((f|0)<=0){f=0;break i}}}f=0;do{l=0;k=0;m=0;do{j=t+(m<<4)|0;if(!(c[t+(m<<4)+8>>2]|0))l=0;else{if(!((k|0)!=0?(c[t+(m<<4)+12>>2]|0)>=(c[k+12>>2]|0):0))k=j;if((l|0)!=0?(c[t+(m<<4)+12>>2]|0)!=(c[j+-16+12>>2]|0):0)j=1;else j=l+1|0;l=j;f=(j|0)>(f|0)?j:f}m=m+1|0}while((m|0)!=(r|0));p=k+8|0;o=c[p>>2]|0;l=a[o>>0]|0;j=l&255;do if(!(j&128)){m=1;n=0;j=l&255}else{aa=d[o+1>>0]|0;j=aa<<7|j&127;if(!(aa&128)){m=2;n=0;break}aa=d[o+2>>0]|0;j=aa<<14|j&16383;if(!(aa&128)){m=3;n=0;break}aa=d[o+3>>0]|0;j=aa<<21|j&2097151;if(!(aa&128)){m=4;n=0;break}l=28;m=o+4|0;j=j&268435455;n=0;do{aa=m;m=m+1|0;aa=d[aa>>0]|0;q=cw(aa&127|0,0,l|0)|0;j=Sv(q|0,L()|0,j|0,n|0)|0;n=L()|0;l=l+7|0}while(l>>>0<64&((aa&128|0)!=0|0!=0));m=m-o|0}while(0);if(n>>>0<0|(n|0)==0&j>>>0<2){c[p>>2]=0;g=g+-1|0}else{aa=k+12|0;c[aa>>2]=j+-2+(c[aa>>2]|0);c[p>>2]=o+m}}while((g|0)>0)}else f=0;while(0);c[(c[F>>2]|0)+(s<<2)>>2]=f;f=s+1|0;if((f|0)>=(c[R>>2]|0)){f=0;break g}s=f;f=c[Q>>2]|0}c[p>>2]=0;f=267}else f=0;while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{aa=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}else f=7;while(0);c[V>>2]=f}break}case 98:{f=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;u=258;break}case 121:{f=G(c[Q>>2]|0,c[R>>2]|0)|0;u=258;break}default:{m=c[P>>2]|0;f=K;c[f>>2]=0;c[f+4>>2]=0;c[U>>2]=T;c[Y>>2]=0;f=Zr(m,Y,92,U)|0;c[V>>2]=f;if(!f){if(!M){j:do if(c[C>>2]|0){f=c[Z>>2]|0;do if(!f){f=lr(I,Z)|0;if(f|0)break;f=c[Z>>2]|0;if(f|0){u=265;break}k=mc(29576)|0;u=274}else u=265;while(0);if((u|0)==265){u=0;g=c[f+120>>2]|0;do if(!g)u=268;else{if(!(b[f+144>>1]|0)){u=268;break}j=f}while(0);if((u|0)==268){g=c[f>>2]|0;c[g+64>>2]=25;Ne(g,25);g=29576;j=f}k=mc(g)|0;g=c[j>>2]|0;j=f+40|0;f=c[j>>2]|0;if((f|0)==3082|(a[g+81>>0]|0)!=0){og(g);f=7}else f=c[g+68>>2]&f;c[j>>2]=f;u=274}do if((u|0)==274){u=0;f=a[k>>0]|0;g=f&255;do if(!(g&128)){f=f&255;g=0}else{aa=d[k+1>>0]|0;f=aa<<7|g&127;if(!(aa&128)){g=0;break}aa=d[k+2>>0]|0;f=aa<<14|f&16383;if(!(aa&128)){g=0;break}aa=d[k+3>>0]|0;f=aa<<21|f&2097151;if(!(aa&128)){g=0;break}l=28;j=k+4|0;f=f&268435455;g=0;while(1){aa=d[j>>0]|0;t=cw(aa&127|0,0,l|0)|0;f=Sv(t|0,L()|0,f|0,g|0)|0;g=L()|0;l=l+7|0;if(!(l>>>0<64&((aa&128|0)!=0|0!=0)))break;else j=j+1|0}}while(0);if((f|0)==0&(g|0)==0){f=267;break}aa=E;c[aa>>2]=f;c[aa+4>>2]=0;c[V>>2]=0;break j}while(0);c[V>>2]=f;break e}while(0);c[Y>>2]=0;f=Zr(m,Y,97,W)|0;c[V>>2]=f;rr(T,V)|0;f=c[V>>2]|0;if(f|0)break e}c[Y>>2]=0;Zr(m,Y,98,W)|0;f=0}}}while(0);if((u|0)==258){u=0;gw(g|0,0,f<<2|0)|0;f=ds(c[P>>2]|0,W)|0;c[V>>2]=f}switch(a[v>>0]|0){case 99:case 112:case 110:{g=1;break}case 115:case 108:case 97:{g=c[R>>2]|0;break}case 121:{g=G(c[Q>>2]|0,c[R>>2]|0)|0;break}case 98:{g=G(((c[R>>2]|0)+31|0)/32|0,c[Q>>2]|0)|0;break}default:g=G((c[R>>2]|0)*3|0,c[Q>>2]|0)|0}g=(c[F>>2]|0)+(g<<2)|0;c[F>>2]=g;if(f|0)break;else w=w+1|0}g=c[Z>>2]|0;if(g|0){j=c[g>>2]|0;aa=g+136|0;Z=c[aa+4>>2]|0;if((Z|0)>0|(Z|0)==0&(c[aa>>2]|0)>>>0>0)hc(j,g);aa=kc(g)|0;c[g+20>>2]=770837923;c[g+36>>2]=-1;c[g+40>>2]=0;a[g+146>>0]=2;c[g+44>>2]=0;c[g+32>>2]=1;a[g+147>>0]=-1;c[g+48>>2]=0;Z=g+64|0;c[Z>>2]=0;c[Z+4>>2]=0;if((aa|0)==3082|(a[j+81>>0]|0)!=0)og(j)}if(!M){Z=c[S>>2]|0;c[Z+8>>2]=1;aa=c[Z+4>>2]|0;ew(Z+16+(aa+2<<2)|0,Z+20|0,aa<<2|0)|0}if(!f){if((yc(c[e>>2]|0,N,c[(c[S>>2]|0)+4>>2]<<2,0,i)|0)==18){c[e+20>>2]=18;yc(c[e>>2]|0,31223,-1,1,0)|0}}else u=303}while(0);if((u|0)==303){c[e+20>>2]=f;g=c[e>>2]|0;if(b[g+8>>1]&1){switch(f|0){case 516:{f=50738;break}case 100:{f=50760;break}case 101:{f=50782;break}default:{f=f&255;if(f>>>0<29?(520028155>>>f&1|0)!=0:0)f=c[22960+(f<<2)>>2]|0;else f=50724}}yc(g,f,-1,1,0)|0}if(i|0)ab[i&127](h)}f=_+248|0;g=c[f>>2]|0;do if(g|0){h=c[g+20>>2]|0;gc(c[g+16>>2]|0)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,g);break}aa=g;if((c[h+304>>2]|0)>>>0<=aa>>>0?(c[h+308>>2]|0)>>>0>aa>>>0:0){aa=h+300|0;c[g>>2]=c[aa>>2];c[aa>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{aa=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[f>>2]=0;Ra=$;return}c[i>>2]=51038;f=Bb(55087,i)|0;c[e+20>>2]=1;yc(c[e>>2]|0,f,-1,1,-1)|0;if(!f){Ra=$;return}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);Ra=$;return}else{aa=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-aa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);Ra=$;return}}function Xr(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;k=Ra;Ra=Ra+16|0;i=k;j=c[f+16>>2]|0;c[j+(e*24|0)>>2]=c[(c[b+20>>2]|0)+64>>2];h=_r(c[f>>2]|0,b,c[f+4>>2]|0,i)|0;g=c[i>>2]|0;if(!g){j=h;Ra=k;return j|0}c[j+(e*24|0)+4>>2]=g;f=a[g>>0]|0;b=f&255;if(b&128){l=d[g+1>>0]|0;b=l<<7|f&127;if(l&128){l=d[g+2>>0]|0;b=l<<14|b&16383;if(l&128){l=d[g+3>>0]|0;b=l<<21|b&2097151;if(!(l&128))f=4;else{b=(a[g+4>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;g=g+f|0;c[i>>2]=g;f=b+-2|0;if((b|0)<2){l=267;Ra=k;return l|0}c[j+(e*24|0)+12>>2]=g;c[j+(e*24|0)+20>>2]=g;c[j+(e*24|0)+8>>2]=f;c[j+(e*24|0)+16>>2]=f;l=h;Ra=k;return l|0}function Yr(a,b,d){a=a|0;b=b|0;d=d|0;b=c[a+20>>2]|0;a=d+4|0;c[a>>2]=(c[a>>2]|0)+1;d=d+8|0;c[d>>2]=(c[d>>2]|0)+(c[b+64>>2]|0);return 0}function Zr(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;f=c[a>>2]|0;a:do if((f|0)!=5){g=a;while(1){a=Zr(c[g+12>>2]|0,b,d,e)|0;if(!((f|0)!=2&(a|0)==0))break;a=c[g+16>>2]|0;f=c[a>>2]|0;if((f|0)==5)break a;else g=a}return a|0}while(0);e=Ya[d&127](a,c[b>>2]|0,e)|0;c[b>>2]=(c[b>>2]|0)+1;return e|0}function _r(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,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=Ra;Ra=Ra+32|0;F=G+16|0;C=G;o=G+12|0;D=G+20|0;E=G+8|0;A=c[e+20>>2]|0;i=c[b>>2]|0;c[g>>2]=0;B=c[A+68>>2]|0;if(!((B|0)==(f|0)?1:(B|0)>=(c[i+24>>2]|0))){g=0;Ra=G;return g|0}n=e+24|0;m=c[n>>2]|0;n=c[n+4>>2]|0;h=C;c[h>>2]=m;c[h+4>>2]=n;h=c[A+28>>2]|0;c[F>>2]=h;B=b+32|0;z=B;if(!(((m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0)?(a[e+32>>0]|0)==0:0))x=4;a:do if((x|0)==4){c[o>>2]=0;y=a[i+235>>0]|0;z=y&255;h=c[e+8>>2]|0;b:do if(h){i=0;l=0;do{x=c[h>>2]|0;i=(x|0)==4?1:i;e=(x|0)==1?h:e;l=(a[h+32>>0]|0)==0?l:1;h=c[h+8>>2]|0}while((h|0)!=0);if(i){c:do if(c[A+40>>2]|0){k=e+32|0;i=a[k>>0]|0;$r(b,e,o);j=e+24|0;h=c[o>>2]|0;if(!h)if(!(i<<24>>24))do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);x=j;h=c[o>>2]|0}while(((c[x>>2]|0)!=(m|0)?1:(c[x+4>>2]|0)!=(n|0))&(h|0)==0);else do{if(a[k>>0]|0){h=0;break c}qr(b,e,o);h=c[o>>2]|0}while(!(h|0))}else h=0;while(0);i=(h|0)==0;d:do if(!(l<<24>>24)){if(!i)break b;if(!e)x=81;else x=24}else{if(!i)break b;i=e+32|0;while(1){if(a[i>>0]|0){x=24;break d}qr(b,e,o);h=c[o>>2]|0;if(h|0)break b}}while(0);if((x|0)==24){u=b+52|0;w=y<<24>>24==0;v=w?1:-1;w=w?0:-1;h=1;do{a[D>>0]=0;if((c[e>>2]|0)==1)i=c[e+16>>2]|0;else i=e;r=c[i+20>>2]|0;s=r+48|0;j=c[s>>2]|0;c[F>>2]=j;t=r+56|0;m=t;i=c[m>>2]|0;m=c[m+4>>2]|0;b=C;c[b>>2]=i;c[b+4>>2]=m;b=r+4|0;q=c[b>>2]|0;k=(q|0)!=0;l=j;e:do if((a[u>>0]|0)==y<<24>>24){if(k)k=((c[r>>2]|0)+q|0)>>>0<=l>>>0;else k=1;n=k&1;a[D>>0]=n;p=n;b=l;while(1){f:do if(!b){if(p<<24>>24){h=m;x=76;break e}n=c[r>>2]|0;l=n;i=a[n>>0]|0;j=i&255;do if(!(j&128)){i=i&255;j=C;c[j>>2]=i;c[j+4>>2]=0;j=1;m=0}else{p=d[n+1>>0]|0;i=p<<7|j&127;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=2;m=0;break}p=d[n+2>>0]|0;i=p<<14|i&16383;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=3;m=0;break}p=d[n+3>>0]|0;i=p<<21|i&2097151;if(!(p&128)){j=C;c[j>>2]=i;c[j+4>>2]=0;j=4;m=0;break}j=28;k=n+4|0;i=i&268435455;m=0;do{p=k;k=k+1|0;p=d[p>>0]|0;o=cw(p&127|0,0,j|0)|0;i=Sv(o|0,L()|0,i|0,m|0)|0;m=L()|0;j=j+7|0}while(j>>>0<64&((p&128|0)!=0|0!=0));j=C;c[j>>2]=i;c[j+4>>2]=m;j=k-l|0}while(0);k=0;j=n+j|0;n=0}else{k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;o=Tv(i|0,m|0,l|0,k|0)|0;Yv(o|0,L()|0,v|0,w|0)|0;if(!(n<<24>>24==0&(L()|0)<0)){x=77;break e}n=c[r>>2]|0;l=b;j=0;while(1){k=a[l>>0]|0;l=l+1|0;if(!(j<<24>>24|k))break;else j=k&128}j=l;k=n+q|0;do if(l>>>0>>0){while(1){n=a[l>>0]|0;if(n<<24>>24)break;j=l+1|0;if(j>>>0>>0)l=j;else{x=52;break}}if((x|0)==52){x=0;break}k=n&255;do if(!(k&128)){b=1;k=n&255;j=0}else{o=d[l+1>>0]|0;k=o<<7|k&127;if(!(o&128)){b=2;j=0;break}o=d[l+2>>0]|0;k=o<<14|k&16383;if(!(o&128)){b=3;j=0;break}o=d[l+3>>0]|0;k=o<<21|k&2097151;if(!(o&128)){b=4;j=0;break}n=28;b=l+4|0;k=k&268435455;o=0;do{H=b;b=b+1|0;H=d[H>>0]|0;I=cw(H&127|0,0,n|0)|0;k=Sv(I|0,L()|0,k|0,o|0)|0;o=L()|0;n=n+7|0}while(n>>>0<64&((H&128|0)!=0|0!=0));b=b-j|0;j=o}while(0);k=Yv(k|0,j|0,v|0,w|0)|0;i=Sv(i|0,m|0,k|0,L()|0)|0;m=L()|0;k=C;c[k>>2]=i;c[k+4>>2]=m;k=p;j=l+b|0;n=0;break f}while(0);a[D>>0]=1;k=1;n=1}while(0);c[F>>2]=j;p=k;b=j}}else{if(k)if(!j)i=0;else i=(c[r>>2]|0)>>>0>=l>>>0;else i=1;a[D>>0]=i&1;i=l;while(1){if(!i){if(a[D>>0]|0)break}else{m=C;i=c[m>>2]|0;m=c[m+4>>2]|0;k=B;l=c[k>>2]|0;k=c[k+4>>2]|0;I=Tv(i|0,m|0,l|0,k|0)|0;I=Yv(I|0,L()|0,v|0,w|0)|0;H=L()|0;n=a[D>>0]|0;if(!(n<<24>>24==0&((H|0)>0|(H|0)==0&I>>>0>0))){x=77;break e}}kq(z,c[r>>2]|0,c[b>>2]|0,F,C,E,D);j=c[F>>2]|0;i=j}h=C;i=c[h>>2]|0;h=c[h+4>>2]|0;x=76}while(0);if((x|0)==76){c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=h;x=78}else if((x|0)==77){x=0;c[s>>2]=j;I=t;c[I>>2]=i;c[I+4>>2]=m;if(!(n<<24>>24==0&((i|0)==(l|0)&(m|0)==(k|0))))x=78}if((x|0)==78){x=0;h=0}e=c[e+12>>2]|0}while((e|0)!=0);if(!h)h=0;else x=81}if((x|0)==81)h=c[A+48>>2]|0;c[F>>2]=h;break a}else h=0}else h=0;while(0);I=h;Ra=G;return I|0}while(0);if(!h){I=0;Ra=G;return I|0}if((a[h>>0]|0)==1){j=h+1|0;c[F>>2]=j;i=a[j>>0]|0;e=i&255;if(e&128){I=d[h+2>>0]|0;i=I<<7|i&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128)){h=i;i=4}else{h=(a[h+5>>0]&7)<<28|i&268435455;i=5}}else{h=i;i=3}}else{h=i;i=2}}else{h=e;i=1}I=j+i|0;c[F>>2]=I;i=h;h=I}else i=0;e=a[h>>0]|0;g:do if((i|0)<(f|0)){while(1){i=e<<24>>24;if(i&254)do{h=h+1|0;I=i;i=a[h>>0]|0}while((i&254|I&128|0)!=0);c[F>>2]=h;if(!(a[h>>0]|0)){h=0;break}j=h+1|0;c[F>>2]=j;e=a[j>>0]|0;i=e&255;if(i&128){I=d[h+2>>0]|0;i=I<<7|e&127;if(I&128){I=d[h+3>>0]|0;i=I<<14|i&16383;if(I&128){I=d[h+4>>0]|0;i=I<<21|i&2097151;if(!(I&128))h=4;else{i=(a[h+5>>0]&7)<<28|i&268435455;h=5}}else h=3}else h=2}else h=1;h=j+h|0;c[F>>2]=h;e=a[h>>0]|0;if((i|0)>=(f|0))break g}Ra=G;return h|0}while(0);if(!(e<<24>>24)){c[F>>2]=0;h=0}c[g>>2]=(i|0)==(f|0)?h:0;I=0;Ra=G;return I|0}function $r(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;p=Ra;Ra=Ra+16|0;m=p+4|0;n=p;if(!d){Ra=p;return}if(c[e>>2]|0){Ra=p;return}o=c[d+20>>2]|0;if(o|0){g=o+24|0;f=o+28|0;do if(c[g>>2]|0?(h=c[f>>2]|0,h|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[f>>2]=0;c[o+32>>2]=0;c[g>>2]=0;l=o+40|0;if(c[l>>2]|0){k=o+64|0;j=c[k>>2]|0;if((j|0)>0){h=0;do{f=c[o+72+(h*24|0)+20>>2]|0;if(f|0?(c[f+8>>2]=0,c[f+28>>2]=1,i=c[f+4>>2]|0,(i|0)>0):0){g=c[f>>2]|0;f=0;do{q=g+(f<<2)|0;c[(c[q>>2]|0)+80>>2]=0;q=c[q>>2]|0;c[q+84>>2]=0;q=q+88|0;c[q>>2]=0;c[q+4>>2]=0;f=f+1|0}while((f|0)!=(i|0))}h=h+1|0}while((h|0)<(j|0))}h=c[b>>2]|0;i=o+68|0;a:do if((j|0)>0){g=0;while(1){if(c[o+72+(g*24|0)+20>>2]|0){c[m>>2]=0;c[n>>2]=0;f=jr(h,o+72+(g*24|0)|0,c[i>>2]|0,m,n)|0;if(f|0)break;f=kr(h,o,g,c[n>>2]|0,c[m>>2]|0)|0;if(f|0)break a}g=g+1|0;if((g|0)>=(c[k>>2]|0)){f=0;break a}}}else f=0;while(0);c[l>>2]=0;c[e>>2]=f}c[o+8>>2]=0;q=o+16|0;c[q>>2]=0;c[q+4>>2]=0;c[o+48>>2]=0}q=d+24|0;c[q>>2]=0;c[q+4>>2]=0;a[d+32>>0]=0;a[d+33>>0]=0;$r(b,c[d+12>>2]|0,e);$r(b,c[d+16>>2]|0,e);Ra=p;return}function as(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=Ra;Ra=Ra+16|0;h=n;m=_r(c[f>>2]|0,b,c[f+4>>2]|0,h)|0;l=c[(c[b+20>>2]|0)+64>>2]|0;g=c[h>>2]|0;if(!g){i=0;j=0}else{b=a[g>>0]|0;e=b&255;if(e&128){k=d[g+1>>0]|0;e=k<<7|b&127;if(k&128){k=d[g+2>>0]|0;e=k<<14|e&16383;if(k&128){k=d[g+3>>0]|0;e=k<<21|e&2097151;if(!(k&128))b=4;else{e=(a[g+4>>0]&7)<<28|e&268435455;b=5}}else b=3}else b=2}else b=1;j=g+b|0;c[h>>2]=j;i=e+-2|0}if((l|0)<=0){Ra=n;return m|0}k=c[f+24>>2]|0;g=f+8|0;h=l+-1|0;b=c[g>>2]|0;e=0;f=b;while(1){c[k+(f*12|0)+8>>2]=h-e;c[k+(f*12|0)>>2]=j;c[k+(f*12|0)+4>>2]=i;e=e+1|0;if((e|0)==(l|0))break;else f=f+1|0}c[g>>2]=b+l;Ra=n;return m|0}function bs(a,b,d){a=a|0;b=b|0;d=d|0;c[d>>2]=(c[d>>2]|0)+1;c[a+36>>2]=b;return 0}function cs(b){b=b|0;var d=0;d=b+(0-(c[b+-4>>2]|0))|0;if((d+16+4|0)==(b|0))a[d+1>>0]=0;else a[d+2>>0]=0;if(a[d>>0]|0)return;if(a[d+1>>0]|0)return;if(a[d+2>>0]|0)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](d);return}else{b=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);return}}function ds(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;if(a[b+32>>0]|0){n=0;return n|0}while(1){m=b+24|0;h=c[e>>2]|0;n=h+32|0;if(!((c[m>>2]|0)==(c[n>>2]|0)?(c[m+4>>2]|0)==(c[n+4>>2]|0):0)){g=0;f=36;break}f=c[b+12>>2]|0;if(!f){f=7;break}f=ds(f,e)|0;if(f|0){g=f;f=36;break}f=c[b+16>>2]|0;if(!(a[f+32>>0]|0))b=f;else{g=0;f=36;break}}if((f|0)==7){m=c[b+20>>2]|0;f=c[m+28>>2]|0;i=(a[e+24>>0]|0)==121;n=e+4|0;l=c[n>>2]|0;l=G(i?l:(l+31|0)/32|0,c[b+36>>2]|0)|0;m=m+68|0;k=(c[h>>2]|0)+24|0;j=e+28|0;if(i){i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if((g|0)==(i|0)?1:(g|0)>=(c[k>>2]|0)){c[(c[j>>2]|0)+(i+l<<2)>>2]=h;b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}else{i=0;while(1){b=a[f>>0]|0;g=b<<24>>24;if(!(g&254)){h=0;e=f}else{b=0;while(1){f=f+1|0;e=g&128;h=(e>>>7^1)+b|0;b=a[f>>0]|0;g=b<<24>>24;if(!(g&254|e)){e=f;break}else b=h}}g=c[m>>2]|0;if(!((h|0)==0|((g|0)!=(i|0)?(g|0)<(c[k>>2]|0):0))){b=(c[j>>2]|0)+(((i+1|0)/32|0)+l<<2)|0;c[b>>2]=c[b>>2]|1<<(i&31);b=a[e>>0]|0}if(b<<24>>24!=1){g=0;f=36;break}g=e+1|0;f=a[g>>0]|0;b=f&255;if(b&128){i=d[e+2>>0]|0;b=i<<7|f&127;if(i&128){i=d[e+3>>0]|0;b=i<<14|b&16383;if(i&128){i=d[e+4>>0]|0;b=i<<21|b&2097151;if(!(i&128))f=4;else{b=(a[e+5>>0]&7)<<28|b&268435455;f=5}}else f=3}else f=2}else f=1;if((b|0)>=(c[n>>2]|0)){g=267;f=36;break}i=b;f=g+f|0}if((f|0)==36)return g|0}}else if((f|0)==36)return g|0;return 0}function es(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;w=Ra;Ra=Ra+16|0;s=w;u=c[e>>2]|0;v=(c[e+28>>2]|0)+((G(d*3|0,c[e+4>>2]|0)|0)<<2)|0;f=c[u>>2]|0;if(a[b+34>>0]|0?(c[c[b+8>>2]>>2]|0)!=1:0){b=f+24|0;if((c[b>>2]|0)<=0){v=0;Ra=w;return v|0}e=c[u+64>>2]|0;d=0;do{u=d*3|0;c[v+(u+1<<2)>>2]=e;c[v+(u+2<<2)>>2]=e;d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}c[s>>2]=0;t=b+40|0;if(!(c[t>>2]|0)){o=u+32|0;q=o;p=c[q>>2]|0;q=c[q+4>>2]|0;e=c[b+8>>2]|0;a:do if(!e)e=b;else{d=b;while(1){if((c[e>>2]|0)!=1){e=d;break a}d=c[e+8>>2]|0;if(!d)break;else{n=e;e=d;d=n}}}while(0);l=e+24|0;n=l;m=c[n>>2]|0;n=c[n+4>>2]|0;j=e+32|0;k=a[j>>0]|0;b=f+24|0;d=e;do{if((c[d>>2]|0)==5)g=d;else g=c[d+16>>2]|0;f=pb((c[b>>2]|0)*12|0,0)|0;c[g+40>>2]=f;if(!f){h=16;break}gw(f|0,0,(c[b>>2]|0)*12|0)|0;d=c[d+12>>2]|0}while((d|0)!=0);if((h|0)==16){v=7;Ra=w;return v|0}$r(u,e,s);i=u+6|0;d=c[s>>2]|0;b:do if((a[i>>0]|0)==0&(d|0)==0){f=u+7|0;g=u+12|0;h=u+88|0;while(1){if((a[f>>0]|0)==0?(r=c[g>>2]|0,r|0):0){d=c[r>>2]|0;x=r+136|0;y=c[x+4>>2]|0;if((y|0)>0|(y|0)==0&(c[x>>2]|0)>>>0>0)hc(d,r);y=kc(r)|0;c[r+20>>2]=770837923;c[r+36>>2]=-1;c[r+40>>2]=0;a[r+146>>0]=2;c[r+44>>2]=0;c[r+32>>2]=1;a[r+147>>0]=-1;c[r+48>>2]=0;x=r+64|0;c[x>>2]=0;c[x+4>>2]=0;if((y|0)==3082|(a[d+81>>0]|0)!=0)og(d)}qr(u,e,s);y=a[j>>0]|0;a[i>>0]=y;a[f>>0]=1;c[h>>2]=1;z=l;d=c[z+4>>2]|0;x=o;c[x>>2]=c[z>>2];c[x+4>>2]=d;if(!((y<<24>>24==0?(c[e>>2]|0)==1:0)?(rr(u,s)|0)!=0:0)){d=c[s>>2]|0;if(d|0)break b;if(a[i>>0]|0){d=0;break b}hs(e,c[b>>2]|0);d=c[s>>2]|0;if(!((d|0)==0&(a[i>>0]|0)==0))break b}}}while(0);a[i>>0]=0;z=o;c[z>>2]=p;c[z+4>>2]=q;if(!(k<<24>>24)){$r(u,e,s);do{qr(u,e,s);z=l;d=c[s>>2]|0}while(((c[z>>2]|0)!=(m|0)?1:(c[z+4>>2]|0)!=(n|0))&(d|0)==0)}else a[j>>0]=k;if(d){z=d;Ra=w;return z|0}}else b=f+24|0;if((c[b>>2]|0)<=0){z=0;Ra=w;return z|0}e=c[t>>2]|0;d=0;do{z=d*3|0;y=z+1|0;c[v+(y<<2)>>2]=c[e+(y<<2)>>2];z=z+2|0;c[v+(z<<2)>>2]=c[e+(z<<2)>>2];d=d+1|0}while((d|0)<(c[b>>2]|0));d=0;Ra=w;return d|0}function fs(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=Ra;Ra=Ra+16|0;l=n;m=e+4|0;k=c[m>>2]|0;j=G(d*3|0,k)|0;if((k|0)<=0){m=0;Ra=n;return m|0}k=e+28|0;i=0;do{d=_r(c[e>>2]|0,b,i,l)|0;g=c[l>>2]|0;if(!g)f=0;else{h=a[g>>0]|0;if(!(h&254))f=0;else{f=0;do{g=g+1|0;o=h&128;f=(o>>>7^1)+f|0;h=a[g>>0]|0}while((h&254|o|0)!=0)}c[l>>2]=g}c[(c[k>>2]|0)+((i*3|0)+j<<2)>>2]=f;i=i+1|0}while((d|0)==0?(i|0)<(c[m>>2]|0):0);Ra=n;return d|0}function gs(a,b,d){a=a|0;b=b|0;d=d|0;c[d+(b<<4)>>2]=a;return 0}function hs(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;if(!b)return;do{f=c[b+20>>2]|0;a:do if(f|0?(m=c[f+28>>2]|0,m|0):0){l=b+40|0;i=m;f=0;while(1){h=a[i>>0]|0;if((h&255)<2)g=0;else{g=0;j=0;while(1){g=g+((j|0)==0&1)|0;k=i+1|0;i=h&-128;h=a[k>>0]|0;if(!((h&-2|i)<<24>>24)){i=k;break}else{j=i&255;i=k}}}j=c[l>>2]|0;k=f*3|0;h=j+(k+1<<2)|0;c[h>>2]=(c[h>>2]|0)+g;k=j+(k+2<<2)|0;c[k>>2]=(c[k>>2]|0)+((g|0)!=0&1);if(!(a[i>>0]|0))break a;h=i+1|0;g=a[h>>0]|0;f=g&255;if(f&128){k=d[i+2>>0]|0;f=k<<7|g&127;if(k&128){k=d[i+3>>0]|0;f=k<<14|f&16383;if(k&128){k=d[i+4>>0]|0;f=k<<21|f&2097151;if(!(k&128))g=4;else{f=(a[i+5>>0]&7)<<28|f&268435455;g=5}}else g=3}else g=2}else g=1;if((f|0)<(e|0))i=h+g|0;else break}}while(0);hs(c[b+12>>2]|0,e);b=c[b+16>>2]|0}while((b|0)!=0);return}function is(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,v=0,w=0,x=0,y=0,z=0;z=Ra;Ra=Ra+16|0;x=z;y=z+4|0;c[y>>2]=0;b=td(b,55547)|0;if(b|0){y=b;Ra=z;return y|0}s=e+-3|0;r=f+12|0;a:do if(s){k=(e|0)>3;if(k){f=0;b=0;do{b=b+1+(Eu(c[r+(f<<2)>>2]|0)|0)|0;f=f+1|0}while((f|0)!=(s|0))}else b=0;q=pb(b+(s<<2)|0,0)|0;b=(q|0)==0;b:do if(b|k^1){if(b){f=7;j=0;b=0;m=44;break a}}else{n=q+(s<<2)|0;o=0;while(1){b=r+(o<<2)|0;p=Eu(c[b>>2]|0)|0;c[q+(o<<2)>>2]=n;p=p+1|0;ew(n|0,c[b>>2]|0,p|0)|0;b=a[n>>0]|0;switch(b<<24>>24){case 34:case 39:case 91:case 96:{m=b<<24>>24==91?93:b;f=a[n+1>>0]|0;c:do if(!(f<<24>>24))b=0;else{k=1;b=0;do{l=k+1|0;if(f<<24>>24==m<<24>>24){if((a[n+l>>0]|0)!=m<<24>>24)break c;a[n+b>>0]=m;k=k+2|0}else{a[n+b>>0]=f;k=l}b=b+1|0;f=a[n+k>>0]|0}while(f<<24>>24!=0)}while(0);a[n+b>>0]=0;break}default:{}}o=o+1|0;if((o|0)==(s|0))break b;else n=n+p|0}}while(0);if((e|0)<4){k=50983;l=q;b=q;m=21}else{k=c[q>>2]|0;l=q;b=q;m=21}}else{k=50983;l=0;b=0;m=21}while(0);d:do if((m|0)==21){f=(Eu(k)|0)+1|0;e:do if(((d|0?(t=d+16|0,c[t>>2]|0):0)?(u=Xa[(a[d>>0]<<24>>24==1?154:155)&255](k,f)|0,u=(c[d+12>>2]|0)+-1&u,v=c[t>>2]|0,v|0):0)?(j=c[v+(u<<3)>>2]|0,w=(a[d>>0]|0)==1?79:80,i=c[v+(u<<3)+4>>2]|0,(j|0)!=0&(i|0)!=0):0){while(1){j=j+-1|0;if(!(Za[w&127](c[i+12>>2]|0,c[i+16>>2]|0,k,f)|0))break;i=c[i>>2]|0;if(!((j|0)!=0&(i|0)!=0))break e}i=c[i+8>>2]|0;if(i|0){j=i;i=Ya[c[i+4>>2]&127]((e|0)>4?e+-4|0:0,l+4|0,y)|0;if(i|0){f=i;m=44;break d}if(mb()|0){f=7;m=44;break d}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](20)|0;if(!i){f=7;m=44;break d}}else{i=Wa[c[29356>>2]&127](20)|0;if((c[14985]|0)>>>0<20)c[14985]=20;k=59064;f=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&f>>>0>0){e=c[14978]|0;x=Tv(f|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&x>>>0<=e>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){f=7;m=44;break d}f=Wa[c[29352>>2]&127](i)|0;f=(c[14978]|0)+f|0;c[14978]=f;if(f>>>0>(c[14982]|0)>>>0)c[14982]=f;f=(c[14981]|0)+1|0;c[14981]=f;if(f>>>0>(c[14987]|0)>>>0)c[14987]=f};c[i>>2]=0;c[i+4>>2]=0;c[i+8>>2]=0;c[i+12>>2]=j;c[i+16>>2]=c[y>>2];c[g>>2]=i;i=0;break d}}while(0);c[x>>2]=k;Wp(h,53600,x);f=1;j=0;m=44}while(0);if((m|0)==44){i=c[y>>2]|0;if(!i)i=f;else{Wa[c[j+8>>2]&127](i)|0;i=f}}if(!b){y=i;Ra=z;return y|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}else{y=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);y=i;Ra=z;return y|0}return 0}function js(b,d){b=b|0;d=d|0;var e=0,f=0;e=c[d>>2]|0;a:do if((e|0)>0){f=c[d+4>>2]|0;b=0;while(1){if((a[f+(b*12|0)+5>>0]|0?(c[f+(b*12|0)>>2]|0)==0:0)?(a[f+(b*12|0)+4>>0]|0)==2:0)break;b=b+1|0;if((b|0)>=(e|0))break a}c[d+20>>2]=1;f=c[d+16>>2]|0;c[f+(b<<3)>>2]=1;a[f+(b<<3)+4>>0]=1;g[d+40>>3]=1.0;return 0}while(0);c[d+20>>2]=0;return 0}function ks(a){a=a|0;var b=0;Wa[c[(c[a+12>>2]|0)+8>>2]&127](c[a+16>>2]|0)|0;if(!a)return 0;if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return 0}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return 0}return 0} function Xf(e){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=Ra;Ra=Ra+16|0;o=u;t=c[e+20>>2]|0;s=t+16|0;f=a[s>>0]|0;if(f<<24>>24==2){r=c[t>>2]|0;f=c[t+40>>2]|0;if(f|0){e=f;Ra=u;return e|0}do if((c[t+216>>2]|0)==0?(l=t+5|0,(a[l>>0]|0)!=2):0){k=t+24|0;i=c[k>>2]|0;if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](512)|0;if(!f)q=16}else{f=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;h=59064;g=c[h>>2]|0;h=c[h+4>>2]|0;if((h|0)>0|(h|0)==0&g>>>0>0){p=c[14978]|0;j=Tv(g|0,h|0,f|0,((f|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&j>>>0<=p>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(f){g=Wa[c[29352>>2]&127](f)|0;g=(c[14978]|0)+g|0;c[14978]=g;if(g>>>0>(c[14982]|0)>>>0)c[14982]=g;g=(c[14981]|0)+1|0;c[14981]=g;if(g>>>0>(c[14987]|0)>>>0)c[14987]=g}else q=16}if((q|0)==16){c[t+56>>2]=0;e=7;Ra=u;return e|0}gw(f+4|0,0,508)|0;c[f>>2]=i;p=t+56|0;c[p>>2]=f;j=t+64|0;f=c[j>>2]|0;a:do if(!(c[f>>2]|0)){if((a[l>>0]|0)==4){j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));c[f+4>>2]=1020;c[f>>2]=29896;c[f+8>>2]=-1;c[f+56>>2]=0;c[f+64>>2]=0;c[f+60>>2]=0;q=33;break}do if(!(a[t+12>>0]|0)){c[o>>2]=0;if((c[k>>2]|0)!=0?(m=c[t+60>>2]|0,n=c[m>>2]|0,(n|0)!=0):0){f=Ya[c[n+40>>2]&127](m,20,o)|0;if((f|0)==12){h=2054;i=0;f=c[j>>2]|0;q=29;break}g=(f|0)==0;if(g&(c[o>>2]|0)!=0){f=1032;break a}if(g){g=c[t+172>>2]|0;f=c[j>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));h=2054;q=30}}else{h=2054;i=0;q=29}}else{i=c[7334]|0;c[o>>2]=0;h=4110;q=29}while(0);if((q|0)==29){g=c[t+172>>2]|0;j=f;k=j+72|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));if(!i)q=30;else{c[f+4>>2]=(i|0)>0?i:1020;c[f>>2]=29896;c[f+8>>2]=i;c[f+56>>2]=h;c[f+64>>2]=g;c[f+60>>2]=r;q=33;break}}if((q|0)==30)f=_a[c[r+24>>2]&127](r,g,f,h&556927,0)|0;if(!f)q=33}else q=33;while(0);if((q|0)==33){c[t+44>>2]=0;f=t+72|0;a[t+19>>0]=0;c[f>>2]=0;c[f+4>>2]=0;c[f+8>>2]=0;c[f+12>>2]=0;f=of(t)|0;if(!f)break}yf(c[p>>2]|0);c[p>>2]=0;e=f;Ra=u;return e|0}while(0);a[s>>0]=3;m=3}else m=f;n=e+28|0;f=b[n>>1]|0;h=f&65535;if(h&17){g=h&65519;f=g&65535;b[n>>1]=f;if(h&1){f=(g^3)&65535;b[n>>1]=f;g=c[e+12>>2]|0;c[e+36>>2]=0;h=c[g>>2]|0;c[e+32>>2]=h;if(!h){c[g+4>>2]=e;if(a[g+32>>0]|0)a[g+33>>0]=1}else c[h+36>>2]=e;c[g>>2]=e;g=g+8|0;if((f&8)==0&(c[g>>2]|0)==0)c[g>>2]=e}}j=c[t+56>>2]|0;b:do if(j){l=c[e+24>>2]|0;h=l+-1|0;g=c[j>>2]|0;c:do if(h>>>0>>0){i=c[j+8>>2]|0;if(i){k=j;do{g=(h>>>0)/(i>>>0)|0;k=c[k+12+(g<<2)>>2]|0;if(!k)break c;h=h-(G(g,i)|0)|0;i=c[k+8>>2]|0}while((i|0)!=0);j=k;g=c[k>>2]|0}if(g>>>0<4001)if(!(1<<(h&7)&d[j+12+(h>>>3)>>0]))break;else break b;i=h+1|0;g=(h>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0;if(h|0)do{if((h|0)==(i|0))break b;g=((g+1|0)>>>0)%125|0;h=c[j+12+(g<<2)>>2]|0}while((h|0)!=0)}while(0);if(l>>>0>(c[t+28>>2]|0)>>>0){if(m<<24>>24==4)break;f=f|8;b[n>>1]=f;break}f=Yf(e)|0;if(!f){f=b[n>>1]|0;break}else{e=f;Ra=u;return e|0}}while(0);b[n>>1]=f|4;if((c[t+96>>2]|0)>0)h=Ve(e)|0;else h=0;g=t+24|0;f=c[e+24>>2]|0;if((c[g>>2]|0)>>>0>=f>>>0){e=h;Ra=u;return e|0}c[g>>2]=f;e=h;Ra=u;return e|0}function Yf(e){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;t=Ra;Ra=Ra+16|0;p=t;s=c[e+20>>2]|0;r=s+72|0;h=r;n=c[h>>2]|0;h=c[h+4>>2]|0;o=c[e+4>>2]|0;f=c[s+48>>2]|0;q=s+152|0;g=c[q>>2]|0;if((g|0)>200)do{m=g;g=g+-200|0;f=f+(d[o+g>>0]|0)|0}while((m|0)>400);l=e+28|0;b[l>>1]=b[l>>1]|8;l=s+64|0;g=c[l>>2]|0;m=e+24|0;e=c[m>>2]|0;a[p>>0]=e>>>24;i=p+1|0;a[i>>0]=e>>>16;j=p+2|0;a[j>>0]=e>>>8;k=p+3|0;a[k>>0]=e;g=_a[c[(c[g>>2]|0)+12>>2]&127](g,p,4,n,h)|0;if(g|0){s=g;Ra=t;return s|0}u=c[l>>2]|0;g=c[q>>2]|0;e=Sv(n|0,h|0,4,0)|0;h=L()|0;g=_a[c[(c[u>>2]|0)+12>>2]&127](u,o,g,e,h)|0;if(g|0){u=g;Ra=t;return u|0}n=c[l>>2]|0;o=c[q>>2]|0;o=Sv(e|0,h|0,o|0,((o|0)<0)<<31>>31|0)|0;u=L()|0;a[p>>0]=f>>>24;a[i>>0]=f>>>16;a[j>>0]=f>>>8;a[k>>0]=f;f=_a[c[(c[n>>2]|0)+12>>2]&127](n,p,4,o,u)|0;if(f|0){u=f;Ra=t;return u|0}k=(c[q>>2]|0)+8|0;j=r;k=Sv(c[j>>2]|0,c[j+4>>2]|0,k|0,((k|0)<0)<<31>>31|0)|0;j=L()|0;l=r;c[l>>2]=k;c[l+4>>2]=j;l=s+44|0;c[l>>2]=(c[l>>2]|0)+1;l=df(c[s+56>>2]|0,c[m>>2]|0)|0;j=c[m>>2]|0;k=s+96|0;g=c[k>>2]|0;if((g|0)>0){i=s+92|0;f=0;h=0;do{e=c[i>>2]|0;if((c[e+(h*48|0)+20>>2]|0)>>>0>=j>>>0){f=df(c[e+(h*48|0)+16>>2]|0,j)|0|f;g=c[k>>2]|0}h=h+1|0}while((h|0)<(g|0))}else f=0;u=f|l;Ra=t;return u|0}function Zf(d){d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0,k=0;j=c[d+4>>2]|0;f=c[d>>2]|0;a[j+19>>0]=0;k=d+8|0;do if(a[k>>0]|0){if((c[f+172>>2]|0)>1){f=j+76|0;if((c[f>>2]|0)==(d|0)?(c[f>>2]=0,e=j+22|0,b[e>>1]=b[e>>1]&-193,e=c[j+72>>2]|0,e|0):0)do{a[e+8>>0]=1;e=c[e+12>>2]|0}while((e|0)!=0);a[k>>0]=1;return}e=j+72|0;f=c[e>>2]|0;if(f|0)while(1){g=f+12|0;do if((c[f>>2]|0)==(d|0)){h=c[g>>2]|0;c[e>>2]=h;if((c[f+4>>2]|0)!=1)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);i=15;break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);i=15;break}else{g=e;f=h}}else{e=g;i=15}while(0);if((i|0)==15){i=0;g=e;f=c[e>>2]|0}if(!f)break;else e=g}e=j+76|0;if((c[e>>2]|0)!=(d|0)){e=j+40|0;f=c[e>>2]|0;if((f|0)==2){d=j+22|0;b[d>>1]=b[d>>1]&-129;c[e>>2]=1;break}}else{c[e>>2]=0;f=j+22|0;b[f>>1]=b[f>>1]&-193;f=j+40|0;e=f;f=c[f>>2]|0}d=f+-1|0;c[e>>2]=d;if(!d)a[j+20>>0]=0}while(0);a[k>>0]=0;if(a[j+20>>0]|0)return;e=j+12|0;f=c[e>>2]|0;if(!f)return;c[e>>2]=0;k=c[f+72>>2]|0;e=c[k+20>>2]|0;Df(k);if(c[(c[e+212>>2]|0)+12>>2]|0)return;switch(a[e+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[e+4>>0]|0))uf(e,0,0)|0;break}default:tf(e)|0}vf(e);return}function _f(e,f,g,h){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;r=Ra;Ra=Ra+32|0;k=r;m=r+20|0;j=r+24|0;o=r+16|0;p=r+12|0;if(g>>>0<2)i=0;else{i=g+-2|0;i=i-((i>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+i|0}a:do if((i|0)!=(g|0)?((1073741824/((c[e+32>>2]|0)>>>0)|0)+1|0)!=(g|0):0){n=c[(c[e+12>>2]|0)+56>>2]|0;b:do if((d[n+37>>0]|0)<<16|(d[n+36>>0]|0)<<24|(d[n+38>>0]|0)<<8|(d[n+39>>0]|0)){i=eg(e,g,j,o)|0;if(!i){n=a[j>>0]|0;c:do switch(n<<24>>24){case 1:{c[k>>2]=32306;c[k+4>>2]=66936;c[k+8>>2]=31517;Db(11,32001,k);i=11;break b}case 2:{if(!h){i=fg(e,p,m,g,1)|0;if(i|0)break b;i=c[p>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{q=c[i+20>>2]|0;p=q+120|0;c[p>>2]=(c[p>>2]|0)+-1;q=q+136|0;c[i+16>>2]=c[q>>2];c[q>>2]=i;break}}while(0)}break}default:{i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,g,m,0)|0;do if(!i){i=c[m>>2]|0;l=c[i+8>>2]|0;j=l+4|0;if((c[j>>2]|0)!=(g|0)){c[l+56>>2]=c[i+4>>2];c[l+72>>2]=i;c[l+52>>2]=e;c[j>>2]=g;a[l+9>>0]=(g|0)==1?100:0}i=(h|0)==0;j=i?2:0;k=i?f:0;d:do if(i){i=fg(e,m,p,k,j)|0;if(!i){i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}while(0);i=c[p>>2]|0}else q=30}else do{i=fg(e,m,p,k,j)|0;if(i|0){q=30;break d}i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{s=c[i+20>>2]|0;t=s+120|0;c[t>>2]=(c[t>>2]|0)+-1;s=s+136|0;c[i+16>>2]=c[s>>2];c[s>>2]=i;break}}while(0);i=c[p>>2]|0}while(i>>>0>f>>>0);while(0);if((q|0)==30){do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);break}i=gg(e,l,n,c[o>>2]|0,i,h)|0;do if(l|0){j=c[l+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{t=c[j+20>>2]|0;s=t+120|0;c[s>>2]=(c[s>>2]|0)+-1;t=t+136|0;c[j+16>>2]=c[t>>2];c[t>>2]=j;break}}while(0);if(!i)break c}while(0);break b}}while(0);break a}}else i=101;while(0);t=i;Ra=r;return t|0}while(0);if(h|0){t=0;Ra=r;return t|0}k=1073741824/((c[e+32>>2]|0)>>>0)|0;f=k+1|0;l=e+36|0;i=g;while(1){j=i+-1|0;if((j|0)!=(f|0)){if(j>>>0<2)i=0;else{i=i+-3|0;i=i-((i>>>0)%(((((c[l>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;i=((i+1|0)==(k|0)?3:2)+i|0}if((i|0)!=(j|0))break}i=j}a[e+19>>0]=1;c[e+44>>2]=j;t=0;Ra=r;return t|0}function $f(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;k=(e|0)==0;a:while(1){b:do if((d|0)!=(f|0)){if(!k?(c[d+64>>2]|0)!=(e|0):0)break;switch(a[d>>0]|0){case 2:{a[d>>0]=0;break}case 0:{c[d+4>>2]=0;break}default:{j=d+68|0;g=a[j>>0]|0;if(g<<24>>24<=-1)break b;if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{m=c[h+20>>2]|0;n=m+120|0;c[n>>2]=(c[n>>2]|0)+-1;m=m+136|0;c[h+16>>2]=c[m>>2];c[m>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1;break b}}g=ag(d)|0;if(g|0)break a;j=d+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[d+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{n=c[h+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[h+16>>2]=c[n>>2];c[n>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{n=c[g+20>>2]|0;m=n+120|0;c[m>>2]=(c[m>>2]|0)+-1;n=n+136|0;c[g+16>>2]=c[n>>2];c[n>>2]=g}a[j>>0]=-1}a[d>>0]=3;n=d+1|0;a[n>>0]=a[n>>0]&-15}while(0);d=c[d+24>>2]|0;if(!d){d=0;l=34;break}}if((l|0)==34)return d|0;n=d+1|0;a[n>>0]=a[n>>0]&-15;n=g;return n|0}function ag(b){b=b|0;var d=0,e=0,f=0,g=0,h=0;g=(a[b+69>>0]|0)==0;bg(b);if(!g){f=b+32|0;g=c[f+4>>2]|0;b=b+56|0;c[b>>2]=c[f>>2];c[b+4>>2]=g;b=0;return b|0}f=c[b+44>>2]|0;g=b+56|0;d=g;c[d>>2]=f;c[d+4>>2]=0;d=Sv(f|0,0,17,0)|0;L()|0;f=Sv(f|0,0,16,0)|0;e=L()|0;if(e>>>0>0|(e|0)==0&f>>>0>2147483390){b=7;return b|0}if(!(c[7324]|0)){d=Wa[c[29340>>2]&127](d)|0;if(!d){b=7;return b|0}}else{f=Wa[c[29356>>2]&127](d)|0;if((c[14985]|0)>>>0>>0)c[14985]=d;e=59064;d=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&d>>>0>0){h=c[14978]|0;e=Tv(d|0,e|0,f|0,((f|0)<0)<<31>>31|0)|0;d=L()|0;c[14768]=((d|0)<0|(d|0)==0&e>>>0<=h>>>0)&1}d=Wa[c[29340>>2]&127](f)|0;if(!d){h=7;return h|0}e=Wa[c[29352>>2]&127](d)|0;e=(c[14978]|0)+e|0;c[14978]=e;if(e>>>0>(c[14982]|0)>>>0)c[14982]=e;e=(c[14981]|0)+1|0;c[14981]=e;if(e>>>0>(c[14987]|0)>>>0)c[14987]=e}e=cg(b,0,c[g>>2]|0,d,0)|0;if(!e){e=d+(c[g>>2]|0)|0;f=e+17|0;do{a[e>>0]=0;e=e+1|0}while((e|0)<(f|0));c[b+16>>2]=d;h=0;return h|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](d);h=e;return h|0}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);h=e;return h|0}return 0}function bg(f){f=f|0;var g=0,h=0;if(b[f+50>>1]|0)return;g=f+1|0;a[g>>0]=a[g>>0]|2;g=c[f+116>>2]|0;h=(c[g+64>>2]|0)+(e[f+70>>1]<<1)|0;cb[c[g+80>>2]&255](g,(c[g+56>>2]|0)+((d[h>>0]<<8|d[h+1>>0])&e[g+26>>1])|0,f+32|0);return}function cg(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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=Ra;Ra=Ra+48|0;z=A+16|0;m=A;w=A+32|0;x=A+28|0;n=c[f+116>>2]|0;v=c[f+20>>2]|0;bg(f);r=c[f+40>>2]|0;p=v+36|0;q=f+48|0;l=e[q>>1]|0;if((r-(c[n+56>>2]|0)|0)>>>0>((c[p>>2]|0)-l|0)>>>0){c[m>>2]=32306;c[m+4>>2]=67944;c[m+8>>2]=31517;Db(11,32001,m);z=11;Ra=A;return z|0}if(l>>>0>g>>>0){o=(h+g|0)>>>0>l>>>0?l-g|0:h;g=r+g|0;l=c[n+72>>2]|0;a:do if(!j){ew(i|0,g|0,o|0)|0;k=0}else{m=c[l+20>>2]|0;if((b[l+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){k=Ve(l)|0;y=13}}else y=9;do if((y|0)==9){k=c[m+40>>2]|0;if(k|0)break a;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(l)|0;y=13;break}else{k=Xf(l)|0;y=13;break}}while(0);if((y|0)==13?k|0:0)break;ew(g|0,i|0,o|0)|0;k=0}while(0);s=0;h=h-o|0;i=i+o|0}else{s=g-l|0;k=0}do if((k|0)==0&(h|0)!=0){l=c[p>>2]|0;t=l+-4|0;k=e[q>>1]|0;o=r+k|0;o=(d[o+1>>0]|0)<<16|(d[o>>0]|0)<<24|(d[o+2>>0]|0)<<8|(d[o+3>>0]|0);c[w>>2]=o;n=f+1|0;do if(a[n>>0]&4){k=(s>>>0)/(t>>>0)|0;l=c[(c[f+12>>2]|0)+(k<<2)>>2]|0;if(!l)y=28;else{c[w>>2]=l;g=k;m=s-(G(k,t)|0)|0;y=29}}else{g=((l+-5-k+(c[f+44>>2]|0)|0)>>>0)/(t>>>0)|0;m=f+12|0;k=c[m>>2]|0;if(k){l=g<<2;r=(l|0)>(Wa[c[29352>>2]&127](k)|0);k=c[m>>2]|0;if(r)y=23}else y=23;if((y|0)==23){k=sb(k,g<<3,0)|0;if(!k){k=7;break}c[m>>2]=k;l=g<<2}gw(k|0,0,l|0)|0;a[n>>0]=a[n>>0]|4;y=28}while(0);if((y|0)==28)if(!o){k=0;y=55}else{g=0;m=s;l=o;y=29}b:do if((y|0)==29){r=f+12|0;p=(j|0)==0;q=p?2:0;o=g;while(1){k=c[r>>2]|0;c[k+(o<<2)>>2]=l;if(m>>>0>>0){n=(m+h|0)>>>0>t>>>0?t-m|0:h;k=c[v>>2]|0;k=Za[c[k+204>>2]&127](k,l,x,q)|0;do if(!k){g=c[x>>2]|0;l=c[g+4>>2]|0;c[w>>2]=(d[l+1>>0]|0)<<16|(d[l>>0]|0)<<24|(d[l+2>>0]|0)<<8|(d[l+3>>0]|0);l=l+(m+4)|0;c:do if(p){ew(i|0,l|0,n|0)|0;k=0}else{m=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){u=Ve(g)|0;y=46}}else y=42;do if((y|0)==42){y=0;k=c[m+40>>2]|0;if(k|0)break c;if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){u=Wf(g)|0;y=46;break}else{u=Xf(g)|0;y=46;break}}while(0);if((y|0)==46?(y=0,u|0):0){k=u;break}ew(l|0,i|0,n|0)|0;k=0}while(0);l=c[x>>2]|0;if(l)if(!(b[l+28>>1]&32)){Df(l);m=0;break}else{m=c[l+20>>2]|0;j=m+120|0;c[j>>2]=(c[j>>2]|0)+-1;m=m+136|0;c[l+16>>2]=c[m>>2];c[m>>2]=l;m=0;break}else m=0}while(0);h=h-n|0;if(!h)break b;else g=i+n|0}else{k=c[k+(o+1<<2)>>2]|0;if(!k)k=dg(v,l,0,w)|0;else{c[w>>2]=k;k=0}g=i;m=m-t|0}if(k|0){y=55;break b}l=c[w>>2]|0;if(!l){k=0;y=55;break}else{i=g;o=o+1|0}}}while(0);if((y|0)==55)break;z=k;Ra=A;return z|0}while(0);if(!((k|0)==0&(h|0)!=0)){z=k;Ra=A;return z|0}c[z>>2]=32306;c[z+4>>2]=68089;c[z+8>>2]=31517;Db(11,32001,z);z=11;Ra=A;return z|0}function dg(e,f,g,h){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;s=Ra;Ra=Ra+16|0;o=s;l=s+4|0;do if(a[e+17>>0]|0){m=e+36|0;k=1073741824/((c[e+32>>2]|0)>>>0)|0;p=f;do{i=p;p=p+1|0;if(p>>>0<2)j=0;else{j=i+-1|0;j=j-((j>>>0)%(((((c[m>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;j=((j+1|0)==(k|0)?3:2)+j|0}}while((j|0)==(p|0)|(i|0)==(k|0));if(p>>>0<=(c[e+44>>2]|0)>>>0?(n=eg(e,p,l,o)|0,m=(n|0)==0,q=m&(a[l>>0]|0)==4&(c[o>>2]|0)==(f|0),q|m^1):0){k=0;j=q?101:n;i=q?p:0;break}else{r=9;break}}else r=9;while(0);do if((r|0)==9){i=c[e>>2]|0;i=Za[c[i+204>>2]&127](i,f,o,(g|0)==0?2:0)|0;if(i|0){k=0;j=i;i=0;break}i=c[o>>2]|0;k=c[i+8>>2]|0;j=k+4|0;if((c[j>>2]|0)==(f|0))i=c[k+56>>2]|0;else{r=c[i+4>>2]|0;c[k+56>>2]=r;c[k+72>>2]=i;c[k+52>>2]=e;c[j>>2]=f;a[k+9>>0]=(f|0)==1?100:0;i=r}j=0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0]}while(0);c[h>>2]=i;if(g|0){c[g>>2]=k;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}if(!k){h=(j|0)==101;h=h?0:j;Ra=s;return h|0}i=c[k+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);h=(j|0)==101;h=h?0:j;Ra=s;return h|0}else{h=c[i+20>>2]|0;g=h+120|0;c[g>>2]=(c[g>>2]|0)+-1;h=h+136|0;c[i+16>>2]=c[h>>2];c[h>>2]=i;h=(j|0)==101;h=h?0:j;Ra=s;return h|0}return 0}function eg(e,f,g,h){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=Ra;Ra=Ra+32|0;n=o+16|0;m=o;i=o+28|0;if(f>>>0<2)l=0;else{l=f+-2|0;l=l-((l>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;l=((l+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+l|0}e=c[e>>2]|0;e=Za[c[e+204>>2]&127](e,l,i,0)|0;if(e|0){n=e;Ra=o;return n|0}k=c[i>>2]|0;j=c[k+4>>2]|0;e=(f-l|0)*5|0;i=e+-5|0;if((i|0)<0){do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{n=c[k+20>>2]|0;h=n+120|0;c[h>>2]=(c[h>>2]|0)+-1;n=n+136|0;c[k+16>>2]=c[n>>2];c[n>>2]=k;break}while(0);c[m>>2]=32306;c[m+4>>2]=64247;c[m+8>>2]=31517;Db(11,32001,m);n=11;Ra=o;return n|0}a[g>>0]=a[j+i>>0]|0;if(h|0){m=j+(e+-4)|0;c[h>>2]=(d[m+1>>0]|0)<<16|(d[m>>0]|0)<<24|(d[m+2>>0]|0)<<8|(d[m+3>>0]|0)}do if(k|0)if(!(b[k+28>>1]&32)){Df(k);break}else{m=c[k+20>>2]|0;h=m+120|0;c[h>>2]=(c[h>>2]|0)+-1;m=m+136|0;c[k+16>>2]=c[m>>2];c[m>>2]=k;break}while(0);if(((a[g>>0]|0)+-1&255)<=4){n=0;Ra=o;return n|0}c[n>>2]=32306;c[n+4>>2]=64255;c[n+8>>2]=31517;Db(11,32001,n);n=11;Ra=o;return n|0}function fg(e,f,g,h,i){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,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=Ra;Ra=Ra+160|0;r=Z+144|0;o=Z+128|0;T=Z+112|0;R=Z+96|0;U=Z+80|0;Q=Z+64|0;P=Z+48|0;V=Z+32|0;S=Z+16|0;j=Z;Y=Z+156|0;q=e+12|0;k=c[q>>2]|0;p=e+44|0;W=c[p>>2]|0;O=k+56|0;N=c[O>>2]|0;N=d[N+37>>0]<<16|d[N+36>>0]<<24|d[N+38>>0]<<8|d[N+39>>0];if(N>>>0>=W>>>0){c[j>>2]=32306;c[j+4>>2]=69057;c[j+8>>2]=31517;Db(11,32001,j);f=11;Ra=Z;return f|0}if(!N){i=(a[e+19>>0]|0)==0&1;k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=W;else{j=Ve(k)|0;X=190}else X=186;do if((X|0)==186){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;X=190;break}else{j=Xf(k)|0;X=190;break}}while(0);do if((X|0)==190)if(!j){k=c[p>>2]|0;break}else{f=j;Ra=Z;return f|0}while(0);j=k+1|0;c[p>>2]=j;n=e+32|0;l=1073741824/((c[n>>2]|0)>>>0)|0;if((k|0)==(l|0)){j=k+2|0;c[p>>2]=j}if(a[e+17>>0]|0){if(j>>>0<2)k=0;else{k=j+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(l|0)?3:2)+k|0}if((k|0)==(j|0)){k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,j,Y,i)|0;if(k|0){f=k;Ra=Z;return f|0}k=c[Y>>2]|0;m=c[k+8>>2]|0;l=m+4|0;if((c[l>>2]|0)==(j|0))j=c[m+72>>2]|0;else{c[m+56>>2]=c[k+4>>2];c[m+72>>2]=k;c[m+52>>2]=e;c[l>>2]=j;a[m+9>>0]=(j|0)==1?100:0;j=k}if((b[j+30>>1]|0)>1){j=c[m+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[o>>2]=32306;c[o+4>>2]=65442;c[o+8>>2]=31517;Db(11,32001,o);f=11;Ra=Z;return f|0}a[m>>0]=0;m=m+72|0;j=c[m>>2]|0;l=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0))k=0;else k=Ve(j)|0;else X=212;do if((X|0)==212){k=c[l+40>>2]|0;if(!k)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){k=Wf(j)|0;break}else{k=Xf(j)|0;break}}while(0);j=c[m>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{X=c[j+20>>2]|0;W=X+120|0;c[W>>2]=(c[W>>2]|0)+-1;X=X+136|0;c[j+16>>2]=c[X>>2];c[X>>2]=j}if(k|0){f=k;Ra=Z;return f|0}k=c[p>>2]|0;j=k+1|0;c[p>>2]=j;if((k|0)==(1073741824/((c[n>>2]|0)>>>0)|0|0)){j=k+2|0;c[p>>2]=j}}}m=c[(c[q>>2]|0)+56>>2]|0;a[m+28>>0]=j>>>24;a[m+29>>0]=j>>>16;a[m+30>>0]=j>>>8;a[m+31>>0]=j;m=c[p>>2]|0;c[g>>2]=m;j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,m,Y,i)|0;if(j|0){c[f>>2]=0;f=j;Ra=Z;return f|0}j=c[Y>>2]|0;k=c[j+8>>2]|0;l=k+4|0;if((c[l>>2]|0)==(m|0))j=k+72|0;else{c[k+56>>2]=c[j+4>>2];Y=k+72|0;c[Y>>2]=j;c[k+52>>2]=e;c[l>>2]=m;a[k+9>>0]=(m|0)==1?100:0;j=Y}c[f>>2]=k;m=c[j>>2]|0;if((b[m+30>>1]|0)>1){do if(k|0)if(!(b[m+28>>1]&32)){Df(m);break}else{e=c[m+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[m+16>>2]=c[e>>2];c[e>>2]=m;break}while(0);c[f>>2]=0;c[r>>2]=32306;c[r+4>>2]=65442;c[r+8>>2]=31517;Db(11,32001,r);f=11;Ra=Z;return f|0}a[k>>0]=0;l=c[m+20>>2]|0;do if((b[m+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[m+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){f=0;Ra=Z;return f|0}else{j=Ve(m)|0;X=241;break}else X=237;while(0);do if((X|0)==237){j=c[l+40>>2]|0;if(!j)if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(m)|0;X=241;break}else{j=Xf(m)|0;X=241;break}else X=243}while(0);do if((X|0)==241)if(j){k=c[f>>2]|0;if(!k)break;else{X=243;break}}else{f=0;Ra=Z;return f|0}while(0);do if((X|0)==243){k=c[k+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{e=c[k+20>>2]|0;Y=e+120|0;c[Y>>2]=(c[Y>>2]|0)+-1;e=e+136|0;c[k+16>>2]=c[e>>2];c[e>>2]=k;break}}while(0);c[f>>2]=0;f=j;Ra=Z;return f|0}a:do switch(i<<24>>24){case 1:{if(W>>>0>>0)n=0;else{j=eg(e,h,Y,0)|0;if(!j){n=(a[Y>>0]|0)==2&1;break a}f=j;Ra=Z;return f|0}break}case 2:{n=1;break}default:n=0}while(0);k=c[k+72>>2]|0;l=c[k+20>>2]|0;if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0){if(c[l+96>>2]|0){m=Ve(k)|0;X=18}}else X=14;do if((X|0)==14){j=c[l+40>>2]|0;if(j|0){f=j;Ra=Z;return f|0}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){m=Wf(k)|0;X=18;break}else{m=Xf(k)|0;X=18;break}}while(0);if((X|0)==18?m|0:0){f=m;Ra=Z;return f|0}F=c[O>>2]|0;H=N+-1|0;a[F+36>>0]=H>>>24;a[F+37>>0]=H>>>16;a[F+38>>0]=H>>>8;a[F+39>>0]=H;F=e+36|0;H=(h|0)==0;E=i<<24>>24==2;D=e+60|0;C=0;l=0;b:while(1){B=l;x=(l|0)!=0;if(x){k=c[B+56>>2]|0;j=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8;k=k+3|0}else{k=c[O>>2]|0;j=d[k+33>>0]<<16|d[k+32>>0]<<24|d[k+34>>0]<<8;k=k+35|0}i=j|d[k>>0];if(i>>>0>W>>>0){X=25;break}if(C>>>0>N>>>0){X=25;break}C=C+1|0;k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,i,Y,0)|0;if(k|0){X=35;break}j=c[Y>>2]|0;A=c[j+8>>2]|0;k=A+4|0;if((c[k>>2]|0)==(i|0))v=c[A+72>>2]|0;else{c[A+56>>2]=c[j+4>>2];c[A+72>>2]=j;c[A+52>>2]=e;c[k>>2]=i;a[A+9>>0]=(i|0)==1?100:0;v=j}j=A;if((b[v+30>>1]|0)>1){X=31;break}a[A>>0]=0;y=A+56|0;w=c[y>>2]|0;r=w+4|0;s=w+5|0;t=w+6|0;u=w+7|0;z=d[s>>0]<<16|d[r>>0]<<24|d[t>>0]<<8|d[u>>0];q=n<<24>>24!=0;c:do if(q|(z|0)!=0){if(z>>>0>(((c[F>>2]|0)>>>2)+-2|0)>>>0){X=49;break b}if(n<<24>>24?(i|0)==(h|0)|E&i>>>0>>0:0){c[g>>2]=i;c[f>>2]=j;j=c[A+72>>2]|0;m=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[m+96>>2]|0){I=Ve(j)|0;X=60}}else X=56;do if((X|0)==56){k=c[m+40>>2]|0;if(k|0){X=251;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){I=Wf(j)|0;X=60;break}else{I=Xf(j)|0;X=60;break}}while(0);if((X|0)==60?(X=0,I|0):0){X=248;break b}if(!z){if(!x){X=63;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=68;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=68;break}if(!(c[m+96>>2]|0))break;J=Ve(j)|0;X=72}while(0);do if((X|0)==68){k=c[m+40>>2]|0;if(k|0){X=252;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){J=Wf(j)|0;X=72;break}else{J=Xf(j)|0;X=72;break}}while(0);if((X|0)==72?(0,J|0):0){X=249;break b}n=c[B+56>>2]|0;k=c[y>>2]|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;n=0;k=0;l=i;j=0;X=178;break}s=c[y>>2]|0;p=a[s+8>>0]|0;q=a[s+9>>0]|0;r=a[s+10>>0]|0;s=a[s+11>>0]|0;m=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(m>>>0>W>>>0){X=75;break b}k=c[e>>2]|0;k=Za[c[k+204>>2]&127](k,m,Y,0)|0;if(k|0){X=85;break b}j=c[Y>>2]|0;o=c[j+8>>2]|0;k=o+4|0;if((c[k>>2]|0)==(m|0))j=c[o+72>>2]|0;else{c[o+56>>2]=c[j+4>>2];c[o+72>>2]=j;c[o+52>>2]=e;c[k>>2]=m;a[o+9>>0]=(m|0)==1?100:0}if((b[j+30>>1]|0)>1){X=81;break b}a[o>>0]=0;j=o+72|0;n=c[j>>2]|0;i=c[n+20>>2]|0;m=b[n+28>>1]|0;do if(!(m&4))X=90;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=90;break}if(!(c[i+96>>2]|0))break;K=Ve(n)|0;X=94}while(0);do if((X|0)==90){k=c[i+40>>2]|0;if(k|0){X=96;break b}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){K=Wf(n)|0;X=94;break}else{K=Xf(n)|0;X=94;break}}while(0);if((X|0)==94?(X=0,K|0):0){X=95;break b}w=o+56|0;v=c[w>>2]|0;u=c[y>>2]|0;u=d[u>>0]|d[u+1>>0]<<8|d[u+2>>0]<<16|d[u+3>>0]<<24;a[v>>0]=u;a[v+1>>0]=u>>8;a[v+2>>0]=u>>16;a[v+3>>0]=u>>24;v=c[w>>2]|0;z=z+-1|0;a[v+4>>0]=z>>>24;a[v+5>>0]=z>>>16;a[v+6>>0]=z>>>8;a[v+7>>0]=z;ew((c[w>>2]|0)+8|0,(c[y>>2]|0)+12|0,z<<2|0)|0;j=c[j>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{z=c[j+20>>2]|0;y=z+120|0;c[y>>2]=(c[y>>2]|0)+-1;z=z+136|0;c[j+16>>2]=c[z>>2];c[z>>2]=j}if(!x){X=103;break b}i=B+72|0;j=c[i>>2]|0;m=c[j+20>>2]|0;do if(!(b[j+28>>1]&4))X=108;else{if((c[m+24>>2]|0)>>>0<(c[j+24>>2]|0)>>>0){X=108;break}if(!(c[m+96>>2]|0))break;L=Ve(j)|0;X=112}while(0);do if((X|0)==108){k=c[m+40>>2]|0;if(k|0){X=254;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){L=Wf(j)|0;X=112;break}else{L=Xf(j)|0;X=112;break}}while(0);if((X|0)==112?(0,L|0):0){X=253;break b}n=c[B+56>>2]|0;a[n>>0]=p;a[n+1>>0]=q;a[n+2>>0]=r;a[n+3>>0]=s;n=0;k=0;l=i;j=0;X=178;break}if(z){d:do if(!H)if(E){k=0;while(1){y=w+((k<<2)+8)|0;if((d[y+1>>0]<<16|d[y>>0]<<24|d[y+2>>0]<<8|d[y+3>>0])>>>0<=h>>>0){i=k;break d}k=k+1|0;if(k>>>0>=z>>>0){i=0;break}}}else{k=(d[w+9>>0]<<16|d[w+8>>0]<<24|d[w+10>>0]<<8|d[w+11>>0])-h|0;if(z>>>0<=1){i=0;break}m=(k|0)>-1?k:(k|0)==-2147483648?2147483647:0-k|0;k=0;i=1;while(1){p=w+((i<<2)+8)|0;p=(d[p+1>>0]<<16|d[p>>0]<<24|d[p+2>>0]<<8|d[p+3>>0])-h|0;p=(p|0)>-1?p:(p|0)==-2147483648?2147483647:0-p|0;o=(p|0)<(m|0);k=o?i:k;i=i+1|0;if((i|0)==(z|0)){i=k;break}else m=o?p:m}}else i=0;while(0);o=w+((i<<2)+8)|0;k=d[o+1>>0]<<16|d[o>>0]<<24|d[o+2>>0]<<8|d[o+3>>0];if(k>>>0>W>>>0){X=124;break b}if((k|0)==(h|0)|q^1|E&k>>>0>>0){c[g>>2]=k;m=c[v+20>>2]|0;do if(!(b[v+28>>1]&4))X=130;else{if((c[m+24>>2]|0)>>>0<(c[v+24>>2]|0)>>>0){X=130;break}if(!(c[m+96>>2]|0))break;M=Ve(v)|0;X=134}while(0);do if((X|0)==130){k=c[m+40>>2]|0;if(k|0){X=256;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){M=Wf(v)|0;X=134;break}else{M=Xf(v)|0;X=134;break}}while(0);if((X|0)==134?(0,M|0):0){X=255;break b}k=z+-1|0;if(i>>>0>>0){X=w+((z<<2)+4)|0;X=d[X>>0]|d[X+1>>0]<<8|d[X+2>>0]<<16|d[X+3>>0]<<24;a[o>>0]=X;a[o+1>>0]=X>>8;a[o+2>>0]=X>>16;a[o+3>>0]=X>>24}a[r>>0]=k>>>24;a[s>>0]=k>>>16;a[t>>0]=k>>>8;a[u>>0]=k;p=c[g>>2]|0;i=c[D>>2]|0;e:do if(!i)k=0;else{k=c[i>>2]|0;if(k>>>0

      >>0){k=1;break}m=p+-1|0;if(m>>>0>=k>>>0){k=0;break}n=c[i+8>>2]|0;if(n){o=i;do{k=(m>>>0)/(n>>>0)|0;o=c[o+12+(k<<2)>>2]|0;if(!o){k=0;break e}m=m-(G(k,n)|0)|0;n=c[o+8>>2]|0}while((n|0)!=0);i=o;k=c[o>>2]|0}if(k>>>0<4001){k=(1<<(m&7)&d[i+12+(m>>>3)>>0]|0)!=0&1;break}n=m+1|0;k=(m>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}while(1){if((m|0)==(n|0)){k=1;break e}k=((k+1|0)>>>0)%125|0;m=c[i+12+(k<<2)>>2]|0;if(!m){k=0;break}}}while(0);X=c[e>>2]|0;k=Za[c[X+204>>2]&127](X,p,Y,k^1)|0;if(k|0){c[f>>2]=0;n=0;X=176;break}k=c[Y>>2]|0;m=c[k+8>>2]|0;n=m+4|0;if((c[n>>2]|0)==(p|0))k=m+72|0;else{c[m+56>>2]=c[k+4>>2];X=m+72|0;c[X>>2]=k;c[m+52>>2]=e;c[n>>2]=p;a[m+9>>0]=(p|0)==1?100:0;k=X}c[f>>2]=m;if((b[(c[k>>2]|0)+30>>1]|0)>1){do if(m|0){k=c[m+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);break}else{X=c[k+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[k+16>>2]=c[X>>2];c[X>>2]=k;break}}while(0);c[f>>2]=0;c[T>>2]=32306;c[T+4>>2]=65442;c[T+8>>2]=31517;Db(11,32001,T);n=0;k=11;X=176;break}a[m>>0]=0;n=c[m+72>>2]|0;i=c[n+20>>2]|0;do if(!(b[n+28>>1]&4))X=166;else{if((c[i+24>>2]|0)>>>0<(c[n+24>>2]|0)>>>0){X=166;break}if(!(c[i+96>>2]|0)){n=0;k=0;X=176;break c}k=Ve(n)|0;X=170}while(0);do if((X|0)==166){k=c[i+40>>2]|0;if(k|0){X=172;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){k=Wf(n)|0;X=170;break}else{k=Xf(n)|0;X=170;break}}while(0);if((X|0)==170){X=0;if(!k){n=0;k=0;X=176;break}m=c[f>>2]|0;if(m)X=172}do if((X|0)==172){m=c[m+72>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{X=c[m+20>>2]|0;A=X+120|0;c[A>>2]=(c[A>>2]|0)+-1;X=X+136|0;c[m+16>>2]=c[X>>2];c[X>>2]=m;break}}while(0);c[f>>2]=0;n=0;X=176}else{k=0;X=176}}else{k=0;X=176}}else{m=c[v+20>>2]|0;if((b[v+28>>1]&4)!=0?(c[m+24>>2]|0)>>>0>=(c[v+24>>2]|0)>>>0:0)if(!(c[m+96>>2]|0))k=w;else{k=Ve(v)|0;X=45}else X=41;do if((X|0)==41){k=c[m+40>>2]|0;if(k|0){X=250;break b}if((c[m+148>>2]|0)>>>0>(c[m+152>>2]|0)>>>0){k=Wf(v)|0;X=45;break}else{k=Xf(v)|0;X=45;break}}while(0);if((X|0)==45){if(k|0){X=247;break b}k=c[y>>2]|0}c[g>>2]=i;n=(c[O>>2]|0)+32|0;k=d[k>>0]|d[k+1>>0]<<8|d[k+2>>0]<<16|d[k+3>>0]<<24;a[n>>0]=k;a[n+1>>0]=k>>8;a[n+2>>0]=k>>16;a[n+3>>0]=k>>24;c[f>>2]=j;n=0;k=0;j=0;X=176}while(0);if((X|0)==176){X=0;if(l){l=B+72|0;X=178}}do if((X|0)==178){X=0;l=c[l>>2]|0;if(!(b[l+28>>1]&32)){Df(l);break}else{B=c[l+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[l+16>>2]=c[B>>2];c[B>>2]=l;break}}while(0);if(!(n<<24>>24)){l=0;X=257;break}else l=j}switch(X|0){case 25:{c[S>>2]=32306;c[S+4>>2]=69113;c[S+8>>2]=31517;Db(11,32001,S);j=l;k=11;break}case 31:{j=c[A+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[V>>2]=32306;c[V+4>>2]=65442;c[V+8>>2]=31517;Db(11,32001,V);j=l;k=11;break}case 35:{j=l;break}case 49:{c[P>>2]=32306;c[P+4>>2]=69142;c[P+8>>2]=31517;Db(11,32001,P);k=11;j=A;X=257;break}case 63:{f=(c[O>>2]|0)+32|0;e=c[y>>2]|0;e=d[e>>0]|d[e+1>>0]<<8|d[e+2>>0]<<16|d[e+3>>0]<<24;a[f>>0]=e;a[f+1>>0]=e>>8;a[f+2>>0]=e>>16;a[f+3>>0]=e>>24;f=0;Ra=Z;return f|0}case 75:{c[Q>>2]=32306;c[Q+4>>2]=69176;c[Q+8>>2]=31517;Db(11,32001,Q);k=11;j=A;X=257;break}case 81:{j=c[o+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j}c[U>>2]=32306;c[U+4>>2]=65442;c[U+8>>2]=31517;Db(11,32001,U);k=11;j=A;X=257;break}case 85:{j=A;X=257;break}case 95:{m=c[j>>2]|0;k=K;n=m;m=b[m+28>>1]|0;X=96;break}case 103:{f=c[O>>2]|0;a[f+32>>0]=p;a[f+33>>0]=q;a[f+34>>0]=r;a[f+35>>0]=s;f=0;Ra=Z;return f|0}case 124:{c[R>>2]=32306;c[R+4>>2]=69241;c[R+8>>2]=31517;Db(11,32001,R);k=11;j=A;X=257;break}case 247:{j=A;X=257;break}case 248:{k=I;j=A;X=257;break}case 249:{k=J;j=A;X=257;break}case 250:{j=A;X=257;break}case 251:{j=A;X=257;break}case 252:{j=A;X=257;break}case 253:{k=L;j=A;X=257;break}case 254:{j=A;X=257;break}case 255:{k=M;j=A;X=257;break}case 256:{j=A;X=257;break}}do if((X|0)==96){j=A;if(!(m&32)){Df(n);X=257;break}else{X=c[n+20>>2]|0;f=X+120|0;c[f>>2]=(c[f>>2]|0)+-1;X=X+136|0;c[n+16>>2]=c[X>>2];c[X>>2]=n;X=257;break}}while(0);do if((X|0)==257)if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);j=l;break}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;j=l;break}}else j=l;while(0);if(!j){f=k;Ra=Z;return f|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);f=k;Ra=Z;return f|0}else{f=c[j+20>>2]|0;e=f+120|0;c[e>>2]=(c[e>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;f=k;Ra=Z;return f|0}return 0}function gg(f,g,h,i,j,k){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,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,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=Ra;Ra=Ra+112|0;P=S+88|0;N=S+72|0;L=S+56|0;q=S+40|0;l=S+24|0;M=S;R=S+100|0;H=g+4|0;Q=c[H>>2]|0;F=c[f>>2]|0;if(Q>>>0<3){c[l>>2]=32306;c[l+4>>2]=66838;c[l+8>>2]=31517;Db(11,32001,l);R=11;Ra=S;return R|0}C=c[g+72>>2]|0;D=F+12|0;a:do if(a[D>>0]|0){n=c[C+20>>2]|0;p=C+28|0;if((b[p>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[C+24>>2]|0)>>>0:0){if(!(c[n+96>>2]|0)){O=14;break}l=Ve(C)|0}else O=9;do if((O|0)==9){l=c[n+40>>2]|0;if(l|0)break a;if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){l=Wf(C)|0;break}else{l=Xf(C)|0;break}}while(0);if(!l)O=14}else{p=C+28|0;O=14}while(0);b:do if((O|0)==14){l=b[p>>1]|0;if(l&2){l=Ve(C)|0;if(l|0)break;l=b[p>>1]|0}if((k|0)!=0|(l&8)==0)E=0;else E=c[C+24>>2]|0;b[p>>1]=l&-9;l=F+212|0;n=Ya[c[29436>>2]&127](c[(c[l>>2]|0)+44>>2]|0,j,0)|0;do if(n){l=c[l>>2]|0;k=c[n+4>>2]|0;if(!(c[k>>2]|0)){l=sf(l,j,n)|0;if(!l){A=0;y=0;break}x=l;y=1;l=b[l+30>>1]|0}else{x=l+12|0;c[x>>2]=(c[x>>2]|0)+1;x=k+30|0;l=(b[x>>1]|0)+1<<16>>16;b[x>>1]=l;x=k;y=(k|0)!=0}k=x+28|0;n=b[k>>1]|0;if(l<<16>>16>1){if(!(n&32))Df(x);else{j=c[x+20>>2]|0;i=j+120|0;c[i>>2]=(c[i>>2]|0)+-1;j=j+136|0;c[x+16>>2]=c[j>>2];c[j>>2]=x}c[q>>2]=32306;c[q+4>>2]=57762;c[q+8>>2]=31517;Db(11,32001,q);l=11;break b}b[p>>1]=b[p>>1]|n&8;if(!(a[D>>0]|0)){s=c[x+12>>2]|0;do if(b[k>>1]&2){l=s+8|0;n=x+36|0;k=c[n>>2]|0;if((c[l>>2]|0)==(x|0))c[l>>2]=k;q=c[x+32>>2]|0;r=(q|0)==0;if(r){c[s+4>>2]=k;l=k}else{c[q+36>>2]=k;l=c[n>>2]|0}if(l|0){c[l+32>>2]=q;break}c[s>>2]=q;if(r)a[s+33>>0]=2}while(0);A=s+12|0;c[A>>2]=(c[A>>2]|0)+-1;cb[c[29440>>2]&255](c[s+44>>2]|0,c[x>>2]|0,1);A=x;break}A=(c[F+24>>2]|0)+1|0;l=x+12|0;w=x+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[x>>2]|0,c[w>>2]|0,A);c[w>>2]=A;w=b[k>>1]|0;if((w&10)==10){t=c[l>>2]|0;v=t+8|0;l=c[v>>2]|0;s=x+36|0;k=c[s>>2]|0;if((l|0)==(x|0)){c[v>>2]=k;u=k}else u=l;r=x+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=42;break}else{c[s>>2]=0;l=t;O=41;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=42}else{l=t;O=41}}while(0);if((O|0)==41)c[n+36>>2]=x;else if((O|0)==42){c[t+4>>2]=x;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=x;if((w&8)==0&(u|0)==0){c[v>>2]=x;A=x}else A=x}else A=x}else{A=0;y=0}while(0);v=C+24|0;z=c[v>>2]|0;x=C+12|0;db[c[29444>>2]&127](c[(c[x>>2]|0)+44>>2]|0,c[C>>2]|0,z,j);c[v>>2]=j;v=b[p>>1]|0;if((v&10)==10){t=c[x>>2]|0;w=t+8|0;l=c[w>>2]|0;s=C+36|0;k=c[s>>2]|0;if((l|0)==(C|0)){c[w>>2]=k;u=k}else u=l;r=C+32|0;n=c[r>>2]|0;q=(n|0)==0;if(q){c[t+4>>2]=k;l=k}else{c[n+36>>2]=k;l=c[s>>2]|0}do if(!l){c[t>>2]=n;if(q){a[t+33>>0]=2;c[s>>2]=0;c[r>>2]=0;l=t;O=69;break}else{c[s>>2]=0;l=t;O=68;break}}else{c[l+32>>2]=n;n=c[t>>2]|0;c[s>>2]=0;c[r>>2]=n;if(!n){l=t;O=69}else{l=t;O=68}}while(0);if((O|0)==68)c[n+36>>2]=C;else if((O|0)==69){c[t+4>>2]=C;if(a[t+32>>0]|0)a[t+33>>0]=1}c[l>>2]=C;if((v&8)==0&(u|0)==0)c[w>>2]=C}l=v&65535;if(l&17|0?(B=l&65519,b[p>>1]=B,l&1|0):0){k=(B^3)&65535;b[p>>1]=k;l=c[x>>2]|0;c[C+36>>2]=0;n=c[l>>2]|0;c[C+32>>2]=n;if(!n){c[l+4>>2]=C;if(a[l+32>>0]|0)a[l+33>>0]=1}else c[n+36>>2]=C;c[l>>2]=C;l=l+8|0;if((k&8)==0&(c[l>>2]|0)==0)c[l>>2]=C}do if(y&(a[D>>0]|0)!=0){l=A+12|0;v=A+24|0;db[c[29444>>2]&127](c[(c[l>>2]|0)+44>>2]|0,c[A>>2]|0,c[v>>2]|0,z);c[v>>2]=z;v=b[A+28>>1]|0;if((v&10)==10){s=c[l>>2]|0;u=s+8|0;l=c[u>>2]|0;r=A+36|0;p=c[r>>2]|0;if((l|0)==(A|0)){c[u>>2]=p;t=p}else t=l;q=A+32|0;n=c[q>>2]|0;k=(n|0)==0;if(k){c[s+4>>2]=p;l=p}else{c[n+36>>2]=p;l=c[r>>2]|0}do if(!l){c[s>>2]=n;if(k){a[s+33>>0]=2;c[r>>2]=0;c[q>>2]=0;l=s;O=94;break}else{c[r>>2]=0;l=s;O=93;break}}else{c[l+32>>2]=n;n=c[s>>2]|0;c[r>>2]=0;c[q>>2]=n;if(!n){l=s;O=94}else{l=s;O=93}}while(0);if((O|0)==93)c[n+36>>2]=A;else if((O|0)==94){c[s+4>>2]=A;if(a[s+32>>0]|0)a[s+33>>0]=1}c[l>>2]=A;if((v&8)==0&(t|0)==0)c[u>>2]=A}if(!(v&32)){Df(A);break}else{D=c[A+20>>2]|0;C=D+120|0;c[C>>2]=(c[C>>2]|0)+-1;D=D+136|0;c[A+16>>2]=c[D>>2];c[D>>2]=A;break}}while(0);do if(E|0){r=Za[c[F+204>>2]&127](F,E,M,0)|0;if(!r){l=c[M>>2]|0;p=l+28|0;n=b[p>>1]|8;b[p>>1]=n;k=n&65535;if(k&17){o=k&65519;n=o&65535;b[p>>1]=n;if(k&1){b[p>>1]=o^3;n=c[l+12>>2]|0;c[l+36>>2]=0;o=c[n>>2]|0;c[l+32>>2]=o;if(!o){c[n+4>>2]=l;if(a[n+32>>0]|0)a[n+33>>0]=1}else c[o+36>>2]=l;c[n>>2]=l;l=c[M>>2]|0;n=b[l+28>>1]|0}}if(!(n&32))Df(l);else{J=c[l+20>>2]|0;F=J+120|0;c[F>>2]=(c[F>>2]|0)+-1;J=J+136|0;c[l+16>>2]=c[J>>2];c[J>>2]=l}break}if(E>>>0<=(c[F+28>>2]|0)>>>0?(o=c[F+56>>2]|0,J=c[F+208>>2]|0,o|0):0){l=E+-1|0;m=c[o+8>>2]|0;c:do if(!m)O=109;else while(1){n=(l>>>0)/(m>>>0)|0;o=c[o+12+(n<<2)>>2]|0;if(!o)break c;l=l-(G(n,m)|0)|0;m=c[o+8>>2]|0;if(!m){O=109;break}}while(0);do if((O|0)==109){if((c[o>>2]|0)>>>0<4001){j=o+12+(l>>>3)|0;a[j>>0]=(1<<(l&7)^255)&d[j>>0];break}q=o+12|0;ew(J|0,q|0,500)|0;gw(q|0,0,500)|0;q=o+4|0;c[q>>2]=0;p=l+1|0;n=0;do{k=J+(n<<2)|0;l=c[k>>2]|0;if(!((l|0)==0|(l|0)==(p|0))){m=((l+-1|0)>>>0)%125|0;c[q>>2]=(c[q>>2]|0)+1;l=o+12+(m<<2)|0;if(c[l>>2]|0)do{l=m+1|0;m=l>>>0>124?0:l;l=o+12+(m<<2)|0}while((c[l>>2]|0)!=0);c[l>>2]=c[k>>2]}n=n+1|0}while((n|0)!=125)}while(0);c[R>>2]=r;R=r;Ra=S;return R|0}c[R>>2]=r;R=r;Ra=S;return R|0}while(0);c[R>>2]=0;c[H>>2]=j;switch(h<<24>>24){case 1:case 5:{l=hg(g)|0;c[R>>2]=l;if(l|0){R=l;Ra=S;return R|0}if(h<<24>>24==1){R=0;Ra=S;return R|0}break}default:{l=c[g+56>>2]|0;l=d[l+1>>0]<<16|d[l>>0]<<24|d[l+2>>0]<<8|d[l+3>>0];if(l|0?(ig(f,l,4,j,R),I=c[R>>2]|0,I|0):0){R=I;Ra=S;return R|0}}}l=c[f>>2]|0;l=Za[c[l+204>>2]&127](l,i,M,0)|0;if(l|0){c[R>>2]=l;R=l;Ra=S;return R|0}l=c[M>>2]|0;v=c[l+8>>2]|0;n=v+4|0;if((c[n>>2]|0)==(i|0))w=v+72|0;else{c[v+56>>2]=c[l+4>>2];w=v+72|0;c[w>>2]=l;c[v+52>>2]=f;c[n>>2]=i;a[v+9>>0]=(i|0)==1?100:0}c[R>>2]=0;l=c[w>>2]|0;n=c[l+20>>2]|0;do if((b[l+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[l+24>>2]|0)>>>0:0)if(!(c[n+96>>2]|0)){c[R>>2]=0;break}else{m=Ve(l)|0;O=152;break}else O=147;while(0);do if((O|0)==147){m=c[n+40>>2]|0;if(m|0){c[R>>2]=m;O=153;break}if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(l)|0;O=152;break}else{m=Xf(l)|0;O=152;break}}while(0);if((O|0)==152?(c[R>>2]=m,m|0):0)O=153;if((O|0)==153){if(!v){R=m;Ra=S;return R|0}l=c[w>>2]|0;if(!(b[l+28>>1]&32)){Df(l);R=m;Ra=S;return R|0}else{R=c[l+20>>2]|0;j=R+120|0;c[j>>2]=(c[j>>2]|0)+-1;R=R+136|0;c[l+16>>2]=c[R>>2];c[R>>2]=l;R=m;Ra=S;return R|0}}d:do if(h<<24>>24==4){l=c[v+56>>2]|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)==(Q|0)){a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break}else{c[L>>2]=32306;c[L+4>>2]=66766;c[L+8>>2]=31517;Db(11,32001,L);l=11;O=181;break}}else{if((a[v>>0]|0)==0?(K=Gf(v)|0,K|0):0){l=K;O=181;break}L=b[v+24>>1]|0;u=L&65535;e:do if(L<<16>>16){n=v+56|0;t=v+26|0;s=v+64|0;o=v+80|0;p=M+16|0;k=M+12|0;q=M+18|0;r=v+52|0;if(h<<24>>24!=3){p=c[n>>2]|0;o=c[s>>2]|0;n=e[t>>1]|0;l=0;while(1){m=o+(l<<1)|0;m=p+((d[m>>0]<<8|d[m+1>>0])&n)|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0))break;l=l+1|0;if(l>>>0>=u>>>0)break e}a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}l=0;while(1){m=(c[s>>2]|0)+(l<<1)|0;m=(c[n>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[t>>1])|0;cb[c[o>>2]&255](v,m,M);if((c[k>>2]|0)>>>0>(e[p>>1]|0)>>>0){m=m+(e[q>>1]|0)|0;if(m>>>0>((c[n>>2]|0)+(c[(c[r>>2]|0)+36>>2]|0)|0)>>>0){O=172;break}m=m+-4|0;if((d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(Q|0)){O=174;break}}l=l+1|0;if(l>>>0>=u>>>0)break e}if((O|0)==172){c[N>>2]=32306;c[N+4>>2]=66785;c[N+8>>2]=31517;Db(11,32001,N);l=11;O=181;break d}else if((O|0)==174){a[m>>0]=j>>>24;a[m+1>>0]=j>>>16;a[m+2>>0]=j>>>8;a[m+3>>0]=j;break}}else l=0;while(0);if((l|0)==(u|0)){do if(h<<24>>24==5){l=(c[v+56>>2]|0)+((d[v+9>>0]|0)+8)|0;m=l+1|0;n=l+2|0;o=l+3|0;if((d[m>>0]<<16|d[l>>0]<<24|d[n>>0]<<8|d[o>>0]|0)!=(Q|0))break;a[l>>0]=j>>>24;a[m>>0]=j>>>16;a[n>>0]=j>>>8;a[o>>0]=j;l=0;O=181;break d}while(0);c[P>>2]=32306;c[P+4>>2]=66803;c[P+8>>2]=31517;Db(11,32001,P);l=11}else l=0;c[R>>2]=l;if(v)O=183}while(0);if((O|0)==181){c[R>>2]=l;O=183}do if((O|0)==183){m=c[w>>2]|0;if(!(b[m+28>>1]&32)){Df(m);break}else{Q=c[m+20>>2]|0;P=Q+120|0;c[P>>2]=(c[P>>2]|0)+-1;Q=Q+136|0;c[m+16>>2]=c[Q>>2];c[Q>>2]=m;break}}while(0);if(l|0){R=l;Ra=S;return R|0}ig(f,j,h,i,R);R=c[R>>2]|0;Ra=S;return R|0}while(0);c[R>>2]=l;R=l;Ra=S;return R|0}function hg(f){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;B=Ra;Ra=Ra+48|0;x=B+24|0;t=B;y=B+36|0;u=f+52|0;z=c[u>>2]|0;w=f+4|0;A=c[w>>2]|0;if(!(a[f>>0]|0)){g=Gf(f)|0;c[y>>2]=g;if(g|0){A=g;Ra=B;return A|0}}else c[y>>2]=0;s=b[f+24>>1]|0;k=s&65535;a:do if(!(s<<16>>16))g=f+8|0;else{l=f+56|0;m=f+26|0;n=f+64|0;o=f+80|0;p=t+16|0;q=t+12|0;g=f+8|0;r=f+60|0;s=t+18|0;h=0;j=0;while(1){i=(c[n>>2]|0)+(h<<1)|0;i=(c[l>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[m>>1])|0;do if((j|0)==0?(cb[c[o>>2]&255](f,i,t),v=e[p>>1]|0,(c[q>>2]|0)>>>0>v>>>0):0){j=c[r>>2]|0;if(j>>>0>=i>>>0?j>>>0<(i+v|0)>>>0:0){c[x>>2]=32306;c[x+4>>2]=64569;c[x+8>>2]=31517;Db(11,32001,x);c[y>>2]=11;break}j=i+((e[s>>1]|0)+-4)|0;ig(c[u>>2]|0,d[j+1>>0]<<16|d[j>>0]<<24|d[j+2>>0]<<8|d[j+3>>0],3,c[w>>2]|0,y)}while(0);if(!(a[g>>0]|0))ig(z,d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0],5,A,y);h=h+1|0;if((h|0)==(k|0))break a;j=c[y>>2]|0}}while(0);if(!(a[g>>0]|0)){f=(c[f+56>>2]|0)+((d[f+9>>0]|0)+8)|0;ig(z,d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0],5,A,y)}A=c[y>>2]|0;Ra=B;return A|0}function ig(e,f,g,h,i){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;r=Ra;Ra=Ra+48|0;m=r+32|0;l=r+16|0;j=r;q=r+44|0;if(c[i>>2]|0){Ra=r;return}switch(f|0){case 0:{c[j>>2]=32306;c[j+4>>2]=64184;c[j+8>>2]=31517;Db(11,32001,j);c[i>>2]=11;Ra=r;return}case 1:{k=0;break}default:{k=f+-2|0;k=k-((k>>>0)%(((((c[e+36>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(1073741824/((c[e+32>>2]|0)>>>0)|0|0)?3:2)+k|0}}j=c[e>>2]|0;j=Za[c[j+204>>2]&127](j,k,q,0)|0;if(j|0){c[i>>2]=j;Ra=r;return}n=c[q>>2]|0;a:do if(!(a[c[n+8>>2]>>0]|0)){l=(f-k|0)*5|0;j=l+-5|0;if((j|0)<0){c[m>>2]=32306;c[m+4>>2]=64202;c[m+8>>2]=31517;Db(11,32001,m);c[i>>2]=11;break}f=c[n+4>>2]|0;e=f+j|0;if((a[e>>0]|0)==g<<24>>24?(m=f+(l+-4)|0,(d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0]|0)==(h|0)):0)break;k=c[n+20>>2]|0;do if((b[n+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[n+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[i>>2]=0;break}else{o=Ve(n)|0;p=23;break}else p=18;while(0);do if((p|0)==18){j=c[k+40>>2]|0;if(j|0){c[i>>2]=j;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){o=Wf(n)|0;p=23;break}else{o=Xf(n)|0;p=23;break}}while(0);if((p|0)==23?(c[i>>2]=o,o|0):0)break;a[e>>0]=g;i=f+(l+-4)|0;a[i>>0]=h>>>24;a[i+1>>0]=h>>>16;a[i+2>>0]=h>>>8;a[i+3>>0]=h}else{c[l>>2]=32306;c[l+4>>2]=64197;c[l+8>>2]=31517;Db(11,32001,l);c[i>>2]=11}while(0);j=c[q>>2]|0;if(!j){Ra=r;return}if(!(b[j+28>>1]&32)){Df(j);Ra=r;return}else{q=c[j+20>>2]|0;i=q+120|0;c[i>>2]=(c[i>>2]|0)+-1;q=q+136|0;c[j+16>>2]=c[q>>2];c[q>>2]=j;Ra=r;return}}function jg(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;if(!d){n=0;return n|0}n=d+4|0;g=c[n>>2]|0;c[g+4>>2]=c[d>>2];g=c[g+8>>2]|0;if(!g){n=0;return n|0}k=(f|0)==0;a:while(1){b:do if(k){f=g+16|0;h=c[f>>2]|0;if(h)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}else m=58}else{l=g+1|0;if(a[l>>0]&1){f=g+16|0;h=c[f>>2]|0;if(!h){m=58;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);m=58;break}else{m=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);m=58;break}}switch(a[g>>0]|0){case 0:{c[g+4>>2]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{o=c[h+20>>2]|0;p=o+120|0;c[p>>2]=(c[p>>2]|0)+-1;o=o+136|0;c[h+16>>2]=c[o>>2];c[o>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}case 2:{a[g>>0]=0;f=ag(g)|0;if(f|0){k=f;break a}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}break}default:break b}a[g>>0]=3;a[l>>0]=a[l>>0]&-15}while(0);if((m|0)==58){m=0;c[f>>2]=0;a[g>>0]=4;c[g+4>>2]=e}j=g+68|0;f=a[j>>0]|0;if(f<<24>>24>-1){if(f<<24>>24){i=0;do{h=c[(c[g+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);f=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(f<<24>>24|0))}f=c[(c[g+116>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32))Df(f);else{p=c[f+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[f+16>>2]=c[p>>2];c[p>>2]=f}a[j>>0]=-1}g=c[g+24>>2]|0;if(!g){f=0;m=71;break}}if((m|0)==71)return f|0;a[l>>0]=a[l>>0]&-15;f=c[n>>2]|0;c[f+4>>2]=c[d>>2];f=c[f+8>>2]|0;if(!f){p=k;return p|0}do{g=f+16|0;h=c[g>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[g>>2]=0;a[f>>0]=4;c[f+4>>2]=k;j=f+68|0;g=a[j>>0]|0;if(g<<24>>24>-1){if(g<<24>>24){i=0;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[j>>0]|0}else{p=c[h+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[h+16>>2]=c[p>>2];c[p>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[f+116>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{p=c[g+20>>2]|0;o=p+120|0;c[o>>2]=(c[o>>2]|0)+-1;p=p+136|0;c[g+16>>2]=c[p>>2];c[p>>2]=g}a[j>>0]=-1}f=c[f+24>>2]|0}while((f|0)!=0);f=k;return f|0}function kg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;switch(d|0){case -16:{lg(a,e);return}case -15:case -17:case -7:case -14:case -13:{if(!e)return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -9:{if((e|0)==0|(c[a+480>>2]|0)!=0)return;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;a=c[e+12>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -8:{if(!(c[e+4>>2]&16))return;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -11:{if(c[a+480>>2]|0){mg(a,e);return}if(!e)return;if(!((b[e+8>>1]&9216)==0?!(c[e+24>>2]|0):0))Cg(e);a=c[e+32>>2]|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}d=e;if((c[a+304>>2]|0)>>>0<=d>>>0?(c[a+308>>2]|0)>>>0>d>>>0:0){d=a+300|0;c[e>>2]=c[d>>2];c[d>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{d=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}case -12:{if(c[a+480>>2]|0)return;a=c[e>>2]|0;f=e+12|0;d=(c[f>>2]|0)+-1|0;c[f>>2]=d;if(d|0)return;d=c[e+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(a|0){if(c[a+480>>2]|0){Xd(a,e);return}f=e;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){f=a+300|0;c[e>>2]=c[f>>2];c[f>>2]=e;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{f=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}default:return}}function lg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=c[b+4>>2]|0;a:do if(c[f+4>>2]&16){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=14;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=12;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=12;break}}else e=12;while(0);if((e|0)==12)if(a){d=a+480|0;e=14}if((e|0)==14){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function mg(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;a:do if((c[b+24>>2]|0)!=0?(f=c[b+20>>2]|0,(f|0)!=0):0){do if(a|0){d=a+480|0;if(!(c[d>>2]|0)){e=f;if((c[a+304>>2]|0)>>>0>e>>>0)break;if((c[a+308>>2]|0)>>>0<=e>>>0)break;e=a+300|0;c[f>>2]=c[e>>2];c[e>>2]=f}else Xd(a,f);e=15;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);e=13;break}else{e=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);e=13;break}}else e=13;while(0);if((e|0)==13)if(a){d=a+480|0;e=15}if((e|0)==15){if(c[d>>2]|0){Xd(a,b);return}f=b;if((c[a+304>>2]|0)>>>0<=f>>>0?(c[a+308>>2]|0)>>>0>f>>>0:0){a=a+300|0;c[b>>2]=c[a>>2];c[a>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{a=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function ng(a){a=a|0;var b=0,d=0,e=0;b=c[a>>2]|0;e=a+12|0;d=(c[e>>2]|0)+-1|0;c[e>>2]=d;if(d|0)return;d=c[a+8>>2]|0;if(d|0)Wa[c[(c[d>>2]|0)+16>>2]&127](d)|0;if(b|0){if(c[b+480>>2]|0){Xd(b,a);return}e=a;if((c[b+304>>2]|0)>>>0<=e>>>0?(c[b+308>>2]|0)>>>0>e>>>0:0){e=b+300|0;c[a>>2]=c[e>>2];c[e>>2]=a;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{e=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function og(b){b=b|0;var d=0;d=b+81|0;if(a[d>>0]|0?(c[b+180>>2]|0)==0:0){a[d>>0]=0;c[b+264>>2]=0;d=b+272|0;c[d>>2]=(c[d>>2]|0)+-1}c[b+64>>2]=7;Ne(b,7);return}function pg(f){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,M=0,N=0;N=Ra;Ra=Ra+64|0;C=N+40|0;F=N+32|0;E=N+24|0;D=N+16|0;z=N+8|0;y=N;B=N+48|0;J=c[f>>2]|0;K=f+20|0;if((c[K>>2]|0)!=770837923){M=0;Ra=N;return M|0}M=J+81|0;if(a[M>>0]|0)c[f+40>>2]=7;i=f+196|0;g=c[i>>2]|0;if(g|0){while(1){h=c[g+4>>2]|0;if(!h)break;else g=h}sg(g)|0;c[i>>2]=0;c[f+204>>2]=0}k=f+96|0;h=c[k>>2]|0;a:do if(h|0?(l=f+28|0,j=c[l>>2]|0,(j|0)>0):0){g=0;i=j;while(1){h=c[h+(g<<2)>>2]|0;if(!h)h=i;else{tg(f,h);c[(c[k>>2]|0)+(g<<2)>>2]=0;h=c[l>>2]|0}g=g+1|0;if((g|0)>=(h|0))break a;i=h;h=c[k>>2]|0}}while(0);g=c[f+88>>2]|0;b:do if(g|0?(m=c[f+24>>2]|0,m|0):0){p=g+(m*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(q=c[g+20>>2]|0,q|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](q);break}else{G=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}while(1){do if(c[g+24>>2]|0?(r=c[g+20>>2]|0,r|0):0){if(c[l>>2]|0){Xd(k,r);break}G=r;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[r>>2]=c[o>>2];c[o>>2]=r;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{G=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break b}}if(h)while(1){i=g+8|0;if(!(b[i>>1]&9216)){j=g+24|0;if(c[j>>2]|0){h=c[g+20>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);c[j>>2]=0}}else Cg(g);b[i>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break b}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){G=j;if((c[m>>2]|0)>>>0<=G>>>0?(c[n>>2]|0)>>>0>G>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{G=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0

      >>0)}while(0);s=f+200|0;g=c[s>>2]|0;if(g|0)do{c[s>>2]=c[g+4>>2];h=g+80|0;j=g+60|0;i=c[j>>2]|0;k=h+(i*40|0)|0;l=g+64|0;if((c[l>>2]|0)>0){i=0;do{tg(c[g>>2]|0,c[k+(i<<2)>>2]|0);i=i+1|0}while((i|0)<(c[l>>2]|0));i=c[j>>2]|0}c:do if(i|0){r=h+(i*40|0)|0;m=c[g+112>>2]|0;n=m+480|0;i=(m|0)==0;o=m+304|0;p=m+308|0;q=m+300|0;if(c[n>>2]|0){if(i)while(1){do if(c[h+24>>2]|0?(t=c[h+20>>2]|0,t|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{G=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}while(1){d:do if(c[h+24>>2]|0?(u=c[h+20>>2]|0,u|0):0){if(c[n>>2]|0){Xd(m,u);break}i=u;do if((c[o>>2]|0)>>>0<=i>>>0){if((c[p>>2]|0)>>>0<=i>>>0)break;c[u>>2]=c[q>>2];c[q>>2]=u;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);break}else{G=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);break}}while(0);h=h+40|0;if(h>>>0>=r>>>0)break c}}if(i)while(1){i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;do if(k|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0;if(h>>>0>=r>>>0)break c}do{i=h+8|0;if(!(b[i>>1]&9216)){j=h+24|0;if(c[j>>2]|0){k=c[h+20>>2]|0;e:do if(!(c[n>>2]|0)){l=k;do if((c[o>>2]|0)>>>0<=l>>>0){if((c[p>>2]|0)>>>0<=l>>>0)break;c[k>>2]=c[q>>2];c[q>>2]=k;break e}while(0);if(!k)break;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{G=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}else Xd(m,k);while(0);c[j>>2]=0}}else Cg(h);b[i>>1]=128;h=h+40|0}while(h>>>0>>0)}while(0);j=c[c[g>>2]>>2]|0;o=g+40|0;h=c[o>>2]|0;f:do if(h|0){k=j+480|0;l=j+304|0;m=j+308|0;n=j+300|0;if(!j)while(1){i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}h=c[o>>2]|0;if(!h)break f}do{i=c[h+12>>2]|0;if(i|0)ab[i&127](c[h+8>>2]|0);c[o>>2]=c[h+16>>2];do if(!(c[k>>2]|0)){G=h;if((c[l>>2]|0)>>>0<=G>>>0?(c[m>>2]|0)>>>0>G>>>0:0){c[h>>2]=c[n>>2];c[n>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{G=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(j,h);while(0);h=c[o>>2]|0}while((h|0)!=0)}while(0);h=c[c[g>>2]>>2]|0;do if(h){if(c[h+480>>2]|0){Xd(h,g);break}G=g;if((c[h+304>>2]|0)>>>0<=G>>>0?(c[h+308>>2]|0)>>>0>G>>>0:0){G=h+300|0;c[g>>2]=c[G>>2];c[G>>2]=g}else H=145}else H=145;while(0);do if((H|0)==145){H=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[s>>2]|0}while((g|0)!=0);n=f+216|0;g=c[n>>2]|0;g:do if(g|0){i=c[f>>2]|0;j=i+480|0;k=i+304|0;l=i+308|0;m=i+300|0;if(!i)while(1){h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}g=c[n>>2]|0;if(!g)break g}do{h=c[g+12>>2]|0;if(h|0)ab[h&127](c[g+8>>2]|0);c[n>>2]=c[g+16>>2];do if(!(c[j>>2]|0)){G=g;if((c[k>>2]|0)>>>0<=G>>>0?(c[l>>2]|0)>>>0>G>>>0:0){c[g>>2]=c[m>>2];c[m>>2]=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{G=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-G;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(i,g);while(0);g=c[n>>2]|0}while((g|0)!=0)}while(0);u=f+36|0;if((c[u>>2]|0)>-1){G=f+149|0;if((d[G>>0]|d[G+1>>0]<<8)&512){h=c[f+156>>2]|0;if(h|0?(w=c[f>>2]|0,v=c[w+16>>2]|0,w=c[w+20>>2]|0,(w|0)>0):0){g=0;do{if(((g|0)!=1?1<>2]|0,x|0):0)c[(c[x+4>>2]|0)+4>>2]=c[x>>2];g=g+1|0}while((g|0)!=(w|0))}t=f+40|0;h=c[t>>2]|0;i=h&255;h:do switch(i<<24>>24){case 13:case 7:case 9:case 10:{g=d[G>>0]|d[G+1>>0]<<8;if((h&255|0)!=9|(g&256)==0){switch(i<<24>>24){case 7:case 13:{if(g&128){g=2;i=1;break h}break}default:{}}rg(J,516);i=J+444|0;g=c[i>>2]|0;if(g|0){j=J+480|0;k=J+304|0;l=J+308|0;m=J+300|0;do{c[i>>2]=c[g+24>>2];i:do if(!(c[j>>2]|0)){h=g;do if((c[k>>2]|0)>>>0<=h>>>0){if((c[l>>2]|0)>>>0<=h>>>0)break;c[g>>2]=c[m>>2];c[m>>2]=g;break i}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}else Xd(J,g);while(0);g=c[i>>2]|0}while((g|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;g=0;h=c[t>>2]|0;i=1}else{g=0;i=1}break}default:{g=0;i=0}}while(0);if((h|0)==0?(x=f+64|0,w=c[x+4>>2]|0,(w|0)>0|(w|0)==0&(c[x>>2]|0)>>>0>0):0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,y)}s=J+332|0;h=c[s>>2]|0;if((h|0)>0?(c[J+356>>2]|0)==0:0)H=460;else if((a[J+79>>0]|0)!=0?(c[J+176>>2]|0)==((((d[G>>0]|d[G+1>>0]<<8)&65535)>>>8&1^1)&65535|0):0){if((c[t>>2]|0)!=0?i|(a[f+146>>0]|0)!=3:0){rg(J,0);c[f+44>>2]=0}else H=205;j:do if((H|0)==205){x=c[f>>2]|0;y=x+464|0;x=x+472|0;y=Sv(c[x>>2]|0,c[x+4>>2]|0,c[y>>2]|0,c[y+4>>2]|0)|0;x=L()|0;k:do if((x|0)>0|(x|0)==0&y>>>0>0){c[t>>2]=787;a[f+146>>0]=2;Ag(f,32436,z);if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=787;break}else g=1;Ra=N;return g|0}else{r=J+356|0;p=c[r>>2]|0;c[r>>2]=0;q=f+124|0;l:do if((h|0)>0){o=0;m:while(1){i=c[(c[p+(o<<2)>>2]|0)+8>>2]|0;do if(i|0){h=c[(c[i>>2]|0)+60>>2]|0;if(!h)break;h=Wa[h&127](i)|0;n=i+8|0;if(c[n>>2]|0){k=c[f>>2]|0;i=c[q>>2]|0;n:do if(i|0){do if(k|0){if(c[k+480>>2]|0){Xd(k,i);break n}j=i;if((c[k+304>>2]|0)>>>0>j>>>0)break;if((c[k+308>>2]|0)>>>0<=j>>>0)break;z=k+300|0;c[i>>2]=c[z>>2];c[z>>2]=i;break n}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);l=c[n>>2]|0;o:do if(!l)i=0;else{m=(Eu(l)|0)+1|0;p:do if(!k){z=Sv(m|0,0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){i=0;break o}if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;H=247;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;y=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i){i=0;break o}j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0)break;c[14987]=j}else{if(c[k+272>>2]|0){if(a[k+81>>0]|0){i=0;break o}}else{do if(!(0<0|(0==0?(e[k+276>>1]|0)>>>0>>0:0))){j=k+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}j=k+296|0;i=c[j>>2]|0;if(!i){i=k+292|0;break}else{c[j>>2]=c[i>>2];H=k+284|0;c[H>>2]=(c[H>>2]|0)+1;H=247;break p}}else i=k+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(k,m,0)|0;H=247}while(0);if((H|0)==247){H=0;if(!i){i=0;break}}ew(i|0,l|0,m|0)|0}while(0);c[q>>2]=i;i=c[n>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{z=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-z;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[n>>2]=0}if(h|0)break m}while(0);o=o+1|0;if((o|0)>=(c[s>>2]|0)){H=257;break l}}c[r>>2]=p;H=454}else H=257;while(0);q:do if((H|0)==257){c[r>>2]=p;p=J+20|0;q=J+16|0;o=0;i=0;j=0;while(1){if((o|0)>=(c[p>>2]|0))break;k=c[q>>2]|0;h=c[k+(o<<4)+4>>2]|0;r:do if(!h)h=0;else{if((a[h+8>>0]|0)!=2){h=0;break}j=c[h+4>>2]|0;c[j+4>>2]=c[h>>2];j=c[j>>2]|0;do if((a[k+(o<<4)+8>>0]|0)!=1){if(!(11>>>(d[j+5>>0]|0)&1))break;i=i+((a[j+12>>0]|0)==0&1)|0}while(0);h=c[j+40>>2]|0;if(h|0){j=1;break}if(c[j+216>>2]|0){h=0;j=1;break}k=j+17|0;l=j+13|0;m=j+60|0;n=j+176|0;j=j+180|0;s:while(1){switch(a[k>>0]|0){case 0:case 1:case 2:case 3:case 5:break;default:{h=0;j=1;break r}}if(a[l>>0]|0)break;h=c[m>>2]|0;h=Xa[c[(c[h>>2]|0)+28>>2]&255](h,4)|0;switch(h|0){case 0:break s;case 5:break;default:{j=1;break r}}if(!(Wa[c[n>>2]&127](c[j>>2]|0)|0)){h=5;j=1;break r}}a[k>>0]=4;h=0;j=1}while(0);if(!h)o=o+1|0;else{H=454;break q}}do if(j|0){h=c[J+216>>2]|0;if(!h)break;if(Wa[h&127](c[J+212>>2]|0)|0){h=531;break k}}while(0);j=c[c[(c[(c[q>>2]|0)+4>>2]|0)+4>>2]>>2]|0;k=(a[j+15>>0]|0)==0;if(k){h=c[j+168>>2]|0;if(h|0)H=278}else{h=59952;H=278}do if((H|0)==278){if((i|0)<2|((Eu(h)|0)&1073741823|0)==0)break;n=c[J>>2]|0;if(k){h=c[j+168>>2]|0;if(!h){i=0;h=0}else H=320}else{h=59952;H=320}if((H|0)==320)i=(Eu(h)|0)&1073741823;c[D>>2]=h;o=dd(J,32466,D)|0;t:do if(o){j=o+i|0;k=n+32|0;i=0;u:while(1){do if(i|0){if(i>>>0>100){H=327;break u}if((i|0)!=1)break;c[E>>2]=o;Db(13,32496,E)}while(0);Fb(4,D);h=c[D>>2]|0;c[C>>2]=h>>>8;c[C+4>>2]=h&255;Cb(13,j,32511,C)|0;h=Za[c[k>>2]&127](n,o,0,B)|0;l=(h|0)==0;if(l&(c[B>>2]|0)!=0)i=i+1|0;else{H=329;break}}if((H|0)==327){c[F>>2]=o;Db(13,32482,F);Ya[c[n+28>>2]&127](n,o,0)|0;H=330}else if((H|0)==329)if(l)H=330;v:do if((H|0)==330){k=c[n+4>>2]|0;F=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;E=L()|0;if(E>>>0>0|(E|0)==0&F>>>0>2147483390){h=7;break}do if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h){h=7;break v}else m=h}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){F=c[14978]|0;E=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;D=L()|0;c[14768]=((D|0)<0|(D|0)==0&E>>>0<=F>>>0)&1}i=Wa[c[29340>>2]&127](h)|0;if(!i){h=7;break v}h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0<=(c[14987]|0)>>>0){m=i;break}c[14987]=h;m=i}while(0);gw(m|0,0,k|0)|0;h=_a[c[n+24>>2]&127](n,o,m,16406,0)|0;if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}h=c[p>>2]|0;w:do if((h|0)>0){l=0;k=0;j=0;x:while(1){i=c[(c[q>>2]|0)+(l<<4)+4>>2]|0;do if(!i)i=k;else{if((a[i+8>>0]|0)!=2){i=k;break}i=c[(c[c[i+4>>2]>>2]|0)+172>>2]|0;if(!i){i=k;break}h=((Eu(i)|0)&1073741823)+1|0;h=_a[c[(c[m>>2]|0)+12>>2]&127](m,i,h,k,j)|0;if(h|0)break x;i=Sv(k|0,j|0,((Eu(i)|0)&1073741823)+1|0,0)|0;j=L()|0;h=c[p>>2]|0}while(0);l=l+1|0;if((l|0)>=(h|0))break w;else k=i}i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);do if(!((Wa[c[(c[m>>2]|0)+48>>2]&127](m)|0)&1024)){h=Xa[c[(c[m>>2]|0)+20>>2]&255](m,2)|0;if(!h)break;i=c[m>>2]|0;if(i|0){Wa[c[i+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{H=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}Ya[c[n+28>>2]&127](n,o,0)|0;if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}while(0);i=0;while(1){if((i|0)>=(c[p>>2]|0)){h=0;i=1;break}h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,o)|0;if(!h)i=i+1|0;else{i=0;break}}j=c[m>>2]|0;if(j|0){Wa[c[j+4>>2]&127](m)|0;c[m>>2]=0}if(!(c[7324]|0))ab[c[29344>>2]&127](m);else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m)}if(!i){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break t}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break t}}h=Ya[c[n+28>>2]&127](n,o,1)|0;n=J+480|0;y:do if(!(c[n>>2]|0)){i=o;do if((c[J+304>>2]|0)>>>0<=i>>>0){if((c[J+308>>2]|0)>>>0<=i>>>0)break;F=J+300|0;c[o>>2]=c[F>>2];c[F>>2]=o;break y}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{F=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else Xd(J,o);while(0);if(h|0)break t;h=c[p>>2]|0;if((h|0)>0){j=0;do{i=c[(c[q>>2]|0)+(j<<4)+4>>2]|0;if(i){bc(i,1)|0;h=c[p>>2]|0}j=j+1|0}while((j|0)<(h|0))}m=c[r>>2]|0;if(m|0){c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;z:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break z}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}A:do if(!(c[n>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break A}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}break q}while(0);do if(J|0){if(c[J+480>>2]|0){Xd(J,o);break t}i=o;if((c[J+304>>2]|0)>>>0>i>>>0)break;if((c[J+308>>2]|0)>>>0<=i>>>0)break;H=J+300|0;c[o>>2]=c[H>>2];c[H>>2]=o;break t}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{H=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}}else h=7;while(0);H=454;break q}while(0);i=0;while(1){h=c[p>>2]|0;if((i|0)>=(h|0))break;h=c[(c[q>>2]|0)+(i<<4)+4>>2]|0;if(!h)h=0;else h=cc(h,0)|0;if(!h)i=i+1|0;else{H=454;break q}}if((h|0)>0){h=0;do{i=c[(c[q>>2]|0)+(h<<4)+4>>2]|0;if(i|0?(A=bc(i,0)|0,A|0):0){h=A;H=454;break q}h=h+1|0}while((h|0)<(c[p>>2]|0))}m=c[r>>2]|0;if(!m)break;c[r>>2]=0;if((c[s>>2]|0)>0){k=0;do{l=c[m+(k<<2)>>2]|0;j=l+8|0;h=c[j>>2]|0;do if(h|0){i=c[(c[h>>2]|0)+64>>2]|0;if(!i)break;Wa[i&127](h)|0}while(0);c[l+20>>2]=0;i=c[l>>2]|0;E=l+12|0;F=(c[E>>2]|0)+-1|0;c[E>>2]=F;B:do if(!F){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;do if(i|0){if(c[i+480>>2]|0){Xd(i,l);break B}h=l;if((c[i+304>>2]|0)>>>0>h>>>0)break;if((c[i+308>>2]|0)>>>0<=h>>>0)break;F=i+300|0;c[l>>2]=c[F>>2];c[F>>2]=l;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{F=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);k=k+1|0}while((k|0)<(c[s>>2]|0))}C:do if(!(c[J+480>>2]|0)){h=m;do if((c[J+304>>2]|0)>>>0<=h>>>0){if((c[J+308>>2]|0)>>>0<=h>>>0)break;F=J+300|0;c[m>>2]=c[F>>2];c[F>>2]=m;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{F=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-F;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}else Xd(J,m);while(0);c[s>>2]=0}while(0);D:do if((H|0)==454){switch(h|0){case 0:break D;case 5:break;default:break k}if(!((d[G>>0]|d[G+1>>0]<<8)&256)){h=5;break k}else g=5;Ra=N;return g|0}while(0);E=J+464|0;H=J+32|0;c[E>>2]=0;c[E+4>>2]=0;c[E+8>>2]=0;c[E+12>>2]=0;E=H;F=c[E+4>>2]|0;c[H>>2]=c[E>>2]&-524289;c[H+4>>2]=F;H=J+24|0;c[H>>2]=c[H>>2]&-2;break j}while(0);c[t>>2]=h;rg(J,0);c[f+44>>2]=0}while(0);c[J+456>>2]=0;H=476}else H=460;E:do if((H|0)==460)if(!g)if(!(c[t>>2]|0)){g=1;H=477}else{switch(a[f+146>>0]|0){case 3:{g=1;H=477;break E}case 2:{g=2;H=477;break E}default:{}}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];F:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break F}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{H=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-H;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0;H=476}else H=477;while(0);if((H|0)==476)if(!g)g=0;else H=477;if((H|0)==477)if(((c[(c[f>>2]|0)+456>>2]|0)!=0?(c[f+48>>2]|0)!=0:0)?(I=Bg(f,g)|0,(I|0)!=0):0){H=c[t>>2]|0;if((H|0)==0|(H&255|0)==19){c[t>>2]=I;h=f+124|0;i=c[h>>2]|0;G:do if(i|0){if(c[J+480>>2]|0){Xd(J,i);break}j=i;do if((c[J+304>>2]|0)>>>0<=j>>>0){if((c[J+308>>2]|0)>>>0<=j>>>0)break;I=J+300|0;c[i>>2]=c[I>>2];c[I>>2]=i;break G}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{I=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);c[h>>2]=0}rg(J,516);j=J+444|0;h=c[j>>2]|0;if(h|0){k=J+480|0;l=J+304|0;m=J+308|0;n=J+300|0;do{c[j>>2]=c[h+24>>2];H:do if(!(c[k>>2]|0)){i=h;do if((c[l>>2]|0)>>>0<=i>>>0){if((c[m>>2]|0)>>>0<=i>>>0)break;c[h>>2]=c[n>>2];c[n>>2]=h;break H}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{I=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-I;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}else Xd(J,h);while(0);h=c[j>>2]|0}while((h|0)!=0)}c[J+452>>2]=0;c[J+456>>2]=0;a[J+87>>0]=0;a[J+79>>0]=1;c[f+44>>2]=0}if((d[G>>0]|d[G+1>>0]<<8)&32){h=f+44|0;if((g|0)==2)g=0;else{g=c[h>>2]|0;I=J+104|0;c[I>>2]=(c[I>>2]|0)+g}c[J+100>>2]=g;c[h>>2]=0}}if((c[u>>2]|0)>-1){g=J+168|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8;if(!(g&256)){g=J+176|0;c[g>>2]=(c[g>>2]|0)+-1;g=d[G>>0]|d[G+1>>0]<<8}if(g&512){J=J+172|0;c[J>>2]=(c[J>>2]|0)+-1}}}c[K>>2]=832317811;g=f+40|0;if(!(a[M>>0]|0)){M=(c[g>>2]|0)==5?5:0;Ra=N;return M|0}else{c[g>>2]=7;M=0;Ra=N;return M|0}return 0}function qg(d){d=d|0;var f=0,g=0,h=0,i=0,j=0,k=0,l=0;k=c[d>>2]|0;l=c[d+40>>2]|0;i=d+124|0;if(!(c[i>>2]|0)){d=c[k+260>>2]|0;if(!d){k=k+64|0;c[k>>2]=l;return l|0}f=d+8|0;if(!(b[f>>1]&9216)){b[f>>1]=1;k=k+64|0;c[k>>2]=l;return l|0}else{Dg(d);k=k+64|0;c[k>>2]=l;return l|0}}j=k+82|0;a[j>>0]=(a[j>>0]|0)+1<<24>>24;h=k+260|0;d=c[h>>2]|0;do if(!d){a:do if(c[k+272>>2]|0){if(!(a[k+81>>0]|0))g=13}else{do if((e[k+276>>1]|0)>=40){d=k+300|0;f=c[d>>2]|0;if(f|0){c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}d=k+296|0;f=c[d>>2]|0;if(!f){d=k+292|0;break}else{c[d>>2]=c[f>>2];g=k+284|0;c[g>>2]=(c[g>>2]|0)+1;g=14;break a}}else d=k+288|0;while(0);c[d>>2]=(c[d>>2]|0)+1;g=13}while(0);if((g|0)==13){f=_d(k,40,0)|0;g=14}if((g|0)==14?f|0:0){d=f;g=d+40|0;do{a[d>>0]=0;d=d+1|0}while((d|0)<(g|0));b[f+8>>1]=1;c[f+32>>2]=k;c[h>>2]=f;d=f;g=17;break}c[h>>2]=0}else g=17;while(0);if((g|0)==17)yc(d,c[i>>2]|0,-1,1,-1)|0;a[j>>0]=(a[j>>0]|0)+-1<<24>>24;k=k+64|0;c[k>>2]=l;return l|0}function rg(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;m=b+20|0;l=c[m>>2]|0;i=(l|0)>0;if(i){g=c[b+16>>2]|0;f=0;do{h=c[g+(f<<4)+4>>2]|0;if(h|0)c[(c[h+4>>2]|0)+4>>2]=c[h>>2];f=f+1|0}while((f|0)!=(l|0))}if(!(c[b+24>>2]&1))n=0;else n=(a[b+165>>0]|0)==0;if(i){j=b+16|0;k=(n^1)&1;f=0;i=0;h=l;while(1){g=c[(c[j>>2]|0)+(i<<4)+4>>2]|0;if(!g)g=h;else{f=(a[g+8>>0]|0)==2?1:f;ec(g,e,k);g=c[m>>2]|0}i=i+1|0;if((i|0)>=(g|0)){e=f;break}else h=g}}else e=0;f=b+356|0;l=c[f>>2]|0;if(l|0){c[f>>2]=0;j=b+332|0;if((c[j>>2]|0)>0){i=0;do{k=c[l+(i<<2)>>2]|0;g=k+8|0;f=c[g>>2]|0;if(f|0?(o=c[(c[f>>2]|0)+68>>2]|0,o|0):0)Wa[o&127](f)|0;c[k+20>>2]=0;h=c[k>>2]|0;f=k+12|0;m=(c[f>>2]|0)+-1|0;c[f>>2]=m;do if(!m){f=c[g>>2]|0;if(f|0)Wa[c[(c[f>>2]|0)+16>>2]&127](f)|0;if(h|0){if(c[h+480>>2]|0){Xd(h,k);break}m=k;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[k>>2]=c[m>>2];c[m>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{m=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);i=i+1|0}while((i|0)<(c[j>>2]|0))}do if(!(c[b+480>>2]|0)){o=l;if((c[b+304>>2]|0)>>>0<=o>>>0?(c[b+308>>2]|0)>>>0>o>>>0:0){o=b+300|0;c[l>>2]=c[o>>2];c[o>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{o=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}else Xd(b,l);while(0);c[j>>2]=0}if(n){f=c[b+4>>2]|0;if(f|0)do{o=f+149|0;n=(d[o>>0]|d[o+1>>0]<<8)&-4|1;a[o>>0]=n;a[o+1>>0]=n>>8;f=c[f+8>>2]|0}while((f|0)!=0);$b(b)}n=b+464|0;f=b+32|0;c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;n=f;o=c[n+4>>2]|0;c[f>>2]=c[n>>2]&-524289;c[f+4>>2]=o;f=c[b+224>>2]|0;if(!f)return;if((e|0)==0?a[b+79>>0]|0:0)return;ab[f&127](c[b+220>>2]|0);return}function sg(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;h=c[a>>2]|0;g=h+96|0;e=c[g>>2]|0;f=h+28|0;a:do if(e|0?(d=c[f>>2]|0,(d|0)>0):0){b=0;while(1){e=c[e+(b<<2)>>2]|0;if(e){tg(h,e);c[(c[g>>2]|0)+(b<<2)>>2]=0;d=c[f>>2]|0}b=b+1|0;if((b|0)>=(d|0))break a;e=c[g>>2]|0}}while(0);c[h+104>>2]=c[a+8>>2];c[h+108>>2]=c[a+52>>2];c[h+88>>2]=c[a+16>>2];c[h+24>>2]=c[a+56>>2];c[g>>2]=c[a+20>>2];c[f>>2]=c[a+44>>2];g=a+32|0;b=c[g+4>>2]|0;i=c[h>>2]|0;j=i+40|0;c[j>>2]=c[g>>2];c[j+4>>2]=b;c[h+44>>2]=c[a+68>>2];c[i+100>>2]=c[a+72>>2];j=h+216|0;b=c[j>>2]|0;if(!b){i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}e=i+480|0;f=i+304|0;g=i+308|0;h=i+300|0;if(!i){do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];if(!(c[7324]|0))ab[c[29344>>2]&127](b);else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b)}b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}do{d=c[b+12>>2]|0;if(d|0)ab[d&127](c[b+8>>2]|0);c[j>>2]=c[b+16>>2];do if(!(c[e>>2]|0)){d=b;if((c[f>>2]|0)>>>0<=d>>>0?(c[g>>2]|0)>>>0>d>>>0:0){c[b>>2]=c[h>>2];c[h>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}else Xd(i,b);while(0);b=c[j>>2]|0}while((b|0)!=0);i=a+40|0;h=c[i>>2]|0;c[j>>2]=h;c[i>>2]=0;a=a+48|0;a=c[a>>2]|0;return a|0}function tg(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0;if(!d)return;switch(a[d>>0]|0){case 1:{f=c[b>>2]|0;b=d+40|0;d=c[b>>2]|0;if(!d)return;wg(f,d);e=c[d+40>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=14}else g=14;while(0);do if((g|0)==14)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[b>>2]=0;return}case 0:{if(!(a[d+5>>0]&1)){vg(c[d+40>>2]|0);return}b=c[d+8>>2]|0;if(!b)return;ug(b);return}case 2:{h=c[d+40>>2]|0;f=c[h>>2]|0;g=c[f>>2]|0;f=f+4|0;c[f>>2]=(c[f>>2]|0)+-1;Wa[c[g+28>>2]&127](h)|0;return}default:return}}function ug(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=c[b+4>>2]|0;c[i+4>>2]=c[b>>2];d=c[i+8>>2]|0;if(d|0)do{e=d;d=c[d+24>>2]|0;if((c[e+8>>2]|0)==(b|0))vg(e)}while((d|0)!=0);ec(b,0,0);a:do if(a[b+9>>0]|0){e=i+64|0;f=c[e>>2]|0;c[e>>2]=f+-1;if((f|0)<2){d=c[14822]|0;if((d|0)==(i|0)){c[14822]=c[i+68>>2];h=15;break}if(!d)h=15;else{while(1){e=c[d+68>>2]|0;if((e|0)==(i|0))break;if(!e){h=15;break a}else d=e}c[d+68>>2]=c[i+68>>2];h=15}}}else h=15;while(0);do if((h|0)==15){Te(c[i>>2]|0,c[b>>2]|0);e=c[i+52>>2]|0;d=i+48|0;if(e){f=c[d>>2]|0;if(f|0){ab[e&127](f);h=18}}else h=18;do if((h|0)==18?(g=c[d>>2]|0,g|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{f=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);f=i+80|0;d=c[f>>2]|0;if(d|0){e=d+-4|0;c[f>>2]=e;d=e;do if((c[14816]|0)>>>0<=d>>>0)if((c[14817]|0)>>>0>d>>>0){c[14979]=(c[14979]|0)+-1;c[e>>2]=c[14819];c[14819]=e;g=(c[14820]|0)+1|0;c[14820]=g;c[14821]=(g|0)<(c[14815]|0)&1;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28;break}else{d=Wa[c[29352>>2]&127](e)|0;h=28}while(0);do if((h|0)==28){c[14980]=(c[14980]|0)-d;if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);c[f>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);e=c[b+28>>2]|0;d=b+24|0;if(e|0)c[e+24>>2]=c[d>>2];d=c[d>>2]|0;if(d|0)c[d+28>>2]=e;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{i=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}function vg(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;m=d+8|0;e=c[m>>2]|0;if(!e)return;i=c[d+20>>2]|0;c[(c[e+4>>2]|0)+4>>2]=c[e>>2];f=i+8|0;e=c[f>>2]|0;a:do if((e|0)==(d|0))c[f>>2]=c[d+24>>2];else{while(1){f=c[e+24>>2]|0;if((f|0)==(d|0))break;if(!f)break a;else e=f}c[e+24>>2]=c[d+24>>2]}while(0);h=d+68|0;e=a[h>>0]|0;if(e<<24>>24>-1){if(e<<24>>24){g=0;do{f=c[(c[d+120+(g<<2)>>2]|0)+72>>2]|0;if(!(b[f+28>>1]&32)){Df(f);e=a[h>>0]|0}else{n=c[f+20>>2]|0;o=n+120|0;c[o>>2]=(c[o>>2]|0)+-1;n=n+136|0;c[f+16>>2]=c[n>>2];c[n>>2]=f}g=g+1|0}while((g|0)<(e<<24>>24|0))}e=c[(c[d+116>>2]|0)+72>>2]|0;if(!(b[e+28>>1]&32))Df(e);else{o=c[e+20>>2]|0;n=o+120|0;c[n>>2]=(c[n>>2]|0)+-1;o=o+136|0;c[e+16>>2]=c[o>>2];c[o>>2]=e}a[h>>0]=-1}if(((a[i+20>>0]|0)==0?(j=i+12|0,k=c[j>>2]|0,k|0):0)?(c[j>>2]=0,o=c[k+72>>2]|0,l=c[o+20>>2]|0,Df(o),(c[(c[l+212>>2]|0)+12>>2]|0)==0):0){switch(a[l+16>>0]|0){case 0:case 6:break;case 1:{if(!(a[l+4>>0]|0))uf(l,0,0)|0;break}default:tf(l)|0}vf(l)}e=c[d+12>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);e=c[d+16>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{o=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);c[m>>2]=0;return}function wg(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;k=e+20|0;l=c[k>>2]|0;do if(l|0){if((c[l>>2]|0)>0){m=l+12|0;j=0;do{h=c[m>>2]|0;i=h+(j*56|0)|0;g=c[h+(j*56|0)+28>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+36>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);g=c[h+(j*56|0)+48>>2]|0;do if(g|0){xg(c[g+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+56|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));j=j+1|0}while((j|0)<(c[l>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[k>>2]=0;k=e+59|0;if(a[k>>0]|0){l=(b|0)==0;m=b+480|0;n=b+304|0;o=b+308|0;p=b+300|0;j=0;do{i=e+64+(j*72|0)|0;g=c[e+64+(j*72|0)+12>>2]|0;do if(g|0){if(!l){if(c[m>>2]|0){Xd(b,g);break}h=g;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[g>>2]=c[p>>2];c[p>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{h=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+16>>2]|0;if(g|0)do{h=g;g=c[g+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](h);else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h)}}while((g|0)!=0);g=c[e+64+(j*72|0)+40>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=c[e+64+(j*72|0)+56>>2]|0;do if(g|0){h=c[g>>2]|0;if(h|0){Wa[c[h+4>>2]&127](g)|0;c[g>>2]=0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);g=i+72|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(g|0));c[e+64+(j*72|0)+8>>2]=e;j=j+1|0}while(j>>>0<(d[k>>0]|0)>>>0)}h=e+36|0;if((c[e+40>>2]|0)==0?(f=c[h>>2]|0,f|0):0)do{g=f;f=c[f+4>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[h>>2]=0;c[e+44>>2]=0;a[e+56>>0]=0;c[e+48>>2]=0;c[e+8>>2]=0;f=e+32|0;g=c[f>>2]|0;if(!g){c[f>>2]=0;return}if(b|0){if(c[b+480>>2]|0){Xd(b,g);c[f>>2]=0;return}q=g;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[g>>2]=c[q>>2];c[q>>2]=g;c[f>>2]=0;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);c[f>>2]=0;return}else{q=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);c[f>>2]=0;return}}function xg(a){a=a|0;var b=0,d=0;if(!a)return;if((c[a>>2]|0)>0){d=a+12|0;b=0;do{yg((c[d>>2]|0)+(b*56|0)|0);b=b+1|0}while((b|0)<(c[a>>2]|0))}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function yg(a){a=a|0;var b=0,d=0;b=c[a+28>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);b=c[a+36>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{d=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);zg(c[a+48>>2]|0);b=a;a=b+56|0;do{c[b>>2]=0;b=b+4|0}while((b|0)<(a|0));return}function zg(a){a=a|0;var b=0;if(!a)return;xg(c[a+4>>2]|0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);return}else{b=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-b;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);return}}function Ag(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=Ra;Ra=Ra+112|0;h=n+16|0;l=n+88|0;k=n;f=c[b>>2]|0;m=b+124|0;g=c[m>>2]|0;do if(g|0){if(f|0){if(c[f+480>>2]|0){Xd(f,g);break}j=g;if((c[f+304>>2]|0)>>>0<=j>>>0?(c[f+308>>2]|0)>>>0>j>>>0:0){j=f+300|0;c[g>>2]=c[j>>2];c[j>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{j=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);c[k>>2]=e;j=c[b>>2]|0;g=c[j+108>>2]|0;i=l+4|0;c[i>>2]=h;c[l>>2]=j;c[l+8>>2]=70;f=l+12|0;c[f>>2]=g;g=l+16|0;c[g>>2]=0;h=l+20|0;a[h>>0]=0;e=l+21|0;a[e>>0]=1;tb(l,d,k);b=c[i>>2]|0;if(((b|0)!=0?(a[b+(c[g>>2]|0)>>0]=0,(c[f>>2]|0)!=0):0)?(a[e>>0]&4)==0:0)f=$d(l)|0;else f=c[i>>2]|0;if((a[h>>0]|0)!=7){c[m>>2]=f;Ra=n;return}b=j+81|0;if(a[b>>0]|0){c[m>>2]=f;Ra=n;return}if(a[j+82>>0]|0){c[m>>2]=f;Ra=n;return}a[b>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;b=j+272|0;c[b>>2]=(c[b>>2]|0)+1;b=c[j+236>>2]|0;if(!b){c[m>>2]=f;Ra=n;return}c[b+12>>2]=7;c[m>>2]=f;Ra=n;return}function Bg(e,f){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;t=c[e>>2]|0;q=e+48|0;r=c[q>>2]|0;s=r+-1|0;p=t+20|0;h=c[p>>2]|0;if((h|0)>0){n=t+16|0;o=(r|0)<1;if((f|0)==2){l=0;g=0;do{k=c[(c[n>>2]|0)+(l<<4)+4>>2]|0;if(k){i=k+8|0;do if((a[i>>0]|0)==2){j=c[k+4>>2]|0;c[j+4>>2]=c[k>>2];h=c[j+8>>2]|0;if(h|0?(m=$f(h,0,0)|0,m|0):0){h=m;break}h=wf(c[j>>2]|0,2,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0];if(!h)if((a[i>>0]|0)==2){i=c[k+4>>2]|0;c[i+4>>2]=c[k>>2];h=wf(c[i>>2]|0,1,s)|0;if(!h){if(o?b[i+22>>1]&16:0)c[i+44>>2]=0;h=Rf(i)|0;u=c[(c[i+12>>2]|0)+56>>2]|0;c[i+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0}}else h=0;while(0);g=(g|0)==0?h:g;h=c[p>>2]|0}l=l+1|0}while((l|0)<(h|0))}else{k=0;g=0;do{i=c[(c[n>>2]|0)+(k<<4)+4>>2]|0;if(i){if((a[i+8>>0]|0)==2){j=c[i+4>>2]|0;c[j+4>>2]=c[i>>2];h=wf(c[j>>2]|0,1,s)|0;if(!h){if(o?b[j+22>>1]&16:0)c[j+44>>2]=0;h=Rf(j)|0;u=c[(c[j+12>>2]|0)+56>>2]|0;c[j+44>>2]=d[u+29>>0]<<16|d[u+28>>0]<<24|d[u+30>>0]<<8|d[u+31>>0]}}else h=0;g=(g|0)==0?h:g;h=c[p>>2]|0}k=k+1|0}while((k|0)<(h|0))}u=t+456|0;c[u>>2]=(c[u>>2]|0)+-1;c[q>>2]=0;if(!g)h=33;else h=76}else{h=t+456|0;c[h>>2]=(c[h>>2]|0)+-1;c[q>>2]=0;h=33}a:do if((h|0)==33){o=t+356|0;b:do if((f|0)==2){if(!(c[o>>2]|0)){g=0;break a}n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0))break b;l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+88>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break a}}}while(0);if(!(c[o>>2]|0)){g=0;h=76}else{n=t+332|0;m=0;while(1){if((m|0)>=(c[n>>2]|0)){g=0;h=76;break a}l=c[(c[o>>2]|0)+(m<<2)>>2]|0;g=c[c[l+4>>2]>>2]|0;j=l+8|0;i=c[j>>2]|0;do if((i|0)!=0?(c[g>>2]|0)>1:0){k=l+12|0;h=(c[k>>2]|0)+1|0;c[k>>2]=h;g=c[g+84>>2]|0;if((g|0)!=0?(c[l+20>>2]|0)>=(r|0):0){g=Xa[g&255](i,s)|0;h=c[k>>2]|0}else g=0;i=c[l>>2]|0;u=h+-1|0;c[k>>2]=u;if(!u){h=c[j>>2]|0;if(h|0)Wa[c[(c[h>>2]|0)+16>>2]&127](h)|0;if(i|0){if(c[i+480>>2]|0){Xd(i,l);break}u=l;if((c[i+304>>2]|0)>>>0<=u>>>0?(c[i+308>>2]|0)>>>0>u>>>0:0){u=i+300|0;c[l>>2]=c[u>>2];c[u>>2]=l;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{u=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}}else g=0;while(0);if(!g)m=m+1|0;else{h=76;break}}}}while(0);if((h|0)==76)if((f|0)!=2){u=g;return u|0}s=e+72|0;u=c[s+4>>2]|0;f=t+464|0;c[f>>2]=c[s>>2];c[f+4>>2]=u;f=e+80|0;e=c[f+4>>2]|0;u=t+472|0;c[u>>2]=c[f>>2];c[u+4>>2]=e;u=g;return u|0}function Cg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0;if(b[a+8>>1]&9216)Dg(a);e=a+24|0;if(!(c[e>>2]|0)){g=a+16|0;c[g>>2]=0;return}f=c[a+32>>2]|0;d=c[a+20>>2]|0;do if(f){if(c[f+480>>2]|0){Xd(f,d);break}h=d;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[d>>2]=c[h>>2];c[h>>2]=d}else g=10}else g=10;while(0);do if((g|0)==10?d|0:0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{h=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;h=a+16|0;c[h>>2]=0;return}function Dg(a){a=a|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0,k=0;k=Ra;Ra=Ra+80|0;h=k+40|0;i=k;j=a+8|0;d=b[j>>1]|0;if(d&8192){e=c[a>>2]|0;f=h+12|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;f=i;g=f+40|0;do{c[f>>2]=0;f=f+4|0}while((f|0)<(g|0));b[i+8>>1]=1;d=a+32|0;c[i+32>>2]=c[d>>2];c[h>>2]=i;c[h+8>>2]=a;c[h+4>>2]=e;ab[c[e+20>>2]&127](h);do if((c[a+24>>2]|0)>0){d=c[d>>2]|0;e=c[a+20>>2]|0;if(d|0){if(c[d+480>>2]|0){Xd(d,e);break}h=e;if((c[d+304>>2]|0)>>>0<=h>>>0?(c[d+308>>2]|0)>>>0>h>>>0:0){h=d+300|0;c[e>>2]=c[h>>2];c[h>>2]=e;break}}if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{h=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=a;d=i;g=f+40|0;do{c[f>>2]=c[d>>2];f=f+4|0;d=d+4|0}while((f|0)<(g|0));d=b[j>>1]|0}if(!(d&1024)){b[j>>1]=1;Ra=k;return}ab[c[a+36>>2]&127](c[a+16>>2]|0);b[j>>1]=1;Ra=k;return}function Eg(d,f,g){d=d|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=d+24|0;h=(c[p>>2]|0)>0;if((g|0)!=0&h?(m=d+16|0,j=c[m>>2]|0,k=d+20|0,(j|0)==(c[k>>2]|0)):0){l=c[d+32>>2]|0;g=((f|0)<0)<<31>>31;i=(j|0)==0;a:do if(!i){h=j;if(((c[l+304>>2]|0)>>>0<=h>>>0?(c[l+308>>2]|0)>>>0>h>>>0:0)?!(0>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0>>0:0)):0){h=j;break}h=Zd(l,j,f,g)|0;if(!(i|(h|0)!=0)){if(c[l+480>>2]|0){Xd(l,j);h=0;break}f=j;if((c[l+304>>2]|0)>>>0<=f>>>0?(c[l+308>>2]|0)>>>0>f>>>0:0){h=l+300|0;c[j>>2]=c[h>>2];c[h>>2]=j;h=0;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);h=0;break}else{h=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);h=0;break}}}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){h=0;break}}else{do if(!(0>>0|(0==(g|0)?(e[l+276>>1]|0)>>>0>>0:0))){i=l+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}i=l+296|0;h=c[i>>2]|0;if(!h){h=l+292|0;break}else{c[i>>2]=c[h>>2];f=l+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,f,g)|0}while(0);c[k>>2]=h;c[m>>2]=h;j=0}else{j=d+32|0;do if(h){h=c[j>>2]|0;i=c[d+20>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,i);break}m=i;if((c[h+304>>2]|0)>>>0<=m>>>0?(c[h+308>>2]|0)>>>0>m>>>0:0){m=h+300|0;c[i>>2]=c[m>>2];c[m>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{m=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-m;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);j=c[j>>2]|0;k=((f|0)<0)<<31>>31;b:do if(!j){m=Sv(f|0,k|0,-1,-1)|0;l=L()|0;if(!(l>>>0>0|(l|0)==0&m>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](f)|0;break}j=Wa[c[29356>>2]&127](f)|0;if((c[14985]|0)>>>0>>0)c[14985]=f;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){f=c[14978]|0;m=Tv(h|0,i|0,j|0,((j|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=f>>>0)&1}i=Wa[c[29340>>2]&127](j)|0;if(i){h=Wa[c[29352>>2]&127](i)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;h=i}else h=i}else h=0}else h=0}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){h=0;break}}else{do if(!(0>>0|(0==(k|0)?(e[j+276>>1]|0)>>>0>>0:0))){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];f=j+284|0;c[f>>2]=(c[f>>2]|0)+1;break b}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,f,k)|0}while(0);k=d+20|0;c[k>>2]=h;j=g}if(!h){h=d+8|0;if(!(b[h>>1]&9216))b[h>>1]=1;else Dg(d);c[d+16>>2]=0;c[p>>2]=0;d=7;return d|0}i=c[d+32>>2]|0;if(((i|0)!=0?(n=h,(c[i+304>>2]|0)>>>0<=n>>>0):0)?(c[i+308>>2]|0)>>>0>n>>>0:0)h=e[i+276>>1]|0;else h=Wa[c[29352>>2]&127](h)|0;c[p>>2]=h;if(j|0?(o=c[d+16>>2]|0,o|0):0)ew(c[k>>2]|0,o|0,c[d+12>>2]|0)|0;j=d+8|0;h=b[j>>1]|0;if(!(h&1024))i=d+16|0;else{i=d+16|0;ab[c[d+36>>2]&127](c[i>>2]|0);h=b[j>>1]|0}c[i>>2]=c[k>>2];b[j>>1]=h&-7169;d=0;return d|0}function Fg(a,b){a=a|0;b=b|0;if(!(Gg(a,b)|0)){b=0;return b|0}b=c[a+12>>2]|0;return b|0}function Gg(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0;l=e+8|0;g=b[l>>1]|0;h=g&65535;if(h&18){do if(h&16384){i=e+12|0;h=(c[e>>2]|0)+(c[i>>2]|0)|0;if((h|0)<1)if(!(g&16))break;else g=1;else g=h;if(!(Eg(e,g,1)|0)){gw((c[e+16>>2]|0)+(c[i>>2]|0)|0,0,c[e>>2]|0)|0;c[i>>2]=(c[i>>2]|0)+(c[e>>2]|0);g=b[l>>1]&-16897;b[l>>1]=g;break}else{f=0;return f|0}}while(0);b[l>>1]=g|2;g=e+10|0;h=f&255;i=h&247;if((i|0)!=(d[g>>0]|0))Ig(e,i&255)|0;if(h&8|0?(k=e+16|0,c[k>>2]&1|0):0){h=b[l>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=e+12|0;i=(c[e>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(e,h,1)|0)){gw((c[k>>2]|0)+(c[j>>2]|0)|0,0,c[e>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[e>>2]|0);h=b[l>>1]&-16897;b[l>>1]=h;break}else{f=0;return f|0}}while(0);if(c[e+24>>2]|0?(c[k>>2]|0)==(c[e+20>>2]|0):0)break;if(!(Jg(e)|0)){h=b[l>>1]|0;break}else{f=0;return f|0}}while(0);b[l>>1]=h&-4097}if((b[l>>1]&514)==2)Jg(e)|0}else{Hg(e,f,0)|0;g=e+10|0}if((a[g>>0]|0)!=(f&-9)<<24>>24){f=0;return f|0}f=c[e+16>>2]|0;return f|0}function Hg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;n=Ra;Ra=Ra+16|0;m=n+8|0;l=n;j=d+8|0;k=b[j>>1]|0;do if((c[d+24>>2]|0)<32){if(!(Eg(d,32,0)|0)){i=d+16|0;h=i;i=c[i>>2]|0;break}a[d+10>>0]=0;m=7;Ra=n;return m|0}else{i=c[d+20>>2]|0;h=d+16|0;c[h>>2]=i;b[j>>1]=k&13}while(0);if(!(k&4)){g[m>>3]=+g[d>>3];Cb(32,i,32529,m)|0}else{o=d;k=c[o+4>>2]|0;m=l;c[m>>2]=c[o>>2];c[m+4>>2]=k;Cb(32,i,32524,l)|0}o=(Eu(c[h>>2]|0)|0)&1073741823;c[d+12>>2]=o;a[d+10>>0]=1;o=b[j>>1]|514;b[j>>1]=f<<24>>24==0?o:o&-13;if(e<<24>>24==1){o=0;Ra=n;return o|0}Ig(d,e)|0;o=0;Ra=n;return o|0}function Ig(f,g){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=f+10|0;h=g<<24>>24==1;if(!(h|(a[w>>0]|0)==1)){k=f+8|0;h=b[k>>1]|0;i=h&65535;do if(i&18){do if(i&16384){j=f+12|0;i=(c[f>>2]|0)+(c[j>>2]|0)|0;if((i|0)<1)if(!(h&16))break;else h=1;else h=i;if(!(Eg(f,h,1)|0)){gw((c[f+16>>2]|0)+(c[j>>2]|0)|0,0,c[f>>2]|0)|0;c[j>>2]=(c[j>>2]|0)+(c[f>>2]|0);h=b[k>>1]&-16897;b[k>>1]=h;break}else{w=7;return w|0}}while(0);if(c[f+24>>2]|0?(c[f+16>>2]|0)==(c[f+20>>2]|0):0)break;if(!(Jg(f)|0)){h=b[k>>1]|0;break}else{w=7;return w|0}}while(0);b[k>>1]=h&-4097;h=c[f+16>>2]|0;f=c[f+12>>2]&-2;i=h+f|0;if((f|0)>0)do{v=a[h>>0]|0;f=h+1|0;a[h>>0]=a[f>>0]|0;h=h+2|0;a[f>>0]=v}while(h>>>0>>0);a[w>>0]=g;w=0;return w|0}s=f+12|0;i=c[s>>2]|0;if(h){i=i&-2;c[s>>2]=i;n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;m=L()|0;n=n|1}else{n=cw(i|0,((i|0)<0)<<31>>31|0,1)|0;n=Sv(n|0,L()|0,2,0)|0;m=L()|0}t=f+16|0;k=c[t>>2]|0;r=k+i|0;u=f+32|0;l=c[u>>2]|0;a:do if(!l){q=Sv(n|0,m|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){w=7;return w|0}if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](n)|0;o=43;break}l=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;j=59064;h=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&h>>>0>0){q=c[14978]|0;p=Tv(h|0,j|0,l|0,((l|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&p>>>0<=q>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){w=7;return w|0}h=Wa[c[29352>>2]&127](j)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0){c[14987]=h;q=j}else q=j}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){w=7;return w|0}}else{do if(!(m>>>0>0|((m|0)==0?n>>>0>(e[l+276>>1]|0)>>>0:0))){j=l+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}j=l+296|0;h=c[j>>2]|0;if(!h){h=l+292|0;break}else{c[j>>2]=c[h>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=43;break a}}else h=l+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(l,n,m)|0;o=43}while(0);if((o|0)==43)if(!h){w=7;return w|0}else q=h;switch(a[w>>0]|0){case 1:{h=(i|0)>0;if(g<<24>>24==2)if(h){h=q;i=k;do{k=i+1|0;p=a[i>>0]|0;i=p&255;if((p&255)>191){i=d[2736+(i+-192)>>0]|0;b:do if((k|0)==(r|0)){j=i;i=r}else{j=i;i=k;while(1){k=a[i>>0]|0;if((k&-64)<<24>>24!=-128)break b;i=i+1|0;j=j<<6|k&63;if((i|0)==(r|0)){i=r;break}}}while(0);if(!((j&-2|0)==65534|(j>>>0<128|(j&-2048|0)==55296)))if(j>>>0<65536)o=55;else{l=j+-65536|0;a[h>>0]=l>>>10&192|j>>>10&63;a[h+1>>0]=l>>>18&3|216;a[h+2>>0]=j;l=h+3|0;k=4;j=j>>>8&3|220}else{j=65533;o=55}}else{j=i;i=k;o=55}if((o|0)==55){o=0;a[h>>0]=j;l=h+1|0;k=2;j=j>>>8}h=h+k|0;a[l>>0]=j}while(i>>>0>>0)}else h=q;else if(h){n=q;h=k;while(1){i=h+1|0;p=a[h>>0]|0;h=p&255;if((p&255)>191){h=d[2736+(h+-192)>>0]|0;c:do if((i|0)==(r|0))i=r;else while(1){j=a[i>>0]|0;if((j&-64)<<24>>24!=-128)break c;i=i+1|0;h=h<<6|j&63;if((i|0)==(r|0)){i=r;break}}while(0);if(!((h&-2|0)==65534|(h>>>0<128|(h&-2048|0)==55296)))if(h>>>0<65536)o=67;else{m=h+-65536|0;a[n>>0]=m>>>18&3|216;a[n+1>>0]=m>>>10&192|h>>>10&63;m=h;j=4;k=n+2|0;l=3;h=h>>>8&3|220}else{h=65533;o=67}}else o=67;if((o|0)==67){o=0;m=h;j=2;k=n;l=1;h=h>>>8}a[k>>0]=h;h=n+j|0;a[n+l>>0]=m;if(i>>>0>>0){n=h;h=i}else break}}else h=q;c[s>>2]=h-q;a[h>>0]=0;h=h+1|0;break}case 2:{if((i|0)>0){h=q;do{i=d[k>>0]|0;l=k+2|0;p=d[k+1>>0]|0;j=p<<8|i;if(l>>>0>>0&(p&248|0)==216){j=(j<<10&983040)+65536|i<<10&64512|d[l>>0]|d[k+3>>0]<<8&768;k=k+4|0}else k=l;if(j>>>0<128){l=h;i=1}else{if(j>>>0<2048){o=h;i=2;l=1;m=192;n=31}else{if(j>>>0<65536){m=h;i=3;l=2;n=1;o=224;p=15}else{a[h>>0]=j>>>18&7|240;m=h+1|0;i=4;l=3;n=2;o=128;p=63}a[m>>0]=j>>>12&p|o;o=h+n|0;m=128;n=63}a[o>>0]=j>>>6&n|m;l=h+l|0;j=j&63|128}h=h+i|0;a[l>>0]=j}while(k>>>0>>0);o=93}else{h=q;o=93}break}default:if((i|0)>0){h=q;while(1){p=d[k>>0]|0;i=k+2|0;l=d[k+1>>0]|0;j=p<<8|l;if(i>>>0>>0&(p&248|0)==216){p=k+4|0;j=(j<<10&983040)+65536|l<<10&64512|d[k+3>>0]|d[i>>0]<<8&768}else p=i;if(j>>>0<128){k=h;i=1}else{if(j>>>0<2048){n=h;i=2;k=1;l=192;m=31}else{if(j>>>0<65536){l=h;i=3;k=2;m=1;n=224;o=15}else{a[h>>0]=j>>>18&7|240;l=h+1|0;i=4;k=3;m=2;n=128;o=63}a[l>>0]=j>>>12&o|n;n=h+m|0;l=128;m=63}a[n>>0]=j>>>6&m|l;k=h+k|0;j=j&63|128}h=h+i|0;a[k>>0]=j;if(p>>>0>>0)k=p;else{o=93;break}}}else{h=q;o=93}}if((o|0)==93)c[s>>2]=h-q;a[h>>0]=0;h=f+8|0;i=b[h>>1]|0;if(!((i&9216)==0?!(c[f+24>>2]|0):0))Cg(f);b[h>>1]=i&-32739|514;a[w>>0]=g;c[t>>2]=q;c[f+20>>2]=q;h=c[u>>2]|0;if(((h|0)!=0?(v=q,(c[h+304>>2]|0)>>>0<=v>>>0):0)?(c[h+308>>2]|0)>>>0>v>>>0:0)h=e[h+276>>1]|0;else h=Wa[c[29352>>2]&127](q)|0;c[f+24>>2]=h;w=0;return w|0}function Jg(d){d=d|0;var e=0,f=0;e=d+12|0;if(Eg(d,(c[e>>2]|0)+2|0,1)|0){e=7;return e|0}f=d+16|0;a[(c[f>>2]|0)+(c[e>>2]|0)>>0]=0;a[(c[f>>2]|0)+((c[e>>2]|0)+1)>>0]=0;e=d+8|0;b[e>>1]=b[e>>1]|512;e=0;return e|0}function Kg(a,b,c){a=a|0;b=b|0;c=c|0;var d=0,e=0;e=Ra;Ra=Ra+16|0;d=e;g[d>>3]=0.0;Lg(c,d,b,a)|0;Ra=e;return +(+g[d>>3])}function Lg(b,c,e,f){b=b|0;c=c|0;e=e|0;f=f|0;var h=0.0,i=0,j=0,k=0.0,l=0,m=0,n=0,o=0,p=0,q=0,s=0,t=0,u=0;g[c>>3]=0.0;j=f&255;if(f<<24>>24==1){j=b;i=1;q=1;f=e}else{f=3-j|0;a:do if((f|0)<(e|0))while(1){if(a[b+f>>0]|0){i=0;break a}f=f+2|0;if((f|0)>=(e|0)){i=1;break}}else i=1;while(0);j=b+(j&1)|0;q=2;f=f^1}u=b+f|0;if(j>>>0>=u>>>0){c=0;return c|0}f=j;while(1){j=a[f>>0]|0;if(!(a[880+(j&255)>>0]&1))break;f=f+q|0;if(f>>>0>=u>>>0){f=0;t=69;break}}if((t|0)==69)return f|0;switch(j<<24>>24){case 45:{s=-1;f=f+q|0;break}case 43:{s=1;f=f+q|0;break}default:s=1}b:do if(f>>>0>>0){j=0;m=0;b=0;do{e=a[f>>0]|0;if(!(((m|0)<214748364|(m|0)==214748364&b>>>0<3435973835)&((e&255)+-48|0)>>>0<10))break b;m=Yv(b|0,m|0,10,0)|0;b=(e<<24>>24)+-48|0;b=Sv(m|0,L()|0,b|0,((b|0)<0)<<31>>31|0)|0;m=L()|0;f=f+q|0;j=j+1|0}while(f>>>0>>0)}else{j=0;b=0;m=0}while(0);c:do if(f>>>0>>0){l=0;while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10)break;f=f+q|0;j=j+1|0;e=l+1|0;if(f>>>0>>0)l=e;else{q=1;l=0;p=1;break c}}d:do if(e<<24>>24==46){f=f+q|0;if(f>>>0>>0)while(1){e=a[f>>0]|0;if(((e&255)+-48|0)>>>0>=10){e=l;break d}p=(m|0)<214748364|(m|0)==214748364&b>>>0<3435973835;n=Yv(b|0,m|0,10,0)|0;o=(e<<24>>24)+-48|0;o=Sv(n|0,L()|0,o|0,((o|0)<0)<<31>>31|0)|0;e=L()|0;b=p?o:b;m=p?e:m;e=l+(p<<31>>31)|0;j=j+1|0;f=f+q|0;if(f>>>0>>0)l=e;else break}else e=l}else e=l;while(0);if(f>>>0>>0){e:do switch(a[f>>0]|0){case 69:case 101:{f=f+q|0;if(f>>>0>=u>>>0){q=0;l=0;p=1;break c}switch(a[f>>0]|0){case 45:{p=-1;f=f+q|0;break}case 43:{p=1;f=f+q|0;break}default:p=1}if(f>>>0>>0){n=0;o=0;while(1){l=a[f>>0]|0;if(((l&255)+-48|0)>>>0>=10){l=o;break e}l=(o|0)<1e4?(o*10|0)+-48+(l<<24>>24)|0:1e4;f=f+q|0;if(f>>>0>>0){n=1;o=l}else{n=1;break}}}else{n=0;l=0}break}default:{n=1;l=0;p=1}}while(0);if(f>>>0>>0)while(1){if(!(a[880+(d[f>>0]|0)>>0]&1)){q=n;break c}f=f+q|0;if(f>>>0>=u>>>0){q=n;break}}else q=n}else{q=1;l=0;p=1}}else{q=1;l=0;p=1;e=0}while(0);e=(G(l,p)|0)+e|0;p=(e|0)<0;l=e>>31|1;f:do if((b|0)==0&(m|0)==0)h=(s|0)<0?-0.0:0.0;else{e=p?0-e|0:e;g:do if((e|0)>0){h:do if((l|0)>0)while(1){if((m|0)>214748364|(m|0)==214748364&b>>>0>3435973835){l=e;break h}b=Yv(b|0,m|0,10,0)|0;m=L()|0;l=e+-1|0;if((e|0)>1)e=l;else{t=51;break g}}else while(1){n=Wv(b|0,m|0,10,0)|0;o=L()|0;l=Yv(n|0,o|0,10,0)|0;l=Tv(b|0,m|0,l|0,L()|0)|0;if(!((l|0)==0&(L()|0)==0)){l=e;break h}l=e+-1|0;if((e|0)>1){e=l;b=n;m=o}else{b=n;m=o;t=51;break g}}while(0);o=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;s=L()|0;e=o?e:b;b=o?s:m;if((l|0)>307){if((l|0)>=342){h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h*0.0;break f}else{h=h*r;break f}}l=l+-308|0;k=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){h=10.0;do{h=h*h;k=(l&1|0)==0?k:k*h;l=l>>1}while((l|0)!=0)}h=+(e>>>0)+4294967296.0*+(b|0);if(p){h=h/k/1.e+308;break f}else{h=k*h*1.e+308;break f}}}else{l=e;t=51}while(0);if((t|0)==51){s=(s|0)<0;e=Tv(0,0,b|0,m|0)|0;t=L()|0;e=s?e:b;b=s?t:m;if(!l){h=+(e>>>0)+4294967296.0*+(b|0);break}}h=(l&1|0)==0?1.0:10.0;l=l>>1;if(l){k=10.0;do{k=k*k;h=(l&1|0)==0?h:h*k;l=l>>1}while((l|0)!=0)}k=+(e>>>0)+4294967296.0*+(b|0);h=p?k/h:h*k}while(0);g[c>>3]=h;c=(q|0)!=0&((j|0)>0&(f|0)==(u|0))?i:0;return c|0}function Mg(a){a=+a;var b=0,c=0;if(!(a<=-9223372036854775808.0))if(!(a>=9223372036854775808.0)){c=+t(a)>=1.0?(a>0.0?~~+H(+s(a/4294967296.0),4294967295.0)>>>0:~~+F((a-+(~~a>>>0))/4294967296.0)>>>0):0;b=~~a>>>0}else{c=2147483647;b=-1}else{c=-2147483648;b=0}K(c|0);return b|0}function Ng(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;e=Ra;Ra=Ra+16|0;f=e;g=f;c[g>>2]=0;c[g+4>>2]=0;Og(d,f,b,a)|0;b=f;d=c[b>>2]|0;K(c[b+4>>2]|0);Ra=e;return d|0}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,l=0,m=0,n=0,o=0,p=0;i=g&255;if(g<<24>>24==1){h=0;o=1;i=b;g=f}else{g=3-i|0;a:do if((g|0)<(f|0))while(1){if(a[b+g>>0]|0){h=1;break a}g=g+2|0;if((g|0)>=(f|0)){h=0;break}}else h=0;while(0);o=2;i=b+(i&1)|0;g=g^1}n=b+g|0;b:do if(i>>>0>>0){while(1){g=a[i>>0]|0;if(!(a[880+(g&255)>>0]&1))break;g=i+o|0;if(g>>>0>>0)i=g;else{m=0;break b}}switch(g<<24>>24){case 45:{m=1;g=i+o|0;break b}case 43:{m=0;g=i+o|0;break b}default:{m=0;g=i;break b}}}else{m=0;g=i}while(0);c:do if(g>>>0>>0){i=g;do{if((a[i>>0]|0)!=48)break c;i=i+o|0}while(i>>>0>>0)}else i=g;while(0);do if(i>>>0>>0){k=0;l=i;j=0;f=0;while(1){b=a[l>>0]|0;if((b+-48&255)>=10){b=k;k=1;break}f=Yv(j|0,f|0,10,0)|0;j=b<<24>>24;f=Sv(f|0,L()|0,-48,-1)|0;j=Sv(f|0,L()|0,j|0,((j|0)<0)<<31>>31|0)|0;f=L()|0;b=k+o|0;l=i+b|0;if(l>>>0>=n>>>0){k=0;break}else k=b}l=(m|0)!=0;if((f|0)>=0)if(l){p=26;break}else{l=0;break}else{j=l?0:-1;f=l?-2147483648:2147483647;break}}else if(!m){b=0;k=0;j=0;f=0;l=0}else{b=0;k=0;j=0;f=0;p=26}while(0);if((p|0)==26){j=Tv(0,0,j|0,f|0)|0;f=L()|0;l=1}m=e;c[m>>2]=j;c[m+4>>2]=f;if(!b){g=(g|0)==(i|0);if((h|0)!=0|g|k^1)h=h|g&1;else p=30}else if(!((h|0)!=0|k^1))p=30;d:do if((p|0)==30){g=b;while(1){if(!(a[880+(d[i+g>>0]|0)>>0]&1)){h=1;break d}g=g+o|0;if((i+g|0)>>>0>=n>>>0){h=0;break}}}while(0);g=o*19|0;if(b>>>0>>0){e=h;return e|0}if(b>>>0>g>>>0){c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;e=2;return e|0}g=0;do{f=i+(G(g,o)|0)|0;f=(a[f>>0]|0)-(a[32536+g>>0]|0)|0;g=g+1|0;b=(f|0)==0}while(g>>>0<18&b);if(b)g=(a[i+(o*18|0)>>0]|0)+-56|0;else g=f*10|0;if((g|0)<0){e=h;return e|0}else{c[e>>2]=l?0:-1;c[e+4>>2]=l?-2147483648:2147483647;return ((g|0)==0?(l?h:3):2)|0}return 0}function Pg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;if(!(b[f>>1]&9216))b[f>>1]=1;else Dg(a);c[a>>2]=d;c[a+4>>2]=e;b[f>>1]=4;return}function Qg(a){a=a|0;return} function Sg(d,e,f){d=d|0;e=e|0;f=f|0;var h=0,i=0.0,j=0,k=0;k=d+8|0;h=b[k>>1]|0;j=h&65535;if(j&1|0)return;switch(e<<24>>24){case 65:{if(j&16|0){b[k>>1]=j&15920;return}if(!((j&2|0)!=0|(j&12|0)==0)){Hg(d,f,1)|0;h=b[k>>1]|0}h=h&-13;b[k>>1]=h;h=h&65535;if(!(h&2))return;b[k>>1]=h&15904|16;return}case 67:{oh(d);return}case 68:{do if(!(j&4)){if(j&8|0){e=Mg(+g[d>>3])|0;f=L()|0;break}if(!(j&18)){e=0;f=0}else{e=Ng(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0)|0;f=L()|0;h=b[k>>1]|0}}else{f=d;e=c[f>>2]|0;f=c[f+4>>2]|0}while(0);c[d>>2]=e;c[d+4>>2]=f;b[k>>1]=h&15904|4;return}case 69:{do if(!(j&8)){if(j&4|0){j=d;i=+((c[j>>2]|0)>>>0)+4294967296.0*+(c[j+4>>2]|0);break}if(!(j&18))i=0.0;else{i=+Kg(a[d+10>>0]|0,c[d+12>>2]|0,c[d+16>>2]|0);h=b[k>>1]|0}}else i=+g[d>>3];while(0);g[d>>3]=i;b[k>>1]=h&15904|8;return}default:{e=j>>>3&2|j;h=e&65535;b[k>>1]=h;if(!((j&12|0)==0|(e&2|0)!=0)){Hg(d,f,1)|0;h=b[k>>1]|0}b[k>>1]=h&-16413;return}}}function Tg(a,d,e){a=a|0;d=d|0;e=e|0;var f=0.0,h=0.0,i=0,j=0,k=0,l=0,m=0;j=b[a+8>>1]|0;l=j&65535;k=b[d+8>>1]|0;m=k&65535;i=(k|j)&65535;if(i&1|0){d=(m&1)-(l&1)|0;return d|0}if(!(i&12)){if(i&2|0){if(!(l&2)){d=1;return d|0}if(!(m&2)){d=-1;return d|0}if(e|0){d=ph(a,d,e,0)|0;return d|0}}d=qh(a,d)|0;return d|0}i=k&j&65535;if(i&4|0){l=a;a=c[l>>2]|0;l=c[l+4>>2]|0;m=d;d=c[m>>2]|0;m=c[m+4>>2]|0;return ((l|0)<(m|0)|(l|0)==(m|0)&a>>>0>>0?-1:((l|0)>(m|0)|(l|0)==(m|0)&a>>>0>d>>>0)&1)|0}if(i&8|0){h=+g[a>>3];f=+g[d>>3];if(hf&1;return d|0}if(l&4|0){if(!(m&8)){d=-1;return d|0}k=a;j=c[k>>2]|0;k=c[k+4>>2]|0;h=+g[d>>3];if(h<-9223372036854775808.0){d=1;return d|0}if(h>=9223372036854775808.0){d=-1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0>>0){d=-1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=-1;return d|0}d=h>2]|0;k=c[k+4>>2]|0;h=+g[a>>3];if(h<-9223372036854775808.0){d=-1;return d|0}if(h>=9223372036854775808.0){d=1;return d|0}i=~~h>>>0;e=+t(h)>=1.0?(h>0.0?~~+H(+s(h/4294967296.0),4294967295.0)>>>0:~~+F((h-+(~~h>>>0))/4294967296.0)>>>0):0;if((k|0)<(e|0)|(k|0)==(e|0)&j>>>0>>0){d=1;return d|0}if((k|0)>(e|0)|(k|0)==(e|0)&j>>>0>i>>>0){d=-1;return d|0}f=+(j>>>0)+4294967296.0*+(k|0);if(h>f){d=1;return d|0}d=(h>31;return d|0}function Ug(e,f,g){e=e|0;f=f|0;g=g|0;var h=0;do switch(f|0){case 10:{b[g+8>>1]=16385;c[g+12>>2]=0;c[g>>2]=0;g=0;return g|0}case 0:case 11:{b[g+8>>1]=1;g=0;return g|0}case 1:{e=a[e>>0]|0;f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=1;return g|0}case 2:{e=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=2;return g|0}case 3:{e=d[e+1>>0]<<8|a[e>>0]<<16|d[e+2>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=3;return g|0}case 4:{e=d[e+1>>0]<<16|a[e>>0]<<24|d[e+2>>0]<<8|d[e+3>>0];f=g;c[f>>2]=e;c[f+4>>2]=((e|0)<0)<<31>>31;b[g+8>>1]=4;g=4;return g|0}case 5:{h=a[e>>0]<<8|d[e+1>>0];f=g;c[f>>2]=d[e+3>>0]<<16|d[e+2>>0]<<24|d[e+4>>0]<<8|d[e+5>>0];c[f+4>>2]=h;b[g+8>>1]=4;g=6;return g|0}case 7:case 6:{vh(e,f,g);h=8;return h|0}case 9:case 8:{h=g;c[h>>2]=f+-8;c[h+4>>2]=0;b[g+8>>1]=4;h=0;return h|0}default:{c[g+16>>2]=e;h=(f+-12|0)>>>1;c[g+12>>2]=h;b[g+8>>1]=b[31116+((f&1)<<1)>>1]|0;return h|0}}while(0);return 0}function Vg(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=Ra;Ra=Ra+16|0;i=o;if((d|0)<1){c[i>>2]=32306;c[i+4>>2]=67596;c[i+8>>2]=31517;Db(11,32001,i);g=11;Ra=o;return g|0}n=c[b+4>>2]|0;c[n+4>>2]=c[b>>2];l=(e|0)!=0;if(l?(m=n+80|0,(c[m>>2]|0)==0):0){k=c[n+32>>2]|0;if((c[14813]|0)>=(k|0)?(h=c[14819]|0,(h|0)!=0):0){c[14819]=c[h>>2];e=c[14820]|0;c[14820]=e+-1;c[14821]=(e|0)<=(c[14815]|0)&1;if((c[14986]|0)>>>0>>0)c[14986]=k;i=(c[14979]|0)+1|0;c[14979]=i;if(i>>>0>(c[14983]|0)>>>0)c[14983]=i}else j=11;a:do if((j|0)==11){j=Sv(k|0,((k|0)<0)<<31>>31|0,-1,-1)|0;e=L()|0;do if(!(e>>>0>0|(e|0)==0&j>>>0>2147483390)){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](k)|0;if(!h)break}else{h=Wa[c[29356>>2]&127](k)|0;if((c[14985]|0)>>>0>>0)c[14985]=k;e=59064;i=c[e>>2]|0;e=c[e+4>>2]|0;if((e|0)>0|(e|0)==0&i>>>0>0){j=c[14978]|0;e=Tv(i|0,e|0,h|0,((h|0)<0)<<31>>31|0)|0;i=L()|0;c[14768]=((i|0)<0|(i|0)==0&e>>>0<=j>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h)break;i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}i=Wa[c[29352>>2]&127](h)|0;if((c[14986]|0)>>>0>>0)c[14986]=k;i=(c[14980]|0)+i|0;c[14980]=i;if(i>>>0<=(c[14984]|0)>>>0)break a;c[14984]=i;break a}while(0);c[m>>2]=0;g=7;Ra=o;return g|0}while(0);c[m>>2]=h;k=h;j=k;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;k=k+4|0;a[k>>0]=0;a[k+1>>0]=0;a[k+2>>0]=0;a[k+3>>0]=0;c[m>>2]=(c[m>>2]|0)+4}if((d|0)==1)d=(c[n+44>>2]|0)!=0&1;c[g+64>>2]=d;a[g+68>>0]=-1;c[g+112>>2]=f;c[g+8>>2]=b;c[g+20>>2]=n;j=g+1|0;a[j>>0]=l&1;a[g+2>>0]=l?0:2;i=n+8|0;h=c[i>>2]|0;e=h;if(h|0)do{if((c[h+64>>2]|0)==(d|0)){n=h+1|0;a[n>>0]=a[n>>0]|32;a[j>>0]=a[j>>0]|32}h=c[h+24>>2]|0}while((h|0)!=0);c[g+24>>2]=e;c[i>>2]=g;a[g>>0]=1;g=0;Ra=o;return g|0}function Wg(e,f,g){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,x=0,y=0,z=0,A=0;A=Ra;Ra=Ra+64|0;y=A+16|0;p=A;r=A+52|0;s=A+48|0;z=A+44|0;x=A+40|0;l=A+36|0;m=A+32|0;n=A+56|0;o=A+28|0;i=c[e>>2]|0;v=e+4|0;u=c[v>>2]|0;j=u+4|0;c[j>>2]=i;a:do if(!(a[u+17>>0]|0)){h=fg(u,s,z,1,0)|0;c[x>>2]=h;if(!h){q=c[s>>2]|0;break}else{z=h;Ra=A;return z|0}}else{k=u+8|0;h=c[k>>2]|0;if(h|0)do{w=h+1|0;a[w>>0]=a[w>>0]&-5;h=c[h+24>>2]|0}while((h|0)!=0);c[j>>2]=i;q=c[(c[u+12>>2]|0)+56>>2]|0;q=d[q+53>>0]<<16|d[q+52>>0]<<24|d[q+54>>0]<<8|d[q+55>>0];c[z>>2]=q;i=u+36|0;j=1073741824/((c[u+32>>2]|0)>>>0)|0;while(1){w=q+1|0;if(w>>>0<2)h=0;else{h=q+-1|0;h=h-((h>>>0)%(((((c[i>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;h=((h+1|0)==(j|0)?3:2)+h|0}if((q|0)==(j|0)|(w|0)==(h|0))q=w;else break}c[z>>2]=w;h=fg(u,m,l,w,1)|0;c[x>>2]=h;b:do if(!h){l=c[l>>2]|0;c:do if((l|0)==(w|0)){l=c[m>>2]|0;c[s>>2]=l}else{a[n>>0]=0;c[o>>2]=0;h=c[k>>2]|0;if(!h)h=0;else h=$f(h,0,0)|0;c[x>>2]=h;i=c[m>>2]|0;do if(i|0){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;m=t+120|0;c[m>>2]=(c[m>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);do if(!h){h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;j=c[h+8>>2]|0;i=j+4|0;if((c[i>>2]|0)!=(w|0)){c[j+56>>2]=c[h+4>>2];c[j+72>>2]=h;c[j+52>>2]=u;c[i>>2]=w;a[j+9>>0]=(q|0)==0?100:0}c[s>>2]=j;h=eg(u,w,n,o)|0;c[x>>2]=h;i=a[n>>0]|0;if((i+-1&255)>=2){if(!h){h=gg(u,j,i,c[o>>2]|0,l,0)|0;c[x>>2]=h;do if(j|0){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{t=c[i+20>>2]|0;p=t+120|0;c[p>>2]=(c[p>>2]|0)+-1;t=t+136|0;c[i+16>>2]=c[t>>2];c[t>>2]=i;break}}while(0);if(h|0)break;h=c[u>>2]|0;h=Za[c[h+204>>2]&127](h,w,r,0)|0;if(h|0){c[x>>2]=h;break}h=c[r>>2]|0;l=c[h+8>>2]|0;i=l+4|0;if((c[i>>2]|0)==(w|0))k=l+72|0;else{c[l+56>>2]=c[h+4>>2];k=l+72|0;c[k>>2]=h;c[l+52>>2]=u;c[i>>2]=w;a[l+9>>0]=(q|0)==0?100:0}c[s>>2]=l;c[x>>2]=0;i=c[k>>2]|0;j=c[i+20>>2]|0;do if(b[i+28>>1]&4){if((c[j+24>>2]|0)>>>0<(c[i+24>>2]|0)>>>0){t=44;break}if(!(c[j+96>>2]|0)){c[x>>2]=0;t=55;break}else{h=Ve(i)|0;t=49;break}}else t=44;while(0);do if((t|0)==44){h=c[j+40>>2]|0;if(h|0){c[x>>2]=h;break}if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=49;break}else{h=Xf(i)|0;t=49;break}}while(0);if((t|0)==49){c[x>>2]=h;if(!h)t=55}if((t|0)==55)break c;if(!l)break;i=c[k>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}else{c[p>>2]=32306;c[p+4>>2]=72254;c[p+8>>2]=31517;Db(11,32001,p);c[x>>2]=11;h=11}if(j){i=c[j+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);break b}while(0);ig(u,w,1,0,x);h=c[x>>2]|0;if(h|0){if(!l)break;i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}i=c[v>>2]|0;c[i+4>>2]=c[e>>2];i=c[i+12>>2]|0;k=c[i+56>>2]|0;i=c[i+72>>2]|0;j=c[i+20>>2]|0;if((b[i+28>>1]&4)!=0?(c[j+24>>2]|0)>>>0>=(c[i+24>>2]|0)>>>0:0)if(!(c[j+96>>2]|0))t=76;else{h=Ve(i)|0;t=70}else t=66;do if((t|0)==66){h=c[j+40>>2]|0;if(!h)if((c[j+148>>2]|0)>>>0>(c[j+152>>2]|0)>>>0){h=Wf(i)|0;t=70;break}else{h=Xf(i)|0;t=70;break}}while(0);if((t|0)==70)if(!h)t=76;if((t|0)==76){a[k+52>>0]=w>>>24;a[k+53>>0]=w>>>16;a[k+54>>0]=w>>>8;a[k+55>>0]=w;c[x>>2]=0;q=l;break a}c[x>>2]=h;if(l){i=c[l+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{z=c[i+20>>2]|0;f=z+120|0;c[f>>2]=(c[f>>2]|0)+-1;z=z+136|0;c[i+16>>2]=c[z>>2];c[z>>2]=i;break}}}while(0);z=h;Ra=A;return z|0}while(0);k=(g&1|0)==0?10:13;o=c[q+56>>2]|0;j=q+52|0;p=c[j>>2]|0;i=d[q+9>>0]|0;if(!(b[p+22>>1]&12)){h=o+i|0;n=p+36|0}else{n=p+36|0;h=o+i|0;gw(h|0,0,(c[n>>2]|0)-i|0)|0}a[h>>0]=k;l=i+8|0;m=l&65535;h=o+(i+1)|0;a[h>>0]=0;a[h+1>>0]=0;a[h+2>>0]=0;a[h+3>>0]=0;a[o+(i+7)>>0]=0;h=o+(i+5)|0;a[h>>0]=(c[n>>2]|0)>>>8;a[h+1>>0]=c[n>>2];c[q+20>>2]=(c[n>>2]|0)-l&65535;a[q+8>>0]=1;h=q+10|0;a[h>>0]=0;c[q+76>>2]=120;i=c[j>>2]|0;switch(k&7){case 5:{a[q+2>>0]=1;a[q+3>>0]=1;c[q+80>>2]=180;b[q+14>>1]=b[i+28>>1]|0;h=i+30|0;t=86;break}case 2:{a[q+2>>0]=0;a[q+3>>0]=0;c[q+80>>2]=179;b[q+14>>1]=b[i+24>>1]|0;h=i+26|0;t=86;break}default:{c[y>>2]=32306;c[y+4>>2]=65035;c[y+8>>2]=31517;Db(11,32001,y);h=a[h>>0]|0}}if((t|0)==86){b[q+16>>1]=b[h>>1]|0;a[q+11>>0]=a[i+21>>0]|0;h=0}b[q+18>>1]=m;c[q+60>>2]=o+(c[n>>2]|0);c[q+64>>2]=o+l;c[q+68>>2]=o+(h&255);a[q+12>>0]=0;b[q+26>>1]=(c[p+32>>2]|0)+65535;b[q+24>>1]=0;a[q>>0]=1;h=c[q+72>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{y=c[h+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[h+16>>2]=c[y>>2];c[y>>2]=h;break}while(0);c[f>>2]=c[z>>2];z=0;Ra=A;return z|0}function Xg(f,g,h,i,j,k){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,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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0;V=Ra;Ra=Ra+80|0;R=V+56|0;T=V+40|0;S=V+24|0;Q=V+8|0;P=V;a:do if(!g)if((a[f>>0]|0)==0?(l=d[f+1>>0]|0,(l&2|0)!=0):0){o=f+32|0;n=o;m=c[n>>2]|0;n=c[n+4>>2]|0;if((m|0)==(h|0)&(n|0)==(i|0)){c[k>>2]=0;U=0;Ra=V;return U|0}if((n|0)<(i|0)|(n|0)==(i|0)&m>>>0>>0){if(l&8|0){c[k>>2]=-1;U=0;Ra=V;return U|0}N=Sv(m|0,n|0,1,0)|0;if((N|0)==(h|0)&(L()|0)==(i|0)){c[k>>2]=0;l=Yg(f,0)|0;switch(l|0){case 101:{N=0;break a}case 0:break;default:{U=l;Ra=V;return U|0}}bg(f);N=o;if((c[N>>2]|0)==(h|0)?(c[N+4>>2]|0)==(i|0):0){U=0;Ra=V;return U|0}else N=0}else N=0}else N=0}else N=0;else{l=c[g>>2]|0;do if((e[l+8>>1]|0)<14){m=e[(c[g+4>>2]|0)+8>>1]|0;N=(a[c[l+16>>2]>>0]|0)==0;a[g+12>>0]=N?-1:1;a[g+13>>0]=N?1:-1;if(!(m&4)){if(m&25|0){l=88;break}if(!(c[l+20>>2]|0))l=90;else{l=88;break}}else l=89}else l=88;while(0);a[g+11>>0]=0;N=l}while(0);l=xh(f)|0;switch(l|0){case 0:{K=f+116|0;B=1-j|0;C=f+70|0;D=(N|0)==0;E=f+1|0;F=f+32|0;M=f+50|0;G=f+32|0;H=f+20|0;I=f+68|0;J=f+2|0;l=0;m=0;b:while(1){A=c[K>>2]|0;x=A+24|0;o=(e[x>>1]|0)+-1|0;j=o>>B;b[C>>1]=j;w=A+68|0;y=A+26|0;z=A+64|0;c:do if(D){t=A+3|0;u=A+60|0;n=A+8|0;s=j;r=o;o=0;d:while(1){j=(c[z>>2]|0)+(s<<1)|0;j=(c[w>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y>>1])|0;e:do if(a[t>>0]|0){p=j+1|0;if((a[j>>0]|0)<0){q=c[u>>2]|0;while(1){if(p>>>0>=q>>>0)break;j=p+1|0;if((a[p>>0]|0)<0)p=j;else{U=29;break e}}c[Q>>2]=32306;c[Q+4>>2]=68640;c[Q+8>>2]=31517;Db(11,32001,Q);q=1;j=s;l=11;p=r}else{j=p;U=29}}else U=29;while(0);f:do if((U|0)==29){U=0;Of(j,P)|0;p=P;j=c[p>>2]|0;p=c[p+4>>2]|0;do if((p|0)<(i|0)|(p|0)==(i|0)&j>>>0>>0){o=s+1|0;if((s|0)<(r|0))p=r;else{q=4;j=s;m=-1;p=r;break f}}else{if((p|0)>(i|0)|(p|0)==(i|0)&j>>>0>h>>>0){p=s+-1|0;if((o|0)<(s|0))break;else{q=4;j=s;m=1;break f}}b[C>>1]=s;if(!(a[n>>0]|0)){q=8;j=s;p=r;o=s;break f}a[E>>0]=a[E>>0]|2;q=F;c[q>>2]=j;c[q+4>>2]=p;b[M>>1]=0;c[k>>2]=0;q=1;j=s;l=0;p=r;break f}while(0);q=0;j=p+o>>1}while(0);switch(q&15){case 4:{U=74;break c}case 8:{U=76;break c}case 0:{s=j;r=p;break}default:break d}}if(q){U=85;break b}}else{s=A+11|0;t=A+14|0;u=A+10|0;v=A+80|0;n=o;o=0;while(1){p=(c[z>>2]|0)+(j<<1)|0;p=(c[w>>2]|0)+((d[p>>0]<<8|d[p+1>>0])&e[y>>1])|0;r=a[p>>0]|0;q=r&255;m=p+1|0;do if((r&255)>(d[s>>0]|0)){m=d[m>>0]|0;if((m&128|0)==0?(O=(q<<7&16256)+m|0,O>>>0<=(e[t>>1]|0)>>>0):0){m=Ya[N&127](O,p+2|0,g)|0;break}cb[c[v>>2]&255](A,p+(0-(d[u>>0]|0))|0,G);r=c[G>>2]|0;if((r|0)<2){U=45;break b}q=c[H>>2]|0;if(((r>>>0)/((c[q+36>>2]|0)>>>0)|0)>>>0>(c[q+44>>2]|0)>>>0){U=45;break b}m=r+18|0;q=Sv(m|0,((m|0)<0)<<31>>31|0,-1,-1)|0;p=L()|0;if(p>>>0>0|(p|0)==0&q>>>0>2147483390){l=7;break b}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](m)|0;if(!m){l=7;break b}else p=m}else{q=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;p=59064;m=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&m>>>0>0){W=c[14978]|0;p=Tv(m|0,p|0,q|0,((q|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&p>>>0<=W>>>0)&1}p=Wa[c[29340>>2]&127](q)|0;if(!p){l=7;break b}m=Wa[c[29352>>2]&127](p)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0>(c[14987]|0)>>>0)c[14987]=m}b[C>>1]=j;m=cg(f,0,r,p,0)|0;a[E>>0]=a[E>>0]&-5;if(m|0){U=59;break b}m=Fh(r,p,g,0)|0;if(!(c[7324]|0)){ab[c[29344>>2]&127](p);break}else{W=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-W;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);break}}else m=Ya[N&127](q,m,g)|0;while(0);if((m|0)<0)o=j+1|0;else{if(!m){U=69;break b}n=j+-1|0}if((o|0)>(n|0))break;j=n+o>>1}n=A+8|0;U=74}while(0);if((U|0)==74)if(!(a[n>>0]|0))U=76;else{U=75;break}if((U|0)==76){U=0;if((o|0)<(e[x>>1]|0)){n=(c[z>>2]|0)+(o<<1)|0;n=(d[n>>0]<<8|d[n+1>>0])&e[y>>1]}else n=(d[A+9>>0]|0)+8|0;r=(c[A+56>>2]|0)+n|0;j=a[r>>0]|0;p=a[r+1>>0]|0;q=a[r+2>>0]|0;r=a[r+3>>0]|0;n=o&65535;b[C>>1]=n;o=a[I>>0]|0;if(o<<24>>24>18){U=80;break}W=c[H>>2]|0;b[M>>1]=0;a[E>>0]=a[E>>0]&-7;A=o<<24>>24;b[f+72+(A<<1)>>1]=n;c[f+120+(A<<2)>>2]=c[K>>2];b[C>>1]=0;a[I>>0]=o+1<<24>>24;n=yh(W,(p&255)<<16|(j&255)<<24|(q&255)<<8|r&255,K,f,d[J>>0]|0)|0;if(n){l=n;break}}}do if((U|0)==45){c[S>>2]=32306;c[S+4>>2]=68714;c[S+8>>2]=31517;Db(11,32001,S);l=11}else if((U|0)==59)if(!(c[7324]|0)){ab[c[29344>>2]&127](p);l=m;break}else{l=Wa[c[29352>>2]&127](p)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](p);l=m;break}else if((U|0)==69){c[k>>2]=0;b[C>>1]=j;if(!(a[g+11>>0]|0))l=0;else{c[T>>2]=32306;c[T+4>>2]=68745;c[T+8>>2]=31517;Db(11,32001,T);l=11}}else if((U|0)==75){b[C>>1]=j;c[k>>2]=m;l=0}else if((U|0)==80){c[R>>2]=32306;c[R+4>>2]=68229;c[R+8>>2]=31517;Db(11,32001,R);l=11}else if((U|0)==85){Ra=V;return l|0}while(0);b[M>>1]=0;W=l;Ra=V;return W|0}case 16:{c[k>>2]=-1;W=0;Ra=V;return W|0}default:{W=l;Ra=V;return W|0}}return 0}function Yg(f,g){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;s=Ra;Ra=Ra+16|0;r=s;o=f+50|0;b[o>>1]=0;p=f+1|0;a[p>>0]=a[p>>0]&-7;if(a[f>>0]|0){r=Gh(f)|0;Ra=s;return r|0}q=f+116|0;h=c[q>>2]|0;n=f+70|0;g=b[n>>1]|0;m=g+1<<16>>16;b[n>>1]=m;if((m&65535)>=(e[h+24>>1]|0)){b[n>>1]=g;r=Gh(f)|0;Ra=s;return r|0}if(a[h+8>>0]|0){r=0;Ra=s;return r|0}k=f+68|0;l=f+20|0;m=f+2|0;while(1){g=b[n>>1]|0;i=(c[h+64>>2]|0)+((g&65535)<<1)|0;i=(c[h+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[h+26>>1])|0;j=a[k>>0]|0;if(j<<24>>24>18){h=8;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[l>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=g;c[f+120+(u<<2)>>2]=h;b[n>>1]=0;a[k>>0]=j+1<<24>>24;g=yh(t,i,q,f,d[m>>0]|0)|0;if(g|0){h=11;break}h=c[q>>2]|0;if(a[h+8>>0]|0){g=0;h=11;break}}if((h|0)==8){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==11){Ra=s;return g|0}return 0}function Zg(d,e){d=d|0;e=e|0;var f=0,g=0;e=d+1|0;a[e>>0]=a[e>>0]&-15;b[d+50>>1]=0;if(((a[d>>0]|0)==0?(f=d+70|0,g=b[f>>1]|0,g<<16>>16):0)?a[(c[d+116>>2]|0)+8>>0]|0:0){b[f>>1]=g+-1<<16>>16;g=0;return g|0}g=Hh(d)|0;return g|0}function _g(f,g,h,i){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;v=Ra;Ra=Ra+16|0;u=v;m=c[i+4>>2]|0;a[i+10>>0]=0;t=a[h>>0]|0;j=t&255;do if(t<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){t=j<<7&16256|k;j=2;break}l=d[h+2>>0]|0;if(!(l&128)){t=(j<<14|l)&2080895|k<<7&16256;j=3;break}else{j=Of(h,u)|0;s=u;t=c[s>>2]|0;t=((t|0)==(t|0)?0==(c[s+4>>2]|0):0)?t:-1;break}}else{t=j;j=1}while(0);j=j&255;if(t>>>0>g>>>0|t>>>0<=j>>>0){u=0;i=i+8|0;b[i>>1]=u;Ra=v;return}s=f+4|0;q=f+12|0;r=i+8|0;p=0;o=t;while(1){l=h+j|0;n=a[l>>0]|0;k=n&255;if(n<<24>>24>-1)l=1;else{f=d[l+1>>0]|0;do if(f&128){n=d[l+2>>0]|0;if(!(n&128)){k=(k<<14|n)&2080895|f<<7&16256;l=3;break}else{l=Of(l,u)|0;n=u;k=c[n>>2]|0;k=((k|0)==(k|0)?0==(c[n+4>>2]|0):0)?k:-1;break}}else{k=k<<7&16256|f;l=2}while(0);l=l&255}a[m+10>>0]=a[s>>0]|0;c[m+32>>2]=c[q>>2];c[m+24>>2]=0;c[m+16>>2]=0;o=(Ug(h+o|0,k,m)|0)+o|0;p=p+1<<16>>16;j=l+j|0;if((p&65535)>=(e[r>>1]|0))break;if(o>>>0>g>>>0|j>>>0>=t>>>0)break;else m=m+40|0}if(o>>>0<=g>>>0|p<<16>>16==0){u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}j=m+8|0;if(!(b[j>>1]&9216)){b[j>>1]=1;u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}else{Dg(m);u=p;i=i+8|0;b[i>>1]=u;Ra=v;return}}function $g(f,g){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,x=0,y=0;w=Ra;Ra=Ra+16|0;u=w;if((a[f>>0]|0)==0?a[f+1>>0]&8:0){v=0;Ra=w;return v|0}h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;r=f+116|0;h=c[r>>2]|0;s=f+70|0;a:do if(!(a[h+8>>0]|0)){n=f+68|0;o=f+20|0;p=f+50|0;t=f+1|0;q=f+2|0;while(1){k=(c[h+56>>2]|0)+((d[h+9>>0]|0)+8)|0;g=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[h+24>>1]|0;b[s>>1]=l;m=a[n>>0]|0;if(m<<24>>24>18){v=9;break}x=c[o>>2]|0;b[p>>1]=0;a[t>>0]=a[t>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=h;b[s>>1]=0;a[n>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(g&255)<<24|(j&255)<<8|k&255,r,f,d[q>>0]|0)|0;if(g|0)break;h=c[r>>2]|0;if(a[h+8>>0]|0){g=t;break a}}if((v|0)==9){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);g=11}a[t>>0]=a[t>>0]&-9;y=g;Ra=w;return y|0}else g=f+1|0;while(0);b[s>>1]=(e[h+24>>1]|0)+65535;a[g>>0]=a[g>>0]|8;y=0;Ra=w;return y|0}case 16:{c[g>>2]=1;y=0;Ra=w;return y|0}default:{y=h;Ra=w;return y|0}}return 0}function ah(f,g,h,i){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,M=0,N=0;N=Ra;Ra=Ra+80|0;H=N+40|0;G=N;A=N+64|0;B=N+60|0;M=N+56|0;C=N+52|0;c[C>>2]=i;o=c[f+8>>2]|0;q=o+4|0;F=c[q>>2]|0;if((a[f>>0]|0)==4){M=c[f+4>>2]|0;Ra=N;return M|0}I=f+1|0;l=a[I>>0]|0;a:do if(l&32){m=c[f+64>>2]|0;j=c[F+8>>2]|0;b:do if(!j)K=14;else{c:do if(m){do{if((j|0)!=(f|0)?(c[j+64>>2]|0)==(m|0):0)break c;j=c[j+24>>2]|0}while((j|0)!=0);if(!f)break b;else{K=14;break b}}else{k=f+24|0;while(1){if((j|0)!=(f|0))break c;j=c[k>>2]|0;if(!j){K=14;break b}}}while(0);j=$f(j,m,f)|0;c[M>>2]=j;if(!j)break a;Ra=N;return j|0}while(0);if((K|0)==14)a[I>>0]=l&-33;c[M>>2]=0}while(0);J=f+112|0;z=c[J>>2]|0;k=z;do if(!z){l=c[f+64>>2]|0;n=g+8|0;m=c[n>>2]|0;n=c[n+4>>2]|0;k=o+11|0;if(a[k>>0]|0?(a[k>>0]=0,p=c[(c[q>>2]|0)+8>>2]|0,p|0):0){j=p;do{if((a[j+1>>0]&16?(a[k>>0]=1,(c[j+64>>2]|0)==(l|0)):0)?(z=j+32|0,(c[z>>2]|0)==(m|0)?(c[z+4>>2]|0)==(n|0):0):0)a[j>>0]=1;j=c[j+24>>2]|0}while((j|0)!=0)}if(a[I>>0]&2?(z=f+32|0,(m|0)==(c[z>>2]|0)?(n|0)==(c[z+4>>2]|0):0):0){if(!(b[f+50>>1]|0))break;if((c[f+44>>2]|0)!=((c[g+32>>2]|0)+(c[g+28>>2]|0)|0))break;M=Ih(f,g)|0;Ra=N;return M|0}if((i|0)==0?(r=Xg(f,0,m,n,(h|0)!=0&1,C)|0,c[M>>2]=r,r|0):0){M=r;Ra=N;return M|0}}else{do if(!(h&2|i)){j=b[g+24>>1]|0;if(!(j<<16>>16)){j=g+8|0;j=th(f,c[g>>2]|0,c[j>>2]|0,c[j+4>>2]|0,(h|0)!=0&1,C)|0;c[M>>2]=j}else{c[G>>2]=k;c[G+4>>2]=c[g+20>>2];b[G+8>>1]=j;j=G+10|0;b[j>>1]=0;b[j+2>>1]=0;a[j+4>>0]=0;j=Xg(f,G,0,0,(h|0)!=0&1,C)|0;c[M>>2]=j}if(!j){j=c[C>>2]|0;break}else{M=j;Ra=N;return M|0}}else j=i;while(0);if((j|0)==0?(bg(f),y=f+32|0,n=c[y>>2]|0,z=g+8|0,(n|0)==(c[z>>2]|0)?(c[y+4>>2]|0)==(c[z+4>>2]|0):0):0){c[G+16>>2]=c[g>>2];c[G+28>>2]=n;c[G+32>>2]=0;M=Ih(f,G)|0;Ra=N;return M|0}}while(0);z=f+116|0;y=c[z>>2]|0;if((c[y+20>>2]|0)<0?(s=Jh(y)|0,c[M>>2]=s,s|0):0){M=s;Ra=N;return M|0}x=c[F+80>>2]|0;o=d[y+10>>0]|0;if(!(a[y+2>>0]|0)){m=c[g+8>>2]|0;l=c[g>>2]|0;do if(m>>>0>=128){j=x+o|0;k=((m|0)<0)<<31>>31;if(m>>>0<16384){w=bw(m|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=m&127;j=2;break}else{j=(wh(j,m,k)|0)&255;break}}else{a[x+o>>0]=m;j=1}while(0);r=m;n=j+o|0;q=m}else{q=c[g+28>>2]|0;n=(c[g+32>>2]|0)+q|0;p=c[g+16>>2]|0;do if(n>>>0>=128){j=x+o|0;k=((n|0)<0)<<31>>31;if(n>>>0<16384){w=bw(n|0,k|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=n&127;j=2;break}else{j=(wh(j,n,k)|0)&255;break}}else{a[x+o>>0]=n;j=1}while(0);m=j+o|0;j=x+m|0;l=g+8|0;k=c[l>>2]|0;l=c[l+4>>2]|0;do if(!(l>>>0<0|(l|0)==0&k>>>0<128))if(l>>>0<0|(l|0)==0&k>>>0<16384){w=bw(k|0,l|0,7)|0;L()|0;a[j>>0]=w&255|-128;a[j+1>>0]=k&127;j=2;break}else{j=wh(j,k,l)|0;break}else{a[j>>0]=k&127;j=1}while(0);r=n;n=j+m|0;l=p}k=x+n|0;j=e[y+14>>1]|0;d:do if((r|0)>(j|0)){i=e[y+16>>1]|0;v=c[y+52>>2]|0;w=v+36|0;m=(((r-i|0)>>>0)%(((c[w>>2]|0)+-4|0)>>>0)|0)+i|0;m=(m|0)>(j|0)?i:m;i=m+n|0;n=i+4|0;c[A>>2]=0;s=v+17|0;t=v+32|0;i=x+i|0;u=0;j=r;e:while(1){r=j;while(1){j=(r|0)>(m|0)?m:r;do if((q|0)<(j|0))if((q|0)>0){ew(k|0,l|0,q|0)|0;j=q;break}else{gw(k|0,0,j|0)|0;break}else ew(k|0,l|0,j|0)|0;while(0);r=r-j|0;if((r|0)<1){K=96;break e}l=l+j|0;q=q-j|0;m=m-j|0;if(!m)break;else k=k+j|0}c[B>>2]=0;p=c[A>>2]|0;if(!(a[s>>0]|0))j=p;else{m=1073741824/((c[t>>2]|0)>>>0)|0;j=p;do{o=j;j=j+1|0;if(j>>>0<2)k=0;else{k=o+-1|0;k=k-((k>>>0)%(((((c[w>>2]|0)>>>0)/5|0)+1|0)>>>0)|0)|0;k=((k+1|0)==(m|0)?3:2)+k|0}}while((o|0)==(m|0)|(k|0)==(j|0));c[A>>2]=j}k=fg(v,B,A,j,0)|0;c[G>>2]=k;j=(k|0)==0;if(j&(a[s>>0]|0)!=0){j=c[A>>2]|0;ig(v,j,(p|0)==0?3:4,p,G);k=c[G>>2]|0;if(k){K=81;break}}else{if(!j)break;j=c[A>>2]|0}a[i>>0]=j>>>24;a[i+1>>0]=j>>>16;a[i+2>>0]=j>>>8;a[i+3>>0]=j;do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{u=c[j+20>>2]|0;i=u+120|0;c[i>>2]=(c[i>>2]|0)+-1;u=u+136|0;c[j+16>>2]=c[u>>2];c[u>>2]=j;break}}while(0);u=c[B>>2]|0;k=u+56|0;i=c[k>>2]|0;a[i>>0]=0;a[i+1>>0]=0;a[i+2>>0]=0;a[i+3>>0]=0;k=(c[k>>2]|0)+4|0;m=(c[w>>2]|0)+-4|0;j=r}do if((K|0)==81){j=c[B>>2]|0;if(j){j=c[j+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}}else if((K|0)==96){if(!u)break d;j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break d}else{B=c[j+20>>2]|0;A=B+120|0;c[A>>2]=(c[A>>2]|0)+-1;B=B+136|0;c[j+16>>2]=c[B>>2];c[B>>2]=j;break d}}while(0);do if(u|0){j=c[u+72>>2]|0;if(!(b[j+28>>1]&32)){Df(j);break}else{f=c[j+20>>2]|0;g=f+120|0;c[g>>2]=(c[g>>2]|0)+-1;f=f+136|0;c[j+16>>2]=c[f>>2];c[f>>2]=j;break}}while(0);c[M>>2]=k;M=k;Ra=N;return M|0}else{n=r+n|0;ew(k|0,l|0,q|0)|0;gw(k+q|0,0,r-q|0)|0;n=(n|0)>4?n:4}while(0);c[M>>2]=0;k=f+70|0;l=b[k>>1]|0;m=l&65535;j=c[C>>2]|0;if(!j){k=c[y+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[M>>2]=0;break}else{E=Ve(k)|0;K=112;break}else K=107;while(0);do if((K|0)==107){j=c[l+40>>2]|0;if(j|0){c[M>>2]=j;K=123;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){E=Wf(k)|0;K=112;break}else{E=Xf(k)|0;K=112;break}}while(0);if((K|0)==112?(c[M>>2]=E,E|0):0){j=E;K=123}if((K|0)==123){M=j;Ra=N;return M|0}j=(c[y+64>>2]|0)+(m<<1)|0;j=(c[y+56>>2]|0)+((d[j>>0]<<8|d[j+1>>0])&e[y+26>>1])|0;if(!(a[y+8>>0]|0)){E=d[j>>0]|d[j+1>>0]<<8|d[j+2>>0]<<16|d[j+3>>0]<<24;a[x>>0]=E;a[x+1>>0]=E>>8;a[x+2>>0]=E>>16;a[x+3>>0]=E>>24}k=Ah(y,j,G)|0;c[M>>2]=k;k=e[G+18>>1]|0;do if((n|0)==(k|0)?(c[G+12>>2]|0)==(e[G+16>>1]|0):0){if(a[F+17>>0]|0?(n|0)>=(e[y+16>>1]|0):0)break;if((j+n|0)>>>0>(c[y+60>>2]|0)>>>0){c[H>>2]=32306;c[H+4>>2]=71903;c[H+8>>2]=31517;Db(11,32001,H);j=11}else{ew(j|0,x|0,n|0)|0;j=0}M=j;Ra=N;return M|0}while(0);Kh(y,m,k,M);j=c[M>>2]|0;if(!j)j=m;else{M=j;Ra=N;return M|0}}else if((j|0)<0?(D=l+1<<16>>16,(b[y+24>>1]|0)!=0):0){b[k>>1]=D;a[I>>0]=a[I>>0]&-3;j=D&65535}else j=m;Lh(y,j,x,n,0,0,M);b[f+50>>1]=0;if(!(a[y+12>>0]|0)){M=c[M>>2]|0;Ra=N;return M|0}a[I>>0]=a[I>>0]&-3;k=Mh(f)|0;c[M>>2]=k;j=c[z>>2]|0;a[j+12>>0]=0;a[f>>0]=1;if(!((h&2|0)!=0&(k|0)==0)){M=k;Ra=N;return M|0}m=f+68|0;k=a[m>>0]|0;if(k<<24>>24>-1){if(k<<24>>24){l=0;j=k;do{k=c[(c[f+120+(l<<2)>>2]|0)+72>>2]|0;if(!(b[k+28>>1]&32)){Df(k);j=a[m>>0]|0}else{h=c[k+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[k+16>>2]=c[h>>2];c[h>>2]=k}l=l+1|0}while((l|0)<(j<<24>>24|0));j=c[z>>2]|0}j=c[j+72>>2]|0;if(!(b[j+28>>1]&32))Df(j);else{h=c[j+20>>2]|0;I=h+120|0;c[I>>2]=(c[I>>2]|0)+-1;h=h+136|0;c[j+16>>2]=c[h>>2];c[h>>2]=j}a[m>>0]=-1}m=g+8|0;f:do if(!(c[J>>2]|0))j=0;else{J=m;j=c[J>>2]|0;J=Sv(j|0,c[J+4>>2]|0,-1,-1)|0;h=L()|0;do if(h>>>0>0|(h|0)==0&J>>>0>2147483390)K=155;else{if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](j)|0;c[f+16>>2]=j;if(!j)break}else{l=Wa[c[29356>>2]&127](j)|0;if((c[14985]|0)>>>0>>0)c[14985]=j;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){K=c[14978]|0;J=Tv(j|0,k|0,l|0,((l|0)<0)<<31>>31|0)|0;h=L()|0;c[14768]=((h|0)<0|(h|0)==0&J>>>0<=K>>>0)&1}j=Wa[c[29340>>2]&127](l)|0;if(!j){K=155;break}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k;c[f+16>>2]=j}ew(j|0,c[g>>2]|0,c[m>>2]|0)|0;j=0;break f}while(0);if((K|0)==155)c[f+16>>2]=0;c[M>>2]=7;j=7}while(0);a[f>>0]=3;K=m;g=c[K+4>>2]|0;M=f+56|0;c[M>>2]=c[K>>2];c[M+4>>2]=g;M=j;Ra=N;return M|0}function bh(f,g){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,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;N=Ra;Ra=Ra+48|0;B=N+24|0;i=N+40|0;M=N+36|0;x=N;q=c[f+8>>2]|0;r=q+4|0;C=c[r>>2]|0;j=g&2;do if((a[f>>0]|0)==3){c[i>>2]=0;a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{L=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-L;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h){if(c[g>>2]|0)D=12}else{c[g>>2]=h;D=12}if((D|0)==12?(a[f>>0]|0)==0:0)a[f>>0]=2;c[M>>2]=0;break}}c[M>>2]=g;M=g;Ra=N;return M|0}while(0);L=f+68|0;F=a[L>>0]|0;p=F<<24>>24;I=f+70|0;J=b[I>>1]|0;z=J&65535;K=f+116|0;G=c[K>>2]|0;m=(c[G+64>>2]|0)+(z<<1)|0;m=(c[G+56>>2]|0)+((d[m>>0]<<8|d[m+1>>0])&e[G+26>>1])|0;g=G+20|0;if((c[g>>2]|0)<0?Jh(G)|0:0){M=11;Ra=N;return M|0}H=j<<24>>24!=0;n=G+8|0;do if(H){if(a[n>>0]|0){k=c[g>>2]|0;i=m+(d[G+10>>0]|0)|0;A=a[i>>0]|0;h=A&255;if(A<<24>>24<0){g=0;h=h&127;do{g=g+1|0;A=a[i+g>>0]|0;h=h<<7|A&127}while(A<<24>>24<0&g>>>0<8);i=i+g|0;j=h}else j=h;if(!(a[G+2>>0]|0))g=i+1|0;else{g=1;do{A=g;g=g+1|0}while((a[i+A>>0]|0)<0&g>>>0<10);g=i+g|0}h=e[G+14>>1]|0;if(j>>>0>h>>>0){i=e[G+16>>1]|0;A=(((j-i|0)>>>0)%(((c[(c[G+52>>2]|0)+36>>2]|0)+-4|0)>>>0)|0)+i|0;g=(g-m&65535)+4+(A>>>0>h>>>0?i:A)|0}else{g=g-m+j|0;g=g>>>0>4?g:4}if((k+2+(g&65535)|0)<=((c[C+36>>2]<<1>>>0)/3|0|0)?(b[G+24>>1]|0)!=1:0){A=1;break}}g=ag(f)|0;c[M>>2]=g;if(g){M=g;Ra=N;return M|0}else A=0}else A=0;while(0);k=f+1|0;do if(!(a[n>>0]|0)){a[k>>0]=a[k>>0]&-15;b[f+50>>1]=0;if(((a[f>>0]|0)==0?(l=b[I>>1]|0,l<<16>>16):0)?a[(c[K>>2]|0)+8>>0]|0:0){b[I>>1]=l+-1<<16>>16;c[M>>2]=0;break}g=Hh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}while(0);i=a[k>>0]|0;a:do if(i&32){j=c[f+64>>2]|0;g=c[C+8>>2]|0;b:do if(!g)D=51;else{c:do if(j){do{if((g|0)!=(f|0)?(c[g+64>>2]|0)==(j|0):0)break c;g=c[g+24>>2]|0}while((g|0)!=0);if(!f)break b;else{D=51;break b}}else{h=f+24|0;while(1){if((g|0)!=(f|0))break c;g=c[h>>2]|0;if(!g){D=51;break b}}}while(0);g=$f(g,j,f)|0;c[M>>2]=g;if(!g)break a;Ra=N;return g|0}while(0);if((D|0)==51)a[k>>0]=i&-33;c[M>>2]=0}while(0);if(((c[f+112>>2]|0)==0?(s=c[f+64>>2]|0,u=f+32|0,t=c[u>>2]|0,u=c[u+4>>2]|0,v=q+11|0,a[v>>0]|0):0)?(a[v>>0]=0,o=c[(c[r>>2]|0)+8>>2]|0,o|0):0){g=o;do{if((a[g+1>>0]&16?(a[v>>0]=1,(c[g+64>>2]|0)==(s|0)):0)?(r=g+32|0,(c[r>>2]|0)==(t|0)?(c[r+4>>2]|0)==(u|0):0):0)a[g>>0]=1;g=c[g+24>>2]|0}while((g|0)!=0)}h=c[G+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;break}else{w=Ve(h)|0;D=73;break}else D=68;while(0);do if((D|0)==68){g=c[i+40>>2]|0;if(g|0){c[M>>2]=g;M=g;Ra=N;return M|0}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){w=Wf(h)|0;D=73;break}else{w=Xf(h)|0;D=73;break}}while(0);if((D|0)==73?(c[M>>2]=w,w|0):0){M=w;Ra=N;return M|0}g=Ah(G,m,x)|0;c[M>>2]=g;Kh(G,z,e[x+18>>1]|0,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}if(!(a[n>>0]|0)){o=c[K>>2]|0;if((c[o+20>>2]|0)<0?(y=Jh(o)|0,c[M>>2]=y,y|0):0){M=y;Ra=N;return M|0}l=c[(c[(((a[L>>0]|0)+-1|0)>(p|0)?f+120+(p+1<<2)|0:K)>>2]|0)+4>>2]|0;m=o+24|0;D=(c[o+64>>2]|0)+((e[m>>1]<<1)+-2)|0;D=(d[D>>0]<<8|d[D+1>>0])&e[o+26>>1];n=(c[o+56>>2]|0)+D|0;if(D>>>0<4){c[B>>2]=32306;c[B+4>>2]=72100;c[B+8>>2]=31517;Db(11,32001,B);M=11;Ra=N;return M|0}k=(Xa[c[o+76>>2]&255](o,n)|0)&65535;g=c[C+80>>2]|0;h=c[o+72>>2]|0;i=c[h+20>>2]|0;do if((b[h+28>>1]&4)!=0?(c[i+24>>2]|0)>>>0>=(c[h+24>>2]|0)>>>0:0)if(!(c[i+96>>2]|0)){c[M>>2]=0;D=91;break}else{E=Ve(h)|0;D=90;break}else D=85;while(0);do if((D|0)==85){j=c[i+40>>2]|0;if(j|0){c[M>>2]=j;break}if((c[i+148>>2]|0)>>>0>(c[i+152>>2]|0)>>>0){E=Wf(h)|0;D=90;break}else{E=Xf(h)|0;D=90;break}}while(0);if((D|0)==90?(c[M>>2]=E,(E|0)==0):0)D=91;if((D|0)==91)Lh(G,z,n+-4|0,k+4|0,g,l,M);Kh(o,(e[m>>1]|0)+-1|0,k,M);g=c[M>>2]|0;if(g|0){M=g;Ra=N;return M|0}}g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}g=a[L>>0]|0;if(g<<24>>24>F<<24>>24){h=c[(c[K>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{E=c[h+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[h+16>>2]=c[E>>2];c[E>>2]=h}h=g+-1<<24>>24;a[L>>0]=h;g=h<<24>>24;if(h<<24>>24>F<<24>>24)do{h=h+-1<<24>>24;a[L>>0]=h;g=c[f+120+(g<<2)>>2]|0;do if(g){g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=a[L>>0]|0;break}else{E=c[g+20>>2]|0;D=E+120|0;c[D>>2]=(c[D>>2]|0)+-1;E=E+136|0;c[g+16>>2]=c[E>>2];c[E>>2]=g;break}}while(0);g=h<<24>>24}while(h<<24>>24>F<<24>>24);c[K>>2]=c[f+120+(g<<2)>>2];g=Mh(f)|0;c[M>>2]=g;if(g|0){M=g;Ra=N;return M|0}}if(A|0){a[f>>0]=2;h=b[G+24>>1]|0;g=f+4|0;if((J&65535)<(h&65535)){c[g>>2]=1;M=0;Ra=N;return M|0}else{c[g>>2]=-1;b[I>>1]=(h&65535)+65535;M=0;Ra=N;return M|0}}g=xh(f)|0;c[M>>2]=g;if(H){h=a[L>>0]|0;if(h<<24>>24>-1){if(h<<24>>24){i=0;g=h;do{h=c[(c[f+120+(i<<2)>>2]|0)+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);g=a[L>>0]|0}else{J=c[h+20>>2]|0;I=J+120|0;c[I>>2]=(c[I>>2]|0)+-1;J=J+136|0;c[h+16>>2]=c[J>>2];c[J>>2]=h}i=i+1|0}while((i|0)<(g<<24>>24|0))}g=c[(c[K>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32))Df(g);else{K=c[g+20>>2]|0;J=K+120|0;c[J>>2]=(c[J>>2]|0)+-1;K=K+136|0;c[g+16>>2]=c[K>>2];c[K>>2]=g}a[L>>0]=-1;g=c[M>>2]|0}a[f>>0]=3}if((g|0)!=16){M=g;Ra=N;return M|0}c[M>>2]=0;M=0;Ra=N;return M|0}function ch(f,g){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;s=Ra;Ra=Ra+16|0;r=s;h=xh(f)|0;switch(h|0){case 0:{c[g>>2]=0;k=f+116|0;l=f+70|0;m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;while(1){g=c[k>>2]|0;if(a[g+8>>0]|0){g=0;h=8;break}h=b[l>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[m>>0]|0;if(j<<24>>24>18){h=5;break}i=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];t=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;u=j<<24>>24;b[f+72+(u<<1)>>1]=h;c[f+120+(u<<2)>>2]=g;b[l>>1]=0;a[m>>0]=j+1<<24>>24;g=yh(t,i,k,f,d[q>>0]|0)|0;if(g|0){h=8;break}}if((h|0)==5){c[r>>2]=32306;c[r+4>>2]=68229;c[r+8>>2]=31517;Db(11,32001,r);u=11;Ra=s;return u|0}else if((h|0)==8){Ra=s;return g|0}break}case 16:{c[g>>2]=1;u=0;Ra=s;return u|0}default:{u=h;Ra=s;return u|0}}return 0}function dh(a){a=a|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;n=a+8|0;d=c[a+16>>2]|0;o=c[a+20>>2]|0;g=a+40|0;e=c[a+48>>2]|0;m=c[a+52>>2]|0;c[g>>2]=0;c[g+4>>2]=0;c[g+8>>2]=0;c[g+12>>2]=0;g=a+24|0;h=a+32|0;f=c[h>>2]|0;c[h>>2]=0;h=a+36|0;i=c[h>>2]|0;do if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{l=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);c[h>>2]=0;c[g>>2]=0;if(f|0)do{g=f;f=c[f>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](g);else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g)}}while((f|0)!=0);c[a+28>>2]=0;k=(e|0)==0;if(!k){j=e;do{l=c[j+8>>2]|0;do if(l|0){Xi(0,c[l+28>>2]|0);f=c[l>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+4>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{i=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[l+12>>2]|0;if(f|0)ni(0,f);i=c[l+16>>2]|0;do if(i|0){h=i+4|0;f=c[i>>2]|0;if((c[h>>2]|0)>0){g=0;do{f=c[f+(g<<3)>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);g=g+1|0;f=c[i>>2]|0}while((g|0)<(c[h>>2]|0))}do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{p=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{p=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);j=c[j>>2]|0}while((j|0)!=0)}do if(m|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{p=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}while(0);if(!k)do{f=e;e=c[e>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](f);else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f)}}while((e|0)!=0);c[n>>2]=0;c[n+4>>2]=0;c[n+8>>2]=0;c[n+12>>2]=0;f=(d|0)==0;if(!f){e=d;do{g=c[e+8>>2]|0;if(g|0?(n=g+32|0,p=(c[n>>2]|0)+-1|0,c[n>>2]=p,(p|0)==0):0)Vi(0,g);e=c[e>>2]|0}while((e|0)!=0)}do if(o|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](o);break}else{p=Wa[c[29352>>2]&127](o)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](o);break}while(0);if(!f)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);e=a+56|0;f=a+64|0;d=c[f>>2]|0;c[f>>2]=0;f=a+68|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;c[e>>2]=0;if(d|0)do{e=d;d=c[d>>2]|0;if(!(c[7324]|0))ab[c[29344>>2]&127](e);else{p=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e)}}while((d|0)!=0);c[a+60>>2]=0;c[a+72>>2]=0;d=a+78|0;e=b[d>>1]|0;if(!(e&1)){p=e&-10;b[d>>1]=p;return}p=a+4|0;c[p>>2]=(c[p>>2]|0)+1;p=e&-10;b[d>>1]=p;return}function eh(f,g,h,i){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;G=Ra;Ra=Ra+48|0;x=G+16|0;C=G;A=G+24|0;F=f+165|0;a[F>>0]=1;w=(g|0)==1?34855:34585;c[C>>2]=w;c[C+4>>2]=34874;c[C+8>>2]=34876;c[C+12>>2]=0;c[A>>2]=f;c[A+8>>2]=g;y=A+12|0;c[y>>2]=0;c[A+4>>2]=h;c[A+16>>2]=i;c[A+20>>2]=0;fh(A,3,C,0)|0;i=c[y>>2]|0;a:do if(!i){z=f+16|0;u=c[z>>2]|0;C=u+(g<<4)+4|0;i=c[C>>2]|0;if(!i){f=(c[u+28>>2]|0)+78|0;b[f>>1]=b[f>>1]|1;f=0;a[F>>0]=0;Ra=G;return f|0}l=c[i>>2]|0;m=c[i+4>>2]|0;k=m+4|0;c[k>>2]=l;b:do if(!(a[i+8>>0]|0)){m=Zb(i,0,0)|0;switch(m|0){case 0:{l=c[C>>2]|0;m=c[l+4>>2]|0;B=1;k=m+4|0;l=c[l>>2]|0;break b}case 516:{l=50738;break}case 100:{l=50760;break}case 101:{l=50782;break}default:{j=m&255;if(j>>>0<29?(520028155>>>j&1|0)!=0:0)l=c[22960+(j<<2)>>2]|0;else l=50724}}j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}E=j;if((c[f+304>>2]|0)>>>0<=E>>>0?(c[f+308>>2]|0)>>>0>E>>>0:0){E=f+300|0;c[j>>2]=c[E>>2];c[E>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{E=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(l){k=(Eu(l)|0)+1|0;d:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=32;else{j=0;break c}else{do if(!(0<0|(0==0?(e[f+276>>1]|0)>>>0>>0:0))){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];E=f+284|0;c[E>>2]=(c[E>>2]|0)+1;break d}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=32}while(0);if((D|0)==32)j=_d(f,k,0)|0;if(j)ew(j|0,l|0,k|0)|0;else j=0}else j=0;while(0);c[h>>2]=j;j=m;break a}else B=0;while(0);c[k>>2]=l;t=c[(c[m+12>>2]|0)+56>>2]|0;p=a[t+40>>0]|0;q=a[t+41>>0]|0;r=a[t+42>>0]|0;s=a[t+43>>0]|0;c[k>>2]=l;o=d[t+45>>0]<<16|d[t+44>>0]<<24|d[t+46>>0]<<8|d[t+47>>0];c[k>>2]=l;n=d[t+49>>0]<<16|d[t+48>>0]<<24|d[t+50>>0]<<8|d[t+51>>0];c[k>>2]=l;k=d[t+59>>0]|0;t=d[t+57>>0]<<16|d[t+56>>0]<<24|d[t+58>>0]<<8|k;v=f+32|0;u=u+(g<<4)+12|0;i=c[u>>2]|0;do if((c[v>>2]&33554432|0)==0&0==0){c[i>>2]=(q&255)<<16|(p&255)<<24|(r&255)<<8|s&255;if(t){if(!g){k=k&3;k=(k|0)==0?1:k&255;a[f+78>>0]=k;D=66;break}k=a[f+78>>0]|0;if((t|0)==(k&255|0))D=66;else{j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=61;else j=0;else{do if((e[f+276>>1]|0)>=68){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=62;break e}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=61}while(0);if((D|0)==61){j=_d(f,68,0)|0;D=62}if((D|0)==62)if(!j)j=0;else{i=j;k=34948;l=i+68|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1}}else D=65}else{c[i>>2]=0;n=0;o=0;D=65}while(0);if((D|0)==65){k=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[k>>1]=b[k>>1]|4;k=a[f+78>>0]|0;D=66}do if((D|0)==66){a[i+77>>0]=k;k=i+80|0;if(!(c[k>>2]|0)){i=(n|0)>-1?n:(n|0)==-2147483648?2147483647:0-n|0;i=(i|0)==0?-2e3:i;c[k>>2]=i;c[m+4>>2]=l;k=c[(c[m>>2]|0)+212>>2]|0;c[k+16>>2]=i;l=c[7357]|0;m=c[k+44>>2]|0;if((i|0)<=-1){s=Yv(i|0,((i|0)<0)<<31>>31|0,-1024,-1)|0;t=L()|0;i=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;i=Wv(s|0,t|0,i|0,((i|0)<0)<<31>>31|0)|0;L()|0}bb[l&127](m,i);i=c[u>>2]|0}k=o&255;i=i+76|0;a[i>>0]=k;if(k<<24>>24){if((k&255)>4){j=c[h>>2]|0;do if(j|0){if(c[f+480>>2]|0){Xd(f,j);break}A=j;if((c[f+304>>2]|0)>>>0<=A>>>0?(c[f+308>>2]|0)>>>0>A>>>0:0){A=f+300|0;c[j>>2]=c[A>>2];c[A>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{A=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-A;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);f:do if(c[f+272>>2]|0)if(!(a[f+81>>0]|0))D=92;else j=0;else{do if((e[f+276>>1]|0)>=24){i=f+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}i=f+296|0;j=c[i>>2]|0;if(!j){j=f+292|0;break}else{c[i>>2]=c[j>>2];D=f+284|0;c[D>>2]=(c[D>>2]|0)+1;D=93;break f}}else j=f+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;D=92}while(0);if((D|0)==92){j=_d(f,24,0)|0;D=93}if((D|0)==93)if(!j)j=0;else{i=j;k=35016;l=i+24|0;do{a[i>>0]=a[k>>0]|0;i=i+1|0;k=k+1|0}while((i|0)<(l|0))}c[h>>2]=j;j=1;break}}else a[i>>0]=1;if((g|0)==0&(o|0)>3){t=v;u=c[t+4>>2]|0;h=v;c[h>>2]=c[t>>2]&-3;c[h+4>>2]=u}c[x>>2]=c[(c[z>>2]|0)+(g<<4)>>2];c[x+4>>2]=w;i=dd(f,35040,x)|0;h=f+312|0;x=c[h>>2]|0;c[h>>2]=0;k=nd(f,i,77,A,0)|0;c[h>>2]=x;k=(k|0)==0?c[y>>2]|0:k;do if(i|0){if(c[f+480>>2]|0){Xd(f,i);break}h=i;if((c[f+304>>2]|0)>>>0<=h>>>0?(c[f+308>>2]|0)>>>0>h>>>0:0){h=f+300|0;c[i>>2]=c[h>>2];c[h>>2]=i;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);i=(k|0)==0;if(i)gh(f,g)|0;if(!(a[f+81>>0]|0)){if(!i){j=k;D=112}}else{$b(f);j=7;D=112}if((D|0)==112?(c[v>>2]&134217728|0)==0&0==0:0)break;j=(c[(c[z>>2]|0)+(g<<4)+12>>2]|0)+78|0;b[j>>1]=b[j>>1]|1;j=0}while(0);if((B|0)!=0?(E=c[C>>2]|0,c[(c[E+4>>2]|0)+4>>2]=c[E>>2],(cc(E,0)|0)==0):0)bc(E,0)|0}else j=i;while(0);g:do if((j|0)>=7){if((j|0)<3082)switch(j|0){case 7:break;default:break g}else switch(j|0){case 3082:break;default:break g}i=f+81|0;if((a[i>>0]|0)==0?(a[f+82>>0]|0)==0:0){a[i>>0]=1;if((c[f+180>>2]|0)>0)c[f+264>>2]=1;i=f+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[f+236>>2]|0;if(i|0)c[i+12>>2]=7}}else{switch(j|0){case 0:break;default:break g}a[F>>0]=0;Ra=G;return j|0}while(0);if((g|0)>-1){h=c[f+16>>2]|0;g=(c[h+(g<<4)+12>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=(c[h+28>>2]|0)+78|0;b[g>>1]=b[g>>1]|8;g=f+24|0;c[g>>2]=c[g>>2]&-17}if(c[f+56>>2]|0){f=j;a[F>>0]=0;Ra=G;return f|0}n=f+20|0;i=c[n>>2]|0;if((i|0)<=0){f=j;a[F>>0]=0;Ra=G;return f|0}m=f+16|0;l=0;do{k=c[(c[m>>2]|0)+(l<<4)+12>>2]|0;if(b[k+78>>1]&8){dh(k);i=c[n>>2]|0}l=l+1|0}while((l|0)<(i|0));a[F>>0]=0;Ra=G;return j|0}function fh(e,f,g,h){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+96|0;x=B+64|0;w=B+56|0;v=B+40|0;l=B+24|0;k=B+16|0;j=B;n=B+80|0;s=B+76|0;A=c[e>>2]|0;t=c[e+8>>2]|0;r=c[A+16>>2]|0;q=(c[r+(t<<4)+12>>2]|0)+78|0;b[q>>1]=b[q>>1]&-5;q=e+20|0;c[q>>2]=(c[q>>2]|0)+1;q=A+81|0;if(a[q>>0]|0){c[e+12>>2]=7;e=1;Ra=B;return e|0}if(!g){e=0;Ra=B;return e|0}u=c[g+4>>2]|0;if(!u){f=c[g>>2]|0;h=e+4|0;i=c[h>>2]|0;if(c[i>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[i>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[k>>2]=(f|0)==0?35133:f;g=dd(A,35135,k)|0;c[c[h>>2]>>2]=g;c[l>>2]=32306;c[l+4>>2]=123732;c[l+8>>2]=31517;Db(11,32001,l);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[j>>2]=32306;c[j+4>>2]=123725;c[j+8>>2]=31517;Db(11,32001,j);c[e+12>>2]=11;e=0;Ra=B;return e|0}}i=g+8|0;k=c[i>>2]|0;l=(k|0)==0;do if(!l){f=a[k>>0]|0;do if(!(f<<24>>24)){f=35095;o=13}else{j=f&255;f=208+j|0;if((j|32|0)==99){f=a[k+1>>0]|0;if(!(f<<24>>24)){f=35096;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==114){f=a[k+2>>0]|0;if(!(f<<24>>24)){f=35097;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+3>>0]|0;if(!(f<<24>>24)){f=35098;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==97){f=a[k+4>>0]|0;if(!(f<<24>>24)){f=35099;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==116){f=a[k+5>>0]|0;if(!(f<<24>>24)){f=35100;o=13;break}j=f&255;f=208+j|0;if((j|32|0)==101){f=a[k+6>>0]|0;if(!(f<<24>>24)){f=35101;o=13;break}if(f<<24>>24==32)break;else{h=32;f=208+(f&255)|0}}else h=101}else h=116}else h=97}else h=101}else h=114}else h=99;p=d[f>>0]|0;m=h;o=17}while(0);if((o|0)==13){p=0;m=a[208+(d[f>>0]|0)>>0]|0;o=17}if((o|0)==17?(p|0)!=(m&255|0):0)break;y=A+164|0;x=a[y>>0]|0;a[y>>0]=t;c[n>>2]=0;ii(u,n)|0;c[A+160>>2]=c[n>>2];z=A+166|0;a[z>>0]=a[z>>0]&-2;qd(A,c[i>>2]|0,-1,0,0,s,0)|0;f=c[A+64>>2]|0;a[y>>0]=x;a:do if(f|0?(a[z>>0]&1)==0:0){c[e+12>>2]=f;switch(f|0){case 9:break a;case 7:break;default:{if((f&255|0)==6)break a;gi(e,c[g>>2]|0,pd(A)|0);break a}}if((a[q>>0]|0)==0?(a[A+82>>0]|0)==0:0){a[q>>0]=1;if((c[A+180>>2]|0)>0)c[A+264>>2]=1;f=A+272|0;c[f>>2]=(c[f>>2]|0)+1;f=c[A+236>>2]|0;if(f|0)c[f+12>>2]=7}}while(0);gc(c[s>>2]|0)|0;e=0;Ra=B;return e|0}while(0);i=c[g>>2]|0;j=(i|0)==0;do if(!j){if(!l?a[k>>0]|0:0)break;h=hi(A,i,c[r+(t<<4)>>2]|0)|0;i=(h|0)==0;b:do if((!i?(y=h+44|0,ii(u,y)|0):0)?(z=c[y>>2]|0,(z|0)>=2):0){f=c[(c[h+12>>2]|0)+8>>2]|0;if(!f){e=0;Ra=B;return e|0}while(1){if(!((f|0)==(h|0)?1:(c[f+44>>2]|0)!=(z|0)))break b;f=c[f+20>>2]|0;if(!f){f=0;break}}Ra=B;return f|0}while(0);gi(e,c[g>>2]|0,i?35120:35103);e=0;Ra=B;return e|0}while(0);f=e+4|0;h=c[f>>2]|0;if(c[h>>2]|0){e=0;Ra=B;return e|0}if(c[e+16>>2]&1|0){c[h>>2]=0;c[e+12>>2]=1;e=0;Ra=B;return e|0}if(0==0?(c[A+32>>2]&1|0)==0:0){c[w>>2]=j?35133:i;g=dd(A,35135,w)|0;c[c[f>>2]>>2]=g;c[x>>2]=32306;c[x+4>>2]=123732;c[x+8>>2]=31517;Db(11,32001,x);c[e+12>>2]=11;e=0;Ra=B;return e|0}else{c[v>>2]=32306;c[v+4>>2]=123725;c[v+8>>2]=31517;Db(11,32001,v);c[e+12>>2]=11;e=0;Ra=B;return e|0}return 0}function gh(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0;m=Ra;Ra=Ra+16|0;k=m;l=m+8|0;j=e+16|0;g=c[j>>2]|0;i=c[g+(f<<4)+12>>2]|0;h=c[i+16>>2]|0;if(h|0)do{n=(c[h+8>>2]|0)+36|0;c[n>>2]=c[n>>2]&-17;h=c[h>>2]|0}while((h|0)!=0);i=i+32|0;h=c[i>>2]|0;if(h){g=h;do{n=(c[g+8>>2]|0)+55|0;h=(d[n>>0]|d[n+1>>0]<<8)&-129;a[n>>0]=h;a[n+1>>0]=h>>8;g=c[g>>2]|0}while((g|0)!=0);g=c[j>>2]|0}c[l>>2]=e;g=c[g+(f<<4)>>2]|0;c[l+4>>2]=g;do if(Sd(e,35174,g)|0){c[k>>2]=g;h=dd(e,35187,k)|0;if(h){g=nd(e,h,78,l,0)|0;if(c[e+480>>2]|0){Xd(e,h);l=g;break}n=h;if((c[e+304>>2]|0)>>>0<=n>>>0?(c[e+308>>2]|0)>>>0>n>>>0:0){l=e+300|0;c[h>>2]=c[l>>2];c[l>>2]=h;l=g;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);l=g;break}else{l=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);l=g;break}}else l=7}else l=0;while(0);g=c[i>>2]|0;if(g|0)do{f=c[g+8>>2]|0;n=f+55|0;if(!((d[n>>0]|d[n+1>>0]<<8)&128)){k=c[f+8>>2]|0;j=f+50|0;i=b[j>>1]|0;i=(i&65535)<5?i:5;h=b[(c[f+12>>2]|0)+44>>1]|0;b[k>>1]=h;if(c[f+36>>2]|0){h=(h&65535)+65526&65535;b[k>>1]=h}if(h<<16>>16<33)b[k>>1]=33;ew(k+2|0,31120,i<<1&65535|0)|0;n=b[j>>1]|0;h=n&65535;if((i&65535)<(n&65535)){h=i&65535;do{h=h+1|0;b[k+(h<<1)>>1]=23;i=b[j>>1]|0}while(h>>>0<(i&65535)>>>0);h=i&65535}if(a[f+54>>0]|0)b[k+(h<<1)>>1]=0}g=c[g>>2]|0}while((g|0)!=0);if((l|0)!=7){Ra=m;return l|0}g=e+81|0;if(a[g>>0]|0){Ra=m;return l|0}if(a[e+82>>0]|0){Ra=m;return l|0}a[g>>0]=1;if((c[e+180>>2]|0)>0)c[e+264>>2]=1;g=e+272|0;c[g>>2]=(c[g>>2]|0)+1;g=c[e+236>>2]|0;if(!g){Ra=m;return l|0}c[g+12>>2]=7;Ra=m;return l|0}function hh(d){d=d|0;var f=0,g=0,h=0,i=0,j=0;i=c[d+32>>2]|0;j=d+8|0;if(!((b[j>>1]&9216)==0?!(c[d+24>>2]|0):0))Cg(d);a:do if(c[i+272>>2]|0)if(!(a[i+81>>0]|0))h=14;else{j=7;return j|0}else{do if((e[i+276>>1]|0)>=32){f=i+300|0;g=c[f>>2]|0;if(g|0){c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}f=i+296|0;g=c[f>>2]|0;if(!g){f=i+292|0;break}else{c[f>>2]=c[g>>2];f=i+284|0;c[f>>2]=(c[f>>2]|0)+1;break a}}else f=i+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1;h=14}while(0);if((h|0)==14)g=_d(i,32,0)|0;if(!g){j=7;return j|0}h=g;if((c[i+304>>2]|0)>>>0<=h>>>0?(c[i+308>>2]|0)>>>0>h>>>0:0)f=e[i+276>>1]|0;else f=Wa[c[29352>>2]&127](g)|0;c[g>>2]=0;c[g+4>>2]=i;c[g+8>>2]=0;c[g+12>>2]=0;c[g+20>>2]=0;c[g+16>>2]=g+32;b[g+24>>1]=(f+1048544|0)>>>4;b[g+26>>1]=1;c[g+28>>2]=0;c[d+16>>2]=g;b[j>>1]=1040;c[d+36>>2]=94;j=0;return j|0}function ih(a){a=a|0;var b=0;b=(c[a>>2]|0)+200|0;c[a+4>>2]=c[b>>2];c[b>>2]=a;return}function jh(b,e){b=b|0;e=e|0;var f=0,g=0,h=0,i=0,j=0,k=0;k=b+5|0;f=a[k>>0]|0;if(!(a[b+15>>0]|0))j=3;else switch(e|0){case 2:case 4:{j=3;break}default:{}}do if((j|0)==3?(g=f&255,(g|0)!=(e|0)):0){a[k>>0]=e;if(!((e&1|0)==0&((g&5|0)==1&(a[b+4>>0]|0)==0))){if((e|0)!=2)break;e=c[b+64>>2]|0;f=c[e>>2]|0;if(!f)break;Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0;break}e=c[b+64>>2]|0;f=c[e>>2]|0;if(f|0){Wa[c[f+4>>2]&127](e)|0;c[e>>2]=0}i=b+17|0;if((d[i>>0]|0)>1){j=c[b>>2]|0;Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0;break}e=b+16|0;g=a[e>>0]|0;h=g<<24>>24==0;if(h){f=Sf(b)|0;e=a[e>>0]|0}else{f=0;e=g}a:do if(e<<24>>24==1){e=a[i>>0]|0;switch(e<<24>>24){case 0:case 1:case 5:break;default:{j=19;break a}}if(!(a[b+13>>0]|0)){f=c[b+60>>2]|0;if(Xa[c[(c[f>>2]|0)+28>>2]&255](f,2)|0)break;e=a[i>>0]|0}if(e<<24>>24==5)j=19;else{a[i>>0]=2;j=19}}else if(!f)j=19;while(0);if((j|0)==19?(j=c[b>>2]|0,Ya[c[j+28>>2]&127](j,c[b+172>>2]|0,0)|0,g<<24>>24==1):0){e=c[b+60>>2]|0;f=c[e>>2]|0;if(!f)break;if(!(a[b+13>>0]|0))Xa[c[f+32>>2]&255](e,1)|0;if((a[i>>0]|0)==5)break;a[i>>0]=1;break}if(h)vf(b)}while(0);return d[k>>0]|0}function kh(f,g,h,i){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,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0;T=Ra;Ra=Ra+80|0;A=T+32|0;y=T+24|0;x=T+16|0;w=T+8|0;q=T;S=g+79|0;if(!(a[S>>0]|0)){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);a:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=21;else j=0;else{do if((e[g+276>>1]|0)>=40){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=22;break a}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=21}while(0);if((R|0)==21){j=_d(g,40,0)|0;R=22}if((R|0)==22)if(!j)j=0;else{l=j;k=36072;n=l+40|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}if((c[g+168>>2]|0)>1){j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);b:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=45;else j=0;else{do if((e[g+276>>1]|0)>=43){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=46;break b}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=45}while(0);if((R|0)==45){j=_d(g,43,0)|0;R=46}if((R|0)==46)if(!j)j=0;else{l=j;k=36112;n=l+43|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}m=g+60|0;n=c[m>>2]|0;p=(i|0)!=0;do if(p){j=b[i+8>>1]|0;if((j&15|16)<<16>>16==18){if((j&514)==514?(a[i+10>>0]|0)==1:0){j=c[i+16>>2]|0;k=n}else if(!(j&1)){j=Gg(i,1)|0;k=c[m>>2]|0}else{j=0;k=n}c[m>>2]=k&-8|6;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}S=j;if((c[g+304>>2]|0)>>>0<=S>>>0?(c[g+308>>2]|0)>>>0>S>>>0:0){S=g+300|0;c[j>>2]=c[S>>2];c[S>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{S=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-S;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);c:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=70;else j=0;else{do if((e[g+276>>1]|0)>=18){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=71;break c}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=70}while(0);if((R|0)==70){j=_d(g,18,0)|0;R=71}if((R|0)==71)if(!j)j=0;else{l=j;k=36155;n=l+18|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;g=1;Ra=T;return g|0}else j=59952;while(0);E=g+32|0;G=E;F=c[G>>2]|0;G=c[G+4>>2]|0;H=g+24|0;I=c[H>>2]|0;J=g+100|0;K=c[J>>2]|0;M=g+104|0;N=c[M>>2]|0;O=g+88|0;P=a[O>>0]|0;c[H>>2]=I|6;o=E;c[o>>2]=F&-268456578|513;c[o+4>>2]=G;a[O>>0]=0;o=g+16|0;Q=c[o>>2]|0;v=c[Q+(h<<4)>>2]|0;Q=c[Q+(h<<4)+4>>2]|0;D=Q+4|0;r=a[(c[c[D>>2]>>2]|0)+12>>0]|0;u=c[g+20>>2]|0;c[q>>2]=j;j=yi(g,f,36173,q)|0;c[m>>2]=n;d:do if(!j){j=c[o>>2]|0;C=j+(u<<4)|0;z=c[j+(u<<4)+4>>2]|0;B=z+4|0;if(p){k=c[(c[c[B>>2]>>2]|0)+60>>2]|0;m=q;c[m>>2]=0;c[m+4>>2]=0;m=c[k>>2]|0;do if(m){n=(Xa[c[m+24>>2]&255](k,q)|0)!=0;p=c[q+4>>2]|0;if(!(n|((p|0)>0|(p|0)==0&(c[q>>2]|0)>>>0>0))){j=c[o>>2]|0;break}j=c[f>>2]|0;do if(j|0){if(c[g+480>>2]|0){Xd(g,j);break}B=j;if((c[g+304>>2]|0)>>>0<=B>>>0?(c[g+308>>2]|0)>>>0>B>>>0:0){B=g+300|0;c[j>>2]=c[B>>2];c[B>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{B=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-B;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);e:do if(c[g+272>>2]|0)if(!(a[g+81>>0]|0))R=104;else j=0;else{do if((e[g+276>>1]|0)>=27){k=g+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}k=g+296|0;j=c[k>>2]|0;if(!j){j=g+292|0;break}else{c[k>>2]=c[j>>2];R=g+284|0;c[R>>2]=(c[R>>2]|0)+1;R=105;break e}}else j=g+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;R=104}while(0);if((R|0)==104){j=_d(g,27,0)|0;R=105}if((R|0)==105)if(!j)j=0;else{l=j;k=36196;n=l+27|0;do{a[l>>0]=a[k>>0]|0;l=l+1|0;k=k+1|0}while((l|0)<(n|0))}c[f>>2]=j;m=C;l=1;break d}while(0);c[H>>2]=c[H>>2]|8}m=c[D>>2]|0;c[m+4>>2]=c[Q>>2];m=(c[m+32>>2]|0)-(c[m+36>>2]|0)|0;j=c[(c[j+(h<<4)+12>>2]|0)+80>>2]|0;k=c[B>>2]|0;c[k+4>>2]=c[z>>2];k=c[(c[k>>2]|0)+212>>2]|0;c[k+16>>2]=j;n=c[7357]|0;o=c[k+44>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}bb[n&127](o,j);k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];k=c[(c[k>>2]|0)+212>>2]|0;j=c[k+16>>2]|0;if((j|0)<=-1){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}p=c[k+20>>2]|0;j=(j|0)<(p|0)?p:j;p=c[B>>2]|0;n=c[z>>2]|0;o=p+4|0;c[o>>2]=n;p=c[p>>2]|0;k=c[p+212>>2]|0;if(j|0){if((j|0)<0){q=Yv(j|0,((j|0)<0)<<31>>31|0,-1024,-1)|0;h=L()|0;j=(c[k+28>>2]|0)+(c[k+24>>2]|0)|0;j=Wv(q|0,h|0,j|0,((j|0)<0)<<31>>31|0)|0;L()|0}c[k+20>>2]=j}c[o>>2]=n;a[p+7>>0]=1;j=p+20|0;c[p+8>>2]=0;a[j>>0]=a[j>>0]&-2;j=zi(g,f,36223)|0;if(!j){h=(i|0)==0;j=Zb(Q,h?2:0,0)|0;if(!j){j=c[D>>2]|0;if((a[(c[j>>2]|0)+5>>0]|0)==5)c[g+92>>2]=0;j=c[j+32>>2]|0;o=c[B>>2]|0;c[o+4>>2]=c[z>>2];if(!(b[o+22>>1]&2)){i=(m|0)<0;if(i)n=(c[o+32>>2]|0)-(c[o+36>>2]|0)|0;else n=m;if(((j+-512|0)>>>0<65025?(j+-1&j|0)==0:0)?(c[o+32>>2]=j,t=o+80|0,s=c[t>>2]|0,s|0):0){k=s+-4|0;c[t>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;s=(c[14820]|0)+1|0;c[14820]=s;c[14821]=(s|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132;break}else{j=Wa[c[29352>>2]&127](k)|0;R=132}while(0);do if((R|0)==132){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{s=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[t>>2]=0}s=o+32|0;t=Se(c[o>>2]|0,s,n)|0;c[o+36>>2]=(c[s>>2]|0)-(n&65535);if(!t){if(!(r<<24>>24)){j=c[g+92>>2]|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];if(b[p+22>>1]&2){m=C;l=7;break}if(i)o=(c[p+32>>2]|0)-(c[p+36>>2]|0)|0;else o=m;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[p+32>>2]=j;n=p+80|0;j=c[n>>2]|0;if(!j)break;k=j+-4|0;c[n>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;t=(c[14820]|0)+1|0;c[14820]=t;c[14821]=(t|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149;break}else{j=Wa[c[29352>>2]&127](k)|0;R=149}while(0);do if((R|0)==149){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{t=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[n>>2]=0}while(0);s=p+32|0;t=Se(c[p>>2]|0,s,o)|0;c[p+36>>2]=(c[s>>2]|0)-(o&65535);if(t|0){m=C;l=7;break}}if(!(a[g+81>>0]|0)){j=a[g+84>>0]|0;do if(j<<24>>24>-1)j=j<<24>>24;else{j=c[D>>2]|0;c[j+4>>2]=c[Q>>2];if(!(a[j+17>>0]|0)){j=0;break}j=(a[j+18>>0]|0)==0?1:2}while(0);n=c[B>>2]|0;c[n+4>>2]=c[z>>2];k=j&255;if(b[n+22>>1]&2){j=n+17|0;if(((k|0)!=0|0)==(d[j>>0]|0))R=162}else{j=n+17|0;R=162}if((R|0)==162){a[j>>0]=(k|0)!=0&1;a[n+18>>0]=(k|0)==2&1}k=g+164|0;a[k>>0]=u;c[w>>2]=v;j=yi(g,f,36229,w)|0;if(j|0){m=C;l=j;break}c[x>>2]=v;j=yi(g,f,36337,x)|0;if(j|0){m=C;l=j;break}a[k>>0]=0;c[y>>2]=v;j=yi(g,f,36391,y)|0;c[H>>2]=c[H>>2]&-5;if(j|0){m=C;l=j;break}c[A>>2]=v;j=yi(g,f,36542,A)|0;if(j|0){m=C;l=j;break}j=0;do{k=d[36672+j>>0]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];k=(k<<2)+36|0;n=(c[(c[n+12>>2]|0)+56>>2]|0)+k|0;n=(d[n+1>>0]<<16|d[n>>0]<<24|d[n+2>>0]<<8|d[n+3>>0])+(d[36672+(j|1)>>0]|0)|0;p=c[B>>2]|0;c[p+4>>2]=c[z>>2];p=c[p+12>>2]|0;o=c[p+56>>2]|0;p=c[p+72>>2]|0;q=c[p+20>>2]|0;do if(!(b[p+28>>1]&4))R=172;else{if((c[q+24>>2]|0)>>>0<(c[p+24>>2]|0)>>>0){R=172;break}if(!(c[q+96>>2]|0))break;l=Ve(p)|0;R=176}while(0);do if((R|0)==172){l=c[q+40>>2]|0;if(l|0){m=C;break d}if((c[q+148>>2]|0)>>>0>(c[q+152>>2]|0)>>>0){l=Wf(p)|0;R=176;break}else{l=Xf(p)|0;R=176;break}}while(0);if((R|0)==176?(R=0,l|0):0){m=C;break d}f=o+k|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;j=j+2|0}while(j>>>0<10);f:do if(h){k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=c[z>>2]|0;l=c[B>>2]|0;c[l+4>>2]=j;k=c[(c[k>>2]|0)+60>>2]|0;n=c[k>>2]|0;do if(!n)R=182;else{x=c[l+32>>2]|0;x=Yv(c[l+44>>2]|0,0,x|0,((x|0)<0)<<31>>31|0)|0;f=L()|0;j=y;c[j>>2]=x;c[j+4>>2]=f;j=Ya[c[n+40>>2]&127](k,11,y)|0;j=(j|0)==12?0:j;if(j|0)break;j=c[z>>2]|0;R=182}while(0);do if((R|0)==182){l=A;n=l+48|0;do{c[l>>2]=0;l=l+4|0}while((l|0)<(n|0));c[A+20>>2]=j;c[A+24>>2]=z;j=A+4|0;c[j>>2]=Q;c[A+16>>2]=1;Yb(A,2147483647)|0;k=dc(A)|0;if(!k){f=(c[D>>2]|0)+22|0;b[f>>1]=b[f>>1]&-3;break f}j=c[c[(c[j>>2]|0)+4>>2]>>2]|0;if(a[j+12>>0]|0){j=k;break}Ff(j);j=k}while(0);m=C;l=j;break d}while(0);c[(c[B>>2]|0)+4>>2]=c[z>>2];l=cc(z,0)|0;if(l|0){m=C;break}l=bc(z,0)|0;k=(l|0)!=0;j=h^1;do if(k|j)k=k?2:0;else{j=c[B>>2]|0;c[j+4>>2]=c[z>>2];if(!(a[j+17>>0]|0))l=0;else l=(a[j+18>>0]|0)==0?1:2;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];if(b[k+22>>1]&2){j=k+17|0;if(((l|0)!=0|0)!=(d[j>>0]|0)){k=0;l=0;j=0;break}}else j=k+17|0;a[j>>0]=(l|0)!=0&1;a[k+18>>0]=(l|0)==2&1;k=0;l=0;j=0}while(0);if(j|(k&3)!=0){m=C;break}j=c[(c[B>>2]|0)+32>>2]|0;n=c[D>>2]|0;c[n+4>>2]=c[Q>>2];o=n+22|0;if(b[o>>1]&2){m=C;l=8;break}if(i)m=(c[n+32>>2]|0)-(c[n+36>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n+32>>2]=j;l=n+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207;break}else{j=Wa[c[29352>>2]&127](k)|0;R=207}while(0);do if((R|0)==207){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{R=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-R;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);R=n+32|0;l=Se(c[n>>2]|0,R,m)|0;c[n+36>>2]=(c[R>>2]|0)-(m&65535);b[o>>1]=b[o>>1]|2;m=C}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=7}}else{m=C;l=j}}else{m=C;l=j}}else{m=0;l=j}while(0);a[g+164>>0]=0;c[H>>2]=I;k=E;c[k>>2]=F;c[k+4>>2]=G;c[J>>2]=K;c[M>>2]=N;a[O>>0]=P;k=c[D>>2]|0;c[k+4>>2]=c[Q>>2];j=k+22|0;if(!(b[j>>1]&2)){P=k+32|0;R=k+36|0;Q=(c[P>>2]|0)-(c[R>>2]|0)|0;Se(c[k>>2]|0,P,Q)|0;c[R>>2]=(c[P>>2]|0)-(Q&65535);b[j>>1]=b[j>>1]|2}a[S>>0]=1;if(m|0){S=m+4|0;ug(c[S>>2]|0);c[S>>2]=0;c[m+12>>2]=0}$b(g);g=l;Ra=T;return g|0}function lh(a){a=a|0;var c=0;c=a+8|0;if(!(b[c>>1]&9216)){b[c>>1]=1;b[c>>1]=4;return a|0}else{Dg(a);b[c>>1]=4;return a|0}return 0}function mh(a,d,e){a=a|0;d=d|0;e=e|0;var f=0;f=a+8|0;do Dg(a);while((b[f>>1]&9216)!=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];if(b[d+8>>1]&2048)return;b[f>>1]=b[f>>1]&-7169&65535|e;return}function nh(d){d=d|0;var e=0,f=0,g=0,h=0;g=d+8|0;f=b[g>>1]|0;h=d+12|0;do if(f&16384){e=(c[d>>2]|0)+(c[h>>2]|0)|0;if((e|0)<1)if(!(f&16))break;else e=1;if(!(Eg(d,e,1)|0)){gw((c[d+16>>2]|0)+(c[h>>2]|0)|0,0,c[d>>2]|0)|0;c[h>>2]=(c[h>>2]|0)+(c[d>>2]|0);b[g>>1]=b[g>>1]&-16897}}while(0);e=d+16|0;f=d+10|0;if(!(Lg(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)){d=0;return d|0}d=(Og(c[e>>2]|0,d,c[h>>2]|0,a[f>>0]|0)|0)==0;d=d?4:8;return d|0}function oh(d){d=d|0;var e=0,f=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;o=Ra;Ra=Ra+16|0;l=o+8|0;m=o;n=d+8|0;e=b[n>>1]|0;if(e&13){m=e;m=m&-16403;b[n>>1]=m;Ra=o;return}j=d+16|0;k=d+12|0;e=d+10|0;f=Og(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if(f){i=d;h=c[i>>2]|0;i=c[i+4>>2]|0;Lg(c[j>>2]|0,d,c[k>>2]|0,a[e>>0]|0)|0;if((f|0)==1?(g[l>>3]=+g[d>>3],g[m>>3]=+(h>>>0)+4294967296.0*+(i|0),(Lu(l,m,8)|0)==0):0){e=d;c[e>>2]=h;c[e+4>>2]=i;e=4}else e=8}else e=4;m=b[n>>1]&15904|e;b[n>>1]=m;m=m&-16403;b[n>>1]=m;Ra=o;return}function ph(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0,p=0;p=Ra;Ra=Ra+80|0;n=p+40|0;o=p;i=f+4|0;h=a[i>>0]|0;if((a[d+10>>0]|0)==h<<24>>24){o=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[d+12>>2]|0,c[d+16>>2]|0,c[e+12>>2]|0,c[e+16>>2]|0)|0;Ra=p;return o|0}m=c[d+32>>2]|0;j=n+8|0;c[n+32>>2]=m;k=n+24|0;c[k>>2]=0;l=o+8|0;b[l>>1]=1;c[o+32>>2]=m;m=o+24|0;c[m>>2]=0;c[n>>2]=c[d>>2];c[n+4>>2]=c[d+4>>2];c[n+8>>2]=c[d+8>>2];c[n+12>>2]=c[d+12>>2];c[n+16>>2]=c[d+16>>2];if(!(b[d+8>>1]&2048))b[j>>1]=b[j>>1]&-7169|4096;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];if(!(b[e+8>>1]&2048))b[l>>1]=b[l>>1]&-7169|4096;d=b[j>>1]|0;if((d&514)==514?(a[n+10>>0]|0)==h<<24>>24:0)e=c[n+16>>2]|0;else if(!(d&1)){e=Gg(n,h)|0;h=a[i>>0]|0}else e=0;d=b[l>>1]|0;if((d&514)==514?(a[o+10>>0]|0)==h<<24>>24:0){d=c[o+16>>2]|0;h=17}else if(!(d&1)){d=Gg(o,h)|0;h=17}else h=18;if((h|0)==17)if((e|0)==0|(d|0)==0)h=18;else d=_a[c[f+12>>2]&127](c[f+8>>2]|0,c[n+12>>2]|0,e,c[o+12>>2]|0,d)|0;if((h|0)==18)if(!g)d=0;else{a[g>>0]=7;d=0}if(!((b[j>>1]&9216)==0&(c[k>>2]|0)==0))Cg(n);if(!((b[l>>1]&9216)==0&(c[m>>2]|0)==0))Cg(o);o=d;Ra=p;return o|0}function qh(d,e){d=d|0;e=e|0;var f=0,g=0,h=0,i=0;h=c[d+12>>2]|0;i=c[e+12>>2]|0;f=b[d+8>>1]|0;g=b[e+8>>1]|0;if(!((g|f)&16384)){e=Lu(c[d+16>>2]|0,c[e+16>>2]|0,(h|0)>(i|0)?i:h)|0;return ((e|0)==0?h-i|0:e)|0}f=f&16384;if((f&g)<<16>>16){i=(c[d>>2]|0)-(c[e>>2]|0)|0;return i|0}if(!(f<<16>>16)){g=c[d+16>>2]|0;a:do if((h|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=1;break}f=f+1|0;if((f|0)>=(h|0))break a}return f|0}while(0);i=h-(c[e>>2]|0)|0;return i|0}else{g=c[e+16>>2]|0;b:do if((i|0)>0){f=0;while(1){if(a[g+f>>0]|0){f=-1;break}f=f+1|0;if((f|0)>=(i|0))break b}return f|0}while(0);i=(c[d>>2]|0)-i|0;return i|0}return 0}function rh(b){b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+16|0;f=g;d=g+12|0;e=b+64|0;e=Xg(c[b+40>>2]|0,0,c[e>>2]|0,c[e+4>>2]|0,0,d)|0;if(e|0){f=e;Ra=g;return f|0}if(!(c[d>>2]|0)){a[b+3>>0]=0;c[b+28>>2]=0;f=0;Ra=g;return f|0}else{c[f>>2]=32306;c[f+4>>2]=79626;c[f+8>>2]=31517;Db(11,32001,f);f=11;Ra=g;return f|0}return 0}function sh(b){b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0,j=0;i=Ra;Ra=Ra+16|0;f=i;g=c[b+40>>2]|0;d=a[g>>0]|0;do if((d&255)>2){c[f>>2]=0;if(d<<24>>24==4){d=c[g+4>>2]|0;if(!d)d=0;else h=19}else{a[g>>0]=1;d=c[7389]|0;if((d|0)!=0?(Wa[d&127](410)|0)!=0:0)d=10;else{e=g+16|0;d=g+56|0;d=th(g,c[e>>2]|0,c[d>>2]|0,c[d+4>>2]|0,0,f)|0;if(!d){d=c[e>>2]|0;do if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{j=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0);c[e>>2]=0;e=c[f>>2]|0;d=g+4|0;if(!e)if(!(c[d>>2]|0))d=a[g>>0]|0;else h=14;else{c[d>>2]=e;h=14}if((h|0)==14){d=a[g>>0]|0;if(!(d<<24>>24)){a[g>>0]=2;d=2}}h=20;break}}h=19}c[b+28>>2]=0}else h=20;while(0);if((h|0)==20){c[b+28>>2]=0;if(!(d<<24>>24)){j=0;Ra=i;return j|0}else d=0}a[b+2>>0]=1;j=d;Ra=i;return j|0}function th(d,f,g,h,i,j){d=d|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,o=0,p=0,q=0,r=0,s=0,t=0;t=Ra;Ra=Ra+16|0;r=t;if(!f){s=Xg(d,0,g,h,i,j)|0;Ra=t;return s|0}s=d+112|0;q=c[s>>2]|0;p=q+6|0;n=((e[p>>1]|0)*40|0)+56|0;m=c[q+12>>2]|0;a:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](n)|0;o=26;break}m=Wa[c[29356>>2]&127](n)|0;if((c[14985]|0)>>>0>>0)c[14985]=n;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;l=Tv(k|0,l|0,m|0,((m|0)<0)<<31>>31|0)|0;k=L()|0;c[14768]=((k|0)<0|(k|0)==0&l>>>0<=n>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){s=7;Ra=t;return s|0}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0){s=7;Ra=t;return s|0}}else{do if(!(0<0|(0==0?(e[m+276>>1]|0)>>>0>>0:0))){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];o=m+284|0;c[o>>2]=(c[o>>2]|0)+1;o=26;break a}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,n,0)|0;o=26}while(0);if((o|0)==26)if(!k){s=7;Ra=t;return s|0}else m=k;c[m+4>>2]=m+16;c[m>>2]=q;o=m+8|0;b[o>>1]=(e[p>>1]|0)+1;_g(q,g,f,m);p=b[o>>1]|0;if(p<<16>>16!=0?(p&65535)<=(e[q+8>>1]|0):0)l=Xg(d,m,g,h,i,j)|0;else{c[r>>2]=32306;c[r+4>>2]=64001;c[r+8>>2]=31517;Db(11,32001,r);l=11}k=c[(c[s>>2]|0)+12>>2]|0;if(k|0){if(c[k+480>>2]|0){Xd(k,m);s=l;Ra=t;return s|0}s=m;if((c[k+304>>2]|0)>>>0<=s>>>0?(c[k+308>>2]|0)>>>0>s>>>0:0){s=k+300|0;c[m>>2]=c[s>>2];c[s>>2]=m;s=l;Ra=t;return s|0}}if(!(c[7324]|0)){ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}else{s=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);s=l;Ra=t;return s|0}return 0}function uh(d,e,f,g){d=d|0;e=e|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0,l=0;l=Ra;Ra=Ra+16|0;h=l;k=g+8|0;b[k>>1]=1;j=c[d+20>>2]|0;j=Yv(c[j+44>>2]|0,0,c[j+32>>2]|0,0)|0;i=L()|0;if(i>>>0<0|(i|0)==0&j>>>0<(f+e|0)>>>0){c[h>>2]=32306;c[h+4>>2]=75549;c[h+8>>2]=31517;Db(11,32001,h);k=11;Ra=l;return k|0}h=f+1|0;j=g+24|0;do if((c[j>>2]|0)<(h|0)){h=Eg(g,h,0)|0;if(!h){h=g+16|0;i=h;h=c[h>>2]|0;break}else{k=h;Ra=l;return k|0}}else{h=c[g+20>>2]|0;i=g+16|0;c[i>>2]=h;b[k>>1]=1}while(0);h=cg(d,e,f,h,0)|0;if(!h){a[(c[i>>2]|0)+f>>0]=0;b[k>>1]=16;c[g+12>>2]=f;k=0;Ra=l;return k|0}if((b[k>>1]&9216)==0?(c[j>>2]|0)==0:0){k=h;Ra=l;return k|0}Cg(g);k=h;Ra=l;return k|0}function vh(a,e,f){a=a|0;e=e|0;f=f|0;var i=0,j=0,k=0,l=0,m=0;l=Ra;Ra=Ra+16|0;j=l+8|0;k=l;i=(d[a+1>>0]|0)<<16|(d[a>>0]|0)<<24|(d[a+2>>0]|0)<<8|(d[a+3>>0]|0);a=(d[a+5>>0]|0)<<16|(d[a+4>>0]|0)<<24|(d[a+6>>0]|0)<<8|(d[a+7>>0]|0);m=f;c[m>>2]=a;c[m+4>>2]=i;if((e|0)==6){k=4;m=f+8|0;b[m>>1]=k;Ra=l;return}c[h>>2]=a;c[h+4>>2]=i;g[j>>3]=+g[h>>3];g[k>>3]=+g[j>>3];k=+g[j>>3]==+g[k>>3]?8:1;m=f+8|0;b[m>>1]=k;Ra=l;return}function wh(b,c,d){b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+16|0;g=h;if(d>>>0>16777215|(d|0)==16777215&c>>>0>4294967295){a[b+8>>0]=c;g=bw(c|0,d|0,8)|0;L()|0;a[b+7>>0]=g&255|-128;g=bw(c|0,d|0,15)|0;L()|0;a[b+6>>0]=g&255|-128;g=bw(c|0,d|0,22)|0;L()|0;a[b+5>>0]=g&255|-128;g=bw(c|0,d|0,29)|0;L()|0;a[b+4>>0]=g&255|-128;g=bw(c|0,d|0,36)|0;L()|0;a[b+3>>0]=g&255|-128;g=bw(c|0,d|0,43)|0;L()|0;a[b+2>>0]=g&255|-128;g=bw(c|0,d|0,50)|0;L()|0;a[b+1>>0]=g&255|-128;g=bw(c|0,d|0,57)|0;L()|0;a[b>>0]=g&255|-128;g=9;Ra=h;return g|0}e=0;f=c;while(1){c=e+1|0;a[g+e>>0]=f&255|-128;f=bw(f|0,d|0,7)|0;d=L()|0;if((f|0)==0&(d|0)==0)break;else e=c}a[g>>0]=a[g>>0]&127;d=0;while(1){a[b+d>>0]=a[g+e>>0]|0;if((e|0)>0){e=e+-1|0;d=d+1|0}else break}Ra=h;return c|0}function xh(e){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=Ra;Ra=Ra+32|0;n=o+16|0;i=o;m=e+68|0;f=a[m>>0]|0;do if(f<<24>>24>-1){h=e+116|0;g=c[h>>2]|0;if(!(f<<24>>24)){f=h;j=26}else{g=c[g+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f;if(f<<24>>24)do{g=c[(c[e+120+(f<<24>>24<<2)>>2]|0)+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);f=a[m>>0]|0}else{l=c[g+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[g+16>>2]=c[l>>2];c[l>>2]=g}f=f+-1<<24>>24;a[m>>0]=f}while(f<<24>>24!=0);k=c[e+120>>2]|0;c[h>>2]=k;f=h;l=k}}else{h=e+64|0;f=c[h>>2]|0;if(!f){a[e>>0]=1;n=16;Ra=o;return n|0}g=a[e>>0]|0;if((g&255)>2){if(g<<24>>24==4){n=c[e+4>>2]|0;Ra=o;return n|0}f=e+16|0;g=c[f>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{l=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-l;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[f>>2]=0;a[e>>0]=1;f=c[h>>2]|0}h=e+116|0;f=yh(c[(c[e+8>>2]|0)+4>>2]|0,f,h,0,d[e+2>>0]|0)|0;if(!f){a[m>>0]=0;g=c[h>>2]|0;a[e+69>>0]=a[g+2>>0]|0;f=h;j=26;break}a[e>>0]=1;n=f;Ra=o;return n|0}while(0);do if((j|0)==26){if(a[g>>0]|0?((c[e+112>>2]|0)==0|0)==(d[g+2>>0]|0):0){l=g;k=g;break}c[i>>2]=32306;c[i+4>>2]=68367;c[i+8>>2]=31517;Db(11,32001,i);n=11;Ra=o;return n|0}while(0);g=e+70|0;b[g>>1]=0;h=e+50|0;b[h>>1]=0;i=e+1|0;j=a[i>>0]&-15;a[i>>0]=j;if(b[k+24>>1]|0){a[e>>0]=0;n=0;Ra=o;return n|0}if(a[k+8>>0]|0){a[e>>0]=1;n=16;Ra=o;return n|0}if((c[k+4>>2]|0)==1){n=(c[k+56>>2]|0)+((d[k+9>>0]|0)+8)|0;p=a[n>>0]|0;q=a[n+1>>0]|0;k=a[n+2>>0]|0;n=a[n+3>>0]|0;a[e>>0]=0;r=c[e+20>>2]|0;b[h>>1]=0;a[i>>0]=j;b[e+72>>1]=0;c[e+120>>2]=l;b[g>>1]=0;a[m>>0]=1;n=yh(r,(q&255)<<16|(p&255)<<24|(k&255)<<8|n&255,f,e,d[e+2>>0]|0)|0;Ra=o;return n|0}else{c[n>>2]=32306;c[n+4>>2]=68380;c[n+8>>2]=31517;Db(11,32001,n);r=11;Ra=o;return r|0}return 0}function yh(d,e,f,g,h){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;n=Ra;Ra=Ra+32|0;l=n+16|0;i=n;j=n+28|0;do if((c[d+44>>2]|0)>>>0>=e>>>0){k=c[d>>2]|0;h=Za[c[k+204>>2]&127](k,e,j,h)|0;if(!h){k=c[j>>2]|0;i=k+8|0;h=c[i>>2]|0;c[f>>2]=h;if(!(a[h>>0]|0)){i=c[i>>2]|0;j=i+4|0;if((c[j>>2]|0)!=(e|0)){c[i+56>>2]=c[k+4>>2];c[i+72>>2]=k;c[i+52>>2]=d;c[j>>2]=e;a[i+9>>0]=(e|0)==1?100:0;h=c[f>>2]|0}h=Gf(h)|0;if(!h)m=8}else m=8;if((m|0)==8){if(!g){g=0;Ra=n;return g|0}m=c[f>>2]|0;if(b[m+24>>1]|0?(a[m+2>>0]|0)==(a[g+69>>0]|0):0){g=0;Ra=n;return g|0}c[l>>2]=32306;c[l+4>>2]=65376;c[l+8>>2]=31517;Db(11,32001,l);h=11}i=c[f>>2]|0;if(i){i=c[i+72>>2]|0;if(!(b[i+28>>1]&32)){Df(i);break}else{m=c[i+20>>2]|0;f=m+120|0;c[f>>2]=(c[f>>2]|0)+-1;m=m+136|0;c[i+16>>2]=c[m>>2];c[m>>2]=i;break}}}}else{c[i>>2]=32306;c[i+4>>2]=65355;c[i+8>>2]=31517;Db(11,32001,i);h=11}while(0);if(!g){g=h;Ra=n;return g|0}f=g+68|0;m=(a[f>>0]|0)+-1<<24>>24;a[f>>0]=m;c[g+116>>2]=c[g+120+(m<<24>>24<<2)>>2];g=h;Ra=n;return g|0}function zh(f,g,h,i){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;z=Ra;Ra=Ra+80|0;m=z+56|0;x=z+40|0;k=z+24|0;l=z+68|0;p=z;if((c[f+44>>2]|0)>>>0>>0){c[k>>2]=32306;c[k+4>>2]=72344;c[k+8>>2]=31517;Db(11,32001,k);y=11;Ra=z;return y|0}g=yh(f,g,l,0,0)|0;if(g|0){y=g;Ra=z;return y|0}w=c[l>>2]|0;v=w+1|0;if(a[v>>0]|0){c[m>>2]=32306;c[m+4>>2]=72349;c[m+8>>2]=31517;Db(11,32001,m);a[v>>0]=0;if(!w){y=11;Ra=z;return y|0}else j=11}else{a[v>>0]=1;t=w+9|0;s=d[t>>0]|0;u=w+24|0;a:do if(!(b[u>>1]|0)){g=0;r=w+8|0;y=13}else{l=w+56|0;m=w+26|0;n=w+64|0;o=w+8|0;k=0;do{g=(c[n>>2]|0)+(k<<1)|0;g=(c[l>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[m>>1])|0;if((a[o>>0]|0)==0?(q=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0,q|0):0){j=q;break a}g=Ah(w,g,p)|0;k=k+1|0;if(g|0){j=g;break a}g=b[u>>1]|0}while(k>>>0<(g&65535)>>>0);g=g&65535;r=o;y=13}while(0);b:do if((y|0)==13){if(!(a[r>>0]|0)){g=(c[w+56>>2]|0)+(s+8)|0;g=zh(f,d[g+1>>0]<<16|d[g>>0]<<24|d[g+2>>0]<<8|d[g+3>>0],1,i)|0;if(g|0){j=g;break}}else if(i|0)c[i>>2]=(c[i>>2]|0)+g;if(h|0){j=Bh(c[w+52>>2]|0,w,c[w+4>>2]|0)|0;break}g=c[w+72>>2]|0;k=c[g+20>>2]|0;if((b[g+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[g+24>>2]|0)>>>0:0){if(c[k+96>>2]|0){j=Ve(g)|0;y=27}}else y=23;do if((y|0)==23){j=c[k+40>>2]|0;if(j|0)break b;if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){j=Wf(g)|0;y=27;break}else{j=Xf(g)|0;y=27;break}}while(0);if((y|0)==27?j|0:0)break;f=c[w+56>>2]|0;j=a[f+s>>0]|8;o=j&255;l=w+52|0;q=c[l>>2]|0;k=d[t>>0]|0;if(!(b[q+22>>1]&12)){g=f+k|0;p=q+36|0}else{p=q+36|0;g=f+k|0;gw(g|0,0,(c[p>>2]|0)-k|0)|0}a[g>>0]=j;m=k+8|0;n=m&65535;g=f+(k+1)|0;a[g>>0]=0;a[g+1>>0]=0;a[g+2>>0]=0;a[g+3>>0]=0;a[f+(k+7)>>0]=0;g=f+(k+5)|0;a[g>>0]=(c[p>>2]|0)>>>8;a[g+1>>0]=c[p>>2];c[w+20>>2]=(c[p>>2]|0)-m&65535;g=o>>>3;a[r>>0]=g;g=4-(g<<2)&255;j=w+10|0;a[j>>0]=g;c[w+76>>2]=120;k=c[l>>2]|0;switch((o&247)<<24>>24){case 5:{a[w+2>>0]=1;a[w+3>>0]=1;c[w+80>>2]=180;b[w+14>>1]=b[k+28>>1]|0;j=k+30|0;y=35;break}case 2:{a[w+2>>0]=0;a[w+3>>0]=0;c[w+80>>2]=179;b[w+14>>1]=b[k+24>>1]|0;j=k+26|0;y=35;break}default:{c[x>>2]=32306;c[x+4>>2]=65035;c[x+8>>2]=31517;Db(11,32001,x);g=a[j>>0]|0}}if((y|0)==35){b[w+16>>1]=b[j>>1]|0;a[w+11>>0]=a[k+21>>0]|0}b[w+18>>1]=n;c[w+60>>2]=f+(c[p>>2]|0);c[w+64>>2]=f+m;c[w+68>>2]=f+(g&255);a[w+12>>0]=0;b[w+26>>1]=(c[q+32>>2]|0)+65535;b[u>>1]=0;a[w>>0]=1;j=0}while(0);a[v>>0]=0}g=c[w+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);y=j;Ra=z;return y|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g;y=j;Ra=z;return y|0}return 0}function Ah(f,g,h){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=Ra;Ra=Ra+64|0;s=t+32|0;r=t+16|0;i=t;o=t+48|0;p=t+44|0;cb[c[f+80>>2]&255](f,g,h);k=e[h+16>>1]|0;j=c[h+12>>2]|0;if((j|0)==(k|0)){s=0;Ra=t;return s|0}g=g+(e[h+18>>1]|0)|0;if(g>>>0>(c[f+60>>2]|0)>>>0){c[i>>2]=32306;c[i+4>>2]=69515;c[i+8>>2]=31517;Db(11,32001,i);s=11;Ra=t;return s|0}h=g+-4|0;n=c[f+52>>2]|0;i=(c[n+36>>2]|0)+-4|0;g=j+~k+i|0;if(i>>>0>g>>>0){s=0;Ra=t;return s|0}l=n+44|0;f=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=(g>>>0)/(i>>>0)|0;while(1){j=j+-1|0;c[o>>2]=0;c[p>>2]=0;if(f>>>0<2){m=8;break}if(f>>>0>(c[l>>2]|0)>>>0){m=8;break}k=(j|0)==0;if(!k){g=dg(n,f,p,o)|0;if(g|0)break;g=c[p>>2]|0;if(g)m=20;else m=12}else m=12;a:do if((m|0)==12){g=(c[n>>2]|0)+212|0;i=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,f,0)|0;do if(i|0){g=c[g>>2]|0;h=c[i+4>>2]|0;if(!(c[h>>2]|0)){g=sf(g,f,i)|0;if(!g)break;else h=g}else{m=g+12|0;c[m>>2]=(c[m>>2]|0)+1;m=h+30|0;b[m>>1]=(b[m>>1]|0)+1<<16>>16}g=c[h+8>>2]|0;i=g+4|0;if((c[i>>2]|0)==(f|0)){c[p>>2]=g;if(!g){m=22;break a}else{m=20;break a}}else{c[g+56>>2]=c[h+4>>2];c[g+72>>2]=h;c[g+52>>2]=n;c[i>>2]=f;a[g+9>>0]=0;c[p>>2]=g;m=20;break a}}while(0);c[p>>2]=0;g=0;m=22}while(0);if((m|0)==20){m=0;if((b[(c[g+72>>2]|0)+30>>1]|0)==1)m=22;else{c[s>>2]=32306;c[s+4>>2]=69552;c[s+8>>2]=31517;Db(11,32001,s);g=11}}if((m|0)==22){m=0;g=Bh(n,g,f)|0}h=c[p>>2]|0;do if(h|0?(q=c[h+72>>2]|0,q|0):0)if(!(b[q+28>>1]&32)){Df(q);break}else{f=c[q+20>>2]|0;i=f+120|0;c[i>>2]=(c[i>>2]|0)+-1;f=f+136|0;c[q+16>>2]=c[f>>2];c[f>>2]=q;break}while(0);if((g|0)!=0|k){m=30;break}else f=c[o>>2]|0}if((m|0)==8){c[r>>2]=32306;c[r+4>>2]=69532;c[r+8>>2]=31517;Db(11,32001,r);g=11}else if((m|0)==30){Ra=t;return g|0}s=g;Ra=t;return s|0}function Bh(f,g,h){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0;B=Ra;Ra=Ra+48|0;r=B+16|0;j=B;s=B+32|0;A=B+28|0;m=c[f+12>>2]|0;if(h>>>0>=2?(x=f+44|0,(c[x>>2]|0)>>>0>=h>>>0):0){do if(!g){g=(c[f>>2]|0)+212|0;k=Ya[c[29436>>2]&127](c[(c[g>>2]|0)+44>>2]|0,h,0)|0;if(k){g=c[g>>2]|0;j=c[k+4>>2]|0;if(!(c[j>>2]|0)){g=sf(g,h,k)|0;if(!g){g=0;break}else j=g}else{z=g+12|0;c[z>>2]=(c[z>>2]|0)+1;z=j+30|0;b[z>>1]=(b[z>>1]|0)+1<<16>>16}g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}}else g=0}else{z=c[g+72>>2]|0;q=z+30|0;b[q>>1]=(b[q>>1]|0)+1<<16>>16;z=(c[z+12>>2]|0)+12|0;c[z>>2]=(c[z>>2]|0)+1}while(0);k=c[m+72>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;z=23;break}else{j=Ve(k)|0;z=22;break}else z=17;while(0);do if((z|0)==17){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;i=0;z=105;break}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){j=Wf(k)|0;z=22;break}else{j=Xf(k)|0;z=22;break}}while(0);if((z|0)==22){c[A>>2]=j;if(!j)z=23;else{i=0;z=105}}a:do if((z|0)==23){q=m+56|0;p=c[q>>2]|0;j=p+36|0;k=p+37|0;m=p+38|0;p=p+39|0;l=d[k>>0]<<16|d[j>>0]<<24|d[m>>0]<<8|d[p>>0];o=l+1|0;a[j>>0]=o>>>24;a[k>>0]=o>>>16;a[m>>0]=o>>>8;a[p>>0]=o;p=f+22|0;if(!(b[p>>1]&4))m=g;else{if(!g){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;break}i=c[s>>2]|0;g=c[i+8>>2]|0;j=g+4|0;if((c[j>>2]|0)!=(h|0)){c[g+56>>2]=c[i+4>>2];c[g+72>>2]=i;c[g+52>>2]=f;c[j>>2]=h;a[g+9>>0]=0}c[A>>2]=0}j=c[g+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{n=Ve(j)|0;z=40;break}else z=35;while(0);do if((z|0)==35){i=c[k+40>>2]|0;if(i|0){c[A>>2]=i;i=0;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){n=Wf(j)|0;z=40;break}else{n=Xf(j)|0;z=40;break}}while(0);if((z|0)==40?(c[A>>2]=n,n|0):0){i=0;z=105;break}gw(c[g+56>>2]|0,0,c[(c[g+52>>2]|0)+32>>2]|0)|0;m=g}if(a[f+17>>0]|0?(ig(f,h,2,0,A),c[A>>2]|0):0){i=0;g=m;z=105;break}if(l){n=c[q>>2]|0;n=d[n+33>>0]<<16|d[n+32>>0]<<24|d[n+34>>0]<<8|d[n+35>>0];g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,n,s,0)|0;if(g|0){c[A>>2]=g;i=0;g=m;z=105;break}g=c[s>>2]|0;i=c[g+8>>2]|0;j=i+4|0;if((c[j>>2]|0)==(n|0)){g=i+56|0;l=g;g=c[g>>2]|0}else{o=c[g+4>>2]|0;l=i+56|0;c[l>>2]=o;c[i+72>>2]=g;c[i+52>>2]=f;c[j>>2]=n;a[i+9>>0]=(n|0)==1?100:0;g=o}c[A>>2]=0;o=d[g+5>>0]<<16|d[g+4>>0]<<24|d[g+6>>0]<<8|d[g+7>>0];j=(c[f+36>>2]|0)>>>2;if(o>>>0>(j+-2|0)>>>0){c[r>>2]=32306;c[r+4>>2]=69422;c[r+8>>2]=31517;Db(11,32001,r);c[A>>2]=11;g=m;z=105;break}if(o>>>0<(j+-8|0)>>>0){j=c[i+72>>2]|0;k=c[j+20>>2]|0;do if((b[j+28>>1]&4)!=0?(c[k+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0)if(!(c[k+96>>2]|0)){c[A>>2]=0;break}else{g=Ve(j)|0;z=63;break}else z=58;while(0);do if((z|0)==58){g=c[k+40>>2]|0;if(g|0){c[A>>2]=g;g=m;z=105;break a}if((c[k+148>>2]|0)>>>0>(c[k+152>>2]|0)>>>0){g=Wf(j)|0;z=63;break}else{g=Xf(j)|0;z=63;break}}while(0);if((z|0)==63){c[A>>2]=g;if(g|0){g=m;z=105;break}g=c[l>>2]|0}z=o+1|0;a[g+4>>0]=z>>>24;a[g+5>>0]=z>>>16;a[g+6>>0]=z>>>8;a[g+7>>0]=z;z=(c[l>>2]|0)+((o<<2)+8)|0;a[z>>0]=h>>>24;a[z+1>>0]=h>>>16;a[z+2>>0]=h>>>8;a[z+3>>0]=h;do if(((m|0?(b[p>>1]&4)==0:0)?(t=c[m+72>>2]|0,u=c[t+20>>2]|0,(a[u+12>>0]|0)==0):0)?(v=t+28|0,w=e[v>>1]|0,w&2|0):0){if(c[u+96>>2]|0)break;b[v>>1]=w&65515|16}while(0);n=f+60|0;g=c[n>>2]|0;do if(!g){l=c[x>>2]|0;do if(!(c[7324]|0)){g=Wa[c[29340>>2]&127](512)|0;if(!g)z=83;else z=84}else{g=Wa[c[29356>>2]&127](512)|0;if((c[14985]|0)>>>0<512)c[14985]=512;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){z=c[14978]|0;f=Tv(j|0,k|0,g|0,((g|0)<0)<<31>>31|0)|0;y=L()|0;c[14768]=((y|0)<0|(y|0)==0&f>>>0<=z>>>0)&1}g=Wa[c[29340>>2]&127](g)|0;if(!g){z=83;break}j=Wa[c[29352>>2]&127](g)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0<=(c[14987]|0)>>>0){z=84;break}c[14987]=j;z=84}while(0);if((z|0)==83){c[n>>2]=0;g=7;break}else if((z|0)==84){gw(g+4|0,0,508)|0;c[g>>2]=l;c[n>>2]=g;z=85;break}}else z=85;while(0);if((z|0)==85)if((c[g>>2]|0)>>>0>>0)g=0;else g=df(g,h)|0;c[A>>2]=g;g=m;z=105;break}}else{n=0;i=0}if(!m){g=c[f>>2]|0;g=Za[c[g+204>>2]&127](g,h,s,0)|0;if(g|0){c[A>>2]=g;z=111;break}j=c[s>>2]|0;g=c[j+8>>2]|0;k=g+4|0;if((c[k>>2]|0)!=(h|0)){c[g+56>>2]=c[j+4>>2];c[g+72>>2]=j;c[g+52>>2]=f;c[k>>2]=h;a[g+9>>0]=0}c[A>>2]=0;m=g}g=m+72|0;k=c[g>>2]|0;l=c[k+20>>2]|0;do if((b[k+28>>1]&4)!=0?(c[l+24>>2]|0)>>>0>=(c[k+24>>2]|0)>>>0:0)if(!(c[l+96>>2]|0)){c[A>>2]=0;break}else{y=Ve(k)|0;z=104;break}else z=99;while(0);do if((z|0)==99){j=c[l+40>>2]|0;if(j|0){c[A>>2]=j;g=m;z=105;break a}if((c[l+148>>2]|0)>>>0>(c[l+152>>2]|0)>>>0){y=Wf(k)|0;z=104;break}else{y=Xf(k)|0;z=104;break}}while(0);if((z|0)==104?(c[A>>2]=y,y|0):0){g=m;z=105;break}z=m+56|0;f=c[z>>2]|0;a[f>>0]=n>>>24;a[f+1>>0]=n>>>16;a[f+2>>0]=n>>>8;a[f+3>>0]=n;z=(c[z>>2]|0)+4|0;a[z>>0]=0;a[z+1>>0]=0;a[z+2>>0]=0;a[z+3>>0]=0;z=c[q>>2]|0;a[z+32>>0]=h>>>24;a[z+33>>0]=h>>>16;a[z+34>>0]=h>>>8;a[z+35>>0]=h;a[m>>0]=0;if(!m)z=111;else z=108}while(0);if((z|0)==105)if(!g)z=111;else{a[g>>0]=0;g=g+72|0;z=108}do if((z|0)==108){g=c[g>>2]|0;if(!(b[g+28>>1]&32)){Df(g);z=111;break}else{z=c[g+20>>2]|0;h=z+120|0;c[h>>2]=(c[h>>2]|0)+-1;z=z+136|0;c[g+16>>2]=c[z>>2];c[z>>2]=g;z=111;break}}while(0);do if((z|0)==111?i|0:0){g=c[i+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);break}else{h=c[g+20>>2]|0;z=h+120|0;c[z>>2]=(c[z>>2]|0)+-1;h=h+136|0;c[g+16>>2]=c[h>>2];c[h>>2]=g;break}}while(0);A=c[A>>2]|0;Ra=B;return A|0}c[j>>2]=32306;c[j+4>>2]=69368;c[j+8>>2]=31517;Db(11,32001,j);A=11;Ra=B;return A|0}function Ch(a,b,c){a=a|0;b=b|0;c=c|0;return Fh(a,b,c,0)|0}function Dh(b,f,g){b=b|0;f=f|0;g=g|0;var h=0,i=0,j=0,k=0;h=f+(a[f>>0]&63)|0;switch(a[f+1>>0]|0){case 1:{k=a[h>>0]|0;j=((k|0)<0)<<31>>31;break}case 2:{k=a[h>>0]<<8|d[h+1>>0];j=((k|0)<0)<<31>>31;break}case 3:{k=d[h+1>>0]<<8|a[h>>0]<<16|d[h+2>>0];j=((k|0)<0)<<31>>31;break}case 4:{k=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];j=((k|0)<0)<<31>>31;break}case 5:{k=h+2|0;j=a[h>>0]<<8|d[h+1>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 6:{k=h+4|0;j=d[h+1>>0]<<16|d[h>>0]<<24|d[h+2>>0]<<8|d[h+3>>0];k=d[k+1>>0]<<16|d[k>>0]<<24|d[k+2>>0]<<8|d[k+3>>0];break}case 8:{j=0;k=0;break}case 9:{j=0;k=1;break}case 7:case 0:{g=Fh(b,f,g,0)|0;return g|0}default:{g=Fh(b,f,g,0)|0;return g|0}}i=c[g+4>>2]|0;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>(j|0)|(i|0)==(j|0)&h>>>0>k>>>0){g=a[g+12>>0]|0;return g|0}if((i|0)<(j|0)|(i|0)==(j|0)&h>>>0>>0){g=a[g+13>>0]|0;return g|0}if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;return g|0}return 0}function Eh(b,f,g){b=b|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=Ra;Ra=Ra+32|0;o=p+8|0;j=p;k=f+1|0;i=a[k>>0]|0;l=i&255;do if(i<<24>>24<=-1){h=d[f+2>>0]|0;if(!(h&128)){n=l<<7&16256|h;m=7;break}i=d[f+3>>0]|0;if(i&128){Of(k,j)|0;l=j;h=c[l>>2]|0;if((h|0)==(h|0)?0==(c[l+4>>2]|0):0){n=h;m=7;break}else break}else{n=(l<<14|i)&2080895|h<<7&16256;m=7;break}}else{n=l;m=7}while(0);if((m|0)==7?(n|0)>=12:0){if(!(n&1)){g=a[g+13>>0]|0;Ra=p;return g|0}h=d[f>>0]|0;j=(n+-12|0)/2|0;if((j+h|0)>(b|0)){c[o>>2]=32306;c[o+4>>2]=80874;c[o+8>>2]=31517;Db(11,32001,o);a[g+11>>0]=11;g=0;Ra=p;return g|0}o=c[g+4>>2]|0;i=c[o+12>>2]|0;h=Lu(f+h|0,c[o+16>>2]|0,(j|0)>(i|0)?i:j)|0;if(h|0)if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}h=j-i|0;if(!h)if((e[g+8>>1]|0)>1){g=Fh(b,f,g,1)|0;Ra=p;return g|0}else{f=a[g+10>>0]|0;a[g+14>>0]=1;g=f;Ra=p;return g|0}else if((h|0)>0){g=a[g+13>>0]|0;Ra=p;return g|0}else{g=a[g+12>>0]|0;Ra=p;return g|0}}g=a[g+12>>0]|0;Ra=p;return g|0}function Fh(f,h,i,j){f=f|0;h=h|0;i=i|0;j=j|0;var k=0,l=0,m=0,n=0.0,o=0.0,p=0,q=0,r=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,G=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0;P=Ra;Ra=Ra+96|0;O=P+80|0;N=P+64|0;q=P+48|0;K=P+40|0;M=P;p=c[i+4>>2]|0;if(!j){G=a[h>>0]|0;j=G&255;do if(G<<24>>24<=-1){k=d[h+1>>0]|0;if(!(k&128)){j=j<<7&16256|k;k=2;break}l=d[h+2>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;break}else{k=Of(h,K)|0;G=K;j=c[G>>2]|0;j=((j|0)==(j|0)?0==(c[G+4>>2]|0):0)?j:-1;break}}else k=1;while(0);m=j;r=0;k=k&255;l=j}else{m=h+1|0;G=a[m>>0]|0;j=G&255;do if(G<<24>>24>-1){l=d[h>>0]|0;k=2;w=12}else{k=d[h+2>>0]|0;do if(k&128){l=d[h+3>>0]|0;if(!(l&128)){j=(j<<14|l)&2080895|k<<7&16256;k=3;w=10;break}k=Of(m,K)|0;G=K;j=c[G>>2]|0;if((j|0)==(j|0)?0==(c[G+4>>2]|0):0)w=10;else{j=-1;l=d[h>>0]|0;k=(k&255)+1|0}}else{j=j<<7&16256|k;k=2;w=10}while(0);if((w|0)==10){k=(k&255)+1|0;l=d[h>>0]|0;if(j>>>0<=127){w=12;break}}j=(j+-12|0)>>>1}while(0);if((w|0)==12)j=d[3520+j>>0]|0;m=j+l|0;r=1;p=p+40|0}if(m>>>0>f>>>0){c[q>>2]=32306;c[q+4>>2]=80583;c[q+8>>2]=31517;Db(11,32001,q);a[i+11>>0]=11;i=0;Ra=P;return i|0}E=i+8|0;G=M+12|0;z=M+10|0;A=M+32|0;B=M+8|0;C=M+16|0;D=i+11|0;y=m;x=p;a:while(1){v=x+8|0;j=e[v>>1]|0;b:do if(j&4){j=a[h+k>>0]|0;q=j&255;if((j&255)>9){j=1;w=88;break a}switch(j<<24>>24){case 0:{j=-1;w=88;break a}case 7:{Ug(h+y|0,q,M)|0;m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[M>>3];if(!(o<-9223372036854775808.0))if(!(o>=9223372036854775808.0)?(I=~~o>>>0,J=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0,!((m|0)<(J|0)|(m|0)==(J|0)&j>>>0>>0)):0)if(!((m|0)>(J|0)|(m|0)==(J|0)&j>>>0>I>>>0)){n=+(j>>>0)+4294967296.0*+(m|0);if(o>n)j=-1;else j=o>24){case 6:{u=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];p=d[m+5>>0]<<16|d[m+4>>0]<<24|d[m+6>>0]<<8|d[m+7>>0];break}case 1:{p=a[m>>0]|0;u=((p|0)<0)<<31>>31;break}case 2:{p=a[m>>0]<<8|d[m+1>>0];u=((p|0)<0)<<31>>31;break}case 3:{p=d[m+1>>0]<<8|a[m>>0]<<16|d[m+2>>0];u=((p|0)<0)<<31>>31;break}case 4:{p=d[m+1>>0]<<16|d[m>>0]<<24|d[m+2>>0]<<8|d[m+3>>0];u=((p|0)<0)<<31>>31;break}case 5:{u=a[m>>0]<<8|d[m+1>>0];p=d[m+3>>0]<<16|d[m+2>>0]<<24|d[m+4>>0]<<8|d[m+5>>0];break}default:{u=0;p=q+-8|0}}m=x;j=c[m>>2]|0;m=c[m+4>>2]|0;if((u|0)<(m|0)|(u|0)==(m|0)&p>>>0>>0){j=-1;w=88;break a}else{j=((u|0)>(m|0)|(u|0)==(m|0)&p>>>0>j>>>0)&1;w=87}}else{if(j&8|0){j=a[h+k>>0]|0;u=j&255;if((j&255)>9){j=1;w=88;break a}if(!(j<<24>>24)){j=-1;w=88;break a}Ug(h+y|0,u,M)|0;if(j<<24>>24==7){n=+g[M>>3];o=+g[x>>3];if(no){j=1;w=88;break a}else{j=7;break}}m=M;j=c[m>>2]|0;m=c[m+4>>2]|0;o=+g[x>>3];if(o<-9223372036854775808.0){j=1;w=88;break a}if(o>=9223372036854775808.0){j=-1;w=88;break a}p=~~o>>>0;q=+t(o)>=1.0?(o>0.0?~~+H(+s(o/4294967296.0),4294967295.0)>>>0:~~+F((o-+(~~o>>>0))/4294967296.0)>>>0):0;if((m|0)<(q|0)|(m|0)==(q|0)&j>>>0

      >>0){j=-1;w=88;break a}if((m|0)>(q|0)|(m|0)==(q|0)&j>>>0>p>>>0){j=1;w=88;break a}n=+(j>>>0)+4294967296.0*+(m|0);if(o>n){j=-1;w=88;break a}else{q=u;j=o>0]|0;j=v&255;do if(v<<24>>24<=-1){p=d[m+1>>0]|0;if(!(p&128)){j=j<<7&16256|p;w=61;break}q=d[m+2>>0]|0;if(q&128){Of(m,K)|0;v=K;j=c[v>>2]|0;if((j|0)==(j|0)?0==(c[v+4>>2]|0):0){w=61;break}else{p=-1;break}}else{j=(j<<14|q)&2080895|p<<7&16256;w=61;break}}else w=61;while(0);if((w|0)==61){if(j>>>0<12){j=-1;w=88;break a}if(!(j&1)){j=1;w=88;break a}else p=j}u=(p+-12|0)>>>1;c[G>>2]=u;if((u+y|0)>>>0>f>>>0){w=65;break a}j=c[i>>2]|0;if(r>>>0>=(e[j+8>>1]|0)>>>0){w=65;break a}m=c[j+20+(r<<2)>>2]|0;if(!m){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}else{a[z>>0]=a[j+4>>0]|0;c[A>>2]=c[j+12>>2];b[B>>1]=2;c[C>>2]=h+y;q=p;j=ph(M,x,m,D)|0;w=87;break}}q=h+k|0;m=a[q>>0]|0;p=m&255;if(!(j&16)){q=p;j=m<<24>>24!=0&1;w=87;break}do if(m<<24>>24<=-1){j=d[q+1>>0]|0;if(!(j&128)){p=p<<7&16256|j;break}m=d[q+2>>0]|0;if(!(m&128)){p=(p<<14|m)&2080895|j<<7&16256;break}else{Of(q,K)|0;w=K;p=c[w>>2]|0;p=((p|0)==(p|0)?0==(c[w+4>>2]|0):0)?p:-1;break}}while(0);if(!(p>>>0>11&(p&1|0)==0)){j=-1;w=88;break a}u=(p+-12|0)>>>1;if((u+y|0)>>>0>f>>>0){w=85;break a}if(!(b[v>>1]&16384)){m=c[x+12>>2]|0;j=Lu(h+y|0,c[x+16>>2]|0,(u|0)<(m|0)?u:m)|0;if(!j){q=p;j=u-m|0;w=87;break}else{w=88;break a}}m=h+y|0;if(u|0){j=0;do{if(a[m+j>>0]|0){j=1;w=88;break a}j=j+1|0}while(j>>>0>>0)}q=p;j=u-(c[x>>2]|0)|0;w=87}while(0);if((w|0)==87){w=0;if(!j)j=q;else{w=88;break}}r=r+1|0;if((r|0)==(e[E>>1]|0)){w=96;break}x=x+40|0;if(j>>>0>127)q=(j+-12|0)>>>1;else q=d[3520+j>>0]|0;p=1;m=0;while(1){j=bw(j|0,m|0,7)|0;m=L()|0;if((j|0)==0&(m|0)==0)break;else p=p+1|0}y=q+y|0;k=p+k|0;if(y>>>0>f>>>0|k>>>0>=l>>>0){w=96;break}}if((w|0)==65){c[N>>2]=32306;c[N+4>>2]=80658;c[N+8>>2]=31517;Db(11,32001,N);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==85){c[O>>2]=32306;c[O+4>>2]=80688;c[O+8>>2]=31517;Db(11,32001,O);a[D>>0]=11;i=0;Ra=P;return i|0}else if((w|0)==88){i=(a[(c[(c[i>>2]|0)+16>>2]|0)+r>>0]|0)==0?j:0-j|0;Ra=P;return i|0}else if((w|0)==96){a[i+14>>0]=1;i=a[i+10>>0]|0;Ra=P;return i|0}return 0}function Gh(f){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;A=Ra;Ra=Ra+64|0;u=A+48|0;z=A+32|0;v=A+16|0;l=A;j=A+60|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[j>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;else y=g;Ra=A;return y|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,j)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{x=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-x;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[j>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))k=a[f>>0]|0;else n=15;else{c[g>>2]=h;n=15}if((n|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;k=2}else k=g}g=k;break}}f=g;Ra=A;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=A;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)>0){f=0;Ra=A;return f|0}}while(0);w=f+116|0;j=c[w>>2]|0;x=f+70|0;s=(b[x>>1]|0)+1<<16>>16;b[x>>1]=s;t=j;if(!(a[j>>0]|0)){c[l>>2]=32306;c[l+4>>2]=68870;c[l+8>>2]=31517;Db(11,32001,l);f=11;Ra=A;return f|0}r=(a[j+8>>0]|0)!=0;if((s&65535)<(e[j+24>>1]|0)){if(r){f=0;Ra=A;return f|0}m=f+68|0;n=f+20|0;o=f+50|0;p=f+1|0;q=f+2|0;h=j;l=t;while(1){k=b[x>>1]|0;g=(c[h+64>>2]|0)+((k&65535)<<1)|0;g=(c[h+56>>2]|0)+((d[g>>0]<<8|d[g+1>>0])&e[h+26>>1])|0;h=a[m>>0]|0;if(h<<24>>24>18){n=46;break}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];B=c[n>>2]|0;b[o>>1]=0;a[p>>0]=a[p>>0]&-7;C=h<<24>>24;b[f+72+(C<<1)>>1]=k;c[f+120+(C<<2)>>2]=l;b[x>>1]=0;a[m>>0]=h+1<<24>>24;g=yh(B,g,w,f,d[q>>0]|0)|0;if(g|0){y=g;n=49;break}g=c[w>>2]|0;if(!(a[g+8>>0]|0)){h=g;l=g}else{y=0;n=49;break}}if((n|0)==46){c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}}if(r){k=f+68|0;l=f+50|0;m=f+1|0;while(1){h=a[k>>0]|0;if(!(h<<24>>24)){n=36;break}b[l>>1]=0;a[m>>0]=a[m>>0]&-7;g=b[f+72+((h<<24>>24)+-1<<1)>>1]|0;b[x>>1]=g;i=h+-1<<24>>24;a[k>>0]=i;i=c[f+120+(i<<24>>24<<2)>>2]|0;c[w>>2]=i;h=c[j+72>>2]|0;if(!(b[h+28>>1]&32)){Df(h);i=c[w>>2]|0;g=b[x>>1]|0}else{C=c[h+20>>2]|0;B=C+120|0;c[B>>2]=(c[B>>2]|0)+-1;C=C+136|0;c[h+16>>2]=c[C>>2];c[C>>2]=h}if((g&65535)<(e[i+24>>1]|0))break;else j=i}if((n|0)==36){a[f>>0]=1;C=101;Ra=A;return C|0}if(!(a[i+2>>0]|0)){C=0;Ra=A;return C|0}C=Yg(f,0)|0;Ra=A;return C|0}g=(c[j+56>>2]|0)+((d[j+9>>0]|0)+8)|0;o=f+68|0;h=a[o>>0]|0;if(h<<24>>24>18){c[v>>2]=32306;c[v+4>>2]=68229;c[v+8>>2]=31517;Db(11,32001,v);C=11;Ra=A;return C|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];l=f+20|0;C=c[l>>2]|0;m=f+50|0;b[m>>1]=0;n=f+1|0;a[n>>0]=a[n>>0]&-7;k=h<<24>>24;b[f+72+(k<<1)>>1]=s;c[f+120+(k<<2)>>2]=t;b[x>>1]=0;a[o>>0]=h+1<<24>>24;k=f+2|0;g=yh(C,g,w,f,d[k>>0]|0)|0;if(g|0){C=g;Ra=A;return C|0}while(1){g=c[w>>2]|0;if(a[g+8>>0]|0){y=0;n=49;break}h=b[x>>1]|0;i=(c[g+64>>2]|0)+((h&65535)<<1)|0;i=(c[g+56>>2]|0)+((d[i>>0]<<8|d[i+1>>0])&e[g+26>>1])|0;j=a[o>>0]|0;if(j<<24>>24>18){n=32;break}C=d[i>>0]<<24|d[i+1>>0]<<16|d[i+2>>0]<<8|d[i+3>>0];B=c[l>>2]|0;b[m>>1]=0;a[n>>0]=a[n>>0]&-7;v=j<<24>>24;b[f+72+(v<<1)>>1]=h;c[f+120+(v<<2)>>2]=g;b[x>>1]=0;a[o>>0]=j+1<<24>>24;g=yh(B,C,w,f,d[k>>0]|0)|0;if(g|0){y=g;n=49;break}}if((n|0)==32){c[z>>2]=32306;c[z+4>>2]=68229;c[z+8>>2]=31517;Db(11,32001,z);C=11;Ra=A;return C|0}else if((n|0)==49){Ra=A;return y|0}return 0}function Hh(f){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;w=Ra;Ra=Ra+32|0;u=w+16|0;k=w;i=w+28|0;g=a[f>>0]|0;a:do if(g<<24>>24){do if((g&255)>2){c[i>>2]=0;if(g<<24>>24==4){g=c[f+4>>2]|0;if(!g)break a;Ra=w;return g|0}a[f>>0]=1;g=c[7389]|0;if((g|0)!=0?(Wa[g&127](410)|0)!=0:0)g=10;else{h=f+16|0;g=f+56|0;g=th(f,c[h>>2]|0,c[g>>2]|0,c[g+4>>2]|0,0,i)|0;if(!g){g=c[h>>2]|0;do if(g|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}while(0);c[h>>2]=0;h=c[i>>2]|0;g=f+4|0;if(!h)if(!(c[g>>2]|0))g=a[f>>0]|0;else v=15;else{c[g>>2]=h;v=15}if((v|0)==15){g=a[f>>0]|0;if(!(g<<24>>24)){a[f>>0]=2;g=2}}break}}f=g;Ra=w;return f|0}while(0);switch(g<<24>>24){case 2:break;case 1:{f=101;Ra=w;return f|0}default:break a}a[f>>0]=0;if((c[f+4>>2]|0)<0){f=0;Ra=w;return f|0}}while(0);s=f+116|0;g=c[s>>2]|0;t=f+70|0;h=b[t>>1]|0;j=g;if(!(a[g+8>>0]|0)){r=(c[g+64>>2]|0)+((h&65535)<<1)|0;g=(c[g+56>>2]|0)+((d[r>>0]<<8|d[r+1>>0])&e[g+26>>1])|0;r=f+68|0;i=a[r>>0]|0;if(i<<24>>24>18){c[k>>2]=32306;c[k+4>>2]=68229;c[k+8>>2]=31517;Db(11,32001,k);f=11;Ra=w;return f|0}g=d[g>>0]<<24|d[g+1>>0]<<16|d[g+2>>0]<<8|d[g+3>>0];o=f+20|0;m=c[o>>2]|0;p=f+50|0;b[p>>1]=0;q=f+1|0;a[q>>0]=a[q>>0]&-7;n=i<<24>>24;b[f+72+(n<<1)>>1]=h;c[f+120+(n<<2)>>2]=j;b[t>>1]=0;a[r>>0]=i+1<<24>>24;n=f+2|0;g=yh(m,g,s,f,d[n>>0]|0)|0;if(g|0){f=g;Ra=w;return f|0}g=c[s>>2]|0;b:do if(!(a[g+8>>0]|0)){while(1){k=(c[g+56>>2]|0)+((d[g+9>>0]|0)+8)|0;h=a[k>>0]|0;i=a[k+1>>0]|0;j=a[k+2>>0]|0;k=a[k+3>>0]|0;l=b[g+24>>1]|0;b[t>>1]=l;m=a[r>>0]|0;if(m<<24>>24>18)break;x=c[o>>2]|0;b[p>>1]=0;a[q>>0]=a[q>>0]&-7;y=m<<24>>24;b[f+72+(y<<1)>>1]=l;c[f+120+(y<<2)>>2]=g;b[t>>1]=0;a[r>>0]=m+1<<24>>24;g=yh(x,(i&255)<<16|(h&255)<<24|(j&255)<<8|k&255,s,f,d[n>>0]|0)|0;if(g|0){v=45;break}g=c[s>>2]|0;if(a[g+8>>0]|0)break b}if((v|0)==45){Ra=w;return g|0}c[u>>2]=32306;c[u+4>>2]=68229;c[u+8>>2]=31517;Db(11,32001,u);y=11;Ra=w;return y|0}while(0);b[t>>1]=(e[g+24>>1]|0)+65535;y=0;Ra=w;return y|0}do if(!(h<<16>>16)){i=f+68|0;j=f+50|0;k=f+1|0;while(1){g=a[i>>0]|0;if(!(g<<24>>24))break;b[j>>1]=0;a[k>>0]=a[k>>0]&-7;h=b[f+72+((g<<24>>24)+-1<<1)>>1]|0;b[t>>1]=h;y=c[s>>2]|0;g=g+-1<<24>>24;a[i>>0]=g;c[s>>2]=c[f+120+(g<<24>>24<<2)>>2];g=c[y+72>>2]|0;if(!(b[g+28>>1]&32)){Df(g);h=b[t>>1]|0}else{y=c[g+20>>2]|0;x=y+120|0;c[x>>2]=(c[x>>2]|0)+-1;y=y+136|0;c[g+16>>2]=c[y>>2];c[y>>2]=g}if(h<<16>>16){v=41;break}}if((v|0)==41){g=c[s>>2]|0;break}a[f>>0]=1;y=101;Ra=w;return y|0}while(0);b[t>>1]=h+-1<<16>>16;if(!(a[g+2>>0]|0)){y=0;Ra=w;return y|0}if(a[g+8>>0]|0){y=0;Ra=w;return y|0}y=f+1|0;a[y>>0]=a[y>>0]&-15;b[f+50>>1]=0;y=Hh(f)|0;Ra=w;return y|0}function Ih(f,g){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;r=Ra;Ra=Ra+32|0;q=r+16|0;j=r;o=r+28|0;p=(c[g+32>>2]|0)+(c[g+28>>2]|0)|0;l=c[f+116>>2]|0;k=f+40|0;h=c[k>>2]|0;i=f+48|0;f=e[i>>1]|0;if((h+f|0)>>>0>(c[l+60>>2]|0)>>>0){c[j>>2]=32306;c[j+4>>2]=71650;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=r;return q|0}f=Nh(l,h,g,0,f)|0;if(f|0){q=f;Ra=r;return q|0}f=e[i>>1]|0;if((p|0)==(f|0)){q=0;Ra=r;return q|0}i=(c[k>>2]|0)+f|0;n=c[l+52>>2]|0;j=(c[n+36>>2]|0)+-4|0;i=d[i+1>>0]<<16|d[i>>0]<<24|d[i+2>>0]<<8|d[i+3>>0];m=f;while(1){f=c[n>>2]|0;f=Za[c[f+204>>2]&127](f,i,o,0)|0;if(f|0){h=10;break}h=c[o>>2]|0;k=c[h+8>>2]|0;f=k+4|0;if((c[f>>2]|0)==(i|0)){f=k+72|0;l=f;f=c[f>>2]|0}else{c[k+56>>2]=c[h+4>>2];l=k+72|0;c[l>>2]=h;c[k+52>>2]=n;c[f>>2]=i;a[k+9>>0]=(i|0)==1?100:0;f=h}if((b[f+30>>1]|0)==1){if((j+m|0)>>>0

      >>0){f=c[k+56>>2]|0;h=j;i=d[f+1>>0]<<16|d[f>>0]<<24|d[f+2>>0]<<8|d[f+3>>0]}else{h=p-m|0;f=c[k+56>>2]|0}f=Nh(k,f+4|0,g,m,h)|0;j=h}else{c[q>>2]=32306;c[q+4>>2]=71669;c[q+8>>2]=31517;Db(11,32001,q);f=11}h=c[l>>2]|0;do if(h|0)if(!(b[h+28>>1]&32)){Df(h);break}else{l=c[h+20>>2]|0;k=l+120|0;c[k>>2]=(c[k>>2]|0)+-1;l=l+136|0;c[h+16>>2]=c[l>>2];c[l>>2]=h;break}while(0);if(f|0){h=23;break}m=j+m|0;if((m|0)>=(p|0)){f=0;h=23;break}}if((h|0)==10){q=f;Ra=r;return q|0}else if((h|0)==23){Ra=r;return f|0}return 0}function Jh(a){a=a|0;var b=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;p=Ra;Ra=Ra+80|0;o=p+64|0;j=p+48|0;l=p+32|0;k=p+16|0;g=p;n=c[(c[a+52>>2]|0)+36>>2]|0;i=c[a+56>>2]|0;b=d[a+9>>0]|0;q=i+(b+5)|0;m=b+8+(d[a+10>>0]|0)+((e[a+24>>1]|0)<<1)|0;h=n+-4|0;f=i+(b+1)|0;f=(d[f>>0]|0)<<8|(d[f+1>>0]|0);b=(((d[q>>0]|0)<<8|(d[q+1>>0]|0))+65535&65535)+1+(d[i+(b+7)>>0]|0)|0;a:do if(f){if(f>>>0>>0){c[g>>2]=32306;c[g+4>>2]=65086;c[g+8>>2]=31517;Db(11,32001,g);q=11;Ra=p;return q|0}b:do if((f|0)<=(h|0)){while(1){q=i+f|0;g=f;f=(d[q>>0]|0)<<8|(d[q+1>>0]|0);q=i+(g+2)|0;q=(d[q>>0]|0)<<8|(d[q+1>>0]|0);b=q+b|0;g=q+g|0;if(f>>>0<=(g+3|0)>>>0)break;if((f|0)>(h|0))break b}if(f|0){c[l>>2]=32306;c[l+4>>2]=65101;c[l+8>>2]=31517;Db(11,32001,l);q=11;Ra=p;return q|0}if(g>>>0<=n>>>0)break a;c[j>>2]=32306;c[j+4>>2]=65105;c[j+8>>2]=31517;Db(11,32001,j);q=11;Ra=p;return q|0}while(0);c[k>>2]=32306;c[k+4>>2]=65091;c[k+8>>2]=31517;Db(11,32001,k);q=11;Ra=p;return q|0}while(0);if((b|0)>(n|0)){c[o>>2]=32306;c[o+4>>2]=65117;c[o+8>>2]=31517;Db(11,32001,o);q=11;Ra=p;return q|0}else{c[a+20>>2]=b-m&65535;q=0;Ra=p;return q|0}return 0}function Kh(f,g,h,i){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;q=Ra;Ra=Ra+16|0;k=q;if(c[i>>2]|0){Ra=q;return}p=c[f+56>>2]|0;l=(c[f+64>>2]|0)+(g<<1)|0;j=(d[l>>0]|0)<<8|(d[l+1>>0]|0);m=f+9|0;n=d[m>>0]|0;o=f+52|0;if((j+h|0)>>>0>(c[(c[o>>2]|0)+36>>2]|0)>>>0){c[k>>2]=32306;c[k+4>>2]=69788;c[k+8>>2]=31517;Db(11,32001,k);c[i>>2]=11;Ra=q;return}j=Oh(f,j&65535,h&65535)|0;if(j|0){c[i>>2]=j;Ra=q;return}j=f+24|0;h=(b[j>>1]|0)+-1<<16>>16;b[j>>1]=h;if(!(h<<16>>16)){l=p+(n+1)|0;a[l>>0]=0;a[l+1>>0]=0;a[l+2>>0]=0;a[l+3>>0]=0;a[p+(n+7)>>0]=0;p=p+(n+5)|0;a[p>>0]=(c[(c[o>>2]|0)+36>>2]|0)>>>8;a[p+1>>0]=c[(c[o>>2]|0)+36>>2];c[f+20>>2]=(c[(c[o>>2]|0)+36>>2]|0)+-8-(d[m>>0]|0)-(d[f+10>>0]|0);Ra=q;return}else{fw(l|0,l+2|0,(h&65535)-g<<1|0)|0;p=p+(n+3)|0;a[p>>0]=(e[j>>1]|0)>>>8;a[p+1>>0]=b[j>>1];p=f+20|0;c[p>>2]=(c[p>>2]|0)+2;Ra=q;return}}function Lh(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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;B=Ra;Ra=Ra+64|0;A=B+40|0;o=B+24|0;z=B;n=f+12|0;if((a[n>>0]|0)==0?(w=i+2|0,x=f+20|0,(w|0)<=(c[x>>2]|0)):0){j=c[f+72>>2]|0;n=c[j+20>>2]|0;if((b[j+28>>1]&4)!=0?(c[n+24>>2]|0)>>>0>=(c[j+24>>2]|0)>>>0:0){if(c[n+96>>2]|0){m=Ve(j)|0;v=16}}else v=12;do if((v|0)==12){m=c[n+40>>2]|0;if(!m)if((c[n+148>>2]|0)>>>0>(c[n+152>>2]|0)>>>0){m=Wf(j)|0;v=16;break}else{m=Xf(j)|0;v=16;break}else v=17}while(0);if((v|0)==16?m|0:0)v=17;if((v|0)==17){c[l>>2]=m;Ra=B;return}s=c[f+56>>2]|0;t=f+9|0;n=a[t>>0]|0;j=n&255;c[z>>2]=0;u=f+24|0;p=(e[u>>1]<<1)+(e[f+18>>1]|0)|0;q=s+(j+5)|0;r=q+1|0;m=d[q>>0]<<8|d[r>>0];do if(p>>>0>m>>>0){if((m|0)==0?(c[(c[f+52>>2]|0)+36>>2]|0)==65536:0){o=65536;v=22;break}c[o>>2]=32306;c[o+4>>2]=64824;c[o+8>>2]=31517;Db(11,32001,o);m=11}else{o=m;v=22}while(0);a:do if((v|0)==22){if(!(a[s+(j+2)>>0]|0)){m=p+2|0;if((m|0)>(o|0)?1:(a[s+(j+1)>>0]|0)==0)v=29;else v=25}else{m=p+2|0;if((m|0)>(o|0))v=29;else v=25}do if((v|0)==25){m=Ph(n,c[(c[f+52>>2]|0)+36>>2]|0,s,i,z)|0;if(m|0){m=m-s|0;break}m=c[z>>2]|0;if(m|0)break a;m=p+2|0;v=29}while(0);if((v|0)==29){if((m+i|0)>(o|0)){m=(c[x>>2]|0)+(-2-i)|0;m=Qh(f,(m|0)<4?m:4)|0;c[z>>2]=m;if(m|0)break;m=((d[q>>0]<<8|d[r>>0])+65535&65535)+1|0}else m=o;m=m-i|0;a[q>>0]=m>>>8;a[r>>0]=m}c[x>>2]=(c[x>>2]|0)-(w&65535);if(!k)ew(s+m|0,h|0,i|0)|0;else{ew(s+(m+4)|0,h+4|0,i+-4|0)|0;i=s+m|0;a[i>>0]=k>>>24;a[i+1>>0]=k>>>16;a[i+2>>0]=k>>>8;a[i+3>>0]=k}k=(c[f+64>>2]|0)+(g<<1)|0;fw(k+2|0,k|0,(e[u>>1]|0)-g<<1|0)|0;a[k>>0]=m>>>8;a[k+1>>0]=m;b[u>>1]=(b[u>>1]|0)+1<<16>>16;g=s+((d[t>>0]|0)+4)|0;k=(a[g>>0]|0)+1<<24>>24;a[g>>0]=k;if(!(k<<24>>24)){k=s+((d[t>>0]|0)+3)|0;a[k>>0]=(a[k>>0]|0)+1<<24>>24}m=f+52|0;if(!(a[(c[m>>2]|0)+17>>0]|0)){Ra=B;return}do if((c[l>>2]|0)==0?(cb[c[f+80>>2]&255](f,h,z),y=e[z+16>>1]|0,(c[z+12>>2]|0)>>>0>y>>>0):0){k=c[f+60>>2]|0;if(k>>>0>=h>>>0?k>>>0<(h+y|0)>>>0:0){c[A>>2]=32306;c[A+4>>2]=64569;c[A+8>>2]=31517;Db(11,32001,A);c[l>>2]=11;break}A=h+((e[z+18>>1]|0)+-4)|0;ig(c[m>>2]|0,d[A+1>>0]<<16|d[A>>0]<<24|d[A+2>>0]<<8|d[A+3>>0],3,c[f+4>>2]|0,l)}while(0);Ra=B;return}while(0);c[l>>2]=m;Ra=B;return}if(!j)m=h;else{ew(j|0,h|0,i|0)|0;m=j}if(k|0){a[m>>0]=k>>>24;a[m+1>>0]=k>>>16;a[m+2>>0]=k>>>8;a[m+3>>0]=k}l=a[n>>0]|0;a[n>>0]=l+1<<24>>24;l=l&255;c[f+36+(l<<2)>>2]=m;b[f+28+(l<<1)>>1]=g;Ra=B;return} function lu(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=Ra;Ra=Ra+16|0;n=w;do if(a>>>0<245){k=a>>>0<11?16:a+11&-8;a=k>>>3;m=c[14832]|0;d=m>>>a;if(d&3|0){b=(d&1^1)+a|0;a=59368+(b<<1<<2)|0;d=a+8|0;e=c[d>>2]|0;f=e+8|0;g=c[f>>2]|0;if((g|0)==(a|0))c[14832]=m&~(1<>2]=a;c[d>>2]=g}v=b<<3;c[e+4>>2]=v|3;v=e+v+4|0;c[v>>2]=c[v>>2]|1;v=f;Ra=w;return v|0}l=c[14834]|0;if(k>>>0>l>>>0){if(d|0){b=2<>>12&16;b=b>>>i;d=b>>>5&8;b=b>>>d;g=b>>>2&4;b=b>>>g;a=b>>>1&2;b=b>>>a;e=b>>>1&1;e=(d|i|g|a|e)+(b>>>e)|0;b=59368+(e<<1<<2)|0;a=b+8|0;g=c[a>>2]|0;i=g+8|0;d=c[i>>2]|0;if((d|0)==(b|0)){a=m&~(1<>2]=b;c[a>>2]=d;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[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=h;c[14837]=f;v=i;Ra=w;return v|0}g=c[14833]|0;if(g){d=(g&0-g)+-1|0;f=d>>>12&16;d=d>>>f;e=d>>>5&8;d=d>>>e;h=d>>>2&4;d=d>>>h;i=d>>>1&2;d=d>>>i;j=d>>>1&1;j=c[59632+((e|f|h|i|j)+(d>>>j)<<2)>>2]|0;d=j;i=j;j=(c[j+4>>2]&-8)-k|0;while(1){a=c[d+16>>2]|0;if(!a){a=c[d+20>>2]|0;if(!a)break}h=(c[a+4>>2]&-8)-k|0;f=h>>>0>>0;d=a;i=f?a:i;j=f?h:j}h=i+k|0;if(h>>>0>i>>>0){f=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){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[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);do if(f|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((i|0)==(c[a>>2]|0)){c[a>>2]=d;if(!d){c[14833]=g&~(1<>2]|0)==(i|0)?v:f+20|0)>>2]=d;if(!d)break}c[d+24>>2]=f;b=c[i+16>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}b=c[i+20>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}while(0);if(j>>>0<16){v=j+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[h+4>>2]=j|1;c[h+j>>2]=j;if(l|0){e=c[14837]|0;b=l>>>3;d=59368+(b<<1<<2)|0;b=1<>2]|0}c[a>>2]=e;c[b+12>>2]=e;c[e+8>>2]=b;c[e+12>>2]=d}c[14834]=j;c[14837]=h}v=i+8|0;Ra=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[14833]|0;if(e){f=0-k|0;a=a>>>8;if(a)if(k>>>0>16777215)j=31;else{m=(a+1048320|0)>>>16&8;q=a<>>16&4;q=q<>>16&2;j=14-(i|m|j)+(q<>>15)|0;j=k>>>(j+7|0)&1|j<<1}else j=0;d=c[59632+(j<<2)>>2]|0;a:do if(!d){d=0;a=0;q=61}else{a=0;i=k<<((j|0)==31?0:25-(j>>>1)|0);g=0;while(1){h=(c[d+4>>2]&-8)-k|0;if(h>>>0>>0)if(!h){a=d;f=0;q=65;break a}else{a=d;f=h}q=c[d+20>>2]|0;d=c[d+16+(i>>>31<<2)>>2]|0;g=(q|0)==0|(q|0)==(d|0)?g:q;if(!d){d=g;q=61;break}else i=i<<1}}while(0);if((q|0)==61){if((d|0)==0&(a|0)==0){a=2<>>12&16;m=m>>>h;g=m>>>5&8;m=m>>>g;i=m>>>2&4;m=m>>>i;j=m>>>1&2;m=m>>>j;d=m>>>1&1;a=0;d=c[59632+((g|h|i|j|d)+(m>>>d)<<2)>>2]|0}if(!d){i=a;h=f}else q=65}if((q|0)==65){g=d;while(1){m=(c[g+4>>2]&-8)-k|0;d=m>>>0>>0;f=d?m:f;a=d?g:a;d=c[g+16>>2]|0;if(!d)d=c[g+20>>2]|0;if(!d){i=a;h=f;break}else g=d}}if(((i|0)!=0?h>>>0<((c[14834]|0)-k|0)>>>0:0)?(l=i+k|0,l>>>0>i>>>0):0){g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+20|0;b=c[a>>2]|0;if(!b){a=i+16|0;b=c[a>>2]|0;if(!b){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[i+8>>2]|0;c[v+12>>2]=b;c[b+8>>2]=v}while(0);do if(g){a=c[i+28>>2]|0;d=59632+(a<<2)|0;if((i|0)==(c[d>>2]|0)){c[d>>2]=b;if(!b){e=e&~(1<>2]|0)==(i|0)?v:g+20|0)>>2]=b;if(!b)break}c[b+24>>2]=g;a=c[i+16>>2]|0;if(a|0){c[b+16>>2]=a;c[a+24>>2]=b}a=c[i+20>>2]|0;if(a){c[b+20>>2]=a;c[a+24>>2]=b}}while(0);b:do if(h>>>0<16){v=h+k|0;c[i+4>>2]=v|3;v=i+v+4|0;c[v>>2]=c[v>>2]|1}else{c[i+4>>2]=k|3;c[l+4>>2]=h|1;c[l+h>>2]=h;b=h>>>3;if(h>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<>2]|0}c[a>>2]=l;c[b+12>>2]=l;c[l+8>>2]=b;c[l+12>>2]=d;break}b=h>>>8;if(b)if(h>>>0>16777215)d=31;else{u=(b+1048320|0)>>>16&8;v=b<>>16&4;v=v<>>16&2;d=14-(t|u|d)+(v<>>15)|0;d=h>>>(d+7|0)&1|d<<1}else d=0;b=59632+(d<<2)|0;c[l+28>>2]=d;a=l+16|0;c[a+4>>2]=0;c[a>>2]=0;a=1<>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)!=(h|0)){e=h<<((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)==(h|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=i+8|0;Ra=w;return v|0}else m=k}else m=k}else m=-1;while(0);d=c[14834]|0;if(d>>>0>=m>>>0){b=d-m|0;a=c[14837]|0;if(b>>>0>15){v=a+m|0;c[14837]=v;c[14834]=b;c[v+4>>2]=b|1;c[a+d>>2]=b;c[a+4>>2]=m|3}else{c[14834]=0;c[14837]=0;c[a+4>>2]=d|3;v=a+d+4|0;c[v>>2]=c[v>>2]|1}v=a+8|0;Ra=w;return v|0}h=c[14835]|0;if(h>>>0>m>>>0){t=h-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}if(!(c[14950]|0)){c[14952]=4096;c[14951]=4096;c[14953]=-1;c[14954]=-1;c[14955]=0;c[14943]=0;c[14950]=n&-16^1431655768;a=4096}else a=c[14952]|0;i=m+48|0;j=m+47|0;g=a+j|0;f=0-a|0;k=g&f;if(k>>>0<=m>>>0){v=0;Ra=w;return v|0}a=c[14942]|0;if(a|0?(l=c[14940]|0,n=l+k|0,n>>>0<=l>>>0|n>>>0>a>>>0):0){v=0;Ra=w;return v|0}d:do if(!(c[14943]&4)){d=c[14838]|0;e:do if(d){e=59776;while(1){n=c[e>>2]|0;if(n>>>0<=d>>>0?(n+(c[e+4>>2]|0)|0)>>>0>d>>>0:0)break;a=c[e+8>>2]|0;if(!a){q=128;break e}else e=a}b=g-h&f;if(b>>>0<2147483647){a=hw(b|0)|0;if((a|0)==((c[e>>2]|0)+(c[e+4>>2]|0)|0)){if((a|0)!=(-1|0)){h=b;g=a;q=145;break d}}else{e=a;q=136}}else b=0}else q=128;while(0);do if((q|0)==128){d=hw(0)|0;if((d|0)!=(-1|0)?(b=d,o=c[14951]|0,p=o+-1|0,b=((p&b|0)==0?0:(p+b&0-o)-b|0)+k|0,o=c[14940]|0,p=b+o|0,b>>>0>m>>>0&b>>>0<2147483647):0){n=c[14942]|0;if(n|0?p>>>0<=o>>>0|p>>>0>n>>>0:0){b=0;break}a=hw(b|0)|0;if((a|0)==(d|0)){h=b;g=d;q=145;break d}else{e=a;q=136}}else b=0}while(0);do if((q|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=b;g=e;q=145;break d}a=c[14952]|0;a=j-b+a&0-a;if(a>>>0>=2147483647){h=b;g=e;q=145;break d}if((hw(a|0)|0)==(-1|0)){hw(d|0)|0;b=0;break}else{h=a+b|0;g=e;q=145;break d}}while(0);c[14943]=c[14943]|4;q=143}else{b=0;q=143}while(0);if(((q|0)==143?k>>>0<2147483647:0)?(t=hw(k|0)|0,p=hw(0)|0,r=p-t|0,s=r>>>0>(m+40|0)>>>0,!((t|0)==(-1|0)|s^1|t>>>0

      >>0&((t|0)!=(-1|0)&(p|0)!=(-1|0))^1)):0){h=s?r:b;g=t;q=145}if((q|0)==145){b=(c[14940]|0)+h|0;c[14940]=b;if(b>>>0>(c[14941]|0)>>>0)c[14941]=b;j=c[14838]|0;f:do if(j){b=59776;while(1){a=c[b>>2]|0;d=c[b+4>>2]|0;if((g|0)==(a+d|0)){q=154;break}e=c[b+8>>2]|0;if(!e)break;else b=e}if(((q|0)==154?(u=b+4|0,(c[b+12>>2]&8|0)==0):0)?g>>>0>j>>>0&a>>>0<=j>>>0:0){c[u>>2]=d+h;v=(c[14835]|0)+h|0;t=j+8|0;t=(t&7|0)==0?0:0-t&7;u=j+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[j+v+4>>2]=40;c[14839]=c[14954];break}if(g>>>0<(c[14836]|0)>>>0)c[14836]=g;d=g+h|0;b=59776;while(1){if((c[b>>2]|0)==(d|0)){q=162;break}a=c[b+8>>2]|0;if(!a)break;else b=a}if((q|0)==162?(c[b+12>>2]&8|0)==0:0){c[b>>2]=g;l=b+4|0;c[l>>2]=(c[l>>2]|0)+h;l=g+8|0;l=g+((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[14835]|0)+i|0;c[14835]=v;c[14838]=k;c[k+4>>2]=v|1}else{if((c[14837]|0)==(b|0)){v=(c[14834]|0)+i|0;c[14834]=v;c[14837]=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[14832]=c[14832]&~(1<>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)){d=b+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>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=59632+(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[14833]=c[14833]&~(1<>2]=g;d=b+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+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=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<>2]|0}c[a>>2]=k;c[b+12>>2]=k;c[k+8>>2]=b;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<>>16&4;v=v<>>16&2;e=14-(t|u|e)+(v<>>15)|0;e=f>>>(e+7|0)&1|e<<1}while(0);b=59632+(e<<2)|0;c[k+28>>2]=e;a=k+16|0;c[a+4>>2]=0;c[a>>2]=0;a=c[14833]|0;d=1<>2]=k;c[k+24>>2]=b;c[k+12>>2]=k;c[k+8>>2]=k;break}b=c[b>>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;Ra=w;return v|0}b=59776;while(1){a=c[b>>2]|0;if(a>>>0<=j>>>0?(v=a+(c[b+4>>2]|0)|0,v>>>0>j>>>0):0)break;b=c[b+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>>0?j:a;b=a+8|0;d=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=d-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+d+4>>2]=40;c[14839]=c[14954];d=a+4|0;c[d>>2]=27;c[b>>2]=c[14944];c[b+4>>2]=c[14945];c[b+8>>2]=c[14946];c[b+12>>2]=c[14947];c[14944]=g;c[14945]=h;c[14947]=0;c[14946]=b;b=a+24|0;do{u=b;b=b+4|0;c[b>>2]=7}while((u+8|0)>>>0>>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=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<>2]|0}c[a>>2]=j;c[b+12>>2]=j;c[j+8>>2]=b;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<>>16&4;v=v<>>16&2;e=14-(t|u|e)+(v<>>15)|0;e=g>>>(e+7|0)&1|e<<1}else e=0;d=59632+(e<<2)|0;c[j+28>>2]=e;c[j+20>>2]=0;c[f>>2]=0;b=c[14833]|0;a=1<>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[14836]|0;if((v|0)==0|g>>>0>>0)c[14836]=g;c[14944]=g;c[14945]=h;c[14947]=0;c[14841]=c[14950];c[14840]=-1;c[14845]=59368;c[14844]=59368;c[14847]=59376;c[14846]=59376;c[14849]=59384;c[14848]=59384;c[14851]=59392;c[14850]=59392;c[14853]=59400;c[14852]=59400;c[14855]=59408;c[14854]=59408;c[14857]=59416;c[14856]=59416;c[14859]=59424;c[14858]=59424;c[14861]=59432;c[14860]=59432;c[14863]=59440;c[14862]=59440;c[14865]=59448;c[14864]=59448;c[14867]=59456;c[14866]=59456;c[14869]=59464;c[14868]=59464;c[14871]=59472;c[14870]=59472;c[14873]=59480;c[14872]=59480;c[14875]=59488;c[14874]=59488;c[14877]=59496;c[14876]=59496;c[14879]=59504;c[14878]=59504;c[14881]=59512;c[14880]=59512;c[14883]=59520;c[14882]=59520;c[14885]=59528;c[14884]=59528;c[14887]=59536;c[14886]=59536;c[14889]=59544;c[14888]=59544;c[14891]=59552;c[14890]=59552;c[14893]=59560;c[14892]=59560;c[14895]=59568;c[14894]=59568;c[14897]=59576;c[14896]=59576;c[14899]=59584;c[14898]=59584;c[14901]=59592;c[14900]=59592;c[14903]=59600;c[14902]=59600;c[14905]=59608;c[14904]=59608;c[14907]=59616;c[14906]=59616;v=h+-40|0;t=g+8|0;t=(t&7|0)==0?0:0-t&7;u=g+t|0;t=v-t|0;c[14838]=u;c[14835]=t;c[u+4>>2]=t|1;c[g+v+4>>2]=40;c[14839]=c[14954]}while(0);b=c[14835]|0;if(b>>>0>m>>>0){t=b-m|0;c[14835]=t;v=c[14838]|0;u=v+m|0;c[14838]=u;c[u+4>>2]=t|1;c[v+4>>2]=m|3;v=v+8|0;Ra=w;return v|0}}v=uu()|0;c[v>>2]=12;v=0;Ra=w;return v|0}function mu(a){a=a|0;var b=0,d=0,e=0,f=0,g=0,h=0,i=0,j=0;if(!a)return;d=a+-8|0;f=c[14836]|0;a=c[a+-4>>2]|0;b=a&-8;j=d+b|0;do if(!(a&1)){e=c[d>>2]|0;if(!(a&3))return;h=d+(0-e)|0;g=e+b|0;if(h>>>0>>0)return;if((c[14837]|0)==(h|0)){a=j+4|0;b=c[a>>2]|0;if((b&3|0)!=3){i=h;b=g;break}c[14834]=g;c[a>>2]=b&-2;c[h+4>>2]=g|1;c[h+g>>2]=g;return}d=e>>>3;if(e>>>0<256){a=c[h+8>>2]|0;b=c[h+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<>2]=b;c[b+8>>2]=a;i=h;b=g;break}}f=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){b=h+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>2]|0;if(!a){a=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}else{i=c[h+8>>2]|0;c[i+12>>2]=a;c[a+8>>2]=i}while(0);if(f){b=c[h+28>>2]|0;d=59632+(b<<2)|0;if((c[d>>2]|0)==(h|0)){c[d>>2]=a;if(!a){c[14833]=c[14833]&~(1<>2]|0)==(h|0)?i:f+20|0)>>2]=a;if(!a){i=h;b=g;break}}c[a+24>>2]=f;b=h+16|0;d=c[b>>2]|0;if(d|0){c[a+16>>2]=d;c[d+24>>2]=a}b=c[b+4>>2]|0;if(b){c[a+20>>2]=b;c[b+24>>2]=a;i=h;b=g}else{i=h;b=g}}else{i=h;b=g}}else{i=d;h=d}while(0);if(h>>>0>=j>>>0)return;a=j+4|0;e=c[a>>2]|0;if(!(e&1))return;if(!(e&2)){if((c[14838]|0)==(j|0)){j=(c[14835]|0)+b|0;c[14835]=j;c[14838]=i;c[i+4>>2]=j|1;if((i|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(j|0)){j=(c[14834]|0)+b|0;c[14834]=j;c[14837]=h;c[i+4>>2]=j|1;c[h+j>>2]=j;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){b=c[j+8>>2]|0;a=c[j+12>>2]|0;if((a|0)==(b|0)){c[14832]=c[14832]&~(1<>2]=a;c[a+8>>2]=b;break}}else{g=c[j+24>>2]|0;a=c[j+12>>2]|0;do if((a|0)==(j|0)){b=j+16|0;d=b+4|0;a=c[d>>2]|0;if(!a){a=c[b>>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[j+8>>2]|0;c[d+12>>2]=a;c[a+8>>2]=d;d=a}while(0);if(g|0){a=c[j+28>>2]|0;b=59632+(a<<2)|0;if((c[b>>2]|0)==(j|0)){c[b>>2]=d;if(!d){c[14833]=c[14833]&~(1<>2]|0)==(j|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;a=j+16|0;b=c[a>>2]|0;if(b|0){c[d+16>>2]=b;c[b+24>>2]=d}a=c[a+4>>2]|0;if(a|0){c[d+20>>2]=a;c[a+24>>2]=d}}}while(0);c[i+4>>2]=f|1;c[h+f>>2]=f;if((i|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[i+4>>2]=b|1;c[h+b>>2]=b;f=b}a=f>>>3;if(f>>>0<256){d=59368+(a<<1<<2)|0;b=c[14832]|0;a=1<>2]|0}c[b>>2]=i;c[a+12>>2]=i;c[i+8>>2]=a;c[i+12>>2]=d;return}a=f>>>8;if(a)if(f>>>0>16777215)e=31;else{h=(a+1048320|0)>>>16&8;j=a<>>16&4;j=j<>>16&2;e=14-(g|h|e)+(j<>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;a=59632+(e<<2)|0;c[i+28>>2]=e;c[i+20>>2]=0;c[i+16>>2]=0;b=c[14833]|0;d=1<>2]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i}else{a=c[a>>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]=i;c[i+24>>2]=a;c[i+12>>2]=i;c[i+8>>2]=i;break a}while(0);h=a+8|0;j=c[h>>2]|0;c[j+12>>2]=i;c[h>>2]=i;c[i+8>>2]=j;c[i+12>>2]=a;c[i+24>>2]=0}while(0);j=(c[14840]|0)+-1|0;c[14840]=j;if(j|0)return;a=59784;while(1){a=c[a>>2]|0;if(!a)break;else a=a+8|0}c[14840]=-1;return}function nu(a,b){a=a|0;b=b|0;var d=0;if(a){d=G(b,a)|0;if((b|a)>>>0>65535)d=((d>>>0)/(a>>>0)|0|0)==(b|0)?d:-1}else d=0;a=lu(d)|0;if(!a)return a|0;if(!(c[a+-4>>2]&3))return a|0;gw(a|0,0,d|0)|0;return a|0}function ou(a,b){a=a|0;b=b|0;var d=0,e=0;if(!a){b=lu(b)|0;return b|0}if(b>>>0>4294967231){b=uu()|0;c[b>>2]=12;b=0;return b|0}d=pu(a+-8|0,b>>>0<11?16:b+11&-8)|0;if(d|0){b=d+8|0;return b|0}d=lu(b)|0;if(!d){b=0;return b|0}e=c[a+-4>>2]|0;e=(e&-8)-((e&3|0)==0?8:4)|0;ew(d|0,a|0,(e>>>0>>0?e:b)|0)|0;mu(a);b=d;return b|0}function pu(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=a+4|0;m=c[l>>2]|0;d=m&-8;i=a+d|0;if(!(m&3)){if(b>>>0<256){a=0;return a|0}if(d>>>0>=(b+4|0)>>>0?(d-b|0)>>>0<=c[14952]<<1>>>0:0)return a|0;a=0;return a|0}if(d>>>0>=b>>>0){d=d-b|0;if(d>>>0<=15)return a|0;k=a+b|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|3;m=i+4|0;c[m>>2]=c[m>>2]|1;qu(k,d);return a|0}if((c[14838]|0)==(i|0)){k=(c[14835]|0)+d|0;d=k-b|0;e=a+b|0;if(k>>>0<=b>>>0){a=0;return a|0}c[l>>2]=m&1|b|2;c[e+4>>2]=d|1;c[14838]=e;c[14835]=d;return a|0}if((c[14837]|0)==(i|0)){e=(c[14834]|0)+d|0;if(e>>>0>>0){a=0;return a|0}d=e-b|0;if(d>>>0>15){k=a+b|0;e=a+e|0;c[l>>2]=m&1|b|2;c[k+4>>2]=d|1;c[e>>2]=d;e=e+4|0;c[e>>2]=c[e>>2]&-2;e=k}else{c[l>>2]=m&1|e|2;e=a+e+4|0;c[e>>2]=c[e>>2]|1;e=0;d=0}c[14834]=d;c[14837]=e;return a|0}e=c[i+4>>2]|0;if(e&2|0){a=0;return a|0}j=(e&-8)+d|0;if(j>>>0>>0){a=0;return a|0}k=j-b|0;f=e>>>3;do if(e>>>0<256){e=c[i+8>>2]|0;d=c[i+12>>2]|0;if((d|0)==(e|0)){c[14832]=c[14832]&~(1<>2]=d;c[d+8>>2]=e;break}}else{h=c[i+24>>2]|0;d=c[i+12>>2]|0;do if((d|0)==(i|0)){e=i+16|0;f=e+4|0;d=c[f>>2]|0;if(!d){d=c[e>>2]|0;if(!d){f=0;break}}else e=f;while(1){g=d+20|0;f=c[g>>2]|0;if(!f){g=d+16|0;f=c[g>>2]|0;if(!f)break;else{d=f;e=g}}else{d=f;e=g}}c[e>>2]=0;f=d}else{f=c[i+8>>2]|0;c[f+12>>2]=d;c[d+8>>2]=f;f=d}while(0);if(h|0){d=c[i+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(i|0)){c[e>>2]=f;if(!f){c[14833]=c[14833]&~(1<>2]|0)==(i|0)?g:h+20|0)>>2]=f;if(!f)break}c[f+24>>2]=h;d=i+16|0;e=c[d>>2]|0;if(e|0){c[f+16>>2]=e;c[e+24>>2]=f}d=c[d+4>>2]|0;if(d|0){c[f+20>>2]=d;c[d+24>>2]=f}}}while(0);if(k>>>0<16){c[l>>2]=m&1|j|2;m=a+j+4|0;c[m>>2]=c[m>>2]|1;return a|0}else{i=a+b|0;c[l>>2]=m&1|b|2;c[i+4>>2]=k|3;m=a+j+4|0;c[m>>2]=c[m>>2]|1;qu(i,k);return a|0}return 0}function qu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;i=a+b|0;d=c[a+4>>2]|0;do if(!(d&1)){f=c[a>>2]|0;if(!(d&3))return;h=a+(0-f)|0;b=f+b|0;if((c[14837]|0)==(h|0)){a=i+4|0;d=c[a>>2]|0;if((d&3|0)!=3)break;c[14834]=b;c[a>>2]=d&-2;c[h+4>>2]=b|1;c[i>>2]=b;return}e=f>>>3;if(f>>>0<256){a=c[h+8>>2]|0;d=c[h+12>>2]|0;if((d|0)==(a|0)){c[14832]=c[14832]&~(1<>2]=d;c[d+8>>2]=a;break}}g=c[h+24>>2]|0;a=c[h+12>>2]|0;do if((a|0)==(h|0)){d=h+16|0;e=d+4|0;a=c[e>>2]|0;if(!a){a=c[d>>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{f=c[h+8>>2]|0;c[f+12>>2]=a;c[a+8>>2]=f}while(0);if(g){d=c[h+28>>2]|0;e=59632+(d<<2)|0;if((c[e>>2]|0)==(h|0)){c[e>>2]=a;if(!a){c[14833]=c[14833]&~(1<>2]|0)==(h|0)?f:g+20|0)>>2]=a;if(!a)break}c[a+24>>2]=g;d=h+16|0;e=c[d>>2]|0;if(e|0){c[a+16>>2]=e;c[e+24>>2]=a}d=c[d+4>>2]|0;if(d){c[a+20>>2]=d;c[d+24>>2]=a}}}else h=a;while(0);a=i+4|0;e=c[a>>2]|0;if(!(e&2)){if((c[14838]|0)==(i|0)){i=(c[14835]|0)+b|0;c[14835]=i;c[14838]=h;c[h+4>>2]=i|1;if((h|0)!=(c[14837]|0))return;c[14837]=0;c[14834]=0;return}if((c[14837]|0)==(i|0)){i=(c[14834]|0)+b|0;c[14834]=i;c[14837]=h;c[h+4>>2]=i|1;c[h+i>>2]=i;return}f=(e&-8)+b|0;d=e>>>3;do if(e>>>0<256){a=c[i+8>>2]|0;b=c[i+12>>2]|0;if((b|0)==(a|0)){c[14832]=c[14832]&~(1<>2]=b;c[b+8>>2]=a;break}}else{g=c[i+24>>2]|0;b=c[i+12>>2]|0;do if((b|0)==(i|0)){a=i+16|0;d=a+4|0;b=c[d>>2]|0;if(!b){b=c[a>>2]|0;if(!b){d=0;break}}else a=d;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[i+8>>2]|0;c[d+12>>2]=b;c[b+8>>2]=d;d=b}while(0);if(g|0){b=c[i+28>>2]|0;a=59632+(b<<2)|0;if((c[a>>2]|0)==(i|0)){c[a>>2]=d;if(!d){c[14833]=c[14833]&~(1<>2]|0)==(i|0)?e:g+20|0)>>2]=d;if(!d)break}c[d+24>>2]=g;b=i+16|0;a=c[b>>2]|0;if(a|0){c[d+16>>2]=a;c[a+24>>2]=d}b=c[b+4>>2]|0;if(b|0){c[d+20>>2]=b;c[b+24>>2]=d}}}while(0);c[h+4>>2]=f|1;c[h+f>>2]=f;if((h|0)==(c[14837]|0)){c[14834]=f;return}}else{c[a>>2]=e&-2;c[h+4>>2]=b|1;c[h+b>>2]=b;f=b}b=f>>>3;if(f>>>0<256){d=59368+(b<<1<<2)|0;a=c[14832]|0;b=1<>2]|0}c[a>>2]=h;c[b+12>>2]=h;c[h+8>>2]=b;c[h+12>>2]=d;return}b=f>>>8;if(b)if(f>>>0>16777215)e=31;else{g=(b+1048320|0)>>>16&8;i=b<>>16&4;i=i<>>16&2;e=14-(d|g|e)+(i<>>15)|0;e=f>>>(e+7|0)&1|e<<1}else e=0;b=59632+(e<<2)|0;c[h+28>>2]=e;c[h+20>>2]=0;c[h+16>>2]=0;a=c[14833]|0;d=1<>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}b=c[b>>2]|0;a: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 a}else{e=e<<1;b=a}}c[d>>2]=h;c[h+24>>2]=b;c[h+12>>2]=h;c[h+8>>2]=h;return}while(0);g=b+8|0;i=c[g>>2]|0;c[i+12>>2]=h;c[g>>2]=h;c[h+8>>2]=i;c[h+12>>2]=b;c[h+24>>2]=0;return}function ru(a,b){a=a|0;b=b|0;if(a>>>0<9){b=lu(b)|0;return b|0}else{b=su(a,b)|0;return b|0}return 0}function su(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0,h=0,i=0;d=a>>>0>16?a:16;if(!(d+-1&d))a=d;else{a=16;while(1)if(a>>>0>>0)a=a<<1;else break}if((-64-a|0)>>>0<=b>>>0){h=uu()|0;c[h>>2]=12;h=0;return h|0}g=b>>>0<11?16:b+11&-8;d=lu(g+12+a|0)|0;if(!d){h=0;return h|0}f=d+-8|0;do if(a+-1&d){e=(d+a+-1&0-a)+-8|0;b=f;e=(e-b|0)>>>0>15?e:e+a|0;b=e-b|0;a=d+-4|0;i=c[a>>2]|0;d=(i&-8)-b|0;if(!(i&3)){c[e>>2]=(c[f>>2]|0)+b;c[e+4>>2]=d;a=e;b=e;break}else{i=e+4|0;c[i>>2]=d|c[i>>2]&1|2;d=e+d+4|0;c[d>>2]=c[d>>2]|1;c[a>>2]=b|c[a>>2]&1|2;c[i>>2]=c[i>>2]|1;qu(f,b);a=e;b=e;break}}else{a=f;b=f}while(0);a=a+4|0;d=c[a>>2]|0;if(d&3|0?(h=d&-8,h>>>0>(g+16|0)>>>0):0){i=h-g|0;f=b+g|0;c[a>>2]=g|d&1|2;c[f+4>>2]=i|3;h=b+h+4|0;c[h>>2]=c[h>>2]|1;qu(f,i)}i=b+8|0;return i|0}function tu(a){a=a|0;var b=0;if(a>>>0>4294963200){b=uu()|0;c[b>>2]=0-a;a=-1}return a|0}function uu(){return 59888}function vu(a){a=a|0;return a|0}function wu(a){a=a|0;return ((a|0)==32|(a|0)==9)&1|0}function xu(){return 30868}function yu(a){a=a|0;return ((a|32)+-97|0)>>>0<26|0}function zu(a){a=a|0;var b=0;b=(Au(a)|0)==0;return (b?a:a&95)|0}function Au(a){a=a|0;return (a+-97|0)>>>0<26|0}function Bu(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)b=e;else{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));b=e}return (d&255)-(b&255)|0}function Cu(a){a=a|0;return (a+-65|0)>>>0<26|0}function Du(a){a=a|0;var b=0;b=(Cu(a)|0)==0;return (b?a:a|32)|0}function Eu(b){b=b|0;var d=0,e=0,f=0;f=b;a:do if(!(f&3))e=5;else{d=f;while(1){if(!(a[b>>0]|0)){b=d;break a}b=b+1|0;d=b;if(!(d&3)){e=5;break}}}while(0);if((e|0)==5){while(1){d=c[b>>2]|0;if(!((d&-2139062144^-2139062144)&d+-16843009))b=b+4|0;else break}if((d&255)<<24>>24)do b=b+1|0;while((a[b>>0]|0)!=0)}return b-f|0}function Fu(a,b){a=a|0;b=b|0;if(!b)b=0;else b=Gu(c[b>>2]|0,c[b+4>>2]|0,a)|0;return ((b|0)==0?a:b)|0}function Gu(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=Hu(c[b+8>>2]|0,o)|0;f=Hu(c[b+12>>2]|0,o)|0;g=Hu(c[b+16>>2]|0,o)|0;a:do if((h>>>0>>2>>>0?(n=d-(h<<2)|0,f>>>0>>0&g>>>0>>0):0)?((g|f)&3|0)==0:0){n=f>>>2;m=g>>>2;l=0;while(1){j=h>>>1;k=l+j|0;i=k<<1;g=i+n|0;f=Hu(c[b+(g<<2)>>2]|0,o)|0;g=Hu(c[b+(g+1<<2)>>2]|0,o)|0;if(!(g>>>0>>0&f>>>0<(d-g|0)>>>0)){f=0;break a}if(a[b+(g+f)>>0]|0){f=0;break a}f=Bu(e,b+g|0)|0;if(!f)break;f=(f|0)<0;if((h|0)==1){f=0;break a}l=f?l:k;h=f?j:h-j|0}f=i+m|0;g=Hu(c[b+(f<<2)>>2]|0,o)|0;f=Hu(c[b+(f+1<<2)>>2]|0,o)|0;if(f>>>0>>0&g>>>0<(d-f|0)>>>0)f=(a[b+(f+g)>>0]|0)==0?b+f|0:0;else f=0}else f=0;while(0);return f|0}function Hu(a,b){a=a|0;b=b|0;var c=0;c=dw(a|0)|0;return ((b|0)==0?a:c)|0}function Iu(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;r=Ra;Ra=Ra+192|0;i=r+168|0;h=r+152|0;q=r+136|0;p=r+120|0;o=r+112|0;l=r+96|0;k=r+80|0;f=r+64|0;m=r+48|0;g=r+32|0;e=r+16|0;s=r;j=r+184|0;c[s>>2]=d;d=(c[s>>2]|0)+(4-1)&~(4-1);n=c[d>>2]|0;c[s>>2]=d+4;n=(b|0)==4?n|32768:n;a:do switch(b|0){case 14:{c[e>>2]=a;c[e+4>>2]=14;c[e+8>>2]=n;d=tu(oa(221,e|0)|0)|0;break}case 9:{c[g>>2]=a;c[g+4>>2]=16;c[g+8>>2]=j;d=oa(221,g|0)|0;switch(d|0){case -22:{c[m>>2]=a;c[m+4>>2]=9;c[m+8>>2]=n;d=oa(221,m|0)|0;break}case 0:{d=c[j+4>>2]|0;d=(c[j>>2]|0)==2?0-d|0:d;break}default:d=tu(d)|0}break}case 1030:{c[f>>2]=a;c[f+4>>2]=1030;c[f+8>>2]=n;d=oa(221,f|0)|0;if((d|0)!=-22){if((d|0)>-1){c[k>>2]=d;c[k+4>>2]=2;c[k+8>>2]=1;oa(221,k|0)|0}d=tu(d)|0;break a}c[l>>2]=a;c[l+4>>2]=1030;c[l+8>>2]=0;d=oa(221,l|0)|0;if((d|0)==-22){c[p>>2]=a;c[p+4>>2]=0;c[p+8>>2]=n;d=oa(221,p|0)|0;if((d|0)>-1){c[q>>2]=d;c[q+4>>2]=2;c[q+8>>2]=1;oa(221,q|0)|0}d=tu(d)|0;break a}else{if((d|0)>-1){c[o>>2]=d;va(6,o|0)|0}d=tu(-22)|0;break a}}case 15:case 16:case 12:case 13:{c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=n;d=tu(oa(221,h|0)|0)|0;break}default:{c[i>>2]=a;c[i+4>>2]=b;c[i+8>>2]=n;d=tu(oa(221,i|0)|0)|0}}while(0);Ra=r;return d|0}function Ju(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ja(20,b|0)|0;Ra=b;return a|0}function Ku(b,d){b=b|0;d=d|0;var e=0,f=0,g=0;f=d&255;a:do if(!f)b=b+(Eu(b)|0)|0;else{if(b&3){e=d&255;do{g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break a;b=b+1|0}while((b&3|0)!=0)}f=G(f,16843009)|0;e=c[b>>2]|0;b:do if(!((e&-2139062144^-2139062144)&e+-16843009))do{g=e^f;if((g&-2139062144^-2139062144)&g+-16843009|0)break b;b=b+4|0;e=c[b>>2]|0}while(!((e&-2139062144^-2139062144)&e+-16843009|0));while(0);e=d&255;while(1){g=a[b>>0]|0;if(g<<24>>24==0?1:g<<24>>24==e<<24>>24)break;else b=b+1|0}}while(0);return b|0}function Lu(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 Mu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+48|0;g=h+32|0;f=h+16|0;e=h;if(!(b&4194368))e=0;else{c[e>>2]=d;i=(c[e>>2]|0)+(4-1)&~(4-1);d=c[i>>2]|0;c[e>>2]=i+4;e=d}c[f>>2]=a;c[f+4>>2]=b|32768;c[f+8>>2]=e;e=ua(5,f|0)|0;if(!((b&524288|0)==0|(e|0)<0)){c[g>>2]=e;c[g+4>>2]=2;c[g+8>>2]=1;oa(221,g|0)|0}i=tu(e)|0;Ra=h;return i|0}function Nu(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;a=vu(a)|0;c[d>>2]=a;a=va(6,d|0)|0;a=tu((a|0)==-4?0:a)|0;Ra=b;return a|0}function Ou(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ha(196,e|0)|0)|0;Ra=d;return b|0}function Pu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ga(195,e|0)|0)|0;Ra=d;return b|0}function Qu(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(qa(33,e|0)|0)|0;Ra=d;return b|0}function Ru(a,b){a=a|0;b=b|0;return Uu(a,b,(Eu(a)|0)+1|0)|0}function Su(a,b){a=a|0;b=b|0;Tu(a,b)|0;return a|0}function Tu(b,d){b=b|0;d=d|0;var e=0,f=0;e=d;a:do if(!((e^b)&3)){if(e&3)do{e=a[d>>0]|0;a[b>>0]=e;if(!(e<<24>>24))break a;d=d+1|0;b=b+1|0}while((d&3|0)!=0);e=c[d>>2]|0;if(!((e&-2139062144^-2139062144)&e+-16843009)){f=b;while(1){d=d+4|0;b=f+4|0;c[f>>2]=e;e=c[d>>2]|0;if((e&-2139062144^-2139062144)&e+-16843009|0)break;else f=b}}f=10}else f=10;while(0);if((f|0)==10){f=a[d>>0]|0;a[b>>0]=f;if(f<<24>>24)do{d=d+1|0;b=b+1|0;f=a[d>>0]|0;a[b>>0]=f}while(f<<24>>24!=0)}return b|0}function Uu(b,c,d){b=b|0;c=c|0;d=d|0;a:do if(!d)d=0;else{c=c&255;while(1){d=d+-1|0;if((a[b+d>>0]|0)==c<<24>>24)break;if(!d){d=0;break a}}d=b+d|0}while(0);return d|0}function Vu(b,c){b=b|0;c=c|0;var d=0,e=0,f=0;d=b;e=58986;f=d+15|0;do{a[d>>0]=a[e>>0]|0;d=d+1|0;e=e+1|0}while((d|0)<(f|0));if(!c){a[b+14>>0]=48;a[b+15>>0]=0}else{e=c;d=14;while(1){d=d+1|0;if(e>>>0<10)break;else e=(e>>>0)/10|0}a[b+d>>0]=0;do{f=c;c=(c>>>0)/10|0;d=d+-1|0;a[b+d>>0]=f-(c*10|0)|48}while(f>>>0>=10)}return}function Wu(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(wa(85,f|0)|0)|0;Ra=e;return d|0}function Xu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ia(197,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;b=tu(ga(195,f|0)|0)|0}else b=tu(d)|0;Ra=g;return b|0}function Yu(a){a=a|0;var b=0,c=0;b=(Eu(a)|0)+1|0;c=lu(b)|0;if(!c)a=0;else a=ew(c|0,a|0,b|0)|0;return a|0}function Zu(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+4112|0;e=g+4096|0;d=g;if(a)if(!b){a=uu()|0;c[a>>2]=22;a=0}else f=4;else{b=4096;a=d;f=4}if((f|0)==4){c[e>>2]=a;c[e+4>>2]=b;if((tu(da(183,e|0)|0)|0)>=0){if((a|0)==(d|0))a=Yu(d)|0}else a=0}Ra=g;return a|0}function _u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(sa(4,f|0)|0)|0;Ra=e;return d|0}function $u(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0;e=Ra;Ra=Ra+16|0;f=e;c[f>>2]=a;c[f+4>>2]=b;c[f+8>>2]=d;d=tu(pa(3,f|0)|0)|0;Ra=e;return d|0}function av(b,c,e){b=b|0;c=c|0;e=e|0;var f=0,g=0;if(!e)f=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);f=(f&255)-(d[c>>0]|0)|0}return f|0}function bv(b,e){b=b|0;e=e|0;var f=0,g=0;f=0;while(1){if((d[27392+f>>0]|0)==(b|0)){g=4;break}f=f+1|0;if((f|0)==87){b=87;g=5;break}}if((g|0)==4)if(!f)f=27488;else{b=f;g=5}if((g|0)==5){f=27488;do{do{g=f;f=f+1|0}while((a[g>>0]|0)!=0);b=b+-1|0}while((b|0)!=0)}return cv(f,c[e+20>>2]|0)|0}function cv(a,b){a=a|0;b=b|0;return Fu(a,b)|0}function dv(a){a=a|0;var b=0;b=(ev()|0)+188|0;return bv(a,c[b>>2]|0)|0}function ev(){return xu()|0}function fv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(ra(39,e|0)|0)|0;Ra=d;return b|0}function gv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=b;b=tu(xa(91,e|0)|0)|0;Ra=d;return b|0}function hv(){return}function iv(a){a=+a;var b=0;g[h>>3]=a;b=c[h+4>>2]&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0<1072049730)if(b>>>0<1045430272)a=1.0;else{a=+kv(a);a=a*a/((a+1.0)*2.0)+1.0}else if(b>>>0<1082535490){a=+D(+a);a=(a+1.0/a)*.5;break}else{a=+lv(a);break}while(0);return +a}function jv(a){a=+a;var b=0.0,d=0,e=0.0;g[h>>3]=a;d=c[h+4>>2]|0;e=(d|0)<0?-.5:.5;d=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=d;b=+g[h>>3];do if(d>>>0<1082535490){b=+kv(b);if(d>>>0>=1072693248){a=e*(b+b/(b+1.0));break}if(d>>>0>=1045430272)a=e*(b*2.0-b*b/(b+1.0))}else a=e*2.0*+lv(b);while(0);return +a}function kv(a){a=+a;var b=0,d=0,e=0.0,f=0.0,i=0.0,j=0,k=0,l=0.0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;d=bw(c[h>>2]|0,d|0,63)|0;L()|0;do if(b>>>0>1078159481){j=mv(a)|0;b=(L()|0)&2147483647;if(!(b>>>0>2146435072|(b|0)==2146435072&j>>>0>0))if(!d)if(a>709.782712893384)a=a*8988465674311579538646525.0e283;else k=11;else a=-1.0}else{if(b>>>0<=1071001154)if(b>>>0<1016070144)break;else{i=0.0;j=0;k=14;break}if(b>>>0<1072734898)if(!d){b=1;e=a+-.6931471803691238;f=1.9082149292705877e-10;k=12;break}else{b=-1;e=a+.6931471803691238;f=-1.9082149292705877e-10;k=12;break}else k=11}while(0);if((k|0)==11){b=~~(a*1.4426950408889634+((d|0)==0?.5:-.5));f=+(b|0);e=a-f*.6931471803691238;f=f*1.9082149292705877e-10;k=12}if((k|0)==12){i=e-f;a=i;i=e-i-f;j=b;k=14}a:do if((k|0)==14){f=a*.5;e=a*f;l=e*(e*(e*(e*(4.008217827329362e-06-e*2.0109921818362437e-07)+-7.93650757867488e-05)+1.5873015872548146e-03)+-.03333333333333313)+1.0;f=3.0-f*l;f=e*((l-f)/(6.0-a*f));if(!j){a=a-(a*f-e);break}f=a*(f-i)-i-e;switch(j|0){case -1:{a=(a-f)*.5+-.5;break a}case 1:if(a<-.25){a=(f-(a+.5))*-2.0;break a}else{a=(a-f)*2.0+1.0;break a}default:{d=cw(j+1023|0,0,52)|0;k=L()|0;c[h>>2]=d;c[h+4>>2]=k;i=+g[h>>3];if(j>>>0>56){a=a-f+1.0;a=((j|0)==1024?a*2.0*8988465674311579538646525.0e283:a*i)+-1.0;break a}b=cw(1023-j|0,0,52)|0;d=L()|0;if((j|0)<20){c[h>>2]=b;c[h+4>>2]=d;e=1.0-+g[h>>3];a=a-f}else{c[h>>2]=b;c[h+4>>2]=d;e=a-(f+ +g[h>>3]);a=1.0}a=(e+a)*i;break a}}}while(0);return +a}function lv(a){a=+a;return +(+D(+(a+-1416.0996898839683))*2247116418577894884661631.0e283*2247116418577894884661631.0e283)}function mv(a){a=+a;var b=0;g[h>>3]=a;b=c[h>>2]|0;K(c[h+4>>2]|0);return b|0}function nv(a,b,c){a=a|0;b=b|0;c=c|0;ov(a,b,c)|0;return a|0}function ov(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;g=d;a:do if(!((g^b)&3)){f=(e|0)!=0;if(f&(g&3|0)!=0)do{g=a[d>>0]|0;a[b>>0]=g;if(!(g<<24>>24))break a;e=e+-1|0;d=d+1|0;b=b+1|0;f=(e|0)!=0}while(f&(d&3|0)!=0);if(f){if(a[d>>0]|0){b:do if(e>>>0>3){f=d;while(1){d=c[f>>2]|0;if((d&-2139062144^-2139062144)&d+-16843009|0){d=f;break b}c[b>>2]=d;e=e+-4|0;d=f+4|0;b=b+4|0;if(e>>>0>3)f=d;else break}}while(0);h=13}}else e=0}else h=13;while(0);c:do if((h|0)==13)if(!e)e=0;else while(1){h=a[d>>0]|0;a[b>>0]=h;if(!(h<<24>>24))break c;e=e+-1|0;b=b+1|0;if(!e){e=0;break}else d=d+1|0}while(0);gw(b|0,0,e|0)|0;return b|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,l=0,m=0,n=0;m=Ra;Ra=Ra+208|0;j=m;k=m+192|0;h=G(d,b)|0;i=k;c[i>>2]=1;c[i+4>>2]=0;a:do if(h|0){i=0-d|0;c[j+4>>2]=d;c[j>>2]=d;f=2;b=d;g=d;while(1){b=b+d+g|0;c[j+(f<<2)>>2]=b;if(b>>>0>>0){n=g;f=f+1|0;g=b;b=n}else break}g=a+h+i|0;if(g>>>0>a>>>0){h=g;f=1;b=1;do{do if((b&3|0)!=3){b=f+-1|0;if((c[j+(b<<2)>>2]|0)>>>0<(h-a|0)>>>0)qv(a,d,e,f,j);else sv(a,d,e,k,f,0,j);if((f|0)==1){tv(k,1);f=0;break}else{tv(k,b);f=1;break}}else{qv(a,d,e,f,j);rv(k,2);f=f+2|0}while(0);b=c[k>>2]|1;c[k>>2]=b;a=a+d|0}while(a>>>0>>0)}else{f=1;b=1}sv(a,d,e,k,f,0,j);g=k+4|0;while(1){if((f|0)==1&(b|0)==1)if(!(c[g>>2]|0))break a;else l=19;else if((f|0)<2)l=19;else{tv(k,2);n=f+-2|0;c[k>>2]=c[k>>2]^7;rv(k,1);sv(a+(0-(c[j+(n<<2)>>2]|0))+i|0,d,e,k,f+-1|0,1,j);tv(k,1);b=c[k>>2]|1;c[k>>2]=b;a=a+i|0;sv(a,d,e,k,n,1,j);f=n}if((l|0)==19){l=0;b=uv(k)|0;rv(k,b);a=a+i|0;f=b+f|0;b=c[k>>2]|0}}}while(0);Ra=m;return}function qv(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=Ra;Ra=Ra+240|0;l=m;c[l>>2]=a;a:do if((e|0)>1){k=0-b|0;i=a;g=e;e=1;h=a;while(1){i=i+k|0;j=g+-2|0;a=i+(0-(c[f+(j<<2)>>2]|0))|0;if((Xa[d&255](h,a)|0)>-1?(Xa[d&255](h,i)|0)>-1:0)break a;h=l+(e<<2)|0;if((Xa[d&255](a,i)|0)>-1){c[h>>2]=a;g=g+-1|0}else{c[h>>2]=i;a=i;g=j}e=e+1|0;if((g|0)<=1)break a;i=a;h=c[l>>2]|0}}else e=1;while(0);wv(b,l,e);Ra=m;return}function rv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[f>>2]|0;c[a>>2]=e;c[f>>2]=0;b=b+-32|0;d=0}else{d=c[f>>2]|0;e=c[a>>2]|0}c[a>>2]=d<<32-b|e>>>b;c[f>>2]=d>>>b;return}function sv(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;o=Ra;Ra=Ra+240|0;m=o+232|0;n=o;p=c[e>>2]|0;c[m>>2]=p;j=c[e+4>>2]|0;k=m+4|0;c[k>>2]=j;c[n>>2]=a;a:do if((p|0)!=1|(j|0)!=0?(l=0-b|0,i=a+(0-(c[h+(f<<2)>>2]|0))|0,(Xa[d&255](i,a)|0)>=1):0){e=1;g=(g|0)==0;j=i;while(1){if(g&(f|0)>1){g=a+l|0;i=c[h+(f+-2<<2)>>2]|0;if((Xa[d&255](g,j)|0)>-1){i=10;break a}if((Xa[d&255](g+(0-i)|0,j)|0)>-1){i=10;break a}}g=e+1|0;c[n+(e<<2)>>2]=j;p=uv(m)|0;rv(m,p);f=p+f|0;if(!((c[m>>2]|0)!=1|(c[k>>2]|0)!=0)){e=g;a=j;i=10;break a}a=j+(0-(c[h+(f<<2)>>2]|0))|0;if((Xa[d&255](a,c[n>>2]|0)|0)<1){a=j;e=g;g=0;i=9;break}else{p=j;e=g;g=1;j=a;a=p}}}else{e=1;i=9}while(0);if((i|0)==9?(g|0)==0:0)i=10;if((i|0)==10){wv(b,n,e);qv(a,b,d,f,h)}Ra=o;return}function tv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0;f=a+4|0;if(b>>>0>31){e=c[a>>2]|0;c[f>>2]=e;c[a>>2]=0;b=b+-32|0;d=0}else{d=c[a>>2]|0;e=c[f>>2]|0}c[f>>2]=d>>>(32-b|0)|e<>2]=d<>2]|0)+-1|0)|0;if(!b){b=vv(c[a+4>>2]|0)|0;return ((b|0)==0?0:b+32|0)|0}else return b|0;return 0}function vv(a){a=a|0;var b=0;if(a)if(!(a&1)){b=a;a=0;while(1){a=a+1|0;if(!(b&2))b=b>>>1;else break}}else a=0;else a=32;return a|0}function wv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0;h=Ra;Ra=Ra+256|0;e=h;a:do if((d|0)>=2?(g=b+(d<<2)|0,c[g>>2]=e,a|0):0)while(1){f=a>>>0<256?a:256;ew(e|0,c[b>>2]|0,f|0)|0;e=0;do{i=b+(e<<2)|0;e=e+1|0;ew(c[i>>2]|0,c[b+(e<<2)>>2]|0,f|0)|0;c[i>>2]=(c[i>>2]|0)+f}while((e|0)!=(d|0));a=a-f|0;if(!a)break a;e=c[g>>2]|0}while(0);Ra=h;return}function xv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0;f=Ra;Ra=Ra+32|0;g=f;e=f+20|0;c[g>>2]=a;c[g+4>>2]=0;c[g+8>>2]=b;c[g+12>>2]=e;c[g+16>>2]=d;d=(tu(ba(140,g|0)|0)|0)==0;Ra=f;return (d?c[e>>2]|0:-1)|0}function yv(a,b){a=a|0;b=b|0;var d=0,e=0;d=Ra;Ra=Ra+16|0;e=d;c[e>>2]=a;c[e+4>>2]=0;c[e+8>>2]=b;c[e+12>>2]=b>>31;b=tu(fa(194,e|0)|0)|0;Ra=d;return b|0}function zv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(aa(118,d|0)|0)|0;Ra=b;return a|0}function Av(a){a=a|0;var b=0,d=0;d=Ra;Ra=Ra+16|0;b=d;c[b>>2]=a;c[b+4>>2]=0;a=(Ja(b|0,b|0)|0)==0;Ra=d;return (a?0:c[b>>2]|0)|0}function Bv(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu($(10,d|0)|0)|0;Ra=b;return a|0}function Cv(a,b,d){a=a|0;b=b|0;d=d|0;var e=0,f=0,g=0,h=0;h=Ra;Ra=Ra+64|0;g=h+48|0;f=h;e=h+32|0;c[e>>2]=a;c[e+4>>2]=b;c[e+8>>2]=d;e=ma(207,e|0)|0;if((e|0)==-9?(c[f>>2]=a,c[f+4>>2]=1,(oa(221,f|0)|0)>=0):0){Vu(f,a);c[g>>2]=f;c[g+4>>2]=b;c[g+8>>2]=d;a=tu(na(212,g|0)|0)|0}else a=tu(e)|0;Ra=h;return a|0}function Dv(){var a=0,b=0;b=Ra;Ra=Ra+16|0;a=ka(201,b|0)|0;Ra=b;return a|0}function Ev(a){a=a|0;var b=0,d=0;b=Ra;Ra=Ra+16|0;d=b;c[d>>2]=a;a=tu(ta(40,d|0)|0)|0;Ra=b;return a|0}function Fv(a){a=+a;var b=0,d=0,e=0,f=0,i=0.0;g[h>>3]=a;f=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(f|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=f;c[h+4>>2]=d&2147483647;a=+g[h>>3];if(b>>>0<1022){if(b>>>0>=991){i=a*2.0;a=i+i*a/(1.0-a);e=5}}else{a=a/(1.0-a)*2.0;e=5}if((e|0)==5)a=+Gv(a)*.5;return +((d|0)<0?-a:a)}function Gv(a){a=+a;var b=0.0,d=0,e=0.0,f=0,i=0,j=0.0,k=0.0,l=0.0,m=0.0;g[h>>3]=a;d=c[h+4>>2]|0;do if((d|0)<0|d>>>0<1071284858)if(d>>>0<=3220176895){i=cw(d|0,0,1)|0;L()|0;if(i>>>0<2034237440)break;if(d>>>0<3218259653){e=0.0;b=0.0;f=11;break}else{f=8;break}}else{if(a==-1.0){a=-r;break}a=(a-a)/0.0;break}else if(d>>>0<=2146435071)f=8;while(0);if((f|0)==8){b=a+1.0;g[h>>3]=b;d=(c[h+4>>2]|0)+614242|0;if(d>>>0<1129316352)b=(d>>>0>1074790399?1.0-(b-a):a-(b+-1.0))/b;else b=0.0;c[h>>2]=c[h>>2];c[h+4>>2]=(d&1048575)+1072079006;e=+((d>>>20)+-1023|0);a=+g[h>>3]+-1.0;f=11}if((f|0)==11){j=a*(a*.5);m=a/(a+2.0);l=m*m;k=l*l;a=e*.6931471803691238+(a+(b+e*1.9082149292705877e-10+m*(j+(k*(k*(k*.15313837699209373+.22222198432149784)+.3999999999940942)+l*(k*(k*(k*.14798198605116586+.1818357216161805)+.2857142874366239)+.6666666666666735)))-j))}return +a}function Hv(a){a=+a;var b=0;g[h>>3]=a;b=bw(c[h>>2]|0,c[h+4>>2]|0,52)|0;L()|0;b=b&2047;do if(b>>>0>=1024)if(b>>>0<1049){a=+E(+(a*2.0-1.0/(+u(+(a*a+-1.0))+a)));break}else{a=+E(+a)+.6931471805599453;break}else{a=a+-1.0;a=+Gv(a+ +u(+(a*a+a*2.0)))}while(0);return +a}function Iv(a){a=+a;var b=0,d=0;g[h>>3]=a;d=c[h+4>>2]|0;b=d&2147483647;c[h>>2]=c[h>>2];c[h+4>>2]=b;a=+g[h>>3];do if(b>>>0>1071748074)if(b>>>0>1077149696){a=1.0-0.0/a;break}else{a=1.0-2.0/(+kv(a*2.0)+2.0);break}else{if(b>>>0>1070618798){a=+kv(a*2.0);a=a/(a+2.0);break}if(b>>>0>1048575){a=+kv(a*-2.0);a=-a/(a+2.0)}}while(0);return +((d|0)<0?-a:a)}function Jv(a){a=+a;var b=0,d=0,e=0,f=0.0;g[h>>3]=a;e=c[h>>2]|0;d=c[h+4>>2]|0;b=bw(e|0,d|0,52)|0;L()|0;b=b&2047;c[h>>2]=e;c[h+4>>2]=d&2147483647;a=+g[h>>3];do if(b>>>0<=1048){if(b>>>0>1023){a=+E(+(a*2.0+1.0/(+u(+(a*a+1.0))+a)));break}if(b>>>0>996){f=a*a;a=+Gv(f/(+u(+(f+1.0))+1.0)+a)}}else a=+E(+a)+.6931471805599453;while(0);return +((d|0)<0?-a:a)}function Kv(a,b){a=a|0;b=b|0;var d=0,e=0,f=0,g=0;g=Ra;Ra=Ra+48|0;f=g+40|0;e=g;d=g+32|0;c[d>>2]=a;c[d+4>>2]=b;d=ya(94,d|0)|0;if((d|0)==-9?(c[e>>2]=a,c[e+4>>2]=1,(oa(221,e|0)|0)>=0):0){Vu(e,a);c[f>>2]=e;c[f+4>>2]=b;a=tu(ca(15,f|0)|0)|0}else a=tu(d)|0;Ra=g;return a|0}function Lv(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=Ra;Ra=Ra+32|0;h=i;do if((g&4095|0)==0&(((g|0)<0)<<31>>31&-4096|0)==0){if(b>>>0>2147483646){a=uu()|0;c[a>>2]=12;a=-1;break}c[h>>2]=a;c[h+4>>2]=b;c[h+8>>2]=d;c[h+12>>2]=e;c[h+16>>2]=f;c[h+20>>2]=g>>12;a=tu(ea(192,h|0)|0)|0}else{a=uu()|0;c[a>>2]=22;a=-1}while(0);Ra=i;return a|0}function Mv(b,d){b=b|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;h=Ra;Ra=Ra+32|0;f=h;e=a[d>>0]|0;a:do if(e<<24>>24!=0?(a[d+1>>0]|0)!=0:0){gw(f|0,0,32)|0;e=a[d>>0]|0;if(e<<24>>24)do{j=e&255;i=f+(j>>>5<<2)|0;c[i>>2]=c[i>>2]|1<<(j&31);d=d+1|0;e=a[d>>0]|0}while(e<<24>>24!=0);d=a[b>>0]|0;if(!(d<<24>>24))e=b;else{e=b;do{j=d&255;if(c[f+(j>>>5<<2)>>2]&1<<(j&31)|0)break a;e=e+1|0;d=a[e>>0]|0}while(d<<24>>24!=0)}}else g=3;while(0);if((g|0)==3)e=Ku(b,e<<24>>24)|0;Ra=h;return e-b|0}function Nv(){Z(59908);return}function Ov(){return 59892}function Pv(){return 59900}function Qv(){return 59904}function Rv(){return 59908}function Sv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;c=a+c>>>0;return (K(b+d+(c>>>0>>0|0)>>>0|0),c|0)|0}function Tv(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 (K(d|0),a-c>>>0|0)|0}function Uv(a){a=a|0;return (a?31-(I(a^a-1)|0)|0:32)|0}function Vv(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 (K(n|0),f)|0}else{if(!g){n=0;f=0;return (K(n|0),f)|0}c[f>>2]=a|0;c[f+4>>2]=b&0;n=0;f=0;return (K(n|0),f)|0}}g=(i|0)==0;do if(h){if(!g){g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=31){m=g+1|0;i=31-g|0;b=g-31>>31;h=m;a=l>>>(m>>>0)&b|k<>>(m>>>0)&b;g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;n=0;f=0;return (K(n|0),f)|0}g=h-1|0;if(g&h|0){i=(I(h|0)|0)+33-(I(k|0)|0)|0;p=64-i|0;m=32-i|0;j=m>>31;o=i-32|0;b=o>>31;h=i;a=m-1>>31&k>>>(o>>>0)|(k<>>(i>>>0))&b;b=b&k>>>(i>>>0);g=l<>>(o>>>0))&j|l<>31;break}if(f|0){c[f>>2]=g&l;c[f+4>>2]=0}if((h|0)==1){o=j|b&0;p=a|0|0;return (K(o|0),p)|0}else{p=Uv(h|0)|0;o=k>>>(p>>>0)|0;p=k<<32-p|l>>>(p>>>0)|0;return (K(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 (K(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 (K(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>>>((Uv(i|0)|0)>>>0);return (K(o|0),p)|0}g=(I(i|0)|0)-(I(k|0)|0)|0;if(g>>>0<=30){b=g+1|0;i=31-g|0;h=b;a=k<>>(b>>>0);b=k>>>(b>>>0);g=0;i=l<>2]=a|0;c[f+4>>2]=j|b&0;o=0;p=0;return (K(o|0),p)|0}while(0);if(!h){k=i;j=0;i=0}else{m=d|0|0;l=n|e&0;k=Sv(m|0,l|0,-1,-1)|0;d=L()|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;Tv(k|0,d|0,e|0,n|0)|0;p=L()|0;o=p>>31|((p|0)<0?-1:0)<<1;i=o&1;a=Tv(e|0,n|0,o&m|0,(((p|0)<0?-1:0)>>31|((p|0)<0?-1:0)<<1)&l|0)|0;b=L()|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 (K(o|0),p)|0}function Wv(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;var e=0,f=0,g=0,h=0,i=0,j=0;j=b>>31|((b|0)<0?-1:0)<<1;i=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;f=d>>31|((d|0)<0?-1:0)<<1;e=((d|0)<0?-1:0)>>31|((d|0)<0?-1:0)<<1;h=Tv(j^a|0,i^b|0,j|0,i|0)|0;g=L()|0;a=f^j;b=e^i;return Tv((Vv(h,g,Tv(f^c|0,e^d|0,f|0,e|0)|0,L()|0,0)|0)^a|0,(L()|0)^b|0,a|0,b|0)|0}function Xv(a,b){a=a|0;b=b|0;var c=0,d=0,e=0,f=0;f=a&65535;e=b&65535;c=G(e,f)|0;d=a>>>16;a=(c>>>16)+(G(e,d)|0)|0;e=b>>>16;b=G(e,f)|0;return (K((a>>>16)+(G(e,d)|0)+(((a&65535)+b|0)>>>16)|0),a+b<<16|c&65535|0)|0}function Yv(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=Xv(e,f)|0;a=L()|0;return (K((G(b,f)|0)+(G(d,e)|0)+a|a&0|0),c|0|0)|0}function Zv(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;f=Ra;Ra=Ra+16|0;i=f|0;h=b>>31|((b|0)<0?-1:0)<<1;g=((b|0)<0?-1:0)>>31|((b|0)<0?-1:0)<<1;k=e>>31|((e|0)<0?-1:0)<<1;j=((e|0)<0?-1:0)>>31|((e|0)<0?-1:0)<<1;a=Tv(h^a|0,g^b|0,h|0,g|0)|0;b=L()|0;Vv(a,b,Tv(k^d|0,j^e|0,k|0,j|0)|0,L()|0,i)|0;e=Tv(c[i>>2]^h|0,c[i+4>>2]^g|0,h|0,g|0)|0;d=L()|0;Ra=f;return (K(d|0),e)|0}function _v(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Vv(a,b,c,d,0)|0}function $v(a,b,d,e){a=a|0;b=b|0;d=d|0;e=e|0;var f=0,g=0;g=Ra;Ra=Ra+16|0;f=g|0;Vv(a,b,d,e,f)|0;Ra=g;return (K(c[f+4>>2]|0),c[f>>2]|0)|0}function aw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>c|0);return a>>>c|(b&(1<>c-32|0}function bw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b>>>c|0);return a>>>c|(b&(1<>>c-32|0}function cw(a,b,c){a=a|0;b=b|0;c=c|0;if((c|0)<32){K(b<>>32-c|0);return a<>8&255)<<16|(a>>16&255)<<8|a>>>24|0}function ew(b,d,e){b=b|0;d=d|0;e=e|0;var f=0,g=0,h=0;if((e|0)>=8192){Aa(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 fw(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 ew(b,c,d)|0;return b|0}function gw(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 hw(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){Pa(b|0)|0;_(12);return -1}if((b|0)>(za()|0)?(Ba(b|0)|0)==0:0){_(12);return -1}c[i>>2]=b;return d|0}function iw(a){a=a|0;return Va[a&127]()|0}function jw(){return M(0)|0}function kw(){return M(1)|0}function lw(){return M(2)|0}function mw(){return M(3)|0}function nw(){return M(4)|0}function ow(){return M(5)|0}function pw(){return M(6)|0}function qw(){return M(7)|0}function rw(){return M(8)|0}function sw(){return M(9)|0}function tw(){return M(10)|0}function uw(){return M(11)|0}function vw(){return M(12)|0}function ww(){return M(13)|0}function xw(){return M(14)|0}function yw(){return M(15)|0}function zw(){return M(16)|0}function Aw(){return M(17)|0}function Bw(){return M(18)|0}function Cw(){return M(19)|0}function Dw(){return M(20)|0}function Ew(){return M(21)|0}function Fw(){return M(22)|0}function Gw(){return M(23)|0}function Hw(){return M(24)|0}function Iw(){return M(25)|0}function Jw(){return M(26)|0}function Kw(){return M(27)|0}function Lw(){return M(28)|0}function Mw(){return M(29)|0}function Nw(){return M(30)|0}function Ow(){return M(31)|0}function Pw(){return M(32)|0}function Qw(){return M(33)|0}function Rw(){return M(34)|0}function Sw(){return M(35)|0}function Tw(){return M(36)|0}function Uw(){return M(37)|0}function Vw(){return M(38)|0}function Ww(){return M(39)|0}function Xw(){return M(40)|0}function Yw(){return M(41)|0}function Zw(){return M(42)|0}function _w(){return M(43)|0}function $w(){return M(44)|0}function ax(){return M(45)|0}function bx(){return M(46)|0}function cx(){return M(47)|0}function dx(){return M(48)|0}function ex(){return M(49)|0}function fx(){return M(50)|0}function gx(){return M(51)|0}function hx(){return M(52)|0}function ix(){return M(53)|0}function jx(){return M(54)|0}function kx(){return M(55)|0}function lx(){return M(56)|0}function mx(){return M(57)|0}function nx(){return M(58)|0}function ox(){return M(59)|0}function px(){return M(60)|0}function qx(){return M(61)|0}function rx(){return M(62)|0}function sx(){return M(63)|0}function tx(a,b){a=a|0;b=b|0;return Wa[a&127](b|0)|0}function ux(a){a=a|0;return N(0,a|0)|0}function vx(a){a=a|0;return N(1,a|0)|0}function wx(a){a=a|0;return N(2,a|0)|0}function xx(a){a=a|0;return N(3,a|0)|0}function yx(a){a=a|0;return N(4,a|0)|0}function zx(a){a=a|0;return N(5,a|0)|0}function Ax(a){a=a|0;return N(6,a|0)|0}function Bx(a){a=a|0;return N(7,a|0)|0}function Cx(a){a=a|0;return N(8,a|0)|0}function Dx(a){a=a|0;return N(9,a|0)|0}function Ex(a){a=a|0;return N(10,a|0)|0}function Fx(a){a=a|0;return N(11,a|0)|0}function Gx(a){a=a|0;return N(12,a|0)|0}function Hx(a){a=a|0;return N(13,a|0)|0}function Ix(a){a=a|0;return N(14,a|0)|0}function Jx(a){a=a|0;return N(15,a|0)|0}function Kx(a){a=a|0;return N(16,a|0)|0}function Lx(a){a=a|0;return N(17,a|0)|0}function Mx(a){a=a|0;return N(18,a|0)|0}function Nx(a){a=a|0;return N(19,a|0)|0}function Ox(a){a=a|0;return N(20,a|0)|0}function Px(a){a=a|0;return N(21,a|0)|0}function Qx(a){a=a|0;return N(22,a|0)|0}function Rx(a){a=a|0;return N(23,a|0)|0}function Sx(a){a=a|0;return N(24,a|0)|0}function Tx(a){a=a|0;return N(25,a|0)|0}function Ux(a){a=a|0;return N(26,a|0)|0}function Vx(a){a=a|0;return N(27,a|0)|0}function Wx(a){a=a|0;return N(28,a|0)|0}function Xx(a){a=a|0;return N(29,a|0)|0}function Yx(a){a=a|0;return N(30,a|0)|0}function Zx(a){a=a|0;return N(31,a|0)|0}function _x(a){a=a|0;return N(32,a|0)|0}function $x(a){a=a|0;return N(33,a|0)|0}function ay(a){a=a|0;return N(34,a|0)|0}function by(a){a=a|0;return N(35,a|0)|0}function cy(a){a=a|0;return N(36,a|0)|0}function dy(a){a=a|0;return N(37,a|0)|0}function ey(a){a=a|0;return N(38,a|0)|0}function fy(a){a=a|0;return N(39,a|0)|0}function gy(a){a=a|0;return N(40,a|0)|0}function hy(a){a=a|0;return N(41,a|0)|0}function iy(a){a=a|0;return N(42,a|0)|0}function jy(a){a=a|0;return N(43,a|0)|0}function ky(a){a=a|0;return N(44,a|0)|0}function ly(a){a=a|0;return N(45,a|0)|0}function my(a){a=a|0;return N(46,a|0)|0}function ny(a){a=a|0;return N(47,a|0)|0}function oy(a){a=a|0;return N(48,a|0)|0}function py(a){a=a|0;return N(49,a|0)|0}function qy(a){a=a|0;return N(50,a|0)|0}function ry(a){a=a|0;return N(51,a|0)|0}function sy(a){a=a|0;return N(52,a|0)|0}function ty(a){a=a|0;return N(53,a|0)|0}function uy(a){a=a|0;return N(54,a|0)|0}function vy(a){a=a|0;return N(55,a|0)|0}function wy(a){a=a|0;return N(56,a|0)|0}function xy(a){a=a|0;return N(57,a|0)|0}function yy(a){a=a|0;return N(58,a|0)|0}function zy(a){a=a|0;return N(59,a|0)|0}function Ay(a){a=a|0;return N(60,a|0)|0}function By(a){a=a|0;return N(61,a|0)|0}function Cy(a){a=a|0;return N(62,a|0)|0}function Dy(a){a=a|0;return N(63,a|0)|0}function Ey(a,b,c){a=a|0;b=b|0;c=c|0;return Xa[a&255](b|0,c|0)|0}function Fy(a,b){a=a|0;b=b|0;return O(0,a|0,b|0)|0}function Gy(a,b){a=a|0;b=b|0;return O(1,a|0,b|0)|0}function Hy(a,b){a=a|0;b=b|0;return O(2,a|0,b|0)|0}function Iy(a,b){a=a|0;b=b|0;return O(3,a|0,b|0)|0}function Jy(a,b){a=a|0;b=b|0;return O(4,a|0,b|0)|0}function Ky(a,b){a=a|0;b=b|0;return O(5,a|0,b|0)|0}function Ly(a,b){a=a|0;b=b|0;return O(6,a|0,b|0)|0}function My(a,b){a=a|0;b=b|0;return O(7,a|0,b|0)|0}function Ny(a,b){a=a|0;b=b|0;return O(8,a|0,b|0)|0}function Oy(a,b){a=a|0;b=b|0;return O(9,a|0,b|0)|0}function Py(a,b){a=a|0;b=b|0;return O(10,a|0,b|0)|0}function Qy(a,b){a=a|0;b=b|0;return O(11,a|0,b|0)|0}function Ry(a,b){a=a|0;b=b|0;return O(12,a|0,b|0)|0}function Sy(a,b){a=a|0;b=b|0;return O(13,a|0,b|0)|0}function Ty(a,b){a=a|0;b=b|0;return O(14,a|0,b|0)|0}function Uy(a,b){a=a|0;b=b|0;return O(15,a|0,b|0)|0}function Vy(a,b){a=a|0;b=b|0;return O(16,a|0,b|0)|0}function Wy(a,b){a=a|0;b=b|0;return O(17,a|0,b|0)|0}function Xy(a,b){a=a|0;b=b|0;return O(18,a|0,b|0)|0}function Yy(a,b){a=a|0;b=b|0;return O(19,a|0,b|0)|0}function Zy(a,b){a=a|0;b=b|0;return O(20,a|0,b|0)|0}function _y(a,b){a=a|0;b=b|0;return O(21,a|0,b|0)|0}function $y(a,b){a=a|0;b=b|0;return O(22,a|0,b|0)|0}function az(a,b){a=a|0;b=b|0;return O(23,a|0,b|0)|0}function bz(a,b){a=a|0;b=b|0;return O(24,a|0,b|0)|0}function cz(a,b){a=a|0;b=b|0;return O(25,a|0,b|0)|0}function dz(a,b){a=a|0;b=b|0;return O(26,a|0,b|0)|0}function ez(a,b){a=a|0;b=b|0;return O(27,a|0,b|0)|0}function fz(a,b){a=a|0;b=b|0;return O(28,a|0,b|0)|0}function gz(a,b){a=a|0;b=b|0;return O(29,a|0,b|0)|0}function hz(a,b){a=a|0;b=b|0;return O(30,a|0,b|0)|0}function iz(a,b){a=a|0;b=b|0;return O(31,a|0,b|0)|0}function jz(a,b){a=a|0;b=b|0;return O(32,a|0,b|0)|0}function kz(a,b){a=a|0;b=b|0;return O(33,a|0,b|0)|0}function lz(a,b){a=a|0;b=b|0;return O(34,a|0,b|0)|0}function mz(a,b){a=a|0;b=b|0;return O(35,a|0,b|0)|0}function nz(a,b){a=a|0;b=b|0;return O(36,a|0,b|0)|0}function oz(a,b){a=a|0;b=b|0;return O(37,a|0,b|0)|0}function pz(a,b){a=a|0;b=b|0;return O(38,a|0,b|0)|0}function qz(a,b){a=a|0;b=b|0;return O(39,a|0,b|0)|0}function rz(a,b){a=a|0;b=b|0;return O(40,a|0,b|0)|0}function sz(a,b){a=a|0;b=b|0;return O(41,a|0,b|0)|0}function tz(a,b){a=a|0;b=b|0;return O(42,a|0,b|0)|0}function uz(a,b){a=a|0;b=b|0;return O(43,a|0,b|0)|0}function vz(a,b){a=a|0;b=b|0;return O(44,a|0,b|0)|0}function wz(a,b){a=a|0;b=b|0;return O(45,a|0,b|0)|0}function xz(a,b){a=a|0;b=b|0;return O(46,a|0,b|0)|0}function yz(a,b){a=a|0;b=b|0;return O(47,a|0,b|0)|0}function zz(a,b){a=a|0;b=b|0;return O(48,a|0,b|0)|0}function Az(a,b){a=a|0;b=b|0;return O(49,a|0,b|0)|0}function Bz(a,b){a=a|0;b=b|0;return O(50,a|0,b|0)|0}function Cz(a,b){a=a|0;b=b|0;return O(51,a|0,b|0)|0}function Dz(a,b){a=a|0;b=b|0;return O(52,a|0,b|0)|0}function Ez(a,b){a=a|0;b=b|0;return O(53,a|0,b|0)|0}function Fz(a,b){a=a|0;b=b|0;return O(54,a|0,b|0)|0}function Gz(a,b){a=a|0;b=b|0;return O(55,a|0,b|0)|0}function Hz(a,b){a=a|0;b=b|0;return O(56,a|0,b|0)|0}function Iz(a,b){a=a|0;b=b|0;return O(57,a|0,b|0)|0}function Jz(a,b){a=a|0;b=b|0;return O(58,a|0,b|0)|0}function Kz(a,b){a=a|0;b=b|0;return O(59,a|0,b|0)|0}function Lz(a,b){a=a|0;b=b|0;return O(60,a|0,b|0)|0}function Mz(a,b){a=a|0;b=b|0;return O(61,a|0,b|0)|0}function Nz(a,b){a=a|0;b=b|0;return O(62,a|0,b|0)|0}function Oz(a,b){a=a|0;b=b|0;return O(63,a|0,b|0)|0}function Pz(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Ya[a&127](b|0,c|0,d|0)|0}function Qz(a,b,c){a=a|0;b=b|0;c=c|0;return P(0,a|0,b|0,c|0)|0}function Rz(a,b,c){a=a|0;b=b|0;c=c|0;return P(1,a|0,b|0,c|0)|0}function Sz(a,b,c){a=a|0;b=b|0;c=c|0;return P(2,a|0,b|0,c|0)|0}function Tz(a,b,c){a=a|0;b=b|0;c=c|0;return P(3,a|0,b|0,c|0)|0}function Uz(a,b,c){a=a|0;b=b|0;c=c|0;return P(4,a|0,b|0,c|0)|0}function Vz(a,b,c){a=a|0;b=b|0;c=c|0;return P(5,a|0,b|0,c|0)|0}function Wz(a,b,c){a=a|0;b=b|0;c=c|0;return P(6,a|0,b|0,c|0)|0}function Xz(a,b,c){a=a|0;b=b|0;c=c|0;return P(7,a|0,b|0,c|0)|0}function Yz(a,b,c){a=a|0;b=b|0;c=c|0;return P(8,a|0,b|0,c|0)|0}function Zz(a,b,c){a=a|0;b=b|0;c=c|0;return P(9,a|0,b|0,c|0)|0}function _z(a,b,c){a=a|0;b=b|0;c=c|0;return P(10,a|0,b|0,c|0)|0}function $z(a,b,c){a=a|0;b=b|0;c=c|0;return P(11,a|0,b|0,c|0)|0}function aA(a,b,c){a=a|0;b=b|0;c=c|0;return P(12,a|0,b|0,c|0)|0}function bA(a,b,c){a=a|0;b=b|0;c=c|0;return P(13,a|0,b|0,c|0)|0}function cA(a,b,c){a=a|0;b=b|0;c=c|0;return P(14,a|0,b|0,c|0)|0}function dA(a,b,c){a=a|0;b=b|0;c=c|0;return P(15,a|0,b|0,c|0)|0}function eA(a,b,c){a=a|0;b=b|0;c=c|0;return P(16,a|0,b|0,c|0)|0}function fA(a,b,c){a=a|0;b=b|0;c=c|0;return P(17,a|0,b|0,c|0)|0}function gA(a,b,c){a=a|0;b=b|0;c=c|0;return P(18,a|0,b|0,c|0)|0}function hA(a,b,c){a=a|0;b=b|0;c=c|0;return P(19,a|0,b|0,c|0)|0}function iA(a,b,c){a=a|0;b=b|0;c=c|0;return P(20,a|0,b|0,c|0)|0}function jA(a,b,c){a=a|0;b=b|0;c=c|0;return P(21,a|0,b|0,c|0)|0}function kA(a,b,c){a=a|0;b=b|0;c=c|0;return P(22,a|0,b|0,c|0)|0}function lA(a,b,c){a=a|0;b=b|0;c=c|0;return P(23,a|0,b|0,c|0)|0}function mA(a,b,c){a=a|0;b=b|0;c=c|0;return P(24,a|0,b|0,c|0)|0}function nA(a,b,c){a=a|0;b=b|0;c=c|0;return P(25,a|0,b|0,c|0)|0}function oA(a,b,c){a=a|0;b=b|0;c=c|0;return P(26,a|0,b|0,c|0)|0}function pA(a,b,c){a=a|0;b=b|0;c=c|0;return P(27,a|0,b|0,c|0)|0}function qA(a,b,c){a=a|0;b=b|0;c=c|0;return P(28,a|0,b|0,c|0)|0}function rA(a,b,c){a=a|0;b=b|0;c=c|0;return P(29,a|0,b|0,c|0)|0}function sA(a,b,c){a=a|0;b=b|0;c=c|0;return P(30,a|0,b|0,c|0)|0}function tA(a,b,c){a=a|0;b=b|0;c=c|0;return P(31,a|0,b|0,c|0)|0}function uA(a,b,c){a=a|0;b=b|0;c=c|0;return P(32,a|0,b|0,c|0)|0}function vA(a,b,c){a=a|0;b=b|0;c=c|0;return P(33,a|0,b|0,c|0)|0}function wA(a,b,c){a=a|0;b=b|0;c=c|0;return P(34,a|0,b|0,c|0)|0}function xA(a,b,c){a=a|0;b=b|0;c=c|0;return P(35,a|0,b|0,c|0)|0}function yA(a,b,c){a=a|0;b=b|0;c=c|0;return P(36,a|0,b|0,c|0)|0}function zA(a,b,c){a=a|0;b=b|0;c=c|0;return P(37,a|0,b|0,c|0)|0}function AA(a,b,c){a=a|0;b=b|0;c=c|0;return P(38,a|0,b|0,c|0)|0}function BA(a,b,c){a=a|0;b=b|0;c=c|0;return P(39,a|0,b|0,c|0)|0}function CA(a,b,c){a=a|0;b=b|0;c=c|0;return P(40,a|0,b|0,c|0)|0}function DA(a,b,c){a=a|0;b=b|0;c=c|0;return P(41,a|0,b|0,c|0)|0}function EA(a,b,c){a=a|0;b=b|0;c=c|0;return P(42,a|0,b|0,c|0)|0}function FA(a,b,c){a=a|0;b=b|0;c=c|0;return P(43,a|0,b|0,c|0)|0}function GA(a,b,c){a=a|0;b=b|0;c=c|0;return P(44,a|0,b|0,c|0)|0}function HA(a,b,c){a=a|0;b=b|0;c=c|0;return P(45,a|0,b|0,c|0)|0}function IA(a,b,c){a=a|0;b=b|0;c=c|0;return P(46,a|0,b|0,c|0)|0}function JA(a,b,c){a=a|0;b=b|0;c=c|0;return P(47,a|0,b|0,c|0)|0}function KA(a,b,c){a=a|0;b=b|0;c=c|0;return P(48,a|0,b|0,c|0)|0}function LA(a,b,c){a=a|0;b=b|0;c=c|0;return P(49,a|0,b|0,c|0)|0}function MA(a,b,c){a=a|0;b=b|0;c=c|0;return P(50,a|0,b|0,c|0)|0}function NA(a,b,c){a=a|0;b=b|0;c=c|0;return P(51,a|0,b|0,c|0)|0}function OA(a,b,c){a=a|0;b=b|0;c=c|0;return P(52,a|0,b|0,c|0)|0}function PA(a,b,c){a=a|0;b=b|0;c=c|0;return P(53,a|0,b|0,c|0)|0}function QA(a,b,c){a=a|0;b=b|0;c=c|0;return P(54,a|0,b|0,c|0)|0}function RA(a,b,c){a=a|0;b=b|0;c=c|0;return P(55,a|0,b|0,c|0)|0}function SA(a,b,c){a=a|0;b=b|0;c=c|0;return P(56,a|0,b|0,c|0)|0}function TA(a,b,c){a=a|0;b=b|0;c=c|0;return P(57,a|0,b|0,c|0)|0}function UA(a,b,c){a=a|0;b=b|0;c=c|0;return P(58,a|0,b|0,c|0)|0}function VA(a,b,c){a=a|0;b=b|0;c=c|0;return P(59,a|0,b|0,c|0)|0}function WA(a,b,c){a=a|0;b=b|0;c=c|0;return P(60,a|0,b|0,c|0)|0}function XA(a,b,c){a=a|0;b=b|0;c=c|0;return P(61,a|0,b|0,c|0)|0}function YA(a,b,c){a=a|0;b=b|0;c=c|0;return P(62,a|0,b|0,c|0)|0}function ZA(a,b,c){a=a|0;b=b|0;c=c|0;return P(63,a|0,b|0,c|0)|0}function _A(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return Za[a&127](b|0,c|0,d|0,e|0)|0}function $A(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(0,a|0,b|0,c|0,d|0)|0}function aB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(1,a|0,b|0,c|0,d|0)|0}function bB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(2,a|0,b|0,c|0,d|0)|0}function cB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(3,a|0,b|0,c|0,d|0)|0}function dB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(4,a|0,b|0,c|0,d|0)|0}function eB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(5,a|0,b|0,c|0,d|0)|0}function fB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(6,a|0,b|0,c|0,d|0)|0}function gB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(7,a|0,b|0,c|0,d|0)|0}function hB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(8,a|0,b|0,c|0,d|0)|0}function iB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(9,a|0,b|0,c|0,d|0)|0}function jB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(10,a|0,b|0,c|0,d|0)|0}function kB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(11,a|0,b|0,c|0,d|0)|0}function lB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(12,a|0,b|0,c|0,d|0)|0}function mB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(13,a|0,b|0,c|0,d|0)|0}function nB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(14,a|0,b|0,c|0,d|0)|0}function oB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(15,a|0,b|0,c|0,d|0)|0}function pB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(16,a|0,b|0,c|0,d|0)|0}function qB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(17,a|0,b|0,c|0,d|0)|0}function rB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(18,a|0,b|0,c|0,d|0)|0}function sB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(19,a|0,b|0,c|0,d|0)|0}function tB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(20,a|0,b|0,c|0,d|0)|0}function uB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(21,a|0,b|0,c|0,d|0)|0}function vB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(22,a|0,b|0,c|0,d|0)|0}function wB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(23,a|0,b|0,c|0,d|0)|0}function xB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(24,a|0,b|0,c|0,d|0)|0}function yB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(25,a|0,b|0,c|0,d|0)|0}function zB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(26,a|0,b|0,c|0,d|0)|0}function AB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(27,a|0,b|0,c|0,d|0)|0}function BB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(28,a|0,b|0,c|0,d|0)|0}function CB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(29,a|0,b|0,c|0,d|0)|0}function DB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(30,a|0,b|0,c|0,d|0)|0}function EB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(31,a|0,b|0,c|0,d|0)|0}function FB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(32,a|0,b|0,c|0,d|0)|0}function GB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(33,a|0,b|0,c|0,d|0)|0}function HB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(34,a|0,b|0,c|0,d|0)|0}function IB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(35,a|0,b|0,c|0,d|0)|0}function JB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(36,a|0,b|0,c|0,d|0)|0}function KB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(37,a|0,b|0,c|0,d|0)|0}function LB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(38,a|0,b|0,c|0,d|0)|0}function MB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(39,a|0,b|0,c|0,d|0)|0}function NB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(40,a|0,b|0,c|0,d|0)|0}function OB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(41,a|0,b|0,c|0,d|0)|0}function PB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(42,a|0,b|0,c|0,d|0)|0}function QB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(43,a|0,b|0,c|0,d|0)|0}function RB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(44,a|0,b|0,c|0,d|0)|0}function SB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(45,a|0,b|0,c|0,d|0)|0}function TB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(46,a|0,b|0,c|0,d|0)|0}function UB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(47,a|0,b|0,c|0,d|0)|0}function VB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(48,a|0,b|0,c|0,d|0)|0}function WB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(49,a|0,b|0,c|0,d|0)|0}function XB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(50,a|0,b|0,c|0,d|0)|0}function YB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(51,a|0,b|0,c|0,d|0)|0}function ZB(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(52,a|0,b|0,c|0,d|0)|0}function _B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(53,a|0,b|0,c|0,d|0)|0}function $B(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(54,a|0,b|0,c|0,d|0)|0}function aC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(55,a|0,b|0,c|0,d|0)|0}function bC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(56,a|0,b|0,c|0,d|0)|0}function cC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(57,a|0,b|0,c|0,d|0)|0}function dC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(58,a|0,b|0,c|0,d|0)|0}function eC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(59,a|0,b|0,c|0,d|0)|0}function fC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(60,a|0,b|0,c|0,d|0)|0}function gC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(61,a|0,b|0,c|0,d|0)|0}function hC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(62,a|0,b|0,c|0,d|0)|0}function iC(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;return Q(63,a|0,b|0,c|0,d|0)|0}function jC(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 _a[a&127](b|0,c|0,d|0,e|0,f|0)|0}function kC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(0,a|0,b|0,c|0,d|0,e|0)|0}function lC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(1,a|0,b|0,c|0,d|0,e|0)|0}function mC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(2,a|0,b|0,c|0,d|0,e|0)|0}function nC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(3,a|0,b|0,c|0,d|0,e|0)|0}function oC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(4,a|0,b|0,c|0,d|0,e|0)|0}function pC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(5,a|0,b|0,c|0,d|0,e|0)|0}function qC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(6,a|0,b|0,c|0,d|0,e|0)|0}function rC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(7,a|0,b|0,c|0,d|0,e|0)|0}function sC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(8,a|0,b|0,c|0,d|0,e|0)|0}function tC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(9,a|0,b|0,c|0,d|0,e|0)|0}function uC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(10,a|0,b|0,c|0,d|0,e|0)|0}function vC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(11,a|0,b|0,c|0,d|0,e|0)|0}function wC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(12,a|0,b|0,c|0,d|0,e|0)|0}function xC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(13,a|0,b|0,c|0,d|0,e|0)|0}function yC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(14,a|0,b|0,c|0,d|0,e|0)|0}function zC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(15,a|0,b|0,c|0,d|0,e|0)|0}function AC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(16,a|0,b|0,c|0,d|0,e|0)|0}function BC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(17,a|0,b|0,c|0,d|0,e|0)|0}function CC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(18,a|0,b|0,c|0,d|0,e|0)|0}function DC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(19,a|0,b|0,c|0,d|0,e|0)|0}function EC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(20,a|0,b|0,c|0,d|0,e|0)|0}function FC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(21,a|0,b|0,c|0,d|0,e|0)|0}function GC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(22,a|0,b|0,c|0,d|0,e|0)|0}function HC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(23,a|0,b|0,c|0,d|0,e|0)|0}function IC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(24,a|0,b|0,c|0,d|0,e|0)|0}function JC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(25,a|0,b|0,c|0,d|0,e|0)|0}function KC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(26,a|0,b|0,c|0,d|0,e|0)|0}function LC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(27,a|0,b|0,c|0,d|0,e|0)|0}function MC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(28,a|0,b|0,c|0,d|0,e|0)|0}function NC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(29,a|0,b|0,c|0,d|0,e|0)|0}function OC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(30,a|0,b|0,c|0,d|0,e|0)|0}function PC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(31,a|0,b|0,c|0,d|0,e|0)|0}function QC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(32,a|0,b|0,c|0,d|0,e|0)|0}function RC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(33,a|0,b|0,c|0,d|0,e|0)|0}function SC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(34,a|0,b|0,c|0,d|0,e|0)|0}function TC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(35,a|0,b|0,c|0,d|0,e|0)|0}function UC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(36,a|0,b|0,c|0,d|0,e|0)|0}function VC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(37,a|0,b|0,c|0,d|0,e|0)|0}function WC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(38,a|0,b|0,c|0,d|0,e|0)|0}function XC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(39,a|0,b|0,c|0,d|0,e|0)|0}function YC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(40,a|0,b|0,c|0,d|0,e|0)|0}function ZC(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(41,a|0,b|0,c|0,d|0,e|0)|0}function _C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(42,a|0,b|0,c|0,d|0,e|0)|0}function $C(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(43,a|0,b|0,c|0,d|0,e|0)|0}function aD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(44,a|0,b|0,c|0,d|0,e|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 R(45,a|0,b|0,c|0,d|0,e|0)|0}function cD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(46,a|0,b|0,c|0,d|0,e|0)|0}function dD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(47,a|0,b|0,c|0,d|0,e|0)|0}function eD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(48,a|0,b|0,c|0,d|0,e|0)|0}function fD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(49,a|0,b|0,c|0,d|0,e|0)|0}function gD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(50,a|0,b|0,c|0,d|0,e|0)|0}function hD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(51,a|0,b|0,c|0,d|0,e|0)|0}function iD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(52,a|0,b|0,c|0,d|0,e|0)|0}function jD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(53,a|0,b|0,c|0,d|0,e|0)|0}function kD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(54,a|0,b|0,c|0,d|0,e|0)|0}function lD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(55,a|0,b|0,c|0,d|0,e|0)|0}function mD(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;return R(56,a|0,b|0,c|0,d|0,e|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 R(57,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 R(58,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 R(59,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 R(60,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 R(61,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 R(62,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 R(63,a|0,b|0,c|0,d|0,e|0)|0}function uD(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 $a[a&127](b|0,c|0,d|0,e|0,f|0,g|0)|0}function vD(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 S(0,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wD(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 S(1,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xD(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 S(2,a|0,b|0,c|0,d|0,e|0,f|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 S(3,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 S(4,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 S(5,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 S(6,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 S(7,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 S(8,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 S(9,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 S(10,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 S(11,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 S(12,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ID(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 S(13,a|0,b|0,c|0,d|0,e|0,f|0)|0}function JD(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 S(14,a|0,b|0,c|0,d|0,e|0,f|0)|0}function KD(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 S(15,a|0,b|0,c|0,d|0,e|0,f|0)|0}function LD(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 S(16,a|0,b|0,c|0,d|0,e|0,f|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 S(17,a|0,b|0,c|0,d|0,e|0,f|0)|0}function ND(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 S(18,a|0,b|0,c|0,d|0,e|0,f|0)|0}function OD(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 S(19,a|0,b|0,c|0,d|0,e|0,f|0)|0}function PD(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 S(20,a|0,b|0,c|0,d|0,e|0,f|0)|0}function QD(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 S(21,a|0,b|0,c|0,d|0,e|0,f|0)|0}function RD(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 S(22,a|0,b|0,c|0,d|0,e|0,f|0)|0}function SD(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 S(23,a|0,b|0,c|0,d|0,e|0,f|0)|0}function TD(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 S(24,a|0,b|0,c|0,d|0,e|0,f|0)|0}function UD(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 S(25,a|0,b|0,c|0,d|0,e|0,f|0)|0}function VD(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 S(26,a|0,b|0,c|0,d|0,e|0,f|0)|0}function WD(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 S(27,a|0,b|0,c|0,d|0,e|0,f|0)|0}function XD(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 S(28,a|0,b|0,c|0,d|0,e|0,f|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 S(29,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 S(30,a|0,b|0,c|0,d|0,e|0,f|0)|0}function _D(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 S(31,a|0,b|0,c|0,d|0,e|0,f|0)|0}function $D(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 S(32,a|0,b|0,c|0,d|0,e|0,f|0)|0}function aE(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 S(33,a|0,b|0,c|0,d|0,e|0,f|0)|0}function bE(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 S(34,a|0,b|0,c|0,d|0,e|0,f|0)|0}function cE(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 S(35,a|0,b|0,c|0,d|0,e|0,f|0)|0}function dE(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 S(36,a|0,b|0,c|0,d|0,e|0,f|0)|0}function eE(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 S(37,a|0,b|0,c|0,d|0,e|0,f|0)|0}function fE(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 S(38,a|0,b|0,c|0,d|0,e|0,f|0)|0}function gE(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 S(39,a|0,b|0,c|0,d|0,e|0,f|0)|0}function hE(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 S(40,a|0,b|0,c|0,d|0,e|0,f|0)|0}function iE(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 S(41,a|0,b|0,c|0,d|0,e|0,f|0)|0}function jE(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 S(42,a|0,b|0,c|0,d|0,e|0,f|0)|0}function kE(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 S(43,a|0,b|0,c|0,d|0,e|0,f|0)|0}function lE(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 S(44,a|0,b|0,c|0,d|0,e|0,f|0)|0}function mE(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 S(45,a|0,b|0,c|0,d|0,e|0,f|0)|0}function nE(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 S(46,a|0,b|0,c|0,d|0,e|0,f|0)|0}function oE(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 S(47,a|0,b|0,c|0,d|0,e|0,f|0)|0}function pE(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 S(48,a|0,b|0,c|0,d|0,e|0,f|0)|0}function qE(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 S(49,a|0,b|0,c|0,d|0,e|0,f|0)|0}function rE(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 S(50,a|0,b|0,c|0,d|0,e|0,f|0)|0}function sE(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 S(51,a|0,b|0,c|0,d|0,e|0,f|0)|0}function tE(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 S(52,a|0,b|0,c|0,d|0,e|0,f|0)|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;return S(53,a|0,b|0,c|0,d|0,e|0,f|0)|0}function vE(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 S(54,a|0,b|0,c|0,d|0,e|0,f|0)|0}function wE(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 S(55,a|0,b|0,c|0,d|0,e|0,f|0)|0}function xE(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 S(56,a|0,b|0,c|0,d|0,e|0,f|0)|0}function yE(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 S(57,a|0,b|0,c|0,d|0,e|0,f|0)|0}function zE(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 S(58,a|0,b|0,c|0,d|0,e|0,f|0)|0}function AE(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 S(59,a|0,b|0,c|0,d|0,e|0,f|0)|0}function BE(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 S(60,a|0,b|0,c|0,d|0,e|0,f|0)|0}function CE(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 S(61,a|0,b|0,c|0,d|0,e|0,f|0)|0}function DE(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 S(62,a|0,b|0,c|0,d|0,e|0,f|0)|0}function EE(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 S(63,a|0,b|0,c|0,d|0,e|0,f|0)|0}function FE(a,b){a=a|0;b=b|0;ab[a&127](b|0)}function GE(a){a=a|0;T(0,a|0)}function HE(a){a=a|0;T(1,a|0)}function IE(a){a=a|0;T(2,a|0)}function JE(a){a=a|0;T(3,a|0)}function KE(a){a=a|0;T(4,a|0)}function LE(a){a=a|0;T(5,a|0)}function ME(a){a=a|0;T(6,a|0)}function NE(a){a=a|0;T(7,a|0)}function OE(a){a=a|0;T(8,a|0)}function PE(a){a=a|0;T(9,a|0)}function QE(a){a=a|0;T(10,a|0)}function RE(a){a=a|0;T(11,a|0)}function SE(a){a=a|0;T(12,a|0)}function TE(a){a=a|0;T(13,a|0)}function UE(a){a=a|0;T(14,a|0)}function VE(a){a=a|0;T(15,a|0)}function WE(a){a=a|0;T(16,a|0)}function XE(a){a=a|0;T(17,a|0)}function YE(a){a=a|0;T(18,a|0)}function ZE(a){a=a|0;T(19,a|0)}function _E(a){a=a|0;T(20,a|0)}function $E(a){a=a|0;T(21,a|0)}function aF(a){a=a|0;T(22,a|0)}function bF(a){a=a|0;T(23,a|0)}function cF(a){a=a|0;T(24,a|0)}function dF(a){a=a|0;T(25,a|0)}function eF(a){a=a|0;T(26,a|0)}function fF(a){a=a|0;T(27,a|0)}function gF(a){a=a|0;T(28,a|0)}function hF(a){a=a|0;T(29,a|0)}function iF(a){a=a|0;T(30,a|0)}function jF(a){a=a|0;T(31,a|0)}function kF(a){a=a|0;T(32,a|0)}function lF(a){a=a|0;T(33,a|0)}function mF(a){a=a|0;T(34,a|0)}function nF(a){a=a|0;T(35,a|0)}function oF(a){a=a|0;T(36,a|0)}function pF(a){a=a|0;T(37,a|0)}function qF(a){a=a|0;T(38,a|0)}function rF(a){a=a|0;T(39,a|0)}function sF(a){a=a|0;T(40,a|0)}function tF(a){a=a|0;T(41,a|0)}function uF(a){a=a|0;T(42,a|0)}function vF(a){a=a|0;T(43,a|0)}function wF(a){a=a|0;T(44,a|0)}function xF(a){a=a|0;T(45,a|0)}function yF(a){a=a|0;T(46,a|0)}function zF(a){a=a|0;T(47,a|0)}function AF(a){a=a|0;T(48,a|0)}function BF(a){a=a|0;T(49,a|0)}function CF(a){a=a|0;T(50,a|0)}function DF(a){a=a|0;T(51,a|0)}function EF(a){a=a|0;T(52,a|0)}function FF(a){a=a|0;T(53,a|0)}function GF(a){a=a|0;T(54,a|0)}function HF(a){a=a|0;T(55,a|0)}function IF(a){a=a|0;T(56,a|0)}function JF(a){a=a|0;T(57,a|0)}function KF(a){a=a|0;T(58,a|0)}function LF(a){a=a|0;T(59,a|0)}function MF(a){a=a|0;T(60,a|0)}function NF(a){a=a|0;T(61,a|0)}function OF(a){a=a|0;T(62,a|0)}function PF(a){a=a|0;T(63,a|0)}function QF(a,b,c){a=a|0;b=b|0;c=c|0;bb[a&127](b|0,c|0)}function RF(a,b){a=a|0;b=b|0;U(0,a|0,b|0)}function SF(a,b){a=a|0;b=b|0;U(1,a|0,b|0)}function TF(a,b){a=a|0;b=b|0;U(2,a|0,b|0)}function UF(a,b){a=a|0;b=b|0;U(3,a|0,b|0)}function VF(a,b){a=a|0;b=b|0;U(4,a|0,b|0)}function WF(a,b){a=a|0;b=b|0;U(5,a|0,b|0)}function XF(a,b){a=a|0;b=b|0;U(6,a|0,b|0)}function YF(a,b){a=a|0;b=b|0;U(7,a|0,b|0)}function ZF(a,b){a=a|0;b=b|0;U(8,a|0,b|0)}function _F(a,b){a=a|0;b=b|0;U(9,a|0,b|0)}function $F(a,b){a=a|0;b=b|0;U(10,a|0,b|0)}function aG(a,b){a=a|0;b=b|0;U(11,a|0,b|0)}function bG(a,b){a=a|0;b=b|0;U(12,a|0,b|0)}function cG(a,b){a=a|0;b=b|0;U(13,a|0,b|0)}function dG(a,b){a=a|0;b=b|0;U(14,a|0,b|0)}function eG(a,b){a=a|0;b=b|0;U(15,a|0,b|0)}function fG(a,b){a=a|0;b=b|0;U(16,a|0,b|0)}function gG(a,b){a=a|0;b=b|0;U(17,a|0,b|0)}function hG(a,b){a=a|0;b=b|0;U(18,a|0,b|0)}function iG(a,b){a=a|0;b=b|0;U(19,a|0,b|0)}function jG(a,b){a=a|0;b=b|0;U(20,a|0,b|0)}function kG(a,b){a=a|0;b=b|0;U(21,a|0,b|0)}function lG(a,b){a=a|0;b=b|0;U(22,a|0,b|0)}function mG(a,b){a=a|0;b=b|0;U(23,a|0,b|0)}function nG(a,b){a=a|0;b=b|0;U(24,a|0,b|0)}function oG(a,b){a=a|0;b=b|0;U(25,a|0,b|0)}function pG(a,b){a=a|0;b=b|0;U(26,a|0,b|0)}function qG(a,b){a=a|0;b=b|0;U(27,a|0,b|0)}function rG(a,b){a=a|0;b=b|0;U(28,a|0,b|0)}function sG(a,b){a=a|0;b=b|0;U(29,a|0,b|0)}function tG(a,b){a=a|0;b=b|0;U(30,a|0,b|0)}function uG(a,b){a=a|0;b=b|0;U(31,a|0,b|0)}function vG(a,b){a=a|0;b=b|0;U(32,a|0,b|0)}function wG(a,b){a=a|0;b=b|0;U(33,a|0,b|0)}function xG(a,b){a=a|0;b=b|0;U(34,a|0,b|0)}function yG(a,b){a=a|0;b=b|0;U(35,a|0,b|0)}function zG(a,b){a=a|0;b=b|0;U(36,a|0,b|0)}function AG(a,b){a=a|0;b=b|0;U(37,a|0,b|0)}function BG(a,b){a=a|0;b=b|0;U(38,a|0,b|0)}function CG(a,b){a=a|0;b=b|0;U(39,a|0,b|0)}function DG(a,b){a=a|0;b=b|0;U(40,a|0,b|0)}function EG(a,b){a=a|0;b=b|0;U(41,a|0,b|0)}function FG(a,b){a=a|0;b=b|0;U(42,a|0,b|0)}function GG(a,b){a=a|0;b=b|0;U(43,a|0,b|0)}function HG(a,b){a=a|0;b=b|0;U(44,a|0,b|0)}function IG(a,b){a=a|0;b=b|0;U(45,a|0,b|0)}function JG(a,b){a=a|0;b=b|0;U(46,a|0,b|0)}function KG(a,b){a=a|0;b=b|0;U(47,a|0,b|0)}function LG(a,b){a=a|0;b=b|0;U(48,a|0,b|0)}function MG(a,b){a=a|0;b=b|0;U(49,a|0,b|0)}function NG(a,b){a=a|0;b=b|0;U(50,a|0,b|0)}function OG(a,b){a=a|0;b=b|0;U(51,a|0,b|0)}function PG(a,b){a=a|0;b=b|0;U(52,a|0,b|0)}function QG(a,b){a=a|0;b=b|0;U(53,a|0,b|0)}function RG(a,b){a=a|0;b=b|0;U(54,a|0,b|0)}function SG(a,b){a=a|0;b=b|0;U(55,a|0,b|0)}function TG(a,b){a=a|0;b=b|0;U(56,a|0,b|0)}function UG(a,b){a=a|0;b=b|0;U(57,a|0,b|0)}function VG(a,b){a=a|0;b=b|0;U(58,a|0,b|0)}function WG(a,b){a=a|0;b=b|0;U(59,a|0,b|0)}function XG(a,b){a=a|0;b=b|0;U(60,a|0,b|0)}function YG(a,b){a=a|0;b=b|0;U(61,a|0,b|0)}function ZG(a,b){a=a|0;b=b|0;U(62,a|0,b|0)}function _G(a,b){a=a|0;b=b|0;U(63,a|0,b|0)}function $G(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;cb[a&255](b|0,c|0,d|0)}function aH(a,b,c){a=a|0;b=b|0;c=c|0;V(0,a|0,b|0,c|0)}function bH(a,b,c){a=a|0;b=b|0;c=c|0;V(1,a|0,b|0,c|0)}function cH(a,b,c){a=a|0;b=b|0;c=c|0;V(2,a|0,b|0,c|0)}function dH(a,b,c){a=a|0;b=b|0;c=c|0;V(3,a|0,b|0,c|0)}function eH(a,b,c){a=a|0;b=b|0;c=c|0;V(4,a|0,b|0,c|0)}function fH(a,b,c){a=a|0;b=b|0;c=c|0;V(5,a|0,b|0,c|0)}function gH(a,b,c){a=a|0;b=b|0;c=c|0;V(6,a|0,b|0,c|0)}function hH(a,b,c){a=a|0;b=b|0;c=c|0;V(7,a|0,b|0,c|0)}function iH(a,b,c){a=a|0;b=b|0;c=c|0;V(8,a|0,b|0,c|0)}function jH(a,b,c){a=a|0;b=b|0;c=c|0;V(9,a|0,b|0,c|0)}function kH(a,b,c){a=a|0;b=b|0;c=c|0;V(10,a|0,b|0,c|0)}function lH(a,b,c){a=a|0;b=b|0;c=c|0;V(11,a|0,b|0,c|0)}function mH(a,b,c){a=a|0;b=b|0;c=c|0;V(12,a|0,b|0,c|0)}function nH(a,b,c){a=a|0;b=b|0;c=c|0;V(13,a|0,b|0,c|0)}function oH(a,b,c){a=a|0;b=b|0;c=c|0;V(14,a|0,b|0,c|0)}function pH(a,b,c){a=a|0;b=b|0;c=c|0;V(15,a|0,b|0,c|0)}function qH(a,b,c){a=a|0;b=b|0;c=c|0;V(16,a|0,b|0,c|0)}function rH(a,b,c){a=a|0;b=b|0;c=c|0;V(17,a|0,b|0,c|0)}function sH(a,b,c){a=a|0;b=b|0;c=c|0;V(18,a|0,b|0,c|0)}function tH(a,b,c){a=a|0;b=b|0;c=c|0;V(19,a|0,b|0,c|0)}function uH(a,b,c){a=a|0;b=b|0;c=c|0;V(20,a|0,b|0,c|0)}function vH(a,b,c){a=a|0;b=b|0;c=c|0;V(21,a|0,b|0,c|0)}function wH(a,b,c){a=a|0;b=b|0;c=c|0;V(22,a|0,b|0,c|0)}function xH(a,b,c){a=a|0;b=b|0;c=c|0;V(23,a|0,b|0,c|0)}function yH(a,b,c){a=a|0;b=b|0;c=c|0;V(24,a|0,b|0,c|0)}function zH(a,b,c){a=a|0;b=b|0;c=c|0;V(25,a|0,b|0,c|0)}function AH(a,b,c){a=a|0;b=b|0;c=c|0;V(26,a|0,b|0,c|0)}function BH(a,b,c){a=a|0;b=b|0;c=c|0;V(27,a|0,b|0,c|0)}function CH(a,b,c){a=a|0;b=b|0;c=c|0;V(28,a|0,b|0,c|0)}function DH(a,b,c){a=a|0;b=b|0;c=c|0;V(29,a|0,b|0,c|0)}function EH(a,b,c){a=a|0;b=b|0;c=c|0;V(30,a|0,b|0,c|0)}function FH(a,b,c){a=a|0;b=b|0;c=c|0;V(31,a|0,b|0,c|0)}function GH(a,b,c){a=a|0;b=b|0;c=c|0;V(32,a|0,b|0,c|0)}function HH(a,b,c){a=a|0;b=b|0;c=c|0;V(33,a|0,b|0,c|0)}function IH(a,b,c){a=a|0;b=b|0;c=c|0;V(34,a|0,b|0,c|0)}function JH(a,b,c){a=a|0;b=b|0;c=c|0;V(35,a|0,b|0,c|0)}function KH(a,b,c){a=a|0;b=b|0;c=c|0;V(36,a|0,b|0,c|0)}function LH(a,b,c){a=a|0;b=b|0;c=c|0;V(37,a|0,b|0,c|0)}function MH(a,b,c){a=a|0;b=b|0;c=c|0;V(38,a|0,b|0,c|0)}function NH(a,b,c){a=a|0;b=b|0;c=c|0;V(39,a|0,b|0,c|0)}function OH(a,b,c){a=a|0;b=b|0;c=c|0;V(40,a|0,b|0,c|0)}function PH(a,b,c){a=a|0;b=b|0;c=c|0;V(41,a|0,b|0,c|0)}function QH(a,b,c){a=a|0;b=b|0;c=c|0;V(42,a|0,b|0,c|0)}function RH(a,b,c){a=a|0;b=b|0;c=c|0;V(43,a|0,b|0,c|0)}function SH(a,b,c){a=a|0;b=b|0;c=c|0;V(44,a|0,b|0,c|0)}function TH(a,b,c){a=a|0;b=b|0;c=c|0;V(45,a|0,b|0,c|0)}function UH(a,b,c){a=a|0;b=b|0;c=c|0;V(46,a|0,b|0,c|0)}function VH(a,b,c){a=a|0;b=b|0;c=c|0;V(47,a|0,b|0,c|0)}function WH(a,b,c){a=a|0;b=b|0;c=c|0;V(48,a|0,b|0,c|0)}function XH(a,b,c){a=a|0;b=b|0;c=c|0;V(49,a|0,b|0,c|0)}function YH(a,b,c){a=a|0;b=b|0;c=c|0;V(50,a|0,b|0,c|0)}function ZH(a,b,c){a=a|0;b=b|0;c=c|0;V(51,a|0,b|0,c|0)}function _H(a,b,c){a=a|0;b=b|0;c=c|0;V(52,a|0,b|0,c|0)}function $H(a,b,c){a=a|0;b=b|0;c=c|0;V(53,a|0,b|0,c|0)}function aI(a,b,c){a=a|0;b=b|0;c=c|0;V(54,a|0,b|0,c|0)}function bI(a,b,c){a=a|0;b=b|0;c=c|0;V(55,a|0,b|0,c|0)}function cI(a,b,c){a=a|0;b=b|0;c=c|0;V(56,a|0,b|0,c|0)}function dI(a,b,c){a=a|0;b=b|0;c=c|0;V(57,a|0,b|0,c|0)}function eI(a,b,c){a=a|0;b=b|0;c=c|0;V(58,a|0,b|0,c|0)}function fI(a,b,c){a=a|0;b=b|0;c=c|0;V(59,a|0,b|0,c|0)}function gI(a,b,c){a=a|0;b=b|0;c=c|0;V(60,a|0,b|0,c|0)}function hI(a,b,c){a=a|0;b=b|0;c=c|0;V(61,a|0,b|0,c|0)}function iI(a,b,c){a=a|0;b=b|0;c=c|0;V(62,a|0,b|0,c|0)}function jI(a,b,c){a=a|0;b=b|0;c=c|0;V(63,a|0,b|0,c|0)}function kI(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;db[a&127](b|0,c|0,d|0,e|0)}function lI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(0,a|0,b|0,c|0,d|0)}function mI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(1,a|0,b|0,c|0,d|0)}function nI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(2,a|0,b|0,c|0,d|0)}function oI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(3,a|0,b|0,c|0,d|0)}function pI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(4,a|0,b|0,c|0,d|0)}function qI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(5,a|0,b|0,c|0,d|0)}function rI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(6,a|0,b|0,c|0,d|0)}function sI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(7,a|0,b|0,c|0,d|0)}function tI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(8,a|0,b|0,c|0,d|0)}function uI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(9,a|0,b|0,c|0,d|0)}function vI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(10,a|0,b|0,c|0,d|0)}function wI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(11,a|0,b|0,c|0,d|0)}function xI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(12,a|0,b|0,c|0,d|0)}function yI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(13,a|0,b|0,c|0,d|0)}function zI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(14,a|0,b|0,c|0,d|0)}function AI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(15,a|0,b|0,c|0,d|0)}function BI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(16,a|0,b|0,c|0,d|0)}function CI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(17,a|0,b|0,c|0,d|0)}function DI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(18,a|0,b|0,c|0,d|0)}function EI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(19,a|0,b|0,c|0,d|0)}function FI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(20,a|0,b|0,c|0,d|0)}function GI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(21,a|0,b|0,c|0,d|0)}function HI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(22,a|0,b|0,c|0,d|0)}function II(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(23,a|0,b|0,c|0,d|0)}function JI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(24,a|0,b|0,c|0,d|0)}function KI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(25,a|0,b|0,c|0,d|0)}function LI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(26,a|0,b|0,c|0,d|0)}function MI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(27,a|0,b|0,c|0,d|0)}function NI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(28,a|0,b|0,c|0,d|0)}function OI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(29,a|0,b|0,c|0,d|0)}function PI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(30,a|0,b|0,c|0,d|0)}function QI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(31,a|0,b|0,c|0,d|0)}function RI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(32,a|0,b|0,c|0,d|0)}function SI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(33,a|0,b|0,c|0,d|0)}function TI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(34,a|0,b|0,c|0,d|0)}function UI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(35,a|0,b|0,c|0,d|0)}function VI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(36,a|0,b|0,c|0,d|0)}function WI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(37,a|0,b|0,c|0,d|0)}function XI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(38,a|0,b|0,c|0,d|0)}function YI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(39,a|0,b|0,c|0,d|0)}function ZI(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(40,a|0,b|0,c|0,d|0)}function _I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(41,a|0,b|0,c|0,d|0)}function $I(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(42,a|0,b|0,c|0,d|0)}function aJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(43,a|0,b|0,c|0,d|0)}function bJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(44,a|0,b|0,c|0,d|0)}function cJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(45,a|0,b|0,c|0,d|0)}function dJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(46,a|0,b|0,c|0,d|0)}function eJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(47,a|0,b|0,c|0,d|0)}function fJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(48,a|0,b|0,c|0,d|0)}function gJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(49,a|0,b|0,c|0,d|0)}function hJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(50,a|0,b|0,c|0,d|0)}function iJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(51,a|0,b|0,c|0,d|0)}function jJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(52,a|0,b|0,c|0,d|0)}function kJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(53,a|0,b|0,c|0,d|0)}function lJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(54,a|0,b|0,c|0,d|0)}function mJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(55,a|0,b|0,c|0,d|0)}function nJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(56,a|0,b|0,c|0,d|0)}function oJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(57,a|0,b|0,c|0,d|0)}function pJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(58,a|0,b|0,c|0,d|0)}function qJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(59,a|0,b|0,c|0,d|0)}function rJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(60,a|0,b|0,c|0,d|0)}function sJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(61,a|0,b|0,c|0,d|0)}function tJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(62,a|0,b|0,c|0,d|0)}function uJ(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;W(63,a|0,b|0,c|0,d|0)}function vJ(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;eb[a&127](b|0,c|0,d|0,e|0,f|0,g|0)}function wJ(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(0,a|0,b|0,c|0,d|0,e|0,f|0)}function xJ(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(1,a|0,b|0,c|0,d|0,e|0,f|0)}function yJ(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(2,a|0,b|0,c|0,d|0,e|0,f|0)}function zJ(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(3,a|0,b|0,c|0,d|0,e|0,f|0)}function AJ(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(4,a|0,b|0,c|0,d|0,e|0,f|0)}function BJ(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,a|0,b|0,c|0,d|0,e|0,f|0)}function CJ(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(6,a|0,b|0,c|0,d|0,e|0,f|0)}function DJ(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(7,a|0,b|0,c|0,d|0,e|0,f|0)}function EJ(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(8,a|0,b|0,c|0,d|0,e|0,f|0)}function FJ(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(9,a|0,b|0,c|0,d|0,e|0,f|0)}function GJ(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(10,a|0,b|0,c|0,d|0,e|0,f|0)}function HJ(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(11,a|0,b|0,c|0,d|0,e|0,f|0)}function IJ(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(12,a|0,b|0,c|0,d|0,e|0,f|0)}function JJ(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,a|0,b|0,c|0,d|0,e|0,f|0)}function KJ(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(14,a|0,b|0,c|0,d|0,e|0,f|0)}function LJ(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(15,a|0,b|0,c|0,d|0,e|0,f|0)}function MJ(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(16,a|0,b|0,c|0,d|0,e|0,f|0)}function NJ(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(17,a|0,b|0,c|0,d|0,e|0,f|0)}function OJ(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(18,a|0,b|0,c|0,d|0,e|0,f|0)}function PJ(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(19,a|0,b|0,c|0,d|0,e|0,f|0)}function QJ(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(20,a|0,b|0,c|0,d|0,e|0,f|0)}function RJ(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(21,a|0,b|0,c|0,d|0,e|0,f|0)}function SJ(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(22,a|0,b|0,c|0,d|0,e|0,f|0)}function TJ(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(23,a|0,b|0,c|0,d|0,e|0,f|0)}function UJ(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(24,a|0,b|0,c|0,d|0,e|0,f|0)}function VJ(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(25,a|0,b|0,c|0,d|0,e|0,f|0)}function WJ(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(26,a|0,b|0,c|0,d|0,e|0,f|0)}function XJ(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(27,a|0,b|0,c|0,d|0,e|0,f|0)}function YJ(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(28,a|0,b|0,c|0,d|0,e|0,f|0)}function ZJ(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(29,a|0,b|0,c|0,d|0,e|0,f|0)}function _J(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(30,a|0,b|0,c|0,d|0,e|0,f|0)}function $J(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(31,a|0,b|0,c|0,d|0,e|0,f|0)}function aK(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(32,a|0,b|0,c|0,d|0,e|0,f|0)}function bK(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(33,a|0,b|0,c|0,d|0,e|0,f|0)}function cK(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(34,a|0,b|0,c|0,d|0,e|0,f|0)}function dK(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(35,a|0,b|0,c|0,d|0,e|0,f|0)}function eK(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(36,a|0,b|0,c|0,d|0,e|0,f|0)}function fK(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(37,a|0,b|0,c|0,d|0,e|0,f|0)}function gK(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(38,a|0,b|0,c|0,d|0,e|0,f|0)}function hK(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(39,a|0,b|0,c|0,d|0,e|0,f|0)}function iK(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(40,a|0,b|0,c|0,d|0,e|0,f|0)}function jK(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(41,a|0,b|0,c|0,d|0,e|0,f|0)}function kK(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(42,a|0,b|0,c|0,d|0,e|0,f|0)}function lK(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(43,a|0,b|0,c|0,d|0,e|0,f|0)}function mK(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(44,a|0,b|0,c|0,d|0,e|0,f|0)}function nK(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(45,a|0,b|0,c|0,d|0,e|0,f|0)}function oK(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(46,a|0,b|0,c|0,d|0,e|0,f|0)}function pK(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(47,a|0,b|0,c|0,d|0,e|0,f|0)}function qK(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(48,a|0,b|0,c|0,d|0,e|0,f|0)}function rK(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(49,a|0,b|0,c|0,d|0,e|0,f|0)}function sK(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(50,a|0,b|0,c|0,d|0,e|0,f|0)}function tK(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(51,a|0,b|0,c|0,d|0,e|0,f|0)}function uK(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(52,a|0,b|0,c|0,d|0,e|0,f|0)}function vK(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(53,a|0,b|0,c|0,d|0,e|0,f|0)}function wK(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(54,a|0,b|0,c|0,d|0,e|0,f|0)}function xK(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(55,a|0,b|0,c|0,d|0,e|0,f|0)}function yK(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(56,a|0,b|0,c|0,d|0,e|0,f|0)}function zK(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(57,a|0,b|0,c|0,d|0,e|0,f|0)}function AK(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(58,a|0,b|0,c|0,d|0,e|0,f|0)}function BK(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(59,a|0,b|0,c|0,d|0,e|0,f|0)}function CK(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(60,a|0,b|0,c|0,d|0,e|0,f|0)}function DK(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(61,a|0,b|0,c|0,d|0,e|0,f|0)}function EK(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(62,a|0,b|0,c|0,d|0,e|0,f|0)}function FK(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(63,a|0,b|0,c|0,d|0,e|0,f|0)}function GK(){J(0);return 0}function HK(a){a=a|0;J(1);return 0}function IK(a,b){a=a|0;b=b|0;J(2);return 0}function JK(a,b,c){a=a|0;b=b|0;c=c|0;J(3);return 0}function KK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(4);return 0}function LK(a,b,c,d,e){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;J(5);return 0}function MK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(6);return 0}function NK(a){a=a|0;J(7)}function OK(a,b){a=a|0;b=b|0;J(8)}function PK(a,b,c){a=a|0;b=b|0;c=c|0;J(9)}function QK(a,b,c,d){a=a|0;b=b|0;c=c|0;d=d|0;J(10)}function RK(a,b,c,d,e,f){a=a|0;b=b|0;c=c|0;d=d|0;e=e|0;f=f|0;J(11)} function aj(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;do switch(b<<16>>16){case 240:case 228:case 227:case 195:{b=c[d>>2]|0;if(!b)return;pi(c[a>>2]|0,b,1);return}case 294:case 280:case 275:case 268:case 265:case 263:case 248:case 236:case 234:case 206:case 205:{b=c[d>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}case 293:case 264:case 262:case 254:case 250:case 242:case 241:case 237:case 235:case 232:case 220:case 219:case 210:{b=c[d>>2]|0;if(!b)return;ri(c[a>>2]|0,b);return}case 251:case 245:case 244:case 233:case 226:{qi(c[a>>2]|0,c[d>>2]|0);return}case 229:{i=c[a>>2]|0;h=c[d>>2]|0;if(!h)return;a:do if((c[h>>2]|0)>0){d=i+480|0;e=i+304|0;f=i+308|0;g=i+300|0;if(!i){a=0;while(1){b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(0,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(0,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}while(0);a=a+1|0;if((a|0)>=(c[h>>2]|0))break a}}a=0;do{b=c[h+8+(a<<4)+4>>2]|0;if(b|0)ri(i,b);b=c[h+8+(a<<4)+8>>2]|0;if(b|0)pi(i,b,1);b=c[h+8+(a<<4)>>2]|0;do if(b|0){if(c[d>>2]|0){Xd(i,b);break}j=b;if((c[e>>2]|0)>>>0<=j>>>0?(c[f>>2]|0)>>>0>j>>>0:0){c[b>>2]=c[g>>2];c[g>>2]=b;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](b);break}else{j=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);break}}while(0);a=a+1|0}while((a|0)<(c[h>>2]|0))}while(0);if(i|0){if(c[i+480>>2]|0){Xd(i,h);return}j=h;if((c[i+304>>2]|0)>>>0<=j>>>0?(c[i+308>>2]|0)>>>0>j>>>0:0){j=i+300|0;c[h>>2]=c[j>>2];c[j>>2]=h;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);return}else{j=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-j;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);return}}case 289:case 239:{a=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;do{j=b;b=c[b+32>>2]|0;oi(a,j)}while((b|0)!=0);return}case 256:case 252:case 249:{j=c[a>>2]|0;b=c[d>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;b:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{h=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break b}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);c:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=82;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=80;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=80;break}}else d=80;while(0);if((d|0)==80)if(j){a=j+480|0;d=82}if((d|0)==82){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 292:case 291:case 290:case 258:{oi(c[a>>2]|0,c[d>>2]|0);return}case 276:case 271:{Xi(c[a>>2]|0,c[d>>2]|0);return}case 273:{j=c[a>>2]|0;b=c[d+4>>2]|0;if(!b)return;i=b+4|0;a=c[b>>2]|0;d:do if((c[i>>2]|0)>0){e=j+480|0;f=j+304|0;g=j+308|0;h=j+300|0;if(!j){d=0;while(1){a=c[a+(d<<3)>>2]|0;do if(a|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}while(0);d=d+1|0;a=c[b>>2]|0;if((d|0)>=(c[i>>2]|0))break d}}d=0;do{a=c[a+(d<<3)>>2]|0;do if(a|0){if(c[e>>2]|0){Xd(j,a);break}k=a;if((c[f>>2]|0)>>>0<=k>>>0?(c[g>>2]|0)>>>0>k>>>0:0){c[a>>2]=c[h>>2];c[h>>2]=a;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](a);break}else{k=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);break}}while(0);d=d+1|0;a=c[b>>2]|0}while((d|0)<(c[i>>2]|0))}while(0);e:do if(a){do if(j|0){d=j+480|0;if(!(c[d>>2]|0)){e=a;if((c[j+304>>2]|0)>>>0>e>>>0)break;if((c[j+308>>2]|0)>>>0<=e>>>0)break;k=j+300|0;c[a>>2]=c[k>>2];c[k>>2]=a}else Xd(j,a);a=d;d=126;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](a);d=124;break}else{d=Wa[c[29352>>2]&127](a)|0;c[14978]=(c[14978]|0)-d;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](a);d=124;break}}else d=124;while(0);if((d|0)==124)if(j){a=j+480|0;d=126}if((d|0)==126){if(c[a>>2]|0){Xd(j,b);return}k=b;if((c[j+304>>2]|0)>>>0<=k>>>0?(c[j+308>>2]|0)>>>0>k>>>0:0){k=j+300|0;c[b>>2]=c[k>>2];c[k>>2]=b;return}}if(!b)return;if(!(c[7324]|0)){ab[c[29344>>2]&127](b);return}else{k=Wa[c[29352>>2]&127](b)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](b);return}}case 298:case 297:case 296:{b=c[d+4>>2]|0;if(!b)return;ni(c[a>>2]|0,b);return}default:return}while(0)}function bj(f,g,h,i,j,k,l){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;var 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,M=0,N=0,O=0,P=0,Q=0;Q=Ra;Ra=Ra+96|0;J=Q+80|0;D=Q+72|0;G=Q+64|0;C=Q+56|0;z=Q+48|0;A=Q+40|0;v=Q+32|0;u=Q+24|0;s=Q+16|0;q=Q+8|0;p=Q;K=Q+84|0;P=c[f>>2]|0;H=P+165|0;n=(a[H>>0]|0)==0;do if(!n?(c[P+160>>2]|0)==1:0){h=a[P+164>>0]|0;q=h&255;h=h<<24>>24==1;p=h?34855:34585;h=h?19:14;a:do if(c[P+272>>2]|0){if(!(a[P+81>>0]|0))O=13}else{do if(!(0<0|(0==0?(e[P+276>>1]|0)>>>0>>0:0))){n=P+300|0;o=c[n>>2]|0;if(o|0){c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}n=P+296|0;o=c[n>>2]|0;if(!o){n=P+292|0;break}else{c[n>>2]=c[o>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=14;break a}}else n=P+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1;O=13}while(0);if((O|0)==13){o=_d(P,h,0)|0;O=14}if((O|0)==14?o|0:0){ew(o|0,p|0,h|0)|0;F=g;M=c[F+4>>2]|0;E=f+180|0;c[E>>2]=c[F>>2];c[E+4>>2]=M;E=o;M=q;break}O=g;P=c[O+4>>2]|0;f=f+180|0;c[f>>2]=c[O>>2];c[f+4>>2]=P;Ra=Q;return}else O=16;while(0);if((O|0)==16){r=h+4|0;if(c[r>>2]|0){if(!n){cd(f,39404,p);Ra=Q;return}n=wk(P,g)|0;if((n|0)<0){c[q>>2]=g;cd(f,39421,q);Ra=Q;return}}else{h=g;n=d[P+164>>0]|0}o=(i|0)!=0;if(o?(n|0)!=1&(c[r>>2]|0)!=0:0){cd(f,39278,s);Ra=Q;return}r=o?1:n;q=qj(P,h)|0;b:do if((d[f+200>>0]|0)>1){p=c[f>>2]|0;c:do if(!p){if(!(c[7324]|0)){n=Wa[c[29340>>2]&127](16)|0;O=49;break}n=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;p=59064;o=c[p>>2]|0;p=c[p+4>>2]|0;if((p|0)>0|(p|0)==0&o>>>0>0){M=c[14978]|0;F=Tv(o|0,p|0,n|0,((n|0)<0)<<31>>31|0)|0;E=L()|0;c[14768]=((E|0)<0|(E|0)==0&F>>>0<=M>>>0)&1}n=Wa[c[29340>>2]&127](n)|0;if(!n)break b;o=Wa[c[29352>>2]&127](n)|0;o=(c[14978]|0)+o|0;c[14978]=o;if(o>>>0>(c[14982]|0)>>>0)c[14982]=o;o=(c[14981]|0)+1|0;c[14981]=o;if(o>>>0>(c[14987]|0)>>>0)c[14987]=o}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0)break b}else{do if((e[p+276>>1]|0)>=16){o=p+300|0;n=c[o>>2]|0;if(n|0){c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}o=p+296|0;n=c[o>>2]|0;if(!n){n=p+292|0;break}else{c[o>>2]=c[n>>2];O=p+284|0;c[O>>2]=(c[O>>2]|0)+1;O=49;break c}}else n=p+288|0;while(0);c[n>>2]=(c[n>>2]|0)+1}n=_d(p,16,0)|0;O=49}while(0);if((O|0)==49)if(!n)break;o=n+4|0;p=o;s=p+12|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[n>>2]=q;E=h;F=c[E+4>>2]|0;M=o;c[M>>2]=c[E>>2];c[M+4>>2]=F;M=f+272|0;c[n+12>>2]=c[M>>2];c[M>>2]=n}while(0);E=h;F=c[E+4>>2]|0;M=f+180|0;c[M>>2]=c[E>>2];c[M+4>>2]=F;if(!q){Ra=Q;return}else{E=q;g=h;M=r}}d:do if(!(vk(f,E)|0)){h=(a[P+164>>0]|0)==1?1:i;i=P+16|0;p=c[(c[i>>2]|0)+(M<<4)>>2]|0;n=(h|0)==1?34855:34585;o=c[f>>2]|0;do if(((a[o+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[o+312>>2]|0,t|0):0){n=$a[t&127](c[o+316>>2]|0,18,n,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,u);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,v);c[f+12>>2]=1;O=271;break d}}while(0);F=(k|0)==0;do if(((F?(w=d[39319+(h+(j<<1))>>0]|0,x=c[f>>2]|0,(a[x+165>>0]|0)==0):0)?(a[f+200>>0]|0)==0:0)?(y=c[x+312>>2]|0,y|0):0){n=$a[y&127](c[x+316>>2]|0,w,E,0,p,c[f+240>>2]|0)|0;if((n|0)==1){cd(f,39216,A);c[f+12>>2]=23;O=271;break d}if((n|2|0)==2)if(!n)break;else{O=271;break d}else{cd(f,39231,z);c[f+12>>2]=1;O=271;break d}}while(0);do if(!(a[f+200>>0]|0)){o=c[(c[i>>2]|0)+(M<<4)>>2]|0;p=c[f>>2]|0;e:do if(!(a[p+165>>0]|0)){h=f+4|0;q=p+24|0;r=(c[q>>2]&1|0)==0;s=p+16|0;A=c[(c[s>>2]|0)+12>>2]|0;a[p+78>>0]=a[A+77>>0]|0;if(!((b[A+78>>1]&1)==0?(m=eh(p,0,h,0)|0,(m|0)!=0):0))O=75;f:do if((O|0)==75){m=c[p+20>>2]|0;if((m|0)>1)do{n=m;m=m+-1|0;if((b[(c[(c[s>>2]|0)+(m<<4)+12>>2]|0)+78>>1]&1)==0?(B=eh(p,m,h,0)|0,B|0):0){m=B;break f}}while((n|0)>2);if(r)c[q>>2]=c[q>>2]&-2;if(!(a[p+89>>0]|0))break e;c[q>>2]=c[q>>2]|16;break e}while(0);c[f+12>>2]=m;O=f+36|0;c[O>>2]=(c[O>>2]|0)+1;O=270;break d}while(0);if(!(Sd(P,E,o)|0)){if(hi(P,E,o)|0){c[D>>2]=E;cd(f,39347,D);O=270;break d}if(P|0){O=119;break}if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](80)|0;O=141;break}m=Wa[c[29356>>2]&127](80)|0;if((c[14985]|0)>>>0<80)c[14985]=80;o=59064;n=c[o>>2]|0;o=c[o+4>>2]|0;if((o|0)>0|(o|0)==0&n>>>0>0){G=c[14978]|0;D=Tv(n|0,o|0,m|0,((m|0)<0)<<31>>31|0)|0;C=L()|0;c[14768]=((C|0)<0|(C|0)==0&D>>>0<=G>>>0)&1}m=Wa[c[29340>>2]&127](m)|0;if(!m){O=142;break}n=Wa[c[29352>>2]&127](m)|0;n=(c[14978]|0)+n|0;c[14978]=n;if(n>>>0>(c[14982]|0)>>>0)c[14982]=n;n=(c[14981]|0)+1|0;c[14981]=n;if(n>>>0<=(c[14987]|0)>>>0)break;c[14987]=n;break}if(!l){c[C>>2]=g;cd(f,39323,C);O=270;break d}p=c[f+116>>2]|0;p=(p|0)==0?f:p;m=p+84|0;n=c[m>>2]|0;o=1<>2]=n|o;if((M|0)!=1){O=270;break d}s=c[p>>2]|0;m=s+16|0;if(c[(c[m>>2]|0)+20>>2]|0){O=270;break d}if(a[p+199>>0]|0){O=270;break d}n=Pe(c[s>>2]|0,0,s,K,0,542)|0;if(n|0){cd(p,32157,G);c[p+12>>2]=n;O=270;break d}f=c[K>>2]|0;c[(c[m>>2]|0)+20>>2]=f;m=c[s+92>>2]|0;p=c[f+4>>2]|0;c[p+4>>2]=c[f>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;f=(c[14820]|0)+1|0;c[14820]=f;c[14821]=(f|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103;break}else{m=Wa[c[29352>>2]&127](n)|0;O=103}while(0);do if((O|0)==103){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{f=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);f=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((f|0)==7){m=s+81|0;do if(!(a[m>>0]|0)){if(a[s+82>>0]|0)break;a[m>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;m=s+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[s+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);O=270;break d}}O=270;break d}else O=119;while(0);g:do if((O|0)==119){if(c[P+272>>2]|0){if(a[P+81>>0]|0){O=142;break}}else{do if((e[P+276>>1]|0)>=80){n=P+300|0;m=c[n>>2]|0;if(m|0){c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}n=P+296|0;m=c[n>>2]|0;if(!m){m=P+292|0;break}else{c[n>>2]=c[m>>2];O=P+284|0;c[O>>2]=(c[O>>2]|0)+1;O=141;break g}}else m=P+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1}m=_d(P,80,0)|0;O=141}while(0);if((O|0)==141)if(!m)O=142;if((O|0)==142){c[f+12>>2]=7;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;O=270;break}p=m+4|0;s=p+76|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));c[m>>2]=E;b[m+40>>1]=-1;n=c[(c[i>>2]|0)+(M<<4)+12>>2]|0;c[m+72>>2]=n;c[m+32>>2]=1;b[m+44>>1]=200;c[f+228>>2]=m;if((a[f+18>>0]|0)==0?(Bu(E,39382)|0)==0:0)c[n+72>>2]=m;if(a[H>>0]|0){Ra=Q;return}u=f+8|0;m=c[u>>2]|0;t=f+116|0;if(!m){o=c[f>>2]|0;if((c[t>>2]|0)==0?(b[o+76>>1]&8)==0:0)a[f+23>>0]=1;h:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))O=161;else{Ra=Q;return}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;n=c[m>>2]|0;if(n|0){c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}m=o+296|0;n=c[m>>2]|0;if(!n){m=o+292|0;break}else{c[m>>2]=c[n>>2];H=o+284|0;c[H>>2]=(c[H>>2]|0)+1;break h}}else m=o+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=161}while(0);if((O|0)==161)n=_d(o,224,0)|0;if(!n){Ra=Q;return}p=n+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[n>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=n;c[n+8>>2]=o;c[n+4>>2]=0;c[m>>2]=n;c[n+20>>2]=381479589;c[n+12>>2]=f;c[u>>2]=n;Di(n,61,0,1,0)|0;v=n}else v=m;s=c[t>>2]|0;s=(s|0)==0?f:s;m=s+84|0;n=c[m>>2]|0;g=1<>2]=n|g,(M|0)==1):0)?(N=c[s>>2]|0,I=N+16|0,(c[(c[I>>2]|0)+20>>2]|0)==0):0)?(a[s+199>>0]|0)==0:0){m=Pe(c[N>>2]|0,0,N,K,0,542)|0;if(m|0){cd(s,32157,J);c[s+12>>2]=m;break}K=c[K>>2]|0;c[(c[I>>2]|0)+20>>2]=K;m=c[N+92>>2]|0;p=c[K+4>>2]|0;c[p+4>>2]=c[K>>2];if(!(b[p+22>>1]&2)){h=p+32|0;q=p+36|0;r=(c[h>>2]|0)-(c[q>>2]|0)|0;do if((m+-512|0)>>>0<65025?(m+-1&m|0)==0:0){c[h>>2]=m;o=p+80|0;m=c[o>>2]|0;if(!m)break;n=m+-4|0;c[o>>2]=n;m=n;do if((c[14816]|0)>>>0<=m>>>0)if((c[14817]|0)>>>0>m>>>0){c[14979]=(c[14979]|0)+-1;c[n>>2]=c[14819];c[14819]=n;K=(c[14820]|0)+1|0;c[14820]=K;c[14821]=(K|0)<(c[14815]|0)&1;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181;break}else{m=Wa[c[29352>>2]&127](n)|0;O=181}while(0);do if((O|0)==181){c[14980]=(c[14980]|0)-m;if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{K=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-K;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);c[o>>2]=0}while(0);K=Se(c[p>>2]|0,h,r)|0;c[q>>2]=(c[h>>2]|0)-(r&65535);if((K|0)==7){m=N+81|0;do if(!(a[m>>0]|0)){if(a[N+82>>0]|0)break;a[m>>0]=1;if((c[N+180>>2]|0)>0)c[N+264>>2]=1;m=N+272|0;c[m>>2]=(c[m>>2]|0)+1;m=c[N+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);break}}}while(0);i=s+80|0;c[i>>2]=c[i>>2]|g;i=s+20|0;a[i>>0]=a[i>>0]|1;i=v+108|0;do if(!F){m=c[i>>2]|0;n=v+112|0;if((c[n>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=-96;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));r=n;break}else{Di(v,160,0,0,0)|0;r=n;break}}else r=v+112|0;while(0);m=f+44|0;q=c[m>>2]|0;h=q+1|0;c[f+88>>2]=h;p=q+2|0;c[f+92>>2]=p;q=q+3|0;c[m>>2]=q;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;N=c[v+104>>2]|0;a[N+(m*20|0)>>0]=94;b[N+(m*20|0)+2>>1]=0;c[N+(m*20|0)+4>>2]=M;c[N+(m*20|0)+8>>2]=q;c[N+(m*20|0)+12>>2]=2;c[N+(m*20|0)+16>>2]=0;a[N+(m*20|0)+1>>0]=0}else Di(v,94,M,q,2)|0;N=v+152|0;c[N>>2]=c[N>>2]|g;if((M|0)!=1?a[(c[(c[(c[v>>2]|0)+16>>2]|0)+(M<<4)+4>>2]|0)+9>>0]|0:0){N=v+156|0;c[N>>2]=c[N>>2]|g}m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;o=c[v+104>>2]|0;a[o+(m*20|0)>>0]=18;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=q;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(v,18,q,0,0)|0;m=(0==0?(c[P+32>>2]&2|0)==0:0)?4:1;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;N=c[v+104>>2]|0;a[N+(n*20|0)>>0]=95;b[N+(n*20|0)+2>>1]=0;c[N+(n*20|0)+4>>2]=M;c[N+(n*20|0)+8>>2]=2;c[N+(n*20|0)+12>>2]=m;c[N+(n*20|0)+16>>2]=0;a[N+(n*20|0)+1>>0]=0}else Di(v,95,M,2,m)|0;m=d[P+78>>0]|0;n=c[i>>2]|0;if((c[r>>2]|0)>(n|0)){c[i>>2]=n+1;P=c[v+104>>2]|0;a[P+(n*20|0)>>0]=95;b[P+(n*20|0)+2>>1]=0;c[P+(n*20|0)+4>>2]=M;c[P+(n*20|0)+8>>2]=5;c[P+(n*20|0)+12>>2]=m;c[P+(n*20|0)+16>>2]=0;a[P+(n*20|0)+1>>0]=0}else Di(v,95,M,5,m)|0;m=c[i>>2]|0;if(!(a[(c[v>>2]|0)+81>>0]|0))n=(c[v+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else n=59308;c[n+8>>2]=m;n=(c[r>>2]|0)>(m|0);do if(k|j)if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=70;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=0;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0;break}else{Di(v,70,0,p,0)|0;break}else{if(n){c[i>>2]=m+1;P=c[v+104>>2]|0;a[P+(m*20|0)>>0]=-117;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=M;c[P+(m*20|0)+8>>2]=p;c[P+(m*20|0)+12>>2]=1;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(v,139,M,p,1)|0;c[f+128>>2]=m}while(0);o=c[u>>2]|0;i:do if(!o){n=c[f>>2]|0;do if(!(c[t>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);j:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))O=238;else{o=0;break i}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;o=c[m>>2]|0;if(o|0){c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}m=n+296|0;o=c[m>>2]|0;if(!o){m=n+292|0;break}else{c[m>>2]=c[o>>2];P=n+284|0;c[P>>2]=(c[P>>2]|0)+1;break j}}else m=n+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;O=238}while(0);if((O|0)==238)o=_d(n,224,0)|0;if(!o){o=0;break}p=o+104|0;s=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(s|0));c[o>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=o;c[o+8>>2]=n;c[o+4>>2]=0;c[m>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[u>>2]=o;Di(o,61,0,1,0)|0}while(0);Hj(f,M,1,1,34585);n=o+108|0;m=c[n>>2]|0;if((c[o+112>>2]|0)>(m|0)){c[n>>2]=m+1;P=c[o+104>>2]|0;a[P+(m*20|0)>>0]=109;b[P+(m*20|0)+2>>1]=0;c[P+(m*20|0)+4>>2]=0;c[P+(m*20|0)+8>>2]=1;c[P+(m*20|0)+12>>2]=M;c[P+(m*20|0)+16>>2]=0;a[P+(m*20|0)+1>>0]=0}else m=Di(o,109,0,1,M)|0;if(!(a[(c[o>>2]|0)+81>>0]|0)){P=c[o+104>>2]|0;a[P+(m*20|0)+1>>0]=-3;c[P+(m*20|0)+16>>2]=5}m=f+40|0;if(!(c[m>>2]|0))c[m>>2]=1;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=121;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=h;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,121,0,h,0)|0;m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=75;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=6;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else m=Di(v,75,6,q,0)|0;do if(!(a[(c[v>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[i>>2]|0)+-1|0;n=c[v+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=39398;a[o>>0]=-1;break}else{Ei(v,n+(m*20|0)|0,39398,-1);break}}while(0);m=c[i>>2]|0;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;f=c[v+104>>2]|0;a[f+(m*20|0)>>0]=122;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=0;c[f+(m*20|0)+8>>2]=q;c[f+(m*20|0)+12>>2]=h;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(v,122,0,q,h)|0;m=c[i>>2]|0;if((m|0)>0)b[(c[v+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=8;if((c[r>>2]|0)>(m|0)){c[i>>2]=m+1;p=c[v+104>>2]|0;a[p+(m*20|0)>>0]=117;p=p+(m*20|0)+1|0;s=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(s|0));Ra=Q;return}else{Di(v,117,0,0,0)|0;Ra=Q;return}}else O=270;while(0);if((O|0)==270?P|0:0)O=271;if((O|0)==271){if(c[P+480>>2]|0){Xd(P,E);Ra=Q;return}f=E;if((c[P+304>>2]|0)>>>0<=f>>>0?(c[P+308>>2]|0)>>>0>f>>>0:0){f=P+300|0;c[E>>2]=c[f>>2];c[f>>2]=E;Ra=Q;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](E);Ra=Q;return}else{f=Wa[c[29352>>2]&127](E)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](E);Ra=Q;return}}function cj(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,ba=0,ca=0,da=0;da=Ra;Ra=Ra+272|0;$=da+192|0;_=da+184|0;Y=da+152|0;R=da+136|0;X=da+128|0;W=da+120|0;T=da+112|0;P=da+104|0;w=da+96|0;v=da+88|0;u=da+80|0;S=da+232|0;N=da;O=da+200|0;ba=c[f>>2]|0;Q=(j|0)==0;if((h|0)==0&Q){Ra=da;return}aa=f+228|0;ca=c[aa>>2]|0;if(!ca){Ra=da;return}if(((Q?(k=c[ca>>2]|0,r=Ru(k,95)|0,r|0):0)?(a[r>>0]=0,l=Sd(ba,k,0)|0,a[r>>0]=95,l|0):0)?c[l+56>>2]|0:0){q=c[c[l+60>>2]>>2]|0;n=c[ba+348>>2]|0;if(!n){l=ba+340|0;k=ba+344|0}else{l=a[q>>0]|0;if(!(l<<24>>24))k=0;else{k=0;m=q;do{m=m+1|0;k=G(k+(d[208+(l&255)>>0]|0)|0,-1640531535)|0;l=a[m>>0]|0}while(l<<24>>24!=0)}k=(k>>>0)%((c[ba+336>>2]|0)>>>0)|0;l=n+(k<<3)|0;k=n+(k<<3)+4|0}l=c[l>>2]|0;a:do if(!l)k=59292;else{p=d[208+(d[q>>0]|0)>>0]|0;while(1){k=c[k>>2]|0;l=l+-1|0;n=c[k+12>>2]|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-p|0;if(!(V<<24>>24==0|(m|0)!=0)){o=q;do{n=n+1|0;o=o+1|0;V=a[n>>0]|0;m=(d[208+(V&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(V<<24>>24==0|(m|0)!=0))}if(!m)break a;if(!l){k=59292;break}}}while(0);k=c[k+8>>2]|0;if(((k|0?(s=c[k>>2]|0,(c[s>>2]|0)>=3):0)?(t=c[s+92>>2]|0,t|0):0)?Wa[t&127](r+1|0)|0:0){V=ca+36|0;c[V>>2]=c[V>>2]|1024}}V=ba+165|0;do if(a[V>>0]|0)if(Q){M=c[ba+160>>2]|0;c[ca+28>>2]=M;if((M|0)!=1)break;M=ca+36|0;c[M>>2]=c[M>>2]|1;break}else{cd(f,59952,u);Ra=da;return}while(0);b:do if(i&32){k=ca+36|0;l=c[k>>2]|0;if(l&8|0){cd(f,39491,v);Ra=da;return}if(!(l&4)){c[w>>2]=c[ca>>2];cd(f,39541,w);break}c[k>>2]=l|96;M=c[f>>2]|0;v=c[f+8>>2]|0;u=M+166|0;if((a[u>>0]&2)==0?(x=b[ca+42>>1]|0,x<<16>>16>0):0){m=c[ca+4>>2]|0;l=x<<16>>16;k=0;do{if(a[m+(k<<4)+15>>0]&1)a[m+(k<<4)+12>>0]=2;k=k+1|0}while((k|0)!=(l|0))}k=c[f+128>>2]|0;if(k|0){if((k|0)<0)k=(c[v+108>>2]|0)+-1|0;if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(k*20|0)|0;else k=59308;c[k+12>>2]=2}l=ca+40|0;k=b[l>>1]|0;do if(k<<16>>16>-1){k=c[(c[ca+4>>2]|0)+(k<<16>>16<<4)>>2]|0;c[S>>2]=k;if(!k)k=0;else k=(Eu(k)|0)&1073741823;c[S+4>>2]=k;k=oj(M,59,S,0)|0;k=nj(c[f>>2]|0,0,k)|0;if((k|0?(a[k+16>>0]=a[f+198>>0]|0,hj(f,0,0,0,k,d[ca+48>>0]|0,0,0,0,0,2),(a[M+81>>0]|0)==0):0)?(c[f+36>>2]|0)==0:0){k=c[ca+8>>2]|0;c:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break c;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);b[l>>1]=-1;K=k;break}break b}else{k=c[ca+8>>2]|0;d:do if(!k)k=0;else while(1){K=k+55|0;if(((d[K>>0]|d[K+1>>0]<<8)&3)==2)break d;k=c[k+20>>2]|0;if(!k){k=0;break}}while(0);t=k+50|0;m=b[t>>1]|0;if((m&65535)>1){r=c[k+4>>2]|0;s=k+52|0;l=1;q=1;do{p=b[r+(q<<1)>>1]|0;e:do if((l|0)>0){n=r;o=l;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=70;break e}}b[s>>1]=(b[s>>1]|0)+-1<<16>>16}else U=70;while(0);if((U|0)==70){U=0;b[r+(l<<1)>>1]=p;l=l+1|0;m=b[t>>1]|0}q=q+1|0}while(q>>>0<(m&65535)>>>0)}else l=1;b[t>>1]=l;K=k}while(0);I=K+55|0;k=d[I>>0]|d[I+1>>0]<<8;J=k|32;a[I>>0]=J;a[I+1>>0]=J>>8;if(!(a[u>>0]&2)){J=k|40;a[I>>0]=J;a[I+1>>0]=J>>8}m=b[K+50>>1]|0;J=m&65535;l=K+44|0;if(v|0?(y=c[l>>2]|0,(y|0)>0):0){if(!(a[(c[v>>2]|0)+81>>0]|0))k=(c[v+104>>2]|0)+(y*20|0)|0;else k=59308;a[k>>0]=11}c[l>>2]=c[ca+28>>2];k=c[ca+8>>2]|0;if(k|0){w=m<<16>>16==0;x=K+4|0;y=M+272|0;z=K+32|0;A=M+276|0;B=M+81|0;C=M+288|0;D=M+300|0;E=M+296|0;F=M+284|0;H=M+292|0;do{u=k+55|0;f:do if(((d[u>>0]|d[u+1>>0]<<8)&3)!=2){v=k+50|0;l=b[v>>1]|0;do if(!w){s=c[x>>2]|0;t=l&65535;if(!(l<<16>>16)){m=J;n=0}else{r=c[k+4>>2]|0;m=0;q=0;do{p=b[s+(q<<1)>>1]|0;n=r;o=t;while(1){if((b[n>>1]|0)==p<<16>>16)break;if((o|0)>1){n=n+2|0;o=o+-1|0}else{U=89;break}}if((U|0)==89){U=0;m=m+1|0}q=q+1|0}while((q|0)!=(J|0));n=l}if(!m){l=n;break}o=m+(n&65535)|0;p=k+52|0;if((o|0)>(e[p>>1]|0)){n=o*7|0;m=((n|0)<0)<<31>>31;g:do if(c[y>>2]|0)if(!(a[B>>0]|0))U=103;else break b;else{do if(0>>0|(0==(m|0)?(e[A>>1]|0)>>>0>>0:0))l=C;else{l=c[D>>2]|0;if(l|0){c[D>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}l=c[E>>2]|0;if(!l){l=H;break}c[E>>2]=c[l>>2];c[F>>2]=(c[F>>2]|0)+1;break g}while(0);c[l>>2]=(c[l>>2]|0)+1;U=103}while(0);if((U|0)==103){U=0;l=_d(M,n,m)|0}if(!l)break b;gw(l|0,0,n|0)|0;s=k+32|0;ew(l|0,c[s>>2]|0,e[p>>1]<<2|0)|0;c[s>>2]=l;m=l+(o<<2)|0;r=k+4|0;ew(m|0,c[r>>2]|0,e[p>>1]<<1|0)|0;c[r>>2]=m;m=m+(o<<1)|0;l=k+28|0;ew(m|0,c[l>>2]|0,e[p>>1]|0)|0;c[l>>2]=m;b[p>>1]=o;l=d[u>>0]|d[u+1>>0]<<8|16;a[u>>0]=l;a[u+1>>0]=l>>8;l=b[v>>1]|0;m=l&65535}else{m=t;r=k+4|0;s=k+32|0}n=0;while(1){p=c[r>>2]|0;q=b[(c[x>>2]|0)+(n<<1)>>1]|0;h:do if(!(l<<16>>16))U=111;else{o=p;l=l&65535;while(1){if((b[o>>1]|0)==q<<16>>16){l=m;break h}if((l|0)>1){o=o+2|0;l=l+-1|0}else{U=111;break}}}while(0);if((U|0)==111){U=0;b[p+(m<<1)>>1]=q;c[(c[s>>2]|0)+(m<<2)>>2]=c[(c[z>>2]|0)+(n<<2)>>2];l=m+1|0}n=n+1|0;if((n|0)==(J|0))break f;m=l;l=b[v>>1]|0}}while(0);b[k+52>>1]=l}while(0);k=c[k+20>>2]|0}while((k|0)!=0)}s=ca+42|0;l=b[s>>1]|0;p=l<<16>>16;t=K+52|0;if((J|0)<(p|0)){k=b[t>>1]|0;if((k&65535|0)<(p|0)){o=p*7|0;n=((o|0)<0)<<31>>31;i:do if(!M){M=Sv(o|0,n|0,-1,-1)|0;H=L()|0;if(H>>>0>0|(H|0)==0&M>>>0>2147483390)break b;if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](o)|0;U=141;break}k=Wa[c[29356>>2]&127](o)|0;if((c[14985]|0)>>>0>>0)c[14985]=o;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){M=c[14978]|0;H=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;F=L()|0;c[14768]=((F|0)<0|(F|0)==0&H>>>0<=M>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break b;m=Wa[c[29352>>2]&127](k)|0;m=(c[14978]|0)+m|0;c[14978]=m;if(m>>>0>(c[14982]|0)>>>0)c[14982]=m;m=(c[14981]|0)+1|0;c[14981]=m;if(m>>>0<=(c[14987]|0)>>>0)break;c[14987]=m}else{if(c[M+272>>2]|0){if(a[M+81>>0]|0)break b}else{do if(!(0>>0|(0==(n|0)?(e[M+276>>1]|0)>>>0>>0:0))){m=M+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}m=M+296|0;k=c[m>>2]|0;if(!k){k=M+292|0;break}else{c[m>>2]=c[k>>2];U=M+284|0;c[U>>2]=(c[U>>2]|0)+1;U=141;break i}}else k=M+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(M,o,n)|0;U=141}while(0);if((U|0)==141)if(!k)break;gw(k|0,0,o|0)|0;M=K+32|0;ew(k|0,c[M>>2]|0,e[t>>1]<<2|0)|0;c[M>>2]=k;M=k+(p<<2)|0;k=K+4|0;ew(M|0,c[k>>2]|0,e[t>>1]<<1|0)|0;c[k>>2]=M;M=M+(p<<1)|0;k=K+28|0;ew(M|0,c[k>>2]|0,e[t>>1]|0)|0;c[k>>2]=M;b[t>>1]=l;k=d[I>>0]|d[I+1>>0]<<8|16;a[I>>0]=k;a[I+1>>0]=k>>8;k=l;l=b[s>>1]|0}if(l<<16>>16>0){q=K+4|0;r=K+32|0;p=0;k=J;do{o=c[q>>2]|0;j:do if((k|0)>0){m=o;n=k;while(1){if((p|0)==(b[m>>1]|0))break j;if((n|0)>1){m=m+2|0;n=n+-1|0}else{U=149;break}}}else U=149;while(0);if((U|0)==149){U=0;b[o+(k<<1)>>1]=p;c[(c[r>>2]|0)+(k<<2)>>2]=34049;k=k+1|0;l=b[s>>1]|0}p=p+1|0}while((p|0)<(l<<16>>16|0));k=b[t>>1]|0}}else{b[t>>1]=l;k=l}if(!(k<<16>>16)){l=-1;k=-1}else{m=c[K+4>>2]|0;k=k&65535;l=0;n=0;do{M=k;k=k+-1|0;H=b[m+(k<<1)>>1]|0;I=(H&65535)<63;H=cw(1,0,H<<16>>16|0)|0;J=L()|0;l=(I?H:0)|l;n=(I?J:0)|n}while((M|0)>1);l=~l;k=~n}M=K+64|0;c[M>>2]=l;c[M+4>>2]=k}while(0);F=ca+72|0;l=c[F>>2]|0;if(!l)E=-1e6;else{m=c[ba+16>>2]|0;k=0;while(1)if((c[m+(k<<4)+12>>2]|0)==(l|0)){E=k;break}else k=k+1|0}w=c[ca+24>>2]|0;if(w|0){k=O+8|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;k=N;n=k+80|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[N>>2]=1;c[N+16>>2]=c[ca>>2];c[N+24>>2]=ca;c[N+48>>2]=-1;c[O>>2]=f;c[O+4>>2]=N;q=O+24|0;b[q>>1]=4;k:do if((c[w>>2]|0)>0){r=S+4|0;s=S+8|0;t=S+12|0;u=S+24|0;v=O+20|0;p=0;k=4;while(1){o=c[w+4+(p*20|0)>>2]|0;if(o){m=k&65535;b[q>>1]=m&28655;k=c[O>>2]|0;c[S>>2]=k;c[r>>2]=125;c[s>>2]=126;c[t>>2]=0;c[u>>2]=O;n=o+24|0;l=k;M=l+208|0;N=(c[M>>2]|0)+(c[n>>2]|0)|0;c[M>>2]=N;l=c[(c[l>>2]|0)+120>>2]|0;if((l|0)<(N|0)){U=168;break}_j(S,o)|0;l=c[S>>2]|0;k=l+208|0;c[k>>2]=(c[k>>2]|0)-(c[n>>2]|0);k=b[q>>1]|0;N=o+4|0;c[N>>2]=c[N>>2]|k&-32752&65535;k=(m&36880|k&65535)&65535;b[q>>1]=k;if((c[v>>2]|0)>0)break;if((c[l+36>>2]|0)>=1)break k}p=p+1|0;if((p|0)>=(c[w>>2]|0))break k}if((U|0)==168){c[P>>2]=l;cd(k,41637,P)}}while(0)}D=ca+42|0;l=b[D>>1]|0;if(l<<16>>16>0){m=c[ca+4>>2]|0;k=0;l=l<<16>>16;while(1){k=k+(d[m+14>>0]|0)|0;if((l|0)>1){m=m+16|0;l=l+-1|0}else break}}else k=0;k=k+((e[ca+40>>1]|0)>>>15&65535)<<2;if(k>>>0<8)if(!k)k=0;else{m=40;l=0;do{m=(m&65535)+65526|0;k=cw(k|0,l|0,1)|0;l=L()|0}while(l>>>0<0|(l|0)==0&k>>>0<8);m=m&65535;U=189}else{if(k>>>0>255){m=40;l=0;do{m=(m&65535)+40|0;U=k;k=bw(k|0,l|0,4)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>4095);m=m&65535}else{m=40;l=0}if(l>>>0>0|(l|0)==0&k>>>0>15){do{m=(m&65535)+10&65535;U=k;k=bw(k|0,l|0,1)|0;P=l;l=L()|0}while(P>>>0>0|(P|0)==0&U>>>0>31);U=189}else U=189}if((U|0)==189)k=(m&65535)+65526+(e[3648+((k&7)<<1)>>1]|0)&65535;b[ca+46>>1]=k;k=c[ca+8>>2]|0;if(k|0)do{xk(k);k=c[k+20>>2]|0}while((k|0)!=0);if(!(a[V>>0]|0)){C=f+8|0;k=c[C>>2]|0;if(!k){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;l:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))U=209;else{Ra=da;return}else{do if((e[m+276>>1]|0)>=224){k=m+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}k=m+296|0;l=c[k>>2]|0;if(!l){k=m+292|0;break}else{c[k>>2]=c[l>>2];P=m+284|0;c[P>>2]=(c[P>>2]|0)+1;break l}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;U=209}while(0);if((U|0)==209)l=_d(m,224,0)|0;if(!l){Ra=da;return}k=l+104|0;n=k+120|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(n|0));c[l>>2]=m;k=m+4|0;m=c[k>>2]|0;if(m|0)c[m+4>>2]=l;c[l+8>>2]=m;c[l+4>>2]=0;c[k>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[C>>2]=l;Di(l,61,0,1,0)|0;B=l}else B=k;u=B+108|0;k=c[u>>2]|0;v=B+112|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;n=c[B+104>>2]|0;a[n+(k*20|0)>>0]=117;k=n+(k*20|0)+1|0;n=k+19|0;do{a[k>>0]=0;k=k+1|0}while((k|0)<(n|0))}else Di(B,117,0,0,0)|0;A=(c[ca+12>>2]|0)==0;n=A?39573:39584;A=A?37991:39579;m:do if(Q){l=i<<24>>24==0?h:f+188|0;X=c[l>>2]|0;m=c[f+180>>2]|0;k=X-m|0;if((a[X>>0]|0)!=59)k=(c[l+4>>2]|0)+k|0;c[R>>2]=n;c[R+4>>2]=k;c[R+8>>2]=m;m=dd(ba,39589,R)|0;l=f+92|0;k=ca}else{l=f+44|0;t=c[l>>2]|0;p=t+1|0;s=t+2|0;t=t+3|0;c[l>>2]=t;l=c[f+116>>2]|0;a[((l|0)==0?f:l)+21>>0]=1;l=f+92|0;k=c[l>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;R=c[B+104>>2]|0;a[R+(m*20|0)>>0]=109;b[R+(m*20|0)+2>>1]=0;c[R+(m*20|0)+4>>2]=1;c[R+(m*20|0)+8>>2]=k;c[R+(m*20|0)+12>>2]=E;c[R+(m*20|0)+16>>2]=0;a[R+(m*20|0)+1>>0]=0}else Di(B,109,1,k,E)|0;o=c[u>>2]|0;if((o|0)>0)b[(c[B+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=16;c[f+40>>2]=2;k=o+1|0;if((c[v>>2]|0)>(o|0)){c[u>>2]=k;R=c[B+104>>2]|0;a[R+(o*20|0)>>0]=13;b[R+(o*20|0)+2>>1]=0;c[R+(o*20|0)+4>>2]=p;c[R+(o*20|0)+8>>2]=0;c[R+(o*20|0)+12>>2]=k;c[R+(o*20|0)+16>>2]=0;a[R+(o*20|0)+1>>0]=0}else Di(B,13,p,0,k)|0;m=f+36|0;do if(!(c[m>>2]|0)){k=yk(f,j)|0;if(!k)break;i=k+42|0;b[D>>1]=b[i>>1]|0;R=k+4|0;w=ca+4|0;c[w>>2]=c[R>>2];b[i>>1]=0;c[R>>2]=0;do if(!(c[ba+480>>2]|0)){i=k+32|0;R=(c[i>>2]|0)+-1|0;c[i>>2]=R;if(R|0)break;Vi(ba,k)}else Vi(ba,k);while(0);a[S>>0]=13;n=S+4|0;c[n>>2]=p;c[S+16>>2]=0;q=S+8|0;c[q>>2]=0;r=S+12|0;c[r>>2]=0;kj(f,j,S)|0;if(c[m>>2]|0)break;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=67;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=p;c[S+(k*20|0)+8>>2]=0;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,67,p,0,0)|0;m=c[B+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;k=c[n>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;o=c[B+104>>2]|0;a[o+(m*20|0)>>0]=14;b[o+(m*20|0)+2>>1]=0;c[o+(m*20|0)+4>>2]=k;c[o+(m*20|0)+8>>2]=0;c[o+(m*20|0)+12>>2]=0;c[o+(m*20|0)+16>>2]=0;a[o+(m*20|0)+1>>0]=0;o=m}else o=Di(B,14,k,0,0)|0;n=c[q>>2]|0;k=c[r>>2]|0;m=c[u>>2]|0;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=92;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=n;c[S+(m*20|0)+8>>2]=k;c[S+(m*20|0)+12>>2]=s;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,92,n,k,s)|0;zk(B,ca,0);k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=121;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=t;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,121,1,t,0)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=122;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=1;c[S+(k*20|0)+8>>2]=s;c[S+(k*20|0)+12>>2]=t;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,122,1,s,t)|0;k=c[u>>2]|0;if((c[v>>2]|0)>(k|0)){c[u>>2]=k+1;S=c[B+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=o;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(B,11,0,o,0)|0;m=c[u>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))k=(c[B+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else k=59308;c[k+8>>2]=m;if((c[v>>2]|0)>(m|0)){c[u>>2]=m+1;S=c[B+104>>2]|0;a[S+(m*20|0)>>0]=117;b[S+(m*20|0)+2>>1]=0;c[S+(m*20|0)+4>>2]=1;c[S+(m*20|0)+8>>2]=0;c[S+(m*20|0)+12>>2]=0;c[S+(m*20|0)+16>>2]=0;a[S+(m*20|0)+1>>0]=0}else Di(B,117,1,0,0)|0;S=b[D>>1]|0;r=S<<16>>16;if(S<<16>>16>0){o=0;p=c[w>>2]|0;k=0;while(1){m=0;n=c[p>>2]|0;n:while(1){switch(a[n>>0]|0){case 0:break n;case 34:{m=m+1|0;break}default:{}}m=m+1|0;n=n+1|0}k=k+7+m|0;o=o+1|0;if((o|0)==(r|0)){n=k;break}else p=p+16|0}}else n=0;k=0;m=c[ca>>2]|0;o:while(1){switch(a[m>>0]|0){case 0:break o;case 34:{k=k+1|0;break}default:{}}k=k+1|0;m=m+1|0}x=n+2+k|0;z=(x|0)<50;q=z?59952:41687;y=z?41685:41691;z=z?34066:41696;x=(r*6|0)+35+x|0;S=Sv(x|0,((x|0)<0)<<31>>31|0,-1,-1)|0;j=L()|0;p:do if(!(j>>>0>0|(j|0)==0&S>>>0>2147483390)){do if(!(c[7324]|0)){m=Wa[c[29340>>2]&127](x)|0;if(!m)break p}else{k=Wa[c[29356>>2]&127](x)|0;if((c[14985]|0)>>>0>>0)c[14985]=x;n=59064;m=c[n>>2]|0;n=c[n+4>>2]|0;if((n|0)>0|(n|0)==0&m>>>0>0){S=c[14978]|0;j=Tv(m|0,n|0,k|0,((k|0)<0)<<31>>31|0)|0;R=L()|0;c[14768]=((R|0)<0|(R|0)==0&j>>>0<=S>>>0)&1}m=Wa[c[29340>>2]&127](k)|0;if(!m)break p;k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0<=(c[14987]|0)>>>0)break;c[14987]=k}while(0);Cb(x,m,41699,T)|0;k=(Eu(m)|0)&1073741823;u=c[ca>>2]|0;t=a[u>>0]|0;q:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break q}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;r:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){p=o+-1|0;s:do if((n|0)==(d[2064+p>>0]|0)){r=1136+(e[1776+(p<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break s;o=o+1|0;if((o|0)>=(n|0)){U=302;break r}}}while(0);o=a[4224+p>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){p=t;t=0}else U=302}else U=302;while(0);if((U|0)==302){a[m+k>>0]=34;k=k+1|0;p=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(p<<24>>24){s=0;r=u;do{a[o>>0]=p;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;p=a[r>>0]|0;n=k+1|0;o=m+k|0}while(p<<24>>24!=0)}if(t){a[o>>0]=34;k=n}o=k+1|0;a[m+k>>0]=40;k=x-o|0;n=m+o|0;if((b[D>>1]|0)>0){p=0;v=c[w>>2]|0;while(1){Cb(k,n,q,W)|0;k=((Eu(n)|0)&1073741823)+o|0;u=c[v>>2]|0;t=a[u>>0]|0;t:do if(!(t<<24>>24)){n=0;s=0}else{n=0;o=t;while(1){if(!(o<<24>>24==95?1:(a[880+(o&255)>>0]&6)!=0)){s=1;break t}n=n+1|0;o=a[u+n>>0]|0;if(!(o<<24>>24)){s=0;break}}}while(0);o=t&255;u:do if((o+-48|0)>>>0>=10){do if((n|0)>1){o=a[3952+((d[208+o>>0]<<2^n^(d[208+(d[u+(n+-1)>>0]|0)>>0]|0)*3|0)%127|0)>>0]|0;if(!(o<<24>>24))break;o=o&255;while(1){q=o+-1|0;v:do if((n|0)==(d[2064+q>>0]|0)){r=1136+(e[1776+(q<<1)>>1]|0)|0;o=0;while(1){if((a[u+o>>0]&-33)<<24>>24!=(a[r+o>>0]|0))break v;o=o+1|0;if((o|0)>=(n|0)){U=326;break u}}}while(0);o=a[4224+q>>0]|0;if(!(o<<24>>24))break;else o=o&255}}while(0);if(!((n|0)==0|s)){q=t;t=0}else U=326}else U=326;while(0);if((U|0)==326){U=0;a[m+k>>0]=34;k=k+1|0;q=a[u>>0]|0;t=1}n=k+1|0;o=m+k|0;if(q<<24>>24){s=0;r=u;do{a[o>>0]=q;if((a[r>>0]|0)==34){a[m+n>>0]=34;k=k+2|0}else k=n;s=s+1|0;r=u+s|0;q=a[r>>0]|0;n=k+1|0;o=m+k|0}while(q<<24>>24!=0)}if(t){a[o>>0]=34;k=n}T=m+k|0;a[T>>0]=0;n=c[18080+((a[v+13>>0]|0)+-65<<2)>>2]|0;o=(Eu(n)|0)&1073741823;ew(T|0,n|0,o|0)|0;o=o+k|0;p=p+1|0;k=x-o|0;n=m+o|0;if((p|0)<(b[D>>1]|0)){v=v+16|0;q=y}else break}}c[X>>2]=z;Cb(k,n,31408,X)|0;k=ca;break m}while(0);k=ba+81|0;if(a[k>>0]|0){m=0;k=ca;break m}if(a[ba+82>>0]|0){m=0;k=ca;break m}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){m=0;k=ca;break m}c[k+12>>2]=7;m=0;k=ca;break m}while(0);Ra=da;return}while(0);p=ba+16|0;U=c[k>>2]|0;W=c[l>>2]|0;X=c[f+88>>2]|0;c[Y>>2]=c[(c[p>>2]|0)+(E<<4)>>2];c[Y+4>>2]=34585;c[Y+8>>2]=A;c[Y+12>>2]=U;c[Y+16>>2]=U;c[Y+20>>2]=W;c[Y+24>>2]=m;c[Y+28>>2]=X;Ak(f,39604,Y);w:do if(m|0){if(c[ba+480>>2]|0){Xd(ba,m);break}l=m;do if((c[ba+304>>2]|0)>>>0<=l>>>0){if((c[ba+308>>2]|0)>>>0<=l>>>0)break;Y=ba+300|0;c[m>>2]=c[Y>>2];c[Y>>2]=m;break w}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{Y=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-Y;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);l=c[C>>2]|0;m=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(E<<4)+12>>2]>>2]|0)+1|0;n=l+108|0;o=c[n>>2]|0;if((c[l+112>>2]|0)>(o|0)){c[n>>2]=o+1;Y=c[l+104>>2]|0;a[Y+(o*20|0)>>0]=95;b[Y+(o*20|0)+2>>1]=0;c[Y+(o*20|0)+4>>2]=E;c[Y+(o*20|0)+8>>2]=1;c[Y+(o*20|0)+12>>2]=m;c[Y+(o*20|0)+16>>2]=0;a[Y+(o*20|0)+1>>0]=0}else Di(l,95,E,1,m)|0;if(c[ca+36>>2]&8|0?(Z=c[p>>2]|0,(c[(c[Z+(E<<4)+12>>2]|0)+72>>2]|0)==0):0){c[_>>2]=c[Z+(E<<4)>>2];Ak(f,39691,_)}c[$>>2]=c[k>>2];Bk(B,E,dd(ba,39733,$)|0);if(!(a[V>>0]|0)){Ra=da;return}}else k=ca;if(mi((c[F>>2]|0)+8|0,c[k>>2]|0,ca)|0){k=ba+81|0;if(a[k>>0]|0){Ra=da;return}if(a[ba+82>>0]|0){Ra=da;return}a[k>>0]=1;if((c[ba+180>>2]|0)>0)c[ba+264>>2]=1;k=ba+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[ba+236>>2]|0;if(!k){Ra=da;return}c[k+12>>2]=7;Ra=da;return}c[aa>>2]=0;ba=ba+24|0;c[ba>>2]=c[ba>>2]|1;if(c[ca+12>>2]|0){Ra=da;return}k=c[f+180>>2]|0;o=(c[((c[g>>2]|0)==0?h:g)>>2]|0)-k|0;o=(o|0)>-1?k+o|0:-1;l=a[k>>0]|0;if(l<<24>>24!=0&o>>>0>k>>>0){n=0;while(1){m=k+1|0;if((l&255)>191){k=m;while(1){l=a[k>>0]|0;if((l&-64)<<24>>24==-128)k=k+1|0;else break}}else{k=m;l=a[m>>0]|0}if(l<<24>>24!=0&k>>>0>>0)n=n+1|0;else break}k=n+14|0}else k=13;c[ca+52>>2]=k;Ra=da;return}function dj(f,g,h,i){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;s=Ra;Ra=Ra+64|0;n=s;q=s+4|0;r=c[f>>2]|0;j=c[f+228>>2]|0;do if(j|0){m=c[j+4>>2]|0;l=(b[j+42>>1]|0)+-1|0;j=(d[r+165>>0]|0)+4&255;k=q+20|0;a[k>>0]=j;c[q+4>>2]=127;c[q+8>>2]=128;c[q+24>>2]=0;if(g){_j(q,g)|0;j=a[k>>0]|0}if(!(j<<24>>24)){c[n>>2]=c[m+(l<<4)>>2];cd(f,41761,n);break}o=m+(l<<4)+4|0;j=c[o>>2]|0;if(j|0)ni(r,j);j=q;k=j+52|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(k|0));a[q>>0]=-83;while(1)if(!(a[880+(d[h>>0]|0)>>0]&1))break;else h=h+1|0;j=i-h|0;a:do if((j|0)<=0)if(!h)j=0;else{k=j;p=15}else while(1){k=j+-1|0;if(!(a[880+(d[h+k>>0]|0)>>0]&1)){k=j;p=15;break a}if((j|0)>1)j=k;else{p=15;break}}while(0);b:do if((p|0)==15){m=Sv(k|0,((k|0)<0)<<31>>31|0,1,0)|0;n=L()|0;c:do if(c[r+272>>2]|0)if(!(a[r+81>>0]|0))p=25;else{j=0;break b}else{do if(!(n>>>0>0|((n|0)==0?m>>>0>(e[r+276>>1]|0)>>>0:0))){l=r+300|0;j=c[l>>2]|0;if(j|0){c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}l=r+296|0;j=c[l>>2]|0;if(!j){j=r+292|0;break}else{c[l>>2]=c[j>>2];i=r+284|0;c[i>>2]=(c[i>>2]|0)+1;break c}}else j=r+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=25}while(0);if((p|0)==25)j=_d(r,m,n)|0;if(!j)j=0;else{ew(j|0,h|0,k|0)|0;a[j+k>>0]=0}}while(0);p=q+8|0;c[p>>2]=j;c[q+12>>2]=g;c[q+4>>2]=4096;j=dk(r,q,1,0)|0;c[o>>2]=j;j=c[p>>2]|0;do if(j|0){if(r|0){if(c[r+480>>2]|0){Xd(r,j);break}p=j;if((c[r+304>>2]|0)>>>0<=p>>>0?(c[r+308>>2]|0)>>>0>p>>>0:0){p=r+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0)}while(0);if((d[f+200>>0]|0)>1?(p=q+8|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[q>>2]=f,c[q+4>>2]=124,g|0):0)_j(q,g)|0;if(!g){Ra=s;return}ni(r,g);Ra=s;return}function ej(f,g,h,i){f=f|0;g=g|0;h=h|0;i=i|0;var j=0,k=0,l=0,m=0,n=0;n=Ra;Ra=Ra+16|0;m=n;if(((g|0)==44?(c[f+36>>2]|0)==0:0)?(d[f+200>>0]|0)<=1:0){j=Xk(c[f>>2]|0,h,i)|0;if(!j){m=0;Ra=n;return m|0}else k=f}else l=4;a:do if((l|0)==4){j=c[f>>2]|0;b:do if(c[j+272>>2]|0){if(!(a[j+81>>0]|0))l=14}else{do if((e[j+276>>1]|0)>=52){k=j+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}k=j+296|0;l=c[k>>2]|0;if(!l){k=j+292|0;break}else{c[k>>2]=c[l>>2];j=j+284|0;c[j>>2]=(c[j>>2]|0)+1;j=l;l=15;break b}}else k=j+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;l=14}while(0);if((l|0)==14){j=_d(j,52,0)|0;l=15}do if((l|0)==15){if(!j){j=c[f>>2]|0;break}k=j;l=k+52|0;do{c[k>>2]=0;k=k+4|0}while((k|0)<(l|0));a[j>>0]=g;b[j+34>>1]=-1;if(!i)k=0;else{c[j+16>>2]=i;k=c[i+4>>2]&2097412;c[j+4>>2]=k}if(h|0){c[j+12>>2]=h;c[j+4>>2]=k|c[h+4>>2]&2097412}Ym(j);k=f;break a}while(0);if(h|0)ni(j,h);if(!i){m=0;Ra=n;return m|0}ni(j,i);m=0;Ra=n;return m|0}while(0);k=c[(c[k>>2]|0)+120>>2]|0;if((k|0)>=(c[j+24>>2]|0)){m=j;Ra=n;return m|0}c[m>>2]=k;cd(f,41637,m);m=j;Ra=n;return m|0}function fj(f,g,h,i){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;q=h;l=c[f>>2]|0;m=i+53|0;a:do if(c[l+272>>2]|0)if(!(a[l+81>>0]|0))p=11;else{q=0;return q|0}else{do if(!(0<0|(0==0?(e[l+276>>1]|0)>>>0>>0:0))){j=l+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}j=l+296|0;k=c[j>>2]|0;if(!k){j=l+292|0;break}else{c[j>>2]=c[k>>2];o=l+284|0;c[o>>2]=(c[o>>2]|0)+1;o=k;break a}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;p=11}while(0);if((p|0)==11)o=_d(l,m,0)|0;if(!o){q=o;return q|0}a[o>>0]=g;a[o+1>>0]=0;k=o+4|0;c[k>>2]=8388608;b[o+34>>1]=-1;c[o+16>>2]=0;c[o+12>>2]=0;c[o+20>>2]=0;c[o+40>>2]=0;c[o+44>>2]=0;a[o+38>>0]=0;c[o+28>>2]=0;b[o+32>>1]=0;j=o+52|0;g=o+8|0;c[g>>2]=j;ew(j|0,h|0,i|0)|0;a[j+i>>0]=0;g=c[g>>2]|0;j=a[g>>0]|0;if(((a[880+(j&255)>>0]|0)<0?(c[k>>2]=(j<<24>>24==34?67108928:67108864)|c[k>>2],g|0):0)?(n=a[g>>0]|0,(a[880+(n&255)>>0]|0)<0):0){m=n<<24>>24==91?93:n;l=0;j=1;while(1){k=a[g+j>>0]|0;if(k<<24>>24==m<<24>>24){j=j+1|0;k=g+l|0;if((a[g+j>>0]|0)!=m<<24>>24)break;a[k>>0]=m}else a[g+l>>0]=k;l=l+1|0;j=j+1|0}a[k>>0]=0}c[o+24>>2]=1;if((d[f+200>>0]|0)<=1){q=o;return q|0}l=c[f>>2]|0;b:do if(!l){if(!(c[7324]|0)){j=Wa[c[29340>>2]&127](16)|0;p=47;break}j=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;l=59064;k=c[l>>2]|0;l=c[l+4>>2]|0;if((l|0)>0|(l|0)==0&k>>>0>0){n=c[14978]|0;h=Tv(k|0,l|0,j|0,((j|0)<0)<<31>>31|0)|0;g=L()|0;c[14768]=((g|0)<0|(g|0)==0&h>>>0<=n>>>0)&1}j=Wa[c[29340>>2]&127](j)|0;if(!j){q=o;return q|0}k=Wa[c[29352>>2]&127](j)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0)c[14987]=k}else{if(c[l+272>>2]|0){if(a[l+81>>0]|0){q=o;return q|0}}else{do if((e[l+276>>1]|0)>=16){k=l+300|0;j=c[k>>2]|0;if(j|0){c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}k=l+296|0;j=c[k>>2]|0;if(!j){j=l+292|0;break}else{c[k>>2]=c[j>>2];p=l+284|0;c[p>>2]=(c[p>>2]|0)+1;p=47;break b}}else j=l+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1}j=_d(l,16,0)|0;p=47}while(0);if((p|0)==47)if(!j){q=o;return q|0}c[j>>2]=o;c[j+4>>2]=q;c[j+8>>2]=i;q=f+272|0;c[j+12>>2]=c[q>>2];c[q>>2]=j;q=o;return q|0}function gj(e,f,g,h,i){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;B=Ra;Ra=Ra+16|0;w=B+8|0;k=B;y=c[e+228>>2]|0;do if(!y)A=60;else{z=y+36|0;j=c[z>>2]|0;if(j&4|0){c[k>>2]=c[y>>2];cd(e,41817,k);A=60;break}x=j|4;c[z>>2]=x;if(f){v=c[f>>2]|0;if((v|0)>0){t=y+42|0;u=y+4|0;l=0;m=-1;s=0;while(1){j=c[f+4+(s*20|0)>>2]|0;a:do if(!j)j=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096))break a;if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){j=0;break}}while(0);k=a[j>>0]|0;switch(k<<24>>24){case 110:{a[j>>0]=59;A=20;break}case 106:{k=c[j+12>>2]|0;if((a[k>>0]|0)==110){a[k>>0]=59;k=a[j>>0]|0;A=19}else j=m;break}default:A=19}if((A|0)==19){A=0;if(k<<24>>24==59)A=20;else j=m}b:do if((A|0)==20){A=0;o=c[j+8>>2]|0;j=b[t>>1]|0;if(j<<16>>16>0){r=c[u>>2]|0;n=a[o>>0]|0;q=a[208+(n&255)>>0]|0;p=j<<16>>16;c:do if(!(n<<24>>24)){j=0;while(1){if(q<<24>>24==(a[208+(d[c[r+(j<<4)>>2]>>0]|0)>>0]|0))break c;j=j+1|0;if((j|0)>=(p|0))break b}}else{j=0;while(1){k=c[r+(j<<4)>>2]|0;if(q<<24>>24==(a[208+(d[k>>0]|0)>>0]|0)){m=o;do{m=m+1|0;k=k+1|0;C=a[m>>0]|0;n=(d[208+(C&255)>>0]|0)-(d[208+(d[k>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(n|0)!=0));if(!n)break c}j=j+1|0;if((j|0)>=(p|0))break b}}while(0);l=r+(j<<4)+15|0;a[l>>0]=a[l>>0]|1;l=r+(j<<4)|0}else j=0}while(0);s=s+1|0;if((s|0)==(v|0))break;else m=j}m=(v|0)==1;n=j;A=34}}else{n=(b[y+42>>1]|0)+-1|0;l=c[y+4>>2]|0;m=l+(n<<4)+15|0;a[m>>0]=a[m>>0]|1;m=1;l=l+(n<<4)|0;A=34}if((A|0)==34?m&(l|0)!=0:0){if(!(a[l+15>>0]&4))k=59952;else{k=c[l>>2]|0;k=k+(Eu(k)|0)+1|0}C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)+-105|0;if(!(C<<24>>24==0|(j|0)!=0)){l=31453;do{k=k+1|0;l=l+1|0;C=a[k>>0]|0;j=(d[208+(C&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(C<<24>>24==0|(j|0)!=0))}if((i|0)!=1&(j|0)==0){m=(f|0)!=0;d:do if(m&(d[e+200>>0]|0)>1){j=c[f+4>>2]|0;e:do if(!j)l=0;else while(1){k=c[j+4>>2]|0;if(!(k&4096)){l=j;break e}if(!(k&262144))j=j+12|0;else j=(c[j+20>>2]|0)+4|0;j=c[j>>2]|0;if(!j){l=0;break}}while(0);j=y+40|0;k=c[e+272>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break d}c[k>>2]=j}}else j=y+40|0;while(0);b[j>>1]=n;a[y+48>>0]=g;c[z>>2]=x|h<<3;if(m){a[e+198>>0]=a[f+16>>0]|0;break}else{Ra=B;return}}}if(h|0){cd(e,41858,w);A=60;break}hj(e,0,0,0,f,g,0,0,i,0,2);Ra=B;return}while(0);if((A|0)==60?(f|0)==0:0){Ra=B;return}ri(c[e>>2]|0,f);Ra=B;return}function hj(f,g,h,i,j,k,l,m,n,o,p){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;k=k|0;l=l|0;m=m|0;n=n|0;o=o|0;p=p|0;var q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=0,aa=0,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;ya=Ra;Ra=Ra+416|0;ta=ya+320|0;sa=ya+296|0;ra=ya+280|0;oa=ya+272|0;na=ya+256|0;ma=ya+248|0;ga=ya+240|0;fa=ya+232|0;ba=ya+224|0;aa=ya+216|0;Y=ya+208|0;U=ya+200|0;T=ya+192|0;S=ya+184|0;Q=ya+176|0;P=ya+168|0;M=ya+160|0;N=ya+152|0;K=ya+144|0;J=ya+136|0;I=ya+128|0;H=ya+120|0;G=ya+112|0;D=ya+104|0;A=ya+96|0;y=ya+88|0;x=ya+80|0;pa=ya+384|0;_=ya;$=ya+352|0;B=ya+328|0;xa=c[f>>2]|0;la=xa+81|0;a:do if(((a[la>>0]|0)==0?(ca=f+36|0,(c[ca>>2]|0)<=0):0)?(ua=f+200|0,da=p<<24>>24==2,da|(a[ua>>0]|0)!=1):0){va=xa+165|0;b:do if(!(a[va>>0]|0)){s=f+4|0;t=xa+24|0;u=(c[t>>2]&1|0)==0;v=xa+16|0;qa=c[(c[v>>2]|0)+12>>2]|0;a[xa+78>>0]=a[qa+77>>0]|0;if(!((b[qa+78>>1]&1)==0?(q=eh(xa,0,s,0)|0,(q|0)!=0):0))wa=7;c:do if((wa|0)==7){q=c[xa+20>>2]|0;if((q|0)>1)do{r=q;q=q+-1|0;if((b[(c[(c[v>>2]|0)+(q<<4)+12>>2]|0)+78>>1]&1)==0?(w=eh(xa,q,s,0)|0,w|0):0){q=w;break c}}while((r|0)>2);if(u)c[t>>2]=c[t>>2]&-2;if(!(a[xa+89>>0]|0))break b;c[t>>2]=c[t>>2]|16;break b}while(0);c[f+12>>2]=q;c[ca>>2]=(c[ca>>2]|0)+1;r=m;q=0;wa=468;break a}while(0);qa=(i|0)!=0;d:do if(qa){q=c[f>>2]|0;z=h+4|0;if(c[z>>2]|0){if(a[q+165>>0]|0){cd(f,39404,x);r=m;q=0;wa=468;break a}q=wk(q,g)|0;if((q|0)<0){c[y>>2]=g;cd(f,39421,y);r=m;q=0;wa=468;break a}else{u=q;g=h}}else u=d[q+164>>0]|0;y=i+8|0;e:do if(!(a[va>>0]|0)){r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}x=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;q=c[f>>2]|0;r=i+24|0;s=c[r>>2]|0;do if(s|0){if(q|0?c[q+480>>2]|0:0){Vi(q,s);break}ja=s+32|0;ka=(c[ja>>2]|0)+-1|0;c[ja>>2]=ka;if(!ka)Vi(q,s)}while(0);c[r>>2]=x;if(x){ka=x+32|0;c[ka>>2]=(c[ka>>2]|0)+1;f:do if(a[i+45>>0]&2){v=c[i+72>>2]|0;q=c[x+8>>2]|0;g:do if(q|0){w=d[208+(d[v>>0]|0)>>0]|0;while(1){s=c[q>>2]|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-w|0;if(!(ka<<24>>24==0|(r|0)!=0)){t=v;do{s=s+1|0;t=t+1|0;ka=a[s>>0]|0;r=(d[208+(ka&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(r|0)!=0))}if(!r)break;q=c[q+20>>2]|0;if(!q)break g}c[i+76>>2]=q;break f}while(0);c[A>>2]=v;c[A+4>>2]=0;cd(f,41107,A);a[f+17>>0]=1;break e}while(0);if(!(c[z>>2]|0))u=(c[x+72>>2]|0)==(c[(c[xa+16>>2]|0)+28>>2]|0)?1:u}}while(0);t=c[f>>2]|0;c[B>>2]=f;t=c[t+16>>2]|0;c[B+12>>2]=c[t+(u<<4)>>2];c[B+4>>2]=c[t+(u<<4)+12>>2];c[B+16>>2]=41914;c[B+20>>2]=g;t=(u|0)==1;c[B+8>>2]=t&1;al(B,i)|0;r=c[y>>2]|0;if(!r)q=i+12|0;else{s=c[(c[f>>2]|0)+16>>2]|0;q=0;while(1)if((c[s+(q<<4)+12>>2]|0)==(r|0))break;else q=q+1|0;q=s+(q<<4)|0}r=bd(f,0,c[i+16>>2]|0,c[q>>2]|0)|0;if(!r){r=m;q=0;wa=468;break a}if(t?(c[(c[xa+16>>2]|0)+28>>2]|0)!=(c[r+72>>2]|0):0){c[D>>2]=c[r>>2];cd(f,41920,D);r=m;q=0;wa=468;break a}if((c[r+36>>2]&32|0)!=0?(C=c[r+8>>2]|0,(C|0)!=0):0){q=C;while(1){ka=q+55|0;if(((d[ka>>0]|d[ka+1>>0]<<8)&3)==2){ka=r;Z=q;ja=u;ha=g;break d}q=c[q+20>>2]|0;if(!q){ka=r;Z=0;ja=u;ha=g;break}}}else{ka=r;Z=0;ja=u;ha=g}}else{q=c[f+228>>2]|0;if(!q){r=m;q=0;wa=468;break a}r=c[q+72>>2]|0;if(!r){ka=q;Z=0;ja=-1e6;ha=0}else{s=c[xa+16>>2]|0;t=0;while(1)if((c[s+(t<<4)+12>>2]|0)==(r|0)){ka=q;Z=0;ja=t;ha=0;break}else t=t+1|0}}while(0);ia=xa+16|0;A=c[ia>>2]|0;t=A+(ja<<4)|0;s=c[ka>>2]|0;do if(s|0){q=a[s>>0]|0;h:do if(!(q<<24>>24)){q=39441;wa=69}else{ea=q&255;q=208+ea|0;do if((ea|32|0)==115){q=a[s+1>>0]|0;if(!(q<<24>>24)){q=39442;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==113){q=a[s+2>>0]|0;if(!(q<<24>>24)){q=39443;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==108){q=a[s+3>>0]|0;if(!(q<<24>>24)){q=39444;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==105){q=a[s+4>>0]|0;if(!(q<<24>>24)){q=39445;wa=69;break h}ea=q&255;q=208+ea|0;if((ea|32|0)==116){q=a[s+5>>0]|0;if(!(q<<24>>24)){q=39446;wa=69;break h}q=q&255;if((q|32|0)!=101){r=101;q=208+q|0;break}q=a[s+6>>0]|0;if(!(q<<24>>24)){q=39447;wa=69;break h}if(q<<24>>24==95)break h;else{r=95;q=208+(q&255)|0}}else r=116}else r=105}else r=108}else r=113}else r=115;while(0);F=d[q>>0]|0;E=r;wa=73}while(0);if((wa|0)==69){F=0;E=a[208+(d[q>>0]|0)>>0]|0;wa=73}if((wa|0)==73?(F|0)!=(E&255|0):0)break;if(qa&(a[va>>0]|0)==0){c[G>>2]=s;cd(f,41970,G);r=m;q=0;wa=468;break a}}while(0);if(c[ka+12>>2]|0){cd(f,41998,H);r=m;q=0;wa=468;break}if(c[ka+56>>2]|0){cd(f,42023,I);r=m;q=0;wa=468;break}if(!ha){q=c[ka+8>>2]|0;if(!q)q=1;else{r=1;do{r=r+1|0;q=c[q+20>>2]|0}while((q|0)!=0);q=r}c[M>>2]=s;c[M+4>>2]=q;q=dd(xa,42115,M)|0;if(!q){r=m;q=0;wa=468;break}if(a[ua>>0]|0){r=q+7|0;a[r>>0]=(a[r>>0]|0)+1<<24>>24;r=a[ua>>0]|0;if((r&255)<=1)wa=124}else{r=0;wa=124}}else{y=qj(xa,ha)|0;if(!y){r=m;q=0;wa=468;break}if(vk(f,y)|0){r=m;q=y;wa=468;break}r=a[ua>>0]|0;if((r&255)<=1){if((a[va>>0]|0)==0?Sd(xa,y,0)|0:0){c[J>>2]=y;cd(f,42057,J);r=m;q=y;wa=468;break}if(!(hi(xa,y,c[t>>2]|0)|0)){q=y;wa=124}else{if(!o){c[K>>2]=y;cd(f,42091,K);r=m;q=y;wa=468;break}t=c[f+116>>2]|0;t=(t|0)==0?f:t;q=t+84|0;r=c[q>>2]|0;s=1<>2]=r|s;if((ja|0)!=1){r=m;q=y;wa=468;break}x=c[t>>2]|0;q=x+16|0;if(c[(c[q>>2]|0)+20>>2]|0){r=m;q=y;wa=468;break}if(a[t+199>>0]|0){r=m;q=y;wa=468;break}r=Pe(c[x>>2]|0,0,x,pa,0,542)|0;if(r|0){cd(t,32157,N);c[t+12>>2]=r;r=m;q=y;wa=468;break}k=c[pa>>2]|0;c[(c[q>>2]|0)+20>>2]=k;q=c[x+92>>2]|0;t=c[k+4>>2]|0;c[t+4>>2]=c[k>>2];do if(!(b[t+22>>1]&2)){u=t+32|0;v=t+36|0;w=(c[u>>2]|0)-(c[v>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[u>>2]=q;s=t+80|0;q=c[s>>2]|0;if(!q)break;r=q+-4|0;c[s>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;k=(c[14820]|0)+1|0;c[14820]=k;c[14821]=(k|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105;break}else{q=Wa[c[29352>>2]&127](r)|0;wa=105}while(0);do if((wa|0)==105){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[s>>2]=0}while(0);wa=Se(c[t>>2]|0,u,w)|0;c[v>>2]=(c[u>>2]|0)-(w&65535);if((wa|0)!=7)break;q=x+81|0;do if(!(a[q>>0]|0)){if(a[x+82>>0]|0)break;a[q>>0]=1;if((c[x+180>>2]|0)>0)c[x+264>>2]=1;q=x+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[x+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);r=m;q=y;wa=468;break a}while(0);r=m;q=y;wa=468;break}}else q=y}do if((wa|0)==124){w=c[t>>2]|0;v=(ja|0)==1;s=v?34855:34585;t=c[f>>2]|0;u=a[t+165>>0]|0;if((u|r)<<24>>24==0?(O=c[t+312>>2]|0,(O|0)!=0):0){r=$a[O&127](c[t+316>>2]|0,18,s,0,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,P);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)!=2){cd(f,39231,Q);c[f+12>>2]=1;r=m;wa=468;break a}if(r|0){r=m;wa=468;break a}t=c[f>>2]|0;u=a[t+165>>0]|0}s=v?3:1;r=c[ka>>2]|0;if((u<<24>>24==0?(a[ua>>0]|0)==0:0)?(R=c[t+312>>2]|0,(R|0)!=0):0){r=$a[R&127](c[t+316>>2]|0,s,q,r,w,c[f+240>>2]|0)|0;if((r|0)==1){cd(f,39216,S);c[f+12>>2]=23;r=m;wa=468;break a}if((r|2|0)==2)if(!r)break;else{r=m;wa=468;break a}else{cd(f,39231,T);c[f+12>>2]=1;r=m;wa=468;break a}}}while(0);if(j){if((c[j>>2]|0)>(c[(c[f>>2]|0)+116>>2]|0)){c[U>>2]=41914;cd(f,44753,U)}if(!(c[ca>>2]|0))T=j;else{r=m;wa=468;break}}else{ea=c[ka+4>>2]|0;j=(b[ka+42>>1]|0)+-1|0;X=ea+(j<<4)+15|0;a[X>>0]=a[X>>0]|8;j=c[ea+(j<<4)>>2]|0;c[pa>>2]=j;if(!j)j=0;else j=(Eu(j)|0)&1073741823;c[pa+4>>2]=j;r=oj(xa,59,pa,0)|0;r=nj(c[f>>2]|0,0,r)|0;if(!r){r=m;j=0;wa=468;break}if((n|0)<0)j=r;else{a[r+4+(((c[r>>2]|0)+-1|0)*20|0)+12>>0]=n;j=r}T=r}u=c[j>>2]|0;if((u|0)>0){t=0;r=0;do{s=c[T+4+(t*20|0)>>2]|0;if((a[s>>0]|0)==106){s=c[s+8>>2]|0;if(!s)s=0;else s=(Eu(s)|0)&1073741823;r=r+1+s|0}t=t+1|0}while((t|0)!=(u|0));if(!q)t=0;else wa=160}else{r=0;wa=160}if((wa|0)==160)t=(Eu(q)|0)&1073741823;V=(Z|0)!=0;if(V)s=e[Z+50>>1]|0;else s=1;y=s+u|0;v=y&65535;y=y<<16;w=y>>16;x=(y>>14)+7&-8;y=y>>15;g=y+2|0;h=x+72+(w+7+y+g&-8)|0;z=t+1|0;u=z+r+h|0;t=((u|0)<0)<<31>>31;ea=(xa|0)==0;i:do if(ea){X=Sv(u|0,t|0,-1,-1)|0;W=L()|0;if(!(W>>>0>0|(W|0)==0&X>>>0>2147483390)){if(!(c[7324]|0)){r=Wa[c[29340>>2]&127](u)|0;wa=187;break}r=Wa[c[29356>>2]&127](u)|0;if((c[14985]|0)>>>0>>0)c[14985]=u;t=59064;s=c[t>>2]|0;t=c[t+4>>2]|0;if((t|0)>0|(t|0)==0&s>>>0>0){X=c[14978]|0;W=Tv(s|0,t|0,r|0,((r|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&W>>>0<=X>>>0)&1}r=Wa[c[29340>>2]&127](r)|0;if(r){s=Wa[c[29352>>2]&127](r)|0;s=(c[14978]|0)+s|0;c[14978]=s;if(s>>>0>(c[14982]|0)>>>0)c[14982]=s;s=(c[14981]|0)+1|0;c[14981]=s;if(s>>>0<=(c[14987]|0)>>>0){wa=188;break}c[14987]=s;wa=188}else{s=0;t=0;r=0}}else{s=0;t=0;r=0}}else{if(c[xa+272>>2]|0){if(a[la>>0]|0){r=m;j=T;wa=468;break a}}else{do if(!(0>>0|(0==(t|0)?(e[xa+276>>1]|0)>>>0>>0:0))){s=xa+300|0;r=c[s>>2]|0;if(r|0){c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}s=xa+296|0;r=c[s>>2]|0;if(!r){r=xa+292|0;break}else{c[s>>2]=c[r>>2];wa=xa+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=187;break i}}else r=xa+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1}r=_d(xa,u,t)|0;wa=187}while(0);if((wa|0)==187)if(!r){s=0;t=0;r=0}else wa=188;if((wa|0)==188){gw(r|0,0,u|0)|0;s=r+72|0;c[r+32>>2]=s;s=s+x|0;c[r+8>>2]=s;s=s+g|0;c[r+4>>2]=s;c[r+28>>2]=s+y;b[r+52>>1]=v;b[r+50>>1]=w+65535;s=r;t=r+h|0}j:do if(!(a[la>>0]|0)){c[s>>2]=t;U=t;x=U+z|0;ew(U|0,q|0,z|0)|0;U=s+12|0;c[U>>2]=ka;W=s+54|0;a[W>>0]=k;X=s+55|0;p=p&3;n=((k|0)!=0&1)<<3&65535|p|(d[X>>0]|d[X+1>>0]<<8)&-12;a[X>>0]=n;a[X+1>>0]=n>>8;c[s+24>>2]=c[(c[ia>>2]|0)+(ja<<4)+12>>2];n=s+50|0;b[n>>1]=c[j>>2];if(m|0){c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(ka|0){c[_>>2]=1;c[_+16>>2]=c[ka>>2];c[_+24>>2]=ka;c[_+48>>2]=-1}c[$>>2]=f;c[$+4>>2]=_;j=$+24|0;b[j>>1]=2;c[pa>>2]=f;c[pa+4>>2]=125;c[pa+8>>2]=126;c[pa+12>>2]=0;c[pa+24>>2]=$;t=m+24|0;u=f+208|0;S=(c[u>>2]|0)+(c[t>>2]|0)|0;c[u>>2]=S;u=c[(c[f>>2]|0)+120>>2]|0;if((u|0)<(S|0)){c[Y>>2]=u;cd(f,41637,Y)}else{_j(pa,m)|0;Y=(c[pa>>2]|0)+208|0;c[Y>>2]=(c[Y>>2]|0)-(c[t>>2]|0);Y=m+4|0;c[Y>>2]=c[Y>>2]|b[j>>1]&-32752&65535}c[s+36>>2]=m}g=(d[(c[A+(ja<<4)+12>>2]|0)+76>>0]|0)>3;if((d[ua>>0]|0)>1){c[s+40>>2]=T;j=0}else j=T;k:do if(!(b[n>>1]|0)){u=0;w=0}else{A=(ka|0)==0;B=$+4|0;C=$+24|0;D=_+16|0;E=_+24|0;F=_+48|0;G=pa+4|0;H=pa+8|0;I=pa+12|0;o=pa+24|0;J=f+228|0;K=ka+40|0;M=s+4|0;N=ka+4|0;O=s+40|0;P=s+32|0;Q=s+28|0;R=f;S=f+208|0;y=T+4|0;u=0;while(1){w=c[y>>2]|0;l:do switch(a[w>>0]|0){case 110:{a[w>>0]=59;break}case 106:{t=c[w+12>>2]|0;if((a[t>>0]|0)!=110)break l;a[t>>0]=59;break}default:{}}while(0);c[$>>2]=0;c[$+4>>2]=0;c[$+8>>2]=0;c[$+12>>2]=0;c[$+16>>2]=0;c[$+20>>2]=0;c[$+24>>2]=0;c[$+28>>2]=0;h=_;z=h+80|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));if(!A){c[_>>2]=1;c[D>>2]=c[ka>>2];c[E>>2]=ka;c[F>>2]=-1}c[$>>2]=f;c[B>>2]=_;b[C>>1]=32;do if(w|0){b[C>>1]=32;c[pa>>2]=R;c[G>>2]=125;c[H>>2]=126;c[I>>2]=0;c[o>>2]=$;t=w+24|0;m=(c[S>>2]|0)+(c[t>>2]|0)|0;c[S>>2]=m;v=c[(c[f>>2]|0)+120>>2]|0;if((v|0)<(m|0)){c[aa>>2]=v;cd(f,41637,aa);break}else{_j(pa,w)|0;m=(c[pa>>2]|0)+208|0;c[m>>2]=(c[m>>2]|0)-(c[t>>2]|0);m=w+4|0;c[m>>2]=c[m>>2]|b[C>>1]&-32752&65535;break}}while(0);if(c[ca>>2]|0){u=0;v=s;t=r;break j}t=c[y>>2]|0;m:do if(!t)t=0;else while(1){v=c[t+4>>2]|0;if(!(v&4096))break m;if(!(v&262144))t=t+12|0;else t=(c[t+20>>2]|0)+4|0;t=c[t>>2]|0;if(!t){t=0;break}}while(0);if((a[t>>0]|0)==-94){m=b[t+32>>1]|0;t=m<<16>>16;do if(m<<16>>16<0)t=b[K>>1]|0;else{if(a[(c[N>>2]|0)+(t<<4)+12>>0]|0)break;m=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=m;a[X+1>>0]=m>>8}while(0);b[(c[M>>2]|0)+(u<<1)>>1]=t}else{if((ka|0)==(c[J>>2]|0))break;if(!(c[O>>2]|0)){c[O>>2]=j;j=0}b[(c[M>>2]|0)+(u<<1)>>1]=-2;t=(d[X>>0]|d[X+1>>0]<<8)&-9;a[X>>0]=t;a[X+1>>0]=t>>8;t=-2}v=c[y>>2]|0;do if((a[v>>0]|0)==106){v=c[v+8>>2]|0;if(!v)t=0;else t=(Eu(v)|0)&1073741823;m=t+1|0;ew(x|0,v|0,m|0)|0;t=x;x=x+m|0}else{if((t|0)<=-1){t=0;break}t=c[(c[N>>2]|0)+(t<<4)+8>>2]|0}while(0);w=(t|0)==0?34049:t;n:do if(!(a[va>>0]|0)){t=c[f>>2]|0;v=a[t+78>>0]|0;m=a[t+165>>0]|0;t=Zi(t,v,w,m&255)|0;do if(!(m<<24>>24)){if(!t){t=_i(f,v,0,w)|0;break}if(c[t+12>>2]|0)break n;t=_i(f,v,t,w)|0}while(0);if(!t){u=0;v=s;t=r;break j}}while(0);c[(c[P>>2]|0)+(u<<2)>>2]=w;a[(c[Q>>2]|0)+u>>0]=g?a[y+12>>0]|0:0;u=u+1|0;w=b[n>>1]|0;if(u>>>0<(w&65535)>>>0)y=y+20|0;else break k}cd(f,42138,ba);u=0;wa=432;break j}while(0);o:do if(V){B=Z+50|0;v=b[B>>1]|0;if(!(v<<16>>16))break;C=Z+4|0;D=s+4|0;E=Z+32|0;F=s+32|0;h=Z+28|0;z=s+28|0;A=s+52|0;t=0;while(1){y=b[(c[C>>2]|0)+(t<<1)>>1]|0;g=c[D>>2]|0;p:do if(!(w<<16>>16))wa=252;else{x=g;w=w&65535;while(1){if((b[x>>1]|0)==y<<16>>16)break;if((w|0)>1){x=x+2|0;w=w+-1|0}else{wa=252;break p}}b[A>>1]=(b[A>>1]|0)+-1<<16>>16}while(0);if((wa|0)==252){wa=0;b[g+(u<<1)>>1]=y;c[(c[F>>2]|0)+(u<<2)>>2]=c[(c[E>>2]|0)+(t<<2)>>2];a[(c[z>>2]|0)+u>>0]=a[(c[h>>2]|0)+t>>0]|0;u=u+1|0;v=b[B>>1]|0}t=t+1|0;if(t>>>0>=(v&65535)>>>0)break o;w=b[n>>1]|0}}else{b[(c[s+4>>2]|0)+(u<<1)>>1]=-1;c[(c[s+32>>2]|0)+(u<<2)>>2]=34049}while(0);v=c[s+8>>2]|0;u=b[n>>1]|0;u=(u&65535)<5?u:5;t=b[(c[U>>2]|0)+44>>1]|0;b[v>>1]=t;if(c[s+36>>2]|0){t=(t&65535)+65526&65535;b[v>>1]=t}if(t<<16>>16<33)b[v>>1]=33;ew(v+2|0,31120,u<<1&65535|0)|0;ca=b[n>>1]|0;t=ca&65535;if((u&65535)<(ca&65535)){t=u&65535;do{t=t+1|0;b[v+(t<<1)>>1]=23;u=b[n>>1]|0}while(t>>>0<(u&65535)>>>0);t=u&65535}if(a[W>>0]|0)b[v+(t<<1)>>1]=0;B=f+228|0;if(!(c[B>>2]|0))xk(s);x=b[s+52>>1]|0;A=x<<16>>16==0;if(A){u=-1;t=-1}else{u=c[s+4>>2]|0;t=x&65535;v=0;w=0;do{ca=t;t=t+-1|0;$=b[u+(t<<1)>>1]|0;aa=($&65535)<63;$=cw(1,0,$<<16>>16|0)|0;ba=L()|0;v=(aa?$:0)|v;w=(aa?ba:0)|w}while((ca|0)>1);u=~v;t=~w}ca=s+64|0;c[ca>>2]=u;c[ca+4>>2]=t;q:do if(qa){h=x&65535;t=ka+42|0;if((h|0)<(b[t>>1]|0))break;z=d[X>>0]|d[X+1>>0]<<8;ca=z|32;a[X>>0]=ca;a[X+1>>0]=ca>>8;t=b[t>>1]|0;if(t<<16>>16<=0)break;u=b[ka+40>>1]|0;y=u<<16>>16;g=s+4|0;r:do if(A){if(!((y+1|0)<(t<<16>>16|0)|u<<16>>16==0^1))break q}else{v=t<<16>>16;u=0;while(1){if((u|0)!=(y|0)){w=u&65535;x=c[g>>2]|0;t=0;while(1){if((b[x+(t<<1)>>1]|0)==w<<16>>16)break;t=t+1|0;if(t>>>0>=h>>>0)break r}if((t&65535)<<16>>16<=-1)break r}u=u+1|0;if((u|0)>=(v|0))break q}}while(0);ca=z&-33;a[X>>0]=ca;a[X+1>>0]=ca>>8}while(0);s:do if((ka|0)==(c[B>>2]|0)){t=c[ka+8>>2]|0;if(!t){v=s;E=r;t=r;break}C=f+232|0;t:do if(da){B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;u:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break u;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(ga<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;ga=a[w>>0]|0;v=(d[208+(ga&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(ga<<24>>24==0|(v|0)!=0));if(v|0)break u;u=u+1|0}while(u>>>0>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[fa>>2]=0;cd(f,42199,fa);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);ga=B+55|0;da=(d[ga>>0]|d[ga+1>>0]<<8)&-4|p;a[ga>>0]=da;a[ga+1>>0]=da>>8;if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}else{B=t;t=r;while(1){u=b[B+50>>1]|0;do if(u<<16>>16==(b[s+50>>1]|0)){A=u&65535;v:do if(!(u<<16>>16))u=0;else{y=c[B+4>>2]|0;g=c[s+4>>2]|0;h=B+32|0;z=s+32|0;u=0;do{if((b[y+(u<<1)>>1]|0)!=(b[g+(u<<1)>>1]|0))break v;w=c[(c[h>>2]|0)+(u<<2)>>2]|0;x=c[(c[z>>2]|0)+(u<<2)>>2]|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0;if(!(fa<<24>>24==0|(v|0)!=0))do{w=w+1|0;x=x+1|0;fa=a[w>>0]|0;v=(d[208+(fa&255)>>0]|0)-(d[208+(d[x>>0]|0)>>0]|0)|0}while(!(fa<<24>>24==0|(v|0)!=0));if(v|0)break v;u=u+1|0}while(u>>>0>>0)}while(0);if((u|0)!=(A|0)){u=0;break}w=B+54|0;u=a[w>>0]|0;x=s+54|0;v=a[x>>0]|0;do if(u<<24>>24!=v<<24>>24){if(!(u<<24>>24==11|v<<24>>24==11)){c[ga>>2]=0;cd(f,42199,ga);u=a[w>>0]|0}if(u<<24>>24!=11)break;a[w>>0]=a[x>>0]|0}while(0);if((d[ua>>0]|0)<=1){u=2;break}c[s+20>>2]=c[C>>2];c[C>>2]=s;s=0;u=2;r=0;t=0}else u=20;while(0);switch(u&31){case 20:case 0:break;default:break t}B=c[B+20>>2]|0;if(!B){v=s;E=t;t=r;break s}}}while(0);if(!u){v=s;E=t;t=r}else{u=0;wa=432;break j}}else{v=s;E=r;t=r}while(0);do if((d[ua>>0]|0)>1)wa=420;else{if(a[va>>0]|0){w:do if(qa){s=c[xa+160>>2]|0;c[v+44>>2]=s;r=c[(c[v+12>>2]|0)+8>>2]|0;if(!r)break;while(1){if(!((r|0)==(v|0)?1:(c[r+44>>2]|0)!=(s|0)))break;r=c[r+20>>2]|0;if(!r)break w}cd(f,35103,ma);c[na>>2]=32306;c[na+4>>2]=110349;c[na+8>>2]=31517;Db(11,32001,na);c[f+12>>2]=11;u=0;s=v;r=t;wa=432;break j}while(0);if(!(mi((c[v+24>>2]|0)+24|0,c[v>>2]|0,E)|0)){wa=xa+24|0;c[wa>>2]=c[wa>>2]|1;wa=420;break}if(a[la>>0]|0){u=0;break j}if(a[xa+82>>0]|0){u=0;break j}a[la>>0]=1;if((c[xa+180>>2]|0)>0)c[xa+264>>2]=1;r=xa+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[xa+236>>2]|0;if(!r){u=0;break j}c[r+12>>2]=7;u=0;break j}if(!(qa|(c[ka+36>>2]&32|0)==0))break;D=f+44|0;C=(c[D>>2]|0)+1|0;c[D>>2]=C;D=f+8|0;r=c[D>>2]|0;w=f+116|0;if(!r){u=c[f>>2]|0;do if(!(c[w>>2]|0)){if(b[u+76>>1]&8)break;a[f+23>>0]=1}while(0);x:do if(c[u+272>>2]|0)if(!(a[u+81>>0]|0))wa=360;else{u=0;s=v;r=t;wa=432;break j}else{do if((e[u+276>>1]|0)>=224){r=u+300|0;s=c[r>>2]|0;if(s|0){c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}r=u+296|0;s=c[r>>2]|0;if(!s){r=u+292|0;break}else{c[r>>2]=c[s>>2];na=u+284|0;c[na>>2]=(c[na>>2]|0)+1;break x}}else r=u+288|0;while(0);c[r>>2]=(c[r>>2]|0)+1;wa=360}while(0);if((wa|0)==360)s=_d(u,224,0)|0;if(!s){u=0;s=v;r=t;wa=432;break j}h=s+104|0;z=h+120|0;do{c[h>>2]=0;h=h+4|0}while((h|0)<(z|0));c[s>>2]=u;r=u+4|0;u=c[r>>2]|0;if(u|0)c[u+4>>2]=s;c[s+8>>2]=u;c[s+4>>2]=0;c[r>>2]=s;c[s+20>>2]=381479589;c[s+12>>2]=f;c[D>>2]=s;Di(s,61,0,1,0)|0;B=s}else B=r;A=c[w>>2]|0;A=(A|0)==0?f:A;r=A+84|0;s=c[r>>2]|0;z=1<>2]=s|z;if((ja|0)!=1)break;h=c[A>>2]|0;r=h+16|0;if(c[(c[r>>2]|0)+20>>2]|0)break;if(a[A+199>>0]|0)break;s=Pe(c[h>>2]|0,0,h,pa,0,542)|0;if(s|0){cd(A,32157,oa);c[A+12>>2]=s;break}pa=c[pa>>2]|0;c[(c[r>>2]|0)+20>>2]=pa;r=c[h+92>>2]|0;w=c[pa+4>>2]|0;c[w+4>>2]=c[pa>>2];do if(!(b[w+22>>1]&2)){x=w+32|0;y=w+36|0;g=(c[x>>2]|0)-(c[y>>2]|0)|0;do if((r+-512|0)>>>0<65025){if(r+-1&r|0)break;c[x>>2]=r;u=w+80|0;r=c[u>>2]|0;if(!r)break;s=r+-4|0;c[u>>2]=s;r=s;do if((c[14816]|0)>>>0<=r>>>0)if((c[14817]|0)>>>0>r>>>0){c[14979]=(c[14979]|0)+-1;c[s>>2]=c[14819];c[14819]=s;pa=(c[14820]|0)+1|0;c[14820]=pa;c[14821]=(pa|0)<(c[14815]|0)&1;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380;break}else{r=Wa[c[29352>>2]&127](s)|0;wa=380}while(0);do if((wa|0)==380){c[14980]=(c[14980]|0)-r;if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);c[u>>2]=0}while(0);wa=Se(c[w>>2]|0,x,g)|0;c[y>>2]=(c[x>>2]|0)-(g&65535);if((wa|0)!=7)break;r=h+81|0;do if(!(a[r>>0]|0)){if(a[h+82>>0]|0)break;a[r>>0]=1;if((c[h+180>>2]|0)>0)c[h+264>>2]=1;r=h+272|0;c[r>>2]=(c[r>>2]|0)+1;r=c[h+236>>2]|0;if(!r)break;c[r+12>>2]=7}while(0);break y}while(0)}while(0);g=A+80|0;c[g>>2]=c[g>>2]|z;g=A+20|0;a[g>>0]=a[g>>0]|1;g=B+108|0;r=c[g>>2]|0;y=B+112|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;h=c[B+104>>2]|0;a[h+(r*20|0)>>0]=-86;h=h+(r*20|0)+1|0;z=h+19|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(z|0))}else r=Di(B,170,0,0,0)|0;x=v+44|0;c[x>>2]=r;r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-117;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=ja;c[wa+(r*20|0)+8>>2]=C;c[wa+(r*20|0)+12>>2]=2;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0}else Di(B,139,ja,C,2)|0;if(!l)s=0;else{s=c[ha>>2]|0;wa=(c[f+188>>2]|0)-s+(c[f+192>>2]|0)|0;l=wa+-1|0;wa=(a[s+l>>0]|0)==59?l:wa;c[ra>>2]=(k|0)==0?59952:42261;c[ra+4>>2]=wa;c[ra+8>>2]=s;s=dd(xa,42241,ra)|0}ra=c[v>>2]|0;wa=c[ka>>2]|0;c[sa>>2]=c[(c[ia>>2]|0)+(ja<<4)>>2];c[sa+4>>2]=34585;c[sa+8>>2]=ra;c[sa+12>>2]=wa;c[sa+16>>2]=C;c[sa+20>>2]=s;Ak(f,42269,sa);z:do if(s|0){if(c[xa+480>>2]|0){Xd(xa,s);break}r=s;do if((c[xa+304>>2]|0)>>>0<=r>>>0){if((c[xa+308>>2]|0)>>>0<=r>>>0)break;wa=xa+300|0;c[s>>2]=c[wa>>2];c[wa>>2]=s;break z}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{wa=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}}while(0);do if(qa){bl(f,v,C);r=c[D>>2]|0;s=(c[c[(c[(c[f>>2]|0)+16>>2]|0)+(ja<<4)+12>>2]>>2]|0)+1|0;u=r+108|0;w=c[u>>2]|0;if((c[r+112>>2]|0)>(w|0)){c[u>>2]=w+1;wa=c[r+104>>2]|0;a[wa+(w*20|0)>>0]=95;b[wa+(w*20|0)+2>>1]=0;c[wa+(w*20|0)+4>>2]=ja;c[wa+(w*20|0)+8>>2]=1;c[wa+(w*20|0)+12>>2]=s;c[wa+(w*20|0)+16>>2]=0;a[wa+(w*20|0)+1>>0]=0}else Di(r,95,ja,1,s)|0;c[ta>>2]=c[v>>2];Bk(B,ja,dd(xa,42317,ta)|0);r=c[g>>2]|0;if((c[y>>2]|0)>(r|0)){c[g>>2]=r+1;wa=c[B+104>>2]|0;a[wa+(r*20|0)>>0]=-98;b[wa+(r*20|0)+2>>1]=0;c[wa+(r*20|0)+4>>2]=0;c[wa+(r*20|0)+8>>2]=1;c[wa+(r*20|0)+12>>2]=0;c[wa+(r*20|0)+16>>2]=0;a[wa+(r*20|0)+1>>0]=0;break}else{Di(B,158,0,1,0)|0;break}}while(0);r=c[x>>2]|0;s=c[g>>2]|0;if(!(a[(c[B>>2]|0)+81>>0]|0))r=(c[B+104>>2]|0)+(((r|0)<0?s+-1|0:r)*20|0)|0;else r=59308;c[r+8>>2]=s;wa=420}while(0);do if((wa|0)==420){if((i|0)==0|(a[va>>0]|0)!=0)break;if((d[ua>>0]|0)<=1){u=0;s=v;r=t;wa=432;break j}c[f+232>>2]=E;break a}while(0);s=ka+8|0;do if((k|0)==5){r=c[s>>2]|0;if(!r)break;if((a[r+54>>0]|0)==5)break;r=r+20|0;s=c[r>>2]|0;A:do if(!s)s=0;else while(1){if((a[s+54>>0]|0)==5)break A;r=s+20|0;s=c[r>>2]|0;if(!s){s=0;break}}while(0);c[v+20>>2]=s;c[r>>2]=v;break a}while(0);c[v+20>>2]=c[s>>2];c[s>>2]=v;break a}else{u=m;j=T;wa=432}while(0);if((wa|0)==432)if(!s){r=u;wa=468;break}else{v=s;t=r}r=c[v+36>>2]|0;if(r|0)ni(xa,r);r=c[v+40>>2]|0;if(r|0)ri(xa,r);r=c[v+16>>2]|0;B:do if(r|0){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break B}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break B}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);wa=v+55|0;C:do if((d[wa>>0]|d[wa+1>>0]<<8)&16){r=c[v+32>>2]|0;if(!r)break;do if(!ea){if(c[xa+480>>2]|0){Xd(xa,r);break C}s=r;if((c[xa+304>>2]|0)>>>0>s>>>0)break;if((c[xa+308>>2]|0)>>>0<=s>>>0)break;wa=xa+300|0;c[r>>2]=c[wa>>2];c[wa>>2]=r;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{wa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-wa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);if(t){do if(!ea){if(c[xa+480>>2]|0){Xd(xa,t);r=u;wa=468;break a}r=t;if((c[xa+304>>2]|0)>>>0>r>>>0)break;if((c[xa+308>>2]|0)>>>0<=r>>>0)break;r=xa+300|0;c[t>>2]=c[r>>2];c[r>>2]=t;r=u;wa=468;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);r=u;wa=468;break}else{r=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-r;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);r=u;wa=468;break}}else{r=u;wa=468}}else{r=m;q=0;wa=468}while(0);if((wa|0)==468)if(r)ni(xa,r);if(j|0)ri(xa,j);qi(xa,i);if(!q){Ra=ya;return}if(xa|0){if(c[xa+480>>2]|0){Xd(xa,q);Ra=ya;return}i=q;if((c[xa+304>>2]|0)>>>0<=i>>>0?(c[xa+308>>2]|0)>>>0>i>>>0:0){i=xa+300|0;c[q>>2]=c[i>>2];c[i>>2]=q;Ra=ya;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](q);Ra=ya;return}else{i=Wa[c[29352>>2]&127](q)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](q);Ra=ya;return}}function ij(f,g,h,i,j){f=f|0;g=g|0;h=h|0;i=i|0;j=j|0;var 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,M=0,N=0;M=Ra;Ra=Ra+32|0;G=M+16|0;m=M+8|0;l=M;K=c[f>>2]|0;I=c[f+228>>2]|0;a:do if((I|0)!=0?(J=f+200|0,(a[J>>0]|0)!=1):0){r=(g|0)==0;do if(r){D=b[I+42>>1]|0;k=(D<<16>>16)+-1|0;if(D<<16>>16<1){C=130;break a}if(i)if((c[i>>2]|0)==1){k=1;C=13}else{c[l>>2]=c[(c[I+4>>2]|0)+(k<<4)>>2];c[l+4>>2]=h;cd(f,42428,l);break a}else{k=1;C=12}}else{if(!i){k=c[g>>2]|0;C=12;break}k=c[i>>2]|0;if((k|0)==(c[g>>2]|0))C=13;else{cd(f,42491,m);C=129;break a}}while(0);if((C|0)==12){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;D=k;A=0}else if((C|0)==13){p=h+4|0;l=(k<<3)+37+(c[p>>2]|0)|0;o=c[i>>2]|0;if((o|0)>0){n=0;do{m=c[i+4+(n*20|0)+4>>2]|0;if(!m)m=0;else m=(Eu(m)|0)&1073741823;l=l+1+m|0;n=n+1|0}while((n|0)<(o|0));D=k;A=1}else{D=k;A=1}}n=((l|0)<0)<<31>>31;B=(K|0)==0;b:do if(B){z=Sv(l|0,n|0,-1,-1)|0;y=L()|0;if(y>>>0>0|(y|0)==0&z>>>0>2147483390){C=128;break a}if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](l)|0;C=42;break}n=Wa[c[29356>>2]&127](l)|0;if((c[14985]|0)>>>0>>0)c[14985]=l;m=59064;k=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&k>>>0>0){z=c[14978]|0;y=Tv(k|0,m|0,n|0,((n|0)<0)<<31>>31|0)|0;x=L()|0;c[14768]=((x|0)<0|(x|0)==0&y>>>0<=z>>>0)&1}m=Wa[c[29340>>2]&127](n)|0;if(!m){C=128;break a}k=Wa[c[29352>>2]&127](m)|0;k=(c[14978]|0)+k|0;c[14978]=k;if(k>>>0>(c[14982]|0)>>>0)c[14982]=k;k=(c[14981]|0)+1|0;c[14981]=k;if(k>>>0>(c[14987]|0)>>>0){c[14987]=k;z=m}else z=m}else{if(c[K+272>>2]|0){if(a[K+81>>0]|0){C=128;break a}}else{do if(!(0>>0|(0==(n|0)?(e[K+276>>1]|0)>>>0>>0:0))){m=K+300|0;k=c[m>>2]|0;if(k|0){c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}m=K+296|0;k=c[m>>2]|0;if(!k){k=K+292|0;break}else{c[m>>2]=c[k>>2];C=K+284|0;c[C>>2]=(c[C>>2]|0)+1;C=42;break b}}else k=K+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(K,l,n)|0;C=42}while(0);if((C|0)==42)if(!k){C=128;break}else z=k;gw(z|0,0,l|0)|0;c[z>>2]=I;y=I+16|0;c[z+4>>2]=c[y>>2];w=z+36|0;o=w+(D<<3)|0;x=z+8|0;c[x>>2]=o;c:do if((d[J>>0]|0)>1){m=c[f>>2]|0;d:do if(!m){if(!(c[7324]|0)){k=Wa[c[29340>>2]&127](16)|0;C=67;break}k=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;m=59064;l=c[m>>2]|0;m=c[m+4>>2]|0;if((m|0)>0|(m|0)==0&l>>>0>0){v=c[14978]|0;u=Tv(l|0,m|0,k|0,((k|0)<0)<<31>>31|0)|0;t=L()|0;c[14768]=((t|0)<0|(t|0)==0&u>>>0<=v>>>0)&1}k=Wa[c[29340>>2]&127](k)|0;if(!k)break c;l=Wa[c[29352>>2]&127](k)|0;l=(c[14978]|0)+l|0;c[14978]=l;if(l>>>0>(c[14982]|0)>>>0)c[14982]=l;l=(c[14981]|0)+1|0;c[14981]=l;if(l>>>0>(c[14987]|0)>>>0)c[14987]=l}else{if(c[m+272>>2]|0){if(a[m+81>>0]|0)break c}else{do if((e[m+276>>1]|0)>=16){l=m+300|0;k=c[l>>2]|0;if(k|0){c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}l=m+296|0;k=c[l>>2]|0;if(!k){k=m+292|0;break}else{c[l>>2]=c[k>>2];C=m+284|0;c[C>>2]=(c[C>>2]|0)+1;C=67;break d}}else k=m+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1}k=_d(m,16,0)|0;C=67}while(0);if((C|0)==67)if(!k)break;l=k+4|0;m=l+12|0;do{a[l>>0]=0;l=l+1|0}while((l|0)<(m|0));c[k>>2]=o;t=h;u=c[t+4>>2]|0;v=k+4|0;c[v>>2]=c[t>>2];c[v+4>>2]=u;v=f+272|0;c[k+12>>2]=c[v>>2];c[v>>2]=k}while(0);ew(o|0,c[h>>2]|0,c[p>>2]|0)|0;a[o+(c[p>>2]|0)>>0]=0;if(o|0?(q=a[o>>0]|0,(a[880+(q&255)>>0]|0)<0):0){n=q<<24>>24==91?93:q;m=0;k=1;while(1){l=a[o+k>>0]|0;if(l<<24>>24==n<<24>>24){k=k+1|0;l=o+m|0;if((a[o+k>>0]|0)!=n<<24>>24)break;a[l>>0]=n}else a[o+m>>0]=l;m=m+1|0;k=k+1|0}a[l>>0]=0}m=o+((c[p>>2]|0)+1)|0;c[z+20>>2]=D;e:do if(!r)if((D|0)>0){s=I+4|0;t=f+272|0;v=b[I+42>>1]|0;u=v<<16>>16>0;v=v<<16>>16;r=0;f:while(1){if(!u){C=117;break}h=c[s>>2]|0;k=c[g+4+(r*20|0)+4>>2]|0;q=d[208+(d[k>>0]|0)>>0]|0;l=0;while(1){o=c[h+(l<<4)>>2]|0;p=a[o>>0]|0;n=(d[208+(p&255)>>0]|0)-q|0;if(!(p<<24>>24==0|(n|0)!=0)){p=k;do{o=o+1|0;p=p+1|0;N=a[o>>0]|0;n=(d[208+(N&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(N<<24>>24==0|(n|0)!=0))}if(!n)break;l=l+1|0;if((l|0)>=(v|0))break f}c[w+(r<<3)>>2]=l;g:do if((d[J>>0]|0)>1?(F=w+(r<<3)|0,E=c[t>>2]|0,E|0):0){l=E;while(1){if((c[l>>2]|0)==(k|0))break;l=c[l+12>>2]|0;if(!l)break g}c[l>>2]=F}while(0);k=r+1|0;if((k|0)<(D|0))r=k;else{C=96;break e}}if((C|0)==117)k=c[g+4+(r*20|0)+4>>2]|0;c[G>>2]=k;cd(f,42585,G);if(!z){C=129;break a}if(!B)C=120}else C=107;else{c[w>>2]=(b[I+42>>1]|0)+-1;C=96}while(0);if((C|0)==96)if(A&(D|0)>0){p=f+272|0;n=0;while(1){o=c[i+4+(n*20|0)+4>>2]|0;if(!o)l=0;else l=(Eu(o)|0)&1073741823;c[w+(n<<3)+4>>2]=m;h:do if((d[J>>0]|0)>1?(H=c[p>>2]|0,H|0):0){k=H;while(1){if((c[k>>2]|0)==(o|0))break;k=c[k+12>>2]|0;if(!k)break h}c[k>>2]=m}while(0);ew(m|0,o|0,l|0)|0;a[m+l>>0]=0;n=n+1|0;if((n|0)==(D|0)){C=107;break}else m=m+(l+1)|0}}else C=107;if((C|0)==107){a[z+24>>0]=0;a[z+25>>0]=j;a[z+26>>0]=j>>>8;k=mi((c[I+72>>2]|0)+56|0,c[x>>2]|0,z)|0;if((k|0)!=(z|0)){if(k|0){c[z+12>>2]=k;c[k+16>>2]=z}c[y>>2]=z;C=128;break}k=K+81|0;if((a[k>>0]|0)==0?(a[K+82>>0]|0)==0:0){a[k>>0]=1;if((c[K+180>>2]|0)>0)c[K+264>>2]=1;k=K+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[K+236>>2]|0;if(k){c[k+12>>2]=7;C=120}else C=120}else C=120}if((C|0)==120){if(c[K+480>>2]|0){Xd(K,z);C=128;break}N=z;if((c[K+304>>2]|0)>>>0<=N>>>0?(c[K+308>>2]|0)>>>0>N>>>0:0){C=K+300|0;c[z>>2]=c[C>>2];c[C>>2]=z;C=128;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](z);C=128;break}else{C=Wa[c[29352>>2]&127](z)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](z);C=128;break}}else C=128;while(0);if((C|0)==128)if(!g)C=130;else C=129;if((C|0)==129){ri(K,g);C=130}if((C|0)==130?(i|0)==0:0){Ra=M;return}ri(K,i);Ra=M;return}function jj(f,g,h,i){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,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=Ra;Ra=Ra+208|0;Q=U+184|0;O=U+176|0;N=U+160|0;M=U+152|0;L=U+136|0;K=U+128|0;J=U+112|0;I=U+104|0;D=U+96|0;A=U+88|0;z=U+80|0;y=U+72|0;x=U+64|0;w=U+56|0;u=U+48|0;t=U+40|0;s=U+32|0;r=U+24|0;P=U;T=c[f>>2]|0;if(a[T+81>>0]|0){qi(T,g);Ra=U;return}a:do if(!(a[T+165>>0]|0)){l=f+4|0;m=T+24|0;n=(c[m>>2]&1|0)==0;o=T+16|0;S=c[(c[o>>2]|0)+12>>2]|0;a[T+78>>0]=a[S+77>>0]|0;if(!((b[S+78>>1]&1)==0?(j=eh(T,0,l,0)|0,(j|0)!=0):0))E=5;b:do if((E|0)==5){j=c[T+20>>2]|0;if((j|0)>1)do{k=j;j=j+-1|0;if((b[(c[(c[o>>2]|0)+(j<<4)+12>>2]|0)+78>>1]&1)==0?(p=eh(T,j,l,0)|0,p|0):0){j=p;break b}}while((k|0)>2);if(n)c[m>>2]=c[m>>2]&-2;if(!(a[T+89>>0]|0))break a;c[m>>2]=c[m>>2]|16;break a}while(0);c[f+12>>2]=j;f=f+36|0;c[f>>2]=(c[f>>2]|0)+1;qi(T,g);Ra=U;return}while(0);m=(i|0)!=0;if(m){S=T+85|0;a[S>>0]=(a[S>>0]|0)+1<<24>>24}k=c[g+8>>2]|0;if(!k)j=g+12|0;else{l=c[(c[f>>2]|0)+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0))break;else j=j+1|0;j=l+(j<<4)|0}S=bd(f,h,c[g+16>>2]|0,c[j>>2]|0)|0;if(m){R=T+85|0;a[R>>0]=(a[R>>0]|0)+-1<<24>>24}if(!S){if(!m){qi(T,g);Ra=U;return}hl(f,c[g+12>>2]|0);qi(T,g);Ra=U;return}H=S+72|0;k=c[H>>2]|0;if(!k)R=-1e6;else{l=c[T+16>>2]|0;j=0;while(1)if((c[l+(j<<4)+12>>2]|0)==(k|0)){R=j;break}else j=j+1|0}B=S+56|0;if(c[B>>2]|0?Sk(f,S)|0:0){qi(T,g);Ra=U;return}i=(R|0)==1;j=i?34855:34585;o=c[(c[T+16>>2]|0)+(R<<4)>>2]|0;k=c[f>>2]|0;do if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(q=c[k+312>>2]|0,q|0):0){j=$a[q&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,r);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)==2){if(!j)break;qi(T,g);Ra=U;return}else{cd(f,39231,s);c[f+12>>2]=1;qi(T,g);Ra=U;return}}while(0);do if(!h){if(!(c[B>>2]|0)){l=0;m=i?13:11;break}j=S+64|0;while(1){j=c[j>>2]|0;if((c[j>>2]|0)==(T|0))break;else j=j+24|0}l=c[(c[j+4>>2]|0)+4>>2]|0;m=30}else{l=0;m=i?15:17}while(0);j=c[S>>2]|0;k=c[f>>2]|0;do if((a[k+165>>0]|0)==0?(v=f+200|0,(a[v>>0]|0)==0):0){n=c[k+312>>2]|0;if(n){j=$a[n&127](c[k+316>>2]|0,m,j,l,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,t);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,u);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(j|0){qi(T,g);Ra=U;return}j=c[S>>2]|0;k=c[f>>2]|0;if(a[k+165>>0]|0){o=j;break}if(a[v>>0]|0){o=j;break}}l=c[k+312>>2]|0;if(l){j=$a[l&127](c[k+316>>2]|0,9,j,0,o,c[f+240>>2]|0)|0;if((j|0)==1){cd(f,39216,w);c[f+12>>2]=23;qi(T,g);Ra=U;return}if((j|2|0)!=2){cd(f,39231,x);c[f+12>>2]=1;qi(T,g);Ra=U;return}if(!j){o=c[S>>2]|0;break}else{qi(T,g);Ra=U;return}}else o=j}else o=j;while(0);c:do if(o|0){m=a[o>>0]|0;n=m<<24>>24==0;d:do if(n){j=39441;E=66}else{E=m&255;j=208+E|0;do if((E|32|0)==115){j=a[o+1>>0]|0;if(!(j<<24>>24)){j=39442;E=66;break d}E=j&255;j=208+E|0;if((E|32|0)==113){j=a[o+2>>0]|0;if(!(j<<24>>24)){j=39443;E=66;break d}j=j&255;if((j|32|0)!=108){l=108;j=208+j|0;break}j=a[o+3>>0]|0;if(!(j<<24>>24)){j=39444;E=66;break d}j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=39445;E=66;break d}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=39446;E=66;break d}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=39447;E=66;break d}if(j<<24>>24==95){E=75;break d}else{l=95;j=208+(j&255)|0}}else l=113}else l=115;while(0);k=d[j>>0]|0;j=l;E=70}while(0);if((E|0)==66){k=0;j=a[208+(d[j>>0]|0)>>0]|0;E=70}if((E|0)==70){if((k|0)!=(j&255|0))break;if(!n){j=m&255;if((j|32|0)==115)E=75;else{l=115;j=208+j|0;E=74}}else{j=42631;E=72}}do if((E|0)==75){j=a[o+1>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==113){j=a[o+2>>0]|0;if(j<<24>>24){x=j&255;j=208+x|0;if((x|32|0)==108){j=a[o+3>>0]|0;if(j<<24>>24){j=j&255;if((j|32|0)!=105){l=105;j=208+j|0;E=74;break}j=a[o+4>>0]|0;if(!(j<<24>>24)){j=42635;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+5>>0]|0;if(!(j<<24>>24)){j=42636;E=72;break}j=j&255;if((j|32|0)!=101){l=101;j=208+j|0;E=74;break}j=a[o+6>>0]|0;if(!(j<<24>>24)){j=42637;E=72;break}if(j<<24>>24!=95){l=95;j=208+(j&255)|0;E=74;break}j=a[o+7>>0]|0;if(!(j<<24>>24)){j=42638;E=72;break}j=j&255;if((j|32|0)!=115){l=115;j=208+j|0;E=74;break}j=a[o+8>>0]|0;if(!(j<<24>>24)){j=42639;E=72;break}j=j&255;if((j|32|0)!=116){l=116;j=208+j|0;E=74;break}j=a[o+9>>0]|0;if(!(j<<24>>24)){j=42640;E=72;break}j=j&255;if((j|32|0)!=97){l=97;j=208+j|0;E=74;break}j=a[o+10>>0]|0;if(!(j<<24>>24)){j=42641;E=72;break}j=j&255;if((j|32|0)==116)break c;else{l=116;j=208+j|0;E=74}}else{j=42634;E=72}}else{l=108;E=74}}else{j=42633;E=72}}else{l=113;E=74}}else{j=42632;E=72}}while(0);if((E|0)==72){k=0;j=a[208+(d[j>>0]|0)>>0]|0}else if((E|0)==74){k=d[j>>0]|0;j=l}if((k|0)!=(j&255|0)){c[y>>2]=o;cd(f,42643,y);qi(T,g);Ra=U;return}}while(0);r=(h|0)!=0;j=(c[S+12>>2]|0)==0;if(r){if(j){c[z>>2]=o;cd(f,42671,z);qi(T,g);Ra=U;return}}else if(!j){c[A>>2]=o;cd(f,42705,A);qi(T,g);Ra=U;return}t=f+8|0;s=f+116|0;if(!(c[t>>2]|0)){m=c[f>>2]|0;if((c[s>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;e:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))E=97;else{qi(T,g);Ra=U;return}else{do if((e[m+276>>1]|0)>=224){j=m+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}j=m+296|0;k=c[j>>2]|0;if(!k){j=m+292|0;break}else{c[j>>2]=c[k>>2];A=m+284|0;c[A>>2]=(c[A>>2]|0)+1;break e}}else j=m+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=97}while(0);if((E|0)==97)k=_d(m,224,0)|0;if(!k){qi(T,g);Ra=U;return}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=m;j=m+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0}q=c[s>>2]|0;q=(q|0)==0?f:q;j=q+84|0;k=c[j>>2]|0;p=1<>2]=k|p,i):0)?(F=c[q>>2]|0,C=F+16|0,(c[(c[C>>2]|0)+20>>2]|0)==0):0)?(a[q+199>>0]|0)==0:0){j=Pe(c[F>>2]|0,0,F,P,0,542)|0;if(j|0){cd(q,32157,D);c[q+12>>2]=j;break}D=c[P>>2]|0;c[(c[C>>2]|0)+20>>2]=D;j=c[F+92>>2]|0;m=c[D+4>>2]|0;c[m+4>>2]=c[D>>2];do if(!(b[m+22>>1]&2)){n=m+32|0;o=m+36|0;i=(c[n>>2]|0)-(c[o>>2]|0)|0;do if((j+-512|0)>>>0<65025){if(j+-1&j|0)break;c[n>>2]=j;l=m+80|0;j=c[l>>2]|0;if(!j)break;k=j+-4|0;c[l>>2]=k;j=k;do if((c[14816]|0)>>>0<=j>>>0)if((c[14817]|0)>>>0>j>>>0){c[14979]=(c[14979]|0)+-1;c[k>>2]=c[14819];c[14819]=k;D=(c[14820]|0)+1|0;c[14820]=D;c[14821]=(D|0)<(c[14815]|0)&1;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117;break}else{j=Wa[c[29352>>2]&127](k)|0;E=117}while(0);do if((E|0)==117){c[14980]=(c[14980]|0)-j;if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{D=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-D;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);c[l>>2]=0}while(0);D=Se(c[m>>2]|0,n,i)|0;c[o>>2]=(c[n>>2]|0)-(i&65535);if((D|0)!=7)break;j=F+81|0;do if(!(a[j>>0]|0)){if(a[F+82>>0]|0)break;a[j>>0]=1;if((c[F+180>>2]|0)>0)c[F+264>>2]=1;j=F+272|0;c[j>>2]=(c[j>>2]|0)+1;j=c[F+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);break f}while(0)}while(0);F=q+80|0;c[F>>2]=c[F>>2]|p;F=q+20|0;a[F>>0]=a[F>>0]|1;if(r){il(f,S,R,h);qi(T,g);Ra=U;return}k=c[S>>2]|0;l=c[(c[(c[f>>2]|0)+16>>2]|0)+(R<<4)>>2]|0;c[I>>2]=1;Cb(24,P,42737,I)|0;if(Sd(c[f>>2]|0,P,l)|0){c[J>>2]=l;c[J+4>>2]=P;c[J+8>>2]=38087;c[J+12>>2]=k;Ak(f,42751,J)}c[K>>2]=2;Cb(24,P,42737,K)|0;if(Sd(c[f>>2]|0,P,l)|0){c[L>>2]=l;c[L+4>>2]=P;c[L+8>>2]=38087;c[L+12>>2]=k;Ak(f,42751,L)}c[M>>2]=3;Cb(24,P,42737,M)|0;if(Sd(c[f>>2]|0,P,l)|0){c[N>>2]=l;c[N+4>>2]=P;c[N+8>>2]=38087;c[N+12>>2]=k;Ak(f,42751,N)}c[O>>2]=4;Cb(24,P,42737,O)|0;j=c[f>>2]|0;if(!(Sd(j,P,l)|0))q=j;else{c[Q>>2]=l;c[Q+4>>2]=P;c[Q+8>>2]=38087;c[Q+12>>2]=k;Ak(f,42751,Q);q=c[f>>2]|0}r=q+32|0;g:do if(!((c[r>>2]&16384|0)==0&0==0)){if(c[B>>2]|0)break;j=c[t>>2]|0;h:do if(!j){do if(!(c[s>>2]|0)){if(b[q+76>>1]&8)break;a[f+23>>0]=1}while(0);i:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))E=149;else{p=0;break h}else{do if((e[q+276>>1]|0)>=224){j=q+300|0;k=c[j>>2]|0;if(k|0){c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}j=q+296|0;k=c[j>>2]|0;if(!k){j=q+292|0;break}else{c[j>>2]=c[k>>2];Q=q+284|0;c[Q>>2]=(c[Q>>2]|0)+1;break i}}else j=q+288|0;while(0);c[j>>2]=(c[j>>2]|0)+1;E=149}while(0);if((E|0)==149)k=_d(q,224,0)|0;if(!k){p=0;break}j=k+104|0;l=j+120|0;do{c[j>>2]=0;j=j+4|0}while((j|0)<(l|0));c[k>>2]=q;j=q+4|0;l=c[j>>2]|0;if(l|0)c[l+4>>2]=k;c[k+8>>2]=l;c[k+4>>2]=0;c[j>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[t>>2]=k;Di(k,61,0,1,0)|0;p=k}else p=j;while(0);i=c[S>>2]|0;m=c[H>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;j=m+64|0}else{k=a[i>>0]|0;if(!(k<<24>>24))j=0;else{j=0;l=i;do{l=l+1|0;j=G(j+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}j=(j>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(j<<3)|0;j=n+(j<<3)+4|0}k=c[k>>2]|0;j:do if(!k)j=59292;else{o=d[208+(d[i>>0]|0)>>0]|0;while(1){j=c[j>>2]|0;k=k+-1|0;m=c[j+12>>2]|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-o|0;if(!(Q<<24>>24==0|(l|0)!=0)){n=i;do{m=m+1|0;n=n+1|0;Q=a[m>>0]|0;l=(d[208+(Q&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Q<<24>>24==0|(l|0)!=0))}if(!l)break j;if(!k){j=59292;break}}}while(0);do if(!(c[j+8>>2]|0)){j=c[S+16>>2]|0;if(!j)break g;while(1){if(a[j+24>>0]|0)break;if(!((c[r>>2]&524288|0)==0&0==0))break;j=c[j+4>>2]|0;if(!j)break g}k=f+56|0;j=(c[k>>2]|0)+-1|0;c[k>>2]=j;k=p+108|0;l=c[k>>2]|0;if((c[p+112>>2]|0)>(l|0)){c[k>>2]=l+1;m=c[p+104>>2]|0;a[m+(l*20|0)>>0]=46;b[m+(l*20|0)+2>>1]=0;c[m+(l*20|0)+4>>2]=1;c[m+(l*20|0)+8>>2]=j;c[m+(l*20|0)+12>>2]=0;c[m+(l*20|0)+16>>2]=0;a[m+(l*20|0)+1>>0]=0;m=j;break}else{Di(p,46,1,j,0)|0;m=j;break}}else m=0;while(0);Q=f+146|0;a[Q>>0]=1;sj(f,ik(q,g,0)|0,0);a[Q>>0]=0;if((c[r>>2]&524288|0)==0&0==0){j=p+108|0;k=c[j>>2]|0;l=k+2|0;if((c[p+112>>2]|0)>(k|0)){c[j>>2]=k+1;Q=c[p+104>>2]|0;a[Q+(k*20|0)>>0]=46;b[Q+(k*20|0)+2>>1]=0;c[Q+(k*20|0)+4>>2]=0;c[Q+(k*20|0)+8>>2]=l;c[Q+(k*20|0)+12>>2]=0;c[Q+(k*20|0)+16>>2]=0;a[Q+(k*20|0)+1>>0]=0}else Di(p,46,0,l,0)|0;Uj(f,787,2,0,-1,4)}if(!m)break;k=c[p+12>>2]|0;j=~m;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0){mk(k,p,j);break}else{c[(c[k+64>>2]|0)+(j<<2)>>2]=c[p+108>>2];break}}while(0);il(f,S,R,0);qi(T,g);Ra=U;return} function rj(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=Ra;Ra=Ra+48|0;s=u+32|0;t=u+16|0;r=u;p=u+36|0;c[p>>2]=e;c[p+4>>2]=f;c[p+8>>2]=g;a:do if(!e)h=0;else{o=0;h=0;n=e;b:while(1){m=c[n+4>>2]|0;if((m|0)<=0)break;c:do if((m|0)==7){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;d:do if(!(i<<24>>24)){i=18240;q=10}else{l=i&255;i=208+l|0;do if((l|32|0)==110){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18241;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==97){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18242;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18243;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==117){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18244;q=10;break d}l=i&255;i=208+l|0;if((l|32|0)==114){i=a[j+5>>0]|0;if(!(i<<24>>24)){i=18245;q=10;break d}i=i&255;if((i|32|0)!=97){k=97;i=208+i|0;break}i=a[j+6>>0]|0;if(!(i<<24>>24)){i=18246;q=10;break d}i=i&255;if((i|32|0)==108){i=0;break c}else{k=108;i=208+i|0}}else k=114}else k=117}else k=116}else k=97}else k=110;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==10){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=0;else q=12}else q=12;while(0);e:do if((q|0)==12){q=0;l=(m|0)==4;if(l){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18246;q=28}else{k=i&255;i=208+k|0;if((k|32|0)==108){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18247;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18248;q=28;break}k=i&255;i=208+k|0;if((k|32|0)==102){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18249;q=28;break}i=i&255;if((i|32|0)==116){i=1;break e}else{k=116;i=208+i|0}}else k=102}else k=101}else k=108;j=d[i>>0]|0;i=k}while(0);if((q|0)==28){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=1;break}}else l=0;m=(m|0)==5;if(m){j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18250;q=37}else{k=i&255;i=208+k|0;if((k|32|0)==111){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18251;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18252;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==116){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18253;q=37;break}k=i&255;i=208+k|0;if((k|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18254;q=37;break}i=i&255;if((i|32|0)==114){i=2;break e}else{k=114;i=208+i|0}}else k=101}else k=116}else k=117}else k=111;j=d[i>>0]|0;i=k}while(0);if((q|0)==37){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=2;break}if(m){j=c[n>>2]|0;if(j){i=a[j>>0]|0;f:do if(!(i<<24>>24)){i=18254;q=45}else{m=i&255;i=208+m|0;do if((m|32|0)==114){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18255;q=45;break f}i=i&255;if((i|32|0)!=105){k=105;i=208+i|0;break}i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18256;q=45;break f}i=i&255;if((i|32|0)!=103){k=103;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18257;q=45;break f}i=i&255;if((i|32|0)!=104){k=104;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18258;q=45;break f}i=i&255;if((i|32|0)==116){i=3;break e}else{k=116;i=208+i|0}}else k=114;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==45){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=3;break}else i=1}else i=1}else i=0;if(l){l=i;q=48}else l=i}else if(l){l=0;q=48}else break b;if((q|0)==48){q=0;j=c[n>>2]|0;if(j){i=a[j>>0]|0;do if(!(i<<24>>24)){i=18259;q=53}else{m=i&255;i=208+m|0;if((m|32|0)==102){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18260;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==117){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18261;q=53;break}m=i&255;i=208+m|0;if((m|32|0)==108){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18262;q=53;break}i=i&255;if((i|32|0)==108){i=4;break e}else{k=108;i=208+i|0}}else k=108}else k=117}else k=102;j=d[i>>0]|0;i=k}while(0);if((q|0)==53){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0)){i=4;break}}}if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;do if(!(i<<24>>24)){i=18263;q=61}else{m=i&255;i=208+m|0;if((m|32|0)==105){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18264;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18265;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==110){i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18266;q=61;break}m=i&255;i=208+m|0;if((m|32|0)==101){i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18267;q=61;break}i=i&255;if((i|32|0)==114){i=5;break e}else{k=114;i=208+i|0}}else k=101}else k=110}else k=110}else k=105;j=d[i>>0]|0;i=k}while(0);if((q|0)==61){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)!=(i&255|0)){if(!l)break b;j=c[n>>2]|0;if(!j)break b;i=a[j>>0]|0;g:do if(!(i<<24>>24)){i=18268;q=69}else{n=i&255;i=208+n|0;do if((n|32|0)==99){i=a[j+1>>0]|0;if(!(i<<24>>24)){i=18269;q=69;break g}n=i&255;i=208+n|0;if((n|32|0)==114){i=a[j+2>>0]|0;if(!(i<<24>>24)){i=18270;q=69;break g}i=i&255;if((i|32|0)!=111){k=111;i=208+i|0;break}i=a[j+3>>0]|0;if(!(i<<24>>24)){i=18271;q=69;break g}i=i&255;if((i|32|0)!=115){k=115;i=208+i|0;break}i=a[j+4>>0]|0;if(!(i<<24>>24)){i=18272;q=69;break g}i=i&255;if((i|32|0)==115){i=6;break e}else{k=115;i=208+i|0}}else k=114}else k=99;while(0);j=d[i>>0]|0;i=k}while(0);if((q|0)==69){q=0;j=0;i=a[208+(d[i>>0]|0)>>0]|0}if((j|0)==(i&255|0))i=6;else break b}else i=5}while(0);h=h|(d[18288+(i*3|0)+2>>0]|0);o=o+1|0;if(o>>>0>=3)break a;n=c[p+(o<<2)>>2]|0;if(!n)break a}h=h|64}while(0);if((h&33|0)!=33&(h&64|0)==0){if((h&32|0)==0|(h&24|0)==8){t=h;Ra=u;return t|0}cd(b,44559,s);t=1;Ra=u;return t|0}if(!g){c[t>>2]=e;c[t+4>>2]=f;c[t+8>>2]=44514;c[t+12>>2]=0;cd(b,44515,t);t=1;Ra=u;return t|0}else{c[r>>2]=e;c[r+4>>2]=f;c[r+8>>2]=44513;c[r+12>>2]=g;cd(b,44515,r);t=1;Ra=u;return t|0}return 0}function sj(f,g,h){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,v=0,w=0,x=0,y=0,z=0,A=0,B=0,C=0,D=0,E=0,F=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=Ra;Ra=Ra+112|0;E=U+32|0;C=U+24|0;w=U+16|0;v=U+8|0;o=U;D=U+80|0;P=U+76|0;Q=U+72|0;F=U+40|0;c[P>>2]=0;c[Q>>2]=0;T=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(K=T+81|0,(a[K>>0]|0)==0):0){j=c[g+8>>2]|0;if(!j)i=g+12|0;else{k=c[T+16>>2]|0;i=0;while(1)if((c[k+(i<<4)+12>>2]|0)==(j|0))break;else i=i+1|0;i=k+(i<<4)|0}R=bd(f,0,c[g+16>>2]|0,c[i>>2]|0)|0;i=c[f>>2]|0;j=g+24|0;k=c[j>>2]|0;do if(k|0){if(i|0?c[i+480>>2]|0:0){Vi(i,k);break}N=k+32|0;O=(c[N>>2]|0)+-1|0;c[N>>2]=O;if(!O)Vi(i,k)}while(0);c[j>>2]=R;if(R){O=R+32|0;c[O>>2]=(c[O>>2]|0)+1;b:do if(a[g+45>>0]&2){m=c[g+72>>2]|0;i=c[R+8>>2]|0;c:do if(i|0){n=d[208+(d[m>>0]|0)>>0]|0;while(1){k=c[i>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-n|0;if(!(O<<24>>24==0|(j|0)!=0)){l=m;do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0))}if(!j)break;i=c[i+20>>2]|0;if(!i)break c}c[g+76>>2]=i;break b}while(0);c[o>>2]=m;c[o+4>>2]=0;cd(f,41107,o);a[f+17>>0]=1;i=0;break a}while(0);i=c[f>>2]|0;s=c[i+32>>2]|0;do if(!((s&262144|0)==0&0==0)?(q=c[(c[i+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){p=c[R+72>>2]|0;if((p|0)!=(q|0)?(r=c[q+48>>2]|0,(r|0)!=0):0){o=R+68|0;n=r;i=0;do{m=c[n+8>>2]|0;if((c[m+24>>2]|0)==(p|0)){k=c[m+4>>2]|0;l=c[R>>2]|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0;if(!(O<<24>>24==0|(j|0)!=0))do{k=k+1|0;l=l+1|0;O=a[k>>0]|0;j=(d[208+(O&255)>>0]|0)-(d[208+(d[l>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(j|0)!=0));if(!j){if(!i)i=c[o>>2]|0;c[m+32>>2]=i;i=m}}n=c[n>>2]|0}while((n|0)!=0);if(!i)S=40}else S=40;if((S|0)==40){i=c[R+68>>2]|0;if(!i){S=46;break}}j=0;k=i;do{if((a[k+8>>0]|0)==121)j=j|d[k+9>>0];k=c[k+32>>2]|0}while((k|0)!=0);if(j){j=(c[R+12>>2]|0)!=0;if(!i)S=48;else{I=i;x=1;i=1}}else S=46}else S=46;while(0);if((S|0)==46){j=(c[R+12>>2]|0)!=0;S=48}if((S|0)==48){if(!((s&16384|0)==0&0==0)){p=c[R>>2]|0;m=c[R+72>>2]|0;n=c[m+68>>2]|0;if(!n){k=m+60|0;i=m+64|0}else{k=a[p>>0]|0;if(!(k<<24>>24))i=0;else{i=0;l=p;do{l=l+1|0;i=G(i+(d[208+(k&255)>>0]|0)|0,-1640531535)|0;k=a[l>>0]|0}while(k<<24>>24!=0)}i=(i>>>0)%((c[m+56>>2]|0)>>>0)|0;k=n+(i<<3)|0;i=n+(i<<3)+4|0}k=c[k>>2]|0;d:do if(!k)i=59292;else{o=d[208+(d[p>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;k=k+-1|0;m=c[i+12>>2]|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-o|0;if(!(O<<24>>24==0|(l|0)!=0)){n=p;do{m=m+1|0;n=n+1|0;O=a[m>>0]|0;l=(d[208+(O&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(O<<24>>24==0|(l|0)!=0))}if(!l)break d;if(!k){i=59292;break}}}while(0);if(!(c[i+8>>2]|0))i=(c[R+16>>2]|0)!=0&1;else i=1}else i=0;I=0;x=(i|0)!=0;i=0}u=x&1;if((Sk(f,R)|0)==0?(Fm(f,R,i)|0)==0:0){k=c[R+72>>2]|0;l=c[T+16>>2]|0;if(!k)z=-1e6;else{i=0;while(1)if((c[l+(i<<4)+12>>2]|0)==(k|0)){z=i;break}else i=i+1|0}m=c[R>>2]|0;i=c[l+(z<<4)>>2]|0;k=c[f>>2]|0;if(((a[k+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(t=c[k+312>>2]|0,(t|0)!=0):0){i=$a[t&127](c[k+316>>2]|0,9,m,0,i,c[f+240>>2]|0)|0;if((i|0)==1){cd(f,39216,v);c[f+12>>2]=23;i=0;break}if((i|2|0)!=2){cd(f,39231,w);c[f+12>>2]=1;i=0;break}}else i=0;w=f+40|0;J=c[w>>2]|0;A=J+1|0;c[w>>2]=A;c[g+48>>2]=J;y=R+8|0;k=c[y>>2]|0;if(!k)B=0;else{l=0;m=A;do{m=m+1|0;l=l+1|0;k=c[k+20>>2]|0}while((k|0)!=0);c[w>>2]=m;B=l}if(j){O=f+240|0;N=c[O>>2]|0;c[O>>2]=c[R>>2];O=f}else{N=0;O=0}v=f+8|0;k=c[v>>2]|0;e:do if(!k){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;f:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))S=97;else{i=0;break e}else{do if((e[n+276>>1]|0)>=224){k=n+300|0;l=c[k>>2]|0;if(l|0){c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}k=n+296|0;l=c[k>>2]|0;if(!l){k=n+292|0;break}else{c[k>>2]=c[l>>2];m=n+284|0;c[m>>2]=(c[m>>2]|0)+1;m=l;break f}}else k=n+288|0;while(0);c[k>>2]=(c[k>>2]|0)+1;S=97}while(0);if((S|0)==97)m=_d(n,224,0)|0;if(!m)i=0;else{o=m+104|0;q=o+120|0;do{c[o>>2]=0;o=o+4|0}while((o|0)<(q|0));c[m>>2]=n;k=n+4|0;l=c[k>>2]|0;if(l|0)c[l+4>>2]=m;c[m+8>>2]=l;c[m+4>>2]=0;c[k>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[v>>2]=m;Di(m,61,0,1,0)|0;M=m;S=102}}else{M=k;S=102}while(0);g:do if((S|0)==102){L=f+18|0;if(!(a[L>>0]|0)){H=M+149|0;t=d[H>>0]|d[H+1>>0]<<8|32;a[H>>0]=t;a[H+1>>0]=t>>8}H=f+116|0;t=c[H>>2]|0;t=(t|0)==0?f:t;k=t+84|0;l=c[k>>2]|0;s=1<>2]=l|s,(z|0)==1):0){r=c[t>>2]|0;k=r+16|0;if(c[(c[k>>2]|0)+20>>2]|0)break;if(a[t+199>>0]|0)break;l=Pe(c[r>>2]|0,0,r,D,0,542)|0;if(l|0){cd(t,32157,C);c[t+12>>2]=l;break}C=c[D>>2]|0;c[(c[k>>2]|0)+20>>2]=C;k=c[r+92>>2]|0;n=c[C+4>>2]|0;c[n+4>>2]=c[C>>2];do if(!(b[n+22>>1]&2)){o=n+32|0;p=n+36|0;q=(c[o>>2]|0)-(c[p>>2]|0)|0;do if((k+-512|0)>>>0<65025){if(k+-1&k|0)break;c[o>>2]=k;m=n+80|0;k=c[m>>2]|0;if(!k)break;l=k+-4|0;c[m>>2]=l;k=l;do if((c[14816]|0)>>>0<=k>>>0)if((c[14817]|0)>>>0>k>>>0){c[14979]=(c[14979]|0)+-1;c[l>>2]=c[14819];c[14819]=l;C=(c[14820]|0)+1|0;c[14820]=C;c[14821]=(C|0)<(c[14815]|0)&1;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119;break}else{k=Wa[c[29352>>2]&127](l)|0;S=119}while(0);do if((S|0)==119){c[14980]=(c[14980]|0)-k;if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{C=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-C;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);c[m>>2]=0}while(0);C=Se(c[n>>2]|0,o,q)|0;c[p>>2]=(c[o>>2]|0)-(q&65535);if((C|0)!=7)break;k=r+81|0;do if(!(a[k>>0]|0)){if(a[r+82>>0]|0)break;a[k>>0]=1;if((c[r+180>>2]|0)>0)c[r+264>>2]=1;k=r+272|0;c[k>>2]=(c[k>>2]|0)+1;k=c[r+236>>2]|0;if(!k)break;c[k+12>>2]=7}while(0);break h}while(0)}while(0);C=t+80|0;c[C>>2]=c[C>>2]|s;C=t+20|0;a[C>>0]=d[C>>0]|u;if(j){Gm(f,R,h,J);c[Q>>2]=J;c[P>>2]=J}C=F+8|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]=f;c[F+4>>2]=g;i:do if(h){l=F+24|0;b[l>>1]=0;c[D>>2]=f;c[D+4>>2]=125;c[D+8>>2]=126;c[D+12>>2]=0;c[D+24>>2]=F;m=h+24|0;k=f+208|0;C=(c[k>>2]|0)+(c[m>>2]|0)|0;c[k>>2]=C;k=c[(c[f>>2]|0)+120>>2]|0;do if((k|0)>=(C|0)){_j(D,h)|0;k=c[D>>2]|0;E=k+208|0;c[E>>2]=(c[E>>2]|0)-(c[m>>2]|0);E=h+4|0;c[E>>2]=c[E>>2]|b[l>>1]&-32752&65535;if((c[F+20>>2]|0)>0)break;if((c[k+36>>2]|0)<1)break i;else{i=0;break g}}else{c[E>>2]=k;cd(f,41637,E)}while(0);i=0;break g}while(0);do if(!(0==0?(c[T+32>>2]&128|0)==0:0)){if(a[L>>0]|0){D=0;break}if(c[f+120>>2]|0){D=0;break}l=f+44|0;k=(c[l>>2]|0)+1|0;c[l>>2]=k;l=M+108|0;m=c[l>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[l>>2]=m+1;D=c[M+104>>2]|0;a[D+(m*20|0)>>0]=70;b[D+(m*20|0)+2>>1]=0;c[D+(m*20|0)+4>>2]=0;c[D+(m*20|0)+8>>2]=k;c[D+(m*20|0)+12>>2]=0;c[D+(m*20|0)+16>>2]=0;a[D+(m*20|0)+1>>0]=0;D=k;break}else{Di(M,70,0,k,0)|0;D=k;break}}else D=0;while(0);do if(x|((h|0)!=0|(i|0)!=0))S=166;else{if(c[R+56>>2]|0){S=166;break}i=R+28|0;Hj(f,z,c[i>>2]|0,1,c[R>>2]|0);do if(!(c[R+36>>2]&32)){j=c[i>>2]|0;k=(D|0)==0?-1:D;m=c[R>>2]|0;l=M+108|0;i=c[l>>2]|0;if((c[M+112>>2]|0)>(i|0)){c[l>>2]=i+1;R=c[M+104>>2]|0;a[R+(i*20|0)>>0]=-119;b[R+(i*20|0)+2>>1]=0;c[R+(i*20|0)+4>>2]=j;c[R+(i*20|0)+8>>2]=z;c[R+(i*20|0)+12>>2]=k;c[R+(i*20|0)+16>>2]=0;a[R+(i*20|0)+1>>0]=0}else i=Di(M,137,j,z,k)|0;if(a[(c[M>>2]|0)+81>>0]|0)break;if((i|0)<0)i=(c[l>>2]|0)+-1|0;j=c[M+104>>2]|0;k=j+(i*20|0)+1|0;if(a[k>>0]|0){Ei(M,j+(i*20|0)|0,m,-1);break}if(!m)break;c[j+(i*20|0)+16>>2]=m;a[k>>0]=-1}while(0);i=c[y>>2]|0;if(!i){i=0;break}l=M+108|0;m=M+112|0;n=M+104|0;do{j=c[i+44>>2]|0;k=c[l>>2]|0;if((c[m>>2]|0)>(k|0)){c[l>>2]=k+1;R=c[n>>2]|0;a[R+(k*20|0)>>0]=-119;b[R+(k*20|0)+2>>1]=0;c[R+(k*20|0)+4>>2]=j;c[R+(k*20|0)+8>>2]=z;c[R+(k*20|0)+12>>2]=0;c[R+(k*20|0)+16>>2]=0;a[R+(k*20|0)+1>>0]=0}else Di(M,137,j,z,0)|0;i=c[i+20>>2]|0}while((i|0)!=0);i=0}while(0);do if((S|0)==166){r=x|(b[F+24>>1]&64)!=0?1044:1052;j:do if(!(c[R+36>>2]&32)){i=f+44|0;l=(c[i>>2]|0)+1|0;c[i>>2]=l;i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;s=c[M+104>>2]|0;a[s+(k*20|0)>>0]=73;b[s+(k*20|0)+2>>1]=0;c[s+(k*20|0)+4>>2]=0;c[s+(k*20|0)+8>>2]=l;c[s+(k*20|0)+12>>2]=0;c[s+(k*20|0)+16>>2]=0;a[s+(k*20|0)+1>>0]=0;s=0;C=0;p=1;u=0;i=0;break}else{Di(M,73,0,l,0)|0;s=0;C=0;p=1;u=0;i=0;break}}else{i=c[y>>2]|0;k:do if(!i)i=0;else while(1){F=i+55|0;if(((d[F>>0]|d[F+1>>0]<<8)&3)==2)break k;i=c[i+20>>2]|0;if(!i){i=0;break}}while(0);p=b[i+50>>1]|0;o=f+44|0;k=c[o>>2]|0;q=k+1|0;m=p<<16>>16;c[o>>2]=k+m;o=c[w>>2]|0;c[w>>2]=o+1;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;F=c[M+104>>2]|0;a[F+(l*20|0)>>0]=113;b[F+(l*20|0)+2>>1]=0;c[F+(l*20|0)+4>>2]=o;c[F+(l*20|0)+8>>2]=m;c[F+(l*20|0)+12>>2]=0;c[F+(l*20|0)+16>>2]=0;a[F+(l*20|0)+1>>0]=0}else l=Di(M,113,o,m,0)|0;k=c[v>>2]|0;n=Ij(f,i)|0;if(!n){s=l;l=0;C=o;u=q;break}m=c[k>>2]|0;if(!(a[m+81>>0]|0)){C=c[k+104>>2]|0;s=(c[k+108>>2]|0)+-1|0;a[C+(s*20|0)+1>>0]=-9;c[C+(s*20|0)+16>>2]=n;s=l;l=0;C=o;u=q;break}if(c[m+480>>2]|0){s=l;l=0;C=o;u=q;break}F=(c[n>>2]|0)+-1|0;c[n>>2]=F;if(F|0){s=l;l=0;C=o;u=q;break}k=c[n+12>>2]|0;do if(k|0){if(c[k+480>>2]|0){Xd(k,n);s=l;l=0;C=o;u=q;break j}m=n;if((c[k+304>>2]|0)>>>0>m>>>0)break;if((c[k+308>>2]|0)>>>0<=m>>>0)break;s=k+300|0;c[n>>2]=c[s>>2];c[s>>2]=n;s=l;l=0;C=o;u=q;break j}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}else{s=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);s=l;l=0;C=o;u=q;break}}while(0);A=ql(f,g,h,0,0,r,A)|0;if(!A){i=0;break g}v=A+24|0;o=c[v>>2]|0;v=c[v+4>>2]|0;w=a[A+49>>0]|0;x=w<<24>>24==1;if(!x){F=c[H>>2]|0;a[((F|0)==0?f:F)+20>>0]=1}do if(D|0){k=M+108|0;m=c[k>>2]|0;if((c[M+112>>2]|0)>(m|0)){c[k>>2]=m+1;F=c[M+104>>2]|0;a[F+(m*20|0)>>0]=83;b[F+(m*20|0)+2>>1]=0;c[F+(m*20|0)+4>>2]=D;c[F+(m*20|0)+8>>2]=1;c[F+(m*20|0)+12>>2]=0;c[F+(m*20|0)+16>>2]=0;a[F+(m*20|0)+1>>0]=0;break}else{Di(M,83,D,1,0)|0;break}}while(0);z=(i|0)!=0;do if(!z){m=f+44|0;k=(c[m>>2]|0)+1|0;c[m>>2]=k;m=M+108|0;n=c[m>>2]|0;if((c[M+112>>2]|0)>(n|0)){c[m>>2]=n+1;F=c[M+104>>2]|0;a[F+(n*20|0)>>0]=-128;b[F+(n*20|0)+2>>1]=0;c[F+(n*20|0)+4>>2]=J;c[F+(n*20|0)+8>>2]=k;c[F+(n*20|0)+12>>2]=0;c[F+(n*20|0)+16>>2]=0;a[F+(n*20|0)+1>>0]=0;n=k;break}else{Di(M,128,J,k,0)|0;n=k;break}}else{m=p<<16>>16;if(p<<16>>16<=0){n=u;break}n=i+4|0;k=0;do{Vj(M,R,J,b[(c[n>>2]|0)+(k<<1)>>1]|0,k+u|0);k=k+1|0}while((k|0)!=(m|0));n=u}while(0);y=w<<24>>24!=0;l:do if(y){m=B+2|0;m:do if(c[T+272>>2]|0){if(!(a[K>>0]|0))S=216}else{do if(!(0<0|(0==0?(e[T+276>>1]|0)>>>0>>0:0))){k=T+300|0;i=c[k>>2]|0;if(i|0){c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}k=T+296|0;i=c[k>>2]|0;if(!i){i=T+292|0;break}else{c[k>>2]=c[i>>2];S=T+284|0;c[S>>2]=(c[S>>2]|0)+1;S=217;break m}}else i=T+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;S=216}while(0);if((S|0)==216){i=_d(T,m,0)|0;S=217}do if((S|0)==217){if(!i)break;K=B+1|0;gw(i|0,1,K|0)|0;a[i+K>>0]=0;if((o|0)>-1)a[i+(o-J)>>0]=0;if((v|0)>-1)a[i+(v-J)>>0]=0;do if(s|0){k=c[M>>2]|0;if(a[k+81>>0]|0)break;K=c[M+104>>2]|0;E=K+(s*20|0)+1|0;F=K+(s*20|0)+16|0;kg(k,a[E>>0]|0,c[F>>2]|0);a[E>>0]=0;c[F>>2]=0;a[K+(s*20|0)>>0]=-86}while(0);r=f+56|0;s=(c[r>>2]|0)+-1|0;c[r>>2]=s;r=n;break l}while(0);sl(A);i=0;break g}else{do if(!z){i=M+108|0;k=c[i>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[i>>2]=k+1;i=c[M+104>>2]|0;a[i+(k*20|0)>>0]=-108;b[i+(k*20|0)+2>>1]=0;c[i+(k*20|0)+4>>2]=l;c[i+(k*20|0)+8>>2]=n;c[i+(k*20|0)+12>>2]=0;c[i+(k*20|0)+16>>2]=0;a[i+(k*20|0)+1>>0]=0;i=1;k=n;break}else{Di(M,148,l,n,0)|0;i=1;k=n;break}}else{t=f+44|0;k=(c[t>>2]|0)+1|0;c[t>>2]=k;t=p<<16>>16;q=gl(c[f>>2]|0,i)|0;r=M+108|0;i=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=92;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=u;c[K+(i*20|0)+8>>2]=t;c[K+(i*20|0)+12>>2]=k;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,92,u,t,k)|0;m=c[M>>2]|0;n:do if(!(a[m+81>>0]|0)){if((i|0)<0)i=(c[r>>2]|0)+-1|0;m=c[M+104>>2]|0;n=m+(i*20|0)|0;do if(p<<16>>16<=-1){o=m+(i*20|0)+1|0;if(a[o>>0]|0)break;if(p<<16>>16==-3){c[m+(i*20|0)+16>>2]=q;a[o>>0]=-3;break n}if(!q)break n;c[m+(i*20|0)+16>>2]=q;a[o>>0]=p;if(p<<16>>16!=-12)break n;K=q+12|0;c[K>>2]=(c[K>>2]|0)+1;break n}while(0);Ei(M,n,q,t)}else{if(p<<16>>16==-12)break;kg(m,t,q)}while(0);i=c[r>>2]|0;if((c[s>>2]|0)>(i|0)){c[r>>2]=i+1;K=c[M+104>>2]|0;a[K+(i*20|0)>>0]=-124;b[K+(i*20|0)+2>>1]=0;c[K+(i*20|0)+4>>2]=C;c[K+(i*20|0)+8>>2]=k;c[K+(i*20|0)+12>>2]=u;c[K+(i*20|0)+16>>2]=0;a[K+(i*20|0)+1>>0]=0}else i=Di(M,132,C,k,u)|0;if(a[(c[M>>2]|0)+81>>0]|0){i=0;break}K=c[M+104>>2]|0;a[K+(i*20|0)+1>>0]=-3;c[K+(i*20|0)+16>>2]=t;i=0}while(0);sl(A);s=0;p=i;i=0;r=k}while(0);do if(!j){if(w<<24>>24!=2){Hm(f,R,109,8,J,i,P,Q)|0;break}k=M+108|0;j=c[k>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[k>>2]=j+1;o=c[M+104>>2]|0;a[o+(j*20|0)>>0]=17;o=o+(j*20|0)+1|0;q=o+19|0;do{a[o>>0]=0;o=o+1|0}while((o|0)<(q|0))}else j=Di(M,17,0,0,0)|0;Hm(f,R,109,8,J,i,P,Q)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((j|0)<0?k+-1|0:j)*20|0)|0;else j=59308;c[j+8>>2]=k}while(0);do if(!y){n=M+108|0;k=c[n>>2]|0;m=M+112|0;j=(c[m>>2]|0)>(k|0);if(!z)if(j){c[n>>2]=k+1;q=c[M+104>>2]|0;a[q+(k*20|0)>>0]=41;b[q+(k*20|0)+2>>1]=0;c[q+(k*20|0)+4>>2]=l;c[q+(k*20|0)+8>>2]=0;c[q+(k*20|0)+12>>2]=r;c[q+(k*20|0)+16>>2]=0;a[q+(k*20|0)+1>>0]=0;q=k;break}else{q=Di(M,41,l,0,r)|0;break}if(j){c[n>>2]=k+1;K=c[M+104>>2]|0;a[K+(k*20|0)>>0]=36;b[K+(k*20|0)+2>>1]=0;c[K+(k*20|0)+4>>2]=C;c[K+(k*20|0)+8>>2]=0;c[K+(k*20|0)+12>>2]=0;c[K+(k*20|0)+16>>2]=0;a[K+(k*20|0)+1>>0]=0}else k=Di(M,36,C,0,0)|0;l=c[n>>2]|0;j=(c[m>>2]|0)>(l|0);if(!(c[R+56>>2]|0))if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=127;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=r;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,127,C,r,0)|0;q=k;break}else if(j){c[n>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=90;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=C;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=r;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=k;break}else{Di(M,90,C,0,r)|0;q=k;break}}else{if(c[R+56>>2]|0){q=0;break}k=c[P>>2]|0;if(!(a[i+(k-J)>>0]|0)){q=0;break}l=M+108|0;j=c[l>>2]|0;if((c[M+112>>2]|0)>(j|0)){c[l>>2]=j+1;K=c[M+104>>2]|0;a[K+(j*20|0)>>0]=28;b[K+(j*20|0)+2>>1]=0;c[K+(j*20|0)+4>>2]=k;c[K+(j*20|0)+8>>2]=s;c[K+(j*20|0)+12>>2]=r;c[K+(j*20|0)+16>>2]=0;a[K+(j*20|0)+1>>0]=0}else j=Di(M,28,k,s,r)|0;if(a[(c[M>>2]|0)+81>>0]|0){q=0;break}q=c[M+104>>2]|0;a[q+(j*20|0)+1>>0]=-3;c[q+(j*20|0)+16>>2]=p<<16>>16;q=0}while(0);do if(!(c[R+56>>2]|0))Im(f,R,I,c[P>>2]|0,c[Q>>2]|0,r,p,(a[L>>0]|0)==0&1,11,w,v);else{j=c[R+64>>2]|0;o:do if(!j)p=0;else while(1){if((c[j>>2]|0)==(T|0)){p=j;break o}j=c[j+24>>2]|0;if(!j){p=0;break}}while(0);o=c[H>>2]|0;o=(o|0)==0?f:o;n=o+204|0;m=c[n>>2]|0;l=o+252|0;p:do if((m|0)>0){j=c[l>>2]|0;k=0;do{if((c[j+(k<<2)>>2]|0)==(R|0))break p;k=k+1|0}while((k|0)<(m|0));k=l;S=295}else{k=l;j=c[l>>2]|0;S=295}while(0);q:do if((S|0)==295){do if(!(mb()|0)){S=(m<<2)+4|0;j=sb(j,S,((S|0)<0)<<31>>31)|0;if(!j)break;c[k>>2]=j;S=c[n>>2]|0;c[n>>2]=S+1;c[j+(S<<2)>>2]=R;break q}while(0);j=c[o>>2]|0;k=j+81|0;if(a[k>>0]|0)break;if(a[j+82>>0]|0)break;a[k>>0]=1;if((c[j+180>>2]|0)>0)c[j+264>>2]=1;S=j+272|0;c[S>>2]=(c[S>>2]|0)+1;j=c[j+236>>2]|0;if(!j)break;c[j+12>>2]=7}while(0);m=c[H>>2]|0;a[((m|0)==0?f:m)+21>>0]=1;m=M+108|0;do if(x){j=c[m>>2]|0;k=M+112|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=117;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=J;c[S+(j*20|0)+8>>2]=0;c[S+(j*20|0)+12>>2]=0;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;if(c[H>>2]|0)break;a[f+20>>0]=0}else k=M+112|0;while(0);j=c[m>>2]|0;if((c[k>>2]|0)>(j|0)){c[m>>2]=j+1;S=c[M+104>>2]|0;a[S+(j*20|0)>>0]=10;b[S+(j*20|0)+2>>1]=0;c[S+(j*20|0)+4>>2]=0;c[S+(j*20|0)+8>>2]=1;c[S+(j*20|0)+12>>2]=r;c[S+(j*20|0)+16>>2]=0;a[S+(j*20|0)+1>>0]=0}else j=Di(M,10,0,1,r)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((j|0)<0)j=(c[m>>2]|0)+-1|0;k=c[M+104>>2]|0;l=k+(j*20|0)+1|0;if(a[l>>0]|0){Ei(M,k+(j*20|0)|0,p,-12);break}if(!p)break;c[k+(j*20|0)+16>>2]=p;a[l>>0]=-12;S=p+12|0;c[S>>2]=(c[S>>2]|0)+1}while(0);j=c[m>>2]|0;if((j|0)<=0)break;b[(c[M+104>>2]|0)+((j+-1|0)*20|0)+2>>1]=2}while(0);if(y){k=c[M+12>>2]|0;j=~s;if(((c[k+56>>2]|0)+(c[k+60>>2]|0)|0)<0)mk(k,M,j);else c[(c[k+64>>2]|0)+(j<<2)>>2]=c[M+108>>2];sl(A);break}if(z){j=q+1|0;k=M+108|0;l=c[k>>2]|0;if((c[M+112>>2]|0)>(l|0)){c[k>>2]=l+1;S=c[M+104>>2]|0;a[S+(l*20|0)>>0]=5;b[S+(l*20|0)+2>>1]=0;c[S+(l*20|0)+4>>2]=C;c[S+(l*20|0)+8>>2]=j;c[S+(l*20|0)+12>>2]=0;c[S+(l*20|0)+16>>2]=0;a[S+(l*20|0)+1>>0]=0}else Di(M,5,C,j,0)|0;k=c[k>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}else{j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;S=c[M+104>>2]|0;a[S+(k*20|0)>>0]=11;b[S+(k*20|0)+2>>1]=0;c[S+(k*20|0)+4>>2]=0;c[S+(k*20|0)+8>>2]=q;c[S+(k*20|0)+12>>2]=0;c[S+(k*20|0)+16>>2]=0;a[S+(k*20|0)+1>>0]=0}else Di(M,11,0,q,0)|0;k=c[j>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))j=(c[M+104>>2]|0)+(((q|0)<0?k+-1|0:q)*20|0)|0;else j=59308;c[j+8>>2]=k;break}}while(0);do if(!(a[L>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!D)break;j=M+108|0;k=c[j>>2]|0;if((c[M+112>>2]|0)>(k|0)){c[j>>2]=k+1;f=c[M+104>>2]|0;a[f+(k*20|0)>>0]=81;b[f+(k*20|0)+2>>1]=0;c[f+(k*20|0)+4>>2]=D;c[f+(k*20|0)+8>>2]=1;c[f+(k*20|0)+12>>2]=0;c[f+(k*20|0)+16>>2]=0;a[f+(k*20|0)+1>>0]=0}else Di(M,81,D,1,0)|0;Wi(M,1);if(a[(c[M>>2]|0)+81>>0]|0)break;yc(c[M+116>>2]|0,44614,-1,1,0)|0}while(0);if(O)c[O+240>>2]=N}else i=0}else i=0}else i=0;while(0);qi(T,g);if(h|0)ni(T,h);if(!i){Ra=U;return}if(T|0){if(c[T+480>>2]|0){Xd(T,i);Ra=U;return}h=i;if((c[T+304>>2]|0)>>>0<=h>>>0?(c[T+308>>2]|0)>>>0>h>>>0:0){T=T+300|0;c[i>>2]=c[T>>2];c[T>>2]=i;Ra=U;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](i);Ra=U;return}else{T=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-T;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);Ra=U;return}}function tj(f,g,h,i,j,k){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,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,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,Aa=0;Aa=Ra;Ra=Ra+128|0;ea=Aa+48|0;aa=Aa+40|0;S=Aa+32|0;V=Aa+24|0;U=Aa+16|0;T=Aa+8|0;r=Aa;da=Aa+88|0;fa=Aa+56|0;va=Aa+52|0;c[va>>2]=0;za=c[f>>2]|0;a:do if((c[f+36>>2]|0)==0?(y=za+81|0,(a[y>>0]|0)==0):0){m=c[g+8>>2]|0;if(!m)l=g+12|0;else{n=c[za+16>>2]|0;l=0;while(1)if((c[n+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=n+(l<<4)|0}ya=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;m=g+24|0;n=c[m>>2]|0;do if(n|0){if(l|0?c[l+480>>2]|0:0){Vi(l,n);break}ua=n+32|0;wa=(c[ua>>2]|0)+-1|0;c[ua>>2]=wa;if(!wa)Vi(l,n)}while(0);c[m>>2]=ya;if(ya|0){wa=ya+32|0;c[wa>>2]=(c[wa>>2]|0)+1;b:do if(a[g+45>>0]&2){p=c[g+72>>2]|0;l=c[ya+8>>2]|0;c:do if(l|0){q=d[208+(d[p>>0]|0)>>0]|0;while(1){n=c[l>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-q|0;if(!(wa<<24>>24==0|(m|0)!=0)){o=p;do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0))}if(!m)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[r>>2]=p;c[r+4>>2]=0;cd(f,41107,r);a[f+17>>0]=1;break a}while(0);n=c[f>>2]|0;ua=ya+72|0;s=c[ua>>2]|0;if(!s)Z=-1e6;else{m=c[n+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(s|0)){Z=l;break}else l=l+1|0}do if(!(0==0?(c[n+32>>2]&262144|0)==0:0)?(t=c[(c[n+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){if((s|0)!=(t|0)?(u=c[t+48>>2]|0,(u|0)!=0):0){r=ya+68|0;q=u;l=0;do{p=c[q+8>>2]|0;if((c[p+24>>2]|0)==(s|0)){n=c[p+4>>2]|0;o=c[ya>>2]|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0;if(!(wa<<24>>24==0|(m|0)!=0))do{n=n+1|0;o=o+1|0;wa=a[n>>0]|0;m=(d[208+(wa&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(m|0)!=0));if(!m){if(!l)l=c[r>>2]|0;c[p+32>>2]=l;l=p}}q=c[q>>2]|0}while((q|0)!=0);if(!l)xa=43}else xa=43;if((xa|0)==43){l=c[ya+68>>2]|0;if(!l){xa=65;break}}if(!h){m=0;n=l;do{if((a[n+8>>0]|0)==122)m=m|d[n+9>>0];n=c[n+32>>2]|0}while((n|0)!=0)}else{m=0;x=l;do{d:do if((a[x+8>>0]|0)==122){n=c[x+16>>2]|0;e:do if(n|0){w=c[h>>2]|0;if((w|0)<=0)break d;v=c[n+4>>2]|0;if((v|0)<=0)break d;s=c[n>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-u|0;if(!(wa<<24>>24==0|(n|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;wa=a[o>>0]|0;n=(d[208+(wa&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(wa<<24>>24==0|(n|0)!=0))}if(!n)break e;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break d}}while(0);m=m|d[x+9>>0]}while(0);x=c[x+32>>2]|0}while((x|0)!=0)}if(!m)xa=65}else xa=65;while(0);if((xa|0)==65){m=0;l=0}sa=(c[ya+12>>2]|0)!=0;if((Sk(f,ya)|0)==0?(Fm(f,ya,m)|0)==0:0){_=f+40|0;ga=c[_>>2]|0;s=ga+1|0;c[_>>2]=s;ha=ya+36|0;ba=ya+8|0;o=c[ba>>2]|0;f:do if(c[ha>>2]&32)if(!o){p=0;o=ga;n=0}else{n=o;while(1){xa=n+55|0;if(((d[xa>>0]|d[xa+1>>0]<<8)&3)==2){xa=73;break f}n=c[n+20>>2]|0;if(!n){n=0;xa=73;break}}}else{n=0;xa=73}while(0);if((xa|0)==73)if(!o){p=0;o=ga}else{p=0;r=ga;q=s;do{r=(n|0)==(o|0)?q:r;q=q+1|0;p=p+1|0;o=c[o+20>>2]|0}while((o|0)!=0);c[_>>2]=q;o=r}$=(k|0)!=0;if($){o=c[k+28>>2]|0;s=c[k+32>>2]|0;c[_>>2]=ga}Y=g+48|0;c[Y>>2]=o;ta=ya+42|0;t=p+2+(p+(b[ta>>1]|0)<<2)|0;g:do if(c[za+272>>2]|0)if(!(a[y>>0]|0))xa=89;else break a;else{do if(!(0<0|(0==0?(e[za+276>>1]|0)>>>0>>0:0))){q=za+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}q=za+296|0;r=c[q>>2]|0;if(!r){q=za+292|0;break}else{c[q>>2]=c[r>>2];wa=za+284|0;c[wa>>2]=(c[wa>>2]|0)+1;wa=r;break g}}else q=za+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=89}while(0);if((xa|0)==89)wa=_d(za,t,0)|0;if(wa|0){ra=wa+(b[ta>>1]<<2)|0;ca=ra+(p<<2)|0;W=p+1|0;gw(ca|0,1,W|0)|0;a[ca+W>>0]=0;qa=b[ta>>1]|0;q=qa<<16>>16;if(qa<<16>>16>0)gw(wa|0,-1,((q|0)>1?q:1)<<2|0)|0;X=fa+12|0;c[X>>2]=0;c[X+4>>2]=0;c[X+8>>2]=0;c[X+12>>2]=0;c[X+16>>2]=0;c[fa>>2]=f;c[fa+4>>2]=g;c[fa+8>>2]=k;X=fa+24|0;b[X>>1]=512;h:do if((c[h>>2]|0)>0){F=da+4|0;H=da+8|0;I=da+12|0;J=da+24|0;K=(n|0)==0;M=za+16|0;N=ya+4|0;O=fa+20|0;P=f+200|0;Q=f+240|0;R=ya+40|0;B=0;t=0;D=0;E=0;i:while(1){C=h+4+(E*20|0)|0;u=c[C>>2]|0;if(u){v=e[X>>1]|0;b[X>>1]=v&28655;q=c[fa>>2]|0;c[da>>2]=q;c[F>>2]=125;c[H>>2]=126;c[I>>2]=0;c[J>>2]=fa;w=u+24|0;r=q;pa=r+208|0;qa=(c[pa>>2]|0)+(c[w>>2]|0)|0;c[pa>>2]=qa;r=c[(c[r>>2]|0)+120>>2]|0;if((r|0)<(qa|0)){xa=98;break}_j(da,u)|0;q=c[da>>2]|0;qa=q+208|0;c[qa>>2]=(c[qa>>2]|0)-(c[w>>2]|0);qa=b[X>>1]|0;pa=u+4|0;c[pa>>2]=c[pa>>2]|qa&-32752&65535;b[X>>1]=v&36880|qa&65535;if((c[O>>2]|0)>0)break;if((c[q+36>>2]|0)>=1){xa=919;break h}}q=b[ta>>1]|0;j:do if(q<<16>>16>0){A=c[N>>2]|0;x=c[h+4+(E*20|0)+4>>2]|0;z=d[208+(d[x>>0]|0)>>0]|0;w=q<<16>>16;y=0;while(1){v=c[A+(y<<4)>>2]|0;qa=a[v>>0]|0;q=(d[208+(qa&255)>>0]|0)-z|0;if(!(qa<<24>>24==0|(q|0)!=0)){r=x;u=v;do{u=u+1|0;r=r+1|0;qa=a[u>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=y+1|0;if((q|0)<(w|0))y=q;else{xa=114;break j}}do if((y|0)==(b[R>>1]|0)){r=c[C>>2]|0;t=1;q=D}else{if(K){r=B;q=D;break}r=B;q=(a[A+(y<<4)+15>>0]&1)==0?D:1}while(0);c[wa+(y<<2)>>2]=E;z=q;w=r;x=t}else{x=c[h+4+(E*20|0)+4>>2]|0;xa=114}while(0);if((xa|0)==114){xa=0;if(!K){xa=128;break}v=a[x>>0]|0;u=d[208+(v&255)>>0]|0;q=u+-95|0;v=v<<24>>24==0;if(!(v|(q|0)!=0)){r=58070;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}do if(q|0){q=u+-114|0;if(!(v|(q|0)!=0)){r=40352;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(!q)break;q=u+-111|0;if(!(v|(q|0)!=0)){r=58078;t=x;do{t=t+1|0;r=r+1|0;qa=a[t>>0]|0;q=(d[208+(qa&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(q|0)!=0))}if(q|0){xa=128;break i}}while(0);y=-1;z=D;w=c[C>>2]|0;x=1;v=40352}q=c[ya>>2]|0;r=c[(c[M>>2]|0)+(Z<<4)>>2]|0;t=c[f>>2]|0;do if(!(a[t+165>>0]|0)){if(a[P>>0]|0)break;u=c[t+312>>2]|0;if(!u)break;q=$a[u&127](c[t+316>>2]|0,23,q,v,r,c[Q>>2]|0)|0;if((q|0)==1){xa=134;break i}if((q|2|0)!=2){xa=136;break i}if((q|0)!=2)break;c[wa+(y<<2)>>2]=-1}while(0);E=E+1|0;if((E|0)>=(c[h>>2]|0)){S=w;N=x;O=z;xa=140;break h}else{B=w;t=x;D=z}}if((xa|0)==98){c[T>>2]=r;cd(q,41637,T)}else if((xa|0)==128){c[U>>2]=x;cd(f,44776,U);a[f+17>>0]=1;xa=918;break}else if((xa|0)==134){cd(f,39216,V);c[f+12>>2]=23;xa=919;break}else if((xa|0)==136){cd(f,39231,S);c[f+12>>2]=1;xa=919;break}xa=919}else{S=0;N=0;O=0;xa=140}while(0);k:do if((xa|0)==140){pa=(N&255)+(O&255)|0;ja=pa&255;M=ya+56|0;oa=((c[M>>2]|0)!=0)<<31>>31;qa=g+64|0;c[qa>>2]=oa;c[qa+4>>2]=((oa|0)<0)<<31>>31;pa=pa&255;l:do if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)ia=0;else{q=c[ya+16>>2]|0;y=c[ya>>2]|0;m:do if(!q)x=0;else{w=ya+40|0;r=(y|0)==0;if(!pa){if(r){u=q;q=0;while(1){if(!(c[u+8>>2]|0)){ia=2;break l}t=c[u+20>>2]|0;n:do if((t|0)>0){r=0;do{if((c[wa+(c[u+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break n}r=r+1|0}while((r|0)<(t|0))}while(0);u=c[u+4>>2]|0;if(!u){x=q;break m}}}v=q;q=0;while(1){t=c[v+8>>2]|0;if(t|0){qa=a[y>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(r|0)!=0)){u=y;do{u=u+1|0;t=t+1|0;qa=a[u>>0]|0;r=(d[208+(qa&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(r|0)!=0))}if(!r){ia=2;break l}}t=c[v+20>>2]|0;o:do if((t|0)>0){r=0;do{if((c[wa+(c[v+36+(r<<3)>>2]<<2)>>2]|0)>-1){q=1;break o}r=r+1|0}while((r|0)<(t|0))}while(0);v=c[v+4>>2]|0;if(!v){x=q;break m}}}if(r){r=0;while(1){if(!(c[q+8>>2]|0)){ia=2;break l}u=c[q+20>>2]|0;p:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break p}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break p}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break m}}}r=0;while(1){u=c[q+8>>2]|0;if(u|0){qa=a[y>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{v=v+1|0;u=u+1|0;qa=a[v>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[u>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t){ia=2;break l}}u=c[q+20>>2]|0;q:do if((u|0)>0){t=0;do{v=c[q+36+(t<<3)>>2]|0;if((c[wa+(v<<2)>>2]|0)>-1){r=1;break q}t=t+1|0;if((v|0)==(b[w>>1]|0)){r=1;break q}}while((t|0)<(u|0))}while(0);q=c[q+4>>2]|0;if(!q){x=r;break}}}while(0);u=c[ua>>2]|0;v=c[u+68>>2]|0;if(!v){r=u+60|0;q=u+64|0}else{r=a[y>>0]|0;if(!(r<<24>>24))q=0;else{q=0;t=y;do{t=t+1|0;q=G(q+(d[208+(r&255)>>0]|0)|0,-1640531535)|0;r=a[t>>0]|0}while(r<<24>>24!=0)}q=(q>>>0)%((c[u+56>>2]|0)>>>0)|0;r=v+(q<<3)|0;q=v+(q<<3)+4|0}r=c[r>>2]|0;r:do if(!r)q=59292;else{w=d[208+(d[y>>0]|0)>>0]|0;while(1){q=c[q>>2]|0;r=r+-1|0;u=c[q+12>>2]|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-w|0;if(!(qa<<24>>24==0|(t|0)!=0)){v=y;do{u=u+1|0;v=v+1|0;qa=a[u>>0]|0;t=(d[208+(qa&255)>>0]|0)-(d[208+(d[v>>0]|0)>>0]|0)|0}while(!(qa<<24>>24==0|(t|0)!=0))}if(!t)break r;if(!r){q=59292;break}}}while(0);q=c[q+8>>2]|0;if(!q){ia=x;break}r=q;q=x;while(1){if(Jm(ya,r,wa,pa)|0)if(!(a[r+26>>0]|0))q=1;else{ia=2;break l}r=c[r+12>>2]|0;if(!r){ia=q;break}}}while(0);if((j|0)==5){c[va>>2]=1;q=1}else q=0;r=c[ba>>2]|0;if(r){J=(pa|0)!=0|(ia|0)>1;z=f+44|0;A=da+20|0;B=da+4|0;C=da+24|0;D=N<<24>>24==0;E=da+20|0;F=da+4|0;H=da+24|0;I=(j|0)==11;y=0;while(1){s:do if(J|(r|0)==(n|0))xa=210;else{t=c[r+36>>2]|0;if(t|0){c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[B>>2]=136;c[C>>2]=wa;_j(da,t)|0;t=a[A>>0]|0;u=t&-3;if(D){a[A>>0]=u;t=u}if(t<<24>>24){xa=210;break}}v=r+50|0;if(!(b[v>>1]|0)){xa=233;break}w=r+4|0;x=r+40|0;t:do if(D){u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=(t&-3)<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}else{u=0;while(1){t=b[(c[w>>2]|0)+(u<<1)>>1]|0;if(t<<16>>16>-1)t=(c[wa+(t<<16>>16<<2)>>2]|0)>>>31^1;else{t=c[(c[x>>2]|0)+4+(u*20|0)>>2]|0;c[da>>2]=0;c[da+4>>2]=0;c[da+8>>2]=0;c[da+12>>2]=0;c[da+16>>2]=0;c[da+20>>2]=0;c[F>>2]=136;c[H>>2]=wa;if(!t)t=0;else{_j(da,t)|0;t=a[E>>0]|0}t=t<<24>>24!=0&1}u=u+1|0;if(t|0)break t;if(u>>>0>=(e[v>>1]|0)>>>0){xa=233;break s}}}while(0);t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);if(!I){xa=231;break}q=(a[r+54>>0]|0)==5?1:q;xa=231}while(0);if((xa|0)==210){t=(c[z>>2]|0)+1|0;c[z>>2]=t+(e[r+52>>1]|0);xa=231}do if((xa|0)==231){xa=0;if(!t){xa=233;break}u=y+1|0}while(0);if((xa|0)==233){xa=0;u=y+1|0;a[ca+u>>0]=0;t=0}c[ra+(y<<2)>>2]=t;r=c[r+20>>2]|0;if(!r)break;else y=u}c[va>>2]=q}if(q|0)gw(ca|0,1,W|0)|0;ma=f+8|0;q=c[ma>>2]|0;if(!q){t=c[f>>2]|0;do if(!(c[f+116>>2]|0)){if(b[t+76>>1]&8)break;a[f+23>>0]=1}while(0);u:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))xa=252;else{xa=918;break k}else{do if((e[t+276>>1]|0)>=224){q=t+300|0;r=c[q>>2]|0;if(r|0){c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}q=t+296|0;r=c[q>>2]|0;if(!r){q=t+292|0;break}else{c[q>>2]=c[r>>2];qa=t+284|0;c[qa>>2]=(c[qa>>2]|0)+1;break u}}else q=t+288|0;while(0);c[q>>2]=(c[q>>2]|0)+1;xa=252}while(0);if((xa|0)==252)r=_d(t,224,0)|0;if(!r){xa=918;break}D=r+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[r>>2]=t;q=t+4|0;t=c[q>>2]|0;if(t|0)c[t+4>>2]=r;c[r+8>>2]=t;c[r+4>>2]=0;c[q>>2]=r;c[r+20>>2]=381479589;c[r+12>>2]=f;c[ma>>2]=r;Di(r,61,0,1,0)|0;la=r}else la=q;ka=f+18|0;if(!(a[ka>>0]|0)){qa=la+149|0;oa=d[qa>>0]|d[qa+1>>0]<<8|32;a[qa>>0]=oa;a[qa+1>>0]=oa>>8}J=(l|0)!=0;T=(ia|0)!=0;z=(J|T)&1;qa=f+116|0;B=c[qa>>2]|0;B=(B|0)==0?f:B;q=B+84|0;r=c[q>>2]|0;A=1<>2]=r|A;if((Z|0)!=1)break;y=c[B>>2]|0;q=y+16|0;if(c[(c[q>>2]|0)+20>>2]|0)break;if(a[B+199>>0]|0)break;r=Pe(c[y>>2]|0,0,y,da,0,542)|0;if(r|0){cd(B,32157,aa);c[B+12>>2]=r;break}oa=c[da>>2]|0;c[(c[q>>2]|0)+20>>2]=oa;q=c[y+92>>2]|0;u=c[oa+4>>2]|0;c[u+4>>2]=c[oa>>2];do if(!(b[u+22>>1]&2)){v=u+32|0;w=u+36|0;x=(c[v>>2]|0)-(c[w>>2]|0)|0;do if((q+-512|0)>>>0<65025){if(q+-1&q|0)break;c[v>>2]=q;t=u+80|0;q=c[t>>2]|0;if(!q)break;r=q+-4|0;c[t>>2]=r;q=r;do if((c[14816]|0)>>>0<=q>>>0)if((c[14817]|0)>>>0>q>>>0){c[14979]=(c[14979]|0)+-1;c[r>>2]=c[14819];c[14819]=r;oa=(c[14820]|0)+1|0;c[14820]=oa;c[14821]=(oa|0)<(c[14815]|0)&1;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274;break}else{q=Wa[c[29352>>2]&127](r)|0;xa=274}while(0);do if((xa|0)==274){c[14980]=(c[14980]|0)-q;if(!(c[7324]|0)){ab[c[29344>>2]&127](r);break}else{oa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-oa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);break}}while(0);c[t>>2]=0}while(0);oa=Se(c[u>>2]|0,v,x)|0;c[w>>2]=(c[v>>2]|0)-(x&65535);if((oa|0)!=7)break;q=y+81|0;do if(!(a[q>>0]|0)){if(a[y+82>>0]|0)break;a[q>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;q=y+272|0;c[q>>2]=(c[q>>2]|0)+1;q=c[y+236>>2]|0;if(!q)break;c[q+12>>2]=7}while(0);break v}while(0)}while(0);oa=B+80|0;c[oa>>2]=c[oa>>2]|A;oa=B+20|0;a[oa>>0]=d[oa>>0]|z;if(!(c[M>>2]|0)){t=f+44|0;u=c[t>>2]|0;w=u+2|0;c[t>>2]=w;if(J|O<<24>>24!=0|T){q=w+(b[ta>>1]|0)|0;c[t>>2]=q;x=u+3|0}else{x=0;q=w}r=q+1|0;if(J|(ia|pa|0)!=0){c[t>>2]=r;y=r;v=q+2|0;q=r}else{y=w;v=r}c[t>>2]=q+(b[ta>>1]|0);F=u+1|0;aa=w;K=x;Q=y}else{F=0;v=0;aa=0;K=0;Q=0}if(sa){oa=f+240|0;na=c[oa>>2]|0;c[oa>>2]=c[ya>>2];Gm(f,ya,i,o);oa=f}else{na=0;oa=0}w:do if(!i)xa=302;else{t=e[X>>1]|0;b[X>>1]=t&28655;q=c[fa>>2]|0;c[da>>2]=q;c[da+4>>2]=125;c[da+8>>2]=126;c[da+12>>2]=0;c[da+24>>2]=fa;u=i+24|0;r=q+208|0;Z=(c[r>>2]|0)+(c[u>>2]|0)|0;c[r>>2]=Z;r=c[(c[q>>2]|0)+120>>2]|0;do if((r|0)>=(Z|0)){_j(da,i)|0;q=c[da>>2]|0;ea=q+208|0;c[ea>>2]=(c[ea>>2]|0)-(c[u>>2]|0);ea=b[X>>1]|0;da=i+4|0;c[da>>2]=c[da>>2]|ea&-32752&65535;b[X>>1]=t&36880|ea&65535;if((c[fa+20>>2]|0)>0)break;if((c[q+36>>2]|0)<1){xa=302;break w}else break w}else{c[ea>>2]=r;cd(q,41637,ea)}while(0)}while(0);x:do if((xa|0)==302){if(c[M>>2]|0){H=c[ma>>2]|0;m=c[f>>2]|0;l=c[ya+64>>2]|0;y:do if(!l)C=0;else while(1){if((c[l>>2]|0)==(m|0)){C=l;break y}l=c[l+24>>2]|0;if(!l){C=0;break}}while(0);y=b[ta>>1]|0;A=(y<<16>>16)+2|0;x=c[Y>>2]|0;F=c[_>>2]|0;c[_>>2]=F+1;D=H+108|0;l=c[D>>2]|0;E=H+112|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;r=c[H+104>>2]|0;a[r+(l*20|0)>>0]=113;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=F;c[r+(l*20|0)+8>>2]=A;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(H,113,F,A,0)|0;B=f+44|0;u=c[B>>2]|0;z=u+1|0;w=u+A|0;v=w+1|0;w=w+2|0;c[B>>2]=w;B=ql(f,g,i,0,0,4,0)|0;if(!B)break;if((b[ta>>1]|0)>0){s=u+3|0;t=H+104|0;q=0;do{l=c[wa+(q<<2)>>2]|0;z:do if((l|0)>-1){l=c[h+4+(l*20|0)>>2]|0;p=q+s|0;do if(l){if((a[l>>0]|0)!=-88){o=Jj(f,l,p)|0;break}o=c[ma>>2]|0;l=c[l+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break z}else{Di(o,78,l,p,0)|0;break z}}else o=Jj(f,0,p)|0;while(0);if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=q+s|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[t>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=q;c[va+(m*20|0)+12>>2]=l;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,q,l)|0;l=c[D>>2]|0;if((l|0)<=0)break;b[(c[t>>2]|0)+((l+-1|0)*20|0)+2>>1]=1}while(0);q=q+1|0}while((q|0)<(b[ta>>1]|0))}do if(!(c[ha>>2]&32)){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=z;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,128,x,z,0)|0;p=u+2|0;if(!S){l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=-128;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=p;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,128,x,p,0)|0;break}}if((a[S>>0]|0)==-88){o=c[ma>>2]|0;l=c[S+28>>2]|0;m=o+108|0;n=c[m>>2]|0;if((c[o+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[o+104>>2]|0;a[va+(n*20|0)>>0]=78;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=l;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(o,78,l,p,0)|0;break}}o=Jj(f,S,p)|0;if((o|0)==(p|0))break;l=c[ma>>2]|0;if(!l)break;m=l+108|0;n=c[m>>2]|0;if((c[l+112>>2]|0)>(n|0)){c[m>>2]=n+1;va=c[l+104>>2]|0;a[va+(n*20|0)>>0]=79;b[va+(n*20|0)+2>>1]=0;c[va+(n*20|0)+4>>2]=o;c[va+(n*20|0)+8>>2]=p;c[va+(n*20|0)+12>>2]=0;c[va+(n*20|0)+16>>2]=0;a[va+(n*20|0)+1>>0]=0;break}else{Di(l,79,o,p,0)|0;break}}else{l=ba;while(1){l=c[l>>2]|0;va=l+55|0;if(((d[va>>0]|d[va+1>>0]<<8)&3)==2)break;else l=l+20|0}l=b[c[l+4>>2]>>1]|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=-92;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=x;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=z;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else Di(H,164,x,l,z)|0;n=u+3+l|0;l=u+2|0;m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;va=c[H+104>>2]|0;a[va+(m*20|0)>>0]=79;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=n;c[va+(m*20|0)+8>>2]=l;c[va+(m*20|0)+12>>2]=0;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0;break}else{Di(H,79,n,l,0)|0;break}}while(0);s=(a[B+49>>0]|0)==0;do if(!s){l=c[H>>2]|0;if(!(a[l+81>>0]|0)){va=c[H+104>>2]|0;ta=va+(r*20|0)+1|0;ua=va+(r*20|0)+16|0;kg(l,a[ta>>0]|0,c[ua>>2]|0);a[ta>>0]=0;c[ua>>2]=0;a[va+(r*20|0)>>0]=-86}l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=117;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=x;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0;break}else{Di(H,117,x,0,0)|0;break}}else{l=c[qa>>2]|0;a[((l|0)==0?f:l)+20>>0]=1;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=92;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=z;c[va+(l*20|0)+8>>2]=A;c[va+(l*20|0)+12>>2]=v;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,92,z,A,v)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=121;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=w;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,121,F,w,0)|0;l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=122;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=v;c[va+(l*20|0)+12>>2]=w;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else Di(H,122,F,v,w)|0;sl(B);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;va=c[H+104>>2]|0;a[va+(l*20|0)>>0]=36;b[va+(l*20|0)+2>>1]=0;c[va+(l*20|0)+4>>2]=F;c[va+(l*20|0)+8>>2]=0;c[va+(l*20|0)+12>>2]=0;c[va+(l*20|0)+16>>2]=0;a[va+(l*20|0)+1>>0]=0}else l=Di(H,36,F,0,0)|0;if(y<<16>>16<=-2){r=l;break}n=H+104|0;m=0;do{o=m+z|0;p=c[D>>2]|0;if((c[E>>2]|0)>(p|0)){c[D>>2]=p+1;va=c[n>>2]|0;a[va+(p*20|0)>>0]=90;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=F;c[va+(p*20|0)+8>>2]=m;c[va+(p*20|0)+12>>2]=o;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else Di(H,90,F,m,o)|0;m=m+1|0}while((m|0)<(A|0));r=l}while(0);q=c[qa>>2]|0;q=(q|0)==0?f:q;p=q+204|0;o=c[p>>2]|0;n=q+252|0;A:do if((o|0)>0){l=c[n>>2]|0;m=0;do{if((c[l+(m<<2)>>2]|0)==(ya|0))break A;m=m+1|0}while((m|0)<(o|0));m=n;xa=387}else{m=n;l=c[n>>2]|0;xa=387}while(0);B:do if((xa|0)==387){do if(!(mb()|0)){xa=(o<<2)+4|0;l=sb(l,xa,((xa|0)<0)<<31>>31)|0;if(!l)break;c[m>>2]=l;xa=c[p>>2]|0;c[p>>2]=xa+1;c[l+(xa<<2)>>2]=ya;break B}while(0);l=c[q>>2]|0;m=l+81|0;if(a[m>>0]|0)break;if(a[l+82>>0]|0)break;a[m>>0]=1;if((c[l+180>>2]|0)>0)c[l+264>>2]=1;ya=l+272|0;c[ya>>2]=(c[ya>>2]|0)+1;l=c[l+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);l=c[D>>2]|0;if((c[E>>2]|0)>(l|0)){c[D>>2]=l+1;ya=c[H+104>>2]|0;a[ya+(l*20|0)>>0]=10;b[ya+(l*20|0)+2>>1]=0;c[ya+(l*20|0)+4>>2]=0;c[ya+(l*20|0)+8>>2]=A;c[ya+(l*20|0)+12>>2]=z;c[ya+(l*20|0)+16>>2]=0;a[ya+(l*20|0)+1>>0]=0}else l=Di(H,10,0,A,z)|0;do if(!(a[(c[H>>2]|0)+81>>0]|0)){if((l|0)<0)l=(c[D>>2]|0)+-1|0;m=c[H+104>>2]|0;n=m+(l*20|0)+1|0;if(a[n>>0]|0){Ei(H,m+(l*20|0)|0,C,-12);break}if(!C)break;c[m+(l*20|0)+16>>2]=C;a[n>>0]=-12;ya=C+12|0;c[ya>>2]=(c[ya>>2]|0)+1}while(0);m=c[D>>2]|0;if((m|0)>0)b[(c[H+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;j=c[qa>>2]|0;a[((j|0)==0?f:j)+21>>0]=1;if(!s){sl(B);break}l=r+1|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=5;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=l;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(H,5,F,l,0)|0;m=c[D>>2]|0;if(!(a[(c[H>>2]|0)+81>>0]|0))l=(c[H+104>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;f=c[H+104>>2]|0;a[f+(m*20|0)>>0]=117;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=F;c[f+(m*20|0)+8>>2]=0;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0;break}else{Di(H,117,F,0,0)|0;break}}H=f+56|0;Z=c[H>>2]|0;I=Z+-1|0;c[H>>2]=I;do if(!(0==0?(c[za+32>>2]&128|0)==0:0)){if(c[f+120>>2]|0){Y=0;break}if(!((k|0)==0&(a[ka>>0]|0)==0)){Y=0;break}r=f+44|0;q=(c[r>>2]|0)+1|0;c[r>>2]=q;r=la+108|0;t=c[r>>2]|0;if((c[la+112>>2]|0)>(t|0)){c[r>>2]=t+1;Y=c[la+104>>2]|0;a[Y+(t*20|0)>>0]=70;b[Y+(t*20|0)+2>>1]=0;c[Y+(t*20|0)+4>>2]=0;c[Y+(t*20|0)+8>>2]=q;c[Y+(t*20|0)+12>>2]=0;c[Y+(t*20|0)+16>>2]=0;a[Y+(t*20|0)+1>>0]=0;Y=q;break}else{Di(la,70,0,q,0)|0;Y=q;break}}else Y=0;while(0);C:do if(!(c[ha>>2]&32)){q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;E=c[la+104>>2]|0;a[E+(r*20|0)>>0]=73;b[E+(r*20|0)+2>>1]=0;c[E+(r*20|0)+4>>2]=0;c[E+(r*20|0)+8>>2]=F;c[E+(r*20|0)+12>>2]=aa;c[E+(r*20|0)+16>>2]=0;a[E+(r*20|0)+1>>0]=0;E=0;C=0;D=0;x=0;X=0;break}else{Di(la,73,0,F,aa)|0;E=0;C=0;D=0;x=0;X=0;break}}else{y=b[n+50>>1]|0;fa=f+44|0;r=c[fa>>2]|0;z=r+1|0;w=y<<16>>16;r=r+w|0;x=r+1|0;c[fa>>2]=x;if(k|0){E=x;C=y;D=z;x=0;X=0;break}A=c[_>>2]|0;c[_>>2]=A+1;t=la+108|0;q=c[t>>2]|0;u=la+112|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=73;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=0;c[fa+(q*20|0)+8>>2]=z;c[fa+(q*20|0)+12>>2]=r;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else Di(la,73,0,z,r)|0;q=c[t>>2]|0;if((c[u>>2]|0)>(q|0)){c[t>>2]=q+1;fa=c[la+104>>2]|0;a[fa+(q*20|0)>>0]=113;b[fa+(q*20|0)+2>>1]=0;c[fa+(q*20|0)+4>>2]=A;c[fa+(q*20|0)+8>>2]=w;c[fa+(q*20|0)+12>>2]=0;c[fa+(q*20|0)+16>>2]=0;a[fa+(q*20|0)+1>>0]=0}else q=Di(la,113,A,w,0)|0;r=c[ma>>2]|0;u=Ij(f,n)|0;if(!u){E=x;C=y;D=z;x=q;X=A;break}t=c[r>>2]|0;if(!(a[t+81>>0]|0)){C=c[r+104>>2]|0;E=(c[r+108>>2]|0)+-1|0;a[C+(E*20|0)+1>>0]=-9;c[C+(E*20|0)+16>>2]=u;E=x;C=y;D=z;x=q;X=A;break}if(c[t+480>>2]|0){E=x;C=y;D=z;x=q;X=A;break}fa=(c[u>>2]|0)+-1|0;c[u>>2]=fa;if(fa|0){E=x;C=y;D=z;x=q;X=A;break}r=c[u+12>>2]|0;do if(r|0){if(c[r+480>>2]|0){Xd(r,u);E=x;C=y;D=z;x=q;X=A;break C}t=u;if((c[r+304>>2]|0)>>>0>t>>>0)break;if((c[r+308>>2]|0)>>>0<=t>>>0)break;E=r+300|0;c[u>>2]=c[E>>2];c[E>>2]=u;E=x;C=y;D=z;x=q;X=A;break C}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}else{E=Wa[c[29352>>2]&127](u)|0;c[14978]=(c[14978]|0)-E;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](u);E=x;C=y;D=z;x=q;X=A;break}}while(0);do if($){Tj(f,i,I,16);W=0;V=1;u=0;w=0}else{q=ql(f,g,i,0,0,(c[va>>2]|0)!=0|(ja<<24>>24!=0|(T|(J|(a[ka>>0]|0)!=0)))?4100:4108,s)|0;if(!q)break x;w=q+24|0;u=c[w>>2]|0;w=c[w+4>>2]|0;r=a[q+49>>0]|0;t=r&255;if(r<<24>>24==1){W=q;V=1;break}fa=c[qa>>2]|0;a[((fa|0)==0?f:fa)+20>>0]=1;if(r<<24>>24!=2){W=q;V=t;break}if((w|0)<0|(o|0)==(w|0)){W=q;V=2;break}W=q;V=(a[ca+(w-ga)>>0]|0)==0?t:0}while(0);do if(!(c[ha>>2]&32)){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-128;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=o;c[ha+(q*20|0)+8>>2]=aa;c[ha+(q*20|0)+12>>2]=0;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else Di(la,128,o,aa,0)|0;if(V|0){M=0;break}q=c[r>>2]|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;M=c[la+104>>2]|0;a[M+(q*20|0)>>0]=-108;b[M+(q*20|0)+2>>1]=0;c[M+(q*20|0)+4>>2]=F;c[M+(q*20|0)+8>>2]=aa;c[M+(q*20|0)+12>>2]=0;c[M+(q*20|0)+16>>2]=0;a[M+(q*20|0)+1>>0]=0;M=0;break}else{Di(la,148,F,aa,0)|0;M=0;break}}else{B=C<<16>>16;if(C<<16>>16>0){r=n+4|0;q=0;do{Vj(la,ya,o,b[(c[r>>2]|0)+(q<<1)>>1]|0,q+D|0);q=q+1|0}while((q|0)!=(B|0))}if(V|0){if(!x){M=B;E=D;break}q=c[la>>2]|0;if(a[q+81>>0]|0){M=B;E=D;break}M=c[la+104>>2]|0;ha=M+(x*20|0)+1|0;E=M+(x*20|0)+16|0;kg(q,a[ha>>0]|0,c[E>>2]|0);a[ha>>0]=0;c[E>>2]=0;a[M+(x*20|0)>>0]=-86;M=B;E=D;break}y=gl(za,n)|0;z=la+108|0;q=c[z>>2]|0;A=la+112|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=92;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=D;c[ha+(q*20|0)+8>>2]=B;c[ha+(q*20|0)+12>>2]=E;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,92,D,B,E)|0;r=c[la>>2]|0;D:do if(!(a[r+81>>0]|0)){if((q|0)<0)q=(c[z>>2]|0)+-1|0;r=c[la+104>>2]|0;t=r+(q*20|0)|0;do if(C<<16>>16<=-1){x=r+(q*20|0)+1|0;if(a[x>>0]|0)break;if(C<<16>>16==-3){c[r+(q*20|0)+16>>2]=y;a[x>>0]=-3;break D}if(!y)break D;c[r+(q*20|0)+16>>2]=y;a[x>>0]=C;if(C<<16>>16!=-12)break D;ha=y+12|0;c[ha>>2]=(c[ha>>2]|0)+1;break D}while(0);Ei(la,t,y,B)}else{if(C<<16>>16==-12)break;kg(r,B,y)}while(0);q=c[z>>2]|0;if((c[A>>2]|0)>(q|0)){c[z>>2]=q+1;ha=c[la+104>>2]|0;a[ha+(q*20|0)>>0]=-124;b[ha+(q*20|0)+2>>1]=0;c[ha+(q*20|0)+4>>2]=X;c[ha+(q*20|0)+8>>2]=E;c[ha+(q*20|0)+12>>2]=D;c[ha+(q*20|0)+16>>2]=0;a[ha+(q*20|0)+1>>0]=0}else q=Di(la,132,X,E,D)|0;if(a[(c[la>>2]|0)+81>>0]|0){M=0;break}M=c[la+104>>2]|0;a[M+(q*20|0)+1>>0]=-3;c[M+(q*20|0)+16>>2]=B;M=0}while(0);U=(k|0)==0;E:do if(U){q=(V|0)==2;if(!q)sl(W);F:do if(sa)xa=511;else{do if(V|0){if((u|0)>-1)a[ca+(u-ga)>>0]=0;if((w|0)>-1)a[ca+(w-ga)>>0]=0;if(!q)break;if(p>>>0<=(w>>>31^1)>>>0)break;r=la+108|0;p=c[r>>2]|0;q=la+112|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;D=c[la+104>>2]|0;a[D+(p*20|0)>>0]=17;D=D+(p*20|0)+1|0;F=D+19|0;do{a[D>>0]=0;D=D+1|0}while((D|0)<(F|0))}else p=Di(la,17,0,0,0)|0;Hm(f,ya,109,0,ga,ca,0,0)|0;if(p|0){t=c[r>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))p=(c[la+104>>2]|0)+(((p|0)<0?t+-1|0:p)*20|0)|0;else p=59308;c[p+8>>2]=t}if((w|0)==(o|0)|(u|0)==(o|0)){xa=521;break F}else{xa=515;break F}}while(0);Hm(f,ya,109,0,ga,ca,0,0)|0;xa=511}while(0);do if((xa|0)==511){if(V|0){if((w|0)==(o|0)|(sa|(u|0)==(o|0))){xa=520;break}r=la+108|0;q=la+112|0;xa=515;break}if(!n){r=la+108|0;q=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(q|0)){c[r>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=41;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=F;c[k+(q*20|0)+8>>2]=I;c[k+(q*20|0)+12>>2]=aa;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0}else q=Di(la,41,F,I,aa)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;R=c[la+104>>2]|0;a[R+(p*20|0)>>0]=31;b[R+(p*20|0)+2>>1]=0;c[R+(p*20|0)+4>>2]=o;c[R+(p*20|0)+8>>2]=q;c[R+(p*20|0)+12>>2]=aa;c[R+(p*20|0)+16>>2]=0;a[R+(p*20|0)+1>>0]=0;R=0;P=q;break E}else{Di(la,31,o,q,aa)|0;R=0;P=q;break E}}u=(c[H>>2]|0)+-1|0;c[H>>2]=u;r=la+108|0;p=c[r>>2]|0;t=la+112|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=36;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=X;c[k+(p*20|0)+8>>2]=I;c[k+(p*20|0)+12>>2]=0;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else Di(la,36,X,I,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;q=c[la+104>>2]|0;a[q+(p*20|0)>>0]=127;b[q+(p*20|0)+2>>1]=0;c[q+(p*20|0)+4>>2]=X;c[q+(p*20|0)+8>>2]=E;c[q+(p*20|0)+12>>2]=0;c[q+(p*20|0)+16>>2]=0;a[q+(p*20|0)+1>>0]=0;q=p}else q=Di(la,127,X,E,0)|0;p=c[r>>2]|0;if((c[t>>2]|0)>(p|0)){c[r>>2]=p+1;k=c[la+104>>2]|0;a[k+(p*20|0)>>0]=28;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=o;c[k+(p*20|0)+8>>2]=u;c[k+(p*20|0)+12>>2]=E;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(la,28,o,u,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){R=q;P=u;break E}R=c[la+104>>2]|0;a[R+(p*20|0)+1>>0]=-3;c[R+(p*20|0)+16>>2]=0;R=q;P=u;break E}while(0);do if((xa|0)==515){p=c[r>>2]|0;if((c[q>>2]|0)>(p|0)){c[r>>2]=p+1;xa=c[la+104>>2]|0;a[xa+(p*20|0)>>0]=28;b[xa+(p*20|0)+2>>1]=0;c[xa+(p*20|0)+4>>2]=o;c[xa+(p*20|0)+8>>2]=I;c[xa+(p*20|0)+12>>2]=E;c[xa+(p*20|0)+16>>2]=0;a[xa+(p*20|0)+1>>0]=0}else p=Di(la,28,o,I,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){xa=520;break}xa=c[la+104>>2]|0;a[xa+(p*20|0)+1>>0]=-3;c[xa+(p*20|0)+16>>2]=M;xa=520}while(0);if((xa|0)==520)if((V|0)==1)t=I;else xa=521;if((xa|0)==521){t=(c[H>>2]|0)+-1|0;c[H>>2]=t}p=(n|0)==0?aa:E;q=la+108|0;r=c[q>>2]|0;if((c[la+112>>2]|0)>(r|0)){c[q>>2]=r+1;R=c[la+104>>2]|0;a[R+(r*20|0)>>0]=50;b[R+(r*20|0)+2>>1]=0;c[R+(r*20|0)+4>>2]=p;c[R+(r*20|0)+8>>2]=I;c[R+(r*20|0)+12>>2]=0;c[R+(r*20|0)+16>>2]=0;a[R+(r*20|0)+1>>0]=0;R=0;P=t;break}else{Di(la,50,p,I,0)|0;R=0;P=t;break}}else{R=0;P=I}while(0);I=N<<24>>24==0;do if(!I){do if(S){if((a[S>>0]|0)!=-88){t=Jj(f,S,Q)|0;xa=551;break}t=c[ma>>2]|0;p=c[S+28>>2]|0;q=t+108|0;r=c[q>>2]|0;if((c[t+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[t+104>>2]|0;a[k+(r*20|0)>>0]=78;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=p;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(t,78,p,Q,0)|0;break}}else{t=Jj(f,0,Q)|0;xa=551}while(0);do if((xa|0)==551){if((t|0)==(Q|0))break;p=c[ma>>2]|0;if(!p)break;q=p+108|0;r=c[q>>2]|0;if((c[p+112>>2]|0)>(r|0)){c[q>>2]=r+1;k=c[p+104>>2]|0;a[k+(r*20|0)>>0]=79;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=t;c[k+(r*20|0)+8>>2]=Q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(p,79,t,Q,0)|0;break}}while(0);p=la+108|0;q=c[p>>2]|0;if((c[la+112>>2]|0)>(q|0)){c[p>>2]=q+1;k=c[la+104>>2]|0;a[k+(q*20|0)>>0]=15;b[k+(q*20|0)+2>>1]=0;c[k+(q*20|0)+4>>2]=Q;c[k+(q*20|0)+8>>2]=0;c[k+(q*20|0)+12>>2]=0;c[k+(q*20|0)+16>>2]=0;a[k+(q*20|0)+1>>0]=0;break}else{Di(la,15,Q,0,0)|0;break}}while(0);G:do if(J|(O<<24>>24!=0|T)){if(T)D=Km(f,ya)|0;else D=0;H=(h|0)==0;J=H?121:122;F=(l|0)==0;H:do if(F)p=0;else{if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&3))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;I:do if(!q)xa=574;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break I;q=c[q+4>>2]|0;if(!q){xa=574;break}}while(0);if((xa|0)==574){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);r=c[r+32>>2]|0;if(!r)break H}}p=0;C=l;do{J:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&3))break;q=c[C+16>>2]|0;K:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break J;A=c[q+4>>2]|0;if((A|0)<=0)break J;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break K;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break J}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;L:do if(!q)xa=595;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break L;q=c[q+4>>2]|0;if(!q){xa=595;break}}while(0);if((xa|0)==595){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+16>>2]|p}while(0);C=c[C+32>>2]|0}while((C|0)!=0)}while(0);q=p|D;M:do if((b[ta>>1]|0)>0){r=ya+4|0;t=la+108|0;u=la+112|0;w=la+104|0;if((q|0)==-1){p=0;while(1){Vj(la,ya,o,p,p+K|0);p=p+1|0;if((p|0)>=(b[ta>>1]|0))break M}}p=0;do{if(p>>>0<32?(1<>2]|0)+(p<<4)+15>>0]&1){xa=606;break}x=p+K|0;y=c[t>>2]|0;if((c[u>>2]|0)>(y|0)){c[t>>2]=y+1;k=c[w>>2]|0;a[k+(y*20|0)>>0]=73;b[k+(y*20|0)+2>>1]=0;c[k+(y*20|0)+4>>2]=0;c[k+(y*20|0)+8>>2]=x;c[k+(y*20|0)+12>>2]=0;c[k+(y*20|0)+16>>2]=0;a[k+(y*20|0)+1>>0]=0;break}else{Di(la,73,0,x,0)|0;break}}while(0);if((xa|0)==606){xa=0;Vj(la,ya,o,p,p+K|0)}p=p+1|0}while((p|0)<(b[ta>>1]|0))}while(0);do if((n|0)==0&I){n=la+108|0;p=c[n>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[n>>2]=p+1;n=c[la+104>>2]|0;a[n+(p*20|0)>>0]=78;b[n+(p*20|0)+2>>1]=0;c[n+(p*20|0)+4>>2]=aa;c[n+(p*20|0)+8>>2]=Q;c[n+(p*20|0)+12>>2]=0;c[n+(p*20|0)+16>>2]=0;a[n+(p*20|0)+1>>0]=0;n=0;break}else{Di(la,78,aa,Q,0)|0;n=0;break}}while(0);if(F){p=0;I=1;break}if(H){p=0;r=l;while(1){do if((J|0)==(d[r+8>>0]|0)){if(!(a[r+9>>0]&1))break;q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;N:do if(!q)xa=626;else while(1){if((c[q>>2]|0)==(r|0)?(c[q+12>>2]|0)==(j|0):0)break N;q=c[q+4>>2]|0;if(!q){xa=626;break}}while(0);if((xa|0)==626){xa=0;q=Nm(f,r,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);r=c[r+32>>2]|0;if(!r){H=1;I=0;break G}}}p=0;C=l;while(1){O:do if((J|0)==(d[C+8>>0]|0)){if(!(a[C+9>>0]&1))break;q=c[C+16>>2]|0;P:do if(q|0){B=c[h>>2]|0;if((B|0)<=0)break O;A=c[q+4>>2]|0;if((A|0)<=0)break O;x=c[q>>2]|0;u=0;while(1){y=c[h+4+(u*20|0)+4>>2]|0;z=d[208+(d[y>>0]|0)>>0]|0;w=0;do{r=c[x+(w<<3)>>2]|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-z|0;if(!(k<<24>>24==0|(q|0)!=0)){t=y;do{r=r+1|0;t=t+1|0;k=a[r>>0]|0;q=(d[208+(k&255)>>0]|0)-(d[208+(d[t>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(q|0)!=0))}if(!q)break P;w=w+1|0}while((w|0)<(A|0));u=u+1|0;if((u|0)>=(B|0))break O}}while(0);q=c[qa>>2]|0;q=c[((q|0)==0?f:q)+260>>2]|0;Q:do if(!q)xa=647;else while(1){if((c[q>>2]|0)==(C|0)?(c[q+12>>2]|0)==(j|0):0)break Q;q=c[q+4>>2]|0;if(!q){xa=647;break}}while(0);if((xa|0)==647){xa=0;q=Nm(f,C,ya,j)|0;if(!q)break}p=c[q+20>>2]|p}while(0);C=c[C+32>>2]|0;if(!C){H=0;I=0;break}}}else{p=0;H=(h|0)==0;I=1}while(0);if((b[ta>>1]|0)>0){z=ya+40|0;A=la+108|0;B=la+112|0;C=la+104|0;m=m&1;y=(m|0)==0;x=0;do{R:do if((x|0)==(b[z>>1]|0)){q=x+v|0;r=c[A>>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break}else{Di(la,73,0,q,0)|0;break}}else{q=c[wa+(x<<2)>>2]|0;if((q|0)<=-1){do if(!(y|x>>>0>31)){if(1<>2]|0;if((c[B>>2]|0)>(r|0)){c[A>>2]=r+1;k=c[C>>2]|0;a[k+(r*20|0)>>0]=73;b[k+(r*20|0)+2>>1]=0;c[k+(r*20|0)+4>>2]=0;c[k+(r*20|0)+8>>2]=q;c[k+(r*20|0)+12>>2]=0;c[k+(r*20|0)+16>>2]=0;a[k+(r*20|0)+1>>0]=0;break R}else{Di(la,73,0,q,0)|0;break R}}while(0);Vj(la,ya,o,x,x+v|0);break}q=c[h+4+(q*20|0)>>2]|0;w=x+v|0;do if(q){if((a[q>>0]|0)!=-88){u=Jj(f,q,w)|0;break}u=c[ma>>2]|0;q=c[q+28>>2]|0;r=u+108|0;t=c[r>>2]|0;if((c[u+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[u+104>>2]|0;a[k+(t*20|0)>>0]=78;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=q;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break R}else{Di(u,78,q,w,0)|0;break R}}else u=Jj(f,0,w)|0;while(0);if((u|0)==(w|0))break;q=c[ma>>2]|0;if(!q)break;r=q+108|0;t=c[r>>2]|0;if((c[q+112>>2]|0)>(t|0)){c[r>>2]=t+1;k=c[q+104>>2]|0;a[k+(t*20|0)>>0]=79;b[k+(t*20|0)+2>>1]=0;c[k+(t*20|0)+4>>2]=u;c[k+(t*20|0)+8>>2]=w;c[k+(t*20|0)+12>>2]=0;c[k+(t*20|0)+16>>2]=0;a[k+(t*20|0)+1>>0]=0;break}else{Di(q,79,u,w,0)|0;break}}while(0);x=x+1|0}while((x|0)<(b[ta>>1]|0))}else m=m&1;do if(m|0){zk(la,ya,v);if(!I){B=f+23|0;C=f+44|0;A=l;do{S:do if((a[A+8>>0]|0)==122){if((a[A+9>>0]|0)!=1)break;m=c[A+16>>2]|0;T:do if(!(H|(m|0)==0)){z=c[h>>2]|0;if((z|0)<=0)break S;y=c[m+4>>2]|0;if((y|0)<=0)break S;u=c[m>>2]|0;r=0;while(1){w=c[h+4+(r*20|0)+4>>2]|0;x=d[208+(d[w>>0]|0)>>0]|0;t=0;do{p=c[u+(t<<3)>>2]|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-x|0;if(!(k<<24>>24==0|(m|0)!=0)){q=w;do{p=p+1|0;q=q+1|0;k=a[p>>0]|0;m=(d[208+(k&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(k<<24>>24==0|(m|0)!=0))}if(!m)break T;t=t+1|0}while((t|0)<(y|0));r=r+1|0;if((r|0)>=(z|0))break S}}while(0);m=c[ma>>2]|0;U:do if(!m){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[B>>0]=1}while(0);V:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=707;else{m=0;break U}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;m=c[p>>2]|0;if(m|0){c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}p=q+296|0;m=c[p>>2]|0;if(!m){m=q+292|0;break}else{c[p>>2]=c[m>>2];k=q+284|0;c[k>>2]=(c[k>>2]|0)+1;break V}}else m=q+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=707}while(0);if((xa|0)==707){xa=0;m=_d(q,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=m;c[m+8>>2]=q;c[m+4>>2]=0;c[p>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;W:do if(!p)xa=717;else while(1){if((c[p>>2]|0)==(A|0)?(c[p+12>>2]|0)==(j|0):0)break W;p=c[p+4>>2]|0;if(!p){xa=717;break}}while(0);if((xa|0)==717){xa=0;p=Nm(f,A,ya,j)|0;if(!p)break}if(!(c[A>>2]|0))w=0;else{w=(c[f>>2]|0)+32|0;w=bw(c[w>>2]|0,c[w+4>>2]|0,13)|0;L()|0;w=w&1^1}q=(c[C>>2]|0)+1|0;c[C>>2]=q;t=c[p+8>>2]|0;u=m+108|0;p=c[u>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[u>>2]=p+1;k=c[m+104>>2]|0;a[k+(p*20|0)>>0]=45;b[k+(p*20|0)+2>>1]=0;c[k+(p*20|0)+4>>2]=aa;c[k+(p*20|0)+8>>2]=P;c[k+(p*20|0)+12>>2]=q;c[k+(p*20|0)+16>>2]=0;a[k+(p*20|0)+1>>0]=0}else p=Di(m,45,aa,P,q)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[u>>2]|0)+-1|0;q=c[m+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(m,q+(p*20|0)|0,t,-4);break}if(!t)break;c[q+(p*20|0)+16>>2]=t;a[r>>0]=-4}while(0);p=c[u>>2]|0;if((p|0)<=0)break;b[(c[m+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=w}while(0);A=c[A+32>>2]|0}while((A|0)!=0)}p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);do if(!n)if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=31;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=aa;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0;break}else{Di(la,31,o,P,aa)|0;break}else{if(q){c[p>>2]=m+1;k=c[la+104>>2]|0;a[k+(m*20|0)>>0]=28;b[k+(m*20|0)+2>>1]=0;c[k+(m*20|0)+4>>2]=o;c[k+(m*20|0)+8>>2]=P;c[k+(m*20|0)+12>>2]=E;c[k+(m*20|0)+16>>2]=0;a[k+(m*20|0)+1>>0]=0}else m=Di(la,28,o,P,E)|0;if(a[(c[la>>2]|0)+81>>0]|0)break;k=c[la+104>>2]|0;a[k+(m*20|0)+1>>0]=-3;c[k+(m*20|0)+16>>2]=M}while(0);m=b[ta>>1]|0;if(m<<16>>16<=0)break;q=ya+40|0;p=0;do{do if((c[wa+(p<<2)>>2]|0)<0){if((p|0)==(b[q>>1]|0))break;Vj(la,ya,o,p,p+v|0);m=b[ta>>1]|0}while(0);p=p+1|0}while((p|0)<(m<<16>>16|0))}while(0);do if(!sa){Tm(f,ya,ra,o,s,Q,aa,ja,j&255,P,va,wa,0);if(T)Lm(f,ya,aa,0,wa,pa);r=(pa|0)==0;t=(c[va>>2]|pa|0)==0;do if(t)q=0;else{p=la+108|0;m=c[p>>2]|0;q=(c[la+112>>2]|0)>(m|0);if(!n)if(q){c[p>>2]=m+1;q=c[la+104>>2]|0;a[q+(m*20|0)>>0]=31;b[q+(m*20|0)+2>>1]=0;c[q+(m*20|0)+4>>2]=o;c[q+(m*20|0)+8>>2]=0;c[q+(m*20|0)+12>>2]=aa;c[q+(m*20|0)+16>>2]=0;a[q+(m*20|0)+1>>0]=0;q=m;break}else{q=Di(la,31,o,0,aa)|0;break}if(q){c[p>>2]=m+1;va=c[la+104>>2]|0;a[va+(m*20|0)>>0]=28;b[va+(m*20|0)+2>>1]=0;c[va+(m*20|0)+4>>2]=o;c[va+(m*20|0)+8>>2]=0;c[va+(m*20|0)+12>>2]=E;c[va+(m*20|0)+16>>2]=0;a[va+(m*20|0)+1>>0]=0}else m=Di(la,28,o,0,E)|0;if(a[(c[la>>2]|0)+81>>0]|0){q=m;break}q=c[la+104>>2]|0;a[q+(m*20|0)+1>>0]=-3;c[q+(m*20|0)+16>>2]=M;q=m}while(0);Mm(f,ya,o,s,ra,-1);do if(!(r&(ia|0)<2)){m=la+108|0;p=c[m>>2]|0;if((c[la+112>>2]|0)>(p|0)){c[m>>2]=p+1;va=c[la+104>>2]|0;a[va+(p*20|0)>>0]=123;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=o;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=0;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0;break}else{Di(la,123,o,0,0)|0;break}}while(0);if(!t){p=c[la+108>>2]|0;if(!(a[(c[la>>2]|0)+81>>0]|0))m=(c[la+104>>2]|0)+(((q|0)<0?p+-1|0:q)*20|0)|0;else m=59308;c[m+8>>2]=p}if(!T){Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);break}Lm(f,ya,0,Q,wa,pa);Um(f,ya,o,s,Q,ra,(V|0)==2?6:4,0,0);if(0==0?(c[(c[f>>2]|0)+32>>2]&16384|0)==0:0)break;t=c[ya>>2]|0;q=c[ua>>2]|0;r=c[q+68>>2]|0;if(!r){o=q+60|0;m=q+64|0}else{o=a[t>>0]|0;if(!(o<<24>>24))m=0;else{m=0;p=t;do{p=p+1|0;m=G(m+(d[208+(o&255)>>0]|0)|0,-1640531535)|0;o=a[p>>0]|0}while(o<<24>>24!=0)}m=(m>>>0)%((c[q+56>>2]|0)>>>0)|0;o=r+(m<<3)|0;m=r+(m<<3)+4|0}o=c[o>>2]|0;X:do if(!o)m=59292;else{s=d[208+(d[t>>0]|0)>>0]|0;while(1){m=c[m>>2]|0;o=o+-1|0;q=c[m+12>>2]|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-s|0;if(!(va<<24>>24==0|(p|0)!=0)){r=t;do{q=q+1|0;r=r+1|0;va=a[q>>0]|0;p=(d[208+(va&255)>>0]|0)-(d[208+(d[r>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(p|0)!=0))}if(!p)break X;if(!o){m=59292;break}}}while(0);m=c[m+8>>2]|0;if(!m)break;v=f+23|0;w=f+44|0;do{do if(Jm(ya,m,wa,pa)|0){r=Rm(f,ya,m,h)|0;if(!r)break;o=c[ma>>2]|0;Y:do if(!o){q=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[q+76>>1]&8)break;a[v>>0]=1}while(0);Z:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))xa=802;else{o=0;break Y}else{do if((e[q+276>>1]|0)>=224){p=q+300|0;o=c[p>>2]|0;if(o|0){c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}p=q+296|0;o=c[p>>2]|0;if(!o){o=q+292|0;break}else{c[p>>2]=c[o>>2];va=q+284|0;c[va>>2]=(c[va>>2]|0)+1;break Z}}else o=q+288|0;while(0);c[o>>2]=(c[o>>2]|0)+1;xa=802}while(0);if((xa|0)==802){xa=0;o=_d(q,224,0)|0}if(!o){o=0;break}D=o+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[o>>2]=q;p=q+4|0;q=c[p>>2]|0;if(q|0)c[q+4>>2]=o;c[o+8>>2]=q;c[o+4>>2]=0;c[p>>2]=o;c[o+20>>2]=381479589;c[o+12>>2]=f;c[ma>>2]=o;Di(o,61,0,1,0)|0}while(0);p=c[qa>>2]|0;p=c[((p|0)==0?f:p)+260>>2]|0;_:do if(!p)xa=812;else while(1){if((c[p>>2]|0)==(r|0)?(c[p+12>>2]|0)==2:0)break _;p=c[p+4>>2]|0;if(!p){xa=812;break}}while(0);if((xa|0)==812){xa=0;p=Nm(f,r,ya,2)|0;if(!p)break}if(!(c[r>>2]|0))u=0;else{u=(c[f>>2]|0)+32|0;u=bw(c[u>>2]|0,c[u+4>>2]|0,13)|0;L()|0;u=u&1^1}q=(c[w>>2]|0)+1|0;c[w>>2]=q;s=c[p+8>>2]|0;t=o+108|0;p=c[t>>2]|0;if((c[o+112>>2]|0)>(p|0)){c[t>>2]=p+1;va=c[o+104>>2]|0;a[va+(p*20|0)>>0]=45;b[va+(p*20|0)+2>>1]=0;c[va+(p*20|0)+4>>2]=aa;c[va+(p*20|0)+8>>2]=0;c[va+(p*20|0)+12>>2]=q;c[va+(p*20|0)+16>>2]=0;a[va+(p*20|0)+1>>0]=0}else p=Di(o,45,aa,0,q)|0;do if(!(a[(c[o>>2]|0)+81>>0]|0)){if((p|0)<0)p=(c[t>>2]|0)+-1|0;q=c[o+104>>2]|0;r=q+(p*20|0)+1|0;if(a[r>>0]|0){Ei(o,q+(p*20|0)|0,s,-4);break}if(!s)break;c[q+(p*20|0)+16>>2]=s;a[r>>0]=-4}while(0);p=c[t>>2]|0;if((p|0)<=0)break;b[(c[o+104>>2]|0)+((p+-1|0)*20|0)+2>>1]=u}while(0);m=c[m+12>>2]|0}while((m|0)!=0)}while(0);z=(Y|0)!=0;do if(z){m=la+108|0;o=c[m>>2]|0;if((c[la+112>>2]|0)>(o|0)){c[m>>2]=o+1;va=c[la+104>>2]|0;a[va+(o*20|0)>>0]=83;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=Y;c[va+(o*20|0)+8>>2]=1;c[va+(o*20|0)+12>>2]=0;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0;break}else{Di(la,83,Y,1,0)|0;break}}while(0);if(!I){x=f+23|0;y=f+44|0;do{$:do if((a[l+8>>0]|0)==122){if((a[l+9>>0]|0)!=2)break;m=c[l+16>>2]|0;aa:do if(!(H|(m|0)==0)){w=c[h>>2]|0;if((w|0)<=0)break $;v=c[m+4>>2]|0;if((v|0)<=0)break $;s=c[m>>2]|0;q=0;while(1){t=c[h+4+(q*20|0)+4>>2]|0;u=d[208+(d[t>>0]|0)>>0]|0;r=0;do{o=c[s+(r<<3)>>2]|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-u|0;if(!(va<<24>>24==0|(m|0)!=0)){p=t;do{o=o+1|0;p=p+1|0;va=a[o>>0]|0;m=(d[208+(va&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(va<<24>>24==0|(m|0)!=0))}if(!m)break aa;r=r+1|0}while((r|0)<(v|0));q=q+1|0;if((q|0)>=(w|0))break $}}while(0);m=c[ma>>2]|0;ba:do if(!m){p=c[f>>2]|0;do if(!(c[qa>>2]|0)){if(b[p+76>>1]&8)break;a[x>>0]=1}while(0);ca:do if(c[p+272>>2]|0)if(!(a[p+81>>0]|0))xa=862;else{m=0;break ba}else{do if((e[p+276>>1]|0)>=224){o=p+300|0;m=c[o>>2]|0;if(m|0){c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}o=p+296|0;m=c[o>>2]|0;if(!m){m=p+292|0;break}else{c[o>>2]=c[m>>2];va=p+284|0;c[va>>2]=(c[va>>2]|0)+1;break ca}}else m=p+288|0;while(0);c[m>>2]=(c[m>>2]|0)+1;xa=862}while(0);if((xa|0)==862){xa=0;m=_d(p,224,0)|0}if(!m){m=0;break}D=m+104|0;F=D+120|0;do{c[D>>2]=0;D=D+4|0}while((D|0)<(F|0));c[m>>2]=p;o=p+4|0;p=c[o>>2]|0;if(p|0)c[p+4>>2]=m;c[m+8>>2]=p;c[m+4>>2]=0;c[o>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ma>>2]=m;Di(m,61,0,1,0)|0}while(0);o=c[qa>>2]|0;o=c[((o|0)==0?f:o)+260>>2]|0;da:do if(!o)xa=872;else while(1){if((c[o>>2]|0)==(l|0)?(c[o+12>>2]|0)==(j|0):0)break da;o=c[o+4>>2]|0;if(!o){xa=872;break}}while(0);if((xa|0)==872){xa=0;o=Nm(f,l,ya,j)|0;if(!o)break}if(!(c[l>>2]|0))t=0;else{t=(c[f>>2]|0)+32|0;t=bw(c[t>>2]|0,c[t+4>>2]|0,13)|0;L()|0;t=t&1^1}p=(c[y>>2]|0)+1|0;c[y>>2]=p;r=c[o+8>>2]|0;s=m+108|0;o=c[s>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[s>>2]=o+1;va=c[m+104>>2]|0;a[va+(o*20|0)>>0]=45;b[va+(o*20|0)+2>>1]=0;c[va+(o*20|0)+4>>2]=aa;c[va+(o*20|0)+8>>2]=P;c[va+(o*20|0)+12>>2]=p;c[va+(o*20|0)+16>>2]=0;a[va+(o*20|0)+1>>0]=0}else o=Di(m,45,aa,P,p)|0;do if(!(a[(c[m>>2]|0)+81>>0]|0)){if((o|0)<0)o=(c[s>>2]|0)+-1|0;p=c[m+104>>2]|0;q=p+(o*20|0)+1|0;if(a[q>>0]|0){Ei(m,p+(o*20|0)|0,r,-4);break}if(!r)break;c[p+(o*20|0)+16>>2]=r;a[q>>0]=-4}while(0);o=c[s>>2]|0;if((o|0)<=0)break;b[(c[m+104>>2]|0)+((o+-1|0)*20|0)+2>>1]=t}while(0);l=c[l+32>>2]|0}while((l|0)!=0)}ea:do switch(V|0){case 1:break;case 2:{m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];sl(W);break}default:{if(!n){l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=P;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,11,0,P,0)|0;break ea}}m=c[la+12>>2]|0;l=~P;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0){mk(m,la,l);l=la+108|0}else{j=la+108|0;c[(c[m+64>>2]|0)+(l<<2)>>2]=c[j>>2];l=j}m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;j=c[la+104>>2]|0;a[j+(m*20|0)>>0]=5;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=X;c[j+(m*20|0)+8>>2]=R;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break ea}else{Di(la,5,X,R,0)|0;break ea}}}while(0);m=c[la+12>>2]|0;l=0-Z|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,la,l);else c[(c[m+64>>2]|0)+(l<<2)>>2]=c[la+108>>2];do if(!(a[ka>>0]|0)){if(!(U&(c[f+120>>2]|0)==0))break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!z)break;l=la+108|0;m=c[l>>2]|0;if((c[la+112>>2]|0)>(m|0)){c[l>>2]=m+1;f=c[la+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=Y;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(la,81,Y,1,0)|0;Wi(la,1);if(a[(c[la>>2]|0)+81>>0]|0)break;yc(c[la+116>>2]|0,44795,-1,1,0)|0}while(0);if(!oa){xa=918;break}c[oa+240>>2]=na;xa=918}while(0);if((xa|0)==918?za|0:0)xa=919;do if((xa|0)==919){if(c[za+480>>2]|0){Xd(za,wa);break a}l=wa;if((c[za+304>>2]|0)>>>0<=l>>>0){if((c[za+308>>2]|0)>>>0<=l>>>0)break;f=za+300|0;c[wa>>2]=c[f>>2];c[f>>2]=wa;break a}}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](wa);break}else{f=Wa[c[29352>>2]&127](wa)|0;c[14978]=(c[14978]|0)-f;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](wa);break}}}}}while(0);qi(za,g);if(h|0)ri(za,h);if(!i){Ra=Aa;return}ni(za,i);Ra=Aa;return}function uj(e,f,g,h){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;u=Ra;Ra=Ra+48|0;k=u;r=u+8|0;t=c[e>>2]|0;if(!f)p=0;else p=c[f>>2]|0;s=(g|0)==0;do if(!(s|(h|0)==0)){l=a[h>>0]|0;o=g+4|0;i=c[o>>2]|0;switch(l<<24>>24){case -125:break;case -88:{j=a[h+38>>0]|0;q=6;break}default:{j=l;q=6}}if((q|0)==6){switch(j<<24>>24){case -87:{j=h+20|0;q=9;break}case -125:{j=c[h+20>>2]|0;q=9;break}default:j=1}if((q|0)==9)j=c[c[j>>2]>>2]|0;if((i|0)!=(j|0)){c[k>>2]=i;c[k+4>>2]=j;cd(e,38869,k);n=f;break}}a:do if((i|0)>0){m=e+272|0;n=h+20|0;j=0;i=l;while(1){switch(i<<24>>24){case -125:{i=ej(e,170,0,0)|0;if(!i)i=0;else{b[i+32>>1]=j;c[i+12>>2]=h}break}case -87:{i=c[(c[n>>2]|0)+4+(j*20|0)>>2]|0;if(!i){l=0;i=0;q=19}else q=18;break}default:{i=h;q=18}}if((q|0)==18){l=i;i=dk(c[e>>2]|0,i,0,0)|0;q=19}b:do if((q|0)==19){q=0;k=c[m>>2]|0;if(k){while(1){if((c[k>>2]|0)==(l|0))break;k=c[k+12>>2]|0;if(!k)break b}c[k>>2]=i}}while(0);f=nj(c[e>>2]|0,f,i)|0;if(f|0){l=(c[g>>2]|0)+(j<<3)|0;c[f+4+(((c[f>>2]|0)+-1|0)*20|0)+4>>2]=c[l>>2];c[l>>2]=0}j=j+1|0;i=c[o>>2]|0;if((j|0)>=(i|0))break a;i=a[h>>0]|0}}while(0);if((a[t+81>>0]|0)==0?(f|0)!=0&(a[h>>0]|0)==-125:0){n=c[f+4+(p*20|0)>>2]|0;c[n+16>>2]=h;c[n+28>>2]=i;h=0;n=f}else n=f}else n=f;while(0);if((d[e+200>>0]|0)>1?(q=r+8|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[r>>2]=e,c[r+4>>2]=124,h|0):0)_j(r,h)|0;if(h|0)ni(t,h);if(s){Ra=u;return n|0}m=g+4|0;h=c[g>>2]|0;c:do if((c[m>>2]|0)>0){f=t+480|0;j=t+304|0;k=t+308|0;l=t+300|0;if(!t){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[g>>2]|0;if((i|0)>=(c[m>>2]|0))break c}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[f>>2]|0){Xd(t,h);break}s=h;if((c[j>>2]|0)>>>0<=s>>>0?(c[k>>2]|0)>>>0>s>>>0:0){c[h>>2]=c[l>>2];c[l>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{s=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[g>>2]|0}while((i|0)<(c[m>>2]|0))}while(0);d:do if(h){do if(t|0){i=t+480|0;if(!(c[i>>2]|0)){f=h;if((c[t+304>>2]|0)>>>0>f>>>0)break;if((c[t+308>>2]|0)>>>0<=f>>>0)break;s=t+300|0;c[h>>2]=c[s>>2];c[s>>2]=h}else Xd(t,h);h=i;q=70;break d}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);q=68;break}else{q=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);q=68;break}}else q=68;while(0);if((q|0)==68)if(t){h=t+480|0;q=70}if((q|0)==70){if(c[h>>2]|0){Xd(t,g);Ra=u;return n|0}s=g;if((c[t+304>>2]|0)>>>0<=s>>>0?(c[t+308>>2]|0)>>>0>s>>>0:0){t=t+300|0;c[g>>2]=c[t>>2];c[t>>2]=g;Ra=u;return n|0}}if(!g){Ra=u;return n|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);Ra=u;return n|0}else{t=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);Ra=u;return n|0}return 0} function vj(f,g,h,i,j,k){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,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,H=0,I=0,J=0,K=0,M=0,N=0,O=0,P=0,Q=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0,Y=0,Z=0,_=0,$=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,Aa=0,Ba=0,Ca=0,Da=0,Ea=0,Fa=0,Ga=0;Ga=Ra;Ra=Ra+336|0;ma=Ga+232|0;ia=Ga+224|0;ga=Ga+216|0;ca=Ga+208|0;aa=Ga+200|0;$=Ga+184|0;X=Ga+176|0;T=Ga+160|0;R=Ga+152|0;Q=Ga+144|0;A=Ga+136|0;x=Ga+128|0;t=Ga+120|0;s=Ga+112|0;q=Ga+104|0;ta=Ga+304|0;ja=Ga+272|0;la=Ga;xa=Ga+268|0;wa=Ga+264|0;U=Ga+240|0;c[xa>>2]=0;c[wa>>2]=0;Fa=c[f>>2]|0;V=f+36|0;do if((c[V>>2]|0)==0?(ba=Fa+81|0,(a[ba>>0]|0)==0):0){na=U+4|0;c[na>>2]=0;if(h)if((c[h+8>>2]&512|0)!=0?(c[h+52>>2]|0)==0:0){Ea=c[h>>2]|0;c[h>>2]=0;pi(Fa,h,1);Da=0}else{Da=h;Ea=0}else{Da=0;Ea=0}h=c[g+8>>2]|0;if(!h)l=g+12|0;else{m=c[(c[f>>2]|0)+16>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0))break;else l=l+1|0;l=m+(l<<4)|0}Ca=bd(f,0,c[g+16>>2]|0,c[l>>2]|0)|0;l=c[f>>2]|0;ha=g+24|0;h=c[ha>>2]|0;do if(h|0){if(l|0?c[l+480>>2]|0:0){Vi(l,h);break}za=h+32|0;Aa=(c[za>>2]|0)+-1|0;c[za>>2]=Aa;if(!Aa)Vi(l,h)}while(0);c[ha>>2]=Ca;a:do if(Ca){Aa=Ca+32|0;c[Aa>>2]=(c[Aa>>2]|0)+1;b:do if(a[g+45>>0]&2){o=c[g+72>>2]|0;l=c[Ca+8>>2]|0;c:do if(l|0){p=d[208+(d[o>>0]|0)>>0]|0;while(1){m=c[l>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-p|0;if(!(Aa<<24>>24==0|(h|0)!=0)){n=o;do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0))}if(!h)break;l=c[l+20>>2]|0;if(!l)break c}c[g+76>>2]=l;break b}while(0);c[q>>2]=o;c[q+4>>2]=0;cd(f,41107,q);a[f+17>>0]=1;l=0;Ba=1038;break a}while(0);ra=Ca+72|0;h=c[ra>>2]|0;m=c[Fa+16>>2]|0;if(!h)W=-1e6;else{l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(h|0)){W=l;break}else l=l+1|0}n=c[Ca>>2]|0;h=c[m+(W<<4)>>2]|0;l=c[f>>2]|0;if(((a[l+165>>0]|0)==0?(a[f+200>>0]|0)==0:0)?(r=c[l+312>>2]|0,(r|0)!=0):0){l=$a[r&127](c[l+316>>2]|0,18,n,0,h,c[f+240>>2]|0)|0;if((l|0)==1){cd(f,39216,s);c[f+12>>2]=23;l=0;Ba=1038;break}if((l|2|0)!=2){cd(f,39231,t);c[f+12>>2]=1;l=0;Ba=1038;break}if(l|0){l=0;Ba=1038;break}l=c[f>>2]|0}S=Ca+36|0;pa=(c[S>>2]|0)>>>5&1;do if(!(0==0?(c[l+32>>2]&262144|0)==0:0)?(u=c[(c[l+16>>2]|0)+28>>2]|0,(a[f+146>>0]|0)==0):0){r=c[ra>>2]|0;if((r|0)!=(u|0)?(v=c[u+48>>2]|0,(v|0)!=0):0){q=Ca+68|0;p=v;l=0;do{o=c[p+8>>2]|0;do if((c[o+24>>2]|0)==(r|0)){m=c[o+4>>2]|0;n=c[Ca>>2]|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(!(Aa<<24>>24==0|(h|0)!=0))do{m=m+1|0;n=n+1|0;Aa=a[m>>0]|0;h=(d[208+(Aa&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(Aa<<24>>24==0|(h|0)!=0));if(h|0)break;if(!l)l=c[q>>2]|0;c[o+32>>2]=l;l=o}while(0);p=c[p>>2]|0}while((p|0)!=0);if(!l)Ba=56}else Ba=56;if((Ba|0)==56){l=c[Ca+68>>2]|0;if(!l){Ba=62;break}}h=0;m=l;do{if((a[m+8>>0]|0)==120)h=h|d[m+9>>0];m=c[m+32>>2]|0}while((m|0)!=0);if(h)t=l;else Ba=62}else Ba=62;while(0);if((Ba|0)==62){h=0;t=0}oa=(c[Ca+12>>2]|0)!=0;if((Sk(f,Ca)|0)==0?(Fm(f,Ca,h)|0)==0:0){ya=f+8|0;l=c[ya>>2]|0;if(!l){n=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[n+76>>1]&8)==0:0)a[f+23>>0]=1;d:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=79;else{l=0;Ba=1038;break a}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];Aa=n+284|0;c[Aa>>2]=(c[Aa>>2]|0)+1;break d}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=79}while(0);if((Ba|0)==79)m=_d(n,224,0)|0;if(!m){l=0;Ba=1038;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;Aa=m}else Aa=l;za=f+18|0;if(!(a[za>>0]|0)){va=Aa+149|0;ua=d[va>>0]|d[va+1>>0]<<8|32;a[va>>0]=ua;a[va+1>>0]=ua>>8}va=(Da|0)!=0;sa=(t|0)!=0;s=(va|sa)&1;ua=f+116|0;v=c[ua>>2]|0;v=(v|0)==0?f:v;l=v+84|0;m=c[l>>2]|0;u=1<>2]=m|u,(W|0)==1):0)?(y=c[v>>2]|0,w=y+16|0,(c[(c[w>>2]|0)+20>>2]|0)==0):0){if(a[v+199>>0]|0)break;l=Pe(c[y>>2]|0,0,y,ta,0,542)|0;if(l|0){cd(v,32157,x);c[v+12>>2]=l;break}qa=c[ta>>2]|0;c[(c[w>>2]|0)+20>>2]=qa;l=c[y+92>>2]|0;o=c[qa+4>>2]|0;c[o+4>>2]=c[qa>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;qa=(c[14820]|0)+1|0;c[14820]=qa;c[14821]=(qa|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=101}while(0);do if((Ba|0)==101){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{qa=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-qa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);qa=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((qa|0)!=7)break;l=y+81|0;do if(!(a[l>>0]|0)){if(a[y+82>>0]|0)break;a[l>>0]=1;if((c[y+180>>2]|0)>0)c[y+264>>2]=1;l=y+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[y+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break e}while(0)}while(0);qa=v+80|0;c[qa>>2]=c[qa>>2]|u;qa=v+20|0;a[qa>>0]=d[qa>>0]|s;qa=(i|0)==0;f:do if(qa?(P=c[f>>2]|0,(Da|0)!=0):0){if(c[f+264>>2]|0){Ba=424;break}if(c[Da+64>>2]|0){Ba=424;break}w=P+16|0;u=c[w>>2]|0;l=c[u+28>>2]|0;if(!(a[f+146>>0]|0)){s=c[ra>>2]|0;do if((s|0)!=(l|0)){l=c[l+48>>2]|0;if(!l)break;r=Ca+68|0;m=0;do{q=c[l+8>>2]|0;do if((c[q+24>>2]|0)==(s|0)){o=c[q+4>>2]|0;p=c[Ca>>2]|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0;if(!(ka<<24>>24==0|(n|0)!=0))do{o=o+1|0;p=p+1|0;ka=a[o>>0]|0;n=(d[208+(ka&255)>>0]|0)-(d[208+(d[p>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(n|0)!=0));if(n|0)break;if(!m)m=c[r>>2]|0;c[q+32>>2]=m;m=q}while(0);l=c[l>>2]|0}while((l|0)!=0);if(m|0){Ba=424;break f}}while(0);if(c[Ca+68>>2]|0){Ba=424;break}}if(c[Ca+56>>2]|0){Ba=424;break}do if((j|0)==11){if((b[Ca+40>>1]|0)>-1?(z=a[Ca+48>>0]|0,z<<24>>24!=11):0){I=z&255;break}I=2}else I=j;while(0);n=c[Da+32>>2]|0;if((c[n>>2]|0)!=1){Ba=424;break}if(c[n+28>>2]|0){Ba=424;break}if(c[Da+36>>2]|0){Ba=424;break}if(c[Da+48>>2]|0){Ba=424;break}if(c[Da+40>>2]|0){Ba=424;break}if(c[Da+60>>2]|0){Ba=424;break}if(c[Da+52>>2]|0){Ba=424;break}if(c[Da+8>>2]&1|0){Ba=424;break}l=c[Da>>2]|0;if((c[l>>2]|0)!=1){Ba=424;break}if((a[c[l+4>>2]>>0]|0)!=-84){Ba=424;break}m=c[n+8>>2]|0;if(!m)l=n+12|0;else{l=0;while(1)if((c[u+(l<<4)+12>>2]|0)==(m|0))break;else l=l+1|0;l=u+(l<<4)|0}K=bd(f,0,c[n+16>>2]|0,c[l>>2]|0)|0;if(!K){Ba=424;break}x=K+28|0;y=Ca+28|0;if((c[x>>2]|0)==(c[y>>2]|0)?(c[K+72>>2]|0)==(c[ra>>2]|0):0){Ba=424;break}O=K+36|0;if((c[O>>2]^c[S>>2])&32|0){Ba=424;break}if(c[K+56>>2]|0){Ba=424;break}if(c[K+12>>2]|0){Ba=424;break}l=b[Ca+42>>1]|0;if(l<<16>>16!=(b[K+42>>1]|0)){Ba=424;break}B=Ca+40|0;if((b[B>>1]|0)!=(b[K+40>>1]|0)){Ba=424;break}r=l<<16>>16;if(l<<16>>16>0){p=c[Ca+4>>2]|0;q=c[K+4>>2]|0;o=0;do{if((a[p+(o<<4)+13>>0]|0)!=(a[q+(o<<4)+13>>0]|0)){Ba=424;break f}m=c[p+(o<<4)+8>>2]|0;n=c[q+(o<<4)+8>>2]|0;do if(!m)l=((n|0)!=0)<<31>>31;else{if(!n){Ba=424;break f}ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0;if(ka<<24>>24==0|(l|0)!=0)break;do{m=m+1|0;n=n+1|0;ka=a[m>>0]|0;l=(d[208+(ka&255)>>0]|0)-(d[208+(d[n>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(l|0)!=0))}while(0);if(l|0){Ba=424;break f}if(a[p+(o<<4)+12>>0]|0?(a[q+(o<<4)+12>>0]|0)==0:0){Ba=424;break f}do if(o|0){l=c[p+(o<<4)+4>>2]|0;m=(l|0)==0;n=c[q+(o<<4)+4>>2]|0;if(m^(n|0)==0){Ba=424;break f}if(m)break;if(Bu(c[l+8>>2]|0,c[n+8>>2]|0)|0){Ba=424;break f}}while(0);o=o+1|0}while((o|0)<(r|0))}H=Ca+8|0;l=c[H>>2]|0;if(!l)v=0;else{o=K+8|0;p=K+72|0;m=0;while(1){m=(a[l+54>>0]|0)==0?m:1;n=c[o>>2]|0;if(!n){Ba=424;break f}while(1){if(Xm(l,n)|0)break;n=c[n+20>>2]|0;if(!n){Ba=424;break f}}do if((c[n+44>>2]|0)==(c[l+44>>2]|0)){if((c[p>>2]|0)!=(c[ra>>2]|0))break;n=c[7389]|0;if(!n){Ba=424;break f}if(!(Wa[n&127](411)|0)){Ba=424;break f}}while(0);l=c[l+20>>2]|0;if(!l){v=m;break}}}m=c[Ca+24>>2]|0;do if(m|0){n=c[K+24>>2]|0;if(!n){Ba=424;break f}l=c[n>>2]|0;if((l|0)!=(c[m>>2]|0)){Ba=424;break f}if((l|0)<=0)break;l=0;do{if((a[n+4+(l*20|0)+12>>0]|0)!=(a[m+4+(l*20|0)+12>>0]|0)){Ba=424;break f}if(bk(0,c[n+4+(l*20|0)>>2]|0,c[m+4+(l*20|0)>>2]|0,-1)|0){Ba=424;break f}l=l+1|0}while((l|0)<(c[n>>2]|0))}while(0);l=c[P+32>>2]|0;if((l&16384|0)==0&0==0){if(!((l&128|0)==0&0==0)){Ba=424;break}}else if(!((l&128|0)==0&0==0&(c[Ca+16>>2]|0)==0)){Ba=424;break}n=c[K+72>>2]|0;if(!n)N=-1e6;else{m=c[w>>2]|0;l=0;while(1)if((c[m+(l<<4)+12>>2]|0)==(n|0)){N=l;break}else l=l+1|0}l=c[ya>>2]|0;g:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);h:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=217;else{M=0;break g}else{do if((e[n+276>>1]|0)>=224){l=n+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}l=n+296|0;m=c[l>>2]|0;if(!m){l=n+292|0;break}else{c[l>>2]=c[m>>2];ka=n+284|0;c[ka>>2]=(c[ka>>2]|0)+1;break h}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=217}while(0);if((Ba|0)==217)m=_d(n,224,0)|0;if(!m){M=0;break}p=m+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[m>>2]=n;l=n+4|0;n=c[l>>2]|0;if(n|0)c[n+4>>2]=m;c[m+8>>2]=n;c[m+4>>2]=0;c[l>>2]=m;c[m+20>>2]=381479589;c[m+12>>2]=f;c[ya>>2]=m;Di(m,61,0,1,0)|0;M=m}else M=l;while(0);o=c[ua>>2]|0;o=(o|0)==0?f:o;l=o+84|0;m=c[l>>2]|0;n=1<>2]=m|n;if((N|0)!=1)break;s=c[o>>2]|0;l=s+16|0;if(c[(c[l>>2]|0)+20>>2]|0)break;if(a[o+199>>0]|0)break;m=Pe(c[s>>2]|0,0,s,ta,0,542)|0;if(m|0){cd(o,32157,A);c[o+12>>2]=m;break}ka=c[ta>>2]|0;c[(c[l>>2]|0)+20>>2]=ka;l=c[s+92>>2]|0;o=c[ka+4>>2]|0;c[o+4>>2]=c[ka>>2];do if(!(b[o+22>>1]&2)){p=o+32|0;q=o+36|0;r=(c[p>>2]|0)-(c[q>>2]|0)|0;do if((l+-512|0)>>>0<65025){if(l+-1&l|0)break;c[p>>2]=l;n=o+80|0;l=c[n>>2]|0;if(!l)break;m=l+-4|0;c[n>>2]=m;l=m;do if((c[14816]|0)>>>0<=l>>>0)if((c[14817]|0)>>>0>l>>>0){c[14979]=(c[14979]|0)+-1;c[m>>2]=c[14819];c[14819]=m;ka=(c[14820]|0)+1|0;c[14820]=ka;c[14821]=(ka|0)<(c[14815]|0)&1;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237;break}else{l=Wa[c[29352>>2]&127](m)|0;Ba=237}while(0);do if((Ba|0)==237){c[14980]=(c[14980]|0)-l;if(!(c[7324]|0)){ab[c[29344>>2]&127](m);break}else{ka=Wa[c[29352>>2]&127](m)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](m);break}}while(0);c[n>>2]=0}while(0);ka=Se(c[o>>2]|0,p,r)|0;c[q>>2]=(c[p>>2]|0)-(r&65535);if((ka|0)!=7)break;l=s+81|0;do if(!(a[l>>0]|0)){if(a[s+82>>0]|0)break;a[l>>0]=1;if((c[s+180>>2]|0)>0)c[s+264>>2]=1;l=s+272|0;c[l>>2]=(c[l>>2]|0)+1;l=c[s+236>>2]|0;if(!l)break;c[l+12>>2]=7}while(0);break i}while(0)}while(0);u=f+40|0;E=c[u>>2]|0;J=E+1|0;c[u>>2]=E+2;u=Wm(f,W,Ca)|0;F=f+19|0;l=a[F>>0]|0;do if(l<<24>>24){ka=l+-1<<24>>24;a[F>>0]=ka;m=c[f+148+((ka&255)<<2)>>2]|0;if(!(ka<<24>>24)){n=f+44|0;l=n;n=c[n>>2]|0;Ba=254;break}else{C=l+-2<<24>>24;a[F>>0]=C;D=m;C=c[f+148+((C&255)<<2)>>2]|0;break}}else{l=f+44|0;n=(c[l>>2]|0)+1|0;c[l>>2]=n;m=n;Ba=254}while(0);if((Ba|0)==254){C=n+1|0;c[l>>2]=C;D=m}Gj(f,J,W,Ca,109);A=P+24|0;do if(!(c[A>>2]&4)){if((b[B>>1]|0)<0){if(!((I+-1|0)>>>0>1|((v|0)!=0|(c[H>>2]|0)!=0))){z=0;break}}else if(!((I+-1|0)>>>0>1|(v|0)!=0)){z=0;break}o=M+108|0;l=c[o>>2]|0;m=M+112|0;if((c[m>>2]|0)>(l|0)){c[o>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=36;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,36,J,0,0)|0;n=c[o>>2]|0;if((c[m>>2]|0)>(n|0)){c[o>>2]=n+1;p=c[M+104>>2]|0;a[p+(n*20|0)>>0]=11;p=p+(n*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else n=Di(M,11,0,0,0)|0;m=c[o>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((l|0)<0?m+-1|0:l)*20|0)|0;else l=59308;c[l+8>>2]=m;z=n}else z=0;while(0);do if(!(c[O>>2]&32)){Gj(f,E,N,K,108);r=M+108|0;l=c[r>>2]|0;s=M+112|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;q=c[M+104>>2]|0;a[q+(l*20|0)>>0]=36;b[q+(l*20|0)+2>>1]=0;c[q+(l*20|0)+4>>2]=E;c[q+(l*20|0)+8>>2]=0;c[q+(l*20|0)+12>>2]=0;c[q+(l*20|0)+16>>2]=0;a[q+(l*20|0)+1>>0]=0;q=l}else q=Di(M,36,E,0,0)|0;j:do if((b[B>>1]|0)>-1){l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else l=Di(M,128,E,C,0)|0;m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=31;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=C;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=m}else p=Di(M,31,J,0,C)|0;m=b[B>>1]|0;o=c[f>>2]|0;n=c[Ca>>2]|0;if(m<<16>>16>-1){m=c[(c[Ca+4>>2]|0)+(m<<16>>16<<4)>>2]|0;c[Q>>2]=n;c[Q+4>>2]=m;n=1555;m=dd(o,40358,Q)|0}else{c[R>>2]=n;n=2579;m=dd(o,44808,R)|0}Uj(f,n,I,m,-7,2);n=c[r>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))m=(c[M+104>>2]|0)+(((p|0)<0?n+-1|0:p)*20|0)|0;else m=59308;c[m+8>>2]=n;if((u|0)<=0)break;m=c[ya>>2]|0;n=m+108|0;o=c[n>>2]|0;if((c[m+112>>2]|0)>(o|0)){c[n>>2]=o+1;ka=c[m+104>>2]|0;a[ka+(o*20|0)>>0]=-105;b[ka+(o*20|0)+2>>1]=0;c[ka+(o*20|0)+4>>2]=u;c[ka+(o*20|0)+8>>2]=C;c[ka+(o*20|0)+12>>2]=0;c[ka+(o*20|0)+16>>2]=0;a[ka+(o*20|0)+1>>0]=0;break}else{Di(m,151,u,C,0)|0;break}}else{do if(!(c[H>>2]|0)){if(c[A>>2]&8|0)break;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=121;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break j}else{l=Di(M,121,J,C,0)|0;break j}}while(0);l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=-128;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=C;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;break}else{l=Di(M,128,E,C,0)|0;break}}while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=127;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=1;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;p=c[M+104>>2]|0;a[p+(m*20|0)>>0]=-126;b[p+(m*20|0)+2>>1]=0;c[p+(m*20|0)+4>>2]=J;c[p+(m*20|0)+8>>2]=0;c[p+(m*20|0)+12>>2]=0;c[p+(m*20|0)+16>>2]=0;a[p+(m*20|0)+1>>0]=0;p=57;break}else{Di(M,130,J,0,0)|0;p=57;break}}else p=41;while(0);m=c[r>>2]|0;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=122;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=C;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else m=Di(M,122,J,D,C)|0;do if(!(a[(c[M>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;n=c[M+104>>2]|0;o=n+(m*20|0)+1|0;if(!(a[o>>0]|0)){c[n+(m*20|0)+16>>2]=Ca;a[o>>0]=-6;break}else{Ei(M,n+(m*20|0)|0,Ca,-6);break}}while(0);m=c[r>>2]|0;if((m|0)>0)b[(c[M+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=p;if((c[s>>2]|0)>(m|0)){c[r>>2]=m+1;ka=c[M+104>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;ka=c[M+104>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[r>>2]|0;if((c[s>>2]|0)>(l|0)){c[r>>2]=l+1;y=c[M+104>>2]|0;a[y+(l*20|0)>>0]=117;b[y+(l*20|0)+2>>1]=0;c[y+(l*20|0)+4>>2]=J;c[y+(l*20|0)+8>>2]=0;c[y+(l*20|0)+12>>2]=0;c[y+(l*20|0)+16>>2]=0;a[y+(l*20|0)+1>>0]=0;y=q;break}else{Di(M,117,J,0,0)|0;y=q;break}}else{Hj(f,W,c[y>>2]|0,1,c[Ca>>2]|0);Hj(f,N,c[x>>2]|0,0,c[K>>2]|0);y=0}while(0);l=c[H>>2]|0;if(l|0){u=K+8|0;v=M+108|0;w=M+112|0;x=M+104|0;s=l;do{l=u;while(1){o=c[l>>2]|0;if(!(Xm(s,o)|0))l=o+20|0;else break}l=c[o+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=108;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=N;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,108,E,l,N)|0;l=c[ya>>2]|0;n=Ij(f,o)|0;k:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break k}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break k}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[s+44>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=109;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=W;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,109,J,l,W)|0;l=c[ya>>2]|0;n=Ij(f,s)|0;l:do if(n|0){m=c[l>>2]|0;if(!(a[m+81>>0]|0)){fa=c[l+104>>2]|0;ka=(c[l+108>>2]|0)+-1|0;a[fa+(ka*20|0)+1>>0]=-9;c[fa+(ka*20|0)+16>>2]=n;break}if(c[m+480>>2]|0)break;ka=(c[n>>2]|0)+-1|0;c[n>>2]=ka;if(ka|0)break;l=c[n+12>>2]|0;do if(l|0){if(c[l+480>>2]|0){Xd(l,n);break l}m=n;if((c[l+304>>2]|0)>>>0>m>>>0)break;if((c[l+308>>2]|0)>>>0<=m>>>0)break;ka=l+300|0;c[n>>2]=c[ka>>2];c[ka>>2]=n;break l}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](n);break}else{ka=Wa[c[29352>>2]&127](n)|0;c[14978]=(c[14978]|0)-ka;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](n);break}}while(0);l=c[v>>2]|0;if((l|0)>0)b[(c[x>>2]|0)+((l+-1|0)*20|0)+2>>1]=1;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;r=c[x>>2]|0;a[r+(l*20|0)>>0]=36;b[r+(l*20|0)+2>>1]=0;c[r+(l*20|0)+4>>2]=E;c[r+(l*20|0)+8>>2]=0;c[r+(l*20|0)+12>>2]=0;c[r+(l*20|0)+16>>2]=0;a[r+(l*20|0)+1>>0]=0;r=l}else r=Di(M,36,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=127;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=E;c[ka+(l*20|0)+8>>2]=D;c[ka+(l*20|0)+12>>2]=1;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,127,E,D,1)|0;do if(c[A>>2]&4){ka=b[o+52>>1]|0;q=ka&65535;m:do if(!(ka<<16>>16))l=0;else{p=c[o+32>>2]|0;l=0;do{m=c[p+(l<<2)>>2]|0;if(!m)break m;if((a[m>>0]|32)<<24>>24!=98)break m;n=34049;do{n=n+1|0;m=m+1|0;ka=a[n>>0]|0;o=(d[208+(ka&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(ka<<24>>24==0|(o|0)!=0));if(o|0)break m;l=l+1|0}while(l>>>0>>0)}while(0);if((l|0)!=(q|0)){l=0;break}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=-126;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0;l=16;break}else{Di(M,130,J,0,0)|0;l=16;break}}else l=0;while(0);if(c[O>>2]&32){ka=s+55|0;l=l|((d[ka>>0]|d[ka+1>>0]<<8)&3)==2}m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=-124;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=J;c[ka+(m*20|0)+8>>2]=D;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,132,J,D,0)|0;m=c[v>>2]|0;if((m|0)>0)b[(c[x>>2]|0)+((m+-1|0)*20|0)+2>>1]=(l|8)&255;l=r+1|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=5;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=l;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,5,E,l,0)|0;m=c[v>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[x>>2]|0)+(((r|0)<0?m+-1|0:r)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;ka=c[x>>2]|0;a[ka+(m*20|0)>>0]=117;b[ka+(m*20|0)+2>>1]=0;c[ka+(m*20|0)+4>>2]=E;c[ka+(m*20|0)+8>>2]=0;c[ka+(m*20|0)+12>>2]=0;c[ka+(m*20|0)+16>>2]=0;a[ka+(m*20|0)+1>>0]=0}else Di(M,117,E,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;ka=c[x>>2]|0;a[ka+(l*20|0)>>0]=117;b[ka+(l*20|0)+2>>1]=0;c[ka+(l*20|0)+4>>2]=J;c[ka+(l*20|0)+8>>2]=0;c[ka+(l*20|0)+12>>2]=0;c[ka+(l*20|0)+16>>2]=0;a[ka+(l*20|0)+1>>0]=0}else Di(M,117,J,0,0)|0;s=c[s+20>>2]|0}while((s|0)!=0)}if(y|0){m=c[M+108>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((y|0)<0?m+-1|0:y)*20|0)|0;else l=59308;c[l+8>>2]=m}do if(C|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=C}while(0);do if(D|0){l=a[F>>0]|0;if((l&255)>=8)break;a[F>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=D}while(0);if(!z){n=0;l=0;break}if(c[f+112>>2]|0)Sm(f);n=M+108|0;l=c[n>>2]|0;o=M+112|0;if((c[o>>2]|0)>(l|0)){c[n>>2]=l+1;p=c[M+104>>2]|0;a[p+(l*20|0)>>0]=69;p=p+(l*20|0)+1|0;q=p+19|0;do{a[p>>0]=0;p=p+1|0}while((p|0)<(q|0))}else Di(M,69,0,0,0)|0;m=c[n>>2]|0;if(!(a[(c[M>>2]|0)+81>>0]|0))l=(c[M+104>>2]|0)+(((z|0)<0?m+-1|0:z)*20|0)|0;else l=59308;c[l+8>>2]=m;if((c[o>>2]|0)>(m|0)){c[n>>2]=m+1;Ba=c[M+104>>2]|0;a[Ba+(m*20|0)>>0]=117;b[Ba+(m*20|0)+2>>1]=0;c[Ba+(m*20|0)+4>>2]=J;c[Ba+(m*20|0)+8>>2]=0;c[Ba+(m*20|0)+12>>2]=0;c[Ba+(m*20|0)+16>>2]=0;a[Ba+(m*20|0)+1>>0]=0;Ba=424;break}else{Di(M,117,J,0,0)|0;Ba=424;break}}else Ba=424;while(0);do if((Ba|0)==424){F=Wm(f,W,Ca)|0;ka=f+44|0;fa=c[ka>>2]|0;da=fa+1|0;ea=Ca+42|0;n=b[ea>>1]|0;D=n<<16>>16;E=da+D|0;c[ka>>2]=E;Z=Ca+56|0;_=(c[Z>>2]|0)==0;E=E+((_^1)&1)|0;c[ka>>2]=E;fa=_?da:fa+2|0;_=fa+1|0;m=((c[S>>2]|0)>>>7&1^1)&255;Y=(i|0)!=0;n:do if(Y){B=c[i+4>>2]|0;if((B|0)<=0){z=-1;break}C=c[i>>2]|0;l=0;do{c[C+(l<<3)+4>>2]=-1;l=l+1|0}while((l|0)!=(B|0));x=n<<16>>16>0;y=Ca+4|0;z=Ca+40|0;A=(pa|0)!=0;n=-1;w=0;while(1){v=c[C+(w<<3)>>2]|0;o:do if(x){r=c[y>>2]|0;s=a[v>>0]|0;u=a[208+(s&255)>>0]|0;p:do if(!(s<<24>>24)){l=0;do{if(u<<24>>24==(a[208+(d[c[r+(l<<4)>>2]>>0]|0)>>0]|0))break p;l=l+1|0}while((l|0)<(D|0));o=u&255;l=o+-95|0;p=1;Ba=446;break o}else{l=0;while(1){o=c[r+(l<<4)>>2]|0;if(u<<24>>24==(a[208+(d[o>>0]|0)>>0]|0)){p=v;do{p=p+1|0;o=o+1|0;S=a[p>>0]|0;q=(d[208+(S&255)>>0]|0)-(d[208+(d[o>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(q|0)!=0));if(!q)break p}l=l+1|0;if((l|0)>=(D|0)){l=u;m=s;Ba=443;break o}}}while(0);c[C+(w<<3)+4>>2]=l;n=(l|0)==(b[z>>1]|0)?w:n;m=(w|0)==(l|0)?m:0}else{m=a[v>>0]|0;l=a[208+(m&255)>>0]|0;Ba=443}while(0);do if((Ba|0)==443){o=l&255;l=o+-95|0;p=m<<24>>24==0;if(p|(l|0)!=0){Ba=446;break}m=58070;n=v;do{n=n+1|0;m=m+1|0;Ba=a[n>>0]|0;l=(d[208+(Ba&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(Ba<<24>>24==0|(l|0)!=0));Ba=446}while(0);if((Ba|0)==446){Ba=0;do if(!l)l=1;else{l=o+-114|0;if(!(p|(l|0)!=0)){m=40352;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}if(!l){l=1;break}l=o+-111|0;if(!(p|(l|0)!=0)){m=58078;n=v;do{n=n+1|0;m=m+1|0;S=a[n>>0]|0;l=(d[208+(S&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(S<<24>>24==0|(l|0)!=0))}l=(l|0)==0&1}while(0);if(A|(l|0)==0)break;else{n=w;m=0}}w=w+1|0;if((w|0)>=(B|0)){z=n;break n}}c[T>>2]=g;c[T+4>>2]=0;c[T+8>>2]=v;cd(f,44817,T);a[f+17>>0]=1;l=0;Ba=1038;break a}else z=-1;while(0);q:do if(va){n=E+1|0;c[ka>>2]=n;v=Aa+108|0;o=c[v>>2]|0;l=o+1|0;w=Aa+112|0;if((c[w>>2]|0)>(o|0)){c[v>>2]=l;X=c[Aa+104>>2]|0;a[X+(o*20|0)>>0]=13;b[X+(o*20|0)+2>>1]=0;c[X+(o*20|0)+4>>2]=n;c[X+(o*20|0)+8>>2]=0;c[X+(o*20|0)+12>>2]=l;c[X+(o*20|0)+16>>2]=0;a[X+(o*20|0)+1>>0]=0}else Di(Aa,13,n,0,l)|0;a[U>>0]=13;c[na>>2]=n;c[U+16>>2]=0;x=U+8|0;c[x>>2]=m<<24>>24==0?0:_;c[U+12>>2]=b[ea>>1];X=kj(f,Da,U)|0;x=c[x>>2]|0;if(X|0){l=0;Ba=1038;break a}if(a[ba>>0]|0){l=0;Ba=1038;break a}if(c[V>>2]|0){l=0;Ba=1038;break a}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=67;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=n;c[X+(l*20|0)+8>>2]=0;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,67,n,0,0)|0;m=c[Aa+12>>2]|0;a[m+19>>0]=0;c[m+28>>2]=0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((o|0)<0?m+-1|0:o)*20|0)|0;else l=59308;c[l+8>>2]=m;u=c[c[Da>>2]>>2]|0;r:do if(!sa){l=c[ya>>2]|0;s:do if(!l){n=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[n+76>>1]&8)break;a[f+23>>0]=1}while(0);t:do if(c[n+272>>2]|0)if(!(a[n+81>>0]|0))Ba=485;else{l=0;break s}else{do if((e[n+276>>1]|0)>=224){m=n+300|0;l=c[m>>2]|0;if(l|0){c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}m=n+296|0;l=c[m>>2]|0;if(!l){l=n+292|0;break}else{c[m>>2]=c[l>>2];X=n+284|0;c[X>>2]=(c[X>>2]|0)+1;break t}}else l=n+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=485}while(0);if((Ba|0)==485)l=_d(n,224,0)|0;if(!l){l=0;break}p=l+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[l>>2]=n;m=n+4|0;n=c[m>>2]|0;if(n|0)c[n+4>>2]=l;c[l+8>>2]=n;c[l+4>>2]=0;c[m>>2]=l;c[l+20>>2]=381479589;c[l+12>>2]=f;c[ya>>2]=l;Di(l,61,0,1,0)|0}while(0);s=c[l+108>>2]|0;u:do if(!(c[Z>>2]|0))m=0;else{n=c[f>>2]|0;m=c[Ca+64>>2]|0;if(!m){m=0;break}while(1){if((c[m>>2]|0)==(n|0))break u;m=c[m+24>>2]|0;if(!m){m=0;break}}}while(0);if((s|0)<=1){T=x;U=0;E=0;J=u;break q}q=Ca+28|0;r=Ca+8|0;if(!(a[(c[l>>2]|0)+81>>0]|0)){o=c[l+104>>2]|0;n=1;while(1){v:do switch(a[o+(n*20|0)>>0]|0){case 108:{if((c[o+(n*20|0)+12>>2]|0)!=(W|0))break v;p=c[o+(n*20|0)+8>>2]|0;if((p|0)==(c[q>>2]|0))break r;l=c[r>>2]|0;if(!l)break v;do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);break}case -93:{if((c[o+(n*20|0)+16>>2]|0)==(m|0))break r;break}default:{}}while(0);n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}n=(c[14830]|0)==(W|0);l=(c[14831]|0)==(m|0);p=c[14829]|0;switch(a[59308]|0){case 108:break;case -93:if(l)break r;else{T=x;U=0;E=0;J=u;break q}default:{T=x;U=0;E=0;J=u;break q}}if(l){if(!n){T=x;U=0;E=0;J=u;break q}n=(p|0)==(c[q>>2]|0);m=1;while(1){if(n)break r;l=c[r>>2]|0;if(l|0)do{if((p|0)==(c[l+44>>2]|0))break r;l=c[l+20>>2]|0}while((l|0)!=0);m=m+1|0;if((m|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}else{if(!n){T=x;U=0;E=0;J=u;break q}if((p|0)==(c[q>>2]|0))break;l=c[r>>2]|0;o=(l|0)==0;n=1;while(1){if(!o){m=l;do{if((p|0)==(c[m+44>>2]|0))break r;m=c[m+20>>2]|0}while((m|0)!=0)}n=n+1|0;if((n|0)>=(s|0)){T=x;U=0;E=0;J=u;break q}}}}while(0);q=f+40|0;r=c[q>>2]|0;c[q>>2]=r+1;q=f+19|0;m=a[q>>0]|0;do if(m<<24>>24){X=m+-1<<24>>24;a[q>>0]=X;l=c[f+148+((X&255)<<2)>>2]|0;if(!(X<<24>>24)){m=c[ka>>2]|0;Ba=530;break}else{p=m+-2<<24>>24;a[q>>0]=p;o=l;p=c[f+148+((p&255)<<2)>>2]|0;break}}else{m=(c[ka>>2]|0)+1|0;c[ka>>2]=m;l=m;Ba=530}while(0);if((Ba|0)==530){p=m+1|0;c[ka>>2]=p;o=l}l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=113;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,113,r,u,0)|0;l=c[na>>2]|0;m=c[v>>2]|0;if((c[w>>2]|0)>(m|0)){c[v>>2]=m+1;n=c[Aa+104>>2]|0;a[n+(m*20|0)>>0]=14;b[n+(m*20|0)+2>>1]=0;c[n+(m*20|0)+4>>2]=l;c[n+(m*20|0)+8>>2]=0;c[n+(m*20|0)+12>>2]=0;c[n+(m*20|0)+16>>2]=0;a[n+(m*20|0)+1>>0]=0;n=m}else n=Di(Aa,14,l,0,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=92;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=x;c[X+(l*20|0)+8>>2]=u;c[X+(l*20|0)+12>>2]=o;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,92,x,u,o)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=121;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=p;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,121,r,p,0)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=122;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=r;c[X+(l*20|0)+8>>2]=o;c[X+(l*20|0)+12>>2]=p;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,122,r,o,p)|0;l=c[v>>2]|0;if((c[w>>2]|0)>(l|0)){c[v>>2]=l+1;X=c[Aa+104>>2]|0;a[X+(l*20|0)>>0]=11;b[X+(l*20|0)+2>>1]=0;c[X+(l*20|0)+4>>2]=0;c[X+(l*20|0)+8>>2]=n;c[X+(l*20|0)+12>>2]=0;c[X+(l*20|0)+16>>2]=0;a[X+(l*20|0)+1>>0]=0}else Di(Aa,11,0,n,0)|0;m=c[v>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))l=(c[Aa+104>>2]|0)+(((n|0)<0?m+-1|0:n)*20|0)|0;else l=59308;c[l+8>>2]=m;do if(o|0){l=a[q>>0]|0;if((l&255)>=8)break;a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=o}while(0);if(!p){T=x;U=r;E=1;J=u;break}l=a[q>>0]|0;if((l&255)>=8){T=x;U=r;E=1;J=u;break}a[q>>0]=l+1<<24>>24;c[f+148+((l&255)<<2)>>2]=p;T=x;U=r;E=1;J=u}else{W=ja+4|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;c[W+20>>2]=0;c[W+24>>2]=0;c[ja>>2]=f;w:do if(!Ea)l=0;else{l=c[Ea>>2]|0;if((l|0)<=0)break;s=ja+24|0;u=ta+4|0;v=ta+8|0;w=ta+12|0;x=ta+24|0;y=ja+20|0;r=0;m=0;while(1){q=c[Ea+4+(r*20|0)>>2]|0;if(q){o=m&65535;b[s>>1]=o&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[u>>2]=125;c[v>>2]=126;c[w>>2]=0;c[x>>2]=ja;p=q+24|0;n=m;V=n+208|0;W=(c[V>>2]|0)+(c[p>>2]|0)|0;c[V>>2]=W;n=c[(c[n>>2]|0)+120>>2]|0;if((n|0)<(W|0)){Ba=565;break}_j(ta,q)|0;n=c[ta>>2]|0;m=n+208|0;c[m>>2]=(c[m>>2]|0)-(c[p>>2]|0);m=b[s>>1]|0;W=q+4|0;c[W>>2]=c[W>>2]|m&-32752&65535;m=(o&36880|m&65535)&65535;b[s>>1]=m;if((c[y>>2]|0)>0){Ba=567;break}if((c[n+36>>2]|0)>=1)break}r=r+1|0;if((r|0)>=(c[Ea>>2]|0))break w}if((Ba|0)==565){c[X>>2]=n;cd(m,41637,X);Ba=567}qi(Fa,g);l=0;break a}while(0);T=0;U=-1;E=0;J=l}while(0);if(qa&(J|0)>0)S=b[Ca+40>>1]|0;else S=z;X=b[ea>>1]|0;o=X<<16>>16;if(X<<16>>16>0){n=c[Ca+4>>2]|0;l=0;m=0;do{l=l+((d[n+(m<<4)+15>>0]|0)>>>1&1)|0;m=m+1|0}while((m|0)!=(o|0))}else l=0;do if(qa&(J|0)!=0){l=o-l|0;if((J|0)==(l|0))break;c[$>>2]=g;c[$+4>>2]=0;c[$+8>>2]=l;c[$+12>>2]=J;cd(f,44849,$);l=0;Ba=1038;break a}while(0);do if(Y){l=c[i+4>>2]|0;if((J|0)==(l|0))break;c[aa>>2]=J;c[aa+4>>2]=l;cd(f,44901,aa);l=0;Ba=1038;break a}while(0);O=Fa+32|0;do if(!((c[O>>2]&128|0)==0&0==0)){if(a[za>>0]|0){n=0;break}if(c[f+120>>2]|0){n=0;break}n=(c[ka>>2]|0)+1|0;c[ka>>2]=n;l=Aa+108|0;m=c[l>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[l>>2]=m+1;aa=c[Aa+104>>2]|0;a[aa+(m*20|0)>>0]=70;b[aa+(m*20|0)+2>>1]=0;c[aa+(m*20|0)+4>>2]=0;c[aa+(m*20|0)+8>>2]=n;c[aa+(m*20|0)+12>>2]=0;c[aa+(m*20|0)+16>>2]=0;a[aa+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,0,n,0)|0;break}}else n=0;while(0);do if(oa){R=0;l=0}else{q=Hm(f,Ca,109,0,-1,0,xa,wa)|0;o=(q<<2)+4|0;x:do if(c[Fa+272>>2]|0)if(!(a[ba>>0]|0))Ba=599;else{l=0;Ba=1038;break a}else{do if(!(0<0|(0==0?(e[Fa+276>>1]|0)>>>0>>0:0))){l=Fa+300|0;m=c[l>>2]|0;if(m|0){c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}l=Fa+296|0;m=c[l>>2]|0;if(!m){l=Fa+292|0;break}else{c[l>>2]=c[m>>2];ba=Fa+284|0;c[ba>>2]=(c[ba>>2]|0)+1;break x}}else l=Fa+288|0;while(0);c[l>>2]=(c[l>>2]|0)+1;Ba=599}while(0);if((Ba|0)==599)m=_d(Fa,o,0)|0;if(!m){l=0;Ba=1038;break a}if((q|0)<=0){R=m;l=m;break}l=Ca+8|0;o=0;p=c[ka>>2]|0;while(1){l=c[l>>2]|0;ba=p+1|0;c[ka>>2]=ba;c[m+(o<<2)>>2]=ba;p=(c[ka>>2]|0)+(e[l+52>>1]|0)|0;c[ka>>2]=p;o=o+1|0;if((o|0)==(q|0)){R=m;l=m;break}else l=l+20|0}}while(0);do if(k|0){if(c[Z>>2]|0){c[ca>>2]=c[Ca>>2];cd(f,44926,ca);Ba=1038;break a}u=c[xa>>2]|0;C=g+48|0;c[C>>2]=u;c[k+20>>2]=g;c[k+24>>2]=_;c[k+28>>2]=u;c[k+32>>2]=c[wa>>2];u=c[k>>2]|0;if(!u)break;ca=ja+8|0;c[ca>>2]=0;c[ca+4>>2]=0;c[ca+8>>2]=0;c[ca+12>>2]=0;c[ca+16>>2]=0;c[ca+20>>2]=0;c[ja>>2]=f;c[ja+4>>2]=g;y:do if((c[u>>2]|0)>0){v=ja+24|0;w=ta+4|0;x=ta+8|0;y=ta+12|0;z=ta+24|0;A=ja+20|0;s=0;m=0;while(1){r=c[u+4+(s*20|0)>>2]|0;if(r){p=m&65535;b[v>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[w>>2]=125;c[x>>2]=126;c[y>>2]=0;c[z>>2]=ja;q=r+24|0;o=m;ba=o+208|0;ca=(c[ba>>2]|0)+(c[q>>2]|0)|0;c[ba>>2]=ca;o=c[(c[o>>2]|0)+120>>2]|0;if((o|0)<(ca|0)){Ba=614;break}_j(ta,r)|0;o=c[ta>>2]|0;m=o+208|0;c[m>>2]=(c[m>>2]|0)-(c[q>>2]|0);m=b[v>>1]|0;ca=r+4|0;c[ca>>2]=c[ca>>2]|m&-32752&65535;m=(p&36880|m&65535)&65535;b[v>>1]=m;if((c[A>>2]|0)>0)break;if((c[o+36>>2]|0)>=1)break y}s=s+1|0;if((s|0)>=(c[u>>2]|0)){Ba=618;break y}}if((Ba|0)==614){c[ga>>2]=o;cd(m,41637,ga)}}else{m=0;Ba=618}while(0);z:do if((Ba|0)==618){D=k+4|0;r=c[D>>2]|0;A:do if(r){s=ja+24|0;p=m&65535;b[s>>1]=p&28655;m=c[ja>>2]|0;c[ta>>2]=m;c[ta+4>>2]=125;c[ta+8>>2]=126;c[ta+12>>2]=0;c[ta+24>>2]=ja;q=r+24|0;o=m+208|0;ga=(c[o>>2]|0)+(c[q>>2]|0)|0;c[o>>2]=ga;o=c[(c[m>>2]|0)+120>>2]|0;do if((o|0)>=(ga|0)){_j(ta,r)|0;m=c[ta>>2]|0;ia=m+208|0;c[ia>>2]=(c[ia>>2]|0)-(c[q>>2]|0);ia=b[s>>1]|0;ga=r+4|0;c[ga>>2]=c[ga>>2]|ia&-32752&65535;b[s>>1]=p&36880|ia&65535;if((c[ja+20>>2]|0)>0)break;if((c[m+36>>2]|0)<1)break A;else break z}else{c[ia>>2]=o;cd(m,41637,ia)}while(0);break z}while(0);o=c[ha>>2]|0;B=c[k>>2]|0;A=c[C>>2]|0;do if(!(c[o+36>>2]&32)){if((c[B>>2]|0)!=1)break;m=c[B+4>>2]|0;if((a[m>>0]|0)!=-94)break;if((b[m+32>>1]|0)==-1)break z}while(0);p=la;q=p+104|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));a[la>>0]=106;y=la+52|0;z=la+12|0;c[z>>2]=y;a[y>>0]=-94;c[la+80>>2]=A;m=c[o+8>>2]|0;B:do if(m|0){w=la+8|0;x=la+84|0;C:while(1){D:do if(a[m+54>>0]|0){p=c[B>>2]|0;q=m+50|0;o=b[q>>1]|0;if((p|0)!=(o&65535|0))break;r=c[m+36>>2]|0;if(r){o=c[D>>2]|0;if(!o)break;if(bk(f,o,r,A)|0)break;o=b[q>>1]|0;p=o&65535}if(!(o<<16>>16))break C;s=m+32|0;u=m+4|0;v=m+40|0;r=0;while(1){c[w>>2]=c[(c[s>>2]|0)+(r<<2)>>2];o=b[(c[u>>2]|0)+(r<<1)>>1]|0;do if(o<<16>>16==-2){o=c[(c[v>>2]|0)+4+(r*20|0)>>2]|0;if((a[o>>0]|0)==106)break;c[z>>2]=o;o=la}else{c[z>>2]=y;b[x>>1]=o;o=la}while(0);q=0;while(1){if((bk(f,c[B+4+(q*20|0)>>2]|0,o,A)|0)<2)break;q=q+1|0;if(q>>>0>=p>>>0)break D}r=r+1|0;if(r>>>0>=p>>>0)break C}}while(0);m=c[m+20>>2]|0;if(!m)break B}c[k+16>>2]=m;break z}while(0);cd(f,44986,ma)}while(0)}while(0);P=E<<24>>24!=0;do if(!P){if(!va){Q=0;N=0;break}m=c[na>>2]|0;o=Aa+108|0;p=c[o>>2]|0;if((c[Aa+112>>2]|0)>(p|0)){c[o>>2]=p+1;Q=c[Aa+104>>2]|0;a[Q+(p*20|0)>>0]=14;b[Q+(p*20|0)+2>>1]=0;c[Q+(p*20|0)+4>>2]=m;c[Q+(p*20|0)+8>>2]=0;c[Q+(p*20|0)+12>>2]=0;c[Q+(p*20|0)+16>>2]=0;a[Q+(p*20|0)+1>>0]=0;Q=p;N=p;break}else{N=Di(Aa,14,m,0,0)|0;Q=N;break}}else{o=Aa+108|0;m=c[o>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=36;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(Aa,36,U,0,0)|0;Q=m;N=c[o>>2]|0}while(0);na=f+56|0;M=c[na>>2]|0;K=M+-1|0;c[na>>2]=K;do if(h&1|0){na=b[ea>>1]|0;h=na<<16>>16;m=h+1|0;do if(!(na<<16>>16)){h=f+19|0;m=a[h>>0]|0;if(!(m<<24>>24)){E=(c[ka>>2]|0)+1|0;c[ka>>2]=E;break}else{E=m+-1<<24>>24;a[h>>0]=E;E=c[f+148+((E&255)<<2)>>2]|0;break}}else{o=f+32|0;p=c[o>>2]|0;q=f+28|0;r=c[q>>2]|0;if((r|0)>(h|0)){c[o>>2]=p+m;c[q>>2]=r-m;E=p;break}else{E=c[ka>>2]|0;c[ka>>2]=E+m;E=E+1|0;break}}while(0);do if((S|0)<0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,70,-1,E,0)|0;break}}else{E:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=S;c[na+(m*20|0)+12>>2]=E;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,E)|0;break}}else{h=c[Ea+4+(S*20|0)>>2]|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,E)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break E}else{Di(p,78,h,E,0)|0;break E}}else p=Jj(f,0,E)|0;while(0);if((p|0)==(E|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=E;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,E,0)|0;break}}while(0);o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;na=c[Aa+104>>2]|0;a[na+(h*20|0)>>0]=51;b[na+(h*20|0)+2>>1]=0;c[na+(h*20|0)+4>>2]=E;c[na+(h*20|0)+8>>2]=0;c[na+(h*20|0)+12>>2]=0;c[na+(h*20|0)+16>>2]=0;a[na+(h*20|0)+1>>0]=0}else h=Di(Aa,51,E,0,0)|0;m=c[o>>2]|0;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=70;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=-1;c[na+(m*20|0)+8>>2]=E;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else Di(Aa,70,-1,E,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((h|0)<0?m+-1|0:h)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;na=c[Aa+104>>2]|0;a[na+(m*20|0)>>0]=15;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=E;c[na+(m*20|0)+8>>2]=0;c[na+(m*20|0)+12>>2]=0;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,15,E,0,0)|0;break}}while(0);h=b[ea>>1]|0;if(h<<16>>16>0){w=i+4|0;D=(Ea|0)!=0|P;x=qa&1;y=Ca+4|0;z=E+1|0;A=Aa+108|0;B=Aa+112|0;C=Aa+104|0;h=0;v=0;while(1){F:do if(Y){m=c[w>>2]|0;if((m|0)<=0){u=0;break}o=c[i>>2]|0;h=0;while(1){if((c[o+(h<<3)+4>>2]|0)==(v|0)){u=h;break F}h=h+1|0;if((h|0)>=(m|0)){u=h;break}}}else u=h;while(0);do if(D){if(Y?(u|0)>=(c[w>>2]|0):0){Ba=710;break}if(P){h=v+z|0;m=c[A>>2]|0;if((c[B>>2]|0)>(m|0)){c[A>>2]=m+1;na=c[C>>2]|0;a[na+(m*20|0)>>0]=90;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=U;c[na+(m*20|0)+8>>2]=u;c[na+(m*20|0)+12>>2]=h;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,u,h)|0;break}}q=c[Ea+4+(u*20|0)>>2]|0;r=v+z|0;s=c[ya>>2]|0;do if(q){if((a[q>>0]|0)!=-88){p=Jj(f,q,r)|0;Ba=732;break}h=c[q+28>>2]|0;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(s,78,h,r,0)|0;break}}else{p=Jj(f,0,r)|0;Ba=732}while(0);do if((Ba|0)==732){Ba=0;if((p|0)==(r|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=r;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,r,0)|0;break}}while(0);h=(c[ka>>2]|0)+1|0;c[ka>>2]=h;m=s+108|0;o=c[m>>2]|0;if((c[s+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[s+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=r;c[na+(o*20|0)+8>>2]=h;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0}else Di(s,78,r,h,0)|0;a[q+38>>0]=a[q>>0]|0;a[q>>0]=-88;c[q+28>>2]=h;na=q+4|0;c[na>>2]=c[na>>2]&-4097}else Ba=710;while(0);G:do if((Ba|0)==710){Ba=0;h=c[(c[y>>2]|0)+(v<<4)+4>>2]|0;q=v+z|0;do if(h){if((a[h>>0]|0)!=-88){p=Jj(f,h,q)|0;break}p=c[ya>>2]|0;h=c[h+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[p+104>>2]|0;a[na+(o*20|0)>>0]=78;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=h;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break G}else{Di(p,78,h,q,0)|0;break G}}else p=Jj(f,0,q)|0;while(0);if((p|0)==(q|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;na=c[h+104>>2]|0;a[na+(o*20|0)>>0]=79;b[na+(o*20|0)+2>>1]=0;c[na+(o*20|0)+4>>2]=p;c[na+(o*20|0)+8>>2]=q;c[na+(o*20|0)+12>>2]=0;c[na+(o*20|0)+16>>2]=0;a[na+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,q,0)|0;break}}while(0);v=v+1|0;h=b[ea>>1]|0;if((v|0)>=(h<<16>>16|0))break;else h=u+x|0}}if(!oa){zk(Aa,Ca,E+1|0);h=b[ea>>1]|0}m=h<<16>>16;w=E-m+-1|0;if(t){v=f+23|0;u=t;do{do if((a[u+8>>0]|0)==120){if((a[u+9>>0]|0)!=1)break;h=c[ya>>2]|0;H:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);I:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=762;else{h=0;break H}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];na=o+284|0;c[na>>2]=(c[na>>2]|0)+1;break I}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=762}while(0);if((Ba|0)==762){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;J:do if(!m)Ba=772;else while(1){if((c[m>>2]|0)==(u|0)?(c[m+12>>2]|0)==(j|0):0)break J;m=c[m+4>>2]|0;if(!m){Ba=772;break}}while(0);if((Ba|0)==772){Ba=0;m=Nm(f,u,Ca,j)|0;if(!m)break}if(!(c[u>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;na=c[h+104>>2]|0;a[na+(m*20|0)>>0]=45;b[na+(m*20|0)+2>>1]=0;c[na+(m*20|0)+4>>2]=w;c[na+(m*20|0)+8>>2]=K;c[na+(m*20|0)+12>>2]=o;c[na+(m*20|0)+16>>2]=0;a[na+(m*20|0)+1>>0]=0}else m=Di(h,45,w,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);u=c[u+32>>2]|0}while((u|0)!=0);h=b[ea>>1]|0;m=h<<16>>16}o=m+1|0;if(h<<16>>16){h=f+28|0;if((c[h>>2]|0)>(m|0))break;c[h>>2]=o;c[f+32>>2]=E;break}if(!E)break;h=f+19|0;m=a[h>>0]|0;if((m&255)>=8)break;a[h>>0]=m+1<<24>>24;c[f+148+((m&255)<<2)>>2]=E}while(0);do if(!oa){do if(c[Z>>2]|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;oa=c[Aa+104>>2]|0;a[oa+(m*20|0)>>0]=73;b[oa+(m*20|0)+2>>1]=0;c[oa+(m*20|0)+4>>2]=0;c[oa+(m*20|0)+8>>2]=da;c[oa+(m*20|0)+12>>2]=0;c[oa+(m*20|0)+16>>2]=0;a[oa+(m*20|0)+1>>0]=0;break}else{Di(Aa,73,0,da,0)|0;break}}while(0);K:do if((S|0)>-1){L:do if(P){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;pa=c[Aa+104>>2]|0;a[pa+(m*20|0)>>0]=90;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=U;c[pa+(m*20|0)+8>>2]=S;c[pa+(m*20|0)+12>>2]=fa;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,90,U,S,fa)|0;break}}else{if(va){h=S+T|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,78,h,fa,0)|0;break}}m=c[Ea+4+(S*20|0)>>2]|0;h=a[m>>0]|0;do if(h<<24>>24==114){if(c[Z>>2]|0)break;h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break K}else{Di(Aa,121,h,fa,F)|0;I=1;break K}}while(0);do if(m){if(h<<24>>24!=-88){p=Jj(f,m,fa)|0;break}p=c[ya>>2]|0;h=c[m+28>>2]|0;m=p+108|0;o=c[m>>2]|0;if((c[p+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[p+104>>2]|0;a[pa+(o*20|0)>>0]=78;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=h;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break L}else{Di(p,78,h,fa,0)|0;break L}}else p=Jj(f,0,fa)|0;while(0);if((p|0)==(fa|0))break;h=c[ya>>2]|0;if(!h)break;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=p;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,79,p,fa,0)|0;break}}while(0);q=Aa+108|0;o=c[q>>2]|0;do if(c[Z>>2]|0){m=o+2|0;h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=50;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(Aa,50,fa,m,0)|0;break}}else{h=Aa+112|0;if((c[h>>2]|0)>(o|0)){c[q>>2]=o+1;pa=c[Aa+104>>2]|0;a[pa+(o*20|0)>>0]=51;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=fa;c[pa+(o*20|0)+8>>2]=0;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0}else o=Di(Aa,51,fa,0,0)|0;m=c[xa>>2]|0;p=c[q>>2]|0;if((c[h>>2]|0)>(p|0)){c[q>>2]=p+1;pa=c[Aa+104>>2]|0;a[pa+(p*20|0)>>0]=121;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=fa;c[pa+(p*20|0)+12>>2]=F;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0}else Di(Aa,121,m,fa,F)|0;p=c[q>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))m=(c[Aa+104>>2]|0)+(((o|0)<0?p+-1|0:o)*20|0)|0;else m=59308;c[m+8>>2]=p}while(0);m=c[q>>2]|0;if((c[h>>2]|0)>(m|0)){c[q>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=15;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=fa;c[I+(m*20|0)+8>>2]=0;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,15,fa,0,0)|0;I=0;break}}else if(!(c[Z>>2]|pa)){h=c[xa>>2]|0;m=Aa+108|0;o=c[m>>2]|0;if((c[Aa+112>>2]|0)>(o|0)){c[m>>2]=o+1;I=c[Aa+104>>2]|0;a[I+(o*20|0)>>0]=121;b[I+(o*20|0)+2>>1]=0;c[I+(o*20|0)+4>>2]=h;c[I+(o*20|0)+8>>2]=fa;c[I+(o*20|0)+12>>2]=F;c[I+(o*20|0)+16>>2]=0;a[I+(o*20|0)+1>>0]=0;I=1;break}else{Di(Aa,121,h,fa,F)|0;I=1;break}}else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;I=c[Aa+104>>2]|0;a[I+(m*20|0)>>0]=73;b[I+(m*20|0)+2>>1]=0;c[I+(m*20|0)+4>>2]=0;c[I+(m*20|0)+8>>2]=fa;c[I+(m*20|0)+12>>2]=0;c[I+(m*20|0)+16>>2]=0;a[I+(m*20|0)+1>>0]=0;I=0;break}else{Di(Aa,73,0,fa,0)|0;I=0;break}}while(0);do if((F|0)>0){h=c[ya>>2]|0;m=h+108|0;o=c[m>>2]|0;if((c[h+112>>2]|0)>(o|0)){c[m>>2]=o+1;pa=c[h+104>>2]|0;a[pa+(o*20|0)>>0]=-105;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=F;c[pa+(o*20|0)+8>>2]=fa;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break}else{Di(h,151,F,fa,0)|0;break}}while(0);if((b[ea>>1]|0)>0){C=Ca+40|0;D=Aa+108|0;E=Aa+112|0;F=Aa+104|0;H=Ca+4|0;u=(J|0)==0;v=f+23|0;w=i+4|0;x=ta+20|0;y=ta+4|0;z=ta+8|0;A=ta+24|0;B=(T|0)==(_|0);h=0;s=0;do{r=s+_|0;M:do if((s|0)==(b[C>>1]|0)){m=c[D>>2]|0;if((c[E>>2]|0)>(m|0)){c[D>>2]=m+1;pa=c[F>>2]|0;a[pa+(m*20|0)>>0]=74;b[pa+(m*20|0)+2>>1]=0;c[pa+(m*20|0)+4>>2]=r;c[pa+(m*20|0)+8>>2]=0;c[pa+(m*20|0)+12>>2]=0;c[pa+(m*20|0)+16>>2]=0;a[pa+(m*20|0)+1>>0]=0;break}else{Di(Aa,74,r,0,0)|0;break}}else{N:do if(qa)if(!(a[(c[H>>2]|0)+(s<<4)+15>>0]&2)){m=s-h|0;Ba=867;break}else{h=h+1|0;break}else{o=c[w>>2]|0;if((o|0)<=0){m=0;Ba=867;break}p=c[i>>2]|0;m=0;while(1){if((c[p+(m<<3)+4>>2]|0)==(s|0)){Ba=867;break N}m=m+1|0;if((m|0)>=(o|0)){Ba=867;break}}}while(0);do if((Ba|0)==867){Ba=0;if(u|(m|0)<0)break;if(Y?(m|0)>=(c[w>>2]|0):0)break;if(P){o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=90;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=U;c[pa+(o*20|0)+8>>2]=m;c[pa+(o*20|0)+12>>2]=r;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,90,U,m,r)|0;break M}}if(va){if(B)break M;m=m+T|0;o=c[D>>2]|0;if((c[E>>2]|0)>(o|0)){c[D>>2]=o+1;pa=c[F>>2]|0;a[pa+(o*20|0)>>0]=79;b[pa+(o*20|0)+2>>1]=0;c[pa+(o*20|0)+4>>2]=m;c[pa+(o*20|0)+8>>2]=r;c[pa+(o*20|0)+12>>2]=0;c[pa+(o*20|0)+16>>2]=0;a[pa+(o*20|0)+1>>0]=0;break M}else{Di(Aa,79,m,r,0)|0;break M}}m=c[Ea+4+(m*20|0)>>2]|0;do if(m){if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}else q=Jj(f,0,r)|0;while(0);if((q|0)==(r|0))break M;m=c[ya>>2]|0;if(!m)break M;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(m,79,q,r,0)|0;break M}}while(0);m=c[(c[H>>2]|0)+(s<<4)+4>>2]|0;do if(!(a[v>>0]|0)){if(m|0){Ba=876;break}q=Jj(f,0,r)|0}else{a[x>>0]=2;c[y>>2]=127;c[z>>2]=128;c[A>>2]=0;if(m){_j(ta,m)|0;if(!(a[x>>0]|0)){Ba=876;break}}Nj(f,m,r)|0;break M}while(0);do if((Ba|0)==876){Ba=0;if((a[m>>0]|0)!=-88){q=Jj(f,m,r)|0;break}q=c[ya>>2]|0;m=c[m+28>>2]|0;o=q+108|0;p=c[o>>2]|0;if((c[q+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[q+104>>2]|0;a[pa+(p*20|0)>>0]=78;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=m;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break M}else{Di(q,78,m,r,0)|0;break M}}while(0);if((q|0)==(r|0))break;m=c[ya>>2]|0;if(!m)break;o=m+108|0;p=c[o>>2]|0;if((c[m+112>>2]|0)>(p|0)){c[o>>2]=p+1;pa=c[m+104>>2]|0;a[pa+(p*20|0)>>0]=79;b[pa+(p*20|0)+2>>1]=0;c[pa+(p*20|0)+4>>2]=q;c[pa+(p*20|0)+8>>2]=r;c[pa+(p*20|0)+12>>2]=0;c[pa+(p*20|0)+16>>2]=0;a[pa+(p*20|0)+1>>0]=0;break}else{Di(m,79,q,r,0)|0;break}}while(0);s=s+1|0}while((s|0)<(b[ea>>1]|0))}if(!(c[Z>>2]|0)){Tm(f,Ca,R,c[xa>>2]|0,c[wa>>2]|0,da,0,S>>>31&255^1,j&255,K,ta,0,k);Lm(f,Ca,0,da,0,0);do if(!(c[ta>>2]|0))h=1;else{if(t|0){h=0;break}if((c[O>>2]&16384|0)==0&0==0){h=1;break}s=c[Ca>>2]|0;p=c[ra>>2]|0;q=c[p+68>>2]|0;if(!q){m=p+60|0;h=p+64|0}else{m=a[s>>0]|0;if(!(m<<24>>24))h=0;else{h=0;o=s;do{o=o+1|0;h=G(h+(d[208+(m&255)>>0]|0)|0,-1640531535)|0;m=a[o>>0]|0}while(m<<24>>24!=0)}h=(h>>>0)%((c[p+56>>2]|0)>>>0)|0;m=q+(h<<3)|0;h=q+(h<<3)+4|0}m=c[m>>2]|0;O:do if(!m)h=59292;else{r=d[208+(d[s>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;m=m+-1|0;p=c[h+12>>2]|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-r|0;if(!(ta<<24>>24==0|(o|0)!=0)){q=s;do{p=p+1|0;q=q+1|0;ta=a[p>>0]|0;o=(d[208+(ta&255)>>0]|0)-(d[208+(d[q>>0]|0)>>0]|0)|0}while(!(ta<<24>>24==0|(o|0)!=0))}if(!o)break O;if(!m){h=59292;break}}}while(0);h=(c[h+8>>2]|0)==0&1}while(0);Um(f,Ca,c[xa>>2]|0,c[wa>>2]|0,da,R,0,I,h);break}h=c[Ca+64>>2]|0;P:do if(!h)h=0;else while(1){if((c[h>>2]|0)==(Fa|0))break P;h=c[h+24>>2]|0;if(!h){h=0;break}}while(0);s=c[ua>>2]|0;s=(s|0)==0?f:s;r=s+204|0;q=c[r>>2]|0;p=s+252|0;Q:do if((q|0)>0){m=c[p>>2]|0;o=0;do{if((c[m+(o<<2)>>2]|0)==(Ca|0))break Q;o=o+1|0}while((o|0)<(q|0));o=p;Ba=920}else{o=p;m=c[p>>2]|0;Ba=920}while(0);R:do if((Ba|0)==920){do if(!(mb()|0)){xa=(q<<2)+4|0;m=sb(m,xa,((xa|0)<0)<<31>>31)|0;if(!m)break;c[o>>2]=m;xa=c[r>>2]|0;c[r>>2]=xa+1;c[m+(xa<<2)>>2]=Ca;break R}while(0);m=c[s>>2]|0;o=m+81|0;if(a[o>>0]|0)break;if(a[m+82>>0]|0)break;a[o>>0]=1;if((c[m+180>>2]|0)>0)c[m+264>>2]=1;xa=m+272|0;c[xa>>2]=(c[xa>>2]|0)+1;m=c[m+236>>2]|0;if(!m)break;c[m+12>>2]=7}while(0);o=(b[ea>>1]|0)+2|0;q=Aa+108|0;m=c[q>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[q>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=10;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=1;c[xa+(m*20|0)+8>>2]=o;c[xa+(m*20|0)+12>>2]=da;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(Aa,10,1,o,da)|0;do if(!(a[(c[Aa>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[q>>2]|0)+-1|0;o=c[Aa+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(Aa,o+(m*20|0)|0,h,-12);break}if(!h)break;c[o+(m*20|0)+16>>2]=h;a[p>>0]=-12;xa=h+12|0;c[xa>>2]=(c[xa>>2]|0)+1}while(0);h=c[q>>2]|0;if((h|0)>0)b[(c[Aa+104>>2]|0)+((h+-1|0)*20|0)+2>>1]=(j|0)==11?2:j&65535;xa=c[ua>>2]|0;a[((xa|0)==0?f:xa)+21>>0]=1}while(0);do if(n|0){h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;xa=c[Aa+104>>2]|0;a[xa+(m*20|0)>>0]=83;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=n;c[xa+(m*20|0)+8>>2]=1;c[xa+(m*20|0)+12>>2]=0;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0;break}else{Di(Aa,83,n,1,0)|0;break}}while(0);if(sa){u=fa+-1-(b[ea>>1]|0)|0;v=f+23|0;do{do if((a[t+8>>0]|0)==120){if((a[t+9>>0]|0)!=2)break;h=c[ya>>2]|0;S:do if(!h){o=c[f>>2]|0;do if(!(c[ua>>2]|0)){if(b[o+76>>1]&8)break;a[v>>0]=1}while(0);T:do if(c[o+272>>2]|0)if(!(a[o+81>>0]|0))Ba=982;else{h=0;break S}else{do if((e[o+276>>1]|0)>=224){m=o+300|0;h=c[m>>2]|0;if(h|0){c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}m=o+296|0;h=c[m>>2]|0;if(!h){h=o+292|0;break}else{c[m>>2]=c[h>>2];xa=o+284|0;c[xa>>2]=(c[xa>>2]|0)+1;break T}}else h=o+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;Ba=982}while(0);if((Ba|0)==982){Ba=0;h=_d(o,224,0)|0}if(!h){h=0;break}p=h+104|0;q=p+120|0;do{c[p>>2]=0;p=p+4|0}while((p|0)<(q|0));c[h>>2]=o;m=o+4|0;o=c[m>>2]|0;if(o|0)c[o+4>>2]=h;c[h+8>>2]=o;c[h+4>>2]=0;c[m>>2]=h;c[h+20>>2]=381479589;c[h+12>>2]=f;c[ya>>2]=h;Di(h,61,0,1,0)|0}while(0);m=c[ua>>2]|0;m=c[((m|0)==0?f:m)+260>>2]|0;U:do if(!m)Ba=992;else while(1){if((c[m>>2]|0)==(t|0)?(c[m+12>>2]|0)==(j|0):0)break U;m=c[m+4>>2]|0;if(!m){Ba=992;break}}while(0);if((Ba|0)==992){Ba=0;m=Nm(f,t,Ca,j)|0;if(!m)break}if(!(c[t>>2]|0))s=0;else{s=(c[f>>2]|0)+32|0;s=bw(c[s>>2]|0,c[s+4>>2]|0,13)|0;L()|0;s=s&1^1}o=(c[ka>>2]|0)+1|0;c[ka>>2]=o;q=c[m+8>>2]|0;r=h+108|0;m=c[r>>2]|0;if((c[h+112>>2]|0)>(m|0)){c[r>>2]=m+1;xa=c[h+104>>2]|0;a[xa+(m*20|0)>>0]=45;b[xa+(m*20|0)+2>>1]=0;c[xa+(m*20|0)+4>>2]=u;c[xa+(m*20|0)+8>>2]=K;c[xa+(m*20|0)+12>>2]=o;c[xa+(m*20|0)+16>>2]=0;a[xa+(m*20|0)+1>>0]=0}else m=Di(h,45,u,K,o)|0;do if(!(a[(c[h>>2]|0)+81>>0]|0)){if((m|0)<0)m=(c[r>>2]|0)+-1|0;o=c[h+104>>2]|0;p=o+(m*20|0)+1|0;if(a[p>>0]|0){Ei(h,o+(m*20|0)|0,q,-4);break}if(!q)break;c[o+(m*20|0)+16>>2]=q;a[p>>0]=-4}while(0);m=c[r>>2]|0;if((m|0)<=0)break;b[(c[h+104>>2]|0)+((m+-1|0)*20|0)+2>>1]=s}while(0);t=c[t+32>>2]|0}while((t|0)!=0)}m=c[Aa+12>>2]|0;h=0-M|0;if(((c[m+56>>2]|0)+(c[m+60>>2]|0)|0)<0)mk(m,Aa,h);else c[(c[m+64>>2]|0)+(h<<2)>>2]=c[Aa+108>>2];if(!P){if(!va)break;h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=11;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=0;c[j+(m*20|0)+8>>2]=N;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0}else Di(Aa,11,0,N,0)|0;m=c[h>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;break}o=Aa+108|0;h=c[o>>2]|0;p=Aa+112|0;if((c[p>>2]|0)>(h|0)){c[o>>2]=h+1;j=c[Aa+104>>2]|0;a[j+(h*20|0)>>0]=5;b[j+(h*20|0)+2>>1]=0;c[j+(h*20|0)+4>>2]=U;c[j+(h*20|0)+8>>2]=N;c[j+(h*20|0)+12>>2]=0;c[j+(h*20|0)+16>>2]=0;a[j+(h*20|0)+1>>0]=0}else Di(Aa,5,U,N,0)|0;m=c[o>>2]|0;if(!(a[(c[Aa>>2]|0)+81>>0]|0))h=(c[Aa+104>>2]|0)+(((Q|0)<0?m+-1|0:Q)*20|0)|0;else h=59308;c[h+8>>2]=m;if((c[p>>2]|0)>(m|0)){c[o>>2]=m+1;j=c[Aa+104>>2]|0;a[j+(m*20|0)>>0]=117;b[j+(m*20|0)+2>>1]=0;c[j+(m*20|0)+4>>2]=U;c[j+(m*20|0)+8>>2]=0;c[j+(m*20|0)+12>>2]=0;c[j+(m*20|0)+16>>2]=0;a[j+(m*20|0)+1>>0]=0;break}else{Di(Aa,117,U,0,0)|0;break}}while(0);do if(!(a[za>>0]|0)){if(c[f+120>>2]|0)break;if(!(c[f+112>>2]|0))break;Sm(f)}while(0);if(!n)Ba=1038;else{h=Aa+108|0;m=c[h>>2]|0;if((c[Aa+112>>2]|0)>(m|0)){c[h>>2]=m+1;f=c[Aa+104>>2]|0;a[f+(m*20|0)>>0]=81;b[f+(m*20|0)+2>>1]=0;c[f+(m*20|0)+4>>2]=n;c[f+(m*20|0)+8>>2]=1;c[f+(m*20|0)+12>>2]=0;c[f+(m*20|0)+16>>2]=0;a[f+(m*20|0)+1>>0]=0}else Di(Aa,81,n,1,0)|0;Wi(Aa,1);if(a[(c[Aa>>2]|0)+81>>0]|0){Ba=1038;break}yc(c[Aa+116>>2]|0,44972,-1,1,0)|0;Ba=1038}}else{l=0;Ba=1038}}else{l=0;Ba=1038}while(0);if((Ba|0)==1038){qi(Fa,g);if(!Ea){h=Da;r=l;break}}ri(Fa,Ea);h=Da;r=l}else Ba=1037;while(0);if((Ba|0)==1037){qi(Fa,g);r=0}do if(k|0){l=c[k>>2]|0;if(l|0)ri(Fa,l);l=c[k+4>>2]|0;if(l|0)ni(Fa,l);l=c[k+8>>2]|0;if(l|0)ri(Fa,l);l=c[k+12>>2]|0;if(l|0)ni(Fa,l);if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,k);break}g=k;if((c[Fa+304>>2]|0)>>>0<=g>>>0?(c[Fa+308>>2]|0)>>>0>g>>>0:0){g=Fa+300|0;c[k>>2]=c[g>>2];c[g>>2]=k;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);break}else{g=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);break}}while(0);if(h|0)pi(Fa,h,1);do if(i|0){q=i+4|0;l=c[i>>2]|0;V:do if((c[q>>2]|0)>0){m=Fa+480|0;n=Fa+304|0;o=Fa+308|0;p=Fa+300|0;if(!Fa){h=0;while(1){l=c[l+(h<<3)>>2]|0;do if(l|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}while(0);h=h+1|0;l=c[i>>2]|0;if((h|0)>=(c[q>>2]|0))break V}}h=0;do{l=c[l+(h<<3)>>2]|0;do if(l|0){if(c[m>>2]|0){Xd(Fa,l);break}k=l;if((c[n>>2]|0)>>>0<=k>>>0?(c[o>>2]|0)>>>0>k>>>0:0){c[l>>2]=c[p>>2];c[p>>2]=l;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](l);break}else{k=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);break}}while(0);h=h+1|0;l=c[i>>2]|0}while((h|0)<(c[q>>2]|0))}while(0);W:do if(l){do if(Fa|0){h=Fa+480|0;if(!(c[h>>2]|0)){m=l;if((c[Fa+304>>2]|0)>>>0>m>>>0)break;if((c[Fa+308>>2]|0)>>>0<=m>>>0)break;k=Fa+300|0;c[l>>2]=c[k>>2];c[k>>2]=l}else Xd(Fa,l);l=h;Ba=1093;break W}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](l);Ba=1091;break}else{Ba=Wa[c[29352>>2]&127](l)|0;c[14978]=(c[14978]|0)-Ba;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](l);Ba=1091;break}}else Ba=1091;while(0);if((Ba|0)==1091)if(Fa){l=Fa+480|0;Ba=1093}if((Ba|0)==1093){if(c[l>>2]|0){Xd(Fa,i);break}k=i;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){k=Fa+300|0;c[i>>2]=c[k>>2];c[k>>2]=i;break}}if(i|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{k=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-k;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!r){Ra=Ga;return}if(Fa|0){if(c[Fa+480>>2]|0){Xd(Fa,r);Ra=Ga;return}k=r;if((c[Fa+304>>2]|0)>>>0<=k>>>0?(c[Fa+308>>2]|0)>>>0>k>>>0:0){Fa=Fa+300|0;c[r>>2]=c[Fa>>2];c[Fa>>2]=r;Ra=Ga;return}}if(!(c[7324]|0)){ab[c[29344>>2]&127](r);Ra=Ga;return}else{Fa=Wa[c[29352>>2]&127](r)|0;c[14978]=(c[14978]|0)-Fa;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](r);Ra=Ga;return}}function wj(b,f,g){b=b|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=c[b>>2]|0;if(!f){a:do if(!p){if(!(c[7324]|0)){f=Wa[c[29340>>2]&127](8)|0;o=25;break}f=Wa[c[29356>>2]&127](8)|0;if((c[14985]|0)>>>0<8)c[14985]=8;i=59064;h=c[i>>2]|0;i=c[i+4>>2]|0;if((i|0)>0|(i|0)==0&h>>>0>0){n=c[14978]|0;m=Tv(h|0,i|0,f|0,((f|0)<0)<<31>>31|0)|0;l=L()|0;c[14768]=((l|0)<0|(l|0)==0&m>>>0<=n>>>0)&1}f=Wa[c[29340>>2]&127](f)|0;if(!f){p=0;return p|0}h=Wa[c[29352>>2]&127](f)|0;h=(c[14978]|0)+h|0;c[14978]=h;if(h>>>0>(c[14982]|0)>>>0)c[14982]=h;h=(c[14981]|0)+1|0;c[14981]=h;if(h>>>0>(c[14987]|0)>>>0)c[14987]=h}else{if(c[p+272>>2]|0){if(a[p+81>>0]|0){p=0;return p|0}}else{do if((e[p+276>>1]|0)>=8){h=p+300|0;f=c[h>>2]|0;if(f|0){c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}h=p+296|0;f=c[h>>2]|0;if(!f){f=p+292|0;break}else{c[h>>2]=c[f>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=25;break a}}else f=p+288|0;while(0);c[f>>2]=(c[f>>2]|0)+1}f=_d(p,8,0)|0;o=25}while(0);if((o|0)==25)if(!f){p=0;return p|0}n=f;m=n;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;n=n+4|0;a[n>>0]=0;a[n+1>>0]=0;a[n+2>>0]=0;a[n+3>>0]=0}m=c[f>>2]|0;n=f+4|0;i=c[n>>2]|0;h=((i|0)<0)<<31>>31;l=Sv(i|0,h|0,-1,-1)|0;b:do if((l&i|0)==0&((L()|0)&h|0)==0){j=(i|0)==0;k=cw(i|0,h|0,4)|0;l=L()|0;k=j?8:k;l=j?0:l;c:do if(!m){if(c[p+272>>2]|0){if(a[p+81>>0]|0)break}else{do if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){j=p+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}j=p+296|0;h=c[j>>2]|0;if(!h){h=p+292|0;break}else{c[j>>2]=c[h>>2];o=p+284|0;c[o>>2]=(c[o>>2]|0)+1;o=45;break c}}else h=p+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(p,k,l)|0;o=45}else{o=m;if((c[p+304>>2]|0)>>>0<=o>>>0?(c[p+308>>2]|0)>>>0>o>>>0:0){if(!(l>>>0>0|((l|0)==0?k>>>0>(e[p+276>>1]|0)>>>0:0))){h=m;o=48;break b}h=Zd(p,m,k,l)|0;o=45;break}h=Zd(p,m,k,l)|0;o=45}while(0);if((o|0)==45){if(h|0){o=48;break}i=c[n>>2]|0}c[f>>2]=m;h=m}else{h=m;o=48}while(0);if((o|0)==48){j=h+(i<<3)|0;m=j;a[m>>0]=0;a[m+1>>0]=0;a[m+2>>0]=0;a[m+3>>0]=0;j=j+4|0;a[j>>0]=0;a[j+1>>0]=0;a[j+2>>0]=0;a[j+3>>0]=0;j=(c[n>>2]|0)+1|0;c[n>>2]=j;c[f>>2]=h;if((i|0)<0)i=j;else{k=qj(p,g)|0;c[(c[f>>2]|0)+(i<<3)>>2]=k;if((k|0)==0|(d[b+200>>0]|0)<2){p=f;return p|0}j=c[b>>2]|0;d:do if(!j){if(!(c[7324]|0)){h=Wa[c[29340>>2]&127](16)|0;o=114;break}h=Wa[c[29356>>2]&127](16)|0;if((c[14985]|0)>>>0<16)c[14985]=16;j=59064;i=c[j>>2]|0;j=c[j+4>>2]|0;if((j|0)>0|(j|0)==0&i>>>0>0){p=c[14978]|0;n=Tv(i|0,j|0,h|0,((h|0)<0)<<31>>31|0)|0;m=L()|0;c[14768]=((m|0)<0|(m|0)==0&n>>>0<=p>>>0)&1}h=Wa[c[29340>>2]&127](h)|0;if(!h){p=f;return p|0}i=Wa[c[29352>>2]&127](h)|0;i=(c[14978]|0)+i|0;c[14978]=i;if(i>>>0>(c[14982]|0)>>>0)c[14982]=i;i=(c[14981]|0)+1|0;c[14981]=i;if(i>>>0>(c[14987]|0)>>>0)c[14987]=i}else{if(c[j+272>>2]|0){if(a[j+81>>0]|0){p=f;return p|0}}else{do if((e[j+276>>1]|0)>=16){i=j+300|0;h=c[i>>2]|0;if(h|0){c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}i=j+296|0;h=c[i>>2]|0;if(!h){h=j+292|0;break}else{c[i>>2]=c[h>>2];o=j+284|0;c[o>>2]=(c[o>>2]|0)+1;o=114;break d}}else h=j+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1}h=_d(j,16,0)|0;o=114}while(0);if((o|0)==114)if(!h){p=f;return p|0}i=h+4|0;j=i+12|0;do{a[i>>0]=0;i=i+1|0}while((i|0)<(j|0));c[h>>2]=k;o=g;g=c[o+4>>2]|0;p=h+4|0;c[p>>2]=c[o>>2];c[p+4>>2]=g;p=b+272|0;c[h+12>>2]=c[p>>2];c[p>>2]=h;p=f;return p|0}}e:do if((i|0)>0){j=p+480|0;k=p+304|0;l=p+308|0;m=p+300|0;if(!p){i=0;while(1){h=c[h+(i<<3)>>2]|0;do if(h|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}while(0);i=i+1|0;h=c[f>>2]|0;if((i|0)>=(c[n>>2]|0))break e}}i=0;do{h=c[h+(i<<3)>>2]|0;do if(h|0){if(c[j>>2]|0){Xd(p,h);break}g=h;if((c[k>>2]|0)>>>0<=g>>>0?(c[l>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[m>>2];c[m>>2]=h;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);i=i+1|0;h=c[f>>2]|0}while((i|0)<(c[n>>2]|0))}while(0);f:do if(h){do if(p|0){i=p+480|0;if(!(c[i>>2]|0)){j=h;if((c[p+304>>2]|0)>>>0>j>>>0)break;if((c[p+308>>2]|0)>>>0<=j>>>0)break;g=p+300|0;c[h>>2]=c[g>>2];c[g>>2]=h}else Xd(p,h);h=i;o=81;break f}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);o=79;break}else{o=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);o=79;break}}else o=79;while(0);if((o|0)==79)if(p){h=p+480|0;o=81}if((o|0)==81){if(c[h>>2]|0){Xd(p,f);p=0;return p|0}g=f;if((c[p+304>>2]|0)>>>0<=g>>>0?(c[p+308>>2]|0)>>>0>g>>>0:0){p=p+300|0;c[f>>2]=c[p>>2];c[p>>2]=f;p=0;return p|0}}if(!f){p=0;return p|0}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=0;return p|0}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=0;return p|0}return 0}function xj(f,g,h){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,v=0,w=0;w=Ra;Ra=Ra+176|0;r=w+96|0;o=w+88|0;n=w+80|0;q=w+136|0;p=w;s=w+104|0;u=f+8|0;i=c[u>>2]|0;a:do if(!i){m=c[f>>2]|0;if((c[f+116>>2]|0)==0?(b[m+76>>1]&8)==0:0)a[f+23>>0]=1;b:do if(c[m+272>>2]|0)if(!(a[m+81>>0]|0))l=15;else break a;else{do if((e[m+276>>1]|0)>=224){i=m+300|0;j=c[i>>2]|0;if(j|0){c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}i=m+296|0;j=c[i>>2]|0;if(!j){i=m+292|0;break}else{c[i>>2]=c[j>>2];k=m+284|0;c[k>>2]=(c[k>>2]|0)+1;k=j;break b}}else i=m+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1;l=15}while(0);if((l|0)==15)k=_d(m,224,0)|0;if(k|0){i=k+104|0;j=i+120|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[k>>2]=m;i=m+4|0;j=c[i>>2]|0;if(j|0)c[j+4>>2]=k;c[k+8>>2]=j;c[k+4>>2]=0;c[i>>2]=k;c[k+20>>2]=381479589;c[k+12>>2]=f;c[u>>2]=k;Di(k,61,0,1,0)|0;t=k;l=20}}else{t=i;l=20}while(0);do if((l|0)==20){if(g){i=c[f>>2]|0;if(c[g+4>>2]|0){if(a[i+165>>0]|0){cd(f,39404,n);break}i=wk(i,g)|0;if((i|0)<0){c[o>>2]=g;cd(f,39421,o);break}}else i=d[i+164>>0]|0;if((i|0)>-1&(i|0)!=1)n=i;else break}else n=0;do if(h){i=s+8|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=p;j=i+80|0;do{c[i>>2]=0;i=i+4|0}while((i|0)<(j|0));c[s>>2]=f;c[s+4>>2]=p;j=s+24|0;b[j>>1]=0;c[q>>2]=f;c[q+4>>2]=125;c[q+8>>2]=126;c[q+12>>2]=0;c[q+24>>2]=s;k=h+24|0;i=f+208|0;p=(c[i>>2]|0)+(c[k>>2]|0)|0;c[i>>2]=p;i=c[(c[f>>2]|0)+120>>2]|0;if((i|0)<(p|0)){c[r>>2]=i;cd(f,41637,r);i=0;break}_j(q,h)|0;i=c[q>>2]|0;r=i+208|0;c[r>>2]=(c[r>>2]|0)-(c[k>>2]|0);r=h+4|0;c[r>>2]=c[r>>2]|b[j>>1]&-32752&65535;if((c[s+20>>2]|0)>0){i=0;break}if((c[i+36>>2]|0)<1){s=f+44|0;i=(c[s>>2]|0)+1|0;c[s>>2]=i;if((a[h>>0]|0)==-88){j=c[u>>2]|0;k=c[h+28>>2]|0;l=j+108|0;m=c[l>>2]|0;if((c[j+112>>2]|0)>(m|0)){c[l>>2]=m+1;v=c[j+104>>2]|0;a[v+(m*20|0)>>0]=78;b[v+(m*20|0)+2>>1]=0;c[v+(m*20|0)+4>>2]=k;c[v+(m*20|0)+8>>2]=i;c[v+(m*20|0)+12>>2]=0;c[v+(m*20|0)+16>>2]=0;a[v+(m*20|0)+1>>0]=0;break}else{Di(j,78,k,i,0)|0;break}}l=Jj(f,h,i)|0;if((l|0)!=(i|0)?(v=c[u>>2]|0,(v|0)!=0):0){j=v+108|0;k=c[j>>2]|0;if((c[v+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[v+104>>2]|0;a[v+(k*20|0)>>0]=79;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=l;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0;break}else{Di(v,79,l,i,0)|0;break}}}else i=0}else i=0;while(0);j=t+108|0;k=c[j>>2]|0;if((c[t+112>>2]|0)>(k|0)){c[j>>2]=k+1;v=c[t+104>>2]|0;a[v+(k*20|0)>>0]=8;b[v+(k*20|0)+2>>1]=0;c[v+(k*20|0)+4>>2]=n;c[v+(k*20|0)+8>>2]=i;c[v+(k*20|0)+12>>2]=0;c[v+(k*20|0)+16>>2]=0;a[v+(k*20|0)+1>>0]=0}else Di(t,8,n,i,0)|0;i=1<>2]=c[v>>2]|i;if((n|0)!=1?a[(c[(c[(c[t>>2]|0)+16>>2]|0)+(n<<4)+4>>2]|0)+9>>0]|0:0){v=t+156|0;c[v>>2]=c[v>>2]|i}}while(0);if(!h){Ra=w;return}ni(c[f>>2]|0,h);Ra=w;return} function Vi(a,e){a=a|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;f=c[e+8>>2]|0;if(f|0){j=(a|0)==0;l=e+56|0;m=a+480|0;n=a+304|0;o=a+308|0;i=a+300|0;do{h=f;f=c[f+20>>2]|0;if(!(!j?(c[m>>2]|0)!=0:0))p=5;if((p|0)==5?(0,(c[l>>2]|0)==0):0)mi((c[h+24>>2]|0)+24|0,c[h>>2]|0,0)|0;g=c[h+36>>2]|0;if(g|0)ni(a,g);g=c[h+40>>2]|0;if(g|0)ri(a,g);g=c[h+16>>2]|0;do if(g|0){if(!j){if(c[m>>2]|0){Xd(a,g);break}p=g;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[g>>2]=c[i>>2];c[i>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{p=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}while(0);p=h+55|0;do if(((d[p>>0]|d[p+1>>0]<<8)&16)!=0?(k=c[h+32>>2]|0,(k|0)!=0):0){if(!j){if(c[m>>2]|0){Xd(a,k);p=33;break}p=k;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[k>>2]=c[i>>2];c[i>>2]=k;p=33;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](k);p=32;break}else{p=Wa[c[29352>>2]&127](k)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](k);p=32;break}}else p=32;while(0);if((p|0)==32)if(j)p=38;else p=33;do if((p|0)==33){p=0;if(c[m>>2]|0){Xd(a,h);break}g=h;if((c[n>>2]|0)>>>0<=g>>>0?(c[o>>2]|0)>>>0>g>>>0:0){c[h>>2]=c[i>>2];c[i>>2]=h}else p=38}while(0);do if((p|0)==38){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{g=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-g;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0)}while((f|0)!=0)}f=c[e+16>>2]|0;if(f|0){k=(a|0)==0;l=a+480|0;m=e+72|0;n=a+304|0;o=a+308|0;j=a+300|0;i=f;while(1){if(!(!k?(c[l>>2]|0)!=0:0)){h=i+16|0;f=c[h>>2]|0;g=i+12|0;if(!f){p=c[g>>2]|0;mi((c[m>>2]|0)+56|0,c[((p|0)==0?i:p)+8>>2]|0,p)|0}else c[f+12>>2]=c[g>>2];f=c[g>>2]|0;if(f|0)c[f+16>>2]=c[h>>2]}h=c[i+28>>2]|0;do if(h|0){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);if(!k){if(c[l>>2]|0){Xd(a,h);break}p=h;if((c[n>>2]|0)>>>0<=p>>>0?(c[o>>2]|0)>>>0>p>>>0:0){c[h>>2]=c[j>>2];c[j>>2]=h;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);break}}while(0);h=c[i+32>>2]|0;a:do if(h){g=c[h+28>>2]|0;f=c[g+16>>2]|0;if(f|0)ni(a,f);f=c[g+20>>2]|0;if(f|0)ri(a,f);f=c[g+8>>2]|0;if(f|0)pi(a,f,1);f=c[h+12>>2]|0;if(f|0)ni(a,f);do if(!k){if(!(c[l>>2]|0)){f=h;if((c[n>>2]|0)>>>0>f>>>0)break;if((c[o>>2]|0)>>>0<=f>>>0)break;c[h>>2]=c[j>>2];c[j>>2]=h}else Xd(a,h);f=c[i+4>>2]|0;p=89;break a}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](h);p=88;break}else{p=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);p=88;break}}else p=88;while(0);if((p|0)==88){f=c[i+4>>2]|0;if(k)p=94;else p=89}do if((p|0)==89){p=0;if(c[l>>2]|0){Xd(a,i);break}h=i;if((c[n>>2]|0)>>>0<=h>>>0?(c[o>>2]|0)>>>0>h>>>0:0){c[i>>2]=c[j>>2];c[j>>2]=i}else p=94}while(0);do if((p|0)==94){p=0;if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{h=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-h;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}}while(0);if(!f)break;else i=f}}m=e+4|0;g=c[m>>2]|0;do if(g|0){n=e+42|0;b:do if((b[n>>1]|0)>0){i=a+480|0;j=a+304|0;k=a+308|0;l=a+300|0;if(!a){h=0;while(1){f=c[g>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);f=c[g+4>>2]|0;if(f|0)ni(0,f);f=c[g+8>>2]|0;do if(f|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break b;else g=g+16|0}}h=0;while(1){f=c[g>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[g+4>>2]|0;if(f|0)ni(a,f);f=c[g+8>>2]|0;do if(f|0){if(c[i>>2]|0){Xd(a,f);break}o=f;if((c[j>>2]|0)>>>0<=o>>>0?(c[k>>2]|0)>>>0>o>>>0:0){c[f>>2]=c[l>>2];c[l>>2]=f;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);h=h+1|0;if((h|0)>=(b[n>>1]|0))break;else g=g+16|0}}while(0);f=c[m>>2]|0;if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}}while(0);f=c[e>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+20>>2]|0;do if(f|0){if(a|0){if(c[a+480>>2]|0){Xd(a,f);break}o=f;if((c[a+304>>2]|0)>>>0<=o>>>0?(c[a+308>>2]|0)>>>0>o>>>0:0){o=a+300|0;c[f>>2]=c[o>>2];c[o>>2]=f;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](f);break}else{o=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);break}}while(0);f=c[e+12>>2]|0;if(f|0)pi(a,f,1);f=c[e+24>>2]|0;if(f|0)ri(a,f);n=(a|0)==0;if(!(!n?(c[a+480>>2]|0)!=0:0))p=171;if((p|0)==171?(r=e+64|0,q=c[r>>2]|0,c[r>>2]=0,q|0):0){f=q;do{h=c[f>>2]|0;i=f+24|0;g=f;f=c[i>>2]|0;if(!h){c[r>>2]=g;c[i>>2]=0}else{q=h+360|0;c[i>>2]=c[q>>2];c[q>>2]=g}}while((f|0)!=0)}l=e+60|0;c:do if(c[l>>2]|0){m=e+56|0;d:do if((c[m>>2]|0)>0){h=a+480|0;i=a+304|0;j=a+308|0;k=a+300|0;if(n){f=0;while(1){do if((f|0)!=1?(s=c[(c[l>>2]|0)+(f<<2)>>2]|0,s|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](s);break}else{t=Wa[c[29352>>2]&127](s)|0;c[14978]=(c[14978]|0)-t;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](s);break}while(0);f=f+1|0;if((f|0)>=(c[m>>2]|0))break d}}f=0;do{e:do if((f|0)!=1?(t=c[(c[l>>2]|0)+(f<<2)>>2]|0,t|0):0){if(c[h>>2]|0){Xd(a,t);break}g=t;do if((c[i>>2]|0)>>>0<=g>>>0){if((c[j>>2]|0)>>>0<=g>>>0)break;c[t>>2]=c[k>>2];c[k>>2]=t;break e}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](t);break}else{s=Wa[c[29352>>2]&127](t)|0;c[14978]=(c[14978]|0)-s;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](t);break}}while(0);f=f+1|0}while((f|0)<(c[m>>2]|0))}while(0);f=c[l>>2]|0;if(f){do if(!n){if(!(c[a+480>>2]|0)){g=f;if((c[a+304>>2]|0)>>>0>g>>>0)break;if((c[a+308>>2]|0)>>>0<=g>>>0)break;t=a+300|0;c[f>>2]=c[t>>2];c[t>>2]=f}else Xd(a,f);f=e;p=211;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](f);p=210;break}else{p=Wa[c[29352>>2]&127](f)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](f);p=210;break}}else p=210}else p=210;while(0);if((p|0)==210)if(!n){f=e;p=211}if((p|0)==211){if(c[a+480>>2]|0){Xd(a,f);return}t=e;if((c[a+304>>2]|0)>>>0<=t>>>0?(c[a+308>>2]|0)>>>0>t>>>0:0){a=a+300|0;c[e>>2]=c[a>>2];c[a>>2]=e;return}else e=f}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);return}else{a=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-a;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);return}}function Wi(d,f){d=d|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;t=c[d>>2]|0;r=d+144|0;h=b[r>>1]|0;do if(h<<16>>16){q=d+116|0;g=c[q>>2]|0;a:do if(g|0){p=g+(((h&65535)<<1)*40|0)|0;k=c[g+32>>2]|0;l=k+480|0;h=(k|0)==0;m=k+304|0;n=k+308|0;o=k+300|0;if(c[l>>2]|0){if(h)while(1){do if(c[g+24>>2]|0?(i=c[g+20>>2]|0,i|0):0)if(!(c[7324]|0)){ab[c[29344>>2]&127](i);break}else{o=Wa[c[29352>>2]&127](i)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](i);break}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}while(1){do if(c[g+24>>2]|0?(j=c[g+20>>2]|0,j|0):0){if(c[l>>2]|0){Xd(k,j);break}i=j;if((c[m>>2]|0)>>>0<=i>>>0?(c[n>>2]|0)>>>0>i>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{i=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-i;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}while(0);g=g+40|0;if(g>>>0>=p>>>0)break a}}if(h)while(1){h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{o=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-o;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0;if(g>>>0>=p>>>0)break a}do{h=g+8|0;if(!(b[h>>1]&9216)){i=g+24|0;if(c[i>>2]|0){j=c[g+20>>2]|0;do if(!(c[l>>2]|0)){u=j;if((c[m>>2]|0)>>>0<=u>>>0?(c[n>>2]|0)>>>0>u>>>0:0){c[j>>2]=c[o>>2];c[o>>2]=j;break}if(j|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{u=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}else Xd(k,j);while(0);c[i>>2]=0}}else Cg(g);b[h>>1]=128;g=g+40|0}while(g>>>0

      >>0)}while(0);g=c[q>>2]|0;if(g|0){if(t|0){if(c[t+480>>2]|0){Xd(t,g);break}u=g;if((c[t+304>>2]|0)>>>0<=u>>>0?(c[t+308>>2]|0)>>>0>u>>>0:0){u=t+300|0;c[g>>2]=c[u>>2];c[u>>2]=g;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](g);break}else{u=Wa[c[29352>>2]&127](g)|0;c[14978]=(c[14978]|0)-u;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](g);break}}}while(0);b[r>>1]=f;i=f*80|0;b:do if(c[t+272>>2]|0)if(!(a[t+81>>0]|0))s=71;else{c[d+116>>2]=0;return}else{do if(!(0<0|(0==0?(e[t+276>>1]|0)>>>0>>0:0))){h=t+300|0;g=c[h>>2]|0;if(g|0){c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}h=t+296|0;g=c[h>>2]|0;if(!g){g=t+292|0;break}else{c[h>>2]=c[g>>2];u=t+284|0;c[u>>2]=(c[u>>2]|0)+1;break b}}else g=t+288|0;while(0);c[g>>2]=(c[g>>2]|0)+1;s=71}while(0);if((s|0)==71)g=_d(t,i,0)|0;c[d+116>>2]=g;if(!((f|0)>0&(g|0)!=0))return;h=f<<1;while(1){c[g+32>>2]=t;b[g+8>>1]=1;c[g+24>>2]=0;if((h|0)>1){h=h+-1|0;g=g+40|0}else break}return}function Xi(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;if(!b)return;i=(a|0)==0;j=a+480|0;k=a+304|0;l=a+308|0;m=a+300|0;do{h=b;b=c[b+36>>2]|0;d=c[h+16>>2]|0;if(d|0)ni(a,d);d=c[h+20>>2]|0;if(d|0)ri(a,d);d=c[h+8>>2]|0;if(d|0)pi(a,d,1);d=c[h+24>>2]|0;do if(d|0){g=d+4|0;e=c[d>>2]|0;a:do if((c[g>>2]|0)>0){if(i){f=0;while(1){e=c[e+(f<<3)>>2]|0;do if(e|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}while(0);f=f+1|0;e=c[d>>2]|0;if((f|0)>=(c[g>>2]|0))break a}}f=0;do{e=c[e+(f<<3)>>2]|0;do if(e|0){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);f=f+1|0;e=c[d>>2]|0}while((f|0)<(c[g>>2]|0))}while(0);b:do if(e){do if(!i){if(!(c[j>>2]|0)){f=e;if((c[k>>2]|0)>>>0>f>>>0)break;if((c[l>>2]|0)>>>0<=f>>>0)break;c[e>>2]=c[m>>2];c[m>>2]=e}else Xd(a,e);e=41;break b}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](e);e=40;break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);e=40;break}}else e=40;while(0);if((e|0)==40){e=0;if(!i)e=41}if((e|0)==41){if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d;break}}if(d|0)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}}while(0);e=c[h+28>>2]|0;do if(e|0){d=c[e>>2]|0;if(d|0)ri(a,d);d=c[e+4>>2]|0;if(d|0)ni(a,d);d=c[e+8>>2]|0;if(d|0)ri(a,d);d=c[e+12>>2]|0;if(d|0)ni(a,d);if(!i){if(c[j>>2]|0){Xd(a,e);break}n=e;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[e>>2]=c[m>>2];c[m>>2]=e;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](e);break}else{n=Wa[c[29352>>2]&127](e)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](e);break}}while(0);d=c[h+32>>2]|0;c:do if(d){do if(!i){if(!(c[j>>2]|0)){e=d;if((c[k>>2]|0)>>>0>e>>>0)break;if((c[l>>2]|0)>>>0<=e>>>0)break;c[d>>2]=c[m>>2];c[m>>2]=d}else Xd(a,d);d=h;e=80;break c}while(0);if(!(c[7324]|0)){ab[c[29344>>2]&127](d);e=79;break}else{e=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-e;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);e=79;break}}else e=79;while(0);if((e|0)==79)if(i){d=h;e=85}else{d=h;e=80}do if((e|0)==80){e=0;if(c[j>>2]|0){Xd(a,d);break}n=d;if((c[k>>2]|0)>>>0<=n>>>0?(c[l>>2]|0)>>>0>n>>>0:0){c[d>>2]=c[m>>2];c[m>>2]=d}else e=85}while(0);do if((e|0)==85)if(!(c[7324]|0)){ab[c[29344>>2]&127](d);break}else{n=Wa[c[29352>>2]&127](d)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](d);break}while(0)}while((b|0)!=0);return}function Yi(e,f){e=e|0;f=f|0;var g=0,h=0,i=0,j=0,k=0,l=0,m=0;l=c[e>>2]|0;a:do if(f){b:while(1){g=a[f>>0]|0;j=c[f+4>>2]|0;if(j&512|0){f=0;break a}if(g<<24>>24==-88)g=d[f+38>>0]|0;else g=g&255;switch((g&255)<<24>>24){case 106:{m=11;break b}case 77:case -94:case -92:{h=c[f+44>>2]|0;if(h|0){m=8;break b}if((g|0)==106){m=11;break b}else m=12;break}case 36:case -90:{f=c[f+12>>2]|0;break}default:m=12}c:do if((m|0)==12){m=0;if(!(j&256)){f=0;break a}g=c[f+12>>2]|0;if(g|0?c[g+4>>2]&256|0:0){f=g;break}i=c[f+16>>2]|0;h=c[f+20>>2]|0;if((j&2048|0)==0&(h|0)!=0?(k=c[h>>2]|0,(k|0)>0):0){g=0;while(1){f=c[h+4+(g*20|0)>>2]|0;g=g+1|0;if(c[f+4>>2]&256|0)break c;if((g|0)>=(k|0)){f=i;break}}}else f=i}while(0);if(!f){f=0;break a}}if((m|0)==8){f=b[f+32>>1]|0;if(f<<16>>16<=-1){f=0;break}f=Zi(l,a[l+78>>0]|0,c[(c[h+4>>2]|0)+(f<<16>>16<<4)+8>>2]|0,0)|0}else if((m|0)==11)f=_i(e,a[l+78>>0]|0,0,c[f+8>>2]|0)|0;if(f){if((c[f+12>>2]|0)==0?(_i(e,a[(c[e>>2]|0)+78>>0]|0,f,c[f>>2]|0)|0)==0:0){e=0;return e|0}}else f=0}else f=0;while(0);e=f;return e|0}function Zi(b,f,g,h){b=b|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;if(!g){g=c[b+8>>2]|0;p=(g|0)==0;b=f&255;b=b+-1|0;b=g+(b*20|0)|0;b=p?0:b;return b|0}p=b+380|0;l=c[b+392>>2]|0;if(!l){j=b+384|0;i=b+388|0}else{j=a[g>>0]|0;if(!(j<<24>>24))i=0;else{i=0;k=g;do{k=k+1|0;i=G(i+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}i=(i>>>0)%((c[p>>2]|0)>>>0)|0;j=l+(i<<3)|0;i=l+(i<<3)+4|0}j=c[j>>2]|0;a:do if(!j)i=59292;else{n=d[208+(d[g>>0]|0)>>0]|0;while(1){i=c[i>>2]|0;j=j+-1|0;l=c[i+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=g;do{l=l+1|0;m=m+1|0;q=a[l>>0]|0;k=(d[208+(q&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(q<<24>>24==0|(k|0)!=0))}if(!k)break a;if(!j){i=59292;break}}}while(0);i=c[i+8>>2]|0;if(!((h|0)!=0&(i|0)==0)){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}l=(Eu(g)|0)&1073741823;m=l+61|0;b:do if(!b){if(!(c[7324]|0)){i=Wa[c[29340>>2]&127](m)|0;o=39;break}i=Wa[c[29356>>2]&127](m)|0;if((c[14985]|0)>>>0>>0)c[14985]=m;k=59064;j=c[k>>2]|0;k=c[k+4>>2]|0;if((k|0)>0|(k|0)==0&j>>>0>0){q=c[14978]|0;h=Tv(j|0,k|0,i|0,((i|0)<0)<<31>>31|0)|0;n=L()|0;c[14768]=((n|0)<0|(n|0)==0&h>>>0<=q>>>0)&1}i=Wa[c[29340>>2]&127](i)|0;if(!i)return 0;j=Wa[c[29352>>2]&127](i)|0;j=(c[14978]|0)+j|0;c[14978]=j;if(j>>>0>(c[14982]|0)>>>0)c[14982]=j;j=(c[14981]|0)+1|0;c[14981]=j;if(j>>>0>(c[14987]|0)>>>0)c[14987]=j}else{if(c[b+272>>2]|0){if(a[b+81>>0]|0)return 0}else{do if(!(0<0|(0==0?(e[b+276>>1]|0)>>>0>>0:0))){j=b+300|0;i=c[j>>2]|0;if(i|0){c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}j=b+296|0;i=c[j>>2]|0;if(!i){i=b+292|0;break}else{c[j>>2]=c[i>>2];o=b+284|0;c[o>>2]=(c[o>>2]|0)+1;o=39;break b}}else i=b+288|0;while(0);c[i>>2]=(c[i>>2]|0)+1}i=_d(b,m,0)|0;o=39}while(0);if((o|0)==39)if(!i)return 0;gw(i|0,0,m|0)|0;j=i+60|0;c[i>>2]=j;a[i+4>>0]=1;c[i+20>>2]=j;a[i+24>>0]=2;c[i+40>>2]=j;a[i+44>>0]=3;ew(j|0,g|0,l+1|0)|0;j=mi(p,j,i)|0;if(!j){p=i;b=(p|0)==0;q=f&255;q=q+-1|0;q=p+(q*20|0)|0;q=b?0:q;return q|0}i=b+81|0;if((a[i>>0]|0)==0?(a[b+82>>0]|0)==0:0){a[i>>0]=1;if((c[b+180>>2]|0)>0)c[b+264>>2]=1;i=b+272|0;c[i>>2]=(c[i>>2]|0)+1;i=c[b+236>>2]|0;if(i|0)c[i+12>>2]=7}if(c[b+480>>2]|0){Xd(b,j);return 0}q=j;if((c[b+304>>2]|0)>>>0<=q>>>0?(c[b+308>>2]|0)>>>0>q>>>0:0){q=b+300|0;c[j>>2]=c[q>>2];c[q>>2]=j;return 0}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);return 0}else{q=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-q;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);return 0}return 0}function _i(f,g,h,i){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;s=Ra;Ra=Ra+16|0;r=s;q=c[f>>2]|0;if(!h){h=Zi(q,g,i,0)|0;if(h|0){j=h;n=3}}else{j=h;n=3}if((n|0)==3?c[j+12>>2]|0:0){r=j;Ra=s;return r|0}k=g&255;l=q+248|0;a:do if(c[l>>2]|0){if(i|0){m=(Eu(i)|0)+1|0;b:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=16;else break a;else{do if(!(0<0|(0==0?(e[q+276>>1]|0)>>>0>>0:0))){j=q+300|0;h=c[j>>2]|0;if(h|0){c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}j=q+296|0;h=c[j>>2]|0;if(!h){h=q+292|0;break}else{c[j>>2]=c[h>>2];j=q+284|0;c[j>>2]=(c[j>>2]|0)+1;break b}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=16}while(0);if((n|0)==16)h=_d(q,m,0)|0;if(h|0){ew(h|0,i|0,m|0)|0;db[c[l>>2]&127](c[q+256>>2]|0,q,k,h);if(c[q+480>>2]|0){Xd(q,h);n=26;break}n=h;if((c[q+304>>2]|0)>>>0<=n>>>0?(c[q+308>>2]|0)>>>0>n>>>0:0){n=q+300|0;c[h>>2]=c[n>>2];c[n>>2]=h;n=26;break}if(!(c[7324]|0)){ab[c[29344>>2]&127](h);n=26;break}else{n=Wa[c[29352>>2]&127](h)|0;c[14978]=(c[14978]|0)-n;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](h);n=26;break}}}}else n=26;while(0);c:do if((n|0)==26?(p=q+252|0,c[p>>2]|0):0){d:do if(c[q+272>>2]|0)if(!(a[q+81>>0]|0))n=37;else break c;else{do if((e[q+276>>1]|0)>=40){h=q+300|0;j=c[h>>2]|0;if(j|0){c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}h=q+296|0;j=c[h>>2]|0;if(!j){h=q+292|0;break}else{c[h>>2]=c[j>>2];m=q+284|0;c[m>>2]=(c[m>>2]|0)+1;break d}}else h=q+288|0;while(0);c[h>>2]=(c[h>>2]|0)+1;n=37}while(0);if((n|0)==37)j=_d(q,40,0)|0;if(j|0){h=j;k=h+40|0;do{a[h>>0]=0;h=h+1|0}while((h|0)<(k|0));h=j+8|0;b[h>>1]=1;k=j+32|0;c[k>>2]=q;yc(j,i,-1,1,0)|0;l=b[h>>1]|0;if((l&514)==514?(a[j+10>>0]|0)==2:0){o=c[j+16>>2]|0;n=44}else n=42;if((n|0)==42?(l&1)==0:0){o=Gg(j,2)|0;n=44}if((n|0)==44?o|0:0)db[c[p>>2]&127](c[q+256>>2]|0,q,d[q+78>>0]|0,o);if(!((b[h>>1]&9216)==0?!(c[j+24>>2]|0):0))Cg(j);h=c[k>>2]|0;if(h|0){if(c[h+480>>2]|0){Xd(h,j);break}p=j;if((c[h+304>>2]|0)>>>0<=p>>>0?(c[h+308>>2]|0)>>>0>p>>>0:0){p=h+300|0;c[j>>2]=c[p>>2];c[p>>2]=j;break}}if(!(c[7324]|0)){ab[c[29344>>2]&127](j);break}else{p=Wa[c[29352>>2]&127](j)|0;c[14978]=(c[14978]|0)-p;c[14981]=(c[14981]|0)+-1;ab[c[29344>>2]&127](j);break}}}while(0);g=Zi(q,g,i,0)|0;do if(g|0){if(c[g+12>>2]|0){r=g;Ra=s;return r|0}p=c[g>>2]|0;o=(p|0)==0;if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;e:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;m=a[l>>0]|0;k=(d[208+(m&255)>>0]|0)-n|0;if(!(m<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break e;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+40|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;f:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break f;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;h=(h|0)==0?0:h+20|0;if(!(c[h+12>>2]|0)){if(o)h=q+8|0;else{l=c[q+392>>2]|0;if(!l){j=q+384|0;h=q+388|0}else{j=a[p>>0]|0;if(!(j<<24>>24))h=0;else{h=0;k=p;do{k=k+1|0;h=G(h+(d[208+(j&255)>>0]|0)|0,-1640531535)|0;j=a[k>>0]|0}while(j<<24>>24!=0)}h=(h>>>0)%((c[q+380>>2]|0)>>>0)|0;j=l+(h<<3)|0;h=l+(h<<3)+4|0}j=c[j>>2]|0;g:do if(!j)h=59292;else{n=d[208+(d[p>>0]|0)>>0]|0;while(1){h=c[h>>2]|0;j=j+-1|0;l=c[h+12>>2]|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-n|0;if(!(t<<24>>24==0|(k|0)!=0)){m=p;do{l=l+1|0;m=m+1|0;t=a[l>>0]|0;k=(d[208+(t&255)>>0]|0)-(d[208+(d[m>>0]|0)>>0]|0)|0}while(!(t<<24>>24==0|(k|0)!=0))}if(!k)break g;if(!j){h=59292;break}}}while(0);h=h+8|0}h=c[h>>2]|0;if(!(c[h+12>>2]|0))break}};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]=0;t=g;Ra=s;return t|0}while(0);c[r>>2]=i;cd(f,38397,r);c[f+12>>2]=257;t=0;Ra=s;return t|0} // EMSCRIPTEN_END_FUNCS var Va=[GK,jw,kw,lw,mw,nw,ow,pw,qw,rw,sw,tw,uw,vw,ww,xw,yw,zw,Aw,Bw,Cw,Dw,Ew,Fw,Gw,Hw,Iw,Jw,Kw,Lw,Mw,Nw,Ow,Pw,Qw,Rw,Sw,Tw,Uw,Vw,Ww,Xw,Yw,Zw,_w,$w,ax,bx,cx,dx,ex,fx,gx,hx,ix,jx,kx,lx,mx,nx,ox,px,qx,rx,sx,Dv,we,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK,GK];var Wa=[HK,ux,vx,wx,xx,yx,zx,Ax,Bx,Cx,Dx,Ex,Fx,Gx,Hx,Ix,Jx,Kx,Lx,Mx,Nx,Ox,Px,Qx,Rx,Sx,Tx,Ux,Vx,Wx,Xx,Yx,Zx,_x,$x,ay,by,cy,dy,ey,fy,gy,hy,iy,jy,ky,ly,my,ny,oy,py,qy,ry,sy,ty,uy,vy,wy,xy,yy,zy,Ay,By,Cy,Dy,be,le,me,Nu,Bv,Ev,Be,Fe,Ze,Ki,Mi,Oi,Pi,ep,hp,ip,jp,lp,pp,Dq,Eq,Gq,Iq,Jq,Nq,Oq,Pq,Qq,Wq,Hp,Jp,Op,Qp,Sp,Tp,mq,oq,rq,tq,ks,ms,os,ps,Ds,Es,Gs,Is,Js,Ns,Os,Rs,rb,Re,HK,HK,HK,HK,HK,HK,HK,HK,HK,HK];var Xa=[IK,Fy,Gy,Hy,Iy,Jy,Ky,Ly,My,Ny,Oy,Py,Qy,Ry,Sy,Ty,Uy,Vy,Wy,Xy,Yy,Zy,_y,$y,az,bz,cz,dz,ez,fz,gz,hz,iz,jz,kz,lz,mz,nz,oz,pz,qz,rz,sz,tz,uz,vz,wz,xz,yz,zz,Az,Bz,Cz,Dz,Ez,Fz,Gz,Hz,Iz,Jz,Kz,Lz,Mz,Nz,Oz,Ob,Pb,Rb,Tb,Ub,ae,Je,Ke,fe,ge,he,ie,je,qe,Qu,Zu,Pu,Xu,yv,Kv,ve,fv,gv,Ou,Ce,De,Ee,Ge,He,Ie,bf,cf,Ji,Li,Ri,gp,Cq,Fq,Lq,Sq,Tq,Uq,Vq,Np,Pp,Vp,js,ls,rs,Cs,Fs,Ls,Ps,Qs,Ue,If,Kf,Yg,Zg,$k,Dk,Ek,Yj,Zj,vl,wl,Gl,Yk,Cm,Dm,Am,Vm,kk,lk,Jk,Hk,Mk,Nk,Ok,_k,xl,Sl,nm,fm,Bm,jo,ko,so,to,_p,$p,Zp,iq,hq,yt,zt,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK,IK];var Ya=[JK,Qz,Rz,Sz,Tz,Uz,Vz,Wz,Xz,Yz,Zz,_z,$z,aA,bA,cA,dA,eA,fA,gA,hA,iA,jA,kA,lA,mA,nA,oA,pA,qA,rA,sA,tA,uA,vA,wA,xA,yA,zA,AA,BA,CA,DA,EA,FA,GA,HA,IA,JA,KA,LA,MA,NA,OA,PA,QA,RA,SA,TA,UA,VA,WA,XA,YA,ZA,Kb,Nb,Qb,Sb,ee,ke,ue,Iu,$u,_u,Cv,Wu,af,Qi,np,qp,Kq,Gp,Up,lq,qq,qs,Ks,Ch,Dh,Eh,Dd,Yr,Xr,as,bs,gs,es,fs,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK,JK];var Za=[KK,$A,aB,bB,cB,dB,eB,fB,gB,hB,iB,jB,kB,lB,mB,nB,oB,pB,qB,rB,sB,tB,uB,vB,wB,xB,yB,zB,AB,BB,CB,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,Lb,Mb,oe,se,Mq,Ip,nq,sq,Ms,qf,pf,Ld,fh,ki,aq,bq,kd,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK,KK];var _a=[LK,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,LC,MC,NC,OC,PC,QC,RC,SC,TC,UC,VC,WC,XC,YC,ZC,_C,$C,aD,bD,cD,dD,eD,fD,gD,hD,iD,jD,kD,lD,mD,nD,oD,pD,qD,rD,sD,tD,Jb,ce,de,ne,re,_e,$e,Ni,Hq,Rq,Rp,ns,Hs,Hl,Dp,gt,ht,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK,LK];var $a=[MK,vD,wD,xD,yD,zD,AD,BD,CD,DD,ED,FD,GD,HD,ID,JD,KD,LD,MD,ND,OD,PD,QD,RD,SD,TD,UD,VD,WD,XD,YD,ZD,_D,$D,aE,bE,cE,dE,eE,fE,gE,hE,iE,jE,kE,lE,mE,nE,oE,pE,qE,rE,sE,tE,uE,vE,wE,xE,yE,zE,AE,BE,CE,DE,EE,Lv,Ii,Aq,Bq,Kp,Mp,pq,uq,is,As,Bs,Xh,Yh,Wh,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK,MK];var ab=[NK,GE,HE,IE,JE,KE,LE,ME,NE,OE,PE,QE,RE,SE,TE,UE,VE,WE,XE,YE,ZE,_E,$E,aF,bF,cF,dF,eF,fF,gF,hF,iF,jF,kF,lF,mF,nF,oF,pF,qF,rF,sF,tF,uF,vF,wF,xF,yF,zF,AF,BF,CF,DF,EF,FF,GF,HF,IF,JF,KF,LF,MF,NF,OF,PF,pe,wn,xn,Wn,Yn,Zn,$n,co,eo,vo,xo,zo,Bo,Eo,Ho,Ko,Lo,Oo,Po,Ro,fp,kp,mp,up,vp,qb,Fp,Qe,ih,vi,dh,ln,Qg,cs,mt,nt,pt,qt,rt,st,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK,NK];var bb=[OK,RF,SF,TF,UF,VF,WF,XF,YF,ZF,_F,$F,aG,bG,cG,dG,eG,fG,gG,hG,iG,jG,kG,lG,mG,nG,oG,pG,qG,rG,sG,tG,uG,vG,wG,xG,yG,zG,AG,BG,CG,DG,EG,FG,GG,HG,IG,JG,KG,LG,MG,NG,OG,PG,QG,RG,SG,TG,UG,VG,WG,XG,YG,ZG,_G,op,tp,Em,Pk,Zk,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK,OK];var cb=[PK,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,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,eI,fI,gI,hI,iI,jI,bn,fn,kn,mn,nn,qn,rn,sn,tn,un,vn,yn,zn,An,Bn,Cn,Dn,En,Fn,Gn,Hn,In,Jn,Kn,Ln,Mn,Nn,On,Pn,Qn,Rn,Sn,Tn,Un,Vn,Xn,_n,ao,bo,fo,$m,go,ho,io,uo,xm,wo,yo,Ao,Co,Do,Fo,Go,Io,Jo,Mo,No,Qo,So,To,Uo,Vo,Wo,Xo,Yo,Zo,rp,Tr,Ur,Vr,Wr,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,_t,$t,au,bu,cu,du,eu,fu,gu,hu,iu,ju,Kd,zq,ss,ts,us,Mf,Jf,Lf,lt,ot,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK,PK];var db=[QK,lI,mI,nI,oI,pI,qI,rI,sI,tI,uI,vI,wI,xI,yI,zI,AI,BI,CI,DI,EI,FI,GI,HI,II,JI,KI,LI,MI,NI,OI,PI,QI,RI,SI,TI,UI,VI,WI,XI,YI,ZI,_I,$I,aJ,bJ,cJ,dJ,eJ,fJ,gJ,hJ,iJ,jJ,kJ,lJ,mJ,nJ,oJ,pJ,qJ,rJ,sJ,tJ,uJ,sp,Tj,tk,xt,ut,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK,QK];var eb=[RK,wJ,xJ,yJ,zJ,AJ,BJ,CJ,DJ,EJ,FJ,GJ,HJ,IJ,JJ,KJ,LJ,MJ,NJ,OJ,PJ,QJ,RJ,SJ,TJ,UJ,VJ,WJ,XJ,YJ,ZJ,_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,CK,DK,EK,FK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK,RK];return{_RegisterExtensionFunctions:kt,___divdi3:Wv,___emscripten_environ_constructor:Nv,___errno_location:uu,___muldi3:Yv,___remdi3:Zv,___udivdi3:_v,___uremdi3:$v,__get_daylight:Pv,__get_environ:Rv,__get_timezone:Qv,__get_tzname:Ov,_bitshift64Ashr:aw,_bitshift64Lshr:bw,_bitshift64Shl:cw,_emscripten_replace_memory:Ua,_free:mu,_i64Add:Sv,_i64Subtract:Tv,_llvm_bswap_i32:dw,_malloc:lu,_memalign:ru,_memcpy:ew,_memmove:fw,_memset:gw,_sbrk:hw,_sqlite3_bind_blob:Sc,_sqlite3_bind_double:Uc,_sqlite3_bind_int:Wc,_sqlite3_bind_parameter_index:Zc,_sqlite3_bind_text:Xc,_sqlite3_changes:Ad,_sqlite3_clear_bindings:lc,_sqlite3_close_v2:Cd,_sqlite3_column_blob:Kc,_sqlite3_column_bytes:Lc,_sqlite3_column_double:Mc,_sqlite3_column_name:Rc,_sqlite3_column_text:Pc,_sqlite3_column_type:Qc,_sqlite3_create_function_v2:Gd,_sqlite3_data_count:Jc,_sqlite3_errmsg:pd,_sqlite3_exec:nd,_sqlite3_finalize:gc,_sqlite3_free:qb,_sqlite3_open:Od,_sqlite3_prepare_v2:od,_sqlite3_reset:jc,_sqlite3_result_blob:vc,_sqlite3_result_double:wc,_sqlite3_result_error:xc,_sqlite3_result_int:zc,_sqlite3_result_int64:Ac,_sqlite3_result_null:Bc,_sqlite3_result_text:Cc,_sqlite3_step:Gc,_sqlite3_value_blob:mc,_sqlite3_value_bytes:oc,_sqlite3_value_double:pc,_sqlite3_value_int:qc,_sqlite3_value_text:nc,_sqlite3_value_type:sc,dynCall_i:iw,dynCall_ii:tx,dynCall_iii:Ey,dynCall_iiii:Pz,dynCall_iiiii:_A,dynCall_iiiiii:jC,dynCall_iiiiiii:uD,dynCall_vi:FE,dynCall_vii:QF,dynCall_viii:$G,dynCall_viiii:kI,dynCall_viiiiii:vJ,establishStackSpace:ib,stackAlloc:fb,stackRestore:hb,stackSave:gb}}) // EMSCRIPTEN_END_ASM (Zc,bd,buffer);f._RegisterExtensionFunctions=Z._RegisterExtensionFunctions;f.___divdi3=Z.___divdi3;var lb=f.___emscripten_environ_constructor=Z.___emscripten_environ_constructor;f.___errno_location=Z.___errno_location;f.___muldi3=Z.___muldi3;f.___remdi3=Z.___remdi3;f.___udivdi3=Z.___udivdi3;f.___uremdi3=Z.___uremdi3;var Tc=f.__get_daylight=Z.__get_daylight;f.__get_environ=Z.__get_environ; var Sc=f.__get_timezone=Z.__get_timezone,Uc=f.__get_tzname=Z.__get_tzname;f._bitshift64Ashr=Z._bitshift64Ashr;f._bitshift64Lshr=Z._bitshift64Lshr;f._bitshift64Shl=Z._bitshift64Shl;f._emscripten_replace_memory=Z._emscripten_replace_memory;var fa=f._free=Z._free;f._i64Add=Z._i64Add;f._i64Subtract=Z._i64Subtract;f._llvm_bswap_i32=Z._llvm_bswap_i32;var Wa=f._malloc=Z._malloc,$c=f._memalign=Z._memalign;f._memcpy=Z._memcpy;f._memmove=Z._memmove;var ad=f._memset=Z._memset;f._sbrk=Z._sbrk; f._sqlite3_bind_blob=Z._sqlite3_bind_blob;f._sqlite3_bind_double=Z._sqlite3_bind_double;f._sqlite3_bind_int=Z._sqlite3_bind_int;f._sqlite3_bind_parameter_index=Z._sqlite3_bind_parameter_index;f._sqlite3_bind_text=Z._sqlite3_bind_text;f._sqlite3_changes=Z._sqlite3_changes;f._sqlite3_clear_bindings=Z._sqlite3_clear_bindings;f._sqlite3_close_v2=Z._sqlite3_close_v2;f._sqlite3_column_blob=Z._sqlite3_column_blob;f._sqlite3_column_bytes=Z._sqlite3_column_bytes;f._sqlite3_column_double=Z._sqlite3_column_double; f._sqlite3_column_name=Z._sqlite3_column_name;f._sqlite3_column_text=Z._sqlite3_column_text;f._sqlite3_column_type=Z._sqlite3_column_type;f._sqlite3_create_function_v2=Z._sqlite3_create_function_v2;f._sqlite3_data_count=Z._sqlite3_data_count;f._sqlite3_errmsg=Z._sqlite3_errmsg;f._sqlite3_exec=Z._sqlite3_exec;f._sqlite3_finalize=Z._sqlite3_finalize;f._sqlite3_free=Z._sqlite3_free;f._sqlite3_open=Z._sqlite3_open;f._sqlite3_prepare_v2=Z._sqlite3_prepare_v2;f._sqlite3_reset=Z._sqlite3_reset; f._sqlite3_result_blob=Z._sqlite3_result_blob;f._sqlite3_result_double=Z._sqlite3_result_double;f._sqlite3_result_error=Z._sqlite3_result_error;f._sqlite3_result_int=Z._sqlite3_result_int;f._sqlite3_result_int64=Z._sqlite3_result_int64;f._sqlite3_result_null=Z._sqlite3_result_null;f._sqlite3_result_text=Z._sqlite3_result_text;f._sqlite3_step=Z._sqlite3_step;f._sqlite3_value_blob=Z._sqlite3_value_blob;f._sqlite3_value_bytes=Z._sqlite3_value_bytes;f._sqlite3_value_double=Z._sqlite3_value_double; f._sqlite3_value_int=Z._sqlite3_value_int;f._sqlite3_value_text=Z._sqlite3_value_text;f._sqlite3_value_type=Z._sqlite3_value_type;f.establishStackSpace=Z.establishStackSpace;var h=f.stackAlloc=Z.stackAlloc,qa=f.stackRestore=Z.stackRestore,na=f.stackSave=Z.stackSave;f.dynCall_i=Z.dynCall_i;f.dynCall_ii=Z.dynCall_ii;f.dynCall_iii=Z.dynCall_iii;f.dynCall_iiii=Z.dynCall_iiii;f.dynCall_iiiii=Z.dynCall_iiiii;f.dynCall_iiiiii=Z.dynCall_iiiiii;f.dynCall_iiiiiii=Z.dynCall_iiiiiii;f.dynCall_vi=Z.dynCall_vi; f.dynCall_vii=Z.dynCall_vii;f.dynCall_viii=Z.dynCall_viii;f.dynCall_viiii=Z.dynCall_viiii;f.dynCall_viiiiii=Z.dynCall_viiiiii;f.asm=Z;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return"number"===a});return"string"!==b&&e&&!d?Qa(a):function(){return Ra(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h; if(H){if(String.prototype.startsWith?!H.startsWith(kb):0!==H.indexOf(kb)){var cd=H;H=f.locateFile?f.locateFile(cd,z):z+cd}if(y||za){var dd=f.readBinary(H);E.set(dd,8)}else{G++;f.monitorRunDependencies&&f.monitorRunDependencies(G);var ed=function(a){a.byteLength&&(a=new Uint8Array(a));E.set(a,8);f.memoryInitializerRequest&&delete f.memoryInitializerRequest.response;G--;f.monitorRunDependencies&&f.monitorRunDependencies(G);0==G&&(null!==ib&&(clearInterval(ib),ib=null),jb&&(a=jb,jb=null,a()))},fd=function(){f.readAsync(H, ed,function(){throw"could not load memory initializer "+H;})},gd=B(H);if(gd)ed(gd.buffer);else if(f.memoryInitializerRequest){var hd=function(){var a=f.memoryInitializerRequest,b=a.response;if(200!==a.status&&0!==a.status)if(b=B(f.memoryInitializerRequestURL))b=b.buffer;else{console.warn("a problem seems to have happened with Module.memoryInitializerRequest, status: "+a.status+", retrying "+H);fd();return}ed(b)};f.memoryInitializerRequest.response?setTimeout(hd,0):f.memoryInitializerRequest.addEventListener("load", hd)}else fd()}}function id(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}id.prototype=Error();id.prototype.constructor=id;jb=function jd(){f.calledRun||kd();f.calledRun||(jb=jd)}; function kd(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Na)){gb||(gb=!0,f.noFSInit||Ic||(Ic=!0,Hc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Jc("stdin",f.stdin):bc("/dev/tty","/dev/stdin"),f.stdout?Jc("stdout",null,f.stdout):bc("/dev/tty","/dev/stdout"),f.stderr?Jc("stderr",null,f.stderr):bc("/dev/tty1","/dev/stderr"),p("/dev/stdin","r"),p("/dev/stdout","w"),p("/dev/stderr","w")),bb(db));Lb=!1;bb(eb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"== typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();fb.unshift(a)}bb(fb)}}if(!(0 self._pos) { var newData = response.substr(self._pos) if (self._charset === 'x-user-defined') { var buffer = new Buffer(newData.length) for (var i = 0; i < newData.length; i++) buffer[i] = newData.charCodeAt(i) & 0xff self.push(buffer) } else { self.push(newData, self._charset) } self._pos = response.length } break case 'arraybuffer': if (xhr.readyState !== rStates.DONE || !xhr.response) break response = xhr.response self.push(new Buffer(new Uint8Array(response))) break case 'moz-chunked-arraybuffer': // take whole response = xhr.response if (xhr.readyState !== rStates.LOADING || !response) break self.push(new Buffer(new Uint8Array(response))) break case 'ms-stream': response = xhr.response if (xhr.readyState !== rStates.LOADING) break var reader = new global.MSStreamReader() reader.onprogress = function () { if (reader.result.byteLength > self._pos) { self.push(new Buffer(new Uint8Array(reader.result.slice(self._pos)))) self._pos = reader.result.byteLength } } reader.onload = function () { self.push(null) } // reader.onerror = ??? // TODO: this reader.readAsArrayBuffer(response) break } // The ms-stream case handles end separately in reader.onload() if (self._xhr.readyState === rStates.DONE && self._mode !== 'ms-stream') { self.push(null) } } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer) },{"./capability":330,"_process":284,"buffer":182,"inherits":262,"readable-stream":312}],333:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. 'use strict'; /**/ var Buffer = require('safe-buffer').Buffer; /**/ var isEncoding = Buffer.isEncoding || function (encoding) { encoding = '' + encoding; switch (encoding && encoding.toLowerCase()) { case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw': return true; default: return false; } }; function _normalizeEncoding(enc) { if (!enc) return 'utf8'; var retried; while (true) { switch (enc) { case 'utf8': case 'utf-8': return 'utf8'; case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': return 'utf16le'; case 'latin1': case 'binary': return 'latin1'; case 'base64': case 'ascii': case 'hex': return enc; default: if (retried) return; // undefined enc = ('' + enc).toLowerCase(); retried = true; } } }; // Do not cache `Buffer.isEncoding` when checking encoding names as some // modules monkey-patch it to support additional encodings function normalizeEncoding(enc) { var nenc = _normalizeEncoding(enc); if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc); return nenc || enc; } // StringDecoder provides an interface for efficiently splitting a series of // buffers into a series of JS strings without breaking apart multi-byte // characters. exports.StringDecoder = StringDecoder; function StringDecoder(encoding) { this.encoding = normalizeEncoding(encoding); var nb; switch (this.encoding) { case 'utf16le': this.text = utf16Text; this.end = utf16End; nb = 4; break; case 'utf8': this.fillLast = utf8FillLast; nb = 4; break; case 'base64': this.text = base64Text; this.end = base64End; nb = 3; break; default: this.write = simpleWrite; this.end = simpleEnd; return; } this.lastNeed = 0; this.lastTotal = 0; this.lastChar = Buffer.allocUnsafe(nb); } StringDecoder.prototype.write = function (buf) { if (buf.length === 0) return ''; var r; var i; if (this.lastNeed) { r = this.fillLast(buf); if (r === undefined) return ''; i = this.lastNeed; this.lastNeed = 0; } else { i = 0; } if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i); return r || ''; }; StringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer StringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer StringDecoder.prototype.fillLast = function (buf) { if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length); this.lastNeed -= buf.length; }; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a // continuation byte. If an invalid byte is detected, -2 is returned. function utf8CheckByte(byte) { if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4; return byte >> 6 === 0x02 ? -1 : -2; } // Checks at most 3 bytes at the end of a Buffer in order to detect an // incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4) // needed to complete the UTF-8 character (if applicable) are returned. function utf8CheckIncomplete(self, buf, i) { var j = buf.length - 1; if (j < i) return 0; var nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 1; return nb; } if (--j < i || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) self.lastNeed = nb - 2; return nb; } if (--j < i || nb === -2) return 0; nb = utf8CheckByte(buf[j]); if (nb >= 0) { if (nb > 0) { if (nb === 2) nb = 0;else self.lastNeed = nb - 3; } return nb; } return 0; } // Validates as many continuation bytes for a multi-byte UTF-8 character as // needed or are available. If we see a non-continuation byte where we expect // one, we "replace" the validated continuation bytes we've seen so far with // a single UTF-8 replacement character ('\ufffd'), to match v8's UTF-8 decoding // behavior. The continuation byte check is included three times in the case // where all of the continuation bytes for a character exist in the same buffer. // It is also done this way as a slight performance increase instead of using a // loop. function utf8CheckExtraBytes(self, buf, p) { if ((buf[0] & 0xC0) !== 0x80) { self.lastNeed = 0; return '\ufffd'; } if (self.lastNeed > 1 && buf.length > 1) { if ((buf[1] & 0xC0) !== 0x80) { self.lastNeed = 1; return '\ufffd'; } if (self.lastNeed > 2 && buf.length > 2) { if ((buf[2] & 0xC0) !== 0x80) { self.lastNeed = 2; return '\ufffd'; } } } } // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer. function utf8FillLast(buf) { var p = this.lastTotal - this.lastNeed; var r = utf8CheckExtraBytes(this, buf, p); if (r !== undefined) return r; if (this.lastNeed <= buf.length) { buf.copy(this.lastChar, p, 0, this.lastNeed); return this.lastChar.toString(this.encoding, 0, this.lastTotal); } buf.copy(this.lastChar, p, 0, buf.length); this.lastNeed -= buf.length; } // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a // partial character, the character's bytes are buffered until the required // number of bytes are available. function utf8Text(buf, i) { var total = utf8CheckIncomplete(this, buf, i); if (!this.lastNeed) return buf.toString('utf8', i); this.lastTotal = total; var end = buf.length - (total - this.lastNeed); buf.copy(this.lastChar, 0, end); return buf.toString('utf8', i, end); } // For UTF-8, a replacement character is added when ending on a partial // character. function utf8End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + '\ufffd'; return r; } // UTF-16LE typically needs two bytes per character, but even if we have an even // number of bytes available, we need to check if we end on a leading/high // surrogate. In that case, we need to wait for the next two bytes in order to // decode the last character properly. function utf16Text(buf, i) { if ((buf.length - i) % 2 === 0) { var r = buf.toString('utf16le', i); if (r) { var c = r.charCodeAt(r.length - 1); if (c >= 0xD800 && c <= 0xDBFF) { this.lastNeed = 2; this.lastTotal = 4; this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; return r.slice(0, -1); } } return r; } this.lastNeed = 1; this.lastTotal = 2; this.lastChar[0] = buf[buf.length - 1]; return buf.toString('utf16le', i, buf.length - 1); } // For UTF-16LE we do not explicitly append special replacement characters if we // end on a partial character, we simply let v8 handle that. function utf16End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) { var end = this.lastTotal - this.lastNeed; return r + this.lastChar.toString('utf16le', 0, end); } return r; } function base64Text(buf, i) { var n = (buf.length - i) % 3; if (n === 0) return buf.toString('base64', i); this.lastNeed = 3 - n; this.lastTotal = 3; if (n === 1) { this.lastChar[0] = buf[buf.length - 1]; } else { this.lastChar[0] = buf[buf.length - 2]; this.lastChar[1] = buf[buf.length - 1]; } return buf.toString('base64', i, buf.length - n); } function base64End(buf) { var r = buf && buf.length ? this.write(buf) : ''; if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed); return r; } // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex) function simpleWrite(buf) { return buf.toString(this.encoding); } function simpleEnd(buf) { return buf && buf.length ? this.write(buf) : ''; } },{"safe-buffer":334}],334:[function(require,module,exports){ arguments[4][178][0].apply(exports,arguments) },{"buffer":182,"dup":178}],335:[function(require,module,exports){ (function (setImmediate,clearImmediate){ var nextTick = require('process/browser.js').nextTick; var apply = Function.prototype.apply; var slice = Array.prototype.slice; var immediateIds = {}; var nextImmediateId = 0; // DOM APIs, for completeness exports.setTimeout = function() { return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout); }; exports.setInterval = function() { return new Timeout(apply.call(setInterval, window, arguments), clearInterval); }; exports.clearTimeout = exports.clearInterval = function(timeout) { timeout.close(); }; function Timeout(id, clearFn) { this._id = id; this._clearFn = clearFn; } Timeout.prototype.unref = Timeout.prototype.ref = function() {}; Timeout.prototype.close = function() { this._clearFn.call(window, this._id); }; // Does not start the time, just sets up the members needed. exports.enroll = function(item, msecs) { clearTimeout(item._idleTimeoutId); item._idleTimeout = msecs; }; exports.unenroll = function(item) { clearTimeout(item._idleTimeoutId); item._idleTimeout = -1; }; exports._unrefActive = exports.active = function(item) { clearTimeout(item._idleTimeoutId); var msecs = item._idleTimeout; if (msecs >= 0) { item._idleTimeoutId = setTimeout(function onTimeout() { if (item._onTimeout) item._onTimeout(); }, msecs); } }; // That's not how node.js implements it but the exposed api is the same. exports.setImmediate = typeof setImmediate === "function" ? setImmediate : function(fn) { var id = nextImmediateId++; var args = arguments.length < 2 ? false : slice.call(arguments, 1); immediateIds[id] = true; nextTick(function onNextTick() { if (immediateIds[id]) { // fn.call() is faster so we optimize for the common use-case // @see http://jsperf.com/call-apply-segu if (args) { fn.apply(null, args); } else { fn.call(null); } // Prevent ids from leaking exports.clearImmediate(id); } }); return id; }; exports.clearImmediate = typeof clearImmediate === "function" ? clearImmediate : function(id) { delete immediateIds[id]; }; }).call(this,require("timers").setImmediate,require("timers").clearImmediate) },{"process/browser.js":284,"timers":335}],336:[function(require,module,exports){ var Buffer = require('buffer').Buffer module.exports = function (buf) { // If the buffer is backed by a Uint8Array, a faster version will work if (buf instanceof Uint8Array) { // If the buffer isn't a subarray, return the underlying ArrayBuffer if (buf.byteOffset === 0 && buf.byteLength === buf.buffer.byteLength) { return buf.buffer } else if (typeof buf.buffer.slice === 'function') { // Otherwise we need to get a proper copy return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength) } } if (Buffer.isBuffer(buf)) { // This is the slow version that will work with any Buffer // implementation (even in old browsers) var arrayCopy = new Uint8Array(buf.length) var len = buf.length for (var i = 0; i < len; i++) { arrayCopy[i] = buf[i] } return arrayCopy.buffer } else { throw new Error('Argument must be a Buffer') } } },{"buffer":182}],337:[function(require,module,exports){ var undefined = (void 0); // Paranoia // Beyond this value, index getters/setters (i.e. array[0], array[1]) are so slow to // create, and consume so much memory, that the browser appears frozen. var MAX_ARRAY_LENGTH = 1e5; // Approximations of internal ECMAScript conversion functions var ECMAScript = (function() { // Stash a copy in case other scripts modify these var opts = Object.prototype.toString, ophop = Object.prototype.hasOwnProperty; return { // Class returns internal [[Class]] property, used to avoid cross-frame instanceof issues: Class: function(v) { return opts.call(v).replace(/^\[object *|\]$/g, ''); }, HasProperty: function(o, p) { return p in o; }, HasOwnProperty: function(o, p) { return ophop.call(o, p); }, IsCallable: function(o) { return typeof o === 'function'; }, ToInt32: function(v) { return v >> 0; }, ToUint32: function(v) { return v >>> 0; } }; }()); // Snapshot intrinsics var LN2 = Math.LN2, abs = Math.abs, floor = Math.floor, log = Math.log, min = Math.min, pow = Math.pow, round = Math.round; // ES5: lock down object properties function configureProperties(obj) { if (getOwnPropNames && defineProp) { var props = getOwnPropNames(obj), i; for (i = 0; i < props.length; i += 1) { defineProp(obj, props[i], { value: obj[props[i]], writable: false, enumerable: false, configurable: false }); } } } // emulate ES5 getter/setter API using legacy APIs // http://blogs.msdn.com/b/ie/archive/2010/09/07/transitioning-existing-code-to-the-es5-getter-setter-apis.aspx // (second clause tests for Object.defineProperty() in IE<9 that only supports extending DOM prototypes, but // note that IE<9 does not support __defineGetter__ or __defineSetter__ so it just renders the method harmless) var defineProp if (Object.defineProperty && (function() { try { Object.defineProperty({}, 'x', {}); return true; } catch (e) { return false; } })()) { defineProp = Object.defineProperty; } else { defineProp = function(o, p, desc) { if (!o === Object(o)) throw new TypeError("Object.defineProperty called on non-object"); if (ECMAScript.HasProperty(desc, 'get') && Object.prototype.__defineGetter__) { Object.prototype.__defineGetter__.call(o, p, desc.get); } if (ECMAScript.HasProperty(desc, 'set') && Object.prototype.__defineSetter__) { Object.prototype.__defineSetter__.call(o, p, desc.set); } if (ECMAScript.HasProperty(desc, 'value')) { o[p] = desc.value; } return o; }; } var getOwnPropNames = Object.getOwnPropertyNames || function (o) { if (o !== Object(o)) throw new TypeError("Object.getOwnPropertyNames called on non-object"); var props = [], p; for (p in o) { if (ECMAScript.HasOwnProperty(o, p)) { props.push(p); } } return props; }; // ES5: Make obj[index] an alias for obj._getter(index)/obj._setter(index, value) // for index in 0 ... obj.length function makeArrayAccessors(obj) { if (!defineProp) { return; } if (obj.length > MAX_ARRAY_LENGTH) throw new RangeError("Array too large for polyfill"); function makeArrayAccessor(index) { defineProp(obj, index, { 'get': function() { return obj._getter(index); }, 'set': function(v) { obj._setter(index, v); }, enumerable: true, configurable: false }); } var i; for (i = 0; i < obj.length; i += 1) { makeArrayAccessor(i); } } // Internal conversion functions: // pack() - take a number (interpreted as Type), output a byte array // unpack() - take a byte array, output a Type-like number function as_signed(value, bits) { var s = 32 - bits; return (value << s) >> s; } function as_unsigned(value, bits) { var s = 32 - bits; return (value << s) >>> s; } function packI8(n) { return [n & 0xff]; } function unpackI8(bytes) { return as_signed(bytes[0], 8); } function packU8(n) { return [n & 0xff]; } function unpackU8(bytes) { return as_unsigned(bytes[0], 8); } function packU8Clamped(n) { n = round(Number(n)); return [n < 0 ? 0 : n > 0xff ? 0xff : n & 0xff]; } function packI16(n) { return [(n >> 8) & 0xff, n & 0xff]; } function unpackI16(bytes) { return as_signed(bytes[0] << 8 | bytes[1], 16); } function packU16(n) { return [(n >> 8) & 0xff, n & 0xff]; } function unpackU16(bytes) { return as_unsigned(bytes[0] << 8 | bytes[1], 16); } function packI32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } function unpackI32(bytes) { return as_signed(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } function packU32(n) { return [(n >> 24) & 0xff, (n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff]; } function unpackU32(bytes) { return as_unsigned(bytes[0] << 24 | bytes[1] << 16 | bytes[2] << 8 | bytes[3], 32); } function packIEEE754(v, ebits, fbits) { var bias = (1 << (ebits - 1)) - 1, s, e, f, ln, i, bits, str, bytes; function roundToEven(n) { var w = floor(n), f = n - w; if (f < 0.5) return w; if (f > 0.5) return w + 1; return w % 2 ? w + 1 : w; } // Compute sign, exponent, fraction if (v !== v) { // NaN // http://dev.w3.org/2006/webapi/WebIDL/#es-type-mapping e = (1 << ebits) - 1; f = pow(2, fbits - 1); s = 0; } else if (v === Infinity || v === -Infinity) { e = (1 << ebits) - 1; f = 0; s = (v < 0) ? 1 : 0; } else if (v === 0) { e = 0; f = 0; s = (1 / v === -Infinity) ? 1 : 0; } else { s = v < 0; v = abs(v); if (v >= pow(2, 1 - bias)) { e = min(floor(log(v) / LN2), 1023); f = roundToEven(v / pow(2, e) * pow(2, fbits)); if (f / pow(2, fbits) >= 2) { e = e + 1; f = 1; } if (e > bias) { // Overflow e = (1 << ebits) - 1; f = 0; } else { // Normalized e = e + bias; f = f - pow(2, fbits); } } else { // Denormalized e = 0; f = roundToEven(v / pow(2, 1 - bias - fbits)); } } // Pack sign, exponent, fraction bits = []; for (i = fbits; i; i -= 1) { bits.push(f % 2 ? 1 : 0); f = floor(f / 2); } for (i = ebits; i; i -= 1) { bits.push(e % 2 ? 1 : 0); e = floor(e / 2); } bits.push(s ? 1 : 0); bits.reverse(); str = bits.join(''); // Bits to bytes bytes = []; while (str.length) { bytes.push(parseInt(str.substring(0, 8), 2)); str = str.substring(8); } return bytes; } function unpackIEEE754(bytes, ebits, fbits) { // Bytes to bits var bits = [], i, j, b, str, bias, s, e, f; for (i = bytes.length; i; i -= 1) { b = bytes[i - 1]; for (j = 8; j; j -= 1) { bits.push(b % 2 ? 1 : 0); b = b >> 1; } } bits.reverse(); str = bits.join(''); // Unpack sign, exponent, fraction bias = (1 << (ebits - 1)) - 1; s = parseInt(str.substring(0, 1), 2) ? -1 : 1; e = parseInt(str.substring(1, 1 + ebits), 2); f = parseInt(str.substring(1 + ebits), 2); // Produce number if (e === (1 << ebits) - 1) { return f !== 0 ? NaN : s * Infinity; } else if (e > 0) { // Normalized return s * pow(2, e - bias) * (1 + f / pow(2, fbits)); } else if (f !== 0) { // Denormalized return s * pow(2, -(bias - 1)) * (f / pow(2, fbits)); } else { return s < 0 ? -0 : 0; } } function unpackF64(b) { return unpackIEEE754(b, 11, 52); } function packF64(v) { return packIEEE754(v, 11, 52); } function unpackF32(b) { return unpackIEEE754(b, 8, 23); } function packF32(v) { return packIEEE754(v, 8, 23); } // // 3 The ArrayBuffer Type // (function() { /** @constructor */ var ArrayBuffer = function ArrayBuffer(length) { length = ECMAScript.ToInt32(length); if (length < 0) throw new RangeError('ArrayBuffer size is not a small enough positive integer'); this.byteLength = length; this._bytes = []; this._bytes.length = length; var i; for (i = 0; i < this.byteLength; i += 1) { this._bytes[i] = 0; } configureProperties(this); }; exports.ArrayBuffer = exports.ArrayBuffer || ArrayBuffer; // // 4 The ArrayBufferView Type // // NOTE: this constructor is not exported /** @constructor */ var ArrayBufferView = function ArrayBufferView() { //this.buffer = null; //this.byteOffset = 0; //this.byteLength = 0; }; // // 5 The Typed Array View Types // function makeConstructor(bytesPerElement, pack, unpack) { // Each TypedArray type requires a distinct constructor instance with // identical logic, which this produces. var ctor; ctor = function(buffer, byteOffset, length) { var array, sequence, i, s; if (!arguments.length || typeof arguments[0] === 'number') { // Constructor(unsigned long length) this.length = ECMAScript.ToInt32(arguments[0]); if (length < 0) throw new RangeError('ArrayBufferView size is not a small enough positive integer'); this.byteLength = this.length * this.BYTES_PER_ELEMENT; this.buffer = new ArrayBuffer(this.byteLength); this.byteOffset = 0; } else if (typeof arguments[0] === 'object' && arguments[0].constructor === ctor) { // Constructor(TypedArray array) array = arguments[0]; this.length = array.length; this.byteLength = this.length * this.BYTES_PER_ELEMENT; this.buffer = new ArrayBuffer(this.byteLength); this.byteOffset = 0; for (i = 0; i < this.length; i += 1) { this._setter(i, array._getter(i)); } } else if (typeof arguments[0] === 'object' && !(arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { // Constructor(sequence array) sequence = arguments[0]; this.length = ECMAScript.ToUint32(sequence.length); this.byteLength = this.length * this.BYTES_PER_ELEMENT; this.buffer = new ArrayBuffer(this.byteLength); this.byteOffset = 0; for (i = 0; i < this.length; i += 1) { s = sequence[i]; this._setter(i, Number(s)); } } else if (typeof arguments[0] === 'object' && (arguments[0] instanceof ArrayBuffer || ECMAScript.Class(arguments[0]) === 'ArrayBuffer')) { // Constructor(ArrayBuffer buffer, // optional unsigned long byteOffset, optional unsigned long length) this.buffer = buffer; this.byteOffset = ECMAScript.ToUint32(byteOffset); if (this.byteOffset > this.buffer.byteLength) { throw new RangeError("byteOffset out of range"); } if (this.byteOffset % this.BYTES_PER_ELEMENT) { // The given byteOffset must be a multiple of the element // size of the specific type, otherwise an exception is raised. throw new RangeError("ArrayBuffer length minus the byteOffset is not a multiple of the element size."); } if (arguments.length < 3) { this.byteLength = this.buffer.byteLength - this.byteOffset; if (this.byteLength % this.BYTES_PER_ELEMENT) { throw new RangeError("length of buffer minus byteOffset not a multiple of the element size"); } this.length = this.byteLength / this.BYTES_PER_ELEMENT; } else { this.length = ECMAScript.ToUint32(length); this.byteLength = this.length * this.BYTES_PER_ELEMENT; } if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); } } else { throw new TypeError("Unexpected argument type(s)"); } this.constructor = ctor; configureProperties(this); makeArrayAccessors(this); }; ctor.prototype = new ArrayBufferView(); ctor.prototype.BYTES_PER_ELEMENT = bytesPerElement; ctor.prototype._pack = pack; ctor.prototype._unpack = unpack; ctor.BYTES_PER_ELEMENT = bytesPerElement; // getter type (unsigned long index); ctor.prototype._getter = function(index) { if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); index = ECMAScript.ToUint32(index); if (index >= this.length) { return undefined; } var bytes = [], i, o; for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; i < this.BYTES_PER_ELEMENT; i += 1, o += 1) { bytes.push(this.buffer._bytes[o]); } return this._unpack(bytes); }; // NONSTANDARD: convenience alias for getter: type get(unsigned long index); ctor.prototype.get = ctor.prototype._getter; // setter void (unsigned long index, type value); ctor.prototype._setter = function(index, value) { if (arguments.length < 2) throw new SyntaxError("Not enough arguments"); index = ECMAScript.ToUint32(index); if (index >= this.length) { return undefined; } var bytes = this._pack(value), i, o; for (i = 0, o = this.byteOffset + index * this.BYTES_PER_ELEMENT; i < this.BYTES_PER_ELEMENT; i += 1, o += 1) { this.buffer._bytes[o] = bytes[i]; } }; // void set(TypedArray array, optional unsigned long offset); // void set(sequence array, optional unsigned long offset); ctor.prototype.set = function(index, value) { if (arguments.length < 1) throw new SyntaxError("Not enough arguments"); var array, sequence, offset, len, i, s, d, byteOffset, byteLength, tmp; if (typeof arguments[0] === 'object' && arguments[0].constructor === this.constructor) { // void set(TypedArray array, optional unsigned long offset); array = arguments[0]; offset = ECMAScript.ToUint32(arguments[1]); if (offset + array.length > this.length) { throw new RangeError("Offset plus length of array is out of range"); } byteOffset = this.byteOffset + offset * this.BYTES_PER_ELEMENT; byteLength = array.length * this.BYTES_PER_ELEMENT; if (array.buffer === this.buffer) { tmp = []; for (i = 0, s = array.byteOffset; i < byteLength; i += 1, s += 1) { tmp[i] = array.buffer._bytes[s]; } for (i = 0, d = byteOffset; i < byteLength; i += 1, d += 1) { this.buffer._bytes[d] = tmp[i]; } } else { for (i = 0, s = array.byteOffset, d = byteOffset; i < byteLength; i += 1, s += 1, d += 1) { this.buffer._bytes[d] = array.buffer._bytes[s]; } } } else if (typeof arguments[0] === 'object' && typeof arguments[0].length !== 'undefined') { // void set(sequence array, optional unsigned long offset); sequence = arguments[0]; len = ECMAScript.ToUint32(sequence.length); offset = ECMAScript.ToUint32(arguments[1]); if (offset + len > this.length) { throw new RangeError("Offset plus length of array is out of range"); } for (i = 0; i < len; i += 1) { s = sequence[i]; this._setter(offset + i, Number(s)); } } else { throw new TypeError("Unexpected argument type(s)"); } }; // TypedArray subarray(long begin, optional long end); ctor.prototype.subarray = function(start, end) { function clamp(v, min, max) { return v < min ? min : v > max ? max : v; } start = ECMAScript.ToInt32(start); end = ECMAScript.ToInt32(end); if (arguments.length < 1) { start = 0; } if (arguments.length < 2) { end = this.length; } if (start < 0) { start = this.length + start; } if (end < 0) { end = this.length + end; } start = clamp(start, 0, this.length); end = clamp(end, 0, this.length); var len = end - start; if (len < 0) { len = 0; } return new this.constructor( this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len); }; return ctor; } var Int8Array = makeConstructor(1, packI8, unpackI8); var Uint8Array = makeConstructor(1, packU8, unpackU8); var Uint8ClampedArray = makeConstructor(1, packU8Clamped, unpackU8); var Int16Array = makeConstructor(2, packI16, unpackI16); var Uint16Array = makeConstructor(2, packU16, unpackU16); var Int32Array = makeConstructor(4, packI32, unpackI32); var Uint32Array = makeConstructor(4, packU32, unpackU32); var Float32Array = makeConstructor(4, packF32, unpackF32); var Float64Array = makeConstructor(8, packF64, unpackF64); exports.Int8Array = exports.Int8Array || Int8Array; exports.Uint8Array = exports.Uint8Array || Uint8Array; exports.Uint8ClampedArray = exports.Uint8ClampedArray || Uint8ClampedArray; exports.Int16Array = exports.Int16Array || Int16Array; exports.Uint16Array = exports.Uint16Array || Uint16Array; exports.Int32Array = exports.Int32Array || Int32Array; exports.Uint32Array = exports.Uint32Array || Uint32Array; exports.Float32Array = exports.Float32Array || Float32Array; exports.Float64Array = exports.Float64Array || Float64Array; }()); // // 6 The DataView View Type // (function() { function r(array, index) { return ECMAScript.IsCallable(array.get) ? array.get(index) : array[index]; } var IS_BIG_ENDIAN = (function() { var u16array = new(exports.Uint16Array)([0x1234]), u8array = new(exports.Uint8Array)(u16array.buffer); return r(u8array, 0) === 0x12; }()); // Constructor(ArrayBuffer buffer, // optional unsigned long byteOffset, // optional unsigned long byteLength) /** @constructor */ var DataView = function DataView(buffer, byteOffset, byteLength) { if (arguments.length === 0) { buffer = new exports.ArrayBuffer(0); } else if (!(buffer instanceof exports.ArrayBuffer || ECMAScript.Class(buffer) === 'ArrayBuffer')) { throw new TypeError("TypeError"); } this.buffer = buffer || new exports.ArrayBuffer(0); this.byteOffset = ECMAScript.ToUint32(byteOffset); if (this.byteOffset > this.buffer.byteLength) { throw new RangeError("byteOffset out of range"); } if (arguments.length < 3) { this.byteLength = this.buffer.byteLength - this.byteOffset; } else { this.byteLength = ECMAScript.ToUint32(byteLength); } if ((this.byteOffset + this.byteLength) > this.buffer.byteLength) { throw new RangeError("byteOffset and length reference an area beyond the end of the buffer"); } configureProperties(this); }; function makeGetter(arrayType) { return function(byteOffset, littleEndian) { byteOffset = ECMAScript.ToUint32(byteOffset); if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { throw new RangeError("Array index out of range"); } byteOffset += this.byteOffset; var uint8Array = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT), bytes = [], i; for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { bytes.push(r(uint8Array, i)); } if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { bytes.reverse(); } return r(new arrayType(new exports.Uint8Array(bytes).buffer), 0); }; } DataView.prototype.getUint8 = makeGetter(exports.Uint8Array); DataView.prototype.getInt8 = makeGetter(exports.Int8Array); DataView.prototype.getUint16 = makeGetter(exports.Uint16Array); DataView.prototype.getInt16 = makeGetter(exports.Int16Array); DataView.prototype.getUint32 = makeGetter(exports.Uint32Array); DataView.prototype.getInt32 = makeGetter(exports.Int32Array); DataView.prototype.getFloat32 = makeGetter(exports.Float32Array); DataView.prototype.getFloat64 = makeGetter(exports.Float64Array); function makeSetter(arrayType) { return function(byteOffset, value, littleEndian) { byteOffset = ECMAScript.ToUint32(byteOffset); if (byteOffset + arrayType.BYTES_PER_ELEMENT > this.byteLength) { throw new RangeError("Array index out of range"); } // Get bytes var typeArray = new arrayType([value]), byteArray = new exports.Uint8Array(typeArray.buffer), bytes = [], i, byteView; for (i = 0; i < arrayType.BYTES_PER_ELEMENT; i += 1) { bytes.push(r(byteArray, i)); } // Flip if necessary if (Boolean(littleEndian) === Boolean(IS_BIG_ENDIAN)) { bytes.reverse(); } // Write them byteView = new exports.Uint8Array(this.buffer, byteOffset, arrayType.BYTES_PER_ELEMENT); byteView.set(bytes); }; } DataView.prototype.setUint8 = makeSetter(exports.Uint8Array); DataView.prototype.setInt8 = makeSetter(exports.Int8Array); DataView.prototype.setUint16 = makeSetter(exports.Uint16Array); DataView.prototype.setInt16 = makeSetter(exports.Int16Array); DataView.prototype.setUint32 = makeSetter(exports.Uint32Array); DataView.prototype.setInt32 = makeSetter(exports.Int32Array); DataView.prototype.setFloat32 = makeSetter(exports.Float32Array); DataView.prototype.setFloat64 = makeSetter(exports.Float64Array); exports.DataView = exports.DataView || DataView; }()); },{}],338:[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // 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. 'use strict'; var punycode = require('punycode'); var util = require('./util'); exports.parse = urlParse; exports.resolve = urlResolve; exports.resolveObject = urlResolveObject; exports.format = urlFormat; exports.Url = Url; function Url() { this.protocol = null; this.slashes = null; this.auth = null; this.host = null; this.port = null; this.hostname = null; this.hash = null; this.search = null; this.query = null; this.pathname = null; this.path = null; this.href = null; } // Reference: RFC 3986, RFC 1808, RFC 2396 // define these here so at least they only have to be // compiled once on the first module load. var protocolPattern = /^([a-z0-9.+-]+:)/i, portPattern = /:[0-9]*$/, // Special case for a simple path URL simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/, // RFC 2396: characters reserved for delimiting URLs. // We actually just auto-escape these. delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'], // RFC 2396: characters not allowed for various reasons. unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims), // Allowed by RFCs, but cause of XSS attacks. Always escape these. autoEscape = ['\''].concat(unwise), // Characters that are never ever allowed in a hostname. // Note that any invalid chars are also handled, but these // are the ones that are *expected* to be seen, so we fast-path // them. nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape), hostEndingChars = ['/', '?', '#'], hostnameMaxLen = 255, hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/, hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/, // protocols that can allow "unsafe" and "unwise" chars. unsafeProtocol = { 'javascript': true, 'javascript:': true }, // protocols that never have a hostname. hostlessProtocol = { 'javascript': true, 'javascript:': true }, // protocols that always contain a // bit. slashedProtocol = { 'http': true, 'https': true, 'ftp': true, 'gopher': true, 'file': true, 'http:': true, 'https:': true, 'ftp:': true, 'gopher:': true, 'file:': true }, querystring = require('querystring'); function urlParse(url, parseQueryString, slashesDenoteHost) { if (url && util.isObject(url) && url instanceof Url) return url; var u = new Url; u.parse(url, parseQueryString, slashesDenoteHost); return u; } Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { if (!util.isString(url)) { throw new TypeError("Parameter 'url' must be a string, not " + typeof url); } // Copy chrome, IE, opera backslash-handling behavior. // Back slashes before the query string get converted to forward slashes // See: https://code.google.com/p/chromium/issues/detail?id=25916 var queryIndex = url.indexOf('?'), splitter = (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#', uSplit = url.split(splitter), slashRegex = /\\/g; uSplit[0] = uSplit[0].replace(slashRegex, '/'); url = uSplit.join(splitter); var rest = url; // trim before proceeding. // This is to support parse stuff like " http://foo.com \n" rest = rest.trim(); if (!slashesDenoteHost && url.split('#').length === 1) { // Try fast path regexp var simplePath = simplePathPattern.exec(rest); if (simplePath) { this.path = rest; this.href = rest; this.pathname = simplePath[1]; if (simplePath[2]) { this.search = simplePath[2]; if (parseQueryString) { this.query = querystring.parse(this.search.substr(1)); } else { this.query = this.search.substr(1); } } else if (parseQueryString) { this.search = ''; this.query = {}; } return this; } } var proto = protocolPattern.exec(rest); if (proto) { proto = proto[0]; var lowerProto = proto.toLowerCase(); this.protocol = lowerProto; rest = rest.substr(proto.length); } // figure out if it's got a host // user@server is *always* interpreted as a hostname, and url // resolution will treat //foo/bar as host=foo,path=bar because that's // how the browser resolves relative URLs. if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) { var slashes = rest.substr(0, 2) === '//'; if (slashes && !(proto && hostlessProtocol[proto])) { rest = rest.substr(2); this.slashes = true; } } if (!hostlessProtocol[proto] && (slashes || (proto && !slashedProtocol[proto]))) { // there's a hostname. // the first instance of /, ?, ;, or # ends the host. // // If there is an @ in the hostname, then non-host chars *are* allowed // to the left of the last @ sign, unless some host-ending character // comes *before* the @-sign. // URLs are obnoxious. // // ex: // http://a@b@c/ => user:a@b host:c // http://a@b?@c => user:a host:c path:/?@c // v0.12 TODO(isaacs): This is not quite how Chrome does things. // Review our test case against browsers more comprehensively. // find the first instance of any hostEndingChars var hostEnd = -1; for (var i = 0; i < hostEndingChars.length; i++) { var hec = rest.indexOf(hostEndingChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec; } // at this point, either we have an explicit point where the // auth portion cannot go past, or the last @ char is the decider. var auth, atSign; if (hostEnd === -1) { // atSign can be anywhere. atSign = rest.lastIndexOf('@'); } else { // atSign must be in auth portion. // http://a@b/c@d => host:b auth:a path:/c@d atSign = rest.lastIndexOf('@', hostEnd); } // Now we have a portion which is definitely the auth. // Pull that off. if (atSign !== -1) { auth = rest.slice(0, atSign); rest = rest.slice(atSign + 1); this.auth = decodeURIComponent(auth); } // the host is the remaining to the left of the first non-host char hostEnd = -1; for (var i = 0; i < nonHostChars.length; i++) { var hec = rest.indexOf(nonHostChars[i]); if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec; } // if we still have not hit it, then the entire thing is a host. if (hostEnd === -1) hostEnd = rest.length; this.host = rest.slice(0, hostEnd); rest = rest.slice(hostEnd); // pull out port. this.parseHost(); // we've indicated that there is a hostname, // so even if it's empty, it has to be present. this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ] // assume that it's an IPv6 address. var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little. if (!ipv6Hostname) { var hostparts = this.hostname.split(/\./); for (var i = 0, l = hostparts.length; i < l; i++) { var part = hostparts[i]; if (!part) continue; if (!part.match(hostnamePartPattern)) { var newpart = ''; for (var j = 0, k = part.length; j < k; j++) { if (part.charCodeAt(j) > 127) { // we replace non-ASCII char with a temporary placeholder // we need this to make sure size of hostname is not // broken by replacing non-ASCII by nothing newpart += 'x'; } else { newpart += part[j]; } } // we test again with ASCII char only if (!newpart.match(hostnamePartPattern)) { var validParts = hostparts.slice(0, i); var notHost = hostparts.slice(i + 1); var bit = part.match(hostnamePartStart); if (bit) { validParts.push(bit[1]); notHost.unshift(bit[2]); } if (notHost.length) { rest = '/' + notHost.join('.') + rest; } this.hostname = validParts.join('.'); break; } } } } if (this.hostname.length > hostnameMaxLen) { this.hostname = ''; } else { // hostnames are always lower case. this.hostname = this.hostname.toLowerCase(); } if (!ipv6Hostname) { // IDNA Support: Returns a punycoded representation of "domain". // It only converts parts of the domain name that // have non-ASCII characters, i.e. it doesn't matter if // you call it with a domain that already is ASCII-only. this.hostname = punycode.toASCII(this.hostname); } var p = this.port ? ':' + this.port : ''; var h = this.hostname || ''; this.host = h + p; this.href += this.host; // strip [ and ] from the hostname // the host field still retains them, though if (ipv6Hostname) { this.hostname = this.hostname.substr(1, this.hostname.length - 2); if (rest[0] !== '/') { rest = '/' + rest; } } } // now rest is set to the post-host stuff. // chop off any delim chars. if (!unsafeProtocol[lowerProto]) { // First, make 100% sure that any "autoEscape" chars get // escaped, even if encodeURIComponent doesn't think they // need to be. for (var i = 0, l = autoEscape.length; i < l; i++) { var ae = autoEscape[i]; if (rest.indexOf(ae) === -1) continue; var esc = encodeURIComponent(ae); if (esc === ae) { esc = escape(ae); } rest = rest.split(ae).join(esc); } } // chop off from the tail first. var hash = rest.indexOf('#'); if (hash !== -1) { // got a fragment string. this.hash = rest.substr(hash); rest = rest.slice(0, hash); } var qm = rest.indexOf('?'); if (qm !== -1) { this.search = rest.substr(qm); this.query = rest.substr(qm + 1); if (parseQueryString) { this.query = querystring.parse(this.query); } rest = rest.slice(0, qm); } else if (parseQueryString) { // no query string, but parseQueryString still requested this.search = ''; this.query = {}; } if (rest) this.pathname = rest; if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) { this.pathname = '/'; } //to support http.request if (this.pathname || this.search) { var p = this.pathname || ''; var s = this.search || ''; this.path = p + s; } // finally, reconstruct the href based on what has been validated. this.href = this.format(); return this; }; // format a parsed object into a url string function urlFormat(obj) { // ensure it's an object, and not a string url. // If it's an obj, this is a no-op. // this way, you can call url_format() on strings // to clean up potentially wonky urls. if (util.isString(obj)) obj = urlParse(obj); if (!(obj instanceof Url)) return Url.prototype.format.call(obj); return obj.format(); } Url.prototype.format = function() { var auth = this.auth || ''; if (auth) { auth = encodeURIComponent(auth); auth = auth.replace(/%3A/i, ':'); auth += '@'; } var protocol = this.protocol || '', pathname = this.pathname || '', hash = this.hash || '', host = false, query = ''; if (this.host) { host = auth + this.host; } else if (this.hostname) { host = auth + (this.hostname.indexOf(':') === -1 ? this.hostname : '[' + this.hostname + ']'); if (this.port) { host += ':' + this.port; } } if (this.query && util.isObject(this.query) && Object.keys(this.query).length) { query = querystring.stringify(this.query); } var search = this.search || (query && ('?' + query)) || ''; if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //. Not mailto:, xmpp:, etc. // unless they had them to begin with. if (this.slashes || (!protocol || slashedProtocol[protocol]) && host !== false) { host = '//' + (host || ''); if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname; } else if (!host) { host = ''; } if (hash && hash.charAt(0) !== '#') hash = '#' + hash; if (search && search.charAt(0) !== '?') search = '?' + search; pathname = pathname.replace(/[?#]/g, function(match) { return encodeURIComponent(match); }); search = search.replace('#', '%23'); return protocol + host + pathname + search + hash; }; function urlResolve(source, relative) { return urlParse(source, false, true).resolve(relative); } Url.prototype.resolve = function(relative) { return this.resolveObject(urlParse(relative, false, true)).format(); }; function urlResolveObject(source, relative) { if (!source) return relative; return urlParse(source, false, true).resolveObject(relative); } Url.prototype.resolveObject = function(relative) { if (util.isString(relative)) { var rel = new Url(); rel.parse(relative, false, true); relative = rel; } var result = new Url(); var tkeys = Object.keys(this); for (var tk = 0; tk < tkeys.length; tk++) { var tkey = tkeys[tk]; result[tkey] = this[tkey]; } // hash is always overridden, no matter what. // even href="" will remove it. result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here. if (relative.href === '') { result.href = result.format(); return result; } // hrefs like //foo/bar always cut to the protocol. if (relative.slashes && !relative.protocol) { // take everything except the protocol from relative var rkeys = Object.keys(relative); for (var rk = 0; rk < rkeys.length; rk++) { var rkey = rkeys[rk]; if (rkey !== 'protocol') result[rkey] = relative[rkey]; } //urlParse appends trailing / to urls like http://www.example.com if (slashedProtocol[result.protocol] && result.hostname && !result.pathname) { result.path = result.pathname = '/'; } result.href = result.format(); return result; } if (relative.protocol && relative.protocol !== result.protocol) { // if it's a known url protocol, then changing // the protocol does weird things // first, if it's not file:, then we MUST have a host, // and if there was a path // to begin with, then we MUST have a path. // if it is file:, then the host is dropped, // because that's known to be hostless. // anything else is assumed to be absolute. if (!slashedProtocol[relative.protocol]) { var keys = Object.keys(relative); for (var v = 0; v < keys.length; v++) { var k = keys[v]; result[k] = relative[k]; } result.href = result.format(); return result; } result.protocol = relative.protocol; if (!relative.host && !hostlessProtocol[relative.protocol]) { var relPath = (relative.pathname || '').split('/'); while (relPath.length && !(relative.host = relPath.shift())); if (!relative.host) relative.host = ''; if (!relative.hostname) relative.hostname = ''; if (relPath[0] !== '') relPath.unshift(''); if (relPath.length < 2) relPath.unshift(''); result.pathname = relPath.join('/'); } else { result.pathname = relative.pathname; } result.search = relative.search; result.query = relative.query; result.host = relative.host || ''; result.auth = relative.auth; result.hostname = relative.hostname || relative.host; result.port = relative.port; // to support http.request if (result.pathname || result.search) { var p = result.pathname || ''; var s = result.search || ''; result.path = p + s; } result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; } var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'), isRelAbs = ( relative.host || relative.pathname && relative.pathname.charAt(0) === '/' ), mustEndAbs = (isRelAbs || isSourceAbs || (result.host && relative.pathname)), removeAllDots = mustEndAbs, srcPath = result.pathname && result.pathname.split('/') || [], relPath = relative.pathname && relative.pathname.split('/') || [], psychotic = result.protocol && !slashedProtocol[result.protocol]; // if the url is a non-slashed url, then relative // links like ../.. should be able // to crawl up to the hostname, as well. This is strange. // result.protocol has already been set by now. // Later on, put the first path part into the host field. if (psychotic) { result.hostname = ''; result.port = null; if (result.host) { if (srcPath[0] === '') srcPath[0] = result.host; else srcPath.unshift(result.host); } result.host = ''; if (relative.protocol) { relative.hostname = null; relative.port = null; if (relative.host) { if (relPath[0] === '') relPath[0] = relative.host; else relPath.unshift(relative.host); } relative.host = null; } mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === ''); } if (isRelAbs) { // it's absolute. result.host = (relative.host || relative.host === '') ? relative.host : result.host; result.hostname = (relative.hostname || relative.hostname === '') ? relative.hostname : result.hostname; result.search = relative.search; result.query = relative.query; srcPath = relPath; // fall through to the dot-handling below. } else if (relPath.length) { // it's relative // throw away the existing file, and take the new path instead. if (!srcPath) srcPath = []; srcPath.pop(); srcPath = srcPath.concat(relPath); result.search = relative.search; result.query = relative.query; } else if (!util.isNullOrUndefined(relative.search)) { // just pull out the search. // like href='?foo'. // Put this after the other two cases because it simplifies the booleans if (psychotic) { result.hostname = result.host = srcPath.shift(); //occationaly the auth can get stuck only in host //this especially happens in cases like //url.resolveObject('mailto:local1@domain1', 'local2@domain2') var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.host = result.hostname = authInHost.shift(); } } result.search = relative.search; result.query = relative.query; //to support http.request if (!util.isNull(result.pathname) || !util.isNull(result.search)) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.href = result.format(); return result; } if (!srcPath.length) { // no path at all. easy. // we've already handled the other stuff above. result.pathname = null; //to support http.request if (result.search) { result.path = '/' + result.search; } else { result.path = null; } result.href = result.format(); return result; } // if a url ENDs in . or .., then it must get a trailing slash. // however, if it ends in anything else non-slashy, // then it must NOT get a trailing slash. var last = srcPath.slice(-1)[0]; var hasTrailingSlash = ( (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === ''); // strip single dots, resolve double dots to parent dir // if the path tries to go above the root, `up` ends up > 0 var up = 0; for (var i = srcPath.length; i >= 0; i--) { last = srcPath[i]; if (last === '.') { srcPath.splice(i, 1); } else if (last === '..') { srcPath.splice(i, 1); up++; } else if (up) { srcPath.splice(i, 1); up--; } } // if the path is allowed to go above the root, restore leading ..s if (!mustEndAbs && !removeAllDots) { for (; up--; up) { srcPath.unshift('..'); } } if (mustEndAbs && srcPath[0] !== '' && (!srcPath[0] || srcPath[0].charAt(0) !== '/')) { srcPath.unshift(''); } if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) { srcPath.push(''); } var isAbsolute = srcPath[0] === '' || (srcPath[0] && srcPath[0].charAt(0) === '/'); // put the host back if (psychotic) { result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; //occationaly the auth can get stuck only in host //this especially happens in cases like //url.resolveObject('mailto:local1@domain1', 'local2@domain2') var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false; if (authInHost) { result.auth = authInHost.shift(); result.host = result.hostname = authInHost.shift(); } } mustEndAbs = mustEndAbs || (result.host && srcPath.length); if (mustEndAbs && !isAbsolute) { srcPath.unshift(''); } if (!srcPath.length) { result.pathname = null; result.path = null; } else { result.pathname = srcPath.join('/'); } //to support request.http if (!util.isNull(result.pathname) || !util.isNull(result.search)) { result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : ''); } result.auth = relative.auth || result.auth; result.slashes = result.slashes || relative.slashes; result.href = result.format(); return result; }; Url.prototype.parseHost = function() { var host = this.host; var port = portPattern.exec(host); if (port) { port = port[0]; if (port !== ':') { this.port = port.substr(1); } host = host.substr(0, host.length - port.length); } if (host) this.hostname = host; }; },{"./util":339,"punycode":292,"querystring":295}],339:[function(require,module,exports){ 'use strict'; module.exports = { isString: function(arg) { return typeof(arg) === 'string'; }, isObject: function(arg) { return typeof(arg) === 'object' && arg !== null; }, isNull: function(arg) { return arg === null; }, isNullOrUndefined: function(arg) { return arg == null; } }; },{}],340:[function(require,module,exports){ (function (global){ /** * Module exports. */ module.exports = deprecate; /** * Mark that a method should not be used. * Returns a modified function which warns once by default. * * If `localStorage.noDeprecation = true` is set, then it is a no-op. * * If `localStorage.throwDeprecation = true` is set, then deprecated functions * will throw an Error when invoked. * * If `localStorage.traceDeprecation = true` is set, then deprecated functions * will invoke `console.trace()` instead of `console.error()`. * * @param {Function} fn - the function to deprecate * @param {String} msg - the string to print to the console when `fn` is invoked * @returns {Function} a new "deprecated" version of `fn` * @api public */ function deprecate (fn, msg) { if (config('noDeprecation')) { return fn; } var warned = false; function deprecated() { if (!warned) { if (config('throwDeprecation')) { throw new Error(msg); } else if (config('traceDeprecation')) { console.trace(msg); } else { console.warn(msg); } warned = true; } return fn.apply(this, arguments); } return deprecated; } /** * Checks `localStorage` for boolean values for the given `name`. * * @param {String} name * @returns {Boolean} * @api private */ function config (name) { // accessing global.localStorage can trigger a DOMException in sandboxed iframes try { if (!global.localStorage) return false; } catch (_) { return false; } var val = global.localStorage[name]; if (null == val) return false; return String(val).toLowerCase() === 'true'; } }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{}],341:[function(require,module,exports){ if (typeof Object.create === 'function') { // implementation from standard node.js 'util' module module.exports = function inherits(ctor, superCtor) { ctor.super_ = superCtor ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; } else { // old school shim for old browsers module.exports = function inherits(ctor, superCtor) { ctor.super_ = superCtor var TempCtor = function () {} TempCtor.prototype = superCtor.prototype ctor.prototype = new TempCtor() ctor.prototype.constructor = ctor } } },{}],342:[function(require,module,exports){ module.exports = function isBuffer(arg) { return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function'; } },{}],343:[function(require,module,exports){ (function (process,global){ // Copyright Joyent, Inc. and other Node contributors. // // 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. var formatRegExp = /%[sdj%]/g; exports.format = function(f) { if (!isString(f)) { var objects = []; for (var i = 0; i < arguments.length; i++) { objects.push(inspect(arguments[i])); } return objects.join(' '); } var i = 1; var args = arguments; var len = args.length; var str = String(f).replace(formatRegExp, function(x) { if (x === '%%') return '%'; if (i >= len) return x; switch (x) { case '%s': return String(args[i++]); case '%d': return Number(args[i++]); case '%j': try { return JSON.stringify(args[i++]); } catch (_) { return '[Circular]'; } default: return x; } }); for (var x = args[i]; i < len; x = args[++i]) { if (isNull(x) || !isObject(x)) { str += ' ' + x; } else { str += ' ' + inspect(x); } } return str; }; // Mark that a method should not be used. // Returns a modified function which warns once by default. // If --no-deprecation is set, then it is a no-op. exports.deprecate = function(fn, msg) { // Allow for deprecating things in the process of starting up. if (isUndefined(global.process)) { return function() { return exports.deprecate(fn, msg).apply(this, arguments); }; } if (process.noDeprecation === true) { return fn; } var warned = false; function deprecated() { if (!warned) { if (process.throwDeprecation) { throw new Error(msg); } else if (process.traceDeprecation) { console.trace(msg); } else { console.error(msg); } warned = true; } return fn.apply(this, arguments); } return deprecated; }; var debugs = {}; var debugEnviron; exports.debuglog = function(set) { if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || ''; set = set.toUpperCase(); if (!debugs[set]) { if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { var pid = process.pid; debugs[set] = function() { var msg = exports.format.apply(exports, arguments); console.error('%s %d: %s', set, pid, msg); }; } else { debugs[set] = function() {}; } } return debugs[set]; }; /** * Echos the value of a value. Trys to print the value out * in the best way possible given the different types. * * @param {Object} obj The object to print out. * @param {Object} opts Optional options object that alters the output. */ /* legacy: obj, showHidden, depth, colors*/ function inspect(obj, opts) { // default options var ctx = { seen: [], stylize: stylizeNoColor }; // legacy... if (arguments.length >= 3) ctx.depth = arguments[2]; if (arguments.length >= 4) ctx.colors = arguments[3]; if (isBoolean(opts)) { // legacy... ctx.showHidden = opts; } else if (opts) { // got an "options" object exports._extend(ctx, opts); } // set default options if (isUndefined(ctx.showHidden)) ctx.showHidden = false; if (isUndefined(ctx.depth)) ctx.depth = 2; if (isUndefined(ctx.colors)) ctx.colors = false; if (isUndefined(ctx.customInspect)) ctx.customInspect = true; if (ctx.colors) ctx.stylize = stylizeWithColor; return formatValue(ctx, obj, ctx.depth); } exports.inspect = inspect; // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics inspect.colors = { 'bold' : [1, 22], 'italic' : [3, 23], 'underline' : [4, 24], 'inverse' : [7, 27], 'white' : [37, 39], 'grey' : [90, 39], 'black' : [30, 39], 'blue' : [34, 39], 'cyan' : [36, 39], 'green' : [32, 39], 'magenta' : [35, 39], 'red' : [31, 39], 'yellow' : [33, 39] }; // Don't use 'blue' not visible on cmd.exe inspect.styles = { 'special': 'cyan', 'number': 'yellow', 'boolean': 'yellow', 'undefined': 'grey', 'null': 'bold', 'string': 'green', 'date': 'magenta', // "name": intentionally not styling 'regexp': 'red' }; function stylizeWithColor(str, styleType) { var style = inspect.styles[styleType]; if (style) { return '\u001b[' + inspect.colors[style][0] + 'm' + str + '\u001b[' + inspect.colors[style][1] + 'm'; } else { return str; } } function stylizeNoColor(str, styleType) { return str; } function arrayToHash(array) { var hash = {}; array.forEach(function(val, idx) { hash[val] = true; }); return hash; } function formatValue(ctx, value, recurseTimes) { // Provide a hook for user-specified inspect functions. // Check that value is an object with an inspect function on it if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check. !(value.constructor && value.constructor.prototype === value)) { var ret = value.inspect(recurseTimes, ctx); if (!isString(ret)) { ret = formatValue(ctx, ret, recurseTimes); } return ret; } // Primitive types cannot have properties var primitive = formatPrimitive(ctx, value); if (primitive) { return primitive; } // Look up the keys of the object. var keys = Object.keys(value); var visibleKeys = arrayToHash(keys); if (ctx.showHidden) { keys = Object.getOwnPropertyNames(value); } // IE doesn't make error fields non-enumerable // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { return formatError(value); } // Some type of object without properties can be shortcutted. if (keys.length === 0) { if (isFunction(value)) { var name = value.name ? ': ' + value.name : ''; return ctx.stylize('[Function' + name + ']', 'special'); } if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } if (isDate(value)) { return ctx.stylize(Date.prototype.toString.call(value), 'date'); } if (isError(value)) { return formatError(value); } } var base = '', array = false, braces = ['{', '}']; // Make Array say that they are Array if (isArray(value)) { array = true; braces = ['[', ']']; } // Make functions say that they are functions if (isFunction(value)) { var n = value.name ? ': ' + value.name : ''; base = ' [Function' + n + ']'; } // Make RegExps say that they are RegExps if (isRegExp(value)) { base = ' ' + RegExp.prototype.toString.call(value); } // Make dates with properties first say the date if (isDate(value)) { base = ' ' + Date.prototype.toUTCString.call(value); } // Make error with message first say the error if (isError(value)) { base = ' ' + formatError(value); } if (keys.length === 0 && (!array || value.length == 0)) { return braces[0] + base + braces[1]; } if (recurseTimes < 0) { if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } else { return ctx.stylize('[Object]', 'special'); } } ctx.seen.push(value); var output; if (array) { output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); } else { output = keys.map(function(key) { return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); }); } ctx.seen.pop(); return reduceToSingleString(output, base, braces); } function formatPrimitive(ctx, value) { if (isUndefined(value)) return ctx.stylize('undefined', 'undefined'); if (isString(value)) { var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '') .replace(/'/g, "\\'") .replace(/\\"/g, '"') + '\''; return ctx.stylize(simple, 'string'); } if (isNumber(value)) return ctx.stylize('' + value, 'number'); if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); // For some reason typeof null is "object", so special case here. if (isNull(value)) return ctx.stylize('null', 'null'); } function formatError(value) { return '[' + Error.prototype.toString.call(value) + ']'; } function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { var output = []; for (var i = 0, l = value.length; i < l; ++i) { if (hasOwnProperty(value, String(i))) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); } else { output.push(''); } } keys.forEach(function(key) { if (!key.match(/^\d+$/)) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); } }); return output; } function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { var name, str, desc; desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] }; if (desc.get) { if (desc.set) { str = ctx.stylize('[Getter/Setter]', 'special'); } else { str = ctx.stylize('[Getter]', 'special'); } } else { if (desc.set) { str = ctx.stylize('[Setter]', 'special'); } } if (!hasOwnProperty(visibleKeys, key)) { name = '[' + key + ']'; } if (!str) { if (ctx.seen.indexOf(desc.value) < 0) { if (isNull(recurseTimes)) { str = formatValue(ctx, desc.value, null); } else { str = formatValue(ctx, desc.value, recurseTimes - 1); } if (str.indexOf('\n') > -1) { if (array) { str = str.split('\n').map(function(line) { return ' ' + line; }).join('\n').substr(2); } else { str = '\n' + str.split('\n').map(function(line) { return ' ' + line; }).join('\n'); } } } else { str = ctx.stylize('[Circular]', 'special'); } } if (isUndefined(name)) { if (array && key.match(/^\d+$/)) { return str; } name = JSON.stringify('' + key); if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { name = name.substr(1, name.length - 2); name = ctx.stylize(name, 'name'); } else { name = name.replace(/'/g, "\\'") .replace(/\\"/g, '"') .replace(/(^"|"$)/g, "'"); name = ctx.stylize(name, 'string'); } } return name + ': ' + str; } function reduceToSingleString(output, base, braces) { var numLinesEst = 0; var length = output.reduce(function(prev, cur) { numLinesEst++; if (cur.indexOf('\n') >= 0) numLinesEst++; return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; }, 0); if (length > 60) { return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; } return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; } // NOTE: These type checking functions intentionally don't use `instanceof` // because it is fragile and can be easily faked with `Object.create()`. function isArray(ar) { return Array.isArray(ar); } exports.isArray = isArray; function isBoolean(arg) { return typeof arg === 'boolean'; } exports.isBoolean = isBoolean; function isNull(arg) { return arg === null; } exports.isNull = isNull; function isNullOrUndefined(arg) { return arg == null; } exports.isNullOrUndefined = isNullOrUndefined; function isNumber(arg) { return typeof arg === 'number'; } exports.isNumber = isNumber; function isString(arg) { return typeof arg === 'string'; } exports.isString = isString; function isSymbol(arg) { return typeof arg === 'symbol'; } exports.isSymbol = isSymbol; function isUndefined(arg) { return arg === void 0; } exports.isUndefined = isUndefined; function isRegExp(re) { return isObject(re) && objectToString(re) === '[object RegExp]'; } exports.isRegExp = isRegExp; function isObject(arg) { return typeof arg === 'object' && arg !== null; } exports.isObject = isObject; function isDate(d) { return isObject(d) && objectToString(d) === '[object Date]'; } exports.isDate = isDate; function isError(e) { return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error); } exports.isError = isError; function isFunction(arg) { return typeof arg === 'function'; } exports.isFunction = isFunction; function isPrimitive(arg) { return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol typeof arg === 'undefined'; } exports.isPrimitive = isPrimitive; exports.isBuffer = require('./support/isBuffer'); function objectToString(o) { return Object.prototype.toString.call(o); } function pad(n) { return n < 10 ? '0' + n.toString(10) : n.toString(10); } var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34 function timestamp() { var d = new Date(); var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); return [d.getDate(), months[d.getMonth()], time].join(' '); } // log is just a thin wrapper to console.log that prepends a timestamp exports.log = function() { console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments)); }; /** * Inherit the prototype methods from one constructor into another. * * The Function.prototype.inherits from lang.js rewritten as a standalone * function (not on Function.prototype). NOTE: If this file is to be loaded * during bootstrapping this function needs to be rewritten using some native * functions as prototype setup using normal JavaScript does not work as * expected during bootstrapping (see mirror.js in r114903). * * @param {function} ctor Constructor function which needs to inherit the * prototype. * @param {function} superCtor Constructor function to inherit prototype from. */ exports.inherits = require('inherits'); exports._extend = function(origin, add) { // Don't do anything if add isn't an object if (!add || !isObject(add)) return origin; var keys = Object.keys(add); var i = keys.length; while (i--) { origin[keys[i]] = add[keys[i]]; } return origin; }; function hasOwnProperty(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) },{"./support/isBuffer":342,"_process":284,"inherits":341}],344:[function(require,module,exports){ var indexOf = require('indexof'); var Object_keys = function (obj) { if (Object.keys) return Object.keys(obj) else { var res = []; for (var key in obj) res.push(key) return res; } }; var forEach = function (xs, fn) { if (xs.forEach) return xs.forEach(fn) else for (var i = 0; i < xs.length; i++) { fn(xs[i], i, xs); } }; var defineProp = (function() { try { Object.defineProperty({}, '_', {}); return function(obj, name, value) { Object.defineProperty(obj, name, { writable: true, enumerable: false, configurable: true, value: value }) }; } catch(e) { return function(obj, name, value) { obj[name] = value; }; } }()); var globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape']; function Context() {} Context.prototype = {}; var Script = exports.Script = function NodeScript (code) { if (!(this instanceof Script)) return new Script(code); this.code = code; }; Script.prototype.runInContext = function (context) { if (!(context instanceof Context)) { throw new TypeError("needs a 'context' argument."); } var iframe = document.createElement('iframe'); if (!iframe.style) iframe.style = {}; iframe.style.display = 'none'; document.body.appendChild(iframe); var win = iframe.contentWindow; var wEval = win.eval, wExecScript = win.execScript; if (!wEval && wExecScript) { // win.eval() magically appears when this is called in IE: wExecScript.call(win, 'null'); wEval = win.eval; } forEach(Object_keys(context), function (key) { win[key] = context[key]; }); forEach(globals, function (key) { if (context[key]) { win[key] = context[key]; } }); var winKeys = Object_keys(win); var res = wEval.call(win, this.code); forEach(Object_keys(win), function (key) { // Avoid copying circular objects like `top` and `window` by only // updating existing context properties or new properties in the `win` // that was only introduced after the eval. if (key in context || indexOf(winKeys, key) === -1) { context[key] = win[key]; } }); forEach(globals, function (key) { if (!(key in context)) { defineProp(context, key, win[key]); } }); document.body.removeChild(iframe); return res; }; Script.prototype.runInThisContext = function () { return eval(this.code); // maybe... }; Script.prototype.runInNewContext = function (context) { var ctx = Script.createContext(context); var res = this.runInContext(ctx); forEach(Object_keys(ctx), function (key) { context[key] = ctx[key]; }); return res; }; forEach(Object_keys(Script.prototype), function (name) { exports[name] = Script[name] = function (code) { var s = Script(code); return s[name].apply(s, [].slice.call(arguments, 1)); }; }); exports.createScript = function (code) { return exports.Script(code); }; exports.createContext = Script.createContext = function (context) { var copy = new Context(); if(typeof context === 'object') { forEach(Object_keys(context), function (key) { copy[key] = context[key]; }); } return copy; }; },{"indexof":261}],345:[function(require,module,exports){ var Pbf = require('pbf') var GeoJSONWrapper = require('./lib/geojson_wrapper') module.exports = fromVectorTileJs module.exports.fromVectorTileJs = fromVectorTileJs module.exports.fromGeojsonVt = fromGeojsonVt module.exports.GeoJSONWrapper = GeoJSONWrapper /** * Serialize a vector-tile-js-created tile to pbf * * @param {Object} tile * @return {Buffer} uncompressed, pbf-serialized tile data */ function fromVectorTileJs (tile) { var out = new Pbf() writeTile(tile, out) return out.finish() } /** * Serialized a geojson-vt-created tile to pbf. * * @param {Object} layers - An object mapping layer names to geojson-vt-created vector tile objects * @param {Object} [options] - An object specifying the vector-tile specification version and extent that were used to create `layers`. * @param {Number} [options.version=1] - Version of vector-tile spec used * @param {Number} [options.extent=4096] - Extent of the vector tile * @return {Buffer} uncompressed, pbf-serialized tile data */ function fromGeojsonVt (layers, options) { options = options || {} var l = {} for (var k in layers) { l[k] = new GeoJSONWrapper(layers[k].features, options) l[k].name = k l[k].version = options.version l[k].extent = options.extent } return fromVectorTileJs({layers: l}) } function writeTile (tile, pbf) { for (var key in tile.layers) { pbf.writeMessage(3, writeLayer, tile.layers[key]) } } function writeLayer (layer, pbf) { pbf.writeVarintField(15, layer.version || 1) pbf.writeStringField(1, layer.name || '') pbf.writeVarintField(5, layer.extent || 4096) var i var context = { keys: [], values: [], keycache: {}, valuecache: {} } for (i = 0; i < layer.length; i++) { context.feature = layer.feature(i) pbf.writeMessage(2, writeFeature, context) } var keys = context.keys for (i = 0; i < keys.length; i++) { pbf.writeStringField(3, keys[i]) } var values = context.values for (i = 0; i < values.length; i++) { pbf.writeMessage(4, writeValue, values[i]) } } function writeFeature (context, pbf) { var feature = context.feature if (feature.id !== undefined) { pbf.writeVarintField(1, feature.id) } pbf.writeMessage(2, writeProperties, context) pbf.writeVarintField(3, feature.type) pbf.writeMessage(4, writeGeometry, feature) } function writeProperties (context, pbf) { var feature = context.feature var keys = context.keys var values = context.values var keycache = context.keycache var valuecache = context.valuecache for (var key in feature.properties) { var keyIndex = keycache[key] if (typeof keyIndex === 'undefined') { keys.push(key) keyIndex = keys.length - 1 keycache[key] = keyIndex } pbf.writeVarint(keyIndex) var value = feature.properties[key] var type = typeof value if (type !== 'string' && type !== 'boolean' && type !== 'number') { value = JSON.stringify(value) } var valueKey = type + ':' + value var valueIndex = valuecache[valueKey] if (typeof valueIndex === 'undefined') { values.push(value) valueIndex = values.length - 1 valuecache[valueKey] = valueIndex } pbf.writeVarint(valueIndex) } } function command (cmd, length) { return (length << 3) + (cmd & 0x7) } function zigzag (num) { return (num << 1) ^ (num >> 31) } function writeGeometry (feature, pbf) { var geometry = feature.loadGeometry() var type = feature.type var x = 0 var y = 0 var rings = geometry.length for (var r = 0; r < rings; r++) { var ring = geometry[r] var count = 1 if (type === 1) { count = ring.length } pbf.writeVarint(command(1, count)) // moveto // do not write polygon closing path as lineto var lineCount = type === 3 ? ring.length - 1 : ring.length for (var i = 0; i < lineCount; i++) { if (i === 1 && type !== 1) { pbf.writeVarint(command(2, lineCount - 1)) // lineto } var dx = ring[i].x - x var dy = ring[i].y - y pbf.writeVarint(zigzag(dx)) pbf.writeVarint(zigzag(dy)) x += dx y += dy } if (type === 3) { pbf.writeVarint(command(7, 1)) // closepath } } } function writeValue (value, pbf) { var type = typeof value if (type === 'string') { pbf.writeStringField(1, value) } else if (type === 'boolean') { pbf.writeBooleanField(7, value) } else if (type === 'number') { if (value % 1 !== 0) { pbf.writeDoubleField(3, value) } else if (value < 0) { pbf.writeSVarintField(6, value) } else { pbf.writeVarintField(5, value) } } } },{"./lib/geojson_wrapper":346,"pbf":277}],346:[function(require,module,exports){ 'use strict' var Point = require('@mapbox/point-geometry') var VectorTileFeature = require('@mapbox/vector-tile').VectorTileFeature module.exports = GeoJSONWrapper // conform to vectortile api function GeoJSONWrapper (features, options) { this.options = options || {} this.features = features this.length = features.length } GeoJSONWrapper.prototype.feature = function (i) { return new FeatureWrapper(this.features[i], this.options.extent) } function FeatureWrapper (feature, extent) { this.id = typeof feature.id === 'number' ? feature.id : undefined this.type = feature.type this.rawGeometry = feature.type === 1 ? [feature.geometry] : feature.geometry this.properties = feature.tags this.extent = extent || 4096 } FeatureWrapper.prototype.loadGeometry = function () { var rings = this.rawGeometry this.geometry = [] for (var i = 0; i < rings.length; i++) { var ring = rings[i] var newRing = [] for (var j = 0; j < ring.length; j++) { newRing.push(new Point(ring[j][0], ring[j][1])) } this.geometry.push(newRing) } return this.geometry } FeatureWrapper.prototype.bbox = function () { if (!this.geometry) this.loadGeometry() var rings = this.geometry var x1 = Infinity var x2 = -Infinity var y1 = Infinity var y2 = -Infinity for (var i = 0; i < rings.length; i++) { var ring = rings[i] for (var j = 0; j < ring.length; j++) { var coord = ring[j] x1 = Math.min(x1, coord.x) x2 = Math.max(x2, coord.x) y1 = Math.min(y1, coord.y) y2 = Math.max(y2, coord.y) } } return [x1, y1, x2, y2] } FeatureWrapper.prototype.toGeoJSON = VectorTileFeature.prototype.toGeoJSON },{"@mapbox/point-geometry":112,"@mapbox/vector-tile":113}],347:[function(require,module,exports){ var bundleFn = arguments[3]; var sources = arguments[4]; var cache = arguments[5]; var stringify = JSON.stringify; module.exports = function (fn, options) { var wkey; var cacheKeys = Object.keys(cache); for (var i = 0, l = cacheKeys.length; i < l; i++) { var key = cacheKeys[i]; var exp = cache[key].exports; // Using babel as a transpiler to use esmodule, the export will always // be an object with the default export as a property of it. To ensure // the existing api and babel esmodule exports are both supported we // check for both if (exp === fn || exp && exp.default === fn) { wkey = key; break; } } if (!wkey) { wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16); var wcache = {}; for (var i = 0, l = cacheKeys.length; i < l; i++) { var key = cacheKeys[i]; wcache[key] = key; } sources[wkey] = [ 'function(require,module,exports){' + fn + '(self); }', wcache ]; } var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16); var scache = {}; scache[wkey] = wkey; sources[skey] = [ 'function(require,module,exports){' + // try to call default if defined to also support babel esmodule exports 'var f = require(' + stringify(wkey) + ');' + '(f.default ? f.default : f)(self);' + '}', scache ]; var workerSources = {}; resolveSources(skey); function resolveSources(key) { workerSources[key] = true; for (var depPath in sources[key][1]) { var depKey = sources[key][1][depPath]; if (!workerSources[depKey]) { resolveSources(depKey); } } } var src = '(' + bundleFn + ')({' + Object.keys(workerSources).map(function (key) { return stringify(key) + ':[' + sources[key][0] + ',' + stringify(sources[key][1]) + ']' ; }).join(',') + '},{},[' + stringify(skey) + '])' ; var URL = window.URL || window.webkitURL || window.mozURL || window.msURL; var blob = new Blob([src], { type: 'text/javascript' }); if (options && options.bare) { return blob; } var workerUrl = URL.createObjectURL(blob); var worker = new Worker(workerUrl); worker.objectURL = workerUrl; return worker; }; },{}],348:[function(require,module,exports){ (function (Buffer){ module.exports = BinaryReader; function BinaryReader(buffer, isBigEndian) { this.buffer = buffer; this.position = 0; this.isBigEndian = isBigEndian || false; } function _read(readLE, readBE, size) { return function () { var value; if (this.isBigEndian) value = readBE.call(this.buffer, this.position); else value = readLE.call(this.buffer, this.position); this.position += size; return value; }; } BinaryReader.prototype.readUInt8 = _read(Buffer.prototype.readUInt8, Buffer.prototype.readUInt8, 1); BinaryReader.prototype.readUInt16 = _read(Buffer.prototype.readUInt16LE, Buffer.prototype.readUInt16BE, 2); BinaryReader.prototype.readUInt32 = _read(Buffer.prototype.readUInt32LE, Buffer.prototype.readUInt32BE, 4); BinaryReader.prototype.readInt8 = _read(Buffer.prototype.readInt8, Buffer.prototype.readInt8, 1); BinaryReader.prototype.readInt16 = _read(Buffer.prototype.readInt16LE, Buffer.prototype.readInt16BE, 2); BinaryReader.prototype.readInt32 = _read(Buffer.prototype.readInt32LE, Buffer.prototype.readInt32BE, 4); BinaryReader.prototype.readFloat = _read(Buffer.prototype.readFloatLE, Buffer.prototype.readFloatBE, 4); BinaryReader.prototype.readDouble = _read(Buffer.prototype.readDoubleLE, Buffer.prototype.readDoubleBE, 8); BinaryReader.prototype.readVarInt = function () { var nextByte, result = 0, bytesRead = 0; do { nextByte = this.buffer[this.position + bytesRead]; result += (nextByte & 0x7F) << (7 * bytesRead); bytesRead++; } while (nextByte >= 0x80); this.position += bytesRead; return result; }; }).call(this,require("buffer").Buffer) },{"buffer":182}],349:[function(require,module,exports){ (function (Buffer){ module.exports = BinaryWriter; function BinaryWriter(size, allowResize) { this.buffer = new Buffer(size); this.position = 0; this.allowResize = allowResize; } function _write(write, size) { return function (value, noAssert) { this.ensureSize(size); write.call(this.buffer, value, this.position, noAssert); this.position += size; }; } BinaryWriter.prototype.writeUInt8 = _write(Buffer.prototype.writeUInt8, 1); BinaryWriter.prototype.writeUInt16LE = _write(Buffer.prototype.writeUInt16LE, 2); BinaryWriter.prototype.writeUInt16BE = _write(Buffer.prototype.writeUInt16BE, 2); BinaryWriter.prototype.writeUInt32LE = _write(Buffer.prototype.writeUInt32LE, 4); BinaryWriter.prototype.writeUInt32BE = _write(Buffer.prototype.writeUInt32BE, 4); BinaryWriter.prototype.writeInt8 = _write(Buffer.prototype.writeInt8, 1); BinaryWriter.prototype.writeInt16LE = _write(Buffer.prototype.writeInt16LE, 2); BinaryWriter.prototype.writeInt16BE = _write(Buffer.prototype.writeInt16BE, 2); BinaryWriter.prototype.writeInt32LE = _write(Buffer.prototype.writeInt32LE, 4); BinaryWriter.prototype.writeInt32BE = _write(Buffer.prototype.writeInt32BE, 4); BinaryWriter.prototype.writeFloatLE = _write(Buffer.prototype.writeFloatLE, 4); BinaryWriter.prototype.writeFloatBE = _write(Buffer.prototype.writeFloatBE, 4); BinaryWriter.prototype.writeDoubleLE = _write(Buffer.prototype.writeDoubleLE, 8); BinaryWriter.prototype.writeDoubleBE = _write(Buffer.prototype.writeDoubleBE, 8); BinaryWriter.prototype.writeBuffer = function (buffer) { this.ensureSize(buffer.length); buffer.copy(this.buffer, this.position, 0, buffer.length); this.position += buffer.length; }; BinaryWriter.prototype.writeVarInt = function (value) { var length = 1; while ((value & 0xFFFFFF80) !== 0) { this.writeUInt8((value & 0x7F) | 0x80); value >>>= 7; length++; } this.writeUInt8(value & 0x7F); return length; }; BinaryWriter.prototype.ensureSize = function (size) { if (this.buffer.length < this.position + size) { if (this.allowResize) { var tempBuffer = new Buffer(this.position + size); this.buffer.copy(tempBuffer, 0, 0, this.buffer.length); this.buffer = tempBuffer; } else { throw new RangeError('index out of range'); } } }; }).call(this,require("buffer").Buffer) },{"buffer":182}],350:[function(require,module,exports){ (function (Buffer){ module.exports = Geometry; var Types = require('./types'); var Point = require('./point'); var LineString = require('./linestring'); var Polygon = require('./polygon'); var MultiPoint = require('./multipoint'); var MultiLineString = require('./multilinestring'); var MultiPolygon = require('./multipolygon'); var GeometryCollection = require('./geometrycollection'); var BinaryReader = require('./binaryreader'); var BinaryWriter = require('./binarywriter'); var WktParser = require('./wktparser'); var ZigZag = require('./zigzag.js'); function Geometry() { this.srid = undefined; this.hasZ = false; this.hasM = false; } Geometry.parse = function (value, options) { var valueType = typeof value; if (valueType === 'string' || value instanceof WktParser) return Geometry._parseWkt(value); else if (Buffer.isBuffer(value) || value instanceof BinaryReader) return Geometry._parseWkb(value, options); else throw new Error('first argument must be a string or Buffer'); }; Geometry._parseWkt = function (value) { var wktParser, srid; if (value instanceof WktParser) wktParser = value; else wktParser = new WktParser(value); var match = wktParser.matchRegex([/^SRID=(\d+);/]); if (match) srid = parseInt(match[1], 10); var geometryType = wktParser.matchType(); var dimension = wktParser.matchDimension(); var options = { srid: srid, hasZ: dimension.hasZ, hasM: dimension.hasM }; switch (geometryType) { case Types.wkt.Point: return Point._parseWkt(wktParser, options); case Types.wkt.LineString: return LineString._parseWkt(wktParser, options); case Types.wkt.Polygon: return Polygon._parseWkt(wktParser, options); case Types.wkt.MultiPoint: return MultiPoint._parseWkt(wktParser, options); case Types.wkt.MultiLineString: return MultiLineString._parseWkt(wktParser, options); case Types.wkt.MultiPolygon: return MultiPolygon._parseWkt(wktParser, options); case Types.wkt.GeometryCollection: return GeometryCollection._parseWkt(wktParser, options); } }; Geometry._parseWkb = function (value, parentOptions) { var binaryReader, wkbType, geometryType, options = {}; if (value instanceof BinaryReader) binaryReader = value; else binaryReader = new BinaryReader(value); binaryReader.isBigEndian = !binaryReader.readInt8(); wkbType = binaryReader.readUInt32(); options.hasSrid = (wkbType & 0x20000000) === 0x20000000; options.isEwkb = (wkbType & 0x20000000) || (wkbType & 0x40000000) || (wkbType & 0x80000000); if (options.hasSrid) options.srid = binaryReader.readUInt32(); options.hasZ = false; options.hasM = false; if (!options.isEwkb && (!parentOptions || !parentOptions.isEwkb)) { if (wkbType >= 1000 && wkbType < 2000) { options.hasZ = true; geometryType = wkbType - 1000; } else if (wkbType >= 2000 && wkbType < 3000) { options.hasM = true; geometryType = wkbType - 2000; } else if (wkbType >= 3000 && wkbType < 4000) { options.hasZ = true; options.hasM = true; geometryType = wkbType - 3000; } else { geometryType = wkbType; } } else { if (wkbType & 0x80000000) options.hasZ = true; if (wkbType & 0x40000000) options.hasM = true; geometryType = wkbType & 0xF; } switch (geometryType) { case Types.wkb.Point: return Point._parseWkb(binaryReader, options); case Types.wkb.LineString: return LineString._parseWkb(binaryReader, options); case Types.wkb.Polygon: return Polygon._parseWkb(binaryReader, options); case Types.wkb.MultiPoint: return MultiPoint._parseWkb(binaryReader, options); case Types.wkb.MultiLineString: return MultiLineString._parseWkb(binaryReader, options); case Types.wkb.MultiPolygon: return MultiPolygon._parseWkb(binaryReader, options); case Types.wkb.GeometryCollection: return GeometryCollection._parseWkb(binaryReader, options); default: throw new Error('GeometryType ' + geometryType + ' not supported'); } }; Geometry.parseTwkb = function (value) { var binaryReader, options = {}; if (value instanceof BinaryReader) binaryReader = value; else binaryReader = new BinaryReader(value); var type = binaryReader.readUInt8(); var metadataHeader = binaryReader.readUInt8(); var geometryType = type & 0x0F; options.precision = ZigZag.decode(type >> 4); options.precisionFactor = Math.pow(10, options.precision); options.hasBoundingBox = metadataHeader >> 0 & 1; options.hasSizeAttribute = metadataHeader >> 1 & 1; options.hasIdList = metadataHeader >> 2 & 1; options.hasExtendedPrecision = metadataHeader >> 3 & 1; options.isEmpty = metadataHeader >> 4 & 1; if (options.hasExtendedPrecision) { var extendedPrecision = binaryReader.readUInt8(); options.hasZ = (extendedPrecision & 0x01) === 0x01; options.hasM = (extendedPrecision & 0x02) === 0x02; options.zPrecision = ZigZag.decode((extendedPrecision & 0x1C) >> 2); options.zPrecisionFactor = Math.pow(10, options.zPrecision); options.mPrecision = ZigZag.decode((extendedPrecision & 0xE0) >> 5); options.mPrecisionFactor = Math.pow(10, options.mPrecision); } else { options.hasZ = false; options.hasM = false; } if (options.hasSizeAttribute) binaryReader.readVarInt(); if (options.hasBoundingBox) { var dimensions = 2; if (options.hasZ) dimensions++; if (options.hasM) dimensions++; for (var i = 0; i < dimensions; i++) { binaryReader.readVarInt(); binaryReader.readVarInt(); } } switch (geometryType) { case Types.wkb.Point: return Point._parseTwkb(binaryReader, options); case Types.wkb.LineString: return LineString._parseTwkb(binaryReader, options); case Types.wkb.Polygon: return Polygon._parseTwkb(binaryReader, options); case Types.wkb.MultiPoint: return MultiPoint._parseTwkb(binaryReader, options); case Types.wkb.MultiLineString: return MultiLineString._parseTwkb(binaryReader, options); case Types.wkb.MultiPolygon: return MultiPolygon._parseTwkb(binaryReader, options); case Types.wkb.GeometryCollection: return GeometryCollection._parseTwkb(binaryReader, options); default: throw new Error('GeometryType ' + geometryType + ' not supported'); } }; Geometry.parseGeoJSON = function (value) { return Geometry._parseGeoJSON(value); }; Geometry._parseGeoJSON = function (value, isSubGeometry) { var geometry; switch (value.type) { case Types.geoJSON.Point: geometry = Point._parseGeoJSON(value); break; case Types.geoJSON.LineString: geometry = LineString._parseGeoJSON(value); break; case Types.geoJSON.Polygon: geometry = Polygon._parseGeoJSON(value); break; case Types.geoJSON.MultiPoint: geometry = MultiPoint._parseGeoJSON(value); break; case Types.geoJSON.MultiLineString: geometry = MultiLineString._parseGeoJSON(value); break; case Types.geoJSON.MultiPolygon: geometry = MultiPolygon._parseGeoJSON(value); break; case Types.geoJSON.GeometryCollection: geometry = GeometryCollection._parseGeoJSON(value); break; default: throw new Error('GeometryType ' + value.type + ' not supported'); } if (value.crs && value.crs.type && value.crs.type === 'name' && value.crs.properties && value.crs.properties.name) { var crs = value.crs.properties.name; if (crs.indexOf('EPSG:') === 0) geometry.srid = parseInt(crs.substring(5)); else if (crs.indexOf('urn:ogc:def:crs:EPSG::') === 0) geometry.srid = parseInt(crs.substring(22)); else throw new Error('Unsupported crs: ' + crs); } else if (!isSubGeometry) { geometry.srid = 4326; } return geometry; }; Geometry.prototype.toEwkt = function () { return 'SRID=' + this.srid + ';' + this.toWkt(); }; Geometry.prototype.toEwkb = function () { var ewkb = new BinaryWriter(this._getWkbSize() + 4); var wkb = this.toWkb(); ewkb.writeInt8(1); ewkb.writeUInt32LE(wkb.slice(1, 5).readUInt32LE(0) | 0x20000000, true); ewkb.writeUInt32LE(this.srid); ewkb.writeBuffer(wkb.slice(5)); return ewkb.buffer; }; Geometry.prototype._getWktType = function (wktType, isEmpty) { var wkt = wktType; if (this.hasZ && this.hasM) wkt += ' ZM '; else if (this.hasZ) wkt += ' Z '; else if (this.hasM) wkt += ' M '; if (isEmpty && !this.hasZ && !this.hasM) wkt += ' '; if (isEmpty) wkt += 'EMPTY'; return wkt; }; Geometry.prototype._getWktCoordinate = function (point) { var coordinates = point.x + ' ' + point.y; if (this.hasZ) coordinates += ' ' + point.z; if (this.hasM) coordinates += ' ' + point.m; return coordinates; }; Geometry.prototype._writeWkbType = function (wkb, geometryType, parentOptions) { var dimensionType = 0; if (typeof this.srid === 'undefined' && (!parentOptions || typeof parentOptions.srid === 'undefined')) { if (this.hasZ && this.hasM) dimensionType += 3000; else if(this.hasZ) dimensionType += 1000; else if(this.hasM) dimensionType += 2000; } else { if (this.hasZ) dimensionType |= 0x80000000; if (this.hasM) dimensionType |= 0x40000000; } wkb.writeUInt32LE(dimensionType + geometryType, true); }; Geometry.getTwkbPrecision = function (xyPrecision, zPrecision, mPrecision) { return { xy: xyPrecision, z: zPrecision, m: mPrecision, xyFactor: Math.pow(10, xyPrecision), zFactor: Math.pow(10, zPrecision), mFactor: Math.pow(10, mPrecision) }; }; Geometry.prototype._writeTwkbHeader = function (twkb, geometryType, precision, isEmpty) { var type = (ZigZag.encode(precision.xy) << 4) + geometryType; var metadataHeader = (this.hasZ || this.hasM) << 3; metadataHeader += isEmpty << 4; twkb.writeUInt8(type); twkb.writeUInt8(metadataHeader); if (this.hasZ || this.hasM) { var extendedPrecision = 0; if (this.hasZ) extendedPrecision |= 0x1; if (this.hasM) extendedPrecision |= 0x2; twkb.writeUInt8(extendedPrecision); } }; Geometry.prototype.toGeoJSON = function (options) { var geoJSON = {}; if (this.srid) { if (options) { if (options.shortCrs) { geoJSON.crs = { type: 'name', properties: { name: 'EPSG:' + this.srid } }; } else if (options.longCrs) { geoJSON.crs = { type: 'name', properties: { name: 'urn:ogc:def:crs:EPSG::' + this.srid } }; } } } return geoJSON; }; }).call(this,{"isBuffer":require("../../is-buffer/index.js")}) },{"../../is-buffer/index.js":263,"./binaryreader":348,"./binarywriter":349,"./geometrycollection":351,"./linestring":352,"./multilinestring":353,"./multipoint":354,"./multipolygon":355,"./point":356,"./polygon":357,"./types":358,"./wktparser":359,"./zigzag.js":361}],351:[function(require,module,exports){ module.exports = GeometryCollection; var util = require('util'); var Types = require('./types'); var Geometry = require('./geometry'); var BinaryWriter = require('./binarywriter'); function GeometryCollection(geometries, srid) { Geometry.call(this); this.geometries = geometries || []; this.srid = srid; if (this.geometries.length > 0) { this.hasZ = this.geometries[0].hasZ; this.hasM = this.geometries[0].hasM; } } util.inherits(GeometryCollection, Geometry); GeometryCollection.Z = function (geometries, srid) { var geometryCollection = new GeometryCollection(geometries, srid); geometryCollection.hasZ = true; return geometryCollection; }; GeometryCollection.M = function (geometries, srid) { var geometryCollection = new GeometryCollection(geometries, srid); geometryCollection.hasM = true; return geometryCollection; }; GeometryCollection.ZM = function (geometries, srid) { var geometryCollection = new GeometryCollection(geometries, srid); geometryCollection.hasZ = true; geometryCollection.hasM = true; return geometryCollection; }; GeometryCollection._parseWkt = function (value, options) { var geometryCollection = new GeometryCollection(); geometryCollection.srid = options.srid; geometryCollection.hasZ = options.hasZ; geometryCollection.hasM = options.hasM; if (value.isMatch(['EMPTY'])) return geometryCollection; value.expectGroupStart(); do { geometryCollection.geometries.push(Geometry.parse(value)); } while (value.isMatch([','])); value.expectGroupEnd(); return geometryCollection; }; GeometryCollection._parseWkb = function (value, options) { var geometryCollection = new GeometryCollection(); geometryCollection.srid = options.srid; geometryCollection.hasZ = options.hasZ; geometryCollection.hasM = options.hasM; var geometryCount = value.readUInt32(); for (var i = 0; i < geometryCount; i++) geometryCollection.geometries.push(Geometry.parse(value, options)); return geometryCollection; }; GeometryCollection._parseTwkb = function (value, options) { var geometryCollection = new GeometryCollection(); geometryCollection.hasZ = options.hasZ; geometryCollection.hasM = options.hasM; if (options.isEmpty) return geometryCollection; var geometryCount = value.readVarInt(); for (var i = 0; i < geometryCount; i++) geometryCollection.geometries.push(Geometry.parseTwkb(value)); return geometryCollection; }; GeometryCollection._parseGeoJSON = function (value) { var geometryCollection = new GeometryCollection(); for (var i = 0; i < value.geometries.length; i++) geometryCollection.geometries.push(Geometry._parseGeoJSON(value.geometries[i], true)); if (geometryCollection.geometries.length > 0) geometryCollection.hasZ = geometryCollection.geometries[0].hasZ; return geometryCollection; }; GeometryCollection.prototype.toWkt = function () { if (this.geometries.length === 0) return this._getWktType(Types.wkt.GeometryCollection, true); var wkt = this._getWktType(Types.wkt.GeometryCollection, false) + '('; for (var i = 0; i < this.geometries.length; i++) wkt += this.geometries[i].toWkt() + ','; wkt = wkt.slice(0, -1); wkt += ')'; return wkt; }; GeometryCollection.prototype.toWkb = function () { var wkb = new BinaryWriter(this._getWkbSize()); wkb.writeInt8(1); this._writeWkbType(wkb, Types.wkb.GeometryCollection); wkb.writeUInt32LE(this.geometries.length); for (var i = 0; i < this.geometries.length; i++) wkb.writeBuffer(this.geometries[i].toWkb({ srid: this.srid })); return wkb.buffer; }; GeometryCollection.prototype.toTwkb = function () { var twkb = new BinaryWriter(0, true); var precision = Geometry.getTwkbPrecision(5, 0, 0); var isEmpty = this.geometries.length === 0; this._writeTwkbHeader(twkb, Types.wkb.GeometryCollection, precision, isEmpty); if (this.geometries.length > 0) { twkb.writeVarInt(this.geometries.length); for (var i = 0; i < this.geometries.length; i++) twkb.writeBuffer(this.geometries[i].toTwkb()); } return twkb.buffer; }; GeometryCollection.prototype._getWkbSize = function () { var size = 1 + 4 + 4; for (var i = 0; i < this.geometries.length; i++) size += this.geometries[i]._getWkbSize(); return size; }; GeometryCollection.prototype.toGeoJSON = function (options) { var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); geoJSON.type = Types.geoJSON.GeometryCollection; geoJSON.geometries = []; for (var i = 0; i < this.geometries.length; i++) geoJSON.geometries.push(this.geometries[i].toGeoJSON()); return geoJSON; }; },{"./binarywriter":349,"./geometry":350,"./types":358,"util":343}],352:[function(require,module,exports){ module.exports = LineString; var util = require('util'); var Geometry = require('./geometry'); var Types = require('./types'); var Point = require('./point'); var BinaryWriter = require('./binarywriter'); function LineString(points, srid) { Geometry.call(this); this.points = points || []; this.srid = srid; if (this.points.length > 0) { this.hasZ = this.points[0].hasZ; this.hasM = this.points[0].hasM; } } util.inherits(LineString, Geometry); LineString.Z = function (points, srid) { var lineString = new LineString(points, srid); lineString.hasZ = true; return lineString; }; LineString.M = function (points, srid) { var lineString = new LineString(points, srid); lineString.hasM = true; return lineString; }; LineString.ZM = function (points, srid) { var lineString = new LineString(points, srid); lineString.hasZ = true; lineString.hasM = true; return lineString; }; LineString._parseWkt = function (value, options) { var lineString = new LineString(); lineString.srid = options.srid; lineString.hasZ = options.hasZ; lineString.hasM = options.hasM; if (value.isMatch(['EMPTY'])) return lineString; value.expectGroupStart(); lineString.points.push.apply(lineString.points, value.matchCoordinates(options)); value.expectGroupEnd(); return lineString; }; LineString._parseWkb = function (value, options) { var lineString = new LineString(); lineString.srid = options.srid; lineString.hasZ = options.hasZ; lineString.hasM = options.hasM; var pointCount = value.readUInt32(); for (var i = 0; i < pointCount; i++) lineString.points.push(Point._readWkbPoint(value, options)); return lineString; }; LineString._parseTwkb = function (value, options) { var lineString = new LineString(); lineString.hasZ = options.hasZ; lineString.hasM = options.hasM; if (options.isEmpty) return lineString; var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); var pointCount = value.readVarInt(); for (var i = 0; i < pointCount; i++) lineString.points.push(Point._readTwkbPoint(value, options, previousPoint)); return lineString; }; LineString._parseGeoJSON = function (value) { var lineString = new LineString(); if (value.coordinates.length > 0) lineString.hasZ = value.coordinates[0].length > 2; for (var i = 0; i < value.coordinates.length; i++) lineString.points.push(Point._readGeoJSONPoint(value.coordinates[i])); return lineString; }; LineString.prototype.toWkt = function () { if (this.points.length === 0) return this._getWktType(Types.wkt.LineString, true); return this._getWktType(Types.wkt.LineString, false) + this._toInnerWkt(); }; LineString.prototype._toInnerWkt = function () { var innerWkt = '('; for (var i = 0; i < this.points.length; i++) innerWkt += this._getWktCoordinate(this.points[i]) + ','; innerWkt = innerWkt.slice(0, -1); innerWkt += ')'; return innerWkt; }; LineString.prototype.toWkb = function (parentOptions) { var wkb = new BinaryWriter(this._getWkbSize()); wkb.writeInt8(1); this._writeWkbType(wkb, Types.wkb.LineString, parentOptions); wkb.writeUInt32LE(this.points.length); for (var i = 0; i < this.points.length; i++) this.points[i]._writeWkbPoint(wkb); return wkb.buffer; }; LineString.prototype.toTwkb = function () { var twkb = new BinaryWriter(0, true); var precision = Geometry.getTwkbPrecision(5, 0, 0); var isEmpty = this.points.length === 0; this._writeTwkbHeader(twkb, Types.wkb.LineString, precision, isEmpty); if (this.points.length > 0) { twkb.writeVarInt(this.points.length); var previousPoint = new Point(0, 0, 0, 0); for (var i = 0; i < this.points.length; i++) this.points[i]._writeTwkbPoint(twkb, precision, previousPoint); } return twkb.buffer; }; LineString.prototype._getWkbSize = function () { var coordinateSize = 16; if (this.hasZ) coordinateSize += 8; if (this.hasM) coordinateSize += 8; return 1 + 4 + 4 + (this.points.length * coordinateSize); }; LineString.prototype.toGeoJSON = function (options) { var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); geoJSON.type = Types.geoJSON.LineString; geoJSON.coordinates = []; for (var i = 0; i < this.points.length; i++) { if (this.hasZ) geoJSON.coordinates.push([this.points[i].x, this.points[i].y, this.points[i].z]); else geoJSON.coordinates.push([this.points[i].x, this.points[i].y]); } return geoJSON; }; },{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],353:[function(require,module,exports){ module.exports = MultiLineString; var util = require('util'); var Types = require('./types'); var Geometry = require('./geometry'); var Point = require('./point'); var LineString = require('./linestring'); var BinaryWriter = require('./binarywriter'); function MultiLineString(lineStrings, srid) { Geometry.call(this); this.lineStrings = lineStrings || []; this.srid = srid; if (this.lineStrings.length > 0) { this.hasZ = this.lineStrings[0].hasZ; this.hasM = this.lineStrings[0].hasM; } } util.inherits(MultiLineString, Geometry); MultiLineString.Z = function (lineStrings, srid) { var multiLineString = new MultiLineString(lineStrings, srid); multiLineString.hasZ = true; return multiLineString; }; MultiLineString.M = function (lineStrings, srid) { var multiLineString = new MultiLineString(lineStrings, srid); multiLineString.hasM = true; return multiLineString; }; MultiLineString.ZM = function (lineStrings, srid) { var multiLineString = new MultiLineString(lineStrings, srid); multiLineString.hasZ = true; multiLineString.hasM = true; return multiLineString; }; MultiLineString._parseWkt = function (value, options) { var multiLineString = new MultiLineString(); multiLineString.srid = options.srid; multiLineString.hasZ = options.hasZ; multiLineString.hasM = options.hasM; if (value.isMatch(['EMPTY'])) return multiLineString; value.expectGroupStart(); do { value.expectGroupStart(); multiLineString.lineStrings.push(new LineString(value.matchCoordinates(options))); value.expectGroupEnd(); } while (value.isMatch([','])); value.expectGroupEnd(); return multiLineString; }; MultiLineString._parseWkb = function (value, options) { var multiLineString = new MultiLineString(); multiLineString.srid = options.srid; multiLineString.hasZ = options.hasZ; multiLineString.hasM = options.hasM; var lineStringCount = value.readUInt32(); for (var i = 0; i < lineStringCount; i++) multiLineString.lineStrings.push(Geometry.parse(value, options)); return multiLineString; }; MultiLineString._parseTwkb = function (value, options) { var multiLineString = new MultiLineString(); multiLineString.hasZ = options.hasZ; multiLineString.hasM = options.hasM; if (options.isEmpty) return multiLineString; var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); var lineStringCount = value.readVarInt(); for (var i = 0; i < lineStringCount; i++) { var lineString = new LineString(); lineString.hasZ = options.hasZ; lineString.hasM = options.hasM; var pointCount = value.readVarInt(); for (var j = 0; j < pointCount; j++) lineString.points.push(Point._readTwkbPoint(value, options, previousPoint)); multiLineString.lineStrings.push(lineString); } return multiLineString; }; MultiLineString._parseGeoJSON = function (value) { var multiLineString = new MultiLineString(); if (value.coordinates.length > 0 && value.coordinates[0].length > 0) multiLineString.hasZ = value.coordinates[0][0].length > 2; for (var i = 0; i < value.coordinates.length; i++) multiLineString.lineStrings.push(LineString._parseGeoJSON({ coordinates: value.coordinates[i] })); return multiLineString; }; MultiLineString.prototype.toWkt = function () { if (this.lineStrings.length === 0) return this._getWktType(Types.wkt.MultiLineString, true); var wkt = this._getWktType(Types.wkt.MultiLineString, false) + '('; for (var i = 0; i < this.lineStrings.length; i++) wkt += this.lineStrings[i]._toInnerWkt() + ','; wkt = wkt.slice(0, -1); wkt += ')'; return wkt; }; MultiLineString.prototype.toWkb = function () { var wkb = new BinaryWriter(this._getWkbSize()); wkb.writeInt8(1); this._writeWkbType(wkb, Types.wkb.MultiLineString); wkb.writeUInt32LE(this.lineStrings.length); for (var i = 0; i < this.lineStrings.length; i++) wkb.writeBuffer(this.lineStrings[i].toWkb({ srid: this.srid })); return wkb.buffer; }; MultiLineString.prototype.toTwkb = function () { var twkb = new BinaryWriter(0, true); var precision = Geometry.getTwkbPrecision(5, 0, 0); var isEmpty = this.lineStrings.length === 0; this._writeTwkbHeader(twkb, Types.wkb.MultiLineString, precision, isEmpty); if (this.lineStrings.length > 0) { twkb.writeVarInt(this.lineStrings.length); var previousPoint = new Point(0, 0, 0, 0); for (var i = 0; i < this.lineStrings.length; i++) { twkb.writeVarInt(this.lineStrings[i].points.length); for (var j = 0; j < this.lineStrings[i].points.length; j++) this.lineStrings[i].points[j]._writeTwkbPoint(twkb, precision, previousPoint); } } return twkb.buffer; }; MultiLineString.prototype._getWkbSize = function () { var size = 1 + 4 + 4; for (var i = 0; i < this.lineStrings.length; i++) size += this.lineStrings[i]._getWkbSize(); return size; }; MultiLineString.prototype.toGeoJSON = function (options) { var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); geoJSON.type = Types.geoJSON.MultiLineString; geoJSON.coordinates = []; for (var i = 0; i < this.lineStrings.length; i++) geoJSON.coordinates.push(this.lineStrings[i].toGeoJSON().coordinates); return geoJSON; }; },{"./binarywriter":349,"./geometry":350,"./linestring":352,"./point":356,"./types":358,"util":343}],354:[function(require,module,exports){ module.exports = MultiPoint; var util = require('util'); var Types = require('./types'); var Geometry = require('./geometry'); var Point = require('./point'); var BinaryWriter = require('./binarywriter'); function MultiPoint(points, srid) { Geometry.call(this); this.points = points || []; this.srid = srid; if (this.points.length > 0) { this.hasZ = this.points[0].hasZ; this.hasM = this.points[0].hasM; } } util.inherits(MultiPoint, Geometry); MultiPoint.Z = function (points, srid) { var multiPoint = new MultiPoint(points, srid); multiPoint.hasZ = true; return multiPoint; }; MultiPoint.M = function (points, srid) { var multiPoint = new MultiPoint(points, srid); multiPoint.hasM = true; return multiPoint; }; MultiPoint.ZM = function (points, srid) { var multiPoint = new MultiPoint(points, srid); multiPoint.hasZ = true; multiPoint.hasM = true; return multiPoint; }; MultiPoint._parseWkt = function (value, options) { var multiPoint = new MultiPoint(); multiPoint.srid = options.srid; multiPoint.hasZ = options.hasZ; multiPoint.hasM = options.hasM; if (value.isMatch(['EMPTY'])) return multiPoint; value.expectGroupStart(); multiPoint.points.push.apply(multiPoint.points, value.matchCoordinates(options)); value.expectGroupEnd(); return multiPoint; }; MultiPoint._parseWkb = function (value, options) { var multiPoint = new MultiPoint(); multiPoint.srid = options.srid; multiPoint.hasZ = options.hasZ; multiPoint.hasM = options.hasM; var pointCount = value.readUInt32(); for (var i = 0; i < pointCount; i++) multiPoint.points.push(Geometry.parse(value, options)); return multiPoint; }; MultiPoint._parseTwkb = function (value, options) { var multiPoint = new MultiPoint(); multiPoint.hasZ = options.hasZ; multiPoint.hasM = options.hasM; if (options.isEmpty) return multiPoint; var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); var pointCount = value.readVarInt(); for (var i = 0; i < pointCount; i++) multiPoint.points.push(Point._readTwkbPoint(value, options, previousPoint)); return multiPoint; }; MultiPoint._parseGeoJSON = function (value) { var multiPoint = new MultiPoint(); if (value.coordinates.length > 0) multiPoint.hasZ = value.coordinates[0].length > 2; for (var i = 0; i < value.coordinates.length; i++) multiPoint.points.push(Point._parseGeoJSON({ coordinates: value.coordinates[i] })); return multiPoint; }; MultiPoint.prototype.toWkt = function () { if (this.points.length === 0) return this._getWktType(Types.wkt.MultiPoint, true); var wkt = this._getWktType(Types.wkt.MultiPoint, false) + '('; for (var i = 0; i < this.points.length; i++) wkt += this._getWktCoordinate(this.points[i]) + ','; wkt = wkt.slice(0, -1); wkt += ')'; return wkt; }; MultiPoint.prototype.toWkb = function () { var wkb = new BinaryWriter(this._getWkbSize()); wkb.writeInt8(1); this._writeWkbType(wkb, Types.wkb.MultiPoint); wkb.writeUInt32LE(this.points.length); for (var i = 0; i < this.points.length; i++) wkb.writeBuffer(this.points[i].toWkb({ srid: this.srid })); return wkb.buffer; }; MultiPoint.prototype.toTwkb = function () { var twkb = new BinaryWriter(0, true); var precision = Geometry.getTwkbPrecision(5, 0, 0); var isEmpty = this.points.length === 0; this._writeTwkbHeader(twkb, Types.wkb.MultiPoint, precision, isEmpty); if (this.points.length > 0) { twkb.writeVarInt(this.points.length); var previousPoint = new Point(0, 0, 0, 0); for (var i = 0; i < this.points.length; i++) this.points[i]._writeTwkbPoint(twkb, precision, previousPoint); } return twkb.buffer; }; MultiPoint.prototype._getWkbSize = function () { var coordinateSize = 16; if (this.hasZ) coordinateSize += 8; if (this.hasM) coordinateSize += 8; coordinateSize += 5; return 1 + 4 + 4 + (this.points.length * coordinateSize); }; MultiPoint.prototype.toGeoJSON = function (options) { var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); geoJSON.type = Types.geoJSON.MultiPoint; geoJSON.coordinates = []; for (var i = 0; i < this.points.length; i++) geoJSON.coordinates.push(this.points[i].toGeoJSON().coordinates); return geoJSON; }; },{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],355:[function(require,module,exports){ module.exports = MultiPolygon; var util = require('util'); var Types = require('./types'); var Geometry = require('./geometry'); var Point = require('./point'); var Polygon = require('./polygon'); var BinaryWriter = require('./binarywriter'); function MultiPolygon(polygons, srid) { Geometry.call(this); this.polygons = polygons || []; this.srid = srid; if (this.polygons.length > 0) { this.hasZ = this.polygons[0].hasZ; this.hasM = this.polygons[0].hasM; } } util.inherits(MultiPolygon, Geometry); MultiPolygon.Z = function (polygons, srid) { var multiPolygon = new MultiPolygon(polygons, srid); multiPolygon.hasZ = true; return multiPolygon; }; MultiPolygon.M = function (polygons, srid) { var multiPolygon = new MultiPolygon(polygons, srid); multiPolygon.hasM = true; return multiPolygon; }; MultiPolygon.ZM = function (polygons, srid) { var multiPolygon = new MultiPolygon(polygons, srid); multiPolygon.hasZ = true; multiPolygon.hasM = true; return multiPolygon; }; MultiPolygon._parseWkt = function (value, options) { var multiPolygon = new MultiPolygon(); multiPolygon.srid = options.srid; multiPolygon.hasZ = options.hasZ; multiPolygon.hasM = options.hasM; if (value.isMatch(['EMPTY'])) return multiPolygon; value.expectGroupStart(); do { value.expectGroupStart(); var exteriorRing = []; var interiorRings = []; value.expectGroupStart(); exteriorRing.push.apply(exteriorRing, value.matchCoordinates(options)); value.expectGroupEnd(); while (value.isMatch([','])) { value.expectGroupStart(); interiorRings.push(value.matchCoordinates(options)); value.expectGroupEnd(); } multiPolygon.polygons.push(new Polygon(exteriorRing, interiorRings)); value.expectGroupEnd(); } while (value.isMatch([','])); value.expectGroupEnd(); return multiPolygon; }; MultiPolygon._parseWkb = function (value, options) { var multiPolygon = new MultiPolygon(); multiPolygon.srid = options.srid; multiPolygon.hasZ = options.hasZ; multiPolygon.hasM = options.hasM; var polygonCount = value.readUInt32(); for (var i = 0; i < polygonCount; i++) multiPolygon.polygons.push(Geometry.parse(value, options)); return multiPolygon; }; MultiPolygon._parseTwkb = function (value, options) { var multiPolygon = new MultiPolygon(); multiPolygon.hasZ = options.hasZ; multiPolygon.hasM = options.hasM; if (options.isEmpty) return multiPolygon; var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); var polygonCount = value.readVarInt(); for (var i = 0; i < polygonCount; i++) { var polygon = new Polygon(); polygon.hasZ = options.hasZ; polygon.hasM = options.hasM; var ringCount = value.readVarInt(); var exteriorRingCount = value.readVarInt(); for (var j = 0; j < exteriorRingCount; j++) polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint)); for (j = 1; j < ringCount; j++) { var interiorRing = []; var interiorRingCount = value.readVarInt(); for (var k = 0; k < interiorRingCount; k++) interiorRing.push(Point._readTwkbPoint(value, options, previousPoint)); polygon.interiorRings.push(interiorRing); } multiPolygon.polygons.push(polygon); } return multiPolygon; }; MultiPolygon._parseGeoJSON = function (value) { var multiPolygon = new MultiPolygon(); if (value.coordinates.length > 0 && value.coordinates[0].length > 0 && value.coordinates[0][0].length > 0) multiPolygon.hasZ = value.coordinates[0][0][0].length > 2; for (var i = 0; i < value.coordinates.length; i++) multiPolygon.polygons.push(Polygon._parseGeoJSON({ coordinates: value.coordinates[i] })); return multiPolygon; }; MultiPolygon.prototype.toWkt = function () { if (this.polygons.length === 0) return this._getWktType(Types.wkt.MultiPolygon, true); var wkt = this._getWktType(Types.wkt.MultiPolygon, false) + '('; for (var i = 0; i < this.polygons.length; i++) wkt += this.polygons[i]._toInnerWkt() + ','; wkt = wkt.slice(0, -1); wkt += ')'; return wkt; }; MultiPolygon.prototype.toWkb = function () { var wkb = new BinaryWriter(this._getWkbSize()); wkb.writeInt8(1); this._writeWkbType(wkb, Types.wkb.MultiPolygon); wkb.writeUInt32LE(this.polygons.length); for (var i = 0; i < this.polygons.length; i++) wkb.writeBuffer(this.polygons[i].toWkb({ srid: this.srid })); return wkb.buffer; }; MultiPolygon.prototype.toTwkb = function () { var twkb = new BinaryWriter(0, true); var precision = Geometry.getTwkbPrecision(5, 0, 0); var isEmpty = this.polygons.length === 0; this._writeTwkbHeader(twkb, Types.wkb.MultiPolygon, precision, isEmpty); if (this.polygons.length > 0) { twkb.writeVarInt(this.polygons.length); var previousPoint = new Point(0, 0, 0, 0); for (var i = 0; i < this.polygons.length; i++) { twkb.writeVarInt(1 + this.polygons[i].interiorRings.length); twkb.writeVarInt(this.polygons[i].exteriorRing.length); for (var j = 0; j < this.polygons[i].exteriorRing.length; j++) this.polygons[i].exteriorRing[j]._writeTwkbPoint(twkb, precision, previousPoint); for (j = 0; j < this.polygons[i].interiorRings.length; j++) { twkb.writeVarInt(this.polygons[i].interiorRings[j].length); for (var k = 0; k < this.polygons[i].interiorRings[j].length; k++) this.polygons[i].interiorRings[j][k]._writeTwkbPoint(twkb, precision, previousPoint); } } } return twkb.buffer; }; MultiPolygon.prototype._getWkbSize = function () { var size = 1 + 4 + 4; for (var i = 0; i < this.polygons.length; i++) size += this.polygons[i]._getWkbSize(); return size; }; MultiPolygon.prototype.toGeoJSON = function (options) { var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); geoJSON.type = Types.geoJSON.MultiPolygon; geoJSON.coordinates = []; for (var i = 0; i < this.polygons.length; i++) geoJSON.coordinates.push(this.polygons[i].toGeoJSON().coordinates); return geoJSON; }; },{"./binarywriter":349,"./geometry":350,"./point":356,"./polygon":357,"./types":358,"util":343}],356:[function(require,module,exports){ module.exports = Point; var util = require('util'); var Geometry = require('./geometry'); var Types = require('./types'); var BinaryWriter = require('./binarywriter'); var ZigZag = require('./zigzag.js'); function Point(x, y, z, m, srid) { Geometry.call(this); this.x = x; this.y = y; this.z = z; this.m = m; this.srid = srid; this.hasZ = typeof this.z !== 'undefined'; this.hasM = typeof this.m !== 'undefined'; } util.inherits(Point, Geometry); Point.Z = function (x, y, z, srid) { var point = new Point(x, y, z, undefined, srid); point.hasZ = true; return point; }; Point.M = function (x, y, m, srid) { var point = new Point(x, y, undefined, m, srid); point.hasM = true; return point; }; Point.ZM = function (x, y, z, m, srid) { var point = new Point(x, y, z, m, srid); point.hasZ = true; point.hasM = true; return point; }; Point._parseWkt = function (value, options) { var point = new Point(); point.srid = options.srid; point.hasZ = options.hasZ; point.hasM = options.hasM; if (value.isMatch(['EMPTY'])) return point; value.expectGroupStart(); var coordinate = value.matchCoordinate(options); point.x = coordinate.x; point.y = coordinate.y; point.z = coordinate.z; point.m = coordinate.m; value.expectGroupEnd(); return point; }; Point._parseWkb = function (value, options) { var point = Point._readWkbPoint(value, options); point.srid = options.srid; return point; }; Point._readWkbPoint = function (value, options) { return new Point(value.readDouble(), value.readDouble(), options.hasZ ? value.readDouble() : undefined, options.hasM ? value.readDouble() : undefined); }; Point._parseTwkb = function (value, options) { var point = new Point(); point.hasZ = options.hasZ; point.hasM = options.hasM; if (options.isEmpty) return point; point.x = ZigZag.decode(value.readVarInt()) / options.precisionFactor; point.y = ZigZag.decode(value.readVarInt()) / options.precisionFactor; point.z = options.hasZ ? ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor : undefined; point.m = options.hasM ? ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor : undefined; return point; }; Point._readTwkbPoint = function (value, options, previousPoint) { previousPoint.x += ZigZag.decode(value.readVarInt()) / options.precisionFactor; previousPoint.y += ZigZag.decode(value.readVarInt()) / options.precisionFactor; if (options.hasZ) previousPoint.z += ZigZag.decode(value.readVarInt()) / options.zPrecisionFactor; if (options.hasM) previousPoint.m += ZigZag.decode(value.readVarInt()) / options.mPrecisionFactor; return new Point(previousPoint.x, previousPoint.y, previousPoint.z, previousPoint.m); }; Point._parseGeoJSON = function (value) { return Point._readGeoJSONPoint(value.coordinates); }; Point._readGeoJSONPoint = function (coordinates) { if (coordinates.length === 0) return new Point(); if (coordinates.length > 2) return new Point(coordinates[0], coordinates[1], coordinates[2]); return new Point(coordinates[0], coordinates[1]); }; Point.prototype.toWkt = function () { if (typeof this.x === 'undefined' && typeof this.y === 'undefined' && typeof this.z === 'undefined' && typeof this.m === 'undefined') return this._getWktType(Types.wkt.Point, true); return this._getWktType(Types.wkt.Point, false) + '(' + this._getWktCoordinate(this) + ')'; }; Point.prototype.toWkb = function (parentOptions) { var wkb = new BinaryWriter(this._getWkbSize()); wkb.writeInt8(1); this._writeWkbType(wkb, Types.wkb.Point, parentOptions); if (typeof this.x === 'undefined' && typeof this.y === 'undefined') { wkb.writeDoubleLE(NaN); wkb.writeDoubleLE(NaN); if (this.hasZ) wkb.writeDoubleLE(NaN); if (this.hasM) wkb.writeDoubleLE(NaN); } else { this._writeWkbPoint(wkb); } return wkb.buffer; }; Point.prototype._writeWkbPoint = function (wkb) { wkb.writeDoubleLE(this.x); wkb.writeDoubleLE(this.y); if (this.hasZ) wkb.writeDoubleLE(this.z); if (this.hasM) wkb.writeDoubleLE(this.m); }; Point.prototype.toTwkb = function () { var twkb = new BinaryWriter(0, true); var precision = Geometry.getTwkbPrecision(5, 0, 0); var isEmpty = typeof this.x === 'undefined' && typeof this.y === 'undefined'; this._writeTwkbHeader(twkb, Types.wkb.Point, precision, isEmpty); if (!isEmpty) this._writeTwkbPoint(twkb, precision, new Point(0, 0, 0, 0)); return twkb.buffer; }; Point.prototype._writeTwkbPoint = function (twkb, precision, previousPoint) { var x = this.x * precision.xyFactor; var y = this.y * precision.xyFactor; var z = this.z * precision.zFactor; var m = this.m * precision.mFactor; twkb.writeVarInt(ZigZag.encode(x - previousPoint.x)); twkb.writeVarInt(ZigZag.encode(y - previousPoint.y)); if (this.hasZ) twkb.writeVarInt(ZigZag.encode(z - previousPoint.z)); if (this.hasM) twkb.writeVarInt(ZigZag.encode(m - previousPoint.m)); previousPoint.x = x; previousPoint.y = y; previousPoint.z = z; previousPoint.m = m; }; Point.prototype._getWkbSize = function () { var size = 1 + 4 + 8 + 8; if (this.hasZ) size += 8; if (this.hasM) size += 8; return size; }; Point.prototype.toGeoJSON = function (options) { var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); geoJSON.type = Types.geoJSON.Point; if (typeof this.x === 'undefined' && typeof this.y === 'undefined') geoJSON.coordinates = []; else if (typeof this.z !== 'undefined') geoJSON.coordinates = [this.x, this.y, this.z]; else geoJSON.coordinates = [this.x, this.y]; return geoJSON; }; },{"./binarywriter":349,"./geometry":350,"./types":358,"./zigzag.js":361,"util":343}],357:[function(require,module,exports){ module.exports = Polygon; var util = require('util'); var Geometry = require('./geometry'); var Types = require('./types'); var Point = require('./point'); var BinaryWriter = require('./binarywriter'); function Polygon(exteriorRing, interiorRings, srid) { Geometry.call(this); this.exteriorRing = exteriorRing || []; this.interiorRings = interiorRings || []; this.srid = srid; if (this.exteriorRing.length > 0) { this.hasZ = this.exteriorRing[0].hasZ; this.hasM = this.exteriorRing[0].hasM; } } util.inherits(Polygon, Geometry); Polygon.Z = function (exteriorRing, interiorRings, srid) { var polygon = new Polygon(exteriorRing, interiorRings, srid); polygon.hasZ = true; return polygon; }; Polygon.M = function (exteriorRing, interiorRings, srid) { var polygon = new Polygon(exteriorRing, interiorRings, srid); polygon.hasM = true; return polygon; }; Polygon.ZM = function (exteriorRing, interiorRings, srid) { var polygon = new Polygon(exteriorRing, interiorRings, srid); polygon.hasZ = true; polygon.hasM = true; return polygon; }; Polygon._parseWkt = function (value, options) { var polygon = new Polygon(); polygon.srid = options.srid; polygon.hasZ = options.hasZ; polygon.hasM = options.hasM; if (value.isMatch(['EMPTY'])) return polygon; value.expectGroupStart(); value.expectGroupStart(); polygon.exteriorRing.push.apply(polygon.exteriorRing, value.matchCoordinates(options)); value.expectGroupEnd(); while (value.isMatch([','])) { value.expectGroupStart(); polygon.interiorRings.push(value.matchCoordinates(options)); value.expectGroupEnd(); } value.expectGroupEnd(); return polygon; }; Polygon._parseWkb = function (value, options) { var polygon = new Polygon(); polygon.srid = options.srid; polygon.hasZ = options.hasZ; polygon.hasM = options.hasM; var ringCount = value.readUInt32(); if (ringCount > 0) { var exteriorRingCount = value.readUInt32(); for (var i = 0; i < exteriorRingCount; i++) polygon.exteriorRing.push(Point._readWkbPoint(value, options)); for (i = 1; i < ringCount; i++) { var interiorRing = []; var interiorRingCount = value.readUInt32(); for (var j = 0; j < interiorRingCount; j++) interiorRing.push(Point._readWkbPoint(value, options)); polygon.interiorRings.push(interiorRing); } } return polygon; }; Polygon._parseTwkb = function (value, options) { var polygon = new Polygon(); polygon.hasZ = options.hasZ; polygon.hasM = options.hasM; if (options.isEmpty) return polygon; var previousPoint = new Point(0, 0, options.hasZ ? 0 : undefined, options.hasM ? 0 : undefined); var ringCount = value.readVarInt(); var exteriorRingCount = value.readVarInt(); for (var i = 0; i < exteriorRingCount; i++) polygon.exteriorRing.push(Point._readTwkbPoint(value, options, previousPoint)); for (i = 1; i < ringCount; i++) { var interiorRing = []; var interiorRingCount = value.readVarInt(); for (var j = 0; j < interiorRingCount; j++) interiorRing.push(Point._readTwkbPoint(value, options, previousPoint)); polygon.interiorRings.push(interiorRing); } return polygon; }; Polygon._parseGeoJSON = function (value) { var polygon = new Polygon(); if (value.coordinates.length > 0 && value.coordinates[0].length > 0) polygon.hasZ = value.coordinates[0][0].length > 2; for (var i = 0; i < value.coordinates.length; i++) { if (i > 0) polygon.interiorRings.push([]); for (var j = 0; j < value.coordinates[i].length; j++) { if (i === 0) polygon.exteriorRing.push(Point._readGeoJSONPoint(value.coordinates[i][j])); else polygon.interiorRings[i - 1].push(Point._readGeoJSONPoint(value.coordinates[i][j])); } } return polygon; }; Polygon.prototype.toWkt = function () { if (this.exteriorRing.length === 0) return this._getWktType(Types.wkt.Polygon, true); return this._getWktType(Types.wkt.Polygon, false) + this._toInnerWkt(); }; Polygon.prototype._toInnerWkt = function () { var innerWkt = '(('; for (var i = 0; i < this.exteriorRing.length; i++) innerWkt += this._getWktCoordinate(this.exteriorRing[i]) + ','; innerWkt = innerWkt.slice(0, -1); innerWkt += ')'; for (i = 0; i < this.interiorRings.length; i++) { innerWkt += ',('; for (var j = 0; j < this.interiorRings[i].length; j++) { innerWkt += this._getWktCoordinate(this.interiorRings[i][j]) + ','; } innerWkt = innerWkt.slice(0, -1); innerWkt += ')'; } innerWkt += ')'; return innerWkt; }; Polygon.prototype.toWkb = function (parentOptions) { var wkb = new BinaryWriter(this._getWkbSize()); wkb.writeInt8(1); this._writeWkbType(wkb, Types.wkb.Polygon, parentOptions); if (this.exteriorRing.length > 0) { wkb.writeUInt32LE(1 + this.interiorRings.length); wkb.writeUInt32LE(this.exteriorRing.length); } else { wkb.writeUInt32LE(0); } for (var i = 0; i < this.exteriorRing.length; i++) this.exteriorRing[i]._writeWkbPoint(wkb); for (i = 0; i < this.interiorRings.length; i++) { wkb.writeUInt32LE(this.interiorRings[i].length); for (var j = 0; j < this.interiorRings[i].length; j++) this.interiorRings[i][j]._writeWkbPoint(wkb); } return wkb.buffer; }; Polygon.prototype.toTwkb = function () { var twkb = new BinaryWriter(0, true); var precision = Geometry.getTwkbPrecision(5, 0, 0); var isEmpty = this.exteriorRing.length === 0; this._writeTwkbHeader(twkb, Types.wkb.Polygon, precision, isEmpty); if (this.exteriorRing.length > 0) { twkb.writeVarInt(1 + this.interiorRings.length); twkb.writeVarInt(this.exteriorRing.length); var previousPoint = new Point(0, 0, 0, 0); for (var i = 0; i < this.exteriorRing.length; i++) this.exteriorRing[i]._writeTwkbPoint(twkb, precision, previousPoint); for (i = 0; i < this.interiorRings.length; i++) { twkb.writeVarInt(this.interiorRings[i].length); for (var j = 0; j < this.interiorRings[i].length; j++) this.interiorRings[i][j]._writeTwkbPoint(twkb, precision, previousPoint); } } return twkb.buffer; }; Polygon.prototype._getWkbSize = function () { var coordinateSize = 16; if (this.hasZ) coordinateSize += 8; if (this.hasM) coordinateSize += 8; var size = 1 + 4 + 4; if (this.exteriorRing.length > 0) size += 4 + (this.exteriorRing.length * coordinateSize); for (var i = 0; i < this.interiorRings.length; i++) size += 4 + (this.interiorRings[i].length * coordinateSize); return size; }; Polygon.prototype.toGeoJSON = function (options) { var geoJSON = Geometry.prototype.toGeoJSON.call(this, options); geoJSON.type = Types.geoJSON.Polygon; geoJSON.coordinates = []; if (this.exteriorRing.length > 0) { var exteriorRing = []; for (var i = 0; i < this.exteriorRing.length; i++) { if (this.hasZ) exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y, this.exteriorRing[i].z]); else exteriorRing.push([this.exteriorRing[i].x, this.exteriorRing[i].y]); } geoJSON.coordinates.push(exteriorRing); } for (var j = 0; j < this.interiorRings.length; j++) { var interiorRing = []; for (var k = 0; k < this.interiorRings[j].length; k++) { if (this.hasZ) interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y, this.interiorRings[j][k].z]); else interiorRing.push([this.interiorRings[j][k].x, this.interiorRings[j][k].y]); } geoJSON.coordinates.push(interiorRing); } return geoJSON; }; },{"./binarywriter":349,"./geometry":350,"./point":356,"./types":358,"util":343}],358:[function(require,module,exports){ module.exports = { wkt: { Point: 'POINT', LineString: 'LINESTRING', Polygon: 'POLYGON', MultiPoint: 'MULTIPOINT', MultiLineString: 'MULTILINESTRING', MultiPolygon: 'MULTIPOLYGON', GeometryCollection: 'GEOMETRYCOLLECTION' }, wkb: { Point: 1, LineString: 2, Polygon: 3, MultiPoint: 4, MultiLineString: 5, MultiPolygon: 6, GeometryCollection: 7 }, geoJSON: { Point: 'Point', LineString: 'LineString', Polygon: 'Polygon', MultiPoint: 'MultiPoint', MultiLineString: 'MultiLineString', MultiPolygon: 'MultiPolygon', GeometryCollection: 'GeometryCollection' } }; },{}],359:[function(require,module,exports){ module.exports = WktParser; var Types = require('./types'); var Point = require('./point'); function WktParser(value) { this.value = value; this.position = 0; } WktParser.prototype.match = function (tokens) { this.skipWhitespaces(); for (var i = 0; i < tokens.length; i++) { if (this.value.substring(this.position).indexOf(tokens[i]) === 0) { this.position += tokens[i].length; return tokens[i]; } } return null; }; WktParser.prototype.matchRegex = function (tokens) { this.skipWhitespaces(); for (var i = 0; i < tokens.length; i++) { var match = this.value.substring(this.position).match(tokens[i]); if (match) { this.position += match[0].length; return match; } } return null; }; WktParser.prototype.isMatch = function (tokens) { this.skipWhitespaces(); for (var i = 0; i < tokens.length; i++) { if (this.value.substring(this.position).indexOf(tokens[i]) === 0) { this.position += tokens[i].length; return true; } } return false; }; WktParser.prototype.matchType = function () { var geometryType = this.match([Types.wkt.Point, Types.wkt.LineString, Types.wkt.Polygon, Types.wkt.MultiPoint, Types.wkt.MultiLineString, Types.wkt.MultiPolygon, Types.wkt.GeometryCollection]); if (!geometryType) throw new Error('Expected geometry type'); return geometryType; }; WktParser.prototype.matchDimension = function () { var dimension = this.match(['ZM', 'Z', 'M']); switch (dimension) { case 'ZM': return { hasZ: true, hasM: true }; case 'Z': return { hasZ: true, hasM: false }; case 'M': return { hasZ: false, hasM: true }; default: return { hasZ: false, hasM: false }; } }; WktParser.prototype.expectGroupStart = function () { if (!this.isMatch(['('])) throw new Error('Expected group start'); }; WktParser.prototype.expectGroupEnd = function () { if (!this.isMatch([')'])) throw new Error('Expected group end'); }; WktParser.prototype.matchCoordinate = function (options) { var match; if (options.hasZ && options.hasM) match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]); else if (options.hasZ || options.hasM) match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]); else match = this.matchRegex([/^(-?\d+\.?\d*)\s+(-?\d+\.?\d*)/]); if (!match) throw new Error('Expected coordinates'); if (options.hasZ && options.hasM) return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4])); else if (options.hasZ) return new Point(parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3])); else if (options.hasM) return new Point(parseFloat(match[1]), parseFloat(match[2]), undefined, parseFloat(match[3])); else return new Point(parseFloat(match[1]), parseFloat(match[2])); }; WktParser.prototype.matchCoordinates = function (options) { var coordinates = []; do { var startsWithBracket = this.isMatch(['(']); coordinates.push(this.matchCoordinate(options)); if (startsWithBracket) this.expectGroupEnd(); } while (this.isMatch([','])); return coordinates; }; WktParser.prototype.skipWhitespaces = function () { while (this.position < this.value.length && this.value[this.position] === ' ') this.position++; }; },{"./point":356,"./types":358}],360:[function(require,module,exports){ exports.Types = require('./types'); exports.Geometry = require('./geometry'); exports.Point = require('./point'); exports.LineString = require('./linestring'); exports.Polygon = require('./polygon'); exports.MultiPoint = require('./multipoint'); exports.MultiLineString = require('./multilinestring'); exports.MultiPolygon = require('./multipolygon'); exports.GeometryCollection = require('./geometrycollection'); },{"./geometry":350,"./geometrycollection":351,"./linestring":352,"./multilinestring":353,"./multipoint":354,"./multipolygon":355,"./point":356,"./polygon":357,"./types":358}],361:[function(require,module,exports){ module.exports = { encode: function (value) { return (value << 1) ^ (value >> 31); }, decode: function (value) { return (value >> 1) ^ (-(value & 1)); } }; },{}],362:[function(require,module,exports){ module.exports = extend var hasOwnProperty = Object.prototype.hasOwnProperty; function extend() { var target = {} for (var i = 0; i < arguments.length; i++) { var source = arguments[i] for (var key in source) { if (hasOwnProperty.call(source, key)) { target[key] = source[key] } } } return target } },{}]},{},[1])(1) }); ================================================ FILE: libs/potree/lazylibs/sql.js/AUTHORS ================================================ Ophir LOJKINE (https://github.com/lovasoa) @kripken @hankinsoft @firien @dinedal @taytay ================================================ FILE: libs/potree/lazylibs/sql.js/LICENSE ================================================ MIT license =========== Copyright (c) 2017 sql.js authors (see AUTHORS) 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. # Some portions of the Makefile taken from: Copyright 2017 Ryusei Yamaguchi 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. ================================================ FILE: libs/potree/lazylibs/sql.js/README.md ================================================ # SQLite compiled to javascript [![Build Status](https://travis-ci.org/kripken/sql.js.svg?branch=master)](http://travis-ci.org/kripken/sql.js) [![CDNJS version](https://img.shields.io/cdnjs/v/sql.js.svg)](https://cdnjs.com/libraries/sql.js) For the impatients, try the demo here: http://kripken.github.io/sql.js/examples/GUI *sql.js* is a port of [SQLite](http://sqlite.org/about.html) to Webassembly, by compiling the SQLite C code with [Emscripten](http://kripken.github.io/emscripten-site/docs/introducing_emscripten/about_emscripten.html). It uses a [virtual database file stored in memory](https://kripken.github.io/emscripten-site/docs/porting/files/file_systems_overview.html), and thus **doesn't persist the changes** made to the database. However, it allows you to **import** any existing sqlite file, and to **export** the created database as a [javascript typed array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays). There are no C bindings or node-gyp compilation here, sql.js is a simple javascript file, that can be used like any traditional javascript library. If you are building a native application in javascript (using Electron for instance), or are working in node.js, you will likely prefer to use [a native binding of SQLite to javascript](https://www.npmjs.com/package/sqlite3). SQLite is public domain, sql.js is MIT licensed. Sql.js predates WebAssembly, and thus started as an [asm.js](https://en.wikipedia.org/wiki/Asm.js) project. It still supports asm.js for backwards compatability. ## Version of binaries Sql.js was last built with: Emscripten version 1.38.30 (2019-04-16) [Release History](https://emscripten.org/docs/introducing_emscripten/release_notes.html) SqlLite version: 3.28.0 (2019-04-16) [Release History](https://www.sqlite.org/changes.html) ## Documentation A [full documentation](http://kripken.github.io/sql.js/documentation/#http://kripken.github.io/sql.js/documentation/class/Database.html) generated from comments inside the source code, is available. ## Usage ```javascript var initSqlJs = require('sql-wasm.js'); // or if you are in a browser: //var initSqlJs = window.initSqlJs; initSqlJs().then(function(SQL){ // Create a database var db = new SQL.Database(); // NOTE: You can also use new SQL.Database(data) where // data is an Uint8Array representing an SQLite database file // Execute some sql sqlstr = "CREATE TABLE hello (a int, b char);"; sqlstr += "INSERT INTO hello VALUES (0, 'hello');" sqlstr += "INSERT INTO hello VALUES (1, 'world');" db.run(sqlstr); // Run the query without returning anything var res = db.exec("SELECT * FROM hello"); /* [ {columns:['a','b'], values:[[0,'hello'],[1,'world']]} ] */ // Prepare an sql statement var stmt = db.prepare("SELECT * FROM hello WHERE a=:aval AND b=:bval"); // Bind values to the parameters and fetch the results of the query var result = stmt.getAsObject({':aval' : 1, ':bval' : 'world'}); console.log(result); // Will print {a:1, b:'world'} // Bind other values stmt.bind([0, 'hello']); while (stmt.step()) console.log(stmt.get()); // Will print [0, 'hello'] // You can also use javascript functions inside your SQL code // Create the js function you need function add(a, b) {return a+b;} // Specifies the SQL function's name, the number of it's arguments, and the js function to use db.create_function("add_js", add); // Run a query in which the function is used db.run("INSERT INTO hello VALUES (add_js(7, 3), add_js('Hello ', 'world'));"); // Inserts 10 and 'Hello world' // free the memory used by the statement stmt.free(); // You can not use your statement anymore once it has been freed. // But not freeing your statements causes memory leaks. You don't want that. // Export the database to an Uint8Array containing the SQLite database file var binaryArray = db.export(); }); ``` ## Demo There are a few examples [available here](https://kripken.github.io/sql.js/index.html). The most full-featured is the [Sqlite Interpreter](https://kripken.github.io/sql.js/examples/GUI/index.html). ## Examples The test files provide up to date example of the use of the api. ### Inside the browser #### Example **HTML** file: ```html Output is in Javscript console ``` #### Creating a database from a file choosen by the user `SQL.Database` constructor takes an array of integer representing a database file as an optional parameter. The following code uses an HTML input as the source for loading a database: ```javascript dbFileElm.onchange = () => { var f = dbFileElm.files[0]; var r = new FileReader(); r.onload = function() { var Uints = new Uint8Array(r.result); db = new SQL.Database(Uints); } r.readAsArrayBuffer(f); } ``` See : http://kripken.github.io/sql.js/examples/GUI/gui.js #### Loading a database from a server ```javascript var xhr = new XMLHttpRequest(); // For example: https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite.sqlite xhr.open('GET', '/path/to/database.sqlite', true); xhr.responseType = 'arraybuffer'; xhr.onload = e => { var uInt8Array = new Uint8Array(this.response); var db = new SQL.Database(uInt8Array); var contents = db.exec("SELECT * FROM my_table"); // contents is now [{columns:['col1','col2',...], values:[[first row], [second row], ...]}] }; xhr.send(); ``` See: https://github.com/kripken/sql.js/wiki/Load-a-database-from-the-server ### Use from node.js `sql.js` is [hosted on npm](https://www.npmjs.org/package/sql.js). To install it, you can simply run `npm install sql.js`. Alternatively, you can simply download `sql-wasm.js` and `sql-wasm.wasm`, from the download link below. #### read a database from the disk: ```javascript var fs = require('fs'); var initSqlJs = require('sql-wasm.js'); var filebuffer = fs.readFileSync('test.sqlite'); initSqlJs().then(function(SQL){ // Load the db var db = new SQL.Database(filebuffer); }); ``` #### write a database to the disk You need to convert the result of `db.export` to a buffer ```javascript var fs = require("fs"); // [...] (create the database) var data = db.export(); var buffer = new Buffer(data); fs.writeFileSync("filename.sqlite", buffer); ``` See : https://github.com/kripken/sql.js/blob/master/test/test_node_file.js ### Use as web worker If you don't want to run CPU-intensive SQL queries in your main application thread, you can use the *more limited* WebWorker API. You will need to download [dist/worker.sql-wasm.js](dist/worker.sql-wasm.js) [dist/worker.sql-wasm.wasm](dist/worker.sql-wasm.wasm). Example: ```html ``` See [examples/GUI/gui.js](examples/GUI/gui.js) for a full working example. ## Flavors/versions Targets/Downloads This library includes both WebAssembly and asm.js versions of Sqlite. (WebAssembly is the newer, preferred way to compile to Javascript, and has superceded asm.js. It produces smaller, faster code.) Asm.js versions are included for compatibility. ## Upgrading from 0.x to 1.x Version 1.0 of sql.js must be loaded asynchronously, whereas asm.js was able to be loaded synchronously. So in the past, you would: ```html ``` or: ```javascript var SQL = require('sql.js'); var db = new QL.Database(); //... ``` Version 1.x: ```html ``` or: ```javascript var initSqlJs = require('sql-wasm.js'); initSqlJs().then(function(SQL){ var db = new SQL.Database(); //... }); ``` `NOTHING` is now a reserved word in SQLite, whereas previously it was not. This could cause errors like `Error: near "nothing": syntax error` ### Downloading/Using: ### Although asm.js files were distributed as a single Javascript file, WebAssembly libraries are most efficiently distributed as a pair of files, the `.js` loader and the `.wasm` file, like [dist/sql-wasm.js]([dist/sql-wasm.js]) and [dist/sql-wasm.wasm]([dist/sql-wasm.wasm]). The `.js` file is reponsible for wrapping/loading the `.wasm` file. ## Versions of sql.js included in `dist/` - `sql-wasm.js` : The Web Assembly version of Sql.js. Minified and suitable for production. Use this. If you use this, you will need to include/ship `sql-wasm.wasm` as well. - `sql-wasm-debug.js` : The Web Assembly, Debug version of Sql.js. Larger, with assertions turned on. Useful for local development. You will need to include/ship `sql-wasm-debug.wasm` if you use this. - `sql-asm.js` : The older asm.js version of Sql.js. Slower and larger. Provided for compatiblity reasons. - `sql-asm-memory-growth.js` : Asm.js doesn't allow for memory to grow by default, because it is slower and de-optimizes. If you are using sql-asm.js and you see this error (`Cannot enlarge memory arrays`), use this file. - `sql-asm-debug.js` : The _Debug_ asm.js version of Sql.js. Use this for local development. - `worker.*` - Web Worker versions of the above libraries. More limited API. See [examples/GUI/gui.js](examples/GUI/gui.js) for a good example of this. ## Compiling - Install the EMSDK, [as described here](https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html) - Run `npm run rebuild` ================================================ FILE: libs/potree/lazylibs/sql.js/sql-wasm.js ================================================ // We are modularizing this manually because the current modularize setting in Emscripten has some issues: // https://github.com/kripken/emscripten/issues/5820 // In addition, When you use emcc's modularization, it still expects to export a global object called `Module`, // which is able to be used/called before the WASM is loaded. // The modularization below exports a promise that loads and resolves to the actual sql.js module. // That way, this module can't be used before the WASM is finished loading. // We are going to define a function that a user will call to start loading initializing our Sql.js library // However, that function might be called multiple times, and on subsequent calls, we don't actually want it to instantiate a new instance of the Module // Instead, we want to return the previously loaded module // TODO: Make this not declare a global if used in the browser var initSqlJsPromise = undefined; var initSqlJs = function (moduleConfig) { if (initSqlJsPromise){ return initSqlJsPromise; } // If we're here, we've never called this function before initSqlJsPromise = new Promise((resolveModule, reject) => { // We are modularizing this manually because the current modularize setting in Emscripten has some issues: // https://github.com/kripken/emscripten/issues/5820 // The way to affect the loading of emcc compiled modules is to create a variable called `Module` and add // properties to it, like `preRun`, `postRun`, etc // We are using that to get notified when the WASM has finished loading. // Only then will we return our promise // If they passed in a moduleConfig object, use that // Otherwise, initialize Module to the empty object var Module = typeof moduleConfig !== 'undefined' ? moduleConfig : {}; // EMCC only allows for a single onAbort function (not an array of functions) // So if the user defined their own onAbort function, we remember it and call it var originalOnAbortFunction = Module['onAbort']; Module['onAbort'] = function (errorThatCausedAbort) { reject(new Error(errorThatCausedAbort)); if (originalOnAbortFunction){ originalOnAbortFunction(errorThatCausedAbort); } }; Module['postRun'] = Module['postRun'] || []; Module['postRun'].push(function () { // When Emscripted calls postRun, this promise resolves with the built Module resolveModule(Module); }); // There is a section of code in the emcc-generated code below that looks like this: // (Note that this is lowercase `module`) // if (typeof module !== 'undefined') { // module['exports'] = Module; // } // When that runs, it's going to overwrite our own modularization export efforts in shell-post.js! // The only way to tell emcc not to emit it is to pass the MODULARIZE=1 or MODULARIZE_INSTANCE=1 flags, // but that carries with it additional unnecessary baggage/bugs we don't want either. // So, we have three options: // 1) We undefine `module` // 2) We remember what `module['exports']` was at the beginning of this function and we restore it later // 3) We write a script to remove those lines of code as part of the Make process. // // Since those are the only lines of code that care about module, we will undefine it. It's the most straightforward // of the options, and has the side effect of reducing emcc's efforts to modify the module if its output were to change in the future. // That's a nice side effect since we're handling the modularization efforts ourselves module = undefined; // The emcc-generated code and shell-post.js code goes below, // meaning that all of it runs inside of this promise. If anything throws an exception, our promise will abort var aa;var f;f||(f=typeof Module !== 'undefined' ? Module : {}); var va=function(){var a;var b=h(4);var c={};var d=function(){function a(a,b){this.fb=a;this.db=b;this.nb=1;this.Eb=[]}a.prototype.bind=function(a){if(!this.fb)throw"Statement closed";this.reset();return Array.isArray(a)?this.lc(a):this.mc(a)};a.prototype.step=function(){var a;if(!this.fb)throw"Statement closed";this.nb=1;switch(a=Tb(this.fb)){case c.hc:return!0;case c.DONE:return!1;default:return this.db.handleError(a)}};a.prototype.sc=function(a){null==a&&(a=this.nb++);return Ub(this.fb,a)};a.prototype.tc= function(a){null==a&&(a=this.nb++);return Vb(this.fb,a)};a.prototype.getBlob=function(a){var b;null==a&&(a=this.nb++);var c=Wb(this.fb,a);var d=Xb(this.fb,a);var e=new Uint8Array(c);for(a=b=0;0<=c?bc;a=0<=c?++b:--b)e[a]=l[d+a];return e};a.prototype.get=function(a){var b,d;null!=a&&this.bind(a)&&this.step();var e=[];a=b=0;for(d=ib(this.fb);0<=d?bd;a=0<=d?++b:--b)switch(Yb(this.fb,a)){case c.fc:case c.FLOAT:e.push(this.sc(a));break;case c.ic:e.push(this.tc(a));break;case c.Zb:e.push(this.getBlob(a)); break;default:e.push(null)}return e};a.prototype.getColumnNames=function(){var a,b;var c=[];var d=a=0;for(b=ib(this.fb);0<=b?ab;d=0<=b?++a:--a)c.push(Zb(this.fb,d));return c};a.prototype.getAsObject=function(a){var b,c;var d=this.get(a);var e=this.getColumnNames();var g={};a=b=0;for(c=e.length;b>>0);if(null!=a){var c=this.filename,d=c?n("/",c):"/";c=ia(!0,!0);d=ja(d,(void 0!==c?c:438)&4095|32768,0);if(a){if("string"===typeof a){for(var e=Array(a.length),k=0,m=a.length;kc;e=0<=c?++g:--g){var m=q(d+4*e,"i32");var z=jc(m);e=function(){switch(!1){case 1!==z:return kc; case 2!==z:return lc;case 3!==z:return mc;case 4!==z:return function(a){var b,c;var d=nc(a);var e=oc(a);a=new Uint8Array(d);for(b=c=0;0<=d?cd;b=0<=d?++c:--c)a[b]=l[e+b];return a};default:return function(){return null}}}();e=e(m);k.push(e)}if(c=b.apply(null,k))switch(typeof c){case "number":return pc(a,c);case "string":return qc(a,c,-1,-1)}else return rc(a)});this.handleError(sc(this.db,a,b.length,c.jc,0,d,0,0,0));return this};return a}();var g=f.cwrap("sqlite3_open","number",["string","number"]); var k=f.cwrap("sqlite3_close_v2","number",["number"]);var m=f.cwrap("sqlite3_exec","number",["number","string","number","number","number"]);f.cwrap("sqlite3_free","",["number"]);var y=f.cwrap("sqlite3_changes","number",["number"]);var z=f.cwrap("sqlite3_prepare_v2","number",["number","string","number","number","number"]);var fa=f.cwrap("sqlite3_prepare_v2","number",["number","number","number","number","number"]);var ca=f.cwrap("sqlite3_bind_text","number",["number","number","number","number","number"]); var Ia=f.cwrap("sqlite3_bind_blob","number",["number","number","number","number","number"]);var ac=f.cwrap("sqlite3_bind_double","number",["number","number","number"]);var $b=f.cwrap("sqlite3_bind_int","number",["number","number","number"]);var bc=f.cwrap("sqlite3_bind_parameter_index","number",["number","string"]);var Tb=f.cwrap("sqlite3_step","number",["number"]);var hc=f.cwrap("sqlite3_errmsg","string",["number"]);var ib=f.cwrap("sqlite3_data_count","number",["number"]);var Ub=f.cwrap("sqlite3_column_double", "number",["number","number"]);var Vb=f.cwrap("sqlite3_column_text","string",["number","number"]);var Xb=f.cwrap("sqlite3_column_blob","number",["number","number"]);var Wb=f.cwrap("sqlite3_column_bytes","number",["number","number"]);var Yb=f.cwrap("sqlite3_column_type","number",["number","number"]);var Zb=f.cwrap("sqlite3_column_name","string",["number","number"]);var dc=f.cwrap("sqlite3_reset","number",["number"]);var cc=f.cwrap("sqlite3_clear_bindings","number",["number"]);var ec=f.cwrap("sqlite3_finalize", "number",["number"]);var sc=f.cwrap("sqlite3_create_function_v2","number","number string number number number number number number number".split(" "));var jc=f.cwrap("sqlite3_value_type","number",["number"]);var nc=f.cwrap("sqlite3_value_bytes","number",["number"]);var mc=f.cwrap("sqlite3_value_text","string",["number"]);var kc=f.cwrap("sqlite3_value_int","number",["number"]);var oc=f.cwrap("sqlite3_value_blob","number",["number"]);var lc=f.cwrap("sqlite3_value_double","number",["number"]);var pc= f.cwrap("sqlite3_result_double","",["number","number"]);var rc=f.cwrap("sqlite3_result_null","",["number"]);var qc=f.cwrap("sqlite3_result_text","",["number","string","number","number"]);var fc=f.cwrap("RegisterExtensionFunctions","number",["number"]);this.SQL={Database:e};for(a in this.SQL)f[a]=this.SQL[a];var da=0;c.xb=0;c.we=1;c.Pe=2;c.Ze=3;c.Cc=4;c.Ec=5;c.Se=6;c.NOMEM=7;c.bf=8;c.Qe=9;c.Re=10;c.Hc=11;c.NOTFOUND=12;c.Oe=13;c.Fc=14;c.$e=15;c.EMPTY=16;c.cf=17;c.df=18;c.Gc=19;c.Te=20;c.Ue=21;c.Ve= 22;c.Dc=23;c.Ne=24;c.af=25;c.We=26;c.Xe=27;c.ef=28;c.hc=100;c.DONE=101;c.fc=1;c.FLOAT=2;c.ic=3;c.Zb=4;c.Ye=5;c.jc=1}.bind(this);f.preRun=f.preRun||[];f.preRun.push(va);var wa={},u;for(u in f)f.hasOwnProperty(u)&&(wa[u]=f[u]);f.arguments=[];f.thisProgram="./this.program";f.quit=function(a,b){throw b;};f.preRun=[];f.postRun=[];var v=!1,w=!1,x=!1,xa=!1;v="object"===typeof window;w="function"===typeof importScripts;x="object"===typeof process&&"function"===typeof require&&!v&&!w;xa=!v&&!x&&!w;var A=""; if(x){A=__dirname+"/";var ya,za;f.read=function(a,b){ya||(ya=require("fs"));za||(za=require("path"));a=za.normalize(a);a=ya.readFileSync(a);return b?a:a.toString()};f.readBinary=function(a){a=f.read(a,!0);a.buffer||(a=new Uint8Array(a));assert(a.buffer);return a};1>2];a=b+a+15&-16;if(a<=Da())D[Ca>>2]=a;else if(!Ea(a))return 0;return b} var Fa={"f64-rem":function(a,b){return a%b},"debugger":function(){debugger}},Ga=1,E=Array(64);function ua(a){for(var b=0;64>b;b++)if(!E[b])return E[b]=a,Ga+b;throw"Finished up all reserved function pointers. Use a higher value for RESERVED_FUNCTION_POINTERS.";}"object"!==typeof WebAssembly&&C("no native wasm support detected"); function q(a,b){b=b||"i8";"*"===b.charAt(b.length-1)&&(b="i32");switch(b){case "i1":return l[a>>0];case "i8":return l[a>>0];case "i16":return Ha[a>>1];case "i32":return D[a>>2];case "i64":return D[a>>2];case "float":return Ja[a>>2];case "double":return Ka[a>>3];default:B("invalid type for getValue: "+b)}return null}var La,Ma=!1;function assert(a,b){a||B("Assertion failed: "+b)}function Na(a){var b=f["_"+a];assert(b,"Cannot call unknown function "+a+", make sure it is exported");return b} function Oa(a,b,c,d){var e={string:function(a){var b=0;if(null!==a&&void 0!==a&&0!==a){var c=(a.length<<2)+1;b=h(c);r(a,F,b,c)}return b},array:function(a){var b=h(a.length);l.set(a,b);return b}},g=Na(a),k=[];a=0;if(d)for(var m=0;m>0]=0;break;case "i8":l[a>>0]=0;break;case "i16":Ha[a>>1]=0;break;case "i32":D[a>>2]=0;break;case "i64":aa=[0,1<=+Pa(0)?~~+Qa(0)>>>0:0];D[a>>2]=aa[0];D[a+4>>2]=aa[1];break;case "float":Ja[a>>2]=0;break;case "double":Ka[a>>3]=0;break;default:B("invalid type for setValue: "+b)}}var Ra=0,Sa=3; function ea(a){var b=Ra;if("number"===typeof a){var c=!0;var d=a}else c=!1,d=a.length;b=b==Sa?e:[Ta,h,Ba][b](Math.max(d,1));if(c){var e=b;assert(0==(b&3));for(a=b+(d&-4);e>2]=0;for(a=b+d;e>0]=0;return b}a.subarray||a.slice?F.set(a,b):F.set(new Uint8Array(a),b);return b}var Ua="undefined"!==typeof TextDecoder?new TextDecoder("utf8"):void 0; function t(a,b,c){var d=b+c;for(c=b;a[c]&&!(c>=d);)++c;if(16e?d+=String.fromCharCode(e):(e-=65536,d+=String.fromCharCode(55296|e>>10,56320|e&1023))}}else d+=String.fromCharCode(e)}return d}function G(a){return a?t(F,a,void 0):""} function r(a,b,c,d){if(!(0=k){var m=a.charCodeAt(++g);k=65536+((k&1023)<<10)|m&1023}if(127>=k){if(c>=d)break;b[c++]=k}else{if(2047>=k){if(c+1>=d)break;b[c++]=192|k>>6}else{if(65535>=k){if(c+2>=d)break;b[c++]=224|k>>12}else{if(c+3>=d)break;b[c++]=240|k>>18;b[c++]=128|k>>12&63}b[c++]=128|k>>6&63}b[c++]=128|k&63}}b[c]=0;return c-e} function oa(a){for(var b=0,c=0;c=d&&(d=65536+((d&1023)<<10)|a.charCodeAt(++c)&1023);127>=d?++b:b=2047>=d?b+2:65535>=d?b+3:b+4}return b}"undefined"!==typeof TextDecoder&&new TextDecoder("utf-16le");function Va(a){return a.replace(/__Z[\w\d_]+/g,function(a){return a===a?a:a+" ["+a+"]"})}function Wa(a){0Ya&&C("TOTAL_MEMORY should be larger than TOTAL_STACK, was "+Ya+"! (TOTAL_STACK=5242880)"); f.buffer?buffer=f.buffer:"object"===typeof WebAssembly&&"function"===typeof WebAssembly.Memory?(La=new WebAssembly.Memory({initial:Ya/65536}),buffer=La.buffer):buffer=new ArrayBuffer(Ya);Xa();D[Ca>>2]=5303264;function Za(a){for(;0>2];var c=D[b>>2]}else ob.rb=!0,J.USER=J.LOGNAME="web_user",J.PATH="/",J.PWD="/",J.HOME="/home/web_user",J.LANG="C.UTF-8",J._=f.thisProgram,c=db?Ta(1024):Ba(1024),b=db?Ta(256):Ba(256),D[b>>2]=c,D[a>>2]=b;a=[];var d=0,e;for(e in J)if("string"===typeof J[e]){var g=e+"="+J[e];a.push(g);d+=g.length}if(1024>0]=d.charCodeAt(m);l[k>>0]=0;D[b+ 4*e>>2]=c;c+=g.length+1}D[b+4*a.length>>2]=0}function pb(a){f.___errno_location&&(D[f.___errno_location()>>2]=a);return a}function qb(a,b){for(var c=0,d=a.length-1;0<=d;d--){var e=a[d];"."===e?a.splice(d,1):".."===e?(a.splice(d,1),c++):c&&(a.splice(d,1),c--)}if(b)for(;c;c--)a.unshift("..");return a}function rb(a){var b="/"===a.charAt(0),c="/"===a.substr(-1);(a=qb(a.split("/").filter(function(a){return!!a}),!b).join("/"))||b||(a=".");a&&c&&(a+="/");return(b?"/":"")+a} function sb(a){var b=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/.exec(a).slice(1);a=b[0];b=b[1];if(!a&&!b)return".";b&&(b=b.substr(0,b.length-1));return a+b}function tb(a){if("/"===a)return"/";var b=a.lastIndexOf("/");return-1===b?a:a.substr(b+1)}function ub(){var a=Array.prototype.slice.call(arguments,0);return rb(a.join("/"))}function n(a,b){return rb(a+"/"+b)} function vb(){for(var a="",b=!1,c=arguments.length-1;-1<=c&&!b;c--){b=0<=c?arguments[c]:"/";if("string"!==typeof b)throw new TypeError("Arguments to path.resolve must be strings");if(!b)return"";a=b+"/"+a;b="/"===b.charAt(0)}a=qb(a.split("/").filter(function(a){return!!a}),!b).join("/");return(b?"/":"")+a||"."}var wb=[];function xb(a,b){wb[a]={input:[],output:[],ub:b};yb(a,zb)} var zb={open:function(a){var b=wb[a.node.rdev];if(!b)throw new K(L.Cb);a.tty=b;a.seekable=!1},close:function(a){a.tty.ub.flush(a.tty)},flush:function(a){a.tty.ub.flush(a.tty)},read:function(a,b,c,d){if(!a.tty||!a.tty.ub.Xb)throw new K(L.Ob);for(var e=0,g=0;g=b||(b=Math.max(b,c*(1048576>c?2:1.125)|0),0!=c&&(b=Math.max(b,256)),c=a.bb,a.bb=new Uint8Array(b),0b)a.bb.length=b;else for(;a.bb.length=a.node.gb)return 0;a=Math.min(a.node.gb-e,d);if(8b)throw new K(L.ib);return b},Pb:function(a,b,c){M.Tb(a.node,b+c);a.node.gb=Math.max(a.node.gb,b+c)},zb:function(a,b,c,d,e,g,k){if(32768!== (a.node.mode&61440))throw new K(L.Cb);c=a.node.bb;if(k&2||c.buffer!==b&&c.buffer!==b.buffer){if(0>2)}catch(c){if(!c.code)throw c; throw new K(L[c.code]);}return b.mode},kb:function(a){for(var b=[];a.parent!==a;)b.push(a.name),a=a.parent;b.push(a.jb.Hb.root);b.reverse();return ub.apply(null,b)},qc:function(a){a&=-2656257;var b=0,c;for(c in P.Ub)a&c&&(b|=P.Ub[c],a^=c);if(a)throw new K(L.ib);return b},ab:{lb:function(a){a=P.kb(a);try{var b=fs.lstatSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}P.yb&&!b.pb&&(b.pb=4096);P.yb&&!b.blocks&&(b.blocks=(b.size+b.pb-1)/b.pb|0);return{dev:b.dev,ino:b.ino,mode:b.mode,nlink:b.nlink, uid:b.uid,gid:b.gid,rdev:b.rdev,size:b.size,atime:b.atime,mtime:b.mtime,ctime:b.ctime,pb:b.pb,blocks:b.blocks}},hb:function(a,b){var c=P.kb(a);try{void 0!==b.mode&&(fs.chmodSync(c,b.mode),a.mode=b.mode),void 0!==b.size&&fs.truncateSync(c,b.size)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},lookup:function(a,b){var c=n(P.kb(a),b);c=P.Wb(c);return P.createNode(a,b,c)},vb:function(a,b,c,d){a=P.createNode(a,b,c,d);b=P.kb(a);try{N(a.mode)?fs.mkdirSync(b,a.mode):fs.writeFileSync(b,"",{mode:a.mode})}catch(e){if(!e.code)throw e; throw new K(L[e.code]);}return a},rename:function(a,b,c){a=P.kb(a);b=n(P.kb(b),c);try{fs.renameSync(a,b)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},unlink:function(a,b){a=n(P.kb(a),b);try{fs.unlinkSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},rmdir:function(a,b){a=n(P.kb(a),b);try{fs.rmdirSync(a)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},readdir:function(a){a=P.kb(a);try{return fs.readdirSync(a)}catch(b){if(!b.code)throw b;throw new K(L[b.code]);}},symlink:function(a, b,c){a=n(P.kb(a),b);try{fs.symlinkSync(c,a)}catch(d){if(!d.code)throw d;throw new K(L[d.code]);}},readlink:function(a){var b=P.kb(a);try{return b=fs.readlinkSync(b),b=Fb.relative(Fb.resolve(a.jb.Hb.root),b)}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}}},cb:{open:function(a){var b=P.kb(a.node);try{32768===(a.node.mode&61440)&&(a.wb=fs.openSync(b,P.qc(a.flags)))}catch(c){if(!c.code)throw c;throw new K(L[c.code]);}},close:function(a){try{32768===(a.node.mode&61440)&&a.wb&&fs.closeSync(a.wb)}catch(b){if(!b.code)throw b; throw new K(L[b.code]);}},read:function(a,b,c,d,e){if(0===d)return 0;try{return fs.readSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},write:function(a,b,c,d,e){try{return fs.writeSync(a.wb,P.Rb(b.buffer),c,d,e)}catch(g){throw new K(L[g.code]);}},ob:function(a,b,c){if(1===c)b+=a.position;else if(2===c&&32768===(a.node.mode&61440))try{b+=fs.fstatSync(a.wb).size}catch(d){throw new K(L[d.code]);}if(0>b)throw new K(L.ib);return b}}},Gb=null,Hb={},Q=[],Ib=1,R=null,Jb=!0,S={},K=null, Eb={};function T(a,b){a=vb("/",a);b=b||{};if(!a)return{path:"",node:null};var c={Vb:!0,Jb:0},d;for(d in c)void 0===b[d]&&(b[d]=c[d]);if(8>>0)%R.length}function Nb(a){var b=Mb(a.parent.id,a.name);a.tb=R[b];R[b]=a}function Ob(a){var b=Mb(a.parent.id,a.name);if(R[b]===a)R[b]=a.tb;else for(b=R[b];b;){if(b.tb===a){b.tb=a.tb;break}b=b.tb}} function O(a,b){var c;if(c=(c=Pb(a,"x"))?c:a.ab.lookup?0:13)throw new K(c,a);for(c=R[Mb(a.id,b)];c;c=c.tb){var d=c.name;if(c.parent.id===a.id&&d===b)return c}return a.ab.lookup(a,b)} function Db(a,b,c,d){Qb||(Qb=function(a,b,c,d){a||(a=this);this.parent=a;this.jb=a.jb;this.sb=null;this.id=Ib++;this.name=b;this.mode=c;this.ab={};this.cb={};this.rdev=d},Qb.prototype={},Object.defineProperties(Qb.prototype,{read:{get:function(){return 365===(this.mode&365)},set:function(a){a?this.mode|=365:this.mode&=-366}},write:{get:function(){return 146===(this.mode&146)},set:function(a){a?this.mode|=146:this.mode&=-147}}}));a=new Qb(a,b,c,d);Nb(a);return a} function N(a){return 16384===(a&61440)}var Rb={r:0,rs:1052672,"r+":2,w:577,wx:705,xw:705,"w+":578,"wx+":706,"xw+":706,a:1089,ax:1217,xa:1217,"a+":1090,"ax+":1218,"xa+":1218};function ic(a){var b=["r","w","rw"][a&3];a&512&&(b+="w");return b}function Pb(a,b){if(Jb)return 0;if(-1===b.indexOf("r")||a.mode&292){if(-1!==b.indexOf("w")&&!(a.mode&146)||-1!==b.indexOf("x")&&!(a.mode&73))return 13}else return 13;return 0}function tc(a,b){try{return O(a,b),17}catch(c){}return Pb(a,"wx")} function uc(a,b,c){try{var d=O(a,b)}catch(e){return e.eb}if(a=Pb(a,"wx"))return a;if(c){if(!N(d.mode))return 20;if(d===d.parent||"/"===Lb(d))return 16}else if(N(d.mode))return 21;return 0}function vc(a){var b=4096;for(a=a||0;a<=b;a++)if(!Q[a])return a;throw new K(24);} function wc(a,b){xc||(xc=function(){},xc.prototype={},Object.defineProperties(xc.prototype,{object:{get:function(){return this.node},set:function(a){this.node=a}}}));var c=new xc,d;for(d in a)c[d]=a[d];a=c;b=vc(b);a.fd=b;return Q[b]=a}var Cb={open:function(a){a.cb=Hb[a.node.rdev].cb;a.cb.open&&a.cb.open(a)},ob:function(){throw new K(29);}};function yb(a,b){Hb[a]={cb:b}} function yc(a,b){var c="/"===b,d=!b;if(c&&Gb)throw new K(16);if(!c&&!d){var e=T(b,{Vb:!1});b=e.path;e=e.node;if(e.sb)throw new K(16);if(!N(e.mode))throw new K(20);}b={type:a,Hb:{},Yb:b,wc:[]};a=a.jb(b);a.jb=b;b.root=a;c?Gb=a:e&&(e.sb=b,e.jb&&e.jb.wc.push(b))}function ja(a,b,c){var d=T(a,{parent:!0}).node;a=tb(a);if(!a||"."===a||".."===a)throw new K(22);var e=tc(d,a);if(e)throw new K(e);if(!d.ab.vb)throw new K(1);return d.ab.vb(d,a,b,c)}function U(a,b){ja(a,(void 0!==b?b:511)&1023|16384,0)} function zc(a,b,c){"undefined"===typeof c&&(c=b,b=438);ja(a,b|8192,c)}function Ac(a,b){if(!vb(a))throw new K(2);var c=T(b,{parent:!0}).node;if(!c)throw new K(2);b=tb(b);var d=tc(c,b);if(d)throw new K(d);if(!c.ab.symlink)throw new K(1);c.ab.symlink(c,b,a)} function ta(a){var b=T(a,{parent:!0}).node,c=tb(a),d=O(b,c),e=uc(b,c,!1);if(e)throw new K(e);if(!b.ab.unlink)throw new K(1);if(d.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(a)}catch(g){console.log("FS.trackingDelegate['willDeletePath']('"+a+"') threw an exception: "+g.message)}b.ab.unlink(b,c);Ob(d);try{if(S.onDeletePath)S.onDeletePath(a)}catch(g){console.log("FS.trackingDelegate['onDeletePath']('"+a+"') threw an exception: "+g.message)}} function Kb(a){a=T(a).node;if(!a)throw new K(2);if(!a.ab.readlink)throw new K(22);return vb(Lb(a.parent),a.ab.readlink(a))}function ra(a,b){a=T(a,{qb:!b}).node;if(!a)throw new K(2);if(!a.ab.lb)throw new K(1);return a.ab.lb(a)}function Bc(a){return ra(a,!0)}function ka(a,b){var c;"string"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);c.ab.hb(c,{mode:b&4095|c.mode&-4096,timestamp:Date.now()})} function Cc(a){var b;"string"===typeof a?b=T(a,{qb:!0}).node:b=a;if(!b.ab.hb)throw new K(1);b.ab.hb(b,{timestamp:Date.now()})}function Dc(a,b){if(0>b)throw new K(22);var c;"string"===typeof a?c=T(a,{qb:!0}).node:c=a;if(!c.ab.hb)throw new K(1);if(N(c.mode))throw new K(21);if(32768!==(c.mode&61440))throw new K(22);if(a=Pb(c,"w"))throw new K(a);c.ab.hb(c,{size:b,timestamp:Date.now()})} function p(a,b,c,d){if(""===a)throw new K(2);if("string"===typeof b){var e=Rb[b];if("undefined"===typeof e)throw Error("Unknown file open mode: "+b);b=e}c=b&64?("undefined"===typeof c?438:c)&4095|32768:0;if("object"===typeof a)var g=a;else{a=rb(a);try{g=T(a,{qb:!(b&131072)}).node}catch(k){}}e=!1;if(b&64)if(g){if(b&128)throw new K(17);}else g=ja(a,c,0),e=!0;if(!g)throw new K(2);8192===(g.mode&61440)&&(b&=-513);if(b&65536&&!N(g.mode))throw new K(20);if(!e&&(c=g?40960===(g.mode&61440)?40:N(g.mode)&& ("r"!==ic(b)||b&512)?21:Pb(g,ic(b)):2))throw new K(c);b&512&&Dc(g,0);b&=-641;d=wc({node:g,path:Lb(g),flags:b,seekable:!0,position:0,cb:g.cb,Bc:[],error:!1},d);d.cb.open&&d.cb.open(d);!f.logReadFiles||b&1||(Ec||(Ec={}),a in Ec||(Ec[a]=1,console.log("FS.trackingDelegate error on read file: "+a)));try{S.onOpenFile&&(g=0,1!==(b&2097155)&&(g|=1),0!==(b&2097155)&&(g|=2),S.onOpenFile(a,g))}catch(k){console.log("FS.trackingDelegate['onOpenFile']('"+a+"', flags) threw an exception: "+k.message)}return d} function ma(a){if(null===a.fd)throw new K(9);a.Gb&&(a.Gb=null);try{a.cb.close&&a.cb.close(a)}catch(b){throw b;}finally{Q[a.fd]=null}a.fd=null}function Fc(a,b,c){if(null===a.fd)throw new K(9);if(!a.seekable||!a.cb.ob)throw new K(29);if(0!=c&&1!=c&&2!=c)throw new K(22);a.position=a.cb.ob(a,b,c);a.Bc=[]} function sa(a,b,c,d,e){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(1===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.read)throw new K(22);var g="undefined"!==typeof e;if(!g)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.read(a,b,c,d,e);g||(a.position+=b);return b} function la(a,b,c,d,e,g){if(0>d||0>e)throw new K(22);if(null===a.fd)throw new K(9);if(0===(a.flags&2097155))throw new K(9);if(N(a.node.mode))throw new K(21);if(!a.cb.write)throw new K(22);a.flags&1024&&Fc(a,0,2);var k="undefined"!==typeof e;if(!k)e=a.position;else if(!a.seekable)throw new K(29);b=a.cb.write(a,b,c,d,e,g);k||(a.position+=b);try{if(a.path&&S.onWriteToFile)S.onWriteToFile(a.path)}catch(m){console.log("FS.trackingDelegate['onWriteToFile']('"+a.path+"') threw an exception: "+m.message)}return b} function Gc(){K||(K=function(a,b){this.node=b;this.zc=function(a){this.eb=a};this.zc(a);this.message="FS error";this.stack&&Object.defineProperty(this,"stack",{value:Error().stack,writable:!0})},K.prototype=Error(),K.prototype.constructor=K,[2].forEach(function(a){Eb[a]=new K(a);Eb[a].stack=""}))}var Hc;function ia(a,b){var c=0;a&&(c|=365);b&&(c|=146);return c} function Ic(a,b,c){a=n("/dev",a);var d=ia(!!b,!!c);Jc||(Jc=64);var e=Jc++<<8|0;yb(e,{open:function(a){a.seekable=!1},close:function(){c&&c.buffer&&c.buffer.length&&c(10)},read:function(a,c,d,e){for(var g=0,k=0;k>2]=d.dev;D[c+4>>2]=0;D[c+8>>2]=d.ino;D[c+12>>2]=d.mode;D[c+16>>2]=d.nlink;D[c+20>>2]=d.uid;D[c+24>>2]=d.gid;D[c+28>>2]=d.rdev;D[c+32>>2]=0;D[c+36>>2]=d.size;D[c+40>>2]=4096;D[c+44>>2]=d.blocks;D[c+48>>2]=d.atime.getTime()/1E3|0;D[c+52>>2]=0;D[c+56>>2]=d.mtime.getTime()/1E3|0;D[c+60>>2]=0;D[c+64>>2]=d.ctime.getTime()/1E3|0;D[c+68>>2]=0;D[c+72>>2]=d.ino;return 0}var W=0; function X(){W+=4;return D[W-4>>2]}function Y(){return G(X())}function Z(){var a=Q[X()];if(!a)throw new K(L.Kb);return a}function Da(){return l.length}function Ea(a){if(2147418112=b?b=Wa(2*b):b=Math.min(Wa((3*b+2147483648)/4),2147418112);a=Wa(b);var c=buffer.byteLength;try{var d=-1!==La.grow((a-c)/65536)?buffer=La.buffer:null}catch(e){d=null}if(!d||d.byteLength!=b)return!1;Xa();return!0} function Mc(a){if(0===a)return 0;a=G(a);if(!J.hasOwnProperty(a))return 0;Mc.rb&&ha(Mc.rb);a=J[a];var b=oa(a)+1,c=Ta(b);c&&r(a,l,c,b);Mc.rb=c;return Mc.rb}r("GMT",F,60272,4); function Nc(){function a(a){return(a=a.toTimeString().match(/\(([A-Za-z ]+)\)$/))?a[1]:"GMT"}if(!Oc){Oc=!0;D[Pc()>>2]=60*(new Date).getTimezoneOffset();var b=new Date(2E3,0,1),c=new Date(2E3,6,1);D[Qc()>>2]=Number(b.getTimezoneOffset()!=c.getTimezoneOffset());var d=a(b),e=a(c);d=ea(ba(d));e=ea(ba(e));c.getTimezoneOffset()>2]=d,D[Rc()+4>>2]=e):(D[Rc()>>2]=e,D[Rc()+4>>2]=d)}}var Oc; function Sc(a){a/=1E3;if((v||w)&&self.performance&&self.performance.now)for(var b=self.performance.now();self.performance.now()-b>2]=c.position;c.Gb&&0===d&&0===g&&(c.Gb=null);return 0}catch(k){return"undefined"!==typeof V&&k instanceof K||B(k),-k.eb}},ca:function(a,b){W=b;try{var c=Y(),d=X();ka(c,d);return 0}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},ba:function(a,b){W=b;try{var c=X(),d=X();if(0===d)return-L.ib;if(dd?-L.ib:p(c.path,c.flags,0,d).fd;case 1:case 2:return 0; case 3:return c.flags;case 4:return d=X(),c.flags|=d,0;case 12:return d=X(),Ha[d+0>>1]=2,0;case 13:case 14:return 0;case 16:case 8:return-L.ib;case 9:return pb(L.ib),-1;default:return-L.ib}}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},U:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return sa(c,l,d,e)}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},T:function(a,b){W=b;try{var c=Y();var d=X();if(d&-8)var e=-L.ib;else{var g=T(c,{qb:!0}).node;a="";d&4&&(a+="r"); d&2&&(a+="w");d&1&&(a+="x");e=a&&Pb(g,a)?-L.$b:0}return e}catch(k){return"undefined"!==typeof V&&k instanceof K||B(k),-k.eb}},S:function(a,b){W=b;try{var c=Y(),d=X();a=c;a=rb(a);"/"===a[a.length-1]&&(a=a.substr(0,a.length-1));U(a,d);return 0}catch(e){return"undefined"!==typeof V&&e instanceof K||B(e),-e.eb}},R:function(a,b){W=b;try{var c=Z(),d=X(),e=X();return la(c,l,d,e)}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},Q:function(a,b){W=b;try{var c=Y(),d=T(c,{parent:!0}).node, e=tb(c),g=O(d,e),k=uc(d,e,!0);if(k)throw new K(k);if(!d.ab.rmdir)throw new K(1);if(g.sb)throw new K(16);try{S.willDeletePath&&S.willDeletePath(c)}catch(m){console.log("FS.trackingDelegate['willDeletePath']('"+c+"') threw an exception: "+m.message)}d.ab.rmdir(d,e);Ob(g);try{if(S.onDeletePath)S.onDeletePath(c)}catch(m){console.log("FS.trackingDelegate['onDeletePath']('"+c+"') threw an exception: "+m.message)}return 0}catch(m){return"undefined"!==typeof V&&m instanceof K||B(m),-m.eb}},P:function(a,b){W= b;try{var c=Y(),d=X(),e=X();return p(c,d,e).fd}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},s:function(a,b){W=b;try{var c=Z();ma(c);return 0}catch(d){return"undefined"!==typeof V&&d instanceof K||B(d),-d.eb}},O:function(a,b){W=b;try{var c=Y(),d=X();var e=X();if(0>=e)var g=-L.ib;else{var k=Kb(c),m=Math.min(e,oa(k)),y=l[d+m];r(k,F,d,e+1);l[d+m]=y;g=m}return g}catch(z){return"undefined"!==typeof V&&z instanceof K||B(z),-z.eb}},N:function(a,b){W=b;try{var c=X(),d=X(),e=Kc[c];if(!e)return 0; if(d===e.uc){var g=Q[e.fd],k=e.flags,m=new Uint8Array(F.subarray(c,c+d));g&&g.cb.Ab&&g.cb.Ab(g,m,0,d,k);Kc[c]=null;e.Db&&ha(e.vc)}return 0}catch(y){return"undefined"!==typeof V&&y instanceof K||B(y),-y.eb}},M:function(a,b){W=b;try{var c=X(),d=X(),e=Q[c];if(!e)throw new K(9);ka(e.node,d);return 0}catch(g){return"undefined"!==typeof V&&g instanceof K||B(g),-g.eb}},L:Da,K:function(a,b,c){F.set(F.subarray(b,b+c),a)},J:Ea,r:Mc,q:function(a){var b=Date.now();D[a>>2]=b/1E3|0;D[a+4>>2]=b%1E3*1E3|0;return 0}, I:function(a){return Math.log(a)/Math.LN10},p:function(){B("trap!")},H:function(a){Nc();a=new Date(1E3*D[a>>2]);D[15056]=a.getSeconds();D[15057]=a.getMinutes();D[15058]=a.getHours();D[15059]=a.getDate();D[15060]=a.getMonth();D[15061]=a.getFullYear()-1900;D[15062]=a.getDay();var b=new Date(a.getFullYear(),0,1);D[15063]=(a.getTime()-b.getTime())/864E5|0;D[15065]=-(60*a.getTimezoneOffset());var c=(new Date(2E3,6,1)).getTimezoneOffset();b=b.getTimezoneOffset();a=(c!=b&&a.getTimezoneOffset()==Math.min(b, c))|0;D[15064]=a;a=D[Rc()+(a?4:0)>>2];D[15066]=a;return 60224},G:function(a,b){var c=D[a>>2];a=D[a+4>>2];0!==b&&(D[b>>2]=0,D[b+4>>2]=0);return Sc(1E6*c+a/1E3)},F:function(a){switch(a){case 30:return 16384;case 85:return 131068;case 132:case 133:case 12:case 137:case 138:case 15:case 235:case 16:case 17:case 18:case 19:case 20:case 149:case 13:case 10:case 236:case 153:case 9:case 21:case 22:case 159:case 154:case 14:case 77:case 78:case 139:case 80:case 81:case 82:case 68:case 67:case 164:case 11:case 29:case 47:case 48:case 95:case 52:case 51:case 46:return 200809; case 79:return 0;case 27:case 246:case 127:case 128:case 23:case 24:case 160:case 161:case 181:case 182:case 242:case 183:case 184:case 243:case 244:case 245:case 165:case 178:case 179:case 49:case 50:case 168:case 169:case 175:case 170:case 171:case 172:case 97:case 76:case 32:case 173:case 35:return-1;case 176:case 177:case 7:case 155:case 8:case 157:case 125:case 126:case 92:case 93:case 129:case 130:case 131:case 94:case 91:return 1;case 74:case 60:case 69:case 70:case 4:return 1024;case 31:case 42:case 72:return 32; case 87:case 26:case 33:return 2147483647;case 34:case 1:return 47839;case 38:case 36:return 99;case 43:case 37:return 2048;case 0:return 2097152;case 3:return 65536;case 28:return 32768;case 44:return 32767;case 75:return 16384;case 39:return 1E3;case 89:return 700;case 71:return 256;case 40:return 255;case 2:return 100;case 180:return 64;case 25:return 20;case 5:return 16;case 6:return 6;case 73:return 4;case 84:return"object"===typeof navigator?navigator.hardwareConcurrency||1:1}pb(22);return-1}, E:function(a){var b=Date.now()/1E3|0;a&&(D[a>>2]=b);return b},D:function(a,b){if(b){var c=1E3*D[b+8>>2];c+=D[b+12>>2]/1E3}else c=Date.now();a=G(a);try{b=c;var d=T(a,{qb:!0}).node;d.ab.hb(d,{timestamp:Math.max(b,c)});return 0}catch(e){a=e;if(!(a instanceof K)){a+=" : ";a:{d=Error();if(!d.stack){try{throw Error(0);}catch(g){d=g}if(!d.stack){d="(no stack trace available)";break a}}d=d.stack.toString()}f.extraStackTrace&&(d+="\n"+f.extraStackTrace());d=Va(d);throw a+d;}pb(a.eb);return-1}},C:function(){B("OOM")}, a:Ca},buffer);f.asm=Vc;f._RegisterExtensionFunctions=function(){return f.asm.ha.apply(null,arguments)};var nb=f.___emscripten_environ_constructor=function(){return f.asm.ia.apply(null,arguments)};f.___errno_location=function(){return f.asm.ja.apply(null,arguments)}; var Qc=f.__get_daylight=function(){return f.asm.ka.apply(null,arguments)},Pc=f.__get_timezone=function(){return f.asm.la.apply(null,arguments)},Rc=f.__get_tzname=function(){return f.asm.ma.apply(null,arguments)},ha=f._free=function(){return f.asm.na.apply(null,arguments)},Ta=f._malloc=function(){return f.asm.oa.apply(null,arguments)},Tc=f._memalign=function(){return f.asm.pa.apply(null,arguments)},Uc=f._memset=function(){return f.asm.qa.apply(null,arguments)}; f._sqlite3_bind_blob=function(){return f.asm.ra.apply(null,arguments)};f._sqlite3_bind_double=function(){return f.asm.sa.apply(null,arguments)};f._sqlite3_bind_int=function(){return f.asm.ta.apply(null,arguments)};f._sqlite3_bind_parameter_index=function(){return f.asm.ua.apply(null,arguments)};f._sqlite3_bind_text=function(){return f.asm.va.apply(null,arguments)};f._sqlite3_changes=function(){return f.asm.wa.apply(null,arguments)};f._sqlite3_clear_bindings=function(){return f.asm.xa.apply(null,arguments)}; f._sqlite3_close_v2=function(){return f.asm.ya.apply(null,arguments)};f._sqlite3_column_blob=function(){return f.asm.za.apply(null,arguments)};f._sqlite3_column_bytes=function(){return f.asm.Aa.apply(null,arguments)};f._sqlite3_column_double=function(){return f.asm.Ba.apply(null,arguments)};f._sqlite3_column_name=function(){return f.asm.Ca.apply(null,arguments)};f._sqlite3_column_text=function(){return f.asm.Da.apply(null,arguments)};f._sqlite3_column_type=function(){return f.asm.Ea.apply(null,arguments)}; f._sqlite3_create_function_v2=function(){return f.asm.Fa.apply(null,arguments)};f._sqlite3_data_count=function(){return f.asm.Ga.apply(null,arguments)};f._sqlite3_errmsg=function(){return f.asm.Ha.apply(null,arguments)};f._sqlite3_exec=function(){return f.asm.Ia.apply(null,arguments)};f._sqlite3_finalize=function(){return f.asm.Ja.apply(null,arguments)};f._sqlite3_free=function(){return f.asm.Ka.apply(null,arguments)};f._sqlite3_open=function(){return f.asm.La.apply(null,arguments)}; f._sqlite3_prepare_v2=function(){return f.asm.Ma.apply(null,arguments)};f._sqlite3_reset=function(){return f.asm.Na.apply(null,arguments)};f._sqlite3_result_double=function(){return f.asm.Oa.apply(null,arguments)};f._sqlite3_result_null=function(){return f.asm.Pa.apply(null,arguments)};f._sqlite3_result_text=function(){return f.asm.Qa.apply(null,arguments)};f._sqlite3_step=function(){return f.asm.Ra.apply(null,arguments)};f._sqlite3_value_blob=function(){return f.asm.Sa.apply(null,arguments)}; f._sqlite3_value_bytes=function(){return f.asm.Ta.apply(null,arguments)};f._sqlite3_value_double=function(){return f.asm.Ua.apply(null,arguments)};f._sqlite3_value_int=function(){return f.asm.Va.apply(null,arguments)};f._sqlite3_value_text=function(){return f.asm.Wa.apply(null,arguments)};f._sqlite3_value_type=function(){return f.asm.Xa.apply(null,arguments)}; var h=f.stackAlloc=function(){return f.asm.Za.apply(null,arguments)},qa=f.stackRestore=function(){return f.asm._a.apply(null,arguments)},na=f.stackSave=function(){return f.asm.$a.apply(null,arguments)};f.dynCall_vi=function(){return f.asm.Ya.apply(null,arguments)};f.asm=Vc;f.cwrap=function(a,b,c,d){c=c||[];var e=c.every(function(a){return"number"===a});return"string"!==b&&e&&!d?Na(a):function(){return Oa(a,b,c,arguments)}};f.stackSave=na;f.stackRestore=qa;f.stackAlloc=h; function Wc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Wc.prototype=Error();Wc.prototype.constructor=Wc;gb=function Xc(){f.calledRun||Yc();f.calledRun||(gb=Xc)}; function Yc(){function a(){if(!f.calledRun&&(f.calledRun=!0,!Ma)){db||(db=!0,f.noFSInit||Hc||(Hc=!0,Gc(),f.stdin=f.stdin,f.stdout=f.stdout,f.stderr=f.stderr,f.stdin?Ic("stdin",f.stdin):Ac("/dev/tty","/dev/stdin"),f.stdout?Ic("stdout",null,f.stdout):Ac("/dev/tty","/dev/stdout"),f.stderr?Ic("stderr",null,f.stderr):Ac("/dev/tty1","/dev/stderr"),p("/dev/stdin","r"),p("/dev/stdout","w"),p("/dev/stderr","w")),Za(ab));Jb=!1;Za(bb);if(f.onRuntimeInitialized)f.onRuntimeInitialized();if(f.postRun)for("function"== typeof f.postRun&&(f.postRun=[f.postRun]);f.postRun.length;){var a=f.postRun.shift();cb.unshift(a)}Za(cb)}}if(!(0 *{ margin: 4px 20px; } .ui-slider { margin-top: 5px; margin-bottom: 10px; background-color: var(--color-1) !important; background: none; border: 1px solid black; } .ui-selectmenu-button.ui-button{ width: 100% !important; } .pv-menu-list > li > .ui-slider{ background-color: var(--color-1) !important; background: none; border: 1px solid black; } .pv-menu-list .ui-slider{ background-color: var(--color-1) !important; background: none; border: 1px solid black !important; } .ui-slider-handle{ border: 1px solid black !important; } .ui-widget{ box-sizing:border-box } .panel-body > li > .ui-slider{ background-color: var(--color-1) !important; background: none; border: 1px solid black; } .panel-body > div > li > .ui-slider{ background-color: var(--color-1) !important; background: none; border: 1px solid black; } .pv-select-label{ margin: 1px; font-size: 90%; font-weight: 100; } .button-icon:hover{ /*background-color: #09181C;*/ filter: drop-shadow(0px 0px 4px white); } .ui-widget-content{ /*color: var(--font-color) !important;*/ } .accordion > h3{ background-color: var(--bg-color-2) !important; background: #f6f6f6 50% 50% repeat-x; border: 1px solid black; color: var(--font-color-2); cursor: pointer; margin: 2px 0 0 0; padding: 4px 10px 4px 30px; box-shadow: 0px 3px 3px #111; text-shadow: 1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; font-size: 1em; } .accordion > h3:hover{ filter: brightness(125%); } .accordion-content{ padding: 0px 0px !important; border: none !important; } .icon-bar{ height: 4px !important; border: 1px solid black; background-color: white; border-radius: 2px; } .canvas{ -webkit-transition: top .35s, left .35s, bottom .35s, right .35s, width .35s; transition: top .35s, left .35s, bottom .35s, right .35s, width .35s; } #profile_window{ background-color: var(--bg-color); } #profile_titlebar{ background-color: var(--bg-color-2); color: var(--font-color-2); text-shadow: 1px 1px 0 #000, -1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000; font-size: 1em; font-weight: bold; } #profile_window_title{ position: absolute; margin: 5px; } .profile-container-button{ cursor: pointer; } .profile-button:hover{ background-color: #0000CC; } .unselectable{ user-select: none; } .selectable{ user-select: text; } .divider { display: block; text-align: center; overflow: hidden; white-space: nowrap; font-weight: bold; font-size: 90%; letter-spacing: 1px; margin-left: 0px; margin-right: 0px; margin-top: 1px; margin-bottom: 1px; padding: 1px !important; } .divider > span { position: relative; display: inline-block; } .divider > span:before, .divider > span:after { content: ""; position: absolute; top: 50%; width: 9999px; height: 1px; background: #b2b2b2; } .divider > span:before { right: 100%; margin-right: 5px; } .divider > span:after { left: 100%; margin-left: 5px; } .ol-dragbox { background-color: rgba(255,255,255,0.4); border-color: rgba(100,150,0,1); border: 1px solid red; } .text-icon{ opacity: 0.5; height: 24px; } .text-icon:hover{ opacity: 1.0; } .input-grid-cell{ flex-grow: 1; margin: 0px 3px 0px 3px; } .input-grid-label{ flex-grow: 1; margin: 0px 3px 0px 3px; text-align:center; font-weight: bold; } .input-grid-cell > input{ width: 100% } .invalid_value{ color: #e05e5e; } /** * OVERRIDES */ .ui-spinner-input{ color: black; } .jstree-themeicon-custom{ background-size: 16px !important; } .jstree-default .jstree-clicked{ /*background-color: #ffffff !important;*/ background-color: #34494f !important; } .jstree-default .jstree-hovered{ background-color: #34494f !important; } .jstree-anchor{ width: 100% !important; } .ui-state-default{ background: #a6a9aa !important; border: 1px solid black; color: black; } .ui-state-active{ background: #c6c9ca !important; color: black !important; } .cesium-viewer .cesium-viewer-cesiumWidgetContainer{ position: absolute; height: 100%; width: 100%; } .zs_widget{ padding: 2px; height: 4em; user-select: none; } .zs_core{ overflow: hidden; position: relative; height: 100%; } .zs_handle{ position: absolute; top: 0px; bottom: 0px; border: 1px solid black; border-radius: 3px; background-color: rgb(166, 169, 170); width: 8px; user-select: none; width: 1.2em; height: 1.2em; top: calc(50% - 0.6em); } .zs_stretch{ position: absolute; top: 0px; bottom: 0px; border: 1px solid black; border-radius: 3px; background-color: rgb(166, 169, 170); width: 8px; user-select: none; width: 1.2em; height: 1.2em; top: calc(50% - 0.6em); color: black; font-weight: bold; font-size: 1.2em; font-family: arial; } .zs_handle:hover{ background-color: lightgreen; } .zs_inside{ position: absolute !important; width: 100%; border: 1px solid black; background-color: white; top: calc(50% - 0.326em); height: 0.652em; cursor: zoom-in; } .zs_outside{ position: absolute !important; width: 100%; background-color: var(--color-1) !important; top: calc(50% - 0.326em); height: 0.652em; cursor: zoom-in; } .zs_visible_range_label{ position: absolute; bottom: 0px; pointer-events:none; } .zs_visible_range_label_left{ left: 0px; } .zs_visible_range_label_right{ right: 0px; } .zs_chosen_range_label{ position: absolute; pointer-events:none; } #potree_sidebar_container{ scrollbar-color: var(--color-1) var(--bg-color); scrollbar-width: thin; } ::-webkit-scrollbar { width: 6px; background-color: var(--bg-color); } ::-webkit-scrollbar-track { } ::-webkit-scrollbar-thumb { background-color: var(--color-1); } .propertypanel_content .heading{ font-weight: bold; padding-top: 0.6em; padding-bottom: 0.1em; } ================================================ FILE: libs/potree/potree.js ================================================ (function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (global = global || self, factory(global.Potree = {})); }(this, (function (exports) { 'use strict'; /** * @author mrdoob / http://mrdoob.com/ https://github.com/mrdoob/eventdispatcher.js * * with slight modifications by mschuetz, http://potree.org * */ // The MIT License // // Copyright (c) 2011 Mr.doob // // 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. class EventDispatcher{ constructor(){ this._listeners = {}; } addEventListener(type, listener){ const listeners = this._listeners; if(listeners[type] === undefined){ listeners[type] = []; } if(listeners[type].indexOf(listener) === - 1){ listeners[type].push( listener ); } } hasEventListener(type, listener){ const listeners = this._listeners; return listeners[type] !== undefined && listeners[type].indexOf(listener) !== - 1; } removeEventListener(type, listener){ let listeners = this._listeners; let listenerArray = listeners[type]; if (listenerArray !== undefined){ let index = listenerArray.indexOf(listener); if(index !== - 1){ listenerArray.splice(index, 1); } } } removeEventListeners(type){ if(this._listeners[type] !== undefined){ delete this._listeners[type]; } }; dispatchEvent(event){ let listeners = this._listeners; let listenerArray = listeners[event.type]; if ( listenerArray !== undefined ) { event.target = this; for(let listener of listenerArray.slice(0)){ listener.call(this, event); } } } } class Action extends EventDispatcher { constructor (args = {}) { super(); this.icon = args.icon || ''; this.tooltip = args.tooltip; if (args.onclick !== undefined) { this.onclick = args.onclick; } } onclick (event) { } pairWith (object) { } setIcon (newIcon) { let oldIcon = this.icon; if (newIcon === oldIcon) { return; } this.icon = newIcon; this.dispatchEvent({ type: 'icon_changed', action: this, icon: newIcon, oldIcon: oldIcon }); } }; //Potree.Actions = {}; // //Potree.Actions.ToggleAnnotationVisibility = class ToggleAnnotationVisibility extends Potree.Action { // constructor (args = {}) { // super(args); // // this.icon = Potree.resourcePath + '/icons/eye.svg'; // this.showIn = 'sidebar'; // this.tooltip = 'toggle visibility'; // } // // pairWith (annotation) { // if (annotation.visible) { // this.setIcon(Potree.resourcePath + '/icons/eye.svg'); // } else { // this.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg'); // } // // annotation.addEventListener('visibility_changed', e => { // let annotation = e.annotation; // // if (annotation.visible) { // this.setIcon(Potree.resourcePath + '/icons/eye.svg'); // } else { // this.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg'); // } // }); // } // // onclick (event) { // let annotation = event.annotation; // // annotation.visible = !annotation.visible; // // if (annotation.visible) { // this.setIcon(Potree.resourcePath + '/icons/eye.svg'); // } else { // this.setIcon(Potree.resourcePath + '/icons/eye_crossed.svg'); // } // } //}; // threejs.org/license const REVISION = '124'; const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 }; const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 }; const CullFaceNone = 0; const CullFaceBack = 1; const CullFaceFront = 2; const CullFaceFrontBack = 3; const BasicShadowMap = 0; const PCFShadowMap = 1; const PCFSoftShadowMap = 2; const VSMShadowMap = 3; const FrontSide = 0; const BackSide = 1; const DoubleSide = 2; const FlatShading = 1; const SmoothShading = 2; const NoBlending = 0; const NormalBlending = 1; const AdditiveBlending = 2; const SubtractiveBlending = 3; const MultiplyBlending = 4; const CustomBlending = 5; const AddEquation = 100; const SubtractEquation = 101; const ReverseSubtractEquation = 102; const MinEquation = 103; const MaxEquation = 104; const ZeroFactor = 200; const OneFactor = 201; const SrcColorFactor = 202; const OneMinusSrcColorFactor = 203; const SrcAlphaFactor = 204; const OneMinusSrcAlphaFactor = 205; const DstAlphaFactor = 206; const OneMinusDstAlphaFactor = 207; const DstColorFactor = 208; const OneMinusDstColorFactor = 209; const SrcAlphaSaturateFactor = 210; const NeverDepth = 0; const AlwaysDepth = 1; const LessDepth = 2; const LessEqualDepth = 3; const EqualDepth = 4; const GreaterEqualDepth = 5; const GreaterDepth = 6; const NotEqualDepth = 7; const MultiplyOperation = 0; const MixOperation = 1; const AddOperation = 2; const NoToneMapping = 0; const LinearToneMapping = 1; const ReinhardToneMapping = 2; const CineonToneMapping = 3; const ACESFilmicToneMapping = 4; const CustomToneMapping = 5; const UVMapping = 300; const CubeReflectionMapping = 301; const CubeRefractionMapping = 302; const EquirectangularReflectionMapping = 303; const EquirectangularRefractionMapping = 304; const CubeUVReflectionMapping = 306; const CubeUVRefractionMapping = 307; const RepeatWrapping = 1000; const ClampToEdgeWrapping = 1001; const MirroredRepeatWrapping = 1002; const NearestFilter = 1003; const NearestMipmapNearestFilter = 1004; const NearestMipMapNearestFilter = 1004; const NearestMipmapLinearFilter = 1005; const NearestMipMapLinearFilter = 1005; const LinearFilter = 1006; const LinearMipmapNearestFilter = 1007; const LinearMipMapNearestFilter = 1007; const LinearMipmapLinearFilter = 1008; const LinearMipMapLinearFilter = 1008; const UnsignedByteType = 1009; const ByteType = 1010; const ShortType = 1011; const UnsignedShortType = 1012; const IntType = 1013; const UnsignedIntType = 1014; const FloatType = 1015; const HalfFloatType = 1016; const UnsignedShort4444Type = 1017; const UnsignedShort5551Type = 1018; const UnsignedShort565Type = 1019; const UnsignedInt248Type$1 = 1020; const AlphaFormat = 1021; const RGBFormat = 1022; const RGBAFormat = 1023; const LuminanceFormat = 1024; const LuminanceAlphaFormat = 1025; const RGBEFormat = RGBAFormat; const DepthFormat = 1026; const DepthStencilFormat = 1027; const RedFormat = 1028; const RedIntegerFormat = 1029; const RGFormat = 1030; const RGIntegerFormat = 1031; const RGBIntegerFormat = 1032; const RGBAIntegerFormat = 1033; const RGB_S3TC_DXT1_Format = 33776; const RGBA_S3TC_DXT1_Format$1 = 33777; const RGBA_S3TC_DXT3_Format = 33778; const RGBA_S3TC_DXT5_Format$1 = 33779; const RGB_PVRTC_4BPPV1_Format = 35840; const RGB_PVRTC_2BPPV1_Format = 35841; const RGBA_PVRTC_4BPPV1_Format = 35842; const RGBA_PVRTC_2BPPV1_Format = 35843; const RGB_ETC1_Format = 36196; const RGB_ETC2_Format = 37492; const RGBA_ETC2_EAC_Format = 37496; const RGBA_ASTC_4x4_Format = 37808; const RGBA_ASTC_5x4_Format = 37809; const RGBA_ASTC_5x5_Format = 37810; const RGBA_ASTC_6x5_Format = 37811; const RGBA_ASTC_6x6_Format = 37812; const RGBA_ASTC_8x5_Format = 37813; const RGBA_ASTC_8x6_Format = 37814; const RGBA_ASTC_8x8_Format = 37815; const RGBA_ASTC_10x5_Format = 37816; const RGBA_ASTC_10x6_Format = 37817; const RGBA_ASTC_10x8_Format = 37818; const RGBA_ASTC_10x10_Format = 37819; const RGBA_ASTC_12x10_Format = 37820; const RGBA_ASTC_12x12_Format = 37821; const RGBA_BPTC_Format = 36492; const SRGB8_ALPHA8_ASTC_4x4_Format = 37840; const SRGB8_ALPHA8_ASTC_5x4_Format = 37841; const SRGB8_ALPHA8_ASTC_5x5_Format = 37842; const SRGB8_ALPHA8_ASTC_6x5_Format = 37843; const SRGB8_ALPHA8_ASTC_6x6_Format = 37844; const SRGB8_ALPHA8_ASTC_8x5_Format = 37845; const SRGB8_ALPHA8_ASTC_8x6_Format = 37846; const SRGB8_ALPHA8_ASTC_8x8_Format = 37847; const SRGB8_ALPHA8_ASTC_10x5_Format = 37848; const SRGB8_ALPHA8_ASTC_10x6_Format = 37849; const SRGB8_ALPHA8_ASTC_10x8_Format = 37850; const SRGB8_ALPHA8_ASTC_10x10_Format = 37851; const SRGB8_ALPHA8_ASTC_12x10_Format = 37852; const SRGB8_ALPHA8_ASTC_12x12_Format = 37853; const LoopOnce = 2200; const LoopRepeat = 2201; const LoopPingPong = 2202; const InterpolateDiscrete = 2300; const InterpolateLinear = 2301; const InterpolateSmooth = 2302; const ZeroCurvatureEnding = 2400; const ZeroSlopeEnding = 2401; const WrapAroundEnding = 2402; const NormalAnimationBlendMode = 2500; const AdditiveAnimationBlendMode = 2501; const TrianglesDrawMode = 0; const TriangleStripDrawMode = 1; const TriangleFanDrawMode = 2; const LinearEncoding = 3000; const sRGBEncoding = 3001; const GammaEncoding = 3007; const RGBEEncoding = 3002; const LogLuvEncoding = 3003; const RGBM7Encoding = 3004; const RGBM16Encoding = 3005; const RGBDEncoding = 3006; const BasicDepthPacking = 3200; const RGBADepthPacking = 3201; const TangentSpaceNormalMap = 0; const ObjectSpaceNormalMap = 1; const ZeroStencilOp = 0; const KeepStencilOp = 7680; const ReplaceStencilOp = 7681; const IncrementStencilOp = 7682; const DecrementStencilOp = 7683; const IncrementWrapStencilOp = 34055; const DecrementWrapStencilOp = 34056; const InvertStencilOp = 5386; const NeverStencilFunc = 512; const LessStencilFunc = 513; const EqualStencilFunc = 514; const LessEqualStencilFunc = 515; const GreaterStencilFunc = 516; const NotEqualStencilFunc = 517; const GreaterEqualStencilFunc = 518; const AlwaysStencilFunc = 519; const StaticDrawUsage = 35044; const DynamicDrawUsage = 35048; const StreamDrawUsage = 35040; const StaticReadUsage = 35045; const DynamicReadUsage = 35049; const StreamReadUsage = 35041; const StaticCopyUsage = 35046; const DynamicCopyUsage = 35050; const StreamCopyUsage = 35042; const GLSL1 = '100'; const GLSL3 = '300 es'; /** * https://github.com/mrdoob/eventdispatcher.js/ */ function EventDispatcher$1() {} Object.assign( EventDispatcher$1.prototype, { addEventListener: function ( type, listener ) { if ( this._listeners === undefined ) this._listeners = {}; const listeners = this._listeners; if ( listeners[ type ] === undefined ) { listeners[ type ] = []; } if ( listeners[ type ].indexOf( listener ) === - 1 ) { listeners[ type ].push( listener ); } }, hasEventListener: function ( type, listener ) { if ( this._listeners === undefined ) return false; const listeners = this._listeners; return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1; }, removeEventListener: function ( type, listener ) { if ( this._listeners === undefined ) return; const listeners = this._listeners; const listenerArray = listeners[ type ]; if ( listenerArray !== undefined ) { const index = listenerArray.indexOf( listener ); if ( index !== - 1 ) { listenerArray.splice( index, 1 ); } } }, dispatchEvent: function ( event ) { if ( this._listeners === undefined ) return; const listeners = this._listeners; const listenerArray = listeners[ event.type ]; if ( listenerArray !== undefined ) { event.target = this; // Make a copy, in case listeners are removed while iterating. const array = listenerArray.slice( 0 ); for ( let i = 0, l = array.length; i < l; i ++ ) { array[ i ].call( this, event ); } } } } ); const _lut = []; for ( let i = 0; i < 256; i ++ ) { _lut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 ); } let _seed = 1234567; const MathUtils = { DEG2RAD: Math.PI / 180, RAD2DEG: 180 / Math.PI, generateUUID: function () { // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136 const d0 = Math.random() * 0xffffffff | 0; const d1 = Math.random() * 0xffffffff | 0; const d2 = Math.random() * 0xffffffff | 0; const d3 = Math.random() * 0xffffffff | 0; const uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' + _lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' + _lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] + _lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ]; // .toUpperCase() here flattens concatenated strings to save heap memory space. return uuid.toUpperCase(); }, clamp: function ( value, min, max ) { return Math.max( min, Math.min( max, value ) ); }, // compute euclidian modulo of m % n // https://en.wikipedia.org/wiki/Modulo_operation euclideanModulo: function ( n, m ) { return ( ( n % m ) + m ) % m; }, // Linear mapping from range to range mapLinear: function ( x, a1, a2, b1, b2 ) { return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 ); }, // https://en.wikipedia.org/wiki/Linear_interpolation lerp: function ( x, y, t ) { return ( 1 - t ) * x + t * y; }, // http://en.wikipedia.org/wiki/Smoothstep smoothstep: function ( x, min, max ) { if ( x <= min ) return 0; if ( x >= max ) return 1; x = ( x - min ) / ( max - min ); return x * x * ( 3 - 2 * x ); }, smootherstep: function ( x, min, max ) { if ( x <= min ) return 0; if ( x >= max ) return 1; x = ( x - min ) / ( max - min ); return x * x * x * ( x * ( x * 6 - 15 ) + 10 ); }, // Random integer from interval randInt: function ( low, high ) { return low + Math.floor( Math.random() * ( high - low + 1 ) ); }, // Random float from interval randFloat: function ( low, high ) { return low + Math.random() * ( high - low ); }, // Random float from <-range/2, range/2> interval randFloatSpread: function ( range ) { return range * ( 0.5 - Math.random() ); }, // Deterministic pseudo-random float in the interval [ 0, 1 ] seededRandom: function ( s ) { if ( s !== undefined ) _seed = s % 2147483647; // Park-Miller algorithm _seed = _seed * 16807 % 2147483647; return ( _seed - 1 ) / 2147483646; }, degToRad: function ( degrees ) { return degrees * MathUtils.DEG2RAD; }, radToDeg: function ( radians ) { return radians * MathUtils.RAD2DEG; }, isPowerOfTwo: function ( value ) { return ( value & ( value - 1 ) ) === 0 && value !== 0; }, ceilPowerOfTwo: function ( value ) { return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) ); }, floorPowerOfTwo: function ( value ) { return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) ); }, setQuaternionFromProperEuler: function ( q, a, b, c, order ) { // Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles // rotations are applied to the axes in the order specified by 'order' // rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c' // angles are in radians const cos = Math.cos; const sin = Math.sin; const c2 = cos( b / 2 ); const s2 = sin( b / 2 ); const c13 = cos( ( a + c ) / 2 ); const s13 = sin( ( a + c ) / 2 ); const c1_3 = cos( ( a - c ) / 2 ); const s1_3 = sin( ( a - c ) / 2 ); const c3_1 = cos( ( c - a ) / 2 ); const s3_1 = sin( ( c - a ) / 2 ); switch ( order ) { case 'XYX': q.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 ); break; case 'YZY': q.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 ); break; case 'ZXZ': q.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 ); break; case 'XZX': q.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 ); break; case 'YXY': q.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 ); break; case 'ZYZ': q.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 ); break; default: console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order ); } } }; class Vector2 { constructor( x = 0, y = 0 ) { Object.defineProperty( this, 'isVector2', { value: true } ); this.x = x; this.y = y; } get width() { return this.x; } set width( value ) { this.x = value; } get height() { return this.y; } set height( value ) { this.y = value; } set( x, y ) { this.x = x; this.y = y; return this; } setScalar( scalar ) { this.x = scalar; this.y = scalar; return this; } setX( x ) { this.x = x; return this; } setY( y ) { this.y = y; return this; } setComponent( index, value ) { switch ( index ) { case 0: this.x = value; break; case 1: this.y = value; break; default: throw new Error( 'index is out of range: ' + index ); } return this; } getComponent( index ) { switch ( index ) { case 0: return this.x; case 1: return this.y; default: throw new Error( 'index is out of range: ' + index ); } } clone() { return new this.constructor( this.x, this.y ); } copy( v ) { this.x = v.x; this.y = v.y; return this; } add( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); return this.addVectors( v, w ); } this.x += v.x; this.y += v.y; return this; } addScalar( s ) { this.x += s; this.y += s; return this; } addVectors( a, b ) { this.x = a.x + b.x; this.y = a.y + b.y; return this; } addScaledVector( v, s ) { this.x += v.x * s; this.y += v.y * s; return this; } sub( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); return this.subVectors( v, w ); } this.x -= v.x; this.y -= v.y; return this; } subScalar( s ) { this.x -= s; this.y -= s; return this; } subVectors( a, b ) { this.x = a.x - b.x; this.y = a.y - b.y; return this; } multiply( v ) { this.x *= v.x; this.y *= v.y; return this; } multiplyScalar( scalar ) { this.x *= scalar; this.y *= scalar; return this; } divide( v ) { this.x /= v.x; this.y /= v.y; return this; } divideScalar( scalar ) { return this.multiplyScalar( 1 / scalar ); } applyMatrix3( m ) { const x = this.x, y = this.y; const e = m.elements; this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ]; this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ]; return this; } min( v ) { this.x = Math.min( this.x, v.x ); this.y = Math.min( this.y, v.y ); return this; } max( v ) { this.x = Math.max( this.x, v.x ); this.y = Math.max( this.y, v.y ); return this; } clamp( min, max ) { // assumes min < max, componentwise this.x = Math.max( min.x, Math.min( max.x, this.x ) ); this.y = Math.max( min.y, Math.min( max.y, this.y ) ); return this; } clampScalar( minVal, maxVal ) { this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); return this; } clampLength( min, max ) { const length = this.length(); return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); } floor() { this.x = Math.floor( this.x ); this.y = Math.floor( this.y ); return this; } ceil() { this.x = Math.ceil( this.x ); this.y = Math.ceil( this.y ); return this; } round() { this.x = Math.round( this.x ); this.y = Math.round( this.y ); return this; } roundToZero() { this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); return this; } negate() { this.x = - this.x; this.y = - this.y; return this; } dot( v ) { return this.x * v.x + this.y * v.y; } cross( v ) { return this.x * v.y - this.y * v.x; } lengthSq() { return this.x * this.x + this.y * this.y; } length() { return Math.sqrt( this.x * this.x + this.y * this.y ); } manhattanLength() { return Math.abs( this.x ) + Math.abs( this.y ); } normalize() { return this.divideScalar( this.length() || 1 ); } angle() { // computes the angle in radians with respect to the positive x-axis const angle = Math.atan2( - this.y, - this.x ) + Math.PI; return angle; } distanceTo( v ) { return Math.sqrt( this.distanceToSquared( v ) ); } distanceToSquared( v ) { const dx = this.x - v.x, dy = this.y - v.y; return dx * dx + dy * dy; } manhattanDistanceTo( v ) { return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ); } setLength( length ) { return this.normalize().multiplyScalar( length ); } lerp( v, alpha ) { this.x += ( v.x - this.x ) * alpha; this.y += ( v.y - this.y ) * alpha; return this; } lerpVectors( v1, v2, alpha ) { this.x = v1.x + ( v2.x - v1.x ) * alpha; this.y = v1.y + ( v2.y - v1.y ) * alpha; return this; } equals( v ) { return ( ( v.x === this.x ) && ( v.y === this.y ) ); } fromArray( array, offset = 0 ) { this.x = array[ offset ]; this.y = array[ offset + 1 ]; return this; } toArray( array = [], offset = 0 ) { array[ offset ] = this.x; array[ offset + 1 ] = this.y; return array; } fromBufferAttribute( attribute, index, offset ) { if ( offset !== undefined ) { console.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' ); } this.x = attribute.getX( index ); this.y = attribute.getY( index ); return this; } rotateAround( center, angle ) { const c = Math.cos( angle ), s = Math.sin( angle ); const x = this.x - center.x; const y = this.y - center.y; this.x = x * c - y * s + center.x; this.y = x * s + y * c + center.y; return this; } random() { this.x = Math.random(); this.y = Math.random(); return this; } } class Matrix3 { constructor() { Object.defineProperty( this, 'isMatrix3', { value: true } ); this.elements = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]; if ( arguments.length > 0 ) { console.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' ); } } set( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) { const te = this.elements; te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31; te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32; te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33; return this; } identity() { this.set( 1, 0, 0, 0, 1, 0, 0, 0, 1 ); return this; } clone() { return new this.constructor().fromArray( this.elements ); } copy( m ) { const te = this.elements; const me = m.elements; te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; return this; } extractBasis( xAxis, yAxis, zAxis ) { xAxis.setFromMatrix3Column( this, 0 ); yAxis.setFromMatrix3Column( this, 1 ); zAxis.setFromMatrix3Column( this, 2 ); return this; } setFromMatrix4( m ) { const me = m.elements; this.set( me[ 0 ], me[ 4 ], me[ 8 ], me[ 1 ], me[ 5 ], me[ 9 ], me[ 2 ], me[ 6 ], me[ 10 ] ); return this; } multiply( m ) { return this.multiplyMatrices( this, m ); } premultiply( m ) { return this.multiplyMatrices( m, this ); } multiplyMatrices( a, b ) { const ae = a.elements; const be = b.elements; const te = this.elements; const a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ]; const a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ]; const a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ]; const b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ]; const b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ]; const b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ]; te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31; te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32; te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33; te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31; te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32; te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33; te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31; te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32; te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33; return this; } multiplyScalar( s ) { const te = this.elements; te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s; te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s; te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s; return this; } determinant() { const te = this.elements; const a = te[ 0 ], b = te[ 1 ], c = te[ 2 ], d = te[ 3 ], e = te[ 4 ], f = te[ 5 ], g = te[ 6 ], h = te[ 7 ], i = te[ 8 ]; return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g; } invert() { const te = this.elements, n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ], n13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ], t11 = n33 * n22 - n32 * n23, t12 = n32 * n13 - n33 * n12, t13 = n23 * n12 - n22 * n13, det = n11 * t11 + n21 * t12 + n31 * t13; if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 ); const detInv = 1 / det; te[ 0 ] = t11 * detInv; te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv; te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv; te[ 3 ] = t12 * detInv; te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv; te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv; te[ 6 ] = t13 * detInv; te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv; te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv; return this; } transpose() { let tmp; const m = this.elements; tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp; tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp; tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp; return this; } getNormalMatrix( matrix4 ) { return this.setFromMatrix4( matrix4 ).copy( this ).invert().transpose(); } transposeIntoArray( r ) { const m = this.elements; r[ 0 ] = m[ 0 ]; r[ 1 ] = m[ 3 ]; r[ 2 ] = m[ 6 ]; r[ 3 ] = m[ 1 ]; r[ 4 ] = m[ 4 ]; r[ 5 ] = m[ 7 ]; r[ 6 ] = m[ 2 ]; r[ 7 ] = m[ 5 ]; r[ 8 ] = m[ 8 ]; return this; } setUvTransform( tx, ty, sx, sy, rotation, cx, cy ) { const c = Math.cos( rotation ); const s = Math.sin( rotation ); this.set( sx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx, - sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty, 0, 0, 1 ); return this; } scale( sx, sy ) { const te = this.elements; te[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx; te[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy; return this; } rotate( theta ) { const c = Math.cos( theta ); const s = Math.sin( theta ); const te = this.elements; const a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ]; const a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ]; te[ 0 ] = c * a11 + s * a21; te[ 3 ] = c * a12 + s * a22; te[ 6 ] = c * a13 + s * a23; te[ 1 ] = - s * a11 + c * a21; te[ 4 ] = - s * a12 + c * a22; te[ 7 ] = - s * a13 + c * a23; return this; } translate( tx, ty ) { const te = this.elements; te[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ]; te[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ]; return this; } equals( matrix ) { const te = this.elements; const me = matrix.elements; for ( let i = 0; i < 9; i ++ ) { if ( te[ i ] !== me[ i ] ) return false; } return true; } fromArray( array, offset = 0 ) { for ( let i = 0; i < 9; i ++ ) { this.elements[ i ] = array[ i + offset ]; } return this; } toArray( array = [], offset = 0 ) { const te = this.elements; array[ offset ] = te[ 0 ]; array[ offset + 1 ] = te[ 1 ]; array[ offset + 2 ] = te[ 2 ]; array[ offset + 3 ] = te[ 3 ]; array[ offset + 4 ] = te[ 4 ]; array[ offset + 5 ] = te[ 5 ]; array[ offset + 6 ] = te[ 6 ]; array[ offset + 7 ] = te[ 7 ]; array[ offset + 8 ] = te[ 8 ]; return array; } } let _canvas; const ImageUtils = { getDataURL: function ( image ) { if ( /^data:/i.test( image.src ) ) { return image.src; } if ( typeof HTMLCanvasElement == 'undefined' ) { return image.src; } let canvas; if ( image instanceof HTMLCanvasElement ) { canvas = image; } else { if ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); _canvas.width = image.width; _canvas.height = image.height; const context = _canvas.getContext( '2d' ); if ( image instanceof ImageData ) { context.putImageData( image, 0, 0 ); } else { context.drawImage( image, 0, 0, image.width, image.height ); } canvas = _canvas; } if ( canvas.width > 2048 || canvas.height > 2048 ) { return canvas.toDataURL( 'image/jpeg', 0.6 ); } else { return canvas.toDataURL( 'image/png' ); } } }; let textureId = 0; function Texture( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = 1, encoding = LinearEncoding ) { Object.defineProperty( this, 'id', { value: textureId ++ } ); this.uuid = MathUtils.generateUUID(); this.name = ''; this.image = image; this.mipmaps = []; this.mapping = mapping; this.wrapS = wrapS; this.wrapT = wrapT; this.magFilter = magFilter; this.minFilter = minFilter; this.anisotropy = anisotropy; this.format = format; this.internalFormat = null; this.type = type; this.offset = new Vector2( 0, 0 ); this.repeat = new Vector2( 1, 1 ); this.center = new Vector2( 0, 0 ); this.rotation = 0; this.matrixAutoUpdate = true; this.matrix = new Matrix3(); this.generateMipmaps = true; this.premultiplyAlpha = false; this.flipY = true; this.unpackAlignment = 4; // valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml) // Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap. // // Also changing the encoding after already used by a Material will not automatically make the Material // update. You need to explicitly call Material.needsUpdate to trigger it to recompile. this.encoding = encoding; this.version = 0; this.onUpdate = null; } Texture.DEFAULT_IMAGE = undefined; Texture.DEFAULT_MAPPING = UVMapping; Texture.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { constructor: Texture, isTexture: true, updateMatrix: function () { this.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y ); }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.name = source.name; this.image = source.image; this.mipmaps = source.mipmaps.slice( 0 ); this.mapping = source.mapping; this.wrapS = source.wrapS; this.wrapT = source.wrapT; this.magFilter = source.magFilter; this.minFilter = source.minFilter; this.anisotropy = source.anisotropy; this.format = source.format; this.internalFormat = source.internalFormat; this.type = source.type; this.offset.copy( source.offset ); this.repeat.copy( source.repeat ); this.center.copy( source.center ); this.rotation = source.rotation; this.matrixAutoUpdate = source.matrixAutoUpdate; this.matrix.copy( source.matrix ); this.generateMipmaps = source.generateMipmaps; this.premultiplyAlpha = source.premultiplyAlpha; this.flipY = source.flipY; this.unpackAlignment = source.unpackAlignment; this.encoding = source.encoding; return this; }, toJSON: function ( meta ) { const isRootObject = ( meta === undefined || typeof meta === 'string' ); if ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) { return meta.textures[ this.uuid ]; } const output = { metadata: { version: 4.5, type: 'Texture', generator: 'Texture.toJSON' }, uuid: this.uuid, name: this.name, mapping: this.mapping, repeat: [ this.repeat.x, this.repeat.y ], offset: [ this.offset.x, this.offset.y ], center: [ this.center.x, this.center.y ], rotation: this.rotation, wrap: [ this.wrapS, this.wrapT ], format: this.format, type: this.type, encoding: this.encoding, minFilter: this.minFilter, magFilter: this.magFilter, anisotropy: this.anisotropy, flipY: this.flipY, premultiplyAlpha: this.premultiplyAlpha, unpackAlignment: this.unpackAlignment }; if ( this.image !== undefined ) { // TODO: Move to THREE.Image const image = this.image; if ( image.uuid === undefined ) { image.uuid = MathUtils.generateUUID(); // UGH } if ( ! isRootObject && meta.images[ image.uuid ] === undefined ) { let url; if ( Array.isArray( image ) ) { // process array of images e.g. CubeTexture url = []; for ( let i = 0, l = image.length; i < l; i ++ ) { // check cube texture with data textures if ( image[ i ].isDataTexture ) { url.push( serializeImage( image[ i ].image ) ); } else { url.push( serializeImage( image[ i ] ) ); } } } else { // process single image url = serializeImage( image ); } meta.images[ image.uuid ] = { uuid: image.uuid, url: url }; } output.image = image.uuid; } if ( ! isRootObject ) { meta.textures[ this.uuid ] = output; } return output; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); }, transformUv: function ( uv ) { if ( this.mapping !== UVMapping ) return uv; uv.applyMatrix3( this.matrix ); if ( uv.x < 0 || uv.x > 1 ) { switch ( this.wrapS ) { case RepeatWrapping: uv.x = uv.x - Math.floor( uv.x ); break; case ClampToEdgeWrapping: uv.x = uv.x < 0 ? 0 : 1; break; case MirroredRepeatWrapping: if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) { uv.x = Math.ceil( uv.x ) - uv.x; } else { uv.x = uv.x - Math.floor( uv.x ); } break; } } if ( uv.y < 0 || uv.y > 1 ) { switch ( this.wrapT ) { case RepeatWrapping: uv.y = uv.y - Math.floor( uv.y ); break; case ClampToEdgeWrapping: uv.y = uv.y < 0 ? 0 : 1; break; case MirroredRepeatWrapping: if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) { uv.y = Math.ceil( uv.y ) - uv.y; } else { uv.y = uv.y - Math.floor( uv.y ); } break; } } if ( this.flipY ) { uv.y = 1 - uv.y; } return uv; } } ); Object.defineProperty( Texture.prototype, 'needsUpdate', { set: function ( value ) { if ( value === true ) this.version ++; } } ); function serializeImage( image ) { if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { // default images return ImageUtils.getDataURL( image ); } else { if ( image.data ) { // images of DataTexture return { data: Array.prototype.slice.call( image.data ), width: image.width, height: image.height, type: image.data.constructor.name }; } else { console.warn( 'THREE.Texture: Unable to serialize Texture.' ); return {}; } } } class Vector4 { constructor( x = 0, y = 0, z = 0, w = 1 ) { Object.defineProperty( this, 'isVector4', { value: true } ); this.x = x; this.y = y; this.z = z; this.w = w; } get width() { return this.z; } set width( value ) { this.z = value; } get height() { return this.w; } set height( value ) { this.w = value; } set( x, y, z, w ) { this.x = x; this.y = y; this.z = z; this.w = w; return this; } setScalar( scalar ) { this.x = scalar; this.y = scalar; this.z = scalar; this.w = scalar; return this; } setX( x ) { this.x = x; return this; } setY( y ) { this.y = y; return this; } setZ( z ) { this.z = z; return this; } setW( w ) { this.w = w; return this; } setComponent( index, value ) { switch ( index ) { case 0: this.x = value; break; case 1: this.y = value; break; case 2: this.z = value; break; case 3: this.w = value; break; default: throw new Error( 'index is out of range: ' + index ); } return this; } getComponent( index ) { switch ( index ) { case 0: return this.x; case 1: return this.y; case 2: return this.z; case 3: return this.w; default: throw new Error( 'index is out of range: ' + index ); } } clone() { return new this.constructor( this.x, this.y, this.z, this.w ); } copy( v ) { this.x = v.x; this.y = v.y; this.z = v.z; this.w = ( v.w !== undefined ) ? v.w : 1; return this; } add( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); return this.addVectors( v, w ); } this.x += v.x; this.y += v.y; this.z += v.z; this.w += v.w; return this; } addScalar( s ) { this.x += s; this.y += s; this.z += s; this.w += s; return this; } addVectors( a, b ) { this.x = a.x + b.x; this.y = a.y + b.y; this.z = a.z + b.z; this.w = a.w + b.w; return this; } addScaledVector( v, s ) { this.x += v.x * s; this.y += v.y * s; this.z += v.z * s; this.w += v.w * s; return this; } sub( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); return this.subVectors( v, w ); } this.x -= v.x; this.y -= v.y; this.z -= v.z; this.w -= v.w; return this; } subScalar( s ) { this.x -= s; this.y -= s; this.z -= s; this.w -= s; return this; } subVectors( a, b ) { this.x = a.x - b.x; this.y = a.y - b.y; this.z = a.z - b.z; this.w = a.w - b.w; return this; } multiplyScalar( scalar ) { this.x *= scalar; this.y *= scalar; this.z *= scalar; this.w *= scalar; return this; } applyMatrix4( m ) { const x = this.x, y = this.y, z = this.z, w = this.w; const e = m.elements; this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w; this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w; this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w; this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w; return this; } divideScalar( scalar ) { return this.multiplyScalar( 1 / scalar ); } setAxisAngleFromQuaternion( q ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm // q is assumed to be normalized this.w = 2 * Math.acos( q.w ); const s = Math.sqrt( 1 - q.w * q.w ); if ( s < 0.0001 ) { this.x = 1; this.y = 0; this.z = 0; } else { this.x = q.x / s; this.y = q.y / s; this.z = q.z / s; } return this; } setAxisAngleFromRotationMatrix( m ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) let angle, x, y, z; // variables for result const epsilon = 0.01, // margin to allow for rounding errors epsilon2 = 0.1, // margin to distinguish between 0 and 180 degrees te = m.elements, m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; if ( ( Math.abs( m12 - m21 ) < epsilon ) && ( Math.abs( m13 - m31 ) < epsilon ) && ( Math.abs( m23 - m32 ) < epsilon ) ) { // singularity found // first check for identity matrix which must have +1 for all terms // in leading diagonal and zero in other terms if ( ( Math.abs( m12 + m21 ) < epsilon2 ) && ( Math.abs( m13 + m31 ) < epsilon2 ) && ( Math.abs( m23 + m32 ) < epsilon2 ) && ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) { // this singularity is identity matrix so angle = 0 this.set( 1, 0, 0, 0 ); return this; // zero angle, arbitrary axis } // otherwise this singularity is angle = 180 angle = Math.PI; const xx = ( m11 + 1 ) / 2; const yy = ( m22 + 1 ) / 2; const zz = ( m33 + 1 ) / 2; const xy = ( m12 + m21 ) / 4; const xz = ( m13 + m31 ) / 4; const yz = ( m23 + m32 ) / 4; if ( ( xx > yy ) && ( xx > zz ) ) { // m11 is the largest diagonal term if ( xx < epsilon ) { x = 0; y = 0.707106781; z = 0.707106781; } else { x = Math.sqrt( xx ); y = xy / x; z = xz / x; } } else if ( yy > zz ) { // m22 is the largest diagonal term if ( yy < epsilon ) { x = 0.707106781; y = 0; z = 0.707106781; } else { y = Math.sqrt( yy ); x = xy / y; z = yz / y; } } else { // m33 is the largest diagonal term so base result on this if ( zz < epsilon ) { x = 0.707106781; y = 0.707106781; z = 0; } else { z = Math.sqrt( zz ); x = xz / z; y = yz / z; } } this.set( x, y, z, angle ); return this; // return 180 deg rotation } // as we have reached here there are no singularities so we can handle normally let s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) + ( m13 - m31 ) * ( m13 - m31 ) + ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize if ( Math.abs( s ) < 0.001 ) s = 1; // prevent divide by zero, should not happen if matrix is orthogonal and should be // caught by singularity test above, but I've left it in just in case this.x = ( m32 - m23 ) / s; this.y = ( m13 - m31 ) / s; this.z = ( m21 - m12 ) / s; this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 ); return this; } min( v ) { this.x = Math.min( this.x, v.x ); this.y = Math.min( this.y, v.y ); this.z = Math.min( this.z, v.z ); this.w = Math.min( this.w, v.w ); return this; } max( v ) { this.x = Math.max( this.x, v.x ); this.y = Math.max( this.y, v.y ); this.z = Math.max( this.z, v.z ); this.w = Math.max( this.w, v.w ); return this; } clamp( min, max ) { // assumes min < max, componentwise this.x = Math.max( min.x, Math.min( max.x, this.x ) ); this.y = Math.max( min.y, Math.min( max.y, this.y ) ); this.z = Math.max( min.z, Math.min( max.z, this.z ) ); this.w = Math.max( min.w, Math.min( max.w, this.w ) ); return this; } clampScalar( minVal, maxVal ) { this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); this.w = Math.max( minVal, Math.min( maxVal, this.w ) ); return this; } clampLength( min, max ) { const length = this.length(); return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); } floor() { this.x = Math.floor( this.x ); this.y = Math.floor( this.y ); this.z = Math.floor( this.z ); this.w = Math.floor( this.w ); return this; } ceil() { this.x = Math.ceil( this.x ); this.y = Math.ceil( this.y ); this.z = Math.ceil( this.z ); this.w = Math.ceil( this.w ); return this; } round() { this.x = Math.round( this.x ); this.y = Math.round( this.y ); this.z = Math.round( this.z ); this.w = Math.round( this.w ); return this; } roundToZero() { this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w ); return this; } negate() { this.x = - this.x; this.y = - this.y; this.z = - this.z; this.w = - this.w; return this; } dot( v ) { return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w; } lengthSq() { return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w; } length() { return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w ); } manhattanLength() { return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w ); } normalize() { return this.divideScalar( this.length() || 1 ); } setLength( length ) { return this.normalize().multiplyScalar( length ); } lerp( v, alpha ) { this.x += ( v.x - this.x ) * alpha; this.y += ( v.y - this.y ) * alpha; this.z += ( v.z - this.z ) * alpha; this.w += ( v.w - this.w ) * alpha; return this; } lerpVectors( v1, v2, alpha ) { this.x = v1.x + ( v2.x - v1.x ) * alpha; this.y = v1.y + ( v2.y - v1.y ) * alpha; this.z = v1.z + ( v2.z - v1.z ) * alpha; this.w = v1.w + ( v2.w - v1.w ) * alpha; return this; } equals( v ) { return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) ); } fromArray( array, offset = 0 ) { this.x = array[ offset ]; this.y = array[ offset + 1 ]; this.z = array[ offset + 2 ]; this.w = array[ offset + 3 ]; return this; } toArray( array = [], offset = 0 ) { array[ offset ] = this.x; array[ offset + 1 ] = this.y; array[ offset + 2 ] = this.z; array[ offset + 3 ] = this.w; return array; } fromBufferAttribute( attribute, index, offset ) { if ( offset !== undefined ) { console.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' ); } this.x = attribute.getX( index ); this.y = attribute.getY( index ); this.z = attribute.getZ( index ); this.w = attribute.getW( index ); return this; } random() { this.x = Math.random(); this.y = Math.random(); this.z = Math.random(); this.w = Math.random(); return this; } } /* In options, we can specify: * Texture parameters for an auto-generated target texture * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers */ function WebGLRenderTarget( width, height, options ) { this.width = width; this.height = height; this.scissor = new Vector4( 0, 0, width, height ); this.scissorTest = false; this.viewport = new Vector4( 0, 0, width, height ); options = options || {}; this.texture = new Texture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); this.texture.image = {}; this.texture.image.width = width; this.texture.image.height = height; this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false; this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter; this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true; this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false; this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null; } WebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { constructor: WebGLRenderTarget, isWebGLRenderTarget: true, setSize: function ( width, height ) { if ( this.width !== width || this.height !== height ) { this.width = width; this.height = height; this.texture.image.width = width; this.texture.image.height = height; this.dispose(); } this.viewport.set( 0, 0, width, height ); this.scissor.set( 0, 0, width, height ); }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.width = source.width; this.height = source.height; this.viewport.copy( source.viewport ); this.texture = source.texture.clone(); this.depthBuffer = source.depthBuffer; this.stencilBuffer = source.stencilBuffer; this.depthTexture = source.depthTexture; return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); function WebGLMultisampleRenderTarget( width, height, options ) { WebGLRenderTarget.call( this, width, height, options ); this.samples = 4; } WebGLMultisampleRenderTarget.prototype = Object.assign( Object.create( WebGLRenderTarget.prototype ), { constructor: WebGLMultisampleRenderTarget, isWebGLMultisampleRenderTarget: true, copy: function ( source ) { WebGLRenderTarget.prototype.copy.call( this, source ); this.samples = source.samples; return this; } } ); class Quaternion { constructor( x = 0, y = 0, z = 0, w = 1 ) { Object.defineProperty( this, 'isQuaternion', { value: true } ); this._x = x; this._y = y; this._z = z; this._w = w; } static slerp( qa, qb, qm, t ) { return qm.copy( qa ).slerp( qb, t ); } static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) { // fuzz-free, array-based Quaternion SLERP operation let x0 = src0[ srcOffset0 + 0 ], y0 = src0[ srcOffset0 + 1 ], z0 = src0[ srcOffset0 + 2 ], w0 = src0[ srcOffset0 + 3 ]; const x1 = src1[ srcOffset1 + 0 ], y1 = src1[ srcOffset1 + 1 ], z1 = src1[ srcOffset1 + 2 ], w1 = src1[ srcOffset1 + 3 ]; if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) { let s = 1 - t; const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1, dir = ( cos >= 0 ? 1 : - 1 ), sqrSin = 1 - cos * cos; // Skip the Slerp for tiny steps to avoid numeric problems: if ( sqrSin > Number.EPSILON ) { const sin = Math.sqrt( sqrSin ), len = Math.atan2( sin, cos * dir ); s = Math.sin( s * len ) / sin; t = Math.sin( t * len ) / sin; } const tDir = t * dir; x0 = x0 * s + x1 * tDir; y0 = y0 * s + y1 * tDir; z0 = z0 * s + z1 * tDir; w0 = w0 * s + w1 * tDir; // Normalize in case we just did a lerp: if ( s === 1 - t ) { const f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 ); x0 *= f; y0 *= f; z0 *= f; w0 *= f; } } dst[ dstOffset ] = x0; dst[ dstOffset + 1 ] = y0; dst[ dstOffset + 2 ] = z0; dst[ dstOffset + 3 ] = w0; } static multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) { const x0 = src0[ srcOffset0 ]; const y0 = src0[ srcOffset0 + 1 ]; const z0 = src0[ srcOffset0 + 2 ]; const w0 = src0[ srcOffset0 + 3 ]; const x1 = src1[ srcOffset1 ]; const y1 = src1[ srcOffset1 + 1 ]; const z1 = src1[ srcOffset1 + 2 ]; const w1 = src1[ srcOffset1 + 3 ]; dst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1; dst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1; dst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1; dst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1; return dst; } get x() { return this._x; } set x( value ) { this._x = value; this._onChangeCallback(); } get y() { return this._y; } set y( value ) { this._y = value; this._onChangeCallback(); } get z() { return this._z; } set z( value ) { this._z = value; this._onChangeCallback(); } get w() { return this._w; } set w( value ) { this._w = value; this._onChangeCallback(); } set( x, y, z, w ) { this._x = x; this._y = y; this._z = z; this._w = w; this._onChangeCallback(); return this; } clone() { return new this.constructor( this._x, this._y, this._z, this._w ); } copy( quaternion ) { this._x = quaternion.x; this._y = quaternion.y; this._z = quaternion.z; this._w = quaternion.w; this._onChangeCallback(); return this; } setFromEuler( euler, update ) { if ( ! ( euler && euler.isEuler ) ) { throw new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' ); } const x = euler._x, y = euler._y, z = euler._z, order = euler._order; // http://www.mathworks.com/matlabcentral/fileexchange/ // 20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/ // content/SpinCalc.m const cos = Math.cos; const sin = Math.sin; const c1 = cos( x / 2 ); const c2 = cos( y / 2 ); const c3 = cos( z / 2 ); const s1 = sin( x / 2 ); const s2 = sin( y / 2 ); const s3 = sin( z / 2 ); switch ( order ) { case 'XYZ': this._x = s1 * c2 * c3 + c1 * s2 * s3; this._y = c1 * s2 * c3 - s1 * c2 * s3; this._z = c1 * c2 * s3 + s1 * s2 * c3; this._w = c1 * c2 * c3 - s1 * s2 * s3; break; case 'YXZ': this._x = s1 * c2 * c3 + c1 * s2 * s3; this._y = c1 * s2 * c3 - s1 * c2 * s3; this._z = c1 * c2 * s3 - s1 * s2 * c3; this._w = c1 * c2 * c3 + s1 * s2 * s3; break; case 'ZXY': this._x = s1 * c2 * c3 - c1 * s2 * s3; this._y = c1 * s2 * c3 + s1 * c2 * s3; this._z = c1 * c2 * s3 + s1 * s2 * c3; this._w = c1 * c2 * c3 - s1 * s2 * s3; break; case 'ZYX': this._x = s1 * c2 * c3 - c1 * s2 * s3; this._y = c1 * s2 * c3 + s1 * c2 * s3; this._z = c1 * c2 * s3 - s1 * s2 * c3; this._w = c1 * c2 * c3 + s1 * s2 * s3; break; case 'YZX': this._x = s1 * c2 * c3 + c1 * s2 * s3; this._y = c1 * s2 * c3 + s1 * c2 * s3; this._z = c1 * c2 * s3 - s1 * s2 * c3; this._w = c1 * c2 * c3 - s1 * s2 * s3; break; case 'XZY': this._x = s1 * c2 * c3 - c1 * s2 * s3; this._y = c1 * s2 * c3 - s1 * c2 * s3; this._z = c1 * c2 * s3 + s1 * s2 * c3; this._w = c1 * c2 * c3 + s1 * s2 * s3; break; default: console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order ); } if ( update !== false ) this._onChangeCallback(); return this; } setFromAxisAngle( axis, angle ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm // assumes axis is normalized const halfAngle = angle / 2, s = Math.sin( halfAngle ); this._x = axis.x * s; this._y = axis.y * s; this._z = axis.z * s; this._w = Math.cos( halfAngle ); this._onChangeCallback(); return this; } setFromRotationMatrix( m ) { // http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) const te = m.elements, m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ], m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ], m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ], trace = m11 + m22 + m33; if ( trace > 0 ) { const s = 0.5 / Math.sqrt( trace + 1.0 ); this._w = 0.25 / s; this._x = ( m32 - m23 ) * s; this._y = ( m13 - m31 ) * s; this._z = ( m21 - m12 ) * s; } else if ( m11 > m22 && m11 > m33 ) { const s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 ); this._w = ( m32 - m23 ) / s; this._x = 0.25 * s; this._y = ( m12 + m21 ) / s; this._z = ( m13 + m31 ) / s; } else if ( m22 > m33 ) { const s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 ); this._w = ( m13 - m31 ) / s; this._x = ( m12 + m21 ) / s; this._y = 0.25 * s; this._z = ( m23 + m32 ) / s; } else { const s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 ); this._w = ( m21 - m12 ) / s; this._x = ( m13 + m31 ) / s; this._y = ( m23 + m32 ) / s; this._z = 0.25 * s; } this._onChangeCallback(); return this; } setFromUnitVectors( vFrom, vTo ) { // assumes direction vectors vFrom and vTo are normalized const EPS = 0.000001; let r = vFrom.dot( vTo ) + 1; if ( r < EPS ) { r = 0; if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) { this._x = - vFrom.y; this._y = vFrom.x; this._z = 0; this._w = r; } else { this._x = 0; this._y = - vFrom.z; this._z = vFrom.y; this._w = r; } } else { // crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3 this._x = vFrom.y * vTo.z - vFrom.z * vTo.y; this._y = vFrom.z * vTo.x - vFrom.x * vTo.z; this._z = vFrom.x * vTo.y - vFrom.y * vTo.x; this._w = r; } return this.normalize(); } angleTo( q ) { return 2 * Math.acos( Math.abs( MathUtils.clamp( this.dot( q ), - 1, 1 ) ) ); } rotateTowards( q, step ) { const angle = this.angleTo( q ); if ( angle === 0 ) return this; const t = Math.min( 1, step / angle ); this.slerp( q, t ); return this; } identity() { return this.set( 0, 0, 0, 1 ); } invert() { // quaternion is assumed to have unit length return this.conjugate(); } conjugate() { this._x *= - 1; this._y *= - 1; this._z *= - 1; this._onChangeCallback(); return this; } dot( v ) { return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w; } lengthSq() { return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w; } length() { return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w ); } normalize() { let l = this.length(); if ( l === 0 ) { this._x = 0; this._y = 0; this._z = 0; this._w = 1; } else { l = 1 / l; this._x = this._x * l; this._y = this._y * l; this._z = this._z * l; this._w = this._w * l; } this._onChangeCallback(); return this; } multiply( q, p ) { if ( p !== undefined ) { console.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' ); return this.multiplyQuaternions( q, p ); } return this.multiplyQuaternions( this, q ); } premultiply( q ) { return this.multiplyQuaternions( q, this ); } multiplyQuaternions( a, b ) { // from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w; const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w; this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby; this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz; this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx; this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz; this._onChangeCallback(); return this; } slerp( qb, t ) { if ( t === 0 ) return this; if ( t === 1 ) return this.copy( qb ); const x = this._x, y = this._y, z = this._z, w = this._w; // http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/ let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z; if ( cosHalfTheta < 0 ) { this._w = - qb._w; this._x = - qb._x; this._y = - qb._y; this._z = - qb._z; cosHalfTheta = - cosHalfTheta; } else { this.copy( qb ); } if ( cosHalfTheta >= 1.0 ) { this._w = w; this._x = x; this._y = y; this._z = z; return this; } const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta; if ( sqrSinHalfTheta <= Number.EPSILON ) { const s = 1 - t; this._w = s * w + t * this._w; this._x = s * x + t * this._x; this._y = s * y + t * this._y; this._z = s * z + t * this._z; this.normalize(); this._onChangeCallback(); return this; } const sinHalfTheta = Math.sqrt( sqrSinHalfTheta ); const halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta ); const ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta, ratioB = Math.sin( t * halfTheta ) / sinHalfTheta; this._w = ( w * ratioA + this._w * ratioB ); this._x = ( x * ratioA + this._x * ratioB ); this._y = ( y * ratioA + this._y * ratioB ); this._z = ( z * ratioA + this._z * ratioB ); this._onChangeCallback(); return this; } equals( quaternion ) { return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w ); } fromArray( array, offset = 0 ) { this._x = array[ offset ]; this._y = array[ offset + 1 ]; this._z = array[ offset + 2 ]; this._w = array[ offset + 3 ]; this._onChangeCallback(); return this; } toArray( array = [], offset = 0 ) { array[ offset ] = this._x; array[ offset + 1 ] = this._y; array[ offset + 2 ] = this._z; array[ offset + 3 ] = this._w; return array; } fromBufferAttribute( attribute, index ) { this._x = attribute.getX( index ); this._y = attribute.getY( index ); this._z = attribute.getZ( index ); this._w = attribute.getW( index ); return this; } _onChange( callback ) { this._onChangeCallback = callback; return this; } _onChangeCallback() {} } class Vector3 { constructor( x = 0, y = 0, z = 0 ) { Object.defineProperty( this, 'isVector3', { value: true } ); this.x = x; this.y = y; this.z = z; } set( x, y, z ) { if ( z === undefined ) z = this.z; // sprite.scale.set(x,y) this.x = x; this.y = y; this.z = z; return this; } setScalar( scalar ) { this.x = scalar; this.y = scalar; this.z = scalar; return this; } setX( x ) { this.x = x; return this; } setY( y ) { this.y = y; return this; } setZ( z ) { this.z = z; return this; } setComponent( index, value ) { switch ( index ) { case 0: this.x = value; break; case 1: this.y = value; break; case 2: this.z = value; break; default: throw new Error( 'index is out of range: ' + index ); } return this; } getComponent( index ) { switch ( index ) { case 0: return this.x; case 1: return this.y; case 2: return this.z; default: throw new Error( 'index is out of range: ' + index ); } } clone() { return new this.constructor( this.x, this.y, this.z ); } copy( v ) { this.x = v.x; this.y = v.y; this.z = v.z; return this; } add( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' ); return this.addVectors( v, w ); } this.x += v.x; this.y += v.y; this.z += v.z; return this; } addScalar( s ) { this.x += s; this.y += s; this.z += s; return this; } addVectors( a, b ) { this.x = a.x + b.x; this.y = a.y + b.y; this.z = a.z + b.z; return this; } addScaledVector( v, s ) { this.x += v.x * s; this.y += v.y * s; this.z += v.z * s; return this; } sub( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' ); return this.subVectors( v, w ); } this.x -= v.x; this.y -= v.y; this.z -= v.z; return this; } subScalar( s ) { this.x -= s; this.y -= s; this.z -= s; return this; } subVectors( a, b ) { this.x = a.x - b.x; this.y = a.y - b.y; this.z = a.z - b.z; return this; } multiply( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' ); return this.multiplyVectors( v, w ); } this.x *= v.x; this.y *= v.y; this.z *= v.z; return this; } multiplyScalar( scalar ) { this.x *= scalar; this.y *= scalar; this.z *= scalar; return this; } multiplyVectors( a, b ) { this.x = a.x * b.x; this.y = a.y * b.y; this.z = a.z * b.z; return this; } applyEuler( euler ) { if ( ! ( euler && euler.isEuler ) ) { console.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' ); } return this.applyQuaternion( _quaternion.setFromEuler( euler ) ); } applyAxisAngle( axis, angle ) { return this.applyQuaternion( _quaternion.setFromAxisAngle( axis, angle ) ); } applyMatrix3( m ) { const x = this.x, y = this.y, z = this.z; const e = m.elements; this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z; this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z; this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z; return this; } applyNormalMatrix( m ) { return this.applyMatrix3( m ).normalize(); } applyMatrix4( m ) { const x = this.x, y = this.y, z = this.z; const e = m.elements; const w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] ); this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w; this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w; this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w; return this; } applyQuaternion( q ) { const x = this.x, y = this.y, z = this.z; const qx = q.x, qy = q.y, qz = q.z, qw = q.w; // calculate quat * vector const ix = qw * x + qy * z - qz * y; const iy = qw * y + qz * x - qx * z; const iz = qw * z + qx * y - qy * x; const iw = - qx * x - qy * y - qz * z; // calculate result * inverse quat this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy; this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz; this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx; return this; } project( camera ) { return this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix ); } unproject( camera ) { return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld ); } transformDirection( m ) { // input: THREE.Matrix4 affine matrix // vector interpreted as a direction const x = this.x, y = this.y, z = this.z; const e = m.elements; this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z; this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z; this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z; return this.normalize(); } divide( v ) { this.x /= v.x; this.y /= v.y; this.z /= v.z; return this; } divideScalar( scalar ) { return this.multiplyScalar( 1 / scalar ); } min( v ) { this.x = Math.min( this.x, v.x ); this.y = Math.min( this.y, v.y ); this.z = Math.min( this.z, v.z ); return this; } max( v ) { this.x = Math.max( this.x, v.x ); this.y = Math.max( this.y, v.y ); this.z = Math.max( this.z, v.z ); return this; } clamp( min, max ) { // assumes min < max, componentwise this.x = Math.max( min.x, Math.min( max.x, this.x ) ); this.y = Math.max( min.y, Math.min( max.y, this.y ) ); this.z = Math.max( min.z, Math.min( max.z, this.z ) ); return this; } clampScalar( minVal, maxVal ) { this.x = Math.max( minVal, Math.min( maxVal, this.x ) ); this.y = Math.max( minVal, Math.min( maxVal, this.y ) ); this.z = Math.max( minVal, Math.min( maxVal, this.z ) ); return this; } clampLength( min, max ) { const length = this.length(); return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) ); } floor() { this.x = Math.floor( this.x ); this.y = Math.floor( this.y ); this.z = Math.floor( this.z ); return this; } ceil() { this.x = Math.ceil( this.x ); this.y = Math.ceil( this.y ); this.z = Math.ceil( this.z ); return this; } round() { this.x = Math.round( this.x ); this.y = Math.round( this.y ); this.z = Math.round( this.z ); return this; } roundToZero() { this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x ); this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y ); this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z ); return this; } negate() { this.x = - this.x; this.y = - this.y; this.z = - this.z; return this; } dot( v ) { return this.x * v.x + this.y * v.y + this.z * v.z; } // TODO lengthSquared? lengthSq() { return this.x * this.x + this.y * this.y + this.z * this.z; } length() { return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z ); } manhattanLength() { return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ); } normalize() { return this.divideScalar( this.length() || 1 ); } setLength( length ) { return this.normalize().multiplyScalar( length ); } lerp( v, alpha ) { this.x += ( v.x - this.x ) * alpha; this.y += ( v.y - this.y ) * alpha; this.z += ( v.z - this.z ) * alpha; return this; } lerpVectors( v1, v2, alpha ) { this.x = v1.x + ( v2.x - v1.x ) * alpha; this.y = v1.y + ( v2.y - v1.y ) * alpha; this.z = v1.z + ( v2.z - v1.z ) * alpha; return this; } cross( v, w ) { if ( w !== undefined ) { console.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' ); return this.crossVectors( v, w ); } return this.crossVectors( this, v ); } crossVectors( a, b ) { const ax = a.x, ay = a.y, az = a.z; const bx = b.x, by = b.y, bz = b.z; this.x = ay * bz - az * by; this.y = az * bx - ax * bz; this.z = ax * by - ay * bx; return this; } projectOnVector( v ) { const denominator = v.lengthSq(); if ( denominator === 0 ) return this.set( 0, 0, 0 ); const scalar = v.dot( this ) / denominator; return this.copy( v ).multiplyScalar( scalar ); } projectOnPlane( planeNormal ) { _vector.copy( this ).projectOnVector( planeNormal ); return this.sub( _vector ); } reflect( normal ) { // reflect incident vector off plane orthogonal to normal // normal is assumed to have unit length return this.sub( _vector.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) ); } angleTo( v ) { const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() ); if ( denominator === 0 ) return Math.PI / 2; const theta = this.dot( v ) / denominator; // clamp, to handle numerical problems return Math.acos( MathUtils.clamp( theta, - 1, 1 ) ); } distanceTo( v ) { return Math.sqrt( this.distanceToSquared( v ) ); } distanceToSquared( v ) { const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z; return dx * dx + dy * dy + dz * dz; } manhattanDistanceTo( v ) { return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z ); } setFromSpherical( s ) { return this.setFromSphericalCoords( s.radius, s.phi, s.theta ); } setFromSphericalCoords( radius, phi, theta ) { const sinPhiRadius = Math.sin( phi ) * radius; this.x = sinPhiRadius * Math.sin( theta ); this.y = Math.cos( phi ) * radius; this.z = sinPhiRadius * Math.cos( theta ); return this; } setFromCylindrical( c ) { return this.setFromCylindricalCoords( c.radius, c.theta, c.y ); } setFromCylindricalCoords( radius, theta, y ) { this.x = radius * Math.sin( theta ); this.y = y; this.z = radius * Math.cos( theta ); return this; } setFromMatrixPosition( m ) { const e = m.elements; this.x = e[ 12 ]; this.y = e[ 13 ]; this.z = e[ 14 ]; return this; } setFromMatrixScale( m ) { const sx = this.setFromMatrixColumn( m, 0 ).length(); const sy = this.setFromMatrixColumn( m, 1 ).length(); const sz = this.setFromMatrixColumn( m, 2 ).length(); this.x = sx; this.y = sy; this.z = sz; return this; } setFromMatrixColumn( m, index ) { return this.fromArray( m.elements, index * 4 ); } setFromMatrix3Column( m, index ) { return this.fromArray( m.elements, index * 3 ); } equals( v ) { return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) ); } fromArray( array, offset = 0 ) { this.x = array[ offset ]; this.y = array[ offset + 1 ]; this.z = array[ offset + 2 ]; return this; } toArray( array = [], offset = 0 ) { array[ offset ] = this.x; array[ offset + 1 ] = this.y; array[ offset + 2 ] = this.z; return array; } fromBufferAttribute( attribute, index, offset ) { if ( offset !== undefined ) { console.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' ); } this.x = attribute.getX( index ); this.y = attribute.getY( index ); this.z = attribute.getZ( index ); return this; } random() { this.x = Math.random(); this.y = Math.random(); this.z = Math.random(); return this; } } const _vector = /*@__PURE__*/ new Vector3(); const _quaternion = /*@__PURE__*/ new Quaternion(); class Box3 { constructor( min, max ) { Object.defineProperty( this, 'isBox3', { value: true } ); this.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity ); this.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity ); } set( min, max ) { this.min.copy( min ); this.max.copy( max ); return this; } setFromArray( array ) { let minX = + Infinity; let minY = + Infinity; let minZ = + Infinity; let maxX = - Infinity; let maxY = - Infinity; let maxZ = - Infinity; for ( let i = 0, l = array.length; i < l; i += 3 ) { const x = array[ i ]; const y = array[ i + 1 ]; const z = array[ i + 2 ]; if ( x < minX ) minX = x; if ( y < minY ) minY = y; if ( z < minZ ) minZ = z; if ( x > maxX ) maxX = x; if ( y > maxY ) maxY = y; if ( z > maxZ ) maxZ = z; } this.min.set( minX, minY, minZ ); this.max.set( maxX, maxY, maxZ ); return this; } setFromBufferAttribute( attribute ) { let minX = + Infinity; let minY = + Infinity; let minZ = + Infinity; let maxX = - Infinity; let maxY = - Infinity; let maxZ = - Infinity; for ( let i = 0, l = attribute.count; i < l; i ++ ) { const x = attribute.getX( i ); const y = attribute.getY( i ); const z = attribute.getZ( i ); if ( x < minX ) minX = x; if ( y < minY ) minY = y; if ( z < minZ ) minZ = z; if ( x > maxX ) maxX = x; if ( y > maxY ) maxY = y; if ( z > maxZ ) maxZ = z; } this.min.set( minX, minY, minZ ); this.max.set( maxX, maxY, maxZ ); return this; } setFromPoints( points ) { this.makeEmpty(); for ( let i = 0, il = points.length; i < il; i ++ ) { this.expandByPoint( points[ i ] ); } return this; } setFromCenterAndSize( center, size ) { const halfSize = _vector$1.copy( size ).multiplyScalar( 0.5 ); this.min.copy( center ).sub( halfSize ); this.max.copy( center ).add( halfSize ); return this; } setFromObject( object ) { this.makeEmpty(); return this.expandByObject( object ); } clone() { return new this.constructor().copy( this ); } copy( box ) { this.min.copy( box.min ); this.max.copy( box.max ); return this; } makeEmpty() { this.min.x = this.min.y = this.min.z = + Infinity; this.max.x = this.max.y = this.max.z = - Infinity; return this; } isEmpty() { // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z ); } getCenter( target ) { if ( target === undefined ) { console.warn( 'THREE.Box3: .getCenter() target is now required' ); target = new Vector3(); } return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); } getSize( target ) { if ( target === undefined ) { console.warn( 'THREE.Box3: .getSize() target is now required' ); target = new Vector3(); } return this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min ); } expandByPoint( point ) { this.min.min( point ); this.max.max( point ); return this; } expandByVector( vector ) { this.min.sub( vector ); this.max.add( vector ); return this; } expandByScalar( scalar ) { this.min.addScalar( - scalar ); this.max.addScalar( scalar ); return this; } expandByObject( object ) { // Computes the world-axis-aligned bounding box of an object (including its children), // accounting for both the object's, and children's, world transforms object.updateWorldMatrix( false, false ); const geometry = object.geometry; if ( geometry !== undefined ) { if ( geometry.boundingBox === null ) { geometry.computeBoundingBox(); } _box.copy( geometry.boundingBox ); _box.applyMatrix4( object.matrixWorld ); this.union( _box ); } const children = object.children; for ( let i = 0, l = children.length; i < l; i ++ ) { this.expandByObject( children[ i ] ); } return this; } containsPoint( point ) { return point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y || point.z < this.min.z || point.z > this.max.z ? false : true; } containsBox( box ) { return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y && this.min.z <= box.min.z && box.max.z <= this.max.z; } getParameter( point, target ) { // This can potentially have a divide by zero if the box // has a size dimension of 0. if ( target === undefined ) { console.warn( 'THREE.Box3: .getParameter() target is now required' ); target = new Vector3(); } return target.set( ( point.x - this.min.x ) / ( this.max.x - this.min.x ), ( point.y - this.min.y ) / ( this.max.y - this.min.y ), ( point.z - this.min.z ) / ( this.max.z - this.min.z ) ); } intersectsBox( box ) { // using 6 splitting planes to rule out intersections. return box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y || box.max.z < this.min.z || box.min.z > this.max.z ? false : true; } intersectsSphere( sphere ) { // Find the point on the AABB closest to the sphere center. this.clampPoint( sphere.center, _vector$1 ); // If that point is inside the sphere, the AABB and sphere intersect. return _vector$1.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius ); } intersectsPlane( plane ) { // We compute the minimum and maximum dot product values. If those values // are on the same side (back or front) of the plane, then there is no intersection. let min, max; if ( plane.normal.x > 0 ) { min = plane.normal.x * this.min.x; max = plane.normal.x * this.max.x; } else { min = plane.normal.x * this.max.x; max = plane.normal.x * this.min.x; } if ( plane.normal.y > 0 ) { min += plane.normal.y * this.min.y; max += plane.normal.y * this.max.y; } else { min += plane.normal.y * this.max.y; max += plane.normal.y * this.min.y; } if ( plane.normal.z > 0 ) { min += plane.normal.z * this.min.z; max += plane.normal.z * this.max.z; } else { min += plane.normal.z * this.max.z; max += plane.normal.z * this.min.z; } return ( min <= - plane.constant && max >= - plane.constant ); } intersectsTriangle( triangle ) { if ( this.isEmpty() ) { return false; } // compute box center and extents this.getCenter( _center ); _extents.subVectors( this.max, _center ); // translate triangle to aabb origin _v0.subVectors( triangle.a, _center ); _v1.subVectors( triangle.b, _center ); _v2.subVectors( triangle.c, _center ); // compute edge vectors for triangle _f0.subVectors( _v1, _v0 ); _f1.subVectors( _v2, _v1 ); _f2.subVectors( _v0, _v2 ); // test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb // make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation // axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned) let axes = [ 0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y, _f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x, - _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0 ]; if ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) { return false; } // test 3 face normals from the aabb axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ]; if ( ! satForAxes( axes, _v0, _v1, _v2, _extents ) ) { return false; } // finally testing the face normal of the triangle // use already existing triangle edge vectors here _triangleNormal.crossVectors( _f0, _f1 ); axes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ]; return satForAxes( axes, _v0, _v1, _v2, _extents ); } clampPoint( point, target ) { if ( target === undefined ) { console.warn( 'THREE.Box3: .clampPoint() target is now required' ); target = new Vector3(); } return target.copy( point ).clamp( this.min, this.max ); } distanceToPoint( point ) { const clampedPoint = _vector$1.copy( point ).clamp( this.min, this.max ); return clampedPoint.sub( point ).length(); } getBoundingSphere( target ) { if ( target === undefined ) { console.error( 'THREE.Box3: .getBoundingSphere() target is now required' ); //target = new Sphere(); // removed to avoid cyclic dependency } this.getCenter( target.center ); target.radius = this.getSize( _vector$1 ).length() * 0.5; return target; } intersect( box ) { this.min.max( box.min ); this.max.min( box.max ); // ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values. if ( this.isEmpty() ) this.makeEmpty(); return this; } union( box ) { this.min.min( box.min ); this.max.max( box.max ); return this; } applyMatrix4( matrix ) { // transform of empty box is an empty box. if ( this.isEmpty() ) return this; // NOTE: I am using a binary pattern to specify all 2^3 combinations below _points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000 _points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001 _points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010 _points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011 _points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100 _points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101 _points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110 _points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111 this.setFromPoints( _points ); return this; } translate( offset ) { this.min.add( offset ); this.max.add( offset ); return this; } equals( box ) { return box.min.equals( this.min ) && box.max.equals( this.max ); } } function satForAxes( axes, v0, v1, v2, extents ) { for ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) { _testAxis.fromArray( axes, i ); // project the aabb onto the seperating axis const r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z ); // project all 3 vertices of the triangle onto the seperating axis const p0 = v0.dot( _testAxis ); const p1 = v1.dot( _testAxis ); const p2 = v2.dot( _testAxis ); // actual test, basically see if either of the most extreme of the triangle points intersects r if ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) { // points of the projected triangle are outside the projected half-length of the aabb // the axis is seperating and we can exit return false; } } return true; } const _points = [ /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3(), /*@__PURE__*/ new Vector3() ]; const _vector$1 = /*@__PURE__*/ new Vector3(); const _box = /*@__PURE__*/ new Box3(); // triangle centered vertices const _v0 = /*@__PURE__*/ new Vector3(); const _v1 = /*@__PURE__*/ new Vector3(); const _v2 = /*@__PURE__*/ new Vector3(); // triangle edge vectors const _f0 = /*@__PURE__*/ new Vector3(); const _f1 = /*@__PURE__*/ new Vector3(); const _f2 = /*@__PURE__*/ new Vector3(); const _center = /*@__PURE__*/ new Vector3(); const _extents = /*@__PURE__*/ new Vector3(); const _triangleNormal = /*@__PURE__*/ new Vector3(); const _testAxis = /*@__PURE__*/ new Vector3(); const _box$1 = /*@__PURE__*/ new Box3(); class Sphere { constructor( center, radius ) { this.center = ( center !== undefined ) ? center : new Vector3(); this.radius = ( radius !== undefined ) ? radius : - 1; } set( center, radius ) { this.center.copy( center ); this.radius = radius; return this; } setFromPoints( points, optionalCenter ) { const center = this.center; if ( optionalCenter !== undefined ) { center.copy( optionalCenter ); } else { _box$1.setFromPoints( points ).getCenter( center ); } let maxRadiusSq = 0; for ( let i = 0, il = points.length; i < il; i ++ ) { maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) ); } this.radius = Math.sqrt( maxRadiusSq ); return this; } clone() { return new this.constructor().copy( this ); } copy( sphere ) { this.center.copy( sphere.center ); this.radius = sphere.radius; return this; } isEmpty() { return ( this.radius < 0 ); } makeEmpty() { this.center.set( 0, 0, 0 ); this.radius = - 1; return this; } containsPoint( point ) { return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) ); } distanceToPoint( point ) { return ( point.distanceTo( this.center ) - this.radius ); } intersectsSphere( sphere ) { const radiusSum = this.radius + sphere.radius; return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum ); } intersectsBox( box ) { return box.intersectsSphere( this ); } intersectsPlane( plane ) { return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius; } clampPoint( point, target ) { const deltaLengthSq = this.center.distanceToSquared( point ); if ( target === undefined ) { console.warn( 'THREE.Sphere: .clampPoint() target is now required' ); target = new Vector3(); } target.copy( point ); if ( deltaLengthSq > ( this.radius * this.radius ) ) { target.sub( this.center ).normalize(); target.multiplyScalar( this.radius ).add( this.center ); } return target; } getBoundingBox( target ) { if ( target === undefined ) { console.warn( 'THREE.Sphere: .getBoundingBox() target is now required' ); target = new Box3(); } if ( this.isEmpty() ) { // Empty sphere produces empty bounding box target.makeEmpty(); return target; } target.set( this.center, this.center ); target.expandByScalar( this.radius ); return target; } applyMatrix4( matrix ) { this.center.applyMatrix4( matrix ); this.radius = this.radius * matrix.getMaxScaleOnAxis(); return this; } translate( offset ) { this.center.add( offset ); return this; } equals( sphere ) { return sphere.center.equals( this.center ) && ( sphere.radius === this.radius ); } } const _vector$2 = /*@__PURE__*/ new Vector3(); const _segCenter = /*@__PURE__*/ new Vector3(); const _segDir = /*@__PURE__*/ new Vector3(); const _diff = /*@__PURE__*/ new Vector3(); const _edge1 = /*@__PURE__*/ new Vector3(); const _edge2 = /*@__PURE__*/ new Vector3(); const _normal = /*@__PURE__*/ new Vector3(); class Ray { constructor( origin, direction ) { this.origin = ( origin !== undefined ) ? origin : new Vector3(); this.direction = ( direction !== undefined ) ? direction : new Vector3( 0, 0, - 1 ); } set( origin, direction ) { this.origin.copy( origin ); this.direction.copy( direction ); return this; } clone() { return new this.constructor().copy( this ); } copy( ray ) { this.origin.copy( ray.origin ); this.direction.copy( ray.direction ); return this; } at( t, target ) { if ( target === undefined ) { console.warn( 'THREE.Ray: .at() target is now required' ); target = new Vector3(); } return target.copy( this.direction ).multiplyScalar( t ).add( this.origin ); } lookAt( v ) { this.direction.copy( v ).sub( this.origin ).normalize(); return this; } recast( t ) { this.origin.copy( this.at( t, _vector$2 ) ); return this; } closestPointToPoint( point, target ) { if ( target === undefined ) { console.warn( 'THREE.Ray: .closestPointToPoint() target is now required' ); target = new Vector3(); } target.subVectors( point, this.origin ); const directionDistance = target.dot( this.direction ); if ( directionDistance < 0 ) { return target.copy( this.origin ); } return target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); } distanceToPoint( point ) { return Math.sqrt( this.distanceSqToPoint( point ) ); } distanceSqToPoint( point ) { const directionDistance = _vector$2.subVectors( point, this.origin ).dot( this.direction ); // point behind the ray if ( directionDistance < 0 ) { return this.origin.distanceToSquared( point ); } _vector$2.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin ); return _vector$2.distanceToSquared( point ); } distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) { // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h // It returns the min distance between the ray and the segment // defined by v0 and v1 // It can also set two optional targets : // - The closest point on the ray // - The closest point on the segment _segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 ); _segDir.copy( v1 ).sub( v0 ).normalize(); _diff.copy( this.origin ).sub( _segCenter ); const segExtent = v0.distanceTo( v1 ) * 0.5; const a01 = - this.direction.dot( _segDir ); const b0 = _diff.dot( this.direction ); const b1 = - _diff.dot( _segDir ); const c = _diff.lengthSq(); const det = Math.abs( 1 - a01 * a01 ); let s0, s1, sqrDist, extDet; if ( det > 0 ) { // The ray and segment are not parallel. s0 = a01 * b1 - b0; s1 = a01 * b0 - b1; extDet = segExtent * det; if ( s0 >= 0 ) { if ( s1 >= - extDet ) { if ( s1 <= extDet ) { // region 0 // Minimum at interior points of ray and segment. const invDet = 1 / det; s0 *= invDet; s1 *= invDet; sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c; } else { // region 1 s1 = segExtent; s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } } else { // region 5 s1 = - segExtent; s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } } else { if ( s1 <= - extDet ) { // region 4 s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) ); s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } else if ( s1 <= extDet ) { // region 3 s0 = 0; s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent ); sqrDist = s1 * ( s1 + 2 * b1 ) + c; } else { // region 2 s0 = Math.max( 0, - ( a01 * segExtent + b0 ) ); s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } } } else { // Ray and segment are parallel. s1 = ( a01 > 0 ) ? - segExtent : segExtent; s0 = Math.max( 0, - ( a01 * s1 + b0 ) ); sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c; } if ( optionalPointOnRay ) { optionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin ); } if ( optionalPointOnSegment ) { optionalPointOnSegment.copy( _segDir ).multiplyScalar( s1 ).add( _segCenter ); } return sqrDist; } intersectSphere( sphere, target ) { _vector$2.subVectors( sphere.center, this.origin ); const tca = _vector$2.dot( this.direction ); const d2 = _vector$2.dot( _vector$2 ) - tca * tca; const radius2 = sphere.radius * sphere.radius; if ( d2 > radius2 ) return null; const thc = Math.sqrt( radius2 - d2 ); // t0 = first intersect point - entrance on front of sphere const t0 = tca - thc; // t1 = second intersect point - exit point on back of sphere const t1 = tca + thc; // test to see if both t0 and t1 are behind the ray - if so, return null if ( t0 < 0 && t1 < 0 ) return null; // test to see if t0 is behind the ray: // if it is, the ray is inside the sphere, so return the second exit point scaled by t1, // in order to always return an intersect point that is in front of the ray. if ( t0 < 0 ) return this.at( t1, target ); // else t0 is in front of the ray, so return the first collision point scaled by t0 return this.at( t0, target ); } intersectsSphere( sphere ) { return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius ); } distanceToPlane( plane ) { const denominator = plane.normal.dot( this.direction ); if ( denominator === 0 ) { // line is coplanar, return origin if ( plane.distanceToPoint( this.origin ) === 0 ) { return 0; } // Null is preferable to undefined since undefined means.... it is undefined return null; } const t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator; // Return if the ray never intersects the plane return t >= 0 ? t : null; } intersectPlane( plane, target ) { const t = this.distanceToPlane( plane ); if ( t === null ) { return null; } return this.at( t, target ); } intersectsPlane( plane ) { // check if the ray lies on the plane first const distToPoint = plane.distanceToPoint( this.origin ); if ( distToPoint === 0 ) { return true; } const denominator = plane.normal.dot( this.direction ); if ( denominator * distToPoint < 0 ) { return true; } // ray origin is behind the plane (and is pointing behind it) return false; } intersectBox( box, target ) { let tmin, tmax, tymin, tymax, tzmin, tzmax; const invdirx = 1 / this.direction.x, invdiry = 1 / this.direction.y, invdirz = 1 / this.direction.z; const origin = this.origin; if ( invdirx >= 0 ) { tmin = ( box.min.x - origin.x ) * invdirx; tmax = ( box.max.x - origin.x ) * invdirx; } else { tmin = ( box.max.x - origin.x ) * invdirx; tmax = ( box.min.x - origin.x ) * invdirx; } if ( invdiry >= 0 ) { tymin = ( box.min.y - origin.y ) * invdiry; tymax = ( box.max.y - origin.y ) * invdiry; } else { tymin = ( box.max.y - origin.y ) * invdiry; tymax = ( box.min.y - origin.y ) * invdiry; } if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null; // These lines also handle the case where tmin or tmax is NaN // (result of 0 * Infinity). x !== x returns true if x is NaN if ( tymin > tmin || tmin !== tmin ) tmin = tymin; if ( tymax < tmax || tmax !== tmax ) tmax = tymax; if ( invdirz >= 0 ) { tzmin = ( box.min.z - origin.z ) * invdirz; tzmax = ( box.max.z - origin.z ) * invdirz; } else { tzmin = ( box.max.z - origin.z ) * invdirz; tzmax = ( box.min.z - origin.z ) * invdirz; } if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null; if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin; if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax; //return point closest to the ray (positive side) if ( tmax < 0 ) return null; return this.at( tmin >= 0 ? tmin : tmax, target ); } intersectsBox( box ) { return this.intersectBox( box, _vector$2 ) !== null; } intersectTriangle( a, b, c, backfaceCulling, target ) { // Compute the offset origin, edges, and normal. // from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h _edge1.subVectors( b, a ); _edge2.subVectors( c, a ); _normal.crossVectors( _edge1, _edge2 ); // Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction, // E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by // |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2)) // |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q)) // |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N) let DdN = this.direction.dot( _normal ); let sign; if ( DdN > 0 ) { if ( backfaceCulling ) return null; sign = 1; } else if ( DdN < 0 ) { sign = - 1; DdN = - DdN; } else { return null; } _diff.subVectors( this.origin, a ); const DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) ); // b1 < 0, no intersection if ( DdQxE2 < 0 ) { return null; } const DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) ); // b2 < 0, no intersection if ( DdE1xQ < 0 ) { return null; } // b1+b2 > 1, no intersection if ( DdQxE2 + DdE1xQ > DdN ) { return null; } // Line intersects triangle, check if ray does. const QdN = - sign * _diff.dot( _normal ); // t < 0, no intersection if ( QdN < 0 ) { return null; } // Ray intersects triangle. return this.at( QdN / DdN, target ); } applyMatrix4( matrix4 ) { this.origin.applyMatrix4( matrix4 ); this.direction.transformDirection( matrix4 ); return this; } equals( ray ) { return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction ); } } class Matrix4 { constructor() { Object.defineProperty( this, 'isMatrix4', { value: true } ); this.elements = [ 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ]; if ( arguments.length > 0 ) { console.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' ); } } set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) { const te = this.elements; te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14; te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24; te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34; te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44; return this; } identity() { this.set( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); return this; } clone() { return new Matrix4().fromArray( this.elements ); } copy( m ) { const te = this.elements; const me = m.elements; te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ]; te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ]; return this; } copyPosition( m ) { const te = this.elements, me = m.elements; te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; return this; } extractBasis( xAxis, yAxis, zAxis ) { xAxis.setFromMatrixColumn( this, 0 ); yAxis.setFromMatrixColumn( this, 1 ); zAxis.setFromMatrixColumn( this, 2 ); return this; } makeBasis( xAxis, yAxis, zAxis ) { this.set( xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1 ); return this; } extractRotation( m ) { // this method does not support reflection matrices const te = this.elements; const me = m.elements; const scaleX = 1 / _v1$1.setFromMatrixColumn( m, 0 ).length(); const scaleY = 1 / _v1$1.setFromMatrixColumn( m, 1 ).length(); const scaleZ = 1 / _v1$1.setFromMatrixColumn( m, 2 ).length(); te[ 0 ] = me[ 0 ] * scaleX; te[ 1 ] = me[ 1 ] * scaleX; te[ 2 ] = me[ 2 ] * scaleX; te[ 3 ] = 0; te[ 4 ] = me[ 4 ] * scaleY; te[ 5 ] = me[ 5 ] * scaleY; te[ 6 ] = me[ 6 ] * scaleY; te[ 7 ] = 0; te[ 8 ] = me[ 8 ] * scaleZ; te[ 9 ] = me[ 9 ] * scaleZ; te[ 10 ] = me[ 10 ] * scaleZ; te[ 11 ] = 0; te[ 12 ] = 0; te[ 13 ] = 0; te[ 14 ] = 0; te[ 15 ] = 1; return this; } makeRotationFromEuler( euler ) { if ( ! ( euler && euler.isEuler ) ) { console.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' ); } const te = this.elements; const x = euler.x, y = euler.y, z = euler.z; const a = Math.cos( x ), b = Math.sin( x ); const c = Math.cos( y ), d = Math.sin( y ); const e = Math.cos( z ), f = Math.sin( z ); if ( euler.order === 'XYZ' ) { const ae = a * e, af = a * f, be = b * e, bf = b * f; te[ 0 ] = c * e; te[ 4 ] = - c * f; te[ 8 ] = d; te[ 1 ] = af + be * d; te[ 5 ] = ae - bf * d; te[ 9 ] = - b * c; te[ 2 ] = bf - ae * d; te[ 6 ] = be + af * d; te[ 10 ] = a * c; } else if ( euler.order === 'YXZ' ) { const ce = c * e, cf = c * f, de = d * e, df = d * f; te[ 0 ] = ce + df * b; te[ 4 ] = de * b - cf; te[ 8 ] = a * d; te[ 1 ] = a * f; te[ 5 ] = a * e; te[ 9 ] = - b; te[ 2 ] = cf * b - de; te[ 6 ] = df + ce * b; te[ 10 ] = a * c; } else if ( euler.order === 'ZXY' ) { const ce = c * e, cf = c * f, de = d * e, df = d * f; te[ 0 ] = ce - df * b; te[ 4 ] = - a * f; te[ 8 ] = de + cf * b; te[ 1 ] = cf + de * b; te[ 5 ] = a * e; te[ 9 ] = df - ce * b; te[ 2 ] = - a * d; te[ 6 ] = b; te[ 10 ] = a * c; } else if ( euler.order === 'ZYX' ) { const ae = a * e, af = a * f, be = b * e, bf = b * f; te[ 0 ] = c * e; te[ 4 ] = be * d - af; te[ 8 ] = ae * d + bf; te[ 1 ] = c * f; te[ 5 ] = bf * d + ae; te[ 9 ] = af * d - be; te[ 2 ] = - d; te[ 6 ] = b * c; te[ 10 ] = a * c; } else if ( euler.order === 'YZX' ) { const ac = a * c, ad = a * d, bc = b * c, bd = b * d; te[ 0 ] = c * e; te[ 4 ] = bd - ac * f; te[ 8 ] = bc * f + ad; te[ 1 ] = f; te[ 5 ] = a * e; te[ 9 ] = - b * e; te[ 2 ] = - d * e; te[ 6 ] = ad * f + bc; te[ 10 ] = ac - bd * f; } else if ( euler.order === 'XZY' ) { const ac = a * c, ad = a * d, bc = b * c, bd = b * d; te[ 0 ] = c * e; te[ 4 ] = - f; te[ 8 ] = d * e; te[ 1 ] = ac * f + bd; te[ 5 ] = a * e; te[ 9 ] = ad * f - bc; te[ 2 ] = bc * f - ad; te[ 6 ] = b * e; te[ 10 ] = bd * f + ac; } // bottom row te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; // last column te[ 12 ] = 0; te[ 13 ] = 0; te[ 14 ] = 0; te[ 15 ] = 1; return this; } makeRotationFromQuaternion( q ) { return this.compose( _zero, q, _one ); } lookAt( eye, target, up ) { const te = this.elements; _z.subVectors( eye, target ); if ( _z.lengthSq() === 0 ) { // eye and target are in the same position _z.z = 1; } _z.normalize(); _x.crossVectors( up, _z ); if ( _x.lengthSq() === 0 ) { // up and z are parallel if ( Math.abs( up.z ) === 1 ) { _z.x += 0.0001; } else { _z.z += 0.0001; } _z.normalize(); _x.crossVectors( up, _z ); } _x.normalize(); _y.crossVectors( _z, _x ); te[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x; te[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y; te[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z; return this; } multiply( m, n ) { if ( n !== undefined ) { console.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' ); return this.multiplyMatrices( m, n ); } return this.multiplyMatrices( this, m ); } premultiply( m ) { return this.multiplyMatrices( m, this ); } multiplyMatrices( a, b ) { const ae = a.elements; const be = b.elements; const te = this.elements; const a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ]; const a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ]; const a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ]; const a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ]; const b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ]; const b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ]; const b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ]; const b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ]; te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41; te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42; te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43; te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44; te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41; te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42; te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43; te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44; te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41; te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42; te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43; te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44; te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41; te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42; te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43; te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44; return this; } multiplyScalar( s ) { const te = this.elements; te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s; te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s; te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s; te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s; return this; } determinant() { const te = this.elements; const n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ]; const n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ]; const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ]; const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ]; //TODO: make this more efficient //( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm ) return ( n41 * ( + n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34 ) + n42 * ( + n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31 ) + n43 * ( + n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31 ) + n44 * ( - n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31 ) ); } transpose() { const te = this.elements; let tmp; tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp; tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp; tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp; tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp; tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp; tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp; return this; } setPosition( x, y, z ) { const te = this.elements; if ( x.isVector3 ) { te[ 12 ] = x.x; te[ 13 ] = x.y; te[ 14 ] = x.z; } else { te[ 12 ] = x; te[ 13 ] = y; te[ 14 ] = z; } return this; } invert() { // based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm const te = this.elements, n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ], n12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ], n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ], n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ], t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44, t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44, t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44, t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ); const detInv = 1 / det; te[ 0 ] = t11 * detInv; te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv; te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv; te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv; te[ 4 ] = t12 * detInv; te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv; te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv; te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv; te[ 8 ] = t13 * detInv; te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv; te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv; te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv; te[ 12 ] = t14 * detInv; te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv; te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv; te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv; return this; } scale( v ) { const te = this.elements; const x = v.x, y = v.y, z = v.z; te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z; te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z; te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z; te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z; return this; } getMaxScaleOnAxis() { const te = this.elements; const scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ]; const scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ]; const scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ]; return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) ); } makeTranslation( x, y, z ) { this.set( 1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1 ); return this; } makeRotationX( theta ) { const c = Math.cos( theta ), s = Math.sin( theta ); this.set( 1, 0, 0, 0, 0, c, - s, 0, 0, s, c, 0, 0, 0, 0, 1 ); return this; } makeRotationY( theta ) { const c = Math.cos( theta ), s = Math.sin( theta ); this.set( c, 0, s, 0, 0, 1, 0, 0, - s, 0, c, 0, 0, 0, 0, 1 ); return this; } makeRotationZ( theta ) { const c = Math.cos( theta ), s = Math.sin( theta ); this.set( c, - s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); return this; } makeRotationAxis( axis, angle ) { // Based on http://www.gamedev.net/reference/articles/article1199.asp const c = Math.cos( angle ); const s = Math.sin( angle ); const t = 1 - c; const x = axis.x, y = axis.y, z = axis.z; const tx = t * x, ty = t * y; this.set( tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1 ); return this; } makeScale( x, y, z ) { this.set( x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 ); return this; } makeShear( x, y, z ) { this.set( 1, y, z, 0, x, 1, z, 0, x, y, 1, 0, 0, 0, 0, 1 ); return this; } compose( position, quaternion, scale ) { const te = this.elements; const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w; const x2 = x + x, y2 = y + y, z2 = z + z; const xx = x * x2, xy = x * y2, xz = x * z2; const yy = y * y2, yz = y * z2, zz = z * z2; const wx = w * x2, wy = w * y2, wz = w * z2; const sx = scale.x, sy = scale.y, sz = scale.z; te[ 0 ] = ( 1 - ( yy + zz ) ) * sx; te[ 1 ] = ( xy + wz ) * sx; te[ 2 ] = ( xz - wy ) * sx; te[ 3 ] = 0; te[ 4 ] = ( xy - wz ) * sy; te[ 5 ] = ( 1 - ( xx + zz ) ) * sy; te[ 6 ] = ( yz + wx ) * sy; te[ 7 ] = 0; te[ 8 ] = ( xz + wy ) * sz; te[ 9 ] = ( yz - wx ) * sz; te[ 10 ] = ( 1 - ( xx + yy ) ) * sz; te[ 11 ] = 0; te[ 12 ] = position.x; te[ 13 ] = position.y; te[ 14 ] = position.z; te[ 15 ] = 1; return this; } decompose( position, quaternion, scale ) { const te = this.elements; let sx = _v1$1.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length(); const sy = _v1$1.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length(); const sz = _v1$1.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length(); // if determine is negative, we need to invert one scale const det = this.determinant(); if ( det < 0 ) sx = - sx; position.x = te[ 12 ]; position.y = te[ 13 ]; position.z = te[ 14 ]; // scale the rotation part _m1.copy( this ); const invSX = 1 / sx; const invSY = 1 / sy; const invSZ = 1 / sz; _m1.elements[ 0 ] *= invSX; _m1.elements[ 1 ] *= invSX; _m1.elements[ 2 ] *= invSX; _m1.elements[ 4 ] *= invSY; _m1.elements[ 5 ] *= invSY; _m1.elements[ 6 ] *= invSY; _m1.elements[ 8 ] *= invSZ; _m1.elements[ 9 ] *= invSZ; _m1.elements[ 10 ] *= invSZ; quaternion.setFromRotationMatrix( _m1 ); scale.x = sx; scale.y = sy; scale.z = sz; return this; } makePerspective( left, right, top, bottom, near, far ) { if ( far === undefined ) { console.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' ); } const te = this.elements; const x = 2 * near / ( right - left ); const y = 2 * near / ( top - bottom ); const a = ( right + left ) / ( right - left ); const b = ( top + bottom ) / ( top - bottom ); const c = - ( far + near ) / ( far - near ); const d = - 2 * far * near / ( far - near ); te[ 0 ] = x; te[ 4 ] = 0; te[ 8 ] = a; te[ 12 ] = 0; te[ 1 ] = 0; te[ 5 ] = y; te[ 9 ] = b; te[ 13 ] = 0; te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = c; te[ 14 ] = d; te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = - 1; te[ 15 ] = 0; return this; } makeOrthographic( left, right, top, bottom, near, far ) { const te = this.elements; const w = 1.0 / ( right - left ); const h = 1.0 / ( top - bottom ); const p = 1.0 / ( far - near ); const x = ( right + left ) * w; const y = ( top + bottom ) * h; const z = ( far + near ) * p; te[ 0 ] = 2 * w; te[ 4 ] = 0; te[ 8 ] = 0; te[ 12 ] = - x; te[ 1 ] = 0; te[ 5 ] = 2 * h; te[ 9 ] = 0; te[ 13 ] = - y; te[ 2 ] = 0; te[ 6 ] = 0; te[ 10 ] = - 2 * p; te[ 14 ] = - z; te[ 3 ] = 0; te[ 7 ] = 0; te[ 11 ] = 0; te[ 15 ] = 1; return this; } equals( matrix ) { const te = this.elements; const me = matrix.elements; for ( let i = 0; i < 16; i ++ ) { if ( te[ i ] !== me[ i ] ) return false; } return true; } fromArray( array, offset = 0 ) { for ( let i = 0; i < 16; i ++ ) { this.elements[ i ] = array[ i + offset ]; } return this; } toArray( array = [], offset = 0 ) { const te = this.elements; array[ offset ] = te[ 0 ]; array[ offset + 1 ] = te[ 1 ]; array[ offset + 2 ] = te[ 2 ]; array[ offset + 3 ] = te[ 3 ]; array[ offset + 4 ] = te[ 4 ]; array[ offset + 5 ] = te[ 5 ]; array[ offset + 6 ] = te[ 6 ]; array[ offset + 7 ] = te[ 7 ]; array[ offset + 8 ] = te[ 8 ]; array[ offset + 9 ] = te[ 9 ]; array[ offset + 10 ] = te[ 10 ]; array[ offset + 11 ] = te[ 11 ]; array[ offset + 12 ] = te[ 12 ]; array[ offset + 13 ] = te[ 13 ]; array[ offset + 14 ] = te[ 14 ]; array[ offset + 15 ] = te[ 15 ]; return array; } } const _v1$1 = /*@__PURE__*/ new Vector3(); const _m1 = /*@__PURE__*/ new Matrix4(); const _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 ); const _one = /*@__PURE__*/ new Vector3( 1, 1, 1 ); const _x = /*@__PURE__*/ new Vector3(); const _y = /*@__PURE__*/ new Vector3(); const _z = /*@__PURE__*/ new Vector3(); class Euler { constructor( x = 0, y = 0, z = 0, order = Euler.DefaultOrder ) { Object.defineProperty( this, 'isEuler', { value: true } ); this._x = x; this._y = y; this._z = z; this._order = order; } get x() { return this._x; } set x( value ) { this._x = value; this._onChangeCallback(); } get y() { return this._y; } set y( value ) { this._y = value; this._onChangeCallback(); } get z() { return this._z; } set z( value ) { this._z = value; this._onChangeCallback(); } get order() { return this._order; } set order( value ) { this._order = value; this._onChangeCallback(); } set( x, y, z, order ) { this._x = x; this._y = y; this._z = z; this._order = order || this._order; this._onChangeCallback(); return this; } clone() { return new this.constructor( this._x, this._y, this._z, this._order ); } copy( euler ) { this._x = euler._x; this._y = euler._y; this._z = euler._z; this._order = euler._order; this._onChangeCallback(); return this; } setFromRotationMatrix( m, order, update ) { const clamp = MathUtils.clamp; // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) const te = m.elements; const m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ]; const m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ]; const m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ]; order = order || this._order; switch ( order ) { case 'XYZ': this._y = Math.asin( clamp( m13, - 1, 1 ) ); if ( Math.abs( m13 ) < 0.9999999 ) { this._x = Math.atan2( - m23, m33 ); this._z = Math.atan2( - m12, m11 ); } else { this._x = Math.atan2( m32, m22 ); this._z = 0; } break; case 'YXZ': this._x = Math.asin( - clamp( m23, - 1, 1 ) ); if ( Math.abs( m23 ) < 0.9999999 ) { this._y = Math.atan2( m13, m33 ); this._z = Math.atan2( m21, m22 ); } else { this._y = Math.atan2( - m31, m11 ); this._z = 0; } break; case 'ZXY': this._x = Math.asin( clamp( m32, - 1, 1 ) ); if ( Math.abs( m32 ) < 0.9999999 ) { this._y = Math.atan2( - m31, m33 ); this._z = Math.atan2( - m12, m22 ); } else { this._y = 0; this._z = Math.atan2( m21, m11 ); } break; case 'ZYX': this._y = Math.asin( - clamp( m31, - 1, 1 ) ); if ( Math.abs( m31 ) < 0.9999999 ) { this._x = Math.atan2( m32, m33 ); this._z = Math.atan2( m21, m11 ); } else { this._x = 0; this._z = Math.atan2( - m12, m22 ); } break; case 'YZX': this._z = Math.asin( clamp( m21, - 1, 1 ) ); if ( Math.abs( m21 ) < 0.9999999 ) { this._x = Math.atan2( - m23, m22 ); this._y = Math.atan2( - m31, m11 ); } else { this._x = 0; this._y = Math.atan2( m13, m33 ); } break; case 'XZY': this._z = Math.asin( - clamp( m12, - 1, 1 ) ); if ( Math.abs( m12 ) < 0.9999999 ) { this._x = Math.atan2( m32, m22 ); this._y = Math.atan2( m13, m11 ); } else { this._x = Math.atan2( - m23, m33 ); this._y = 0; } break; default: console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order ); } this._order = order; if ( update !== false ) this._onChangeCallback(); return this; } setFromQuaternion( q, order, update ) { _matrix.makeRotationFromQuaternion( q ); return this.setFromRotationMatrix( _matrix, order, update ); } setFromVector3( v, order ) { return this.set( v.x, v.y, v.z, order || this._order ); } reorder( newOrder ) { // WARNING: this discards revolution information -bhouston _quaternion$1.setFromEuler( this ); return this.setFromQuaternion( _quaternion$1, newOrder ); } equals( euler ) { return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order ); } fromArray( array ) { this._x = array[ 0 ]; this._y = array[ 1 ]; this._z = array[ 2 ]; if ( array[ 3 ] !== undefined ) this._order = array[ 3 ]; this._onChangeCallback(); return this; } toArray( array = [], offset = 0 ) { array[ offset ] = this._x; array[ offset + 1 ] = this._y; array[ offset + 2 ] = this._z; array[ offset + 3 ] = this._order; return array; } toVector3( optionalResult ) { if ( optionalResult ) { return optionalResult.set( this._x, this._y, this._z ); } else { return new Vector3( this._x, this._y, this._z ); } } _onChange( callback ) { this._onChangeCallback = callback; return this; } _onChangeCallback() {} } Euler.DefaultOrder = 'XYZ'; Euler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ]; const _matrix = /*@__PURE__*/ new Matrix4(); const _quaternion$1 = /*@__PURE__*/ new Quaternion(); class Layers { constructor() { this.mask = 1 | 0; } set( channel ) { this.mask = 1 << channel | 0; } enable( channel ) { this.mask |= 1 << channel | 0; } enableAll() { this.mask = 0xffffffff | 0; } toggle( channel ) { this.mask ^= 1 << channel | 0; } disable( channel ) { this.mask &= ~ ( 1 << channel | 0 ); } disableAll() { this.mask = 0; } test( layers ) { return ( this.mask & layers.mask ) !== 0; } } let _object3DId = 0; const _v1$2 = new Vector3(); const _q1 = new Quaternion(); const _m1$1 = new Matrix4(); const _target = new Vector3(); const _position = new Vector3(); const _scale = new Vector3(); const _quaternion$2 = new Quaternion(); const _xAxis = new Vector3( 1, 0, 0 ); const _yAxis = new Vector3( 0, 1, 0 ); const _zAxis = new Vector3( 0, 0, 1 ); const _addedEvent = { type: 'added' }; const _removedEvent = { type: 'removed' }; function Object3D() { Object.defineProperty( this, 'id', { value: _object3DId ++ } ); this.uuid = MathUtils.generateUUID(); this.name = ''; this.type = 'Object3D'; this.parent = null; this.children = []; this.up = Object3D.DefaultUp.clone(); const position = new Vector3(); const rotation = new Euler(); const quaternion = new Quaternion(); const scale = new Vector3( 1, 1, 1 ); function onRotationChange() { quaternion.setFromEuler( rotation, false ); } function onQuaternionChange() { rotation.setFromQuaternion( quaternion, undefined, false ); } rotation._onChange( onRotationChange ); quaternion._onChange( onQuaternionChange ); Object.defineProperties( this, { position: { configurable: true, enumerable: true, value: position }, rotation: { configurable: true, enumerable: true, value: rotation }, quaternion: { configurable: true, enumerable: true, value: quaternion }, scale: { configurable: true, enumerable: true, value: scale }, modelViewMatrix: { value: new Matrix4() }, normalMatrix: { value: new Matrix3() } } ); this.matrix = new Matrix4(); this.matrixWorld = new Matrix4(); this.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate; this.matrixWorldNeedsUpdate = false; this.layers = new Layers(); this.visible = true; this.castShadow = false; this.receiveShadow = false; this.frustumCulled = true; this.renderOrder = 0; this.animations = []; this.userData = {}; } Object3D.DefaultUp = new Vector3( 0, 1, 0 ); Object3D.DefaultMatrixAutoUpdate = true; Object3D.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { constructor: Object3D, isObject3D: true, onBeforeRender: function () {}, onAfterRender: function () {}, applyMatrix4: function ( matrix ) { if ( this.matrixAutoUpdate ) this.updateMatrix(); this.matrix.premultiply( matrix ); this.matrix.decompose( this.position, this.quaternion, this.scale ); }, applyQuaternion: function ( q ) { this.quaternion.premultiply( q ); return this; }, setRotationFromAxisAngle: function ( axis, angle ) { // assumes axis is normalized this.quaternion.setFromAxisAngle( axis, angle ); }, setRotationFromEuler: function ( euler ) { this.quaternion.setFromEuler( euler, true ); }, setRotationFromMatrix: function ( m ) { // assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled) this.quaternion.setFromRotationMatrix( m ); }, setRotationFromQuaternion: function ( q ) { // assumes q is normalized this.quaternion.copy( q ); }, rotateOnAxis: function ( axis, angle ) { // rotate object on axis in object space // axis is assumed to be normalized _q1.setFromAxisAngle( axis, angle ); this.quaternion.multiply( _q1 ); return this; }, rotateOnWorldAxis: function ( axis, angle ) { // rotate object on axis in world space // axis is assumed to be normalized // method assumes no rotated parent _q1.setFromAxisAngle( axis, angle ); this.quaternion.premultiply( _q1 ); return this; }, rotateX: function ( angle ) { return this.rotateOnAxis( _xAxis, angle ); }, rotateY: function ( angle ) { return this.rotateOnAxis( _yAxis, angle ); }, rotateZ: function ( angle ) { return this.rotateOnAxis( _zAxis, angle ); }, translateOnAxis: function ( axis, distance ) { // translate object by distance along axis in object space // axis is assumed to be normalized _v1$2.copy( axis ).applyQuaternion( this.quaternion ); this.position.add( _v1$2.multiplyScalar( distance ) ); return this; }, translateX: function ( distance ) { return this.translateOnAxis( _xAxis, distance ); }, translateY: function ( distance ) { return this.translateOnAxis( _yAxis, distance ); }, translateZ: function ( distance ) { return this.translateOnAxis( _zAxis, distance ); }, localToWorld: function ( vector ) { return vector.applyMatrix4( this.matrixWorld ); }, worldToLocal: function ( vector ) { return vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() ); }, lookAt: function ( x, y, z ) { // This method does not support objects having non-uniformly-scaled parent(s) if ( x.isVector3 ) { _target.copy( x ); } else { _target.set( x, y, z ); } const parent = this.parent; this.updateWorldMatrix( true, false ); _position.setFromMatrixPosition( this.matrixWorld ); if ( this.isCamera || this.isLight ) { _m1$1.lookAt( _position, _target, this.up ); } else { _m1$1.lookAt( _target, _position, this.up ); } this.quaternion.setFromRotationMatrix( _m1$1 ); if ( parent ) { _m1$1.extractRotation( parent.matrixWorld ); _q1.setFromRotationMatrix( _m1$1 ); this.quaternion.premultiply( _q1.invert() ); } }, add: function ( object ) { if ( arguments.length > 1 ) { for ( let i = 0; i < arguments.length; i ++ ) { this.add( arguments[ i ] ); } return this; } if ( object === this ) { console.error( 'THREE.Object3D.add: object can\'t be added as a child of itself.', object ); return this; } if ( object && object.isObject3D ) { if ( object.parent !== null ) { object.parent.remove( object ); } object.parent = this; this.children.push( object ); object.dispatchEvent( _addedEvent ); } else { console.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object ); } return this; }, remove: function ( object ) { if ( arguments.length > 1 ) { for ( let i = 0; i < arguments.length; i ++ ) { this.remove( arguments[ i ] ); } return this; } const index = this.children.indexOf( object ); if ( index !== - 1 ) { object.parent = null; this.children.splice( index, 1 ); object.dispatchEvent( _removedEvent ); } return this; }, clear: function () { for ( let i = 0; i < this.children.length; i ++ ) { const object = this.children[ i ]; object.parent = null; object.dispatchEvent( _removedEvent ); } this.children.length = 0; return this; }, attach: function ( object ) { // adds object as a child of this, while maintaining the object's world transform this.updateWorldMatrix( true, false ); _m1$1.copy( this.matrixWorld ).invert(); if ( object.parent !== null ) { object.parent.updateWorldMatrix( true, false ); _m1$1.multiply( object.parent.matrixWorld ); } object.applyMatrix4( _m1$1 ); object.updateWorldMatrix( false, false ); this.add( object ); return this; }, getObjectById: function ( id ) { return this.getObjectByProperty( 'id', id ); }, getObjectByName: function ( name ) { return this.getObjectByProperty( 'name', name ); }, getObjectByProperty: function ( name, value ) { if ( this[ name ] === value ) return this; for ( let i = 0, l = this.children.length; i < l; i ++ ) { const child = this.children[ i ]; const object = child.getObjectByProperty( name, value ); if ( object !== undefined ) { return object; } } return undefined; }, getWorldPosition: function ( target ) { if ( target === undefined ) { console.warn( 'THREE.Object3D: .getWorldPosition() target is now required' ); target = new Vector3(); } this.updateWorldMatrix( true, false ); return target.setFromMatrixPosition( this.matrixWorld ); }, getWorldQuaternion: function ( target ) { if ( target === undefined ) { console.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' ); target = new Quaternion(); } this.updateWorldMatrix( true, false ); this.matrixWorld.decompose( _position, target, _scale ); return target; }, getWorldScale: function ( target ) { if ( target === undefined ) { console.warn( 'THREE.Object3D: .getWorldScale() target is now required' ); target = new Vector3(); } this.updateWorldMatrix( true, false ); this.matrixWorld.decompose( _position, _quaternion$2, target ); return target; }, getWorldDirection: function ( target ) { if ( target === undefined ) { console.warn( 'THREE.Object3D: .getWorldDirection() target is now required' ); target = new Vector3(); } this.updateWorldMatrix( true, false ); const e = this.matrixWorld.elements; return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize(); }, raycast: function () {}, traverse: function ( callback ) { callback( this ); const children = this.children; for ( let i = 0, l = children.length; i < l; i ++ ) { children[ i ].traverse( callback ); } }, traverseVisible: function ( callback ) { if ( this.visible === false ) return; callback( this ); const children = this.children; for ( let i = 0, l = children.length; i < l; i ++ ) { children[ i ].traverseVisible( callback ); } }, traverseAncestors: function ( callback ) { const parent = this.parent; if ( parent !== null ) { callback( parent ); parent.traverseAncestors( callback ); } }, updateMatrix: function () { this.matrix.compose( this.position, this.quaternion, this.scale ); this.matrixWorldNeedsUpdate = true; }, updateMatrixWorld: function ( force ) { if ( this.matrixAutoUpdate ) this.updateMatrix(); if ( this.matrixWorldNeedsUpdate || force ) { if ( this.parent === null ) { this.matrixWorld.copy( this.matrix ); } else { this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); } this.matrixWorldNeedsUpdate = false; force = true; } // update children const children = this.children; for ( let i = 0, l = children.length; i < l; i ++ ) { children[ i ].updateMatrixWorld( force ); } }, updateWorldMatrix: function ( updateParents, updateChildren ) { const parent = this.parent; if ( updateParents === true && parent !== null ) { parent.updateWorldMatrix( true, false ); } if ( this.matrixAutoUpdate ) this.updateMatrix(); if ( this.parent === null ) { this.matrixWorld.copy( this.matrix ); } else { this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix ); } // update children if ( updateChildren === true ) { const children = this.children; for ( let i = 0, l = children.length; i < l; i ++ ) { children[ i ].updateWorldMatrix( false, true ); } } }, toJSON: function ( meta ) { // meta is a string when called from JSON.stringify const isRootObject = ( meta === undefined || typeof meta === 'string' ); const output = {}; // meta is a hash used to collect geometries, materials. // not providing it implies that this is the root object // being serialized. if ( isRootObject ) { // initialize meta obj meta = { geometries: {}, materials: {}, textures: {}, images: {}, shapes: {}, skeletons: {}, animations: {} }; output.metadata = { version: 4.5, type: 'Object', generator: 'Object3D.toJSON' }; } // standard Object3D serialization const object = {}; object.uuid = this.uuid; object.type = this.type; if ( this.name !== '' ) object.name = this.name; if ( this.castShadow === true ) object.castShadow = true; if ( this.receiveShadow === true ) object.receiveShadow = true; if ( this.visible === false ) object.visible = false; if ( this.frustumCulled === false ) object.frustumCulled = false; if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder; if ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData; object.layers = this.layers.mask; object.matrix = this.matrix.toArray(); if ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false; // object specific properties if ( this.isInstancedMesh ) { object.type = 'InstancedMesh'; object.count = this.count; object.instanceMatrix = this.instanceMatrix.toJSON(); } // function serialize( library, element ) { if ( library[ element.uuid ] === undefined ) { library[ element.uuid ] = element.toJSON( meta ); } return element.uuid; } if ( this.isMesh || this.isLine || this.isPoints ) { object.geometry = serialize( meta.geometries, this.geometry ); const parameters = this.geometry.parameters; if ( parameters !== undefined && parameters.shapes !== undefined ) { const shapes = parameters.shapes; if ( Array.isArray( shapes ) ) { for ( let i = 0, l = shapes.length; i < l; i ++ ) { const shape = shapes[ i ]; serialize( meta.shapes, shape ); } } else { serialize( meta.shapes, shapes ); } } } if ( this.isSkinnedMesh ) { object.bindMode = this.bindMode; object.bindMatrix = this.bindMatrix.toArray(); if ( this.skeleton !== undefined ) { serialize( meta.skeletons, this.skeleton ); object.skeleton = this.skeleton.uuid; } } if ( this.material !== undefined ) { if ( Array.isArray( this.material ) ) { const uuids = []; for ( let i = 0, l = this.material.length; i < l; i ++ ) { uuids.push( serialize( meta.materials, this.material[ i ] ) ); } object.material = uuids; } else { object.material = serialize( meta.materials, this.material ); } } // if ( this.children.length > 0 ) { object.children = []; for ( let i = 0; i < this.children.length; i ++ ) { object.children.push( this.children[ i ].toJSON( meta ).object ); } } // if ( this.animations.length > 0 ) { object.animations = []; for ( let i = 0; i < this.animations.length; i ++ ) { const animation = this.animations[ i ]; object.animations.push( serialize( meta.animations, animation ) ); } } if ( isRootObject ) { const geometries = extractFromCache( meta.geometries ); const materials = extractFromCache( meta.materials ); const textures = extractFromCache( meta.textures ); const images = extractFromCache( meta.images ); const shapes = extractFromCache( meta.shapes ); const skeletons = extractFromCache( meta.skeletons ); const animations = extractFromCache( meta.animations ); if ( geometries.length > 0 ) output.geometries = geometries; if ( materials.length > 0 ) output.materials = materials; if ( textures.length > 0 ) output.textures = textures; if ( images.length > 0 ) output.images = images; if ( shapes.length > 0 ) output.shapes = shapes; if ( skeletons.length > 0 ) output.skeletons = skeletons; if ( animations.length > 0 ) output.animations = animations; } output.object = object; return output; // extract data from the cache hash // remove metadata on each item // and return as array function extractFromCache( cache ) { const values = []; for ( const key in cache ) { const data = cache[ key ]; delete data.metadata; values.push( data ); } return values; } }, clone: function ( recursive ) { return new this.constructor().copy( this, recursive ); }, copy: function ( source, recursive = true ) { this.name = source.name; this.up.copy( source.up ); this.position.copy( source.position ); this.rotation.order = source.rotation.order; this.quaternion.copy( source.quaternion ); this.scale.copy( source.scale ); this.matrix.copy( source.matrix ); this.matrixWorld.copy( source.matrixWorld ); this.matrixAutoUpdate = source.matrixAutoUpdate; this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate; this.layers.mask = source.layers.mask; this.visible = source.visible; this.castShadow = source.castShadow; this.receiveShadow = source.receiveShadow; this.frustumCulled = source.frustumCulled; this.renderOrder = source.renderOrder; this.userData = JSON.parse( JSON.stringify( source.userData ) ); if ( recursive === true ) { for ( let i = 0; i < source.children.length; i ++ ) { const child = source.children[ i ]; this.add( child.clone() ); } } return this; } } ); const _vector1 = /*@__PURE__*/ new Vector3(); const _vector2 = /*@__PURE__*/ new Vector3(); const _normalMatrix = /*@__PURE__*/ new Matrix3(); class Plane { constructor( normal, constant ) { Object.defineProperty( this, 'isPlane', { value: true } ); // normal is assumed to be normalized this.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 ); this.constant = ( constant !== undefined ) ? constant : 0; } set( normal, constant ) { this.normal.copy( normal ); this.constant = constant; return this; } setComponents( x, y, z, w ) { this.normal.set( x, y, z ); this.constant = w; return this; } setFromNormalAndCoplanarPoint( normal, point ) { this.normal.copy( normal ); this.constant = - point.dot( this.normal ); return this; } setFromCoplanarPoints( a, b, c ) { const normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize(); // Q: should an error be thrown if normal is zero (e.g. degenerate plane)? this.setFromNormalAndCoplanarPoint( normal, a ); return this; } clone() { return new this.constructor().copy( this ); } copy( plane ) { this.normal.copy( plane.normal ); this.constant = plane.constant; return this; } normalize() { // Note: will lead to a divide by zero if the plane is invalid. const inverseNormalLength = 1.0 / this.normal.length(); this.normal.multiplyScalar( inverseNormalLength ); this.constant *= inverseNormalLength; return this; } negate() { this.constant *= - 1; this.normal.negate(); return this; } distanceToPoint( point ) { return this.normal.dot( point ) + this.constant; } distanceToSphere( sphere ) { return this.distanceToPoint( sphere.center ) - sphere.radius; } projectPoint( point, target ) { if ( target === undefined ) { console.warn( 'THREE.Plane: .projectPoint() target is now required' ); target = new Vector3(); } return target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point ); } intersectLine( line, target ) { if ( target === undefined ) { console.warn( 'THREE.Plane: .intersectLine() target is now required' ); target = new Vector3(); } const direction = line.delta( _vector1 ); const denominator = this.normal.dot( direction ); if ( denominator === 0 ) { // line is coplanar, return origin if ( this.distanceToPoint( line.start ) === 0 ) { return target.copy( line.start ); } // Unsure if this is the correct method to handle this case. return undefined; } const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator; if ( t < 0 || t > 1 ) { return undefined; } return target.copy( direction ).multiplyScalar( t ).add( line.start ); } intersectsLine( line ) { // Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it. const startSign = this.distanceToPoint( line.start ); const endSign = this.distanceToPoint( line.end ); return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 ); } intersectsBox( box ) { return box.intersectsPlane( this ); } intersectsSphere( sphere ) { return sphere.intersectsPlane( this ); } coplanarPoint( target ) { if ( target === undefined ) { console.warn( 'THREE.Plane: .coplanarPoint() target is now required' ); target = new Vector3(); } return target.copy( this.normal ).multiplyScalar( - this.constant ); } applyMatrix4( matrix, optionalNormalMatrix ) { const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix ); const referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix ); const normal = this.normal.applyMatrix3( normalMatrix ).normalize(); this.constant = - referencePoint.dot( normal ); return this; } translate( offset ) { this.constant -= offset.dot( this.normal ); return this; } equals( plane ) { return plane.normal.equals( this.normal ) && ( plane.constant === this.constant ); } } const _v0$1 = /*@__PURE__*/ new Vector3(); const _v1$3 = /*@__PURE__*/ new Vector3(); const _v2$1 = /*@__PURE__*/ new Vector3(); const _v3 = /*@__PURE__*/ new Vector3(); const _vab = /*@__PURE__*/ new Vector3(); const _vac = /*@__PURE__*/ new Vector3(); const _vbc = /*@__PURE__*/ new Vector3(); const _vap = /*@__PURE__*/ new Vector3(); const _vbp = /*@__PURE__*/ new Vector3(); const _vcp = /*@__PURE__*/ new Vector3(); class Triangle { constructor( a, b, c ) { this.a = ( a !== undefined ) ? a : new Vector3(); this.b = ( b !== undefined ) ? b : new Vector3(); this.c = ( c !== undefined ) ? c : new Vector3(); } static getNormal( a, b, c, target ) { if ( target === undefined ) { console.warn( 'THREE.Triangle: .getNormal() target is now required' ); target = new Vector3(); } target.subVectors( c, b ); _v0$1.subVectors( a, b ); target.cross( _v0$1 ); const targetLengthSq = target.lengthSq(); if ( targetLengthSq > 0 ) { return target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) ); } return target.set( 0, 0, 0 ); } // static/instance method to calculate barycentric coordinates // based on: http://www.blackpawn.com/texts/pointinpoly/default.html static getBarycoord( point, a, b, c, target ) { _v0$1.subVectors( c, a ); _v1$3.subVectors( b, a ); _v2$1.subVectors( point, a ); const dot00 = _v0$1.dot( _v0$1 ); const dot01 = _v0$1.dot( _v1$3 ); const dot02 = _v0$1.dot( _v2$1 ); const dot11 = _v1$3.dot( _v1$3 ); const dot12 = _v1$3.dot( _v2$1 ); const denom = ( dot00 * dot11 - dot01 * dot01 ); if ( target === undefined ) { console.warn( 'THREE.Triangle: .getBarycoord() target is now required' ); target = new Vector3(); } // collinear or singular triangle if ( denom === 0 ) { // arbitrary location outside of triangle? // not sure if this is the best idea, maybe should be returning undefined return target.set( - 2, - 1, - 1 ); } const invDenom = 1 / denom; const u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom; const v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom; // barycentric coordinates must always sum to 1 return target.set( 1 - u - v, v, u ); } static containsPoint( point, a, b, c ) { this.getBarycoord( point, a, b, c, _v3 ); return ( _v3.x >= 0 ) && ( _v3.y >= 0 ) && ( ( _v3.x + _v3.y ) <= 1 ); } static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { this.getBarycoord( point, p1, p2, p3, _v3 ); target.set( 0, 0 ); target.addScaledVector( uv1, _v3.x ); target.addScaledVector( uv2, _v3.y ); target.addScaledVector( uv3, _v3.z ); return target; } static isFrontFacing( a, b, c, direction ) { _v0$1.subVectors( c, b ); _v1$3.subVectors( a, b ); // strictly front facing return ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false; } set( a, b, c ) { this.a.copy( a ); this.b.copy( b ); this.c.copy( c ); return this; } setFromPointsAndIndices( points, i0, i1, i2 ) { this.a.copy( points[ i0 ] ); this.b.copy( points[ i1 ] ); this.c.copy( points[ i2 ] ); return this; } clone() { return new this.constructor().copy( this ); } copy( triangle ) { this.a.copy( triangle.a ); this.b.copy( triangle.b ); this.c.copy( triangle.c ); return this; } getArea() { _v0$1.subVectors( this.c, this.b ); _v1$3.subVectors( this.a, this.b ); return _v0$1.cross( _v1$3 ).length() * 0.5; } getMidpoint( target ) { if ( target === undefined ) { console.warn( 'THREE.Triangle: .getMidpoint() target is now required' ); target = new Vector3(); } return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 ); } getNormal( target ) { return Triangle.getNormal( this.a, this.b, this.c, target ); } getPlane( target ) { if ( target === undefined ) { console.warn( 'THREE.Triangle: .getPlane() target is now required' ); target = new Plane(); } return target.setFromCoplanarPoints( this.a, this.b, this.c ); } getBarycoord( point, target ) { return Triangle.getBarycoord( point, this.a, this.b, this.c, target ); } getUV( point, uv1, uv2, uv3, target ) { return Triangle.getUV( point, this.a, this.b, this.c, uv1, uv2, uv3, target ); } containsPoint( point ) { return Triangle.containsPoint( point, this.a, this.b, this.c ); } isFrontFacing( direction ) { return Triangle.isFrontFacing( this.a, this.b, this.c, direction ); } intersectsBox( box ) { return box.intersectsTriangle( this ); } closestPointToPoint( p, target ) { if ( target === undefined ) { console.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' ); target = new Vector3(); } const a = this.a, b = this.b, c = this.c; let v, w; // algorithm thanks to Real-Time Collision Detection by Christer Ericson, // published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc., // under the accompanying license; see chapter 5.1.5 for detailed explanation. // basically, we're distinguishing which of the voronoi regions of the triangle // the point lies in with the minimum amount of redundant computation. _vab.subVectors( b, a ); _vac.subVectors( c, a ); _vap.subVectors( p, a ); const d1 = _vab.dot( _vap ); const d2 = _vac.dot( _vap ); if ( d1 <= 0 && d2 <= 0 ) { // vertex region of A; barycentric coords (1, 0, 0) return target.copy( a ); } _vbp.subVectors( p, b ); const d3 = _vab.dot( _vbp ); const d4 = _vac.dot( _vbp ); if ( d3 >= 0 && d4 <= d3 ) { // vertex region of B; barycentric coords (0, 1, 0) return target.copy( b ); } const vc = d1 * d4 - d3 * d2; if ( vc <= 0 && d1 >= 0 && d3 <= 0 ) { v = d1 / ( d1 - d3 ); // edge region of AB; barycentric coords (1-v, v, 0) return target.copy( a ).addScaledVector( _vab, v ); } _vcp.subVectors( p, c ); const d5 = _vab.dot( _vcp ); const d6 = _vac.dot( _vcp ); if ( d6 >= 0 && d5 <= d6 ) { // vertex region of C; barycentric coords (0, 0, 1) return target.copy( c ); } const vb = d5 * d2 - d1 * d6; if ( vb <= 0 && d2 >= 0 && d6 <= 0 ) { w = d2 / ( d2 - d6 ); // edge region of AC; barycentric coords (1-w, 0, w) return target.copy( a ).addScaledVector( _vac, w ); } const va = d3 * d6 - d5 * d4; if ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) { _vbc.subVectors( c, b ); w = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) ); // edge region of BC; barycentric coords (0, 1-w, w) return target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC } // face region const denom = 1 / ( va + vb + vc ); // u = va * denom v = vb * denom; w = vc * denom; return target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w ); } equals( triangle ) { return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c ); } } const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF, 'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2, 'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50, 'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B, 'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B, 'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F, 'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3, 'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222, 'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700, 'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4, 'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00, 'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3, 'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA, 'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32, 'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3, 'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC, 'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD, 'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6, 'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9, 'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F, 'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE, 'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA, 'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0, 'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 }; const _hslA = { h: 0, s: 0, l: 0 }; const _hslB = { h: 0, s: 0, l: 0 }; function hue2rgb( p, q, t ) { if ( t < 0 ) t += 1; if ( t > 1 ) t -= 1; if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t; if ( t < 1 / 2 ) return q; if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t ); return p; } function SRGBToLinear( c ) { return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 ); } function LinearToSRGB( c ) { return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055; } class Color { constructor( r, g, b ) { Object.defineProperty( this, 'isColor', { value: true } ); if ( g === undefined && b === undefined ) { // r is THREE.Color, hex or string return this.set( r ); } return this.setRGB( r, g, b ); } set( value ) { if ( value && value.isColor ) { this.copy( value ); } else if ( typeof value === 'number' ) { this.setHex( value ); } else if ( typeof value === 'string' ) { this.setStyle( value ); } return this; } setScalar( scalar ) { this.r = scalar; this.g = scalar; this.b = scalar; return this; } setHex( hex ) { hex = Math.floor( hex ); this.r = ( hex >> 16 & 255 ) / 255; this.g = ( hex >> 8 & 255 ) / 255; this.b = ( hex & 255 ) / 255; return this; } setRGB( r, g, b ) { this.r = r; this.g = g; this.b = b; return this; } setHSL( h, s, l ) { // h,s,l ranges are in 0.0 - 1.0 h = MathUtils.euclideanModulo( h, 1 ); s = MathUtils.clamp( s, 0, 1 ); l = MathUtils.clamp( l, 0, 1 ); if ( s === 0 ) { this.r = this.g = this.b = l; } else { const p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s ); const q = ( 2 * l ) - p; this.r = hue2rgb( q, p, h + 1 / 3 ); this.g = hue2rgb( q, p, h ); this.b = hue2rgb( q, p, h - 1 / 3 ); } return this; } setStyle( style ) { function handleAlpha( string ) { if ( string === undefined ) return; if ( parseFloat( string ) < 1 ) { console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' ); } } let m; if ( m = /^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec( style ) ) { // rgb / hsl let color; const name = m[ 1 ]; const components = m[ 2 ]; switch ( name ) { case 'rgb': case 'rgba': if ( color = /^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { // rgb(255,0,0) rgba(255,0,0,0.5) this.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255; this.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255; this.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255; handleAlpha( color[ 4 ] ); return this; } if ( color = /^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { // rgb(100%,0%,0%) rgba(100%,0%,0%,0.5) this.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100; this.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100; this.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100; handleAlpha( color[ 4 ] ); return this; } break; case 'hsl': case 'hsla': if ( color = /^(\d*\.?\d+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) { // hsl(120,50%,50%) hsla(120,50%,50%,0.5) const h = parseFloat( color[ 1 ] ) / 360; const s = parseInt( color[ 2 ], 10 ) / 100; const l = parseInt( color[ 3 ], 10 ) / 100; handleAlpha( color[ 4 ] ); return this.setHSL( h, s, l ); } break; } } else if ( m = /^\#([A-Fa-f\d]+)$/.exec( style ) ) { // hex color const hex = m[ 1 ]; const size = hex.length; if ( size === 3 ) { // #ff0 this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255; this.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255; this.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255; return this; } else if ( size === 6 ) { // #ff0000 this.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255; this.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255; this.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255; return this; } } if ( style && style.length > 0 ) { return this.setColorName( style ); } return this; } setColorName( style ) { // color keywords const hex = _colorKeywords[ style ]; if ( hex !== undefined ) { // red this.setHex( hex ); } else { // unknown color console.warn( 'THREE.Color: Unknown color ' + style ); } return this; } clone() { return new this.constructor( this.r, this.g, this.b ); } copy( color ) { this.r = color.r; this.g = color.g; this.b = color.b; return this; } copyGammaToLinear( color, gammaFactor = 2.0 ) { this.r = Math.pow( color.r, gammaFactor ); this.g = Math.pow( color.g, gammaFactor ); this.b = Math.pow( color.b, gammaFactor ); return this; } copyLinearToGamma( color, gammaFactor = 2.0 ) { const safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0; this.r = Math.pow( color.r, safeInverse ); this.g = Math.pow( color.g, safeInverse ); this.b = Math.pow( color.b, safeInverse ); return this; } convertGammaToLinear( gammaFactor ) { this.copyGammaToLinear( this, gammaFactor ); return this; } convertLinearToGamma( gammaFactor ) { this.copyLinearToGamma( this, gammaFactor ); return this; } copySRGBToLinear( color ) { this.r = SRGBToLinear( color.r ); this.g = SRGBToLinear( color.g ); this.b = SRGBToLinear( color.b ); return this; } copyLinearToSRGB( color ) { this.r = LinearToSRGB( color.r ); this.g = LinearToSRGB( color.g ); this.b = LinearToSRGB( color.b ); return this; } convertSRGBToLinear() { this.copySRGBToLinear( this ); return this; } convertLinearToSRGB() { this.copyLinearToSRGB( this ); return this; } getHex() { return ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0; } getHexString() { return ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 ); } getHSL( target ) { // h,s,l ranges are in 0.0 - 1.0 if ( target === undefined ) { console.warn( 'THREE.Color: .getHSL() target is now required' ); target = { h: 0, s: 0, l: 0 }; } const r = this.r, g = this.g, b = this.b; const max = Math.max( r, g, b ); const min = Math.min( r, g, b ); let hue, saturation; const lightness = ( min + max ) / 2.0; if ( min === max ) { hue = 0; saturation = 0; } else { const delta = max - min; saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min ); switch ( max ) { case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break; case g: hue = ( b - r ) / delta + 2; break; case b: hue = ( r - g ) / delta + 4; break; } hue /= 6; } target.h = hue; target.s = saturation; target.l = lightness; return target; } getStyle() { return 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')'; } offsetHSL( h, s, l ) { this.getHSL( _hslA ); _hslA.h += h; _hslA.s += s; _hslA.l += l; this.setHSL( _hslA.h, _hslA.s, _hslA.l ); return this; } add( color ) { this.r += color.r; this.g += color.g; this.b += color.b; return this; } addColors( color1, color2 ) { this.r = color1.r + color2.r; this.g = color1.g + color2.g; this.b = color1.b + color2.b; return this; } addScalar( s ) { this.r += s; this.g += s; this.b += s; return this; } sub( color ) { this.r = Math.max( 0, this.r - color.r ); this.g = Math.max( 0, this.g - color.g ); this.b = Math.max( 0, this.b - color.b ); return this; } multiply( color ) { this.r *= color.r; this.g *= color.g; this.b *= color.b; return this; } multiplyScalar( s ) { this.r *= s; this.g *= s; this.b *= s; return this; } lerp( color, alpha ) { this.r += ( color.r - this.r ) * alpha; this.g += ( color.g - this.g ) * alpha; this.b += ( color.b - this.b ) * alpha; return this; } lerpHSL( color, alpha ) { this.getHSL( _hslA ); color.getHSL( _hslB ); const h = MathUtils.lerp( _hslA.h, _hslB.h, alpha ); const s = MathUtils.lerp( _hslA.s, _hslB.s, alpha ); const l = MathUtils.lerp( _hslA.l, _hslB.l, alpha ); this.setHSL( h, s, l ); return this; } equals( c ) { return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b ); } fromArray( array, offset = 0 ) { this.r = array[ offset ]; this.g = array[ offset + 1 ]; this.b = array[ offset + 2 ]; return this; } toArray( array = [], offset = 0 ) { array[ offset ] = this.r; array[ offset + 1 ] = this.g; array[ offset + 2 ] = this.b; return array; } fromBufferAttribute( attribute, index ) { this.r = attribute.getX( index ); this.g = attribute.getY( index ); this.b = attribute.getZ( index ); if ( attribute.normalized === true ) { // assuming Uint8Array this.r /= 255; this.g /= 255; this.b /= 255; } return this; } toJSON() { return this.getHex(); } } Color.NAMES = _colorKeywords; Color.prototype.r = 1; Color.prototype.g = 1; Color.prototype.b = 1; class Face3 { constructor( a, b, c, normal, color, materialIndex = 0 ) { this.a = a; this.b = b; this.c = c; this.normal = ( normal && normal.isVector3 ) ? normal : new Vector3(); this.vertexNormals = Array.isArray( normal ) ? normal : []; this.color = ( color && color.isColor ) ? color : new Color(); this.vertexColors = Array.isArray( color ) ? color : []; this.materialIndex = materialIndex; } clone() { return new this.constructor().copy( this ); } copy( source ) { this.a = source.a; this.b = source.b; this.c = source.c; this.normal.copy( source.normal ); this.color.copy( source.color ); this.materialIndex = source.materialIndex; for ( let i = 0, il = source.vertexNormals.length; i < il; i ++ ) { this.vertexNormals[ i ] = source.vertexNormals[ i ].clone(); } for ( let i = 0, il = source.vertexColors.length; i < il; i ++ ) { this.vertexColors[ i ] = source.vertexColors[ i ].clone(); } return this; } } let materialId = 0; function Material() { Object.defineProperty( this, 'id', { value: materialId ++ } ); this.uuid = MathUtils.generateUUID(); this.name = ''; this.type = 'Material'; this.fog = true; this.blending = NormalBlending; this.side = FrontSide; this.flatShading = false; this.vertexColors = false; this.opacity = 1; this.transparent = false; this.blendSrc = SrcAlphaFactor; this.blendDst = OneMinusSrcAlphaFactor; this.blendEquation = AddEquation; this.blendSrcAlpha = null; this.blendDstAlpha = null; this.blendEquationAlpha = null; this.depthFunc = LessEqualDepth; this.depthTest = true; this.depthWrite = true; this.stencilWriteMask = 0xff; this.stencilFunc = AlwaysStencilFunc; this.stencilRef = 0; this.stencilFuncMask = 0xff; this.stencilFail = KeepStencilOp; this.stencilZFail = KeepStencilOp; this.stencilZPass = KeepStencilOp; this.stencilWrite = false; this.clippingPlanes = null; this.clipIntersection = false; this.clipShadows = false; this.shadowSide = null; this.colorWrite = true; this.precision = null; // override the renderer's default precision for this material this.polygonOffset = false; this.polygonOffsetFactor = 0; this.polygonOffsetUnits = 0; this.dithering = false; this.alphaTest = 0; this.premultipliedAlpha = false; this.visible = true; this.toneMapped = true; this.userData = {}; this.version = 0; } Material.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { constructor: Material, isMaterial: true, onBeforeCompile: function ( /* shaderobject, renderer */ ) {}, customProgramCacheKey: function () { return this.onBeforeCompile.toString(); }, setValues: function ( values ) { if ( values === undefined ) return; for ( const key in values ) { const newValue = values[ key ]; if ( newValue === undefined ) { console.warn( 'THREE.Material: \'' + key + '\' parameter is undefined.' ); continue; } // for backward compatability if shading is set in the constructor if ( key === 'shading' ) { console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); this.flatShading = ( newValue === FlatShading ) ? true : false; continue; } const currentValue = this[ key ]; if ( currentValue === undefined ) { console.warn( 'THREE.' + this.type + ': \'' + key + '\' is not a property of this material.' ); continue; } if ( currentValue && currentValue.isColor ) { currentValue.set( newValue ); } else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) { currentValue.copy( newValue ); } else { this[ key ] = newValue; } } }, toJSON: function ( meta ) { const isRoot = ( meta === undefined || typeof meta === 'string' ); if ( isRoot ) { meta = { textures: {}, images: {} }; } const data = { metadata: { version: 4.5, type: 'Material', generator: 'Material.toJSON' } }; // standard Material serialization data.uuid = this.uuid; data.type = this.type; if ( this.name !== '' ) data.name = this.name; if ( this.color && this.color.isColor ) data.color = this.color.getHex(); if ( this.roughness !== undefined ) data.roughness = this.roughness; if ( this.metalness !== undefined ) data.metalness = this.metalness; if ( this.sheen && this.sheen.isColor ) data.sheen = this.sheen.getHex(); if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex(); if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity; if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex(); if ( this.shininess !== undefined ) data.shininess = this.shininess; if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat; if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness; if ( this.clearcoatMap && this.clearcoatMap.isTexture ) { data.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid; } if ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) { data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid; } if ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) { data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid; data.clearcoatNormalScale = this.clearcoatNormalScale.toArray(); } if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid; if ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid; if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid; if ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid; if ( this.aoMap && this.aoMap.isTexture ) { data.aoMap = this.aoMap.toJSON( meta ).uuid; data.aoMapIntensity = this.aoMapIntensity; } if ( this.bumpMap && this.bumpMap.isTexture ) { data.bumpMap = this.bumpMap.toJSON( meta ).uuid; data.bumpScale = this.bumpScale; } if ( this.normalMap && this.normalMap.isTexture ) { data.normalMap = this.normalMap.toJSON( meta ).uuid; data.normalMapType = this.normalMapType; data.normalScale = this.normalScale.toArray(); } if ( this.displacementMap && this.displacementMap.isTexture ) { data.displacementMap = this.displacementMap.toJSON( meta ).uuid; data.displacementScale = this.displacementScale; data.displacementBias = this.displacementBias; } if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid; if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid; if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid; if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid; if ( this.envMap && this.envMap.isTexture ) { data.envMap = this.envMap.toJSON( meta ).uuid; data.reflectivity = this.reflectivity; // Scale behind envMap data.refractionRatio = this.refractionRatio; if ( this.combine !== undefined ) data.combine = this.combine; if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity; } if ( this.gradientMap && this.gradientMap.isTexture ) { data.gradientMap = this.gradientMap.toJSON( meta ).uuid; } if ( this.size !== undefined ) data.size = this.size; if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation; if ( this.blending !== NormalBlending ) data.blending = this.blending; if ( this.flatShading === true ) data.flatShading = this.flatShading; if ( this.side !== FrontSide ) data.side = this.side; if ( this.vertexColors ) data.vertexColors = true; if ( this.opacity < 1 ) data.opacity = this.opacity; if ( this.transparent === true ) data.transparent = this.transparent; data.depthFunc = this.depthFunc; data.depthTest = this.depthTest; data.depthWrite = this.depthWrite; data.stencilWrite = this.stencilWrite; data.stencilWriteMask = this.stencilWriteMask; data.stencilFunc = this.stencilFunc; data.stencilRef = this.stencilRef; data.stencilFuncMask = this.stencilFuncMask; data.stencilFail = this.stencilFail; data.stencilZFail = this.stencilZFail; data.stencilZPass = this.stencilZPass; // rotation (SpriteMaterial) if ( this.rotation && this.rotation !== 0 ) data.rotation = this.rotation; if ( this.polygonOffset === true ) data.polygonOffset = true; if ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor; if ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits; if ( this.linewidth && this.linewidth !== 1 ) data.linewidth = this.linewidth; if ( this.dashSize !== undefined ) data.dashSize = this.dashSize; if ( this.gapSize !== undefined ) data.gapSize = this.gapSize; if ( this.scale !== undefined ) data.scale = this.scale; if ( this.dithering === true ) data.dithering = true; if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest; if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha; if ( this.wireframe === true ) data.wireframe = this.wireframe; if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth; if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap; if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin; if ( this.morphTargets === true ) data.morphTargets = true; if ( this.morphNormals === true ) data.morphNormals = true; if ( this.skinning === true ) data.skinning = true; if ( this.visible === false ) data.visible = false; if ( this.toneMapped === false ) data.toneMapped = false; if ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData; // TODO: Copied from Object3D.toJSON function extractFromCache( cache ) { const values = []; for ( const key in cache ) { const data = cache[ key ]; delete data.metadata; values.push( data ); } return values; } if ( isRoot ) { const textures = extractFromCache( meta.textures ); const images = extractFromCache( meta.images ); if ( textures.length > 0 ) data.textures = textures; if ( images.length > 0 ) data.images = images; } return data; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.name = source.name; this.fog = source.fog; this.blending = source.blending; this.side = source.side; this.flatShading = source.flatShading; this.vertexColors = source.vertexColors; this.opacity = source.opacity; this.transparent = source.transparent; this.blendSrc = source.blendSrc; this.blendDst = source.blendDst; this.blendEquation = source.blendEquation; this.blendSrcAlpha = source.blendSrcAlpha; this.blendDstAlpha = source.blendDstAlpha; this.blendEquationAlpha = source.blendEquationAlpha; this.depthFunc = source.depthFunc; this.depthTest = source.depthTest; this.depthWrite = source.depthWrite; this.stencilWriteMask = source.stencilWriteMask; this.stencilFunc = source.stencilFunc; this.stencilRef = source.stencilRef; this.stencilFuncMask = source.stencilFuncMask; this.stencilFail = source.stencilFail; this.stencilZFail = source.stencilZFail; this.stencilZPass = source.stencilZPass; this.stencilWrite = source.stencilWrite; const srcPlanes = source.clippingPlanes; let dstPlanes = null; if ( srcPlanes !== null ) { const n = srcPlanes.length; dstPlanes = new Array( n ); for ( let i = 0; i !== n; ++ i ) { dstPlanes[ i ] = srcPlanes[ i ].clone(); } } this.clippingPlanes = dstPlanes; this.clipIntersection = source.clipIntersection; this.clipShadows = source.clipShadows; this.shadowSide = source.shadowSide; this.colorWrite = source.colorWrite; this.precision = source.precision; this.polygonOffset = source.polygonOffset; this.polygonOffsetFactor = source.polygonOffsetFactor; this.polygonOffsetUnits = source.polygonOffsetUnits; this.dithering = source.dithering; this.alphaTest = source.alphaTest; this.premultipliedAlpha = source.premultipliedAlpha; this.visible = source.visible; this.toneMapped = source.toneMapped; this.userData = JSON.parse( JSON.stringify( source.userData ) ); return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); Object.defineProperty( Material.prototype, 'needsUpdate', { set: function ( value ) { if ( value === true ) this.version ++; } } ); /** * parameters = { * color: , * opacity: , * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * specularMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , * * depthTest: , * depthWrite: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: * } */ function MeshBasicMaterial( parameters ) { Material.call( this ); this.type = 'MeshBasicMaterial'; this.color = new Color( 0xffffff ); // emissive this.map = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.specularMap = null; this.alphaMap = null; this.envMap = null; this.combine = MultiplyOperation; this.reflectivity = 1; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.setValues( parameters ); } MeshBasicMaterial.prototype = Object.create( Material.prototype ); MeshBasicMaterial.prototype.constructor = MeshBasicMaterial; MeshBasicMaterial.prototype.isMeshBasicMaterial = true; MeshBasicMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.specularMap = source.specularMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.combine = source.combine; this.reflectivity = source.reflectivity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; return this; }; const _vector$3 = new Vector3(); const _vector2$1 = new Vector2(); function BufferAttribute( array, itemSize, normalized ) { if ( Array.isArray( array ) ) { throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' ); } this.name = ''; this.array = array; this.itemSize = itemSize; this.count = array !== undefined ? array.length / itemSize : 0; this.normalized = normalized === true; this.usage = StaticDrawUsage; this.updateRange = { offset: 0, count: - 1 }; this.version = 0; } Object.defineProperty( BufferAttribute.prototype, 'needsUpdate', { set: function ( value ) { if ( value === true ) this.version ++; } } ); Object.assign( BufferAttribute.prototype, { isBufferAttribute: true, onUploadCallback: function () {}, setUsage: function ( value ) { this.usage = value; return this; }, copy: function ( source ) { this.name = source.name; this.array = new source.array.constructor( source.array ); this.itemSize = source.itemSize; this.count = source.count; this.normalized = source.normalized; this.usage = source.usage; return this; }, copyAt: function ( index1, attribute, index2 ) { index1 *= this.itemSize; index2 *= attribute.itemSize; for ( let i = 0, l = this.itemSize; i < l; i ++ ) { this.array[ index1 + i ] = attribute.array[ index2 + i ]; } return this; }, copyArray: function ( array ) { this.array.set( array ); return this; }, copyColorsArray: function ( colors ) { const array = this.array; let offset = 0; for ( let i = 0, l = colors.length; i < l; i ++ ) { let color = colors[ i ]; if ( color === undefined ) { console.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i ); color = new Color(); } array[ offset ++ ] = color.r; array[ offset ++ ] = color.g; array[ offset ++ ] = color.b; } return this; }, copyVector2sArray: function ( vectors ) { const array = this.array; let offset = 0; for ( let i = 0, l = vectors.length; i < l; i ++ ) { let vector = vectors[ i ]; if ( vector === undefined ) { console.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i ); vector = new Vector2(); } array[ offset ++ ] = vector.x; array[ offset ++ ] = vector.y; } return this; }, copyVector3sArray: function ( vectors ) { const array = this.array; let offset = 0; for ( let i = 0, l = vectors.length; i < l; i ++ ) { let vector = vectors[ i ]; if ( vector === undefined ) { console.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i ); vector = new Vector3(); } array[ offset ++ ] = vector.x; array[ offset ++ ] = vector.y; array[ offset ++ ] = vector.z; } return this; }, copyVector4sArray: function ( vectors ) { const array = this.array; let offset = 0; for ( let i = 0, l = vectors.length; i < l; i ++ ) { let vector = vectors[ i ]; if ( vector === undefined ) { console.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i ); vector = new Vector4(); } array[ offset ++ ] = vector.x; array[ offset ++ ] = vector.y; array[ offset ++ ] = vector.z; array[ offset ++ ] = vector.w; } return this; }, applyMatrix3: function ( m ) { if ( this.itemSize === 2 ) { for ( let i = 0, l = this.count; i < l; i ++ ) { _vector2$1.fromBufferAttribute( this, i ); _vector2$1.applyMatrix3( m ); this.setXY( i, _vector2$1.x, _vector2$1.y ); } } else if ( this.itemSize === 3 ) { for ( let i = 0, l = this.count; i < l; i ++ ) { _vector$3.fromBufferAttribute( this, i ); _vector$3.applyMatrix3( m ); this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); } } return this; }, applyMatrix4: function ( m ) { for ( let i = 0, l = this.count; i < l; i ++ ) { _vector$3.x = this.getX( i ); _vector$3.y = this.getY( i ); _vector$3.z = this.getZ( i ); _vector$3.applyMatrix4( m ); this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); } return this; }, applyNormalMatrix: function ( m ) { for ( let i = 0, l = this.count; i < l; i ++ ) { _vector$3.x = this.getX( i ); _vector$3.y = this.getY( i ); _vector$3.z = this.getZ( i ); _vector$3.applyNormalMatrix( m ); this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); } return this; }, transformDirection: function ( m ) { for ( let i = 0, l = this.count; i < l; i ++ ) { _vector$3.x = this.getX( i ); _vector$3.y = this.getY( i ); _vector$3.z = this.getZ( i ); _vector$3.transformDirection( m ); this.setXYZ( i, _vector$3.x, _vector$3.y, _vector$3.z ); } return this; }, set: function ( value, offset = 0 ) { this.array.set( value, offset ); return this; }, getX: function ( index ) { return this.array[ index * this.itemSize ]; }, setX: function ( index, x ) { this.array[ index * this.itemSize ] = x; return this; }, getY: function ( index ) { return this.array[ index * this.itemSize + 1 ]; }, setY: function ( index, y ) { this.array[ index * this.itemSize + 1 ] = y; return this; }, getZ: function ( index ) { return this.array[ index * this.itemSize + 2 ]; }, setZ: function ( index, z ) { this.array[ index * this.itemSize + 2 ] = z; return this; }, getW: function ( index ) { return this.array[ index * this.itemSize + 3 ]; }, setW: function ( index, w ) { this.array[ index * this.itemSize + 3 ] = w; return this; }, setXY: function ( index, x, y ) { index *= this.itemSize; this.array[ index + 0 ] = x; this.array[ index + 1 ] = y; return this; }, setXYZ: function ( index, x, y, z ) { index *= this.itemSize; this.array[ index + 0 ] = x; this.array[ index + 1 ] = y; this.array[ index + 2 ] = z; return this; }, setXYZW: function ( index, x, y, z, w ) { index *= this.itemSize; this.array[ index + 0 ] = x; this.array[ index + 1 ] = y; this.array[ index + 2 ] = z; this.array[ index + 3 ] = w; return this; }, onUpload: function ( callback ) { this.onUploadCallback = callback; return this; }, clone: function () { return new this.constructor( this.array, this.itemSize ).copy( this ); }, toJSON: function () { return { itemSize: this.itemSize, type: this.array.constructor.name, array: Array.prototype.slice.call( this.array ), normalized: this.normalized }; } } ); // function Int8BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Int8Array( array ), itemSize, normalized ); } Int8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Int8BufferAttribute.prototype.constructor = Int8BufferAttribute; function Uint8BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized ); } Uint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Uint8BufferAttribute.prototype.constructor = Uint8BufferAttribute; function Uint8ClampedBufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized ); } Uint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Uint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute; function Int16BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Int16Array( array ), itemSize, normalized ); } Int16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Int16BufferAttribute.prototype.constructor = Int16BufferAttribute; function Uint16BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); } Uint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Uint16BufferAttribute.prototype.constructor = Uint16BufferAttribute; function Int32BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Int32Array( array ), itemSize, normalized ); } Int32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Int32BufferAttribute.prototype.constructor = Int32BufferAttribute; function Uint32BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized ); } Uint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Uint32BufferAttribute.prototype.constructor = Uint32BufferAttribute; function Float16BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized ); } Float16BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Float16BufferAttribute.prototype.constructor = Float16BufferAttribute; Float16BufferAttribute.prototype.isFloat16BufferAttribute = true; function Float32BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Float32Array( array ), itemSize, normalized ); } Float32BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Float32BufferAttribute.prototype.constructor = Float32BufferAttribute; function Float64BufferAttribute( array, itemSize, normalized ) { BufferAttribute.call( this, new Float64Array( array ), itemSize, normalized ); } Float64BufferAttribute.prototype = Object.create( BufferAttribute.prototype ); Float64BufferAttribute.prototype.constructor = Float64BufferAttribute; class DirectGeometry { constructor() { this.vertices = []; this.normals = []; this.colors = []; this.uvs = []; this.uvs2 = []; this.groups = []; this.morphTargets = {}; this.skinWeights = []; this.skinIndices = []; // this.lineDistances = []; this.boundingBox = null; this.boundingSphere = null; // update flags this.verticesNeedUpdate = false; this.normalsNeedUpdate = false; this.colorsNeedUpdate = false; this.uvsNeedUpdate = false; this.groupsNeedUpdate = false; } computeGroups( geometry ) { const groups = []; let group, i; let materialIndex = undefined; const faces = geometry.faces; for ( i = 0; i < faces.length; i ++ ) { const face = faces[ i ]; // materials if ( face.materialIndex !== materialIndex ) { materialIndex = face.materialIndex; if ( group !== undefined ) { group.count = ( i * 3 ) - group.start; groups.push( group ); } group = { start: i * 3, materialIndex: materialIndex }; } } if ( group !== undefined ) { group.count = ( i * 3 ) - group.start; groups.push( group ); } this.groups = groups; } fromGeometry( geometry ) { const faces = geometry.faces; const vertices = geometry.vertices; const faceVertexUvs = geometry.faceVertexUvs; const hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; const hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; // morphs const morphTargets = geometry.morphTargets; const morphTargetsLength = morphTargets.length; let morphTargetsPosition; if ( morphTargetsLength > 0 ) { morphTargetsPosition = []; for ( let i = 0; i < morphTargetsLength; i ++ ) { morphTargetsPosition[ i ] = { name: morphTargets[ i ].name, data: [] }; } this.morphTargets.position = morphTargetsPosition; } const morphNormals = geometry.morphNormals; const morphNormalsLength = morphNormals.length; let morphTargetsNormal; if ( morphNormalsLength > 0 ) { morphTargetsNormal = []; for ( let i = 0; i < morphNormalsLength; i ++ ) { morphTargetsNormal[ i ] = { name: morphNormals[ i ].name, data: [] }; } this.morphTargets.normal = morphTargetsNormal; } // skins const skinIndices = geometry.skinIndices; const skinWeights = geometry.skinWeights; const hasSkinIndices = skinIndices.length === vertices.length; const hasSkinWeights = skinWeights.length === vertices.length; // if ( vertices.length > 0 && faces.length === 0 ) { console.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' ); } for ( let i = 0; i < faces.length; i ++ ) { const face = faces[ i ]; this.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] ); const vertexNormals = face.vertexNormals; if ( vertexNormals.length === 3 ) { this.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] ); } else { const normal = face.normal; this.normals.push( normal, normal, normal ); } const vertexColors = face.vertexColors; if ( vertexColors.length === 3 ) { this.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] ); } else { const color = face.color; this.colors.push( color, color, color ); } if ( hasFaceVertexUv === true ) { const vertexUvs = faceVertexUvs[ 0 ][ i ]; if ( vertexUvs !== undefined ) { this.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); } else { console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i ); this.uvs.push( new Vector2(), new Vector2(), new Vector2() ); } } if ( hasFaceVertexUv2 === true ) { const vertexUvs = faceVertexUvs[ 1 ][ i ]; if ( vertexUvs !== undefined ) { this.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] ); } else { console.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i ); this.uvs2.push( new Vector2(), new Vector2(), new Vector2() ); } } // morphs for ( let j = 0; j < morphTargetsLength; j ++ ) { const morphTarget = morphTargets[ j ].vertices; morphTargetsPosition[ j ].data.push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] ); } for ( let j = 0; j < morphNormalsLength; j ++ ) { const morphNormal = morphNormals[ j ].vertexNormals[ i ]; morphTargetsNormal[ j ].data.push( morphNormal.a, morphNormal.b, morphNormal.c ); } // skins if ( hasSkinIndices ) { this.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] ); } if ( hasSkinWeights ) { this.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] ); } } this.computeGroups( geometry ); this.verticesNeedUpdate = geometry.verticesNeedUpdate; this.normalsNeedUpdate = geometry.normalsNeedUpdate; this.colorsNeedUpdate = geometry.colorsNeedUpdate; this.uvsNeedUpdate = geometry.uvsNeedUpdate; this.groupsNeedUpdate = geometry.groupsNeedUpdate; if ( geometry.boundingSphere !== null ) { this.boundingSphere = geometry.boundingSphere.clone(); } if ( geometry.boundingBox !== null ) { this.boundingBox = geometry.boundingBox.clone(); } return this; } } function arrayMax( array ) { if ( array.length === 0 ) return - Infinity; let max = array[ 0 ]; for ( let i = 1, l = array.length; i < l; ++ i ) { if ( array[ i ] > max ) max = array[ i ]; } return max; } const TYPED_ARRAYS = { Int8Array: Int8Array, Uint8Array: Uint8Array, // Workaround for IE11 pre KB2929437. See #11440 Uint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array, Int16Array: Int16Array, Uint16Array: Uint16Array, Int32Array: Int32Array, Uint32Array: Uint32Array, Float32Array: Float32Array, Float64Array: Float64Array }; function getTypedArray( type, buffer ) { return new TYPED_ARRAYS[ type ]( buffer ); } let _bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id const _m1$2 = new Matrix4(); const _obj = new Object3D(); const _offset = new Vector3(); const _box$2 = new Box3(); const _boxMorphTargets = new Box3(); const _vector$4 = new Vector3(); function BufferGeometry() { Object.defineProperty( this, 'id', { value: _bufferGeometryId += 2 } ); this.uuid = MathUtils.generateUUID(); this.name = ''; this.type = 'BufferGeometry'; this.index = null; this.attributes = {}; this.morphAttributes = {}; this.morphTargetsRelative = false; this.groups = []; this.boundingBox = null; this.boundingSphere = null; this.drawRange = { start: 0, count: Infinity }; this.userData = {}; } BufferGeometry.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { constructor: BufferGeometry, isBufferGeometry: true, getIndex: function () { return this.index; }, setIndex: function ( index ) { if ( Array.isArray( index ) ) { this.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 ); } else { this.index = index; } return this; }, getAttribute: function ( name ) { return this.attributes[ name ]; }, setAttribute: function ( name, attribute ) { this.attributes[ name ] = attribute; return this; }, deleteAttribute: function ( name ) { delete this.attributes[ name ]; return this; }, hasAttribute: function ( name ) { return this.attributes[ name ] !== undefined; }, addGroup: function ( start, count, materialIndex = 0 ) { this.groups.push( { start: start, count: count, materialIndex: materialIndex } ); }, clearGroups: function () { this.groups = []; }, setDrawRange: function ( start, count ) { this.drawRange.start = start; this.drawRange.count = count; }, applyMatrix4: function ( matrix ) { const position = this.attributes.position; if ( position !== undefined ) { position.applyMatrix4( matrix ); position.needsUpdate = true; } const normal = this.attributes.normal; if ( normal !== undefined ) { const normalMatrix = new Matrix3().getNormalMatrix( matrix ); normal.applyNormalMatrix( normalMatrix ); normal.needsUpdate = true; } const tangent = this.attributes.tangent; if ( tangent !== undefined ) { tangent.transformDirection( matrix ); tangent.needsUpdate = true; } if ( this.boundingBox !== null ) { this.computeBoundingBox(); } if ( this.boundingSphere !== null ) { this.computeBoundingSphere(); } return this; }, rotateX: function ( angle ) { // rotate geometry around world x-axis _m1$2.makeRotationX( angle ); this.applyMatrix4( _m1$2 ); return this; }, rotateY: function ( angle ) { // rotate geometry around world y-axis _m1$2.makeRotationY( angle ); this.applyMatrix4( _m1$2 ); return this; }, rotateZ: function ( angle ) { // rotate geometry around world z-axis _m1$2.makeRotationZ( angle ); this.applyMatrix4( _m1$2 ); return this; }, translate: function ( x, y, z ) { // translate geometry _m1$2.makeTranslation( x, y, z ); this.applyMatrix4( _m1$2 ); return this; }, scale: function ( x, y, z ) { // scale geometry _m1$2.makeScale( x, y, z ); this.applyMatrix4( _m1$2 ); return this; }, lookAt: function ( vector ) { _obj.lookAt( vector ); _obj.updateMatrix(); this.applyMatrix4( _obj.matrix ); return this; }, center: function () { this.computeBoundingBox(); this.boundingBox.getCenter( _offset ).negate(); this.translate( _offset.x, _offset.y, _offset.z ); return this; }, setFromObject: function ( object ) { // console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this ); const geometry = object.geometry; if ( object.isPoints || object.isLine ) { const positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 ); const colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 ); this.setAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) ); this.setAttribute( 'color', colors.copyColorsArray( geometry.colors ) ); if ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) { const lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 ); this.setAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) ); } if ( geometry.boundingSphere !== null ) { this.boundingSphere = geometry.boundingSphere.clone(); } if ( geometry.boundingBox !== null ) { this.boundingBox = geometry.boundingBox.clone(); } } else if ( object.isMesh ) { if ( geometry && geometry.isGeometry ) { this.fromGeometry( geometry ); } } return this; }, setFromPoints: function ( points ) { const position = []; for ( let i = 0, l = points.length; i < l; i ++ ) { const point = points[ i ]; position.push( point.x, point.y, point.z || 0 ); } this.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) ); return this; }, updateFromObject: function ( object ) { let geometry = object.geometry; if ( object.isMesh ) { let direct = geometry.__directGeometry; if ( geometry.elementsNeedUpdate === true ) { direct = undefined; geometry.elementsNeedUpdate = false; } if ( direct === undefined ) { return this.fromGeometry( geometry ); } direct.verticesNeedUpdate = geometry.verticesNeedUpdate; direct.normalsNeedUpdate = geometry.normalsNeedUpdate; direct.colorsNeedUpdate = geometry.colorsNeedUpdate; direct.uvsNeedUpdate = geometry.uvsNeedUpdate; direct.groupsNeedUpdate = geometry.groupsNeedUpdate; geometry.verticesNeedUpdate = false; geometry.normalsNeedUpdate = false; geometry.colorsNeedUpdate = false; geometry.uvsNeedUpdate = false; geometry.groupsNeedUpdate = false; geometry = direct; } if ( geometry.verticesNeedUpdate === true ) { const attribute = this.attributes.position; if ( attribute !== undefined ) { attribute.copyVector3sArray( geometry.vertices ); attribute.needsUpdate = true; } geometry.verticesNeedUpdate = false; } if ( geometry.normalsNeedUpdate === true ) { const attribute = this.attributes.normal; if ( attribute !== undefined ) { attribute.copyVector3sArray( geometry.normals ); attribute.needsUpdate = true; } geometry.normalsNeedUpdate = false; } if ( geometry.colorsNeedUpdate === true ) { const attribute = this.attributes.color; if ( attribute !== undefined ) { attribute.copyColorsArray( geometry.colors ); attribute.needsUpdate = true; } geometry.colorsNeedUpdate = false; } if ( geometry.uvsNeedUpdate ) { const attribute = this.attributes.uv; if ( attribute !== undefined ) { attribute.copyVector2sArray( geometry.uvs ); attribute.needsUpdate = true; } geometry.uvsNeedUpdate = false; } if ( geometry.lineDistancesNeedUpdate ) { const attribute = this.attributes.lineDistance; if ( attribute !== undefined ) { attribute.copyArray( geometry.lineDistances ); attribute.needsUpdate = true; } geometry.lineDistancesNeedUpdate = false; } if ( geometry.groupsNeedUpdate ) { geometry.computeGroups( object.geometry ); this.groups = geometry.groups; geometry.groupsNeedUpdate = false; } return this; }, fromGeometry: function ( geometry ) { geometry.__directGeometry = new DirectGeometry().fromGeometry( geometry ); return this.fromDirectGeometry( geometry.__directGeometry ); }, fromDirectGeometry: function ( geometry ) { const positions = new Float32Array( geometry.vertices.length * 3 ); this.setAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) ); if ( geometry.normals.length > 0 ) { const normals = new Float32Array( geometry.normals.length * 3 ); this.setAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) ); } if ( geometry.colors.length > 0 ) { const colors = new Float32Array( geometry.colors.length * 3 ); this.setAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) ); } if ( geometry.uvs.length > 0 ) { const uvs = new Float32Array( geometry.uvs.length * 2 ); this.setAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) ); } if ( geometry.uvs2.length > 0 ) { const uvs2 = new Float32Array( geometry.uvs2.length * 2 ); this.setAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) ); } // groups this.groups = geometry.groups; // morphs for ( const name in geometry.morphTargets ) { const array = []; const morphTargets = geometry.morphTargets[ name ]; for ( let i = 0, l = morphTargets.length; i < l; i ++ ) { const morphTarget = morphTargets[ i ]; const attribute = new Float32BufferAttribute( morphTarget.data.length * 3, 3 ); attribute.name = morphTarget.name; array.push( attribute.copyVector3sArray( morphTarget.data ) ); } this.morphAttributes[ name ] = array; } // skinning if ( geometry.skinIndices.length > 0 ) { const skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 ); this.setAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); } if ( geometry.skinWeights.length > 0 ) { const skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 ); this.setAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); } // if ( geometry.boundingSphere !== null ) { this.boundingSphere = geometry.boundingSphere.clone(); } if ( geometry.boundingBox !== null ) { this.boundingBox = geometry.boundingBox.clone(); } return this; }, computeBoundingBox: function () { if ( this.boundingBox === null ) { this.boundingBox = new Box3(); } const position = this.attributes.position; const morphAttributesPosition = this.morphAttributes.position; if ( position && position.isGLBufferAttribute ) { console.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this ); this.boundingBox.set( new Vector3( - Infinity, - Infinity, - Infinity ), new Vector3( + Infinity, + Infinity, + Infinity ) ); return; } if ( position !== undefined ) { this.boundingBox.setFromBufferAttribute( position ); // process morph attributes if present if ( morphAttributesPosition ) { for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { const morphAttribute = morphAttributesPosition[ i ]; _box$2.setFromBufferAttribute( morphAttribute ); if ( this.morphTargetsRelative ) { _vector$4.addVectors( this.boundingBox.min, _box$2.min ); this.boundingBox.expandByPoint( _vector$4 ); _vector$4.addVectors( this.boundingBox.max, _box$2.max ); this.boundingBox.expandByPoint( _vector$4 ); } else { this.boundingBox.expandByPoint( _box$2.min ); this.boundingBox.expandByPoint( _box$2.max ); } } } } else { this.boundingBox.makeEmpty(); } if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) { console.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this ); } }, computeBoundingSphere: function () { if ( this.boundingSphere === null ) { this.boundingSphere = new Sphere(); } const position = this.attributes.position; const morphAttributesPosition = this.morphAttributes.position; if ( position && position.isGLBufferAttribute ) { console.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this ); this.boundingSphere.set( new Vector3(), Infinity ); return; } if ( position ) { // first, find the center of the bounding sphere const center = this.boundingSphere.center; _box$2.setFromBufferAttribute( position ); // process morph attributes if present if ( morphAttributesPosition ) { for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { const morphAttribute = morphAttributesPosition[ i ]; _boxMorphTargets.setFromBufferAttribute( morphAttribute ); if ( this.morphTargetsRelative ) { _vector$4.addVectors( _box$2.min, _boxMorphTargets.min ); _box$2.expandByPoint( _vector$4 ); _vector$4.addVectors( _box$2.max, _boxMorphTargets.max ); _box$2.expandByPoint( _vector$4 ); } else { _box$2.expandByPoint( _boxMorphTargets.min ); _box$2.expandByPoint( _boxMorphTargets.max ); } } } _box$2.getCenter( center ); // second, try to find a boundingSphere with a radius smaller than the // boundingSphere of the boundingBox: sqrt(3) smaller in the best case let maxRadiusSq = 0; for ( let i = 0, il = position.count; i < il; i ++ ) { _vector$4.fromBufferAttribute( position, i ); maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); } // process morph attributes if present if ( morphAttributesPosition ) { for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) { const morphAttribute = morphAttributesPosition[ i ]; const morphTargetsRelative = this.morphTargetsRelative; for ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) { _vector$4.fromBufferAttribute( morphAttribute, j ); if ( morphTargetsRelative ) { _offset.fromBufferAttribute( position, j ); _vector$4.add( _offset ); } maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$4 ) ); } } } this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); if ( isNaN( this.boundingSphere.radius ) ) { console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this ); } } }, computeFaceNormals: function () { // backwards compatibility }, computeVertexNormals: function () { const index = this.index; const positionAttribute = this.getAttribute( 'position' ); if ( positionAttribute !== undefined ) { let normalAttribute = this.getAttribute( 'normal' ); if ( normalAttribute === undefined ) { normalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 ); this.setAttribute( 'normal', normalAttribute ); } else { // reset existing normals to zero for ( let i = 0, il = normalAttribute.count; i < il; i ++ ) { normalAttribute.setXYZ( i, 0, 0, 0 ); } } const pA = new Vector3(), pB = new Vector3(), pC = new Vector3(); const nA = new Vector3(), nB = new Vector3(), nC = new Vector3(); const cb = new Vector3(), ab = new Vector3(); // indexed elements if ( index ) { for ( let i = 0, il = index.count; i < il; i += 3 ) { const vA = index.getX( i + 0 ); const vB = index.getX( i + 1 ); const vC = index.getX( i + 2 ); pA.fromBufferAttribute( positionAttribute, vA ); pB.fromBufferAttribute( positionAttribute, vB ); pC.fromBufferAttribute( positionAttribute, vC ); cb.subVectors( pC, pB ); ab.subVectors( pA, pB ); cb.cross( ab ); nA.fromBufferAttribute( normalAttribute, vA ); nB.fromBufferAttribute( normalAttribute, vB ); nC.fromBufferAttribute( normalAttribute, vC ); nA.add( cb ); nB.add( cb ); nC.add( cb ); normalAttribute.setXYZ( vA, nA.x, nA.y, nA.z ); normalAttribute.setXYZ( vB, nB.x, nB.y, nB.z ); normalAttribute.setXYZ( vC, nC.x, nC.y, nC.z ); } } else { // non-indexed elements (unconnected triangle soup) for ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) { pA.fromBufferAttribute( positionAttribute, i + 0 ); pB.fromBufferAttribute( positionAttribute, i + 1 ); pC.fromBufferAttribute( positionAttribute, i + 2 ); cb.subVectors( pC, pB ); ab.subVectors( pA, pB ); cb.cross( ab ); normalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z ); normalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z ); normalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z ); } } this.normalizeNormals(); normalAttribute.needsUpdate = true; } }, merge: function ( geometry, offset ) { if ( ! ( geometry && geometry.isBufferGeometry ) ) { console.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry ); return; } if ( offset === undefined ) { offset = 0; console.warn( 'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. ' + 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.' ); } const attributes = this.attributes; for ( const key in attributes ) { if ( geometry.attributes[ key ] === undefined ) continue; const attribute1 = attributes[ key ]; const attributeArray1 = attribute1.array; const attribute2 = geometry.attributes[ key ]; const attributeArray2 = attribute2.array; const attributeOffset = attribute2.itemSize * offset; const length = Math.min( attributeArray2.length, attributeArray1.length - attributeOffset ); for ( let i = 0, j = attributeOffset; i < length; i ++, j ++ ) { attributeArray1[ j ] = attributeArray2[ i ]; } } return this; }, normalizeNormals: function () { const normals = this.attributes.normal; for ( let i = 0, il = normals.count; i < il; i ++ ) { _vector$4.fromBufferAttribute( normals, i ); _vector$4.normalize(); normals.setXYZ( i, _vector$4.x, _vector$4.y, _vector$4.z ); } }, toNonIndexed: function () { function convertBufferAttribute( attribute, indices ) { const array = attribute.array; const itemSize = attribute.itemSize; const normalized = attribute.normalized; const array2 = new array.constructor( indices.length * itemSize ); let index = 0, index2 = 0; for ( let i = 0, l = indices.length; i < l; i ++ ) { index = indices[ i ] * itemSize; for ( let j = 0; j < itemSize; j ++ ) { array2[ index2 ++ ] = array[ index ++ ]; } } return new BufferAttribute( array2, itemSize, normalized ); } // if ( this.index === null ) { console.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' ); return this; } const geometry2 = new BufferGeometry(); const indices = this.index.array; const attributes = this.attributes; // attributes for ( const name in attributes ) { const attribute = attributes[ name ]; const newAttribute = convertBufferAttribute( attribute, indices ); geometry2.setAttribute( name, newAttribute ); } // morph attributes const morphAttributes = this.morphAttributes; for ( const name in morphAttributes ) { const morphArray = []; const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes for ( let i = 0, il = morphAttribute.length; i < il; i ++ ) { const attribute = morphAttribute[ i ]; const newAttribute = convertBufferAttribute( attribute, indices ); morphArray.push( newAttribute ); } geometry2.morphAttributes[ name ] = morphArray; } geometry2.morphTargetsRelative = this.morphTargetsRelative; // groups const groups = this.groups; for ( let i = 0, l = groups.length; i < l; i ++ ) { const group = groups[ i ]; geometry2.addGroup( group.start, group.count, group.materialIndex ); } return geometry2; }, toJSON: function () { const data = { metadata: { version: 4.5, type: 'BufferGeometry', generator: 'BufferGeometry.toJSON' } }; // standard BufferGeometry serialization data.uuid = this.uuid; data.type = this.type; if ( this.name !== '' ) data.name = this.name; if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData; if ( this.parameters !== undefined ) { const parameters = this.parameters; for ( const key in parameters ) { if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; } return data; } data.data = { attributes: {} }; const index = this.index; if ( index !== null ) { data.data.index = { type: index.array.constructor.name, array: Array.prototype.slice.call( index.array ) }; } const attributes = this.attributes; for ( const key in attributes ) { const attribute = attributes[ key ]; const attributeData = attribute.toJSON( data.data ); if ( attribute.name !== '' ) attributeData.name = attribute.name; data.data.attributes[ key ] = attributeData; } const morphAttributes = {}; let hasMorphAttributes = false; for ( const key in this.morphAttributes ) { const attributeArray = this.morphAttributes[ key ]; const array = []; for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { const attribute = attributeArray[ i ]; const attributeData = attribute.toJSON( data.data ); if ( attribute.name !== '' ) attributeData.name = attribute.name; array.push( attributeData ); } if ( array.length > 0 ) { morphAttributes[ key ] = array; hasMorphAttributes = true; } } if ( hasMorphAttributes ) { data.data.morphAttributes = morphAttributes; data.data.morphTargetsRelative = this.morphTargetsRelative; } const groups = this.groups; if ( groups.length > 0 ) { data.data.groups = JSON.parse( JSON.stringify( groups ) ); } const boundingSphere = this.boundingSphere; if ( boundingSphere !== null ) { data.data.boundingSphere = { center: boundingSphere.center.toArray(), radius: boundingSphere.radius }; } return data; }, clone: function () { /* // Handle primitives const parameters = this.parameters; if ( parameters !== undefined ) { const values = []; for ( const key in parameters ) { values.push( parameters[ key ] ); } const geometry = Object.create( this.constructor.prototype ); this.constructor.apply( geometry, values ); return geometry; } return new this.constructor().copy( this ); */ return new BufferGeometry().copy( this ); }, copy: function ( source ) { // reset this.index = null; this.attributes = {}; this.morphAttributes = {}; this.groups = []; this.boundingBox = null; this.boundingSphere = null; // used for storing cloned, shared data const data = {}; // name this.name = source.name; // index const index = source.index; if ( index !== null ) { this.setIndex( index.clone( data ) ); } // attributes const attributes = source.attributes; for ( const name in attributes ) { const attribute = attributes[ name ]; this.setAttribute( name, attribute.clone( data ) ); } // morph attributes const morphAttributes = source.morphAttributes; for ( const name in morphAttributes ) { const array = []; const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes for ( let i = 0, l = morphAttribute.length; i < l; i ++ ) { array.push( morphAttribute[ i ].clone( data ) ); } this.morphAttributes[ name ] = array; } this.morphTargetsRelative = source.morphTargetsRelative; // groups const groups = source.groups; for ( let i = 0, l = groups.length; i < l; i ++ ) { const group = groups[ i ]; this.addGroup( group.start, group.count, group.materialIndex ); } // bounding box const boundingBox = source.boundingBox; if ( boundingBox !== null ) { this.boundingBox = boundingBox.clone(); } // bounding sphere const boundingSphere = source.boundingSphere; if ( boundingSphere !== null ) { this.boundingSphere = boundingSphere.clone(); } // draw range this.drawRange.start = source.drawRange.start; this.drawRange.count = source.drawRange.count; // user data this.userData = source.userData; return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); const _inverseMatrix = new Matrix4(); const _ray = new Ray(); const _sphere = new Sphere(); const _vA = new Vector3(); const _vB = new Vector3(); const _vC = new Vector3(); const _tempA = new Vector3(); const _tempB = new Vector3(); const _tempC = new Vector3(); const _morphA = new Vector3(); const _morphB = new Vector3(); const _morphC = new Vector3(); const _uvA = new Vector2(); const _uvB = new Vector2(); const _uvC = new Vector2(); const _intersectionPoint = new Vector3(); const _intersectionPointWorld = new Vector3(); function Mesh( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) { Object3D.call( this ); this.type = 'Mesh'; this.geometry = geometry; this.material = material; this.updateMorphTargets(); } Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Mesh, isMesh: true, copy: function ( source ) { Object3D.prototype.copy.call( this, source ); if ( source.morphTargetInfluences !== undefined ) { this.morphTargetInfluences = source.morphTargetInfluences.slice(); } if ( source.morphTargetDictionary !== undefined ) { this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary ); } this.material = source.material; this.geometry = source.geometry; return this; }, updateMorphTargets: function () { const geometry = this.geometry; if ( geometry.isBufferGeometry ) { const morphAttributes = geometry.morphAttributes; const keys = Object.keys( morphAttributes ); if ( keys.length > 0 ) { const morphAttribute = morphAttributes[ keys[ 0 ] ]; if ( morphAttribute !== undefined ) { this.morphTargetInfluences = []; this.morphTargetDictionary = {}; for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { const name = morphAttribute[ m ].name || String( m ); this.morphTargetInfluences.push( 0 ); this.morphTargetDictionary[ name ] = m; } } } } else { const morphTargets = geometry.morphTargets; if ( morphTargets !== undefined && morphTargets.length > 0 ) { console.error( 'THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); } } }, raycast: function ( raycaster, intersects ) { const geometry = this.geometry; const material = this.material; const matrixWorld = this.matrixWorld; if ( material === undefined ) return; // Checking boundingSphere distance to ray if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); _sphere.copy( geometry.boundingSphere ); _sphere.applyMatrix4( matrixWorld ); if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return; // _inverseMatrix.copy( matrixWorld ).invert(); _ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix ); // Check boundingBox before continuing if ( geometry.boundingBox !== null ) { if ( _ray.intersectsBox( geometry.boundingBox ) === false ) return; } let intersection; if ( geometry.isBufferGeometry ) { const index = geometry.index; const position = geometry.attributes.position; const morphPosition = geometry.morphAttributes.position; const morphTargetsRelative = geometry.morphTargetsRelative; const uv = geometry.attributes.uv; const uv2 = geometry.attributes.uv2; const groups = geometry.groups; const drawRange = geometry.drawRange; if ( index !== null ) { // indexed buffer geometry if ( Array.isArray( material ) ) { for ( let i = 0, il = groups.length; i < il; i ++ ) { const group = groups[ i ]; const groupMaterial = material[ group.materialIndex ]; const start = Math.max( group.start, drawRange.start ); const end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ); for ( let j = start, jl = end; j < jl; j += 3 ) { const a = index.getX( j ); const b = index.getX( j + 1 ); const c = index.getX( j + 2 ); intersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); if ( intersection ) { intersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics intersection.face.materialIndex = group.materialIndex; intersects.push( intersection ); } } } } else { const start = Math.max( 0, drawRange.start ); const end = Math.min( index.count, ( drawRange.start + drawRange.count ) ); for ( let i = start, il = end; i < il; i += 3 ) { const a = index.getX( i ); const b = index.getX( i + 1 ); const c = index.getX( i + 2 ); intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); if ( intersection ) { intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics intersects.push( intersection ); } } } } else if ( position !== undefined ) { // non-indexed buffer geometry if ( Array.isArray( material ) ) { for ( let i = 0, il = groups.length; i < il; i ++ ) { const group = groups[ i ]; const groupMaterial = material[ group.materialIndex ]; const start = Math.max( group.start, drawRange.start ); const end = Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ); for ( let j = start, jl = end; j < jl; j += 3 ) { const a = j; const b = j + 1; const c = j + 2; intersection = checkBufferGeometryIntersection( this, groupMaterial, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); if ( intersection ) { intersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics intersection.face.materialIndex = group.materialIndex; intersects.push( intersection ); } } } } else { const start = Math.max( 0, drawRange.start ); const end = Math.min( position.count, ( drawRange.start + drawRange.count ) ); for ( let i = start, il = end; i < il; i += 3 ) { const a = i; const b = i + 1; const c = i + 2; intersection = checkBufferGeometryIntersection( this, material, raycaster, _ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ); if ( intersection ) { intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics intersects.push( intersection ); } } } } } else if ( geometry.isGeometry ) { const isMultiMaterial = Array.isArray( material ); const vertices = geometry.vertices; const faces = geometry.faces; let uvs; const faceVertexUvs = geometry.faceVertexUvs[ 0 ]; if ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs; for ( let f = 0, fl = faces.length; f < fl; f ++ ) { const face = faces[ f ]; const faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material; if ( faceMaterial === undefined ) continue; const fvA = vertices[ face.a ]; const fvB = vertices[ face.b ]; const fvC = vertices[ face.c ]; intersection = checkIntersection( this, faceMaterial, raycaster, _ray, fvA, fvB, fvC, _intersectionPoint ); if ( intersection ) { if ( uvs && uvs[ f ] ) { const uvs_f = uvs[ f ]; _uvA.copy( uvs_f[ 0 ] ); _uvB.copy( uvs_f[ 1 ] ); _uvC.copy( uvs_f[ 2 ] ); intersection.uv = Triangle.getUV( _intersectionPoint, fvA, fvB, fvC, _uvA, _uvB, _uvC, new Vector2() ); } intersection.face = face; intersection.faceIndex = f; intersects.push( intersection ); } } } } } ); function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) { let intersect; if ( material.side === BackSide ) { intersect = ray.intersectTriangle( pC, pB, pA, true, point ); } else { intersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point ); } if ( intersect === null ) return null; _intersectionPointWorld.copy( point ); _intersectionPointWorld.applyMatrix4( object.matrixWorld ); const distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld ); if ( distance < raycaster.near || distance > raycaster.far ) return null; return { distance: distance, point: _intersectionPointWorld.clone(), object: object }; } function checkBufferGeometryIntersection( object, material, raycaster, ray, position, morphPosition, morphTargetsRelative, uv, uv2, a, b, c ) { _vA.fromBufferAttribute( position, a ); _vB.fromBufferAttribute( position, b ); _vC.fromBufferAttribute( position, c ); const morphInfluences = object.morphTargetInfluences; if ( material.morphTargets && morphPosition && morphInfluences ) { _morphA.set( 0, 0, 0 ); _morphB.set( 0, 0, 0 ); _morphC.set( 0, 0, 0 ); for ( let i = 0, il = morphPosition.length; i < il; i ++ ) { const influence = morphInfluences[ i ]; const morphAttribute = morphPosition[ i ]; if ( influence === 0 ) continue; _tempA.fromBufferAttribute( morphAttribute, a ); _tempB.fromBufferAttribute( morphAttribute, b ); _tempC.fromBufferAttribute( morphAttribute, c ); if ( morphTargetsRelative ) { _morphA.addScaledVector( _tempA, influence ); _morphB.addScaledVector( _tempB, influence ); _morphC.addScaledVector( _tempC, influence ); } else { _morphA.addScaledVector( _tempA.sub( _vA ), influence ); _morphB.addScaledVector( _tempB.sub( _vB ), influence ); _morphC.addScaledVector( _tempC.sub( _vC ), influence ); } } _vA.add( _morphA ); _vB.add( _morphB ); _vC.add( _morphC ); } if ( object.isSkinnedMesh ) { object.boneTransform( a, _vA ); object.boneTransform( b, _vB ); object.boneTransform( c, _vC ); } const intersection = checkIntersection( object, material, raycaster, ray, _vA, _vB, _vC, _intersectionPoint ); if ( intersection ) { if ( uv ) { _uvA.fromBufferAttribute( uv, a ); _uvB.fromBufferAttribute( uv, b ); _uvC.fromBufferAttribute( uv, c ); intersection.uv = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); } if ( uv2 ) { _uvA.fromBufferAttribute( uv2, a ); _uvB.fromBufferAttribute( uv2, b ); _uvC.fromBufferAttribute( uv2, c ); intersection.uv2 = Triangle.getUV( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ); } const face = new Face3( a, b, c ); Triangle.getNormal( _vA, _vB, _vC, face.normal ); intersection.face = face; } return intersection; } class BoxBufferGeometry extends BufferGeometry { constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) { super(); this.type = 'BoxBufferGeometry'; this.parameters = { width: width, height: height, depth: depth, widthSegments: widthSegments, heightSegments: heightSegments, depthSegments: depthSegments }; const scope = this; // segments widthSegments = Math.floor( widthSegments ); heightSegments = Math.floor( heightSegments ); depthSegments = Math.floor( depthSegments ); // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // helper variables let numberOfVertices = 0; let groupStart = 0; // build each side of the box geometry buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) { const segmentWidth = width / gridX; const segmentHeight = height / gridY; const widthHalf = width / 2; const heightHalf = height / 2; const depthHalf = depth / 2; const gridX1 = gridX + 1; const gridY1 = gridY + 1; let vertexCounter = 0; let groupCount = 0; const vector = new Vector3(); // generate vertices, normals and uvs for ( let iy = 0; iy < gridY1; iy ++ ) { const y = iy * segmentHeight - heightHalf; for ( let ix = 0; ix < gridX1; ix ++ ) { const x = ix * segmentWidth - widthHalf; // set values to correct vector component vector[ u ] = x * udir; vector[ v ] = y * vdir; vector[ w ] = depthHalf; // now apply vector to vertex buffer vertices.push( vector.x, vector.y, vector.z ); // set values to correct vector component vector[ u ] = 0; vector[ v ] = 0; vector[ w ] = depth > 0 ? 1 : - 1; // now apply vector to normal buffer normals.push( vector.x, vector.y, vector.z ); // uvs uvs.push( ix / gridX ); uvs.push( 1 - ( iy / gridY ) ); // counters vertexCounter += 1; } } // indices // 1. you need three indices to draw a single face // 2. a single segment consists of two faces // 3. so we need to generate six (2*3) indices per segment for ( let iy = 0; iy < gridY; iy ++ ) { for ( let ix = 0; ix < gridX; ix ++ ) { const a = numberOfVertices + ix + gridX1 * iy; const b = numberOfVertices + ix + gridX1 * ( iy + 1 ); const c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 ); const d = numberOfVertices + ( ix + 1 ) + gridX1 * iy; // faces indices.push( a, b, d ); indices.push( b, c, d ); // increase counter groupCount += 6; } } // add a group to the geometry. this will ensure multi material support scope.addGroup( groupStart, groupCount, materialIndex ); // calculate new start value for groups groupStart += groupCount; // update total number of vertices numberOfVertices += vertexCounter; } } } /** * Uniform Utilities */ function cloneUniforms( src ) { const dst = {}; for ( const u in src ) { dst[ u ] = {}; for ( const p in src[ u ] ) { const property = src[ u ][ p ]; if ( property && ( property.isColor || property.isMatrix3 || property.isMatrix4 || property.isVector2 || property.isVector3 || property.isVector4 || property.isTexture ) ) { dst[ u ][ p ] = property.clone(); } else if ( Array.isArray( property ) ) { dst[ u ][ p ] = property.slice(); } else { dst[ u ][ p ] = property; } } } return dst; } function mergeUniforms( uniforms ) { const merged = {}; for ( let u = 0; u < uniforms.length; u ++ ) { const tmp = cloneUniforms( uniforms[ u ] ); for ( const p in tmp ) { merged[ p ] = tmp[ p ]; } } return merged; } // Legacy const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms }; var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}"; var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}"; /** * parameters = { * defines: { "label" : "value" }, * uniforms: { "parameter1": { value: 1.0 }, "parameter2": { value2: 2 } }, * * fragmentShader: , * vertexShader: , * * wireframe: , * wireframeLinewidth: , * * lights: , * * skinning: , * morphTargets: , * morphNormals: * } */ function ShaderMaterial( parameters ) { Material.call( this ); this.type = 'ShaderMaterial'; this.defines = {}; this.uniforms = {}; this.vertexShader = default_vertex; this.fragmentShader = default_fragment; this.linewidth = 1; this.wireframe = false; this.wireframeLinewidth = 1; this.fog = false; // set to use scene fog this.lights = false; // set to use scene lights this.clipping = false; // set to use user-defined clipping planes this.skinning = false; // set to use skinning attribute streams this.morphTargets = false; // set to use morph targets this.morphNormals = false; // set to use morph normals this.extensions = { derivatives: false, // set to use derivatives fragDepth: false, // set to use fragment depth values drawBuffers: false, // set to use draw buffers shaderTextureLOD: false // set to use shader texture LOD }; // When rendered geometry doesn't include these attributes but the material does, // use these default values in WebGL. This avoids errors when buffer data is missing. this.defaultAttributeValues = { 'color': [ 1, 1, 1 ], 'uv': [ 0, 0 ], 'uv2': [ 0, 0 ] }; this.index0AttributeName = undefined; this.uniformsNeedUpdate = false; this.glslVersion = null; if ( parameters !== undefined ) { if ( parameters.attributes !== undefined ) { console.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' ); } this.setValues( parameters ); } } ShaderMaterial.prototype = Object.create( Material.prototype ); ShaderMaterial.prototype.constructor = ShaderMaterial; ShaderMaterial.prototype.isShaderMaterial = true; ShaderMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.fragmentShader = source.fragmentShader; this.vertexShader = source.vertexShader; this.uniforms = cloneUniforms( source.uniforms ); this.defines = Object.assign( {}, source.defines ); this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.lights = source.lights; this.clipping = source.clipping; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; this.extensions = Object.assign( {}, source.extensions ); this.glslVersion = source.glslVersion; return this; }; ShaderMaterial.prototype.toJSON = function ( meta ) { const data = Material.prototype.toJSON.call( this, meta ); data.glslVersion = this.glslVersion; data.uniforms = {}; for ( const name in this.uniforms ) { const uniform = this.uniforms[ name ]; const value = uniform.value; if ( value && value.isTexture ) { data.uniforms[ name ] = { type: 't', value: value.toJSON( meta ).uuid }; } else if ( value && value.isColor ) { data.uniforms[ name ] = { type: 'c', value: value.getHex() }; } else if ( value && value.isVector2 ) { data.uniforms[ name ] = { type: 'v2', value: value.toArray() }; } else if ( value && value.isVector3 ) { data.uniforms[ name ] = { type: 'v3', value: value.toArray() }; } else if ( value && value.isVector4 ) { data.uniforms[ name ] = { type: 'v4', value: value.toArray() }; } else if ( value && value.isMatrix3 ) { data.uniforms[ name ] = { type: 'm3', value: value.toArray() }; } else if ( value && value.isMatrix4 ) { data.uniforms[ name ] = { type: 'm4', value: value.toArray() }; } else { data.uniforms[ name ] = { value: value }; // note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far } } if ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines; data.vertexShader = this.vertexShader; data.fragmentShader = this.fragmentShader; const extensions = {}; for ( const key in this.extensions ) { if ( this.extensions[ key ] === true ) extensions[ key ] = true; } if ( Object.keys( extensions ).length > 0 ) data.extensions = extensions; return data; }; function Camera() { Object3D.call( this ); this.type = 'Camera'; this.matrixWorldInverse = new Matrix4(); this.projectionMatrix = new Matrix4(); this.projectionMatrixInverse = new Matrix4(); } Camera.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Camera, isCamera: true, copy: function ( source, recursive ) { Object3D.prototype.copy.call( this, source, recursive ); this.matrixWorldInverse.copy( source.matrixWorldInverse ); this.projectionMatrix.copy( source.projectionMatrix ); this.projectionMatrixInverse.copy( source.projectionMatrixInverse ); return this; }, getWorldDirection: function ( target ) { if ( target === undefined ) { console.warn( 'THREE.Camera: .getWorldDirection() target is now required' ); target = new Vector3(); } this.updateWorldMatrix( true, false ); const e = this.matrixWorld.elements; return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize(); }, updateMatrixWorld: function ( force ) { Object3D.prototype.updateMatrixWorld.call( this, force ); this.matrixWorldInverse.copy( this.matrixWorld ).invert(); }, updateWorldMatrix: function ( updateParents, updateChildren ) { Object3D.prototype.updateWorldMatrix.call( this, updateParents, updateChildren ); this.matrixWorldInverse.copy( this.matrixWorld ).invert(); }, clone: function () { return new this.constructor().copy( this ); } } ); function PerspectiveCamera( fov = 50, aspect = 1, near = 0.1, far = 2000 ) { Camera.call( this ); this.type = 'PerspectiveCamera'; this.fov = fov; this.zoom = 1; this.near = near; this.far = far; this.focus = 10; this.aspect = aspect; this.view = null; this.filmGauge = 35; // width of the film (default in millimeters) this.filmOffset = 0; // horizontal film offset (same unit as gauge) this.updateProjectionMatrix(); } PerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), { constructor: PerspectiveCamera, isPerspectiveCamera: true, copy: function ( source, recursive ) { Camera.prototype.copy.call( this, source, recursive ); this.fov = source.fov; this.zoom = source.zoom; this.near = source.near; this.far = source.far; this.focus = source.focus; this.aspect = source.aspect; this.view = source.view === null ? null : Object.assign( {}, source.view ); this.filmGauge = source.filmGauge; this.filmOffset = source.filmOffset; return this; }, /** * Sets the FOV by focal length in respect to the current .filmGauge. * * The default film gauge is 35, so that the focal length can be specified for * a 35mm (full frame) camera. * * Values for focal length and film gauge must have the same unit. */ setFocalLength: function ( focalLength ) { // see http://www.bobatkins.com/photography/technical/field_of_view.html const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength; this.fov = MathUtils.RAD2DEG * 2 * Math.atan( vExtentSlope ); this.updateProjectionMatrix(); }, /** * Calculates the focal length from the current .fov and .filmGauge. */ getFocalLength: function () { const vExtentSlope = Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ); return 0.5 * this.getFilmHeight() / vExtentSlope; }, getEffectiveFOV: function () { return MathUtils.RAD2DEG * 2 * Math.atan( Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom ); }, getFilmWidth: function () { // film not completely covered in portrait format (aspect < 1) return this.filmGauge * Math.min( this.aspect, 1 ); }, getFilmHeight: function () { // film not completely covered in landscape format (aspect > 1) return this.filmGauge / Math.max( this.aspect, 1 ); }, /** * Sets an offset in a larger frustum. This is useful for multi-window or * multi-monitor/multi-machine setups. * * For example, if you have 3x2 monitors and each monitor is 1920x1080 and * the monitors are in grid like this * * +---+---+---+ * | A | B | C | * +---+---+---+ * | D | E | F | * +---+---+---+ * * then for each monitor you would call it like this * * const w = 1920; * const h = 1080; * const fullWidth = w * 3; * const fullHeight = h * 2; * * --A-- * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h ); * --B-- * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h ); * --C-- * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h ); * --D-- * camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h ); * --E-- * camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h ); * --F-- * camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h ); * * Note there is no reason monitors have to be the same size or in a grid. */ setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { this.aspect = fullWidth / fullHeight; if ( this.view === null ) { this.view = { enabled: true, fullWidth: 1, fullHeight: 1, offsetX: 0, offsetY: 0, width: 1, height: 1 }; } this.view.enabled = true; this.view.fullWidth = fullWidth; this.view.fullHeight = fullHeight; this.view.offsetX = x; this.view.offsetY = y; this.view.width = width; this.view.height = height; this.updateProjectionMatrix(); }, clearViewOffset: function () { if ( this.view !== null ) { this.view.enabled = false; } this.updateProjectionMatrix(); }, updateProjectionMatrix: function () { const near = this.near; let top = near * Math.tan( MathUtils.DEG2RAD * 0.5 * this.fov ) / this.zoom; let height = 2 * top; let width = this.aspect * height; let left = - 0.5 * width; const view = this.view; if ( this.view !== null && this.view.enabled ) { const fullWidth = view.fullWidth, fullHeight = view.fullHeight; left += view.offsetX * width / fullWidth; top -= view.offsetY * height / fullHeight; width *= view.width / fullWidth; height *= view.height / fullHeight; } const skew = this.filmOffset; if ( skew !== 0 ) left += near * skew / this.getFilmWidth(); this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far ); this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); }, toJSON: function ( meta ) { const data = Object3D.prototype.toJSON.call( this, meta ); data.object.fov = this.fov; data.object.zoom = this.zoom; data.object.near = this.near; data.object.far = this.far; data.object.focus = this.focus; data.object.aspect = this.aspect; if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); data.object.filmGauge = this.filmGauge; data.object.filmOffset = this.filmOffset; return data; } } ); const fov = 90, aspect = 1; function CubeCamera( near, far, renderTarget ) { Object3D.call( this ); this.type = 'CubeCamera'; if ( renderTarget.isWebGLCubeRenderTarget !== true ) { console.error( 'THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.' ); return; } this.renderTarget = renderTarget; const cameraPX = new PerspectiveCamera( fov, aspect, near, far ); cameraPX.layers = this.layers; cameraPX.up.set( 0, - 1, 0 ); cameraPX.lookAt( new Vector3( 1, 0, 0 ) ); this.add( cameraPX ); const cameraNX = new PerspectiveCamera( fov, aspect, near, far ); cameraNX.layers = this.layers; cameraNX.up.set( 0, - 1, 0 ); cameraNX.lookAt( new Vector3( - 1, 0, 0 ) ); this.add( cameraNX ); const cameraPY = new PerspectiveCamera( fov, aspect, near, far ); cameraPY.layers = this.layers; cameraPY.up.set( 0, 0, 1 ); cameraPY.lookAt( new Vector3( 0, 1, 0 ) ); this.add( cameraPY ); const cameraNY = new PerspectiveCamera( fov, aspect, near, far ); cameraNY.layers = this.layers; cameraNY.up.set( 0, 0, - 1 ); cameraNY.lookAt( new Vector3( 0, - 1, 0 ) ); this.add( cameraNY ); const cameraPZ = new PerspectiveCamera( fov, aspect, near, far ); cameraPZ.layers = this.layers; cameraPZ.up.set( 0, - 1, 0 ); cameraPZ.lookAt( new Vector3( 0, 0, 1 ) ); this.add( cameraPZ ); const cameraNZ = new PerspectiveCamera( fov, aspect, near, far ); cameraNZ.layers = this.layers; cameraNZ.up.set( 0, - 1, 0 ); cameraNZ.lookAt( new Vector3( 0, 0, - 1 ) ); this.add( cameraNZ ); this.update = function ( renderer, scene ) { if ( this.parent === null ) this.updateMatrixWorld(); const currentXrEnabled = renderer.xr.enabled; const currentRenderTarget = renderer.getRenderTarget(); renderer.xr.enabled = false; const generateMipmaps = renderTarget.texture.generateMipmaps; renderTarget.texture.generateMipmaps = false; renderer.setRenderTarget( renderTarget, 0 ); renderer.render( scene, cameraPX ); renderer.setRenderTarget( renderTarget, 1 ); renderer.render( scene, cameraNX ); renderer.setRenderTarget( renderTarget, 2 ); renderer.render( scene, cameraPY ); renderer.setRenderTarget( renderTarget, 3 ); renderer.render( scene, cameraNY ); renderer.setRenderTarget( renderTarget, 4 ); renderer.render( scene, cameraPZ ); renderTarget.texture.generateMipmaps = generateMipmaps; renderer.setRenderTarget( renderTarget, 5 ); renderer.render( scene, cameraNZ ); renderer.setRenderTarget( currentRenderTarget ); renderer.xr.enabled = currentXrEnabled; }; } CubeCamera.prototype = Object.create( Object3D.prototype ); CubeCamera.prototype.constructor = CubeCamera; function CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) { images = images !== undefined ? images : []; mapping = mapping !== undefined ? mapping : CubeReflectionMapping; format = format !== undefined ? format : RGBFormat; Texture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); this.flipY = false; // Why CubeTexture._needsFlipEnvMap is necessary: // // By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js) // in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words, // in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly. // three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped // and the flag _needsFlipEnvMap controls this conversion. The flip is not required (and thus _needsFlipEnvMap is set to false) // when using WebGLCubeRenderTarget.texture as a cube texture. this._needsFlipEnvMap = true; } CubeTexture.prototype = Object.create( Texture.prototype ); CubeTexture.prototype.constructor = CubeTexture; CubeTexture.prototype.isCubeTexture = true; Object.defineProperty( CubeTexture.prototype, 'images', { get: function () { return this.image; }, set: function ( value ) { this.image = value; } } ); function WebGLCubeRenderTarget( size, options, dummy ) { if ( Number.isInteger( options ) ) { console.warn( 'THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )' ); options = dummy; } WebGLRenderTarget.call( this, size, size, options ); options = options || {}; this.texture = new CubeTexture( undefined, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding ); this.texture._needsFlipEnvMap = false; } WebGLCubeRenderTarget.prototype = Object.create( WebGLRenderTarget.prototype ); WebGLCubeRenderTarget.prototype.constructor = WebGLCubeRenderTarget; WebGLCubeRenderTarget.prototype.isWebGLCubeRenderTarget = true; WebGLCubeRenderTarget.prototype.fromEquirectangularTexture = function ( renderer, texture ) { this.texture.type = texture.type; this.texture.format = RGBAFormat; // see #18859 this.texture.encoding = texture.encoding; this.texture.generateMipmaps = texture.generateMipmaps; this.texture.minFilter = texture.minFilter; this.texture.magFilter = texture.magFilter; const shader = { uniforms: { tEquirect: { value: null }, }, vertexShader: /* glsl */` varying vec3 vWorldDirection; vec3 transformDirection( in vec3 dir, in mat4 matrix ) { return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); } void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include } `, fragmentShader: /* glsl */` uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { vec3 direction = normalize( vWorldDirection ); vec2 sampleUV = equirectUv( direction ); gl_FragColor = texture2D( tEquirect, sampleUV ); } ` }; const geometry = new BoxBufferGeometry( 5, 5, 5 ); const material = new ShaderMaterial( { name: 'CubemapFromEquirect', uniforms: cloneUniforms( shader.uniforms ), vertexShader: shader.vertexShader, fragmentShader: shader.fragmentShader, side: BackSide, blending: NoBlending } ); material.uniforms.tEquirect.value = texture; const mesh = new Mesh( geometry, material ); const currentMinFilter = texture.minFilter; // Avoid blurred poles if ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter; const camera = new CubeCamera( 1, 10, this ); camera.update( renderer, mesh ); texture.minFilter = currentMinFilter; mesh.geometry.dispose(); mesh.material.dispose(); return this; }; WebGLCubeRenderTarget.prototype.clear = function ( renderer, color, depth, stencil ) { const currentRenderTarget = renderer.getRenderTarget(); for ( let i = 0; i < 6; i ++ ) { renderer.setRenderTarget( this, i ); renderer.clear( color, depth, stencil ); } renderer.setRenderTarget( currentRenderTarget ); }; function DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); this.image = { data: data || null, width: width || 1, height: height || 1 }; this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; this.generateMipmaps = false; this.flipY = false; this.unpackAlignment = 1; this.needsUpdate = true; } DataTexture.prototype = Object.create( Texture.prototype ); DataTexture.prototype.constructor = DataTexture; DataTexture.prototype.isDataTexture = true; const _sphere$1 = /*@__PURE__*/ new Sphere(); const _vector$5 = /*@__PURE__*/ new Vector3(); class Frustum { constructor( p0, p1, p2, p3, p4, p5 ) { this.planes = [ ( p0 !== undefined ) ? p0 : new Plane(), ( p1 !== undefined ) ? p1 : new Plane(), ( p2 !== undefined ) ? p2 : new Plane(), ( p3 !== undefined ) ? p3 : new Plane(), ( p4 !== undefined ) ? p4 : new Plane(), ( p5 !== undefined ) ? p5 : new Plane() ]; } set( p0, p1, p2, p3, p4, p5 ) { const planes = this.planes; planes[ 0 ].copy( p0 ); planes[ 1 ].copy( p1 ); planes[ 2 ].copy( p2 ); planes[ 3 ].copy( p3 ); planes[ 4 ].copy( p4 ); planes[ 5 ].copy( p5 ); return this; } clone() { return new this.constructor().copy( this ); } copy( frustum ) { const planes = this.planes; for ( let i = 0; i < 6; i ++ ) { planes[ i ].copy( frustum.planes[ i ] ); } return this; } setFromProjectionMatrix( m ) { const planes = this.planes; const me = m.elements; const me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ]; const me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ]; const me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ]; const me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ]; planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize(); planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize(); planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize(); planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize(); planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize(); planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize(); return this; } intersectsObject( object ) { const geometry = object.geometry; if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); _sphere$1.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld ); return this.intersectsSphere( _sphere$1 ); } intersectsSprite( sprite ) { _sphere$1.center.set( 0, 0, 0 ); _sphere$1.radius = 0.7071067811865476; _sphere$1.applyMatrix4( sprite.matrixWorld ); return this.intersectsSphere( _sphere$1 ); } intersectsSphere( sphere ) { const planes = this.planes; const center = sphere.center; const negRadius = - sphere.radius; for ( let i = 0; i < 6; i ++ ) { const distance = planes[ i ].distanceToPoint( center ); if ( distance < negRadius ) { return false; } } return true; } intersectsBox( box ) { const planes = this.planes; for ( let i = 0; i < 6; i ++ ) { const plane = planes[ i ]; // corner at max distance _vector$5.x = plane.normal.x > 0 ? box.max.x : box.min.x; _vector$5.y = plane.normal.y > 0 ? box.max.y : box.min.y; _vector$5.z = plane.normal.z > 0 ? box.max.z : box.min.z; if ( plane.distanceToPoint( _vector$5 ) < 0 ) { return false; } } return true; } containsPoint( point ) { const planes = this.planes; for ( let i = 0; i < 6; i ++ ) { if ( planes[ i ].distanceToPoint( point ) < 0 ) { return false; } } return true; } } function WebGLAnimation() { let context = null; let isAnimating = false; let animationLoop = null; let requestId = null; function onAnimationFrame( time, frame ) { animationLoop( time, frame ); requestId = context.requestAnimationFrame( onAnimationFrame ); } return { start: function () { if ( isAnimating === true ) return; if ( animationLoop === null ) return; requestId = context.requestAnimationFrame( onAnimationFrame ); isAnimating = true; }, stop: function () { context.cancelAnimationFrame( requestId ); isAnimating = false; }, setAnimationLoop: function ( callback ) { animationLoop = callback; }, setContext: function ( value ) { context = value; } }; } function WebGLAttributes( gl, capabilities ) { const isWebGL2 = capabilities.isWebGL2; const buffers = new WeakMap(); function createBuffer( attribute, bufferType ) { const array = attribute.array; const usage = attribute.usage; const buffer = gl.createBuffer(); gl.bindBuffer( bufferType, buffer ); gl.bufferData( bufferType, array, usage ); attribute.onUploadCallback(); let type = 5126; if ( array instanceof Float32Array ) { type = 5126; } else if ( array instanceof Float64Array ) { console.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' ); } else if ( array instanceof Uint16Array ) { if ( attribute.isFloat16BufferAttribute ) { if ( isWebGL2 ) { type = 5131; } else { console.warn( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' ); } } else { type = 5123; } } else if ( array instanceof Int16Array ) { type = 5122; } else if ( array instanceof Uint32Array ) { type = 5125; } else if ( array instanceof Int32Array ) { type = 5124; } else if ( array instanceof Int8Array ) { type = 5120; } else if ( array instanceof Uint8Array ) { type = 5121; } return { buffer: buffer, type: type, bytesPerElement: array.BYTES_PER_ELEMENT, version: attribute.version }; } function updateBuffer( buffer, attribute, bufferType ) { const array = attribute.array; const updateRange = attribute.updateRange; gl.bindBuffer( bufferType, buffer ); if ( updateRange.count === - 1 ) { // Not using update ranges gl.bufferSubData( bufferType, 0, array ); } else { if ( isWebGL2 ) { gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array, updateRange.offset, updateRange.count ); } else { gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT, array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) ); } updateRange.count = - 1; // reset range } } // function get( attribute ) { if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; return buffers.get( attribute ); } function remove( attribute ) { if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; const data = buffers.get( attribute ); if ( data ) { gl.deleteBuffer( data.buffer ); buffers.delete( attribute ); } } function update( attribute, bufferType ) { if ( attribute.isGLBufferAttribute ) { const cached = buffers.get( attribute ); if ( ! cached || cached.version < attribute.version ) { buffers.set( attribute, { buffer: attribute.buffer, type: attribute.type, bytesPerElement: attribute.elementSize, version: attribute.version } ); } return; } if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data; const data = buffers.get( attribute ); if ( data === undefined ) { buffers.set( attribute, createBuffer( attribute, bufferType ) ); } else if ( data.version < attribute.version ) { updateBuffer( data.buffer, attribute, bufferType ); data.version = attribute.version; } } return { get: get, remove: remove, update: update }; } class PlaneBufferGeometry extends BufferGeometry { constructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) { super(); this.type = 'PlaneBufferGeometry'; this.parameters = { width: width, height: height, widthSegments: widthSegments, heightSegments: heightSegments }; const width_half = width / 2; const height_half = height / 2; const gridX = Math.floor( widthSegments ); const gridY = Math.floor( heightSegments ); const gridX1 = gridX + 1; const gridY1 = gridY + 1; const segment_width = width / gridX; const segment_height = height / gridY; // const indices = []; const vertices = []; const normals = []; const uvs = []; for ( let iy = 0; iy < gridY1; iy ++ ) { const y = iy * segment_height - height_half; for ( let ix = 0; ix < gridX1; ix ++ ) { const x = ix * segment_width - width_half; vertices.push( x, - y, 0 ); normals.push( 0, 0, 1 ); uvs.push( ix / gridX ); uvs.push( 1 - ( iy / gridY ) ); } } for ( let iy = 0; iy < gridY; iy ++ ) { for ( let ix = 0; ix < gridX; ix ++ ) { const a = ix + gridX1 * iy; const b = ix + gridX1 * ( iy + 1 ); const c = ( ix + 1 ) + gridX1 * ( iy + 1 ); const d = ( ix + 1 ) + gridX1 * iy; indices.push( a, b, d ); indices.push( b, c, d ); } } this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); } } var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif"; var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; var alphatest_fragment = "#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif"; var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif"; var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif"; var begin_vertex = "vec3 transformed = vec3( position );"; var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif"; var bsdfs = "vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif"; var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif"; var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif"; var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif"; var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif"; var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif"; var color_fragment = "#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif"; var color_pars_fragment = "#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif"; var color_pars_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif"; var color_vertex = "#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor.xyz *= color.xyz;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif"; var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}"; var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\t\tvec2 f = fract( uv );\n\t\tuv += 0.5 - f;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\t\t}\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\t\tuv *= texelSize;\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x += texelSize;\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.y += texelSize;\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tuv.x -= texelSize;\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\t\tvec3 tm = mix( tl, tr, f.x );\n\t\tvec3 bm = mix( bl, br, f.x );\n\t\treturn mix( tm, bm, f.y );\n\t}\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= r1 ) {\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\t\t} else if ( roughness >= r4 ) {\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\t\t} else if ( roughness >= r5 ) {\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\t\t} else if ( roughness >= r6 ) {\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif"; var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif"; var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif"; var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif"; var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif"; var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif"; var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );"; var encodings_pars_fragment = "\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}"; var envmap_fragment = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif"; var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif"; var envmap_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif"; var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif"; var envmap_vertex = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif"; var fog_vertex = "#ifdef USE_FOG\n\tfogDepth = - mvPosition.z;\n#endif"; var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif"; var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif"; var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif"; var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}"; var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif"; var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif"; var lights_lambert_vertex = "vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n#ifdef DOUBLE_SIDED\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n#endif\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n#endif"; var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif"; var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif"; var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;"; var lights_toon_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)"; var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;"; var lights_phong_pars_fragment = "varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)"; var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif"; var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}"; var lights_fragment_begin = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif"; var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif"; var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif"; var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif"; var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif"; var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif"; var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif"; var map_fragment = "#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif"; var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif"; var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif"; var map_particle_pars_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif"; var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif"; var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif"; var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif"; var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\t\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\t\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif"; var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif"; var normal_fragment_begin = "#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;"; var normal_fragment_maps = "#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif"; var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif"; var clearcoat_normal_fragment_begin = "#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif"; var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif"; var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif"; var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}"; var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif"; var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;"; var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif"; var dithering_pars_fragment = "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif"; var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif"; var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif"; var shadowmap_pars_fragment = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif"; var shadowmap_pars_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif"; var shadowmap_vertex = "#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\t#endif\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n#endif"; var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}"; var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif"; var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif"; var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif"; var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif"; var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif"; var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif"; var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif"; var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }"; var transmissionmap_fragment = "#ifdef USE_TRANSMISSIONMAP\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n#endif"; var transmissionmap_pars_fragment = "#ifdef USE_TRANSMISSIONMAP\n\tuniform sampler2D transmissionMap;\n#endif"; var uv_pars_fragment = "#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif"; var uv_pars_vertex = "#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif"; var uv_vertex = "#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif"; var uv2_pars_fragment = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif"; var uv2_pars_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif"; var uv2_vertex = "#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif"; var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif"; var background_frag = "uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; var background_vert = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}"; var cube_frag = "#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}"; var cube_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}"; var depth_frag = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}"; var depth_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}"; var distanceRGBA_frag = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}"; var distanceRGBA_vert = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}"; var equirect_frag = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}"; var equirect_vert = "varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}"; var linedashed_frag = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; var linedashed_vert = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshbasic_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshbasic_vert = "#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshlambert_frag = "uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshlambert_vert = "#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshmatcap_frag = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshmatcap_vert = "#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}"; var meshtoon_frag = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshtoon_vert = "#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; var meshphong_frag = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshphong_vert = "#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshphysical_frag = "#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var meshphysical_vert = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}"; var normal_frag = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}"; var normal_vert = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}"; var points_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}"; var points_vert = "uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}"; var shadow_frag = "uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}"; var shadow_vert = "#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}"; var sprite_frag = "uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}"; var sprite_vert = "uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"; const ShaderChunk = { alphamap_fragment: alphamap_fragment, alphamap_pars_fragment: alphamap_pars_fragment, alphatest_fragment: alphatest_fragment, aomap_fragment: aomap_fragment, aomap_pars_fragment: aomap_pars_fragment, begin_vertex: begin_vertex, beginnormal_vertex: beginnormal_vertex, bsdfs: bsdfs, bumpmap_pars_fragment: bumpmap_pars_fragment, clipping_planes_fragment: clipping_planes_fragment, clipping_planes_pars_fragment: clipping_planes_pars_fragment, clipping_planes_pars_vertex: clipping_planes_pars_vertex, clipping_planes_vertex: clipping_planes_vertex, color_fragment: color_fragment, color_pars_fragment: color_pars_fragment, color_pars_vertex: color_pars_vertex, color_vertex: color_vertex, common: common, cube_uv_reflection_fragment: cube_uv_reflection_fragment, defaultnormal_vertex: defaultnormal_vertex, displacementmap_pars_vertex: displacementmap_pars_vertex, displacementmap_vertex: displacementmap_vertex, emissivemap_fragment: emissivemap_fragment, emissivemap_pars_fragment: emissivemap_pars_fragment, encodings_fragment: encodings_fragment, encodings_pars_fragment: encodings_pars_fragment, envmap_fragment: envmap_fragment, envmap_common_pars_fragment: envmap_common_pars_fragment, envmap_pars_fragment: envmap_pars_fragment, envmap_pars_vertex: envmap_pars_vertex, envmap_physical_pars_fragment: envmap_physical_pars_fragment, envmap_vertex: envmap_vertex, fog_vertex: fog_vertex, fog_pars_vertex: fog_pars_vertex, fog_fragment: fog_fragment, fog_pars_fragment: fog_pars_fragment, gradientmap_pars_fragment: gradientmap_pars_fragment, lightmap_fragment: lightmap_fragment, lightmap_pars_fragment: lightmap_pars_fragment, lights_lambert_vertex: lights_lambert_vertex, lights_pars_begin: lights_pars_begin, lights_toon_fragment: lights_toon_fragment, lights_toon_pars_fragment: lights_toon_pars_fragment, lights_phong_fragment: lights_phong_fragment, lights_phong_pars_fragment: lights_phong_pars_fragment, lights_physical_fragment: lights_physical_fragment, lights_physical_pars_fragment: lights_physical_pars_fragment, lights_fragment_begin: lights_fragment_begin, lights_fragment_maps: lights_fragment_maps, lights_fragment_end: lights_fragment_end, logdepthbuf_fragment: logdepthbuf_fragment, logdepthbuf_pars_fragment: logdepthbuf_pars_fragment, logdepthbuf_pars_vertex: logdepthbuf_pars_vertex, logdepthbuf_vertex: logdepthbuf_vertex, map_fragment: map_fragment, map_pars_fragment: map_pars_fragment, map_particle_fragment: map_particle_fragment, map_particle_pars_fragment: map_particle_pars_fragment, metalnessmap_fragment: metalnessmap_fragment, metalnessmap_pars_fragment: metalnessmap_pars_fragment, morphnormal_vertex: morphnormal_vertex, morphtarget_pars_vertex: morphtarget_pars_vertex, morphtarget_vertex: morphtarget_vertex, normal_fragment_begin: normal_fragment_begin, normal_fragment_maps: normal_fragment_maps, normalmap_pars_fragment: normalmap_pars_fragment, clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin, clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps, clearcoat_pars_fragment: clearcoat_pars_fragment, packing: packing, premultiplied_alpha_fragment: premultiplied_alpha_fragment, project_vertex: project_vertex, dithering_fragment: dithering_fragment, dithering_pars_fragment: dithering_pars_fragment, roughnessmap_fragment: roughnessmap_fragment, roughnessmap_pars_fragment: roughnessmap_pars_fragment, shadowmap_pars_fragment: shadowmap_pars_fragment, shadowmap_pars_vertex: shadowmap_pars_vertex, shadowmap_vertex: shadowmap_vertex, shadowmask_pars_fragment: shadowmask_pars_fragment, skinbase_vertex: skinbase_vertex, skinning_pars_vertex: skinning_pars_vertex, skinning_vertex: skinning_vertex, skinnormal_vertex: skinnormal_vertex, specularmap_fragment: specularmap_fragment, specularmap_pars_fragment: specularmap_pars_fragment, tonemapping_fragment: tonemapping_fragment, tonemapping_pars_fragment: tonemapping_pars_fragment, transmissionmap_fragment: transmissionmap_fragment, transmissionmap_pars_fragment: transmissionmap_pars_fragment, uv_pars_fragment: uv_pars_fragment, uv_pars_vertex: uv_pars_vertex, uv_vertex: uv_vertex, uv2_pars_fragment: uv2_pars_fragment, uv2_pars_vertex: uv2_pars_vertex, uv2_vertex: uv2_vertex, worldpos_vertex: worldpos_vertex, background_frag: background_frag, background_vert: background_vert, cube_frag: cube_frag, cube_vert: cube_vert, depth_frag: depth_frag, depth_vert: depth_vert, distanceRGBA_frag: distanceRGBA_frag, distanceRGBA_vert: distanceRGBA_vert, equirect_frag: equirect_frag, equirect_vert: equirect_vert, linedashed_frag: linedashed_frag, linedashed_vert: linedashed_vert, meshbasic_frag: meshbasic_frag, meshbasic_vert: meshbasic_vert, meshlambert_frag: meshlambert_frag, meshlambert_vert: meshlambert_vert, meshmatcap_frag: meshmatcap_frag, meshmatcap_vert: meshmatcap_vert, meshtoon_frag: meshtoon_frag, meshtoon_vert: meshtoon_vert, meshphong_frag: meshphong_frag, meshphong_vert: meshphong_vert, meshphysical_frag: meshphysical_frag, meshphysical_vert: meshphysical_vert, normal_frag: normal_frag, normal_vert: normal_vert, points_frag: points_frag, points_vert: points_vert, shadow_frag: shadow_frag, shadow_vert: shadow_vert, sprite_frag: sprite_frag, sprite_vert: sprite_vert }; /** * Uniforms library for shared webgl shaders */ const UniformsLib = { common: { diffuse: { value: new Color( 0xeeeeee ) }, opacity: { value: 1.0 }, map: { value: null }, uvTransform: { value: new Matrix3() }, uv2Transform: { value: new Matrix3() }, alphaMap: { value: null }, }, specularmap: { specularMap: { value: null }, }, envmap: { envMap: { value: null }, flipEnvMap: { value: - 1 }, reflectivity: { value: 1.0 }, refractionRatio: { value: 0.98 }, maxMipLevel: { value: 0 } }, aomap: { aoMap: { value: null }, aoMapIntensity: { value: 1 } }, lightmap: { lightMap: { value: null }, lightMapIntensity: { value: 1 } }, emissivemap: { emissiveMap: { value: null } }, bumpmap: { bumpMap: { value: null }, bumpScale: { value: 1 } }, normalmap: { normalMap: { value: null }, normalScale: { value: new Vector2( 1, 1 ) } }, displacementmap: { displacementMap: { value: null }, displacementScale: { value: 1 }, displacementBias: { value: 0 } }, roughnessmap: { roughnessMap: { value: null } }, metalnessmap: { metalnessMap: { value: null } }, gradientmap: { gradientMap: { value: null } }, fog: { fogDensity: { value: 0.00025 }, fogNear: { value: 1 }, fogFar: { value: 2000 }, fogColor: { value: new Color( 0xffffff ) } }, lights: { ambientLightColor: { value: [] }, lightProbe: { value: [] }, directionalLights: { value: [], properties: { direction: {}, color: {} } }, directionalLightShadows: { value: [], properties: { shadowBias: {}, shadowNormalBias: {}, shadowRadius: {}, shadowMapSize: {} } }, directionalShadowMap: { value: [] }, directionalShadowMatrix: { value: [] }, spotLights: { value: [], properties: { color: {}, position: {}, direction: {}, distance: {}, coneCos: {}, penumbraCos: {}, decay: {} } }, spotLightShadows: { value: [], properties: { shadowBias: {}, shadowNormalBias: {}, shadowRadius: {}, shadowMapSize: {} } }, spotShadowMap: { value: [] }, spotShadowMatrix: { value: [] }, pointLights: { value: [], properties: { color: {}, position: {}, decay: {}, distance: {} } }, pointLightShadows: { value: [], properties: { shadowBias: {}, shadowNormalBias: {}, shadowRadius: {}, shadowMapSize: {}, shadowCameraNear: {}, shadowCameraFar: {} } }, pointShadowMap: { value: [] }, pointShadowMatrix: { value: [] }, hemisphereLights: { value: [], properties: { direction: {}, skyColor: {}, groundColor: {} } }, // TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src rectAreaLights: { value: [], properties: { color: {}, position: {}, width: {}, height: {} } }, ltc_1: { value: null }, ltc_2: { value: null } }, points: { diffuse: { value: new Color( 0xeeeeee ) }, opacity: { value: 1.0 }, size: { value: 1.0 }, scale: { value: 1.0 }, map: { value: null }, alphaMap: { value: null }, uvTransform: { value: new Matrix3() } }, sprite: { diffuse: { value: new Color( 0xeeeeee ) }, opacity: { value: 1.0 }, center: { value: new Vector2( 0.5, 0.5 ) }, rotation: { value: 0.0 }, map: { value: null }, alphaMap: { value: null }, uvTransform: { value: new Matrix3() } } }; const ShaderLib = { basic: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.fog ] ), vertexShader: ShaderChunk.meshbasic_vert, fragmentShader: ShaderChunk.meshbasic_frag }, lambert: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.fog, UniformsLib.lights, { emissive: { value: new Color( 0x000000 ) } } ] ), vertexShader: ShaderChunk.meshlambert_vert, fragmentShader: ShaderChunk.meshlambert_frag }, phong: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.specularmap, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.fog, UniformsLib.lights, { emissive: { value: new Color( 0x000000 ) }, specular: { value: new Color( 0x111111 ) }, shininess: { value: 30 } } ] ), vertexShader: ShaderChunk.meshphong_vert, fragmentShader: ShaderChunk.meshphong_frag }, standard: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.envmap, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.roughnessmap, UniformsLib.metalnessmap, UniformsLib.fog, UniformsLib.lights, { emissive: { value: new Color( 0x000000 ) }, roughness: { value: 1.0 }, metalness: { value: 0.0 }, envMapIntensity: { value: 1 } // temporary } ] ), vertexShader: ShaderChunk.meshphysical_vert, fragmentShader: ShaderChunk.meshphysical_frag }, toon: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.aomap, UniformsLib.lightmap, UniformsLib.emissivemap, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.gradientmap, UniformsLib.fog, UniformsLib.lights, { emissive: { value: new Color( 0x000000 ) } } ] ), vertexShader: ShaderChunk.meshtoon_vert, fragmentShader: ShaderChunk.meshtoon_frag }, matcap: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, UniformsLib.fog, { matcap: { value: null } } ] ), vertexShader: ShaderChunk.meshmatcap_vert, fragmentShader: ShaderChunk.meshmatcap_frag }, points: { uniforms: mergeUniforms( [ UniformsLib.points, UniformsLib.fog ] ), vertexShader: ShaderChunk.points_vert, fragmentShader: ShaderChunk.points_frag }, dashed: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.fog, { scale: { value: 1 }, dashSize: { value: 1 }, totalSize: { value: 2 } } ] ), vertexShader: ShaderChunk.linedashed_vert, fragmentShader: ShaderChunk.linedashed_frag }, depth: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.displacementmap ] ), vertexShader: ShaderChunk.depth_vert, fragmentShader: ShaderChunk.depth_frag }, normal: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.bumpmap, UniformsLib.normalmap, UniformsLib.displacementmap, { opacity: { value: 1.0 } } ] ), vertexShader: ShaderChunk.normal_vert, fragmentShader: ShaderChunk.normal_frag }, sprite: { uniforms: mergeUniforms( [ UniformsLib.sprite, UniformsLib.fog ] ), vertexShader: ShaderChunk.sprite_vert, fragmentShader: ShaderChunk.sprite_frag }, background: { uniforms: { uvTransform: { value: new Matrix3() }, t2D: { value: null }, }, vertexShader: ShaderChunk.background_vert, fragmentShader: ShaderChunk.background_frag }, /* ------------------------------------------------------------------------- // Cube map shader ------------------------------------------------------------------------- */ cube: { uniforms: mergeUniforms( [ UniformsLib.envmap, { opacity: { value: 1.0 } } ] ), vertexShader: ShaderChunk.cube_vert, fragmentShader: ShaderChunk.cube_frag }, equirect: { uniforms: { tEquirect: { value: null }, }, vertexShader: ShaderChunk.equirect_vert, fragmentShader: ShaderChunk.equirect_frag }, distanceRGBA: { uniforms: mergeUniforms( [ UniformsLib.common, UniformsLib.displacementmap, { referencePosition: { value: new Vector3() }, nearDistance: { value: 1 }, farDistance: { value: 1000 } } ] ), vertexShader: ShaderChunk.distanceRGBA_vert, fragmentShader: ShaderChunk.distanceRGBA_frag }, shadow: { uniforms: mergeUniforms( [ UniformsLib.lights, UniformsLib.fog, { color: { value: new Color( 0x00000 ) }, opacity: { value: 1.0 } }, ] ), vertexShader: ShaderChunk.shadow_vert, fragmentShader: ShaderChunk.shadow_frag } }; ShaderLib.physical = { uniforms: mergeUniforms( [ ShaderLib.standard.uniforms, { clearcoat: { value: 0 }, clearcoatMap: { value: null }, clearcoatRoughness: { value: 0 }, clearcoatRoughnessMap: { value: null }, clearcoatNormalScale: { value: new Vector2( 1, 1 ) }, clearcoatNormalMap: { value: null }, sheen: { value: new Color( 0x000000 ) }, transmission: { value: 0 }, transmissionMap: { value: null }, } ] ), vertexShader: ShaderChunk.meshphysical_vert, fragmentShader: ShaderChunk.meshphysical_frag }; function WebGLBackground( renderer, cubemaps, state, objects, premultipliedAlpha ) { const clearColor = new Color( 0x000000 ); let clearAlpha = 0; let planeMesh; let boxMesh; let currentBackground = null; let currentBackgroundVersion = 0; let currentTonemapping = null; function render( renderList, scene, camera, forceClear ) { let background = scene.isScene === true ? scene.background : null; if ( background && background.isTexture ) { background = cubemaps.get( background ); } // Ignore background in AR // TODO: Reconsider this. const xr = renderer.xr; const session = xr.getSession && xr.getSession(); if ( session && session.environmentBlendMode === 'additive' ) { background = null; } if ( background === null ) { setClear( clearColor, clearAlpha ); } else if ( background && background.isColor ) { setClear( background, 1 ); forceClear = true; } if ( renderer.autoClear || forceClear ) { renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil ); } if ( background && ( background.isCubeTexture || background.isWebGLCubeRenderTarget || background.mapping === CubeUVReflectionMapping ) ) { if ( boxMesh === undefined ) { boxMesh = new Mesh( new BoxBufferGeometry( 1, 1, 1 ), new ShaderMaterial( { name: 'BackgroundCubeMaterial', uniforms: cloneUniforms( ShaderLib.cube.uniforms ), vertexShader: ShaderLib.cube.vertexShader, fragmentShader: ShaderLib.cube.fragmentShader, side: BackSide, depthTest: false, depthWrite: false, fog: false } ) ); boxMesh.geometry.deleteAttribute( 'normal' ); boxMesh.geometry.deleteAttribute( 'uv' ); boxMesh.onBeforeRender = function ( renderer, scene, camera ) { this.matrixWorld.copyPosition( camera.matrixWorld ); }; // enable code injection for non-built-in material Object.defineProperty( boxMesh.material, 'envMap', { get: function () { return this.uniforms.envMap.value; } } ); objects.update( boxMesh ); } if ( background.isWebGLCubeRenderTarget ) { // TODO Deprecate background = background.texture; } boxMesh.material.uniforms.envMap.value = background; boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background._needsFlipEnvMap ) ? - 1 : 1; if ( currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping ) { boxMesh.material.needsUpdate = true; currentBackground = background; currentBackgroundVersion = background.version; currentTonemapping = renderer.toneMapping; } // push to the pre-sorted opaque render list renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null ); } else if ( background && background.isTexture ) { if ( planeMesh === undefined ) { planeMesh = new Mesh( new PlaneBufferGeometry( 2, 2 ), new ShaderMaterial( { name: 'BackgroundMaterial', uniforms: cloneUniforms( ShaderLib.background.uniforms ), vertexShader: ShaderLib.background.vertexShader, fragmentShader: ShaderLib.background.fragmentShader, side: FrontSide, depthTest: false, depthWrite: false, fog: false } ) ); planeMesh.geometry.deleteAttribute( 'normal' ); // enable code injection for non-built-in material Object.defineProperty( planeMesh.material, 'map', { get: function () { return this.uniforms.t2D.value; } } ); objects.update( planeMesh ); } planeMesh.material.uniforms.t2D.value = background; if ( background.matrixAutoUpdate === true ) { background.updateMatrix(); } planeMesh.material.uniforms.uvTransform.value.copy( background.matrix ); if ( currentBackground !== background || currentBackgroundVersion !== background.version || currentTonemapping !== renderer.toneMapping ) { planeMesh.material.needsUpdate = true; currentBackground = background; currentBackgroundVersion = background.version; currentTonemapping = renderer.toneMapping; } // push to the pre-sorted opaque render list renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null ); } } function setClear( color, alpha ) { state.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha ); } return { getClearColor: function () { return clearColor; }, setClearColor: function ( color, alpha = 1 ) { clearColor.set( color ); clearAlpha = alpha; setClear( clearColor, clearAlpha ); }, getClearAlpha: function () { return clearAlpha; }, setClearAlpha: function ( alpha ) { clearAlpha = alpha; setClear( clearColor, clearAlpha ); }, render: render }; } function WebGLBindingStates( gl, extensions, attributes, capabilities ) { const maxVertexAttributes = gl.getParameter( 34921 ); const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' ); const vaoAvailable = capabilities.isWebGL2 || extension !== null; const bindingStates = {}; const defaultState = createBindingState( null ); let currentState = defaultState; function setup( object, material, program, geometry, index ) { let updateBuffers = false; if ( vaoAvailable ) { const state = getBindingState( geometry, program, material ); if ( currentState !== state ) { currentState = state; bindVertexArrayObject( currentState.object ); } updateBuffers = needsUpdate( geometry, index ); if ( updateBuffers ) saveCache( geometry, index ); } else { const wireframe = ( material.wireframe === true ); if ( currentState.geometry !== geometry.id || currentState.program !== program.id || currentState.wireframe !== wireframe ) { currentState.geometry = geometry.id; currentState.program = program.id; currentState.wireframe = wireframe; updateBuffers = true; } } if ( object.isInstancedMesh === true ) { updateBuffers = true; } if ( index !== null ) { attributes.update( index, 34963 ); } if ( updateBuffers ) { setupVertexAttributes( object, material, program, geometry ); if ( index !== null ) { gl.bindBuffer( 34963, attributes.get( index ).buffer ); } } } function createVertexArrayObject() { if ( capabilities.isWebGL2 ) return gl.createVertexArray(); return extension.createVertexArrayOES(); } function bindVertexArrayObject( vao ) { if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao ); return extension.bindVertexArrayOES( vao ); } function deleteVertexArrayObject( vao ) { if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao ); return extension.deleteVertexArrayOES( vao ); } function getBindingState( geometry, program, material ) { const wireframe = ( material.wireframe === true ); let programMap = bindingStates[ geometry.id ]; if ( programMap === undefined ) { programMap = {}; bindingStates[ geometry.id ] = programMap; } let stateMap = programMap[ program.id ]; if ( stateMap === undefined ) { stateMap = {}; programMap[ program.id ] = stateMap; } let state = stateMap[ wireframe ]; if ( state === undefined ) { state = createBindingState( createVertexArrayObject() ); stateMap[ wireframe ] = state; } return state; } function createBindingState( vao ) { const newAttributes = []; const enabledAttributes = []; const attributeDivisors = []; for ( let i = 0; i < maxVertexAttributes; i ++ ) { newAttributes[ i ] = 0; enabledAttributes[ i ] = 0; attributeDivisors[ i ] = 0; } return { // for backward compatibility on non-VAO support browser geometry: null, program: null, wireframe: false, newAttributes: newAttributes, enabledAttributes: enabledAttributes, attributeDivisors: attributeDivisors, object: vao, attributes: {}, index: null }; } function needsUpdate( geometry, index ) { const cachedAttributes = currentState.attributes; const geometryAttributes = geometry.attributes; let attributesNum = 0; for ( const key in geometryAttributes ) { const cachedAttribute = cachedAttributes[ key ]; const geometryAttribute = geometryAttributes[ key ]; if ( cachedAttribute === undefined ) return true; if ( cachedAttribute.attribute !== geometryAttribute ) return true; if ( cachedAttribute.data !== geometryAttribute.data ) return true; attributesNum ++; } if ( currentState.attributesNum !== attributesNum ) return true; if ( currentState.index !== index ) return true; return false; } function saveCache( geometry, index ) { const cache = {}; const attributes = geometry.attributes; let attributesNum = 0; for ( const key in attributes ) { const attribute = attributes[ key ]; const data = {}; data.attribute = attribute; if ( attribute.data ) { data.data = attribute.data; } cache[ key ] = data; attributesNum ++; } currentState.attributes = cache; currentState.attributesNum = attributesNum; currentState.index = index; } function initAttributes() { const newAttributes = currentState.newAttributes; for ( let i = 0, il = newAttributes.length; i < il; i ++ ) { newAttributes[ i ] = 0; } } function enableAttribute( attribute ) { enableAttributeAndDivisor( attribute, 0 ); } function enableAttributeAndDivisor( attribute, meshPerAttribute ) { const newAttributes = currentState.newAttributes; const enabledAttributes = currentState.enabledAttributes; const attributeDivisors = currentState.attributeDivisors; newAttributes[ attribute ] = 1; if ( enabledAttributes[ attribute ] === 0 ) { gl.enableVertexAttribArray( attribute ); enabledAttributes[ attribute ] = 1; } if ( attributeDivisors[ attribute ] !== meshPerAttribute ) { const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' ); extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute ); attributeDivisors[ attribute ] = meshPerAttribute; } } function disableUnusedAttributes() { const newAttributes = currentState.newAttributes; const enabledAttributes = currentState.enabledAttributes; for ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) { if ( enabledAttributes[ i ] !== newAttributes[ i ] ) { gl.disableVertexAttribArray( i ); enabledAttributes[ i ] = 0; } } } function vertexAttribPointer( index, size, type, normalized, stride, offset ) { if ( capabilities.isWebGL2 === true && ( type === 5124 || type === 5125 ) ) { gl.vertexAttribIPointer( index, size, type, stride, offset ); } else { gl.vertexAttribPointer( index, size, type, normalized, stride, offset ); } } function setupVertexAttributes( object, material, program, geometry ) { if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) { if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return; } initAttributes(); const geometryAttributes = geometry.attributes; const programAttributes = program.getAttributes(); const materialDefaultAttributeValues = material.defaultAttributeValues; for ( const name in programAttributes ) { const programAttribute = programAttributes[ name ]; if ( programAttribute >= 0 ) { const geometryAttribute = geometryAttributes[ name ]; if ( geometryAttribute !== undefined ) { const normalized = geometryAttribute.normalized; const size = geometryAttribute.itemSize; const attribute = attributes.get( geometryAttribute ); // TODO Attribute may not be available on context restore if ( attribute === undefined ) continue; const buffer = attribute.buffer; const type = attribute.type; const bytesPerElement = attribute.bytesPerElement; if ( geometryAttribute.isInterleavedBufferAttribute ) { const data = geometryAttribute.data; const stride = data.stride; const offset = geometryAttribute.offset; if ( data && data.isInstancedInterleavedBuffer ) { enableAttributeAndDivisor( programAttribute, data.meshPerAttribute ); if ( geometry._maxInstanceCount === undefined ) { geometry._maxInstanceCount = data.meshPerAttribute * data.count; } } else { enableAttribute( programAttribute ); } gl.bindBuffer( 34962, buffer ); vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement ); } else { if ( geometryAttribute.isInstancedBufferAttribute ) { enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute ); if ( geometry._maxInstanceCount === undefined ) { geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count; } } else { enableAttribute( programAttribute ); } gl.bindBuffer( 34962, buffer ); vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 ); } } else if ( name === 'instanceMatrix' ) { const attribute = attributes.get( object.instanceMatrix ); // TODO Attribute may not be available on context restore if ( attribute === undefined ) continue; const buffer = attribute.buffer; const type = attribute.type; enableAttributeAndDivisor( programAttribute + 0, 1 ); enableAttributeAndDivisor( programAttribute + 1, 1 ); enableAttributeAndDivisor( programAttribute + 2, 1 ); enableAttributeAndDivisor( programAttribute + 3, 1 ); gl.bindBuffer( 34962, buffer ); gl.vertexAttribPointer( programAttribute + 0, 4, type, false, 64, 0 ); gl.vertexAttribPointer( programAttribute + 1, 4, type, false, 64, 16 ); gl.vertexAttribPointer( programAttribute + 2, 4, type, false, 64, 32 ); gl.vertexAttribPointer( programAttribute + 3, 4, type, false, 64, 48 ); } else if ( name === 'instanceColor' ) { const attribute = attributes.get( object.instanceColor ); // TODO Attribute may not be available on context restore if ( attribute === undefined ) continue; const buffer = attribute.buffer; const type = attribute.type; enableAttributeAndDivisor( programAttribute, 1 ); gl.bindBuffer( 34962, buffer ); gl.vertexAttribPointer( programAttribute, 3, type, false, 12, 0 ); } else if ( materialDefaultAttributeValues !== undefined ) { const value = materialDefaultAttributeValues[ name ]; if ( value !== undefined ) { switch ( value.length ) { case 2: gl.vertexAttrib2fv( programAttribute, value ); break; case 3: gl.vertexAttrib3fv( programAttribute, value ); break; case 4: gl.vertexAttrib4fv( programAttribute, value ); break; default: gl.vertexAttrib1fv( programAttribute, value ); } } } } } disableUnusedAttributes(); } function dispose() { reset(); for ( const geometryId in bindingStates ) { const programMap = bindingStates[ geometryId ]; for ( const programId in programMap ) { const stateMap = programMap[ programId ]; for ( const wireframe in stateMap ) { deleteVertexArrayObject( stateMap[ wireframe ].object ); delete stateMap[ wireframe ]; } delete programMap[ programId ]; } delete bindingStates[ geometryId ]; } } function releaseStatesOfGeometry( geometry ) { if ( bindingStates[ geometry.id ] === undefined ) return; const programMap = bindingStates[ geometry.id ]; for ( const programId in programMap ) { const stateMap = programMap[ programId ]; for ( const wireframe in stateMap ) { deleteVertexArrayObject( stateMap[ wireframe ].object ); delete stateMap[ wireframe ]; } delete programMap[ programId ]; } delete bindingStates[ geometry.id ]; } function releaseStatesOfProgram( program ) { for ( const geometryId in bindingStates ) { const programMap = bindingStates[ geometryId ]; if ( programMap[ program.id ] === undefined ) continue; const stateMap = programMap[ program.id ]; for ( const wireframe in stateMap ) { deleteVertexArrayObject( stateMap[ wireframe ].object ); delete stateMap[ wireframe ]; } delete programMap[ program.id ]; } } function reset() { resetDefaultState(); if ( currentState === defaultState ) return; currentState = defaultState; bindVertexArrayObject( currentState.object ); } // for backward-compatilibity function resetDefaultState() { defaultState.geometry = null; defaultState.program = null; defaultState.wireframe = false; } return { setup: setup, reset: reset, resetDefaultState: resetDefaultState, dispose: dispose, releaseStatesOfGeometry: releaseStatesOfGeometry, releaseStatesOfProgram: releaseStatesOfProgram, initAttributes: initAttributes, enableAttribute: enableAttribute, disableUnusedAttributes: disableUnusedAttributes }; } function WebGLBufferRenderer( gl, extensions, info, capabilities ) { const isWebGL2 = capabilities.isWebGL2; let mode; function setMode( value ) { mode = value; } function render( start, count ) { gl.drawArrays( mode, start, count ); info.update( count, mode, 1 ); } function renderInstances( start, count, primcount ) { if ( primcount === 0 ) return; let extension, methodName; if ( isWebGL2 ) { extension = gl; methodName = 'drawArraysInstanced'; } else { extension = extensions.get( 'ANGLE_instanced_arrays' ); methodName = 'drawArraysInstancedANGLE'; if ( extension === null ) { console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); return; } } extension[ methodName ]( mode, start, count, primcount ); info.update( count, mode, primcount ); } // this.setMode = setMode; this.render = render; this.renderInstances = renderInstances; } function WebGLCapabilities( gl, extensions, parameters ) { let maxAnisotropy; function getMaxAnisotropy() { if ( maxAnisotropy !== undefined ) return maxAnisotropy; const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); if ( extension !== null ) { maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT ); } else { maxAnisotropy = 0; } return maxAnisotropy; } function getMaxPrecision( precision ) { if ( precision === 'highp' ) { if ( gl.getShaderPrecisionFormat( 35633, 36338 ).precision > 0 && gl.getShaderPrecisionFormat( 35632, 36338 ).precision > 0 ) { return 'highp'; } precision = 'mediump'; } if ( precision === 'mediump' ) { if ( gl.getShaderPrecisionFormat( 35633, 36337 ).precision > 0 && gl.getShaderPrecisionFormat( 35632, 36337 ).precision > 0 ) { return 'mediump'; } } return 'lowp'; } /* eslint-disable no-undef */ const isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext ) || ( typeof WebGL2ComputeRenderingContext !== 'undefined' && gl instanceof WebGL2ComputeRenderingContext ); /* eslint-enable no-undef */ let precision = parameters.precision !== undefined ? parameters.precision : 'highp'; const maxPrecision = getMaxPrecision( precision ); if ( maxPrecision !== precision ) { console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' ); precision = maxPrecision; } const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true; const maxTextures = gl.getParameter( 34930 ); const maxVertexTextures = gl.getParameter( 35660 ); const maxTextureSize = gl.getParameter( 3379 ); const maxCubemapSize = gl.getParameter( 34076 ); const maxAttributes = gl.getParameter( 34921 ); const maxVertexUniforms = gl.getParameter( 36347 ); const maxVaryings = gl.getParameter( 36348 ); const maxFragmentUniforms = gl.getParameter( 36349 ); const vertexTextures = maxVertexTextures > 0; const floatFragmentTextures = isWebGL2 || !! extensions.get( 'OES_texture_float' ); const floatVertexTextures = vertexTextures && floatFragmentTextures; const maxSamples = isWebGL2 ? gl.getParameter( 36183 ) : 0; return { isWebGL2: isWebGL2, getMaxAnisotropy: getMaxAnisotropy, getMaxPrecision: getMaxPrecision, precision: precision, logarithmicDepthBuffer: logarithmicDepthBuffer, maxTextures: maxTextures, maxVertexTextures: maxVertexTextures, maxTextureSize: maxTextureSize, maxCubemapSize: maxCubemapSize, maxAttributes: maxAttributes, maxVertexUniforms: maxVertexUniforms, maxVaryings: maxVaryings, maxFragmentUniforms: maxFragmentUniforms, vertexTextures: vertexTextures, floatFragmentTextures: floatFragmentTextures, floatVertexTextures: floatVertexTextures, maxSamples: maxSamples }; } function WebGLClipping( properties ) { const scope = this; let globalState = null, numGlobalPlanes = 0, localClippingEnabled = false, renderingShadows = false; const plane = new Plane(), viewNormalMatrix = new Matrix3(), uniform = { value: null, needsUpdate: false }; this.uniform = uniform; this.numPlanes = 0; this.numIntersection = 0; this.init = function ( planes, enableLocalClipping, camera ) { const enabled = planes.length !== 0 || enableLocalClipping || // enable state of previous frame - the clipping code has to // run another frame in order to reset the state: numGlobalPlanes !== 0 || localClippingEnabled; localClippingEnabled = enableLocalClipping; globalState = projectPlanes( planes, camera, 0 ); numGlobalPlanes = planes.length; return enabled; }; this.beginShadows = function () { renderingShadows = true; projectPlanes( null ); }; this.endShadows = function () { renderingShadows = false; resetGlobalState(); }; this.setState = function ( material, camera, useCache ) { const planes = material.clippingPlanes, clipIntersection = material.clipIntersection, clipShadows = material.clipShadows; const materialProperties = properties.get( material ); if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) { // there's no local clipping if ( renderingShadows ) { // there's no global clipping projectPlanes( null ); } else { resetGlobalState(); } } else { const nGlobal = renderingShadows ? 0 : numGlobalPlanes, lGlobal = nGlobal * 4; let dstArray = materialProperties.clippingState || null; uniform.value = dstArray; // ensure unique state dstArray = projectPlanes( planes, camera, lGlobal, useCache ); for ( let i = 0; i !== lGlobal; ++ i ) { dstArray[ i ] = globalState[ i ]; } materialProperties.clippingState = dstArray; this.numIntersection = clipIntersection ? this.numPlanes : 0; this.numPlanes += nGlobal; } }; function resetGlobalState() { if ( uniform.value !== globalState ) { uniform.value = globalState; uniform.needsUpdate = numGlobalPlanes > 0; } scope.numPlanes = numGlobalPlanes; scope.numIntersection = 0; } function projectPlanes( planes, camera, dstOffset, skipTransform ) { const nPlanes = planes !== null ? planes.length : 0; let dstArray = null; if ( nPlanes !== 0 ) { dstArray = uniform.value; if ( skipTransform !== true || dstArray === null ) { const flatSize = dstOffset + nPlanes * 4, viewMatrix = camera.matrixWorldInverse; viewNormalMatrix.getNormalMatrix( viewMatrix ); if ( dstArray === null || dstArray.length < flatSize ) { dstArray = new Float32Array( flatSize ); } for ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) { plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix ); plane.normal.toArray( dstArray, i4 ); dstArray[ i4 + 3 ] = plane.constant; } } uniform.value = dstArray; uniform.needsUpdate = true; } scope.numPlanes = nPlanes; scope.numIntersection = 0; return dstArray; } } function WebGLCubeMaps( renderer ) { let cubemaps = new WeakMap(); function mapTextureMapping( texture, mapping ) { if ( mapping === EquirectangularReflectionMapping ) { texture.mapping = CubeReflectionMapping; } else if ( mapping === EquirectangularRefractionMapping ) { texture.mapping = CubeRefractionMapping; } return texture; } function get( texture ) { if ( texture && texture.isTexture ) { const mapping = texture.mapping; if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) { if ( cubemaps.has( texture ) ) { const cubemap = cubemaps.get( texture ).texture; return mapTextureMapping( cubemap, texture.mapping ); } else { const image = texture.image; if ( image && image.height > 0 ) { const currentRenderList = renderer.getRenderList(); const currentRenderTarget = renderer.getRenderTarget(); const renderTarget = new WebGLCubeRenderTarget( image.height / 2 ); renderTarget.fromEquirectangularTexture( renderer, texture ); cubemaps.set( texture, renderTarget ); renderer.setRenderTarget( currentRenderTarget ); renderer.setRenderList( currentRenderList ); texture.addEventListener( 'dispose', onTextureDispose ); return mapTextureMapping( renderTarget.texture, texture.mapping ); } else { // image not yet ready. try the conversion next frame return null; } } } } return texture; } function onTextureDispose( event ) { const texture = event.target; texture.removeEventListener( 'dispose', onTextureDispose ); const cubemap = cubemaps.get( texture ); if ( cubemap !== undefined ) { cubemaps.delete( texture ); cubemap.dispose(); } } function dispose() { cubemaps = new WeakMap(); } return { get: get, dispose: dispose }; } function WebGLExtensions( gl ) { const extensions = {}; return { has: function ( name ) { if ( extensions[ name ] !== undefined ) { return extensions[ name ] !== null; } let extension; switch ( name ) { case 'WEBGL_depth_texture': extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' ); break; case 'EXT_texture_filter_anisotropic': extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' ); break; case 'WEBGL_compressed_texture_s3tc': extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' ); break; case 'WEBGL_compressed_texture_pvrtc': extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); break; default: extension = gl.getExtension( name ); } extensions[ name ] = extension; return extension !== null; }, get: function ( name ) { if ( ! this.has( name ) ) { console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' ); } return extensions[ name ]; } }; } function WebGLGeometries( gl, attributes, info, bindingStates ) { const geometries = new WeakMap(); const wireframeAttributes = new WeakMap(); function onGeometryDispose( event ) { const geometry = event.target; const buffergeometry = geometries.get( geometry ); if ( buffergeometry.index !== null ) { attributes.remove( buffergeometry.index ); } for ( const name in buffergeometry.attributes ) { attributes.remove( buffergeometry.attributes[ name ] ); } geometry.removeEventListener( 'dispose', onGeometryDispose ); geometries.delete( geometry ); const attribute = wireframeAttributes.get( buffergeometry ); if ( attribute ) { attributes.remove( attribute ); wireframeAttributes.delete( buffergeometry ); } bindingStates.releaseStatesOfGeometry( buffergeometry ); if ( geometry.isInstancedBufferGeometry === true ) { delete geometry._maxInstanceCount; } // info.memory.geometries --; } function get( object, geometry ) { let buffergeometry = geometries.get( geometry ); if ( buffergeometry ) return buffergeometry; geometry.addEventListener( 'dispose', onGeometryDispose ); if ( geometry.isBufferGeometry ) { buffergeometry = geometry; } else if ( geometry.isGeometry ) { if ( geometry._bufferGeometry === undefined ) { geometry._bufferGeometry = new BufferGeometry().setFromObject( object ); } buffergeometry = geometry._bufferGeometry; } geometries.set( geometry, buffergeometry ); info.memory.geometries ++; return buffergeometry; } function update( geometry ) { const geometryAttributes = geometry.attributes; // Updating index buffer in VAO now. See WebGLBindingStates. for ( const name in geometryAttributes ) { attributes.update( geometryAttributes[ name ], 34962 ); } // morph targets const morphAttributes = geometry.morphAttributes; for ( const name in morphAttributes ) { const array = morphAttributes[ name ]; for ( let i = 0, l = array.length; i < l; i ++ ) { attributes.update( array[ i ], 34962 ); } } } function updateWireframeAttribute( geometry ) { const indices = []; const geometryIndex = geometry.index; const geometryPosition = geometry.attributes.position; let version = 0; if ( geometryIndex !== null ) { const array = geometryIndex.array; version = geometryIndex.version; for ( let i = 0, l = array.length; i < l; i += 3 ) { const a = array[ i + 0 ]; const b = array[ i + 1 ]; const c = array[ i + 2 ]; indices.push( a, b, b, c, c, a ); } } else { const array = geometryPosition.array; version = geometryPosition.version; for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) { const a = i + 0; const b = i + 1; const c = i + 2; indices.push( a, b, b, c, c, a ); } } const attribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 ); attribute.version = version; // Updating index buffer in VAO now. See WebGLBindingStates // const previousAttribute = wireframeAttributes.get( geometry ); if ( previousAttribute ) attributes.remove( previousAttribute ); // wireframeAttributes.set( geometry, attribute ); } function getWireframeAttribute( geometry ) { const currentAttribute = wireframeAttributes.get( geometry ); if ( currentAttribute ) { const geometryIndex = geometry.index; if ( geometryIndex !== null ) { // if the attribute is obsolete, create a new one if ( currentAttribute.version < geometryIndex.version ) { updateWireframeAttribute( geometry ); } } } else { updateWireframeAttribute( geometry ); } return wireframeAttributes.get( geometry ); } return { get: get, update: update, getWireframeAttribute: getWireframeAttribute }; } function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) { const isWebGL2 = capabilities.isWebGL2; let mode; function setMode( value ) { mode = value; } let type, bytesPerElement; function setIndex( value ) { type = value.type; bytesPerElement = value.bytesPerElement; } function render( start, count ) { gl.drawElements( mode, count, type, start * bytesPerElement ); info.update( count, mode, 1 ); } function renderInstances( start, count, primcount ) { if ( primcount === 0 ) return; let extension, methodName; if ( isWebGL2 ) { extension = gl; methodName = 'drawElementsInstanced'; } else { extension = extensions.get( 'ANGLE_instanced_arrays' ); methodName = 'drawElementsInstancedANGLE'; if ( extension === null ) { console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' ); return; } } extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount ); info.update( count, mode, primcount ); } // this.setMode = setMode; this.setIndex = setIndex; this.render = render; this.renderInstances = renderInstances; } function WebGLInfo( gl ) { const memory = { geometries: 0, textures: 0 }; const render = { frame: 0, calls: 0, triangles: 0, points: 0, lines: 0 }; function update( count, mode, instanceCount ) { render.calls ++; switch ( mode ) { case 4: render.triangles += instanceCount * ( count / 3 ); break; case 1: render.lines += instanceCount * ( count / 2 ); break; case 3: render.lines += instanceCount * ( count - 1 ); break; case 2: render.lines += instanceCount * count; break; case 0: render.points += instanceCount * count; break; default: console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode ); break; } } function reset() { render.frame ++; render.calls = 0; render.triangles = 0; render.points = 0; render.lines = 0; } return { memory: memory, render: render, programs: null, autoReset: true, reset: reset, update: update }; } function numericalSort( a, b ) { return a[ 0 ] - b[ 0 ]; } function absNumericalSort( a, b ) { return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] ); } function WebGLMorphtargets( gl ) { const influencesList = {}; const morphInfluences = new Float32Array( 8 ); const workInfluences = []; for ( let i = 0; i < 8; i ++ ) { workInfluences[ i ] = [ i, 0 ]; } function update( object, geometry, material, program ) { const objectInfluences = object.morphTargetInfluences; // When object doesn't have morph target influences defined, we treat it as a 0-length array // This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences const length = objectInfluences === undefined ? 0 : objectInfluences.length; let influences = influencesList[ geometry.id ]; if ( influences === undefined ) { // initialise list influences = []; for ( let i = 0; i < length; i ++ ) { influences[ i ] = [ i, 0 ]; } influencesList[ geometry.id ] = influences; } // Collect influences for ( let i = 0; i < length; i ++ ) { const influence = influences[ i ]; influence[ 0 ] = i; influence[ 1 ] = objectInfluences[ i ]; } influences.sort( absNumericalSort ); for ( let i = 0; i < 8; i ++ ) { if ( i < length && influences[ i ][ 1 ] ) { workInfluences[ i ][ 0 ] = influences[ i ][ 0 ]; workInfluences[ i ][ 1 ] = influences[ i ][ 1 ]; } else { workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER; workInfluences[ i ][ 1 ] = 0; } } workInfluences.sort( numericalSort ); const morphTargets = material.morphTargets && geometry.morphAttributes.position; const morphNormals = material.morphNormals && geometry.morphAttributes.normal; let morphInfluencesSum = 0; for ( let i = 0; i < 8; i ++ ) { const influence = workInfluences[ i ]; const index = influence[ 0 ]; const value = influence[ 1 ]; if ( index !== Number.MAX_SAFE_INTEGER && value ) { if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) { geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] ); } if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) { geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] ); } morphInfluences[ i ] = value; morphInfluencesSum += value; } else { if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) { geometry.deleteAttribute( 'morphTarget' + i ); } if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) { geometry.deleteAttribute( 'morphNormal' + i ); } morphInfluences[ i ] = 0; } } // GLSL shader uses formula baseinfluence * base + sum(target * influence) // This allows us to switch between absolute morphs and relative morphs without changing shader code // When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence) const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum; program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence ); program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences ); } return { update: update }; } function WebGLObjects( gl, geometries, attributes, info ) { let updateMap = new WeakMap(); function update( object ) { const frame = info.render.frame; const geometry = object.geometry; const buffergeometry = geometries.get( object, geometry ); // Update once per frame if ( updateMap.get( buffergeometry ) !== frame ) { if ( geometry.isGeometry ) { buffergeometry.updateFromObject( object ); } geometries.update( buffergeometry ); updateMap.set( buffergeometry, frame ); } if ( object.isInstancedMesh ) { if ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) { object.addEventListener( 'dispose', onInstancedMeshDispose ); } attributes.update( object.instanceMatrix, 34962 ); if ( object.instanceColor !== null ) { attributes.update( object.instanceColor, 34962 ); } } return buffergeometry; } function dispose() { updateMap = new WeakMap(); } function onInstancedMeshDispose( event ) { const instancedMesh = event.target; instancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose ); attributes.remove( instancedMesh.instanceMatrix ); if ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor ); } return { update: update, dispose: dispose }; } function DataTexture2DArray( data = null, width = 1, height = 1, depth = 1 ) { Texture.call( this, null ); this.image = { data, width, height, depth }; this.magFilter = NearestFilter; this.minFilter = NearestFilter; this.wrapR = ClampToEdgeWrapping; this.generateMipmaps = false; this.flipY = false; this.needsUpdate = true; } DataTexture2DArray.prototype = Object.create( Texture.prototype ); DataTexture2DArray.prototype.constructor = DataTexture2DArray; DataTexture2DArray.prototype.isDataTexture2DArray = true; function DataTexture3D( data = null, width = 1, height = 1, depth = 1 ) { // We're going to add .setXXX() methods for setting properties later. // Users can still set in DataTexture3D directly. // // const texture = new THREE.DataTexture3D( data, width, height, depth ); // texture.anisotropy = 16; // // See #14839 Texture.call( this, null ); this.image = { data, width, height, depth }; this.magFilter = NearestFilter; this.minFilter = NearestFilter; this.wrapR = ClampToEdgeWrapping; this.generateMipmaps = false; this.flipY = false; this.needsUpdate = true; } DataTexture3D.prototype = Object.create( Texture.prototype ); DataTexture3D.prototype.constructor = DataTexture3D; DataTexture3D.prototype.isDataTexture3D = true; /** * Uniforms of a program. * Those form a tree structure with a special top-level container for the root, * which you get by calling 'new WebGLUniforms( gl, program )'. * * * Properties of inner nodes including the top-level container: * * .seq - array of nested uniforms * .map - nested uniforms by name * * * Methods of all nodes except the top-level container: * * .setValue( gl, value, [textures] ) * * uploads a uniform value(s) * the 'textures' parameter is needed for sampler uniforms * * * Static methods of the top-level container (textures factorizations): * * .upload( gl, seq, values, textures ) * * sets uniforms in 'seq' to 'values[id].value' * * .seqWithValue( seq, values ) : filteredSeq * * filters 'seq' entries with corresponding entry in values * * * Methods of the top-level container (textures factorizations): * * .setValue( gl, name, value, textures ) * * sets uniform with name 'name' to 'value' * * .setOptional( gl, obj, prop ) * * like .set for an optional property of the object * */ const emptyTexture = new Texture(); const emptyTexture2dArray = new DataTexture2DArray(); const emptyTexture3d = new DataTexture3D(); const emptyCubeTexture = new CubeTexture(); // --- Utilities --- // Array Caches (provide typed arrays for temporary by size) const arrayCacheF32 = []; const arrayCacheI32 = []; // Float32Array caches used for uploading Matrix uniforms const mat4array = new Float32Array( 16 ); const mat3array = new Float32Array( 9 ); const mat2array = new Float32Array( 4 ); // Flattening for arrays of vectors and matrices function flatten( array, nBlocks, blockSize ) { const firstElem = array[ 0 ]; if ( firstElem <= 0 || firstElem > 0 ) return array; // unoptimized: ! isNaN( firstElem ) // see http://jacksondunstan.com/articles/983 const n = nBlocks * blockSize; let r = arrayCacheF32[ n ]; if ( r === undefined ) { r = new Float32Array( n ); arrayCacheF32[ n ] = r; } if ( nBlocks !== 0 ) { firstElem.toArray( r, 0 ); for ( let i = 1, offset = 0; i !== nBlocks; ++ i ) { offset += blockSize; array[ i ].toArray( r, offset ); } } return r; } function arraysEqual( a, b ) { if ( a.length !== b.length ) return false; for ( let i = 0, l = a.length; i < l; i ++ ) { if ( a[ i ] !== b[ i ] ) return false; } return true; } function copyArray( a, b ) { for ( let i = 0, l = b.length; i < l; i ++ ) { a[ i ] = b[ i ]; } } // Texture unit allocation function allocTexUnits( textures, n ) { let r = arrayCacheI32[ n ]; if ( r === undefined ) { r = new Int32Array( n ); arrayCacheI32[ n ] = r; } for ( let i = 0; i !== n; ++ i ) { r[ i ] = textures.allocateTextureUnit(); } return r; } // --- Setters --- // Note: Defining these methods externally, because they come in a bunch // and this way their names minify. // Single scalar function setValueV1f( gl, v ) { const cache = this.cache; if ( cache[ 0 ] === v ) return; gl.uniform1f( this.addr, v ); cache[ 0 ] = v; } // Single float vector (from flat array or THREE.VectorN) function setValueV2f( gl, v ) { const cache = this.cache; if ( v.x !== undefined ) { if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) { gl.uniform2f( this.addr, v.x, v.y ); cache[ 0 ] = v.x; cache[ 1 ] = v.y; } } else { if ( arraysEqual( cache, v ) ) return; gl.uniform2fv( this.addr, v ); copyArray( cache, v ); } } function setValueV3f( gl, v ) { const cache = this.cache; if ( v.x !== undefined ) { if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) { gl.uniform3f( this.addr, v.x, v.y, v.z ); cache[ 0 ] = v.x; cache[ 1 ] = v.y; cache[ 2 ] = v.z; } } else if ( v.r !== undefined ) { if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) { gl.uniform3f( this.addr, v.r, v.g, v.b ); cache[ 0 ] = v.r; cache[ 1 ] = v.g; cache[ 2 ] = v.b; } } else { if ( arraysEqual( cache, v ) ) return; gl.uniform3fv( this.addr, v ); copyArray( cache, v ); } } function setValueV4f( gl, v ) { const cache = this.cache; if ( v.x !== undefined ) { if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) { gl.uniform4f( this.addr, v.x, v.y, v.z, v.w ); cache[ 0 ] = v.x; cache[ 1 ] = v.y; cache[ 2 ] = v.z; cache[ 3 ] = v.w; } } else { if ( arraysEqual( cache, v ) ) return; gl.uniform4fv( this.addr, v ); copyArray( cache, v ); } } // Single matrix (from flat array or MatrixN) function setValueM2( gl, v ) { const cache = this.cache; const elements = v.elements; if ( elements === undefined ) { if ( arraysEqual( cache, v ) ) return; gl.uniformMatrix2fv( this.addr, false, v ); copyArray( cache, v ); } else { if ( arraysEqual( cache, elements ) ) return; mat2array.set( elements ); gl.uniformMatrix2fv( this.addr, false, mat2array ); copyArray( cache, elements ); } } function setValueM3( gl, v ) { const cache = this.cache; const elements = v.elements; if ( elements === undefined ) { if ( arraysEqual( cache, v ) ) return; gl.uniformMatrix3fv( this.addr, false, v ); copyArray( cache, v ); } else { if ( arraysEqual( cache, elements ) ) return; mat3array.set( elements ); gl.uniformMatrix3fv( this.addr, false, mat3array ); copyArray( cache, elements ); } } function setValueM4( gl, v ) { const cache = this.cache; const elements = v.elements; if ( elements === undefined ) { if ( arraysEqual( cache, v ) ) return; gl.uniformMatrix4fv( this.addr, false, v ); copyArray( cache, v ); } else { if ( arraysEqual( cache, elements ) ) return; mat4array.set( elements ); gl.uniformMatrix4fv( this.addr, false, mat4array ); copyArray( cache, elements ); } } // Single texture (2D / Cube) function setValueT1( gl, v, textures ) { const cache = this.cache; const unit = textures.allocateTextureUnit(); if ( cache[ 0 ] !== unit ) { gl.uniform1i( this.addr, unit ); cache[ 0 ] = unit; } textures.safeSetTexture2D( v || emptyTexture, unit ); } function setValueT2DArray1( gl, v, textures ) { const cache = this.cache; const unit = textures.allocateTextureUnit(); if ( cache[ 0 ] !== unit ) { gl.uniform1i( this.addr, unit ); cache[ 0 ] = unit; } textures.setTexture2DArray( v || emptyTexture2dArray, unit ); } function setValueT3D1( gl, v, textures ) { const cache = this.cache; const unit = textures.allocateTextureUnit(); if ( cache[ 0 ] !== unit ) { gl.uniform1i( this.addr, unit ); cache[ 0 ] = unit; } textures.setTexture3D( v || emptyTexture3d, unit ); } function setValueT6( gl, v, textures ) { const cache = this.cache; const unit = textures.allocateTextureUnit(); if ( cache[ 0 ] !== unit ) { gl.uniform1i( this.addr, unit ); cache[ 0 ] = unit; } textures.safeSetTextureCube( v || emptyCubeTexture, unit ); } // Integer / Boolean vectors or arrays thereof (always flat arrays) function setValueV1i( gl, v ) { const cache = this.cache; if ( cache[ 0 ] === v ) return; gl.uniform1i( this.addr, v ); cache[ 0 ] = v; } function setValueV2i( gl, v ) { const cache = this.cache; if ( arraysEqual( cache, v ) ) return; gl.uniform2iv( this.addr, v ); copyArray( cache, v ); } function setValueV3i( gl, v ) { const cache = this.cache; if ( arraysEqual( cache, v ) ) return; gl.uniform3iv( this.addr, v ); copyArray( cache, v ); } function setValueV4i( gl, v ) { const cache = this.cache; if ( arraysEqual( cache, v ) ) return; gl.uniform4iv( this.addr, v ); copyArray( cache, v ); } // uint function setValueV1ui( gl, v ) { const cache = this.cache; if ( cache[ 0 ] === v ) return; gl.uniform1ui( this.addr, v ); cache[ 0 ] = v; } // Helper to pick the right setter for the singular case function getSingularSetter( type ) { switch ( type ) { case 0x1406: return setValueV1f; // FLOAT case 0x8b50: return setValueV2f; // _VEC2 case 0x8b51: return setValueV3f; // _VEC3 case 0x8b52: return setValueV4f; // _VEC4 case 0x8b5a: return setValueM2; // _MAT2 case 0x8b5b: return setValueM3; // _MAT3 case 0x8b5c: return setValueM4; // _MAT4 case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2 case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3 case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4 case 0x1405: return setValueV1ui; // UINT case 0x8b5e: // SAMPLER_2D case 0x8d66: // SAMPLER_EXTERNAL_OES case 0x8dca: // INT_SAMPLER_2D case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D case 0x8b62: // SAMPLER_2D_SHADOW return setValueT1; case 0x8b5f: // SAMPLER_3D case 0x8dcb: // INT_SAMPLER_3D case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D return setValueT3D1; case 0x8b60: // SAMPLER_CUBE case 0x8dcc: // INT_SAMPLER_CUBE case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE case 0x8dc5: // SAMPLER_CUBE_SHADOW return setValueT6; case 0x8dc1: // SAMPLER_2D_ARRAY case 0x8dcf: // INT_SAMPLER_2D_ARRAY case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW return setValueT2DArray1; } } // Array of scalars function setValueV1fArray( gl, v ) { gl.uniform1fv( this.addr, v ); } // Integer / Boolean vectors or arrays thereof (always flat arrays) function setValueV1iArray( gl, v ) { gl.uniform1iv( this.addr, v ); } function setValueV2iArray( gl, v ) { gl.uniform2iv( this.addr, v ); } function setValueV3iArray( gl, v ) { gl.uniform3iv( this.addr, v ); } function setValueV4iArray( gl, v ) { gl.uniform4iv( this.addr, v ); } // Array of vectors (flat or from THREE classes) function setValueV2fArray( gl, v ) { const data = flatten( v, this.size, 2 ); gl.uniform2fv( this.addr, data ); } function setValueV3fArray( gl, v ) { const data = flatten( v, this.size, 3 ); gl.uniform3fv( this.addr, data ); } function setValueV4fArray( gl, v ) { const data = flatten( v, this.size, 4 ); gl.uniform4fv( this.addr, data ); } // Array of matrices (flat or from THREE clases) function setValueM2Array( gl, v ) { const data = flatten( v, this.size, 4 ); gl.uniformMatrix2fv( this.addr, false, data ); } function setValueM3Array( gl, v ) { const data = flatten( v, this.size, 9 ); gl.uniformMatrix3fv( this.addr, false, data ); } function setValueM4Array( gl, v ) { const data = flatten( v, this.size, 16 ); gl.uniformMatrix4fv( this.addr, false, data ); } // Array of textures (2D / Cube) function setValueT1Array( gl, v, textures ) { const n = v.length; const units = allocTexUnits( textures, n ); gl.uniform1iv( this.addr, units ); for ( let i = 0; i !== n; ++ i ) { textures.safeSetTexture2D( v[ i ] || emptyTexture, units[ i ] ); } } function setValueT6Array( gl, v, textures ) { const n = v.length; const units = allocTexUnits( textures, n ); gl.uniform1iv( this.addr, units ); for ( let i = 0; i !== n; ++ i ) { textures.safeSetTextureCube( v[ i ] || emptyCubeTexture, units[ i ] ); } } // Helper to pick the right setter for a pure (bottom-level) array function getPureArraySetter( type ) { switch ( type ) { case 0x1406: return setValueV1fArray; // FLOAT case 0x8b50: return setValueV2fArray; // _VEC2 case 0x8b51: return setValueV3fArray; // _VEC3 case 0x8b52: return setValueV4fArray; // _VEC4 case 0x8b5a: return setValueM2Array; // _MAT2 case 0x8b5b: return setValueM3Array; // _MAT3 case 0x8b5c: return setValueM4Array; // _MAT4 case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2 case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3 case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4 case 0x8b5e: // SAMPLER_2D case 0x8d66: // SAMPLER_EXTERNAL_OES case 0x8dca: // INT_SAMPLER_2D case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D case 0x8b62: // SAMPLER_2D_SHADOW return setValueT1Array; case 0x8b60: // SAMPLER_CUBE case 0x8dcc: // INT_SAMPLER_CUBE case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE case 0x8dc5: // SAMPLER_CUBE_SHADOW return setValueT6Array; } } // --- Uniform Classes --- function SingleUniform( id, activeInfo, addr ) { this.id = id; this.addr = addr; this.cache = []; this.setValue = getSingularSetter( activeInfo.type ); // this.path = activeInfo.name; // DEBUG } function PureArrayUniform( id, activeInfo, addr ) { this.id = id; this.addr = addr; this.cache = []; this.size = activeInfo.size; this.setValue = getPureArraySetter( activeInfo.type ); // this.path = activeInfo.name; // DEBUG } PureArrayUniform.prototype.updateCache = function ( data ) { const cache = this.cache; if ( data instanceof Float32Array && cache.length !== data.length ) { this.cache = new Float32Array( data.length ); } copyArray( cache, data ); }; function StructuredUniform( id ) { this.id = id; this.seq = []; this.map = {}; } StructuredUniform.prototype.setValue = function ( gl, value, textures ) { const seq = this.seq; for ( let i = 0, n = seq.length; i !== n; ++ i ) { const u = seq[ i ]; u.setValue( gl, value[ u.id ], textures ); } }; // --- Top-level --- // Parser - builds up the property tree from the path strings const RePathPart = /(\w+)(\])?(\[|\.)?/g; // extracts // - the identifier (member name or array index) // - followed by an optional right bracket (found when array index) // - followed by an optional left bracket or dot (type of subscript) // // Note: These portions can be read in a non-overlapping fashion and // allow straightforward parsing of the hierarchy that WebGL encodes // in the uniform names. function addUniform( container, uniformObject ) { container.seq.push( uniformObject ); container.map[ uniformObject.id ] = uniformObject; } function parseUniform( activeInfo, addr, container ) { const path = activeInfo.name, pathLength = path.length; // reset RegExp object, because of the early exit of a previous run RePathPart.lastIndex = 0; while ( true ) { const match = RePathPart.exec( path ), matchEnd = RePathPart.lastIndex; let id = match[ 1 ]; const idIsIndex = match[ 2 ] === ']', subscript = match[ 3 ]; if ( idIsIndex ) id = id | 0; // convert to integer if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) { // bare name or "pure" bottom-level array "[0]" suffix addUniform( container, subscript === undefined ? new SingleUniform( id, activeInfo, addr ) : new PureArrayUniform( id, activeInfo, addr ) ); break; } else { // step into inner node / create it in case it doesn't exist const map = container.map; let next = map[ id ]; if ( next === undefined ) { next = new StructuredUniform( id ); addUniform( container, next ); } container = next; } } } // Root Container function WebGLUniforms( gl, program ) { this.seq = []; this.map = {}; const n = gl.getProgramParameter( program, 35718 ); for ( let i = 0; i < n; ++ i ) { const info = gl.getActiveUniform( program, i ), addr = gl.getUniformLocation( program, info.name ); parseUniform( info, addr, this ); } } WebGLUniforms.prototype.setValue = function ( gl, name, value, textures ) { const u = this.map[ name ]; if ( u !== undefined ) u.setValue( gl, value, textures ); }; WebGLUniforms.prototype.setOptional = function ( gl, object, name ) { const v = object[ name ]; if ( v !== undefined ) this.setValue( gl, name, v ); }; // Static interface WebGLUniforms.upload = function ( gl, seq, values, textures ) { for ( let i = 0, n = seq.length; i !== n; ++ i ) { const u = seq[ i ], v = values[ u.id ]; if ( v.needsUpdate !== false ) { // note: always updating when .needsUpdate is undefined u.setValue( gl, v.value, textures ); } } }; WebGLUniforms.seqWithValue = function ( seq, values ) { const r = []; for ( let i = 0, n = seq.length; i !== n; ++ i ) { const u = seq[ i ]; if ( u.id in values ) r.push( u ); } return r; }; function WebGLShader( gl, type, string ) { const shader = gl.createShader( type ); gl.shaderSource( shader, string ); gl.compileShader( shader ); return shader; } let programIdCount = 0; function addLineNumbers( string ) { const lines = string.split( '\n' ); for ( let i = 0; i < lines.length; i ++ ) { lines[ i ] = ( i + 1 ) + ': ' + lines[ i ]; } return lines.join( '\n' ); } function getEncodingComponents( encoding ) { switch ( encoding ) { case LinearEncoding: return [ 'Linear', '( value )' ]; case sRGBEncoding: return [ 'sRGB', '( value )' ]; case RGBEEncoding: return [ 'RGBE', '( value )' ]; case RGBM7Encoding: return [ 'RGBM', '( value, 7.0 )' ]; case RGBM16Encoding: return [ 'RGBM', '( value, 16.0 )' ]; case RGBDEncoding: return [ 'RGBD', '( value, 256.0 )' ]; case GammaEncoding: return [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ]; case LogLuvEncoding: return [ 'LogLuv', '( value )' ]; default: console.warn( 'THREE.WebGLProgram: Unsupported encoding:', encoding ); return [ 'Linear', '( value )' ]; } } function getShaderErrors( gl, shader, type ) { const status = gl.getShaderParameter( shader, 35713 ); const log = gl.getShaderInfoLog( shader ).trim(); if ( status && log === '' ) return ''; // --enable-privileged-webgl-extension // console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) ); const source = gl.getShaderSource( shader ); return 'THREE.WebGLShader: gl.getShaderInfoLog() ' + type + '\n' + log + addLineNumbers( source ); } function getTexelDecodingFunction( functionName, encoding ) { const components = getEncodingComponents( encoding ); return 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }'; } function getTexelEncodingFunction( functionName, encoding ) { const components = getEncodingComponents( encoding ); return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }'; } function getToneMappingFunction( functionName, toneMapping ) { let toneMappingName; switch ( toneMapping ) { case LinearToneMapping: toneMappingName = 'Linear'; break; case ReinhardToneMapping: toneMappingName = 'Reinhard'; break; case CineonToneMapping: toneMappingName = 'OptimizedCineon'; break; case ACESFilmicToneMapping: toneMappingName = 'ACESFilmic'; break; case CustomToneMapping: toneMappingName = 'Custom'; break; default: console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping ); toneMappingName = 'Linear'; } return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }'; } function generateExtensions( parameters ) { const chunks = [ ( parameters.extensionDerivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.tangentSpaceNormalMap || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '', ( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '', ( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '', ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : '' ]; return chunks.filter( filterEmptyLine ).join( '\n' ); } function generateDefines( defines ) { const chunks = []; for ( const name in defines ) { const value = defines[ name ]; if ( value === false ) continue; chunks.push( '#define ' + name + ' ' + value ); } return chunks.join( '\n' ); } function fetchAttributeLocations( gl, program ) { const attributes = {}; const n = gl.getProgramParameter( program, 35721 ); for ( let i = 0; i < n; i ++ ) { const info = gl.getActiveAttrib( program, i ); const name = info.name; // console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i ); attributes[ name ] = gl.getAttribLocation( program, name ); } return attributes; } function filterEmptyLine( string ) { return string !== ''; } function replaceLightNums( string, parameters ) { return string .replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights ) .replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights ) .replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights ) .replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights ) .replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights ) .replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows ) .replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows ) .replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows ); } function replaceClippingPlaneNums( string, parameters ) { return string .replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes ) .replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) ); } // Resolve Includes const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm; function resolveIncludes( string ) { return string.replace( includePattern, includeReplacer ); } function includeReplacer( match, include ) { const string = ShaderChunk[ include ]; if ( string === undefined ) { throw new Error( 'Can not resolve #include <' + include + '>' ); } return resolveIncludes( string ); } // Unroll Loops const deprecatedUnrollLoopPattern = /#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g; const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g; function unrollLoops( string ) { return string .replace( unrollLoopPattern, loopReplacer ) .replace( deprecatedUnrollLoopPattern, deprecatedLoopReplacer ); } function deprecatedLoopReplacer( match, start, end, snippet ) { console.warn( 'WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.' ); return loopReplacer( match, start, end, snippet ); } function loopReplacer( match, start, end, snippet ) { let string = ''; for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) { string += snippet .replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' ) .replace( /UNROLLED_LOOP_INDEX/g, i ); } return string; } // function generatePrecision( parameters ) { let precisionstring = 'precision ' + parameters.precision + ' float;\nprecision ' + parameters.precision + ' int;'; if ( parameters.precision === 'highp' ) { precisionstring += '\n#define HIGH_PRECISION'; } else if ( parameters.precision === 'mediump' ) { precisionstring += '\n#define MEDIUM_PRECISION'; } else if ( parameters.precision === 'lowp' ) { precisionstring += '\n#define LOW_PRECISION'; } return precisionstring; } function generateShadowMapTypeDefine( parameters ) { let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC'; if ( parameters.shadowMapType === PCFShadowMap ) { shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF'; } else if ( parameters.shadowMapType === PCFSoftShadowMap ) { shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT'; } else if ( parameters.shadowMapType === VSMShadowMap ) { shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM'; } return shadowMapTypeDefine; } function generateEnvMapTypeDefine( parameters ) { let envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; if ( parameters.envMap ) { switch ( parameters.envMapMode ) { case CubeReflectionMapping: case CubeRefractionMapping: envMapTypeDefine = 'ENVMAP_TYPE_CUBE'; break; case CubeUVReflectionMapping: case CubeUVRefractionMapping: envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV'; break; } } return envMapTypeDefine; } function generateEnvMapModeDefine( parameters ) { let envMapModeDefine = 'ENVMAP_MODE_REFLECTION'; if ( parameters.envMap ) { switch ( parameters.envMapMode ) { case CubeRefractionMapping: case CubeUVRefractionMapping: envMapModeDefine = 'ENVMAP_MODE_REFRACTION'; break; } } return envMapModeDefine; } function generateEnvMapBlendingDefine( parameters ) { let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE'; if ( parameters.envMap ) { switch ( parameters.combine ) { case MultiplyOperation: envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY'; break; case MixOperation: envMapBlendingDefine = 'ENVMAP_BLENDING_MIX'; break; case AddOperation: envMapBlendingDefine = 'ENVMAP_BLENDING_ADD'; break; } } return envMapBlendingDefine; } function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) { const gl = renderer.getContext(); const defines = parameters.defines; let vertexShader = parameters.vertexShader; let fragmentShader = parameters.fragmentShader; const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters ); const envMapTypeDefine = generateEnvMapTypeDefine( parameters ); const envMapModeDefine = generateEnvMapModeDefine( parameters ); const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters ); const gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0; const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters ); const customDefines = generateDefines( defines ); const program = gl.createProgram(); let prefixVertex, prefixFragment; let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : ''; if ( parameters.isRawShaderMaterial ) { prefixVertex = [ customDefines ].filter( filterEmptyLine ).join( '\n' ); if ( prefixVertex.length > 0 ) { prefixVertex += '\n'; } prefixFragment = [ customExtensions, customDefines ].filter( filterEmptyLine ).join( '\n' ); if ( prefixFragment.length > 0 ) { prefixFragment += '\n'; } } else { prefixVertex = [ generatePrecision( parameters ), '#define SHADER_NAME ' + parameters.shaderName, customDefines, parameters.instancing ? '#define USE_INSTANCING' : '', parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '', parameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '', '#define GAMMA_FACTOR ' + gammaFactorDefine, '#define MAX_BONES ' + parameters.maxBones, ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', parameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors ? '#define USE_COLOR' : '', parameters.vertexUvs ? '#define USE_UV' : '', parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.skinning ? '#define USE_SKINNING' : '', parameters.useVertexTexture ? '#define BONE_TEXTURE' : '', parameters.morphTargets ? '#define USE_MORPHTARGETS' : '', parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', 'uniform mat4 modelMatrix;', 'uniform mat4 modelViewMatrix;', 'uniform mat4 projectionMatrix;', 'uniform mat4 viewMatrix;', 'uniform mat3 normalMatrix;', 'uniform vec3 cameraPosition;', 'uniform bool isOrthographic;', '#ifdef USE_INSTANCING', ' attribute mat4 instanceMatrix;', '#endif', '#ifdef USE_INSTANCING_COLOR', ' attribute vec3 instanceColor;', '#endif', 'attribute vec3 position;', 'attribute vec3 normal;', 'attribute vec2 uv;', '#ifdef USE_TANGENT', ' attribute vec4 tangent;', '#endif', '#ifdef USE_COLOR', ' attribute vec3 color;', '#endif', '#ifdef USE_MORPHTARGETS', ' attribute vec3 morphTarget0;', ' attribute vec3 morphTarget1;', ' attribute vec3 morphTarget2;', ' attribute vec3 morphTarget3;', ' #ifdef USE_MORPHNORMALS', ' attribute vec3 morphNormal0;', ' attribute vec3 morphNormal1;', ' attribute vec3 morphNormal2;', ' attribute vec3 morphNormal3;', ' #else', ' attribute vec3 morphTarget4;', ' attribute vec3 morphTarget5;', ' attribute vec3 morphTarget6;', ' attribute vec3 morphTarget7;', ' #endif', '#endif', '#ifdef USE_SKINNING', ' attribute vec4 skinIndex;', ' attribute vec4 skinWeight;', '#endif', '\n' ].filter( filterEmptyLine ).join( '\n' ); prefixFragment = [ customExtensions, generatePrecision( parameters ), '#define SHADER_NAME ' + parameters.shaderName, customDefines, parameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer '#define GAMMA_FACTOR ' + gammaFactorDefine, ( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '', ( parameters.useFog && parameters.fogExp2 ) ? '#define FOG_EXP2' : '', parameters.map ? '#define USE_MAP' : '', parameters.matcap ? '#define USE_MATCAP' : '', parameters.envMap ? '#define USE_ENVMAP' : '', parameters.envMap ? '#define ' + envMapTypeDefine : '', parameters.envMap ? '#define ' + envMapModeDefine : '', parameters.envMap ? '#define ' + envMapBlendingDefine : '', parameters.lightMap ? '#define USE_LIGHTMAP' : '', parameters.aoMap ? '#define USE_AOMAP' : '', parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '', parameters.bumpMap ? '#define USE_BUMPMAP' : '', parameters.normalMap ? '#define USE_NORMALMAP' : '', ( parameters.normalMap && parameters.objectSpaceNormalMap ) ? '#define OBJECTSPACE_NORMALMAP' : '', ( parameters.normalMap && parameters.tangentSpaceNormalMap ) ? '#define TANGENTSPACE_NORMALMAP' : '', parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '', parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '', parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '', parameters.specularMap ? '#define USE_SPECULARMAP' : '', parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '', parameters.metalnessMap ? '#define USE_METALNESSMAP' : '', parameters.alphaMap ? '#define USE_ALPHAMAP' : '', parameters.sheen ? '#define USE_SHEEN' : '', parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '', parameters.vertexTangents ? '#define USE_TANGENT' : '', parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '', parameters.vertexUvs ? '#define USE_UV' : '', parameters.uvsVertexOnly ? '#define UVS_VERTEX_ONLY' : '', parameters.gradientMap ? '#define USE_GRADIENTMAP' : '', parameters.flatShading ? '#define FLAT_SHADED' : '', parameters.doubleSided ? '#define DOUBLE_SIDED' : '', parameters.flipSided ? '#define FLIP_SIDED' : '', parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '', parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '', parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '', parameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '', parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '', ( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '', ( ( parameters.extensionShaderTextureLOD || parameters.envMap ) && parameters.rendererExtensionShaderTextureLod ) ? '#define TEXTURE_LOD_EXT' : '', 'uniform mat4 viewMatrix;', 'uniform vec3 cameraPosition;', 'uniform bool isOrthographic;', ( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '', ( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below ( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '', parameters.dithering ? '#define DITHERING' : '', ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below parameters.map ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '', parameters.matcap ? getTexelDecodingFunction( 'matcapTexelToLinear', parameters.matcapEncoding ) : '', parameters.envMap ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '', parameters.emissiveMap ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '', parameters.lightMap ? getTexelDecodingFunction( 'lightMapTexelToLinear', parameters.lightMapEncoding ) : '', getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ), parameters.depthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '', '\n' ].filter( filterEmptyLine ).join( '\n' ); } vertexShader = resolveIncludes( vertexShader ); vertexShader = replaceLightNums( vertexShader, parameters ); vertexShader = replaceClippingPlaneNums( vertexShader, parameters ); fragmentShader = resolveIncludes( fragmentShader ); fragmentShader = replaceLightNums( fragmentShader, parameters ); fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters ); vertexShader = unrollLoops( vertexShader ); fragmentShader = unrollLoops( fragmentShader ); if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) { // GLSL 3.0 conversion for built-in materials and ShaderMaterial versionString = '#version 300 es\n'; prefixVertex = [ '#define attribute in', '#define varying out', '#define texture2D texture' ].join( '\n' ) + '\n' + prefixVertex; prefixFragment = [ '#define varying in', ( parameters.glslVersion === GLSL3 ) ? '' : 'out highp vec4 pc_fragColor;', ( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor', '#define gl_FragDepthEXT gl_FragDepth', '#define texture2D texture', '#define textureCube texture', '#define texture2DProj textureProj', '#define texture2DLodEXT textureLod', '#define texture2DProjLodEXT textureProjLod', '#define textureCubeLodEXT textureLod', '#define texture2DGradEXT textureGrad', '#define texture2DProjGradEXT textureProjGrad', '#define textureCubeGradEXT textureGrad' ].join( '\n' ) + '\n' + prefixFragment; } const vertexGlsl = versionString + prefixVertex + vertexShader; const fragmentGlsl = versionString + prefixFragment + fragmentShader; // console.log( '*VERTEX*', vertexGlsl ); // console.log( '*FRAGMENT*', fragmentGlsl ); const glVertexShader = WebGLShader( gl, 35633, vertexGlsl ); const glFragmentShader = WebGLShader( gl, 35632, fragmentGlsl ); gl.attachShader( program, glVertexShader ); gl.attachShader( program, glFragmentShader ); // Force a particular attribute to index 0. if ( parameters.index0AttributeName !== undefined ) { gl.bindAttribLocation( program, 0, parameters.index0AttributeName ); } else if ( parameters.morphTargets === true ) { // programs with morphTargets displace position out of attribute 0 gl.bindAttribLocation( program, 0, 'position' ); } gl.linkProgram( program ); // check for link errors if ( renderer.debug.checkShaderErrors ) { const programLog = gl.getProgramInfoLog( program ).trim(); const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim(); const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim(); let runnable = true; let haveDiagnostics = true; if ( gl.getProgramParameter( program, 35714 ) === false ) { runnable = false; const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' ); const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' ); console.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), '35715', gl.getProgramParameter( program, 35715 ), 'gl.getProgramInfoLog', programLog, vertexErrors, fragmentErrors ); } else if ( programLog !== '' ) { console.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog ); } else if ( vertexLog === '' || fragmentLog === '' ) { haveDiagnostics = false; } if ( haveDiagnostics ) { this.diagnostics = { runnable: runnable, programLog: programLog, vertexShader: { log: vertexLog, prefix: prefixVertex }, fragmentShader: { log: fragmentLog, prefix: prefixFragment } }; } } // Clean up // Crashes in iOS9 and iOS10. #18402 // gl.detachShader( program, glVertexShader ); // gl.detachShader( program, glFragmentShader ); gl.deleteShader( glVertexShader ); gl.deleteShader( glFragmentShader ); // set up caching for uniform locations let cachedUniforms; this.getUniforms = function () { if ( cachedUniforms === undefined ) { cachedUniforms = new WebGLUniforms( gl, program ); } return cachedUniforms; }; // set up caching for attribute locations let cachedAttributes; this.getAttributes = function () { if ( cachedAttributes === undefined ) { cachedAttributes = fetchAttributeLocations( gl, program ); } return cachedAttributes; }; // free resource this.destroy = function () { bindingStates.releaseStatesOfProgram( this ); gl.deleteProgram( program ); this.program = undefined; }; // this.name = parameters.shaderName; this.id = programIdCount ++; this.cacheKey = cacheKey; this.usedTimes = 1; this.program = program; this.vertexShader = glVertexShader; this.fragmentShader = glFragmentShader; return this; } function WebGLPrograms( renderer, cubemaps, extensions, capabilities, bindingStates, clipping ) { const programs = []; const isWebGL2 = capabilities.isWebGL2; const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer; const floatVertexTextures = capabilities.floatVertexTextures; const maxVertexUniforms = capabilities.maxVertexUniforms; const vertexTextures = capabilities.vertexTextures; let precision = capabilities.precision; const shaderIDs = { MeshDepthMaterial: 'depth', MeshDistanceMaterial: 'distanceRGBA', MeshNormalMaterial: 'normal', MeshBasicMaterial: 'basic', MeshLambertMaterial: 'lambert', MeshPhongMaterial: 'phong', MeshToonMaterial: 'toon', MeshStandardMaterial: 'physical', MeshPhysicalMaterial: 'physical', MeshMatcapMaterial: 'matcap', LineBasicMaterial: 'basic', LineDashedMaterial: 'dashed', PointsMaterial: 'points', ShadowMaterial: 'shadow', SpriteMaterial: 'sprite' }; const parameterNames = [ 'precision', 'isWebGL2', 'supportsVertexTextures', 'outputEncoding', 'instancing', 'instancingColor', 'map', 'mapEncoding', 'matcap', 'matcapEncoding', 'envMap', 'envMapMode', 'envMapEncoding', 'envMapCubeUV', 'lightMap', 'lightMapEncoding', 'aoMap', 'emissiveMap', 'emissiveMapEncoding', 'bumpMap', 'normalMap', 'objectSpaceNormalMap', 'tangentSpaceNormalMap', 'clearcoatMap', 'clearcoatRoughnessMap', 'clearcoatNormalMap', 'displacementMap', 'specularMap', 'roughnessMap', 'metalnessMap', 'gradientMap', 'alphaMap', 'combine', 'vertexColors', 'vertexTangents', 'vertexUvs', 'uvsVertexOnly', 'fog', 'useFog', 'fogExp2', 'flatShading', 'sizeAttenuation', 'logarithmicDepthBuffer', 'skinning', 'maxBones', 'useVertexTexture', 'morphTargets', 'morphNormals', 'maxMorphTargets', 'maxMorphNormals', 'premultipliedAlpha', 'numDirLights', 'numPointLights', 'numSpotLights', 'numHemiLights', 'numRectAreaLights', 'numDirLightShadows', 'numPointLightShadows', 'numSpotLightShadows', 'shadowMapEnabled', 'shadowMapType', 'toneMapping', 'physicallyCorrectLights', 'alphaTest', 'doubleSided', 'flipSided', 'numClippingPlanes', 'numClipIntersection', 'depthPacking', 'dithering', 'sheen', 'transmissionMap' ]; function getMaxBones( object ) { const skeleton = object.skeleton; const bones = skeleton.bones; if ( floatVertexTextures ) { return 1024; } else { // default for when object is not specified // ( for example when prebuilding shader to be used with multiple objects ) // // - leave some extra space for other uniforms // - limit here is ANGLE's 254 max uniform vectors // (up to 54 should be safe) const nVertexUniforms = maxVertexUniforms; const nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 ); const maxBones = Math.min( nVertexMatrices, bones.length ); if ( maxBones < bones.length ) { console.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' ); return 0; } return maxBones; } } function getTextureEncodingFromMap( map ) { let encoding; if ( map && map.isTexture ) { encoding = map.encoding; } else if ( map && map.isWebGLRenderTarget ) { console.warn( 'THREE.WebGLPrograms.getTextureEncodingFromMap: don\'t use render targets as textures. Use their .texture property instead.' ); encoding = map.texture.encoding; } else { encoding = LinearEncoding; } return encoding; } function getParameters( material, lights, shadows, scene, object ) { const fog = scene.fog; const environment = material.isMeshStandardMaterial ? scene.environment : null; const envMap = cubemaps.get( material.envMap || environment ); const shaderID = shaderIDs[ material.type ]; // heuristics to create shader parameters according to lights in the scene // (not to blow over maxLights budget) const maxBones = object.isSkinnedMesh ? getMaxBones( object ) : 0; if ( material.precision !== null ) { precision = capabilities.getMaxPrecision( material.precision ); if ( precision !== material.precision ) { console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' ); } } let vertexShader, fragmentShader; if ( shaderID ) { const shader = ShaderLib[ shaderID ]; vertexShader = shader.vertexShader; fragmentShader = shader.fragmentShader; } else { vertexShader = material.vertexShader; fragmentShader = material.fragmentShader; } const currentRenderTarget = renderer.getRenderTarget(); const parameters = { isWebGL2: isWebGL2, shaderID: shaderID, shaderName: material.type, vertexShader: vertexShader, fragmentShader: fragmentShader, defines: material.defines, isRawShaderMaterial: material.isRawShaderMaterial === true, glslVersion: material.glslVersion, precision: precision, instancing: object.isInstancedMesh === true, instancingColor: object.isInstancedMesh === true && object.instanceColor !== null, supportsVertexTextures: vertexTextures, outputEncoding: ( currentRenderTarget !== null ) ? getTextureEncodingFromMap( currentRenderTarget.texture ) : renderer.outputEncoding, map: !! material.map, mapEncoding: getTextureEncodingFromMap( material.map ), matcap: !! material.matcap, matcapEncoding: getTextureEncodingFromMap( material.matcap ), envMap: !! envMap, envMapMode: envMap && envMap.mapping, envMapEncoding: getTextureEncodingFromMap( envMap ), envMapCubeUV: ( !! envMap ) && ( ( envMap.mapping === CubeUVReflectionMapping ) || ( envMap.mapping === CubeUVRefractionMapping ) ), lightMap: !! material.lightMap, lightMapEncoding: getTextureEncodingFromMap( material.lightMap ), aoMap: !! material.aoMap, emissiveMap: !! material.emissiveMap, emissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap ), bumpMap: !! material.bumpMap, normalMap: !! material.normalMap, objectSpaceNormalMap: material.normalMapType === ObjectSpaceNormalMap, tangentSpaceNormalMap: material.normalMapType === TangentSpaceNormalMap, clearcoatMap: !! material.clearcoatMap, clearcoatRoughnessMap: !! material.clearcoatRoughnessMap, clearcoatNormalMap: !! material.clearcoatNormalMap, displacementMap: !! material.displacementMap, roughnessMap: !! material.roughnessMap, metalnessMap: !! material.metalnessMap, specularMap: !! material.specularMap, alphaMap: !! material.alphaMap, gradientMap: !! material.gradientMap, sheen: !! material.sheen, transmissionMap: !! material.transmissionMap, combine: material.combine, vertexTangents: ( material.normalMap && material.vertexTangents ), vertexColors: material.vertexColors, vertexUvs: !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatMap || !! material.clearcoatRoughnessMap || !! material.clearcoatNormalMap || !! material.displacementMap || !! material.transmissionMap, uvsVertexOnly: ! ( !! material.map || !! material.bumpMap || !! material.normalMap || !! material.specularMap || !! material.alphaMap || !! material.emissiveMap || !! material.roughnessMap || !! material.metalnessMap || !! material.clearcoatNormalMap || !! material.transmissionMap ) && !! material.displacementMap, fog: !! fog, useFog: material.fog, fogExp2: ( fog && fog.isFogExp2 ), flatShading: material.flatShading, sizeAttenuation: material.sizeAttenuation, logarithmicDepthBuffer: logarithmicDepthBuffer, skinning: material.skinning && maxBones > 0, maxBones: maxBones, useVertexTexture: floatVertexTextures, morphTargets: material.morphTargets, morphNormals: material.morphNormals, maxMorphTargets: renderer.maxMorphTargets, maxMorphNormals: renderer.maxMorphNormals, numDirLights: lights.directional.length, numPointLights: lights.point.length, numSpotLights: lights.spot.length, numRectAreaLights: lights.rectArea.length, numHemiLights: lights.hemi.length, numDirLightShadows: lights.directionalShadowMap.length, numPointLightShadows: lights.pointShadowMap.length, numSpotLightShadows: lights.spotShadowMap.length, numClippingPlanes: clipping.numPlanes, numClipIntersection: clipping.numIntersection, dithering: material.dithering, shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0, shadowMapType: renderer.shadowMap.type, toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping, physicallyCorrectLights: renderer.physicallyCorrectLights, premultipliedAlpha: material.premultipliedAlpha, alphaTest: material.alphaTest, doubleSided: material.side === DoubleSide, flipSided: material.side === BackSide, depthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false, index0AttributeName: material.index0AttributeName, extensionDerivatives: material.extensions && material.extensions.derivatives, extensionFragDepth: material.extensions && material.extensions.fragDepth, extensionDrawBuffers: material.extensions && material.extensions.drawBuffers, extensionShaderTextureLOD: material.extensions && material.extensions.shaderTextureLOD, rendererExtensionFragDepth: isWebGL2 || extensions.has( 'EXT_frag_depth' ), rendererExtensionDrawBuffers: isWebGL2 || extensions.has( 'WEBGL_draw_buffers' ), rendererExtensionShaderTextureLod: isWebGL2 || extensions.has( 'EXT_shader_texture_lod' ), customProgramCacheKey: material.customProgramCacheKey() }; return parameters; } function getProgramCacheKey( parameters ) { const array = []; if ( parameters.shaderID ) { array.push( parameters.shaderID ); } else { array.push( parameters.fragmentShader ); array.push( parameters.vertexShader ); } if ( parameters.defines !== undefined ) { for ( const name in parameters.defines ) { array.push( name ); array.push( parameters.defines[ name ] ); } } if ( parameters.isRawShaderMaterial === false ) { for ( let i = 0; i < parameterNames.length; i ++ ) { array.push( parameters[ parameterNames[ i ] ] ); } array.push( renderer.outputEncoding ); array.push( renderer.gammaFactor ); } array.push( parameters.customProgramCacheKey ); return array.join(); } function getUniforms( material ) { const shaderID = shaderIDs[ material.type ]; let uniforms; if ( shaderID ) { const shader = ShaderLib[ shaderID ]; uniforms = UniformsUtils.clone( shader.uniforms ); } else { uniforms = material.uniforms; } return uniforms; } function acquireProgram( parameters, cacheKey ) { let program; // Check if code has been already compiled for ( let p = 0, pl = programs.length; p < pl; p ++ ) { const preexistingProgram = programs[ p ]; if ( preexistingProgram.cacheKey === cacheKey ) { program = preexistingProgram; ++ program.usedTimes; break; } } if ( program === undefined ) { program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates ); programs.push( program ); } return program; } function releaseProgram( program ) { if ( -- program.usedTimes === 0 ) { // Remove from unordered set const i = programs.indexOf( program ); programs[ i ] = programs[ programs.length - 1 ]; programs.pop(); // Free WebGL resources program.destroy(); } } return { getParameters: getParameters, getProgramCacheKey: getProgramCacheKey, getUniforms: getUniforms, acquireProgram: acquireProgram, releaseProgram: releaseProgram, // Exposed for resource monitoring & error feedback via renderer.info: programs: programs }; } function WebGLProperties() { let properties = new WeakMap(); function get( object ) { let map = properties.get( object ); if ( map === undefined ) { map = {}; properties.set( object, map ); } return map; } function remove( object ) { properties.delete( object ); } function update( object, key, value ) { properties.get( object )[ key ] = value; } function dispose() { properties = new WeakMap(); } return { get: get, remove: remove, update: update, dispose: dispose }; } function painterSortStable( a, b ) { if ( a.groupOrder !== b.groupOrder ) { return a.groupOrder - b.groupOrder; } else if ( a.renderOrder !== b.renderOrder ) { return a.renderOrder - b.renderOrder; } else if ( a.program !== b.program ) { return a.program.id - b.program.id; } else if ( a.material.id !== b.material.id ) { return a.material.id - b.material.id; } else if ( a.z !== b.z ) { return a.z - b.z; } else { return a.id - b.id; } } function reversePainterSortStable( a, b ) { if ( a.groupOrder !== b.groupOrder ) { return a.groupOrder - b.groupOrder; } else if ( a.renderOrder !== b.renderOrder ) { return a.renderOrder - b.renderOrder; } else if ( a.z !== b.z ) { return b.z - a.z; } else { return a.id - b.id; } } function WebGLRenderList( properties ) { const renderItems = []; let renderItemsIndex = 0; const opaque = []; const transparent = []; const defaultProgram = { id: - 1 }; function init() { renderItemsIndex = 0; opaque.length = 0; transparent.length = 0; } function getNextRenderItem( object, geometry, material, groupOrder, z, group ) { let renderItem = renderItems[ renderItemsIndex ]; const materialProperties = properties.get( material ); if ( renderItem === undefined ) { renderItem = { id: object.id, object: object, geometry: geometry, material: material, program: materialProperties.program || defaultProgram, groupOrder: groupOrder, renderOrder: object.renderOrder, z: z, group: group }; renderItems[ renderItemsIndex ] = renderItem; } else { renderItem.id = object.id; renderItem.object = object; renderItem.geometry = geometry; renderItem.material = material; renderItem.program = materialProperties.program || defaultProgram; renderItem.groupOrder = groupOrder; renderItem.renderOrder = object.renderOrder; renderItem.z = z; renderItem.group = group; } renderItemsIndex ++; return renderItem; } function push( object, geometry, material, groupOrder, z, group ) { const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); ( material.transparent === true ? transparent : opaque ).push( renderItem ); } function unshift( object, geometry, material, groupOrder, z, group ) { const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group ); ( material.transparent === true ? transparent : opaque ).unshift( renderItem ); } function sort( customOpaqueSort, customTransparentSort ) { if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable ); if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable ); } function finish() { // Clear references from inactive renderItems in the list for ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) { const renderItem = renderItems[ i ]; if ( renderItem.id === null ) break; renderItem.id = null; renderItem.object = null; renderItem.geometry = null; renderItem.material = null; renderItem.program = null; renderItem.group = null; } } return { opaque: opaque, transparent: transparent, init: init, push: push, unshift: unshift, finish: finish, sort: sort }; } function WebGLRenderLists( properties ) { let lists = new WeakMap(); function get( scene, camera ) { const cameras = lists.get( scene ); let list; if ( cameras === undefined ) { list = new WebGLRenderList( properties ); lists.set( scene, new WeakMap() ); lists.get( scene ).set( camera, list ); } else { list = cameras.get( camera ); if ( list === undefined ) { list = new WebGLRenderList( properties ); cameras.set( camera, list ); } } return list; } function dispose() { lists = new WeakMap(); } return { get: get, dispose: dispose }; } function UniformsCache() { const lights = {}; return { get: function ( light ) { if ( lights[ light.id ] !== undefined ) { return lights[ light.id ]; } let uniforms; switch ( light.type ) { case 'DirectionalLight': uniforms = { direction: new Vector3(), color: new Color() }; break; case 'SpotLight': uniforms = { position: new Vector3(), direction: new Vector3(), color: new Color(), distance: 0, coneCos: 0, penumbraCos: 0, decay: 0 }; break; case 'PointLight': uniforms = { position: new Vector3(), color: new Color(), distance: 0, decay: 0 }; break; case 'HemisphereLight': uniforms = { direction: new Vector3(), skyColor: new Color(), groundColor: new Color() }; break; case 'RectAreaLight': uniforms = { color: new Color(), position: new Vector3(), halfWidth: new Vector3(), halfHeight: new Vector3() }; break; } lights[ light.id ] = uniforms; return uniforms; } }; } function ShadowUniformsCache() { const lights = {}; return { get: function ( light ) { if ( lights[ light.id ] !== undefined ) { return lights[ light.id ]; } let uniforms; switch ( light.type ) { case 'DirectionalLight': uniforms = { shadowBias: 0, shadowNormalBias: 0, shadowRadius: 1, shadowMapSize: new Vector2() }; break; case 'SpotLight': uniforms = { shadowBias: 0, shadowNormalBias: 0, shadowRadius: 1, shadowMapSize: new Vector2() }; break; case 'PointLight': uniforms = { shadowBias: 0, shadowNormalBias: 0, shadowRadius: 1, shadowMapSize: new Vector2(), shadowCameraNear: 1, shadowCameraFar: 1000 }; break; // TODO (abelnation): set RectAreaLight shadow uniforms } lights[ light.id ] = uniforms; return uniforms; } }; } let nextVersion = 0; function shadowCastingLightsFirst( lightA, lightB ) { return ( lightB.castShadow ? 1 : 0 ) - ( lightA.castShadow ? 1 : 0 ); } function WebGLLights( extensions, capabilities ) { const cache = new UniformsCache(); const shadowCache = ShadowUniformsCache(); const state = { version: 0, hash: { directionalLength: - 1, pointLength: - 1, spotLength: - 1, rectAreaLength: - 1, hemiLength: - 1, numDirectionalShadows: - 1, numPointShadows: - 1, numSpotShadows: - 1 }, ambient: [ 0, 0, 0 ], probe: [], directional: [], directionalShadow: [], directionalShadowMap: [], directionalShadowMatrix: [], spot: [], spotShadow: [], spotShadowMap: [], spotShadowMatrix: [], rectArea: [], rectAreaLTC1: null, rectAreaLTC2: null, point: [], pointShadow: [], pointShadowMap: [], pointShadowMatrix: [], hemi: [] }; for ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() ); const vector3 = new Vector3(); const matrix4 = new Matrix4(); const matrix42 = new Matrix4(); function setup( lights ) { let r = 0, g = 0, b = 0; for ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 ); let directionalLength = 0; let pointLength = 0; let spotLength = 0; let rectAreaLength = 0; let hemiLength = 0; let numDirectionalShadows = 0; let numPointShadows = 0; let numSpotShadows = 0; lights.sort( shadowCastingLightsFirst ); for ( let i = 0, l = lights.length; i < l; i ++ ) { const light = lights[ i ]; const color = light.color; const intensity = light.intensity; const distance = light.distance; const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null; if ( light.isAmbientLight ) { r += color.r * intensity; g += color.g * intensity; b += color.b * intensity; } else if ( light.isLightProbe ) { for ( let j = 0; j < 9; j ++ ) { state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity ); } } else if ( light.isDirectionalLight ) { const uniforms = cache.get( light ); uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); if ( light.castShadow ) { const shadow = light.shadow; const shadowUniforms = shadowCache.get( light ); shadowUniforms.shadowBias = shadow.bias; shadowUniforms.shadowNormalBias = shadow.normalBias; shadowUniforms.shadowRadius = shadow.radius; shadowUniforms.shadowMapSize = shadow.mapSize; state.directionalShadow[ directionalLength ] = shadowUniforms; state.directionalShadowMap[ directionalLength ] = shadowMap; state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix; numDirectionalShadows ++; } state.directional[ directionalLength ] = uniforms; directionalLength ++; } else if ( light.isSpotLight ) { const uniforms = cache.get( light ); uniforms.position.setFromMatrixPosition( light.matrixWorld ); uniforms.color.copy( color ).multiplyScalar( intensity ); uniforms.distance = distance; uniforms.coneCos = Math.cos( light.angle ); uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) ); uniforms.decay = light.decay; if ( light.castShadow ) { const shadow = light.shadow; const shadowUniforms = shadowCache.get( light ); shadowUniforms.shadowBias = shadow.bias; shadowUniforms.shadowNormalBias = shadow.normalBias; shadowUniforms.shadowRadius = shadow.radius; shadowUniforms.shadowMapSize = shadow.mapSize; state.spotShadow[ spotLength ] = shadowUniforms; state.spotShadowMap[ spotLength ] = shadowMap; state.spotShadowMatrix[ spotLength ] = light.shadow.matrix; numSpotShadows ++; } state.spot[ spotLength ] = uniforms; spotLength ++; } else if ( light.isRectAreaLight ) { const uniforms = cache.get( light ); // (a) intensity is the total visible light emitted //uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) ); // (b) intensity is the brightness of the light uniforms.color.copy( color ).multiplyScalar( intensity ); uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); state.rectArea[ rectAreaLength ] = uniforms; rectAreaLength ++; } else if ( light.isPointLight ) { const uniforms = cache.get( light ); uniforms.color.copy( light.color ).multiplyScalar( light.intensity ); uniforms.distance = light.distance; uniforms.decay = light.decay; if ( light.castShadow ) { const shadow = light.shadow; const shadowUniforms = shadowCache.get( light ); shadowUniforms.shadowBias = shadow.bias; shadowUniforms.shadowNormalBias = shadow.normalBias; shadowUniforms.shadowRadius = shadow.radius; shadowUniforms.shadowMapSize = shadow.mapSize; shadowUniforms.shadowCameraNear = shadow.camera.near; shadowUniforms.shadowCameraFar = shadow.camera.far; state.pointShadow[ pointLength ] = shadowUniforms; state.pointShadowMap[ pointLength ] = shadowMap; state.pointShadowMatrix[ pointLength ] = light.shadow.matrix; numPointShadows ++; } state.point[ pointLength ] = uniforms; pointLength ++; } else if ( light.isHemisphereLight ) { const uniforms = cache.get( light ); uniforms.skyColor.copy( light.color ).multiplyScalar( intensity ); uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity ); state.hemi[ hemiLength ] = uniforms; hemiLength ++; } } if ( rectAreaLength > 0 ) { if ( capabilities.isWebGL2 ) { // WebGL 2 state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; } else { // WebGL 1 if ( extensions.has( 'OES_texture_float_linear' ) === true ) { state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1; state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2; } else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) { state.rectAreaLTC1 = UniformsLib.LTC_HALF_1; state.rectAreaLTC2 = UniformsLib.LTC_HALF_2; } else { console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' ); } } } state.ambient[ 0 ] = r; state.ambient[ 1 ] = g; state.ambient[ 2 ] = b; const hash = state.hash; if ( hash.directionalLength !== directionalLength || hash.pointLength !== pointLength || hash.spotLength !== spotLength || hash.rectAreaLength !== rectAreaLength || hash.hemiLength !== hemiLength || hash.numDirectionalShadows !== numDirectionalShadows || hash.numPointShadows !== numPointShadows || hash.numSpotShadows !== numSpotShadows ) { state.directional.length = directionalLength; state.spot.length = spotLength; state.rectArea.length = rectAreaLength; state.point.length = pointLength; state.hemi.length = hemiLength; state.directionalShadow.length = numDirectionalShadows; state.directionalShadowMap.length = numDirectionalShadows; state.pointShadow.length = numPointShadows; state.pointShadowMap.length = numPointShadows; state.spotShadow.length = numSpotShadows; state.spotShadowMap.length = numSpotShadows; state.directionalShadowMatrix.length = numDirectionalShadows; state.pointShadowMatrix.length = numPointShadows; state.spotShadowMatrix.length = numSpotShadows; hash.directionalLength = directionalLength; hash.pointLength = pointLength; hash.spotLength = spotLength; hash.rectAreaLength = rectAreaLength; hash.hemiLength = hemiLength; hash.numDirectionalShadows = numDirectionalShadows; hash.numPointShadows = numPointShadows; hash.numSpotShadows = numSpotShadows; state.version = nextVersion ++; } } function setupView( lights, camera ) { let directionalLength = 0; let pointLength = 0; let spotLength = 0; let rectAreaLength = 0; let hemiLength = 0; const viewMatrix = camera.matrixWorldInverse; for ( let i = 0, l = lights.length; i < l; i ++ ) { const light = lights[ i ]; if ( light.isDirectionalLight ) { const uniforms = state.directional[ directionalLength ]; uniforms.direction.setFromMatrixPosition( light.matrixWorld ); vector3.setFromMatrixPosition( light.target.matrixWorld ); uniforms.direction.sub( vector3 ); uniforms.direction.transformDirection( viewMatrix ); directionalLength ++; } else if ( light.isSpotLight ) { const uniforms = state.spot[ spotLength ]; uniforms.position.setFromMatrixPosition( light.matrixWorld ); uniforms.position.applyMatrix4( viewMatrix ); uniforms.direction.setFromMatrixPosition( light.matrixWorld ); vector3.setFromMatrixPosition( light.target.matrixWorld ); uniforms.direction.sub( vector3 ); uniforms.direction.transformDirection( viewMatrix ); spotLength ++; } else if ( light.isRectAreaLight ) { const uniforms = state.rectArea[ rectAreaLength ]; uniforms.position.setFromMatrixPosition( light.matrixWorld ); uniforms.position.applyMatrix4( viewMatrix ); // extract local rotation of light to derive width/height half vectors matrix42.identity(); matrix4.copy( light.matrixWorld ); matrix4.premultiply( viewMatrix ); matrix42.extractRotation( matrix4 ); uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 ); uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 ); uniforms.halfWidth.applyMatrix4( matrix42 ); uniforms.halfHeight.applyMatrix4( matrix42 ); rectAreaLength ++; } else if ( light.isPointLight ) { const uniforms = state.point[ pointLength ]; uniforms.position.setFromMatrixPosition( light.matrixWorld ); uniforms.position.applyMatrix4( viewMatrix ); pointLength ++; } else if ( light.isHemisphereLight ) { const uniforms = state.hemi[ hemiLength ]; uniforms.direction.setFromMatrixPosition( light.matrixWorld ); uniforms.direction.transformDirection( viewMatrix ); uniforms.direction.normalize(); hemiLength ++; } } } return { setup: setup, setupView: setupView, state: state }; } function WebGLRenderState( extensions, capabilities ) { const lights = new WebGLLights( extensions, capabilities ); const lightsArray = []; const shadowsArray = []; function init() { lightsArray.length = 0; shadowsArray.length = 0; } function pushLight( light ) { lightsArray.push( light ); } function pushShadow( shadowLight ) { shadowsArray.push( shadowLight ); } function setupLights() { lights.setup( lightsArray ); } function setupLightsView( camera ) { lights.setupView( lightsArray, camera ); } const state = { lightsArray: lightsArray, shadowsArray: shadowsArray, lights: lights }; return { init: init, state: state, setupLights: setupLights, setupLightsView: setupLightsView, pushLight: pushLight, pushShadow: pushShadow }; } function WebGLRenderStates( extensions, capabilities ) { let renderStates = new WeakMap(); function get( scene, renderCallDepth = 0 ) { let renderState; if ( renderStates.has( scene ) === false ) { renderState = new WebGLRenderState( extensions, capabilities ); renderStates.set( scene, [] ); renderStates.get( scene ).push( renderState ); } else { if ( renderCallDepth >= renderStates.get( scene ).length ) { renderState = new WebGLRenderState( extensions, capabilities ); renderStates.get( scene ).push( renderState ); } else { renderState = renderStates.get( scene )[ renderCallDepth ]; } } return renderState; } function dispose() { renderStates = new WeakMap(); } return { get: get, dispose: dispose }; } /** * parameters = { * * opacity: , * * map: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * wireframe: , * wireframeLinewidth: * } */ function MeshDepthMaterial( parameters ) { Material.call( this ); this.type = 'MeshDepthMaterial'; this.depthPacking = BasicDepthPacking; this.skinning = false; this.morphTargets = false; this.map = null; this.alphaMap = null; this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.wireframe = false; this.wireframeLinewidth = 1; this.fog = false; this.setValues( parameters ); } MeshDepthMaterial.prototype = Object.create( Material.prototype ); MeshDepthMaterial.prototype.constructor = MeshDepthMaterial; MeshDepthMaterial.prototype.isMeshDepthMaterial = true; MeshDepthMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.depthPacking = source.depthPacking; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.map = source.map; this.alphaMap = source.alphaMap; this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; return this; }; /** * parameters = { * * referencePosition: , * nearDistance: , * farDistance: , * * skinning: , * morphTargets: , * * map: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: * * } */ function MeshDistanceMaterial( parameters ) { Material.call( this ); this.type = 'MeshDistanceMaterial'; this.referencePosition = new Vector3(); this.nearDistance = 1; this.farDistance = 1000; this.skinning = false; this.morphTargets = false; this.map = null; this.alphaMap = null; this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.fog = false; this.setValues( parameters ); } MeshDistanceMaterial.prototype = Object.create( Material.prototype ); MeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial; MeshDistanceMaterial.prototype.isMeshDistanceMaterial = true; MeshDistanceMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.referencePosition.copy( source.referencePosition ); this.nearDistance = source.nearDistance; this.farDistance = source.farDistance; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.map = source.map; this.alphaMap = source.alphaMap; this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; return this; }; var vsm_frag = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include \nvoid main() {\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}"; var vsm_vert = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}"; function WebGLShadowMap( _renderer, _objects, maxTextureSize ) { let _frustum = new Frustum(); const _shadowMapSize = new Vector2(), _viewportSize = new Vector2(), _viewport = new Vector4(), _depthMaterials = [], _distanceMaterials = [], _materialCache = {}; const shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide }; const shadowMaterialVertical = new ShaderMaterial( { defines: { SAMPLE_RATE: 2.0 / 8.0, HALF_SAMPLE_RATE: 1.0 / 8.0 }, uniforms: { shadow_pass: { value: null }, resolution: { value: new Vector2() }, radius: { value: 4.0 } }, vertexShader: vsm_vert, fragmentShader: vsm_frag } ); const shadowMaterialHorizontal = shadowMaterialVertical.clone(); shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1; const fullScreenTri = new BufferGeometry(); fullScreenTri.setAttribute( 'position', new BufferAttribute( new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ), 3 ) ); const fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical ); const scope = this; this.enabled = false; this.autoUpdate = true; this.needsUpdate = false; this.type = PCFShadowMap; this.render = function ( lights, scene, camera ) { if ( scope.enabled === false ) return; if ( scope.autoUpdate === false && scope.needsUpdate === false ) return; if ( lights.length === 0 ) return; const currentRenderTarget = _renderer.getRenderTarget(); const activeCubeFace = _renderer.getActiveCubeFace(); const activeMipmapLevel = _renderer.getActiveMipmapLevel(); const _state = _renderer.state; // Set GL state for depth map. _state.setBlending( NoBlending ); _state.buffers.color.setClear( 1, 1, 1, 1 ); _state.buffers.depth.setTest( true ); _state.setScissorTest( false ); // render depth map for ( let i = 0, il = lights.length; i < il; i ++ ) { const light = lights[ i ]; const shadow = light.shadow; if ( shadow === undefined ) { console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' ); continue; } if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue; _shadowMapSize.copy( shadow.mapSize ); const shadowFrameExtents = shadow.getFrameExtents(); _shadowMapSize.multiply( shadowFrameExtents ); _viewportSize.copy( shadow.mapSize ); if ( _shadowMapSize.x > maxTextureSize || _shadowMapSize.y > maxTextureSize ) { if ( _shadowMapSize.x > maxTextureSize ) { _viewportSize.x = Math.floor( maxTextureSize / shadowFrameExtents.x ); _shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x; shadow.mapSize.x = _viewportSize.x; } if ( _shadowMapSize.y > maxTextureSize ) { _viewportSize.y = Math.floor( maxTextureSize / shadowFrameExtents.y ); _shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y; shadow.mapSize.y = _viewportSize.y; } } if ( shadow.map === null && ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { const pars = { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat }; shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); shadow.map.texture.name = light.name + '.shadowMap'; shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); shadow.camera.updateProjectionMatrix(); } if ( shadow.map === null ) { const pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat }; shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars ); shadow.map.texture.name = light.name + '.shadowMap'; shadow.camera.updateProjectionMatrix(); } _renderer.setRenderTarget( shadow.map ); _renderer.clear(); const viewportCount = shadow.getViewportCount(); for ( let vp = 0; vp < viewportCount; vp ++ ) { const viewport = shadow.getViewport( vp ); _viewport.set( _viewportSize.x * viewport.x, _viewportSize.y * viewport.y, _viewportSize.x * viewport.z, _viewportSize.y * viewport.w ); _state.viewport( _viewport ); shadow.updateMatrices( light, vp ); _frustum = shadow.getFrustum(); renderObject( scene, camera, shadow.camera, light, this.type ); } // do blur pass for VSM if ( ! shadow.isPointLightShadow && this.type === VSMShadowMap ) { VSMPass( shadow, camera ); } shadow.needsUpdate = false; } scope.needsUpdate = false; _renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel ); }; function VSMPass( shadow, camera ) { const geometry = _objects.update( fullScreenMesh ); // vertical pass shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture; shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize; shadowMaterialVertical.uniforms.radius.value = shadow.radius; _renderer.setRenderTarget( shadow.mapPass ); _renderer.clear(); _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null ); // horizontal pass shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture; shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize; shadowMaterialHorizontal.uniforms.radius.value = shadow.radius; _renderer.setRenderTarget( shadow.map ); _renderer.clear(); _renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null ); } function getDepthMaterialVariant( useMorphing, useSkinning, useInstancing ) { const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; let material = _depthMaterials[ index ]; if ( material === undefined ) { material = new MeshDepthMaterial( { depthPacking: RGBADepthPacking, morphTargets: useMorphing, skinning: useSkinning } ); _depthMaterials[ index ] = material; } return material; } function getDistanceMaterialVariant( useMorphing, useSkinning, useInstancing ) { const index = useMorphing << 0 | useSkinning << 1 | useInstancing << 2; let material = _distanceMaterials[ index ]; if ( material === undefined ) { material = new MeshDistanceMaterial( { morphTargets: useMorphing, skinning: useSkinning } ); _distanceMaterials[ index ] = material; } return material; } function getDepthMaterial( object, geometry, material, light, shadowCameraNear, shadowCameraFar, type ) { let result = null; let getMaterialVariant = getDepthMaterialVariant; let customMaterial = object.customDepthMaterial; if ( light.isPointLight === true ) { getMaterialVariant = getDistanceMaterialVariant; customMaterial = object.customDistanceMaterial; } if ( customMaterial === undefined ) { let useMorphing = false; if ( material.morphTargets === true ) { useMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0; } let useSkinning = false; if ( object.isSkinnedMesh === true ) { if ( material.skinning === true ) { useSkinning = true; } else { console.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object ); } } const useInstancing = object.isInstancedMesh === true; result = getMaterialVariant( useMorphing, useSkinning, useInstancing ); } else { result = customMaterial; } if ( _renderer.localClippingEnabled && material.clipShadows === true && material.clippingPlanes.length !== 0 ) { // in this case we need a unique material instance reflecting the // appropriate state const keyA = result.uuid, keyB = material.uuid; let materialsForVariant = _materialCache[ keyA ]; if ( materialsForVariant === undefined ) { materialsForVariant = {}; _materialCache[ keyA ] = materialsForVariant; } let cachedMaterial = materialsForVariant[ keyB ]; if ( cachedMaterial === undefined ) { cachedMaterial = result.clone(); materialsForVariant[ keyB ] = cachedMaterial; } result = cachedMaterial; } result.visible = material.visible; result.wireframe = material.wireframe; if ( type === VSMShadowMap ) { result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side; } else { result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ]; } result.clipShadows = material.clipShadows; result.clippingPlanes = material.clippingPlanes; result.clipIntersection = material.clipIntersection; result.wireframeLinewidth = material.wireframeLinewidth; result.linewidth = material.linewidth; if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) { result.referencePosition.setFromMatrixPosition( light.matrixWorld ); result.nearDistance = shadowCameraNear; result.farDistance = shadowCameraFar; } return result; } function renderObject( object, camera, shadowCamera, light, type ) { if ( object.visible === false ) return; const visible = object.layers.test( camera.layers ); if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) { if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) { object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld ); const geometry = _objects.update( object ); const material = object.material; if ( Array.isArray( material ) ) { const groups = geometry.groups; for ( let k = 0, kl = groups.length; k < kl; k ++ ) { const group = groups[ k ]; const groupMaterial = material[ group.materialIndex ]; if ( groupMaterial && groupMaterial.visible ) { const depthMaterial = getDepthMaterial( object, geometry, groupMaterial, light, shadowCamera.near, shadowCamera.far, type ); _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group ); } } } else if ( material.visible ) { const depthMaterial = getDepthMaterial( object, geometry, material, light, shadowCamera.near, shadowCamera.far, type ); _renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null ); } } } const children = object.children; for ( let i = 0, l = children.length; i < l; i ++ ) { renderObject( children[ i ], camera, shadowCamera, light, type ); } } } function WebGLState( gl, extensions, capabilities ) { const isWebGL2 = capabilities.isWebGL2; function ColorBuffer() { let locked = false; const color = new Vector4(); let currentColorMask = null; const currentColorClear = new Vector4( 0, 0, 0, 0 ); return { setMask: function ( colorMask ) { if ( currentColorMask !== colorMask && ! locked ) { gl.colorMask( colorMask, colorMask, colorMask, colorMask ); currentColorMask = colorMask; } }, setLocked: function ( lock ) { locked = lock; }, setClear: function ( r, g, b, a, premultipliedAlpha ) { if ( premultipliedAlpha === true ) { r *= a; g *= a; b *= a; } color.set( r, g, b, a ); if ( currentColorClear.equals( color ) === false ) { gl.clearColor( r, g, b, a ); currentColorClear.copy( color ); } }, reset: function () { locked = false; currentColorMask = null; currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state } }; } function DepthBuffer() { let locked = false; let currentDepthMask = null; let currentDepthFunc = null; let currentDepthClear = null; return { setTest: function ( depthTest ) { if ( depthTest ) { enable( 2929 ); } else { disable( 2929 ); } }, setMask: function ( depthMask ) { if ( currentDepthMask !== depthMask && ! locked ) { gl.depthMask( depthMask ); currentDepthMask = depthMask; } }, setFunc: function ( depthFunc ) { if ( currentDepthFunc !== depthFunc ) { if ( depthFunc ) { switch ( depthFunc ) { case NeverDepth: gl.depthFunc( 512 ); break; case AlwaysDepth: gl.depthFunc( 519 ); break; case LessDepth: gl.depthFunc( 513 ); break; case LessEqualDepth: gl.depthFunc( 515 ); break; case EqualDepth: gl.depthFunc( 514 ); break; case GreaterEqualDepth: gl.depthFunc( 518 ); break; case GreaterDepth: gl.depthFunc( 516 ); break; case NotEqualDepth: gl.depthFunc( 517 ); break; default: gl.depthFunc( 515 ); } } else { gl.depthFunc( 515 ); } currentDepthFunc = depthFunc; } }, setLocked: function ( lock ) { locked = lock; }, setClear: function ( depth ) { if ( currentDepthClear !== depth ) { gl.clearDepth( depth ); currentDepthClear = depth; } }, reset: function () { locked = false; currentDepthMask = null; currentDepthFunc = null; currentDepthClear = null; } }; } function StencilBuffer() { let locked = false; let currentStencilMask = null; let currentStencilFunc = null; let currentStencilRef = null; let currentStencilFuncMask = null; let currentStencilFail = null; let currentStencilZFail = null; let currentStencilZPass = null; let currentStencilClear = null; return { setTest: function ( stencilTest ) { if ( ! locked ) { if ( stencilTest ) { enable( 2960 ); } else { disable( 2960 ); } } }, setMask: function ( stencilMask ) { if ( currentStencilMask !== stencilMask && ! locked ) { gl.stencilMask( stencilMask ); currentStencilMask = stencilMask; } }, setFunc: function ( stencilFunc, stencilRef, stencilMask ) { if ( currentStencilFunc !== stencilFunc || currentStencilRef !== stencilRef || currentStencilFuncMask !== stencilMask ) { gl.stencilFunc( stencilFunc, stencilRef, stencilMask ); currentStencilFunc = stencilFunc; currentStencilRef = stencilRef; currentStencilFuncMask = stencilMask; } }, setOp: function ( stencilFail, stencilZFail, stencilZPass ) { if ( currentStencilFail !== stencilFail || currentStencilZFail !== stencilZFail || currentStencilZPass !== stencilZPass ) { gl.stencilOp( stencilFail, stencilZFail, stencilZPass ); currentStencilFail = stencilFail; currentStencilZFail = stencilZFail; currentStencilZPass = stencilZPass; } }, setLocked: function ( lock ) { locked = lock; }, setClear: function ( stencil ) { if ( currentStencilClear !== stencil ) { gl.clearStencil( stencil ); currentStencilClear = stencil; } }, reset: function () { locked = false; currentStencilMask = null; currentStencilFunc = null; currentStencilRef = null; currentStencilFuncMask = null; currentStencilFail = null; currentStencilZFail = null; currentStencilZPass = null; currentStencilClear = null; } }; } // const colorBuffer = new ColorBuffer(); const depthBuffer = new DepthBuffer(); const stencilBuffer = new StencilBuffer(); let enabledCapabilities = {}; let currentProgram = null; let currentBlendingEnabled = null; let currentBlending = null; let currentBlendEquation = null; let currentBlendSrc = null; let currentBlendDst = null; let currentBlendEquationAlpha = null; let currentBlendSrcAlpha = null; let currentBlendDstAlpha = null; let currentPremultipledAlpha = false; let currentFlipSided = null; let currentCullFace = null; let currentLineWidth = null; let currentPolygonOffsetFactor = null; let currentPolygonOffsetUnits = null; const maxTextures = gl.getParameter( 35661 ); let lineWidthAvailable = false; let version = 0; const glVersion = gl.getParameter( 7938 ); if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) { version = parseFloat( /^WebGL (\d)/.exec( glVersion )[ 1 ] ); lineWidthAvailable = ( version >= 1.0 ); } else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) { version = parseFloat( /^OpenGL ES (\d)/.exec( glVersion )[ 1 ] ); lineWidthAvailable = ( version >= 2.0 ); } let currentTextureSlot = null; let currentBoundTextures = {}; const currentScissor = new Vector4(); const currentViewport = new Vector4(); function createTexture( type, target, count ) { const data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4. const texture = gl.createTexture(); gl.bindTexture( type, texture ); gl.texParameteri( type, 10241, 9728 ); gl.texParameteri( type, 10240, 9728 ); for ( let i = 0; i < count; i ++ ) { gl.texImage2D( target + i, 0, 6408, 1, 1, 0, 6408, 5121, data ); } return texture; } const emptyTextures = {}; emptyTextures[ 3553 ] = createTexture( 3553, 3553, 1 ); emptyTextures[ 34067 ] = createTexture( 34067, 34069, 6 ); // init colorBuffer.setClear( 0, 0, 0, 1 ); depthBuffer.setClear( 1 ); stencilBuffer.setClear( 0 ); enable( 2929 ); depthBuffer.setFunc( LessEqualDepth ); setFlipSided( false ); setCullFace( CullFaceBack ); enable( 2884 ); setBlending( NoBlending ); // function enable( id ) { if ( enabledCapabilities[ id ] !== true ) { gl.enable( id ); enabledCapabilities[ id ] = true; } } function disable( id ) { if ( enabledCapabilities[ id ] !== false ) { gl.disable( id ); enabledCapabilities[ id ] = false; } } function useProgram( program ) { if ( currentProgram !== program ) { gl.useProgram( program ); currentProgram = program; return true; } return false; } const equationToGL = { [ AddEquation ]: 32774, [ SubtractEquation ]: 32778, [ ReverseSubtractEquation ]: 32779 }; if ( isWebGL2 ) { equationToGL[ MinEquation ] = 32775; equationToGL[ MaxEquation ] = 32776; } else { const extension = extensions.get( 'EXT_blend_minmax' ); if ( extension !== null ) { equationToGL[ MinEquation ] = extension.MIN_EXT; equationToGL[ MaxEquation ] = extension.MAX_EXT; } } const factorToGL = { [ ZeroFactor ]: 0, [ OneFactor ]: 1, [ SrcColorFactor ]: 768, [ SrcAlphaFactor ]: 770, [ SrcAlphaSaturateFactor ]: 776, [ DstColorFactor ]: 774, [ DstAlphaFactor ]: 772, [ OneMinusSrcColorFactor ]: 769, [ OneMinusSrcAlphaFactor ]: 771, [ OneMinusDstColorFactor ]: 775, [ OneMinusDstAlphaFactor ]: 773 }; function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) { if ( blending === NoBlending ) { if ( currentBlendingEnabled ) { disable( 3042 ); currentBlendingEnabled = false; } return; } if ( ! currentBlendingEnabled ) { enable( 3042 ); currentBlendingEnabled = true; } if ( blending !== CustomBlending ) { if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) { if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) { gl.blendEquation( 32774 ); currentBlendEquation = AddEquation; currentBlendEquationAlpha = AddEquation; } if ( premultipliedAlpha ) { switch ( blending ) { case NormalBlending: gl.blendFuncSeparate( 1, 771, 1, 771 ); break; case AdditiveBlending: gl.blendFunc( 1, 1 ); break; case SubtractiveBlending: gl.blendFuncSeparate( 0, 0, 769, 771 ); break; case MultiplyBlending: gl.blendFuncSeparate( 0, 768, 0, 770 ); break; default: console.error( 'THREE.WebGLState: Invalid blending: ', blending ); break; } } else { switch ( blending ) { case NormalBlending: gl.blendFuncSeparate( 770, 771, 1, 771 ); break; case AdditiveBlending: gl.blendFunc( 770, 1 ); break; case SubtractiveBlending: gl.blendFunc( 0, 769 ); break; case MultiplyBlending: gl.blendFunc( 0, 768 ); break; default: console.error( 'THREE.WebGLState: Invalid blending: ', blending ); break; } } currentBlendSrc = null; currentBlendDst = null; currentBlendSrcAlpha = null; currentBlendDstAlpha = null; currentBlending = blending; currentPremultipledAlpha = premultipliedAlpha; } return; } // custom blending blendEquationAlpha = blendEquationAlpha || blendEquation; blendSrcAlpha = blendSrcAlpha || blendSrc; blendDstAlpha = blendDstAlpha || blendDst; if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) { gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] ); currentBlendEquation = blendEquation; currentBlendEquationAlpha = blendEquationAlpha; } if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) { gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] ); currentBlendSrc = blendSrc; currentBlendDst = blendDst; currentBlendSrcAlpha = blendSrcAlpha; currentBlendDstAlpha = blendDstAlpha; } currentBlending = blending; currentPremultipledAlpha = null; } function setMaterial( material, frontFaceCW ) { material.side === DoubleSide ? disable( 2884 ) : enable( 2884 ); let flipSided = ( material.side === BackSide ); if ( frontFaceCW ) flipSided = ! flipSided; setFlipSided( flipSided ); ( material.blending === NormalBlending && material.transparent === false ) ? setBlending( NoBlending ) : setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha ); depthBuffer.setFunc( material.depthFunc ); depthBuffer.setTest( material.depthTest ); depthBuffer.setMask( material.depthWrite ); colorBuffer.setMask( material.colorWrite ); const stencilWrite = material.stencilWrite; stencilBuffer.setTest( stencilWrite ); if ( stencilWrite ) { stencilBuffer.setMask( material.stencilWriteMask ); stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask ); stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass ); } setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits ); } // function setFlipSided( flipSided ) { if ( currentFlipSided !== flipSided ) { if ( flipSided ) { gl.frontFace( 2304 ); } else { gl.frontFace( 2305 ); } currentFlipSided = flipSided; } } function setCullFace( cullFace ) { if ( cullFace !== CullFaceNone ) { enable( 2884 ); if ( cullFace !== currentCullFace ) { if ( cullFace === CullFaceBack ) { gl.cullFace( 1029 ); } else if ( cullFace === CullFaceFront ) { gl.cullFace( 1028 ); } else { gl.cullFace( 1032 ); } } } else { disable( 2884 ); } currentCullFace = cullFace; } function setLineWidth( width ) { if ( width !== currentLineWidth ) { if ( lineWidthAvailable ) gl.lineWidth( width ); currentLineWidth = width; } } function setPolygonOffset( polygonOffset, factor, units ) { if ( polygonOffset ) { enable( 32823 ); if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) { gl.polygonOffset( factor, units ); currentPolygonOffsetFactor = factor; currentPolygonOffsetUnits = units; } } else { disable( 32823 ); } } function setScissorTest( scissorTest ) { if ( scissorTest ) { enable( 3089 ); } else { disable( 3089 ); } } // texture function activeTexture( webglSlot ) { if ( webglSlot === undefined ) webglSlot = 33984 + maxTextures - 1; if ( currentTextureSlot !== webglSlot ) { gl.activeTexture( webglSlot ); currentTextureSlot = webglSlot; } } function bindTexture( webglType, webglTexture ) { if ( currentTextureSlot === null ) { activeTexture(); } let boundTexture = currentBoundTextures[ currentTextureSlot ]; if ( boundTexture === undefined ) { boundTexture = { type: undefined, texture: undefined }; currentBoundTextures[ currentTextureSlot ] = boundTexture; } if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) { gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] ); boundTexture.type = webglType; boundTexture.texture = webglTexture; } } function unbindTexture() { const boundTexture = currentBoundTextures[ currentTextureSlot ]; if ( boundTexture !== undefined && boundTexture.type !== undefined ) { gl.bindTexture( boundTexture.type, null ); boundTexture.type = undefined; boundTexture.texture = undefined; } } function compressedTexImage2D() { try { gl.compressedTexImage2D.apply( gl, arguments ); } catch ( error ) { console.error( 'THREE.WebGLState:', error ); } } function texImage2D() { try { gl.texImage2D.apply( gl, arguments ); } catch ( error ) { console.error( 'THREE.WebGLState:', error ); } } function texImage3D() { try { gl.texImage3D.apply( gl, arguments ); } catch ( error ) { console.error( 'THREE.WebGLState:', error ); } } // function scissor( scissor ) { if ( currentScissor.equals( scissor ) === false ) { gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w ); currentScissor.copy( scissor ); } } function viewport( viewport ) { if ( currentViewport.equals( viewport ) === false ) { gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w ); currentViewport.copy( viewport ); } } // function reset() { enabledCapabilities = {}; currentTextureSlot = null; currentBoundTextures = {}; currentProgram = null; currentBlendingEnabled = null; currentBlending = null; currentBlendEquation = null; currentBlendSrc = null; currentBlendDst = null; currentBlendEquationAlpha = null; currentBlendSrcAlpha = null; currentBlendDstAlpha = null; currentPremultipledAlpha = false; currentFlipSided = null; currentCullFace = null; currentLineWidth = null; currentPolygonOffsetFactor = null; currentPolygonOffsetUnits = null; colorBuffer.reset(); depthBuffer.reset(); stencilBuffer.reset(); } return { buffers: { color: colorBuffer, depth: depthBuffer, stencil: stencilBuffer }, enable: enable, disable: disable, useProgram: useProgram, setBlending: setBlending, setMaterial: setMaterial, setFlipSided: setFlipSided, setCullFace: setCullFace, setLineWidth: setLineWidth, setPolygonOffset: setPolygonOffset, setScissorTest: setScissorTest, activeTexture: activeTexture, bindTexture: bindTexture, unbindTexture: unbindTexture, compressedTexImage2D: compressedTexImage2D, texImage2D: texImage2D, texImage3D: texImage3D, scissor: scissor, viewport: viewport, reset: reset }; } function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) { const isWebGL2 = capabilities.isWebGL2; const maxTextures = capabilities.maxTextures; const maxCubemapSize = capabilities.maxCubemapSize; const maxTextureSize = capabilities.maxTextureSize; const maxSamples = capabilities.maxSamples; const _videoTextures = new WeakMap(); let _canvas; // cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas, // also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")! // Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d). let useOffscreenCanvas = false; try { useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined' && ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null; } catch ( err ) { // Ignore any errors } function createCanvas( width, height ) { // Use OffscreenCanvas when available. Specially needed in web workers return useOffscreenCanvas ? new OffscreenCanvas( width, height ) : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); } function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) { let scale = 1; // handle case if texture exceeds max size if ( image.width > maxSize || image.height > maxSize ) { scale = maxSize / Math.max( image.width, image.height ); } // only perform resize if necessary if ( scale < 1 || needsPowerOfTwo === true ) { // only perform resize for certain image types if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) || ( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) || ( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) { const floor = needsPowerOfTwo ? MathUtils.floorPowerOfTwo : Math.floor; const width = floor( scale * image.width ); const height = floor( scale * image.height ); if ( _canvas === undefined ) _canvas = createCanvas( width, height ); // cube textures can't reuse the same canvas const canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas; canvas.width = width; canvas.height = height; const context = canvas.getContext( '2d' ); context.drawImage( image, 0, 0, width, height ); console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' ); return canvas; } else { if ( 'data' in image ) { console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' ); } return image; } } return image; } function isPowerOfTwo( image ) { return MathUtils.isPowerOfTwo( image.width ) && MathUtils.isPowerOfTwo( image.height ); } function textureNeedsPowerOfTwo( texture ) { if ( isWebGL2 ) return false; return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) || ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ); } function textureNeedsGenerateMipmaps( texture, supportsMips ) { return texture.generateMipmaps && supportsMips && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter; } function generateMipmap( target, texture, width, height ) { _gl.generateMipmap( target ); const textureProperties = properties.get( texture ); // Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11 textureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E; } function getInternalFormat( internalFormatName, glFormat, glType ) { if ( isWebGL2 === false ) return glFormat; if ( internalFormatName !== null ) { if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ]; console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' ); } let internalFormat = glFormat; if ( glFormat === 6403 ) { if ( glType === 5126 ) internalFormat = 33326; if ( glType === 5131 ) internalFormat = 33325; if ( glType === 5121 ) internalFormat = 33321; } if ( glFormat === 6407 ) { if ( glType === 5126 ) internalFormat = 34837; if ( glType === 5131 ) internalFormat = 34843; if ( glType === 5121 ) internalFormat = 32849; } if ( glFormat === 6408 ) { if ( glType === 5126 ) internalFormat = 34836; if ( glType === 5131 ) internalFormat = 34842; if ( glType === 5121 ) internalFormat = 32856; } if ( internalFormat === 33325 || internalFormat === 33326 || internalFormat === 34842 || internalFormat === 34836 ) { extensions.get( 'EXT_color_buffer_float' ); } return internalFormat; } // Fallback filters for non-power-of-2 textures function filterFallback( f ) { if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) { return 9728; } return 9729; } // function onTextureDispose( event ) { const texture = event.target; texture.removeEventListener( 'dispose', onTextureDispose ); deallocateTexture( texture ); if ( texture.isVideoTexture ) { _videoTextures.delete( texture ); } info.memory.textures --; } function onRenderTargetDispose( event ) { const renderTarget = event.target; renderTarget.removeEventListener( 'dispose', onRenderTargetDispose ); deallocateRenderTarget( renderTarget ); info.memory.textures --; } // function deallocateTexture( texture ) { const textureProperties = properties.get( texture ); if ( textureProperties.__webglInit === undefined ) return; _gl.deleteTexture( textureProperties.__webglTexture ); properties.remove( texture ); } function deallocateRenderTarget( renderTarget ) { const renderTargetProperties = properties.get( renderTarget ); const textureProperties = properties.get( renderTarget.texture ); if ( ! renderTarget ) return; if ( textureProperties.__webglTexture !== undefined ) { _gl.deleteTexture( textureProperties.__webglTexture ); } if ( renderTarget.depthTexture ) { renderTarget.depthTexture.dispose(); } if ( renderTarget.isWebGLCubeRenderTarget ) { for ( let i = 0; i < 6; i ++ ) { _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] ); if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] ); } } else { _gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer ); if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer ); if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer ); if ( renderTargetProperties.__webglColorRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer ); if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer ); } properties.remove( renderTarget.texture ); properties.remove( renderTarget ); } // let textureUnits = 0; function resetTextureUnits() { textureUnits = 0; } function allocateTextureUnit() { const textureUnit = textureUnits; if ( textureUnit >= maxTextures ) { console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures ); } textureUnits += 1; return textureUnit; } // function setTexture2D( texture, slot ) { const textureProperties = properties.get( texture ); if ( texture.isVideoTexture ) updateVideoTexture( texture ); if ( texture.version > 0 && textureProperties.__version !== texture.version ) { const image = texture.image; if ( image === undefined ) { console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined' ); } else if ( image.complete === false ) { console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' ); } else { uploadTexture( textureProperties, texture, slot ); return; } } state.activeTexture( 33984 + slot ); state.bindTexture( 3553, textureProperties.__webglTexture ); } function setTexture2DArray( texture, slot ) { const textureProperties = properties.get( texture ); if ( texture.version > 0 && textureProperties.__version !== texture.version ) { uploadTexture( textureProperties, texture, slot ); return; } state.activeTexture( 33984 + slot ); state.bindTexture( 35866, textureProperties.__webglTexture ); } function setTexture3D( texture, slot ) { const textureProperties = properties.get( texture ); if ( texture.version > 0 && textureProperties.__version !== texture.version ) { uploadTexture( textureProperties, texture, slot ); return; } state.activeTexture( 33984 + slot ); state.bindTexture( 32879, textureProperties.__webglTexture ); } function setTextureCube( texture, slot ) { const textureProperties = properties.get( texture ); if ( texture.version > 0 && textureProperties.__version !== texture.version ) { uploadCubeTexture( textureProperties, texture, slot ); return; } state.activeTexture( 33984 + slot ); state.bindTexture( 34067, textureProperties.__webglTexture ); } const wrappingToGL = { [ RepeatWrapping ]: 10497, [ ClampToEdgeWrapping ]: 33071, [ MirroredRepeatWrapping ]: 33648 }; const filterToGL = { [ NearestFilter ]: 9728, [ NearestMipmapNearestFilter ]: 9984, [ NearestMipmapLinearFilter ]: 9986, [ LinearFilter ]: 9729, [ LinearMipmapNearestFilter ]: 9985, [ LinearMipmapLinearFilter ]: 9987 }; function setTextureParameters( textureType, texture, supportsMips ) { if ( supportsMips ) { _gl.texParameteri( textureType, 10242, wrappingToGL[ texture.wrapS ] ); _gl.texParameteri( textureType, 10243, wrappingToGL[ texture.wrapT ] ); if ( textureType === 32879 || textureType === 35866 ) { _gl.texParameteri( textureType, 32882, wrappingToGL[ texture.wrapR ] ); } _gl.texParameteri( textureType, 10240, filterToGL[ texture.magFilter ] ); _gl.texParameteri( textureType, 10241, filterToGL[ texture.minFilter ] ); } else { _gl.texParameteri( textureType, 10242, 33071 ); _gl.texParameteri( textureType, 10243, 33071 ); if ( textureType === 32879 || textureType === 35866 ) { _gl.texParameteri( textureType, 32882, 33071 ); } if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) { console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' ); } _gl.texParameteri( textureType, 10240, filterFallback( texture.magFilter ) ); _gl.texParameteri( textureType, 10241, filterFallback( texture.minFilter ) ); if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) { console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' ); } } const extension = extensions.get( 'EXT_texture_filter_anisotropic' ); if ( extension ) { if ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return; if ( texture.type === HalfFloatType && ( isWebGL2 || extensions.get( 'OES_texture_half_float_linear' ) ) === null ) return; if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) { _gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) ); properties.get( texture ).__currentAnisotropy = texture.anisotropy; } } } function initTexture( textureProperties, texture ) { if ( textureProperties.__webglInit === undefined ) { textureProperties.__webglInit = true; texture.addEventListener( 'dispose', onTextureDispose ); textureProperties.__webglTexture = _gl.createTexture(); info.memory.textures ++; } } function uploadTexture( textureProperties, texture, slot ) { let textureType = 3553; if ( texture.isDataTexture2DArray ) textureType = 35866; if ( texture.isDataTexture3D ) textureType = 32879; initTexture( textureProperties, texture ); state.activeTexture( 33984 + slot ); state.bindTexture( textureType, textureProperties.__webglTexture ); _gl.pixelStorei( 37440, texture.flipY ); _gl.pixelStorei( 37441, texture.premultiplyAlpha ); _gl.pixelStorei( 3317, texture.unpackAlignment ); const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( texture.image ) === false; const image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize ); const supportsMips = isPowerOfTwo( image ) || isWebGL2, glFormat = utils.convert( texture.format ); let glType = utils.convert( texture.type ), glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); setTextureParameters( textureType, texture, supportsMips ); let mipmap; const mipmaps = texture.mipmaps; if ( texture.isDepthTexture ) { // populate depth texture with dummy data glInternalFormat = 6402; if ( isWebGL2 ) { if ( texture.type === FloatType ) { glInternalFormat = 36012; } else if ( texture.type === UnsignedIntType ) { glInternalFormat = 33190; } else if ( texture.type === UnsignedInt248Type$1 ) { glInternalFormat = 35056; } else { glInternalFormat = 33189; // WebGL2 requires sized internalformat for glTexImage2D } } else { if ( texture.type === FloatType ) { console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' ); } } // validation checks for WebGL 1 if ( texture.format === DepthFormat && glInternalFormat === 6402 ) { // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are // DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) { console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' ); texture.type = UnsignedShortType; glType = utils.convert( texture.type ); } } if ( texture.format === DepthStencilFormat && glInternalFormat === 6402 ) { // Depth stencil textures need the DEPTH_STENCIL internal format // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) glInternalFormat = 34041; // The error INVALID_OPERATION is generated by texImage2D if format and internalformat are // DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL. // (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/) if ( texture.type !== UnsignedInt248Type$1 ) { console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' ); texture.type = UnsignedInt248Type$1; glType = utils.convert( texture.type ); } } // state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null ); } else if ( texture.isDataTexture ) { // use manually created mipmaps if available // if there are no manual mipmaps // set 0 level mipmap and then use GL to generate other mipmap levels if ( mipmaps.length > 0 && supportsMips ) { for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); } texture.generateMipmaps = false; textureProperties.__maxMipLevel = mipmaps.length - 1; } else { state.texImage2D( 3553, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data ); textureProperties.__maxMipLevel = 0; } } else if ( texture.isCompressedTexture ) { for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { if ( glFormat !== null ) { state.compressedTexImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); } else { console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' ); } } else { state.texImage2D( 3553, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); } } textureProperties.__maxMipLevel = mipmaps.length - 1; } else if ( texture.isDataTexture2DArray ) { state.texImage3D( 35866, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); textureProperties.__maxMipLevel = 0; } else if ( texture.isDataTexture3D ) { state.texImage3D( 32879, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data ); textureProperties.__maxMipLevel = 0; } else { // regular Texture (image, video, canvas) // use manually created mipmaps if available // if there are no manual mipmaps // set 0 level mipmap and then use GL to generate other mipmap levels if ( mipmaps.length > 0 && supportsMips ) { for ( let i = 0, il = mipmaps.length; i < il; i ++ ) { mipmap = mipmaps[ i ]; state.texImage2D( 3553, i, glInternalFormat, glFormat, glType, mipmap ); } texture.generateMipmaps = false; textureProperties.__maxMipLevel = mipmaps.length - 1; } else { state.texImage2D( 3553, 0, glInternalFormat, glFormat, glType, image ); textureProperties.__maxMipLevel = 0; } } if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { generateMipmap( textureType, texture, image.width, image.height ); } textureProperties.__version = texture.version; if ( texture.onUpdate ) texture.onUpdate( texture ); } function uploadCubeTexture( textureProperties, texture, slot ) { if ( texture.image.length !== 6 ) return; initTexture( textureProperties, texture ); state.activeTexture( 33984 + slot ); state.bindTexture( 34067, textureProperties.__webglTexture ); _gl.pixelStorei( 37440, texture.flipY ); const isCompressed = ( texture && ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture ) ); const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture ); const cubeImage = []; for ( let i = 0; i < 6; i ++ ) { if ( ! isCompressed && ! isDataTexture ) { cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize ); } else { cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ]; } } const image = cubeImage[ 0 ], supportsMips = isPowerOfTwo( image ) || isWebGL2, glFormat = utils.convert( texture.format ), glType = utils.convert( texture.type ), glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType ); setTextureParameters( 34067, texture, supportsMips ); let mipmaps; if ( isCompressed ) { for ( let i = 0; i < 6; i ++ ) { mipmaps = cubeImage[ i ].mipmaps; for ( let j = 0; j < mipmaps.length; j ++ ) { const mipmap = mipmaps[ j ]; if ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) { if ( glFormat !== null ) { state.compressedTexImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data ); } else { console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' ); } } else { state.texImage2D( 34069 + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data ); } } } textureProperties.__maxMipLevel = mipmaps.length - 1; } else { mipmaps = texture.mipmaps; for ( let i = 0; i < 6; i ++ ) { if ( isDataTexture ) { state.texImage2D( 34069 + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data ); for ( let j = 0; j < mipmaps.length; j ++ ) { const mipmap = mipmaps[ j ]; const mipmapImage = mipmap.image[ i ].image; state.texImage2D( 34069 + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data ); } } else { state.texImage2D( 34069 + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] ); for ( let j = 0; j < mipmaps.length; j ++ ) { const mipmap = mipmaps[ j ]; state.texImage2D( 34069 + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] ); } } } textureProperties.__maxMipLevel = mipmaps.length; } if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { // We assume images for cube map have the same size. generateMipmap( 34067, texture, image.width, image.height ); } textureProperties.__version = texture.version; if ( texture.onUpdate ) texture.onUpdate( texture ); } // Render targets // Setup storage for target texture and bind it to correct framebuffer function setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) { const glFormat = utils.convert( renderTarget.texture.format ); const glType = utils.convert( renderTarget.texture.type ); const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null ); _gl.bindFramebuffer( 36160, framebuffer ); _gl.framebufferTexture2D( 36160, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 ); _gl.bindFramebuffer( 36160, null ); } // Setup storage for internal depth/stencil buffers and bind to correct framebuffer function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) { _gl.bindRenderbuffer( 36161, renderbuffer ); if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) { let glInternalFormat = 33189; if ( isMultisample ) { const depthTexture = renderTarget.depthTexture; if ( depthTexture && depthTexture.isDepthTexture ) { if ( depthTexture.type === FloatType ) { glInternalFormat = 36012; } else if ( depthTexture.type === UnsignedIntType ) { glInternalFormat = 33190; } } const samples = getRenderTargetSamples( renderTarget ); _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); } else { _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); } _gl.framebufferRenderbuffer( 36160, 36096, 36161, renderbuffer ); } else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) { if ( isMultisample ) { const samples = getRenderTargetSamples( renderTarget ); _gl.renderbufferStorageMultisample( 36161, samples, 35056, renderTarget.width, renderTarget.height ); } else { _gl.renderbufferStorage( 36161, 34041, renderTarget.width, renderTarget.height ); } _gl.framebufferRenderbuffer( 36160, 33306, 36161, renderbuffer ); } else { const glFormat = utils.convert( renderTarget.texture.format ); const glType = utils.convert( renderTarget.texture.type ); const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); if ( isMultisample ) { const samples = getRenderTargetSamples( renderTarget ); _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); } else { _gl.renderbufferStorage( 36161, glInternalFormat, renderTarget.width, renderTarget.height ); } } _gl.bindRenderbuffer( 36161, null ); } // Setup resources for a Depth Texture for a FBO (needs an extension) function setupDepthTexture( framebuffer, renderTarget ) { const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget ); if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' ); _gl.bindFramebuffer( 36160, framebuffer ); if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) { throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' ); } // upload an empty depth texture with framebuffer size if ( ! properties.get( renderTarget.depthTexture ).__webglTexture || renderTarget.depthTexture.image.width !== renderTarget.width || renderTarget.depthTexture.image.height !== renderTarget.height ) { renderTarget.depthTexture.image.width = renderTarget.width; renderTarget.depthTexture.image.height = renderTarget.height; renderTarget.depthTexture.needsUpdate = true; } setTexture2D( renderTarget.depthTexture, 0 ); const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture; if ( renderTarget.depthTexture.format === DepthFormat ) { _gl.framebufferTexture2D( 36160, 36096, 3553, webglDepthTexture, 0 ); } else if ( renderTarget.depthTexture.format === DepthStencilFormat ) { _gl.framebufferTexture2D( 36160, 33306, 3553, webglDepthTexture, 0 ); } else { throw new Error( 'Unknown depthTexture format' ); } } // Setup GL resources for a non-texture depth buffer function setupDepthRenderbuffer( renderTarget ) { const renderTargetProperties = properties.get( renderTarget ); const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); if ( renderTarget.depthTexture ) { if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' ); setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget ); } else { if ( isCube ) { renderTargetProperties.__webglDepthbuffer = []; for ( let i = 0; i < 6; i ++ ) { _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer[ i ] ); renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer(); setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false ); } } else { _gl.bindFramebuffer( 36160, renderTargetProperties.__webglFramebuffer ); renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer(); setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false ); } } _gl.bindFramebuffer( 36160, null ); } // Set up GL resources for the render target function setupRenderTarget( renderTarget ) { const renderTargetProperties = properties.get( renderTarget ); const textureProperties = properties.get( renderTarget.texture ); renderTarget.addEventListener( 'dispose', onRenderTargetDispose ); textureProperties.__webglTexture = _gl.createTexture(); info.memory.textures ++; const isCube = ( renderTarget.isWebGLCubeRenderTarget === true ); const isMultisample = ( renderTarget.isWebGLMultisampleRenderTarget === true ); const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; // Handles WebGL2 RGBFormat fallback - #18858 if ( isWebGL2 && renderTarget.texture.format === RGBFormat && ( renderTarget.texture.type === FloatType || renderTarget.texture.type === HalfFloatType ) ) { renderTarget.texture.format = RGBAFormat; console.warn( 'THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.' ); } // Setup framebuffer if ( isCube ) { renderTargetProperties.__webglFramebuffer = []; for ( let i = 0; i < 6; i ++ ) { renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer(); } } else { renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer(); if ( isMultisample ) { if ( isWebGL2 ) { renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer(); renderTargetProperties.__webglColorRenderbuffer = _gl.createRenderbuffer(); _gl.bindRenderbuffer( 36161, renderTargetProperties.__webglColorRenderbuffer ); const glFormat = utils.convert( renderTarget.texture.format ); const glType = utils.convert( renderTarget.texture.type ); const glInternalFormat = getInternalFormat( renderTarget.texture.internalFormat, glFormat, glType ); const samples = getRenderTargetSamples( renderTarget ); _gl.renderbufferStorageMultisample( 36161, samples, glInternalFormat, renderTarget.width, renderTarget.height ); _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); _gl.framebufferRenderbuffer( 36160, 36064, 36161, renderTargetProperties.__webglColorRenderbuffer ); _gl.bindRenderbuffer( 36161, null ); if ( renderTarget.depthBuffer ) { renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer(); setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true ); } _gl.bindFramebuffer( 36160, null ); } else { console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); } } } // Setup color buffer if ( isCube ) { state.bindTexture( 34067, textureProperties.__webglTexture ); setTextureParameters( 34067, renderTarget.texture, supportsMips ); for ( let i = 0; i < 6; i ++ ) { setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, 36064, 34069 + i ); } if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { generateMipmap( 34067, renderTarget.texture, renderTarget.width, renderTarget.height ); } state.bindTexture( 34067, null ); } else { state.bindTexture( 3553, textureProperties.__webglTexture ); setTextureParameters( 3553, renderTarget.texture, supportsMips ); setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, 36064, 3553 ); if ( textureNeedsGenerateMipmaps( renderTarget.texture, supportsMips ) ) { generateMipmap( 3553, renderTarget.texture, renderTarget.width, renderTarget.height ); } state.bindTexture( 3553, null ); } // Setup depth and stencil buffers if ( renderTarget.depthBuffer ) { setupDepthRenderbuffer( renderTarget ); } } function updateRenderTargetMipmap( renderTarget ) { const texture = renderTarget.texture; const supportsMips = isPowerOfTwo( renderTarget ) || isWebGL2; if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) { const target = renderTarget.isWebGLCubeRenderTarget ? 34067 : 3553; const webglTexture = properties.get( texture ).__webglTexture; state.bindTexture( target, webglTexture ); generateMipmap( target, texture, renderTarget.width, renderTarget.height ); state.bindTexture( target, null ); } } function updateMultisampleRenderTarget( renderTarget ) { if ( renderTarget.isWebGLMultisampleRenderTarget ) { if ( isWebGL2 ) { const renderTargetProperties = properties.get( renderTarget ); _gl.bindFramebuffer( 36008, renderTargetProperties.__webglMultisampledFramebuffer ); _gl.bindFramebuffer( 36009, renderTargetProperties.__webglFramebuffer ); const width = renderTarget.width; const height = renderTarget.height; let mask = 16384; if ( renderTarget.depthBuffer ) mask |= 256; if ( renderTarget.stencilBuffer ) mask |= 1024; _gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, 9728 ); _gl.bindFramebuffer( 36160, renderTargetProperties.__webglMultisampledFramebuffer ); // see #18905 } else { console.warn( 'THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.' ); } } } function getRenderTargetSamples( renderTarget ) { return ( isWebGL2 && renderTarget.isWebGLMultisampleRenderTarget ) ? Math.min( maxSamples, renderTarget.samples ) : 0; } function updateVideoTexture( texture ) { const frame = info.render.frame; // Check the last frame we updated the VideoTexture if ( _videoTextures.get( texture ) !== frame ) { _videoTextures.set( texture, frame ); texture.update(); } } // backwards compatibility let warnedTexture2D = false; let warnedTextureCube = false; function safeSetTexture2D( texture, slot ) { if ( texture && texture.isWebGLRenderTarget ) { if ( warnedTexture2D === false ) { console.warn( 'THREE.WebGLTextures.safeSetTexture2D: don\'t use render targets as textures. Use their .texture property instead.' ); warnedTexture2D = true; } texture = texture.texture; } setTexture2D( texture, slot ); } function safeSetTextureCube( texture, slot ) { if ( texture && texture.isWebGLCubeRenderTarget ) { if ( warnedTextureCube === false ) { console.warn( 'THREE.WebGLTextures.safeSetTextureCube: don\'t use cube render targets as textures. Use their .texture property instead.' ); warnedTextureCube = true; } texture = texture.texture; } setTextureCube( texture, slot ); } // this.allocateTextureUnit = allocateTextureUnit; this.resetTextureUnits = resetTextureUnits; this.setTexture2D = setTexture2D; this.setTexture2DArray = setTexture2DArray; this.setTexture3D = setTexture3D; this.setTextureCube = setTextureCube; this.setupRenderTarget = setupRenderTarget; this.updateRenderTargetMipmap = updateRenderTargetMipmap; this.updateMultisampleRenderTarget = updateMultisampleRenderTarget; this.safeSetTexture2D = safeSetTexture2D; this.safeSetTextureCube = safeSetTextureCube; } function WebGLUtils( gl, extensions, capabilities ) { const isWebGL2 = capabilities.isWebGL2; function convert( p ) { let extension; if ( p === UnsignedByteType ) return 5121; if ( p === UnsignedShort4444Type ) return 32819; if ( p === UnsignedShort5551Type ) return 32820; if ( p === UnsignedShort565Type ) return 33635; if ( p === ByteType ) return 5120; if ( p === ShortType ) return 5122; if ( p === UnsignedShortType ) return 5123; if ( p === IntType ) return 5124; if ( p === UnsignedIntType ) return 5125; if ( p === FloatType ) return 5126; if ( p === HalfFloatType ) { if ( isWebGL2 ) return 5131; extension = extensions.get( 'OES_texture_half_float' ); if ( extension !== null ) { return extension.HALF_FLOAT_OES; } else { return null; } } if ( p === AlphaFormat ) return 6406; if ( p === RGBFormat ) return 6407; if ( p === RGBAFormat ) return 6408; if ( p === LuminanceFormat ) return 6409; if ( p === LuminanceAlphaFormat ) return 6410; if ( p === DepthFormat ) return 6402; if ( p === DepthStencilFormat ) return 34041; if ( p === RedFormat ) return 6403; // WebGL2 formats. if ( p === RedIntegerFormat ) return 36244; if ( p === RGFormat ) return 33319; if ( p === RGIntegerFormat ) return 33320; if ( p === RGBIntegerFormat ) return 36248; if ( p === RGBAIntegerFormat ) return 36249; if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format$1 || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format$1 ) { extension = extensions.get( 'WEBGL_compressed_texture_s3tc' ); if ( extension !== null ) { if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; if ( p === RGBA_S3TC_DXT1_Format$1 ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; if ( p === RGBA_S3TC_DXT5_Format$1 ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; } else { return null; } } if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) { extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' ); if ( extension !== null ) { if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; } else { return null; } } if ( p === RGB_ETC1_Format ) { extension = extensions.get( 'WEBGL_compressed_texture_etc1' ); if ( extension !== null ) { return extension.COMPRESSED_RGB_ETC1_WEBGL; } else { return null; } } if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) { extension = extensions.get( 'WEBGL_compressed_texture_etc' ); if ( extension !== null ) { if ( p === RGB_ETC2_Format ) return extension.COMPRESSED_RGB8_ETC2; if ( p === RGBA_ETC2_EAC_Format ) return extension.COMPRESSED_RGBA8_ETC2_EAC; } } if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format || p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format || p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format || p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format || p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format || p === SRGB8_ALPHA8_ASTC_4x4_Format || p === SRGB8_ALPHA8_ASTC_5x4_Format || p === SRGB8_ALPHA8_ASTC_5x5_Format || p === SRGB8_ALPHA8_ASTC_6x5_Format || p === SRGB8_ALPHA8_ASTC_6x6_Format || p === SRGB8_ALPHA8_ASTC_8x5_Format || p === SRGB8_ALPHA8_ASTC_8x6_Format || p === SRGB8_ALPHA8_ASTC_8x8_Format || p === SRGB8_ALPHA8_ASTC_10x5_Format || p === SRGB8_ALPHA8_ASTC_10x6_Format || p === SRGB8_ALPHA8_ASTC_10x8_Format || p === SRGB8_ALPHA8_ASTC_10x10_Format || p === SRGB8_ALPHA8_ASTC_12x10_Format || p === SRGB8_ALPHA8_ASTC_12x12_Format ) { extension = extensions.get( 'WEBGL_compressed_texture_astc' ); if ( extension !== null ) { // TODO Complete? return p; } else { return null; } } if ( p === RGBA_BPTC_Format ) { extension = extensions.get( 'EXT_texture_compression_bptc' ); if ( extension !== null ) { // TODO Complete? return p; } else { return null; } } if ( p === UnsignedInt248Type$1 ) { if ( isWebGL2 ) return 34042; extension = extensions.get( 'WEBGL_depth_texture' ); if ( extension !== null ) { return extension.UNSIGNED_INT_24_8_WEBGL; } else { return null; } } } return { convert: convert }; } function ArrayCamera( array = [] ) { PerspectiveCamera.call( this ); this.cameras = array; } ArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), { constructor: ArrayCamera, isArrayCamera: true } ); function Group() { Object3D.call( this ); this.type = 'Group'; } Group.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Group, isGroup: true } ); function WebXRController() { this._targetRay = null; this._grip = null; this._hand = null; } Object.assign( WebXRController.prototype, { constructor: WebXRController, getHandSpace: function () { if ( this._hand === null ) { this._hand = new Group(); this._hand.matrixAutoUpdate = false; this._hand.visible = false; this._hand.joints = []; this._hand.inputState = { pinching: false }; if ( window.XRHand ) { for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { // The transform of this joint will be updated with the joint pose on each frame const joint = new Group(); joint.matrixAutoUpdate = false; joint.visible = false; this._hand.joints.push( joint ); // ?? this._hand.add( joint ); } } } return this._hand; }, getTargetRaySpace: function () { if ( this._targetRay === null ) { this._targetRay = new Group(); this._targetRay.matrixAutoUpdate = false; this._targetRay.visible = false; } return this._targetRay; }, getGripSpace: function () { if ( this._grip === null ) { this._grip = new Group(); this._grip.matrixAutoUpdate = false; this._grip.visible = false; } return this._grip; }, dispatchEvent: function ( event ) { if ( this._targetRay !== null ) { this._targetRay.dispatchEvent( event ); } if ( this._grip !== null ) { this._grip.dispatchEvent( event ); } if ( this._hand !== null ) { this._hand.dispatchEvent( event ); } return this; }, disconnect: function ( inputSource ) { this.dispatchEvent( { type: 'disconnected', data: inputSource } ); if ( this._targetRay !== null ) { this._targetRay.visible = false; } if ( this._grip !== null ) { this._grip.visible = false; } if ( this._hand !== null ) { this._hand.visible = false; } return this; }, update: function ( inputSource, frame, referenceSpace ) { let inputPose = null; let gripPose = null; let handPose = null; const targetRay = this._targetRay; const grip = this._grip; const hand = this._hand; if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) { if ( hand && inputSource.hand ) { handPose = true; for ( let i = 0; i <= window.XRHand.LITTLE_PHALANX_TIP; i ++ ) { if ( inputSource.hand[ i ] ) { // Update the joints groups with the XRJoint poses const jointPose = frame.getJointPose( inputSource.hand[ i ], referenceSpace ); const joint = hand.joints[ i ]; if ( jointPose !== null ) { joint.matrix.fromArray( jointPose.transform.matrix ); joint.matrix.decompose( joint.position, joint.rotation, joint.scale ); joint.jointRadius = jointPose.radius; } joint.visible = jointPose !== null; // Custom events // Check pinch const indexTip = hand.joints[ window.XRHand.INDEX_PHALANX_TIP ]; const thumbTip = hand.joints[ window.XRHand.THUMB_PHALANX_TIP ]; const distance = indexTip.position.distanceTo( thumbTip.position ); const distanceToPinch = 0.02; const threshold = 0.005; if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) { hand.inputState.pinching = false; this.dispatchEvent( { type: 'pinchend', handedness: inputSource.handedness, target: this } ); } else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) { hand.inputState.pinching = true; this.dispatchEvent( { type: 'pinchstart', handedness: inputSource.handedness, target: this } ); } } } } else { if ( targetRay !== null ) { inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace ); if ( inputPose !== null ) { targetRay.matrix.fromArray( inputPose.transform.matrix ); targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale ); } } if ( grip !== null && inputSource.gripSpace ) { gripPose = frame.getPose( inputSource.gripSpace, referenceSpace ); if ( gripPose !== null ) { grip.matrix.fromArray( gripPose.transform.matrix ); grip.matrix.decompose( grip.position, grip.rotation, grip.scale ); } } } } if ( targetRay !== null ) { targetRay.visible = ( inputPose !== null ); } if ( grip !== null ) { grip.visible = ( gripPose !== null ); } if ( hand !== null ) { hand.visible = ( handPose !== null ); } return this; } } ); function WebXRManager( renderer, gl ) { const scope = this; let session = null; let framebufferScaleFactor = 1.0; let referenceSpace = null; let referenceSpaceType = 'local-floor'; let pose = null; const controllers = []; const inputSourcesMap = new Map(); // const cameraL = new PerspectiveCamera(); cameraL.layers.enable( 1 ); cameraL.viewport = new Vector4(); const cameraR = new PerspectiveCamera(); cameraR.layers.enable( 2 ); cameraR.viewport = new Vector4(); const cameras = [ cameraL, cameraR ]; const cameraVR = new ArrayCamera(); cameraVR.layers.enable( 1 ); cameraVR.layers.enable( 2 ); let _currentDepthNear = null; let _currentDepthFar = null; // this.enabled = false; this.isPresenting = false; this.getController = function ( index ) { let controller = controllers[ index ]; if ( controller === undefined ) { controller = new WebXRController(); controllers[ index ] = controller; } return controller.getTargetRaySpace(); }; this.getControllerGrip = function ( index ) { let controller = controllers[ index ]; if ( controller === undefined ) { controller = new WebXRController(); controllers[ index ] = controller; } return controller.getGripSpace(); }; this.getHand = function ( index ) { let controller = controllers[ index ]; if ( controller === undefined ) { controller = new WebXRController(); controllers[ index ] = controller; } return controller.getHandSpace(); }; // function onSessionEvent( event ) { const controller = inputSourcesMap.get( event.inputSource ); if ( controller ) { controller.dispatchEvent( { type: event.type, data: event.inputSource } ); } } function onSessionEnd() { inputSourcesMap.forEach( function ( controller, inputSource ) { controller.disconnect( inputSource ); } ); inputSourcesMap.clear(); // renderer.setFramebuffer( null ); renderer.setRenderTarget( renderer.getRenderTarget() ); // Hack #15830 animation.stop(); scope.isPresenting = false; scope.dispatchEvent( { type: 'sessionend' } ); } function onRequestReferenceSpace( value ) { referenceSpace = value; animation.setContext( session ); animation.start(); scope.isPresenting = true; scope.dispatchEvent( { type: 'sessionstart' } ); } this.setFramebufferScaleFactor = function ( value ) { framebufferScaleFactor = value; if ( scope.isPresenting === true ) { console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' ); } }; this.setReferenceSpaceType = function ( value ) { referenceSpaceType = value; if ( scope.isPresenting === true ) { console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' ); } }; this.getReferenceSpace = function () { return referenceSpace; }; this.getSession = function () { return session; }; this.setSession = function ( value ) { session = value; if ( session !== null ) { session.addEventListener( 'select', onSessionEvent ); session.addEventListener( 'selectstart', onSessionEvent ); session.addEventListener( 'selectend', onSessionEvent ); session.addEventListener( 'squeeze', onSessionEvent ); session.addEventListener( 'squeezestart', onSessionEvent ); session.addEventListener( 'squeezeend', onSessionEvent ); session.addEventListener( 'end', onSessionEnd ); const attributes = gl.getContextAttributes(); if ( attributes.xrCompatible !== true ) { gl.makeXRCompatible(); } const layerInit = { antialias: attributes.antialias, alpha: attributes.alpha, depth: attributes.depth, stencil: attributes.stencil, framebufferScaleFactor: framebufferScaleFactor }; // eslint-disable-next-line no-undef const baseLayer = new XRWebGLLayer( session, gl, layerInit ); session.updateRenderState( { baseLayer: baseLayer } ); session.requestReferenceSpace( referenceSpaceType ).then( onRequestReferenceSpace ); // session.addEventListener( 'inputsourceschange', updateInputSources ); } }; function updateInputSources( event ) { const inputSources = session.inputSources; // Assign inputSources to available controllers for ( let i = 0; i < controllers.length; i ++ ) { inputSourcesMap.set( inputSources[ i ], controllers[ i ] ); } // Notify disconnected for ( let i = 0; i < event.removed.length; i ++ ) { const inputSource = event.removed[ i ]; const controller = inputSourcesMap.get( inputSource ); if ( controller ) { controller.dispatchEvent( { type: 'disconnected', data: inputSource } ); inputSourcesMap.delete( inputSource ); } } // Notify connected for ( let i = 0; i < event.added.length; i ++ ) { const inputSource = event.added[ i ]; const controller = inputSourcesMap.get( inputSource ); if ( controller ) { controller.dispatchEvent( { type: 'connected', data: inputSource } ); } } } // const cameraLPos = new Vector3(); const cameraRPos = new Vector3(); /** * Assumes 2 cameras that are parallel and share an X-axis, and that * the cameras' projection and world matrices have already been set. * And that near and far planes are identical for both cameras. * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765 */ function setProjectionFromUnion( camera, cameraL, cameraR ) { cameraLPos.setFromMatrixPosition( cameraL.matrixWorld ); cameraRPos.setFromMatrixPosition( cameraR.matrixWorld ); const ipd = cameraLPos.distanceTo( cameraRPos ); const projL = cameraL.projectionMatrix.elements; const projR = cameraR.projectionMatrix.elements; // VR systems will have identical far and near planes, and // most likely identical top and bottom frustum extents. // Use the left camera for these values. const near = projL[ 14 ] / ( projL[ 10 ] - 1 ); const far = projL[ 14 ] / ( projL[ 10 ] + 1 ); const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ]; const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ]; const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ]; const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ]; const left = near * leftFov; const right = near * rightFov; // Calculate the new camera's position offset from the // left camera. xOffset should be roughly half `ipd`. const zOffset = ipd / ( - leftFov + rightFov ); const xOffset = zOffset * - leftFov; // TODO: Better way to apply this offset? cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale ); camera.translateX( xOffset ); camera.translateZ( zOffset ); camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale ); camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); // Find the union of the frustum values of the cameras and scale // the values so that the near plane's position does not change in world space, // although must now be relative to the new union camera. const near2 = near + zOffset; const far2 = far + zOffset; const left2 = left - xOffset; const right2 = right + ( ipd - xOffset ); const top2 = topFov * far / far2 * near2; const bottom2 = bottomFov * far / far2 * near2; camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 ); } function updateCamera( camera, parent ) { if ( parent === null ) { camera.matrixWorld.copy( camera.matrix ); } else { camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix ); } camera.matrixWorldInverse.copy( camera.matrixWorld ).invert(); } this.getCamera = function ( camera ) { cameraVR.near = cameraR.near = cameraL.near = camera.near; cameraVR.far = cameraR.far = cameraL.far = camera.far; if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) { // Note that the new renderState won't apply until the next frame. See #18320 session.updateRenderState( { depthNear: cameraVR.near, depthFar: cameraVR.far } ); _currentDepthNear = cameraVR.near; _currentDepthFar = cameraVR.far; } const parent = camera.parent; const cameras = cameraVR.cameras; updateCamera( cameraVR, parent ); for ( let i = 0; i < cameras.length; i ++ ) { updateCamera( cameras[ i ], parent ); } // update camera and its children camera.matrixWorld.copy( cameraVR.matrixWorld ); const children = camera.children; for ( let i = 0, l = children.length; i < l; i ++ ) { children[ i ].updateMatrixWorld( true ); } // update projection matrix for proper view frustum culling if ( cameras.length === 2 ) { setProjectionFromUnion( cameraVR, cameraL, cameraR ); } else { // assume single camera setup (AR) cameraVR.projectionMatrix.copy( cameraL.projectionMatrix ); } return cameraVR; }; // Animation Loop let onAnimationFrameCallback = null; function onAnimationFrame( time, frame ) { pose = frame.getViewerPose( referenceSpace ); if ( pose !== null ) { const views = pose.views; const baseLayer = session.renderState.baseLayer; renderer.setFramebuffer( baseLayer.framebuffer ); let cameraVRNeedsUpdate = false; // check if it's necessary to rebuild cameraVR's camera list if ( views.length !== cameraVR.cameras.length ) { cameraVR.cameras.length = 0; cameraVRNeedsUpdate = true; } for ( let i = 0; i < views.length; i ++ ) { const view = views[ i ]; const viewport = baseLayer.getViewport( view ); const camera = cameras[ i ]; camera.matrix.fromArray( view.transform.matrix ); camera.projectionMatrix.fromArray( view.projectionMatrix ); camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height ); if ( i === 0 ) { cameraVR.matrix.copy( camera.matrix ); } if ( cameraVRNeedsUpdate === true ) { cameraVR.cameras.push( camera ); } } } // const inputSources = session.inputSources; for ( let i = 0; i < controllers.length; i ++ ) { const controller = controllers[ i ]; const inputSource = inputSources[ i ]; controller.update( inputSource, frame, referenceSpace ); } if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame ); } const animation = new WebGLAnimation(); animation.setAnimationLoop( onAnimationFrame ); this.setAnimationLoop = function ( callback ) { onAnimationFrameCallback = callback; }; this.dispose = function () {}; } Object.assign( WebXRManager.prototype, EventDispatcher$1.prototype ); function WebGLMaterials( properties ) { function refreshFogUniforms( uniforms, fog ) { uniforms.fogColor.value.copy( fog.color ); if ( fog.isFog ) { uniforms.fogNear.value = fog.near; uniforms.fogFar.value = fog.far; } else if ( fog.isFogExp2 ) { uniforms.fogDensity.value = fog.density; } } function refreshMaterialUniforms( uniforms, material, pixelRatio, height ) { if ( material.isMeshBasicMaterial ) { refreshUniformsCommon( uniforms, material ); } else if ( material.isMeshLambertMaterial ) { refreshUniformsCommon( uniforms, material ); refreshUniformsLambert( uniforms, material ); } else if ( material.isMeshToonMaterial ) { refreshUniformsCommon( uniforms, material ); refreshUniformsToon( uniforms, material ); } else if ( material.isMeshPhongMaterial ) { refreshUniformsCommon( uniforms, material ); refreshUniformsPhong( uniforms, material ); } else if ( material.isMeshStandardMaterial ) { refreshUniformsCommon( uniforms, material ); if ( material.isMeshPhysicalMaterial ) { refreshUniformsPhysical( uniforms, material ); } else { refreshUniformsStandard( uniforms, material ); } } else if ( material.isMeshMatcapMaterial ) { refreshUniformsCommon( uniforms, material ); refreshUniformsMatcap( uniforms, material ); } else if ( material.isMeshDepthMaterial ) { refreshUniformsCommon( uniforms, material ); refreshUniformsDepth( uniforms, material ); } else if ( material.isMeshDistanceMaterial ) { refreshUniformsCommon( uniforms, material ); refreshUniformsDistance( uniforms, material ); } else if ( material.isMeshNormalMaterial ) { refreshUniformsCommon( uniforms, material ); refreshUniformsNormal( uniforms, material ); } else if ( material.isLineBasicMaterial ) { refreshUniformsLine( uniforms, material ); if ( material.isLineDashedMaterial ) { refreshUniformsDash( uniforms, material ); } } else if ( material.isPointsMaterial ) { refreshUniformsPoints( uniforms, material, pixelRatio, height ); } else if ( material.isSpriteMaterial ) { refreshUniformsSprites( uniforms, material ); } else if ( material.isShadowMaterial ) { uniforms.color.value.copy( material.color ); uniforms.opacity.value = material.opacity; } else if ( material.isShaderMaterial ) { material.uniformsNeedUpdate = false; // #15581 } } function refreshUniformsCommon( uniforms, material ) { uniforms.opacity.value = material.opacity; if ( material.color ) { uniforms.diffuse.value.copy( material.color ); } if ( material.emissive ) { uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); } if ( material.map ) { uniforms.map.value = material.map; } if ( material.alphaMap ) { uniforms.alphaMap.value = material.alphaMap; } if ( material.specularMap ) { uniforms.specularMap.value = material.specularMap; } const envMap = properties.get( material ).envMap; if ( envMap ) { uniforms.envMap.value = envMap; uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap._needsFlipEnvMap ) ? - 1 : 1; uniforms.reflectivity.value = material.reflectivity; uniforms.refractionRatio.value = material.refractionRatio; const maxMipLevel = properties.get( envMap ).__maxMipLevel; if ( maxMipLevel !== undefined ) { uniforms.maxMipLevel.value = maxMipLevel; } } if ( material.lightMap ) { uniforms.lightMap.value = material.lightMap; uniforms.lightMapIntensity.value = material.lightMapIntensity; } if ( material.aoMap ) { uniforms.aoMap.value = material.aoMap; uniforms.aoMapIntensity.value = material.aoMapIntensity; } // uv repeat and offset setting priorities // 1. color map // 2. specular map // 3. displacementMap map // 4. normal map // 5. bump map // 6. roughnessMap map // 7. metalnessMap map // 8. alphaMap map // 9. emissiveMap map // 10. clearcoat map // 11. clearcoat normal map // 12. clearcoat roughnessMap map let uvScaleMap; if ( material.map ) { uvScaleMap = material.map; } else if ( material.specularMap ) { uvScaleMap = material.specularMap; } else if ( material.displacementMap ) { uvScaleMap = material.displacementMap; } else if ( material.normalMap ) { uvScaleMap = material.normalMap; } else if ( material.bumpMap ) { uvScaleMap = material.bumpMap; } else if ( material.roughnessMap ) { uvScaleMap = material.roughnessMap; } else if ( material.metalnessMap ) { uvScaleMap = material.metalnessMap; } else if ( material.alphaMap ) { uvScaleMap = material.alphaMap; } else if ( material.emissiveMap ) { uvScaleMap = material.emissiveMap; } else if ( material.clearcoatMap ) { uvScaleMap = material.clearcoatMap; } else if ( material.clearcoatNormalMap ) { uvScaleMap = material.clearcoatNormalMap; } else if ( material.clearcoatRoughnessMap ) { uvScaleMap = material.clearcoatRoughnessMap; } if ( uvScaleMap !== undefined ) { // backwards compatibility if ( uvScaleMap.isWebGLRenderTarget ) { uvScaleMap = uvScaleMap.texture; } if ( uvScaleMap.matrixAutoUpdate === true ) { uvScaleMap.updateMatrix(); } uniforms.uvTransform.value.copy( uvScaleMap.matrix ); } // uv repeat and offset setting priorities for uv2 // 1. ao map // 2. light map let uv2ScaleMap; if ( material.aoMap ) { uv2ScaleMap = material.aoMap; } else if ( material.lightMap ) { uv2ScaleMap = material.lightMap; } if ( uv2ScaleMap !== undefined ) { // backwards compatibility if ( uv2ScaleMap.isWebGLRenderTarget ) { uv2ScaleMap = uv2ScaleMap.texture; } if ( uv2ScaleMap.matrixAutoUpdate === true ) { uv2ScaleMap.updateMatrix(); } uniforms.uv2Transform.value.copy( uv2ScaleMap.matrix ); } } function refreshUniformsLine( uniforms, material ) { uniforms.diffuse.value.copy( material.color ); uniforms.opacity.value = material.opacity; } function refreshUniformsDash( uniforms, material ) { uniforms.dashSize.value = material.dashSize; uniforms.totalSize.value = material.dashSize + material.gapSize; uniforms.scale.value = material.scale; } function refreshUniformsPoints( uniforms, material, pixelRatio, height ) { uniforms.diffuse.value.copy( material.color ); uniforms.opacity.value = material.opacity; uniforms.size.value = material.size * pixelRatio; uniforms.scale.value = height * 0.5; if ( material.map ) { uniforms.map.value = material.map; } if ( material.alphaMap ) { uniforms.alphaMap.value = material.alphaMap; } // uv repeat and offset setting priorities // 1. color map // 2. alpha map let uvScaleMap; if ( material.map ) { uvScaleMap = material.map; } else if ( material.alphaMap ) { uvScaleMap = material.alphaMap; } if ( uvScaleMap !== undefined ) { if ( uvScaleMap.matrixAutoUpdate === true ) { uvScaleMap.updateMatrix(); } uniforms.uvTransform.value.copy( uvScaleMap.matrix ); } } function refreshUniformsSprites( uniforms, material ) { uniforms.diffuse.value.copy( material.color ); uniforms.opacity.value = material.opacity; uniforms.rotation.value = material.rotation; if ( material.map ) { uniforms.map.value = material.map; } if ( material.alphaMap ) { uniforms.alphaMap.value = material.alphaMap; } // uv repeat and offset setting priorities // 1. color map // 2. alpha map let uvScaleMap; if ( material.map ) { uvScaleMap = material.map; } else if ( material.alphaMap ) { uvScaleMap = material.alphaMap; } if ( uvScaleMap !== undefined ) { if ( uvScaleMap.matrixAutoUpdate === true ) { uvScaleMap.updateMatrix(); } uniforms.uvTransform.value.copy( uvScaleMap.matrix ); } } function refreshUniformsLambert( uniforms, material ) { if ( material.emissiveMap ) { uniforms.emissiveMap.value = material.emissiveMap; } } function refreshUniformsPhong( uniforms, material ) { uniforms.specular.value.copy( material.specular ); uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 ) if ( material.emissiveMap ) { uniforms.emissiveMap.value = material.emissiveMap; } if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; uniforms.bumpScale.value = material.bumpScale; if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; } if ( material.normalMap ) { uniforms.normalMap.value = material.normalMap; uniforms.normalScale.value.copy( material.normalScale ); if ( material.side === BackSide ) uniforms.normalScale.value.negate(); } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } } function refreshUniformsToon( uniforms, material ) { if ( material.gradientMap ) { uniforms.gradientMap.value = material.gradientMap; } if ( material.emissiveMap ) { uniforms.emissiveMap.value = material.emissiveMap; } if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; uniforms.bumpScale.value = material.bumpScale; if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; } if ( material.normalMap ) { uniforms.normalMap.value = material.normalMap; uniforms.normalScale.value.copy( material.normalScale ); if ( material.side === BackSide ) uniforms.normalScale.value.negate(); } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } } function refreshUniformsStandard( uniforms, material ) { uniforms.roughness.value = material.roughness; uniforms.metalness.value = material.metalness; if ( material.roughnessMap ) { uniforms.roughnessMap.value = material.roughnessMap; } if ( material.metalnessMap ) { uniforms.metalnessMap.value = material.metalnessMap; } if ( material.emissiveMap ) { uniforms.emissiveMap.value = material.emissiveMap; } if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; uniforms.bumpScale.value = material.bumpScale; if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; } if ( material.normalMap ) { uniforms.normalMap.value = material.normalMap; uniforms.normalScale.value.copy( material.normalScale ); if ( material.side === BackSide ) uniforms.normalScale.value.negate(); } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } const envMap = properties.get( material ).envMap; if ( envMap ) { //uniforms.envMap.value = material.envMap; // part of uniforms common uniforms.envMapIntensity.value = material.envMapIntensity; } } function refreshUniformsPhysical( uniforms, material ) { refreshUniformsStandard( uniforms, material ); uniforms.reflectivity.value = material.reflectivity; // also part of uniforms common uniforms.clearcoat.value = material.clearcoat; uniforms.clearcoatRoughness.value = material.clearcoatRoughness; if ( material.sheen ) uniforms.sheen.value.copy( material.sheen ); if ( material.clearcoatMap ) { uniforms.clearcoatMap.value = material.clearcoatMap; } if ( material.clearcoatRoughnessMap ) { uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap; } if ( material.clearcoatNormalMap ) { uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale ); uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap; if ( material.side === BackSide ) { uniforms.clearcoatNormalScale.value.negate(); } } uniforms.transmission.value = material.transmission; if ( material.transmissionMap ) { uniforms.transmissionMap.value = material.transmissionMap; } } function refreshUniformsMatcap( uniforms, material ) { if ( material.matcap ) { uniforms.matcap.value = material.matcap; } if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; uniforms.bumpScale.value = material.bumpScale; if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; } if ( material.normalMap ) { uniforms.normalMap.value = material.normalMap; uniforms.normalScale.value.copy( material.normalScale ); if ( material.side === BackSide ) uniforms.normalScale.value.negate(); } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } } function refreshUniformsDepth( uniforms, material ) { if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } } function refreshUniformsDistance( uniforms, material ) { if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } uniforms.referencePosition.value.copy( material.referencePosition ); uniforms.nearDistance.value = material.nearDistance; uniforms.farDistance.value = material.farDistance; } function refreshUniformsNormal( uniforms, material ) { if ( material.bumpMap ) { uniforms.bumpMap.value = material.bumpMap; uniforms.bumpScale.value = material.bumpScale; if ( material.side === BackSide ) uniforms.bumpScale.value *= - 1; } if ( material.normalMap ) { uniforms.normalMap.value = material.normalMap; uniforms.normalScale.value.copy( material.normalScale ); if ( material.side === BackSide ) uniforms.normalScale.value.negate(); } if ( material.displacementMap ) { uniforms.displacementMap.value = material.displacementMap; uniforms.displacementScale.value = material.displacementScale; uniforms.displacementBias.value = material.displacementBias; } } return { refreshFogUniforms: refreshFogUniforms, refreshMaterialUniforms: refreshMaterialUniforms }; } function createCanvasElement() { const canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ); canvas.style.display = 'block'; return canvas; } function WebGLRenderer( parameters ) { parameters = parameters || {}; const _canvas = parameters.canvas !== undefined ? parameters.canvas : createCanvasElement(), _context = parameters.context !== undefined ? parameters.context : null, _alpha = parameters.alpha !== undefined ? parameters.alpha : false, _depth = parameters.depth !== undefined ? parameters.depth : true, _stencil = parameters.stencil !== undefined ? parameters.stencil : true, _antialias = parameters.antialias !== undefined ? parameters.antialias : false, _premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true, _preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false, _powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default', _failIfMajorPerformanceCaveat = parameters.failIfMajorPerformanceCaveat !== undefined ? parameters.failIfMajorPerformanceCaveat : false; let currentRenderList = null; let currentRenderState = null; // render() can be called from within a callback triggered by another render. // We track this so that the nested render call gets its state isolated from the parent render call. const renderStateStack = []; // public properties this.domElement = _canvas; // Debug configuration container this.debug = { /** * Enables error checking and reporting when shader programs are being compiled * @type {boolean} */ checkShaderErrors: true }; // clearing this.autoClear = true; this.autoClearColor = true; this.autoClearDepth = true; this.autoClearStencil = true; // scene graph this.sortObjects = true; // user-defined clipping this.clippingPlanes = []; this.localClippingEnabled = false; // physically based shading this.gammaFactor = 2.0; // for backwards compatibility this.outputEncoding = LinearEncoding; // physical lights this.physicallyCorrectLights = false; // tone mapping this.toneMapping = NoToneMapping; this.toneMappingExposure = 1.0; // morphs this.maxMorphTargets = 8; this.maxMorphNormals = 4; // internal properties const _this = this; let _isContextLost = false; // internal state cache let _framebuffer = null; let _currentActiveCubeFace = 0; let _currentActiveMipmapLevel = 0; let _currentRenderTarget = null; let _currentFramebuffer = null; let _currentMaterialId = - 1; let _currentCamera = null; const _currentViewport = new Vector4(); const _currentScissor = new Vector4(); let _currentScissorTest = null; // let _width = _canvas.width; let _height = _canvas.height; let _pixelRatio = 1; let _opaqueSort = null; let _transparentSort = null; const _viewport = new Vector4( 0, 0, _width, _height ); const _scissor = new Vector4( 0, 0, _width, _height ); let _scissorTest = false; // frustum const _frustum = new Frustum(); // clipping let _clippingEnabled = false; let _localClippingEnabled = false; // camera matrices cache const _projScreenMatrix = new Matrix4(); const _vector3 = new Vector3(); const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true }; function getTargetPixelRatio() { return _currentRenderTarget === null ? _pixelRatio : 1; } // initialize let _gl = _context; function getContext( contextNames, contextAttributes ) { for ( let i = 0; i < contextNames.length; i ++ ) { const contextName = contextNames[ i ]; const context = _canvas.getContext( contextName, contextAttributes ); if ( context !== null ) return context; } return null; } try { const contextAttributes = { alpha: _alpha, depth: _depth, stencil: _stencil, antialias: _antialias, premultipliedAlpha: _premultipliedAlpha, preserveDrawingBuffer: _preserveDrawingBuffer, powerPreference: _powerPreference, failIfMajorPerformanceCaveat: _failIfMajorPerformanceCaveat }; // event listeners must be registered before WebGL context is created, see #12753 _canvas.addEventListener( 'webglcontextlost', onContextLost, false ); _canvas.addEventListener( 'webglcontextrestored', onContextRestore, false ); if ( _gl === null ) { const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ]; if ( _this.isWebGL1Renderer === true ) { contextNames.shift(); } _gl = getContext( contextNames, contextAttributes ); if ( _gl === null ) { if ( getContext( contextNames ) ) { throw new Error( 'Error creating WebGL context with your selected attributes.' ); } else { throw new Error( 'Error creating WebGL context.' ); } } } // Some experimental-webgl implementations do not have getShaderPrecisionFormat if ( _gl.getShaderPrecisionFormat === undefined ) { _gl.getShaderPrecisionFormat = function () { return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 }; }; } } catch ( error ) { console.error( 'THREE.WebGLRenderer: ' + error.message ); throw error; } let extensions, capabilities, state, info; let properties, textures, cubemaps, attributes, geometries, objects; let programCache, materials, renderLists, renderStates, clipping; let background, morphtargets, bufferRenderer, indexedBufferRenderer; let utils, bindingStates; function initGLContext() { extensions = new WebGLExtensions( _gl ); capabilities = new WebGLCapabilities( _gl, extensions, parameters ); if ( capabilities.isWebGL2 === false ) { extensions.get( 'WEBGL_depth_texture' ); extensions.get( 'OES_texture_float' ); extensions.get( 'OES_texture_half_float' ); extensions.get( 'OES_texture_half_float_linear' ); extensions.get( 'OES_standard_derivatives' ); extensions.get( 'OES_element_index_uint' ); extensions.get( 'OES_vertex_array_object' ); extensions.get( 'ANGLE_instanced_arrays' ); } extensions.get( 'OES_texture_float_linear' ); utils = new WebGLUtils( _gl, extensions, capabilities ); state = new WebGLState( _gl, extensions, capabilities ); state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); info = new WebGLInfo( _gl ); properties = new WebGLProperties(); textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ); cubemaps = new WebGLCubeMaps( _this ); attributes = new WebGLAttributes( _gl, capabilities ); bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities ); geometries = new WebGLGeometries( _gl, attributes, info, bindingStates ); objects = new WebGLObjects( _gl, geometries, attributes, info ); morphtargets = new WebGLMorphtargets( _gl ); clipping = new WebGLClipping( properties ); programCache = new WebGLPrograms( _this, cubemaps, extensions, capabilities, bindingStates, clipping ); materials = new WebGLMaterials( properties ); renderLists = new WebGLRenderLists( properties ); renderStates = new WebGLRenderStates( extensions, capabilities ); background = new WebGLBackground( _this, cubemaps, state, objects, _premultipliedAlpha ); bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities ); indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities ); info.programs = programCache.programs; _this.capabilities = capabilities; _this.extensions = extensions; _this.properties = properties; _this.renderLists = renderLists; _this.state = state; _this.info = info; } initGLContext(); // xr const xr = new WebXRManager( _this, _gl ); this.xr = xr; // shadow map const shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize ); this.shadowMap = shadowMap; // API this.getContext = function () { return _gl; }; this.getContextAttributes = function () { return _gl.getContextAttributes(); }; this.forceContextLoss = function () { const extension = extensions.get( 'WEBGL_lose_context' ); if ( extension ) extension.loseContext(); }; this.forceContextRestore = function () { const extension = extensions.get( 'WEBGL_lose_context' ); if ( extension ) extension.restoreContext(); }; this.getPixelRatio = function () { return _pixelRatio; }; this.setPixelRatio = function ( value ) { if ( value === undefined ) return; _pixelRatio = value; this.setSize( _width, _height, false ); }; this.getSize = function ( target ) { if ( target === undefined ) { console.warn( 'WebGLRenderer: .getsize() now requires a Vector2 as an argument' ); target = new Vector2(); } return target.set( _width, _height ); }; this.setSize = function ( width, height, updateStyle ) { if ( xr.isPresenting ) { console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' ); return; } _width = width; _height = height; _canvas.width = Math.floor( width * _pixelRatio ); _canvas.height = Math.floor( height * _pixelRatio ); if ( updateStyle !== false ) { _canvas.style.width = width + 'px'; _canvas.style.height = height + 'px'; } this.setViewport( 0, 0, width, height ); }; this.getDrawingBufferSize = function ( target ) { if ( target === undefined ) { console.warn( 'WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument' ); target = new Vector2(); } return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor(); }; this.setDrawingBufferSize = function ( width, height, pixelRatio ) { _width = width; _height = height; _pixelRatio = pixelRatio; _canvas.width = Math.floor( width * pixelRatio ); _canvas.height = Math.floor( height * pixelRatio ); this.setViewport( 0, 0, width, height ); }; this.getCurrentViewport = function ( target ) { if ( target === undefined ) { console.warn( 'WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument' ); target = new Vector4(); } return target.copy( _currentViewport ); }; this.getViewport = function ( target ) { return target.copy( _viewport ); }; this.setViewport = function ( x, y, width, height ) { if ( x.isVector4 ) { _viewport.set( x.x, x.y, x.z, x.w ); } else { _viewport.set( x, y, width, height ); } state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() ); }; this.getScissor = function ( target ) { return target.copy( _scissor ); }; this.setScissor = function ( x, y, width, height ) { if ( x.isVector4 ) { _scissor.set( x.x, x.y, x.z, x.w ); } else { _scissor.set( x, y, width, height ); } state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() ); }; this.getScissorTest = function () { return _scissorTest; }; this.setScissorTest = function ( boolean ) { state.setScissorTest( _scissorTest = boolean ); }; this.setOpaqueSort = function ( method ) { _opaqueSort = method; }; this.setTransparentSort = function ( method ) { _transparentSort = method; }; // Clearing this.getClearColor = function ( target ) { if ( target === undefined ) { console.warn( 'WebGLRenderer: .getClearColor() now requires a Color as an argument' ); target = new Color(); } return target.copy( background.getClearColor() ); }; this.setClearColor = function () { background.setClearColor.apply( background, arguments ); }; this.getClearAlpha = function () { return background.getClearAlpha(); }; this.setClearAlpha = function () { background.setClearAlpha.apply( background, arguments ); }; this.clear = function ( color, depth, stencil ) { let bits = 0; if ( color === undefined || color ) bits |= 16384; if ( depth === undefined || depth ) bits |= 256; if ( stencil === undefined || stencil ) bits |= 1024; _gl.clear( bits ); }; this.clearColor = function () { this.clear( true, false, false ); }; this.clearDepth = function () { this.clear( false, true, false ); }; this.clearStencil = function () { this.clear( false, false, true ); }; // this.dispose = function () { _canvas.removeEventListener( 'webglcontextlost', onContextLost, false ); _canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false ); renderLists.dispose(); renderStates.dispose(); properties.dispose(); cubemaps.dispose(); objects.dispose(); bindingStates.dispose(); xr.dispose(); animation.stop(); }; // Events function onContextLost( event ) { event.preventDefault(); console.log( 'THREE.WebGLRenderer: Context Lost.' ); _isContextLost = true; } function onContextRestore( /* event */ ) { console.log( 'THREE.WebGLRenderer: Context Restored.' ); _isContextLost = false; initGLContext(); } function onMaterialDispose( event ) { const material = event.target; material.removeEventListener( 'dispose', onMaterialDispose ); deallocateMaterial( material ); } // Buffer deallocation function deallocateMaterial( material ) { releaseMaterialProgramReference( material ); properties.remove( material ); } function releaseMaterialProgramReference( material ) { const programInfo = properties.get( material ).program; if ( programInfo !== undefined ) { programCache.releaseProgram( programInfo ); } } // Buffer rendering function renderObjectImmediate( object, program ) { object.render( function ( object ) { _this.renderBufferImmediate( object, program ); } ); } this.renderBufferImmediate = function ( object, program ) { bindingStates.initAttributes(); const buffers = properties.get( object ); if ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer(); if ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer(); if ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer(); if ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer(); const programAttributes = program.getAttributes(); if ( object.hasPositions ) { _gl.bindBuffer( 34962, buffers.position ); _gl.bufferData( 34962, object.positionArray, 35048 ); bindingStates.enableAttribute( programAttributes.position ); _gl.vertexAttribPointer( programAttributes.position, 3, 5126, false, 0, 0 ); } if ( object.hasNormals ) { _gl.bindBuffer( 34962, buffers.normal ); _gl.bufferData( 34962, object.normalArray, 35048 ); bindingStates.enableAttribute( programAttributes.normal ); _gl.vertexAttribPointer( programAttributes.normal, 3, 5126, false, 0, 0 ); } if ( object.hasUvs ) { _gl.bindBuffer( 34962, buffers.uv ); _gl.bufferData( 34962, object.uvArray, 35048 ); bindingStates.enableAttribute( programAttributes.uv ); _gl.vertexAttribPointer( programAttributes.uv, 2, 5126, false, 0, 0 ); } if ( object.hasColors ) { _gl.bindBuffer( 34962, buffers.color ); _gl.bufferData( 34962, object.colorArray, 35048 ); bindingStates.enableAttribute( programAttributes.color ); _gl.vertexAttribPointer( programAttributes.color, 3, 5126, false, 0, 0 ); } bindingStates.disableUnusedAttributes(); _gl.drawArrays( 4, 0, object.count ); object.count = 0; }; this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) { if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null) const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 ); const program = setProgram( camera, scene, material, object ); state.setMaterial( material, frontFaceCW ); // let index = geometry.index; const position = geometry.attributes.position; // if ( index === null ) { if ( position === undefined || position.count === 0 ) return; } else if ( index.count === 0 ) { return; } // let rangeFactor = 1; if ( material.wireframe === true ) { index = geometries.getWireframeAttribute( geometry ); rangeFactor = 2; } if ( material.morphTargets || material.morphNormals ) { morphtargets.update( object, geometry, material, program ); } bindingStates.setup( object, material, program, geometry, index ); let attribute; let renderer = bufferRenderer; if ( index !== null ) { attribute = attributes.get( index ); renderer = indexedBufferRenderer; renderer.setIndex( attribute ); } // const dataCount = ( index !== null ) ? index.count : position.count; const rangeStart = geometry.drawRange.start * rangeFactor; const rangeCount = geometry.drawRange.count * rangeFactor; const groupStart = group !== null ? group.start * rangeFactor : 0; const groupCount = group !== null ? group.count * rangeFactor : Infinity; const drawStart = Math.max( rangeStart, groupStart ); const drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1; const drawCount = Math.max( 0, drawEnd - drawStart + 1 ); if ( drawCount === 0 ) return; // if ( object.isMesh ) { if ( material.wireframe === true ) { state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() ); renderer.setMode( 1 ); } else { renderer.setMode( 4 ); } } else if ( object.isLine ) { let lineWidth = material.linewidth; if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material state.setLineWidth( lineWidth * getTargetPixelRatio() ); if ( object.isLineSegments ) { renderer.setMode( 1 ); } else if ( object.isLineLoop ) { renderer.setMode( 2 ); } else { renderer.setMode( 3 ); } } else if ( object.isPoints ) { renderer.setMode( 0 ); } else if ( object.isSprite ) { renderer.setMode( 4 ); } if ( object.isInstancedMesh ) { renderer.renderInstances( drawStart, drawCount, object.count ); } else if ( geometry.isInstancedBufferGeometry ) { const instanceCount = Math.min( geometry.instanceCount, geometry._maxInstanceCount ); renderer.renderInstances( drawStart, drawCount, instanceCount ); } else { renderer.render( drawStart, drawCount ); } }; // Compile this.compile = function ( scene, camera ) { currentRenderState = renderStates.get( scene ); currentRenderState.init(); scene.traverseVisible( function ( object ) { if ( object.isLight && object.layers.test( camera.layers ) ) { currentRenderState.pushLight( object ); if ( object.castShadow ) { currentRenderState.pushShadow( object ); } } } ); currentRenderState.setupLights(); const compiled = new WeakMap(); scene.traverse( function ( object ) { const material = object.material; if ( material ) { if ( Array.isArray( material ) ) { for ( let i = 0; i < material.length; i ++ ) { const material2 = material[ i ]; if ( compiled.has( material2 ) === false ) { initMaterial( material2, scene, object ); compiled.set( material2 ); } } } else if ( compiled.has( material ) === false ) { initMaterial( material, scene, object ); compiled.set( material ); } } } ); }; // Animation Loop let onAnimationFrameCallback = null; function onAnimationFrame( time ) { if ( xr.isPresenting ) return; if ( onAnimationFrameCallback ) onAnimationFrameCallback( time ); } const animation = new WebGLAnimation(); animation.setAnimationLoop( onAnimationFrame ); if ( typeof window !== 'undefined' ) animation.setContext( window ); this.setAnimationLoop = function ( callback ) { onAnimationFrameCallback = callback; xr.setAnimationLoop( callback ); ( callback === null ) ? animation.stop() : animation.start(); }; // Rendering this.render = function ( scene, camera ) { let renderTarget, forceClear; if ( arguments[ 2 ] !== undefined ) { console.warn( 'THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.' ); renderTarget = arguments[ 2 ]; } if ( arguments[ 3 ] !== undefined ) { console.warn( 'THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.' ); forceClear = arguments[ 3 ]; } if ( camera !== undefined && camera.isCamera !== true ) { console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' ); return; } if ( _isContextLost === true ) return; // reset caching for this frame bindingStates.resetDefaultState(); _currentMaterialId = - 1; _currentCamera = null; // update scene graph if ( scene.autoUpdate === true ) scene.updateMatrixWorld(); // update camera matrices and frustum if ( camera.parent === null ) camera.updateMatrixWorld(); if ( xr.enabled === true && xr.isPresenting === true ) { camera = xr.getCamera( camera ); } // if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, renderTarget || _currentRenderTarget ); currentRenderState = renderStates.get( scene, renderStateStack.length ); currentRenderState.init(); renderStateStack.push( currentRenderState ); _projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); _frustum.setFromProjectionMatrix( _projScreenMatrix ); _localClippingEnabled = this.localClippingEnabled; _clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled, camera ); currentRenderList = renderLists.get( scene, camera ); currentRenderList.init(); projectObject( scene, camera, 0, _this.sortObjects ); currentRenderList.finish(); if ( _this.sortObjects === true ) { currentRenderList.sort( _opaqueSort, _transparentSort ); } // if ( _clippingEnabled === true ) clipping.beginShadows(); const shadowsArray = currentRenderState.state.shadowsArray; shadowMap.render( shadowsArray, scene, camera ); currentRenderState.setupLights(); currentRenderState.setupLightsView( camera ); if ( _clippingEnabled === true ) clipping.endShadows(); // if ( this.info.autoReset === true ) this.info.reset(); if ( renderTarget !== undefined ) { this.setRenderTarget( renderTarget ); } // background.render( currentRenderList, scene, camera, forceClear ); // render scene const opaqueObjects = currentRenderList.opaque; const transparentObjects = currentRenderList.transparent; if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera ); if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera ); // if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera ); // if ( _currentRenderTarget !== null ) { // Generate mipmap if we're using any kind of mipmap filtering textures.updateRenderTargetMipmap( _currentRenderTarget ); // resolve multisample renderbuffers to a single-sample texture if necessary textures.updateMultisampleRenderTarget( _currentRenderTarget ); } // Ensure depth buffer writing is enabled so it can be cleared on next render state.buffers.depth.setTest( true ); state.buffers.depth.setMask( true ); state.buffers.color.setMask( true ); state.setPolygonOffset( false ); // _gl.finish(); renderStateStack.pop(); if ( renderStateStack.length > 0 ) { currentRenderState = renderStateStack[ renderStateStack.length - 1 ]; } else { currentRenderState = null; } currentRenderList = null; }; function projectObject( object, camera, groupOrder, sortObjects ) { if ( object.visible === false ) return; const visible = object.layers.test( camera.layers ); if ( visible ) { if ( object.isGroup ) { groupOrder = object.renderOrder; } else if ( object.isLOD ) { if ( object.autoUpdate === true ) object.update( camera ); } else if ( object.isLight ) { currentRenderState.pushLight( object ); if ( object.castShadow ) { currentRenderState.pushShadow( object ); } } else if ( object.isSprite ) { if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) { if ( sortObjects ) { _vector3.setFromMatrixPosition( object.matrixWorld ) .applyMatrix4( _projScreenMatrix ); } const geometry = objects.update( object ); const material = object.material; if ( material.visible ) { currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); } } } else if ( object.isImmediateRenderObject ) { if ( sortObjects ) { _vector3.setFromMatrixPosition( object.matrixWorld ) .applyMatrix4( _projScreenMatrix ); } currentRenderList.push( object, null, object.material, groupOrder, _vector3.z, null ); } else if ( object.isMesh || object.isLine || object.isPoints ) { if ( object.isSkinnedMesh ) { // update skeleton only once in a frame if ( object.skeleton.frame !== info.render.frame ) { object.skeleton.update(); object.skeleton.frame = info.render.frame; } } if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) { if ( sortObjects ) { _vector3.setFromMatrixPosition( object.matrixWorld ) .applyMatrix4( _projScreenMatrix ); } const geometry = objects.update( object ); const material = object.material; if ( Array.isArray( material ) ) { const groups = geometry.groups; for ( let i = 0, l = groups.length; i < l; i ++ ) { const group = groups[ i ]; const groupMaterial = material[ group.materialIndex ]; if ( groupMaterial && groupMaterial.visible ) { currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group ); } } } else if ( material.visible ) { currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null ); } } } } const children = object.children; for ( let i = 0, l = children.length; i < l; i ++ ) { projectObject( children[ i ], camera, groupOrder, sortObjects ); } } function renderObjects( renderList, scene, camera ) { const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null; for ( let i = 0, l = renderList.length; i < l; i ++ ) { const renderItem = renderList[ i ]; const object = renderItem.object; const geometry = renderItem.geometry; const material = overrideMaterial === null ? renderItem.material : overrideMaterial; const group = renderItem.group; if ( camera.isArrayCamera ) { const cameras = camera.cameras; for ( let j = 0, jl = cameras.length; j < jl; j ++ ) { const camera2 = cameras[ j ]; if ( object.layers.test( camera2.layers ) ) { state.viewport( _currentViewport.copy( camera2.viewport ) ); currentRenderState.setupLightsView( camera2 ); renderObject( object, scene, camera2, geometry, material, group ); } } } else { renderObject( object, scene, camera, geometry, material, group ); } } } function renderObject( object, scene, camera, geometry, material, group ) { object.onBeforeRender( _this, scene, camera, geometry, material, group ); object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld ); object.normalMatrix.getNormalMatrix( object.modelViewMatrix ); if ( object.isImmediateRenderObject ) { const program = setProgram( camera, scene, material, object ); state.setMaterial( material ); bindingStates.reset(); renderObjectImmediate( object, program ); } else { _this.renderBufferDirect( camera, scene, geometry, material, object, group ); } object.onAfterRender( _this, scene, camera, geometry, material, group ); } function initMaterial( material, scene, object ) { if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... const materialProperties = properties.get( material ); const lights = currentRenderState.state.lights; const shadowsArray = currentRenderState.state.shadowsArray; const lightsStateVersion = lights.state.version; const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object ); const programCacheKey = programCache.getProgramCacheKey( parameters ); let program = materialProperties.program; let programChange = true; if ( program === undefined ) { // new material material.addEventListener( 'dispose', onMaterialDispose ); } else if ( program.cacheKey !== programCacheKey ) { // changed glsl or parameters releaseMaterialProgramReference( material ); } else if ( materialProperties.lightsStateVersion !== lightsStateVersion ) { programChange = false; } else if ( parameters.shaderID !== undefined ) { // same glsl and uniform list, envMap still needs the update here to avoid a frame-late effect const environment = material.isMeshStandardMaterial ? scene.environment : null; materialProperties.envMap = cubemaps.get( material.envMap || environment ); return; } else { // only rebuild uniform list programChange = false; } if ( programChange ) { parameters.uniforms = programCache.getUniforms( material ); material.onBeforeCompile( parameters, _this ); program = programCache.acquireProgram( parameters, programCacheKey ); materialProperties.program = program; materialProperties.uniforms = parameters.uniforms; materialProperties.outputEncoding = parameters.outputEncoding; } const uniforms = materialProperties.uniforms; if ( ! material.isShaderMaterial && ! material.isRawShaderMaterial || material.clipping === true ) { materialProperties.numClippingPlanes = clipping.numPlanes; materialProperties.numIntersection = clipping.numIntersection; uniforms.clippingPlanes = clipping.uniform; } materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null; materialProperties.fog = scene.fog; materialProperties.envMap = cubemaps.get( material.envMap || materialProperties.environment ); // store the light setup it was created for materialProperties.needsLights = materialNeedsLights( material ); materialProperties.lightsStateVersion = lightsStateVersion; if ( materialProperties.needsLights ) { // wire up the material to this renderer's lighting state uniforms.ambientLightColor.value = lights.state.ambient; uniforms.lightProbe.value = lights.state.probe; uniforms.directionalLights.value = lights.state.directional; uniforms.directionalLightShadows.value = lights.state.directionalShadow; uniforms.spotLights.value = lights.state.spot; uniforms.spotLightShadows.value = lights.state.spotShadow; uniforms.rectAreaLights.value = lights.state.rectArea; uniforms.ltc_1.value = lights.state.rectAreaLTC1; uniforms.ltc_2.value = lights.state.rectAreaLTC2; uniforms.pointLights.value = lights.state.point; uniforms.pointLightShadows.value = lights.state.pointShadow; uniforms.hemisphereLights.value = lights.state.hemi; uniforms.directionalShadowMap.value = lights.state.directionalShadowMap; uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix; uniforms.spotShadowMap.value = lights.state.spotShadowMap; uniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix; uniforms.pointShadowMap.value = lights.state.pointShadowMap; uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix; // TODO (abelnation): add area lights shadow info to uniforms } const progUniforms = materialProperties.program.getUniforms(); const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms ); materialProperties.uniformsList = uniformsList; } function setProgram( camera, scene, material, object ) { if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ... textures.resetTextureUnits(); const fog = scene.fog; const environment = material.isMeshStandardMaterial ? scene.environment : null; const encoding = ( _currentRenderTarget === null ) ? _this.outputEncoding : _currentRenderTarget.texture.encoding; const envMap = cubemaps.get( material.envMap || environment ); const materialProperties = properties.get( material ); const lights = currentRenderState.state.lights; if ( _clippingEnabled === true ) { if ( _localClippingEnabled === true || camera !== _currentCamera ) { const useCache = camera === _currentCamera && material.id === _currentMaterialId; // we might want to call this function with some ClippingGroup // object instead of the material, once it becomes feasible // (#8465, #8379) clipping.setState( material, camera, useCache ); } } if ( material.version === materialProperties.__version ) { if ( material.fog && materialProperties.fog !== fog ) { initMaterial( material, scene, object ); } else if ( materialProperties.environment !== environment ) { initMaterial( material, scene, object ); } else if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) { initMaterial( material, scene, object ); } else if ( materialProperties.numClippingPlanes !== undefined && ( materialProperties.numClippingPlanes !== clipping.numPlanes || materialProperties.numIntersection !== clipping.numIntersection ) ) { initMaterial( material, scene, object ); } else if ( materialProperties.outputEncoding !== encoding ) { initMaterial( material, scene, object ); } else if ( materialProperties.envMap !== envMap ) { initMaterial( material, scene, object ); } } else { initMaterial( material, scene, object ); materialProperties.__version = material.version; } let refreshProgram = false; let refreshMaterial = false; let refreshLights = false; const program = materialProperties.program, p_uniforms = program.getUniforms(), m_uniforms = materialProperties.uniforms; if ( state.useProgram( program.program ) ) { refreshProgram = true; refreshMaterial = true; refreshLights = true; } if ( material.id !== _currentMaterialId ) { _currentMaterialId = material.id; refreshMaterial = true; } if ( refreshProgram || _currentCamera !== camera ) { p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix ); if ( capabilities.logarithmicDepthBuffer ) { p_uniforms.setValue( _gl, 'logDepthBufFC', 2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) ); } if ( _currentCamera !== camera ) { _currentCamera = camera; // lighting uniforms depend on the camera so enforce an update // now, in case this material supports lights - or later, when // the next material that does gets activated: refreshMaterial = true; // set to true on material change refreshLights = true; // remains set until update done } // load material specific uniforms // (shader material also gets them for the sake of genericity) if ( material.isShaderMaterial || material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshStandardMaterial || material.envMap ) { const uCamPos = p_uniforms.map.cameraPosition; if ( uCamPos !== undefined ) { uCamPos.setValue( _gl, _vector3.setFromMatrixPosition( camera.matrixWorld ) ); } } if ( material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial ) { p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true ); } if ( material.isMeshPhongMaterial || material.isMeshToonMaterial || material.isMeshLambertMaterial || material.isMeshBasicMaterial || material.isMeshStandardMaterial || material.isShaderMaterial || material.isShadowMaterial || material.skinning ) { p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse ); } } // skinning uniforms must be set even if material didn't change // auto-setting of texture unit for bone texture must go before other textures // otherwise textures used for skinning can take over texture units reserved for other material textures if ( material.skinning ) { p_uniforms.setOptional( _gl, object, 'bindMatrix' ); p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' ); const skeleton = object.skeleton; if ( skeleton ) { const bones = skeleton.bones; if ( capabilities.floatVertexTextures ) { if ( skeleton.boneTexture === null ) { // layout (1 matrix = 4 pixels) // RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4) // with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8) // 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16) // 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32) // 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64) let size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix size = MathUtils.ceilPowerOfTwo( size ); size = Math.max( size, 4 ); const boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel boneMatrices.set( skeleton.boneMatrices ); // copy current values const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType ); skeleton.boneMatrices = boneMatrices; skeleton.boneTexture = boneTexture; skeleton.boneTextureSize = size; } p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures ); p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize ); } else { p_uniforms.setOptional( _gl, skeleton, 'boneMatrices' ); } } } if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) { materialProperties.receiveShadow = object.receiveShadow; p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow ); } if ( refreshMaterial ) { p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure ); if ( materialProperties.needsLights ) { // the current material requires lighting info // note: all lighting uniforms are always set correctly // they simply reference the renderer's state for their // values // // use the current material's .needsUpdate flags to set // the GL state when required markUniformsLightsNeedsUpdate( m_uniforms, refreshLights ); } // refresh uniforms common to several materials if ( fog && material.fog ) { materials.refreshFogUniforms( m_uniforms, fog ); } materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height ); WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); } if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) { WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures ); material.uniformsNeedUpdate = false; } if ( material.isSpriteMaterial ) { p_uniforms.setValue( _gl, 'center', object.center ); } // common matrices p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix ); p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix ); p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld ); return program; } // If uniforms are marked as clean, they don't need to be loaded to the GPU. function markUniformsLightsNeedsUpdate( uniforms, value ) { uniforms.ambientLightColor.needsUpdate = value; uniforms.lightProbe.needsUpdate = value; uniforms.directionalLights.needsUpdate = value; uniforms.directionalLightShadows.needsUpdate = value; uniforms.pointLights.needsUpdate = value; uniforms.pointLightShadows.needsUpdate = value; uniforms.spotLights.needsUpdate = value; uniforms.spotLightShadows.needsUpdate = value; uniforms.rectAreaLights.needsUpdate = value; uniforms.hemisphereLights.needsUpdate = value; } function materialNeedsLights( material ) { return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial || material.isShadowMaterial || ( material.isShaderMaterial && material.lights === true ); } // this.setFramebuffer = function ( value ) { if ( _framebuffer !== value && _currentRenderTarget === null ) _gl.bindFramebuffer( 36160, value ); _framebuffer = value; }; this.getActiveCubeFace = function () { return _currentActiveCubeFace; }; this.getActiveMipmapLevel = function () { return _currentActiveMipmapLevel; }; this.getRenderList = function () { return currentRenderList; }; this.setRenderList = function ( renderList ) { currentRenderList = renderList; }; this.getRenderTarget = function () { return _currentRenderTarget; }; this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) { _currentRenderTarget = renderTarget; _currentActiveCubeFace = activeCubeFace; _currentActiveMipmapLevel = activeMipmapLevel; if ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) { textures.setupRenderTarget( renderTarget ); } let framebuffer = _framebuffer; let isCube = false; if ( renderTarget ) { const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer; if ( renderTarget.isWebGLCubeRenderTarget ) { framebuffer = __webglFramebuffer[ activeCubeFace ]; isCube = true; } else if ( renderTarget.isWebGLMultisampleRenderTarget ) { framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer; } else { framebuffer = __webglFramebuffer; } _currentViewport.copy( renderTarget.viewport ); _currentScissor.copy( renderTarget.scissor ); _currentScissorTest = renderTarget.scissorTest; } else { _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor(); _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor(); _currentScissorTest = _scissorTest; } if ( _currentFramebuffer !== framebuffer ) { _gl.bindFramebuffer( 36160, framebuffer ); _currentFramebuffer = framebuffer; } state.viewport( _currentViewport ); state.scissor( _currentScissor ); state.setScissorTest( _currentScissorTest ); if ( isCube ) { const textureProperties = properties.get( renderTarget.texture ); _gl.framebufferTexture2D( 36160, 36064, 34069 + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel ); } }; this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) { if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' ); return; } let framebuffer = properties.get( renderTarget ).__webglFramebuffer; if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) { framebuffer = framebuffer[ activeCubeFaceIndex ]; } if ( framebuffer ) { let restore = false; if ( framebuffer !== _currentFramebuffer ) { _gl.bindFramebuffer( 36160, framebuffer ); restore = true; } try { const texture = renderTarget.texture; const textureFormat = texture.format; const textureType = texture.type; if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( 35739 ) ) { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' ); return; } if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( 35738 ) && // IE11, Edge and Chrome Mac < 52 (#9513) ! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox ! ( textureType === HalfFloatType && ( capabilities.isWebGL2 ? extensions.get( 'EXT_color_buffer_float' ) : extensions.get( 'EXT_color_buffer_half_float' ) ) ) ) { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' ); return; } if ( _gl.checkFramebufferStatus( 36160 ) === 36053 ) { // the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604) if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) { _gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer ); } } else { console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' ); } } finally { if ( restore ) { _gl.bindFramebuffer( 36160, _currentFramebuffer ); } } } }; this.copyFramebufferToTexture = function ( position, texture, level = 0 ) { const levelScale = Math.pow( 2, - level ); const width = Math.floor( texture.image.width * levelScale ); const height = Math.floor( texture.image.height * levelScale ); const glFormat = utils.convert( texture.format ); textures.setTexture2D( texture, 0 ); _gl.copyTexImage2D( 3553, level, glFormat, position.x, position.y, width, height, 0 ); state.unbindTexture(); }; this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) { const width = srcTexture.image.width; const height = srcTexture.image.height; const glFormat = utils.convert( dstTexture.format ); const glType = utils.convert( dstTexture.type ); textures.setTexture2D( dstTexture, 0 ); // As another texture upload may have changed pixelStorei // parameters, make sure they are correct for the dstTexture _gl.pixelStorei( 37440, dstTexture.flipY ); _gl.pixelStorei( 37441, dstTexture.premultiplyAlpha ); _gl.pixelStorei( 3317, dstTexture.unpackAlignment ); if ( srcTexture.isDataTexture ) { _gl.texSubImage2D( 3553, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data ); } else { if ( srcTexture.isCompressedTexture ) { _gl.compressedTexSubImage2D( 3553, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data ); } else { _gl.texSubImage2D( 3553, level, position.x, position.y, glFormat, glType, srcTexture.image ); } } // Generate mipmaps only when copying level 0 if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( 3553 ); state.unbindTexture(); }; this.initTexture = function ( texture ) { textures.setTexture2D( texture, 0 ); state.unbindTexture(); }; this.resetState = function () { state.reset(); bindingStates.reset(); }; if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef } } function WebGL1Renderer( parameters ) { WebGLRenderer.call( this, parameters ); } WebGL1Renderer.prototype = Object.assign( Object.create( WebGLRenderer.prototype ), { constructor: WebGL1Renderer, isWebGL1Renderer: true } ); class FogExp2 { constructor( color, density ) { Object.defineProperty( this, 'isFogExp2', { value: true } ); this.name = ''; this.color = new Color( color ); this.density = ( density !== undefined ) ? density : 0.00025; } clone() { return new FogExp2( this.color, this.density ); } toJSON( /* meta */ ) { return { type: 'FogExp2', color: this.color.getHex(), density: this.density }; } } class Fog { constructor( color, near, far ) { Object.defineProperty( this, 'isFog', { value: true } ); this.name = ''; this.color = new Color( color ); this.near = ( near !== undefined ) ? near : 1; this.far = ( far !== undefined ) ? far : 1000; } clone() { return new Fog( this.color, this.near, this.far ); } toJSON( /* meta */ ) { return { type: 'Fog', color: this.color.getHex(), near: this.near, far: this.far }; } } class Scene extends Object3D { constructor() { super(); Object.defineProperty( this, 'isScene', { value: true } ); this.type = 'Scene'; this.background = null; this.environment = null; this.fog = null; this.overrideMaterial = null; this.autoUpdate = true; // checked by the renderer if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) ); // eslint-disable-line no-undef } } copy( source, recursive ) { super.copy( source, recursive ); if ( source.background !== null ) this.background = source.background.clone(); if ( source.environment !== null ) this.environment = source.environment.clone(); if ( source.fog !== null ) this.fog = source.fog.clone(); if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone(); this.autoUpdate = source.autoUpdate; this.matrixAutoUpdate = source.matrixAutoUpdate; return this; } toJSON( meta ) { const data = super.toJSON( meta ); if ( this.background !== null ) data.object.background = this.background.toJSON( meta ); if ( this.environment !== null ) data.object.environment = this.environment.toJSON( meta ); if ( this.fog !== null ) data.object.fog = this.fog.toJSON(); return data; } } function InterleavedBuffer( array, stride ) { this.array = array; this.stride = stride; this.count = array !== undefined ? array.length / stride : 0; this.usage = StaticDrawUsage; this.updateRange = { offset: 0, count: - 1 }; this.version = 0; this.uuid = MathUtils.generateUUID(); } Object.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', { set: function ( value ) { if ( value === true ) this.version ++; } } ); Object.assign( InterleavedBuffer.prototype, { isInterleavedBuffer: true, onUploadCallback: function () {}, setUsage: function ( value ) { this.usage = value; return this; }, copy: function ( source ) { this.array = new source.array.constructor( source.array ); this.count = source.count; this.stride = source.stride; this.usage = source.usage; return this; }, copyAt: function ( index1, attribute, index2 ) { index1 *= this.stride; index2 *= attribute.stride; for ( let i = 0, l = this.stride; i < l; i ++ ) { this.array[ index1 + i ] = attribute.array[ index2 + i ]; } return this; }, set: function ( value, offset = 0 ) { this.array.set( value, offset ); return this; }, clone: function ( data ) { if ( data.arrayBuffers === undefined ) { data.arrayBuffers = {}; } if ( this.array.buffer._uuid === undefined ) { this.array.buffer._uuid = MathUtils.generateUUID(); } if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer; } const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] ); const ib = new InterleavedBuffer( array, this.stride ); ib.setUsage( this.usage ); return ib; }, onUpload: function ( callback ) { this.onUploadCallback = callback; return this; }, toJSON: function ( data ) { if ( data.arrayBuffers === undefined ) { data.arrayBuffers = {}; } // generate UUID for array buffer if necessary if ( this.array.buffer._uuid === undefined ) { this.array.buffer._uuid = MathUtils.generateUUID(); } if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) { data.arrayBuffers[ this.array.buffer._uuid ] = Array.prototype.slice.call( new Uint32Array( this.array.buffer ) ); } // return { uuid: this.uuid, buffer: this.array.buffer._uuid, type: this.array.constructor.name, stride: this.stride }; } } ); const _vector$6 = new Vector3(); function InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) { this.name = ''; this.data = interleavedBuffer; this.itemSize = itemSize; this.offset = offset; this.normalized = normalized === true; } Object.defineProperties( InterleavedBufferAttribute.prototype, { count: { get: function () { return this.data.count; } }, array: { get: function () { return this.data.array; } }, needsUpdate: { set: function ( value ) { this.data.needsUpdate = value; } } } ); Object.assign( InterleavedBufferAttribute.prototype, { isInterleavedBufferAttribute: true, applyMatrix4: function ( m ) { for ( let i = 0, l = this.data.count; i < l; i ++ ) { _vector$6.x = this.getX( i ); _vector$6.y = this.getY( i ); _vector$6.z = this.getZ( i ); _vector$6.applyMatrix4( m ); this.setXYZ( i, _vector$6.x, _vector$6.y, _vector$6.z ); } return this; }, setX: function ( index, x ) { this.data.array[ index * this.data.stride + this.offset ] = x; return this; }, setY: function ( index, y ) { this.data.array[ index * this.data.stride + this.offset + 1 ] = y; return this; }, setZ: function ( index, z ) { this.data.array[ index * this.data.stride + this.offset + 2 ] = z; return this; }, setW: function ( index, w ) { this.data.array[ index * this.data.stride + this.offset + 3 ] = w; return this; }, getX: function ( index ) { return this.data.array[ index * this.data.stride + this.offset ]; }, getY: function ( index ) { return this.data.array[ index * this.data.stride + this.offset + 1 ]; }, getZ: function ( index ) { return this.data.array[ index * this.data.stride + this.offset + 2 ]; }, getW: function ( index ) { return this.data.array[ index * this.data.stride + this.offset + 3 ]; }, setXY: function ( index, x, y ) { index = index * this.data.stride + this.offset; this.data.array[ index + 0 ] = x; this.data.array[ index + 1 ] = y; return this; }, setXYZ: function ( index, x, y, z ) { index = index * this.data.stride + this.offset; this.data.array[ index + 0 ] = x; this.data.array[ index + 1 ] = y; this.data.array[ index + 2 ] = z; return this; }, setXYZW: function ( index, x, y, z, w ) { index = index * this.data.stride + this.offset; this.data.array[ index + 0 ] = x; this.data.array[ index + 1 ] = y; this.data.array[ index + 2 ] = z; this.data.array[ index + 3 ] = w; return this; }, clone: function ( data ) { if ( data === undefined ) { console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.' ); const array = []; for ( let i = 0; i < this.count; i ++ ) { const index = i * this.data.stride + this.offset; for ( let j = 0; j < this.itemSize; j ++ ) { array.push( this.data.array[ index + j ] ); } } return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized ); } else { if ( data.interleavedBuffers === undefined ) { data.interleavedBuffers = {}; } if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data ); } return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized ); } }, toJSON: function ( data ) { if ( data === undefined ) { console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.' ); const array = []; for ( let i = 0; i < this.count; i ++ ) { const index = i * this.data.stride + this.offset; for ( let j = 0; j < this.itemSize; j ++ ) { array.push( this.data.array[ index + j ] ); } } // deinterleave data and save it as an ordinary buffer attribute for now return { itemSize: this.itemSize, type: this.array.constructor.name, array: array, normalized: this.normalized }; } else { // save as true interlaved attribtue if ( data.interleavedBuffers === undefined ) { data.interleavedBuffers = {}; } if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) { data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data ); } return { isInterleavedBufferAttribute: true, itemSize: this.itemSize, data: this.data.uuid, offset: this.offset, normalized: this.normalized }; } } } ); /** * parameters = { * color: , * map: new THREE.Texture( ), * alphaMap: new THREE.Texture( ), * rotation: , * sizeAttenuation: * } */ function SpriteMaterial( parameters ) { Material.call( this ); this.type = 'SpriteMaterial'; this.color = new Color( 0xffffff ); this.map = null; this.alphaMap = null; this.rotation = 0; this.sizeAttenuation = true; this.transparent = true; this.setValues( parameters ); } SpriteMaterial.prototype = Object.create( Material.prototype ); SpriteMaterial.prototype.constructor = SpriteMaterial; SpriteMaterial.prototype.isSpriteMaterial = true; SpriteMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.alphaMap = source.alphaMap; this.rotation = source.rotation; this.sizeAttenuation = source.sizeAttenuation; return this; }; let _geometry; const _intersectPoint = new Vector3(); const _worldScale = new Vector3(); const _mvPosition = new Vector3(); const _alignedPosition = new Vector2(); const _rotatedPosition = new Vector2(); const _viewWorldMatrix = new Matrix4(); const _vA$1 = new Vector3(); const _vB$1 = new Vector3(); const _vC$1 = new Vector3(); const _uvA$1 = new Vector2(); const _uvB$1 = new Vector2(); const _uvC$1 = new Vector2(); function Sprite( material ) { Object3D.call( this ); this.type = 'Sprite'; if ( _geometry === undefined ) { _geometry = new BufferGeometry(); const float32Array = new Float32Array( [ - 0.5, - 0.5, 0, 0, 0, 0.5, - 0.5, 0, 1, 0, 0.5, 0.5, 0, 1, 1, - 0.5, 0.5, 0, 0, 1 ] ); const interleavedBuffer = new InterleavedBuffer( float32Array, 5 ); _geometry.setIndex( [ 0, 1, 2, 0, 2, 3 ] ); _geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) ); _geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) ); } this.geometry = _geometry; this.material = ( material !== undefined ) ? material : new SpriteMaterial(); this.center = new Vector2( 0.5, 0.5 ); } Sprite.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Sprite, isSprite: true, raycast: function ( raycaster, intersects ) { if ( raycaster.camera === null ) { console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' ); } _worldScale.setFromMatrixScale( this.matrixWorld ); _viewWorldMatrix.copy( raycaster.camera.matrixWorld ); this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld ); _mvPosition.setFromMatrixPosition( this.modelViewMatrix ); if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) { _worldScale.multiplyScalar( - _mvPosition.z ); } const rotation = this.material.rotation; let sin, cos; if ( rotation !== 0 ) { cos = Math.cos( rotation ); sin = Math.sin( rotation ); } const center = this.center; transformVertex( _vA$1.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); transformVertex( _vB$1.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); transformVertex( _vC$1.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); _uvA$1.set( 0, 0 ); _uvB$1.set( 1, 0 ); _uvC$1.set( 1, 1 ); // check first triangle let intersect = raycaster.ray.intersectTriangle( _vA$1, _vB$1, _vC$1, false, _intersectPoint ); if ( intersect === null ) { // check second triangle transformVertex( _vB$1.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos ); _uvB$1.set( 0, 1 ); intersect = raycaster.ray.intersectTriangle( _vA$1, _vC$1, _vB$1, false, _intersectPoint ); if ( intersect === null ) { return; } } const distance = raycaster.ray.origin.distanceTo( _intersectPoint ); if ( distance < raycaster.near || distance > raycaster.far ) return; intersects.push( { distance: distance, point: _intersectPoint.clone(), uv: Triangle.getUV( _intersectPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() ), face: null, object: this } ); }, copy: function ( source ) { Object3D.prototype.copy.call( this, source ); if ( source.center !== undefined ) this.center.copy( source.center ); this.material = source.material; return this; } } ); function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) { // compute position in camera space _alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale ); // to check if rotation is not zero if ( sin !== undefined ) { _rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y ); _rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y ); } else { _rotatedPosition.copy( _alignedPosition ); } vertexPosition.copy( mvPosition ); vertexPosition.x += _rotatedPosition.x; vertexPosition.y += _rotatedPosition.y; // transform to world space vertexPosition.applyMatrix4( _viewWorldMatrix ); } const _v1$4 = new Vector3(); const _v2$2 = new Vector3(); function LOD() { Object3D.call( this ); this._currentLevel = 0; this.type = 'LOD'; Object.defineProperties( this, { levels: { enumerable: true, value: [] } } ); this.autoUpdate = true; } LOD.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: LOD, isLOD: true, copy: function ( source ) { Object3D.prototype.copy.call( this, source, false ); const levels = source.levels; for ( let i = 0, l = levels.length; i < l; i ++ ) { const level = levels[ i ]; this.addLevel( level.object.clone(), level.distance ); } this.autoUpdate = source.autoUpdate; return this; }, addLevel: function ( object, distance = 0 ) { distance = Math.abs( distance ); const levels = this.levels; let l; for ( l = 0; l < levels.length; l ++ ) { if ( distance < levels[ l ].distance ) { break; } } levels.splice( l, 0, { distance: distance, object: object } ); this.add( object ); return this; }, getCurrentLevel: function () { return this._currentLevel; }, getObjectForDistance: function ( distance ) { const levels = this.levels; if ( levels.length > 0 ) { let i, l; for ( i = 1, l = levels.length; i < l; i ++ ) { if ( distance < levels[ i ].distance ) { break; } } return levels[ i - 1 ].object; } return null; }, raycast: function ( raycaster, intersects ) { const levels = this.levels; if ( levels.length > 0 ) { _v1$4.setFromMatrixPosition( this.matrixWorld ); const distance = raycaster.ray.origin.distanceTo( _v1$4 ); this.getObjectForDistance( distance ).raycast( raycaster, intersects ); } }, update: function ( camera ) { const levels = this.levels; if ( levels.length > 1 ) { _v1$4.setFromMatrixPosition( camera.matrixWorld ); _v2$2.setFromMatrixPosition( this.matrixWorld ); const distance = _v1$4.distanceTo( _v2$2 ) / camera.zoom; levels[ 0 ].object.visible = true; let i, l; for ( i = 1, l = levels.length; i < l; i ++ ) { if ( distance >= levels[ i ].distance ) { levels[ i - 1 ].object.visible = false; levels[ i ].object.visible = true; } else { break; } } this._currentLevel = i - 1; for ( ; i < l; i ++ ) { levels[ i ].object.visible = false; } } }, toJSON: function ( meta ) { const data = Object3D.prototype.toJSON.call( this, meta ); if ( this.autoUpdate === false ) data.object.autoUpdate = false; data.object.levels = []; const levels = this.levels; for ( let i = 0, l = levels.length; i < l; i ++ ) { const level = levels[ i ]; data.object.levels.push( { object: level.object.uuid, distance: level.distance } ); } return data; } } ); const _basePosition = new Vector3(); const _skinIndex = new Vector4(); const _skinWeight = new Vector4(); const _vector$7 = new Vector3(); const _matrix$1 = new Matrix4(); function SkinnedMesh( geometry, material ) { if ( geometry && geometry.isGeometry ) { console.error( 'THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.' ); } Mesh.call( this, geometry, material ); this.type = 'SkinnedMesh'; this.bindMode = 'attached'; this.bindMatrix = new Matrix4(); this.bindMatrixInverse = new Matrix4(); } SkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { constructor: SkinnedMesh, isSkinnedMesh: true, copy: function ( source ) { Mesh.prototype.copy.call( this, source ); this.bindMode = source.bindMode; this.bindMatrix.copy( source.bindMatrix ); this.bindMatrixInverse.copy( source.bindMatrixInverse ); this.skeleton = source.skeleton; return this; }, bind: function ( skeleton, bindMatrix ) { this.skeleton = skeleton; if ( bindMatrix === undefined ) { this.updateMatrixWorld( true ); this.skeleton.calculateInverses(); bindMatrix = this.matrixWorld; } this.bindMatrix.copy( bindMatrix ); this.bindMatrixInverse.copy( bindMatrix ).invert(); }, pose: function () { this.skeleton.pose(); }, normalizeSkinWeights: function () { const vector = new Vector4(); const skinWeight = this.geometry.attributes.skinWeight; for ( let i = 0, l = skinWeight.count; i < l; i ++ ) { vector.x = skinWeight.getX( i ); vector.y = skinWeight.getY( i ); vector.z = skinWeight.getZ( i ); vector.w = skinWeight.getW( i ); const scale = 1.0 / vector.manhattanLength(); if ( scale !== Infinity ) { vector.multiplyScalar( scale ); } else { vector.set( 1, 0, 0, 0 ); // do something reasonable } skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w ); } }, updateMatrixWorld: function ( force ) { Mesh.prototype.updateMatrixWorld.call( this, force ); if ( this.bindMode === 'attached' ) { this.bindMatrixInverse.copy( this.matrixWorld ).invert(); } else if ( this.bindMode === 'detached' ) { this.bindMatrixInverse.copy( this.bindMatrix ).invert(); } else { console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode ); } }, boneTransform: function ( index, target ) { const skeleton = this.skeleton; const geometry = this.geometry; _skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index ); _skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index ); _basePosition.fromBufferAttribute( geometry.attributes.position, index ).applyMatrix4( this.bindMatrix ); target.set( 0, 0, 0 ); for ( let i = 0; i < 4; i ++ ) { const weight = _skinWeight.getComponent( i ); if ( weight !== 0 ) { const boneIndex = _skinIndex.getComponent( i ); _matrix$1.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] ); target.addScaledVector( _vector$7.copy( _basePosition ).applyMatrix4( _matrix$1 ), weight ); } } return target.applyMatrix4( this.bindMatrixInverse ); } } ); function Bone() { Object3D.call( this ); this.type = 'Bone'; } Bone.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Bone, isBone: true } ); const _offsetMatrix = new Matrix4(); const _identityMatrix = new Matrix4(); function Skeleton( bones = [], boneInverses = [] ) { this.uuid = MathUtils.generateUUID(); this.bones = bones.slice( 0 ); this.boneInverses = boneInverses; this.boneMatrices = null; this.boneTexture = null; this.boneTextureSize = 0; this.frame = - 1; this.init(); } Object.assign( Skeleton.prototype, { init: function () { const bones = this.bones; const boneInverses = this.boneInverses; this.boneMatrices = new Float32Array( bones.length * 16 ); // calculate inverse bone matrices if necessary if ( boneInverses.length === 0 ) { this.calculateInverses(); } else { // handle special case if ( bones.length !== boneInverses.length ) { console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' ); this.boneInverses = []; for ( let i = 0, il = this.bones.length; i < il; i ++ ) { this.boneInverses.push( new Matrix4() ); } } } }, calculateInverses: function () { this.boneInverses.length = 0; for ( let i = 0, il = this.bones.length; i < il; i ++ ) { const inverse = new Matrix4(); if ( this.bones[ i ] ) { inverse.copy( this.bones[ i ].matrixWorld ).invert(); } this.boneInverses.push( inverse ); } }, pose: function () { // recover the bind-time world matrices for ( let i = 0, il = this.bones.length; i < il; i ++ ) { const bone = this.bones[ i ]; if ( bone ) { bone.matrixWorld.copy( this.boneInverses[ i ] ).invert(); } } // compute the local matrices, positions, rotations and scales for ( let i = 0, il = this.bones.length; i < il; i ++ ) { const bone = this.bones[ i ]; if ( bone ) { if ( bone.parent && bone.parent.isBone ) { bone.matrix.copy( bone.parent.matrixWorld ).invert(); bone.matrix.multiply( bone.matrixWorld ); } else { bone.matrix.copy( bone.matrixWorld ); } bone.matrix.decompose( bone.position, bone.quaternion, bone.scale ); } } }, update: function () { const bones = this.bones; const boneInverses = this.boneInverses; const boneMatrices = this.boneMatrices; const boneTexture = this.boneTexture; // flatten bone matrices to array for ( let i = 0, il = bones.length; i < il; i ++ ) { // compute the offset between the current and the original transform const matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix; _offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] ); _offsetMatrix.toArray( boneMatrices, i * 16 ); } if ( boneTexture !== null ) { boneTexture.needsUpdate = true; } }, clone: function () { return new Skeleton( this.bones, this.boneInverses ); }, getBoneByName: function ( name ) { for ( let i = 0, il = this.bones.length; i < il; i ++ ) { const bone = this.bones[ i ]; if ( bone.name === name ) { return bone; } } return undefined; }, dispose: function ( ) { if ( this.boneTexture !== null ) { this.boneTexture.dispose(); this.boneTexture = null; } }, fromJSON: function ( json, bones ) { this.uuid = json.uuid; for ( let i = 0, l = json.bones.length; i < l; i ++ ) { const uuid = json.bones[ i ]; let bone = bones[ uuid ]; if ( bone === undefined ) { console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid ); bone = new Bone(); } this.bones.push( bone ); this.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) ); } this.init(); return this; }, toJSON: function () { const data = { metadata: { version: 4.5, type: 'Skeleton', generator: 'Skeleton.toJSON' }, bones: [], boneInverses: [] }; data.uuid = this.uuid; const bones = this.bones; const boneInverses = this.boneInverses; for ( let i = 0, l = bones.length; i < l; i ++ ) { const bone = bones[ i ]; data.bones.push( bone.uuid ); const boneInverse = boneInverses[ i ]; data.boneInverses.push( boneInverse.toArray() ); } return data; } } ); const _instanceLocalMatrix = new Matrix4(); const _instanceWorldMatrix = new Matrix4(); const _instanceIntersects = []; const _mesh = new Mesh(); function InstancedMesh( geometry, material, count ) { Mesh.call( this, geometry, material ); this.instanceMatrix = new BufferAttribute( new Float32Array( count * 16 ), 16 ); this.instanceColor = null; this.count = count; this.frustumCulled = false; } InstancedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), { constructor: InstancedMesh, isInstancedMesh: true, copy: function ( source ) { Mesh.prototype.copy.call( this, source ); this.instanceMatrix.copy( source.instanceMatrix ); this.count = source.count; return this; }, getColorAt: function ( index, color ) { color.fromArray( this.instanceColor.array, index * 3 ); }, getMatrixAt: function ( index, matrix ) { matrix.fromArray( this.instanceMatrix.array, index * 16 ); }, raycast: function ( raycaster, intersects ) { const matrixWorld = this.matrixWorld; const raycastTimes = this.count; _mesh.geometry = this.geometry; _mesh.material = this.material; if ( _mesh.material === undefined ) return; for ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) { // calculate the world matrix for each instance this.getMatrixAt( instanceId, _instanceLocalMatrix ); _instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix ); // the mesh represents this single instance _mesh.matrixWorld = _instanceWorldMatrix; _mesh.raycast( raycaster, _instanceIntersects ); // process the result of raycast for ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) { const intersect = _instanceIntersects[ i ]; intersect.instanceId = instanceId; intersect.object = this; intersects.push( intersect ); } _instanceIntersects.length = 0; } }, setColorAt: function ( index, color ) { if ( this.instanceColor === null ) { this.instanceColor = new BufferAttribute( new Float32Array( this.count * 3 ), 3 ); } color.toArray( this.instanceColor.array, index * 3 ); }, setMatrixAt: function ( index, matrix ) { matrix.toArray( this.instanceMatrix.array, index * 16 ); }, updateMorphTargets: function () { }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); /** * parameters = { * color: , * opacity: , * * linewidth: , * linecap: "round", * linejoin: "round" * } */ function LineBasicMaterial( parameters ) { Material.call( this ); this.type = 'LineBasicMaterial'; this.color = new Color( 0xffffff ); this.linewidth = 1; this.linecap = 'round'; this.linejoin = 'round'; this.morphTargets = false; this.setValues( parameters ); } LineBasicMaterial.prototype = Object.create( Material.prototype ); LineBasicMaterial.prototype.constructor = LineBasicMaterial; LineBasicMaterial.prototype.isLineBasicMaterial = true; LineBasicMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.linewidth = source.linewidth; this.linecap = source.linecap; this.linejoin = source.linejoin; this.morphTargets = source.morphTargets; return this; }; const _start = new Vector3(); const _end = new Vector3(); const _inverseMatrix$1 = new Matrix4(); const _ray$1 = new Ray(); const _sphere$2 = new Sphere(); function Line( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) { Object3D.call( this ); this.type = 'Line'; this.geometry = geometry; this.material = material; this.updateMorphTargets(); } Line.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Line, isLine: true, copy: function ( source ) { Object3D.prototype.copy.call( this, source ); this.material = source.material; this.geometry = source.geometry; return this; }, computeLineDistances: function () { const geometry = this.geometry; if ( geometry.isBufferGeometry ) { // we assume non-indexed geometry if ( geometry.index === null ) { const positionAttribute = geometry.attributes.position; const lineDistances = [ 0 ]; for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) { _start.fromBufferAttribute( positionAttribute, i - 1 ); _end.fromBufferAttribute( positionAttribute, i ); lineDistances[ i ] = lineDistances[ i - 1 ]; lineDistances[ i ] += _start.distanceTo( _end ); } geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); } else { console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); } } else if ( geometry.isGeometry ) { const vertices = geometry.vertices; const lineDistances = geometry.lineDistances; lineDistances[ 0 ] = 0; for ( let i = 1, l = vertices.length; i < l; i ++ ) { lineDistances[ i ] = lineDistances[ i - 1 ]; lineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] ); } } return this; }, raycast: function ( raycaster, intersects ) { const geometry = this.geometry; const matrixWorld = this.matrixWorld; const threshold = raycaster.params.Line.threshold; // Checking boundingSphere distance to ray if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); _sphere$2.copy( geometry.boundingSphere ); _sphere$2.applyMatrix4( matrixWorld ); _sphere$2.radius += threshold; if ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return; // _inverseMatrix$1.copy( matrixWorld ).invert(); _ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 ); const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); const localThresholdSq = localThreshold * localThreshold; const vStart = new Vector3(); const vEnd = new Vector3(); const interSegment = new Vector3(); const interRay = new Vector3(); const step = this.isLineSegments ? 2 : 1; if ( geometry.isBufferGeometry ) { const index = geometry.index; const attributes = geometry.attributes; const positionAttribute = attributes.position; if ( index !== null ) { const indices = index.array; for ( let i = 0, l = indices.length - 1; i < l; i += step ) { const a = indices[ i ]; const b = indices[ i + 1 ]; vStart.fromBufferAttribute( positionAttribute, a ); vEnd.fromBufferAttribute( positionAttribute, b ); const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); if ( distSq > localThresholdSq ) continue; interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation const distance = raycaster.ray.origin.distanceTo( interRay ); if ( distance < raycaster.near || distance > raycaster.far ) continue; intersects.push( { distance: distance, // What do we want? intersection point on the ray or on the segment?? // point: raycaster.ray.at( distance ), point: interSegment.clone().applyMatrix4( this.matrixWorld ), index: i, face: null, faceIndex: null, object: this } ); } } else { for ( let i = 0, l = positionAttribute.count - 1; i < l; i += step ) { vStart.fromBufferAttribute( positionAttribute, i ); vEnd.fromBufferAttribute( positionAttribute, i + 1 ); const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment ); if ( distSq > localThresholdSq ) continue; interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation const distance = raycaster.ray.origin.distanceTo( interRay ); if ( distance < raycaster.near || distance > raycaster.far ) continue; intersects.push( { distance: distance, // What do we want? intersection point on the ray or on the segment?? // point: raycaster.ray.at( distance ), point: interSegment.clone().applyMatrix4( this.matrixWorld ), index: i, face: null, faceIndex: null, object: this } ); } } } else if ( geometry.isGeometry ) { const vertices = geometry.vertices; const nbVertices = vertices.length; for ( let i = 0; i < nbVertices - 1; i += step ) { const distSq = _ray$1.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment ); if ( distSq > localThresholdSq ) continue; interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation const distance = raycaster.ray.origin.distanceTo( interRay ); if ( distance < raycaster.near || distance > raycaster.far ) continue; intersects.push( { distance: distance, // What do we want? intersection point on the ray or on the segment?? // point: raycaster.ray.at( distance ), point: interSegment.clone().applyMatrix4( this.matrixWorld ), index: i, face: null, faceIndex: null, object: this } ); } } }, updateMorphTargets: function () { const geometry = this.geometry; if ( geometry.isBufferGeometry ) { const morphAttributes = geometry.morphAttributes; const keys = Object.keys( morphAttributes ); if ( keys.length > 0 ) { const morphAttribute = morphAttributes[ keys[ 0 ] ]; if ( morphAttribute !== undefined ) { this.morphTargetInfluences = []; this.morphTargetDictionary = {}; for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { const name = morphAttribute[ m ].name || String( m ); this.morphTargetInfluences.push( 0 ); this.morphTargetDictionary[ name ] = m; } } } } else { const morphTargets = geometry.morphTargets; if ( morphTargets !== undefined && morphTargets.length > 0 ) { console.error( 'THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); } } } } ); const _start$1 = new Vector3(); const _end$1 = new Vector3(); function LineSegments( geometry, material ) { Line.call( this, geometry, material ); this.type = 'LineSegments'; } LineSegments.prototype = Object.assign( Object.create( Line.prototype ), { constructor: LineSegments, isLineSegments: true, computeLineDistances: function () { const geometry = this.geometry; if ( geometry.isBufferGeometry ) { // we assume non-indexed geometry if ( geometry.index === null ) { const positionAttribute = geometry.attributes.position; const lineDistances = []; for ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) { _start$1.fromBufferAttribute( positionAttribute, i ); _end$1.fromBufferAttribute( positionAttribute, i + 1 ); lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); } geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) ); } else { console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' ); } } else if ( geometry.isGeometry ) { const vertices = geometry.vertices; const lineDistances = geometry.lineDistances; for ( let i = 0, l = vertices.length; i < l; i += 2 ) { _start$1.copy( vertices[ i ] ); _end$1.copy( vertices[ i + 1 ] ); lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ]; lineDistances[ i + 1 ] = lineDistances[ i ] + _start$1.distanceTo( _end$1 ); } } return this; } } ); function LineLoop( geometry, material ) { Line.call( this, geometry, material ); this.type = 'LineLoop'; } LineLoop.prototype = Object.assign( Object.create( Line.prototype ), { constructor: LineLoop, isLineLoop: true, } ); /** * parameters = { * color: , * opacity: , * map: new THREE.Texture( ), * alphaMap: new THREE.Texture( ), * * size: , * sizeAttenuation: * * morphTargets: * } */ function PointsMaterial( parameters ) { Material.call( this ); this.type = 'PointsMaterial'; this.color = new Color( 0xffffff ); this.map = null; this.alphaMap = null; this.size = 1; this.sizeAttenuation = true; this.morphTargets = false; this.setValues( parameters ); } PointsMaterial.prototype = Object.create( Material.prototype ); PointsMaterial.prototype.constructor = PointsMaterial; PointsMaterial.prototype.isPointsMaterial = true; PointsMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.alphaMap = source.alphaMap; this.size = source.size; this.sizeAttenuation = source.sizeAttenuation; this.morphTargets = source.morphTargets; return this; }; const _inverseMatrix$2 = new Matrix4(); const _ray$2 = new Ray(); const _sphere$3 = new Sphere(); const _position$1 = new Vector3(); function Points( geometry = new BufferGeometry(), material = new PointsMaterial() ) { Object3D.call( this ); this.type = 'Points'; this.geometry = geometry; this.material = material; this.updateMorphTargets(); } Points.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Points, isPoints: true, copy: function ( source ) { Object3D.prototype.copy.call( this, source ); this.material = source.material; this.geometry = source.geometry; return this; }, raycast: function ( raycaster, intersects ) { const geometry = this.geometry; const matrixWorld = this.matrixWorld; const threshold = raycaster.params.Points.threshold; // Checking boundingSphere distance to ray if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere(); _sphere$3.copy( geometry.boundingSphere ); _sphere$3.applyMatrix4( matrixWorld ); _sphere$3.radius += threshold; if ( raycaster.ray.intersectsSphere( _sphere$3 ) === false ) return; // _inverseMatrix$2.copy( matrixWorld ).invert(); _ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 ); const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 ); const localThresholdSq = localThreshold * localThreshold; if ( geometry.isBufferGeometry ) { const index = geometry.index; const attributes = geometry.attributes; const positionAttribute = attributes.position; if ( index !== null ) { const indices = index.array; for ( let i = 0, il = indices.length; i < il; i ++ ) { const a = indices[ i ]; _position$1.fromBufferAttribute( positionAttribute, a ); testPoint( _position$1, a, localThresholdSq, matrixWorld, raycaster, intersects, this ); } } else { for ( let i = 0, l = positionAttribute.count; i < l; i ++ ) { _position$1.fromBufferAttribute( positionAttribute, i ); testPoint( _position$1, i, localThresholdSq, matrixWorld, raycaster, intersects, this ); } } } else { const vertices = geometry.vertices; for ( let i = 0, l = vertices.length; i < l; i ++ ) { testPoint( vertices[ i ], i, localThresholdSq, matrixWorld, raycaster, intersects, this ); } } }, updateMorphTargets: function () { const geometry = this.geometry; if ( geometry.isBufferGeometry ) { const morphAttributes = geometry.morphAttributes; const keys = Object.keys( morphAttributes ); if ( keys.length > 0 ) { const morphAttribute = morphAttributes[ keys[ 0 ] ]; if ( morphAttribute !== undefined ) { this.morphTargetInfluences = []; this.morphTargetDictionary = {}; for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) { const name = morphAttribute[ m ].name || String( m ); this.morphTargetInfluences.push( 0 ); this.morphTargetDictionary[ name ] = m; } } } } else { const morphTargets = geometry.morphTargets; if ( morphTargets !== undefined && morphTargets.length > 0 ) { console.error( 'THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.' ); } } } } ); function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) { const rayPointDistanceSq = _ray$2.distanceSqToPoint( point ); if ( rayPointDistanceSq < localThresholdSq ) { const intersectPoint = new Vector3(); _ray$2.closestPointToPoint( point, intersectPoint ); intersectPoint.applyMatrix4( matrixWorld ); const distance = raycaster.ray.origin.distanceTo( intersectPoint ); if ( distance < raycaster.near || distance > raycaster.far ) return; intersects.push( { distance: distance, distanceToRay: Math.sqrt( rayPointDistanceSq ), point: intersectPoint, index: index, face: null, object: object } ); } } function VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { Texture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); this.format = format !== undefined ? format : RGBFormat; this.minFilter = minFilter !== undefined ? minFilter : LinearFilter; this.magFilter = magFilter !== undefined ? magFilter : LinearFilter; this.generateMipmaps = false; const scope = this; function updateVideo() { scope.needsUpdate = true; video.requestVideoFrameCallback( updateVideo ); } if ( 'requestVideoFrameCallback' in video ) { video.requestVideoFrameCallback( updateVideo ); } } VideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), { constructor: VideoTexture, clone: function () { return new this.constructor( this.image ).copy( this ); }, isVideoTexture: true, update: function () { const video = this.image; const hasVideoFrameCallback = 'requestVideoFrameCallback' in video; if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) { this.needsUpdate = true; } } } ); function CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) { Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ); this.image = { width: width, height: height }; this.mipmaps = mipmaps; // no flipping for cube textures // (also flipping doesn't work for compressed textures ) this.flipY = false; // can't generate mipmaps for compressed textures // mips must be embedded in DDS files this.generateMipmaps = false; } CompressedTexture.prototype = Object.create( Texture.prototype ); CompressedTexture.prototype.constructor = CompressedTexture; CompressedTexture.prototype.isCompressedTexture = true; function CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) { Texture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); this.needsUpdate = true; } CanvasTexture.prototype = Object.create( Texture.prototype ); CanvasTexture.prototype.constructor = CanvasTexture; CanvasTexture.prototype.isCanvasTexture = true; function DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) { format = format !== undefined ? format : DepthFormat; if ( format !== DepthFormat && format !== DepthStencilFormat ) { throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' ); } if ( type === undefined && format === DepthFormat ) type = UnsignedShortType; if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type$1; Texture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ); this.image = { width: width, height: height }; this.magFilter = magFilter !== undefined ? magFilter : NearestFilter; this.minFilter = minFilter !== undefined ? minFilter : NearestFilter; this.flipY = false; this.generateMipmaps = false; } DepthTexture.prototype = Object.create( Texture.prototype ); DepthTexture.prototype.constructor = DepthTexture; DepthTexture.prototype.isDepthTexture = true; let _geometryId = 0; // Geometry uses even numbers as Id const _m1$3 = new Matrix4(); const _obj$1 = new Object3D(); const _offset$1 = new Vector3(); function Geometry() { Object.defineProperty( this, 'id', { value: _geometryId += 2 } ); this.uuid = MathUtils.generateUUID(); this.name = ''; this.type = 'Geometry'; this.vertices = []; this.colors = []; this.faces = []; this.faceVertexUvs = [[]]; this.morphTargets = []; this.morphNormals = []; this.skinWeights = []; this.skinIndices = []; this.lineDistances = []; this.boundingBox = null; this.boundingSphere = null; // update flags this.elementsNeedUpdate = false; this.verticesNeedUpdate = false; this.uvsNeedUpdate = false; this.normalsNeedUpdate = false; this.colorsNeedUpdate = false; this.lineDistancesNeedUpdate = false; this.groupsNeedUpdate = false; } Geometry.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { constructor: Geometry, isGeometry: true, applyMatrix4: function ( matrix ) { const normalMatrix = new Matrix3().getNormalMatrix( matrix ); for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { const vertex = this.vertices[ i ]; vertex.applyMatrix4( matrix ); } for ( let i = 0, il = this.faces.length; i < il; i ++ ) { const face = this.faces[ i ]; face.normal.applyMatrix3( normalMatrix ).normalize(); for ( let j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) { face.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize(); } } if ( this.boundingBox !== null ) { this.computeBoundingBox(); } if ( this.boundingSphere !== null ) { this.computeBoundingSphere(); } this.verticesNeedUpdate = true; this.normalsNeedUpdate = true; return this; }, rotateX: function ( angle ) { // rotate geometry around world x-axis _m1$3.makeRotationX( angle ); this.applyMatrix4( _m1$3 ); return this; }, rotateY: function ( angle ) { // rotate geometry around world y-axis _m1$3.makeRotationY( angle ); this.applyMatrix4( _m1$3 ); return this; }, rotateZ: function ( angle ) { // rotate geometry around world z-axis _m1$3.makeRotationZ( angle ); this.applyMatrix4( _m1$3 ); return this; }, translate: function ( x, y, z ) { // translate geometry _m1$3.makeTranslation( x, y, z ); this.applyMatrix4( _m1$3 ); return this; }, scale: function ( x, y, z ) { // scale geometry _m1$3.makeScale( x, y, z ); this.applyMatrix4( _m1$3 ); return this; }, lookAt: function ( vector ) { _obj$1.lookAt( vector ); _obj$1.updateMatrix(); this.applyMatrix4( _obj$1.matrix ); return this; }, fromBufferGeometry: function ( geometry ) { const scope = this; const index = geometry.index !== null ? geometry.index : undefined; const attributes = geometry.attributes; if ( attributes.position === undefined ) { console.error( 'THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.' ); return this; } const position = attributes.position; const normal = attributes.normal; const color = attributes.color; const uv = attributes.uv; const uv2 = attributes.uv2; if ( uv2 !== undefined ) this.faceVertexUvs[ 1 ] = []; for ( let i = 0; i < position.count; i ++ ) { scope.vertices.push( new Vector3().fromBufferAttribute( position, i ) ); if ( color !== undefined ) { scope.colors.push( new Color().fromBufferAttribute( color, i ) ); } } function addFace( a, b, c, materialIndex ) { const vertexColors = ( color === undefined ) ? [] : [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ]; const vertexNormals = ( normal === undefined ) ? [] : [ new Vector3().fromBufferAttribute( normal, a ), new Vector3().fromBufferAttribute( normal, b ), new Vector3().fromBufferAttribute( normal, c ) ]; const face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex ); scope.faces.push( face ); if ( uv !== undefined ) { scope.faceVertexUvs[ 0 ].push( [ new Vector2().fromBufferAttribute( uv, a ), new Vector2().fromBufferAttribute( uv, b ), new Vector2().fromBufferAttribute( uv, c ) ] ); } if ( uv2 !== undefined ) { scope.faceVertexUvs[ 1 ].push( [ new Vector2().fromBufferAttribute( uv2, a ), new Vector2().fromBufferAttribute( uv2, b ), new Vector2().fromBufferAttribute( uv2, c ) ] ); } } const groups = geometry.groups; if ( groups.length > 0 ) { for ( let i = 0; i < groups.length; i ++ ) { const group = groups[ i ]; const start = group.start; const count = group.count; for ( let j = start, jl = start + count; j < jl; j += 3 ) { if ( index !== undefined ) { addFace( index.getX( j ), index.getX( j + 1 ), index.getX( j + 2 ), group.materialIndex ); } else { addFace( j, j + 1, j + 2, group.materialIndex ); } } } } else { if ( index !== undefined ) { for ( let i = 0; i < index.count; i += 3 ) { addFace( index.getX( i ), index.getX( i + 1 ), index.getX( i + 2 ) ); } } else { for ( let i = 0; i < position.count; i += 3 ) { addFace( i, i + 1, i + 2 ); } } } this.computeFaceNormals(); if ( geometry.boundingBox !== null ) { this.boundingBox = geometry.boundingBox.clone(); } if ( geometry.boundingSphere !== null ) { this.boundingSphere = geometry.boundingSphere.clone(); } return this; }, center: function () { this.computeBoundingBox(); this.boundingBox.getCenter( _offset$1 ).negate(); this.translate( _offset$1.x, _offset$1.y, _offset$1.z ); return this; }, normalize: function () { this.computeBoundingSphere(); const center = this.boundingSphere.center; const radius = this.boundingSphere.radius; const s = radius === 0 ? 1 : 1.0 / radius; const matrix = new Matrix4(); matrix.set( s, 0, 0, - s * center.x, 0, s, 0, - s * center.y, 0, 0, s, - s * center.z, 0, 0, 0, 1 ); this.applyMatrix4( matrix ); return this; }, computeFaceNormals: function () { const cb = new Vector3(), ab = new Vector3(); for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; const vA = this.vertices[ face.a ]; const vB = this.vertices[ face.b ]; const vC = this.vertices[ face.c ]; cb.subVectors( vC, vB ); ab.subVectors( vA, vB ); cb.cross( ab ); cb.normalize(); face.normal.copy( cb ); } }, computeVertexNormals: function ( areaWeighted = true ) { const vertices = new Array( this.vertices.length ); for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { vertices[ v ] = new Vector3(); } if ( areaWeighted ) { // vertex normals weighted by triangle areas // http://www.iquilezles.org/www/articles/normals/normals.htm const cb = new Vector3(), ab = new Vector3(); for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; const vA = this.vertices[ face.a ]; const vB = this.vertices[ face.b ]; const vC = this.vertices[ face.c ]; cb.subVectors( vC, vB ); ab.subVectors( vA, vB ); cb.cross( ab ); vertices[ face.a ].add( cb ); vertices[ face.b ].add( cb ); vertices[ face.c ].add( cb ); } } else { this.computeFaceNormals(); for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; vertices[ face.a ].add( face.normal ); vertices[ face.b ].add( face.normal ); vertices[ face.c ].add( face.normal ); } } for ( let v = 0, vl = this.vertices.length; v < vl; v ++ ) { vertices[ v ].normalize(); } for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; const vertexNormals = face.vertexNormals; if ( vertexNormals.length === 3 ) { vertexNormals[ 0 ].copy( vertices[ face.a ] ); vertexNormals[ 1 ].copy( vertices[ face.b ] ); vertexNormals[ 2 ].copy( vertices[ face.c ] ); } else { vertexNormals[ 0 ] = vertices[ face.a ].clone(); vertexNormals[ 1 ] = vertices[ face.b ].clone(); vertexNormals[ 2 ] = vertices[ face.c ].clone(); } } if ( this.faces.length > 0 ) { this.normalsNeedUpdate = true; } }, computeFlatVertexNormals: function () { this.computeFaceNormals(); for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; const vertexNormals = face.vertexNormals; if ( vertexNormals.length === 3 ) { vertexNormals[ 0 ].copy( face.normal ); vertexNormals[ 1 ].copy( face.normal ); vertexNormals[ 2 ].copy( face.normal ); } else { vertexNormals[ 0 ] = face.normal.clone(); vertexNormals[ 1 ] = face.normal.clone(); vertexNormals[ 2 ] = face.normal.clone(); } } if ( this.faces.length > 0 ) { this.normalsNeedUpdate = true; } }, computeMorphNormals: function () { // save original normals // - create temp variables on first access // otherwise just copy (for faster repeated calls) for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; if ( ! face.__originalFaceNormal ) { face.__originalFaceNormal = face.normal.clone(); } else { face.__originalFaceNormal.copy( face.normal ); } if ( ! face.__originalVertexNormals ) face.__originalVertexNormals = []; for ( let i = 0, il = face.vertexNormals.length; i < il; i ++ ) { if ( ! face.__originalVertexNormals[ i ] ) { face.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone(); } else { face.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] ); } } } // use temp geometry to compute face and vertex normals for each morph const tmpGeo = new Geometry(); tmpGeo.faces = this.faces; for ( let i = 0, il = this.morphTargets.length; i < il; i ++ ) { // create on first access if ( ! this.morphNormals[ i ] ) { this.morphNormals[ i ] = {}; this.morphNormals[ i ].faceNormals = []; this.morphNormals[ i ].vertexNormals = []; const dstNormalsFace = this.morphNormals[ i ].faceNormals; const dstNormalsVertex = this.morphNormals[ i ].vertexNormals; for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const faceNormal = new Vector3(); const vertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() }; dstNormalsFace.push( faceNormal ); dstNormalsVertex.push( vertexNormals ); } } const morphNormals = this.morphNormals[ i ]; // set vertices to morph target tmpGeo.vertices = this.morphTargets[ i ].vertices; // compute morph normals tmpGeo.computeFaceNormals(); tmpGeo.computeVertexNormals(); // store morph normals for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; const faceNormal = morphNormals.faceNormals[ f ]; const vertexNormals = morphNormals.vertexNormals[ f ]; faceNormal.copy( face.normal ); vertexNormals.a.copy( face.vertexNormals[ 0 ] ); vertexNormals.b.copy( face.vertexNormals[ 1 ] ); vertexNormals.c.copy( face.vertexNormals[ 2 ] ); } } // restore original normals for ( let f = 0, fl = this.faces.length; f < fl; f ++ ) { const face = this.faces[ f ]; face.normal = face.__originalFaceNormal; face.vertexNormals = face.__originalVertexNormals; } }, computeBoundingBox: function () { if ( this.boundingBox === null ) { this.boundingBox = new Box3(); } this.boundingBox.setFromPoints( this.vertices ); }, computeBoundingSphere: function () { if ( this.boundingSphere === null ) { this.boundingSphere = new Sphere(); } this.boundingSphere.setFromPoints( this.vertices ); }, merge: function ( geometry, matrix, materialIndexOffset = 0 ) { if ( ! ( geometry && geometry.isGeometry ) ) { console.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry ); return; } let normalMatrix; const vertexOffset = this.vertices.length, vertices1 = this.vertices, vertices2 = geometry.vertices, faces1 = this.faces, faces2 = geometry.faces, colors1 = this.colors, colors2 = geometry.colors; if ( matrix !== undefined ) { normalMatrix = new Matrix3().getNormalMatrix( matrix ); } // vertices for ( let i = 0, il = vertices2.length; i < il; i ++ ) { const vertex = vertices2[ i ]; const vertexCopy = vertex.clone(); if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix ); vertices1.push( vertexCopy ); } // colors for ( let i = 0, il = colors2.length; i < il; i ++ ) { colors1.push( colors2[ i ].clone() ); } // faces for ( let i = 0, il = faces2.length; i < il; i ++ ) { const face = faces2[ i ]; let normal, color; const faceVertexNormals = face.vertexNormals, faceVertexColors = face.vertexColors; const faceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset ); faceCopy.normal.copy( face.normal ); if ( normalMatrix !== undefined ) { faceCopy.normal.applyMatrix3( normalMatrix ).normalize(); } for ( let j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) { normal = faceVertexNormals[ j ].clone(); if ( normalMatrix !== undefined ) { normal.applyMatrix3( normalMatrix ).normalize(); } faceCopy.vertexNormals.push( normal ); } faceCopy.color.copy( face.color ); for ( let j = 0, jl = faceVertexColors.length; j < jl; j ++ ) { color = faceVertexColors[ j ]; faceCopy.vertexColors.push( color.clone() ); } faceCopy.materialIndex = face.materialIndex + materialIndexOffset; faces1.push( faceCopy ); } // uvs for ( let i = 0, il = geometry.faceVertexUvs.length; i < il; i ++ ) { const faceVertexUvs2 = geometry.faceVertexUvs[ i ]; if ( this.faceVertexUvs[ i ] === undefined ) this.faceVertexUvs[ i ] = []; for ( let j = 0, jl = faceVertexUvs2.length; j < jl; j ++ ) { const uvs2 = faceVertexUvs2[ j ], uvsCopy = []; for ( let k = 0, kl = uvs2.length; k < kl; k ++ ) { uvsCopy.push( uvs2[ k ].clone() ); } this.faceVertexUvs[ i ].push( uvsCopy ); } } }, mergeMesh: function ( mesh ) { if ( ! ( mesh && mesh.isMesh ) ) { console.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh ); return; } if ( mesh.matrixAutoUpdate ) mesh.updateMatrix(); this.merge( mesh.geometry, mesh.matrix ); }, /* * Checks for duplicate vertices with hashmap. * Duplicated vertices are removed * and faces' vertices are updated. */ mergeVertices: function ( precisionPoints = 4 ) { const verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique) const unique = [], changes = []; const precision = Math.pow( 10, precisionPoints ); for ( let i = 0, il = this.vertices.length; i < il; i ++ ) { const v = this.vertices[ i ]; const key = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision ); if ( verticesMap[ key ] === undefined ) { verticesMap[ key ] = i; unique.push( this.vertices[ i ] ); changes[ i ] = unique.length - 1; } else { //console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]); changes[ i ] = changes[ verticesMap[ key ] ]; } } // if faces are completely degenerate after merging vertices, we // have to remove them from the geometry. const faceIndicesToRemove = []; for ( let i = 0, il = this.faces.length; i < il; i ++ ) { const face = this.faces[ i ]; face.a = changes[ face.a ]; face.b = changes[ face.b ]; face.c = changes[ face.c ]; const indices = [ face.a, face.b, face.c ]; // if any duplicate vertices are found in a Face3 // we have to remove the face as nothing can be saved for ( let n = 0; n < 3; n ++ ) { if ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) { faceIndicesToRemove.push( i ); break; } } } for ( let i = faceIndicesToRemove.length - 1; i >= 0; i -- ) { const idx = faceIndicesToRemove[ i ]; this.faces.splice( idx, 1 ); for ( let j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) { this.faceVertexUvs[ j ].splice( idx, 1 ); } } // Use unique set of vertices const diff = this.vertices.length - unique.length; this.vertices = unique; return diff; }, setFromPoints: function ( points ) { this.vertices = []; for ( let i = 0, l = points.length; i < l; i ++ ) { const point = points[ i ]; this.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); } return this; }, sortFacesByMaterialIndex: function () { const faces = this.faces; const length = faces.length; // tag faces for ( let i = 0; i < length; i ++ ) { faces[ i ]._id = i; } // sort faces function materialIndexSort( a, b ) { return a.materialIndex - b.materialIndex; } faces.sort( materialIndexSort ); // sort uvs const uvs1 = this.faceVertexUvs[ 0 ]; const uvs2 = this.faceVertexUvs[ 1 ]; let newUvs1, newUvs2; if ( uvs1 && uvs1.length === length ) newUvs1 = []; if ( uvs2 && uvs2.length === length ) newUvs2 = []; for ( let i = 0; i < length; i ++ ) { const id = faces[ i ]._id; if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); } if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; }, toJSON: function () { const data = { metadata: { version: 4.5, type: 'Geometry', generator: 'Geometry.toJSON' } }; // standard Geometry serialization data.uuid = this.uuid; data.type = this.type; if ( this.name !== '' ) data.name = this.name; if ( this.parameters !== undefined ) { const parameters = this.parameters; for ( const key in parameters ) { if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ]; } return data; } const vertices = []; for ( let i = 0; i < this.vertices.length; i ++ ) { const vertex = this.vertices[ i ]; vertices.push( vertex.x, vertex.y, vertex.z ); } const faces = []; const normals = []; const normalsHash = {}; const colors = []; const colorsHash = {}; const uvs = []; const uvsHash = {}; for ( let i = 0; i < this.faces.length; i ++ ) { const face = this.faces[ i ]; const hasMaterial = true; const hasFaceUv = false; // deprecated const hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined; const hasFaceNormal = face.normal.length() > 0; const hasFaceVertexNormal = face.vertexNormals.length > 0; const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; const hasFaceVertexColor = face.vertexColors.length > 0; let faceType = 0; faceType = setBit( faceType, 0, 0 ); // isQuad faceType = setBit( faceType, 1, hasMaterial ); faceType = setBit( faceType, 2, hasFaceUv ); faceType = setBit( faceType, 3, hasFaceVertexUv ); faceType = setBit( faceType, 4, hasFaceNormal ); faceType = setBit( faceType, 5, hasFaceVertexNormal ); faceType = setBit( faceType, 6, hasFaceColor ); faceType = setBit( faceType, 7, hasFaceVertexColor ); faces.push( faceType ); faces.push( face.a, face.b, face.c ); faces.push( face.materialIndex ); if ( hasFaceVertexUv ) { const faceVertexUvs = this.faceVertexUvs[ 0 ][ i ]; faces.push( getUvIndex( faceVertexUvs[ 0 ] ), getUvIndex( faceVertexUvs[ 1 ] ), getUvIndex( faceVertexUvs[ 2 ] ) ); } if ( hasFaceNormal ) { faces.push( getNormalIndex( face.normal ) ); } if ( hasFaceVertexNormal ) { const vertexNormals = face.vertexNormals; faces.push( getNormalIndex( vertexNormals[ 0 ] ), getNormalIndex( vertexNormals[ 1 ] ), getNormalIndex( vertexNormals[ 2 ] ) ); } if ( hasFaceColor ) { faces.push( getColorIndex( face.color ) ); } if ( hasFaceVertexColor ) { const vertexColors = face.vertexColors; faces.push( getColorIndex( vertexColors[ 0 ] ), getColorIndex( vertexColors[ 1 ] ), getColorIndex( vertexColors[ 2 ] ) ); } } function setBit( value, position, enabled ) { return enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) ); } function getNormalIndex( normal ) { const hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); if ( normalsHash[ hash ] !== undefined ) { return normalsHash[ hash ]; } normalsHash[ hash ] = normals.length / 3; normals.push( normal.x, normal.y, normal.z ); return normalsHash[ hash ]; } function getColorIndex( color ) { const hash = color.r.toString() + color.g.toString() + color.b.toString(); if ( colorsHash[ hash ] !== undefined ) { return colorsHash[ hash ]; } colorsHash[ hash ] = colors.length; colors.push( color.getHex() ); return colorsHash[ hash ]; } function getUvIndex( uv ) { const hash = uv.x.toString() + uv.y.toString(); if ( uvsHash[ hash ] !== undefined ) { return uvsHash[ hash ]; } uvsHash[ hash ] = uvs.length / 2; uvs.push( uv.x, uv.y ); return uvsHash[ hash ]; } data.data = {}; data.data.vertices = vertices; data.data.normals = normals; if ( colors.length > 0 ) data.data.colors = colors; if ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility data.data.faces = faces; return data; }, clone: function () { /* // Handle primitives const parameters = this.parameters; if ( parameters !== undefined ) { const values = []; for ( const key in parameters ) { values.push( parameters[ key ] ); } const geometry = Object.create( this.constructor.prototype ); this.constructor.apply( geometry, values ); return geometry; } return new this.constructor().copy( this ); */ return new Geometry().copy( this ); }, copy: function ( source ) { // reset this.vertices = []; this.colors = []; this.faces = []; this.faceVertexUvs = [[]]; this.morphTargets = []; this.morphNormals = []; this.skinWeights = []; this.skinIndices = []; this.lineDistances = []; this.boundingBox = null; this.boundingSphere = null; // name this.name = source.name; // vertices const vertices = source.vertices; for ( let i = 0, il = vertices.length; i < il; i ++ ) { this.vertices.push( vertices[ i ].clone() ); } // colors const colors = source.colors; for ( let i = 0, il = colors.length; i < il; i ++ ) { this.colors.push( colors[ i ].clone() ); } // faces const faces = source.faces; for ( let i = 0, il = faces.length; i < il; i ++ ) { this.faces.push( faces[ i ].clone() ); } // face vertex uvs for ( let i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) { const faceVertexUvs = source.faceVertexUvs[ i ]; if ( this.faceVertexUvs[ i ] === undefined ) { this.faceVertexUvs[ i ] = []; } for ( let j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) { const uvs = faceVertexUvs[ j ], uvsCopy = []; for ( let k = 0, kl = uvs.length; k < kl; k ++ ) { const uv = uvs[ k ]; uvsCopy.push( uv.clone() ); } this.faceVertexUvs[ i ].push( uvsCopy ); } } // morph targets const morphTargets = source.morphTargets; for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { const morphTarget = {}; morphTarget.name = morphTargets[ i ].name; // vertices if ( morphTargets[ i ].vertices !== undefined ) { morphTarget.vertices = []; for ( let j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) { morphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() ); } } // normals if ( morphTargets[ i ].normals !== undefined ) { morphTarget.normals = []; for ( let j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) { morphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() ); } } this.morphTargets.push( morphTarget ); } // morph normals const morphNormals = source.morphNormals; for ( let i = 0, il = morphNormals.length; i < il; i ++ ) { const morphNormal = {}; // vertex normals if ( morphNormals[ i ].vertexNormals !== undefined ) { morphNormal.vertexNormals = []; for ( let j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) { const srcVertexNormal = morphNormals[ i ].vertexNormals[ j ]; const destVertexNormal = {}; destVertexNormal.a = srcVertexNormal.a.clone(); destVertexNormal.b = srcVertexNormal.b.clone(); destVertexNormal.c = srcVertexNormal.c.clone(); morphNormal.vertexNormals.push( destVertexNormal ); } } // face normals if ( morphNormals[ i ].faceNormals !== undefined ) { morphNormal.faceNormals = []; for ( let j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) { morphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() ); } } this.morphNormals.push( morphNormal ); } // skin weights const skinWeights = source.skinWeights; for ( let i = 0, il = skinWeights.length; i < il; i ++ ) { this.skinWeights.push( skinWeights[ i ].clone() ); } // skin indices const skinIndices = source.skinIndices; for ( let i = 0, il = skinIndices.length; i < il; i ++ ) { this.skinIndices.push( skinIndices[ i ].clone() ); } // line distances const lineDistances = source.lineDistances; for ( let i = 0, il = lineDistances.length; i < il; i ++ ) { this.lineDistances.push( lineDistances[ i ] ); } // bounding box const boundingBox = source.boundingBox; if ( boundingBox !== null ) { this.boundingBox = boundingBox.clone(); } // bounding sphere const boundingSphere = source.boundingSphere; if ( boundingSphere !== null ) { this.boundingSphere = boundingSphere.clone(); } // update flags this.elementsNeedUpdate = source.elementsNeedUpdate; this.verticesNeedUpdate = source.verticesNeedUpdate; this.uvsNeedUpdate = source.uvsNeedUpdate; this.normalsNeedUpdate = source.normalsNeedUpdate; this.colorsNeedUpdate = source.colorsNeedUpdate; this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; this.groupsNeedUpdate = source.groupsNeedUpdate; return this; }, dispose: function () { this.dispatchEvent( { type: 'dispose' } ); } } ); class BoxGeometry extends Geometry { constructor( width, height, depth, widthSegments, heightSegments, depthSegments ) { super(); this.type = 'BoxGeometry'; this.parameters = { width: width, height: height, depth: depth, widthSegments: widthSegments, heightSegments: heightSegments, depthSegments: depthSegments }; this.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) ); this.mergeVertices(); } } class CircleBufferGeometry extends BufferGeometry { constructor( radius = 1, segments = 8, thetaStart = 0, thetaLength = Math.PI * 2 ) { super(); this.type = 'CircleBufferGeometry'; this.parameters = { radius: radius, segments: segments, thetaStart: thetaStart, thetaLength: thetaLength }; segments = Math.max( 3, segments ); // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // helper variables const vertex = new Vector3(); const uv = new Vector2(); // center point vertices.push( 0, 0, 0 ); normals.push( 0, 0, 1 ); uvs.push( 0.5, 0.5 ); for ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) { const segment = thetaStart + s / segments * thetaLength; // vertex vertex.x = radius * Math.cos( segment ); vertex.y = radius * Math.sin( segment ); vertices.push( vertex.x, vertex.y, vertex.z ); // normal normals.push( 0, 0, 1 ); // uvs uv.x = ( vertices[ i ] / radius + 1 ) / 2; uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2; uvs.push( uv.x, uv.y ); } // indices for ( let i = 1; i <= segments; i ++ ) { indices.push( i, i + 1, 0 ); } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); } } class CircleGeometry extends Geometry { constructor( radius, segments, thetaStart, thetaLength ) { super(); this.type = 'CircleGeometry'; this.parameters = { radius: radius, segments: segments, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) ); this.mergeVertices(); } } class CylinderBufferGeometry extends BufferGeometry { constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { super(); this.type = 'CylinderBufferGeometry'; this.parameters = { radiusTop: radiusTop, radiusBottom: radiusBottom, height: height, radialSegments: radialSegments, heightSegments: heightSegments, openEnded: openEnded, thetaStart: thetaStart, thetaLength: thetaLength }; const scope = this; radialSegments = Math.floor( radialSegments ); heightSegments = Math.floor( heightSegments ); // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // helper variables let index = 0; const indexArray = []; const halfHeight = height / 2; let groupStart = 0; // generate geometry generateTorso(); if ( openEnded === false ) { if ( radiusTop > 0 ) generateCap( true ); if ( radiusBottom > 0 ) generateCap( false ); } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); function generateTorso() { const normal = new Vector3(); const vertex = new Vector3(); let groupCount = 0; // this will be used to calculate the normal const slope = ( radiusBottom - radiusTop ) / height; // generate vertices, normals and uvs for ( let y = 0; y <= heightSegments; y ++ ) { const indexRow = []; const v = y / heightSegments; // calculate the radius of the current row const radius = v * ( radiusBottom - radiusTop ) + radiusTop; for ( let x = 0; x <= radialSegments; x ++ ) { const u = x / radialSegments; const theta = u * thetaLength + thetaStart; const sinTheta = Math.sin( theta ); const cosTheta = Math.cos( theta ); // vertex vertex.x = radius * sinTheta; vertex.y = - v * height + halfHeight; vertex.z = radius * cosTheta; vertices.push( vertex.x, vertex.y, vertex.z ); // normal normal.set( sinTheta, slope, cosTheta ).normalize(); normals.push( normal.x, normal.y, normal.z ); // uv uvs.push( u, 1 - v ); // save index of vertex in respective row indexRow.push( index ++ ); } // now save vertices of the row in our index array indexArray.push( indexRow ); } // generate indices for ( let x = 0; x < radialSegments; x ++ ) { for ( let y = 0; y < heightSegments; y ++ ) { // we use the index array to access the correct indices const a = indexArray[ y ][ x ]; const b = indexArray[ y + 1 ][ x ]; const c = indexArray[ y + 1 ][ x + 1 ]; const d = indexArray[ y ][ x + 1 ]; // faces indices.push( a, b, d ); indices.push( b, c, d ); // update group counter groupCount += 6; } } // add a group to the geometry. this will ensure multi material support scope.addGroup( groupStart, groupCount, 0 ); // calculate new start value for groups groupStart += groupCount; } function generateCap( top ) { // save the index of the first center vertex const centerIndexStart = index; const uv = new Vector2(); const vertex = new Vector3(); let groupCount = 0; const radius = ( top === true ) ? radiusTop : radiusBottom; const sign = ( top === true ) ? 1 : - 1; // first we generate the center vertex data of the cap. // because the geometry needs one set of uvs per face, // we must generate a center vertex per face/segment for ( let x = 1; x <= radialSegments; x ++ ) { // vertex vertices.push( 0, halfHeight * sign, 0 ); // normal normals.push( 0, sign, 0 ); // uv uvs.push( 0.5, 0.5 ); // increase index index ++; } // save the index of the last center vertex const centerIndexEnd = index; // now we generate the surrounding vertices, normals and uvs for ( let x = 0; x <= radialSegments; x ++ ) { const u = x / radialSegments; const theta = u * thetaLength + thetaStart; const cosTheta = Math.cos( theta ); const sinTheta = Math.sin( theta ); // vertex vertex.x = radius * sinTheta; vertex.y = halfHeight * sign; vertex.z = radius * cosTheta; vertices.push( vertex.x, vertex.y, vertex.z ); // normal normals.push( 0, sign, 0 ); // uv uv.x = ( cosTheta * 0.5 ) + 0.5; uv.y = ( sinTheta * 0.5 * sign ) + 0.5; uvs.push( uv.x, uv.y ); // increase index index ++; } // generate indices for ( let x = 0; x < radialSegments; x ++ ) { const c = centerIndexStart + x; const i = centerIndexEnd + x; if ( top === true ) { // face top indices.push( i, i + 1, c ); } else { // face bottom indices.push( i + 1, i, c ); } groupCount += 3; } // add a group to the geometry. this will ensure multi material support scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 ); // calculate new start value for groups groupStart += groupCount; } } } class CylinderGeometry extends Geometry { constructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { super(); this.type = 'CylinderGeometry'; this.parameters = { radiusTop: radiusTop, radiusBottom: radiusBottom, height: height, radialSegments: radialSegments, heightSegments: heightSegments, openEnded: openEnded, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) ); this.mergeVertices(); } } class ConeGeometry extends CylinderGeometry { constructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) { super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); this.type = 'ConeGeometry'; this.parameters = { radius: radius, height: height, radialSegments: radialSegments, heightSegments: heightSegments, openEnded: openEnded, thetaStart: thetaStart, thetaLength: thetaLength }; } } class ConeBufferGeometry extends CylinderBufferGeometry { constructor( radius = 1, height = 1, radialSegments = 8, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) { super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ); this.type = 'ConeBufferGeometry'; this.parameters = { radius: radius, height: height, radialSegments: radialSegments, heightSegments: heightSegments, openEnded: openEnded, thetaStart: thetaStart, thetaLength: thetaLength }; } } class PolyhedronBufferGeometry extends BufferGeometry { constructor( vertices, indices, radius = 1, detail = 0 ) { super(); this.type = 'PolyhedronBufferGeometry'; this.parameters = { vertices: vertices, indices: indices, radius: radius, detail: detail }; // default buffer data const vertexBuffer = []; const uvBuffer = []; // the subdivision creates the vertex buffer data subdivide( detail ); // all vertices should lie on a conceptual sphere with a given radius applyRadius( radius ); // finally, create the uv data generateUVs(); // build non-indexed geometry this.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) ); if ( detail === 0 ) { this.computeVertexNormals(); // flat normals } else { this.normalizeNormals(); // smooth normals } // helper functions function subdivide( detail ) { const a = new Vector3(); const b = new Vector3(); const c = new Vector3(); // iterate over all faces and apply a subdivison with the given detail value for ( let i = 0; i < indices.length; i += 3 ) { // get the vertices of the face getVertexByIndex( indices[ i + 0 ], a ); getVertexByIndex( indices[ i + 1 ], b ); getVertexByIndex( indices[ i + 2 ], c ); // perform subdivision subdivideFace( a, b, c, detail ); } } function subdivideFace( a, b, c, detail ) { const cols = detail + 1; // we use this multidimensional array as a data structure for creating the subdivision const v = []; // construct all of the vertices for this subdivision for ( let i = 0; i <= cols; i ++ ) { v[ i ] = []; const aj = a.clone().lerp( c, i / cols ); const bj = b.clone().lerp( c, i / cols ); const rows = cols - i; for ( let j = 0; j <= rows; j ++ ) { if ( j === 0 && i === cols ) { v[ i ][ j ] = aj; } else { v[ i ][ j ] = aj.clone().lerp( bj, j / rows ); } } } // construct all of the faces for ( let i = 0; i < cols; i ++ ) { for ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) { const k = Math.floor( j / 2 ); if ( j % 2 === 0 ) { pushVertex( v[ i ][ k + 1 ] ); pushVertex( v[ i + 1 ][ k ] ); pushVertex( v[ i ][ k ] ); } else { pushVertex( v[ i ][ k + 1 ] ); pushVertex( v[ i + 1 ][ k + 1 ] ); pushVertex( v[ i + 1 ][ k ] ); } } } } function applyRadius( radius ) { const vertex = new Vector3(); // iterate over the entire buffer and apply the radius to each vertex for ( let i = 0; i < vertexBuffer.length; i += 3 ) { vertex.x = vertexBuffer[ i + 0 ]; vertex.y = vertexBuffer[ i + 1 ]; vertex.z = vertexBuffer[ i + 2 ]; vertex.normalize().multiplyScalar( radius ); vertexBuffer[ i + 0 ] = vertex.x; vertexBuffer[ i + 1 ] = vertex.y; vertexBuffer[ i + 2 ] = vertex.z; } } function generateUVs() { const vertex = new Vector3(); for ( let i = 0; i < vertexBuffer.length; i += 3 ) { vertex.x = vertexBuffer[ i + 0 ]; vertex.y = vertexBuffer[ i + 1 ]; vertex.z = vertexBuffer[ i + 2 ]; const u = azimuth( vertex ) / 2 / Math.PI + 0.5; const v = inclination( vertex ) / Math.PI + 0.5; uvBuffer.push( u, 1 - v ); } correctUVs(); correctSeam(); } function correctSeam() { // handle case when face straddles the seam, see #3269 for ( let i = 0; i < uvBuffer.length; i += 6 ) { // uv data of a single face const x0 = uvBuffer[ i + 0 ]; const x1 = uvBuffer[ i + 2 ]; const x2 = uvBuffer[ i + 4 ]; const max = Math.max( x0, x1, x2 ); const min = Math.min( x0, x1, x2 ); // 0.9 is somewhat arbitrary if ( max > 0.9 && min < 0.1 ) { if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1; if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1; if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1; } } } function pushVertex( vertex ) { vertexBuffer.push( vertex.x, vertex.y, vertex.z ); } function getVertexByIndex( index, vertex ) { const stride = index * 3; vertex.x = vertices[ stride + 0 ]; vertex.y = vertices[ stride + 1 ]; vertex.z = vertices[ stride + 2 ]; } function correctUVs() { const a = new Vector3(); const b = new Vector3(); const c = new Vector3(); const centroid = new Vector3(); const uvA = new Vector2(); const uvB = new Vector2(); const uvC = new Vector2(); for ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) { a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] ); b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] ); c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] ); uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] ); uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] ); uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] ); centroid.copy( a ).add( b ).add( c ).divideScalar( 3 ); const azi = azimuth( centroid ); correctUV( uvA, j + 0, a, azi ); correctUV( uvB, j + 2, b, azi ); correctUV( uvC, j + 4, c, azi ); } } function correctUV( uv, stride, vector, azimuth ) { if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) { uvBuffer[ stride ] = uv.x - 1; } if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) { uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5; } } // Angle around the Y axis, counter-clockwise when looking from above. function azimuth( vector ) { return Math.atan2( vector.z, - vector.x ); } // Angle above the XZ plane. function inclination( vector ) { return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) ); } } } class DodecahedronBufferGeometry extends PolyhedronBufferGeometry { constructor( radius = 1, detail = 0 ) { const t = ( 1 + Math.sqrt( 5 ) ) / 2; const r = 1 / t; const vertices = [ // (±1, ±1, ±1) - 1, - 1, - 1, - 1, - 1, 1, - 1, 1, - 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, 1, 1, 1, - 1, 1, 1, 1, // (0, ±1/φ, ±φ) 0, - r, - t, 0, - r, t, 0, r, - t, 0, r, t, // (±1/φ, ±φ, 0) - r, - t, 0, - r, t, 0, r, - t, 0, r, t, 0, // (±φ, 0, ±1/φ) - t, 0, - r, t, 0, - r, - t, 0, r, t, 0, r ]; const indices = [ 3, 11, 7, 3, 7, 15, 3, 15, 13, 7, 19, 17, 7, 17, 6, 7, 6, 15, 17, 4, 8, 17, 8, 10, 17, 10, 6, 8, 0, 16, 8, 16, 2, 8, 2, 10, 0, 12, 1, 0, 1, 18, 0, 18, 16, 6, 10, 2, 6, 2, 13, 6, 13, 15, 2, 16, 18, 2, 18, 3, 2, 3, 13, 18, 1, 9, 18, 9, 11, 18, 11, 3, 4, 14, 12, 4, 12, 0, 4, 0, 8, 11, 9, 5, 11, 5, 19, 11, 19, 7, 19, 5, 14, 19, 14, 4, 19, 4, 17, 1, 12, 14, 1, 14, 5, 1, 5, 9 ]; super( vertices, indices, radius, detail ); this.type = 'DodecahedronBufferGeometry'; this.parameters = { radius: radius, detail: detail }; } } class DodecahedronGeometry extends Geometry { constructor( radius, detail ) { super(); this.type = 'DodecahedronGeometry'; this.parameters = { radius: radius, detail: detail }; this.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) ); this.mergeVertices(); } } const _v0$2 = new Vector3(); const _v1$5 = new Vector3(); const _normal$1 = new Vector3(); const _triangle = new Triangle(); class EdgesGeometry extends BufferGeometry { constructor( geometry, thresholdAngle ) { super(); this.type = 'EdgesGeometry'; this.parameters = { thresholdAngle: thresholdAngle }; thresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1; if ( geometry.isGeometry ) { geometry = new BufferGeometry().fromGeometry( geometry ); } const precisionPoints = 4; const precision = Math.pow( 10, precisionPoints ); const thresholdDot = Math.cos( MathUtils.DEG2RAD * thresholdAngle ); const indexAttr = geometry.getIndex(); const positionAttr = geometry.getAttribute( 'position' ); const indexCount = indexAttr ? indexAttr.count : positionAttr.count; const indexArr = [ 0, 0, 0 ]; const vertKeys = [ 'a', 'b', 'c' ]; const hashes = new Array( 3 ); const edgeData = {}; const vertices = []; for ( let i = 0; i < indexCount; i += 3 ) { if ( indexAttr ) { indexArr[ 0 ] = indexAttr.getX( i ); indexArr[ 1 ] = indexAttr.getX( i + 1 ); indexArr[ 2 ] = indexAttr.getX( i + 2 ); } else { indexArr[ 0 ] = i; indexArr[ 1 ] = i + 1; indexArr[ 2 ] = i + 2; } const { a, b, c } = _triangle; a.fromBufferAttribute( positionAttr, indexArr[ 0 ] ); b.fromBufferAttribute( positionAttr, indexArr[ 1 ] ); c.fromBufferAttribute( positionAttr, indexArr[ 2 ] ); _triangle.getNormal( _normal$1 ); // create hashes for the edge from the vertices hashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`; hashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`; hashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`; // skip degenerate triangles if ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) { continue; } // iterate over every edge for ( let j = 0; j < 3; j ++ ) { // get the first and next vertex making up the edge const jNext = ( j + 1 ) % 3; const vecHash0 = hashes[ j ]; const vecHash1 = hashes[ jNext ]; const v0 = _triangle[ vertKeys[ j ] ]; const v1 = _triangle[ vertKeys[ jNext ] ]; const hash = `${ vecHash0 }_${ vecHash1 }`; const reverseHash = `${ vecHash1 }_${ vecHash0 }`; if ( reverseHash in edgeData && edgeData[ reverseHash ] ) { // if we found a sibling edge add it into the vertex array if // it meets the angle threshold and delete the edge from the map. if ( _normal$1.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) { vertices.push( v0.x, v0.y, v0.z ); vertices.push( v1.x, v1.y, v1.z ); } edgeData[ reverseHash ] = null; } else if ( ! ( hash in edgeData ) ) { // if we've already got an edge here then skip adding a new one edgeData[ hash ] = { index0: indexArr[ j ], index1: indexArr[ jNext ], normal: _normal$1.clone(), }; } } } // iterate over all remaining, unmatched edges and add them to the vertex array for ( const key in edgeData ) { if ( edgeData[ key ] ) { const { index0, index1 } = edgeData[ key ]; _v0$2.fromBufferAttribute( positionAttr, index0 ); _v1$5.fromBufferAttribute( positionAttr, index1 ); vertices.push( _v0$2.x, _v0$2.y, _v0$2.z ); vertices.push( _v1$5.x, _v1$5.y, _v1$5.z ); } } this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); } } /** * Port from https://github.com/mapbox/earcut (v2.2.2) */ const Earcut = { triangulate: function ( data, holeIndices, dim ) { dim = dim || 2; const hasHoles = holeIndices && holeIndices.length; const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length; let outerNode = linkedList( data, 0, outerLen, dim, true ); const triangles = []; if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles; let minX, minY, maxX, maxY, x, y, invSize; if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim ); // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox if ( data.length > 80 * dim ) { minX = maxX = data[ 0 ]; minY = maxY = data[ 1 ]; for ( let i = dim; i < outerLen; i += dim ) { x = data[ i ]; y = data[ i + 1 ]; if ( x < minX ) minX = x; if ( y < minY ) minY = y; if ( x > maxX ) maxX = x; if ( y > maxY ) maxY = y; } // minX, minY and invSize are later used to transform coords into integers for z-order calculation invSize = Math.max( maxX - minX, maxY - minY ); invSize = invSize !== 0 ? 1 / invSize : 0; } earcutLinked( outerNode, triangles, dim, minX, minY, invSize ); return triangles; } }; // create a circular doubly linked list from polygon points in the specified winding order function linkedList( data, start, end, dim, clockwise ) { let i, last; if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) { for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); } else { for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last ); } if ( last && equals( last, last.next ) ) { removeNode( last ); last = last.next; } return last; } // eliminate colinear or duplicate points function filterPoints( start, end ) { if ( ! start ) return start; if ( ! end ) end = start; let p = start, again; do { again = false; if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) { removeNode( p ); p = end = p.prev; if ( p === p.next ) break; again = true; } else { p = p.next; } } while ( again || p !== end ); return end; } // main ear slicing loop which triangulates a polygon (given as a linked list) function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) { if ( ! ear ) return; // interlink polygon nodes in z-order if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize ); let stop = ear, prev, next; // iterate through ears, slicing them one by one while ( ear.prev !== ear.next ) { prev = ear.prev; next = ear.next; if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) { // cut off the triangle triangles.push( prev.i / dim ); triangles.push( ear.i / dim ); triangles.push( next.i / dim ); removeNode( ear ); // skipping the next vertex leads to less sliver triangles ear = next.next; stop = next.next; continue; } ear = next; // if we looped through the whole remaining polygon and can't find any more ears if ( ear === stop ) { // try filtering points and slicing again if ( ! pass ) { earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 ); // if this didn't work, try curing all small self-intersections locally } else if ( pass === 1 ) { ear = cureLocalIntersections( filterPoints( ear ), triangles, dim ); earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 ); // as a last resort, try splitting the remaining polygon into two } else if ( pass === 2 ) { splitEarcut( ear, triangles, dim, minX, minY, invSize ); } break; } } } // check whether a polygon node forms a valid ear with adjacent nodes function isEar( ear ) { const a = ear.prev, b = ear, c = ear.next; if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear // now make sure we don't have other points inside the potential ear let p = ear.next.next; while ( p !== ear.prev ) { if ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false; p = p.next; } return true; } function isEarHashed( ear, minX, minY, invSize ) { const a = ear.prev, b = ear, c = ear.next; if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear // triangle bbox; min & max are calculated like this for speed const minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ), minTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ), maxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ), maxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y ); // z-order range for the current triangle bbox; const minZ = zOrder( minTX, minTY, minX, minY, invSize ), maxZ = zOrder( maxTX, maxTY, minX, minY, invSize ); let p = ear.prevZ, n = ear.nextZ; // look for points inside the triangle in both directions while ( p && p.z >= minZ && n && n.z <= maxZ ) { if ( p !== ear.prev && p !== ear.next && pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false; p = p.prevZ; if ( n !== ear.prev && n !== ear.next && pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false; n = n.nextZ; } // look for remaining points in decreasing z-order while ( p && p.z >= minZ ) { if ( p !== ear.prev && p !== ear.next && pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false; p = p.prevZ; } // look for remaining points in increasing z-order while ( n && n.z <= maxZ ) { if ( n !== ear.prev && n !== ear.next && pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false; n = n.nextZ; } return true; } // go through all polygon nodes and cure small local self-intersections function cureLocalIntersections( start, triangles, dim ) { let p = start; do { const a = p.prev, b = p.next.next; if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) { triangles.push( a.i / dim ); triangles.push( p.i / dim ); triangles.push( b.i / dim ); // remove two nodes involved removeNode( p ); removeNode( p.next ); p = start = b; } p = p.next; } while ( p !== start ); return filterPoints( p ); } // try splitting polygon into two and triangulate them independently function splitEarcut( start, triangles, dim, minX, minY, invSize ) { // look for a valid diagonal that divides the polygon into two let a = start; do { let b = a.next.next; while ( b !== a.prev ) { if ( a.i !== b.i && isValidDiagonal( a, b ) ) { // split the polygon in two by the diagonal let c = splitPolygon( a, b ); // filter colinear points around the cuts a = filterPoints( a, a.next ); c = filterPoints( c, c.next ); // run earcut on each half earcutLinked( a, triangles, dim, minX, minY, invSize ); earcutLinked( c, triangles, dim, minX, minY, invSize ); return; } b = b.next; } a = a.next; } while ( a !== start ); } // link every hole into the outer loop, producing a single-ring polygon without holes function eliminateHoles( data, holeIndices, outerNode, dim ) { const queue = []; let i, len, start, end, list; for ( i = 0, len = holeIndices.length; i < len; i ++ ) { start = holeIndices[ i ] * dim; end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length; list = linkedList( data, start, end, dim, false ); if ( list === list.next ) list.steiner = true; queue.push( getLeftmost( list ) ); } queue.sort( compareX ); // process holes from left to right for ( i = 0; i < queue.length; i ++ ) { eliminateHole( queue[ i ], outerNode ); outerNode = filterPoints( outerNode, outerNode.next ); } return outerNode; } function compareX( a, b ) { return a.x - b.x; } // find a bridge between vertices that connects hole with an outer ring and and link it function eliminateHole( hole, outerNode ) { outerNode = findHoleBridge( hole, outerNode ); if ( outerNode ) { const b = splitPolygon( outerNode, hole ); // filter collinear points around the cuts filterPoints( outerNode, outerNode.next ); filterPoints( b, b.next ); } } // David Eberly's algorithm for finding a bridge between hole and outer polygon function findHoleBridge( hole, outerNode ) { let p = outerNode; const hx = hole.x; const hy = hole.y; let qx = - Infinity, m; // find a segment intersected by a ray from the hole's leftmost point to the left; // segment's endpoint with lesser x will be potential connection point do { if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) { const x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y ); if ( x <= hx && x > qx ) { qx = x; if ( x === hx ) { if ( hy === p.y ) return p; if ( hy === p.next.y ) return p.next; } m = p.x < p.next.x ? p : p.next; } } p = p.next; } while ( p !== outerNode ); if ( ! m ) return null; if ( hx === qx ) return m; // hole touches outer segment; pick leftmost endpoint // look for points inside the triangle of hole point, segment intersection and endpoint; // if there are no points found, we have a valid connection; // otherwise choose the point of the minimum angle with the ray as connection point const stop = m, mx = m.x, my = m.y; let tanMin = Infinity, tan; p = m; do { if ( hx >= p.x && p.x >= mx && hx !== p.x && pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) { tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) { m = p; tanMin = tan; } } p = p.next; } while ( p !== stop ); return m; } // whether sector in vertex m contains sector in vertex p in the same coordinates function sectorContainsSector( m, p ) { return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0; } // interlink polygon nodes in z-order function indexCurve( start, minX, minY, invSize ) { let p = start; do { if ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize ); p.prevZ = p.prev; p.nextZ = p.next; p = p.next; } while ( p !== start ); p.prevZ.nextZ = null; p.prevZ = null; sortLinked( p ); } // Simon Tatham's linked list merge sort algorithm // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html function sortLinked( list ) { let i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1; do { p = list; list = null; tail = null; numMerges = 0; while ( p ) { numMerges ++; q = p; pSize = 0; for ( i = 0; i < inSize; i ++ ) { pSize ++; q = q.nextZ; if ( ! q ) break; } qSize = inSize; while ( pSize > 0 || ( qSize > 0 && q ) ) { if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) { e = p; p = p.nextZ; pSize --; } else { e = q; q = q.nextZ; qSize --; } if ( tail ) tail.nextZ = e; else list = e; e.prevZ = tail; tail = e; } p = q; } tail.nextZ = null; inSize *= 2; } while ( numMerges > 1 ); return list; } // z-order of a point given coords and inverse of the longer side of data bbox function zOrder( x, y, minX, minY, invSize ) { // coords are transformed into non-negative 15-bit integer range x = 32767 * ( x - minX ) * invSize; y = 32767 * ( y - minY ) * invSize; x = ( x | ( x << 8 ) ) & 0x00FF00FF; x = ( x | ( x << 4 ) ) & 0x0F0F0F0F; x = ( x | ( x << 2 ) ) & 0x33333333; x = ( x | ( x << 1 ) ) & 0x55555555; y = ( y | ( y << 8 ) ) & 0x00FF00FF; y = ( y | ( y << 4 ) ) & 0x0F0F0F0F; y = ( y | ( y << 2 ) ) & 0x33333333; y = ( y | ( y << 1 ) ) & 0x55555555; return x | ( y << 1 ); } // find the leftmost node of a polygon ring function getLeftmost( start ) { let p = start, leftmost = start; do { if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p; p = p.next; } while ( p !== start ); return leftmost; } // check if a point lies within a convex triangle function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) { return ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 && ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 && ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0; } // check if a diagonal between two polygon nodes is valid (lies in polygon interior) function isValidDiagonal( a, b ) { return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case } // signed area of a triangle function area( p, q, r ) { return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y ); } // check if two points are equal function equals( p1, p2 ) { return p1.x === p2.x && p1.y === p2.y; } // check if two segments intersect function intersects( p1, q1, p2, q2 ) { const o1 = sign( area( p1, q1, p2 ) ); const o2 = sign( area( p1, q1, q2 ) ); const o3 = sign( area( p2, q2, p1 ) ); const o4 = sign( area( p2, q2, q1 ) ); if ( o1 !== o2 && o3 !== o4 ) return true; // general case if ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 if ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 if ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 if ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 return false; } // for collinear points p, q, r, check if point q lies on segment pr function onSegment( p, q, r ) { return q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y ); } function sign( num ) { return num > 0 ? 1 : num < 0 ? - 1 : 0; } // check if a polygon diagonal intersects any polygon segments function intersectsPolygon( a, b ) { let p = a; do { if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && intersects( p, p.next, a, b ) ) return true; p = p.next; } while ( p !== a ); return false; } // check if a polygon diagonal is locally inside the polygon function locallyInside( a, b ) { return area( a.prev, a, a.next ) < 0 ? area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 : area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0; } // check if the middle point of a polygon diagonal is inside the polygon function middleInside( a, b ) { let p = a, inside = false; const px = ( a.x + b.x ) / 2, py = ( a.y + b.y ) / 2; do { if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y && ( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) inside = ! inside; p = p.next; } while ( p !== a ); return inside; } // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; // if one belongs to the outer ring and another to a hole, it merges it into a single ring function splitPolygon( a, b ) { const a2 = new Node( a.i, a.x, a.y ), b2 = new Node( b.i, b.x, b.y ), an = a.next, bp = b.prev; a.next = b; b.prev = a; a2.next = an; an.prev = a2; b2.next = a2; a2.prev = b2; bp.next = b2; b2.prev = bp; return b2; } // create a node and optionally link it with previous one (in a circular doubly linked list) function insertNode( i, x, y, last ) { const p = new Node( i, x, y ); if ( ! last ) { p.prev = p; p.next = p; } else { p.next = last.next; p.prev = last; last.next.prev = p; last.next = p; } return p; } function removeNode( p ) { p.next.prev = p.prev; p.prev.next = p.next; if ( p.prevZ ) p.prevZ.nextZ = p.nextZ; if ( p.nextZ ) p.nextZ.prevZ = p.prevZ; } function Node( i, x, y ) { // vertex index in coordinates array this.i = i; // vertex coordinates this.x = x; this.y = y; // previous and next vertex nodes in a polygon ring this.prev = null; this.next = null; // z-order curve value this.z = null; // previous and next nodes in z-order this.prevZ = null; this.nextZ = null; // indicates whether this is a steiner point this.steiner = false; } function signedArea( data, start, end, dim ) { let sum = 0; for ( let i = start, j = end - dim; i < end; i += dim ) { sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] ); j = i; } return sum; } const ShapeUtils = { // calculate area of the contour polygon area: function ( contour ) { const n = contour.length; let a = 0.0; for ( let p = n - 1, q = 0; q < n; p = q ++ ) { a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y; } return a * 0.5; }, isClockWise: function ( pts ) { return ShapeUtils.area( pts ) < 0; }, triangulateShape: function ( contour, holes ) { const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ] const holeIndices = []; // array of hole indices const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ] removeDupEndPts( contour ); addContour( vertices, contour ); // let holeIndex = contour.length; holes.forEach( removeDupEndPts ); for ( let i = 0; i < holes.length; i ++ ) { holeIndices.push( holeIndex ); holeIndex += holes[ i ].length; addContour( vertices, holes[ i ] ); } // const triangles = Earcut.triangulate( vertices, holeIndices ); // for ( let i = 0; i < triangles.length; i += 3 ) { faces.push( triangles.slice( i, i + 3 ) ); } return faces; } }; function removeDupEndPts( points ) { const l = points.length; if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) { points.pop(); } } function addContour( vertices, contour ) { for ( let i = 0; i < contour.length; i ++ ) { vertices.push( contour[ i ].x ); vertices.push( contour[ i ].y ); } } /** * Creates extruded geometry from a path shape. * * parameters = { * * curveSegments: , // number of points on the curves * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too * depth: , // Depth to extrude the shape * * bevelEnabled: , // turn on bevel * bevelThickness: , // how deep into the original shape bevel goes * bevelSize: , // how far from shape outline (including bevelOffset) is bevel * bevelOffset: , // how far from shape outline does bevel start * bevelSegments: , // number of bevel layers * * extrudePath: // curve to extrude shape along * * UVGenerator: // object that provides UV generator functions * * } */ class ExtrudeBufferGeometry extends BufferGeometry { constructor( shapes, options ) { super(); this.type = 'ExtrudeBufferGeometry'; this.parameters = { shapes: shapes, options: options }; shapes = Array.isArray( shapes ) ? shapes : [ shapes ]; const scope = this; const verticesArray = []; const uvArray = []; for ( let i = 0, l = shapes.length; i < l; i ++ ) { const shape = shapes[ i ]; addShape( shape ); } // build geometry this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) ); this.computeVertexNormals(); // functions function addShape( shape ) { const placeholder = []; // options const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12; const steps = options.steps !== undefined ? options.steps : 1; let depth = options.depth !== undefined ? options.depth : 100; let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true; let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6; let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2; let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0; let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3; const extrudePath = options.extrudePath; const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator; // deprecated options if ( options.amount !== undefined ) { console.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' ); depth = options.amount; } // let extrudePts, extrudeByPath = false; let splineTube, binormal, normal, position2; if ( extrudePath ) { extrudePts = extrudePath.getSpacedPoints( steps ); extrudeByPath = true; bevelEnabled = false; // bevels not supported for path extrusion // SETUP TNB variables // TODO1 - have a .isClosed in spline? splineTube = extrudePath.computeFrenetFrames( steps, false ); // console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length); binormal = new Vector3(); normal = new Vector3(); position2 = new Vector3(); } // Safeguards if bevels are not enabled if ( ! bevelEnabled ) { bevelSegments = 0; bevelThickness = 0; bevelSize = 0; bevelOffset = 0; } // Variables initialization const shapePoints = shape.extractPoints( curveSegments ); let vertices = shapePoints.shape; const holes = shapePoints.holes; const reverse = ! ShapeUtils.isClockWise( vertices ); if ( reverse ) { vertices = vertices.reverse(); // Maybe we should also check if holes are in the opposite direction, just to be safe ... for ( let h = 0, hl = holes.length; h < hl; h ++ ) { const ahole = holes[ h ]; if ( ShapeUtils.isClockWise( ahole ) ) { holes[ h ] = ahole.reverse(); } } } const faces = ShapeUtils.triangulateShape( vertices, holes ); /* Vertices */ const contour = vertices; // vertices has all points but contour has only points of circumference for ( let h = 0, hl = holes.length; h < hl; h ++ ) { const ahole = holes[ h ]; vertices = vertices.concat( ahole ); } function scalePt2( pt, vec, size ) { if ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' ); return vec.clone().multiplyScalar( size ).add( pt ); } const vlen = vertices.length, flen = faces.length; // Find directions for point movement function getBevelVec( inPt, inPrev, inNext ) { // computes for inPt the corresponding point inPt' on a new contour // shifted by 1 unit (length of normalized vector) to the left // if we walk along contour clockwise, this new contour is outside the old one // // inPt' is the intersection of the two lines parallel to the two // adjacent edges of inPt at a distance of 1 unit on the left side. let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt // good reading for geometry algorithms (here: line-line intersection) // http://geomalgorithms.com/a05-_intersect-1.html const v_prev_x = inPt.x - inPrev.x, v_prev_y = inPt.y - inPrev.y; const v_next_x = inNext.x - inPt.x, v_next_y = inNext.y - inPt.y; const v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y ); // check for collinear edges const collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x ); if ( Math.abs( collinear0 ) > Number.EPSILON ) { // not collinear // length of vectors for normalizing const v_prev_len = Math.sqrt( v_prev_lensq ); const v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y ); // shift adjacent points by unit vectors to the left const ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len ); const ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len ); const ptNextShift_x = ( inNext.x - v_next_y / v_next_len ); const ptNextShift_y = ( inNext.y + v_next_x / v_next_len ); // scaling factor for v_prev to intersection point const sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y - ( ptNextShift_y - ptPrevShift_y ) * v_next_x ) / ( v_prev_x * v_next_y - v_prev_y * v_next_x ); // vector from inPt to intersection point v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x ); v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y ); // Don't normalize!, otherwise sharp corners become ugly // but prevent crazy spikes const v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y ); if ( v_trans_lensq <= 2 ) { return new Vector2( v_trans_x, v_trans_y ); } else { shrink_by = Math.sqrt( v_trans_lensq / 2 ); } } else { // handle special case of collinear edges let direction_eq = false; // assumes: opposite if ( v_prev_x > Number.EPSILON ) { if ( v_next_x > Number.EPSILON ) { direction_eq = true; } } else { if ( v_prev_x < - Number.EPSILON ) { if ( v_next_x < - Number.EPSILON ) { direction_eq = true; } } else { if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) { direction_eq = true; } } } if ( direction_eq ) { // console.log("Warning: lines are a straight sequence"); v_trans_x = - v_prev_y; v_trans_y = v_prev_x; shrink_by = Math.sqrt( v_prev_lensq ); } else { // console.log("Warning: lines are a straight spike"); v_trans_x = v_prev_x; v_trans_y = v_prev_y; shrink_by = Math.sqrt( v_prev_lensq / 2 ); } } return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by ); } const contourMovements = []; for ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { if ( j === il ) j = 0; if ( k === il ) k = 0; // (j)---(i)---(k) // console.log('i,j,k', i, j , k) contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] ); } const holesMovements = []; let oneHoleMovements, verticesMovements = contourMovements.concat(); for ( let h = 0, hl = holes.length; h < hl; h ++ ) { const ahole = holes[ h ]; oneHoleMovements = []; for ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) { if ( j === il ) j = 0; if ( k === il ) k = 0; // (j)---(i)---(k) oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] ); } holesMovements.push( oneHoleMovements ); verticesMovements = verticesMovements.concat( oneHoleMovements ); } // Loop bevelSegments, 1 for the front, 1 for the back for ( let b = 0; b < bevelSegments; b ++ ) { //for ( b = bevelSegments; b > 0; b -- ) { const t = b / bevelSegments; const z = bevelThickness * Math.cos( t * Math.PI / 2 ); const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; // contract shape for ( let i = 0, il = contour.length; i < il; i ++ ) { const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); v( vert.x, vert.y, - z ); } // expand holes for ( let h = 0, hl = holes.length; h < hl; h ++ ) { const ahole = holes[ h ]; oneHoleMovements = holesMovements[ h ]; for ( let i = 0, il = ahole.length; i < il; i ++ ) { const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); v( vert.x, vert.y, - z ); } } } const bs = bevelSize + bevelOffset; // Back facing vertices for ( let i = 0; i < vlen; i ++ ) { const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; if ( ! extrudeByPath ) { v( vert.x, vert.y, 0 ); } else { // v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x ); normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x ); binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y ); position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal ); v( position2.x, position2.y, position2.z ); } } // Add stepped vertices... // Including front facing vertices for ( let s = 1; s <= steps; s ++ ) { for ( let i = 0; i < vlen; i ++ ) { const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ]; if ( ! extrudeByPath ) { v( vert.x, vert.y, depth / steps * s ); } else { // v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x ); normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x ); binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y ); position2.copy( extrudePts[ s ] ).add( normal ).add( binormal ); v( position2.x, position2.y, position2.z ); } } } // Add bevel segments planes //for ( b = 1; b <= bevelSegments; b ++ ) { for ( let b = bevelSegments - 1; b >= 0; b -- ) { const t = b / bevelSegments; const z = bevelThickness * Math.cos( t * Math.PI / 2 ); const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset; // contract shape for ( let i = 0, il = contour.length; i < il; i ++ ) { const vert = scalePt2( contour[ i ], contourMovements[ i ], bs ); v( vert.x, vert.y, depth + z ); } // expand holes for ( let h = 0, hl = holes.length; h < hl; h ++ ) { const ahole = holes[ h ]; oneHoleMovements = holesMovements[ h ]; for ( let i = 0, il = ahole.length; i < il; i ++ ) { const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs ); if ( ! extrudeByPath ) { v( vert.x, vert.y, depth + z ); } else { v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z ); } } } } /* Faces */ // Top and bottom faces buildLidFaces(); // Sides faces buildSideFaces(); ///// Internal functions function buildLidFaces() { const start = verticesArray.length / 3; if ( bevelEnabled ) { let layer = 0; // steps + 1 let offset = vlen * layer; // Bottom faces for ( let i = 0; i < flen; i ++ ) { const face = faces[ i ]; f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset ); } layer = steps + bevelSegments * 2; offset = vlen * layer; // Top faces for ( let i = 0; i < flen; i ++ ) { const face = faces[ i ]; f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset ); } } else { // Bottom faces for ( let i = 0; i < flen; i ++ ) { const face = faces[ i ]; f3( face[ 2 ], face[ 1 ], face[ 0 ] ); } // Top faces for ( let i = 0; i < flen; i ++ ) { const face = faces[ i ]; f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps ); } } scope.addGroup( start, verticesArray.length / 3 - start, 0 ); } // Create faces for the z-sides of the shape function buildSideFaces() { const start = verticesArray.length / 3; let layeroffset = 0; sidewalls( contour, layeroffset ); layeroffset += contour.length; for ( let h = 0, hl = holes.length; h < hl; h ++ ) { const ahole = holes[ h ]; sidewalls( ahole, layeroffset ); //, true layeroffset += ahole.length; } scope.addGroup( start, verticesArray.length / 3 - start, 1 ); } function sidewalls( contour, layeroffset ) { let i = contour.length; while ( -- i >= 0 ) { const j = i; let k = i - 1; if ( k < 0 ) k = contour.length - 1; //console.log('b', i,j, i-1, k,vertices.length); for ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) { const slen1 = vlen * s; const slen2 = vlen * ( s + 1 ); const a = layeroffset + j + slen1, b = layeroffset + k + slen1, c = layeroffset + k + slen2, d = layeroffset + j + slen2; f4( a, b, c, d ); } } } function v( x, y, z ) { placeholder.push( x ); placeholder.push( y ); placeholder.push( z ); } function f3( a, b, c ) { addVertex( a ); addVertex( b ); addVertex( c ); const nextIndex = verticesArray.length / 3; const uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); addUV( uvs[ 0 ] ); addUV( uvs[ 1 ] ); addUV( uvs[ 2 ] ); } function f4( a, b, c, d ) { addVertex( a ); addVertex( b ); addVertex( d ); addVertex( b ); addVertex( c ); addVertex( d ); const nextIndex = verticesArray.length / 3; const uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 ); addUV( uvs[ 0 ] ); addUV( uvs[ 1 ] ); addUV( uvs[ 3 ] ); addUV( uvs[ 1 ] ); addUV( uvs[ 2 ] ); addUV( uvs[ 3 ] ); } function addVertex( index ) { verticesArray.push( placeholder[ index * 3 + 0 ] ); verticesArray.push( placeholder[ index * 3 + 1 ] ); verticesArray.push( placeholder[ index * 3 + 2 ] ); } function addUV( vector2 ) { uvArray.push( vector2.x ); uvArray.push( vector2.y ); } } } toJSON() { const data = BufferGeometry.prototype.toJSON.call( this ); const shapes = this.parameters.shapes; const options = this.parameters.options; return toJSON( shapes, options, data ); } } const WorldUVGenerator = { generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) { const a_x = vertices[ indexA * 3 ]; const a_y = vertices[ indexA * 3 + 1 ]; const b_x = vertices[ indexB * 3 ]; const b_y = vertices[ indexB * 3 + 1 ]; const c_x = vertices[ indexC * 3 ]; const c_y = vertices[ indexC * 3 + 1 ]; return [ new Vector2( a_x, a_y ), new Vector2( b_x, b_y ), new Vector2( c_x, c_y ) ]; }, generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) { const a_x = vertices[ indexA * 3 ]; const a_y = vertices[ indexA * 3 + 1 ]; const a_z = vertices[ indexA * 3 + 2 ]; const b_x = vertices[ indexB * 3 ]; const b_y = vertices[ indexB * 3 + 1 ]; const b_z = vertices[ indexB * 3 + 2 ]; const c_x = vertices[ indexC * 3 ]; const c_y = vertices[ indexC * 3 + 1 ]; const c_z = vertices[ indexC * 3 + 2 ]; const d_x = vertices[ indexD * 3 ]; const d_y = vertices[ indexD * 3 + 1 ]; const d_z = vertices[ indexD * 3 + 2 ]; if ( Math.abs( a_y - b_y ) < 0.01 ) { return [ new Vector2( a_x, 1 - a_z ), new Vector2( b_x, 1 - b_z ), new Vector2( c_x, 1 - c_z ), new Vector2( d_x, 1 - d_z ) ]; } else { return [ new Vector2( a_y, 1 - a_z ), new Vector2( b_y, 1 - b_z ), new Vector2( c_y, 1 - c_z ), new Vector2( d_y, 1 - d_z ) ]; } } }; function toJSON( shapes, options, data ) { data.shapes = []; if ( Array.isArray( shapes ) ) { for ( let i = 0, l = shapes.length; i < l; i ++ ) { const shape = shapes[ i ]; data.shapes.push( shape.uuid ); } } else { data.shapes.push( shapes.uuid ); } if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); return data; } /** * Creates extruded geometry from a path shape. * * parameters = { * * curveSegments: , // number of points on the curves * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too * depth: , // Depth to extrude the shape * * bevelEnabled: , // turn on bevel * bevelThickness: , // how deep into the original shape bevel goes * bevelSize: , // how far from shape outline (including bevelOffset) is bevel * bevelOffset: , // how far from shape outline does bevel start * bevelSegments: , // number of bevel layers * * extrudePath: // curve to extrude shape along * * UVGenerator: // object that provides UV generator functions * * } */ class ExtrudeGeometry extends Geometry { constructor( shapes, options ) { super(); this.type = 'ExtrudeGeometry'; this.parameters = { shapes: shapes, options: options }; this.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) ); this.mergeVertices(); } toJSON() { const data = super.toJSON(); const shapes = this.parameters.shapes; const options = this.parameters.options; return toJSON$1( shapes, options, data ); } } function toJSON$1( shapes, options, data ) { data.shapes = []; if ( Array.isArray( shapes ) ) { for ( let i = 0, l = shapes.length; i < l; i ++ ) { const shape = shapes[ i ]; data.shapes.push( shape.uuid ); } } else { data.shapes.push( shapes.uuid ); } if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON(); return data; } class IcosahedronBufferGeometry extends PolyhedronBufferGeometry { constructor( radius = 1, detail = 0 ) { const t = ( 1 + Math.sqrt( 5 ) ) / 2; const vertices = [ - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, 0, 0, - 1, t, 0, 1, t, 0, - 1, - t, 0, 1, - t, t, 0, - 1, t, 0, 1, - t, 0, - 1, - t, 0, 1 ]; const indices = [ 0, 11, 5, 0, 5, 1, 0, 1, 7, 0, 7, 10, 0, 10, 11, 1, 5, 9, 5, 11, 4, 11, 10, 2, 10, 7, 6, 7, 1, 8, 3, 9, 4, 3, 4, 2, 3, 2, 6, 3, 6, 8, 3, 8, 9, 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 ]; super( vertices, indices, radius, detail ); this.type = 'IcosahedronBufferGeometry'; this.parameters = { radius: radius, detail: detail }; } } class IcosahedronGeometry extends Geometry { constructor( radius, detail ) { super(); this.type = 'IcosahedronGeometry'; this.parameters = { radius: radius, detail: detail }; this.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) ); this.mergeVertices(); } } class LatheBufferGeometry extends BufferGeometry { constructor( points, segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) { super(); this.type = 'LatheBufferGeometry'; this.parameters = { points: points, segments: segments, phiStart: phiStart, phiLength: phiLength }; segments = Math.floor( segments ); // clamp phiLength so it's in range of [ 0, 2PI ] phiLength = MathUtils.clamp( phiLength, 0, Math.PI * 2 ); // buffers const indices = []; const vertices = []; const uvs = []; // helper variables const inverseSegments = 1.0 / segments; const vertex = new Vector3(); const uv = new Vector2(); // generate vertices and uvs for ( let i = 0; i <= segments; i ++ ) { const phi = phiStart + i * inverseSegments * phiLength; const sin = Math.sin( phi ); const cos = Math.cos( phi ); for ( let j = 0; j <= ( points.length - 1 ); j ++ ) { // vertex vertex.x = points[ j ].x * sin; vertex.y = points[ j ].y; vertex.z = points[ j ].x * cos; vertices.push( vertex.x, vertex.y, vertex.z ); // uv uv.x = i / segments; uv.y = j / ( points.length - 1 ); uvs.push( uv.x, uv.y ); } } // indices for ( let i = 0; i < segments; i ++ ) { for ( let j = 0; j < ( points.length - 1 ); j ++ ) { const base = j + i * points.length; const a = base; const b = base + points.length; const c = base + points.length + 1; const d = base + 1; // faces indices.push( a, b, d ); indices.push( b, c, d ); } } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); // generate normals this.computeVertexNormals(); // if the geometry is closed, we need to average the normals along the seam. // because the corresponding vertices are identical (but still have different UVs). if ( phiLength === Math.PI * 2 ) { const normals = this.attributes.normal.array; const n1 = new Vector3(); const n2 = new Vector3(); const n = new Vector3(); // this is the buffer offset for the last line of vertices const base = segments * points.length * 3; for ( let i = 0, j = 0; i < points.length; i ++, j += 3 ) { // select the normal of the vertex in the first line n1.x = normals[ j + 0 ]; n1.y = normals[ j + 1 ]; n1.z = normals[ j + 2 ]; // select the normal of the vertex in the last line n2.x = normals[ base + j + 0 ]; n2.y = normals[ base + j + 1 ]; n2.z = normals[ base + j + 2 ]; // average normals n.addVectors( n1, n2 ).normalize(); // assign the new values to both normals normals[ j + 0 ] = normals[ base + j + 0 ] = n.x; normals[ j + 1 ] = normals[ base + j + 1 ] = n.y; normals[ j + 2 ] = normals[ base + j + 2 ] = n.z; } } } } class LatheGeometry extends Geometry { constructor( points, segments, phiStart, phiLength ) { super(); this.type = 'LatheGeometry'; this.parameters = { points: points, segments: segments, phiStart: phiStart, phiLength: phiLength }; this.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) ); this.mergeVertices(); } } class OctahedronBufferGeometry extends PolyhedronBufferGeometry { constructor( radius = 1, detail = 0 ) { const vertices = [ 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1, 0, 0, 0, 1, 0, 0, - 1 ]; const indices = [ 0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2 ]; super( vertices, indices, radius, detail ); this.type = 'OctahedronBufferGeometry'; this.parameters = { radius: radius, detail: detail }; } } class OctahedronGeometry extends Geometry { constructor( radius, detail ) { super(); this.type = 'OctahedronGeometry'; this.parameters = { radius: radius, detail: detail }; this.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) ); this.mergeVertices(); } } /** * Parametric Surfaces Geometry * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html */ function ParametricBufferGeometry( func, slices, stacks ) { BufferGeometry.call( this ); this.type = 'ParametricBufferGeometry'; this.parameters = { func: func, slices: slices, stacks: stacks }; // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; const EPS = 0.00001; const normal = new Vector3(); const p0 = new Vector3(), p1 = new Vector3(); const pu = new Vector3(), pv = new Vector3(); if ( func.length < 3 ) { console.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' ); } // generate vertices, normals and uvs const sliceCount = slices + 1; for ( let i = 0; i <= stacks; i ++ ) { const v = i / stacks; for ( let j = 0; j <= slices; j ++ ) { const u = j / slices; // vertex func( u, v, p0 ); vertices.push( p0.x, p0.y, p0.z ); // normal // approximate tangent vectors via finite differences if ( u - EPS >= 0 ) { func( u - EPS, v, p1 ); pu.subVectors( p0, p1 ); } else { func( u + EPS, v, p1 ); pu.subVectors( p1, p0 ); } if ( v - EPS >= 0 ) { func( u, v - EPS, p1 ); pv.subVectors( p0, p1 ); } else { func( u, v + EPS, p1 ); pv.subVectors( p1, p0 ); } // cross product of tangent vectors returns surface normal normal.crossVectors( pu, pv ).normalize(); normals.push( normal.x, normal.y, normal.z ); // uv uvs.push( u, v ); } } // generate indices for ( let i = 0; i < stacks; i ++ ) { for ( let j = 0; j < slices; j ++ ) { const a = i * sliceCount + j; const b = i * sliceCount + j + 1; const c = ( i + 1 ) * sliceCount + j + 1; const d = ( i + 1 ) * sliceCount + j; // faces one and two indices.push( a, b, d ); indices.push( b, c, d ); } } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); } ParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype ); ParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry; /** * Parametric Surfaces Geometry * based on the brilliant article by @prideout https://prideout.net/blog/old/blog/index.html@p=44.html */ function ParametricGeometry( func, slices, stacks ) { Geometry.call( this ); this.type = 'ParametricGeometry'; this.parameters = { func: func, slices: slices, stacks: stacks }; this.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) ); this.mergeVertices(); } ParametricGeometry.prototype = Object.create( Geometry.prototype ); ParametricGeometry.prototype.constructor = ParametricGeometry; class PlaneGeometry extends Geometry { constructor( width, height, widthSegments, heightSegments ) { super(); this.type = 'PlaneGeometry'; this.parameters = { width: width, height: height, widthSegments: widthSegments, heightSegments: heightSegments }; this.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) ); this.mergeVertices(); } } class PolyhedronGeometry extends Geometry { constructor( vertices, indices, radius, detail ) { super(); this.type = 'PolyhedronGeometry'; this.parameters = { vertices: vertices, indices: indices, radius: radius, detail: detail }; this.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) ); this.mergeVertices(); } } class RingBufferGeometry extends BufferGeometry { constructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 8, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) { super(); this.type = 'RingBufferGeometry'; this.parameters = { innerRadius: innerRadius, outerRadius: outerRadius, thetaSegments: thetaSegments, phiSegments: phiSegments, thetaStart: thetaStart, thetaLength: thetaLength }; thetaSegments = Math.max( 3, thetaSegments ); phiSegments = Math.max( 1, phiSegments ); // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // some helper variables let radius = innerRadius; const radiusStep = ( ( outerRadius - innerRadius ) / phiSegments ); const vertex = new Vector3(); const uv = new Vector2(); // generate vertices, normals and uvs for ( let j = 0; j <= phiSegments; j ++ ) { for ( let i = 0; i <= thetaSegments; i ++ ) { // values are generate from the inside of the ring to the outside const segment = thetaStart + i / thetaSegments * thetaLength; // vertex vertex.x = radius * Math.cos( segment ); vertex.y = radius * Math.sin( segment ); vertices.push( vertex.x, vertex.y, vertex.z ); // normal normals.push( 0, 0, 1 ); // uv uv.x = ( vertex.x / outerRadius + 1 ) / 2; uv.y = ( vertex.y / outerRadius + 1 ) / 2; uvs.push( uv.x, uv.y ); } // increase the radius for next row of vertices radius += radiusStep; } // indices for ( let j = 0; j < phiSegments; j ++ ) { const thetaSegmentLevel = j * ( thetaSegments + 1 ); for ( let i = 0; i < thetaSegments; i ++ ) { const segment = i + thetaSegmentLevel; const a = segment; const b = segment + thetaSegments + 1; const c = segment + thetaSegments + 2; const d = segment + 1; // faces indices.push( a, b, d ); indices.push( b, c, d ); } } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); } } class RingGeometry extends Geometry { constructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) { super(); this.type = 'RingGeometry'; this.parameters = { innerRadius: innerRadius, outerRadius: outerRadius, thetaSegments: thetaSegments, phiSegments: phiSegments, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) ); this.mergeVertices(); } } class ShapeBufferGeometry extends BufferGeometry { constructor( shapes, curveSegments = 12 ) { super(); this.type = 'ShapeBufferGeometry'; this.parameters = { shapes: shapes, curveSegments: curveSegments }; // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // helper variables let groupStart = 0; let groupCount = 0; // allow single and array values for "shapes" parameter if ( Array.isArray( shapes ) === false ) { addShape( shapes ); } else { for ( let i = 0; i < shapes.length; i ++ ) { addShape( shapes[ i ] ); this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support groupStart += groupCount; groupCount = 0; } } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); // helper functions function addShape( shape ) { const indexOffset = vertices.length / 3; const points = shape.extractPoints( curveSegments ); let shapeVertices = points.shape; const shapeHoles = points.holes; // check direction of vertices if ( ShapeUtils.isClockWise( shapeVertices ) === false ) { shapeVertices = shapeVertices.reverse(); } for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { const shapeHole = shapeHoles[ i ]; if ( ShapeUtils.isClockWise( shapeHole ) === true ) { shapeHoles[ i ] = shapeHole.reverse(); } } const faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles ); // join vertices of inner and outer paths to a single array for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) { const shapeHole = shapeHoles[ i ]; shapeVertices = shapeVertices.concat( shapeHole ); } // vertices, normals, uvs for ( let i = 0, l = shapeVertices.length; i < l; i ++ ) { const vertex = shapeVertices[ i ]; vertices.push( vertex.x, vertex.y, 0 ); normals.push( 0, 0, 1 ); uvs.push( vertex.x, vertex.y ); // world uvs } // incides for ( let i = 0, l = faces.length; i < l; i ++ ) { const face = faces[ i ]; const a = face[ 0 ] + indexOffset; const b = face[ 1 ] + indexOffset; const c = face[ 2 ] + indexOffset; indices.push( a, b, c ); groupCount += 3; } } } toJSON() { const data = BufferGeometry.prototype.toJSON.call( this ); const shapes = this.parameters.shapes; return toJSON$2( shapes, data ); } } function toJSON$2( shapes, data ) { data.shapes = []; if ( Array.isArray( shapes ) ) { for ( let i = 0, l = shapes.length; i < l; i ++ ) { const shape = shapes[ i ]; data.shapes.push( shape.uuid ); } } else { data.shapes.push( shapes.uuid ); } return data; } class ShapeGeometry extends Geometry { constructor( shapes, curveSegments ) { super(); this.type = 'ShapeGeometry'; if ( typeof curveSegments === 'object' ) { console.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' ); curveSegments = curveSegments.curveSegments; } this.parameters = { shapes: shapes, curveSegments: curveSegments }; this.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) ); this.mergeVertices(); } toJSON() { const data = Geometry.prototype.toJSON.call( this ); const shapes = this.parameters.shapes; return toJSON$3( shapes, data ); } } function toJSON$3( shapes, data ) { data.shapes = []; if ( Array.isArray( shapes ) ) { for ( let i = 0, l = shapes.length; i < l; i ++ ) { const shape = shapes[ i ]; data.shapes.push( shape.uuid ); } } else { data.shapes.push( shapes.uuid ); } return data; } class SphereBufferGeometry extends BufferGeometry { constructor( radius = 1, widthSegments = 8, heightSegments = 6, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) { super(); this.type = 'SphereBufferGeometry'; this.parameters = { radius: radius, widthSegments: widthSegments, heightSegments: heightSegments, phiStart: phiStart, phiLength: phiLength, thetaStart: thetaStart, thetaLength: thetaLength }; widthSegments = Math.max( 3, Math.floor( widthSegments ) ); heightSegments = Math.max( 2, Math.floor( heightSegments ) ); const thetaEnd = Math.min( thetaStart + thetaLength, Math.PI ); let index = 0; const grid = []; const vertex = new Vector3(); const normal = new Vector3(); // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // generate vertices, normals and uvs for ( let iy = 0; iy <= heightSegments; iy ++ ) { const verticesRow = []; const v = iy / heightSegments; // special case for the poles let uOffset = 0; if ( iy == 0 && thetaStart == 0 ) { uOffset = 0.5 / widthSegments; } else if ( iy == heightSegments && thetaEnd == Math.PI ) { uOffset = - 0.5 / widthSegments; } for ( let ix = 0; ix <= widthSegments; ix ++ ) { const u = ix / widthSegments; // vertex vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); vertex.y = radius * Math.cos( thetaStart + v * thetaLength ); vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength ); vertices.push( vertex.x, vertex.y, vertex.z ); // normal normal.copy( vertex ).normalize(); normals.push( normal.x, normal.y, normal.z ); // uv uvs.push( u + uOffset, 1 - v ); verticesRow.push( index ++ ); } grid.push( verticesRow ); } // indices for ( let iy = 0; iy < heightSegments; iy ++ ) { for ( let ix = 0; ix < widthSegments; ix ++ ) { const a = grid[ iy ][ ix + 1 ]; const b = grid[ iy ][ ix ]; const c = grid[ iy + 1 ][ ix ]; const d = grid[ iy + 1 ][ ix + 1 ]; if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d ); if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d ); } } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); } } class SphereGeometry extends Geometry { constructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) { super(); this.type = 'SphereGeometry'; this.parameters = { radius: radius, widthSegments: widthSegments, heightSegments: heightSegments, phiStart: phiStart, phiLength: phiLength, thetaStart: thetaStart, thetaLength: thetaLength }; this.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) ); this.mergeVertices(); } } class TetrahedronBufferGeometry extends PolyhedronBufferGeometry { constructor( radius = 1, detail = 0 ) { const vertices = [ 1, 1, 1, - 1, - 1, 1, - 1, 1, - 1, 1, - 1, - 1 ]; const indices = [ 2, 1, 0, 0, 3, 2, 1, 3, 0, 2, 3, 1 ]; super( vertices, indices, radius, detail ); this.type = 'TetrahedronBufferGeometry'; this.parameters = { radius: radius, detail: detail }; } } class TetrahedronGeometry extends Geometry { constructor( radius, detail ) { super(); this.type = 'TetrahedronGeometry'; this.parameters = { radius: radius, detail: detail }; this.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) ); this.mergeVertices(); } } /** * Text = 3D Text * * parameters = { * font: , // font * * size: , // size of the text * height: , // thickness to extrude text * curveSegments: , // number of points on the curves * * bevelEnabled: , // turn on bevel * bevelThickness: , // how deep into text bevel goes * bevelSize: , // how far from text outline (including bevelOffset) is bevel * bevelOffset: // how far from text outline does bevel start * } */ class TextBufferGeometry extends ExtrudeBufferGeometry { constructor( text, parameters = {} ) { const font = parameters.font; if ( ! ( font && font.isFont ) ) { console.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' ); return new BufferGeometry(); } const shapes = font.generateShapes( text, parameters.size ); // translate parameters to ExtrudeGeometry API parameters.depth = parameters.height !== undefined ? parameters.height : 50; // defaults if ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10; if ( parameters.bevelSize === undefined ) parameters.bevelSize = 8; if ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false; super( shapes, parameters ); this.type = 'TextBufferGeometry'; } } /** * Text = 3D Text * * parameters = { * font: , // font * * size: , // size of the text * height: , // thickness to extrude text * curveSegments: , // number of points on the curves * * bevelEnabled: , // turn on bevel * bevelThickness: , // how deep into text bevel goes * bevelSize: , // how far from text outline (including bevelOffset) is bevel * bevelOffset: // how far from text outline does bevel start * } */ class TextGeometry extends Geometry { constructor( text, parameters ) { super(); this.type = 'TextGeometry'; this.parameters = { text: text, parameters: parameters }; this.fromBufferGeometry( new TextBufferGeometry( text, parameters ) ); this.mergeVertices(); } } class TorusBufferGeometry extends BufferGeometry { constructor( radius = 1, tube = 0.4, radialSegments = 8, tubularSegments = 6, arc = Math.PI * 2 ) { super(); this.type = 'TorusBufferGeometry'; this.parameters = { radius: radius, tube: tube, radialSegments: radialSegments, tubularSegments: tubularSegments, arc: arc }; radialSegments = Math.floor( radialSegments ); tubularSegments = Math.floor( tubularSegments ); // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // helper variables const center = new Vector3(); const vertex = new Vector3(); const normal = new Vector3(); // generate vertices, normals and uvs for ( let j = 0; j <= radialSegments; j ++ ) { for ( let i = 0; i <= tubularSegments; i ++ ) { const u = i / tubularSegments * arc; const v = j / radialSegments * Math.PI * 2; // vertex vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u ); vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u ); vertex.z = tube * Math.sin( v ); vertices.push( vertex.x, vertex.y, vertex.z ); // normal center.x = radius * Math.cos( u ); center.y = radius * Math.sin( u ); normal.subVectors( vertex, center ).normalize(); normals.push( normal.x, normal.y, normal.z ); // uv uvs.push( i / tubularSegments ); uvs.push( j / radialSegments ); } } // generate indices for ( let j = 1; j <= radialSegments; j ++ ) { for ( let i = 1; i <= tubularSegments; i ++ ) { // indices const a = ( tubularSegments + 1 ) * j + i - 1; const b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1; const c = ( tubularSegments + 1 ) * ( j - 1 ) + i; const d = ( tubularSegments + 1 ) * j + i; // faces indices.push( a, b, d ); indices.push( b, c, d ); } } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); } } class TorusGeometry extends Geometry { constructor( radius, tube, radialSegments, tubularSegments, arc ) { super(); this.type = 'TorusGeometry'; this.parameters = { radius: radius, tube: tube, radialSegments: radialSegments, tubularSegments: tubularSegments, arc: arc }; this.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) ); this.mergeVertices(); } } class TorusKnotBufferGeometry extends BufferGeometry { constructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) { super(); this.type = 'TorusKnotBufferGeometry'; this.parameters = { radius: radius, tube: tube, tubularSegments: tubularSegments, radialSegments: radialSegments, p: p, q: q }; tubularSegments = Math.floor( tubularSegments ); radialSegments = Math.floor( radialSegments ); // buffers const indices = []; const vertices = []; const normals = []; const uvs = []; // helper variables const vertex = new Vector3(); const normal = new Vector3(); const P1 = new Vector3(); const P2 = new Vector3(); const B = new Vector3(); const T = new Vector3(); const N = new Vector3(); // generate vertices, normals and uvs for ( let i = 0; i <= tubularSegments; ++ i ) { // the radian "u" is used to calculate the position on the torus curve of the current tubular segement const u = i / tubularSegments * p * Math.PI * 2; // now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead. // these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions calculatePositionOnCurve( u, p, q, radius, P1 ); calculatePositionOnCurve( u + 0.01, p, q, radius, P2 ); // calculate orthonormal basis T.subVectors( P2, P1 ); N.addVectors( P2, P1 ); B.crossVectors( T, N ); N.crossVectors( B, T ); // normalize B, N. T can be ignored, we don't use it B.normalize(); N.normalize(); for ( let j = 0; j <= radialSegments; ++ j ) { // now calculate the vertices. they are nothing more than an extrusion of the torus curve. // because we extrude a shape in the xy-plane, there is no need to calculate a z-value. const v = j / radialSegments * Math.PI * 2; const cx = - tube * Math.cos( v ); const cy = tube * Math.sin( v ); // now calculate the final vertex position. // first we orient the extrusion with our basis vectos, then we add it to the current position on the curve vertex.x = P1.x + ( cx * N.x + cy * B.x ); vertex.y = P1.y + ( cx * N.y + cy * B.y ); vertex.z = P1.z + ( cx * N.z + cy * B.z ); vertices.push( vertex.x, vertex.y, vertex.z ); // normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal) normal.subVectors( vertex, P1 ).normalize(); normals.push( normal.x, normal.y, normal.z ); // uv uvs.push( i / tubularSegments ); uvs.push( j / radialSegments ); } } // generate indices for ( let j = 1; j <= tubularSegments; j ++ ) { for ( let i = 1; i <= radialSegments; i ++ ) { // indices const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); const b = ( radialSegments + 1 ) * j + ( i - 1 ); const c = ( radialSegments + 1 ) * j + i; const d = ( radialSegments + 1 ) * ( j - 1 ) + i; // faces indices.push( a, b, d ); indices.push( b, c, d ); } } // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); // this function calculates the current position on the torus curve function calculatePositionOnCurve( u, p, q, radius, position ) { const cu = Math.cos( u ); const su = Math.sin( u ); const quOverP = q / p * u; const cs = Math.cos( quOverP ); position.x = radius * ( 2 + cs ) * 0.5 * cu; position.y = radius * ( 2 + cs ) * su * 0.5; position.z = radius * Math.sin( quOverP ) * 0.5; } } } class TorusKnotGeometry extends Geometry { constructor( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) { super(); this.type = 'TorusKnotGeometry'; this.parameters = { radius: radius, tube: tube, tubularSegments: tubularSegments, radialSegments: radialSegments, p: p, q: q }; if ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' ); this.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) ); this.mergeVertices(); } } class TubeBufferGeometry extends BufferGeometry { constructor( path, tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) { super(); this.type = 'TubeBufferGeometry'; this.parameters = { path: path, tubularSegments: tubularSegments, radius: radius, radialSegments: radialSegments, closed: closed }; const frames = path.computeFrenetFrames( tubularSegments, closed ); // expose internals this.tangents = frames.tangents; this.normals = frames.normals; this.binormals = frames.binormals; // helper variables const vertex = new Vector3(); const normal = new Vector3(); const uv = new Vector2(); let P = new Vector3(); // buffer const vertices = []; const normals = []; const uvs = []; const indices = []; // create buffer data generateBufferData(); // build geometry this.setIndex( indices ); this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); // functions function generateBufferData() { for ( let i = 0; i < tubularSegments; i ++ ) { generateSegment( i ); } // if the geometry is not closed, generate the last row of vertices and normals // at the regular position on the given path // // if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ) generateSegment( ( closed === false ) ? tubularSegments : 0 ); // uvs are generated in a separate function. // this makes it easy compute correct values for closed geometries generateUVs(); // finally create faces generateIndices(); } function generateSegment( i ) { // we use getPointAt to sample evenly distributed points from the given path P = path.getPointAt( i / tubularSegments, P ); // retrieve corresponding normal and binormal const N = frames.normals[ i ]; const B = frames.binormals[ i ]; // generate normals and vertices for the current segment for ( let j = 0; j <= radialSegments; j ++ ) { const v = j / radialSegments * Math.PI * 2; const sin = Math.sin( v ); const cos = - Math.cos( v ); // normal normal.x = ( cos * N.x + sin * B.x ); normal.y = ( cos * N.y + sin * B.y ); normal.z = ( cos * N.z + sin * B.z ); normal.normalize(); normals.push( normal.x, normal.y, normal.z ); // vertex vertex.x = P.x + radius * normal.x; vertex.y = P.y + radius * normal.y; vertex.z = P.z + radius * normal.z; vertices.push( vertex.x, vertex.y, vertex.z ); } } function generateIndices() { for ( let j = 1; j <= tubularSegments; j ++ ) { for ( let i = 1; i <= radialSegments; i ++ ) { const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 ); const b = ( radialSegments + 1 ) * j + ( i - 1 ); const c = ( radialSegments + 1 ) * j + i; const d = ( radialSegments + 1 ) * ( j - 1 ) + i; // faces indices.push( a, b, d ); indices.push( b, c, d ); } } } function generateUVs() { for ( let i = 0; i <= tubularSegments; i ++ ) { for ( let j = 0; j <= radialSegments; j ++ ) { uv.x = i / tubularSegments; uv.y = j / radialSegments; uvs.push( uv.x, uv.y ); } } } } toJSON() { const data = BufferGeometry.prototype.toJSON.call( this ); data.path = this.parameters.path.toJSON(); return data; } } class TubeGeometry extends Geometry { constructor( path, tubularSegments, radius, radialSegments, closed, taper ) { super(); this.type = 'TubeGeometry'; this.parameters = { path: path, tubularSegments: tubularSegments, radius: radius, radialSegments: radialSegments, closed: closed }; if ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' ); const bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ); // expose internals this.tangents = bufferGeometry.tangents; this.normals = bufferGeometry.normals; this.binormals = bufferGeometry.binormals; // create geometry this.fromBufferGeometry( bufferGeometry ); this.mergeVertices(); } } class WireframeGeometry extends BufferGeometry { constructor( geometry ) { super(); this.type = 'WireframeGeometry'; // buffer const vertices = []; // helper variables const edge = [ 0, 0 ], edges = {}; const keys = [ 'a', 'b', 'c' ]; // different logic for Geometry and BufferGeometry if ( geometry && geometry.isGeometry ) { // create a data structure that contains all edges without duplicates const faces = geometry.faces; for ( let i = 0, l = faces.length; i < l; i ++ ) { const face = faces[ i ]; for ( let j = 0; j < 3; j ++ ) { const edge1 = face[ keys[ j ] ]; const edge2 = face[ keys[ ( j + 1 ) % 3 ] ]; edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates edge[ 1 ] = Math.max( edge1, edge2 ); const key = edge[ 0 ] + ',' + edge[ 1 ]; if ( edges[ key ] === undefined ) { edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; } } } // generate vertices for ( const key in edges ) { const e = edges[ key ]; let vertex = geometry.vertices[ e.index1 ]; vertices.push( vertex.x, vertex.y, vertex.z ); vertex = geometry.vertices[ e.index2 ]; vertices.push( vertex.x, vertex.y, vertex.z ); } } else if ( geometry && geometry.isBufferGeometry ) { const vertex = new Vector3(); if ( geometry.index !== null ) { // indexed BufferGeometry const position = geometry.attributes.position; const indices = geometry.index; let groups = geometry.groups; if ( groups.length === 0 ) { groups = [ { start: 0, count: indices.count, materialIndex: 0 } ]; } // create a data structure that contains all eges without duplicates for ( let o = 0, ol = groups.length; o < ol; ++ o ) { const group = groups[ o ]; const start = group.start; const count = group.count; for ( let i = start, l = ( start + count ); i < l; i += 3 ) { for ( let j = 0; j < 3; j ++ ) { const edge1 = indices.getX( i + j ); const edge2 = indices.getX( i + ( j + 1 ) % 3 ); edge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates edge[ 1 ] = Math.max( edge1, edge2 ); const key = edge[ 0 ] + ',' + edge[ 1 ]; if ( edges[ key ] === undefined ) { edges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] }; } } } } // generate vertices for ( const key in edges ) { const e = edges[ key ]; vertex.fromBufferAttribute( position, e.index1 ); vertices.push( vertex.x, vertex.y, vertex.z ); vertex.fromBufferAttribute( position, e.index2 ); vertices.push( vertex.x, vertex.y, vertex.z ); } } else { // non-indexed BufferGeometry const position = geometry.attributes.position; for ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) { for ( let j = 0; j < 3; j ++ ) { // three edges per triangle, an edge is represented as (index1, index2) // e.g. the first triangle has the following edges: (0,1),(1,2),(2,0) const index1 = 3 * i + j; vertex.fromBufferAttribute( position, index1 ); vertices.push( vertex.x, vertex.y, vertex.z ); const index2 = 3 * i + ( ( j + 1 ) % 3 ); vertex.fromBufferAttribute( position, index2 ); vertices.push( vertex.x, vertex.y, vertex.z ); } } } } // build geometry this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); } } var Geometries = /*#__PURE__*/Object.freeze({ __proto__: null, BoxGeometry: BoxGeometry, BoxBufferGeometry: BoxBufferGeometry, CircleGeometry: CircleGeometry, CircleBufferGeometry: CircleBufferGeometry, ConeGeometry: ConeGeometry, ConeBufferGeometry: ConeBufferGeometry, CylinderGeometry: CylinderGeometry, CylinderBufferGeometry: CylinderBufferGeometry, DodecahedronGeometry: DodecahedronGeometry, DodecahedronBufferGeometry: DodecahedronBufferGeometry, EdgesGeometry: EdgesGeometry, ExtrudeGeometry: ExtrudeGeometry, ExtrudeBufferGeometry: ExtrudeBufferGeometry, IcosahedronGeometry: IcosahedronGeometry, IcosahedronBufferGeometry: IcosahedronBufferGeometry, LatheGeometry: LatheGeometry, LatheBufferGeometry: LatheBufferGeometry, OctahedronGeometry: OctahedronGeometry, OctahedronBufferGeometry: OctahedronBufferGeometry, ParametricGeometry: ParametricGeometry, ParametricBufferGeometry: ParametricBufferGeometry, PlaneGeometry: PlaneGeometry, PlaneBufferGeometry: PlaneBufferGeometry, PolyhedronGeometry: PolyhedronGeometry, PolyhedronBufferGeometry: PolyhedronBufferGeometry, RingGeometry: RingGeometry, RingBufferGeometry: RingBufferGeometry, ShapeGeometry: ShapeGeometry, ShapeBufferGeometry: ShapeBufferGeometry, SphereGeometry: SphereGeometry, SphereBufferGeometry: SphereBufferGeometry, TetrahedronGeometry: TetrahedronGeometry, TetrahedronBufferGeometry: TetrahedronBufferGeometry, TextGeometry: TextGeometry, TextBufferGeometry: TextBufferGeometry, TorusGeometry: TorusGeometry, TorusBufferGeometry: TorusBufferGeometry, TorusKnotGeometry: TorusKnotGeometry, TorusKnotBufferGeometry: TorusKnotBufferGeometry, TubeGeometry: TubeGeometry, TubeBufferGeometry: TubeBufferGeometry, WireframeGeometry: WireframeGeometry }); /** * parameters = { * color: * } */ function ShadowMaterial( parameters ) { Material.call( this ); this.type = 'ShadowMaterial'; this.color = new Color( 0x000000 ); this.transparent = true; this.setValues( parameters ); } ShadowMaterial.prototype = Object.create( Material.prototype ); ShadowMaterial.prototype.constructor = ShadowMaterial; ShadowMaterial.prototype.isShadowMaterial = true; ShadowMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); return this; }; function RawShaderMaterial( parameters ) { ShaderMaterial.call( this, parameters ); this.type = 'RawShaderMaterial'; } RawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype ); RawShaderMaterial.prototype.constructor = RawShaderMaterial; RawShaderMaterial.prototype.isRawShaderMaterial = true; /** * parameters = { * color: , * roughness: , * metalness: , * opacity: , * * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * emissive: , * emissiveIntensity: * emissiveMap: new THREE.Texture( ), * * bumpMap: new THREE.Texture( ), * bumpScale: , * * normalMap: new THREE.Texture( ), * normalMapType: THREE.TangentSpaceNormalMap, * normalScale: , * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * roughnessMap: new THREE.Texture( ), * * metalnessMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), * envMapIntensity: * * refractionRatio: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: , * morphNormals: * } */ function MeshStandardMaterial( parameters ) { Material.call( this ); this.defines = { 'STANDARD': '' }; this.type = 'MeshStandardMaterial'; this.color = new Color( 0xffffff ); // diffuse this.roughness = 1.0; this.metalness = 0.0; this.map = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.emissive = new Color( 0x000000 ); this.emissiveIntensity = 1.0; this.emissiveMap = null; this.bumpMap = null; this.bumpScale = 1; this.normalMap = null; this.normalMapType = TangentSpaceNormalMap; this.normalScale = new Vector2( 1, 1 ); this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.roughnessMap = null; this.metalnessMap = null; this.alphaMap = null; this.envMap = null; this.envMapIntensity = 1.0; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.vertexTangents = false; this.setValues( parameters ); } MeshStandardMaterial.prototype = Object.create( Material.prototype ); MeshStandardMaterial.prototype.constructor = MeshStandardMaterial; MeshStandardMaterial.prototype.isMeshStandardMaterial = true; MeshStandardMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.defines = { 'STANDARD': '' }; this.color.copy( source.color ); this.roughness = source.roughness; this.metalness = source.metalness; this.map = source.map; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.emissive.copy( source.emissive ); this.emissiveMap = source.emissiveMap; this.emissiveIntensity = source.emissiveIntensity; this.bumpMap = source.bumpMap; this.bumpScale = source.bumpScale; this.normalMap = source.normalMap; this.normalMapType = source.normalMapType; this.normalScale.copy( source.normalScale ); this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.roughnessMap = source.roughnessMap; this.metalnessMap = source.metalnessMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.envMapIntensity = source.envMapIntensity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; this.vertexTangents = source.vertexTangents; return this; }; /** * parameters = { * clearcoat: , * clearcoatMap: new THREE.Texture( ), * clearcoatRoughness: , * clearcoatRoughnessMap: new THREE.Texture( ), * clearcoatNormalScale: , * clearcoatNormalMap: new THREE.Texture( ), * * reflectivity: , * ior: , * * sheen: , * * transmission: , * transmissionMap: new THREE.Texture( ) * } */ function MeshPhysicalMaterial( parameters ) { MeshStandardMaterial.call( this ); this.defines = { 'STANDARD': '', 'PHYSICAL': '' }; this.type = 'MeshPhysicalMaterial'; this.clearcoat = 0.0; this.clearcoatMap = null; this.clearcoatRoughness = 0.0; this.clearcoatRoughnessMap = null; this.clearcoatNormalScale = new Vector2( 1, 1 ); this.clearcoatNormalMap = null; this.reflectivity = 0.5; // maps to F0 = 0.04 Object.defineProperty( this, 'ior', { get: function () { return ( 1 + 0.4 * this.reflectivity ) / ( 1 - 0.4 * this.reflectivity ); }, set: function ( ior ) { this.reflectivity = MathUtils.clamp( 2.5 * ( ior - 1 ) / ( ior + 1 ), 0, 1 ); } } ); this.sheen = null; // null will disable sheen bsdf this.transmission = 0.0; this.transmissionMap = null; this.setValues( parameters ); } MeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); MeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial; MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true; MeshPhysicalMaterial.prototype.copy = function ( source ) { MeshStandardMaterial.prototype.copy.call( this, source ); this.defines = { 'STANDARD': '', 'PHYSICAL': '' }; this.clearcoat = source.clearcoat; this.clearcoatMap = source.clearcoatMap; this.clearcoatRoughness = source.clearcoatRoughness; this.clearcoatRoughnessMap = source.clearcoatRoughnessMap; this.clearcoatNormalMap = source.clearcoatNormalMap; this.clearcoatNormalScale.copy( source.clearcoatNormalScale ); this.reflectivity = source.reflectivity; if ( source.sheen ) { this.sheen = ( this.sheen || new Color() ).copy( source.sheen ); } else { this.sheen = null; } this.transmission = source.transmission; this.transmissionMap = source.transmissionMap; return this; }; /** * parameters = { * color: , * specular: , * shininess: , * opacity: , * * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * emissive: , * emissiveIntensity: * emissiveMap: new THREE.Texture( ), * * bumpMap: new THREE.Texture( ), * bumpScale: , * * normalMap: new THREE.Texture( ), * normalMapType: THREE.TangentSpaceNormalMap, * normalScale: , * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * specularMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.MultiplyOperation, * reflectivity: , * refractionRatio: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: , * morphNormals: * } */ function MeshPhongMaterial( parameters ) { Material.call( this ); this.type = 'MeshPhongMaterial'; this.color = new Color( 0xffffff ); // diffuse this.specular = new Color( 0x111111 ); this.shininess = 30; this.map = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.emissive = new Color( 0x000000 ); this.emissiveIntensity = 1.0; this.emissiveMap = null; this.bumpMap = null; this.bumpScale = 1; this.normalMap = null; this.normalMapType = TangentSpaceNormalMap; this.normalScale = new Vector2( 1, 1 ); this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.specularMap = null; this.alphaMap = null; this.envMap = null; this.combine = MultiplyOperation; this.reflectivity = 1; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); } MeshPhongMaterial.prototype = Object.create( Material.prototype ); MeshPhongMaterial.prototype.constructor = MeshPhongMaterial; MeshPhongMaterial.prototype.isMeshPhongMaterial = true; MeshPhongMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.specular.copy( source.specular ); this.shininess = source.shininess; this.map = source.map; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.emissive.copy( source.emissive ); this.emissiveMap = source.emissiveMap; this.emissiveIntensity = source.emissiveIntensity; this.bumpMap = source.bumpMap; this.bumpScale = source.bumpScale; this.normalMap = source.normalMap; this.normalMapType = source.normalMapType; this.normalScale.copy( source.normalScale ); this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.specularMap = source.specularMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.combine = source.combine; this.reflectivity = source.reflectivity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; /** * parameters = { * color: , * * map: new THREE.Texture( ), * gradientMap: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * emissive: , * emissiveIntensity: * emissiveMap: new THREE.Texture( ), * * bumpMap: new THREE.Texture( ), * bumpScale: , * * normalMap: new THREE.Texture( ), * normalMapType: THREE.TangentSpaceNormalMap, * normalScale: , * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * alphaMap: new THREE.Texture( ), * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: , * morphNormals: * } */ function MeshToonMaterial( parameters ) { Material.call( this ); this.defines = { 'TOON': '' }; this.type = 'MeshToonMaterial'; this.color = new Color( 0xffffff ); this.map = null; this.gradientMap = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.emissive = new Color( 0x000000 ); this.emissiveIntensity = 1.0; this.emissiveMap = null; this.bumpMap = null; this.bumpScale = 1; this.normalMap = null; this.normalMapType = TangentSpaceNormalMap; this.normalScale = new Vector2( 1, 1 ); this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.alphaMap = null; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); } MeshToonMaterial.prototype = Object.create( Material.prototype ); MeshToonMaterial.prototype.constructor = MeshToonMaterial; MeshToonMaterial.prototype.isMeshToonMaterial = true; MeshToonMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.gradientMap = source.gradientMap; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.emissive.copy( source.emissive ); this.emissiveMap = source.emissiveMap; this.emissiveIntensity = source.emissiveIntensity; this.bumpMap = source.bumpMap; this.bumpScale = source.bumpScale; this.normalMap = source.normalMap; this.normalMapType = source.normalMapType; this.normalScale.copy( source.normalScale ); this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.alphaMap = source.alphaMap; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; /** * parameters = { * opacity: , * * bumpMap: new THREE.Texture( ), * bumpScale: , * * normalMap: new THREE.Texture( ), * normalMapType: THREE.TangentSpaceNormalMap, * normalScale: , * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * wireframe: , * wireframeLinewidth: * * skinning: , * morphTargets: , * morphNormals: * } */ function MeshNormalMaterial( parameters ) { Material.call( this ); this.type = 'MeshNormalMaterial'; this.bumpMap = null; this.bumpScale = 1; this.normalMap = null; this.normalMapType = TangentSpaceNormalMap; this.normalScale = new Vector2( 1, 1 ); this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.wireframe = false; this.wireframeLinewidth = 1; this.fog = false; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); } MeshNormalMaterial.prototype = Object.create( Material.prototype ); MeshNormalMaterial.prototype.constructor = MeshNormalMaterial; MeshNormalMaterial.prototype.isMeshNormalMaterial = true; MeshNormalMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.bumpMap = source.bumpMap; this.bumpScale = source.bumpScale; this.normalMap = source.normalMap; this.normalMapType = source.normalMapType; this.normalScale.copy( source.normalScale ); this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; /** * parameters = { * color: , * opacity: , * * map: new THREE.Texture( ), * * lightMap: new THREE.Texture( ), * lightMapIntensity: * * aoMap: new THREE.Texture( ), * aoMapIntensity: * * emissive: , * emissiveIntensity: * emissiveMap: new THREE.Texture( ), * * specularMap: new THREE.Texture( ), * * alphaMap: new THREE.Texture( ), * * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ), * combine: THREE.Multiply, * reflectivity: , * refractionRatio: , * * wireframe: , * wireframeLinewidth: , * * skinning: , * morphTargets: , * morphNormals: * } */ function MeshLambertMaterial( parameters ) { Material.call( this ); this.type = 'MeshLambertMaterial'; this.color = new Color( 0xffffff ); // diffuse this.map = null; this.lightMap = null; this.lightMapIntensity = 1.0; this.aoMap = null; this.aoMapIntensity = 1.0; this.emissive = new Color( 0x000000 ); this.emissiveIntensity = 1.0; this.emissiveMap = null; this.specularMap = null; this.alphaMap = null; this.envMap = null; this.combine = MultiplyOperation; this.reflectivity = 1; this.refractionRatio = 0.98; this.wireframe = false; this.wireframeLinewidth = 1; this.wireframeLinecap = 'round'; this.wireframeLinejoin = 'round'; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); } MeshLambertMaterial.prototype = Object.create( Material.prototype ); MeshLambertMaterial.prototype.constructor = MeshLambertMaterial; MeshLambertMaterial.prototype.isMeshLambertMaterial = true; MeshLambertMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.color.copy( source.color ); this.map = source.map; this.lightMap = source.lightMap; this.lightMapIntensity = source.lightMapIntensity; this.aoMap = source.aoMap; this.aoMapIntensity = source.aoMapIntensity; this.emissive.copy( source.emissive ); this.emissiveMap = source.emissiveMap; this.emissiveIntensity = source.emissiveIntensity; this.specularMap = source.specularMap; this.alphaMap = source.alphaMap; this.envMap = source.envMap; this.combine = source.combine; this.reflectivity = source.reflectivity; this.refractionRatio = source.refractionRatio; this.wireframe = source.wireframe; this.wireframeLinewidth = source.wireframeLinewidth; this.wireframeLinecap = source.wireframeLinecap; this.wireframeLinejoin = source.wireframeLinejoin; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; /** * parameters = { * color: , * opacity: , * * matcap: new THREE.Texture( ), * * map: new THREE.Texture( ), * * bumpMap: new THREE.Texture( ), * bumpScale: , * * normalMap: new THREE.Texture( ), * normalMapType: THREE.TangentSpaceNormalMap, * normalScale: , * * displacementMap: new THREE.Texture( ), * displacementScale: , * displacementBias: , * * alphaMap: new THREE.Texture( ), * * skinning: , * morphTargets: , * morphNormals: * } */ function MeshMatcapMaterial( parameters ) { Material.call( this ); this.defines = { 'MATCAP': '' }; this.type = 'MeshMatcapMaterial'; this.color = new Color( 0xffffff ); // diffuse this.matcap = null; this.map = null; this.bumpMap = null; this.bumpScale = 1; this.normalMap = null; this.normalMapType = TangentSpaceNormalMap; this.normalScale = new Vector2( 1, 1 ); this.displacementMap = null; this.displacementScale = 1; this.displacementBias = 0; this.alphaMap = null; this.skinning = false; this.morphTargets = false; this.morphNormals = false; this.setValues( parameters ); } MeshMatcapMaterial.prototype = Object.create( Material.prototype ); MeshMatcapMaterial.prototype.constructor = MeshMatcapMaterial; MeshMatcapMaterial.prototype.isMeshMatcapMaterial = true; MeshMatcapMaterial.prototype.copy = function ( source ) { Material.prototype.copy.call( this, source ); this.defines = { 'MATCAP': '' }; this.color.copy( source.color ); this.matcap = source.matcap; this.map = source.map; this.bumpMap = source.bumpMap; this.bumpScale = source.bumpScale; this.normalMap = source.normalMap; this.normalMapType = source.normalMapType; this.normalScale.copy( source.normalScale ); this.displacementMap = source.displacementMap; this.displacementScale = source.displacementScale; this.displacementBias = source.displacementBias; this.alphaMap = source.alphaMap; this.skinning = source.skinning; this.morphTargets = source.morphTargets; this.morphNormals = source.morphNormals; return this; }; /** * parameters = { * color: , * opacity: , * * linewidth: , * * scale: , * dashSize: , * gapSize: * } */ function LineDashedMaterial( parameters ) { LineBasicMaterial.call( this ); this.type = 'LineDashedMaterial'; this.scale = 1; this.dashSize = 3; this.gapSize = 1; this.setValues( parameters ); } LineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype ); LineDashedMaterial.prototype.constructor = LineDashedMaterial; LineDashedMaterial.prototype.isLineDashedMaterial = true; LineDashedMaterial.prototype.copy = function ( source ) { LineBasicMaterial.prototype.copy.call( this, source ); this.scale = source.scale; this.dashSize = source.dashSize; this.gapSize = source.gapSize; return this; }; var Materials = /*#__PURE__*/Object.freeze({ __proto__: null, ShadowMaterial: ShadowMaterial, SpriteMaterial: SpriteMaterial, RawShaderMaterial: RawShaderMaterial, ShaderMaterial: ShaderMaterial, PointsMaterial: PointsMaterial, MeshPhysicalMaterial: MeshPhysicalMaterial, MeshStandardMaterial: MeshStandardMaterial, MeshPhongMaterial: MeshPhongMaterial, MeshToonMaterial: MeshToonMaterial, MeshNormalMaterial: MeshNormalMaterial, MeshLambertMaterial: MeshLambertMaterial, MeshDepthMaterial: MeshDepthMaterial, MeshDistanceMaterial: MeshDistanceMaterial, MeshBasicMaterial: MeshBasicMaterial, MeshMatcapMaterial: MeshMatcapMaterial, LineDashedMaterial: LineDashedMaterial, LineBasicMaterial: LineBasicMaterial, Material: Material }); const AnimationUtils = { // same as Array.prototype.slice, but also works on typed arrays arraySlice: function ( array, from, to ) { if ( AnimationUtils.isTypedArray( array ) ) { // in ios9 array.subarray(from, undefined) will return empty array // but array.subarray(from) or array.subarray(from, len) is correct return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) ); } return array.slice( from, to ); }, // converts an array to a specific type convertArray: function ( array, type, forceClone ) { if ( ! array || // let 'undefined' and 'null' pass ! forceClone && array.constructor === type ) return array; if ( typeof type.BYTES_PER_ELEMENT === 'number' ) { return new type( array ); // create typed array } return Array.prototype.slice.call( array ); // create Array }, isTypedArray: function ( object ) { return ArrayBuffer.isView( object ) && ! ( object instanceof DataView ); }, // returns an array by which times and values can be sorted getKeyframeOrder: function ( times ) { function compareTime( i, j ) { return times[ i ] - times[ j ]; } const n = times.length; const result = new Array( n ); for ( let i = 0; i !== n; ++ i ) result[ i ] = i; result.sort( compareTime ); return result; }, // uses the array previously returned by 'getKeyframeOrder' to sort data sortedArray: function ( values, stride, order ) { const nValues = values.length; const result = new values.constructor( nValues ); for ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) { const srcOffset = order[ i ] * stride; for ( let j = 0; j !== stride; ++ j ) { result[ dstOffset ++ ] = values[ srcOffset + j ]; } } return result; }, // function for parsing AOS keyframe formats flattenJSON: function ( jsonKeys, times, values, valuePropertyName ) { let i = 1, key = jsonKeys[ 0 ]; while ( key !== undefined && key[ valuePropertyName ] === undefined ) { key = jsonKeys[ i ++ ]; } if ( key === undefined ) return; // no data let value = key[ valuePropertyName ]; if ( value === undefined ) return; // no data if ( Array.isArray( value ) ) { do { value = key[ valuePropertyName ]; if ( value !== undefined ) { times.push( key.time ); values.push.apply( values, value ); // push all elements } key = jsonKeys[ i ++ ]; } while ( key !== undefined ); } else if ( value.toArray !== undefined ) { // ...assume THREE.Math-ish do { value = key[ valuePropertyName ]; if ( value !== undefined ) { times.push( key.time ); value.toArray( values, values.length ); } key = jsonKeys[ i ++ ]; } while ( key !== undefined ); } else { // otherwise push as-is do { value = key[ valuePropertyName ]; if ( value !== undefined ) { times.push( key.time ); values.push( value ); } key = jsonKeys[ i ++ ]; } while ( key !== undefined ); } }, subclip: function ( sourceClip, name, startFrame, endFrame, fps = 30 ) { const clip = sourceClip.clone(); clip.name = name; const tracks = []; for ( let i = 0; i < clip.tracks.length; ++ i ) { const track = clip.tracks[ i ]; const valueSize = track.getValueSize(); const times = []; const values = []; for ( let j = 0; j < track.times.length; ++ j ) { const frame = track.times[ j ] * fps; if ( frame < startFrame || frame >= endFrame ) continue; times.push( track.times[ j ] ); for ( let k = 0; k < valueSize; ++ k ) { values.push( track.values[ j * valueSize + k ] ); } } if ( times.length === 0 ) continue; track.times = AnimationUtils.convertArray( times, track.times.constructor ); track.values = AnimationUtils.convertArray( values, track.values.constructor ); tracks.push( track ); } clip.tracks = tracks; // find minimum .times value across all tracks in the trimmed clip let minStartTime = Infinity; for ( let i = 0; i < clip.tracks.length; ++ i ) { if ( minStartTime > clip.tracks[ i ].times[ 0 ] ) { minStartTime = clip.tracks[ i ].times[ 0 ]; } } // shift all tracks such that clip begins at t=0 for ( let i = 0; i < clip.tracks.length; ++ i ) { clip.tracks[ i ].shift( - 1 * minStartTime ); } clip.resetDuration(); return clip; }, makeClipAdditive: function ( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) { if ( fps <= 0 ) fps = 30; const numTracks = referenceClip.tracks.length; const referenceTime = referenceFrame / fps; // Make each track's values relative to the values at the reference frame for ( let i = 0; i < numTracks; ++ i ) { const referenceTrack = referenceClip.tracks[ i ]; const referenceTrackType = referenceTrack.ValueTypeName; // Skip this track if it's non-numeric if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue; // Find the track in the target clip whose name and type matches the reference track const targetTrack = targetClip.tracks.find( function ( track ) { return track.name === referenceTrack.name && track.ValueTypeName === referenceTrackType; } ); if ( targetTrack === undefined ) continue; let referenceOffset = 0; const referenceValueSize = referenceTrack.getValueSize(); if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { referenceOffset = referenceValueSize / 3; } let targetOffset = 0; const targetValueSize = targetTrack.getValueSize(); if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) { targetOffset = targetValueSize / 3; } const lastIndex = referenceTrack.times.length - 1; let referenceValue; // Find the value to subtract out of the track if ( referenceTime <= referenceTrack.times[ 0 ] ) { // Reference frame is earlier than the first keyframe, so just use the first keyframe const startIndex = referenceOffset; const endIndex = referenceValueSize - referenceOffset; referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); } else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) { // Reference frame is after the last keyframe, so just use the last keyframe const startIndex = lastIndex * referenceValueSize + referenceOffset; const endIndex = startIndex + referenceValueSize - referenceOffset; referenceValue = AnimationUtils.arraySlice( referenceTrack.values, startIndex, endIndex ); } else { // Interpolate to the reference value const interpolant = referenceTrack.createInterpolant(); const startIndex = referenceOffset; const endIndex = referenceValueSize - referenceOffset; interpolant.evaluate( referenceTime ); referenceValue = AnimationUtils.arraySlice( interpolant.resultBuffer, startIndex, endIndex ); } // Conjugate the quaternion if ( referenceTrackType === 'quaternion' ) { const referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate(); referenceQuat.toArray( referenceValue ); } // Subtract the reference value from all of the track values const numTimes = targetTrack.times.length; for ( let j = 0; j < numTimes; ++ j ) { const valueStart = j * targetValueSize + targetOffset; if ( referenceTrackType === 'quaternion' ) { // Multiply the conjugate for quaternion track types Quaternion.multiplyQuaternionsFlat( targetTrack.values, valueStart, referenceValue, 0, targetTrack.values, valueStart ); } else { const valueEnd = targetValueSize - targetOffset * 2; // Subtract each value for all other numeric track types for ( let k = 0; k < valueEnd; ++ k ) { targetTrack.values[ valueStart + k ] -= referenceValue[ k ]; } } } } targetClip.blendMode = AdditiveAnimationBlendMode; return targetClip; } }; /** * Abstract base class of interpolants over parametric samples. * * The parameter domain is one dimensional, typically the time or a path * along a curve defined by the data. * * The sample values can have any dimensionality and derived classes may * apply special interpretations to the data. * * This class provides the interval seek in a Template Method, deferring * the actual interpolation to derived classes. * * Time complexity is O(1) for linear access crossing at most two points * and O(log N) for random access, where N is the number of positions. * * References: * * http://www.oodesign.com/template-method-pattern.html * */ function Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { this.parameterPositions = parameterPositions; this._cachedIndex = 0; this.resultBuffer = resultBuffer !== undefined ? resultBuffer : new sampleValues.constructor( sampleSize ); this.sampleValues = sampleValues; this.valueSize = sampleSize; } Object.assign( Interpolant.prototype, { evaluate: function ( t ) { const pp = this.parameterPositions; let i1 = this._cachedIndex, t1 = pp[ i1 ], t0 = pp[ i1 - 1 ]; validate_interval: { seek: { let right; linear_scan: { //- See http://jsperf.com/comparison-to-undefined/3 //- slower code: //- //- if ( t >= t1 || t1 === undefined ) { forward_scan: if ( ! ( t < t1 ) ) { for ( let giveUpAt = i1 + 2; ; ) { if ( t1 === undefined ) { if ( t < t0 ) break forward_scan; // after end i1 = pp.length; this._cachedIndex = i1; return this.afterEnd_( i1 - 1, t, t0 ); } if ( i1 === giveUpAt ) break; // this loop t0 = t1; t1 = pp[ ++ i1 ]; if ( t < t1 ) { // we have arrived at the sought interval break seek; } } // prepare binary search on the right side of the index right = pp.length; break linear_scan; } //- slower code: //- if ( t < t0 || t0 === undefined ) { if ( ! ( t >= t0 ) ) { // looping? const t1global = pp[ 1 ]; if ( t < t1global ) { i1 = 2; // + 1, using the scan for the details t0 = t1global; } // linear reverse scan for ( let giveUpAt = i1 - 2; ; ) { if ( t0 === undefined ) { // before start this._cachedIndex = 0; return this.beforeStart_( 0, t, t1 ); } if ( i1 === giveUpAt ) break; // this loop t1 = t0; t0 = pp[ -- i1 - 1 ]; if ( t >= t0 ) { // we have arrived at the sought interval break seek; } } // prepare binary search on the left side of the index right = i1; i1 = 0; break linear_scan; } // the interval is valid break validate_interval; } // linear scan // binary search while ( i1 < right ) { const mid = ( i1 + right ) >>> 1; if ( t < pp[ mid ] ) { right = mid; } else { i1 = mid + 1; } } t1 = pp[ i1 ]; t0 = pp[ i1 - 1 ]; // check boundary cases, again if ( t0 === undefined ) { this._cachedIndex = 0; return this.beforeStart_( 0, t, t1 ); } if ( t1 === undefined ) { i1 = pp.length; this._cachedIndex = i1; return this.afterEnd_( i1 - 1, t0, t ); } } // seek this._cachedIndex = i1; this.intervalChanged_( i1, t0, t1 ); } // validate_interval return this.interpolate_( i1, t0, t, t1 ); }, settings: null, // optional, subclass-specific settings structure // Note: The indirection allows central control of many interpolants. // --- Protected interface DefaultSettings_: {}, getSettings_: function () { return this.settings || this.DefaultSettings_; }, copySampleValue_: function ( index ) { // copies a sample value to the result buffer const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset = index * stride; for ( let i = 0; i !== stride; ++ i ) { result[ i ] = values[ offset + i ]; } return result; }, // Template methods for derived classes: interpolate_: function ( /* i1, t0, t, t1 */ ) { throw new Error( 'call to abstract method' ); // implementations shall return this.resultBuffer }, intervalChanged_: function ( /* i1, t0, t1 */ ) { // empty } } ); // DECLARE ALIAS AFTER assign prototype Object.assign( Interpolant.prototype, { //( 0, t, t0 ), returns this.resultBuffer beforeStart_: Interpolant.prototype.copySampleValue_, //( N-1, tN-1, t ), returns this.resultBuffer afterEnd_: Interpolant.prototype.copySampleValue_, } ); /** * Fast and simple cubic spline interpolant. * * It was derived from a Hermitian construction setting the first derivative * at each sample position to the linear slope between neighboring positions * over their parameter interval. */ function CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); this._weightPrev = - 0; this._offsetPrev = - 0; this._weightNext = - 0; this._offsetNext = - 0; } CubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { constructor: CubicInterpolant, DefaultSettings_: { endingStart: ZeroCurvatureEnding, endingEnd: ZeroCurvatureEnding }, intervalChanged_: function ( i1, t0, t1 ) { const pp = this.parameterPositions; let iPrev = i1 - 2, iNext = i1 + 1, tPrev = pp[ iPrev ], tNext = pp[ iNext ]; if ( tPrev === undefined ) { switch ( this.getSettings_().endingStart ) { case ZeroSlopeEnding: // f'(t0) = 0 iPrev = i1; tPrev = 2 * t0 - t1; break; case WrapAroundEnding: // use the other end of the curve iPrev = pp.length - 2; tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ]; break; default: // ZeroCurvatureEnding // f''(t0) = 0 a.k.a. Natural Spline iPrev = i1; tPrev = t1; } } if ( tNext === undefined ) { switch ( this.getSettings_().endingEnd ) { case ZeroSlopeEnding: // f'(tN) = 0 iNext = i1; tNext = 2 * t1 - t0; break; case WrapAroundEnding: // use the other end of the curve iNext = 1; tNext = t1 + pp[ 1 ] - pp[ 0 ]; break; default: // ZeroCurvatureEnding // f''(tN) = 0, a.k.a. Natural Spline iNext = i1 - 1; tNext = t0; } } const halfDt = ( t1 - t0 ) * 0.5, stride = this.valueSize; this._weightPrev = halfDt / ( t0 - tPrev ); this._weightNext = halfDt / ( tNext - t1 ); this._offsetPrev = iPrev * stride; this._offsetNext = iNext * stride; }, interpolate_: function ( i1, t0, t, t1 ) { const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, o1 = i1 * stride, o0 = o1 - stride, oP = this._offsetPrev, oN = this._offsetNext, wP = this._weightPrev, wN = this._weightNext, p = ( t - t0 ) / ( t1 - t0 ), pp = p * p, ppp = pp * p; // evaluate polynomials const sP = - wP * ppp + 2 * wP * pp - wP * p; const s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1; const s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p; const sN = wN * ppp - wN * pp; // combine data linearly for ( let i = 0; i !== stride; ++ i ) { result[ i ] = sP * values[ oP + i ] + s0 * values[ o0 + i ] + s1 * values[ o1 + i ] + sN * values[ oN + i ]; } return result; } } ); function LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); } LinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { constructor: LinearInterpolant, interpolate_: function ( i1, t0, t, t1 ) { const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, offset1 = i1 * stride, offset0 = offset1 - stride, weight1 = ( t - t0 ) / ( t1 - t0 ), weight0 = 1 - weight1; for ( let i = 0; i !== stride; ++ i ) { result[ i ] = values[ offset0 + i ] * weight0 + values[ offset1 + i ] * weight1; } return result; } } ); /** * * Interpolant that evaluates to the sample value at the position preceeding * the parameter. */ function DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); } DiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { constructor: DiscreteInterpolant, interpolate_: function ( i1 /*, t0, t, t1 */ ) { return this.copySampleValue_( i1 - 1 ); } } ); function KeyframeTrack( name, times, values, interpolation ) { if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' ); if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name ); this.name = name; this.times = AnimationUtils.convertArray( times, this.TimeBufferType ); this.values = AnimationUtils.convertArray( values, this.ValueBufferType ); this.setInterpolation( interpolation || this.DefaultInterpolation ); } // Static methods Object.assign( KeyframeTrack, { // Serialization (in static context, because of constructor invocation // and automatic invocation of .toJSON): toJSON: function ( track ) { const trackType = track.constructor; let json; // derived classes can define a static toJSON method if ( trackType.toJSON !== undefined ) { json = trackType.toJSON( track ); } else { // by default, we assume the data can be serialized as-is json = { 'name': track.name, 'times': AnimationUtils.convertArray( track.times, Array ), 'values': AnimationUtils.convertArray( track.values, Array ) }; const interpolation = track.getInterpolation(); if ( interpolation !== track.DefaultInterpolation ) { json.interpolation = interpolation; } } json.type = track.ValueTypeName; // mandatory return json; } } ); Object.assign( KeyframeTrack.prototype, { constructor: KeyframeTrack, TimeBufferType: Float32Array, ValueBufferType: Float32Array, DefaultInterpolation: InterpolateLinear, InterpolantFactoryMethodDiscrete: function ( result ) { return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result ); }, InterpolantFactoryMethodLinear: function ( result ) { return new LinearInterpolant( this.times, this.values, this.getValueSize(), result ); }, InterpolantFactoryMethodSmooth: function ( result ) { return new CubicInterpolant( this.times, this.values, this.getValueSize(), result ); }, setInterpolation: function ( interpolation ) { let factoryMethod; switch ( interpolation ) { case InterpolateDiscrete: factoryMethod = this.InterpolantFactoryMethodDiscrete; break; case InterpolateLinear: factoryMethod = this.InterpolantFactoryMethodLinear; break; case InterpolateSmooth: factoryMethod = this.InterpolantFactoryMethodSmooth; break; } if ( factoryMethod === undefined ) { const message = 'unsupported interpolation for ' + this.ValueTypeName + ' keyframe track named ' + this.name; if ( this.createInterpolant === undefined ) { // fall back to default, unless the default itself is messed up if ( interpolation !== this.DefaultInterpolation ) { this.setInterpolation( this.DefaultInterpolation ); } else { throw new Error( message ); // fatal, in this case } } console.warn( 'THREE.KeyframeTrack:', message ); return this; } this.createInterpolant = factoryMethod; return this; }, getInterpolation: function () { switch ( this.createInterpolant ) { case this.InterpolantFactoryMethodDiscrete: return InterpolateDiscrete; case this.InterpolantFactoryMethodLinear: return InterpolateLinear; case this.InterpolantFactoryMethodSmooth: return InterpolateSmooth; } }, getValueSize: function () { return this.values.length / this.times.length; }, // move all keyframes either forwards or backwards in time shift: function ( timeOffset ) { if ( timeOffset !== 0.0 ) { const times = this.times; for ( let i = 0, n = times.length; i !== n; ++ i ) { times[ i ] += timeOffset; } } return this; }, // scale all keyframe times by a factor (useful for frame <-> seconds conversions) scale: function ( timeScale ) { if ( timeScale !== 1.0 ) { const times = this.times; for ( let i = 0, n = times.length; i !== n; ++ i ) { times[ i ] *= timeScale; } } return this; }, // removes keyframes before and after animation without changing any values within the range [startTime, endTime]. // IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values trim: function ( startTime, endTime ) { const times = this.times, nKeys = times.length; let from = 0, to = nKeys - 1; while ( from !== nKeys && times[ from ] < startTime ) { ++ from; } while ( to !== - 1 && times[ to ] > endTime ) { -- to; } ++ to; // inclusive -> exclusive bound if ( from !== 0 || to !== nKeys ) { // empty tracks are forbidden, so keep at least one keyframe if ( from >= to ) { to = Math.max( to, 1 ); from = to - 1; } const stride = this.getValueSize(); this.times = AnimationUtils.arraySlice( times, from, to ); this.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride ); } return this; }, // ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable validate: function () { let valid = true; const valueSize = this.getValueSize(); if ( valueSize - Math.floor( valueSize ) !== 0 ) { console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this ); valid = false; } const times = this.times, values = this.values, nKeys = times.length; if ( nKeys === 0 ) { console.error( 'THREE.KeyframeTrack: Track is empty.', this ); valid = false; } let prevTime = null; for ( let i = 0; i !== nKeys; i ++ ) { const currTime = times[ i ]; if ( typeof currTime === 'number' && isNaN( currTime ) ) { console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime ); valid = false; break; } if ( prevTime !== null && prevTime > currTime ) { console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime ); valid = false; break; } prevTime = currTime; } if ( values !== undefined ) { if ( AnimationUtils.isTypedArray( values ) ) { for ( let i = 0, n = values.length; i !== n; ++ i ) { const value = values[ i ]; if ( isNaN( value ) ) { console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value ); valid = false; break; } } } } return valid; }, // removes equivalent sequential keys as common in morph target sequences // (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0) optimize: function () { // times or values may be shared with other tracks, so overwriting is unsafe const times = AnimationUtils.arraySlice( this.times ), values = AnimationUtils.arraySlice( this.values ), stride = this.getValueSize(), smoothInterpolation = this.getInterpolation() === InterpolateSmooth, lastIndex = times.length - 1; let writeIndex = 1; for ( let i = 1; i < lastIndex; ++ i ) { let keep = false; const time = times[ i ]; const timeNext = times[ i + 1 ]; // remove adjacent keyframes scheduled at the same time if ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) { if ( ! smoothInterpolation ) { // remove unnecessary keyframes same as their neighbors const offset = i * stride, offsetP = offset - stride, offsetN = offset + stride; for ( let j = 0; j !== stride; ++ j ) { const value = values[ offset + j ]; if ( value !== values[ offsetP + j ] || value !== values[ offsetN + j ] ) { keep = true; break; } } } else { keep = true; } } // in-place compaction if ( keep ) { if ( i !== writeIndex ) { times[ writeIndex ] = times[ i ]; const readOffset = i * stride, writeOffset = writeIndex * stride; for ( let j = 0; j !== stride; ++ j ) { values[ writeOffset + j ] = values[ readOffset + j ]; } } ++ writeIndex; } } // flush last keyframe (compaction looks ahead) if ( lastIndex > 0 ) { times[ writeIndex ] = times[ lastIndex ]; for ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) { values[ writeOffset + j ] = values[ readOffset + j ]; } ++ writeIndex; } if ( writeIndex !== times.length ) { this.times = AnimationUtils.arraySlice( times, 0, writeIndex ); this.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride ); } else { this.times = times; this.values = values; } return this; }, clone: function () { const times = AnimationUtils.arraySlice( this.times, 0 ); const values = AnimationUtils.arraySlice( this.values, 0 ); const TypedKeyframeTrack = this.constructor; const track = new TypedKeyframeTrack( this.name, times, values ); // Interpolant argument to constructor is not saved, so copy the factory method directly. track.createInterpolant = this.createInterpolant; return track; } } ); /** * A Track of Boolean keyframe values. */ function BooleanKeyframeTrack( name, times, values ) { KeyframeTrack.call( this, name, times, values ); } BooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { constructor: BooleanKeyframeTrack, ValueTypeName: 'bool', ValueBufferType: Array, DefaultInterpolation: InterpolateDiscrete, InterpolantFactoryMethodLinear: undefined, InterpolantFactoryMethodSmooth: undefined // Note: Actually this track could have a optimized / compressed // representation of a single value and a custom interpolant that // computes "firstValue ^ isOdd( index )". } ); /** * A Track of keyframe values that represent color. */ function ColorKeyframeTrack( name, times, values, interpolation ) { KeyframeTrack.call( this, name, times, values, interpolation ); } ColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { constructor: ColorKeyframeTrack, ValueTypeName: 'color' // ValueBufferType is inherited // DefaultInterpolation is inherited // Note: Very basic implementation and nothing special yet. // However, this is the place for color space parameterization. } ); /** * A Track of numeric keyframe values. */ function NumberKeyframeTrack( name, times, values, interpolation ) { KeyframeTrack.call( this, name, times, values, interpolation ); } NumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { constructor: NumberKeyframeTrack, ValueTypeName: 'number' // ValueBufferType is inherited // DefaultInterpolation is inherited } ); /** * Spherical linear unit quaternion interpolant. */ function QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); } QuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), { constructor: QuaternionLinearInterpolant, interpolate_: function ( i1, t0, t, t1 ) { const result = this.resultBuffer, values = this.sampleValues, stride = this.valueSize, alpha = ( t - t0 ) / ( t1 - t0 ); let offset = i1 * stride; for ( let end = offset + stride; offset !== end; offset += 4 ) { Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha ); } return result; } } ); /** * A Track of quaternion keyframe values. */ function QuaternionKeyframeTrack( name, times, values, interpolation ) { KeyframeTrack.call( this, name, times, values, interpolation ); } QuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { constructor: QuaternionKeyframeTrack, ValueTypeName: 'quaternion', // ValueBufferType is inherited DefaultInterpolation: InterpolateLinear, InterpolantFactoryMethodLinear: function ( result ) { return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result ); }, InterpolantFactoryMethodSmooth: undefined // not yet implemented } ); /** * A Track that interpolates Strings */ function StringKeyframeTrack( name, times, values, interpolation ) { KeyframeTrack.call( this, name, times, values, interpolation ); } StringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { constructor: StringKeyframeTrack, ValueTypeName: 'string', ValueBufferType: Array, DefaultInterpolation: InterpolateDiscrete, InterpolantFactoryMethodLinear: undefined, InterpolantFactoryMethodSmooth: undefined } ); /** * A Track of vectored keyframe values. */ function VectorKeyframeTrack( name, times, values, interpolation ) { KeyframeTrack.call( this, name, times, values, interpolation ); } VectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), { constructor: VectorKeyframeTrack, ValueTypeName: 'vector' // ValueBufferType is inherited // DefaultInterpolation is inherited } ); function AnimationClip( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) { this.name = name; this.tracks = tracks; this.duration = duration; this.blendMode = blendMode; this.uuid = MathUtils.generateUUID(); // this means it should figure out its duration by scanning the tracks if ( this.duration < 0 ) { this.resetDuration(); } } function getTrackTypeForValueTypeName( typeName ) { switch ( typeName.toLowerCase() ) { case 'scalar': case 'double': case 'float': case 'number': case 'integer': return NumberKeyframeTrack; case 'vector': case 'vector2': case 'vector3': case 'vector4': return VectorKeyframeTrack; case 'color': return ColorKeyframeTrack; case 'quaternion': return QuaternionKeyframeTrack; case 'bool': case 'boolean': return BooleanKeyframeTrack; case 'string': return StringKeyframeTrack; } throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName ); } function parseKeyframeTrack( json ) { if ( json.type === undefined ) { throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' ); } const trackType = getTrackTypeForValueTypeName( json.type ); if ( json.times === undefined ) { const times = [], values = []; AnimationUtils.flattenJSON( json.keys, times, values, 'value' ); json.times = times; json.values = values; } // derived classes can define a static parse method if ( trackType.parse !== undefined ) { return trackType.parse( json ); } else { // by default, we assume a constructor compatible with the base return new trackType( json.name, json.times, json.values, json.interpolation ); } } Object.assign( AnimationClip, { parse: function ( json ) { const tracks = [], jsonTracks = json.tracks, frameTime = 1.0 / ( json.fps || 1.0 ); for ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) { tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) ); } const clip = new AnimationClip( json.name, json.duration, tracks, json.blendMode ); clip.uuid = json.uuid; return clip; }, toJSON: function ( clip ) { const tracks = [], clipTracks = clip.tracks; const json = { 'name': clip.name, 'duration': clip.duration, 'tracks': tracks, 'uuid': clip.uuid, 'blendMode': clip.blendMode }; for ( let i = 0, n = clipTracks.length; i !== n; ++ i ) { tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) ); } return json; }, CreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) { const numMorphTargets = morphTargetSequence.length; const tracks = []; for ( let i = 0; i < numMorphTargets; i ++ ) { let times = []; let values = []; times.push( ( i + numMorphTargets - 1 ) % numMorphTargets, i, ( i + 1 ) % numMorphTargets ); values.push( 0, 1, 0 ); const order = AnimationUtils.getKeyframeOrder( times ); times = AnimationUtils.sortedArray( times, 1, order ); values = AnimationUtils.sortedArray( values, 1, order ); // if there is a key at the first frame, duplicate it as the // last frame as well for perfect loop. if ( ! noLoop && times[ 0 ] === 0 ) { times.push( numMorphTargets ); values.push( values[ 0 ] ); } tracks.push( new NumberKeyframeTrack( '.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']', times, values ).scale( 1.0 / fps ) ); } return new AnimationClip( name, - 1, tracks ); }, findByName: function ( objectOrClipArray, name ) { let clipArray = objectOrClipArray; if ( ! Array.isArray( objectOrClipArray ) ) { const o = objectOrClipArray; clipArray = o.geometry && o.geometry.animations || o.animations; } for ( let i = 0; i < clipArray.length; i ++ ) { if ( clipArray[ i ].name === name ) { return clipArray[ i ]; } } return null; }, CreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) { const animationToMorphTargets = {}; // tested with https://regex101.com/ on trick sequences // such flamingo_flyA_003, flamingo_run1_003, crdeath0059 const pattern = /^([\w-]*?)([\d]+)$/; // sort morph target names into animation groups based // patterns like Walk_001, Walk_002, Run_001, Run_002 for ( let i = 0, il = morphTargets.length; i < il; i ++ ) { const morphTarget = morphTargets[ i ]; const parts = morphTarget.name.match( pattern ); if ( parts && parts.length > 1 ) { const name = parts[ 1 ]; let animationMorphTargets = animationToMorphTargets[ name ]; if ( ! animationMorphTargets ) { animationToMorphTargets[ name ] = animationMorphTargets = []; } animationMorphTargets.push( morphTarget ); } } const clips = []; for ( const name in animationToMorphTargets ) { clips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) ); } return clips; }, // parse the animation.hierarchy format parseAnimation: function ( animation, bones ) { if ( ! animation ) { console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' ); return null; } const addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) { // only return track if there are actually keys. if ( animationKeys.length !== 0 ) { const times = []; const values = []; AnimationUtils.flattenJSON( animationKeys, times, values, propertyName ); // empty keys are filtered out, so check again if ( times.length !== 0 ) { destTracks.push( new trackType( trackName, times, values ) ); } } }; const tracks = []; const clipName = animation.name || 'default'; const fps = animation.fps || 30; const blendMode = animation.blendMode; // automatic length determination in AnimationClip. let duration = animation.length || - 1; const hierarchyTracks = animation.hierarchy || []; for ( let h = 0; h < hierarchyTracks.length; h ++ ) { const animationKeys = hierarchyTracks[ h ].keys; // skip empty tracks if ( ! animationKeys || animationKeys.length === 0 ) continue; // process morph targets if ( animationKeys[ 0 ].morphTargets ) { // figure out all morph targets used in this track const morphTargetNames = {}; let k; for ( k = 0; k < animationKeys.length; k ++ ) { if ( animationKeys[ k ].morphTargets ) { for ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) { morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1; } } } // create a track for each morph target with all zero // morphTargetInfluences except for the keys in which // the morphTarget is named. for ( const morphTargetName in morphTargetNames ) { const times = []; const values = []; for ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) { const animationKey = animationKeys[ k ]; times.push( animationKey.time ); values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 ); } tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) ); } duration = morphTargetNames.length * ( fps || 1.0 ); } else { // ...assume skeletal animation const boneName = '.bones[' + bones[ h ].name + ']'; addNonemptyTrack( VectorKeyframeTrack, boneName + '.position', animationKeys, 'pos', tracks ); addNonemptyTrack( QuaternionKeyframeTrack, boneName + '.quaternion', animationKeys, 'rot', tracks ); addNonemptyTrack( VectorKeyframeTrack, boneName + '.scale', animationKeys, 'scl', tracks ); } } if ( tracks.length === 0 ) { return null; } const clip = new AnimationClip( clipName, duration, tracks, blendMode ); return clip; } } ); Object.assign( AnimationClip.prototype, { resetDuration: function () { const tracks = this.tracks; let duration = 0; for ( let i = 0, n = tracks.length; i !== n; ++ i ) { const track = this.tracks[ i ]; duration = Math.max( duration, track.times[ track.times.length - 1 ] ); } this.duration = duration; return this; }, trim: function () { for ( let i = 0; i < this.tracks.length; i ++ ) { this.tracks[ i ].trim( 0, this.duration ); } return this; }, validate: function () { let valid = true; for ( let i = 0; i < this.tracks.length; i ++ ) { valid = valid && this.tracks[ i ].validate(); } return valid; }, optimize: function () { for ( let i = 0; i < this.tracks.length; i ++ ) { this.tracks[ i ].optimize(); } return this; }, clone: function () { const tracks = []; for ( let i = 0; i < this.tracks.length; i ++ ) { tracks.push( this.tracks[ i ].clone() ); } return new AnimationClip( this.name, this.duration, tracks, this.blendMode ); }, toJSON: function () { return AnimationClip.toJSON( this ); } } ); const Cache = { enabled: false, files: {}, add: function ( key, file ) { if ( this.enabled === false ) return; // console.log( 'THREE.Cache', 'Adding key:', key ); this.files[ key ] = file; }, get: function ( key ) { if ( this.enabled === false ) return; // console.log( 'THREE.Cache', 'Checking key:', key ); return this.files[ key ]; }, remove: function ( key ) { delete this.files[ key ]; }, clear: function () { this.files = {}; } }; function LoadingManager( onLoad, onProgress, onError ) { const scope = this; let isLoading = false; let itemsLoaded = 0; let itemsTotal = 0; let urlModifier = undefined; const handlers = []; // Refer to #5689 for the reason why we don't set .onStart // in the constructor this.onStart = undefined; this.onLoad = onLoad; this.onProgress = onProgress; this.onError = onError; this.itemStart = function ( url ) { itemsTotal ++; if ( isLoading === false ) { if ( scope.onStart !== undefined ) { scope.onStart( url, itemsLoaded, itemsTotal ); } } isLoading = true; }; this.itemEnd = function ( url ) { itemsLoaded ++; if ( scope.onProgress !== undefined ) { scope.onProgress( url, itemsLoaded, itemsTotal ); } if ( itemsLoaded === itemsTotal ) { isLoading = false; if ( scope.onLoad !== undefined ) { scope.onLoad(); } } }; this.itemError = function ( url ) { if ( scope.onError !== undefined ) { scope.onError( url ); } }; this.resolveURL = function ( url ) { if ( urlModifier ) { return urlModifier( url ); } return url; }; this.setURLModifier = function ( transform ) { urlModifier = transform; return this; }; this.addHandler = function ( regex, loader ) { handlers.push( regex, loader ); return this; }; this.removeHandler = function ( regex ) { const index = handlers.indexOf( regex ); if ( index !== - 1 ) { handlers.splice( index, 2 ); } return this; }; this.getHandler = function ( file ) { for ( let i = 0, l = handlers.length; i < l; i += 2 ) { const regex = handlers[ i ]; const loader = handlers[ i + 1 ]; if ( regex.global ) regex.lastIndex = 0; // see #17920 if ( regex.test( file ) ) { return loader; } } return null; }; } const DefaultLoadingManager = new LoadingManager(); function Loader( manager ) { this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager; this.crossOrigin = 'anonymous'; this.withCredentials = false; this.path = ''; this.resourcePath = ''; this.requestHeader = {}; } Object.assign( Loader.prototype, { load: function ( /* url, onLoad, onProgress, onError */ ) {}, loadAsync: function ( url, onProgress ) { const scope = this; return new Promise( function ( resolve, reject ) { scope.load( url, resolve, onProgress, reject ); } ); }, parse: function ( /* data */ ) {}, setCrossOrigin: function ( crossOrigin ) { this.crossOrigin = crossOrigin; return this; }, setWithCredentials: function ( value ) { this.withCredentials = value; return this; }, setPath: function ( path ) { this.path = path; return this; }, setResourcePath: function ( resourcePath ) { this.resourcePath = resourcePath; return this; }, setRequestHeader: function ( requestHeader ) { this.requestHeader = requestHeader; return this; } } ); const loading = {}; function FileLoader( manager ) { Loader.call( this, manager ); } FileLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: FileLoader, load: function ( url, onLoad, onProgress, onError ) { if ( url === undefined ) url = ''; if ( this.path !== undefined ) url = this.path + url; url = this.manager.resolveURL( url ); const scope = this; const cached = Cache.get( url ); if ( cached !== undefined ) { scope.manager.itemStart( url ); setTimeout( function () { if ( onLoad ) onLoad( cached ); scope.manager.itemEnd( url ); }, 0 ); return cached; } // Check if request is duplicate if ( loading[ url ] !== undefined ) { loading[ url ].push( { onLoad: onLoad, onProgress: onProgress, onError: onError } ); return; } // Check for data: URI const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; const dataUriRegexResult = url.match( dataUriRegex ); let request; // Safari can not handle Data URIs through XMLHttpRequest so process manually if ( dataUriRegexResult ) { const mimeType = dataUriRegexResult[ 1 ]; const isBase64 = !! dataUriRegexResult[ 2 ]; let data = dataUriRegexResult[ 3 ]; data = decodeURIComponent( data ); if ( isBase64 ) data = atob( data ); try { let response; const responseType = ( this.responseType || '' ).toLowerCase(); switch ( responseType ) { case 'arraybuffer': case 'blob': const view = new Uint8Array( data.length ); for ( let i = 0; i < data.length; i ++ ) { view[ i ] = data.charCodeAt( i ); } if ( responseType === 'blob' ) { response = new Blob( [ view.buffer ], { type: mimeType } ); } else { response = view.buffer; } break; case 'document': const parser = new DOMParser(); response = parser.parseFromString( data, mimeType ); break; case 'json': response = JSON.parse( data ); break; default: // 'text' or other response = data; break; } // Wait for next browser tick like standard XMLHttpRequest event dispatching does setTimeout( function () { if ( onLoad ) onLoad( response ); scope.manager.itemEnd( url ); }, 0 ); } catch ( error ) { // Wait for next browser tick like standard XMLHttpRequest event dispatching does setTimeout( function () { if ( onError ) onError( error ); scope.manager.itemError( url ); scope.manager.itemEnd( url ); }, 0 ); } } else { // Initialise array for duplicate requests loading[ url ] = []; loading[ url ].push( { onLoad: onLoad, onProgress: onProgress, onError: onError } ); request = new XMLHttpRequest(); request.open( 'GET', url, true ); request.addEventListener( 'load', function ( event ) { const response = this.response; const callbacks = loading[ url ]; delete loading[ url ]; if ( this.status === 200 || this.status === 0 ) { // Some browsers return HTTP Status 0 when using non-http protocol // e.g. 'file://' or 'data://'. Handle as success. if ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' ); // Add to cache only on HTTP success, so that we do not cache // error response bodies as proper responses to requests. Cache.add( url, response ); for ( let i = 0, il = callbacks.length; i < il; i ++ ) { const callback = callbacks[ i ]; if ( callback.onLoad ) callback.onLoad( response ); } scope.manager.itemEnd( url ); } else { for ( let i = 0, il = callbacks.length; i < il; i ++ ) { const callback = callbacks[ i ]; if ( callback.onError ) callback.onError( event ); } scope.manager.itemError( url ); scope.manager.itemEnd( url ); } }, false ); request.addEventListener( 'progress', function ( event ) { const callbacks = loading[ url ]; for ( let i = 0, il = callbacks.length; i < il; i ++ ) { const callback = callbacks[ i ]; if ( callback.onProgress ) callback.onProgress( event ); } }, false ); request.addEventListener( 'error', function ( event ) { const callbacks = loading[ url ]; delete loading[ url ]; for ( let i = 0, il = callbacks.length; i < il; i ++ ) { const callback = callbacks[ i ]; if ( callback.onError ) callback.onError( event ); } scope.manager.itemError( url ); scope.manager.itemEnd( url ); }, false ); request.addEventListener( 'abort', function ( event ) { const callbacks = loading[ url ]; delete loading[ url ]; for ( let i = 0, il = callbacks.length; i < il; i ++ ) { const callback = callbacks[ i ]; if ( callback.onError ) callback.onError( event ); } scope.manager.itemError( url ); scope.manager.itemEnd( url ); }, false ); if ( this.responseType !== undefined ) request.responseType = this.responseType; if ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials; if ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' ); for ( const header in this.requestHeader ) { request.setRequestHeader( header, this.requestHeader[ header ] ); } request.send( null ); } scope.manager.itemStart( url ); return request; }, setResponseType: function ( value ) { this.responseType = value; return this; }, setMimeType: function ( value ) { this.mimeType = value; return this; } } ); function AnimationLoader( manager ) { Loader.call( this, manager ); } AnimationLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: AnimationLoader, load: function ( url, onLoad, onProgress, onError ) { const scope = this; const loader = new FileLoader( scope.manager ); loader.setPath( scope.path ); loader.setRequestHeader( scope.requestHeader ); loader.setWithCredentials( scope.withCredentials ); loader.load( url, function ( text ) { try { onLoad( scope.parse( JSON.parse( text ) ) ); } catch ( e ) { if ( onError ) { onError( e ); } else { console.error( e ); } scope.manager.itemError( url ); } }, onProgress, onError ); }, parse: function ( json ) { const animations = []; for ( let i = 0; i < json.length; i ++ ) { const clip = AnimationClip.parse( json[ i ] ); animations.push( clip ); } return animations; } } ); /** * Abstract Base class to block based textures loader (dds, pvr, ...) * * Sub classes have to implement the parse() method which will be used in load(). */ function CompressedTextureLoader( manager ) { Loader.call( this, manager ); } CompressedTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: CompressedTextureLoader, load: function ( url, onLoad, onProgress, onError ) { const scope = this; const images = []; const texture = new CompressedTexture(); const loader = new FileLoader( this.manager ); loader.setPath( this.path ); loader.setResponseType( 'arraybuffer' ); loader.setRequestHeader( this.requestHeader ); loader.setWithCredentials( scope.withCredentials ); let loaded = 0; function loadTexture( i ) { loader.load( url[ i ], function ( buffer ) { const texDatas = scope.parse( buffer, true ); images[ i ] = { width: texDatas.width, height: texDatas.height, format: texDatas.format, mipmaps: texDatas.mipmaps }; loaded += 1; if ( loaded === 6 ) { if ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter; texture.image = images; texture.format = texDatas.format; texture.needsUpdate = true; if ( onLoad ) onLoad( texture ); } }, onProgress, onError ); } if ( Array.isArray( url ) ) { for ( let i = 0, il = url.length; i < il; ++ i ) { loadTexture( i ); } } else { // compressed cubemap texture stored in a single DDS file loader.load( url, function ( buffer ) { const texDatas = scope.parse( buffer, true ); if ( texDatas.isCubemap ) { const faces = texDatas.mipmaps.length / texDatas.mipmapCount; for ( let f = 0; f < faces; f ++ ) { images[ f ] = { mipmaps: [] }; for ( let i = 0; i < texDatas.mipmapCount; i ++ ) { images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] ); images[ f ].format = texDatas.format; images[ f ].width = texDatas.width; images[ f ].height = texDatas.height; } } texture.image = images; } else { texture.image.width = texDatas.width; texture.image.height = texDatas.height; texture.mipmaps = texDatas.mipmaps; } if ( texDatas.mipmapCount === 1 ) { texture.minFilter = LinearFilter; } texture.format = texDatas.format; texture.needsUpdate = true; if ( onLoad ) onLoad( texture ); }, onProgress, onError ); } return texture; } } ); function ImageLoader( manager ) { Loader.call( this, manager ); } ImageLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: ImageLoader, load: function ( url, onLoad, onProgress, onError ) { if ( this.path !== undefined ) url = this.path + url; url = this.manager.resolveURL( url ); const scope = this; const cached = Cache.get( url ); if ( cached !== undefined ) { scope.manager.itemStart( url ); setTimeout( function () { if ( onLoad ) onLoad( cached ); scope.manager.itemEnd( url ); }, 0 ); return cached; } const image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' ); function onImageLoad() { image.removeEventListener( 'load', onImageLoad, false ); image.removeEventListener( 'error', onImageError, false ); Cache.add( url, this ); if ( onLoad ) onLoad( this ); scope.manager.itemEnd( url ); } function onImageError( event ) { image.removeEventListener( 'load', onImageLoad, false ); image.removeEventListener( 'error', onImageError, false ); if ( onError ) onError( event ); scope.manager.itemError( url ); scope.manager.itemEnd( url ); } image.addEventListener( 'load', onImageLoad, false ); image.addEventListener( 'error', onImageError, false ); if ( url.substr( 0, 5 ) !== 'data:' ) { if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin; } scope.manager.itemStart( url ); image.src = url; return image; } } ); function CubeTextureLoader( manager ) { Loader.call( this, manager ); } CubeTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: CubeTextureLoader, load: function ( urls, onLoad, onProgress, onError ) { const texture = new CubeTexture(); const loader = new ImageLoader( this.manager ); loader.setCrossOrigin( this.crossOrigin ); loader.setPath( this.path ); let loaded = 0; function loadTexture( i ) { loader.load( urls[ i ], function ( image ) { texture.images[ i ] = image; loaded ++; if ( loaded === 6 ) { texture.needsUpdate = true; if ( onLoad ) onLoad( texture ); } }, undefined, onError ); } for ( let i = 0; i < urls.length; ++ i ) { loadTexture( i ); } return texture; } } ); /** * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...) * * Sub classes have to implement the parse() method which will be used in load(). */ function DataTextureLoader( manager ) { Loader.call( this, manager ); } DataTextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: DataTextureLoader, load: function ( url, onLoad, onProgress, onError ) { const scope = this; const texture = new DataTexture(); const loader = new FileLoader( this.manager ); loader.setResponseType( 'arraybuffer' ); loader.setRequestHeader( this.requestHeader ); loader.setPath( this.path ); loader.setWithCredentials( scope.withCredentials ); loader.load( url, function ( buffer ) { const texData = scope.parse( buffer ); if ( ! texData ) return; if ( texData.image !== undefined ) { texture.image = texData.image; } else if ( texData.data !== undefined ) { texture.image.width = texData.width; texture.image.height = texData.height; texture.image.data = texData.data; } texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping; texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping; texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter; texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter; texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1; if ( texData.format !== undefined ) { texture.format = texData.format; } if ( texData.type !== undefined ) { texture.type = texData.type; } if ( texData.mipmaps !== undefined ) { texture.mipmaps = texData.mipmaps; texture.minFilter = LinearMipmapLinearFilter; // presumably... } if ( texData.mipmapCount === 1 ) { texture.minFilter = LinearFilter; } texture.needsUpdate = true; if ( onLoad ) onLoad( texture, texData ); }, onProgress, onError ); return texture; } } ); function TextureLoader( manager ) { Loader.call( this, manager ); } TextureLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: TextureLoader, load: function ( url, onLoad, onProgress, onError ) { const texture = new Texture(); const loader = new ImageLoader( this.manager ); loader.setCrossOrigin( this.crossOrigin ); loader.setPath( this.path ); loader.load( url, function ( image ) { texture.image = image; // JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB. const isJPEG = url.search( /\.jpe?g($|\?)/i ) > 0 || url.search( /^data\:image\/jpeg/ ) === 0; texture.format = isJPEG ? RGBFormat : RGBAFormat; texture.needsUpdate = true; if ( onLoad !== undefined ) { onLoad( texture ); } }, onProgress, onError ); return texture; } } ); /** * Extensible curve object. * * Some common of curve methods: * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget ) * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget ) * .getPoints(), .getSpacedPoints() * .getLength() * .updateArcLengths() * * This following curves inherit from THREE.Curve: * * -- 2D curves -- * THREE.ArcCurve * THREE.CubicBezierCurve * THREE.EllipseCurve * THREE.LineCurve * THREE.QuadraticBezierCurve * THREE.SplineCurve * * -- 3D curves -- * THREE.CatmullRomCurve3 * THREE.CubicBezierCurve3 * THREE.LineCurve3 * THREE.QuadraticBezierCurve3 * * A series of curves can be represented as a THREE.CurvePath. * **/ function Curve() { this.type = 'Curve'; this.arcLengthDivisions = 200; } Object.assign( Curve.prototype, { // Virtual base class method to overwrite and implement in subclasses // - t [0 .. 1] getPoint: function ( /* t, optionalTarget */ ) { console.warn( 'THREE.Curve: .getPoint() not implemented.' ); return null; }, // Get point at relative position in curve according to arc length // - u [0 .. 1] getPointAt: function ( u, optionalTarget ) { const t = this.getUtoTmapping( u ); return this.getPoint( t, optionalTarget ); }, // Get sequence of points using getPoint( t ) getPoints: function ( divisions = 5 ) { const points = []; for ( let d = 0; d <= divisions; d ++ ) { points.push( this.getPoint( d / divisions ) ); } return points; }, // Get sequence of points using getPointAt( u ) getSpacedPoints: function ( divisions = 5 ) { const points = []; for ( let d = 0; d <= divisions; d ++ ) { points.push( this.getPointAt( d / divisions ) ); } return points; }, // Get total curve arc length getLength: function () { const lengths = this.getLengths(); return lengths[ lengths.length - 1 ]; }, // Get list of cumulative segment lengths getLengths: function ( divisions ) { if ( divisions === undefined ) divisions = this.arcLengthDivisions; if ( this.cacheArcLengths && ( this.cacheArcLengths.length === divisions + 1 ) && ! this.needsUpdate ) { return this.cacheArcLengths; } this.needsUpdate = false; const cache = []; let current, last = this.getPoint( 0 ); let sum = 0; cache.push( 0 ); for ( let p = 1; p <= divisions; p ++ ) { current = this.getPoint( p / divisions ); sum += current.distanceTo( last ); cache.push( sum ); last = current; } this.cacheArcLengths = cache; return cache; // { sums: cache, sum: sum }; Sum is in the last element. }, updateArcLengths: function () { this.needsUpdate = true; this.getLengths(); }, // Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant getUtoTmapping: function ( u, distance ) { const arcLengths = this.getLengths(); let i = 0; const il = arcLengths.length; let targetArcLength; // The targeted u distance value to get if ( distance ) { targetArcLength = distance; } else { targetArcLength = u * arcLengths[ il - 1 ]; } // binary search for the index with largest value smaller than target u distance let low = 0, high = il - 1, comparison; while ( low <= high ) { i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats comparison = arcLengths[ i ] - targetArcLength; if ( comparison < 0 ) { low = i + 1; } else if ( comparison > 0 ) { high = i - 1; } else { high = i; break; // DONE } } i = high; if ( arcLengths[ i ] === targetArcLength ) { return i / ( il - 1 ); } // we could get finer grain at lengths, or use simple interpolation between two points const lengthBefore = arcLengths[ i ]; const lengthAfter = arcLengths[ i + 1 ]; const segmentLength = lengthAfter - lengthBefore; // determine where we are between the 'before' and 'after' points const segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength; // add that fractional amount to t const t = ( i + segmentFraction ) / ( il - 1 ); return t; }, // Returns a unit vector tangent at t // In case any sub curve does not implement its tangent derivation, // 2 points a small delta apart will be used to find its gradient // which seems to give a reasonable approximation getTangent: function ( t, optionalTarget ) { const delta = 0.0001; let t1 = t - delta; let t2 = t + delta; // Capping in case of danger if ( t1 < 0 ) t1 = 0; if ( t2 > 1 ) t2 = 1; const pt1 = this.getPoint( t1 ); const pt2 = this.getPoint( t2 ); const tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() ); tangent.copy( pt2 ).sub( pt1 ).normalize(); return tangent; }, getTangentAt: function ( u, optionalTarget ) { const t = this.getUtoTmapping( u ); return this.getTangent( t, optionalTarget ); }, computeFrenetFrames: function ( segments, closed ) { // see http://www.cs.indiana.edu/pub/techreports/TR425.pdf const normal = new Vector3(); const tangents = []; const normals = []; const binormals = []; const vec = new Vector3(); const mat = new Matrix4(); // compute the tangent vectors for each segment on the curve for ( let i = 0; i <= segments; i ++ ) { const u = i / segments; tangents[ i ] = this.getTangentAt( u, new Vector3() ); tangents[ i ].normalize(); } // select an initial normal vector perpendicular to the first tangent vector, // and in the direction of the minimum tangent xyz component normals[ 0 ] = new Vector3(); binormals[ 0 ] = new Vector3(); let min = Number.MAX_VALUE; const tx = Math.abs( tangents[ 0 ].x ); const ty = Math.abs( tangents[ 0 ].y ); const tz = Math.abs( tangents[ 0 ].z ); if ( tx <= min ) { min = tx; normal.set( 1, 0, 0 ); } if ( ty <= min ) { min = ty; normal.set( 0, 1, 0 ); } if ( tz <= min ) { normal.set( 0, 0, 1 ); } vec.crossVectors( tangents[ 0 ], normal ).normalize(); normals[ 0 ].crossVectors( tangents[ 0 ], vec ); binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] ); // compute the slowly-varying normal and binormal vectors for each segment on the curve for ( let i = 1; i <= segments; i ++ ) { normals[ i ] = normals[ i - 1 ].clone(); binormals[ i ] = binormals[ i - 1 ].clone(); vec.crossVectors( tangents[ i - 1 ], tangents[ i ] ); if ( vec.length() > Number.EPSILON ) { vec.normalize(); const theta = Math.acos( MathUtils.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) ); } binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); } // if the curve is closed, postprocess the vectors so the first and last normal vectors are the same if ( closed === true ) { let theta = Math.acos( MathUtils.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) ); theta /= segments; if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) { theta = - theta; } for ( let i = 1; i <= segments; i ++ ) { // twist a little... normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) ); binormals[ i ].crossVectors( tangents[ i ], normals[ i ] ); } } return { tangents: tangents, normals: normals, binormals: binormals }; }, clone: function () { return new this.constructor().copy( this ); }, copy: function ( source ) { this.arcLengthDivisions = source.arcLengthDivisions; return this; }, toJSON: function () { const data = { metadata: { version: 4.5, type: 'Curve', generator: 'Curve.toJSON' } }; data.arcLengthDivisions = this.arcLengthDivisions; data.type = this.type; return data; }, fromJSON: function ( json ) { this.arcLengthDivisions = json.arcLengthDivisions; return this; } } ); function EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { Curve.call( this ); this.type = 'EllipseCurve'; this.aX = aX || 0; this.aY = aY || 0; this.xRadius = xRadius || 1; this.yRadius = yRadius || 1; this.aStartAngle = aStartAngle || 0; this.aEndAngle = aEndAngle || 2 * Math.PI; this.aClockwise = aClockwise || false; this.aRotation = aRotation || 0; } EllipseCurve.prototype = Object.create( Curve.prototype ); EllipseCurve.prototype.constructor = EllipseCurve; EllipseCurve.prototype.isEllipseCurve = true; EllipseCurve.prototype.getPoint = function ( t, optionalTarget ) { const point = optionalTarget || new Vector2(); const twoPi = Math.PI * 2; let deltaAngle = this.aEndAngle - this.aStartAngle; const samePoints = Math.abs( deltaAngle ) < Number.EPSILON; // ensures that deltaAngle is 0 .. 2 PI while ( deltaAngle < 0 ) deltaAngle += twoPi; while ( deltaAngle > twoPi ) deltaAngle -= twoPi; if ( deltaAngle < Number.EPSILON ) { if ( samePoints ) { deltaAngle = 0; } else { deltaAngle = twoPi; } } if ( this.aClockwise === true && ! samePoints ) { if ( deltaAngle === twoPi ) { deltaAngle = - twoPi; } else { deltaAngle = deltaAngle - twoPi; } } const angle = this.aStartAngle + t * deltaAngle; let x = this.aX + this.xRadius * Math.cos( angle ); let y = this.aY + this.yRadius * Math.sin( angle ); if ( this.aRotation !== 0 ) { const cos = Math.cos( this.aRotation ); const sin = Math.sin( this.aRotation ); const tx = x - this.aX; const ty = y - this.aY; // Rotate the point about the center of the ellipse. x = tx * cos - ty * sin + this.aX; y = tx * sin + ty * cos + this.aY; } return point.set( x, y ); }; EllipseCurve.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.aX = source.aX; this.aY = source.aY; this.xRadius = source.xRadius; this.yRadius = source.yRadius; this.aStartAngle = source.aStartAngle; this.aEndAngle = source.aEndAngle; this.aClockwise = source.aClockwise; this.aRotation = source.aRotation; return this; }; EllipseCurve.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.aX = this.aX; data.aY = this.aY; data.xRadius = this.xRadius; data.yRadius = this.yRadius; data.aStartAngle = this.aStartAngle; data.aEndAngle = this.aEndAngle; data.aClockwise = this.aClockwise; data.aRotation = this.aRotation; return data; }; EllipseCurve.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.aX = json.aX; this.aY = json.aY; this.xRadius = json.xRadius; this.yRadius = json.yRadius; this.aStartAngle = json.aStartAngle; this.aEndAngle = json.aEndAngle; this.aClockwise = json.aClockwise; this.aRotation = json.aRotation; return this; }; function ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { EllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); this.type = 'ArcCurve'; } ArcCurve.prototype = Object.create( EllipseCurve.prototype ); ArcCurve.prototype.constructor = ArcCurve; ArcCurve.prototype.isArcCurve = true; /** * Centripetal CatmullRom Curve - which is useful for avoiding * cusps and self-intersections in non-uniform catmull rom curves. * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf * * curve.type accepts centripetal(default), chordal and catmullrom * curve.tension is used for catmullrom which defaults to 0.5 */ /* Based on an optimized c++ solution in - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/ - http://ideone.com/NoEbVM This CubicPoly class could be used for reusing some variables and calculations, but for three.js curve use, it could be possible inlined and flatten into a single function call which can be placed in CurveUtils. */ function CubicPoly() { let c0 = 0, c1 = 0, c2 = 0, c3 = 0; /* * Compute coefficients for a cubic polynomial * p(s) = c0 + c1*s + c2*s^2 + c3*s^3 * such that * p(0) = x0, p(1) = x1 * and * p'(0) = t0, p'(1) = t1. */ function init( x0, x1, t0, t1 ) { c0 = x0; c1 = t0; c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1; c3 = 2 * x0 - 2 * x1 + t0 + t1; } return { initCatmullRom: function ( x0, x1, x2, x3, tension ) { init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) ); }, initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) { // compute tangents when parameterized in [t1,t2] let t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1; let t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2; // rescale tangents for parametrization in [0,1] t1 *= dt1; t2 *= dt1; init( x1, x2, t1, t2 ); }, calc: function ( t ) { const t2 = t * t; const t3 = t2 * t; return c0 + c1 * t + c2 * t2 + c3 * t3; } }; } // const tmp = new Vector3(); const px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly(); function CatmullRomCurve3( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) { Curve.call( this ); this.type = 'CatmullRomCurve3'; this.points = points; this.closed = closed; this.curveType = curveType; this.tension = tension; } CatmullRomCurve3.prototype = Object.create( Curve.prototype ); CatmullRomCurve3.prototype.constructor = CatmullRomCurve3; CatmullRomCurve3.prototype.isCatmullRomCurve3 = true; CatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { const point = optionalTarget; const points = this.points; const l = points.length; const p = ( l - ( this.closed ? 0 : 1 ) ) * t; let intPoint = Math.floor( p ); let weight = p - intPoint; if ( this.closed ) { intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l; } else if ( weight === 0 && intPoint === l - 1 ) { intPoint = l - 2; weight = 1; } let p0, p3; // 4 points (p1 & p2 defined below) if ( this.closed || intPoint > 0 ) { p0 = points[ ( intPoint - 1 ) % l ]; } else { // extrapolate first point tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] ); p0 = tmp; } const p1 = points[ intPoint % l ]; const p2 = points[ ( intPoint + 1 ) % l ]; if ( this.closed || intPoint + 2 < l ) { p3 = points[ ( intPoint + 2 ) % l ]; } else { // extrapolate last point tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] ); p3 = tmp; } if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) { // init Centripetal / Chordal Catmull-Rom const pow = this.curveType === 'chordal' ? 0.5 : 0.25; let dt0 = Math.pow( p0.distanceToSquared( p1 ), pow ); let dt1 = Math.pow( p1.distanceToSquared( p2 ), pow ); let dt2 = Math.pow( p2.distanceToSquared( p3 ), pow ); // safety check for repeated points if ( dt1 < 1e-4 ) dt1 = 1.0; if ( dt0 < 1e-4 ) dt0 = dt1; if ( dt2 < 1e-4 ) dt2 = dt1; px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 ); py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 ); pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 ); } else if ( this.curveType === 'catmullrom' ) { px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension ); py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension ); pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension ); } point.set( px.calc( weight ), py.calc( weight ), pz.calc( weight ) ); return point; }; CatmullRomCurve3.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.points = []; for ( let i = 0, l = source.points.length; i < l; i ++ ) { const point = source.points[ i ]; this.points.push( point.clone() ); } this.closed = source.closed; this.curveType = source.curveType; this.tension = source.tension; return this; }; CatmullRomCurve3.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.points = []; for ( let i = 0, l = this.points.length; i < l; i ++ ) { const point = this.points[ i ]; data.points.push( point.toArray() ); } data.closed = this.closed; data.curveType = this.curveType; data.tension = this.tension; return data; }; CatmullRomCurve3.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.points = []; for ( let i = 0, l = json.points.length; i < l; i ++ ) { const point = json.points[ i ]; this.points.push( new Vector3().fromArray( point ) ); } this.closed = json.closed; this.curveType = json.curveType; this.tension = json.tension; return this; }; /** * Bezier Curves formulas obtained from * http://en.wikipedia.org/wiki/Bézier_curve */ function CatmullRom( t, p0, p1, p2, p3 ) { const v0 = ( p2 - p0 ) * 0.5; const v1 = ( p3 - p1 ) * 0.5; const t2 = t * t; const t3 = t * t2; return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1; } // function QuadraticBezierP0( t, p ) { const k = 1 - t; return k * k * p; } function QuadraticBezierP1( t, p ) { return 2 * ( 1 - t ) * t * p; } function QuadraticBezierP2( t, p ) { return t * t * p; } function QuadraticBezier( t, p0, p1, p2 ) { return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) + QuadraticBezierP2( t, p2 ); } // function CubicBezierP0( t, p ) { const k = 1 - t; return k * k * k * p; } function CubicBezierP1( t, p ) { const k = 1 - t; return 3 * k * k * t * p; } function CubicBezierP2( t, p ) { return 3 * ( 1 - t ) * t * t * p; } function CubicBezierP3( t, p ) { return t * t * t * p; } function CubicBezier( t, p0, p1, p2, p3 ) { return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) + CubicBezierP3( t, p3 ); } function CubicBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) { Curve.call( this ); this.type = 'CubicBezierCurve'; this.v0 = v0; this.v1 = v1; this.v2 = v2; this.v3 = v3; } CubicBezierCurve.prototype = Object.create( Curve.prototype ); CubicBezierCurve.prototype.constructor = CubicBezierCurve; CubicBezierCurve.prototype.isCubicBezierCurve = true; CubicBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { const point = optionalTarget; const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; point.set( CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), CubicBezier( t, v0.y, v1.y, v2.y, v3.y ) ); return point; }; CubicBezierCurve.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.v0.copy( source.v0 ); this.v1.copy( source.v1 ); this.v2.copy( source.v2 ); this.v3.copy( source.v3 ); return this; }; CubicBezierCurve.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.v0 = this.v0.toArray(); data.v1 = this.v1.toArray(); data.v2 = this.v2.toArray(); data.v3 = this.v3.toArray(); return data; }; CubicBezierCurve.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.v0.fromArray( json.v0 ); this.v1.fromArray( json.v1 ); this.v2.fromArray( json.v2 ); this.v3.fromArray( json.v3 ); return this; }; function CubicBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) { Curve.call( this ); this.type = 'CubicBezierCurve3'; this.v0 = v0; this.v1 = v1; this.v2 = v2; this.v3 = v3; } CubicBezierCurve3.prototype = Object.create( Curve.prototype ); CubicBezierCurve3.prototype.constructor = CubicBezierCurve3; CubicBezierCurve3.prototype.isCubicBezierCurve3 = true; CubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { const point = optionalTarget; const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3; point.set( CubicBezier( t, v0.x, v1.x, v2.x, v3.x ), CubicBezier( t, v0.y, v1.y, v2.y, v3.y ), CubicBezier( t, v0.z, v1.z, v2.z, v3.z ) ); return point; }; CubicBezierCurve3.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.v0.copy( source.v0 ); this.v1.copy( source.v1 ); this.v2.copy( source.v2 ); this.v3.copy( source.v3 ); return this; }; CubicBezierCurve3.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.v0 = this.v0.toArray(); data.v1 = this.v1.toArray(); data.v2 = this.v2.toArray(); data.v3 = this.v3.toArray(); return data; }; CubicBezierCurve3.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.v0.fromArray( json.v0 ); this.v1.fromArray( json.v1 ); this.v2.fromArray( json.v2 ); this.v3.fromArray( json.v3 ); return this; }; function LineCurve( v1 = new Vector2(), v2 = new Vector2() ) { Curve.call( this ); this.type = 'LineCurve'; this.v1 = v1; this.v2 = v2; } LineCurve.prototype = Object.create( Curve.prototype ); LineCurve.prototype.constructor = LineCurve; LineCurve.prototype.isLineCurve = true; LineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { const point = optionalTarget; if ( t === 1 ) { point.copy( this.v2 ); } else { point.copy( this.v2 ).sub( this.v1 ); point.multiplyScalar( t ).add( this.v1 ); } return point; }; // Line curve is linear, so we can overwrite default getPointAt LineCurve.prototype.getPointAt = function ( u, optionalTarget ) { return this.getPoint( u, optionalTarget ); }; LineCurve.prototype.getTangent = function ( t, optionalTarget ) { const tangent = optionalTarget || new Vector2(); tangent.copy( this.v2 ).sub( this.v1 ).normalize(); return tangent; }; LineCurve.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.v1.copy( source.v1 ); this.v2.copy( source.v2 ); return this; }; LineCurve.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.v1 = this.v1.toArray(); data.v2 = this.v2.toArray(); return data; }; LineCurve.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.v1.fromArray( json.v1 ); this.v2.fromArray( json.v2 ); return this; }; function LineCurve3( v1 = new Vector3(), v2 = new Vector3() ) { Curve.call( this ); this.type = 'LineCurve3'; this.v1 = v1; this.v2 = v2; } LineCurve3.prototype = Object.create( Curve.prototype ); LineCurve3.prototype.constructor = LineCurve3; LineCurve3.prototype.isLineCurve3 = true; LineCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { const point = optionalTarget; if ( t === 1 ) { point.copy( this.v2 ); } else { point.copy( this.v2 ).sub( this.v1 ); point.multiplyScalar( t ).add( this.v1 ); } return point; }; // Line curve is linear, so we can overwrite default getPointAt LineCurve3.prototype.getPointAt = function ( u, optionalTarget ) { return this.getPoint( u, optionalTarget ); }; LineCurve3.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.v1.copy( source.v1 ); this.v2.copy( source.v2 ); return this; }; LineCurve3.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.v1 = this.v1.toArray(); data.v2 = this.v2.toArray(); return data; }; LineCurve3.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.v1.fromArray( json.v1 ); this.v2.fromArray( json.v2 ); return this; }; function QuadraticBezierCurve( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) { Curve.call( this ); this.type = 'QuadraticBezierCurve'; this.v0 = v0; this.v1 = v1; this.v2 = v2; } QuadraticBezierCurve.prototype = Object.create( Curve.prototype ); QuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve; QuadraticBezierCurve.prototype.isQuadraticBezierCurve = true; QuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { const point = optionalTarget; const v0 = this.v0, v1 = this.v1, v2 = this.v2; point.set( QuadraticBezier( t, v0.x, v1.x, v2.x ), QuadraticBezier( t, v0.y, v1.y, v2.y ) ); return point; }; QuadraticBezierCurve.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.v0.copy( source.v0 ); this.v1.copy( source.v1 ); this.v2.copy( source.v2 ); return this; }; QuadraticBezierCurve.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.v0 = this.v0.toArray(); data.v1 = this.v1.toArray(); data.v2 = this.v2.toArray(); return data; }; QuadraticBezierCurve.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.v0.fromArray( json.v0 ); this.v1.fromArray( json.v1 ); this.v2.fromArray( json.v2 ); return this; }; function QuadraticBezierCurve3( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) { Curve.call( this ); this.type = 'QuadraticBezierCurve3'; this.v0 = v0; this.v1 = v1; this.v2 = v2; } QuadraticBezierCurve3.prototype = Object.create( Curve.prototype ); QuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3; QuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true; QuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget = new Vector3() ) { const point = optionalTarget; const v0 = this.v0, v1 = this.v1, v2 = this.v2; point.set( QuadraticBezier( t, v0.x, v1.x, v2.x ), QuadraticBezier( t, v0.y, v1.y, v2.y ), QuadraticBezier( t, v0.z, v1.z, v2.z ) ); return point; }; QuadraticBezierCurve3.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.v0.copy( source.v0 ); this.v1.copy( source.v1 ); this.v2.copy( source.v2 ); return this; }; QuadraticBezierCurve3.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.v0 = this.v0.toArray(); data.v1 = this.v1.toArray(); data.v2 = this.v2.toArray(); return data; }; QuadraticBezierCurve3.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.v0.fromArray( json.v0 ); this.v1.fromArray( json.v1 ); this.v2.fromArray( json.v2 ); return this; }; function SplineCurve( points = [] ) { Curve.call( this ); this.type = 'SplineCurve'; this.points = points; } SplineCurve.prototype = Object.create( Curve.prototype ); SplineCurve.prototype.constructor = SplineCurve; SplineCurve.prototype.isSplineCurve = true; SplineCurve.prototype.getPoint = function ( t, optionalTarget = new Vector2() ) { const point = optionalTarget; const points = this.points; const p = ( points.length - 1 ) * t; const intPoint = Math.floor( p ); const weight = p - intPoint; const p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ]; const p1 = points[ intPoint ]; const p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ]; const p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ]; point.set( CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ), CatmullRom( weight, p0.y, p1.y, p2.y, p3.y ) ); return point; }; SplineCurve.prototype.copy = function ( source ) { Curve.prototype.copy.call( this, source ); this.points = []; for ( let i = 0, l = source.points.length; i < l; i ++ ) { const point = source.points[ i ]; this.points.push( point.clone() ); } return this; }; SplineCurve.prototype.toJSON = function () { const data = Curve.prototype.toJSON.call( this ); data.points = []; for ( let i = 0, l = this.points.length; i < l; i ++ ) { const point = this.points[ i ]; data.points.push( point.toArray() ); } return data; }; SplineCurve.prototype.fromJSON = function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.points = []; for ( let i = 0, l = json.points.length; i < l; i ++ ) { const point = json.points[ i ]; this.points.push( new Vector2().fromArray( point ) ); } return this; }; var Curves = /*#__PURE__*/Object.freeze({ __proto__: null, ArcCurve: ArcCurve, CatmullRomCurve3: CatmullRomCurve3, CubicBezierCurve: CubicBezierCurve, CubicBezierCurve3: CubicBezierCurve3, EllipseCurve: EllipseCurve, LineCurve: LineCurve, LineCurve3: LineCurve3, QuadraticBezierCurve: QuadraticBezierCurve, QuadraticBezierCurve3: QuadraticBezierCurve3, SplineCurve: SplineCurve }); /************************************************************** * Curved Path - a curve path is simply a array of connected * curves, but retains the api of a curve **************************************************************/ function CurvePath() { Curve.call( this ); this.type = 'CurvePath'; this.curves = []; this.autoClose = false; // Automatically closes the path } CurvePath.prototype = Object.assign( Object.create( Curve.prototype ), { constructor: CurvePath, add: function ( curve ) { this.curves.push( curve ); }, closePath: function () { // Add a line curve if start and end of lines are not connected const startPoint = this.curves[ 0 ].getPoint( 0 ); const endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 ); if ( ! startPoint.equals( endPoint ) ) { this.curves.push( new LineCurve( endPoint, startPoint ) ); } }, // To get accurate point with reference to // entire path distance at time t, // following has to be done: // 1. Length of each sub path have to be known // 2. Locate and identify type of curve // 3. Get t for the curve // 4. Return curve.getPointAt(t') getPoint: function ( t ) { const d = t * this.getLength(); const curveLengths = this.getCurveLengths(); let i = 0; // To think about boundaries points. while ( i < curveLengths.length ) { if ( curveLengths[ i ] >= d ) { const diff = curveLengths[ i ] - d; const curve = this.curves[ i ]; const segmentLength = curve.getLength(); const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength; return curve.getPointAt( u ); } i ++; } return null; // loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) { points.push( points[ 0 ] ); } return points; }, copy: function ( source ) { Curve.prototype.copy.call( this, source ); this.curves = []; for ( let i = 0, l = source.curves.length; i < l; i ++ ) { const curve = source.curves[ i ]; this.curves.push( curve.clone() ); } this.autoClose = source.autoClose; return this; }, toJSON: function () { const data = Curve.prototype.toJSON.call( this ); data.autoClose = this.autoClose; data.curves = []; for ( let i = 0, l = this.curves.length; i < l; i ++ ) { const curve = this.curves[ i ]; data.curves.push( curve.toJSON() ); } return data; }, fromJSON: function ( json ) { Curve.prototype.fromJSON.call( this, json ); this.autoClose = json.autoClose; this.curves = []; for ( let i = 0, l = json.curves.length; i < l; i ++ ) { const curve = json.curves[ i ]; this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) ); } return this; } } ); function Path( points ) { CurvePath.call( this ); this.type = 'Path'; this.currentPoint = new Vector2(); if ( points ) { this.setFromPoints( points ); } } Path.prototype = Object.assign( Object.create( CurvePath.prototype ), { constructor: Path, setFromPoints: function ( points ) { this.moveTo( points[ 0 ].x, points[ 0 ].y ); for ( let i = 1, l = points.length; i < l; i ++ ) { this.lineTo( points[ i ].x, points[ i ].y ); } return this; }, moveTo: function ( x, y ) { this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying? return this; }, lineTo: function ( x, y ) { const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) ); this.curves.push( curve ); this.currentPoint.set( x, y ); return this; }, quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { const curve = new QuadraticBezierCurve( this.currentPoint.clone(), new Vector2( aCPx, aCPy ), new Vector2( aX, aY ) ); this.curves.push( curve ); this.currentPoint.set( aX, aY ); return this; }, bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { const curve = new CubicBezierCurve( this.currentPoint.clone(), new Vector2( aCP1x, aCP1y ), new Vector2( aCP2x, aCP2y ), new Vector2( aX, aY ) ); this.curves.push( curve ); this.currentPoint.set( aX, aY ); return this; }, splineThru: function ( pts /*Array of Vector*/ ) { const npts = [ this.currentPoint.clone() ].concat( pts ); const curve = new SplineCurve( npts ); this.curves.push( curve ); this.currentPoint.copy( pts[ pts.length - 1 ] ); return this; }, arc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { const x0 = this.currentPoint.x; const y0 = this.currentPoint.y; this.absarc( aX + x0, aY + y0, aRadius, aStartAngle, aEndAngle, aClockwise ); return this; }, absarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) { this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise ); return this; }, ellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { const x0 = this.currentPoint.x; const y0 = this.currentPoint.y; this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); return this; }, absellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) { const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ); if ( this.curves.length > 0 ) { // if a previous curve is present, attempt to join const firstPoint = curve.getPoint( 0 ); if ( ! firstPoint.equals( this.currentPoint ) ) { this.lineTo( firstPoint.x, firstPoint.y ); } } this.curves.push( curve ); const lastPoint = curve.getPoint( 1 ); this.currentPoint.copy( lastPoint ); return this; }, copy: function ( source ) { CurvePath.prototype.copy.call( this, source ); this.currentPoint.copy( source.currentPoint ); return this; }, toJSON: function () { const data = CurvePath.prototype.toJSON.call( this ); data.currentPoint = this.currentPoint.toArray(); return data; }, fromJSON: function ( json ) { CurvePath.prototype.fromJSON.call( this, json ); this.currentPoint.fromArray( json.currentPoint ); return this; } } ); function Shape( points ) { Path.call( this, points ); this.uuid = MathUtils.generateUUID(); this.type = 'Shape'; this.holes = []; } Shape.prototype = Object.assign( Object.create( Path.prototype ), { constructor: Shape, getPointsHoles: function ( divisions ) { const holesPts = []; for ( let i = 0, l = this.holes.length; i < l; i ++ ) { holesPts[ i ] = this.holes[ i ].getPoints( divisions ); } return holesPts; }, // get points of shape and holes (keypoints based on segments parameter) extractPoints: function ( divisions ) { return { shape: this.getPoints( divisions ), holes: this.getPointsHoles( divisions ) }; }, copy: function ( source ) { Path.prototype.copy.call( this, source ); this.holes = []; for ( let i = 0, l = source.holes.length; i < l; i ++ ) { const hole = source.holes[ i ]; this.holes.push( hole.clone() ); } return this; }, toJSON: function () { const data = Path.prototype.toJSON.call( this ); data.uuid = this.uuid; data.holes = []; for ( let i = 0, l = this.holes.length; i < l; i ++ ) { const hole = this.holes[ i ]; data.holes.push( hole.toJSON() ); } return data; }, fromJSON: function ( json ) { Path.prototype.fromJSON.call( this, json ); this.uuid = json.uuid; this.holes = []; for ( let i = 0, l = json.holes.length; i < l; i ++ ) { const hole = json.holes[ i ]; this.holes.push( new Path().fromJSON( hole ) ); } return this; } } ); function Light( color, intensity = 1 ) { Object3D.call( this ); this.type = 'Light'; this.color = new Color( color ); this.intensity = intensity; } Light.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: Light, isLight: true, copy: function ( source ) { Object3D.prototype.copy.call( this, source ); this.color.copy( source.color ); this.intensity = source.intensity; return this; }, toJSON: function ( meta ) { const data = Object3D.prototype.toJSON.call( this, meta ); data.object.color = this.color.getHex(); data.object.intensity = this.intensity; if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex(); if ( this.distance !== undefined ) data.object.distance = this.distance; if ( this.angle !== undefined ) data.object.angle = this.angle; if ( this.decay !== undefined ) data.object.decay = this.decay; if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra; if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON(); return data; } } ); function HemisphereLight( skyColor, groundColor, intensity ) { Light.call( this, skyColor, intensity ); this.type = 'HemisphereLight'; this.position.copy( Object3D.DefaultUp ); this.updateMatrix(); this.groundColor = new Color( groundColor ); } HemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), { constructor: HemisphereLight, isHemisphereLight: true, copy: function ( source ) { Light.prototype.copy.call( this, source ); this.groundColor.copy( source.groundColor ); return this; } } ); function LightShadow( camera ) { this.camera = camera; this.bias = 0; this.normalBias = 0; this.radius = 1; this.mapSize = new Vector2( 512, 512 ); this.map = null; this.mapPass = null; this.matrix = new Matrix4(); this.autoUpdate = true; this.needsUpdate = false; this._frustum = new Frustum(); this._frameExtents = new Vector2( 1, 1 ); this._viewportCount = 1; this._viewports = [ new Vector4( 0, 0, 1, 1 ) ]; } Object.assign( LightShadow.prototype, { _projScreenMatrix: new Matrix4(), _lightPositionWorld: new Vector3(), _lookTarget: new Vector3(), getViewportCount: function () { return this._viewportCount; }, getFrustum: function () { return this._frustum; }, updateMatrices: function ( light ) { const shadowCamera = this.camera, shadowMatrix = this.matrix, projScreenMatrix = this._projScreenMatrix, lookTarget = this._lookTarget, lightPositionWorld = this._lightPositionWorld; lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); shadowCamera.position.copy( lightPositionWorld ); lookTarget.setFromMatrixPosition( light.target.matrixWorld ); shadowCamera.lookAt( lookTarget ); shadowCamera.updateMatrixWorld(); projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse ); this._frustum.setFromProjectionMatrix( projScreenMatrix ); shadowMatrix.set( 0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0 ); shadowMatrix.multiply( shadowCamera.projectionMatrix ); shadowMatrix.multiply( shadowCamera.matrixWorldInverse ); }, getViewport: function ( viewportIndex ) { return this._viewports[ viewportIndex ]; }, getFrameExtents: function () { return this._frameExtents; }, copy: function ( source ) { this.camera = source.camera.clone(); this.bias = source.bias; this.radius = source.radius; this.mapSize.copy( source.mapSize ); return this; }, clone: function () { return new this.constructor().copy( this ); }, toJSON: function () { const object = {}; if ( this.bias !== 0 ) object.bias = this.bias; if ( this.normalBias !== 0 ) object.normalBias = this.normalBias; if ( this.radius !== 1 ) object.radius = this.radius; if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray(); object.camera = this.camera.toJSON( false ).object; delete object.camera.matrix; return object; } } ); function SpotLightShadow() { LightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) ); this.focus = 1; } SpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { constructor: SpotLightShadow, isSpotLightShadow: true, updateMatrices: function ( light ) { const camera = this.camera; const fov = MathUtils.RAD2DEG * 2 * light.angle * this.focus; const aspect = this.mapSize.width / this.mapSize.height; const far = light.distance || camera.far; if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) { camera.fov = fov; camera.aspect = aspect; camera.far = far; camera.updateProjectionMatrix(); } LightShadow.prototype.updateMatrices.call( this, light ); } } ); function SpotLight( color, intensity, distance, angle, penumbra, decay ) { Light.call( this, color, intensity ); this.type = 'SpotLight'; this.position.copy( Object3D.DefaultUp ); this.updateMatrix(); this.target = new Object3D(); Object.defineProperty( this, 'power', { get: function () { // intensity = power per solid angle. // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf return this.intensity * Math.PI; }, set: function ( power ) { // intensity = power per solid angle. // ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf this.intensity = power / Math.PI; } } ); this.distance = ( distance !== undefined ) ? distance : 0; this.angle = ( angle !== undefined ) ? angle : Math.PI / 3; this.penumbra = ( penumbra !== undefined ) ? penumbra : 0; this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. this.shadow = new SpotLightShadow(); } SpotLight.prototype = Object.assign( Object.create( Light.prototype ), { constructor: SpotLight, isSpotLight: true, copy: function ( source ) { Light.prototype.copy.call( this, source ); this.distance = source.distance; this.angle = source.angle; this.penumbra = source.penumbra; this.decay = source.decay; this.target = source.target.clone(); this.shadow = source.shadow.clone(); return this; } } ); function PointLightShadow() { LightShadow.call( this, new PerspectiveCamera( 90, 1, 0.5, 500 ) ); this._frameExtents = new Vector2( 4, 2 ); this._viewportCount = 6; this._viewports = [ // These viewports map a cube-map onto a 2D texture with the // following orientation: // // xzXZ // y Y // // X - Positive x direction // x - Negative x direction // Y - Positive y direction // y - Negative y direction // Z - Positive z direction // z - Negative z direction // positive X new Vector4( 2, 1, 1, 1 ), // negative X new Vector4( 0, 1, 1, 1 ), // positive Z new Vector4( 3, 1, 1, 1 ), // negative Z new Vector4( 1, 1, 1, 1 ), // positive Y new Vector4( 3, 0, 1, 1 ), // negative Y new Vector4( 1, 0, 1, 1 ) ]; this._cubeDirections = [ new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 ) ]; this._cubeUps = [ new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ), new Vector3( 0, 0, - 1 ) ]; } PointLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { constructor: PointLightShadow, isPointLightShadow: true, updateMatrices: function ( light, viewportIndex = 0 ) { const camera = this.camera, shadowMatrix = this.matrix, lightPositionWorld = this._lightPositionWorld, lookTarget = this._lookTarget, projScreenMatrix = this._projScreenMatrix; lightPositionWorld.setFromMatrixPosition( light.matrixWorld ); camera.position.copy( lightPositionWorld ); lookTarget.copy( camera.position ); lookTarget.add( this._cubeDirections[ viewportIndex ] ); camera.up.copy( this._cubeUps[ viewportIndex ] ); camera.lookAt( lookTarget ); camera.updateMatrixWorld(); shadowMatrix.makeTranslation( - lightPositionWorld.x, - lightPositionWorld.y, - lightPositionWorld.z ); projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse ); this._frustum.setFromProjectionMatrix( projScreenMatrix ); } } ); function PointLight( color, intensity, distance, decay ) { Light.call( this, color, intensity ); this.type = 'PointLight'; Object.defineProperty( this, 'power', { get: function () { // intensity = power per solid angle. // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf return this.intensity * 4 * Math.PI; }, set: function ( power ) { // intensity = power per solid angle. // ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf this.intensity = power / ( 4 * Math.PI ); } } ); this.distance = ( distance !== undefined ) ? distance : 0; this.decay = ( decay !== undefined ) ? decay : 1; // for physically correct lights, should be 2. this.shadow = new PointLightShadow(); } PointLight.prototype = Object.assign( Object.create( Light.prototype ), { constructor: PointLight, isPointLight: true, copy: function ( source ) { Light.prototype.copy.call( this, source ); this.distance = source.distance; this.decay = source.decay; this.shadow = source.shadow.clone(); return this; } } ); function OrthographicCamera( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) { Camera.call( this ); this.type = 'OrthographicCamera'; this.zoom = 1; this.view = null; this.left = left; this.right = right; this.top = top; this.bottom = bottom; this.near = near; this.far = far; this.updateProjectionMatrix(); } OrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), { constructor: OrthographicCamera, isOrthographicCamera: true, copy: function ( source, recursive ) { Camera.prototype.copy.call( this, source, recursive ); this.left = source.left; this.right = source.right; this.top = source.top; this.bottom = source.bottom; this.near = source.near; this.far = source.far; this.zoom = source.zoom; this.view = source.view === null ? null : Object.assign( {}, source.view ); return this; }, setViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) { if ( this.view === null ) { this.view = { enabled: true, fullWidth: 1, fullHeight: 1, offsetX: 0, offsetY: 0, width: 1, height: 1 }; } this.view.enabled = true; this.view.fullWidth = fullWidth; this.view.fullHeight = fullHeight; this.view.offsetX = x; this.view.offsetY = y; this.view.width = width; this.view.height = height; this.updateProjectionMatrix(); }, clearViewOffset: function () { if ( this.view !== null ) { this.view.enabled = false; } this.updateProjectionMatrix(); }, updateProjectionMatrix: function () { const dx = ( this.right - this.left ) / ( 2 * this.zoom ); const dy = ( this.top - this.bottom ) / ( 2 * this.zoom ); const cx = ( this.right + this.left ) / 2; const cy = ( this.top + this.bottom ) / 2; let left = cx - dx; let right = cx + dx; let top = cy + dy; let bottom = cy - dy; if ( this.view !== null && this.view.enabled ) { const scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom; const scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom; left += scaleW * this.view.offsetX; right = left + scaleW * this.view.width; top -= scaleH * this.view.offsetY; bottom = top - scaleH * this.view.height; } this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far ); this.projectionMatrixInverse.copy( this.projectionMatrix ).invert(); }, toJSON: function ( meta ) { const data = Object3D.prototype.toJSON.call( this, meta ); data.object.zoom = this.zoom; data.object.left = this.left; data.object.right = this.right; data.object.top = this.top; data.object.bottom = this.bottom; data.object.near = this.near; data.object.far = this.far; if ( this.view !== null ) data.object.view = Object.assign( {}, this.view ); return data; } } ); function DirectionalLightShadow() { LightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) ); } DirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), { constructor: DirectionalLightShadow, isDirectionalLightShadow: true, updateMatrices: function ( light ) { LightShadow.prototype.updateMatrices.call( this, light ); } } ); function DirectionalLight( color, intensity ) { Light.call( this, color, intensity ); this.type = 'DirectionalLight'; this.position.copy( Object3D.DefaultUp ); this.updateMatrix(); this.target = new Object3D(); this.shadow = new DirectionalLightShadow(); } DirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), { constructor: DirectionalLight, isDirectionalLight: true, copy: function ( source ) { Light.prototype.copy.call( this, source ); this.target = source.target.clone(); this.shadow = source.shadow.clone(); return this; } } ); function AmbientLight( color, intensity ) { Light.call( this, color, intensity ); this.type = 'AmbientLight'; } AmbientLight.prototype = Object.assign( Object.create( Light.prototype ), { constructor: AmbientLight, isAmbientLight: true } ); function RectAreaLight( color, intensity, width, height ) { Light.call( this, color, intensity ); this.type = 'RectAreaLight'; this.width = ( width !== undefined ) ? width : 10; this.height = ( height !== undefined ) ? height : 10; } RectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), { constructor: RectAreaLight, isRectAreaLight: true, copy: function ( source ) { Light.prototype.copy.call( this, source ); this.width = source.width; this.height = source.height; return this; }, toJSON: function ( meta ) { const data = Light.prototype.toJSON.call( this, meta ); data.object.width = this.width; data.object.height = this.height; return data; } } ); /** * Primary reference: * https://graphics.stanford.edu/papers/envmap/envmap.pdf * * Secondary reference: * https://www.ppsloan.org/publications/StupidSH36.pdf */ // 3-band SH defined by 9 coefficients class SphericalHarmonics3 { constructor() { Object.defineProperty( this, 'isSphericalHarmonics3', { value: true } ); this.coefficients = []; for ( let i = 0; i < 9; i ++ ) { this.coefficients.push( new Vector3() ); } } set( coefficients ) { for ( let i = 0; i < 9; i ++ ) { this.coefficients[ i ].copy( coefficients[ i ] ); } return this; } zero() { for ( let i = 0; i < 9; i ++ ) { this.coefficients[ i ].set( 0, 0, 0 ); } return this; } // get the radiance in the direction of the normal // target is a Vector3 getAt( normal, target ) { // normal is assumed to be unit length const x = normal.x, y = normal.y, z = normal.z; const coeff = this.coefficients; // band 0 target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 ); // band 1 target.addScaledVector( coeff[ 1 ], 0.488603 * y ); target.addScaledVector( coeff[ 2 ], 0.488603 * z ); target.addScaledVector( coeff[ 3 ], 0.488603 * x ); // band 2 target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) ); target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) ); target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) ); target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) ); target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) ); return target; } // get the irradiance (radiance convolved with cosine lobe) in the direction of the normal // target is a Vector3 // https://graphics.stanford.edu/papers/envmap/envmap.pdf getIrradianceAt( normal, target ) { // normal is assumed to be unit length const x = normal.x, y = normal.y, z = normal.z; const coeff = this.coefficients; // band 0 target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095 // band 1 target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603 target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z ); target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x ); // band 2 target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548 target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z ); target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3 target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z ); target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274 return target; } add( sh ) { for ( let i = 0; i < 9; i ++ ) { this.coefficients[ i ].add( sh.coefficients[ i ] ); } return this; } addScaledSH( sh, s ) { for ( let i = 0; i < 9; i ++ ) { this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s ); } return this; } scale( s ) { for ( let i = 0; i < 9; i ++ ) { this.coefficients[ i ].multiplyScalar( s ); } return this; } lerp( sh, alpha ) { for ( let i = 0; i < 9; i ++ ) { this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha ); } return this; } equals( sh ) { for ( let i = 0; i < 9; i ++ ) { if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) { return false; } } return true; } copy( sh ) { return this.set( sh.coefficients ); } clone() { return new this.constructor().copy( this ); } fromArray( array, offset = 0 ) { const coefficients = this.coefficients; for ( let i = 0; i < 9; i ++ ) { coefficients[ i ].fromArray( array, offset + ( i * 3 ) ); } return this; } toArray( array = [], offset = 0 ) { const coefficients = this.coefficients; for ( let i = 0; i < 9; i ++ ) { coefficients[ i ].toArray( array, offset + ( i * 3 ) ); } return array; } // evaluate the basis functions // shBasis is an Array[ 9 ] static getBasisAt( normal, shBasis ) { // normal is assumed to be unit length const x = normal.x, y = normal.y, z = normal.z; // band 0 shBasis[ 0 ] = 0.282095; // band 1 shBasis[ 1 ] = 0.488603 * y; shBasis[ 2 ] = 0.488603 * z; shBasis[ 3 ] = 0.488603 * x; // band 2 shBasis[ 4 ] = 1.092548 * x * y; shBasis[ 5 ] = 1.092548 * y * z; shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 ); shBasis[ 7 ] = 1.092548 * x * z; shBasis[ 8 ] = 0.546274 * ( x * x - y * y ); } } function LightProbe( sh, intensity ) { Light.call( this, undefined, intensity ); this.type = 'LightProbe'; this.sh = ( sh !== undefined ) ? sh : new SphericalHarmonics3(); } LightProbe.prototype = Object.assign( Object.create( Light.prototype ), { constructor: LightProbe, isLightProbe: true, copy: function ( source ) { Light.prototype.copy.call( this, source ); this.sh.copy( source.sh ); return this; }, fromJSON: function ( json ) { this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON(); this.sh.fromArray( json.sh ); return this; }, toJSON: function ( meta ) { const data = Light.prototype.toJSON.call( this, meta ); data.object.sh = this.sh.toArray(); return data; } } ); function MaterialLoader( manager ) { Loader.call( this, manager ); this.textures = {}; } MaterialLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: MaterialLoader, load: function ( url, onLoad, onProgress, onError ) { const scope = this; const loader = new FileLoader( scope.manager ); loader.setPath( scope.path ); loader.setRequestHeader( scope.requestHeader ); loader.setWithCredentials( scope.withCredentials ); loader.load( url, function ( text ) { try { onLoad( scope.parse( JSON.parse( text ) ) ); } catch ( e ) { if ( onError ) { onError( e ); } else { console.error( e ); } scope.manager.itemError( url ); } }, onProgress, onError ); }, parse: function ( json ) { const textures = this.textures; function getTexture( name ) { if ( textures[ name ] === undefined ) { console.warn( 'THREE.MaterialLoader: Undefined texture', name ); } return textures[ name ]; } const material = new Materials[ json.type ](); if ( json.uuid !== undefined ) material.uuid = json.uuid; if ( json.name !== undefined ) material.name = json.name; if ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color ); if ( json.roughness !== undefined ) material.roughness = json.roughness; if ( json.metalness !== undefined ) material.metalness = json.metalness; if ( json.sheen !== undefined ) material.sheen = new Color().setHex( json.sheen ); if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive ); if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular ); if ( json.shininess !== undefined ) material.shininess = json.shininess; if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat; if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness; if ( json.fog !== undefined ) material.fog = json.fog; if ( json.flatShading !== undefined ) material.flatShading = json.flatShading; if ( json.blending !== undefined ) material.blending = json.blending; if ( json.combine !== undefined ) material.combine = json.combine; if ( json.side !== undefined ) material.side = json.side; if ( json.opacity !== undefined ) material.opacity = json.opacity; if ( json.transparent !== undefined ) material.transparent = json.transparent; if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest; if ( json.depthTest !== undefined ) material.depthTest = json.depthTest; if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite; if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite; if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite; if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask; if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc; if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef; if ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask; if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail; if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail; if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass; if ( json.wireframe !== undefined ) material.wireframe = json.wireframe; if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth; if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap; if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin; if ( json.rotation !== undefined ) material.rotation = json.rotation; if ( json.linewidth !== 1 ) material.linewidth = json.linewidth; if ( json.dashSize !== undefined ) material.dashSize = json.dashSize; if ( json.gapSize !== undefined ) material.gapSize = json.gapSize; if ( json.scale !== undefined ) material.scale = json.scale; if ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset; if ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor; if ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits; if ( json.skinning !== undefined ) material.skinning = json.skinning; if ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets; if ( json.morphNormals !== undefined ) material.morphNormals = json.morphNormals; if ( json.dithering !== undefined ) material.dithering = json.dithering; if ( json.vertexTangents !== undefined ) material.vertexTangents = json.vertexTangents; if ( json.visible !== undefined ) material.visible = json.visible; if ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped; if ( json.userData !== undefined ) material.userData = json.userData; if ( json.vertexColors !== undefined ) { if ( typeof json.vertexColors === 'number' ) { material.vertexColors = ( json.vertexColors > 0 ) ? true : false; } else { material.vertexColors = json.vertexColors; } } // Shader Material if ( json.uniforms !== undefined ) { for ( const name in json.uniforms ) { const uniform = json.uniforms[ name ]; material.uniforms[ name ] = {}; switch ( uniform.type ) { case 't': material.uniforms[ name ].value = getTexture( uniform.value ); break; case 'c': material.uniforms[ name ].value = new Color().setHex( uniform.value ); break; case 'v2': material.uniforms[ name ].value = new Vector2().fromArray( uniform.value ); break; case 'v3': material.uniforms[ name ].value = new Vector3().fromArray( uniform.value ); break; case 'v4': material.uniforms[ name ].value = new Vector4().fromArray( uniform.value ); break; case 'm3': material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value ); break; case 'm4': material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value ); break; default: material.uniforms[ name ].value = uniform.value; } } } if ( json.defines !== undefined ) material.defines = json.defines; if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader; if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader; if ( json.extensions !== undefined ) { for ( const key in json.extensions ) { material.extensions[ key ] = json.extensions[ key ]; } } // Deprecated if ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading // for PointsMaterial if ( json.size !== undefined ) material.size = json.size; if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation; // maps if ( json.map !== undefined ) material.map = getTexture( json.map ); if ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap ); if ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap ); if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap ); if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale; if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap ); if ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType; if ( json.normalScale !== undefined ) { let normalScale = json.normalScale; if ( Array.isArray( normalScale ) === false ) { // Blender exporter used to export a scalar. See #7459 normalScale = [ normalScale, normalScale ]; } material.normalScale = new Vector2().fromArray( normalScale ); } if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap ); if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale; if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias; if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap ); if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap ); if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap ); if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity; if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap ); if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap ); if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity; if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity; if ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio; if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap ); if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity; if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap ); if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity; if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap ); if ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap ); if ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap ); if ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap ); if ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale ); if ( json.transmission !== undefined ) material.transmission = json.transmission; if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap ); return material; }, setTextures: function ( value ) { this.textures = value; return this; } } ); const LoaderUtils = { decodeText: function ( array ) { if ( typeof TextDecoder !== 'undefined' ) { return new TextDecoder().decode( array ); } // Avoid the String.fromCharCode.apply(null, array) shortcut, which // throws a "maximum call stack size exceeded" error for large arrays. let s = ''; for ( let i = 0, il = array.length; i < il; i ++ ) { // Implicitly assumes little-endian. s += String.fromCharCode( array[ i ] ); } try { // merges multi-byte utf-8 characters. return decodeURIComponent( escape( s ) ); } catch ( e ) { // see #16358 return s; } }, extractUrlBase: function ( url ) { const index = url.lastIndexOf( '/' ); if ( index === - 1 ) return './'; return url.substr( 0, index + 1 ); } }; function InstancedBufferGeometry() { BufferGeometry.call( this ); this.type = 'InstancedBufferGeometry'; this.instanceCount = Infinity; } InstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), { constructor: InstancedBufferGeometry, isInstancedBufferGeometry: true, copy: function ( source ) { BufferGeometry.prototype.copy.call( this, source ); this.instanceCount = source.instanceCount; return this; }, clone: function () { return new this.constructor().copy( this ); }, toJSON: function () { const data = BufferGeometry.prototype.toJSON.call( this ); data.instanceCount = this.instanceCount; data.isInstancedBufferGeometry = true; return data; } } ); function InstancedBufferAttribute( array, itemSize, normalized, meshPerAttribute ) { if ( typeof ( normalized ) === 'number' ) { meshPerAttribute = normalized; normalized = false; console.error( 'THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.' ); } BufferAttribute.call( this, array, itemSize, normalized ); this.meshPerAttribute = meshPerAttribute || 1; } InstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), { constructor: InstancedBufferAttribute, isInstancedBufferAttribute: true, copy: function ( source ) { BufferAttribute.prototype.copy.call( this, source ); this.meshPerAttribute = source.meshPerAttribute; return this; }, toJSON: function () { const data = BufferAttribute.prototype.toJSON.call( this ); data.meshPerAttribute = this.meshPerAttribute; data.isInstancedBufferAttribute = true; return data; } } ); function BufferGeometryLoader( manager ) { Loader.call( this, manager ); } BufferGeometryLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: BufferGeometryLoader, load: function ( url, onLoad, onProgress, onError ) { const scope = this; const loader = new FileLoader( scope.manager ); loader.setPath( scope.path ); loader.setRequestHeader( scope.requestHeader ); loader.setWithCredentials( scope.withCredentials ); loader.load( url, function ( text ) { try { onLoad( scope.parse( JSON.parse( text ) ) ); } catch ( e ) { if ( onError ) { onError( e ); } else { console.error( e ); } scope.manager.itemError( url ); } }, onProgress, onError ); }, parse: function ( json ) { const interleavedBufferMap = {}; const arrayBufferMap = {}; function getInterleavedBuffer( json, uuid ) { if ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ]; const interleavedBuffers = json.interleavedBuffers; const interleavedBuffer = interleavedBuffers[ uuid ]; const buffer = getArrayBuffer( json, interleavedBuffer.buffer ); const array = getTypedArray( interleavedBuffer.type, buffer ); const ib = new InterleavedBuffer( array, interleavedBuffer.stride ); ib.uuid = interleavedBuffer.uuid; interleavedBufferMap[ uuid ] = ib; return ib; } function getArrayBuffer( json, uuid ) { if ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ]; const arrayBuffers = json.arrayBuffers; const arrayBuffer = arrayBuffers[ uuid ]; const ab = new Uint32Array( arrayBuffer ).buffer; arrayBufferMap[ uuid ] = ab; return ab; } const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry(); const index = json.data.index; if ( index !== undefined ) { const typedArray = getTypedArray( index.type, index.array ); geometry.setIndex( new BufferAttribute( typedArray, 1 ) ); } const attributes = json.data.attributes; for ( const key in attributes ) { const attribute = attributes[ key ]; let bufferAttribute; if ( attribute.isInterleavedBufferAttribute ) { const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); } else { const typedArray = getTypedArray( attribute.type, attribute.array ); const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute; bufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized ); } if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; geometry.setAttribute( key, bufferAttribute ); } const morphAttributes = json.data.morphAttributes; if ( morphAttributes ) { for ( const key in morphAttributes ) { const attributeArray = morphAttributes[ key ]; const array = []; for ( let i = 0, il = attributeArray.length; i < il; i ++ ) { const attribute = attributeArray[ i ]; let bufferAttribute; if ( attribute.isInterleavedBufferAttribute ) { const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data ); bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized ); } else { const typedArray = getTypedArray( attribute.type, attribute.array ); bufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ); } if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name; array.push( bufferAttribute ); } geometry.morphAttributes[ key ] = array; } } const morphTargetsRelative = json.data.morphTargetsRelative; if ( morphTargetsRelative ) { geometry.morphTargetsRelative = true; } const groups = json.data.groups || json.data.drawcalls || json.data.offsets; if ( groups !== undefined ) { for ( let i = 0, n = groups.length; i !== n; ++ i ) { const group = groups[ i ]; geometry.addGroup( group.start, group.count, group.materialIndex ); } } const boundingSphere = json.data.boundingSphere; if ( boundingSphere !== undefined ) { const center = new Vector3(); if ( boundingSphere.center !== undefined ) { center.fromArray( boundingSphere.center ); } geometry.boundingSphere = new Sphere( center, boundingSphere.radius ); } if ( json.name ) geometry.name = json.name; if ( json.userData ) geometry.userData = json.userData; return geometry; } } ); class ObjectLoader extends Loader { constructor( manager ) { super( manager ); } load( url, onLoad, onProgress, onError ) { const scope = this; const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path; this.resourcePath = this.resourcePath || path; const loader = new FileLoader( this.manager ); loader.setPath( this.path ); loader.setRequestHeader( this.requestHeader ); loader.setWithCredentials( this.withCredentials ); loader.load( url, function ( text ) { let json = null; try { json = JSON.parse( text ); } catch ( error ) { if ( onError !== undefined ) onError( error ); console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message ); return; } const metadata = json.metadata; if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) { console.error( 'THREE.ObjectLoader: Can\'t load ' + url ); return; } scope.parse( json, onLoad ); }, onProgress, onError ); } parse( json, onLoad ) { const animations = this.parseAnimations( json.animations ); const shapes = this.parseShapes( json.shapes ); const geometries = this.parseGeometries( json.geometries, shapes ); const images = this.parseImages( json.images, function () { if ( onLoad !== undefined ) onLoad( object ); } ); const textures = this.parseTextures( json.textures, images ); const materials = this.parseMaterials( json.materials, textures ); const object = this.parseObject( json.object, geometries, materials, animations ); const skeletons = this.parseSkeletons( json.skeletons, object ); this.bindSkeletons( object, skeletons ); // if ( onLoad !== undefined ) { let hasImages = false; for ( const uuid in images ) { if ( images[ uuid ] instanceof HTMLImageElement ) { hasImages = true; break; } } if ( hasImages === false ) onLoad( object ); } return object; } parseShapes( json ) { const shapes = {}; if ( json !== undefined ) { for ( let i = 0, l = json.length; i < l; i ++ ) { const shape = new Shape().fromJSON( json[ i ] ); shapes[ shape.uuid ] = shape; } } return shapes; } parseSkeletons( json, object ) { const skeletons = {}; const bones = {}; // generate bone lookup table object.traverse( function ( child ) { if ( child.isBone ) bones[ child.uuid ] = child; } ); // create skeletons if ( json !== undefined ) { for ( let i = 0, l = json.length; i < l; i ++ ) { const skeleton = new Skeleton().fromJSON( json[ i ], bones ); skeletons[ skeleton.uuid ] = skeleton; } } return skeletons; } parseGeometries( json, shapes ) { const geometries = {}; let geometryShapes; if ( json !== undefined ) { const bufferGeometryLoader = new BufferGeometryLoader(); for ( let i = 0, l = json.length; i < l; i ++ ) { let geometry; const data = json[ i ]; switch ( data.type ) { case 'PlaneGeometry': case 'PlaneBufferGeometry': geometry = new Geometries[ data.type ]( data.width, data.height, data.widthSegments, data.heightSegments ); break; case 'BoxGeometry': case 'BoxBufferGeometry': case 'CubeGeometry': // backwards compatible geometry = new Geometries[ data.type ]( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments ); break; case 'CircleGeometry': case 'CircleBufferGeometry': geometry = new Geometries[ data.type ]( data.radius, data.segments, data.thetaStart, data.thetaLength ); break; case 'CylinderGeometry': case 'CylinderBufferGeometry': geometry = new Geometries[ data.type ]( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); break; case 'ConeGeometry': case 'ConeBufferGeometry': geometry = new Geometries[ data.type ]( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength ); break; case 'SphereGeometry': case 'SphereBufferGeometry': geometry = new Geometries[ data.type ]( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength ); break; case 'DodecahedronGeometry': case 'DodecahedronBufferGeometry': case 'IcosahedronGeometry': case 'IcosahedronBufferGeometry': case 'OctahedronGeometry': case 'OctahedronBufferGeometry': case 'TetrahedronGeometry': case 'TetrahedronBufferGeometry': geometry = new Geometries[ data.type ]( data.radius, data.detail ); break; case 'RingGeometry': case 'RingBufferGeometry': geometry = new Geometries[ data.type ]( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength ); break; case 'TorusGeometry': case 'TorusBufferGeometry': geometry = new Geometries[ data.type ]( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc ); break; case 'TorusKnotGeometry': case 'TorusKnotBufferGeometry': geometry = new Geometries[ data.type ]( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q ); break; case 'TubeGeometry': case 'TubeBufferGeometry': // This only works for built-in curves (e.g. CatmullRomCurve3). // User defined curves or instances of CurvePath will not be deserialized. geometry = new Geometries[ data.type ]( new Curves[ data.path.type ]().fromJSON( data.path ), data.tubularSegments, data.radius, data.radialSegments, data.closed ); break; case 'LatheGeometry': case 'LatheBufferGeometry': geometry = new Geometries[ data.type ]( data.points, data.segments, data.phiStart, data.phiLength ); break; case 'PolyhedronGeometry': case 'PolyhedronBufferGeometry': geometry = new Geometries[ data.type ]( data.vertices, data.indices, data.radius, data.details ); break; case 'ShapeGeometry': case 'ShapeBufferGeometry': geometryShapes = []; for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { const shape = shapes[ data.shapes[ j ] ]; geometryShapes.push( shape ); } geometry = new Geometries[ data.type ]( geometryShapes, data.curveSegments ); break; case 'ExtrudeGeometry': case 'ExtrudeBufferGeometry': geometryShapes = []; for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) { const shape = shapes[ data.shapes[ j ] ]; geometryShapes.push( shape ); } const extrudePath = data.options.extrudePath; if ( extrudePath !== undefined ) { data.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath ); } geometry = new Geometries[ data.type ]( geometryShapes, data.options ); break; case 'BufferGeometry': case 'InstancedBufferGeometry': geometry = bufferGeometryLoader.parse( data ); break; case 'Geometry': console.error( 'THREE.ObjectLoader: Loading "Geometry" is not supported anymore.' ); break; default: console.warn( 'THREE.ObjectLoader: Unsupported geometry type "' + data.type + '"' ); continue; } geometry.uuid = data.uuid; if ( data.name !== undefined ) geometry.name = data.name; if ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData; geometries[ data.uuid ] = geometry; } } return geometries; } parseMaterials( json, textures ) { const cache = {}; // MultiMaterial const materials = {}; if ( json !== undefined ) { const loader = new MaterialLoader(); loader.setTextures( textures ); for ( let i = 0, l = json.length; i < l; i ++ ) { const data = json[ i ]; if ( data.type === 'MultiMaterial' ) { // Deprecated const array = []; for ( let j = 0; j < data.materials.length; j ++ ) { const material = data.materials[ j ]; if ( cache[ material.uuid ] === undefined ) { cache[ material.uuid ] = loader.parse( material ); } array.push( cache[ material.uuid ] ); } materials[ data.uuid ] = array; } else { if ( cache[ data.uuid ] === undefined ) { cache[ data.uuid ] = loader.parse( data ); } materials[ data.uuid ] = cache[ data.uuid ]; } } } return materials; } parseAnimations( json ) { const animations = {}; if ( json !== undefined ) { for ( let i = 0; i < json.length; i ++ ) { const data = json[ i ]; const clip = AnimationClip.parse( data ); animations[ clip.uuid ] = clip; } } return animations; } parseImages( json, onLoad ) { const scope = this; const images = {}; let loader; function loadImage( url ) { scope.manager.itemStart( url ); return loader.load( url, function () { scope.manager.itemEnd( url ); }, undefined, function () { scope.manager.itemError( url ); scope.manager.itemEnd( url ); } ); } function deserializeImage( image ) { if ( typeof image === 'string' ) { const url = image; const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url; return loadImage( path ); } else { if ( image.data ) { return { data: getTypedArray( image.type, image.data ), width: image.width, height: image.height }; } else { return null; } } } if ( json !== undefined && json.length > 0 ) { const manager = new LoadingManager( onLoad ); loader = new ImageLoader( manager ); loader.setCrossOrigin( this.crossOrigin ); for ( let i = 0, il = json.length; i < il; i ++ ) { const image = json[ i ]; const url = image.url; if ( Array.isArray( url ) ) { // load array of images e.g CubeTexture images[ image.uuid ] = []; for ( let j = 0, jl = url.length; j < jl; j ++ ) { const currentUrl = url[ j ]; const deserializedImage = deserializeImage( currentUrl ); if ( deserializedImage !== null ) { if ( deserializedImage instanceof HTMLImageElement ) { images[ image.uuid ].push( deserializedImage ); } else { // special case: handle array of data textures for cube textures images[ image.uuid ].push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) ); } } } } else { // load single image const deserializedImage = deserializeImage( image.url ); if ( deserializedImage !== null ) { images[ image.uuid ] = deserializedImage; } } } } return images; } parseTextures( json, images ) { function parseConstant( value, type ) { if ( typeof value === 'number' ) return value; console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value ); return type[ value ]; } const textures = {}; if ( json !== undefined ) { for ( let i = 0, l = json.length; i < l; i ++ ) { const data = json[ i ]; if ( data.image === undefined ) { console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid ); } if ( images[ data.image ] === undefined ) { console.warn( 'THREE.ObjectLoader: Undefined image', data.image ); } let texture; const image = images[ data.image ]; if ( Array.isArray( image ) ) { texture = new CubeTexture( image ); if ( image.length === 6 ) texture.needsUpdate = true; } else { if ( image && image.data ) { texture = new DataTexture( image.data, image.width, image.height ); } else { texture = new Texture( image ); } if ( image ) texture.needsUpdate = true; // textures can have undefined image data } texture.uuid = data.uuid; if ( data.name !== undefined ) texture.name = data.name; if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING ); if ( data.offset !== undefined ) texture.offset.fromArray( data.offset ); if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat ); if ( data.center !== undefined ) texture.center.fromArray( data.center ); if ( data.rotation !== undefined ) texture.rotation = data.rotation; if ( data.wrap !== undefined ) { texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING ); texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING ); } if ( data.format !== undefined ) texture.format = data.format; if ( data.type !== undefined ) texture.type = data.type; if ( data.encoding !== undefined ) texture.encoding = data.encoding; if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER ); if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER ); if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy; if ( data.flipY !== undefined ) texture.flipY = data.flipY; if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha; if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment; textures[ data.uuid ] = texture; } } return textures; } parseObject( data, geometries, materials, animations ) { let object; function getGeometry( name ) { if ( geometries[ name ] === undefined ) { console.warn( 'THREE.ObjectLoader: Undefined geometry', name ); } return geometries[ name ]; } function getMaterial( name ) { if ( name === undefined ) return undefined; if ( Array.isArray( name ) ) { const array = []; for ( let i = 0, l = name.length; i < l; i ++ ) { const uuid = name[ i ]; if ( materials[ uuid ] === undefined ) { console.warn( 'THREE.ObjectLoader: Undefined material', uuid ); } array.push( materials[ uuid ] ); } return array; } if ( materials[ name ] === undefined ) { console.warn( 'THREE.ObjectLoader: Undefined material', name ); } return materials[ name ]; } let geometry, material; switch ( data.type ) { case 'Scene': object = new Scene(); if ( data.background !== undefined ) { if ( Number.isInteger( data.background ) ) { object.background = new Color( data.background ); } } if ( data.fog !== undefined ) { if ( data.fog.type === 'Fog' ) { object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far ); } else if ( data.fog.type === 'FogExp2' ) { object.fog = new FogExp2( data.fog.color, data.fog.density ); } } break; case 'PerspectiveCamera': object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far ); if ( data.focus !== undefined ) object.focus = data.focus; if ( data.zoom !== undefined ) object.zoom = data.zoom; if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge; if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset; if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); break; case 'OrthographicCamera': object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far ); if ( data.zoom !== undefined ) object.zoom = data.zoom; if ( data.view !== undefined ) object.view = Object.assign( {}, data.view ); break; case 'AmbientLight': object = new AmbientLight( data.color, data.intensity ); break; case 'DirectionalLight': object = new DirectionalLight( data.color, data.intensity ); break; case 'PointLight': object = new PointLight( data.color, data.intensity, data.distance, data.decay ); break; case 'RectAreaLight': object = new RectAreaLight( data.color, data.intensity, data.width, data.height ); break; case 'SpotLight': object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay ); break; case 'HemisphereLight': object = new HemisphereLight( data.color, data.groundColor, data.intensity ); break; case 'LightProbe': object = new LightProbe().fromJSON( data ); break; case 'SkinnedMesh': geometry = getGeometry( data.geometry ); material = getMaterial( data.material ); object = new SkinnedMesh( geometry, material ); if ( data.bindMode !== undefined ) object.bindMode = data.bindMode; if ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix ); if ( data.skeleton !== undefined ) object.skeleton = data.skeleton; break; case 'Mesh': geometry = getGeometry( data.geometry ); material = getMaterial( data.material ); object = new Mesh( geometry, material ); break; case 'InstancedMesh': geometry = getGeometry( data.geometry ); material = getMaterial( data.material ); const count = data.count; const instanceMatrix = data.instanceMatrix; object = new InstancedMesh( geometry, material, count ); object.instanceMatrix = new BufferAttribute( new Float32Array( instanceMatrix.array ), 16 ); break; case 'LOD': object = new LOD(); break; case 'Line': object = new Line( getGeometry( data.geometry ), getMaterial( data.material ) ); break; case 'LineLoop': object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) ); break; case 'LineSegments': object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) ); break; case 'PointCloud': case 'Points': object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) ); break; case 'Sprite': object = new Sprite( getMaterial( data.material ) ); break; case 'Group': object = new Group(); break; case 'Bone': object = new Bone(); break; default: object = new Object3D(); } object.uuid = data.uuid; if ( data.name !== undefined ) object.name = data.name; if ( data.matrix !== undefined ) { object.matrix.fromArray( data.matrix ); if ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate; if ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale ); } else { if ( data.position !== undefined ) object.position.fromArray( data.position ); if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation ); if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion ); if ( data.scale !== undefined ) object.scale.fromArray( data.scale ); } if ( data.castShadow !== undefined ) object.castShadow = data.castShadow; if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow; if ( data.shadow ) { if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias; if ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias; if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius; if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize ); if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera ); } if ( data.visible !== undefined ) object.visible = data.visible; if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled; if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder; if ( data.userData !== undefined ) object.userData = data.userData; if ( data.layers !== undefined ) object.layers.mask = data.layers; if ( data.children !== undefined ) { const children = data.children; for ( let i = 0; i < children.length; i ++ ) { object.add( this.parseObject( children[ i ], geometries, materials, animations ) ); } } if ( data.animations !== undefined ) { const objectAnimations = data.animations; for ( let i = 0; i < objectAnimations.length; i ++ ) { const uuid = objectAnimations[ i ]; object.animations.push( animations[ uuid ] ); } } if ( data.type === 'LOD' ) { if ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate; const levels = data.levels; for ( let l = 0; l < levels.length; l ++ ) { const level = levels[ l ]; const child = object.getObjectByProperty( 'uuid', level.object ); if ( child !== undefined ) { object.addLevel( child, level.distance ); } } } return object; } bindSkeletons( object, skeletons ) { if ( Object.keys( skeletons ).length === 0 ) return; object.traverse( function ( child ) { if ( child.isSkinnedMesh === true && child.skeleton !== undefined ) { const skeleton = skeletons[ child.skeleton ]; if ( skeleton === undefined ) { console.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton ); } else { child.bind( skeleton, child.bindMatrix ); } } } ); } /* DEPRECATED */ setTexturePath( value ) { console.warn( 'THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().' ); return this.setResourcePath( value ); } } const TEXTURE_MAPPING = { UVMapping: UVMapping, CubeReflectionMapping: CubeReflectionMapping, CubeRefractionMapping: CubeRefractionMapping, EquirectangularReflectionMapping: EquirectangularReflectionMapping, EquirectangularRefractionMapping: EquirectangularRefractionMapping, CubeUVReflectionMapping: CubeUVReflectionMapping, CubeUVRefractionMapping: CubeUVRefractionMapping }; const TEXTURE_WRAPPING = { RepeatWrapping: RepeatWrapping, ClampToEdgeWrapping: ClampToEdgeWrapping, MirroredRepeatWrapping: MirroredRepeatWrapping }; const TEXTURE_FILTER = { NearestFilter: NearestFilter, NearestMipmapNearestFilter: NearestMipmapNearestFilter, NearestMipmapLinearFilter: NearestMipmapLinearFilter, LinearFilter: LinearFilter, LinearMipmapNearestFilter: LinearMipmapNearestFilter, LinearMipmapLinearFilter: LinearMipmapLinearFilter }; function ImageBitmapLoader( manager ) { if ( typeof createImageBitmap === 'undefined' ) { console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' ); } if ( typeof fetch === 'undefined' ) { console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' ); } Loader.call( this, manager ); this.options = { premultiplyAlpha: 'none' }; } ImageBitmapLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: ImageBitmapLoader, isImageBitmapLoader: true, setOptions: function setOptions( options ) { this.options = options; return this; }, load: function ( url, onLoad, onProgress, onError ) { if ( url === undefined ) url = ''; if ( this.path !== undefined ) url = this.path + url; url = this.manager.resolveURL( url ); const scope = this; const cached = Cache.get( url ); if ( cached !== undefined ) { scope.manager.itemStart( url ); setTimeout( function () { if ( onLoad ) onLoad( cached ); scope.manager.itemEnd( url ); }, 0 ); return cached; } const fetchOptions = {}; fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include'; fetch( url, fetchOptions ).then( function ( res ) { return res.blob(); } ).then( function ( blob ) { return createImageBitmap( blob, scope.options ); } ).then( function ( imageBitmap ) { Cache.add( url, imageBitmap ); if ( onLoad ) onLoad( imageBitmap ); scope.manager.itemEnd( url ); } ).catch( function ( e ) { if ( onError ) onError( e ); scope.manager.itemError( url ); scope.manager.itemEnd( url ); } ); scope.manager.itemStart( url ); } } ); function ShapePath() { this.type = 'ShapePath'; this.color = new Color(); this.subPaths = []; this.currentPath = null; } Object.assign( ShapePath.prototype, { moveTo: function ( x, y ) { this.currentPath = new Path(); this.subPaths.push( this.currentPath ); this.currentPath.moveTo( x, y ); return this; }, lineTo: function ( x, y ) { this.currentPath.lineTo( x, y ); return this; }, quadraticCurveTo: function ( aCPx, aCPy, aX, aY ) { this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY ); return this; }, bezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) { this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ); return this; }, splineThru: function ( pts ) { this.currentPath.splineThru( pts ); return this; }, toShapes: function ( isCCW, noHoles ) { function toShapesNoHoles( inSubpaths ) { const shapes = []; for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) { const tmpPath = inSubpaths[ i ]; const tmpShape = new Shape(); tmpShape.curves = tmpPath.curves; shapes.push( tmpShape ); } return shapes; } function isPointInsidePolygon( inPt, inPolygon ) { const polyLen = inPolygon.length; // inPt on polygon contour => immediate success or // toggling of inside/outside at every single! intersection point of an edge // with the horizontal line through inPt, left of inPt // not counting lowerY endpoints of edges and whole edges on that line let inside = false; for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) { let edgeLowPt = inPolygon[ p ]; let edgeHighPt = inPolygon[ q ]; let edgeDx = edgeHighPt.x - edgeLowPt.x; let edgeDy = edgeHighPt.y - edgeLowPt.y; if ( Math.abs( edgeDy ) > Number.EPSILON ) { // not parallel if ( edgeDy < 0 ) { edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx; edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy; } if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) continue; if ( inPt.y === edgeLowPt.y ) { if ( inPt.x === edgeLowPt.x ) return true; // inPt is on contour ? // continue; // no intersection or edgeLowPt => doesn't count !!! } else { const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y ); if ( perpEdge === 0 ) return true; // inPt is on contour ? if ( perpEdge < 0 ) continue; inside = ! inside; // true intersection left of inPt } } else { // parallel or collinear if ( inPt.y !== edgeLowPt.y ) continue; // parallel // edge lies on the same horizontal line as inPt if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) || ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) ) return true; // inPt: Point on contour ! // continue; } } return inside; } const isClockWise = ShapeUtils.isClockWise; const subPaths = this.subPaths; if ( subPaths.length === 0 ) return []; if ( noHoles === true ) return toShapesNoHoles( subPaths ); let solid, tmpPath, tmpShape; const shapes = []; if ( subPaths.length === 1 ) { tmpPath = subPaths[ 0 ]; tmpShape = new Shape(); tmpShape.curves = tmpPath.curves; shapes.push( tmpShape ); return shapes; } let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() ); holesFirst = isCCW ? ! holesFirst : holesFirst; // console.log("Holes first", holesFirst); const betterShapeHoles = []; const newShapes = []; let newShapeHoles = []; let mainIdx = 0; let tmpPoints; newShapes[ mainIdx ] = undefined; newShapeHoles[ mainIdx ] = []; for ( let i = 0, l = subPaths.length; i < l; i ++ ) { tmpPath = subPaths[ i ]; tmpPoints = tmpPath.getPoints(); solid = isClockWise( tmpPoints ); solid = isCCW ? ! solid : solid; if ( solid ) { if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) ) mainIdx ++; newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints }; newShapes[ mainIdx ].s.curves = tmpPath.curves; if ( holesFirst ) mainIdx ++; newShapeHoles[ mainIdx ] = []; //console.log('cw', i); } else { newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } ); //console.log('ccw', i); } } // only Holes? -> probably all Shapes with wrong orientation if ( ! newShapes[ 0 ] ) return toShapesNoHoles( subPaths ); if ( newShapes.length > 1 ) { let ambiguous = false; const toChange = []; for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { betterShapeHoles[ sIdx ] = []; } for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) { const sho = newShapeHoles[ sIdx ]; for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) { const ho = sho[ hIdx ]; let hole_unassigned = true; for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) { if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) { if ( sIdx !== s2Idx ) toChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } ); if ( hole_unassigned ) { hole_unassigned = false; betterShapeHoles[ s2Idx ].push( ho ); } else { ambiguous = true; } } } if ( hole_unassigned ) { betterShapeHoles[ sIdx ].push( ho ); } } } // console.log("ambiguous: ", ambiguous); if ( toChange.length > 0 ) { // console.log("to change: ", toChange); if ( ! ambiguous ) newShapeHoles = betterShapeHoles; } } let tmpHoles; for ( let i = 0, il = newShapes.length; i < il; i ++ ) { tmpShape = newShapes[ i ].s; shapes.push( tmpShape ); tmpHoles = newShapeHoles[ i ]; for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) { tmpShape.holes.push( tmpHoles[ j ].h ); } } //console.log("shape", shapes); return shapes; } } ); function Font( data ) { this.type = 'Font'; this.data = data; } Object.assign( Font.prototype, { isFont: true, generateShapes: function ( text, size = 100 ) { const shapes = []; const paths = createPaths( text, size, this.data ); for ( let p = 0, pl = paths.length; p < pl; p ++ ) { Array.prototype.push.apply( shapes, paths[ p ].toShapes() ); } return shapes; } } ); function createPaths( text, size, data ) { const chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // workaround for IE11, see #13988 const scale = size / data.resolution; const line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale; const paths = []; let offsetX = 0, offsetY = 0; for ( let i = 0; i < chars.length; i ++ ) { const char = chars[ i ]; if ( char === '\n' ) { offsetX = 0; offsetY -= line_height; } else { const ret = createPath( char, scale, offsetX, offsetY, data ); offsetX += ret.offsetX; paths.push( ret.path ); } } return paths; } function createPath( char, scale, offsetX, offsetY, data ) { const glyph = data.glyphs[ char ] || data.glyphs[ '?' ]; if ( ! glyph ) { console.error( 'THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + '.' ); return; } const path = new ShapePath(); let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; if ( glyph.o ) { const outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) ); for ( let i = 0, l = outline.length; i < l; ) { const action = outline[ i ++ ]; switch ( action ) { case 'm': // moveTo x = outline[ i ++ ] * scale + offsetX; y = outline[ i ++ ] * scale + offsetY; path.moveTo( x, y ); break; case 'l': // lineTo x = outline[ i ++ ] * scale + offsetX; y = outline[ i ++ ] * scale + offsetY; path.lineTo( x, y ); break; case 'q': // quadraticCurveTo cpx = outline[ i ++ ] * scale + offsetX; cpy = outline[ i ++ ] * scale + offsetY; cpx1 = outline[ i ++ ] * scale + offsetX; cpy1 = outline[ i ++ ] * scale + offsetY; path.quadraticCurveTo( cpx1, cpy1, cpx, cpy ); break; case 'b': // bezierCurveTo cpx = outline[ i ++ ] * scale + offsetX; cpy = outline[ i ++ ] * scale + offsetY; cpx1 = outline[ i ++ ] * scale + offsetX; cpy1 = outline[ i ++ ] * scale + offsetY; cpx2 = outline[ i ++ ] * scale + offsetX; cpy2 = outline[ i ++ ] * scale + offsetY; path.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy ); break; } } } return { offsetX: glyph.ha * scale, path: path }; } function FontLoader( manager ) { Loader.call( this, manager ); } FontLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: FontLoader, load: function ( url, onLoad, onProgress, onError ) { const scope = this; const loader = new FileLoader( this.manager ); loader.setPath( this.path ); loader.setRequestHeader( this.requestHeader ); loader.setWithCredentials( scope.withCredentials ); loader.load( url, function ( text ) { let json; try { json = JSON.parse( text ); } catch ( e ) { console.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' ); json = JSON.parse( text.substring( 65, text.length - 2 ) ); } const font = scope.parse( json ); if ( onLoad ) onLoad( font ); }, onProgress, onError ); }, parse: function ( json ) { return new Font( json ); } } ); let _context; const AudioContext = { getContext: function () { if ( _context === undefined ) { _context = new ( window.AudioContext || window.webkitAudioContext )(); } return _context; }, setContext: function ( value ) { _context = value; } }; function AudioLoader( manager ) { Loader.call( this, manager ); } AudioLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: AudioLoader, load: function ( url, onLoad, onProgress, onError ) { const scope = this; const loader = new FileLoader( scope.manager ); loader.setResponseType( 'arraybuffer' ); loader.setPath( scope.path ); loader.setRequestHeader( scope.requestHeader ); loader.setWithCredentials( scope.withCredentials ); loader.load( url, function ( buffer ) { try { // Create a copy of the buffer. The `decodeAudioData` method // detaches the buffer when complete, preventing reuse. const bufferCopy = buffer.slice( 0 ); const context = AudioContext.getContext(); context.decodeAudioData( bufferCopy, function ( audioBuffer ) { onLoad( audioBuffer ); } ); } catch ( e ) { if ( onError ) { onError( e ); } else { console.error( e ); } scope.manager.itemError( url ); } }, onProgress, onError ); } } ); function HemisphereLightProbe( skyColor, groundColor, intensity ) { LightProbe.call( this, undefined, intensity ); const color1 = new Color().set( skyColor ); const color2 = new Color().set( groundColor ); const sky = new Vector3( color1.r, color1.g, color1.b ); const ground = new Vector3( color2.r, color2.g, color2.b ); // without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI ); const c0 = Math.sqrt( Math.PI ); const c1 = c0 * Math.sqrt( 0.75 ); this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 ); this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 ); } HemisphereLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { constructor: HemisphereLightProbe, isHemisphereLightProbe: true, copy: function ( source ) { // modifying colors not currently supported LightProbe.prototype.copy.call( this, source ); return this; }, toJSON: function ( meta ) { const data = LightProbe.prototype.toJSON.call( this, meta ); // data.sh = this.sh.toArray(); // todo return data; } } ); function AmbientLightProbe( color, intensity ) { LightProbe.call( this, undefined, intensity ); const color1 = new Color().set( color ); // without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI ); this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) ); } AmbientLightProbe.prototype = Object.assign( Object.create( LightProbe.prototype ), { constructor: AmbientLightProbe, isAmbientLightProbe: true, copy: function ( source ) { // modifying color not currently supported LightProbe.prototype.copy.call( this, source ); return this; }, toJSON: function ( meta ) { const data = LightProbe.prototype.toJSON.call( this, meta ); // data.sh = this.sh.toArray(); // todo return data; } } ); const _eyeRight = new Matrix4(); const _eyeLeft = new Matrix4(); function StereoCamera() { this.type = 'StereoCamera'; this.aspect = 1; this.eyeSep = 0.064; this.cameraL = new PerspectiveCamera(); this.cameraL.layers.enable( 1 ); this.cameraL.matrixAutoUpdate = false; this.cameraR = new PerspectiveCamera(); this.cameraR.layers.enable( 2 ); this.cameraR.matrixAutoUpdate = false; this._cache = { focus: null, fov: null, aspect: null, near: null, far: null, zoom: null, eyeSep: null }; } Object.assign( StereoCamera.prototype, { update: function ( camera ) { const cache = this._cache; const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov || cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near || cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep; if ( needsUpdate ) { cache.focus = camera.focus; cache.fov = camera.fov; cache.aspect = camera.aspect * this.aspect; cache.near = camera.near; cache.far = camera.far; cache.zoom = camera.zoom; cache.eyeSep = this.eyeSep; // Off-axis stereoscopic effect based on // http://paulbourke.net/stereographics/stereorender/ const projectionMatrix = camera.projectionMatrix.clone(); const eyeSepHalf = cache.eyeSep / 2; const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus; const ymax = ( cache.near * Math.tan( MathUtils.DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom; let xmin, xmax; // translate xOffset _eyeLeft.elements[ 12 ] = - eyeSepHalf; _eyeRight.elements[ 12 ] = eyeSepHalf; // for left eye xmin = - ymax * cache.aspect + eyeSepOnProjection; xmax = ymax * cache.aspect + eyeSepOnProjection; projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); this.cameraL.projectionMatrix.copy( projectionMatrix ); // for right eye xmin = - ymax * cache.aspect - eyeSepOnProjection; xmax = ymax * cache.aspect - eyeSepOnProjection; projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin ); projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin ); this.cameraR.projectionMatrix.copy( projectionMatrix ); } this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft ); this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight ); } } ); class Clock { constructor( autoStart ) { this.autoStart = ( autoStart !== undefined ) ? autoStart : true; this.startTime = 0; this.oldTime = 0; this.elapsedTime = 0; this.running = false; } start() { this.startTime = now(); this.oldTime = this.startTime; this.elapsedTime = 0; this.running = true; } stop() { this.getElapsedTime(); this.running = false; this.autoStart = false; } getElapsedTime() { this.getDelta(); return this.elapsedTime; } getDelta() { let diff = 0; if ( this.autoStart && ! this.running ) { this.start(); return 0; } if ( this.running ) { const newTime = now(); diff = ( newTime - this.oldTime ) / 1000; this.oldTime = newTime; this.elapsedTime += diff; } return diff; } } function now() { return ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732 } const _position$2 = /*@__PURE__*/ new Vector3(); const _quaternion$3 = /*@__PURE__*/ new Quaternion(); const _scale$1 = /*@__PURE__*/ new Vector3(); const _orientation = /*@__PURE__*/ new Vector3(); class AudioListener extends Object3D { constructor() { super(); this.type = 'AudioListener'; this.context = AudioContext.getContext(); this.gain = this.context.createGain(); this.gain.connect( this.context.destination ); this.filter = null; this.timeDelta = 0; // private this._clock = new Clock(); } getInput() { return this.gain; } removeFilter() { if ( this.filter !== null ) { this.gain.disconnect( this.filter ); this.filter.disconnect( this.context.destination ); this.gain.connect( this.context.destination ); this.filter = null; } return this; } getFilter() { return this.filter; } setFilter( value ) { if ( this.filter !== null ) { this.gain.disconnect( this.filter ); this.filter.disconnect( this.context.destination ); } else { this.gain.disconnect( this.context.destination ); } this.filter = value; this.gain.connect( this.filter ); this.filter.connect( this.context.destination ); return this; } getMasterVolume() { return this.gain.gain.value; } setMasterVolume( value ) { this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); return this; } updateMatrixWorld( force ) { super.updateMatrixWorld( force ); const listener = this.context.listener; const up = this.up; this.timeDelta = this._clock.getDelta(); this.matrixWorld.decompose( _position$2, _quaternion$3, _scale$1 ); _orientation.set( 0, 0, - 1 ).applyQuaternion( _quaternion$3 ); if ( listener.positionX ) { // code path for Chrome (see #14393) const endTime = this.context.currentTime + this.timeDelta; listener.positionX.linearRampToValueAtTime( _position$2.x, endTime ); listener.positionY.linearRampToValueAtTime( _position$2.y, endTime ); listener.positionZ.linearRampToValueAtTime( _position$2.z, endTime ); listener.forwardX.linearRampToValueAtTime( _orientation.x, endTime ); listener.forwardY.linearRampToValueAtTime( _orientation.y, endTime ); listener.forwardZ.linearRampToValueAtTime( _orientation.z, endTime ); listener.upX.linearRampToValueAtTime( up.x, endTime ); listener.upY.linearRampToValueAtTime( up.y, endTime ); listener.upZ.linearRampToValueAtTime( up.z, endTime ); } else { listener.setPosition( _position$2.x, _position$2.y, _position$2.z ); listener.setOrientation( _orientation.x, _orientation.y, _orientation.z, up.x, up.y, up.z ); } } } class Audio extends Object3D { constructor( listener ) { super(); this.type = 'Audio'; this.listener = listener; this.context = listener.context; this.gain = this.context.createGain(); this.gain.connect( listener.getInput() ); this.autoplay = false; this.buffer = null; this.detune = 0; this.loop = false; this.loopStart = 0; this.loopEnd = 0; this.offset = 0; this.duration = undefined; this.playbackRate = 1; this.isPlaying = false; this.hasPlaybackControl = true; this.source = null; this.sourceType = 'empty'; this._startedAt = 0; this._progress = 0; this._connected = false; this.filters = []; } getOutput() { return this.gain; } setNodeSource( audioNode ) { this.hasPlaybackControl = false; this.sourceType = 'audioNode'; this.source = audioNode; this.connect(); return this; } setMediaElementSource( mediaElement ) { this.hasPlaybackControl = false; this.sourceType = 'mediaNode'; this.source = this.context.createMediaElementSource( mediaElement ); this.connect(); return this; } setMediaStreamSource( mediaStream ) { this.hasPlaybackControl = false; this.sourceType = 'mediaStreamNode'; this.source = this.context.createMediaStreamSource( mediaStream ); this.connect(); return this; } setBuffer( audioBuffer ) { this.buffer = audioBuffer; this.sourceType = 'buffer'; if ( this.autoplay ) this.play(); return this; } play( delay = 0 ) { if ( this.isPlaying === true ) { console.warn( 'THREE.Audio: Audio is already playing.' ); return; } if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this._startedAt = this.context.currentTime + delay; const source = this.context.createBufferSource(); source.buffer = this.buffer; source.loop = this.loop; source.loopStart = this.loopStart; source.loopEnd = this.loopEnd; source.onended = this.onEnded.bind( this ); source.start( this._startedAt, this._progress + this.offset, this.duration ); this.isPlaying = true; this.source = source; this.setDetune( this.detune ); this.setPlaybackRate( this.playbackRate ); return this.connect(); } pause() { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } if ( this.isPlaying === true ) { // update current progress this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate; if ( this.loop === true ) { // ensure _progress does not exceed duration with looped audios this._progress = this._progress % ( this.duration || this.buffer.duration ); } this.source.stop(); this.source.onended = null; this.isPlaying = false; } return this; } stop() { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this._progress = 0; this.source.stop(); this.source.onended = null; this.isPlaying = false; return this; } connect() { if ( this.filters.length > 0 ) { this.source.connect( this.filters[ 0 ] ); for ( let i = 1, l = this.filters.length; i < l; i ++ ) { this.filters[ i - 1 ].connect( this.filters[ i ] ); } this.filters[ this.filters.length - 1 ].connect( this.getOutput() ); } else { this.source.connect( this.getOutput() ); } this._connected = true; return this; } disconnect() { if ( this.filters.length > 0 ) { this.source.disconnect( this.filters[ 0 ] ); for ( let i = 1, l = this.filters.length; i < l; i ++ ) { this.filters[ i - 1 ].disconnect( this.filters[ i ] ); } this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() ); } else { this.source.disconnect( this.getOutput() ); } this._connected = false; return this; } getFilters() { return this.filters; } setFilters( value ) { if ( ! value ) value = []; if ( this._connected === true ) { this.disconnect(); this.filters = value.slice(); this.connect(); } else { this.filters = value.slice(); } return this; } setDetune( value ) { this.detune = value; if ( this.source.detune === undefined ) return; // only set detune when available if ( this.isPlaying === true ) { this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 ); } return this; } getDetune() { return this.detune; } getFilter() { return this.getFilters()[ 0 ]; } setFilter( filter ) { return this.setFilters( filter ? [ filter ] : [] ); } setPlaybackRate( value ) { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this.playbackRate = value; if ( this.isPlaying === true ) { this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 ); } return this; } getPlaybackRate() { return this.playbackRate; } onEnded() { this.isPlaying = false; } getLoop() { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return false; } return this.loop; } setLoop( value ) { if ( this.hasPlaybackControl === false ) { console.warn( 'THREE.Audio: this Audio has no playback control.' ); return; } this.loop = value; if ( this.isPlaying === true ) { this.source.loop = this.loop; } return this; } setLoopStart( value ) { this.loopStart = value; return this; } setLoopEnd( value ) { this.loopEnd = value; return this; } getVolume() { return this.gain.gain.value; } setVolume( value ) { this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 ); return this; } } const _position$3 = /*@__PURE__*/ new Vector3(); const _quaternion$4 = /*@__PURE__*/ new Quaternion(); const _scale$2 = /*@__PURE__*/ new Vector3(); const _orientation$1 = /*@__PURE__*/ new Vector3(); class PositionalAudio extends Audio { constructor( listener ) { super( listener ); this.panner = this.context.createPanner(); this.panner.panningModel = 'HRTF'; this.panner.connect( this.gain ); } getOutput() { return this.panner; } getRefDistance() { return this.panner.refDistance; } setRefDistance( value ) { this.panner.refDistance = value; return this; } getRolloffFactor() { return this.panner.rolloffFactor; } setRolloffFactor( value ) { this.panner.rolloffFactor = value; return this; } getDistanceModel() { return this.panner.distanceModel; } setDistanceModel( value ) { this.panner.distanceModel = value; return this; } getMaxDistance() { return this.panner.maxDistance; } setMaxDistance( value ) { this.panner.maxDistance = value; return this; } setDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) { this.panner.coneInnerAngle = coneInnerAngle; this.panner.coneOuterAngle = coneOuterAngle; this.panner.coneOuterGain = coneOuterGain; return this; } updateMatrixWorld( force ) { super.updateMatrixWorld( force ); if ( this.hasPlaybackControl === true && this.isPlaying === false ) return; this.matrixWorld.decompose( _position$3, _quaternion$4, _scale$2 ); _orientation$1.set( 0, 0, 1 ).applyQuaternion( _quaternion$4 ); const panner = this.panner; if ( panner.positionX ) { // code path for Chrome and Firefox (see #14393) const endTime = this.context.currentTime + this.listener.timeDelta; panner.positionX.linearRampToValueAtTime( _position$3.x, endTime ); panner.positionY.linearRampToValueAtTime( _position$3.y, endTime ); panner.positionZ.linearRampToValueAtTime( _position$3.z, endTime ); panner.orientationX.linearRampToValueAtTime( _orientation$1.x, endTime ); panner.orientationY.linearRampToValueAtTime( _orientation$1.y, endTime ); panner.orientationZ.linearRampToValueAtTime( _orientation$1.z, endTime ); } else { panner.setPosition( _position$3.x, _position$3.y, _position$3.z ); panner.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z ); } } } class AudioAnalyser { constructor( audio, fftSize = 2048 ) { this.analyser = audio.context.createAnalyser(); this.analyser.fftSize = fftSize; this.data = new Uint8Array( this.analyser.frequencyBinCount ); audio.getOutput().connect( this.analyser ); } getFrequencyData() { this.analyser.getByteFrequencyData( this.data ); return this.data; } getAverageFrequency() { let value = 0; const data = this.getFrequencyData(); for ( let i = 0; i < data.length; i ++ ) { value += data[ i ]; } return value / data.length; } } function PropertyMixer( binding, typeName, valueSize ) { this.binding = binding; this.valueSize = valueSize; let mixFunction, mixFunctionAdditive, setIdentity; // buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ] // // interpolators can use .buffer as their .result // the data then goes to 'incoming' // // 'accu0' and 'accu1' are used frame-interleaved for // the cumulative result and are compared to detect // changes // // 'orig' stores the original state of the property // // 'add' is used for additive cumulative results // // 'work' is optional and is only present for quaternion types. It is used // to store intermediate quaternion multiplication results switch ( typeName ) { case 'quaternion': mixFunction = this._slerp; mixFunctionAdditive = this._slerpAdditive; setIdentity = this._setAdditiveIdentityQuaternion; this.buffer = new Float64Array( valueSize * 6 ); this._workIndex = 5; break; case 'string': case 'bool': mixFunction = this._select; // Use the regular mix function and for additive on these types, // additive is not relevant for non-numeric types mixFunctionAdditive = this._select; setIdentity = this._setAdditiveIdentityOther; this.buffer = new Array( valueSize * 5 ); break; default: mixFunction = this._lerp; mixFunctionAdditive = this._lerpAdditive; setIdentity = this._setAdditiveIdentityNumeric; this.buffer = new Float64Array( valueSize * 5 ); } this._mixBufferRegion = mixFunction; this._mixBufferRegionAdditive = mixFunctionAdditive; this._setIdentity = setIdentity; this._origIndex = 3; this._addIndex = 4; this.cumulativeWeight = 0; this.cumulativeWeightAdditive = 0; this.useCount = 0; this.referenceCount = 0; } Object.assign( PropertyMixer.prototype, { // accumulate data in the 'incoming' region into 'accu' accumulate: function ( accuIndex, weight ) { // note: happily accumulating nothing when weight = 0, the caller knows // the weight and shouldn't have made the call in the first place const buffer = this.buffer, stride = this.valueSize, offset = accuIndex * stride + stride; let currentWeight = this.cumulativeWeight; if ( currentWeight === 0 ) { // accuN := incoming * weight for ( let i = 0; i !== stride; ++ i ) { buffer[ offset + i ] = buffer[ i ]; } currentWeight = weight; } else { // accuN := accuN + incoming * weight currentWeight += weight; const mix = weight / currentWeight; this._mixBufferRegion( buffer, offset, 0, mix, stride ); } this.cumulativeWeight = currentWeight; }, // accumulate data in the 'incoming' region into 'add' accumulateAdditive: function ( weight ) { const buffer = this.buffer, stride = this.valueSize, offset = stride * this._addIndex; if ( this.cumulativeWeightAdditive === 0 ) { // add = identity this._setIdentity(); } // add := add + incoming * weight this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride ); this.cumulativeWeightAdditive += weight; }, // apply the state of 'accu' to the binding when accus differ apply: function ( accuIndex ) { const stride = this.valueSize, buffer = this.buffer, offset = accuIndex * stride + stride, weight = this.cumulativeWeight, weightAdditive = this.cumulativeWeightAdditive, binding = this.binding; this.cumulativeWeight = 0; this.cumulativeWeightAdditive = 0; if ( weight < 1 ) { // accuN := accuN + original * ( 1 - cumulativeWeight ) const originalValueOffset = stride * this._origIndex; this._mixBufferRegion( buffer, offset, originalValueOffset, 1 - weight, stride ); } if ( weightAdditive > 0 ) { // accuN := accuN + additive accuN this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride ); } for ( let i = stride, e = stride + stride; i !== e; ++ i ) { if ( buffer[ i ] !== buffer[ i + stride ] ) { // value has changed -> update scene graph binding.setValue( buffer, offset ); break; } } }, // remember the state of the bound property and copy it to both accus saveOriginalState: function () { const binding = this.binding; const buffer = this.buffer, stride = this.valueSize, originalValueOffset = stride * this._origIndex; binding.getValue( buffer, originalValueOffset ); // accu[0..1] := orig -- initially detect changes against the original for ( let i = stride, e = originalValueOffset; i !== e; ++ i ) { buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ]; } // Add to identity for additive this._setIdentity(); this.cumulativeWeight = 0; this.cumulativeWeightAdditive = 0; }, // apply the state previously taken via 'saveOriginalState' to the binding restoreOriginalState: function () { const originalValueOffset = this.valueSize * 3; this.binding.setValue( this.buffer, originalValueOffset ); }, _setAdditiveIdentityNumeric: function () { const startIndex = this._addIndex * this.valueSize; const endIndex = startIndex + this.valueSize; for ( let i = startIndex; i < endIndex; i ++ ) { this.buffer[ i ] = 0; } }, _setAdditiveIdentityQuaternion: function () { this._setAdditiveIdentityNumeric(); this.buffer[ this._addIndex * this.valueSize + 3 ] = 1; }, _setAdditiveIdentityOther: function () { const startIndex = this._origIndex * this.valueSize; const targetIndex = this._addIndex * this.valueSize; for ( let i = 0; i < this.valueSize; i ++ ) { this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ]; } }, // mix functions _select: function ( buffer, dstOffset, srcOffset, t, stride ) { if ( t >= 0.5 ) { for ( let i = 0; i !== stride; ++ i ) { buffer[ dstOffset + i ] = buffer[ srcOffset + i ]; } } }, _slerp: function ( buffer, dstOffset, srcOffset, t ) { Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t ); }, _slerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { const workOffset = this._workIndex * stride; // Store result in intermediate buffer offset Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset ); // Slerp to the intermediate result Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t ); }, _lerp: function ( buffer, dstOffset, srcOffset, t, stride ) { const s = 1 - t; for ( let i = 0; i !== stride; ++ i ) { const j = dstOffset + i; buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t; } }, _lerpAdditive: function ( buffer, dstOffset, srcOffset, t, stride ) { for ( let i = 0; i !== stride; ++ i ) { const j = dstOffset + i; buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t; } } } ); // Characters [].:/ are reserved for track binding syntax. const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/'; const _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' ); // Attempts to allow node names from any language. ES5's `\w` regexp matches // only latin characters, and the unicode \p{L} is not yet supported. So // instead, we exclude reserved characters and match everything else. const _wordChar = '[^' + _RESERVED_CHARS_RE + ']'; const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']'; // Parent directories, delimited by '/' or ':'. Currently unused, but must // be matched to parse the rest of the track name. const _directoryRe = /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar ); // Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'. const _nodeRe = /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot ); // Object on target node, and accessor. May not contain reserved // characters. Accessor may contain any character except closing bracket. const _objectRe = /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar ); // Property and accessor. May not contain reserved characters. Accessor may // contain any non-bracket characters. const _propertyRe = /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar ); const _trackRe = new RegExp( '' + '^' + _directoryRe + _nodeRe + _objectRe + _propertyRe + '$' ); const _supportedObjectNames = [ 'material', 'materials', 'bones' ]; function Composite( targetGroup, path, optionalParsedPath ) { const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path ); this._targetGroup = targetGroup; this._bindings = targetGroup.subscribe_( path, parsedPath ); } Object.assign( Composite.prototype, { getValue: function ( array, offset ) { this.bind(); // bind all binding const firstValidIndex = this._targetGroup.nCachedObjects_, binding = this._bindings[ firstValidIndex ]; // and only call .getValue on the first if ( binding !== undefined ) binding.getValue( array, offset ); }, setValue: function ( array, offset ) { const bindings = this._bindings; for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { bindings[ i ].setValue( array, offset ); } }, bind: function () { const bindings = this._bindings; for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { bindings[ i ].bind(); } }, unbind: function () { const bindings = this._bindings; for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) { bindings[ i ].unbind(); } } } ); function PropertyBinding( rootNode, path, parsedPath ) { this.path = path; this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path ); this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode; this.rootNode = rootNode; } Object.assign( PropertyBinding, { Composite: Composite, create: function ( root, path, parsedPath ) { if ( ! ( root && root.isAnimationObjectGroup ) ) { return new PropertyBinding( root, path, parsedPath ); } else { return new PropertyBinding.Composite( root, path, parsedPath ); } }, /** * Replaces spaces with underscores and removes unsupported characters from * node names, to ensure compatibility with parseTrackName(). * * @param {string} name Node name to be sanitized. * @return {string} */ sanitizeNodeName: function ( name ) { return name.replace( /\s/g, '_' ).replace( _reservedRe, '' ); }, parseTrackName: function ( trackName ) { const matches = _trackRe.exec( trackName ); if ( ! matches ) { throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName ); } const results = { // directoryName: matches[ 1 ], // (tschw) currently unused nodeName: matches[ 2 ], objectName: matches[ 3 ], objectIndex: matches[ 4 ], propertyName: matches[ 5 ], // required propertyIndex: matches[ 6 ] }; const lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' ); if ( lastDot !== undefined && lastDot !== - 1 ) { const objectName = results.nodeName.substring( lastDot + 1 ); // Object names must be checked against an allowlist. Otherwise, there // is no way to parse 'foo.bar.baz': 'baz' must be a property, but // 'bar' could be the objectName, or part of a nodeName (which can // include '.' characters). if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) { results.nodeName = results.nodeName.substring( 0, lastDot ); results.objectName = objectName; } } if ( results.propertyName === null || results.propertyName.length === 0 ) { throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName ); } return results; }, findNode: function ( root, nodeName ) { if ( ! nodeName || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) { return root; } // search into skeleton bones. if ( root.skeleton ) { const bone = root.skeleton.getBoneByName( nodeName ); if ( bone !== undefined ) { return bone; } } // search into node subtree. if ( root.children ) { const searchNodeSubtree = function ( children ) { for ( let i = 0; i < children.length; i ++ ) { const childNode = children[ i ]; if ( childNode.name === nodeName || childNode.uuid === nodeName ) { return childNode; } const result = searchNodeSubtree( childNode.children ); if ( result ) return result; } return null; }; const subTreeNode = searchNodeSubtree( root.children ); if ( subTreeNode ) { return subTreeNode; } } return null; } } ); Object.assign( PropertyBinding.prototype, { // prototype, continued // these are used to "bind" a nonexistent property _getValue_unavailable: function () {}, _setValue_unavailable: function () {}, BindingType: { Direct: 0, EntireArray: 1, ArrayElement: 2, HasFromToArray: 3 }, Versioning: { None: 0, NeedsUpdate: 1, MatrixWorldNeedsUpdate: 2 }, GetterByBindingType: [ function getValue_direct( buffer, offset ) { buffer[ offset ] = this.node[ this.propertyName ]; }, function getValue_array( buffer, offset ) { const source = this.resolvedProperty; for ( let i = 0, n = source.length; i !== n; ++ i ) { buffer[ offset ++ ] = source[ i ]; } }, function getValue_arrayElement( buffer, offset ) { buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ]; }, function getValue_toArray( buffer, offset ) { this.resolvedProperty.toArray( buffer, offset ); } ], SetterByBindingTypeAndVersioning: [ [ // Direct function setValue_direct( buffer, offset ) { this.targetObject[ this.propertyName ] = buffer[ offset ]; }, function setValue_direct_setNeedsUpdate( buffer, offset ) { this.targetObject[ this.propertyName ] = buffer[ offset ]; this.targetObject.needsUpdate = true; }, function setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) { this.targetObject[ this.propertyName ] = buffer[ offset ]; this.targetObject.matrixWorldNeedsUpdate = true; } ], [ // EntireArray function setValue_array( buffer, offset ) { const dest = this.resolvedProperty; for ( let i = 0, n = dest.length; i !== n; ++ i ) { dest[ i ] = buffer[ offset ++ ]; } }, function setValue_array_setNeedsUpdate( buffer, offset ) { const dest = this.resolvedProperty; for ( let i = 0, n = dest.length; i !== n; ++ i ) { dest[ i ] = buffer[ offset ++ ]; } this.targetObject.needsUpdate = true; }, function setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) { const dest = this.resolvedProperty; for ( let i = 0, n = dest.length; i !== n; ++ i ) { dest[ i ] = buffer[ offset ++ ]; } this.targetObject.matrixWorldNeedsUpdate = true; } ], [ // ArrayElement function setValue_arrayElement( buffer, offset ) { this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; }, function setValue_arrayElement_setNeedsUpdate( buffer, offset ) { this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; this.targetObject.needsUpdate = true; }, function setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) { this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ]; this.targetObject.matrixWorldNeedsUpdate = true; } ], [ // HasToFromArray function setValue_fromArray( buffer, offset ) { this.resolvedProperty.fromArray( buffer, offset ); }, function setValue_fromArray_setNeedsUpdate( buffer, offset ) { this.resolvedProperty.fromArray( buffer, offset ); this.targetObject.needsUpdate = true; }, function setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) { this.resolvedProperty.fromArray( buffer, offset ); this.targetObject.matrixWorldNeedsUpdate = true; } ] ], getValue: function getValue_unbound( targetArray, offset ) { this.bind(); this.getValue( targetArray, offset ); // Note: This class uses a State pattern on a per-method basis: // 'bind' sets 'this.getValue' / 'setValue' and shadows the // prototype version of these methods with one that represents // the bound state. When the property is not found, the methods // become no-ops. }, setValue: function getValue_unbound( sourceArray, offset ) { this.bind(); this.setValue( sourceArray, offset ); }, // create getter / setter pair for a property in the scene graph bind: function () { let targetObject = this.node; const parsedPath = this.parsedPath; const objectName = parsedPath.objectName; const propertyName = parsedPath.propertyName; let propertyIndex = parsedPath.propertyIndex; if ( ! targetObject ) { targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode; this.node = targetObject; } // set fail state so we can just 'return' on error this.getValue = this._getValue_unavailable; this.setValue = this._setValue_unavailable; // ensure there is a value node if ( ! targetObject ) { console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' ); return; } if ( objectName ) { let objectIndex = parsedPath.objectIndex; // special cases were we need to reach deeper into the hierarchy to get the face materials.... switch ( objectName ) { case 'materials': if ( ! targetObject.material ) { console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this ); return; } if ( ! targetObject.material.materials ) { console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this ); return; } targetObject = targetObject.material.materials; break; case 'bones': if ( ! targetObject.skeleton ) { console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this ); return; } // potential future optimization: skip this if propertyIndex is already an integer // and convert the integer string to a true integer. targetObject = targetObject.skeleton.bones; // support resolving morphTarget names into indices. for ( let i = 0; i < targetObject.length; i ++ ) { if ( targetObject[ i ].name === objectIndex ) { objectIndex = i; break; } } break; default: if ( targetObject[ objectName ] === undefined ) { console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this ); return; } targetObject = targetObject[ objectName ]; } if ( objectIndex !== undefined ) { if ( targetObject[ objectIndex ] === undefined ) { console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject ); return; } targetObject = targetObject[ objectIndex ]; } } // resolve property const nodeProperty = targetObject[ propertyName ]; if ( nodeProperty === undefined ) { const nodeName = parsedPath.nodeName; console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName + '.' + propertyName + ' but it wasn\'t found.', targetObject ); return; } // determine versioning scheme let versioning = this.Versioning.None; this.targetObject = targetObject; if ( targetObject.needsUpdate !== undefined ) { // material versioning = this.Versioning.NeedsUpdate; } else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform versioning = this.Versioning.MatrixWorldNeedsUpdate; } // determine how the property gets bound let bindingType = this.BindingType.Direct; if ( propertyIndex !== undefined ) { // access a sub element of the property array (only primitives are supported right now) if ( propertyName === 'morphTargetInfluences' ) { // potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer. // support resolving morphTarget names into indices. if ( ! targetObject.geometry ) { console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this ); return; } if ( targetObject.geometry.isBufferGeometry ) { if ( ! targetObject.geometry.morphAttributes ) { console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this ); return; } if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) { propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ]; } } else { console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.', this ); return; } } bindingType = this.BindingType.ArrayElement; this.resolvedProperty = nodeProperty; this.propertyIndex = propertyIndex; } else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) { // must use copy for Object3D.Euler/Quaternion bindingType = this.BindingType.HasFromToArray; this.resolvedProperty = nodeProperty; } else if ( Array.isArray( nodeProperty ) ) { bindingType = this.BindingType.EntireArray; this.resolvedProperty = nodeProperty; } else { this.propertyName = propertyName; } // select getter / setter this.getValue = this.GetterByBindingType[ bindingType ]; this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ]; }, unbind: function () { this.node = null; // back to the prototype version of getValue / setValue // note: avoiding to mutate the shape of 'this' via 'delete' this.getValue = this._getValue_unbound; this.setValue = this._setValue_unbound; } } ); // DECLARE ALIAS AFTER assign prototype Object.assign( PropertyBinding.prototype, { // initial state of these methods that calls 'bind' _getValue_unbound: PropertyBinding.prototype.getValue, _setValue_unbound: PropertyBinding.prototype.setValue, } ); /** * * A group of objects that receives a shared animation state. * * Usage: * * - Add objects you would otherwise pass as 'root' to the * constructor or the .clipAction method of AnimationMixer. * * - Instead pass this object as 'root'. * * - You can also add and remove objects later when the mixer * is running. * * Note: * * Objects of this class appear as one object to the mixer, * so cache control of the individual objects must be done * on the group. * * Limitation: * * - The animated properties must be compatible among the * all objects in the group. * * - A single property can either be controlled through a * target group or directly, but not both. */ function AnimationObjectGroup() { this.uuid = MathUtils.generateUUID(); // cached objects followed by the active ones this._objects = Array.prototype.slice.call( arguments ); this.nCachedObjects_ = 0; // threshold // note: read by PropertyBinding.Composite const indices = {}; this._indicesByUUID = indices; // for bookkeeping for ( let i = 0, n = arguments.length; i !== n; ++ i ) { indices[ arguments[ i ].uuid ] = i; } this._paths = []; // inside: string this._parsedPaths = []; // inside: { we don't care, here } this._bindings = []; // inside: Array< PropertyBinding > this._bindingsIndicesByPath = {}; // inside: indices in these arrays const scope = this; this.stats = { objects: { get total() { return scope._objects.length; }, get inUse() { return this.total - scope.nCachedObjects_; } }, get bindingsPerObject() { return scope._bindings.length; } }; } Object.assign( AnimationObjectGroup.prototype, { isAnimationObjectGroup: true, add: function () { const objects = this._objects, indicesByUUID = this._indicesByUUID, paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, nBindings = bindings.length; let knownObject = undefined, nObjects = objects.length, nCachedObjects = this.nCachedObjects_; for ( let i = 0, n = arguments.length; i !== n; ++ i ) { const object = arguments[ i ], uuid = object.uuid; let index = indicesByUUID[ uuid ]; if ( index === undefined ) { // unknown object -> add it to the ACTIVE region index = nObjects ++; indicesByUUID[ uuid ] = index; objects.push( object ); // accounting is done, now do the same for all bindings for ( let j = 0, m = nBindings; j !== m; ++ j ) { bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) ); } } else if ( index < nCachedObjects ) { knownObject = objects[ index ]; // move existing object to the ACTIVE region const firstActiveIndex = -- nCachedObjects, lastCachedObject = objects[ firstActiveIndex ]; indicesByUUID[ lastCachedObject.uuid ] = index; objects[ index ] = lastCachedObject; indicesByUUID[ uuid ] = firstActiveIndex; objects[ firstActiveIndex ] = object; // accounting is done, now do the same for all bindings for ( let j = 0, m = nBindings; j !== m; ++ j ) { const bindingsForPath = bindings[ j ], lastCached = bindingsForPath[ firstActiveIndex ]; let binding = bindingsForPath[ index ]; bindingsForPath[ index ] = lastCached; if ( binding === undefined ) { // since we do not bother to create new bindings // for objects that are cached, the binding may // or may not exist binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ); } bindingsForPath[ firstActiveIndex ] = binding; } } else if ( objects[ index ] !== knownObject ) { console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' + 'detected. Clean the caches or recreate your infrastructure when reloading scenes.' ); } // else the object is already where we want it to be } // for arguments this.nCachedObjects_ = nCachedObjects; }, remove: function () { const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; let nCachedObjects = this.nCachedObjects_; for ( let i = 0, n = arguments.length; i !== n; ++ i ) { const object = arguments[ i ], uuid = object.uuid, index = indicesByUUID[ uuid ]; if ( index !== undefined && index >= nCachedObjects ) { // move existing object into the CACHED region const lastCachedIndex = nCachedObjects ++, firstActiveObject = objects[ lastCachedIndex ]; indicesByUUID[ firstActiveObject.uuid ] = index; objects[ index ] = firstActiveObject; indicesByUUID[ uuid ] = lastCachedIndex; objects[ lastCachedIndex ] = object; // accounting is done, now do the same for all bindings for ( let j = 0, m = nBindings; j !== m; ++ j ) { const bindingsForPath = bindings[ j ], firstActive = bindingsForPath[ lastCachedIndex ], binding = bindingsForPath[ index ]; bindingsForPath[ index ] = firstActive; bindingsForPath[ lastCachedIndex ] = binding; } } } // for arguments this.nCachedObjects_ = nCachedObjects; }, // remove & forget uncache: function () { const objects = this._objects, indicesByUUID = this._indicesByUUID, bindings = this._bindings, nBindings = bindings.length; let nCachedObjects = this.nCachedObjects_, nObjects = objects.length; for ( let i = 0, n = arguments.length; i !== n; ++ i ) { const object = arguments[ i ], uuid = object.uuid, index = indicesByUUID[ uuid ]; if ( index !== undefined ) { delete indicesByUUID[ uuid ]; if ( index < nCachedObjects ) { // object is cached, shrink the CACHED region const firstActiveIndex = -- nCachedObjects, lastCachedObject = objects[ firstActiveIndex ], lastIndex = -- nObjects, lastObject = objects[ lastIndex ]; // last cached object takes this object's place indicesByUUID[ lastCachedObject.uuid ] = index; objects[ index ] = lastCachedObject; // last object goes to the activated slot and pop indicesByUUID[ lastObject.uuid ] = firstActiveIndex; objects[ firstActiveIndex ] = lastObject; objects.pop(); // accounting is done, now do the same for all bindings for ( let j = 0, m = nBindings; j !== m; ++ j ) { const bindingsForPath = bindings[ j ], lastCached = bindingsForPath[ firstActiveIndex ], last = bindingsForPath[ lastIndex ]; bindingsForPath[ index ] = lastCached; bindingsForPath[ firstActiveIndex ] = last; bindingsForPath.pop(); } } else { // object is active, just swap with the last and pop const lastIndex = -- nObjects, lastObject = objects[ lastIndex ]; if ( lastIndex > 0 ) { indicesByUUID[ lastObject.uuid ] = index; } objects[ index ] = lastObject; objects.pop(); // accounting is done, now do the same for all bindings for ( let j = 0, m = nBindings; j !== m; ++ j ) { const bindingsForPath = bindings[ j ]; bindingsForPath[ index ] = bindingsForPath[ lastIndex ]; bindingsForPath.pop(); } } // cached or active } // if object is known } // for arguments this.nCachedObjects_ = nCachedObjects; }, // Internal interface used by befriended PropertyBinding.Composite: subscribe_: function ( path, parsedPath ) { // returns an array of bindings for the given path that is changed // according to the contained objects in the group const indicesByPath = this._bindingsIndicesByPath; let index = indicesByPath[ path ]; const bindings = this._bindings; if ( index !== undefined ) return bindings[ index ]; const paths = this._paths, parsedPaths = this._parsedPaths, objects = this._objects, nObjects = objects.length, nCachedObjects = this.nCachedObjects_, bindingsForPath = new Array( nObjects ); index = bindings.length; indicesByPath[ path ] = index; paths.push( path ); parsedPaths.push( parsedPath ); bindings.push( bindingsForPath ); for ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) { const object = objects[ i ]; bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath ); } return bindingsForPath; }, unsubscribe_: function ( path ) { // tells the group to forget about a property path and no longer // update the array previously obtained with 'subscribe_' const indicesByPath = this._bindingsIndicesByPath, index = indicesByPath[ path ]; if ( index !== undefined ) { const paths = this._paths, parsedPaths = this._parsedPaths, bindings = this._bindings, lastBindingsIndex = bindings.length - 1, lastBindings = bindings[ lastBindingsIndex ], lastBindingsPath = path[ lastBindingsIndex ]; indicesByPath[ lastBindingsPath ] = index; bindings[ index ] = lastBindings; bindings.pop(); parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ]; parsedPaths.pop(); paths[ index ] = paths[ lastBindingsIndex ]; paths.pop(); } } } ); class AnimationAction { constructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) { this._mixer = mixer; this._clip = clip; this._localRoot = localRoot; this.blendMode = blendMode; const tracks = clip.tracks, nTracks = tracks.length, interpolants = new Array( nTracks ); const interpolantSettings = { endingStart: ZeroCurvatureEnding, endingEnd: ZeroCurvatureEnding }; for ( let i = 0; i !== nTracks; ++ i ) { const interpolant = tracks[ i ].createInterpolant( null ); interpolants[ i ] = interpolant; interpolant.settings = interpolantSettings; } this._interpolantSettings = interpolantSettings; this._interpolants = interpolants; // bound by the mixer // inside: PropertyMixer (managed by the mixer) this._propertyBindings = new Array( nTracks ); this._cacheIndex = null; // for the memory manager this._byClipCacheIndex = null; // for the memory manager this._timeScaleInterpolant = null; this._weightInterpolant = null; this.loop = LoopRepeat; this._loopCount = - 1; // global mixer time when the action is to be started // it's set back to 'null' upon start of the action this._startTime = null; // scaled local time of the action // gets clamped or wrapped to 0..clip.duration according to loop this.time = 0; this.timeScale = 1; this._effectiveTimeScale = 1; this.weight = 1; this._effectiveWeight = 1; this.repetitions = Infinity; // no. of repetitions when looping this.paused = false; // true -> zero effective time scale this.enabled = true; // false -> zero effective weight this.clampWhenFinished = false;// keep feeding the last frame? this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate this.zeroSlopeAtEnd = true;// clips for start, loop and end } // State & Scheduling play() { this._mixer._activateAction( this ); return this; } stop() { this._mixer._deactivateAction( this ); return this.reset(); } reset() { this.paused = false; this.enabled = true; this.time = 0; // restart clip this._loopCount = - 1;// forget previous loops this._startTime = null;// forget scheduling return this.stopFading().stopWarping(); } isRunning() { return this.enabled && ! this.paused && this.timeScale !== 0 && this._startTime === null && this._mixer._isActiveAction( this ); } // return true when play has been called isScheduled() { return this._mixer._isActiveAction( this ); } startAt( time ) { this._startTime = time; return this; } setLoop( mode, repetitions ) { this.loop = mode; this.repetitions = repetitions; return this; } // Weight // set the weight stopping any scheduled fading // although .enabled = false yields an effective weight of zero, this // method does *not* change .enabled, because it would be confusing setEffectiveWeight( weight ) { this.weight = weight; // note: same logic as when updated at runtime this._effectiveWeight = this.enabled ? weight : 0; return this.stopFading(); } // return the weight considering fading and .enabled getEffectiveWeight() { return this._effectiveWeight; } fadeIn( duration ) { return this._scheduleFading( duration, 0, 1 ); } fadeOut( duration ) { return this._scheduleFading( duration, 1, 0 ); } crossFadeFrom( fadeOutAction, duration, warp ) { fadeOutAction.fadeOut( duration ); this.fadeIn( duration ); if ( warp ) { const fadeInDuration = this._clip.duration, fadeOutDuration = fadeOutAction._clip.duration, startEndRatio = fadeOutDuration / fadeInDuration, endStartRatio = fadeInDuration / fadeOutDuration; fadeOutAction.warp( 1.0, startEndRatio, duration ); this.warp( endStartRatio, 1.0, duration ); } return this; } crossFadeTo( fadeInAction, duration, warp ) { return fadeInAction.crossFadeFrom( this, duration, warp ); } stopFading() { const weightInterpolant = this._weightInterpolant; if ( weightInterpolant !== null ) { this._weightInterpolant = null; this._mixer._takeBackControlInterpolant( weightInterpolant ); } return this; } // Time Scale Control // set the time scale stopping any scheduled warping // although .paused = true yields an effective time scale of zero, this // method does *not* change .paused, because it would be confusing setEffectiveTimeScale( timeScale ) { this.timeScale = timeScale; this._effectiveTimeScale = this.paused ? 0 : timeScale; return this.stopWarping(); } // return the time scale considering warping and .paused getEffectiveTimeScale() { return this._effectiveTimeScale; } setDuration( duration ) { this.timeScale = this._clip.duration / duration; return this.stopWarping(); } syncWith( action ) { this.time = action.time; this.timeScale = action.timeScale; return this.stopWarping(); } halt( duration ) { return this.warp( this._effectiveTimeScale, 0, duration ); } warp( startTimeScale, endTimeScale, duration ) { const mixer = this._mixer, now = mixer.time, timeScale = this.timeScale; let interpolant = this._timeScaleInterpolant; if ( interpolant === null ) { interpolant = mixer._lendControlInterpolant(); this._timeScaleInterpolant = interpolant; } const times = interpolant.parameterPositions, values = interpolant.sampleValues; times[ 0 ] = now; times[ 1 ] = now + duration; values[ 0 ] = startTimeScale / timeScale; values[ 1 ] = endTimeScale / timeScale; return this; } stopWarping() { const timeScaleInterpolant = this._timeScaleInterpolant; if ( timeScaleInterpolant !== null ) { this._timeScaleInterpolant = null; this._mixer._takeBackControlInterpolant( timeScaleInterpolant ); } return this; } // Object Accessors getMixer() { return this._mixer; } getClip() { return this._clip; } getRoot() { return this._localRoot || this._mixer._root; } // Interna _update( time, deltaTime, timeDirection, accuIndex ) { // called by the mixer if ( ! this.enabled ) { // call ._updateWeight() to update ._effectiveWeight this._updateWeight( time ); return; } const startTime = this._startTime; if ( startTime !== null ) { // check for scheduled start of action const timeRunning = ( time - startTime ) * timeDirection; if ( timeRunning < 0 || timeDirection === 0 ) { return; // yet to come / don't decide when delta = 0 } // start this._startTime = null; // unschedule deltaTime = timeDirection * timeRunning; } // apply time scale and advance time deltaTime *= this._updateTimeScale( time ); const clipTime = this._updateTime( deltaTime ); // note: _updateTime may disable the action resulting in // an effective weight of 0 const weight = this._updateWeight( time ); if ( weight > 0 ) { const interpolants = this._interpolants; const propertyMixers = this._propertyBindings; switch ( this.blendMode ) { case AdditiveAnimationBlendMode: for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { interpolants[ j ].evaluate( clipTime ); propertyMixers[ j ].accumulateAdditive( weight ); } break; case NormalAnimationBlendMode: default: for ( let j = 0, m = interpolants.length; j !== m; ++ j ) { interpolants[ j ].evaluate( clipTime ); propertyMixers[ j ].accumulate( accuIndex, weight ); } } } } _updateWeight( time ) { let weight = 0; if ( this.enabled ) { weight = this.weight; const interpolant = this._weightInterpolant; if ( interpolant !== null ) { const interpolantValue = interpolant.evaluate( time )[ 0 ]; weight *= interpolantValue; if ( time > interpolant.parameterPositions[ 1 ] ) { this.stopFading(); if ( interpolantValue === 0 ) { // faded out, disable this.enabled = false; } } } } this._effectiveWeight = weight; return weight; } _updateTimeScale( time ) { let timeScale = 0; if ( ! this.paused ) { timeScale = this.timeScale; const interpolant = this._timeScaleInterpolant; if ( interpolant !== null ) { const interpolantValue = interpolant.evaluate( time )[ 0 ]; timeScale *= interpolantValue; if ( time > interpolant.parameterPositions[ 1 ] ) { this.stopWarping(); if ( timeScale === 0 ) { // motion has halted, pause this.paused = true; } else { // warp done - apply final time scale this.timeScale = timeScale; } } } } this._effectiveTimeScale = timeScale; return timeScale; } _updateTime( deltaTime ) { const duration = this._clip.duration; const loop = this.loop; let time = this.time + deltaTime; let loopCount = this._loopCount; const pingPong = ( loop === LoopPingPong ); if ( deltaTime === 0 ) { if ( loopCount === - 1 ) return time; return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time; } if ( loop === LoopOnce ) { if ( loopCount === - 1 ) { // just started this._loopCount = 0; this._setEndings( true, true, false ); } handle_stop: { if ( time >= duration ) { time = duration; } else if ( time < 0 ) { time = 0; } else { this.time = time; break handle_stop; } if ( this.clampWhenFinished ) this.paused = true; else this.enabled = false; this.time = time; this._mixer.dispatchEvent( { type: 'finished', action: this, direction: deltaTime < 0 ? - 1 : 1 } ); } } else { // repetitive Repeat or PingPong if ( loopCount === - 1 ) { // just started if ( deltaTime >= 0 ) { loopCount = 0; this._setEndings( true, this.repetitions === 0, pingPong ); } else { // when looping in reverse direction, the initial // transition through zero counts as a repetition, // so leave loopCount at -1 this._setEndings( this.repetitions === 0, true, pingPong ); } } if ( time >= duration || time < 0 ) { // wrap around const loopDelta = Math.floor( time / duration ); // signed time -= duration * loopDelta; loopCount += Math.abs( loopDelta ); const pending = this.repetitions - loopCount; if ( pending <= 0 ) { // have to stop (switch state, clamp time, fire event) if ( this.clampWhenFinished ) this.paused = true; else this.enabled = false; time = deltaTime > 0 ? duration : 0; this.time = time; this._mixer.dispatchEvent( { type: 'finished', action: this, direction: deltaTime > 0 ? 1 : - 1 } ); } else { // keep running if ( pending === 1 ) { // entering the last round const atStart = deltaTime < 0; this._setEndings( atStart, ! atStart, pingPong ); } else { this._setEndings( false, false, pingPong ); } this._loopCount = loopCount; this.time = time; this._mixer.dispatchEvent( { type: 'loop', action: this, loopDelta: loopDelta } ); } } else { this.time = time; } if ( pingPong && ( loopCount & 1 ) === 1 ) { // invert time for the "pong round" return duration - time; } } return time; } _setEndings( atStart, atEnd, pingPong ) { const settings = this._interpolantSettings; if ( pingPong ) { settings.endingStart = ZeroSlopeEnding; settings.endingEnd = ZeroSlopeEnding; } else { // assuming for LoopOnce atStart == atEnd == true if ( atStart ) { settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding; } else { settings.endingStart = WrapAroundEnding; } if ( atEnd ) { settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding; } else { settings.endingEnd = WrapAroundEnding; } } } _scheduleFading( duration, weightNow, weightThen ) { const mixer = this._mixer, now = mixer.time; let interpolant = this._weightInterpolant; if ( interpolant === null ) { interpolant = mixer._lendControlInterpolant(); this._weightInterpolant = interpolant; } const times = interpolant.parameterPositions, values = interpolant.sampleValues; times[ 0 ] = now; values[ 0 ] = weightNow; times[ 1 ] = now + duration; values[ 1 ] = weightThen; return this; } } function AnimationMixer( root ) { this._root = root; this._initMemoryManager(); this._accuIndex = 0; this.time = 0; this.timeScale = 1.0; } AnimationMixer.prototype = Object.assign( Object.create( EventDispatcher$1.prototype ), { constructor: AnimationMixer, _bindAction: function ( action, prototypeAction ) { const root = action._localRoot || this._root, tracks = action._clip.tracks, nTracks = tracks.length, bindings = action._propertyBindings, interpolants = action._interpolants, rootUuid = root.uuid, bindingsByRoot = this._bindingsByRootAndName; let bindingsByName = bindingsByRoot[ rootUuid ]; if ( bindingsByName === undefined ) { bindingsByName = {}; bindingsByRoot[ rootUuid ] = bindingsByName; } for ( let i = 0; i !== nTracks; ++ i ) { const track = tracks[ i ], trackName = track.name; let binding = bindingsByName[ trackName ]; if ( binding !== undefined ) { bindings[ i ] = binding; } else { binding = bindings[ i ]; if ( binding !== undefined ) { // existing binding, make sure the cache knows if ( binding._cacheIndex === null ) { ++ binding.referenceCount; this._addInactiveBinding( binding, rootUuid, trackName ); } continue; } const path = prototypeAction && prototypeAction. _propertyBindings[ i ].binding.parsedPath; binding = new PropertyMixer( PropertyBinding.create( root, trackName, path ), track.ValueTypeName, track.getValueSize() ); ++ binding.referenceCount; this._addInactiveBinding( binding, rootUuid, trackName ); bindings[ i ] = binding; } interpolants[ i ].resultBuffer = binding.buffer; } }, _activateAction: function ( action ) { if ( ! this._isActiveAction( action ) ) { if ( action._cacheIndex === null ) { // this action has been forgotten by the cache, but the user // appears to be still using it -> rebind const rootUuid = ( action._localRoot || this._root ).uuid, clipUuid = action._clip.uuid, actionsForClip = this._actionsByClip[ clipUuid ]; this._bindAction( action, actionsForClip && actionsForClip.knownActions[ 0 ] ); this._addInactiveAction( action, clipUuid, rootUuid ); } const bindings = action._propertyBindings; // increment reference counts / sort out state for ( let i = 0, n = bindings.length; i !== n; ++ i ) { const binding = bindings[ i ]; if ( binding.useCount ++ === 0 ) { this._lendBinding( binding ); binding.saveOriginalState(); } } this._lendAction( action ); } }, _deactivateAction: function ( action ) { if ( this._isActiveAction( action ) ) { const bindings = action._propertyBindings; // decrement reference counts / sort out state for ( let i = 0, n = bindings.length; i !== n; ++ i ) { const binding = bindings[ i ]; if ( -- binding.useCount === 0 ) { binding.restoreOriginalState(); this._takeBackBinding( binding ); } } this._takeBackAction( action ); } }, // Memory manager _initMemoryManager: function () { this._actions = []; // 'nActiveActions' followed by inactive ones this._nActiveActions = 0; this._actionsByClip = {}; // inside: // { // knownActions: Array< AnimationAction > - used as prototypes // actionByRoot: AnimationAction - lookup // } this._bindings = []; // 'nActiveBindings' followed by inactive ones this._nActiveBindings = 0; this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer > this._controlInterpolants = []; // same game as above this._nActiveControlInterpolants = 0; const scope = this; this.stats = { actions: { get total() { return scope._actions.length; }, get inUse() { return scope._nActiveActions; } }, bindings: { get total() { return scope._bindings.length; }, get inUse() { return scope._nActiveBindings; } }, controlInterpolants: { get total() { return scope._controlInterpolants.length; }, get inUse() { return scope._nActiveControlInterpolants; } } }; }, // Memory management for AnimationAction objects _isActiveAction: function ( action ) { const index = action._cacheIndex; return index !== null && index < this._nActiveActions; }, _addInactiveAction: function ( action, clipUuid, rootUuid ) { const actions = this._actions, actionsByClip = this._actionsByClip; let actionsForClip = actionsByClip[ clipUuid ]; if ( actionsForClip === undefined ) { actionsForClip = { knownActions: [ action ], actionByRoot: {} }; action._byClipCacheIndex = 0; actionsByClip[ clipUuid ] = actionsForClip; } else { const knownActions = actionsForClip.knownActions; action._byClipCacheIndex = knownActions.length; knownActions.push( action ); } action._cacheIndex = actions.length; actions.push( action ); actionsForClip.actionByRoot[ rootUuid ] = action; }, _removeInactiveAction: function ( action ) { const actions = this._actions, lastInactiveAction = actions[ actions.length - 1 ], cacheIndex = action._cacheIndex; lastInactiveAction._cacheIndex = cacheIndex; actions[ cacheIndex ] = lastInactiveAction; actions.pop(); action._cacheIndex = null; const clipUuid = action._clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[ clipUuid ], knownActionsForClip = actionsForClip.knownActions, lastKnownAction = knownActionsForClip[ knownActionsForClip.length - 1 ], byClipCacheIndex = action._byClipCacheIndex; lastKnownAction._byClipCacheIndex = byClipCacheIndex; knownActionsForClip[ byClipCacheIndex ] = lastKnownAction; knownActionsForClip.pop(); action._byClipCacheIndex = null; const actionByRoot = actionsForClip.actionByRoot, rootUuid = ( action._localRoot || this._root ).uuid; delete actionByRoot[ rootUuid ]; if ( knownActionsForClip.length === 0 ) { delete actionsByClip[ clipUuid ]; } this._removeInactiveBindingsForAction( action ); }, _removeInactiveBindingsForAction: function ( action ) { const bindings = action._propertyBindings; for ( let i = 0, n = bindings.length; i !== n; ++ i ) { const binding = bindings[ i ]; if ( -- binding.referenceCount === 0 ) { this._removeInactiveBinding( binding ); } } }, _lendAction: function ( action ) { // [ active actions | inactive actions ] // [ active actions >| inactive actions ] // s a // <-swap-> // a s const actions = this._actions, prevIndex = action._cacheIndex, lastActiveIndex = this._nActiveActions ++, firstInactiveAction = actions[ lastActiveIndex ]; action._cacheIndex = lastActiveIndex; actions[ lastActiveIndex ] = action; firstInactiveAction._cacheIndex = prevIndex; actions[ prevIndex ] = firstInactiveAction; }, _takeBackAction: function ( action ) { // [ active actions | inactive actions ] // [ active actions |< inactive actions ] // a s // <-swap-> // s a const actions = this._actions, prevIndex = action._cacheIndex, firstInactiveIndex = -- this._nActiveActions, lastActiveAction = actions[ firstInactiveIndex ]; action._cacheIndex = firstInactiveIndex; actions[ firstInactiveIndex ] = action; lastActiveAction._cacheIndex = prevIndex; actions[ prevIndex ] = lastActiveAction; }, // Memory management for PropertyMixer objects _addInactiveBinding: function ( binding, rootUuid, trackName ) { const bindingsByRoot = this._bindingsByRootAndName, bindings = this._bindings; let bindingByName = bindingsByRoot[ rootUuid ]; if ( bindingByName === undefined ) { bindingByName = {}; bindingsByRoot[ rootUuid ] = bindingByName; } bindingByName[ trackName ] = binding; binding._cacheIndex = bindings.length; bindings.push( binding ); }, _removeInactiveBinding: function ( binding ) { const bindings = this._bindings, propBinding = binding.binding, rootUuid = propBinding.rootNode.uuid, trackName = propBinding.path, bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[ rootUuid ], lastInactiveBinding = bindings[ bindings.length - 1 ], cacheIndex = binding._cacheIndex; lastInactiveBinding._cacheIndex = cacheIndex; bindings[ cacheIndex ] = lastInactiveBinding; bindings.pop(); delete bindingByName[ trackName ]; if ( Object.keys( bindingByName ).length === 0 ) { delete bindingsByRoot[ rootUuid ]; } }, _lendBinding: function ( binding ) { const bindings = this._bindings, prevIndex = binding._cacheIndex, lastActiveIndex = this._nActiveBindings ++, firstInactiveBinding = bindings[ lastActiveIndex ]; binding._cacheIndex = lastActiveIndex; bindings[ lastActiveIndex ] = binding; firstInactiveBinding._cacheIndex = prevIndex; bindings[ prevIndex ] = firstInactiveBinding; }, _takeBackBinding: function ( binding ) { const bindings = this._bindings, prevIndex = binding._cacheIndex, firstInactiveIndex = -- this._nActiveBindings, lastActiveBinding = bindings[ firstInactiveIndex ]; binding._cacheIndex = firstInactiveIndex; bindings[ firstInactiveIndex ] = binding; lastActiveBinding._cacheIndex = prevIndex; bindings[ prevIndex ] = lastActiveBinding; }, // Memory management of Interpolants for weight and time scale _lendControlInterpolant: function () { const interpolants = this._controlInterpolants, lastActiveIndex = this._nActiveControlInterpolants ++; let interpolant = interpolants[ lastActiveIndex ]; if ( interpolant === undefined ) { interpolant = new LinearInterpolant( new Float32Array( 2 ), new Float32Array( 2 ), 1, this._controlInterpolantsResultBuffer ); interpolant.__cacheIndex = lastActiveIndex; interpolants[ lastActiveIndex ] = interpolant; } return interpolant; }, _takeBackControlInterpolant: function ( interpolant ) { const interpolants = this._controlInterpolants, prevIndex = interpolant.__cacheIndex, firstInactiveIndex = -- this._nActiveControlInterpolants, lastActiveInterpolant = interpolants[ firstInactiveIndex ]; interpolant.__cacheIndex = firstInactiveIndex; interpolants[ firstInactiveIndex ] = interpolant; lastActiveInterpolant.__cacheIndex = prevIndex; interpolants[ prevIndex ] = lastActiveInterpolant; }, _controlInterpolantsResultBuffer: new Float32Array( 1 ), // return an action for a clip optionally using a custom root target // object (this method allocates a lot of dynamic memory in case a // previously unknown clip/root combination is specified) clipAction: function ( clip, optionalRoot, blendMode ) { const root = optionalRoot || this._root, rootUuid = root.uuid; let clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip; const clipUuid = clipObject !== null ? clipObject.uuid : clip; const actionsForClip = this._actionsByClip[ clipUuid ]; let prototypeAction = null; if ( blendMode === undefined ) { if ( clipObject !== null ) { blendMode = clipObject.blendMode; } else { blendMode = NormalAnimationBlendMode; } } if ( actionsForClip !== undefined ) { const existingAction = actionsForClip.actionByRoot[ rootUuid ]; if ( existingAction !== undefined && existingAction.blendMode === blendMode ) { return existingAction; } // we know the clip, so we don't have to parse all // the bindings again but can just copy prototypeAction = actionsForClip.knownActions[ 0 ]; // also, take the clip from the prototype action if ( clipObject === null ) clipObject = prototypeAction._clip; } // clip must be known when specified via string if ( clipObject === null ) return null; // allocate all resources required to run it const newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode ); this._bindAction( newAction, prototypeAction ); // and make the action known to the memory manager this._addInactiveAction( newAction, clipUuid, rootUuid ); return newAction; }, // get an existing action existingAction: function ( clip, optionalRoot ) { const root = optionalRoot || this._root, rootUuid = root.uuid, clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip, clipUuid = clipObject ? clipObject.uuid : clip, actionsForClip = this._actionsByClip[ clipUuid ]; if ( actionsForClip !== undefined ) { return actionsForClip.actionByRoot[ rootUuid ] || null; } return null; }, // deactivates all previously scheduled actions stopAllAction: function () { const actions = this._actions, nActions = this._nActiveActions; for ( let i = nActions - 1; i >= 0; -- i ) { actions[ i ].stop(); } return this; }, // advance the time and update apply the animation update: function ( deltaTime ) { deltaTime *= this.timeScale; const actions = this._actions, nActions = this._nActiveActions, time = this.time += deltaTime, timeDirection = Math.sign( deltaTime ), accuIndex = this._accuIndex ^= 1; // run active actions for ( let i = 0; i !== nActions; ++ i ) { const action = actions[ i ]; action._update( time, deltaTime, timeDirection, accuIndex ); } // update scene graph const bindings = this._bindings, nBindings = this._nActiveBindings; for ( let i = 0; i !== nBindings; ++ i ) { bindings[ i ].apply( accuIndex ); } return this; }, // Allows you to seek to a specific time in an animation. setTime: function ( timeInSeconds ) { this.time = 0; // Zero out time attribute for AnimationMixer object; for ( let i = 0; i < this._actions.length; i ++ ) { this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects. } return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object. }, // return this mixer's root target object getRoot: function () { return this._root; }, // free all resources specific to a particular clip uncacheClip: function ( clip ) { const actions = this._actions, clipUuid = clip.uuid, actionsByClip = this._actionsByClip, actionsForClip = actionsByClip[ clipUuid ]; if ( actionsForClip !== undefined ) { // note: just calling _removeInactiveAction would mess up the // iteration state and also require updating the state we can // just throw away const actionsToRemove = actionsForClip.knownActions; for ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) { const action = actionsToRemove[ i ]; this._deactivateAction( action ); const cacheIndex = action._cacheIndex, lastInactiveAction = actions[ actions.length - 1 ]; action._cacheIndex = null; action._byClipCacheIndex = null; lastInactiveAction._cacheIndex = cacheIndex; actions[ cacheIndex ] = lastInactiveAction; actions.pop(); this._removeInactiveBindingsForAction( action ); } delete actionsByClip[ clipUuid ]; } }, // free all resources specific to a particular root target object uncacheRoot: function ( root ) { const rootUuid = root.uuid, actionsByClip = this._actionsByClip; for ( const clipUuid in actionsByClip ) { const actionByRoot = actionsByClip[ clipUuid ].actionByRoot, action = actionByRoot[ rootUuid ]; if ( action !== undefined ) { this._deactivateAction( action ); this._removeInactiveAction( action ); } } const bindingsByRoot = this._bindingsByRootAndName, bindingByName = bindingsByRoot[ rootUuid ]; if ( bindingByName !== undefined ) { for ( const trackName in bindingByName ) { const binding = bindingByName[ trackName ]; binding.restoreOriginalState(); this._removeInactiveBinding( binding ); } } }, // remove a targeted clip from the cache uncacheAction: function ( clip, optionalRoot ) { const action = this.existingAction( clip, optionalRoot ); if ( action !== null ) { this._deactivateAction( action ); this._removeInactiveAction( action ); } } } ); class Uniform { constructor( value ) { if ( typeof value === 'string' ) { console.warn( 'THREE.Uniform: Type parameter is no longer needed.' ); value = arguments[ 1 ]; } this.value = value; } clone() { return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() ); } } function InstancedInterleavedBuffer( array, stride, meshPerAttribute ) { InterleavedBuffer.call( this, array, stride ); this.meshPerAttribute = meshPerAttribute || 1; } InstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), { constructor: InstancedInterleavedBuffer, isInstancedInterleavedBuffer: true, copy: function ( source ) { InterleavedBuffer.prototype.copy.call( this, source ); this.meshPerAttribute = source.meshPerAttribute; return this; }, clone: function ( data ) { const ib = InterleavedBuffer.prototype.clone.call( this, data ); ib.meshPerAttribute = this.meshPerAttribute; return ib; }, toJSON: function ( data ) { const json = InterleavedBuffer.prototype.toJSON.call( this, data ); json.isInstancedInterleavedBuffer = true; json.meshPerAttribute = this.meshPerAttribute; return json; } } ); function GLBufferAttribute( buffer, type, itemSize, elementSize, count ) { this.buffer = buffer; this.type = type; this.itemSize = itemSize; this.elementSize = elementSize; this.count = count; this.version = 0; } Object.defineProperty( GLBufferAttribute.prototype, 'needsUpdate', { set: function ( value ) { if ( value === true ) this.version ++; } } ); Object.assign( GLBufferAttribute.prototype, { isGLBufferAttribute: true, setBuffer: function ( buffer ) { this.buffer = buffer; return this; }, setType: function ( type, elementSize ) { this.type = type; this.elementSize = elementSize; return this; }, setItemSize: function ( itemSize ) { this.itemSize = itemSize; return this; }, setCount: function ( count ) { this.count = count; return this; }, } ); function Raycaster( origin, direction, near, far ) { this.ray = new Ray( origin, direction ); // direction is assumed to be normalized (for accurate distance calculations) this.near = near || 0; this.far = far || Infinity; this.camera = null; this.layers = new Layers(); this.params = { Mesh: {}, Line: { threshold: 1 }, LOD: {}, Points: { threshold: 1 }, Sprite: {} }; Object.defineProperties( this.params, { PointCloud: { get: function () { console.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' ); return this.Points; } } } ); } function ascSort( a, b ) { return a.distance - b.distance; } function intersectObject( object, raycaster, intersects, recursive ) { if ( object.layers.test( raycaster.layers ) ) { object.raycast( raycaster, intersects ); } if ( recursive === true ) { const children = object.children; for ( let i = 0, l = children.length; i < l; i ++ ) { intersectObject( children[ i ], raycaster, intersects, true ); } } } Object.assign( Raycaster.prototype, { set: function ( origin, direction ) { // direction is assumed to be normalized (for accurate distance calculations) this.ray.set( origin, direction ); }, setFromCamera: function ( coords, camera ) { if ( camera && camera.isPerspectiveCamera ) { this.ray.origin.setFromMatrixPosition( camera.matrixWorld ); this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize(); this.camera = camera; } else if ( camera && camera.isOrthographicCamera ) { this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld ); this.camera = camera; } else { console.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type ); } }, intersectObject: function ( object, recursive, optionalTarget ) { const intersects = optionalTarget || []; intersectObject( object, this, intersects, recursive ); intersects.sort( ascSort ); return intersects; }, intersectObjects: function ( objects, recursive, optionalTarget ) { const intersects = optionalTarget || []; if ( Array.isArray( objects ) === false ) { console.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' ); return intersects; } for ( let i = 0, l = objects.length; i < l; i ++ ) { intersectObject( objects[ i ], this, intersects, recursive ); } intersects.sort( ascSort ); return intersects; } } ); /** * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system * * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up. * The azimuthal angle (theta) is measured from the positive z-axis. */ class Spherical { constructor( radius = 1, phi = 0, theta = 0 ) { this.radius = radius; this.phi = phi; // polar angle this.theta = theta; // azimuthal angle return this; } set( radius, phi, theta ) { this.radius = radius; this.phi = phi; this.theta = theta; return this; } clone() { return new this.constructor().copy( this ); } copy( other ) { this.radius = other.radius; this.phi = other.phi; this.theta = other.theta; return this; } // restrict phi to be betwee EPS and PI-EPS makeSafe() { const EPS = 0.000001; this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) ); return this; } setFromVector3( v ) { return this.setFromCartesianCoords( v.x, v.y, v.z ); } setFromCartesianCoords( x, y, z ) { this.radius = Math.sqrt( x * x + y * y + z * z ); if ( this.radius === 0 ) { this.theta = 0; this.phi = 0; } else { this.theta = Math.atan2( x, z ); this.phi = Math.acos( MathUtils.clamp( y / this.radius, - 1, 1 ) ); } return this; } } /** * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system */ class Cylindrical { constructor( radius, theta, y ) { this.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane this.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis this.y = ( y !== undefined ) ? y : 0; // height above the x-z plane return this; } set( radius, theta, y ) { this.radius = radius; this.theta = theta; this.y = y; return this; } clone() { return new this.constructor().copy( this ); } copy( other ) { this.radius = other.radius; this.theta = other.theta; this.y = other.y; return this; } setFromVector3( v ) { return this.setFromCartesianCoords( v.x, v.y, v.z ); } setFromCartesianCoords( x, y, z ) { this.radius = Math.sqrt( x * x + z * z ); this.theta = Math.atan2( x, z ); this.y = y; return this; } } const _vector$8 = /*@__PURE__*/ new Vector2(); class Box2 { constructor( min, max ) { Object.defineProperty( this, 'isBox2', { value: true } ); this.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity ); this.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity ); } set( min, max ) { this.min.copy( min ); this.max.copy( max ); return this; } setFromPoints( points ) { this.makeEmpty(); for ( let i = 0, il = points.length; i < il; i ++ ) { this.expandByPoint( points[ i ] ); } return this; } setFromCenterAndSize( center, size ) { const halfSize = _vector$8.copy( size ).multiplyScalar( 0.5 ); this.min.copy( center ).sub( halfSize ); this.max.copy( center ).add( halfSize ); return this; } clone() { return new this.constructor().copy( this ); } copy( box ) { this.min.copy( box.min ); this.max.copy( box.max ); return this; } makeEmpty() { this.min.x = this.min.y = + Infinity; this.max.x = this.max.y = - Infinity; return this; } isEmpty() { // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ); } getCenter( target ) { if ( target === undefined ) { console.warn( 'THREE.Box2: .getCenter() target is now required' ); target = new Vector2(); } return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 ); } getSize( target ) { if ( target === undefined ) { console.warn( 'THREE.Box2: .getSize() target is now required' ); target = new Vector2(); } return this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min ); } expandByPoint( point ) { this.min.min( point ); this.max.max( point ); return this; } expandByVector( vector ) { this.min.sub( vector ); this.max.add( vector ); return this; } expandByScalar( scalar ) { this.min.addScalar( - scalar ); this.max.addScalar( scalar ); return this; } containsPoint( point ) { return point.x < this.min.x || point.x > this.max.x || point.y < this.min.y || point.y > this.max.y ? false : true; } containsBox( box ) { return this.min.x <= box.min.x && box.max.x <= this.max.x && this.min.y <= box.min.y && box.max.y <= this.max.y; } getParameter( point, target ) { // This can potentially have a divide by zero if the box // has a size dimension of 0. if ( target === undefined ) { console.warn( 'THREE.Box2: .getParameter() target is now required' ); target = new Vector2(); } return target.set( ( point.x - this.min.x ) / ( this.max.x - this.min.x ), ( point.y - this.min.y ) / ( this.max.y - this.min.y ) ); } intersectsBox( box ) { // using 4 splitting planes to rule out intersections return box.max.x < this.min.x || box.min.x > this.max.x || box.max.y < this.min.y || box.min.y > this.max.y ? false : true; } clampPoint( point, target ) { if ( target === undefined ) { console.warn( 'THREE.Box2: .clampPoint() target is now required' ); target = new Vector2(); } return target.copy( point ).clamp( this.min, this.max ); } distanceToPoint( point ) { const clampedPoint = _vector$8.copy( point ).clamp( this.min, this.max ); return clampedPoint.sub( point ).length(); } intersect( box ) { this.min.max( box.min ); this.max.min( box.max ); return this; } union( box ) { this.min.min( box.min ); this.max.max( box.max ); return this; } translate( offset ) { this.min.add( offset ); this.max.add( offset ); return this; } equals( box ) { return box.min.equals( this.min ) && box.max.equals( this.max ); } } const _startP = /*@__PURE__*/ new Vector3(); const _startEnd = /*@__PURE__*/ new Vector3(); class Line3 { constructor( start, end ) { this.start = ( start !== undefined ) ? start : new Vector3(); this.end = ( end !== undefined ) ? end : new Vector3(); } set( start, end ) { this.start.copy( start ); this.end.copy( end ); return this; } clone() { return new this.constructor().copy( this ); } copy( line ) { this.start.copy( line.start ); this.end.copy( line.end ); return this; } getCenter( target ) { if ( target === undefined ) { console.warn( 'THREE.Line3: .getCenter() target is now required' ); target = new Vector3(); } return target.addVectors( this.start, this.end ).multiplyScalar( 0.5 ); } delta( target ) { if ( target === undefined ) { console.warn( 'THREE.Line3: .delta() target is now required' ); target = new Vector3(); } return target.subVectors( this.end, this.start ); } distanceSq() { return this.start.distanceToSquared( this.end ); } distance() { return this.start.distanceTo( this.end ); } at( t, target ) { if ( target === undefined ) { console.warn( 'THREE.Line3: .at() target is now required' ); target = new Vector3(); } return this.delta( target ).multiplyScalar( t ).add( this.start ); } closestPointToPointParameter( point, clampToLine ) { _startP.subVectors( point, this.start ); _startEnd.subVectors( this.end, this.start ); const startEnd2 = _startEnd.dot( _startEnd ); const startEnd_startP = _startEnd.dot( _startP ); let t = startEnd_startP / startEnd2; if ( clampToLine ) { t = MathUtils.clamp( t, 0, 1 ); } return t; } closestPointToPoint( point, clampToLine, target ) { const t = this.closestPointToPointParameter( point, clampToLine ); if ( target === undefined ) { console.warn( 'THREE.Line3: .closestPointToPoint() target is now required' ); target = new Vector3(); } return this.delta( target ).multiplyScalar( t ).add( this.start ); } applyMatrix4( matrix ) { this.start.applyMatrix4( matrix ); this.end.applyMatrix4( matrix ); return this; } equals( line ) { return line.start.equals( this.start ) && line.end.equals( this.end ); } } function ImmediateRenderObject( material ) { Object3D.call( this ); this.material = material; this.render = function ( /* renderCallback */ ) {}; this.hasPositions = false; this.hasNormals = false; this.hasColors = false; this.hasUvs = false; this.positionArray = null; this.normalArray = null; this.colorArray = null; this.uvArray = null; this.count = 0; } ImmediateRenderObject.prototype = Object.create( Object3D.prototype ); ImmediateRenderObject.prototype.constructor = ImmediateRenderObject; ImmediateRenderObject.prototype.isImmediateRenderObject = true; const _vector$9 = /*@__PURE__*/ new Vector3(); class SpotLightHelper extends Object3D { constructor( light, color ) { super(); this.light = light; this.light.updateMatrixWorld(); this.matrix = light.matrixWorld; this.matrixAutoUpdate = false; this.color = color; const geometry = new BufferGeometry(); const positions = [ 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, - 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, - 1, 1 ]; for ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) { const p1 = ( i / l ) * Math.PI * 2; const p2 = ( j / l ) * Math.PI * 2; positions.push( Math.cos( p1 ), Math.sin( p1 ), 1, Math.cos( p2 ), Math.sin( p2 ), 1 ); } geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); this.cone = new LineSegments( geometry, material ); this.add( this.cone ); this.update(); } dispose() { this.cone.geometry.dispose(); this.cone.material.dispose(); } update() { this.light.updateMatrixWorld(); const coneLength = this.light.distance ? this.light.distance : 1000; const coneWidth = coneLength * Math.tan( this.light.angle ); this.cone.scale.set( coneWidth, coneWidth, coneLength ); _vector$9.setFromMatrixPosition( this.light.target.matrixWorld ); this.cone.lookAt( _vector$9 ); if ( this.color !== undefined ) { this.cone.material.color.set( this.color ); } else { this.cone.material.color.copy( this.light.color ); } } } const _vector$a = /*@__PURE__*/ new Vector3(); const _boneMatrix = /*@__PURE__*/ new Matrix4(); const _matrixWorldInv = /*@__PURE__*/ new Matrix4(); class SkeletonHelper extends LineSegments { constructor( object ) { const bones = getBoneList( object ); const geometry = new BufferGeometry(); const vertices = []; const colors = []; const color1 = new Color( 0, 0, 1 ); const color2 = new Color( 0, 1, 0 ); for ( let i = 0; i < bones.length; i ++ ) { const bone = bones[ i ]; if ( bone.parent && bone.parent.isBone ) { vertices.push( 0, 0, 0 ); vertices.push( 0, 0, 0 ); colors.push( color1.r, color1.g, color1.b ); colors.push( color2.r, color2.g, color2.b ); } } geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); const material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } ); super( geometry, material ); this.type = 'SkeletonHelper'; this.isSkeletonHelper = true; this.root = object; this.bones = bones; this.matrix = object.matrixWorld; this.matrixAutoUpdate = false; } updateMatrixWorld( force ) { const bones = this.bones; const geometry = this.geometry; const position = geometry.getAttribute( 'position' ); _matrixWorldInv.copy( this.root.matrixWorld ).invert(); for ( let i = 0, j = 0; i < bones.length; i ++ ) { const bone = bones[ i ]; if ( bone.parent && bone.parent.isBone ) { _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld ); _vector$a.setFromMatrixPosition( _boneMatrix ); position.setXYZ( j, _vector$a.x, _vector$a.y, _vector$a.z ); _boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld ); _vector$a.setFromMatrixPosition( _boneMatrix ); position.setXYZ( j + 1, _vector$a.x, _vector$a.y, _vector$a.z ); j += 2; } } geometry.getAttribute( 'position' ).needsUpdate = true; super.updateMatrixWorld( force ); } } function getBoneList( object ) { const boneList = []; if ( object && object.isBone ) { boneList.push( object ); } for ( let i = 0; i < object.children.length; i ++ ) { boneList.push.apply( boneList, getBoneList( object.children[ i ] ) ); } return boneList; } class PointLightHelper extends Mesh { constructor( light, sphereSize, color ) { const geometry = new SphereBufferGeometry( sphereSize, 4, 2 ); const material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); super( geometry, material ); this.light = light; this.light.updateMatrixWorld(); this.color = color; this.type = 'PointLightHelper'; this.matrix = this.light.matrixWorld; this.matrixAutoUpdate = false; this.update(); /* // TODO: delete this comment? const distanceGeometry = new THREE.IcosahedronBufferGeometry( 1, 2 ); const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } ); this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial ); this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial ); const d = light.distance; if ( d === 0.0 ) { this.lightDistance.visible = false; } else { this.lightDistance.scale.set( d, d, d ); } this.add( this.lightDistance ); */ } dispose() { this.geometry.dispose(); this.material.dispose(); } update() { if ( this.color !== undefined ) { this.material.color.set( this.color ); } else { this.material.color.copy( this.light.color ); } /* const d = this.light.distance; if ( d === 0.0 ) { this.lightDistance.visible = false; } else { this.lightDistance.visible = true; this.lightDistance.scale.set( d, d, d ); } */ } } const _vector$b = /*@__PURE__*/ new Vector3(); const _color1 = /*@__PURE__*/ new Color(); const _color2 = /*@__PURE__*/ new Color(); class HemisphereLightHelper extends Object3D { constructor( light, size, color ) { super(); this.light = light; this.light.updateMatrixWorld(); this.matrix = light.matrixWorld; this.matrixAutoUpdate = false; this.color = color; const geometry = new OctahedronBufferGeometry( size ); geometry.rotateY( Math.PI * 0.5 ); this.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } ); if ( this.color === undefined ) this.material.vertexColors = true; const position = geometry.getAttribute( 'position' ); const colors = new Float32Array( position.count * 3 ); geometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) ); this.add( new Mesh( geometry, this.material ) ); this.update(); } dispose() { this.children[ 0 ].geometry.dispose(); this.children[ 0 ].material.dispose(); } update() { const mesh = this.children[ 0 ]; if ( this.color !== undefined ) { this.material.color.set( this.color ); } else { const colors = mesh.geometry.getAttribute( 'color' ); _color1.copy( this.light.color ); _color2.copy( this.light.groundColor ); for ( let i = 0, l = colors.count; i < l; i ++ ) { const color = ( i < ( l / 2 ) ) ? _color1 : _color2; colors.setXYZ( i, color.r, color.g, color.b ); } colors.needsUpdate = true; } mesh.lookAt( _vector$b.setFromMatrixPosition( this.light.matrixWorld ).negate() ); } } class GridHelper extends LineSegments { constructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) { color1 = new Color( color1 ); color2 = new Color( color2 ); const center = divisions / 2; const step = size / divisions; const halfSize = size / 2; const vertices = [], colors = []; for ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) { vertices.push( - halfSize, 0, k, halfSize, 0, k ); vertices.push( k, 0, - halfSize, k, 0, halfSize ); const color = i === center ? color1 : color2; color.toArray( colors, j ); j += 3; color.toArray( colors, j ); j += 3; color.toArray( colors, j ); j += 3; color.toArray( colors, j ); j += 3; } const geometry = new BufferGeometry(); geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); super( geometry, material ); this.type = 'GridHelper'; } } class PolarGridHelper extends LineSegments { constructor( radius = 10, radials = 16, circles = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) { color1 = new Color( color1 ); color2 = new Color( color2 ); const vertices = []; const colors = []; // create the radials for ( let i = 0; i <= radials; i ++ ) { const v = ( i / radials ) * ( Math.PI * 2 ); const x = Math.sin( v ) * radius; const z = Math.cos( v ) * radius; vertices.push( 0, 0, 0 ); vertices.push( x, 0, z ); const color = ( i & 1 ) ? color1 : color2; colors.push( color.r, color.g, color.b ); colors.push( color.r, color.g, color.b ); } // create the circles for ( let i = 0; i <= circles; i ++ ) { const color = ( i & 1 ) ? color1 : color2; const r = radius - ( radius / circles * i ); for ( let j = 0; j < divisions; j ++ ) { // first vertex let v = ( j / divisions ) * ( Math.PI * 2 ); let x = Math.sin( v ) * r; let z = Math.cos( v ) * r; vertices.push( x, 0, z ); colors.push( color.r, color.g, color.b ); // second vertex v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 ); x = Math.sin( v ) * r; z = Math.cos( v ) * r; vertices.push( x, 0, z ); colors.push( color.r, color.g, color.b ); } } const geometry = new BufferGeometry(); geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); super( geometry, material ); this.type = 'PolarGridHelper'; } } const _v1$6 = /*@__PURE__*/ new Vector3(); const _v2$3 = /*@__PURE__*/ new Vector3(); const _v3$1 = /*@__PURE__*/ new Vector3(); class DirectionalLightHelper extends Object3D { constructor( light, size, color ) { super(); this.light = light; this.light.updateMatrixWorld(); this.matrix = light.matrixWorld; this.matrixAutoUpdate = false; this.color = color; if ( size === undefined ) size = 1; let geometry = new BufferGeometry(); geometry.setAttribute( 'position', new Float32BufferAttribute( [ - size, size, 0, size, size, 0, size, - size, 0, - size, - size, 0, - size, size, 0 ], 3 ) ); const material = new LineBasicMaterial( { fog: false, toneMapped: false } ); this.lightPlane = new Line( geometry, material ); this.add( this.lightPlane ); geometry = new BufferGeometry(); geometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) ); this.targetLine = new Line( geometry, material ); this.add( this.targetLine ); this.update(); } dispose() { this.lightPlane.geometry.dispose(); this.lightPlane.material.dispose(); this.targetLine.geometry.dispose(); this.targetLine.material.dispose(); } update() { _v1$6.setFromMatrixPosition( this.light.matrixWorld ); _v2$3.setFromMatrixPosition( this.light.target.matrixWorld ); _v3$1.subVectors( _v2$3, _v1$6 ); this.lightPlane.lookAt( _v2$3 ); if ( this.color !== undefined ) { this.lightPlane.material.color.set( this.color ); this.targetLine.material.color.set( this.color ); } else { this.lightPlane.material.color.copy( this.light.color ); this.targetLine.material.color.copy( this.light.color ); } this.targetLine.lookAt( _v2$3 ); this.targetLine.scale.z = _v3$1.length(); } } const _vector$c = /*@__PURE__*/ new Vector3(); const _camera = /*@__PURE__*/ new Camera(); /** * - shows frustum, line of sight and up of the camera * - suitable for fast updates * - based on frustum visualization in lightgl.js shadowmap example * http://evanw.github.com/lightgl.js/tests/shadowmap.html */ class CameraHelper extends LineSegments { constructor( camera ) { const geometry = new BufferGeometry(); const material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } ); const vertices = []; const colors = []; const pointMap = {}; // colors const colorFrustum = new Color( 0xffaa00 ); const colorCone = new Color( 0xff0000 ); const colorUp = new Color( 0x00aaff ); const colorTarget = new Color( 0xffffff ); const colorCross = new Color( 0x333333 ); // near addLine( 'n1', 'n2', colorFrustum ); addLine( 'n2', 'n4', colorFrustum ); addLine( 'n4', 'n3', colorFrustum ); addLine( 'n3', 'n1', colorFrustum ); // far addLine( 'f1', 'f2', colorFrustum ); addLine( 'f2', 'f4', colorFrustum ); addLine( 'f4', 'f3', colorFrustum ); addLine( 'f3', 'f1', colorFrustum ); // sides addLine( 'n1', 'f1', colorFrustum ); addLine( 'n2', 'f2', colorFrustum ); addLine( 'n3', 'f3', colorFrustum ); addLine( 'n4', 'f4', colorFrustum ); // cone addLine( 'p', 'n1', colorCone ); addLine( 'p', 'n2', colorCone ); addLine( 'p', 'n3', colorCone ); addLine( 'p', 'n4', colorCone ); // up addLine( 'u1', 'u2', colorUp ); addLine( 'u2', 'u3', colorUp ); addLine( 'u3', 'u1', colorUp ); // target addLine( 'c', 't', colorTarget ); addLine( 'p', 'c', colorCross ); // cross addLine( 'cn1', 'cn2', colorCross ); addLine( 'cn3', 'cn4', colorCross ); addLine( 'cf1', 'cf2', colorCross ); addLine( 'cf3', 'cf4', colorCross ); function addLine( a, b, color ) { addPoint( a, color ); addPoint( b, color ); } function addPoint( id, color ) { vertices.push( 0, 0, 0 ); colors.push( color.r, color.g, color.b ); if ( pointMap[ id ] === undefined ) { pointMap[ id ] = []; } pointMap[ id ].push( ( vertices.length / 3 ) - 1 ); } geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); super( geometry, material ); this.type = 'CameraHelper'; this.camera = camera; if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix(); this.matrix = camera.matrixWorld; this.matrixAutoUpdate = false; this.pointMap = pointMap; this.update(); } update() { const geometry = this.geometry; const pointMap = this.pointMap; const w = 1, h = 1; // we need just camera projection matrix inverse // world matrix must be identity _camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse ); // center / target setPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 ); setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 ); // near setPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 ); setPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 ); setPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 ); setPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 ); // far setPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 ); setPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 ); setPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 ); setPoint( 'f4', pointMap, geometry, _camera, w, h, 1 ); // up setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 ); setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 ); setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 ); // cross setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 ); setPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 ); setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 ); setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 ); setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 ); setPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 ); setPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 ); setPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 ); geometry.getAttribute( 'position' ).needsUpdate = true; } } function setPoint( point, pointMap, geometry, camera, x, y, z ) { _vector$c.set( x, y, z ).unproject( camera ); const points = pointMap[ point ]; if ( points !== undefined ) { const position = geometry.getAttribute( 'position' ); for ( let i = 0, l = points.length; i < l; i ++ ) { position.setXYZ( points[ i ], _vector$c.x, _vector$c.y, _vector$c.z ); } } } const _box$3 = /*@__PURE__*/ new Box3(); class BoxHelper extends LineSegments { constructor( object, color = 0xffff00 ) { const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); const positions = new Float32Array( 8 * 3 ); const geometry = new BufferGeometry(); geometry.setIndex( new BufferAttribute( indices, 1 ) ); geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) ); super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); this.object = object; this.type = 'BoxHelper'; this.matrixAutoUpdate = false; this.update(); } update( object ) { if ( object !== undefined ) { console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' ); } if ( this.object !== undefined ) { _box$3.setFromObject( this.object ); } if ( _box$3.isEmpty() ) return; const min = _box$3.min; const max = _box$3.max; /* 5____4 1/___0/| | 6__|_7 2/___3/ 0: max.x, max.y, max.z 1: min.x, max.y, max.z 2: min.x, min.y, max.z 3: max.x, min.y, max.z 4: max.x, max.y, min.z 5: min.x, max.y, min.z 6: min.x, min.y, min.z 7: max.x, min.y, min.z */ const position = this.geometry.attributes.position; const array = position.array; array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z; array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z; array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z; array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z; array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z; array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z; array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z; array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z; position.needsUpdate = true; this.geometry.computeBoundingSphere(); } setFromObject( object ) { this.object = object; this.update(); return this; } copy( source ) { LineSegments.prototype.copy.call( this, source ); this.object = source.object; return this; } } class Box3Helper extends LineSegments { constructor( box, color = 0xffff00 ) { const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] ); const positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ]; const geometry = new BufferGeometry(); geometry.setIndex( new BufferAttribute( indices, 1 ) ); geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); this.box = box; this.type = 'Box3Helper'; this.geometry.computeBoundingSphere(); } updateMatrixWorld( force ) { const box = this.box; if ( box.isEmpty() ) return; box.getCenter( this.position ); box.getSize( this.scale ); this.scale.multiplyScalar( 0.5 ); super.updateMatrixWorld( force ); } } class PlaneHelper extends Line { constructor( plane, size = 1, hex = 0xffff00 ) { const color = hex; const positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ]; const geometry = new BufferGeometry(); geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); geometry.computeBoundingSphere(); super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); this.type = 'PlaneHelper'; this.plane = plane; this.size = size; const positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ]; const geometry2 = new BufferGeometry(); geometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) ); geometry2.computeBoundingSphere(); this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) ); } updateMatrixWorld( force ) { let scale = - this.plane.constant; if ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter this.scale.set( 0.5 * this.size, 0.5 * this.size, scale ); this.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here this.lookAt( this.plane.normal ); super.updateMatrixWorld( force ); } } const _axis = /*@__PURE__*/ new Vector3(); let _lineGeometry, _coneGeometry; class ArrowHelper extends Object3D { constructor( dir, origin, length, color, headLength, headWidth ) { super(); // dir is assumed to be normalized this.type = 'ArrowHelper'; if ( dir === undefined ) dir = new Vector3( 0, 0, 1 ); if ( origin === undefined ) origin = new Vector3( 0, 0, 0 ); if ( length === undefined ) length = 1; if ( color === undefined ) color = 0xffff00; if ( headLength === undefined ) headLength = 0.2 * length; if ( headWidth === undefined ) headWidth = 0.2 * headLength; if ( _lineGeometry === undefined ) { _lineGeometry = new BufferGeometry(); _lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) ); _coneGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 ); _coneGeometry.translate( 0, - 0.5, 0 ); } this.position.copy( origin ); this.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) ); this.line.matrixAutoUpdate = false; this.add( this.line ); this.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) ); this.cone.matrixAutoUpdate = false; this.add( this.cone ); this.setDirection( dir ); this.setLength( length, headLength, headWidth ); } setDirection( dir ) { // dir is assumed to be normalized if ( dir.y > 0.99999 ) { this.quaternion.set( 0, 0, 0, 1 ); } else if ( dir.y < - 0.99999 ) { this.quaternion.set( 1, 0, 0, 0 ); } else { _axis.set( dir.z, 0, - dir.x ).normalize(); const radians = Math.acos( dir.y ); this.quaternion.setFromAxisAngle( _axis, radians ); } } setLength( length, headLength, headWidth ) { if ( headLength === undefined ) headLength = 0.2 * length; if ( headWidth === undefined ) headWidth = 0.2 * headLength; this.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458 this.line.updateMatrix(); this.cone.scale.set( headWidth, headLength, headWidth ); this.cone.position.y = length; this.cone.updateMatrix(); } setColor( color ) { this.line.material.color.set( color ); this.cone.material.color.set( color ); } copy( source ) { super.copy( source, false ); this.line.copy( source.line ); this.cone.copy( source.cone ); return this; } } class AxesHelper extends LineSegments { constructor( size = 1 ) { const vertices = [ 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size ]; const colors = [ 1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1 ]; const geometry = new BufferGeometry(); geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) ); geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) ); const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } ); super( geometry, material ); this.type = 'AxesHelper'; } } const _floatView = new Float32Array( 1 ); const _int32View = new Int32Array( _floatView.buffer ); const DataUtils = { // Converts float32 to float16 (stored as uint16 value). toHalfFloat: function ( val ) { // Source: http://gamedev.stackexchange.com/questions/17326/conversion-of-a-number-from-single-precision-floating-point-representation-to-a/17410#17410 /* This method is faster than the OpenEXR implementation (very often * used, eg. in Ogre), with the additional benefit of rounding, inspired * by James Tursa?s half-precision code. */ _floatView[ 0 ] = val; const x = _int32View[ 0 ]; let bits = ( x >> 16 ) & 0x8000; /* Get the sign */ let m = ( x >> 12 ) & 0x07ff; /* Keep one extra bit for rounding */ const e = ( x >> 23 ) & 0xff; /* Using int is faster here */ /* If zero, or denormal, or exponent underflows too much for a denormal * half, return signed zero. */ if ( e < 103 ) return bits; /* If NaN, return NaN. If Inf or exponent overflow, return Inf. */ if ( e > 142 ) { bits |= 0x7c00; /* If exponent was 0xff and one mantissa bit was set, it means NaN, * not Inf, so make sure we set one mantissa bit too. */ bits |= ( ( e == 255 ) ? 0 : 1 ) && ( x & 0x007fffff ); return bits; } /* If exponent underflows but not too much, return a denormal */ if ( e < 113 ) { m |= 0x0800; /* Extra rounding may overflow and set mantissa to 0 and exponent * to 1, which is OK. */ bits |= ( m >> ( 114 - e ) ) + ( ( m >> ( 113 - e ) ) & 1 ); return bits; } bits |= ( ( e - 112 ) << 10 ) | ( m >> 1 ); /* Extra rounding. An overflow will set mantissa to 0 and increment * the exponent, which is OK. */ bits += m & 1; return bits; } }; const LOD_MIN = 4; const LOD_MAX = 8; const SIZE_MAX = Math.pow( 2, LOD_MAX ); // The standard deviations (radians) associated with the extra mips. These are // chosen to approximate a Trowbridge-Reitz distribution function times the // geometric shadowing function. These sigma values squared must match the // variance #defines in cube_uv_reflection_fragment.glsl.js. const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ]; const TOTAL_LODS = LOD_MAX - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length; // The maximum length of the blur for loop. Smaller sigmas will use fewer // samples and exit early, but not recompile the shader. const MAX_SAMPLES = 20; const ENCODINGS = { [ LinearEncoding ]: 0, [ sRGBEncoding ]: 1, [ RGBEEncoding ]: 2, [ RGBM7Encoding ]: 3, [ RGBM16Encoding ]: 4, [ RGBDEncoding ]: 5, [ GammaEncoding ]: 6 }; const _flatCamera = /*@__PURE__*/ new OrthographicCamera(); const { _lodPlanes, _sizeLods, _sigmas } = /*@__PURE__*/ _createPlanes(); const _clearColor = /*@__PURE__*/ new Color(); let _oldTarget = null; // Golden Ratio const PHI = ( 1 + Math.sqrt( 5 ) ) / 2; const INV_PHI = 1 / PHI; // Vertices of a dodecahedron (except the opposites, which represent the // same axis), used as axis directions evenly spread on a sphere. const _axisDirections = [ /*@__PURE__*/ new Vector3( 1, 1, 1 ), /*@__PURE__*/ new Vector3( - 1, 1, 1 ), /*@__PURE__*/ new Vector3( 1, 1, - 1 ), /*@__PURE__*/ new Vector3( - 1, 1, - 1 ), /*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ), /*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ), /*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ), /*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ), /*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ), /*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ]; /** * This class generates a Prefiltered, Mipmapped Radiance Environment Map * (PMREM) from a cubeMap environment texture. This allows different levels of * blur to be quickly accessed based on material roughness. It is packed into a * special CubeUV format that allows us to perform custom interpolation so that * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap * chain, it only goes down to the LOD_MIN level (above), and then creates extra * even more filtered 'mips' at the same LOD_MIN resolution, associated with * higher roughness levels. In this way we maintain resolution to smoothly * interpolate diffuse lighting while limiting sampling computation. */ class PMREMGenerator { constructor( renderer ) { this._renderer = renderer; this._pingPongRenderTarget = null; this._blurMaterial = _getBlurShader( MAX_SAMPLES ); this._equirectShader = null; this._cubemapShader = null; this._compileMaterial( this._blurMaterial ); } /** * Generates a PMREM from a supplied Scene, which can be faster than using an * image if networking bandwidth is low. Optional sigma specifies a blur radius * in radians to be applied to the scene before PMREM generation. Optional near * and far planes ensure the scene is rendered in its entirety (the cubeCamera * is placed at the origin). */ fromScene( scene, sigma = 0, near = 0.1, far = 100 ) { _oldTarget = this._renderer.getRenderTarget(); const cubeUVRenderTarget = this._allocateTargets(); this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget ); if ( sigma > 0 ) { this._blur( cubeUVRenderTarget, 0, 0, sigma ); } this._applyPMREM( cubeUVRenderTarget ); this._cleanup( cubeUVRenderTarget ); return cubeUVRenderTarget; } /** * Generates a PMREM from an equirectangular texture, which can be either LDR * (RGBFormat) or HDR (RGBEFormat). The ideal input image size is 1k (1024 x 512), * as this matches best with the 256 x 256 cubemap output. */ fromEquirectangular( equirectangular ) { return this._fromTexture( equirectangular ); } /** * Generates a PMREM from an cubemap texture, which can be either LDR * (RGBFormat) or HDR (RGBEFormat). The ideal input cube size is 256 x 256, * as this matches best with the 256 x 256 cubemap output. */ fromCubemap( cubemap ) { return this._fromTexture( cubemap ); } /** * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during * your texture's network fetch for increased concurrency. */ compileCubemapShader() { if ( this._cubemapShader === null ) { this._cubemapShader = _getCubemapShader(); this._compileMaterial( this._cubemapShader ); } } /** * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during * your texture's network fetch for increased concurrency. */ compileEquirectangularShader() { if ( this._equirectShader === null ) { this._equirectShader = _getEquirectShader(); this._compileMaterial( this._equirectShader ); } } /** * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class, * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on * one of them will cause any others to also become unusable. */ dispose() { this._blurMaterial.dispose(); if ( this._cubemapShader !== null ) this._cubemapShader.dispose(); if ( this._equirectShader !== null ) this._equirectShader.dispose(); for ( let i = 0; i < _lodPlanes.length; i ++ ) { _lodPlanes[ i ].dispose(); } } // private interface _cleanup( outputTarget ) { this._pingPongRenderTarget.dispose(); this._renderer.setRenderTarget( _oldTarget ); outputTarget.scissorTest = false; _setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height ); } _fromTexture( texture ) { _oldTarget = this._renderer.getRenderTarget(); const cubeUVRenderTarget = this._allocateTargets( texture ); this._textureToCubeUV( texture, cubeUVRenderTarget ); this._applyPMREM( cubeUVRenderTarget ); this._cleanup( cubeUVRenderTarget ); return cubeUVRenderTarget; } _allocateTargets( texture ) { // warning: null texture is valid const params = { magFilter: NearestFilter, minFilter: NearestFilter, generateMipmaps: false, type: UnsignedByteType, format: RGBEFormat, encoding: _isLDR( texture ) ? texture.encoding : RGBEEncoding, depthBuffer: false }; const cubeUVRenderTarget = _createRenderTarget( params ); cubeUVRenderTarget.depthBuffer = texture ? false : true; this._pingPongRenderTarget = _createRenderTarget( params ); return cubeUVRenderTarget; } _compileMaterial( material ) { const tmpMesh = new Mesh( _lodPlanes[ 0 ], material ); this._renderer.compile( tmpMesh, _flatCamera ); } _sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) { const fov = 90; const aspect = 1; const cubeCamera = new PerspectiveCamera( fov, aspect, near, far ); const upSign = [ 1, - 1, 1, 1, 1, 1 ]; const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ]; const renderer = this._renderer; const outputEncoding = renderer.outputEncoding; const toneMapping = renderer.toneMapping; renderer.getClearColor( _clearColor ); const clearAlpha = renderer.getClearAlpha(); renderer.toneMapping = NoToneMapping; renderer.outputEncoding = LinearEncoding; let background = scene.background; if ( background && background.isColor ) { background.convertSRGBToLinear(); // Convert linear to RGBE const maxComponent = Math.max( background.r, background.g, background.b ); const fExp = Math.min( Math.max( Math.ceil( Math.log2( maxComponent ) ), - 128.0 ), 127.0 ); background = background.multiplyScalar( Math.pow( 2.0, - fExp ) ); const alpha = ( fExp + 128.0 ) / 255.0; renderer.setClearColor( background, alpha ); scene.background = null; } for ( let i = 0; i < 6; i ++ ) { const col = i % 3; if ( col == 0 ) { cubeCamera.up.set( 0, upSign[ i ], 0 ); cubeCamera.lookAt( forwardSign[ i ], 0, 0 ); } else if ( col == 1 ) { cubeCamera.up.set( 0, 0, upSign[ i ] ); cubeCamera.lookAt( 0, forwardSign[ i ], 0 ); } else { cubeCamera.up.set( 0, upSign[ i ], 0 ); cubeCamera.lookAt( 0, 0, forwardSign[ i ] ); } _setViewport( cubeUVRenderTarget, col * SIZE_MAX, i > 2 ? SIZE_MAX : 0, SIZE_MAX, SIZE_MAX ); renderer.setRenderTarget( cubeUVRenderTarget ); renderer.render( scene, cubeCamera ); } renderer.toneMapping = toneMapping; renderer.outputEncoding = outputEncoding; renderer.setClearColor( _clearColor, clearAlpha ); } _textureToCubeUV( texture, cubeUVRenderTarget ) { const renderer = this._renderer; if ( texture.isCubeTexture ) { if ( this._cubemapShader == null ) { this._cubemapShader = _getCubemapShader(); } } else { if ( this._equirectShader == null ) { this._equirectShader = _getEquirectShader(); } } const material = texture.isCubeTexture ? this._cubemapShader : this._equirectShader; const mesh = new Mesh( _lodPlanes[ 0 ], material ); const uniforms = material.uniforms; uniforms[ 'envMap' ].value = texture; if ( ! texture.isCubeTexture ) { uniforms[ 'texelSize' ].value.set( 1.0 / texture.image.width, 1.0 / texture.image.height ); } uniforms[ 'inputEncoding' ].value = ENCODINGS[ texture.encoding ]; uniforms[ 'outputEncoding' ].value = ENCODINGS[ cubeUVRenderTarget.texture.encoding ]; _setViewport( cubeUVRenderTarget, 0, 0, 3 * SIZE_MAX, 2 * SIZE_MAX ); renderer.setRenderTarget( cubeUVRenderTarget ); renderer.render( mesh, _flatCamera ); } _applyPMREM( cubeUVRenderTarget ) { const renderer = this._renderer; const autoClear = renderer.autoClear; renderer.autoClear = false; for ( let i = 1; i < TOTAL_LODS; i ++ ) { const sigma = Math.sqrt( _sigmas[ i ] * _sigmas[ i ] - _sigmas[ i - 1 ] * _sigmas[ i - 1 ] ); const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ]; this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis ); } renderer.autoClear = autoClear; } /** * This is a two-pass Gaussian blur for a cubemap. Normally this is done * vertically and horizontally, but this breaks down on a cube. Here we apply * the blur latitudinally (around the poles), and then longitudinally (towards * the poles) to approximate the orthogonally-separable blur. It is least * accurate at the poles, but still does a decent job. */ _blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) { const pingPongRenderTarget = this._pingPongRenderTarget; this._halfBlur( cubeUVRenderTarget, pingPongRenderTarget, lodIn, lodOut, sigma, 'latitudinal', poleAxis ); this._halfBlur( pingPongRenderTarget, cubeUVRenderTarget, lodOut, lodOut, sigma, 'longitudinal', poleAxis ); } _halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) { const renderer = this._renderer; const blurMaterial = this._blurMaterial; if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) { console.error( 'blur direction must be either latitudinal or longitudinal!' ); } // Number of standard deviations at which to cut off the discrete approximation. const STANDARD_DEVIATIONS = 3; const blurMesh = new Mesh( _lodPlanes[ lodOut ], blurMaterial ); const blurUniforms = blurMaterial.uniforms; const pixels = _sizeLods[ lodIn ] - 1; const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 ); const sigmaPixels = sigmaRadians / radiansPerPixel; const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES; if ( samples > MAX_SAMPLES ) { console.warn( `sigmaRadians, ${ sigmaRadians}, is too large and will clip, as it requested ${ samples} samples when the maximum is set to ${MAX_SAMPLES}` ); } const weights = []; let sum = 0; for ( let i = 0; i < MAX_SAMPLES; ++ i ) { const x = i / sigmaPixels; const weight = Math.exp( - x * x / 2 ); weights.push( weight ); if ( i == 0 ) { sum += weight; } else if ( i < samples ) { sum += 2 * weight; } } for ( let i = 0; i < weights.length; i ++ ) { weights[ i ] = weights[ i ] / sum; } blurUniforms[ 'envMap' ].value = targetIn.texture; blurUniforms[ 'samples' ].value = samples; blurUniforms[ 'weights' ].value = weights; blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal'; if ( poleAxis ) { blurUniforms[ 'poleAxis' ].value = poleAxis; } blurUniforms[ 'dTheta' ].value = radiansPerPixel; blurUniforms[ 'mipInt' ].value = LOD_MAX - lodIn; blurUniforms[ 'inputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; blurUniforms[ 'outputEncoding' ].value = ENCODINGS[ targetIn.texture.encoding ]; const outputSize = _sizeLods[ lodOut ]; const x = 3 * Math.max( 0, SIZE_MAX - 2 * outputSize ); const y = ( lodOut === 0 ? 0 : 2 * SIZE_MAX ) + 2 * outputSize * ( lodOut > LOD_MAX - LOD_MIN ? lodOut - LOD_MAX + LOD_MIN : 0 ); _setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize ); renderer.setRenderTarget( targetOut ); renderer.render( blurMesh, _flatCamera ); } } function _isLDR( texture ) { if ( texture === undefined || texture.type !== UnsignedByteType ) return false; return texture.encoding === LinearEncoding || texture.encoding === sRGBEncoding || texture.encoding === GammaEncoding; } function _createPlanes() { const _lodPlanes = []; const _sizeLods = []; const _sigmas = []; let lod = LOD_MAX; for ( let i = 0; i < TOTAL_LODS; i ++ ) { const sizeLod = Math.pow( 2, lod ); _sizeLods.push( sizeLod ); let sigma = 1.0 / sizeLod; if ( i > LOD_MAX - LOD_MIN ) { sigma = EXTRA_LOD_SIGMA[ i - LOD_MAX + LOD_MIN - 1 ]; } else if ( i == 0 ) { sigma = 0; } _sigmas.push( sigma ); const texelSize = 1.0 / ( sizeLod - 1 ); const min = - texelSize / 2; const max = 1 + texelSize / 2; const uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ]; const cubeFaces = 6; const vertices = 6; const positionSize = 3; const uvSize = 2; const faceIndexSize = 1; const position = new Float32Array( positionSize * vertices * cubeFaces ); const uv = new Float32Array( uvSize * vertices * cubeFaces ); const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces ); for ( let face = 0; face < cubeFaces; face ++ ) { const x = ( face % 3 ) * 2 / 3 - 1; const y = face > 2 ? 0 : - 1; const coordinates = [ x, y, 0, x + 2 / 3, y, 0, x + 2 / 3, y + 1, 0, x, y, 0, x + 2 / 3, y + 1, 0, x, y + 1, 0 ]; position.set( coordinates, positionSize * vertices * face ); uv.set( uv1, uvSize * vertices * face ); const fill = [ face, face, face, face, face, face ]; faceIndex.set( fill, faceIndexSize * vertices * face ); } const planes = new BufferGeometry(); planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) ); planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) ); planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) ); _lodPlanes.push( planes ); if ( lod > LOD_MIN ) { lod --; } } return { _lodPlanes, _sizeLods, _sigmas }; } function _createRenderTarget( params ) { const cubeUVRenderTarget = new WebGLRenderTarget( 3 * SIZE_MAX, 3 * SIZE_MAX, params ); cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping; cubeUVRenderTarget.texture.name = 'PMREM.cubeUv'; cubeUVRenderTarget.scissorTest = true; return cubeUVRenderTarget; } function _setViewport( target, x, y, width, height ) { target.viewport.set( x, y, width, height ); target.scissor.set( x, y, width, height ); } function _getBlurShader( maxSamples ) { const weights = new Float32Array( maxSamples ); const poleAxis = new Vector3( 0, 1, 0 ); const shaderMaterial = new RawShaderMaterial( { name: 'SphericalGaussianBlur', defines: { 'n': maxSamples }, uniforms: { 'envMap': { value: null }, 'samples': { value: 1 }, 'weights': { value: weights }, 'latitudinal': { value: false }, 'dTheta': { value: 0 }, 'mipInt': { value: 0 }, 'poleAxis': { value: poleAxis }, 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } }, vertexShader: _getCommonVertexShader(), fragmentShader: /* glsl */` precision mediump float; precision mediump int; varying vec3 vOutputDirection; uniform sampler2D envMap; uniform int samples; uniform float weights[ n ]; uniform bool latitudinal; uniform float dTheta; uniform float mipInt; uniform vec3 poleAxis; ${ _getEncodings() } #define ENVMAP_TYPE_CUBE_UV #include vec3 getSample( float theta, vec3 axis ) { float cosTheta = cos( theta ); // Rodrigues' axis-angle rotation vec3 sampleDirection = vOutputDirection * cosTheta + cross( axis, vOutputDirection ) * sin( theta ) + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); return bilinearCubeUV( envMap, sampleDirection, mipInt ); } void main() { vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); if ( all( equal( axis, vec3( 0.0 ) ) ) ) { axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); } axis = normalize( axis ); gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); for ( int i = 1; i < n; i++ ) { if ( i >= samples ) { break; } float theta = dTheta * float( i ); gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); } gl_FragColor = linearToOutputTexel( gl_FragColor ); } `, blending: NoBlending, depthTest: false, depthWrite: false } ); return shaderMaterial; } function _getEquirectShader() { const texelSize = new Vector2( 1, 1 ); const shaderMaterial = new RawShaderMaterial( { name: 'EquirectangularToCubeUV', uniforms: { 'envMap': { value: null }, 'texelSize': { value: texelSize }, 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } }, vertexShader: _getCommonVertexShader(), fragmentShader: /* glsl */` precision mediump float; precision mediump int; varying vec3 vOutputDirection; uniform sampler2D envMap; uniform vec2 texelSize; ${ _getEncodings() } #include void main() { gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); vec3 outputDirection = normalize( vOutputDirection ); vec2 uv = equirectUv( outputDirection ); vec2 f = fract( uv / texelSize - 0.5 ); uv -= f * texelSize; vec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; uv.x += texelSize.x; vec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; uv.y += texelSize.y; vec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; uv.x -= texelSize.x; vec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb; vec3 tm = mix( tl, tr, f.x ); vec3 bm = mix( bl, br, f.x ); gl_FragColor.rgb = mix( tm, bm, f.y ); gl_FragColor = linearToOutputTexel( gl_FragColor ); } `, blending: NoBlending, depthTest: false, depthWrite: false } ); return shaderMaterial; } function _getCubemapShader() { const shaderMaterial = new RawShaderMaterial( { name: 'CubemapToCubeUV', uniforms: { 'envMap': { value: null }, 'inputEncoding': { value: ENCODINGS[ LinearEncoding ] }, 'outputEncoding': { value: ENCODINGS[ LinearEncoding ] } }, vertexShader: _getCommonVertexShader(), fragmentShader: /* glsl */` precision mediump float; precision mediump int; varying vec3 vOutputDirection; uniform samplerCube envMap; ${ _getEncodings() } void main() { gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); gl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb; gl_FragColor = linearToOutputTexel( gl_FragColor ); } `, blending: NoBlending, depthTest: false, depthWrite: false } ); return shaderMaterial; } function _getCommonVertexShader() { return /* glsl */` precision mediump float; precision mediump int; attribute vec3 position; attribute vec2 uv; attribute float faceIndex; varying vec3 vOutputDirection; // RH coordinate system; PMREM face-indexing convention vec3 getDirection( vec2 uv, float face ) { uv = 2.0 * uv - 1.0; vec3 direction = vec3( uv, 1.0 ); if ( face == 0.0 ) { direction = direction.zyx; // ( 1, v, u ) pos x } else if ( face == 1.0 ) { direction = direction.xzy; direction.xz *= -1.0; // ( -u, 1, -v ) pos y } else if ( face == 2.0 ) { direction.x *= -1.0; // ( -u, v, 1 ) pos z } else if ( face == 3.0 ) { direction = direction.zyx; direction.xz *= -1.0; // ( -1, v, -u ) neg x } else if ( face == 4.0 ) { direction = direction.xzy; direction.xy *= -1.0; // ( -u, -1, v ) neg y } else if ( face == 5.0 ) { direction.z *= -1.0; // ( u, v, -1 ) neg z } return direction; } void main() { vOutputDirection = getDirection( uv, faceIndex ); gl_Position = vec4( position, 1.0 ); } `; } function _getEncodings() { return /* glsl */` uniform int inputEncoding; uniform int outputEncoding; #include vec4 inputTexelToLinear( vec4 value ) { if ( inputEncoding == 0 ) { return value; } else if ( inputEncoding == 1 ) { return sRGBToLinear( value ); } else if ( inputEncoding == 2 ) { return RGBEToLinear( value ); } else if ( inputEncoding == 3 ) { return RGBMToLinear( value, 7.0 ); } else if ( inputEncoding == 4 ) { return RGBMToLinear( value, 16.0 ); } else if ( inputEncoding == 5 ) { return RGBDToLinear( value, 256.0 ); } else { return GammaToLinear( value, 2.2 ); } } vec4 linearToOutputTexel( vec4 value ) { if ( outputEncoding == 0 ) { return value; } else if ( outputEncoding == 1 ) { return LinearTosRGB( value ); } else if ( outputEncoding == 2 ) { return LinearToRGBE( value ); } else if ( outputEncoding == 3 ) { return LinearToRGBM( value, 7.0 ); } else if ( outputEncoding == 4 ) { return LinearToRGBM( value, 16.0 ); } else if ( outputEncoding == 5 ) { return LinearToRGBD( value, 256.0 ); } else { return LinearToGamma( value, 2.2 ); } } vec4 envMapTexelToLinear( vec4 color ) { return inputTexelToLinear( color ); } `; } function Face4( a, b, c, d, normal, color, materialIndex ) { console.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' ); return new Face3( a, b, c, normal, color, materialIndex ); } const LineStrip = 0; const LinePieces = 1; const NoColors = 0; const FaceColors = 1; const VertexColors = 2; function MeshFaceMaterial( materials ) { console.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' ); return materials; } function MultiMaterial( materials = [] ) { console.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' ); materials.isMultiMaterial = true; materials.materials = materials; materials.clone = function () { return materials.slice(); }; return materials; } function PointCloud( geometry, material ) { console.warn( 'THREE.PointCloud has been renamed to THREE.Points.' ); return new Points( geometry, material ); } function Particle( material ) { console.warn( 'THREE.Particle has been renamed to THREE.Sprite.' ); return new Sprite( material ); } function ParticleSystem( geometry, material ) { console.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' ); return new Points( geometry, material ); } function PointCloudMaterial( parameters ) { console.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' ); return new PointsMaterial( parameters ); } function ParticleBasicMaterial( parameters ) { console.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' ); return new PointsMaterial( parameters ); } function ParticleSystemMaterial( parameters ) { console.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' ); return new PointsMaterial( parameters ); } function Vertex( x, y, z ) { console.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' ); return new Vector3( x, y, z ); } // function DynamicBufferAttribute( array, itemSize ) { console.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.' ); return new BufferAttribute( array, itemSize ).setUsage( DynamicDrawUsage ); } function Int8Attribute( array, itemSize ) { console.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' ); return new Int8BufferAttribute( array, itemSize ); } function Uint8Attribute( array, itemSize ) { console.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' ); return new Uint8BufferAttribute( array, itemSize ); } function Uint8ClampedAttribute( array, itemSize ) { console.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' ); return new Uint8ClampedBufferAttribute( array, itemSize ); } function Int16Attribute( array, itemSize ) { console.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' ); return new Int16BufferAttribute( array, itemSize ); } function Uint16Attribute( array, itemSize ) { console.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' ); return new Uint16BufferAttribute( array, itemSize ); } function Int32Attribute( array, itemSize ) { console.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' ); return new Int32BufferAttribute( array, itemSize ); } function Uint32Attribute( array, itemSize ) { console.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' ); return new Uint32BufferAttribute( array, itemSize ); } function Float32Attribute( array, itemSize ) { console.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' ); return new Float32BufferAttribute( array, itemSize ); } function Float64Attribute( array, itemSize ) { console.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' ); return new Float64BufferAttribute( array, itemSize ); } // Curve.create = function ( construct, getPoint ) { console.log( 'THREE.Curve.create() has been deprecated' ); construct.prototype = Object.create( Curve.prototype ); construct.prototype.constructor = construct; construct.prototype.getPoint = getPoint; return construct; }; // Object.assign( CurvePath.prototype, { createPointsGeometry: function ( divisions ) { console.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); // generate geometry from path points (for Line or Points objects) const pts = this.getPoints( divisions ); return this.createGeometry( pts ); }, createSpacedPointsGeometry: function ( divisions ) { console.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); // generate geometry from equidistant sampling along the path const pts = this.getSpacedPoints( divisions ); return this.createGeometry( pts ); }, createGeometry: function ( points ) { console.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' ); const geometry = new Geometry(); for ( let i = 0, l = points.length; i < l; i ++ ) { const point = points[ i ]; geometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) ); } return geometry; } } ); // Object.assign( Path.prototype, { fromPoints: function ( points ) { console.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' ); return this.setFromPoints( points ); } } ); // function ClosedSplineCurve3( points ) { console.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); CatmullRomCurve3.call( this, points ); this.type = 'catmullrom'; this.closed = true; } ClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); // function SplineCurve3( points ) { console.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' ); CatmullRomCurve3.call( this, points ); this.type = 'catmullrom'; } SplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype ); // function Spline( points ) { console.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' ); CatmullRomCurve3.call( this, points ); this.type = 'catmullrom'; } Spline.prototype = Object.create( CatmullRomCurve3.prototype ); Object.assign( Spline.prototype, { initFromArray: function ( /* a */ ) { console.error( 'THREE.Spline: .initFromArray() has been removed.' ); }, getControlPointsArray: function ( /* optionalTarget */ ) { console.error( 'THREE.Spline: .getControlPointsArray() has been removed.' ); }, reparametrizeByArcLength: function ( /* samplingCoef */ ) { console.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' ); } } ); // function AxisHelper( size ) { console.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' ); return new AxesHelper( size ); } function BoundingBoxHelper( object, color ) { console.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' ); return new BoxHelper( object, color ); } function EdgesHelper( object, hex ) { console.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' ); return new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); } GridHelper.prototype.setColors = function () { console.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' ); }; SkeletonHelper.prototype.update = function () { console.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' ); }; function WireframeHelper( object, hex ) { console.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' ); return new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) ); } // Object.assign( Loader.prototype, { extractUrlBase: function ( url ) { console.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' ); return LoaderUtils.extractUrlBase( url ); } } ); Loader.Handlers = { add: function ( /* regex, loader */ ) { console.error( 'THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.' ); }, get: function ( /* file */ ) { console.error( 'THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.' ); } }; function XHRLoader( manager ) { console.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' ); return new FileLoader( manager ); } function BinaryTextureLoader( manager ) { console.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' ); return new DataTextureLoader( manager ); } // Object.assign( Box2.prototype, { center: function ( optionalTarget ) { console.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' ); return this.getCenter( optionalTarget ); }, empty: function () { console.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' ); return this.isEmpty(); }, isIntersectionBox: function ( box ) { console.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' ); return this.intersectsBox( box ); }, size: function ( optionalTarget ) { console.warn( 'THREE.Box2: .size() has been renamed to .getSize().' ); return this.getSize( optionalTarget ); } } ); Object.assign( Box3.prototype, { center: function ( optionalTarget ) { console.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' ); return this.getCenter( optionalTarget ); }, empty: function () { console.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' ); return this.isEmpty(); }, isIntersectionBox: function ( box ) { console.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' ); return this.intersectsBox( box ); }, isIntersectionSphere: function ( sphere ) { console.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); return this.intersectsSphere( sphere ); }, size: function ( optionalTarget ) { console.warn( 'THREE.Box3: .size() has been renamed to .getSize().' ); return this.getSize( optionalTarget ); } } ); Object.assign( Sphere.prototype, { empty: function () { console.warn( 'THREE.Sphere: .empty() has been renamed to .isEmpty().' ); return this.isEmpty(); }, } ); Frustum.prototype.setFromMatrix = function ( m ) { console.warn( 'THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().' ); return this.setFromProjectionMatrix( m ); }; Line3.prototype.center = function ( optionalTarget ) { console.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' ); return this.getCenter( optionalTarget ); }; Object.assign( MathUtils, { random16: function () { console.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' ); return Math.random(); }, nearestPowerOfTwo: function ( value ) { console.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' ); return MathUtils.floorPowerOfTwo( value ); }, nextPowerOfTwo: function ( value ) { console.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' ); return MathUtils.ceilPowerOfTwo( value ); } } ); Object.assign( Matrix3.prototype, { flattenToArrayOffset: function ( array, offset ) { console.warn( 'THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' ); return this.toArray( array, offset ); }, multiplyVector3: function ( vector ) { console.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' ); return vector.applyMatrix3( this ); }, multiplyVector3Array: function ( /* a */ ) { console.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' ); }, applyToBufferAttribute: function ( attribute ) { console.warn( 'THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.' ); return attribute.applyMatrix3( this ); }, applyToVector3Array: function ( /* array, offset, length */ ) { console.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' ); }, getInverse: function ( matrix ) { console.warn( 'THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); return this.copy( matrix ).invert(); } } ); Object.assign( Matrix4.prototype, { extractPosition: function ( m ) { console.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' ); return this.copyPosition( m ); }, flattenToArrayOffset: function ( array, offset ) { console.warn( 'THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.' ); return this.toArray( array, offset ); }, getPosition: function () { console.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' ); return new Vector3().setFromMatrixColumn( this, 3 ); }, setRotationFromQuaternion: function ( q ) { console.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' ); return this.makeRotationFromQuaternion( q ); }, multiplyToArray: function () { console.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' ); }, multiplyVector3: function ( vector ) { console.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); return vector.applyMatrix4( this ); }, multiplyVector4: function ( vector ) { console.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); return vector.applyMatrix4( this ); }, multiplyVector3Array: function ( /* a */ ) { console.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' ); }, rotateAxis: function ( v ) { console.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' ); v.transformDirection( this ); }, crossVector: function ( vector ) { console.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' ); return vector.applyMatrix4( this ); }, translate: function () { console.error( 'THREE.Matrix4: .translate() has been removed.' ); }, rotateX: function () { console.error( 'THREE.Matrix4: .rotateX() has been removed.' ); }, rotateY: function () { console.error( 'THREE.Matrix4: .rotateY() has been removed.' ); }, rotateZ: function () { console.error( 'THREE.Matrix4: .rotateZ() has been removed.' ); }, rotateByAxis: function () { console.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' ); }, applyToBufferAttribute: function ( attribute ) { console.warn( 'THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.' ); return attribute.applyMatrix4( this ); }, applyToVector3Array: function ( /* array, offset, length */ ) { console.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' ); }, makeFrustum: function ( left, right, bottom, top, near, far ) { console.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' ); return this.makePerspective( left, right, top, bottom, near, far ); }, getInverse: function ( matrix ) { console.warn( 'THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.' ); return this.copy( matrix ).invert(); } } ); Plane.prototype.isIntersectionLine = function ( line ) { console.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' ); return this.intersectsLine( line ); }; Object.assign( Quaternion.prototype, { multiplyVector3: function ( vector ) { console.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' ); return vector.applyQuaternion( this ); }, inverse: function ( ) { console.warn( 'THREE.Quaternion: .inverse() has been renamed to invert().' ); return this.invert(); } } ); Object.assign( Ray.prototype, { isIntersectionBox: function ( box ) { console.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' ); return this.intersectsBox( box ); }, isIntersectionPlane: function ( plane ) { console.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' ); return this.intersectsPlane( plane ); }, isIntersectionSphere: function ( sphere ) { console.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' ); return this.intersectsSphere( sphere ); } } ); Object.assign( Triangle.prototype, { area: function () { console.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' ); return this.getArea(); }, barycoordFromPoint: function ( point, target ) { console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); return this.getBarycoord( point, target ); }, midpoint: function ( target ) { console.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' ); return this.getMidpoint( target ); }, normal: function ( target ) { console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); return this.getNormal( target ); }, plane: function ( target ) { console.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' ); return this.getPlane( target ); } } ); Object.assign( Triangle, { barycoordFromPoint: function ( point, a, b, c, target ) { console.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' ); return Triangle.getBarycoord( point, a, b, c, target ); }, normal: function ( a, b, c, target ) { console.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' ); return Triangle.getNormal( a, b, c, target ); } } ); Object.assign( Shape.prototype, { extractAllPoints: function ( divisions ) { console.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' ); return this.extractPoints( divisions ); }, extrude: function ( options ) { console.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' ); return new ExtrudeGeometry( this, options ); }, makeGeometry: function ( options ) { console.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' ); return new ShapeGeometry( this, options ); } } ); Object.assign( Vector2.prototype, { fromAttribute: function ( attribute, index, offset ) { console.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' ); return this.fromBufferAttribute( attribute, index, offset ); }, distanceToManhattan: function ( v ) { console.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); return this.manhattanDistanceTo( v ); }, lengthManhattan: function () { console.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' ); return this.manhattanLength(); } } ); Object.assign( Vector3.prototype, { setEulerFromRotationMatrix: function () { console.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' ); }, setEulerFromQuaternion: function () { console.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' ); }, getPositionFromMatrix: function ( m ) { console.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' ); return this.setFromMatrixPosition( m ); }, getScaleFromMatrix: function ( m ) { console.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' ); return this.setFromMatrixScale( m ); }, getColumnFromMatrix: function ( index, matrix ) { console.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' ); return this.setFromMatrixColumn( matrix, index ); }, applyProjection: function ( m ) { console.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' ); return this.applyMatrix4( m ); }, fromAttribute: function ( attribute, index, offset ) { console.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' ); return this.fromBufferAttribute( attribute, index, offset ); }, distanceToManhattan: function ( v ) { console.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' ); return this.manhattanDistanceTo( v ); }, lengthManhattan: function () { console.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' ); return this.manhattanLength(); } } ); Object.assign( Vector4.prototype, { fromAttribute: function ( attribute, index, offset ) { console.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' ); return this.fromBufferAttribute( attribute, index, offset ); }, lengthManhattan: function () { console.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' ); return this.manhattanLength(); } } ); // Object.assign( Geometry.prototype, { computeTangents: function () { console.error( 'THREE.Geometry: .computeTangents() has been removed.' ); }, computeLineDistances: function () { console.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' ); }, applyMatrix: function ( matrix ) { console.warn( 'THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().' ); return this.applyMatrix4( matrix ); } } ); Object.assign( Object3D.prototype, { getChildByName: function ( name ) { console.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' ); return this.getObjectByName( name ); }, renderDepth: function () { console.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' ); }, translate: function ( distance, axis ) { console.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' ); return this.translateOnAxis( axis, distance ); }, getWorldRotation: function () { console.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' ); }, applyMatrix: function ( matrix ) { console.warn( 'THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().' ); return this.applyMatrix4( matrix ); } } ); Object.defineProperties( Object3D.prototype, { eulerOrder: { get: function () { console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); return this.rotation.order; }, set: function ( value ) { console.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' ); this.rotation.order = value; } }, useQuaternion: { get: function () { console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); }, set: function () { console.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' ); } } } ); Object.assign( Mesh.prototype, { setDrawMode: function () { console.error( 'THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); }, } ); Object.defineProperties( Mesh.prototype, { drawMode: { get: function () { console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.' ); return TrianglesDrawMode; }, set: function () { console.error( 'THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.' ); } } } ); Object.defineProperties( LOD.prototype, { objects: { get: function () { console.warn( 'THREE.LOD: .objects has been renamed to .levels.' ); return this.levels; } } } ); Object.defineProperty( Skeleton.prototype, 'useVertexTexture', { get: function () { console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); }, set: function () { console.warn( 'THREE.Skeleton: useVertexTexture has been removed.' ); } } ); SkinnedMesh.prototype.initBones = function () { console.error( 'THREE.SkinnedMesh: initBones() has been removed.' ); }; Object.defineProperty( Curve.prototype, '__arcLengthDivisions', { get: function () { console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); return this.arcLengthDivisions; }, set: function ( value ) { console.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' ); this.arcLengthDivisions = value; } } ); // PerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) { console.warn( 'THREE.PerspectiveCamera.setLens is deprecated. ' + 'Use .setFocalLength and .filmGauge for a photographic setup.' ); if ( filmGauge !== undefined ) this.filmGauge = filmGauge; this.setFocalLength( focalLength ); }; // Object.defineProperties( Light.prototype, { onlyShadow: { set: function () { console.warn( 'THREE.Light: .onlyShadow has been removed.' ); } }, shadowCameraFov: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' ); this.shadow.camera.fov = value; } }, shadowCameraLeft: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' ); this.shadow.camera.left = value; } }, shadowCameraRight: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' ); this.shadow.camera.right = value; } }, shadowCameraTop: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' ); this.shadow.camera.top = value; } }, shadowCameraBottom: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' ); this.shadow.camera.bottom = value; } }, shadowCameraNear: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' ); this.shadow.camera.near = value; } }, shadowCameraFar: { set: function ( value ) { console.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' ); this.shadow.camera.far = value; } }, shadowCameraVisible: { set: function () { console.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' ); } }, shadowBias: { set: function ( value ) { console.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' ); this.shadow.bias = value; } }, shadowDarkness: { set: function () { console.warn( 'THREE.Light: .shadowDarkness has been removed.' ); } }, shadowMapWidth: { set: function ( value ) { console.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' ); this.shadow.mapSize.width = value; } }, shadowMapHeight: { set: function ( value ) { console.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' ); this.shadow.mapSize.height = value; } } } ); // Object.defineProperties( BufferAttribute.prototype, { length: { get: function () { console.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' ); return this.array.length; } }, dynamic: { get: function () { console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); return this.usage === DynamicDrawUsage; }, set: function ( /* value */ ) { console.warn( 'THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.' ); this.setUsage( DynamicDrawUsage ); } } } ); Object.assign( BufferAttribute.prototype, { setDynamic: function ( value ) { console.warn( 'THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.' ); this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); return this; }, copyIndicesArray: function ( /* indices */ ) { console.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' ); }, setArray: function ( /* array */ ) { console.error( 'THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); } } ); Object.assign( BufferGeometry.prototype, { addIndex: function ( index ) { console.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' ); this.setIndex( index ); }, addAttribute: function ( name, attribute ) { console.warn( 'THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().' ); if ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) { console.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' ); return this.setAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) ); } if ( name === 'index' ) { console.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' ); this.setIndex( attribute ); return this; } return this.setAttribute( name, attribute ); }, addDrawCall: function ( start, count, indexOffset ) { if ( indexOffset !== undefined ) { console.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' ); } console.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' ); this.addGroup( start, count ); }, clearDrawCalls: function () { console.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' ); this.clearGroups(); }, computeTangents: function () { console.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' ); }, computeOffsets: function () { console.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' ); }, removeAttribute: function ( name ) { console.warn( 'THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().' ); return this.deleteAttribute( name ); }, applyMatrix: function ( matrix ) { console.warn( 'THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().' ); return this.applyMatrix4( matrix ); } } ); Object.defineProperties( BufferGeometry.prototype, { drawcalls: { get: function () { console.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' ); return this.groups; } }, offsets: { get: function () { console.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' ); return this.groups; } } } ); Object.defineProperties( InstancedBufferGeometry.prototype, { maxInstancedCount: { get: function () { console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); return this.instanceCount; }, set: function ( value ) { console.warn( 'THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.' ); this.instanceCount = value; } } } ); Object.defineProperties( Raycaster.prototype, { linePrecision: { get: function () { console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); return this.params.Line.threshold; }, set: function ( value ) { console.warn( 'THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.' ); this.params.Line.threshold = value; } } } ); Object.defineProperties( InterleavedBuffer.prototype, { dynamic: { get: function () { console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); return this.usage === DynamicDrawUsage; }, set: function ( value ) { console.warn( 'THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.' ); this.setUsage( value ); } } } ); Object.assign( InterleavedBuffer.prototype, { setDynamic: function ( value ) { console.warn( 'THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.' ); this.setUsage( value === true ? DynamicDrawUsage : StaticDrawUsage ); return this; }, setArray: function ( /* array */ ) { console.error( 'THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers' ); } } ); // Object.assign( ExtrudeBufferGeometry.prototype, { getArrays: function () { console.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' ); }, addShapeList: function () { console.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' ); }, addShape: function () { console.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' ); } } ); // Object.assign( Scene.prototype, { dispose: function () { console.error( 'THREE.Scene: .dispose() has been removed.' ); } } ); // Object.defineProperties( Uniform.prototype, { dynamic: { set: function () { console.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' ); } }, onUpdate: { value: function () { console.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' ); return this; } } } ); // Object.defineProperties( Material.prototype, { wrapAround: { get: function () { console.warn( 'THREE.Material: .wrapAround has been removed.' ); }, set: function () { console.warn( 'THREE.Material: .wrapAround has been removed.' ); } }, overdraw: { get: function () { console.warn( 'THREE.Material: .overdraw has been removed.' ); }, set: function () { console.warn( 'THREE.Material: .overdraw has been removed.' ); } }, wrapRGB: { get: function () { console.warn( 'THREE.Material: .wrapRGB has been removed.' ); return new Color(); } }, shading: { get: function () { console.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); }, set: function ( value ) { console.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' ); this.flatShading = ( value === FlatShading ); } }, stencilMask: { get: function () { console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); return this.stencilFuncMask; }, set: function ( value ) { console.warn( 'THREE.' + this.type + ': .stencilMask has been removed. Use .stencilFuncMask instead.' ); this.stencilFuncMask = value; } } } ); Object.defineProperties( MeshPhongMaterial.prototype, { metal: { get: function () { console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' ); return false; }, set: function () { console.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' ); } } } ); Object.defineProperties( MeshPhysicalMaterial.prototype, { transparency: { get: function () { console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); return this.transmission; }, set: function ( value ) { console.warn( 'THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.' ); this.transmission = value; } } } ); Object.defineProperties( ShaderMaterial.prototype, { derivatives: { get: function () { console.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); return this.extensions.derivatives; }, set: function ( value ) { console.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' ); this.extensions.derivatives = value; } } } ); // Object.assign( WebGLRenderer.prototype, { clearTarget: function ( renderTarget, color, depth, stencil ) { console.warn( 'THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.' ); this.setRenderTarget( renderTarget ); this.clear( color, depth, stencil ); }, animate: function ( callback ) { console.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' ); this.setAnimationLoop( callback ); }, getCurrentRenderTarget: function () { console.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' ); return this.getRenderTarget(); }, getMaxAnisotropy: function () { console.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' ); return this.capabilities.getMaxAnisotropy(); }, getPrecision: function () { console.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' ); return this.capabilities.precision; }, resetGLState: function () { console.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' ); return this.state.reset(); }, supportsFloatTextures: function () { console.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \'OES_texture_float\' ).' ); return this.extensions.get( 'OES_texture_float' ); }, supportsHalfFloatTextures: function () { console.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \'OES_texture_half_float\' ).' ); return this.extensions.get( 'OES_texture_half_float' ); }, supportsStandardDerivatives: function () { console.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \'OES_standard_derivatives\' ).' ); return this.extensions.get( 'OES_standard_derivatives' ); }, supportsCompressedTextureS3TC: function () { console.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \'WEBGL_compressed_texture_s3tc\' ).' ); return this.extensions.get( 'WEBGL_compressed_texture_s3tc' ); }, supportsCompressedTexturePVRTC: function () { console.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \'WEBGL_compressed_texture_pvrtc\' ).' ); return this.extensions.get( 'WEBGL_compressed_texture_pvrtc' ); }, supportsBlendMinMax: function () { console.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \'EXT_blend_minmax\' ).' ); return this.extensions.get( 'EXT_blend_minmax' ); }, supportsVertexTextures: function () { console.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' ); return this.capabilities.vertexTextures; }, supportsInstancedArrays: function () { console.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \'ANGLE_instanced_arrays\' ).' ); return this.extensions.get( 'ANGLE_instanced_arrays' ); }, enableScissorTest: function ( boolean ) { console.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' ); this.setScissorTest( boolean ); }, initMaterial: function () { console.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' ); }, addPrePlugin: function () { console.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' ); }, addPostPlugin: function () { console.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' ); }, updateShadowMap: function () { console.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' ); }, setFaceCulling: function () { console.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' ); }, allocTextureUnit: function () { console.warn( 'THREE.WebGLRenderer: .allocTextureUnit() has been removed.' ); }, setTexture: function () { console.warn( 'THREE.WebGLRenderer: .setTexture() has been removed.' ); }, setTexture2D: function () { console.warn( 'THREE.WebGLRenderer: .setTexture2D() has been removed.' ); }, setTextureCube: function () { console.warn( 'THREE.WebGLRenderer: .setTextureCube() has been removed.' ); }, getActiveMipMapLevel: function () { console.warn( 'THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().' ); return this.getActiveMipmapLevel(); } } ); Object.defineProperties( WebGLRenderer.prototype, { shadowMapEnabled: { get: function () { return this.shadowMap.enabled; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' ); this.shadowMap.enabled = value; } }, shadowMapType: { get: function () { return this.shadowMap.type; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' ); this.shadowMap.type = value; } }, shadowMapCullFace: { get: function () { console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); return undefined; }, set: function ( /* value */ ) { console.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' ); } }, context: { get: function () { console.warn( 'THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.' ); return this.getContext(); } }, vr: { get: function () { console.warn( 'THREE.WebGLRenderer: .vr has been renamed to .xr' ); return this.xr; } }, gammaInput: { get: function () { console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); return false; }, set: function () { console.warn( 'THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.' ); } }, gammaOutput: { get: function () { console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); return false; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.' ); this.outputEncoding = ( value === true ) ? sRGBEncoding : LinearEncoding; } }, toneMappingWhitePoint: { get: function () { console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); return 1.0; }, set: function () { console.warn( 'THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.' ); } }, } ); Object.defineProperties( WebGLShadowMap.prototype, { cullFace: { get: function () { console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); return undefined; }, set: function ( /* cullFace */ ) { console.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' ); } }, renderReverseSided: { get: function () { console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); return undefined; }, set: function () { console.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' ); } }, renderSingleSided: { get: function () { console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); return undefined; }, set: function () { console.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' ); } } } ); function WebGLRenderTargetCube( width, height, options ) { console.warn( 'THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).' ); return new WebGLCubeRenderTarget( width, options ); } // Object.defineProperties( WebGLRenderTarget.prototype, { wrapS: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); return this.texture.wrapS; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' ); this.texture.wrapS = value; } }, wrapT: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); return this.texture.wrapT; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' ); this.texture.wrapT = value; } }, magFilter: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); return this.texture.magFilter; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' ); this.texture.magFilter = value; } }, minFilter: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); return this.texture.minFilter; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' ); this.texture.minFilter = value; } }, anisotropy: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); return this.texture.anisotropy; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' ); this.texture.anisotropy = value; } }, offset: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); return this.texture.offset; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' ); this.texture.offset = value; } }, repeat: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); return this.texture.repeat; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' ); this.texture.repeat = value; } }, format: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); return this.texture.format; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' ); this.texture.format = value; } }, type: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); return this.texture.type; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' ); this.texture.type = value; } }, generateMipmaps: { get: function () { console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); return this.texture.generateMipmaps; }, set: function ( value ) { console.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' ); this.texture.generateMipmaps = value; } } } ); // Object.defineProperties( Audio.prototype, { load: { value: function ( file ) { console.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' ); const scope = this; const audioLoader = new AudioLoader(); audioLoader.load( file, function ( buffer ) { scope.setBuffer( buffer ); } ); return this; } }, startTime: { set: function () { console.warn( 'THREE.Audio: .startTime is now .play( delay ).' ); } } } ); AudioAnalyser.prototype.getData = function () { console.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' ); return this.getFrequencyData(); }; // CubeCamera.prototype.updateCubeMap = function ( renderer, scene ) { console.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' ); return this.update( renderer, scene ); }; CubeCamera.prototype.clear = function ( renderer, color, depth, stencil ) { console.warn( 'THREE.CubeCamera: .clear() is now .renderTarget.clear().' ); return this.renderTarget.clear( renderer, color, depth, stencil ); }; // const GeometryUtils = { merge: function ( geometry1, geometry2, materialIndexOffset ) { console.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' ); let matrix; if ( geometry2.isMesh ) { geometry2.matrixAutoUpdate && geometry2.updateMatrix(); matrix = geometry2.matrix; geometry2 = geometry2.geometry; } geometry1.merge( geometry2, matrix, materialIndexOffset ); }, center: function ( geometry ) { console.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' ); return geometry.center(); } }; ImageUtils.crossOrigin = undefined; ImageUtils.loadTexture = function ( url, mapping, onLoad, onError ) { console.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' ); const loader = new TextureLoader(); loader.setCrossOrigin( this.crossOrigin ); const texture = loader.load( url, onLoad, undefined, onError ); if ( mapping ) texture.mapping = mapping; return texture; }; ImageUtils.loadTextureCube = function ( urls, mapping, onLoad, onError ) { console.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' ); const loader = new CubeTextureLoader(); loader.setCrossOrigin( this.crossOrigin ); const texture = loader.load( urls, onLoad, undefined, onError ); if ( mapping ) texture.mapping = mapping; return texture; }; ImageUtils.loadCompressedTexture = function () { console.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' ); }; ImageUtils.loadCompressedTextureCube = function () { console.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' ); }; // function CanvasRenderer() { console.error( 'THREE.CanvasRenderer has been removed' ); } // function JSONLoader() { console.error( 'THREE.JSONLoader has been removed.' ); } // const SceneUtils = { createMultiMaterialObject: function ( /* geometry, materials */ ) { console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); }, detach: function ( /* child, parent, scene */ ) { console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); }, attach: function ( /* child, scene, parent */ ) { console.error( 'THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js' ); } }; // function LensFlare() { console.error( 'THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js' ); } if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) { /* eslint-disable no-undef */ __THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: { revision: REVISION, } } ) ); /* eslint-enable no-undef */ } class PathAnimation{ constructor(path, start, end, speed, callback){ this.path = path; this.length = this.path.spline.getLength(); this.speed = speed; this.callback = callback; this.tween = null; this.startPoint = Math.max(start, 0); this.endPoint = Math.min(end, this.length); this.t = 0.0; } start(resume = false){ if(this.tween){ this.tween.stop(); this.tween = null; } let tStart; if(resume){ tStart = this.t; }else { tStart = this.startPoint / this.length; } let tEnd = this.endPoint / this.length; let animationDuration = (tEnd - tStart) * this.length * 1000 / this.speed; let progress = {t: tStart}; this.tween = new TWEEN.Tween(progress).to({t: tEnd}, animationDuration); this.tween.easing(TWEEN.Easing.Linear.None); this.tween.onUpdate((e) => { this.t = progress.t; this.callback(progress.t); }); this.tween.onComplete(() => { if(this.repeat){ this.start(); } }); setTimeout(() => { this.tween.start(); }, 0); } stop(){ if(!this.tween){ return; } this.tween.stop(); this.tween = null; this.t = 0; } pause(){ if(!this.tween){ return; } this.tween.stop(); TWEEN.remove(this.tween); this.tween = null; } resume(){ this.start(true); } getPoint(t){ return this.path.spline.getPoint(t); } } class AnimationPath{ constructor (points = []) { this.points = points; this.spline = new CatmullRomCurve3(points); //this.spline.reparametrizeByArcLength(1 / this.spline.getLength().total); } get (t) { return this.spline.getPoint(t); } getLength () { return this.spline.getLength(); } animate (start, end, speed, callback) { let animation = new PathAnimation(this, start, end, speed, callback); animation.start(); return animation; } pause () { if (this.tween) { this.tween.stop(); } } resume () { if (this.tween) { this.tween.start(); } } getGeometry () { let geometry = new Geometry(); let samples = 500; let i = 0; for (let u = 0; u <= 1; u += 1 / samples) { let position = this.spline.getPoint(u); geometry.vertices[i] = new Vector3(position.x, position.y, position.z); i++; } if(this.closed){ let position = this.spline.getPoint(0); geometry.vertices[i] = new Vector3(position.x, position.y, position.z); } return geometry; } get closed(){ return this.spline.closed; } set closed(value){ this.spline.closed = value; } } const XHRFactory = { config: { withCredentials: false, customHeaders: [ { header: null, value: null } ] }, createXMLHttpRequest: function () { let xhr = new XMLHttpRequest(); if (this.config.customHeaders && Array.isArray(this.config.customHeaders) && this.config.customHeaders.length > 0) { let baseOpen = xhr.open; let customHeaders = this.config.customHeaders; xhr.open = function () { baseOpen.apply(this, [].slice.call(arguments)); customHeaders.forEach(function (customHeader) { if (!!customHeader.header && !!customHeader.value) { xhr.setRequestHeader(customHeader.header, customHeader.value); } }); }; } return xhr; } }; class TextSprite extends Object3D{ constructor(text){ super(); let texture = new Texture(); texture.minFilter = LinearFilter; texture.magFilter = LinearFilter; let spriteMaterial = new SpriteMaterial({ map: texture, depthTest: false, depthWrite: false}); this.texture = texture; this.material = spriteMaterial; //this.material = getRawMaterial(texture); this.sprite = new Sprite(this.material); this.add(this.sprite); this.borderThickness = 4; this.fontface = 'Arial'; this.fontsize = 28; this.borderColor = { r: 0, g: 0, b: 0, a: 1.0 }; this.backgroundColor = { r: 255, g: 255, b: 255, a: 1.0 }; this.textColor = {r: 255, g: 255, b: 255, a: 1.0}; this.text = ''; this.setText(text); } setText(text){ if (this.text !== text){ this.text = text; this.update(); } } setTextColor(color){ this.textColor = color; this.update(); } setBorderColor(color){ this.borderColor = color; this.update(); } setBackgroundColor(color){ this.backgroundColor = color; this.update(); } update(){ let canvas = document.createElement('canvas'); let context = canvas.getContext('2d'); context.font = 'Bold ' + this.fontsize + 'px ' + this.fontface; // get size data (height depends only on font size) let metrics = context.measureText(this.text); let textWidth = metrics.width; let margin = 5; let spriteWidth = 2 * margin + textWidth + 2 * this.borderThickness; let spriteHeight = this.fontsize * 1.4 + 2 * this.borderThickness; context.canvas.width = spriteWidth; context.canvas.height = spriteHeight; context.font = 'Bold ' + this.fontsize + 'px ' + this.fontface; // background color context.fillStyle = 'rgba(' + this.backgroundColor.r + ',' + this.backgroundColor.g + ',' + this.backgroundColor.b + ',' + this.backgroundColor.a + ')'; // border color context.strokeStyle = 'rgba(' + this.borderColor.r + ',' + this.borderColor.g + ',' + this.borderColor.b + ',' + this.borderColor.a + ')'; context.lineWidth = this.borderThickness; this.roundRect(context, this.borderThickness / 2, this.borderThickness / 2, textWidth + this.borderThickness + 2 * margin, this.fontsize * 1.4 + this.borderThickness, 6); // text color context.strokeStyle = 'rgba(0, 0, 0, 1.0)'; context.strokeText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness); context.fillStyle = 'rgba(' + this.textColor.r + ',' + this.textColor.g + ',' + this.textColor.b + ',' + this.textColor.a + ')'; context.fillText(this.text, this.borderThickness + margin, this.fontsize + this.borderThickness); let texture = new Texture(canvas); texture.minFilter = LinearFilter; texture.magFilter = LinearFilter; texture.needsUpdate = true; //this.material.needsUpdate = true; // { // screen-space sprite // let [screenWidth, screenHeight] = [1620, 937]; // let uniforms = this.sprite.material.uniforms; // let aspect = spriteHeight / spriteWidth; // let factor = 0.5; // let w = spriteWidth / screenWidth; // let h = spriteHeight / screenHeight; // uniforms.uScale.value = [2 * w, 2 * h]; // //uniforms.uScale.value = [factor * 1, factor * aspect]; // this.sprite.material.uniforms.map.value = texture; // } this.sprite.material.map = texture; this.texture = texture; this.sprite.scale.set(spriteWidth * 0.01, spriteHeight * 0.01, 1.0); } roundRect(ctx, x, y, w, h, r){ ctx.beginPath(); ctx.moveTo(x + r, y); ctx.lineTo(x + w - r, y); ctx.quadraticCurveTo(x + w, y, x + w, y + r); ctx.lineTo(x + w, y + h - r); ctx.quadraticCurveTo(x + w, y + h, x + w - r, y + h); ctx.lineTo(x + r, y + h); ctx.quadraticCurveTo(x, y + h, x, y + h - r); ctx.lineTo(x, y + r); ctx.quadraticCurveTo(x, y, x + r, y); ctx.closePath(); ctx.fill(); ctx.stroke(); } } class Volume extends Object3D { constructor (args = {}) { super(); if(this.constructor.name === "Volume"){ console.warn("Can't create object of class Volume directly. Use classes BoxVolume or SphereVolume instead."); } //console.log(this); //console.log(this.constructor); //console.log(this.constructor.name); this._clip = args.clip || false; this._visible = true; this.showVolumeLabel = true; this._modifiable = args.modifiable || true; this.label = new TextSprite('0'); this.label.setBorderColor({r: 0, g: 255, b: 0, a: 0.0}); this.label.setBackgroundColor({r: 0, g: 255, b: 0, a: 0.0}); this.label.material.depthTest = false; this.label.material.depthWrite = false; this.label.material.transparent = true; this.label.position.y -= 0.5; this.add(this.label); this.label.updateMatrixWorld = () => { let volumeWorldPos = new Vector3(); volumeWorldPos.setFromMatrixPosition(this.matrixWorld); this.label.position.copy(volumeWorldPos); this.label.updateMatrix(); this.label.matrixWorld.copy(this.label.matrix); this.label.matrixWorldNeedsUpdate = false; for (let i = 0, l = this.label.children.length; i < l; i++) { this.label.children[ i ].updateMatrixWorld(true); } }; { // event listeners this.addEventListener('select', e => {}); this.addEventListener('deselect', e => {}); } } get visible(){ return this._visible; } set visible(value){ if(this._visible !== value){ this._visible = value; this.dispatchEvent({type: "visibility_changed", object: this}); } } getVolume () { console.warn("override this in subclass"); } update () { }; raycast (raycaster, intersects) { } get clip () { return this._clip; } set clip (value) { if(this._clip !== value){ this._clip = value; this.update(); this.dispatchEvent({ type: "clip_changed", object: this }); } } get modifieable () { return this._modifiable; } set modifieable (value) { this._modifiable = value; this.update(); } }; class BoxVolume extends Volume{ constructor(args = {}){ super(args); this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; this.name = 'box_' + this.constructor.counter; let boxGeometry = new BoxGeometry(1, 1, 1); boxGeometry.computeBoundingBox(); let boxFrameGeometry = new Geometry(); { let Vector3$1 = Vector3; boxFrameGeometry.vertices.push( // bottom new Vector3$1(-0.5, -0.5, 0.5), new Vector3$1(0.5, -0.5, 0.5), new Vector3$1(0.5, -0.5, 0.5), new Vector3$1(0.5, -0.5, -0.5), new Vector3$1(0.5, -0.5, -0.5), new Vector3$1(-0.5, -0.5, -0.5), new Vector3$1(-0.5, -0.5, -0.5), new Vector3$1(-0.5, -0.5, 0.5), // top new Vector3$1(-0.5, 0.5, 0.5), new Vector3$1(0.5, 0.5, 0.5), new Vector3$1(0.5, 0.5, 0.5), new Vector3$1(0.5, 0.5, -0.5), new Vector3$1(0.5, 0.5, -0.5), new Vector3$1(-0.5, 0.5, -0.5), new Vector3$1(-0.5, 0.5, -0.5), new Vector3$1(-0.5, 0.5, 0.5), // sides new Vector3$1(-0.5, -0.5, 0.5), new Vector3$1(-0.5, 0.5, 0.5), new Vector3$1(0.5, -0.5, 0.5), new Vector3$1(0.5, 0.5, 0.5), new Vector3$1(0.5, -0.5, -0.5), new Vector3$1(0.5, 0.5, -0.5), new Vector3$1(-0.5, -0.5, -0.5), new Vector3$1(-0.5, 0.5, -0.5), ); } this.material = new MeshBasicMaterial({ color: 0x00ff00, transparent: true, opacity: 0.3, depthTest: true, depthWrite: false}); this.box = new Mesh(boxGeometry, this.material); this.box.geometry.computeBoundingBox(); this.boundingBox = this.box.geometry.boundingBox; this.add(this.box); this.frame = new LineSegments(boxFrameGeometry, new LineBasicMaterial({color: 0x000000})); // this.frame.mode = THREE.Lines; this.add(this.frame); this.update(); } update(){ this.boundingBox = this.box.geometry.boundingBox; this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); if (this._clip) { this.box.visible = false; this.label.visible = false; } else { this.box.visible = true; this.label.visible = this.showVolumeLabel; } } raycast (raycaster, intersects) { let is = []; this.box.raycast(raycaster, is); if (is.length > 0) { let I = is[0]; intersects.push({ distance: I.distance, object: this, point: I.point.clone() }); } } getVolume(){ return Math.abs(this.scale.x * this.scale.y * this.scale.z); } }; class SphereVolume extends Volume{ constructor(args = {}){ super(args); this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; this.name = 'sphere_' + this.constructor.counter; let sphereGeometry = new SphereGeometry(1, 32, 32); sphereGeometry.computeBoundingBox(); this.material = new MeshBasicMaterial({ color: 0x00ff00, transparent: true, opacity: 0.3, depthTest: true, depthWrite: false}); this.sphere = new Mesh(sphereGeometry, this.material); this.sphere.visible = false; this.sphere.geometry.computeBoundingBox(); this.boundingBox = this.sphere.geometry.boundingBox; this.add(this.sphere); this.label.visible = false; let frameGeometry = new Geometry(); { let steps = 64; let uSegments = 8; let vSegments = 5; let r = 1; for(let uSegment = 0; uSegment < uSegments; uSegment++){ let alpha = (uSegment / uSegments) * Math.PI * 2; let dirx = Math.cos(alpha); let diry = Math.sin(alpha); for(let i = 0; i <= steps; i++){ let v = (i / steps) * Math.PI * 2; let vNext = v + 2 * Math.PI / steps; let height = Math.sin(v); let xyAmount = Math.cos(v); let heightNext = Math.sin(vNext); let xyAmountNext = Math.cos(vNext); let vertex = new Vector3(dirx * xyAmount, diry * xyAmount, height); frameGeometry.vertices.push(vertex); let vertexNext = new Vector3(dirx * xyAmountNext, diry * xyAmountNext, heightNext); frameGeometry.vertices.push(vertexNext); } } // creates rings at poles, just because it's easier to implement for(let vSegment = 0; vSegment <= vSegments + 1; vSegment++){ //let height = (vSegment / (vSegments + 1)) * 2 - 1; // -1 to 1 let uh = (vSegment / (vSegments + 1)); // -1 to 1 uh = (1 - uh) * (-Math.PI / 2) + uh *(Math.PI / 2); let height = Math.sin(uh); console.log(uh, height); for(let i = 0; i <= steps; i++){ let u = (i / steps) * Math.PI * 2; let uNext = u + 2 * Math.PI / steps; let dirx = Math.cos(u); let diry = Math.sin(u); let dirxNext = Math.cos(uNext); let diryNext = Math.sin(uNext); let xyAmount = Math.sqrt(1 - height * height); let vertex = new Vector3(dirx * xyAmount, diry * xyAmount, height); frameGeometry.vertices.push(vertex); let vertexNext = new Vector3(dirxNext * xyAmount, diryNext * xyAmount, height); frameGeometry.vertices.push(vertexNext); } } } this.frame = new LineSegments(frameGeometry, new LineBasicMaterial({color: 0x000000})); this.add(this.frame); let frameMaterial = new MeshBasicMaterial({wireframe: true, color: 0x000000}); this.frame = new Mesh(sphereGeometry, frameMaterial); //this.add(this.frame); //this.frame = new THREE.LineSegments(boxFrameGeometry, new THREE.LineBasicMaterial({color: 0x000000})); // this.frame.mode = THREE.Lines; //this.add(this.frame); this.update(); } update(){ this.boundingBox = this.sphere.geometry.boundingBox; this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); //if (this._clip) { // this.sphere.visible = false; // this.label.visible = false; //} else { // this.sphere.visible = true; // this.label.visible = this.showVolumeLabel; //} } raycast (raycaster, intersects) { let is = []; this.sphere.raycast(raycaster, is); if (is.length > 0) { let I = is[0]; intersects.push({ distance: I.distance, object: this, point: I.point.clone() }); } } // see https://en.wikipedia.org/wiki/Ellipsoid#Volume getVolume(){ return (4 / 3) * Math.PI * this.scale.x * this.scale.y * this.scale.z; } }; class Profile extends Object3D{ constructor () { super(); this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; this.name = 'Profile_' + this.constructor.counter; this.points = []; this.spheres = []; this.edges = []; this.boxes = []; this.width = 1; this.height = 20; this._modifiable = true; this.sphereGeometry = new SphereGeometry(0.4, 10, 10); this.color = new Color(0xff0000); this.lineColor = new Color(0xff0000); } createSphereMaterial () { let sphereMaterial = new MeshLambertMaterial({ //shading: THREE.SmoothShading, color: 0xff0000, depthTest: false, depthWrite: false} ); return sphereMaterial; }; getSegments () { let segments = []; for (let i = 0; i < this.points.length - 1; i++) { let start = this.points[i].clone(); let end = this.points[i + 1].clone(); segments.push({start: start, end: end}); } return segments; } getSegmentMatrices () { let segments = this.getSegments(); let matrices = []; for (let segment of segments) { let {start, end} = segment; let box = new Object3D(); let length = start.clone().setZ(0).distanceTo(end.clone().setZ(0)); box.scale.set(length, 10000, this.width); box.up.set(0, 0, 1); let center = new Vector3().addVectors(start, end).multiplyScalar(0.5); let diff = new Vector3().subVectors(end, start); let target = new Vector3(diff.y, -diff.x, 0); box.position.set(0, 0, 0); box.lookAt(target); box.position.copy(center); box.updateMatrixWorld(); matrices.push(box.matrixWorld); } return matrices; } addMarker (point) { this.points.push(point); let sphere = new Mesh(this.sphereGeometry, this.createSphereMaterial()); this.add(sphere); this.spheres.push(sphere); // edges & boxes if (this.points.length > 1) { let lineGeometry = new Geometry(); lineGeometry.vertices.push(new Vector3(), new Vector3()); lineGeometry.colors.push(this.lineColor, this.lineColor, this.lineColor); let lineMaterial = new LineBasicMaterial({ vertexColors: VertexColors, linewidth: 2, transparent: true, opacity: 0.4 }); lineMaterial.depthTest = false; let edge = new Line(lineGeometry, lineMaterial); edge.visible = false; this.add(edge); this.edges.push(edge); let boxGeometry = new BoxGeometry(1, 1, 1); let boxMaterial = new MeshBasicMaterial({color: 0xff0000, transparent: true, opacity: 0.2}); let box = new Mesh(boxGeometry, boxMaterial); box.visible = false; this.add(box); this.boxes.push(box); } { // event listeners let drag = (e) => { let I = Utils.getMousePointCloudIntersection( e.drag.end, e.viewer.scene.getActiveCamera(), e.viewer, e.viewer.scene.pointclouds); if (I) { let i = this.spheres.indexOf(e.drag.object); if (i !== -1) { this.setPosition(i, I.location); //this.dispatchEvent({ // 'type': 'marker_moved', // 'profile': this, // 'index': i //}); } } }; let drop = e => { let i = this.spheres.indexOf(e.drag.object); if (i !== -1) { this.dispatchEvent({ 'type': 'marker_dropped', 'profile': this, 'index': i }); } }; let mouseover = (e) => e.object.material.emissive.setHex(0x888888); let mouseleave = (e) => e.object.material.emissive.setHex(0x000000); sphere.addEventListener('drag', drag); sphere.addEventListener('drop', drop); sphere.addEventListener('mouseover', mouseover); sphere.addEventListener('mouseleave', mouseleave); } let event = { type: 'marker_added', profile: this, sphere: sphere }; this.dispatchEvent(event); this.setPosition(this.points.length - 1, point); } removeMarker (index) { this.points.splice(index, 1); this.remove(this.spheres[index]); let edgeIndex = (index === 0) ? 0 : (index - 1); this.remove(this.edges[edgeIndex]); this.edges.splice(edgeIndex, 1); this.remove(this.boxes[edgeIndex]); this.boxes.splice(edgeIndex, 1); this.spheres.splice(index, 1); this.update(); this.dispatchEvent({ 'type': 'marker_removed', 'profile': this }); } setPosition (index, position) { let point = this.points[index]; point.copy(position); let event = { type: 'marker_moved', profile: this, index: index, position: point.clone() }; this.dispatchEvent(event); this.update(); } setWidth (width) { this.width = width; let event = { type: 'width_changed', profile: this, width: width }; this.dispatchEvent(event); this.update(); } getWidth () { return this.width; } update () { if (this.points.length === 0) { return; } else if (this.points.length === 1) { let point = this.points[0]; this.spheres[0].position.copy(point); return; } let min = this.points[0].clone(); let max = this.points[0].clone(); let centroid = new Vector3(); let lastIndex = this.points.length - 1; for (let i = 0; i <= lastIndex; i++) { let point = this.points[i]; let sphere = this.spheres[i]; let leftIndex = (i === 0) ? lastIndex : i - 1; // let rightIndex = (i === lastIndex) ? 0 : i + 1; let leftVertex = this.points[leftIndex]; // let rightVertex = this.points[rightIndex]; let leftEdge = this.edges[leftIndex]; let rightEdge = this.edges[i]; let leftBox = this.boxes[leftIndex]; // rightBox = this.boxes[i]; // let leftEdgeLength = point.distanceTo(leftVertex); // let rightEdgeLength = point.distanceTo(rightVertex); // let leftEdgeCenter = new THREE.Vector3().addVectors(leftVertex, point).multiplyScalar(0.5); // let rightEdgeCenter = new THREE.Vector3().addVectors(point, rightVertex).multiplyScalar(0.5); sphere.position.copy(point); if (this._modifiable) { sphere.visible = true; } else { sphere.visible = false; } if (leftEdge) { leftEdge.geometry.vertices[1].copy(point); leftEdge.geometry.verticesNeedUpdate = true; leftEdge.geometry.computeBoundingSphere(); } if (rightEdge) { rightEdge.geometry.vertices[0].copy(point); rightEdge.geometry.verticesNeedUpdate = true; rightEdge.geometry.computeBoundingSphere(); } if (leftBox) { let start = leftVertex; let end = point; let length = start.clone().setZ(0).distanceTo(end.clone().setZ(0)); leftBox.scale.set(length, 1000000, this.width); leftBox.up.set(0, 0, 1); let center = new Vector3().addVectors(start, end).multiplyScalar(0.5); let diff = new Vector3().subVectors(end, start); let target = new Vector3(diff.y, -diff.x, 0); leftBox.position.set(0, 0, 0); leftBox.lookAt(target); leftBox.position.copy(center); } centroid.add(point); min.min(point); max.max(point); } centroid.multiplyScalar(1 / this.points.length); for (let i = 0; i < this.boxes.length; i++) { let box = this.boxes[i]; box.position.z = min.z + (max.z - min.z) / 2; } } raycast (raycaster, intersects) { for (let i = 0; i < this.points.length; i++) { let sphere = this.spheres[i]; sphere.raycast(raycaster, intersects); } // recalculate distances because they are not necessarely correct // for scaled objects. // see https://github.com/mrdoob/three.js/issues/5827 // TODO: remove this once the bug has been fixed for (let i = 0; i < intersects.length; i++) { let I = intersects[i]; I.distance = raycaster.ray.origin.distanceTo(I.point); } intersects.sort(function (a, b) { return a.distance - b.distance; }); }; get modifiable () { return this._modifiable; } set modifiable (value) { this._modifiable = value; this.update(); } } var LineSegmentsGeometry = function () { InstancedBufferGeometry.call( this ); this.type = 'LineSegmentsGeometry'; var positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ]; var uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ]; var index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ]; this.setIndex( index ); this.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) ); this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) ); }; LineSegmentsGeometry.prototype = Object.assign( Object.create( InstancedBufferGeometry.prototype ), { constructor: LineSegmentsGeometry, isLineSegmentsGeometry: true, applyMatrix4: function ( matrix ) { var start = this.attributes.instanceStart; var end = this.attributes.instanceEnd; if ( start !== undefined ) { start.applyMatrix4( matrix ); end.applyMatrix4( matrix ); start.needsUpdate = true; } if ( this.boundingBox !== null ) { this.computeBoundingBox(); } if ( this.boundingSphere !== null ) { this.computeBoundingSphere(); } return this; }, setPositions: function ( array ) { var lineSegments; if ( array instanceof Float32Array ) { lineSegments = array; } else if ( Array.isArray( array ) ) { lineSegments = new Float32Array( array ); } var instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz this.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz this.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz // this.computeBoundingBox(); this.computeBoundingSphere(); return this; }, setColors: function ( array ) { var colors; if ( array instanceof Float32Array ) { colors = array; } else if ( Array.isArray( array ) ) { colors = new Float32Array( array ); } var instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb this.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb this.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb return this; }, fromWireframeGeometry: function ( geometry ) { this.setPositions( geometry.attributes.position.array ); return this; }, fromEdgesGeometry: function ( geometry ) { this.setPositions( geometry.attributes.position.array ); return this; }, fromMesh: function ( mesh ) { this.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) ); // set colors, maybe return this; }, fromLineSegments: function ( lineSegments ) { var geometry = lineSegments.geometry; if ( geometry.isGeometry ) { this.setPositions( geometry.vertices ); } else if ( geometry.isBufferGeometry ) { this.setPositions( geometry.attributes.position.array ); // assumes non-indexed } // set colors, maybe return this; }, computeBoundingBox: function () { var box = new Box3(); return function computeBoundingBox() { if ( this.boundingBox === null ) { this.boundingBox = new Box3(); } var start = this.attributes.instanceStart; var end = this.attributes.instanceEnd; if ( start !== undefined && end !== undefined ) { this.boundingBox.setFromBufferAttribute( start ); box.setFromBufferAttribute( end ); this.boundingBox.union( box ); } }; }(), computeBoundingSphere: function () { var vector = new Vector3(); return function computeBoundingSphere() { if ( this.boundingSphere === null ) { this.boundingSphere = new Sphere(); } if ( this.boundingBox === null ) { this.computeBoundingBox(); } var start = this.attributes.instanceStart; var end = this.attributes.instanceEnd; if ( start !== undefined && end !== undefined ) { var center = this.boundingSphere.center; this.boundingBox.getCenter( center ); var maxRadiusSq = 0; for ( var i = 0, il = start.count; i < il; i ++ ) { vector.fromBufferAttribute( start, i ); maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); vector.fromBufferAttribute( end, i ); maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) ); } this.boundingSphere.radius = Math.sqrt( maxRadiusSq ); if ( isNaN( this.boundingSphere.radius ) ) { console.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this ); } } }; }(), toJSON: function () { // todo }, applyMatrix: function ( matrix ) { console.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' ); return this.applyMatrix4( matrix ); } } ); /** * parameters = { * color: , * linewidth: , * dashed: , * dashScale: , * dashSize: , * dashOffset: , * gapSize: , * resolution: , // to be set by renderer * } */ UniformsLib.line = { linewidth: { value: 1 }, resolution: { value: new Vector2( 1, 1 ) }, dashScale: { value: 1 }, dashSize: { value: 1 }, dashOffset: { value: 0 }, gapSize: { value: 1 }, // todo FIX - maybe change to totalSize opacity: { value: 1 } }; ShaderLib[ 'line' ] = { uniforms: UniformsUtils.merge( [ UniformsLib.common, UniformsLib.fog, UniformsLib.line ] ), vertexShader: ` #include #include #include #include #include uniform float linewidth; uniform vec2 resolution; attribute vec3 instanceStart; attribute vec3 instanceEnd; attribute vec3 instanceColorStart; attribute vec3 instanceColorEnd; varying vec2 vUv; #ifdef USE_DASH uniform float dashScale; attribute float instanceDistanceStart; attribute float instanceDistanceEnd; varying float vLineDistance; #endif void trimSegment( const in vec4 start, inout vec4 end ) { // trim end segment so it terminates between the camera plane and the near plane // conservative estimate of the near plane float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column float nearEstimate = - 0.5 * b / a; float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); end.xyz = mix( start.xyz, end.xyz, alpha ); } void main() { #ifdef USE_COLOR vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; #endif #ifdef USE_DASH vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; #endif float aspect = resolution.x / resolution.y; vUv = uv; // camera space vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); // special case for perspective projection, and segments that terminate either in, or behind, the camera plane // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space // but we need to perform ndc-space calculations in the shader, so we must address this issue directly // perhaps there is a more elegant solution -- WestLangley bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column if ( perspective ) { if ( start.z < 0.0 && end.z >= 0.0 ) { trimSegment( start, end ); } else if ( end.z < 0.0 && start.z >= 0.0 ) { trimSegment( end, start ); } } // clip space vec4 clipStart = projectionMatrix * start; vec4 clipEnd = projectionMatrix * end; // ndc space vec2 ndcStart = clipStart.xy / clipStart.w; vec2 ndcEnd = clipEnd.xy / clipEnd.w; // direction vec2 dir = ndcEnd - ndcStart; // account for clip-space aspect ratio dir.x *= aspect; dir = normalize( dir ); // perpendicular to dir vec2 offset = vec2( dir.y, - dir.x ); // undo aspect ratio adjustment dir.x /= aspect; offset.x /= aspect; // sign flip if ( position.x < 0.0 ) offset *= - 1.0; // endcaps if ( position.y < 0.0 ) { offset += - dir; } else if ( position.y > 1.0 ) { offset += dir; } // adjust for linewidth offset *= linewidth; // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... offset /= resolution.y; // select end vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; // back to clip space offset *= clip.w; clip.xy += offset; gl_Position = clip; vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation #include #include #include } `, fragmentShader: ` uniform vec3 diffuse; uniform float opacity; #ifdef USE_DASH uniform float dashSize; uniform float dashOffset; uniform float gapSize; #endif varying float vLineDistance; #include #include #include #include #include varying vec2 vUv; void main() { #include #ifdef USE_DASH if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX #endif if ( abs( vUv.y ) > 1.0 ) { float a = vUv.x; float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; float len2 = a * a + b * b; if ( len2 > 1.0 ) discard; } vec4 diffuseColor = vec4( diffuse, opacity ); #include #include gl_FragColor = vec4( diffuseColor.rgb, diffuseColor.a ); #include #include #include #include } ` }; var LineMaterial = function ( parameters ) { ShaderMaterial.call( this, { type: 'LineMaterial', uniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ), vertexShader: ShaderLib[ 'line' ].vertexShader, fragmentShader: ShaderLib[ 'line' ].fragmentShader, clipping: true // required for clipping support } ); this.dashed = false; Object.defineProperties( this, { color: { enumerable: true, get: function () { return this.uniforms.diffuse.value; }, set: function ( value ) { this.uniforms.diffuse.value = value; } }, linewidth: { enumerable: true, get: function () { return this.uniforms.linewidth.value; }, set: function ( value ) { this.uniforms.linewidth.value = value; } }, dashScale: { enumerable: true, get: function () { return this.uniforms.dashScale.value; }, set: function ( value ) { this.uniforms.dashScale.value = value; } }, dashSize: { enumerable: true, get: function () { return this.uniforms.dashSize.value; }, set: function ( value ) { this.uniforms.dashSize.value = value; } }, dashOffset: { enumerable: true, get: function () { return this.uniforms.dashOffset.value; }, set: function ( value ) { this.uniforms.dashOffset.value = value; } }, gapSize: { enumerable: true, get: function () { return this.uniforms.gapSize.value; }, set: function ( value ) { this.uniforms.gapSize.value = value; } }, opacity: { enumerable: true, get: function () { return this.uniforms.opacity.value; }, set: function ( value ) { this.uniforms.opacity.value = value; } }, resolution: { enumerable: true, get: function () { return this.uniforms.resolution.value; }, set: function ( value ) { this.uniforms.resolution.value.copy( value ); } } } ); this.setValues( parameters ); }; LineMaterial.prototype = Object.create( ShaderMaterial.prototype ); LineMaterial.prototype.constructor = LineMaterial; LineMaterial.prototype.isLineMaterial = true; var LineSegments2 = function ( geometry, material ) { if ( geometry === undefined ) geometry = new LineSegmentsGeometry(); if ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } ); Mesh.call( this, geometry, material ); this.type = 'LineSegments2'; }; LineSegments2.prototype = Object.assign( Object.create( Mesh.prototype ), { constructor: LineSegments2, isLineSegments2: true, computeLineDistances: ( function () { // for backwards-compatability, but could be a method of LineSegmentsGeometry... var start = new Vector3(); var end = new Vector3(); return function computeLineDistances() { var geometry = this.geometry; var instanceStart = geometry.attributes.instanceStart; var instanceEnd = geometry.attributes.instanceEnd; var lineDistances = new Float32Array( 2 * instanceStart.data.count ); for ( var i = 0, j = 0, l = instanceStart.data.count; i < l; i ++, j += 2 ) { start.fromBufferAttribute( instanceStart, i ); end.fromBufferAttribute( instanceEnd, i ); lineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ]; lineDistances[ j + 1 ] = lineDistances[ j ] + start.distanceTo( end ); } var instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1 geometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0 geometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1 return this; }; }() ), raycast: ( function () { var start = new Vector4(); var end = new Vector4(); var ssOrigin = new Vector4(); var ssOrigin3 = new Vector3(); var mvMatrix = new Matrix4(); var line = new Line3(); var closestPoint = new Vector3(); return function raycast( raycaster, intersects ) { if ( raycaster.camera === null ) { console.error( 'LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2.' ); } var threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0; var ray = raycaster.ray; var camera = raycaster.camera; var projectionMatrix = camera.projectionMatrix; var geometry = this.geometry; var material = this.material; var resolution = material.resolution; var lineWidth = material.linewidth + threshold; var instanceStart = geometry.attributes.instanceStart; var instanceEnd = geometry.attributes.instanceEnd; // pick a point 1 unit out along the ray to avoid the ray origin // sitting at the camera origin which will cause "w" to be 0 when // applying the projection matrix. ray.at( 1, ssOrigin ); // ndc space [ - 1.0, 1.0 ] ssOrigin.w = 1; ssOrigin.applyMatrix4( camera.matrixWorldInverse ); ssOrigin.applyMatrix4( projectionMatrix ); ssOrigin.multiplyScalar( 1 / ssOrigin.w ); // screen space ssOrigin.x *= resolution.x / 2; ssOrigin.y *= resolution.y / 2; ssOrigin.z = 0; ssOrigin3.copy( ssOrigin ); var matrixWorld = this.matrixWorld; mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld ); for ( var i = 0, l = instanceStart.count; i < l; i ++ ) { start.fromBufferAttribute( instanceStart, i ); end.fromBufferAttribute( instanceEnd, i ); start.w = 1; end.w = 1; // camera space start.applyMatrix4( mvMatrix ); end.applyMatrix4( mvMatrix ); // clip space start.applyMatrix4( projectionMatrix ); end.applyMatrix4( projectionMatrix ); // ndc space [ - 1.0, 1.0 ] start.multiplyScalar( 1 / start.w ); end.multiplyScalar( 1 / end.w ); // skip the segment if it's outside the camera near and far planes var isBehindCameraNear = start.z < - 1 && end.z < - 1; var isPastCameraFar = start.z > 1 && end.z > 1; if ( isBehindCameraNear || isPastCameraFar ) { continue; } // screen space start.x *= resolution.x / 2; start.y *= resolution.y / 2; end.x *= resolution.x / 2; end.y *= resolution.y / 2; // create 2d segment line.start.copy( start ); line.start.z = 0; line.end.copy( end ); line.end.z = 0; // get closest point on ray to segment var param = line.closestPointToPointParameter( ssOrigin3, true ); line.at( param, closestPoint ); // check if the intersection point is within clip space var zPos = MathUtils.lerp( start.z, end.z, param ); var isInClipSpace = zPos >= - 1 && zPos <= 1; var isInside = ssOrigin3.distanceTo( closestPoint ) < lineWidth * 0.5; if ( isInClipSpace && isInside ) { line.start.fromBufferAttribute( instanceStart, i ); line.end.fromBufferAttribute( instanceEnd, i ); line.start.applyMatrix4( matrixWorld ); line.end.applyMatrix4( matrixWorld ); var pointOnLine = new Vector3(); var point = new Vector3(); ray.distanceSqToSegment( line.start, line.end, point, pointOnLine ); intersects.push( { point: point, pointOnLine: pointOnLine, distance: ray.origin.distanceTo( point ), object: this, face: null, faceIndex: i, uv: null, uv2: null, } ); } } }; }() ) } ); var LineGeometry = function () { LineSegmentsGeometry.call( this ); this.type = 'LineGeometry'; }; LineGeometry.prototype = Object.assign( Object.create( LineSegmentsGeometry.prototype ), { constructor: LineGeometry, isLineGeometry: true, setPositions: function ( array ) { // converts [ x1, y1, z1, x2, y2, z2, ... ] to pairs format var length = array.length - 3; var points = new Float32Array( 2 * length ); for ( var i = 0; i < length; i += 3 ) { points[ 2 * i ] = array[ i ]; points[ 2 * i + 1 ] = array[ i + 1 ]; points[ 2 * i + 2 ] = array[ i + 2 ]; points[ 2 * i + 3 ] = array[ i + 3 ]; points[ 2 * i + 4 ] = array[ i + 4 ]; points[ 2 * i + 5 ] = array[ i + 5 ]; } LineSegmentsGeometry.prototype.setPositions.call( this, points ); return this; }, setColors: function ( array ) { // converts [ r1, g1, b1, r2, g2, b2, ... ] to pairs format var length = array.length - 3; var colors = new Float32Array( 2 * length ); for ( var i = 0; i < length; i += 3 ) { colors[ 2 * i ] = array[ i ]; colors[ 2 * i + 1 ] = array[ i + 1 ]; colors[ 2 * i + 2 ] = array[ i + 2 ]; colors[ 2 * i + 3 ] = array[ i + 3 ]; colors[ 2 * i + 4 ] = array[ i + 4 ]; colors[ 2 * i + 5 ] = array[ i + 5 ]; } LineSegmentsGeometry.prototype.setColors.call( this, colors ); return this; }, fromLine: function ( line ) { var geometry = line.geometry; if ( geometry.isGeometry ) { this.setPositions( geometry.vertices ); } else if ( geometry.isBufferGeometry ) { this.setPositions( geometry.attributes.position.array ); // assumes non-indexed } // set colors, maybe return this; }, copy: function ( /* source */ ) { // todo return this; } } ); var Line2 = function ( geometry, material ) { if ( geometry === undefined ) geometry = new LineGeometry(); if ( material === undefined ) material = new LineMaterial( { color: Math.random() * 0xffffff } ); LineSegments2.call( this, geometry, material ); this.type = 'Line2'; }; Line2.prototype = Object.assign( Object.create( LineSegments2.prototype ), { constructor: Line2, isLine2: true } ); function createHeightLine(){ let lineGeometry = new LineGeometry(); lineGeometry.setPositions([ 0, 0, 0, 0, 0, 0, ]); let lineMaterial = new LineMaterial({ color: 0x00ff00, dashSize: 5, gapSize: 2, linewidth: 2, resolution: new Vector2(1000, 1000), }); lineMaterial.depthTest = false; const heightEdge = new Line2(lineGeometry, lineMaterial); heightEdge.visible = false; //this.add(this.heightEdge); return heightEdge; } function createHeightLabel(){ const heightLabel = new TextSprite(''); heightLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); heightLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); heightLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); heightLabel.fontsize = 16; heightLabel.material.depthTest = false; heightLabel.material.opacity = 1; heightLabel.visible = false; return heightLabel; } function createAreaLabel(){ const areaLabel = new TextSprite(''); areaLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); areaLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); areaLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); areaLabel.fontsize = 16; areaLabel.material.depthTest = false; areaLabel.material.opacity = 1; areaLabel.visible = false; return areaLabel; } function createCircleRadiusLabel(){ const circleRadiusLabel = new TextSprite(""); circleRadiusLabel.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); circleRadiusLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); circleRadiusLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); circleRadiusLabel.fontsize = 16; circleRadiusLabel.material.depthTest = false; circleRadiusLabel.material.opacity = 1; circleRadiusLabel.visible = false; return circleRadiusLabel; } function createCircleRadiusLine(){ const lineGeometry = new LineGeometry(); lineGeometry.setPositions([ 0, 0, 0, 0, 0, 0, ]); const lineMaterial = new LineMaterial({ color: 0xff0000, linewidth: 2, resolution: new Vector2(1000, 1000), gapSize: 1, dashed: true, }); lineMaterial.depthTest = false; const circleRadiusLine = new Line2(lineGeometry, lineMaterial); circleRadiusLine.visible = false; return circleRadiusLine; } function createCircleLine(){ const coordinates = []; let n = 128; for(let i = 0; i <= n; i++){ let u0 = 2 * Math.PI * (i / n); let u1 = 2 * Math.PI * (i + 1) / n; let p0 = new Vector3( Math.cos(u0), Math.sin(u0), 0 ); let p1 = new Vector3( Math.cos(u1), Math.sin(u1), 0 ); coordinates.push( ...p0.toArray(), ...p1.toArray(), ); } const geometry = new LineGeometry(); geometry.setPositions(coordinates); const material = new LineMaterial({ color: 0xff0000, dashSize: 5, gapSize: 2, linewidth: 2, resolution: new Vector2(1000, 1000), }); material.depthTest = false; const circleLine = new Line2(geometry, material); circleLine.visible = false; circleLine.computeLineDistances(); return circleLine; } function createCircleCenter(){ const sg = new SphereGeometry(1, 32, 32); const sm = new MeshNormalMaterial(); const circleCenter = new Mesh(sg, sm); circleCenter.visible = false; return circleCenter; } function createLine(){ const geometry = new LineGeometry(); geometry.setPositions([ 0, 0, 0, 0, 0, 0, ]); const material = new LineMaterial({ color: 0xff0000, linewidth: 2, resolution: new Vector2(1000, 1000), gapSize: 1, dashed: true, }); material.depthTest = false; const line = new Line2(geometry, material); return line; } function createCircle(){ const coordinates = []; let n = 128; for(let i = 0; i <= n; i++){ let u0 = 2 * Math.PI * (i / n); let u1 = 2 * Math.PI * (i + 1) / n; let p0 = new Vector3( Math.cos(u0), Math.sin(u0), 0 ); let p1 = new Vector3( Math.cos(u1), Math.sin(u1), 0 ); coordinates.push( ...p0.toArray(), ...p1.toArray(), ); } const geometry = new LineGeometry(); geometry.setPositions(coordinates); const material = new LineMaterial({ color: 0xff0000, dashSize: 5, gapSize: 2, linewidth: 2, resolution: new Vector2(1000, 1000), }); material.depthTest = false; const line = new Line2(geometry, material); line.computeLineDistances(); return line; } function createAzimuth(){ const azimuth = { label: null, center: null, target: null, north: null, centerToNorth: null, centerToTarget: null, centerToTargetground: null, targetgroundToTarget: null, circle: null, node: null, }; const sg = new SphereGeometry(1, 32, 32); const sm = new MeshNormalMaterial(); { const label = new TextSprite(""); label.setTextColor({r: 140, g: 250, b: 140, a: 1.0}); label.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); label.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); label.fontsize = 16; label.material.depthTest = false; label.material.opacity = 1; azimuth.label = label; } azimuth.center = new Mesh(sg, sm); azimuth.target = new Mesh(sg, sm); azimuth.north = new Mesh(sg, sm); azimuth.centerToNorth = createLine(); azimuth.centerToTarget = createLine(); azimuth.centerToTargetground = createLine(); azimuth.targetgroundToTarget = createLine(); azimuth.circle = createCircle(); azimuth.node = new Object3D(); azimuth.node.add( azimuth.centerToNorth, azimuth.centerToTarget, azimuth.centerToTargetground, azimuth.targetgroundToTarget, azimuth.circle, azimuth.label, azimuth.center, azimuth.target, azimuth.north, ); return azimuth; } class Measure extends Object3D { constructor () { super(); this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; this.name = 'Measure_' + this.constructor.counter; this.points = []; this._showDistances = true; this._showCoordinates = false; this._showArea = false; this._closed = true; this._showAngles = false; this._showCircle = false; this._showHeight = false; this._showEdges = true; this._showAzimuth = false; this.maxMarkers = Number.MAX_SAFE_INTEGER; this.sphereGeometry = new SphereGeometry(0.4, 10, 10); this.color = new Color(0xff0000); this.spheres = []; this.edges = []; this.sphereLabels = []; this.edgeLabels = []; this.angleLabels = []; this.coordinateLabels = []; this.heightEdge = createHeightLine(); this.heightLabel = createHeightLabel(); this.areaLabel = createAreaLabel(); this.circleRadiusLabel = createCircleRadiusLabel(); this.circleRadiusLine = createCircleRadiusLine(); this.circleLine = createCircleLine(); this.circleCenter = createCircleCenter(); this.azimuth = createAzimuth(); this.add(this.heightEdge); this.add(this.heightLabel); this.add(this.areaLabel); this.add(this.circleRadiusLabel); this.add(this.circleRadiusLine); this.add(this.circleLine); this.add(this.circleCenter); this.add(this.azimuth.node); } createSphereMaterial () { let sphereMaterial = new MeshLambertMaterial({ //shading: THREE.SmoothShading, color: this.color, depthTest: false, depthWrite: false} ); return sphereMaterial; }; addMarker (point) { if (point.x != null) { point = {position: point}; }else if(point instanceof Array){ point = {position: new Vector3(...point)}; } this.points.push(point); // sphere let sphere = new Mesh(this.sphereGeometry, this.createSphereMaterial()); this.add(sphere); this.spheres.push(sphere); { // edges let lineGeometry = new LineGeometry(); lineGeometry.setPositions( [ 0, 0, 0, 0, 0, 0, ]); let lineMaterial = new LineMaterial({ color: 0xff0000, linewidth: 2, resolution: new Vector2(1000, 1000), }); lineMaterial.depthTest = false; let edge = new Line2(lineGeometry, lineMaterial); edge.visible = true; this.add(edge); this.edges.push(edge); } { // edge labels let edgeLabel = new TextSprite(); edgeLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); edgeLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); edgeLabel.material.depthTest = false; edgeLabel.visible = false; edgeLabel.fontsize = 16; this.edgeLabels.push(edgeLabel); this.add(edgeLabel); } { // angle labels let angleLabel = new TextSprite(); angleLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); angleLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); angleLabel.fontsize = 16; angleLabel.material.depthTest = false; angleLabel.material.opacity = 1; angleLabel.visible = false; this.angleLabels.push(angleLabel); this.add(angleLabel); } { // coordinate labels let coordinateLabel = new TextSprite(); coordinateLabel.setBorderColor({r: 0, g: 0, b: 0, a: 1.0}); coordinateLabel.setBackgroundColor({r: 0, g: 0, b: 0, a: 1.0}); coordinateLabel.fontsize = 16; coordinateLabel.material.depthTest = false; coordinateLabel.material.opacity = 1; coordinateLabel.visible = false; this.coordinateLabels.push(coordinateLabel); this.add(coordinateLabel); } { // Event Listeners let drag = (e) => { let I = Utils.getMousePointCloudIntersection( e.drag.end, e.viewer.scene.getActiveCamera(), e.viewer, e.viewer.scene.pointclouds, {pickClipped: true}); if (I) { let i = this.spheres.indexOf(e.drag.object); if (i !== -1) { let point = this.points[i]; // loop through current keys and cleanup ones that will be orphaned for (let key of Object.keys(point)) { if (!I.point[key]) { delete point[key]; } } for (let key of Object.keys(I.point).filter(e => e !== 'position')) { point[key] = I.point[key]; } this.setPosition(i, I.location); } } }; let drop = e => { let i = this.spheres.indexOf(e.drag.object); if (i !== -1) { this.dispatchEvent({ 'type': 'marker_dropped', 'measurement': this, 'index': i }); } }; let mouseover = (e) => e.object.material.emissive.setHex(0x888888); let mouseleave = (e) => e.object.material.emissive.setHex(0x000000); sphere.addEventListener('drag', drag); sphere.addEventListener('drop', drop); sphere.addEventListener('mouseover', mouseover); sphere.addEventListener('mouseleave', mouseleave); } let event = { type: 'marker_added', measurement: this, sphere: sphere }; this.dispatchEvent(event); this.setMarker(this.points.length - 1, point); }; removeMarker (index) { this.points.splice(index, 1); this.remove(this.spheres[index]); let edgeIndex = (index === 0) ? 0 : (index - 1); this.remove(this.edges[edgeIndex]); this.edges.splice(edgeIndex, 1); this.remove(this.edgeLabels[edgeIndex]); this.edgeLabels.splice(edgeIndex, 1); this.coordinateLabels.splice(index, 1); this.remove(this.angleLabels[index]); this.angleLabels.splice(index, 1); this.spheres.splice(index, 1); this.update(); this.dispatchEvent({type: 'marker_removed', measurement: this}); }; setMarker (index, point) { this.points[index] = point; let event = { type: 'marker_moved', measure: this, index: index, position: point.position.clone() }; this.dispatchEvent(event); this.update(); } setPosition (index, position) { let point = this.points[index]; point.position.copy(position); let event = { type: 'marker_moved', measure: this, index: index, position: position.clone() }; this.dispatchEvent(event); this.update(); }; getArea () { let area = 0; let j = this.points.length - 1; for (let i = 0; i < this.points.length; i++) { let p1 = this.points[i].position; let p2 = this.points[j].position; area += (p2.x + p1.x) * (p1.y - p2.y); j = i; } return Math.abs(area / 2); }; getTotalDistance () { if (this.points.length === 0) { return 0; } let distance = 0; for (let i = 1; i < this.points.length; i++) { let prev = this.points[i - 1].position; let curr = this.points[i].position; let d = prev.distanceTo(curr); distance += d; } if (this.closed && this.points.length > 1) { let first = this.points[0].position; let last = this.points[this.points.length - 1].position; let d = last.distanceTo(first); distance += d; } return distance; } getAngleBetweenLines (cornerPoint, point1, point2) { let v1 = new Vector3().subVectors(point1.position, cornerPoint.position); let v2 = new Vector3().subVectors(point2.position, cornerPoint.position); // avoid the error printed by threejs if denominator is 0 const denominator = Math.sqrt( v1.lengthSq() * v2.lengthSq() ); if(denominator === 0){ return 0; }else { return v1.angleTo(v2); } }; getAngle (index) { if (this.points.length < 3 || index >= this.points.length) { return 0; } let previous = (index === 0) ? this.points[this.points.length - 1] : this.points[index - 1]; let point = this.points[index]; let next = this.points[(index + 1) % (this.points.length)]; return this.getAngleBetweenLines(point, previous, next); } // updateAzimuth(){ // // if(this.points.length !== 2){ // // return; // // } // // const azimuth = this.azimuth; // // const [p0, p1] = this.points; // // const r = p0.position.distanceTo(p1.position); // } update () { if (this.points.length === 0) { return; } else if (this.points.length === 1) { let point = this.points[0]; let position = point.position; this.spheres[0].position.copy(position); { // coordinate labels let coordinateLabel = this.coordinateLabels[0]; let msg = position.toArray().map(p => Utils.addCommas(p.toFixed(2))).join(" / "); coordinateLabel.setText(msg); coordinateLabel.visible = this.showCoordinates; } return; } let lastIndex = this.points.length - 1; let centroid = new Vector3(); for (let i = 0; i <= lastIndex; i++) { let point = this.points[i]; centroid.add(point.position); } centroid.divideScalar(this.points.length); for (let i = 0; i <= lastIndex; i++) { let index = i; let nextIndex = (i + 1 > lastIndex) ? 0 : i + 1; let previousIndex = (i === 0) ? lastIndex : i - 1; let point = this.points[index]; let nextPoint = this.points[nextIndex]; let previousPoint = this.points[previousIndex]; let sphere = this.spheres[index]; // spheres sphere.position.copy(point.position); sphere.material.color = this.color; { // edges let edge = this.edges[index]; edge.material.color = this.color; edge.position.copy(point.position); edge.geometry.setPositions([ 0, 0, 0, ...nextPoint.position.clone().sub(point.position).toArray(), ]); edge.geometry.verticesNeedUpdate = true; edge.geometry.computeBoundingSphere(); edge.computeLineDistances(); edge.visible = index < lastIndex || this.closed; if(!this.showEdges){ edge.visible = false; } } { // edge labels let edgeLabel = this.edgeLabels[i]; let center = new Vector3().add(point.position); center.add(nextPoint.position); center = center.multiplyScalar(0.5); let distance = point.position.distanceTo(nextPoint.position); edgeLabel.position.copy(center); let suffix = ""; if(this.lengthUnit != null && this.lengthUnitDisplay != null){ distance = distance / this.lengthUnit.unitspermeter * this.lengthUnitDisplay.unitspermeter; //convert to meters then to the display unit suffix = this.lengthUnitDisplay.code; } let txtLength = Utils.addCommas(distance.toFixed(2)); edgeLabel.setText(`${txtLength} ${suffix}`); edgeLabel.visible = this.showDistances && (index < lastIndex || this.closed) && this.points.length >= 2 && distance > 0; } { // angle labels let angleLabel = this.angleLabels[i]; let angle = this.getAngleBetweenLines(point, previousPoint, nextPoint); let dir = nextPoint.position.clone().sub(previousPoint.position); dir.multiplyScalar(0.5); dir = previousPoint.position.clone().add(dir).sub(point.position).normalize(); let dist = Math.min(point.position.distanceTo(previousPoint.position), point.position.distanceTo(nextPoint.position)); dist = dist / 9; let labelPos = point.position.clone().add(dir.multiplyScalar(dist)); angleLabel.position.copy(labelPos); let msg = Utils.addCommas((angle * (180.0 / Math.PI)).toFixed(1)) + '\u00B0'; angleLabel.setText(msg); angleLabel.visible = this.showAngles && (index < lastIndex || this.closed) && this.points.length >= 3 && angle > 0; } } { // update height stuff let heightEdge = this.heightEdge; heightEdge.visible = this.showHeight; this.heightLabel.visible = this.showHeight; if (this.showHeight) { let sorted = this.points.slice().sort((a, b) => a.position.z - b.position.z); let lowPoint = sorted[0].position.clone(); let highPoint = sorted[sorted.length - 1].position.clone(); let min = lowPoint.z; let max = highPoint.z; let height = max - min; let start = new Vector3(highPoint.x, highPoint.y, min); let end = new Vector3(highPoint.x, highPoint.y, max); heightEdge.position.copy(lowPoint); heightEdge.geometry.setPositions([ 0, 0, 0, ...start.clone().sub(lowPoint).toArray(), ...start.clone().sub(lowPoint).toArray(), ...end.clone().sub(lowPoint).toArray(), ]); heightEdge.geometry.verticesNeedUpdate = true; // heightEdge.geometry.computeLineDistances(); // heightEdge.geometry.lineDistancesNeedUpdate = true; heightEdge.geometry.computeBoundingSphere(); heightEdge.computeLineDistances(); // heightEdge.material.dashSize = height / 40; // heightEdge.material.gapSize = height / 40; let heightLabelPosition = start.clone().add(end).multiplyScalar(0.5); this.heightLabel.position.copy(heightLabelPosition); let suffix = ""; if(this.lengthUnit != null && this.lengthUnitDisplay != null){ height = height / this.lengthUnit.unitspermeter * this.lengthUnitDisplay.unitspermeter; //convert to meters then to the display unit suffix = this.lengthUnitDisplay.code; } let txtHeight = Utils.addCommas(height.toFixed(2)); let msg = `${txtHeight} ${suffix}`; this.heightLabel.setText(msg); } } { // update circle stuff const circleRadiusLabel = this.circleRadiusLabel; const circleRadiusLine = this.circleRadiusLine; const circleLine = this.circleLine; const circleCenter = this.circleCenter; const circleOkay = this.points.length === 3; circleRadiusLabel.visible = this.showCircle && circleOkay; circleRadiusLine.visible = this.showCircle && circleOkay; circleLine.visible = this.showCircle && circleOkay; circleCenter.visible = this.showCircle && circleOkay; if(this.showCircle && circleOkay){ const A = this.points[0].position; const B = this.points[1].position; const C = this.points[2].position; const AB = B.clone().sub(A); const AC = C.clone().sub(A); const N = AC.clone().cross(AB).normalize(); const center = Potree.Utils.computeCircleCenter(A, B, C); const radius = center.distanceTo(A); const scale = radius / 20; circleCenter.position.copy(center); circleCenter.scale.set(scale, scale, scale); //circleRadiusLine.geometry.vertices[0].set(0, 0, 0); //circleRadiusLine.geometry.vertices[1].copy(B.clone().sub(center)); circleRadiusLine.geometry.setPositions( [ 0, 0, 0, ...B.clone().sub(center).toArray() ] ); circleRadiusLine.geometry.verticesNeedUpdate = true; circleRadiusLine.geometry.computeBoundingSphere(); circleRadiusLine.position.copy(center); circleRadiusLine.computeLineDistances(); const target = center.clone().add(N); circleLine.position.copy(center); circleLine.scale.set(radius, radius, radius); circleLine.lookAt(target); circleRadiusLabel.visible = true; circleRadiusLabel.position.copy(center.clone().add(B).multiplyScalar(0.5)); circleRadiusLabel.setText(`${radius.toFixed(3)}`); } } { // update area label this.areaLabel.position.copy(centroid); this.areaLabel.visible = this.showArea && this.points.length >= 3; let area = this.getArea(); let suffix = ""; if(this.lengthUnit != null && this.lengthUnitDisplay != null){ area = area / Math.pow(this.lengthUnit.unitspermeter, 2) * Math.pow(this.lengthUnitDisplay.unitspermeter, 2); //convert to square meters then to the square display unit suffix = this.lengthUnitDisplay.code; } let txtArea = Utils.addCommas(area.toFixed(1)); let msg = `${txtArea} ${suffix}\u00B2`; this.areaLabel.setText(msg); } // this.updateAzimuth(); }; raycast (raycaster, intersects) { for (let i = 0; i < this.points.length; i++) { let sphere = this.spheres[i]; sphere.raycast(raycaster, intersects); } // recalculate distances because they are not necessarely correct // for scaled objects. // see https://github.com/mrdoob/three.js/issues/5827 // TODO: remove this once the bug has been fixed for (let i = 0; i < intersects.length; i++) { let I = intersects[i]; I.distance = raycaster.ray.origin.distanceTo(I.point); } intersects.sort(function (a, b) { return a.distance - b.distance; }); }; get showCoordinates () { return this._showCoordinates; } set showCoordinates (value) { this._showCoordinates = value; this.update(); } get showAngles () { return this._showAngles; } set showAngles (value) { this._showAngles = value; this.update(); } get showCircle () { return this._showCircle; } set showCircle (value) { this._showCircle = value; this.update(); } get showAzimuth(){ return this._showAzimuth; } set showAzimuth(value){ this._showAzimuth = value; this.update(); } get showEdges () { return this._showEdges; } set showEdges (value) { this._showEdges = value; this.update(); } get showHeight () { return this._showHeight; } set showHeight (value) { this._showHeight = value; this.update(); } get showArea () { return this._showArea; } set showArea (value) { this._showArea = value; this.update(); } get closed () { return this._closed; } set closed (value) { this._closed = value; this.update(); } get showDistances () { return this._showDistances; } set showDistances (value) { this._showDistances = value; this.update(); } } class PolygonClipVolume extends Object3D{ constructor(camera){ super(); this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; this.name = "polygon_clip_volume_" + this.constructor.counter; this.camera = camera.clone(); this.camera.rotation.set(...camera.rotation.toArray()); // [r85] workaround because camera.clone() doesn't work on rotation this.camera.rotation.order = camera.rotation.order; this.camera.updateMatrixWorld(); this.camera.updateProjectionMatrix(); this.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert(); this.viewMatrix = this.camera.matrixWorldInverse.clone(); this.projMatrix = this.camera.projectionMatrix.clone(); // projected markers this.markers = []; this.initialized = false; } addMarker() { let marker = new Mesh(); let cancel; let drag = e => { let size = e.viewer.renderer.getSize(new Vector2()); let projectedPos = new Vector3( 2.0 * (e.drag.end.x / size.width) - 1.0, -2.0 * (e.drag.end.y / size.height) + 1.0, 0 ); marker.position.copy(projectedPos); }; let drop = e => { cancel(); }; cancel = e => { marker.removeEventListener("drag", drag); marker.removeEventListener("drop", drop); }; marker.addEventListener("drag", drag); marker.addEventListener("drop", drop); this.markers.push(marker); } removeLastMarker() { if(this.markers.length > 0) { this.markers.splice(this.markers.length - 1, 1); } } }; class Utils { static async loadShapefileFeatures (file, callback) { let features = []; let handleFinish = () => { callback(features); }; let source = await shapefile.open(file); while(true){ let result = await source.read(); if (result.done) { handleFinish(); break; } if (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) { features.push(result.value); } } } static toString (value) { if (value.x != null) { return value.x.toFixed(2) + ', ' + value.y.toFixed(2) + ', ' + value.z.toFixed(2); } else { return '' + value + ''; } } static normalizeURL (url) { let u = new URL(url); return u.protocol + '//' + u.hostname + u.pathname.replace(/\/+/g, '/'); }; static pathExists (url) { let req = XHRFactory.createXMLHttpRequest(); req.open('GET', url, false); req.send(null); if (req.status !== 200) { return false; } return true; }; static debugSphere(parent, position, scale, color){ let geometry = new SphereGeometry(1, 8, 8); let material; if(color !== undefined){ material = new MeshBasicMaterial({color: color}); }else { material = new MeshNormalMaterial(); } let sphere = new Mesh(geometry, material); sphere.position.copy(position); sphere.scale.set(scale, scale, scale); parent.add(sphere); return sphere; } static debugLine(parent, start, end, color){ let material = new LineBasicMaterial({ color: color }); let geometry = new Geometry(); const p1 = new Vector3(0, 0, 0); const p2 = end.clone().sub(start); geometry.vertices.push(p1, p2); let tl = new Line( geometry, material ); tl.position.copy(start); parent.add(tl); let line = { node: tl, set: (start, end) => { geometry.vertices[0].copy(start); geometry.vertices[1].copy(end); geometry.verticesNeedUpdate = true; }, }; return line; } static debugCircle(parent, center, radius, normal, color){ let material = new LineBasicMaterial({ color: color }); let geometry = new Geometry(); let n = 32; for(let i = 0; i <= n; i++){ let u0 = 2 * Math.PI * (i / n); let u1 = 2 * Math.PI * (i + 1) / n; let p0 = new Vector3( Math.cos(u0), Math.sin(u0), 0 ); let p1 = new Vector3( Math.cos(u1), Math.sin(u1), 0 ); geometry.vertices.push(p0, p1); } let tl = new Line( geometry, material ); tl.position.copy(center); tl.scale.set(radius, radius, radius); parent.add(tl); } static debugBox(parent, box, transform = new Matrix4(), color = 0xFFFF00){ let vertices = [ [box.min.x, box.min.y, box.min.z], [box.min.x, box.min.y, box.max.z], [box.min.x, box.max.y, box.min.z], [box.min.x, box.max.y, box.max.z], [box.max.x, box.min.y, box.min.z], [box.max.x, box.min.y, box.max.z], [box.max.x, box.max.y, box.min.z], [box.max.x, box.max.y, box.max.z], ].map(v => new Vector3(...v)); let edges = [ [0, 4], [4, 5], [5, 1], [1, 0], [2, 6], [6, 7], [7, 3], [3, 2], [0, 2], [4, 6], [5, 7], [1, 3] ]; let center = box.getCenter(new Vector3()); let centroids = [ {position: [box.min.x, center.y, center.z], color: 0xFF0000}, {position: [box.max.x, center.y, center.z], color: 0x880000}, {position: [center.x, box.min.y, center.z], color: 0x00FF00}, {position: [center.x, box.max.y, center.z], color: 0x008800}, {position: [center.x, center.y, box.min.z], color: 0x0000FF}, {position: [center.x, center.y, box.max.z], color: 0x000088}, ]; for(let vertex of vertices){ let pos = vertex.clone().applyMatrix4(transform); Utils.debugSphere(parent, pos, 0.1, 0xFF0000); } for(let edge of edges){ let start = vertices[edge[0]].clone().applyMatrix4(transform); let end = vertices[edge[1]].clone().applyMatrix4(transform); Utils.debugLine(parent, start, end, color); } for(let centroid of centroids){ let pos = new Vector3(...centroid.position).applyMatrix4(transform); Utils.debugSphere(parent, pos, 0.1, centroid.color); } } static debugPlane(parent, plane, size = 1, color = 0x0000FF){ let planehelper = new PlaneHelper(plane, size, color); parent.add(planehelper); } /** * adapted from mhluska at https://github.com/mrdoob/three.js/issues/1561 */ static computeTransformedBoundingBox (box, transform) { let vertices = [ new Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform), new Vector3(box.min.x, box.min.y, box.min.z).applyMatrix4(transform), new Vector3(box.max.x, box.min.y, box.min.z).applyMatrix4(transform), new Vector3(box.min.x, box.max.y, box.min.z).applyMatrix4(transform), new Vector3(box.min.x, box.min.y, box.max.z).applyMatrix4(transform), new Vector3(box.min.x, box.max.y, box.max.z).applyMatrix4(transform), new Vector3(box.max.x, box.max.y, box.min.z).applyMatrix4(transform), new Vector3(box.max.x, box.min.y, box.max.z).applyMatrix4(transform), new Vector3(box.max.x, box.max.y, box.max.z).applyMatrix4(transform) ]; let boundingBox = new Box3(); boundingBox.setFromPoints(vertices); return boundingBox; }; /** * add separators to large numbers * * @param nStr * @returns */ static addCommas (nStr) { nStr += ''; let x = nStr.split('.'); let x1 = x[0]; let x2 = x.length > 1 ? '.' + x[1] : ''; let rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; }; static removeCommas (str) { return str.replace(/,/g, ''); } /** * create worker from a string * * code from http://stackoverflow.com/questions/10343913/how-to-create-a-web-worker-from-a-string */ static createWorker (code) { let blob = new Blob([code], {type: 'application/javascript'}); let worker = new Worker(URL.createObjectURL(blob)); return worker; }; static moveTo(scene, endPosition, endTarget){ let view = scene.view; let camera = scene.getActiveCamera(); let animationDuration = 500; let easing = TWEEN.Easing.Quartic.Out; { // animate camera position let tween = new TWEEN.Tween(view.position).to(endPosition, animationDuration); tween.easing(easing); tween.start(); } { // animate camera target let camTargetDistance = camera.position.distanceTo(endTarget); let target = new Vector3().addVectors( camera.position, camera.getWorldDirection(new Vector3()).clone().multiplyScalar(camTargetDistance) ); let tween = new TWEEN.Tween(target).to(endTarget, animationDuration); tween.easing(easing); tween.onUpdate(() => { view.lookAt(target); }); tween.onComplete(() => { view.lookAt(target); }); tween.start(); } } static loadSkybox (path) { let parent = new Object3D("skybox_root"); let camera = new PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 100000); camera.up.set(0, 0, 1); let scene = new Scene(); let format = '.jpg'; let urls = [ path + 'px' + format, path + 'nx' + format, path + 'py' + format, path + 'ny' + format, path + 'pz' + format, path + 'nz' + format ]; let materialArray = []; { for (let i = 0; i < 6; i++) { let material = new MeshBasicMaterial({ map: null, side: BackSide, depthTest: false, depthWrite: false, color: 0x424556 }); materialArray.push(material); let loader = new TextureLoader(); loader.load(urls[i], function loaded (texture) { material.map = texture; material.needsUpdate = true; material.color.setHex(0xffffff); }, function progress (xhr) { // console.log( (xhr.loaded / xhr.total * 100) + '% loaded' ); }, function error (xhr) { console.log('An error happened', xhr); } ); } } let skyGeometry = new BoxGeometry(700, 700, 700); let skybox = new Mesh(skyGeometry, materialArray); scene.add(skybox); scene.traverse(n => n.frustumCulled = false); // z up scene.rotation.x = Math.PI / 2; parent.children.push(camera); camera.parent = parent; return {camera, scene, parent}; }; static createGrid (width, length, spacing, color) { let material = new LineBasicMaterial({ color: color || 0x888888 }); let geometry = new Geometry(); for (let i = 0; i <= length; i++) { geometry.vertices.push(new Vector3(-(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0)); geometry.vertices.push(new Vector3(+(spacing * width) / 2, i * spacing - (spacing * length) / 2, 0)); } for (let i = 0; i <= width; i++) { geometry.vertices.push(new Vector3(i * spacing - (spacing * width) / 2, -(spacing * length) / 2, 0)); geometry.vertices.push(new Vector3(i * spacing - (spacing * width) / 2, +(spacing * length) / 2, 0)); } let line = new LineSegments(geometry, material, LinePieces); line.receiveShadow = true; return line; } static createBackgroundTexture (width, height) { function gauss (x, y) { return (1 / (2 * Math.PI)) * Math.exp(-(x * x + y * y) / 2); }; // map.magFilter = THREE.NearestFilter; let size = width * height; let data = new Uint8Array(3 * size); let chroma = [1, 1.5, 1.7]; let max = gauss(0, 0); for (let x = 0; x < width; x++) { for (let y = 0; y < height; y++) { let u = 2 * (x / width) - 1; let v = 2 * (y / height) - 1; let i = x + width * y; let d = gauss(2 * u, 2 * v) / max; let r = (Math.random() + Math.random() + Math.random()) / 3; r = (d * 0.5 + 0.5) * r * 0.03; r = r * 0.4; // d = Math.pow(d, 0.6); data[3 * i + 0] = 255 * (d / 15 + 0.05 + r) * chroma[0]; data[3 * i + 1] = 255 * (d / 15 + 0.05 + r) * chroma[1]; data[3 * i + 2] = 255 * (d / 15 + 0.05 + r) * chroma[2]; } } let texture = new DataTexture(data, width, height, RGBFormat); texture.needsUpdate = true; return texture; } static getMousePointCloudIntersection (mouse, camera, viewer, pointclouds, params = {}) { let renderer = viewer.renderer; let nmouse = { x: (mouse.x / renderer.domElement.clientWidth) * 2 - 1, y: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1 }; let pickParams = {}; if(params.pickClipped){ pickParams.pickClipped = params.pickClipped; } pickParams.x = mouse.x; pickParams.y = renderer.domElement.clientHeight - mouse.y; let raycaster = new Raycaster(); raycaster.setFromCamera(nmouse, camera); let ray = raycaster.ray; let selectedPointcloud = null; let closestDistance = Infinity; let closestIntersection = null; let closestPoint = null; for(let pointcloud of pointclouds){ let point = pointcloud.pick(viewer, camera, ray, pickParams); if(!point){ continue; } let distance = camera.position.distanceTo(point.position); if (distance < closestDistance) { closestDistance = distance; selectedPointcloud = pointcloud; closestIntersection = point.position; closestPoint = point; } } if (selectedPointcloud) { return { location: closestIntersection, distance: closestDistance, pointcloud: selectedPointcloud, point: closestPoint }; } else { return null; } } static pixelsArrayToImage (pixels, width, height) { let canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; let context = canvas.getContext('2d'); pixels = new pixels.constructor(pixels); for (let i = 0; i < pixels.length; i++) { pixels[i * 4 + 3] = 255; } let imageData = context.createImageData(width, height); imageData.data.set(pixels); context.putImageData(imageData, 0, 0); let img = new Image(); img.src = canvas.toDataURL(); // img.style.transform = "scaleY(-1)"; return img; } static pixelsArrayToDataUrl(pixels, width, height) { let canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; let context = canvas.getContext('2d'); pixels = new pixels.constructor(pixels); for (let i = 0; i < pixels.length; i++) { pixels[i * 4 + 3] = 255; } let imageData = context.createImageData(width, height); imageData.data.set(pixels); context.putImageData(imageData, 0, 0); let dataURL = canvas.toDataURL(); return dataURL; } static pixelsArrayToCanvas(pixels, width, height){ let canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; let context = canvas.getContext('2d'); pixels = new pixels.constructor(pixels); //for (let i = 0; i < pixels.length; i++) { // pixels[i * 4 + 3] = 255; //} // flip vertically let bytesPerLine = width * 4; for(let i = 0; i < parseInt(height / 2); i++){ let j = height - i - 1; let lineI = pixels.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine); let lineJ = pixels.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine); pixels.set(lineJ, i * bytesPerLine); pixels.set(lineI, j * bytesPerLine); } let imageData = context.createImageData(width, height); imageData.data.set(pixels); context.putImageData(imageData, 0, 0); return canvas; } static removeListeners(dispatcher, type){ if (dispatcher._listeners === undefined) { return; } if (dispatcher._listeners[ type ]) { delete dispatcher._listeners[ type ]; } } static mouseToRay(mouse, camera, width, height){ let normalizedMouse = { x: (mouse.x / width) * 2 - 1, y: -(mouse.y / height) * 2 + 1 }; let vector = new Vector3(normalizedMouse.x, normalizedMouse.y, 0.5); let origin = camera.position.clone(); vector.unproject(camera); let direction = new Vector3().subVectors(vector, origin).normalize(); let ray = new Ray(origin, direction); return ray; } static projectedRadius(radius, camera, distance, screenWidth, screenHeight){ if(camera instanceof OrthographicCamera){ return Utils.projectedRadiusOrtho(radius, camera.projectionMatrix, screenWidth, screenHeight); }else if(camera instanceof PerspectiveCamera){ return Utils.projectedRadiusPerspective(radius, camera.fov * Math.PI / 180, distance, screenHeight); }else { throw new Error("invalid parameters"); } } static projectedRadiusPerspective(radius, fov, distance, screenHeight) { let projFactor = (1 / Math.tan(fov / 2)) / distance; projFactor = projFactor * screenHeight / 2; return radius * projFactor; } static projectedRadiusOrtho(radius, proj, screenWidth, screenHeight) { let p1 = new Vector4(0); let p2 = new Vector4(radius); p1.applyMatrix4(proj); p2.applyMatrix4(proj); p1 = new Vector3(p1.x, p1.y, p1.z); p2 = new Vector3(p2.x, p2.y, p2.z); p1.x = (p1.x + 1.0) * 0.5 * screenWidth; p1.y = (p1.y + 1.0) * 0.5 * screenHeight; p2.x = (p2.x + 1.0) * 0.5 * screenWidth; p2.y = (p2.y + 1.0) * 0.5 * screenHeight; return p1.distanceTo(p2); } static topView(camera, node){ camera.position.set(0, 1, 0); camera.rotation.set(-Math.PI / 2, 0, 0); camera.zoomTo(node, 1); } static frontView (camera, node) { camera.position.set(0, 0, 1); camera.rotation.set(0, 0, 0); camera.zoomTo(node, 1); } static leftView (camera, node) { camera.position.set(-1, 0, 0); camera.rotation.set(0, -Math.PI / 2, 0); camera.zoomTo(node, 1); } static rightView (camera, node) { camera.position.set(1, 0, 0); camera.rotation.set(0, Math.PI / 2, 0); camera.zoomTo(node, 1); } static findClosestGpsTime(target, viewer){ const start = performance.now(); const nodes = []; for(const pc of viewer.scene.pointclouds){ nodes.push(pc.root); for(const child of pc.root.children){ if(child){ nodes.push(child); } } } let closestNode = null; let closestIndex = Infinity; let closestDistance = Infinity; let closestValue = 0; for(const node of nodes){ const isOkay = node.geometryNode != null && node.geometryNode.geometry != null && node.sceneNode != null; if(!isOkay){ continue; } let geometry = node.geometryNode.geometry; let gpsTime = geometry.attributes["gps-time"]; let range = gpsTime.potree.range; for(let i = 0; i < gpsTime.array.length; i++){ let value = gpsTime.array[i]; value = value * (range[1] - range[0]) + range[0]; const distance = Math.abs(target - value); if(distance < closestDistance){ closestIndex = i; closestDistance = distance; closestValue = value; closestNode = node; //console.log("found a closer one: " + value); } } } const geometry = closestNode.geometryNode.geometry; const position = new Vector3( geometry.attributes.position.array[3 * closestIndex + 0], geometry.attributes.position.array[3 * closestIndex + 1], geometry.attributes.position.array[3 * closestIndex + 2], ); position.applyMatrix4(closestNode.sceneNode.matrixWorld); const end = performance.now(); const duration = (end - start); console.log(`duration: ${duration.toFixed(3)}ms`); return { node: closestNode, index: closestIndex, position: position, }; } /** * * 0: no intersection * 1: intersection * 2: fully inside */ static frustumSphereIntersection (frustum, sphere) { let planes = frustum.planes; let center = sphere.center; let negRadius = -sphere.radius; let minDistance = Number.MAX_VALUE; for (let i = 0; i < 6; i++) { let distance = planes[ i ].distanceToPoint(center); if (distance < negRadius) { return 0; } minDistance = Math.min(minDistance, distance); } return (minDistance >= sphere.radius) ? 2 : 1; } // code taken from three.js // ImageUtils - generateDataTexture() static generateDataTexture (width, height, color) { let size = width * height; let data = new Uint8Array(4 * width * height); let r = Math.floor(color.r * 255); let g = Math.floor(color.g * 255); let b = Math.floor(color.b * 255); for (let i = 0; i < size; i++) { data[ i * 3 ] = r; data[ i * 3 + 1 ] = g; data[ i * 3 + 2 ] = b; } let texture = new DataTexture(data, width, height, RGBAFormat); texture.needsUpdate = true; texture.magFilter = NearestFilter; return texture; } // from http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript static getParameterByName (name) { name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]'); let regex = new RegExp('[\\?&]' + name + '=([^&#]*)'); let results = regex.exec(document.location.search); return results === null ? null : decodeURIComponent(results[1].replace(/\+/g, ' ')); } static setParameter (name, value) { // value = encodeURIComponent(value); name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]'); let regex = new RegExp('([\\?&])(' + name + '=([^&#]*))'); let results = regex.exec(document.location.search); let url = window.location.href; if (results === null) { if (window.location.search.length === 0) { url = url + '?'; } else { url = url + '&'; } url = url + name + '=' + value; } else { let newValue = name + '=' + value; url = url.replace(results[2], newValue); } window.history.replaceState({}, '', url); } static createChildAABB(aabb, index){ let min = aabb.min.clone(); let max = aabb.max.clone(); let size = new Vector3().subVectors(max, min); if ((index & 0b0001) > 0) { min.z += size.z / 2; } else { max.z -= size.z / 2; } if ((index & 0b0010) > 0) { min.y += size.y / 2; } else { max.y -= size.y / 2; } if ((index & 0b0100) > 0) { min.x += size.x / 2; } else { max.x -= size.x / 2; } return new Box3(min, max); } // see https://stackoverflow.com/questions/400212/how-do-i-copy-to-the-clipboard-in-javascript static clipboardCopy(text){ let textArea = document.createElement("textarea"); textArea.style.position = 'fixed'; textArea.style.top = 0; textArea.style.left = 0; textArea.style.width = '2em'; textArea.style.height = '2em'; textArea.style.padding = 0; textArea.style.border = 'none'; textArea.style.outline = 'none'; textArea.style.boxShadow = 'none'; textArea.style.background = 'transparent'; textArea.value = text; document.body.appendChild(textArea); textArea.select(); try { let success = document.execCommand('copy'); if(success){ console.log("copied text to clipboard"); }else { console.log("copy to clipboard failed"); } } catch (err) { console.log("error while trying to copy to clipboard"); } document.body.removeChild(textArea); } static getMeasurementIcon(measurement){ if (measurement instanceof Measure) { if (measurement.showDistances && !measurement.showArea && !measurement.showAngles) { return `${Potree.resourcePath}/icons/distance.svg`; } else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) { return `${Potree.resourcePath}/icons/area.svg`; } else if (measurement.maxMarkers === 1) { return `${Potree.resourcePath}/icons/point.svg`; } else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) { return `${Potree.resourcePath}/icons/angle.png`; } else if (measurement.showHeight) { return `${Potree.resourcePath}/icons/height.svg`; } else { return `${Potree.resourcePath}/icons/distance.svg`; } } else if (measurement instanceof Profile) { return `${Potree.resourcePath}/icons/profile.svg`; } else if (measurement instanceof Volume) { return `${Potree.resourcePath}/icons/volume.svg`; } else if (measurement instanceof PolygonClipVolume) { return `${Potree.resourcePath}/icons/clip-polygon.svg`; } } static lineToLineIntersection(P0, P1, P2, P3){ const P = [P0, P1, P2, P3]; const d = (m, n, o, p) => { let result = (P[m].x - P[n].x) * (P[o].x - P[p].x) + (P[m].y - P[n].y) * (P[o].y - P[p].y) + (P[m].z - P[n].z) * (P[o].z - P[p].z); return result; }; const mua = (d(0, 2, 3, 2) * d(3, 2, 1, 0) - d(0, 2, 1, 0) * d(3, 2, 3, 2)) /**-----------------------------------------------------------------**/ / (d(1, 0, 1, 0) * d(3, 2, 3, 2) - d(3, 2, 1, 0) * d(3, 2, 1, 0)); const mub = (d(0, 2, 3, 2) + mua * d(3, 2, 1, 0)) /**--------------------------------------**/ / d(3, 2, 3, 2); const P01 = P1.clone().sub(P0); const P23 = P3.clone().sub(P2); const Pa = P0.clone().add(P01.multiplyScalar(mua)); const Pb = P2.clone().add(P23.multiplyScalar(mub)); const center = Pa.clone().add(Pb).multiplyScalar(0.5); return center; } static computeCircleCenter(A, B, C){ const AB = B.clone().sub(A); const AC = C.clone().sub(A); const N = AC.clone().cross(AB).normalize(); const ab_dir = AB.clone().cross(N).normalize(); const ac_dir = AC.clone().cross(N).normalize(); const ab_origin = A.clone().add(B).multiplyScalar(0.5); const ac_origin = A.clone().add(C).multiplyScalar(0.5); const P0 = ab_origin; const P1 = ab_origin.clone().add(ab_dir); const P2 = ac_origin; const P3 = ac_origin.clone().add(ac_dir); const center = Utils.lineToLineIntersection(P0, P1, P2, P3); return center; // Potree.Utils.debugLine(viewer.scene.scene, P0, P1, 0x00ff00); // Potree.Utils.debugLine(viewer.scene.scene, P2, P3, 0x0000ff); // Potree.Utils.debugSphere(viewer.scene.scene, center, 0.03, 0xff00ff); // const radius = center.distanceTo(A); // Potree.Utils.debugCircle(viewer.scene.scene, center, radius, new THREE.Vector3(0, 0, 1), 0xff00ff); } static getNorthVec(p1, distance, projection){ if(projection){ // if there is a projection, transform coordinates to WGS84 // and compute angle to north there proj4.defs("pointcloud", projection); const transform = proj4("pointcloud", "WGS84"); const llP1 = transform.forward(p1.toArray()); let llP2 = transform.forward([p1.x, p1.y + distance]); const polarRadius = Math.sqrt((llP2[0] - llP1[0]) ** 2 + (llP2[1] - llP1[1]) ** 2); llP2 = [llP1[0], llP1[1] + polarRadius]; const northVec = transform.inverse(llP2); return new Vector3(...northVec, p1.z).sub(p1); }else { // if there is no projection, assume [0, 1, 0] as north direction const vec = new Vector3(0, 1, 0).multiplyScalar(distance); return vec; } } static computeAzimuth(p1, p2, projection){ let azimuth = 0; if(projection){ // if there is a projection, transform coordinates to WGS84 // and compute angle to north there let transform; if (projection.includes('EPSG')) { transform = proj4(projection, "WGS84"); } else { proj4.defs("pointcloud", projection); transform = proj4("pointcloud", "WGS84"); } const llP1 = transform.forward(p1.toArray()); const llP2 = transform.forward(p2.toArray()); const dir = [ llP2[0] - llP1[0], llP2[1] - llP1[1], ]; azimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2; }else { // if there is no projection, assume [0, 1, 0] as north direction const dir = [p2.x - p1.x, p2.y - p1.y]; azimuth = Math.atan2(dir[1], dir[0]) - Math.PI / 2; } // make clockwise azimuth = -azimuth; return azimuth; } static async loadScript(url){ return new Promise( resolve => { const element = document.getElementById(url); if(element){ resolve(); }else { const script = document.createElement("script"); script.id = url; script.onload = () => { resolve(); }; script.src = url; document.body.appendChild(script); } }); } static createSvgGradient(scheme){ // this is what we are creating: // // // // // // ... // // // // // // const gradientId = `${Math.random()}_${Date.now()}`; const svgn = "http://www.w3.org/2000/svg"; const svg = document.createElementNS(svgn, "svg"); svg.setAttributeNS(null, "width", "2em"); svg.setAttributeNS(null, "height", "3em"); { // const defs = document.createElementNS(svgn, "defs"); const linearGradient = document.createElementNS(svgn, "linearGradient"); linearGradient.setAttributeNS(null, "id", gradientId); linearGradient.setAttributeNS(null, "gradientTransform", "rotate(90)"); for(let i = scheme.length - 1; i >= 0; i--){ const stopVal = scheme[i]; const percent = parseInt(100 - stopVal[0] * 100); const [r, g, b] = stopVal[1].toArray().map(v => parseInt(v * 255)); const stop = document.createElementNS(svgn, "stop"); stop.setAttributeNS(null, "offset", `${percent}%`); stop.setAttributeNS(null, "stop-color", `rgb(${r}, ${g}, ${b})`); linearGradient.appendChild(stop); } defs.appendChild(linearGradient); svg.appendChild(defs); } const rect = document.createElementNS(svgn, "rect"); rect.setAttributeNS(null, "width", `100%`); rect.setAttributeNS(null, "height", `100%`); rect.setAttributeNS(null, "fill", `url("#${gradientId}")`); rect.setAttributeNS(null, "stroke", `black`); rect.setAttributeNS(null, "stroke-width", `0.1em`); svg.appendChild(rect); return svg; } static async waitAny(promises){ return new Promise( (resolve) => { promises.map( promise => { promise.then( () => { resolve(); }); }); }); } } Utils.screenPass = new function () { this.screenScene = new Scene(); this.screenQuad = new Mesh(new PlaneBufferGeometry(2, 2, 1)); this.screenQuad.material.depthTest = true; this.screenQuad.material.depthWrite = true; this.screenQuad.material.transparent = true; this.screenScene.add(this.screenQuad); this.camera = new Camera(); this.render = function (renderer, material, target) { this.screenQuad.material = material; if (typeof target === 'undefined') { renderer.render(this.screenScene, this.camera); } else { renderer.render(this.screenScene, this.camera, target); } }; }(); class Annotation extends EventDispatcher { constructor (args = {}) { super(); this.scene = null; this._title = args.title || 'No Title'; this._description = args.description || ''; this.offset = new Vector3(); this.uuid = MathUtils.generateUUID(); if (!args.position) { this.position = null; } else if (args.position.x != null) { this.position = args.position; } else { this.position = new Vector3(...args.position); } this.cameraPosition = (args.cameraPosition instanceof Array) ? new Vector3().fromArray(args.cameraPosition) : args.cameraPosition; this.cameraTarget = (args.cameraTarget instanceof Array) ? new Vector3().fromArray(args.cameraTarget) : args.cameraTarget; this.radius = args.radius; this.view = args.view || null; this.keepOpen = false; this.descriptionVisible = false; this.showDescription = true; this.actions = args.actions || []; this.isHighlighted = false; this._visible = true; this.__visible = true; this._display = true; this._expand = false; this.collapseThreshold = [args.collapseThreshold, 100].find(e => e !== undefined); this.children = []; this.parent = null; this.boundingBox = new Box3(); let iconClose = exports.resourcePath + '/icons/close.svg'; this.domElement = $(`
      ${this._description}
      `); this.elTitlebar = this.domElement.find('.annotation-titlebar'); this.elTitle = this.elTitlebar.find('.annotation-label'); this.elTitle.append(this._title); this.elDescription = this.domElement.find('.annotation-description'); this.elDescriptionClose = this.elDescription.find('.annotation-description-close'); // this.elDescriptionContent = this.elDescription.find(".annotation-description-content"); this.clickTitle = () => { if(this.hasView()){ this.moveHere(this.scene.getActiveCamera()); } this.dispatchEvent({type: 'click', target: this}); }; this.elTitle.click(this.clickTitle); this.actions = this.actions.map(a => { if (a instanceof Action) { return a; } else { return new Action(a); } }); for (let action of this.actions) { action.pairWith(this); } let actions = this.actions.filter( a => a.showIn === undefined || a.showIn.includes('scene')); for (let action of actions) { let elButton = $(``); this.elTitlebar.append(elButton); elButton.click(() => action.onclick({annotation: this})); } this.elDescriptionClose.hover( e => this.elDescriptionClose.css('opacity', '1'), e => this.elDescriptionClose.css('opacity', '0.5') ); this.elDescriptionClose.click(e => this.setHighlighted(false)); // this.elDescriptionContent.html(this._description); this.domElement.mouseenter(e => this.setHighlighted(true)); this.domElement.mouseleave(e => this.setHighlighted(false)); this.domElement.on('touchstart', e => { this.setHighlighted(!this.isHighlighted); }); this.display = false; //this.display = true; } installHandles(viewer){ if(this.handles !== undefined){ return; } let domElement = $(`
      `); let svg = domElement.find("svg")[0]; let elLine = domElement.find("line")[0]; let elStart = domElement.find("circle")[0]; let elEnd = domElement.find("circle")[1]; let setCoordinates = (start, end) => { elStart.setAttribute("cx", `${start.x}`); elStart.setAttribute("cy", `${start.y}`); elEnd.setAttribute("cx", `${end.x}`); elEnd.setAttribute("cy", `${end.y}`); elLine.setAttribute("x1", start.x); elLine.setAttribute("y1", start.y); elLine.setAttribute("x2", end.x); elLine.setAttribute("y2", end.y); let box = svg.getBBox(); svg.setAttribute("width", `${box.width}`); svg.setAttribute("height", `${box.height}`); svg.setAttribute("viewBox", `${box.x} ${box.y} ${box.width} ${box.height}`); let ya = start.y - end.y; let xa = start.x - end.x; if(ya > 0){ start.y = start.y - ya; } if(xa > 0){ start.x = start.x - xa; } domElement.css("left", `${start.x}px`); domElement.css("top", `${start.y}px`); }; $(viewer.renderArea).append(domElement); let annotationStartPos = this.position.clone(); let annotationStartOffset = this.offset.clone(); $(this.domElement).draggable({ start: (event, ui) => { annotationStartPos = this.position.clone(); annotationStartOffset = this.offset.clone(); $(this.domElement).find(".annotation-titlebar").css("pointer-events", "none"); console.log($(this.domElement).find(".annotation-titlebar")); }, stop: () => { $(this.domElement).find(".annotation-titlebar").css("pointer-events", ""); }, drag: (event, ui ) => { let renderAreaWidth = viewer.renderer.getSize(new Vector2()).width; //let renderAreaHeight = viewer.renderer.getSize().height; let diff = { x: ui.originalPosition.left - ui.position.left, y: ui.originalPosition.top - ui.position.top }; let nDiff = { x: -(diff.x / renderAreaWidth) * 2, y: (diff.y / renderAreaWidth) * 2 }; let camera = viewer.scene.getActiveCamera(); let oldScreenPos = new Vector3() .addVectors(annotationStartPos, annotationStartOffset) .project(camera); let newScreenPos = oldScreenPos.clone(); newScreenPos.x += nDiff.x; newScreenPos.y += nDiff.y; let newPos = newScreenPos.clone(); newPos.unproject(camera); let newOffset = new Vector3().subVectors(newPos, this.position); this.offset.copy(newOffset); } }); let updateCallback = () => { let position = this.position; let scene = viewer.scene; const renderAreaSize = viewer.renderer.getSize(new Vector2()); let renderAreaWidth = renderAreaSize.width; let renderAreaHeight = renderAreaSize.height; let start = this.position.clone(); let end = new Vector3().addVectors(this.position, this.offset); let toScreen = (position) => { let camera = scene.getActiveCamera(); let screenPos = new Vector3(); let worldView = new Matrix4().multiplyMatrices(camera.projectionMatrix, camera.matrixWorldInverse); let ndc = new Vector4(position.x, position.y, position.z, 1.0).applyMatrix4(worldView); // limit w to small positive value, in case position is behind the camera ndc.w = Math.max(ndc.w, 0.1); ndc.divideScalar(ndc.w); screenPos.copy(ndc); screenPos.x = renderAreaWidth * (screenPos.x + 1) / 2; screenPos.y = renderAreaHeight * (1 - (screenPos.y + 1) / 2); return screenPos; }; start = toScreen(start); end = toScreen(end); setCoordinates(start, end); }; viewer.addEventListener("update", updateCallback); this.handles = { domElement: domElement, setCoordinates: setCoordinates, updateCallback: updateCallback }; } removeHandles(viewer){ if(this.handles === undefined){ return; } //$(viewer.renderArea).remove(this.handles.domElement); this.handles.domElement.remove(); viewer.removeEventListener("update", this.handles.updateCallback); delete this.handles; } get visible () { return this._visible; } set visible (value) { if (this._visible === value) { return; } this._visible = value; //this.traverse(node => { // node.display = value; //}); this.dispatchEvent({ type: 'visibility_changed', annotation: this }); } get display () { return this._display; } set display (display) { if (this._display === display) { return; } this._display = display; if (display) { // this.domElement.fadeIn(200); this.domElement.show(); } else { // this.domElement.fadeOut(200); this.domElement.hide(); } } get expand () { return this._expand; } set expand (expand) { if (this._expand === expand) { return; } if (expand) { this.display = false; } else { this.display = true; this.traverseDescendants(node => { node.display = false; }); } this._expand = expand; } get title () { return this._title; } set title (title) { if (this._title === title) { return; } this._title = title; this.elTitle.empty(); this.elTitle.append(this._title); this.dispatchEvent({ type: "annotation_changed", annotation: this, }); } get description () { return this._description; } set description (description) { if (this._description === description) { return; } this._description = description; const elDescriptionContent = this.elDescription.find(".annotation-description-content"); elDescriptionContent.empty(); elDescriptionContent.append(this._description); this.dispatchEvent({ type: "annotation_changed", annotation: this, }); } add (annotation) { if (!this.children.includes(annotation)) { this.children.push(annotation); annotation.parent = this; let descendants = []; annotation.traverse(a => { descendants.push(a); }); for (let descendant of descendants) { let c = this; while (c !== null) { c.dispatchEvent({ 'type': 'annotation_added', 'annotation': descendant }); c = c.parent; } } } } level () { if (this.parent === null) { return 0; } else { return this.parent.level() + 1; } } hasChild(annotation) { return this.children.includes(annotation); } remove (annotation) { if (this.hasChild(annotation)) { annotation.removeAllChildren(); annotation.dispose(); this.children = this.children.filter(e => e !== annotation); annotation.parent = null; } } removeAllChildren() { this.children.forEach((child) => { if (child.children.length > 0) { child.removeAllChildren(); } this.remove(child); }); } updateBounds () { let box = new Box3(); if (this.position) { box.expandByPoint(this.position); } for (let child of this.children) { child.updateBounds(); box.union(child.boundingBox); } this.boundingBox.copy(box); } traverse (handler) { let expand = handler(this); if (expand === undefined || expand === true) { for (let child of this.children) { child.traverse(handler); } } } traverseDescendants (handler) { for (let child of this.children) { child.traverse(handler); } } flatten () { let annotations = []; this.traverse(annotation => { annotations.push(annotation); }); return annotations; } descendants () { let annotations = []; this.traverse(annotation => { if (annotation !== this) { annotations.push(annotation); } }); return annotations; } setHighlighted (highlighted) { if (highlighted) { this.domElement.css('opacity', '0.8'); this.elTitlebar.css('box-shadow', '0 0 5px #fff'); this.domElement.css('z-index', '1000'); if (this._description) { this.descriptionVisible = true; this.elDescription.fadeIn(200); this.elDescription.css('position', 'relative'); } } else { this.domElement.css('opacity', '0.5'); this.elTitlebar.css('box-shadow', ''); this.domElement.css('z-index', '100'); this.descriptionVisible = false; this.elDescription.css('display', 'none'); } this.isHighlighted = highlighted; } hasView () { let hasPosTargetView = this.cameraTarget.x != null; hasPosTargetView = hasPosTargetView && this.cameraPosition.x != null; let hasRadiusView = this.radius !== undefined; let hasView = hasPosTargetView || hasRadiusView; return hasView; }; moveHere (camera) { if (!this.hasView()) { return; } let view = this.scene.view; let animationDuration = 500; let easing = TWEEN.Easing.Quartic.Out; let endTarget; if (this.cameraTarget) { endTarget = this.cameraTarget; } else if (this.position) { endTarget = this.position; } else { endTarget = this.boundingBox.getCenter(new Vector3()); } if (this.cameraPosition) { let endPosition = this.cameraPosition; Utils.moveTo(this.scene, endPosition, endTarget); } else if (this.radius) { let direction = view.direction; let endPosition = endTarget.clone().add(direction.multiplyScalar(-this.radius)); let startRadius = view.radius; let endRadius = this.radius; { // animate camera position let tween = new TWEEN.Tween(view.position).to(endPosition, animationDuration); tween.easing(easing); tween.start(); } { // animate radius let t = {x: 0}; let tween = new TWEEN.Tween(t) .to({x: 1}, animationDuration) .onUpdate(function () { view.radius = this.x * endRadius + (1 - this.x) * startRadius; }); tween.easing(easing); tween.start(); } } }; dispose () { if (this.domElement.parentElement) { this.domElement.parentElement.removeChild(this.domElement); } }; toString () { return 'Annotation: ' + this._title; } }; class EnumItem{ constructor(object){ for(let key of Object.keys(object)){ this[key] = object[key]; } } inspect(){ return `Enum(${this.name}: ${this.value})`; } }; class Enum{ constructor(object){ this.object = object; for(let key of Object.keys(object)){ let value = object[key]; if(typeof value === "object"){ value.name = key; }else { value = {name: key, value: value}; } this[key] = new EnumItem(value); } } fromValue(value){ for(let key of Object.keys(this.object)){ if(this[key].value === value){ return this[key]; } } throw new Error(`No enum for value: ${value}`); } }; const CameraMode = { ORTHOGRAPHIC: 0, PERSPECTIVE: 1, VR: 2, }; const ClipTask = { NONE: 0, HIGHLIGHT: 1, SHOW_INSIDE: 2, SHOW_OUTSIDE: 3 }; const ClipMethod = { INSIDE_ANY: 0, INSIDE_ALL: 1 }; const ElevationGradientRepeat = { CLAMP: 0, REPEAT: 1, MIRRORED_REPEAT: 2, }; const MOUSE$1 = { LEFT: 0b0001, RIGHT: 0b0010, MIDDLE: 0b0100 }; const PointSizeType = { FIXED: 0, ATTENUATED: 1, ADAPTIVE: 2 }; const PointShape = { SQUARE: 0, CIRCLE: 1, PARABOLOID: 2 }; const TreeType = { OCTREE: 0, KDTREE: 1 }; const LengthUnits = { METER: {code: 'm', unitspermeter: 1.0}, FEET: {code: 'ft', unitspermeter: 3.28084}, INCH: {code: '\u2033', unitspermeter: 39.3701} }; let ftCanvas = document.createElement('canvas'); const Features = (function () { let gl = ftCanvas.getContext('webgl') || ftCanvas.getContext('experimental-webgl'); if (gl === null){ return null; } // -- code taken from THREE.WebGLRenderer -- let _vertexShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.HIGH_FLOAT); let _vertexShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.MEDIUM_FLOAT); // Unused: let _vertexShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.VERTEX_SHADER, gl.LOW_FLOAT); let _fragmentShaderPrecisionHighpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.HIGH_FLOAT); let _fragmentShaderPrecisionMediumpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT); // Unused: let _fragmentShaderPrecisionLowpFloat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT); let highpAvailable = _vertexShaderPrecisionHighpFloat.precision > 0 && _fragmentShaderPrecisionHighpFloat.precision > 0; let mediumpAvailable = _vertexShaderPrecisionMediumpFloat.precision > 0 && _fragmentShaderPrecisionMediumpFloat.precision > 0; // ----------------------------------------- let precision; if (highpAvailable) { precision = 'highp'; } else if (mediumpAvailable) { precision = 'mediump'; } else { precision = 'lowp'; } return { SHADER_INTERPOLATION: { isSupported: function () { let supported = true; supported = supported && gl.getExtension('EXT_frag_depth'); supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8; return supported; } }, SHADER_SPLATS: { isSupported: function () { let supported = true; supported = supported && gl.getExtension('EXT_frag_depth'); supported = supported && gl.getExtension('OES_texture_float'); supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8; return supported; } }, SHADER_EDL: { isSupported: function () { let supported = true; supported = supported && gl.getExtension('EXT_frag_depth'); supported = supported && gl.getExtension('OES_texture_float'); supported = supported && gl.getParameter(gl.MAX_VARYING_VECTORS) >= 8; //supported = supported || (gl instanceof WebGL2RenderingContext); return supported; } }, //WEBGL2: { // isSupported: function(){ // return gl instanceof WebGL2RenderingContext; // } //}, precision: precision }; }()); const KeyCodes = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40, DELETE: 46, A: 'A'.charCodeAt(0), S: 'S'.charCodeAt(0), D: 'D'.charCodeAt(0), W: 'W'.charCodeAt(0), Q: 'Q'.charCodeAt(0), E: 'E'.charCodeAt(0), R: 'R'.charCodeAt(0), F: 'F'.charCodeAt(0) }; class LRUItem{ constructor(node){ this.previous = null; this.next = null; this.node = node; } } /** * * @class A doubly-linked-list of the least recently used elements. */ class LRU{ constructor(){ // the least recently used item this.first = null; // the most recently used item this.last = null; // a list of all items in the lru list this.items = {}; this.elements = 0; this.numPoints = 0; } size(){ return this.elements; } contains(node){ return this.items[node.id] == null; } touch(node){ if (!node.loaded) { return; } let item; if (this.items[node.id] == null) { // add to list item = new LRUItem(node); item.previous = this.last; this.last = item; if (item.previous !== null) { item.previous.next = item; } this.items[node.id] = item; this.elements++; if (this.first === null) { this.first = item; } this.numPoints += node.numPoints; } else { // update in list item = this.items[node.id]; if (item.previous === null) { // handle touch on first element if (item.next !== null) { this.first = item.next; this.first.previous = null; item.previous = this.last; item.next = null; this.last = item; item.previous.next = item; } } else if (item.next === null) { // handle touch on last element } else { // handle touch on any other element item.previous.next = item.next; item.next.previous = item.previous; item.previous = this.last; item.next = null; this.last = item; item.previous.next = item; } } } remove(node){ let lruItem = this.items[node.id]; if (lruItem) { if (this.elements === 1) { this.first = null; this.last = null; } else { if (!lruItem.previous) { this.first = lruItem.next; this.first.previous = null; } if (!lruItem.next) { this.last = lruItem.previous; this.last.next = null; } if (lruItem.previous && lruItem.next) { lruItem.previous.next = lruItem.next; lruItem.next.previous = lruItem.previous; } } delete this.items[node.id]; this.elements--; this.numPoints -= node.numPoints; } } getLRUItem(){ if (this.first === null) { return null; } let lru = this.first; return lru.node; } toString(){ let string = '{ '; let curr = this.first; while (curr !== null) { string += curr.node.id; if (curr.next !== null) { string += ', '; } curr = curr.next; } string += '}'; string += '(' + this.size() + ')'; return string; } freeMemory(){ if (this.elements <= 1) { return; } while (this.numPoints > Potree.pointLoadLimit) { let element = this.first; let node = element.node; this.disposeDescendants(node); } } disposeDescendants(node){ let stack = []; stack.push(node); while (stack.length > 0) { let current = stack.pop(); // console.log(current); current.dispose(); this.remove(current); for (let key in current.children) { if (current.children.hasOwnProperty(key)) { let child = current.children[key]; if (child.loaded) { stack.push(current.children[key]); } } } } } } class PointCloudTreeNode extends EventDispatcher{ constructor(){ super(); this.needsTransformUpdate = true; } getChildren () { throw new Error('override function'); } getBoundingBox () { throw new Error('override function'); } isLoaded () { throw new Error('override function'); } isGeometryNode () { throw new Error('override function'); } isTreeNode () { throw new Error('override function'); } getLevel () { throw new Error('override function'); } getBoundingSphere () { throw new Error('override function'); } }; class PointCloudTree extends Object3D { constructor () { super(); } initialized () { return this.root !== null; } }; /** * Some types of possible point attribute data formats * * @class */ const PointAttributeTypes = { DATA_TYPE_DOUBLE: {ordinal: 0, name: "double", size: 8}, DATA_TYPE_FLOAT: {ordinal: 1, name: "float", size: 4}, DATA_TYPE_INT8: {ordinal: 2, name: "int8", size: 1}, DATA_TYPE_UINT8: {ordinal: 3, name: "uint8", size: 1}, DATA_TYPE_INT16: {ordinal: 4, name: "int16", size: 2}, DATA_TYPE_UINT16: {ordinal: 5, name: "uint16", size: 2}, DATA_TYPE_INT32: {ordinal: 6, name: "int32", size: 4}, DATA_TYPE_UINT32: {ordinal: 7, name: "uint32", size: 4}, DATA_TYPE_INT64: {ordinal: 8, name: "int64", size: 8}, DATA_TYPE_UINT64: {ordinal: 9, name: "uint64", size: 8} }; let i = 0; for (let obj in PointAttributeTypes) { PointAttributeTypes[i] = PointAttributeTypes[obj]; i++; } class PointAttribute{ constructor(name, type, numElements){ this.name = name; this.type = type; this.numElements = numElements; this.byteSize = this.numElements * this.type.size; this.description = ""; this.range = [Infinity, -Infinity]; } }; PointAttribute.POSITION_CARTESIAN = new PointAttribute( "POSITION_CARTESIAN", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.RGBA_PACKED = new PointAttribute( "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 4); PointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED; PointAttribute.RGB_PACKED = new PointAttribute( "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 3); PointAttribute.NORMAL_FLOATS = new PointAttribute( "NORMAL_FLOATS", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.INTENSITY = new PointAttribute( "INTENSITY", PointAttributeTypes.DATA_TYPE_UINT16, 1); PointAttribute.CLASSIFICATION = new PointAttribute( "CLASSIFICATION", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute( "NORMAL_SPHEREMAPPED", PointAttributeTypes.DATA_TYPE_UINT8, 2); PointAttribute.NORMAL_OCT16 = new PointAttribute( "NORMAL_OCT16", PointAttributeTypes.DATA_TYPE_UINT8, 2); PointAttribute.NORMAL = new PointAttribute( "NORMAL", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.RETURN_NUMBER = new PointAttribute( "RETURN_NUMBER", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.NUMBER_OF_RETURNS = new PointAttribute( "NUMBER_OF_RETURNS", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.SOURCE_ID = new PointAttribute( "SOURCE_ID", PointAttributeTypes.DATA_TYPE_UINT16, 1); PointAttribute.INDICES = new PointAttribute( "INDICES", PointAttributeTypes.DATA_TYPE_UINT32, 1); PointAttribute.SPACING = new PointAttribute( "SPACING", PointAttributeTypes.DATA_TYPE_FLOAT, 1); PointAttribute.GPS_TIME = new PointAttribute( "GPS_TIME", PointAttributeTypes.DATA_TYPE_DOUBLE, 1); class PointAttributes{ constructor(pointAttributes){ this.attributes = []; this.byteSize = 0; this.size = 0; this.vectors = []; if (pointAttributes != null) { for (let i = 0; i < pointAttributes.length; i++) { let pointAttributeName = pointAttributes[i]; let pointAttribute = PointAttribute[pointAttributeName]; this.attributes.push(pointAttribute); this.byteSize += pointAttribute.byteSize; this.size++; } } } add(pointAttribute){ this.attributes.push(pointAttribute); this.byteSize += pointAttribute.byteSize; this.size++; }; addVector(vector){ this.vectors.push(vector); } hasNormals(){ for (let name in this.attributes) { let pointAttribute = this.attributes[name]; if ( pointAttribute === PointAttribute.NORMAL_SPHEREMAPPED || pointAttribute === PointAttribute.NORMAL_FLOATS || pointAttribute === PointAttribute.NORMAL || pointAttribute === PointAttribute.NORMAL_OCT16) { return true; } } return false; }; } class U { static toVector3(v, offset) { return new Vector3().fromArray(v, offset || 0); } static toBox3(b) { return new Box3(U.toVector3(b), U.toVector3(b, 3)); }; static findDim(schema, name) { var dim = schema.find((dim) => dim.name == name); if (!dim) throw new Error('Failed to find ' + name + ' in schema'); return dim; } static sphereFrom(b) { return b.getBoundingSphere(new Sphere()); } }; class PointCloudEptGeometry { constructor(url, info) { let version = info.version; let schema = info.schema; let bounds = info.bounds; let boundsConforming = info.boundsConforming; let xyz = [ U.findDim(schema, 'X'), U.findDim(schema, 'Y'), U.findDim(schema, 'Z') ]; let scale = xyz.map((d) => d.scale || 1); let offset = xyz.map((d) => d.offset || 0); this.eptScale = U.toVector3(scale); this.eptOffset = U.toVector3(offset); this.url = url; this.info = info; this.type = 'ept'; this.schema = schema; this.span = info.span || info.ticks; this.boundingBox = U.toBox3(bounds); this.tightBoundingBox = U.toBox3(boundsConforming); this.offset = U.toVector3([0, 0, 0]); this.boundingSphere = U.sphereFrom(this.boundingBox); this.tightBoundingSphere = U.sphereFrom(this.tightBoundingBox); this.version = new Potree.Version('1.7'); this.projection = null; this.fallbackProjection = null; if (info.srs && info.srs.horizontal) { this.projection = info.srs.authority + ':' + info.srs.horizontal; } if (info.srs && info.srs.wkt) { if (!this.projection) this.projection = info.srs.wkt; else this.fallbackProjection = info.srs.wkt; } { // TODO [mschuetz]: named projections that proj4 can't handle seem to cause problems. // remove them for now try{ proj4(this.projection); }catch(e){ this.projection = null; } } { const attributes = new PointAttributes(); attributes.add(PointAttribute.POSITION_CARTESIAN); attributes.add(new PointAttribute("rgba", PointAttributeTypes.DATA_TYPE_UINT8, 4)); attributes.add(new PointAttribute("intensity", PointAttributeTypes.DATA_TYPE_UINT16, 1)); attributes.add(new PointAttribute("classification", PointAttributeTypes.DATA_TYPE_UINT8, 1)); attributes.add(new PointAttribute("gps-time", PointAttributeTypes.DATA_TYPE_DOUBLE, 1)); attributes.add(new PointAttribute("returnNumber", PointAttributeTypes.DATA_TYPE_UINT8, 1)); attributes.add(new PointAttribute("number of returns", PointAttributeTypes.DATA_TYPE_UINT8, 1)); attributes.add(new PointAttribute("return number", PointAttributeTypes.DATA_TYPE_UINT8, 1)); attributes.add(new PointAttribute("source id", PointAttributeTypes.DATA_TYPE_UINT16, 1)); this.pointAttributes = attributes; } this.spacing = (this.boundingBox.max.x - this.boundingBox.min.x) / this.span; let hierarchyType = info.hierarchyType || 'json'; const dataType = info.dataType; if (dataType == 'laszip') { this.loader = new Potree.EptLaszipLoader(); } else if (dataType == 'binary') { this.loader = new Potree.EptBinaryLoader(); } else if (dataType == 'zstandard') { this.loader = new Potree.EptZstandardLoader(); } else { throw new Error('Could not read data type: ' + dataType); } } }; class EptKey { constructor(ept, b, d, x, y, z) { this.ept = ept; this.b = b; this.d = d; this.x = x || 0; this.y = y || 0; this.z = z || 0; } name() { return this.d + '-' + this.x + '-' + this.y + '-' + this.z; } step(a, b, c) { let min = this.b.min.clone(); let max = this.b.max.clone(); let dst = new Vector3().subVectors(max, min); if (a) min.x += dst.x / 2; else max.x -= dst.x / 2; if (b) min.y += dst.y / 2; else max.y -= dst.y / 2; if (c) min.z += dst.z / 2; else max.z -= dst.z / 2; return new Potree.EptKey( this.ept, new Box3(min, max), this.d + 1, this.x * 2 + a, this.y * 2 + b, this.z * 2 + c); } children() { var result = []; for (var a = 0; a < 2; ++a) { for (var b = 0; b < 2; ++b) { for (var c = 0; c < 2; ++c) { var add = this.step(a, b, c).name(); if (!result.includes(add)) result = result.concat(add); } } } return result; } } class PointCloudEptGeometryNode extends PointCloudTreeNode { constructor(ept, b, d, x, y, z) { super(); this.ept = ept; this.key = new Potree.EptKey( this.ept, b || this.ept.boundingBox, d || 0, x, y, z); this.id = PointCloudEptGeometryNode.IDCount++; this.geometry = null; this.boundingBox = this.key.b; this.tightBoundingBox = this.boundingBox; this.spacing = this.ept.spacing / Math.pow(2, this.key.d); this.boundingSphere = U.sphereFrom(this.boundingBox); // These are set during hierarchy loading. this.hasChildren = false; this.children = { }; this.numPoints = -1; this.level = this.key.d; this.loaded = false; this.loading = false; this.oneTimeDisposeHandlers = []; let k = this.key; this.name = this.toPotreeName(k.d, k.x, k.y, k.z); this.index = parseInt(this.name.charAt(this.name.length - 1)); } isGeometryNode() { return true; } getLevel() { return this.level; } isTreeNode() { return false; } isLoaded() { return this.loaded; } getBoundingSphere() { return this.boundingSphere; } getBoundingBox() { return this.boundingBox; } url() { return this.ept.url + 'ept-data/' + this.filename(); } getNumPoints() { return this.numPoints; } filename() { return this.key.name(); } getChildren() { let children = []; for (let i = 0; i < 8; i++) { if (this.children[i]) { children.push(this.children[i]); } } return children; } addChild(child) { this.children[child.index] = child; child.parent = this; } load() { if (this.loaded || this.loading) return; if (Potree.numNodesLoading >= Potree.maxNodesLoading) return; this.loading = true; ++Potree.numNodesLoading; if (this.numPoints == -1) this.loadHierarchy(); this.loadPoints(); } loadPoints(){ this.ept.loader.load(this); } async loadHierarchy() { let nodes = { }; nodes[this.filename()] = this; this.hasChildren = false; let eptHierarchyFile = `${this.ept.url}ept-hierarchy/${this.filename()}.json`; let response = await fetch(eptHierarchyFile); let hier = await response.json(); // Since we want to traverse top-down, and 10 comes // lexicographically before 9 (for example), do a deep sort. var keys = Object.keys(hier).sort((a, b) => { let [da, xa, ya, za] = a.split('-').map((n) => parseInt(n, 10)); let [db, xb, yb, zb] = b.split('-').map((n) => parseInt(n, 10)); if (da < db) return -1; if (da > db) return 1; if (xa < xb) return -1; if (xa > xb) return 1; if (ya < yb) return -1; if (ya > yb) return 1; if (za < zb) return -1; if (za > zb) return 1; return 0; }); keys.forEach((v) => { let [d, x, y, z] = v.split('-').map((n) => parseInt(n, 10)); let a = x & 1, b = y & 1, c = z & 1; let parentName = (d - 1) + '-' + (x >> 1) + '-' + (y >> 1) + '-' + (z >> 1); let parentNode = nodes[parentName]; if (!parentNode) return; parentNode.hasChildren = true; let key = parentNode.key.step(a, b, c); let node = new Potree.PointCloudEptGeometryNode( this.ept, key.b, key.d, key.x, key.y, key.z); node.level = d; node.numPoints = hier[v]; parentNode.addChild(node); nodes[key.name()] = node; }); } doneLoading(bufferGeometry, tightBoundingBox, np, mean) { bufferGeometry.boundingBox = this.boundingBox; this.geometry = bufferGeometry; this.tightBoundingBox = tightBoundingBox; this.numPoints = np; this.mean = mean; this.loaded = true; this.loading = false; --Potree.numNodesLoading; } toPotreeName(d, x, y, z) { var name = 'r'; for (var i = 0; i < d; ++i) { var shift = d - i - 1; var mask = 1 << shift; var step = 0; if (x & mask) step += 4; if (y & mask) step += 2; if (z & mask) step += 1; name += step; } return name; } dispose() { if (this.geometry && this.parent != null) { this.geometry.dispose(); this.geometry = null; this.loaded = false; // this.dispatchEvent( { type: 'dispose' } ); for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) { let handler = this.oneTimeDisposeHandlers[i]; handler(); } this.oneTimeDisposeHandlers = []; } } } PointCloudEptGeometryNode.IDCount = 0; class PointCloudOctreeGeometry{ constructor(){ this.url = null; this.octreeDir = null; this.spacing = 0; this.boundingBox = null; this.root = null; this.nodes = null; this.pointAttributes = null; this.hierarchyStepSize = -1; this.loader = null; } } class PointCloudOctreeGeometryNode extends PointCloudTreeNode{ constructor(name, pcoGeometry, boundingBox){ super(); this.id = PointCloudOctreeGeometryNode.IDCount++; this.name = name; this.index = parseInt(name.charAt(name.length - 1)); this.pcoGeometry = pcoGeometry; this.geometry = null; this.boundingBox = boundingBox; this.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); this.children = {}; this.numPoints = 0; this.level = null; this.loaded = false; this.oneTimeDisposeHandlers = []; } isGeometryNode(){ return true; } getLevel(){ return this.level; } isTreeNode(){ return false; } isLoaded(){ return this.loaded; } getBoundingSphere(){ return this.boundingSphere; } getBoundingBox(){ return this.boundingBox; } getChildren(){ let children = []; for (let i = 0; i < 8; i++) { if (this.children[i]) { children.push(this.children[i]); } } return children; } getBoundingBox(){ return this.boundingBox; } getURL(){ let url = ''; let version = this.pcoGeometry.loader.version; if (version.equalOrHigher('1.5')) { url = this.pcoGeometry.octreeDir + '/' + this.getHierarchyPath() + '/' + this.name; } else if (version.equalOrHigher('1.4')) { url = this.pcoGeometry.octreeDir + '/' + this.name; } else if (version.upTo('1.3')) { url = this.pcoGeometry.octreeDir + '/' + this.name; } return url; } getHierarchyPath(){ let path = 'r/'; let hierarchyStepSize = this.pcoGeometry.hierarchyStepSize; let indices = this.name.substr(1); let numParts = Math.floor(indices.length / hierarchyStepSize); for (let i = 0; i < numParts; i++) { path += indices.substr(i * hierarchyStepSize, hierarchyStepSize) + '/'; } path = path.slice(0, -1); return path; } addChild(child) { this.children[child.index] = child; child.parent = this; } load(){ if (this.loading === true || this.loaded === true || Potree.numNodesLoading >= Potree.maxNodesLoading) { return; } this.loading = true; Potree.numNodesLoading++; if (this.pcoGeometry.loader.version.equalOrHigher('1.5')) { if ((this.level % this.pcoGeometry.hierarchyStepSize) === 0 && this.hasChildren) { this.loadHierachyThenPoints(); } else { this.loadPoints(); } } else { this.loadPoints(); } } loadPoints(){ this.pcoGeometry.loader.load(this); } loadHierachyThenPoints(){ let node = this; // load hierarchy let callback = function (node, hbuffer) { let tStart = performance.now(); let view = new DataView(hbuffer); let stack = []; let children = view.getUint8(0); let numPoints = view.getUint32(1, true); node.numPoints = numPoints; stack.push({children: children, numPoints: numPoints, name: node.name}); let decoded = []; let offset = 5; while (stack.length > 0) { let snode = stack.shift(); let mask = 1; for (let i = 0; i < 8; i++) { if ((snode.children & mask) !== 0) { let childName = snode.name + i; let childChildren = view.getUint8(offset); let childNumPoints = view.getUint32(offset + 1, true); stack.push({children: childChildren, numPoints: childNumPoints, name: childName}); decoded.push({children: childChildren, numPoints: childNumPoints, name: childName}); offset += 5; } mask = mask * 2; } if (offset === hbuffer.byteLength) { break; } } // console.log(decoded); let nodes = {}; nodes[node.name] = node; let pco = node.pcoGeometry; for (let i = 0; i < decoded.length; i++) { let name = decoded[i].name; let decodedNumPoints = decoded[i].numPoints; let index = parseInt(name.charAt(name.length - 1)); let parentName = name.substring(0, name.length - 1); let parentNode = nodes[parentName]; let level = name.length - 1; let boundingBox = Utils.createChildAABB(parentNode.boundingBox, index); let currentNode = new PointCloudOctreeGeometryNode(name, pco, boundingBox); currentNode.level = level; currentNode.numPoints = decodedNumPoints; currentNode.hasChildren = decoded[i].children > 0; currentNode.spacing = pco.spacing / Math.pow(2, level); parentNode.addChild(currentNode); nodes[name] = currentNode; } let duration = performance.now() - tStart; if(duration > 5){ let msg = `duration: ${duration}ms, numNodes: ${decoded.length}`; console.log(msg); } node.loadPoints(); }; if ((node.level % node.pcoGeometry.hierarchyStepSize) === 0) { // let hurl = node.pcoGeometry.octreeDir + "/../hierarchy/" + node.name + ".hrc"; let hurl = node.pcoGeometry.octreeDir + '/' + node.getHierarchyPath() + '/' + node.name + '.hrc'; let xhr = XHRFactory.createXMLHttpRequest(); xhr.open('GET', hurl, true); xhr.responseType = 'arraybuffer'; xhr.overrideMimeType('text/plain; charset=x-user-defined'); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200 || xhr.status === 0) { let hbuffer = xhr.response; callback(node, hbuffer); } else { console.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + hurl); Potree.numNodesLoading--; } } }; try { xhr.send(null); } catch (e) { console.log('fehler beim laden der punktwolke: ' + e); } } } getNumPoints(){ return this.numPoints; } dispose(){ if (this.geometry && this.parent != null) { this.geometry.dispose(); this.geometry = null; this.loaded = false; this.dispatchEvent( { type: 'dispose' } ); for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) { let handler = this.oneTimeDisposeHandlers[i]; handler(); } this.oneTimeDisposeHandlers = []; } } } PointCloudOctreeGeometryNode.IDCount = 0; // ------------------------------------------- // to get a ready to use gradient array from a chroma.js gradient: // http://gka.github.io/chroma.js/ // ------------------------------------------- // // let stops = []; // for(let i = 0; i <= 10; i++){ // let range = chroma.scale(['yellow', 'navy']).mode('lch').domain([10,0])(i)._rgb // .slice(0, 3) // .map(v => (v / 255).toFixed(4)) // .join(", "); // // let line = `[${i / 10}, new THREE.Color(${range})],`; // // stops.push(line); // } // stops.join("\n"); // // // // ------------------------------------------- // to get a ready to use gradient array from matplotlib: // ------------------------------------------- // import matplotlib.pyplot as plt // import matplotlib.colors as colors // // norm = colors.Normalize(vmin=0,vmax=1) // cmap = plt.cm.viridis // // for i in range(0,11): // u = i / 10 // rgb = cmap(norm(u))[0:3] // rgb = ["{0:.3f}".format(v) for v in rgb] // rgb = "[" + str(u) + ", new THREE.Color(" + ", ".join(rgb) + ")]," // print(rgb) let Gradients = { // From chroma spectral http://gka.github.io/chroma.js/ SPECTRAL: [ [0, new Color(0.3686, 0.3098, 0.6353)], [0.1, new Color(0.1961, 0.5333, 0.7412)], [0.2, new Color(0.4000, 0.7608, 0.6471)], [0.3, new Color(0.6706, 0.8667, 0.6431)], [0.4, new Color(0.9020, 0.9608, 0.5961)], [0.5, new Color(1.0000, 1.0000, 0.7490)], [0.6, new Color(0.9961, 0.8784, 0.5451)], [0.7, new Color(0.9922, 0.6824, 0.3804)], [0.8, new Color(0.9569, 0.4275, 0.2627)], [0.9, new Color(0.8353, 0.2431, 0.3098)], [1, new Color(0.6196, 0.0039, 0.2588)] ], PLASMA: [ [0.0, new Color(0.241, 0.015, 0.610)], [0.1, new Color(0.387, 0.001, 0.654)], [0.2, new Color(0.524, 0.025, 0.653)], [0.3, new Color(0.651, 0.125, 0.596)], [0.4, new Color(0.752, 0.227, 0.513)], [0.5, new Color(0.837, 0.329, 0.431)], [0.6, new Color(0.907, 0.435, 0.353)], [0.7, new Color(0.963, 0.554, 0.272)], [0.8, new Color(0.992, 0.681, 0.195)], [0.9, new Color(0.987, 0.822, 0.144)], [1.0, new Color(0.940, 0.975, 0.131)] ], YELLOW_GREEN: [ [0, new Color(0.1647, 0.2824, 0.3451)], [0.1, new Color(0.1338, 0.3555, 0.4227)], [0.2, new Color(0.0610, 0.4319, 0.4864)], [0.3, new Color(0.0000, 0.5099, 0.5319)], [0.4, new Color(0.0000, 0.5881, 0.5569)], [0.5, new Color(0.1370, 0.6650, 0.5614)], [0.6, new Color(0.2906, 0.7395, 0.5477)], [0.7, new Color(0.4453, 0.8099, 0.5201)], [0.8, new Color(0.6102, 0.8748, 0.4850)], [0.9, new Color(0.7883, 0.9323, 0.4514)], [1, new Color(0.9804, 0.9804, 0.4314)] ], VIRIDIS: [ [0.0, new Color(0.267, 0.005, 0.329)], [0.1, new Color(0.283, 0.141, 0.458)], [0.2, new Color(0.254, 0.265, 0.530)], [0.3, new Color(0.207, 0.372, 0.553)], [0.4, new Color(0.164, 0.471, 0.558)], [0.5, new Color(0.128, 0.567, 0.551)], [0.6, new Color(0.135, 0.659, 0.518)], [0.7, new Color(0.267, 0.749, 0.441)], [0.8, new Color(0.478, 0.821, 0.318)], [0.9, new Color(0.741, 0.873, 0.150)], [1.0, new Color(0.993, 0.906, 0.144)] ], INFERNO: [ [0.0, new Color(0.077, 0.042, 0.206)], [0.1, new Color(0.225, 0.036, 0.388)], [0.2, new Color(0.373, 0.074, 0.432)], [0.3, new Color(0.522, 0.128, 0.420)], [0.4, new Color(0.665, 0.182, 0.370)], [0.5, new Color(0.797, 0.255, 0.287)], [0.6, new Color(0.902, 0.364, 0.184)], [0.7, new Color(0.969, 0.516, 0.063)], [0.8, new Color(0.988, 0.683, 0.072)], [0.9, new Color(0.961, 0.859, 0.298)], [1.0, new Color(0.988, 0.998, 0.645)] ], GRAYSCALE: [ [0, new Color(0, 0, 0)], [1, new Color(1, 1, 1)] ], // 16 samples of the TURBU color scheme // values taken from: https://gist.github.com/mikhailov-work/ee72ba4191942acecc03fe6da94fc73f // original file licensed under Apache-2.0 TURBO: [ [0.00, new Color(0.18995, 0.07176, 0.23217)], [0.07, new Color(0.25107, 0.25237, 0.63374)], [0.13, new Color(0.27628, 0.42118, 0.89123)], [0.20, new Color(0.25862, 0.57958, 0.99876)], [0.27, new Color(0.15844, 0.73551, 0.92305)], [0.33, new Color(0.09267, 0.86554, 0.7623)], [0.40, new Color(0.19659, 0.94901, 0.59466)], [0.47, new Color(0.42778, 0.99419, 0.38575)], [0.53, new Color(0.64362, 0.98999, 0.23356)], [0.60, new Color(0.80473, 0.92452, 0.20459)], [0.67, new Color(0.93301, 0.81236, 0.22667)], [0.73, new Color(0.99314, 0.67408, 0.20348)], [0.80, new Color(0.9836, 0.49291, 0.12849)], [0.87, new Color(0.92105, 0.31489, 0.05475)], [0.93, new Color(0.81608, 0.18462, 0.01809)], [1.00, new Color(0.66449, 0.08436, 0.00424)], ], RAINBOW: [ [0, new Color(0.278, 0, 0.714)], [1 / 6, new Color(0, 0, 1)], [2 / 6, new Color(0, 1, 1)], [3 / 6, new Color(0, 1, 0)], [4 / 6, new Color(1, 1, 0)], [5 / 6, new Color(1, 0.64, 0)], [1, new Color(1, 0, 0)] ], CONTOUR: [ [0.00, new Color(0, 0, 0)], [0.03, new Color(0, 0, 0)], [0.04, new Color(1, 1, 1)], [1.00, new Color(1, 1, 1)] ], }; let Shaders = {}; Shaders["pointcloud.vs"] = ` precision highp float; precision highp int; #define max_clip_polygons 8 #define PI 3.141592653589793 attribute vec3 position; attribute vec3 color; attribute float intensity; attribute float classification; attribute float returnNumber; attribute float numberOfReturns; attribute float pointSourceID; attribute vec4 indices; attribute float spacing; attribute float gpsTime; attribute vec3 normal; attribute float aExtra; uniform mat4 modelMatrix; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; uniform mat4 viewMatrix; uniform mat4 uViewInv; uniform float uScreenWidth; uniform float uScreenHeight; uniform float fov; uniform float near; uniform float far; uniform bool uDebug; uniform bool uUseOrthographicCamera; uniform float uOrthoWidth; uniform float uOrthoHeight; #define CLIPTASK_NONE 0 #define CLIPTASK_HIGHLIGHT 1 #define CLIPTASK_SHOW_INSIDE 2 #define CLIPTASK_SHOW_OUTSIDE 3 #define CLIPMETHOD_INSIDE_ANY 0 #define CLIPMETHOD_INSIDE_ALL 1 uniform int clipTask; uniform int clipMethod; #if defined(num_clipboxes) && num_clipboxes > 0 uniform mat4 clipBoxes[num_clipboxes]; #endif #if defined(num_clipspheres) && num_clipspheres > 0 uniform mat4 uClipSpheres[num_clipspheres]; #endif #if defined(num_clippolygons) && num_clippolygons > 0 uniform int uClipPolygonVCount[num_clippolygons]; uniform vec3 uClipPolygonVertices[num_clippolygons * 8]; uniform mat4 uClipPolygonWVP[num_clippolygons]; #endif uniform float size; uniform float minSize; uniform float maxSize; uniform float uPCIndex; uniform float uOctreeSpacing; uniform float uNodeSpacing; uniform float uOctreeSize; uniform vec3 uBBSize; uniform float uLevel; uniform float uVNStart; uniform bool uIsLeafNode; uniform vec3 uColor; uniform float uOpacity; uniform vec2 elevationRange; uniform vec2 intensityRange; uniform vec2 uFilterReturnNumberRange; uniform vec2 uFilterNumberOfReturnsRange; uniform vec2 uFilterPointSourceIDClipRange; uniform vec2 uFilterGPSTimeClipRange; uniform float uGpsScale; uniform float uGpsOffset; uniform vec2 uNormalizedGpsBufferRange; uniform vec3 uIntensity_gbc; uniform vec3 uRGB_gbc; uniform vec3 uExtra_gbc; uniform float uTransition; uniform float wRGB; uniform float wIntensity; uniform float wElevation; uniform float wClassification; uniform float wReturnNumber; uniform float wSourceID; uniform vec2 uExtraNormalizedRange; uniform vec2 uExtraRange; uniform float uExtraScale; uniform float uExtraOffset; uniform vec3 uShadowColor; uniform sampler2D visibleNodes; uniform sampler2D gradient; uniform sampler2D classificationLUT; #if defined(color_type_matcap) uniform sampler2D matcapTextureUniform; #endif uniform bool backfaceCulling; #if defined(num_shadowmaps) && num_shadowmaps > 0 uniform sampler2D uShadowMap[num_shadowmaps]; uniform mat4 uShadowWorldView[num_shadowmaps]; uniform mat4 uShadowProj[num_shadowmaps]; #endif varying vec3 vColor; varying float vLogDepth; varying vec3 vViewPosition; varying float vRadius; varying float vPointSize; float round(float number){ return floor(number + 0.5); } // // ### ######## ### ######## ######## #### ## ## ######## ###### #### ######## ######## ###### // ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## // ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## // ## ## ## ## ## ## ######## ## ## ## ## ###### ###### ## ## ###### ###### // ######### ## ## ######### ## ## ## ## ## ## ## ## ## ## ## // ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## // ## ## ######## ## ## ## ## #### ### ######## ###### #### ######## ######## ###### // // --------------------- // OCTREE // --------------------- #if (defined(adaptive_point_size) || defined(color_type_level_of_detail)) && defined(tree_type_octree) /** * number of 1-bits up to inclusive index position * number is treated as if it were an integer in the range 0-255 * */ int numberOfOnes(int number, int index){ int numOnes = 0; int tmp = 128; for(int i = 7; i >= 0; i--){ if(number >= tmp){ number = number - tmp; if(i <= index){ numOnes++; } } tmp = tmp / 2; } return numOnes; } /** * checks whether the bit at index is 1 * number is treated as if it were an integer in the range 0-255 * */ bool isBitSet(int number, int index){ // weird multi else if due to lack of proper array, int and bitwise support in WebGL 1.0 int powi = 1; if(index == 0){ powi = 1; }else if(index == 1){ powi = 2; }else if(index == 2){ powi = 4; }else if(index == 3){ powi = 8; }else if(index == 4){ powi = 16; }else if(index == 5){ powi = 32; }else if(index == 6){ powi = 64; }else if(index == 7){ powi = 128; }else{ return false; } int ndp = number / powi; return mod(float(ndp), 2.0) != 0.0; } /** * find the LOD at the point position */ float getLOD(){ vec3 offset = vec3(0.0, 0.0, 0.0); int iOffset = int(uVNStart); float depth = uLevel; for(float i = 0.0; i <= 30.0; i++){ float nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0); vec3 index3d = (position-offset) / nodeSizeAtLevel; index3d = floor(index3d + 0.5); int index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z)); vec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0)); int mask = int(round(value.r * 255.0)); if(isBitSet(mask, index)){ // there are more visible child nodes at this position int advanceG = int(round(value.g * 255.0)) * 256; int advanceB = int(round(value.b * 255.0)); int advanceChild = numberOfOnes(mask, index - 1); int advance = advanceG + advanceB + advanceChild; iOffset = iOffset + advance; depth++; }else{ // no more visible child nodes at this position //return value.a * 255.0; float lodOffset = (255.0 * value.a) / 10.0 - 10.0; return depth + lodOffset; } offset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d; } return depth; } float getSpacing(){ vec3 offset = vec3(0.0, 0.0, 0.0); int iOffset = int(uVNStart); float depth = uLevel; float spacing = uNodeSpacing; for(float i = 0.0; i <= 30.0; i++){ float nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0); vec3 index3d = (position-offset) / nodeSizeAtLevel; index3d = floor(index3d + 0.5); int index = int(round(4.0 * index3d.x + 2.0 * index3d.y + index3d.z)); vec4 value = texture2D(visibleNodes, vec2(float(iOffset) / 2048.0, 0.0)); int mask = int(round(value.r * 255.0)); float spacingFactor = value.a; if(i > 0.0){ spacing = spacing / (255.0 * spacingFactor); } if(isBitSet(mask, index)){ // there are more visible child nodes at this position int advanceG = int(round(value.g * 255.0)) * 256; int advanceB = int(round(value.b * 255.0)); int advanceChild = numberOfOnes(mask, index - 1); int advance = advanceG + advanceB + advanceChild; iOffset = iOffset + advance; //spacing = spacing / (255.0 * spacingFactor); //spacing = spacing / 3.0; depth++; }else{ // no more visible child nodes at this position return spacing; } offset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d; } return spacing; } float getPointSizeAttenuation(){ return pow(2.0, getLOD()); } #endif // --------------------- // KD-TREE // --------------------- #if (defined(adaptive_point_size) || defined(color_type_level_of_detail)) && defined(tree_type_kdtree) float getLOD(){ vec3 offset = vec3(0.0, 0.0, 0.0); float iOffset = 0.0; float depth = 0.0; vec3 size = uBBSize; vec3 pos = position; for(float i = 0.0; i <= 1000.0; i++){ vec4 value = texture2D(visibleNodes, vec2(iOffset / 2048.0, 0.0)); int children = int(value.r * 255.0); float next = value.g * 255.0; int split = int(value.b * 255.0); if(next == 0.0){ return depth; } vec3 splitv = vec3(0.0, 0.0, 0.0); if(split == 1){ splitv.x = 1.0; }else if(split == 2){ splitv.y = 1.0; }else if(split == 4){ splitv.z = 1.0; } iOffset = iOffset + next; float factor = length(pos * splitv / size); if(factor < 0.5){ // left if(children == 0 || children == 2){ return depth; } }else{ // right pos = pos - size * splitv * 0.5; if(children == 0 || children == 1){ return depth; } if(children == 3){ iOffset = iOffset + 1.0; } } size = size * ((1.0 - (splitv + 1.0) / 2.0) + 0.5); depth++; } return depth; } float getPointSizeAttenuation(){ return 0.5 * pow(1.3, getLOD()); } #endif // // ### ######## ######## ######## #### ######## ## ## ######## ######## ###### // ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## // ## ## ## ## ## ## ## ## ## ## ## ## ## ## // ## ## ## ## ######## ## ######## ## ## ## ###### ###### // ######### ## ## ## ## ## ## ## ## ## ## ## ## // ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## // ## ## ## ## ## ## #### ######## ####### ## ######## ###### // // formula adapted from: http://www.dfstudios.co.uk/articles/programming/image-programming-algorithms/image-processing-algorithms-part-5-contrast-adjustment/ float getContrastFactor(float contrast){ return (1.0158730158730156 * (contrast + 1.0)) / (1.0158730158730156 - contrast); } vec3 getRGB(){ vec3 rgb = color; rgb = pow(rgb, vec3(uRGB_gbc.x)); rgb = rgb + uRGB_gbc.y; rgb = (rgb - 0.5) * getContrastFactor(uRGB_gbc.z) + 0.5; rgb = clamp(rgb, 0.0, 1.0); return rgb; } float getIntensity(){ float w = (intensity - intensityRange.x) / (intensityRange.y - intensityRange.x); w = pow(w, uIntensity_gbc.x); w = w + uIntensity_gbc.y; w = (w - 0.5) * getContrastFactor(uIntensity_gbc.z) + 0.5; w = clamp(w, 0.0, 1.0); return w; } vec3 getGpsTime(){ float w = (gpsTime + uGpsOffset) * uGpsScale; vec3 c = texture2D(gradient, vec2(w, 1.0 - w)).rgb; // vec2 r = uNormalizedGpsBufferRange; // float w = gpsTime * (r.y - r.x) + r.x; // w = clamp(w, 0.0, 1.0); // vec3 c = texture2D(gradient, vec2(w,1.0-w)).rgb; return c; } vec3 getElevation(){ vec4 world = modelMatrix * vec4( position, 1.0 ); float w = (world.z - elevationRange.x) / (elevationRange.y - elevationRange.x); vec3 cElevation = texture2D(gradient, vec2(w,1.0-w)).rgb; return cElevation; } vec4 getClassification(){ vec2 uv = vec2(classification / 255.0, 0.5); vec4 classColor = texture2D(classificationLUT, uv); return classColor; } vec3 getReturns(){ // 0b 00_000_111 float rn = mod(returnNumber, 8.0); // 0b 00_111_000 float nr = mod(returnNumber / 8.0, 8.0); if(nr <= 1.0){ return vec3(1.0, 0.0, 0.0); }else{ return vec3(0.0, 1.0, 0.0); } // return vec3(nr / 4.0, 0.0, 0.0); // if(nr == 1.0){ // return vec3(1.0, 1.0, 0.0); // }else{ // if(rn == 1.0){ // return vec3(1.0, 0.0, 0.0); // }else if(rn == nr){ // return vec3(0.0, 0.0, 1.0); // }else{ // return vec3(0.0, 1.0, 0.0); // } // } // if(numberOfReturns == 1.0){ // return vec3(1.0, 1.0, 0.0); // }else{ // if(returnNumber == 1.0){ // return vec3(1.0, 0.0, 0.0); // }else if(returnNumber == numberOfReturns){ // return vec3(0.0, 0.0, 1.0); // }else{ // return vec3(0.0, 1.0, 0.0); // } // } } vec3 getReturnNumber(){ if(numberOfReturns == 1.0){ return vec3(1.0, 1.0, 0.0); }else{ if(returnNumber == 1.0){ return vec3(1.0, 0.0, 0.0); }else if(returnNumber == numberOfReturns){ return vec3(0.0, 0.0, 1.0); }else{ return vec3(0.0, 1.0, 0.0); } } } vec3 getNumberOfReturns(){ float value = numberOfReturns; float w = value / 6.0; vec3 color = texture2D(gradient, vec2(w, 1.0 - w)).rgb; return color; } vec3 getSourceID(){ float w = mod(pointSourceID, 10.0) / 10.0; return texture2D(gradient, vec2(w,1.0 - w)).rgb; } vec3 getCompositeColor(){ vec3 c; float w; c += wRGB * getRGB(); w += wRGB; c += wIntensity * getIntensity() * vec3(1.0, 1.0, 1.0); w += wIntensity; c += wElevation * getElevation(); w += wElevation; c += wReturnNumber * getReturnNumber(); w += wReturnNumber; c += wSourceID * getSourceID(); w += wSourceID; vec4 cl = wClassification * getClassification(); c += cl.a * cl.rgb; w += wClassification * cl.a; c = c / w; if(w == 0.0){ //c = color; gl_Position = vec4(100.0, 100.0, 100.0, 0.0); } return c; } vec3 getNormal(){ //vec3 n_hsv = vec3( modelMatrix * vec4( normal, 0.0 )) * 0.5 + 0.5; // (n_world.xyz + vec3(1.,1.,1.)) / 2.; vec3 n_view = normalize( vec3(modelViewMatrix * vec4( normal, 0.0 )) ); return n_view; } bool applyBackfaceCulling() { // Black not facing vertices / Backface culling vec3 e = normalize(vec3(modelViewMatrix * vec4( position, 1. ))); vec3 n = getNormal(); // normalize( vec3(modelViewMatrix * vec4( normal, 0.0 )) ); if((uUseOrthographicCamera && n.z <= 0.) || (!uUseOrthographicCamera && dot( n, e ) >= 0.)) { return true; } else { return false; } } #if defined(color_type_matcap) // Matcap Material vec3 getMatcap(){ vec3 eye = normalize( vec3( modelViewMatrix * vec4( position, 1. ) ) ); if(uUseOrthographicCamera) { eye = vec3(0., 0., -1.); } vec3 r_en = reflect( eye, getNormal() ); // or r_en = e - 2. * dot( n, e ) * n; float m = 2. * sqrt(pow( r_en.x, 2. ) + pow( r_en.y, 2. ) + pow( r_en.z + 1., 2. )); vec2 vN = r_en.xy / m + .5; return texture2D(matcapTextureUniform, vN).rgb; } #endif vec3 getExtra(){ float w = (aExtra + uExtraOffset) * uExtraScale; w = clamp(w, 0.0, 1.0); vec3 color = texture2D(gradient, vec2(w,1.0-w)).rgb; // vec2 r = uExtraNormalizedRange; // float w = aExtra * (r.y - r.x) + r.x; // w = (w - uExtraRange.x) / (uExtraRange.y - uExtraRange.x); // w = clamp(w, 0.0, 1.0); // vec3 color = texture2D(gradient, vec2(w,1.0-w)).rgb; return color; } vec3 getColor(){ vec3 color; #ifdef color_type_rgba color = getRGB(); #elif defined color_type_height || defined color_type_elevation color = getElevation(); #elif defined color_type_rgb_height vec3 cHeight = getElevation(); color = (1.0 - uTransition) * getRGB() + uTransition * cHeight; #elif defined color_type_depth float linearDepth = gl_Position.w; float expDepth = (gl_Position.z / gl_Position.w) * 0.5 + 0.5; color = vec3(linearDepth, expDepth, 0.0); //color = vec3(1.0, 0.5, 0.3); #elif defined color_type_intensity float w = getIntensity(); color = vec3(w, w, w); #elif defined color_type_gps_time color = getGpsTime(); #elif defined color_type_intensity_gradient float w = getIntensity(); color = texture2D(gradient, vec2(w,1.0-w)).rgb; #elif defined color_type_color color = uColor; #elif defined color_type_level_of_detail float depth = getLOD(); float w = depth / 10.0; color = texture2D(gradient, vec2(w,1.0-w)).rgb; #elif defined color_type_indices color = indices.rgb; #elif defined color_type_classification vec4 cl = getClassification(); color = cl.rgb; #elif defined color_type_return_number color = getReturnNumber(); #elif defined color_type_returns color = getReturns(); #elif defined color_type_number_of_returns color = getNumberOfReturns(); #elif defined color_type_source_id color = getSourceID(); #elif defined color_type_point_source_id color = getSourceID(); #elif defined color_type_normal color = (modelMatrix * vec4(normal, 0.0)).xyz; #elif defined color_type_phong color = color; #elif defined color_type_composite color = getCompositeColor(); #elif defined color_type_matcap color = getMatcap(); #else color = getExtra(); #endif if (backfaceCulling && applyBackfaceCulling()) { color = vec3(0.); } return color; } float getPointSize(){ float pointSize = 1.0; float slope = tan(fov / 2.0); float projFactor = -0.5 * uScreenHeight / (slope * vViewPosition.z); float scale = length( modelViewMatrix * vec4(0, 0, 0, 1) - modelViewMatrix * vec4(uOctreeSpacing, 0, 0, 1) ) / uOctreeSpacing; projFactor = projFactor * scale; float r = uOctreeSpacing * 1.7; vRadius = r; #if defined fixed_point_size pointSize = size; #elif defined attenuated_point_size if(uUseOrthographicCamera){ pointSize = size; }else{ pointSize = size * spacing * projFactor; //pointSize = pointSize * projFactor; } #elif defined adaptive_point_size if(uUseOrthographicCamera) { float worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation(); pointSize = (worldSpaceSize / uOrthoWidth) * uScreenWidth; } else { float worldSpaceSize = 1.0 * size * r / getPointSizeAttenuation(); pointSize = worldSpaceSize * projFactor; } #endif pointSize = max(minSize, pointSize); pointSize = min(maxSize, pointSize); vRadius = pointSize / projFactor; return pointSize; } #if defined(num_clippolygons) && num_clippolygons > 0 bool pointInClipPolygon(vec3 point, int polyIdx) { mat4 wvp = uClipPolygonWVP[polyIdx]; //vec4 screenClipPos = uClipPolygonVP[polyIdx] * modelMatrix * vec4(point, 1.0); //screenClipPos.xy = screenClipPos.xy / screenClipPos.w * 0.5 + 0.5; vec4 pointNDC = wvp * vec4(point, 1.0); pointNDC.xy = pointNDC.xy / pointNDC.w; int j = uClipPolygonVCount[polyIdx] - 1; bool c = false; for(int i = 0; i < 8; i++) { if(i == uClipPolygonVCount[polyIdx]) { break; } //vec4 verti = wvp * vec4(uClipPolygonVertices[polyIdx * 8 + i], 1); //vec4 vertj = wvp * vec4(uClipPolygonVertices[polyIdx * 8 + j], 1); //verti.xy = verti.xy / verti.w; //vertj.xy = vertj.xy / vertj.w; //verti.xy = verti.xy / verti.w * 0.5 + 0.5; //vertj.xy = vertj.xy / vertj.w * 0.5 + 0.5; vec3 verti = uClipPolygonVertices[polyIdx * 8 + i]; vec3 vertj = uClipPolygonVertices[polyIdx * 8 + j]; if( ((verti.y > pointNDC.y) != (vertj.y > pointNDC.y)) && (pointNDC.x < (vertj.x-verti.x) * (pointNDC.y-verti.y) / (vertj.y-verti.y) + verti.x) ) { c = !c; } j = i; } return c; } #endif void doClipping(){ { vec4 cl = getClassification(); if(cl.a == 0.0){ gl_Position = vec4(100.0, 100.0, 100.0, 0.0); return; } } #if defined(clip_return_number_enabled) { // return number filter vec2 range = uFilterReturnNumberRange; if(returnNumber < range.x || returnNumber > range.y){ gl_Position = vec4(100.0, 100.0, 100.0, 0.0); return; } } #endif #if defined(clip_number_of_returns_enabled) { // number of return filter vec2 range = uFilterNumberOfReturnsRange; if(numberOfReturns < range.x || numberOfReturns > range.y){ gl_Position = vec4(100.0, 100.0, 100.0, 0.0); return; } } #endif #if defined(clip_gps_enabled) { // GPS time filter float time = (gpsTime + uGpsOffset) * uGpsScale; vec2 range = uFilterGPSTimeClipRange; if(time < range.x || time > range.y){ gl_Position = vec4(100.0, 100.0, 100.0, 0.0); return; } } #endif #if defined(clip_point_source_id_enabled) { // point source id filter vec2 range = uFilterPointSourceIDClipRange; if(pointSourceID < range.x || pointSourceID > range.y){ gl_Position = vec4(100.0, 100.0, 100.0, 0.0); return; } } #endif int clipVolumesCount = 0; int insideCount = 0; #if defined(num_clipboxes) && num_clipboxes > 0 for(int i = 0; i < num_clipboxes; i++){ vec4 clipPosition = clipBoxes[i] * modelMatrix * vec4( position, 1.0 ); bool inside = -0.5 <= clipPosition.x && clipPosition.x <= 0.5; inside = inside && -0.5 <= clipPosition.y && clipPosition.y <= 0.5; inside = inside && -0.5 <= clipPosition.z && clipPosition.z <= 0.5; insideCount = insideCount + (inside ? 1 : 0); clipVolumesCount++; } #endif #if defined(num_clippolygons) && num_clippolygons > 0 for(int i = 0; i < num_clippolygons; i++) { bool inside = pointInClipPolygon(position, i); insideCount = insideCount + (inside ? 1 : 0); clipVolumesCount++; } #endif bool insideAny = insideCount > 0; bool insideAll = (clipVolumesCount > 0) && (clipVolumesCount == insideCount); if(clipMethod == CLIPMETHOD_INSIDE_ANY){ if(insideAny && clipTask == CLIPTASK_HIGHLIGHT){ vColor.r += 0.5; }else if(!insideAny && clipTask == CLIPTASK_SHOW_INSIDE){ gl_Position = vec4(100.0, 100.0, 100.0, 1.0); }else if(insideAny && clipTask == CLIPTASK_SHOW_OUTSIDE){ gl_Position = vec4(100.0, 100.0, 100.0, 1.0); } }else if(clipMethod == CLIPMETHOD_INSIDE_ALL){ if(insideAll && clipTask == CLIPTASK_HIGHLIGHT){ vColor.r += 0.5; }else if(!insideAll && clipTask == CLIPTASK_SHOW_INSIDE){ gl_Position = vec4(100.0, 100.0, 100.0, 1.0); }else if(insideAll && clipTask == CLIPTASK_SHOW_OUTSIDE){ gl_Position = vec4(100.0, 100.0, 100.0, 1.0); } } } // // ## ## ### #### ## ## // ### ### ## ## ## ### ## // #### #### ## ## ## #### ## // ## ### ## ## ## ## ## ## ## // ## ## ######### ## ## #### // ## ## ## ## ## ## ### // ## ## ## ## #### ## ## // void main() { vec4 mvPosition = modelViewMatrix * vec4(position, 1.0 ); vViewPosition = mvPosition.xyz; gl_Position = projectionMatrix * mvPosition; vLogDepth = log2(-mvPosition.z); //gl_Position = vec4(0.0, 0.0, 0.0, 1.0); //gl_PointSize = 5.0; // POINT SIZE float pointSize = getPointSize(); //float pointSize = 2.0; gl_PointSize = pointSize; vPointSize = pointSize; // COLOR vColor = getColor(); // vColor = vec3(1.0, 0.0, 0.0); //gl_Position = vec4(0.0, 0.0, 0.0, 1.0); //gl_Position = vec4(position.xzy / 1000.0, 1.0 ); //gl_PointSize = 5.0; //vColor = vec3(1.0, 1.0, 1.0); // only for "replacing" approaches // if(getLOD() != uLevel){ // gl_Position = vec4(10.0, 10.0, 10.0, 1.0); // } #if defined hq_depth_pass float originalDepth = gl_Position.w; float adjustedDepth = originalDepth + 2.0 * vRadius; float adjust = adjustedDepth / originalDepth; mvPosition.xyz = mvPosition.xyz * adjust; gl_Position = projectionMatrix * mvPosition; #endif // CLIPPING doClipping(); #if defined(num_clipspheres) && num_clipspheres > 0 for(int i = 0; i < num_clipspheres; i++){ vec4 sphereLocal = uClipSpheres[i] * mvPosition; float distance = length(sphereLocal.xyz); if(distance < 1.0){ float w = distance; vec3 cGradient = texture2D(gradient, vec2(w, 1.0 - w)).rgb; vColor = cGradient; //vColor = cGradient * 0.7 + vColor * 0.3; } } #endif #if defined(num_shadowmaps) && num_shadowmaps > 0 const float sm_near = 0.1; const float sm_far = 10000.0; for(int i = 0; i < num_shadowmaps; i++){ vec3 viewPos = (uShadowWorldView[i] * vec4(position, 1.0)).xyz; float distanceToLight = abs(viewPos.z); vec4 projPos = uShadowProj[i] * uShadowWorldView[i] * vec4(position, 1); vec3 nc = projPos.xyz / projPos.w; float u = nc.x * 0.5 + 0.5; float v = nc.y * 0.5 + 0.5; vec2 sampleStep = vec2(1.0 / (2.0*1024.0), 1.0 / (2.0*1024.0)) * 1.5; vec2 sampleLocations[9]; sampleLocations[0] = vec2(0.0, 0.0); sampleLocations[1] = sampleStep; sampleLocations[2] = -sampleStep; sampleLocations[3] = vec2(sampleStep.x, -sampleStep.y); sampleLocations[4] = vec2(-sampleStep.x, sampleStep.y); sampleLocations[5] = vec2(0.0, sampleStep.y); sampleLocations[6] = vec2(0.0, -sampleStep.y); sampleLocations[7] = vec2(sampleStep.x, 0.0); sampleLocations[8] = vec2(-sampleStep.x, 0.0); float visibleSamples = 0.0; float numSamples = 0.0; float bias = vRadius * 2.0; for(int j = 0; j < 9; j++){ vec4 depthMapValue = texture2D(uShadowMap[i], vec2(u, v) + sampleLocations[j]); float linearDepthFromSM = depthMapValue.x + bias; float linearDepthFromViewer = distanceToLight; if(linearDepthFromSM > linearDepthFromViewer){ visibleSamples += 1.0; } numSamples += 1.0; } float visibility = visibleSamples / numSamples; if(u < 0.0 || u > 1.0 || v < 0.0 || v > 1.0 || nc.x < -1.0 || nc.x > 1.0 || nc.y < -1.0 || nc.y > 1.0 || nc.z < -1.0 || nc.z > 1.0){ //vColor = vec3(0.0, 0.0, 0.2); }else{ //vColor = vec3(1.0, 1.0, 1.0) * visibility + vec3(1.0, 1.0, 1.0) * vec3(0.5, 0.0, 0.0) * (1.0 - visibility); vColor = vColor * visibility + vColor * uShadowColor * (1.0 - visibility); } } #endif } `; Shaders["pointcloud.fs"] = ` #if defined paraboloid_point_shape #extension GL_EXT_frag_depth : enable #endif precision highp float; precision highp int; uniform mat4 viewMatrix; uniform mat4 uViewInv; uniform mat4 uProjInv; uniform vec3 cameraPosition; uniform mat4 projectionMatrix; uniform float uOpacity; uniform float blendHardness; uniform float blendDepthSupplement; uniform float fov; uniform float uSpacing; uniform float near; uniform float far; uniform float uPCIndex; uniform float uScreenWidth; uniform float uScreenHeight; varying vec3 vColor; varying float vLogDepth; varying vec3 vViewPosition; varying float vRadius; varying float vPointSize; varying vec3 vPosition; float specularStrength = 1.0; void main() { // gl_FragColor = vec4(vColor, 1.0); vec3 color = vColor; float depth = gl_FragCoord.z; #if defined(circle_point_shape) || defined(paraboloid_point_shape) float u = 2.0 * gl_PointCoord.x - 1.0; float v = 2.0 * gl_PointCoord.y - 1.0; #endif #if defined(circle_point_shape) float cc = u*u + v*v; if(cc > 1.0){ discard; } #endif #if defined color_type_indices gl_FragColor = vec4(color, uPCIndex / 255.0); #else gl_FragColor = vec4(color, uOpacity); #endif #if defined paraboloid_point_shape float wi = 0.0 - ( u*u + v*v); vec4 pos = vec4(vViewPosition, 1.0); pos.z += wi * vRadius; float linearDepth = -pos.z; pos = projectionMatrix * pos; pos = pos / pos.w; float expDepth = pos.z; depth = (pos.z + 1.0) / 2.0; gl_FragDepthEXT = depth; #if defined(color_type_depth) color.r = linearDepth; color.g = expDepth; #endif #if defined(use_edl) gl_FragColor.a = log2(linearDepth); #endif #else #if defined(use_edl) gl_FragColor.a = vLogDepth; #endif #endif #if defined(weighted_splats) float distance = 2.0 * length(gl_PointCoord.xy - 0.5); float weight = max(0.0, 1.0 - distance); weight = pow(weight, 1.5); gl_FragColor.a = weight; gl_FragColor.xyz = gl_FragColor.xyz * weight; #endif //gl_FragColor = vec4(0.0, 0.7, 0.0, 1.0); } `; Shaders["pointcloud_sm.vs"] = ` precision mediump float; precision mediump int; attribute vec3 position; attribute vec3 color; uniform mat4 modelMatrix; uniform mat4 modelViewMatrix; uniform mat4 projectionMatrix; uniform mat4 viewMatrix; uniform float uScreenWidth; uniform float uScreenHeight; uniform float near; uniform float far; uniform float uSpacing; uniform float uOctreeSize; uniform float uLevel; uniform float uVNStart; uniform sampler2D visibleNodes; varying float vLinearDepth; varying vec3 vColor; #define PI 3.141592653589793 // --------------------- // OCTREE // --------------------- #if defined(adaptive_point_size) /** * number of 1-bits up to inclusive index position * number is treated as if it were an integer in the range 0-255 * */ float numberOfOnes(float number, float index){ float tmp = mod(number, pow(2.0, index + 1.0)); float numOnes = 0.0; for(float i = 0.0; i < 8.0; i++){ if(mod(tmp, 2.0) != 0.0){ numOnes++; } tmp = floor(tmp / 2.0); } return numOnes; } /** * checks whether the bit at index is 1 * number is treated as if it were an integer in the range 0-255 * */ bool isBitSet(float number, float index){ return mod(floor(number / pow(2.0, index)), 2.0) != 0.0; } /** * find the LOD at the point position */ float getLOD(){ vec3 offset = vec3(0.0, 0.0, 0.0); float iOffset = uVNStart; float depth = uLevel; for(float i = 0.0; i <= 30.0; i++){ float nodeSizeAtLevel = uOctreeSize / pow(2.0, i + uLevel + 0.0); vec3 index3d = (position-offset) / nodeSizeAtLevel; index3d = floor(index3d + 0.5); float index = 4.0 * index3d.x + 2.0 * index3d.y + index3d.z; vec4 value = texture2D(visibleNodes, vec2(iOffset / 2048.0, 0.0)); float mask = value.r * 255.0; if(isBitSet(mask, index)){ // there are more visible child nodes at this position iOffset = iOffset + value.g * 255.0 * 256.0 + value.b * 255.0 + numberOfOnes(mask, index - 1.0); depth++; }else{ // no more visible child nodes at this position return depth; } offset = offset + (vec3(1.0, 1.0, 1.0) * nodeSizeAtLevel * 0.5) * index3d; } return depth; } #endif float getPointSize(){ float pointSize = 1.0; float slope = tan(fov / 2.0); float projFactor = -0.5 * uScreenHeight / (slope * vViewPosition.z); float r = uOctreeSpacing * 1.5; vRadius = r; #if defined fixed_point_size pointSize = size; #elif defined attenuated_point_size if(uUseOrthographicCamera){ pointSize = size; }else{ pointSize = pointSize * projFactor; } #elif defined adaptive_point_size if(uUseOrthographicCamera) { float worldSpaceSize = 1.5 * size * r / getPointSizeAttenuation(); pointSize = (worldSpaceSize / uOrthoWidth) * uScreenWidth; } else { float worldSpaceSize = 1.5 * size * r / getPointSizeAttenuation(); pointSize = worldSpaceSize * projFactor; } #endif pointSize = max(minSize, pointSize); pointSize = min(maxSize, pointSize); vRadius = pointSize / projFactor; return pointSize; } void main() { vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); vLinearDepth = gl_Position.w; float pointSize = getPointSize(); gl_PointSize = pointSize; } `; Shaders["pointcloud_sm.fs"] = ` precision mediump float; precision mediump int; varying vec3 vColor; varying float vLinearDepth; void main() { //gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); //gl_FragColor = vec4(vColor, 1.0); //gl_FragColor = vec4(vLinearDepth, pow(vLinearDepth, 2.0), 0.0, 1.0); gl_FragColor = vec4(vLinearDepth, vLinearDepth / 30.0, vLinearDepth / 30.0, 1.0); } `; Shaders["normalize.vs"] = ` precision mediump float; precision mediump int; attribute vec3 position; attribute vec2 uv; uniform mat4 projectionMatrix; uniform mat4 modelViewMatrix; varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); }`; Shaders["normalize.fs"] = ` #extension GL_EXT_frag_depth : enable precision mediump float; precision mediump int; uniform sampler2D uWeightMap; uniform sampler2D uDepthMap; varying vec2 vUv; void main() { float depth = texture2D(uDepthMap, vUv).r; if(depth >= 1.0){ discard; } gl_FragColor = vec4(depth, 1.0, 0.0, 1.0); vec4 color = texture2D(uWeightMap, vUv); color = color / color.w; gl_FragColor = vec4(color.xyz, 1.0); gl_FragDepthEXT = depth; }`; Shaders["normalize_and_edl.fs"] = ` #extension GL_EXT_frag_depth : enable // // adapted from the EDL shader code from Christian Boucheny in cloud compare: // https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL // precision mediump float; precision mediump int; uniform sampler2D uWeightMap; uniform sampler2D uEDLMap; uniform sampler2D uDepthMap; uniform float screenWidth; uniform float screenHeight; uniform vec2 neighbours[NEIGHBOUR_COUNT]; uniform float edlStrength; uniform float radius; varying vec2 vUv; float response(float depth){ vec2 uvRadius = radius / vec2(screenWidth, screenHeight); float sum = 0.0; for(int i = 0; i < NEIGHBOUR_COUNT; i++){ vec2 uvNeighbor = vUv + uvRadius * neighbours[i]; float neighbourDepth = texture2D(uEDLMap, uvNeighbor).a; if(neighbourDepth != 0.0){ if(depth == 0.0){ sum += 100.0; }else{ sum += max(0.0, depth - neighbourDepth); } } } return sum / float(NEIGHBOUR_COUNT); } void main() { float edlDepth = texture2D(uEDLMap, vUv).a; float res = response(edlDepth); float shade = exp(-res * 300.0 * edlStrength); float depth = texture2D(uDepthMap, vUv).r; if(depth >= 1.0 && res == 0.0){ discard; } vec4 color = texture2D(uWeightMap, vUv); color = color / color.w; color = color * shade; gl_FragColor = vec4(color.xyz, 1.0); gl_FragDepthEXT = depth; }`; Shaders["edl.vs"] = ` precision mediump float; precision mediump int; attribute vec3 position; attribute vec2 uv; uniform mat4 projectionMatrix; uniform mat4 modelViewMatrix; varying vec2 vUv; void main() { vUv = uv; vec4 mvPosition = modelViewMatrix * vec4(position,1.0); gl_Position = projectionMatrix * mvPosition; }`; Shaders["edl.fs"] = ` #extension GL_EXT_frag_depth : enable // // adapted from the EDL shader code from Christian Boucheny in cloud compare: // https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL // precision mediump float; precision mediump int; uniform float screenWidth; uniform float screenHeight; uniform vec2 neighbours[NEIGHBOUR_COUNT]; uniform float edlStrength; uniform float radius; uniform float opacity; uniform float uNear; uniform float uFar; uniform mat4 uProj; uniform sampler2D uEDLColor; uniform sampler2D uEDLDepth; varying vec2 vUv; float response(float depth){ vec2 uvRadius = radius / vec2(screenWidth, screenHeight); float sum = 0.0; for(int i = 0; i < NEIGHBOUR_COUNT; i++){ vec2 uvNeighbor = vUv + uvRadius * neighbours[i]; float neighbourDepth = texture2D(uEDLColor, uvNeighbor).a; neighbourDepth = (neighbourDepth == 1.0) ? 0.0 : neighbourDepth; if(neighbourDepth != 0.0){ if(depth == 0.0){ sum += 100.0; }else{ sum += max(0.0, depth - neighbourDepth); } } } return sum / float(NEIGHBOUR_COUNT); } void main(){ vec4 cEDL = texture2D(uEDLColor, vUv); float depth = cEDL.a; depth = (depth == 1.0) ? 0.0 : depth; float res = response(depth); float shade = exp(-res * 300.0 * edlStrength); gl_FragColor = vec4(cEDL.rgb * shade, opacity); { // write regular hyperbolic depth values to depth buffer float dl = pow(2.0, depth); vec4 dp = uProj * vec4(0.0, 0.0, -dl, 1.0); float pz = dp.z / dp.w; float fragDepth = (pz + 1.0) / 2.0; gl_FragDepthEXT = fragDepth; } if(depth == 0.0){ discard; } } `; Shaders["blur.vs"] = ` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position,1.0); }`; Shaders["blur.fs"] = ` uniform mat4 projectionMatrix; uniform float screenWidth; uniform float screenHeight; uniform float near; uniform float far; uniform sampler2D map; varying vec2 vUv; void main() { float dx = 1.0 / screenWidth; float dy = 1.0 / screenHeight; vec3 color = vec3(0.0, 0.0, 0.0); color += texture2D(map, vUv + vec2(-dx, -dy)).rgb; color += texture2D(map, vUv + vec2( 0, -dy)).rgb; color += texture2D(map, vUv + vec2(+dx, -dy)).rgb; color += texture2D(map, vUv + vec2(-dx, 0)).rgb; color += texture2D(map, vUv + vec2( 0, 0)).rgb; color += texture2D(map, vUv + vec2(+dx, 0)).rgb; color += texture2D(map, vUv + vec2(-dx, dy)).rgb; color += texture2D(map, vUv + vec2( 0, dy)).rgb; color += texture2D(map, vUv + vec2(+dx, dy)).rgb; color = color / 9.0; gl_FragColor = vec4(color, 1.0); }`; const ClassificationScheme = { DEFAULT: { 0: { visible: true, name: 'never classified' , color: [0.5, 0.5, 0.5, 1.0] }, 1: { visible: true, name: 'unclassified' , color: [0.5, 0.5, 0.5, 1.0] }, 2: { visible: true, name: 'ground' , color: [0.63, 0.32, 0.18, 1.0] }, 3: { visible: true, name: 'low vegetation' , color: [0.0, 1.0, 0.0, 1.0] }, 4: { visible: true, name: 'medium vegetation' , color: [0.0, 0.8, 0.0, 1.0] }, 5: { visible: true, name: 'high vegetation' , color: [0.0, 0.6, 0.0, 1.0] }, 6: { visible: true, name: 'building' , color: [1.0, 0.66, 0.0, 1.0] }, 7: { visible: true, name: 'low point(noise)' , color: [1.0, 0.0, 1.0, 1.0] }, 8: { visible: true, name: 'key-point' , color: [1.0, 0.0, 0.0, 1.0] }, 9: { visible: true, name: 'water' , color: [0.0, 0.0, 1.0, 1.0] }, 12: { visible: true, name: 'overlap' , color: [1.0, 1.0, 0.0, 1.0] }, DEFAULT: { visible: true, name: 'default' , color: [0.3, 0.6, 0.6, 0.5] }, } }; Object.defineProperty(ClassificationScheme, 'RANDOM', { get: function() { let scheme = {}; for(let i = 0; i <= 255; i++){ scheme[i] = new Vector4(Math.random(), Math.random(), Math.random()); } scheme["DEFAULT"] = new Vector4(Math.random(), Math.random(), Math.random()); return scheme; } }); // // how to calculate the radius of a projected sphere in screen space // http://stackoverflow.com/questions/21648630/radius-of-projected-sphere-in-screen-space // http://stackoverflow.com/questions/3717226/radius-of-projected-sphere // class PointCloudMaterial$1 extends RawShaderMaterial { constructor (parameters = {}) { super(); this.visibleNodesTexture = Utils.generateDataTexture(2048, 1, new Color(0xffffff)); this.visibleNodesTexture.minFilter = NearestFilter; this.visibleNodesTexture.magFilter = NearestFilter; let getValid = (a, b) => { if(a !== undefined){ return a; }else { return b; } }; let pointSize = getValid(parameters.size, 1.0); let minSize = getValid(parameters.minSize, 2.0); let maxSize = getValid(parameters.maxSize, 50.0); let treeType = getValid(parameters.treeType, TreeType.OCTREE); this._pointSizeType = PointSizeType.FIXED; this._shape = PointShape.SQUARE; this._useClipBox = false; this.clipBoxes = []; this.clipPolygons = []; this._weighted = false; this._gradient = Gradients.SPECTRAL; this.gradientTexture = PointCloudMaterial$1.generateGradientTexture(this._gradient); this._matcap = "matcap.jpg"; this.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap); this.lights = false; this.fog = false; this._treeType = treeType; this._useEDL = false; this.defines = new Map(); this.ranges = new Map(); this._activeAttributeName = null; this._defaultIntensityRangeChanged = false; this._defaultElevationRangeChanged = false; { const [width, height] = [256, 1]; let data = new Uint8Array(width * 4); let texture = new DataTexture(data, width, height, RGBAFormat); texture.magFilter = NearestFilter; texture.needsUpdate = true; this.classificationTexture = texture; } this.attributes = { position: { type: 'fv', value: [] }, color: { type: 'fv', value: [] }, normal: { type: 'fv', value: [] }, intensity: { type: 'f', value: [] }, classification: { type: 'f', value: [] }, returnNumber: { type: 'f', value: [] }, numberOfReturns: { type: 'f', value: [] }, pointSourceID: { type: 'f', value: [] }, indices: { type: 'fv', value: [] } }; this.uniforms = { level: { type: "f", value: 0.0 }, vnStart: { type: "f", value: 0.0 }, spacing: { type: "f", value: 1.0 }, blendHardness: { type: "f", value: 2.0 }, blendDepthSupplement: { type: "f", value: 0.0 }, fov: { type: "f", value: 1.0 }, screenWidth: { type: "f", value: 1.0 }, screenHeight: { type: "f", value: 1.0 }, near: { type: "f", value: 0.1 }, far: { type: "f", value: 1.0 }, uColor: { type: "c", value: new Color( 0xffffff ) }, uOpacity: { type: "f", value: 1.0 }, size: { type: "f", value: pointSize }, minSize: { type: "f", value: minSize }, maxSize: { type: "f", value: maxSize }, octreeSize: { type: "f", value: 0 }, bbSize: { type: "fv", value: [0, 0, 0] }, elevationRange: { type: "2fv", value: [0, 0] }, clipBoxCount: { type: "f", value: 0 }, //clipSphereCount: { type: "f", value: 0 }, clipPolygonCount: { type: "i", value: 0 }, clipBoxes: { type: "Matrix4fv", value: [] }, //clipSpheres: { type: "Matrix4fv", value: [] }, clipPolygons: { type: "3fv", value: [] }, clipPolygonVCount: { type: "iv", value: [] }, clipPolygonVP: { type: "Matrix4fv", value: [] }, visibleNodes: { type: "t", value: this.visibleNodesTexture }, pcIndex: { type: "f", value: 0 }, gradient: { type: "t", value: this.gradientTexture }, classificationLUT: { type: "t", value: this.classificationTexture }, uHQDepthMap: { type: "t", value: null }, toModel: { type: "Matrix4f", value: [] }, diffuse: { type: "fv", value: [1, 1, 1] }, transition: { type: "f", value: 0.5 }, intensityRange: { type: "fv", value: [Infinity, -Infinity] }, intensity_gbc: { type: "fv", value: [1, 0, 0]}, uRGB_gbc: { type: "fv", value: [1, 0, 0]}, // intensityGamma: { type: "f", value: 1 }, // intensityContrast: { type: "f", value: 0 }, // intensityBrightness:{ type: "f", value: 0 }, // rgbGamma: { type: "f", value: 1 }, // rgbContrast: { type: "f", value: 0 }, // rgbBrightness: { type: "f", value: 0 }, wRGB: { type: "f", value: 1 }, wIntensity: { type: "f", value: 0 }, wElevation: { type: "f", value: 0 }, wClassification: { type: "f", value: 0 }, wReturnNumber: { type: "f", value: 0 }, wSourceID: { type: "f", value: 0 }, useOrthographicCamera: { type: "b", value: false }, elevationGradientRepat: { type: "i", value: ElevationGradientRepeat.CLAMP }, clipTask: { type: "i", value: 1 }, clipMethod: { type: "i", value: 1 }, uShadowColor: { type: "3fv", value: [0, 0, 0] }, uExtraScale: { type: "f", value: 1}, uExtraOffset: { type: "f", value: 0}, uExtraRange: { type: "2fv", value: [0, 1] }, uExtraGammaBrightContr: { type: "3fv", value: [1, 0, 0] }, uFilterReturnNumberRange: { type: "fv", value: [0, 7]}, uFilterNumberOfReturnsRange: { type: "fv", value: [0, 7]}, uFilterGPSTimeClipRange: { type: "fv", value: [0, 7]}, uFilterPointSourceIDClipRange: { type: "fv", value: [0, 65535]}, matcapTextureUniform: { type: "t", value: this.matcapTexture }, backfaceCulling: { type: "b", value: false }, }; this.classification = ClassificationScheme.DEFAULT; this.defaultAttributeValues.normal = [0, 0, 0]; this.defaultAttributeValues.classification = [0, 0, 0]; this.defaultAttributeValues.indices = [0, 0, 0, 0]; this.vertexShader = Shaders['pointcloud.vs']; this.fragmentShader = Shaders['pointcloud.fs']; this.vertexColors = VertexColors; this.updateShaderSource(); } setDefine(key, value){ if(value !== undefined && value !== null){ if(this.defines.get(key) !== value){ this.defines.set(key, value); this.updateShaderSource(); } }else { this.removeDefine(key); } } removeDefine(key){ this.defines.delete(key); } updateShaderSource () { let vs = Shaders['pointcloud.vs']; let fs = Shaders['pointcloud.fs']; let definesString = this.getDefines(); let vsVersionIndex = vs.indexOf("#version "); let fsVersionIndex = fs.indexOf("#version "); if(vsVersionIndex >= 0){ vs = vs.replace(/(#version .*)/, `$1\n${definesString}`); }else { vs = `${definesString}\n${vs}`; } if(fsVersionIndex >= 0){ fs = fs.replace(/(#version .*)/, `$1\n${definesString}`); }else { fs = `${definesString}\n${fs}`; } this.vertexShader = vs; this.fragmentShader = fs; if (this.opacity === 1.0) { this.blending = NoBlending; this.transparent = false; this.depthTest = true; this.depthWrite = true; this.depthFunc = LessEqualDepth; } else if (this.opacity < 1.0 && !this.useEDL) { this.blending = AdditiveBlending; this.transparent = true; this.depthTest = false; this.depthWrite = true; this.depthFunc = AlwaysDepth; } if (this.weighted) { this.blending = AdditiveBlending; this.transparent = true; this.depthTest = true; this.depthWrite = false; } this.needsUpdate = true; } getDefines () { let defines = []; if (this.pointSizeType === PointSizeType.FIXED) { defines.push('#define fixed_point_size'); } else if (this.pointSizeType === PointSizeType.ATTENUATED) { defines.push('#define attenuated_point_size'); } else if (this.pointSizeType === PointSizeType.ADAPTIVE) { defines.push('#define adaptive_point_size'); } if (this.shape === PointShape.SQUARE) { defines.push('#define square_point_shape'); } else if (this.shape === PointShape.CIRCLE) { defines.push('#define circle_point_shape'); } else if (this.shape === PointShape.PARABOLOID) { defines.push('#define paraboloid_point_shape'); } if (this._useEDL) { defines.push('#define use_edl'); } if(this.activeAttributeName){ let attributeName = this.activeAttributeName.replace(/[^a-zA-Z0-9]/g, '_'); defines.push(`#define color_type_${attributeName}`); } if(this._treeType === TreeType.OCTREE){ defines.push('#define tree_type_octree'); }else if(this._treeType === TreeType.KDTREE){ defines.push('#define tree_type_kdtree'); } if (this.weighted) { defines.push('#define weighted_splats'); } for(let [key, value] of this.defines){ defines.push(value); } return defines.join("\n"); } setClipBoxes (clipBoxes) { if (!clipBoxes) { return; } let doUpdate = (this.clipBoxes.length !== clipBoxes.length) && (clipBoxes.length === 0 || this.clipBoxes.length === 0); this.uniforms.clipBoxCount.value = this.clipBoxes.length; this.clipBoxes = clipBoxes; if (doUpdate) { this.updateShaderSource(); } this.uniforms.clipBoxes.value = new Float32Array(this.clipBoxes.length * 16); for (let i = 0; i < this.clipBoxes.length; i++) { let box = clipBoxes[i]; this.uniforms.clipBoxes.value.set(box.inverse.elements, 16 * i); } for (let i = 0; i < this.uniforms.clipBoxes.value.length; i++) { if (Number.isNaN(this.uniforms.clipBoxes.value[i])) { this.uniforms.clipBoxes.value[i] = Infinity; } } } setClipPolygons(clipPolygons, maxPolygonVertices) { if(!clipPolygons){ return; } this.clipPolygons = clipPolygons; let doUpdate = (this.clipPolygons.length !== clipPolygons.length); if(doUpdate){ this.updateShaderSource(); } } get gradient(){ return this._gradient; } set gradient (value) { if (this._gradient !== value) { this._gradient = value; this.gradientTexture = PointCloudMaterial$1.generateGradientTexture(this._gradient); this.uniforms.gradient.value = this.gradientTexture; } } get matcap(){ return this._matcap; } set matcap (value) { if (this._matcap !== value) { this._matcap = value; this.matcapTexture = Potree.PointCloudMaterial.generateMatcapTexture(this._matcap); this.uniforms.matcapTextureUniform.value = this.matcapTexture; } } get useOrthographicCamera() { return this.uniforms.useOrthographicCamera.value; } set useOrthographicCamera(value) { if(this.uniforms.useOrthographicCamera.value !== value){ this.uniforms.useOrthographicCamera.value = value; } } get backfaceCulling() { return this.uniforms.backfaceCulling.value; } set backfaceCulling(value) { if(this.uniforms.backfaceCulling.value !== value){ this.uniforms.backfaceCulling.value = value; this.dispatchEvent({type: 'backface_changed', target: this}); } } recomputeClassification () { const classification = this.classification; const data = this.classificationTexture.image.data; let width = 256; const black = [1, 1, 1, 1]; let valuesChanged = false; for (let i = 0; i < width; i++) { let color; let visible = true; if (classification[i]) { color = classification[i].color; visible = classification[i].visible; } else if (classification[i % 32]) { color = classification[i % 32].color; visible = classification[i % 32].visible; } else if(classification.DEFAULT) { color = classification.DEFAULT.color; visible = classification.DEFAULT.visible; }else { color = black; } const r = parseInt(255 * color[0]); const g = parseInt(255 * color[1]); const b = parseInt(255 * color[2]); const a = visible ? parseInt(255 * color[3]) : 0; if(data[4 * i + 0] !== r){ data[4 * i + 0] = r; valuesChanged = true; } if(data[4 * i + 1] !== g){ data[4 * i + 1] = g; valuesChanged = true; } if(data[4 * i + 2] !== b){ data[4 * i + 2] = b; valuesChanged = true; } if(data[4 * i + 3] !== a){ data[4 * i + 3] = a; valuesChanged = true; } } if(valuesChanged){ this.classificationTexture.needsUpdate = true; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get spacing () { return this.uniforms.spacing.value; } set spacing (value) { if (this.uniforms.spacing.value !== value) { this.uniforms.spacing.value = value; } } get useClipBox () { return this._useClipBox; } set useClipBox (value) { if (this._useClipBox !== value) { this._useClipBox = value; this.updateShaderSource(); } } get clipTask(){ return this.uniforms.clipTask.value; } set clipTask(mode){ this.uniforms.clipTask.value = mode; } get elevationGradientRepat(){ return this.uniforms.elevationGradientRepat.value; } set elevationGradientRepat(mode){ this.uniforms.elevationGradientRepat.value = mode; } get clipMethod(){ return this.uniforms.clipMethod.value; } set clipMethod(mode){ this.uniforms.clipMethod.value = mode; } get weighted(){ return this._weighted; } set weighted (value) { if (this._weighted !== value) { this._weighted = value; this.updateShaderSource(); } } get fov () { return this.uniforms.fov.value; } set fov (value) { if (this.uniforms.fov.value !== value) { this.uniforms.fov.value = value; // this.updateShaderSource(); } } get screenWidth () { return this.uniforms.screenWidth.value; } set screenWidth (value) { if (this.uniforms.screenWidth.value !== value) { this.uniforms.screenWidth.value = value; // this.updateShaderSource(); } } get screenHeight () { return this.uniforms.screenHeight.value; } set screenHeight (value) { if (this.uniforms.screenHeight.value !== value) { this.uniforms.screenHeight.value = value; // this.updateShaderSource(); } } get near () { return this.uniforms.near.value; } set near (value) { if (this.uniforms.near.value !== value) { this.uniforms.near.value = value; } } get far () { return this.uniforms.far.value; } set far (value) { if (this.uniforms.far.value !== value) { this.uniforms.far.value = value; } } get opacity(){ return this.uniforms.uOpacity.value; } set opacity (value) { if (this.uniforms && this.uniforms.uOpacity) { if (this.uniforms.uOpacity.value !== value) { this.uniforms.uOpacity.value = value; this.updateShaderSource(); this.dispatchEvent({ type: 'opacity_changed', target: this }); this.dispatchEvent({ type: 'material_property_changed', target: this }); } } } get activeAttributeName(){ return this._activeAttributeName; } set activeAttributeName(value){ if (this._activeAttributeName !== value) { this._activeAttributeName = value; this.updateShaderSource(); this.dispatchEvent({ type: 'active_attribute_changed', target: this }); this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get pointSizeType () { return this._pointSizeType; } set pointSizeType (value) { if (this._pointSizeType !== value) { this._pointSizeType = value; this.updateShaderSource(); this.dispatchEvent({ type: 'point_size_type_changed', target: this }); this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get useEDL(){ return this._useEDL; } set useEDL (value) { if (this._useEDL !== value) { this._useEDL = value; this.updateShaderSource(); } } get color () { return this.uniforms.uColor.value; } set color (value) { if (!this.uniforms.uColor.value.equals(value)) { this.uniforms.uColor.value.copy(value); this.dispatchEvent({ type: 'color_changed', target: this }); this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get shape () { return this._shape; } set shape (value) { if (this._shape !== value) { this._shape = value; this.updateShaderSource(); this.dispatchEvent({type: 'point_shape_changed', target: this}); this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get treeType () { return this._treeType; } set treeType (value) { if (this._treeType !== value) { this._treeType = value; this.updateShaderSource(); } } get bbSize () { return this.uniforms.bbSize.value; } set bbSize (value) { this.uniforms.bbSize.value = value; } get size () { return this.uniforms.size.value; } set size (value) { if (this.uniforms.size.value !== value) { this.uniforms.size.value = value; this.dispatchEvent({ type: 'point_size_changed', target: this }); this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get minSize(){ return this.uniforms.minSize.value; } set minSize(value){ if (this.uniforms.minSize.value !== value) { this.uniforms.minSize.value = value; this.dispatchEvent({ type: 'point_size_changed', target: this }); this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get elevationRange () { return this.uniforms.elevationRange.value; } set elevationRange (value) { let changed = this.uniforms.elevationRange.value[0] !== value[0] || this.uniforms.elevationRange.value[1] !== value[1]; if(changed){ this.uniforms.elevationRange.value = value; this._defaultElevationRangeChanged = true; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get heightMin () { return this.uniforms.elevationRange.value[0]; } set heightMin (value) { this.elevationRange = [value, this.elevationRange[1]]; } get heightMax () { return this.uniforms.elevationRange.value[1]; } set heightMax (value) { this.elevationRange = [this.elevationRange[0], value]; } get transition () { return this.uniforms.transition.value; } set transition (value) { this.uniforms.transition.value = value; } get intensityRange () { return this.uniforms.intensityRange.value; } set intensityRange (value) { if (!(value instanceof Array && value.length === 2)) { return; } if (value[0] === this.uniforms.intensityRange.value[0] && value[1] === this.uniforms.intensityRange.value[1]) { return; } this.uniforms.intensityRange.value = value; this._defaultIntensityRangeChanged = true; this.dispatchEvent({ type: 'material_property_changed', target: this }); } get intensityGamma () { return this.uniforms.intensity_gbc.value[0]; } set intensityGamma (value) { if (this.uniforms.intensity_gbc.value[0] !== value) { this.uniforms.intensity_gbc.value[0] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get intensityContrast () { return this.uniforms.intensity_gbc.value[2]; } set intensityContrast (value) { if (this.uniforms.intensity_gbc.value[2] !== value) { this.uniforms.intensity_gbc.value[2] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get intensityBrightness () { return this.uniforms.intensity_gbc.value[1]; } set intensityBrightness (value) { if (this.uniforms.intensity_gbc.value[1] !== value) { this.uniforms.intensity_gbc.value[1] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get rgbGamma () { return this.uniforms.uRGB_gbc.value[0]; } set rgbGamma (value) { if (this.uniforms.uRGB_gbc.value[0] !== value) { this.uniforms.uRGB_gbc.value[0] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get rgbContrast () { return this.uniforms.uRGB_gbc.value[2]; } set rgbContrast (value) { if (this.uniforms.uRGB_gbc.value[2] !== value) { this.uniforms.uRGB_gbc.value[2] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get rgbBrightness () { return this.uniforms.uRGB_gbc.value[1]; } set rgbBrightness (value) { if (this.uniforms.uRGB_gbc.value[1] !== value) { this.uniforms.uRGB_gbc.value[1] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get extraGamma () { return this.uniforms.uExtraGammaBrightContr.value[0]; } set extraGamma (value) { if (this.uniforms.uExtraGammaBrightContr.value[0] !== value) { this.uniforms.uExtraGammaBrightContr.value[0] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get extraBrightness () { return this.uniforms.uExtraGammaBrightContr.value[1]; } set extraBrightness (value) { if (this.uniforms.uExtraGammaBrightContr.value[1] !== value) { this.uniforms.uExtraGammaBrightContr.value[1] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get extraContrast () { return this.uniforms.uExtraGammaBrightContr.value[2]; } set extraContrast (value) { if (this.uniforms.uExtraGammaBrightContr.value[2] !== value) { this.uniforms.uExtraGammaBrightContr.value[2] = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } getRange(attributeName){ return this.ranges.get(attributeName); } setRange(attributeName, newRange){ let rangeChanged = false; let oldRange = this.ranges.get(attributeName); if(oldRange != null && newRange != null){ rangeChanged = oldRange[0] !== newRange[0] || oldRange[1] !== newRange[1]; }else { rangeChanged = true; } this.ranges.set(attributeName, newRange); if(rangeChanged){ this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get extraRange () { return this.uniforms.uExtraRange.value; } set extraRange (value) { if (!(value instanceof Array && value.length === 2)) { return; } if (value[0] === this.uniforms.uExtraRange.value[0] && value[1] === this.uniforms.uExtraRange.value[1]) { return; } this.uniforms.uExtraRange.value = value; this._defaultExtraRangeChanged = true; this.dispatchEvent({ type: 'material_property_changed', target: this }); } get weightRGB () { return this.uniforms.wRGB.value; } set weightRGB (value) { if(this.uniforms.wRGB.value !== value){ this.uniforms.wRGB.value = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get weightIntensity () { return this.uniforms.wIntensity.value; } set weightIntensity (value) { if(this.uniforms.wIntensity.value !== value){ this.uniforms.wIntensity.value = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get weightElevation () { return this.uniforms.wElevation.value; } set weightElevation (value) { if(this.uniforms.wElevation.value !== value){ this.uniforms.wElevation.value = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get weightClassification () { return this.uniforms.wClassification.value; } set weightClassification (value) { if(this.uniforms.wClassification.value !== value){ this.uniforms.wClassification.value = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get weightReturnNumber () { return this.uniforms.wReturnNumber.value; } set weightReturnNumber (value) { if(this.uniforms.wReturnNumber.value !== value){ this.uniforms.wReturnNumber.value = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } get weightSourceID () { return this.uniforms.wSourceID.value; } set weightSourceID (value) { if(this.uniforms.wSourceID.value !== value){ this.uniforms.wSourceID.value = value; this.dispatchEvent({ type: 'material_property_changed', target: this }); } } static generateGradientTexture (gradient) { let size = 64; // create canvas let canvas = document.createElement('canvas'); canvas.width = size; canvas.height = size; // get context let context = canvas.getContext('2d'); // draw gradient context.rect(0, 0, size, size); let ctxGradient = context.createLinearGradient(0, 0, size, size); for (let i = 0; i < gradient.length; i++) { let step = gradient[i]; ctxGradient.addColorStop(step[0], '#' + step[1].getHexString()); } context.fillStyle = ctxGradient; context.fill(); //let texture = new THREE.Texture(canvas); let texture = new CanvasTexture(canvas); texture.needsUpdate = true; texture.minFilter = LinearFilter; texture.wrap = RepeatWrapping; texture.repeat = 2; // textureImage = texture.image; return texture; } static generateMatcapTexture (matcap) { var url = new URL(Potree.resourcePath + "/textures/matcap/" + matcap).href; let texture = new TextureLoader().load( url ); texture.magFilter = texture.minFilter = LinearFilter; texture.needsUpdate = true; // PotreeConverter_1.6_2018_07_29_windows_x64\PotreeConverter.exe autzen_xyzrgbXYZ_ascii.xyz -f xyzrgbXYZ -a RGB NORMAL -o autzen_xyzrgbXYZ_ascii_a -p index --overwrite // Switch matcap texture on the fly : viewer.scene.pointclouds[0].material.matcap = 'matcap1.jpg'; // For non power of 2, use LinearFilter and dont generate mipmaps, For power of 2, use NearestFilter and generate mipmaps : matcap2.jpg 1 2 8 11 12 13 return texture; } disableEvents(){ if(this._hiddenListeners === undefined){ this._hiddenListeners = this._listeners; this._listeners = {}; } }; enableEvents(){ this._listeners = this._hiddenListeners; this._hiddenListeners = undefined; }; // copyFrom(from){ // var a = 10; // for(let name of Object.keys(this.uniforms)){ // this.uniforms[name].value = from.uniforms[name].value; // } // } // copy(from){ // this.copyFrom(from); // } } class PointCloudOctreeNode extends PointCloudTreeNode { constructor () { super(); //this.children = {}; this.children = []; this.sceneNode = null; this.octree = null; } getNumPoints () { return this.geometryNode.numPoints; } isLoaded () { return true; } isTreeNode () { return true; } isGeometryNode () { return false; } getLevel () { return this.geometryNode.level; } getBoundingSphere () { return this.geometryNode.boundingSphere; } getBoundingBox () { return this.geometryNode.boundingBox; } getChildren () { let children = []; for (let i = 0; i < 8; i++) { if (this.children[i]) { children.push(this.children[i]); } } return children; } getPointsInBox(boxNode){ if(!this.sceneNode){ return null; } let buffer = this.geometryNode.buffer; let posOffset = buffer.offset("position"); let stride = buffer.stride; let view = new DataView(buffer.data); let worldToBox = boxNode.matrixWorld.clone().invert(); let objectToBox = new Matrix4().multiplyMatrices(worldToBox, this.sceneNode.matrixWorld); let inBox = []; let pos = new Vector4(); for(let i = 0; i < buffer.numElements; i++){ let x = view.getFloat32(i * stride + posOffset + 0, true); let y = view.getFloat32(i * stride + posOffset + 4, true); let z = view.getFloat32(i * stride + posOffset + 8, true); pos.set(x, y, z, 1); pos.applyMatrix4(objectToBox); if(-0.5 < pos.x && pos.x < 0.5){ if(-0.5 < pos.y && pos.y < 0.5){ if(-0.5 < pos.z && pos.z < 0.5){ pos.set(x, y, z, 1).applyMatrix4(this.sceneNode.matrixWorld); inBox.push(new Vector3(pos.x, pos.y, pos.z)); } } } } return inBox; } get name () { return this.geometryNode.name; } }; class PointCloudOctree extends PointCloudTree { constructor (geometry, material) { super(); this.pointBudget = Infinity; this.pcoGeometry = geometry; this.boundingBox = this.pcoGeometry.boundingBox; this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); this.material = material || new PointCloudMaterial$1(); this.visiblePointsTarget = 2 * 1000 * 1000; this.minimumNodePixelSize = 150; this.level = 0; this.position.copy(geometry.offset); this.updateMatrix(); { let priorityQueue = ["rgba", "rgb", "intensity", "classification"]; let selected = "rgba"; for(let attributeName of priorityQueue){ let attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === attributeName); if(!attribute){ continue; } let min = attribute.range[0].constructor.name === "Array" ? attribute.range[0] : [attribute.range[0]]; let max = attribute.range[1].constructor.name === "Array" ? attribute.range[1] : [attribute.range[1]]; let range_min = new Vector3(...min); let range_max = new Vector3(...max); let range = range_min.distanceTo(range_max); if(range === 0){ continue; } selected = attributeName; break; } this.material.activeAttributeName = selected; } this.showBoundingBox = false; this.boundingBoxNodes = []; this.loadQueue = []; this.visibleBounds = new Box3(); this.visibleNodes = []; this.visibleGeometry = []; this.generateDEM = false; this.profileRequests = []; this.name = ''; this._visible = true; { let box = [this.pcoGeometry.tightBoundingBox, this.getBoundingBoxWorld()] .find(v => v !== undefined); this.updateMatrixWorld(true); box = Utils.computeTransformedBoundingBox(box, this.matrixWorld); let bMin = box.min.z; let bMax = box.max.z; this.material.heightMin = bMin; this.material.heightMax = bMax; } // TODO read projection from file instead this.projection = geometry.projection; this.fallbackProjection = geometry.fallbackProjection; this.root = this.pcoGeometry.root; } setName (name) { if (this.name !== name) { this.name = name; this.dispatchEvent({type: 'name_changed', name: name, pointcloud: this}); } } getName () { return this.name; } getAttribute(name){ const attribute = this.pcoGeometry.pointAttributes.attributes.find(a => a.name === name); if(attribute){ return attribute; }else { return null; } } getAttributes(){ return this.pcoGeometry.pointAttributes; } toTreeNode (geometryNode, parent) { let node = new PointCloudOctreeNode(); // if(geometryNode.name === "r40206"){ // console.log("creating node for r40206"); // } let sceneNode = new Points(geometryNode.geometry, this.material); sceneNode.name = geometryNode.name; sceneNode.position.copy(geometryNode.boundingBox.min); sceneNode.frustumCulled = false; sceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => { if (material.program) { _this.getContext().useProgram(material.program.program); if (material.program.getUniforms().map.level) { let level = geometryNode.getLevel(); material.uniforms.level.value = level; material.program.getUniforms().map.level.setValue(_this.getContext(), level); } if (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) { let vnStart = this.visibleNodeTextureOffsets.get(node); material.uniforms.vnStart.value = vnStart; material.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart); } if (material.program.getUniforms().map.pcIndex) { let i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node); material.uniforms.pcIndex.value = i; material.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i); } } }; // { // DEBUG // let sg = new THREE.SphereGeometry(1, 16, 16); // let sm = new THREE.MeshNormalMaterial(); // let s = new THREE.Mesh(sg, sm); // s.scale.set(5, 5, 5); // s.position.copy(geometryNode.mean) // .add(this.position) // .add(geometryNode.boundingBox.min); // // viewer.scene.scene.add(s); // } node.geometryNode = geometryNode; node.sceneNode = sceneNode; node.pointcloud = this; node.children = []; //for (let key in geometryNode.children) { // node.children[key] = geometryNode.children[key]; //} for(let i = 0; i < 8; i++){ node.children[i] = geometryNode.children[i]; } if (!parent) { this.root = node; this.add(sceneNode); } else { let childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]); parent.sceneNode.add(sceneNode); parent.children[childIndex] = node; } let disposeListener = function () { let childIndex = parseInt(geometryNode.name[geometryNode.name.length - 1]); parent.sceneNode.remove(node.sceneNode); parent.children[childIndex] = geometryNode; }; geometryNode.oneTimeDisposeHandlers.push(disposeListener); return node; } updateVisibleBounds () { let leafNodes = []; for (let i = 0; i < this.visibleNodes.length; i++) { let node = this.visibleNodes[i]; let isLeaf = true; for (let j = 0; j < node.children.length; j++) { let child = node.children[j]; if (child instanceof PointCloudOctreeNode) { isLeaf = isLeaf && !child.sceneNode.visible; } else if (child instanceof PointCloudOctreeGeometryNode) { isLeaf = true; } } if (isLeaf) { leafNodes.push(node); } } this.visibleBounds.min = new Vector3(Infinity, Infinity, Infinity); this.visibleBounds.max = new Vector3(-Infinity, -Infinity, -Infinity); for (let i = 0; i < leafNodes.length; i++) { let node = leafNodes[i]; this.visibleBounds.expandByPoint(node.getBoundingBox().min); this.visibleBounds.expandByPoint(node.getBoundingBox().max); } } updateMaterial (material, visibleNodes, camera, renderer) { material.fov = camera.fov * (Math.PI / 180); material.screenWidth = renderer.domElement.clientWidth; material.screenHeight = renderer.domElement.clientHeight; material.spacing = this.pcoGeometry.spacing; // * Math.max(this.scale.x, this.scale.y, this.scale.z); material.near = camera.near; material.far = camera.far; material.uniforms.octreeSize.value = this.pcoGeometry.boundingBox.getSize(new Vector3()).x; } computeVisibilityTextureData(nodes, camera){ if(Potree.measureTimings) performance.mark("computeVisibilityTextureData-start"); let data = new Uint8Array(nodes.length * 4); let visibleNodeTextureOffsets = new Map(); // copy array nodes = nodes.slice(); // sort by level and index, e.g. r, r0, r3, r4, r01, r07, r30, ... let sort = function (a, b) { let na = a.geometryNode.name; let nb = b.geometryNode.name; if (na.length !== nb.length) return na.length - nb.length; if (na < nb) return -1; if (na > nb) return 1; return 0; }; nodes.sort(sort); let worldDir = new Vector3(); let nodeMap = new Map(); let offsetsToChild = new Array(nodes.length).fill(Infinity); for(let i = 0; i < nodes.length; i++){ let node = nodes[i]; nodeMap.set(node.name, node); visibleNodeTextureOffsets.set(node, i); if(i > 0){ let index = parseInt(node.name.slice(-1)); let parentName = node.name.slice(0, -1); let parent = nodeMap.get(parentName); let parentOffset = visibleNodeTextureOffsets.get(parent); let parentOffsetToChild = (i - parentOffset); offsetsToChild[parentOffset] = Math.min(offsetsToChild[parentOffset], parentOffsetToChild); data[parentOffset * 4 + 0] = data[parentOffset * 4 + 0] | (1 << index); data[parentOffset * 4 + 1] = (offsetsToChild[parentOffset] >> 8); data[parentOffset * 4 + 2] = (offsetsToChild[parentOffset] % 256); } let density = node.geometryNode.density; if(typeof density === "number" && !Number.isNaN(density)){ let lodOffset = Math.log2(density) / 2 - 1.5; let offsetUint8 = (lodOffset + 10) * 10; data[i * 4 + 3] = offsetUint8; }else { data[i * 4 + 3] = 100; } } if(Potree.measureTimings){ performance.mark("computeVisibilityTextureData-end"); performance.measure("render.computeVisibilityTextureData", "computeVisibilityTextureData-start", "computeVisibilityTextureData-end"); } return { data: data, offsets: visibleNodeTextureOffsets }; } nodeIntersectsProfile (node, profile) { let bbWorld = node.boundingBox.clone().applyMatrix4(this.matrixWorld); let bsWorld = bbWorld.getBoundingSphere(new Sphere()); let intersects = false; for (let i = 0; i < profile.points.length - 1; i++) { let start = new Vector3(profile.points[i + 0].x, profile.points[i + 0].y, bsWorld.center.z); let end = new Vector3(profile.points[i + 1].x, profile.points[i + 1].y, bsWorld.center.z); let closest = new Line3(start, end).closestPointToPoint(bsWorld.center, true, new Vector3()); let distance = closest.distanceTo(bsWorld.center); intersects = intersects || (distance < (bsWorld.radius + profile.width)); } //console.log(`${node.name}: ${intersects}`); return intersects; } deepestNodeAt(position){ const toObjectSpace = this.matrixWorld.clone().invert(); const objPos = position.clone().applyMatrix4(toObjectSpace); let current = this.root; while(true){ let containingChild = null; for(const child of current.children){ if(child !== undefined){ if(child.getBoundingBox().containsPoint(objPos)){ containingChild = child; } } } if(containingChild !== null && containingChild instanceof PointCloudOctreeNode){ current = containingChild; }else { break; } } const deepest = current; return deepest; } nodesOnRay (nodes, ray) { let nodesOnRay = []; let _ray = ray.clone(); for (let i = 0; i < nodes.length; i++) { let node = nodes[i]; let sphere = node.getBoundingSphere().clone().applyMatrix4(this.matrixWorld); if (_ray.intersectsSphere(sphere)) { nodesOnRay.push(node); } } return nodesOnRay; } updateMatrixWorld (force) { if (this.matrixAutoUpdate === true) this.updateMatrix(); if (this.matrixWorldNeedsUpdate === true || force === true) { if (!this.parent) { this.matrixWorld.copy(this.matrix); } else { this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); } this.matrixWorldNeedsUpdate = false; force = true; } } hideDescendants (object) { let stack = []; for (let i = 0; i < object.children.length; i++) { let child = object.children[i]; if (child.visible) { stack.push(child); } } while (stack.length > 0) { let object = stack.shift(); object.visible = false; for (let i = 0; i < object.children.length; i++) { let child = object.children[i]; if (child.visible) { stack.push(child); } } } } moveToOrigin () { this.position.set(0, 0, 0); this.updateMatrixWorld(true); let box = this.boundingBox; let transform = this.matrixWorld; let tBox = Utils.computeTransformedBoundingBox(box, transform); this.position.set(0, 0, 0).sub(tBox.getCenter(new Vector3())); }; moveToGroundPlane () { this.updateMatrixWorld(true); let box = this.boundingBox; let transform = this.matrixWorld; let tBox = Utils.computeTransformedBoundingBox(box, transform); this.position.y += -tBox.min.y; }; getBoundingBoxWorld () { this.updateMatrixWorld(true); let box = this.boundingBox; let transform = this.matrixWorld; let tBox = Utils.computeTransformedBoundingBox(box, transform); return tBox; }; /** * returns points inside the profile points * * maxDepth: search points up to the given octree depth * * * The return value is an array with all segments of the profile path * let segment = { * start: THREE.Vector3, * end: THREE.Vector3, * points: {} * project: function() * }; * * The project() function inside each segment can be used to transform * that segments point coordinates to line up along the x-axis. * * */ getPointsInProfile (profile, maxDepth, callback) { if (callback) { let request = new Potree.ProfileRequest(this, profile, maxDepth, callback); this.profileRequests.push(request); return request; } let points = { segments: [], boundingBox: new Box3(), projectedBoundingBox: new Box2() }; // evaluate segments for (let i = 0; i < profile.points.length - 1; i++) { let start = profile.points[i]; let end = profile.points[i + 1]; let ps = this.getProfile(start, end, profile.width, maxDepth); let segment = { start: start, end: end, points: ps, project: null }; points.segments.push(segment); points.boundingBox.expandByPoint(ps.boundingBox.min); points.boundingBox.expandByPoint(ps.boundingBox.max); } // add projection functions to the segments let mileage = new Vector3(); for (let i = 0; i < points.segments.length; i++) { let segment = points.segments[i]; let start = segment.start; let end = segment.end; let project = (function (_start, _end, _mileage, _boundingBox) { let start = _start; let end = _end; let mileage = _mileage; let boundingBox = _boundingBox; let xAxis = new Vector3(1, 0, 0); let dir = new Vector3().subVectors(end, start); dir.y = 0; dir.normalize(); let alpha = Math.acos(xAxis.dot(dir)); if (dir.z > 0) { alpha = -alpha; } return function (position) { let toOrigin = new Matrix4().makeTranslation(-start.x, -boundingBox.min.y, -start.z); let alignWithX = new Matrix4().makeRotationY(-alpha); let applyMileage = new Matrix4().makeTranslation(mileage.x, 0, 0); let pos = position.clone(); pos.applyMatrix4(toOrigin); pos.applyMatrix4(alignWithX); pos.applyMatrix4(applyMileage); return pos; }; }(start, end, mileage.clone(), points.boundingBox.clone())); segment.project = project; mileage.x += new Vector3(start.x, 0, start.z).distanceTo(new Vector3(end.x, 0, end.z)); mileage.y += end.y - start.y; } points.projectedBoundingBox.min.x = 0; points.projectedBoundingBox.min.y = points.boundingBox.min.y; points.projectedBoundingBox.max.x = mileage.x; points.projectedBoundingBox.max.y = points.boundingBox.max.y; return points; } /** * returns points inside the given profile bounds. * * start: * end: * width: * depth: search points up to the given octree depth * callback: if specified, points are loaded before searching * * */ getProfile (start, end, width, depth, callback) { let request = new Potree.ProfileRequest(start, end, width, depth, callback); this.profileRequests.push(request); }; getVisibleExtent () { return this.visibleBounds.applyMatrix4(this.matrixWorld); }; intersectsPoint(position){ let rootAvailable = this.pcoGeometry.root && this.pcoGeometry.root.geometry; if(!rootAvailable){ return false; } if(typeof this.signedDistanceField === "undefined"){ const resolution = 32; const field = new Float32Array(resolution ** 3).fill(Infinity); const positions = this.pcoGeometry.root.geometry.attributes.position; const boundingBox = this.boundingBox; const n = positions.count; for(let i = 0; i < n; i = i + 3){ const x = positions.array[3 * i + 0]; const y = positions.array[3 * i + 1]; const z = positions.array[3 * i + 2]; const ix = parseInt(Math.min(resolution * (x / boundingBox.max.x), resolution - 1)); const iy = parseInt(Math.min(resolution * (y / boundingBox.max.y), resolution - 1)); const iz = parseInt(Math.min(resolution * (z / boundingBox.max.z), resolution - 1)); const index = ix + iy * resolution + iz * resolution * resolution; field[index] = 0; } const sdf = { resolution: resolution, field: field, }; this.signedDistanceField = sdf; } { const sdf = this.signedDistanceField; const boundingBox = this.boundingBox; const toObjectSpace = this.matrixWorld.clone().invert(); const objPos = position.clone().applyMatrix4(toObjectSpace); const resolution = sdf.resolution; const ix = parseInt(resolution * (objPos.x / boundingBox.max.x)); const iy = parseInt(resolution * (objPos.y / boundingBox.max.y)); const iz = parseInt(resolution * (objPos.z / boundingBox.max.z)); if(ix < 0 || iy < 0 || iz < 0){ return false; } if(ix >= resolution || iy >= resolution || iz >= resolution){ return false; } const index = ix + iy * resolution + iz * resolution * resolution; const value = sdf.field[index]; if(value === 0){ return true; } } return false; } /** * * * * params.pickWindowSize: Look for points inside a pixel window of this size. * Use odd values: 1, 3, 5, ... * * * TODO: only draw pixels that are actually read with readPixels(). * */ pick(viewer, camera, ray, params = {}){ let renderer = viewer.renderer; let pRenderer = viewer.pRenderer; performance.mark("pick-start"); let getVal = (a, b) => a !== undefined ? a : b; let pickWindowSize = getVal(params.pickWindowSize, 65); let pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false); let size = renderer.getSize(new Vector2()); let width = Math.ceil(getVal(params.width, size.width)); let height = Math.ceil(getVal(params.height, size.height)); let pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType); let pointSize = getVal(params.pointSize, this.material.size); let nodes = this.nodesOnRay(this.visibleNodes, ray); if (nodes.length === 0) { return null; } if (!this.pickState) { let scene = new Scene(); let material = new Potree.PointCloudMaterial(); material.activeAttributeName = "indices"; let renderTarget = new WebGLRenderTarget( 1, 1, { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat } ); this.pickState = { renderTarget: renderTarget, material: material, scene: scene }; }; let pickState = this.pickState; let pickMaterial = pickState.material; { // update pick material pickMaterial.pointSizeType = pointSizeType; //pickMaterial.shape = this.material.shape; pickMaterial.shape = Potree.PointShape.PARABOLOID; pickMaterial.uniforms.uFilterReturnNumberRange.value = this.material.uniforms.uFilterReturnNumberRange.value; pickMaterial.uniforms.uFilterNumberOfReturnsRange.value = this.material.uniforms.uFilterNumberOfReturnsRange.value; pickMaterial.uniforms.uFilterGPSTimeClipRange.value = this.material.uniforms.uFilterGPSTimeClipRange.value; pickMaterial.uniforms.uFilterPointSourceIDClipRange.value = this.material.uniforms.uFilterPointSourceIDClipRange.value; pickMaterial.activeAttributeName = "indices"; pickMaterial.size = pointSize; pickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value; pickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value; pickMaterial.classification = this.material.classification; pickMaterial.recomputeClassification(); if(params.pickClipped){ pickMaterial.clipBoxes = this.material.clipBoxes; pickMaterial.uniforms.clipBoxes = this.material.uniforms.clipBoxes; if(this.material.clipTask === Potree.ClipTask.HIGHLIGHT){ pickMaterial.clipTask = Potree.ClipTask.NONE; }else { pickMaterial.clipTask = this.material.clipTask; } pickMaterial.clipMethod = this.material.clipMethod; }else { pickMaterial.clipBoxes = []; } this.updateMaterial(pickMaterial, nodes, camera, renderer); } pickState.renderTarget.setSize(width, height); let pixelPos = new Vector2(params.x, params.y); let gl = renderer.getContext(); gl.enable(gl.SCISSOR_TEST); gl.scissor( parseInt(pixelPos.x - (pickWindowSize - 1) / 2), parseInt(pixelPos.y - (pickWindowSize - 1) / 2), parseInt(pickWindowSize), parseInt(pickWindowSize)); renderer.state.buffers.depth.setTest(pickMaterial.depthTest); renderer.state.buffers.depth.setMask(pickMaterial.depthWrite); renderer.state.setBlending(NoBlending); { // RENDER renderer.setRenderTarget(pickState.renderTarget); gl.clearColor(0, 0, 0, 0); renderer.clear(true, true, true); let tmp = this.material; this.material = pickMaterial; pRenderer.renderOctree(this, nodes, camera, pickState.renderTarget); this.material = tmp; } let clamp = (number, min, max) => Math.min(Math.max(min, number), max); let x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width)); let y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height)); let w = parseInt(Math.min(x + pickWindowSize, width) - x); let h = parseInt(Math.min(y + pickWindowSize, height) - y); let pixelCount = w * h; let buffer = new Uint8Array(4 * pixelCount); gl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer); renderer.setRenderTarget(null); renderer.state.reset(); renderer.setScissorTest(false); gl.disable(gl.SCISSOR_TEST); let pixels = buffer; let ibuffer = new Uint32Array(buffer.buffer); // find closest hit inside pixelWindow boundaries let min = Number.MAX_VALUE; let hits = []; for (let u = 0; u < pickWindowSize; u++) { for (let v = 0; v < pickWindowSize; v++) { let offset = (u + v * pickWindowSize); let distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2); let pcIndex = pixels[4 * offset + 3]; pixels[4 * offset + 3] = 0; let pIndex = ibuffer[offset]; if(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){ let hit = { pIndex: pIndex, pcIndex: pcIndex, distanceToCenter: distance }; if(params.all){ hits.push(hit); }else { if(hits.length > 0){ if(distance < hits[0].distanceToCenter){ hits[0] = hit; } }else { hits.push(hit); } } } } } // { // DEBUG: show panel with pick image // let img = Utils.pixelsArrayToImage(buffer, w, h); // let screenshot = img.src; // if(!this.debugDIV){ // this.debugDIV = $(` //
      `); // $(document.body).append(this.debugDIV); // } // this.debugDIV.empty(); // this.debugDIV.append($(``)); // //$(this.debugWindow.document).append($(``)); // //this.debugWindow.document.write(''); // } for(let hit of hits){ let point = {}; if (!nodes[hit.pcIndex]) { return null; } let node = nodes[hit.pcIndex]; let pc = node.sceneNode; let geometry = node.geometryNode.geometry; for(let attributeName in geometry.attributes){ let attribute = geometry.attributes[attributeName]; if (attributeName === 'position') { let x = attribute.array[3 * hit.pIndex + 0]; let y = attribute.array[3 * hit.pIndex + 1]; let z = attribute.array[3 * hit.pIndex + 2]; let position = new Vector3(x, y, z); position.applyMatrix4(pc.matrixWorld); point[attributeName] = position; } else if (attributeName === 'indices') { } else { let values = attribute.array.slice(attribute.itemSize * hit.pIndex, attribute.itemSize * (hit.pIndex + 1)) ; if(attribute.potree){ const {scale, offset} = attribute.potree; values = values.map(v => v / scale + offset); } point[attributeName] = values; //debugger; //if (values.itemSize === 1) { // point[attribute.name] = values.array[hit.pIndex]; //} else { // let value = []; // for (let j = 0; j < values.itemSize; j++) { // value.push(values.array[values.itemSize * hit.pIndex + j]); // } // point[attribute.name] = value; //} } } hit.point = point; } performance.mark("pick-end"); performance.measure("pick", "pick-start", "pick-end"); if(params.all){ return hits.map(hit => hit.point); }else { if(hits.length === 0){ return null; }else { return hits[0].point; //let sorted = hits.sort( (a, b) => a.distanceToCenter - b.distanceToCenter); //return sorted[0].point; } } }; * getFittedBoxGen(boxNode){ let start = performance.now(); let shrinkedLocalBounds = new Box3(); let worldToBox = boxNode.matrixWorld.clone().invert(); for(let node of this.visibleNodes){ if(!node.sceneNode){ continue; } let buffer = node.geometryNode.buffer; let posOffset = buffer.offset("position"); let stride = buffer.stride; let view = new DataView(buffer.data); let objectToBox = new Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld); let pos = new Vector4(); for(let i = 0; i < buffer.numElements; i++){ let x = view.getFloat32(i * stride + posOffset + 0, true); let y = view.getFloat32(i * stride + posOffset + 4, true); let z = view.getFloat32(i * stride + posOffset + 8, true); pos.set(x, y, z, 1); pos.applyMatrix4(objectToBox); if(-0.5 < pos.x && pos.x < 0.5){ if(-0.5 < pos.y && pos.y < 0.5){ if(-0.5 < pos.z && pos.z < 0.5){ shrinkedLocalBounds.expandByPoint(pos); } } } } yield; } let fittedPosition = shrinkedLocalBounds.getCenter(new Vector3()).applyMatrix4(boxNode.matrixWorld); let fitted = new Object3D(); fitted.position.copy(fittedPosition); fitted.scale.copy(boxNode.scale); fitted.rotation.copy(boxNode.rotation); let ds = new Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min); fitted.scale.multiply(ds); let duration = performance.now() - start; console.log("duration: ", duration); yield fitted; } getFittedBox(boxNode, maxLevel = Infinity){ maxLevel = Infinity; let start = performance.now(); let shrinkedLocalBounds = new Box3(); let worldToBox = boxNode.matrixWorld.clone().invert(); for(let node of this.visibleNodes){ if(!node.sceneNode || node.getLevel() > maxLevel){ continue; } let buffer = node.geometryNode.buffer; let posOffset = buffer.offset("position"); let stride = buffer.stride; let view = new DataView(buffer.data); let objectToBox = new Matrix4().multiplyMatrices(worldToBox, node.sceneNode.matrixWorld); let pos = new Vector4(); for(let i = 0; i < buffer.numElements; i++){ let x = view.getFloat32(i * stride + posOffset + 0, true); let y = view.getFloat32(i * stride + posOffset + 4, true); let z = view.getFloat32(i * stride + posOffset + 8, true); pos.set(x, y, z, 1); pos.applyMatrix4(objectToBox); if(-0.5 < pos.x && pos.x < 0.5){ if(-0.5 < pos.y && pos.y < 0.5){ if(-0.5 < pos.z && pos.z < 0.5){ shrinkedLocalBounds.expandByPoint(pos); } } } } } let fittedPosition = shrinkedLocalBounds.getCenter(new Vector3()).applyMatrix4(boxNode.matrixWorld); let fitted = new Object3D(); fitted.position.copy(fittedPosition); fitted.scale.copy(boxNode.scale); fitted.rotation.copy(boxNode.rotation); let ds = new Vector3().subVectors(shrinkedLocalBounds.max, shrinkedLocalBounds.min); fitted.scale.multiply(ds); let duration = performance.now() - start; console.log("duration: ", duration); return fitted; } get progress () { return this.visibleNodes.length / this.visibleGeometry.length; } find(name){ let node = null; for(let char of name){ if(char === "r"){ node = this.root; }else { node = node.children[char]; } } return node; } get visible(){ return this._visible; } set visible(value){ if(value !== this._visible){ this._visible = value; this.dispatchEvent({type: 'visibility_changed', pointcloud: this}); } } } class Points$1 { constructor () { this.boundingBox = new Box3(); this.numPoints = 0; this.data = {}; } add (points) { let currentSize = this.numPoints; let additionalSize = points.numPoints; let newSize = currentSize + additionalSize; let thisAttributes = Object.keys(this.data); let otherAttributes = Object.keys(points.data); let attributes = new Set([...thisAttributes, ...otherAttributes]); for (let attribute of attributes) { if (thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) { // attribute in both, merge let Type = this.data[attribute].constructor; let merged = new Type(this.data[attribute].length + points.data[attribute].length); merged.set(this.data[attribute], 0); merged.set(points.data[attribute], this.data[attribute].length); this.data[attribute] = merged; } else if (thisAttributes.includes(attribute) && !otherAttributes.includes(attribute)) { // attribute only in this; take over this and expand to new size let elementsPerPoint = this.data[attribute].length / this.numPoints; let Type = this.data[attribute].constructor; let expanded = new Type(elementsPerPoint * newSize); expanded.set(this.data[attribute], 0); this.data[attribute] = expanded; } else if (!thisAttributes.includes(attribute) && otherAttributes.includes(attribute)) { // attribute only in points to be added; take over new points and expand to new size let elementsPerPoint = points.data[attribute].length / points.numPoints; let Type = points.data[attribute].constructor; let expanded = new Type(elementsPerPoint * newSize); expanded.set(points.data[attribute], elementsPerPoint * currentSize); this.data[attribute] = expanded; } } this.numPoints = newSize; this.boundingBox.union(points.boundingBox); } } /** * * code adapted from three.js BoxHelper.js * https://github.com/mrdoob/three.js/blob/dev/src/helpers/BoxHelper.js * * @author mrdoob / http://mrdoob.com/ * @author Mugen87 / http://github.com/Mugen87 * @author mschuetz / http://potree.org */ class Box3Helper$1 extends LineSegments { constructor (box, color) { if (color === undefined) color = 0xffff00; let indices = new Uint16Array([ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ]); let positions = new Float32Array([ box.min.x, box.min.y, box.min.z, box.max.x, box.min.y, box.min.z, box.max.x, box.min.y, box.max.z, box.min.x, box.min.y, box.max.z, box.min.x, box.max.y, box.min.z, box.max.x, box.max.y, box.min.z, box.max.x, box.max.y, box.max.z, box.min.x, box.max.y, box.max.z ]); let geometry = new BufferGeometry(); geometry.setIndex(new BufferAttribute(indices, 1)); geometry.setAttribute('position', new BufferAttribute(positions, 3)); let material = new LineBasicMaterial({ color: color }); super(geometry, material); } } function updatePointClouds(pointclouds, camera, renderer){ for (let pointcloud of pointclouds) { let start = performance.now(); for (let profileRequest of pointcloud.profileRequests) { profileRequest.update(); let duration = performance.now() - start; if(duration > 5){ break; } } let duration = performance.now() - start; } let result = updateVisibility(pointclouds, camera, renderer); for (let pointcloud of pointclouds) { pointcloud.updateMaterial(pointcloud.material, pointcloud.visibleNodes, camera, renderer); pointcloud.updateVisibleBounds(); } exports.lru.freeMemory(); return result; }; function updateVisibilityStructures(pointclouds, camera, renderer) { let frustums = []; let camObjPositions = []; let priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; }); for (let i = 0; i < pointclouds.length; i++) { let pointcloud = pointclouds[i]; if (!pointcloud.initialized()) { continue; } pointcloud.numVisibleNodes = 0; pointcloud.numVisiblePoints = 0; pointcloud.deepestVisibleLevel = 0; pointcloud.visibleNodes = []; pointcloud.visibleGeometry = []; // frustum in object space camera.updateMatrixWorld(); let frustum = new Frustum(); let viewI = camera.matrixWorldInverse; let world = pointcloud.matrixWorld; // use close near plane for frustum intersection let frustumCam = camera.clone(); frustumCam.near = Math.min(camera.near, 0.1); frustumCam.updateProjectionMatrix(); let proj = camera.projectionMatrix; let fm = new Matrix4().multiply(proj).multiply(viewI).multiply(world); frustum.setFromProjectionMatrix(fm); frustums.push(frustum); // camera position in object space let view = camera.matrixWorld; let worldI = world.clone().invert(); let camMatrixObject = new Matrix4().multiply(worldI).multiply(view); let camObjPos = new Vector3().setFromMatrixPosition(camMatrixObject); camObjPositions.push(camObjPos); if (pointcloud.visible && pointcloud.root !== null) { priorityQueue.push({pointcloud: i, node: pointcloud.root, weight: Number.MAX_VALUE}); } // hide all previously visible nodes // if(pointcloud.root instanceof PointCloudOctreeNode){ // pointcloud.hideDescendants(pointcloud.root.sceneNode); // } if (pointcloud.root.isTreeNode()) { pointcloud.hideDescendants(pointcloud.root.sceneNode); } for (let j = 0; j < pointcloud.boundingBoxNodes.length; j++) { pointcloud.boundingBoxNodes[j].visible = false; } } return { 'frustums': frustums, 'camObjPositions': camObjPositions, 'priorityQueue': priorityQueue }; }; function updateVisibility(pointclouds, camera, renderer){ let numVisibleNodes = 0; let numVisiblePoints = 0; let numVisiblePointsInPointclouds = new Map(pointclouds.map(pc => [pc, 0])); let visibleNodes = []; let visibleGeometry = []; let unloadedGeometry = []; let lowestSpacing = Infinity; // calculate object space frustum and cam pos and setup priority queue let s = updateVisibilityStructures(pointclouds, camera, renderer); let frustums = s.frustums; let camObjPositions = s.camObjPositions; let priorityQueue = s.priorityQueue; let loadedToGPUThisFrame = 0; let domWidth = renderer.domElement.clientWidth; let domHeight = renderer.domElement.clientHeight; // check if pointcloud has been transformed // some code will only be executed if changes have been detected if(!Potree._pointcloudTransformVersion){ Potree._pointcloudTransformVersion = new Map(); } let pointcloudTransformVersion = Potree._pointcloudTransformVersion; for(let pointcloud of pointclouds){ if(!pointcloud.visible){ continue; } pointcloud.updateMatrixWorld(); if(!pointcloudTransformVersion.has(pointcloud)){ pointcloudTransformVersion.set(pointcloud, {number: 0, transform: pointcloud.matrixWorld.clone()}); }else { let version = pointcloudTransformVersion.get(pointcloud); if(!version.transform.equals(pointcloud.matrixWorld)){ version.number++; version.transform.copy(pointcloud.matrixWorld); pointcloud.dispatchEvent({ type: "transformation_changed", target: pointcloud }); } } } while (priorityQueue.size() > 0) { let element = priorityQueue.pop(); let node = element.node; let parent = element.parent; let pointcloud = pointclouds[element.pointcloud]; // { // restrict to certain nodes for debugging // let allowedNodes = ["r", "r0", "r4"]; // if(!allowedNodes.includes(node.name)){ // continue; // } // } let box = node.getBoundingBox(); let frustum = frustums[element.pointcloud]; let camObjPos = camObjPositions[element.pointcloud]; let insideFrustum = frustum.intersectsBox(box); let maxLevel = pointcloud.maxLevel || Infinity; let level = node.getLevel(); let visible = insideFrustum; visible = visible && !(numVisiblePoints + node.getNumPoints() > Potree.pointBudget); visible = visible && !(numVisiblePointsInPointclouds.get(pointcloud) + node.getNumPoints() > pointcloud.pointBudget); visible = visible && level < maxLevel; visible = visible || node.getLevel() <= 2; let clipBoxes = pointcloud.material.clipBoxes; if(true && clipBoxes.length > 0){ //node.debug = false; let numIntersecting = 0; let numIntersectionVolumes = 0; //if(node.name === "r60"){ // var a = 10; //} for(let clipBox of clipBoxes){ let pcWorldInverse = pointcloud.matrixWorld.clone().invert(); let toPCObject = pcWorldInverse.multiply(clipBox.box.matrixWorld); let px = new Vector3(+0.5, 0, 0).applyMatrix4(pcWorldInverse); let nx = new Vector3(-0.5, 0, 0).applyMatrix4(pcWorldInverse); let py = new Vector3(0, +0.5, 0).applyMatrix4(pcWorldInverse); let ny = new Vector3(0, -0.5, 0).applyMatrix4(pcWorldInverse); let pz = new Vector3(0, 0, +0.5).applyMatrix4(pcWorldInverse); let nz = new Vector3(0, 0, -0.5).applyMatrix4(pcWorldInverse); let pxN = new Vector3().subVectors(nx, px).normalize(); let nxN = pxN.clone().multiplyScalar(-1); let pyN = new Vector3().subVectors(ny, py).normalize(); let nyN = pyN.clone().multiplyScalar(-1); let pzN = new Vector3().subVectors(nz, pz).normalize(); let nzN = pzN.clone().multiplyScalar(-1); let pxPlane = new Plane().setFromNormalAndCoplanarPoint(pxN, px); let nxPlane = new Plane().setFromNormalAndCoplanarPoint(nxN, nx); let pyPlane = new Plane().setFromNormalAndCoplanarPoint(pyN, py); let nyPlane = new Plane().setFromNormalAndCoplanarPoint(nyN, ny); let pzPlane = new Plane().setFromNormalAndCoplanarPoint(pzN, pz); let nzPlane = new Plane().setFromNormalAndCoplanarPoint(nzN, nz); //if(window.debugdraw !== undefined && window.debugdraw === true && node.name === "r60"){ // Potree.utils.debugPlane(viewer.scene.scene, pxPlane, 1, 0xFF0000); // Potree.utils.debugPlane(viewer.scene.scene, nxPlane, 1, 0x990000); // Potree.utils.debugPlane(viewer.scene.scene, pyPlane, 1, 0x00FF00); // Potree.utils.debugPlane(viewer.scene.scene, nyPlane, 1, 0x009900); // Potree.utils.debugPlane(viewer.scene.scene, pzPlane, 1, 0x0000FF); // Potree.utils.debugPlane(viewer.scene.scene, nzPlane, 1, 0x000099); // Potree.utils.debugBox(viewer.scene.scene, box, new THREE.Matrix4(), 0x00FF00); // Potree.utils.debugBox(viewer.scene.scene, box, pointcloud.matrixWorld, 0xFF0000); // Potree.utils.debugBox(viewer.scene.scene, clipBox.box.boundingBox, clipBox.box.matrixWorld, 0xFF0000); // window.debugdraw = false; //} let frustum = new Frustum(pxPlane, nxPlane, pyPlane, nyPlane, pzPlane, nzPlane); let intersects = frustum.intersectsBox(box); if(intersects){ numIntersecting++; } numIntersectionVolumes++; } let insideAny = numIntersecting > 0; let insideAll = numIntersecting === numIntersectionVolumes; if(pointcloud.material.clipTask === ClipTask.SHOW_INSIDE){ if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && insideAny){ //node.debug = true }else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && insideAll){ //node.debug = true; }else { visible = false; } } else if(pointcloud.material.clipTask === ClipTask.SHOW_OUTSIDE){ //if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ANY && !insideAny){ // //visible = true; // let a = 10; //}else if(pointcloud.material.clipMethod === ClipMethod.INSIDE_ALL && !insideAll){ // //visible = true; // let a = 20; //}else{ // visible = false; //} } } // visible = ["r", "r0", "r06", "r060"].includes(node.name); // visible = ["r"].includes(node.name); if (node.spacing) { lowestSpacing = Math.min(lowestSpacing, node.spacing); } else if (node.geometryNode && node.geometryNode.spacing) { lowestSpacing = Math.min(lowestSpacing, node.geometryNode.spacing); } if (numVisiblePoints + node.getNumPoints() > Potree.pointBudget) { break; } if (!visible) { continue; } // TODO: not used, same as the declaration? // numVisibleNodes++; numVisiblePoints += node.getNumPoints(); let numVisiblePointsInPointcloud = numVisiblePointsInPointclouds.get(pointcloud); numVisiblePointsInPointclouds.set(pointcloud, numVisiblePointsInPointcloud + node.getNumPoints()); pointcloud.numVisibleNodes++; pointcloud.numVisiblePoints += node.getNumPoints(); if (node.isGeometryNode() && (!parent || parent.isTreeNode())) { if (node.isLoaded() && loadedToGPUThisFrame < 2) { node = pointcloud.toTreeNode(node, parent); loadedToGPUThisFrame++; } else { unloadedGeometry.push(node); visibleGeometry.push(node); } } if (node.isTreeNode()) { exports.lru.touch(node.geometryNode); node.sceneNode.visible = true; node.sceneNode.material = pointcloud.material; visibleNodes.push(node); pointcloud.visibleNodes.push(node); if(node._transformVersion === undefined){ node._transformVersion = -1; } let transformVersion = pointcloudTransformVersion.get(pointcloud); if(node._transformVersion !== transformVersion.number){ node.sceneNode.updateMatrix(); node.sceneNode.matrixWorld.multiplyMatrices(pointcloud.matrixWorld, node.sceneNode.matrix); node._transformVersion = transformVersion.number; } if (pointcloud.showBoundingBox && !node.boundingBoxNode && node.getBoundingBox) { let boxHelper = new Box3Helper$1(node.getBoundingBox()); boxHelper.matrixAutoUpdate = false; pointcloud.boundingBoxNodes.push(boxHelper); node.boundingBoxNode = boxHelper; node.boundingBoxNode.matrix.copy(pointcloud.matrixWorld); } else if (pointcloud.showBoundingBox) { node.boundingBoxNode.visible = true; node.boundingBoxNode.matrix.copy(pointcloud.matrixWorld); } else if (!pointcloud.showBoundingBox && node.boundingBoxNode) { node.boundingBoxNode.visible = false; } // if(node.boundingBoxNode !== undefined && exports.debug.allowedNodes !== undefined){ // if(!exports.debug.allowedNodes.includes(node.name)){ // node.boundingBoxNode.visible = false; // } // } } // add child nodes to priorityQueue let children = node.getChildren(); for (let i = 0; i < children.length; i++) { let child = children[i]; let weight = 0; if(camera.isPerspectiveCamera){ let sphere = child.getBoundingSphere(); let center = sphere.center; //let distance = sphere.center.distanceTo(camObjPos); let dx = camObjPos.x - center.x; let dy = camObjPos.y - center.y; let dz = camObjPos.z - center.z; let dd = dx * dx + dy * dy + dz * dz; let distance = Math.sqrt(dd); let radius = sphere.radius; let fov = (camera.fov * Math.PI) / 180; let slope = Math.tan(fov / 2); let projFactor = (0.5 * domHeight) / (slope * distance); let screenPixelRadius = radius * projFactor; if(screenPixelRadius < pointcloud.minimumNodePixelSize){ continue; } weight = screenPixelRadius; if(distance - radius < 0){ weight = Number.MAX_VALUE; } } else { // TODO ortho visibility let bb = child.getBoundingBox(); let distance = child.getBoundingSphere().center.distanceTo(camObjPos); let diagonal = bb.max.clone().sub(bb.min).length(); //weight = diagonal / distance; weight = diagonal; } priorityQueue.push({pointcloud: element.pointcloud, node: child, parent: node, weight: weight}); } }// end priority queue loop { // update DEM let maxDEMLevel = 4; let candidates = pointclouds .filter(p => (p.generateDEM && p.dem instanceof Potree.DEM)); for (let pointcloud of candidates) { let updatingNodes = pointcloud.visibleNodes.filter(n => n.getLevel() <= maxDEMLevel); pointcloud.dem.update(updatingNodes); } } for (let i = 0; i < Math.min(Potree.maxNodesLoading, unloadedGeometry.length); i++) { unloadedGeometry[i].load(); } return { visibleNodes: visibleNodes, numVisiblePoints: numVisiblePoints, lowestSpacing: lowestSpacing }; }; class PointCloudArena4DNode extends PointCloudTreeNode { constructor () { super(); this.left = null; this.right = null; this.sceneNode = null; this.kdtree = null; } getNumPoints () { return this.geometryNode.numPoints; } isLoaded () { return true; } isTreeNode () { return true; } isGeometryNode () { return false; } getLevel () { return this.geometryNode.level; } getBoundingSphere () { return this.geometryNode.boundingSphere; } getBoundingBox () { return this.geometryNode.boundingBox; } toTreeNode (child) { let geometryNode = null; if (this.left === child) { geometryNode = this.left; } else if (this.right === child) { geometryNode = this.right; } if (!geometryNode.loaded) { return; } let node = new PointCloudArena4DNode(); let sceneNode = PointCloud(geometryNode.geometry, this.kdtree.material); sceneNode.visible = false; node.kdtree = this.kdtree; node.geometryNode = geometryNode; node.sceneNode = sceneNode; node.parent = this; node.left = this.geometryNode.left; node.right = this.geometryNode.right; } getChildren () { let children = []; if (this.left) { children.push(this.left); } if (this.right) { children.push(this.right); } return children; } }; class PointCloudArena4D$1 extends PointCloudTree{ constructor (geometry) { super(); this.root = null; if (geometry.root) { this.root = geometry.root; } else { geometry.addEventListener('hierarchy_loaded', () => { this.root = geometry.root; }); } this.visiblePointsTarget = 2 * 1000 * 1000; this.minimumNodePixelSize = 150; this.position.sub(geometry.offset); this.updateMatrix(); this.numVisibleNodes = 0; this.numVisiblePoints = 0; this.boundingBoxNodes = []; this.loadQueue = []; this.visibleNodes = []; this.pcoGeometry = geometry; this.boundingBox = this.pcoGeometry.boundingBox; this.boundingSphere = this.pcoGeometry.boundingSphere; this.material = new PointCloudMaterial$1({vertexColors: VertexColors, size: 0.05, treeType: TreeType.KDTREE}); this.material.sizeType = PointSizeType.ATTENUATED; this.material.size = 0.05; this.profileRequests = []; this.name = ''; } getBoundingBoxWorld () { this.updateMatrixWorld(true); let box = this.boundingBox; let transform = this.matrixWorld; let tBox = Utils.computeTransformedBoundingBox(box, transform); return tBox; }; setName (name) { if (this.name !== name) { this.name = name; this.dispatchEvent({type: 'name_changed', name: name, pointcloud: this}); } } getName () { return this.name; } getLevel () { return this.level; } toTreeNode (geometryNode, parent) { let node = new PointCloudArena4DNode(); let sceneNode = new Points(geometryNode.geometry, this.material); sceneNode.frustumCulled = false; sceneNode.onBeforeRender = (_this, scene, camera, geometry, material, group) => { if (material.program) { _this.getContext().useProgram(material.program.program); if (material.program.getUniforms().map.level) { let level = geometryNode.getLevel(); material.uniforms.level.value = level; material.program.getUniforms().map.level.setValue(_this.getContext(), level); } if (this.visibleNodeTextureOffsets && material.program.getUniforms().map.vnStart) { let vnStart = this.visibleNodeTextureOffsets.get(node); material.uniforms.vnStart.value = vnStart; material.program.getUniforms().map.vnStart.setValue(_this.getContext(), vnStart); } if (material.program.getUniforms().map.pcIndex) { let i = node.pcIndex ? node.pcIndex : this.visibleNodes.indexOf(node); material.uniforms.pcIndex.value = i; material.program.getUniforms().map.pcIndex.setValue(_this.getContext(), i); } } }; node.geometryNode = geometryNode; node.sceneNode = sceneNode; node.pointcloud = this; node.left = geometryNode.left; node.right = geometryNode.right; if (!parent) { this.root = node; this.add(sceneNode); } else { parent.sceneNode.add(sceneNode); if (parent.left === geometryNode) { parent.left = node; } else if (parent.right === geometryNode) { parent.right = node; } } let disposeListener = function () { parent.sceneNode.remove(node.sceneNode); if (parent.left === node) { parent.left = geometryNode; } else if (parent.right === node) { parent.right = geometryNode; } }; geometryNode.oneTimeDisposeHandlers.push(disposeListener); return node; } updateMaterial (material, visibleNodes, camera, renderer) { material.fov = camera.fov * (Math.PI / 180); material.screenWidth = renderer.domElement.clientWidth; material.screenHeight = renderer.domElement.clientHeight; material.spacing = this.pcoGeometry.spacing; material.near = camera.near; material.far = camera.far; // reduce shader source updates by setting maxLevel slightly higher than actually necessary if (this.maxLevel > material.levels) { material.levels = this.maxLevel + 2; } // material.uniforms.octreeSize.value = this.boundingBox.size().x; let bbSize = this.boundingBox.getSize(new Vector3()); material.bbSize = [bbSize.x, bbSize.y, bbSize.z]; } updateVisibleBounds () { } hideDescendants (object) { let stack = []; for (let i = 0; i < object.children.length; i++) { let child = object.children[i]; if (child.visible) { stack.push(child); } } while (stack.length > 0) { let child = stack.shift(); child.visible = false; if (child.boundingBoxNode) { child.boundingBoxNode.visible = false; } for (let i = 0; i < child.children.length; i++) { let childOfChild = child.children[i]; if (childOfChild.visible) { stack.push(childOfChild); } } } } updateMatrixWorld (force) { // node.matrixWorld.multiplyMatrices( node.parent.matrixWorld, node.matrix ); if (this.matrixAutoUpdate === true) this.updateMatrix(); if (this.matrixWorldNeedsUpdate === true || force === true) { if (this.parent === undefined) { this.matrixWorld.copy(this.matrix); } else { this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); } this.matrixWorldNeedsUpdate = false; force = true; } } nodesOnRay (nodes, ray) { let nodesOnRay = []; let _ray = ray.clone(); for (let i = 0; i < nodes.length; i++) { let node = nodes[i]; let sphere = node.getBoundingSphere().clone().applyMatrix4(node.sceneNode.matrixWorld); // TODO Unused: let box = node.getBoundingBox().clone().applyMatrix4(node.sceneNode.matrixWorld); if (_ray.intersectsSphere(sphere)) { nodesOnRay.push(node); } // if(_ray.isIntersectionBox(box)){ // nodesOnRay.push(node); // } } return nodesOnRay; } pick(viewer, camera, ray, params = {}){ let renderer = viewer.renderer; let pRenderer = viewer.pRenderer; performance.mark("pick-start"); let getVal = (a, b) => a !== undefined ? a : b; let pickWindowSize = getVal(params.pickWindowSize, 17); let pickOutsideClipRegion = getVal(params.pickOutsideClipRegion, false); let size = renderer.getSize(new Vector2()); let width = Math.ceil(getVal(params.width, size.width)); let height = Math.ceil(getVal(params.height, size.height)); let pointSizeType = getVal(params.pointSizeType, this.material.pointSizeType); let pointSize = getVal(params.pointSize, this.material.size); let nodes = this.nodesOnRay(this.visibleNodes, ray); if (nodes.length === 0) { return null; } if (!this.pickState) { let scene = new Scene(); let material = new PointCloudMaterial$1(); material.activeAttributeName = "indices"; let renderTarget = new WebGLRenderTarget( 1, 1, { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat } ); this.pickState = { renderTarget: renderTarget, material: material, scene: scene }; }; let pickState = this.pickState; let pickMaterial = pickState.material; { // update pick material pickMaterial.pointSizeType = pointSizeType; pickMaterial.shape = this.material.shape; pickMaterial.size = pointSize; pickMaterial.uniforms.minSize.value = this.material.uniforms.minSize.value; pickMaterial.uniforms.maxSize.value = this.material.uniforms.maxSize.value; pickMaterial.classification = this.material.classification; if(params.pickClipped){ pickMaterial.clipBoxes = this.material.clipBoxes; if(this.material.clipTask === ClipTask.HIGHLIGHT){ pickMaterial.clipTask = ClipTask.NONE; }else { pickMaterial.clipTask = this.material.clipTask; } }else { pickMaterial.clipBoxes = []; } this.updateMaterial(pickMaterial, nodes, camera, renderer); } pickState.renderTarget.setSize(width, height); let pixelPos = new Vector2(params.x, params.y); let gl = renderer.getContext(); gl.enable(gl.SCISSOR_TEST); gl.scissor( parseInt(pixelPos.x - (pickWindowSize - 1) / 2), parseInt(pixelPos.y - (pickWindowSize - 1) / 2), parseInt(pickWindowSize), parseInt(pickWindowSize)); renderer.state.buffers.depth.setTest(pickMaterial.depthTest); renderer.state.buffers.depth.setMask(pickMaterial.depthWrite); renderer.state.setBlending(NoBlending); renderer.clearTarget(pickState.renderTarget, true, true, true); { // RENDER renderer.setRenderTarget(pickState.renderTarget); gl.clearColor(0, 0, 0, 0); renderer.clearTarget( pickState.renderTarget, true, true, true ); let tmp = this.material; this.material = pickMaterial; pRenderer.renderOctree(this, nodes, camera, pickState.renderTarget); this.material = tmp; } let clamp = (number, min, max) => Math.min(Math.max(min, number), max); let x = parseInt(clamp(pixelPos.x - (pickWindowSize - 1) / 2, 0, width)); let y = parseInt(clamp(pixelPos.y - (pickWindowSize - 1) / 2, 0, height)); let w = parseInt(Math.min(x + pickWindowSize, width) - x); let h = parseInt(Math.min(y + pickWindowSize, height) - y); let pixelCount = w * h; let buffer = new Uint8Array(4 * pixelCount); gl.readPixels(x, y, pickWindowSize, pickWindowSize, gl.RGBA, gl.UNSIGNED_BYTE, buffer); renderer.setRenderTarget(null); renderer.state.reset(); renderer.setScissorTest(false); gl.disable(gl.SCISSOR_TEST); let pixels = buffer; let ibuffer = new Uint32Array(buffer.buffer); // find closest hit inside pixelWindow boundaries let min = Number.MAX_VALUE; let hits = []; for (let u = 0; u < pickWindowSize; u++) { for (let v = 0; v < pickWindowSize; v++) { let offset = (u + v * pickWindowSize); let distance = Math.pow(u - (pickWindowSize - 1) / 2, 2) + Math.pow(v - (pickWindowSize - 1) / 2, 2); let pcIndex = pixels[4 * offset + 3]; pixels[4 * offset + 3] = 0; let pIndex = ibuffer[offset]; if(!(pcIndex === 0 && pIndex === 0) && (pcIndex !== undefined) && (pIndex !== undefined)){ let hit = { pIndex: pIndex, pcIndex: pcIndex, distanceToCenter: distance }; if(params.all){ hits.push(hit); }else { if(hits.length > 0){ if(distance < hits[0].distanceToCenter){ hits[0] = hit; } }else { hits.push(hit); } } } } } for(let hit of hits){ let point = {}; if (!nodes[hit.pcIndex]) { return null; } let node = nodes[hit.pcIndex]; let pc = node.sceneNode; let geometry = node.geometryNode.geometry; for(let attributeName in geometry.attributes){ let attribute = geometry.attributes[attributeName]; if (attributeName === 'position') { let x = attribute.array[3 * hit.pIndex + 0]; let y = attribute.array[3 * hit.pIndex + 1]; let z = attribute.array[3 * hit.pIndex + 2]; let position = new Vector3(x, y, z); position.applyMatrix4(pc.matrixWorld); point[attributeName] = position; } else if (attributeName === 'indices') { } else { //if (values.itemSize === 1) { // point[attribute.name] = values.array[hit.pIndex]; //} else { // let value = []; // for (let j = 0; j < values.itemSize; j++) { // value.push(values.array[values.itemSize * hit.pIndex + j]); // } // point[attribute.name] = value; //} } } hit.point = point; } performance.mark("pick-end"); performance.measure("pick", "pick-start", "pick-end"); if(params.all){ return hits.map(hit => hit.point); }else { if(hits.length === 0){ return null; }else { return hits[0].point; } } } computeVisibilityTextureData(nodes){ if(exports.measureTimings) performance.mark("computeVisibilityTextureData-start"); let data = new Uint8Array(nodes.length * 3); let visibleNodeTextureOffsets = new Map(); // copy array nodes = nodes.slice(); // sort by level and number let sort = function (a, b) { let la = a.geometryNode.level; let lb = b.geometryNode.level; let na = a.geometryNode.number; let nb = b.geometryNode.number; if (la !== lb) return la - lb; if (na < nb) return -1; if (na > nb) return 1; return 0; }; nodes.sort(sort); let visibleNodeNames = []; for (let i = 0; i < nodes.length; i++) { visibleNodeNames.push(nodes[i].geometryNode.number); } for (let i = 0; i < nodes.length; i++) { let node = nodes[i]; visibleNodeTextureOffsets.set(node, i); let b1 = 0; // children let b2 = 0; // offset to first child let b3 = 0; // split if (node.geometryNode.left && visibleNodeNames.indexOf(node.geometryNode.left.number) > 0) { b1 += 1; b2 = visibleNodeNames.indexOf(node.geometryNode.left.number) - i; } if (node.geometryNode.right && visibleNodeNames.indexOf(node.geometryNode.right.number) > 0) { b1 += 2; b2 = (b2 === 0) ? visibleNodeNames.indexOf(node.geometryNode.right.number) - i : b2; } if (node.geometryNode.split === 'X') { b3 = 1; } else if (node.geometryNode.split === 'Y') { b3 = 2; } else if (node.geometryNode.split === 'Z') { b3 = 4; } data[i * 3 + 0] = b1; data[i * 3 + 1] = b2; data[i * 3 + 2] = b3; } if(exports.measureTimings){ performance.mark("computeVisibilityTextureData-end"); performance.measure("render.computeVisibilityTextureData", "computeVisibilityTextureData-start", "computeVisibilityTextureData-end"); } return { data: data, offsets: visibleNodeTextureOffsets }; } get progress () { if (this.pcoGeometry.root) { return exports.numNodesLoading > 0 ? 0 : 1; } else { return 0; } } }; // Copied from three.js: WebGLRenderer.js function paramThreeToGL(_gl, p) { let extension; if (p === RepeatWrapping) return _gl.REPEAT; if (p === ClampToEdgeWrapping) return _gl.CLAMP_TO_EDGE; if (p === MirroredRepeatWrapping) return _gl.MIRRORED_REPEAT; if (p === NearestFilter) return _gl.NEAREST; if (p === NearestMipMapNearestFilter) return _gl.NEAREST_MIPMAP_NEAREST; if (p === NearestMipMapLinearFilter) return _gl.NEAREST_MIPMAP_LINEAR; if (p === LinearFilter) return _gl.LINEAR; if (p === LinearMipMapNearestFilter) return _gl.LINEAR_MIPMAP_NEAREST; if (p === LinearMipMapLinearFilter) return _gl.LINEAR_MIPMAP_LINEAR; if (p === UnsignedByteType) return _gl.UNSIGNED_BYTE; if (p === UnsignedShort4444Type) return _gl.UNSIGNED_SHORT_4_4_4_4; if (p === UnsignedShort5551Type) return _gl.UNSIGNED_SHORT_5_5_5_1; if (p === UnsignedShort565Type) return _gl.UNSIGNED_SHORT_5_6_5; if (p === ByteType) return _gl.BYTE; if (p === ShortType) return _gl.SHORT; if (p === UnsignedShortType) return _gl.UNSIGNED_SHORT; if (p === IntType) return _gl.INT; if (p === UnsignedIntType) return _gl.UNSIGNED_INT; if (p === FloatType) return _gl.FLOAT; if (p === HalfFloatType) { extension = extensions.get('OES_texture_half_float'); if (extension !== null) return extension.HALF_FLOAT_OES; } if (p === AlphaFormat) return _gl.ALPHA; if (p === RGBFormat) return _gl.RGB; if (p === RGBAFormat) return _gl.RGBA; if (p === LuminanceFormat) return _gl.LUMINANCE; if (p === LuminanceAlphaFormat) return _gl.LUMINANCE_ALPHA; if (p === DepthFormat) return _gl.DEPTH_COMPONENT; if (p === DepthStencilFormat) return _gl.DEPTH_STENCIL; if (p === AddEquation) return _gl.FUNC_ADD; if (p === SubtractEquation) return _gl.FUNC_SUBTRACT; if (p === ReverseSubtractEquation) return _gl.FUNC_REVERSE_SUBTRACT; if (p === ZeroFactor) return _gl.ZERO; if (p === OneFactor) return _gl.ONE; if (p === SrcColorFactor) return _gl.SRC_COLOR; if (p === OneMinusSrcColorFactor) return _gl.ONE_MINUS_SRC_COLOR; if (p === SrcAlphaFactor) return _gl.SRC_ALPHA; if (p === OneMinusSrcAlphaFactor) return _gl.ONE_MINUS_SRC_ALPHA; if (p === DstAlphaFactor) return _gl.DST_ALPHA; if (p === OneMinusDstAlphaFactor) return _gl.ONE_MINUS_DST_ALPHA; if (p === DstColorFactor) return _gl.DST_COLOR; if (p === OneMinusDstColorFactor) return _gl.ONE_MINUS_DST_COLOR; if (p === SrcAlphaSaturateFactor) return _gl.SRC_ALPHA_SATURATE; if (p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format) { extension = extensions.get('WEBGL_compressed_texture_s3tc'); if (extension !== null) { if (p === RGB_S3TC_DXT1_Format) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT; if (p === RGBA_S3TC_DXT1_Format$1) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT; if (p === RGBA_S3TC_DXT3_Format) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT; if (p === RGBA_S3TC_DXT5_Format$1) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT; } } if (p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format) { extension = extensions.get('WEBGL_compressed_texture_pvrtc'); if (extension !== null) { if (p === RGB_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG; if (p === RGB_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG; if (p === RGBA_PVRTC_4BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG; if (p === RGBA_PVRTC_2BPPV1_Format) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG; } } if (p === RGB_ETC1_Format) { extension = extensions.get('WEBGL_compressed_texture_etc1'); if (extension !== null) return extension.COMPRESSED_RGB_ETC1_WEBGL; } if (p === MinEquation || p === MaxEquation) { extension = extensions.get('EXT_blend_minmax'); if (extension !== null) { if (p === MinEquation) return extension.MIN_EXT; if (p === MaxEquation) return extension.MAX_EXT; } } if (p === UnsignedInt248Type) { extension = extensions.get('WEBGL_depth_texture'); if (extension !== null) return extension.UNSIGNED_INT_24_8_WEBGL; } return 0; }; let attributeLocations = { "position": {name: "position", location: 0}, "color": {name: "color", location: 1}, "rgba": {name: "color", location: 1}, "intensity": {name: "intensity", location: 2}, "classification": {name: "classification", location: 3}, "returnNumber": {name: "returnNumber", location: 4}, "return number": {name: "returnNumber", location: 4}, "returns": {name: "returnNumber", location: 4}, "numberOfReturns": {name: "numberOfReturns", location: 5}, "number of returns": {name: "numberOfReturns", location: 5}, "pointSourceID": {name: "pointSourceID", location: 6}, "source id": {name: "pointSourceID", location: 6}, "point source id": {name: "pointSourceID", location: 6}, "indices": {name: "indices", location: 7}, "normal": {name: "normal", location: 8}, "spacing": {name: "spacing", location: 9}, "gps-time": {name: "gpsTime", location: 10}, "aExtra": {name: "aExtra", location: 11}, }; class Shader { constructor(gl, name, vsSource, fsSource) { this.gl = gl; this.name = name; this.vsSource = vsSource; this.fsSource = fsSource; this.cache = new Map(); this.vs = null; this.fs = null; this.program = null; this.uniformLocations = {}; this.attributeLocations = {}; this.uniformBlockIndices = {}; this.uniformBlocks = {}; this.uniforms = {}; this.update(vsSource, fsSource); } update(vsSource, fsSource) { this.vsSource = vsSource; this.fsSource = fsSource; this.linkProgram(); } compileShader(shader, source){ let gl = this.gl; gl.shaderSource(shader, source); gl.compileShader(shader); let success = gl.getShaderParameter(shader, gl.COMPILE_STATUS); if (!success) { let info = gl.getShaderInfoLog(shader); let numberedSource = source.split("\n").map((a, i) => `${i + 1}`.padEnd(5) + a).join("\n"); throw `could not compile shader ${this.name}: ${info}, \n${numberedSource}`; } } linkProgram() { const tStart = performance.now(); let gl = this.gl; this.uniformLocations = {}; this.attributeLocations = {}; this.uniforms = {}; gl.useProgram(null); let cached = this.cache.get(`${this.vsSource}, ${this.fsSource}`); if (cached) { this.program = cached.program; this.vs = cached.vs; this.fs = cached.fs; this.attributeLocations = cached.attributeLocations; this.uniformLocations = cached.uniformLocations; this.uniformBlocks = cached.uniformBlocks; this.uniforms = cached.uniforms; return; } else { this.vs = gl.createShader(gl.VERTEX_SHADER); this.fs = gl.createShader(gl.FRAGMENT_SHADER); this.program = gl.createProgram(); for(let name of Object.keys(attributeLocations)){ let location = attributeLocations[name].location; let glslName = attributeLocations[name].name; gl.bindAttribLocation(this.program, location, glslName); } this.compileShader(this.vs, this.vsSource); this.compileShader(this.fs, this.fsSource); let program = this.program; gl.attachShader(program, this.vs); gl.attachShader(program, this.fs); gl.linkProgram(program); gl.detachShader(program, this.vs); gl.detachShader(program, this.fs); let success = gl.getProgramParameter(program, gl.LINK_STATUS); if (!success) { let info = gl.getProgramInfoLog(program); throw `could not link program ${this.name}: ${info}`; } { // attribute locations let numAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES); for (let i = 0; i < numAttributes; i++) { let attribute = gl.getActiveAttrib(program, i); let location = gl.getAttribLocation(program, attribute.name); this.attributeLocations[attribute.name] = location; } } { // uniform locations let numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS); for (let i = 0; i < numUniforms; i++) { let uniform = gl.getActiveUniform(program, i); let location = gl.getUniformLocation(program, uniform.name); this.uniformLocations[uniform.name] = location; this.uniforms[uniform.name] = { location: location, value: null, }; } } // uniform blocks if(gl instanceof WebGL2RenderingContext){ let numBlocks = gl.getProgramParameter(program, gl.ACTIVE_UNIFORM_BLOCKS); for (let i = 0; i < numBlocks; i++) { let blockName = gl.getActiveUniformBlockName(program, i); let blockIndex = gl.getUniformBlockIndex(program, blockName); this.uniformBlockIndices[blockName] = blockIndex; gl.uniformBlockBinding(program, blockIndex, blockIndex); let dataSize = gl.getActiveUniformBlockParameter(program, blockIndex, gl.UNIFORM_BLOCK_DATA_SIZE); let uBuffer = gl.createBuffer(); gl.bindBuffer(gl.UNIFORM_BUFFER, uBuffer); gl.bufferData(gl.UNIFORM_BUFFER, dataSize, gl.DYNAMIC_READ); gl.bindBufferBase(gl.UNIFORM_BUFFER, blockIndex, uBuffer); gl.bindBuffer(gl.UNIFORM_BUFFER, null); this.uniformBlocks[blockName] = { name: blockName, index: blockIndex, dataSize: dataSize, buffer: uBuffer }; } } let cached = { program: this.program, vs: this.vs, fs: this.fs, attributeLocations: this.attributeLocations, uniformLocations: this.uniformLocations, uniforms: this.uniforms, uniformBlocks: this.uniformBlocks, }; this.cache.set(`${this.vsSource}, ${this.fsSource}`, cached); } const tEnd = performance.now(); const duration = tEnd - tStart; console.log(`shader compile duration: ${duration.toFixed(3)}`); } setUniformMatrix4(name, value) { const gl = this.gl; const location = this.uniformLocations[name]; if (location == null) { return; } let tmp = new Float32Array(value.elements); gl.uniformMatrix4fv(location, false, tmp); } setUniform1f(name, value) { const gl = this.gl; const uniform = this.uniforms[name]; if (uniform === undefined) { return; } if(uniform.value === value){ return; } uniform.value = value; gl.uniform1f(uniform.location, value); } setUniformBoolean(name, value) { const gl = this.gl; const uniform = this.uniforms[name]; if (uniform === undefined) { return; } if(uniform.value === value){ return; } uniform.value = value; gl.uniform1i(uniform.location, value); } setUniformTexture(name, value) { const gl = this.gl; const location = this.uniformLocations[name]; if (location == null) { return; } gl.uniform1i(location, value); } setUniform2f(name, value) { const gl = this.gl; const location = this.uniformLocations[name]; if (location == null) { return; } gl.uniform2f(location, value[0], value[1]); } setUniform3f(name, value) { const gl = this.gl; const location = this.uniformLocations[name]; if (location == null) { return; } gl.uniform3f(location, value[0], value[1], value[2]); } setUniform(name, value) { if (value.constructor === Matrix4) { this.setUniformMatrix4(name, value); } else if (typeof value === "number") { this.setUniform1f(name, value); } else if (typeof value === "boolean") { this.setUniformBoolean(name, value); } else if (value instanceof WebGLTexture) { this.setUniformTexture(name, value); } else if (value instanceof Array) { if (value.length === 2) { this.setUniform2f(name, value); } else if (value.length === 3) { this.setUniform3f(name, value); } } else { console.error("unhandled uniform type: ", name, value); } } setUniform1i(name, value) { let gl = this.gl; let location = this.uniformLocations[name]; if (location == null) { return; } gl.uniform1i(location, value); } }; class WebGLTexture { constructor(gl, texture) { this.gl = gl; this.texture = texture; this.id = gl.createTexture(); this.target = gl.TEXTURE_2D; this.version = -1; this.update(texture); } update() { if (!this.texture.image) { this.version = this.texture.version; return; } let gl = this.gl; let texture = this.texture; if (this.version === texture.version) { return; } this.target = gl.TEXTURE_2D; gl.bindTexture(this.target, this.id); let level = 0; let internalFormat = paramThreeToGL(gl, texture.format); let width = texture.image.width; let height = texture.image.height; let border = 0; let srcFormat = internalFormat; let srcType = paramThreeToGL(gl, texture.type); let data; gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, texture.flipY); gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha); gl.pixelStorei(gl.UNPACK_ALIGNMENT, texture.unpackAlignment); if (texture instanceof DataTexture) { data = texture.image.data; gl.texParameteri(this.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(this.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); gl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter)); gl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter)); gl.texImage2D(this.target, level, internalFormat, width, height, border, srcFormat, srcType, data); } else if ((texture instanceof CanvasTexture) || (texture instanceof Texture)) { data = texture.image; gl.texParameteri(this.target, gl.TEXTURE_WRAP_S, paramThreeToGL(gl, texture.wrapS)); gl.texParameteri(this.target, gl.TEXTURE_WRAP_T, paramThreeToGL(gl, texture.wrapT)); gl.texParameteri(this.target, gl.TEXTURE_MAG_FILTER, paramThreeToGL(gl, texture.magFilter)); gl.texParameteri(this.target, gl.TEXTURE_MIN_FILTER, paramThreeToGL(gl, texture.minFilter)); gl.texImage2D(this.target, level, internalFormat, internalFormat, srcType, data); if (texture instanceof Texture) {gl.generateMipmap(gl.TEXTURE_2D);} } gl.bindTexture(this.target, null); this.version = texture.version; } }; class WebGLBuffer { constructor() { this.numElements = 0; this.vao = null; this.vbos = new Map(); } }; class Renderer { constructor(threeRenderer) { this.threeRenderer = threeRenderer; this.gl = this.threeRenderer.getContext(); this.buffers = new Map(); this.shaders = new Map(); this.textures = new Map(); this.glTypeMapping = new Map(); this.glTypeMapping.set(Float32Array, this.gl.FLOAT); this.glTypeMapping.set(Uint8Array, this.gl.UNSIGNED_BYTE); this.glTypeMapping.set(Uint16Array, this.gl.UNSIGNED_SHORT); this.toggle = 0; } deleteBuffer(geometry) { let gl = this.gl; let webglBuffer = this.buffers.get(geometry); if (webglBuffer != null) { for (let attributeName in geometry.attributes) { gl.deleteBuffer(webglBuffer.vbos.get(attributeName).handle); } this.buffers.delete(geometry); } } createBuffer(geometry){ let gl = this.gl; let webglBuffer = new WebGLBuffer(); webglBuffer.vao = gl.createVertexArray(); webglBuffer.numElements = geometry.attributes.position.count; gl.bindVertexArray(webglBuffer.vao); for(let attributeName in geometry.attributes){ let bufferAttribute = geometry.attributes[attributeName]; let vbo = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, vbo); gl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW); let normalized = bufferAttribute.normalized; let type = this.glTypeMapping.get(bufferAttribute.array.constructor); if(attributeLocations[attributeName] === undefined){ //attributeLocation = attributeLocations["aExtra"]; }else { let attributeLocation = attributeLocations[attributeName].location; gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); gl.enableVertexAttribArray(attributeLocation); } webglBuffer.vbos.set(attributeName, { handle: vbo, name: attributeName, count: bufferAttribute.count, itemSize: bufferAttribute.itemSize, type: geometry.attributes.position.array.constructor, version: 0 }); } gl.bindBuffer(gl.ARRAY_BUFFER, null); gl.bindVertexArray(null); let disposeHandler = (event) => { this.deleteBuffer(geometry); geometry.removeEventListener("dispose", disposeHandler); }; geometry.addEventListener("dispose", disposeHandler); return webglBuffer; } updateBuffer(geometry){ let gl = this.gl; let webglBuffer = this.buffers.get(geometry); gl.bindVertexArray(webglBuffer.vao); for(let attributeName in geometry.attributes){ let bufferAttribute = geometry.attributes[attributeName]; let normalized = bufferAttribute.normalized; let type = this.glTypeMapping.get(bufferAttribute.array.constructor); let vbo = null; if(!webglBuffer.vbos.has(attributeName)){ vbo = gl.createBuffer(); webglBuffer.vbos.set(attributeName, { handle: vbo, name: attributeName, count: bufferAttribute.count, itemSize: bufferAttribute.itemSize, type: geometry.attributes.position.array.constructor, version: bufferAttribute.version }); }else { vbo = webglBuffer.vbos.get(attributeName).handle; webglBuffer.vbos.get(attributeName).version = bufferAttribute.version; } gl.bindBuffer(gl.ARRAY_BUFFER, vbo); gl.bufferData(gl.ARRAY_BUFFER, bufferAttribute.array, gl.STATIC_DRAW); if(attributeLocations[attributeName] === undefined){ //attributeLocation = attributeLocations["aExtra"]; }else { let attributeLocation = attributeLocations[attributeName].location; gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); gl.enableVertexAttribArray(attributeLocation); } } gl.bindBuffer(gl.ARRAY_BUFFER, null); gl.bindVertexArray(null); } traverse(scene) { let octrees = []; let stack = [scene]; while (stack.length > 0) { let node = stack.pop(); if (node instanceof PointCloudTree) { octrees.push(node); continue; } let visibleChildren = node.children.filter(c => c.visible); stack.push(...visibleChildren); } let result = { octrees: octrees }; return result; } renderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params) { if (exports.measureTimings) performance.mark("renderNodes-start"); let gl = this.gl; let material = params.material ? params.material : octree.material; let shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps; let view = camera.matrixWorldInverse; if(params.viewOverride){ view = params.viewOverride; } let worldView = new Matrix4(); let mat4holder = new Float32Array(16); let i = 0; for (let node of nodes) { if(exports.debug.allowedNodes !== undefined){ if(!exports.debug.allowedNodes.includes(node.name)){ continue; } } let world = node.sceneNode.matrixWorld; worldView.multiplyMatrices(view, world); if (visibilityTextureData) { let vnStart = visibilityTextureData.offsets.get(node); shader.setUniform1f("uVNStart", vnStart); } let level = node.getLevel(); if(node.debug){ shader.setUniform("uDebug", true); }else { shader.setUniform("uDebug", false); } // let isLeaf = false; // if(node instanceof PointCloudOctreeNode){ // isLeaf = Object.keys(node.children).length === 0; // }else if(node instanceof PointCloudArena4DNode){ // isLeaf = node.geometryNode.isLeaf; // } // shader.setUniform("uIsLeafNode", isLeaf); // let isLeaf = node.children.filter(n => n != null).length === 0; // if(!isLeaf){ // continue; // } // TODO consider passing matrices in an array to avoid uniformMatrix4fv overhead const lModel = shader.uniformLocations["modelMatrix"]; if (lModel) { mat4holder.set(world.elements); gl.uniformMatrix4fv(lModel, false, mat4holder); } const lModelView = shader.uniformLocations["modelViewMatrix"]; //mat4holder.set(worldView.elements); // faster then set in chrome 63 for(let j = 0; j < 16; j++){ mat4holder[j] = worldView.elements[j]; } gl.uniformMatrix4fv(lModelView, false, mat4holder); { // Clip Polygons if(material.clipPolygons && material.clipPolygons.length > 0){ let clipPolygonVCount = []; let worldViewProjMatrices = []; for(let clipPolygon of material.clipPolygons){ let view = clipPolygon.viewMatrix; let proj = clipPolygon.projMatrix; let worldViewProj = proj.clone().multiply(view).multiply(world); clipPolygonVCount.push(clipPolygon.markers.length); worldViewProjMatrices.push(worldViewProj); } let flattenedMatrices = [].concat(...worldViewProjMatrices.map(m => m.elements)); let flattenedVertices = new Array(8 * 3 * material.clipPolygons.length); for(let i = 0; i < material.clipPolygons.length; i++){ let clipPolygon = material.clipPolygons[i]; for(let j = 0; j < clipPolygon.markers.length; j++){ flattenedVertices[i * 24 + (j * 3 + 0)] = clipPolygon.markers[j].position.x; flattenedVertices[i * 24 + (j * 3 + 1)] = clipPolygon.markers[j].position.y; flattenedVertices[i * 24 + (j * 3 + 2)] = clipPolygon.markers[j].position.z; } } const lClipPolygonVCount = shader.uniformLocations["uClipPolygonVCount[0]"]; gl.uniform1iv(lClipPolygonVCount, clipPolygonVCount); const lClipPolygonVP = shader.uniformLocations["uClipPolygonWVP[0]"]; gl.uniformMatrix4fv(lClipPolygonVP, false, flattenedMatrices); const lClipPolygons = shader.uniformLocations["uClipPolygonVertices[0]"]; gl.uniform3fv(lClipPolygons, flattenedVertices); } } //shader.setUniformMatrix4("modelMatrix", world); //shader.setUniformMatrix4("modelViewMatrix", worldView); shader.setUniform1f("uLevel", level); shader.setUniform1f("uNodeSpacing", node.geometryNode.estimatedSpacing); shader.setUniform1f("uPCIndex", i); // uBBSize if (shadowMaps.length > 0) { const lShadowMap = shader.uniformLocations["uShadowMap[0]"]; shader.setUniform3f("uShadowColor", material.uniforms.uShadowColor.value); let bindingStart = 5; let bindingPoints = new Array(shadowMaps.length).fill(bindingStart).map((a, i) => (a + i)); gl.uniform1iv(lShadowMap, bindingPoints); for (let i = 0; i < shadowMaps.length; i++) { let shadowMap = shadowMaps[i]; let bindingPoint = bindingPoints[i]; let glTexture = this.threeRenderer.properties.get(shadowMap.target.texture).__webglTexture; gl.activeTexture(gl[`TEXTURE${bindingPoint}`]); gl.bindTexture(gl.TEXTURE_2D, glTexture); } { let worldViewMatrices = shadowMaps .map(sm => sm.camera.matrixWorldInverse) .map(view => new Matrix4().multiplyMatrices(view, world)); let flattenedMatrices = [].concat(...worldViewMatrices.map(c => c.elements)); const lWorldView = shader.uniformLocations["uShadowWorldView[0]"]; gl.uniformMatrix4fv(lWorldView, false, flattenedMatrices); } { let flattenedMatrices = [].concat(...shadowMaps.map(sm => sm.camera.projectionMatrix.elements)); const lProj = shader.uniformLocations["uShadowProj[0]"]; gl.uniformMatrix4fv(lProj, false, flattenedMatrices); } } const geometry = node.geometryNode.geometry; if(geometry.attributes["gps-time"]){ const bufferAttribute = geometry.attributes["gps-time"]; const attGPS = octree.getAttribute("gps-time"); let initialRange = attGPS.initialRange; let initialRangeSize = initialRange[1] - initialRange[0]; let globalRange = attGPS.range; let globalRangeSize = globalRange[1] - globalRange[0]; let scale = initialRangeSize / globalRangeSize; let offset = -(globalRange[0] - initialRange[0]) / initialRangeSize; scale = Number.isNaN(scale) ? 1 : scale; offset = Number.isNaN(offset) ? 0 : offset; shader.setUniform1f("uGpsScale", scale); shader.setUniform1f("uGpsOffset", offset); //shader.setUniform2f("uFilterGPSTimeClipRange", [-Infinity, Infinity]); let uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value; // let gpsCliPRangeMin = uFilterGPSTimeClipRange[0] // let gpsCliPRangeMax = uFilterGPSTimeClipRange[1] // shader.setUniform2f("uFilterGPSTimeClipRange", [gpsCliPRangeMin, gpsCliPRangeMax]); let normalizedClipRange = [ (uFilterGPSTimeClipRange[0] - globalRange[0]) / globalRangeSize, (uFilterGPSTimeClipRange[1] - globalRange[0]) / globalRangeSize, ]; shader.setUniform2f("uFilterGPSTimeClipRange", normalizedClipRange); // // ranges in full gps coordinate system // const globalRange = attGPS.range; // const bufferRange = bufferAttribute.potree.range; // // ranges in [0, 1] // // normalizedGlobalRange = [0, 1] // // normalizedBufferRange: norm buffer within norm global range e.g. [0.2, 0.8] // const globalWidth = globalRange[1] - globalRange[0]; // const normalizedBufferRange = [ // (bufferRange[0] - globalRange[0]) / globalWidth, // (bufferRange[1] - globalRange[0]) / globalWidth, // ]; // shader.setUniform2f("uNormalizedGpsBufferRange", normalizedBufferRange); // let uFilterGPSTimeClipRange = material.uniforms.uFilterGPSTimeClipRange.value; // let gpsCliPRangeMin = uFilterGPSTimeClipRange[0] // let gpsCliPRangeMax = uFilterGPSTimeClipRange[1] // shader.setUniform2f("uFilterGPSTimeClipRange", [gpsCliPRangeMin, gpsCliPRangeMax]); // shader.setUniform1f("uGpsScale", bufferAttribute.potree.scale); // shader.setUniform1f("uGpsOffset", bufferAttribute.potree.offset); } { let uFilterReturnNumberRange = material.uniforms.uFilterReturnNumberRange.value; let uFilterNumberOfReturnsRange = material.uniforms.uFilterNumberOfReturnsRange.value; let uFilterPointSourceIDClipRange = material.uniforms.uFilterPointSourceIDClipRange.value; shader.setUniform2f("uFilterReturnNumberRange", uFilterReturnNumberRange); shader.setUniform2f("uFilterNumberOfReturnsRange", uFilterNumberOfReturnsRange); shader.setUniform2f("uFilterPointSourceIDClipRange", uFilterPointSourceIDClipRange); } let webglBuffer = null; if(!this.buffers.has(geometry)){ webglBuffer = this.createBuffer(geometry); this.buffers.set(geometry, webglBuffer); }else { webglBuffer = this.buffers.get(geometry); for(let attributeName in geometry.attributes){ let attribute = geometry.attributes[attributeName]; if(attribute.version > webglBuffer.vbos.get(attributeName).version){ this.updateBuffer(geometry); } } } gl.bindVertexArray(webglBuffer.vao); let isExtraAttribute = attributeLocations[material.activeAttributeName] === undefined && Object.keys(geometry.attributes).includes(material.activeAttributeName); if(isExtraAttribute){ const attributeLocation = attributeLocations["aExtra"].location; for(const attributeName in geometry.attributes){ const bufferAttribute = geometry.attributes[attributeName]; const vbo = webglBuffer.vbos.get(attributeName); gl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle); gl.disableVertexAttribArray(attributeLocation); } const attName = material.activeAttributeName; const bufferAttribute = geometry.attributes[attName]; const vbo = webglBuffer.vbos.get(attName); if(bufferAttribute !== undefined && vbo !== undefined){ let type = this.glTypeMapping.get(bufferAttribute.array.constructor); let normalized = bufferAttribute.normalized; gl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle); gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); gl.enableVertexAttribArray(attributeLocation); } { const attExtra = octree.pcoGeometry.pointAttributes.attributes .find(a => a.name === attName); let range = material.getRange(attName); if(!range){ range = attExtra.range; } if(!range){ range = [0, 1]; } let initialRange = attExtra.initialRange; let initialRangeSize = initialRange[1] - initialRange[0]; let globalRange = range; let globalRangeSize = globalRange[1] - globalRange[0]; let scale = initialRangeSize / globalRangeSize; let offset = -(globalRange[0] - initialRange[0]) / initialRangeSize; scale = Number.isNaN(scale) ? 1 : scale; offset = Number.isNaN(offset) ? 0 : offset; shader.setUniform1f("uExtraScale", scale); shader.setUniform1f("uExtraOffset", offset); } }else { for(const attributeName in geometry.attributes){ const bufferAttribute = geometry.attributes[attributeName]; const vbo = webglBuffer.vbos.get(attributeName); if(attributeLocations[attributeName] !== undefined){ const attributeLocation = attributeLocations[attributeName].location; let type = this.glTypeMapping.get(bufferAttribute.array.constructor); let normalized = bufferAttribute.normalized; gl.bindBuffer(gl.ARRAY_BUFFER, vbo.handle); gl.vertexAttribPointer(attributeLocation, bufferAttribute.itemSize, type, normalized, 0, 0); gl.enableVertexAttribArray(attributeLocation); } } } let numPoints = webglBuffer.numElements; gl.drawArrays(gl.POINTS, 0, numPoints); i++; } gl.bindVertexArray(null); if (exports.measureTimings) { performance.mark("renderNodes-end"); performance.measure("render.renderNodes", "renderNodes-start", "renderNodes-end"); } } renderOctree(octree, nodes, camera, target, params = {}){ let gl = this.gl; let material = params.material ? params.material : octree.material; let shadowMaps = params.shadowMaps == null ? [] : params.shadowMaps; let view = camera.matrixWorldInverse; let viewInv = camera.matrixWorld; if(params.viewOverride){ view = params.viewOverride; viewInv = view.clone().invert(); } let proj = camera.projectionMatrix; let projInv = proj.clone().invert(); //let worldView = new THREE.Matrix4(); let shader = null; let visibilityTextureData = null; let currentTextureBindingPoint = 0; if (material.pointSizeType >= 0) { if (material.pointSizeType === PointSizeType.ADAPTIVE || material.activeAttributeName === "level of detail") { let vnNodes = (params.vnTextureNodes != null) ? params.vnTextureNodes : nodes; visibilityTextureData = octree.computeVisibilityTextureData(vnNodes, camera); const vnt = material.visibleNodesTexture; const data = vnt.image.data; data.set(visibilityTextureData.data); vnt.needsUpdate = true; } } { // UPDATE SHADER AND TEXTURES if (!this.shaders.has(material)) { let [vs, fs] = [material.vertexShader, material.fragmentShader]; let shader = new Shader(gl, "pointcloud", vs, fs); this.shaders.set(material, shader); } shader = this.shaders.get(material); //if(material.needsUpdate){ { let [vs, fs] = [material.vertexShader, material.fragmentShader]; let numSnapshots = material.snapEnabled ? material.numSnapshots : 0; let numClipBoxes = (material.clipBoxes && material.clipBoxes.length) ? material.clipBoxes.length : 0; let numClipSpheres = (params.clipSpheres && params.clipSpheres.length) ? params.clipSpheres.length : 0; let numClipPolygons = (material.clipPolygons && material.clipPolygons.length) ? material.clipPolygons.length : 0; let defines = [ `#define num_shadowmaps ${shadowMaps.length}`, `#define num_snapshots ${numSnapshots}`, `#define num_clipboxes ${numClipBoxes}`, `#define num_clipspheres ${numClipSpheres}`, `#define num_clippolygons ${numClipPolygons}`, ]; if(octree.pcoGeometry.root.isLoaded()){ let attributes = octree.pcoGeometry.root.geometry.attributes; if(attributes["gps-time"]){ defines.push("#define clip_gps_enabled"); } if(attributes["return number"]){ defines.push("#define clip_return_number_enabled"); } if(attributes["number of returns"]){ defines.push("#define clip_number_of_returns_enabled"); } if(attributes["source id"] || attributes["point source id"]){ defines.push("#define clip_point_source_id_enabled"); } } let definesString = defines.join("\n"); let vsVersionIndex = vs.indexOf("#version "); let fsVersionIndex = fs.indexOf("#version "); if(vsVersionIndex >= 0){ vs = vs.replace(/(#version .*)/, `$1\n${definesString}`); }else { vs = `${definesString}\n${vs}`; } if(fsVersionIndex >= 0){ fs = fs.replace(/(#version .*)/, `$1\n${definesString}`); }else { fs = `${definesString}\n${fs}`; } shader.update(vs, fs); material.needsUpdate = false; } for (let uniformName of Object.keys(material.uniforms)) { let uniform = material.uniforms[uniformName]; if (uniform.type == "t") { let texture = uniform.value; if (!texture) { continue; } if (!this.textures.has(texture)) { let webglTexture = new WebGLTexture(gl, texture); this.textures.set(texture, webglTexture); } let webGLTexture = this.textures.get(texture); webGLTexture.update(); } } } gl.useProgram(shader.program); let transparent = false; if(params.transparent !== undefined){ transparent = params.transparent && material.opacity < 1; }else { transparent = material.opacity < 1; } if (transparent){ gl.enable(gl.BLEND); gl.blendFunc(gl.SRC_ALPHA, gl.ONE); gl.depthMask(false); gl.disable(gl.DEPTH_TEST); } else { gl.disable(gl.BLEND); gl.depthMask(true); gl.enable(gl.DEPTH_TEST); } if(params.blendFunc !== undefined){ gl.enable(gl.BLEND); gl.blendFunc(...params.blendFunc); } if(params.depthTest !== undefined){ if(params.depthTest === true){ gl.enable(gl.DEPTH_TEST); }else { gl.disable(gl.DEPTH_TEST); } } if(params.depthWrite !== undefined){ if(params.depthWrite === true){ gl.depthMask(true); }else { gl.depthMask(false); } } { // UPDATE UNIFORMS shader.setUniformMatrix4("projectionMatrix", proj); shader.setUniformMatrix4("viewMatrix", view); shader.setUniformMatrix4("uViewInv", viewInv); shader.setUniformMatrix4("uProjInv", projInv); let screenWidth = target ? target.width : material.screenWidth; let screenHeight = target ? target.height : material.screenHeight; shader.setUniform1f("uScreenWidth", screenWidth); shader.setUniform1f("uScreenHeight", screenHeight); shader.setUniform1f("fov", Math.PI * camera.fov / 180); shader.setUniform1f("near", camera.near); shader.setUniform1f("far", camera.far); if(camera instanceof OrthographicCamera){ shader.setUniform("uUseOrthographicCamera", true); shader.setUniform("uOrthoWidth", camera.right - camera.left); shader.setUniform("uOrthoHeight", camera.top - camera.bottom); }else { shader.setUniform("uUseOrthographicCamera", false); } if(material.clipBoxes.length + material.clipPolygons.length === 0){ shader.setUniform1i("clipTask", ClipTask.NONE); }else { shader.setUniform1i("clipTask", material.clipTask); } shader.setUniform1i("clipMethod", material.clipMethod); if (material.clipBoxes && material.clipBoxes.length > 0) { //let flattenedMatrices = [].concat(...material.clipBoxes.map(c => c.inverse.elements)); //const lClipBoxes = shader.uniformLocations["clipBoxes[0]"]; //gl.uniformMatrix4fv(lClipBoxes, false, flattenedMatrices); const lClipBoxes = shader.uniformLocations["clipBoxes[0]"]; gl.uniformMatrix4fv(lClipBoxes, false, material.uniforms.clipBoxes.value); } // TODO CLIPSPHERES if(params.clipSpheres && params.clipSpheres.length > 0){ let clipSpheres = params.clipSpheres; let matrices = []; for(let clipSphere of clipSpheres){ //let mScale = new THREE.Matrix4().makeScale(...clipSphere.scale.toArray()); //let mTranslate = new THREE.Matrix4().makeTranslation(...clipSphere.position.toArray()); //let clipToWorld = new THREE.Matrix4().multiplyMatrices(mTranslate, mScale); let clipToWorld = clipSphere.matrixWorld; let viewToWorld = camera.matrixWorld; let worldToClip = clipToWorld.clone().invert(); let viewToClip = new Matrix4().multiplyMatrices(worldToClip, viewToWorld); matrices.push(viewToClip); } let flattenedMatrices = [].concat(...matrices.map(matrix => matrix.elements)); const lClipSpheres = shader.uniformLocations["uClipSpheres[0]"]; gl.uniformMatrix4fv(lClipSpheres, false, flattenedMatrices); //const lClipSpheres = shader.uniformLocations["uClipSpheres[0]"]; //gl.uniformMatrix4fv(lClipSpheres, false, material.uniforms.clipSpheres.value); } shader.setUniform1f("size", material.size); shader.setUniform1f("maxSize", material.uniforms.maxSize.value); shader.setUniform1f("minSize", material.uniforms.minSize.value); // uniform float uPCIndex shader.setUniform1f("uOctreeSpacing", material.spacing); shader.setUniform("uOctreeSize", material.uniforms.octreeSize.value); //uniform vec3 uColor; shader.setUniform3f("uColor", material.color.toArray()); //uniform float opacity; shader.setUniform1f("uOpacity", material.opacity); shader.setUniform2f("elevationRange", material.elevationRange); shader.setUniform2f("intensityRange", material.intensityRange); shader.setUniform3f("uIntensity_gbc", [ material.intensityGamma, material.intensityBrightness, material.intensityContrast ]); shader.setUniform3f("uRGB_gbc", [ material.rgbGamma, material.rgbBrightness, material.rgbContrast ]); shader.setUniform1f("uTransition", material.transition); shader.setUniform1f("wRGB", material.weightRGB); shader.setUniform1f("wIntensity", material.weightIntensity); shader.setUniform1f("wElevation", material.weightElevation); shader.setUniform1f("wClassification", material.weightClassification); shader.setUniform1f("wReturnNumber", material.weightReturnNumber); shader.setUniform1f("wSourceID", material.weightSourceID); shader.setUniform("backfaceCulling", material.uniforms.backfaceCulling.value); let vnWebGLTexture = this.textures.get(material.visibleNodesTexture); if(vnWebGLTexture){ shader.setUniform1i("visibleNodesTexture", currentTextureBindingPoint); gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); gl.bindTexture(vnWebGLTexture.target, vnWebGLTexture.id); currentTextureBindingPoint++; } let gradientTexture = this.textures.get(material.gradientTexture); shader.setUniform1i("gradient", currentTextureBindingPoint); gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); gl.bindTexture(gradientTexture.target, gradientTexture.id); const repeat = material.elevationGradientRepeat; if(repeat === ElevationGradientRepeat.REPEAT){ gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.REPEAT); gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.REPEAT); }else if(repeat === ElevationGradientRepeat.MIRRORED_REPEAT){ gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.MIRRORED_REPEAT); gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.MIRRORED_REPEAT); }else { gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE); gl.texParameteri(gradientTexture.target, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE); } currentTextureBindingPoint++; let classificationTexture = this.textures.get(material.classificationTexture); shader.setUniform1i("classificationLUT", currentTextureBindingPoint); gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); gl.bindTexture(classificationTexture.target, classificationTexture.id); currentTextureBindingPoint++; let matcapTexture = this.textures.get(material.matcapTexture); shader.setUniform1i("matcapTextureUniform", currentTextureBindingPoint); gl.activeTexture(gl.TEXTURE0 + currentTextureBindingPoint); gl.bindTexture(matcapTexture.target, matcapTexture.id); currentTextureBindingPoint++; if (material.snapEnabled === true) { { const lSnapshot = shader.uniformLocations["uSnapshot[0]"]; const lSnapshotDepth = shader.uniformLocations["uSnapshotDepth[0]"]; let bindingStart = currentTextureBindingPoint; let lSnapshotBindingPoints = new Array(5).fill(bindingStart).map((a, i) => (a + i)); let lSnapshotDepthBindingPoints = new Array(5) .fill(1 + Math.max(...lSnapshotBindingPoints)) .map((a, i) => (a + i)); currentTextureBindingPoint = 1 + Math.max(...lSnapshotDepthBindingPoints); gl.uniform1iv(lSnapshot, lSnapshotBindingPoints); gl.uniform1iv(lSnapshotDepth, lSnapshotDepthBindingPoints); for (let i = 0; i < 5; i++) { let texture = material.uniforms[`uSnapshot`].value[i]; let textureDepth = material.uniforms[`uSnapshotDepth`].value[i]; if (!texture) { break; } let snapTexture = this.threeRenderer.properties.get(texture).__webglTexture; let snapTextureDepth = this.threeRenderer.properties.get(textureDepth).__webglTexture; let bindingPoint = lSnapshotBindingPoints[i]; let depthBindingPoint = lSnapshotDepthBindingPoints[i]; gl.activeTexture(gl[`TEXTURE${bindingPoint}`]); gl.bindTexture(gl.TEXTURE_2D, snapTexture); gl.activeTexture(gl[`TEXTURE${depthBindingPoint}`]); gl.bindTexture(gl.TEXTURE_2D, snapTextureDepth); } } { let flattenedMatrices = [].concat(...material.uniforms.uSnapView.value.map(c => c.elements)); const lSnapView = shader.uniformLocations["uSnapView[0]"]; gl.uniformMatrix4fv(lSnapView, false, flattenedMatrices); } { let flattenedMatrices = [].concat(...material.uniforms.uSnapProj.value.map(c => c.elements)); const lSnapProj = shader.uniformLocations["uSnapProj[0]"]; gl.uniformMatrix4fv(lSnapProj, false, flattenedMatrices); } { let flattenedMatrices = [].concat(...material.uniforms.uSnapProjInv.value.map(c => c.elements)); const lSnapProjInv = shader.uniformLocations["uSnapProjInv[0]"]; gl.uniformMatrix4fv(lSnapProjInv, false, flattenedMatrices); } { let flattenedMatrices = [].concat(...material.uniforms.uSnapViewInv.value.map(c => c.elements)); const lSnapViewInv = shader.uniformLocations["uSnapViewInv[0]"]; gl.uniformMatrix4fv(lSnapViewInv, false, flattenedMatrices); } } } this.renderNodes(octree, nodes, visibilityTextureData, camera, target, shader, params); gl.activeTexture(gl.TEXTURE2); gl.bindTexture(gl.TEXTURE_2D, null); gl.activeTexture(gl.TEXTURE0); } render(scene, camera, target = null, params = {}) { const gl = this.gl; // PREPARE if (target != null) { this.threeRenderer.setRenderTarget(target); } //camera.updateProjectionMatrix(); // camera.matrixWorldInverse.invert(camera.matrixWorld); const traversalResult = this.traverse(scene); // RENDER for (const octree of traversalResult.octrees) { let nodes = octree.visibleNodes; this.renderOctree(octree, nodes, camera, target, params); } // CLEANUP gl.activeTexture(gl.TEXTURE1); gl.bindTexture(gl.TEXTURE_2D, null); gl.bindBuffer(gl.ARRAY_BUFFER, null); gl.bindVertexArray(null); this.threeRenderer.resetState(); } }; class ProfileData { constructor (profile) { this.profile = profile; this.segments = []; this.boundingBox = new Box3(); for (let i = 0; i < profile.points.length - 1; i++) { let start = profile.points[i]; let end = profile.points[i + 1]; let startGround = new Vector3(start.x, start.y, 0); let endGround = new Vector3(end.x, end.y, 0); let center = new Vector3().addVectors(endGround, startGround).multiplyScalar(0.5); let length = startGround.distanceTo(endGround); let side = new Vector3().subVectors(endGround, startGround).normalize(); let up = new Vector3(0, 0, 1); let forward = new Vector3().crossVectors(side, up).normalize(); let N = forward; let cutPlane = new Plane().setFromNormalAndCoplanarPoint(N, startGround); let halfPlane = new Plane().setFromNormalAndCoplanarPoint(side, center); let segment = { start: start, end: end, cutPlane: cutPlane, halfPlane: halfPlane, length: length, points: new Points$1() }; this.segments.push(segment); } } size () { let size = 0; for (let segment of this.segments) { size += segment.points.numPoints; } return size; } }; class ProfileRequest { constructor (pointcloud, profile, maxDepth, callback) { this.pointcloud = pointcloud; this.profile = profile; this.maxDepth = maxDepth || Number.MAX_VALUE; this.callback = callback; this.temporaryResult = new ProfileData(this.profile); this.pointsServed = 0; this.highestLevelServed = 0; this.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; }); this.initialize(); } initialize () { this.priorityQueue.push({node: this.pointcloud.pcoGeometry.root, weight: Infinity}); }; // traverse the node and add intersecting descendants to queue traverse (node) { let stack = []; for (let i = 0; i < 8; i++) { let child = node.children[i]; if (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) { stack.push(child); } } while (stack.length > 0) { let node = stack.pop(); let weight = node.boundingSphere.radius; this.priorityQueue.push({node: node, weight: weight}); // add children that intersect the cutting plane if (node.level < this.maxDepth) { for (let i = 0; i < 8; i++) { let child = node.children[i]; if (child && this.pointcloud.nodeIntersectsProfile(child, this.profile)) { stack.push(child); } } } } } update(){ if(!this.updateGeneratorInstance){ this.updateGeneratorInstance = this.updateGenerator(); } let result = this.updateGeneratorInstance.next(); if(result.done){ this.updateGeneratorInstance = null; } } * updateGenerator(){ // load nodes in queue // if hierarchy expands, also load nodes from expanded hierarchy // once loaded, add data to this.points and remove node from queue // only evaluate 1-50 nodes per frame to maintain responsiveness let start = performance.now(); let maxNodesPerUpdate = 1; let intersectedNodes = []; for (let i = 0; i < Math.min(maxNodesPerUpdate, this.priorityQueue.size()); i++) { let element = this.priorityQueue.pop(); let node = element.node; if(node.level > this.maxDepth){ continue; } if (node.loaded) { // add points to result intersectedNodes.push(node); exports.lru.touch(node); this.highestLevelServed = Math.max(node.getLevel(), this.highestLevelServed); var geom = node.pcoGeometry; var hierarchyStepSize = geom ? geom.hierarchyStepSize : 1; var doTraverse = node.getLevel() === 0 || (node.level % hierarchyStepSize === 0 && node.hasChildren); if (doTraverse) { this.traverse(node); } } else { node.load(); this.priorityQueue.push(element); } } if (intersectedNodes.length > 0) { for(let done of this.getPointsInsideProfile(intersectedNodes, this.temporaryResult)){ if(!done){ //console.log("updateGenerator yields"); yield false; } } if (this.temporaryResult.size() > 100) { this.pointsServed += this.temporaryResult.size(); this.callback.onProgress({request: this, points: this.temporaryResult}); this.temporaryResult = new ProfileData(this.profile); } } if (this.priorityQueue.size() === 0) { // we're done! inform callback and remove from pending requests if (this.temporaryResult.size() > 0) { this.pointsServed += this.temporaryResult.size(); this.callback.onProgress({request: this, points: this.temporaryResult}); this.temporaryResult = new ProfileData(this.profile); } this.callback.onFinish({request: this}); let index = this.pointcloud.profileRequests.indexOf(this); if (index >= 0) { this.pointcloud.profileRequests.splice(index, 1); } } yield true; }; * getAccepted(numPoints, node, matrix, segment, segmentDir, points, totalMileage){ let checkpoint = performance.now(); let accepted = new Uint32Array(numPoints); let mileage = new Float64Array(numPoints); let acceptedPositions = new Float32Array(numPoints * 3); let numAccepted = 0; let pos = new Vector3(); let svp = new Vector3(); let view = new Float32Array(node.geometry.attributes.position.array); for (let i = 0; i < numPoints; i++) { pos.set( view[i * 3 + 0], view[i * 3 + 1], view[i * 3 + 2]); pos.applyMatrix4(matrix); let distance = Math.abs(segment.cutPlane.distanceToPoint(pos)); let centerDistance = Math.abs(segment.halfPlane.distanceToPoint(pos)); if (distance < this.profile.width / 2 && centerDistance < segment.length / 2) { svp.subVectors(pos, segment.start); let localMileage = segmentDir.dot(svp); accepted[numAccepted] = i; mileage[numAccepted] = localMileage + totalMileage; points.boundingBox.expandByPoint(pos); pos.sub(this.pointcloud.position); acceptedPositions[3 * numAccepted + 0] = pos.x; acceptedPositions[3 * numAccepted + 1] = pos.y; acceptedPositions[3 * numAccepted + 2] = pos.z; numAccepted++; } if((i % 1000) === 0){ let duration = performance.now() - checkpoint; if(duration > 4){ //console.log(`getAccepted yield after ${duration}ms`); yield false; checkpoint = performance.now(); } } } accepted = accepted.subarray(0, numAccepted); mileage = mileage.subarray(0, numAccepted); acceptedPositions = acceptedPositions.subarray(0, numAccepted * 3); //let end = performance.now(); //let duration = end - start; //console.log("accepted duration ", duration) //console.log(`getAccepted finished`); yield [accepted, mileage, acceptedPositions]; } * getPointsInsideProfile(nodes, target){ let checkpoint = performance.now(); let totalMileage = 0; let pointsProcessed = 0; for (let segment of target.segments) { for (let node of nodes) { let numPoints = node.numPoints; let geometry = node.geometry; if(!numPoints){ continue; } { // skip if current node doesn't intersect current segment let bbWorld = node.boundingBox.clone().applyMatrix4(this.pointcloud.matrixWorld); let bsWorld = bbWorld.getBoundingSphere(new Sphere()); let start = new Vector3(segment.start.x, segment.start.y, bsWorld.center.z); let end = new Vector3(segment.end.x, segment.end.y, bsWorld.center.z); let closest = new Line3(start, end).closestPointToPoint(bsWorld.center, true, new Vector3()); let distance = closest.distanceTo(bsWorld.center); let intersects = (distance < (bsWorld.radius + target.profile.width)); if(!intersects){ continue; } } //{// DEBUG // console.log(node.name); // let boxHelper = new Potree.Box3Helper(node.getBoundingBox()); // boxHelper.matrixAutoUpdate = false; // boxHelper.matrix.copy(viewer.scene.pointclouds[0].matrixWorld); // viewer.scene.scene.add(boxHelper); //} let sv = new Vector3().subVectors(segment.end, segment.start).setZ(0); let segmentDir = sv.clone().normalize(); let points = new Points$1(); let nodeMatrix = new Matrix4().makeTranslation(...node.boundingBox.min.toArray()); let matrix = new Matrix4().multiplyMatrices( this.pointcloud.matrixWorld, nodeMatrix); pointsProcessed = pointsProcessed + numPoints; let accepted = null; let mileage = null; let acceptedPositions = null; for(let result of this.getAccepted(numPoints, node, matrix, segment, segmentDir, points,totalMileage)){ if(!result){ let duration = performance.now() - checkpoint; //console.log(`getPointsInsideProfile yield after ${duration}ms`); yield false; checkpoint = performance.now(); }else { [accepted, mileage, acceptedPositions] = result; } } let duration = performance.now() - checkpoint; if(duration > 4){ //console.log(`getPointsInsideProfile yield after ${duration}ms`); yield false; checkpoint = performance.now(); } points.data.position = acceptedPositions; let relevantAttributes = Object.keys(geometry.attributes).filter(a => !["position", "indices"].includes(a)); for(let attributeName of relevantAttributes){ let attribute = geometry.attributes[attributeName]; let numElements = attribute.array.length / numPoints; if(numElements !== parseInt(numElements)){ debugger; } let Type = attribute.array.constructor; let filteredBuffer = new Type(numElements * accepted.length); let source = attribute.array; let target = filteredBuffer; for(let i = 0; i < accepted.length; i++){ let index = accepted[i]; let start = index * numElements; let end = start + numElements; let sub = source.subarray(start, end); target.set(sub, i * numElements); } points.data[attributeName] = filteredBuffer; } points.data['mileage'] = mileage; points.numPoints = accepted.length; segment.points.add(points); } totalMileage += segment.length; } for (let segment of target.segments) { target.boundingBox.union(segment.points.boundingBox); } //console.log(`getPointsInsideProfile finished`); yield true; }; finishLevelThenCancel () { if (this.cancelRequested) { return; } this.maxDepth = this.highestLevelServed; this.cancelRequested = true; //console.log(`maxDepth: ${this.maxDepth}`); }; cancel () { this.callback.onCancel(); this.priorityQueue = new BinaryHeap(function (x) { return 1 / x.weight; }); let index = this.pointcloud.profileRequests.indexOf(this); if (index >= 0) { this.pointcloud.profileRequests.splice(index, 1); } }; } class Version{ constructor(version){ this.version = version; let vmLength = (version.indexOf('.') === -1) ? version.length : version.indexOf('.'); this.versionMajor = parseInt(version.substr(0, vmLength)); this.versionMinor = parseInt(version.substr(vmLength + 1)); if (this.versionMinor.length === 0) { this.versionMinor = 0; } } newerThan(version){ let v = new Version(version); if (this.versionMajor > v.versionMajor) { return true; } else if (this.versionMajor === v.versionMajor && this.versionMinor > v.versionMinor) { return true; } else { return false; } } equalOrHigher(version){ let v = new Version(version); if (this.versionMajor > v.versionMajor) { return true; } else if (this.versionMajor === v.versionMajor && this.versionMinor >= v.versionMinor) { return true; } else { return false; } } upTo(version){ return !this.newerThan(version); } } class WorkerPool{ constructor(){ this.workers = {}; } getWorker(url){ if (!this.workers[url]){ this.workers[url] = []; } if (this.workers[url].length === 0){ let worker = new Worker(url); this.workers[url].push(worker); } let worker = this.workers[url].pop(); return worker; } returnWorker(url, worker){ this.workers[url].push(worker); } }; //Potree.workerPool = new Potree.WorkerPool(); function createPointcloudData(pointcloud) { let material = pointcloud.material; let ranges = []; for(let [name, value] of material.ranges){ ranges.push({ name: name, value: value, }); } if(typeof material.elevationRange[0] === "number"){ ranges.push({ name: "elevationRange", value: material.elevationRange, }); } if(typeof material.intensityRange[0] === "number"){ ranges.push({ name: "intensityRange", value: material.intensityRange, }); } let pointSizeTypeName = Object.entries(Potree.PointSizeType).find(e => e[1] === material.pointSizeType)[0]; let jsonMaterial = { activeAttributeName: material.activeAttributeName, ranges: ranges, size: material.size, minSize: material.minSize, pointSizeType: pointSizeTypeName, matcap: material.matcap, }; const pcdata = { name: pointcloud.name, url: pointcloud.pcoGeometry.url, position: pointcloud.position.toArray(), rotation: pointcloud.rotation.toArray(), scale: pointcloud.scale.toArray(), material: jsonMaterial, }; return pcdata; } function createProfileData(profile){ const data = { uuid: profile.uuid, name: profile.name, points: profile.points.map(p => p.toArray()), height: profile.height, width: profile.width, }; return data; } function createVolumeData(volume){ const data = { uuid: volume.uuid, type: volume.constructor.name, name: volume.name, position: volume.position.toArray(), rotation: volume.rotation.toArray(), scale: volume.scale.toArray(), visible: volume.visible, clip: volume.clip, }; return data; } function createCameraAnimationData(animation){ const controlPoints = animation.controlPoints.map( cp => { const cpdata = { position: cp.position.toArray(), target: cp.target.toArray(), }; return cpdata; }); const data = { uuid: animation.uuid, name: animation.name, duration: animation.duration, t: animation.t, curveType: animation.curveType, visible: animation.visible, controlPoints: controlPoints, }; return data; } function createMeasurementData(measurement){ const data = { uuid: measurement.uuid, name: measurement.name, points: measurement.points.map(p => p.position.toArray()), showDistances: measurement.showDistances, showCoordinates: measurement.showCoordinates, showArea: measurement.showArea, closed: measurement.closed, showAngles: measurement.showAngles, showHeight: measurement.showHeight, showCircle: measurement.showCircle, showAzimuth: measurement.showAzimuth, showEdges: measurement.showEdges, color: measurement.color.toArray(), }; return data; } function createOrientedImagesData(images){ const data = { cameraParamsPath: images.cameraParamsPath, imageParamsPath: images.imageParamsPath, }; return data; } function createGeopackageData(geopackage){ const data = { path: geopackage.path, }; return data; } function createAnnotationData(annotation){ const data = { uuid: annotation.uuid, title: annotation.title.toString(), description: annotation.description, position: annotation.position.toArray(), offset: annotation.offset.toArray(), children: [], }; if(annotation.cameraPosition){ data.cameraPosition = annotation.cameraPosition.toArray(); } if(annotation.cameraTarget){ data.cameraTarget = annotation.cameraTarget.toArray(); } if(typeof annotation.radius !== "undefined"){ data.radius = annotation.radius; } return data; } function createAnnotationsData(viewer){ const map = new Map(); viewer.scene.annotations.traverseDescendants(a => { const aData = createAnnotationData(a); map.set(a, aData); }); for(const [annotation, data] of map){ for(const child of annotation.children){ const childData = map.get(child); data.children.push(childData); } } const annotations = viewer.scene.annotations.children.map(a => map.get(a)); return annotations; } function createSettingsData(viewer){ return { pointBudget: viewer.getPointBudget(), fov: viewer.getFOV(), edlEnabled: viewer.getEDLEnabled(), edlRadius: viewer.getEDLRadius(), edlStrength: viewer.getEDLStrength(), background: viewer.getBackground(), minNodeSize: viewer.getMinNodeSize(), showBoundingBoxes: viewer.getShowBoundingBox(), }; } function createSceneContentData(viewer){ const data = []; const potreeObjects = []; viewer.scene.scene.traverse(node => { if(node.potree){ potreeObjects.push(node); } }); for(const object of potreeObjects){ if(object.potree.file){ const saveObject = { file: object.potree.file, }; data.push(saveObject); } } return data; } function createViewData(viewer){ const view = viewer.scene.view; const data = { position: view.position.toArray(), target: view.getPivot().toArray(), }; return data; } function createClassificationData(viewer){ const classifications = viewer.classifications; const data = classifications; return data; } function saveProject(viewer) { const scene = viewer.scene; const data = { type: "Potree", version: 1.7, settings: createSettingsData(viewer), view: createViewData(viewer), classification: createClassificationData(viewer), pointclouds: scene.pointclouds.map(createPointcloudData), measurements: scene.measurements.map(createMeasurementData), volumes: scene.volumes.map(createVolumeData), cameraAnimations: scene.cameraAnimations.map(createCameraAnimationData), profiles: scene.profiles.map(createProfileData), annotations: createAnnotationsData(viewer), orientedImages: scene.orientedImages.map(createOrientedImagesData), geopackages: scene.geopackages.map(createGeopackageData), // objects: createSceneContentData(viewer), }; return data; } class ControlPoint{ constructor(){ this.position = new Vector3(0, 0, 0); this.target = new Vector3(0, 0, 0); this.positionHandle = null; this.targetHandle = null; } }; class CameraAnimation extends EventDispatcher{ constructor(viewer){ super(); this.viewer = viewer; this.selectedElement = null; this.controlPoints = []; this.uuid = MathUtils.generateUUID(); this.node = new Object3D(); this.node.name = "camera animation"; this.viewer.scene.scene.add(this.node); this.frustum = this.createFrustum(); this.node.add(this.frustum); this.name = "Camera Animation"; this.duration = 5; this.t = 0; // "centripetal", "chordal", "catmullrom" this.curveType = "centripetal"; this.visible = true; this.createUpdateHook(); this.createPath(); } static defaultFromView(viewer){ const animation = new CameraAnimation(viewer); const camera = viewer.scene.getActiveCamera(); const target = viewer.scene.view.getPivot(); const cpCenter = new Vector3( 0.3 * camera.position.x + 0.7 * target.x, 0.3 * camera.position.y + 0.7 * target.y, 0.3 * camera.position.z + 0.7 * target.z, ); const targetCenter = new Vector3( 0.05 * camera.position.x + 0.95 * target.x, 0.05 * camera.position.y + 0.95 * target.y, 0.05 * camera.position.z + 0.95 * target.z, ); const r = camera.position.distanceTo(target) * 0.3; //const dir = target.clone().sub(camera.position).normalize(); const angle = Utils.computeAzimuth(camera.position, target); const n = 5; for(let i = 0; i < n; i++){ let u = 1.5 * Math.PI * (i / n) + angle; const dx = r * Math.cos(u); const dy = r * Math.sin(u); const cpPos = [ cpCenter.x + dx, cpCenter.y + dy, cpCenter.z, ]; const targetPos = [ targetCenter.x + dx * 0.1, targetCenter.y + dy * 0.1, targetCenter.z, ]; const cp = animation.createControlPoint(); cp.position.set(...cpPos); cp.target.set(...targetPos); } return animation; } createUpdateHook(){ const viewer = this.viewer; viewer.addEventListener("update", () => { const camera = viewer.scene.getActiveCamera(); const {width, height} = viewer.renderer.getSize(new Vector2()); this.node.visible = this.visible; for(const cp of this.controlPoints){ { // position const projected = cp.position.clone().project(camera); const visible = this.visible && (projected.z < 1 && projected.z > -1); if(visible){ const x = width * (projected.x * 0.5 + 0.5); const y = height - height * (projected.y * 0.5 + 0.5); cp.positionHandle.svg.style.left = x - cp.positionHandle.svg.clientWidth / 2; cp.positionHandle.svg.style.top = y - cp.positionHandle.svg.clientHeight / 2; cp.positionHandle.svg.style.display = ""; }else { cp.positionHandle.svg.style.display = "none"; } } { // target const projected = cp.target.clone().project(camera); const visible = this.visible && (projected.z < 1 && projected.z > -1); if(visible){ const x = width * (projected.x * 0.5 + 0.5); const y = height - height * (projected.y * 0.5 + 0.5); cp.targetHandle.svg.style.left = x - cp.targetHandle.svg.clientWidth / 2; cp.targetHandle.svg.style.top = y - cp.targetHandle.svg.clientHeight / 2; cp.targetHandle.svg.style.display = ""; }else { cp.targetHandle.svg.style.display = "none"; } } } this.line.material.resolution.set(width, height); this.updatePath(); { // frustum const frame = this.at(this.t); const frustum = this.frustum; frustum.position.copy(frame.position); frustum.lookAt(...frame.target.toArray()); frustum.scale.set(20, 20, 20); frustum.material.resolution.set(width, height); } }); } createControlPoint(index){ if(index === undefined){ index = this.controlPoints.length; } const cp = new ControlPoint(); if(this.controlPoints.length >= 2 && index === 0){ const cp1 = this.controlPoints[0]; const cp2 = this.controlPoints[1]; const dir = cp1.position.clone().sub(cp2.position).multiplyScalar(0.5); cp.position.copy(cp1.position).add(dir); const tDir = cp1.target.clone().sub(cp2.target).multiplyScalar(0.5); cp.target.copy(cp1.target).add(tDir); }else if(this.controlPoints.length >= 2 && index === this.controlPoints.length){ const cp1 = this.controlPoints[this.controlPoints.length - 2]; const cp2 = this.controlPoints[this.controlPoints.length - 1]; const dir = cp2.position.clone().sub(cp1.position).multiplyScalar(0.5); cp.position.copy(cp1.position).add(dir); const tDir = cp2.target.clone().sub(cp1.target).multiplyScalar(0.5); cp.target.copy(cp2.target).add(tDir); }else if(this.controlPoints.length >= 2){ const cp1 = this.controlPoints[index - 1]; const cp2 = this.controlPoints[index]; cp.position.copy(cp1.position.clone().add(cp2.position).multiplyScalar(0.5)); cp.target.copy(cp1.target.clone().add(cp2.target).multiplyScalar(0.5)); } // cp.position.copy(viewer.scene.view.position); // cp.target.copy(viewer.scene.view.getPivot()); cp.positionHandle = this.createHandle(cp.position); cp.targetHandle = this.createHandle(cp.target); this.controlPoints.splice(index, 0, cp); this.dispatchEvent({ type: "controlpoint_added", controlpoint: cp, }); return cp; } removeControlPoint(cp){ this.controlPoints = this.controlPoints.filter(_cp => _cp !== cp); this.dispatchEvent({ type: "controlpoint_removed", controlpoint: cp, }); cp.positionHandle.svg.remove(); cp.targetHandle.svg.remove(); // TODO destroy cp } createPath(){ { // position const geometry = new LineGeometry(); let material = new LineMaterial({ color: 0x00ff00, dashSize: 5, gapSize: 2, linewidth: 2, resolution: new Vector2(1000, 1000), }); const line = new Line2(geometry, material); this.line = line; this.node.add(line); } { // target const geometry = new LineGeometry(); let material = new LineMaterial({ color: 0x0000ff, dashSize: 5, gapSize: 2, linewidth: 2, resolution: new Vector2(1000, 1000), }); const line = new Line2(geometry, material); this.targetLine = line; this.node.add(line); } } createFrustum(){ const f = 0.3; const positions = [ 0, 0, 0, -f, -f, +1, 0, 0, 0, f, -f, +1, 0, 0, 0, f, f, +1, 0, 0, 0, -f, f, +1, -f, -f, +1, f, -f, +1, f, -f, +1, f, f, +1, f, f, +1, -f, f, +1, -f, f, +1, -f, -f, +1, ]; const geometry = new LineGeometry(); geometry.setPositions(positions); geometry.verticesNeedUpdate = true; geometry.computeBoundingSphere(); let material = new LineMaterial({ color: 0xff0000, linewidth: 2, resolution: new Vector2(1000, 1000), }); const line = new Line2(geometry, material); line.computeLineDistances(); return line; } updatePath(){ { // positions const positions = this.controlPoints.map(cp => cp.position); const first = positions[0]; const curve = new CatmullRomCurve3(positions); curve.curveType = this.curveType; const n = 100; const curvePositions = []; for(let k = 0; k <= n; k++){ const t = k / n; const position = curve.getPoint(t).sub(first); curvePositions.push(position.x, position.y, position.z); } this.line.geometry.setPositions(curvePositions); this.line.geometry.verticesNeedUpdate = true; this.line.geometry.computeBoundingSphere(); this.line.position.copy(first); this.line.computeLineDistances(); this.cameraCurve = curve; } { // targets const positions = this.controlPoints.map(cp => cp.target); const first = positions[0]; const curve = new CatmullRomCurve3(positions); curve.curveType = this.curveType; const n = 100; const curvePositions = []; for(let k = 0; k <= n; k++){ const t = k / n; const position = curve.getPoint(t).sub(first); curvePositions.push(position.x, position.y, position.z); } this.targetLine.geometry.setPositions(curvePositions); this.targetLine.geometry.verticesNeedUpdate = true; this.targetLine.geometry.computeBoundingSphere(); this.targetLine.position.copy(first); this.targetLine.computeLineDistances(); this.targetCurve = curve; } } at(t){ if(t > 1){ t = 1; }else if(t < 0){ t = 0; } const camPos = this.cameraCurve.getPointAt(t); const target = this.targetCurve.getPointAt(t); const frame = { position: camPos, target: target, }; return frame; } set(t){ this.t = t; } createHandle(vector){ const svgns = "http://www.w3.org/2000/svg"; const svg = document.createElementNS(svgns, "svg"); svg.setAttribute("width", "2em"); svg.setAttribute("height", "2em"); svg.setAttribute("position", "absolute"); svg.style.left = "50px"; svg.style.top = "50px"; svg.style.position = "absolute"; svg.style.zIndex = "10000"; const circle = document.createElementNS(svgns, 'circle'); circle.setAttributeNS(null, 'cx', "1em"); circle.setAttributeNS(null, 'cy', "1em"); circle.setAttributeNS(null, 'r', "0.5em"); circle.setAttributeNS(null, 'style', 'fill: red; stroke: black; stroke-width: 0.2em;' ); svg.appendChild(circle); const element = this.viewer.renderer.domElement.parentElement; element.appendChild(svg); const startDrag = (evt) => { this.selectedElement = svg; document.addEventListener("mousemove", drag); }; const endDrag = (evt) => { this.selectedElement = null; document.removeEventListener("mousemove", drag); }; const drag = (evt) => { if (this.selectedElement) { evt.preventDefault(); const rect = viewer.renderer.domElement.getBoundingClientRect(); const x = evt.clientX - rect.x; const y = evt.clientY - rect.y; const {width, height} = this.viewer.renderer.getSize(new Vector2()); const camera = this.viewer.scene.getActiveCamera(); //const cp = this.controlPoints.find(cp => cp.handle.svg === svg); const projected = vector.clone().project(camera); projected.x = ((x / width) - 0.5) / 0.5; projected.y = (-(y - height) / height - 0.5) / 0.5; const unprojected = projected.clone().unproject(camera); vector.set(unprojected.x, unprojected.y, unprojected.z); } }; svg.addEventListener('mousedown', startDrag); svg.addEventListener('mouseup', endDrag); const handle = { svg: svg, }; return handle; } setVisible(visible){ this.node.visible = visible; const display = visible ? "" : "none"; for(const cp of this.controlPoints){ cp.positionHandle.svg.style.display = display; cp.targetHandle.svg.style.display = display; } this.visible = visible; } setDuration(duration){ this.duration = duration; } getDuration(duration){ return this.duration; } play(){ const tStart = performance.now(); const duration = this.duration; const originalyVisible = this.visible; this.setVisible(false); const onUpdate = (delta) => { let tNow = performance.now(); let elapsed = (tNow - tStart) / 1000; let t = elapsed / duration; this.set(t); const frame = this.at(t); viewer.scene.view.position.copy(frame.position); viewer.scene.view.lookAt(frame.target); if(t > 1){ this.setVisible(originalyVisible); this.viewer.removeEventListener("update", onUpdate); } }; this.viewer.addEventListener("update", onUpdate); } } function loadPointCloud(viewer, data){ let loadMaterial = (target) => { if(data.material){ if(data.material.activeAttributeName != null){ target.activeAttributeName = data.material.activeAttributeName; } if(data.material.ranges != null){ for(let range of data.material.ranges){ if(range.name === "elevationRange"){ target.elevationRange = range.value; }else if(range.name === "intensityRange"){ target.intensityRange = range.value; }else { target.setRange(range.name, range.value); } } } if(data.material.size != null){ target.size = data.material.size; } if(data.material.minSize != null){ target.minSize = data.material.minSize; } if(data.material.pointSizeType != null){ target.pointSizeType = PointSizeType[data.material.pointSizeType]; } if(data.material.matcap != null){ target.matcap = data.material.matcap; } }else if(data.activeAttributeName != null){ target.activeAttributeName = data.activeAttributeName; }else { // no material data } }; const promise = new Promise((resolve) => { const names = viewer.scene.pointclouds.map(p => p.name); const alreadyExists = names.includes(data.name); if(alreadyExists){ resolve(); return; } Potree.loadPointCloud(data.url, data.name, (e) => { const {pointcloud} = e; pointcloud.position.set(...data.position); pointcloud.rotation.set(...data.rotation); pointcloud.scale.set(...data.scale); loadMaterial(pointcloud.material); viewer.scene.addPointCloud(pointcloud); resolve(pointcloud); }); }); return promise; } function loadMeasurement(viewer, data){ const duplicate = viewer.scene.measurements.find(measure => measure.uuid === data.uuid); if(duplicate){ return; } const measure = new Measure(); measure.uuid = data.uuid; measure.name = data.name; measure.showDistances = data.showDistances; measure.showCoordinates = data.showCoordinates; measure.showArea = data.showArea; measure.closed = data.closed; measure.showAngles = data.showAngles; measure.showHeight = data.showHeight; measure.showCircle = data.showCircle; measure.showAzimuth = data.showAzimuth; measure.showEdges = data.showEdges; // color for(const point of data.points){ const pos = new Vector3(...point); measure.addMarker(pos); } viewer.scene.addMeasurement(measure); } function loadVolume(viewer, data){ const duplicate = viewer.scene.volumes.find(volume => volume.uuid === data.uuid); if(duplicate){ return; } let volume = new Potree[data.type]; volume.uuid = data.uuid; volume.name = data.name; volume.position.set(...data.position); volume.rotation.set(...data.rotation); volume.scale.set(...data.scale); volume.visible = data.visible; volume.clip = data.clip; viewer.scene.addVolume(volume); } function loadCameraAnimation(viewer, data){ const duplicate = viewer.scene.cameraAnimations.find(a => a.uuid === data.uuid); if(duplicate){ return; } const animation = new CameraAnimation(viewer); animation.uuid = data.uuid; animation.name = data.name; animation.duration = data.duration; animation.t = data.t; animation.curveType = data.curveType; animation.visible = data.visible; animation.controlPoints = []; for(const cpdata of data.controlPoints){ const cp = animation.createControlPoint(); cp.position.set(...cpdata.position); cp.target.set(...cpdata.target); } viewer.scene.addCameraAnimation(animation); } function loadOrientedImages(viewer, images){ const {cameraParamsPath, imageParamsPath} = images; const duplicate = viewer.scene.orientedImages.find(i => i.imageParamsPath === imageParamsPath); if(duplicate){ return; } Potree.OrientedImageLoader.load(cameraParamsPath, imageParamsPath, viewer).then( images => { viewer.scene.addOrientedImages(images); }); } function loadGeopackage(viewer, geopackage){ const path = geopackage.path; const duplicate = viewer.scene.geopackages.find(i => i.path === path); if(duplicate){ return; } const projection = viewer.getProjection(); proj4.defs("WGS84", "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"); proj4.defs("pointcloud", projection); const transform = proj4("WGS84", "pointcloud"); const params = { transform: transform, }; Potree.GeoPackageLoader.loadUrl(path, params).then(data => { viewer.scene.addGeopackage(data); }); } function loadSettings(viewer, data){ if(!data){ return; } viewer.setPointBudget(data.pointBudget); viewer.setFOV(data.fov); viewer.setEDLEnabled(data.edlEnabled); viewer.setEDLRadius(data.edlRadius); viewer.setEDLStrength(data.edlStrength); viewer.setBackground(data.background); viewer.setMinNodeSize(data.minNodeSize); viewer.setShowBoundingBox(data.showBoundingBoxes); } function loadView(viewer, view){ viewer.scene.view.position.set(...view.position); viewer.scene.view.lookAt(...view.target); } function loadAnnotationItem(item){ const annotation = new Annotation({ position: item.position, title: item.title, cameraPosition: item.cameraPosition, cameraTarget: item.cameraTarget, }); annotation.description = item.description; annotation.uuid = item.uuid; if(item.offset){ annotation.offset.set(...item.offset); } return annotation; } function loadAnnotations(viewer, data){ if(!data){ return; } const findDuplicate = (item) => { let duplicate = null; viewer.scene.annotations.traverse( a => { if(a.uuid === item.uuid){ duplicate = a; } }); return duplicate; }; const traverse = (item, parent) => { const duplicate = findDuplicate(item); if(duplicate){ return; } const annotation = loadAnnotationItem(item); for(const childItem of item.children){ traverse(childItem, annotation); } parent.add(annotation); }; for(const item of data){ traverse(item, viewer.scene.annotations); } } function loadProfile(viewer, data){ const {name, points} = data; const duplicate = viewer.scene.profiles.find(profile => profile.uuid === data.uuid); if(duplicate){ return; } let profile = new Potree.Profile(); profile.name = name; profile.uuid = data.uuid; profile.setWidth(data.width); for(const point of points){ profile.addMarker(new Vector3(...point)); } viewer.scene.addProfile(profile); } function loadClassification(viewer, data){ if(!data){ return; } const classifications = data; viewer.setClassifications(classifications); } async function loadProject(viewer, data){ if(data.type !== "Potree"){ console.error("not a valid Potree project"); return; } loadSettings(viewer, data.settings); loadView(viewer, data.view); const pointcloudPromises = []; for(const pointcloud of data.pointclouds){ const promise = loadPointCloud(viewer, pointcloud); pointcloudPromises.push(promise); } for(const measure of data.measurements){ loadMeasurement(viewer, measure); } for(const volume of data.volumes){ loadVolume(viewer, volume); } for(const animation of data.cameraAnimations){ loadCameraAnimation(viewer, animation); } for(const profile of data.profiles){ loadProfile(viewer, profile); } if(data.orientedImages){ for(const images of data.orientedImages){ loadOrientedImages(viewer, images); } } loadAnnotations(viewer, data.annotations); loadClassification(viewer, data.classification); // need to load at least one point cloud that defines the scene projection, // before we can load stuff in other projections such as geopackages //await Promise.any(pointcloudPromises); // (not yet supported) Utils.waitAny(pointcloudPromises).then( () => { if(data.geopackages){ for(const geopackage of data.geopackages){ loadGeopackage(viewer, geopackage); } } }); await Promise.all(pointcloudPromises); } // // Algorithm by Christian Boucheny // shader code taken and adapted from CloudCompare // // see // https://github.com/cloudcompare/trunk/tree/master/plugins/qEDL/shaders/EDL // http://www.kitware.com/source/home/post/9 // https://tel.archives-ouvertes.fr/tel-00438464/document p. 115+ (french) class EyeDomeLightingMaterial extends RawShaderMaterial{ constructor(parameters = {}){ super(); let uniforms = { screenWidth: { type: 'f', value: 0 }, screenHeight: { type: 'f', value: 0 }, edlStrength: { type: 'f', value: 1.0 }, uNear: { type: 'f', value: 1.0 }, uFar: { type: 'f', value: 1.0 }, radius: { type: 'f', value: 1.0 }, neighbours: { type: '2fv', value: [] }, depthMap: { type: 't', value: null }, uEDLColor: { type: 't', value: null }, uEDLDepth: { type: 't', value: null }, opacity: { type: 'f', value: 1.0 }, uProj: { type: "Matrix4fv", value: [] }, }; this.setValues({ uniforms: uniforms, vertexShader: this.getDefines() + Shaders['edl.vs'], fragmentShader: this.getDefines() + Shaders['edl.fs'], lights: false }); this.neighbourCount = 8; } getDefines() { let defines = ''; defines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\n'; return defines; } updateShaderSource() { let vs = this.getDefines() + Shaders['edl.vs']; let fs = this.getDefines() + Shaders['edl.fs']; this.setValues({ vertexShader: vs, fragmentShader: fs }); this.uniforms.neighbours.value = this.neighbours; this.needsUpdate = true; } get neighbourCount(){ return this._neighbourCount; } set neighbourCount(value){ if (this._neighbourCount !== value) { this._neighbourCount = value; this.neighbours = new Float32Array(this._neighbourCount * 2); for (let c = 0; c < this._neighbourCount; c++) { this.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount); this.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount); } this.updateShaderSource(); } } } class NormalizationEDLMaterial extends RawShaderMaterial{ constructor(parameters = {}){ super(); let uniforms = { screenWidth: { type: 'f', value: 0 }, screenHeight: { type: 'f', value: 0 }, edlStrength: { type: 'f', value: 1.0 }, radius: { type: 'f', value: 1.0 }, neighbours: { type: '2fv', value: [] }, uEDLMap: { type: 't', value: null }, uDepthMap: { type: 't', value: null }, uWeightMap: { type: 't', value: null }, }; this.setValues({ uniforms: uniforms, vertexShader: this.getDefines() + Shaders['normalize.vs'], fragmentShader: this.getDefines() + Shaders['normalize_and_edl.fs'], }); this.neighbourCount = 8; } getDefines() { let defines = ''; defines += '#define NEIGHBOUR_COUNT ' + this.neighbourCount + '\n'; return defines; } updateShaderSource() { let vs = this.getDefines() + Shaders['normalize.vs']; let fs = this.getDefines() + Shaders['normalize_and_edl.fs']; this.setValues({ vertexShader: vs, fragmentShader: fs }); this.uniforms.neighbours.value = this.neighbours; this.needsUpdate = true; } get neighbourCount(){ return this._neighbourCount; } set neighbourCount(value){ if (this._neighbourCount !== value) { this._neighbourCount = value; this.neighbours = new Float32Array(this._neighbourCount * 2); for (let c = 0; c < this._neighbourCount; c++) { this.neighbours[2 * c + 0] = Math.cos(2 * c * Math.PI / this._neighbourCount); this.neighbours[2 * c + 1] = Math.sin(2 * c * Math.PI / this._neighbourCount); } this.updateShaderSource(); } } } class NormalizationMaterial extends RawShaderMaterial{ constructor(parameters = {}){ super(); let uniforms = { uDepthMap: { type: 't', value: null }, uWeightMap: { type: 't', value: null }, }; this.setValues({ uniforms: uniforms, vertexShader: this.getDefines() + Shaders['normalize.vs'], fragmentShader: this.getDefines() + Shaders['normalize.fs'], }); } getDefines() { let defines = ''; return defines; } updateShaderSource() { let vs = this.getDefines() + Shaders['normalize.vs']; let fs = this.getDefines() + Shaders['normalize.fs']; this.setValues({ vertexShader: vs, fragmentShader: fs }); this.needsUpdate = true; } } /** * laslaz code taken and adapted from plas.io js-laslaz * http://plas.io/ * https://github.com/verma/plasio * * Thanks to Uday Verma and Howard Butler * */ class LasLazLoader { constructor (version, extension) { if (typeof (version) === 'string') { this.version = new Version(version); } else { this.version = version; } this.extension = extension; } static progressCB () { } load (node) { if (node.loaded) { return; } let url = node.getURL(); if (this.version.equalOrHigher('1.4')) { url += `.${this.extension}`; } let xhr = XHRFactory.createXMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.overrideMimeType('text/plain; charset=x-user-defined'); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200 || xhr.status === 0) { let buffer = xhr.response; this.parse(node, buffer); } else { console.log('Failed to load file! HTTP status: ' + xhr.status + ', file: ' + url); } } }; xhr.send(null); } async parse(node, buffer){ let lf = new LASFile(buffer); let handler = new LasLazBatcher(node); try{ await lf.open(); lf.isOpen = true; }catch(e){ console.log("failed to open file. :("); return; } let header = await lf.getHeader(); let skip = 1; let totalRead = 0; let totalToRead = (skip <= 1 ? header.pointsCount : header.pointsCount / skip); let hasMoreData = true; while(hasMoreData){ let data = await lf.readData(1000 * 1000, 0, skip); handler.push(new LASDecoder(data.buffer, header.pointsFormatId, header.pointsStructSize, data.count, header.scale, header.offset, header.mins, header.maxs)); totalRead += data.count; LasLazLoader.progressCB(totalRead / totalToRead); hasMoreData = data.hasMoreData; } header.totalRead = totalRead; header.versionAsString = lf.versionAsString; header.isCompressed = lf.isCompressed; LasLazLoader.progressCB(1); try{ await lf.close(); lf.isOpen = false; }catch(e){ console.error("failed to close las/laz file!!!"); throw e; } } handle (node, url) { } }; class LasLazBatcher{ constructor (node) { this.node = node; } push (lasBuffer) { const workerPath = Potree.scriptPath + '/workers/LASDecoderWorker.js'; const worker = Potree.workerPool.getWorker(workerPath); const node = this.node; const pointAttributes = node.pcoGeometry.pointAttributes; worker.onmessage = (e) => { let geometry = new BufferGeometry(); let numPoints = lasBuffer.pointsCount; let positions = new Float32Array(e.data.position); let colors = new Uint8Array(e.data.color); let intensities = new Float32Array(e.data.intensity); let classifications = new Uint8Array(e.data.classification); let returnNumbers = new Uint8Array(e.data.returnNumber); let numberOfReturns = new Uint8Array(e.data.numberOfReturns); let pointSourceIDs = new Uint16Array(e.data.pointSourceID); let indices = new Uint8Array(e.data.indices); geometry.setAttribute('position', new BufferAttribute(positions, 3)); geometry.setAttribute('color', new BufferAttribute(colors, 4, true)); geometry.setAttribute('intensity', new BufferAttribute(intensities, 1)); geometry.setAttribute('classification', new BufferAttribute(classifications, 1)); geometry.setAttribute('return number', new BufferAttribute(returnNumbers, 1)); geometry.setAttribute('number of returns', new BufferAttribute(numberOfReturns, 1)); geometry.setAttribute('source id', new BufferAttribute(pointSourceIDs, 1)); geometry.setAttribute('indices', new BufferAttribute(indices, 4)); geometry.attributes.indices.normalized = true; for(const key in e.data.ranges){ const range = e.data.ranges[key]; const attribute = pointAttributes.attributes.find(a => a.name === key); attribute.range[0] = Math.min(attribute.range[0], range[0]); attribute.range[1] = Math.max(attribute.range[1], range[1]); } let tightBoundingBox = new Box3( new Vector3().fromArray(e.data.tightBoundingBox.min), new Vector3().fromArray(e.data.tightBoundingBox.max) ); geometry.boundingBox = this.node.boundingBox; this.node.tightBoundingBox = tightBoundingBox; this.node.geometry = geometry; this.node.numPoints = numPoints; this.node.loaded = true; this.node.loading = false; Potree.numNodesLoading--; this.node.mean = new Vector3(...e.data.mean); Potree.workerPool.returnWorker(workerPath, worker); }; let message = { buffer: lasBuffer.arrayb, numPoints: lasBuffer.pointsCount, pointSize: lasBuffer.pointSize, pointFormatID: 2, scale: lasBuffer.scale, offset: lasBuffer.offset, mins: lasBuffer.mins, maxs: lasBuffer.maxs }; worker.postMessage(message, [message.buffer]); }; } class BinaryLoader{ constructor(version, boundingBox, scale){ if (typeof (version) === 'string') { this.version = new Version(version); } else { this.version = version; } this.boundingBox = boundingBox; this.scale = scale; } load(node){ if (node.loaded) { return; } let url = node.getURL(); if (this.version.equalOrHigher('1.4')) { url += '.bin'; } let xhr = XHRFactory.createXMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.overrideMimeType('text/plain; charset=x-user-defined'); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if((xhr.status === 200 || xhr.status === 0) && xhr.response !== null){ let buffer = xhr.response; this.parse(node, buffer); } else { //console.error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`); throw new Error(`Failed to load file! HTTP status: ${xhr.status}, file: ${url}`); } } }; try { xhr.send(null); } catch (e) { console.log('fehler beim laden der punktwolke: ' + e); } }; parse(node, buffer){ let pointAttributes = node.pcoGeometry.pointAttributes; let numPoints = buffer.byteLength / node.pcoGeometry.pointAttributes.byteSize; if (this.version.upTo('1.5')) { node.numPoints = numPoints; } let workerPath = Potree.scriptPath + '/workers/BinaryDecoderWorker.js'; let worker = Potree.workerPool.getWorker(workerPath); worker.onmessage = function (e) { let data = e.data; let buffers = data.attributeBuffers; let tightBoundingBox = new Box3( new Vector3().fromArray(data.tightBoundingBox.min), new Vector3().fromArray(data.tightBoundingBox.max) ); Potree.workerPool.returnWorker(workerPath, worker); let geometry = new BufferGeometry(); for(let property in buffers){ let buffer = buffers[property].buffer; let batchAttribute = buffers[property].attribute; if (property === "POSITION_CARTESIAN") { geometry.setAttribute('position', new BufferAttribute(new Float32Array(buffer), 3)); } else if (property === "rgba") { geometry.setAttribute("rgba", new BufferAttribute(new Uint8Array(buffer), 4, true)); } else if (property === "NORMAL_SPHEREMAPPED") { geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); } else if (property === "NORMAL_OCT16") { geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); } else if (property === "NORMAL") { geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); } else if (property === "INDICES") { let bufferAttribute = new BufferAttribute(new Uint8Array(buffer), 4); bufferAttribute.normalized = true; geometry.setAttribute('indices', bufferAttribute); } else if (property === "SPACING") { let bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1); geometry.setAttribute('spacing', bufferAttribute); } else { const bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1); bufferAttribute.potree = { offset: buffers[property].offset, scale: buffers[property].scale, preciseBuffer: buffers[property].preciseBuffer, range: batchAttribute.range, }; geometry.setAttribute(property, bufferAttribute); const attribute = pointAttributes.attributes.find(a => a.name === batchAttribute.name); attribute.range[0] = Math.min(attribute.range[0], batchAttribute.range[0]); attribute.range[1] = Math.max(attribute.range[1], batchAttribute.range[1]); if(node.getLevel() === 0){ attribute.initialRange = batchAttribute.range; } } } tightBoundingBox.max.sub(tightBoundingBox.min); tightBoundingBox.min.set(0, 0, 0); let numPoints = e.data.buffer.byteLength / pointAttributes.byteSize; node.numPoints = numPoints; node.geometry = geometry; node.mean = new Vector3(...data.mean); node.tightBoundingBox = tightBoundingBox; node.loaded = true; node.loading = false; node.estimatedSpacing = data.estimatedSpacing; Potree.numNodesLoading--; }; let message = { buffer: buffer, pointAttributes: pointAttributes, version: this.version.version, min: [ node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z ], offset: [node.pcoGeometry.offset.x, node.pcoGeometry.offset.y, node.pcoGeometry.offset.z], scale: this.scale, spacing: node.spacing, hasChildren: node.hasChildren, name: node.name }; worker.postMessage(message, [message.buffer]); }; } function parseAttributes(cloudjs){ let version = new Version(cloudjs.version); const replacements = { "COLOR_PACKED": "rgba", "RGBA": "rgba", "INTENSITY": "intensity", "CLASSIFICATION": "classification", "GPS_TIME": "gps-time", }; const replaceOldNames = (old) => { if(replacements[old]){ return replacements[old]; }else { return old; } }; const pointAttributes = []; if(version.upTo('1.7')){ for(let attributeName of cloudjs.pointAttributes){ const oldAttribute = PointAttribute[attributeName]; const attribute = { name: oldAttribute.name, size: oldAttribute.byteSize, elements: oldAttribute.numElements, elementSize: oldAttribute.byteSize / oldAttribute.numElements, type: oldAttribute.type.name, description: "", }; pointAttributes.push(attribute); } }else { pointAttributes.push(...cloudjs.pointAttributes); } { const attributes = new PointAttributes(); const typeConversion = { int8: PointAttributeTypes.DATA_TYPE_INT8, int16: PointAttributeTypes.DATA_TYPE_INT16, int32: PointAttributeTypes.DATA_TYPE_INT32, int64: PointAttributeTypes.DATA_TYPE_INT64, uint8: PointAttributeTypes.DATA_TYPE_UINT8, uint16: PointAttributeTypes.DATA_TYPE_UINT16, uint32: PointAttributeTypes.DATA_TYPE_UINT32, uint64: PointAttributeTypes.DATA_TYPE_UINT64, double: PointAttributeTypes.DATA_TYPE_DOUBLE, float: PointAttributeTypes.DATA_TYPE_FLOAT, }; for(const jsAttribute of pointAttributes){ const name = replaceOldNames(jsAttribute.name); const type = typeConversion[jsAttribute.type]; const numElements = jsAttribute.elements; const description = jsAttribute.description; const attribute = new PointAttribute(name, type, numElements); attributes.add(attribute); } { // check if it has normals let hasNormals = pointAttributes.find(a => a.name === "NormalX") !== undefined && pointAttributes.find(a => a.name === "NormalY") !== undefined && pointAttributes.find(a => a.name === "NormalZ") !== undefined; if(hasNormals){ let vector = { name: "NORMAL", attributes: ["NormalX", "NormalY", "NormalZ"], }; attributes.addVector(vector); } } return attributes; } } function lasLazAttributes(fMno){ const attributes = new PointAttributes(); attributes.add(PointAttribute.POSITION_CARTESIAN); attributes.add(new PointAttribute("rgba", PointAttributeTypes.DATA_TYPE_UINT8, 4)); attributes.add(new PointAttribute("intensity", PointAttributeTypes.DATA_TYPE_UINT16, 1)); attributes.add(new PointAttribute("classification", PointAttributeTypes.DATA_TYPE_UINT8, 1)); attributes.add(new PointAttribute("gps-time", PointAttributeTypes.DATA_TYPE_DOUBLE, 1)); attributes.add(new PointAttribute("number of returns", PointAttributeTypes.DATA_TYPE_UINT8, 1)); attributes.add(new PointAttribute("return number", PointAttributeTypes.DATA_TYPE_UINT8, 1)); attributes.add(new PointAttribute("source id", PointAttributeTypes.DATA_TYPE_UINT16, 1)); //attributes.add(new PointAttribute("pointSourceID", PointAttributeTypes.DATA_TYPE_INT8, 4)); return attributes; } class POCLoader { static load(url, callback){ try { let pco = new PointCloudOctreeGeometry(); pco.url = url; let xhr = XHRFactory.createXMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4 && (xhr.status === 200 || xhr.status === 0)) { let fMno = JSON.parse(xhr.responseText); let version = new Version(fMno.version); // assume octreeDir is absolute if it starts with http if (fMno.octreeDir.indexOf('http') === 0) { pco.octreeDir = fMno.octreeDir; } else { pco.octreeDir = url + '/../' + fMno.octreeDir; } pco.spacing = fMno.spacing; pco.hierarchyStepSize = fMno.hierarchyStepSize; pco.pointAttributes = fMno.pointAttributes; let min = new Vector3(fMno.boundingBox.lx, fMno.boundingBox.ly, fMno.boundingBox.lz); let max = new Vector3(fMno.boundingBox.ux, fMno.boundingBox.uy, fMno.boundingBox.uz); let boundingBox = new Box3(min, max); let tightBoundingBox = boundingBox.clone(); if (fMno.tightBoundingBox) { tightBoundingBox.min.copy(new Vector3(fMno.tightBoundingBox.lx, fMno.tightBoundingBox.ly, fMno.tightBoundingBox.lz)); tightBoundingBox.max.copy(new Vector3(fMno.tightBoundingBox.ux, fMno.tightBoundingBox.uy, fMno.tightBoundingBox.uz)); } let offset = min.clone(); boundingBox.min.sub(offset); boundingBox.max.sub(offset); tightBoundingBox.min.sub(offset); tightBoundingBox.max.sub(offset); pco.projection = fMno.projection; pco.boundingBox = boundingBox; pco.tightBoundingBox = tightBoundingBox; pco.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); pco.tightBoundingSphere = tightBoundingBox.getBoundingSphere(new Sphere()); pco.offset = offset; if (fMno.pointAttributes === 'LAS') { pco.loader = new LasLazLoader(fMno.version, "las"); pco.pointAttributes = lasLazAttributes(fMno); } else if (fMno.pointAttributes === 'LAZ') { pco.loader = new LasLazLoader(fMno.version, "laz"); pco.pointAttributes = lasLazAttributes(fMno); } else { pco.loader = new BinaryLoader(fMno.version, boundingBox, fMno.scale); pco.pointAttributes = parseAttributes(fMno); } let nodes = {}; { // load root let name = 'r'; let root = new PointCloudOctreeGeometryNode(name, pco, boundingBox); root.level = 0; root.hasChildren = true; root.spacing = pco.spacing; if (version.upTo('1.5')) { root.numPoints = fMno.hierarchy[0][1]; } else { root.numPoints = 0; } pco.root = root; pco.root.load(); nodes[name] = root; } // load remaining hierarchy if (version.upTo('1.4')) { for (let i = 1; i < fMno.hierarchy.length; i++) { let name = fMno.hierarchy[i][0]; let numPoints = fMno.hierarchy[i][1]; let index = parseInt(name.charAt(name.length - 1)); let parentName = name.substring(0, name.length - 1); let parentNode = nodes[parentName]; let level = name.length - 1; //let boundingBox = POCLoader.createChildAABB(parentNode.boundingBox, index); let boundingBox = Utils.createChildAABB(parentNode.boundingBox, index); let node = new PointCloudOctreeGeometryNode(name, pco, boundingBox); node.level = level; node.numPoints = numPoints; node.spacing = pco.spacing / Math.pow(2, level); parentNode.addChild(node); nodes[name] = node; } } pco.nodes = nodes; callback(pco); } }; xhr.send(null); } catch (e) { console.log("loading failed: '" + url + "'"); console.log(e); callback(); } } loadPointAttributes(mno){ let fpa = mno.pointAttributes; let pa = new PointAttributes(); for (let i = 0; i < fpa.length; i++) { let pointAttribute = PointAttribute[fpa[i]]; pa.add(pointAttribute); } return pa; } createChildAABB(aabb, index){ let min = aabb.min.clone(); let max = aabb.max.clone(); let size = new Vector3().subVectors(max, min); if ((index & 0b0001) > 0) { min.z += size.z / 2; } else { max.z -= size.z / 2; } if ((index & 0b0010) > 0) { min.y += size.y / 2; } else { max.y -= size.y / 2; } if ((index & 0b0100) > 0) { min.x += size.x / 2; } else { max.x -= size.x / 2; } return new Box3(min, max); } } class OctreeGeometry{ constructor(){ this.url = null; this.spacing = 0; this.boundingBox = null; this.root = null; this.pointAttributes = null; this.loader = null; } }; class OctreeGeometryNode{ constructor(name, octreeGeometry, boundingBox){ this.id = OctreeGeometryNode.IDCount++; this.name = name; this.index = parseInt(name.charAt(name.length - 1)); this.octreeGeometry = octreeGeometry; this.boundingBox = boundingBox; this.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); this.children = {}; this.numPoints = 0; this.level = null; this.oneTimeDisposeHandlers = []; } isGeometryNode(){ return true; } getLevel(){ return this.level; } isTreeNode(){ return false; } isLoaded(){ return this.loaded; } getBoundingSphere(){ return this.boundingSphere; } getBoundingBox(){ return this.boundingBox; } getChildren(){ let children = []; for (let i = 0; i < 8; i++) { if (this.children[i]) { children.push(this.children[i]); } } return children; } getBoundingBox(){ return this.boundingBox; } load(){ if (Potree.numNodesLoading >= Potree.maxNodesLoading) { return; } this.octreeGeometry.loader.load(this); } getNumPoints(){ return this.numPoints; } dispose(){ if (this.geometry && this.parent != null) { this.geometry.dispose(); this.geometry = null; this.loaded = false; // this.dispatchEvent( { type: 'dispose' } ); for (let i = 0; i < this.oneTimeDisposeHandlers.length; i++) { let handler = this.oneTimeDisposeHandlers[i]; handler(); } this.oneTimeDisposeHandlers = []; } } }; OctreeGeometryNode.IDCount = 0; // let loadedNodes = new Set(); class NodeLoader{ constructor(url){ this.url = url; } async load(node){ if(node.loaded || node.loading){ return; } node.loading = true; Potree.numNodesLoading++; // console.log(node.name, node.numPoints); // if(loadedNodes.has(node.name)){ // // debugger; // } // loadedNodes.add(node.name); try{ if(node.nodeType === 2){ await this.loadHierarchy(node); } let {byteOffset, byteSize} = node; let urlOctree = `${this.url}/../octree.bin`; let first = byteOffset; let last = byteOffset + byteSize - 1n; let buffer; if(byteSize === 0n){ buffer = new ArrayBuffer(0); console.warn(`loaded node with 0 bytes: ${node.name}`); }else { let response = await fetch(urlOctree, { headers: { 'content-type': 'multipart/byteranges', 'Range': `bytes=${first}-${last}`, }, }); buffer = await response.arrayBuffer(); } let workerPath; if(this.metadata.encoding === "BROTLI"){ workerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker_brotli.js'; }else { workerPath = Potree.scriptPath + '/workers/2.0/DecoderWorker.js'; } let worker = Potree.workerPool.getWorker(workerPath); worker.onmessage = function (e) { let data = e.data; let buffers = data.attributeBuffers; Potree.workerPool.returnWorker(workerPath, worker); let geometry = new BufferGeometry(); for(let property in buffers){ let buffer = buffers[property].buffer; if(property === "position"){ geometry.setAttribute('position', new BufferAttribute(new Float32Array(buffer), 3)); }else if(property === "rgba"){ geometry.setAttribute('rgba', new BufferAttribute(new Uint8Array(buffer), 4, true)); }else if(property === "NORMAL"){ //geometry.setAttribute('rgba', new THREE.BufferAttribute(new Uint8Array(buffer), 4, true)); geometry.setAttribute('normal', new BufferAttribute(new Float32Array(buffer), 3)); }else if (property === "INDICES") { let bufferAttribute = new BufferAttribute(new Uint8Array(buffer), 4); bufferAttribute.normalized = true; geometry.setAttribute('indices', bufferAttribute); }else { const bufferAttribute = new BufferAttribute(new Float32Array(buffer), 1); let batchAttribute = buffers[property].attribute; bufferAttribute.potree = { offset: buffers[property].offset, scale: buffers[property].scale, preciseBuffer: buffers[property].preciseBuffer, range: batchAttribute.range, }; geometry.setAttribute(property, bufferAttribute); } } // indices ?? node.density = data.density; node.geometry = geometry; node.loaded = true; node.loading = false; Potree.numNodesLoading--; }; let pointAttributes = node.octreeGeometry.pointAttributes; let scale = node.octreeGeometry.scale; let box = node.boundingBox; let min = node.octreeGeometry.offset.clone().add(box.min); let size = box.max.clone().sub(box.min); let max = min.clone().add(size); let numPoints = node.numPoints; let offset = node.octreeGeometry.loader.offset; let message = { name: node.name, buffer: buffer, pointAttributes: pointAttributes, scale: scale, min: min, max: max, size: size, offset: offset, numPoints: numPoints }; worker.postMessage(message, [message.buffer]); }catch(e){ node.loaded = false; node.loading = false; Potree.numNodesLoading--; console.log(`failed to load ${node.name}`); console.log(e); console.log(`trying again!`); } } parseHierarchy(node, buffer){ let view = new DataView(buffer); let tStart = performance.now(); let bytesPerNode = 22; let numNodes = buffer.byteLength / bytesPerNode; let octree = node.octreeGeometry; // let nodes = [node]; let nodes = new Array(numNodes); nodes[0] = node; let nodePos = 1; for(let i = 0; i < numNodes; i++){ let current = nodes[i]; let type = view.getUint8(i * bytesPerNode + 0); let childMask = view.getUint8(i * bytesPerNode + 1); let numPoints = view.getUint32(i * bytesPerNode + 2, true); let byteOffset = view.getBigInt64(i * bytesPerNode + 6, true); let byteSize = view.getBigInt64(i * bytesPerNode + 14, true); // if(byteSize === 0n){ // // debugger; // } if(current.nodeType === 2){ // replace proxy with real node current.byteOffset = byteOffset; current.byteSize = byteSize; current.numPoints = numPoints; }else if(type === 2){ // load proxy current.hierarchyByteOffset = byteOffset; current.hierarchyByteSize = byteSize; current.numPoints = numPoints; }else { // load real node current.byteOffset = byteOffset; current.byteSize = byteSize; current.numPoints = numPoints; } if(current.byteSize === 0n){ // workaround for issue #1125 // some inner nodes erroneously report >0 points even though have 0 points // however, they still report a byteSize of 0, so based on that we now set node.numPoints to 0 current.numPoints = 0; } current.nodeType = type; if(current.nodeType === 2){ continue; } for(let childIndex = 0; childIndex < 8; childIndex++){ let childExists = ((1 << childIndex) & childMask) !== 0; if(!childExists){ continue; } let childName = current.name + childIndex; let childAABB = createChildAABB(current.boundingBox, childIndex); let child = new OctreeGeometryNode(childName, octree, childAABB); child.name = childName; child.spacing = current.spacing / 2; child.level = current.level + 1; current.children[childIndex] = child; child.parent = current; // nodes.push(child); nodes[nodePos] = child; nodePos++; } // if((i % 500) === 0){ // yield; // } } let duration = (performance.now() - tStart); // if(duration > 20){ // let msg = `duration: ${duration}ms, numNodes: ${numNodes}`; // console.log(msg); // } } async loadHierarchy(node){ let {hierarchyByteOffset, hierarchyByteSize} = node; let hierarchyPath = `${this.url}/../hierarchy.bin`; let first = hierarchyByteOffset; let last = first + hierarchyByteSize - 1n; let response = await fetch(hierarchyPath, { headers: { 'content-type': 'multipart/byteranges', 'Range': `bytes=${first}-${last}`, }, }); let buffer = await response.arrayBuffer(); this.parseHierarchy(node, buffer); // let promise = new Promise((resolve) => { // let generator = this.parseHierarchy(node, buffer); // let repeatUntilDone = () => { // let result = generator.next(); // if(result.done){ // resolve(); // }else{ // requestAnimationFrame(repeatUntilDone); // } // }; // repeatUntilDone(); // }); // await promise; } } let tmpVec3 = new Vector3(); function createChildAABB(aabb, index){ let min = aabb.min.clone(); let max = aabb.max.clone(); let size = tmpVec3.subVectors(max, min); if ((index & 0b0001) > 0) { min.z += size.z / 2; } else { max.z -= size.z / 2; } if ((index & 0b0010) > 0) { min.y += size.y / 2; } else { max.y -= size.y / 2; } if ((index & 0b0100) > 0) { min.x += size.x / 2; } else { max.x -= size.x / 2; } return new Box3(min, max); } let typenameTypeattributeMap = { "double": PointAttributeTypes.DATA_TYPE_DOUBLE, "float": PointAttributeTypes.DATA_TYPE_FLOAT, "int8": PointAttributeTypes.DATA_TYPE_INT8, "uint8": PointAttributeTypes.DATA_TYPE_UINT8, "int16": PointAttributeTypes.DATA_TYPE_INT16, "uint16": PointAttributeTypes.DATA_TYPE_UINT16, "int32": PointAttributeTypes.DATA_TYPE_INT32, "uint32": PointAttributeTypes.DATA_TYPE_UINT32, "int64": PointAttributeTypes.DATA_TYPE_INT64, "uint64": PointAttributeTypes.DATA_TYPE_UINT64, }; class OctreeLoader{ static parseAttributes(jsonAttributes){ let attributes = new PointAttributes(); let replacements = { "rgb": "rgba", }; for (const jsonAttribute of jsonAttributes) { let {name, description, size, numElements, elementSize, min, max} = jsonAttribute; let type = typenameTypeattributeMap[jsonAttribute.type]; let potreeAttributeName = replacements[name] ? replacements[name] : name; let attribute = new PointAttribute(potreeAttributeName, type, numElements); if(numElements === 1){ attribute.range = [min[0], max[0]]; }else { attribute.range = [min, max]; } if (name === "gps-time") { // HACK: Guard against bad gpsTime range in metadata, see potree/potree#909 if (attribute.range[0] === attribute.range[1]) { attribute.range[1] += 1; } } attribute.initialRange = attribute.range; attributes.add(attribute); } { // check if it has normals let hasNormals = attributes.attributes.find(a => a.name === "NormalX") !== undefined && attributes.attributes.find(a => a.name === "NormalY") !== undefined && attributes.attributes.find(a => a.name === "NormalZ") !== undefined; if(hasNormals){ let vector = { name: "NORMAL", attributes: ["NormalX", "NormalY", "NormalZ"], }; attributes.addVector(vector); } } return attributes; } static async load(url){ let response = await fetch(url); let metadata = await response.json(); let attributes = OctreeLoader.parseAttributes(metadata.attributes); let loader = new NodeLoader(url); loader.metadata = metadata; loader.attributes = attributes; loader.scale = metadata.scale; loader.offset = metadata.offset; let octree = new OctreeGeometry(); octree.url = url; octree.spacing = metadata.spacing; octree.scale = metadata.scale; // let aPosition = metadata.attributes.find(a => a.name === "position"); // octree let min = new Vector3(...metadata.boundingBox.min); let max = new Vector3(...metadata.boundingBox.max); let boundingBox = new Box3(min, max); let offset = min.clone(); boundingBox.min.sub(offset); boundingBox.max.sub(offset); octree.projection = metadata.projection; octree.boundingBox = boundingBox; octree.tightBoundingBox = boundingBox.clone(); octree.boundingSphere = boundingBox.getBoundingSphere(new Sphere()); octree.tightBoundingSphere = boundingBox.getBoundingSphere(new Sphere()); octree.offset = offset; octree.pointAttributes = OctreeLoader.parseAttributes(metadata.attributes); octree.loader = loader; let root = new OctreeGeometryNode("r", octree, boundingBox); root.level = 0; root.nodeType = 2; root.hierarchyByteOffset = 0n; root.hierarchyByteSize = BigInt(metadata.hierarchy.firstChunkSize); root.hasChildren = false; root.spacing = octree.spacing; root.byteOffset = 0; octree.root = root; loader.load(root); let result = { geometry: octree, }; return result; } }; /** * @author Connor Manning */ class EptLoader { static async load(file, callback) { let response = await fetch(file); let json = await response.json(); let url = file.substr(0, file.lastIndexOf('ept.json')); let geometry = new Potree.PointCloudEptGeometry(url, json); let root = new Potree.PointCloudEptGeometryNode(geometry); geometry.root = root; geometry.root.load(); callback(geometry); } }; class EptBinaryLoader { extension() { return '.bin'; } workerPath() { return Potree.scriptPath + '/workers/EptBinaryDecoderWorker.js'; } load(node) { if (node.loaded) return; let url = node.url() + this.extension(); let xhr = XHRFactory.createXMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.overrideMimeType('text/plain; charset=x-user-defined'); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200) { let buffer = xhr.response; this.parse(node, buffer); } else { console.log('Failed ' + url + ': ' + xhr.status); } } }; try { xhr.send(null); } catch (e) { console.log('Failed request: ' + e); } } parse(node, buffer) { let workerPath = this.workerPath(); let worker = Potree.workerPool.getWorker(workerPath); worker.onmessage = function(e) { let g = new BufferGeometry(); let numPoints = e.data.numPoints; let position = new Float32Array(e.data.position); g.setAttribute('position', new BufferAttribute(position, 3)); let indices = new Uint8Array(e.data.indices); g.setAttribute('indices', new BufferAttribute(indices, 4)); if (e.data.color) { let color = new Uint8Array(e.data.color); g.setAttribute('color', new BufferAttribute(color, 4, true)); } if (e.data.intensity) { let intensity = new Float32Array(e.data.intensity); g.setAttribute('intensity', new BufferAttribute(intensity, 1)); } if (e.data.classification) { let classification = new Uint8Array(e.data.classification); g.setAttribute('classification', new BufferAttribute(classification, 1)); } if (e.data.returnNumber) { let returnNumber = new Uint8Array(e.data.returnNumber); g.setAttribute('return number', new BufferAttribute(returnNumber, 1)); } if (e.data.numberOfReturns) { let numberOfReturns = new Uint8Array(e.data.numberOfReturns); g.setAttribute('number of returns', new BufferAttribute(numberOfReturns, 1)); } if (e.data.pointSourceId) { let pointSourceId = new Uint16Array(e.data.pointSourceId); g.setAttribute('source id', new BufferAttribute(pointSourceId, 1)); } g.attributes.indices.normalized = true; let tightBoundingBox = new Box3( new Vector3().fromArray(e.data.tightBoundingBox.min), new Vector3().fromArray(e.data.tightBoundingBox.max) ); node.doneLoading( g, tightBoundingBox, numPoints, new Vector3(...e.data.mean)); Potree.workerPool.returnWorker(workerPath, worker); }; let toArray = (v) => [v.x, v.y, v.z]; let message = { buffer: buffer, schema: node.ept.schema, scale: node.ept.eptScale, offset: node.ept.eptOffset, mins: toArray(node.key.b.min) }; worker.postMessage(message, [message.buffer]); } }; /** * laslaz code taken and adapted from plas.io js-laslaz * http://plas.io/ * https://github.com/verma/plasio * * Thanks to Uday Verma and Howard Butler * */ class EptLaszipLoader { load(node) { if (node.loaded) return; let url = node.url() + '.laz'; let xhr = XHRFactory.createXMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'arraybuffer'; xhr.overrideMimeType('text/plain; charset=x-user-defined'); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200) { let buffer = xhr.response; this.parse(node, buffer); } else { console.log('Failed ' + url + ': ' + xhr.status); } } }; xhr.send(null); } async parse(node, buffer){ let lf = new LASFile(buffer); let handler = new EptLazBatcher(node); try{ await lf.open(); lf.isOpen = true; const header = await lf.getHeader(); { let i = 0; let toArray = (v) => [v.x, v.y, v.z]; let mins = toArray(node.key.b.min); let maxs = toArray(node.key.b.max); let hasMoreData = true; while(hasMoreData){ const data = await lf.readData(1000000, 0, 1); let d = new LASDecoder( data.buffer, header.pointsFormatId, header.pointsStructSize, data.count, header.scale, header.offset, mins, maxs); d.extraBytes = header.extraBytes; d.pointsFormatId = header.pointsFormatId; handler.push(d); i += data.count; hasMoreData = data.hasMoreData; } header.totalRead = i; header.versionAsString = lf.versionAsString; header.isCompressed = lf.isCompressed; await lf.close(); lf.isOpen = false; } }catch(err){ console.error('Error reading LAZ:', err); if (lf.isOpen) { await lf.close(); lf.isOpen = false; } throw err; } } }; class EptLazBatcher { constructor(node) { this.node = node; } push(las) { let workerPath = Potree.scriptPath + '/workers/EptLaszipDecoderWorker.js'; let worker = Potree.workerPool.getWorker(workerPath); worker.onmessage = (e) => { let g = new BufferGeometry(); let numPoints = las.pointsCount; let positions = new Float32Array(e.data.position); let colors = new Uint8Array(e.data.color); let intensities = new Float32Array(e.data.intensity); let classifications = new Uint8Array(e.data.classification); let returnNumbers = new Uint8Array(e.data.returnNumber); let numberOfReturns = new Uint8Array(e.data.numberOfReturns); let pointSourceIDs = new Uint16Array(e.data.pointSourceID); let indices = new Uint8Array(e.data.indices); let gpsTime = new Float32Array(e.data.gpsTime); g.setAttribute('position', new BufferAttribute(positions, 3)); g.setAttribute('rgba', new BufferAttribute(colors, 4, true)); g.setAttribute('intensity', new BufferAttribute(intensities, 1)); g.setAttribute('classification', new BufferAttribute(classifications, 1)); g.setAttribute('return number', new BufferAttribute(returnNumbers, 1)); g.setAttribute('number of returns', new BufferAttribute(numberOfReturns, 1)); g.setAttribute('source id', new BufferAttribute(pointSourceIDs, 1)); g.setAttribute('indices', new BufferAttribute(indices, 4)); g.setAttribute('gpsTime', new BufferAttribute(gpsTime, 1)); this.node.gpsTime = e.data.gpsMeta; g.attributes.indices.normalized = true; let tightBoundingBox = new Box3( new Vector3().fromArray(e.data.tightBoundingBox.min), new Vector3().fromArray(e.data.tightBoundingBox.max) ); this.node.doneLoading( g, tightBoundingBox, numPoints, new Vector3(...e.data.mean)); Potree.workerPool.returnWorker(workerPath, worker); }; let message = { buffer: las.arrayb, numPoints: las.pointsCount, pointSize: las.pointSize, pointFormatID: las.pointsFormatId, scale: las.scale, offset: las.offset, mins: las.mins, maxs: las.maxs }; worker.postMessage(message, [message.buffer]); }; }; class EptZstandardLoader extends EptBinaryLoader { extension() { return '.zst'; } workerPath() { return Potree.scriptPath + '/workers/EptZstandardDecoderWorker.js'; } }; class ShapefileLoader{ constructor(){ this.transform = null; } async load(path){ const matLine = new LineMaterial( { color: 0xff0000, linewidth: 3, // in pixels resolution: new Vector2(1000, 1000), dashed: false } ); const features = await this.loadShapefileFeatures(path); const node = new Object3D(); for(const feature of features){ const fnode = this.featureToSceneNode(feature, matLine); node.add(fnode); } let setResolution = (x, y) => { matLine.resolution.set(x, y); }; const result = { features: features, node: node, setResolution: setResolution, }; return result; } featureToSceneNode(feature, matLine){ let geometry = feature.geometry; let color = new Color(1, 1, 1); let transform = this.transform; if(transform === null){ transform = {forward: (v) => v}; } if(feature.geometry.type === "Point"){ let sg = new SphereGeometry(1, 18, 18); let sm = new MeshNormalMaterial(); let s = new Mesh(sg, sm); let [long, lat] = geometry.coordinates; let pos = transform.forward([long, lat]); s.position.set(...pos, 20); s.scale.set(10, 10, 10); return s; }else if(geometry.type === "LineString"){ let coordinates = []; let min = new Vector3(Infinity, Infinity, Infinity); for(let i = 0; i < geometry.coordinates.length; i++){ let [long, lat] = geometry.coordinates[i]; let pos = transform.forward([long, lat]); min.x = Math.min(min.x, pos[0]); min.y = Math.min(min.y, pos[1]); min.z = Math.min(min.z, 20); coordinates.push(...pos, 20); if(i > 0 && i < geometry.coordinates.length - 1){ coordinates.push(...pos, 20); } } for(let i = 0; i < coordinates.length; i += 3){ coordinates[i+0] -= min.x; coordinates[i+1] -= min.y; coordinates[i+2] -= min.z; } const lineGeometry = new LineGeometry(); lineGeometry.setPositions( coordinates ); const line = new Line2( lineGeometry, matLine ); line.computeLineDistances(); line.scale.set( 1, 1, 1 ); line.position.copy(min); return line; }else if(geometry.type === "Polygon"){ for(let pc of geometry.coordinates){ let coordinates = []; let min = new Vector3(Infinity, Infinity, Infinity); for(let i = 0; i < pc.length; i++){ let [long, lat] = pc[i]; let pos = transform.forward([long, lat]); min.x = Math.min(min.x, pos[0]); min.y = Math.min(min.y, pos[1]); min.z = Math.min(min.z, 20); coordinates.push(...pos, 20); if(i > 0 && i < pc.length - 1){ coordinates.push(...pos, 20); } } for(let i = 0; i < coordinates.length; i += 3){ coordinates[i+0] -= min.x; coordinates[i+1] -= min.y; coordinates[i+2] -= min.z; } const lineGeometry = new LineGeometry(); lineGeometry.setPositions( coordinates ); const line = new Line2( lineGeometry, matLine ); line.computeLineDistances(); line.scale.set( 1, 1, 1 ); line.position.copy(min); return line; } }else { console.log("unhandled feature: ", feature); } } async loadShapefileFeatures(file){ let features = []; let source = await shapefile.open(file); while(true){ let result = await source.read(); if (result.done) { break; } if (result.value && result.value.type === 'Feature' && result.value.geometry !== undefined) { features.push(result.value); } } return features; } }; const defaultColors = { "landuse": [0.5, 0.5, 0.5], "natural": [0.0, 1.0, 0.0], "places": [1.0, 0.0, 1.0], "points": [0.0, 1.0, 1.0], "roads": [1.0, 1.0, 0.0], "waterways": [0.0, 0.0, 1.0], "default": [0.9, 0.6, 0.1], }; function getColor(feature){ let color = defaultColors[feature]; if(!color){ color = defaultColors["default"]; } return color; } class Geopackage$1{ constructor(){ this.path = null; this.node = null; } }; class GeoPackageLoader{ constructor(){ } static async loadUrl(url, params){ await Promise.all([ Utils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`), Utils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`), ]); const result = await fetch(url); const buffer = await result.arrayBuffer(); params = params || {}; params.source = url; return GeoPackageLoader.loadBuffer(buffer, params); } static async loadBuffer(buffer, params){ await Promise.all([ Utils.loadScript(`${Potree.scriptPath}/lazylibs/geopackage/geopackage.js`), Utils.loadScript(`${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.js`), ]); params = params || {}; const resolver = async (resolve) => { let transform = params.transform; if(!transform){ transform = {forward: (arg) => arg}; } const wasmPath = `${Potree.scriptPath}/lazylibs/sql.js/sql-wasm.wasm`; const SQL = await initSqlJs({ locateFile: filename => wasmPath}); const u8 = new Uint8Array(buffer); const data = await geopackage.open(u8); window.data = data; const geopackageNode = new Object3D(); geopackageNode.name = params.source; geopackageNode.potree = { source: params.source, }; const geo = new Geopackage$1(); geo.path = params.source; geo.node = geopackageNode; const tables = data.getTables(); for(const table of tables.features){ const dao = data.getFeatureDao(table); let boundingBox = dao.getBoundingBox(); boundingBox = boundingBox.projectBoundingBox(dao.projection, 'EPSG:4326'); const geoJson = data.queryForGeoJSONFeaturesInTable(table, boundingBox); const matLine = new LineMaterial( { color: new Color().setRGB(...getColor(table)), linewidth: 2, resolution: new Vector2(1000, 1000), dashed: false } ); const node = new Object3D(); node.name = table; geo.node.add(node); for(const [index, feature] of Object.entries(geoJson)){ //const featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, transform); const featureNode = GeoPackageLoader.featureToSceneNode(feature, matLine, dao.projection, transform); node.add(featureNode); } } resolve(geo); }; return new Promise(resolver); } static featureToSceneNode(feature, matLine, geopackageProjection, transform){ let geometry = feature.geometry; let color = new Color(1, 1, 1); if(feature.geometry.type === "Point"){ let sg = new SphereGeometry(1, 18, 18); let sm = new MeshNormalMaterial(); let s = new Mesh(sg, sm); let [long, lat] = geometry.coordinates; let pos = transform.forward(geopackageProjection.forward([long, lat])); s.position.set(...pos, 20); s.scale.set(10, 10, 10); return s; }else if(geometry.type === "LineString"){ let coordinates = []; let min = new Vector3(Infinity, Infinity, Infinity); for(let i = 0; i < geometry.coordinates.length; i++){ let [long, lat] = geometry.coordinates[i]; let pos = transform.forward(geopackageProjection.forward([long, lat])); min.x = Math.min(min.x, pos[0]); min.y = Math.min(min.y, pos[1]); min.z = Math.min(min.z, 20); coordinates.push(...pos, 20); if(i > 0 && i < geometry.coordinates.length - 1){ coordinates.push(...pos, 20); } } for(let i = 0; i < coordinates.length; i += 3){ coordinates[i+0] -= min.x; coordinates[i+1] -= min.y; coordinates[i+2] -= min.z; } const lineGeometry = new LineGeometry(); lineGeometry.setPositions( coordinates ); const line = new Line2( lineGeometry, matLine ); line.computeLineDistances(); line.scale.set( 1, 1, 1 ); line.position.copy(min); return line; }else if(geometry.type === "Polygon"){ for(let pc of geometry.coordinates){ let coordinates = []; let min = new Vector3(Infinity, Infinity, Infinity); for(let i = 0; i < pc.length; i++){ let [long, lat] = pc[i]; let pos = transform.forward(geopackageProjection.forward([long, lat])); min.x = Math.min(min.x, pos[0]); min.y = Math.min(min.y, pos[1]); min.z = Math.min(min.z, 20); coordinates.push(...pos, 20); if(i > 0 && i < pc.length - 1){ coordinates.push(...pos, 20); } } for(let i = 0; i < coordinates.length; i += 3){ coordinates[i+0] -= min.x; coordinates[i+1] -= min.y; coordinates[i+2] -= min.z; } const lineGeometry = new LineGeometry(); lineGeometry.setPositions( coordinates ); const line = new Line2( lineGeometry, matLine ); line.computeLineDistances(); line.scale.set( 1, 1, 1 ); line.position.copy(min); return line; } }else { console.log("unhandled feature: ", feature); } } }; class ClipVolume extends Object3D{ constructor(args){ super(); this.constructor.counter = (this.constructor.counter === undefined) ? 0 : this.constructor.counter + 1; this.name = "clip_volume_" + this.constructor.counter; let alpha = args.alpha || 0; let beta = args.beta || 0; let gamma = args.gamma || 0; this.rotation.x = alpha; this.rotation.y = beta; this.rotation.z = gamma; this.clipOffset = 0.001; this.clipRotOffset = 1; let boxGeometry = new BoxGeometry(1, 1, 1); boxGeometry.computeBoundingBox(); let boxFrameGeometry = new Geometry(); { // bottom boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); // top boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); // sides boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); boxFrameGeometry.colors.push(new Vector3(1, 1, 1)); } let planeFrameGeometry = new Geometry(); { // middle line planeFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.0)); planeFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.0)); planeFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.0)); planeFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.0)); planeFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.0)); planeFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.0)); planeFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.0)); planeFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.0)); } this.dimension = new Vector3(1, 1, 1); this.material = new MeshBasicMaterial( { color: 0x00ff00, transparent: true, opacity: 0.3, depthTest: true, depthWrite: false} ); this.box = new Mesh(boxGeometry, this.material); this.box.geometry.computeBoundingBox(); this.boundingBox = this.box.geometry.boundingBox; this.add(this.box); this.frame = new LineSegments( boxFrameGeometry, new LineBasicMaterial({color: 0x000000})); this.add(this.frame); this.planeFrame = new LineSegments( planeFrameGeometry, new LineBasicMaterial({color: 0xff0000})); this.add(this.planeFrame); // set default thickness this.setScaleZ(0.1); // create local coordinate system let createArrow = (name, direction, color) => { let material = new MeshBasicMaterial({ color: color, depthTest: false, depthWrite: false}); let shaftGeometry = new Geometry(); shaftGeometry.vertices.push(new Vector3(0, 0, 0)); shaftGeometry.vertices.push(new Vector3(0, 1, 0)); let shaftMaterial = new LineBasicMaterial({ color: color, depthTest: false, depthWrite: false, transparent: true }); let shaft = new Line(shaftGeometry, shaftMaterial); shaft.name = name + "_shaft"; let headGeometry = new CylinderGeometry(0, 0.04, 0.1, 10, 1, false); let headMaterial = material; let head = new Mesh(headGeometry, headMaterial); head.name = name + "_head"; head.position.y = 1; let arrow = new Object3D(); arrow.name = name; arrow.add(shaft); arrow.add(head); return arrow; }; this.arrowX = createArrow("arrow_x", new Vector3(1, 0, 0), 0xFF0000); this.arrowY = createArrow("arrow_y", new Vector3(0, 1, 0), 0x00FF00); this.arrowZ = createArrow("arrow_z", new Vector3(0, 0, 1), 0x0000FF); this.arrowX.rotation.z = -Math.PI / 2; this.arrowZ.rotation.x = Math.PI / 2; this.arrowX.visible = false; this.arrowY.visible = false; this.arrowZ.visible = false; this.add(this.arrowX); this.add(this.arrowY); this.add(this.arrowZ); { // event listeners this.addEventListener("ui_select", e => { this.arrowX.visible = true; this.arrowY.visible = true; this.arrowZ.visible = true; }); this.addEventListener("ui_deselect", e => { this.arrowX.visible = false; this.arrowY.visible = false; this.arrowZ.visible = false; }); this.addEventListener("select", e => { let scene_header = $("#" + this.name + " .scene_header"); if(!scene_header.next().is(":visible")) { scene_header.click(); } }); this.addEventListener("deselect", e => { let scene_header = $("#" + this.name + " .scene_header"); if(scene_header.next().is(":visible")) { scene_header.click(); } }); } this.update(); }; setClipOffset(offset) { this.clipOffset = offset; } setClipRotOffset(offset) { this.clipRotOffset = offset; } setScaleX(x) { this.box.scale.x = x; this.frame.scale.x = x; this.planeFrame.scale.x = x; } setScaleY(y) { this.box.scale.y = y; this.frame.scale.y = y; this.planeFrame.scale.y = y; } setScaleZ(z) { this.box.scale.z = z; this.frame.scale.z = z; this.planeFrame.scale.z = z; } offset(args) { let cs = args.cs || null; let axis = args.axis || null; let dir = args.dir || null; if(!cs || !axis || !dir) return; if(axis === "x") { if(cs === "local") { this.position.add(this.localX.clone().multiplyScalar(dir * this.clipOffset)); } else if(cs === "global") { this.position.x = this.position.x + dir * this.clipOffset; } }else if(axis === "y") { if(cs === "local") { this.position.add(this.localY.clone().multiplyScalar(dir * this.clipOffset)); } else if(cs === "global") { this.position.y = this.position.y + dir * this.clipOffset; } }else if(axis === "z") { if(cs === "local") { this.position.add(this.localZ.clone().multiplyScalar(dir * this.clipOffset)); } else if(cs === "global") { this.position.z = this.position.z + dir * this.clipOffset; } } this.dispatchEvent({"type": "clip_volume_changed", "viewer": viewer, "volume": this}); } rotate(args) { let cs = args.cs || null; let axis = args.axis || null; let dir = args.dir || null; if(!cs || !axis || !dir) return; if(cs === "local") { if(axis === "x") { this.rotateOnAxis(new Vector3(1, 0, 0), dir * this.clipRotOffset * Math.PI / 180); } else if(axis === "y") { this.rotateOnAxis(new Vector3(0, 1, 0), dir * this.clipRotOffset * Math.PI / 180); } else if(axis === "z") { this.rotateOnAxis(new Vector3(0, 0, 1), dir * this.clipRotOffset * Math.PI / 180); } } else if(cs === "global") { let rotaxis = new Vector4(1, 0, 0, 0); if(axis === "y") { rotaxis = new Vector4(0, 1, 0, 0); } else if(axis === "z") { rotaxis = new Vector4(0, 0, 1, 0); } this.updateMatrixWorld(); let invM = newthis.matrixWorld.clone().invert(); rotaxis = rotaxis.applyMatrix4(invM).normalize(); rotaxis = new Vector3(rotaxis.x, rotaxis.y, rotaxis.z); this.rotateOnAxis(rotaxis, dir * this.clipRotOffset * Math.PI / 180); } this.updateLocalSystem(); this.dispatchEvent({"type": "clip_volume_changed", "viewer": viewer, "volume": this}); } update(){ this.boundingBox = this.box.geometry.boundingBox; this.boundingSphere = this.boundingBox.getBoundingSphere(new Sphere()); this.box.visible = false; this.updateLocalSystem(); }; updateLocalSystem() { // extract local coordinate axes let rotQuat = this.getWorldQuaternion(); this.localX = new Vector3(1, 0, 0).applyQuaternion(rotQuat).normalize(); this.localY = new Vector3(0, 1, 0).applyQuaternion(rotQuat).normalize(); this.localZ = new Vector3(0, 0, 1).applyQuaternion(rotQuat).normalize(); } raycast(raycaster, intersects){ let is = []; this.box.raycast(raycaster, is); if(is.length > 0){ let I = is[0]; intersects.push({ distance: I.distance, object: this, point: I.point.clone() }); } }; }; class ClippingTool extends EventDispatcher{ constructor(viewer){ super(); this.viewer = viewer; this.maxPolygonVertices = 8; this.addEventListener("start_inserting_clipping_volume", e => { this.viewer.dispatchEvent({ type: "cancel_insertions" }); }); this.sceneMarker = new Scene(); this.sceneVolume = new Scene(); this.sceneVolume.name = "scene_clip_volume"; this.viewer.inputHandler.registerInteractiveScene(this.sceneVolume); this.onRemove = e => { this.sceneVolume.remove(e.volume); }; this.onAdd = e => { this.sceneVolume.add(e.volume); }; this.viewer.inputHandler.addEventListener("delete", e => { let volumes = e.selection.filter(e => (e instanceof ClipVolume)); volumes.forEach(e => this.viewer.scene.removeClipVolume(e)); let polyVolumes = e.selection.filter(e => (e instanceof PolygonClipVolume)); polyVolumes.forEach(e => this.viewer.scene.removePolygonClipVolume(e)); }); } setScene(scene){ if(this.scene === scene){ return; } if(this.scene){ this.scene.removeEventListeners("clip_volume_added", this.onAdd); this.scene.removeEventListeners("clip_volume_removed", this.onRemove); this.scene.removeEventListeners("polygon_clip_volume_added", this.onAdd); this.scene.removeEventListeners("polygon_clip_volume_removed", this.onRemove); } this.scene = scene; this.scene.addEventListener("clip_volume_added", this.onAdd); this.scene.addEventListener("clip_volume_removed", this.onRemove); this.scene.addEventListener("polygon_clip_volume_added", this.onAdd); this.scene.addEventListener("polygon_clip_volume_removed", this.onRemove); } startInsertion(args = {}) { let type = args.type || null; if(!type) return null; let domElement = this.viewer.renderer.domElement; let canvasSize = this.viewer.renderer.getSize(new Vector2()); let svg = $(` `); $(domElement.parentElement).append(svg); let polyClipVol = new PolygonClipVolume(this.viewer.scene.getActiveCamera().clone()); this.dispatchEvent({"type": "start_inserting_clipping_volume"}); this.viewer.scene.addPolygonClipVolume(polyClipVol); this.sceneMarker.add(polyClipVol); let cancel = { callback: null }; let insertionCallback = (e) => { if(e.button === MOUSE.LEFT){ polyClipVol.addMarker(); // SVC Screen Line svg.find("polyline").each((index, target) => { let newPoint = svg[0].createSVGPoint(); newPoint.x = e.offsetX; newPoint.y = e.offsetY; let polyline = target.points.appendItem(newPoint); }); if(polyClipVol.markers.length > this.maxPolygonVertices){ cancel.callback(); } this.viewer.inputHandler.startDragging( polyClipVol.markers[polyClipVol.markers.length - 1]); }else if(e.button === MOUSE.RIGHT){ cancel.callback(e); } }; cancel.callback = e => { //let first = svg.find("polyline")[0].points[0]; //svg.find("polyline").each((index, target) => { // let newPoint = svg[0].createSVGPoint(); // newPoint.x = first.x; // newPoint.y = first.y; // let polyline = target.points.appendItem(newPoint); //}); svg.remove(); if(polyClipVol.markers.length > 3) { polyClipVol.removeLastMarker(); polyClipVol.initialized = true; } else { this.viewer.scene.removePolygonClipVolume(polyClipVol); } this.viewer.renderer.domElement.removeEventListener("mouseup", insertionCallback, true); this.viewer.removeEventListener("cancel_insertions", cancel.callback); this.viewer.inputHandler.enabled = true; }; this.viewer.addEventListener("cancel_insertions", cancel.callback); this.viewer.renderer.domElement.addEventListener("mouseup", insertionCallback , true); this.viewer.inputHandler.enabled = false; polyClipVol.addMarker(); this.viewer.inputHandler.startDragging( polyClipVol.markers[polyClipVol.markers.length - 1]); return polyClipVol; } update() { } }; var GeoTIFF = (function (exports) { 'use strict'; const Endianness = new Enum({ LITTLE: "II", BIG: "MM", }); const Type = new Enum({ BYTE: {value: 1, bytes: 1}, ASCII: {value: 2, bytes: 1}, SHORT: {value: 3, bytes: 2}, LONG: {value: 4, bytes: 4}, RATIONAL: {value: 5, bytes: 8}, SBYTE: {value: 6, bytes: 1}, UNDEFINED: {value: 7, bytes: 1}, SSHORT: {value: 8, bytes: 2}, SLONG: {value: 9, bytes: 4}, SRATIONAL: {value: 10, bytes: 8}, FLOAT: {value: 11, bytes: 4}, DOUBLE: {value: 12, bytes: 8}, }); const Tag = new Enum({ IMAGE_WIDTH: 256, IMAGE_HEIGHT: 257, BITS_PER_SAMPLE: 258, COMPRESSION: 259, PHOTOMETRIC_INTERPRETATION: 262, STRIP_OFFSETS: 273, ORIENTATION: 274, SAMPLES_PER_PIXEL: 277, ROWS_PER_STRIP: 278, STRIP_BYTE_COUNTS: 279, X_RESOLUTION: 282, Y_RESOLUTION: 283, PLANAR_CONFIGURATION: 284, RESOLUTION_UNIT: 296, SOFTWARE: 305, COLOR_MAP: 320, SAMPLE_FORMAT: 339, MODEL_PIXEL_SCALE: 33550, // [GeoTIFF] TYPE: double N: 3 MODEL_TIEPOINT: 33922, // [GeoTIFF] TYPE: double N: 6 * NUM_TIEPOINTS GEO_KEY_DIRECTORY: 34735, // [GeoTIFF] TYPE: short N: >= 4 GEO_DOUBLE_PARAMS: 34736, // [GeoTIFF] TYPE: short N: variable GEO_ASCII_PARAMS: 34737, // [GeoTIFF] TYPE: ascii N: variable }); const typeMapping = new Map([ [Type.BYTE, Uint8Array], [Type.ASCII, Uint8Array], [Type.SHORT, Uint16Array], [Type.LONG, Uint32Array], [Type.RATIONAL, Uint32Array], [Type.SBYTE, Int8Array], [Type.UNDEFINED, Uint8Array], [Type.SSHORT, Int16Array], [Type.SLONG, Int32Array], [Type.SRATIONAL, Int32Array], [Type.FLOAT, Float32Array], [Type.DOUBLE, Float64Array], ]); class IFDEntry{ constructor(tag, type, count, offset, value){ this.tag = tag; this.type = type; this.count = count; this.offset = offset; this.value = value; } } class Image{ constructor(){ this.width = 0; this.height = 0; this.buffer = null; this.metadata = []; } } class Reader{ constructor(){ } static read(data){ let endiannessTag = String.fromCharCode(...Array.from(data.slice(0, 2))); let endianness = Endianness.fromValue(endiannessTag); let tiffCheckTag = data.readUInt8(2); if(tiffCheckTag !== 42){ throw new Error("not a valid tiff file"); } let offsetToFirstIFD = data.readUInt32LE(4); console.log("offsetToFirstIFD", offsetToFirstIFD); let ifds = []; let IFDsRead = false; let currentIFDOffset = offsetToFirstIFD; let i = 0; while(IFDsRead || i < 100){ console.log("currentIFDOffset", currentIFDOffset); let numEntries = data.readUInt16LE(currentIFDOffset); let nextIFDOffset = data.readUInt32LE(currentIFDOffset + 2 + numEntries * 12); console.log("next offset: ", currentIFDOffset + 2 + numEntries * 12); let entryBuffer = data.slice(currentIFDOffset + 2, currentIFDOffset + 2 + 12 * numEntries); for(let i = 0; i < numEntries; i++){ let tag = Tag.fromValue(entryBuffer.readUInt16LE(i * 12)); let type = Type.fromValue(entryBuffer.readUInt16LE(i * 12 + 2)); let count = entryBuffer.readUInt32LE(i * 12 + 4); let offsetOrValue = entryBuffer.readUInt32LE(i * 12 + 8); let valueBytes = type.bytes * count; let value; if(valueBytes <= 4){ value = offsetOrValue; }else { let valueBuffer = new Uint8Array(valueBytes); valueBuffer.set(data.slice(offsetOrValue, offsetOrValue + valueBytes)); let ArrayType = typeMapping.get(type); value = new ArrayType(valueBuffer.buffer); if(type === Type.ASCII){ value = String.fromCharCode(...value); } } let ifd = new IFDEntry(tag, type, count, offsetOrValue, value); ifds.push(ifd); } console.log("nextIFDOffset", nextIFDOffset); if(nextIFDOffset === 0){ break; } currentIFDOffset = nextIFDOffset; i++; } let ifdForTag = (tag) => { for(let entry of ifds){ if(entry.tag === tag){ return entry; } } return null; }; let width = ifdForTag(Tag.IMAGE_WIDTH, ifds).value; let height = ifdForTag(Tag.IMAGE_HEIGHT, ifds).value; let compression = ifdForTag(Tag.COMPRESSION, ifds).value; let rowsPerStrip = ifdForTag(Tag.ROWS_PER_STRIP, ifds).value; let ifdStripOffsets = ifdForTag(Tag.STRIP_OFFSETS, ifds); let ifdStripByteCounts = ifdForTag(Tag.STRIP_BYTE_COUNTS, ifds); let numStrips = Math.ceil(height / rowsPerStrip); let stripByteCounts = []; for(let i = 0; i < ifdStripByteCounts.count; i++){ let type = ifdStripByteCounts.type; let offset = ifdStripByteCounts.offset + i * type.bytes; let value; if(type === Type.SHORT){ value = data.readUInt16LE(offset); }else if(type === Type.LONG){ value = data.readUInt32LE(offset); } stripByteCounts.push(value); } let stripOffsets = []; for(let i = 0; i < ifdStripOffsets.count; i++){ let type = ifdStripOffsets.type; let offset = ifdStripOffsets.offset + i * type.bytes; let value; if(type === Type.SHORT){ value = data.readUInt16LE(offset); }else if(type === Type.LONG){ value = data.readUInt32LE(offset); } stripOffsets.push(value); } let imageBuffer = new Uint8Array(width * height * 3); let linesProcessed = 0; for(let i = 0; i < numStrips; i++){ let stripOffset = stripOffsets[i]; let stripBytes = stripByteCounts[i]; let stripData = data.slice(stripOffset, stripOffset + stripBytes); let lineBytes = width * 3; for(let y = 0; y < rowsPerStrip; y++){ let line = stripData.slice(y * lineBytes, y * lineBytes + lineBytes); imageBuffer.set(line, linesProcessed * lineBytes); if(line.length === lineBytes){ linesProcessed++; }else { break; } } } console.log(`width: ${width}`); console.log(`height: ${height}`); console.log(`numStrips: ${numStrips}`); console.log("stripByteCounts", stripByteCounts.join(", ")); console.log("stripOffsets", stripOffsets.join(", ")); let image = new Image(); image.width = width; image.height = height; image.buffer = imageBuffer; image.metadata = ifds; return image; } } class Exporter{ constructor(){ } static toTiffBuffer(image, params = {}){ let offsetToFirstIFD = 8; let headerBuffer = new Uint8Array([0x49, 0x49, 42, 0, offsetToFirstIFD, 0, 0, 0]); let [width, height] = [image.width, image.height]; let ifds = [ new IFDEntry(Tag.IMAGE_WIDTH, Type.SHORT, 1, null, width), new IFDEntry(Tag.IMAGE_HEIGHT, Type.SHORT, 1, null, height), new IFDEntry(Tag.BITS_PER_SAMPLE, Type.SHORT, 4, null, new Uint16Array([8, 8, 8, 8])), new IFDEntry(Tag.COMPRESSION, Type.SHORT, 1, null, 1), new IFDEntry(Tag.PHOTOMETRIC_INTERPRETATION, Type.SHORT, 1, null, 2), new IFDEntry(Tag.ORIENTATION, Type.SHORT, 1, null, 1), new IFDEntry(Tag.SAMPLES_PER_PIXEL, Type.SHORT, 1, null, 4), new IFDEntry(Tag.ROWS_PER_STRIP, Type.LONG, 1, null, height), new IFDEntry(Tag.STRIP_BYTE_COUNTS, Type.LONG, 1, null, width * height * 3), new IFDEntry(Tag.PLANAR_CONFIGURATION, Type.SHORT, 1, null, 1), new IFDEntry(Tag.RESOLUTION_UNIT, Type.SHORT, 1, null, 1), new IFDEntry(Tag.SOFTWARE, Type.ASCII, 6, null, "......"), new IFDEntry(Tag.STRIP_OFFSETS, Type.LONG, 1, null, null), new IFDEntry(Tag.X_RESOLUTION, Type.RATIONAL, 1, null, new Uint32Array([1, 1])), new IFDEntry(Tag.Y_RESOLUTION, Type.RATIONAL, 1, null, new Uint32Array([1, 1])), ]; if(params.ifdEntries){ ifds.push(...params.ifdEntries); } let valueOffset = offsetToFirstIFD + 2 + ifds.length * 12 + 4; // create 12 byte buffer for each ifd and variable length buffers for ifd values let ifdEntryBuffers = new Map(); let ifdValueBuffers = new Map(); for(let ifd of ifds){ let entryBuffer = new ArrayBuffer(12); let entryView = new DataView(entryBuffer); let valueBytes = ifd.type.bytes * ifd.count; entryView.setUint16(0, ifd.tag.value, true); entryView.setUint16(2, ifd.type.value, true); entryView.setUint32(4, ifd.count, true); if(ifd.count === 1 && ifd.type.bytes <= 4){ entryView.setUint32(8, ifd.value, true); }else { entryView.setUint32(8, valueOffset, true); let valueBuffer = new Uint8Array(ifd.count * ifd.type.bytes); if(ifd.type === Type.ASCII){ valueBuffer.set(new Uint8Array(ifd.value.split("").map(c => c.charCodeAt(0)))); }else { valueBuffer.set(new Uint8Array(ifd.value.buffer)); } ifdValueBuffers.set(ifd.tag, valueBuffer); valueOffset = valueOffset + valueBuffer.byteLength; } ifdEntryBuffers.set(ifd.tag, entryBuffer); } let imageBufferOffset = valueOffset; new DataView(ifdEntryBuffers.get(Tag.STRIP_OFFSETS)).setUint32(8, imageBufferOffset, true); let concatBuffers = (buffers) => { let totalLength = buffers.reduce( (sum, buffer) => (sum + buffer.byteLength), 0); let merged = new Uint8Array(totalLength); let offset = 0; for(let buffer of buffers){ merged.set(new Uint8Array(buffer), offset); offset += buffer.byteLength; } return merged; }; let ifdBuffer = concatBuffers([ new Uint16Array([ifds.length]), ...ifdEntryBuffers.values(), new Uint32Array([0])]); let ifdValueBuffer = concatBuffers([...ifdValueBuffers.values()]); let tiffBuffer = concatBuffers([ headerBuffer, ifdBuffer, ifdValueBuffer, image.buffer ]); return {width: width, height: height, buffer: tiffBuffer}; } } exports.Tag = Tag; exports.Type = Type; exports.IFDEntry = IFDEntry; exports.Image = Image; exports.Reader = Reader; exports.Exporter = Exporter; return exports; }({})); function updateAzimuth(viewer, measure){ const azimuth = measure.azimuth; const isOkay = measure.points.length === 2; azimuth.node.visible = isOkay && measure.showAzimuth; if(!azimuth.node.visible){ return; } const camera = viewer.scene.getActiveCamera(); const renderAreaSize = viewer.renderer.getSize(new Vector2()); const width = renderAreaSize.width; const height = renderAreaSize.height; const [p0, p1] = measure.points; const r = p0.position.distanceTo(p1.position); const northVec = Utils.getNorthVec(p0.position, r, viewer.getProjection()); const northPos = p0.position.clone().add(northVec); azimuth.center.position.copy(p0.position); azimuth.center.scale.set(2, 2, 2); azimuth.center.visible = false; // azimuth.target.visible = false; { // north azimuth.north.position.copy(northPos); azimuth.north.scale.set(2, 2, 2); let distance = azimuth.north.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, width, height); let scale = (5 / pr); azimuth.north.scale.set(scale, scale, scale); } { // target azimuth.target.position.copy(p1.position); azimuth.target.position.z = azimuth.north.position.z; let distance = azimuth.target.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, width, height); let scale = (5 / pr); azimuth.target.scale.set(scale, scale, scale); } azimuth.circle.position.copy(p0.position); azimuth.circle.scale.set(r, r, r); azimuth.circle.material.resolution.set(width, height); // to target azimuth.centerToTarget.geometry.setPositions([ 0, 0, 0, ...p1.position.clone().sub(p0.position).toArray(), ]); azimuth.centerToTarget.position.copy(p0.position); azimuth.centerToTarget.geometry.verticesNeedUpdate = true; azimuth.centerToTarget.geometry.computeBoundingSphere(); azimuth.centerToTarget.computeLineDistances(); azimuth.centerToTarget.material.resolution.set(width, height); // to target ground azimuth.centerToTargetground.geometry.setPositions([ 0, 0, 0, p1.position.x - p0.position.x, p1.position.y - p0.position.y, 0, ]); azimuth.centerToTargetground.position.copy(p0.position); azimuth.centerToTargetground.geometry.verticesNeedUpdate = true; azimuth.centerToTargetground.geometry.computeBoundingSphere(); azimuth.centerToTargetground.computeLineDistances(); azimuth.centerToTargetground.material.resolution.set(width, height); // to north azimuth.centerToNorth.geometry.setPositions([ 0, 0, 0, northPos.x - p0.position.x, northPos.y - p0.position.y, 0, ]); azimuth.centerToNorth.position.copy(p0.position); azimuth.centerToNorth.geometry.verticesNeedUpdate = true; azimuth.centerToNorth.geometry.computeBoundingSphere(); azimuth.centerToNorth.computeLineDistances(); azimuth.centerToNorth.material.resolution.set(width, height); // label const radians = Utils.computeAzimuth(p0.position, p1.position, viewer.getProjection()); let degrees = MathUtils.radToDeg(radians); if(degrees < 0){ degrees = 360 + degrees; } const txtDegrees = `${degrees.toFixed(2)}°`; const labelDir = northPos.clone().add(p1.position).multiplyScalar(0.5).sub(p0.position); if(labelDir.length() > 0){ labelDir.z = 0; labelDir.normalize(); const labelVec = labelDir.clone().multiplyScalar(r); const labelPos = p0.position.clone().add(labelVec); azimuth.label.position.copy(labelPos); } azimuth.label.setText(txtDegrees); let distance = azimuth.label.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, width, height); let scale = (70 / pr); azimuth.label.scale.set(scale, scale, scale); } class MeasuringTool extends EventDispatcher{ constructor (viewer) { super(); this.viewer = viewer; this.renderer = viewer.renderer; this.addEventListener('start_inserting_measurement', e => { this.viewer.dispatchEvent({ type: 'cancel_insertions' }); }); this.showLabels = true; this.scene = new Scene(); this.scene.name = 'scene_measurement'; this.light = new PointLight(0xffffff, 1.0); this.scene.add(this.light); this.viewer.inputHandler.registerInteractiveScene(this.scene); this.onRemove = (e) => { this.scene.remove(e.measurement);}; this.onAdd = e => {this.scene.add(e.measurement);}; for(let measurement of viewer.scene.measurements){ this.onAdd({measurement: measurement}); } viewer.addEventListener("update", this.update.bind(this)); viewer.addEventListener("render.pass.perspective_overlay", this.render.bind(this)); viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); viewer.scene.addEventListener('measurement_added', this.onAdd); viewer.scene.addEventListener('measurement_removed', this.onRemove); } onSceneChange(e){ if(e.oldScene){ e.oldScene.removeEventListener('measurement_added', this.onAdd); e.oldScene.removeEventListener('measurement_removed', this.onRemove); } e.scene.addEventListener('measurement_added', this.onAdd); e.scene.addEventListener('measurement_removed', this.onRemove); } startInsertion (args = {}) { let domElement = this.viewer.renderer.domElement; let measure = new Measure(); this.dispatchEvent({ type: 'start_inserting_measurement', measure: measure }); const pick = (defaul, alternative) => { if(defaul != null){ return defaul; }else { return alternative; } }; measure.showDistances = (args.showDistances === null) ? true : args.showDistances; measure.showArea = pick(args.showArea, false); measure.showAngles = pick(args.showAngles, false); measure.showCoordinates = pick(args.showCoordinates, false); measure.showHeight = pick(args.showHeight, false); measure.showCircle = pick(args.showCircle, false); measure.showAzimuth = pick(args.showAzimuth, false); measure.showEdges = pick(args.showEdges, true); measure.closed = pick(args.closed, false); measure.maxMarkers = pick(args.maxMarkers, Infinity); measure.name = args.name || 'Measurement'; this.scene.add(measure); let cancel = { removeLastMarker: measure.maxMarkers > 3, callback: null }; let insertionCallback = (e) => { if (e.button === MOUSE.LEFT) { measure.addMarker(measure.points[measure.points.length - 1].position.clone()); if (measure.points.length >= measure.maxMarkers) { cancel.callback(); } this.viewer.inputHandler.startDragging( measure.spheres[measure.spheres.length - 1]); } else if (e.button === MOUSE.RIGHT) { cancel.callback(); } }; cancel.callback = e => { if (cancel.removeLastMarker) { measure.removeMarker(measure.points.length - 1); } domElement.removeEventListener('mouseup', insertionCallback, false); this.viewer.removeEventListener('cancel_insertions', cancel.callback); }; if (measure.maxMarkers > 1) { this.viewer.addEventListener('cancel_insertions', cancel.callback); domElement.addEventListener('mouseup', insertionCallback, false); } measure.addMarker(new Vector3(0, 0, 0)); this.viewer.inputHandler.startDragging( measure.spheres[measure.spheres.length - 1]); this.viewer.scene.addMeasurement(measure); return measure; } update(){ let camera = this.viewer.scene.getActiveCamera(); let domElement = this.renderer.domElement; let measurements = this.viewer.scene.measurements; const renderAreaSize = this.renderer.getSize(new Vector2()); let clientWidth = renderAreaSize.width; let clientHeight = renderAreaSize.height; this.light.position.copy(camera.position); // make size independant of distance for (let measure of measurements) { measure.lengthUnit = this.viewer.lengthUnit; measure.lengthUnitDisplay = this.viewer.lengthUnitDisplay; measure.update(); updateAzimuth(this.viewer, measure); // spheres for(let sphere of measure.spheres){ let distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3())); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (15 / pr); sphere.scale.set(scale, scale, scale); } // labels let labels = measure.edgeLabels.concat(measure.angleLabels); for(let label of labels){ let distance = camera.position.distanceTo(label.getWorldPosition(new Vector3())); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (70 / pr); if(Potree.debug.scale){ scale = (Potree.debug.scale / pr); } label.scale.set(scale, scale, scale); } // coordinate labels for (let j = 0; j < measure.coordinateLabels.length; j++) { let label = measure.coordinateLabels[j]; let sphere = measure.spheres[j]; let distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3())); let screenPos = sphere.getWorldPosition(new Vector3()).clone().project(camera); screenPos.x = Math.round((screenPos.x + 1) * clientWidth / 2); screenPos.y = Math.round((-screenPos.y + 1) * clientHeight / 2); screenPos.z = 0; screenPos.y -= 30; let labelPos = new Vector3( (screenPos.x / clientWidth) * 2 - 1, -(screenPos.y / clientHeight) * 2 + 1, 0.5 ); labelPos.unproject(camera); if(this.viewer.scene.cameraMode == CameraMode.PERSPECTIVE) { let direction = labelPos.sub(camera.position).normalize(); labelPos = new Vector3().addVectors( camera.position, direction.multiplyScalar(distance)); } label.position.copy(labelPos); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (70 / pr); label.scale.set(scale, scale, scale); } // height label if (measure.showHeight) { let label = measure.heightLabel; { let distance = label.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (70 / pr); label.scale.set(scale, scale, scale); } { // height edge let edge = measure.heightEdge; let sorted = measure.points.slice().sort((a, b) => a.position.z - b.position.z); let lowPoint = sorted[0].position.clone(); let highPoint = sorted[sorted.length - 1].position.clone(); let min = lowPoint.z; let max = highPoint.z; let start = new Vector3(highPoint.x, highPoint.y, min); let end = new Vector3(highPoint.x, highPoint.y, max); let lowScreen = lowPoint.clone().project(camera); let startScreen = start.clone().project(camera); let endScreen = end.clone().project(camera); let toPixelCoordinates = v => { let r = v.clone().addScalar(1).divideScalar(2); r.x = r.x * clientWidth; r.y = r.y * clientHeight; r.z = 0; return r; }; let lowEL = toPixelCoordinates(lowScreen); let startEL = toPixelCoordinates(startScreen); let endEL = toPixelCoordinates(endScreen); let lToS = lowEL.distanceTo(startEL); let sToE = startEL.distanceTo(endEL); edge.geometry.lineDistances = [0, lToS, lToS, lToS + sToE]; edge.geometry.lineDistancesNeedUpdate = true; edge.material.dashSize = 10; edge.material.gapSize = 10; } } { // area label let label = measure.areaLabel; let distance = label.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (70 / pr); label.scale.set(scale, scale, scale); } { // radius label let label = measure.circleRadiusLabel; let distance = label.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (70 / pr); label.scale.set(scale, scale, scale); } { // edges const materials = [ measure.circleRadiusLine.material, ...measure.edges.map( (e) => e.material), measure.heightEdge.material, measure.circleLine.material, ]; for(const material of materials){ material.resolution.set(clientWidth, clientHeight); } } if(!this.showLabels){ const labels = [ ...measure.sphereLabels, ...measure.edgeLabels, ...measure.angleLabels, ...measure.coordinateLabels, measure.heightLabel, measure.areaLabel, measure.circleRadiusLabel, ]; for(const label of labels){ label.visible = false; } } } } render(){ this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); } }; class Message{ constructor(content){ this.content = content; let closeIcon = `${exports.resourcePath}/icons/close.svg`; this.element = $(`
      `); this.elClose = this.element.find("img[name=close]"); this.elContainer = this.element.find("span[name=content_container]"); if(typeof content === "string"){ this.elContainer.append($(`${content}`)); }else { this.elContainer.append(content); } } setMessage(content){ this.elContainer.empty(); if(typeof content === "string"){ this.elContainer.append($(`${content}`)); }else { this.elContainer.append(content); } } } class PointCloudSM{ constructor(potreeRenderer){ this.potreeRenderer = potreeRenderer; this.threeRenderer = this.potreeRenderer.threeRenderer; this.target = new WebGLRenderTarget(2 * 1024, 2 * 1024, { minFilter: LinearFilter, magFilter: LinearFilter, format: RGBAFormat, type: FloatType }); this.target.depthTexture = new DepthTexture(); this.target.depthTexture.type = UnsignedIntType; //this.threeRenderer.setClearColor(0x000000, 1); this.threeRenderer.setClearColor(0xff0000, 1); //HACK? removed while moving to three.js 109 //this.threeRenderer.clearTarget(this.target, true, true, true); { const oldTarget = this.threeRenderer.getRenderTarget(); this.threeRenderer.setRenderTarget(this.target); this.threeRenderer.clear(true, true, true); this.threeRenderer.setRenderTarget(oldTarget); } } setLight(light){ this.light = light; let fov = (180 * light.angle) / Math.PI; let aspect = light.shadow.mapSize.width / light.shadow.mapSize.height; let near = 0.1; let far = light.distance === 0 ? 10000 : light.distance; this.camera = new PerspectiveCamera(fov, aspect, near, far); this.camera.up.set(0, 0, 1); this.camera.position.copy(light.position); let target = new Vector3().subVectors(light.position, light.getWorldDirection(new Vector3())); this.camera.lookAt(target); this.camera.updateProjectionMatrix(); this.camera.updateMatrix(); this.camera.updateMatrixWorld(); this.camera.matrixWorldInverse.copy(this.camera.matrixWorld).invert(); } setSize(width, height){ if(this.target.width !== width || this.target.height !== height){ this.target.dispose(); } this.target.setSize(width, height); } render(scene, camera){ this.threeRenderer.setClearColor(0x000000, 1); const oldTarget = this.threeRenderer.getRenderTarget(); this.threeRenderer.setRenderTarget(this.target); this.threeRenderer.clear(true, true, true); this.potreeRenderer.render(scene, this.camera, this.target, {}); this.threeRenderer.setRenderTarget(oldTarget); } } class ProfileTool extends EventDispatcher { constructor (viewer) { super(); this.viewer = viewer; this.renderer = viewer.renderer; this.addEventListener('start_inserting_profile', e => { this.viewer.dispatchEvent({ type: 'cancel_insertions' }); }); this.scene = new Scene(); this.scene.name = 'scene_profile'; this.light = new PointLight(0xffffff, 1.0); this.scene.add(this.light); this.viewer.inputHandler.registerInteractiveScene(this.scene); this.onRemove = e => this.scene.remove(e.profile); this.onAdd = e => this.scene.add(e.profile); for(let profile of viewer.scene.profiles){ this.onAdd({profile: profile}); } viewer.addEventListener("update", this.update.bind(this)); viewer.addEventListener("render.pass.perspective_overlay", this.render.bind(this)); viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); viewer.scene.addEventListener('profile_added', this.onAdd); viewer.scene.addEventListener('profile_removed', this.onRemove); } onSceneChange(e){ if(e.oldScene){ e.oldScene.removeEventListeners('profile_added', this.onAdd); e.oldScene.removeEventListeners('profile_removed', this.onRemove); } e.scene.addEventListener('profile_added', this.onAdd); e.scene.addEventListener('profile_removed', this.onRemove); } startInsertion (args = {}) { let domElement = this.viewer.renderer.domElement; let profile = new Profile(); profile.name = args.name || 'Profile'; this.dispatchEvent({ type: 'start_inserting_profile', profile: profile }); this.scene.add(profile); let cancel = { callback: null }; let insertionCallback = (e) => { if(e.button === MOUSE.LEFT){ if(profile.points.length <= 1){ let camera = this.viewer.scene.getActiveCamera(); let distance = camera.position.distanceTo(profile.points[0]); let clientSize = this.viewer.renderer.getSize(new Vector2()); let pr = Utils.projectedRadius(1, camera, distance, clientSize.width, clientSize.height); let width = (10 / pr); profile.setWidth(width); } profile.addMarker(profile.points[profile.points.length - 1].clone()); this.viewer.inputHandler.startDragging( profile.spheres[profile.spheres.length - 1]); } else if (e.button === MOUSE.RIGHT) { cancel.callback(); } }; cancel.callback = e => { profile.removeMarker(profile.points.length - 1); domElement.removeEventListener('mouseup', insertionCallback, false); this.viewer.removeEventListener('cancel_insertions', cancel.callback); }; this.viewer.addEventListener('cancel_insertions', cancel.callback); domElement.addEventListener('mouseup', insertionCallback, false); profile.addMarker(new Vector3(0, 0, 0)); this.viewer.inputHandler.startDragging( profile.spheres[profile.spheres.length - 1]); this.viewer.scene.addProfile(profile); return profile; } update(){ let camera = this.viewer.scene.getActiveCamera(); let profiles = this.viewer.scene.profiles; let renderAreaSize = this.viewer.renderer.getSize(new Vector2()); let clientWidth = renderAreaSize.width; let clientHeight = renderAreaSize.height; this.light.position.copy(camera.position); // make size independant of distance for(let profile of profiles){ for(let sphere of profile.spheres){ let distance = camera.position.distanceTo(sphere.getWorldPosition(new Vector3())); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (15 / pr); sphere.scale.set(scale, scale, scale); } } } render(){ this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); } } class ScreenBoxSelectTool extends EventDispatcher{ constructor(viewer){ super(); this.viewer = viewer; this.scene = new Scene(); viewer.addEventListener("update", this.update.bind(this)); viewer.addEventListener("render.pass.perspective_overlay", this.render.bind(this)); viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); } onSceneChange(scene){ console.log("scene changed"); } startInsertion(){ let domElement = this.viewer.renderer.domElement; let volume = new BoxVolume(); volume.position.set(12345, 12345, 12345); volume.showVolumeLabel = false; volume.visible = false; volume.update(); this.viewer.scene.addVolume(volume); this.importance = 10; let selectionBox = $(`
      `); $(domElement.parentElement).append(selectionBox); selectionBox.css("right", "10px"); selectionBox.css("bottom", "10px"); let drag = e =>{ volume.visible = true; let mStart = e.drag.start; let mEnd = e.drag.end; let box2D = new Box2(); box2D.expandByPoint(mStart); box2D.expandByPoint(mEnd); selectionBox.css("left", `${box2D.min.x}px`); selectionBox.css("top", `${box2D.min.y}px`); selectionBox.css("width", `${box2D.max.x - box2D.min.x}px`); selectionBox.css("height", `${box2D.max.y - box2D.min.y}px`); let camera = e.viewer.scene.getActiveCamera(); let size = e.viewer.renderer.getSize(new Vector2()); let frustumSize = new Vector2( camera.right - camera.left, camera.top - camera.bottom); let screenCentroid = new Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5); let ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height); let diff = new Vector2().subVectors(e.drag.end, e.drag.start); diff.divide(size).multiply(frustumSize); volume.position.copy(ray.origin); volume.up.copy(camera.up); volume.rotation.copy(camera.rotation); volume.scale.set(diff.x, diff.y, 1000 * 100); e.consume(); }; let drop = e => { this.importance = 0; $(selectionBox).remove(); this.viewer.inputHandler.deselectAll(); this.viewer.inputHandler.toggleSelection(volume); let camera = e.viewer.scene.getActiveCamera(); let size = e.viewer.renderer.getSize(new Vector2()); let screenCentroid = new Vector2().addVectors(e.drag.end, e.drag.start).multiplyScalar(0.5); let ray = Utils.mouseToRay(screenCentroid, camera, size.width, size.height); let line = new Line3(ray.origin, new Vector3().addVectors(ray.origin, ray.direction)); this.removeEventListener("drag", drag); this.removeEventListener("drop", drop); let allPointsNear = []; let allPointsFar = []; // TODO support more than one point cloud for(let pointcloud of this.viewer.scene.pointclouds){ if(!pointcloud.visible){ continue; } let volCam = camera.clone(); volCam.left = -volume.scale.x / 2; volCam.right = +volume.scale.x / 2; volCam.top = +volume.scale.y / 2; volCam.bottom = -volume.scale.y / 2; volCam.near = -volume.scale.z / 2; volCam.far = +volume.scale.z / 2; volCam.rotation.copy(volume.rotation); volCam.position.copy(volume.position); volCam.updateMatrix(); volCam.updateMatrixWorld(); volCam.updateProjectionMatrix(); volCam.matrixWorldInverse.copy(volCam.matrixWorld).invert(); let ray = new Ray(volCam.getWorldPosition(new Vector3()), volCam.getWorldDirection(new Vector3())); let rayInverse = new Ray( ray.origin.clone().add(ray.direction.clone().multiplyScalar(volume.scale.z)), ray.direction.clone().multiplyScalar(-1)); let pickerSettings = { width: 8, height: 8, pickWindowSize: 8, all: true, pickClipped: true, pointSizeType: PointSizeType.FIXED, pointSize: 1}; let pointsNear = pointcloud.pick(viewer, volCam, ray, pickerSettings); volCam.rotateX(Math.PI); volCam.updateMatrix(); volCam.updateMatrixWorld(); volCam.updateProjectionMatrix(); volCam.matrixWorldInverse.copy(volCam.matrixWorld).invert(); let pointsFar = pointcloud.pick(viewer, volCam, rayInverse, pickerSettings); allPointsNear.push(...pointsNear); allPointsFar.push(...pointsFar); } if(allPointsNear.length > 0 && allPointsFar.length > 0){ let viewLine = new Line3(ray.origin, new Vector3().addVectors(ray.origin, ray.direction)); let closestOnLine = allPointsNear.map(p => viewLine.closestPointToPoint(p.position, false, new Vector3())); let closest = closestOnLine.sort( (a, b) => ray.origin.distanceTo(a) - ray.origin.distanceTo(b))[0]; let farthestOnLine = allPointsFar.map(p => viewLine.closestPointToPoint(p.position, false, new Vector3())); let farthest = farthestOnLine.sort( (a, b) => ray.origin.distanceTo(b) - ray.origin.distanceTo(a))[0]; let distance = closest.distanceTo(farthest); let centroid = new Vector3().addVectors(closest, farthest).multiplyScalar(0.5); volume.scale.z = distance * 1.1; volume.position.copy(centroid); } volume.clip = true; }; this.addEventListener("drag", drag); this.addEventListener("drop", drop); viewer.inputHandler.addInputListener(this); return volume; } update(e){ //console.log(e.delta) } render(){ this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); } } class SpotLightHelper$1 extends Object3D{ constructor(light, color){ super(); this.light = light; this.color = color; //this.up.set(0, 0, 1); this.updateMatrix(); this.updateMatrixWorld(); { // SPHERE let sg = new SphereGeometry(1, 32, 32); let sm = new MeshNormalMaterial(); this.sphere = new Mesh(sg, sm); this.sphere.scale.set(0.5, 0.5, 0.5); this.add(this.sphere); } { // LINES let positions = new Float32Array([ +0, +0, +0, +0, +0, -1, +0, +0, +0, -1, -1, -1, +0, +0, +0, +1, -1, -1, +0, +0, +0, +1, +1, -1, +0, +0, +0, -1, +1, -1, -1, -1, -1, +1, -1, -1, +1, -1, -1, +1, +1, -1, +1, +1, -1, -1, +1, -1, -1, +1, -1, -1, -1, -1, ]); let geometry = new BufferGeometry(); geometry.setAttribute("position", new BufferAttribute(positions, 3)); let material = new LineBasicMaterial(); this.frustum = new LineSegments(geometry, material); this.add(this.frustum); } this.update(); } update(){ this.light.updateMatrix(); this.light.updateMatrixWorld(); let position = this.light.position; let target = new Vector3().addVectors( this.light.position, this.light.getWorldDirection(new Vector3()).multiplyScalar(-1)); let quat = new Quaternion().setFromRotationMatrix( new Matrix4().lookAt( position, target, new Vector3( 0, 0, 1 ) ) ); this.setRotationFromQuaternion(quat); this.position.copy(position); let coneLength = (this.light.distance > 0) ? this.light.distance : 1000; let coneWidth = coneLength * Math.tan( this.light.angle * 0.5 ); this.frustum.scale.set(coneWidth, coneWidth, coneLength); } } class TransformationTool { constructor(viewer) { this.viewer = viewer; this.scene = new Scene(); this.selection = []; this.pivot = new Vector3(); this.dragging = false; this.showPickVolumes = false; this.viewer.inputHandler.registerInteractiveScene(this.scene); this.viewer.inputHandler.addEventListener('selection_changed', (e) => { for(let selected of this.selection){ this.viewer.inputHandler.blacklist.delete(selected); } this.selection = e.selection; for(let selected of this.selection){ this.viewer.inputHandler.blacklist.add(selected); } }); let red = 0xE73100; let green = 0x44A24A; let blue = 0x2669E7; this.activeHandle = null; this.scaleHandles = { "scale.x+": {name: "scale.x+", node: new Object3D(), color: red, alignment: [+1, +0, +0]}, "scale.x-": {name: "scale.x-", node: new Object3D(), color: red, alignment: [-1, +0, +0]}, "scale.y+": {name: "scale.y+", node: new Object3D(), color: green, alignment: [+0, +1, +0]}, "scale.y-": {name: "scale.y-", node: new Object3D(), color: green, alignment: [+0, -1, +0]}, "scale.z+": {name: "scale.z+", node: new Object3D(), color: blue, alignment: [+0, +0, +1]}, "scale.z-": {name: "scale.z-", node: new Object3D(), color: blue, alignment: [+0, +0, -1]}, }; this.focusHandles = { "focus.x+": {name: "focus.x+", node: new Object3D(), color: red, alignment: [+1, +0, +0]}, "focus.x-": {name: "focus.x-", node: new Object3D(), color: red, alignment: [-1, +0, +0]}, "focus.y+": {name: "focus.y+", node: new Object3D(), color: green, alignment: [+0, +1, +0]}, "focus.y-": {name: "focus.y-", node: new Object3D(), color: green, alignment: [+0, -1, +0]}, "focus.z+": {name: "focus.z+", node: new Object3D(), color: blue, alignment: [+0, +0, +1]}, "focus.z-": {name: "focus.z-", node: new Object3D(), color: blue, alignment: [+0, +0, -1]}, }; this.translationHandles = { "translation.x": {name: "translation.x", node: new Object3D(), color: red, alignment: [1, 0, 0]}, "translation.y": {name: "translation.y", node: new Object3D(), color: green, alignment: [0, 1, 0]}, "translation.z": {name: "translation.z", node: new Object3D(), color: blue, alignment: [0, 0, 1]}, }; this.rotationHandles = { "rotation.x": {name: "rotation.x", node: new Object3D(), color: red, alignment: [1, 0, 0]}, "rotation.y": {name: "rotation.y", node: new Object3D(), color: green, alignment: [0, 1, 0]}, "rotation.z": {name: "rotation.z", node: new Object3D(), color: blue, alignment: [0, 0, 1]}, }; this.handles = Object.assign({}, this.scaleHandles, this.focusHandles, this.translationHandles, this.rotationHandles); this.pickVolumes = []; this.initializeScaleHandles(); this.initializeFocusHandles(); this.initializeTranslationHandles(); this.initializeRotationHandles(); let boxFrameGeometry = new Geometry(); { // bottom boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); // top boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); // sides boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, 0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(0.5, 0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, -0.5, -0.5)); boxFrameGeometry.vertices.push(new Vector3(-0.5, 0.5, -0.5)); } this.frame = new LineSegments(boxFrameGeometry, new LineBasicMaterial({color: 0xffff00})); this.scene.add(this.frame); } initializeScaleHandles(){ let sgSphere = new SphereGeometry(1, 32, 32); let sgLowPolySphere = new SphereGeometry(1, 16, 16); for(let handleName of Object.keys(this.scaleHandles)){ let handle = this.scaleHandles[handleName]; let node = handle.node; this.scene.add(node); node.position.set(...handle.alignment).multiplyScalar(0.5); let material = new MeshBasicMaterial({ color: handle.color, opacity: 0.4, transparent: true }); let outlineMaterial = new MeshBasicMaterial({ color: 0x000000, side: BackSide, opacity: 0.4, transparent: true}); let pickMaterial = new MeshNormalMaterial({ opacity: 0.2, transparent: true, visible: this.showPickVolumes}); let sphere = new Mesh(sgSphere, material); sphere.scale.set(1.3, 1.3, 1.3); sphere.name = `${handleName}.handle`; node.add(sphere); let outline = new Mesh(sgSphere, outlineMaterial); outline.scale.set(1.4, 1.4, 1.4); outline.name = `${handleName}.outline`; sphere.add(outline); let pickSphere = new Mesh(sgLowPolySphere, pickMaterial); pickSphere.name = `${handleName}.pick_volume`; pickSphere.scale.set(3, 3, 3); sphere.add(pickSphere); pickSphere.handle = handleName; this.pickVolumes.push(pickSphere); node.setOpacity = (target) => { let opacity = {x: material.opacity}; let t = new TWEEN.Tween(opacity).to({x: target}, 100); t.onUpdate(() => { sphere.visible = opacity.x > 0; pickSphere.visible = opacity.x > 0; material.opacity = opacity.x; outlineMaterial.opacity = opacity.x; pickSphere.material.opacity = opacity.x * 0.5; }); t.start(); }; pickSphere.addEventListener("drag", (e) => this.dragScaleHandle(e)); pickSphere.addEventListener("drop", (e) => this.dropScaleHandle(e)); pickSphere.addEventListener("mouseover", e => { //node.setOpacity(1); }); pickSphere.addEventListener("click", e => { e.consume(); }); pickSphere.addEventListener("mouseleave", e => { //node.setOpacity(0.4); }); } } initializeFocusHandles(){ //let sgBox = new THREE.BoxGeometry(1, 1, 1); let sgPlane = new PlaneGeometry(4, 4, 1, 1); let sgLowPolySphere = new SphereGeometry(1, 16, 16); let texture = new TextureLoader().load(`${exports.resourcePath}/icons/eye_2.png`); for(let handleName of Object.keys(this.focusHandles)){ let handle = this.focusHandles[handleName]; let node = handle.node; this.scene.add(node); let align = handle.alignment; //node.lookAt(new THREE.Vector3().addVectors(node.position, new THREE.Vector3(...align))); node.lookAt(new Vector3(...align)); let off = 0.8; if(align[0] === 1){ node.position.set(1, off, -off).multiplyScalar(0.5); node.rotation.z = Math.PI / 2; }else if(align[0] === -1){ node.position.set(-1, -off, -off).multiplyScalar(0.5); node.rotation.z = Math.PI / 2; }else if(align[1] === 1){ node.position.set(-off, 1, -off).multiplyScalar(0.5); node.rotation.set(Math.PI / 2, Math.PI, 0.0); }else if(align[1] === -1){ node.position.set(off, -1, -off).multiplyScalar(0.5); node.rotation.set(Math.PI / 2, 0.0, 0.0); }else if(align[2] === 1){ node.position.set(off, off, 1).multiplyScalar(0.5); }else if(align[2] === -1){ node.position.set(-off, off, -1).multiplyScalar(0.5); } let material = new MeshBasicMaterial({ color: handle.color, opacity: 0, transparent: true, map: texture }); //let outlineMaterial = new THREE.MeshBasicMaterial({ // color: 0x000000, // side: THREE.BackSide, // opacity: 0, // transparent: true}); let pickMaterial = new MeshNormalMaterial({ //opacity: 0, transparent: true, visible: this.showPickVolumes}); let box = new Mesh(sgPlane, material); box.name = `${handleName}.handle`; box.scale.set(1.5, 1.5, 1.5); box.position.set(0, 0, 0); box.visible = false; node.add(box); //handle.focusNode = box; //let outline = new THREE.Mesh(sgPlane, outlineMaterial); //outline.scale.set(1.4, 1.4, 1.4); //outline.name = `${handleName}.outline`; //box.add(outline); let pickSphere = new Mesh(sgLowPolySphere, pickMaterial); pickSphere.name = `${handleName}.pick_volume`; pickSphere.scale.set(3, 3, 3); box.add(pickSphere); pickSphere.handle = handleName; this.pickVolumes.push(pickSphere); node.setOpacity = (target) => { let opacity = {x: material.opacity}; let t = new TWEEN.Tween(opacity).to({x: target}, 100); t.onUpdate(() => { pickSphere.visible = opacity.x > 0; box.visible = opacity.x > 0; material.opacity = opacity.x; //outlineMaterial.opacity = opacity.x; pickSphere.material.opacity = opacity.x * 0.5; }); t.start(); }; pickSphere.addEventListener("drag", e => {}); pickSphere.addEventListener("mouseup", e => { e.consume(); }); pickSphere.addEventListener("mousedown", e => { e.consume(); }); pickSphere.addEventListener("click", e => { e.consume(); let selected = this.selection[0]; let maxScale = Math.max(...selected.scale.toArray()); let minScale = Math.min(...selected.scale.toArray()); let handleLength = Math.abs(selected.scale.dot(new Vector3(...handle.alignment))); let alignment = new Vector3(...handle.alignment).multiplyScalar(2 * maxScale / handleLength); alignment.applyMatrix4(selected.matrixWorld); let newCamPos = alignment; let newCamTarget = selected.getWorldPosition(new Vector3()); Utils.moveTo(this.viewer.scene, newCamPos, newCamTarget); }); pickSphere.addEventListener("mouseover", e => { //box.setOpacity(1); }); pickSphere.addEventListener("mouseleave", e => { //box.setOpacity(0.4); }); } } initializeTranslationHandles(){ let boxGeometry = new BoxGeometry(1, 1, 1); for(let handleName of Object.keys(this.translationHandles)){ let handle = this.handles[handleName]; let node = handle.node; this.scene.add(node); let material = new MeshBasicMaterial({ color: handle.color, opacity: 0.4, transparent: true}); let outlineMaterial = new MeshBasicMaterial({ color: 0x000000, side: BackSide, opacity: 0.4, transparent: true}); let pickMaterial = new MeshNormalMaterial({ opacity: 0.2, transparent: true, visible: this.showPickVolumes }); let box = new Mesh(boxGeometry, material); box.name = `${handleName}.handle`; box.scale.set(0.2, 0.2, 40); box.lookAt(new Vector3(...handle.alignment)); box.renderOrder = 10; node.add(box); handle.translateNode = box; let outline = new Mesh(boxGeometry, outlineMaterial); outline.name = `${handleName}.outline`; outline.scale.set(3, 3, 1.03); outline.renderOrder = 0; box.add(outline); let pickVolume = new Mesh(boxGeometry, pickMaterial); pickVolume.name = `${handleName}.pick_volume`; pickVolume.scale.set(12, 12, 1.1); pickVolume.handle = handleName; box.add(pickVolume); this.pickVolumes.push(pickVolume); node.setOpacity = (target) => { let opacity = {x: material.opacity}; let t = new TWEEN.Tween(opacity).to({x: target}, 100); t.onUpdate(() => { box.visible = opacity.x > 0; pickVolume.visible = opacity.x > 0; material.opacity = opacity.x; outlineMaterial.opacity = opacity.x; pickMaterial.opacity = opacity.x * 0.5; }); t.start(); }; pickVolume.addEventListener("drag", (e) => {this.dragTranslationHandle(e);}); pickVolume.addEventListener("drop", (e) => {this.dropTranslationHandle(e);}); } } initializeRotationHandles(){ let adjust = 0.5; let torusGeometry = new TorusGeometry(1, adjust * 0.015, 8, 64, Math.PI / 2); let outlineGeometry = new TorusGeometry(1, adjust * 0.04, 8, 64, Math.PI / 2); let pickGeometry = new TorusGeometry(1, adjust * 0.1, 6, 4, Math.PI / 2); for(let handleName of Object.keys(this.rotationHandles)){ let handle = this.handles[handleName]; let node = handle.node; this.scene.add(node); let material = new MeshBasicMaterial({ color: handle.color, opacity: 0.4, transparent: true}); let outlineMaterial = new MeshBasicMaterial({ color: 0x000000, side: BackSide, opacity: 0.4, transparent: true}); let pickMaterial = new MeshNormalMaterial({ opacity: 0.2, transparent: true, visible: this.showPickVolumes }); let box = new Mesh(torusGeometry, material); box.name = `${handleName}.handle`; box.scale.set(20, 20, 20); box.lookAt(new Vector3(...handle.alignment)); node.add(box); handle.translateNode = box; let outline = new Mesh(outlineGeometry, outlineMaterial); outline.name = `${handleName}.outline`; outline.scale.set(1, 1, 1); outline.renderOrder = 0; box.add(outline); let pickVolume = new Mesh(pickGeometry, pickMaterial); pickVolume.name = `${handleName}.pick_volume`; pickVolume.scale.set(1, 1, 1); pickVolume.handle = handleName; box.add(pickVolume); this.pickVolumes.push(pickVolume); node.setOpacity = (target) => { let opacity = {x: material.opacity}; let t = new TWEEN.Tween(opacity).to({x: target}, 100); t.onUpdate(() => { box.visible = opacity.x > 0; pickVolume.visible = opacity.x > 0; material.opacity = opacity.x; outlineMaterial.opacity = opacity.x; pickMaterial.opacity = opacity.x * 0.5; }); t.start(); }; //pickVolume.addEventListener("mouseover", (e) => { // //let a = this.viewer.scene.getActiveCamera().getWorldDirection(new THREE.Vector3()).dot(pickVolume.getWorldDirection(new THREE.Vector3())); // console.log(pickVolume.getWorldDirection(new THREE.Vector3())); //}); pickVolume.addEventListener("drag", (e) => {this.dragRotationHandle(e);}); pickVolume.addEventListener("drop", (e) => {this.dropRotationHandle(e);}); } } dragRotationHandle(e){ let drag = e.drag; let handle = this.activeHandle; let camera = this.viewer.scene.getActiveCamera(); if(!handle){ return }; let localNormal = new Vector3(...handle.alignment); let n = new Vector3(); n.copy(new Vector4(...localNormal.toArray(), 0).applyMatrix4(handle.node.matrixWorld)); n.normalize(); if (!drag.intersectionStart){ //this.viewer.scene.scene.remove(this.debug); //this.debug = new THREE.Object3D(); //this.viewer.scene.scene.add(this.debug); //Utils.debugSphere(this.debug, drag.location, 3, 0xaaaaaa); //let debugEnd = drag.location.clone().add(n.clone().multiplyScalar(20)); //Utils.debugLine(this.debug, drag.location, debugEnd, 0xff0000); drag.intersectionStart = drag.location; drag.objectStart = drag.object.getWorldPosition(new Vector3()); drag.handle = handle; let plane = new Plane().setFromNormalAndCoplanarPoint(n, drag.intersectionStart); drag.dragPlane = plane; drag.pivot = drag.intersectionStart; }else { handle = drag.handle; } this.dragging = true; let mouse = drag.end; let domElement = this.viewer.renderer.domElement; let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let I = ray.intersectPlane(drag.dragPlane, new Vector3()); if (I) { let center = this.scene.getWorldPosition(new Vector3()); let from = drag.pivot; let to = I; let v1 = from.clone().sub(center).normalize(); let v2 = to.clone().sub(center).normalize(); let angle = Math.acos(v1.dot(v2)); let sign = Math.sign(v1.cross(v2).dot(n)); angle = angle * sign; if (Number.isNaN(angle)) { return; } let normal = new Vector3(...handle.alignment); for (let selection of this.selection) { selection.rotateOnAxis(normal, angle); selection.dispatchEvent({ type: "orientation_changed", object: selection }); } drag.pivot = I; } } dropRotationHandle(e){ this.dragging = false; this.setActiveHandle(null); } dragTranslationHandle(e){ let drag = e.drag; let handle = this.activeHandle; let camera = this.viewer.scene.getActiveCamera(); if(!drag.intersectionStart && handle){ drag.intersectionStart = drag.location; drag.objectStart = drag.object.getWorldPosition(new Vector3()); let start = drag.intersectionStart; let dir = new Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld); let end = new Vector3().addVectors(start, dir); let line = new Line3(start.clone(), end.clone()); drag.line = line; let camOnLine = line.closestPointToPoint(camera.position, false, new Vector3()); let normal = new Vector3().subVectors(camera.position, camOnLine); let plane = new Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart); drag.dragPlane = plane; drag.pivot = drag.intersectionStart; }else { handle = drag.handle; } this.dragging = true; { let mouse = drag.end; let domElement = this.viewer.renderer.domElement; let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let I = ray.intersectPlane(drag.dragPlane, new Vector3()); if (I) { let iOnLine = drag.line.closestPointToPoint(I, false, new Vector3()); let diff = new Vector3().subVectors(iOnLine, drag.pivot); for (let selection of this.selection) { selection.position.add(diff); selection.dispatchEvent({ type: "position_changed", object: selection }); } drag.pivot = drag.pivot.add(diff); } } } dropTranslationHandle(e){ this.dragging = false; this.setActiveHandle(null); } dropScaleHandle(e){ this.dragging = false; this.setActiveHandle(null); } dragScaleHandle(e){ let drag = e.drag; let handle = this.activeHandle; let camera = this.viewer.scene.getActiveCamera(); if(!drag.intersectionStart){ drag.intersectionStart = drag.location; drag.objectStart = drag.object.getWorldPosition(new Vector3()); drag.handle = handle; let start = drag.intersectionStart; let dir = new Vector4(...handle.alignment, 0).applyMatrix4(this.scene.matrixWorld); let end = new Vector3().addVectors(start, dir); let line = new Line3(start.clone(), end.clone()); drag.line = line; let camOnLine = line.closestPointToPoint(camera.position, false, new Vector3()); let normal = new Vector3().subVectors(camera.position, camOnLine); let plane = new Plane().setFromNormalAndCoplanarPoint(normal, drag.intersectionStart); drag.dragPlane = plane; drag.pivot = drag.intersectionStart; //Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05); }else { handle = drag.handle; } this.dragging = true; { let mouse = drag.end; let domElement = this.viewer.renderer.domElement; let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let I = ray.intersectPlane(drag.dragPlane, new Vector3()); if (I) { let iOnLine = drag.line.closestPointToPoint(I, false, new Vector3()); let direction = handle.alignment.reduce( (a, v) => a + v, 0); let toObjectSpace = this.selection[0].matrixWorld.clone().invert(); let iOnLineOS = iOnLine.clone().applyMatrix4(toObjectSpace); let pivotOS = drag.pivot.clone().applyMatrix4(toObjectSpace); let diffOS = new Vector3().subVectors(iOnLineOS, pivotOS); let dragDirectionOS = diffOS.clone().normalize(); if(iOnLine.distanceTo(drag.pivot) === 0){ dragDirectionOS.set(0, 0, 0); } let dragDirection = dragDirectionOS.dot(new Vector3(...handle.alignment)); let diff = new Vector3().subVectors(iOnLine, drag.pivot); let diffScale = new Vector3(...handle.alignment).multiplyScalar(diff.length() * direction * dragDirection); let diffPosition = diff.clone().multiplyScalar(0.5); for (let selection of this.selection) { selection.scale.add(diffScale); selection.scale.x = Math.max(0.1, selection.scale.x); selection.scale.y = Math.max(0.1, selection.scale.y); selection.scale.z = Math.max(0.1, selection.scale.z); selection.position.add(diffPosition); selection.dispatchEvent({ type: "position_changed", object: selection }); selection.dispatchEvent({ type: "scale_changed", object: selection }); } drag.pivot.copy(iOnLine); //Utils.debugSphere(viewer.scene.scene, drag.pivot, 0.05); } } } setActiveHandle(handle){ if(this.dragging){ return; } if(this.activeHandle === handle){ return; } this.activeHandle = handle; if(handle === null){ for(let handleName of Object.keys(this.handles)){ let handle = this.handles[handleName]; handle.node.setOpacity(0); } } for(let handleName of Object.keys(this.focusHandles)){ let handle = this.focusHandles[handleName]; if(this.activeHandle === handle){ handle.node.setOpacity(1.0); }else { handle.node.setOpacity(0.4); } } for(let handleName of Object.keys(this.translationHandles)){ let handle = this.translationHandles[handleName]; if(this.activeHandle === handle){ handle.node.setOpacity(1.0); }else { handle.node.setOpacity(0.4); } } for(let handleName of Object.keys(this.rotationHandles)){ let handle = this.rotationHandles[handleName]; //if(this.activeHandle === handle){ // handle.node.setOpacity(1.0); //}else{ // handle.node.setOpacity(0.4) //} handle.node.setOpacity(0.4); } for(let handleName of Object.keys(this.scaleHandles)){ let handle = this.scaleHandles[handleName]; if(this.activeHandle === handle){ handle.node.setOpacity(1.0); let relatedFocusHandle = this.focusHandles[handle.name.replace("scale", "focus")]; let relatedFocusNode = relatedFocusHandle.node; relatedFocusNode.setOpacity(0.4); for(let translationHandleName of Object.keys(this.translationHandles)){ let translationHandle = this.translationHandles[translationHandleName]; translationHandle.node.setOpacity(0.4); } //let relatedTranslationHandle = this.translationHandles[ // handle.name.replace("scale", "translation").replace(/[+-]/g, "")]; //let relatedTranslationNode = relatedTranslationHandle.node; //relatedTranslationNode.setOpacity(0.4); }else { handle.node.setOpacity(0.4); } } if(handle){ handle.node.setOpacity(1.0); } } update () { if(this.selection.length === 1){ this.scene.visible = true; this.scene.updateMatrix(); this.scene.updateMatrixWorld(); let selected = this.selection[0]; let world = selected.matrixWorld; let camera = this.viewer.scene.getActiveCamera(); let domElement = this.viewer.renderer.domElement; let mouse = this.viewer.inputHandler.mouse; let center = selected.boundingBox.getCenter(new Vector3()).clone().applyMatrix4(selected.matrixWorld); this.scene.scale.copy(selected.boundingBox.getSize(new Vector3()).multiply(selected.scale)); this.scene.position.copy(center); this.scene.rotation.copy(selected.rotation); this.scene.updateMatrixWorld(); { // adjust scale of components for(let handleName of Object.keys(this.handles)){ let handle = this.handles[handleName]; let node = handle.node; let handlePos = node.getWorldPosition(new Vector3()); let distance = handlePos.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight); let ws = node.parent.getWorldScale(new Vector3()); let s = (7 / pr); let scale = new Vector3(s, s, s).divide(ws); let rot = new Matrix4().makeRotationFromEuler(node.rotation); let rotInv = rot.clone().invert(); scale.applyMatrix4(rotInv); scale.x = Math.abs(scale.x); scale.y = Math.abs(scale.y); scale.z = Math.abs(scale.z); node.scale.copy(scale); } // adjust rotation handles if(!this.dragging){ let tWorld = this.scene.matrixWorld; let tObject = tWorld.clone().invert(); let camObjectPos = camera.getWorldPosition(new Vector3()).applyMatrix4(tObject); let x = this.rotationHandles["rotation.x"].node.rotation; let y = this.rotationHandles["rotation.y"].node.rotation; let z = this.rotationHandles["rotation.z"].node.rotation; x.order = "ZYX"; y.order = "ZYX"; let above = camObjectPos.z > 0; let below = !above; let PI_HALF = Math.PI / 2; if(above){ if(camObjectPos.x > 0 && camObjectPos.y > 0){ x.x = 1 * PI_HALF; y.y = 3 * PI_HALF; z.z = 0 * PI_HALF; }else if(camObjectPos.x < 0 && camObjectPos.y > 0){ x.x = 1 * PI_HALF; y.y = 2 * PI_HALF; z.z = 1 * PI_HALF; }else if(camObjectPos.x < 0 && camObjectPos.y < 0){ x.x = 2 * PI_HALF; y.y = 2 * PI_HALF; z.z = 2 * PI_HALF; }else if(camObjectPos.x > 0 && camObjectPos.y < 0){ x.x = 2 * PI_HALF; y.y = 3 * PI_HALF; z.z = 3 * PI_HALF; } }else if(below){ if(camObjectPos.x > 0 && camObjectPos.y > 0){ x.x = 0 * PI_HALF; y.y = 0 * PI_HALF; z.z = 0 * PI_HALF; }else if(camObjectPos.x < 0 && camObjectPos.y > 0){ x.x = 0 * PI_HALF; y.y = 1 * PI_HALF; z.z = 1 * PI_HALF; }else if(camObjectPos.x < 0 && camObjectPos.y < 0){ x.x = 3 * PI_HALF; y.y = 1 * PI_HALF; z.z = 2 * PI_HALF; }else if(camObjectPos.x > 0 && camObjectPos.y < 0){ x.x = 3 * PI_HALF; y.y = 0 * PI_HALF; z.z = 3 * PI_HALF; } } } { let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let raycaster = new Raycaster(ray.origin, ray.direction); let intersects = raycaster.intersectObjects(this.pickVolumes.filter(v => v.visible), true); if(intersects.length > 0){ let I = intersects[0]; let handleName = I.object.handle; this.setActiveHandle(this.handles[handleName]); }else { this.setActiveHandle(null); } } // for(let handleName of Object.keys(this.scaleHandles)){ let handle = this.handles[handleName]; let node = handle.node; let alignment = handle.alignment; } } }else { this.scene.visible = false; } } }; class VolumeTool extends EventDispatcher{ constructor (viewer) { super(); this.viewer = viewer; this.renderer = viewer.renderer; this.addEventListener('start_inserting_volume', e => { this.viewer.dispatchEvent({ type: 'cancel_insertions' }); }); this.scene = new Scene(); this.scene.name = 'scene_volume'; this.viewer.inputHandler.registerInteractiveScene(this.scene); this.onRemove = e => { this.scene.remove(e.volume); }; this.onAdd = e => { this.scene.add(e.volume); }; for(let volume of viewer.scene.volumes){ this.onAdd({volume: volume}); } this.viewer.inputHandler.addEventListener('delete', e => { let volumes = e.selection.filter(e => (e instanceof Volume)); volumes.forEach(e => this.viewer.scene.removeVolume(e)); }); viewer.addEventListener("update", this.update.bind(this)); viewer.addEventListener("render.pass.scene", e => this.render(e)); viewer.addEventListener("scene_changed", this.onSceneChange.bind(this)); viewer.scene.addEventListener('volume_added', this.onAdd); viewer.scene.addEventListener('volume_removed', this.onRemove); } onSceneChange(e){ if(e.oldScene){ e.oldScene.removeEventListeners('volume_added', this.onAdd); e.oldScene.removeEventListeners('volume_removed', this.onRemove); } e.scene.addEventListener('volume_added', this.onAdd); e.scene.addEventListener('volume_removed', this.onRemove); } startInsertion (args = {}) { let volume; if(args.type){ volume = new args.type(); }else { volume = new BoxVolume(); } volume.clip = args.clip || false; volume.name = args.name || 'Volume'; this.dispatchEvent({ type: 'start_inserting_volume', volume: volume }); this.viewer.scene.addVolume(volume); this.scene.add(volume); let cancel = { callback: null }; let drag = e => { let camera = this.viewer.scene.getActiveCamera(); let I = Utils.getMousePointCloudIntersection( e.drag.end, this.viewer.scene.getActiveCamera(), this.viewer, this.viewer.scene.pointclouds, {pickClipped: false}); if (I) { volume.position.copy(I.location); let wp = volume.getWorldPosition(new Vector3()).applyMatrix4(camera.matrixWorldInverse); // let pp = new THREE.Vector4(wp.x, wp.y, wp.z).applyMatrix4(camera.projectionMatrix); let w = Math.abs((wp.z / 5)); volume.scale.set(w, w, w); } }; let drop = e => { volume.removeEventListener('drag', drag); volume.removeEventListener('drop', drop); cancel.callback(); }; cancel.callback = e => { volume.removeEventListener('drag', drag); volume.removeEventListener('drop', drop); this.viewer.removeEventListener('cancel_insertions', cancel.callback); }; volume.addEventListener('drag', drag); volume.addEventListener('drop', drop); this.viewer.addEventListener('cancel_insertions', cancel.callback); this.viewer.inputHandler.startDragging(volume); return volume; } update(){ if (!this.viewer.scene) { return; } let camera = this.viewer.scene.getActiveCamera(); let renderAreaSize = this.viewer.renderer.getSize(new Vector2()); let clientWidth = renderAreaSize.width; let clientHeight = renderAreaSize.height; let volumes = this.viewer.scene.volumes; for (let volume of volumes) { let label = volume.label; { let distance = label.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, clientWidth, clientHeight); let scale = (70 / pr); label.scale.set(scale, scale, scale); } let calculatedVolume = volume.getVolume(); calculatedVolume = calculatedVolume / Math.pow(this.viewer.lengthUnit.unitspermeter, 3) * Math.pow(this.viewer.lengthUnitDisplay.unitspermeter, 3); //convert to cubic meters then to the cubic display unit let text = Utils.addCommas(calculatedVolume.toFixed(3)) + ' ' + this.viewer.lengthUnitDisplay.code + '\u00B3'; label.setText(text); } } render(params){ const renderer = this.viewer.renderer; const oldTarget = renderer.getRenderTarget(); if(params.renderTarget){ renderer.setRenderTarget(params.renderTarget); } renderer.render(this.scene, this.viewer.scene.getActiveCamera()); renderer.setRenderTarget(oldTarget); } } class Compass{ constructor(viewer){ this.viewer = viewer; this.visible = false; this.dom = this.createElement(); viewer.addEventListener("update", () => { const direction = viewer.scene.view.direction.clone(); direction.z = 0; direction.normalize(); const camera = viewer.scene.getActiveCamera(); const p1 = camera.getWorldPosition(new Vector3()); const p2 = p1.clone().add(direction); const projection = viewer.getProjection(); const azimuth = Utils.computeAzimuth(p1, p2, projection); this.dom.css("transform", `rotateZ(${-azimuth}rad)`); }); this.dom.click( () => { viewer.setTopView(); }); const renderArea = $(viewer.renderArea); renderArea.append(this.dom); this.setVisible(this.visible); } setVisible(visible){ this.visible = visible; const value = visible ? "" : "none"; this.dom.css("display", value); } isVisible(){ return this.visible; } createElement(){ const style = `style="position: absolute; top: 10px; right: 10px; z-index: 10000; width: 64px;"`; const img = $(``); return img; } }; class PotreeRenderer { constructor (viewer) { this.viewer = viewer; this.renderer = viewer.renderer; { let dummyScene = new Scene(); let geometry = new SphereGeometry(0.001, 2, 2); let mesh = new Mesh(geometry, new MeshBasicMaterial()); mesh.position.set(36453, 35163, 764712); dummyScene.add(mesh); this.dummyMesh = mesh; this.dummyScene = dummyScene; } } clearTargets(){ } clear(){ let {viewer, renderer} = this; // render skybox if(viewer.background === "skybox"){ renderer.setClearColor(0xff0000, 1); }else if(viewer.background === "gradient"){ renderer.setClearColor(0x00ff00, 1); }else if(viewer.background === "black"){ renderer.setClearColor(0x000000, 1); }else if(viewer.background === "white"){ renderer.setClearColor(0xFFFFFF, 1); }else { renderer.setClearColor(0x000000, 0); } renderer.clear(); } render(params){ let {viewer, renderer} = this; const camera = params.camera ? params.camera : viewer.scene.getActiveCamera(); viewer.dispatchEvent({type: "render.pass.begin",viewer: viewer}); const renderAreaSize = renderer.getSize(new Vector2()); const width = params.viewport ? params.viewport[2] : renderAreaSize.x; const height = params.viewport ? params.viewport[3] : renderAreaSize.y; // render skybox if(viewer.background === "skybox"){ viewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation); viewer.skybox.camera.fov = viewer.scene.cameraP.fov; viewer.skybox.camera.aspect = viewer.scene.cameraP.aspect; viewer.skybox.parent.rotation.x = 0; viewer.skybox.parent.updateMatrixWorld(); viewer.skybox.camera.updateProjectionMatrix(); renderer.render(viewer.skybox.scene, viewer.skybox.camera); }else if(viewer.background === "gradient"){ renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG); } for(let pointcloud of this.viewer.scene.pointclouds){ const {material} = pointcloud; material.useEDL = false; } viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, null, { clipSpheres: viewer.scene.volumes.filter(v => (v instanceof Potree.SphereVolume)), }); // render scene renderer.render(viewer.scene.scene, camera); viewer.dispatchEvent({type: "render.pass.scene",viewer: viewer}); viewer.clippingTool.update(); renderer.render(viewer.clippingTool.sceneMarker, viewer.scene.cameraScreenSpace); //viewer.scene.cameraScreenSpace); renderer.render(viewer.clippingTool.sceneVolume, camera); renderer.render(viewer.controls.sceneControls, camera); renderer.clearDepth(); viewer.transformationTool.update(); viewer.dispatchEvent({type: "render.pass.perspective_overlay",viewer: viewer}); // renderer.render(viewer.controls.sceneControls, camera); // renderer.render(viewer.clippingTool.sceneVolume, camera); // renderer.render(viewer.transformationTool.scene, camera); // renderer.setViewport(width - viewer.navigationCube.width, // height - viewer.navigationCube.width, // viewer.navigationCube.width, viewer.navigationCube.width); // renderer.render(viewer.navigationCube, viewer.navigationCube.camera); // renderer.setViewport(0, 0, width, height); viewer.dispatchEvent({type: "render.pass.end",viewer: viewer}); } } class EDLRenderer{ constructor(viewer){ this.viewer = viewer; this.edlMaterial = null; this.rtRegular; this.rtEDL; this.gl = viewer.renderer.getContext(); this.shadowMap = new PointCloudSM(this.viewer.pRenderer); } initEDL(){ if (this.edlMaterial != null) { return; } this.edlMaterial = new EyeDomeLightingMaterial(); this.edlMaterial.depthTest = true; this.edlMaterial.depthWrite = true; this.edlMaterial.transparent = true; this.rtEDL = new WebGLRenderTarget(1024, 1024, { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat, type: FloatType, depthTexture: new DepthTexture(undefined, undefined, UnsignedIntType) }); this.rtRegular = new WebGLRenderTarget(1024, 1024, { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat, depthTexture: new DepthTexture(undefined, undefined, UnsignedIntType) }); }; resize(width, height){ if(this.screenshot){ width = this.screenshot.target.width; height = this.screenshot.target.height; } this.rtEDL.setSize(width , height); this.rtRegular.setSize(width , height); } makeScreenshot(camera, size, callback){ if(camera === undefined || camera === null){ camera = this.viewer.scene.getActiveCamera(); } if(size === undefined || size === null){ size = this.viewer.renderer.getSize(new Vector2()); } let {width, height} = size; //let maxTextureSize = viewer.renderer.capabilities.maxTextureSize; //if(width * 4 < width = 2 * width; height = 2 * height; let target = new WebGLRenderTarget(width, height, { format: RGBAFormat, }); this.screenshot = { target: target }; // HACK? removed because of error, was this important? //this.viewer.renderer.clearTarget(target, true, true, true); this.render(); let pixelCount = width * height; let buffer = new Uint8Array(4 * pixelCount); this.viewer.renderer.readRenderTargetPixels(target, 0, 0, width, height, buffer); // flip vertically let bytesPerLine = width * 4; for(let i = 0; i < parseInt(height / 2); i++){ let j = height - i - 1; let lineI = buffer.slice(i * bytesPerLine, i * bytesPerLine + bytesPerLine); let lineJ = buffer.slice(j * bytesPerLine, j * bytesPerLine + bytesPerLine); buffer.set(lineJ, i * bytesPerLine); buffer.set(lineI, j * bytesPerLine); } this.screenshot.target.dispose(); delete this.screenshot; return { width: width, height: height, buffer: buffer }; } clearTargets(){ const viewer = this.viewer; const {renderer} = viewer; const oldTarget = renderer.getRenderTarget(); renderer.setRenderTarget( this.rtEDL ); renderer.clear( true, true, true ); renderer.setRenderTarget( this.rtRegular ); renderer.clear( true, true, false ); renderer.setRenderTarget(oldTarget); } clear(){ this.initEDL(); const viewer = this.viewer; const {renderer, background} = viewer; if(background === "skybox"){ renderer.setClearColor(0x000000, 0); } else if (background === 'gradient') { renderer.setClearColor(0x000000, 0); } else if (background === 'black') { renderer.setClearColor(0x000000, 1); } else if (background === 'white') { renderer.setClearColor(0xFFFFFF, 1); } else { renderer.setClearColor(0x000000, 0); } renderer.clear(); this.clearTargets(); } renderShadowMap(visiblePointClouds, camera, lights){ const {viewer} = this; const doShadows = lights.length > 0 && !(lights[0].disableShadowUpdates); if(doShadows){ let light = lights[0]; this.shadowMap.setLight(light); let originalAttributes = new Map(); for(let pointcloud of viewer.scene.pointclouds){ // TODO IMPORTANT !!! check originalAttributes.set(pointcloud, pointcloud.material.activeAttributeName); pointcloud.material.disableEvents(); pointcloud.material.activeAttributeName = "depth"; //pointcloud.material.pointColorType = PointColorType.DEPTH; } this.shadowMap.render(viewer.scene.scenePointCloud, camera); for(let pointcloud of visiblePointClouds){ let originalAttribute = originalAttributes.get(pointcloud); // TODO IMPORTANT !!! check pointcloud.material.activeAttributeName = originalAttribute; pointcloud.material.enableEvents(); } viewer.shadowTestCam.updateMatrixWorld(); viewer.shadowTestCam.matrixWorldInverse.copy(viewer.shadowTestCam.matrixWorld).invert(); viewer.shadowTestCam.updateProjectionMatrix(); } } render(params){ this.initEDL(); const viewer = this.viewer; let camera = params.camera ? params.camera : viewer.scene.getActiveCamera(); const {width, height} = this.viewer.renderer.getSize(new Vector2()); viewer.dispatchEvent({type: "render.pass.begin",viewer: viewer}); this.resize(width, height); const visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible); if(this.screenshot){ let oldBudget = Potree.pointBudget; Potree.pointBudget = Math.max(10 * 1000 * 1000, 2 * oldBudget); let result = Potree.updatePointClouds( viewer.scene.pointclouds, camera, viewer.renderer); Potree.pointBudget = oldBudget; } let lights = []; viewer.scene.scene.traverse(node => { if(node.type === "SpotLight"){ lights.push(node); } }); if(viewer.background === "skybox"){ viewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation); viewer.skybox.camera.fov = viewer.scene.cameraP.fov; viewer.skybox.camera.aspect = viewer.scene.cameraP.aspect; viewer.skybox.parent.rotation.x = 0; viewer.skybox.parent.updateMatrixWorld(); viewer.skybox.camera.updateProjectionMatrix(); viewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera); } else if (viewer.background === 'gradient') { viewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG); } //TODO adapt to multiple lights this.renderShadowMap(visiblePointClouds, camera, lights); { // COLOR & DEPTH PASS for (let pointcloud of visiblePointClouds) { let octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x; let material = pointcloud.material; material.weighted = false; material.useLogarithmicDepthBuffer = false; material.useEDL = true; material.screenWidth = width; material.screenHeight = height; material.uniforms.visibleNodes.value = pointcloud.material.visibleNodesTexture; material.uniforms.octreeSize.value = octreeSize; material.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(pointcloud.scale.x, pointcloud.scale.y, pointcloud.scale.z); } // TODO adapt to multiple lights viewer.renderer.setRenderTarget(this.rtEDL); if(lights.length > 0){ viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, { clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), shadowMaps: [this.shadowMap], transparent: false, }); }else { // let test = camera.clone(); // test.matrixAutoUpdate = false; // //test.updateMatrixWorld = () => {}; // let mat = new THREE.Matrix4().set( // 1, 0, 0, 0, // 0, 0, 1, 0, // 0, -1, 0, 0, // 0, 0, 0, 1, // ); // mat.invert() // test.matrix.multiplyMatrices(mat, test.matrix); // test.updateMatrixWorld(); //test.matrixWorld.multiplyMatrices(mat, test.matrixWorld); //test.matrixWorld.multiply(mat); //test.matrixWorldInverse.invert(test.matrixWorld); //test.matrixWorldInverse.multiplyMatrices(test.matrixWorldInverse, mat); viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtEDL, { clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), transparent: false, }); } } viewer.dispatchEvent({type: "render.pass.scene", viewer: viewer, renderTarget: this.rtRegular}); viewer.renderer.setRenderTarget(null); viewer.renderer.render(viewer.scene.scene, camera); { // EDL PASS const uniforms = this.edlMaterial.uniforms; uniforms.screenWidth.value = width; uniforms.screenHeight.value = height; let proj = camera.projectionMatrix; let projArray = new Float32Array(16); projArray.set(proj.elements); uniforms.uNear.value = camera.near; uniforms.uFar.value = camera.far; uniforms.uEDLColor.value = this.rtEDL.texture; uniforms.uEDLDepth.value = this.rtEDL.depthTexture; uniforms.uProj.value = projArray; uniforms.edlStrength.value = viewer.edlStrength; uniforms.radius.value = viewer.edlRadius; uniforms.opacity.value = viewer.edlOpacity; // HACK Utils.screenPass.render(viewer.renderer, this.edlMaterial); if(this.screenshot){ Utils.screenPass.render(viewer.renderer, this.edlMaterial, this.screenshot.target); } } viewer.dispatchEvent({type: "render.pass.scene", viewer: viewer}); viewer.renderer.clearDepth(); viewer.transformationTool.update(); viewer.dispatchEvent({type: "render.pass.perspective_overlay",viewer: viewer}); viewer.renderer.render(viewer.controls.sceneControls, camera); viewer.renderer.render(viewer.clippingTool.sceneVolume, camera); viewer.renderer.render(viewer.transformationTool.scene, camera); viewer.dispatchEvent({type: "render.pass.end",viewer: viewer}); } } class HQSplatRenderer{ constructor(viewer){ this.viewer = viewer; this.depthMaterials = new Map(); this.attributeMaterials = new Map(); this.normalizationMaterial = null; this.rtDepth = null; this.rtAttribute = null; this.gl = viewer.renderer.getContext(); this.initialized = false; } init(){ if (this.initialized) { return; } this.normalizationMaterial = new NormalizationMaterial(); this.normalizationMaterial.depthTest = true; this.normalizationMaterial.depthWrite = true; this.normalizationMaterial.transparent = true; this.normalizationEDLMaterial = new NormalizationEDLMaterial(); this.normalizationEDLMaterial.depthTest = true; this.normalizationEDLMaterial.depthWrite = true; this.normalizationEDLMaterial.transparent = true; this.rtDepth = new WebGLRenderTarget(1024, 1024, { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat, type: FloatType, depthTexture: new DepthTexture(undefined, undefined, UnsignedIntType) }); this.rtAttribute = new WebGLRenderTarget(1024, 1024, { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat, type: FloatType, depthTexture: this.rtDepth.depthTexture, }); this.initialized = true; }; resize(width, height){ this.rtDepth.setSize(width, height); this.rtAttribute.setSize(width, height); } clearTargets(){ const viewer = this.viewer; const {renderer} = viewer; const oldTarget = renderer.getRenderTarget(); renderer.setClearColor(0x000000, 0); renderer.setRenderTarget( this.rtDepth ); renderer.clear( true, true, true ); renderer.setRenderTarget( this.rtAttribute ); renderer.clear( true, true, true ); renderer.setRenderTarget(oldTarget); } clear(){ this.init(); const {renderer, background} = this.viewer; if(background === "skybox"){ renderer.setClearColor(0x000000, 0); } else if (background === 'gradient') { renderer.setClearColor(0x000000, 0); } else if (background === 'black') { renderer.setClearColor(0x000000, 1); } else if (background === 'white') { renderer.setClearColor(0xFFFFFF, 1); } else { renderer.setClearColor(0x000000, 0); } renderer.clear(); this.clearTargets(); } render (params) { this.init(); const viewer = this.viewer; const camera = params.camera ? params.camera : viewer.scene.getActiveCamera(); const {width, height} = this.viewer.renderer.getSize(new Vector2()); viewer.dispatchEvent({type: "render.pass.begin",viewer: viewer}); this.resize(width, height); const visiblePointClouds = viewer.scene.pointclouds.filter(pc => pc.visible); const originalMaterials = new Map(); for(let pointcloud of visiblePointClouds){ originalMaterials.set(pointcloud, pointcloud.material); if(!this.attributeMaterials.has(pointcloud)){ let attributeMaterial = new PointCloudMaterial$1(); this.attributeMaterials.set(pointcloud, attributeMaterial); } if(!this.depthMaterials.has(pointcloud)){ let depthMaterial = new PointCloudMaterial$1(); depthMaterial.setDefine("depth_pass", "#define hq_depth_pass"); depthMaterial.setDefine("use_edl", "#define use_edl"); this.depthMaterials.set(pointcloud, depthMaterial); } } { // DEPTH PASS for (let pointcloud of visiblePointClouds) { let octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x; let material = originalMaterials.get(pointcloud); let depthMaterial = this.depthMaterials.get(pointcloud); depthMaterial.size = material.size; depthMaterial.minSize = material.minSize; depthMaterial.maxSize = material.maxSize; depthMaterial.pointSizeType = material.pointSizeType; depthMaterial.visibleNodesTexture = material.visibleNodesTexture; depthMaterial.weighted = false; depthMaterial.screenWidth = width; depthMaterial.shape = PointShape.CIRCLE; depthMaterial.screenHeight = height; depthMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture; depthMaterial.uniforms.octreeSize.value = octreeSize; depthMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray()); depthMaterial.classification = material.classification; depthMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data; depthMaterial.classificationTexture.needsUpdate = true; depthMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value; depthMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value; depthMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value; depthMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value; depthMaterial.clipTask = material.clipTask; depthMaterial.clipMethod = material.clipMethod; depthMaterial.setClipBoxes(material.clipBoxes); depthMaterial.setClipPolygons(material.clipPolygons); pointcloud.material = depthMaterial; } viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtDepth, { clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), }); } { // ATTRIBUTE PASS for (let pointcloud of visiblePointClouds) { let octreeSize = pointcloud.pcoGeometry.boundingBox.getSize(new Vector3()).x; let material = originalMaterials.get(pointcloud); let attributeMaterial = this.attributeMaterials.get(pointcloud); attributeMaterial.size = material.size; attributeMaterial.minSize = material.minSize; attributeMaterial.maxSize = material.maxSize; attributeMaterial.pointSizeType = material.pointSizeType; attributeMaterial.activeAttributeName = material.activeAttributeName; attributeMaterial.visibleNodesTexture = material.visibleNodesTexture; attributeMaterial.weighted = true; attributeMaterial.screenWidth = width; attributeMaterial.screenHeight = height; attributeMaterial.shape = PointShape.CIRCLE; attributeMaterial.uniforms.visibleNodes.value = material.visibleNodesTexture; attributeMaterial.uniforms.octreeSize.value = octreeSize; attributeMaterial.spacing = pointcloud.pcoGeometry.spacing; // * Math.max(...pointcloud.scale.toArray()); attributeMaterial.classification = material.classification; attributeMaterial.uniforms.classificationLUT.value.image.data = material.uniforms.classificationLUT.value.image.data; attributeMaterial.classificationTexture.needsUpdate = true; attributeMaterial.uniforms.uFilterReturnNumberRange.value = material.uniforms.uFilterReturnNumberRange.value; attributeMaterial.uniforms.uFilterNumberOfReturnsRange.value = material.uniforms.uFilterNumberOfReturnsRange.value; attributeMaterial.uniforms.uFilterGPSTimeClipRange.value = material.uniforms.uFilterGPSTimeClipRange.value; attributeMaterial.uniforms.uFilterPointSourceIDClipRange.value = material.uniforms.uFilterPointSourceIDClipRange.value; attributeMaterial.elevationGradientRepeat = material.elevationGradientRepeat; attributeMaterial.elevationRange = material.elevationRange; attributeMaterial.gradient = material.gradient; attributeMaterial.matcap = material.matcap; attributeMaterial.intensityRange = material.intensityRange; attributeMaterial.intensityGamma = material.intensityGamma; attributeMaterial.intensityContrast = material.intensityContrast; attributeMaterial.intensityBrightness = material.intensityBrightness; attributeMaterial.rgbGamma = material.rgbGamma; attributeMaterial.rgbContrast = material.rgbContrast; attributeMaterial.rgbBrightness = material.rgbBrightness; attributeMaterial.weightRGB = material.weightRGB; attributeMaterial.weightIntensity = material.weightIntensity; attributeMaterial.weightElevation = material.weightElevation; attributeMaterial.weightRGB = material.weightRGB; attributeMaterial.weightClassification = material.weightClassification; attributeMaterial.weightReturnNumber = material.weightReturnNumber; attributeMaterial.weightSourceID = material.weightSourceID; attributeMaterial.color = material.color; attributeMaterial.clipTask = material.clipTask; attributeMaterial.clipMethod = material.clipMethod; attributeMaterial.setClipBoxes(material.clipBoxes); attributeMaterial.setClipPolygons(material.clipPolygons); pointcloud.material = attributeMaterial; } let gl = this.gl; viewer.renderer.setRenderTarget(null); viewer.pRenderer.render(viewer.scene.scenePointCloud, camera, this.rtAttribute, { clipSpheres: viewer.scene.volumes.filter(v => (v instanceof SphereVolume)), //material: this.attributeMaterial, blendFunc: [gl.SRC_ALPHA, gl.ONE], //depthTest: false, depthWrite: false }); } for(let [pointcloud, material] of originalMaterials){ pointcloud.material = material; } viewer.renderer.setRenderTarget(null); if(viewer.background === "skybox"){ viewer.renderer.setClearColor(0x000000, 0); viewer.renderer.clear(); viewer.skybox.camera.rotation.copy(viewer.scene.cameraP.rotation); viewer.skybox.camera.fov = viewer.scene.cameraP.fov; viewer.skybox.camera.aspect = viewer.scene.cameraP.aspect; viewer.skybox.parent.rotation.x = 0; viewer.skybox.parent.updateMatrixWorld(); viewer.skybox.camera.updateProjectionMatrix(); viewer.renderer.render(viewer.skybox.scene, viewer.skybox.camera); } else if (viewer.background === 'gradient') { viewer.renderer.setClearColor(0x000000, 0); viewer.renderer.clear(); viewer.renderer.render(viewer.scene.sceneBG, viewer.scene.cameraBG); } else if (viewer.background === 'black') { viewer.renderer.setClearColor(0x000000, 1); viewer.renderer.clear(); } else if (viewer.background === 'white') { viewer.renderer.setClearColor(0xFFFFFF, 1); viewer.renderer.clear(); } else { viewer.renderer.setClearColor(0x000000, 0); viewer.renderer.clear(); } { // NORMALIZATION PASS let normalizationMaterial = this.useEDL ? this.normalizationEDLMaterial : this.normalizationMaterial; if(this.useEDL){ normalizationMaterial.uniforms.edlStrength.value = viewer.edlStrength; normalizationMaterial.uniforms.radius.value = viewer.edlRadius; normalizationMaterial.uniforms.screenWidth.value = width; normalizationMaterial.uniforms.screenHeight.value = height; normalizationMaterial.uniforms.uEDLMap.value = this.rtDepth.texture; } normalizationMaterial.uniforms.uWeightMap.value = this.rtAttribute.texture; normalizationMaterial.uniforms.uDepthMap.value = this.rtAttribute.depthTexture; Utils.screenPass.render(viewer.renderer, normalizationMaterial); } viewer.renderer.render(viewer.scene.scene, camera); viewer.dispatchEvent({type: "render.pass.scene", viewer: viewer}); viewer.renderer.clearDepth(); viewer.transformationTool.update(); viewer.dispatchEvent({type: "render.pass.perspective_overlay",viewer: viewer}); viewer.renderer.render(viewer.controls.sceneControls, camera); viewer.renderer.render(viewer.clippingTool.sceneVolume, camera); viewer.renderer.render(viewer.transformationTool.scene, camera); viewer.renderer.setViewport(width - viewer.navigationCube.width, height - viewer.navigationCube.width, viewer.navigationCube.width, viewer.navigationCube.width); viewer.renderer.render(viewer.navigationCube, viewer.navigationCube.camera); viewer.renderer.setViewport(0, 0, width, height); viewer.dispatchEvent({type: "render.pass.end",viewer: viewer}); } } class View{ constructor () { this.position = new Vector3(0, 0, 0); this.yaw = Math.PI / 4; this._pitch = -Math.PI / 4; this.radius = 1; this.maxPitch = Math.PI / 2; this.minPitch = -Math.PI / 2; } clone () { let c = new View(); c.yaw = this.yaw; c._pitch = this.pitch; c.radius = this.radius; c.maxPitch = this.maxPitch; c.minPitch = this.minPitch; return c; } get pitch () { return this._pitch; } set pitch (angle) { this._pitch = Math.max(Math.min(angle, this.maxPitch), this.minPitch); } get direction () { let dir = new Vector3(0, 1, 0); dir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch); dir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); return dir; } set direction (dir) { //if(dir.x === dir.y){ if(dir.x === 0 && dir.y === 0){ this.pitch = Math.PI / 2 * Math.sign(dir.z); }else { let yaw = Math.atan2(dir.y, dir.x) - Math.PI / 2; let pitch = Math.atan2(dir.z, Math.sqrt(dir.x * dir.x + dir.y * dir.y)); this.yaw = yaw; this.pitch = pitch; } } lookAt(t){ let V; if(arguments.length === 1){ V = new Vector3().subVectors(t, this.position); }else if(arguments.length === 3){ V = new Vector3().subVectors(new Vector3(...arguments), this.position); } let radius = V.length(); let dir = V.normalize(); this.radius = radius; this.direction = dir; } getPivot () { return new Vector3().addVectors(this.position, this.direction.multiplyScalar(this.radius)); } getSide () { let side = new Vector3(1, 0, 0); side.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); return side; } pan (x, y) { let dir = new Vector3(0, 1, 0); dir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch); dir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); // let side = new THREE.Vector3(1, 0, 0); // side.applyAxisAngle(new THREE.Vector3(0, 0, 1), this.yaw); let side = this.getSide(); let up = side.clone().cross(dir); let pan = side.multiplyScalar(x).add(up.multiplyScalar(y)); this.position = this.position.add(pan); // this.target = this.target.add(pan); } translate (x, y, z) { let dir = new Vector3(0, 1, 0); dir.applyAxisAngle(new Vector3(1, 0, 0), this.pitch); dir.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); let side = new Vector3(1, 0, 0); side.applyAxisAngle(new Vector3(0, 0, 1), this.yaw); let up = side.clone().cross(dir); let t = side.multiplyScalar(x) .add(dir.multiplyScalar(y)) .add(up.multiplyScalar(z)); this.position = this.position.add(t); } translateWorld (x, y, z) { this.position.x += x; this.position.y += y; this.position.z += z; } setView(position, target, duration = 0, callback = null){ let endPosition = null; if(position instanceof Array){ endPosition = new Vector3(...position); }else if(position.x != null){ endPosition = position.clone(); } let endTarget = null; if(target instanceof Array){ endTarget = new Vector3(...target); }else if(target.x != null){ endTarget = target.clone(); } const startPosition = this.position.clone(); const startTarget = this.getPivot(); //const endPosition = position.clone(); //const endTarget = target.clone(); let easing = TWEEN.Easing.Quartic.Out; if(duration === 0){ this.position.copy(endPosition); this.lookAt(endTarget); }else { let value = {x: 0}; let tween = new TWEEN.Tween(value).to({x: 1}, duration); tween.easing(easing); //this.tweens.push(tween); tween.onUpdate(() => { let t = value.x; //console.log(t); const pos = new Vector3( (1 - t) * startPosition.x + t * endPosition.x, (1 - t) * startPosition.y + t * endPosition.y, (1 - t) * startPosition.z + t * endPosition.z, ); const target = new Vector3( (1 - t) * startTarget.x + t * endTarget.x, (1 - t) * startTarget.y + t * endTarget.y, (1 - t) * startTarget.z + t * endTarget.z, ); this.position.copy(pos); this.lookAt(target); }); tween.start(); tween.onComplete(() => { if(callback){ callback(); } }); } } }; class Scene$1 extends EventDispatcher{ constructor(){ super(); this.annotations = new Annotation(); this.scene = new Scene(); this.sceneBG = new Scene(); this.scenePointCloud = new Scene(); this.cameraP = new PerspectiveCamera(this.fov, 1, 0.1, 1000*1000); this.cameraO = new OrthographicCamera(-1, 1, 1, -1, 0.1, 1000*1000); this.cameraVR = new PerspectiveCamera(); this.cameraBG = new Camera(); this.cameraScreenSpace = new OrthographicCamera(-1, 1, 1, -1, 0.1, 10); this.cameraMode = CameraMode.PERSPECTIVE; this.overrideCamera = null; this.pointclouds = []; this.measurements = []; this.profiles = []; this.volumes = []; this.polygonClipVolumes = []; this.cameraAnimations = []; this.orientedImages = []; this.images360 = []; this.geopackages = []; this.fpControls = null; this.orbitControls = null; this.earthControls = null; this.geoControls = null; this.deviceControls = null; this.inputHandler = null; this.view = new View(); this.directionalLight = null; this.initialize(); } estimateHeightAt (position) { let height = null; let fromSpacing = Infinity; for (let pointcloud of this.pointclouds) { if (pointcloud.root.geometryNode === undefined) { continue; } let pHeight = null; let pFromSpacing = Infinity; let lpos = position.clone().sub(pointcloud.position); lpos.z = 0; let ray = new Ray(lpos, new Vector3(0, 0, 1)); let stack = [pointcloud.root]; while (stack.length > 0) { let node = stack.pop(); let box = node.getBoundingBox(); let inside = ray.intersectBox(box); if (!inside) { continue; } let h = node.geometryNode.mean.z + pointcloud.position.z + node.geometryNode.boundingBox.min.z; if (node.geometryNode.spacing <= pFromSpacing) { pHeight = h; pFromSpacing = node.geometryNode.spacing; } for (let index of Object.keys(node.children)) { let child = node.children[index]; if (child.geometryNode) { stack.push(node.children[index]); } } } if (height === null || pFromSpacing < fromSpacing) { height = pHeight; fromSpacing = pFromSpacing; } } return height; } getBoundingBox(pointclouds = this.pointclouds){ let box = new Box3(); this.scenePointCloud.updateMatrixWorld(true); this.referenceFrame.updateMatrixWorld(true); for (let pointcloud of pointclouds) { pointcloud.updateMatrixWorld(true); let pointcloudBox = pointcloud.pcoGeometry.tightBoundingBox ? pointcloud.pcoGeometry.tightBoundingBox : pointcloud.boundingBox; let boxWorld = Utils.computeTransformedBoundingBox(pointcloudBox, pointcloud.matrixWorld); box.union(boxWorld); } return box; } addPointCloud (pointcloud) { this.pointclouds.push(pointcloud); this.scenePointCloud.add(pointcloud); this.dispatchEvent({ type: 'pointcloud_added', pointcloud: pointcloud }); } addVolume (volume) { this.volumes.push(volume); this.dispatchEvent({ 'type': 'volume_added', 'scene': this, 'volume': volume }); } addOrientedImages(images){ this.orientedImages.push(images); this.scene.add(images.node); this.dispatchEvent({ 'type': 'oriented_images_added', 'scene': this, 'images': images }); }; removeOrientedImages(images){ let index = this.orientedImages.indexOf(images); if (index > -1) { this.orientedImages.splice(index, 1); this.dispatchEvent({ 'type': 'oriented_images_removed', 'scene': this, 'images': images }); } }; add360Images(images){ this.images360.push(images); this.scene.add(images.node); this.dispatchEvent({ 'type': '360_images_added', 'scene': this, 'images': images }); } remove360Images(images){ let index = this.images360.indexOf(images); if (index > -1) { this.images360.splice(index, 1); this.dispatchEvent({ 'type': '360_images_removed', 'scene': this, 'images': images }); } } addGeopackage(geopackage){ this.geopackages.push(geopackage); this.scene.add(geopackage.node); this.dispatchEvent({ 'type': 'geopackage_added', 'scene': this, 'geopackage': geopackage }); }; removeGeopackage(geopackage){ let index = this.geopackages.indexOf(geopackage); if (index > -1) { this.geopackages.splice(index, 1); this.dispatchEvent({ 'type': 'geopackage_removed', 'scene': this, 'geopackage': geopackage }); } }; removeVolume (volume) { let index = this.volumes.indexOf(volume); if (index > -1) { this.volumes.splice(index, 1); this.dispatchEvent({ 'type': 'volume_removed', 'scene': this, 'volume': volume }); } }; addCameraAnimation(animation) { this.cameraAnimations.push(animation); this.dispatchEvent({ 'type': 'camera_animation_added', 'scene': this, 'animation': animation }); }; removeCameraAnimation(animation){ let index = this.cameraAnimations.indexOf(volume); if (index > -1) { this.cameraAnimations.splice(index, 1); this.dispatchEvent({ 'type': 'camera_animation_removed', 'scene': this, 'animation': animation }); } }; addPolygonClipVolume(volume){ this.polygonClipVolumes.push(volume); this.dispatchEvent({ "type": "polygon_clip_volume_added", "scene": this, "volume": volume }); }; removePolygonClipVolume(volume){ let index = this.polygonClipVolumes.indexOf(volume); if (index > -1) { this.polygonClipVolumes.splice(index, 1); this.dispatchEvent({ "type": "polygon_clip_volume_removed", "scene": this, "volume": volume }); } }; addMeasurement(measurement){ measurement.lengthUnit = this.lengthUnit; measurement.lengthUnitDisplay = this.lengthUnitDisplay; this.measurements.push(measurement); this.dispatchEvent({ 'type': 'measurement_added', 'scene': this, 'measurement': measurement }); }; removeMeasurement (measurement) { let index = this.measurements.indexOf(measurement); if (index > -1) { this.measurements.splice(index, 1); this.dispatchEvent({ 'type': 'measurement_removed', 'scene': this, 'measurement': measurement }); } } addProfile (profile) { this.profiles.push(profile); this.dispatchEvent({ 'type': 'profile_added', 'scene': this, 'profile': profile }); } removeProfile (profile) { let index = this.profiles.indexOf(profile); if (index > -1) { this.profiles.splice(index, 1); this.dispatchEvent({ 'type': 'profile_removed', 'scene': this, 'profile': profile }); } } removeAllMeasurements () { while (this.measurements.length > 0) { this.removeMeasurement(this.measurements[0]); } while (this.profiles.length > 0) { this.removeProfile(this.profiles[0]); } while (this.volumes.length > 0) { this.removeVolume(this.volumes[0]); } } removeAllClipVolumes(){ let clipVolumes = this.volumes.filter(volume => volume.clip === true); for(let clipVolume of clipVolumes){ this.removeVolume(clipVolume); } while(this.polygonClipVolumes.length > 0){ this.removePolygonClipVolume(this.polygonClipVolumes[0]); } } getActiveCamera() { if(this.overrideCamera){ return this.overrideCamera; } if(this.cameraMode === CameraMode.PERSPECTIVE){ return this.cameraP; }else if(this.cameraMode === CameraMode.ORTHOGRAPHIC){ return this.cameraO; }else if(this.cameraMode === CameraMode.VR){ return this.cameraVR; } return null; } initialize(){ this.referenceFrame = new Object3D(); this.referenceFrame.matrixAutoUpdate = false; this.scenePointCloud.add(this.referenceFrame); this.cameraP.up.set(0, 0, 1); this.cameraP.position.set(1000, 1000, 1000); this.cameraO.up.set(0, 0, 1); this.cameraO.position.set(1000, 1000, 1000); //this.camera.rotation.y = -Math.PI / 4; //this.camera.rotation.x = -Math.PI / 6; this.cameraScreenSpace.lookAt(new Vector3(0, 0, 0), new Vector3(0, 0, -1), new Vector3(0, 1, 0)); this.directionalLight = new DirectionalLight( 0xffffff, 0.5 ); this.directionalLight.position.set( 10, 10, 10 ); this.directionalLight.lookAt( new Vector3(0, 0, 0)); this.scenePointCloud.add( this.directionalLight ); let light = new AmbientLight( 0x555555 ); // soft white light this.scenePointCloud.add( light ); { // background let texture = Utils.createBackgroundTexture(512, 512); texture.minFilter = texture.magFilter = NearestFilter; texture.minFilter = texture.magFilter = LinearFilter; let bg = new Mesh( new PlaneBufferGeometry(2, 2, 1), new MeshBasicMaterial({ map: texture }) ); bg.material.depthTest = false; bg.material.depthWrite = false; this.sceneBG.add(bg); } // { // lights // { // let light = new THREE.DirectionalLight(0xffffff); // light.position.set(10, 10, 1); // light.target.position.set(0, 0, 0); // this.scene.add(light); // } // { // let light = new THREE.DirectionalLight(0xffffff); // light.position.set(-10, 10, 1); // light.target.position.set(0, 0, 0); // this.scene.add(light); // } // { // let light = new THREE.DirectionalLight(0xffffff); // light.position.set(0, -10, 20); // light.target.position.set(0, 0, 0); // this.scene.add(light); // } // } } addAnnotation(position, args = {}){ if(position instanceof Array){ args.position = new Vector3().fromArray(position); } else if (position.x != null) { args.position = position; } let annotation = new Annotation(args); this.annotations.add(annotation); return annotation; } getAnnotations () { return this.annotations; }; removeAnnotation(annotationToRemove) { this.annotations.remove(annotationToRemove); } }; // http://epsg.io/ proj4.defs([ ['UTM10N', '+proj=utm +zone=10 +ellps=GRS80 +datum=NAD83 +units=m +no_defs'], ['EPSG:6339', '+proj=utm +zone=10 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6340', '+proj=utm +zone=11 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6341', '+proj=utm +zone=12 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6342', '+proj=utm +zone=13 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6343', '+proj=utm +zone=14 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6344', '+proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6345', '+proj=utm +zone=16 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6346', '+proj=utm +zone=17 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6347', '+proj=utm +zone=18 +ellps=GRS80 +units=m +no_defs'], ['EPSG:6348', '+proj=utm +zone=19 +ellps=GRS80 +units=m +no_defs'], ['EPSG:26910', '+proj=utm +zone=10 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26911', '+proj=utm +zone=11 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26912', '+proj=utm +zone=12 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26913', '+proj=utm +zone=13 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26914', '+proj=utm +zone=14 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26915', '+proj=utm +zone=15 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26916', '+proj=utm +zone=16 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26917', '+proj=utm +zone=17 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26918', '+proj=utm +zone=18 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ['EPSG:26919', '+proj=utm +zone=19 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs '], ]); class MapView{ constructor (viewer) { this.viewer = viewer; this.webMapService = 'WMTS'; this.mapProjectionName = 'EPSG:3857'; this.mapProjection = proj4.defs(this.mapProjectionName); this.sceneProjection = null; this.extentsLayer = null; this.cameraLayer = null; this.toolLayer = null; this.sourcesLayer = null; this.sourcesLabelLayer = null; this.images360Layer = null; this.enabled = false; this.createAnnotationStyle = (text) => { return [ new ol.style.Style({ image: new ol.style.Circle({ radius: 10, stroke: new ol.style.Stroke({ color: [255, 255, 255, 0.5], width: 2 }), fill: new ol.style.Fill({ color: [0, 0, 0, 0.5] }) }) }) ]; }; this.createLabelStyle = (text) => { let style = new ol.style.Style({ image: new ol.style.Circle({ radius: 6, stroke: new ol.style.Stroke({ color: 'white', width: 2 }), fill: new ol.style.Fill({ color: 'green' }) }), text: new ol.style.Text({ font: '12px helvetica,sans-serif', text: text, fill: new ol.style.Fill({ color: '#000' }), stroke: new ol.style.Stroke({ color: '#fff', width: 2 }) }) }); return style; }; } showSources (show) { this.sourcesLayer.setVisible(show); this.sourcesLabelLayer.setVisible(show); } init () { if(typeof ol === "undefined"){ return; } this.elMap = $('#potree_map'); this.elMap.draggable({ handle: $('#potree_map_header') }); this.elMap.resizable(); this.elTooltip = $(`
      `); this.elMap.append(this.elTooltip); let extentsLayer = this.getExtentsLayer(); let cameraLayer = this.getCameraLayer(); this.getToolLayer(); let sourcesLayer = this.getSourcesLayer(); this.images360Layer = this.getImages360Layer(); this.getSourcesLabelLayer(); this.getAnnotationsLayer(); let mousePositionControl = new ol.control.MousePosition({ coordinateFormat: ol.coordinate.createStringXY(5), projection: 'EPSG:4326', undefinedHTML: ' ' }); let _this = this; let DownloadSelectionControl = function (optOptions) { let options = optOptions || {}; // TOGGLE TILES let btToggleTiles = document.createElement('button'); btToggleTiles.innerHTML = 'T'; btToggleTiles.addEventListener('click', () => { let visible = sourcesLayer.getVisible(); _this.showSources(!visible); }, false); btToggleTiles.style.float = 'left'; btToggleTiles.title = 'show / hide tiles'; // DOWNLOAD SELECTED TILES let link = document.createElement('a'); link.href = '#'; link.download = 'list.txt'; link.style.float = 'left'; let button = document.createElement('button'); button.innerHTML = 'D'; link.appendChild(button); let handleDownload = (e) => { let features = selectedFeatures.getArray(); let url = [document.location.protocol, '//', document.location.host, document.location.pathname].join(''); if (features.length === 0) { alert('No tiles were selected. Select area with ctrl + left mouse button!'); e.preventDefault(); e.stopImmediatePropagation(); return false; } else if (features.length === 1) { let feature = features[0]; if (feature.source) { let cloudjsurl = feature.pointcloud.pcoGeometry.url; let sourceurl = new URL(url + '/../' + cloudjsurl + '/../source/' + feature.source.name); link.href = sourceurl.href; link.download = feature.source.name; } } else { let content = ''; for (let i = 0; i < features.length; i++) { let feature = features[i]; if (feature.source) { let cloudjsurl = feature.pointcloud.pcoGeometry.url; let sourceurl = new URL(url + '/../' + cloudjsurl + '/../source/' + feature.source.name); content += sourceurl.href + '\n'; } } let uri = 'data:application/octet-stream;base64,' + btoa(content); link.href = uri; link.download = 'list_of_files.txt'; } }; button.addEventListener('click', handleDownload, false); // assemble container let element = document.createElement('div'); element.className = 'ol-unselectable ol-control'; element.appendChild(link); element.appendChild(btToggleTiles); element.style.bottom = '0.5em'; element.style.left = '0.5em'; element.title = 'Download file or list of selected tiles. Select tile with left mouse button or area using ctrl + left mouse.'; ol.control.Control.call(this, { element: element, target: options.target }); }; ol.inherits(DownloadSelectionControl, ol.control.Control); this.map = new ol.Map({ controls: ol.control.defaults({ attributionOptions: ({ collapsible: false }) }).extend([ // this.controls.zoomToExtent, new DownloadSelectionControl(), mousePositionControl ]), layers: [ new ol.layer.Tile({source: new ol.source.OSM()}), this.toolLayer, this.annotationsLayer, this.sourcesLayer, this.sourcesLabelLayer, this.images360Layer, extentsLayer, cameraLayer ], target: 'potree_map_content', view: new ol.View({ center: this.olCenter, zoom: 9 }) }); // DRAGBOX / SELECTION this.dragBoxLayer = new ol.layer.Vector({ source: new ol.source.Vector({}), style: new ol.style.Style({ stroke: new ol.style.Stroke({ color: 'rgba(0, 0, 255, 1)', width: 2 }) }) }); this.map.addLayer(this.dragBoxLayer); let select = new ol.interaction.Select(); this.map.addInteraction(select); let selectedFeatures = select.getFeatures(); let dragBox = new ol.interaction.DragBox({ condition: ol.events.condition.platformModifierKeyOnly }); this.map.addInteraction(dragBox); // this.map.on('pointermove', evt => { // let pixel = evt.pixel; // let feature = this.map.forEachFeatureAtPixel(pixel, function (feature) { // return feature; // }); // // console.log(feature); // // this.elTooltip.css("display", feature ? '' : 'none'); // this.elTooltip.css('display', 'none'); // if (feature && feature.onHover) { // feature.onHover(evt); // // overlay.setPosition(evt.coordinate); // // tooltip.innerHTML = feature.get('name'); // } // }); this.map.on('click', evt => { let pixel = evt.pixel; let feature = this.map.forEachFeatureAtPixel(pixel, function (feature) { return feature; }); if (feature && feature.onClick) { feature.onClick(evt); } }); dragBox.on('boxend', (e) => { // features that intersect the box are added to the collection of // selected features, and their names are displayed in the "info" // div let extent = dragBox.getGeometry().getExtent(); this.getSourcesLayer().getSource().forEachFeatureIntersectingExtent(extent, (feature) => { selectedFeatures.push(feature); }); }); // clear selection when drawing a new box and when clicking on the map dragBox.on('boxstart', (e) => { selectedFeatures.clear(); }); this.map.on('click', () => { selectedFeatures.clear(); }); this.viewer.addEventListener('scene_changed', e => { this.setScene(e.scene); }); this.onPointcloudAdded = e => { this.load(e.pointcloud); }; this.on360ImagesAdded = e => { this.addImages360(e.images); }; this.onAnnotationAdded = e => { if (!this.sceneProjection) { return; } let annotation = e.annotation; let position = annotation.position; let mapPos = this.toMap.forward([position.x, position.y]); let feature = new ol.Feature({ geometry: new ol.geom.Point(mapPos), name: annotation.title }); feature.setStyle(this.createAnnotationStyle(annotation.title)); feature.onHover = evt => { let coordinates = feature.getGeometry().getCoordinates(); let p = this.map.getPixelFromCoordinate(coordinates); this.elTooltip.html(annotation.title); this.elTooltip.css('display', ''); this.elTooltip.css('left', `${p[0]}px`); this.elTooltip.css('top', `${p[1]}px`); }; feature.onClick = evt => { annotation.clickTitle(); }; this.getAnnotationsLayer().getSource().addFeature(feature); }; this.setScene(this.viewer.scene); } setScene (scene) { if (this.scene === scene) { return; }; if (this.scene) { this.scene.removeEventListener('pointcloud_added', this.onPointcloudAdded); this.scene.removeEventListener('360_images_added', this.on360ImagesAdded); this.scene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded); } this.scene = scene; this.scene.addEventListener('pointcloud_added', this.onPointcloudAdded); this.scene.addEventListener('360_images_added', this.on360ImagesAdded); this.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded); for (let pointcloud of this.viewer.scene.pointclouds) { this.load(pointcloud); } this.viewer.scene.annotations.traverseDescendants(annotation => { this.onAnnotationAdded({annotation: annotation}); }); for(let images of this.viewer.scene.images360){ this.on360ImagesAdded({images: images}); } } getExtentsLayer () { if (this.extentsLayer) { return this.extentsLayer; } this.gExtent = new ol.geom.LineString([[0, 0], [0, 0]]); let feature = new ol.Feature(this.gExtent); let featureVector = new ol.source.Vector({ features: [feature] }); this.extentsLayer = new ol.layer.Vector({ source: featureVector, style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 255, 255, 0.2)' }), stroke: new ol.style.Stroke({ color: '#0000ff', width: 2 }), image: new ol.style.Circle({ radius: 3, fill: new ol.style.Fill({ color: '#0000ff' }) }) }) }); return this.extentsLayer; } getAnnotationsLayer () { if (this.annotationsLayer) { return this.annotationsLayer; } this.annotationsLayer = new ol.layer.Vector({ source: new ol.source.Vector({ }), style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 0, 0, 1)' }), stroke: new ol.style.Stroke({ color: 'rgba(255, 0, 0, 1)', width: 2 }) }) }); return this.annotationsLayer; } getCameraLayer () { if (this.cameraLayer) { return this.cameraLayer; } // CAMERA LAYER this.gCamera = new ol.geom.LineString([[0, 0], [0, 0], [0, 0], [0, 0]]); let feature = new ol.Feature(this.gCamera); let featureVector = new ol.source.Vector({ features: [feature] }); this.cameraLayer = new ol.layer.Vector({ source: featureVector, style: new ol.style.Style({ stroke: new ol.style.Stroke({ color: '#0000ff', width: 2 }) }) }); return this.cameraLayer; } getToolLayer () { if (this.toolLayer) { return this.toolLayer; } this.toolLayer = new ol.layer.Vector({ source: new ol.source.Vector({ }), style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 0, 0, 1)' }), stroke: new ol.style.Stroke({ color: 'rgba(255, 0, 0, 1)', width: 2 }) }) }); return this.toolLayer; } getImages360Layer(){ if(this.images360Layer){ return this.images360Layer; } let style = new ol.style.Style({ image: new ol.style.Circle({ radius: 4, stroke: new ol.style.Stroke({ color: [255, 0, 0, 1], width: 2 }), fill: new ol.style.Fill({ color: [255, 100, 100, 1] }) }) }); let layer = new ol.layer.Vector({ source: new ol.source.Vector({}), style: style, }); this.images360Layer = layer; return this.images360Layer; } getSourcesLayer () { if (this.sourcesLayer) { return this.sourcesLayer; } this.sourcesLayer = new ol.layer.Vector({ source: new ol.source.Vector({}), style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(0, 0, 150, 0.1)' }), stroke: new ol.style.Stroke({ color: 'rgba(0, 0, 150, 1)', width: 1 }) }) }); return this.sourcesLayer; } getSourcesLabelLayer () { if (this.sourcesLabelLayer) { return this.sourcesLabelLayer; } this.sourcesLabelLayer = new ol.layer.Vector({ source: new ol.source.Vector({ }), style: new ol.style.Style({ fill: new ol.style.Fill({ color: 'rgba(255, 0, 0, 0.1)' }), stroke: new ol.style.Stroke({ color: 'rgba(255, 0, 0, 1)', width: 2 }) }), minResolution: 0.01, maxResolution: 20 }); return this.sourcesLabelLayer; } setSceneProjection (sceneProjection) { this.sceneProjection = sceneProjection; this.toMap = proj4(this.sceneProjection, this.mapProjection); this.toScene = proj4(this.mapProjection, this.sceneProjection); }; getMapExtent () { let bb = this.viewer.getBoundingBox(); let bottomLeft = this.toMap.forward([bb.min.x, bb.min.y]); let bottomRight = this.toMap.forward([bb.max.x, bb.min.y]); let topRight = this.toMap.forward([bb.max.x, bb.max.y]); let topLeft = this.toMap.forward([bb.min.x, bb.max.y]); let extent = { bottomLeft: bottomLeft, bottomRight: bottomRight, topRight: topRight, topLeft: topLeft }; return extent; }; getMapCenter () { let mapExtent = this.getMapExtent(); let mapCenter = [ (mapExtent.bottomLeft[0] + mapExtent.topRight[0]) / 2, (mapExtent.bottomLeft[1] + mapExtent.topRight[1]) / 2 ]; return mapCenter; }; updateToolDrawings () { this.toolLayer.getSource().clear(); let profiles = this.viewer.profileTool.profiles; for (let i = 0; i < profiles.length; i++) { let profile = profiles[i]; let coordinates = []; for (let j = 0; j < profile.points.length; j++) { let point = profile.points[j]; let pointMap = this.toMap.forward([point.x, point.y]); coordinates.push(pointMap); } let line = new ol.geom.LineString(coordinates); let feature = new ol.Feature(line); this.toolLayer.getSource().addFeature(feature); } let measurements = this.viewer.measuringTool.measurements; for (let i = 0; i < measurements.length; i++) { let measurement = measurements[i]; let coordinates = []; for (let j = 0; j < measurement.points.length; j++) { let point = measurement.points[j].position; let pointMap = this.toMap.forward([point.x, point.y]); coordinates.push(pointMap); } if (measurement.closed && measurement.points.length > 0) { coordinates.push(coordinates[0]); } let line = new ol.geom.LineString(coordinates); let feature = new ol.Feature(line); this.toolLayer.getSource().addFeature(feature); } } addImages360(images){ let transform = this.toMap.forward; let layer = this.getImages360Layer(); for(let image of images.images){ let p = transform([image.position[0], image.position[1]]); let feature = new ol.Feature({ 'geometry': new ol.geom.Point(p), }); feature.onClick = () => { images.focus(image); }; layer.getSource().addFeature(feature); } } async load (pointcloud) { if (!pointcloud) { return; } if (!pointcloud.projection) { return; } if (!this.sceneProjection) { try { this.setSceneProjection(pointcloud.projection); }catch (e) { console.log('Failed projection:', e); if (pointcloud.fallbackProjection) { try { console.log('Trying fallback projection...'); this.setSceneProjection(pointcloud.fallbackProjection); console.log('Set projection from fallback'); }catch (e) { console.log('Failed fallback projection:', e); return; } }else { return; }; } } let mapExtent = this.getMapExtent(); let mapCenter = this.getMapCenter(); let view = this.map.getView(); view.setCenter(mapCenter); this.gExtent.setCoordinates([ mapExtent.bottomLeft, mapExtent.bottomRight, mapExtent.topRight, mapExtent.topLeft, mapExtent.bottomLeft ]); view.fit(this.gExtent, [300, 300], { constrainResolution: false }); if (pointcloud.pcoGeometry.type == 'ept'){ return; } let url = `${pointcloud.pcoGeometry.url}/../sources.json`; //let response = await fetch(url); fetch(url).then(async (response) => { let data = await response.json(); let sources = data.sources; for (let i = 0; i < sources.length; i++) { let source = sources[i]; let name = source.name; let bounds = source.bounds; let mapBounds = { min: this.toMap.forward([bounds.min[0], bounds.min[1]]), max: this.toMap.forward([bounds.max[0], bounds.max[1]]) }; let mapCenter = [ (mapBounds.min[0] + mapBounds.max[0]) / 2, (mapBounds.min[1] + mapBounds.max[1]) / 2 ]; let p1 = this.toMap.forward([bounds.min[0], bounds.min[1]]); let p2 = this.toMap.forward([bounds.max[0], bounds.min[1]]); let p3 = this.toMap.forward([bounds.max[0], bounds.max[1]]); let p4 = this.toMap.forward([bounds.min[0], bounds.max[1]]); // let feature = new ol.Feature({ // 'geometry': new ol.geom.LineString([p1, p2, p3, p4, p1]) // }); let feature = new ol.Feature({ 'geometry': new ol.geom.Polygon([[p1, p2, p3, p4, p1]]) }); feature.source = source; feature.pointcloud = pointcloud; this.getSourcesLayer().getSource().addFeature(feature); feature = new ol.Feature({ geometry: new ol.geom.Point(mapCenter), name: name }); feature.setStyle(this.createLabelStyle(name)); this.sourcesLabelLayer.getSource().addFeature(feature); } }).catch(() => { }); } toggle () { if (this.elMap.is(':visible')) { this.elMap.css('display', 'none'); this.enabled = false; } else { this.elMap.css('display', 'block'); this.enabled = true; } } update (delta) { if (!this.sceneProjection) { return; } let pm = $('#potree_map'); if (!this.enabled) { return; } // resize let mapSize = this.map.getSize(); let resized = (pm.width() !== mapSize[0] || pm.height() !== mapSize[1]); if (resized) { this.map.updateSize(); } // let camera = this.viewer.scene.getActiveCamera(); let scale = this.map.getView().getResolution(); let campos = camera.position; let camdir = camera.getWorldDirection(new Vector3()); let sceneLookAt = camdir.clone().multiplyScalar(30 * scale).add(campos); let geoPos = camera.position; let geoLookAt = sceneLookAt; let mapPos = new Vector2().fromArray(this.toMap.forward([geoPos.x, geoPos.y])); let mapLookAt = new Vector2().fromArray(this.toMap.forward([geoLookAt.x, geoLookAt.y])); let mapDir = new Vector2().subVectors(mapLookAt, mapPos).normalize(); mapLookAt = mapPos.clone().add(mapDir.clone().multiplyScalar(30 * scale)); let mapLength = mapPos.distanceTo(mapLookAt); let mapSide = new Vector2(-mapDir.y, mapDir.x); let p1 = mapPos.toArray(); let p2 = mapLookAt.clone().sub(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray(); let p3 = mapLookAt.clone().add(mapSide.clone().multiplyScalar(0.3 * mapLength)).toArray(); this.gCamera.setCoordinates([p1, p2, p3, p1]); } get sourcesVisible () { return this.getSourcesLayer().getVisible(); } set sourcesVisible (value) { this.getSourcesLayer().setVisible(value); } } /** * * @author roy.mdr / http://... * */ class DXFProfileExporter { static toXYZ(points, flatten = false) { /* points: { ... data: { mileage: [0, 1, 2...], -> one per point position: [0, 0, 0, 1, 1, 1, 2, 2, 2...], -> X, Y, Z rgba: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2...] -> R, G, B, A }, numPoints: Int } */ const pointsXYZ = { x: [], y: [], z: [], minX: Number.MAX_VALUE, minY: Number.MAX_VALUE, minZ: Number.MAX_VALUE, maxX: -Number.MAX_VALUE, maxY: -Number.MAX_VALUE, maxZ: -Number.MAX_VALUE, numPoints: 0 }; const pData = points.data; const pMileage = pData.mileage; const pCoords = pData.position; const pColor = pData.rgba; for (let pIx = 0; pIx < points.numPoints; pIx++) { const poMileage = pMileage[pIx]; const poCoordX = pCoords[ ((pIx * 3) + 0) ]; const poCoordY = pCoords[ ((pIx * 3) + 1) ]; const poCoordZ = pCoords[ ((pIx * 3) + 2) ]; // const poColorR = pColor[ ((pIx * 4) + 0) ]; // const poColorG = pColor[ ((pIx * 4) + 1) ]; // const poColorB = pColor[ ((pIx * 4) + 2) ]; // const poColorA = pColor[ ((pIx * 4) + 3) ]; if (flatten === true) { pointsXYZ.x.push(poMileage); pointsXYZ.y.push(0); pointsXYZ.z.push(poCoordZ); // Get boundaries X if (pointsXYZ.maxX < poMileage) pointsXYZ.maxX = poMileage; if (pointsXYZ.minX > poMileage) pointsXYZ.minX = poMileage; // Get boundaries Z if (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ; if (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ; } else { pointsXYZ.x.push(poCoordX); pointsXYZ.y.push(poCoordY); pointsXYZ.z.push(poCoordZ); // Get boundaries X if (pointsXYZ.maxX < poCoordX) pointsXYZ.maxX = poCoordX; if (pointsXYZ.minX > poCoordX) pointsXYZ.minX = poCoordX; // Get boundaries Y if (pointsXYZ.maxY < poCoordY) pointsXYZ.maxY = poCoordY; if (pointsXYZ.minY > poCoordY) pointsXYZ.minY = poCoordY; // Get boundaries Z if (pointsXYZ.maxZ < poCoordZ) pointsXYZ.maxZ = poCoordZ; if (pointsXYZ.minZ > poCoordZ) pointsXYZ.minZ = poCoordZ; } } if (flatten === true) { // Set boundaries Y pointsXYZ.maxY = 0; pointsXYZ.minY = 0; } pointsXYZ.numPoints = points.numPoints; return pointsXYZ; } static plotPCloudPoint(x, y, z) { const dxfSection = `0 POINT 8 layer_pointCloud 10 ${x} 20 ${y} 30 ${z} `; return dxfSection; } static toString(points, flatten = false) { const pCloud = DXFProfileExporter.toXYZ(points, flatten); const dxfHeader = `999 DXF created from potree 0 SECTION 2 HEADER 9 $ACADVER 1 AC1006 9 $INSBASE 10 0.0 20 0.0 30 0.0 9 $EXTMIN 10 ${pCloud.minX} 20 ${pCloud.minY} 30 ${pCloud.minZ} 9 $EXTMAX 10 ${pCloud.maxX} 20 ${pCloud.maxY} 30 ${pCloud.maxZ} 0 ENDSEC `; let dxfBody = `0 SECTION 2 ENTITIES `; for (let i = 0; i < pCloud.numPoints; i++) { dxfBody += DXFProfileExporter.plotPCloudPoint(pCloud.x[i], pCloud.y[i], pCloud.z[i]); } dxfBody += `0 ENDSEC `; const dxf = dxfHeader + dxfBody + '0\nEOF'; return dxf; } } class CSVExporter { static toString (points) { let string = ''; let attributes = Object.keys(points.data) .filter(a => a !== 'normal') .sort((a, b) => { if (a === 'position') return -1; if (b === 'position') return 1; if (a === 'rgba') return -1; if (b === 'rgba') return 1; }); let headerValues = []; for (let attribute of attributes) { let itemSize = points.data[attribute].length / points.numPoints; if (attribute === 'position') { headerValues = headerValues.concat(['x', 'y', 'z']); } else if (attribute === 'rgba') { headerValues = headerValues.concat(['r', 'g', 'b', 'a']); } else if (itemSize > 1) { for (let i = 0; i < itemSize; i++) { headerValues.push(`${attribute}_${i}`); } } else { headerValues.push(attribute); } } string = headerValues.join(', ') + '\n'; for (let i = 0; i < points.numPoints; i++) { let values = []; for (let attribute of attributes) { let itemSize = points.data[attribute].length / points.numPoints; let value = points.data[attribute] .subarray(itemSize * i, itemSize * i + itemSize) .join(', '); values.push(value); } string += values.join(', ') + '\n'; } return string; } }; class LASExporter { static toLAS (points) { // TODO Unused: let string = ''; let boundingBox = points.boundingBox; let offset = boundingBox.min.clone(); let diagonal = boundingBox.min.distanceTo(boundingBox.max); let scale = new Vector3(0.001, 0.001, 0.001); if (diagonal > 1000 * 1000) { scale = new Vector3(0.01, 0.01, 0.01); } else { scale = new Vector3(0.001, 0.001, 0.001); } let setString = function (string, offset, buffer) { let view = new Uint8Array(buffer); for (let i = 0; i < string.length; i++) { let charCode = string.charCodeAt(i); view[offset + i] = charCode; } }; let buffer = new ArrayBuffer(227 + 28 * points.numPoints); let view = new DataView(buffer); let u8View = new Uint8Array(buffer); // let u16View = new Uint16Array(buffer); setString('LASF', 0, buffer); u8View[24] = 1; u8View[25] = 2; // system identifier o:26 l:32 // generating software o:58 l:32 setString('Potree 1.7', 58, buffer); // file creation day of year o:90 l:2 // file creation year o:92 l:2 // header size o:94 l:2 view.setUint16(94, 227, true); // offset to point data o:96 l:4 view.setUint32(96, 227, true); // number of letiable length records o:100 l:4 // point data record format 104 1 u8View[104] = 2; // point data record length 105 2 view.setUint16(105, 28, true); // number of point records 107 4 view.setUint32(107, points.numPoints, true); // number of points by return 111 20 // x scale factor 131 8 view.setFloat64(131, scale.x, true); // y scale factor 139 8 view.setFloat64(139, scale.y, true); // z scale factor 147 8 view.setFloat64(147, scale.z, true); // x offset 155 8 view.setFloat64(155, offset.x, true); // y offset 163 8 view.setFloat64(163, offset.y, true); // z offset 171 8 view.setFloat64(171, offset.z, true); // max x 179 8 view.setFloat64(179, boundingBox.max.x, true); // min x 187 8 view.setFloat64(187, boundingBox.min.x, true); // max y 195 8 view.setFloat64(195, boundingBox.max.y, true); // min y 203 8 view.setFloat64(203, boundingBox.min.y, true); // max z 211 8 view.setFloat64(211, boundingBox.max.z, true); // min z 219 8 view.setFloat64(219, boundingBox.min.z, true); let boffset = 227; for (let i = 0; i < points.numPoints; i++) { let px = points.data.position[3 * i + 0]; let py = points.data.position[3 * i + 1]; let pz = points.data.position[3 * i + 2]; let ux = parseInt((px - offset.x) / scale.x); let uy = parseInt((py - offset.y) / scale.y); let uz = parseInt((pz - offset.z) / scale.z); view.setUint32(boffset + 0, ux, true); view.setUint32(boffset + 4, uy, true); view.setUint32(boffset + 8, uz, true); if (points.data.intensity) { view.setUint16(boffset + 12, (points.data.intensity[i]), true); } let rt = 0; if (points.data.returnNumber) { rt += points.data.returnNumber[i]; } if (points.data.numberOfReturns) { rt += (points.data.numberOfReturns[i] << 3); } view.setUint8(boffset + 14, rt); if (points.data.classification) { view.setUint8(boffset + 15, points.data.classification[i]); } // scan angle rank // user data // point source id if (points.data.pointSourceID) { view.setUint16(boffset + 18, points.data.pointSourceID[i]); } if (points.data.rgba || points.data.color) { let rgba = points.data.rgba ?? points.data.color; view.setUint16(boffset + 20, (rgba[4 * i + 0] * 255), true); view.setUint16(boffset + 22, (rgba[4 * i + 1] * 255), true); view.setUint16(boffset + 24, (rgba[4 * i + 2] * 255), true); } boffset += 28; } return buffer; } } function copyMaterial(source, target){ for(let name of Object.keys(target.uniforms)){ target.uniforms[name].value = source.uniforms[name].value; } target.gradientTexture = source.gradientTexture; target.visibleNodesTexture = source.visibleNodesTexture; target.classificationTexture = source.classificationTexture; target.matcapTexture = source.matcapTexture; target.activeAttributeName = source.activeAttributeName; target.ranges = source.ranges; //target.updateShaderSource(); } class Batch{ constructor(geometry, material){ this.geometry = geometry; this.material = material; this.sceneNode = new Points(geometry, material); this.geometryNode = { estimatedSpacing: 1.0, geometry: geometry, }; } getLevel(){ return 0; } } class ProfileFakeOctree extends PointCloudTree{ constructor(octree){ super(); this.trueOctree = octree; this.pcoGeometry = octree.pcoGeometry; this.points = []; this.visibleNodes = []; //this.material = this.trueOctree.material; this.material = new PointCloudMaterial$1(); //this.material.copy(this.trueOctree.material); copyMaterial(this.trueOctree.material, this.material); this.material.pointSizeType = PointSizeType.FIXED; this.batchSize = 100 * 1000; this.currentBatch = null; } getAttribute(name){ return this.trueOctree.getAttribute(name); } dispose(){ for(let node of this.visibleNodes){ node.geometry.dispose(); } this.visibleNodes = []; this.currentBatch = null; this.points = []; } addPoints(data){ // since each call to addPoints can deliver very very few points, // we're going to batch them into larger buffers for efficiency. if(this.currentBatch === null){ this.currentBatch = this.createNewBatch(data); } this.points.push(data); let updateRange = { start: this.currentBatch.geometry.drawRange.count, count: 0 }; let projectedBox = new Box3(); let truePos = new Vector3(); for(let i = 0; i < data.numPoints; i++){ if(updateRange.start + updateRange.count >= this.batchSize){ // current batch full, start new batch for(let key of Object.keys(this.currentBatch.geometry.attributes)){ let attribute = this.currentBatch.geometry.attributes[key]; attribute.updateRange.offset = updateRange.start; attribute.updateRange.count = updateRange.count; attribute.needsUpdate = true; } this.currentBatch.geometry.computeBoundingBox(); this.currentBatch.geometry.computeBoundingSphere(); this.currentBatch = this.createNewBatch(data); updateRange = { start: 0, count: 0 }; } truePos.set( data.data.position[3 * i + 0] + this.trueOctree.position.x, data.data.position[3 * i + 1] + this.trueOctree.position.y, data.data.position[3 * i + 2] + this.trueOctree.position.z, ); let x = data.data.mileage[i]; let y = 0; let z = truePos.z; projectedBox.expandByPoint(new Vector3(x, y, z)); let index = updateRange.start + updateRange.count; let geometry = this.currentBatch.geometry; for(let attributeName of Object.keys(data.data)){ let source = data.data[attributeName]; let target = geometry.attributes[attributeName]; let numElements = target.itemSize; for(let item = 0; item < numElements; item++){ target.array[numElements * index + item] = source[numElements * i + item]; } } { let position = geometry.attributes.position; position.array[3 * index + 0] = x; position.array[3 * index + 1] = y; position.array[3 * index + 2] = z; } updateRange.count++; this.currentBatch.geometry.drawRange.count++; } for(let key of Object.keys(this.currentBatch.geometry.attributes)){ let attribute = this.currentBatch.geometry.attributes[key]; attribute.updateRange.offset = updateRange.start; attribute.updateRange.count = updateRange.count; attribute.needsUpdate = true; } data.projectedBox = projectedBox; this.projectedBox = this.points.reduce( (a, i) => a.union(i.projectedBox), new Box3()); } createNewBatch(data){ let geometry = new BufferGeometry(); // create new batches with batch_size elements of the same type as the attribute for(let attributeName of Object.keys(data.data)){ let buffer = data.data[attributeName]; let numElements = buffer.length / data.numPoints; // 3 for pos, 4 for col, 1 for scalars let constructor = buffer.constructor; let normalized = false; if(this.trueOctree.root.sceneNode){ if(this.trueOctree.root.sceneNode.geometry.attributes[attributeName]){ normalized = this.trueOctree.root.sceneNode.geometry.attributes[attributeName].normalized; } } let batchBuffer = new constructor(numElements * this.batchSize); let bufferAttribute = new BufferAttribute(batchBuffer, numElements, normalized); bufferAttribute.potree = { range: [0, 1], }; geometry.setAttribute(attributeName, bufferAttribute); } geometry.drawRange.start = 0; geometry.drawRange.count = 0; let batch = new Batch(geometry, this.material); this.visibleNodes.push(batch); return batch; } computeVisibilityTextureData(){ let data = new Uint8Array(this.visibleNodes.length * 4); let offsets = new Map(); for(let i = 0; i < this.visibleNodes.length; i++){ let node = this.visibleNodes[i]; offsets[node] = i; } return { data: data, offsets: offsets, }; } } class ProfileWindow extends EventDispatcher { constructor (viewer) { super(); this.viewer = viewer; this.elRoot = $('#profile_window'); this.renderArea = this.elRoot.find('#profileCanvasContainer'); this.svg = d3.select('svg#profileSVG'); this.mouseIsDown = false; this.projectedBox = new Box3(); this.pointclouds = new Map(); this.numPoints = 0; this.lastAddPointsTimestamp = undefined; this.mouse = new Vector2(0, 0); this.scale = new Vector3(1, 1, 1); this.autoFitEnabled = true; // completely disable/enable this.autoFit = false; // internal let cwIcon = `${exports.resourcePath}/icons/arrow_cw.svg`; $('#potree_profile_rotate_cw').attr('src', cwIcon); let ccwIcon = `${exports.resourcePath}/icons/arrow_ccw.svg`; $('#potree_profile_rotate_ccw').attr('src', ccwIcon); let forwardIcon = `${exports.resourcePath}/icons/arrow_up.svg`; $('#potree_profile_move_forward').attr('src', forwardIcon); let backwardIcon = `${exports.resourcePath}/icons/arrow_down.svg`; $('#potree_profile_move_backward').attr('src', backwardIcon); let dxf2DIcon = `${exports.resourcePath}/icons/file_dxf_2d.svg`; $('#potree_download_dxf2D_icon').attr('src', dxf2DIcon); let dxf3DIcon = `${exports.resourcePath}/icons/file_dxf_3d.svg`; $('#potree_download_dxf3D_icon').attr('src', dxf3DIcon); let csvIcon = `${exports.resourcePath}/icons/file_csv_2d.svg`; $('#potree_download_csv_icon').attr('src', csvIcon); let lasIcon = `${exports.resourcePath}/icons/file_las_3d.svg`; $('#potree_download_las_icon').attr('src', lasIcon); let closeIcon = `${exports.resourcePath}/icons/close.svg`; $('#closeProfileContainer').attr("src", closeIcon); this.initTHREE(); this.initSVG(); this.initListeners(); this.pRenderer = new Renderer(this.renderer); this.elRoot.i18n(); } initListeners () { $(window).resize(() => { if (this.enabled) { this.render(); } }); this.renderArea.mousedown(e => { this.mouseIsDown = true; }); this.renderArea.mouseup(e => { this.mouseIsDown = false; }); let viewerPickSphereSizeHandler = () => { let camera = this.viewer.scene.getActiveCamera(); let domElement = this.viewer.renderer.domElement; let distance = this.viewerPickSphere.position.distanceTo(camera.position); let pr = Utils.projectedRadius(1, camera, distance, domElement.clientWidth, domElement.clientHeight); let scale = (10 / pr); this.viewerPickSphere.scale.set(scale, scale, scale); }; this.renderArea.mousemove(e => { if (this.pointclouds.size === 0) { return; } let rect = this.renderArea[0].getBoundingClientRect(); let x = e.clientX - rect.left; let y = e.clientY - rect.top; let newMouse = new Vector2(x, y); if (this.mouseIsDown) { // DRAG this.autoFit = false; this.lastDrag = new Date().getTime(); let cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)]; let ncPos = [this.scaleX.invert(newMouse.x), this.scaleY.invert(newMouse.y)]; this.camera.position.x -= ncPos[0] - cPos[0]; this.camera.position.z -= ncPos[1] - cPos[1]; this.render(); } else if (this.pointclouds.size > 0) { // FIND HOVERED POINT let radius = Math.abs(this.scaleX.invert(0) - this.scaleX.invert(40)); let mileage = this.scaleX.invert(newMouse.x); let elevation = this.scaleY.invert(newMouse.y); let closest = this.selectPoint(mileage, elevation, radius); if (closest) { let point = closest.point; let position = new Float64Array([ point.position[0] + closest.pointcloud.position.x, point.position[1] + closest.pointcloud.position.y, point.position[2] + closest.pointcloud.position.z ]); this.elRoot.find('#profileSelectionProperties').fadeIn(200); this.pickSphere.visible = true; this.pickSphere.scale.set(0.5 * radius, 0.5 * radius, 0.5 * radius); this.pickSphere.position.set(point.mileage, 0, position[2]); this.viewerPickSphere.position.set(...position); if(!this.viewer.scene.scene.children.includes(this.viewerPickSphere)){ this.viewer.scene.scene.add(this.viewerPickSphere); if(!this.viewer.hasEventListener("update", viewerPickSphereSizeHandler)){ this.viewer.addEventListener("update", viewerPickSphereSizeHandler); } } let info = this.elRoot.find('#profileSelectionProperties'); let html = ''; for (let attributeName of Object.keys(point)) { let value = point[attributeName]; let attribute = closest.pointcloud.getAttribute(attributeName); let transform = value => value; if(attribute && attribute.type.size > 4){ let range = attribute.initialRange; let scale = 1 / (range[1] - range[0]); let offset = range[0]; transform = value => value / scale + offset; } if (attributeName === 'position') { let values = [...position].map(v => Utils.addCommas(v.toFixed(3))); html += ` `; } else if (attributeName === 'rgba') { html += ` `; } else if (attributeName === 'normal') { continue; } else if (attributeName === 'mileage') { html += ` `; } else { html += ` `; } } html += '
      x ${values[0]}
      y ${values[1]}
      z ${values[2]}
      ${attributeName} ${value.join(', ')}
      ${attributeName} ${value.toFixed(3)}
      ${attributeName} ${transform(value)}
      '; info.html(html); this.selectedPoint = point; } else { // this.pickSphere.visible = false; // this.selectedPoint = null; this.viewer.scene.scene.add(this.viewerPickSphere); let index = this.viewer.scene.scene.children.indexOf(this.viewerPickSphere); if(index >= 0){ this.viewer.scene.scene.children.splice(index, 1); } this.viewer.removeEventListener("update", viewerPickSphereSizeHandler); } this.render(); } this.mouse.copy(newMouse); }); let onWheel = e => { this.autoFit = false; let delta = 0; if (e.wheelDelta !== undefined) { // WebKit / Opera / Explorer 9 delta = e.wheelDelta; } else if (e.detail !== undefined) { // Firefox delta = -e.detail; } let ndelta = Math.sign(delta); let cPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)]; if (ndelta > 0) { // + 10% this.scale.multiplyScalar(1.1); } else { // - 10% this.scale.multiplyScalar(100 / 110); } this.updateScales(); let ncPos = [this.scaleX.invert(this.mouse.x), this.scaleY.invert(this.mouse.y)]; this.camera.position.x -= ncPos[0] - cPos[0]; this.camera.position.z -= ncPos[1] - cPos[1]; this.render(); this.updateScales(); }; $(this.renderArea)[0].addEventListener('mousewheel', onWheel, false); $(this.renderArea)[0].addEventListener('DOMMouseScroll', onWheel, false); // Firefox $('#closeProfileContainer').click(() => { this.hide(); }); let getProfilePoints = (truePosition) => { let points = new Points$1(); for(let [pointcloud, entry] of this.pointclouds){ for(let pointSet of entry.points){ let originPos = pointSet.data.position; let truePointPosition = new Float64Array(originPos); for(let i = 0; i < pointSet.numPoints; i++){ if (truePosition === true) { truePointPosition[3 * i + 0] += pointcloud.position.x; truePointPosition[3 * i + 1] += pointcloud.position.y; } truePointPosition[3 * i + 2] += pointcloud.position.z; } pointSet.data.position = truePointPosition; points.add(pointSet); pointSet.data.position = originPos; } } return points; }; $('#potree_download_dxf2D_icon').click(() => { const points = getProfilePoints(); const string = DXFProfileExporter.toString(points, true); const blob = new Blob([string], {type: "text/string"}); $('#potree_download_profile_dxf2D_link').attr('href', URL.createObjectURL(blob)); }); $('#potree_download_dxf3D_icon').click(() => { const points = getProfilePoints(true); const string = DXFProfileExporter.toString(points); const blob = new Blob([string], {type: "text/string"}); $('#potree_download_profile_dxf3D_link').attr('href', URL.createObjectURL(blob)); }); $('#potree_download_csv_icon').click(() => { let points = getProfilePoints(true); let string = CSVExporter.toString(points); let blob = new Blob([string], {type: "text/string"}); $('#potree_download_profile_ortho_link').attr('href', URL.createObjectURL(blob)); }); $('#potree_download_las_icon').click(() => { let points = getProfilePoints(true); let buffer = LASExporter.toLAS(points); let blob = new Blob([buffer], {type: "application/octet-binary"}); $('#potree_download_profile_link').attr('href', URL.createObjectURL(blob)); }); } selectPoint (mileage, elevation, radius) { let closest = { distance: Infinity, pointcloud: null, points: null, index: null }; let pointBox = new Box2( new Vector2(mileage - radius, elevation - radius), new Vector2(mileage + radius, elevation + radius)); let numTested = 0; let numSkipped = 0; let numTestedPoints = 0; let numSkippedPoints = 0; for (let [pointcloud, entry] of this.pointclouds) { for(let points of entry.points){ let collisionBox = new Box2( new Vector2(points.projectedBox.min.x, points.projectedBox.min.z), new Vector2(points.projectedBox.max.x, points.projectedBox.max.z) ); let intersects = collisionBox.intersectsBox(pointBox); if(!intersects){ numSkipped++; numSkippedPoints += points.numPoints; continue; } numTested++; numTestedPoints += points.numPoints; for (let i = 0; i < points.numPoints; i++) { let m = points.data.mileage[i] - mileage; let e = points.data.position[3 * i + 2] - elevation + pointcloud.position.z; let r = Math.sqrt(m * m + e * e); const withinDistance = r < radius && r < closest.distance; let unfilteredClass = true; if(points.data.classification){ const classification = pointcloud.material.classification; const pointClassID = points.data.classification[i]; const pointClassValue = classification[pointClassID]; if(pointClassValue && (!pointClassValue.visible || pointClassValue.color.w === 0)){ unfilteredClass = false; } } if (withinDistance && unfilteredClass) { closest = { distance: r, pointcloud: pointcloud, points: points, index: i }; } } } } //console.log(`nodes: ${numTested}, ${numSkipped} || points: ${numTestedPoints}, ${numSkippedPoints}`); if (closest.distance < Infinity) { let points = closest.points; let point = {}; let attributes = Object.keys(points.data); for (let attribute of attributes) { let attributeData = points.data[attribute]; let itemSize = attributeData.length / points.numPoints; let value = attributeData.subarray(itemSize * closest.index, itemSize * closest.index + itemSize); if (value.length === 1) { point[attribute] = value[0]; } else { point[attribute] = value; } } closest.point = point; return closest; } else { return null; } } initTHREE () { this.renderer = new WebGLRenderer({alpha: true, premultipliedAlpha: false}); this.renderer.setClearColor(0x000000, 0); this.renderer.setSize(10, 10); this.renderer.autoClear = false; this.renderArea.append($(this.renderer.domElement)); this.renderer.domElement.tabIndex = '2222'; $(this.renderer.domElement).css('width', '100%'); $(this.renderer.domElement).css('height', '100%'); { let gl = this.renderer.getContext(); if(gl.createVertexArray == null){ let extVAO = gl.getExtension('OES_vertex_array_object'); if(!extVAO){ throw new Error("OES_vertex_array_object extension not supported"); } gl.createVertexArray = extVAO.createVertexArrayOES.bind(extVAO); gl.bindVertexArray = extVAO.bindVertexArrayOES.bind(extVAO); } } this.camera = new OrthographicCamera(-1000, 1000, 1000, -1000, -1000, 1000); this.camera.up.set(0, 0, 1); this.camera.rotation.order = "ZXY"; this.camera.rotation.x = Math.PI / 2.0; this.scene = new Scene(); this.profileScene = new Scene(); let sg = new SphereGeometry(1, 16, 16); let sm = new MeshNormalMaterial(); this.pickSphere = new Mesh(sg, sm); this.scene.add(this.pickSphere); this.viewerPickSphere = new Mesh(sg, sm); } initSVG () { let width = this.renderArea[0].clientWidth; let height = this.renderArea[0].clientHeight; let marginLeft = this.renderArea[0].offsetLeft; this.svg.selectAll('*').remove(); this.scaleX = d3.scale.linear() .domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x]) .range([0, width]); this.scaleY = d3.scale.linear() .domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z]) .range([height, 0]); this.xAxis = d3.svg.axis() .scale(this.scaleX) .orient('bottom') .innerTickSize(-height) .outerTickSize(1) .tickPadding(10) .ticks(width / 50); this.yAxis = d3.svg.axis() .scale(this.scaleY) .orient('left') .innerTickSize(-width) .outerTickSize(1) .tickPadding(10) .ticks(height / 20); this.elXAxis = this.svg.append('g') .attr('class', 'x axis') .attr('transform', `translate(${marginLeft}, ${height})`) .call(this.xAxis); this.elYAxis = this.svg.append('g') .attr('class', 'y axis') .attr('transform', `translate(${marginLeft}, 0)`) .call(this.yAxis); } addPoints (pointcloud, points) { if(points.numPoints === 0){ return; } let entry = this.pointclouds.get(pointcloud); if(!entry){ entry = new ProfileFakeOctree(pointcloud); this.pointclouds.set(pointcloud, entry); this.profileScene.add(entry); let materialChanged = () => { this.render(); }; materialChanged(); pointcloud.material.addEventListener('material_property_changed', materialChanged); this.addEventListener("on_reset_once", () => { pointcloud.material.removeEventListener('material_property_changed', materialChanged); }); } entry.addPoints(points); this.projectedBox.union(entry.projectedBox); if (this.autoFit && this.autoFitEnabled) { let width = this.renderArea[0].clientWidth; let height = this.renderArea[0].clientHeight; let size = this.projectedBox.getSize(new Vector3()); let sx = width / size.x; let sy = height / size.z; let scale = Math.min(sx, sy); let center = this.projectedBox.getCenter(new Vector3()); this.scale.set(scale, scale, 1); this.camera.position.copy(center); //console.log("camera: ", this.camera.position.toArray().join(", ")); } //console.log(entry); this.render(); let numPoints = 0; for (let [key, value] of this.pointclouds.entries()) { numPoints += value.points.reduce( (a, i) => a + i.numPoints, 0); } $(`#profile_num_points`).html(Utils.addCommas(numPoints)); } reset () { this.lastReset = new Date().getTime(); this.dispatchEvent({type: "on_reset_once"}); this.removeEventListeners("on_reset_once"); this.autoFit = true; this.projectedBox = new Box3(); for(let [key, entry] of this.pointclouds){ entry.dispose(); } this.pointclouds.clear(); this.mouseIsDown = false; this.mouse.set(0, 0); if(this.autoFitEnabled){ this.scale.set(1, 1, 1); } this.pickSphere.visible = false; this.elRoot.find('#profileSelectionProperties').hide(); this.render(); } show () { this.elRoot.fadeIn(); this.enabled = true; } hide () { this.elRoot.fadeOut(); this.enabled = false; } updateScales () { let width = this.renderArea[0].clientWidth; let height = this.renderArea[0].clientHeight; let left = (-width / 2) / this.scale.x; let right = (+width / 2) / this.scale.x; let top = (+height / 2) / this.scale.y; let bottom = (-height / 2) / this.scale.y; this.camera.left = left; this.camera.right = right; this.camera.top = top; this.camera.bottom = bottom; this.camera.updateProjectionMatrix(); this.scaleX.domain([this.camera.left + this.camera.position.x, this.camera.right + this.camera.position.x]) .range([0, width]); this.scaleY.domain([this.camera.bottom + this.camera.position.z, this.camera.top + this.camera.position.z]) .range([height, 0]); let marginLeft = this.renderArea[0].offsetLeft; this.xAxis.scale(this.scaleX) .orient('bottom') .innerTickSize(-height) .outerTickSize(1) .tickPadding(10) .ticks(width / 50); this.yAxis.scale(this.scaleY) .orient('left') .innerTickSize(-width) .outerTickSize(1) .tickPadding(10) .ticks(height / 20); this.elXAxis .attr('transform', `translate(${marginLeft}, ${height})`) .call(this.xAxis); this.elYAxis .attr('transform', `translate(${marginLeft}, 0)`) .call(this.yAxis); } requestScaleUpdate(){ let threshold = 100; let allowUpdate = ((this.lastReset === undefined) || (this.lastScaleUpdate === undefined)) || ((new Date().getTime() - this.lastReset) > threshold && (new Date().getTime() - this.lastScaleUpdate) > threshold); if(allowUpdate){ this.updateScales(); this.lastScaleUpdate = new Date().getTime(); this.scaleUpdatePending = false; }else if(!this.scaleUpdatePending) { setTimeout(this.requestScaleUpdate.bind(this), 100); this.scaleUpdatePending = true; } } render () { let width = this.renderArea[0].clientWidth; let height = this.renderArea[0].clientHeight; let {renderer, pRenderer, camera, profileScene, scene} = this; let {scaleX, pickSphere} = this; renderer.setSize(width, height); renderer.setClearColor(0x000000, 0); renderer.clear(true, true, false); for(let pointcloud of this.pointclouds.keys()){ let source = pointcloud.material; let target = this.pointclouds.get(pointcloud).material; copyMaterial(source, target); target.size = 2; } pRenderer.render(profileScene, camera, null); let radius = Math.abs(scaleX.invert(0) - scaleX.invert(5)); if (radius === 0) { pickSphere.visible = false; } else { pickSphere.scale.set(radius, radius, radius); pickSphere.visible = true; } renderer.render(scene, camera); this.requestScaleUpdate(); } }; class ProfileWindowController { constructor (viewer) { this.viewer = viewer; this.profileWindow = viewer.profileWindow; this.profile = null; this.numPoints = 0; this.threshold = 60 * 1000; this.rotateAmount = 10; this.scheduledRecomputeTime = null; this.enabled = true; this.requests = []; this._recompute = () => { this.recompute(); }; this.viewer.addEventListener("scene_changed", e => { e.oldScene.removeEventListener("pointcloud_added", this._recompute); e.scene.addEventListener("pointcloud_added", this._recompute); }); this.viewer.scene.addEventListener("pointcloud_added", this._recompute); $("#potree_profile_rotate_amount").val(parseInt(this.rotateAmount)); $("#potree_profile_rotate_amount").on("input", (e) => { const str = $("#potree_profile_rotate_amount").val(); if(!isNaN(str)){ const value = parseFloat(str); this.rotateAmount = value; $("#potree_profile_rotate_amount").css("background-color", ""); }else { $("#potree_profile_rotate_amount").css("background-color", "#ff9999"); } }); const rotate = (radians) => { const profile = this.profile; const points = profile.points; const start = points[0]; const end = points[points.length - 1]; const center = start.clone().add(end).multiplyScalar(0.5); const mMoveOrigin = new Matrix4().makeTranslation(-center.x, -center.y, -center.z); const mRotate = new Matrix4().makeRotationZ(radians); const mMoveBack = new Matrix4().makeTranslation(center.x, center.y, center.z); //const transform = mMoveOrigin.multiply(mRotate).multiply(mMoveBack); const transform = mMoveBack.multiply(mRotate).multiply(mMoveOrigin); const rotatedPoints = points.map( point => point.clone().applyMatrix4(transform) ); this.profileWindow.autoFitEnabled = false; for(let i = 0; i < points.length; i++){ profile.setPosition(i, rotatedPoints[i]); } }; $("#potree_profile_rotate_cw").click( () => { const radians = MathUtils.degToRad(this.rotateAmount); rotate(-radians); }); $("#potree_profile_rotate_ccw").click( () => { const radians = MathUtils.degToRad(this.rotateAmount); rotate(radians); }); $("#potree_profile_move_forward").click( () => { const profile = this.profile; const points = profile.points; const start = points[0]; const end = points[points.length - 1]; const dir = end.clone().sub(start).normalize(); const up = new Vector3(0, 0, 1); const forward = up.cross(dir); const move = forward.clone().multiplyScalar(profile.width / 2); this.profileWindow.autoFitEnabled = false; for(let i = 0; i < points.length; i++){ profile.setPosition(i, points[i].clone().add(move)); } }); $("#potree_profile_move_backward").click( () => { const profile = this.profile; const points = profile.points; const start = points[0]; const end = points[points.length - 1]; const dir = end.clone().sub(start).normalize(); const up = new Vector3(0, 0, 1); const forward = up.cross(dir); const move = forward.clone().multiplyScalar(-profile.width / 2); this.profileWindow.autoFitEnabled = false; for(let i = 0; i < points.length; i++){ profile.setPosition(i, points[i].clone().add(move)); } }); } setProfile (profile) { if (this.profile !== null && this.profile !== profile) { this.profile.removeEventListener('marker_moved', this._recompute); this.profile.removeEventListener('marker_added', this._recompute); this.profile.removeEventListener('marker_removed', this._recompute); this.profile.removeEventListener('width_changed', this._recompute); } this.profile = profile; { this.profile.addEventListener('marker_moved', this._recompute); this.profile.addEventListener('marker_added', this._recompute); this.profile.addEventListener('marker_removed', this._recompute); this.profile.addEventListener('width_changed', this._recompute); } this.recompute(); } reset () { this.profileWindow.reset(); this.numPoints = 0; if (this.profile) { for (let request of this.requests) { request.cancel(); } } } progressHandler (pointcloud, progress) { for (let segment of progress.segments) { this.profileWindow.addPoints(pointcloud, segment.points); this.numPoints += segment.points.numPoints; } } cancel () { for (let request of this.requests) { request.cancel(); // request.finishLevelThenCancel(); } this.requests = []; }; finishLevelThenCancel(){ for (let request of this.requests) { request.finishLevelThenCancel(); } this.requests = []; } recompute () { if (!this.profile) { return; } if (this.scheduledRecomputeTime !== null && this.scheduledRecomputeTime > new Date().getTime()) { return; } else { this.scheduledRecomputeTime = new Date().getTime() + 100; } this.scheduledRecomputeTime = null; this.reset(); for (let pointcloud of this.viewer.scene.pointclouds.filter(p => p.visible)) { let request = pointcloud.getPointsInProfile(this.profile, null, { 'onProgress': (event) => { if (!this.enabled) { return; } this.progressHandler(pointcloud, event.points); if (this.numPoints > this.threshold) { this.finishLevelThenCancel(); } }, 'onFinish': (event) => { if (!this.enabled) { } }, 'onCancel': () => { if (!this.enabled) { } } }); this.requests.push(request); } } }; /** * * @author sigeom sa / http://sigeom.ch * @author Ioda-Net Sàrl / https://www.ioda-net.ch/ * @author Markus Schütz / http://potree.org * */ class GeoJSONExporter{ static measurementToFeatures (measurement) { let coords = measurement.points.map(e => e.position.toArray()); let features = []; if (coords.length === 1) { let feature = { type: 'Feature', geometry: { type: 'Point', coordinates: coords[0] }, properties: { name: measurement.name } }; features.push(feature); } else if (coords.length > 1 && !measurement.closed) { let object = { 'type': 'Feature', 'geometry': { 'type': 'LineString', 'coordinates': coords }, 'properties': { name: measurement.name } }; features.push(object); } else if (coords.length > 1 && measurement.closed) { let object = { 'type': 'Feature', 'geometry': { 'type': 'Polygon', 'coordinates': [[...coords, coords[0]]] }, 'properties': { name: measurement.name } }; features.push(object); } if (measurement.showDistances) { measurement.edgeLabels.forEach((label) => { let labelPoint = { type: 'Feature', geometry: { type: 'Point', coordinates: label.position.toArray() }, properties: { distance: label.text } }; features.push(labelPoint); }); } if (measurement.showArea) { let point = measurement.areaLabel.position; let labelArea = { type: 'Feature', geometry: { type: 'Point', coordinates: point.toArray() }, properties: { area: measurement.areaLabel.text } }; features.push(labelArea); } return features; } static toString (measurements) { if (!(measurements instanceof Array)) { measurements = [measurements]; } measurements = measurements.filter(m => m instanceof Measure); let features = []; for (let measure of measurements) { let f = GeoJSONExporter.measurementToFeatures(measure); features = features.concat(f); } let geojson = { 'type': 'FeatureCollection', 'features': features }; return JSON.stringify(geojson, null, '\t'); } } /** * * @author sigeom sa / http://sigeom.ch * @author Ioda-Net Sàrl / https://www.ioda-net.ch/ * @author Markus Schuetz / http://potree.org * */ class DXFExporter { static measurementPointSection (measurement) { let position = measurement.points[0].position; if (!position) { return ''; } let dxfSection = `0 CIRCLE 8 layer_point 10 ${position.x} 20 ${position.y} 30 ${position.z} 40 1.0 `; return dxfSection; } static measurementPolylineSection (measurement) { // bit code for polygons/polylines: // https://www.autodesk.com/techpubs/autocad/acad2000/dxf/polyline_dxf_06.htm let geomCode = 8; if (measurement.closed) { geomCode += 1; } let dxfSection = `0 POLYLINE 8 layer_polyline 62 1 66 1 10 0.0 20 0.0 30 0.0 70 ${geomCode} `; let xMax = 0.0; let yMax = 0.0; let zMax = 0.0; for (let point of measurement.points) { point = point.position; xMax = Math.max(xMax, point.x); yMax = Math.max(yMax, point.y); zMax = Math.max(zMax, point.z); dxfSection += `0 VERTEX 8 0 10 ${point.x} 20 ${point.y} 30 ${point.z} 70 32 `; } dxfSection += `0 SEQEND `; return dxfSection; } static measurementSection (measurement) { // if(measurement.points.length <= 1){ // return ""; // } if (measurement.points.length === 0) { return ''; } else if (measurement.points.length === 1) { return DXFExporter.measurementPointSection(measurement); } else if (measurement.points.length >= 2) { return DXFExporter.measurementPolylineSection(measurement); } } static toString(measurements){ if (!(measurements instanceof Array)) { measurements = [measurements]; } measurements = measurements.filter(m => m instanceof Measure); let points = measurements.filter(m => (m instanceof Measure)) .map(m => m.points) .reduce((a, v) => a.concat(v)) .map(p => p.position); let min = new Vector3(Infinity, Infinity, Infinity); let max = new Vector3(-Infinity, -Infinity, -Infinity); for (let point of points) { min.min(point); max.max(point); } let dxfHeader = `999 DXF created from potree 0 SECTION 2 HEADER 9 $ACADVER 1 AC1006 9 $INSBASE 10 0.0 20 0.0 30 0.0 9 $EXTMIN 10 ${min.x} 20 ${min.y} 30 ${min.z} 9 $EXTMAX 10 ${max.x} 20 ${max.y} 30 ${max.z} 0 ENDSEC `; let dxfBody = `0 SECTION 2 ENTITIES `; for (let measurement of measurements) { dxfBody += DXFExporter.measurementSection(measurement); } dxfBody += `0 ENDSEC `; let dxf = dxfHeader + dxfBody + '0\nEOF'; return dxf; } } class MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ this.viewer = viewer; this.measurement = measurement; this.propertiesPanel = propertiesPanel; this._update = () => { this.update(); }; } createCoordinatesTable(points){ let table = $(`
      x y z
      `); let copyIconPath = Potree.resourcePath + '/icons/copy.svg'; for (let point of points) { let x = Utils.addCommas(point.x.toFixed(3)); let y = Utils.addCommas(point.y.toFixed(3)); let z = Utils.addCommas(point.z.toFixed(3)); let row = $(` ${x} ${y} ${z} `); this.elCopy = row.find("img[name=copy]"); this.elCopy.click( () => { let msg = point.toArray().map(c => c.toFixed(3)).join(", "); Utils.clipboardCopy(msg); this.viewer.postMessage( `Copied value to clipboard:
      '${msg}'`, {duration: 3000}); }); table.append(row); } return table; }; createAttributesTable(){ let elTable = $('
      '); let point = this.measurement.points[0]; for(let attributeName of Object.keys(point)){ if(attributeName === "position"){ }else if(attributeName === "rgba"){ let color = point.rgba; let text = color.join(', '); elTable.append($(` rgb ${text} `)); }else { let value = point[attributeName]; let text = value.join(', '); elTable.append($(` ${attributeName} ${text} `)); } } return elTable; } update(){ } }; class DistancePanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; this.elContent = $(`

      `); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeMeasurement(measurement); }); this.elMakeProfile = this.elContent.find("input[name=make_profile]"); this.elMakeProfile.click( () => { //measurement.points; const profile = new Profile(); profile.name = measurement.name; profile.width = measurement.getTotalDistance() / 50; for(const point of measurement.points){ profile.addMarker(point.position.clone()); } this.viewer.scene.addProfile(profile); }); this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); this.update(); } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); let positions = this.measurement.points.map(p => p.position); let distances = []; for (let i = 0; i < positions.length - 1; i++) { let d = positions[i].distanceTo(positions[i + 1]); distances.push(d.toFixed(3)); } let totalDistance = this.measurement.getTotalDistance().toFixed(3); let elDistanceTable = this.elContent.find(`#distances_table`); elDistanceTable.empty(); for (let i = 0; i < distances.length; i++) { let label = (i === 0) ? 'Distances: ' : ''; let distance = distances[i]; let elDistance = $(` ${label} ${distance} `); elDistanceTable.append(elDistance); } let elTotal = $(` Total: ${totalDistance} `); elDistanceTable.append(elTotal); } }; class PointPanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; this.elContent = $(`

      `); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeMeasurement(measurement); }); this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); this.update(); } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); let elAttributesContainer = this.elContent.find('.attributes_table_container'); elAttributesContainer.empty(); elAttributesContainer.append(this.createAttributesTable()); } }; class AreaPanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; this.elContent = $(`

      Area:
      `); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeMeasurement(measurement); }); this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); this.update(); } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); let elArea = this.elContent.find(`#measurement_area`); elArea.html(this.measurement.getArea().toFixed(3)); } }; class AnglePanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; this.elContent = $(`

      \u03b1 \u03b2 \u03b3
      `); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeMeasurement(measurement); }); this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); this.update(); } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); let angles = []; for(let i = 0; i < this.measurement.points.length; i++){ angles.push(this.measurement.getAngle(i) * (180.0 / Math.PI)); } angles = angles.map(a => a.toFixed(1) + '\u00B0'); let elAlpha = this.elContent.find(`#angle_cell_alpha`); let elBetta = this.elContent.find(`#angle_cell_betta`); let elGamma = this.elContent.find(`#angle_cell_gamma`); elAlpha.html(angles[0]); elBetta.html(angles[1]); elGamma.html(angles[2]); } }; class CirclePanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; this.elContent = $(`

      `); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeMeasurement(measurement); }); this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); this.update(); } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); const elInfos = this.elContent.find(`#infos_table`); if(this.measurement.points.length !== 3){ elInfos.empty(); return; } const A = this.measurement.points[0].position; const B = this.measurement.points[1].position; const C = this.measurement.points[2].position; const center = Potree.Utils.computeCircleCenter(A, B, C); const radius = center.distanceTo(A); const circumference = 2 * Math.PI * radius; const format = (number) => { return Potree.Utils.addCommas(number.toFixed(3)); }; const txtCenter = `${format(center.x)} ${format(center.y)} ${format(center.z)}`; const txtRadius = format(radius); const txtCircumference = format(circumference); const thStyle = `style="text-align: left"`; const tdStyle = `style="width: 100%; padding: 5px;"`; elInfos.html(` Center: ${txtCenter} Radius: ${txtRadius} Circumference: ${txtCircumference} `); } }; class HeightPanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; this.elContent = $(`

      Height:
      `); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeMeasurement(measurement); }); this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); this.update(); } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points.map(p => p.position))); { let points = this.measurement.points; let sorted = points.slice().sort((a, b) => a.position.z - b.position.z); let lowPoint = sorted[0].position.clone(); let highPoint = sorted[sorted.length - 1].position.clone(); let min = lowPoint.z; let max = highPoint.z; let height = max - min; height = height.toFixed(3); this.elHeightLabel = this.elContent.find(`#height_label`); this.elHeightLabel.html(`Height: ${height}`); } } }; class VolumePanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let copyIconPath = Potree.resourcePath + '/icons/copy.svg'; let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; let lblLengthText = new Map([ [BoxVolume, "length"], [SphereVolume, "rx"], ]).get(measurement.constructor); let lblWidthText = new Map([ [BoxVolume, "width"], [SphereVolume, "ry"], ]).get(measurement.constructor); let lblHeightText = new Map([ [BoxVolume, "height"], [SphereVolume, "rz"], ]).get(measurement.constructor); this.elContent = $(`
      \u03b1 \u03b2 \u03b3
      ${lblLengthText} ${lblWidthText} ${lblHeightText}

      Volume:
    • `); { // download this.elDownloadButton = this.elContent.find("input[name=download_volume]"); if(this.propertiesPanel.viewer.server){ this.elDownloadButton.click(() => this.download()); } else { this.elDownloadButton.hide(); } } this.elCopyRotation = this.elContent.find("img[name=copyRotation]"); this.elCopyRotation.click( () => { let rotation = this.measurement.rotation.toArray().slice(0, 3); let msg = rotation.map(c => c.toFixed(3)).join(", "); Utils.clipboardCopy(msg); this.viewer.postMessage( `Copied value to clipboard:
      '${msg}'`, {duration: 3000}); }); this.elCopyScale = this.elContent.find("img[name=copyScale]"); this.elCopyScale.click( () => { let scale = this.measurement.scale.toArray(); let msg = scale.map(c => c.toFixed(3)).join(", "); Utils.clipboardCopy(msg); this.viewer.postMessage( `Copied value to clipboard:
      '${msg}'`, {duration: 3000}); }); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeVolume(measurement); }); this.elContent.find("#volume_reset_orientation").click(() => { measurement.rotation.set(0, 0, 0); }); this.elContent.find("#volume_make_uniform").click(() => { let mean = (measurement.scale.x + measurement.scale.y + measurement.scale.z) / 3; measurement.scale.set(mean, mean, mean); }); this.elCheckClip = this.elContent.find('#volume_clip'); this.elCheckClip.click(event => { this.measurement.clip = event.target.checked; }); this.elCheckShow = this.elContent.find('#volume_show'); this.elCheckShow.click(event => { this.measurement.visible = event.target.checked; }); this.propertiesPanel.addVolatileListener(measurement, "position_changed", this._update); this.propertiesPanel.addVolatileListener(measurement, "orientation_changed", this._update); this.propertiesPanel.addVolatileListener(measurement, "scale_changed", this._update); this.propertiesPanel.addVolatileListener(measurement, "clip_changed", this._update); this.update(); } async download(){ let clipBox = this.measurement; let regions = []; //for(let clipBox of boxes){ { let toClip = clipBox.matrixWorld; let px = new Vector3(+0.5, 0, 0).applyMatrix4(toClip); let nx = new Vector3(-0.5, 0, 0).applyMatrix4(toClip); let py = new Vector3(0, +0.5, 0).applyMatrix4(toClip); let ny = new Vector3(0, -0.5, 0).applyMatrix4(toClip); let pz = new Vector3(0, 0, +0.5).applyMatrix4(toClip); let nz = new Vector3(0, 0, -0.5).applyMatrix4(toClip); let pxN = new Vector3().subVectors(nx, px).normalize(); let nxN = pxN.clone().multiplyScalar(-1); let pyN = new Vector3().subVectors(ny, py).normalize(); let nyN = pyN.clone().multiplyScalar(-1); let pzN = new Vector3().subVectors(nz, pz).normalize(); let nzN = pzN.clone().multiplyScalar(-1); let planes = [ new Plane().setFromNormalAndCoplanarPoint(pxN, px), new Plane().setFromNormalAndCoplanarPoint(nxN, nx), new Plane().setFromNormalAndCoplanarPoint(pyN, py), new Plane().setFromNormalAndCoplanarPoint(nyN, ny), new Plane().setFromNormalAndCoplanarPoint(pzN, pz), new Plane().setFromNormalAndCoplanarPoint(nzN, nz), ]; let planeQueryParts = []; for(let plane of planes){ let part = [plane.normal.toArray(), plane.constant].join(","); part = `[${part}]`; planeQueryParts.push(part); } let region = "[" + planeQueryParts.join(",") + "]"; regions.push(region); } let regionsArg = regions.join(","); let pointcloudArgs = []; for(let pointcloud of this.viewer.scene.pointclouds){ if(!pointcloud.visible){ continue; } let offset = pointcloud.pcoGeometry.offset.clone(); let negateOffset = new Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray()); let matrixWorld = pointcloud.matrixWorld; let transform = new Matrix4().multiplyMatrices(matrixWorld, negateOffset); let path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`; let arg = { path: path, transform: transform.elements, }; let argString = JSON.stringify(arg); pointcloudArgs.push(argString); } let pointcloudsArg = pointcloudArgs.join(","); let elMessage = this.elContent.find("div[name=download_message]"); let error = (message) => { elMessage.html(`
      ERROR: ${message}
      `); }; let info = (message) => { elMessage.html(`${message}`); }; let handle = null; { // START FILTER let url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]®ions=[${regionsArg}]`; //console.log(url); info("estimating results ..."); let response = await fetch(url); let jsResponse = await response.json(); //console.log(jsResponse); if(!jsResponse.handle){ error(jsResponse.message); return; }else { handle = jsResponse.handle; } } { // WAIT, CHECK PROGRESS, HANDLE FINISH let url = `${viewer.server}/check_regions_filter?handle=${handle}`; let sleep = (function(duration){ return new Promise( (res, rej) => { setTimeout(() => { res(); }, duration); }); }); let handleFiltering = (jsResponse) => { let {progress, estimate} = jsResponse; let progressFract = progress["processed points"] / estimate.points; let progressPercents = parseInt(progressFract * 100); info(`progress: ${progressPercents}%`); }; let handleFinish = (jsResponse) => { let message = "downloads ready:
      "; message += "
        "; for(let i = 0; i < jsResponse.pointclouds.length; i++){ let url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`; message += `
      • result_${i}.las
      • \n`; } let reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`; message += `
      • report.json
      • \n`; message += "
      "; info(message); }; let handleUnexpected = (jsResponse) => { let message = `Unexpected Response.
      status: ${jsResponse.status}
      message: ${jsResponse.message}`; info(message); }; let handleError = (jsResponse) => { let message = `ERROR: ${jsResponse.message}`; error(message); throw new Error(message); }; let start = Date.now(); while(true){ let response = await fetch(url); let jsResponse = await response.json(); if(jsResponse.status === "ERROR"){ handleError(jsResponse); }else if(jsResponse.status === "FILTERING"){ handleFiltering(jsResponse); }else if(jsResponse.status === "FINISHED"){ handleFinish(jsResponse); break; }else { handleUnexpected(jsResponse); } let durationS = (Date.now() - start) / 1000; let sleepAmountMS = durationS < 10 ? 100 : 1000; await sleep(sleepAmountMS); } } } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable([this.measurement.position])); { let angles = this.measurement.rotation.toVector3(); angles = angles.toArray(); //angles = [angles.z, angles.x, angles.y]; angles = angles.map(v => 180 * v / Math.PI); angles = angles.map(a => a.toFixed(1) + '\u00B0'); let elAlpha = this.elContent.find(`#angle_cell_alpha`); let elBetta = this.elContent.find(`#angle_cell_betta`); let elGamma = this.elContent.find(`#angle_cell_gamma`); elAlpha.html(angles[0]); elBetta.html(angles[1]); elGamma.html(angles[2]); } { let dimensions = this.measurement.scale.toArray(); dimensions = dimensions.map(v => Utils.addCommas(v.toFixed(2))); let elLength = this.elContent.find(`#cell_length`); let elWidth = this.elContent.find(`#cell_width`); let elHeight = this.elContent.find(`#cell_height`); elLength.html(dimensions[0]); elWidth.html(dimensions[1]); elHeight.html(dimensions[2]); } { let elVolume = this.elContent.find(`#measurement_volume`); let volume = this.measurement.getVolume(); elVolume.html(Utils.addCommas(volume.toFixed(2))); } this.elCheckClip.prop("checked", this.measurement.clip); this.elCheckShow.prop("checked", this.measurement.visible); } }; class ProfilePanel extends MeasurePanel{ constructor(viewer, measurement, propertiesPanel){ super(viewer, measurement, propertiesPanel); let removeIconPath = Potree.resourcePath + '/icons/remove.svg'; this.elContent = $(`

      Width:

    • `); this.elRemove = this.elContent.find("img[name=remove]"); this.elRemove.click( () => { this.viewer.scene.removeProfile(measurement); }); { // download this.elDownloadButton = this.elContent.find(`input[name=download_profile]`); if(this.propertiesPanel.viewer.server){ this.elDownloadButton.click(() => this.download()); } else { this.elDownloadButton.hide(); } } { // width spinner let elWidthSlider = this.elContent.find(`#sldProfileWidth`); elWidthSlider.spinner({ min: 0, max: 10 * 1000 * 1000, step: 0.01, numberFormat: 'n', start: () => {}, spin: (event, ui) => { let value = elWidthSlider.spinner('value'); measurement.setWidth(value); }, change: (event, ui) => { let value = elWidthSlider.spinner('value'); measurement.setWidth(value); }, stop: (event, ui) => { let value = elWidthSlider.spinner('value'); measurement.setWidth(value); }, incremental: (count) => { let value = elWidthSlider.spinner('value'); let step = elWidthSlider.spinner('option', 'step'); let delta = value * 0.05; let increments = Math.max(1, parseInt(delta / step)); return increments; } }); elWidthSlider.spinner('value', measurement.getWidth()); elWidthSlider.spinner('widget').css('width', '100%'); let widthListener = (event) => { let value = elWidthSlider.spinner('value'); if (value !== measurement.getWidth()) { elWidthSlider.spinner('value', measurement.getWidth()); } }; this.propertiesPanel.addVolatileListener(measurement, "width_changed", widthListener); } let elShow2DProfile = this.elContent.find(`#show_2d_profile`); elShow2DProfile.click(() => { this.propertiesPanel.viewer.profileWindow.show(); this.propertiesPanel.viewer.profileWindowController.setProfile(measurement); }); this.propertiesPanel.addVolatileListener(measurement, "marker_added", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_removed", this._update); this.propertiesPanel.addVolatileListener(measurement, "marker_moved", this._update); this.update(); } update(){ let elCoordiantesContainer = this.elContent.find('.coordinates_table_container'); elCoordiantesContainer.empty(); elCoordiantesContainer.append(this.createCoordinatesTable(this.measurement.points)); } async download(){ let profile = this.measurement; let regions = []; { let segments = profile.getSegments(); let width = profile.width; for(let segment of segments){ let start = segment.start.clone().multiply(new Vector3(1, 1, 0)); let end = segment.end.clone().multiply(new Vector3(1, 1, 0)); let center = new Vector3().addVectors(start, end).multiplyScalar(0.5); let startEndDir = new Vector3().subVectors(end, start).normalize(); let endStartDir = new Vector3().subVectors(start, end).normalize(); let upDir = new Vector3(0, 0, 1); let rightDir = new Vector3().crossVectors(startEndDir, upDir); let leftDir = new Vector3().crossVectors(endStartDir, upDir); console.log(leftDir); let right = rightDir.clone().multiplyScalar(width * 0.5).add(center); let left = leftDir.clone().multiplyScalar(width * 0.5).add(center); let planes = [ new Plane().setFromNormalAndCoplanarPoint(startEndDir, start), new Plane().setFromNormalAndCoplanarPoint(endStartDir, end), new Plane().setFromNormalAndCoplanarPoint(leftDir, right), new Plane().setFromNormalAndCoplanarPoint(rightDir, left), ]; let planeQueryParts = []; for(let plane of planes){ let part = [plane.normal.toArray(), plane.constant].join(","); part = `[${part}]`; planeQueryParts.push(part); } let region = "[" + planeQueryParts.join(",") + "]"; regions.push(region); } } let regionsArg = regions.join(","); let pointcloudArgs = []; for(let pointcloud of this.viewer.scene.pointclouds){ if(!pointcloud.visible){ continue; } let offset = pointcloud.pcoGeometry.offset.clone(); let negateOffset = new Matrix4().makeTranslation(...offset.multiplyScalar(-1).toArray()); let matrixWorld = pointcloud.matrixWorld; let transform = new Matrix4().multiplyMatrices(matrixWorld, negateOffset); let path = `${window.location.pathname}/../${pointcloud.pcoGeometry.url}`; let arg = { path: path, transform: transform.elements, }; let argString = JSON.stringify(arg); pointcloudArgs.push(argString); } let pointcloudsArg = pointcloudArgs.join(","); let elMessage = this.elContent.find("div[name=download_message]"); let error = (message) => { elMessage.html(`
      ERROR: ${message}
      `); }; let info = (message) => { elMessage.html(`${message}`); }; let handle = null; { // START FILTER let url = `${viewer.server}/create_regions_filter?pointclouds=[${pointcloudsArg}]®ions=[${regionsArg}]`; //console.log(url); info("estimating results ..."); let response = await fetch(url); let jsResponse = await response.json(); //console.log(jsResponse); if(!jsResponse.handle){ error(jsResponse.message); return; }else { handle = jsResponse.handle; } } { // WAIT, CHECK PROGRESS, HANDLE FINISH let url = `${viewer.server}/check_regions_filter?handle=${handle}`; let sleep = (function(duration){ return new Promise( (res, rej) => { setTimeout(() => { res(); }, duration); }); }); let handleFiltering = (jsResponse) => { let {progress, estimate} = jsResponse; let progressFract = progress["processed points"] / estimate.points; let progressPercents = parseInt(progressFract * 100); info(`progress: ${progressPercents}%`); }; let handleFinish = (jsResponse) => { let message = "downloads ready:
      "; message += "
        "; for(let i = 0; i < jsResponse.pointclouds.length; i++){ let url = `${viewer.server}/download_regions_filter_result?handle=${handle}&index=${i}`; message += `
      • result_${i}.las
      • \n`; } let reportURL = `${viewer.server}/download_regions_filter_report?handle=${handle}`; message += `
      • report.json
      • \n`; message += "
      "; info(message); }; let handleUnexpected = (jsResponse) => { let message = `Unexpected Response.
      status: ${jsResponse.status}
      message: ${jsResponse.message}`; info(message); }; let handleError = (jsResponse) => { let message = `ERROR: ${jsResponse.message}`; error(message); throw new Error(message); }; let start = Date.now(); while(true){ let response = await fetch(url); let jsResponse = await response.json(); if(jsResponse.status === "ERROR"){ handleError(jsResponse); }else if(jsResponse.status === "FILTERING"){ handleFiltering(jsResponse); }else if(jsResponse.status === "FINISHED"){ handleFinish(jsResponse); break; }else { handleUnexpected(jsResponse); } let durationS = (Date.now() - start) / 1000; let sleepAmountMS = durationS < 10 ? 100 : 1000; await sleep(sleepAmountMS); } } } }; class CameraPanel{ constructor(viewer, propertiesPanel){ this.viewer = viewer; this.propertiesPanel = propertiesPanel; this._update = () => { this.update(); }; let copyIconPath = Potree.resourcePath + '/icons/copy.svg'; this.elContent = $(`
      position
      target
      `); this.elCopyPosition = this.elContent.find("img[name=copyPosition]"); this.elCopyPosition.click( () => { let pos = this.viewer.scene.getActiveCamera().position.toArray(); let msg = pos.map(c => c.toFixed(3)).join(", "); Utils.clipboardCopy(msg); this.viewer.postMessage( `Copied value to clipboard:
      '${msg}'`, {duration: 3000}); }); this.elCopyTarget = this.elContent.find("img[name=copyTarget]"); this.elCopyTarget.click( () => { let pos = this.viewer.scene.view.getPivot().toArray(); let msg = pos.map(c => c.toFixed(3)).join(", "); Utils.clipboardCopy(msg); this.viewer.postMessage( `Copied value to clipboard:
      '${msg}'`, {duration: 3000}); }); this.propertiesPanel.addVolatileListener(viewer, "camera_changed", this._update); this.update(); } update(){ //console.log("updating camera panel"); let camera = this.viewer.scene.getActiveCamera(); let view = this.viewer.scene.view; let pos = camera.position.toArray().map(c => Utils.addCommas(c.toFixed(3))); this.elContent.find("#camera_position_x").html(pos[0]); this.elContent.find("#camera_position_y").html(pos[1]); this.elContent.find("#camera_position_z").html(pos[2]); let target = view.getPivot().toArray().map(c => Utils.addCommas(c.toFixed(3))); this.elContent.find("#camera_target_x").html(target[0]); this.elContent.find("#camera_target_y").html(target[1]); this.elContent.find("#camera_target_z").html(target[2]); } }; class AnnotationPanel{ constructor(viewer, propertiesPanel, annotation){ this.viewer = viewer; this.propertiesPanel = propertiesPanel; this.annotation = annotation; this._update = () => { this.update(); }; let copyIconPath = `${Potree.resourcePath}/icons/copy.svg`; this.elContent = $(`
      position
      Title
      Annotation Title
      Description
      A longer description of this annotation. Can be multiple lines long. TODO: the user should be able to modify title and description.
      `); this.elCopyPosition = this.elContent.find("img[name=copyPosition]"); this.elCopyPosition.click( () => { let pos = this.annotation.position.toArray(); let msg = pos.map(c => c.toFixed(3)).join(", "); Utils.clipboardCopy(msg); this.viewer.postMessage( `Copied value to clipboard:
      '${msg}'`, {duration: 3000}); }); this.elTitle = this.elContent.find("#annotation_title").html(annotation.title); this.elDescription = this.elContent.find("#annotation_description").html(annotation.description); this.elTitle[0].addEventListener("input", () => { const title = this.elTitle.html(); annotation.title = title; }, false); this.elDescription[0].addEventListener("input", () => { const description = this.elDescription.html(); annotation.description = description; }, false); this.update(); } update(){ const {annotation, elContent, elTitle, elDescription} = this; let pos = annotation.position.toArray().map(c => Utils.addCommas(c.toFixed(3))); elContent.find("#annotation_position_x").html(pos[0]); elContent.find("#annotation_position_y").html(pos[1]); elContent.find("#annotation_position_z").html(pos[2]); elTitle.html(annotation.title); elDescription.html(annotation.description); } }; class CameraAnimationPanel{ constructor(viewer, propertiesPanel, animation){ this.viewer = viewer; this.propertiesPanel = propertiesPanel; this.animation = animation; this.elContent = $(`
      Duration: Time:
      `); const elPlay = this.elContent.find("input[name=play]"); elPlay.click( () => { animation.play(); }); const elSlider = this.elContent.find('#sldTime'); elSlider.slider({ value: 0, min: 0, max: 1, step: 0.001, slide: (event, ui) => { animation.set(ui.value); } }); let elDuration = this.elContent.find(`input[name=spnDuration]`); elDuration.spinner({ min: 0, max: 300, step: 0.01, numberFormat: 'n', start: () => {}, spin: (event, ui) => { let value = elDuration.spinner('value'); animation.setDuration(value); }, change: (event, ui) => { let value = elDuration.spinner('value'); animation.setDuration(value); }, stop: (event, ui) => { let value = elDuration.spinner('value'); animation.setDuration(value); }, incremental: (count) => { let value = elDuration.spinner('value'); let step = elDuration.spinner('option', 'step'); let delta = value * 0.05; let increments = Math.max(1, parseInt(delta / step)); return increments; } }); elDuration.spinner('value', animation.getDuration()); elDuration.spinner('widget').css('width', '100%'); const elKeyframes = this.elContent.find("#animation_keyframes"); const updateKeyframes = () => { elKeyframes.empty(); //let index = 0; // // // const addNewKeyframeItem = (index) => { let elNewKeyframe = $(`
      `); const elAdd = elNewKeyframe.find("input[name=add]"); elAdd.click( () => { animation.createControlPoint(index); }); elKeyframes.append(elNewKeyframe); }; const addKeyframeItem = (index) => { let elKeyframe = $(`
      keyframe
      `); const elAssign = elKeyframe.find("img[name=assign]"); const elMove = elKeyframe.find("img[name=move]"); const elDelete = elKeyframe.find("img[name=delete]"); elAssign.click( () => { const cp = animation.controlPoints[index]; cp.position.copy(viewer.scene.view.position); cp.target.copy(viewer.scene.view.getPivot()); }); elMove.click( () => { const cp = animation.controlPoints[index]; viewer.scene.view.position.copy(cp.position); viewer.scene.view.lookAt(cp.target); }); elDelete.click( () => { const cp = animation.controlPoints[index]; animation.removeControlPoint(cp); }); elKeyframes.append(elKeyframe); }; let index = 0; addNewKeyframeItem(index); for(const cp of animation.controlPoints){ addKeyframeItem(index); index++; addNewKeyframeItem(index); } }; updateKeyframes(); animation.addEventListener("controlpoint_added", updateKeyframes); animation.addEventListener("controlpoint_removed", updateKeyframes); // this._update = () => { this.update(); }; // this.update(); } update(){ } }; class PropertiesPanel{ constructor(container, viewer){ this.container = container; this.viewer = viewer; this.object = null; this.cleanupTasks = []; this.scene = null; } setScene(scene){ this.scene = scene; } set(object){ if(this.object === object){ return; } this.object = object; for(let task of this.cleanupTasks){ task(); } this.cleanupTasks = []; this.container.empty(); if(object instanceof PointCloudTree){ this.setPointCloud(object); }else if(object instanceof Measure || object instanceof Profile || object instanceof Volume){ this.setMeasurement(object); }else if(object instanceof Camera){ this.setCamera(object); }else if(object instanceof Annotation){ this.setAnnotation(object); }else if(object instanceof CameraAnimation){ this.setCameraAnimation(object); } } // // Used for events that should be removed when the property object changes. // This is for listening to materials, scene, point clouds, etc. // not required for DOM listeners, since they are automatically cleared by removing the DOM subtree. // addVolatileListener(target, type, callback){ target.addEventListener(type, callback); this.cleanupTasks.push(() => { target.removeEventListener(type, callback); }); } setPointCloud(pointcloud){ let material = pointcloud.material; let panel = $(`

      • :
      • Attribute
      • Attribute Weights
      • RGB:
      • Intensity:
      • Elevation:
      • Classification:
      • Return Number:
      • Source ID:
      • RGB
      • Gamma:
      • Brightness:
      • Contrast:
      • Extra Attribute
      • :
      • Gamma:
      • Brightness:
      • Contrast:
      • MATCAP
      • Color
        Elevation
      • :
      • Gradient Scheme:
      • Transition
      • transition:
      • Intensity
      • Range:
      • Gamma:
      • Brightness:
      • Contrast:
      • GPS Time
        Indices
      `); panel.i18n(); this.container.append(panel); { // POINT SIZE let sldPointSize = panel.find(`#sldPointSize`); let lblPointSize = panel.find(`#lblPointSize`); sldPointSize.slider({ value: material.size, min: 0, max: 3, step: 0.01, slide: function (event, ui) { material.size = ui.value; } }); let update = (e) => { lblPointSize.html(material.size.toFixed(2)); sldPointSize.slider({value: material.size}); }; this.addVolatileListener(material, "point_size_changed", update); update(); } { // MINIMUM POINT SIZE let sldMinPointSize = panel.find(`#sldMinPointSize`); let lblMinPointSize = panel.find(`#lblMinPointSize`); sldMinPointSize.slider({ value: material.size, min: 0, max: 3, step: 0.01, slide: function (event, ui) { material.minSize = ui.value; } }); let update = (e) => { lblMinPointSize.html(material.minSize.toFixed(2)); sldMinPointSize.slider({value: material.minSize}); }; this.addVolatileListener(material, "point_size_changed", update); update(); } { // POINT SIZING let strSizeType = Object.keys(PointSizeType)[material.pointSizeType]; let opt = panel.find(`#optPointSizing`); opt.selectmenu(); opt.val(strSizeType).selectmenu('refresh'); opt.selectmenu({ change: (event, ui) => { material.pointSizeType = PointSizeType[ui.item.value]; } }); } { // SHAPE let opt = panel.find(`#optShape`); opt.selectmenu({ change: (event, ui) => { let value = ui.item.value; material.shape = PointShape[value]; } }); let update = () => { let typename = Object.keys(PointShape)[material.shape]; opt.selectmenu().val(typename).selectmenu('refresh'); }; this.addVolatileListener(material, "point_shape_changed", update); update(); } { // BACKFACE CULLING let opt = panel.find(`#set_backface_culling`); opt.click(() => { material.backfaceCulling = opt.prop("checked"); }); let update = () => { let value = material.backfaceCulling; opt.prop("checked", value); }; this.addVolatileListener(material, "backface_changed", update); update(); let blockBackface = $('#materials_backface_container'); blockBackface.css('display', 'none'); const pointAttributes = pointcloud.pcoGeometry.pointAttributes; const hasNormals = pointAttributes.hasNormals ? pointAttributes.hasNormals() : false; if(hasNormals) { blockBackface.css('display', 'block'); } /* opt.checkboxradio({ clicked: (event, ui) => { // let value = ui.item.value; let value = ui.item.checked; console.log(value); material.backfaceCulling = value; // $('#set_freeze').prop("checked"); } }); */ } { // OPACITY let sldOpacity = panel.find(`#sldOpacity`); let lblOpacity = panel.find(`#lblOpacity`); sldOpacity.slider({ value: material.opacity, min: 0, max: 1, step: 0.001, slide: function (event, ui) { material.opacity = ui.value; } }); let update = (e) => { lblOpacity.html(material.opacity.toFixed(2)); sldOpacity.slider({value: material.opacity}); }; this.addVolatileListener(material, "opacity_changed", update); update(); } { const attributes = pointcloud.pcoGeometry.pointAttributes.attributes; let options = []; options.push(...attributes.map(a => a.name)); const intensityIndex = options.indexOf("intensity"); if(intensityIndex >= 0){ options.splice(intensityIndex + 1, 0, "intensity gradient"); } options.push( "elevation", "color", 'matcap', 'indices', 'level of detail', 'composite' ); const blacklist = [ "POSITION_CARTESIAN", "position", ]; options = options.filter(o => !blacklist.includes(o)); let attributeSelection = panel.find('#optMaterial'); for(let option of options){ let elOption = $(``); attributeSelection.append(elOption); } let updateMaterialPanel = (event, ui) => { let selectedValue = attributeSelection.selectmenu().val(); material.activeAttributeName = selectedValue; let attribute = pointcloud.getAttribute(selectedValue); if(selectedValue === "intensity gradient"){ attribute = pointcloud.getAttribute("intensity"); } const isIntensity = attribute ? ["intensity", "intensity gradient"].includes(attribute.name) : false; if(isIntensity){ if(pointcloud.material.intensityRange[0] === Infinity){ pointcloud.material.intensityRange = attribute.range; } const [min, max] = attribute.range; panel.find('#sldIntensityRange').slider({ range: true, min: min, max: max, step: 0.01, values: [min, max], slide: (event, ui) => { let min = ui.values[0]; let max = ui.values[1]; material.intensityRange = [min, max]; } }); } else if(attribute){ const [min, max] = attribute.range; let selectedRange = material.getRange(attribute.name); if(!selectedRange){ selectedRange = [...attribute.range]; } let minMaxAreNumbers = typeof min === "number" && typeof max === "number"; if(minMaxAreNumbers){ panel.find('#sldExtraRange').slider({ range: true, min: min, max: max, step: 0.01, values: selectedRange, slide: (event, ui) => { let [a, b] = ui.values; material.setRange(attribute.name, [a, b]); } }); } } let blockWeights = $('#materials\\.composite_weight_container'); let blockElevation = $('#materials\\.elevation_container'); let blockRGB = $('#materials\\.rgb_container'); let blockExtra = $('#materials\\.extra_container'); let blockColor = $('#materials\\.color_container'); let blockIntensity = $('#materials\\.intensity_container'); let blockIndex = $('#materials\\.index_container'); let blockTransition = $('#materials\\.transition_container'); let blockGps = $('#materials\\.gpstime_container'); let blockMatcap = $('#materials\\.matcap_container'); blockIndex.css('display', 'none'); blockIntensity.css('display', 'none'); blockElevation.css('display', 'none'); blockRGB.css('display', 'none'); blockExtra.css('display', 'none'); blockColor.css('display', 'none'); blockWeights.css('display', 'none'); blockTransition.css('display', 'none'); blockMatcap.css('display', 'none'); blockGps.css('display', 'none'); if (selectedValue === 'composite') { blockWeights.css('display', 'block'); blockElevation.css('display', 'block'); blockRGB.css('display', 'block'); blockIntensity.css('display', 'block'); } else if (selectedValue === 'elevation') { blockElevation.css('display', 'block'); } else if (selectedValue === 'RGB and Elevation') { blockRGB.css('display', 'block'); blockElevation.css('display', 'block'); } else if (selectedValue === 'rgba') { blockRGB.css('display', 'block'); } else if (selectedValue === 'color') { blockColor.css('display', 'block'); } else if (selectedValue === 'intensity') { blockIntensity.css('display', 'block'); } else if (selectedValue === 'intensity gradient') { blockIntensity.css('display', 'block'); } else if (selectedValue === "indices" ){ blockIndex.css('display', 'block'); } else if (selectedValue === "matcap" ){ blockMatcap.css('display', 'block'); } else if (selectedValue === "classification" ){ // add classification color selctor? } else if (selectedValue === "gps-time" ){ blockGps.css('display', 'block'); } else if(selectedValue === "number of returns"){ } else if(selectedValue === "return number"){ } else if(["source id", "point source id"].includes(selectedValue)){ } else { blockExtra.css('display', 'block'); } }; attributeSelection.selectmenu({change: updateMaterialPanel}); let update = () => { attributeSelection.val(material.activeAttributeName).selectmenu('refresh'); }; this.addVolatileListener(material, "point_color_type_changed", update); this.addVolatileListener(material, "active_attribute_changed", update); update(); updateMaterialPanel(); } { const schemes = Object.keys(Potree.Gradients).map(name => ({name: name, values: Gradients[name]})); let elSchemeContainer = panel.find("#elevation_gradient_scheme_selection"); for(let scheme of schemes){ let elScheme = $(` `); const svg = Potree.Utils.createSvgGradient(scheme.values); svg.setAttributeNS(null, "class", `button-icon`); elScheme.append($(svg)); elScheme.click( () => { material.gradient = Gradients[scheme.name]; }); elSchemeContainer.append(elScheme); } } { let matcaps = [ {name: "Normals", icon: `${Potree.resourcePath}/icons/matcap/check_normal+y.jpg`}, {name: "Basic 1", icon: `${Potree.resourcePath}/icons/matcap/basic_1.jpg`}, {name: "Basic 2", icon: `${Potree.resourcePath}/icons/matcap/basic_2.jpg`}, {name: "Basic Dark", icon: `${Potree.resourcePath}/icons/matcap/basic_dark.jpg`}, {name: "Basic Side", icon: `${Potree.resourcePath}/icons/matcap/basic_side.jpg`}, {name: "Ceramic Dark", icon: `${Potree.resourcePath}/icons/matcap/ceramic_dark.jpg`}, {name: "Ceramic Lightbulb", icon: `${Potree.resourcePath}/icons/matcap/ceramic_lightbulb.jpg`}, {name: "Clay Brown", icon: `${Potree.resourcePath}/icons/matcap/clay_brown.jpg`}, {name: "Clay Muddy", icon: `${Potree.resourcePath}/icons/matcap/clay_muddy.jpg`}, {name: "Clay Studio", icon: `${Potree.resourcePath}/icons/matcap/clay_studio.jpg`}, {name: "Resin", icon: `${Potree.resourcePath}/icons/matcap/resin.jpg`}, {name: "Skin", icon: `${Potree.resourcePath}/icons/matcap/skin.jpg`}, {name: "Jade", icon: `${Potree.resourcePath}/icons/matcap/jade.jpg`}, {name: "Metal_ Anisotropic", icon: `${Potree.resourcePath}/icons/matcap/metal_anisotropic.jpg`}, {name: "Metal Carpaint", icon: `${Potree.resourcePath}/icons/matcap/metal_carpaint.jpg`}, {name: "Metal Lead", icon: `${Potree.resourcePath}/icons/matcap/metal_lead.jpg`}, {name: "Metal Shiny", icon: `${Potree.resourcePath}/icons/matcap/metal_shiny.jpg`}, {name: "Pearl", icon: `${Potree.resourcePath}/icons/matcap/pearl.jpg`}, {name: "Toon", icon: `${Potree.resourcePath}/icons/matcap/toon.jpg`}, {name: "Check Rim Light", icon: `${Potree.resourcePath}/icons/matcap/check_rim_light.jpg`}, {name: "Check Rim Dark", icon: `${Potree.resourcePath}/icons/matcap/check_rim_dark.jpg`}, {name: "Contours 1", icon: `${Potree.resourcePath}/icons/matcap/contours_1.jpg`}, {name: "Contours 2", icon: `${Potree.resourcePath}/icons/matcap/contours_2.jpg`}, {name: "Contours 3", icon: `${Potree.resourcePath}/icons/matcap/contours_3.jpg`}, {name: "Reflection Check Horizontal", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_horizontal.jpg`}, {name: "Reflection Check Vertical", icon: `${Potree.resourcePath}/icons/matcap/reflection_check_vertical.jpg`}, ]; let elMatcapContainer = panel.find("#matcap_scheme_selection"); for(let matcap of matcaps){ let elMatcap = $(` `); elMatcap.click( () => { material.matcap = matcap.icon.substring(matcap.icon.lastIndexOf('/')); }); elMatcapContainer.append(elMatcap); } } { panel.find('#sldRGBGamma').slider({ value: material.rgbGamma, min: 0, max: 4, step: 0.01, slide: (event, ui) => {material.rgbGamma = ui.value;} }); panel.find('#sldRGBContrast').slider({ value: material.rgbContrast, min: -1, max: 1, step: 0.01, slide: (event, ui) => {material.rgbContrast = ui.value;} }); panel.find('#sldRGBBrightness').slider({ value: material.rgbBrightness, min: -1, max: 1, step: 0.01, slide: (event, ui) => {material.rgbBrightness = ui.value;} }); panel.find('#sldExtraGamma').slider({ value: material.extraGamma, min: 0, max: 4, step: 0.01, slide: (event, ui) => {material.extraGamma = ui.value;} }); panel.find('#sldExtraBrightness').slider({ value: material.extraBrightness, min: -1, max: 1, step: 0.01, slide: (event, ui) => {material.extraBrightness = ui.value;} }); panel.find('#sldExtraContrast').slider({ value: material.extraContrast, min: -1, max: 1, step: 0.01, slide: (event, ui) => {material.extraContrast = ui.value;} }); panel.find('#sldHeightRange').slider({ range: true, min: 0, max: 1000, step: 0.01, values: [0, 1000], slide: (event, ui) => { material.heightMin = ui.values[0]; material.heightMax = ui.values[1]; } }); panel.find('#sldIntensityGamma').slider({ value: material.intensityGamma, min: 0, max: 4, step: 0.01, slide: (event, ui) => {material.intensityGamma = ui.value;} }); panel.find('#sldIntensityContrast').slider({ value: material.intensityContrast, min: -1, max: 1, step: 0.01, slide: (event, ui) => {material.intensityContrast = ui.value;} }); panel.find('#sldIntensityBrightness').slider({ value: material.intensityBrightness, min: -1, max: 1, step: 0.01, slide: (event, ui) => {material.intensityBrightness = ui.value;} }); panel.find('#sldWeightRGB').slider({ value: material.weightRGB, min: 0, max: 1, step: 0.01, slide: (event, ui) => {material.weightRGB = ui.value;} }); panel.find('#sldWeightIntensity').slider({ value: material.weightIntensity, min: 0, max: 1, step: 0.01, slide: (event, ui) => {material.weightIntensity = ui.value;} }); panel.find('#sldWeightElevation').slider({ value: material.weightElevation, min: 0, max: 1, step: 0.01, slide: (event, ui) => {material.weightElevation = ui.value;} }); panel.find('#sldWeightClassification').slider({ value: material.weightClassification, min: 0, max: 1, step: 0.01, slide: (event, ui) => {material.weightClassification = ui.value;} }); panel.find('#sldWeightReturnNumber').slider({ value: material.weightReturnNumber, min: 0, max: 1, step: 0.01, slide: (event, ui) => {material.weightReturnNumber = ui.value;} }); panel.find('#sldWeightSourceID').slider({ value: material.weightSourceID, min: 0, max: 1, step: 0.01, slide: (event, ui) => {material.weightSourceID = ui.value;} }); panel.find(`#materials\\.color\\.picker`).spectrum({ flat: true, showInput: true, preferredFormat: 'rgb', cancelText: '', chooseText: 'Apply', color: `#${material.color.getHexString()}`, move: color => { let cRGB = color.toRgb(); let tc = new Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255); material.color = tc; }, change: color => { let cRGB = color.toRgb(); let tc = new Color().setRGB(cRGB.r / 255, cRGB.g / 255, cRGB.b / 255); material.color = tc; } }); this.addVolatileListener(material, "color_changed", () => { panel.find(`#materials\\.color\\.picker`) .spectrum('set', `#${material.color.getHexString()}`); }); let updateHeightRange = function () { let aPosition = pointcloud.getAttribute("position"); let bMin, bMax; if(aPosition){ // for new format 2.0 and loader that contain precomputed min/max of attributes let min = aPosition.range[0][2]; let max = aPosition.range[1][2]; let width = max - min; bMin = min - 0.2 * width; bMax = max + 0.2 * width; }else { // for format up until exlusive 2.0 let box = [pointcloud.pcoGeometry.tightBoundingBox, pointcloud.getBoundingBoxWorld()] .find(v => v !== undefined); pointcloud.updateMatrixWorld(true); box = Utils.computeTransformedBoundingBox(box, pointcloud.matrixWorld); let bWidth = box.max.z - box.min.z; bMin = box.min.z - 0.2 * bWidth; bMax = box.max.z + 0.2 * bWidth; } let range = material.elevationRange; panel.find('#lblHeightRange').html(`${range[0].toFixed(2)} to ${range[1].toFixed(2)}`); panel.find('#sldHeightRange').slider({min: bMin, max: bMax, values: range}); }; let updateExtraRange = function () { let attributeName = material.activeAttributeName; let attribute = pointcloud.getAttribute(attributeName); if(attribute == null){ return; } let range = material.getRange(attributeName); if(range == null){ range = attribute.range; } // currently only supporting scalar ranges. // rgba, normals, positions, etc have vector ranges, however let isValidRange = (typeof range[0] === "number") && (typeof range[1] === "number"); if(!isValidRange){ return; } if(range){ let msg = `${range[0].toFixed(2)} to ${range[1].toFixed(2)}`; panel.find('#lblExtraRange').html(msg); }else { panel.find("could not deduce range"); } }; let updateIntensityRange = function () { let range = material.intensityRange; panel.find('#lblIntensityRange').html(`${parseInt(range[0])} to ${parseInt(range[1])}`); }; { updateHeightRange(); panel.find(`#sldHeightRange`).slider('option', 'min'); panel.find(`#sldHeightRange`).slider('option', 'max'); } { let elGradientRepeat = panel.find("#gradient_repeat_option"); elGradientRepeat.selectgroup({title: "Gradient"}); elGradientRepeat.find("input").click( (e) => { this.viewer.setElevationGradientRepeat(ElevationGradientRepeat[e.target.value]); }); let current = Object.keys(ElevationGradientRepeat) .filter(key => ElevationGradientRepeat[key] === this.viewer.elevationGradientRepeat); elGradientRepeat.find(`input[value=${current}]`).trigger("click"); } let onIntensityChange = () => { let gamma = material.intensityGamma; let contrast = material.intensityContrast; let brightness = material.intensityBrightness; updateIntensityRange(); panel.find('#lblIntensityGamma').html(gamma.toFixed(2)); panel.find('#lblIntensityContrast').html(contrast.toFixed(2)); panel.find('#lblIntensityBrightness').html(brightness.toFixed(2)); panel.find('#sldIntensityGamma').slider({value: gamma}); panel.find('#sldIntensityContrast').slider({value: contrast}); panel.find('#sldIntensityBrightness').slider({value: brightness}); }; let onRGBChange = () => { let gamma = material.rgbGamma; let contrast = material.rgbContrast; let brightness = material.rgbBrightness; panel.find('#lblRGBGamma').html(gamma.toFixed(2)); panel.find('#lblRGBContrast').html(contrast.toFixed(2)); panel.find('#lblRGBBrightness').html(brightness.toFixed(2)); panel.find('#sldRGBGamma').slider({value: gamma}); panel.find('#sldRGBContrast').slider({value: contrast}); panel.find('#sldRGBBrightness').slider({value: brightness}); }; this.addVolatileListener(material, "material_property_changed", updateExtraRange); this.addVolatileListener(material, "material_property_changed", updateHeightRange); this.addVolatileListener(material, "material_property_changed", onIntensityChange); this.addVolatileListener(material, "material_property_changed", onRGBChange); updateExtraRange(); updateHeightRange(); onIntensityChange(); onRGBChange(); } } setMeasurement(object){ let TYPE = { DISTANCE: {panel: DistancePanel}, AREA: {panel: AreaPanel}, POINT: {panel: PointPanel}, ANGLE: {panel: AnglePanel}, HEIGHT: {panel: HeightPanel}, PROFILE: {panel: ProfilePanel}, VOLUME: {panel: VolumePanel}, CIRCLE: {panel: CirclePanel}, OTHER: {panel: PointPanel}, }; let getType = (measurement) => { if (measurement instanceof Measure) { if (measurement.showDistances && !measurement.showArea && !measurement.showAngles) { return TYPE.DISTANCE; } else if (measurement.showDistances && measurement.showArea && !measurement.showAngles) { return TYPE.AREA; } else if (measurement.maxMarkers === 1) { return TYPE.POINT; } else if (!measurement.showDistances && !measurement.showArea && measurement.showAngles) { return TYPE.ANGLE; } else if (measurement.showHeight) { return TYPE.HEIGHT; } else if (measurement.showCircle) { return TYPE.CIRCLE; } else { return TYPE.OTHER; } } else if (measurement instanceof Profile) { return TYPE.PROFILE; } else if (measurement instanceof Volume) { return TYPE.VOLUME; } }; //this.container.html("measurement"); let type = getType(object); let Panel = type.panel; let panel = new Panel(this.viewer, object, this); this.container.append(panel.elContent); } setCamera(camera){ let panel = new CameraPanel(this.viewer, this); this.container.append(panel.elContent); } setAnnotation(annotation){ let panel = new AnnotationPanel(this.viewer, this, annotation); this.container.append(panel.elContent); } setCameraAnimation(animation){ let panel = new CameraAnimationPanel(this.viewer, this, animation); this.container.append(panel.elContent); } } function addCommas(nStr){ nStr += ''; let x = nStr.split('.'); let x1 = x[0]; let x2 = x.length > 1 ? '.' + x[1] : ''; let rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; }; function format(value){ return addCommas(value.toFixed(3)); }; class HierarchicalSlider{ constructor(params = {}){ this.element = document.createElement("div"); this.labels = []; this.sliders = []; this.range = params.range != null ? params.range : [0, 1]; this.slide = params.slide != null ? params.slide : null; this.step = params.step != null ? params.step : 0.0001; let levels = params.levels != null ? params.levels : 1; for(let level = 0; level < levels; level++){ this.addLevel(); } } setRange(range){ this.range = [...range]; { // root slider let slider = this.sliders[0]; $(slider).slider({ min: range[0], max: range[1], }); } for(let i = 1; i < this.sliders.length; i++){ let parentSlider = this.sliders[i - 1]; let slider = this.sliders[i]; let parentValues = $(parentSlider).slider("option", "values"); let childRange = [...parentValues]; $(slider).slider({ min: childRange[0], max: childRange[1], }); } this.updateLabels(); } setValues(values){ for(let slider of this.sliders){ $(slider).slider({ values: [...values], }); } this.updateLabels(); } addLevel(){ const elLevel = document.createElement("li"); const elRange = document.createTextNode("Range: "); const label = document.createElement("span"); const slider = document.createElement("div"); let level = this.sliders.length; let [min, max] = [0, 0]; if(this.sliders.length === 0){ [min, max] = this.range; }else { let parentSlider = this.sliders[this.sliders.length - 1]; [min, max] = $(parentSlider).slider("option", "values"); } $(slider).slider({ range: true, min: min, max: max, step: this.step, values: [min, max], slide: (event, ui) => { // set all descendants to same range let levels = this.sliders.length; for(let i = level + 1; i < levels; i++){ let descendant = this.sliders[i]; $(descendant).slider({ range: true, min: ui.values[0], max: ui.values[1], values: [...ui.values], }); } if(this.slide){ let values = [...ui.values]; this.slide({ target: this, range: this.range, values: values, }); } this.updateLabels(); }, }); elLevel.append(elRange, label, slider); this.sliders.push(slider); this.labels.push(label); this.element.append(elLevel); this.updateLabels(); } removeLevel(){ } updateSliders(){ } updateLabels(){ let levels = this.sliders.length; for(let i = 0; i < levels; i++){ let slider = this.sliders[i]; let label = this.labels[i]; let [min, max] = $(slider).slider("option", "values"); let strMin = format(min); let strMax = format(max); let strLabel = `${strMin} to ${strMax}`; label.innerHTML = strLabel; } } } class OrientedImageControls extends EventDispatcher{ constructor(viewer){ super(); this.viewer = viewer; this.renderer = viewer.renderer; this.originalCam = viewer.scene.getActiveCamera(); this.shearCam = viewer.scene.getActiveCamera().clone(); this.shearCam.rotation.set(this.originalCam.rotation.toArray()); this.shearCam.updateProjectionMatrix(); this.shearCam.updateProjectionMatrix = () => { return this.shearCam.projectionMatrix; }; this.image = null; this.fadeFactor = 20; this.fovDelta = 0; this.fovMin = 0.1; this.fovMax = 120; this.shear = [0, 0]; // const style = ``; this.elUp = $(``); this.elRight = $(``); this.elDown = $(``); this.elLeft = $(``); this.elExit = $(``); this.elExit.click( () => { this.release(); }); this.elUp.click(() => { const fovY = viewer.getFOV(); const top = Math.tan(MathUtils.degToRad(fovY / 2)); this.shear[1] += 0.1 * top; }); this.elRight.click(() => { const fovY = viewer.getFOV(); const top = Math.tan(MathUtils.degToRad(fovY / 2)); this.shear[0] += 0.1 * top; }); this.elDown.click(() => { const fovY = viewer.getFOV(); const top = Math.tan(MathUtils.degToRad(fovY / 2)); this.shear[1] -= 0.1 * top; }); this.elLeft.click(() => { const fovY = viewer.getFOV(); const top = Math.tan(MathUtils.degToRad(fovY / 2)); this.shear[0] -= 0.1 * top; }); this.scene = null; this.sceneControls = new Scene(); let scroll = (e) => { this.fovDelta += -e.delta * 1.0; }; this.addEventListener('mousewheel', scroll); //this.addEventListener("mousemove", onMove); } hasSomethingCaptured(){ return this.image !== null; } capture(image){ if(this.hasSomethingCaptured()){ return; } this.image = image; this.originalFOV = this.viewer.getFOV(); this.originalControls = this.viewer.getControls(); this.viewer.setControls(this); this.viewer.scene.overrideCamera = this.shearCam; const elCanvas = this.viewer.renderer.domElement; const elRoot = $(elCanvas.parentElement); this.shear = [0, 0]; elRoot.append(this.elUp); elRoot.append(this.elRight); elRoot.append(this.elDown); elRoot.append(this.elLeft); elRoot.append(this.elExit); } release(){ this.image = null; this.viewer.scene.overrideCamera = null; this.elUp.detach(); this.elRight.detach(); this.elDown.detach(); this.elLeft.detach(); this.elExit.detach(); this.viewer.setFOV(this.originalFOV); this.viewer.setControls(this.originalControls); } setScene (scene) { this.scene = scene; } update (delta) { // const view = this.scene.view; // let prevTotal = this.shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0); //const progression = Math.min(1, this.fadeFactor * delta); //const attenuation = Math.max(0, 1 - this.fadeFactor * delta); const progression = 1; const attenuation = 0; const oldFov = this.viewer.getFOV(); let fovProgression = progression * this.fovDelta; let newFov = oldFov * ((1 + fovProgression / 10)); newFov = Math.max(this.fovMin, newFov); newFov = Math.min(this.fovMax, newFov); let diff = newFov / oldFov; const mouse = this.viewer.inputHandler.mouse; const canvasSize = this.viewer.renderer.getSize(new Vector2()); const uv = [ (mouse.x / canvasSize.x), ((canvasSize.y - mouse.y) / canvasSize.y) ]; const fovY = newFov; const aspect = canvasSize.x / canvasSize.y; const top = Math.tan(MathUtils.degToRad(fovY / 2)); const height = 2 * top; const width = aspect * height; const shearRangeX = [ this.shear[0] - 0.5 * width, this.shear[0] + 0.5 * width, ]; const shearRangeY = [ this.shear[1] - 0.5 * height, this.shear[1] + 0.5 * height, ]; const shx = (1 - uv[0]) * shearRangeX[0] + uv[0] * shearRangeX[1]; const shy = (1 - uv[1]) * shearRangeY[0] + uv[1] * shearRangeY[1]; const shu = (1 - diff); const newShear = [ (1 - shu) * this.shear[0] + shu * shx, (1 - shu) * this.shear[1] + shu * shy, ]; this.shear = newShear; this.viewer.setFOV(newFov); const {originalCam, shearCam} = this; originalCam.fov = newFov; originalCam.updateMatrixWorld(); originalCam.updateProjectionMatrix(); shearCam.copy(originalCam); shearCam.rotation.set(...originalCam.rotation.toArray()); shearCam.updateMatrixWorld(); shearCam.projectionMatrix.copy(originalCam.projectionMatrix); const [sx, sy] = this.shear; const mShear = new Matrix4().set( 1, 0, sx, 0, 0, 1, sy, 0, 0, 0, 1, 0, 0, 0, 0, 1, ); const proj = shearCam.projectionMatrix; proj.multiply(mShear); shearCam.projectionMatrixInverse.copy(proj).invert(); let total = shearCam.projectionMatrix.elements.reduce( (a, i) => a + i, 0); this.fovDelta *= attenuation; } }; // https://support.pix4d.com/hc/en-us/articles/205675256-How-are-yaw-pitch-roll-defined // https://support.pix4d.com/hc/en-us/articles/202558969-How-are-omega-phi-kappa-defined function createMaterial(){ let vertexShader = ` uniform float uNear; varying vec2 vUV; varying vec4 vDebug; void main(){ vDebug = vec4(0.0, 1.0, 0.0, 1.0); vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0); // make sure that this mesh is at least in front of the near plane modelViewPosition.xyz += normalize(modelViewPosition.xyz) * uNear; gl_Position = projectionMatrix * modelViewPosition; vUV = uv; } `; let fragmentShader = ` uniform sampler2D tColor; uniform float uOpacity; varying vec2 vUV; varying vec4 vDebug; void main(){ vec4 color = texture2D(tColor, vUV); gl_FragColor = color; gl_FragColor.a = uOpacity; } `; const material = new ShaderMaterial( { uniforms: { // time: { value: 1.0 }, // resolution: { value: new THREE.Vector2() } tColor: {value: new Texture() }, uNear: {value: 0.0}, uOpacity: {value: 1.0}, }, vertexShader: vertexShader, fragmentShader: fragmentShader, side: DoubleSide, } ); material.side = DoubleSide; return material; } const planeGeometry = new PlaneGeometry(1, 1); const lineGeometry = new Geometry(); lineGeometry.vertices.push( new Vector3(-0.5, -0.5, 0), new Vector3( 0.5, -0.5, 0), new Vector3( 0.5, 0.5, 0), new Vector3(-0.5, 0.5, 0), new Vector3(-0.5, -0.5, 0), ); class OrientedImage{ constructor(id){ this.id = id; this.fov = 1.0; this.position = new Vector3(); this.rotation = new Vector3(); this.width = 0; this.height = 0; this.fov = 1.0; const material = createMaterial(); const lineMaterial = new LineBasicMaterial( { color: 0x00ff00 } ); this.mesh = new Mesh(planeGeometry, material); this.line = new Line(lineGeometry, lineMaterial); this.texture = null; this.mesh.orientedImage = this; } set(position, rotation, dimension, fov){ let radians = rotation.map(MathUtils.degToRad); this.position.set(...position); this.mesh.position.set(...position); this.rotation.set(...radians); this.mesh.rotation.set(...radians); [this.width, this.height] = dimension; this.mesh.scale.set(this.width / this.height, 1, 1); this.fov = fov; this.updateTransform(); } updateTransform(){ let {mesh, line, fov} = this; mesh.updateMatrixWorld(); const dir = mesh.getWorldDirection(); const alpha = MathUtils.degToRad(fov / 2); const d = -0.5 / Math.tan(alpha); const move = dir.clone().multiplyScalar(d); mesh.position.add(move); line.position.copy(mesh.position); line.scale.copy(mesh.scale); line.rotation.copy(mesh.rotation); } }; class OrientedImages extends EventDispatcher{ constructor(){ super(); this.node = null; this.cameraParams = null; this.imageParams = null; this.images = null; this._visible = true; } set visible(visible){ if(this._visible === visible){ return; } for(const image of this.images){ image.mesh.visible = visible; image.line.visible = visible; } this._visible = visible; this.dispatchEvent({ type: "visibility_changed", images: this, }); } get visible(){ return this._visible; } }; class OrientedImageLoader{ static async loadCameraParams(path){ const res = await fetch(path); const text = await res.text(); const parser = new DOMParser(); const doc = parser.parseFromString(text, "application/xml"); const width = parseInt(doc.getElementsByTagName("width")[0].textContent); const height = parseInt(doc.getElementsByTagName("height")[0].textContent); const f = parseFloat(doc.getElementsByTagName("f")[0].textContent); let a = (height / 2) / f; let fov = 2 * MathUtils.radToDeg(Math.atan(a)); const params = { path: path, width: width, height: height, f: f, fov: fov, }; return params; } static async loadImageParams(path){ const response = await fetch(path); if(!response.ok){ console.error(`failed to load ${path}`); return; } const content = await response.text(); const lines = content.split(/\r?\n/); const imageParams = []; for(let i = 1; i < lines.length; i++){ const line = lines[i]; if(line.startsWith("#")){ continue; } const tokens = line.split(/\s+/); if(tokens.length < 6){ continue; } const params = { id: tokens[0], x: Number.parseFloat(tokens[1]), y: Number.parseFloat(tokens[2]), z: Number.parseFloat(tokens[3]), omega: Number.parseFloat(tokens[4]), phi: Number.parseFloat(tokens[5]), kappa: Number.parseFloat(tokens[6]), }; // const whitelist = ["47518.jpg"]; // if(whitelist.includes(params.id)){ // imageParams.push(params); // } imageParams.push(params); } // debug //return [imageParams[50]]; return imageParams; } static async load(cameraParamsPath, imageParamsPath, viewer){ const tStart = performance.now(); const [cameraParams, imageParams] = await Promise.all([ OrientedImageLoader.loadCameraParams(cameraParamsPath), OrientedImageLoader.loadImageParams(imageParamsPath), ]); const orientedImageControls = new OrientedImageControls(viewer); const raycaster = new Raycaster(); const tEnd = performance.now(); console.log(tEnd - tStart); // const sp = new THREE.PlaneGeometry(1, 1); // const lg = new THREE.Geometry(); // lg.vertices.push( // new THREE.Vector3(-0.5, -0.5, 0), // new THREE.Vector3( 0.5, -0.5, 0), // new THREE.Vector3( 0.5, 0.5, 0), // new THREE.Vector3(-0.5, 0.5, 0), // new THREE.Vector3(-0.5, -0.5, 0), // ); const {width, height} = cameraParams; const orientedImages = []; const sceneNode = new Object3D(); sceneNode.name = "oriented_images"; for(const params of imageParams){ // const material = createMaterial(); // const lm = new THREE.LineBasicMaterial( { color: 0x00ff00 } ); // const mesh = new THREE.Mesh(sp, material); const {x, y, z, omega, phi, kappa} = params; // const [rx, ry, rz] = [omega, phi, kappa] // .map(THREE.Math.degToRad); // mesh.position.set(x, y, z); // mesh.scale.set(width / height, 1, 1); // mesh.rotation.set(rx, ry, rz); // { // mesh.updateMatrixWorld(); // const dir = mesh.getWorldDirection(); // const alpha = THREE.Math.degToRad(cameraParams.fov / 2); // const d = -0.5 / Math.tan(alpha); // const move = dir.clone().multiplyScalar(d); // mesh.position.add(move); // } // sceneNode.add(mesh); // const line = new THREE.Line(lg, lm); // line.position.copy(mesh.position); // line.scale.copy(mesh.scale); // line.rotation.copy(mesh.rotation); // sceneNode.add(line); let orientedImage = new OrientedImage(params.id); // orientedImage.setPosition(x, y, z); // orientedImage.setRotation(omega, phi, kappa); // orientedImage.setDimension(width, height); let position = [x, y, z]; let rotation = [omega, phi, kappa]; let dimension = [width, height]; orientedImage.set(position, rotation, dimension, cameraParams.fov); sceneNode.add(orientedImage.mesh); sceneNode.add(orientedImage.line); orientedImages.push(orientedImage); } let hoveredElement = null; let clipVolume = null; const onMouseMove = (evt) => { const tStart = performance.now(); if(hoveredElement){ hoveredElement.line.material.color.setRGB(0, 1, 0); } evt.preventDefault(); //var array = getMousePosition( container, evt.clientX, evt.clientY ); const rect = viewer.renderer.domElement.getBoundingClientRect(); const [x, y] = [evt.clientX, evt.clientY]; const array = [ ( x - rect.left ) / rect.width, ( y - rect.top ) / rect.height ]; const onClickPosition = new Vector2(...array); //const intersects = getIntersects(onClickPosition, scene.children); const camera = viewer.scene.getActiveCamera(); const mouse = new Vector3( + ( onClickPosition.x * 2 ) - 1, - ( onClickPosition.y * 2 ) + 1 ); const objects = orientedImages.map(i => i.mesh); raycaster.setFromCamera( mouse, camera ); const intersects = raycaster.intersectObjects( objects ); let selectionChanged = false; if ( intersects.length > 0){ //console.log(intersects); const intersection = intersects[0]; const orientedImage = intersection.object.orientedImage; orientedImage.line.material.color.setRGB(1, 0, 0); selectionChanged = hoveredElement !== orientedImage; hoveredElement = orientedImage; }else { hoveredElement = null; } let shouldRemoveClipVolume = clipVolume !== null && hoveredElement === null; let shouldAddClipVolume = clipVolume === null && hoveredElement !== null; if(clipVolume !== null && (hoveredElement === null || selectionChanged)){ // remove existing viewer.scene.removePolygonClipVolume(clipVolume); clipVolume = null; } if(shouldAddClipVolume || selectionChanged){ const img = hoveredElement; const fov = cameraParams.fov; const aspect = cameraParams.width / cameraParams.height; const near = 1.0; const far = 1000 * 1000; const camera = new PerspectiveCamera(fov, aspect, near, far); camera.rotation.order = viewer.scene.getActiveCamera().rotation.order; camera.rotation.copy(img.mesh.rotation); { const mesh = img.mesh; const dir = mesh.getWorldDirection(); const pos = mesh.position; const alpha = MathUtils.degToRad(fov / 2); const d = 0.5 / Math.tan(alpha); const newCamPos = pos.clone().add(dir.clone().multiplyScalar(d)); const newCamDir = pos.clone().sub(newCamPos); const newCamTarget = new Vector3().addVectors( newCamPos, newCamDir.clone().multiplyScalar(viewer.getMoveSpeed())); camera.position.copy(newCamPos); } let volume = new Potree.PolygonClipVolume(camera); let m0 = new Mesh(); let m1 = new Mesh(); let m2 = new Mesh(); let m3 = new Mesh(); m0.position.set(-1, -1, 0); m1.position.set( 1, -1, 0); m2.position.set( 1, 1, 0); m3.position.set(-1, 1, 0); volume.markers.push(m0, m1, m2, m3); volume.initialized = true; viewer.scene.addPolygonClipVolume(volume); clipVolume = volume; } const tEnd = performance.now(); //console.log(tEnd - tStart); }; const moveToImage = (image) => { console.log("move to image " + image.id); const mesh = image.mesh; const newCamPos = image.position.clone(); const newCamTarget = mesh.position.clone(); viewer.scene.view.setView(newCamPos, newCamTarget, 500, () => { orientedImageControls.capture(image); }); if(image.texture === null){ const target = image; const tmpImagePath = `${Potree.resourcePath}/images/loading.jpg`; new TextureLoader().load(tmpImagePath, (texture) => { if(target.texture === null){ target.texture = texture; target.mesh.material.uniforms.tColor.value = texture; mesh.material.needsUpdate = true; } } ); const imagePath = `${imageParamsPath}/../${target.id}`; new TextureLoader().load(imagePath, (texture) => { target.texture = texture; target.mesh.material.uniforms.tColor.value = texture; mesh.material.needsUpdate = true; } ); } }; const onMouseClick = (evt) => { if(orientedImageControls.hasSomethingCaptured()){ return; } if(hoveredElement){ moveToImage(hoveredElement); } }; viewer.renderer.domElement.addEventListener( 'mousemove', onMouseMove, false ); viewer.renderer.domElement.addEventListener( 'mousedown', onMouseClick, false ); viewer.addEventListener("update", () => { for(const image of orientedImages){ const world = image.mesh.matrixWorld; const {width, height} = image; const aspect = width / height; const camera = viewer.scene.getActiveCamera(); const imgPos = image.mesh.getWorldPosition(new Vector3()); const camPos = camera.position; const d = camPos.distanceTo(imgPos); const minSize = 1; // in degrees of fov const a = MathUtils.degToRad(minSize); let r = d * Math.tan(a); r = Math.max(r, 1); image.mesh.scale.set(r * aspect, r, 1); image.line.scale.set(r * aspect, r, 1); image.mesh.material.uniforms.uNear.value = camera.near; } }); const images = new OrientedImages(); images.node = sceneNode; images.cameraParamsPath = cameraParamsPath; images.imageParamsPath = imageParamsPath; images.cameraParams = cameraParams; images.imageParams = imageParams; images.images = orientedImages; Potree.debug.moveToImage = moveToImage; return images; } } let sg = new SphereGeometry(1, 8, 8); let sgHigh = new SphereGeometry(1, 128, 128); let sm = new MeshBasicMaterial({side: BackSide}); let smHovered = new MeshBasicMaterial({side: BackSide, color: 0xff0000}); let raycaster = new Raycaster(); let currentlyHovered = null; let previousView = { controls: null, position: null, target: null, }; class Image360{ constructor(file, time, longitude, latitude, altitude, course, pitch, roll){ this.file = file; this.time = time; this.longitude = longitude; this.latitude = latitude; this.altitude = altitude; this.course = course; this.pitch = pitch; this.roll = roll; this.mesh = null; } }; class Images360 extends EventDispatcher{ constructor(viewer){ super(); this.viewer = viewer; this.selectingEnabled = true; this.images = []; this.node = new Object3D(); this.sphere = new Mesh(sgHigh, sm); this.sphere.visible = false; this.sphere.scale.set(1000, 1000, 1000); this.node.add(this.sphere); this._visible = true; // this.node.add(label); this.focusedImage = null; let elUnfocus = document.createElement("input"); elUnfocus.type = "button"; elUnfocus.value = "unfocus"; elUnfocus.style.position = "absolute"; elUnfocus.style.right = "10px"; elUnfocus.style.bottom = "10px"; elUnfocus.style.zIndex = "10000"; elUnfocus.style.fontSize = "2em"; elUnfocus.addEventListener("click", () => this.unfocus()); this.elUnfocus = elUnfocus; this.domRoot = viewer.renderer.domElement.parentElement; this.domRoot.appendChild(elUnfocus); this.elUnfocus.style.display = "none"; viewer.addEventListener("update", () => { this.update(viewer); }); viewer.inputHandler.addInputListener(this); this.addEventListener("mousedown", () => { if(currentlyHovered && currentlyHovered.image360){ this.focus(currentlyHovered.image360); } }); }; set visible(visible){ if(this._visible === visible){ return; } for(const image of this.images){ image.mesh.visible = visible && (this.focusedImage == null); } this.sphere.visible = visible && (this.focusedImage != null); this._visible = visible; this.dispatchEvent({ type: "visibility_changed", images: this, }); } get visible(){ return this._visible; } focus(image360){ if(this.focusedImage !== null){ this.unfocus(); } previousView = { controls: this.viewer.controls, position: this.viewer.scene.view.position.clone(), target: viewer.scene.view.getPivot(), }; this.viewer.setControls(this.viewer.orbitControls); this.viewer.orbitControls.doubleClockZoomEnabled = false; for(let image of this.images){ image.mesh.visible = false; } this.selectingEnabled = false; this.sphere.visible = false; this.load(image360).then( () => { this.sphere.visible = true; this.sphere.material.map = image360.texture; this.sphere.material.needsUpdate = true; }); { // orientation let {course, pitch, roll} = image360; this.sphere.rotation.set( MathUtils.degToRad(+roll + 90), MathUtils.degToRad(-pitch), MathUtils.degToRad(-course + 90), "ZYX" ); } this.sphere.position.set(...image360.position); let target = new Vector3(...image360.position); let dir = target.clone().sub(viewer.scene.view.position).normalize(); let move = dir.multiplyScalar(0.000001); let newCamPos = target.clone().sub(move); viewer.scene.view.setView( newCamPos, target, 500 ); this.focusedImage = image360; this.elUnfocus.style.display = ""; } unfocus(){ this.selectingEnabled = true; for(let image of this.images){ image.mesh.visible = true; } let image = this.focusedImage; if(image === null){ return; } this.sphere.material.map = null; this.sphere.material.needsUpdate = true; this.sphere.visible = false; let pos = viewer.scene.view.position; let target = viewer.scene.view.getPivot(); let dir = target.clone().sub(pos).normalize(); let move = dir.multiplyScalar(10); let newCamPos = target.clone().sub(move); viewer.orbitControls.doubleClockZoomEnabled = true; viewer.setControls(previousView.controls); viewer.scene.view.setView( previousView.position, previousView.target, 500 ); this.focusedImage = null; this.elUnfocus.style.display = "none"; } load(image360){ return new Promise(resolve => { let texture = new TextureLoader().load(image360.file, resolve); texture.wrapS = RepeatWrapping; texture.repeat.x = -1; image360.texture = texture; }); } handleHovering(){ let mouse = viewer.inputHandler.mouse; let camera = viewer.scene.getActiveCamera(); let domElement = viewer.renderer.domElement; let ray = Potree.Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); // let tStart = performance.now(); raycaster.ray.copy(ray); let intersections = raycaster.intersectObjects(this.node.children); if(intersections.length === 0){ // label.visible = false; return; } let intersection = intersections[0]; currentlyHovered = intersection.object; currentlyHovered.material = smHovered; //label.visible = true; //label.setText(currentlyHovered.image360.file); //currentlyHovered.getWorldPosition(label.position); } update(){ let {viewer} = this; if(currentlyHovered){ currentlyHovered.material = sm; currentlyHovered = null; } if(this.selectingEnabled){ this.handleHovering(); } } }; class Images360Loader{ static async load(url, viewer, params = {}){ if(!params.transform){ params.transform = { forward: a => a, }; } let response = await fetch(`${url}/coordinates.txt`); let text = await response.text(); let lines = text.split(/\r?\n/); let coordinateLines = lines.slice(1); let images360 = new Images360(viewer); for(let line of coordinateLines){ if(line.trim().length === 0){ continue; } let tokens = line.split(/\t/); let [filename, time, long, lat, alt, course, pitch, roll] = tokens; time = parseFloat(time); long = parseFloat(long); lat = parseFloat(lat); alt = parseFloat(alt); course = parseFloat(course); pitch = parseFloat(pitch); roll = parseFloat(roll); filename = filename.replace(/"/g, ""); let file = `${url}/${filename}`; let image360 = new Image360(file, time, long, lat, alt, course, pitch, roll); let xy = params.transform.forward([long, lat]); let position = [...xy, alt]; image360.position = position; images360.images.push(image360); } Images360Loader.createSceneNodes(images360, params.transform); return images360; } static createSceneNodes(images360, transform){ for(let image360 of images360.images){ let {longitude, latitude, altitude} = image360; let xy = transform.forward([longitude, latitude]); let mesh = new Mesh(sg, sm); mesh.position.set(...xy, altitude); mesh.scale.set(1, 1, 1); mesh.material.transparent = true; mesh.material.opacity = 0.75; mesh.image360 = image360; { // orientation var {course, pitch, roll} = image360; mesh.rotation.set( MathUtils.degToRad(+roll + 90), MathUtils.degToRad(-pitch), MathUtils.degToRad(-course + 90), "ZYX" ); } images360.node.add(mesh); image360.mesh = mesh; } } }; // This is a generated file. Do not edit. var Space_Separator = /[\u1680\u2000-\u200A\u202F\u205F\u3000]/; var ID_Start = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE83\uDE86-\uDE89\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]/; var ID_Continue = /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u0860-\u086A\u08A0-\u08B4\u08B6-\u08BD\u08D4-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D00-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19D9\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1CD0-\u1CD2\u1CD4-\u1CF9\u1D00-\u1DF9\u1DFB-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u2E2F\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312E\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FEA\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AE\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDE00-\uDE3E\uDE47\uDE50-\uDE83\uDE86-\uDE99\uDEC0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD81C-\uD820\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F\uDFE0\uDFE1]|\uD821[\uDC00-\uDFEC]|\uD822[\uDC00-\uDEF2]|\uD82C[\uDC00-\uDD1E\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4A\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/; var unicode = { Space_Separator: Space_Separator, ID_Start: ID_Start, ID_Continue: ID_Continue }; var util = { isSpaceSeparator (c) { return typeof c === 'string' && unicode.Space_Separator.test(c) }, isIdStartChar (c) { return typeof c === 'string' && ( (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c === '$') || (c === '_') || unicode.ID_Start.test(c) ) }, isIdContinueChar (c) { return typeof c === 'string' && ( (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || (c === '$') || (c === '_') || (c === '\u200C') || (c === '\u200D') || unicode.ID_Continue.test(c) ) }, isDigit (c) { return typeof c === 'string' && /[0-9]/.test(c) }, isHexDigit (c) { return typeof c === 'string' && /[0-9A-Fa-f]/.test(c) }, }; let source; let parseState; let stack; let pos; let line; let column; let token; let key; let root; var parse = function parse (text, reviver) { source = String(text); parseState = 'start'; stack = []; pos = 0; line = 1; column = 0; token = undefined; key = undefined; root = undefined; do { token = lex(); // This code is unreachable. // if (!parseStates[parseState]) { // throw invalidParseState() // } parseStates[parseState](); } while (token.type !== 'eof') if (typeof reviver === 'function') { return internalize({'': root}, '', reviver) } return root }; function internalize (holder, name, reviver) { const value = holder[name]; if (value != null && typeof value === 'object') { for (const key in value) { const replacement = internalize(value, key, reviver); if (replacement === undefined) { delete value[key]; } else { value[key] = replacement; } } } return reviver.call(holder, name, value) } let lexState; let buffer; let doubleQuote; let sign$1; let c; function lex () { lexState = 'default'; buffer = ''; doubleQuote = false; sign$1 = 1; for (;;) { c = peek(); // This code is unreachable. // if (!lexStates[lexState]) { // throw invalidLexState(lexState) // } const token = lexStates[lexState](); if (token) { return token } } } function peek () { if (source[pos]) { return String.fromCodePoint(source.codePointAt(pos)) } } function read () { const c = peek(); if (c === '\n') { line++; column = 0; } else if (c) { column += c.length; } else { column++; } if (c) { pos += c.length; } return c } const lexStates = { default () { switch (c) { case '\t': case '\v': case '\f': case ' ': case '\u00A0': case '\uFEFF': case '\n': case '\r': case '\u2028': case '\u2029': read(); return case '/': read(); lexState = 'comment'; return case undefined: read(); return newToken('eof') } if (util.isSpaceSeparator(c)) { read(); return } // This code is unreachable. // if (!lexStates[parseState]) { // throw invalidLexState(parseState) // } return lexStates[parseState]() }, comment () { switch (c) { case '*': read(); lexState = 'multiLineComment'; return case '/': read(); lexState = 'singleLineComment'; return } throw invalidChar(read()) }, multiLineComment () { switch (c) { case '*': read(); lexState = 'multiLineCommentAsterisk'; return case undefined: throw invalidChar(read()) } read(); }, multiLineCommentAsterisk () { switch (c) { case '*': read(); return case '/': read(); lexState = 'default'; return case undefined: throw invalidChar(read()) } read(); lexState = 'multiLineComment'; }, singleLineComment () { switch (c) { case '\n': case '\r': case '\u2028': case '\u2029': read(); lexState = 'default'; return case undefined: read(); return newToken('eof') } read(); }, value () { switch (c) { case '{': case '[': return newToken('punctuator', read()) case 'n': read(); literal('ull'); return newToken('null', null) case 't': read(); literal('rue'); return newToken('boolean', true) case 'f': read(); literal('alse'); return newToken('boolean', false) case '-': case '+': if (read() === '-') { sign$1 = -1; } lexState = 'sign'; return case '.': buffer = read(); lexState = 'decimalPointLeading'; return case '0': buffer = read(); lexState = 'zero'; return case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': buffer = read(); lexState = 'decimalInteger'; return case 'I': read(); literal('nfinity'); return newToken('numeric', Infinity) case 'N': read(); literal('aN'); return newToken('numeric', NaN) case '"': case "'": doubleQuote = (read() === '"'); buffer = ''; lexState = 'string'; return } throw invalidChar(read()) }, identifierNameStartEscape () { if (c !== 'u') { throw invalidChar(read()) } read(); const u = unicodeEscape(); switch (u) { case '$': case '_': break default: if (!util.isIdStartChar(u)) { throw invalidIdentifier() } break } buffer += u; lexState = 'identifierName'; }, identifierName () { switch (c) { case '$': case '_': case '\u200C': case '\u200D': buffer += read(); return case '\\': read(); lexState = 'identifierNameEscape'; return } if (util.isIdContinueChar(c)) { buffer += read(); return } return newToken('identifier', buffer) }, identifierNameEscape () { if (c !== 'u') { throw invalidChar(read()) } read(); const u = unicodeEscape(); switch (u) { case '$': case '_': case '\u200C': case '\u200D': break default: if (!util.isIdContinueChar(u)) { throw invalidIdentifier() } break } buffer += u; lexState = 'identifierName'; }, sign () { switch (c) { case '.': buffer = read(); lexState = 'decimalPointLeading'; return case '0': buffer = read(); lexState = 'zero'; return case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': buffer = read(); lexState = 'decimalInteger'; return case 'I': read(); literal('nfinity'); return newToken('numeric', sign$1 * Infinity) case 'N': read(); literal('aN'); return newToken('numeric', NaN) } throw invalidChar(read()) }, zero () { switch (c) { case '.': buffer += read(); lexState = 'decimalPoint'; return case 'e': case 'E': buffer += read(); lexState = 'decimalExponent'; return case 'x': case 'X': buffer += read(); lexState = 'hexadecimal'; return } return newToken('numeric', sign$1 * 0) }, decimalInteger () { switch (c) { case '.': buffer += read(); lexState = 'decimalPoint'; return case 'e': case 'E': buffer += read(); lexState = 'decimalExponent'; return } if (util.isDigit(c)) { buffer += read(); return } return newToken('numeric', sign$1 * Number(buffer)) }, decimalPointLeading () { if (util.isDigit(c)) { buffer += read(); lexState = 'decimalFraction'; return } throw invalidChar(read()) }, decimalPoint () { switch (c) { case 'e': case 'E': buffer += read(); lexState = 'decimalExponent'; return } if (util.isDigit(c)) { buffer += read(); lexState = 'decimalFraction'; return } return newToken('numeric', sign$1 * Number(buffer)) }, decimalFraction () { switch (c) { case 'e': case 'E': buffer += read(); lexState = 'decimalExponent'; return } if (util.isDigit(c)) { buffer += read(); return } return newToken('numeric', sign$1 * Number(buffer)) }, decimalExponent () { switch (c) { case '+': case '-': buffer += read(); lexState = 'decimalExponentSign'; return } if (util.isDigit(c)) { buffer += read(); lexState = 'decimalExponentInteger'; return } throw invalidChar(read()) }, decimalExponentSign () { if (util.isDigit(c)) { buffer += read(); lexState = 'decimalExponentInteger'; return } throw invalidChar(read()) }, decimalExponentInteger () { if (util.isDigit(c)) { buffer += read(); return } return newToken('numeric', sign$1 * Number(buffer)) }, hexadecimal () { if (util.isHexDigit(c)) { buffer += read(); lexState = 'hexadecimalInteger'; return } throw invalidChar(read()) }, hexadecimalInteger () { if (util.isHexDigit(c)) { buffer += read(); return } return newToken('numeric', sign$1 * Number(buffer)) }, string () { switch (c) { case '\\': read(); buffer += escape$1(); return case '"': if (doubleQuote) { read(); return newToken('string', buffer) } buffer += read(); return case "'": if (!doubleQuote) { read(); return newToken('string', buffer) } buffer += read(); return case '\n': case '\r': throw invalidChar(read()) case '\u2028': case '\u2029': separatorChar(c); break case undefined: throw invalidChar(read()) } buffer += read(); }, start () { switch (c) { case '{': case '[': return newToken('punctuator', read()) // This code is unreachable since the default lexState handles eof. // case undefined: // return newToken('eof') } lexState = 'value'; }, beforePropertyName () { switch (c) { case '$': case '_': buffer = read(); lexState = 'identifierName'; return case '\\': read(); lexState = 'identifierNameStartEscape'; return case '}': return newToken('punctuator', read()) case '"': case "'": doubleQuote = (read() === '"'); lexState = 'string'; return } if (util.isIdStartChar(c)) { buffer += read(); lexState = 'identifierName'; return } throw invalidChar(read()) }, afterPropertyName () { if (c === ':') { return newToken('punctuator', read()) } throw invalidChar(read()) }, beforePropertyValue () { lexState = 'value'; }, afterPropertyValue () { switch (c) { case ',': case '}': return newToken('punctuator', read()) } throw invalidChar(read()) }, beforeArrayValue () { if (c === ']') { return newToken('punctuator', read()) } lexState = 'value'; }, afterArrayValue () { switch (c) { case ',': case ']': return newToken('punctuator', read()) } throw invalidChar(read()) }, end () { // This code is unreachable since it's handled by the default lexState. // if (c === undefined) { // read() // return newToken('eof') // } throw invalidChar(read()) }, }; function newToken (type, value) { return { type, value, line, column, } } function literal (s) { for (const c of s) { const p = peek(); if (p !== c) { throw invalidChar(read()) } read(); } } function escape$1 () { const c = peek(); switch (c) { case 'b': read(); return '\b' case 'f': read(); return '\f' case 'n': read(); return '\n' case 'r': read(); return '\r' case 't': read(); return '\t' case 'v': read(); return '\v' case '0': read(); if (util.isDigit(peek())) { throw invalidChar(read()) } return '\0' case 'x': read(); return hexEscape() case 'u': read(); return unicodeEscape() case '\n': case '\u2028': case '\u2029': read(); return '' case '\r': read(); if (peek() === '\n') { read(); } return '' case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': throw invalidChar(read()) case undefined: throw invalidChar(read()) } return read() } function hexEscape () { let buffer = ''; let c = peek(); if (!util.isHexDigit(c)) { throw invalidChar(read()) } buffer += read(); c = peek(); if (!util.isHexDigit(c)) { throw invalidChar(read()) } buffer += read(); return String.fromCodePoint(parseInt(buffer, 16)) } function unicodeEscape () { let buffer = ''; let count = 4; while (count-- > 0) { const c = peek(); if (!util.isHexDigit(c)) { throw invalidChar(read()) } buffer += read(); } return String.fromCodePoint(parseInt(buffer, 16)) } const parseStates = { start () { if (token.type === 'eof') { throw invalidEOF() } push(); }, beforePropertyName () { switch (token.type) { case 'identifier': case 'string': key = token.value; parseState = 'afterPropertyName'; return case 'punctuator': // This code is unreachable since it's handled by the lexState. // if (token.value !== '}') { // throw invalidToken() // } pop(); return case 'eof': throw invalidEOF() } // This code is unreachable since it's handled by the lexState. // throw invalidToken() }, afterPropertyName () { // This code is unreachable since it's handled by the lexState. // if (token.type !== 'punctuator' || token.value !== ':') { // throw invalidToken() // } if (token.type === 'eof') { throw invalidEOF() } parseState = 'beforePropertyValue'; }, beforePropertyValue () { if (token.type === 'eof') { throw invalidEOF() } push(); }, beforeArrayValue () { if (token.type === 'eof') { throw invalidEOF() } if (token.type === 'punctuator' && token.value === ']') { pop(); return } push(); }, afterPropertyValue () { // This code is unreachable since it's handled by the lexState. // if (token.type !== 'punctuator') { // throw invalidToken() // } if (token.type === 'eof') { throw invalidEOF() } switch (token.value) { case ',': parseState = 'beforePropertyName'; return case '}': pop(); } // This code is unreachable since it's handled by the lexState. // throw invalidToken() }, afterArrayValue () { // This code is unreachable since it's handled by the lexState. // if (token.type !== 'punctuator') { // throw invalidToken() // } if (token.type === 'eof') { throw invalidEOF() } switch (token.value) { case ',': parseState = 'beforeArrayValue'; return case ']': pop(); } // This code is unreachable since it's handled by the lexState. // throw invalidToken() }, end () { // This code is unreachable since it's handled by the lexState. // if (token.type !== 'eof') { // throw invalidToken() // } }, }; function push () { let value; switch (token.type) { case 'punctuator': switch (token.value) { case '{': value = {}; break case '[': value = []; break } break case 'null': case 'boolean': case 'numeric': case 'string': value = token.value; break // This code is unreachable. // default: // throw invalidToken() } if (root === undefined) { root = value; } else { const parent = stack[stack.length - 1]; if (Array.isArray(parent)) { parent.push(value); } else { parent[key] = value; } } if (value !== null && typeof value === 'object') { stack.push(value); if (Array.isArray(value)) { parseState = 'beforeArrayValue'; } else { parseState = 'beforePropertyName'; } } else { const current = stack[stack.length - 1]; if (current == null) { parseState = 'end'; } else if (Array.isArray(current)) { parseState = 'afterArrayValue'; } else { parseState = 'afterPropertyValue'; } } } function pop () { stack.pop(); const current = stack[stack.length - 1]; if (current == null) { parseState = 'end'; } else if (Array.isArray(current)) { parseState = 'afterArrayValue'; } else { parseState = 'afterPropertyValue'; } } // This code is unreachable. // function invalidParseState () { // return new Error(`JSON5: invalid parse state '${parseState}'`) // } // This code is unreachable. // function invalidLexState (state) { // return new Error(`JSON5: invalid lex state '${state}'`) // } function invalidChar (c) { if (c === undefined) { return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) } return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) } function invalidEOF () { return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) } // This code is unreachable. // function invalidToken () { // if (token.type === 'eof') { // return syntaxError(`JSON5: invalid end of input at ${line}:${column}`) // } // const c = String.fromCodePoint(token.value.codePointAt(0)) // return syntaxError(`JSON5: invalid character '${formatChar(c)}' at ${line}:${column}`) // } function invalidIdentifier () { column -= 5; return syntaxError(`JSON5: invalid identifier character at ${line}:${column}`) } function separatorChar (c) { console.warn(`JSON5: '${formatChar(c)}' in strings is not valid ECMAScript; consider escaping`); } function formatChar (c) { const replacements = { "'": "\\'", '"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t', '\v': '\\v', '\0': '\\0', '\u2028': '\\u2028', '\u2029': '\\u2029', }; if (replacements[c]) { return replacements[c] } if (c < ' ') { const hexString = c.charCodeAt(0).toString(16); return '\\x' + ('00' + hexString).substring(hexString.length) } return c } function syntaxError (message) { const err = new SyntaxError(message); err.lineNumber = line; err.columnNumber = column; return err } var stringify = function stringify (value, replacer, space) { const stack = []; let indent = ''; let propertyList; let replacerFunc; let gap = ''; let quote; if ( replacer != null && typeof replacer === 'object' && !Array.isArray(replacer) ) { space = replacer.space; quote = replacer.quote; replacer = replacer.replacer; } if (typeof replacer === 'function') { replacerFunc = replacer; } else if (Array.isArray(replacer)) { propertyList = []; for (const v of replacer) { let item; if (typeof v === 'string') { item = v; } else if ( typeof v === 'number' || v instanceof String || v instanceof Number ) { item = String(v); } if (item !== undefined && propertyList.indexOf(item) < 0) { propertyList.push(item); } } } if (space instanceof Number) { space = Number(space); } else if (space instanceof String) { space = String(space); } if (typeof space === 'number') { if (space > 0) { space = Math.min(10, Math.floor(space)); gap = ' '.substr(0, space); } } else if (typeof space === 'string') { gap = space.substr(0, 10); } return serializeProperty('', {'': value}) function serializeProperty (key, holder) { let value = holder[key]; if (value != null) { if (typeof value.toJSON5 === 'function') { value = value.toJSON5(key); } else if (typeof value.toJSON === 'function') { value = value.toJSON(key); } } if (replacerFunc) { value = replacerFunc.call(holder, key, value); } if (value instanceof Number) { value = Number(value); } else if (value instanceof String) { value = String(value); } else if (value instanceof Boolean) { value = value.valueOf(); } switch (value) { case null: return 'null' case true: return 'true' case false: return 'false' } if (typeof value === 'string') { return quoteString(value, false) } if (typeof value === 'number') { return String(value) } if (typeof value === 'object') { return Array.isArray(value) ? serializeArray(value) : serializeObject(value) } return undefined } function quoteString (value) { const quotes = { "'": 0.1, '"': 0.2, }; const replacements = { "'": "\\'", '"': '\\"', '\\': '\\\\', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r', '\t': '\\t', '\v': '\\v', '\0': '\\0', '\u2028': '\\u2028', '\u2029': '\\u2029', }; let product = ''; for (let i = 0; i < value.length; i++) { const c = value[i]; switch (c) { case "'": case '"': quotes[c]++; product += c; continue case '\0': if (util.isDigit(value[i + 1])) { product += '\\x00'; continue } } if (replacements[c]) { product += replacements[c]; continue } if (c < ' ') { let hexString = c.charCodeAt(0).toString(16); product += '\\x' + ('00' + hexString).substring(hexString.length); continue } product += c; } const quoteChar = quote || Object.keys(quotes).reduce((a, b) => (quotes[a] < quotes[b]) ? a : b); product = product.replace(new RegExp(quoteChar, 'g'), replacements[quoteChar]); return quoteChar + product + quoteChar } function serializeObject (value) { if (stack.indexOf(value) >= 0) { throw TypeError('Converting circular structure to JSON5') } stack.push(value); let stepback = indent; indent = indent + gap; let keys = propertyList || Object.keys(value); let partial = []; for (const key of keys) { const propertyString = serializeProperty(key, value); if (propertyString !== undefined) { let member = serializeKey(key) + ':'; if (gap !== '') { member += ' '; } member += propertyString; partial.push(member); } } let final; if (partial.length === 0) { final = '{}'; } else { let properties; if (gap === '') { properties = partial.join(','); final = '{' + properties + '}'; } else { let separator = ',\n' + indent; properties = partial.join(separator); final = '{\n' + indent + properties + ',\n' + stepback + '}'; } } stack.pop(); indent = stepback; return final } function serializeKey (key) { if (key.length === 0) { return quoteString(key, true) } const firstChar = String.fromCodePoint(key.codePointAt(0)); if (!util.isIdStartChar(firstChar)) { return quoteString(key, true) } for (let i = firstChar.length; i < key.length; i++) { if (!util.isIdContinueChar(String.fromCodePoint(key.codePointAt(i)))) { return quoteString(key, true) } } return key } function serializeArray (value) { if (stack.indexOf(value) >= 0) { throw TypeError('Converting circular structure to JSON5') } stack.push(value); let stepback = indent; indent = indent + gap; let partial = []; for (let i = 0; i < value.length; i++) { const propertyString = serializeProperty(String(i), value); partial.push((propertyString !== undefined) ? propertyString : 'null'); } let final; if (partial.length === 0) { final = '[]'; } else { if (gap === '') { let properties = partial.join(','); final = '[' + properties + ']'; } else { let separator = ',\n' + indent; let properties = partial.join(separator); final = '[\n' + indent + properties + ',\n' + stepback + ']'; } } stack.pop(); indent = stepback; return final } }; const JSON5 = { parse, stringify, }; var lib = JSON5; class Sidebar{ constructor(viewer){ this.viewer = viewer; this.measuringTool = viewer.measuringTool; this.profileTool = viewer.profileTool; this.volumeTool = viewer.volumeTool; this.dom = $("#sidebar_root"); } createToolIcon(icon, title, callback){ let element = $(` `); element.click(callback); return element; } init(){ this.initAccordion(); this.initAppearance(); this.initToolbar(); this.initScene(); this.initNavigation(); this.initFilters(); this.initClippingTool(); this.initSettings(); $('#potree_version_number').html(Potree.version.major + "." + Potree.version.minor + Potree.version.suffix); } initToolbar(){ // ANGLE let elToolbar = $('#tools'); elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/angle.png', '[title]tt.angle_measurement', () => { $('#menu_measurements').next().slideDown(); let measurement = this.measuringTool.startInsertion({ showDistances: false, showAngles: true, showArea: false, closed: true, maxMarkers: 3, name: 'Angle'}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // POINT elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/point.svg', '[title]tt.point_measurement', () => { $('#menu_measurements').next().slideDown(); let measurement = this.measuringTool.startInsertion({ showDistances: false, showAngles: false, showCoordinates: true, showArea: false, closed: true, maxMarkers: 1, name: 'Point'}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // DISTANCE elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/distance.svg', '[title]tt.distance_measurement', () => { $('#menu_measurements').next().slideDown(); let measurement = this.measuringTool.startInsertion({ showDistances: true, showArea: false, closed: false, name: 'Distance'}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // HEIGHT elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/height.svg', '[title]tt.height_measurement', () => { $('#menu_measurements').next().slideDown(); let measurement = this.measuringTool.startInsertion({ showDistances: false, showHeight: true, showArea: false, closed: false, maxMarkers: 2, name: 'Height'}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // CIRCLE elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/circle.svg', '[title]tt.circle_measurement', () => { $('#menu_measurements').next().slideDown(); let measurement = this.measuringTool.startInsertion({ showDistances: false, showHeight: false, showArea: false, showCircle: true, showEdges: false, closed: false, maxMarkers: 3, name: 'Circle'}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // AZIMUTH elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/azimuth.svg', 'Azimuth', () => { $('#menu_measurements').next().slideDown(); let measurement = this.measuringTool.startInsertion({ showDistances: false, showHeight: false, showArea: false, showCircle: false, showEdges: false, showAzimuth: true, closed: false, maxMarkers: 2, name: 'Azimuth'}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // AREA elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/area.svg', '[title]tt.area_measurement', () => { $('#menu_measurements').next().slideDown(); let measurement = this.measuringTool.startInsertion({ showDistances: true, showArea: true, closed: true, name: 'Area'}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === measurement.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // VOLUME elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/volume.svg', '[title]tt.volume_measurement', () => { let volume = this.volumeTool.startInsertion(); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === volume.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // SPHERE VOLUME elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/sphere_distances.svg', '[title]tt.volume_measurement', () => { let volume = this.volumeTool.startInsertion({type: SphereVolume}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === volume.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // PROFILE elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/profile.svg', '[title]tt.height_profile', () => { $('#menu_measurements').next().slideDown(); ; let profile = this.profileTool.startInsertion(); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === profile.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // ANNOTATION elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/annotation.svg', '[title]tt.annotation', () => { $('#menu_measurements').next().slideDown(); ; let annotation = this.viewer.annotationTool.startInsertion(); let annotationsRoot = $("#jstree_scene").jstree().get_json("annotations"); let jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // REMOVE ALL elToolbar.append(this.createToolIcon( Potree.resourcePath + '/icons/reset_tools.svg', '[title]tt.remove_all_measurement', () => { this.viewer.scene.removeAllMeasurements(); } )); { // SHOW / HIDE Measurements let elShow = $("#measurement_options_show"); elShow.selectgroup({title: "Show/Hide labels"}); elShow.find("input").click( (e) => { const show = e.target.value === "SHOW"; this.measuringTool.showLabels = show; }); let currentShow = this.measuringTool.showLabels ? "SHOW" : "HIDE"; elShow.find(`input[value=${currentShow}]`).trigger("click"); } } initScene(){ let elScene = $("#menu_scene"); let elObjects = elScene.next().find("#scene_objects"); let elProperties = elScene.next().find("#scene_object_properties"); { let elExport = elScene.next().find("#scene_export"); let geoJSONIcon = `${Potree.resourcePath}/icons/file_geojson.svg`; let dxfIcon = `${Potree.resourcePath}/icons/file_dxf.svg`; let potreeIcon = `${Potree.resourcePath}/icons/file_potree.svg`; elExport.append(` Export:
      `); let elDownloadJSON = elExport.find("img[name=geojson_export_button]").parent(); elDownloadJSON.click( (event) => { let scene = this.viewer.scene; let measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes]; if(measurements.length > 0){ let geoJson = GeoJSONExporter.toString(measurements); let url = window.URL.createObjectURL(new Blob([geoJson], {type: 'data:application/octet-stream'})); elDownloadJSON.attr('href', url); }else { this.viewer.postError("no measurements to export"); event.preventDefault(); } }); let elDownloadDXF = elExport.find("img[name=dxf_export_button]").parent(); elDownloadDXF.click( (event) => { let scene = this.viewer.scene; let measurements = [...scene.measurements, ...scene.profiles, ...scene.volumes]; if(measurements.length > 0){ let dxf = DXFExporter.toString(measurements); let url = window.URL.createObjectURL(new Blob([dxf], {type: 'data:application/octet-stream'})); elDownloadDXF.attr('href', url); }else { this.viewer.postError("no measurements to export"); event.preventDefault(); } }); let elDownloadPotree = elExport.find("img[name=potree_export_button]").parent(); elDownloadPotree.click( (event) => { let data = Potree.saveProject(this.viewer); let dataString = lib.stringify(data, null, "\t"); let url = window.URL.createObjectURL(new Blob([dataString], {type: 'data:application/octet-stream'})); elDownloadPotree.attr('href', url); }); } let propertiesPanel = new PropertiesPanel(elProperties, this.viewer); propertiesPanel.setScene(this.viewer.scene); localStorage.removeItem('jstree'); let tree = $(`
      `); elObjects.append(tree); tree.jstree({ 'plugins': ["checkbox", "state"], 'core': { "dblclick_toggle": false, "state": { "checked" : true }, 'check_callback': true, "expand_selected_onload": true }, "checkbox" : { "keep_selected_style": true, "three_state": false, "whole_node": false, "tie_selection": false, }, }); let createNode = (parent, text, icon, object) => { let nodeID = tree.jstree('create_node', parent, { "text": text, "icon": icon, "data": object }, "last", false, false); if(object.visible){ tree.jstree('check_node', nodeID); }else { tree.jstree('uncheck_node', nodeID); } return nodeID; }; let pcID = tree.jstree('create_node', "#", { "text": "Point Clouds", "id": "pointclouds"}, "last", false, false); let measurementID = tree.jstree('create_node', "#", { "text": "Measurements", "id": "measurements" }, "last", false, false); let annotationsID = tree.jstree('create_node', "#", { "text": "Annotations", "id": "annotations" }, "last", false, false); let otherID = tree.jstree('create_node', "#", { "text": "Other", "id": "other" }, "last", false, false); let vectorsID = tree.jstree('create_node', "#", { "text": "Vectors", "id": "vectors" }, "last", false, false); let imagesID = tree.jstree('create_node', "#", { "text": " Images", "id": "images" }, "last", false, false); tree.jstree("check_node", pcID); tree.jstree("check_node", measurementID); tree.jstree("check_node", annotationsID); tree.jstree("check_node", otherID); tree.jstree("check_node", vectorsID); tree.jstree("check_node", imagesID); tree.on('create_node.jstree', (e, data) => { tree.jstree("open_all"); }); tree.on("select_node.jstree", (e, data) => { let object = data.node.data; propertiesPanel.set(object); this.viewer.inputHandler.deselectAll(); if(object instanceof Volume){ this.viewer.inputHandler.toggleSelection(object); } $(this.viewer.renderer.domElement).focus(); }); tree.on("deselect_node.jstree", (e, data) => { propertiesPanel.set(null); }); tree.on("delete_node.jstree", (e, data) => { propertiesPanel.set(null); }); tree.on('dblclick','.jstree-anchor', (e) => { let instance = $.jstree.reference(e.target); let node = instance.get_node(e.target); let object = node.data; // ignore double click on checkbox if(e.target.classList.contains("jstree-checkbox")){ return; } if(object instanceof PointCloudTree){ let box = this.viewer.getBoundingBox([object]); let node = new Object3D(); node.boundingBox = box; this.viewer.zoomTo(node, 1, 500); }else if(object instanceof Measure){ let points = object.points.map(p => p.position); let box = new Box3().setFromPoints(points); if(box.getSize(new Vector3()).length() > 0){ let node = new Object3D(); node.boundingBox = box; this.viewer.zoomTo(node, 2, 500); } }else if(object instanceof Profile){ let points = object.points; let box = new Box3().setFromPoints(points); if(box.getSize(new Vector3()).length() > 0){ let node = new Object3D(); node.boundingBox = box; this.viewer.zoomTo(node, 1, 500); } }else if(object instanceof Volume){ let box = object.boundingBox.clone().applyMatrix4(object.matrixWorld); if(box.getSize(new Vector3()).length() > 0){ let node = new Object3D(); node.boundingBox = box; this.viewer.zoomTo(node, 1, 500); } }else if(object instanceof Annotation){ object.moveHere(this.viewer.scene.getActiveCamera()); }else if(object instanceof PolygonClipVolume){ let dir = object.camera.getWorldDirection(new Vector3()); let target; if(object.camera instanceof OrthographicCamera){ dir.multiplyScalar(object.camera.right); target = new Vector3().addVectors(object.camera.position, dir); this.viewer.setCameraMode(CameraMode.ORTHOGRAPHIC); }else if(object.camera instanceof PerspectiveCamera){ dir.multiplyScalar(this.viewer.scene.view.radius); target = new Vector3().addVectors(object.camera.position, dir); this.viewer.setCameraMode(CameraMode.PERSPECTIVE); } this.viewer.scene.view.position.copy(object.camera.position); this.viewer.scene.view.lookAt(target); }else if(object.type === "SpotLight"){ let distance = (object.distance > 0) ? object.distance / 4 : 5 * 1000; let position = object.position; let target = new Vector3().addVectors( position, object.getWorldDirection(new Vector3()).multiplyScalar(distance)); this.viewer.scene.view.position.copy(object.position); this.viewer.scene.view.lookAt(target); }else if(object instanceof Object3D){ let box = new Box3().setFromObject(object); if(box.getSize(new Vector3()).length() > 0){ let node = new Object3D(); node.boundingBox = box; this.viewer.zoomTo(node, 1, 500); } }else if(object instanceof OrientedImage){ // TODO zoom to images // let box = new THREE.Box3().setFromObject(object); // if(box.getSize(new THREE.Vector3()).length() > 0){ // let node = new THREE.Object3D(); // node.boundingBox = box; // this.viewer.zoomTo(node, 1, 500); // } }else if(object instanceof Images360){ // TODO }else if(object instanceof Geopackage){ // TODO } }); tree.on("uncheck_node.jstree", (e, data) => { let object = data.node.data; if(object){ object.visible = false; } }); tree.on("check_node.jstree", (e, data) => { let object = data.node.data; if(object){ object.visible = true; } }); let onPointCloudAdded = (e) => { let pointcloud = e.pointcloud; let cloudIcon = `${Potree.resourcePath}/icons/cloud.svg`; let node = createNode(pcID, pointcloud.name, cloudIcon, pointcloud); pointcloud.addEventListener("visibility_changed", () => { if(pointcloud.visible){ tree.jstree('check_node', node); }else { tree.jstree('uncheck_node', node); } }); }; let onMeasurementAdded = (e) => { let measurement = e.measurement; let icon = Utils.getMeasurementIcon(measurement); createNode(measurementID, measurement.name, icon, measurement); }; let onVolumeAdded = (e) => { let volume = e.volume; let icon = Utils.getMeasurementIcon(volume); let node = createNode(measurementID, volume.name, icon, volume); volume.addEventListener("visibility_changed", () => { if(volume.visible){ tree.jstree('check_node', node); }else { tree.jstree('uncheck_node', node); } }); }; let onProfileAdded = (e) => { let profile = e.profile; let icon = Utils.getMeasurementIcon(profile); createNode(measurementID, profile.name, icon, profile); }; let onAnnotationAdded = (e) => { let annotation = e.annotation; let annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`; let parentID = this.annotationMapping.get(annotation.parent); let annotationID = createNode(parentID, annotation.title, annotationIcon, annotation); this.annotationMapping.set(annotation, annotationID); annotation.addEventListener("annotation_changed", (e) => { let annotationsRoot = $("#jstree_scene").jstree().get_json("annotations"); let jsonNode = annotationsRoot.children.find(child => child.data.uuid === annotation.uuid); $.jstree.reference(jsonNode.id).rename_node(jsonNode.id, annotation.title); }); }; let onCameraAnimationAdded = (e) => { const animation = e.animation; const animationIcon = `${Potree.resourcePath}/icons/camera_animation.svg`; createNode(otherID, "animation", animationIcon, animation); }; let onOrientedImagesAdded = (e) => { const images = e.images; const imagesIcon = `${Potree.resourcePath}/icons/picture.svg`; const node = createNode(imagesID, "images", imagesIcon, images); images.addEventListener("visibility_changed", () => { if(images.visible){ tree.jstree('check_node', node); }else { tree.jstree('uncheck_node', node); } }); }; let onImages360Added = (e) => { const images = e.images; const imagesIcon = `${Potree.resourcePath}/icons/picture.svg`; const node = createNode(imagesID, "360° images", imagesIcon, images); images.addEventListener("visibility_changed", () => { if(images.visible){ tree.jstree('check_node', node); }else { tree.jstree('uncheck_node', node); } }); }; const onGeopackageAdded = (e) => { const geopackage = e.geopackage; const geopackageIcon = `${Potree.resourcePath}/icons/triangle.svg`; const tree = $(`#jstree_scene`); const parentNode = "vectors"; for(const layer of geopackage.node.children){ const name = layer.name; let shpPointsID = tree.jstree('create_node', parentNode, { "text": name, "icon": geopackageIcon, "object": layer, "data": layer, }, "last", false, false); tree.jstree(layer.visible ? "check_node" : "uncheck_node", shpPointsID); } }; this.viewer.scene.addEventListener("pointcloud_added", onPointCloudAdded); this.viewer.scene.addEventListener("measurement_added", onMeasurementAdded); this.viewer.scene.addEventListener("profile_added", onProfileAdded); this.viewer.scene.addEventListener("volume_added", onVolumeAdded); this.viewer.scene.addEventListener("camera_animation_added", onCameraAnimationAdded); this.viewer.scene.addEventListener("oriented_images_added", onOrientedImagesAdded); this.viewer.scene.addEventListener("360_images_added", onImages360Added); this.viewer.scene.addEventListener("geopackage_added", onGeopackageAdded); this.viewer.scene.addEventListener("polygon_clip_volume_added", onVolumeAdded); this.viewer.scene.annotations.addEventListener("annotation_added", onAnnotationAdded); let onMeasurementRemoved = (e) => { let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.measurement.uuid); tree.jstree("delete_node", jsonNode.id); }; let onVolumeRemoved = (e) => { let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid); tree.jstree("delete_node", jsonNode.id); }; let onPolygonClipVolumeRemoved = (e) => { let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.volume.uuid); tree.jstree("delete_node", jsonNode.id); }; let onProfileRemoved = (e) => { let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === e.profile.uuid); tree.jstree("delete_node", jsonNode.id); }; this.viewer.scene.addEventListener("measurement_removed", onMeasurementRemoved); this.viewer.scene.addEventListener("volume_removed", onVolumeRemoved); this.viewer.scene.addEventListener("polygon_clip_volume_removed", onPolygonClipVolumeRemoved); this.viewer.scene.addEventListener("profile_removed", onProfileRemoved); { let annotationIcon = `${Potree.resourcePath}/icons/annotation.svg`; this.annotationMapping = new Map(); this.annotationMapping.set(this.viewer.scene.annotations, annotationsID); this.viewer.scene.annotations.traverseDescendants(annotation => { let parentID = this.annotationMapping.get(annotation.parent); let annotationID = createNode(parentID, annotation.title, annotationIcon, annotation); this.annotationMapping.set(annotation, annotationID); }); } const scene = this.viewer.scene; for(let pointcloud of scene.pointclouds){ onPointCloudAdded({pointcloud: pointcloud}); } for(let measurement of scene.measurements){ onMeasurementAdded({measurement: measurement}); } for(let volume of [...scene.volumes, ...scene.polygonClipVolumes]){ onVolumeAdded({volume: volume}); } for(let animation of scene.cameraAnimations){ onCameraAnimationAdded({animation: animation}); } for(let images of scene.orientedImages){ onOrientedImagesAdded({images: images}); } for(let images of scene.images360){ onImages360Added({images: images}); } for(const geopackage of scene.geopackages){ onGeopackageAdded({geopackage: geopackage}); } for(let profile of scene.profiles){ onProfileAdded({profile: profile}); } { createNode(otherID, "Camera", null, new Camera()); } this.viewer.addEventListener("scene_changed", (e) => { propertiesPanel.setScene(e.scene); e.oldScene.removeEventListener("pointcloud_added", onPointCloudAdded); e.oldScene.removeEventListener("measurement_added", onMeasurementAdded); e.oldScene.removeEventListener("profile_added", onProfileAdded); e.oldScene.removeEventListener("volume_added", onVolumeAdded); e.oldScene.removeEventListener("polygon_clip_volume_added", onVolumeAdded); e.oldScene.removeEventListener("measurement_removed", onMeasurementRemoved); e.scene.addEventListener("pointcloud_added", onPointCloudAdded); e.scene.addEventListener("measurement_added", onMeasurementAdded); e.scene.addEventListener("profile_added", onProfileAdded); e.scene.addEventListener("volume_added", onVolumeAdded); e.scene.addEventListener("polygon_clip_volume_added", onVolumeAdded); e.scene.addEventListener("measurement_removed", onMeasurementRemoved); }); } initClippingTool(){ this.viewer.addEventListener("cliptask_changed", (event) => { console.log("TODO"); }); this.viewer.addEventListener("clipmethod_changed", (event) => { console.log("TODO"); }); { let elClipTask = $("#cliptask_options"); elClipTask.selectgroup({title: "Clip Task"}); elClipTask.find("input").click( (e) => { this.viewer.setClipTask(ClipTask[e.target.value]); }); let currentClipTask = Object.keys(ClipTask) .filter(key => ClipTask[key] === this.viewer.clipTask); elClipTask.find(`input[value=${currentClipTask}]`).trigger("click"); } { let elClipMethod = $("#clipmethod_options"); elClipMethod.selectgroup({title: "Clip Method"}); elClipMethod.find("input").click( (e) => { this.viewer.setClipMethod(ClipMethod[e.target.value]); }); let currentClipMethod = Object.keys(ClipMethod) .filter(key => ClipMethod[key] === this.viewer.clipMethod); elClipMethod.find(`input[value=${currentClipMethod}]`).trigger("click"); } let clippingToolBar = $("#clipping_tools"); // CLIP VOLUME clippingToolBar.append(this.createToolIcon( Potree.resourcePath + '/icons/clip_volume.svg', '[title]tt.clip_volume', () => { let item = this.volumeTool.startInsertion({clip: true}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); // CLIP POLYGON clippingToolBar.append(this.createToolIcon( Potree.resourcePath + "/icons/clip-polygon.svg", "[title]tt.clip_polygon", () => { let item = this.viewer.clippingTool.startInsertion({type: "polygon"}); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); {// SCREEN BOX SELECT let boxSelectTool = new ScreenBoxSelectTool(this.viewer); clippingToolBar.append(this.createToolIcon( Potree.resourcePath + "/icons/clip-screen.svg", "[title]tt.screen_clip_box", () => { if(!(this.viewer.scene.getActiveCamera() instanceof OrthographicCamera)){ this.viewer.postMessage(`Switch to Orthographic Camera Mode before using the Screen-Box-Select tool.`, {duration: 2000}); return; } let item = boxSelectTool.startInsertion(); let measurementsRoot = $("#jstree_scene").jstree().get_json("measurements"); let jsonNode = measurementsRoot.children.find(child => child.data.uuid === item.uuid); $.jstree.reference(jsonNode.id).deselect_all(); $.jstree.reference(jsonNode.id).select_node(jsonNode.id); } )); } { // REMOVE CLIPPING TOOLS clippingToolBar.append(this.createToolIcon( Potree.resourcePath + "/icons/remove.svg", "[title]tt.remove_all_clipping_volumes", () => { this.viewer.scene.removeAllClipVolumes(); } )); } } initFilters(){ this.initClassificationList(); this.initReturnFilters(); this.initGPSTimeFilters(); this.initPointSourceIDFilters(); } initReturnFilters(){ let elReturnFilterPanel = $('#return_filter_panel'); { // RETURN NUMBER let sldReturnNumber = elReturnFilterPanel.find('#sldReturnNumber'); let lblReturnNumber = elReturnFilterPanel.find('#lblReturnNumber'); sldReturnNumber.slider({ range: true, min: 0, max: 7, step: 1, values: [0, 7], slide: (event, ui) => { this.viewer.setFilterReturnNumberRange(ui.values[0], ui.values[1]); } }); let onReturnNumberChanged = (event) => { let [from, to] = this.viewer.filterReturnNumberRange; lblReturnNumber[0].innerHTML = `${from} to ${to}`; sldReturnNumber.slider({values: [from, to]}); }; this.viewer.addEventListener('filter_return_number_range_changed', onReturnNumberChanged); onReturnNumberChanged(); } { // NUMBER OF RETURNS let sldNumberOfReturns = elReturnFilterPanel.find('#sldNumberOfReturns'); let lblNumberOfReturns = elReturnFilterPanel.find('#lblNumberOfReturns'); sldNumberOfReturns.slider({ range: true, min: 0, max: 7, step: 1, values: [0, 7], slide: (event, ui) => { this.viewer.setFilterNumberOfReturnsRange(ui.values[0], ui.values[1]); } }); let onNumberOfReturnsChanged = (event) => { let [from, to] = this.viewer.filterNumberOfReturnsRange; lblNumberOfReturns[0].innerHTML = `${from} to ${to}`; sldNumberOfReturns.slider({values: [from, to]}); }; this.viewer.addEventListener('filter_number_of_returns_range_changed', onNumberOfReturnsChanged); onNumberOfReturnsChanged(); } } initGPSTimeFilters(){ let elGPSTimeFilterPanel = $('#gpstime_filter_panel'); { let slider = new HierarchicalSlider({ levels: 4, slide: (event) => { this.viewer.setFilterGPSTimeRange(...event.values); }, }); let initialized = false; let initialize = () => { let elRangeContainer = $("#gpstime_multilevel_range_container"); elRangeContainer[0].prepend(slider.element); let extent = this.viewer.getGpsTimeExtent(); slider.setRange(extent); slider.setValues(extent); initialized = true; }; this.viewer.addEventListener("update", (e) => { let extent = this.viewer.getGpsTimeExtent(); let gpsTimeAvailable = extent[0] !== Infinity; if(!initialized && gpsTimeAvailable){ initialize(); } slider.setRange(extent); }); } { const txtGpsTime = elGPSTimeFilterPanel.find("#txtGpsTime"); const btnFindGpsTime = elGPSTimeFilterPanel.find("#btnFindGpsTime"); let targetTime = null; txtGpsTime.on("input", (e) => { const str = txtGpsTime.val(); if(!isNaN(str)){ const value = parseFloat(str); targetTime = value; txtGpsTime.css("background-color", ""); }else { targetTime = null; txtGpsTime.css("background-color", "#ff9999"); } }); btnFindGpsTime.click( () => { if(targetTime !== null){ viewer.moveToGpsTimeVicinity(targetTime); } }); } } initPointSourceIDFilters() { let elPointSourceIDFilterPanel = $('#pointsourceid_filter_panel'); { let slider = new HierarchicalSlider({ levels: 4, range: [0, 65535], precision: 1, slide: (event) => { let values = event.values; this.viewer.setFilterPointSourceIDRange(values[0], values[1]); } }); let initialized = false; let initialize = () => { elPointSourceIDFilterPanel[0].prepend(slider.element); initialized = true; }; this.viewer.addEventListener("update", (e) => { let extent = this.viewer.filterPointSourceIDRange; if(!initialized){ initialize(); slider.setValues(extent); } }); } // let lblPointSourceID = elPointSourceIDFilterPanel.find("#lblPointSourceID"); // let elPointSourceID = elPointSourceIDFilterPanel.find("#spnPointSourceID"); // let slider = new ZoomableSlider(); // elPointSourceID[0].appendChild(slider.element); // slider.update(); // slider.change( () => { // let range = slider.chosenRange; // this.viewer.setFilterPointSourceIDRange(range[0], range[1]); // }); // let onPointSourceIDExtentChanged = (event) => { // let range = this.viewer.filterPointSourceIDExtent; // slider.setVisibleRange(range); // }; // let onPointSourceIDChanged = (event) => { // let range = this.viewer.filterPointSourceIDRange; // let precision = 1; // let from = `${Utils.addCommas(range[0].toFixed(precision))}`; // let to = `${Utils.addCommas(range[1].toFixed(precision))}`; // lblPointSourceID[0].innerHTML = `${from} to ${to}`; // slider.setRange(range); // }; // this.viewer.addEventListener('filter_point_source_id_range_changed', onPointSourceIDChanged); // this.viewer.addEventListener('filter_point_source_id_extent_changed', onPointSourceIDExtentChanged); } initClassificationList(){ let elClassificationList = $('#classificationList'); let addClassificationItem = (code, name) => { const classification = this.viewer.classifications[code]; const inputID = 'chkClassification_' + code; const colorPickerID = 'colorPickerClassification_' + code; const checked = classification.visible ? "checked" : ""; let element = $(`
    • `); const elInput = element.find('input'); const elColorPicker = element.find(`#${colorPickerID}`); elInput.click(event => { this.viewer.setClassificationVisibility(code, event.target.checked); }); let defaultColor = classification.color.map(c => c * 255).join(", "); defaultColor = `rgb(${defaultColor})`; elColorPicker.spectrum({ // flat: true, color: defaultColor, showInput: true, preferredFormat: 'rgb', cancelText: '', chooseText: 'Apply', move: color => { let rgb = color.toRgb(); const c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1]; classification.color = c; }, change: color => { let rgb = color.toRgb(); const c = [rgb.r / 255, rgb.g / 255, rgb.b / 255, 1]; classification.color = c; } }); elClassificationList.append(element); }; const addToggleAllButton = () => { // toggle all button const element = $(`
    • `); let elInput = element.find('input'); elInput.click(event => { this.viewer.toggleAllClassificationsVisibility(); }); elClassificationList.append(element); }; const addInvertButton = () => { const element = $(`
    • `); let elInput = element.find('input'); elInput.click( () => { const classifications = this.viewer.classifications; for(let key of Object.keys(classifications)){ let value = classifications[key]; this.viewer.setClassificationVisibility(key, !value.visible); } }); elClassificationList.append(element); }; const populate = () => { addToggleAllButton(); for (let classID in this.viewer.classifications) { addClassificationItem(classID, this.viewer.classifications[classID].name); } addInvertButton(); }; populate(); this.viewer.addEventListener("classifications_changed", () => { elClassificationList.empty(); populate(); }); this.viewer.addEventListener("classification_visibility_changed", () => { { // set checked state of classification buttons for(const classID of Object.keys(this.viewer.classifications)){ const classValue = this.viewer.classifications[classID]; let elItem = elClassificationList.find(`#chkClassification_${classID}`); elItem.prop("checked", classValue.visible); } } { // set checked state of toggle button based on state of all other buttons let numVisible = 0; let numItems = 0; for(const key of Object.keys(this.viewer.classifications)){ if(this.viewer.classifications[key].visible){ numVisible++; } numItems++; } const allVisible = numVisible === numItems; let elToggle = elClassificationList.find("#toggleClassificationFilters"); elToggle.prop("checked", allVisible); } }); } initAccordion(){ $('.accordion > h3').each(function(){ let header = $(this); let content = $(this).next(); //header.addClass('accordion-header ui-widget'); //content.addClass('accordion-content ui-widget'); content.hide(); header.click(() => { content.slideToggle(); }); }); let languages = [ ["EN", "en"], ["FR", "fr"], ["DE", "de"], ["JP", "jp"], ["ES", "es"], ["SE", "se"], ["ZH", "zh"], ["IT", "it"] ]; let elLanguages = $('#potree_languages'); for(let i = 0; i < languages.length; i++){ let [key, value] = languages[i]; let element = $(`${key}`); element.click(() => this.viewer.setLanguage(value)); if(i === 0){ element.css("margin-left", "30px"); } elLanguages.append(element); if(i < languages.length - 1){ elLanguages.append($(document.createTextNode(' - '))); } } // to close all, call // $(".accordion > div").hide() // to open the, for example, tool menu, call: // $("#menu_tools").next().show() } initAppearance(){ const sldPointBudget = this.dom.find('#sldPointBudget'); sldPointBudget.slider({ value: this.viewer.getPointBudget(), min: 100 * 1000, max: 10 * 1000 * 1000, step: 1000, slide: (event, ui) => { this.viewer.setPointBudget(ui.value); } }); this.dom.find('#sldFOV').slider({ value: this.viewer.getFOV(), min: 20, max: 100, step: 1, slide: (event, ui) => { this.viewer.setFOV(ui.value); } }); $('#sldEDLRadius').slider({ value: this.viewer.getEDLRadius(), min: 1, max: 4, step: 0.01, slide: (event, ui) => { this.viewer.setEDLRadius(ui.value); } }); $('#sldEDLStrength').slider({ value: this.viewer.getEDLStrength(), min: 0, max: 5, step: 0.01, slide: (event, ui) => { this.viewer.setEDLStrength(ui.value); } }); $('#sldEDLOpacity').slider({ value: this.viewer.getEDLOpacity(), min: 0, max: 1, step: 0.01, slide: (event, ui) => { this.viewer.setEDLOpacity(ui.value); } }); this.viewer.addEventListener('point_budget_changed', (event) => { $('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget()); sldPointBudget.slider({value: this.viewer.getPointBudget()}); }); this.viewer.addEventListener('fov_changed', (event) => { $('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV()); $('#sldFOV').slider({value: this.viewer.getFOV()}); }); this.viewer.addEventListener('use_edl_changed', (event) => { $('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled(); }); this.viewer.addEventListener('edl_radius_changed', (event) => { $('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1); $('#sldEDLRadius').slider({value: this.viewer.getEDLRadius()}); }); this.viewer.addEventListener('edl_strength_changed', (event) => { $('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1); $('#sldEDLStrength').slider({value: this.viewer.getEDLStrength()}); }); this.viewer.addEventListener('background_changed', (event) => { $("input[name=background][value='" + this.viewer.getBackground() + "']").prop('checked', true); }); $('#lblPointBudget')[0].innerHTML = Utils.addCommas(this.viewer.getPointBudget()); $('#lblFOV')[0].innerHTML = parseInt(this.viewer.getFOV()); $('#lblEDLRadius')[0].innerHTML = this.viewer.getEDLRadius().toFixed(1); $('#lblEDLStrength')[0].innerHTML = this.viewer.getEDLStrength().toFixed(1); $('#chkEDLEnabled')[0].checked = this.viewer.getEDLEnabled(); { let elBackground = $(`#background_options`); elBackground.selectgroup(); elBackground.find("input").click( (e) => { this.viewer.setBackground(e.target.value); }); let currentBackground = this.viewer.getBackground(); $(`input[name=background_options][value=${currentBackground}]`).trigger("click"); } $('#chkEDLEnabled').click( () => { this.viewer.setEDLEnabled($('#chkEDLEnabled').prop("checked")); }); } initNavigation(){ let elNavigation = $('#navigation'); let sldMoveSpeed = $('#sldMoveSpeed'); let lblMoveSpeed = $('#lblMoveSpeed'); elNavigation.append(this.createToolIcon( Potree.resourcePath + '/icons/earth_controls_1.png', '[title]tt.earth_control', () => { this.viewer.setControls(this.viewer.earthControls); } )); elNavigation.append(this.createToolIcon( Potree.resourcePath + '/icons/fps_controls.svg', '[title]tt.flight_control', () => { this.viewer.setControls(this.viewer.fpControls); this.viewer.fpControls.lockElevation = false; } )); elNavigation.append(this.createToolIcon( Potree.resourcePath + '/icons/helicopter_controls.svg', '[title]tt.heli_control', () => { this.viewer.setControls(this.viewer.fpControls); this.viewer.fpControls.lockElevation = true; } )); elNavigation.append(this.createToolIcon( Potree.resourcePath + '/icons/orbit_controls.svg', '[title]tt.orbit_control', () => { this.viewer.setControls(this.viewer.orbitControls); } )); elNavigation.append(this.createToolIcon( Potree.resourcePath + '/icons/focus.svg', '[title]tt.focus_control', () => { this.viewer.fitToScreen(); } )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/navigation_cube.svg", "[title]tt.navigation_cube_control", () => {this.viewer.toggleNavigationCube();} )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/images/compas.svg", "[title]tt.compass", () => { const visible = !this.viewer.compass.isVisible(); this.viewer.compass.setVisible(visible); } )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/camera_animation.svg", "[title]tt.camera_animation", () => { const animation = CameraAnimation.defaultFromView(this.viewer); viewer.scene.addCameraAnimation(animation); } )); elNavigation.append("
      "); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/left.svg", "[title]tt.left_view_control", () => {this.viewer.setLeftView();} )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/right.svg", "[title]tt.right_view_control", () => {this.viewer.setRightView();} )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/front.svg", "[title]tt.front_view_control", () => {this.viewer.setFrontView();} )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/back.svg", "[title]tt.back_view_control", () => {this.viewer.setBackView();} )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/top.svg", "[title]tt.top_view_control", () => {this.viewer.setTopView();} )); elNavigation.append(this.createToolIcon( Potree.resourcePath + "/icons/bottom.svg", "[title]tt.bottom_view_control", () => {this.viewer.setBottomView();} )); let elCameraProjection = $(` `); elNavigation.append(elCameraProjection); elCameraProjection.selectgroup({title: "Camera Projection"}); elCameraProjection.find("input").click( (e) => { this.viewer.setCameraMode(CameraMode[e.target.value]); }); let cameraMode = Object.keys(CameraMode) .filter(key => CameraMode[key] === this.viewer.scene.cameraMode); elCameraProjection.find(`input[value=${cameraMode}]`).trigger("click"); let speedRange = new Vector2(1, 10 * 1000); let toLinearSpeed = (value) => { return Math.pow(value, 4) * speedRange.y + speedRange.x; }; let toExpSpeed = (value) => { return Math.pow((value - speedRange.x) / speedRange.y, 1 / 4); }; sldMoveSpeed.slider({ value: toExpSpeed(this.viewer.getMoveSpeed()), min: 0, max: 1, step: 0.01, slide: (event, ui) => { this.viewer.setMoveSpeed(toLinearSpeed(ui.value)); } }); this.viewer.addEventListener('move_speed_changed', (event) => { lblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1)); sldMoveSpeed.slider({value: toExpSpeed(this.viewer.getMoveSpeed())}); }); lblMoveSpeed.html(this.viewer.getMoveSpeed().toFixed(1)); } initSettings(){ { $('#sldMinNodeSize').slider({ value: this.viewer.getMinNodeSize(), min: 0, max: 1000, step: 0.01, slide: (event, ui) => { this.viewer.setMinNodeSize(ui.value); } }); this.viewer.addEventListener('minnodesize_changed', (event) => { $('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize())); $('#sldMinNodeSize').slider({value: this.viewer.getMinNodeSize()}); }); $('#lblMinNodeSize').html(parseInt(this.viewer.getMinNodeSize())); } { let elSplatQuality = $("#splat_quality_options"); elSplatQuality.selectgroup({title: "Splat Quality"}); elSplatQuality.find("input").click( (e) => { if(e.target.value === "standard"){ this.viewer.useHQ = false; }else if(e.target.value === "hq"){ this.viewer.useHQ = true; } }); let currentQuality = this.viewer.useHQ ? "hq" : "standard"; elSplatQuality.find(`input[value=${currentQuality}]`).trigger("click"); } $('#show_bounding_box').click(() => { this.viewer.setShowBoundingBox($('#show_bounding_box').prop("checked")); }); $('#set_freeze').click(() => { this.viewer.setFreeze($('#set_freeze').prop("checked")); }); } } class AnnotationTool extends EventDispatcher{ constructor (viewer) { super(); this.viewer = viewer; this.renderer = viewer.renderer; this.sg = new SphereGeometry(0.1); this.sm = new MeshNormalMaterial(); this.s = new Mesh(this.sg, this.sm); } startInsertion (args = {}) { let domElement = this.viewer.renderer.domElement; let annotation = new Annotation({ position: [589748.270, 231444.540, 753.675], title: "Annotation Title", description: `Annotation Description` }); this.dispatchEvent({type: 'start_inserting_annotation', annotation: annotation}); const annotations = this.viewer.scene.annotations; annotations.add(annotation); let callbacks = { cancel: null, finish: null, }; let insertionCallback = (e) => { if (e.button === MOUSE.LEFT) { callbacks.finish(); } else if (e.button === MOUSE.RIGHT) { callbacks.cancel(); } }; callbacks.cancel = e => { annotations.remove(annotation); domElement.removeEventListener('mouseup', insertionCallback, true); }; callbacks.finish = e => { domElement.removeEventListener('mouseup', insertionCallback, true); }; domElement.addEventListener('mouseup', insertionCallback, true); let drag = (e) => { let I = Utils.getMousePointCloudIntersection( e.drag.end, e.viewer.scene.getActiveCamera(), e.viewer, e.viewer.scene.pointclouds, {pickClipped: true}); if (I) { this.s.position.copy(I.location); annotation.position.copy(I.location); } }; let drop = (e) => { viewer.scene.scene.remove(this.s); this.s.removeEventListener("drag", drag); this.s.removeEventListener("drop", drop); }; this.s.addEventListener('drag', drag); this.s.addEventListener('drop', drop); this.viewer.scene.scene.add(this.s); this.viewer.inputHandler.startDragging(this.s); return annotation; } update(){ // let camera = this.viewer.scene.getActiveCamera(); // let domElement = this.renderer.domElement; // let measurements = this.viewer.scene.measurements; // const renderAreaSize = this.renderer.getSize(new THREE.Vector2()); // let clientWidth = renderAreaSize.width; // let clientHeight = renderAreaSize.height; } render(){ //this.viewer.renderer.render(this.scene, this.viewer.scene.getActiveCamera()); } }; /** * @author mschuetz / http://mschuetz.at * * */ class InputHandler extends EventDispatcher { constructor (viewer) { super(); this.viewer = viewer; this.renderer = viewer.renderer; this.domElement = this.renderer.domElement; this.enabled = true; this.scene = null; this.interactiveScenes = []; this.interactiveObjects = new Set(); this.inputListeners = []; this.blacklist = new Set(); this.drag = null; this.mouse = new Vector2(0, 0); this.selection = []; this.hoveredElements = []; this.pressedKeys = {}; this.wheelDelta = 0; this.speed = 1; this.logMessages = false; if (this.domElement.tabIndex === -1) { this.domElement.tabIndex = 2222; } this.domElement.addEventListener('contextmenu', (event) => { event.preventDefault(); }, false); this.domElement.addEventListener('click', this.onMouseClick.bind(this), false); this.domElement.addEventListener('mousedown', this.onMouseDown.bind(this), false); this.domElement.addEventListener('mouseup', this.onMouseUp.bind(this), false); this.domElement.addEventListener('mousemove', this.onMouseMove.bind(this), false); this.domElement.addEventListener('mousewheel', this.onMouseWheel.bind(this), false); this.domElement.addEventListener('DOMMouseScroll', this.onMouseWheel.bind(this), false); // Firefox this.domElement.addEventListener('dblclick', this.onDoubleClick.bind(this)); this.domElement.addEventListener('keydown', this.onKeyDown.bind(this)); this.domElement.addEventListener('keyup', this.onKeyUp.bind(this)); this.domElement.addEventListener('touchstart', this.onTouchStart.bind(this)); this.domElement.addEventListener('touchend', this.onTouchEnd.bind(this)); this.domElement.addEventListener('touchmove', this.onTouchMove.bind(this)); } addInputListener (listener) { this.inputListeners.push(listener); } removeInputListener (listener) { this.inputListeners = this.inputListeners.filter(e => e !== listener); } getSortedListeners(){ return this.inputListeners.sort( (a, b) => { let ia = (a.importance !== undefined) ? a.importance : 0; let ib = (b.importance !== undefined) ? b.importance : 0; return ib - ia; }); } onTouchStart (e) { if (this.logMessages) console.log(this.constructor.name + ': onTouchStart'); e.preventDefault(); if (e.touches.length === 1) { let rect = this.domElement.getBoundingClientRect(); let x = e.touches[0].pageX - rect.left; let y = e.touches[0].pageY - rect.top; this.mouse.set(x, y); this.startDragging(null); } for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: e.type, touches: e.touches, changedTouches: e.changedTouches }); } } onTouchEnd (e) { if (this.logMessages) console.log(this.constructor.name + ': onTouchEnd'); e.preventDefault(); for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'drop', drag: this.drag, viewer: this.viewer }); } this.drag = null; for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: e.type, touches: e.touches, changedTouches: e.changedTouches }); } } onTouchMove (e) { if (this.logMessages) console.log(this.constructor.name + ': onTouchMove'); e.preventDefault(); if (e.touches.length === 1) { let rect = this.domElement.getBoundingClientRect(); let x = e.touches[0].pageX - rect.left; let y = e.touches[0].pageY - rect.top; this.mouse.set(x, y); if (this.drag) { this.drag.mouse = 1; this.drag.lastDrag.x = x - this.drag.end.x; this.drag.lastDrag.y = y - this.drag.end.y; this.drag.end.set(x, y); if (this.logMessages) console.log(this.constructor.name + ': drag: '); for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'drag', drag: this.drag, viewer: this.viewer }); } } } for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: e.type, touches: e.touches, changedTouches: e.changedTouches }); } // DEBUG CODE // let debugTouches = [...e.touches, { // pageX: this.domElement.clientWidth / 2, // pageY: this.domElement.clientHeight / 2}]; // for(let inputListener of this.getSortedListeners()){ // inputListener.dispatchEvent({ // type: e.type, // touches: debugTouches, // changedTouches: e.changedTouches // }); // } } onKeyDown (e) { if (this.logMessages) console.log(this.constructor.name + ': onKeyDown'); // DELETE if (e.keyCode === KeyCodes.DELETE && this.selection.length > 0) { this.dispatchEvent({ type: 'delete', selection: this.selection }); this.deselectAll(); } this.dispatchEvent({ type: 'keydown', keyCode: e.keyCode, event: e }); // for(let l of this.getSortedListeners()){ // l.dispatchEvent({ // type: "keydown", // keyCode: e.keyCode, // event: e // }); // } this.pressedKeys[e.keyCode] = true; // e.preventDefault(); } onKeyUp (e) { if (this.logMessages) console.log(this.constructor.name + ': onKeyUp'); delete this.pressedKeys[e.keyCode]; e.preventDefault(); } onDoubleClick (e) { if (this.logMessages) console.log(this.constructor.name + ': onDoubleClick'); let consumed = false; for (let hovered of this.hoveredElements) { if (hovered._listeners && hovered._listeners['dblclick']) { hovered.object.dispatchEvent({ type: 'dblclick', mouse: this.mouse, object: hovered.object }); consumed = true; break; } } if (!consumed) { for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'dblclick', mouse: this.mouse, object: null }); } } e.preventDefault(); } onMouseClick (e) { if (this.logMessages) console.log(this.constructor.name + ': onMouseClick'); e.preventDefault(); } onMouseDown (e) { if (this.logMessages) console.log(this.constructor.name + ': onMouseDown'); e.preventDefault(); let consumed = false; let consume = () => { return consumed = true; }; if (this.hoveredElements.length === 0) { for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'mousedown', viewer: this.viewer, mouse: this.mouse }); } }else { for(let hovered of this.hoveredElements){ let object = hovered.object; object.dispatchEvent({ type: 'mousedown', viewer: this.viewer, consume: consume }); if(consumed){ break; } } } if (!this.drag) { let target = this.hoveredElements .find(el => ( el.object._listeners && el.object._listeners['drag'] && el.object._listeners['drag'].length > 0)); if (target) { this.startDragging(target.object, {location: target.point}); } else { this.startDragging(null); } } if (this.scene) { this.viewStart = this.scene.view.clone(); } } onMouseUp (e) { if (this.logMessages) console.log(this.constructor.name + ': onMouseUp'); e.preventDefault(); let noMovement = this.getNormalizedDrag().length() === 0; let consumed = false; let consume = () => { return consumed = true; }; if (this.hoveredElements.length === 0) { for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'mouseup', viewer: this.viewer, mouse: this.mouse, consume: consume }); if(consumed){ break; } } }else { let hovered = this.hoveredElements .map(e => e.object) .find(e => (e._listeners && e._listeners['mouseup'])); if(hovered){ hovered.dispatchEvent({ type: 'mouseup', viewer: this.viewer, consume: consume }); } } if (this.drag) { if (this.drag.object) { if (this.logMessages) console.log(`${this.constructor.name}: drop ${this.drag.object.name}`); this.drag.object.dispatchEvent({ type: 'drop', drag: this.drag, viewer: this.viewer }); } else { for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'drop', drag: this.drag, viewer: this.viewer }); } } // check for a click let clicked = this.hoveredElements.map(h => h.object).find(v => v === this.drag.object) !== undefined; if(clicked){ if (this.logMessages) console.log(`${this.constructor.name}: click ${this.drag.object.name}`); this.drag.object.dispatchEvent({ type: 'click', viewer: this.viewer, consume: consume, }); } this.drag = null; } if(!consumed){ if (e.button === MOUSE.LEFT) { if (noMovement) { let selectable = this.hoveredElements .find(el => el.object._listeners && el.object._listeners['select']); if (selectable) { selectable = selectable.object; if (this.isSelected(selectable)) { this.selection .filter(e => e !== selectable) .forEach(e => this.toggleSelection(e)); } else { this.deselectAll(); this.toggleSelection(selectable); } } else { this.deselectAll(); } } } else if ((e.button === MOUSE.RIGHT) && noMovement) { this.deselectAll(); } } } onMouseMove (e) { e.preventDefault(); let rect = this.domElement.getBoundingClientRect(); let x = e.clientX - rect.left; let y = e.clientY - rect.top; this.mouse.set(x, y); let hoveredElements = this.getHoveredElements(); if(hoveredElements.length > 0){ let names = hoveredElements.map(h => h.object.name).join(", "); if (this.logMessages) console.log(`${this.constructor.name}: onMouseMove; hovered: '${names}'`); } if (this.drag) { this.drag.mouse = e.buttons; this.drag.lastDrag.x = x - this.drag.end.x; this.drag.lastDrag.y = y - this.drag.end.y; this.drag.end.set(x, y); if (this.drag.object) { if (this.logMessages) console.log(this.constructor.name + ': drag: ' + this.drag.object.name); this.drag.object.dispatchEvent({ type: 'drag', drag: this.drag, viewer: this.viewer }); } else { if (this.logMessages) console.log(this.constructor.name + ': drag: '); let dragConsumed = false; for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'drag', drag: this.drag, viewer: this.viewer, consume: () => {dragConsumed = true;} }); if(dragConsumed){ break; } } } }else { let curr = hoveredElements.map(a => a.object).find(a => true); let prev = this.hoveredElements.map(a => a.object).find(a => true); if(curr !== prev){ if(curr){ if (this.logMessages) console.log(`${this.constructor.name}: mouseover: ${curr.name}`); curr.dispatchEvent({ type: 'mouseover', object: curr, }); } if(prev){ if (this.logMessages) console.log(`${this.constructor.name}: mouseleave: ${prev.name}`); prev.dispatchEvent({ type: 'mouseleave', object: prev, }); } } if(hoveredElements.length > 0){ let object = hoveredElements .map(e => e.object) .find(e => (e._listeners && e._listeners['mousemove'])); if(object){ object.dispatchEvent({ type: 'mousemove', object: object }); } } } // for (let inputListener of this.getSortedListeners()) { // inputListener.dispatchEvent({ // type: 'mousemove', // object: null // }); // } this.hoveredElements = hoveredElements; } onMouseWheel(e){ if(!this.enabled) return; if(this.logMessages) console.log(this.constructor.name + ": onMouseWheel"); e.preventDefault(); let delta = 0; if (e.wheelDelta !== undefined) { // WebKit / Opera / Explorer 9 delta = e.wheelDelta; } else if (e.detail !== undefined) { // Firefox delta = -e.detail; } let ndelta = Math.sign(delta); // this.wheelDelta += Math.sign(delta); if (this.hoveredElement) { this.hoveredElement.object.dispatchEvent({ type: 'mousewheel', delta: ndelta, object: this.hoveredElement.object }); } else { for (let inputListener of this.getSortedListeners()) { inputListener.dispatchEvent({ type: 'mousewheel', delta: ndelta, object: null }); } } } startDragging (object, args = null) { let name = object ? object.name : "no name"; if (this.logMessages) console.log(`${this.constructor.name}: startDragging: '${name}'`); this.drag = { start: this.mouse.clone(), end: this.mouse.clone(), lastDrag: new Vector2(0, 0), startView: this.scene.view.clone(), object: object }; if (args) { for (let key of Object.keys(args)) { this.drag[key] = args[key]; } } } getMousePointCloudIntersection (mouse) { return Utils.getMousePointCloudIntersection( this.mouse, this.scene.getActiveCamera(), this.viewer, this.scene.pointclouds); } toggleSelection (object) { let oldSelection = this.selection; let index = this.selection.indexOf(object); if (index === -1) { this.selection.push(object); object.dispatchEvent({ type: 'select' }); } else { this.selection.splice(index, 1); object.dispatchEvent({ type: 'deselect' }); } this.dispatchEvent({ type: 'selection_changed', oldSelection: oldSelection, selection: this.selection }); } deselect(object){ let oldSelection = this.selection; let index = this.selection.indexOf(object); if(index >= 0){ this.selection.splice(index, 1); object.dispatchEvent({ type: 'deselect' }); this.dispatchEvent({ type: 'selection_changed', oldSelection: oldSelection, selection: this.selection }); } } deselectAll () { for (let object of this.selection) { object.dispatchEvent({ type: 'deselect' }); } let oldSelection = this.selection; if (this.selection.length > 0) { this.selection = []; this.dispatchEvent({ type: 'selection_changed', oldSelection: oldSelection, selection: this.selection }); } } isSelected (object) { let index = this.selection.indexOf(object); return index !== -1; } registerInteractiveObject(object){ this.interactiveObjects.add(object); } removeInteractiveObject(object){ this.interactiveObjects.delete(object); } registerInteractiveScene (scene) { let index = this.interactiveScenes.indexOf(scene); if (index === -1) { this.interactiveScenes.push(scene); } } unregisterInteractiveScene (scene) { let index = this.interactiveScenes.indexOf(scene); if (index > -1) { this.interactiveScenes.splice(index, 1); } } getHoveredElement () { let hoveredElements = this.getHoveredElements(); if (hoveredElements.length > 0) { return hoveredElements[0]; } else { return null; } } getHoveredElements () { let scenes = this.interactiveScenes.concat(this.scene.scene); let interactableListeners = ['mouseup', 'mousemove', 'mouseover', 'mouseleave', 'drag', 'drop', 'click', 'select', 'deselect']; let interactables = []; for (let scene of scenes) { scene.traverseVisible(node => { if (node._listeners && node.visible && !this.blacklist.has(node)) { let hasInteractableListener = interactableListeners.filter((e) => { return node._listeners[e] !== undefined; }).length > 0; if (hasInteractableListener) { interactables.push(node); } } }); } let camera = this.scene.getActiveCamera(); let ray = Utils.mouseToRay(this.mouse, camera, this.domElement.clientWidth, this.domElement.clientHeight); let raycaster = new Raycaster(); raycaster.ray.set(ray.origin, ray.direction); raycaster.params.Line.threshold = 0.2; let intersections = raycaster.intersectObjects(interactables.filter(o => o.visible), false); return intersections; } setScene (scene) { this.deselectAll(); this.scene = scene; } update (delta) { } getNormalizedDrag () { if (!this.drag) { return new Vector2(0, 0); } let diff = new Vector2().subVectors(this.drag.end, this.drag.start); diff.x = diff.x / this.domElement.clientWidth; diff.y = diff.y / this.domElement.clientHeight; return diff; } getNormalizedLastDrag () { if (!this.drag) { return new Vector2(0, 0); } let lastDrag = this.drag.lastDrag.clone(); lastDrag.x = lastDrag.x / this.domElement.clientWidth; lastDrag.y = lastDrag.y / this.domElement.clientHeight; return lastDrag; } } class NavigationCube extends Object3D { constructor(viewer){ super(); this.viewer = viewer; let createPlaneMaterial = (img) => { let material = new MeshBasicMaterial( { depthTest: true, depthWrite: true, side: DoubleSide }); new TextureLoader().load( exports.resourcePath + '/textures/navigation/' + img, function(texture) { texture.anisotropy = viewer.renderer.capabilities.getMaxAnisotropy(); material.map = texture; material.needsUpdate = true; }); return material; }; let planeGeometry = new PlaneGeometry(1, 1); this.front = new Mesh(planeGeometry, createPlaneMaterial('F.png')); this.front.position.y = -0.5; this.front.rotation.x = Math.PI / 2.0; this.front.updateMatrixWorld(); this.front.name = "F"; this.add(this.front); this.back = new Mesh(planeGeometry, createPlaneMaterial('B.png')); this.back.position.y = 0.5; this.back.rotation.x = Math.PI / 2.0; this.back.updateMatrixWorld(); this.back.name = "B"; this.add(this.back); this.left = new Mesh(planeGeometry, createPlaneMaterial('L.png')); this.left.position.x = -0.5; this.left.rotation.y = Math.PI / 2.0; this.left.updateMatrixWorld(); this.left.name = "L"; this.add(this.left); this.right = new Mesh(planeGeometry, createPlaneMaterial('R.png')); this.right.position.x = 0.5; this.right.rotation.y = Math.PI / 2.0; this.right.updateMatrixWorld(); this.right.name = "R"; this.add(this.right); this.bottom = new Mesh(planeGeometry, createPlaneMaterial('D.png')); this.bottom.position.z = -0.5; this.bottom.updateMatrixWorld(); this.bottom.name = "D"; this.add(this.bottom); this.top = new Mesh(planeGeometry, createPlaneMaterial('U.png')); this.top.position.z = 0.5; this.top.updateMatrixWorld(); this.top.name = "U"; this.add(this.top); this.width = 150; // in px this.camera = new OrthographicCamera(-1, 1, 1, -1, -1, 1); this.camera.position.copy(new Vector3(0, 0, 0)); this.camera.lookAt(new Vector3(0, 1, 0)); this.camera.updateMatrixWorld(); this.camera.rotation.order = "ZXY"; let onMouseDown = (event) => { if (!this.visible) { return; } this.pickedFace = null; let mouse = new Vector2(); mouse.x = event.clientX - (window.innerWidth - this.width); mouse.y = event.clientY; if(mouse.x < 0 || mouse.y > this.width) return; mouse.x = (mouse.x / this.width) * 2 - 1; mouse.y = -(mouse.y / this.width) * 2 + 1; let raycaster = new Raycaster(); raycaster.setFromCamera(mouse, this.camera); raycaster.ray.origin.sub(this.camera.getWorldDirection(new Vector3())); let intersects = raycaster.intersectObjects(this.children); let minDistance = 1000; for (let i = 0; i < intersects.length; i++) { if(intersects[i].distance < minDistance) { this.pickedFace = intersects[i].object.name; minDistance = intersects[i].distance; } } if(this.pickedFace) { this.viewer.setView(this.pickedFace); } }; this.viewer.renderer.domElement.addEventListener('mousedown', onMouseDown, false); } update(rotation) { this.camera.rotation.copy(rotation); this.camera.updateMatrixWorld(); } } /** * @author mschuetz / http://mschuetz.at * * adapted from THREE.OrbitControls by * * @author qiao / https://github.com/qiao * @author mrdoob / http://mrdoob.com * @author alteredq / http://alteredqualia.com/ * @author WestLangley / http://github.com/WestLangley * @author erich666 / http://erichaines.com * * * */ class OrbitControls extends EventDispatcher{ constructor(viewer){ super(); this.viewer = viewer; this.renderer = viewer.renderer; this.scene = null; this.sceneControls = new Scene(); this.rotationSpeed = 5; this.fadeFactor = 20; this.yawDelta = 0; this.pitchDelta = 0; this.panDelta = new Vector2(0, 0); this.radiusDelta = 0; this.doubleClockZoomEnabled = true; this.tweens = []; let drag = (e) => { if (e.drag.object !== null) { return; } if (e.drag.startHandled === undefined) { e.drag.startHandled = true; this.dispatchEvent({type: 'start'}); } let ndrag = { x: e.drag.lastDrag.x / this.renderer.domElement.clientWidth, y: e.drag.lastDrag.y / this.renderer.domElement.clientHeight }; if (e.drag.mouse === MOUSE$1.LEFT) { this.yawDelta += ndrag.x * this.rotationSpeed; this.pitchDelta += ndrag.y * this.rotationSpeed; this.stopTweens(); } else if (e.drag.mouse === MOUSE$1.RIGHT) { this.panDelta.x += ndrag.x; this.panDelta.y += ndrag.y; this.stopTweens(); } }; let drop = e => { this.dispatchEvent({type: 'end'}); }; let scroll = (e) => { let resolvedRadius = this.scene.view.radius + this.radiusDelta; this.radiusDelta += -e.delta * resolvedRadius * 0.1; this.stopTweens(); }; let dblclick = (e) => { if(this.doubleClockZoomEnabled){ this.zoomToLocation(e.mouse); } }; let previousTouch = null; let touchStart = e => { previousTouch = e; }; let touchEnd = e => { previousTouch = e; }; let touchMove = e => { if (e.touches.length === 2 && previousTouch.touches.length === 2){ let prev = previousTouch; let curr = e; let prevDX = prev.touches[0].pageX - prev.touches[1].pageX; let prevDY = prev.touches[0].pageY - prev.touches[1].pageY; let prevDist = Math.sqrt(prevDX * prevDX + prevDY * prevDY); let currDX = curr.touches[0].pageX - curr.touches[1].pageX; let currDY = curr.touches[0].pageY - curr.touches[1].pageY; let currDist = Math.sqrt(currDX * currDX + currDY * currDY); let delta = currDist / prevDist; let resolvedRadius = this.scene.view.radius + this.radiusDelta; let newRadius = resolvedRadius / delta; this.radiusDelta = newRadius - resolvedRadius; this.stopTweens(); }else if(e.touches.length === 3 && previousTouch.touches.length === 3){ let prev = previousTouch; let curr = e; let prevMeanX = (prev.touches[0].pageX + prev.touches[1].pageX + prev.touches[2].pageX) / 3; let prevMeanY = (prev.touches[0].pageY + prev.touches[1].pageY + prev.touches[2].pageY) / 3; let currMeanX = (curr.touches[0].pageX + curr.touches[1].pageX + curr.touches[2].pageX) / 3; let currMeanY = (curr.touches[0].pageY + curr.touches[1].pageY + curr.touches[2].pageY) / 3; let delta = { x: (currMeanX - prevMeanX) / this.renderer.domElement.clientWidth, y: (currMeanY - prevMeanY) / this.renderer.domElement.clientHeight }; this.panDelta.x += delta.x; this.panDelta.y += delta.y; this.stopTweens(); } previousTouch = e; }; this.addEventListener('touchstart', touchStart); this.addEventListener('touchend', touchEnd); this.addEventListener('touchmove', touchMove); this.addEventListener('drag', drag); this.addEventListener('drop', drop); this.addEventListener('mousewheel', scroll); this.addEventListener('dblclick', dblclick); } setScene (scene) { this.scene = scene; } stop(){ this.yawDelta = 0; this.pitchDelta = 0; this.radiusDelta = 0; this.panDelta.set(0, 0); } zoomToLocation(mouse){ let camera = this.scene.getActiveCamera(); let I = Utils.getMousePointCloudIntersection( mouse, camera, this.viewer, this.scene.pointclouds, {pickClipped: true}); if (I === null) { return; } let targetRadius = 0; { let minimumJumpDistance = 0.2; let domElement = this.renderer.domElement; let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray); let lastNode = nodes[nodes.length - 1]; let radius = lastNode.getBoundingSphere(new Sphere()).radius; targetRadius = Math.min(this.scene.view.radius, radius); targetRadius = Math.max(minimumJumpDistance, targetRadius); } let d = this.scene.view.direction.multiplyScalar(-1); let cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius)); // TODO Unused: let controlsTargetPosition = I.location; let animationDuration = 600; let easing = TWEEN.Easing.Quartic.Out; { // animate let value = {x: 0}; let tween = new TWEEN.Tween(value).to({x: 1}, animationDuration); tween.easing(easing); this.tweens.push(tween); let startPos = this.scene.view.position.clone(); let targetPos = cameraTargetPosition.clone(); let startRadius = this.scene.view.radius; let targetRadius = cameraTargetPosition.distanceTo(I.location); tween.onUpdate(() => { let t = value.x; this.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x; this.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y; this.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z; this.scene.view.radius = (1 - t) * startRadius + t * targetRadius; this.viewer.setMoveSpeed(this.scene.view.radius); }); tween.onComplete(() => { this.tweens = this.tweens.filter(e => e !== tween); }); tween.start(); } } stopTweens () { this.tweens.forEach(e => e.stop()); this.tweens = []; } update (delta) { let view = this.scene.view; { // apply rotation let progression = Math.min(1, this.fadeFactor * delta); let yaw = view.yaw; let pitch = view.pitch; let pivot = view.getPivot(); yaw -= progression * this.yawDelta; pitch -= progression * this.pitchDelta; view.yaw = yaw; view.pitch = pitch; let V = this.scene.view.direction.multiplyScalar(-view.radius); let position = new Vector3().addVectors(pivot, V); view.position.copy(position); } { // apply pan let progression = Math.min(1, this.fadeFactor * delta); let panDistance = progression * view.radius * 3; let px = -this.panDelta.x * panDistance; let py = this.panDelta.y * panDistance; view.pan(px, py); } { // apply zoom let progression = Math.min(1, this.fadeFactor * delta); // let radius = view.radius + progression * this.radiusDelta * view.radius * 0.1; let radius = view.radius + progression * this.radiusDelta; let V = view.direction.multiplyScalar(-radius); let position = new Vector3().addVectors(view.getPivot(), V); view.radius = radius; view.position.copy(position); } { let speed = view.radius; this.viewer.setMoveSpeed(speed); } { // decelerate over time let progression = Math.min(1, this.fadeFactor * delta); let attenuation = Math.max(0, 1 - this.fadeFactor * delta); this.yawDelta *= attenuation; this.pitchDelta *= attenuation; this.panDelta.multiplyScalar(attenuation); // this.radiusDelta *= attenuation; this.radiusDelta -= progression * this.radiusDelta; } } }; /** * @author mschuetz / http://mschuetz.at * * adapted from THREE.OrbitControls by * * @author qiao / https://github.com/qiao * @author mrdoob / http://mrdoob.com * @author alteredq / http://alteredqualia.com/ * @author WestLangley / http://github.com/WestLangley * @author erich666 / http://erichaines.com * * * */ class FirstPersonControls extends EventDispatcher { constructor (viewer) { super(); this.viewer = viewer; this.renderer = viewer.renderer; this.scene = null; this.sceneControls = new Scene(); this.rotationSpeed = 200; this.moveSpeed = 10; this.lockElevation = false; this.keys = { FORWARD: ['W'.charCodeAt(0), 38], BACKWARD: ['S'.charCodeAt(0), 40], LEFT: ['A'.charCodeAt(0), 37], RIGHT: ['D'.charCodeAt(0), 39], UP: ['R'.charCodeAt(0), 33], DOWN: ['F'.charCodeAt(0), 34] }; this.fadeFactor = 50; this.yawDelta = 0; this.pitchDelta = 0; this.translationDelta = new Vector3(0, 0, 0); this.translationWorldDelta = new Vector3(0, 0, 0); this.tweens = []; let drag = (e) => { if (e.drag.object !== null) { return; } if (e.drag.startHandled === undefined) { e.drag.startHandled = true; this.dispatchEvent({type: 'start'}); } let moveSpeed = this.viewer.getMoveSpeed(); let ndrag = { x: e.drag.lastDrag.x / this.renderer.domElement.clientWidth, y: e.drag.lastDrag.y / this.renderer.domElement.clientHeight }; if (e.drag.mouse === MOUSE$1.LEFT) { this.yawDelta += ndrag.x * this.rotationSpeed; this.pitchDelta += ndrag.y * this.rotationSpeed; } else if (e.drag.mouse === MOUSE$1.RIGHT) { this.translationDelta.x -= ndrag.x * moveSpeed * 100; this.translationDelta.z += ndrag.y * moveSpeed * 100; } }; let drop = e => { this.dispatchEvent({type: 'end'}); }; let scroll = (e) => { let speed = this.viewer.getMoveSpeed(); if (e.delta < 0) { speed = speed * 0.9; } else if (e.delta > 0) { speed = speed / 0.9; } speed = Math.max(speed, 0.1); this.viewer.setMoveSpeed(speed); }; let dblclick = (e) => { this.zoomToLocation(e.mouse); }; this.addEventListener('drag', drag); this.addEventListener('drop', drop); this.addEventListener('mousewheel', scroll); this.addEventListener('dblclick', dblclick); } setScene (scene) { this.scene = scene; } stop(){ this.yawDelta = 0; this.pitchDelta = 0; this.translationDelta.set(0, 0, 0); } zoomToLocation(mouse){ let camera = this.scene.getActiveCamera(); let I = Utils.getMousePointCloudIntersection( mouse, camera, this.viewer, this.scene.pointclouds); if (I === null) { return; } let targetRadius = 0; { let minimumJumpDistance = 0.2; let domElement = this.renderer.domElement; let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray); let lastNode = nodes[nodes.length - 1]; let radius = lastNode.getBoundingSphere(new Sphere()).radius; targetRadius = Math.min(this.scene.view.radius, radius); targetRadius = Math.max(minimumJumpDistance, targetRadius); } let d = this.scene.view.direction.multiplyScalar(-1); let cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius)); // TODO Unused: let controlsTargetPosition = I.location; let animationDuration = 600; let easing = TWEEN.Easing.Quartic.Out; { // animate let value = {x: 0}; let tween = new TWEEN.Tween(value).to({x: 1}, animationDuration); tween.easing(easing); this.tweens.push(tween); let startPos = this.scene.view.position.clone(); let targetPos = cameraTargetPosition.clone(); let startRadius = this.scene.view.radius; let targetRadius = cameraTargetPosition.distanceTo(I.location); tween.onUpdate(() => { let t = value.x; this.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x; this.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y; this.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z; this.scene.view.radius = (1 - t) * startRadius + t * targetRadius; this.viewer.setMoveSpeed(this.scene.view.radius / 2.5); }); tween.onComplete(() => { this.tweens = this.tweens.filter(e => e !== tween); }); tween.start(); } } update (delta) { let view = this.scene.view; { // cancel move animations on user input let changes = [ this.yawDelta, this.pitchDelta, this.translationDelta.length(), this.translationWorldDelta.length() ]; let changeHappens = changes.some(e => Math.abs(e) > 0.001); if (changeHappens && this.tweens.length > 0) { this.tweens.forEach(e => e.stop()); this.tweens = []; } } { // accelerate while input is given let ih = this.viewer.inputHandler; let moveForward = this.keys.FORWARD.some(e => ih.pressedKeys[e]); let moveBackward = this.keys.BACKWARD.some(e => ih.pressedKeys[e]); let moveLeft = this.keys.LEFT.some(e => ih.pressedKeys[e]); let moveRight = this.keys.RIGHT.some(e => ih.pressedKeys[e]); let moveUp = this.keys.UP.some(e => ih.pressedKeys[e]); let moveDown = this.keys.DOWN.some(e => ih.pressedKeys[e]); if(this.lockElevation){ let dir = view.direction; dir.z = 0; dir.normalize(); if (moveForward && moveBackward) { this.translationWorldDelta.set(0, 0, 0); } else if (moveForward) { this.translationWorldDelta.copy(dir.multiplyScalar(this.viewer.getMoveSpeed())); } else if (moveBackward) { this.translationWorldDelta.copy(dir.multiplyScalar(-this.viewer.getMoveSpeed())); } }else { if (moveForward && moveBackward) { this.translationDelta.y = 0; } else if (moveForward) { this.translationDelta.y = this.viewer.getMoveSpeed(); } else if (moveBackward) { this.translationDelta.y = -this.viewer.getMoveSpeed(); } } if (moveLeft && moveRight) { this.translationDelta.x = 0; } else if (moveLeft) { this.translationDelta.x = -this.viewer.getMoveSpeed(); } else if (moveRight) { this.translationDelta.x = this.viewer.getMoveSpeed(); } if (moveUp && moveDown) { this.translationWorldDelta.z = 0; } else if (moveUp) { this.translationWorldDelta.z = this.viewer.getMoveSpeed(); } else if (moveDown) { this.translationWorldDelta.z = -this.viewer.getMoveSpeed(); } } { // apply rotation let yaw = view.yaw; let pitch = view.pitch; yaw -= this.yawDelta * delta; pitch -= this.pitchDelta * delta; view.yaw = yaw; view.pitch = pitch; } { // apply translation view.translate( this.translationDelta.x * delta, this.translationDelta.y * delta, this.translationDelta.z * delta ); view.translateWorld( this.translationWorldDelta.x * delta, this.translationWorldDelta.y * delta, this.translationWorldDelta.z * delta ); } { // set view target according to speed view.radius = 3 * this.viewer.getMoveSpeed(); } { // decelerate over time let attenuation = Math.max(0, 1 - this.fadeFactor * delta); this.yawDelta *= attenuation; this.pitchDelta *= attenuation; this.translationDelta.multiplyScalar(attenuation); this.translationWorldDelta.multiplyScalar(attenuation); } } }; class EarthControls extends EventDispatcher { constructor (viewer) { super(viewer); this.viewer = viewer; this.renderer = viewer.renderer; this.scene = null; this.sceneControls = new Scene(); this.rotationSpeed = 10; this.fadeFactor = 20; this.wheelDelta = 0; this.zoomDelta = new Vector3(); this.camStart = null; this.tweens = []; { let sg = new SphereGeometry(1, 16, 16); let sm = new MeshNormalMaterial(); this.pivotIndicator = new Mesh(sg, sm); this.pivotIndicator.visible = false; this.sceneControls.add(this.pivotIndicator); } let drag = (e) => { if (e.drag.object !== null) { return; } if (!this.pivot) { return; } if (e.drag.startHandled === undefined) { e.drag.startHandled = true; this.dispatchEvent({type: 'start'}); } let camStart = this.camStart; let camera = this.scene.getActiveCamera(); let view = this.viewer.scene.view; // let camera = this.viewer.scene.camera; let mouse = e.drag.end; let domElement = this.viewer.renderer.domElement; if (e.drag.mouse === MOUSE$1.LEFT) { let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let plane = new Plane().setFromNormalAndCoplanarPoint( new Vector3(0, 0, 1), this.pivot); let distanceToPlane = ray.distanceToPlane(plane); if (distanceToPlane > 0) { let I = new Vector3().addVectors( camStart.position, ray.direction.clone().multiplyScalar(distanceToPlane)); let movedBy = new Vector3().subVectors( I, this.pivot); let newCamPos = camStart.position.clone().sub(movedBy); view.position.copy(newCamPos); { let distance = newCamPos.distanceTo(this.pivot); view.radius = distance; let speed = view.radius / 2.5; this.viewer.setMoveSpeed(speed); } } } else if (e.drag.mouse === MOUSE$1.RIGHT) { let ndrag = { x: e.drag.lastDrag.x / this.renderer.domElement.clientWidth, y: e.drag.lastDrag.y / this.renderer.domElement.clientHeight }; let yawDelta = -ndrag.x * this.rotationSpeed * 0.5; let pitchDelta = -ndrag.y * this.rotationSpeed * 0.2; let originalPitch = view.pitch; let tmpView = view.clone(); tmpView.pitch = tmpView.pitch + pitchDelta; pitchDelta = tmpView.pitch - originalPitch; let pivotToCam = new Vector3().subVectors(view.position, this.pivot); let pivotToCamTarget = new Vector3().subVectors(view.getPivot(), this.pivot); let side = view.getSide(); pivotToCam.applyAxisAngle(side, pitchDelta); pivotToCamTarget.applyAxisAngle(side, pitchDelta); pivotToCam.applyAxisAngle(new Vector3(0, 0, 1), yawDelta); pivotToCamTarget.applyAxisAngle(new Vector3(0, 0, 1), yawDelta); let newCam = new Vector3().addVectors(this.pivot, pivotToCam); // TODO: Unused: let newCamTarget = new THREE.Vector3().addVectors(this.pivot, pivotToCamTarget); view.position.copy(newCam); view.yaw += yawDelta; view.pitch += pitchDelta; } }; let onMouseDown = e => { let I = Utils.getMousePointCloudIntersection( e.mouse, this.scene.getActiveCamera(), this.viewer, this.scene.pointclouds, {pickClipped: false}); if (I) { this.pivot = I.location; this.camStart = this.scene.getActiveCamera().clone(); this.pivotIndicator.visible = true; this.pivotIndicator.position.copy(I.location); } }; let drop = e => { this.dispatchEvent({type: 'end'}); }; let onMouseUp = e => { this.camStart = null; this.pivot = null; this.pivotIndicator.visible = false; }; let scroll = (e) => { this.wheelDelta += e.delta; }; let dblclick = (e) => { this.zoomToLocation(e.mouse); }; this.addEventListener('drag', drag); this.addEventListener('drop', drop); this.addEventListener('mousewheel', scroll); this.addEventListener('mousedown', onMouseDown); this.addEventListener('mouseup', onMouseUp); this.addEventListener('dblclick', dblclick); } setScene (scene) { this.scene = scene; } stop(){ this.wheelDelta = 0; this.zoomDelta.set(0, 0, 0); } zoomToLocation(mouse){ let camera = this.scene.getActiveCamera(); let I = Utils.getMousePointCloudIntersection( mouse, camera, this.viewer, this.scene.pointclouds); if (I === null) { return; } let targetRadius = 0; { let minimumJumpDistance = 0.2; let domElement = this.renderer.domElement; let ray = Utils.mouseToRay(mouse, camera, domElement.clientWidth, domElement.clientHeight); let nodes = I.pointcloud.nodesOnRay(I.pointcloud.visibleNodes, ray); let lastNode = nodes[nodes.length - 1]; let radius = lastNode.getBoundingSphere(new Sphere()).radius; targetRadius = Math.min(this.scene.view.radius, radius); targetRadius = Math.max(minimumJumpDistance, targetRadius); } let d = this.scene.view.direction.multiplyScalar(-1); let cameraTargetPosition = new Vector3().addVectors(I.location, d.multiplyScalar(targetRadius)); // TODO Unused: let controlsTargetPosition = I.location; let animationDuration = 600; let easing = TWEEN.Easing.Quartic.Out; { // animate let value = {x: 0}; let tween = new TWEEN.Tween(value).to({x: 1}, animationDuration); tween.easing(easing); this.tweens.push(tween); let startPos = this.scene.view.position.clone(); let targetPos = cameraTargetPosition.clone(); let startRadius = this.scene.view.radius; let targetRadius = cameraTargetPosition.distanceTo(I.location); tween.onUpdate(() => { let t = value.x; this.scene.view.position.x = (1 - t) * startPos.x + t * targetPos.x; this.scene.view.position.y = (1 - t) * startPos.y + t * targetPos.y; this.scene.view.position.z = (1 - t) * startPos.z + t * targetPos.z; this.scene.view.radius = (1 - t) * startRadius + t * targetRadius; this.viewer.setMoveSpeed(this.scene.view.radius / 2.5); }); tween.onComplete(() => { this.tweens = this.tweens.filter(e => e !== tween); }); tween.start(); } } update (delta) { let view = this.scene.view; let fade = Math.pow(0.5, this.fadeFactor * delta); let progression = 1 - fade; let camera = this.scene.getActiveCamera(); // compute zoom if (this.wheelDelta !== 0) { let I = Utils.getMousePointCloudIntersection( this.viewer.inputHandler.mouse, this.scene.getActiveCamera(), this.viewer, this.scene.pointclouds); if (I) { let resolvedPos = new Vector3().addVectors(view.position, this.zoomDelta); let distance = I.location.distanceTo(resolvedPos); let jumpDistance = distance * 0.2 * this.wheelDelta; let targetDir = new Vector3().subVectors(I.location, view.position); targetDir.normalize(); resolvedPos.add(targetDir.multiplyScalar(jumpDistance)); this.zoomDelta.subVectors(resolvedPos, view.position); { let distance = resolvedPos.distanceTo(I.location); view.radius = distance; let speed = view.radius / 2.5; this.viewer.setMoveSpeed(speed); } } } // apply zoom if (this.zoomDelta.length() !== 0) { let p = this.zoomDelta.clone().multiplyScalar(progression); let newPos = new Vector3().addVectors(view.position, p); view.position.copy(newPos); } if (this.pivotIndicator.visible) { let distance = this.pivotIndicator.position.distanceTo(view.position); let pixelwidth = this.renderer.domElement.clientwidth; let pixelHeight = this.renderer.domElement.clientHeight; let pr = Utils.projectedRadius(1, camera, distance, pixelwidth, pixelHeight); let scale = (10 / pr); this.pivotIndicator.scale.set(scale, scale, scale); } // decelerate over time { this.zoomDelta.multiplyScalar(fade); this.wheelDelta = 0; } } }; /** * @author chrisl / Geodan * * adapted from Potree.FirstPersonControls by * * @author mschuetz / http://mschuetz.at * * and THREE.DeviceOrientationControls by * * @author richt / http://richt.me * @author WestLangley / http://github.com/WestLangley * * * */ class DeviceOrientationControls extends EventDispatcher{ constructor(viewer){ super(); this.viewer = viewer; this.renderer = viewer.renderer; this.scene = null; this.sceneControls = new Scene(); this.screenOrientation = window.orientation || 0; let deviceOrientationChange = e => { this.deviceOrientation = e; }; let screenOrientationChange = e => { this.screenOrientation = window.orientation || 0; }; if ('ondeviceorientationabsolute' in window) { window.addEventListener('deviceorientationabsolute', deviceOrientationChange); } else if ('ondeviceorientation' in window) { window.addEventListener('deviceorientation', deviceOrientationChange); } else { console.warn("No device orientation found."); } // window.addEventListener('deviceorientation', deviceOrientationChange); window.addEventListener('orientationchange', screenOrientationChange); } setScene (scene) { this.scene = scene; } update (delta) { let computeQuaternion = function (alpha, beta, gamma, orient) { let quaternion = new Quaternion(); let zee = new Vector3(0, 0, 1); let euler = new Euler(); let q0 = new Quaternion(); euler.set(beta, gamma, alpha, 'ZXY'); quaternion.setFromEuler(euler); quaternion.multiply(q0.setFromAxisAngle(zee, -orient)); return quaternion; }; if (typeof this.deviceOrientation !== 'undefined') { let alpha = this.deviceOrientation.alpha ? MathUtils.degToRad(this.deviceOrientation.alpha) : 0; let beta = this.deviceOrientation.beta ? MathUtils.degToRad(this.deviceOrientation.beta) : 0; let gamma = this.deviceOrientation.gamma ? MathUtils.degToRad(this.deviceOrientation.gamma) : 0; let orient = this.screenOrientation ? MathUtils.degToRad(this.screenOrientation) : 0; let quaternion = computeQuaternion(alpha, beta, gamma, orient); viewer.scene.cameraP.quaternion.set(quaternion.x, quaternion.y, quaternion.z, quaternion.w); } } }; var GLTFLoader = ( function () { function GLTFLoader( manager ) { Loader.call( this, manager ); this.dracoLoader = null; this.ddsLoader = null; this.ktx2Loader = null; this.meshoptDecoder = null; this.pluginCallbacks = []; this.register( function ( parser ) { return new GLTFMaterialsClearcoatExtension( parser ); } ); this.register( function ( parser ) { return new GLTFTextureBasisUExtension( parser ); } ); this.register( function ( parser ) { return new GLTFTextureWebPExtension( parser ); } ); this.register( function ( parser ) { return new GLTFMaterialsTransmissionExtension( parser ); } ); this.register( function ( parser ) { return new GLTFLightsExtension( parser ); } ); this.register( function ( parser ) { return new GLTFMeshoptCompression( parser ); } ); } GLTFLoader.prototype = Object.assign( Object.create( Loader.prototype ), { constructor: GLTFLoader, load: function ( url, onLoad, onProgress, onError ) { var scope = this; var resourcePath; if ( this.resourcePath !== '' ) { resourcePath = this.resourcePath; } else if ( this.path !== '' ) { resourcePath = this.path; } else { resourcePath = LoaderUtils.extractUrlBase( url ); } // Tells the LoadingManager to track an extra item, which resolves after // the model is fully loaded. This means the count of items loaded will // be incorrect, but ensures manager.onLoad() does not fire early. this.manager.itemStart( url ); var _onError = function ( e ) { if ( onError ) { onError( e ); } else { console.error( e ); } scope.manager.itemError( url ); scope.manager.itemEnd( url ); }; var loader = new FileLoader( this.manager ); loader.setPath( this.path ); loader.setResponseType( 'arraybuffer' ); loader.setRequestHeader( this.requestHeader ); loader.setWithCredentials( this.withCredentials ); loader.load( url, function ( data ) { try { scope.parse( data, resourcePath, function ( gltf ) { onLoad( gltf ); scope.manager.itemEnd( url ); }, _onError ); } catch ( e ) { _onError( e ); } }, onProgress, _onError ); }, setDRACOLoader: function ( dracoLoader ) { this.dracoLoader = dracoLoader; return this; }, setDDSLoader: function ( ddsLoader ) { this.ddsLoader = ddsLoader; return this; }, setKTX2Loader: function ( ktx2Loader ) { this.ktx2Loader = ktx2Loader; return this; }, setMeshoptDecoder: function ( meshoptDecoder ) { this.meshoptDecoder = meshoptDecoder; return this; }, register: function ( callback ) { if ( this.pluginCallbacks.indexOf( callback ) === - 1 ) { this.pluginCallbacks.push( callback ); } return this; }, unregister: function ( callback ) { if ( this.pluginCallbacks.indexOf( callback ) !== - 1 ) { this.pluginCallbacks.splice( this.pluginCallbacks.indexOf( callback ), 1 ); } return this; }, parse: function ( data, path, onLoad, onError ) { var content; var extensions = {}; var plugins = {}; if ( typeof data === 'string' ) { content = data; } else { var magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) ); if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) { try { extensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data ); } catch ( error ) { if ( onError ) onError( error ); return; } content = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content; } else { content = LoaderUtils.decodeText( new Uint8Array( data ) ); } } var json = JSON.parse( content ); if ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) { if ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) ); return; } var parser = new GLTFParser( json, { path: path || this.resourcePath || '', crossOrigin: this.crossOrigin, manager: this.manager, ktx2Loader: this.ktx2Loader, meshoptDecoder: this.meshoptDecoder } ); parser.fileLoader.setRequestHeader( this.requestHeader ); for ( var i = 0; i < this.pluginCallbacks.length; i ++ ) { var plugin = this.pluginCallbacks[ i ]( parser ); plugins[ plugin.name ] = plugin; // Workaround to avoid determining as unknown extension // in addUnknownExtensionsToUserData(). // Remove this workaround if we move all the existing // extension handlers to plugin system extensions[ plugin.name ] = true; } if ( json.extensionsUsed ) { for ( var i = 0; i < json.extensionsUsed.length; ++ i ) { var extensionName = json.extensionsUsed[ i ]; var extensionsRequired = json.extensionsRequired || []; switch ( extensionName ) { case EXTENSIONS.KHR_MATERIALS_UNLIT: extensions[ extensionName ] = new GLTFMaterialsUnlitExtension(); break; case EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: extensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension(); break; case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: extensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader ); break; case EXTENSIONS.MSFT_TEXTURE_DDS: extensions[ extensionName ] = new GLTFTextureDDSExtension( this.ddsLoader ); break; case EXTENSIONS.KHR_TEXTURE_TRANSFORM: extensions[ extensionName ] = new GLTFTextureTransformExtension(); break; case EXTENSIONS.KHR_MESH_QUANTIZATION: extensions[ extensionName ] = new GLTFMeshQuantizationExtension(); break; default: if ( extensionsRequired.indexOf( extensionName ) >= 0 && plugins[ extensionName ] === undefined ) { console.warn( 'THREE.GLTFLoader: Unknown extension "' + extensionName + '".' ); } } } } parser.setExtensions( extensions ); parser.setPlugins( plugins ); parser.parse( onLoad, onError ); } } ); /* GLTFREGISTRY */ function GLTFRegistry() { var objects = {}; return { get: function ( key ) { return objects[ key ]; }, add: function ( key, object ) { objects[ key ] = object; }, remove: function ( key ) { delete objects[ key ]; }, removeAll: function () { objects = {}; } }; } /*********************************/ /********** EXTENSIONS ***********/ /*********************************/ var EXTENSIONS = { KHR_BINARY_GLTF: 'KHR_binary_glTF', KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression', KHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual', KHR_MATERIALS_CLEARCOAT: 'KHR_materials_clearcoat', KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness', KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission', KHR_MATERIALS_UNLIT: 'KHR_materials_unlit', KHR_TEXTURE_BASISU: 'KHR_texture_basisu', KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform', KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization', EXT_TEXTURE_WEBP: 'EXT_texture_webp', EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression', MSFT_TEXTURE_DDS: 'MSFT_texture_dds' }; /** * DDS Texture Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds * */ function GLTFTextureDDSExtension( ddsLoader ) { if ( ! ddsLoader ) { throw new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader' ); } this.name = EXTENSIONS.MSFT_TEXTURE_DDS; this.ddsLoader = ddsLoader; } /** * Punctual Lights Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual */ function GLTFLightsExtension( parser ) { this.parser = parser; this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; // Object3D instance caches this.cache = { refs: {}, uses: {} }; } GLTFLightsExtension.prototype._markDefs = function () { var parser = this.parser; var nodeDefs = this.parser.json.nodes || []; for ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) { var nodeDef = nodeDefs[ nodeIndex ]; if ( nodeDef.extensions && nodeDef.extensions[ this.name ] && nodeDef.extensions[ this.name ].light !== undefined ) { parser._addNodeRef( this.cache, nodeDef.extensions[ this.name ].light ); } } }; GLTFLightsExtension.prototype._loadLight = function ( lightIndex ) { var parser = this.parser; var cacheKey = 'light:' + lightIndex; var dependency = parser.cache.get( cacheKey ); if ( dependency ) return dependency; var json = parser.json; var extensions = ( json.extensions && json.extensions[ this.name ] ) || {}; var lightDefs = extensions.lights || []; var lightDef = lightDefs[ lightIndex ]; var lightNode; var color = new Color( 0xffffff ); if ( lightDef.color !== undefined ) color.fromArray( lightDef.color ); var range = lightDef.range !== undefined ? lightDef.range : 0; switch ( lightDef.type ) { case 'directional': lightNode = new DirectionalLight( color ); lightNode.target.position.set( 0, 0, - 1 ); lightNode.add( lightNode.target ); break; case 'point': lightNode = new PointLight( color ); lightNode.distance = range; break; case 'spot': lightNode = new SpotLight( color ); lightNode.distance = range; // Handle spotlight properties. lightDef.spot = lightDef.spot || {}; lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0; lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0; lightNode.angle = lightDef.spot.outerConeAngle; lightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; lightNode.target.position.set( 0, 0, - 1 ); lightNode.add( lightNode.target ); break; default: throw new Error( 'THREE.GLTFLoader: Unexpected light type: ' + lightDef.type ); } // Some lights (e.g. spot) default to a position other than the origin. Reset the position // here, because node-level parsing will only override position if explicitly specified. lightNode.position.set( 0, 0, 0 ); lightNode.decay = 2; if ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity; lightNode.name = parser.createUniqueName( lightDef.name || ( 'light_' + lightIndex ) ); dependency = Promise.resolve( lightNode ); parser.cache.add( cacheKey, dependency ); return dependency; }; GLTFLightsExtension.prototype.createNodeAttachment = function ( nodeIndex ) { var self = this; var parser = this.parser; var json = parser.json; var nodeDef = json.nodes[ nodeIndex ]; var lightDef = ( nodeDef.extensions && nodeDef.extensions[ this.name ] ) || {}; var lightIndex = lightDef.light; if ( lightIndex === undefined ) return null; return this._loadLight( lightIndex ).then( function ( light ) { return parser._getNodeRef( self.cache, lightIndex, light ); } ); }; /** * Unlit Materials Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit */ function GLTFMaterialsUnlitExtension() { this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; } GLTFMaterialsUnlitExtension.prototype.getMaterialType = function () { return MeshBasicMaterial; }; GLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, materialDef, parser ) { var pending = []; materialParams.color = new Color( 1.0, 1.0, 1.0 ); materialParams.opacity = 1.0; var metallicRoughness = materialDef.pbrMetallicRoughness; if ( metallicRoughness ) { if ( Array.isArray( metallicRoughness.baseColorFactor ) ) { var array = metallicRoughness.baseColorFactor; materialParams.color.fromArray( array ); materialParams.opacity = array[ 3 ]; } if ( metallicRoughness.baseColorTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) ); } } return Promise.all( pending ); }; /** * Clearcoat Materials Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_clearcoat */ function GLTFMaterialsClearcoatExtension( parser ) { this.parser = parser; this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; } GLTFMaterialsClearcoatExtension.prototype.getMaterialType = function ( materialIndex ) { var parser = this.parser; var materialDef = parser.json.materials[ materialIndex ]; if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null; return MeshPhysicalMaterial; }; GLTFMaterialsClearcoatExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) { var parser = this.parser; var materialDef = parser.json.materials[ materialIndex ]; if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) { return Promise.resolve(); } var pending = []; var extension = materialDef.extensions[ this.name ]; if ( extension.clearcoatFactor !== undefined ) { materialParams.clearcoat = extension.clearcoatFactor; } if ( extension.clearcoatTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'clearcoatMap', extension.clearcoatTexture ) ); } if ( extension.clearcoatRoughnessFactor !== undefined ) { materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; } if ( extension.clearcoatRoughnessTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'clearcoatRoughnessMap', extension.clearcoatRoughnessTexture ) ); } if ( extension.clearcoatNormalTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'clearcoatNormalMap', extension.clearcoatNormalTexture ) ); if ( extension.clearcoatNormalTexture.scale !== undefined ) { var scale = extension.clearcoatNormalTexture.scale; materialParams.clearcoatNormalScale = new Vector2( scale, scale ); } } return Promise.all( pending ); }; /** * Transmission Materials Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_transmission * Draft: https://github.com/KhronosGroup/glTF/pull/1698 */ function GLTFMaterialsTransmissionExtension( parser ) { this.parser = parser; this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; } GLTFMaterialsTransmissionExtension.prototype.getMaterialType = function ( materialIndex ) { var parser = this.parser; var materialDef = parser.json.materials[ materialIndex ]; if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null; return MeshPhysicalMaterial; }; GLTFMaterialsTransmissionExtension.prototype.extendMaterialParams = function ( materialIndex, materialParams ) { var parser = this.parser; var materialDef = parser.json.materials[ materialIndex ]; if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) { return Promise.resolve(); } var pending = []; var extension = materialDef.extensions[ this.name ]; if ( extension.transmissionFactor !== undefined ) { materialParams.transmission = extension.transmissionFactor; } if ( extension.transmissionTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'transmissionMap', extension.transmissionTexture ) ); } return Promise.all( pending ); }; /** * BasisU Texture Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_basisu */ function GLTFTextureBasisUExtension( parser ) { this.parser = parser; this.name = EXTENSIONS.KHR_TEXTURE_BASISU; } GLTFTextureBasisUExtension.prototype.loadTexture = function ( textureIndex ) { var parser = this.parser; var json = parser.json; var textureDef = json.textures[ textureIndex ]; if ( ! textureDef.extensions || ! textureDef.extensions[ this.name ] ) { return null; } var extension = textureDef.extensions[ this.name ]; var source = json.images[ extension.source ]; var loader = parser.options.ktx2Loader; if ( ! loader ) { if ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) { throw new Error( 'THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures' ); } else { // Assumes that the extension is optional and that a fallback texture is present return null; } } return parser.loadTextureImage( textureIndex, source, loader ); }; /** * WebP Texture Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_webp */ function GLTFTextureWebPExtension( parser ) { this.parser = parser; this.name = EXTENSIONS.EXT_TEXTURE_WEBP; this.isSupported = null; } GLTFTextureWebPExtension.prototype.loadTexture = function ( textureIndex ) { var name = this.name; var parser = this.parser; var json = parser.json; var textureDef = json.textures[ textureIndex ]; if ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) { return null; } var extension = textureDef.extensions[ name ]; var source = json.images[ extension.source ]; var loader = source.uri ? parser.options.manager.getHandler( source.uri ) : parser.textureLoader; return this.detectSupport().then( function ( isSupported ) { if ( isSupported ) return parser.loadTextureImage( textureIndex, source, loader ); if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) { throw new Error( 'THREE.GLTFLoader: WebP required by asset but unsupported.' ); } // Fall back to PNG or JPEG. return parser.loadTexture( textureIndex ); } ); }; GLTFTextureWebPExtension.prototype.detectSupport = function () { if ( ! this.isSupported ) { this.isSupported = new Promise( function ( resolve ) { var image = new Image(); // Lossy test image. Support for lossy images doesn't guarantee support for all // WebP images, unfortunately. image.src = 'data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA'; image.onload = image.onerror = function () { resolve( image.height === 1 ); }; } ); } return this.isSupported; }; /** * meshopt BufferView Compression Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_meshopt_compression */ function GLTFMeshoptCompression( parser ) { this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; this.parser = parser; } GLTFMeshoptCompression.prototype.loadBufferView = function ( index ) { var json = this.parser.json; var bufferView = json.bufferViews[ index ]; if ( bufferView.extensions && bufferView.extensions[ this.name ] ) { var extensionDef = bufferView.extensions[ this.name ]; var buffer = this.parser.getDependency( 'buffer', extensionDef.buffer ); var decoder = this.parser.options.meshoptDecoder; if ( ! decoder || ! decoder.supported ) { if ( json.extensionsRequired && json.extensionsRequired.indexOf( this.name ) >= 0 ) { throw new Error( 'THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files' ); } else { // Assumes that the extension is optional and that fallback buffer data is present return null; } } return Promise.all( [ buffer, decoder.ready ] ).then( function ( res ) { var byteOffset = extensionDef.byteOffset || 0; var byteLength = extensionDef.byteLength || 0; var count = extensionDef.count; var stride = extensionDef.byteStride; var result = new ArrayBuffer( count * stride ); var source = new Uint8Array( res[ 0 ], byteOffset, byteLength ); decoder.decodeGltfBuffer( new Uint8Array( result ), count, stride, source, extensionDef.mode, extensionDef.filter ); return result; } ); } else { return null; } }; /* BINARY EXTENSION */ var BINARY_EXTENSION_HEADER_MAGIC = 'glTF'; var BINARY_EXTENSION_HEADER_LENGTH = 12; var BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 }; function GLTFBinaryExtension( data ) { this.name = EXTENSIONS.KHR_BINARY_GLTF; this.content = null; this.body = null; var headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH ); this.header = { magic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ), version: headerView.getUint32( 4, true ), length: headerView.getUint32( 8, true ) }; if ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) { throw new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' ); } else if ( this.header.version < 2.0 ) { throw new Error( 'THREE.GLTFLoader: Legacy binary file detected.' ); } var chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH ); var chunkIndex = 0; while ( chunkIndex < chunkView.byteLength ) { var chunkLength = chunkView.getUint32( chunkIndex, true ); chunkIndex += 4; var chunkType = chunkView.getUint32( chunkIndex, true ); chunkIndex += 4; if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) { var contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength ); this.content = LoaderUtils.decodeText( contentArray ); } else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) { var byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; this.body = data.slice( byteOffset, byteOffset + chunkLength ); } // Clients must ignore chunks with unknown types. chunkIndex += chunkLength; } if ( this.content === null ) { throw new Error( 'THREE.GLTFLoader: JSON content not found.' ); } } /** * DRACO Mesh Compression Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression */ function GLTFDracoMeshCompressionExtension( json, dracoLoader ) { if ( ! dracoLoader ) { throw new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' ); } this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; this.json = json; this.dracoLoader = dracoLoader; this.dracoLoader.preload(); } GLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) { var json = this.json; var dracoLoader = this.dracoLoader; var bufferViewIndex = primitive.extensions[ this.name ].bufferView; var gltfAttributeMap = primitive.extensions[ this.name ].attributes; var threeAttributeMap = {}; var attributeNormalizedMap = {}; var attributeTypeMap = {}; for ( var attributeName in gltfAttributeMap ) { var threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase(); threeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ]; } for ( attributeName in primitive.attributes ) { var threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase(); if ( gltfAttributeMap[ attributeName ] !== undefined ) { var accessorDef = json.accessors[ primitive.attributes[ attributeName ] ]; var componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ]; attributeTypeMap[ threeAttributeName ] = componentType; attributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true; } } return parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) { return new Promise( function ( resolve ) { dracoLoader.decodeDracoFile( bufferView, function ( geometry ) { for ( var attributeName in geometry.attributes ) { var attribute = geometry.attributes[ attributeName ]; var normalized = attributeNormalizedMap[ attributeName ]; if ( normalized !== undefined ) attribute.normalized = normalized; } resolve( geometry ); }, threeAttributeMap, attributeTypeMap ); } ); } ); }; /** * Texture Transform Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform */ function GLTFTextureTransformExtension() { this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; } GLTFTextureTransformExtension.prototype.extendTexture = function ( texture, transform ) { texture = texture.clone(); if ( transform.offset !== undefined ) { texture.offset.fromArray( transform.offset ); } if ( transform.rotation !== undefined ) { texture.rotation = transform.rotation; } if ( transform.scale !== undefined ) { texture.repeat.fromArray( transform.scale ); } if ( transform.texCoord !== undefined ) { console.warn( 'THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.' ); } texture.needsUpdate = true; return texture; }; /** * Specular-Glossiness Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness */ /** * A sub class of StandardMaterial with some of the functionality * changed via the `onBeforeCompile` callback * @pailhead */ function GLTFMeshStandardSGMaterial( params ) { MeshStandardMaterial.call( this ); this.isGLTFSpecularGlossinessMaterial = true; //various chunks that need replacing var specularMapParsFragmentChunk = [ '#ifdef USE_SPECULARMAP', ' uniform sampler2D specularMap;', '#endif' ].join( '\n' ); var glossinessMapParsFragmentChunk = [ '#ifdef USE_GLOSSINESSMAP', ' uniform sampler2D glossinessMap;', '#endif' ].join( '\n' ); var specularMapFragmentChunk = [ 'vec3 specularFactor = specular;', '#ifdef USE_SPECULARMAP', ' vec4 texelSpecular = texture2D( specularMap, vUv );', ' texelSpecular = sRGBToLinear( texelSpecular );', ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', ' specularFactor *= texelSpecular.rgb;', '#endif' ].join( '\n' ); var glossinessMapFragmentChunk = [ 'float glossinessFactor = glossiness;', '#ifdef USE_GLOSSINESSMAP', ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );', ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', ' glossinessFactor *= texelGlossiness.a;', '#endif' ].join( '\n' ); var lightPhysicalFragmentChunk = [ 'PhysicalMaterial material;', 'material.diffuseColor = diffuseColor.rgb * ( 1. - max( specularFactor.r, max( specularFactor.g, specularFactor.b ) ) );', 'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );', 'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );', 'material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 ); // 0.0525 corresponds to the base mip of a 256 cubemap.', 'material.specularRoughness += geometryRoughness;', 'material.specularRoughness = min( material.specularRoughness, 1.0 );', 'material.specularColor = specularFactor;', ].join( '\n' ); var uniforms = { specular: { value: new Color().setHex( 0xffffff ) }, glossiness: { value: 1 }, specularMap: { value: null }, glossinessMap: { value: null } }; this._extraUniforms = uniforms; this.onBeforeCompile = function ( shader ) { for ( var uniformName in uniforms ) { shader.uniforms[ uniformName ] = uniforms[ uniformName ]; } shader.fragmentShader = shader.fragmentShader .replace( 'uniform float roughness;', 'uniform vec3 specular;' ) .replace( 'uniform float metalness;', 'uniform float glossiness;' ) .replace( '#include ', specularMapParsFragmentChunk ) .replace( '#include ', glossinessMapParsFragmentChunk ) .replace( '#include ', specularMapFragmentChunk ) .replace( '#include ', glossinessMapFragmentChunk ) .replace( '#include ', lightPhysicalFragmentChunk ); }; Object.defineProperties( this, { specular: { get: function () { return uniforms.specular.value; }, set: function ( v ) { uniforms.specular.value = v; } }, specularMap: { get: function () { return uniforms.specularMap.value; }, set: function ( v ) { uniforms.specularMap.value = v; if ( v ) { this.defines.USE_SPECULARMAP = ''; // USE_UV is set by the renderer for specular maps } else { delete this.defines.USE_SPECULARMAP; } } }, glossiness: { get: function () { return uniforms.glossiness.value; }, set: function ( v ) { uniforms.glossiness.value = v; } }, glossinessMap: { get: function () { return uniforms.glossinessMap.value; }, set: function ( v ) { uniforms.glossinessMap.value = v; if ( v ) { this.defines.USE_GLOSSINESSMAP = ''; this.defines.USE_UV = ''; } else { delete this.defines.USE_GLOSSINESSMAP; delete this.defines.USE_UV; } } } } ); delete this.metalness; delete this.roughness; delete this.metalnessMap; delete this.roughnessMap; this.setValues( params ); } GLTFMeshStandardSGMaterial.prototype = Object.create( MeshStandardMaterial.prototype ); GLTFMeshStandardSGMaterial.prototype.constructor = GLTFMeshStandardSGMaterial; GLTFMeshStandardSGMaterial.prototype.copy = function ( source ) { MeshStandardMaterial.prototype.copy.call( this, source ); this.specularMap = source.specularMap; this.specular.copy( source.specular ); this.glossinessMap = source.glossinessMap; this.glossiness = source.glossiness; delete this.metalness; delete this.roughness; delete this.metalnessMap; delete this.roughnessMap; return this; }; function GLTFMaterialsPbrSpecularGlossinessExtension() { return { name: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS, specularGlossinessParams: [ 'color', 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity', 'emissive', 'emissiveIntensity', 'emissiveMap', 'bumpMap', 'bumpScale', 'normalMap', 'normalMapType', 'displacementMap', 'displacementScale', 'displacementBias', 'specularMap', 'specular', 'glossinessMap', 'glossiness', 'alphaMap', 'envMap', 'envMapIntensity', 'refractionRatio', ], getMaterialType: function () { return GLTFMeshStandardSGMaterial; }, extendParams: function ( materialParams, materialDef, parser ) { var pbrSpecularGlossiness = materialDef.extensions[ this.name ]; materialParams.color = new Color( 1.0, 1.0, 1.0 ); materialParams.opacity = 1.0; var pending = []; if ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) { var array = pbrSpecularGlossiness.diffuseFactor; materialParams.color.fromArray( array ); materialParams.opacity = array[ 3 ]; } if ( pbrSpecularGlossiness.diffuseTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) ); } materialParams.emissive = new Color( 0.0, 0.0, 0.0 ); materialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0; materialParams.specular = new Color( 1.0, 1.0, 1.0 ); if ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) { materialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor ); } if ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) { var specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture; pending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) ); pending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) ); } return Promise.all( pending ); }, createMaterial: function ( materialParams ) { var material = new GLTFMeshStandardSGMaterial( materialParams ); material.fog = true; material.color = materialParams.color; material.map = materialParams.map === undefined ? null : materialParams.map; material.lightMap = null; material.lightMapIntensity = 1.0; material.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap; material.aoMapIntensity = 1.0; material.emissive = materialParams.emissive; material.emissiveIntensity = 1.0; material.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap; material.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap; material.bumpScale = 1; material.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap; material.normalMapType = TangentSpaceNormalMap; if ( materialParams.normalScale ) material.normalScale = materialParams.normalScale; material.displacementMap = null; material.displacementScale = 1; material.displacementBias = 0; material.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap; material.specular = materialParams.specular; material.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap; material.glossiness = materialParams.glossiness; material.alphaMap = null; material.envMap = materialParams.envMap === undefined ? null : materialParams.envMap; material.envMapIntensity = 1.0; material.refractionRatio = 0.98; return material; }, }; } /** * Mesh Quantization Extension * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization */ function GLTFMeshQuantizationExtension() { this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; } /*********************************/ /********** INTERPOLATION ********/ /*********************************/ // Spline Interpolation // Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolation function GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) { Interpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer ); } GLTFCubicSplineInterpolant.prototype = Object.create( Interpolant.prototype ); GLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant; GLTFCubicSplineInterpolant.prototype.copySampleValue_ = function ( index ) { // Copies a sample value to the result buffer. See description of glTF // CUBICSPLINE values layout in interpolate_() function below. var result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize; for ( var i = 0; i !== valueSize; i ++ ) { result[ i ] = values[ offset + i ]; } return result; }; GLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_; GLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_; GLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) { var result = this.resultBuffer; var values = this.sampleValues; var stride = this.valueSize; var stride2 = stride * 2; var stride3 = stride * 3; var td = t1 - t0; var p = ( t - t0 ) / td; var pp = p * p; var ppp = pp * p; var offset1 = i1 * stride3; var offset0 = offset1 - stride3; var s2 = - 2 * ppp + 3 * pp; var s3 = ppp - pp; var s0 = 1 - s2; var s1 = s3 - pp + p; // Layout of keyframe output values for CUBICSPLINE animations: // [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, ... ] for ( var i = 0; i !== stride; i ++ ) { var p0 = values[ offset0 + i + stride ]; // splineVertex_k var m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k) var p1 = values[ offset1 + i + stride ]; // splineVertex_k+1 var m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k) result[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; } return result; }; /*********************************/ /********** INTERNALS ************/ /*********************************/ /* CONSTANTS */ var WEBGL_CONSTANTS = { FLOAT: 5126, //FLOAT_MAT2: 35674, FLOAT_MAT3: 35675, FLOAT_MAT4: 35676, FLOAT_VEC2: 35664, FLOAT_VEC3: 35665, FLOAT_VEC4: 35666, LINEAR: 9729, REPEAT: 10497, SAMPLER_2D: 35678, POINTS: 0, LINES: 1, LINE_LOOP: 2, LINE_STRIP: 3, TRIANGLES: 4, TRIANGLE_STRIP: 5, TRIANGLE_FAN: 6, UNSIGNED_BYTE: 5121, UNSIGNED_SHORT: 5123 }; var WEBGL_COMPONENT_TYPES = { 5120: Int8Array, 5121: Uint8Array, 5122: Int16Array, 5123: Uint16Array, 5125: Uint32Array, 5126: Float32Array }; var WEBGL_FILTERS = { 9728: NearestFilter, 9729: LinearFilter, 9984: NearestMipmapNearestFilter, 9985: LinearMipmapNearestFilter, 9986: NearestMipmapLinearFilter, 9987: LinearMipmapLinearFilter }; var WEBGL_WRAPPINGS = { 33071: ClampToEdgeWrapping, 33648: MirroredRepeatWrapping, 10497: RepeatWrapping }; var WEBGL_TYPE_SIZES = { 'SCALAR': 1, 'VEC2': 2, 'VEC3': 3, 'VEC4': 4, 'MAT2': 4, 'MAT3': 9, 'MAT4': 16 }; var ATTRIBUTES = { POSITION: 'position', NORMAL: 'normal', TANGENT: 'tangent', TEXCOORD_0: 'uv', TEXCOORD_1: 'uv2', COLOR_0: 'color', WEIGHTS_0: 'skinWeight', JOINTS_0: 'skinIndex', }; var PATH_PROPERTIES = { scale: 'scale', translation: 'position', rotation: 'quaternion', weights: 'morphTargetInfluences' }; var INTERPOLATION = { CUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each // keyframe track will be initialized with a default interpolation type, then modified. LINEAR: InterpolateLinear, STEP: InterpolateDiscrete }; var ALPHA_MODES = { OPAQUE: 'OPAQUE', MASK: 'MASK', BLEND: 'BLEND' }; /* UTILITY FUNCTIONS */ function resolveURL( url, path ) { // Invalid URL if ( typeof url !== 'string' || url === '' ) return ''; // Host Relative URL if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) { path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' ); } // Absolute URL http://,https://,// if ( /^(https?:)?\/\//i.test( url ) ) return url; // Data URI if ( /^data:.*,.*$/i.test( url ) ) return url; // Blob URL if ( /^blob:.*$/i.test( url ) ) return url; // Relative URL return path + url; } /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material */ function createDefaultMaterial( cache ) { if ( cache[ 'DefaultMaterial' ] === undefined ) { cache[ 'DefaultMaterial' ] = new MeshStandardMaterial( { color: 0xFFFFFF, emissive: 0x000000, metalness: 1, roughness: 1, transparent: false, depthTest: true, side: FrontSide } ); } return cache[ 'DefaultMaterial' ]; } function addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) { // Add unknown glTF extensions to an object's userData. for ( var name in objectDef.extensions ) { if ( knownExtensions[ name ] === undefined ) { object.userData.gltfExtensions = object.userData.gltfExtensions || {}; object.userData.gltfExtensions[ name ] = objectDef.extensions[ name ]; } } } /** * @param {Object3D|Material|BufferGeometry} object * @param {GLTF.definition} gltfDef */ function assignExtrasToUserData( object, gltfDef ) { if ( gltfDef.extras !== undefined ) { if ( typeof gltfDef.extras === 'object' ) { Object.assign( object.userData, gltfDef.extras ); } else { console.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras ); } } } /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targets * * @param {BufferGeometry} geometry * @param {Array} targets * @param {GLTFParser} parser * @return {Promise} */ function addMorphTargets( geometry, targets, parser ) { var hasMorphPosition = false; var hasMorphNormal = false; for ( var i = 0, il = targets.length; i < il; i ++ ) { var target = targets[ i ]; if ( target.POSITION !== undefined ) hasMorphPosition = true; if ( target.NORMAL !== undefined ) hasMorphNormal = true; if ( hasMorphPosition && hasMorphNormal ) break; } if ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry ); var pendingPositionAccessors = []; var pendingNormalAccessors = []; for ( var i = 0, il = targets.length; i < il; i ++ ) { var target = targets[ i ]; if ( hasMorphPosition ) { var pendingAccessor = target.POSITION !== undefined ? parser.getDependency( 'accessor', target.POSITION ) : geometry.attributes.position; pendingPositionAccessors.push( pendingAccessor ); } if ( hasMorphNormal ) { var pendingAccessor = target.NORMAL !== undefined ? parser.getDependency( 'accessor', target.NORMAL ) : geometry.attributes.normal; pendingNormalAccessors.push( pendingAccessor ); } } return Promise.all( [ Promise.all( pendingPositionAccessors ), Promise.all( pendingNormalAccessors ) ] ).then( function ( accessors ) { var morphPositions = accessors[ 0 ]; var morphNormals = accessors[ 1 ]; if ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions; if ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals; geometry.morphTargetsRelative = true; return geometry; } ); } /** * @param {Mesh} mesh * @param {GLTF.Mesh} meshDef */ function updateMorphTargets( mesh, meshDef ) { mesh.updateMorphTargets(); if ( meshDef.weights !== undefined ) { for ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) { mesh.morphTargetInfluences[ i ] = meshDef.weights[ i ]; } } // .extras has user-defined data, so check that .extras.targetNames is an array. if ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) { var targetNames = meshDef.extras.targetNames; if ( mesh.morphTargetInfluences.length === targetNames.length ) { mesh.morphTargetDictionary = {}; for ( var i = 0, il = targetNames.length; i < il; i ++ ) { mesh.morphTargetDictionary[ targetNames[ i ] ] = i; } } else { console.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' ); } } } function createPrimitiveKey( primitiveDef ) { var dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]; var geometryKey; if ( dracoExtension ) { geometryKey = 'draco:' + dracoExtension.bufferView + ':' + dracoExtension.indices + ':' + createAttributesKey( dracoExtension.attributes ); } else { geometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode; } return geometryKey; } function createAttributesKey( attributes ) { var attributesKey = ''; var keys = Object.keys( attributes ).sort(); for ( var i = 0, il = keys.length; i < il; i ++ ) { attributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';'; } return attributesKey; } /* GLTF PARSER */ function GLTFParser( json, options ) { this.json = json || {}; this.extensions = {}; this.plugins = {}; this.options = options || {}; // loader object cache this.cache = new GLTFRegistry(); // associations between Three.js objects and glTF elements this.associations = new Map(); // BufferGeometry caching this.primitiveCache = {}; // Object3D instance caches this.meshCache = { refs: {}, uses: {} }; this.cameraCache = { refs: {}, uses: {} }; this.lightCache = { refs: {}, uses: {} }; // Track node names, to ensure no duplicates this.nodeNamesUsed = {}; // Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the // expensive work of uploading a texture to the GPU off the main thread. if ( typeof createImageBitmap !== 'undefined' && /Firefox/.test( navigator.userAgent ) === false ) { this.textureLoader = new ImageBitmapLoader( this.options.manager ); } else { this.textureLoader = new TextureLoader( this.options.manager ); } this.textureLoader.setCrossOrigin( this.options.crossOrigin ); this.fileLoader = new FileLoader( this.options.manager ); this.fileLoader.setResponseType( 'arraybuffer' ); if ( this.options.crossOrigin === 'use-credentials' ) { this.fileLoader.setWithCredentials( true ); } } GLTFParser.prototype.setExtensions = function ( extensions ) { this.extensions = extensions; }; GLTFParser.prototype.setPlugins = function ( plugins ) { this.plugins = plugins; }; GLTFParser.prototype.parse = function ( onLoad, onError ) { var parser = this; var json = this.json; var extensions = this.extensions; // Clear the loader cache this.cache.removeAll(); // Mark the special nodes/meshes in json for efficient parse this._invokeAll( function ( ext ) { return ext._markDefs && ext._markDefs(); } ); Promise.all( [ this.getDependencies( 'scene' ), this.getDependencies( 'animation' ), this.getDependencies( 'camera' ), ] ).then( function ( dependencies ) { var result = { scene: dependencies[ 0 ][ json.scene || 0 ], scenes: dependencies[ 0 ], animations: dependencies[ 1 ], cameras: dependencies[ 2 ], asset: json.asset, parser: parser, userData: {} }; addUnknownExtensionsToUserData( extensions, result, json ); assignExtrasToUserData( result, json ); onLoad( result ); } ).catch( onError ); }; /** * Marks the special nodes/meshes in json for efficient parse. */ GLTFParser.prototype._markDefs = function () { var nodeDefs = this.json.nodes || []; var skinDefs = this.json.skins || []; var meshDefs = this.json.meshes || []; // Nothing in the node definition indicates whether it is a Bone or an // Object3D. Use the skins' joint references to mark bones. for ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) { var joints = skinDefs[ skinIndex ].joints; for ( var i = 0, il = joints.length; i < il; i ++ ) { nodeDefs[ joints[ i ] ].isBone = true; } } // Iterate over all nodes, marking references to shared resources, // as well as skeleton joints. for ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) { var nodeDef = nodeDefs[ nodeIndex ]; if ( nodeDef.mesh !== undefined ) { this._addNodeRef( this.meshCache, nodeDef.mesh ); // Nothing in the mesh definition indicates whether it is // a SkinnedMesh or Mesh. Use the node's mesh reference // to mark SkinnedMesh if node has skin. if ( nodeDef.skin !== undefined ) { meshDefs[ nodeDef.mesh ].isSkinnedMesh = true; } } if ( nodeDef.camera !== undefined ) { this._addNodeRef( this.cameraCache, nodeDef.camera ); } } }; /** * Counts references to shared node / Object3D resources. These resources * can be reused, or "instantiated", at multiple nodes in the scene * hierarchy. Mesh, Camera, and Light instances are instantiated and must * be marked. Non-scenegraph resources (like Materials, Geometries, and * Textures) can be reused directly and are not marked here. * * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. */ GLTFParser.prototype._addNodeRef = function ( cache, index ) { if ( index === undefined ) return; if ( cache.refs[ index ] === undefined ) { cache.refs[ index ] = cache.uses[ index ] = 0; } cache.refs[ index ] ++; }; /** Returns a reference to a shared resource, cloning it if necessary. */ GLTFParser.prototype._getNodeRef = function ( cache, index, object ) { if ( cache.refs[ index ] <= 1 ) return object; var ref = object.clone(); ref.name += '_instance_' + ( cache.uses[ index ] ++ ); return ref; }; GLTFParser.prototype._invokeOne = function ( func ) { var extensions = Object.values( this.plugins ); extensions.push( this ); for ( var i = 0; i < extensions.length; i ++ ) { var result = func( extensions[ i ] ); if ( result ) return result; } }; GLTFParser.prototype._invokeAll = function ( func ) { var extensions = Object.values( this.plugins ); extensions.unshift( this ); var pending = []; for ( var i = 0; i < extensions.length; i ++ ) { var result = func( extensions[ i ] ); if ( result ) pending.push( result ); } return pending; }; /** * Requests the specified dependency asynchronously, with caching. * @param {string} type * @param {number} index * @return {Promise} */ GLTFParser.prototype.getDependency = function ( type, index ) { var cacheKey = type + ':' + index; var dependency = this.cache.get( cacheKey ); if ( ! dependency ) { switch ( type ) { case 'scene': dependency = this.loadScene( index ); break; case 'node': dependency = this.loadNode( index ); break; case 'mesh': dependency = this._invokeOne( function ( ext ) { return ext.loadMesh && ext.loadMesh( index ); } ); break; case 'accessor': dependency = this.loadAccessor( index ); break; case 'bufferView': dependency = this._invokeOne( function ( ext ) { return ext.loadBufferView && ext.loadBufferView( index ); } ); break; case 'buffer': dependency = this.loadBuffer( index ); break; case 'material': dependency = this._invokeOne( function ( ext ) { return ext.loadMaterial && ext.loadMaterial( index ); } ); break; case 'texture': dependency = this._invokeOne( function ( ext ) { return ext.loadTexture && ext.loadTexture( index ); } ); break; case 'skin': dependency = this.loadSkin( index ); break; case 'animation': dependency = this.loadAnimation( index ); break; case 'camera': dependency = this.loadCamera( index ); break; default: throw new Error( 'Unknown type: ' + type ); } this.cache.add( cacheKey, dependency ); } return dependency; }; /** * Requests all dependencies of the specified type asynchronously, with caching. * @param {string} type * @return {Promise>} */ GLTFParser.prototype.getDependencies = function ( type ) { var dependencies = this.cache.get( type ); if ( ! dependencies ) { var parser = this; var defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || []; dependencies = Promise.all( defs.map( function ( def, index ) { return parser.getDependency( type, index ); } ) ); this.cache.add( type, dependencies ); } return dependencies; }; /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views * @param {number} bufferIndex * @return {Promise} */ GLTFParser.prototype.loadBuffer = function ( bufferIndex ) { var bufferDef = this.json.buffers[ bufferIndex ]; var loader = this.fileLoader; if ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) { throw new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' ); } // If present, GLB container is required to be the first buffer. if ( bufferDef.uri === undefined && bufferIndex === 0 ) { return Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body ); } var options = this.options; return new Promise( function ( resolve, reject ) { loader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () { reject( new Error( 'THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".' ) ); } ); } ); }; /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views * @param {number} bufferViewIndex * @return {Promise} */ GLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) { var bufferViewDef = this.json.bufferViews[ bufferViewIndex ]; return this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) { var byteLength = bufferViewDef.byteLength || 0; var byteOffset = bufferViewDef.byteOffset || 0; return buffer.slice( byteOffset, byteOffset + byteLength ); } ); }; /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors * @param {number} accessorIndex * @return {Promise} */ GLTFParser.prototype.loadAccessor = function ( accessorIndex ) { var parser = this; var json = this.json; var accessorDef = this.json.accessors[ accessorIndex ]; if ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) { // Ignore empty accessors, which may be used to declare runtime // information about attributes coming from another source (e.g. Draco // compression extension). return Promise.resolve( null ); } var pendingBufferViews = []; if ( accessorDef.bufferView !== undefined ) { pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) ); } else { pendingBufferViews.push( null ); } if ( accessorDef.sparse !== undefined ) { pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) ); pendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) ); } return Promise.all( pendingBufferViews ).then( function ( bufferViews ) { var bufferView = bufferViews[ 0 ]; var itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ]; var TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ]; // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12. var elementBytes = TypedArray.BYTES_PER_ELEMENT; var itemBytes = elementBytes * itemSize; var byteOffset = accessorDef.byteOffset || 0; var byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined; var normalized = accessorDef.normalized === true; var array, bufferAttribute; // The buffer is not interleaved if the stride is the item size in bytes. if ( byteStride && byteStride !== itemBytes ) { // Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffer // This makes sure that IBA.count reflects accessor.count properly var ibSlice = Math.floor( byteOffset / byteStride ); var ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count; var ib = parser.cache.get( ibCacheKey ); if ( ! ib ) { array = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes ); // Integer parameters to IB/IBA are in array elements, not bytes. ib = new InterleavedBuffer( array, byteStride / elementBytes ); parser.cache.add( ibCacheKey, ib ); } bufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized ); } else { if ( bufferView === null ) { array = new TypedArray( accessorDef.count * itemSize ); } else { array = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize ); } bufferAttribute = new BufferAttribute( array, itemSize, normalized ); } // https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessors if ( accessorDef.sparse !== undefined ) { var itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; var TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ]; var byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; var byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; var sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices ); var sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize ); if ( bufferView !== null ) { // Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes. bufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized ); } for ( var i = 0, il = sparseIndices.length; i < il; i ++ ) { var index = sparseIndices[ i ]; bufferAttribute.setX( index, sparseValues[ i * itemSize ] ); if ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] ); if ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] ); if ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] ); if ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' ); } } return bufferAttribute; } ); }; /** * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures * @param {number} textureIndex * @return {Promise} */ GLTFParser.prototype.loadTexture = function ( textureIndex ) { var parser = this; var json = this.json; var options = this.options; var textureDef = json.textures[ textureIndex ]; var textureExtensions = textureDef.extensions || {}; var source; if ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) { source = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ]; } else { source = json.images[ textureDef.source ]; } var loader; if ( source.uri ) { loader = options.manager.getHandler( source.uri ); } if ( ! loader ) { loader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoader : this.textureLoader; } return this.loadTextureImage( textureIndex, source, loader ); }; GLTFParser.prototype.loadTextureImage = function ( textureIndex, source, loader ) { var parser = this; var json = this.json; var options = this.options; var textureDef = json.textures[ textureIndex ]; var URL = self.URL || self.webkitURL; var sourceURI = source.uri; var isObjectURL = false; var hasAlpha = true; if ( source.mimeType === 'image/jpeg' ) hasAlpha = false; if ( source.bufferView !== undefined ) { // Load binary image data from bufferView, if provided. sourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) { if ( source.mimeType === 'image/png' ) { // Inspect the PNG 'IHDR' chunk to determine whether the image could have an // alpha channel. This check is conservative — the image could have an alpha // channel with all values == 1, and the indexed type (colorType == 3) only // sometimes contains alpha. // // https://en.wikipedia.org/wiki/Portable_Network_Graphics#File_header var colorType = new DataView( bufferView, 25, 1 ).getUint8( 0, false ); hasAlpha = colorType === 6 || colorType === 4 || colorType === 3; } isObjectURL = true; var blob = new Blob( [ bufferView ], { type: source.mimeType } ); sourceURI = URL.createObjectURL( blob ); return sourceURI; } ); } return Promise.resolve( sourceURI ).then( function ( sourceURI ) { return new Promise( function ( resolve, reject ) { var onLoad = resolve; if ( loader.isImageBitmapLoader === true ) { onLoad = function ( imageBitmap ) { resolve( new CanvasTexture( imageBitmap ) ); }; } loader.load( resolveURL( sourceURI, options.path ), onLoad, undefined, reject ); } ); } ).then( function ( texture ) { // Clean up resources and configure Texture. if ( isObjectURL === true ) { URL.revokeObjectURL( sourceURI ); } texture.flipY = false; if ( textureDef.name ) texture.name = textureDef.name; // When there is definitely no alpha channel in the texture, set RGBFormat to save space. if ( ! hasAlpha ) texture.format = RGBFormat; var samplers = json.samplers || {}; var sampler = samplers[ textureDef.sampler ] || {}; texture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter; texture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter; texture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping; texture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping; parser.associations.set( texture, { type: 'textures', index: textureIndex } ); return texture; } ); }; /** * Asynchronously assigns a texture to the given material parameters. * @param {Object} materialParams * @param {string} mapName * @param {Object} mapDef * @return {Promise} */ GLTFParser.prototype.assignTexture = function ( materialParams, mapName, mapDef ) { var parser = this; return this.getDependency( 'texture', mapDef.index ).then( function ( texture ) { // Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured // However, we will copy UV set 0 to UV set 1 on demand for aoMap if ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) { console.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' ); } if ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) { var transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined; if ( transform ) { var gltfReference = parser.associations.get( texture ); texture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform ); parser.associations.set( texture, gltfReference ); } } materialParams[ mapName ] = texture; } ); }; /** * Assigns final material to a Mesh, Line, or Points instance. The instance * already has a material (generated from the glTF material options alone) * but reuse of the same glTF material may require multiple threejs materials * to accomodate different primitive types, defines, etc. New materials will * be created if necessary, and reused from a cache. * @param {Object3D} mesh Mesh, Line, or Points instance. */ GLTFParser.prototype.assignFinalMaterial = function ( mesh ) { var geometry = mesh.geometry; var material = mesh.material; var useVertexTangents = geometry.attributes.tangent !== undefined; var useVertexColors = geometry.attributes.color !== undefined; var useFlatShading = geometry.attributes.normal === undefined; var useSkinning = mesh.isSkinnedMesh === true; var useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0; var useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined; if ( mesh.isPoints ) { var cacheKey = 'PointsMaterial:' + material.uuid; var pointsMaterial = this.cache.get( cacheKey ); if ( ! pointsMaterial ) { pointsMaterial = new PointsMaterial(); Material.prototype.copy.call( pointsMaterial, material ); pointsMaterial.color.copy( material.color ); pointsMaterial.map = material.map; pointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px this.cache.add( cacheKey, pointsMaterial ); } material = pointsMaterial; } else if ( mesh.isLine ) { var cacheKey = 'LineBasicMaterial:' + material.uuid; var lineMaterial = this.cache.get( cacheKey ); if ( ! lineMaterial ) { lineMaterial = new LineBasicMaterial(); Material.prototype.copy.call( lineMaterial, material ); lineMaterial.color.copy( material.color ); this.cache.add( cacheKey, lineMaterial ); } material = lineMaterial; } // Clone the material if it will be modified if ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) { var cacheKey = 'ClonedMaterial:' + material.uuid + ':'; if ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:'; if ( useSkinning ) cacheKey += 'skinning:'; if ( useVertexTangents ) cacheKey += 'vertex-tangents:'; if ( useVertexColors ) cacheKey += 'vertex-colors:'; if ( useFlatShading ) cacheKey += 'flat-shading:'; if ( useMorphTargets ) cacheKey += 'morph-targets:'; if ( useMorphNormals ) cacheKey += 'morph-normals:'; var cachedMaterial = this.cache.get( cacheKey ); if ( ! cachedMaterial ) { cachedMaterial = material.clone(); if ( useSkinning ) cachedMaterial.skinning = true; if ( useVertexTangents ) cachedMaterial.vertexTangents = true; if ( useVertexColors ) cachedMaterial.vertexColors = true; if ( useFlatShading ) cachedMaterial.flatShading = true; if ( useMorphTargets ) cachedMaterial.morphTargets = true; if ( useMorphNormals ) cachedMaterial.morphNormals = true; this.cache.add( cacheKey, cachedMaterial ); this.associations.set( cachedMaterial, this.associations.get( material ) ); } material = cachedMaterial; } // workarounds for mesh and geometry if ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) { geometry.setAttribute( 'uv2', geometry.attributes.uv ); } // https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995 if ( material.normalScale && ! useVertexTangents ) { material.normalScale.y = - material.normalScale.y; } if ( material.clearcoatNormalScale && ! useVertexTangents ) { material.clearcoatNormalScale.y = - material.clearcoatNormalScale.y; } mesh.material = material; }; GLTFParser.prototype.getMaterialType = function ( /* materialIndex */ ) { return MeshStandardMaterial; }; /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials * @param {number} materialIndex * @return {Promise} */ GLTFParser.prototype.loadMaterial = function ( materialIndex ) { var parser = this; var json = this.json; var extensions = this.extensions; var materialDef = json.materials[ materialIndex ]; var materialType; var materialParams = {}; var materialExtensions = materialDef.extensions || {}; var pending = []; if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) { var sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ]; materialType = sgExtension.getMaterialType(); pending.push( sgExtension.extendParams( materialParams, materialDef, parser ) ); } else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) { var kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ]; materialType = kmuExtension.getMaterialType(); pending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) ); } else { // Specification: // https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-material var metallicRoughness = materialDef.pbrMetallicRoughness || {}; materialParams.color = new Color( 1.0, 1.0, 1.0 ); materialParams.opacity = 1.0; if ( Array.isArray( metallicRoughness.baseColorFactor ) ) { var array = metallicRoughness.baseColorFactor; materialParams.color.fromArray( array ); materialParams.opacity = array[ 3 ]; } if ( metallicRoughness.baseColorTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) ); } materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0; materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0; if ( metallicRoughness.metallicRoughnessTexture !== undefined ) { pending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) ); pending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) ); } materialType = this._invokeOne( function ( ext ) { return ext.getMaterialType && ext.getMaterialType( materialIndex ); } ); pending.push( Promise.all( this._invokeAll( function ( ext ) { return ext.extendMaterialParams && ext.extendMaterialParams( materialIndex, materialParams ); } ) ) ); } if ( materialDef.doubleSided === true ) { materialParams.side = DoubleSide; } var alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; if ( alphaMode === ALPHA_MODES.BLEND ) { materialParams.transparent = true; // See: https://github.com/mrdoob/three.js/issues/17706 materialParams.depthWrite = false; } else { materialParams.transparent = false; if ( alphaMode === ALPHA_MODES.MASK ) { materialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5; } } if ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) { pending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) ); materialParams.normalScale = new Vector2( 1, 1 ); if ( materialDef.normalTexture.scale !== undefined ) { materialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale ); } } if ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) { pending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) ); if ( materialDef.occlusionTexture.strength !== undefined ) { materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; } } if ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) { materialParams.emissive = new Color().fromArray( materialDef.emissiveFactor ); } if ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) { pending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) ); } return Promise.all( pending ).then( function () { var material; if ( materialType === GLTFMeshStandardSGMaterial ) { material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams ); } else { material = new materialType( materialParams ); } if ( materialDef.name ) material.name = materialDef.name; // baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding. if ( material.map ) material.map.encoding = sRGBEncoding; if ( material.emissiveMap ) material.emissiveMap.encoding = sRGBEncoding; assignExtrasToUserData( material, materialDef ); parser.associations.set( material, { type: 'materials', index: materialIndex } ); if ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef ); return material; } ); }; /** When Object3D instances are targeted by animation, they need unique names. */ GLTFParser.prototype.createUniqueName = function ( originalName ) { var sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' ); var name = sanitizedName; for ( var i = 1; this.nodeNamesUsed[ name ]; ++ i ) { name = sanitizedName + '_' + i; } this.nodeNamesUsed[ name ] = true; return name; }; /** * @param {BufferGeometry} geometry * @param {GLTF.Primitive} primitiveDef * @param {GLTFParser} parser */ function computeBounds( geometry, primitiveDef, parser ) { var attributes = primitiveDef.attributes; var box = new Box3(); if ( attributes.POSITION !== undefined ) { var accessor = parser.json.accessors[ attributes.POSITION ]; var min = accessor.min; var max = accessor.max; // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement. if ( min !== undefined && max !== undefined ) { box.set( new Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ), new Vector3( max[ 0 ], max[ 1 ], max[ 2 ] ) ); } else { console.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' ); return; } } else { return; } var targets = primitiveDef.targets; if ( targets !== undefined ) { var maxDisplacement = new Vector3(); var vector = new Vector3(); for ( var i = 0, il = targets.length; i < il; i ++ ) { var target = targets[ i ]; if ( target.POSITION !== undefined ) { var accessor = parser.json.accessors[ target.POSITION ]; var min = accessor.min; var max = accessor.max; // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement. if ( min !== undefined && max !== undefined ) { // we need to get max of absolute components because target weight is [-1,1] vector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) ); vector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) ); vector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) ); // Note: this assumes that the sum of all weights is at most 1. This isn't quite correct - it's more conservative // to assume that each target can have a max weight of 1. However, for some use cases - notably, when morph targets // are used to implement key-frame animations and as such only two are active at a time - this results in very large // boxes. So for now we make a box that's sometimes a touch too small but is hopefully mostly of reasonable size. maxDisplacement.max( vector ); } else { console.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' ); } } } // As per comment above this box isn't conservative, but has a reasonable size for a very large number of morph targets. box.expandByVector( maxDisplacement ); } geometry.boundingBox = box; var sphere = new Sphere(); box.getCenter( sphere.center ); sphere.radius = box.min.distanceTo( box.max ) / 2; geometry.boundingSphere = sphere; } /** * @param {BufferGeometry} geometry * @param {GLTF.Primitive} primitiveDef * @param {GLTFParser} parser * @return {Promise} */ function addPrimitiveAttributes( geometry, primitiveDef, parser ) { var attributes = primitiveDef.attributes; var pending = []; function assignAttributeAccessor( accessorIndex, attributeName ) { return parser.getDependency( 'accessor', accessorIndex ) .then( function ( accessor ) { geometry.setAttribute( attributeName, accessor ); } ); } for ( var gltfAttributeName in attributes ) { var threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase(); // Skip attributes already provided by e.g. Draco extension. if ( threeAttributeName in geometry.attributes ) continue; pending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) ); } if ( primitiveDef.indices !== undefined && ! geometry.index ) { var accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) { geometry.setIndex( accessor ); } ); pending.push( accessor ); } assignExtrasToUserData( geometry, primitiveDef ); computeBounds( geometry, primitiveDef, parser ); return Promise.all( pending ).then( function () { return primitiveDef.targets !== undefined ? addMorphTargets( geometry, primitiveDef.targets, parser ) : geometry; } ); } /** * @param {BufferGeometry} geometry * @param {Number} drawMode * @return {BufferGeometry} */ function toTrianglesDrawMode( geometry, drawMode ) { var index = geometry.getIndex(); // generate index if not present if ( index === null ) { var indices = []; var position = geometry.getAttribute( 'position' ); if ( position !== undefined ) { for ( var i = 0; i < position.count; i ++ ) { indices.push( i ); } geometry.setIndex( indices ); index = geometry.getIndex(); } else { console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' ); return geometry; } } // var numberOfTriangles = index.count - 2; var newIndices = []; if ( drawMode === TriangleFanDrawMode ) { // gl.TRIANGLE_FAN for ( var i = 1; i <= numberOfTriangles; i ++ ) { newIndices.push( index.getX( 0 ) ); newIndices.push( index.getX( i ) ); newIndices.push( index.getX( i + 1 ) ); } } else { // gl.TRIANGLE_STRIP for ( var i = 0; i < numberOfTriangles; i ++ ) { if ( i % 2 === 0 ) { newIndices.push( index.getX( i ) ); newIndices.push( index.getX( i + 1 ) ); newIndices.push( index.getX( i + 2 ) ); } else { newIndices.push( index.getX( i + 2 ) ); newIndices.push( index.getX( i + 1 ) ); newIndices.push( index.getX( i ) ); } } } if ( ( newIndices.length / 3 ) !== numberOfTriangles ) { console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' ); } // build final geometry var newGeometry = geometry.clone(); newGeometry.setIndex( newIndices ); return newGeometry; } /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry * * Creates BufferGeometries from primitives. * * @param {Array} primitives * @return {Promise>} */ GLTFParser.prototype.loadGeometries = function ( primitives ) { var parser = this; var extensions = this.extensions; var cache = this.primitiveCache; function createDracoPrimitive( primitive ) { return extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] .decodePrimitive( primitive, parser ) .then( function ( geometry ) { return addPrimitiveAttributes( geometry, primitive, parser ); } ); } var pending = []; for ( var i = 0, il = primitives.length; i < il; i ++ ) { var primitive = primitives[ i ]; var cacheKey = createPrimitiveKey( primitive ); // See if we've already created this geometry var cached = cache[ cacheKey ]; if ( cached ) { // Use the cached geometry if it exists pending.push( cached.promise ); } else { var geometryPromise; if ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) { // Use DRACO geometry if available geometryPromise = createDracoPrimitive( primitive ); } else { // Otherwise create a new geometry geometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser ); } // Cache this geometry cache[ cacheKey ] = { primitive: primitive, promise: geometryPromise }; pending.push( geometryPromise ); } } return Promise.all( pending ); }; /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes * @param {number} meshIndex * @return {Promise} */ GLTFParser.prototype.loadMesh = function ( meshIndex ) { var parser = this; var json = this.json; var extensions = this.extensions; var meshDef = json.meshes[ meshIndex ]; var primitives = meshDef.primitives; var pending = []; for ( var i = 0, il = primitives.length; i < il; i ++ ) { var material = primitives[ i ].material === undefined ? createDefaultMaterial( this.cache ) : this.getDependency( 'material', primitives[ i ].material ); pending.push( material ); } pending.push( parser.loadGeometries( primitives ) ); return Promise.all( pending ).then( function ( results ) { var materials = results.slice( 0, results.length - 1 ); var geometries = results[ results.length - 1 ]; var meshes = []; for ( var i = 0, il = geometries.length; i < il; i ++ ) { var geometry = geometries[ i ]; var primitive = primitives[ i ]; // 1. create Mesh var mesh; var material = materials[ i ]; if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === undefined ) { // .isSkinnedMesh isn't in glTF spec. See ._markDefs() mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh( geometry, material ) : new Mesh( geometry, material ); if ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) { // we normalize floating point skin weight array to fix malformed assets (see #15319) // it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs mesh.normalizeSkinWeights(); } if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) { mesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleStripDrawMode ); } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) { mesh.geometry = toTrianglesDrawMode( mesh.geometry, TriangleFanDrawMode ); } } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) { mesh = new LineSegments( geometry, material ); } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) { mesh = new Line( geometry, material ); } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) { mesh = new LineLoop( geometry, material ); } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) { mesh = new Points( geometry, material ); } else { throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode ); } if ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) { updateMorphTargets( mesh, meshDef ); } mesh.name = parser.createUniqueName( meshDef.name || ( 'mesh_' + meshIndex ) ); assignExtrasToUserData( mesh, meshDef ); if ( primitive.extensions ) addUnknownExtensionsToUserData( extensions, mesh, primitive ); parser.assignFinalMaterial( mesh ); meshes.push( mesh ); } if ( meshes.length === 1 ) { return meshes[ 0 ]; } var group = new Group(); for ( var i = 0, il = meshes.length; i < il; i ++ ) { group.add( meshes[ i ] ); } return group; } ); }; /** * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras * @param {number} cameraIndex * @return {Promise} */ GLTFParser.prototype.loadCamera = function ( cameraIndex ) { var camera; var cameraDef = this.json.cameras[ cameraIndex ]; var params = cameraDef[ cameraDef.type ]; if ( ! params ) { console.warn( 'THREE.GLTFLoader: Missing camera parameters.' ); return; } if ( cameraDef.type === 'perspective' ) { camera = new PerspectiveCamera( MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 ); } else if ( cameraDef.type === 'orthographic' ) { camera = new OrthographicCamera( - params.xmag, params.xmag, params.ymag, - params.ymag, params.znear, params.zfar ); } if ( cameraDef.name ) camera.name = this.createUniqueName( cameraDef.name ); assignExtrasToUserData( camera, cameraDef ); return Promise.resolve( camera ); }; /** * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins * @param {number} skinIndex * @return {Promise} */ GLTFParser.prototype.loadSkin = function ( skinIndex ) { var skinDef = this.json.skins[ skinIndex ]; var skinEntry = { joints: skinDef.joints }; if ( skinDef.inverseBindMatrices === undefined ) { return Promise.resolve( skinEntry ); } return this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) { skinEntry.inverseBindMatrices = accessor; return skinEntry; } ); }; /** * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations * @param {number} animationIndex * @return {Promise} */ GLTFParser.prototype.loadAnimation = function ( animationIndex ) { var json = this.json; var animationDef = json.animations[ animationIndex ]; var pendingNodes = []; var pendingInputAccessors = []; var pendingOutputAccessors = []; var pendingSamplers = []; var pendingTargets = []; for ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) { var channel = animationDef.channels[ i ]; var sampler = animationDef.samplers[ channel.sampler ]; var target = channel.target; var name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated. var input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input; var output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output; pendingNodes.push( this.getDependency( 'node', name ) ); pendingInputAccessors.push( this.getDependency( 'accessor', input ) ); pendingOutputAccessors.push( this.getDependency( 'accessor', output ) ); pendingSamplers.push( sampler ); pendingTargets.push( target ); } return Promise.all( [ Promise.all( pendingNodes ), Promise.all( pendingInputAccessors ), Promise.all( pendingOutputAccessors ), Promise.all( pendingSamplers ), Promise.all( pendingTargets ) ] ).then( function ( dependencies ) { var nodes = dependencies[ 0 ]; var inputAccessors = dependencies[ 1 ]; var outputAccessors = dependencies[ 2 ]; var samplers = dependencies[ 3 ]; var targets = dependencies[ 4 ]; var tracks = []; for ( var i = 0, il = nodes.length; i < il; i ++ ) { var node = nodes[ i ]; var inputAccessor = inputAccessors[ i ]; var outputAccessor = outputAccessors[ i ]; var sampler = samplers[ i ]; var target = targets[ i ]; if ( node === undefined ) continue; node.updateMatrix(); node.matrixAutoUpdate = true; var TypedKeyframeTrack; switch ( PATH_PROPERTIES[ target.path ] ) { case PATH_PROPERTIES.weights: TypedKeyframeTrack = NumberKeyframeTrack; break; case PATH_PROPERTIES.rotation: TypedKeyframeTrack = QuaternionKeyframeTrack; break; case PATH_PROPERTIES.position: case PATH_PROPERTIES.scale: default: TypedKeyframeTrack = VectorKeyframeTrack; break; } var targetName = node.name ? node.name : node.uuid; var interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear; var targetNames = []; if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) { // Node may be a Group (glTF mesh with several primitives) or a Mesh. node.traverse( function ( object ) { if ( object.isMesh === true && object.morphTargetInfluences ) { targetNames.push( object.name ? object.name : object.uuid ); } } ); } else { targetNames.push( targetName ); } var outputArray = outputAccessor.array; if ( outputAccessor.normalized ) { var scale; if ( outputArray.constructor === Int8Array ) { scale = 1 / 127; } else if ( outputArray.constructor === Uint8Array ) { scale = 1 / 255; } else if ( outputArray.constructor == Int16Array ) { scale = 1 / 32767; } else if ( outputArray.constructor === Uint16Array ) { scale = 1 / 65535; } else { throw new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' ); } var scaled = new Float32Array( outputArray.length ); for ( var j = 0, jl = outputArray.length; j < jl; j ++ ) { scaled[ j ] = outputArray[ j ] * scale; } outputArray = scaled; } for ( var j = 0, jl = targetNames.length; j < jl; j ++ ) { var track = new TypedKeyframeTrack( targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ], inputAccessor.array, outputArray, interpolation ); // Override interpolation with custom factory method. if ( sampler.interpolation === 'CUBICSPLINE' ) { track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) { // A CUBICSPLINE keyframe in glTF has three output values for each input value, // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize() // must be divided by three to get the interpolant's sampleSize argument. return new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result ); }; // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants. track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; } tracks.push( track ); } } var name = animationDef.name ? animationDef.name : 'animation_' + animationIndex; return new AnimationClip( name, undefined, tracks ); } ); }; /** * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy * @param {number} nodeIndex * @return {Promise} */ GLTFParser.prototype.loadNode = function ( nodeIndex ) { var json = this.json; var extensions = this.extensions; var parser = this; var nodeDef = json.nodes[ nodeIndex ]; // reserve node's name before its dependencies, so the root has the intended name. var nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : ''; return ( function () { var pending = []; if ( nodeDef.mesh !== undefined ) { pending.push( parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) { var node = parser._getNodeRef( parser.meshCache, nodeDef.mesh, mesh ); // if weights are provided on the node, override weights on the mesh. if ( nodeDef.weights !== undefined ) { node.traverse( function ( o ) { if ( ! o.isMesh ) return; for ( var i = 0, il = nodeDef.weights.length; i < il; i ++ ) { o.morphTargetInfluences[ i ] = nodeDef.weights[ i ]; } } ); } return node; } ) ); } if ( nodeDef.camera !== undefined ) { pending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) { return parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera ); } ) ); } parser._invokeAll( function ( ext ) { return ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex ); } ).forEach( function ( promise ) { pending.push( promise ); } ); return Promise.all( pending ); }() ).then( function ( objects ) { var node; // .isBone isn't in glTF spec. See ._markDefs if ( nodeDef.isBone === true ) { node = new Bone(); } else if ( objects.length > 1 ) { node = new Group(); } else if ( objects.length === 1 ) { node = objects[ 0 ]; } else { node = new Object3D(); } if ( node !== objects[ 0 ] ) { for ( var i = 0, il = objects.length; i < il; i ++ ) { node.add( objects[ i ] ); } } if ( nodeDef.name ) { node.userData.name = nodeDef.name; node.name = nodeName; } assignExtrasToUserData( node, nodeDef ); if ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef ); if ( nodeDef.matrix !== undefined ) { var matrix = new Matrix4(); matrix.fromArray( nodeDef.matrix ); node.applyMatrix4( matrix ); } else { if ( nodeDef.translation !== undefined ) { node.position.fromArray( nodeDef.translation ); } if ( nodeDef.rotation !== undefined ) { node.quaternion.fromArray( nodeDef.rotation ); } if ( nodeDef.scale !== undefined ) { node.scale.fromArray( nodeDef.scale ); } } parser.associations.set( node, { type: 'nodes', index: nodeIndex } ); return node; } ); }; /** * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes * @param {number} sceneIndex * @return {Promise} */ GLTFParser.prototype.loadScene = function () { // scene node hierachy builder function buildNodeHierachy( nodeId, parentObject, json, parser ) { var nodeDef = json.nodes[ nodeId ]; return parser.getDependency( 'node', nodeId ).then( function ( node ) { if ( nodeDef.skin === undefined ) return node; // build skeleton here as well var skinEntry; return parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) { skinEntry = skin; var pendingJoints = []; for ( var i = 0, il = skinEntry.joints.length; i < il; i ++ ) { pendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) ); } return Promise.all( pendingJoints ); } ).then( function ( jointNodes ) { node.traverse( function ( mesh ) { if ( ! mesh.isMesh ) return; var bones = []; var boneInverses = []; for ( var j = 0, jl = jointNodes.length; j < jl; j ++ ) { var jointNode = jointNodes[ j ]; if ( jointNode ) { bones.push( jointNode ); var mat = new Matrix4(); if ( skinEntry.inverseBindMatrices !== undefined ) { mat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 ); } boneInverses.push( mat ); } else { console.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', skinEntry.joints[ j ] ); } } mesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld ); } ); return node; } ); } ).then( function ( node ) { // build node hierachy parentObject.add( node ); var pending = []; if ( nodeDef.children ) { var children = nodeDef.children; for ( var i = 0, il = children.length; i < il; i ++ ) { var child = children[ i ]; pending.push( buildNodeHierachy( child, node, json, parser ) ); } } return Promise.all( pending ); } ); } return function loadScene( sceneIndex ) { var json = this.json; var extensions = this.extensions; var sceneDef = this.json.scenes[ sceneIndex ]; var parser = this; // Loader returns Group, not Scene. // See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172 var scene = new Group(); if ( sceneDef.name ) scene.name = parser.createUniqueName( sceneDef.name ); assignExtrasToUserData( scene, sceneDef ); if ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef ); var nodeIds = sceneDef.nodes || []; var pending = []; for ( var i = 0, il = nodeIds.length; i < il; i ++ ) { pending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) ); } return Promise.all( pending ).then( function () { return scene; } ); }; }(); return GLTFLoader; } )(); /** * @webxr-input-profiles/motion-controllers 1.0.0 https://github.com/immersive-web/webxr-input-profiles */ const Constants = { Handedness: Object.freeze({ NONE: 'none', LEFT: 'left', RIGHT: 'right' }), ComponentState: Object.freeze({ DEFAULT: 'default', TOUCHED: 'touched', PRESSED: 'pressed' }), ComponentProperty: Object.freeze({ BUTTON: 'button', X_AXIS: 'xAxis', Y_AXIS: 'yAxis', STATE: 'state' }), ComponentType: Object.freeze({ TRIGGER: 'trigger', SQUEEZE: 'squeeze', TOUCHPAD: 'touchpad', THUMBSTICK: 'thumbstick', BUTTON: 'button' }), ButtonTouchThreshold: 0.05, AxisTouchThreshold: 0.1, VisualResponseProperty: Object.freeze({ TRANSFORM: 'transform', VISIBILITY: 'visibility' }) }; /** * @description Static helper function to fetch a JSON file and turn it into a JS object * @param {string} path - Path to JSON file to be fetched */ async function fetchJsonFile(path) { const response = await fetch(path); if (!response.ok) { throw new Error(response.statusText); } else { return response.json(); } } async function fetchProfilesList(basePath) { if (!basePath) { throw new Error('No basePath supplied'); } const profileListFileName = 'profilesList.json'; const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`); return profilesList; } async function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) { if (!xrInputSource) { throw new Error('No xrInputSource supplied'); } if (!basePath) { throw new Error('No basePath supplied'); } // Get the list of profiles const supportedProfilesList = await fetchProfilesList(basePath); // Find the relative path to the first requested profile that is recognized let match; xrInputSource.profiles.some((profileId) => { const supportedProfile = supportedProfilesList[profileId]; if (supportedProfile) { match = { profileId, profilePath: `${basePath}/${supportedProfile.path}`, deprecated: !!supportedProfile.deprecated }; } return !!match; }); if (!match) { if (!defaultProfile) { throw new Error('No matching profile name found'); } const supportedProfile = supportedProfilesList[defaultProfile]; if (!supportedProfile) { throw new Error(`No matching profile name found and default profile "${defaultProfile}" missing.`); } match = { profileId: defaultProfile, profilePath: `${basePath}/${supportedProfile.path}`, deprecated: !!supportedProfile.deprecated }; } const profile = await fetchJsonFile(match.profilePath); let assetPath; if (getAssetPath) { let layout; if (xrInputSource.handedness === 'any') { layout = profile.layouts[Object.keys(profile.layouts)[0]]; } else { layout = profile.layouts[xrInputSource.handedness]; } if (!layout) { throw new Error( `No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}` ); } if (layout.assetPath) { assetPath = match.profilePath.replace('profile.json', layout.assetPath); } } return { profile, assetPath }; } /** @constant {Object} */ const defaultComponentValues = { xAxis: 0, yAxis: 0, button: 0, state: Constants.ComponentState.DEFAULT }; /** * @description Converts an X, Y coordinate from the range -1 to 1 (as reported by the Gamepad * API) to the range 0 to 1 (for interpolation). Also caps the X, Y values to be bounded within * a circle. This ensures that thumbsticks are not animated outside the bounds of their physical * range of motion and touchpads do not report touch locations off their physical bounds. * @param {number} x The original x coordinate in the range -1 to 1 * @param {number} y The original y coordinate in the range -1 to 1 */ function normalizeAxes(x = 0, y = 0) { let xAxis = x; let yAxis = y; // Determine if the point is outside the bounds of the circle // and, if so, place it on the edge of the circle const hypotenuse = Math.sqrt((x * x) + (y * y)); if (hypotenuse > 1) { const theta = Math.atan2(y, x); xAxis = Math.cos(theta); yAxis = Math.sin(theta); } // Scale and move the circle so values are in the interpolation range. The circle's origin moves // from (0, 0) to (0.5, 0.5). The circle's radius scales from 1 to be 0.5. const result = { normalizedXAxis: (xAxis * 0.5) + 0.5, normalizedYAxis: (yAxis * 0.5) + 0.5 }; return result; } /** * Contains the description of how the 3D model should visually respond to a specific user input. * This is accomplished by initializing the object with the name of a node in the 3D model and * property that need to be modified in response to user input, the name of the nodes representing * the allowable range of motion, and the name of the input which triggers the change. In response * to the named input changing, this object computes the appropriate weighting to use for * interpolating between the range of motion nodes. */ class VisualResponse { constructor(visualResponseDescription) { this.componentProperty = visualResponseDescription.componentProperty; this.states = visualResponseDescription.states; this.valueNodeName = visualResponseDescription.valueNodeName; this.valueNodeProperty = visualResponseDescription.valueNodeProperty; if (this.valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM) { this.minNodeName = visualResponseDescription.minNodeName; this.maxNodeName = visualResponseDescription.maxNodeName; } // Initializes the response's current value based on default data this.value = 0; this.updateFromComponent(defaultComponentValues); } /** * Computes the visual response's interpolation weight based on component state * @param {Object} componentValues - The component from which to update * @param {number} xAxis - The reported X axis value of the component * @param {number} yAxis - The reported Y axis value of the component * @param {number} button - The reported value of the component's button * @param {string} state - The component's active state */ updateFromComponent({ xAxis, yAxis, button, state }) { const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis); switch (this.componentProperty) { case Constants.ComponentProperty.X_AXIS: this.value = (this.states.includes(state)) ? normalizedXAxis : 0.5; break; case Constants.ComponentProperty.Y_AXIS: this.value = (this.states.includes(state)) ? normalizedYAxis : 0.5; break; case Constants.ComponentProperty.BUTTON: this.value = (this.states.includes(state)) ? button : 0; break; case Constants.ComponentProperty.STATE: if (this.valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY) { this.value = (this.states.includes(state)); } else { this.value = this.states.includes(state) ? 1.0 : 0.0; } break; default: throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`); } } } class Component { /** * @param {Object} componentId - Id of the component * @param {Object} componentDescription - Description of the component to be created */ constructor(componentId, componentDescription) { if (!componentId || !componentDescription || !componentDescription.visualResponses || !componentDescription.gamepadIndices || Object.keys(componentDescription.gamepadIndices).length === 0) { throw new Error('Invalid arguments supplied'); } this.id = componentId; this.type = componentDescription.type; this.rootNodeName = componentDescription.rootNodeName; this.touchPointNodeName = componentDescription.touchPointNodeName; // Build all the visual responses for this component this.visualResponses = {}; Object.keys(componentDescription.visualResponses).forEach((responseName) => { const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]); this.visualResponses[responseName] = visualResponse; }); // Set default values this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices); this.values = { state: Constants.ComponentState.DEFAULT, button: (this.gamepadIndices.button !== undefined) ? 0 : undefined, xAxis: (this.gamepadIndices.xAxis !== undefined) ? 0 : undefined, yAxis: (this.gamepadIndices.yAxis !== undefined) ? 0 : undefined }; } get data() { const data = { id: this.id, ...this.values }; return data; } /** * @description Poll for updated data based on current gamepad state * @param {Object} gamepad - The gamepad object from which the component data should be polled */ updateFromGamepad(gamepad) { // Set the state to default before processing other data sources this.values.state = Constants.ComponentState.DEFAULT; // Get and normalize button if (this.gamepadIndices.button !== undefined && gamepad.buttons.length > this.gamepadIndices.button) { const gamepadButton = gamepad.buttons[this.gamepadIndices.button]; this.values.button = gamepadButton.value; this.values.button = (this.values.button < 0) ? 0 : this.values.button; this.values.button = (this.values.button > 1) ? 1 : this.values.button; // Set the state based on the button if (gamepadButton.pressed || this.values.button === 1) { this.values.state = Constants.ComponentState.PRESSED; } else if (gamepadButton.touched || this.values.button > Constants.ButtonTouchThreshold) { this.values.state = Constants.ComponentState.TOUCHED; } } // Get and normalize x axis value if (this.gamepadIndices.xAxis !== undefined && gamepad.axes.length > this.gamepadIndices.xAxis) { this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis]; this.values.xAxis = (this.values.xAxis < -1) ? -1 : this.values.xAxis; this.values.xAxis = (this.values.xAxis > 1) ? 1 : this.values.xAxis; // If the state is still default, check if the xAxis makes it touched if (this.values.state === Constants.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > Constants.AxisTouchThreshold) { this.values.state = Constants.ComponentState.TOUCHED; } } // Get and normalize Y axis value if (this.gamepadIndices.yAxis !== undefined && gamepad.axes.length > this.gamepadIndices.yAxis) { this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis]; this.values.yAxis = (this.values.yAxis < -1) ? -1 : this.values.yAxis; this.values.yAxis = (this.values.yAxis > 1) ? 1 : this.values.yAxis; // If the state is still default, check if the yAxis makes it touched if (this.values.state === Constants.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > Constants.AxisTouchThreshold) { this.values.state = Constants.ComponentState.TOUCHED; } } // Update the visual response weights based on the current component data Object.values(this.visualResponses).forEach((visualResponse) => { visualResponse.updateFromComponent(this.values); }); } } /** * @description Builds a motion controller with components and visual responses based on the * supplied profile description. Data is polled from the xrInputSource's gamepad. * @author Nell Waliczek / https://github.com/NellWaliczek */ class MotionController { /** * @param {Object} xrInputSource - The XRInputSource to build the MotionController around * @param {Object} profile - The best matched profile description for the supplied xrInputSource * @param {Object} assetUrl */ constructor(xrInputSource, profile, assetUrl) { if (!xrInputSource) { throw new Error('No xrInputSource supplied'); } if (!profile) { throw new Error('No profile supplied'); } this.xrInputSource = xrInputSource; this.assetUrl = assetUrl; this.id = profile.profileId; // Build child components as described in the profile description this.layoutDescription = profile.layouts[xrInputSource.handedness]; this.components = {}; Object.keys(this.layoutDescription.components).forEach((componentId) => { const componentDescription = this.layoutDescription.components[componentId]; this.components[componentId] = new Component(componentId, componentDescription); }); // Initialize components based on current gamepad state this.updateFromGamepad(); } get gripSpace() { return this.xrInputSource.gripSpace; } get targetRaySpace() { return this.xrInputSource.targetRaySpace; } /** * @description Returns a subset of component data for simplified debugging */ get data() { const data = []; Object.values(this.components).forEach((component) => { data.push(component.data); }); return data; } /** * @description Poll for updated data based on current gamepad state */ updateFromGamepad() { Object.values(this.components).forEach((component) => { component.updateFromGamepad(this.xrInputSource.gamepad); }); } } const DEFAULT_PROFILES_PATH = 'https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles'; const DEFAULT_PROFILE = 'generic-trigger'; function XRControllerModel( ) { Object3D.call( this ); this.motionController = null; this.envMap = null; } XRControllerModel.prototype = Object.assign( Object.create( Object3D.prototype ), { constructor: XRControllerModel, setEnvironmentMap: function ( envMap ) { if ( this.envMap == envMap ) { return this; } this.envMap = envMap; this.traverse( ( child ) => { if ( child.isMesh ) { child.material.envMap = this.envMap; child.material.needsUpdate = true; } } ); return this; }, /** * Polls data from the XRInputSource and updates the model's components to match * the real world data */ updateMatrixWorld: function ( force ) { Object3D.prototype.updateMatrixWorld.call( this, force ); if ( ! this.motionController ) return; // Cause the MotionController to poll the Gamepad for data this.motionController.updateFromGamepad(); // Update the 3D model to reflect the button, thumbstick, and touchpad state Object.values( this.motionController.components ).forEach( ( component ) => { // Update node data based on the visual responses' current states Object.values( component.visualResponses ).forEach( ( visualResponse ) => { const { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse; // Skip if the visual response node is not found. No error is needed, // because it will have been reported at load time. if ( ! valueNode ) return; // Calculate the new properties based on the weight supplied if ( valueNodeProperty === Constants.VisualResponseProperty.VISIBILITY ) { valueNode.visible = value; } else if ( valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM ) { Quaternion.slerp( minNode.quaternion, maxNode.quaternion, valueNode.quaternion, value ); valueNode.position.lerpVectors( minNode.position, maxNode.position, value ); } } ); } ); } } ); /** * Walks the model's tree to find the nodes needed to animate the components and * saves them to the motionContoller components for use in the frame loop. When * touchpads are found, attaches a touch dot to them. */ function findNodes( motionController, scene ) { // Loop through the components and find the nodes needed for each components' visual responses Object.values( motionController.components ).forEach( ( component ) => { const { type, touchPointNodeName, visualResponses } = component; if ( type === Constants.ComponentType.TOUCHPAD ) { component.touchPointNode = scene.getObjectByName( touchPointNodeName ); if ( component.touchPointNode ) { // Attach a touch dot to the touchpad. const sphereGeometry = new SphereBufferGeometry( 0.001 ); const material = new MeshBasicMaterial( { color: 0x0000FF } ); const sphere = new Mesh( sphereGeometry, material ); component.touchPointNode.add( sphere ); } else { console.warn( `Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}` ); } } // Loop through all the visual responses to be applied to this component Object.values( visualResponses ).forEach( ( visualResponse ) => { const { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse; // If animating a transform, find the two nodes to be interpolated between. if ( valueNodeProperty === Constants.VisualResponseProperty.TRANSFORM ) { visualResponse.minNode = scene.getObjectByName( minNodeName ); visualResponse.maxNode = scene.getObjectByName( maxNodeName ); // If the extents cannot be found, skip this animation if ( ! visualResponse.minNode ) { console.warn( `Could not find ${minNodeName} in the model` ); return; } if ( ! visualResponse.maxNode ) { console.warn( `Could not find ${maxNodeName} in the model` ); return; } } // If the target node cannot be found, skip this animation visualResponse.valueNode = scene.getObjectByName( valueNodeName ); if ( ! visualResponse.valueNode ) { console.warn( `Could not find ${valueNodeName} in the model` ); } } ); } ); } function addAssetSceneToControllerModel( controllerModel, scene ) { // Find the nodes needed for animation and cache them on the motionController. findNodes( controllerModel.motionController, scene ); // Apply any environment map that the mesh already has set. if ( controllerModel.envMap ) { scene.traverse( ( child ) => { if ( child.isMesh ) { child.material.envMap = controllerModel.envMap; child.material.needsUpdate = true; } } ); } // Add the glTF scene to the controllerModel. controllerModel.add( scene ); } var XRControllerModelFactory = ( function () { function XRControllerModelFactory( gltfLoader = null ) { this.gltfLoader = gltfLoader; this.path = DEFAULT_PROFILES_PATH; this._assetCache = {}; // If a GLTFLoader wasn't supplied to the constructor create a new one. if ( ! this.gltfLoader ) { this.gltfLoader = new GLTFLoader(); } } XRControllerModelFactory.prototype = { constructor: XRControllerModelFactory, createControllerModel: function ( controller ) { const controllerModel = new XRControllerModel(); let scene = null; controller.addEventListener( 'connected', ( event ) => { const xrInputSource = event.data; if ( xrInputSource.targetRayMode !== 'tracked-pointer' || ! xrInputSource.gamepad ) return; fetchProfile( xrInputSource, this.path, DEFAULT_PROFILE ).then( ( { profile, assetPath } ) => { controllerModel.motionController = new MotionController( xrInputSource, profile, assetPath ); const cachedAsset = this._assetCache[ controllerModel.motionController.assetUrl ]; if ( cachedAsset ) { scene = cachedAsset.scene.clone(); addAssetSceneToControllerModel( controllerModel, scene ); } else { if ( ! this.gltfLoader ) { throw new Error( 'GLTFLoader not set.' ); } this.gltfLoader.setPath( '' ); this.gltfLoader.load( controllerModel.motionController.assetUrl, ( asset ) => { this._assetCache[ controllerModel.motionController.assetUrl ] = asset; scene = asset.scene.clone(); addAssetSceneToControllerModel( controllerModel, scene ); }, null, () => { throw new Error( `Asset ${controllerModel.motionController.assetUrl} missing or malformed.` ); } ); } } ).catch( ( err ) => { console.warn( err ); } ); } ); controller.addEventListener( 'disconnected', () => { controllerModel.motionController = null; controllerModel.remove( scene ); scene = null; } ); return controllerModel; } }; return XRControllerModelFactory; } )(); let fakeCam = new PerspectiveCamera(); function toScene(vec, ref){ let node = ref.clone(); node.updateMatrix(); node.updateMatrixWorld(); let result = vec.clone().applyMatrix4(node.matrix); result.z -= 0.8 * node.scale.x; return result; }; function computeMove(vrControls, controller){ if(!controller || !controller.inputSource || !controller.inputSource.gamepad){ return null; } let pad = controller.inputSource.gamepad; let axes = pad.axes; // [0,1] are for touchpad, [2,3] for thumbsticks? let y = 0; if(axes.length === 2){ y = axes[1]; }else if(axes.length === 4){ y = axes[3]; } y = Math.sign(y) * (2 * y) ** 2; let maxSize = 0; for(let pc of viewer.scene.pointclouds){ let size = pc.boundingBox.min.distanceTo(pc.boundingBox.max); maxSize = Math.max(maxSize, size); } let multiplicator = Math.pow(maxSize, 0.5) / 2; let scale = vrControls.node.scale.x; let moveSpeed = viewer.getMoveSpeed(); let amount = multiplicator * y * (moveSpeed ** 0.5) / scale; let rotation = new Quaternion().setFromEuler(controller.rotation); let dir = new Vector3(0, 0, -1); dir.applyQuaternion(rotation); let move = dir.clone().multiplyScalar(amount); let p1 = vrControls.toScene(controller.position); let p2 = vrControls.toScene(controller.position.clone().add(move)); move = p2.clone().sub(p1); return move; }; class FlyMode{ constructor(vrControls){ this.moveFactor = 1; this.dbgLabel = null; } start(vrControls){ if(!this.dbgLabel){ this.dbgLabel = new Potree.TextSprite("abc"); this.dbgLabel.name = "debug label"; vrControls.viewer.sceneVR.add(this.dbgLabel); this.dbgLabel.visible = false; } } end(){ } update(vrControls, delta){ let primary = vrControls.cPrimary; let secondary = vrControls.cSecondary; let move1 = computeMove(vrControls, primary); let move2 = computeMove(vrControls, secondary); if(!move1){ move1 = new Vector3(); } if(!move2){ move2 = new Vector3(); } let move = move1.clone().add(move2); move.multiplyScalar(-delta * this.moveFactor); vrControls.node.position.add(move); let scale = vrControls.node.scale.x; let camVR = vrControls.viewer.renderer.xr.getCamera(fakeCam); let vrPos = camVR.getWorldPosition(new Vector3()); let vrDir = camVR.getWorldDirection(new Vector3()); let vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale)); let scenePos = toScene(vrPos, vrControls.node); let sceneDir = toScene(vrPos.clone().add(vrDir), vrControls.node).sub(scenePos); sceneDir.normalize().multiplyScalar(scale); let sceneTarget = scenePos.clone().add(sceneDir); vrControls.viewer.scene.view.setView(scenePos, sceneTarget); if(Potree.debug.message){ this.dbgLabel.visible = true; this.dbgLabel.setText(Potree.debug.message); this.dbgLabel.scale.set(0.1, 0.1, 0.1); this.dbgLabel.position.copy(primary.position); } } }; class TranslationMode{ constructor(){ this.controller = null; this.startPos = null; this.debugLine = null; } start(vrControls){ this.controller = vrControls.triggered.values().next().value; this.startPos = vrControls.node.position.clone(); } end(vrControls){ } update(vrControls, delta){ let start = this.controller.start.position; let end = this.controller.position; start = vrControls.toScene(start); end = vrControls.toScene(end); let diff = end.clone().sub(start); diff.set(-diff.x, -diff.y, -diff.z); let pos = new Vector3().addVectors(this.startPos, diff); vrControls.node.position.copy(pos); } }; class RotScaleMode{ constructor(){ this.line = null; this.startState = null; } start(vrControls){ if(!this.line){ this.line = Potree.Utils.debugLine( vrControls.viewer.sceneVR, new Vector3(0, 0, 0), new Vector3(0, 0, 0), 0xffff00, ); this.dbgLabel = new Potree.TextSprite("abc"); this.dbgLabel.scale.set(0.1, 0.1, 0.1); vrControls.viewer.sceneVR.add(this.dbgLabel); } this.line.node.visible = true; this.startState = vrControls.node.clone(); } end(vrControls){ this.line.node.visible = false; this.dbgLabel.visible = false; } update(vrControls, delta){ let start_c1 = vrControls.cPrimary.start.position.clone(); let start_c2 = vrControls.cSecondary.start.position.clone(); let start_center = start_c1.clone().add(start_c2).multiplyScalar(0.5); let start_c1_c2 = start_c2.clone().sub(start_c1); let end_c1 = vrControls.cPrimary.position.clone(); let end_c2 = vrControls.cSecondary.position.clone(); let end_center = end_c1.clone().add(end_c2).multiplyScalar(0.5); let end_c1_c2 = end_c2.clone().sub(end_c1); let d1 = start_c1_c2.length(); let d2 = end_c1_c2.length(); let angleStart = new Vector2(start_c1_c2.x, start_c1_c2.z).angle(); let angleEnd = new Vector2(end_c1_c2.x, end_c1_c2.z).angle(); let angleDiff = angleEnd - angleStart; let scale = d2 / d1; let node = this.startState.clone(); node.updateMatrix(); node.matrixAutoUpdate = false; let mToOrigin = new Matrix4().makeTranslation(...toScene(start_center, this.startState).multiplyScalar(-1).toArray()); let mToStart = new Matrix4().makeTranslation(...toScene(start_center, this.startState).toArray()); let mRotate = new Matrix4().makeRotationZ(angleDiff); let mScale = new Matrix4().makeScale(1 / scale, 1 / scale, 1 / scale); node.applyMatrix4(mToOrigin); node.applyMatrix4(mRotate); node.applyMatrix4(mScale); node.applyMatrix4(mToStart); let oldScenePos = toScene(start_center, this.startState); let newScenePos = toScene(end_center, node); let toNew = oldScenePos.clone().sub(newScenePos); let mToNew = new Matrix4().makeTranslation(...toNew.toArray()); node.applyMatrix4(mToNew); node.matrix.decompose(node.position, node.quaternion, node.scale ); vrControls.node.position.copy(node.position); vrControls.node.quaternion.copy(node.quaternion); vrControls.node.scale.copy(node.scale); vrControls.node.updateMatrix(); { let scale = vrControls.node.scale.x; let camVR = vrControls.viewer.renderer.xr.getCamera(fakeCam); let vrPos = camVR.getWorldPosition(new Vector3()); let vrDir = camVR.getWorldDirection(new Vector3()); let vrTarget = vrPos.clone().add(vrDir.multiplyScalar(scale)); let scenePos = toScene(vrPos, this.startState); let sceneDir = toScene(vrPos.clone().add(vrDir), this.startState).sub(scenePos); sceneDir.normalize().multiplyScalar(scale); let sceneTarget = scenePos.clone().add(sceneDir); vrControls.viewer.scene.view.setView(scenePos, sceneTarget); vrControls.viewer.setMoveSpeed(scale); } { // update "GUI" this.line.set(end_c1, end_c2); let scale = vrControls.node.scale.x; this.dbgLabel.visible = true; this.dbgLabel.position.copy(end_center); this.dbgLabel.setText(`scale: 1 : ${scale.toFixed(2)}`); this.dbgLabel.scale.set(0.05, 0.05, 0.05); } } }; class VRControls extends EventDispatcher{ constructor(viewer){ super(viewer); this.viewer = viewer; viewer.addEventListener("vr_start", this.onStart.bind(this)); viewer.addEventListener("vr_end", this.onEnd.bind(this)); this.node = new Object3D(); this.node.up.set(0, 0, 1); this.triggered = new Set(); let xr = viewer.renderer.xr; { // lights const light = new PointLight( 0xffffff, 5, 0, 1 ); light.position.set(0, 2, 0); this.viewer.sceneVR.add(light); } this.menu = null; const controllerModelFactory = new XRControllerModelFactory(); let sg = new SphereGeometry(1, 32, 32); let sm = new MeshNormalMaterial(); { // setup primary controller let controller = xr.getController(0); let grip = xr.getControllerGrip(0); grip.name = "grip(0)"; // ADD CONTROLLERMODEL grip.add( controllerModelFactory.createControllerModel( grip ) ); this.viewer.sceneVR.add(grip); // ADD SPHERE let sphere = new Mesh(sg, sm); sphere.scale.set(0.005, 0.005, 0.005); controller.add(sphere); controller.visible = true; this.viewer.sceneVR.add(controller); { // ADD LINE let lineGeometry = new LineGeometry(); lineGeometry.setPositions([ 0, 0, -0.15, 0, 0, 0.05, ]); let lineMaterial = new LineMaterial({ color: 0xff0000, linewidth: 2, resolution: new Vector2(1000, 1000), }); const line = new Line2(lineGeometry, lineMaterial); controller.add(line); } controller.addEventListener( 'connected', function ( event ) { const xrInputSource = event.data; controller.inputSource = xrInputSource; // initInfo(controller); }); controller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller);}); controller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller);}); this.cPrimary = controller; } { // setup secondary controller let controller = xr.getController(1); let grip = xr.getControllerGrip(1); // ADD CONTROLLER MODEL let model = controllerModelFactory.createControllerModel( grip ); grip.add(model); this.viewer.sceneVR.add( grip ); // ADD SPHERE let sphere = new Mesh(sg, sm); sphere.scale.set(0.005, 0.005, 0.005); controller.add(sphere); controller.visible = true; this.viewer.sceneVR.add(controller); { // ADD LINE let lineGeometry = new LineGeometry(); lineGeometry.setPositions([ 0, 0, -0.15, 0, 0, 0.05, ]); let lineMaterial = new LineMaterial({ color: 0xff0000, linewidth: 2, resolution: new Vector2(1000, 1000), }); const line = new Line2(lineGeometry, lineMaterial); controller.add(line); } controller.addEventListener( 'connected', (event) => { const xrInputSource = event.data; controller.inputSource = xrInputSource; this.initMenu(controller); }); controller.addEventListener( 'selectstart', () => {this.onTriggerStart(controller);}); controller.addEventListener( 'selectend', () => {this.onTriggerEnd(controller);}); this.cSecondary = controller; } this.mode_fly = new FlyMode(); this.mode_translate = new TranslationMode(); this.mode_rotScale = new RotScaleMode(); this.setMode(this.mode_fly); } createSlider(label, min, max){ let sg = new SphereGeometry(1, 8, 8); let cg = new CylinderGeometry(1, 1, 1, 8); let matHandle = new MeshBasicMaterial({color: 0xff0000}); let matScale = new MeshBasicMaterial({color: 0xff4444}); let matValue = new MeshNormalMaterial(); let node = new Object3D("slider"); let nLabel = new Potree.TextSprite(`${label}: 0`); let nMax = new Mesh(sg, matHandle); let nMin = new Mesh(sg, matHandle); let nValue = new Mesh(sg, matValue); let nScale = new Mesh(cg, matScale); nLabel.scale.set(0.2, 0.2, 0.2); nLabel.position.set(0, 0.35, 0); nMax.scale.set(0.02, 0.02, 0.02); nMax.position.set(0, 0.25, 0); nMin.scale.set(0.02, 0.02, 0.02); nMin.position.set(0, -0.25, 0); nValue.scale.set(0.02, 0.02, 0.02); nValue.position.set(0, 0, 0); nScale.scale.set(0.005, 0.5, 0.005); node.add(nLabel); node.add(nMax); node.add(nMin); node.add(nValue); node.add(nScale); return node; } createInfo(){ let texture = new TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`); let plane = new PlaneBufferGeometry(1, 1, 1, 1); let infoMaterial = new MeshBasicMaterial({map: texture}); let infoNode = new Mesh(plane, infoMaterial); return infoNode; } initMenu(controller){ if(this.menu){ return; } let node = new Object3D("vr menu"); // let nSlider = this.createSlider("speed", 0, 1); // let nInfo = this.createInfo(); // // node.add(nSlider); // node.add(nInfo); // { // node.rotation.set(-1.5, 0, 0) // node.scale.set(0.3, 0.3, 0.3); // node.position.set(-0.2, -0.002, -0.1) // // nInfo.position.set(0.5, 0, 0); // nInfo.scale.set(0.8, 0.6, 0); // // controller.add(node); // } // node.position.set(-0.3, 1.2, 0.2); // node.scale.set(0.3, 0.2, 0.3); // node.lookAt(new THREE.Vector3(0, 1.5, 0.1)); // this.viewer.sceneVR.add(node); this.menu = node; // window.vrSlider = nSlider; window.vrMenu = node; } toScene(vec){ let camVR = this.getCamera(); let mat = camVR.matrixWorld; let result = vec.clone().applyMatrix4(mat); return result; } toVR(vec){ let camVR = this.getCamera(); let mat = camVR.matrixWorld.clone(); mat.invert(); let result = vec.clone().applyMatrix4(mat); return result; } setMode(mode){ if(this.mode === mode){ return; } if(this.mode){ this.mode.end(this); } for(let controller of [this.cPrimary, this.cSecondary]){ let start = { position: controller.position.clone(), rotation: controller.rotation.clone(), }; controller.start = start; } this.mode = mode; this.mode.start(this); } onTriggerStart(controller){ this.triggered.add(controller); if(this.triggered.size === 0){ this.setMode(this.mode_fly); }else if(this.triggered.size === 1){ this.setMode(this.mode_translate); }else if(this.triggered.size === 2){ this.setMode(this.mode_rotScale); } } onTriggerEnd(controller){ this.triggered.delete(controller); if(this.triggered.size === 0){ this.setMode(this.mode_fly); }else if(this.triggered.size === 1){ this.setMode(this.mode_translate); }else if(this.triggered.size === 2){ this.setMode(this.mode_rotScale); } } onStart(){ let position = this.viewer.scene.view.position.clone(); let direction = this.viewer.scene.view.direction; direction.multiplyScalar(-1); let target = position.clone().add(direction); target.z = position.z; let scale = this.viewer.getMoveSpeed(); this.node.position.copy(position); this.node.lookAt(target); this.node.scale.set(scale, scale, scale); this.node.updateMatrix(); this.node.updateMatrixWorld(); } onEnd(){ } setScene(scene){ this.scene = scene; } getCamera(){ let reference = this.viewer.scene.getActiveCamera(); let camera = new PerspectiveCamera(); // let scale = this.node.scale.x; let scale = this.viewer.getMoveSpeed(); //camera.near = 0.01 / scale; camera.near = 0.1; camera.far = 1000; // camera.near = reference.near / scale; // camera.far = reference.far / scale; camera.up.set(0, 0, 1); camera.lookAt(new Vector3(0, -1, 0)); camera.updateMatrix(); camera.updateMatrixWorld(); camera.position.copy(this.node.position); camera.rotation.copy(this.node.rotation); camera.scale.set(scale, scale, scale); camera.updateMatrix(); camera.updateMatrixWorld(); camera.matrixAutoUpdate = false; camera.parent = camera; return camera; } update(delta){ // if(this.mode === this.mode_fly){ // let ray = new THREE.Ray(origin, direction); // for(let object of this.selectables){ // if(object.intersectsRay(ray)){ // object.onHit(ray); // } // } // } this.mode.update(this, delta); } }; // Adapted from three.js VRButton class VRButton { constructor(){ this.onStartListeners = []; this.onEndListeners = []; this.element = null; } onStart(callback){ this.onStartListeners.push(callback); } onEnd(callback){ this.onEndListeners.push(callback); } static async createButton( renderer, options ) { if ( options ) { console.error( 'THREE.VRButton: The "options" parameter has been removed. Please set the reference space type via renderer.xr.setReferenceSpaceType() instead.' ); } const button = new VRButton(); const element = document.createElement( 'button' ); button.element = element; function setEnter(){ button.element.innerHTML = `
      ENTER
      VR
      `; } function setExit(){ button.element.innerHTML = `
      EXIT
      VR
      `; } function showEnterVR( /*device*/ ) { let currentSession = null; function onSessionStarted( session ) { session.addEventListener( 'end', onSessionEnded ); for(let listener of button.onStartListeners){ listener(); } renderer.xr.setSession( session ); setExit(); currentSession = session; } function onSessionEnded( /*event*/ ) { currentSession.removeEventListener( 'end', onSessionEnded ); for(let listener of button.onEndListeners){ listener(); } setEnter(); currentSession = null; } // button.element.style.display = ''; button.element.style.cursor = 'pointer'; setEnter(); button.element.onmouseenter = function () { button.element.style.opacity = '1.0'; }; button.element.onmouseleave = function () { button.element.style.opacity = '0.7'; }; button.element.onclick = function () { if ( currentSession === null ) { // WebXR's requestReferenceSpace only works if the corresponding feature // was requested at session creation time. For simplicity, just ask for // the interesting ones as optional features, but be aware that the // requestReferenceSpace call will fail if it turns out to be unavailable. // ('local' is always available for immersive sessions and doesn't need to // be requested separately.) const sessionInit = { optionalFeatures: [ 'local-floor', 'bounded-floor', 'hand-tracking' ] }; navigator.xr.requestSession( 'immersive-vr', sessionInit ).then( onSessionStarted ); } else { currentSession.end(); } }; } function stylizeElement( element ) { element.style.position = 'absolute'; element.style.bottom = '20px'; element.style.padding = '12px 6px'; element.style.border = '1px solid #fff'; element.style.borderRadius = '4px'; element.style.background = 'rgba(0,0,0,0.1)'; element.style.color = '#fff'; element.style.font = 'normal 13px sans-serif'; element.style.textAlign = 'center'; element.style.opacity = '0.7'; element.style.outline = 'none'; element.style.zIndex = '999'; } if ( 'xr' in navigator ) { button.element.id = 'VRButton'; button.element.style.display = 'none'; stylizeElement( button.element ); let supported = await navigator.xr.isSessionSupported( 'immersive-vr' ); if(supported){ showEnterVR(); return button; }else { return null; } } else { if ( window.isSecureContext === false ) { console.log("WEBXR NEEDS HTTPS"); } else { console.log("WEBXR not available"); } return null; } } } class Viewer extends EventDispatcher{ constructor(domElement, args = {}){ super(); this.renderArea = domElement; this.guiLoaded = false; this.guiLoadTasks = []; this.onVrListeners = []; this.messages = []; this.elMessages = $(`
      `); $(domElement).append(this.elMessages); try{ { // generate missing dom hierarchy if ($(domElement).find('#potree_map').length === 0) { let potreeMap = $(` `); $(domElement).append(potreeMap); } if ($(domElement).find('#potree_description').length === 0) { let potreeDescription = $(`
      `); $(domElement).append(potreeDescription); } if ($(domElement).find('#potree_annotations').length === 0) { let potreeAnnotationContainer = $(`
      `); $(domElement).append(potreeAnnotationContainer); } if ($(domElement).find('#potree_quick_buttons').length === 0) { let potreeMap = $(`
      `); // { // let imgMenuToggle = document.createElement('img'); // imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; // imgMenuToggle.onclick = this.toggleSidebar; // // imgMenuToggle.classList.add('potree_menu_toggle'); // potreeMap.append(imgMenuToggle); // } // { // let imgMenuToggle = document.createElement('img'); // imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; // imgMenuToggle.onclick = this.toggleSidebar; // // imgMenuToggle.classList.add('potree_menu_toggle'); // potreeMap.append(imgMenuToggle); // } // { // let imgMenuToggle = document.createElement('img'); // imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; // imgMenuToggle.onclick = this.toggleSidebar; // // imgMenuToggle.classList.add('potree_menu_toggle'); // potreeMap.append(imgMenuToggle); // } $(domElement).append(potreeMap); } } this.pointCloudLoadedCallback = args.onPointCloudLoaded || function () {}; // if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) { // defaultSettings.navigation = "Orbit"; // } this.server = null; this.fov = 60; this.isFlipYZ = false; this.useDEMCollisions = false; this.generateDEM = false; this.minNodeSize = 30; this.edlStrength = 1.0; this.edlRadius = 1.4; this.edlOpacity = 1.0; this.useEDL = false; this.description = ""; this.classifications = ClassificationScheme.DEFAULT; this.moveSpeed = 10; this.lengthUnit = LengthUnits.METER; this.lengthUnitDisplay = LengthUnits.METER; this.showBoundingBox = false; this.showAnnotations = true; this.freeze = false; this.clipTask = ClipTask.HIGHLIGHT; this.clipMethod = ClipMethod.INSIDE_ANY; this.elevationGradientRepeat = ElevationGradientRepeat.CLAMP; this.filterReturnNumberRange = [0, 7]; this.filterNumberOfReturnsRange = [0, 7]; this.filterGPSTimeRange = [-Infinity, Infinity]; this.filterPointSourceIDRange = [0, 65535]; this.potreeRenderer = null; this.edlRenderer = null; this.renderer = null; this.pRenderer = null; this.scene = null; this.sceneVR = null; this.overlay = null; this.overlayCamera = null; this.inputHandler = null; this.controls = null; this.clippingTool = null; this.transformationTool = null; this.navigationCube = null; this.compass = null; this.skybox = null; this.clock = new Clock(); this.background = null; this.initThree(); if(args.noDragAndDrop){ }else { this.initDragAndDrop(); } if(typeof Stats !== "undefined"){ this.stats = new Stats(); this.stats.showPanel( 0 ); // 0: fps, 1: ms, 2: mb, 3+: custom document.body.appendChild( this.stats.dom ); } { let canvas = this.renderer.domElement; canvas.addEventListener("webglcontextlost", (e) => { console.log(e); this.postMessage("WebGL context lost. \u2639"); let gl = this.renderer.getContext(); let error = gl.getError(); console.log(error); }, false); } { this.overlay = new Scene(); this.overlayCamera = new OrthographicCamera( 0, 1, 1, 0, -1000, 1000 ); } this.pRenderer = new Renderer(this.renderer); { let near = 2.5; let far = 10.0; let fov = 90; this.shadowTestCam = new PerspectiveCamera(90, 1, near, far); this.shadowTestCam.position.set(3.50, -2.80, 8.561); this.shadowTestCam.lookAt(new Vector3(0, 0, 4.87)); } let scene = new Scene$1(this.renderer); { // create VR scene this.sceneVR = new Scene(); // let texture = new THREE.TextureLoader().load(`${Potree.resourcePath}/images/vr_controller_help.jpg`); // let plane = new THREE.PlaneBufferGeometry(1, 1, 1, 1); // let infoMaterial = new THREE.MeshBasicMaterial({map: texture}); // let infoNode = new THREE.Mesh(plane, infoMaterial); // infoNode.position.set(-0.5, 1, 0); // infoNode.scale.set(0.4, 0.3, 1); // infoNode.lookAt(0, 1, 0) // this.sceneVR.add(infoNode); // window.infoNode = infoNode; } this.setScene(scene); { this.inputHandler = new InputHandler(this); this.inputHandler.setScene(this.scene); this.clippingTool = new ClippingTool(this); this.transformationTool = new TransformationTool(this); this.navigationCube = new NavigationCube(this); this.navigationCube.visible = false; this.compass = new Compass(this); this.createControls(); this.clippingTool.setScene(this.scene); let onPointcloudAdded = (e) => { if (this.scene.pointclouds.length === 1) { let speed = e.pointcloud.boundingBox.getSize(new Vector3()).length(); speed = speed / 5; this.setMoveSpeed(speed); } }; let onVolumeRemoved = (e) => { this.inputHandler.deselect(e.volume); }; this.addEventListener('scene_changed', (e) => { this.inputHandler.setScene(e.scene); this.clippingTool.setScene(this.scene); if(!e.scene.hasEventListener("pointcloud_added", onPointcloudAdded)){ e.scene.addEventListener("pointcloud_added", onPointcloudAdded); } if(!e.scene.hasEventListener("volume_removed", onPointcloudAdded)){ e.scene.addEventListener("volume_removed", onVolumeRemoved); } }); this.scene.addEventListener("volume_removed", onVolumeRemoved); this.scene.addEventListener('pointcloud_added', onPointcloudAdded); } { // set defaults this.setFOV(60); this.setEDLEnabled(false); this.setEDLRadius(1.4); this.setEDLStrength(0.4); this.setEDLOpacity(1.0); this.setClipTask(ClipTask.HIGHLIGHT); this.setClipMethod(ClipMethod.INSIDE_ANY); this.setPointBudget(1*1000*1000); this.setShowBoundingBox(false); this.setFreeze(false); this.setControls(this.orbitControls); this.setBackground('gradient'); this.scaleFactor = 1; this.loadSettingsFromURL(); } // start rendering! //if(args.useDefaultRenderLoop === undefined || args.useDefaultRenderLoop === true){ //requestAnimationFrame(this.loop.bind(this)); //} this.renderer.setAnimationLoop(this.loop.bind(this)); this.loadGUI = this.loadGUI.bind(this); this.annotationTool = new AnnotationTool(this); this.measuringTool = new MeasuringTool(this); this.profileTool = new ProfileTool(this); this.volumeTool = new VolumeTool(this); }catch(e){ this.onCrash(e); } } onCrash(error){ $(this.renderArea).empty(); if ($(this.renderArea).find('#potree_failpage').length === 0) { let elFailPage = $(`

      Potree Encountered An Error

      This may happen if your browser or graphics card is not supported.
      We recommend to use Chrome or Firefox.

      Please also visit webglreport.com and check whether your system supports WebGL.

      If you are already using one of the recommended browsers and WebGL is enabled, consider filing an issue report at github,
      including your operating system, graphics card, browser and browser version, as well as the error message below.
      Please do not report errors on unsupported browsers.

      
      				
      			
      `); let elErrorMessage = elFailPage.find('#potree_error_console'); elErrorMessage.html(error.stack); $(this.renderArea).append(elFailPage); } throw error; } // ------------------------------------------------------------------------------------ // Viewer API // ------------------------------------------------------------------------------------ setScene (scene) { if (scene === this.scene) { return; } let oldScene = this.scene; this.scene = scene; this.dispatchEvent({ type: 'scene_changed', oldScene: oldScene, scene: scene }); { // Annotations $('.annotation').detach(); // for(let annotation of this.scene.annotations){ // this.renderArea.appendChild(annotation.domElement[0]); // } this.scene.annotations.traverse(annotation => { this.renderArea.appendChild(annotation.domElement[0]); }); if (!this.onAnnotationAdded) { this.onAnnotationAdded = e => { // console.log("annotation added: " + e.annotation.title); e.annotation.traverse(node => { $("#potree_annotation_container").append(node.domElement); //this.renderArea.appendChild(node.domElement[0]); node.scene = this.scene; }); }; } if (oldScene) { oldScene.annotations.removeEventListener('annotation_added', this.onAnnotationAdded); } this.scene.annotations.addEventListener('annotation_added', this.onAnnotationAdded); } }; setControls(controls){ if (controls !== this.controls) { if (this.controls) { this.controls.enabled = false; this.inputHandler.removeInputListener(this.controls); } this.controls = controls; this.controls.enabled = true; this.inputHandler.addInputListener(this.controls); } } getControls () { if(this.renderer.xr.isPresenting){ return this.vrControls; }else { return this.controls; } } getMinNodeSize () { return this.minNodeSize; }; setMinNodeSize (value) { if (this.minNodeSize !== value) { this.minNodeSize = value; this.dispatchEvent({'type': 'minnodesize_changed', 'viewer': this}); } }; getBackground () { return this.background; } setBackground(bg){ if (this.background === bg) { return; } if(bg === "skybox"){ this.skybox = Utils.loadSkybox(new URL(Potree.resourcePath + '/textures/skybox2/').href); } this.background = bg; this.dispatchEvent({'type': 'background_changed', 'viewer': this}); } setDescription (value) { this.description = value; $('#potree_description').html(value); //$('#potree_description').text(value); } getDescription(){ return this.description; } setShowBoundingBox (value) { if (this.showBoundingBox !== value) { this.showBoundingBox = value; this.dispatchEvent({'type': 'show_boundingbox_changed', 'viewer': this}); } }; getShowBoundingBox () { return this.showBoundingBox; }; setMoveSpeed (value) { if (this.moveSpeed !== value) { this.moveSpeed = value; this.dispatchEvent({'type': 'move_speed_changed', 'viewer': this, 'speed': value}); } }; getMoveSpeed () { return this.moveSpeed; }; setWeightClassification (w) { for (let i = 0; i < this.scene.pointclouds.length; i++) { this.scene.pointclouds[i].material.weightClassification = w; this.dispatchEvent({'type': 'attribute_weights_changed' + i, 'viewer': this}); } }; setFreeze (value) { value = Boolean(value); if (this.freeze !== value) { this.freeze = value; this.dispatchEvent({'type': 'freeze_changed', 'viewer': this}); } }; getFreeze () { return this.freeze; }; getClipTask(){ return this.clipTask; } getClipMethod(){ return this.clipMethod; } setClipTask(value){ if(this.clipTask !== value){ this.clipTask = value; this.dispatchEvent({ type: "cliptask_changed", viewer: this}); } } setClipMethod(value){ if(this.clipMethod !== value){ this.clipMethod = value; this.dispatchEvent({ type: "clipmethod_changed", viewer: this}); } } setElevationGradientRepeat(value){ if(this.elevationGradientRepeat !== value){ this.elevationGradientRepeat = value; this.dispatchEvent({ type: "elevation_gradient_repeat_changed", viewer: this}); } } setPointBudget (value) { if (Potree.pointBudget !== value) { Potree.pointBudget = parseInt(value); this.dispatchEvent({'type': 'point_budget_changed', 'viewer': this}); } }; getPointBudget () { return Potree.pointBudget; }; setShowAnnotations (value) { if (this.showAnnotations !== value) { this.showAnnotations = value; this.dispatchEvent({'type': 'show_annotations_changed', 'viewer': this}); } } getShowAnnotations () { return this.showAnnotations; } setDEMCollisionsEnabled(value){ if(this.useDEMCollisions !== value){ this.useDEMCollisions = value; this.dispatchEvent({'type': 'use_demcollisions_changed', 'viewer': this}); }; }; getDEMCollisionsEnabled () { return this.useDEMCollisions; }; setEDLEnabled (value) { value = Boolean(value) && Features.SHADER_EDL.isSupported(); if (this.useEDL !== value) { this.useEDL = value; this.dispatchEvent({'type': 'use_edl_changed', 'viewer': this}); } }; getEDLEnabled () { return this.useEDL; }; setEDLRadius (value) { if (this.edlRadius !== value) { this.edlRadius = value; this.dispatchEvent({'type': 'edl_radius_changed', 'viewer': this}); } }; getEDLRadius () { return this.edlRadius; }; setEDLStrength (value) { if (this.edlStrength !== value) { this.edlStrength = value; this.dispatchEvent({'type': 'edl_strength_changed', 'viewer': this}); } }; getEDLStrength () { return this.edlStrength; }; setEDLOpacity (value) { if (this.edlOpacity !== value) { this.edlOpacity = value; this.dispatchEvent({'type': 'edl_opacity_changed', 'viewer': this}); } }; getEDLOpacity () { return this.edlOpacity; }; setFOV (value) { if (this.fov !== value) { this.fov = value; this.dispatchEvent({'type': 'fov_changed', 'viewer': this}); } }; getFOV () { return this.fov; }; disableAnnotations () { this.scene.annotations.traverse(annotation => { annotation.domElement.css('pointer-events', 'none'); // return annotation.visible; }); }; enableAnnotations () { this.scene.annotations.traverse(annotation => { annotation.domElement.css('pointer-events', 'auto'); // return annotation.visible; }); } setClassifications(classifications){ this.classifications = classifications; this.dispatchEvent({'type': 'classifications_changed', 'viewer': this}); } setClassificationVisibility (key, value) { if (!this.classifications[key]) { this.classifications[key] = {visible: value, name: 'no name'}; this.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this}); } else if (this.classifications[key].visible !== value) { this.classifications[key].visible = value; this.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this}); } } toggleAllClassificationsVisibility(){ let numVisible = 0; let numItems = 0; for(const key of Object.keys(this.classifications)){ if(this.classifications[key].visible){ numVisible++; } numItems++; } let visible = true; if(numVisible === numItems){ visible = false; } let somethingChanged = false; for(const key of Object.keys(this.classifications)){ if(this.classifications[key].visible !== visible){ this.classifications[key].visible = visible; somethingChanged = true; } } if(somethingChanged){ this.dispatchEvent({'type': 'classification_visibility_changed', 'viewer': this}); } } setFilterReturnNumberRange(from, to){ this.filterReturnNumberRange = [from, to]; this.dispatchEvent({'type': 'filter_return_number_range_changed', 'viewer': this}); } setFilterNumberOfReturnsRange(from, to){ this.filterNumberOfReturnsRange = [from, to]; this.dispatchEvent({'type': 'filter_number_of_returns_range_changed', 'viewer': this}); } setFilterGPSTimeRange(from, to){ this.filterGPSTimeRange = [from, to]; this.dispatchEvent({'type': 'filter_gps_time_range_changed', 'viewer': this}); } setFilterPointSourceIDRange(from, to){ this.filterPointSourceIDRange = [from, to]; this.dispatchEvent({'type': 'filter_point_source_id_range_changed', 'viewer': this}); } setLengthUnit (value) { switch (value) { case 'm': this.lengthUnit = LengthUnits.METER; this.lengthUnitDisplay = LengthUnits.METER; break; case 'ft': this.lengthUnit = LengthUnits.FEET; this.lengthUnitDisplay = LengthUnits.FEET; break; case 'in': this.lengthUnit = LengthUnits.INCH; this.lengthUnitDisplay = LengthUnits.INCH; break; } this.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: value}); }; setLengthUnitAndDisplayUnit(lengthUnitValue, lengthUnitDisplayValue) { switch (lengthUnitValue) { case 'm': this.lengthUnit = LengthUnits.METER; break; case 'ft': this.lengthUnit = LengthUnits.FEET; break; case 'in': this.lengthUnit = LengthUnits.INCH; break; } switch (lengthUnitDisplayValue) { case 'm': this.lengthUnitDisplay = LengthUnits.METER; break; case 'ft': this.lengthUnitDisplay = LengthUnits.FEET; break; case 'in': this.lengthUnitDisplay = LengthUnits.INCH; break; } this.dispatchEvent({ 'type': 'length_unit_changed', 'viewer': this, value: lengthUnitValue }); }; zoomTo(node, factor, animationDuration = 0){ let view = this.scene.view; let camera = this.scene.cameraP.clone(); camera.rotation.copy(this.scene.cameraP.rotation); camera.rotation.order = "ZXY"; camera.rotation.x = Math.PI / 2 + view.pitch; camera.rotation.z = view.yaw; camera.updateMatrix(); camera.updateMatrixWorld(); camera.zoomTo(node, factor); let bs; if (node.boundingSphere) { bs = node.boundingSphere; } else if (node.geometry && node.geometry.boundingSphere) { bs = node.geometry.boundingSphere; } else { bs = node.boundingBox.getBoundingSphere(new Sphere()); } bs = bs.clone().applyMatrix4(node.matrixWorld); let startPosition = view.position.clone(); let endPosition = camera.position.clone(); let startTarget = view.getPivot(); let endTarget = bs.center; let startRadius = view.radius; let endRadius = endPosition.distanceTo(endTarget); let easing = TWEEN.Easing.Quartic.Out; { // animate camera position let pos = startPosition.clone(); let tween = new TWEEN.Tween(pos).to(endPosition, animationDuration); tween.easing(easing); tween.onUpdate(() => { view.position.copy(pos); }); tween.start(); } { // animate camera target let target = startTarget.clone(); let tween = new TWEEN.Tween(target).to(endTarget, animationDuration); tween.easing(easing); tween.onUpdate(() => { view.lookAt(target); }); tween.onComplete(() => { view.lookAt(target); this.dispatchEvent({type: 'focusing_finished', target: this}); }); this.dispatchEvent({type: 'focusing_started', target: this}); tween.start(); } }; moveToGpsTimeVicinity(time){ const result = Potree.Utils.findClosestGpsTime(time, viewer); const box = result.node.pointcloud.deepestNodeAt(result.position).getBoundingBox(); const diameter = box.min.distanceTo(box.max); const camera = this.scene.getActiveCamera(); const offset = camera.getWorldDirection(new Vector3()).multiplyScalar(diameter); const newCamPos = result.position.clone().sub(offset); this.scene.view.position.copy(newCamPos); this.scene.view.lookAt(result.position); } showAbout () { $(function () { $('#about-panel').dialog(); }); }; getBoundingBox (pointclouds) { return this.scene.getBoundingBox(pointclouds); }; getGpsTimeExtent(){ const range = [Infinity, -Infinity]; for(const pointcloud of this.scene.pointclouds){ const attributes = pointcloud.pcoGeometry.pointAttributes.attributes; const aGpsTime = attributes.find(a => a.name === "gps-time"); if(aGpsTime){ range[0] = Math.min(range[0], aGpsTime.range[0]); range[1] = Math.max(range[1], aGpsTime.range[1]); } } return range; } fitToScreen (factor = 1, animationDuration = 0) { let box = this.getBoundingBox(this.scene.pointclouds); let node = new Object3D(); node.boundingBox = box; this.zoomTo(node, factor, animationDuration); this.controls.stop(); }; toggleNavigationCube() { this.navigationCube.visible = !this.navigationCube.visible; } setView(view) { if(!view) return; switch(view) { case "F": this.setFrontView(); break; case "B": this.setBackView(); break; case "L": this.setLeftView(); break; case "R": this.setRightView(); break; case "U": this.setTopView(); break; case "D": this.setBottomView(); break; } } setTopView(){ this.scene.view.yaw = 0; this.scene.view.pitch = -Math.PI / 2; this.fitToScreen(); }; setBottomView(){ this.scene.view.yaw = -Math.PI; this.scene.view.pitch = Math.PI / 2; this.fitToScreen(); }; setFrontView(){ this.scene.view.yaw = 0; this.scene.view.pitch = 0; this.fitToScreen(); }; setBackView(){ this.scene.view.yaw = Math.PI; this.scene.view.pitch = 0; this.fitToScreen(); }; setLeftView(){ this.scene.view.yaw = -Math.PI / 2; this.scene.view.pitch = 0; this.fitToScreen(); }; setRightView () { this.scene.view.yaw = Math.PI / 2; this.scene.view.pitch = 0; this.fitToScreen(); }; flipYZ () { this.isFlipYZ = !this.isFlipYZ; // TODO flipyz console.log('TODO'); } setCameraMode(mode){ this.scene.cameraMode = mode; for(let pointcloud of this.scene.pointclouds) { pointcloud.material.useOrthographicCamera = mode == CameraMode.ORTHOGRAPHIC; } } getProjection(){ const pointcloud = this.scene.pointclouds[0]; if(pointcloud){ return pointcloud.projection; }else { return null; } } async loadProject(url){ const response = await fetch(url); const text = await response.text(); const json = lib.parse(text); // const json = JSON.parse(text); if(json.type === "Potree"){ Potree.loadProject(viewer, json); } //Potree.loadProject(this, url); } saveProject(){ return Potree.saveProject(this); } loadSettingsFromURL(){ if(Utils.getParameterByName("pointSize")){ this.setPointSize(parseFloat(Utils.getParameterByName("pointSize"))); } if(Utils.getParameterByName("FOV")){ this.setFOV(parseFloat(Utils.getParameterByName("FOV"))); } if(Utils.getParameterByName("opacity")){ this.setOpacity(parseFloat(Utils.getParameterByName("opacity"))); } if(Utils.getParameterByName("edlEnabled")){ let enabled = Utils.getParameterByName("edlEnabled") === "true"; this.setEDLEnabled(enabled); } if (Utils.getParameterByName('edlRadius')) { this.setEDLRadius(parseFloat(Utils.getParameterByName('edlRadius'))); } if (Utils.getParameterByName('edlStrength')) { this.setEDLStrength(parseFloat(Utils.getParameterByName('edlStrength'))); } if (Utils.getParameterByName('pointBudget')) { this.setPointBudget(parseFloat(Utils.getParameterByName('pointBudget'))); } if (Utils.getParameterByName('showBoundingBox')) { let enabled = Utils.getParameterByName('showBoundingBox') === 'true'; if (enabled) { this.setShowBoundingBox(true); } else { this.setShowBoundingBox(false); } } if (Utils.getParameterByName('material')) { let material = Utils.getParameterByName('material'); this.setMaterial(material); } if (Utils.getParameterByName('pointSizing')) { let sizing = Utils.getParameterByName('pointSizing'); this.setPointSizing(sizing); } if (Utils.getParameterByName('quality')) { let quality = Utils.getParameterByName('quality'); this.setQuality(quality); } if (Utils.getParameterByName('position')) { let value = Utils.getParameterByName('position'); value = value.replace('[', '').replace(']', ''); let tokens = value.split(';'); let x = parseFloat(tokens[0]); let y = parseFloat(tokens[1]); let z = parseFloat(tokens[2]); this.scene.view.position.set(x, y, z); } if (Utils.getParameterByName('target')) { let value = Utils.getParameterByName('target'); value = value.replace('[', '').replace(']', ''); let tokens = value.split(';'); let x = parseFloat(tokens[0]); let y = parseFloat(tokens[1]); let z = parseFloat(tokens[2]); this.scene.view.lookAt(new Vector3(x, y, z)); } if (Utils.getParameterByName('background')) { let value = Utils.getParameterByName('background'); this.setBackground(value); } // if(Utils.getParameterByName("elevationRange")){ // let value = Utils.getParameterByName("elevationRange"); // value = value.replace("[", "").replace("]", ""); // let tokens = value.split(";"); // let x = parseFloat(tokens[0]); // let y = parseFloat(tokens[1]); // // this.setElevationRange(x, y); // //this.scene.view.target.set(x, y, z); // } }; // ------------------------------------------------------------------------------------ // Viewer Internals // ------------------------------------------------------------------------------------ createControls () { { // create FIRST PERSON CONTROLS this.fpControls = new FirstPersonControls(this); this.fpControls.enabled = false; this.fpControls.addEventListener('start', this.disableAnnotations.bind(this)); this.fpControls.addEventListener('end', this.enableAnnotations.bind(this)); } // { // create GEO CONTROLS // this.geoControls = new GeoControls(this.scene.camera, this.renderer.domElement); // this.geoControls.enabled = false; // this.geoControls.addEventListener("start", this.disableAnnotations.bind(this)); // this.geoControls.addEventListener("end", this.enableAnnotations.bind(this)); // this.geoControls.addEventListener("move_speed_changed", (event) => { // this.setMoveSpeed(this.geoControls.moveSpeed); // }); // } { // create ORBIT CONTROLS this.orbitControls = new OrbitControls(this); this.orbitControls.enabled = false; this.orbitControls.addEventListener('start', this.disableAnnotations.bind(this)); this.orbitControls.addEventListener('end', this.enableAnnotations.bind(this)); } { // create EARTH CONTROLS this.earthControls = new EarthControls(this); this.earthControls.enabled = false; this.earthControls.addEventListener('start', this.disableAnnotations.bind(this)); this.earthControls.addEventListener('end', this.enableAnnotations.bind(this)); } { // create DEVICE ORIENTATION CONTROLS this.deviceControls = new DeviceOrientationControls(this); this.deviceControls.enabled = false; this.deviceControls.addEventListener('start', this.disableAnnotations.bind(this)); this.deviceControls.addEventListener('end', this.enableAnnotations.bind(this)); } { // create VR CONTROLS this.vrControls = new VRControls(this); this.vrControls.enabled = false; this.vrControls.addEventListener('start', this.disableAnnotations.bind(this)); this.vrControls.addEventListener('end', this.enableAnnotations.bind(this)); } }; toggleSidebar () { let renderArea = $('#potree_render_area'); let isVisible = renderArea.css('left') !== '0px'; if (isVisible) { renderArea.css('left', '0px'); } else { renderArea.css('left', '300px'); } }; toggleMap () { // let map = $('#potree_map'); // map.toggle(100); if (this.mapView) { this.mapView.toggle(); } }; onGUILoaded(callback){ if(this.guiLoaded){ callback(); }else { this.guiLoadTasks.push(callback); } } promiseGuiLoaded(){ return new Promise( resolve => { if(this.guiLoaded){ resolve(); }else { this.guiLoadTasks.push(resolve); } }); } loadGUI(callback){ if(callback){ this.onGUILoaded(callback); } let viewer = this; let sidebarContainer = $('#potree_sidebar_container'); sidebarContainer.load(new URL(Potree.scriptPath + '/sidebar.html').href, () => { sidebarContainer.css('width', '300px'); sidebarContainer.css('height', '100%'); let imgMenuToggle = document.createElement('img'); imgMenuToggle.src = new URL(Potree.resourcePath + '/icons/menu_button.svg').href; imgMenuToggle.onclick = this.toggleSidebar; imgMenuToggle.classList.add('potree_menu_toggle'); let imgMapToggle = document.createElement('img'); imgMapToggle.src = new URL(Potree.resourcePath + '/icons/map_icon.png').href; imgMapToggle.style.display = 'none'; imgMapToggle.onclick = e => { this.toggleMap(); }; imgMapToggle.id = 'potree_map_toggle'; let elButtons = $("#potree_quick_buttons").get(0); elButtons.append(imgMenuToggle); elButtons.append(imgMapToggle); VRButton.createButton(this.renderer).then(vrButton => { if(vrButton == null){ console.log("VR not supported or active."); return; } this.renderer.xr.enabled = true; let element = vrButton.element; element.style.position = ""; element.style.bottom = ""; element.style.left = ""; element.style.margin = "4px"; element.style.fontSize = "100%"; element.style.width = "2.5em"; element.style.height = "2.5em"; element.style.padding = "0"; element.style.textShadow = "black 2px 2px 2px"; element.style.display = "block"; elButtons.append(element); vrButton.onStart(() => { this.dispatchEvent({type: "vr_start"}); }); vrButton.onEnd(() => { this.dispatchEvent({type: "vr_end"}); }); }); this.mapView = new MapView(this); this.mapView.init(); i18n.init({ lng: 'en', resGetPath: Potree.resourcePath + '/lang/__lng__/__ns__.json', preload: ['en', 'fr', 'de', 'jp', 'se', 'es', 'zh', 'it'], getAsync: true, debug: false }, function (t) { // Start translation once everything is loaded $('body').i18n(); }); $(() => { //initSidebar(this); let sidebar = new Sidebar(this); sidebar.init(); this.sidebar = sidebar; //if (callback) { // $(callback); //} let elProfile = $('
      ').load(new URL(Potree.scriptPath + '/profile.html').href, () => { $(document.body).append(elProfile.children()); this.profileWindow = new ProfileWindow(this); this.profileWindowController = new ProfileWindowController(this); $('#profile_window').draggable({ handle: $('#profile_titlebar'), containment: $(document.body) }); $('#profile_window').resizable({ containment: $(document.body), handles: 'n, e, s, w' }); $(() => { this.guiLoaded = true; for(let task of this.guiLoadTasks){ task(); } }); }); }); }); return this.promiseGuiLoaded(); } setLanguage (lang) { i18n.setLng(lang); $('body').i18n(); } setServer (server) { this.server = server; } initDragAndDrop(){ function allowDrag(e) { e.dataTransfer.dropEffect = 'copy'; e.preventDefault(); } let dropHandler = async (event) => { console.log(event); event.preventDefault(); for(const item of event.dataTransfer.items){ console.log(item); if(item.kind !== "file"){ continue; } const file = item.getAsFile(); const isJson5 = file.name.toLowerCase().endsWith(".json5"); const isGeoPackage = file.name.toLowerCase().endsWith(".gpkg"); if(isJson5){ try{ const text = await file.text(); const json = lib.parse(text); if(json.type === "Potree"){ Potree.loadProject(viewer, json); } }catch(e){ console.error("failed to parse the dropped file as JSON"); console.error(e); } }else if(isGeoPackage){ const hasPointcloud = viewer.scene.pointclouds.length > 0; if(!hasPointcloud){ let msg = "At least one point cloud is needed that specifies the "; msg += "coordinate reference system before loading vector data."; console.error(msg); }else { proj4.defs("WGS84", "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs"); proj4.defs("pointcloud", this.getProjection()); let transform = proj4("WGS84", "pointcloud"); const buffer = await file.arrayBuffer(); const params = { transform: transform, source: file.name, }; const geo = await Potree.GeoPackageLoader.loadBuffer(buffer, params); viewer.scene.addGeopackage(geo); } } } }; $("body")[0].addEventListener("dragenter", allowDrag); $("body")[0].addEventListener("dragover", allowDrag); $("body")[0].addEventListener("drop", dropHandler); } initThree () { console.log(`initializing three.js ${REVISION}`); let width = this.renderArea.clientWidth; let height = this.renderArea.clientHeight; let contextAttributes = { alpha: true, depth: true, stencil: false, antialias: false, //premultipliedAlpha: _premultipliedAlpha, preserveDrawingBuffer: true, powerPreference: "high-performance", }; // let contextAttributes = { // alpha: false, // preserveDrawingBuffer: true, // }; // let contextAttributes = { // alpha: false, // preserveDrawingBuffer: true, // }; let canvas = document.createElement("canvas"); let context = canvas.getContext('webgl', contextAttributes ); this.renderer = new WebGLRenderer({ alpha: true, premultipliedAlpha: false, canvas: canvas, context: context}); this.renderer.sortObjects = false; this.renderer.setSize(width, height); this.renderer.autoClear = false; this.renderArea.appendChild(this.renderer.domElement); this.renderer.domElement.tabIndex = '2222'; this.renderer.domElement.style.position = 'absolute'; this.renderer.domElement.addEventListener('mousedown', () => { this.renderer.domElement.focus(); }); //this.renderer.domElement.focus(); // NOTE: If extension errors occur, pass the string into this.renderer.extensions.get(x) before enabling // enable frag_depth extension for the interpolation shader, if available let gl = this.renderer.getContext(); gl.getExtension('EXT_frag_depth'); gl.getExtension('WEBGL_depth_texture'); gl.getExtension('WEBGL_color_buffer_float'); // Enable explicitly for more portability, EXT_color_buffer_float is the proper name in WebGL 2 if(gl.createVertexArray == null){ let extVAO = gl.getExtension('OES_vertex_array_object'); if(!extVAO){ throw new Error("OES_vertex_array_object extension not supported"); } gl.createVertexArray = extVAO.createVertexArrayOES.bind(extVAO); gl.bindVertexArray = extVAO.bindVertexArrayOES.bind(extVAO); } } updateAnnotations () { if(!this.visibleAnnotations){ this.visibleAnnotations = new Set(); } this.scene.annotations.updateBounds(); this.scene.cameraP.updateMatrixWorld(); this.scene.cameraO.updateMatrixWorld(); let distances = []; let renderAreaSize = this.renderer.getSize(new Vector2()); let viewer = this; let visibleNow = []; this.scene.annotations.traverse(annotation => { if (annotation === this.scene.annotations) { return true; } if (!annotation.visible) { return false; } annotation.scene = this.scene; let element = annotation.domElement; let position = annotation.position.clone(); position.add(annotation.offset); if (!position) { position = annotation.boundingBox.getCenter(new Vector3()); } let distance = viewer.scene.cameraP.position.distanceTo(position); let radius = annotation.boundingBox.getBoundingSphere(new Sphere()).radius; let screenPos = new Vector3(); let screenSize = 0; { // SCREEN POS screenPos.copy(position).project(this.scene.getActiveCamera()); screenPos.x = renderAreaSize.x * (screenPos.x + 1) / 2; screenPos.y = renderAreaSize.y * (1 - (screenPos.y + 1) / 2); // SCREEN SIZE if(viewer.scene.cameraMode == CameraMode.PERSPECTIVE) { let fov = Math.PI * viewer.scene.cameraP.fov / 180; let slope = Math.tan(fov / 2.0); let projFactor = 0.5 * renderAreaSize.y / (slope * distance); screenSize = radius * projFactor; } else { screenSize = Utils.projectedRadiusOrtho(radius, viewer.scene.cameraO.projectionMatrix, renderAreaSize.x, renderAreaSize.y); } } element.css("left", screenPos.x + "px"); element.css("top", screenPos.y + "px"); //element.css("display", "block"); let zIndex = 10000000 - distance * (10000000 / this.scene.cameraP.far); if(annotation.descriptionVisible){ zIndex += 10000000; } element.css("z-index", parseInt(zIndex)); if(annotation.children.length > 0){ let expand = screenSize > annotation.collapseThreshold || annotation.boundingBox.containsPoint(this.scene.getActiveCamera().position); annotation.expand = expand; if (!expand) { //annotation.display = (screenPos.z >= -1 && screenPos.z <= 1); let inFrustum = (screenPos.z >= -1 && screenPos.z <= 1); if(inFrustum){ visibleNow.push(annotation); } } return expand; } else { //annotation.display = (screenPos.z >= -1 && screenPos.z <= 1); let inFrustum = (screenPos.z >= -1 && screenPos.z <= 1); if(inFrustum){ visibleNow.push(annotation); } } }); let notVisibleAnymore = new Set(this.visibleAnnotations); for(let annotation of visibleNow){ annotation.display = true; notVisibleAnymore.delete(annotation); } this.visibleAnnotations = visibleNow; for(let annotation of notVisibleAnymore){ annotation.display = false; } } updateMaterialDefaults(pointcloud){ // PROBLEM STATEMENT: // * [min, max] of intensity, source id, etc. are computed as point clouds are loaded // * the point cloud material won't know the range it should use until some data is loaded // * users can modify the range at runtime, but sensible default ranges should be // applied even if no GUI is present // * display ranges shouldn't suddenly change even if the actual range changes over time. // e.g. the root node has intensity range [1, 478]. One of the descendants increases range to // [0, 2047]. We should not automatically change to the new range because that would result // in sudden and drastic changes of brightness. We should adjust the min/max of the sidebar slider. const material = pointcloud.material; const attIntensity = pointcloud.getAttribute("intensity"); if(attIntensity != null && material.intensityRange[0] === Infinity){ material.intensityRange = [...attIntensity.range]; } // const attIntensity = pointcloud.getAttribute("intensity"); // if(attIntensity && material.intensityRange[0] === Infinity){ // material.intensityRange = [...attIntensity.range]; // } // let attributes = pointcloud.getAttributes(); // for(let attribute of attributes.attributes){ // if(attribute.range){ // let range = [...attribute.range]; // material.computedRange.set(attribute.name, range); // //material.setRange(attribute.name, range); // } // } } update(delta, timestamp){ if(Potree.measureTimings) performance.mark("update-start"); this.dispatchEvent({ type: 'update_start', delta: delta, timestamp: timestamp}); const scene = this.scene; const camera = scene.getActiveCamera(); const visiblePointClouds = this.scene.pointclouds.filter(pc => pc.visible); Potree.pointLoadLimit = Potree.pointBudget * 2; const lTarget = camera.position.clone().add(camera.getWorldDirection(new Vector3()).multiplyScalar(1000)); this.scene.directionalLight.position.copy(camera.position); this.scene.directionalLight.lookAt(lTarget); for (let pointcloud of visiblePointClouds) { pointcloud.showBoundingBox = this.showBoundingBox; pointcloud.generateDEM = this.generateDEM; pointcloud.minimumNodePixelSize = this.minNodeSize; let material = pointcloud.material; material.uniforms.uFilterReturnNumberRange.value = this.filterReturnNumberRange; material.uniforms.uFilterNumberOfReturnsRange.value = this.filterNumberOfReturnsRange; material.uniforms.uFilterGPSTimeClipRange.value = this.filterGPSTimeRange; material.uniforms.uFilterPointSourceIDClipRange.value = this.filterPointSourceIDRange; material.classification = this.classifications; material.recomputeClassification(); this.updateMaterialDefaults(pointcloud); } { if(this.showBoundingBox){ let bbRoot = this.scene.scene.getObjectByName("potree_bounding_box_root"); if(!bbRoot){ let node = new Object3D(); node.name = "potree_bounding_box_root"; this.scene.scene.add(node); bbRoot = node; } let visibleBoxes = []; for(let pointcloud of this.scene.pointclouds){ for(let node of pointcloud.visibleNodes.filter(vn => vn.boundingBoxNode !== undefined)){ let box = node.boundingBoxNode; visibleBoxes.push(box); } } bbRoot.children = visibleBoxes; } } if (!this.freeze) { let result = Potree.updatePointClouds(scene.pointclouds, camera, this.renderer); // DEBUG - ONLY DISPLAY NODES THAT INTERSECT MOUSE //if(false){ // let renderer = viewer.renderer; // let mouse = viewer.inputHandler.mouse; // let nmouse = { // x: (mouse.x / renderer.domElement.clientWidth) * 2 - 1, // y: -(mouse.y / renderer.domElement.clientHeight) * 2 + 1 // }; // let pickParams = {}; // //if(params.pickClipped){ // // pickParams.pickClipped = params.pickClipped; // //} // pickParams.x = mouse.x; // pickParams.y = renderer.domElement.clientHeight - mouse.y; // let raycaster = new THREE.Raycaster(); // raycaster.setFromCamera(nmouse, camera); // let ray = raycaster.ray; // for(let pointcloud of scene.pointclouds){ // let nodes = pointcloud.nodesOnRay(pointcloud.visibleNodes, ray); // pointcloud.visibleNodes = nodes; // } //} // const tStart = performance.now(); // const worldPos = new THREE.Vector3(); // const camPos = viewer.scene.getActiveCamera().getWorldPosition(new THREE.Vector3()); // let lowestDistance = Infinity; // let numNodes = 0; // viewer.scene.scene.traverse(node => { // node.getWorldPosition(worldPos); // const distance = worldPos.distanceTo(camPos); // lowestDistance = Math.min(lowestDistance, distance); // numNodes++; // if(Number.isNaN(distance)){ // console.error(":("); // } // }); // const duration = (performance.now() - tStart).toFixed(2); // Potree.debug.computeNearDuration = duration; // Potree.debug.numNodes = numNodes; //console.log(lowestDistance.toString(2), duration); const tStart = performance.now(); const campos = camera.position; let closestImage = Infinity; for(const images of this.scene.orientedImages){ for(const image of images.images){ const distance = image.mesh.position.distanceTo(campos); closestImage = Math.min(closestImage, distance); } } const tEnd = performance.now(); if(result.lowestSpacing !== Infinity){ let near = result.lowestSpacing * 10.0; let far = -this.getBoundingBox().applyMatrix4(camera.matrixWorldInverse).min.z; far = Math.max(far * 1.5, 10000); near = Math.min(100.0, Math.max(0.01, near)); near = Math.min(near, closestImage); far = Math.max(far, near + 10000); if(near === Infinity){ near = 0.1; } camera.near = near; camera.far = far; }else { // don't change near and far in this case } if(this.scene.cameraMode == CameraMode.ORTHOGRAPHIC) { camera.near = -camera.far; } } this.scene.cameraP.fov = this.fov; let controls = this.getControls(); if (controls === this.deviceControls) { this.controls.setScene(scene); this.controls.update(delta); this.scene.cameraP.position.copy(scene.view.position); this.scene.cameraO.position.copy(scene.view.position); } else if (controls !== null) { controls.setScene(scene); controls.update(delta); if(typeof debugDisabled === "undefined" ){ this.scene.cameraP.position.copy(scene.view.position); this.scene.cameraP.rotation.order = "ZXY"; this.scene.cameraP.rotation.x = Math.PI / 2 + this.scene.view.pitch; this.scene.cameraP.rotation.z = this.scene.view.yaw; } this.scene.cameraO.position.copy(scene.view.position); this.scene.cameraO.rotation.order = "ZXY"; this.scene.cameraO.rotation.x = Math.PI / 2 + this.scene.view.pitch; this.scene.cameraO.rotation.z = this.scene.view.yaw; } camera.updateMatrix(); camera.updateMatrixWorld(); camera.matrixWorldInverse.copy(camera.matrixWorld).invert(); { if(this._previousCamera === undefined){ this._previousCamera = this.scene.getActiveCamera().clone(); this._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation); } if(!this._previousCamera.matrixWorld.equals(camera.matrixWorld)){ this.dispatchEvent({ type: "camera_changed", previous: this._previousCamera, camera: camera }); }else if(!this._previousCamera.projectionMatrix.equals(camera.projectionMatrix)){ this.dispatchEvent({ type: "camera_changed", previous: this._previousCamera, camera: camera }); } this._previousCamera = this.scene.getActiveCamera().clone(); this._previousCamera.rotation.copy(this.scene.getActiveCamera().rotation); } { // update clip boxes let boxes = []; // volumes with clipping enabled //boxes.push(...this.scene.volumes.filter(v => (v.clip))); boxes.push(...this.scene.volumes.filter(v => (v.clip && v instanceof BoxVolume))); // profile segments for(let profile of this.scene.profiles){ boxes.push(...profile.boxes); } // Needed for .getInverse(), pre-empt a determinant of 0, see #815 / #816 let degenerate = (box) => box.matrixWorld.determinant() !== 0; let clipBoxes = boxes.filter(degenerate).map( box => { box.updateMatrixWorld(); let boxInverse = box.matrixWorld.clone().invert(); let boxPosition = box.getWorldPosition(new Vector3()); return {box: box, inverse: boxInverse, position: boxPosition}; }); let clipPolygons = this.scene.polygonClipVolumes.filter(vol => vol.initialized); // set clip volumes in material for(let pointcloud of visiblePointClouds){ pointcloud.material.setClipBoxes(clipBoxes); pointcloud.material.setClipPolygons(clipPolygons, this.clippingTool.maxPolygonVertices); pointcloud.material.clipTask = this.clipTask; pointcloud.material.clipMethod = this.clipMethod; } } { for(let pointcloud of visiblePointClouds){ pointcloud.material.elevationGradientRepeat = this.elevationGradientRepeat; } } { // update navigation cube this.navigationCube.update(camera.rotation); } this.updateAnnotations(); if(this.mapView){ this.mapView.update(delta); if(this.mapView.sceneProjection){ $( "#potree_map_toggle" ).css("display", "block"); } } TWEEN.update(timestamp); this.dispatchEvent({ type: 'update', delta: delta, timestamp: timestamp}); if(Potree.measureTimings) { performance.mark("update-end"); performance.measure("update", "update-start", "update-end"); } } getPRenderer(){ if(this.useHQ){ if (!this.hqRenderer) { this.hqRenderer = new HQSplatRenderer(this); } this.hqRenderer.useEDL = this.useEDL; return this.hqRenderer; }else { if (this.useEDL && Features.SHADER_EDL.isSupported()) { if (!this.edlRenderer) { this.edlRenderer = new EDLRenderer(this); } return this.edlRenderer; } else { if (!this.potreeRenderer) { this.potreeRenderer = new PotreeRenderer(this); } return this.potreeRenderer; } } } renderVR(){ let renderer = this.renderer; renderer.setClearColor(0x550000, 0); renderer.clear(); let xr = renderer.xr; let dbg = new PerspectiveCamera(); let xrCameras = xr.getCamera(dbg); if(xrCameras.cameras.length !== 2){ return; } let makeCam = this.vrControls.getCamera.bind(this.vrControls); { // clear framebuffer if(viewer.background === "skybox"){ renderer.setClearColor(0xff0000, 1); }else if(viewer.background === "gradient"){ renderer.setClearColor(0x112233, 1); }else if(viewer.background === "black"){ renderer.setClearColor(0x000000, 1); }else if(viewer.background === "white"){ renderer.setClearColor(0xFFFFFF, 1); }else { renderer.setClearColor(0x000000, 0); } renderer.clear(); } // render background if(this.background === "skybox"){ let {skybox} = this; let cam = makeCam(); skybox.camera.rotation.copy(cam.rotation); skybox.camera.fov = cam.fov; skybox.camera.aspect = cam.aspect; // let dbg = new THREE.Object3D(); let dbg = skybox.parent; // dbg.up.set(0, 0, 1); dbg.rotation.x = Math.PI / 2; // skybox.camera.parent = dbg; // dbg.children.push(skybox.camera); dbg.updateMatrix(); dbg.updateMatrixWorld(); skybox.camera.updateMatrix(); skybox.camera.updateMatrixWorld(); skybox.camera.updateProjectionMatrix(); renderer.render(skybox.scene, skybox.camera); // renderer.render(skybox.scene, cam); }else if(this.background === "gradient"){ // renderer.render(this.scene.sceneBG, this.scene.cameraBG); } this.renderer.xr.getSession().updateRenderState({ depthNear: 0.1, depthFar: 10000 }); let cam = null; let view = null; { // render world scene cam = makeCam(); cam.position.z -= 0.8 * cam.scale.x; cam.parent = null; // cam.near = 0.05; cam.near = viewer.scene.getActiveCamera().near; cam.far = viewer.scene.getActiveCamera().far; cam.updateMatrix(); cam.updateMatrixWorld(); this.scene.scene.updateMatrix(); this.scene.scene.updateMatrixWorld(); this.scene.scene.matrixAutoUpdate = false; let camWorld = cam.matrixWorld.clone(); view = camWorld.clone().invert(); this.scene.scene.matrix.copy(view); this.scene.scene.matrixWorld.copy(view); cam.matrix.identity(); cam.matrixWorld.identity(); cam.matrixWorldInverse.identity(); renderer.render(this.scene.scene, cam); this.scene.scene.matrixWorld.identity(); } for(let pointcloud of this.scene.pointclouds){ let viewport = xrCameras.cameras[0].viewport; pointcloud.material.useEDL = false; pointcloud.screenHeight = viewport.height; pointcloud.screenWidth = viewport.width; // automatically switch to paraboloids because they cause far less flickering in VR, // when point sizes are larger than around 2 pixels // if(Features.SHADER_INTERPOLATION.isSupported()){ // pointcloud.material.shape = Potree.PointShape.PARABOLOID; // } } // render point clouds for(let xrCamera of xrCameras.cameras){ let v = xrCamera.viewport; renderer.setViewport(v.x, v.y, v.width, v.height); // xrCamera.fov = 90; { // estimate VR fov let proj = xrCamera.projectionMatrix; let inv = proj.clone().invert(); let p1 = new Vector4(0, 1, -1, 1).applyMatrix4(inv); let rad = p1.y; let fov = 180 * (rad / Math.PI); xrCamera.fov = fov; } for(let pointcloud of this.scene.pointclouds){ const {material} = pointcloud; material.useEDL = false; } let vrWorld = view.clone().invert(); vrWorld.multiply(xrCamera.matrixWorld); let vrView = vrWorld.clone().invert(); this.pRenderer.render(this.scene.scenePointCloud, xrCamera, null, { viewOverride: vrView, }); } { // render VR scene let cam = makeCam(); cam.parent = null; renderer.render(this.sceneVR, cam); } renderer.resetState(); } renderDefault(){ let pRenderer = this.getPRenderer(); { // resize const width = this.scaleFactor * this.renderArea.clientWidth; const height = this.scaleFactor * this.renderArea.clientHeight; this.renderer.setSize(width, height); const pixelRatio = this.renderer.getPixelRatio(); const aspect = width / height; const scene = this.scene; scene.cameraP.aspect = aspect; scene.cameraP.updateProjectionMatrix(); let frustumScale = this.scene.view.radius; scene.cameraO.left = -frustumScale; scene.cameraO.right = frustumScale; scene.cameraO.top = frustumScale * 1 / aspect; scene.cameraO.bottom = -frustumScale * 1 / aspect; scene.cameraO.updateProjectionMatrix(); scene.cameraScreenSpace.top = 1/aspect; scene.cameraScreenSpace.bottom = -1/aspect; scene.cameraScreenSpace.updateProjectionMatrix(); } pRenderer.clear(); pRenderer.render(this.renderer); this.renderer.render(this.overlay, this.overlayCamera); } render(){ if(Potree.measureTimings) performance.mark("render-start"); try{ const vrActive = this.renderer.xr.isPresenting; if(vrActive){ this.renderVR(); }else { this.renderDefault(); } }catch(e){ this.onCrash(e); } if(Potree.measureTimings){ performance.mark("render-end"); performance.measure("render", "render-start", "render-end"); } } resolveTimings(timestamp){ if(Potree.measureTimings){ if(!this.toggle){ this.toggle = timestamp; } let duration = timestamp - this.toggle; if(duration > 1000.0){ let measures = performance.getEntriesByType("measure"); let names = new Set(); for(let measure of measures){ names.add(measure.name); } let groups = new Map(); for(let name of names){ groups.set(name, { measures: [], sum: 0, n: 0, min: Infinity, max: -Infinity }); } for(let measure of measures){ let group = groups.get(measure.name); group.measures.push(measure); group.sum += measure.duration; group.n++; group.min = Math.min(group.min, measure.duration); group.max = Math.max(group.max, measure.duration); } let glQueries = Potree.resolveQueries(this.renderer.getContext()); for(let [key, value] of glQueries){ let group = { measures: value.map(v => {return {duration: v}}), sum: value.reduce( (a, i) => a + i, 0), n: value.length, min: Math.min(...value), max: Math.max(...value) }; let groupname = `[tq] ${key}`; groups.set(groupname, group); names.add(groupname); } for(let [name, group] of groups){ group.mean = group.sum / group.n; group.measures.sort( (a, b) => a.duration - b.duration ); if(group.n === 1){ group.median = group.measures[0].duration; }else if(group.n > 1){ group.median = group.measures[parseInt(group.n / 2)].duration; } } let cn = Array.from(names).reduce( (a, i) => Math.max(a, i.length), 0) + 5; let cmin = 10; let cmed = 10; let cmax = 10; let csam = 6; let message = ` ${"NAME".padEnd(cn)} |` + ` ${"MIN".padStart(cmin)} |` + ` ${"MEDIAN".padStart(cmed)} |` + ` ${"MAX".padStart(cmax)} |` + ` ${"SAMPLES".padStart(csam)} \n`; message += ` ${"-".repeat(message.length) }\n`; names = Array.from(names).sort(); for(let name of names){ let group = groups.get(name); let min = group.min.toFixed(3); let median = group.median.toFixed(3); let max = group.max.toFixed(3); let n = group.n; message += ` ${name.padEnd(cn)} |` + ` ${min.padStart(cmin)} |` + ` ${median.padStart(cmed)} |` + ` ${max.padStart(cmax)} |` + ` ${n.toString().padStart(csam)}\n`; } message += `\n`; console.log(message); performance.clearMarks(); performance.clearMeasures(); this.toggle = timestamp; } } } loop(timestamp){ if(this.stats){ this.stats.begin(); } if(Potree.measureTimings){ performance.mark("loop-start"); } this.update(this.clock.getDelta(), timestamp); this.render(); // let vrActive = viewer.renderer.xr.isPresenting; // if(vrActive){ // this.update(this.clock.getDelta(), timestamp); // this.render(); // }else{ // this.update(this.clock.getDelta(), timestamp); // this.render(); // } if(Potree.measureTimings){ performance.mark("loop-end"); performance.measure("loop", "loop-start", "loop-end"); } this.resolveTimings(timestamp); Potree.framenumber++; if(this.stats){ this.stats.end(); } } postError(content, params = {}){ let message = this.postMessage(content, params); message.element.addClass("potree_message_error"); return message; } postMessage(content, params = {}){ let message = new Message(content); let animationDuration = 100; message.element.css("display", "none"); message.elClose.click( () => { message.element.slideToggle(animationDuration); let index = this.messages.indexOf(message); if(index >= 0){ this.messages.splice(index, 1); } }); this.elMessages.prepend(message.element); message.element.slideToggle(animationDuration); this.messages.push(message); if(params.duration !== undefined){ let fadeDuration = 500; let slideOutDuration = 200; setTimeout(() => { message.element.animate({ opacity: 0 }, fadeDuration); message.element.slideToggle(slideOutDuration); }, params.duration); } return message; } }; OrthographicCamera.prototype.zoomTo = function( node, factor = 1){ if ( !node.geometry && !node.boundingBox) { return; } // TODO //let minWS = new THREE.Vector4(node.boundingBox.min.x, node.boundingBox.min.y, node.boundingBox.min.z, 1); //let minVS = minWS.applyMatrix4(this.matrixWorldInverse); //let right = node.boundingBox.max.x; //let bottom = node.boundingBox.min.y; //let top = node.boundingBox.max.y; this.updateProjectionMatrix(); }; PerspectiveCamera.prototype.zoomTo = function (node, factor) { if (!node.geometry && !node.boundingSphere && !node.boundingBox) { return; } if (node.geometry && node.geometry.boundingSphere === null) { node.geometry.computeBoundingSphere(); } node.updateMatrixWorld(); let bs; if (node.boundingSphere) { bs = node.boundingSphere; } else if (node.geometry && node.geometry.boundingSphere) { bs = node.geometry.boundingSphere; } else { bs = node.boundingBox.getBoundingSphere(new Sphere()); } let _factor = factor || 1; bs = bs.clone().applyMatrix4(node.matrixWorld); let radius = bs.radius; let fovr = this.fov * Math.PI / 180; if (this.aspect < 1) { fovr = fovr * this.aspect; } let distanceFactor = Math.abs(radius / Math.sin(fovr / 2)) * _factor; let offset = this.getWorldDirection(new Vector3()).multiplyScalar(-distanceFactor); this.position.copy(bs.center.clone().add(offset)); }; Ray.prototype.distanceToPlaneWithNegative = function (plane) { let denominator = plane.normal.dot(this.direction); if (denominator === 0) { // line is coplanar, return origin if (plane.distanceToPoint(this.origin) === 0) { return 0; } // Null is preferable to undefined since undefined means.... it is undefined return null; } let t = -(this.origin.dot(plane.normal) + plane.constant) / denominator; return t; }; const workerPool = new WorkerPool(); const version = { major: 1, minor: 8, suffix: '.0' }; let lru = new LRU(); console.log('Potree ' + version.major + '.' + version.minor + version.suffix); let pointBudget = 1 * 1000 * 1000; let framenumber = 0; let numNodesLoading = 0; let maxNodesLoading = 4; const debug = {}; exports.scriptPath = ""; if (document.currentScript && document.currentScript.src) { exports.scriptPath = new URL(document.currentScript.src + '/..').href; if (exports.scriptPath.slice(-1) === '/') { exports.scriptPath = exports.scriptPath.slice(0, -1); } } else if(({ url: (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('potree.js', document.baseURI).href)) })){ exports.scriptPath = new URL((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('potree.js', document.baseURI).href)) + "/..").href; if (exports.scriptPath.slice(-1) === '/') { exports.scriptPath = exports.scriptPath.slice(0, -1); } }else { console.error('Potree was unable to find its script path using document.currentScript. Is Potree included with a script tag? Does your browser support this function?'); } let resourcePath = exports.scriptPath + '/resources'; function loadPointCloud$1(path, name, callback){ let loaded = function(e){ e.pointcloud.name = name; callback(e); }; let promise = new Promise( resolve => { // load pointcloud if (!path){ // TODO: callback? comment? Hello? Bueller? Anyone? } else if (path.indexOf('ept.json') > 0) { EptLoader.load(path, function(geometry) { if (!geometry) { console.error(new Error(`failed to load point cloud from URL: ${path}`)); } else { let pointcloud = new PointCloudOctree(geometry); //loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); } else if (path.indexOf('cloud.js') > 0) { POCLoader.load(path, function (geometry) { if (!geometry) { //callback({type: 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); } else { let pointcloud = new PointCloudOctree(geometry); // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); } else if (path.indexOf('metadata.json') > 0) { Potree.OctreeLoader.load(path).then(e => { let geometry = e.geometry; if(!geometry){ console.error(new Error(`failed to load point cloud from URL: ${path}`)); }else { let pointcloud = new PointCloudOctree(geometry); let aPosition = pointcloud.getAttribute("position"); let material = pointcloud.material; material.elevationRange = [ aPosition.range[0][2], aPosition.range[1][2], ]; // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); OctreeLoader.load(path, function (geometry) { if (!geometry) { //callback({type: 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); } else { let pointcloud = new PointCloudOctree(geometry); // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); } else if (path.indexOf('.vpc') > 0) { PointCloudArena4DGeometry.load(path, function (geometry) { if (!geometry) { //callback({type: 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); } else { let pointcloud = new PointCloudArena4D(geometry); // loaded(pointcloud); resolve({type: 'pointcloud_loaded', pointcloud: pointcloud}); } }); } else { //callback({'type': 'loading_failed'}); console.error(new Error(`failed to load point cloud from URL: ${path}`)); } }); if(callback){ promise.then(pointcloud => { loaded(pointcloud); }); }else { return promise; } }; // add selectgroup (function($){ $.fn.extend({ selectgroup: function(args = {}){ let elGroup = $(this); let rootID = elGroup.prop("id"); let groupID = `${rootID}`; let groupTitle = (args.title !== undefined) ? args.title : ""; let elButtons = []; elGroup.find("option").each((index, value) => { let buttonID = $(value).prop("id"); let label = $(value).html(); let optionValue = $(value).prop("value"); let elButton = $(` `); let elLabel = elButton.find("label"); let elInput = elButton.find("input"); elInput.change( () => { elGroup.find("label").removeClass("ui-state-active"); elGroup.find("label").addClass("ui-state-default"); if(elInput.is(":checked")){ elLabel.addClass("ui-state-active"); }else { //elLabel.addClass("ui-state-default"); } }); elButtons.push(elButton); }); let elFieldset = $(`
      ${groupTitle}
      `); let elButtonContainer = elFieldset.find("span"); for(let elButton of elButtons){ elButtonContainer.append(elButton); } elButtonContainer.find("label").each( (index, value) => { $(value).css("margin", "0px"); $(value).css("border-radius", "0px"); $(value).css("border", "1px solid black"); $(value).css("border-left", "none"); }); elButtonContainer.find("label:first").each( (index, value) => { $(value).css("border-radius", "4px 0px 0px 4px"); }); elButtonContainer.find("label:last").each( (index, value) => { $(value).css("border-radius", "0px 4px 4px 0px"); $(value).css("border-left", "none"); }); elGroup.empty(); elGroup.append(elFieldset); } }); })(jQuery); exports.Action = Action; exports.AnimationPath = AnimationPath; exports.Annotation = Annotation; exports.Box3Helper = Box3Helper$1; exports.BoxVolume = BoxVolume; exports.CameraAnimation = CameraAnimation; exports.CameraMode = CameraMode; exports.ClassificationScheme = ClassificationScheme; exports.ClipMethod = ClipMethod; exports.ClipTask = ClipTask; exports.ClipVolume = ClipVolume; exports.ClippingTool = ClippingTool; exports.Compass = Compass; exports.DeviceOrientationControls = DeviceOrientationControls; exports.EarthControls = EarthControls; exports.ElevationGradientRepeat = ElevationGradientRepeat; exports.Enum = Enum; exports.EnumItem = EnumItem; exports.EptBinaryLoader = EptBinaryLoader; exports.EptKey = EptKey; exports.EptLaszipLoader = EptLaszipLoader; exports.EptLazBatcher = EptLazBatcher; exports.EptLoader = EptLoader; exports.EptZstandardLoader = EptZstandardLoader; exports.EventDispatcher = EventDispatcher; exports.EyeDomeLightingMaterial = EyeDomeLightingMaterial; exports.Features = Features; exports.FirstPersonControls = FirstPersonControls; exports.GeoPackageLoader = GeoPackageLoader; exports.Geopackage = Geopackage$1; exports.Gradients = Gradients; exports.HierarchicalSlider = HierarchicalSlider; exports.Images360 = Images360; exports.Images360Loader = Images360Loader; exports.KeyCodes = KeyCodes; exports.LRU = LRU; exports.LRUItem = LRUItem; exports.LengthUnits = LengthUnits; exports.MOUSE = MOUSE$1; exports.Measure = Measure; exports.MeasuringTool = MeasuringTool; exports.Message = Message; exports.NodeLoader = NodeLoader; exports.NormalizationEDLMaterial = NormalizationEDLMaterial; exports.NormalizationMaterial = NormalizationMaterial; exports.OctreeLoader = OctreeLoader; exports.OrbitControls = OrbitControls; exports.OrientedImage = OrientedImage; exports.OrientedImageLoader = OrientedImageLoader; exports.OrientedImages = OrientedImages; exports.POCLoader = POCLoader; exports.PathAnimation = PathAnimation; exports.PointAttribute = PointAttribute; exports.PointAttributeTypes = PointAttributeTypes; exports.PointAttributes = PointAttributes; exports.PointCloudEptGeometry = PointCloudEptGeometry; exports.PointCloudEptGeometryNode = PointCloudEptGeometryNode; exports.PointCloudMaterial = PointCloudMaterial$1; exports.PointCloudOctree = PointCloudOctree; exports.PointCloudOctreeGeometry = PointCloudOctreeGeometry; exports.PointCloudOctreeGeometryNode = PointCloudOctreeGeometryNode; exports.PointCloudOctreeNode = PointCloudOctreeNode; exports.PointCloudSM = PointCloudSM; exports.PointCloudTree = PointCloudTree; exports.PointCloudTreeNode = PointCloudTreeNode; exports.PointShape = PointShape; exports.PointSizeType = PointSizeType; exports.Points = Points$1; exports.PolygonClipVolume = PolygonClipVolume; exports.Profile = Profile; exports.ProfileData = ProfileData; exports.ProfileRequest = ProfileRequest; exports.ProfileTool = ProfileTool; exports.Renderer = Renderer; exports.Scene = Scene$1; exports.ScreenBoxSelectTool = ScreenBoxSelectTool; exports.ShapefileLoader = ShapefileLoader; exports.SphereVolume = SphereVolume; exports.SpotLightHelper = SpotLightHelper$1; exports.TextSprite = TextSprite; exports.TransformationTool = TransformationTool; exports.TreeType = TreeType; exports.Utils = Utils; exports.VRControls = VRControls; exports.Version = Version; exports.Viewer = Viewer; exports.Volume = Volume; exports.VolumeTool = VolumeTool; exports.WorkerPool = WorkerPool; exports.XHRFactory = XHRFactory; exports.debug = debug; exports.framenumber = framenumber; exports.loadPointCloud = loadPointCloud$1; exports.loadProject = loadProject; exports.lru = lru; exports.maxNodesLoading = maxNodesLoading; exports.numNodesLoading = numNodesLoading; exports.pointBudget = pointBudget; exports.resourcePath = resourcePath; exports.saveProject = saveProject; exports.updatePointClouds = updatePointClouds; exports.updateVisibility = updateVisibility; exports.updateVisibilityStructures = updateVisibilityStructures; exports.version = version; exports.workerPool = workerPool; Object.defineProperty(exports, '__esModule', { value: true }); }))); //# sourceMappingURL=potree.js.map ================================================ FILE: libs/potree/profile.html ================================================ ================================================ FILE: libs/potree/resources/LICENSE ================================================ icons/map_icon.png from sitn PotreeViewer http://ne.ch/sitn https://github.com/PotreeViewer/PotreeViewer icons/navigation_cube.svg icons/orthographic_camera.svg icons/perspective_camera.svg free for commerical use without attribution http://www.freepik.com/free-icon/package-cube-box-for-delivery_720159.htm # VR Controller Model images/vr_controller_help* Controller model from https://sketchfab.com/3d-models/htc-vive-controller-9f03e4a80c5a4b31a24bb122f17cb229 license: CC AttributionCreative Commons Attribution ================================================ FILE: libs/potree/resources/icons/image_preview.php ================================================ $value){ if($value === "." || $value === ".." || $value === "image_preview.php"){ continue; } ?>

      ================================================ FILE: libs/potree/resources/icons/index.html ================================================
      add.svg
      annotation.svg
      area.svg
      area_backup.svg
      arrow_ccw.svg
      arrow_cw.svg
      arrow_down.svg
      arrow_left.svg
      arrow_right.svg
      arrow_up.svg
      assign.svg
      azimuth.svg
      back.svg
      bottom.svg
      camera_animation.svg
      circle.svg
      circled_dot.svg
      clip-plane-x.svg
      clip-plane-y.svg
      clip-plane-z.svg
      clip-polygon.svg
      clip-screen.svg
      clip_volume.svg
      close.svg
      cloud.svg
      copy.svg
      distance.svg
      earth_controls.svg
      eye.svg
      eye_2.svg
      eye_crossed.svg
      file_csv_2d.svg
      file_dxf.svg
      file_dxf_2d.svg
      file_dxf_3d.svg
      file_geojson.svg
      file_las_3d.svg
      file_potree.svg
      flip_y_z.svg
      focus.svg
      fps_controls.svg
      front.svg
      goto.svg
      height.svg
      helicopter_controls.svg
      left.svg
      menu_button.svg
      menu_icon.svg
      navigation_cube.svg
      orbit_controls.svg
      orthographic-camera.svg
      perspective-camera.svg
      picture.svg
      point.svg
      profile.svg
      remove.svg
      reset_tools.svg
      return_number.svg
      rgb.svg
      right.svg
      rotate.svg
      scale.svg
      sphere.svg
      sphere_distances.svg
      target.svg
      top.svg
      translate.svg
      triangle.svg
      volume.svg
      vr_button.svg
      angle.png
      earth_controls.png
      earth_controls_1.png
      eye_2.png
      flip_y_z.png
      fps_controls.png
      gradients_grayscale.png
      gradients_plasma.png
      gradients_rainbow.png
      gradients_spectral.png
      gradients_yellow_green.png
      map_icon.png
      profile.png
      rgb.png
      rgb_elevation.png
      sphere.png
      ================================================ FILE: libs/potree/resources/lang/de/translation.json ================================================ { "tb": { "navigation_opt": "Navigation", "rendering_opt": "Aussehen", "tools_opt": "Tools", "measurments_opt": "Messungen", "clipping_opt": "Clipping", "materials_opt": "Materials", "scene_opt": "Szene", "classification_filter_opt": "Klassifizierung Filter", "parameters_opt": "Weitere Einstellungen", "about_opt": "Über Potree" }, "tt": { "angle_measurement": "Winkelmessung", "distance_measurement": "Abstandsmessung", "area_measurement": "Flächenmessung", "volume_measurement": "Volumenmessung", "height_profile": "Höhenprofil", "clip_volume": "Volume clip", "clip_polygon": "Polygon clip", "clip_plane_x": "Clipebene auf x-Achse", "clip_plane_y": "Clipebene auf y-Achse", "clip_plane_z": "Clipebene auf z-Achse", "remove_all_measurement": "Alle Messungen entfernen", "left_view_control": "Linke Seite", "front_view_control": "Vorderseite", "top_view_control": "Draufsicht", "focus_control": "Volle Ausdehnung", "orbit_control": "Orbit Kontrolle ", "flight_control": "Fly Kontrolle", "earth_control": "Earth Kontrolle", "perspective_camera_control": "Perspektivische Kamera", "orthographic_camera_control": "Orthografische Kamera", "navigation_cube_control": "Navigationswürfel", "remove_all_clipping_volumes": "Alle Clipvolumen entfernen" }, "appearance": { "nb_max_pts": "Max Punkte", "point_size": "Punktgrösse", "point_opacity": "Deckkraft", "field_view": "Sichtfeld", "point_size_type": "Punktgrösse", "point_material": "Materials", "elevation_range": "Elevation Bereich", "point_quality": "Qualität", "point_shape": "Form", "edl_radius": "Radius", "edl_strength": "Stärke", "edl_enable": "Ein", "min_node_size": "Min Knotengrösse", "clip_mode": "Clip-Modus", "move_speed": "Speed", "skybox": "Sky", "bottom_lock": "Halten über dem Boden", "box": "Box", "length_unit": "Lenght unit", "freeze": "Lock view", "language": "Sprache" }, "profile": { "nb_points": "Punkt number", "title": "Höhenprofil", "save": "Speichern" }, "settings": { "language": "Sprache" } } ================================================ FILE: libs/potree/resources/lang/dev/ns.common.json ================================================ { "simple_dev": "ok_from_common_dev", "test": { "simple_dev": "ok_from_common_dev", "fallback_dev": "ok_from_common_dev-fallback" } } ================================================ FILE: libs/potree/resources/lang/dev/ns.special.json ================================================ { "simple_dev": "ok_from_special_dev", "test": { "simple_dev": "ok_from_special_dev" } } ================================================ FILE: libs/potree/resources/lang/dev/translation.json ================================================ { "simple_dev": "ok_from_dev", "test": { "simple_dev": "ok_from_dev" } } ================================================ FILE: libs/potree/resources/lang/en/ns.common.json ================================================ { "simple_en": "ok_from_common_en", "test": { "simple_en": "ok_from_common_en", "fallback_en": "ok_from_common_en-fallback" } } ================================================ FILE: libs/potree/resources/lang/en/ns.special.json ================================================ { "simple_en": "ok_from_special_en", "test": { "simple_en": "ok_from_special_en" } } ================================================ FILE: libs/potree/resources/lang/en/translation.json ================================================ { "tb": { "navigation_opt": "Navigation", "rendering_opt": "Appearance", "tools_opt": "Tools", "measurments_opt": "Measurements", "clipping_opt": "Clipping", "annotations_opt": "Annotations", "materials_opt": "Materials", "scene_opt": "Scene", "classification_filter_opt": "Classification filter", "filters_opt": "Filters", "parameters_opt": "Other settings", "about_opt": "About" }, "tt": { "angle_measurement": "Angle measurement", "point_measurement": "Point measurement", "distance_measurement": "Distance measurement", "height_measurement": "Height measurement", "circle_measurement": "Circle measurement", "area_measurement": "Area measurement", "volume_measurement": "Volume measurement", "height_profile": "Height profile", "annotation": "Annotation", "clip_volume": "Volume clip", "clip_polygon": "Polygon clip", "screen_clip_box": "Draw a selection box. Requires you to be in orthographic camera mode!", "clip_plane_x": "Clip plane on x axis", "clip_plane_y": "Clip plane on y axis", "clip_plane_z": "Clip plane on z axis", "remove_all_measurement": "Remove all measurements", "left_view_control": "Left view", "right_view_control": "Righ view", "front_view_control": "Front view", "back_view_control": "Back view", "top_view_control": "Top view", "bottom_view_control": "Bottom view", "focus_control": "Full extent", "orbit_control": "Orbit control", "flight_control": "Fly control", "heli_control": "Helicopter control", "earth_control": "Earth control", "perspective_camera_control": "Perspective camera", "orthographic_camera_control": "Orthographic camera", "navigation_cube_control": "Navigation cube", "remove_all_clipping_volumes": "Remove all clipping volumes", "compass": "Compass", "camera_animation": "Camera Animation" }, "appearance": { "nb_max_pts": "Point budget", "point_size": "Point size", "min_point_size": "Minimum size", "point_opacity": "Opacity", "field_view": "Field of view", "point_size_type": "Point sizing", "point_material": "Materials", "elevation_range": "Elevation range", "extra_range": "Scalar range", "point_quality": "Quality", "point_shape": "Shape", "edl_radius": "Radius", "edl_strength": "Strength", "edl_opacity": "Opacity", "edl_enable": "Enable", "min_node_size": "Min node size", "clip_mode": "Clip mode", "move_speed": "Speed", "skybox": "Sky", "bottom_lock": "Keep above ground", "box": "Box", "length_unit": "Length unit", "freeze": "Lock view", "language": "Language", "backface_culling": "Backface Culling" }, "measurements": { "clip": "clip", "show": "show volume" }, "annotations": { "show3D": "show in 3D", "showMap": "show on map" }, "profile": { "nb_points": "Number of Points", "title": "Height profile", "save_las": "Save LAS(3D)", "save_ortho": "Save CSV(2D)" }, "scene": { "camera_position": "Camera Position", "camera_target": "Camera Target" }, "filters": { "return_number": "Return Number", "number_of_returns": "Number of Returns", "gps_min": "min", "gps_max": "max", "gps_time": "GPS Time" }, "settings": { "language": "Language" } } ================================================ FILE: libs/potree/resources/lang/en-US/ns.common.json ================================================ { "simple_en-US": "ok_from_common_en-US", "test": { "simple_en-US": "ok_from_common_en-US" } } ================================================ FILE: libs/potree/resources/lang/en-US/ns.special.json ================================================ { "simple_en-US": "ok_from_special_en-US", "test": { "simple_en-US": "ok_from_special_en-US" } } ================================================ FILE: libs/potree/resources/lang/en-US/translation.json ================================================ { "simple_en-US": "ok_from_en-US", "test": { "simple_en-US": "ok_from_en-US" } } ================================================ FILE: libs/potree/resources/lang/es/translation.json ================================================ { "tb": { "navigation_opt": "Navegación", "rendering_opt": "Apariencia", "tools_opt": "Herramientas", "measurments_opt": "Medidas", "clipping_opt": "Recorte", "annotations_opt": "Anotaciones", "materials_opt": "Materiales", "scene_opt": "Escena", "classification_filter_opt": "Filtro de clasificación", "parameters_opt": "Otros ajustes", "about_opt": "Acerca de" }, "tt": { "angle_measurement": "Medición de ángulos", "point_measurement": "Medición de puntos", "distance_measurement": "Medición de distancia", "height_measurement": "Medición de altura", "area_measurement": "Medición de área", "volume_measurement": "Medición de volumen", "height_profile": "Perfil de altura", "clip_volume": "Clip de volumen", "clip_polygon": "Clip poligonal", "screen_clip_box": "Dibuje un cuadro de selección. Requiere que usted esté en modo de cámara ortográfica", "clip_plane_x": "Plano del clip en el eje x", "clip_plane_y": "Plano del clip en el eje y", "clip_plane_z": "Plano del clip en el eje z", "remove_all_measurement": "Eliminar todas las mediciones", "left_view_control": "Vista izquierda", "right_view_control": "Vista derecha", "front_view_control": "Vista de frente", "back_view_control": "Vista desde atrás", "top_view_control": "Vista superior", "bottom_view_control": "Vista inferior", "focus_control": "Alcance total", "orbit_control": "Control de órbita", "flight_control": "Control de vuelo", "heli_control": "Control de helicóptero", "earth_control": "Control de la tierra", "perspective_camera_control": "Perspectiva de la cámara", "orthographic_camera_control": "Cámara ortográfica", "navigation_cube_control": "Cubo de navegación", "remove_all_clipping_volumes": "Eliminar todos los volúmenes de recorte" }, "appearance": { "nb_max_pts": "Presupuesto de puntos", "point_size": "Tamaño del punto", "point_opacity": "Opacidad", "field_view": "Campo de visión", "point_size_type": "Dimensionamiento de puntos", "point_material": "Materiales", "elevation_range": "Rango de elevación", "point_quality": "Calidad", "point_shape": "Forma", "edl_radius": "Radio", "edl_strength": "Fuerza", "edl_enable": "Habilitar", "min_node_size": "Tamaño de nodo mínimo", "clip_mode": "Modo clip", "move_speed": "Velocidad", "skybox": "Cielo", "bottom_lock": "Mantenerse sobre el suelo", "box": "Caja", "length_unit": "Unidad de longitud", "freeze": "Vista de bloqueo", "language": "Lenguaje" }, "measurements": { "clip": "clip", "show": "ver volumen" }, "annotations": { "show3D": "ver en 3D", "showMap": "ver en mapa" }, "profile": { "nb_points": "Número de puntos", "title": "Perfil de altura", "save_las": "Guardar LAS(3D)", "save_ortho": "Guardar CSV(2D)" }, "scene": { "camera_position": "Posición de la cámara", "camera_target": "Objetuvo de la cámara" }, "settings": { "language": "Lenguaje" } } ================================================ FILE: libs/potree/resources/lang/fr/translation.json ================================================ { "tb": { "navigation_opt": "Navigation", "rendering_opt": "Apparence", "tools_opt": "Outils", "measurments_opt": "Mesures", "materials_opt": "Matériaux", "scene_opt": "Scène", "classification_filter_opt": "Filtre de classification", "parameters_opt": "Autres paramètres", "about_opt": "À propos" }, "tt": { "angle_measurement": "Mesurer un angle", "distance_measurement": "Mesurer une distance", "area_measurement": "Mesurer une surface", "volume_measurement": "Mesurer un volume", "height_profile": "Mesurer un profil", "clip_volume": "Sélectionner des points par un volume", "remove_all_measurement": "Supprimer toutes les mesures", "left_view_control": "Vue de la gauche", "front_view_control": "Vue de face", "top_view_control": "Vue de dessus", "focus_control": "Vue complète", "orbit_control": "Orbite", "flight_control": "Vol", "earth_control": "Earth" }, "appearance": { "nb_max_pts": "Nb points max", "point_size": "Taille des points", "point_opacity": "Opacité", "field_view": "Angle de vue", "point_size_type": "Type de taille", "point_material": "Matériaux", "elevation_range": "Plage altimétrique", "point_quality": "Qualité", "edl_radius": "Rayon", "edl_strength": "Intensité", "edl_enable": "Activer", "min_node_size": "Taille minimum des noeuds", "clip_mode": "Mode d'intersection", "move_speed": "Vitesse", "skybox": "Ciel", "bottom_lock": "Rester au-dessus du sol", "box": "Boite", "freeze": "Vérouiller la vue", "language": "Choix de la langue" }, "profile": { "nb_points": "Nombre de points", "title": "Profil altimétrique", "save": "Enregistrer" }, "settings": { "language": "Langue" } } ================================================ FILE: libs/potree/resources/lang/it/translation.json ================================================ { "tb": { "navigation_opt": "Navigazione", "rendering_opt": "Visualizzazione", "tools_opt": "Strumenti", "measurments_opt": "Misure", "clipping_opt": "Opzioni di ritaglio", "annotations_opt": "Annotazioni", "materials_opt": "Materiali", "scene_opt": "Scena", "classification_filter_opt": "Filtro di classificazione", "filters_opt": "Filtri", "parameters_opt": "Altri parametri", "about_opt": "A proposito" }, "tt": { "angle_measurement": "Misurazione angolo", "point_measurement": "Misurazione punto", "distance_measurement": "Misurazione distanza", "height_measurement": "Misurazione quota", "circle_measurement": "Misurazione cerchio", "area_measurement": "Misurazione superficie", "volume_measurement": "Misurazione volume", "height_profile": "Misurazione profilo", "annotation": "Annotazione", "clip_volume": "Ritaglio con volume", "clip_polygon": "Ritaglio con poligono", "remove_all_measurement": "Cancellazione misure", "left_view_control": "Vista da sinistra", "front_view_control": "Vista frontale", "back_view_control": "Vista da dietro", "top_view_control": "Vista nadirale", "bottom_view_control": "Vista dal basso", "focus_control": "Massima estensione", "orbit_control": "Modalità orbit", "flight_control": "Modalità volo", "heli_control": "Modalità elicottero", "earth_control": "Modalità Earth", "perspective_camera_control": "Vista prospettica", "orthographic_camera_control": "Vista ortografica", "remove_all_clipping_volumes": "Rimuovere tutti i volumi ritagliati", "compass": "Bussola", "camera_animation": "Animazione" }, "appearance": { "nb_max_pts": "Numero di punti", "point_size": "Dimensione dei punti", "min_point_size": "Minima dimensione dei punti", "point_opacity": "Opacità", "field_view": "Angolo di vista", "point_size_type": "Metodo di dimensionamento dei punti", "point_material": "Materiale", "elevation_range": "Intervallo altimetrico", "extra_range": "Intervallo scalare", "point_quality": "Qualità", "point_shape": "Forma", "edl_radius": "Raggio", "edl_strength": "Intensità", "edl_opacity": "Opacità", "edl_enable": "Attiva", "min_node_size": "Min dimensione dei nodi", "clip_mode": "Modalità di ritaglio", "move_speed": "Velocità", "skybox": "Cielo", "bottom_lock": "Rimani sotto al suolo", "box": "Box", "length_unit": "Unità di misura", "freeze": "Blocca vista", "language": "Lingua" }, "measurements": { "clip": "ritaglia", "show": "mostra volume" }, "annotations": { "show3D": "mostra in 3D", "showMap": "mostra sulla mappa" }, "profile": { "nb_points": "Numero di punti", "title": "Profilo altimetrico", "save_las": "Salva come LAS(3D)", "save_ortho": "Salva come CSV(2D)" }, "scene": { "camera_position": "Posizione della camera", "camera_target": "Obiettivo della camera" }, "filters": { "return_number": "Numero di ritorno", "number_of_returns": "Numero di ritorno", "gps_min": "min", "gps_max": "max", "gps_time": "tempo GPS" }, "settings": { "language": "Lingua" } } ================================================ FILE: libs/potree/resources/lang/jp/translation.json ================================================ { "tb": { "navigation_opt": "ナビゲーション", "rendering_opt": "外観", "tools_opt": "ツール", "measurments_opt": "測定結果", "annotations_opt": "注釈", "materials_opt": "材料", "scene_opt": "シーン", "classification_filter_opt": "フィルター分類", "parameters_opt": "その他の設定", "about_opt": "協力" }, "tt": { "angle_measurement": "角度測定", "distance_measurement": "距離測定", "height_measurement": "標高測定", "area_measurement": "面積測定", "volume_measurement": "体積測定", "height_profile": "断面図", "clip_volume": "クリッピングボリューム", "remove_all_measurement": "計測結果のクリア", "left_view_control": "左から見る", "front_view_control": "前から見る", "top_view_control": "上から見る", "focus_control": "全体表示", "orbit_control": " 軌道制御", "flight_control": "Vol", "earth_control": "地球" }, "appearance": { "nb_max_pts": "表示するポイント数を設定", "point_size": "点サイズを設定", "point_opacity": "不透明度", "field_view": "視野", "point_size_type": "点タイプ設定", "point_material": "点の材質", "elevation_range": "Plage altimétrique", "point_quality": "品質", "edl_radius": "点群の半径", "edl_strength": "点群の強度", "edl_enable": "アクティブにする", "min_node_size": "最小ノードサイズ", "clip_mode": "クリップモード", "move_speed": "動く速度", "skybox": "空", "bottom_lock": "地上面を固定します。", "box": "ボックス", "freeze": "ビューの固定", "language": "言語" }, "profile": { "nb_points": "点群番号", "title": "Profil altimétrique", "save_las": "LAS(3D)形式で保存", "save_ortho": "CSV(2D)形式で保存", "save": "保存" }, "scene": { "camera_position": "Camera Position", "camera_target": "Camera Target" }, "settings": { "language": "言語" } } ================================================ FILE: libs/potree/resources/lang/se/translation.json ================================================ { "tb": { "navigation_opt": "Navigering", "rendering_opt": "Utseende", "tools_opt": "Verktyg", "measurments_opt": "Mätning", "clipping_opt": "Urklipp", "annotations_opt": "Annoteringar", "materials_opt": "Material", "scene_opt": "Scen", "classification_filter_opt": "Klassificeringsfilter", "filters_opt": "Filter", "parameters_opt": "Andra inställningar", "about_opt": "Om" }, "tt": { "angle_measurement": "Vinkelmätning", "point_measurement": "Punktmätning", "distance_measurement": "Distansmätning", "height_measurement": "Höjdmätning", "area_measurement": "Areamätning", "volume_measurement": "Volymmätning", "height_profile": "Höjdprofil", "clip_volume": "Volymklippning", "clip_polygon": "Polygonklippning", "screen_clip_box": "Rita en yta för selektering. Ortogonalt kameraläge krävs!", "clip_plane_x": "Klippyta på x axel", "clip_plane_y": "Klippyta på y axel", "clip_plane_z": "Klippyta på z axel", "remove_all_measurement": "Ta bort alla mätningar", "left_view_control": "Vy vänster", "right_view_control": "Vy höger", "front_view_control": "Vy fram", "back_view_control": "Vy bak", "top_view_control": "Vy ovan", "bottom_view_control": "Vy under", "focus_control": "Full utsträckning", "orbit_control": "Kretsa kontroll", "flight_control": "Flyga kontroll", "heli_control": "Helikopter kontroll", "earth_control": "Earth control", "perspective_camera_control": "Kamera perspektiv", "orthographic_camera_control": "Kamera ortogonal", "navigation_cube_control": "Navigeringskub", "remove_all_clipping_volumes": "Ta bort alla klippytor" }, "appearance": { "nb_max_pts": "Punktbudget", "point_size": "Punktstorlek", "point_opacity": "Transparens", "field_view": "Synfält", "point_size_type": "Punkttyp", "point_material": "Material", "elevation_range": "Höjdintervall", "point_quality": "Kvalitet", "point_shape": "Form", "edl_radius": "Radie", "edl_strength": "Styrka", "edl_enable": "Aktiverad", "min_node_size": "Min nodstorlek", "clip_mode": "Klippläge", "move_speed": "Hastighet", "skybox": "Skybox", "bottom_lock": "Lås över marknivå", "box": "Box", "length_unit": "Enhet för längd", "freeze": "Lås vy", "language": "Språk" }, "measurements": { "clip": "klipp", "show": "visa volym" }, "annotations": { "show3D": "visa i 3D", "showMap": "visa på karta" }, "profile": { "nb_points": "Antal Punkter", "title": "Höjdprofil", "save_las": "Spara LAS(3D)", "save_ortho": "Spara CSV(2D)" }, "scene": { "camera_position": "Kamera Position", "camera_target": "Kamera Mål" }, "filters": { "return_number": "Returnera Antal", "number_of_returns": "Antal Returneringar", "gps_min": "min", "gps_max": "max", "gps_time": "GPS Tid" }, "settings": { "language": "Språk" } } ================================================ FILE: libs/potree/resources/lang/zh/translation.json ================================================ { "tb": { "navigation_opt": "导航", "rendering_opt": "外观", "tools_opt": "工具", "measurments_opt": "量测分析", "clipping_opt": "裁剪", "annotations_opt": "标注", "materials_opt": "材质", "scene_opt": "场景", "classification_filter_opt": "分类过滤器", "filters_opt": "过滤器", "parameters_opt": "其他选项", "about_opt": "关于" }, "tt": { "angle_measurement": "角度量测", "point_measurement": "点量测", "distance_measurement": "距离量测", "height_measurement": "高度量测", "circle_measurement": "环形量测", "area_measurement": "面积量测", "volume_measurement": "体积量测", "height_profile": "高度剖面", "annotation": "标注", "clip_volume": "立体裁剪", "clip_polygon": "多边形裁剪", "screen_clip_box": "绘制矩形进行裁剪. 需要使用 orthographic 相机模式!", "clip_plane_x": "在x轴平面裁剪", "clip_plane_y": "在y轴平面裁剪", "clip_plane_z": "在z轴平面裁剪", "remove_all_measurement": "清除量测结果", "left_view_control": "左视图", "right_view_control": "右视图", "front_view_control": "前视图", "back_view_control": "后视图", "top_view_control": "俯视图", "bottom_view_control": "仰视图", "focus_control": "复位", "orbit_control": "轨道控制", "flight_control": "飞行控制", "heli_control": "直升机控制", "earth_control": "地球控制", "perspective_camera_control": "透视相机", "orthographic_camera_control": "正交相机", "navigation_cube_control": "导航立方体", "remove_all_clipping_volumes": "移除裁剪对象", "compass": "指北针", "camera_animation": "相机动画" }, "appearance": { "nb_max_pts": "显示点数", "point_size": "点尺寸", "min_point_size": "最小尺寸", "point_opacity": "透明度", "field_view": "视野范围", "point_size_type": "尺寸", "point_material": "材质", "elevation_range": "高程范围", "extra_range": "标量范围", "point_quality": "质量", "point_shape": "形状", "edl_radius": "半径", "edl_strength": "强度", "edl_opacity": "透明度", "edl_enable": "启用", "min_node_size": "节点尺寸", "clip_mode": "裁剪模式", "move_speed": "速度", "skybox": "天空", "bottom_lock": "保持高于地面", "box": "辅助网格", "length_unit": "长度单位", "freeze": "锁定", "language": "语言", "backface_culling": "剔除背面" }, "measurements": { "clip": "裁剪", "show": "显示体积" }, "annotations": { "show3D": "以3D形式展示", "showMap": "在地图展示" }, "profile": { "nb_points": "点云数量", "title": "高度剖面", "save_las": "保存 LAS(3D)", "save_ortho": "保存 CSV(2D)" }, "scene": { "camera_position": "相机位置", "camera_target": "相机目标" }, "filters": { "return_number": "第几次回波", "number_of_returns": "回波次数", "gps_min": "最小值", "gps_max": "最大值", "gps_time": "GPS 时间" }, "settings": { "language": "语言" } } ================================================ FILE: libs/potree/resources/models/stanford_bunny_reduced.mtl ================================================ # Blender MTL File: 'None' # Material Count: 1 newmtl Material.001 Ns 96.078431 Ka 1.000000 1.000000 1.000000 Kd 0.640000 0.352654 0.488547 Ks 0.500000 0.500000 0.500000 Ke 0.000000 0.000000 0.000000 Ni 1.000000 d 1.000000 illum 2 map_Kd C:\\dev\\workspaces\\potree\\develop\\resources\\textures\\brick_pavement.jpg ================================================ FILE: libs/potree/resources/models/stanford_bunny_reduced.obj ================================================ # Blender v2.79 (sub 0) OBJ File: '' # www.blender.org mtllib stanford_bunny_reduced.mtl o stanford_bunny_reduced v -0.026015 0.080404 0.021808 v -0.032178 0.141946 -0.017212 v -0.080718 0.120681 0.015666 v -0.078180 0.060750 -0.026141 v -0.023129 0.080012 0.024065 v 0.016493 0.090119 0.016845 v -0.024836 0.124400 -0.018354 v 0.045263 0.054182 0.005458 v -0.071339 0.123541 -0.007453 v -0.010076 0.093775 0.015159 v -0.072013 0.122345 0.015820 v -0.074228 0.130989 -0.029073 v -0.075178 0.134347 -0.036959 v -0.077120 0.132986 -0.038342 v -0.015844 0.082427 0.024197 v -0.076832 0.102678 0.036875 v -0.017349 0.078202 0.026462 v -0.036220 0.138487 -0.013773 v -0.037684 0.139022 -0.013772 v -0.091535 0.113026 0.008638 v 0.008183 0.099347 -0.000081 v -0.057447 0.009548 0.031515 v -0.052683 0.011730 0.030505 v -0.064144 0.129577 -0.034149 v -0.030386 0.146611 -0.020306 v -0.025782 0.083289 0.019083 v 0.003016 0.010207 0.031317 v -0.024994 0.148076 -0.023777 v -0.059546 0.124187 -0.007094 v -0.062224 0.122949 -0.009014 v -0.034513 0.094390 0.002787 v -0.042194 0.011280 0.027613 v 0.007714 0.009971 0.030783 v -0.031217 0.093039 -0.012478 v -0.035327 0.061990 -0.038224 v -0.057122 0.013203 0.029083 v -0.039599 0.010934 0.026852 v 0.000378 0.012080 0.031432 v 0.004023 0.011975 0.031329 v 0.007312 0.011940 0.030972 v -0.040046 0.134464 -0.011134 v -0.014898 0.093990 0.011910 v -0.034602 0.094878 -0.010601 v 0.046793 0.036377 0.010525 v -0.040882 0.012406 0.027183 v -0.038322 0.011785 0.026448 v -0.092009 0.084593 0.017443 v -0.026958 0.012376 0.036457 v -0.023633 0.013255 0.038175 v -0.020423 0.013665 0.037882 v -0.012974 0.012804 0.035281 v -0.008831 0.013636 0.033194 v -0.005391 0.013506 0.032504 v -0.000347 0.013471 0.032427 v -0.047362 0.084593 0.017130 v -0.007039 0.077493 0.028597 v -0.090110 0.119127 0.003268 v -0.054905 0.014991 0.026879 v -0.052070 0.014319 0.027469 v -0.049074 0.013867 0.027012 v -0.023893 0.015842 0.035933 v -0.019197 0.015665 0.035376 v -0.015144 0.015351 0.033983 v -0.008304 0.014945 0.033139 v -0.005708 0.016123 0.035088 v 0.002444 0.014455 0.034435 v 0.006239 0.014074 0.034319 v -0.049627 0.016776 0.023271 v -0.025482 0.016552 0.034391 v -0.017873 0.017116 0.032665 v -0.014947 0.016316 0.033158 v -0.012387 0.015217 0.033343 v -0.009590 0.016984 0.035394 v -0.001358 0.015646 0.035095 v 0.008826 0.015611 0.034622 v -0.072733 0.090172 0.039093 v -0.008626 0.091393 0.019304 v 0.038479 0.013679 0.016466 v -0.000258 0.081198 0.027382 v -0.051771 0.016843 0.023013 v -0.047589 0.016468 0.024304 v -0.044138 0.015536 0.025409 v -0.041036 0.016892 0.025119 v -0.035882 0.016897 0.024405 v -0.023690 0.017656 0.032421 v -0.021546 0.017935 0.031552 v -0.015981 0.017651 0.033002 v -0.012593 0.018476 0.035911 v -0.000968 0.019161 0.039297 v 0.001126 0.017400 0.037173 v 0.004630 0.019772 0.038833 v 0.033102 0.013941 0.015778 v 0.039679 0.016322 0.017633 v -0.047040 0.019024 0.023134 v -0.039629 0.020535 0.024763 v 0.030947 0.086415 0.005823 v -0.025818 0.019032 0.027875 v -0.023336 0.018861 0.028942 v -0.020714 0.018924 0.030864 v -0.018801 0.018843 0.032267 v 0.007987 0.019344 0.037129 v 0.035101 0.017992 0.016865 v 0.041841 0.018690 0.018190 v -0.005506 0.097190 0.010870 v -0.015881 0.128084 -0.024441 v -0.041123 0.137672 -0.013007 v -0.063484 0.126716 -0.031102 v -0.021843 0.020141 0.029724 v -0.016423 0.021819 0.035836 v -0.014229 0.020043 0.035335 v -0.007408 0.019732 0.037607 v 0.001576 0.021567 0.039047 v -0.057993 0.121031 0.016651 v -0.029770 0.022185 0.021725 v -0.011009 0.023498 0.037815 v -0.004453 0.021691 0.039402 v -0.000824 0.021946 0.040486 v -0.081302 0.092705 0.037405 v -0.079377 0.095170 0.038703 v 0.038609 0.076100 -0.011439 v -0.064378 0.116329 0.023578 v -0.028631 0.021472 0.021805 v -0.003069 0.026557 0.039187 v 0.007259 0.023757 0.038265 v 0.003524 0.078491 0.027744 v 0.044730 0.021740 0.018004 v -0.043426 0.019982 0.024486 v -0.036284 0.020563 0.023974 v -0.032805 0.024396 0.023112 v -0.077332 0.066048 -0.025371 v -0.006306 0.024218 0.039313 v 0.001847 0.025517 0.039657 v 0.006765 0.026127 0.038919 v -0.018239 0.091088 0.014621 v -0.036439 0.083116 0.018087 v 0.038575 0.024036 0.016681 v -0.080113 0.122514 0.010129 v -0.044121 0.026333 0.024910 v -0.038938 0.026411 0.025850 v -0.012598 0.028243 0.039554 v -0.009419 0.028020 0.040946 v 0.000104 0.026242 0.040068 v 0.009382 0.026588 0.038262 v 0.008738 0.090688 0.020263 v 0.047164 0.024037 0.017403 v -0.042061 0.026903 0.025732 v -0.034673 0.027254 0.024800 v -0.028469 0.026978 0.022111 v -0.026237 0.025612 0.023968 v -0.005677 0.028794 0.041281 v -0.001214 0.028431 0.041391 v 0.002946 0.028002 0.041241 v 0.005327 0.028688 0.041184 v 0.041166 0.024422 0.017197 v 0.046327 0.026611 0.017286 v -0.011537 0.097435 0.003912 v 0.003443 0.031518 0.042224 v -0.094070 0.086786 0.005882 v -0.075896 0.109283 0.032761 v 0.041424 0.029039 0.014859 v 0.049952 0.028556 0.015935 v 0.015864 0.081927 0.023081 v -0.062119 0.116379 -0.017854 v -0.032605 0.030283 0.024259 v -0.028615 0.030421 0.022931 v -0.015490 0.029917 0.038683 v -0.007841 0.031292 0.041631 v -0.003890 0.030417 0.041396 v -0.086077 0.089878 -0.017240 v -0.009319 0.089331 0.021216 v 0.000784 0.086219 0.024548 v 0.045665 0.028693 0.016411 v -0.029162 0.093425 -0.005410 v -0.051920 0.030301 0.017158 v -0.041829 0.030178 0.026529 v -0.036447 0.030854 0.026747 v -0.027320 0.030068 0.023317 v -0.013878 0.032931 0.039144 v -0.013553 0.030350 0.039774 v -0.001522 0.030980 0.042189 v 0.009502 0.034754 0.040111 v -0.092913 0.086539 -0.003437 v -0.079644 0.090335 0.036342 v -0.029531 0.060408 -0.039494 v 0.024190 0.092277 0.004984 v 0.003438 0.036804 0.041084 v 0.005943 0.035637 0.040832 v -0.020881 0.151348 -0.035620 v -0.062773 0.035630 0.020312 v -0.025632 0.093514 -0.009512 v -0.065246 0.124664 -0.023660 v -0.039544 0.033939 0.027217 v -0.036517 0.035093 0.027039 v -0.015813 0.032908 0.038967 v -0.010211 0.036109 0.040518 v -0.005873 0.036366 0.041590 v 0.047838 0.034236 0.013112 v 0.049131 0.031489 0.014925 v -0.013081 0.035727 0.039345 v -0.001719 0.036860 0.042142 v 0.038378 0.072776 -0.016165 v 0.007253 0.086492 0.022914 v 0.043711 0.033239 0.012460 v -0.078590 0.143190 -0.062477 v -0.069048 0.130067 -0.026618 v -0.041895 0.035691 0.026895 v -0.034391 0.036818 0.026797 v -0.028950 0.036053 0.024439 v -0.027387 0.036864 0.025501 v -0.017027 0.039211 0.040304 v -0.015155 0.036177 0.040100 v 0.001028 0.039731 0.042342 v -0.036213 0.087986 0.015266 v -0.021437 0.073004 -0.037219 v -0.034998 0.136464 -0.029436 v -0.009531 0.059285 -0.050730 v -0.044848 0.038916 0.027447 v -0.030929 0.035164 0.024584 v -0.028125 0.040378 0.026229 v 0.045169 0.038817 0.007925 v -0.015440 0.041483 0.040982 v -0.013634 0.039205 0.040103 v -0.011636 0.040088 0.041413 v -0.002897 0.040769 0.044127 v 0.008376 0.043114 0.041795 v -0.062041 0.142885 -0.071148 v -0.005147 0.086868 0.023756 v -0.085548 0.076878 -0.007887 v -0.062535 0.116944 -0.022061 v -0.032032 0.040991 0.026008 v -0.026709 0.060074 -0.045354 v -0.088682 0.070900 0.000429 v 0.002881 0.060748 -0.047116 v -0.051080 0.041810 0.027757 v -0.048204 0.040153 0.026365 v -0.043048 0.042202 0.028195 v 0.005240 0.092835 0.018287 v -0.012850 0.043492 0.042335 v -0.007009 0.040134 0.043560 v 0.002571 0.042254 0.041781 v -0.016576 0.085375 0.021879 v -0.062760 0.134787 -0.058597 v -0.022739 0.152500 -0.026962 v -0.058104 0.043435 0.028018 v -0.046604 0.042533 0.027463 v -0.039438 0.041185 0.027481 v 0.000347 0.044365 0.043697 v -0.002106 0.084806 0.025425 v -0.019361 0.084074 0.022276 v 0.026674 0.088516 0.011286 v -0.035853 0.143915 -0.019765 v -0.054403 0.042380 0.027203 v -0.035933 0.040742 0.027548 v -0.030914 0.045544 0.026444 v -0.029977 0.041904 0.025799 v -0.016210 0.045333 0.041799 v -0.008727 0.043985 0.042839 v -0.006232 0.047547 0.043097 v -0.004349 0.043861 0.044252 v 0.006161 0.042184 0.042185 v -0.071298 0.107009 0.033050 v -0.039823 0.141414 -0.018419 v -0.062612 0.045204 0.027252 v -0.041367 0.045579 0.028731 v -0.021394 0.046855 0.040992 v 0.002219 0.047593 0.042374 v -0.032970 0.085251 0.017000 v -0.024718 0.086877 0.016968 v -0.014058 0.087329 0.021994 v 0.006125 0.099100 0.004356 v -0.051592 0.124827 -0.004366 v -0.026827 0.148127 -0.022081 v -0.079019 0.123412 0.004150 v -0.057394 0.046762 0.029303 v -0.048964 0.045503 0.029378 v -0.045222 0.046008 0.027604 v -0.037561 0.046630 0.028082 v -0.035739 0.045292 0.027371 v -0.017466 0.048533 0.043021 v -0.006584 0.085167 0.024477 v 0.005932 0.082896 0.025508 v -0.081211 0.116510 0.022809 v -0.074595 0.120195 0.020168 v -0.060661 0.048726 0.028620 v -0.055796 0.049510 0.030399 v -0.052110 0.047596 0.029375 v -0.048528 0.049870 0.029520 v -0.039763 0.048221 0.028384 v -0.031305 0.047900 0.026655 v -0.086409 0.119847 0.010735 v -0.010563 0.046804 0.043459 v -0.008846 0.048765 0.043569 v 0.004138 0.046713 0.041372 v -0.027393 0.085105 0.017309 v -0.009020 0.084349 0.024990 v -0.077226 0.092336 0.037952 v -0.037833 0.135439 -0.012601 v -0.066893 0.128382 -0.026896 v -0.027258 0.093013 0.002517 v -0.054417 0.048950 0.030500 v -0.051553 0.050603 0.029999 v -0.046414 0.049454 0.028962 v -0.043220 0.049511 0.027488 v -0.039599 0.050812 0.029039 v -0.036505 0.049452 0.028951 v -0.033060 0.049399 0.027109 v -0.030702 0.051363 0.027789 v -0.014584 0.048481 0.042341 v -0.006205 0.051528 0.042306 v -0.002558 0.049195 0.042954 v -0.022874 0.085776 0.019211 v -0.046284 0.132276 -0.009418 v -0.045718 0.088531 0.012860 v 0.041047 0.068649 0.008919 v 0.040153 0.074149 0.000759 v 0.042368 0.068354 -0.013313 v -0.036918 0.094703 0.003648 v -0.006183 0.068969 0.029996 v -0.046565 0.052312 0.030103 v -0.017866 0.052716 0.043015 v -0.016079 0.055138 0.042190 v -0.008656 0.054628 0.042711 v -0.003357 0.052403 0.042884 v 0.001915 0.052917 0.042965 v -0.018149 0.094118 0.008572 v -0.003037 0.090313 0.021319 v -0.039354 0.136762 -0.012132 v -0.068990 0.127065 -0.021452 v -0.070915 0.125037 -0.016269 v -0.069864 0.134031 -0.034188 v -0.063875 0.049421 0.029212 v -0.058881 0.052041 0.029192 v -0.049378 0.053383 0.030969 v -0.041948 0.052647 0.027962 v -0.034501 0.053269 0.028193 v -0.012381 0.052885 0.042782 v 0.004242 0.054446 0.042479 v 0.030144 0.085737 0.011309 v -0.042932 0.086058 0.016317 v -0.025262 0.149765 -0.023608 v -0.067077 0.051989 0.028971 v -0.053727 0.053174 0.030899 v -0.033992 0.054713 0.028122 v -0.032162 0.053063 0.027411 v -0.006345 0.097456 -0.013215 v 0.004877 0.099545 -0.005586 v 0.007996 0.054908 0.041475 v 0.021973 0.054037 0.034659 v -0.027659 0.061514 -0.040450 v -0.028953 0.059578 -0.041611 v 0.043275 0.064315 0.007375 v -0.072505 0.135666 -0.036816 v -0.033101 0.144819 -0.019255 v -0.064942 0.056355 0.030362 v -0.061295 0.056574 0.030972 v -0.057629 0.053911 0.029723 v -0.041282 0.055750 0.028007 v -0.037809 0.054278 0.029435 v 0.000710 0.057141 0.041694 v -0.042988 0.132150 -0.009616 v 0.018389 0.058693 0.033484 v 0.040481 0.072186 -0.013728 v -0.017726 0.087560 0.020011 v -0.087507 0.084417 -0.012359 v -0.055814 0.119773 0.014911 v -0.058843 0.057699 0.030444 v -0.047219 0.056040 0.030379 v -0.043824 0.053752 0.028950 v -0.044886 0.058344 0.028415 v -0.042671 0.057396 0.027999 v -0.038054 0.058087 0.028928 v -0.030532 0.054692 0.029005 v -0.013810 0.056942 0.042350 v -0.011578 0.056184 0.041926 v -0.008098 0.057926 0.042534 v -0.069408 0.091301 0.038562 v 0.043075 0.067721 0.000098 v -0.054994 0.056698 0.030353 v -0.049662 0.055466 0.031082 v -0.035690 0.057108 0.028693 v -0.011165 0.060326 0.041583 v 0.000857 0.099392 0.001795 v -0.040053 0.082615 0.019584 v -0.010678 0.132988 -0.031134 v -0.012126 0.097681 -0.000640 v -0.055968 0.059892 0.030789 v -0.053147 0.058151 0.030152 v -0.051535 0.060054 0.029431 v -0.048387 0.059510 0.029524 v -0.034269 0.058790 0.029962 v -0.029586 0.057197 0.029411 v -0.015629 0.061503 0.040264 v -0.004912 0.060700 0.041600 v -0.079566 0.103854 0.035818 v 0.022141 0.092938 0.008539 v -0.075245 0.122724 -0.012459 v -0.069723 0.058298 0.027492 v -0.067639 0.061051 0.027901 v -0.067076 0.057014 0.029528 v -0.061937 0.061014 0.030494 v -0.041196 0.061828 0.027571 v -0.029031 0.059928 0.029529 v -0.026999 0.061949 0.030436 v -0.014403 0.060272 0.041300 v 0.006156 0.058941 0.040072 v 0.008266 0.062628 0.037262 v -0.071052 0.086200 0.038791 v -0.058010 0.115549 0.018189 v 0.037205 0.077625 0.007965 v 0.013341 0.090708 0.018601 v -0.053425 0.062579 0.029207 v -0.036848 0.061608 0.029512 v -0.031998 0.062273 0.029968 v -0.012777 0.096019 0.009045 v -0.011420 0.062159 0.040627 v -0.006813 0.063631 0.039787 v 0.002583 0.062081 0.040109 v 0.011675 0.060839 0.037698 v -0.032736 0.143290 -0.017383 v -0.061874 0.065566 0.028320 v -0.057307 0.062312 0.030361 v -0.025808 0.063587 0.029176 v -0.009042 0.065816 0.037344 v 0.005444 0.064418 0.037372 v 0.017289 0.062737 0.033267 v 0.020963 0.064483 0.032393 v 0.036077 0.076570 -0.017753 v -0.041576 0.096684 -0.003318 v -0.008646 0.097994 -0.006712 v -0.059226 0.065783 0.028386 v -0.054612 0.064433 0.028817 v -0.049066 0.063054 0.030279 v -0.045740 0.062730 0.028813 v -0.039756 0.064073 0.027696 v -0.032831 0.064039 0.029952 v -0.029113 0.064002 0.030425 v 0.044863 0.036413 0.010153 v -0.049306 0.109265 -0.004123 v -0.003351 0.066095 0.037317 v -0.000014 0.064569 0.038952 v 0.008962 0.065582 0.034410 v 0.013328 0.065407 0.033726 v -0.075621 0.088995 0.038640 v -0.031608 0.087339 0.014541 v -0.077308 0.116330 0.025430 v -0.077797 0.097112 0.038897 v -0.067023 0.068954 0.026549 v -0.052851 0.068206 0.027645 v -0.046336 0.067315 0.027861 v -0.037439 0.068118 0.027285 v -0.035393 0.065850 0.028543 v -0.022155 0.066333 0.030133 v -0.010752 0.133472 -0.035047 v 0.004987 0.065964 0.035673 v 0.012658 0.067746 0.033397 v -0.018227 0.095636 -0.008359 v -0.072013 0.131096 -0.027653 v -0.056050 0.032576 0.018945 v 0.016599 0.096409 0.003368 v -0.064533 0.065701 0.027702 v -0.041134 0.065397 0.027357 v -0.035038 0.070937 0.026142 v -0.032019 0.066895 0.029429 v -0.028835 0.067477 0.028663 v -0.026283 0.067905 0.029544 v -0.010683 0.068499 0.030364 v -0.089826 0.084901 -0.010034 v 0.006039 0.067362 0.032925 v 0.011550 0.069911 0.032798 v 0.014924 0.070210 0.032152 v -0.045320 0.129851 -0.008204 v -0.075472 0.122875 0.012888 v -0.049771 0.067238 0.028955 v -0.048145 0.070481 0.026599 v -0.008966 0.069570 0.029418 v -0.020888 0.095338 -0.001915 v 0.002472 0.069424 0.029849 v 0.007329 0.069912 0.031589 v -0.040277 0.086878 0.016028 v -0.003019 0.099093 -0.003652 v -0.074450 0.069439 0.022729 v -0.064900 0.069306 0.027363 v -0.060926 0.069818 0.027574 v -0.043574 0.068486 0.027640 v -0.029221 0.071236 0.027319 v -0.020268 0.070785 0.028758 v -0.015698 0.071365 0.028446 v 0.004874 0.070218 0.030011 v 0.016848 0.071462 0.030663 v 0.004956 0.088525 0.021420 v 0.044097 0.059976 0.008072 v -0.072895 0.113977 0.028745 v -0.072039 0.072100 0.023167 v -0.055781 0.068297 0.028579 v -0.051503 0.071120 0.026378 v -0.049986 0.073180 0.025128 v -0.045100 0.071934 0.027002 v -0.037322 0.073406 0.024060 v -0.031536 0.070738 0.027377 v -0.016978 0.070985 0.028986 v 0.001132 0.071286 0.029178 v -0.038611 0.090333 0.013099 v 0.033722 0.082661 0.009015 v -0.063348 0.120424 -0.022512 v -0.077306 0.120013 0.019617 v -0.042384 0.138522 -0.014876 v -0.074290 0.073180 0.022267 v -0.057638 0.072518 0.026797 v -0.040310 0.070857 0.025783 v -0.022469 0.070182 0.029358 v -0.014302 0.074552 0.028514 v -0.010003 0.071465 0.029007 v -0.002769 0.074647 0.029412 v 0.011555 0.098367 0.003374 v -0.037719 0.142220 -0.024597 v -0.068664 0.074604 0.023262 v -0.061071 0.073197 0.025946 v -0.043308 0.074008 0.026151 v -0.032262 0.075355 0.024498 v -0.025032 0.072109 0.028015 v -0.018779 0.074795 0.027635 v -0.007432 0.074697 0.029454 v 0.007649 0.074068 0.027044 v 0.011344 0.073885 0.028769 v 0.018486 0.076396 0.025253 v 0.023507 0.073026 0.025234 v -0.074352 0.094684 0.038307 v -0.056454 0.081716 0.021161 v 0.018205 0.095163 0.005267 v 0.018720 0.093539 0.009857 v -0.070944 0.076894 0.022942 v -0.062134 0.078469 0.022682 v -0.052694 0.075243 0.025054 v -0.038573 0.077202 0.022411 v -0.028150 0.076141 0.024624 v -0.010180 0.078342 0.027998 v 0.004494 0.073801 0.027431 v 0.008798 0.076614 0.025786 v 0.010437 0.075493 0.026206 v 0.020468 0.075494 0.025395 v -0.054129 0.081332 0.020700 v -0.067917 0.076879 0.023067 v -0.054728 0.075423 0.025106 v -0.051732 0.077852 0.023081 v -0.047844 0.076048 0.024862 v -0.042079 0.078777 0.022522 v -0.000022 0.075911 0.028417 v 0.013217 0.080521 0.024136 v 0.019134 0.078402 0.024065 v -0.047974 0.080378 0.021220 v -0.086500 0.088572 -0.016638 v -0.030759 0.082733 0.019283 v -0.019605 0.079632 0.025224 v -0.004900 0.079782 0.027578 v -0.020263 0.089064 0.016865 v 0.014402 0.076447 0.026167 v -0.078001 0.125738 -0.034254 v 0.041179 0.063475 -0.019684 v -0.034415 0.141325 -0.015666 v -0.031443 0.144059 -0.018177 v -0.092548 0.084823 0.009485 v -0.033959 0.139850 -0.015802 v -0.061038 0.081079 0.021749 v -0.058664 0.079880 0.021631 v -0.036175 0.078331 0.021807 v -0.060710 0.099896 -0.022137 v -0.005637 0.073582 -0.037281 v 0.027940 0.084322 0.015839 v -0.029998 0.093329 -0.008709 v -0.013203 0.004037 0.036155 v -0.004920 0.006144 0.033656 v 0.002920 0.006325 0.031493 v 0.021359 0.008176 0.026867 v -0.060906 0.115006 0.022528 v -0.050080 0.003809 0.031545 v 0.017171 0.006625 0.029007 v -0.087528 0.106544 -0.006811 v -0.049712 0.004906 0.031575 v -0.022513 0.009098 0.039495 v -0.000379 0.009263 0.032184 v 0.013640 0.009960 0.030211 v 0.042779 0.062709 0.010633 v -0.053924 0.007339 0.032645 v -0.044979 0.005821 0.030186 v -0.041706 0.008027 0.028489 v -0.017471 0.010277 0.037834 v -0.012307 0.010687 0.035831 v -0.006681 0.010512 0.034055 v 0.016998 0.011484 0.029542 v 0.018310 0.010454 0.029206 v 0.023953 0.011537 0.025461 v -0.050847 0.061563 -0.036288 v -0.045294 0.011309 0.028783 v 0.044395 0.065006 -0.007379 v -0.024044 0.137670 -0.026395 v -0.028055 0.140956 -0.023585 v 0.013578 0.013785 0.029368 v 0.016173 0.013938 0.028883 v 0.026190 0.013256 0.023287 v 0.028269 0.013286 0.020978 v 0.030536 0.012295 0.016357 v -0.069138 0.052663 -0.032038 v -0.045052 0.062091 -0.036547 v 0.021013 0.087852 0.018367 v -0.066213 0.092248 0.035804 v -0.048504 0.010925 0.029489 v 0.022965 0.065808 0.031247 v -0.030968 0.141188 -0.019107 v 0.010216 0.014251 0.032200 v 0.010856 0.012747 0.030123 v 0.019782 0.012793 0.028059 v 0.023807 0.015758 0.024778 v 0.048757 0.015581 0.012010 v 0.051069 0.015158 0.008824 v -0.014083 0.140580 -0.033289 v -0.054657 0.115485 0.012529 v -0.060398 0.119578 0.020159 v -0.085693 0.068990 -0.013421 v -0.055175 0.109036 0.015068 v -0.022377 0.150804 -0.026014 v 0.031643 0.072677 0.020710 v 0.021895 0.016446 0.025994 v -0.017994 0.136285 -0.028611 v 0.023912 0.082869 0.019628 v -0.045664 0.123339 -0.006870 v -0.032421 0.132039 -0.018904 v -0.019767 0.128971 -0.019690 v -0.013186 0.137328 -0.031656 v 0.012124 0.016933 0.032981 v 0.015353 0.015304 0.029459 v 0.018408 0.015875 0.027717 v -0.038253 0.127516 -0.012907 v -0.012315 0.147379 -0.038202 v -0.023228 0.149414 -0.025476 v -0.044833 0.121174 -0.006407 v 0.011104 0.020857 0.036890 v 0.017412 0.016772 0.029101 v 0.029637 0.017119 0.021727 v 0.046131 0.017173 0.015791 v -0.055687 0.096150 0.022903 v 0.034478 0.062523 0.024193 v -0.043857 0.124833 -0.008871 v -0.066720 0.102943 0.029690 v -0.037065 0.128760 -0.014154 v 0.011020 0.081669 0.024140 v 0.019966 0.020311 0.031454 v 0.023359 0.020273 0.027668 v 0.024737 0.018793 0.025036 v 0.032303 0.017628 0.018792 v 0.053615 0.021585 0.012362 v 0.056723 0.020471 0.007362 v 0.038240 0.063240 -0.023806 v -0.065727 0.076482 0.023396 v 0.015836 0.059596 0.036475 v 0.024201 0.071090 0.027221 v -0.041327 0.124271 -0.008352 v 0.037614 0.066846 -0.024127 v -0.013491 0.143690 -0.035246 v 0.015465 0.020687 0.032970 v 0.027189 0.018784 0.023717 v 0.046263 0.019838 0.017165 v 0.051144 0.020268 0.013550 v 0.056089 0.022633 0.009788 v -0.054126 0.016965 0.022384 v 0.025559 0.085375 0.016445 v -0.040826 0.118238 -0.010437 v -0.039454 0.124157 -0.008832 v -0.048310 0.120963 -0.004162 v 0.025771 0.023117 0.027568 v 0.034685 0.019658 0.017758 v 0.030639 0.080906 0.016647 v -0.056392 0.086595 0.023920 v -0.075455 0.035030 0.000686 v -0.034740 0.134091 -0.017935 v 0.015713 0.024680 0.034543 v 0.021354 0.024298 0.032646 v 0.031968 0.024134 0.024170 v 0.034639 0.022227 0.019578 v 0.037816 0.024550 0.016957 v -0.000867 0.071008 0.029551 v 0.053520 0.024503 0.013897 v -0.005812 0.070282 0.029179 v -0.015075 0.131826 -0.025466 v -0.046054 0.093135 0.010690 v -0.044546 0.127487 -0.007980 v -0.012780 0.131439 -0.027041 v -0.062670 0.105512 0.021525 v -0.060424 0.104713 0.020418 v -0.051268 0.096792 0.018564 v 0.011149 0.023893 0.038072 v 0.019461 0.023795 0.033718 v 0.024468 0.024590 0.029332 v 0.028539 0.025603 0.026825 v 0.033216 0.028049 0.024882 v 0.037491 0.060675 0.021362 v -0.062443 0.090088 0.030082 v -0.030326 0.136904 -0.022007 v -0.060753 0.106745 0.019621 v 0.036350 0.027815 0.021311 v 0.059069 0.027349 0.007140 v -0.035282 0.132329 -0.017259 v -0.068348 0.107362 0.030867 v 0.007554 0.030114 0.040648 v 0.018480 0.028714 0.034296 v 0.027363 0.028113 0.029036 v -0.048168 0.088725 0.014481 v -0.034613 0.127252 -0.011828 v -0.060985 0.136419 -0.073576 v -0.052549 0.088778 0.020865 v 0.011668 0.029213 0.037255 v 0.013216 0.028224 0.036099 v 0.018445 0.031299 0.034467 v 0.020937 0.032477 0.032826 v 0.021767 0.028320 0.033106 v 0.030441 0.031199 0.026728 v 0.035985 0.032895 0.023451 v 0.039463 0.028858 0.016374 v -0.061020 0.097053 0.025647 v 0.056766 0.030495 0.011267 v 0.009933 0.030907 0.039901 v 0.024603 0.029548 0.030587 v 0.039497 0.033456 0.018810 v -0.064035 0.102349 0.024850 v 0.052222 0.034532 0.012668 v 0.053059 0.028763 0.014568 v -0.068032 0.112837 0.028048 v -0.070020 0.110895 0.030337 v -0.014571 0.150944 -0.036773 v 0.034164 0.032340 0.024960 v 0.055178 0.033943 0.011650 v -0.025174 0.132110 -0.021954 v -0.041096 0.126587 -0.011278 v -0.060034 0.112517 0.021852 v 0.011716 0.032185 0.038419 v 0.040692 0.031231 0.014981 v -0.017636 0.130309 -0.022205 v -0.089689 0.059207 -0.002180 v -0.063602 0.113577 0.023760 v -0.020410 0.147363 -0.030199 v -0.016744 0.129038 -0.022324 v -0.065895 0.086121 0.035922 v 0.014030 0.033750 0.038260 v 0.021289 0.035811 0.033686 v 0.024533 0.036234 0.030163 v 0.027671 0.031448 0.029185 v 0.029536 0.068303 0.025620 v -0.023348 0.130345 -0.020427 v -0.067694 0.087347 0.037771 v -0.017700 0.127528 -0.022264 v 0.043174 0.034828 0.012083 v -0.032661 0.136572 -0.019664 v -0.062049 0.094641 0.028002 v -0.029862 0.144670 -0.019243 v -0.028076 0.146741 -0.020738 v -0.048341 0.097618 0.013773 v 0.011248 0.088544 0.020909 v -0.061196 0.083231 0.023433 v 0.011520 0.037857 0.039691 v 0.015769 0.037339 0.037658 v 0.035742 0.038223 0.023111 v 0.038648 0.042051 0.019929 v 0.040882 0.035228 0.015283 v 0.043308 0.037655 0.011725 v 0.025947 0.070137 0.026462 v -0.053345 0.090629 0.022306 v -0.026015 0.128714 -0.016304 v -0.020852 0.152259 -0.027944 v -0.016122 0.152936 -0.034907 v -0.030843 0.125910 -0.012882 v -0.063482 0.082314 0.025660 v 0.022845 0.038510 0.033578 v 0.027404 0.037987 0.028376 v 0.032536 0.036702 0.025762 v -0.003416 0.069047 0.029422 v -0.014852 0.130180 -0.024499 v -0.048138 0.093185 0.015389 v 0.013748 0.041766 0.039482 v 0.020005 0.037527 0.035060 v 0.026239 0.041871 0.030396 v 0.029704 0.038800 0.026965 v -0.082241 0.045893 0.009798 v 0.012694 0.083734 0.022541 v 0.041059 0.072877 -0.009412 v -0.027258 0.144785 -0.022318 v 0.027542 0.072551 0.023651 v 0.016831 0.040820 0.037124 v 0.029545 0.041590 0.028673 v -0.050388 0.099432 0.015972 v -0.051421 0.084013 0.018788 v 0.027083 0.065103 0.028274 v -0.029884 0.130272 -0.018142 v -0.057785 0.095851 0.024839 v 0.015103 0.044075 0.039277 v 0.018452 0.043654 0.037890 v 0.021744 0.042312 0.035323 v 0.025289 0.042969 0.032526 v 0.031868 0.044123 0.028015 v 0.032815 0.041757 0.025959 v 0.036379 0.042211 0.023458 v 0.043492 0.043291 0.012127 v -0.072920 0.143535 -0.067337 v -0.042717 0.122880 -0.007631 v -0.049391 0.116106 -0.003380 v -0.055718 0.106304 0.016632 v -0.022850 0.125840 -0.018293 v 0.023735 0.044781 0.034438 v 0.026977 0.045358 0.031529 v 0.040946 0.040487 0.016695 v -0.012572 0.133399 -0.028427 v -0.035876 0.136016 -0.014829 v -0.047530 0.125697 -0.005832 v -0.045830 0.114496 -0.008533 v -0.015916 0.073036 -0.037054 v 0.039433 0.073746 0.007576 v -0.067828 0.099547 0.032559 v 0.010984 0.043521 0.040383 v 0.013753 0.046564 0.039807 v 0.020723 0.048653 0.036392 v 0.039451 0.049186 0.019784 v 0.042536 0.045924 0.013675 v -0.084424 0.078020 -0.010764 v -0.028358 0.127439 -0.013965 v 0.040445 0.074209 -0.004053 v 0.036592 0.071066 0.015970 v -0.042697 0.126082 -0.010020 v -0.065503 0.095213 0.033065 v -0.063974 0.086307 0.032569 v 0.024660 0.048131 0.034269 v 0.028193 0.046943 0.030683 v 0.036116 0.045700 0.023743 v 0.044284 0.047913 0.010695 v -0.049463 0.088664 0.017714 v -0.087250 0.104534 -0.010641 v -0.025862 0.140068 -0.025748 v -0.053300 0.103388 0.016191 v -0.056346 0.091575 0.025297 v 0.038439 0.068803 -0.022100 v -0.055635 0.111929 0.016359 v -0.059079 0.109297 0.018619 v 0.008680 0.048657 0.040629 v 0.033395 0.048212 0.027056 v -0.029519 0.133846 -0.021490 v -0.066151 0.082657 0.032692 v -0.063566 0.080234 0.022965 v -0.035979 0.130085 -0.015752 v -0.053843 0.110827 0.012246 v 0.017297 0.047339 0.038690 v 0.032407 0.051141 0.027595 v -0.040327 0.128620 -0.012404 v 0.033144 0.066524 0.023019 v -0.068516 0.083815 0.036743 v -0.041464 0.131936 -0.010195 v -0.068975 0.081821 0.035193 v -0.035508 0.124613 -0.011033 v -0.020356 0.132481 -0.024341 v 0.024255 0.076332 0.023969 v -0.020241 0.126047 -0.021563 v 0.005149 0.051425 0.042342 v 0.009393 0.052143 0.040966 v 0.016932 0.053893 0.036140 v 0.026707 0.049890 0.032006 v 0.035730 0.051140 0.023716 v 0.041137 0.049099 0.016914 v 0.030487 0.061866 0.027759 v 0.027673 0.076306 0.022722 v -0.068088 0.077953 0.023652 v -0.060961 0.090002 0.027706 v -0.063581 0.110408 0.023757 v -0.018378 0.148468 -0.032363 v -0.029871 0.121958 -0.018517 v 0.030026 0.077762 0.019502 v 0.012788 0.050789 0.038620 v 0.038521 0.073169 0.011929 v 0.024653 0.052597 0.033256 v 0.029390 0.051820 0.028835 v 0.043175 0.053133 0.013010 v -0.062351 0.085953 0.027972 v 0.027912 0.061203 0.029763 v -0.050006 0.092118 0.017845 v -0.062907 0.107820 0.022517 v -0.016555 0.144200 -0.033074 v -0.035560 0.125897 -0.010630 v 0.033070 0.056242 0.027822 v 0.040882 0.053394 0.017365 v 0.035337 0.068076 0.019638 v -0.070012 0.094553 0.037519 v -0.023272 0.135424 -0.025605 v -0.030945 0.128903 -0.016308 v -0.039329 0.132539 -0.011855 v 0.018981 0.084420 0.021372 v -0.073052 0.097234 0.037422 v -0.057238 0.101359 0.021421 v -0.020159 0.127485 -0.019483 v -0.065142 0.080088 0.024213 v 0.026185 0.054290 0.032495 v 0.035522 0.057497 0.024773 v 0.038507 0.056267 0.020310 v -0.023238 0.127508 -0.016799 v 0.021456 0.072515 0.027787 v -0.069956 0.103506 0.033569 v -0.042217 0.120837 -0.008168 v -0.058067 0.118386 0.019005 v -0.075288 0.100881 0.037478 v -0.064547 0.078715 0.022895 v -0.038272 0.130899 -0.014447 v -0.065079 0.100197 0.027768 v -0.061126 0.093021 0.027702 v 0.042052 0.053266 -0.022685 v -0.064999 0.105472 0.026330 v -0.057056 0.105416 0.017942 v 0.009550 0.057264 0.040087 v 0.012866 0.055890 0.039233 v 0.014614 0.055445 0.037531 v -0.056353 0.083088 0.021613 v 0.022460 0.059036 0.033531 v 0.028657 0.057626 0.029377 v -0.023496 0.144834 -0.027466 v -0.010817 0.134719 -0.031070 v -0.059616 0.117188 0.021104 v -0.065625 0.088636 0.036213 v -0.062409 0.101433 0.023968 v 0.045613 0.059891 -0.007367 v -0.052386 0.092276 0.020955 v -0.045885 0.116113 -0.006963 v 0.040667 0.057443 0.016301 v 0.035006 0.078588 0.012563 v -0.035285 0.121173 -0.013158 v -0.066541 0.109462 0.028264 v -0.020188 0.141754 -0.029993 v 0.028075 0.081276 0.018719 v -0.093338 0.089373 0.024838 v -0.027113 0.125654 -0.015171 v -0.038500 0.125700 -0.009748 v -0.059956 0.109926 0.020769 v -0.063896 0.092800 0.032180 v -0.048680 0.086676 0.016388 v -0.047950 0.086723 0.015454 v 0.012333 0.058979 0.038583 v -0.010944 0.136885 -0.032733 v 0.025840 0.062393 0.030984 v -0.070586 0.098279 0.035796 v -0.055533 0.115174 0.015175 v -0.046043 0.089649 0.012108 v -0.060582 0.086326 0.025914 v -0.052896 0.084845 0.019410 v -0.066171 0.113128 0.026295 v 0.020218 0.068527 0.031194 v 0.021610 0.079920 0.022403 v 0.038976 0.062251 0.018175 v -0.061558 0.128111 -0.048377 v 0.018170 0.002935 -0.025075 v 0.017798 0.002775 -0.028054 v 0.021743 0.005723 0.023806 v 0.042635 0.007784 -0.007409 v 0.037876 0.006751 -0.012708 v 0.021440 0.004700 -0.016940 v 0.021244 0.005064 -0.018569 v 0.016742 0.003297 -0.030944 v 0.042853 0.008920 -0.011694 v 0.039254 0.009116 -0.015848 v 0.019636 0.005245 -0.024363 v 0.018683 0.005031 -0.029322 v 0.015174 0.004395 -0.034775 v -0.051269 0.107585 -0.013100 v -0.010414 0.147671 -0.041742 v -0.064348 0.087647 -0.023374 v -0.039344 0.060883 -0.037896 v 0.049049 0.011467 -0.007140 v 0.022504 0.007931 -0.021587 v 0.022528 0.010604 -0.025713 v 0.020895 0.008736 -0.029246 v 0.017618 0.006608 -0.033816 v 0.006723 0.089679 -0.027554 v 0.024165 0.008783 0.023797 v 0.024934 0.007975 0.020281 v -0.062226 0.126210 -0.034147 v -0.009919 0.146931 -0.044095 v 0.046990 0.011966 -0.012703 v 0.023360 0.009397 -0.021864 v 0.020688 0.010528 -0.034208 v 0.019441 0.011382 -0.036487 v -0.091124 0.088493 -0.007749 v -0.009331 0.135930 -0.034358 v -0.080806 0.075838 -0.018048 v -0.061237 0.142695 -0.075625 v -0.034543 0.120085 -0.014894 v 0.051587 0.012930 -0.000741 v 0.048671 0.013898 -0.013905 v 0.025668 0.011946 -0.023039 v 0.022363 0.011021 -0.028161 v -0.009098 0.136845 -0.038598 v 0.040493 0.054244 -0.025840 v -0.018355 0.004442 0.038149 v 0.055334 0.017139 0.005171 v 0.055903 0.017222 0.002879 v 0.051501 0.013063 -0.004130 v 0.053898 0.016634 -0.010336 v 0.049286 0.012765 -0.011364 v 0.048699 0.016772 -0.017272 v 0.025909 0.013165 -0.026574 v 0.022738 0.012063 -0.029282 v -0.062485 0.130619 -0.064650 v -0.089975 0.100500 0.019012 v -0.013568 0.129891 -0.026740 v 0.056271 0.017217 -0.001979 v 0.055426 0.017228 -0.007656 v 0.029061 0.014847 -0.022313 v 0.027661 0.014643 -0.026855 v 0.026163 0.014629 -0.030786 v 0.022383 0.012853 -0.031597 v -0.061627 0.128074 -0.043029 v -0.008756 0.138238 -0.038107 v 0.056001 0.019505 -0.010587 v -0.049944 0.112711 -0.003765 v -0.042418 0.115580 -0.012798 v -0.061929 0.122710 -0.044806 v 0.057940 0.020446 0.003689 v 0.053319 0.017866 -0.013350 v -0.038193 0.001564 -0.044196 v 0.027415 0.016014 -0.031327 v 0.057186 0.019380 -0.006812 v 0.029709 0.018187 -0.028879 v 0.026827 0.019212 -0.035166 v -0.006582 0.067879 -0.038695 v -0.049048 0.103689 -0.010362 v -0.060791 0.138894 -0.075525 v -0.008652 0.139904 -0.041152 v -0.029920 0.073718 -0.036444 v -0.062334 0.116840 -0.026563 v 0.039435 0.067679 0.013622 v 0.058490 0.020923 -0.002672 v 0.031871 0.019631 -0.024553 v 0.028699 0.019467 -0.032819 v -0.053708 0.114100 0.009373 v -0.061416 0.125148 -0.040873 v -0.062334 0.119758 -0.026690 v 0.059045 0.026511 -0.009269 v 0.052567 0.021985 -0.017091 v 0.045502 0.058259 -0.010454 v -0.062312 0.128596 -0.038466 v -0.094183 0.088166 0.000596 v -0.063960 0.121930 -0.052608 v 0.058729 0.024289 0.006365 v 0.060771 0.027273 -0.003568 v 0.054618 0.023535 -0.015199 v 0.031367 0.022534 -0.028880 v 0.028583 0.022053 -0.033560 v -0.018544 0.061442 -0.048945 v -0.065601 0.034226 0.016716 v 0.041008 0.059393 -0.023595 v -0.076184 0.117637 -0.024959 v -0.081078 0.065281 -0.021684 v 0.044551 0.062497 0.000962 v 0.060304 0.026625 0.001841 v 0.054751 0.027704 -0.016394 v -0.091303 0.085464 0.013416 v 0.036146 0.022433 -0.021495 v 0.035324 0.025268 -0.025538 v 0.029919 0.025464 -0.031813 v -0.029086 0.003112 0.037223 v 0.057981 0.027766 -0.012062 v -0.090821 0.094177 -0.008600 v 0.037927 0.024596 -0.020281 v -0.061559 0.137319 -0.069783 v -0.062099 0.123075 -0.030604 v -0.062550 0.129965 -0.060408 v 0.060082 0.029852 -0.007990 v 0.039387 0.027932 -0.019902 v 0.037735 0.028741 -0.024887 v 0.034433 0.026024 -0.027663 v 0.029631 0.028587 -0.034044 v 0.025023 0.026027 -0.038610 v -0.061594 0.125848 -0.037565 v -0.065740 0.029647 0.007377 v -0.052411 0.116354 0.005261 v 0.058594 0.032801 0.008187 v 0.061038 0.032084 -0.003056 v -0.086342 0.075485 -0.003650 v 0.041101 0.031420 -0.018660 v 0.035278 0.031128 -0.028282 v 0.032448 0.028597 -0.031828 v 0.026745 0.028843 -0.037306 v -0.048305 0.104481 -0.004741 v -0.052236 0.112573 0.002870 v 0.060019 0.033823 0.004933 v 0.060839 0.032802 0.001478 v 0.029682 0.030226 -0.034272 v -0.093250 0.095309 -0.001651 v -0.081412 0.114069 -0.014749 v -0.062387 0.135069 -0.062380 v 0.044459 0.058564 -0.015826 v -0.040234 0.117398 -0.011717 v 0.044778 0.055118 -0.015953 v 0.060009 0.036471 -0.003924 v -0.086563 0.076818 -0.001774 v 0.037002 0.033855 -0.027662 v 0.032216 0.032948 -0.033055 v -0.073057 0.122432 -0.046750 v -0.071445 0.148552 -0.070933 v -0.062792 0.138406 -0.064904 v -0.061621 0.122623 -0.037695 v 0.058297 0.034664 -0.010413 v 0.039637 0.031886 -0.022841 v 0.038793 0.036356 -0.026574 v 0.034652 0.034584 -0.030484 v 0.028791 0.033984 -0.034587 v 0.026471 0.033018 -0.036797 v -0.092440 0.099101 -0.001696 v -0.071978 0.115444 -0.043445 v -0.022427 0.087795 -0.025727 v -0.008623 0.142573 -0.041917 v -0.062716 0.132018 -0.047790 v 0.059802 0.037633 0.000127 v 0.057887 0.037472 -0.008639 v 0.042039 0.034888 -0.017926 v -0.062319 0.114350 -0.021342 v -0.044018 0.115103 -0.010018 v -0.061729 0.122320 -0.033615 v -0.052670 0.105550 0.012494 v -0.050582 0.104366 -0.013421 v -0.053159 0.113247 0.007943 v -0.084201 0.076858 0.010296 v 0.041832 0.038185 -0.021334 v 0.036726 0.036729 -0.028638 v 0.028381 0.037823 -0.037110 v -0.062181 0.131013 -0.056828 v -0.047911 0.103968 -0.000771 v -0.089039 0.105924 0.013817 v 0.030522 0.036834 -0.034055 v -0.031110 0.091337 -0.018100 v -0.089470 0.087692 -0.011471 v -0.030603 0.122289 -0.016091 v -0.049484 0.105778 0.003344 v -0.009590 0.134527 -0.033880 v -0.076808 0.115963 -0.022032 v -0.076158 0.081302 -0.019840 v -0.089945 0.103516 0.008555 v -0.086889 0.073818 0.003310 v 0.034031 0.037777 -0.031364 v 0.032673 0.039448 -0.032669 v -0.092535 0.089514 0.014354 v -0.049693 0.107609 -0.009317 v 0.043441 0.057071 -0.018845 v -0.088184 0.089248 -0.014316 v -0.026029 0.057526 -0.049143 v 0.043681 0.040506 -0.016124 v -0.092478 0.091083 -0.006106 v -0.062519 0.127381 -0.055435 v 0.045391 0.058930 -0.001794 v -0.083464 0.079626 0.029846 v -0.086809 0.081328 -0.010697 v -0.086556 0.068853 -0.010127 v -0.062002 0.134547 -0.066668 v -0.090827 0.106146 0.003450 v 0.046401 0.043972 -0.006374 v 0.042310 0.043353 -0.020481 v 0.033651 0.043393 -0.031272 v -0.090944 0.080641 0.000105 v -0.092629 0.091852 0.018571 v -0.012318 0.131084 -0.030455 v -0.051361 0.116747 0.000225 v 0.043714 0.067036 -0.004977 v -0.037361 0.118285 -0.014198 v -0.058991 0.003463 0.031335 v -0.052430 0.109679 0.006546 v 0.045339 0.043002 -0.012731 v 0.041772 0.045614 -0.021192 v 0.038392 0.044074 -0.025721 v 0.036152 0.042438 -0.027839 v -0.086695 0.075528 -0.000104 v 0.043907 0.064129 -0.011921 v -0.053654 0.118592 0.010544 v 0.041979 0.058140 -0.022764 v -0.073736 0.112317 -0.024581 v -0.048376 0.112935 -0.006725 v 0.046557 0.043852 -0.001688 v -0.084164 0.064978 -0.017991 v -0.086435 0.076554 0.003380 v -0.084111 0.075540 0.010301 v -0.062230 0.119292 -0.030804 v -0.048023 0.112430 -0.009128 v -0.071960 0.130288 -0.056553 v 0.046026 0.046855 0.005518 v 0.036723 0.045023 -0.027779 v 0.033592 0.047280 -0.032704 v -0.084106 0.068175 -0.017922 v -0.084482 0.070203 -0.015139 v -0.089767 0.105512 0.018524 v -0.009652 0.140024 -0.036864 v -0.079452 0.062748 -0.024675 v -0.050984 0.110769 0.002039 v -0.072770 0.031928 0.002654 v -0.049405 0.110681 -0.006867 v 0.046159 0.048633 -0.009344 v 0.044756 0.046313 -0.015873 v 0.039033 0.046324 -0.025482 v -0.069126 0.108961 -0.023091 v 0.044722 0.053291 0.008924 v 0.046307 0.050040 -0.004671 v 0.045390 0.049720 -0.012598 v 0.043353 0.049047 -0.018402 v 0.040042 0.050744 -0.026450 v 0.037929 0.049956 -0.029529 v -0.089451 0.062913 0.001839 v -0.087645 0.093653 -0.015131 v -0.083408 0.110708 -0.011682 v -0.049212 0.110842 -0.010388 v -0.050044 0.109128 -0.010857 v -0.063382 0.124151 -0.027450 v 0.046138 0.048289 0.001095 v 0.045837 0.053741 -0.008344 v 0.044629 0.051632 -0.013488 v 0.041245 0.048082 -0.022376 v -0.086906 0.078418 -0.005851 v -0.093980 0.094640 0.002264 v -0.062168 0.131561 -0.053751 v -0.063868 0.135155 -0.052666 v -0.062428 0.123764 -0.049954 v -0.063857 0.147456 -0.073468 v -0.037341 0.095846 -0.009104 v -0.064970 0.147911 -0.074569 v -0.062784 0.146167 -0.073665 v -0.044708 0.096748 -0.012481 v -0.064066 0.145088 -0.069428 v -0.067601 0.148630 -0.069704 v -0.070039 0.149247 -0.070830 v -0.066053 0.122586 -0.010880 v -0.032519 0.093075 0.005183 v -0.017555 0.095837 0.003464 v -0.067589 0.145874 -0.065858 v -0.073480 0.148627 -0.068599 v -0.070905 0.149006 -0.067866 v -0.042869 0.097028 -0.006622 v -0.026500 0.090690 0.008720 v -0.068173 0.124126 0.009287 v -0.045205 0.135918 -0.012465 v -0.036920 0.140936 -0.015417 v -0.046580 0.098636 0.008540 v -0.085838 0.121087 -0.000812 v -0.065851 0.122596 -0.018977 v -0.048593 0.128609 -0.007038 v -0.066794 0.141455 -0.060577 v -0.027392 0.088017 0.013822 v -0.066679 0.131806 -0.032949 v -0.074042 0.123739 0.009233 v -0.047253 0.102362 -0.003186 v -0.070616 0.123894 0.010182 v -0.030340 0.093250 0.002593 v 0.050004 0.038136 0.009502 v -0.012329 0.151703 -0.041061 v -0.008530 0.067607 0.034339 v -0.065047 0.141347 -0.063441 v -0.064793 0.120676 0.019952 v -0.057873 0.123339 0.000473 v 0.013210 0.093168 0.016139 v -0.065410 0.123579 -0.003925 v -0.045062 0.099078 -0.003983 v -0.070847 0.145422 -0.062361 v -0.074185 0.145626 -0.060940 v -0.073818 0.147852 -0.064745 v -0.067586 0.122820 -0.013530 v -0.055826 0.121151 0.012772 v -0.052391 0.119393 0.000787 v -0.058172 0.125307 -0.007720 v 0.015525 0.095358 0.010414 v -0.014127 0.153061 -0.039811 v -0.064580 0.137784 -0.058013 v -0.061118 0.120890 0.018690 v -0.084284 0.078541 0.012190 v -0.087349 0.061819 -0.009207 v -0.043803 0.097581 -0.002130 v -0.066781 0.131170 -0.072249 v -0.038936 0.092883 -0.021974 v 0.009810 0.097880 0.008149 v -0.071394 0.143424 -0.058372 v -0.064970 0.122605 0.015019 v -0.092954 0.086365 0.019699 v -0.080851 0.111516 -0.015719 v -0.069305 0.122090 0.016781 v -0.075599 0.120275 -0.027875 v -0.087587 0.064080 -0.011235 v -0.044188 0.094091 0.005257 v -0.015280 0.154423 -0.038509 v -0.084033 0.120472 -0.006447 v -0.065428 0.137562 -0.054366 v -0.091047 0.081501 -0.003653 v -0.070394 0.123730 -0.012472 v -0.091180 0.116331 0.000042 v -0.087999 0.065823 -0.009353 v -0.049014 0.094052 -0.021114 v -0.016684 0.155189 -0.035776 v -0.068188 0.139514 -0.052978 v -0.077521 0.142578 -0.057525 v -0.012765 0.066042 0.035334 v -0.075404 0.147039 -0.067304 v -0.086713 0.120949 0.004663 v -0.045464 0.093912 0.008929 v -0.050167 0.104713 0.007296 v -0.024381 0.090156 0.011842 v 0.000479 0.091801 0.019275 v -0.043799 0.095166 0.004295 v -0.012330 0.065212 0.036741 v -0.018112 0.154061 -0.032168 v -0.035636 0.095637 -0.005508 v -0.072350 0.141434 -0.053046 v -0.084862 0.059583 -0.018634 v -0.076638 0.061773 -0.027719 v -0.089001 0.064113 -0.006400 v -0.092572 0.094327 0.015000 v -0.031395 0.089880 0.010426 v -0.088472 0.119392 -0.001964 v -0.043384 0.092295 0.007809 v 0.000967 0.066546 0.036345 v -0.034955 0.090778 0.011379 v -0.054429 0.121508 0.004722 v -0.074851 0.142673 -0.055397 v 0.058168 0.039143 -0.004387 v 0.055127 0.040812 -0.004779 v -0.094758 0.091786 0.004945 v -0.043933 0.134788 -0.010822 v -0.001251 0.098276 0.007484 v 0.032798 0.083899 -0.013427 v -0.073336 0.113731 -0.029131 v -0.089783 0.066281 0.001307 v -0.094338 0.089594 0.009533 v -0.092055 0.083561 0.022431 v -0.088949 0.095808 -0.010875 v -0.042860 0.090309 0.011120 v -0.081797 0.119107 0.017944 v -0.067087 0.117953 0.023731 v -0.058346 0.123770 -0.003744 v -0.055950 0.123781 -0.003166 v -0.076987 0.079141 -0.019335 v -0.028613 0.090059 0.008497 v -0.068186 0.124397 -0.017972 v -0.021731 0.153036 -0.032682 v -0.067079 0.124130 0.001527 v -0.069868 0.139206 -0.048474 v -0.065270 0.124039 0.008538 v -0.071900 0.127809 -0.021547 v -0.073578 0.125376 -0.018276 v 0.055184 0.041094 0.001313 v 0.053034 0.040811 -0.006037 v 0.047795 0.041352 -0.001680 v -0.029686 0.086513 0.015383 v -0.004212 0.095105 0.015274 v -0.086068 0.063925 -0.014378 v -0.088457 0.060703 -0.006844 v -0.089494 0.061152 0.006081 v -0.080493 0.079274 -0.015660 v -0.068470 0.118946 0.022877 v -0.030573 0.093811 -0.001371 v -0.046428 0.100391 0.004890 v 0.003835 0.067836 0.032145 v -0.074641 0.140375 -0.050646 v -0.032986 0.094742 -0.001324 v -0.049595 0.102129 0.011288 v -0.054552 0.122456 -0.000910 v 0.038563 0.077199 -0.005640 v 0.035462 0.081019 -0.011008 v 0.023201 0.091928 -0.012244 v 0.020025 0.093606 -0.013500 v -0.075348 0.116406 -0.030101 v -0.092592 0.085330 0.026115 v -0.061187 0.123791 0.001706 v -0.045075 0.097621 0.005506 v -0.020744 0.153607 -0.028889 v -0.021549 0.153737 -0.029627 v -0.023856 0.152143 -0.029089 v -0.065841 0.136327 -0.046884 v -0.076665 0.138525 -0.048457 v -0.020656 0.091794 0.010600 v -0.074792 0.124041 -0.000218 v 0.057257 0.039962 0.001657 v 0.007949 0.096907 0.012050 v -0.038782 0.095905 -0.001105 v -0.090644 0.102088 -0.003646 v -0.090801 0.107076 0.006106 v -0.092276 0.085145 -0.005529 v -0.074218 0.124289 -0.015822 v -0.069513 0.137012 -0.041378 v -0.073287 0.138944 -0.045551 v -0.072409 0.124165 0.005438 v -0.000178 0.069235 0.030020 v 0.052408 0.041561 0.000301 v -0.013773 0.092047 0.016555 v -0.056259 0.122186 0.009588 v -0.084150 0.074457 -0.013227 v 0.015046 0.087189 0.020633 v -0.079465 0.122462 -0.005260 v -0.045181 0.097716 -0.009125 v 0.019898 0.089658 0.016931 v -0.025787 0.150765 -0.027181 v -0.059419 0.122440 0.013041 v -0.064977 0.133396 -0.040728 v 0.017977 0.092481 0.012954 v -0.069614 0.120482 0.020374 v 0.013606 0.094739 0.013578 v 0.058085 0.037467 0.005745 v 0.048566 0.041309 -0.000686 v -0.038108 0.093192 0.007841 v -0.076611 0.122703 -0.008682 v -0.072140 0.123448 -0.010718 v -0.061698 0.123845 0.007044 v -0.082943 0.079701 -0.013579 v -0.000868 0.096967 0.012039 v -0.024639 0.151014 -0.025029 v -0.057536 0.123139 0.004741 v 0.003072 0.098384 0.008490 v 0.054779 0.040206 0.005360 v 0.046496 0.042936 0.001491 v -0.001334 0.067805 0.034437 v 0.013462 0.097491 -0.009495 v -0.086584 0.072335 -0.008248 v -0.087226 0.078193 0.003357 v -0.030384 0.147178 -0.027019 v -0.081735 0.122745 0.001495 v -0.026093 0.150744 -0.025602 v -0.072339 0.137631 -0.041359 v -0.062317 0.123263 0.011375 v -0.005231 0.098467 0.004531 v 0.047143 0.041427 0.001669 v -0.005154 0.092078 0.019070 v -0.056903 0.124895 -0.005513 v -0.041812 0.094720 0.003544 v 0.027316 0.089835 -0.008223 v 0.019508 0.094783 -0.008781 v -0.074539 0.145920 -0.068091 v -0.072532 0.146954 -0.070055 v -0.080465 0.070399 -0.021152 v -0.060270 0.123676 -0.004384 v 0.022150 0.089832 0.015127 v -0.029861 0.148025 -0.024479 v -0.075409 0.136660 -0.042092 v -0.054345 0.120316 0.010439 v 0.053126 0.039042 0.008106 v 0.047426 0.039869 0.004050 v 0.046204 0.041718 0.004173 v -0.078758 0.120786 -0.012358 v -0.053305 0.124121 -0.003652 v -0.010121 0.095742 0.011634 v -0.076041 0.122515 -0.014480 v -0.043417 0.096249 0.001213 v 0.036685 0.079554 0.002745 v 0.033143 0.084590 -0.005106 v 0.031002 0.086813 -0.007028 v 0.023593 0.092964 -0.004159 v -0.075106 0.117827 -0.039632 v -0.059992 0.124023 -0.009283 v -0.008510 0.097309 0.008674 v -0.027366 0.093616 -0.002633 v -0.051016 0.119475 -0.002161 v -0.067326 0.134102 -0.037510 v 0.054888 0.036652 0.010178 v 0.051216 0.040692 0.005114 v -0.024103 0.093230 0.003940 v 0.016898 0.096503 -0.002943 v 0.001081 0.099012 -0.009923 v -0.088444 0.069547 0.005298 v -0.088601 0.069761 -0.004728 v -0.036167 0.144125 -0.022866 v -0.028895 0.148277 -0.022177 v -0.032354 0.146292 -0.022266 v 0.046526 0.038155 0.007657 v 0.045430 0.040905 0.006608 v -0.073844 0.116664 0.025743 v 0.001756 0.093753 0.017143 v 0.034108 0.083020 0.003862 v 0.028015 0.089606 -0.000343 v 0.019575 0.095181 0.000975 v 0.013704 0.097863 -0.004561 v 0.009915 0.098413 -0.010256 v -0.071459 0.076329 -0.025363 v -0.071509 0.002743 -0.005656 v -0.066851 0.003495 0.000233 v -0.065600 0.004560 0.012222 v -0.066410 0.004270 0.014501 v -0.066707 0.005867 0.020005 v -0.063741 0.005885 0.027507 v -0.038782 0.004818 0.028579 v -0.072231 0.004985 -0.006235 v -0.067753 0.005403 -0.000844 v -0.064679 0.005667 0.010164 v -0.065908 0.006197 0.013848 v -0.066731 0.005587 0.016435 v -0.066421 0.004606 0.023193 v -0.060305 0.005233 0.031039 v -0.057719 0.006729 0.032281 v -0.084812 0.045744 0.002062 v -0.039260 0.007098 0.027598 v -0.036240 0.006541 0.031588 v -0.033272 0.006907 0.035873 v -0.030574 0.008009 0.037333 v -0.028864 0.006596 0.039138 v -0.025019 0.004671 0.039673 v -0.058384 0.064180 -0.035240 v -0.072310 0.004837 -0.010696 v -0.063719 0.003716 0.003498 v -0.061461 0.005042 0.005595 v -0.059587 0.006261 0.005912 v -0.064162 0.006932 0.011940 v -0.065499 0.007702 0.014993 v -0.065240 0.008106 0.017734 v -0.064354 0.010268 0.023074 v -0.062125 0.009341 0.028236 v -0.036747 0.009440 0.030447 v -0.030023 0.062319 -0.038845 v -0.050958 0.064341 -0.036874 v 0.050730 0.038578 -0.010603 v -0.071015 0.006959 -0.010365 v -0.072540 0.005907 -0.008539 v -0.071485 0.007325 -0.006680 v -0.059564 0.007551 0.004844 v -0.041791 0.140092 -0.017569 v -0.035484 0.008932 0.031893 v -0.033420 0.008793 0.035598 v -0.024543 0.010035 0.039482 v -0.080642 0.064484 0.019374 v -0.085172 0.099826 0.034313 v -0.071336 0.006966 -0.011506 v -0.070417 0.008557 -0.010576 v -0.065585 0.008959 -0.001398 v -0.061653 0.007221 0.003134 v -0.076586 0.065353 0.022505 v -0.055597 0.016077 0.024293 v -0.033155 0.011524 0.033740 v -0.027891 0.009413 0.038775 v -0.074946 0.064447 0.024511 v -0.069831 0.010335 -0.007663 v -0.060519 0.012280 0.028067 v -0.073086 0.116336 -0.044999 v -0.038150 0.010595 0.027476 v -0.035518 0.012852 0.029437 v -0.041207 0.054857 -0.036049 v -0.067408 0.012482 -0.009330 v -0.067448 0.012195 -0.007235 v -0.065821 0.011013 -0.003894 v -0.063255 0.009650 -0.000251 v -0.018690 0.044184 0.040779 v -0.060298 0.013795 0.026236 v -0.079261 0.053419 0.021246 v -0.034018 0.011983 0.031482 v -0.028110 0.014452 0.035255 v -0.019368 0.066428 0.030006 v -0.014325 0.067733 0.030057 v -0.087982 0.106009 0.026387 v -0.075486 0.131817 -0.032279 v -0.059167 0.011556 0.000071 v -0.058348 0.015068 0.025322 v -0.082014 0.098832 0.037237 v -0.035979 0.015060 0.025298 v -0.031279 0.014832 0.030673 v -0.028062 0.015904 0.033539 v -0.084428 0.062628 0.015288 v -0.063891 0.013550 -0.006145 v -0.058727 0.014908 -0.005535 v -0.056152 0.014812 -0.002697 v -0.016549 0.066287 0.031451 v -0.033230 0.014787 0.029635 v -0.076061 0.128514 -0.027189 v -0.049593 0.132856 -0.011562 v -0.073646 0.041400 0.019338 v -0.084810 0.111248 0.025847 v -0.070863 0.068568 0.025208 v -0.078113 0.135033 -0.044587 v -0.027277 0.046051 0.032230 v -0.051929 0.014278 0.001774 v -0.092336 0.094075 0.024629 v -0.087634 0.110711 0.022686 v -0.076414 0.126186 -0.024736 v -0.090896 0.115923 0.009748 v -0.081696 0.047128 0.014918 v -0.087178 0.058785 0.011159 v -0.022422 0.060278 0.036944 v -0.058344 0.016124 -0.007798 v -0.019137 0.050461 0.042948 v -0.051384 0.018256 0.019306 v -0.049596 0.018874 0.021415 v -0.088461 0.057988 0.008299 v -0.032143 0.019482 0.022935 v -0.033266 0.017150 0.025761 v -0.030330 0.017882 0.027935 v -0.026528 0.017750 0.031425 v -0.056448 0.027280 0.008056 v -0.026721 0.056641 0.033985 v -0.022828 0.063192 0.031779 v -0.082703 0.090230 0.034794 v -0.076727 0.129153 -0.030023 v -0.056134 0.017127 -0.004881 v -0.087897 0.096366 0.031451 v -0.030949 0.019153 0.024330 v -0.028633 0.018925 0.026921 v -0.050040 0.130556 -0.008910 v -0.029459 0.053336 0.029929 v -0.078237 0.050188 0.021023 v -0.053612 0.021320 -0.003602 v -0.051334 0.017216 -0.000277 v -0.041023 0.135797 -0.025505 v -0.050891 0.020000 0.018191 v -0.028552 0.020191 0.022883 v -0.026035 0.020115 0.025065 v -0.084123 0.073788 0.011328 v -0.027573 0.051029 0.034328 v -0.046999 0.135965 -0.014302 v -0.050177 0.021315 0.000447 v -0.076071 0.123433 -0.019183 v -0.047577 0.021439 0.022325 v -0.090046 0.086773 0.030956 v -0.027298 0.022117 0.022515 v -0.026413 0.060712 0.030865 v -0.043365 0.059009 -0.037224 v -0.050828 0.022266 0.004221 v -0.049212 0.023672 0.020000 v -0.024059 0.020182 0.027022 v -0.021935 0.022487 0.030330 v -0.019057 0.020934 0.033189 v -0.051173 0.023613 0.000748 v -0.052026 0.023938 0.004106 v -0.052121 0.024423 0.006484 v -0.092411 0.088055 0.028065 v -0.090653 0.113217 0.012411 v -0.013661 0.025199 0.036998 v -0.072517 0.048345 0.024479 v -0.054594 0.025442 0.005466 v -0.052769 0.025545 0.007474 v -0.053000 0.027344 0.011391 v -0.049890 0.029062 0.019416 v -0.019285 0.025733 0.034337 v -0.081823 0.076838 0.013803 v -0.086236 0.097553 0.034117 v -0.074528 0.117300 -0.043793 v -0.083868 0.057050 0.015092 v -0.077773 0.141007 -0.055151 v -0.086767 0.069633 0.009697 v -0.082802 0.051051 0.015883 v -0.054021 0.027230 0.009504 v -0.052562 0.028755 0.014507 v -0.050923 0.026481 0.017189 v -0.045408 0.028577 0.024314 v -0.070165 0.063400 0.027553 v -0.024028 0.026158 0.027310 v -0.022465 0.030712 0.030048 v -0.017173 0.028076 0.037111 v -0.082366 0.095968 0.037502 v -0.057352 0.029449 0.011892 v -0.054101 0.028622 0.012297 v -0.076415 0.146867 -0.065098 v -0.089198 0.083249 0.029965 v -0.085037 0.116031 0.019794 v -0.012831 0.068882 0.029265 v -0.078113 0.138494 -0.051059 v -0.080889 0.073414 0.015725 v -0.051921 0.017136 0.020812 v -0.090060 0.090263 0.031202 v -0.077512 0.055775 0.023426 v -0.048372 0.031730 0.021826 v -0.078557 0.083600 -0.019444 v -0.085947 0.092337 0.034033 v -0.018904 0.062151 0.037905 v -0.085570 0.066202 0.013285 v -0.029812 0.046917 0.028034 v -0.075928 0.082708 -0.020052 v 0.004609 0.077130 -0.034844 v -0.022702 0.064360 0.030495 v -0.019543 0.065486 0.030694 v -0.081907 0.084312 -0.017406 v -0.017122 0.064301 0.036310 v -0.017820 0.066914 0.029581 v -0.078458 0.085649 0.036318 v -0.076673 0.072625 0.020267 v -0.025158 0.055579 0.037172 v -0.025803 0.040805 0.030451 v -0.054098 0.128398 -0.008443 v -0.044133 0.119866 -0.020941 v -0.067129 0.070384 -0.030229 v -0.054216 0.057645 -0.036969 v -0.073235 0.117705 -0.051388 v -0.085348 0.106855 0.029417 v -0.021319 0.062456 0.035324 v -0.026193 0.032788 0.025349 v -0.019144 0.031106 0.035645 v -0.081739 0.106121 0.033154 v -0.077608 0.144682 -0.061127 v -0.024557 0.050244 0.039826 v -0.078402 0.113712 0.028270 v -0.049665 0.058197 -0.036297 v -0.045285 0.034340 0.025203 v -0.083202 0.085206 0.034443 v -0.038418 0.128711 -0.027252 v -0.086717 0.102275 0.030904 v -0.023041 0.035135 0.032149 v -0.074335 0.127147 -0.022559 v -0.028517 0.004496 0.038966 v -0.080384 0.083911 0.033658 v -0.086112 0.088045 0.034234 v -0.023731 0.040914 0.034502 v -0.064808 0.102293 -0.022646 v -0.020122 0.058041 0.040120 v -0.087829 0.114839 0.016609 v -0.058283 0.056005 -0.035677 v -0.022871 0.042833 0.037612 v -0.071888 0.083428 -0.022260 v -0.067886 0.060104 -0.031244 v -0.080808 0.086401 0.034305 v -0.022693 0.053563 0.040729 v -0.081172 0.059383 0.018765 v -0.088490 0.064791 0.008404 v -0.072730 0.059776 0.026838 v -0.039859 0.071839 -0.035015 v -0.039739 0.076115 -0.034286 v -0.090072 0.097421 0.027293 v -0.024731 0.046663 0.038424 v -0.085785 0.117328 0.016945 v -0.076719 0.131328 -0.034023 v -0.019846 0.036270 0.037903 v -0.020978 0.039795 0.037903 v -0.027944 0.043421 0.029224 v -0.070739 0.053846 0.027110 v -0.091694 0.092058 0.028585 v -0.028984 0.049540 0.030816 v -0.023566 0.060945 0.034578 v -0.044638 0.003665 -0.037919 v -0.045649 0.003111 -0.036507 v -0.092452 0.098673 0.010931 v -0.061763 0.006542 0.009138 v -0.071366 0.136896 -0.063480 v -0.040366 0.141143 -0.022177 v -0.077929 0.145223 -0.064586 v -0.044910 0.006242 -0.036875 v -0.045642 0.006150 -0.035229 v -0.047421 0.005545 -0.028961 v -0.086623 0.095459 -0.016108 v -0.059202 0.008608 0.006614 v -0.061418 0.008229 0.008602 v -0.063955 0.008243 0.011632 v -0.065234 0.008646 0.014768 v -0.078042 0.134186 -0.051508 v -0.067562 0.135824 -0.070424 v -0.077607 0.143597 -0.064428 v -0.076638 0.145005 -0.066306 v -0.042205 0.005830 -0.041335 v -0.046255 0.005860 -0.032390 v -0.070102 0.008699 -0.014128 v -0.063470 0.009848 0.012279 v -0.078424 0.130040 -0.039777 v -0.087845 0.097778 -0.012756 v -0.092644 0.082977 0.000058 v -0.042966 0.006527 -0.039848 v -0.043296 0.010802 -0.034521 v -0.043915 0.010208 -0.032093 v -0.046729 0.008941 -0.026828 v -0.065178 0.011795 -0.015813 v -0.069091 0.010940 -0.012380 v -0.074552 0.121565 -0.034812 v -0.075021 0.119145 -0.041245 v -0.057305 0.009759 0.003904 v -0.057773 0.009108 0.005318 v -0.064874 0.010880 0.019332 v -0.048118 0.135521 -0.016606 v -0.060322 0.012694 -0.018474 v -0.067432 0.012295 -0.012112 v -0.093044 0.099196 0.004858 v -0.075845 0.118389 -0.022730 v -0.054061 0.011489 0.003761 v -0.060846 0.012722 0.013622 v -0.092256 0.100183 0.002859 v -0.074632 0.132346 -0.052145 v -0.041580 0.009154 -0.038070 v -0.064678 0.062170 -0.033084 v -0.054601 0.011350 0.005963 v -0.054046 0.014543 0.009739 v -0.060415 0.011267 0.011088 v -0.063114 0.012901 0.017714 v -0.062504 0.013203 0.022945 v -0.079137 0.134491 -0.050132 v -0.077592 0.126349 -0.037129 v -0.089703 0.082438 -0.008483 v -0.038101 0.013473 -0.037813 v -0.041482 0.011902 -0.036832 v -0.043755 0.012410 -0.028764 v -0.056592 0.015087 -0.018692 v -0.059367 0.014216 -0.016547 v -0.061161 0.014894 -0.012605 v -0.065247 0.013823 -0.009496 v -0.061060 0.015103 -0.008457 v -0.051568 0.013784 0.003555 v -0.057125 0.015326 0.015656 v -0.057939 0.015657 0.018376 v -0.060350 0.014947 0.021904 v -0.052614 0.130978 -0.015380 v -0.041207 0.014138 -0.031106 v -0.042019 0.015112 -0.026941 v -0.040485 0.065679 -0.036491 v 0.017274 0.080826 -0.030271 v -0.057742 0.015878 -0.015776 v -0.058790 0.016044 -0.011666 v -0.076589 0.123075 -0.021333 v -0.050199 0.016233 0.002650 v -0.050482 0.016387 0.004311 v -0.052475 0.013454 0.006026 v -0.055053 0.015511 0.013386 v -0.055358 0.016692 0.021727 v -0.073687 0.141200 -0.064191 v -0.039931 0.013774 -0.035686 v -0.072062 0.117690 -0.055080 v -0.092100 0.082149 0.004399 v -0.091483 0.113724 0.003102 v -0.053387 0.015664 0.010587 v -0.053712 0.016925 0.014557 v -0.053742 0.016915 0.018480 v -0.052878 0.016910 0.020083 v -0.073293 0.131117 -0.053174 v -0.031023 0.015999 -0.038303 v -0.034445 0.016096 -0.033747 v -0.057251 0.018151 -0.014718 v -0.057315 0.020263 -0.011985 v -0.052045 0.018111 0.008564 v -0.052446 0.018873 0.012320 v -0.079908 0.108438 -0.018378 v -0.050622 0.132991 -0.015016 v -0.078956 0.132786 -0.045483 v -0.082440 0.076333 -0.014756 v -0.025849 0.088873 -0.023146 v -0.030530 0.017290 -0.035226 v -0.032033 0.017520 -0.033209 v -0.031901 0.017482 -0.031882 v -0.034156 0.017538 -0.028193 v 0.034172 0.078697 -0.019485 v -0.055296 0.017733 -0.018704 v -0.072885 0.110450 -0.022918 v -0.052211 0.018638 0.016062 v -0.081716 0.105504 -0.016314 v -0.031878 0.076618 -0.033393 v -0.026520 0.017221 -0.040272 v -0.028620 0.017505 -0.037796 v -0.029689 0.018559 -0.034631 v -0.030709 0.018724 -0.031381 v -0.072710 0.119100 -0.054699 v -0.051853 0.022976 0.013866 v -0.030215 0.020417 -0.032049 v -0.030743 0.020350 -0.029319 v -0.031774 0.019131 -0.027337 v -0.055890 0.021404 -0.006844 v -0.049952 0.021583 0.001843 v -0.051340 0.021779 0.006868 v -0.052168 0.023788 0.010993 v -0.072352 0.123801 -0.049907 v -0.077836 0.141695 -0.062068 v -0.068413 0.145582 -0.073105 v -0.029701 0.021860 -0.035718 v -0.054647 0.023230 -0.019537 v -0.056931 0.023336 -0.014012 v -0.056707 0.023811 -0.008388 v -0.054316 0.023801 -0.003920 v -0.091906 0.098429 -0.004781 v -0.025612 0.022210 -0.042351 v -0.027703 0.020620 -0.039234 v -0.030782 0.023538 -0.030250 v -0.057474 0.025796 -0.012885 v -0.059144 0.026434 -0.008586 v -0.056314 0.025121 -0.004033 v -0.088814 0.105286 -0.003575 v -0.078768 0.136619 -0.054690 v -0.074385 0.117661 -0.045749 v -0.020547 0.148159 -0.037054 v -0.031883 0.024960 -0.027557 v -0.056722 0.028761 -0.018315 v -0.057232 0.027647 -0.016409 v -0.090381 0.103384 0.000271 v -0.079376 0.136177 -0.052555 v -0.091637 0.097051 0.017252 v -0.071731 0.120364 -0.058801 v -0.078499 0.140475 -0.060181 v -0.045866 0.134574 -0.021624 v -0.023642 0.148572 -0.033853 v -0.026912 0.024963 -0.042009 v -0.028886 0.025607 -0.037586 v -0.030952 0.026081 -0.032382 v -0.088769 0.104692 0.011891 v 0.006567 0.072752 -0.035722 v -0.074052 0.138591 -0.060838 v -0.078795 0.141360 -0.058295 v -0.078971 0.140757 -0.059119 v -0.024048 0.150819 -0.031570 v -0.025131 0.024059 -0.043774 v -0.032098 0.027748 -0.029531 v -0.039186 0.003426 -0.043888 v -0.004121 0.079485 -0.035300 v -0.065463 0.030077 -0.016418 v -0.042787 0.063523 -0.037040 v -0.060181 0.061360 -0.033814 v -0.056961 0.061986 -0.036130 v -0.090101 0.107584 0.000050 v -0.063061 0.134319 -0.075235 v -0.077512 0.125457 -0.028655 v -0.044307 0.138584 -0.019125 v -0.018798 0.135337 -0.034085 v -0.068220 0.126778 -0.069442 v -0.026014 0.028126 -0.045265 v -0.029636 0.030681 -0.038737 v -0.033207 0.028778 -0.029173 v -0.070583 0.058726 -0.030917 v -0.040396 0.139564 -0.024202 v -0.043695 0.138529 -0.021076 v -0.090107 0.100547 0.022849 v -0.040128 0.141625 -0.020623 v -0.027246 0.090039 -0.021205 v -0.033239 0.030483 -0.028938 v -0.019791 0.002526 -0.042201 v -0.068886 0.032225 -0.016024 v -0.061079 0.057172 -0.033766 v -0.074510 0.119170 -0.044441 v -0.051264 0.083245 -0.030372 v -0.038936 0.090571 -0.025164 v -0.079311 0.138087 -0.055683 v -0.057213 0.127163 -0.011237 v -0.028399 0.029946 -0.042819 v -0.030215 0.028371 -0.035769 v -0.032263 0.030644 -0.032342 v 0.033895 0.063322 -0.028467 v -0.071079 0.033373 -0.014402 v -0.074133 0.034944 -0.013044 v -0.035945 0.056086 -0.038758 v -0.052996 0.129153 -0.016674 v -0.091230 0.096933 0.023674 v -0.070516 0.141104 -0.067958 v -0.089046 0.107410 0.022865 v -0.084612 0.102005 -0.015064 v -0.028224 0.034882 -0.044868 v -0.029914 0.032850 -0.042190 v -0.032471 0.033220 -0.033388 v 0.044144 0.036973 -0.013791 v -0.048411 0.069316 -0.036246 v -0.060712 0.090485 -0.023344 v -0.089291 0.100816 -0.010612 v -0.073915 0.119143 -0.047909 v -0.078950 0.139261 -0.054766 v -0.070489 0.133026 -0.062837 v -0.018127 0.150212 -0.039082 v -0.030984 0.033850 -0.039302 v -0.071013 0.037018 -0.019714 v -0.072536 0.037356 -0.017660 v -0.075149 0.037731 -0.015204 v -0.078337 0.116643 -0.016989 v -0.077452 0.118082 -0.019840 v -0.078298 0.138503 -0.057840 v -0.075095 0.137989 -0.059275 v -0.027335 0.148207 -0.029827 v -0.045684 0.084691 -0.030113 v -0.025108 0.032550 -0.047453 v -0.030367 0.037012 -0.043010 v -0.031469 0.033922 -0.036392 v -0.045120 0.092873 -0.023508 v -0.015026 0.076207 -0.035212 v -0.073093 0.038858 -0.021297 v -0.075098 0.039155 -0.019652 v -0.077120 0.038751 -0.012722 v -0.080952 0.039822 0.000315 v 0.010772 0.056371 -0.045775 v -0.089789 0.102468 -0.007928 v -0.077558 0.128878 -0.032986 v -0.077764 0.040161 -0.017213 v -0.078173 0.040505 -0.014046 v -0.073708 0.115794 -0.034595 v -0.046617 0.136347 -0.019326 v -0.075270 0.127485 -0.042563 v -0.069204 0.137436 -0.067837 v -0.086397 0.118917 -0.005689 v -0.035338 0.039889 -0.032754 v 0.017043 0.093716 -0.016290 v -0.078601 0.041332 -0.018414 v -0.081076 0.044287 -0.016658 v -0.081754 0.044275 -0.014088 v -0.081833 0.041449 -0.007279 v -0.082581 0.043865 -0.002981 v -0.082048 0.043010 0.001357 v -0.080954 0.042495 0.004980 v -0.089309 0.114247 -0.004351 v -0.084927 0.113277 -0.008343 v -0.070798 0.122180 -0.061832 v -0.090795 0.102759 0.005150 v -0.070938 0.126287 -0.058367 v -0.073735 0.122651 -0.040519 v -0.075130 0.130425 -0.048254 v -0.031971 0.037540 -0.038609 v -0.083832 0.044311 -0.007261 v -0.068987 0.100345 -0.023125 v -0.083705 0.118388 -0.010516 v -0.090764 0.118187 0.001083 v 0.026497 0.057776 -0.037116 v -0.044955 0.057322 -0.036705 v -0.053796 0.130052 -0.011617 v -0.022356 0.004899 0.039463 v -0.076974 0.120545 -0.022222 v -0.094247 0.094742 0.007774 v -0.000581 0.078999 -0.034542 v -0.027534 0.039839 -0.049507 v -0.029666 0.038593 -0.045745 v -0.031847 0.042684 -0.043606 v -0.033628 0.044432 -0.041808 v -0.033550 0.042358 -0.040044 v -0.033591 0.040589 -0.036986 v 0.022828 0.069836 -0.034275 v -0.084156 0.046119 -0.010743 v -0.085580 0.046811 -0.001489 v 0.007925 0.075394 -0.034698 v -0.072547 0.111855 -0.027743 v -0.074702 0.134767 -0.055408 v -0.078199 0.128803 -0.040531 v -0.032241 0.045256 -0.045663 v -0.034430 0.044889 -0.038308 v -0.075676 0.048583 -0.025899 v -0.080700 0.047920 -0.019742 v -0.082471 0.048550 -0.016384 v -0.085907 0.047587 -0.004178 v -0.086713 0.048904 -0.000675 v -0.084075 0.048764 0.008162 v -0.089739 0.102011 0.015327 v -0.075099 0.110803 -0.020783 v -0.076460 0.112745 -0.019500 v -0.080223 0.118681 -0.013668 v -0.075871 0.119172 -0.034349 v -0.073815 0.128142 -0.047433 v -0.073259 0.134957 -0.057563 v -0.030622 0.044250 -0.047999 v -0.034749 0.045352 -0.035806 v -0.062024 0.143268 -0.076267 v -0.082590 0.050381 -0.018907 v -0.084183 0.049419 -0.011798 v -0.086059 0.048277 -0.006555 v -0.089856 0.117339 -0.002547 v -0.077556 0.113780 -0.018430 v -0.077863 0.120533 -0.015177 v -0.077117 0.121970 -0.025579 v 0.007185 0.082029 -0.033392 v -0.034694 0.047663 -0.038069 v -0.079244 0.051139 -0.024083 v -0.080661 0.051612 -0.021652 v -0.082346 0.051784 -0.019924 v -0.086186 0.051126 -0.008290 v -0.086598 0.052186 -0.005477 v -0.086881 0.052149 -0.002145 v -0.086191 0.047879 0.001948 v -0.085719 0.051191 0.006577 v -0.085077 0.053657 0.011640 v -0.084072 0.049233 0.011822 v -0.091464 0.108956 0.005870 v -0.088638 0.112505 0.017206 v 0.030420 0.084470 -0.017020 v -0.074911 0.121906 -0.033198 v -0.049022 0.133702 -0.018521 v -0.073406 0.125480 -0.044775 v -0.031469 0.047976 -0.046553 v -0.032746 0.044857 -0.043049 v -0.076789 0.051527 -0.026761 v -0.086263 0.052247 -0.012102 v -0.086675 0.052184 0.002838 v -0.086371 0.053246 0.008563 v -0.055972 0.127833 -0.013200 v -0.033411 0.074288 -0.034851 v -0.089239 0.118837 0.007760 v -0.069526 0.124201 -0.065803 v -0.074928 0.120726 -0.030934 v 0.030658 0.055373 -0.034640 v -0.088511 0.054264 -0.002556 v -0.089032 0.056286 0.004235 v -0.091554 0.112298 0.006181 v -0.091920 0.110513 0.002266 v -0.089485 0.108091 0.019575 v -0.075092 0.112414 -0.021421 v -0.086295 0.116293 -0.007180 v -0.078764 0.133071 -0.048670 v -0.028533 0.052381 -0.049868 v -0.032628 0.050599 -0.043900 v -0.033737 0.051197 -0.039848 v 0.026768 0.086872 -0.018219 v -0.075180 0.052336 -0.028991 v -0.077748 0.055790 -0.026474 v -0.084719 0.052057 -0.016883 v -0.086953 0.054577 -0.012831 v -0.088054 0.053989 -0.009513 v -0.088783 0.055694 -0.005710 v -0.088174 0.054898 0.000370 v -0.091054 0.108975 0.000689 v -0.090042 0.112155 -0.000962 v -0.074778 0.123661 -0.036328 v -0.091691 0.116298 0.004963 v -0.085917 0.107183 -0.012009 v -0.030951 0.052141 -0.045509 v -0.034022 0.145101 -0.025282 v -0.082538 0.056112 -0.020692 v -0.084852 0.056330 -0.017528 v -0.087425 0.110667 -0.004577 v -0.077335 0.122832 -0.030045 v -0.078310 0.130669 -0.044467 v -0.065000 0.135384 -0.074686 v -0.071823 0.123955 -0.054004 v -0.075357 0.119251 -0.026553 v -0.032593 0.053942 -0.040370 v -0.087563 0.078259 -0.000919 v -0.085726 0.057815 -0.014673 v -0.087644 0.057109 -0.011378 v -0.088659 0.057016 -0.008238 v -0.089809 0.107476 0.009521 v -0.075799 0.117833 -0.033715 v -0.078845 0.136453 -0.049398 v -0.083211 0.082227 -0.015779 v -0.069620 0.128988 -0.064437 v -0.075599 0.077040 -0.022522 v -0.029311 0.056067 -0.046454 v -0.031401 0.055548 -0.041290 v -0.074605 0.055820 -0.029592 v -0.080511 0.056268 -0.022627 v -0.083478 0.058346 -0.020539 v -0.086047 0.060321 -0.012427 v -0.087131 0.060437 -0.010578 v -0.089826 0.058723 0.000305 v -0.082396 0.115710 -0.012191 v -0.091043 0.110270 0.012122 v -0.085581 0.110828 -0.007451 v -0.089693 0.109288 0.015681 v -0.083246 0.113185 -0.011881 v -0.076098 0.116280 -0.025726 v -0.077773 0.118911 -0.017749 v -0.077104 0.123891 -0.033626 v -0.076195 0.118214 -0.029879 v -0.074231 0.125119 -0.040752 v -0.085421 0.084842 -0.014931 v -0.083683 0.106513 -0.014112 v -0.082337 0.061931 -0.021412 v -0.031346 0.082467 -0.030927 v -0.012360 0.066895 -0.039430 v 0.056585 0.036642 -0.011282 v 0.000500 0.084565 -0.032022 v 0.015166 0.090169 -0.023738 v -0.019076 0.154745 -0.032048 v 0.037263 0.054745 -0.030432 v -0.015598 0.070765 -0.037885 v -0.019300 0.154726 -0.034452 v 0.007177 0.086427 -0.030080 v 0.010087 0.080068 -0.033613 v -0.006782 0.082614 -0.031837 v 0.048400 0.039500 -0.008680 v -0.029901 0.145170 -0.029850 v -0.017478 0.153707 -0.038080 v -0.043156 0.080832 -0.031030 v 0.003053 0.066832 -0.038179 v 0.004836 0.091266 -0.024953 v 0.056830 0.033722 -0.012856 v -0.017504 0.003611 -0.041627 v -0.005180 0.068988 -0.037858 v 0.016003 0.086445 -0.027315 v -0.024653 0.063504 -0.039762 v -0.015860 0.152979 -0.040154 v 0.052466 0.035919 -0.013520 v -0.040255 0.084670 -0.029122 v 0.013836 0.073754 -0.033667 v 0.018950 0.057551 -0.040689 v -0.056819 0.126312 -0.013289 v -0.047399 0.081210 -0.030934 v -0.061613 0.138879 -0.076540 v -0.050035 0.077882 -0.033254 v -0.061950 0.009568 -0.021395 v -0.013553 0.152136 -0.042065 v -0.034145 0.081122 -0.031798 v 0.001634 0.072060 -0.036567 v -0.008249 0.080279 -0.034779 v 0.035870 0.074400 -0.020786 v 0.034752 0.072920 -0.024730 v -0.061834 0.122399 -0.011428 v -0.059715 0.123599 -0.011739 v 0.012242 0.089892 -0.025866 v -0.048108 0.131761 -0.020683 v -0.010990 0.149931 -0.042662 v -0.027122 0.002239 -0.043854 v -0.023013 0.062652 -0.044316 v -0.053858 0.094808 -0.019956 v -0.011305 0.148452 -0.044229 v -0.015774 0.066433 -0.038998 v -0.064282 0.121672 -0.012903 v -0.059714 0.121434 -0.013818 v 0.013457 0.079478 -0.032683 v -0.024216 0.076630 -0.035703 v -0.014057 0.150444 -0.042691 v -0.017534 0.080920 -0.033520 v -0.057977 0.118890 -0.015557 v -0.052416 0.093298 -0.021112 v 0.020660 0.078841 -0.029764 v -0.061640 0.120269 -0.014314 v 0.028086 0.067449 -0.031942 v 0.017710 0.070319 -0.036204 v 0.047196 0.039471 -0.009606 v -0.034604 0.009530 -0.044149 v -0.029570 0.085497 -0.027706 v -0.062830 0.119581 -0.015557 v -0.001501 0.072424 -0.037056 v 0.047076 0.041565 -0.004724 v 0.011681 0.065971 -0.037687 v -0.015325 0.091966 -0.020191 v 0.007950 0.065862 -0.038425 v 0.018264 0.074053 -0.031947 v -0.038315 0.081842 -0.031300 v 0.011761 0.063411 -0.040812 v -0.001421 0.067769 -0.038473 v -0.052425 0.003396 -0.026917 v -0.063911 0.120240 -0.016704 v -0.059365 0.114981 -0.016629 v 0.021602 0.076087 -0.030136 v -0.007243 0.070450 -0.038083 v -0.065387 0.083901 -0.024593 v -0.006281 0.092617 -0.024202 v -0.015471 0.062226 -0.048302 v -0.023574 0.082858 -0.030193 v 0.023783 0.082564 -0.026160 v -0.012370 0.070347 -0.038694 v -0.060254 0.002580 -0.024393 v -0.034537 0.091135 -0.021600 v 0.034452 0.056261 -0.032270 v 0.013422 0.062485 -0.040508 v 0.005859 0.065049 -0.041196 v -0.004149 0.084695 -0.030351 v 0.010939 0.086702 -0.029527 v 0.011702 0.072645 -0.034510 v 0.011074 0.082671 -0.031264 v 0.028102 0.063382 -0.034040 v -0.033632 0.087124 -0.025595 v 0.015214 0.063306 -0.038578 v 0.007890 0.067338 -0.036657 v 0.034346 0.068177 -0.027457 v -0.035711 0.011107 -0.042851 v -0.032725 0.013327 -0.041864 v 0.007047 0.069187 -0.035817 v -0.039694 0.009222 -0.040995 v -0.054664 0.085882 -0.028016 v -0.020458 0.091283 -0.020586 v -0.014694 0.089931 -0.022563 v -0.022420 0.064482 -0.039410 v 0.031888 0.079781 -0.021848 v -0.055677 0.111740 -0.016120 v -0.036832 0.084126 -0.029462 v 0.022632 0.055215 -0.039150 v 0.005644 0.061131 -0.046502 v -0.007890 0.062489 -0.048288 v -0.013340 0.079635 -0.033261 v -0.016444 0.063827 -0.045731 v -0.033996 0.004659 -0.045218 v 0.024407 0.066392 -0.035057 v -0.008395 0.087278 -0.028727 v -0.067204 0.147492 -0.074185 v 0.008931 0.060410 -0.045041 v -0.002527 0.081152 -0.033352 v -0.026900 0.079255 -0.032378 v -0.059994 0.111375 -0.017645 v -0.003345 0.063779 -0.046646 v -0.066299 0.009684 -0.018801 v -0.057452 0.012287 -0.020877 v 0.046213 0.040519 -0.010585 v -0.050739 0.086589 -0.028451 v -0.012146 0.054745 -0.053089 v 0.003875 0.084283 -0.032725 v -0.037425 0.007818 -0.043518 v 0.001325 0.093070 -0.022557 v -0.016246 0.086065 -0.028692 v -0.060711 0.109222 -0.019755 v 0.055036 0.038529 -0.009862 v 0.000869 0.062969 -0.046333 v 0.013127 0.059603 -0.043718 v -0.021183 0.079815 -0.033540 v 0.028031 0.046705 -0.037068 v 0.046127 0.033601 -0.015031 v 0.054263 0.031844 -0.014971 v -0.002591 0.090131 -0.025463 v -0.059086 0.088571 -0.023965 v 0.019837 0.067677 -0.036878 v -0.039156 0.015975 -0.027426 v -0.036712 0.013126 -0.040172 v -0.047779 0.101129 -0.009622 v 0.048719 0.028832 -0.018790 v -0.070958 0.083018 0.037050 v -0.042557 0.088335 -0.027668 v 0.022855 0.085920 -0.023652 v 0.006664 0.057282 -0.047650 v -0.012627 0.061265 -0.049693 v -0.010406 0.092998 -0.022041 v -0.001097 0.059267 -0.049227 v 0.035411 0.059165 -0.030278 v -0.006727 0.090025 -0.026086 v -0.006199 0.065048 -0.044686 v 0.016197 0.057565 -0.042478 v -0.031950 0.005511 -0.045101 v -0.027315 0.083083 -0.029761 v -0.053388 0.105912 -0.015697 v -0.046574 0.097651 -0.012472 v -0.038144 0.015407 -0.031348 v 0.042227 0.027774 -0.018547 v -0.060228 0.082587 -0.028406 v -0.013602 0.085252 -0.029884 v -0.049819 0.003823 -0.026901 v 0.005412 0.079847 -0.034730 v -0.023301 0.060553 -0.048303 v -0.020853 0.066225 -0.038942 v 0.014900 0.072591 -0.034173 v -0.043643 0.077698 -0.033039 v 0.026048 0.081700 -0.024248 v -0.035907 0.014319 -0.038740 v -0.010487 0.004035 -0.040075 v -0.005656 0.077235 -0.037090 v -0.018311 0.083308 -0.031349 v -0.011516 0.081893 -0.032039 v -0.010895 0.089292 -0.025817 v 0.013726 0.070118 -0.036582 v -0.010863 0.064506 -0.045891 v -0.056719 0.106712 -0.019152 v -0.055565 0.103173 -0.018468 v 0.022252 0.059444 -0.037999 v -0.004936 0.059749 -0.049946 v -0.022750 0.058487 -0.050384 v -0.017877 0.065468 -0.040004 v -0.042736 0.003607 -0.041890 v -0.006289 0.067354 -0.039892 v -0.026822 0.078237 -0.033581 v 0.000206 0.065771 -0.042255 v 0.030287 0.072466 -0.028721 v -0.049260 0.099567 -0.015084 v 0.028315 0.051901 -0.036194 v 0.025205 0.050686 -0.039090 v 0.045433 0.036649 -0.012316 v -0.018314 0.069477 -0.038387 v 0.041602 0.029887 -0.017592 v 0.009933 0.068447 -0.036779 v -0.012441 0.096622 -0.011323 v 0.001062 0.098116 -0.013894 v 0.043752 0.034165 -0.014645 v 0.018625 0.090137 -0.021245 v -0.037207 0.002683 -0.044919 v 0.025083 0.070807 -0.032411 v -0.012431 0.058997 -0.051123 v -0.035588 0.085498 -0.027373 v -0.014645 0.067661 -0.038225 v 0.032868 0.076409 -0.023379 v -0.067854 0.148834 -0.072724 v -0.034940 0.003167 -0.045791 v -0.052770 0.101178 -0.018319 v -0.039384 0.095758 -0.013827 v 0.006349 0.097978 -0.013954 v 0.013677 0.096553 -0.013558 v -0.019286 0.075237 -0.036872 v 0.013917 0.083406 -0.030333 v 0.017703 0.084268 -0.028295 v 0.022872 0.063448 -0.036250 v -0.057736 0.003752 -0.025009 v -0.035519 0.088681 -0.024441 v -0.020475 0.062412 -0.046771 v -0.010059 0.055339 -0.051824 v -0.050497 0.096125 -0.018116 v -0.047939 0.096840 -0.015582 v 0.029282 0.060420 -0.034228 v -0.001322 0.088024 -0.027546 v 0.017300 0.077236 -0.031481 v 0.031840 0.060080 -0.032942 v -0.020545 0.094419 -0.011353 v -0.011843 0.094779 -0.017825 v -0.000505 0.097134 -0.015882 v 0.001943 0.075661 -0.034919 v 0.029830 0.079562 -0.024115 v -0.019642 0.086126 -0.027146 v -0.057810 0.087551 -0.025223 v -0.017314 0.059123 -0.051057 v -0.049672 0.089904 -0.026097 v -0.031145 0.002835 -0.045122 v -0.041759 0.001801 -0.042579 v 0.011295 0.003897 -0.036913 v 0.019231 0.085116 -0.026672 v 0.025859 0.076161 -0.028752 v -0.032000 0.089495 -0.021955 v -0.053557 0.099189 -0.019326 v -0.011162 0.068052 -0.038792 v -0.002586 0.094724 -0.020810 v 0.005728 0.094769 -0.020828 v 0.008960 0.095044 -0.019400 v 0.014951 0.092664 -0.019696 v 0.005177 0.063223 -0.044677 v 0.025112 0.079381 -0.026715 v -0.063393 0.146044 -0.075291 v 0.043787 0.031873 -0.016021 v 0.028596 0.074967 -0.027900 v 0.000698 0.068695 -0.037429 v -0.051898 0.096428 -0.018691 v -0.022347 0.092589 -0.016272 v 0.023106 0.088406 -0.019808 v 0.051161 0.032356 -0.016355 v 0.002514 0.087977 -0.028410 v 0.040043 0.069521 -0.017978 v -0.045858 0.094894 -0.020254 v -0.043119 0.094442 -0.020440 v -0.036613 0.094320 -0.016831 v -0.029139 0.092644 -0.012510 v -0.026540 0.092264 -0.014517 v -0.016302 0.093610 -0.016836 v -0.006825 0.094989 -0.020309 v 0.009169 0.092027 -0.023418 v 0.007565 0.002043 -0.035313 v 0.004646 0.002027 -0.035814 v 0.000025 0.002644 -0.038192 v -0.003181 0.002657 -0.038481 v -0.007491 0.002806 -0.039255 v -0.015579 0.002644 -0.040548 v -0.044507 0.066321 -0.036117 v -0.025958 0.002830 -0.043480 v 0.005415 0.003938 -0.038180 v 0.000727 0.003908 -0.039001 v -0.003525 0.004102 -0.039399 v -0.012543 0.002683 -0.040098 v -0.015906 0.004752 -0.041386 v -0.026017 0.004565 -0.043792 v -0.025188 0.138724 -0.033965 v -0.055132 0.064690 -0.036111 v -0.067553 0.001591 -0.020444 v 0.014452 0.006667 -0.036476 v -0.000865 0.006305 -0.039711 v -0.077441 0.090888 -0.021546 v -0.066541 0.066627 -0.030802 v -0.074803 0.065360 -0.028051 v -0.034969 0.128107 -0.027871 v -0.065022 0.004385 -0.022233 v -0.066627 0.001676 -0.021561 v -0.068325 0.003883 -0.020526 v -0.069787 0.002177 -0.018566 v 0.023229 0.004649 -0.016492 v 0.010572 0.005368 -0.037576 v 0.004208 0.006108 -0.038887 v -0.006619 0.007713 -0.040497 v -0.023126 0.004230 -0.043271 v -0.075282 0.104086 -0.021047 v -0.066832 0.085632 -0.023437 v -0.061774 0.004060 -0.023371 v -0.069532 0.004495 -0.018633 v -0.070765 0.004173 -0.015606 v 0.033211 0.006118 -0.014551 v 0.024238 0.006623 -0.018405 v 0.007831 0.008891 -0.038129 v -0.012573 0.007958 -0.041157 v -0.029947 0.009698 -0.044373 v -0.075150 0.037313 0.010923 v -0.060507 0.096404 -0.022243 v -0.047771 0.004412 -0.027175 v -0.068799 0.006829 -0.016546 v 0.011612 0.008315 -0.037805 v 0.002381 0.009793 -0.038907 v -0.003904 0.009810 -0.040055 v -0.009802 0.011115 -0.040624 v -0.020553 0.009444 -0.043365 v -0.057435 0.074404 -0.032687 v 0.014608 0.068291 -0.037224 v -0.067184 0.007430 -0.020198 v -0.071324 0.006033 -0.014324 v 0.032638 0.007994 -0.017258 v 0.025105 0.007999 -0.019364 v -0.064758 0.070694 -0.031823 v 0.014184 0.011172 -0.038788 v 0.003337 0.011093 -0.039286 v -0.001248 0.011240 -0.039647 v -0.004154 0.011234 -0.040451 v -0.047686 0.008724 -0.026283 v -0.057112 0.009038 -0.023353 v -0.067390 0.009163 -0.016487 v -0.028149 0.143689 -0.032055 v 0.028014 0.008853 -0.018995 v -0.032455 0.003877 0.035802 v 0.017538 0.013059 -0.037851 v 0.011063 0.011699 -0.039527 v -0.000556 0.012648 -0.040927 v -0.007801 0.013746 -0.044097 v -0.013235 0.014505 -0.044152 v -0.013890 0.011366 -0.041311 v -0.017450 0.012004 -0.042200 v -0.025654 0.012186 -0.043017 v -0.026218 0.015286 -0.040816 v -0.070632 0.069441 -0.028703 v -0.049938 0.011005 -0.025013 v -0.053387 0.007521 -0.025560 v -0.025707 0.067798 -0.038532 v 0.043767 0.011400 -0.014094 v 0.041397 0.012971 -0.018256 v 0.035885 0.014007 -0.020647 v 0.036939 0.009734 -0.017685 v 0.031029 0.013009 -0.020553 v 0.027826 0.012745 -0.021139 v -0.061336 0.065015 -0.032802 v 0.021035 0.014061 -0.034854 v 0.008494 0.013850 -0.040165 v 0.005143 0.013057 -0.040579 v -0.001678 0.014368 -0.043421 v -0.005239 0.013444 -0.043587 v -0.016766 0.013270 -0.042737 v -0.020829 0.014381 -0.042477 v -0.021914 0.013686 -0.042423 v -0.030914 0.012225 -0.043228 v -0.064637 0.141925 -0.075725 v -0.054782 0.003935 0.032190 v -0.012610 0.138850 -0.039956 v -0.045125 0.012281 -0.025742 v -0.055060 0.013600 -0.021150 v -0.075985 0.035397 -0.002547 v 0.044568 0.014263 -0.018004 v 0.025119 0.016735 -0.034682 v 0.020702 0.015295 -0.035755 v 0.018007 0.015675 -0.037645 v 0.013867 0.014732 -0.039664 v 0.010414 0.016728 -0.042389 v 0.007035 0.016139 -0.042215 v 0.003474 0.015060 -0.043295 v -0.001077 0.016427 -0.044909 v -0.010127 0.013940 -0.043850 v -0.027961 0.016619 -0.038830 v -0.049988 0.014169 -0.023643 v -0.062639 0.068823 -0.032892 v 0.017298 0.017227 -0.038923 v 0.014373 0.017271 -0.041386 v 0.001371 0.017665 -0.045073 v -0.005849 0.017331 -0.045363 v -0.042853 0.015952 -0.025784 v -0.053258 0.016111 -0.021204 v -0.011770 0.142485 -0.042825 v 0.042753 0.017093 -0.020618 v 0.032689 0.016596 -0.021005 v 0.031324 0.017311 -0.022228 v 0.022195 0.018623 -0.038080 v 0.016130 0.019332 -0.041092 v 0.014119 0.020303 -0.042253 v 0.005377 0.018158 -0.043571 v -0.012153 0.018392 -0.046171 v -0.019870 0.016695 -0.043991 v -0.023270 0.015923 -0.041978 v -0.035756 0.076266 -0.034607 v -0.036448 0.016627 -0.027755 v -0.037153 0.018069 -0.025618 v -0.041224 0.018739 -0.025669 v -0.047062 0.015742 -0.024232 v -0.021296 0.140251 -0.035811 v 0.046571 0.016876 -0.018957 v 0.039166 0.017029 -0.021016 v -0.071226 0.108156 -0.022089 v 0.023712 0.019981 -0.037456 v 0.020398 0.019668 -0.040170 v -0.003445 0.019845 -0.046057 v -0.010278 0.020983 -0.048195 v -0.066697 0.125239 -0.069110 v -0.032623 0.018493 -0.026101 v 0.044973 0.020761 -0.020884 v 0.033943 0.019553 -0.021501 v 0.026010 0.023402 -0.035715 v 0.019875 0.022436 -0.042062 v 0.017882 0.022162 -0.042563 v 0.008603 0.021635 -0.044894 v 0.007685 0.023040 -0.045335 v 0.003696 0.020521 -0.044426 v 0.000289 0.021309 -0.045058 v -0.006435 0.020358 -0.047045 v -0.033829 0.018660 -0.025038 v -0.038074 0.020329 -0.025228 v -0.044540 0.022615 -0.025633 v -0.045670 0.019596 -0.024688 v -0.071026 0.096111 -0.023729 v 0.042363 0.021535 -0.021419 v 0.036877 0.020254 -0.021231 v -0.068208 0.063898 -0.030912 v 0.022339 0.022158 -0.040459 v 0.013256 0.023478 -0.043923 v 0.004761 0.024479 -0.045397 v 0.002328 0.023955 -0.046360 v -0.013253 0.023252 -0.048472 v -0.015869 0.019021 -0.046406 v -0.032609 0.020857 -0.025032 v -0.076650 0.069689 -0.024910 v 0.049399 0.022931 -0.019555 v 0.039426 0.023543 -0.020486 v 0.016920 0.024587 -0.043110 v -0.011778 0.025054 -0.048809 v -0.019235 0.022088 -0.046634 v -0.032705 0.024017 -0.025920 v -0.042325 0.023970 -0.026105 v -0.050018 0.019449 -0.022938 v -0.070685 0.064087 -0.030420 v -0.024217 0.003651 0.038869 v 0.015999 0.028100 -0.042824 v -0.001019 0.024976 -0.046947 v -0.003987 0.025110 -0.047650 v -0.006870 0.024932 -0.047900 v -0.016071 0.026330 -0.049977 v -0.047147 0.124973 -0.022201 v -0.038758 0.126336 -0.026136 v -0.034440 0.022924 -0.024904 v -0.037104 0.024482 -0.025613 v -0.053164 0.020563 -0.020826 v 0.053171 0.027758 -0.017740 v 0.048195 0.025138 -0.020067 v 0.043526 0.024477 -0.020408 v 0.039591 0.026091 -0.019376 v -0.072539 0.100699 -0.022541 v -0.080908 0.088992 -0.019464 v 0.023188 0.026339 -0.040348 v 0.011135 0.028538 -0.044176 v 0.005891 0.028056 -0.045343 v 0.002066 0.028832 -0.047845 v -0.021543 0.027087 -0.048055 v -0.035917 0.026760 -0.025922 v -0.049024 0.023770 -0.024805 v -0.076039 0.100735 -0.021600 v -0.010581 0.076552 -0.036443 v -0.000913 0.031459 -0.049001 v -0.005442 0.028111 -0.049439 v -0.009582 0.029373 -0.049787 v -0.013415 0.028374 -0.050787 v -0.030472 0.137502 -0.031561 v -0.032593 0.027384 -0.027314 v -0.033718 0.025352 -0.025695 v -0.046260 0.026555 -0.026508 v -0.035061 0.069112 -0.036741 v -0.009977 0.031461 -0.050542 v -0.033731 0.028569 -0.027319 v -0.042752 0.029668 -0.027580 v -0.051811 0.073492 -0.033911 v -0.066047 0.097903 -0.023508 v -0.077389 0.086534 -0.021264 v -0.051698 0.069432 -0.035986 v 0.021847 0.029894 -0.040562 v 0.014456 0.031519 -0.044452 v 0.001313 0.032524 -0.049001 v -0.003756 0.030392 -0.049766 v -0.014514 0.031252 -0.051704 v -0.020126 0.032204 -0.050721 v -0.022567 0.032434 -0.049611 v -0.038593 0.027253 -0.026065 v -0.045693 0.029539 -0.027615 v -0.048470 0.031411 -0.027152 v -0.048974 0.028400 -0.026351 v -0.055660 0.029253 -0.020546 v -0.059410 0.028586 -0.016435 v -0.078915 0.097366 -0.020306 v -0.056868 0.069850 -0.033658 v -0.058760 0.102077 -0.020946 v -0.081743 0.100643 -0.017961 v -0.059422 0.067174 -0.033490 v -0.076751 0.095222 -0.022378 v 0.010593 0.035697 -0.045353 v 0.010012 0.031813 -0.046062 v 0.006019 0.032790 -0.047278 v -0.013904 0.034020 -0.051883 v -0.019724 0.034078 -0.051824 v -0.066329 0.140899 -0.073790 v -0.034955 0.031274 -0.028368 v -0.040305 0.031597 -0.028155 v -0.045649 0.032672 -0.028575 v -0.053462 0.029240 -0.023515 v -0.054257 0.032339 -0.023695 v -0.054969 0.030923 -0.021803 v -0.056812 0.030568 -0.020737 v -0.060708 0.030878 -0.019884 v -0.062960 0.029526 -0.017215 v -0.070279 0.040338 0.021217 v 0.024298 0.032664 -0.038310 v 0.018834 0.032169 -0.042811 v 0.014704 0.034424 -0.044726 v -0.001517 0.036456 -0.048858 v -0.005264 0.034108 -0.049594 v -0.016567 0.034017 -0.052493 v -0.050763 0.032643 -0.025921 v -0.024458 0.132828 -0.031300 v -0.040687 0.123254 -0.023834 v -0.015378 0.146370 -0.041448 v -0.043044 0.127031 -0.024625 v -0.033777 0.133619 -0.029987 v -0.062616 0.078846 -0.029387 v -0.046853 0.075509 -0.033605 v -0.056398 0.076888 -0.032569 v -0.031206 0.066274 -0.037535 v 0.021982 0.034512 -0.041752 v 0.020033 0.037150 -0.043234 v 0.016907 0.037428 -0.044325 v 0.013611 0.037046 -0.045886 v 0.006080 0.036047 -0.047178 v 0.002251 0.036462 -0.047909 v -0.005347 0.036813 -0.050550 v -0.008836 0.034457 -0.050217 v -0.027341 0.036930 -0.047999 v -0.034763 0.033795 -0.029657 v -0.035824 0.035770 -0.030525 v -0.037995 0.036224 -0.030164 v -0.045647 0.034644 -0.029821 v -0.052932 0.034110 -0.025743 v -0.055670 0.032876 -0.023379 v -0.058303 0.034141 -0.024197 v -0.062249 0.033837 -0.022857 v -0.065710 0.030898 -0.017803 v -0.054979 0.109489 -0.016499 v -0.011417 0.145119 -0.044034 v -0.061829 0.074746 -0.031349 v -0.066153 0.081337 -0.025991 v 0.023886 0.036963 -0.040241 v 0.005423 0.038802 -0.048611 v -0.068359 0.106799 -0.022486 v -0.033450 0.035337 -0.032367 v -0.041981 0.034621 -0.030037 v -0.049475 0.037146 -0.028943 v -0.051404 0.035260 -0.027284 v 0.000849 0.080895 -0.034544 v -0.036702 0.132096 -0.028658 v -0.062940 0.042061 0.025839 v -0.071118 0.091646 -0.023220 v -0.074550 0.109251 -0.021225 v -0.079494 0.038042 0.000899 v 0.025737 0.036432 -0.038366 v 0.008226 0.039064 -0.047683 v -0.008681 0.038171 -0.051124 v -0.011717 0.038731 -0.052617 v -0.020453 0.041882 -0.053673 v -0.056226 0.078983 -0.031912 v -0.055771 0.036910 -0.028689 v -0.064562 0.037163 -0.025916 v -0.065990 0.035460 -0.022212 v -0.069282 0.035416 -0.019203 v -0.083464 0.095690 -0.019037 v -0.079860 0.039351 0.003657 v -0.020287 0.003742 0.038468 v -0.045601 0.123307 -0.022359 v 0.014588 0.039518 -0.045408 v -0.008841 0.040543 -0.052130 v -0.021961 0.038689 -0.052763 v -0.038468 0.039818 -0.031773 v -0.057935 0.040048 -0.031211 v -0.060525 0.037374 -0.028868 v -0.068547 0.038406 -0.024367 v -0.069476 0.037724 -0.021682 v -0.065003 0.074609 -0.029219 v -0.063709 0.030646 0.011078 v -0.023190 0.145361 -0.035309 v 0.010445 0.039019 -0.046802 v 0.007984 0.044038 -0.048625 v -0.006766 0.043108 -0.051819 v -0.011586 0.043454 -0.052863 v -0.023538 0.042862 -0.052963 v -0.027222 0.042587 -0.050536 v -0.064686 0.128525 -0.072070 v -0.042615 0.038900 -0.032333 v -0.044099 0.038801 -0.031981 v -0.047121 0.040745 -0.030979 v -0.049459 0.040238 -0.030194 v -0.053874 0.038914 -0.030208 v -0.067756 0.041396 -0.028447 v -0.073116 0.041534 -0.023803 v -0.074748 0.087316 -0.022365 v -0.079429 0.094132 -0.020561 v -0.022821 0.129499 -0.029142 v 0.023901 0.042110 -0.040512 v 0.021017 0.040172 -0.042045 v 0.011925 0.043554 -0.045456 v 0.003631 0.043960 -0.049630 v 0.001780 0.040645 -0.049708 v -0.003173 0.041154 -0.050439 v -0.052958 0.041574 -0.031538 v -0.063178 0.040504 -0.030238 v -0.075167 0.040745 -0.021903 v -0.004308 0.070910 -0.037922 v -0.084933 0.093870 -0.017925 v -0.027326 0.135026 -0.032074 v -0.052309 0.112126 -0.014895 v -0.069732 0.121672 -0.064179 v -0.026181 0.140666 -0.033737 v 0.031654 0.044425 -0.034715 v 0.020435 0.044545 -0.041582 v 0.015451 0.043166 -0.044147 v 0.009400 0.043267 -0.047716 v -0.015491 0.041451 -0.053557 v -0.035541 0.041959 -0.033694 v -0.060704 0.042864 -0.032183 v -0.063584 0.043595 -0.032107 v -0.070336 0.040686 -0.025735 v -0.064893 0.094703 -0.023434 v -0.042003 0.132949 -0.025491 v -0.033792 0.140856 -0.029075 v -0.055698 0.117461 -0.016583 v -0.049188 0.120603 -0.019657 v 0.027111 0.041296 -0.038510 v 0.012526 0.047182 -0.045986 v -0.014137 0.045554 -0.052991 v -0.028752 0.047491 -0.049984 v -0.042919 0.044737 -0.033555 v -0.045701 0.043768 -0.032488 v -0.050225 0.043361 -0.032567 v -0.055148 0.044243 -0.033793 v -0.058127 0.043383 -0.033196 v -0.066475 0.044206 -0.031324 v -0.068647 0.043340 -0.029691 v -0.072322 0.044419 -0.027542 v -0.073916 0.044150 -0.025205 v -0.023051 0.071198 -0.038187 v -0.047584 0.128717 -0.021854 v -0.071590 0.080746 -0.023363 v 0.008688 0.047857 -0.047667 v 0.004696 0.047994 -0.048648 v -0.008571 0.045295 -0.052359 v -0.014679 0.048731 -0.053994 v -0.019478 0.048860 -0.053667 v -0.021772 0.049277 -0.053529 v -0.024609 0.045164 -0.052296 v -0.011129 0.074358 -0.037196 v -0.068307 0.123900 -0.067211 v -0.035683 0.046041 -0.034212 v -0.038642 0.043813 -0.032756 v -0.049242 0.045907 -0.033516 v -0.056981 0.046036 -0.034224 v -0.063511 0.049651 -0.033736 v -0.078591 0.044022 -0.020747 v -0.065527 0.144939 -0.075296 v -0.027467 0.071756 -0.037854 v -0.030883 0.071812 -0.036954 v -0.051105 0.123399 -0.019431 v -0.050661 0.031250 0.019498 v -0.069074 0.088622 -0.023524 v 0.008041 0.052195 -0.047172 v -0.000546 0.046990 -0.050427 v -0.003905 0.048494 -0.051706 v -0.005949 0.045867 -0.052450 v -0.008763 0.050538 -0.052509 v -0.037298 0.072041 -0.034998 v -0.047404 0.046861 -0.034032 v -0.053388 0.046149 -0.034305 v -0.041120 0.069179 -0.035933 v 0.032241 0.048051 -0.033973 v 0.022406 0.047150 -0.040690 v 0.018435 0.048005 -0.042751 v 0.013965 0.050480 -0.044738 v 0.011516 0.051449 -0.045461 v 0.002711 0.051085 -0.049251 v -0.000619 0.050144 -0.051166 v -0.026981 0.049275 -0.051585 v -0.079127 0.106568 -0.019266 v -0.015508 0.137276 -0.036814 v -0.053984 0.067189 -0.036307 v -0.036026 0.048436 -0.036263 v -0.044104 0.048802 -0.034688 v -0.051797 0.050115 -0.036142 v -0.054953 0.048558 -0.035858 v -0.059906 0.047637 -0.034006 v -0.068687 0.048598 -0.031769 v -0.072307 0.047717 -0.029202 v -0.061709 0.071472 -0.032857 v -0.068050 0.029620 0.004821 v 0.006402 0.050396 -0.048268 v -0.004198 0.051498 -0.052319 v -0.066649 0.128161 -0.071589 v -0.072936 0.050188 -0.030240 v -0.078377 0.046924 -0.022253 v -0.073830 0.070011 -0.026957 v -0.054519 0.124850 -0.016668 v -0.065272 0.130708 -0.073373 v -0.054063 0.114945 -0.016216 v 0.034601 0.051142 -0.032934 v 0.029936 0.050192 -0.034754 v 0.022931 0.051774 -0.040325 v 0.017269 0.053799 -0.043061 v 0.002338 0.054467 -0.048652 v -0.008716 0.052954 -0.052606 v -0.016700 0.053050 -0.053678 v -0.022145 0.053918 -0.052488 v -0.035829 0.052120 -0.037154 v -0.038229 0.051356 -0.036610 v -0.040555 0.051128 -0.035664 v -0.061655 0.051098 -0.034004 v -0.055479 0.122619 -0.016359 v 0.018798 0.064186 -0.037575 v -0.057640 0.115183 -0.016388 v -0.052760 0.119871 -0.017986 v -0.016828 0.141225 -0.038470 v 0.013308 0.055706 -0.045269 v 0.004292 0.055926 -0.048185 v -0.002237 0.052889 -0.051608 v -0.080059 0.103223 -0.018690 v -0.026433 0.054622 -0.050701 v -0.056469 0.092156 -0.021753 v -0.035012 0.053459 -0.038952 v -0.044461 0.052461 -0.036024 v -0.051239 0.054621 -0.036189 v -0.055203 0.053819 -0.036034 v -0.057067 0.051490 -0.036010 v -0.065064 0.055148 -0.033496 v -0.061859 0.087638 -0.023826 v -0.070511 0.030843 0.004786 v -0.042353 0.074585 -0.034906 v 0.025280 0.053971 -0.038209 v -0.018516 0.144469 -0.038516 v -0.003010 0.056085 -0.050508 v -0.030613 0.135152 -0.031263 v -0.017547 0.055527 -0.052938 v -0.032644 0.055374 -0.039903 v -0.038201 0.056939 -0.038106 v -0.037577 0.053960 -0.036809 v -0.042842 0.055788 -0.036377 v -0.036320 0.001649 -0.045090 v -0.030348 0.001302 -0.043625 v -0.040029 0.001814 -0.044125 v -0.032917 0.001394 -0.044208 v -0.027398 0.001308 -0.040998 v -0.022754 0.001378 -0.040343 v -0.018731 0.001352 -0.039433 v -0.014601 0.001508 -0.038851 v -0.010589 0.001562 -0.038121 v -0.000795 0.001758 -0.036454 v 0.012682 0.002524 -0.034190 v -0.007762 0.001636 -0.037635 v -0.043616 0.002205 -0.040859 v -0.035393 0.001404 -0.042421 v -0.024842 0.001662 -0.035913 v -0.019484 0.001527 -0.036135 v -0.014985 0.001699 -0.035383 v -0.009336 0.001872 -0.034328 v -0.002561 0.001971 -0.033069 v 0.003877 0.001980 -0.032118 v 0.009684 0.001976 -0.030278 v 0.015684 0.002528 -0.028912 v -0.040350 0.001346 -0.039957 v -0.033740 0.001529 -0.035926 v -0.029022 0.001490 -0.036773 v -0.019412 0.002293 -0.034221 v -0.015844 0.002371 -0.033619 v -0.011445 0.002456 -0.032853 v 0.008504 0.002308 -0.028595 v 0.014027 0.002346 -0.032554 v -0.045044 0.001934 -0.037192 v -0.044437 0.001340 -0.036205 v -0.026342 0.002826 -0.034567 v -0.008344 0.003533 -0.031557 v 0.000867 0.002623 -0.030703 v 0.004406 0.002533 -0.030006 v 0.011959 0.002065 -0.026358 v -0.037242 0.001558 -0.034698 v -0.004154 0.002539 -0.031599 v 0.007102 0.005315 -0.026725 v 0.014628 0.002238 -0.020932 v -0.040903 0.001565 -0.029950 v -0.032115 0.003306 -0.033734 v -0.026276 0.006104 -0.032453 v -0.020248 0.005444 -0.032449 v -0.009995 0.005728 -0.030631 v -0.002938 0.006702 -0.028508 v -0.000454 0.005514 -0.029416 v 0.011264 0.002213 -0.021709 v -0.046721 0.002546 -0.032475 v -0.036181 0.002239 -0.032415 v -0.029527 0.005669 -0.032522 v -0.022340 0.006465 -0.031210 v -0.006703 0.006861 -0.028429 v 0.002239 0.006264 -0.028021 v 0.010207 0.002765 -0.025483 v 0.018814 0.002839 -0.021208 v -0.046318 0.001514 -0.031336 v -0.045697 0.001368 -0.027518 v -0.028506 0.006578 -0.030723 v -0.017935 0.006511 -0.030655 v -0.013960 0.006593 -0.029893 v -0.011773 0.006806 -0.027544 v -0.000980 0.007059 -0.026239 v 0.006529 0.006407 -0.022874 v 0.009334 0.002992 -0.022083 v 0.017424 0.002839 -0.021139 v 0.020000 0.002957 -0.018566 v -0.048335 0.001729 -0.028955 v -0.039732 0.001908 -0.029386 v -0.038422 0.002889 -0.028625 v -0.031880 0.006256 -0.030962 v -0.025552 0.006431 -0.026628 v -0.004001 0.006915 -0.023849 v 0.004346 0.006569 -0.026114 v 0.008832 0.001960 -0.014469 v 0.020478 0.002709 -0.015478 v 0.021426 0.002689 -0.015910 v -0.050545 0.001517 -0.027440 v -0.034316 0.005988 -0.029492 v -0.017104 0.006604 -0.024631 v -0.000868 0.007011 -0.022050 v 0.002330 0.007141 -0.023477 v 0.004324 0.006726 -0.020272 v 0.006119 0.005959 -0.020757 v 0.006431 0.003249 -0.018260 v 0.007171 0.002417 -0.017444 v 0.016321 0.002094 -0.015394 v 0.018273 0.002156 -0.012368 v 0.022788 0.002722 -0.013792 v 0.024891 0.003926 -0.014432 v 0.028007 0.004560 -0.014384 v 0.030946 0.005958 -0.015544 v 0.036135 0.007456 -0.015514 v -0.055839 0.001920 -0.026262 v -0.052812 0.001601 -0.026099 v -0.035995 0.006058 -0.027234 v -0.032552 0.006439 -0.027337 v -0.021130 0.006309 -0.019804 v 0.014412 0.001973 -0.013201 v 0.022353 0.002359 -0.011144 v 0.025289 0.002747 -0.011418 v -0.058816 0.001543 -0.025181 v -0.057379 0.001404 -0.024972 v -0.055493 0.001237 -0.022714 v -0.048975 0.001364 -0.025529 v -0.043719 0.001536 -0.020029 v -0.041682 0.001852 -0.023824 v -0.041719 0.001889 -0.020451 v -0.039765 0.003083 -0.024897 v -0.032453 0.006227 -0.018805 v 0.003251 0.002830 -0.013517 v 0.006820 0.001902 -0.011401 v 0.009520 0.002511 -0.011379 v 0.013526 0.002363 -0.011628 v 0.015604 0.003765 -0.010943 v 0.025827 0.002587 -0.009234 v 0.029847 0.003052 -0.008531 v 0.031231 0.004048 -0.010996 v -0.062425 0.001570 -0.023841 v -0.060709 0.001418 -0.023457 v -0.051253 0.001259 -0.023910 v -0.039670 0.004000 -0.021919 v -0.029129 0.006212 -0.023663 v -0.009167 0.006658 -0.019716 v 0.003408 0.005714 -0.016965 v 0.019200 0.003579 -0.008684 v 0.021344 0.002266 -0.009273 v 0.022945 0.002089 -0.006409 v 0.040073 0.006918 -0.010362 v -0.063726 0.001590 -0.022569 v -0.038016 0.006127 -0.022062 v -0.027065 0.006137 -0.016951 v -0.022685 0.006390 -0.024132 v -0.003348 0.006664 -0.014773 v 0.003180 0.002020 -0.010738 v 0.004331 0.001879 -0.011433 v 0.007838 0.002466 -0.009436 v 0.025053 0.002170 -0.004943 v 0.032930 0.003361 -0.005595 v -0.079560 0.079332 0.031056 v -0.053400 0.001266 -0.017965 v -0.046619 0.001390 -0.019907 v -0.040965 0.001663 -0.016328 v -0.036504 0.006111 -0.020037 v -0.019542 0.006233 -0.015860 v -0.015388 0.006473 -0.018706 v -0.014608 0.006245 -0.014999 v 0.000071 0.006715 -0.015542 v 0.000289 0.005677 -0.012636 v 0.006085 0.002798 -0.008011 v 0.008937 0.004054 -0.009514 v 0.022402 0.003572 -0.003949 v 0.033732 0.003394 -0.002671 v 0.038393 0.005444 -0.004037 v -0.048942 0.001423 -0.015379 v -0.040108 0.001579 -0.014277 v -0.024538 0.006108 -0.012473 v -0.005928 0.006490 -0.011379 v 0.004847 0.001917 -0.005809 v 0.024912 0.002523 -0.000556 v 0.027816 0.002443 -0.003930 v 0.036462 0.004655 -0.001285 v 0.048343 0.010575 -0.002852 v -0.065975 0.001396 -0.018475 v -0.056353 0.001239 -0.016873 v -0.046435 0.001508 -0.014047 v -0.038081 0.001458 -0.011482 v -0.034521 0.006071 -0.016168 v -0.031534 0.006153 -0.014912 v -0.009282 0.006322 -0.007641 v -0.002751 0.006265 -0.008450 v 0.000747 0.002847 -0.009171 v 0.000056 0.002544 -0.004646 v 0.003353 0.002004 -0.004776 v 0.004746 0.001975 -0.003427 v -0.068963 0.001494 -0.017441 v -0.062769 0.001170 -0.018295 v -0.049724 0.001274 -0.010206 v -0.035233 0.001551 -0.009666 v -0.030569 0.006015 -0.011785 v -0.012388 0.006260 -0.009866 v 0.005349 0.001773 -0.000562 v 0.030616 0.003037 0.000006 v -0.071324 0.002113 -0.014629 v -0.066760 0.001224 -0.013870 v -0.044274 0.001313 -0.010300 v -0.020555 0.006083 -0.009313 v -0.016154 0.006209 -0.009606 v 0.022254 0.004325 -0.000547 v 0.023786 0.002476 0.002636 v 0.039471 0.006462 0.001530 v 0.044585 0.008602 -0.000932 v 0.044182 0.009164 0.004084 v 0.047791 0.010716 0.003446 v -0.054924 0.038016 0.024175 v -0.058143 0.001369 -0.012245 v -0.047668 0.001347 -0.008647 v -0.038137 0.001504 -0.005981 v -0.033841 0.001578 -0.006893 v -0.028178 0.005909 -0.008384 v -0.023707 0.005854 -0.003725 v -0.004693 0.006272 -0.004153 v -0.002814 0.005607 -0.005331 v 0.003462 0.001834 -0.001454 v 0.021348 0.004005 0.002856 v 0.028070 0.002961 0.002826 v 0.029077 0.003811 0.005399 v -0.071319 0.001861 -0.012054 v -0.069960 0.001676 -0.008585 v -0.059677 0.001260 -0.013403 v -0.051590 0.001364 -0.006598 v -0.043048 0.001698 -0.007756 v -0.031298 0.001724 -0.003651 v -0.013893 0.006165 -0.004972 v -0.008085 0.006211 0.000359 v -0.000713 0.003247 -0.000052 v 0.005122 0.001955 0.003594 v 0.007157 0.002131 0.002188 v 0.008546 0.002678 0.003600 v 0.018960 0.003952 0.004607 v 0.021324 0.002562 0.005385 v 0.024039 0.003056 0.007826 v 0.040547 0.007968 0.006356 v -0.072711 0.003382 -0.013423 v -0.049184 0.001943 -0.006720 v -0.046177 0.003536 -0.006639 v -0.039982 0.003038 -0.005094 v -0.034533 0.001630 -0.001583 v 0.000255 0.003365 0.003411 v 0.001249 0.002399 0.002172 v 0.003791 0.002512 0.005884 v 0.007546 0.002204 0.005733 v 0.013262 0.002347 0.006986 v 0.017694 0.002480 0.007496 v 0.034751 0.005472 0.005729 v -0.089954 0.083482 0.013418 v -0.050012 0.002913 -0.004835 v -0.038341 0.003865 -0.003409 v -0.035403 0.001494 -0.003200 v -0.033062 0.001523 -0.000904 v -0.029978 0.001959 0.001487 v -0.017986 0.006100 -0.004573 v -0.012428 0.006071 0.000396 v -0.003824 0.006140 0.000206 v -0.002747 0.005529 0.000429 v 0.010525 0.002617 0.005961 v 0.028650 0.005676 0.010510 v 0.031673 0.005845 0.009321 v 0.049892 0.012818 0.006307 v -0.072477 0.002931 -0.008755 v -0.067245 0.001812 -0.003501 v -0.034592 0.001807 0.000510 v -0.021442 0.005881 0.003338 v -0.002401 0.006265 0.004765 v -0.001088 0.005688 0.005016 v 0.006281 0.002646 0.008746 v 0.039269 0.008726 0.010163 v 0.042816 0.010068 0.009030 v -0.063333 0.001492 -0.006185 v -0.058324 0.001420 -0.004280 v -0.052787 0.001482 -0.002868 v -0.035706 0.003702 0.000151 v -0.024534 0.005799 0.005177 v -0.015193 0.006119 0.001485 v -0.000299 0.006390 0.007366 v 0.002051 0.003628 0.006515 v 0.010103 0.002551 0.011116 v 0.013296 0.002615 0.013827 v 0.020503 0.003006 0.013384 v 0.035539 0.009510 0.013282 v -0.074745 0.035375 0.004974 v -0.054739 0.001347 0.000685 v -0.032133 0.001871 0.006568 v -0.028894 0.003214 0.002843 v -0.026600 0.005580 0.001174 v 0.004226 0.004248 0.009303 v 0.007563 0.003094 0.010679 v 0.011576 0.003147 0.014579 v 0.022322 0.003997 0.013407 v 0.025270 0.006057 0.014585 v 0.045684 0.011664 0.009591 v -0.085303 0.048173 0.005532 v -0.080927 0.077477 0.020572 v -0.069587 0.002993 -0.002972 v -0.063672 0.001832 0.000109 v -0.054930 0.001438 0.004067 v -0.053835 0.000814 0.003372 v -0.035807 0.002852 0.004510 v -0.033670 0.001667 0.005007 v -0.030712 0.002500 0.007008 v 0.002775 0.006414 0.010486 v 0.007225 0.006686 0.014340 v 0.031121 0.007694 0.012264 v 0.039177 0.011371 0.014391 v 0.043331 0.012839 0.013263 v -0.065842 0.002440 0.000169 v -0.028674 0.005418 0.006093 v -0.020686 0.006030 0.008892 v -0.018194 0.006022 0.005141 v -0.014990 0.006107 0.007547 v -0.007022 0.006316 0.007610 v 0.000370 0.006665 0.010742 v 0.019506 0.003039 0.018265 v 0.025911 0.007453 0.016859 v 0.027623 0.008772 0.016474 v 0.031924 0.009521 0.013640 v -0.052377 0.032837 0.020186 v -0.058621 0.030992 0.015165 v -0.059872 0.001712 0.003969 v -0.053272 0.001425 0.006297 v -0.036188 0.002987 0.007675 v -0.035602 0.001917 0.009617 v -0.035264 0.001982 0.012213 v -0.028333 0.005429 0.008210 v -0.028530 0.005929 0.014563 v 0.004494 0.006979 0.013592 v 0.013803 0.002578 0.018264 v 0.041878 0.015357 0.017158 v -0.073751 0.077914 0.028674 v -0.088429 0.079961 0.020451 v -0.090230 0.081571 0.019115 v -0.072874 0.074374 0.022748 v -0.062714 0.002974 0.005400 v -0.061792 0.002039 0.004110 v -0.056594 0.001526 0.006195 v -0.037366 0.003442 0.009619 v -0.038260 0.002005 0.012500 v -0.030155 0.003917 0.009124 v -0.019398 0.006256 0.013371 v -0.016258 0.006443 0.015312 v 0.009143 0.006061 0.016297 v 0.010110 0.004476 0.018310 v 0.011270 0.003086 0.018800 v 0.022251 0.005207 0.019967 v -0.061082 0.034109 0.019272 v -0.071893 0.114747 -0.038321 v -0.084449 0.078183 0.023020 v -0.087807 0.081695 0.013846 v -0.062578 0.002489 0.007063 v -0.041531 0.001704 0.012346 v -0.032808 0.002386 0.011691 v -0.031964 0.003600 0.013400 v -0.030233 0.005539 0.013005 v -0.010815 0.006311 0.011213 v 0.000786 0.007002 0.016114 v 0.007401 0.006973 0.016072 v 0.008920 0.006129 0.018762 v 0.008520 0.002676 0.021741 v 0.010747 0.002403 0.025243 v 0.017180 0.002764 0.022967 v 0.019594 0.003860 0.023303 v -0.079432 0.043460 0.012478 v -0.063341 0.029243 -0.014910 v -0.064044 0.003038 0.008125 v -0.063077 0.002135 0.010603 v -0.055351 0.002016 0.012234 v -0.051355 0.001662 0.011451 v -0.045160 0.001620 0.013292 v -0.022985 0.006157 0.013781 v -0.006490 0.006763 0.016394 v -0.002990 0.006685 0.013862 v 0.005131 0.007317 0.019132 v 0.005852 0.002595 0.023028 v -0.071153 0.115074 -0.041224 v -0.058901 0.027421 -0.013041 v -0.064537 0.003179 0.009709 v -0.011793 0.006791 0.018715 v 0.002615 0.002662 0.024121 v 0.017451 0.003900 0.026994 v 0.019909 0.005407 0.026381 v -0.075666 0.079059 0.031588 v -0.048328 0.036128 0.024611 v -0.080036 0.076803 0.017550 v -0.071614 0.116355 -0.049906 v -0.073264 0.076533 0.023634 v -0.077197 0.044700 0.017603 v -0.065598 0.028765 -0.010512 v -0.058595 0.001969 0.011785 v -0.036446 0.002265 0.018296 v -0.034423 0.002810 0.017860 v -0.025986 0.006296 0.017199 v -0.004218 0.007182 0.022189 v -0.000306 0.007215 0.020440 v -0.000911 0.002654 0.025295 v 0.008076 0.002348 0.024875 v 0.015230 0.002934 0.026721 v -0.059051 0.041099 0.026490 v -0.067959 0.030572 -0.012612 v -0.064162 0.028207 -0.009578 v -0.070256 0.115615 -0.046074 v -0.060365 0.002144 0.017357 v -0.050758 0.002203 0.014303 v -0.045150 0.002305 0.015800 v -0.035213 0.002254 0.020527 v -0.031645 0.005812 0.017792 v -0.007765 0.007216 0.022784 v -0.004748 0.002760 0.026458 v 0.003497 0.002400 0.027393 v 0.006167 0.002772 0.029637 v 0.010287 0.002680 0.028431 v 0.016299 0.004477 0.028742 v -0.077644 0.075643 0.019937 v -0.072921 0.079798 0.033763 v -0.087712 0.079801 0.026593 v -0.041791 0.002227 0.015228 v -0.033152 0.002287 0.023558 v -0.027974 0.006435 0.018548 v -0.026541 0.006791 0.022406 v -0.017628 0.006870 0.021656 v -0.012520 0.007244 0.024102 v -0.008677 0.002726 0.027115 v -0.004048 0.002385 0.029920 v 0.000985 0.002462 0.029265 v 0.010023 0.003673 0.030254 v 0.013213 0.004018 0.029646 v -0.077317 0.040381 0.012912 v -0.074907 0.081999 0.036213 v -0.078905 0.075250 0.017794 v -0.085838 0.080211 0.015057 v -0.076138 0.076294 0.023185 v -0.073128 0.033434 -0.010922 v -0.064937 0.027842 -0.005909 v -0.062811 0.026687 -0.002995 v -0.065553 0.002567 0.014479 v -0.054769 0.002278 0.021906 v -0.044539 0.002434 0.021092 v -0.029429 0.006251 0.020877 v -0.012563 0.002777 0.028088 v -0.009550 0.002568 0.028606 v 0.000602 0.002829 0.030780 v 0.005454 0.003675 0.031140 v 0.010446 0.005309 0.030323 v -0.069819 0.078855 0.028963 v -0.080862 0.075168 0.015104 v -0.077475 0.082189 0.034988 v -0.075597 0.085083 0.037837 v -0.070719 0.031319 -0.010423 v -0.069384 0.029438 -0.006856 v -0.057638 0.025671 0.002336 v -0.065982 0.002780 0.020038 v -0.064556 0.002206 0.018555 v -0.039474 0.002385 0.025436 v -0.030848 0.002315 0.026274 v -0.022525 0.006964 0.024034 v -0.015717 0.007301 0.025221 v -0.015320 0.002614 0.029377 v -0.007849 0.002548 0.032371 v 0.000240 0.003886 0.032218 v 0.003191 0.004303 0.031720 v 0.006165 0.005792 0.031042 v -0.079640 0.081629 0.032138 v -0.086959 0.079825 0.008470 v -0.083958 0.078688 0.027177 v -0.083684 0.078763 0.017593 v -0.075990 0.035462 -0.008830 v -0.074304 0.033584 -0.006960 v -0.070803 0.029989 -0.003974 v -0.067134 0.028132 0.000134 v -0.046512 0.002426 0.026629 v -0.028790 0.002518 0.028426 v -0.024642 0.002669 0.029112 v -0.002743 0.003161 0.032375 v -0.075610 0.075512 0.022310 v -0.081824 0.044347 0.008035 v -0.068647 0.028649 -0.002177 v -0.060740 0.026082 -0.000716 v -0.067042 0.003568 0.017031 v -0.065483 0.002964 0.023242 v -0.051319 0.002407 0.022082 v -0.043770 0.002724 0.027648 v -0.041548 0.002563 0.026292 v -0.038503 0.002956 0.027774 v -0.018836 0.002596 0.030493 v -0.014013 0.002514 0.032237 v -0.010916 0.003272 0.034763 v -0.008051 0.003859 0.034707 v -0.004501 0.004151 0.033869 v -0.051013 0.034558 0.022002 v -0.068474 0.033411 0.012042 v -0.063653 0.027472 0.002571 v -0.040137 0.003778 0.028263 v -0.035472 0.002594 0.029377 v -0.028219 0.002747 0.032641 v -0.023430 0.002657 0.036703 v -0.016236 0.002708 0.034751 v -0.067694 0.046686 0.026261 v -0.087406 0.084629 0.032548 v -0.068664 0.080386 0.032027 v -0.077417 0.077623 0.029059 v -0.081776 0.042249 -0.011563 v -0.080179 0.039614 -0.008429 v -0.053758 0.030247 0.015683 v -0.074490 0.033535 -0.004214 v -0.072516 0.032335 -0.001469 v -0.070894 0.030388 -0.000825 v -0.058362 0.028032 0.008522 v -0.064158 0.003370 0.027184 v -0.063537 0.002573 0.025580 v -0.060826 0.002339 0.026521 v -0.050829 0.002485 0.029628 v -0.048080 0.002824 0.029533 v -0.043390 0.004065 0.029656 v -0.083843 0.081846 0.032515 v -0.036908 0.003721 0.030308 v -0.015851 0.003507 0.036788 v -0.010310 0.005767 0.035225 v -0.082287 0.078336 0.014936 v -0.050771 0.037646 0.023731 v -0.071581 0.037222 0.015900 v -0.077580 0.038362 0.007354 v -0.079660 0.077108 0.023985 v -0.089993 0.081203 0.025361 v -0.079742 0.038478 -0.004581 v -0.077273 0.037089 -0.007372 v -0.061856 0.028227 0.006850 v -0.061048 0.002827 0.029162 v -0.055522 0.002428 0.029861 v -0.056799 0.035920 0.022774 v -0.072094 0.034380 0.008469 v -0.034590 0.003808 0.033243 v -0.033179 0.002815 0.032816 v -0.027698 0.002769 0.036396 v -0.019205 0.002760 0.036450 v -0.022304 0.126096 -0.024655 v -0.059503 0.106066 -0.020696 v -0.017588 0.127330 -0.025001 v -0.068501 0.120563 -0.062570 v -0.029155 0.129242 -0.029139 v -0.049514 0.114809 -0.016863 v -0.042850 0.118136 -0.019899 v -0.013511 0.130041 -0.029092 v -0.013162 0.132073 -0.032555 v -0.066607 0.114396 -0.039066 v -0.011579 0.135886 -0.037906 v -0.062917 0.131242 -0.073937 v -0.062483 0.119456 -0.040973 v -0.035894 0.123857 -0.024915 v -0.009854 0.134879 -0.036924 v -0.071879 0.113644 -0.035076 v -0.068586 0.112933 -0.035312 v -0.009826 0.139848 -0.042138 v -0.061542 0.134304 -0.074878 v -0.063885 0.116564 -0.040016 v -0.067057 0.119679 -0.059949 v -0.042604 0.116426 -0.017971 v -0.065347 0.111075 -0.026186 v -0.061651 0.132722 -0.073130 v -0.066578 0.120733 -0.061997 v -0.063739 0.127165 -0.069523 v -0.063538 0.128218 -0.071369 v -0.026928 0.123266 -0.018854 v -0.064239 0.118006 -0.045120 v -0.018188 0.132429 -0.032146 v -0.027810 0.123497 -0.022574 v -0.068068 0.118384 -0.056916 v -0.071127 0.112045 -0.029618 v -0.026259 0.126131 -0.026217 v -0.063890 0.126768 -0.066536 v -0.064318 0.115042 -0.035837 v -0.069422 0.113693 -0.038365 v -0.066804 0.122956 -0.066335 v -0.009379 0.142749 -0.043453 v -0.036413 0.120855 -0.021925 v -0.069129 0.109982 -0.024671 v -0.069421 0.117128 -0.053741 v -0.061572 0.113710 -0.019254 v -0.047990 0.112030 -0.010791 v -0.009535 0.137682 -0.040130 v -0.070391 0.110847 -0.026456 v -0.034591 0.119681 -0.016390 v -0.072499 0.112418 -0.030472 v -0.065237 0.124378 -0.066913 v -0.066294 0.122009 -0.064809 v -0.063892 0.111272 -0.024279 v -0.066100 0.113008 -0.033009 v -0.041067 0.116350 -0.016415 v -0.067815 0.115418 -0.044114 v -0.065164 0.121904 -0.056772 v -0.062599 0.109771 -0.021210 v -0.026198 0.123651 -0.020945 v -0.063566 0.126509 -0.060530 v -0.020735 0.128586 -0.028250 v -0.014830 0.133913 -0.034342 v -0.066888 0.109571 -0.023617 v -0.062942 0.117078 -0.034934 v -0.065727 0.108134 -0.022320 v -0.050330 0.111659 -0.013384 v -0.063310 0.111156 -0.022674 v -0.063373 0.112572 -0.026219 v -0.031510 0.121638 -0.020730 v -0.070355 0.117206 -0.054563 v -0.017797 0.129008 -0.028534 v -0.069389 0.112463 -0.033069 v -0.064167 0.114152 -0.032199 v -0.062530 0.130237 -0.070390 v -0.067306 0.116558 -0.048310 v -0.036572 0.119214 -0.019199 v -0.047233 0.115704 -0.017699 v -0.021326 0.125691 -0.022831 v -0.063220 0.114097 -0.028650 v -0.065647 0.116073 -0.043338 v -0.067113 0.118087 -0.052918 v -0.065207 0.118673 -0.049424 v -0.030878 0.124840 -0.025717 v -0.046966 0.113392 -0.014786 v -0.070821 0.119891 -0.060197 v -0.062815 0.121231 -0.047386 v -0.065549 0.112229 -0.029708 v -0.023099 0.124804 -0.020419 v -0.071310 0.118507 -0.058151 v -0.039643 0.120223 -0.021799 vt -0.100607 0.974489 vt -0.090082 1.003329 vt -0.074080 0.989825 vt 0.997485 0.031388 vt 0.997893 -0.010341 vt 0.988386 0.018583 vt 0.094971 -0.002317 vt 0.029570 -0.013558 vt 0.071212 0.039131 vt 0.069068 -0.033794 vt 0.034158 0.067142 vt 0.011407 0.030423 vt -0.010540 0.070392 vt -0.368964 -0.015764 vt -0.356545 0.042010 vt -0.332974 -0.007374 vt -0.041326 0.101497 vt -0.061766 0.142755 vt -0.032991 0.137846 vt -0.317890 -0.124907 vt -0.293453 -0.159289 vt -0.292074 -0.135252 vt -0.048650 0.148499 vt -0.259120 0.235085 vt -0.235932 0.242019 vt -0.257608 0.222582 vt -0.326521 -0.041636 vt -0.296894 -0.030770 vt -0.307355 -0.048859 vt 1.008406 0.003559 vt -0.155367 1.369103 vt -0.161947 1.385657 vt -0.177709 1.360623 vt -0.360755 -0.243822 vt -0.359177 -0.208783 vt -0.340930 -0.207810 vt -0.033000 0.161646 vt -0.055974 0.175126 vt -0.338444 -0.029666 vt 0.947854 0.079664 vt 0.976799 0.120820 vt 0.977007 0.066090 vt -0.309183 -0.452921 vt -0.307461 -0.432304 vt -0.281904 -0.457996 vt -0.092892 -0.112584 vt -0.119930 -0.097276 vt -0.090743 -0.091416 vt 0.030104 0.102013 vt 0.066770 0.105241 vt -0.311463 -0.318130 vt -0.322933 -0.287385 vt -0.295442 -0.276533 vt 0.118278 0.074425 vt 0.095895 0.102706 vt 0.116400 0.117695 vt 1.156975 0.063010 vt 1.174555 0.078651 vt 1.178826 0.045348 vt -0.320512 -0.238947 vt -0.053417 -0.140937 vt -0.049844 -0.123594 vt -0.024122 -0.131263 vt -0.186079 0.508835 vt -0.175952 0.494536 vt -0.191031 0.493091 vt -0.000858 -0.121231 vt -0.020430 -0.138269 vt 0.001495 -0.169539 vt 0.026411 0.784338 vt 0.007950 0.802567 vt -0.002128 0.775119 vt -0.045070 0.006571 vt -0.071176 0.034462 vt -0.054705 0.034138 vt -0.227928 0.021889 vt -0.244284 0.017942 vt -0.241053 0.046725 vt 1.033877 0.073524 vt 1.065528 0.083650 vt 1.039527 0.043895 vt 0.988761 0.113813 vt -0.339799 -0.238821 vt 1.349464 -0.140097 vt 1.340474 -0.102935 vt 1.324084 -0.118009 vt 0.802664 -0.001245 vt 0.806943 0.038892 vt 0.829093 0.028855 vt -0.032812 0.025526 vt -0.329436 -0.367410 vt -0.313604 -0.383608 vt -0.303748 -0.365716 vt 0.110675 -0.046708 vt 0.487547 -0.056360 vt 0.501606 -0.063029 vt 0.487980 -0.083234 vt -0.026903 0.103020 vt 1.050558 0.162566 vt 1.062655 0.177966 vt 1.084146 0.141475 vt -0.012437 0.124329 vt 0.075236 0.070202 vt 0.012987 0.115856 vt -0.086374 0.183614 vt -0.094796 0.168389 vt -0.080986 0.165412 vt 0.756052 -0.006192 vt 0.766713 0.052759 vt 0.772545 0.023147 vt 1.123704 0.032226 vt 1.149592 0.031918 vt 1.145004 0.010860 vt 0.877269 0.028618 vt 0.887486 -0.003218 vt 0.862318 -0.012739 vt 0.797951 0.014977 vt -0.060316 0.114668 vt 0.679956 0.160619 vt 0.671498 0.176034 vt 0.686437 0.176592 vt 0.267289 0.066490 vt 0.232863 0.066528 vt 0.259964 0.114587 vt 1.196078 -0.063650 vt 1.185529 -0.048113 vt 1.163766 -0.081551 vt 0.084901 0.122908 vt 0.059971 0.156504 vt 0.085210 0.146973 vt 0.133377 0.018567 vt 0.159834 0.055747 vt -0.210441 1.205691 vt -0.195978 1.217116 vt -0.191289 1.195143 vt -0.292629 -0.327605 vt 0.745904 0.054807 vt 0.728871 0.082710 vt 0.730006 0.044364 vt 0.930714 0.009523 vt 0.970585 -0.020746 vt 0.979675 0.015834 vt 1.299283 0.157158 vt 1.281228 0.173228 vt 1.290695 0.145278 vt 1.300100 0.130681 vt 1.294402 0.114751 vt 0.125238 0.147761 vt 0.118805 0.173672 vt 0.157255 0.175072 vt -0.352624 -0.064505 vt -0.359638 -0.041545 vt 1.309011 0.037286 vt 1.288103 0.048866 vt 1.288665 0.028750 vt 1.302541 0.075732 vt -0.333350 -0.354950 vt -0.356944 -0.334644 vt -0.339875 -0.318593 vt 0.233724 -0.213755 vt 0.257839 -0.219838 vt 0.234267 -0.235088 vt 0.902569 0.056049 vt 0.910757 -0.000188 vt -0.115465 0.217121 vt -0.150037 0.187470 vt -0.131277 0.147444 vt -0.400984 1.115544 vt -0.387842 1.132370 vt -0.408245 1.137813 vt 0.174958 0.101447 vt 0.145446 0.094585 vt 0.148064 0.125679 vt 1.191807 0.019091 vt 1.169979 0.018613 vt 0.584979 0.072922 vt 0.596746 0.101958 vt 0.621784 0.090379 vt 0.480529 0.132998 vt 0.495315 0.108356 vt 0.473399 0.115342 vt -0.330014 -0.419758 vt -0.347586 -0.424763 vt -0.349898 -0.398455 vt 1.200398 -0.002993 vt 1.229640 -0.007364 vt 1.204756 -0.038473 vt -0.425723 1.255970 vt -0.455637 1.262591 vt -0.435062 1.276556 vt 1.413642 -0.352499 vt 1.412125 -0.327605 vt 1.395692 -0.316000 vt -0.389663 1.099366 vt -0.373162 1.113025 vt -0.377055 1.145627 vt -0.389132 1.191644 vt -0.405843 1.157364 vt 1.084697 0.108568 vt 1.099658 0.077254 vt 1.023580 0.044216 vt 0.052291 0.124792 vt 0.029487 0.143297 vt -0.198181 1.334810 vt -0.187587 1.373917 vt -0.308514 0.765304 vt -0.299772 0.784484 vt -0.277270 0.759219 vt -0.199401 0.200586 vt -0.215478 0.196295 vt -0.220796 0.226971 vt -0.370469 1.183621 vt -0.364078 1.228703 vt -0.381185 1.258940 vt -0.403967 1.207117 vt -0.373717 0.217081 vt -0.400362 0.199191 vt -0.381185 0.236468 vt 0.829334 0.062870 vt 0.603711 -0.143106 vt 0.599357 -0.134667 vt 0.615497 -0.127370 vt -0.352696 -0.154958 vt -0.215045 1.267355 vt -0.183998 1.266426 vt -0.203073 1.248111 vt -0.209877 0.018570 vt -0.234435 0.005868 vt 0.187281 0.005366 vt 0.209847 0.042941 vt 0.195800 0.073233 vt 0.744951 0.045646 vt -0.037895 0.581383 vt -0.054709 0.537408 vt -0.030025 0.567212 vt -0.292501 0.016706 vt 0.792653 0.033331 vt -0.207507 0.766524 vt -0.222453 0.784741 vt -0.188848 0.778721 vt 1.305696 -0.131106 vt 1.334470 -0.125353 vt 1.329494 -0.152100 vt -0.091022 1.328190 vt -0.084714 1.357195 vt -0.056789 1.334900 vt -0.341120 1.485846 vt -0.360724 1.486427 vt -0.347586 1.497270 vt -0.290142 0.859180 vt -0.309401 0.893010 vt -0.287508 0.907109 vt -0.109780 0.781803 vt -0.089589 0.797014 vt -0.088619 0.769152 vt -0.032078 0.060679 vt -0.329614 -0.382181 vt -0.307375 -0.406050 vt 1.077178 -0.009399 vt 1.063841 0.020035 vt 1.094859 0.001818 vt 0.095108 0.175267 vt -0.289726 0.992020 vt -0.297577 1.037946 vt -0.273429 1.020942 vt -0.365058 1.170354 vt -0.359889 1.193228 vt -0.341167 1.170107 vt -0.291323 -0.413253 vt -0.302016 -0.409306 vt -0.301290 -0.428249 vt -0.417383 -0.028283 vt -0.383613 -0.040855 vt -0.393615 -0.049801 vt -0.359930 1.171354 vt -0.343593 1.260744 vt 0.849363 -0.065396 vt 0.839960 -0.013461 vt 0.825563 -0.048573 vt -0.101041 -0.053417 vt -0.082133 -0.068378 vt -0.081804 -0.058170 vt 0.165976 0.160514 vt 1.101514 0.238622 vt 1.083188 0.213040 vt 1.074187 0.235072 vt -0.054012 1.421325 vt -0.076676 1.444221 vt -0.038156 1.463558 vt -0.209877 1.329990 vt 0.161365 -0.024236 vt 0.091414 -0.091085 vt 0.048947 -0.084188 vt 0.073628 -0.144517 vt -0.362206 1.090216 vt -0.353539 1.129050 vt -0.344667 1.146461 vt -0.116620 -0.105300 vt -0.091022 -0.126575 vt -0.094569 -0.106164 vt -0.054912 -0.066338 vt 0.659811 0.092235 vt 0.697025 0.099381 vt 0.681280 0.120407 vt 0.870803 -0.027860 vt 0.873968 0.045578 vt 0.853293 0.004520 vt -0.055654 0.091336 vt -0.069959 0.123301 vt -0.065353 0.088334 vt -0.288396 1.180990 vt -0.273314 1.232038 vt -0.252179 1.206745 vt -0.362038 1.063518 vt -0.331011 1.071139 vt -0.342487 1.098255 vt -0.332691 1.213182 vt 1.421118 -0.478968 vt 1.447160 -0.472720 vt 1.421216 -0.472038 vt 1.210958 0.177115 vt 1.241084 0.160946 vt 1.219125 0.150538 vt 1.287416 -0.166774 vt 1.251954 -0.152070 vt 1.272298 -0.194965 vt -0.337754 0.974889 vt -0.353120 0.982267 vt -0.354210 0.956725 vt -0.319793 1.105958 vt -0.323913 1.128156 vt 1.218034 -0.030615 vt 1.229734 -0.027413 vt 1.228631 -0.003376 vt 0.204505 0.153207 vt 0.189012 0.174091 vt 0.184666 0.136275 vt 1.228540 0.012254 vt 1.238696 0.036930 vt 1.252977 0.013801 vt 0.979267 0.048678 vt 1.002993 0.097865 vt 0.976518 0.095213 vt 1.158396 0.076878 vt 1.170259 0.120552 vt 1.146412 0.101793 vt 0.197325 -0.051754 vt 0.221667 -0.026509 vt -0.300676 -0.223171 vt -0.294122 -0.252326 vt -0.282095 -0.229655 vt -0.323972 1.239707 vt -0.166602 -0.057430 vt -0.136830 -0.079171 vt -0.126334 -0.068552 vt 0.939709 -0.047375 vt 0.965866 -0.050213 vt 1.364731 -0.397803 vt 1.362127 -0.436989 vt 1.391541 -0.411582 vt -0.099287 0.649853 vt -0.109448 0.668766 vt -0.091181 0.665399 vt 1.197681 0.067050 vt -0.329723 0.950784 vt -0.314713 0.991982 vt -0.343451 0.990413 vt 0.204015 0.959956 vt 0.187258 0.962049 vt 0.195208 0.942553 vt -0.234965 0.796980 vt -0.221119 0.814197 vt -0.210440 0.797748 vt 0.161674 0.601507 vt 0.185594 0.617704 vt 0.164747 0.629956 vt 0.434985 0.649439 vt 0.417300 0.646810 vt 0.439594 0.610312 vt -0.303512 0.953421 vt -0.324961 0.915508 vt -0.289701 1.406869 vt -0.276468 1.399598 vt -0.291560 1.374951 vt -0.330277 1.007619 vt 0.232829 0.959952 vt 0.115023 0.592789 vt 0.147379 0.613529 vt 0.103423 0.617429 vt 0.170671 0.581405 vt 0.196577 0.578808 vt 0.156571 0.258052 vt 0.181448 0.257349 vt 0.170671 0.278552 vt 0.181448 0.564476 vt 0.156571 0.565193 vt 0.174575 0.552409 vt -0.340893 -0.164505 vt -0.319665 -0.182231 vt -0.331525 -0.158678 vt 0.208571 0.857537 vt 0.219178 0.873619 vt 0.196005 0.885069 vt 0.595074 -0.047629 vt 0.633774 -0.060250 vt 0.606267 -0.028768 vt 1.150238 0.076655 vt 1.146666 0.118115 vt -0.430191 1.239254 vt 0.208249 0.125751 vt -0.321943 0.880678 vt -0.307717 0.899471 vt -0.309613 1.007516 vt 0.159339 1.071270 vt 0.194481 1.048584 vt 0.187818 1.087010 vt -0.181938 -0.027413 vt -0.173817 -0.018809 vt -0.176226 -0.002410 vt 1.074946 0.047564 vt 1.119137 0.058952 vt -0.282139 -0.122234 vt -0.278599 -0.135472 vt 0.733777 -0.102128 vt 0.749615 -0.066564 vt 0.711271 -0.078866 vt 1.305420 -0.315608 vt 1.305240 -0.344027 vt 1.342628 -0.334906 vt 0.247533 0.012364 vt -0.303878 0.871916 vt -0.294667 1.004806 vt 0.136526 0.818542 vt 0.111446 0.807293 vt 0.124304 0.782136 vt 0.218846 0.719971 vt 0.177490 0.697877 vt 0.205553 0.688293 vt 0.200163 0.661081 vt 0.190353 0.678560 vt 0.166598 0.656919 vt 0.189756 1.116429 vt 0.157255 1.109369 vt 0.203897 0.254916 vt 0.196577 0.277762 vt 0.206640 0.550797 vt 0.203897 0.564242 vt 0.486215 -0.051421 vt 0.490417 -0.034072 vt 0.474743 -0.043214 vt 0.881941 -0.006790 vt 0.769050 -0.096310 vt 0.789254 -0.064854 vt -0.020979 -0.021433 vt 0.588927 0.196295 vt 0.588550 0.180587 vt 0.582865 0.209320 vt 0.018892 0.499976 vt 0.068161 0.537058 vt 0.045416 0.515177 vt -0.286517 0.931212 vt -0.289020 0.955823 vt 0.196045 0.770689 vt 0.182231 0.801599 vt 0.171534 0.771162 vt 0.268994 0.970540 vt 0.300444 0.977728 vt 0.280170 1.004216 vt 0.177455 0.733959 vt 0.161007 0.753939 vt 0.142252 0.734341 vt 0.169132 0.807611 vt 0.156357 0.785574 vt 0.167058 0.843951 vt 0.158836 0.872779 vt 0.131073 0.840442 vt 0.108386 0.554489 vt 0.117187 0.574927 vt 0.113895 0.730973 vt 0.134213 0.761025 vt 0.133040 0.664014 vt 0.110944 0.648049 vt 0.123593 0.630796 vt 0.194557 0.725995 vt -0.310397 1.252964 vt -0.297696 1.254949 vt -0.303952 1.287883 vt 1.186314 0.011138 vt 1.218972 0.015354 vt 1.182815 0.038236 vt 0.772457 0.031978 vt 0.773276 -0.000010 vt 0.814698 0.011612 vt 0.992580 -0.034583 vt -0.392867 0.112640 vt -0.435843 0.116778 vt -0.396995 0.150432 vt -0.303884 0.837614 vt -0.289307 0.867414 vt -0.268794 0.899222 vt 0.154699 0.661868 vt 0.174095 0.673878 vt 0.145701 0.676807 vt 0.139611 1.061625 vt 0.118854 1.075698 vt 0.127434 0.690366 vt 0.203540 0.644901 vt 0.208506 0.614778 vt 0.211163 0.777032 vt 0.213237 0.814873 vt 0.807919 -0.082113 vt 0.862690 -0.085142 vt 0.872881 -0.064533 vt -0.010137 1.422476 vt -0.053016 1.417243 vt -0.047512 1.396374 vt 0.662658 -0.038841 vt 0.654085 -0.019771 vt -0.067989 0.078875 vt -0.084617 0.121172 vt -0.093205 0.147702 vt 0.134780 0.007109 vt 0.135236 0.046426 vt 0.127887 0.044906 vt -0.282023 0.820087 vt 0.143600 0.694205 vt 0.198556 -0.112641 vt 0.183505 -0.094882 vt 0.183654 -0.134760 vt 0.325356 0.537341 vt 0.313441 0.546878 vt 0.343928 0.569736 vt 0.148360 0.632539 vt 0.188027 0.287004 vt 0.215164 0.278382 vt 0.195208 0.268246 vt 0.238170 0.885327 vt 0.210415 0.910235 vt 0.233678 0.898028 vt 0.618622 0.046550 vt 0.634304 0.048607 vt 0.635588 0.016736 vt -0.098026 -0.061741 vt -0.135324 -0.058047 vt -0.126719 -0.045286 vt -0.264412 0.868909 vt -0.268363 0.930293 vt 0.439850 0.587564 vt 0.469780 0.618148 vt 0.111630 0.834465 vt 0.229786 0.625107 vt 0.214235 0.589296 vt 0.272002 0.910983 vt 0.255860 0.961994 vt 0.244966 0.929206 vt 0.161712 0.969338 vt 0.153839 1.000907 vt 0.135085 0.992275 vt -0.251610 0.132517 vt -0.238751 0.075859 vt -0.267164 0.091579 vt 0.801951 0.081262 vt 0.799948 0.056797 vt 0.785371 0.057573 vt -0.275646 0.769845 vt -0.273401 0.791300 vt -0.308096 0.801417 vt -0.261893 0.959313 vt -0.262881 0.982382 vt -0.270139 1.018371 vt 0.935385 0.044169 vt 0.178039 1.018518 vt 0.152225 1.036994 vt 0.152774 0.955335 vt 0.148068 0.967440 vt 0.446505 -0.036328 vt 0.445013 -0.007078 vt 0.427525 -0.027233 vt 0.191151 0.298601 vt 1.220496 -0.069122 vt 1.207503 -0.045925 vt 0.252294 1.004565 vt 0.262272 1.041974 vt 0.244209 1.032374 vt 0.120459 0.897074 vt 0.153892 0.923489 vt 0.107483 0.917080 vt 1.054327 0.005754 vt -0.262808 -0.014229 vt -0.244271 -0.009734 vt -0.247315 -0.036132 vt 1.206756 0.108491 vt 1.216858 0.083565 vt 1.204029 0.085177 vt -0.014738 0.159322 vt -0.260082 0.815342 vt -0.247937 0.837968 vt 0.184661 0.986505 vt 0.170864 0.956625 vt 0.120537 1.027331 vt 0.805094 -0.020282 vt 0.766654 -0.043403 vt 0.256690 1.077888 vt 0.240640 1.054304 vt -0.316938 -0.102935 vt -0.330077 -0.067558 vt -0.311450 -0.079182 vt 0.013747 -0.033997 vt -0.247678 0.876592 vt -0.237194 0.908082 vt -0.250294 0.931774 vt -0.239451 0.977748 vt -0.246452 1.027997 vt -0.262662 1.036183 vt 1.283191 -0.293869 vt 1.279187 -0.317725 vt 0.117187 0.265374 vt 0.151616 0.264845 vt 0.144720 0.283057 vt -0.242632 0.779225 vt -0.237784 0.801933 vt 0.103257 0.992616 vt 0.187258 0.248350 vt 0.170864 0.247250 vt 0.180163 0.262922 vt 0.240391 0.945169 vt 1.273818 -0.255435 vt 1.286577 -0.259857 vt 1.267232 -0.263669 vt 0.133255 1.099212 vt 0.115023 0.283007 vt 0.488798 -0.005243 vt 0.204015 0.259122 vt 0.206202 0.228103 vt 0.906408 -0.090865 vt 0.947673 -0.079220 vt -0.066861 -0.108490 vt -0.043249 -0.107883 vt -0.239388 0.850733 vt -0.228048 0.891557 vt -0.226776 0.948934 vt -0.219586 0.997573 vt -0.231369 1.040533 vt 0.171621 0.906505 vt 0.191151 0.922458 vt 0.180163 0.945789 vt 0.223722 0.263292 vt -0.110574 1.345106 vt -0.382247 1.053390 vt -0.374272 1.073422 vt -0.364302 1.047303 vt -0.388199 1.125284 vt -0.415737 1.135919 vt -0.384688 1.147358 vt -0.221404 0.869758 vt -0.095654 -0.087554 vt 0.910868 -0.037875 vt 0.161674 0.297244 vt 0.147379 0.311741 vt 0.100462 0.696337 vt 0.436747 0.680960 vt -0.322006 -0.394592 vt -0.284021 -0.176293 vt -0.297215 -0.181820 vt -0.285049 -0.201129 vt -0.117844 -0.082231 vt -0.225521 0.209320 vt -0.244295 0.216348 vt -0.024726 1.442928 vt -0.217370 0.772021 vt -0.249093 0.763278 vt -0.226877 0.820692 vt -0.218796 0.922558 vt 0.203498 1.073136 vt 0.230767 1.087140 vt 0.213632 1.101777 vt -0.403989 1.169726 vt -0.423579 1.179023 vt -0.392499 1.187337 vt -0.054981 1.405290 vt -0.032542 1.404430 vt -0.220928 0.742232 vt -0.129619 0.222966 vt -0.119986 0.236421 vt -0.144788 0.232225 vt -0.217461 0.816873 vt -0.212756 0.845705 vt -0.199138 1.014156 vt -0.215499 1.037914 vt 0.255860 0.262967 vt 0.231422 0.239875 vt 0.232829 0.267376 vt 0.215164 0.930403 vt 0.969895 -0.066846 vt 0.980977 -0.098385 vt 0.995791 -0.077687 vt 0.160589 0.291589 vt -0.260430 1.228292 vt -0.255531 1.242982 vt 0.297082 0.922902 vt 0.632868 -0.200295 vt 0.668260 -0.188887 vt 0.646944 -0.173659 vt -0.025255 1.343708 vt -0.001791 1.366696 vt 0.012451 1.360467 vt 1.244637 0.102458 vt 1.239674 0.085692 vt 0.459313 0.631132 vt 0.470219 0.664381 vt -0.214096 0.532835 vt -0.238147 0.547910 vt -0.240004 0.528670 vt -0.205627 0.562808 vt -0.235932 0.572864 vt 0.465697 0.678595 vt -0.210690 0.909904 vt 0.268994 0.252802 vt 0.231422 0.987078 vt 0.452362 0.709629 vt 0.460222 0.731289 vt 0.448697 0.720471 vt 1.195163 0.066323 vt -0.084615 0.696210 vt -0.118583 -0.200099 vt -0.106089 -0.214615 vt -0.129167 -0.207922 vt 0.279513 0.883378 vt -0.043039 0.527762 vt -0.067552 0.509202 vt -0.040673 0.513425 vt -0.296463 -0.108121 vt -0.308514 -0.150684 vt -0.286717 -0.133408 vt -0.414013 1.044021 vt -0.405110 1.058254 vt -0.395460 1.023866 vt -0.201719 0.807625 vt -0.197913 0.828156 vt -0.208792 0.879677 vt -0.206773 0.948315 vt -0.205706 0.996344 vt -0.197016 1.056214 vt -0.230676 1.049895 vt 0.114316 0.962485 vt 1.207666 -0.020099 vt 0.731305 -0.209820 vt 0.724554 -0.188961 vt 0.705096 -0.192598 vt -0.146481 -0.024887 vt -0.135556 -0.043866 vt -0.120648 -0.036483 vt 1.241543 -0.135472 vt 1.239199 -0.159289 vt -0.201442 0.231001 vt -0.203541 0.181291 vt -0.200418 0.160619 vt -0.191826 0.176592 vt -0.045022 1.364948 vt -0.194686 0.768135 vt -0.197795 0.892666 vt -0.197573 0.968205 vt 0.252294 0.222111 vt 0.225233 0.222378 vt -0.290028 -0.389552 vt -0.301950 -0.370003 vt -0.286836 -0.352499 vt 0.245847 1.025256 vt 0.208083 0.997377 vt 0.222842 1.029281 vt -0.185004 0.861349 vt -0.180939 0.913144 vt -0.185753 0.941708 vt -0.187218 0.982262 vt -0.173483 1.031400 vt -0.200424 0.185558 vt -0.168426 -0.077318 vt -0.138509 -0.092332 vt 0.214043 1.005707 vt 0.229208 1.040214 vt -0.343524 -0.112944 vt -0.326503 -0.137091 vt -0.205627 0.251723 vt -0.180992 0.227880 vt -0.184768 0.597250 vt -0.184555 0.611571 vt -0.199401 0.597708 vt -0.308921 -0.257626 vt -0.180239 0.793341 vt -0.183065 0.847130 vt 0.115236 0.679288 vt 0.182946 0.854387 vt 0.293700 0.998058 vt 0.301496 1.028275 vt 0.284599 1.017910 vt 0.393587 0.605551 vt 0.475931 0.646815 vt 0.300245 0.501089 vt 0.300339 0.514817 vt 0.312547 0.514470 vt -0.173324 1.074711 vt -0.169310 1.060171 vt -0.158087 1.087049 vt 0.424838 0.594149 vt -0.216373 0.703486 vt -0.207329 0.715574 vt -0.192522 0.705562 vt -0.177265 0.823150 vt -0.176302 0.888956 vt -0.174650 0.963840 vt 0.416643 0.576107 vt 0.480529 0.716435 vt -0.051851 0.105775 vt 0.257078 0.783594 vt 0.279942 0.780718 vt 0.272057 0.805874 vt -0.170856 0.209397 vt -0.184768 0.202348 vt -0.170856 0.595146 vt 0.847857 0.046025 vt 0.843530 0.026050 vt 1.266978 0.077372 vt -0.164130 0.773070 vt -0.175051 0.756820 vt -0.163867 0.839818 vt -0.168333 0.865268 vt -0.172597 1.001843 vt -0.263738 1.050875 vt 0.151616 0.574693 vt -0.175780 1.308434 vt -0.170451 1.340750 vt 1.448460 -0.442157 vt 1.463499 -0.430419 vt 1.417888 -0.399536 vt -0.167108 0.612598 vt -0.170773 0.629081 vt -0.304127 -0.317725 vt -0.319883 -0.323341 vt -0.310648 -0.345014 vt -0.162838 0.820310 vt -0.158236 0.910932 vt -0.162305 0.942233 vt 0.282301 0.920868 vt 0.233724 0.933056 vt 0.253703 0.948892 vt -0.064106 0.520351 vt -0.082221 0.547790 vt -0.050430 0.548934 vt 0.090259 -0.190827 vt 0.075862 -0.180760 vt 0.051701 -0.198026 vt 0.283552 1.058989 vt 0.214235 0.279824 vt 0.307301 0.885719 vt -0.145902 1.402800 vt 0.029839 1.386700 vt -0.012960 1.389426 vt 0.025669 1.406553 vt -0.177100 0.557309 vt -0.155190 0.559928 vt -0.180992 0.577391 vt -0.381570 1.067380 vt -0.154698 0.796785 vt -0.152404 0.880995 vt -0.153867 0.973756 vt 1.496558 -0.247714 vt 1.476077 -0.257499 vt 1.486463 -0.258409 vt 0.074952 1.410296 vt 0.086912 1.437343 vt 0.088900 1.422559 vt -0.298536 -0.398888 vt 0.144720 0.589534 vt -0.147300 0.588782 vt -0.152145 0.748380 vt -0.141631 0.987919 vt -0.133245 1.020470 vt -0.139064 1.070172 vt 0.280170 0.215873 vt 0.189132 0.833762 vt 1.163433 -0.022180 vt 1.180909 -0.027236 vt -0.142440 0.619131 vt 1.172574 -0.010617 vt 1.186676 -0.029135 vt 1.161296 -0.028941 vt -0.155126 0.717145 vt -0.131986 0.726364 vt -0.139859 0.770811 vt -0.141033 0.820697 vt -0.145154 0.849650 vt -0.143447 0.950221 vt -0.119412 1.046667 vt -0.139064 0.154875 vt -0.158087 0.131281 vt -0.169310 0.160425 vt 0.505536 0.015307 vt 0.483978 0.024027 vt 0.236744 0.598318 vt 0.223722 0.580016 vt -0.139451 1.384793 vt -0.133121 0.666377 vt -0.147184 0.662489 vt -0.128383 0.793861 vt -0.126794 0.929138 vt -0.120944 0.152904 vt -0.138575 0.119399 vt 0.676891 -0.011046 vt 0.659287 0.019143 vt 0.452362 0.128547 vt 0.570585 0.055607 vt 0.583933 0.061589 vt 0.590640 0.041604 vt 1.242492 0.017794 vt 1.265668 0.020426 vt 1.270042 0.045032 vt -0.134029 0.559735 vt -0.126122 0.598041 vt -0.131538 0.688732 vt -0.155969 0.677805 vt -0.132350 0.842109 vt -0.137283 0.874521 vt -0.127220 0.904777 vt -0.121168 0.966410 vt -0.120944 1.075771 vt 0.662233 -0.068408 vt 0.303977 0.851593 vt -0.114647 1.416278 vt -0.126719 1.422487 vt -0.116523 0.622907 vt -0.117437 0.811896 vt -0.127802 0.863289 vt -0.109312 1.009720 vt 0.225233 0.998053 vt -0.129046 1.383336 vt -0.119367 1.400589 vt 0.600349 0.153134 vt 0.597736 0.175284 vt 0.609646 0.167671 vt 0.189756 0.168328 vt 0.244158 0.153661 vt 1.246357 -0.013455 vt 1.245729 -0.037601 vt 1.228820 -0.036248 vt -0.125071 0.567418 vt -0.111803 0.663022 vt -0.115938 0.714405 vt -0.095276 0.722284 vt -0.115216 0.763867 vt -0.116319 0.829583 vt -0.104101 0.853241 vt -0.117388 0.920099 vt -0.221297 1.230109 vt -0.094802 0.693347 vt -0.102407 0.801036 vt 0.206202 0.988329 vt -0.098026 1.444770 vt -0.103244 1.431704 vt -0.116314 0.557375 vt -0.107599 0.563178 vt -0.093685 0.623102 vt -0.091295 0.760844 vt -0.105770 0.879237 vt -0.097536 0.903271 vt -0.101569 0.947714 vt -0.100775 0.983806 vt -0.104259 1.407245 vt -0.091604 0.585540 vt -0.090944 0.598076 vt -0.089969 0.791898 vt -0.095194 0.820296 vt -0.087603 0.932229 vt -0.092943 1.017426 vt -0.094748 1.050087 vt -0.093205 1.083330 vt -0.109571 1.099354 vt 0.532755 -0.156139 vt 0.545508 -0.132022 vt 0.508923 -0.122807 vt 0.090373 1.092508 vt -0.093254 1.428050 vt 1.379086 -0.455688 vt 1.410467 -0.432843 vt -0.082694 0.668771 vt -0.081520 0.846350 vt -0.089633 0.872558 vt -0.079931 0.884040 vt -0.085182 0.966956 vt -0.071066 1.064665 vt 0.161235 -0.051346 vt -0.069942 0.649266 vt -0.080769 0.734054 vt -0.078045 0.856209 vt -0.080933 1.447423 vt 1.427742 -0.064367 vt 1.436874 -0.086928 vt 1.442046 -0.073993 vt -0.071680 0.819931 vt -0.070115 0.919867 vt -0.064572 0.939360 vt -0.066233 0.997110 vt 0.001738 -0.124801 vt 0.032502 -0.151278 vt 0.033933 -0.127161 vt -0.077816 1.437355 vt 1.085070 0.126147 vt 1.114166 0.104449 vt 1.108866 0.116467 vt -0.061102 -0.098009 vt -0.065421 0.615721 vt -0.068574 0.689447 vt -0.059701 0.809702 vt -0.061280 0.965598 vt -0.055974 1.047474 vt 0.133255 0.189023 vt 0.829349 0.006110 vt 0.822110 -0.013089 vt -0.057132 0.722769 vt -0.064660 0.762544 vt -0.057034 0.793624 vt -0.065548 0.844945 vt -0.054423 0.856067 vt -0.064432 0.907810 vt -0.038162 1.002475 vt 0.517946 -0.047629 vt 0.521894 -0.027055 vt 0.586666 -0.027055 vt 0.218029 0.664224 vt -0.065662 1.451660 vt -0.069469 1.460839 vt -0.071959 1.471275 vt -0.060642 1.466087 vt -0.053427 1.483505 vt 0.792953 0.081162 vt 0.752340 0.088603 vt 0.757893 0.071980 vt 1.276474 -0.332479 vt 1.286100 -0.329877 vt 1.282051 -0.353443 vt -0.049225 0.634172 vt -0.040343 0.666888 vt -0.047964 0.873167 vt 0.875382 0.031250 vt 0.916858 -0.006875 vt 0.489354 0.697684 vt -0.258407 0.119184 vt -0.250126 0.088647 vt -0.265250 0.102213 vt -0.069469 -0.075162 vt -0.060642 -0.080582 vt -0.071959 -0.087935 vt 0.493306 -0.083234 vt 0.507692 -0.083253 vt 0.505204 -0.072137 vt -0.041338 0.690393 vt -0.050638 0.768773 vt -0.055587 0.833342 vt -0.044179 0.891809 vt -0.044740 0.919618 vt -0.045472 0.968996 vt 0.130670 0.954053 vt 0.390748 0.616922 vt 0.379941 0.577901 vt 0.105940 1.011702 vt 0.109044 1.064086 vt 0.098712 0.878143 vt 0.094900 0.855627 vt -0.043624 0.728836 vt -0.037992 0.758361 vt 0.800089 0.225443 vt 0.793380 0.234856 vt 0.823728 0.233183 vt 0.811282 0.253851 vt -0.317865 1.226508 vt -0.294668 1.220861 vt -0.312635 1.211752 vt 0.837193 0.247794 vt -0.047097 0.846806 vt -0.042843 0.943339 vt -0.080933 -0.063439 vt -0.287226 1.451520 vt -0.266585 1.430731 vt 0.784010 0.224006 vt 1.470863 -0.459344 vt -0.030310 0.905604 vt -0.023589 1.031578 vt -0.021998 1.051267 vt -0.033000 1.063663 vt -0.214929 0.109975 vt -0.218720 0.084198 vt 0.293771 0.501229 vt 0.506123 0.038440 vt -0.037661 1.484395 vt -0.029134 1.493856 vt -0.043249 1.494882 vt 1.437964 -0.389552 vt -0.305447 -0.286266 vt -0.291119 -0.293869 vt -0.284507 -0.264491 vt -0.041451 0.629306 vt -0.032496 0.687979 vt -0.032960 0.734374 vt 1.423721 -0.330339 vt 1.418487 -0.305034 vt 1.435637 -0.332963 vt 1.297247 -0.379693 vt 1.305959 -0.398888 vt 1.336673 -0.369685 vt -0.026310 0.897161 vt -0.025423 0.946258 vt 0.144963 -0.144531 vt 0.157399 -0.175086 vt 0.125669 -0.163679 vt -0.336756 -0.218084 vt -0.331706 -0.237897 vt -0.319891 -0.218380 vt 1.308084 -0.185958 vt -0.019955 0.278253 vt -0.037565 0.272435 vt -0.037895 0.284149 vt -0.027096 0.258006 vt 0.678366 0.202661 vt 0.696937 0.216531 vt 0.724761 0.217571 vt -0.204206 0.084629 vt 0.269334 0.023409 vt -0.295511 -0.086037 vt -0.282272 -0.070527 vt -0.022181 0.916785 vt -0.016878 0.974957 vt 0.096680 1.078498 vt 0.075378 1.041740 vt 0.061143 1.064672 vt 0.106141 0.756692 vt -0.210436 0.115767 vt -0.007329 0.573213 vt -0.009106 0.590872 vt -0.013542 0.551238 vt -0.036394 0.546987 vt 0.904801 -0.119002 vt 0.905358 -0.150818 vt 0.938503 -0.143925 vt -0.305583 -0.212548 vt -0.322904 -0.189873 vt -0.343593 0.239713 vt -0.350076 0.219222 vt 0.580044 0.115767 vt 0.564962 0.084629 vt -0.289547 -0.234515 vt -0.000977 0.922062 vt -0.003895 1.028899 vt -0.014738 1.075759 vt -0.048650 1.073273 vt -0.016621 1.493504 vt -0.004567 1.502637 vt -0.018453 1.505034 vt -0.009106 0.288779 vt -0.007724 0.264805 vt -0.005304 0.241058 vt -0.022247 0.233776 vt -0.010239 0.227950 vt -0.023731 0.214591 vt -0.285456 1.276801 vt 0.220954 0.099121 vt -0.403939 0.053701 vt -0.385396 0.071827 vt 1.468864 -0.406050 vt 0.000617 0.961803 vt -0.002154 1.068245 vt 0.722077 0.016709 vt 0.709741 -0.027582 vt 0.728911 -0.015475 vt 0.396575 0.547653 vt 0.297421 1.082417 vt 0.692132 0.022634 vt 0.775592 -0.006064 vt 0.787930 -0.029834 vt -0.337576 -0.145265 vt 1.524745 -0.176083 vt 1.517066 -0.194777 vt 1.532446 -0.200710 vt 0.002757 0.935529 vt -0.021998 0.173761 vt -0.023589 0.192360 vt -0.002154 0.174635 vt 0.233868 0.978612 vt 0.248435 0.986183 vt 0.255697 0.978246 vt 0.014577 0.576016 vt 0.006912 0.258874 vt 0.610603 0.246396 vt 0.610885 0.227950 vt 0.601869 0.241058 vt -0.014292 0.916215 vt -0.034815 0.902634 vt -0.050952 0.908130 vt -0.168426 1.272533 vt -0.147268 1.300941 vt -0.138509 1.289134 vt 0.635503 0.118535 vt -0.105370 0.729999 vt -0.087233 0.755020 vt -0.090545 0.726904 vt 0.020163 1.026309 vt 0.015671 0.158616 vt 0.014577 0.302083 vt 0.022947 0.284976 vt 0.012591 0.254178 vt 0.012591 0.611911 vt 0.004890 0.620216 vt -0.005304 0.611483 vt 1.286286 0.065805 vt 1.279873 0.050893 vt 0.266568 1.097891 vt 0.245055 1.101912 vt 0.021782 0.936179 vt 0.021830 1.056629 vt -0.071694 0.037327 vt -0.081733 0.032690 vt -0.059650 0.018578 vt 1.244022 -0.002410 vt 0.494961 0.677658 vt -0.288288 0.179688 vt -0.303952 0.205483 vt -0.258293 0.181100 vt 0.245877 -0.021313 vt -0.241506 0.168934 vt -0.212853 0.169643 vt -0.235950 0.150368 vt -0.218386 0.037286 vt 0.015636 0.965914 vt 0.025801 0.993289 vt 0.032987 0.180089 vt 0.001244 1.512125 vt 0.011651 1.522057 vt -0.001231 1.523705 vt 0.812515 -0.042495 vt 0.031987 0.266471 vt 0.025652 0.263752 vt 0.031987 0.599574 vt 0.025652 0.611357 vt 0.006912 0.605160 vt 0.601744 0.263752 vt 0.616017 0.270047 vt 0.626622 0.250529 vt 1.403692 -0.276533 vt -0.000916 0.848356 vt 0.023355 0.827187 vt 0.032034 0.842577 vt 0.056207 0.248668 vt 0.041023 0.258186 vt 0.066853 0.284686 vt 0.032987 1.080425 vt 0.230092 0.645831 vt -0.049513 0.802994 vt -0.340275 0.080617 vt -0.351422 0.106519 vt 0.043335 0.792183 vt 0.034764 0.814024 vt 0.287146 -0.016442 vt 0.290682 -0.048652 vt 0.032351 0.939494 vt 0.038098 0.967281 vt 0.035564 1.016543 vt 0.040841 1.065510 vt 1.341156 -0.431072 vt -0.108596 0.754538 vt 0.050617 0.587519 vt 0.022947 0.589667 vt 0.050617 0.275466 vt 0.044903 0.603224 vt 0.041885 0.631676 vt 0.023901 0.625630 vt 0.247350 -0.049049 vt 0.044234 0.859107 vt 0.016632 0.878923 vt -0.300473 -0.379693 vt 0.046831 0.969877 vt 0.045838 1.045385 vt 0.247096 0.550722 vt 0.228092 0.569747 vt 0.034507 0.507384 vt 0.047647 0.500786 vt 0.037764 0.750388 vt 0.048595 0.765903 vt 0.054437 0.813672 vt 0.055673 0.894155 vt 0.047301 0.902558 vt 0.033164 -0.108476 vt 0.045586 -0.123338 vt 0.065427 0.570140 vt 0.051961 0.594113 vt 0.060738 0.654743 vt 0.036767 0.674381 vt 0.048254 0.686949 vt 0.046047 0.707366 vt 0.050536 0.729678 vt 0.066275 0.779613 vt 0.059722 0.871426 vt -0.024840 -0.099475 vt -0.035845 -0.110596 vt 0.056360 0.991629 vt 0.058029 1.078849 vt 0.056858 0.619549 vt 1.252328 -0.176293 vt 1.394858 -0.260851 vt 1.390181 -0.208783 vt 1.405966 -0.243822 vt -0.278166 1.241492 vt 0.056207 0.945082 vt 0.066401 0.952925 vt 0.058029 0.193631 vt 0.151403 0.545966 vt 0.069435 0.586610 vt 0.068025 0.608853 vt 1.361737 -0.123734 vt 1.359761 -0.139033 vt 1.372968 -0.130333 vt 0.064694 0.726611 vt 0.059256 0.707523 vt 0.060924 0.750351 vt 0.074559 0.756377 vt 0.069473 0.843734 vt 0.077777 0.894521 vt 0.314447 0.981213 vt 0.319551 1.003783 vt 0.078837 0.643136 vt -0.047593 0.895083 vt 0.081885 0.802219 vt 0.076034 0.907037 vt -0.025255 -0.135462 vt 0.012451 -0.149335 vt 0.084497 1.017502 vt 0.725502 -0.050642 vt 0.088525 0.598671 vt 0.084288 0.729214 vt 0.074957 0.866247 vt 0.076034 0.320821 vt 0.069821 0.294290 vt 0.055673 0.325414 vt -0.277553 -0.152070 vt 0.092415 1.058502 vt 0.090373 0.188320 vt 0.089697 0.674002 vt 0.061477 0.689907 vt 0.067995 0.675526 vt 0.094420 0.782978 vt 0.093602 0.815605 vt 0.092783 0.244306 vt 0.066401 0.243258 vt 0.081062 0.250764 vt 0.092783 0.957624 vt 0.085708 0.970559 vt 1.348340 -0.443667 vt 0.587608 -0.074401 vt 0.623190 -0.073163 vt 0.093710 0.575818 vt 0.097306 0.584749 vt 0.069435 0.271100 vt 0.097306 0.269708 vt 0.088525 0.285101 vt -0.206959 0.180587 vt -0.223887 0.191807 vt 0.095764 0.277898 vt 0.092268 0.932001 vt -0.050120 1.473668 vt -0.461104 0.065805 vt -0.449925 0.030093 vt -0.465569 0.050893 vt 0.510459 0.718452 vt 1.268795 -0.229655 vt 1.288535 -0.236185 vt 0.118805 1.111262 vt 0.095108 1.106591 vt 0.761518 -0.035433 vt 0.092268 0.298408 vt 0.131111 0.298222 vt 0.264382 0.577878 vt 0.246672 0.576832 vt 0.218107 0.838663 vt 0.015038 -0.122656 vt -0.017849 -0.106362 vt -0.005383 -0.095938 vt 0.372203 0.647479 vt 0.380717 0.674202 vt 0.348793 0.657505 vt -0.039585 1.352636 vt -0.082280 1.351364 vt -0.056548 1.342204 vt -0.031085 1.340455 vt 0.233633 0.682146 vt 0.221790 0.693709 vt 0.241813 0.864242 vt 0.262088 0.889542 vt 1.401572 -0.057727 vt 1.388431 -0.078926 vt 0.247867 0.800584 vt -0.260377 0.775324 vt -0.242789 0.778871 vt -0.241479 0.756105 vt 0.612855 0.093751 vt 0.620460 0.127880 vt 0.576590 0.103730 vt 0.686310 0.145758 vt 0.701495 0.171895 vt 0.670108 0.155267 vt 0.627619 0.110308 vt 0.640383 0.138358 vt 0.013678 -0.020072 vt -0.007838 0.018067 vt -0.013512 -0.041641 vt -0.114000 0.531186 vt -0.130702 0.537526 vt -0.142195 0.510483 vt -0.122844 0.831737 vt -0.091927 0.813363 vt -0.083306 0.713421 vt -0.072901 0.690813 vt 0.371521 0.783922 vt 0.381939 0.811836 vt 0.346432 0.803174 vt 0.468881 0.599961 vt 0.259549 0.623946 vt 0.290278 0.621378 vt 0.286831 0.645160 vt -0.056822 0.972924 vt -0.085343 0.954497 vt 0.362426 0.566659 vt 0.374489 0.603067 vt 0.491615 -0.062155 vt 0.404678 0.733448 vt 0.418791 0.730904 vt 0.406561 0.713830 vt 0.329900 0.640534 vt 0.321004 0.650585 vt 0.341044 0.742034 vt 0.321449 0.730069 vt 0.342872 0.697401 vt 0.247830 0.767832 vt 0.228967 0.779808 vt 0.257839 0.914862 vt 0.283339 0.875585 vt 0.264552 0.875678 vt -0.172097 0.512854 vt 1.322130 -0.413253 vt 1.338442 -0.410680 vt 0.228092 0.249115 vt 0.068173 1.393321 vt 0.063981 1.420141 vt 0.051082 1.382581 vt -0.327832 1.153591 vt -0.323533 1.189273 vt 0.356289 0.599589 vt 0.339577 0.610957 vt 0.332761 0.573219 vt 0.590720 -0.008763 vt 1.258400 -0.201129 vt 0.232621 0.741147 vt -0.313704 1.054858 vt -0.295812 1.070600 vt -0.308095 1.078971 vt -0.297987 1.112421 vt -0.309005 1.162245 vt 1.143978 0.287842 vt 1.152631 0.265747 vt 1.179660 0.272643 vt -0.332776 -0.353443 vt -0.185346 0.516226 vt 0.074952 -0.215250 vt 0.088900 -0.230432 vt 0.086727 -0.208546 vt -0.310785 1.014847 vt -0.086849 1.386014 vt -0.067321 1.384040 vt -0.083151 1.398044 vt 0.241278 0.829421 vt -0.293971 1.087770 vt -0.312558 1.215593 vt 0.431750 0.695923 vt 0.268876 0.761378 vt 0.261630 0.737611 vt 1.037340 0.266651 vt 1.045245 0.294306 vt 1.031636 0.283724 vt 1.060986 0.288704 vt 1.102808 0.287896 vt 1.123049 0.269201 vt 0.865228 0.154766 vt 0.898052 0.167557 vt 0.887295 0.189316 vt 0.710858 0.125974 vt 0.713591 0.147822 vt 0.730160 0.123534 vt 0.749489 0.157455 vt -0.050000 1.371975 vt -0.091604 1.370698 vt 0.314447 0.215743 vt 0.293700 0.216842 vt 0.300444 0.233170 vt -0.297558 0.266651 vt -0.316840 0.283724 vt -0.314713 0.262115 vt 1.205980 0.254197 vt 0.882520 0.098597 vt 0.901178 0.116081 vt 0.958221 0.152510 vt 0.972579 0.124925 vt 1.009566 0.129255 vt 0.768629 0.126273 vt 0.786601 0.136844 vt 1.106580 0.263160 vt 1.175817 0.246165 vt -0.079163 -0.148951 vt -0.076931 -0.127414 vt -0.068696 -0.134667 vt 0.857201 0.182137 vt -0.114572 0.898328 vt -0.122365 0.931066 vt -0.087155 0.905880 vt 1.062259 0.265815 vt 1.078156 0.290688 vt 1.088066 0.248837 vt 1.220316 0.236425 vt -0.300225 1.229929 vt 1.241546 0.063085 vt 1.229233 0.057417 vt 0.358945 1.013543 vt 0.363132 1.035005 vt 0.345628 1.037529 vt -0.279344 0.218655 vt -0.290673 0.208778 vt 1.034997 0.218655 vt 1.157073 0.233045 vt 0.516167 0.679074 vt 0.969218 0.184861 vt 1.003929 0.176618 vt 0.993988 0.198596 vt 0.341990 0.977970 vt 0.380231 0.936829 vt 0.369984 0.978832 vt 1.119144 0.234638 vt 1.193077 0.223225 vt 0.510035 0.223573 vt 0.512189 0.205997 vt 0.528931 0.226895 vt -0.310785 0.204948 vt -0.322598 0.241200 vt 1.059839 0.234432 vt 1.171759 0.213123 vt 1.226770 0.205663 vt 1.245336 0.222988 vt 0.031162 1.413020 vt 0.015038 1.387056 vt 0.503099 0.621088 vt 0.519965 0.630074 vt 0.519317 0.649996 vt 0.321925 0.684435 vt 0.302571 0.676046 vt 0.299753 0.648594 vt 0.760166 0.179534 vt 0.338859 0.927129 vt 0.331102 0.961496 vt 0.319186 0.967999 vt 0.040981 1.467046 vt 0.061895 1.463565 vt 0.069926 1.488749 vt 0.703313 -0.044257 vt 0.865601 0.212599 vt -0.286615 1.020050 vt -0.290673 1.029422 vt 1.108084 0.232590 vt 0.605415 -0.003000 vt 0.615946 0.025260 vt 1.187756 0.124664 vt 1.193353 0.169944 vt 1.196165 0.137812 vt 0.184061 0.500028 vt 0.212033 0.498490 vt 0.202465 0.519018 vt 0.899906 0.208637 vt 0.079281 1.417118 vt 0.057858 1.442340 vt 0.066751 1.379943 vt 1.235307 -0.047864 vt 1.087477 0.232616 vt 1.193353 0.190428 vt -0.280161 1.258018 vt -0.023592 -0.067796 vt -0.050000 -0.080341 vt -0.039585 -0.051826 vt -0.173593 -0.030160 vt 0.317489 0.561491 vt 0.303441 0.594999 vt 0.289019 0.570060 vt 0.325448 -0.193243 vt 0.332579 -0.166651 vt 0.306775 -0.172184 vt -0.279917 1.030416 vt -0.279917 0.200260 vt 1.062389 0.220386 vt 1.135609 0.218565 vt -0.262537 1.145222 vt -0.272018 1.175123 vt -0.269564 1.128757 vt -0.283117 1.181372 vt 1.209103 0.197196 vt -0.280021 1.236383 vt -0.076260 0.677752 vt 1.380900 -0.169024 vt 1.370329 -0.141087 vt 1.367908 -0.164386 vt 1.041261 0.203452 vt 1.020803 0.200260 vt -0.273802 1.202967 vt -0.001989 1.341721 vt -0.004635 1.353110 vt 0.269563 0.850610 vt 0.253741 0.861206 vt 0.937810 0.177548 vt 0.758938 0.250978 vt 0.766433 0.265521 vt 0.720456 0.249394 vt 0.291994 0.950502 vt 1.383708 -0.150543 vt 1.392715 -0.168589 vt -0.259546 1.072002 vt -0.230946 1.073833 vt -0.262130 1.097090 vt -0.230629 1.107832 vt -0.263263 1.117697 vt -0.240454 1.137019 vt -0.261757 1.267773 vt -0.117270 1.002299 vt -0.354895 1.228488 vt -0.386133 1.210172 vt -0.358642 1.239079 vt -0.075843 0.077674 vt -0.082141 0.046976 vt 0.052759 1.396830 vt 0.048126 1.419785 vt 0.927215 0.200622 vt 0.802222 0.228180 vt 0.785071 0.205569 vt 0.822205 0.205386 vt 0.317209 1.048404 vt 0.080152 1.402328 vt -0.258468 1.197511 vt -0.255271 1.233092 vt -0.255807 1.250783 vt -0.275419 1.218716 vt -0.219955 0.509594 vt 0.802743 0.050973 vt 0.225290 0.518979 vt 0.271195 0.527961 vt 1.502511 -0.134077 vt 1.493024 -0.130405 vt 1.461763 -0.143983 vt -0.004869 1.407141 vt -0.017849 1.384522 vt 1.006868 0.066415 vt 1.007323 0.037222 vt 0.995681 0.066566 vt -0.236717 1.174615 vt 1.201766 0.177431 vt 1.223479 0.185266 vt -0.252949 1.282666 vt -0.189566 -0.047864 vt 0.051082 -0.130333 vt 0.033602 -0.108072 vt 0.333094 0.768551 vt 0.355664 0.766633 vt 0.338132 0.792349 vt 0.258784 0.587205 vt 0.272841 0.597219 vt -0.260713 1.211380 vt 0.034728 0.552884 vt 0.069982 0.555690 vt 0.022248 -0.191674 vt 0.023776 -0.175261 vt 0.040099 -0.200710 vt -0.150083 1.352966 vt -0.137462 1.343373 vt 0.361780 0.695705 vt 0.723240 -0.033513 vt 0.299308 0.727185 vt 0.309931 0.745608 vt 0.290542 0.738896 vt 0.016183 1.450350 vt -0.022550 1.438841 vt 1.282638 0.115471 vt -0.226130 1.139059 vt -0.235476 1.202305 vt -0.249287 1.228803 vt 1.219190 0.170593 vt 1.261866 0.167655 vt 1.241169 0.192663 vt 1.273053 0.187556 vt -0.258293 1.298980 vt -0.242381 1.290842 vt -0.241872 1.308897 vt 0.776370 -0.193471 vt -0.003687 -0.095884 vt -0.001989 -0.081374 vt -0.015547 -0.081785 vt 0.279892 0.696387 vt 0.296907 0.704424 vt 0.302414 0.771562 vt 0.039691 1.363550 vt 0.033602 1.372226 vt 0.019058 1.363098 vt -0.204712 1.088737 vt 1.231879 -0.111279 vt 1.249307 -0.087928 vt 1.222424 -0.101285 vt 0.295442 0.814845 vt 0.007658 0.981063 vt -0.003357 0.968739 vt -0.011312 1.005812 vt 0.813673 0.261968 vt 0.801670 0.277417 vt 0.782735 0.258714 vt 0.052605 1.371351 vt -0.183998 -0.071609 vt 1.483891 -0.118804 vt 0.279641 0.591101 vt 0.033164 1.353245 vt 0.019058 -0.090904 vt -0.210144 1.101375 vt 1.098218 0.216176 vt 1.102998 0.186540 vt 1.129446 0.199836 vt -0.226348 1.208370 vt -0.225777 1.246764 vt -0.241992 1.271480 vt 0.177861 0.230484 vt 0.160711 0.243257 vt 0.147766 0.216163 vt -0.187858 0.508734 vt -0.153040 0.522473 vt -0.006396 1.471376 vt 0.601403 0.214397 vt 0.611507 0.232358 vt 0.585386 0.220930 vt 0.336290 0.823286 vt 0.322268 0.841761 vt 0.322317 0.811283 vt 0.508666 0.179791 vt 0.527558 0.181938 vt 1.079123 0.185921 vt 1.064220 0.206776 vt 1.040282 0.191028 vt 1.091761 0.195758 vt -0.203597 1.112611 vt -0.195970 1.143440 vt -0.209842 1.188465 vt -0.222637 1.227020 vt 0.704820 0.123022 vt 0.270013 0.561124 vt 0.280130 0.678738 vt 0.278975 0.554099 vt -0.123740 1.324073 vt -0.116620 1.303381 vt -0.207080 1.061889 vt 1.237150 0.155163 vt 1.259300 0.147081 vt -0.049852 1.470258 vt 0.723313 0.112973 vt 0.654869 0.056062 vt 0.697032 0.053589 vt 1.343632 -0.108476 vt 1.353485 -0.090904 vt 1.343337 -0.089495 vt 0.593454 0.171770 vt 0.624846 0.177141 vt 0.589975 0.191810 vt -0.086867 -0.046319 vt 0.590645 0.029986 vt 0.299784 0.538544 vt 0.332724 0.853319 vt 0.052759 -0.190921 vt 0.080593 -0.195733 vt 0.016383 -0.089495 vt 0.015823 -0.103690 vt 1.261424 0.129020 vt -0.287561 -0.448452 vt -0.279723 -0.443667 vt 0.416058 0.015938 vt 0.423418 0.053941 vt 0.402878 0.034726 vt 0.387195 0.703493 vt 0.397963 0.743650 vt 0.376078 0.733267 vt -0.259120 0.566559 vt 0.330375 0.908635 vt 1.078346 0.164411 vt 1.101921 0.165310 vt 1.133827 0.170213 vt -0.189964 1.161462 vt 1.435292 -0.117491 vt -0.330374 1.049422 vt -0.037514 1.444905 vt 1.391405 -0.187766 vt 0.399624 0.707280 vt 0.879928 0.292475 vt 0.873764 0.272063 vt 0.901370 0.270580 vt 0.014669 1.488641 vt 0.310748 0.931945 vt 0.319186 0.229308 vt -0.178302 1.074387 vt 1.052275 0.175992 vt -0.183646 1.087960 vt 1.178852 0.154015 vt 1.193608 0.128779 vt 1.198756 0.157026 vt 1.229632 0.127091 vt 1.217406 0.146350 vt 0.793560 0.252940 vt 0.826850 0.240324 vt 0.835810 0.132303 vt 0.607308 0.164716 vt 0.342883 1.003601 vt 0.355604 0.948977 vt 1.109208 0.148545 vt 1.139465 0.137515 vt 1.151848 0.152522 vt 0.261243 0.651203 vt -0.086867 1.309864 vt -0.054912 1.317481 vt 0.402315 0.770867 vt 0.800175 0.116499 vt 0.377986 0.767772 vt 0.356748 0.747586 vt 0.349602 0.876092 vt 0.563605 0.202458 vt 0.551878 0.217292 vt 0.533079 0.205938 vt 0.316496 0.590302 vt 0.322845 0.611017 vt 1.064773 0.155364 vt 1.078764 0.142342 vt 0.354603 0.836463 vt 0.375196 0.831823 vt 1.016157 0.062235 vt 0.808273 0.158954 vt 1.227490 0.058966 vt -0.143922 1.013106 vt -0.135116 0.991858 vt 0.857032 0.233411 vt 0.822210 0.231862 vt 0.362094 0.905037 vt 0.389334 0.909519 vt 0.328452 1.065511 vt 0.331534 0.642482 vt 0.349095 0.633273 vt 0.337108 0.613874 vt 1.317937 -0.297490 vt 1.300650 -0.279958 vt 1.065098 0.148984 vt 0.000312 0.544837 vt -0.091604 -0.064027 vt -0.057246 -0.067818 vt -0.114472 1.387447 vt -0.108256 1.361319 vt 0.590671 -0.231398 vt 0.586562 -0.221556 vt 0.592610 -0.214501 vt 0.761254 0.203624 vt 0.734037 0.201254 vt -0.302590 1.230670 vt -0.282139 1.242283 vt -0.160303 1.094683 vt -0.174810 1.088377 vt 1.503948 -0.127354 vt 1.495420 -0.117650 vt -0.120648 1.284098 vt -0.124692 1.289831 vt -0.146481 1.268431 vt 0.365227 -0.062609 vt 0.345163 -0.054689 vt 0.319434 -0.082134 vt 0.637865 0.208481 vt 0.088103 1.438544 vt 0.309535 -0.050646 vt 0.300245 -0.065107 vt 0.312547 -0.069075 vt 0.808867 0.178544 vt 0.837591 0.162033 vt -0.101475 0.536099 vt -0.099990 0.501049 vt -0.113500 0.506126 vt 0.249756 0.713115 vt -0.031085 -0.060058 vt -0.023592 1.361340 vt 1.187894 0.093300 vt 0.630920 0.231680 vt 0.662988 0.188964 vt 0.647892 0.226603 vt 0.686092 0.225942 vt 0.665020 0.241701 vt 0.340767 0.674633 vt 0.316005 0.788414 vt 1.451075 -0.477100 vt 0.638918 0.086948 vt -0.226705 -0.152338 vt -0.196895 -0.142744 vt -0.207329 -0.132224 vt 0.640700 0.159244 vt -0.419625 -0.000512 vt 0.008415 -0.112350 vt 0.664589 0.213343 vt 1.380891 -0.218224 vt 1.369574 -0.188742 vt -0.216775 0.016736 vt -0.230410 0.015970 vt -0.233093 -0.013762 vt 1.527219 -0.219365 vt 0.016383 1.352951 vt 0.840996 0.290192 vt -0.186889 0.557857 vt -0.171521 0.542284 vt 1.368983 -0.461199 vt 0.532323 -0.008763 vt 0.538094 0.029986 vt 0.756846 0.011254 vt 0.742552 -0.022071 vt 0.749709 -0.028755 vt 0.400518 0.794684 vt -0.029822 -0.085203 vt 1.461429 -0.108844 vt 1.460645 -0.087853 vt 0.449764 0.134031 vt 0.468881 0.151290 vt 0.439850 0.160615 vt -0.332203 1.221013 vt -0.343524 1.236671 vt -0.064202 0.134963 vt 0.836885 0.104410 vt -0.364721 -0.016774 vt -0.352043 -0.045539 vt -0.345184 -0.031058 vt 0.612685 0.068678 vt 0.061475 -0.243638 vt 0.069829 -0.236786 vt 0.078970 -0.247714 vt 1.294731 -0.357882 vt 1.291501 -0.367410 vt 1.384207 -0.195733 vt 0.486804 0.589092 vt 0.939363 0.218379 vt 0.968357 0.204937 vt 0.344516 0.900512 vt -0.266101 1.399498 vt 0.541474 0.690893 vt -0.196763 0.175284 vt 0.022342 0.996309 vt 0.045346 0.981281 vt -0.379212 -0.305034 vt -0.369331 -0.287268 vt -0.355513 -0.302212 vt -0.096540 1.384427 vt 0.173919 0.525909 vt 0.935104 0.136481 vt 0.507466 -0.156657 vt 0.493156 -0.127665 vt 0.001382 0.516176 vt 1.393182 -0.356488 vt 0.233965 0.702434 vt 0.774309 0.234725 vt -0.194249 1.298278 vt 1.446327 -0.242627 vt 1.447531 -0.253113 vt 0.111785 0.248249 vt 0.563814 0.186695 vt 0.557046 0.155154 vt 0.732798 0.049632 vt 0.741733 0.068463 vt 1.481130 -0.241433 vt 0.590117 0.078795 vt -0.183153 1.275282 vt 0.324187 0.181938 vt 0.330856 0.158580 vt 0.342545 0.155952 vt 0.704002 0.077172 vt 1.400982 -0.191028 vt 1.428931 -0.208134 vt 1.407505 -0.179936 vt 0.412123 0.650314 vt 0.486408 -0.074401 vt 0.458206 -0.079399 vt 0.423362 0.679722 vt 0.697667 0.203576 vt 0.854629 0.311304 vt 0.851593 0.299684 vt 0.875714 0.306862 vt 0.758158 0.220695 vt 0.417799 0.769779 vt 0.325356 -0.088682 vt 0.307598 -0.103859 vt 0.244199 0.675394 vt 1.265715 -0.004035 vt -0.152042 1.309872 vt 0.155397 -0.244938 vt 0.193981 -0.237709 vt 0.189323 -0.261467 vt 0.379726 0.866646 vt 1.300259 -0.000235 vt 1.315038 -0.003395 vt 1.331136 0.003687 vt 1.456474 -0.080582 vt 0.063862 0.510296 vt 0.083612 0.522104 vt 1.405369 -0.090732 vt 0.358213 0.656557 vt -0.157713 1.324651 vt 1.325234 -0.017057 vt 1.343353 -0.010975 vt -0.082280 -0.037240 vt 0.045790 0.506673 vt 1.512444 -0.147248 vt 1.486570 -0.177413 vt -0.160378 1.118479 vt -0.099020 -0.053117 vt -0.134189 1.307571 vt -0.159225 1.275329 vt -0.137600 1.321519 vt -0.145380 1.334847 vt -0.088388 1.333346 vt 1.347425 -0.123338 vt -0.356620 0.928888 vt -0.369145 0.904397 vt -0.373882 0.933579 vt 0.533001 0.155952 vt 0.925558 0.052417 vt 0.949316 0.011227 vt -0.078068 0.514539 vt 0.030355 -0.176083 vt 1.025391 0.157129 vt -0.057031 -0.251579 vt -0.036875 -0.221556 vt -0.024977 -0.235111 vt 1.281217 -0.345014 vt 1.290051 -0.365716 vt 1.280218 -0.027744 vt 1.258817 -0.024887 vt 1.333760 -0.024903 vt 0.784487 -0.101158 vt 1.407630 -0.106726 vt -0.128114 1.331012 vt 0.842974 0.080752 vt 1.457433 -0.182266 vt 1.479135 -0.217273 vt 0.313438 0.621121 vt 0.326614 0.776046 vt 0.331102 0.224129 vt 0.740316 0.013554 vt 0.111785 0.953517 vt -0.115323 1.330236 vt -0.126531 -0.033485 vt -0.137462 -0.024903 vt -0.128114 -0.013515 vt 1.351088 -0.041172 vt 1.373723 -0.026096 vt 1.503471 -0.207517 vt 0.735995 0.272700 vt 0.717571 0.273436 vt 0.028540 1.496184 vt 1.479028 -0.162641 vt -0.033503 0.972542 vt -0.300225 0.937532 vt -0.288049 0.965295 vt -0.273588 0.952524 vt 0.452739 -0.052711 vt 0.836716 -0.111348 vt -0.115323 -0.016788 vt -0.126531 1.346823 vt -0.121287 1.360702 vt 0.866478 0.244023 vt 0.843705 0.265307 vt 0.344708 1.058323 vt 0.313438 0.232358 vt 0.290278 0.258201 vt 0.279641 0.232695 vt 0.640971 0.243720 vt 0.638981 0.266337 vt -0.108816 1.340765 vt 0.120407 0.524678 vt 0.577466 -0.235111 vt -0.068960 1.414982 vt -0.107128 -0.044609 vt -0.108816 -0.023039 vt -0.107128 1.353163 vt 1.207496 0.043841 vt 1.418436 -0.050517 vt 0.099035 0.509078 vt 1.290590 -0.138690 vt 1.320582 -0.143875 vt 1.295141 -0.110173 vt 0.611764 0.258201 vt 1.397256 -0.466313 vt 1.434904 -0.460196 vt 1.441906 -0.473406 vt -0.158848 -0.014746 vt 1.366642 -0.055115 vt 1.377834 -0.037422 vt 1.353936 -0.108884 vt 0.694811 0.267571 vt 0.272841 0.242145 vt 0.530632 0.714434 vt 0.548353 -0.148728 vt 1.280536 -0.053417 vt 1.274484 -0.036483 vt -0.088745 1.342113 vt -0.088745 -0.029064 vt -0.099020 1.361653 vt -0.107256 1.376255 vt -0.301290 1.337620 vt -0.300961 1.357566 vt -0.287561 1.360052 vt -0.336662 -0.195931 vt 1.440736 -0.161236 vt 0.502587 0.586203 vt 0.611475 0.135992 vt 0.579479 0.125479 vt 1.397632 -0.042516 vt 0.293771 -0.062155 vt -0.376892 -0.332963 vt 1.263534 -0.192648 vt 1.256390 -0.218084 vt 1.248858 -0.195931 vt -0.138575 1.099187 vt 0.528655 0.732926 vt 1.438695 -0.370003 vt 1.338513 -0.430513 vt 1.318870 -0.415287 vt 1.320924 -0.405676 vt 1.171850 0.021747 vt -0.057400 1.446487 vt -0.057246 1.362633 vt 0.672532 0.297797 vt 0.692820 0.305748 vt 0.684095 0.315865 vt 0.674821 0.252282 vt -0.210434 0.534076 vt -0.235861 0.544429 vt -0.221856 0.575572 vt 0.155627 0.509263 vt 0.786389 0.110377 vt 0.769785 0.128671 vt 0.794822 0.145326 vt 1.521646 -0.153700 vt 1.374283 -0.282716 vt 1.350924 -0.219074 vt 1.347361 -0.250223 vt 0.839383 0.122952 vt 0.822553 0.088391 vt 0.805989 0.099210 vt 0.836583 0.101945 vt -0.148456 -0.087050 vt -0.131276 -0.076428 vt 0.957086 0.046424 vt 0.988680 0.042785 vt 1.310747 -0.262347 vt 1.327384 -0.235501 vt 1.026158 -0.031644 vt 1.000087 0.004999 vt -0.089036 0.109146 vt -0.093031 0.095889 vt -0.276827 0.164415 vt -0.441417 0.066415 vt -0.466801 0.044216 vt -0.443721 0.037222 vt -0.078248 -0.129078 vt -0.103485 -0.124400 vt 0.412533 -0.043245 vt 0.400644 -0.062403 vt 0.421938 -0.064680 vt 0.508840 0.255373 vt 0.513295 0.231264 vt 0.496128 0.229058 vt 0.629956 0.138146 vt 0.659777 0.121253 vt 1.347610 -0.286728 vt 0.948437 0.109688 vt 1.274085 0.026115 vt 1.288094 0.030093 vt 1.284853 0.004664 vt 1.119835 0.096566 vt -0.132834 -0.140402 vt -0.113291 -0.143716 vt -0.127296 -0.168835 vt 0.285261 -0.138563 vt 0.257510 -0.118539 vt 0.281123 -0.101523 vt 1.179726 0.101891 vt 1.310150 -0.213809 vt 0.544988 -0.190011 vt 0.560861 -0.172184 vt 0.555463 -0.156382 vt 0.698504 -0.207682 vt -0.081132 -0.186858 vt -0.106382 -0.170483 vt 0.670008 -0.211157 vt 0.679446 -0.190442 vt 1.264413 0.110038 vt -0.086725 0.126862 vt 1.284309 0.096465 vt 0.390172 0.831835 vt 0.363258 0.860712 vt 0.389156 0.866774 vt -0.102511 0.851069 vt -0.085006 0.847652 vt -0.090583 0.838509 vt 1.134788 0.205099 vt 1.115283 0.211614 vt 1.138118 0.229798 vt 0.520441 0.125001 vt 0.529388 0.122900 vt 0.529291 0.102213 vt 0.517779 0.105876 vt 1.428112 -0.237406 vt 1.416735 -0.216620 vt 1.412946 -0.230432 vt 0.339051 0.764623 vt 0.370055 0.785984 vt 0.347718 0.740918 vt 1.313238 -0.165404 vt 0.021480 0.498387 vt 0.045835 0.498921 vt 0.015776 0.519899 vt 1.052662 -0.024997 vt 1.071713 -0.034806 vt 1.267201 0.043785 vt 0.703807 -0.158945 vt 0.699883 -0.184407 vt 0.681199 -0.154033 vt 0.389026 0.660375 vt 0.368097 0.636557 vt 1.371160 -0.323409 vt 0.698025 -0.182139 vt 0.730986 -0.170594 vt 0.709192 -0.164586 vt -0.008853 -0.155066 vt -0.022036 -0.142042 vt -0.001231 -0.140545 vt 0.623659 -0.185582 vt 0.626944 -0.153636 vt 0.606007 -0.180527 vt 0.061372 -0.139033 vt -0.191560 -0.059004 vt -0.213225 -0.035801 vt -0.184535 -0.035428 vt 0.231086 -0.208474 vt 0.257568 -0.193880 vt 0.240552 -0.189885 vt 1.332161 -0.212922 vt 1.334633 -0.189589 vt 0.742396 -0.179501 vt 0.769324 -0.169967 vt 0.762805 -0.146535 vt 0.650782 -0.220056 vt -0.107179 0.128824 vt 1.393812 -0.208546 vt -0.398291 1.090198 vt 0.809189 0.124191 vt 1.266943 -0.005516 vt 0.885669 -0.028711 vt 0.862947 -0.034167 vt 0.843395 -0.132889 vt 0.869991 -0.111893 vt 0.511215 0.051509 vt 0.510105 0.085087 vt 0.495064 0.062901 vt -0.109571 0.132915 vt 1.270674 -0.137824 vt 1.253676 -0.102184 vt 0.020594 -0.064767 vt 0.814125 -0.158068 vt 0.846816 -0.164235 vt 0.819504 -0.137052 vt -0.202404 0.153134 vt 0.386285 0.740600 vt 0.390521 0.718805 vt 0.560123 -0.100800 vt 0.554668 -0.113771 vt 0.574470 -0.108809 vt 0.878542 -0.117561 vt 0.715189 -0.016774 vt 0.726296 -0.006826 vt 0.737635 -0.043342 vt 1.100108 0.170261 vt 0.104546 0.963628 vt 0.077797 0.947259 vt 0.069553 0.962925 vt -0.267685 0.510451 vt -0.272129 0.493452 vt -0.281005 0.493586 vt -0.096606 -0.230717 vt -0.069396 -0.242267 vt -0.089774 -0.249003 vt 0.029839 -0.175931 vt 1.249405 0.064671 vt 0.601953 0.127594 vt 0.588655 0.142861 vt -0.121137 0.698419 vt 1.028269 -0.029518 vt 1.035844 -0.014409 vt 1.049357 -0.040868 vt 0.668329 -0.173759 vt 0.685604 -0.149553 vt 0.704216 -0.145325 vt -0.431942 0.037951 vt 0.125669 1.060863 vt 0.108068 1.097250 vt -0.291387 -0.021320 vt -0.282131 0.001550 vt 0.841656 -0.021439 vt 0.829760 -0.039113 vt -0.076572 1.394822 vt 0.922432 -0.020345 vt 1.216985 0.048204 vt 0.567212 0.067762 vt 0.342804 -0.139818 vt 0.352361 -0.108809 vt 0.329200 -0.113771 vt -0.059025 0.935125 vt -0.021487 0.945526 vt -0.240372 0.079798 vt -0.215035 0.069167 vt 0.109056 0.946078 vt 0.278659 -0.174577 vt 0.274875 -0.203634 vt 0.255697 -0.189767 vt 0.723835 -0.151984 vt 1.115979 -0.015205 vt 0.966882 -0.012802 vt -0.439233 0.003559 vt -0.467501 0.018559 vt -0.458330 -0.014409 vt 1.029453 0.018559 vt 0.650762 -0.145329 vt 1.009247 0.126707 vt 0.997761 0.113775 vt 0.073648 1.455343 vt 0.089968 1.457144 vt -0.421334 0.126707 vt -0.439600 0.101316 vt 0.776328 -0.144504 vt 0.804754 -0.133293 vt 0.798837 -0.155837 vt 1.045822 -0.048155 vt 1.010307 -0.089505 vt 1.049716 -0.072678 vt 0.330844 -0.137901 vt 0.102855 -0.224457 vt 0.132274 -0.219171 vt 0.101007 -0.213400 vt 0.329668 0.731423 vt 0.334682 0.708118 vt 1.404321 -0.458735 vt 1.052124 0.108244 vt 0.721291 -0.137897 vt 0.690774 -0.112417 vt 0.597268 -0.153633 vt 0.639835 0.087760 vt 0.625110 0.072308 vt 0.319844 0.705703 vt 1.360785 -0.155085 vt 0.537264 -0.105750 vt 0.527258 -0.103859 vt 0.620446 0.056079 vt 0.582433 -0.170343 vt 0.309195 -0.156382 vt 1.225830 0.126242 vt 1.245944 0.128218 vt 0.034684 -0.216440 vt 0.049683 -0.219365 vt 1.407228 -0.219975 vt 0.307761 -0.132022 vt 0.313441 -0.105750 vt 0.669311 -0.126384 vt 0.645604 -0.130824 vt 0.400764 0.772418 vt 0.416053 0.783586 vt 0.287735 0.202561 vt 0.302408 0.205997 vt 0.289885 0.223573 vt -0.438571 -0.029518 vt 1.281244 -0.028283 vt 0.663788 -0.092355 vt 0.789333 -0.130440 vt 0.271864 0.849969 vt 0.573076 -0.139818 vt 0.341121 -0.170343 vt 1.005692 -0.029978 vt 0.929416 -0.121194 vt 0.607121 -0.124101 vt 0.606594 -0.103267 vt 0.591288 -0.108234 vt -0.049914 -0.082898 vt 1.367418 -0.344412 vt 0.214953 -0.263952 vt 0.192514 -0.273925 vt 0.795861 -0.179743 vt 0.780448 -0.146122 vt 0.192514 0.900017 vt 0.214953 0.895094 vt 0.199473 0.873742 vt 1.278636 -0.264491 vt 1.341140 -0.033205 vt 1.316815 -0.036630 vt 1.319705 -0.019870 vt 0.743531 -0.014037 vt -0.108833 0.233082 vt 0.148560 -0.205341 vt 0.385356 0.914971 vt 0.371330 0.892842 vt 0.345811 0.915384 vt 0.515422 0.138024 vt 0.525699 0.145840 vt 0.660044 -0.142946 vt 0.643500 -0.144606 vt 0.637065 -0.133431 vt 0.150025 1.021984 vt 0.167254 0.999198 vt 0.115382 1.009941 vt 0.942776 -0.107360 vt -0.394718 1.055513 vt -0.374857 1.043761 vt 0.252637 0.528246 vt 0.286693 0.560432 vt 0.257568 0.512739 vt 0.054023 0.944592 vt 0.154161 -0.217204 vt 0.088797 0.238765 vt 0.058333 0.263551 vt 0.068231 0.235230 vt 0.069617 0.939366 vt 1.395108 -0.382312 vt 0.636526 0.071526 vt -0.198014 0.067762 vt 0.801331 -0.109242 vt 0.773972 -0.132078 vt 0.510182 0.099540 vt 0.510934 0.132267 vt 0.499859 0.105775 vt -0.316228 -0.065881 vt -0.292862 -0.068572 vt -0.309904 -0.042595 vt 1.360269 -0.368848 vt 0.766204 0.053672 vt 1.357622 -0.189603 vt 0.687595 -0.083879 vt 0.185703 -0.200973 vt 0.362333 0.734167 vt 0.377015 0.752009 vt 0.054322 -0.221704 vt 0.026129 -0.225677 vt 0.028976 0.956986 vt 0.047518 0.965780 vt -0.091372 0.865583 vt -0.068844 0.860723 vt 1.271383 -0.107092 vt 1.254676 -0.014746 vt 0.202465 -0.138929 vt -0.088145 0.244023 vt -0.337910 -0.332479 vt -0.326258 -0.328948 vt 0.619224 -0.003223 vt 0.635656 -0.013762 vt 0.611436 -0.038310 vt 0.492505 -0.101267 vt 0.540344 0.127315 vt 0.009753 -0.091687 vt 0.604261 -0.196546 vt 0.587357 -0.193243 vt -0.279263 0.127315 vt -0.237180 0.070149 vt -0.221805 0.134871 vt 0.579004 0.134871 vt 0.572392 0.109975 vt 0.626248 -0.103231 vt 0.641018 -0.094942 vt 0.195759 -0.098190 vt 0.177250 -0.072306 vt -0.131062 0.495030 vt -0.119248 0.495117 vt 0.325208 0.966068 vt 0.345702 0.943147 vt 0.309815 0.959441 vt 0.350513 0.714709 vt 0.373897 0.707638 vt 0.356249 0.677874 vt 0.375480 0.677943 vt 0.306638 -0.148728 vt 1.286395 -0.283532 vt 1.276278 -0.268784 vt 0.374067 0.810735 vt 0.383289 0.805474 vt 1.159458 0.199468 vt 0.943116 -0.025628 vt 0.307598 0.536871 vt -0.360724 -0.415920 vt 0.009389 1.027553 vt -0.029630 1.023733 vt -0.006927 1.048329 vt 0.268270 -0.167725 vt 0.249738 -0.178720 vt 0.299001 -0.083253 vt 0.394792 0.695217 vt 0.411569 0.678924 vt 0.205629 -0.197548 vt 0.079475 0.280790 vt 0.043161 0.280711 vt -0.124692 -0.027744 vt 0.356599 0.689059 vt 0.518228 -0.187329 vt 0.289885 0.519648 vt 0.941725 0.104380 vt -0.101041 1.290149 vt -0.081804 1.302441 vt 0.868949 0.100148 vt 0.857334 0.072408 vt -0.021127 0.565917 vt -0.057031 0.566184 vt -0.024977 0.587080 vt 0.190952 -0.217119 vt 0.495630 -0.167725 vt -0.106965 0.833297 vt 0.503125 -0.193880 vt 0.064145 -0.178727 vt 1.246149 0.097718 vt 1.251970 0.107477 vt 0.146500 0.887295 vt 0.120293 0.890582 vt 0.131154 0.918094 vt 0.569103 -0.194417 vt -0.314180 -0.197541 vt 0.297570 -0.194417 vt 0.677135 -0.076586 vt 0.651223 -0.088764 vt 0.076058 1.473320 vt 0.086282 1.485691 vt 0.912140 0.093837 vt -0.056789 -0.132045 vt 0.203307 0.141381 vt 1.221794 0.088181 vt -0.249891 0.043981 vt 0.421411 0.560354 vt 1.267356 0.079410 vt 0.899732 0.050067 vt 0.076820 1.496076 vt 0.061475 1.521222 vt 0.078970 1.506171 vt 0.550819 -0.205561 vt -0.053166 0.491624 vt -0.070706 0.492253 vt -0.058608 0.502090 vt 0.590678 0.063150 vt 0.323892 -0.055017 vt -0.057778 -0.217961 vt 0.535586 0.063150 vt 0.531701 0.078795 vt 0.494554 0.086552 vt -0.388444 0.007595 vt -0.106776 0.871403 vt 0.123262 0.511074 vt 0.524664 0.076564 vt 0.515859 0.083852 vt 0.531883 0.088647 vt -0.365067 -0.055340 vt -0.303896 0.053919 vt -0.311362 0.106892 vt -0.328037 0.113003 vt 1.309968 -0.086037 vt 1.479658 -0.457996 vt -0.437918 0.075329 vt -0.081602 0.062524 vt -0.053116 0.061195 vt -0.352399 -0.372480 vt -0.346271 -0.267435 vt 1.117002 0.145885 vt 1.135597 0.161260 vt 0.527910 0.080083 vt 0.528655 0.112973 vt 0.550479 0.082710 vt 1.389885 -0.467620 vt 1.517919 -0.228253 vt -0.030025 0.292352 vt -0.054709 0.298330 vt -0.036394 0.308177 vt 0.562199 0.044364 vt 0.551044 0.013554 vt 0.544822 0.054807 vt 0.516626 0.098833 vt 0.530677 0.052460 vt 0.634710 0.180020 vt 0.653882 0.160829 vt 0.530283 0.010874 vt 0.503588 0.078405 vt -0.361185 0.131468 vt -0.373708 0.177404 vt -0.355202 0.181164 vt -0.337577 0.151482 vt 0.549128 -0.015475 vt -0.336800 -0.103585 vt -0.348260 -0.081255 vt 1.130120 0.051781 vt 1.149435 0.016310 vt 0.511724 0.045551 vt 0.515995 0.002290 vt 0.471575 0.095764 vt 0.460222 0.112799 vt 0.495315 0.743052 vt 0.023312 0.695069 vt 0.485499 0.038814 vt 0.477721 0.071140 vt 0.738086 0.097597 vt 0.721676 0.112799 vt 0.462313 0.097597 vt 0.462313 0.747700 vt 0.471575 0.743181 vt -0.212655 0.142861 vt 0.480235 0.032029 vt 0.475786 0.054887 vt 0.745270 0.071140 vt 0.755903 0.054887 vt -0.187587 -0.017325 vt -0.215287 -0.014137 vt -0.261346 0.136484 vt 1.169451 0.148120 vt 0.107483 0.315082 vt 1.293886 -0.070527 vt 0.532144 0.144307 vt 0.561187 0.164415 vt 0.484370 -0.015755 vt 0.475329 0.011254 vt 0.471369 0.053672 vt 0.755390 0.032029 vt 1.140137 -0.018787 vt -0.284800 -0.044581 vt -0.044919 -0.041893 vt -0.050777 -0.015949 vt 1.383684 -0.234515 vt 1.372837 -0.181414 vt -0.445384 0.138013 vt -0.301163 -0.181414 vt -0.317334 -0.138199 vt -0.302624 -0.140097 vt -0.271390 0.121144 vt -0.289502 0.146020 vt 1.267528 -0.078376 vt -0.313392 0.199654 vt -0.089261 0.005902 vt -0.110739 0.035957 vt 1.470024 -0.470439 vt -0.263674 0.055140 vt 1.460726 -0.373757 vt 1.475643 -0.400860 vt 1.464417 -0.397365 vt -0.095931 -0.071389 vt -0.100904 -0.018644 vt -0.082208 -0.028867 vt -0.098017 0.068400 vt -0.304239 0.963179 vt -0.333796 1.003759 vt -0.265250 0.538904 vt -0.250126 0.541497 vt -0.252754 0.525472 vt -0.243992 -0.121671 vt -0.226016 -0.116086 vt -0.059097 -0.041675 vt -0.241872 0.157158 vt -0.263206 0.171073 vt -0.058369 -0.080052 vt 1.446366 -0.349173 vt 1.438052 -0.354424 vt -0.321196 0.182574 vt -0.142379 0.051781 vt -0.131422 0.067686 vt -0.144989 0.072815 vt -0.138639 -0.001703 vt -0.145014 0.028961 vt -0.129811 0.020850 vt -0.154580 -0.041592 vt -0.145902 -0.030373 vt -0.324100 -0.439990 vt -0.230038 0.108946 vt -0.217543 0.075732 vt -0.144989 1.132339 vt -0.147641 1.125004 vt -0.131422 1.129299 vt -0.353422 -0.110490 vt 1.139490 0.081084 vt -0.283328 -0.430419 vt -0.455158 0.096465 vt 1.135436 -0.001703 vt 1.139210 0.028961 vt -0.319092 0.158046 vt -0.014196 -0.127354 vt -0.106138 0.097022 vt -0.142151 0.096801 vt -0.361279 -0.176843 vt -0.018453 -0.117650 vt 0.153892 0.309383 vt -0.160303 0.126147 vt -0.257962 0.193015 vt -0.257419 0.013569 vt -0.030183 0.819088 vt -0.040776 0.840289 vt -0.026448 0.855586 vt -0.174401 1.382140 vt -0.159097 1.401339 vt -0.132724 1.390250 vt -0.291544 0.101780 vt 1.338092 -0.168808 vt 1.320377 0.018570 vt -0.365204 -0.142098 vt 1.322256 -0.079182 vt 0.763198 0.077490 vt 1.474782 -0.098064 vt 1.484243 -0.107226 vt -0.268090 -0.034511 vt -0.270752 -0.018032 vt -0.255518 -0.019870 vt -0.404361 0.165987 vt 0.895098 -0.019348 vt 0.230875 -0.104689 vt 0.202940 -0.075575 vt 0.217704 -0.107242 vt 1.274006 0.159167 vt -0.114851 -0.050888 vt 0.057559 -0.228253 vt -0.189566 1.244921 vt 0.458323 0.037137 vt 1.115391 0.079382 vt 1.122726 0.072815 vt -0.147641 0.079382 vt -0.061766 1.078917 vt 1.037370 0.105036 vt -0.151190 -0.041695 vt -0.252474 -0.004924 vt -0.014196 1.513561 vt -0.302590 -0.117714 vt -0.163926 -0.041637 vt -0.154419 -0.018787 vt -0.243095 -0.009201 vt 1.404552 -0.293693 vt 1.039823 0.069857 vt -0.435759 0.004664 vt 1.058368 0.120695 vt 1.508648 -0.236786 vt 1.048710 0.151614 vt -0.156350 0.104449 vt 1.103133 0.096801 vt -0.027174 -0.055598 vt 0.067912 1.430530 vt 1.043514 0.196611 vt 1.050539 0.008646 vt 1.062996 0.083247 vt -0.252595 0.076564 vt 0.336067 0.120536 vt 0.344708 0.151614 vt 0.359752 0.120695 vt 0.328452 0.155752 vt -0.341221 -0.145876 vt -0.153609 0.016310 vt -0.367622 -0.400860 vt 1.065709 -0.004476 vt 1.084775 0.041158 vt 0.365231 0.083247 vt 0.319105 0.077517 vt 0.618655 0.018907 vt -0.375171 -0.349173 vt 0.465831 0.108965 vt 0.502587 0.103730 vt 0.486804 0.125479 vt 0.345220 0.041158 vt 0.305182 0.146757 vt -0.291383 -0.118009 vt -0.333698 -0.440694 vt 0.020586 0.929742 vt -0.216975 0.114751 vt 0.047301 0.318342 vt 0.037111 0.291348 vt 0.028697 0.513059 vt -0.053427 -0.095115 vt -0.037661 -0.098064 vt -0.227082 0.130681 vt 1.139693 -0.041637 vt 0.769519 0.242983 vt 0.748748 0.222541 vt 0.377866 -0.048155 vt 0.340447 -0.012634 vt 0.365608 -0.004476 vt 0.305125 0.101785 vt 0.289813 0.159069 vt 0.297421 0.168870 vt 0.200538 -0.034326 vt 0.195526 -0.011184 vt 0.183549 -0.034542 vt 0.144884 0.278567 vt 0.810456 -0.037039 vt 0.061764 -0.155085 vt 0.315033 0.015105 vt 1.050557 0.160425 vt 0.152774 0.248414 vt 0.336706 -0.080864 vt 0.276701 0.131925 vt 0.266568 0.158479 vt 0.256690 0.184340 vt -0.001791 -0.155429 vt -0.306411 -0.005889 vt 0.281770 0.110780 vt 0.130670 0.244334 vt 0.312358 -0.040079 vt 0.287605 0.050151 vt 0.278258 0.079452 vt -0.032077 1.471042 vt -0.375770 -0.373757 vt 0.588586 0.169643 vt 0.245055 0.170469 vt 1.502249 -0.142042 vt 1.511657 -0.155066 vt 1.484788 -0.160105 vt 0.543210 0.200999 vt 0.547390 0.175460 vt 0.513174 0.180052 vt 1.262964 -0.039721 vt 0.311708 -0.091715 vt 0.246864 0.136180 vt 1.127112 -0.030736 vt -0.050641 0.053651 vt 0.213632 0.181814 vt 0.775839 0.098344 vt -0.118092 0.973108 vt 0.492063 -0.148003 vt 0.473399 0.731047 vt 0.244829 0.862988 vt -0.278166 -0.111279 vt -0.357598 0.922656 vt -0.342472 0.890772 vt 0.289813 1.094746 vt -0.084911 1.414244 vt 0.735778 0.012230 vt -0.234435 1.335272 vt 0.651678 0.229920 vt -0.053044 0.234185 vt -0.057270 0.209576 vt -0.073090 0.219343 vt 0.010789 0.754380 vt 0.682763 0.248608 vt 0.648777 0.277880 vt 0.685456 0.286810 vt 0.024952 0.906978 vt -0.041465 0.227263 vt -0.040911 0.199699 vt 0.536883 0.236233 vt 0.556945 0.235085 vt -0.072838 0.245790 vt -0.088461 0.244432 vt -0.040911 0.620558 vt -0.365274 -0.087446 vt -0.073126 0.529885 vt -0.074136 0.542760 vt -0.031827 0.773434 vt -0.042274 0.806909 vt -0.013996 0.791027 vt 1.196746 0.223613 vt 1.206304 0.199573 vt 0.000932 0.894196 vt -0.017741 0.862122 vt -0.071066 0.159540 vt 0.008461 0.284623 vt 0.024952 0.302240 vt -0.025106 0.657567 vt 0.504562 0.201812 vt -0.203073 -0.058177 vt 0.049014 1.481862 vt 0.058036 1.509674 vt 1.418700 -0.287268 vt -0.260409 -0.092228 vt -0.270924 -0.112523 vt -0.233810 -0.098052 vt -0.072327 0.273807 vt 0.601958 0.189674 vt 0.619468 0.195886 vt 0.005652 -0.179588 vt 0.006894 -0.158740 vt 0.791647 0.305778 vt 0.816092 0.315348 vt 0.821448 0.277824 vt 0.484253 0.032690 vt 0.485455 0.046976 vt 0.498394 0.044529 vt 0.668191 0.209468 vt 0.689713 0.192484 vt -0.264695 0.926530 vt 0.752400 0.279007 vt 0.787469 0.263500 vt -0.094807 -0.145961 vt -0.026310 0.254182 vt -0.001837 0.260421 vt -0.000977 0.251661 vt 0.367168 -0.031564 vt 0.380686 -0.055825 vt 0.647954 0.207101 vt 1.232670 -0.122234 vt 1.211248 -0.108857 vt -0.328882 0.850291 vt -0.017948 1.429669 vt 1.372907 -0.176843 vt -0.016794 0.514618 vt -0.032350 0.633706 vt -0.023731 0.620040 vt -0.237501 0.124675 vt -0.244392 0.101667 vt -0.231325 0.098489 vt -0.121753 1.435401 vt -0.103485 1.453532 vt -0.096847 0.547172 vt -0.078221 0.564532 vt -0.088461 0.570467 vt 1.352847 -0.181666 vt 1.354727 -0.161440 vt -0.013636 0.825706 vt -0.072838 0.583674 vt 0.884583 0.295677 vt 0.889138 0.279529 vt 0.852509 0.297233 vt -0.166829 -0.054125 vt 0.506010 0.238577 vt 0.517770 0.259120 vt 0.537559 0.251333 vt 0.846454 0.241488 vt 0.037238 -0.124631 vt 0.058699 -0.160552 vt 1.350360 -0.142098 vt -0.369750 -0.161440 vt 0.720702 0.302226 vt 0.712953 0.262944 vt -0.059525 0.583977 vt 0.551784 0.273807 vt 0.554919 0.258393 vt 0.534092 0.261197 vt 0.859757 0.275479 vt 0.863554 0.244257 vt -0.341013 0.812738 vt -0.257653 0.518454 vt -0.270081 0.546496 vt -0.091604 0.216184 vt -0.176198 0.699327 vt -0.194230 0.718630 vt -0.191826 0.696050 vt -0.007329 0.304083 vt -0.186562 0.681112 vt 0.751661 0.251357 vt -0.059525 0.252873 vt -0.078221 0.258393 vt 0.647492 0.094512 vt 0.330285 -0.019531 vt 0.310613 -0.000252 vt 0.326613 -0.034443 vt 0.533146 0.286491 vt 0.020586 0.253017 vt -0.207793 0.121253 vt -0.215304 0.127435 vt -0.214764 0.108371 vt -0.206212 0.094512 vt 0.045835 -0.185989 vt 0.013733 1.494074 vt -0.004307 1.474973 vt -0.007394 1.496891 vt 0.560853 0.244432 vt 0.545443 0.231051 vt -0.105908 0.621501 vt -0.081102 0.639215 vt 0.744767 0.302226 vt 0.765505 0.300234 vt -0.431583 0.159167 vt -0.006873 0.279529 vt 0.000932 0.295677 vt 0.669404 0.142524 vt 0.061372 1.369374 vt 1.315681 -0.087446 vt 1.313236 -0.102123 vt 1.341029 -0.110490 vt -0.397607 1.072513 vt -0.043241 0.062901 vt 0.492591 0.074280 vt -0.126035 1.409689 vt -0.014827 0.801261 vt 0.305874 0.179791 vt -0.212968 0.150553 vt -0.204803 0.142524 vt 0.528453 0.164549 vt 0.624093 0.197187 vt 0.610426 0.214591 vt 0.069821 0.927873 vt 0.376775 0.537305 vt 0.365227 0.523408 vt 0.345209 0.543166 vt -0.424926 1.242115 vt -0.175902 0.729344 vt 0.553565 0.224030 vt -0.065421 0.200054 vt -0.375111 0.863460 vt 0.511260 0.155681 vt 0.497475 0.159751 vt -0.433818 1.083732 vt -0.410544 1.098648 vt -0.432690 1.113030 vt -0.296850 1.151025 vt -0.260418 1.164629 vt -0.434664 1.148633 vt -0.246164 0.147013 vt 0.018521 0.730316 vt -0.413948 1.064355 vt -0.194857 1.325062 vt -0.167836 1.335803 vt -0.181774 1.305976 vt -0.218675 0.080806 vt -0.201792 0.087760 vt -0.201141 0.071526 vt 0.091883 -0.219975 vt 0.146564 0.077737 vt 0.151945 0.093781 vt 0.137599 0.076025 vt 0.520673 -0.035045 vt 0.514303 -0.054278 vt 0.496205 -0.048127 vt 0.711653 -0.045539 vt 0.730673 -0.060284 vt -0.312281 1.328483 vt -0.311683 1.348126 vt 0.575926 0.216184 vt -0.050247 0.985939 vt -0.460766 1.098872 vt -0.445997 1.140534 vt -0.424926 0.219929 vt -0.380062 0.825318 vt -0.442650 1.060419 vt -0.427398 1.164153 vt -0.428601 1.212129 vt 0.506141 -0.029514 vt -0.294548 -0.078025 vt -0.275777 -0.074015 vt -0.346608 -0.155354 vt 0.031563 -0.165755 vt -0.076931 0.610108 vt -0.099616 0.606074 vt -0.301859 1.378109 vt -0.275486 1.378596 vt -0.187858 0.258824 vt -0.219955 0.263227 vt -0.225007 0.247332 vt -0.213756 0.748365 vt -0.127410 0.610651 vt 0.493128 -0.016265 vt 0.520628 -0.027253 vt 0.513443 -0.014792 vt 0.531533 -0.028696 vt 0.547797 -0.041007 vt -0.369381 0.978474 vt 0.502269 0.142480 vt 0.504247 0.126922 vt -0.110743 0.515623 vt -0.119986 0.508527 vt -0.108833 0.502911 vt 0.778248 0.163658 vt 0.755718 0.175502 vt 0.815705 0.187000 vt -0.403805 1.202907 vt 0.664768 0.296817 vt 0.521573 0.231882 vt -0.382474 0.783232 vt -0.381015 0.803039 vt -0.350568 0.784105 vt -0.134923 0.646353 vt -0.072327 0.561397 vt 1.103417 0.275807 vt 1.139020 0.276378 vt 1.130921 0.258183 vt 0.523126 -0.002101 vt 0.507148 0.000940 vt 0.543668 -0.008809 vt 0.532503 -0.052943 vt -0.068696 0.608970 vt -0.068599 0.625110 vt -0.262936 0.872992 vt -0.266870 0.831530 vt -0.322681 -0.008809 vt -0.306138 -0.020187 vt 0.838742 0.321513 vt 1.017165 -0.049191 vt 1.034407 -0.064213 vt 1.014252 -0.063401 vt 0.511803 0.112876 vt -0.368787 0.928835 vt -0.087672 0.021653 vt -0.011318 0.507656 vt -0.132573 0.719062 vt -0.069258 0.646679 vt -0.387048 0.847376 vt 0.915389 0.100866 vt -0.311601 0.918905 vt -0.099616 -0.131372 vt 0.490644 0.142334 vt 1.154539 0.277716 vt 1.171253 0.254451 vt 0.492099 0.180275 vt 0.493357 0.202147 vt 0.548299 0.016919 vt -0.295305 0.016919 vt -0.229304 0.583840 vt -0.200483 0.580198 vt -0.196420 0.600253 vt 0.874388 0.119671 vt 0.887547 0.254182 vt -0.200483 0.055607 vt -0.229304 0.025089 vt 0.925019 0.134180 vt 1.202516 0.244302 vt -0.333968 0.532739 vt -0.339064 0.516761 vt -0.295305 0.557912 vt 0.094929 1.437726 vt -0.044553 0.503982 vt 0.510001 0.037736 vt 0.493551 0.023207 vt -0.127295 0.857190 vt 0.900624 0.147856 vt 0.187074 0.003846 vt 0.176877 0.010899 vt 0.175698 -0.029798 vt 1.257015 0.156873 vt 0.032351 0.245416 vt -0.144277 -0.100365 vt -0.142195 0.245930 vt -0.174207 0.245088 vt 0.534278 0.033955 vt -0.088230 0.543705 vt -0.076169 0.655792 vt -0.460669 1.075048 vt 0.821599 0.151912 vt 0.862547 0.146519 vt 0.974247 0.150836 vt -0.023607 0.513898 vt -0.003873 0.511613 vt -0.023202 0.502052 vt -0.281107 0.522909 vt 0.986224 0.146601 vt 0.022350 0.658391 vt 0.126357 0.247734 vt 0.486322 -0.210376 vt 0.494362 -0.205699 vt 0.498144 -0.215339 vt 0.787400 -0.190038 vt 0.803750 -0.204038 vt 0.782696 -0.200913 vt -0.293695 0.033955 vt -0.277789 0.041785 vt -0.126700 0.954955 vt 0.075862 0.499501 vt 0.085762 0.521838 vt -0.308496 0.519615 vt -0.280958 0.508099 vt -0.293695 0.543891 vt 0.878472 0.171587 vt 0.913290 0.175744 vt -0.348724 0.765331 vt -0.376009 0.999080 vt -0.396479 0.922903 vt 1.228840 0.198351 vt 1.265154 0.178613 vt -0.302338 0.506590 vt -0.295453 0.499393 vt -0.277789 0.548605 vt -0.246883 0.005719 vt 0.590030 0.010182 vt 0.583187 -0.009734 vt 0.567285 0.222582 vt 0.563244 0.200121 vt -0.031145 -0.255848 vt -0.023202 -0.253301 vt -0.033029 -0.236354 vt -0.288973 1.129178 vt -0.330835 1.138791 vt -0.272664 0.200121 vt -0.236548 -0.033205 vt -0.229185 0.010182 vt -0.289854 0.512668 vt -0.031145 0.498017 vt 0.837762 0.188522 vt 0.498486 0.067375 vt 0.522414 0.064888 vt 0.538991 0.041785 vt -0.266856 0.064888 vt 0.574227 0.025089 vt 0.574889 0.005719 vt -0.196895 0.723424 vt -0.226705 0.734684 vt 0.885470 -0.226087 vt 0.852293 -0.238348 vt 0.851110 -0.228879 vt 0.535670 -0.069045 vt 0.539226 -0.084841 vt 0.523840 -0.094375 vt 0.371902 0.547724 vt 0.342545 0.542615 vt -0.093935 0.493991 vt -0.084517 0.504357 vt 1.276579 -0.307278 vt -0.426480 0.178613 vt -0.106716 0.493410 vt -0.187230 0.579454 vt -0.209552 0.592708 vt -0.187439 0.615499 vt 1.055588 0.221758 vt 1.041383 0.248040 vt 1.065435 0.254803 vt 1.089258 0.256484 vt 1.232502 0.219929 vt -0.248689 0.506376 vt -0.216093 0.876222 vt -0.193095 0.902968 vt -0.185024 0.879992 vt 0.853847 0.203402 vt 0.997621 0.137718 vt 0.507540 0.081687 vt -0.265548 0.081687 vt -0.068491 0.669658 vt 0.919221 0.197120 vt -0.400094 0.888085 vt -0.170821 1.361364 vt 1.050806 0.265667 vt -0.265548 0.517153 vt -0.252595 0.534277 vt -0.229185 0.599644 vt -0.211968 0.628268 vt -0.317953 0.842212 vt -0.279537 0.821658 vt -0.314872 0.814469 vt 0.913043 0.210811 vt 0.968861 0.181843 vt 0.558324 -0.020187 vt 0.107693 1.046661 vt -0.278737 1.479637 vt -0.269392 1.460688 vt -0.293302 1.472090 vt 0.107693 -0.173821 vt 0.136738 -0.184162 vt 0.097679 -0.193905 vt 0.075378 -0.175198 vt 0.228657 1.074563 vt 0.202981 1.072689 vt 0.199877 1.094886 vt -0.063610 1.005730 vt 0.125858 -0.197464 vt 0.215150 -0.088924 vt 1.368495 -0.449679 vt 1.400259 -0.437220 vt 0.174825 -0.217112 vt 0.208253 -0.218791 vt 0.256042 -0.090949 vt 0.216578 -0.116354 vt 0.207842 -0.206722 vt 1.411261 -0.419563 vt -0.333698 1.496757 vt -0.313001 1.476483 vt 1.436304 -0.420383 vt 1.466870 -0.455520 vt -0.327357 1.445917 vt -0.343763 1.462507 vt -0.354818 1.478791 vt 1.353595 -0.396352 vt -0.369147 1.472542 vt 1.381159 -0.385427 vt 1.407575 -0.389819 vt 1.436961 -0.394674 vt 1.452893 -0.416146 vt -0.343763 -0.416146 vt -0.349000 -0.394674 vt -0.369147 -0.409109 vt 1.462928 -0.409109 vt -0.349000 1.446574 vt -0.375760 1.462935 vt 1.453321 -0.396289 vt 1.307123 -0.378572 vt 1.335162 -0.354915 vt 1.440336 -0.380180 vt 1.450542 -0.382971 vt -0.377320 -0.380180 vt -0.375760 -0.396289 vt 0.289396 0.944704 vt 0.274875 0.962739 vt 1.419151 -0.371783 vt -0.351492 -0.371783 vt 1.394339 -0.349427 vt -0.381849 -0.367302 vt 1.432011 -0.367302 vt 1.362469 -0.342537 vt -0.358613 -0.361118 vt 1.295966 -0.108190 vt -0.346082 -0.349427 vt 1.418549 -0.351321 vt 1.433933 -0.360048 vt -0.380475 -0.351321 vt -0.346082 1.403953 vt -0.380475 1.428163 vt -0.358613 1.424655 vt 1.319244 -0.325136 vt -0.355928 -0.334720 vt 1.415705 -0.336593 vt 1.368133 -0.319471 vt 1.393047 -0.334720 vt -0.383685 -0.329815 vt 1.405688 -0.329815 vt 1.402670 -0.315243 vt -0.385070 -0.360048 vt -0.383868 -0.354424 vt 1.159141 0.173274 vt 1.318194 -0.297167 vt 1.376519 -0.312447 vt -0.295899 0.138024 vt -0.283985 0.125001 vt -0.287511 0.112876 vt 0.353866 0.895168 vt 0.334854 0.877118 vt 0.150538 -0.064914 vt 0.163034 -0.110479 vt 0.136339 -0.098554 vt -0.317510 1.087672 vt -0.285256 1.081018 vt -0.302210 1.067260 vt -0.355450 -0.312447 vt -0.378729 -0.308095 vt 1.389077 -0.308095 vt 0.082953 -0.106957 vt 0.111116 -0.121705 vt 0.079616 -0.132729 vt 0.742749 -0.015755 vt -0.121554 -0.107883 vt 0.108068 -0.134566 vt 0.096680 -0.152592 vt 1.347821 -0.280283 vt 1.391162 -0.298702 vt 0.223662 -0.130449 vt 0.316331 1.046321 vt 0.325401 1.024596 vt 0.295014 1.020910 vt 1.363408 -0.285886 vt -0.358853 -0.285886 vt -0.383655 -0.288727 vt 1.381470 -0.288727 vt 0.193089 -0.098674 vt -0.055038 0.784788 vt 0.775175 -0.284146 vt 0.800606 -0.274274 vt 0.797295 -0.297693 vt 0.830676 -0.296903 vt 0.855837 -0.273599 vt 0.845972 -0.302589 vt -0.334854 -0.297163 vt -0.353764 -0.268784 vt -0.345919 -0.307278 vt 1.308849 -0.275616 vt 0.357606 1.025828 vt 0.349182 0.994462 vt 0.330505 1.002610 vt -0.032644 0.734820 vt -0.000055 0.704129 vt -0.017398 0.704922 vt 0.725206 -0.284145 vt 0.736563 -0.268761 vt 0.745062 -0.294436 vt 0.782039 -0.268201 vt 0.829035 -0.267147 vt 0.883191 -0.266090 vt 0.865794 -0.291954 vt 1.329652 -0.262141 vt 1.379525 -0.266969 vt 0.069617 -0.225654 vt 0.111057 -0.228808 vt 0.079839 -0.269755 vt 0.711226 -0.262769 vt 0.695309 -0.280419 vt -0.030756 -0.072208 vt -0.380560 -0.260035 vt 1.365073 -0.260035 vt 0.203033 1.042668 vt 0.229582 1.047048 vt 0.665110 -0.265483 vt -0.359808 -0.247039 vt 1.343341 -0.247039 vt 0.006938 0.667635 vt -0.017556 0.646960 vt -0.023582 0.674724 vt 0.677533 -0.248788 vt 0.697356 -0.244494 vt 0.725765 -0.250092 vt 0.764487 -0.254161 vt 0.779315 -0.250359 vt 0.818512 -0.256165 vt 0.011651 -0.147248 vt 1.310343 -0.233084 vt 0.186999 -0.126833 vt 0.624733 -0.245593 vt 0.643522 -0.243260 vt 0.637347 -0.255307 vt 0.879802 -0.240543 vt -0.034815 -0.232619 vt -0.014292 -0.227921 vt -0.028331 -0.266090 vt 0.012392 1.531259 vt 0.006894 1.532146 vt 0.890551 0.085008 vt 0.199877 -0.144585 vt 0.171147 -0.150433 vt 0.776415 -0.241888 vt 0.841333 -0.232069 vt 0.822597 -0.228506 vt 0.893020 -0.232619 vt 1.286408 -0.238040 vt 1.327188 -0.234677 vt 1.360780 -0.228023 vt -0.344896 -0.263669 vt -0.346112 1.005152 vt 0.202090 0.955007 vt 0.174825 0.938935 vt 0.158754 0.951648 vt 0.704183 -0.224782 vt 0.729374 -0.220047 vt 0.762259 -0.229841 vt 1.277413 -0.227034 vt -0.379801 -0.233167 vt 1.352334 -0.233167 vt -0.317865 -0.114123 vt 0.488176 -0.235404 vt 0.517675 -0.228505 vt 0.497748 -0.242447 vt 0.512920 -0.238658 vt 0.536074 -0.236332 vt 0.189323 0.914298 vt 0.234267 0.915578 vt 0.613874 -0.224317 vt 0.647917 -0.213065 vt 0.682553 -0.220923 vt 0.779539 -0.217991 vt -0.106424 0.555057 vt 0.535608 -0.216370 vt 0.562720 -0.230717 vt 0.565090 -0.214615 vt 0.798474 -0.216364 vt -0.076303 0.832211 vt -0.068496 0.850947 vt -0.090430 0.074280 vt 0.028999 -0.170489 vt 0.062927 -0.183546 vt 0.034300 -0.185310 vt 0.666782 -0.200660 vt 0.704675 -0.204918 vt 0.750188 -0.208973 vt 0.828895 -0.210119 vt 0.838038 -0.222393 vt 0.081706 0.493399 vt 0.082401 0.510279 vt 0.102855 0.501893 vt 1.317238 -0.204477 vt -0.356448 -0.204477 vt -0.375660 -0.209944 vt 1.335583 -0.209944 vt 0.001447 -0.067579 vt 0.042711 -0.071427 vt 0.014339 -0.097025 vt 0.125858 1.025300 vt 0.097679 1.030723 vt 1.056503 0.135078 vt -0.152571 0.525343 vt -0.129838 0.545222 vt -0.150714 0.507757 vt -0.129167 0.563979 vt -0.106089 0.574703 vt 0.622340 -0.200314 vt 0.073145 -0.078178 vt 0.049379 -0.094324 vt -0.349147 -0.192648 vt -0.358685 -0.227034 vt 1.286593 -0.190972 vt 1.302925 -0.194131 vt -0.344947 -0.101878 vt -0.330746 -0.091069 vt -0.358636 -0.090649 vt 1.506227 -0.199646 vt 1.522332 -0.216440 vt 1.498473 -0.223275 vt 0.515104 -0.196976 vt 0.515730 -0.208212 vt 0.546857 -0.192143 vt 0.554366 -0.207922 vt -0.054414 -0.196957 vt -0.041374 -0.214501 vt 0.591144 -0.196957 vt 0.599808 -0.192896 vt 0.759538 -0.186499 vt 1.331415 -0.190319 vt -0.005069 -0.286223 vt -0.023685 -0.291954 vt 1.484461 -0.209435 vt 0.081706 -0.216715 vt 0.068369 -0.230215 vt 0.682300 -0.177273 vt 0.046311 0.936209 vt 1.277453 -0.186642 vt 0.997385 0.163292 vt 1.028095 -0.091929 vt 1.013342 -0.088487 vt 0.011457 1.515841 vt 0.542806 -0.175571 vt -0.141554 -0.192143 vt -0.064671 -0.183188 vt -0.048668 -0.192896 vt 0.612489 -0.175268 vt 0.651154 -0.177540 vt 0.714332 -0.177438 vt -0.240122 0.508347 vt -0.349334 -0.124293 vt -0.372328 -0.186034 vt 1.318807 -0.186034 vt 1.042975 0.135090 vt 0.513125 -0.177594 vt 0.490504 -0.178180 vt 0.569631 -0.168835 vt 0.567146 -0.200099 vt 0.745406 -0.180079 vt 1.297200 -0.167662 vt 1.305258 -0.183113 vt -0.357357 -0.183113 vt -0.063767 -0.174128 vt -0.074343 0.723945 vt -0.055633 -0.170713 vt 0.592458 -0.174128 vt 0.600936 -0.170713 vt 0.592715 -0.183188 vt 0.069904 -0.164386 vt 1.502616 -0.171997 vt 1.487278 -0.187586 vt 1.517751 -0.179588 vt 0.510973 -0.154193 vt 0.633796 -0.162993 vt 0.662532 -0.158079 vt 0.237551 -0.133062 vt 0.071080 0.856426 vt 0.034210 0.861767 vt 0.035805 0.886310 vt 1.007843 0.145451 vt -0.210944 0.682330 vt 1.267710 -0.161975 vt 1.280055 -0.160457 vt 1.311579 -0.161592 vt -0.357474 -0.167662 vt 0.534154 -0.139630 vt 0.557836 -0.152844 vt 0.612034 -0.156638 vt 1.464054 -0.160263 vt 0.047647 -0.233285 vt 0.503241 -0.142003 vt -0.062899 -0.143106 vt -0.065114 0.672146 vt -0.072683 0.679179 vt 0.067794 0.900930 vt 0.069130 0.885452 vt 0.512121 0.727923 vt 0.524386 0.700104 vt 0.503212 0.703596 vt 1.240493 -0.164505 vt 1.249451 -0.155354 vt 0.576276 -0.140402 vt 0.669565 -0.155636 vt 0.048381 0.907491 vt 0.027409 0.902143 vt 0.020986 -0.203158 vt 0.320587 0.935930 vt 0.310112 0.915836 vt -0.461047 1.217109 vt -0.467546 1.226599 vt -0.460639 1.248310 vt 1.294121 -0.146777 vt 1.287137 -0.137755 vt 1.477765 -0.140937 vt -0.075589 -0.131211 vt -0.059981 -0.167610 vt -0.088940 -0.143351 vt 0.512130 -0.072306 vt 0.492440 -0.048767 vt 0.511872 -0.042759 vt 0.824848 -0.139173 vt 0.853949 -0.137213 vt 0.830369 -0.154395 vt -0.376725 0.863563 vt -0.379669 0.897418 vt -0.355269 0.863763 vt 1.266853 -0.132106 vt 1.276113 -0.126873 vt -0.032600 -0.160105 vt 0.315843 0.619124 vt 0.095125 1.455941 vt 0.887805 -0.134940 vt 0.901440 -0.124933 vt 0.894783 -0.145716 vt -0.388354 0.911053 vt -0.281099 -0.431072 vt -0.079087 1.036480 vt -0.059981 1.045658 vt 1.236645 -0.145876 vt 1.239805 -0.124293 vt 1.434607 -0.154967 vt 1.463586 -0.129078 vt -0.050120 -0.160263 vt 0.159917 -0.272771 vt 0.131154 -0.274907 vt 0.822198 -0.120893 vt 0.062927 1.026326 vt 0.857207 -0.110954 vt 0.918732 -0.104518 vt 0.923965 -0.129688 vt -0.369226 0.958436 vt -0.395266 0.963279 vt 1.303658 -0.394592 vt 0.144286 -0.219122 vt 0.270323 -0.067700 vt 1.030807 -0.122022 vt 1.059612 -0.117950 vt 1.066115 -0.080864 vt 0.970873 -0.125311 vt 0.994691 -0.116085 vt 0.081761 1.005282 vt 0.046311 -0.222706 vt 0.041742 -0.268665 vt 0.051421 1.002926 vt -0.370178 0.834461 vt -0.386931 0.831811 vt 0.825426 -0.104300 vt -0.395585 0.866820 vt -0.415838 0.881011 vt 0.871397 -0.096700 vt 0.953666 -0.100884 vt -0.022461 -0.114497 vt 0.228657 -0.158052 vt -0.154040 0.566569 vt -0.138526 0.591624 vt -0.132834 0.585889 vt 1.227058 -0.112944 vt 1.264690 -0.106895 vt 1.281252 -0.111658 vt 0.165144 0.974621 vt 0.198813 0.979347 vt 0.305879 0.888502 vt 0.556956 -0.132218 vt 0.793425 -0.108404 vt -0.409417 0.865759 vt 0.895867 -0.102663 vt 0.248984 1.052068 vt 1.240464 -0.102720 vt -0.174465 -0.069857 vt 1.436570 -0.107883 vt 1.443919 -0.124400 vt 1.425787 -0.121709 vt 0.196069 0.522274 vt 0.613484 -0.098663 vt 0.631691 -0.089861 vt 0.672717 -0.117014 vt 0.669449 -0.081523 vt 0.672807 -0.096753 vt -0.359107 0.760862 vt -0.054677 -0.036951 vt 0.378347 1.004305 vt 0.391202 0.980487 vt 0.159917 0.912561 vt 1.229465 -0.098365 vt 1.418727 -0.100365 vt 1.391726 -0.104110 vt 0.111673 -0.261533 vt 0.100128 -0.286116 vt -0.029099 -0.185726 vt -0.063610 -0.184442 vt -0.029630 -0.177518 vt -0.359107 -0.106016 vt 0.773618 -0.098120 vt 0.800224 -0.091264 vt 0.826599 -0.092501 vt -0.408109 0.836212 vt 0.879840 -0.083701 vt 0.999001 -0.110238 vt 0.019909 -0.141803 vt -0.006927 -0.162600 vt -0.064444 -0.106367 vt -0.081761 -0.103943 vt 1.242721 -0.089609 vt 1.279156 -0.091932 vt 1.403828 -0.088422 vt 0.576110 -0.084098 vt 0.594171 -0.084174 vt 0.565959 -0.100871 vt -0.208913 0.623097 vt -0.223463 0.603785 vt -0.219036 0.641304 vt -0.382541 -0.082199 vt 0.751248 -0.106016 vt 0.755257 -0.082199 vt 0.817026 -0.085564 vt 0.916666 -0.079312 vt 0.938485 -0.078838 vt 0.990793 -0.079698 vt 1.249789 -0.082306 vt 1.284814 -0.077661 vt 1.385775 -0.082931 vt 1.372527 -0.097688 vt -0.164224 -0.088422 vt 0.109056 -0.220637 vt 0.077797 -0.221297 vt -0.257769 0.569385 vt -0.232311 0.585723 vt -0.238182 0.566609 vt -0.251251 -0.069454 vt -0.232311 -0.084098 vt -0.257769 -0.082607 vt 0.207842 0.942387 vt 0.221793 0.949957 vt -0.318936 -0.087580 vt -0.341146 -0.077050 vt -0.376830 -0.074002 vt 0.775429 -0.070214 vt 0.828463 -0.071747 vt 0.857635 -0.076152 vt 0.856145 -0.097746 vt -0.031995 -0.101246 vt -0.036962 0.170107 vt -0.040757 0.142902 vt -0.023392 0.160898 vt 0.144286 0.945331 vt 0.118626 0.953649 vt 0.015776 -0.178001 vt -0.391469 1.222934 vt -0.367933 1.252335 vt -0.375411 1.259403 vt 1.269331 -0.072470 vt -0.290918 -0.064440 vt -0.298570 -0.084841 vt -0.240162 -0.064187 vt 0.581506 -0.064187 vt 0.632412 -0.052148 vt 0.714877 -0.087580 vt 0.693093 -0.065881 vt 0.728116 -0.077050 vt 0.747263 -0.074002 vt 0.804528 -0.068340 vt 0.000945 -0.225518 vt 0.031956 -0.229571 vt -0.003098 -0.259003 vt 0.866065 -0.246459 vt 0.879975 -0.254924 vt 0.899646 -0.233008 vt 1.193294 -0.067863 vt 1.213320 -0.081953 vt 1.200559 -0.088015 vt 1.234336 -0.063803 vt 1.354722 -0.070317 vt 1.398191 -0.069857 vt 0.012392 -0.153700 vt 0.553637 -0.064440 vt -0.280636 0.044243 vt -0.267808 0.071550 vt -0.295453 0.044653 vt 0.597020 -0.056968 vt 0.661844 -0.068511 vt -0.358982 -0.060284 vt 0.867766 -0.056663 vt 0.909479 -0.054649 vt 0.952332 -0.059840 vt 0.994177 -0.057226 vt 1.112402 -0.059789 vt 1.124731 -0.066455 vt 1.113884 -0.078858 vt -0.397901 1.243950 vt -0.380745 1.278945 vt 1.295882 -0.060103 vt 1.367185 -0.061490 vt -0.205156 -0.061490 vt -0.180636 -0.082931 vt 1.380919 -0.059004 vt -0.324528 -0.052943 vt -0.306020 -0.069045 vt 0.649205 -0.044455 vt -0.331199 -0.054812 vt 0.700930 -0.054812 vt -0.379624 -0.052381 vt 0.749612 -0.052381 vt 0.775346 -0.052666 vt 1.077717 -0.070072 vt 1.082330 -0.054225 vt 1.086630 -0.074181 vt -0.437304 1.134344 vt -0.401732 1.261376 vt 1.283244 -0.049801 vt 1.309413 -0.055340 vt 1.476814 -0.415920 vt -0.263502 -0.042543 vt 0.845665 -0.044089 vt 0.944051 -0.048115 vt 0.981366 -0.046788 vt -0.408749 1.003790 vt -0.412185 1.026779 vt 1.140555 -0.043577 vt 1.169409 -0.059329 vt 0.360726 0.977391 vt 1.325355 -0.070276 vt 1.345714 -0.046609 vt -0.317632 -0.041007 vt -0.306304 -0.039179 vt 0.582642 -0.036132 vt 0.226152 0.519378 vt 0.231086 0.509335 vt 0.021480 -0.190098 vt 0.884873 -0.041330 vt 1.052253 -0.058421 vt -0.432485 1.214369 vt -0.417233 1.209797 vt -0.415358 1.238434 vt 1.251762 -0.057181 vt 1.297613 -0.040855 vt -0.372432 -0.043342 vt -0.404218 -0.035433 vt 0.910535 -0.033191 vt 0.326548 0.851144 vt 0.308473 0.859635 vt 1.335330 -0.047214 vt -0.228075 -0.046609 vt 0.660300 -0.045524 vt 0.653563 -0.015112 vt -0.306020 0.545283 vt -0.315637 0.529353 vt -0.324528 0.542116 vt -0.417383 1.290857 vt -0.393615 1.292857 vt -0.408451 1.272577 vt -0.014218 0.242216 vt -0.035077 0.291938 vt -0.038638 0.266303 vt 0.309994 -0.117950 vt 1.036708 -0.135073 vt 0.278659 0.988222 vt -0.278737 -0.470439 vt -0.289499 -0.465511 vt -0.041374 0.602223 vt -0.036875 0.596176 vt -0.057778 0.591944 vt 0.088930 0.887415 vt 0.100128 0.909287 vt -0.257129 1.046479 vt 0.492554 -0.019105 vt 0.247682 0.961366 vt 0.225831 0.084186 vt 0.205500 0.082633 vt 0.212325 0.068071 vt 0.263228 -0.142958 vt -0.203870 0.505919 vt -0.264019 1.456773 vt 0.000898 -0.132119 vt -0.047858 -0.145626 vt 0.180437 1.058054 vt 0.442227 0.672319 vt 0.424238 0.660836 vt 0.437961 0.686748 vt 0.061143 -0.160489 vt 0.043091 -0.152356 vt -0.328508 0.920197 vt 0.011643 -0.222319 vt 1.529284 -0.191674 vt 0.107402 -0.095132 vt 0.243596 0.889589 vt -0.088940 1.066348 vt 0.173654 0.897402 vt 0.180437 -0.179887 vt 0.706330 -0.056467 vt 0.452642 0.715944 vt 0.452875 0.700305 vt 0.434545 0.697209 vt 0.690691 -0.065862 vt 0.336547 0.679622 vt 0.183282 0.864489 vt 0.331790 1.040420 vt 0.357606 -0.121109 vt 0.331790 -0.122022 vt 0.516931 0.672217 vt 0.876984 -0.163183 vt 0.301440 1.002106 vt 0.408345 0.856430 vt 0.079616 1.092245 vt 0.111116 1.114944 vt 0.190928 1.027772 vt 0.395701 0.886598 vt -0.129501 0.127772 vt 1.017711 -0.105640 vt 0.361632 -0.072678 vt 0.371654 -0.105640 vt -0.044553 0.297584 vt -0.067552 0.287881 vt 1.014982 -0.138860 vt 0.272080 1.009949 vt 0.157399 1.059978 vt 0.136738 1.036679 vt 0.529665 -0.023818 vt 0.540240 -0.033513 vt 0.512121 -0.048792 vt -0.289499 1.492380 vt 0.274830 1.057953 vt 0.271900 1.034454 vt -0.184555 0.189674 vt 0.451093 0.649814 vt 0.486546 0.679543 vt 0.285261 1.063741 vt 0.500272 -0.028877 vt 0.014226 -0.275765 vt 0.027409 -0.290601 vt 0.310517 0.836149 vt 0.245607 0.909260 vt 0.723287 -0.040575 vt 0.464116 0.732900 vt 0.468852 0.712095 vt 1.152767 -0.059468 vt -0.091115 -0.220942 vt 0.261049 -0.153857 vt 0.235622 -0.136424 vt 0.690490 -0.058695 vt 0.163034 1.118035 vt 0.144963 1.083590 vt 0.136300 1.097970 vt 0.541909 0.712927 vt 0.347264 0.837015 vt 0.345325 0.801549 vt 0.326037 0.828721 vt 0.549766 0.672271 vt 0.309994 1.069225 vt 0.497694 0.134963 vt -0.274891 -0.062696 vt 1.233369 -0.076950 vt 0.309815 -0.190463 vt 0.078022 0.990304 vt -0.266770 -0.054213 vt 1.289384 -0.062696 vt -0.253628 -0.036630 vt -0.001307 0.881971 vt -0.005069 0.896071 vt 0.000898 1.082025 vt -0.047858 1.066344 vt 0.245607 -0.233008 vt 0.243596 -0.254924 vt 0.263228 1.072812 vt 0.237551 1.096338 vt -0.253628 1.326428 vt -0.253619 1.311650 vt -0.268090 1.318237 vt -0.253619 -0.050825 vt -0.251239 1.267601 vt -0.274891 1.298998 vt -0.266770 1.303695 vt -0.270038 1.277142 vt 0.045727 -0.230594 vt -0.023685 0.875407 vt -0.241766 1.294281 vt -0.266306 1.258921 vt 0.053686 -0.110517 vt -0.089774 0.558552 vt -0.069396 0.573710 vt 1.302036 -0.050825 vt -0.218159 1.334968 vt -0.224716 1.319739 vt 0.486408 0.597221 vt 0.458206 0.580096 vt 0.471880 0.597934 vt 0.822221 -0.181313 vt -0.116961 0.545687 vt -0.096606 0.572334 vt 0.143739 0.977106 vt 0.028999 1.051400 vt -0.032464 1.049860 vt 0.031956 0.929620 vt 0.000945 0.922892 vt 0.011643 0.934790 vt -0.226065 1.245476 vt 0.049379 1.110498 vt 0.082953 1.117542 vt 0.053686 1.096607 vt 0.376775 -0.074309 vt 0.019909 1.070637 vt -0.279723 1.357954 vt 0.854149 -0.158495 vt -0.233177 1.211154 vt 0.034300 1.035098 vt 0.540240 0.732854 vt 0.009389 -0.185447 vt 0.159785 1.034930 vt -0.029099 1.016786 vt 1.257987 -0.070013 vt 0.085762 -0.165589 vt -0.247111 1.179519 vt -0.225300 1.187001 vt -0.211594 1.159802 vt -0.231472 1.111795 vt -0.249338 1.087322 vt -0.260432 1.100393 vt -0.240628 1.080364 vt -0.239461 1.268980 vt 1.201540 -0.087234 vt 1.177387 -0.082563 vt -0.206221 1.173379 vt -0.219149 1.068968 vt 0.002824 0.850781 vt 1.016214 -0.121109 vt -0.274103 0.080361 vt -0.280958 0.067375 vt -0.213645 1.129901 vt -0.203805 1.119593 vt -0.203805 -0.100612 vt -0.185074 -0.134642 vt -0.240628 -0.128674 vt -0.195945 1.050965 vt -0.229809 1.021873 vt 0.476147 -0.022071 vt -0.200268 1.140957 vt -0.185074 1.096423 vt -0.192356 1.073797 vt 0.476147 0.752165 vt 0.500272 0.746074 vt -0.190708 1.138887 vt -0.187555 1.014361 vt 0.227519 0.867524 vt 1.129274 -0.080166 vt -0.190708 -0.080166 vt -0.180585 -0.100626 vt -0.169557 1.037079 vt 0.067794 -0.295705 vt 0.048381 -0.286214 vt -0.088468 -0.123339 vt -0.182262 1.162380 vt -0.173248 1.143766 vt -0.173248 -0.062864 vt -0.154000 -0.116971 vt -0.157850 1.060838 vt 0.412877 0.650631 vt 0.422842 0.673401 vt -0.078248 1.473199 vt 1.134152 -0.062864 vt 0.527719 0.671847 vt 0.358329 0.825348 vt -0.159038 -0.094760 vt -0.136511 1.085710 vt -0.154000 1.116687 vt 0.111057 0.942500 vt -0.140341 -0.096024 vt -0.140594 1.034499 vt 0.464116 -0.040575 vt 0.388437 0.948116 vt 0.034507 -0.240648 vt -0.111787 1.100978 vt -0.120795 1.060694 vt 0.136300 -0.130311 vt 0.244182 0.510160 vt 0.265247 0.513298 vt -0.268884 -0.102544 vt -0.111787 -0.106498 vt -0.111787 -0.128275 vt 0.516626 0.749237 vt -0.107553 1.041394 vt 0.124583 0.966768 vt -0.257309 0.500345 vt -0.134107 0.522534 vt -0.238182 -0.099013 vt -0.097429 1.056984 vt -0.268884 0.548048 vt -0.247494 0.493269 vt -0.097429 -0.157612 vt -0.120795 -0.155289 vt 0.094492 0.844203 vt 0.085328 0.860479 vt 0.171147 1.083269 vt -0.101070 0.109157 vt -0.111787 1.116760 vt -0.081761 1.104823 vt -0.088468 1.088078 vt 0.202981 -0.161833 vt -0.328745 -0.027647 vt -0.227174 0.495845 vt -0.075589 1.077446 vt -0.079087 -0.173556 vt -0.362050 1.008614 vt -0.259031 1.140791 vt -0.149817 0.935445 vt -0.365867 1.037709 vt -0.334684 1.033910 vt -0.328150 0.956742 vt 0.300339 -0.072137 vt -0.254932 0.807908 vt -0.243851 0.865026 vt -0.235552 0.834211 vt -0.349979 0.960635 vt -0.336721 1.052222 vt -0.222830 0.850107 vt -0.312404 0.509241 vt -0.300808 0.494176 vt -0.292344 1.055445 vt -0.374626 1.103141 vt -0.356245 1.078755 vt 0.512810 0.632803 vt -0.206153 1.300980 vt -0.001332 -0.231884 vt 0.491183 0.639263 vt -0.359194 0.839983 vt 0.482968 0.654329 vt -0.138526 -0.132502 vt -0.331462 1.108317 vt -0.230984 1.007579 vt -0.327817 0.883604 vt 0.421411 0.141732 vt 0.460973 0.624454 vt -0.038353 -0.013732 vt -0.354745 -0.255435 vt -0.183727 0.736294 vt -0.176867 0.697150 vt -0.244540 0.920829 vt -0.251627 0.941268 vt -0.377506 -0.060103 vt 0.774491 -0.128553 vt 0.324798 0.660395 vt 0.312268 0.662526 vt -0.268056 0.992951 vt 0.445824 0.599415 vt 0.443161 0.629732 vt 0.154472 -0.062591 vt -0.268264 1.080955 vt -0.316917 1.167696 vt -0.345104 0.766246 vt -0.344947 0.747983 vt -0.345104 -0.118983 vt -0.339682 -0.144504 vt -0.326128 -0.132170 vt 0.436563 -0.081116 vt 0.436563 0.571280 vt -0.234827 0.905853 vt -0.183619 0.757405 vt -0.139831 1.349854 vt 0.421339 0.598978 vt 0.423108 0.643444 vt -0.053166 -0.254290 vt -0.222343 0.924312 vt 0.018892 -0.244565 vt -0.281005 -0.110559 vt -0.272129 -0.119245 vt -0.260411 -0.116622 vt 1.517363 -0.230594 vt 0.405710 0.620991 vt -0.169592 0.802611 vt -0.199583 0.824823 vt 0.503805 -0.083691 vt 0.499628 -0.096613 vt -0.313917 -0.122831 vt -0.320259 -0.104505 vt -0.256810 0.901583 vt -0.182139 0.796098 vt 0.131137 -0.057344 vt 0.113520 -0.034175 vt 0.519740 -0.069445 vt 0.421938 0.544965 vt 0.406135 0.549180 vt 0.398940 0.578349 vt 0.013691 0.547201 vt -0.369919 1.132726 vt -0.326128 0.760457 vt -0.314599 0.778579 vt -0.433573 1.096243 vt -0.425765 1.123497 vt -0.267236 0.970607 vt -0.234195 0.959535 vt -0.238062 0.990621 vt -0.343874 0.825318 vt -0.195768 0.855578 vt -0.152878 0.874021 vt -0.149506 0.840834 vt 0.400718 0.635861 vt -0.142022 0.885532 vt -0.138077 0.916349 vt -0.280036 0.780316 vt 0.406135 -0.077218 vt 0.385681 0.616207 vt -0.138977 0.788110 vt -0.147066 0.815863 vt -0.163504 0.225265 vt -0.165833 0.998164 vt -0.304613 0.533454 vt 0.583094 -0.101245 vt 0.684204 -0.105328 vt 0.693872 -0.118248 vt -0.304747 1.489518 vt 0.365790 0.571534 vt 0.377122 0.596019 vt -0.298777 1.444517 vt 0.367805 0.600902 vt -0.039418 0.099540 vt -0.041741 0.085087 vt 0.135266 0.504311 vt -0.072495 0.267497 vt -0.397597 1.000406 vt -0.198906 0.956682 vt -0.199675 0.984396 vt -0.176468 0.955890 vt -0.033959 0.754676 vt -0.226205 1.284529 vt -0.136904 0.748268 vt 0.352361 0.584084 vt -0.157286 1.324434 vt -0.226016 0.707146 vt -0.167660 0.760866 vt -0.157965 0.781496 vt -0.251543 -0.068690 vt -0.157598 0.719219 vt -0.147034 0.747594 vt -0.312281 -0.415287 vt -0.180648 0.644990 vt -0.150041 0.637106 vt -0.157753 0.616502 vt -0.157617 0.705754 vt -0.157913 0.684370 vt -0.233810 0.691395 vt -0.221232 0.693817 vt -0.339584 0.808451 vt -0.339682 0.785941 vt -0.436460 1.087331 vt 0.412893 0.823739 vt -0.138450 0.863544 vt -0.167257 0.590192 vt -0.164987 0.543767 vt -0.259156 0.737852 vt 0.681782 -0.098052 vt -0.233197 -0.081523 vt 0.319434 0.527942 vt -0.011318 0.308821 vt 1.479905 -0.462889 vt 1.489068 -0.452921 vt -0.161785 0.664003 vt -0.225946 0.682420 vt -0.153536 0.906573 vt -0.193850 0.921926 vt -0.180313 0.676598 vt -0.143738 0.497789 vt -0.137732 0.507361 vt 0.317033 0.735049 vt 0.317135 0.770183 vt 0.668138 -0.142981 vt -0.330746 0.735420 vt -0.042534 0.237534 vt 0.325448 0.596970 vt 0.305492 0.609861 vt 0.609511 -0.212176 vt 0.108803 0.535386 vt 0.129927 0.510736 vt 0.306932 0.804585 vt 0.278719 -0.040926 vt 0.265397 -0.061582 vt 0.272927 -0.100796 vt 1.029927 0.173977 vt 1.347953 -0.445174 vt -0.214508 0.941368 vt 0.295298 0.587141 vt 0.600248 -0.216435 vt 0.624375 -0.232680 vt 0.306476 0.633989 vt 0.677180 -0.233377 vt 0.708706 -0.241506 vt 0.725436 -0.231191 vt 0.696090 -0.218010 vt 0.297450 0.756952 vt -0.137841 0.685248 vt 0.293222 0.616988 vt 0.289652 0.635884 vt 0.303117 0.686794 vt 0.304039 0.718319 vt 0.290730 0.736323 vt 0.293475 0.786801 vt -0.236682 -0.068511 vt 0.279822 0.810417 vt 0.343928 -0.100800 vt 0.297570 0.578716 vt 0.276901 0.589731 vt 0.272064 0.600331 vt 0.263197 0.674549 vt 0.282551 0.702324 vt -0.278377 -0.058277 vt -0.362582 0.814367 vt 0.273704 0.571875 vt 0.276047 0.634014 vt 0.269480 0.650567 vt -0.237683 0.492322 vt -0.259156 -0.153555 vt 0.264089 0.614696 vt 0.269397 0.738218 vt 0.253567 0.752485 vt 0.259457 0.777386 vt 1.476233 -0.434701 vt 1.487657 -0.424763 vt 1.487143 -0.440694 vt 0.250811 0.558997 vt 0.252662 0.697887 vt 0.254356 0.717719 vt 0.248642 0.583295 vt 0.252101 0.600631 vt 0.250367 0.621325 vt 0.246898 0.735612 vt 0.239489 0.804803 vt 0.249313 0.827314 vt -0.043644 -0.240543 vt -0.047593 -0.226087 vt 0.244471 0.642996 vt 0.229993 0.677534 vt 0.225285 0.749079 vt 0.235388 0.780037 vt 0.233251 0.539497 vt 0.229502 0.562592 vt 0.226298 0.726404 vt 0.232595 0.833928 vt 0.827401 -0.203566 vt 0.815734 -0.193731 vt 0.791936 -0.209528 vt 0.211966 0.577274 vt 0.225075 0.596921 vt 0.212710 0.630415 vt 0.222327 0.699893 vt 0.218151 0.778076 vt 0.213289 0.809408 vt 0.208878 0.839021 vt 0.207444 0.543428 vt 0.202011 0.592898 vt 0.206448 0.640005 vt 0.210140 0.749389 vt 0.194202 0.674248 vt 0.195077 0.706560 vt 0.208484 0.783340 vt 0.190692 0.606683 vt 0.195488 0.728793 vt 0.197688 0.826740 vt 0.182714 0.524430 vt 0.176765 0.558456 vt 0.189092 0.571867 vt 0.191004 0.747602 vt 0.186043 0.810342 vt -0.260411 0.492418 vt 0.185446 1.009227 vt 0.190952 0.509619 vt 0.170242 0.549586 vt 0.186489 0.649830 vt 0.166141 0.760179 vt 0.178770 0.782810 vt 0.177700 0.585539 vt 0.179215 0.622816 vt 0.169356 0.731626 vt 0.172489 0.831443 vt 0.169944 0.854532 vt -0.206507 0.493663 vt 0.163349 0.603317 vt 0.169881 0.646254 vt 0.168087 0.679547 vt 0.162953 0.704746 vt 0.154161 0.500784 vt 0.158951 0.509414 vt 0.150259 0.803494 vt 0.499117 0.270415 vt 0.498526 0.250383 vt -0.429100 1.061867 vt 0.150190 0.569072 vt 0.150190 -0.235869 vt 0.142534 -0.252894 vt 0.177700 -0.252036 vt 0.189092 -0.233498 vt 0.155962 0.628192 vt 0.148082 0.525778 vt 0.142534 0.580811 vt 0.146639 0.594866 vt 0.147030 0.653221 vt 0.143635 0.731584 vt 0.149761 0.825017 vt 0.145467 0.559464 vt 0.130470 0.618196 vt 0.147756 0.697473 vt 0.138718 0.843761 vt 0.133445 0.865572 vt 0.815705 -0.162925 vt 0.127342 0.549699 vt 0.145467 -0.227135 vt 0.128349 0.690191 vt 0.132327 0.763655 vt 0.132274 0.500871 vt 0.125630 0.559423 vt 0.125630 -0.232625 vt 0.126775 0.654139 vt 0.118058 0.715557 vt 0.113381 0.795826 vt 0.127329 0.813755 vt 0.125329 0.834260 vt 0.118226 -0.254029 vt 0.118226 0.574506 vt 0.114061 0.601036 vt 0.117491 0.734019 vt 0.115513 0.985005 vt 0.110059 0.621702 vt 0.116839 0.674620 vt 0.107804 0.776993 vt 0.107095 0.652922 vt 0.094733 0.743291 vt 0.094173 0.827712 vt 0.100735 0.576567 vt 0.088577 0.683235 vt 0.085888 0.697489 vt 0.253841 -0.099387 vt 0.087081 0.558607 vt 0.087081 -0.233803 vt 0.100735 -0.257510 vt 0.083831 0.625970 vt 0.093670 0.717937 vt 0.073591 0.653758 vt 0.093639 0.759485 vt 0.095481 0.791921 vt 0.084858 -0.255821 vt 0.084858 0.577895 vt 0.071029 0.608279 vt 0.074008 0.747119 vt 0.074899 0.779355 vt 0.057486 0.793692 vt 0.053787 0.815377 vt 0.068369 0.501051 vt 0.063643 0.581746 vt 0.063524 0.641455 vt 0.062416 0.676420 vt 0.059079 0.714961 vt 0.391196 0.082601 vt 0.059176 0.560319 vt 0.063643 -0.257882 vt 0.054917 0.696064 vt -0.298570 0.548840 vt 0.039116 1.446740 vt 0.039991 0.844858 vt -0.113291 0.591784 vt 0.512792 0.164949 vt 0.492306 0.165412 vt 0.493298 0.233082 vt 0.039544 0.573317 vt 0.045664 0.612574 vt 0.044286 0.662467 vt 0.040900 0.714936 vt 0.048243 0.765682 vt 0.218968 -0.034176 vt 0.207490 -0.020910 vt 0.488506 0.183614 vt 0.034872 0.564673 vt -0.277270 -0.162905 vt 0.214272 -0.055270 vt 0.027594 1.468882 vt 0.030253 1.508087 vt 0.004078 0.746831 vt 0.014372 0.768624 vt 0.021028 0.816258 vt 0.045727 1.526977 vt 0.018354 0.596696 vt 0.022691 0.633511 vt 0.016604 0.702561 vt 0.019350 0.715354 vt -0.273169 0.499728 vt -0.283176 0.503477 vt 0.493423 0.080361 vt 0.490115 0.091708 vt 0.011805 0.580902 vt 0.033661 0.191321 vt 0.000233 0.207554 vt 0.021577 0.134767 vt 0.008623 1.440095 vt 0.005370 0.819101 vt 0.043008 0.148014 vt -0.216373 -0.118248 vt -0.221232 -0.105328 vt 0.446250 0.105135 vt 0.422036 0.112870 vt 0.430762 0.086882 vt 0.494822 0.109774 vt -0.267612 0.105876 vt 0.176179 -0.048767 vt 0.004399 0.576160 vt -0.004852 0.591428 vt -0.006687 0.775312 vt -0.286541 0.504436 vt -0.287511 0.521416 vt -0.267612 0.527392 vt 0.212033 -0.151693 vt 0.184061 -0.161326 vt 0.220088 -0.163181 vt 0.171841 0.208144 vt 0.197886 -0.081147 vt 0.493864 0.098959 vt -0.020841 0.634346 vt 0.756633 -0.118983 vt 0.090630 -0.008657 vt 0.069428 -0.023846 vt -0.027036 0.600284 vt 1.427730 -0.244138 vt -0.309183 1.498681 vt -0.252754 0.083852 vt 0.054273 -0.058884 vt 0.043719 -0.022072 vt 0.063862 0.290295 vt 1.177723 -0.084078 vt 0.287133 0.168174 vt 0.248205 0.168167 vt 0.244746 0.137880 vt 0.271261 0.200268 vt 0.227349 0.215804 vt 0.222408 0.507808 vt 0.191215 0.507822 vt 0.299708 0.062993 vt 0.299545 0.080258 vt 0.274769 0.094667 vt 0.455577 0.071375 vt 0.324035 0.039704 vt 0.305893 0.039761 vt 0.079475 0.505069 vt 0.121581 0.224103 vt 0.073490 0.171248 vt 0.306904 0.016542 vt 0.149123 0.043142 vt 0.162513 0.058324 vt 0.155730 0.066782 vt 0.357721 -0.014736 vt -0.082125 0.270415 vt 0.022895 0.292307 vt 0.045790 0.294612 vt 0.028697 0.303903 vt 0.224206 0.237569 vt 0.196083 0.245797 vt 0.209117 0.213296 vt 0.046700 0.215658 vt 0.491845 0.004891 vt 0.316351 0.061492 vt 0.212143 0.191901 vt 0.207490 0.499569 vt 0.214989 0.510412 vt 0.195526 0.501835 vt 0.233004 0.143013 vt 0.230918 0.171827 vt 0.318077 0.096921 vt 0.244514 0.091187 vt 0.257947 0.225895 vt 0.299683 -0.019801 vt 0.306571 -0.032571 vt 0.244182 0.245861 vt 0.222408 0.250015 vt 0.480210 0.067017 vt 0.325002 0.009756 vt -0.325582 -0.271006 vt -0.337338 -0.253061 vt 0.490189 0.091336 vt 0.133576 0.138120 vt 0.106055 0.095443 vt 0.343861 0.016671 vt 0.293941 0.134856 vt 0.169889 -0.116760 vt 0.148062 -0.107017 vt 0.159908 -0.166085 vt 0.125635 -0.172201 vt 0.136504 -0.182230 vt 0.180451 -0.175743 vt 0.490265 -0.034176 vt 0.500799 -0.021447 vt 0.489955 -0.020910 vt 0.049410 0.244023 vt 0.179868 0.083661 vt 0.167985 0.087967 vt 0.222997 0.168483 vt 0.182833 0.107000 vt 0.186383 0.020106 vt 0.190504 0.039660 vt 0.177620 0.033571 vt 0.031216 0.012282 vt 0.172932 0.115072 vt -0.072305 0.204303 vt 0.493545 -0.107242 vt 0.495303 -0.081147 vt 0.513797 -0.098190 vt 0.100984 0.199018 vt 0.068527 0.208021 vt 0.109685 0.155402 vt 0.494602 0.143013 vt 0.494187 0.171827 vt 0.503677 0.168483 vt 0.285049 -0.015777 vt 0.099035 0.280406 vt 0.100411 0.264465 vt 0.097032 0.506854 vt -0.013481 0.078832 vt -0.027585 0.051509 vt 0.702034 0.014729 vt 0.520271 0.288369 vt 0.007626 0.066282 vt -0.474690 0.073524 vt -0.477750 0.108244 vt 0.265247 0.239688 vt 0.986778 0.164958 vt 0.191215 0.256060 vt -0.460041 0.135090 vt 0.121954 0.015151 vt 0.202840 0.058431 vt 0.193936 0.200688 vt -0.046894 0.186003 vt 0.495287 0.043142 vt 0.496095 0.066782 vt 0.510867 0.046426 vt 0.491388 0.191901 vt 0.514960 0.171566 vt 0.135266 0.264493 vt 0.125194 0.194964 vt 0.345595 0.062786 vt 0.222949 0.119372 vt 0.125635 0.500067 vt 0.159908 0.500640 vt 0.150885 0.520375 vt 0.175768 0.512107 vt 0.306358 0.135013 vt 0.069153 0.046201 vt 0.050279 0.053637 vt 0.059150 0.009557 vt -0.062020 0.164949 vt 0.273106 0.227760 vt 0.515885 -0.014182 vt 0.511399 0.007109 vt 0.080162 0.120041 vt 0.051668 0.095016 vt -0.461927 0.173977 vt 0.490487 0.011782 vt 0.516859 -0.112641 vt 0.123262 0.274687 vt 0.252362 -0.046610 vt -0.449632 0.183098 vt 0.275474 -0.148003 vt 0.159087 -0.019105 vt 0.154372 0.011782 vt 0.188953 0.068031 vt -0.431947 0.146275 vt -0.307129 -0.096055 vt -0.316756 -0.075557 vt -0.322382 -0.083234 vt 0.514494 0.154740 vt 0.326480 0.143052 vt 0.158095 0.253604 vt 0.491995 -0.130449 vt -0.460307 0.216613 vt -0.192975 0.245741 vt 0.158095 0.502047 vt 0.135210 -0.014182 vt -0.002907 0.137568 vt -0.417243 0.163589 vt 1.027418 0.216613 vt 0.159354 0.153492 vt 0.151898 0.183019 vt 0.025410 0.251640 vt -0.005949 0.294031 vt 0.156514 0.116823 vt 0.098801 0.045950 vt -0.097950 0.250383 vt -0.444734 0.225024 vt 0.396575 0.134160 vt 0.370191 0.107124 vt 0.147298 -0.135607 vt 0.126675 -0.119298 vt 0.108236 -0.150561 vt 0.133932 0.528487 vt 0.133932 -0.151097 vt -0.407703 0.145451 vt -0.454877 0.248040 vt 0.205615 0.116391 vt 0.196864 0.103195 vt -0.393317 -0.014037 vt -0.077009 -0.003553 vt 0.260502 -0.031200 vt 0.246313 -0.035879 vt 0.169273 -0.147777 vt -0.422466 0.200630 vt 0.012784 0.104194 vt 0.246313 0.498863 vt 0.260502 0.508435 vt 0.218968 0.499879 vt 0.015506 0.306083 vt 0.015506 0.508278 vt -0.398422 0.183922 vt -0.419109 0.229007 vt -0.373480 -0.006826 vt -0.027182 0.196445 vt -0.392343 0.163292 vt -0.415741 0.247227 vt -0.418328 0.265447 vt -0.418328 1.041419 vt -0.454877 1.050996 vt 0.378766 0.005307 vt -0.390332 0.012230 vt 0.029795 0.078587 vt -0.406074 0.052759 vt -0.404545 0.098344 vt -0.424941 0.057573 vt 0.362970 0.043539 vt -0.316840 1.041249 vt 0.714744 0.026115 vt 0.366419 0.535255 vt 0.366419 0.127211 vt 0.702365 -0.004009 vt -0.389774 0.207223 vt -0.364690 0.026115 vt -0.388637 0.049632 vt 0.734985 0.093694 vt -0.376009 0.179587 vt -0.052384 0.132267 vt 0.989467 0.179587 vt -0.374461 0.241856 vt -0.353214 -0.004009 vt -0.362129 0.195786 vt -0.365731 0.201761 vt -0.389088 0.255488 vt -0.389088 1.024258 vt -0.389635 1.039938 vt 0.175768 0.260018 vt 0.155627 0.263418 vt -0.375573 0.093694 vt -0.391142 0.068463 vt 0.748765 0.131633 vt 0.290508 -0.083234 vt 0.282415 -0.101267 vt -0.056580 0.222842 vt -0.361067 0.048178 vt -0.372961 0.163658 vt -0.403670 0.145326 vt -0.388219 0.128671 vt 1.034147 0.282324 vt 1.045900 0.273249 vt 1.030325 0.262873 vt 0.712236 0.048178 vt 0.278014 -0.127665 vt 0.972654 0.195496 vt 0.988572 0.195786 vt 0.216400 0.154740 vt 0.214877 0.171566 vt -0.329318 0.016373 vt -0.354482 0.014729 vt -0.341009 0.033470 vt -0.356225 0.077449 vt 0.727823 0.118056 vt -0.362129 0.998185 vt -0.365731 1.003518 vt -0.343451 0.198773 vt -0.349438 0.239225 vt -0.362508 0.259116 vt -0.362508 1.022393 vt -0.374857 0.282324 vt -0.389635 0.262873 vt -0.319632 -0.003303 vt 0.691066 0.061613 vt 0.714591 0.077449 vt -0.358986 0.118056 vt -0.346112 0.204823 vt -0.343772 0.273967 vt -0.357332 0.290687 vt 0.094759 0.228587 vt 0.677831 0.016373 vt 0.680549 0.037865 vt 0.693841 0.033470 vt -0.338127 0.101307 vt -0.015585 -0.201646 vt -0.357332 1.042465 vt -0.332868 -0.056360 vt -0.332837 -0.038782 vt -0.342339 -0.048127 vt 0.487040 0.071550 vt 0.489779 0.044653 vt -0.293784 -0.028260 vt 0.707799 0.101307 vt 0.384240 0.025263 vt -0.321013 0.023207 vt -0.302338 0.045088 vt 0.485829 -0.038782 vt -0.289273 0.003160 vt -0.314602 0.028639 vt -0.329934 0.037865 vt -0.327324 0.076165 vt -0.342744 0.061613 vt -0.334624 0.152032 vt -0.373780 0.131633 vt -0.348724 0.175502 vt -0.330277 0.200099 vt 0.352471 0.080352 vt -0.283983 -0.021880 vt -0.304269 0.044411 vt -0.313417 0.125698 vt 0.349555 0.115239 vt -0.330374 0.296401 vt -0.296361 -0.082615 vt -0.300808 -0.103679 vt -0.301719 -0.051178 vt -0.323558 -0.015106 vt -0.340741 -0.016265 vt -0.248073 -0.045524 vt 0.484922 -0.154149 vt -0.310526 0.076406 vt -0.325741 0.188327 vt -0.274477 -0.081387 vt -0.305028 0.019602 vt -0.334135 0.004891 vt -0.274763 0.023052 vt 0.169273 0.525493 vt 0.511946 0.077737 vt 0.509405 -0.138929 vt 0.488876 -0.151693 vt 0.155958 -0.042759 vt -0.293480 0.142334 vt -0.286541 0.109774 vt -0.276579 0.115870 vt -0.280510 0.061048 vt -0.294753 0.093852 vt -0.293808 0.157601 vt -0.325741 0.758084 vt 0.499589 0.287881 vt -0.278328 0.001277 vt -0.249728 -0.015112 vt -0.260622 0.038612 vt -0.237683 -0.126963 vt -0.247494 -0.128386 vt -0.253367 -0.047990 vt -0.280893 0.119116 vt -0.227174 -0.135771 vt -0.224808 -0.111546 vt -0.230676 -0.071676 vt -0.268243 0.090255 vt -0.239447 0.059441 vt 0.496977 0.045088 vt -0.307129 0.493598 vt -0.322382 0.497594 vt -0.206507 -0.134655 vt -0.274501 0.182150 vt -0.210526 -0.079135 vt -0.242898 -0.040087 vt -0.244134 0.014285 vt 0.484563 -0.103679 vt 0.483985 -0.096055 vt -0.262957 0.175051 vt -0.274501 0.725951 vt -0.191031 -0.143808 vt -0.195868 -0.119710 vt 0.150885 -0.157298 vt -0.175952 -0.154149 vt -0.180315 -0.130765 vt -0.254703 0.070592 vt -0.283176 0.098959 vt -0.143738 -0.235404 vt -0.149343 -0.203638 vt -0.153481 -0.210376 vt 0.482268 -0.203638 vt 0.483454 -0.170405 vt -0.164931 -0.178180 vt -0.162177 -0.170405 vt -0.198165 -0.001543 vt -0.273169 0.091708 vt 1.240574 -0.018809 vt 1.237839 -0.030160 vt -0.286674 0.170154 vt -0.296409 0.180275 vt -0.303640 0.159751 vt -0.233727 0.198954 vt -0.233727 0.727925 vt -0.121442 -0.229247 vt -0.131062 -0.247149 vt -0.157942 -0.144341 vt -0.219664 0.048173 vt -0.119248 -0.257699 vt -0.106716 -0.258188 vt -0.164236 -0.092388 vt -0.180091 -0.061478 vt -0.185426 -0.026170 vt -0.206337 0.023921 vt -0.232322 0.085787 vt -0.245985 0.123941 vt -0.258065 0.161978 vt -0.293003 0.202147 vt -0.228609 0.172813 vt -0.125215 -0.160943 vt 0.283410 0.074944 vt -0.093935 -0.264288 vt -0.087608 -0.246071 vt -0.144440 -0.093219 vt -0.220967 0.071261 vt -0.279719 0.218106 vt -0.283956 0.229058 vt -0.100226 -0.193352 vt -0.162979 -0.052387 vt -0.187398 0.010493 vt -0.261215 0.224527 vt -0.070706 -0.258271 vt -0.130531 -0.119127 vt -0.171394 -0.015525 vt -0.181745 -0.002376 vt -0.213491 0.066514 vt -0.209650 0.086484 vt -0.223842 0.127010 vt -0.117226 -0.157094 vt -0.130789 -0.096104 vt -0.203541 0.706881 vt -0.192575 0.739706 vt -0.108283 -0.151895 vt -0.092982 -0.177769 vt -0.117448 -0.126449 vt -0.125640 -0.067959 vt -0.119793 -0.053955 vt -0.148228 -0.026807 vt -0.161216 -0.001820 vt -0.262726 0.242559 vt -0.076319 -0.201733 vt 0.494165 -0.126449 vt 0.500428 -0.106120 vt 0.486020 -0.096104 vt -0.219863 0.193029 vt -0.262726 0.502037 vt -0.283956 0.505741 vt -0.065228 -0.186772 vt -0.080256 -0.157815 vt -0.091718 -0.142401 vt 0.514944 -0.107100 vt 0.492842 -0.151895 vt 0.514473 -0.142401 vt -0.139861 -0.009446 vt -0.171394 0.491928 vt -0.139861 0.494329 vt -0.161216 0.506873 vt -0.196560 0.121661 vt -0.192489 0.141131 vt -0.248689 0.257392 vt 0.644601 0.015970 vt -0.040673 0.309479 vt -0.044115 -0.207518 vt -0.063629 -0.167853 vt -0.065228 0.505303 vt -0.063629 0.525443 vt -0.092982 0.498022 vt -0.095189 -0.093275 vt -0.105512 -0.107100 vt -0.025824 -0.192456 vt -0.047562 0.521430 vt -0.068211 -0.143107 vt -0.105955 -0.034881 vt -0.118932 0.008723 vt -0.196320 0.194230 vt -0.040592 -0.166217 vt -0.067539 -0.084863 vt -0.106336 0.002672 vt -0.025824 0.502029 vt -0.047562 -0.178499 vt -0.081656 -0.066867 vt -0.154208 0.151352 vt -0.154277 0.134230 vt 0.371902 0.136601 vt -0.025373 0.524400 vt -0.025373 -0.178029 vt -0.044845 -0.118027 vt -0.086511 -0.022483 vt -0.107727 0.020227 vt -0.061267 -0.058292 vt -0.089742 0.044529 vn -0.0198 0.0994 -0.9948 vn -0.9845 0.0661 -0.1627 vn -0.2253 0.9711 -0.0792 vn -0.2201 0.9696 -0.1073 vn -0.3579 0.9238 0.1360 vn -0.1265 0.9836 -0.1283 vn -0.0848 0.9237 0.3736 vn 0.1444 -0.9378 -0.3156 vn 0.0035 0.7173 0.6968 vn -0.3696 0.7375 0.5653 vn 0.2809 0.9566 -0.0781 vn -0.8285 -0.5415 -0.1428 vn 0.1251 0.4835 0.8664 vn -0.4242 0.8184 0.3877 vn -0.1184 0.7292 0.6740 vn -0.1596 0.9871 0.0110 vn -0.8462 0.4448 0.2936 vn 0.3318 0.9426 0.0361 vn -0.4863 0.8671 0.1080 vn -0.3425 0.9017 0.2638 vn 0.4989 0.8319 0.2430 vn -0.1017 0.9761 0.1921 vn -0.8661 0.4999 -0.0094 vn 0.5034 0.8322 0.2322 vn -0.6061 0.7836 -0.1363 vn -0.5523 0.3505 -0.7564 vn -0.0048 -0.9999 -0.0108 vn -0.4214 -0.4880 0.7644 vn 0.3606 0.9320 0.0370 vn -0.0299 0.9940 0.1049 vn -0.9153 -0.4010 0.0381 vn -0.9271 0.1943 0.3206 vn -0.3584 0.8615 0.3596 vn 0.6509 0.6415 0.4059 vn -0.9903 -0.0967 -0.0998 vn -0.2717 0.9434 0.1903 vn -0.0338 -0.9524 -0.3029 vn -0.1777 0.9736 -0.1434 vn -0.9290 0.0807 -0.3612 vn -0.3019 0.8963 0.3249 vn -0.9484 -0.2350 -0.2128 vn -0.3525 0.8529 0.3851 vn -0.2653 0.9440 0.1963 vn -0.3007 0.8654 0.4008 vn -0.2799 0.8966 0.3433 vn 0.2313 -0.9638 -0.1327 vn -0.9304 -0.3641 0.0427 vn -0.9567 0.2019 -0.2095 vn -0.9679 0.1336 -0.2128 vn -0.9134 -0.4028 -0.0586 vn 0.3034 0.8037 0.5120 vn -0.2786 0.8990 0.3380 vn -0.7854 -0.2971 0.5430 vn 0.3555 0.9150 0.1907 vn 0.7000 0.4138 -0.5820 vn -0.2175 0.8512 0.4777 vn -0.2252 0.9064 0.3573 vn -0.1326 0.9904 0.0400 vn 0.6840 0.2154 -0.6970 vn 0.6227 0.7658 0.1607 vn 0.7301 0.6390 0.2421 vn 0.9100 0.4146 0.0012 vn 0.7008 0.4631 0.5425 vn 0.7974 0.5093 0.3237 vn 0.0156 0.7799 0.6257 vn -0.3712 0.8801 0.2960 vn 0.6738 0.6597 0.3327 vn 0.7915 0.6053 0.0845 vn 0.1138 0.9238 0.3656 vn 0.3946 0.7157 -0.5763 vn 0.1990 0.8968 0.3952 vn -0.9862 -0.1478 -0.0753 vn -0.0285 -0.9994 0.0219 vn -0.4042 -0.1584 0.9008 vn -0.0894 0.9552 0.2820 vn -0.8620 0.4958 -0.1060 vn -0.9362 0.0175 -0.3510 vn -0.1812 0.7204 0.6694 vn -0.1925 0.9652 0.1772 vn -0.8981 0.3734 -0.2325 vn -0.6761 -0.0227 -0.7365 vn 0.7450 0.6325 0.2119 vn -0.1593 -0.4949 0.8542 vn -0.1560 -0.3619 0.9191 vn -0.2111 0.3597 0.9089 vn -0.9910 -0.1311 0.0281 vn -0.8086 -0.5883 -0.0109 vn -0.4042 0.8281 0.3885 vn -0.1260 0.6372 0.7603 vn -0.3938 -0.5638 -0.7260 vn -0.0575 0.9177 0.3932 vn -0.1953 0.3646 0.9105 vn -0.2758 0.6029 0.7486 vn -0.0639 0.9835 0.1693 vn -0.3426 0.7529 0.5619 vn -0.9986 -0.0331 0.0415 vn -0.8533 0.2191 -0.4732 vn -0.4227 0.8143 0.3977 vn -0.1371 -0.4890 -0.8614 vn -0.0346 0.8973 0.4400 vn 0.0134 0.9995 0.0280 vn 0.0231 0.9975 0.0661 vn -0.9412 -0.3358 0.0373 vn -0.2438 0.3809 0.8919 vn 0.0820 0.9855 -0.1483 vn -0.8836 -0.4675 -0.0274 vn 0.0913 -0.5981 -0.7962 vn 0.1026 -0.1814 0.9780 vn -0.0940 0.5360 0.8390 vn -0.9622 0.1105 0.2490 vn -0.0201 -0.5679 -0.8228 vn -0.6688 0.2351 -0.7053 vn -0.5337 0.0787 -0.8420 vn -0.3575 -0.1299 -0.9248 vn -0.1209 0.9856 0.1180 vn -0.1938 0.8634 0.4658 vn 0.4218 0.7618 0.4916 vn -0.8781 -0.1769 -0.4446 vn -0.1822 0.8237 0.5370 vn -0.5542 0.2812 -0.7834 vn -0.2515 0.2126 -0.9442 vn 0.4319 -0.7045 -0.5631 vn -0.5215 0.6821 -0.5126 vn 0.0253 0.3374 0.9410 vn -0.0953 0.6816 0.7255 vn 0.9738 -0.1576 -0.1642 vn 0.5621 -0.8028 0.1988 vn -0.0239 0.9603 0.2779 vn -0.0379 0.7482 0.6624 vn -0.9385 0.1265 0.3212 vn -0.5114 0.1241 -0.8503 vn 0.0803 0.6060 0.7914 vn -0.0716 0.9956 -0.0598 vn 0.0253 -0.9993 -0.0273 vn -0.2040 0.1025 0.9736 vn 0.0340 -0.1902 0.9812 vn 0.2878 0.1797 0.9407 vn 0.2891 0.1627 0.9434 vn 0.1120 -0.7109 -0.6943 vn 0.2409 0.4884 0.8387 vn 0.5246 -0.8260 0.2063 vn 0.8664 -0.0204 0.4990 vn 0.9906 0.0099 -0.1362 vn -0.0601 0.9981 -0.0120 vn -0.2030 0.8540 0.4791 vn -0.9823 -0.1661 -0.0867 vn 0.3640 -0.9207 0.1405 vn 0.2792 0.1008 -0.9549 vn -0.1542 -0.1997 0.9677 vn -0.1942 0.1004 0.9758 vn 0.1894 0.4911 0.8502 vn 0.7746 0.0744 -0.6281 vn -0.1677 0.9848 -0.0455 vn -0.9587 0.2533 0.1291 vn 0.9762 -0.2093 -0.0561 vn -0.3138 0.1294 0.9406 vn -0.1061 -0.1200 0.9871 vn 0.0874 0.2014 0.9756 vn 0.1783 0.3306 0.9268 vn 0.1805 0.2390 0.9541 vn 0.8962 -0.4427 0.0287 vn -0.0600 -0.9959 0.0676 vn -0.8126 -0.4008 -0.4232 vn 0.8659 0.4855 0.1201 vn 0.8240 0.4964 0.2731 vn 0.0600 0.9830 -0.1736 vn -0.9533 0.2480 -0.1722 vn 0.1633 0.9846 -0.0626 vn 0.0297 0.8526 0.5217 vn 0.5719 -0.7992 -0.1851 vn 0.2023 0.5149 0.8330 vn 0.1725 0.5743 0.8003 vn 0.3322 -0.8671 -0.3712 vn 0.8893 0.4178 -0.1859 vn 0.9925 -0.1220 0.0003 vn 0.0258 -0.1474 -0.9887 vn -0.0961 0.9766 0.1925 vn -0.9943 -0.0555 -0.0915 vn -0.3163 0.3935 0.8632 vn -0.1275 0.1345 0.9827 vn -0.3905 0.5747 0.7192 vn -0.0019 -0.5426 -0.8400 vn -0.1654 -0.3895 0.9060 vn -0.2138 0.1422 0.9665 vn -0.1465 0.9802 -0.1329 vn -0.1369 0.9853 -0.1024 vn -0.3401 0.3502 0.8728 vn -0.3796 -0.2296 -0.8962 vn -0.1223 0.0171 0.9923 vn -0.2315 0.5410 0.8085 vn 0.1601 -0.0073 0.9871 vn -0.2489 -0.6304 0.7353 vn -0.0473 -0.6915 0.7209 vn -0.0050 -0.7827 0.6224 vn 0.0276 -0.0227 0.9994 vn -0.1456 -0.9707 -0.1911 vn 0.1939 0.4001 0.8957 vn 0.7675 -0.3508 -0.5366 vn -0.8433 0.5221 0.1272 vn -0.2617 0.9613 0.0858 vn -0.6812 -0.0830 -0.7274 vn 0.0059 0.9265 0.3762 vn 0.0051 0.8474 0.5310 vn -0.1596 -0.0257 0.9868 vn -0.0405 0.0988 0.9943 vn 0.2429 0.5973 0.7644 vn 0.6721 -0.6985 0.2456 vn -0.9770 0.0813 -0.1969 vn 0.5622 -0.7486 -0.3514 vn 0.9482 -0.1975 -0.2486 vn 0.8934 -0.3690 -0.2561 vn -0.0754 0.9834 0.1650 vn -0.1925 0.9792 -0.0641 vn 0.2197 0.9742 -0.0520 vn -0.5060 0.2609 0.8221 vn -0.3379 0.3980 0.8529 vn -0.1253 0.1258 0.9841 vn -0.0797 0.2608 0.9621 vn 0.3466 -0.0370 0.9373 vn 0.1910 -0.5881 0.7859 vn 0.0408 0.5857 0.8095 vn 0.0508 -0.8347 0.5484 vn 0.1090 -0.0731 0.9914 vn -0.0613 -0.7950 0.6036 vn 0.1068 -0.0678 0.9920 vn 0.5161 -0.7289 -0.4498 vn 0.4605 -0.4049 0.7899 vn 0.9971 0.0459 -0.0600 vn 0.9101 -0.1518 -0.3856 vn -0.2655 0.9619 -0.0651 vn -0.8098 0.3786 -0.4482 vn 0.3651 -0.3169 -0.8754 vn -0.0600 0.0825 0.9948 vn -0.1254 0.2448 0.9614 vn -0.3855 0.3778 0.8418 vn -0.1085 0.1284 0.9858 vn 0.2797 0.6658 0.6918 vn 0.1919 -0.2499 0.9491 vn 0.6274 -0.0451 0.7774 vn -0.0417 0.2769 0.9600 vn 0.2551 0.3557 0.8991 vn -0.0617 -0.4667 0.8823 vn 0.0086 0.0417 0.9991 vn 0.2377 0.1783 0.9548 vn 0.0851 -0.1050 0.9908 vn 0.3136 -0.1364 0.9397 vn 0.4614 -0.4284 0.7769 vn 0.5660 0.4682 0.6786 vn 0.9746 0.2128 -0.0692 vn 0.9992 0.0246 -0.0325 vn 0.8358 0.5135 -0.1941 vn -0.2358 0.8914 0.3870 vn -0.4053 0.8090 0.4256 vn -0.3557 0.8981 0.2585 vn -0.3892 -0.1014 0.9156 vn -0.3939 0.2959 0.8702 vn -0.3649 0.0504 0.9297 vn -0.3144 0.4312 0.8457 vn 0.4359 -0.0710 0.8972 vn -0.0239 -0.5276 0.8491 vn 0.1876 -0.5856 0.7886 vn -0.0432 0.5893 0.8068 vn -0.3836 -0.5187 0.7641 vn 0.1723 -0.2285 0.9582 vn 0.4310 -0.1576 0.8885 vn 0.0875 0.2005 0.9758 vn 0.9726 -0.1604 -0.1682 vn 0.9271 0.0991 -0.3616 vn 0.5277 0.2753 0.8036 vn 0.8468 -0.2834 -0.4501 vn 0.2500 0.8444 0.4738 vn 0.3360 0.7935 0.5074 vn 0.2037 0.7627 0.6139 vn -0.4924 -0.8704 -0.0061 vn -0.2266 -0.1933 0.9546 vn -0.3113 0.1744 0.9342 vn -0.3934 0.2998 0.8691 vn 0.0035 -0.2986 0.9544 vn -0.1128 -0.9933 0.0263 vn 0.5150 -0.5433 -0.6631 vn -0.2919 0.1249 0.9483 vn 0.2419 0.8243 0.5119 vn 0.1613 0.4898 0.8568 vn 0.1307 0.4629 0.8767 vn -0.7681 -0.3987 0.5011 vn -0.2908 0.7818 0.5516 vn -0.1513 -0.1845 0.9711 vn -0.1842 0.4257 0.8859 vn 0.2851 -0.2806 0.9165 vn -0.1910 -0.0261 0.9812 vn 0.2985 -0.4851 0.8220 vn 0.2587 0.2222 0.9401 vn 0.2429 0.2161 0.9457 vn 0.2380 0.9618 0.1349 vn -0.8203 -0.5167 0.2454 vn -0.2804 -0.3691 0.8861 vn -0.1691 0.0813 0.9822 vn -0.0639 0.0870 0.9942 vn -0.1027 0.4280 0.8979 vn -0.1498 0.4651 0.8725 vn -0.1105 0.5070 0.8549 vn 0.9112 0.4076 0.0599 vn 0.0449 0.1939 0.9800 vn 0.1344 0.3017 0.9439 vn 0.5094 -0.8379 -0.1961 vn 0.2653 0.7476 0.6089 vn 0.7106 0.1625 -0.6846 vn 0.1017 0.4673 0.8782 vn 0.0288 0.5395 0.8415 vn -0.9338 0.0919 -0.3459 vn -0.3566 0.9340 0.0218 vn -0.9113 -0.2841 0.2980 vn -0.2187 0.8430 0.4914 vn 0.0815 -0.3997 0.9130 vn 0.1267 -0.2343 0.9639 vn 0.1550 -0.2885 0.9448 vn -0.2106 0.2143 0.9538 vn -0.2361 0.5512 0.8003 vn -0.1632 0.4639 0.8707 vn 0.9789 -0.0203 -0.2031 vn 0.3526 -0.4659 0.8116 vn 0.0932 0.4319 0.8971 vn -0.9838 -0.1345 -0.1186 vn 0.4677 0.7502 0.4673 vn -0.1681 0.9829 0.0749 vn -0.2411 0.9498 -0.1994 vn 0.1526 0.1276 0.9800 vn -0.0948 0.4301 0.8978 vn -0.0394 0.1812 0.9827 vn -0.1378 0.4249 0.8947 vn 0.0401 0.5318 0.8459 vn 0.1800 0.2635 0.9477 vn 0.1100 0.0690 0.9915 vn 0.7474 -0.5882 -0.3088 vn 0.0044 -0.7743 0.6327 vn -0.2857 0.8997 0.3299 vn -0.2716 -0.2957 0.9159 vn -0.3093 -0.1905 0.9317 vn -0.2299 -0.0444 0.9722 vn -0.0604 0.4682 0.8816 vn 0.0095 0.0432 0.9990 vn -0.2772 0.7055 0.6523 vn 0.0905 0.1688 0.9815 vn 0.1486 0.3338 0.9309 vn -0.7090 -0.2246 -0.6684 vn -0.0422 0.5941 0.8033 vn -0.0785 -0.7052 0.7047 vn 0.4918 -0.8397 -0.2304 vn -0.3150 0.7113 0.6284 vn 0.8866 0.2722 -0.3739 vn -0.4967 0.8604 0.1141 vn -0.1636 0.9258 0.3409 vn 0.0853 -0.3245 0.9420 vn 0.2539 -0.1017 0.9619 vn -0.0631 -0.0739 0.9953 vn -0.1519 0.1332 0.9794 vn -0.0885 0.5627 0.8219 vn 0.1097 0.1204 0.9866 vn 0.2373 0.6021 0.7623 vn -0.1057 0.6888 0.7172 vn 0.2419 0.4968 0.8335 vn 0.3424 -0.7387 0.5807 vn -0.2673 -0.6113 0.7449 vn -0.2892 0.8561 0.4282 vn 0.0026 0.9869 0.1614 vn -0.1223 -0.5486 -0.8271 vn -0.3328 -0.3978 -0.8550 vn -0.3087 0.1234 -0.9431 vn -0.0128 -0.1391 0.9902 vn -0.0178 0.1646 0.9862 vn -0.0755 0.3593 0.9302 vn -0.0906 0.5675 0.8184 vn 0.3073 -0.3557 0.8826 vn 0.2395 -0.7756 -0.5840 vn 0.9142 0.2209 -0.3398 vn 0.0052 -0.7672 0.6413 vn -0.0987 -0.6488 0.7546 vn -0.2384 0.4493 0.8610 vn -0.2030 -0.8720 -0.4455 vn 0.5631 -0.7971 -0.2182 vn -0.4902 0.8586 0.1501 vn -0.1699 0.8915 0.4200 vn 0.2644 0.8477 0.4599 vn -0.5225 0.1289 -0.8429 vn 0.0251 -0.5544 0.8319 vn -0.4349 -0.1038 0.8945 vn -0.3735 -0.0131 0.9275 vn -0.0277 -0.1955 0.9803 vn 0.0740 0.5238 0.8486 vn -0.0823 0.0365 0.9959 vn 0.5549 -0.1573 0.8169 vn 0.0947 0.4090 0.9076 vn -0.0170 0.0177 0.9997 vn 0.1862 0.4768 0.8591 vn -0.6428 0.2115 -0.7362 vn -0.2419 -0.1077 -0.9643 vn 0.0320 -0.5724 0.8194 vn 0.1882 -0.8904 0.4145 vn -0.1311 -0.3327 0.9339 vn -0.1802 -0.2721 0.9452 vn -0.2799 0.0478 0.9588 vn -0.2834 0.0292 0.9586 vn 0.1002 0.4239 0.9001 vn 0.0198 0.6256 0.7799 vn -0.0094 0.5602 0.8283 vn 0.1969 0.0139 0.9803 vn 0.0706 0.7120 0.6986 vn 0.1458 0.6186 0.7721 vn 0.8615 0.3833 -0.3329 vn 0.2131 0.7505 0.6256 vn 0.2363 -0.1613 0.9582 vn 0.6266 0.4288 -0.6508 vn 0.1410 0.1896 0.9717 vn -0.2510 0.1472 0.9567 vn 0.7482 -0.3386 -0.5705 vn 0.0246 -0.6697 -0.7422 vn -0.9995 -0.0285 0.0161 vn -0.0908 0.1741 0.9805 vn -0.1351 0.2721 0.9527 vn -0.0117 0.4408 0.8975 vn -0.0799 0.5570 0.8267 vn -0.1597 0.3388 0.9272 vn -0.2969 0.8135 0.5000 vn 0.0688 -0.4473 0.8917 vn -0.1043 -0.0765 0.9916 vn 0.2524 0.3023 0.9192 vn 0.2452 0.3474 0.9051 vn -0.2656 -0.4024 0.8761 vn 0.0746 0.7138 0.6964 vn 0.0493 0.6822 0.7295 vn 0.1095 0.4562 0.8831 vn 0.5339 0.3619 0.7642 vn 0.9130 0.3608 0.1903 vn -0.0393 -0.4695 -0.8820 vn -0.4796 0.7115 -0.5136 vn 0.1838 0.1026 0.9776 vn -0.6022 -0.1635 0.7814 vn -0.5086 -0.6910 -0.5137 vn -0.3960 -0.3979 -0.8275 vn 0.1706 -0.4417 0.8808 vn 0.2434 -0.1303 0.9611 vn -0.0098 0.1496 0.9887 vn 0.1714 -0.0818 0.9818 vn 0.3404 0.2166 0.9150 vn 0.3044 0.1501 0.9406 vn 0.2911 0.3840 0.8762 vn 0.0722 0.5845 0.8082 vn 0.4714 0.1444 0.8700 vn -0.0844 -0.7604 0.6439 vn -0.1321 0.0036 0.9912 vn -0.0624 -0.0849 0.9944 vn 0.9832 0.0484 -0.1763 vn -0.0212 -0.5308 0.8473 vn 0.2010 0.0147 0.9795 vn 0.7221 -0.3245 -0.6110 vn 0.5703 -0.7989 0.1913 vn -0.9460 -0.2607 -0.1926 vn 0.6778 -0.6413 -0.3596 vn 0.1012 0.8627 0.4955 vn -0.4494 -0.7172 0.5327 vn -0.2352 -0.3796 -0.8948 vn -0.2063 -0.2974 0.9322 vn 0.3038 -0.2475 0.9200 vn 0.1747 0.2159 0.9606 vn 0.0872 0.2582 0.9622 vn 0.0522 0.3190 0.9463 vn 0.1064 0.3545 0.9290 vn -0.0296 0.2106 0.9771 vn -0.1871 0.8010 0.5687 vn 0.1972 0.3676 0.9088 vn 0.6546 0.6566 0.3746 vn 0.6467 0.7022 0.2979 vn 0.2797 0.0926 -0.9556 vn -0.1356 0.1625 0.9773 vn -0.2293 -0.0855 0.9696 vn -0.2571 0.2519 0.9330 vn -0.2987 0.2834 0.9113 vn -0.2157 0.4714 0.8551 vn 0.3450 0.4818 0.8055 vn 0.0198 0.5738 0.8187 vn 0.0164 0.9913 0.1305 vn 0.0043 -0.2025 0.9793 vn 0.0766 -0.7412 -0.6669 vn -0.1135 -0.1437 0.9831 vn 0.1439 0.2525 0.9568 vn 0.1341 0.2529 0.9581 vn -0.2449 -0.9292 -0.2768 vn 0.2096 0.7227 0.6586 vn -0.0692 0.6617 0.7466 vn -0.4299 0.8108 0.3973 vn -0.3401 0.9025 0.2643 vn 0.3651 -0.8916 -0.2678 vn -0.1981 -0.2965 0.9343 vn 0.0005 -0.3297 0.9441 vn -0.0135 -0.0558 0.9984 vn 0.0142 0.3437 0.9390 vn 0.2504 0.3609 0.8983 vn 0.3240 -0.4169 0.8492 vn 0.1972 0.8912 0.4085 vn 0.0090 0.2904 0.9569 vn 0.2534 0.4960 0.8306 vn -0.2055 0.1476 0.9675 vn 0.1535 0.0945 0.9836 vn 0.2436 0.4628 0.8523 vn 0.2056 -0.4472 -0.8705 vn 0.3030 0.6395 0.7065 vn -0.1865 -0.0603 0.9806 vn -0.2681 0.9603 0.0769 vn -0.4209 -0.5335 -0.7337 vn -0.0213 -0.0305 0.9993 vn 0.1003 -0.2202 0.9703 vn 0.0576 -0.3687 0.9278 vn 0.0327 0.3502 0.9361 vn -0.0669 -0.2202 0.9732 vn 0.0545 0.5690 0.8205 vn 0.0380 0.4980 0.8663 vn 0.0185 0.5680 0.8228 vn -0.2599 -0.2886 0.9215 vn -0.2605 0.5672 0.7813 vn 0.6700 -0.6863 0.2831 vn -0.1458 -0.7932 0.5912 vn 0.3722 -0.0841 0.9243 vn -0.1993 0.7590 0.6198 vn -0.2677 0.6408 0.7196 vn -0.9028 -0.3868 0.1880 vn -0.9589 -0.2790 -0.0523 vn -0.9994 -0.0293 0.0163 vn 0.0601 0.9830 -0.1736 vn 0.1355 -0.4885 0.8620 vn 0.1321 -0.4609 0.8776 vn 0.1537 -0.3447 0.9260 vn 0.2794 -0.0138 0.9601 vn -0.2879 0.2993 0.9097 vn -0.2814 0.2949 0.9132 vn -0.0526 0.6419 0.7650 vn 0.1978 0.6677 0.7176 vn 0.2712 -0.5808 0.7675 vn 0.2326 0.4410 0.8668 vn -0.2789 -0.6506 0.7063 vn 0.4330 -0.3726 0.8208 vn 0.2723 0.2799 0.9206 vn 0.2197 0.4408 0.8703 vn 0.8085 0.4277 0.4041 vn -0.5177 0.4454 0.7305 vn -0.5580 0.1496 0.8162 vn 0.4287 -0.8876 -0.1685 vn 0.2446 -0.0560 0.9680 vn 0.2869 -0.0205 0.9577 vn 0.1988 0.2970 0.9340 vn 0.3907 -0.1197 0.9127 vn 0.2796 0.3322 0.9008 vn 0.2564 0.4808 0.8385 vn 0.3995 0.5862 0.7048 vn 0.0495 0.1350 -0.9896 vn -0.0541 0.1960 -0.9791 vn -0.0322 -0.9442 0.3278 vn 0.2270 0.3416 0.9120 vn 0.2086 0.2262 0.9515 vn 0.2664 0.4803 0.8357 vn 0.3537 -0.7143 0.6039 vn -0.0279 0.1971 0.9800 vn -0.1660 0.5949 0.7865 vn 0.9095 -0.1731 -0.3778 vn -0.1454 -0.5698 -0.8088 vn 0.0878 0.6515 0.7536 vn 0.1228 0.6812 0.7217 vn -0.1409 0.9893 0.0377 vn -0.5254 -0.1371 0.8397 vn 0.4418 -0.2112 0.8719 vn 0.4414 -0.1926 0.8764 vn 0.1721 -0.3575 0.9179 vn 0.2928 -0.0297 0.9557 vn 0.4112 0.2364 0.8804 vn -0.2386 0.2389 0.9413 vn -0.2645 0.3002 0.9165 vn 0.6153 0.5077 -0.6030 vn -0.1736 -0.6820 -0.7104 vn -0.0124 -0.8516 -0.5240 vn -0.0968 -0.7006 0.7069 vn 0.1558 0.4261 0.8912 vn 0.2445 0.6430 0.7258 vn 0.3086 0.2288 0.9233 vn -0.0748 0.6346 0.7692 vn -0.1641 0.4393 0.8832 vn -0.0210 0.9876 0.1557 vn -0.3611 -0.1792 0.9151 vn 0.3852 0.3409 0.8576 vn -0.0648 0.4260 0.9024 vn 0.0416 0.5982 0.8002 vn 0.0059 0.6438 0.7652 vn -0.1020 0.7004 0.7064 vn 0.1635 0.7038 0.6913 vn 0.1039 -0.2813 0.9540 vn 0.2544 0.0326 0.9666 vn 0.1503 0.4673 0.8712 vn -0.2330 -0.3162 0.9196 vn 0.8718 0.3265 -0.3650 vn 0.1306 -0.9675 -0.2167 vn -0.3962 0.2469 0.8843 vn 0.6757 0.6214 0.3966 vn -0.7985 0.4352 -0.4159 vn -0.2757 -0.4020 0.8732 vn -0.2099 -0.1061 0.9719 vn -0.1980 0.0389 0.9794 vn 0.4131 -0.2066 0.8870 vn 0.4992 -0.2985 0.8134 vn 0.4099 -0.2445 0.8787 vn 0.3880 -0.0001 0.9217 vn 0.4975 0.2129 0.8409 vn -0.0077 0.2024 0.9793 vn 0.0010 0.1826 0.9832 vn -0.0368 0.6715 0.7401 vn -0.0090 0.6108 0.7917 vn -0.1309 0.7534 0.6444 vn 0.6007 -0.7967 -0.0670 vn 0.5378 -0.5650 0.6258 vn 0.0708 0.4689 0.8804 vn -0.8718 -0.4881 0.0419 vn 0.2014 0.4392 0.8755 vn -0.3447 -0.1001 0.9334 vn -0.0375 -0.2020 0.9787 vn -0.2818 -0.0121 0.9594 vn -0.2577 0.1788 0.9495 vn 0.2444 0.1045 0.9640 vn 0.1642 0.2495 0.9544 vn -0.1684 0.7642 0.6227 vn 0.9459 -0.1937 -0.2605 vn 0.9959 0.0732 -0.0537 vn -0.2722 0.6844 0.6764 vn 0.0342 0.3608 0.9320 vn 0.0705 0.4355 0.8974 vn -0.7589 0.4691 0.4517 vn 0.8458 -0.1942 0.4968 vn 0.3007 0.5434 0.7837 vn 0.0026 0.2028 0.9792 vn -0.4584 -0.1792 0.8705 vn -0.4816 -0.1234 0.8677 vn -0.4248 -0.0650 0.9030 vn 0.3208 -0.2675 0.9086 vn 0.4962 0.0688 0.8655 vn 0.2515 0.1691 0.9530 vn 0.2646 0.0050 0.9643 vn 0.1603 -0.0582 0.9854 vn 0.2731 0.0529 0.9605 vn 0.3512 0.2280 0.9081 vn -0.1122 0.6330 0.7660 vn 0.7880 -0.1927 -0.5848 vn 0.8601 0.3875 -0.3319 vn -0.0300 0.2228 0.9744 vn -0.0537 0.6357 0.7701 vn -0.1001 0.4212 0.9014 vn -0.0912 0.1317 0.9871 vn -0.0474 -0.1680 0.9847 vn -0.1645 0.2261 0.9601 vn -0.2641 -0.0386 0.9637 vn -0.0180 -0.0105 0.9998 vn 0.3665 0.2062 0.9073 vn 0.2675 0.5389 0.7987 vn 0.1930 0.2069 0.9591 vn 0.8980 0.2290 -0.3756 vn -0.2417 -0.3703 0.8969 vn -0.0928 0.4225 0.9016 vn 0.1010 0.2962 0.9498 vn 0.3686 0.4924 0.7884 vn 0.1050 0.3694 0.9233 vn -0.8673 0.4181 0.2702 vn 0.3503 -0.2604 0.8997 vn 0.1225 0.8058 0.5793 vn -0.9027 0.0246 -0.4295 vn -0.0589 0.4155 0.9077 vn -0.0646 -0.1742 0.9826 vn -0.0730 -0.2308 0.9703 vn -0.1847 -0.0673 0.9805 vn -0.0074 0.1715 0.9852 vn -0.0367 -0.0897 0.9953 vn 0.1452 -0.1689 0.9749 vn 0.1298 -0.2182 0.9672 vn -0.5218 -0.1781 0.8343 vn -0.3724 0.0667 0.9257 vn -0.3519 0.0752 0.9330 vn 0.0776 0.0702 0.9945 vn -0.1822 0.0621 0.9813 vn 0.4426 0.3233 0.8364 vn 0.6204 -0.1614 -0.7675 vn -0.7094 -0.7025 -0.0576 vn 0.8866 0.2497 -0.3894 vn -0.0161 -0.1891 0.9818 vn -0.0187 -0.1691 0.9854 vn 0.2134 -0.1796 0.9603 vn 0.1591 0.0331 0.9867 vn 0.2514 0.5011 0.8280 vn 0.0566 0.4219 0.9049 vn -0.1001 0.6712 0.7345 vn 0.2830 0.0312 0.9586 vn 0.3416 0.4024 0.8493 vn 0.2265 -0.2029 0.9526 vn -0.0300 -0.0866 0.9958 vn -0.3410 0.1024 0.9345 vn -0.3218 0.0721 0.9441 vn -0.4080 -0.0116 0.9129 vn -0.3908 0.2006 0.8983 vn -0.0944 0.1541 0.9835 vn -0.2024 0.2993 0.9324 vn 0.0489 0.5193 0.8532 vn 0.1429 0.4337 0.8896 vn 0.2401 -0.5602 0.7928 vn 0.4644 0.2315 0.8548 vn 0.1236 0.4286 0.8950 vn 0.1370 0.0439 0.9896 vn 0.0842 -0.0671 0.9942 vn 0.2352 -0.1864 0.9539 vn -0.0647 -0.2716 0.9602 vn -0.0780 -0.2399 0.9677 vn -0.0176 -0.1044 0.9944 vn -0.3009 0.3094 0.9021 vn -0.2836 0.2564 0.9240 vn 0.0047 0.4639 0.8859 vn 0.2317 0.6050 0.7617 vn 0.2204 0.6316 0.7433 vn -0.0377 0.6566 0.7533 vn 0.8577 -0.4964 -0.1339 vn 0.1260 0.4260 0.8959 vn 0.0170 0.3726 0.9279 vn -0.1093 0.6179 0.7786 vn 0.3988 0.1377 0.9066 vn 0.1789 0.4877 0.8545 vn 0.9944 -0.0746 0.0751 vn -0.2500 0.9665 -0.0585 vn 0.2263 0.1383 0.9642 vn 0.2878 -0.3419 0.8946 vn -0.0142 0.0394 0.9991 vn 0.1201 -0.3331 0.9352 vn 0.0517 -0.1133 0.9922 vn 0.3864 0.1459 0.9107 vn -0.2499 -0.0745 0.9654 vn -0.2054 0.5129 0.8335 vn -0.0128 0.4700 0.8826 vn 0.0093 0.5434 0.8394 vn 0.2452 0.0412 0.9686 vn 0.1157 0.0143 0.9932 vn 0.2148 0.5859 0.7814 vn 0.0230 0.9752 -0.2201 vn 0.3690 -0.1279 0.9206 vn 0.2877 -0.3406 0.8951 vn 0.1986 -0.1082 0.9741 vn 0.3518 0.0013 0.9361 vn 0.2609 -0.0449 0.9643 vn -0.1328 -0.5230 0.8419 vn -0.0763 0.4298 0.8997 vn -0.0039 0.5566 0.8308 vn 0.7661 -0.2534 0.5907 vn -0.8120 0.2936 -0.5044 vn 0.4548 -0.2419 0.8571 vn 0.4696 -0.0716 0.8800 vn -0.1314 0.0380 0.9906 vn -0.3317 0.3168 0.8886 vn -0.2493 0.2423 0.9376 vn -0.2073 0.3317 0.9203 vn -0.0851 0.6044 0.7922 vn 0.0415 -0.6132 0.7888 vn 0.1987 -0.8806 -0.4302 vn 0.1593 0.1821 0.9703 vn 0.6214 0.1210 0.7740 vn 0.9140 0.1554 0.3749 vn 0.3965 -0.9090 -0.1284 vn 0.2756 0.1421 0.9507 vn 0.5115 -0.1999 0.8357 vn 0.5378 -0.0492 0.8417 vn 0.3193 -0.2661 0.9095 vn 0.1967 -0.0658 0.9782 vn -0.2875 -0.4101 0.8655 vn -0.2793 0.4256 0.8607 vn -0.3583 0.4743 0.8042 vn -0.1249 0.6047 0.7866 vn -0.1251 0.6039 0.7872 vn 0.5105 -0.8373 -0.1959 vn 0.0274 0.8867 0.4615 vn -0.2290 0.7861 0.5741 vn 0.1453 -0.2049 0.9679 vn 0.0170 0.7942 0.6074 vn -0.9887 -0.1077 -0.1044 vn 0.4519 -0.2130 0.8662 vn 0.4946 -0.1168 0.8612 vn 0.3687 -0.0328 0.9290 vn 0.3710 -0.1783 0.9114 vn 0.1870 0.0302 0.9819 vn 0.3013 -0.1515 0.9414 vn 0.3113 -0.0635 0.9482 vn -0.2061 -0.5713 0.7945 vn -0.2274 -0.4133 0.8817 vn -0.0100 0.0048 0.9999 vn -0.2554 0.4742 0.8425 vn -0.2675 0.4793 0.8359 vn -0.1327 0.5630 0.8157 vn 0.9957 0.0488 -0.0783 vn 0.6409 -0.6596 -0.3926 vn 0.7326 -0.5692 -0.3732 vn 0.0228 -0.2720 0.9620 vn 0.0086 -0.5787 0.8155 vn 0.2718 -0.2029 0.9407 vn -0.2634 0.7210 0.6409 vn 0.4828 0.3048 0.8210 vn -0.1625 0.6709 0.7235 vn 0.9562 -0.0427 0.2897 vn -0.8937 -0.3280 -0.3061 vn -0.3646 0.8243 0.4331 vn 0.3481 -0.1066 0.9314 vn 0.3713 -0.2802 0.8852 vn 0.3917 -0.1040 0.9142 vn 0.1912 -0.0559 0.9800 vn 0.1526 -0.1183 0.9812 vn 0.0952 -0.0638 0.9934 vn 0.9698 0.2310 0.0785 vn -0.0637 0.5288 0.8464 vn -0.5792 0.6222 -0.5268 vn 0.3817 0.2708 0.8837 vn -0.0636 0.7667 0.6388 vn 0.8413 -0.4970 -0.2125 vn -0.0859 0.0414 0.9954 vn -0.2958 0.8690 0.3966 vn -0.2436 0.9057 0.3470 vn 0.3165 -0.1709 0.9331 vn 0.1867 -0.1997 0.9619 vn 0.1585 -0.1326 0.9784 vn -0.4602 -0.2029 0.8643 vn -0.5227 -0.2689 0.8090 vn 0.0545 -0.1796 0.9822 vn 0.0974 -0.0628 0.9933 vn -0.1266 -0.0503 0.9907 vn -0.1214 0.2118 0.9697 vn -0.0807 0.4773 0.8750 vn -0.0898 0.5169 0.8513 vn -0.1217 0.4982 0.8585 vn -0.1156 0.5973 0.7937 vn -0.1887 0.1817 0.9651 vn 0.3131 -0.3871 0.8673 vn -0.0920 0.4752 0.8750 vn -0.0096 0.0550 0.9984 vn -0.1985 0.6927 0.6934 vn -0.7237 -0.6816 -0.1087 vn 0.3116 -0.1600 0.9366 vn 0.3154 -0.2072 0.9261 vn 0.1799 -0.2444 0.9528 vn 0.1596 -0.1969 0.9674 vn -0.4177 -0.2617 0.8701 vn -0.7110 -0.1040 0.6954 vn -0.8965 -0.1566 0.4145 vn 0.1675 -0.2103 -0.9632 vn -0.8677 0.0077 0.4971 vn -0.5826 0.0892 0.8079 vn 0.1333 0.4396 0.8883 vn 0.1590 0.3469 0.9243 vn -0.2059 0.7378 0.6429 vn -0.3738 -0.1253 -0.9190 vn -0.7289 -0.1799 0.6606 vn 0.3571 -0.2134 0.9094 vn 0.0818 0.3046 0.9490 vn -0.1816 0.4367 0.8811 vn -0.9999 -0.0040 0.0113 vn -0.2682 0.9433 0.1954 vn -0.0689 0.8937 0.4434 vn 0.8098 0.4614 0.3625 vn 0.3277 -0.8706 -0.3669 vn -0.1085 -0.3141 0.9432 vn -0.0989 -0.0965 0.9904 vn -0.1327 0.5917 0.7952 vn -0.0477 0.6880 0.7242 vn -0.0461 0.6770 0.7345 vn -0.4724 0.6955 -0.5414 vn -0.4905 0.6997 -0.5194 vn -0.3842 -0.4187 -0.8228 vn 0.0350 -0.1090 0.9934 vn 0.0825 0.4897 0.8680 vn 0.6066 -0.7937 -0.0465 vn 0.0162 0.6880 0.7255 vn 0.8244 0.5031 0.2593 vn 0.6163 -0.7453 -0.2543 vn -0.1028 -0.0521 0.9933 vn -0.3357 -0.2317 0.9130 vn -0.3409 -0.2620 0.9028 vn -0.4367 -0.2792 0.8552 vn -0.4219 -0.2679 0.8662 vn -0.4385 -0.2758 0.8553 vn -0.7620 0.5781 0.2917 vn 0.8925 -0.4378 -0.1086 vn 0.0357 0.8297 0.5571 vn -0.4721 0.0808 0.8778 vn -0.3548 0.2824 0.8913 vn -0.2135 0.7291 -0.6503 vn 0.2030 0.8461 0.4929 vn 0.4874 -0.1658 0.8573 vn -0.3874 -0.8999 -0.2001 vn 0.9758 -0.2119 -0.0546 vn -0.1155 0.4684 0.8759 vn 0.1329 0.1759 0.9754 vn -0.1728 0.9756 0.1357 vn -0.3749 0.7128 0.5928 vn -0.3554 0.8164 0.4551 vn -0.6898 -0.2278 0.6873 vn 0.1552 0.9798 0.1264 vn -0.6211 0.6411 -0.4507 vn 0.3410 0.9335 0.1111 vn 0.6655 0.7237 0.1823 vn -0.0204 -0.8306 -0.5566 vn 0.3683 0.3838 0.8468 vn 0.3677 0.3969 0.8410 vn -0.2298 0.3922 0.8907 vn -0.2431 0.5073 0.8268 vn 0.0864 -0.7400 -0.6671 vn -0.0187 0.5316 -0.8468 vn 0.1429 -0.1010 0.9846 vn -0.0480 -0.4741 0.8791 vn 0.0118 0.2916 0.9565 vn 0.2041 0.2676 0.9417 vn -0.5827 0.6796 -0.4457 vn -0.4947 0.5402 0.6808 vn -0.2648 0.3687 0.8910 vn -0.2619 0.4255 0.8662 vn 0.7302 0.0734 -0.6793 vn 0.4496 0.8172 0.3607 vn -0.0231 0.7442 0.6675 vn -0.0936 0.7269 0.6804 vn -0.9184 0.2514 -0.3055 vn 0.5720 0.7688 0.2858 vn -0.3537 -0.1538 0.9226 vn -0.3157 -0.0647 0.9467 vn -0.2793 0.4823 0.8303 vn -0.4192 0.6371 0.6468 vn -0.2607 0.5464 0.7959 vn -0.2862 0.5787 0.7637 vn 0.6793 0.0346 0.7330 vn -0.1339 -0.1946 0.9717 vn 0.0759 0.4142 0.9070 vn -0.3297 0.6812 0.6536 vn -0.1125 0.9069 0.4060 vn -0.0724 0.9447 0.3198 vn -0.0825 0.9425 0.3239 vn -0.3831 0.8516 0.3577 vn -0.2077 0.7677 0.6062 vn 0.3394 0.4910 0.8024 vn 0.0841 0.9695 0.2302 vn -0.1945 0.9798 -0.0471 vn 0.1602 0.9744 0.1579 vn 0.6269 0.6104 0.4842 vn 0.2987 0.4360 0.8489 vn -0.1851 0.3840 0.9046 vn -0.4963 0.5453 0.6755 vn 0.8838 0.3351 -0.3265 vn 0.8835 0.3247 -0.3377 vn -0.1327 -0.5409 0.8306 vn 0.1959 -0.1628 0.9670 vn 0.2408 0.5547 0.7964 vn 0.9499 0.1711 -0.2614 vn -0.0457 0.8886 0.4565 vn -0.9645 -0.2616 -0.0355 vn -0.8727 -0.4619 -0.1584 vn -0.3203 0.8408 0.4365 vn 0.8166 0.3736 0.4399 vn -0.0668 0.1919 0.9791 vn -0.5399 0.6007 0.5897 vn -0.4474 0.5875 0.6743 vn 0.4135 -0.0503 0.9091 vn 0.1003 0.4728 -0.8754 vn 0.1395 0.4355 0.8893 vn 0.0930 0.2058 0.9742 vn 0.2029 -0.0235 0.9789 vn -0.0147 0.6540 0.7563 vn 0.0719 0.8844 0.4611 vn 0.0102 0.9446 0.3282 vn -0.6861 0.4526 0.5696 vn -0.2648 0.6474 -0.7147 vn -0.0973 -0.5655 -0.8190 vn -0.9693 0.0785 -0.2328 vn -0.2361 -0.4408 -0.8660 vn -0.2274 0.4787 0.8480 vn -0.3335 0.7086 0.6218 vn 0.2527 0.3781 0.8906 vn 0.2828 0.2126 0.9353 vn -0.3297 0.8296 0.4507 vn 0.1055 0.7515 0.6513 vn 0.0885 0.8795 0.4676 vn -0.4163 0.7285 0.5440 vn -0.5826 0.1983 0.7882 vn -0.8616 0.5059 0.0404 vn -0.7831 0.5254 -0.3327 vn 0.4719 0.6010 0.6451 vn 0.0381 0.2004 0.9790 vn -0.1414 0.4324 0.8905 vn -0.3256 0.6174 0.7161 vn -0.0301 -0.9953 -0.0922 vn -0.0917 0.5894 0.8026 vn 0.0268 0.4872 0.8729 vn 0.9085 -0.4167 0.0306 vn 0.1137 0.4154 0.9025 vn 0.1146 0.3518 0.9290 vn 0.1580 0.7531 0.6387 vn 0.2678 0.9597 -0.0854 vn -0.0601 0.9977 -0.0300 vn -0.9112 0.3337 -0.2414 vn 0.3026 0.9528 -0.0251 vn 0.1782 0.9059 0.3843 vn -0.2769 0.9404 -0.1974 vn 0.3590 0.8848 0.2971 vn 0.1723 0.3040 0.9370 vn 0.2093 0.1908 0.9591 vn -0.1154 0.4272 0.8968 vn -0.2073 0.5488 0.8098 vn -0.3417 0.7104 0.6152 vn 0.4480 0.5070 0.7364 vn 0.9259 0.1576 -0.3433 vn 0.0460 0.8712 0.4888 vn -0.3879 0.7235 0.5711 vn -0.2741 0.0739 0.9589 vn -0.6839 -0.3630 0.6328 vn -0.5719 0.2123 0.7924 vn -0.7422 -0.1948 0.6412 vn 0.7812 0.6076 0.1434 vn -0.3918 0.1945 0.8993 vn -0.3286 0.8669 0.3749 vn -0.3253 0.6178 0.7159 vn 0.9466 -0.0347 -0.3206 vn 0.0508 -0.0371 0.9980 vn 0.2175 0.4443 0.8691 vn -0.5982 -0.3529 0.7194 vn -0.1240 0.9906 0.0578 vn -0.9508 0.1251 -0.2835 vn -0.2347 -0.3114 0.9209 vn -0.3488 -0.2687 0.8979 vn 0.4197 0.8904 -0.1760 vn 0.4159 0.9051 -0.0886 vn -0.0782 0.1598 0.9840 vn -0.0843 0.2975 0.9510 vn -0.2314 0.4020 0.8859 vn -0.1630 0.5902 0.7906 vn 0.9336 0.1949 -0.3006 vn 0.9320 -0.3621 0.0167 vn -0.2622 -0.4229 -0.8674 vn -0.3109 0.8434 0.4382 vn 0.2588 -0.2477 0.9336 vn 0.0711 0.2069 0.9758 vn 0.2859 0.6759 0.6793 vn 0.2507 0.7972 0.5492 vn -0.2053 0.1140 0.9720 vn -0.5860 -0.3861 0.7124 vn -0.3146 0.9455 0.0844 vn 0.2866 0.9367 -0.2011 vn -0.2611 -0.4321 0.8632 vn -0.0467 -0.0030 0.9989 vn -0.1562 0.4199 0.8940 vn 0.2009 -0.8893 -0.4108 vn 0.2425 0.4242 0.8725 vn 0.0778 0.2951 0.9523 vn -0.1866 0.5503 0.8138 vn -0.0245 -0.9064 -0.4216 vn 0.2471 0.6553 0.7139 vn 0.0956 0.1267 0.9873 vn 0.2423 -0.0438 0.9692 vn 0.0565 -0.2400 0.9691 vn -0.1264 -0.2259 0.9659 vn -0.3178 -0.9088 -0.2703 vn -0.2390 0.5765 0.7814 vn -0.4187 -0.5406 0.7297 vn 0.3476 -0.2993 -0.8886 vn -0.1904 -0.1561 0.9692 vn -0.2667 -0.2508 0.9306 vn 0.2163 -0.2731 0.9374 vn -0.2897 0.2544 0.9227 vn -0.3305 0.3930 0.8581 vn -0.1448 0.5072 0.8496 vn -0.1600 0.5852 0.7950 vn 0.9314 0.3514 -0.0948 vn -0.0953 0.4365 0.8947 vn -0.0169 0.1914 0.9814 vn 0.1469 -0.8512 -0.5039 vn -0.2752 0.4465 0.8514 vn 0.3799 -0.9213 0.0824 vn 0.3196 0.6321 0.7059 vn 0.0471 0.6431 0.7643 vn -0.1706 -0.0171 0.9852 vn -0.1443 -0.2141 0.9661 vn -0.3224 -0.4268 0.8449 vn -0.3123 -0.2543 0.9153 vn -0.1703 -0.1705 0.9705 vn -0.2863 -0.2533 0.9240 vn 0.2300 0.0234 0.9729 vn 0.3124 0.0916 0.9455 vn -0.2625 0.2472 0.9327 vn -0.8865 0.0703 -0.4573 vn 0.3360 -0.9090 -0.2465 vn -0.4113 0.1610 0.8972 vn -0.3979 0.4661 0.7902 vn 0.9280 -0.1572 -0.3379 vn -0.1034 0.1579 0.9820 vn 0.1907 0.3990 0.8969 vn -0.2753 -0.5604 0.7811 vn 0.0856 0.9564 0.2794 vn 0.8066 -0.5472 -0.2238 vn -0.6888 0.6489 0.3233 vn 0.5075 -0.4892 -0.7093 vn -0.1937 -0.0684 0.9787 vn 0.1525 0.4191 0.8950 vn 0.2021 0.5092 0.8366 vn -0.4188 0.4947 0.7615 vn -0.2886 0.7307 0.6187 vn 0.6555 -0.7314 -0.1879 vn 0.1881 0.2058 0.9604 vn 0.3487 0.5008 0.7922 vn 0.2106 0.5804 0.7867 vn 0.2069 0.6106 0.7644 vn -0.4511 -0.5698 0.6869 vn -0.0332 0.0905 0.9953 vn -0.5716 -0.3189 0.7560 vn -0.0285 -0.3039 0.9523 vn 0.8278 0.3634 0.4274 vn 0.2486 -0.3614 0.8986 vn -0.0904 -0.0459 0.9949 vn 0.3078 -0.1556 0.9386 vn 0.2820 -0.1426 0.9488 vn -0.2860 -0.5339 0.7957 vn -0.2245 -0.3286 0.9174 vn -0.1672 -0.0152 0.9858 vn -0.1202 0.0632 0.9907 vn -0.0880 0.2851 0.9544 vn 0.9622 0.2286 -0.1477 vn 0.2812 0.2866 0.9159 vn 0.2007 0.5125 0.8349 vn 0.3748 0.4167 0.8282 vn -0.4078 -0.2085 0.8889 vn -0.5010 -0.2151 0.8383 vn -0.5194 0.1516 -0.8410 vn -0.4478 -0.2576 0.8562 vn -0.3079 -0.1080 0.9453 vn -0.2557 0.0311 0.9663 vn -0.0850 0.4511 0.8884 vn 0.1907 -0.8440 -0.5014 vn 0.3618 0.9317 0.0311 vn -0.2030 0.3455 0.9162 vn -0.1891 0.5155 0.8357 vn 0.9091 -0.1399 -0.3924 vn -0.0581 0.5478 0.8346 vn -0.0074 0.5868 0.8097 vn -0.1740 -0.6162 0.7681 vn -0.3225 -0.3162 0.8922 vn 0.2444 0.1874 0.9514 vn 0.2060 0.0603 0.9767 vn -0.3080 0.7119 0.6312 vn 0.9699 0.0964 0.2238 vn 0.6652 -0.7224 -0.1888 vn -0.2316 0.4711 0.8512 vn -0.2308 0.4674 0.8534 vn -0.1207 0.5947 0.7948 vn -0.1827 0.7007 0.6897 vn -0.2418 0.7393 0.6285 vn 0.6614 -0.7085 -0.2460 vn 0.3298 -0.4108 0.8500 vn -0.1342 -0.5546 0.8212 vn -0.2371 -0.2782 0.9308 vn -0.3007 -0.0546 0.9522 vn -0.4018 -0.2732 0.8740 vn -0.3180 0.0622 0.9461 vn -0.0821 -0.2878 0.9542 vn -0.0854 -0.2666 0.9600 vn -0.1409 0.0677 0.9877 vn -0.0495 0.1463 0.9880 vn -0.1102 0.2748 0.9552 vn -0.1639 0.7873 0.5944 vn -0.0702 0.1749 0.9821 vn -0.0094 0.1448 0.9894 vn 0.9072 -0.4125 -0.0828 vn 0.6372 -0.4511 -0.6249 vn 0.2810 0.5583 0.7806 vn 0.0513 0.0210 0.9985 vn -0.0166 -0.7462 0.6655 vn -0.2498 -0.2900 0.9239 vn -0.2219 -0.4001 0.8892 vn 0.0734 0.9682 0.2390 vn -0.2143 0.0882 0.9728 vn -0.2208 0.1024 0.9699 vn 0.9065 -0.1272 -0.4026 vn -0.3335 0.8651 0.3746 vn -0.3252 0.1290 0.9368 vn 0.8720 0.2531 -0.4191 vn 0.1450 0.4264 0.8928 vn 0.1953 0.0143 0.9806 vn 0.0492 0.5871 0.8080 vn 0.1509 0.3874 0.9095 vn 0.3267 0.4532 0.8294 vn -0.3560 -0.5993 0.7170 vn -0.3941 -0.3337 0.8563 vn -0.4207 -0.0178 0.9070 vn 0.1053 -0.1476 0.9834 vn 0.0137 0.4635 0.8860 vn -0.0933 0.6981 0.7099 vn -0.5754 0.3896 -0.7191 vn -0.6102 0.7776 -0.1517 vn 0.0452 0.5651 0.8237 vn -0.1801 -0.4979 0.8484 vn 0.1089 -0.1474 0.9831 vn -0.0329 0.5104 0.8593 vn 0.8780 -0.4643 -0.1161 vn 0.0607 0.3579 0.9318 vn -0.0651 -0.0858 0.9942 vn -0.0982 0.3043 0.9475 vn -0.0465 0.4545 0.8895 vn 0.0899 0.3229 0.9421 vn -0.1331 0.5933 0.7939 vn -0.0885 0.6930 0.7155 vn -0.8752 -0.4768 -0.0825 vn 0.1955 0.3832 0.9028 vn -0.1967 -0.7008 0.6857 vn 0.1951 -0.0377 0.9801 vn -0.1213 -0.7696 0.6269 vn -0.0680 -0.5923 0.8028 vn -0.0504 -0.1815 0.9821 vn -0.2444 0.1026 0.9642 vn -0.3058 0.0418 0.9512 vn -0.3004 0.1421 0.9432 vn 0.2581 0.1865 0.9480 vn 0.3161 0.1274 0.9401 vn -0.0231 0.3429 0.9391 vn -0.8146 -0.5681 -0.1170 vn 0.0272 0.4716 0.8814 vn -0.0398 0.8613 0.5066 vn -0.3789 -0.2462 0.8921 vn -0.0006 -0.3950 0.9187 vn -0.1213 -0.0967 0.9879 vn -0.0494 0.1948 0.9796 vn 0.3493 -0.1275 0.9283 vn 0.1673 0.2146 0.9623 vn 0.3286 -0.1572 0.9313 vn 0.2379 0.7645 0.5991 vn 0.4973 -0.3061 0.8118 vn 0.3156 0.1506 0.9369 vn 0.4995 -0.2181 0.8384 vn 0.4155 -0.6177 0.6677 vn 0.4112 0.0399 0.9107 vn 0.4425 0.5323 0.7217 vn 0.7955 -0.3400 0.5016 vn 0.9753 0.0999 -0.1969 vn -0.7933 -0.5696 0.2149 vn 0.3076 -0.0359 0.9508 vn 0.4173 -0.5953 0.6867 vn -0.2245 -0.5079 -0.8316 vn 0.6506 -0.5474 0.5263 vn 0.8870 -0.2213 0.4053 vn 0.9750 0.0301 -0.2202 vn 0.7371 -0.3973 0.5467 vn 0.7463 -0.2907 0.5988 vn 0.7962 -0.1774 0.5785 vn 0.0182 -0.9994 -0.0307 vn -0.3519 0.7435 0.5686 vn 0.3769 0.1108 0.9196 vn -0.4518 -0.6167 -0.6447 vn -0.4448 -0.3809 -0.8106 vn 0.5756 -0.0232 0.8174 vn 0.5660 -0.5749 0.5909 vn 0.4372 -0.4292 0.7904 vn 0.2373 -0.5050 0.8298 vn -0.3096 0.4117 -0.8571 vn 0.4793 -0.4909 0.7276 vn 0.2697 -0.1979 0.9424 vn 0.9242 0.2243 -0.3091 vn 0.9863 -0.0489 -0.1573 vn 0.8319 -0.5278 -0.1711 vn 0.6792 -0.1766 -0.7124 vn 0.5512 -0.3935 0.7358 vn 0.4671 0.1274 0.8750 vn 0.2716 -0.0654 0.9602 vn 0.4563 0.5522 -0.6978 vn -0.2682 0.5709 -0.7760 vn 0.4834 0.2837 0.8281 vn 0.8734 -0.4770 -0.0985 vn 0.9392 -0.3433 0.0015 vn 0.3123 -0.7210 0.6185 vn 0.1719 0.0300 0.9847 vn 0.4081 0.6170 0.6729 vn 0.4284 0.3099 0.8488 vn 0.4481 0.2968 0.8433 vn 0.5529 -0.1634 0.8170 vn 0.7562 -0.5802 -0.3025 vn 0.8448 -0.5249 -0.1038 vn 0.4825 -0.0612 0.8737 vn 0.5454 -0.3487 0.7622 vn 0.5524 0.3460 0.7584 vn 0.5763 0.4350 0.6918 vn 0.6098 0.4081 0.6794 vn 0.7040 0.2048 0.6801 vn 0.1027 -0.9268 -0.3613 vn 0.1719 0.2917 0.9409 vn 0.3047 -0.0177 0.9523 vn -0.0607 -0.7485 -0.6604 vn -0.2163 -0.4938 0.8422 vn 0.5040 0.1699 0.8468 vn 0.5353 -0.1089 0.8376 vn 0.6543 -0.1557 0.7401 vn 0.5666 0.0815 0.8199 vn 0.6098 0.1866 0.7703 vn 0.5380 0.3217 0.7791 vn 0.5484 0.0932 0.8310 vn 0.4536 0.3481 0.8204 vn 0.5951 -0.0586 0.8015 vn 0.6360 -0.5597 0.5313 vn 0.6467 -0.5452 0.5334 vn 0.6529 0.4235 0.6280 vn 0.5255 0.3640 0.7690 vn -0.1913 0.3899 -0.9008 vn 0.8743 0.1246 0.4691 vn 0.8053 -0.0828 0.5870 vn 0.8146 0.0348 0.5790 vn 0.8603 -0.1418 0.4897 vn 0.2542 0.6668 0.7005 vn 0.5400 0.6286 0.5597 vn 0.5597 -0.7326 0.3873 vn 0.6939 0.1962 0.6928 vn 0.5274 0.3647 0.7674 vn 0.9014 0.3962 -0.1750 vn 0.9138 0.0650 0.4009 vn 0.7251 0.4051 0.5569 vn 0.8674 0.0224 0.4971 vn 0.7762 0.3172 0.5449 vn 0.8358 0.1688 0.5225 vn -0.1502 0.9363 -0.3174 vn 0.8671 0.0827 0.4913 vn -0.1459 0.2459 -0.9582 vn 0.7841 -0.4533 0.4240 vn 0.8616 -0.1485 0.4853 vn 0.8920 -0.0670 0.4471 vn 0.8735 0.0989 0.4767 vn 0.8126 0.1946 0.5494 vn 0.7696 0.1163 0.6279 vn 0.6339 0.3248 0.7019 vn 0.3053 -0.4072 0.8608 vn 0.8427 0.4466 0.3005 vn 0.5937 0.4744 0.6500 vn -0.1753 0.2069 -0.9625 vn 0.6688 -0.6857 0.2873 vn 0.8149 -0.4748 0.3324 vn 0.7438 0.4560 0.4887 vn 0.8483 0.1519 0.5073 vn 0.6224 0.3205 0.7140 vn 0.2956 0.6482 0.7018 vn 0.3599 0.3385 0.8694 vn 0.3497 -0.9140 -0.2058 vn 0.6647 0.3661 0.6513 vn 0.5236 0.4083 0.7477 vn 0.5403 -0.2454 0.8049 vn 0.7933 0.3443 0.5022 vn 0.8585 0.0871 0.5053 vn 0.7440 -0.4728 0.4721 vn 0.5201 -0.7978 0.3049 vn 0.8237 -0.4635 0.3266 vn 0.7653 0.4371 0.4726 vn 0.8672 0.1987 0.4566 vn 0.8297 0.0515 0.5558 vn 0.7922 0.2247 0.5674 vn 0.2341 0.6580 0.7157 vn 0.5559 -0.3727 0.7430 vn 0.6924 -0.1517 0.7054 vn 0.8164 0.0055 0.5774 vn 0.5378 0.3903 0.7473 vn 0.5745 0.3924 0.7183 vn 0.8380 0.0903 -0.5381 vn 0.8375 0.0636 0.5427 vn 0.1822 0.1227 0.9756 vn 0.2885 -0.5952 0.7500 vn 0.9282 -0.1525 0.3394 vn 0.8486 0.0467 0.5270 vn 0.7872 0.3551 0.5042 vn 0.7164 0.4142 0.5615 vn 0.8759 0.0425 0.4806 vn 0.9348 -0.3059 -0.1803 vn -0.9883 0.0195 -0.1512 vn -0.2900 -0.5991 0.7463 vn 0.7371 0.2267 0.6366 vn 0.4535 0.4967 0.7401 vn 0.5575 0.4389 0.7047 vn 0.8613 -0.3070 -0.4049 vn 0.8695 0.0768 -0.4879 vn 0.8181 -0.2468 0.5194 vn 0.8482 0.0473 0.5275 vn 0.8974 0.0705 0.4355 vn 0.6620 0.2337 0.7121 vn 0.0817 0.8385 0.5388 vn 0.3868 -0.4152 0.8234 vn 0.5761 -0.7937 0.1955 vn 0.5540 0.1432 0.8201 vn 0.4524 -0.7281 -0.5150 vn 0.5887 -0.4125 0.6952 vn 0.4814 -0.7011 0.5260 vn 0.6886 -0.5291 0.4959 vn 0.7591 -0.2204 0.6125 vn 0.7246 0.2977 0.6216 vn 0.5581 0.4453 0.7001 vn 0.6053 0.4299 0.6699 vn 0.8772 -0.0016 0.4801 vn 0.8962 -0.0942 0.4335 vn 0.7021 0.0040 0.7120 vn -0.4709 -0.4961 -0.7295 vn 0.5728 -0.7712 -0.2778 vn 0.7757 -0.6083 0.1682 vn 0.0777 -0.0962 0.9923 vn 0.6694 -0.5981 0.4407 vn 0.6911 -0.5305 0.4908 vn 0.6063 0.4368 0.6645 vn 0.5076 -0.1852 0.8415 vn 0.5272 -0.4956 0.6903 vn 0.5140 -0.0009 0.8578 vn -0.9732 0.0570 -0.2228 vn 0.7464 0.3492 0.5665 vn 0.8205 -0.2691 0.5043 vn 0.3522 0.5424 0.7627 vn 0.8219 0.0448 0.5679 vn 0.5055 -0.5085 0.6971 vn 0.4193 -0.3625 0.8323 vn 0.4555 0.0261 0.8899 vn 0.4950 0.2555 0.8305 vn 0.3626 0.4155 0.8342 vn 0.4147 0.0020 0.9099 vn -0.0843 0.1224 -0.9889 vn -0.4400 0.0989 -0.8925 vn -0.1770 -0.9842 0.0058 vn 0.3849 0.4968 0.7779 vn -0.2658 -0.6052 -0.7504 vn 0.6705 0.4058 0.6212 vn 0.7929 0.0593 0.6065 vn 0.5403 0.0545 0.8397 vn 0.4179 0.4278 0.8015 vn 0.4457 0.5613 0.6973 vn 0.2552 -0.6350 0.7291 vn 0.5113 -0.2335 0.8271 vn 0.5189 0.4634 0.7183 vn 0.5831 -0.2983 0.7556 vn 0.6049 -0.2105 0.7679 vn 0.4994 -0.0595 0.8643 vn 0.1504 -0.1681 0.9742 vn 0.9949 0.0848 0.0550 vn 0.2137 -0.1235 0.9691 vn 0.7959 -0.2797 0.5369 vn 0.9060 -0.3575 -0.2265 vn 0.3103 0.6179 0.7224 vn -0.8991 -0.4331 0.0642 vn 0.3726 0.4623 0.8046 vn 0.4026 0.4361 0.8048 vn 0.3695 0.5704 0.7335 vn 0.7512 -0.1940 0.6309 vn 0.6603 -0.3958 0.6382 vn 0.6993 0.0515 0.7130 vn 0.3403 0.1572 0.9271 vn 0.3768 -0.9019 -0.2110 vn 0.2168 0.8089 0.5465 vn 0.6756 0.3978 0.6208 vn 0.4070 -0.3592 0.8399 vn 0.4748 -0.4877 0.7326 vn 0.3978 -0.5011 0.7685 vn 0.5145 0.3839 0.7667 vn 0.3181 0.3312 0.8883 vn 0.2848 0.3538 0.8909 vn 0.3662 0.2383 0.8995 vn -0.1706 0.9853 0.0079 vn 0.6912 -0.1243 0.7119 vn 0.4390 -0.1339 0.8884 vn 0.7249 0.3730 -0.5792 vn 0.5168 -0.2654 0.8139 vn 0.5490 0.1973 0.8122 vn 0.9249 0.3747 0.0647 vn 0.6267 0.2885 0.7239 vn 0.5978 0.3790 0.7064 vn 0.4929 0.3856 0.7800 vn 0.4329 0.0688 0.8988 vn 0.8200 -0.3647 0.4411 vn 0.9050 -0.1267 0.4062 vn 0.9105 -0.1358 0.3906 vn 0.8757 -0.0012 0.4828 vn 0.8330 -0.1375 0.5359 vn 0.5782 0.5333 0.6175 vn 0.5711 0.4570 0.6820 vn 0.7808 -0.1687 -0.6016 vn 0.7956 -0.1775 0.5793 vn 0.6949 0.4223 0.5821 vn 0.5512 -0.7737 0.3124 vn 0.6130 -0.2572 0.7470 vn 0.5119 -0.2314 0.8273 vn 0.6082 0.3607 0.7071 vn 0.6772 -0.2020 0.7075 vn 0.3962 0.5874 0.7057 vn 0.8951 -0.0118 -0.4458 vn 0.2674 0.2383 0.9336 vn 0.0640 0.4264 -0.9023 vn 0.7509 -0.0247 0.6600 vn 0.6038 0.3571 0.7127 vn 0.1146 -0.7495 -0.6520 vn 0.5299 -0.4069 0.7441 vn 0.7688 -0.2921 0.5689 vn 0.5030 -0.0615 0.8621 vn 0.6167 -0.3630 0.6985 vn 0.1821 0.7959 0.5774 vn 0.6273 -0.2922 0.7218 vn 0.6942 0.2526 0.6740 vn 0.6197 0.1901 0.7614 vn 0.5699 -0.0409 0.8207 vn -0.0448 -0.9986 -0.0270 vn 0.3020 -0.1273 0.9448 vn 0.7946 -0.5450 -0.2676 vn 0.6010 -0.0104 0.7992 vn 0.3908 -0.1310 0.9111 vn 0.6178 -0.5014 0.6057 vn 0.6634 0.1666 0.7295 vn 0.5737 0.4714 0.6698 vn 0.6950 -0.6947 0.1853 vn 0.5746 0.1469 0.8051 vn -0.8852 0.4594 -0.0734 vn 0.1336 -0.3190 0.9383 vn 0.6984 -0.3878 0.6015 vn 0.7207 0.1376 0.6795 vn 0.6690 0.2118 0.7124 vn 0.6195 0.3799 0.6869 vn 0.5750 0.5176 0.6336 vn 0.6575 0.2715 0.7028 vn 0.6479 -0.2221 0.7286 vn 0.7287 0.2655 0.6313 vn 0.3577 0.4764 0.8032 vn 0.5348 -0.2387 0.8106 vn 0.3113 0.3426 0.8864 vn 0.3514 0.1323 0.9268 vn 0.3866 0.1986 0.9006 vn -0.1092 -0.5798 -0.8074 vn 0.4647 0.1742 0.8682 vn 0.6194 -0.3198 0.7170 vn 0.6350 0.4272 0.6437 vn 0.7692 0.1975 0.6077 vn 0.8861 -0.1116 0.4498 vn 0.7749 0.0834 0.6266 vn 0.9627 0.2236 -0.1526 vn 0.1313 0.5035 0.8539 vn 0.2270 0.2534 0.9403 vn 0.3776 -0.3387 0.8618 vn 0.7165 0.3907 0.5780 vn 0.9938 -0.0816 0.0761 vn 0.3221 -0.1401 0.9363 vn 0.4938 -0.0035 0.8696 vn 0.7458 -0.1053 0.6577 vn 0.8437 -0.0532 0.5342 vn 0.2730 -0.0429 0.9611 vn 0.6986 -0.4500 0.5563 vn 0.5212 -0.6052 0.6017 vn 0.8497 -0.5222 -0.0729 vn 0.5628 -0.0903 0.8217 vn 0.4442 0.1558 0.8823 vn 0.4203 0.4260 0.8012 vn 0.2796 0.4359 0.8554 vn 0.0268 -0.6710 -0.7410 vn 0.3806 0.5245 0.7616 vn -0.1879 -0.7766 -0.6013 vn 0.5382 -0.7030 0.4649 vn 0.3051 0.4973 0.8122 vn 0.4970 0.2602 0.8278 vn 0.5395 0.3302 0.7745 vn 0.9438 0.0762 0.3215 vn 0.2093 -0.7220 -0.6595 vn 0.3060 0.2522 0.9180 vn -0.1185 -0.5455 -0.8297 vn 0.4631 -0.8834 0.0719 vn 0.6113 0.0834 0.7870 vn 0.2104 -0.3654 0.9068 vn 0.6793 0.0346 0.7331 vn 0.5424 0.0694 0.8372 vn -0.3724 0.5367 0.7572 vn 0.4801 -0.0404 0.8763 vn 0.3108 0.1662 0.9358 vn 0.4709 0.1809 0.8634 vn 0.7126 -0.0514 0.6997 vn 0.7913 0.1216 0.5992 vn 0.6293 0.4274 0.6490 vn 0.7551 -0.3090 0.5782 vn 0.3857 0.8847 0.2619 vn 0.3230 0.9223 0.2121 vn 0.2564 -0.4582 0.8510 vn 0.0938 -0.6338 -0.7678 vn 0.0380 0.3665 0.9296 vn 0.6788 -0.0971 0.7278 vn 0.9164 0.0587 0.3960 vn 0.6531 -0.1173 0.7481 vn 0.5633 -0.2171 0.7972 vn 0.6581 -0.1588 0.7360 vn 0.7728 0.2418 0.5867 vn 0.3966 0.4867 0.7784 vn 0.6372 0.0534 0.7688 vn 0.5593 0.4158 0.7172 vn 0.4750 0.7075 0.5232 vn 0.4916 0.2466 0.8352 vn 0.6742 -0.3078 0.6714 vn 0.6325 -0.2416 0.7360 vn 0.7926 0.1018 0.6012 vn 0.7241 0.5345 0.4359 vn 0.8268 0.2082 0.5225 vn 0.8083 0.1630 0.5657 vn 0.7393 0.0723 0.6695 vn 0.0146 0.6744 0.7382 vn 0.8844 0.1888 0.4268 vn 0.7670 0.3431 0.5422 vn 0.6437 -0.4347 0.6299 vn 0.4505 0.1601 0.8783 vn 0.2893 0.5541 0.7806 vn 0.4437 0.5400 0.7152 vn 0.4123 0.4893 0.7685 vn 0.7839 -0.3358 0.5223 vn 0.2748 0.4720 0.8377 vn 0.7674 0.1101 0.6317 vn 0.8040 0.2580 0.5357 vn 0.5311 -0.4706 0.7045 vn 0.3105 0.6180 0.7223 vn 0.6840 -0.0782 0.7253 vn 0.6018 -0.6678 0.4380 vn 0.4972 0.2910 0.8174 vn 0.6133 -0.3221 0.7212 vn 0.5355 -0.5399 0.6494 vn 0.7909 -0.6002 -0.1190 vn 0.6747 -0.1704 0.7181 vn 0.5529 0.2497 0.7949 vn 0.8874 -0.0615 0.4568 vn 0.4849 0.1638 0.8591 vn 0.8593 0.0111 0.5113 vn 0.5916 -0.3806 0.7108 vn 0.6815 0.1620 0.7137 vn 0.4578 -0.0146 0.8889 vn 0.7714 -0.2843 0.5693 vn 0.4622 -0.2150 0.8603 vn 0.3997 -0.5324 0.7462 vn 0.9214 0.1154 0.3711 vn 0.8147 -0.1211 0.5671 vn 0.9196 0.1306 0.3706 vn 0.8115 0.2327 0.5360 vn 0.5670 -0.5027 0.6525 vn 0.3721 -0.0396 0.9273 vn 0.8497 0.5240 0.0581 vn 0.8828 -0.0828 0.4625 vn -0.9712 -0.2375 0.0203 vn -0.0795 0.4884 -0.8690 vn 0.3217 0.6117 0.7227 vn 0.1152 -0.3701 0.9218 vn 0.6109 -0.0468 0.7904 vn 0.8913 -0.0115 0.4532 vn 0.8089 0.4398 0.3902 vn -0.0808 0.0395 0.9960 vn 0.3011 0.3216 0.8977 vn 0.7533 -0.1267 0.6454 vn 0.6298 0.1452 0.7631 vn 0.5980 0.3310 0.7300 vn 0.3860 0.6172 0.6856 vn 0.6503 0.0272 -0.7592 vn 0.8890 -0.3858 -0.2465 vn 0.7255 0.3630 0.5846 vn 0.1230 0.2799 0.9521 vn 0.2939 0.3262 0.8984 vn 0.2394 0.7067 0.6658 vn 0.5771 -0.0888 0.8119 vn 0.4575 -0.8892 0.0115 vn -0.2280 -0.3874 -0.8933 vn -0.7338 0.2083 -0.6466 vn 0.8240 -0.1786 0.5377 vn 0.1586 -0.5881 -0.7931 vn 0.4166 -0.3179 0.8517 vn 0.0642 0.2789 0.9582 vn 0.5777 -0.4020 0.7104 vn 0.4806 0.5811 0.6567 vn 0.8990 0.1859 0.3966 vn 0.8274 0.4294 0.3620 vn 0.6565 0.4000 0.6395 vn 0.7919 -0.0748 0.6060 vn 0.5919 -0.5205 0.6154 vn 0.0959 -0.0420 0.9945 vn 0.3513 0.0100 0.9362 vn 0.1613 -0.8085 -0.5660 vn 0.6902 -0.4316 0.5808 vn 0.6172 0.3316 0.7135 vn 0.6188 -0.6837 -0.3869 vn 0.8064 0.0639 0.5880 vn 0.5021 -0.1932 0.8429 vn 0.5332 0.1880 0.8249 vn 0.4855 0.1269 0.8650 vn 0.9102 -0.0887 0.4045 vn -0.3813 0.2283 -0.8958 vn 0.3559 -0.1060 0.9285 vn 0.3452 0.2880 0.8932 vn 0.3504 0.2932 0.8895 vn 0.4616 -0.6617 0.5908 vn 0.1453 0.8843 0.4438 vn 0.3837 0.5933 0.7076 vn 0.7613 0.5887 0.2718 vn 0.1246 -0.5788 -0.8059 vn 0.6171 -0.5022 0.6058 vn 0.8409 -0.2582 0.4756 vn 0.8206 -0.0675 0.5675 vn 0.8622 -0.0019 0.5065 vn 0.7227 -0.2344 0.6502 vn 0.6559 -0.0940 0.7489 vn 0.5241 0.4177 0.7422 vn 0.4643 -0.0837 0.8817 vn 0.7302 0.5522 -0.4022 vn 0.3265 0.6282 0.7063 vn 0.8198 -0.3042 0.4852 vn 0.6338 -0.2886 0.7176 vn 0.1924 -0.2809 0.9402 vn 0.2147 -0.0452 0.9756 vn 0.4263 0.3485 0.8347 vn 0.7139 0.3843 0.5854 vn 0.7947 -0.0773 0.6020 vn -0.0792 -0.7596 -0.6455 vn 0.8410 -0.2570 0.4760 vn -0.5179 0.7437 -0.4228 vn 0.9014 0.1934 0.3874 vn 0.9042 0.2426 0.3515 vn 0.9604 0.2175 -0.1742 vn 0.3370 0.2495 0.9079 vn 0.3722 -0.9263 -0.0584 vn 0.6965 -0.3372 0.6334 vn -0.6849 0.6567 0.3158 vn -0.5394 -0.7917 0.2868 vn 0.8692 0.3513 0.3481 vn 0.6552 -0.0682 0.7523 vn 0.4554 -0.0816 0.8865 vn 0.7722 0.1116 0.6255 vn -0.2813 0.2396 -0.9292 vn 0.3128 0.2884 0.9050 vn 0.2545 -0.0936 0.9625 vn 0.4670 0.4862 0.7386 vn 0.3825 0.0623 0.9219 vn 0.7958 -0.4785 -0.3711 vn 0.9968 0.0636 0.0487 vn 0.4697 0.1336 0.8727 vn 0.6791 -0.7268 -0.1026 vn 0.8051 0.5521 -0.2170 vn 0.5786 -0.0636 0.8131 vn 0.5762 -0.0232 0.8170 vn 0.4166 -0.8756 0.2444 vn 0.7813 -0.3365 0.5258 vn 0.7494 -0.2136 0.6267 vn 0.4696 -0.6512 0.5962 vn 0.9450 -0.0351 0.3251 vn 0.5179 -0.2089 0.8295 vn 0.5798 -0.4646 0.6693 vn -0.2259 -0.4715 -0.8524 vn 0.2371 0.6511 0.7210 vn 0.6351 -0.7423 0.2137 vn 0.9339 0.0410 0.3551 vn 0.9420 -0.0976 0.3210 vn -0.6604 -0.7232 -0.2022 vn 0.6230 -0.0598 0.7800 vn 0.8604 -0.5083 0.0362 vn 0.3897 -0.5961 0.7020 vn 0.7028 0.3681 0.6087 vn 0.5513 -0.3912 0.7369 vn 0.5593 0.7473 -0.3589 vn 0.3756 0.5630 0.7362 vn -0.8362 -0.3402 -0.4302 vn 0.7213 -0.6856 -0.0985 vn 0.2258 0.8470 0.4812 vn 0.2090 0.7545 0.6221 vn 0.4063 -0.0991 0.9084 vn 0.8211 -0.2241 0.5250 vn 0.5928 -0.5074 0.6254 vn 0.6498 0.5489 0.5258 vn 0.6070 0.0408 0.7936 vn 0.5181 -0.2636 0.8137 vn 0.6686 -0.7262 -0.1596 vn 0.6052 -0.0366 0.7952 vn 0.2127 -0.3308 -0.9194 vn 0.2781 0.3183 0.9063 vn 0.6754 -0.0428 0.7362 vn 0.6155 -0.3857 0.6873 vn 0.5922 -0.2180 0.7758 vn 0.8682 0.2466 0.4307 vn 0.8697 0.2700 0.4132 vn -0.5487 0.7811 0.2980 vn 0.2713 0.3802 0.8842 vn 0.3592 -0.9300 -0.0779 vn 0.0290 0.1260 -0.9916 vn 0.1627 -0.9538 -0.2524 vn 0.9828 0.1762 0.0553 vn -0.4837 0.8360 0.2590 vn -0.2166 -0.2788 -0.9356 vn 0.7524 0.1351 0.6447 vn 0.5000 0.5952 0.6290 vn 0.5457 0.1940 0.8152 vn 0.7121 0.2248 0.6651 vn 0.9989 0.0266 -0.0398 vn 0.2373 0.0382 0.9707 vn 0.8055 0.3394 0.4858 vn 0.1971 -0.0753 0.9775 vn 0.8548 -0.4988 -0.1430 vn 0.8920 -0.4281 -0.1454 vn 0.3120 0.0044 0.9501 vn 0.3787 0.5031 0.7768 vn 0.8586 0.4960 0.1296 vn 0.4741 -0.3327 0.8152 vn 0.3784 0.2098 0.9015 vn 0.6270 0.0279 0.7785 vn 0.7249 -0.1111 0.6799 vn 0.3549 -0.0560 0.9332 vn 0.5051 0.0701 0.8602 vn 0.8959 -0.3344 -0.2924 vn 0.4023 0.3855 0.8304 vn 0.9972 -0.0458 -0.0598 vn 0.8985 0.0490 -0.4362 vn 0.3112 -0.0179 0.9502 vn 0.8019 -0.3313 0.4972 vn 0.1257 0.9253 0.3579 vn 0.9351 -0.0517 0.3507 vn 0.7524 -0.4631 0.4685 vn -0.7891 -0.5890 0.1745 vn -0.0586 0.8161 0.5749 vn 0.9402 0.3270 0.0950 vn 0.6676 -0.5829 0.4632 vn 0.5958 -0.0032 0.8031 vn 0.1656 0.1240 0.9784 vn 0.6242 -0.7258 0.2889 vn -0.0861 -0.4290 -0.8992 vn 0.8211 0.3325 0.4640 vn 0.9160 0.2042 -0.3452 vn 0.7627 0.0047 0.6467 vn 0.7214 -0.5139 0.4642 vn 0.4553 -0.5724 0.6820 vn 0.2416 -0.3550 0.9031 vn 0.7582 0.3827 0.5280 vn 0.3143 -0.0458 0.9482 vn 0.6788 0.5847 -0.4443 vn 0.5003 -0.6606 -0.5597 vn 0.5951 0.1547 0.7886 vn 0.0847 -0.7767 -0.6241 vn 0.9621 0.1548 0.2243 vn 0.7941 -0.1866 0.5784 vn 0.7069 0.2607 0.6575 vn 0.6816 -0.0977 0.7252 vn 0.4838 -0.0141 0.8751 vn 0.8850 0.0037 0.4656 vn 0.7310 -0.2566 0.6323 vn 0.6880 0.0775 0.7216 vn 0.4839 -0.6847 -0.5450 vn 0.3203 -0.3856 0.8653 vn 0.4148 -0.3379 0.8449 vn 0.6377 -0.4531 0.6229 vn 0.8730 -0.1931 0.4478 vn 0.5416 0.0149 0.8405 vn 0.1997 0.8511 -0.4856 vn 0.7974 0.0002 0.6034 vn 0.5682 -0.3992 0.7196 vn 0.2978 0.3207 0.8991 vn 0.2064 0.3648 0.9079 vn 0.9783 0.2072 -0.0096 vn 0.4140 0.2320 0.8802 vn 0.7185 -0.3714 0.5881 vn 0.3081 -0.0823 0.9478 vn 0.3320 0.2705 0.9037 vn 0.6261 0.4332 -0.6484 vn 0.5652 0.0389 0.8241 vn 0.1841 0.2142 0.9593 vn 0.6975 -0.2201 0.6819 vn 0.7771 0.4018 0.4845 vn 0.5218 0.2060 0.8278 vn 0.3826 0.1647 0.9091 vn 0.8348 -0.0397 0.5491 vn 0.2119 0.3918 0.8953 vn 0.3237 -0.0330 0.9456 vn 0.7373 0.0483 0.6738 vn 0.7773 -0.3484 0.5238 vn 0.7380 -0.3812 0.5568 vn 0.2580 -0.0656 0.9639 vn 0.6720 0.1117 -0.7321 vn 0.3336 -0.1720 0.9269 vn 0.4256 -0.0546 0.9033 vn 0.5535 0.0730 0.8297 vn 0.7517 -0.0261 0.6590 vn 0.4720 -0.3806 0.7952 vn 0.1195 0.8958 0.4280 vn 0.2484 -0.0896 0.9645 vn 0.3592 0.0310 0.9327 vn 0.8274 -0.1035 0.5520 vn 0.4965 0.3998 0.7705 vn 0.7389 0.0558 0.6716 vn 0.8816 0.1335 0.4526 vn 0.6556 0.2863 0.6987 vn 0.7391 -0.3954 0.5454 vn 0.6293 0.3538 0.6920 vn 0.1328 0.8898 0.4366 vn 0.3773 0.1834 0.9077 vn 0.9793 0.1192 0.1635 vn 0.5930 -0.1548 0.7902 vn 0.5293 -0.2007 0.8244 vn 0.2824 0.3030 0.9102 vn 0.2850 0.6269 0.7251 vn 0.4346 -0.4528 0.7785 vn 0.7843 -0.3709 0.4974 vn -0.6632 0.2747 -0.6962 vn 0.8366 -0.0832 0.5415 vn 0.7174 -0.5804 0.3852 vn 0.4114 -0.1443 0.9000 vn -0.9855 0.1085 -0.1304 vn 0.5235 -0.0291 0.8516 vn -0.2388 0.2462 -0.9393 vn 0.6015 0.4101 0.6856 vn 0.3072 0.5817 0.7532 vn 0.3312 0.2794 0.9013 vn 0.5557 0.7052 0.4404 vn 0.7316 0.3746 0.5697 vn 0.2906 -0.3387 0.8949 vn 0.7928 0.2963 0.5326 vn 0.3793 -0.2366 0.8945 vn 0.9949 0.0850 0.0543 vn -0.1587 0.7497 -0.6424 vn 0.6314 -0.4041 0.6618 vn 0.4060 -0.1835 0.8952 vn 0.2207 -0.1159 0.9684 vn 0.7715 -0.6361 -0.0143 vn 0.6168 -0.5532 0.5599 vn 0.6222 -0.2986 0.7236 vn 0.7257 -0.0421 0.6867 vn 0.3598 0.2041 0.9104 vn 0.8681 0.0511 -0.4937 vn 0.4724 -0.2430 0.8473 vn 0.5796 0.3522 0.7349 vn 0.5815 -0.0119 0.8135 vn 0.7113 -0.1298 0.6908 vn 0.5136 -0.8006 0.3086 vn 0.6076 -0.2153 0.7645 vn 0.9343 -0.0556 0.3522 vn 0.8105 -0.3538 0.4668 vn 0.7642 -0.3515 -0.5407 vn 0.5491 -0.0842 0.8315 vn -0.0632 0.5085 0.8587 vn -0.0004 0.6773 0.7357 vn 0.4489 0.3409 0.8260 vn 0.8724 -0.0044 -0.4888 vn 0.3012 0.0048 0.9535 vn 0.5960 -0.1723 0.7843 vn 0.2820 0.1347 0.9499 vn 0.9929 0.0906 0.0768 vn 0.4550 -0.1166 0.8828 vn 0.4303 -0.0054 0.9026 vn 0.6988 0.1832 0.6914 vn 0.9671 0.2007 -0.1561 vn 0.5260 -0.4202 0.7394 vn 0.6282 -0.2416 0.7396 vn 0.5711 0.6787 0.4617 vn 0.6111 0.2889 0.7369 vn 0.8160 0.5176 -0.2572 vn 0.7717 0.3485 0.5320 vn 0.1640 0.4870 0.8579 vn 0.3906 -0.1434 0.9093 vn 0.2543 0.2328 0.9387 vn 0.2450 0.7506 0.6137 vn 0.7745 -0.1447 0.6158 vn 0.6994 0.1638 0.6957 vn 0.7611 -0.0151 0.6485 vn 0.7315 -0.3103 0.6072 vn 0.7024 -0.3810 0.6012 vn 0.5935 0.1209 0.7957 vn 0.7669 -0.2699 0.5823 vn -0.0164 0.4130 -0.9106 vn 0.7185 0.4070 0.5641 vn -0.4637 -0.0190 -0.8858 vn 0.3851 0.1282 0.9139 vn 0.3819 -0.7045 -0.5982 vn 0.9313 -0.0747 -0.3565 vn 0.5814 -0.3358 0.7411 vn 0.2041 0.7596 0.6176 vn 0.5539 0.2333 0.7992 vn 0.6372 -0.2639 0.7241 vn 0.9201 0.0554 -0.3878 vn -0.2560 -0.5729 -0.7786 vn 0.3404 -0.0029 0.9403 vn 0.7638 0.0362 0.6445 vn 0.8614 -0.0320 0.5070 vn 0.4407 0.6269 0.6424 vn 0.4486 -0.4967 0.7430 vn 0.5710 -0.6370 0.5180 vn 0.3904 0.2715 0.8797 vn 0.6828 -0.4088 0.6055 vn 0.5944 0.4746 0.6491 vn 0.8203 -0.1172 0.5598 vn 0.4196 0.4445 0.7914 vn 0.4711 0.2349 0.8502 vn 0.8436 0.1780 0.5066 vn -0.2428 0.6018 0.7608 vn 0.2778 0.0244 0.9603 vn 0.9062 -0.0309 0.4217 vn 0.5585 -0.0051 0.8295 vn 0.3589 0.4367 0.8249 vn 0.5684 0.1504 0.8089 vn 0.6109 0.1738 0.7724 vn 0.5541 0.0583 0.8304 vn 0.7690 -0.2868 0.5713 vn 0.6237 0.3910 0.6768 vn -0.7216 0.0808 -0.6876 vn 0.6284 -0.7540 -0.1912 vn 0.6567 0.2910 0.6958 vn 0.4535 0.2309 0.8608 vn 0.0025 0.8669 0.4985 vn 0.3854 0.3313 0.8612 vn 0.5632 0.0999 0.8203 vn -0.8963 0.1539 -0.4159 vn 0.7161 -0.1875 0.6723 vn 0.2747 0.0645 0.9594 vn -0.0498 0.7848 0.6178 vn 0.3329 0.4682 0.8185 vn 0.9474 0.2586 0.1886 vn 0.9729 0.1554 -0.1710 vn 0.6749 -0.4169 0.6089 vn -0.7333 -0.0668 -0.6766 vn 0.6577 0.4055 0.6348 vn 0.6280 -0.7379 0.2474 vn 0.5523 -0.3351 0.7633 vn 0.4757 -0.4398 0.7618 vn 0.8146 -0.2789 0.5086 vn 0.7389 -0.4482 0.5032 vn 0.9650 0.2202 -0.1422 vn 0.9400 -0.0701 0.3340 vn 0.7280 -0.2421 0.6414 vn 0.3197 -0.6737 0.6663 vn 0.6295 -0.1660 0.7591 vn 0.6015 0.1909 0.7757 vn 0.4672 -0.2163 0.8573 vn 0.3715 0.1823 0.9104 vn 0.8620 -0.4869 -0.1409 vn 0.6213 0.0594 0.7813 vn 0.6527 -0.4861 0.5812 vn 0.8767 0.1654 0.4516 vn 0.8441 0.3009 0.4439 vn 0.6589 -0.4519 0.6014 vn 0.2933 -0.2750 0.9156 vn 0.0928 0.8601 0.5017 vn 0.4166 0.4135 0.8096 vn 0.4299 0.3560 0.8297 vn 0.1976 -0.6375 0.7447 vn -0.0666 -0.6449 -0.7613 vn -0.2190 -0.9352 -0.2784 vn 0.1033 0.1655 0.9808 vn 0.5525 0.4918 0.6730 vn 0.0232 0.2243 0.9742 vn 0.7141 0.0539 0.6980 vn 0.5818 -0.5568 0.5929 vn 0.6595 -0.5156 0.5471 vn -0.0223 -0.9997 0.0073 vn -0.1518 0.7120 0.6856 vn -0.1328 0.7620 0.6338 vn 0.7596 -0.2359 0.6060 vn 0.7841 -0.3277 0.5271 vn -0.0111 -0.9997 0.0228 vn -0.4685 0.7697 0.4337 vn 0.2899 0.0296 0.9566 vn -0.7677 -0.6077 -0.2033 vn 0.1300 0.5790 0.8049 vn 0.5698 0.1786 0.8022 vn 0.2856 0.2304 0.9302 vn 0.1864 0.7955 0.5766 vn 0.9435 0.2915 -0.1579 vn 0.5140 0.0145 0.8577 vn 0.7117 -0.3975 0.5792 vn 0.9840 -0.0359 -0.1744 vn 0.6933 -0.3685 0.6193 vn 0.7255 -0.2223 0.6514 vn 0.3969 0.2667 0.8783 vn 0.3697 0.4738 0.7993 vn 0.5569 0.4127 0.7208 vn 0.7619 -0.1618 0.6272 vn -0.8548 -0.4889 -0.1741 vn 0.7627 0.6101 0.2146 vn -0.7330 -0.4026 -0.5482 vn 0.9051 0.4238 -0.0350 vn -0.0656 -0.4805 0.8745 vn 0.3284 -0.0580 0.9428 vn 0.6746 -0.1774 0.7166 vn 0.4937 -0.5236 0.6943 vn 0.5930 -0.1576 0.7896 vn 0.7558 -0.2850 0.5895 vn 0.5645 -0.0469 0.8241 vn 0.6218 0.0782 0.7793 vn 0.7661 -0.2309 0.5998 vn -0.3911 0.7526 0.5298 vn 0.3940 0.3886 0.8329 vn 0.4796 -0.4900 0.7279 vn 0.4170 -0.2563 0.8720 vn 0.3847 0.4456 0.8084 vn 0.7980 -0.3363 0.5001 vn 0.2343 0.6642 0.7099 vn 0.6019 0.0749 0.7951 vn 0.5890 -0.6170 -0.5218 vn 0.7211 -0.2630 0.6410 vn 0.3521 0.6021 0.7166 vn 0.6750 -0.1498 0.7225 vn 0.3955 0.4225 0.8155 vn 0.4771 -0.0708 0.8760 vn 0.7240 -0.1876 0.6638 vn 0.7580 0.0175 0.6520 vn 0.2876 0.6706 0.6838 vn -0.2720 0.5150 -0.8129 vn 0.4958 -0.3092 0.8115 vn 0.5535 0.3390 0.7607 vn 0.6616 0.0825 0.7453 vn 0.2840 0.0388 0.9580 vn -0.7529 -0.6170 0.2291 vn 0.5383 -0.5204 0.6629 vn 0.6978 0.3727 0.6117 vn 0.4901 0.3760 0.7864 vn 0.9237 0.3710 0.0962 vn -0.8693 -0.3920 0.3011 vn -0.7119 -0.5916 0.3784 vn -0.5592 0.8219 0.1082 vn -0.9019 0.4046 0.1514 vn 0.9828 -0.1839 -0.0141 vn 0.9927 -0.0162 -0.1193 vn 0.5189 -0.8508 0.0830 vn 0.8347 0.5423 -0.0962 vn -0.6269 -0.7467 -0.2223 vn -0.4332 0.8700 -0.2356 vn -0.9902 -0.1391 -0.0152 vn -0.5690 -0.8217 0.0321 vn -0.6233 0.7392 -0.2549 vn 0.3842 -0.8106 -0.4419 vn -0.7138 0.0286 0.6997 vn -0.9719 -0.2320 0.0412 vn 0.9369 -0.3215 -0.1375 vn -0.9190 0.3640 -0.1513 vn 0.9593 0.2821 0.0144 vn 0.6127 -0.6561 -0.4407 vn -0.8516 0.4177 0.3166 vn -0.6756 0.5835 -0.4507 vn -0.9913 0.0580 0.1184 vn -0.9359 0.3313 0.1198 vn -0.3200 0.9068 -0.2743 vn 0.4294 0.6863 -0.5870 vn 0.9421 -0.2986 -0.1525 vn 0.4332 -0.8010 -0.4132 vn 0.9805 -0.1506 -0.1259 vn -0.8614 0.4971 0.1043 vn 0.9780 0.1649 0.1279 vn 0.9799 -0.1822 -0.0816 vn 0.8957 -0.3606 -0.2603 vn 0.7198 -0.3260 -0.6129 vn -0.3164 0.9221 -0.2229 vn 0.8034 0.3751 0.4624 vn -0.9585 -0.0360 0.2827 vn -0.3876 0.8928 -0.2295 vn 0.7395 -0.1154 -0.6632 vn -0.9176 -0.2344 0.3210 vn -0.9736 0.1484 0.1735 vn 0.2788 -0.9553 0.0986 vn 0.8219 -0.4006 0.4050 vn -0.7984 0.5752 0.1779 vn 0.5044 0.1256 -0.8543 vn -0.6185 -0.4690 -0.6304 vn -0.8808 0.4162 0.2258 vn -0.7664 -0.0296 -0.6416 vn -0.7621 -0.0491 -0.6456 vn 0.8703 -0.4440 -0.2132 vn -0.9312 0.1461 0.3341 vn -0.9817 -0.1018 -0.1608 vn 0.6634 -0.0582 -0.7460 vn 0.9737 -0.2275 0.0090 vn 0.9208 0.2686 0.2830 vn 0.1851 -0.9759 0.1155 vn -0.1319 -0.5122 0.8487 vn -0.8740 -0.1298 -0.4683 vn -0.9940 0.0774 0.0770 vn -0.9004 0.0891 -0.4258 vn -0.7889 -0.4533 -0.4149 vn 0.6581 -0.3448 -0.6693 vn 0.9593 0.2742 0.0672 vn 0.9994 -0.0011 0.0336 vn 0.7386 -0.0419 -0.6729 vn -0.4976 0.8594 0.1171 vn 0.9087 0.4143 0.0518 vn 0.8594 -0.1046 -0.5004 vn 0.4540 -0.8630 -0.2217 vn 0.8375 0.5249 0.1515 vn -0.5462 0.8148 0.1944 vn 0.4049 -0.7169 -0.5675 vn 0.9996 -0.0094 0.0259 vn 0.9449 0.2940 0.1437 vn 0.9319 0.3286 0.1533 vn 0.9672 0.1363 0.2142 vn 0.8092 0.0074 -0.5875 vn 0.7505 -0.3418 -0.5656 vn -0.0050 -0.9997 0.0257 vn 0.7357 -0.1431 -0.6621 vn 0.9701 -0.2168 -0.1090 vn 0.9202 0.2543 0.2975 vn -0.3813 -0.0869 -0.9204 vn -0.8576 -0.5100 0.0661 vn -0.7450 0.2329 -0.6251 vn -0.9312 0.2142 -0.2949 vn 0.8974 0.0061 -0.4412 vn 0.7827 -0.5385 0.3122 vn -0.3061 0.6971 0.6483 vn 0.9624 -0.2440 -0.1191 vn 0.0107 -0.9997 -0.0212 vn 0.8236 0.0076 -0.5671 vn 0.7650 0.1290 -0.6310 vn -0.5412 0.8079 0.2331 vn 0.6981 -0.0610 -0.7134 vn 0.8176 -0.0052 -0.5758 vn 0.6329 -0.6262 -0.4553 vn 0.7679 0.1901 -0.6117 vn -0.8445 -0.5041 -0.1808 vn -0.9383 0.3369 -0.0783 vn 0.9984 -0.0106 0.0559 vn 0.1158 0.1028 -0.9879 vn 0.9811 -0.1537 -0.1177 vn 0.9908 -0.0301 -0.1318 vn -0.6642 0.3027 -0.6835 vn -0.3085 0.7007 -0.6433 vn -0.4035 -0.5934 -0.6965 vn 0.0372 -0.7235 -0.6893 vn -0.9457 -0.1953 -0.2600 vn -0.8875 0.2255 -0.4018 vn 0.9242 0.3538 -0.1434 vn -0.7861 0.6119 0.0879 vn -0.9437 0.3068 -0.1235 vn -0.0627 -0.4526 -0.8895 vn -0.6427 -0.4706 -0.6045 vn 0.8285 -0.1864 -0.5280 vn 0.6967 -0.2916 -0.6555 vn -0.5020 0.8574 -0.1137 vn 0.1107 0.6530 -0.7492 vn -0.3329 0.9193 0.2097 vn -0.7954 -0.5857 -0.1561 vn -0.9645 -0.2187 -0.1484 vn -0.1396 -0.3285 -0.9341 vn -0.9233 -0.0992 -0.3710 vn -0.8683 0.0189 -0.4956 vn -0.8262 -0.1115 -0.5522 vn -0.8625 0.4349 -0.2586 vn -0.0594 -0.3725 -0.9261 vn 0.9997 0.0011 0.0252 vn 0.6612 -0.7305 -0.1709 vn -0.2315 0.2151 -0.9488 vn -0.5634 0.8217 -0.0862 vn 0.0295 0.2387 -0.9706 vn -0.8794 0.4666 -0.0952 vn 0.1178 0.7389 -0.6634 vn 0.7325 0.1659 -0.6602 vn -0.8975 0.1449 -0.4165 vn -0.8917 0.3938 -0.2229 vn -0.6688 -0.6727 -0.3165 vn -0.8361 -0.4462 -0.3191 vn 0.8306 -0.2005 -0.5196 vn -0.8595 0.4948 -0.1278 vn -0.8704 -0.3863 0.3052 vn -0.1957 -0.3796 -0.9042 vn -0.6824 -0.6854 0.2543 vn -0.7043 -0.3168 -0.6353 vn 0.7007 0.6120 -0.3667 vn 0.6078 -0.7626 -0.2215 vn 0.0752 -0.8141 -0.5758 vn 0.9125 -0.0368 0.4074 vn 0.8921 -0.3702 -0.2591 vn 0.5224 -0.2605 -0.8119 vn 0.9894 0.0338 0.1415 vn -0.9170 -0.3459 0.1987 vn 0.7732 -0.3142 -0.5509 vn -0.7712 -0.3732 -0.5157 vn 0.8805 -0.3357 -0.3348 vn -0.9224 -0.3065 -0.2350 vn 0.5808 -0.2333 -0.7799 vn 0.7615 -0.1381 -0.6333 vn 0.8864 -0.3695 0.2788 vn 0.9421 -0.3327 0.0416 vn 0.8058 0.2824 0.5206 vn 0.8906 -0.4547 -0.0073 vn 0.7400 -0.1514 -0.6553 vn 0.7853 -0.5216 -0.3335 vn -0.8144 -0.5637 -0.1378 vn 0.5594 0.5663 0.6053 vn -0.9408 -0.3168 0.1203 vn 0.8143 -0.4573 -0.3574 vn -0.8493 0.5092 -0.1394 vn 0.4587 -0.8171 -0.3493 vn -0.9694 0.1067 0.2212 vn 0.9989 -0.0361 0.0294 vn -0.3540 0.8373 -0.4165 vn 0.9710 -0.2389 0.0016 vn 0.9672 -0.2295 -0.1090 vn -0.9358 0.1858 -0.2996 vn 0.6060 -0.7121 -0.3545 vn -0.9076 0.2539 -0.3343 vn 0.7617 -0.4397 -0.4759 vn 0.8548 -0.4757 -0.2075 vn 0.8405 -0.4975 -0.2147 vn 0.9186 0.2445 0.3103 vn -0.9433 -0.2167 0.2514 vn 0.6090 0.1695 -0.7749 vn 0.5770 -0.7519 0.3189 vn -0.5886 -0.6878 -0.4248 vn -0.8344 0.2474 -0.4925 vn -0.8051 -0.0456 -0.5914 vn 0.8857 -0.3117 -0.3440 vn -0.9676 0.2291 -0.1060 vn 0.8215 -0.2944 -0.4883 vn -0.9266 0.3109 -0.2117 vn -0.9665 -0.1515 0.2071 vn -0.8950 0.1807 0.4077 vn 0.9380 -0.3423 0.0554 vn 0.5251 0.2740 -0.8057 vn 0.6182 -0.5020 -0.6048 vn 0.7845 -0.5795 -0.2209 vn 0.6672 -0.7011 -0.2517 vn -0.7654 -0.5448 -0.3425 vn 0.7250 0.0647 -0.6857 vn 0.6486 -0.6096 -0.4557 vn -0.9225 0.0995 -0.3730 vn 0.7078 -0.5175 -0.4809 vn 0.7972 -0.5663 -0.2094 vn 0.7866 -0.5782 -0.2165 vn 0.7950 -0.5111 -0.3266 vn 0.4032 -0.9147 -0.0279 vn 0.9960 -0.0882 0.0113 vn 0.9106 0.3867 0.1461 vn 0.9900 0.1383 -0.0290 vn 0.6332 -0.7209 -0.2816 vn 0.4236 0.6474 -0.6336 vn 0.7805 -0.2057 -0.5904 vn 0.6881 -0.3861 -0.6144 vn 0.4437 0.3621 -0.8197 vn 0.7485 -0.5915 0.2997 vn 0.8456 -0.5016 -0.1827 vn 0.8631 -0.4798 -0.1574 vn -0.7908 0.5820 -0.1895 vn -0.3058 0.9500 0.0625 vn 0.5467 -0.8024 -0.2394 vn -0.7748 -0.6195 -0.1261 vn 0.9236 -0.3820 -0.0318 vn 0.7509 -0.6387 0.1680 vn 0.9676 0.2524 -0.0014 vn -0.2005 -0.7632 0.6142 vn 0.9052 -0.4089 -0.1161 vn 0.0997 -0.8607 -0.4992 vn 0.6102 0.4816 -0.6290 vn -0.7157 0.5354 -0.4484 vn -0.8290 -0.1901 -0.5259 vn 0.3231 0.3440 -0.8816 vn 0.9107 -0.3937 -0.1251 vn 0.8785 0.1109 -0.4648 vn 0.7026 -0.5160 -0.4900 vn 0.4855 -0.8070 0.3363 vn -0.5734 -0.4309 0.6968 vn 0.4253 -0.4518 -0.7842 vn -0.1562 -0.0403 -0.9869 vn 0.0360 -0.8971 -0.4404 vn -0.8855 -0.4106 -0.2176 vn 0.9904 -0.0412 0.1319 vn -0.0549 -0.9951 -0.0823 vn 0.9660 0.1770 -0.1884 vn 0.2659 0.3187 0.9098 vn -0.1934 0.6201 -0.7603 vn 0.9732 0.2013 0.1109 vn 0.2614 0.5744 0.7757 vn -0.7994 -0.5826 -0.1466 vn 0.8763 -0.2005 -0.4381 vn -0.6761 0.7210 -0.1520 vn 0.8874 -0.1638 -0.4310 vn 0.8010 0.1490 -0.5798 vn 0.8135 -0.1009 -0.5728 vn 0.8357 -0.1644 -0.5239 vn 0.6932 -0.6599 0.2898 vn 0.7121 0.1135 -0.6929 vn 0.9867 0.1379 0.0866 vn -0.9435 -0.3116 -0.1132 vn -0.5353 -0.8080 -0.2461 vn 0.9501 -0.2742 -0.1484 vn 0.9907 -0.1180 -0.0674 vn 0.9939 0.0056 0.1105 vn -0.8489 -0.5124 -0.1297 vn 0.8417 0.4795 0.2482 vn -0.9191 0.2360 -0.3156 vn 0.8852 -0.3123 -0.3449 vn -0.7767 0.5484 0.3099 vn 0.9944 -0.0639 -0.0836 vn 0.0937 -0.9041 -0.4168 vn 0.6664 -0.1627 -0.7276 vn 0.8252 -0.1842 -0.5340 vn 0.0293 -0.9979 0.0582 vn 0.4488 -0.8536 -0.2644 vn 0.1140 0.1424 -0.9832 vn 0.8011 0.0023 -0.5986 vn -0.2705 0.2439 -0.9313 vn 0.9946 0.0946 0.0423 vn 0.9990 0.0020 0.0447 vn 0.9501 0.2465 0.1912 vn 0.7341 -0.1466 -0.6631 vn 0.7768 -0.1572 -0.6098 vn 0.6839 -0.4959 0.5352 vn 0.5427 -0.2879 0.7891 vn -0.3681 -0.9075 0.2025 vn -0.2857 -0.8969 0.3376 vn 0.0139 -0.9992 0.0388 vn -0.1771 -0.9395 -0.2933 vn 0.8602 -0.0331 -0.5089 vn 0.8492 -0.5038 -0.1583 vn -0.9469 -0.1339 0.2923 vn 0.7755 -0.5866 -0.2334 vn 0.7983 -0.5487 -0.2484 vn 0.0667 -0.8336 -0.5483 vn 0.1804 -0.9385 -0.2944 vn 0.7828 -0.5761 -0.2351 vn 0.9773 0.1264 0.1700 vn 0.8915 -0.0364 -0.4515 vn -0.6873 0.4404 -0.5776 vn 0.9117 -0.1644 -0.3766 vn 0.0095 -0.9997 -0.0230 vn 0.6763 -0.5600 -0.4786 vn 0.7814 -0.1390 -0.6083 vn 0.8512 -0.5053 -0.1420 vn -0.5183 0.6375 -0.5700 vn -0.4472 0.8593 0.2482 vn -0.9107 -0.3372 -0.2384 vn -0.4860 0.8020 -0.3472 vn -0.6614 0.6592 -0.3577 vn 0.8025 -0.4265 -0.4172 vn 0.6223 -0.1005 -0.7763 vn -0.4481 -0.8125 -0.3728 vn -0.9166 0.3613 -0.1713 vn 0.6318 -0.7442 0.2166 vn 0.6687 -0.5990 -0.4404 vn -0.6868 -0.4113 -0.5992 vn 0.9091 -0.2343 -0.3445 vn -0.6072 0.4165 -0.6766 vn 0.5066 0.3424 -0.7913 vn 0.3908 -0.0658 -0.9181 vn 0.9592 -0.2812 -0.0287 vn -0.9594 0.1404 -0.2445 vn -0.6301 -0.7688 -0.1087 vn 0.5531 -0.4499 -0.7012 vn 0.6000 -0.6761 -0.4276 vn 0.8861 -0.0323 -0.4623 vn 0.8495 -0.2903 -0.4406 vn 0.8549 -0.4952 -0.1547 vn -0.9934 0.0261 -0.1115 vn -0.6959 0.7070 -0.1260 vn -0.7128 0.3254 -0.6213 vn 0.8736 -0.3431 -0.3451 vn -0.9835 0.0650 -0.1691 vn 0.6946 0.0345 -0.7186 vn 0.9996 -0.0275 0.0110 vn 0.9731 0.2020 0.1110 vn -0.9949 0.0959 0.0319 vn -0.8238 0.2640 -0.5016 vn 0.8154 0.1611 -0.5560 vn 0.7513 -0.3760 -0.5424 vn -0.8794 -0.2104 -0.4271 vn 0.5820 -0.4658 -0.6666 vn -0.5878 0.8016 0.1095 vn -0.2125 0.6426 -0.7361 vn 0.5129 -0.7466 -0.4238 vn 0.6061 -0.7619 -0.2282 vn 0.8090 -0.4781 -0.3419 vn 0.4143 -0.7400 -0.5298 vn 0.9733 0.2295 0.0064 vn 0.9377 0.0083 -0.3475 vn 0.8646 0.0029 -0.5024 vn 0.6776 -0.2733 -0.6828 vn 0.1920 -0.8336 -0.5179 vn 0.1035 -0.9805 0.1672 vn -0.9945 0.0390 -0.0972 vn -0.9329 -0.1792 -0.3124 vn -0.9638 -0.0277 -0.2651 vn 0.7882 -0.3730 0.4895 vn 0.5853 -0.6122 0.5316 vn 0.9343 0.1434 0.3263 vn 0.9981 -0.0602 0.0126 vn 0.6664 -0.4905 -0.5615 vn -0.9085 0.3383 0.2452 vn 0.5842 -0.1914 -0.7887 vn 0.7106 -0.5942 -0.3768 vn 0.5306 -0.4086 0.7426 vn -0.1513 0.9828 -0.1056 vn 0.2461 0.4109 0.8778 vn 0.8956 0.2604 0.3606 vn -0.1459 -0.3982 -0.9056 vn 0.5050 -0.8243 -0.2560 vn -0.9779 0.2088 -0.0101 vn 0.5982 0.0552 -0.7995 vn 0.9929 0.1039 0.0588 vn 0.4607 -0.7582 -0.4614 vn 0.5305 -0.5978 0.6010 vn -0.8839 -0.3739 0.2809 vn 0.0369 0.5831 -0.8116 vn -0.0583 0.3934 -0.9175 vn 0.6135 -0.1276 -0.7793 vn 0.1261 -0.7814 -0.6111 vn 0.7712 -0.5212 -0.3656 vn 0.5134 -0.8158 0.2661 vn 0.3660 0.3385 0.8669 vn 0.8588 0.3566 0.3679 vn -0.3233 -0.3482 -0.8799 vn 0.6379 -0.5249 0.5635 vn 0.6906 -0.5695 -0.4458 vn -0.0944 -0.7363 -0.6701 vn 0.9363 0.2208 0.2729 vn 0.9628 0.1548 0.2215 vn 0.9409 -0.0959 0.3249 vn 0.2200 0.5646 -0.7955 vn 0.8825 -0.3365 -0.3287 vn 0.8472 -0.1884 -0.4967 vn 0.7366 -0.1393 -0.6618 vn 0.8033 0.1065 -0.5859 vn 0.7477 -0.5078 -0.4279 vn 0.8880 -0.1656 -0.4290 vn 0.9254 0.1318 0.3554 vn 0.4272 -0.8956 -0.1239 vn 0.4717 -0.6516 0.5940 vn 0.6677 -0.7430 -0.0461 vn 0.1082 -0.7901 -0.6034 vn 0.5348 -0.7755 0.3355 vn 0.4960 -0.7270 -0.4749 vn 0.9494 0.1842 0.2544 vn 0.7590 -0.0996 -0.6434 vn 0.1230 -0.1352 -0.9832 vn 0.7215 -0.1998 -0.6629 vn 0.4986 -0.8613 -0.0972 vn 0.9428 0.2189 0.2516 vn 0.8866 0.3468 0.3061 vn 0.4153 0.8909 -0.1837 vn 0.9296 0.3250 0.1739 vn 0.0259 -0.7077 -0.7060 vn -0.1529 -0.9723 0.1766 vn 0.9473 -0.3139 -0.0645 vn 0.9794 0.1452 0.1404 vn 0.9461 -0.2022 -0.2530 vn -0.3782 0.7540 0.5370 vn 0.9926 -0.0718 0.0980 vn 0.1013 -0.6481 0.7548 vn 0.7650 -0.4437 -0.4668 vn 0.5656 -0.8058 -0.1752 vn 0.9753 0.1471 0.1648 vn 0.7390 -0.6590 -0.1402 vn 0.9491 0.0262 0.3139 vn 0.9067 0.3493 0.2364 vn 0.9198 0.2903 -0.2639 vn 0.8378 0.4321 0.3339 vn 0.9623 -0.0793 0.2600 vn 0.8207 -0.2852 -0.4951 vn 0.8603 -0.0790 -0.5036 vn 0.9451 0.0088 0.3267 vn -0.9750 -0.2203 0.0291 vn 0.9766 0.1145 0.1820 vn 0.8789 0.2752 -0.3897 vn 0.1796 -0.9549 -0.2363 vn 0.9653 0.2546 0.0586 vn 0.9429 0.0563 0.3282 vn 0.3859 0.6309 -0.6731 vn 0.6746 -0.5325 0.5112 vn 0.8758 -0.3838 0.2928 vn 0.9157 0.0026 0.4018 vn 0.6298 -0.5483 -0.5502 vn 0.1456 -0.6514 -0.7446 vn -0.1861 -0.3727 -0.9091 vn 0.2902 -0.4286 0.8556 vn 0.9783 0.1034 0.1794 vn 0.9694 0.2051 0.1346 vn 0.9830 0.1704 0.0677 vn 0.7843 -0.5616 0.2637 vn 0.8534 -0.4836 0.1946 vn 0.9701 -0.0624 0.2345 vn 0.1719 -0.8017 -0.5724 vn 0.8338 -0.1774 -0.5228 vn 0.9827 0.1467 0.1133 vn 0.8996 0.4013 0.1720 vn 0.9048 0.3947 0.1598 vn 0.9373 0.3279 0.1184 vn -0.2536 0.8281 -0.5000 vn 0.6817 -0.5378 -0.4960 vn 0.9792 0.1985 0.0415 vn 0.8616 0.4326 0.2656 vn 0.9776 0.1374 0.1596 vn 0.9794 -0.0735 0.1880 vn 0.9547 -0.1682 0.2454 vn 0.9694 -0.2174 0.1141 vn 0.9831 0.1436 0.1137 vn 0.9519 0.2868 0.1080 vn 0.9554 0.2836 0.0822 vn 0.6817 -0.7298 0.0523 vn 0.9967 -0.0608 0.0533 vn 0.9111 0.4078 0.0603 vn 0.9217 0.1070 0.3729 vn 0.4905 -0.7889 -0.3702 vn 0.8623 0.3539 0.3622 vn 0.8348 0.4104 0.3670 vn 0.9243 0.3137 0.2174 vn 0.7974 0.5346 -0.2799 vn 0.6410 -0.7561 0.1320 vn 0.6335 -0.7609 0.1402 vn 0.9365 -0.3085 0.1666 vn 0.9659 -0.0690 0.2496 vn 0.8727 0.4011 0.2786 vn 0.9109 0.4042 -0.0832 vn -0.9802 -0.1393 0.1405 vn -0.3528 0.8100 0.4685 vn -0.2115 0.9714 -0.1081 vn -0.6294 -0.4174 -0.6555 vn -0.1084 0.1008 -0.9890 vn 0.9565 0.2482 0.1536 vn 0.3325 0.1687 0.9279 vn -0.9842 0.1232 0.1275 vn 0.9780 0.0973 -0.1845 vn 0.9770 -0.0797 0.1976 vn 0.8365 -0.5443 0.0638 vn -0.6223 0.7651 0.1657 vn 0.0077 1.0000 0.0017 vn -0.0645 0.9946 0.0811 vn -0.2087 0.9717 -0.1108 vn 0.8338 0.4571 0.3095 vn 0.4655 0.7120 0.5258 vn 0.7415 0.5614 0.3673 vn -0.3684 0.9113 0.1840 vn 0.2669 0.9563 0.1197 vn 0.2656 0.8208 0.5057 vn 0.8127 0.4249 0.3987 vn 0.2269 0.9707 0.0793 vn -0.3791 -0.8766 -0.2964 vn -0.8381 -0.5437 -0.0458 vn -0.3897 0.8602 0.3290 vn -0.8064 -0.5643 0.1768 vn -0.9667 0.1887 0.1730 vn -0.1206 -0.7272 -0.6758 vn 0.8272 0.5499 -0.1155 vn 0.3868 0.3324 0.8602 vn 0.5171 0.6944 0.5004 vn 0.9757 -0.1777 -0.1285 vn 0.0769 -0.2942 0.9527 vn 0.8526 0.3619 0.3769 vn -0.5989 0.6019 0.5282 vn 0.6757 0.7372 0.0021 vn 0.5770 0.7439 0.3371 vn 0.3766 0.7496 0.5443 vn 0.4847 0.8735 -0.0452 vn -0.8109 0.0855 0.5789 vn 0.4851 0.8733 -0.0449 vn 0.4358 0.8690 0.2344 vn 0.0923 0.8956 0.4351 vn -0.1347 0.9245 0.3565 vn -0.1625 0.9195 0.3580 vn 0.4852 0.8024 -0.3473 vn 0.1167 0.9676 0.2241 vn -0.0295 0.8672 0.4972 vn -0.2603 0.8340 0.4866 vn 0.8263 0.5614 0.0441 vn 0.1824 0.9821 -0.0471 vn 0.0917 0.9757 0.1988 vn 0.0660 0.9916 -0.1108 vn -0.2296 0.8672 0.4419 vn -0.0869 0.8431 0.5306 vn -0.2740 0.8058 0.5249 vn 0.0298 0.6701 0.7417 vn -0.4799 0.8610 -0.1688 vn -0.6489 -0.0550 0.7589 vn -0.0342 0.9921 -0.1208 vn -0.1036 0.9830 0.1518 vn -0.2917 0.8901 0.3502 vn 0.7899 0.3596 0.4968 vn 0.8804 0.4696 0.0660 vn -0.8931 0.3818 -0.2377 vn -0.2660 0.9383 0.2212 vn 0.4602 0.7518 0.4722 vn 0.4228 0.5863 0.6910 vn -0.3392 0.8677 0.3635 vn -0.3581 0.9331 -0.0338 vn -0.4245 0.9054 -0.0008 vn 0.0842 0.9962 -0.0223 vn 0.6509 0.6685 0.3598 vn 0.7192 0.4394 0.5382 vn 0.8163 0.5231 0.2450 vn 0.9401 0.0900 0.3289 vn -0.1065 0.9701 -0.2183 vn -0.3312 0.7472 0.5761 vn -0.1160 0.8782 0.4640 vn -0.2925 0.9529 0.0804 vn -0.5975 0.7152 -0.3626 vn -0.9761 0.1423 -0.1645 vn 0.0674 0.9977 -0.0093 vn -0.0325 0.7298 0.6828 vn 0.2663 0.9636 0.0242 vn 0.7235 0.6842 0.0919 vn -0.7733 0.5731 -0.2712 vn -0.8238 -0.5668 -0.0086 vn -0.1205 0.9571 -0.2636 vn 0.6581 0.7459 -0.1031 vn 0.8991 0.4050 0.1659 vn 0.8703 0.4060 0.2789 vn 0.7954 0.5799 -0.1762 vn 0.8690 0.3686 0.3301 vn 0.3456 0.9310 -0.1178 vn 0.3731 -0.8487 -0.3749 vn -0.9892 0.1427 0.0319 vn 0.9877 0.1440 0.0604 vn -0.0772 0.9780 -0.1936 vn 0.7399 0.5211 0.4254 vn 0.7056 0.6480 0.2867 vn 0.9670 0.2535 -0.0256 vn -0.9976 0.0490 -0.0494 vn 0.7062 0.6052 0.3674 vn -0.6107 -0.7728 0.1726 vn 0.5935 0.6913 0.4121 vn -0.0384 -0.4831 0.8747 vn 0.1216 0.9575 0.2614 vn -0.1185 0.9926 0.0283 vn 0.0266 0.9960 -0.0859 vn 0.9735 0.2185 -0.0670 vn 0.8533 0.5205 -0.0316 vn 0.0964 0.7226 0.6845 vn 0.1991 0.9765 0.0827 vn 0.3843 0.7511 0.5368 vn 0.7057 0.6357 -0.3127 vn 0.8519 0.4654 0.2403 vn 0.1708 0.9853 0.0062 vn 0.1034 -0.9260 -0.3630 vn -0.3051 0.8045 0.5096 vn -0.6971 0.6957 0.1733 vn 0.2469 0.9548 -0.1653 vn 0.4932 0.8169 0.2990 vn 0.3438 0.9365 -0.0697 vn -0.9592 -0.0690 -0.2741 vn 0.1871 0.9673 0.1714 vn -0.3911 0.3955 -0.8311 vn -0.6635 0.3122 -0.6800 vn -0.1926 -0.7832 -0.5912 vn -0.9916 -0.1087 -0.0699 vn 0.2914 0.9530 -0.0828 vn 0.3834 0.9031 -0.1934 vn 0.1566 0.9394 0.3049 vn 0.7418 0.5161 0.4282 vn 0.8468 0.4631 0.2615 vn 0.4142 0.8733 -0.2566 vn -0.7491 0.5640 0.3477 vn 0.0111 0.8545 0.5193 vn 0.2133 0.9189 0.3319 vn 0.2631 0.8798 0.3958 vn 0.3287 0.8775 0.3492 vn 0.3541 0.9343 -0.0414 vn 0.4819 0.8317 0.2757 vn -0.1508 0.9885 0.0088 vn -0.8844 -0.3349 0.3252 vn -0.2199 0.7161 0.6625 vn -0.0654 0.8369 0.5435 vn -0.8897 -0.4549 0.0400 vn 0.1851 0.9736 0.1332 vn 0.4643 0.8842 0.0516 vn 0.4014 0.5261 0.7498 vn -0.0017 0.9693 0.2460 vn 0.9515 0.2872 0.1099 vn 0.2006 0.8481 0.4904 vn -0.0056 0.9312 0.3644 vn -0.9863 0.1632 0.0257 vn -0.3939 0.8228 0.4097 vn -0.1300 0.8394 0.5278 vn 0.1752 -0.8318 -0.5267 vn -0.3497 0.8988 -0.2644 vn -0.3410 0.9139 -0.2201 vn 0.8659 0.4644 0.1859 vn 0.0340 0.7499 0.6606 vn 0.9136 0.3939 0.1011 vn -0.8031 0.5641 0.1921 vn -0.3019 0.9429 -0.1409 vn -0.3441 0.9151 -0.2100 vn 0.6264 0.6580 0.4179 vn -0.1755 0.6113 0.7717 vn -0.4924 0.8517 0.1793 vn -0.1634 0.8334 0.5280 vn 0.7225 0.6883 0.0655 vn -0.9685 0.0957 0.2300 vn 0.8432 0.4700 0.2611 vn -0.1720 0.9716 0.1624 vn -0.0030 0.9644 0.2643 vn -0.1747 0.9844 -0.0206 vn 0.8527 0.5126 0.1005 vn 0.2248 0.9733 0.0471 vn -0.9417 0.2435 0.2323 vn -0.1527 0.8822 0.4453 vn -0.3243 0.8340 0.4464 vn -0.4833 0.7830 0.3916 vn 0.0381 0.9002 0.4338 vn -0.2011 0.8108 0.5497 vn -0.4257 0.8071 0.4092 vn -0.3512 0.7743 0.5264 vn 0.2055 0.7410 0.6392 vn 0.2000 0.9671 0.1572 vn 0.9119 -0.2338 -0.3373 vn -0.0170 0.8562 0.5164 vn -0.4521 0.8606 0.2344 vn 0.6117 0.7381 0.2846 vn 0.1357 0.9908 0.0018 vn 0.0698 0.9299 0.3612 vn 0.8020 0.5746 -0.1634 vn -0.5312 0.1908 -0.8255 vn 0.5546 -0.7987 -0.2336 vn 0.3696 0.8931 0.2565 vn 0.1273 0.6848 0.7176 vn -0.0073 0.9998 -0.0188 vn -0.0848 0.9902 0.1106 vn 0.1497 0.9766 0.1546 vn 0.8201 0.4595 0.3411 vn 0.1476 0.9884 0.0348 vn 0.3635 0.9311 -0.0311 vn 0.1831 0.9739 -0.1341 vn 0.3782 0.9032 -0.2030 vn -0.6283 0.2550 -0.7349 vn 0.0309 0.9995 0.0049 vn 0.1155 0.9821 0.1486 vn 0.1398 0.8729 0.4673 vn 0.0513 0.9756 0.2135 vn -0.5742 0.8187 -0.0058 vn 0.7370 0.5625 0.3746 vn 0.3250 0.9174 0.2298 vn 0.1699 0.9438 0.2834 vn 0.6316 0.5012 0.5915 vn 0.9968 0.0696 0.0392 vn -0.5484 0.7242 0.4182 vn 0.6618 0.6505 0.3727 vn -0.8990 -0.3802 0.2175 vn 0.2036 0.9753 0.0860 vn 0.3557 0.9106 0.2103 vn 0.7943 -0.1443 0.5902 vn 0.8213 0.0765 0.5654 vn -0.4436 0.8556 -0.2667 vn 0.2317 0.9212 0.3126 vn 0.1218 0.8671 0.4831 vn 0.2385 0.9671 -0.0886 vn -0.9358 -0.0528 0.3485 vn -0.9159 -0.3967 -0.0610 vn -0.9656 -0.0576 0.2537 vn 0.8186 0.4973 0.2873 vn -0.3497 0.8729 0.3403 vn -0.1457 0.8380 0.5259 vn 0.9613 -0.2494 -0.1168 vn 0.2005 0.9022 0.3819 vn -0.0038 0.9412 0.3379 vn -0.2076 0.1142 -0.9715 vn 0.8415 0.3777 0.3863 vn -0.3287 0.8427 0.4263 vn 0.6102 0.6450 0.4601 vn -0.8634 -0.1576 -0.4792 vn -0.3172 -0.9118 -0.2609 vn 0.0270 0.9981 -0.0561 vn -0.6831 0.6348 0.3612 vn 0.3177 0.9355 -0.1548 vn 0.4836 0.8462 -0.2239 vn -0.3298 0.8287 0.4522 vn 0.5679 -0.1869 -0.8016 vn -0.0611 0.9087 0.4129 vn 0.4655 -0.8846 -0.0285 vn 0.8318 0.1717 0.5278 vn 0.1642 0.8303 0.5326 vn 0.2061 0.6866 0.6972 vn 0.8539 0.5101 0.1034 vn 0.8153 0.5046 0.2842 vn 0.1583 0.9827 -0.0966 vn -0.2696 0.7951 0.5433 vn 0.1504 0.7565 0.6365 vn 0.0049 0.9648 0.2629 vn -0.3870 0.8878 0.2491 vn -0.3211 0.9343 0.1551 vn 0.3285 0.8362 0.4391 vn 0.2832 0.1185 0.9517 vn -0.2150 0.8665 0.4505 vn 0.4051 0.1034 0.9084 vn 0.4375 -0.8654 -0.2442 vn 0.6474 0.7416 0.1758 vn 0.4237 0.8204 0.3840 vn 0.8213 0.5617 -0.1000 vn 0.4267 0.8832 -0.1947 vn -0.0678 0.9943 0.0824 vn -0.9810 0.0554 -0.1859 vn -0.4569 0.7894 0.4100 vn -0.1003 0.9823 0.1582 vn 0.0538 0.9986 -0.0010 vn -0.4057 0.7901 0.4594 vn 0.0577 0.9983 -0.0047 vn -0.7481 0.5872 0.3092 vn -0.8017 0.5231 0.2893 vn 0.8559 0.1951 0.4789 vn 0.8153 0.5649 0.1274 vn 0.8280 0.5517 0.1005 vn -0.5883 0.7617 -0.2715 vn -0.4030 0.8524 -0.3331 vn -0.0285 0.9936 -0.1091 vn 0.7311 0.5644 0.3834 vn 0.7056 0.5567 0.4384 vn -0.2475 0.8991 0.3612 vn 0.8989 0.2424 0.3649 vn 0.9208 0.2080 0.3301 vn 0.8722 0.3580 0.3335 vn 0.8001 0.5751 -0.1708 vn 0.0578 0.9983 -0.0100 vn 0.5230 0.7312 0.4378 vn 0.0105 0.9952 -0.0973 vn 0.1348 0.9444 0.2998 vn -0.4560 0.8885 -0.0506 vn -0.1246 0.9462 0.2988 vn 0.4609 0.8768 0.1375 vn -0.8839 -0.4122 0.2208 vn -0.9942 0.1020 -0.0352 vn -0.2395 0.9292 0.2815 vn -0.4474 0.8930 0.0486 vn 0.3818 0.8412 0.3829 vn 0.2789 0.5613 0.7792 vn 0.6223 0.6082 0.4928 vn 0.6771 0.6851 0.2687 vn 0.6538 0.3933 0.6465 vn -0.4528 0.8818 -0.1319 vn -0.0398 0.9711 -0.2354 vn -0.1593 0.8583 0.4878 vn 0.8773 0.3747 0.2999 vn -0.0314 0.9894 -0.1421 vn -0.4313 0.9020 0.0202 vn 0.0593 0.9093 0.4120 vn -0.0160 0.8578 0.5137 vn -0.4143 -0.5028 -0.7586 vn -0.9208 -0.3801 -0.0872 vn 0.5602 0.5821 0.5894 vn 0.8042 0.5928 -0.0427 vn 0.8051 0.5929 0.0171 vn 0.7567 0.6458 0.1017 vn 0.9051 0.3534 0.2365 vn 0.0790 0.9880 0.1329 vn 0.1119 0.9848 0.1329 vn -0.3913 0.2132 0.8952 vn 0.2280 0.8477 0.4790 vn -0.5664 0.7532 -0.3343 vn 0.2483 0.8521 0.4607 vn -0.4768 -0.4019 -0.7818 vn 0.8068 0.5906 0.0149 vn 0.7068 0.6821 0.1877 vn -0.0457 0.9988 -0.0175 vn 0.6918 0.6016 0.3994 vn -0.9203 0.1930 -0.3404 vn -0.1293 0.8298 0.5429 vn 0.8150 0.5592 0.1519 vn 0.8154 0.5146 -0.2651 vn 0.7420 0.6694 0.0373 vn -0.3576 0.8650 0.3519 vn 0.1843 0.9824 0.0301 vn 0.4064 0.8887 0.2124 vn 0.1954 0.7654 0.6132 vn 0.0835 0.9738 0.2117 vn 0.4395 0.8259 0.3532 vn 0.5463 0.6863 0.4802 vn 0.4519 0.7152 0.5331 vn -0.2584 -0.9218 -0.2890 vn 0.1939 0.9804 -0.0350 vn -0.1803 0.9770 0.1137 vn 0.5698 0.7840 0.2465 vn -0.3434 0.9354 -0.0845 vn 0.1506 0.8823 0.4459 vn 0.7565 0.6471 -0.0943 vn 0.7092 0.7046 0.0248 vn 0.7118 0.7019 0.0248 vn 0.6307 0.7536 0.1854 vn -0.7559 -0.1324 0.6411 vn -0.4056 0.7815 0.4741 vn 0.1647 0.7744 0.6109 vn -0.0691 0.9128 0.4025 vn -0.0088 0.9653 0.2609 vn 0.5255 -0.7057 0.4751 vn 0.8088 0.5242 -0.2667 vn 0.7635 0.6411 -0.0776 vn 0.6096 0.7630 0.2150 vn 0.7546 0.5879 0.2915 vn 0.3495 0.4415 0.8264 vn 0.2864 0.0983 -0.9530 vn 0.6469 0.7579 0.0846 vn 0.6071 0.6136 0.5048 vn 0.6456 0.6707 0.3652 vn 0.1689 0.9814 -0.0912 vn 0.2650 0.9212 0.2849 vn 0.3258 0.4664 0.8224 vn -0.3360 0.7618 -0.5538 vn -0.2395 0.9513 -0.1942 vn 0.0390 0.5847 0.8103 vn 0.6579 0.7391 0.1446 vn -0.2002 0.7626 0.6151 vn -0.1311 0.7536 0.6441 vn 0.8967 0.3735 0.2374 vn 0.4598 0.8684 -0.1857 vn 0.7964 0.5533 0.2439 vn 0.3125 0.0040 0.9499 vn 0.2216 0.9662 0.1316 vn -0.3516 0.8102 0.4690 vn 0.0914 0.7062 0.7021 vn -0.0345 0.9755 0.2172 vn 0.6556 0.7398 0.1513 vn 0.3787 0.8941 0.2391 vn 0.8694 0.3508 0.3479 vn -0.3401 -0.6121 -0.7139 vn 0.2088 0.9457 0.2490 vn 0.7732 0.5403 -0.3322 vn -0.8617 -0.3290 0.3864 vn 0.3079 -0.0567 0.9497 vn 0.3174 0.7792 0.5404 vn 0.8146 0.5560 0.1652 vn -0.9100 0.0393 -0.4128 vn 0.6557 0.7394 -0.1527 vn 0.6403 0.7674 -0.0345 vn 0.6136 0.7607 0.2120 vn 0.5298 0.7674 0.3611 vn 0.4068 0.7090 0.5761 vn -0.6125 0.7877 0.0657 vn 0.0056 -0.9665 0.2567 vn 0.1689 0.9039 0.3930 vn 0.1577 0.6826 0.7136 vn -0.8869 -0.2685 -0.3758 vn 0.1579 -0.8883 -0.4314 vn 0.6220 0.7823 -0.0325 vn 0.9964 0.0702 0.0479 vn 0.6269 0.5813 0.5188 vn -0.0211 0.8164 0.5771 vn 0.1446 0.9297 0.3387 vn -0.2073 0.9193 0.3345 vn 0.8723 -0.4886 -0.0212 vn -0.9258 -0.1218 -0.3578 vn 0.5852 0.7682 -0.2598 vn 0.2978 0.8404 0.4527 vn 0.0883 0.7713 0.6303 vn 0.0296 0.8502 0.5256 vn -0.4884 -0.1785 0.8542 vn -0.0706 0.8384 0.5405 vn -0.8399 -0.3184 -0.4396 vn 0.5926 0.8052 0.0218 vn 0.3324 0.8532 0.4018 vn 0.0989 0.8334 0.5438 vn 0.5659 0.6001 0.5654 vn -0.0135 0.7171 0.6968 vn -0.0085 -0.7091 -0.7050 vn -0.4085 0.8814 0.2372 vn 0.2976 0.8794 0.3716 vn 0.0787 0.9903 0.1143 vn 0.1852 0.9701 0.1569 vn -0.1071 0.9538 0.2806 vn 0.4232 -0.6999 -0.5754 vn -0.1584 0.9173 0.3654 vn 0.2112 0.8810 0.4233 vn -0.5512 0.8223 0.1412 vn 0.6238 0.7394 -0.2533 vn 0.5491 0.8252 -0.1323 vn 0.5129 0.8579 0.0310 vn 0.4361 0.8959 0.0847 vn 0.2739 0.9159 0.2934 vn -0.2481 0.9657 -0.0768 vn 0.6705 -0.1382 0.7289 vn -0.0306 0.8687 0.4944 vn -0.1906 0.7901 0.5826 vn -0.2585 0.8445 0.4691 vn -0.7503 0.6611 -0.0038 vn -0.8817 0.0034 0.4718 vn 0.5962 0.6971 0.3983 vn 0.3295 0.5207 0.7876 vn -0.9230 0.1794 -0.3404 vn 0.4355 0.8889 0.1426 vn 0.4829 0.6546 0.5817 vn 0.4620 0.6396 0.6144 vn 0.5002 0.8341 -0.2325 vn 0.0206 0.9724 0.2322 vn -0.9818 -0.1440 -0.1235 vn 0.5065 0.7716 0.3849 vn -0.4739 0.8105 0.3443 vn -0.0302 0.9584 0.2840 vn -0.7067 0.6682 -0.2326 vn 0.7356 0.5661 0.3720 vn -0.9145 0.3594 0.1860 vn -0.7569 -0.0939 -0.6467 vn -0.8213 -0.0454 -0.5687 vn 0.5431 0.7586 -0.3600 vn 0.5116 0.8264 0.2351 vn 0.4618 0.7748 0.4317 vn 0.4500 0.7285 0.5165 vn -0.2508 0.7319 0.6335 vn 0.8375 0.4771 0.2664 vn 0.5804 0.7737 0.2540 vn -0.8739 0.2423 -0.4214 vn -0.7500 -0.0586 -0.6589 vn 0.1044 -0.9942 0.0271 vn 0.5087 0.8468 -0.1553 vn 0.5249 0.8407 -0.1331 vn 0.4586 0.8868 -0.0564 vn 0.4822 0.8618 0.1574 vn 0.4437 0.8740 0.1980 vn 0.2422 0.6928 0.6792 vn -0.5041 0.8567 0.1091 vn -0.7936 -0.5455 0.2694 vn 0.8064 0.5501 0.2172 vn 0.7062 0.3921 0.5895 vn -0.2047 0.8557 0.4752 vn -0.2475 0.7990 0.5481 vn -0.4397 0.8450 0.3044 vn 0.0031 0.0423 -0.9991 vn 0.7720 -0.5134 -0.3748 vn 0.4647 0.8853 -0.0186 vn -0.0965 0.7711 0.6293 vn 0.3824 -0.9115 -0.1515 vn -0.4019 0.8482 0.3450 vn 0.7976 0.5333 0.2817 vn 0.1155 0.8914 0.4383 vn 0.2148 0.8852 0.4126 vn -0.1385 0.6148 0.7764 vn -0.2036 0.8143 0.5436 vn -0.7656 -0.0185 -0.6430 vn -0.7321 0.5573 -0.3918 vn 0.5670 0.2811 -0.7743 vn 0.4037 0.9143 0.0328 vn 0.2528 0.9035 0.3460 vn 0.2650 0.9033 0.3374 vn 0.1325 0.7795 0.6123 vn 0.6591 -0.6943 -0.2891 vn -0.2618 0.8645 0.4291 vn -0.4983 0.1856 0.8469 vn -0.1097 0.9650 0.2381 vn 0.1927 0.6807 0.7067 vn -0.4019 0.7864 0.4692 vn -0.4062 -0.0908 -0.9093 vn -0.8021 -0.5961 -0.0346 vn 0.0969 0.2275 -0.9690 vn -0.2852 -0.2407 -0.9278 vn 0.1728 0.8274 0.5343 vn 0.0067 -0.6672 -0.7449 vn -0.7610 -0.6296 0.1567 vn 0.2427 0.8141 0.5275 vn -0.2154 0.6811 0.6998 vn -0.0687 0.6186 0.7827 vn -0.8492 -0.5230 0.0727 vn -0.8488 -0.5238 0.0722 vn 0.4232 0.9028 -0.0769 vn -0.8342 -0.0223 0.5510 vn -0.4702 0.8039 0.3642 vn -0.5309 -0.2530 0.8088 vn -0.8523 -0.1025 0.5130 vn -0.4273 0.5238 0.7369 vn -0.2212 0.9319 0.2875 vn -0.7858 0.4534 0.4207 vn -0.6074 0.6756 0.4178 vn 0.3368 0.6182 0.7102 vn -0.2270 -0.0314 0.9734 vn -0.6429 0.7481 0.1641 vn -0.5010 0.0864 0.8611 vn -0.7550 0.5775 0.3104 vn -0.2147 0.0732 0.9739 vn 0.0533 0.4343 0.8992 vn -0.5135 -0.0639 -0.8557 vn 0.1973 -0.8324 -0.5178 vn -0.8924 0.2563 0.3714 vn -0.6315 0.3999 0.6643 vn -0.8412 -0.0357 0.5396 vn 0.0354 0.7521 0.6582 vn -0.4440 0.7413 0.5034 vn -0.6565 -0.0497 0.7527 vn -0.1376 0.2155 0.9668 vn 0.7950 -0.4735 -0.3792 vn -0.8448 0.3175 0.4307 vn -0.7984 -0.0844 0.5962 vn -0.4132 -0.0009 -0.9106 vn 0.1661 -0.9453 -0.2809 vn -0.5123 -0.0698 0.8560 vn -0.1449 -0.5872 -0.7964 vn 0.2868 -0.7426 -0.6053 vn -0.5605 -0.0698 -0.8252 vn -0.7171 0.5763 0.3920 vn -0.3578 0.3245 0.8756 vn -0.1589 -0.7876 -0.5953 vn -0.1989 -0.7442 -0.6376 vn -0.5385 0.6506 0.5355 vn -0.7258 0.5044 0.4678 vn 0.0824 0.2705 0.9592 vn -0.7888 0.0592 0.6118 vn -0.5851 0.7973 -0.1480 vn -0.8765 -0.1379 0.4613 vn -0.7486 -0.4686 0.4690 vn -0.2704 0.9416 0.2005 vn -0.8635 -0.5040 0.0178 vn -0.7351 -0.1737 0.6554 vn -0.2337 0.3639 -0.9016 vn -0.8310 -0.4048 0.3815 vn -0.3873 0.9131 -0.1273 vn -0.5713 0.6340 0.5212 vn 0.1640 -0.3196 0.9333 vn 0.2333 -0.8912 -0.3890 vn -0.8196 -0.1173 0.5608 vn -0.1586 0.9171 0.3656 vn -0.5054 0.8495 0.1513 vn -0.6863 0.6518 0.3226 vn -0.2032 -0.4326 -0.8784 vn 0.3401 0.2916 0.8941 vn 0.7252 -0.6161 -0.3074 vn -0.4891 -0.0960 0.8669 vn -0.3941 -0.0943 -0.9142 vn -0.6928 0.6524 0.3072 vn -0.4889 0.3086 0.8159 vn -0.5543 -0.1791 -0.8128 vn -0.1915 -0.1116 0.9751 vn -0.4562 -0.0359 0.8891 vn -0.7605 -0.1903 0.6208 vn -0.5615 0.4926 0.6649 vn -0.2356 -0.8687 0.4357 vn 0.5643 -0.7187 -0.4063 vn -0.5785 0.4856 -0.6553 vn -0.6369 0.4207 0.6460 vn -0.8324 -0.0224 0.5537 vn -0.7838 0.4496 0.4284 vn -0.8238 0.5372 0.1811 vn -0.5001 0.0455 0.8647 vn -0.5323 0.5649 0.6306 vn -0.7437 0.4566 0.4883 vn -0.8951 -0.2175 0.3893 vn -0.5661 0.8146 0.1264 vn -0.5151 0.7296 0.4498 vn -0.7878 0.1013 0.6076 vn -0.7654 -0.1859 0.6161 vn 0.0578 -0.9977 0.0366 vn -0.9121 0.2980 0.2816 vn -0.6358 0.6495 0.4170 vn -0.6366 0.7065 0.3091 vn -0.7961 -0.3301 0.5072 vn 0.4036 0.2088 0.8908 vn -0.3928 0.5802 0.7135 vn -0.8051 0.4404 0.3974 vn -0.2897 -0.3519 -0.8901 vn -0.7255 0.4615 0.5105 vn -0.5286 -0.2212 0.8196 vn -0.4313 -0.3702 0.8227 vn -0.9190 0.3436 0.1935 vn 0.7618 -0.6066 -0.2272 vn 0.5241 -0.8507 -0.0415 vn -0.5587 0.2842 0.7792 vn -0.5492 0.3436 0.7618 vn -0.5961 0.6789 0.4286 vn -0.8739 0.1607 0.4588 vn -0.2011 0.8500 0.4869 vn -0.7258 0.4618 0.5099 vn -0.5395 -0.5440 0.6427 vn 0.8557 -0.4794 -0.1947 vn -0.4817 0.6291 0.6101 vn -0.8778 -0.0589 0.4754 vn -0.6613 -0.2594 0.7038 vn -0.8306 -0.2746 0.4845 vn -0.8116 -0.0946 0.5765 vn -0.6125 0.6955 0.3757 vn -0.9713 -0.2328 0.0495 vn 0.1633 -0.8394 -0.5184 vn 0.0809 -0.9924 -0.0926 vn -0.7981 0.3900 0.4593 vn -0.4013 0.8174 0.4133 vn -0.5213 -0.0882 -0.8488 vn -0.6309 -0.3577 0.6885 vn -0.2961 0.7205 0.6270 vn 0.6258 -0.6952 0.3536 vn 0.7612 -0.2110 -0.6132 vn -0.5703 -0.7415 0.3534 vn -0.8902 -0.4497 -0.0726 vn -0.5225 -0.7861 0.3302 vn -0.0408 -0.9400 0.3386 vn 0.1900 -0.9055 -0.3794 vn -0.6876 0.2172 -0.6929 vn -0.8535 -0.2277 0.4688 vn 0.1434 -0.8598 -0.4901 vn -0.7458 0.4213 0.5160 vn -0.7806 -0.1989 0.5925 vn 0.1816 -0.1328 -0.9744 vn -0.7655 -0.4309 0.4777 vn -0.4544 0.8086 0.3737 vn -0.7416 -0.1890 0.6437 vn -0.5946 0.6514 0.4712 vn -0.5106 -0.4413 0.7380 vn -0.9051 -0.2333 0.3554 vn 0.5483 -0.1182 0.8279 vn -0.9486 0.2563 0.1857 vn -0.6750 0.6436 0.3608 vn -0.6746 -0.2909 0.6785 vn 0.4001 -0.9163 0.0176 vn -0.9237 -0.0262 0.3822 vn 0.4073 0.0945 0.9084 vn -0.4895 -0.1113 0.8649 vn -0.8457 -0.5197 -0.1209 vn -0.4508 0.8163 0.3612 vn -0.5503 0.0665 -0.8323 vn -0.5769 -0.2732 0.7698 vn -0.5993 0.6940 0.3990 vn 0.6691 -0.6821 0.2951 vn 0.4860 -0.8577 -0.1679 vn -0.4672 0.0567 0.8823 vn -0.4051 -0.7437 0.5319 vn -0.9084 0.2921 -0.2992 vn -0.6972 -0.0946 0.7106 vn -0.6494 0.4079 0.6418 vn -0.5390 0.2691 0.7982 vn -0.4951 0.6605 0.5644 vn 0.0427 0.6679 0.7430 vn -0.5884 0.0653 0.8059 vn 0.1331 -0.7008 -0.7009 vn -0.4746 0.6143 0.6304 vn -0.1910 -0.9242 -0.3307 vn 0.0788 -0.0046 0.9969 vn -0.3064 0.1553 0.9392 vn -0.6723 -0.1737 0.7196 vn 0.4351 0.1811 0.8820 vn -0.8613 -0.2401 0.4478 vn -0.6597 -0.1414 0.7381 vn -0.2208 0.9193 0.3257 vn -0.4595 0.3149 0.8305 vn -0.8443 0.0439 0.5340 vn -0.3403 0.1278 0.9316 vn -0.4304 -0.4799 0.7645 vn -0.2723 -0.8642 0.4231 vn -0.7390 0.3762 0.5589 vn -0.3687 0.7836 0.5001 vn -0.5147 -0.2289 0.8262 vn -0.9886 0.1504 -0.0052 vn 0.0762 -0.7777 -0.6241 vn -0.8113 0.0034 0.5846 vn -0.1950 0.0535 0.9793 vn 0.1993 0.1344 -0.9707 vn 0.4671 -0.6509 0.5985 vn -0.4451 0.8180 0.3644 vn -0.6163 0.1472 0.7736 vn -0.6688 -0.0490 0.7418 vn -0.1816 -0.8793 0.4403 vn -0.8043 -0.3372 0.4892 vn -0.1752 0.9143 0.3652 vn -0.8372 -0.2646 0.4786 vn -0.2845 0.9557 -0.0760 vn -0.5302 -0.3992 0.7480 vn -0.8374 -0.2632 0.4790 vn -0.1151 0.0456 0.9923 vn -0.6022 -0.1935 0.7746 vn -0.4866 0.1631 -0.8583 vn -0.3962 -0.1569 -0.9047 vn 0.0966 -0.0789 0.9922 vn -0.4811 -0.2622 -0.8365 vn -0.3500 -0.8638 0.3623 vn -0.4968 -0.7174 0.4883 vn -0.4327 -0.8866 0.1634 vn -0.3574 0.1190 -0.9264 vn 0.5557 -0.6525 -0.5153 vn -0.4323 -0.8138 0.3883 vn -0.4880 -0.1599 0.8580 vn 0.2329 0.0330 0.9719 vn -0.8961 0.4202 -0.1430 vn -0.8041 -0.5187 -0.2906 vn -0.4007 -0.5537 -0.7300 vn -0.6698 0.6216 0.4062 vn -0.3272 0.3949 -0.8585 vn -0.6195 0.1885 0.7620 vn -0.5830 0.5017 0.6391 vn -0.4742 0.6604 0.5823 vn -0.5598 -0.2650 0.7851 vn -0.3573 -0.3013 0.8841 vn -0.4870 -0.4884 0.7241 vn -0.7689 0.4410 0.4629 vn -0.5974 0.4482 0.6650 vn -0.5021 -0.1293 0.8551 vn -0.9171 0.3916 -0.0743 vn -0.5891 0.7031 0.3982 vn -0.3244 -0.8380 -0.4387 vn -0.4809 -0.7576 0.4413 vn 0.0116 -0.9999 -0.0100 vn -0.3527 -0.5773 0.7364 vn 0.1123 0.6940 0.7112 vn 0.1296 0.2197 -0.9669 vn -0.6235 -0.1934 -0.7575 vn -0.0829 -0.5273 -0.8456 vn 0.0502 -0.8457 0.5314 vn 0.0861 -0.4690 -0.8790 vn -0.3732 0.8556 0.3587 vn -0.8580 0.1480 0.4919 vn 0.0430 0.1869 -0.9814 vn -0.3656 -0.4356 0.8226 vn -0.9864 0.1514 0.0641 vn -0.8449 0.4781 0.2399 vn -0.7765 0.5276 -0.3445 vn -0.8944 0.3687 0.2532 vn -0.8693 0.4941 0.0140 vn -0.8640 0.1603 0.4773 vn -0.2328 0.9287 0.2888 vn -0.6546 0.1200 0.7464 vn -0.9386 0.1377 -0.3162 vn 0.0812 -0.3851 0.9193 vn -0.8512 0.2076 0.4821 vn -0.1071 -0.5309 -0.8407 vn -0.2384 0.2048 0.9493 vn -0.6994 -0.4688 0.5395 vn -0.6224 0.2268 0.7491 vn -0.3998 0.8759 -0.2701 vn -0.6428 0.2770 -0.7142 vn -0.8510 -0.2819 0.4431 vn -0.9156 0.3389 0.2163 vn -0.7244 -0.1451 0.6740 vn -0.9950 -0.0140 -0.0992 vn -0.8081 0.2313 -0.5417 vn -0.8223 0.2782 0.4965 vn -0.8429 -0.2981 0.4479 vn -0.6514 -0.3113 -0.6919 vn 0.1044 -0.1160 -0.9877 vn -0.5864 0.0605 0.8077 vn -0.5075 0.5179 0.6887 vn 0.6853 -0.5234 -0.5064 vn -0.2710 -0.8639 0.4246 vn -0.3079 -0.8167 0.4880 vn -0.3910 0.7269 0.5645 vn -0.4479 -0.2673 0.8532 vn -0.8363 -0.0551 0.5454 vn 0.1035 -0.1057 -0.9890 vn -0.4785 0.3371 0.8108 vn -0.7783 -0.4163 0.4700 vn -0.5257 -0.0765 0.8473 vn -0.9056 0.3377 0.2566 vn -0.8271 0.5382 -0.1622 vn -0.8574 0.5044 0.1020 vn -0.8956 0.4210 -0.1433 vn -0.5968 0.3336 -0.7298 vn -0.0916 0.0476 -0.9947 vn -0.4704 0.4447 0.7622 vn 0.0079 -0.9997 0.0240 vn -0.6230 0.7765 0.0943 vn -0.7309 0.2361 0.6403 vn -0.5890 -0.5654 -0.5773 vn 0.0761 0.7056 0.7045 vn -0.9301 0.1556 -0.3326 vn -0.5383 0.4272 0.7265 vn -0.5669 0.4217 0.7076 vn -0.6266 0.0885 0.7743 vn -0.6631 0.3093 0.6816 vn 0.1953 -0.9003 -0.3889 vn 0.0614 -0.9968 0.0510 vn -0.1150 -0.6689 0.7344 vn 0.1562 -0.4580 -0.8751 vn -0.4196 -0.3163 0.8508 vn -0.2739 0.2450 -0.9300 vn -0.1262 -0.0566 0.9904 vn -0.3587 -0.2627 -0.8957 vn -0.6095 -0.2451 0.7539 vn 0.7546 0.4269 0.4984 vn -0.9103 0.2326 0.3425 vn -0.4003 0.2795 -0.8727 vn -0.5393 -0.4171 0.7316 vn -0.0467 0.8209 -0.5692 vn -0.9720 0.0847 -0.2191 vn -0.8382 -0.4174 -0.3511 vn -0.2632 -0.2957 -0.9183 vn -0.7634 0.3085 0.5676 vn 0.1282 -0.3912 -0.9113 vn -0.8589 -0.4860 0.1617 vn -0.6264 0.5306 0.5710 vn -0.5847 0.6322 0.5084 vn -0.5186 0.8484 0.1062 vn -0.0407 0.0255 -0.9988 vn -0.5264 -0.7444 0.4109 vn -0.5773 0.5428 0.6100 vn -0.9113 -0.0104 0.4116 vn -0.7852 0.0986 0.6114 vn -0.9117 0.4045 0.0719 vn 0.4689 -0.8832 -0.0128 vn -0.7269 0.4368 0.5300 vn -0.2077 0.7238 0.6580 vn -0.9510 0.1581 -0.2656 vn -0.9670 0.1293 0.2195 vn -0.4589 0.7208 0.5194 vn -0.2843 0.8987 0.3338 vn -0.3551 0.6832 0.6381 vn -0.7979 -0.3403 0.4975 vn -0.7673 -0.3885 0.5102 vn -0.7204 0.1412 0.6790 vn -0.4352 0.8240 0.3629 vn -0.8365 -0.2998 0.4587 vn -0.8627 0.0426 0.5039 vn -0.8660 0.1841 0.4650 vn -0.2270 -0.0316 0.9734 vn -0.2293 0.9301 0.2868 vn -0.6504 0.6545 0.3854 vn 0.1627 0.3027 0.9391 vn -0.9585 0.2808 0.0492 vn -0.8994 0.3918 -0.1940 vn -0.3774 0.0294 0.9256 vn -0.6905 0.4016 0.6015 vn -0.5305 0.5729 0.6248 vn -0.0768 -0.1130 0.9906 vn -0.5799 0.3270 0.7462 vn -0.4403 0.5219 0.7306 vn -0.7848 0.0667 0.6161 vn -0.7386 -0.0199 0.6738 vn -0.5639 -0.2075 0.7993 vn 0.5640 -0.5194 -0.6420 vn 0.9152 -0.0327 0.4017 vn -0.0579 0.5388 0.8404 vn -0.5259 -0.7449 0.4106 vn 0.0094 0.0348 0.9994 vn -0.4173 -0.6406 0.6446 vn 0.2604 0.2133 0.9416 vn -0.8620 0.5069 0.0068 vn -0.6478 -0.1257 0.7514 vn 0.2540 -0.8281 -0.4997 vn -0.6290 0.7622 0.1529 vn -0.7699 0.0225 0.6378 vn -0.6775 0.5175 0.5227 vn -0.2100 -0.0221 -0.9775 vn -0.3584 -0.1576 -0.9202 vn 0.7522 -0.1938 0.6298 vn -0.0141 -0.2470 -0.9689 vn -0.8446 0.0299 0.5345 vn -0.7895 0.2901 0.5408 vn 0.4332 -0.8320 -0.3465 vn -0.7388 -0.4628 0.4900 vn -0.0587 -0.9983 -0.0011 vn -0.8518 0.5227 -0.0354 vn -0.9104 0.1096 0.3989 vn -0.8267 0.3903 0.4054 vn -0.8349 0.3463 0.4279 vn -0.6897 0.6468 0.3257 vn -0.9708 0.0319 0.2379 vn -0.3395 0.7979 0.4981 vn -0.1297 -0.3904 -0.9115 vn 0.0603 0.0400 -0.9974 vn -0.2325 0.3592 -0.9039 vn 0.3982 0.0778 0.9140 vn -0.8690 0.2148 0.4457 vn -0.7306 0.5441 0.4125 vn -0.6240 0.7507 -0.2169 vn 0.1941 -0.7911 0.5801 vn -0.7106 0.5089 0.4859 vn -0.6212 0.3900 0.6797 vn -0.3205 0.8747 0.3634 vn -0.4448 0.7717 0.4546 vn -0.4532 0.1960 -0.8696 vn -0.4179 -0.1664 -0.8931 vn -0.5512 -0.0610 0.8321 vn -0.9092 -0.1914 0.3699 vn -0.7920 -0.2733 0.5459 vn -0.7826 -0.1002 0.6144 vn -0.7576 0.2948 0.5823 vn -0.0400 0.9174 0.3961 vn -0.6088 0.7135 0.3468 vn -0.0788 0.4643 0.8822 vn 0.1558 -0.1693 -0.9732 vn -0.5446 0.2407 0.8034 vn -0.8207 -0.3763 0.4300 vn -0.6895 0.1742 0.7030 vn -0.2889 -0.0328 -0.9568 vn -0.8434 -0.3402 0.4159 vn -0.9019 -0.1050 0.4190 vn -0.7767 0.2205 0.5900 vn -0.6749 -0.2241 0.7031 vn 0.0085 -0.9986 -0.0525 vn -0.2055 0.8333 0.5132 vn -0.3204 0.8895 0.3258 vn -0.7910 -0.2542 0.5565 vn -0.7996 -0.0636 -0.5971 vn -0.8549 -0.4025 -0.3272 vn -0.2785 0.6073 0.7440 vn -0.4812 0.6540 0.5837 vn -0.3652 0.7577 0.5408 vn -0.5044 0.6650 0.5509 vn -0.4721 0.5225 0.7100 vn -0.1296 0.1334 -0.9825 vn -0.3077 0.7181 0.6242 vn -0.0315 0.2105 -0.9771 vn -0.1217 0.1107 -0.9864 vn -0.4082 0.8249 0.3910 vn -0.1375 -0.5141 0.8466 vn -0.8569 0.0767 0.5097 vn 0.0171 0.5877 0.8089 vn -0.8066 -0.3029 0.5077 vn -0.3559 0.9342 0.0256 vn -0.9425 -0.0615 0.3285 vn -0.2615 0.8476 0.4618 vn -0.5603 0.4499 0.6954 vn -0.0204 0.3348 -0.9421 vn -0.1138 0.4424 -0.8895 vn -0.1288 0.2769 -0.9522 vn 0.2953 -0.9334 -0.2040 vn -0.7709 -0.0996 0.6291 vn -0.7548 0.1204 0.6448 vn -0.3879 0.4139 0.8235 vn -0.5643 -0.4299 0.7048 vn -0.7587 0.1005 0.6437 vn -0.6227 -0.1156 0.7738 vn -0.6251 0.2227 0.7481 vn -0.8807 0.3783 0.2852 vn -0.7117 0.5703 0.4102 vn -0.7241 0.5360 0.4340 vn 0.1388 -0.2037 -0.9692 vn -0.5684 -0.5791 0.5845 vn -0.4975 0.4908 0.7152 vn -0.3909 0.7476 0.5369 vn -0.2759 0.8343 0.4773 vn -0.8089 0.2829 0.5155 vn -0.7260 0.5705 0.3840 vn 0.4977 -0.8377 -0.2248 vn 0.0466 -0.0065 -0.9989 vn -0.7865 -0.0588 0.6147 vn -0.7183 0.2461 0.6507 vn -0.4063 0.0261 -0.9134 vn -0.7713 0.5034 0.3895 vn -0.9040 -0.3272 0.2752 vn -0.4615 0.1549 0.8735 vn -0.5469 0.8074 0.2214 vn -0.5521 0.7901 0.2663 vn -0.5875 0.6997 0.4066 vn -0.6646 0.6993 0.2632 vn -0.7772 0.2987 0.5538 vn -0.3341 -0.0418 -0.9416 vn 0.1374 -0.6545 -0.7434 vn -0.8275 -0.0320 0.5605 vn 0.0696 0.2856 0.9558 vn -0.1940 -0.3876 -0.9012 vn -0.0646 0.1974 0.9782 vn -0.4972 0.7553 0.4269 vn -0.5881 0.7388 0.3291 vn -0.5332 0.7899 0.3030 vn -0.6436 0.4441 0.6233 vn -0.3625 0.6675 0.6505 vn -0.4475 0.7825 0.4329 vn -0.6113 0.5455 0.5734 vn 0.0207 -0.6161 -0.7874 vn -0.6859 0.4694 -0.5561 vn -0.8235 0.4951 -0.2770 vn -0.3499 -0.2582 -0.9005 vn -0.7288 -0.3503 0.5884 vn -0.7323 -0.0053 0.6810 vn 0.5480 -0.4293 0.7180 vn -0.3314 -0.1301 -0.9345 vn 0.9758 -0.1889 -0.1104 vn -0.0502 0.2053 -0.9774 vn -0.9417 0.2123 0.2611 vn -0.9235 0.0856 0.3739 vn -0.8980 -0.3360 -0.2840 vn -0.8338 0.3783 0.4022 vn 0.2822 0.1747 0.9433 vn -0.8517 0.3090 0.4232 vn -0.4583 0.7599 0.4609 vn -0.4136 -0.2086 -0.8863 vn -0.7411 -0.2769 0.6116 vn -0.9855 0.1473 0.0842 vn -0.5528 0.1072 -0.8264 vn -0.7897 -0.3216 0.5224 vn -0.7832 -0.0469 0.6200 vn -0.8223 0.0741 0.5642 vn -0.6529 0.5821 0.4846 vn -0.1717 -0.2118 0.9621 vn -0.6720 -0.1008 0.7337 vn -0.3264 0.7406 0.5873 vn -0.5221 0.7756 0.3546 vn -0.6446 0.7321 0.2205 vn -0.4560 0.7001 0.5495 vn -0.5304 0.6706 0.5186 vn 0.1397 0.0517 -0.9888 vn -0.6960 0.0482 -0.7164 vn -0.7838 0.0072 0.6210 vn -0.7967 -0.3336 0.5040 vn -0.7865 0.3590 0.5025 vn -0.6944 0.4761 0.5396 vn -0.7217 0.4877 0.4912 vn -0.7084 0.5602 0.4294 vn -0.8209 -0.0333 0.5701 vn -0.8291 -0.0430 0.5574 vn -0.7314 0.4813 0.4831 vn -0.5626 0.5967 0.5722 vn -0.6691 0.7339 0.1170 vn -0.3631 0.7754 0.5165 vn -0.5655 -0.2993 -0.7685 vn -0.3369 -0.0499 -0.9402 vn -0.6223 -0.1778 -0.7623 vn -0.7258 0.1350 0.6745 vn -0.6064 -0.0319 0.7945 vn -0.5756 0.0086 -0.8177 vn -0.6742 -0.3459 0.6525 vn -0.8422 0.2140 0.4949 vn -0.8552 0.2557 0.4509 vn -0.5121 0.6644 0.5444 vn 0.7430 -0.2062 -0.6368 vn -0.5676 0.2952 0.7685 vn -0.6588 -0.2043 0.7240 vn -0.4805 0.5643 0.6714 vn -0.3860 0.8314 0.3997 vn -0.5778 0.5623 0.5916 vn -0.6809 0.1943 0.7062 vn -0.3358 -0.0993 -0.9367 vn -0.4232 -0.4097 -0.8081 vn -0.7365 0.1349 0.6628 vn -0.6850 0.2593 0.6808 vn -0.7314 0.6376 -0.2421 vn -0.1220 0.1020 -0.9873 vn 0.0355 -0.9988 -0.0324 vn -0.3807 0.0158 -0.9246 vn -0.7423 0.2376 0.6265 vn -0.7447 0.3968 0.5366 vn -0.3467 -0.1548 -0.9251 vn -0.0469 0.5429 -0.8385 vn -0.1366 0.2679 -0.9537 vn 0.0401 0.7729 -0.6333 vn -0.0971 0.8026 -0.5885 vn 0.0701 0.6181 -0.7829 vn -0.2382 0.6231 -0.7450 vn 0.0563 0.7355 -0.6752 vn -0.5731 0.3592 -0.7366 vn 0.1959 0.8995 -0.3906 vn -0.8527 0.0603 -0.5189 vn -0.8559 -0.1248 -0.5018 vn 0.1605 0.9078 -0.3874 vn 0.2797 0.7747 -0.5672 vn 0.1196 0.7641 -0.6340 vn -0.8687 -0.1094 -0.4832 vn -0.6011 -0.0297 -0.7986 vn -0.9866 0.0921 0.1344 vn -0.7682 -0.2934 -0.5691 vn -0.6177 -0.4453 -0.6482 vn -0.6238 -0.4453 -0.6423 vn -0.4393 -0.5280 -0.7268 vn 0.2501 -0.9081 -0.3360 vn -0.9436 0.1095 -0.3124 vn -0.9377 -0.0214 -0.3468 vn -0.6920 -0.0273 -0.7214 vn -0.4393 0.8966 -0.0555 vn -0.8736 -0.1440 -0.4648 vn -0.4124 -0.5171 -0.7500 vn -0.6542 0.0261 -0.7558 vn -0.9464 -0.0794 -0.3131 vn -0.8346 -0.3133 -0.4530 vn -0.6842 -0.4620 -0.5642 vn -0.6619 -0.5156 -0.5441 vn -0.4322 -0.6705 -0.6030 vn -0.6848 0.4527 -0.5711 vn -0.8493 -0.2683 -0.4547 vn -0.3568 -0.6499 -0.6711 vn -0.7945 -0.2123 -0.5690 vn 0.8219 -0.5615 -0.0965 vn 0.6321 -0.7430 -0.2200 vn -0.9609 0.1588 -0.2270 vn -0.9798 0.0367 -0.1964 vn -0.7293 -0.4965 -0.4708 vn -0.3905 -0.6979 -0.6004 vn -0.8536 -0.2149 -0.4746 vn 0.1000 0.3206 -0.9419 vn -0.7504 -0.4796 -0.4548 vn -0.3872 -0.7068 -0.5921 vn -0.9667 0.1449 -0.2108 vn -0.9610 -0.1054 -0.2555 vn -0.8903 -0.2637 -0.3712 vn -0.3868 -0.7065 -0.5927 vn -0.9881 -0.1173 -0.0998 vn -0.6727 -0.4907 -0.5538 vn -0.8831 0.4441 0.1510 vn -0.9540 -0.1189 -0.2752 vn -0.8819 -0.3203 -0.3460 vn -0.7404 -0.5319 -0.4111 vn -0.3937 -0.7385 -0.5474 vn -0.9887 0.1182 0.0922 vn -0.5062 -0.6356 -0.5829 vn -0.8672 -0.4150 -0.2750 vn -0.3753 -0.7246 -0.5780 vn -0.4011 -0.6224 -0.6722 vn -0.9496 -0.1190 0.2902 vn -0.9651 0.2005 -0.1685 vn -0.9823 0.1406 -0.1240 vn -0.5103 -0.7569 -0.4082 vn -0.9697 0.2263 0.0920 vn -0.8654 -0.2220 -0.4492 vn -0.9570 -0.1259 -0.2613 vn -0.9071 -0.3133 -0.2811 vn -0.6653 -0.5594 -0.4945 vn -0.4295 -0.7453 -0.5099 vn -0.7048 -0.5575 -0.4386 vn -0.7222 0.6258 0.2946 vn -0.9220 0.0557 -0.3830 vn -0.0630 0.9973 0.0371 vn -0.9618 0.2344 0.1414 vn -0.5232 0.7370 -0.4278 vn -0.9116 0.4059 0.0652 vn -0.9887 -0.0740 -0.1306 vn -0.7666 -0.5234 -0.3720 vn -0.7893 -0.5165 -0.3319 vn -0.9709 0.2129 0.1097 vn -0.4903 0.7825 -0.3837 vn -0.6392 0.7020 -0.3142 vn 0.7575 -0.6163 -0.2152 vn 0.5907 0.2243 -0.7751 vn 0.1483 0.8623 -0.4842 vn -0.8246 0.5287 0.2012 vn 0.0304 -0.0063 -0.9995 vn -0.9196 -0.2527 -0.3009 vn -0.4794 -0.7097 -0.5163 vn -0.6946 -0.6391 -0.3303 vn -0.4321 -0.7612 -0.4835 vn -0.2778 0.7033 -0.6544 vn 0.7146 0.6891 -0.1205 vn -0.9736 0.1949 -0.1185 vn -0.5888 0.7932 -0.1555 vn -0.6265 -0.4943 0.6026 vn -0.1716 0.7349 -0.6561 vn -0.8396 -0.4124 -0.3536 vn -0.9293 -0.2934 -0.2244 vn -0.9576 -0.2108 -0.1963 vn -0.6613 -0.6448 -0.3834 vn -0.3685 -0.9291 -0.0325 vn 0.5009 0.3473 -0.7927 vn -0.9837 -0.0433 -0.1743 vn -0.9539 0.2467 -0.1709 vn -0.7477 -0.5593 -0.3578 vn -0.7660 -0.5321 -0.3608 vn -0.5010 -0.7546 -0.4238 vn -0.4891 -0.7556 -0.4357 vn -0.6840 -0.6028 -0.4108 vn -0.9836 0.0875 0.1579 vn -0.1106 0.8352 -0.5387 vn -0.6282 -0.1093 -0.7703 vn -0.7777 0.0659 -0.6252 vn -0.7795 0.0497 -0.6244 vn -0.6817 0.4145 -0.6029 vn -0.5669 -0.8147 -0.1219 vn -0.9797 0.0194 -0.1995 vn -0.9553 0.2814 -0.0912 vn 0.4476 0.4938 -0.7455 vn 0.1976 0.9331 -0.3004 vn -0.6052 -0.3947 -0.6913 vn -0.7684 -0.3339 -0.5460 vn -0.8128 0.0407 -0.5810 vn -0.8576 0.2228 -0.4635 vn -0.6586 0.5642 -0.4978 vn -0.2160 0.2482 -0.9443 vn -0.9778 0.0229 -0.2083 vn -0.9593 -0.2593 -0.1122 vn -0.9378 -0.3363 -0.0868 vn -0.9898 0.1170 0.0815 vn -0.0978 0.9258 -0.3651 vn -0.7688 -0.4139 -0.4875 vn -0.7451 -0.4422 -0.4993 vn -0.7622 -0.3467 -0.5467 vn -0.8377 -0.3184 -0.4437 vn -0.8533 0.2457 -0.4599 vn 0.0203 -0.9996 -0.0179 vn -0.5148 -0.7671 -0.3828 vn -0.9406 -0.3284 -0.0862 vn 0.3231 0.5635 -0.7603 vn -0.7076 -0.1915 -0.6802 vn -0.8959 0.2941 -0.3331 vn -0.9390 0.3026 -0.1633 vn -0.5323 -0.7467 -0.3988 vn -0.7733 -0.5554 -0.3059 vn -0.9388 0.2644 0.2209 vn -0.2751 0.9195 0.2807 vn 0.3200 0.5702 -0.7566 vn -0.5510 -0.3900 -0.7378 vn -0.7749 -0.2186 -0.5931 vn -0.7279 -0.2406 -0.6421 vn -0.7952 -0.4137 -0.4433 vn -0.8832 -0.2706 -0.3831 vn -0.9020 -0.3455 -0.2589 vn -0.9191 -0.3223 -0.2266 vn -0.9283 -0.0358 -0.3702 vn -0.9628 0.2237 -0.1517 vn -0.7783 0.2420 -0.5793 vn 0.3698 0.7688 0.5218 vn -0.9933 -0.0448 -0.1066 vn -0.8425 -0.4399 -0.3110 vn -0.9907 0.1171 0.0697 vn 0.1053 0.3965 -0.9120 vn -0.0938 0.7244 -0.6830 vn -0.7435 -0.2756 -0.6093 vn -0.7438 -0.3175 -0.5881 vn -0.7875 -0.3555 -0.5035 vn -0.7496 -0.2056 -0.6292 vn -0.7990 0.4233 -0.4271 vn -0.7329 0.5754 -0.3630 vn -0.8286 0.4806 -0.2871 vn -0.4668 0.8200 -0.3312 vn -0.5332 0.5140 0.6719 vn -0.9350 0.3359 -0.1136 vn -0.9729 0.2170 0.0802 vn -0.1466 0.7096 -0.6892 vn -0.1622 0.7856 -0.5971 vn -0.7762 -0.1652 -0.6085 vn -0.8341 0.4045 -0.3750 vn -0.9009 0.3195 -0.2938 vn -0.6853 0.6521 -0.3243 vn -0.9864 -0.0450 -0.1582 vn -0.9190 0.3669 -0.1442 vn -0.9535 -0.2118 -0.2144 vn -0.8224 -0.5263 -0.2158 vn -0.9451 -0.3200 -0.0658 vn -0.9254 0.2913 0.2425 vn -0.9393 0.2666 0.2160 vn -0.2422 -0.4962 -0.8338 vn 0.0569 0.7851 0.6167 vn -0.6427 -0.7407 -0.1957 vn 0.3159 -0.3110 0.8964 vn -0.4221 0.8497 -0.3160 vn 0.1670 0.5426 -0.8232 vn -0.9297 -0.1891 -0.3160 vn -0.9423 -0.1605 -0.2937 vn -0.8589 -0.2697 -0.4354 vn -0.8151 -0.3929 -0.4258 vn -0.8291 0.1432 -0.5405 vn -0.9650 -0.0189 -0.2614 vn -0.7985 0.4535 -0.3959 vn -0.9880 -0.0904 -0.1256 vn -0.5712 -0.7478 -0.3384 vn -0.9873 -0.1524 -0.0444 vn -0.8457 -0.3503 0.4025 vn -0.1736 0.1773 0.9687 vn 0.2658 0.8522 -0.4506 vn 0.2628 0.8323 -0.4881 vn -0.3368 -0.7911 -0.5106 vn -0.8729 0.2318 -0.4294 vn -0.7738 0.3212 -0.5460 vn -0.6323 0.5254 -0.5693 vn 0.3887 0.6084 -0.6919 vn -0.9144 -0.0863 -0.3955 vn -0.7314 -0.2677 -0.6272 vn -0.8865 -0.4207 -0.1928 vn -0.8853 -0.3730 -0.2777 vn -0.9603 -0.2009 -0.1938 vn -0.8099 -0.1575 0.5650 vn -0.1788 0.6286 0.7569 vn -0.6610 0.6273 -0.4118 vn -0.6755 0.6049 -0.4217 vn 0.7367 -0.6693 -0.0967 vn -0.6699 0.5681 -0.4781 vn -0.8818 -0.3195 -0.3470 vn -0.8914 -0.4127 -0.1874 vn -0.9371 0.0831 -0.3390 vn -0.5125 0.0505 -0.8572 vn -0.4968 -0.8646 0.0751 vn 0.2543 0.6946 -0.6730 vn -0.9636 -0.1697 0.2066 vn -0.8734 0.4856 -0.0369 vn -0.9946 -0.0058 -0.1033 vn -0.9476 -0.1971 -0.2516 vn -0.9143 -0.2132 -0.3444 vn -0.9018 -0.4087 -0.1400 vn -0.9613 -0.2280 -0.1544 vn -0.9051 -0.3628 -0.2219 vn -0.9612 -0.2330 -0.1475 vn -0.9741 -0.0742 -0.2135 vn -0.8049 -0.2385 -0.5434 vn 0.9942 0.0577 -0.0907 vn -0.0388 -0.6186 -0.7847 vn -0.9594 -0.2104 -0.1879 vn -0.5731 -0.7180 -0.3951 vn -0.7813 -0.5576 -0.2803 vn -0.5920 -0.7000 -0.3994 vn -0.9797 -0.1976 0.0321 vn -0.1879 0.9142 -0.3590 vn 0.0187 0.6146 -0.7886 vn -0.8775 -0.3442 0.3341 vn -0.9314 0.0679 -0.3575 vn -0.5262 0.2710 -0.8060 vn -0.5740 0.3532 -0.7387 vn -0.4177 0.3855 -0.8227 vn -0.7646 -0.0706 -0.6407 vn -0.8655 0.0239 -0.5004 vn -0.8756 -0.0490 -0.4804 vn -0.8111 -0.3992 -0.4274 vn -0.9903 -0.0846 -0.1105 vn -0.3454 0.8164 -0.4627 vn -0.6626 -0.7401 -0.1149 vn -0.9889 -0.0854 -0.1215 vn -0.8793 0.4634 -0.1102 vn -0.9324 0.3555 -0.0657 vn -0.9552 -0.2339 -0.1812 vn -0.4331 -0.8170 -0.3806 vn -0.6897 0.3149 -0.6520 vn -0.8321 0.2166 -0.5105 vn -0.9131 0.0666 -0.4022 vn -0.7865 0.4794 -0.3893 vn -0.4675 0.8394 -0.2773 vn -0.3815 0.8726 -0.3050 vn -0.6474 0.6302 -0.4286 vn -0.9523 -0.0987 -0.2886 vn -0.8984 -0.2439 -0.3652 vn -0.8983 -0.3133 -0.3081 vn -0.8732 -0.0938 -0.4783 vn -0.9728 -0.2158 -0.0841 vn -0.8757 -0.0907 -0.4743 vn -0.8501 0.5081 0.1388 vn -0.8645 0.4844 0.1340 vn -0.9132 -0.3525 -0.2046 vn -0.9281 0.3104 0.2055 vn -0.9030 0.0888 -0.4204 vn -0.5506 0.6435 -0.5318 vn -0.7283 0.2163 -0.6503 vn 0.1155 -0.8108 -0.5738 vn -0.8186 0.4643 -0.3381 vn -0.9735 0.2198 -0.0639 vn -0.9096 -0.2173 -0.3542 vn -0.8952 -0.2441 -0.3730 vn -0.8771 -0.3117 -0.3654 vn 0.2212 0.3660 -0.9039 vn -0.8461 -0.2745 0.4570 vn -0.9770 0.2030 0.0656 vn 0.0860 -0.6069 -0.7901 vn -0.7135 -0.6957 -0.0829 vn -0.9874 -0.1079 -0.1156 vn -0.8881 -0.1826 0.4219 vn -0.7167 0.1146 -0.6879 vn -0.6824 0.2393 -0.6907 vn -0.8803 0.4610 -0.1118 vn -0.6870 0.6963 -0.2079 vn -0.4010 0.8274 -0.3931 vn -0.5877 0.6286 -0.5095 vn -0.9855 -0.0565 -0.1601 vn -0.9288 0.0174 -0.3702 vn -0.9145 -0.2138 -0.3435 vn -0.9139 -0.2816 -0.2923 vn -0.3846 0.3170 -0.8669 vn -0.8266 0.4065 -0.3893 vn -0.5170 0.7015 -0.4905 vn -0.1890 -0.7669 -0.6133 vn -0.3906 0.7681 -0.5073 vn -0.5616 0.7742 -0.2921 vn -0.9089 0.3702 -0.1921 vn -0.4127 -0.9106 -0.0218 vn -0.5604 -0.7127 -0.4219 vn -0.8449 -0.4860 -0.2233 vn -0.9867 0.0828 0.1400 vn -0.7986 -0.5439 -0.2575 vn -0.9998 -0.0051 -0.0194 vn -0.9705 0.1414 -0.1952 vn -0.9099 -0.3021 -0.2843 vn -0.8681 0.4766 -0.1388 vn -0.6881 0.6826 -0.2460 vn -0.9325 0.0431 -0.3585 vn -0.9720 -0.1377 -0.1901 vn -0.8951 -0.2539 -0.3664 vn -0.8314 -0.3794 -0.4060 vn 0.0243 0.5604 -0.8279 vn -0.4048 0.8323 0.3785 vn -0.9987 0.0381 -0.0347 vn -0.8739 0.4857 0.0203 vn -0.9484 -0.2781 -0.1522 vn -0.5613 -0.7114 -0.4228 vn -0.9604 -0.2237 -0.1663 vn -0.3375 0.9152 -0.2201 vn -0.5672 -0.5668 -0.5975 vn 0.0213 -0.5362 -0.8438 vn -0.8138 0.5774 -0.0664 vn -0.5195 0.8511 0.0760 vn -0.3138 0.9240 -0.2184 vn -0.4953 0.8457 -0.1985 vn -0.7368 0.6697 0.0925 vn -0.9403 0.1551 -0.3031 vn -0.2538 0.0523 -0.9658 vn -0.9117 -0.3200 0.2575 vn 0.0592 -0.8938 -0.4445 vn -0.9580 0.2696 -0.0977 vn -0.7454 0.4041 -0.5302 vn -0.7133 0.4984 -0.4928 vn -0.9413 0.1402 -0.3071 vn 0.1125 -0.9930 0.0358 vn -0.9878 -0.1333 -0.0801 vn -0.9070 -0.3187 -0.2751 vn -0.9380 -0.2675 -0.2206 vn -0.9415 -0.1894 -0.2789 vn 0.1361 0.8248 -0.5488 vn 0.0420 0.4610 -0.8864 vn -0.7713 0.3257 0.5468 vn -0.9467 -0.2377 -0.2172 vn -0.8212 0.3623 -0.4410 vn -0.5211 0.8124 -0.2616 vn -0.8267 -0.0543 0.5600 vn -0.6894 -0.5563 0.4640 vn -0.6892 -0.5605 0.4592 vn -0.5170 -0.1814 -0.8365 vn -0.7241 -0.6676 -0.1733 vn -0.9909 -0.0973 -0.0927 vn -0.8864 0.4616 0.0347 vn -0.6882 -0.6825 -0.2462 vn -0.5786 -0.7214 -0.3806 vn -0.8539 -0.4816 -0.1975 vn -0.9905 0.1028 0.0917 vn -0.8756 0.4726 -0.0998 vn -0.8916 0.1486 -0.4278 vn -0.8225 0.4650 -0.3276 vn -0.8005 0.5169 -0.3034 vn -0.7259 0.5893 -0.3548 vn -0.5905 0.7163 -0.3718 vn -0.9610 0.2093 -0.1810 vn -0.9792 -0.0677 -0.1912 vn -0.9335 -0.2650 -0.2416 vn -0.9411 -0.2408 -0.2374 vn -0.6260 0.7093 0.3240 vn -0.8418 0.3162 -0.4374 vn -0.8853 0.4245 -0.1901 vn -0.2150 -0.0208 -0.9764 vn -0.9068 -0.4184 -0.0521 vn -0.9297 0.2843 0.2343 vn -0.6414 0.5461 -0.5389 vn -0.6736 0.4634 -0.5758 vn -0.7303 0.6246 -0.2768 vn 0.1140 -0.7937 -0.5975 vn -0.9811 -0.0021 -0.1936 vn -0.9355 -0.0541 0.3490 vn -0.4888 0.8458 -0.2137 vn -0.9061 0.3248 -0.2711 vn -0.1928 0.1304 -0.9725 vn 0.0023 0.5338 -0.8456 vn 0.4237 0.4638 -0.7780 vn -0.9853 0.0198 -0.1698 vn -0.7396 0.5905 -0.3229 vn -0.9558 -0.2896 -0.0508 vn -0.5156 0.8428 0.1543 vn -0.8089 -0.5841 0.0666 vn -0.9907 -0.1097 0.0810 vn -0.9978 -0.0480 -0.0453 vn -0.9914 0.1258 0.0353 vn -0.8845 -0.4049 0.2316 vn -0.6860 0.6626 -0.3006 vn 0.2518 0.6191 0.7438 vn -0.8952 0.3531 -0.2719 vn -0.7049 0.6479 -0.2887 vn -0.9309 -0.0312 -0.3640 vn -0.8296 -0.1658 -0.5332 vn -0.9576 -0.1047 -0.2685 vn -0.9357 -0.2491 -0.2498 vn -0.7008 -0.6622 -0.2653 vn -0.0015 0.4195 -0.9077 vn -0.9043 0.3864 0.1815 vn -0.0151 0.6689 -0.7432 vn 0.0281 -0.9978 0.0593 vn 0.4031 0.1555 -0.9019 vn -0.9196 0.3810 -0.0961 vn -0.8780 0.3683 -0.3056 vn -0.6908 -0.1477 -0.7078 vn -0.5900 -0.6258 -0.5102 vn -0.9065 0.3983 -0.1402 vn -0.9722 0.0612 0.2259 vn -0.6884 -0.6804 -0.2513 vn -0.6561 0.5582 -0.5080 vn -0.9079 0.3197 0.2710 vn -0.1441 0.2858 -0.9474 vn -0.0200 0.7488 -0.6625 vn -0.6750 -0.5505 -0.4912 vn -0.7798 -0.1343 -0.6114 vn -0.7041 -0.0136 -0.7100 vn -0.9185 0.3829 -0.0990 vn -0.9948 -0.0257 -0.0987 vn -0.6007 -0.7827 -0.1628 vn -0.9100 -0.4145 0.0132 vn 0.9373 -0.1137 -0.3295 vn -0.7636 -0.6282 -0.1489 vn -0.9981 -0.0607 -0.0049 vn -0.9007 -0.4015 -0.1659 vn -0.8627 0.5021 0.0608 vn -0.7930 -0.6042 -0.0778 vn -0.9959 -0.0843 0.0325 vn -0.9845 -0.1730 0.0276 vn -0.9509 -0.3034 0.0607 vn -0.9933 -0.0370 0.1097 vn -0.5809 0.7281 -0.3640 vn 0.5939 0.0103 -0.8045 vn -0.2642 0.6871 0.6768 vn 0.6336 -0.2195 -0.7419 vn -0.7275 0.0393 -0.6850 vn -0.6600 0.2765 -0.6986 vn 0.4597 -0.7921 -0.4016 vn 0.0499 0.4678 -0.8824 vn -0.8364 -0.5292 0.1426 vn -0.9051 -0.4068 0.1235 vn -0.2884 -0.0314 -0.9570 vn -0.8226 -0.5186 -0.2333 vn -0.8017 -0.5473 -0.2403 vn -0.8533 -0.4763 -0.2120 vn -0.5897 0.6985 -0.4054 vn -0.3113 -0.0464 -0.9492 vn -0.8412 0.5366 -0.0666 vn -0.6532 0.4844 -0.5819 vn -0.5970 0.6027 -0.5295 vn -0.6139 0.7819 -0.1083 vn -0.9840 -0.1366 0.1141 vn 0.1978 0.8225 -0.5332 vn -0.7237 -0.1170 -0.6802 vn -0.9899 -0.1131 -0.0853 vn -0.9609 0.2511 0.1168 vn -0.2857 -0.4323 -0.8553 vn -0.8072 0.5687 0.1581 vn -0.9538 -0.3005 0.0053 vn 0.0146 0.9754 -0.2200 vn -0.0030 -0.9989 0.0458 vn -0.5464 0.8219 -0.1613 vn -0.9488 -0.0638 0.3093 vn -0.9721 0.2290 -0.0514 vn -0.9747 0.2175 -0.0513 vn -0.8931 -0.4258 0.1451 vn -0.9055 0.3913 0.1643 vn 0.2129 0.8529 -0.4768 vn -0.2942 0.6279 -0.7206 vn 0.5187 0.4083 -0.7512 vn -0.8138 -0.0365 -0.5800 vn -0.8137 -0.0318 -0.5805 vn -0.6981 0.3125 -0.6442 vn -0.6648 0.2151 -0.7153 vn -0.6177 0.7052 0.3481 vn -0.8833 0.3440 0.3187 vn -0.9107 -0.1679 -0.3773 vn -0.8966 0.3943 0.2015 vn -0.9981 0.0367 -0.0490 vn -0.8693 -0.4941 -0.0156 vn -0.9965 0.0807 0.0234 vn 0.2134 0.8988 -0.3830 vn 0.0542 -0.9956 0.0767 vn 0.4366 0.7872 -0.4356 vn 0.1889 0.2455 -0.9508 vn 0.6275 0.5524 -0.5488 vn 0.7252 0.5512 -0.4126 vn 0.0538 0.8923 -0.4483 vn -0.3025 0.5399 -0.7855 vn -0.1684 0.9248 -0.3412 vn -0.2600 0.5709 -0.7788 vn -0.6409 -0.4127 -0.6472 vn -0.8678 -0.0750 -0.4913 vn -0.6598 -0.2200 -0.7185 vn -0.7329 0.0319 -0.6796 vn -0.7089 0.1565 -0.6877 vn -0.2262 0.9004 -0.3716 vn 0.1813 0.7086 -0.6819 vn -0.8317 -0.5291 -0.1683 vn -0.9825 0.0747 -0.1704 vn -0.9120 -0.0103 0.4100 vn -0.6070 0.3679 -0.7044 vn -0.8179 -0.5427 -0.1909 vn -0.9278 0.3727 0.0153 vn -0.9818 0.0422 -0.1852 vn -0.8954 0.4450 -0.0140 vn -0.8901 -0.4319 -0.1456 vn -0.8532 -0.4748 -0.2160 vn -0.9779 0.2072 -0.0287 vn -0.8617 -0.4119 0.2964 vn -0.9678 0.1443 0.2065 vn -0.9027 0.4011 0.1556 vn 0.1621 0.0480 -0.9856 vn 0.4366 0.3905 -0.8105 vn 0.0120 0.3391 -0.9407 vn -0.7033 0.6485 -0.2912 vn -0.7434 0.1834 -0.6432 vn 0.2064 -0.8313 0.5160 vn -0.8364 -0.3537 -0.4188 vn -0.6628 -0.2301 -0.7126 vn -0.7567 0.0829 -0.6484 vn 0.8374 0.5455 0.0344 vn 0.8288 0.5360 0.1608 vn -0.0599 0.5123 -0.8567 vn 0.1924 0.3938 -0.8989 vn -0.7435 -0.5746 -0.3422 vn -0.8666 -0.4546 -0.2057 vn -0.5720 0.8112 0.1212 vn -0.9839 -0.0710 0.1642 vn -0.6385 0.3444 -0.6883 vn -0.6598 0.5971 -0.4562 vn -0.9155 0.3896 0.1010 vn -0.8025 -0.5860 -0.1122 vn 0.1658 -0.0002 0.9862 vn -0.8194 -0.1951 -0.5390 vn -0.8606 -0.2215 -0.4586 vn -0.7829 -0.2285 -0.5786 vn -0.4884 0.7744 0.4022 vn 0.4329 0.3836 -0.8157 vn -0.6219 -0.4153 -0.6639 vn -0.7566 0.2349 -0.6103 vn 0.0169 -0.9995 -0.0249 vn 0.0137 -0.9998 -0.0142 vn 0.5204 0.5378 -0.6633 vn 0.1667 0.5508 -0.8178 vn 0.2346 0.4272 -0.8732 vn -0.6970 -0.0424 -0.7158 vn -0.6911 -0.2633 -0.6731 vn -0.4418 0.8516 -0.2823 vn -0.5842 0.7523 -0.3044 vn -0.9566 0.2890 -0.0363 vn -0.6836 0.4544 -0.5711 vn -0.6362 0.6128 -0.4687 vn 0.0613 0.7999 -0.5971 vn -0.2572 0.7293 -0.6340 vn -0.5052 -0.7121 -0.4874 vn -0.7582 -0.2556 -0.5999 vn -0.6930 -0.3255 -0.6433 vn -0.7570 -0.2939 -0.5836 vn -0.6756 -0.1578 -0.7202 vn -0.7167 -0.1208 -0.6868 vn -0.7752 0.0945 -0.6247 vn -0.8403 0.2055 -0.5017 vn -0.0292 0.5804 -0.8138 vn -0.1962 0.7845 -0.5883 vn 0.4613 0.2380 -0.8547 vn 0.4326 0.7706 -0.4681 vn -0.7623 -0.4491 -0.4660 vn -0.8636 0.2112 -0.4578 vn -0.9864 0.1612 -0.0312 vn -0.8157 -0.3125 -0.4868 vn -0.9662 0.2188 0.1363 vn -0.6822 0.4539 -0.5732 vn -0.6393 0.7567 -0.1365 vn -0.6937 0.3372 -0.6365 vn -0.6854 -0.0294 -0.7275 vn -0.5805 -0.6734 -0.4578 vn -0.6612 -0.4901 -0.5680 vn -0.7067 -0.3305 -0.6256 vn -0.7970 0.1722 -0.5789 vn -0.7554 0.2343 -0.6120 vn -0.7682 0.0277 -0.6396 vn -0.7071 0.1565 -0.6896 vn -0.6295 0.4938 -0.5999 vn 0.2842 -0.1096 -0.9525 vn -0.3019 0.9096 -0.2855 vn -0.8128 -0.2111 -0.5429 vn -0.8054 -0.4178 -0.4204 vn -0.9748 0.1107 -0.1936 vn -0.7035 0.3548 -0.6158 vn -0.6862 0.4500 -0.5715 vn -0.6669 0.7091 -0.2292 vn 0.0430 0.9190 -0.3919 vn -0.4429 0.6321 -0.6358 vn -0.5194 0.7768 -0.3561 vn -0.2264 0.3155 -0.9215 vn -0.5920 -0.7409 -0.3171 vn -0.4772 -0.8631 -0.1655 vn -0.4568 -0.8677 -0.1959 vn -0.5795 -0.7474 -0.3250 vn -0.7963 -0.3946 -0.4585 vn -0.8186 -0.3200 -0.4769 vn -0.7684 -0.2825 -0.5743 vn -0.8056 -0.1130 -0.5816 vn -0.7865 -0.1415 -0.6011 vn -0.8469 -0.1734 -0.5027 vn -0.7815 -0.2912 -0.5517 vn 0.0425 0.8697 -0.4918 vn -0.1945 0.9367 -0.2911 vn 0.0149 -0.9922 0.1239 vn 0.0474 0.5628 -0.8252 vn 0.0875 0.6507 -0.7543 vn -0.0632 -0.8200 0.5689 vn -0.5130 0.1929 -0.8364 vn -0.5550 0.2367 -0.7975 vn -0.9542 -0.1232 -0.2727 vn -0.9623 0.1677 -0.2142 vn -0.9565 0.0110 -0.2915 vn -0.9078 0.3904 0.1536 vn -0.1470 -0.2251 -0.9632 vn -0.1793 0.2246 -0.9578 vn 0.1032 0.7652 -0.6355 vn -0.3870 0.8153 -0.4308 vn -0.7830 -0.6177 -0.0734 vn -0.5480 0.7273 -0.4132 vn -0.8124 0.3962 -0.4277 vn -0.9226 0.0509 -0.3823 vn -0.5649 -0.6165 -0.5485 vn -0.6055 -0.5982 -0.5250 vn -0.7823 -0.6200 -0.0595 vn -0.8735 -0.2593 -0.4121 vn -0.7998 -0.5032 -0.3274 vn -0.7630 -0.5397 -0.3557 vn -0.7293 0.3040 -0.6130 vn -0.6247 0.4831 -0.6135 vn -0.5996 0.3490 -0.7202 vn -0.2554 0.7603 -0.5972 vn -0.2403 0.9186 -0.3137 vn -0.1115 0.6960 -0.7093 vn -0.2390 0.0326 -0.9705 vn -0.1811 0.6381 -0.7483 vn -0.9664 -0.1041 0.2350 vn 0.6028 0.5655 -0.5629 vn -0.7517 -0.0010 -0.6595 vn -0.7222 0.3120 -0.6173 vn 0.5765 -0.7661 -0.2842 vn -0.1896 -0.4357 -0.8799 vn -0.6990 0.3595 -0.6181 vn -0.7539 0.6158 -0.2289 vn 0.5361 0.6633 0.5221 vn -0.7260 0.6599 -0.1938 vn -0.2612 -0.9499 0.1718 vn -0.8140 0.3803 -0.4391 vn -0.8893 -0.2488 -0.3836 vn -0.5249 -0.7700 -0.3627 vn 0.0354 -0.9989 -0.0316 vn -0.4636 -0.8049 -0.3704 vn -0.9644 -0.0877 -0.2495 vn -0.9719 -0.0432 -0.2313 vn -0.8915 0.1657 -0.4216 vn -0.9887 0.0210 -0.1487 vn -0.8911 0.1744 -0.4189 vn -0.8190 0.3452 -0.4584 vn -0.7183 0.0307 -0.6951 vn -0.2333 0.9177 -0.3214 vn -0.6918 0.1650 -0.7030 vn -0.9697 0.1899 -0.1536 vn -0.9349 0.2846 -0.2121 vn 0.0391 -0.9992 0.0101 vn -0.7551 0.4767 -0.4502 vn -0.6850 0.7087 -0.1689 vn -0.7592 0.6116 -0.2225 vn -0.6799 0.7161 -0.1576 vn -0.5730 0.6192 -0.5369 vn -0.8128 -0.5764 0.0849 vn -0.8869 0.1157 -0.4472 vn -0.9240 -0.0293 -0.3813 vn -0.9024 -0.3530 -0.2473 vn -0.5763 -0.6333 -0.5165 vn -0.6525 -0.6083 -0.4519 vn -0.6776 -0.7354 -0.0077 vn -0.7816 -0.6229 -0.0333 vn -0.9259 -0.2871 -0.2455 vn -0.9634 -0.0692 -0.2589 vn -0.8003 0.3896 -0.4558 vn -0.8104 -0.0076 -0.5858 vn -0.8102 -0.0093 -0.5861 vn -0.6582 0.3115 -0.6854 vn -0.8491 0.1716 -0.4996 vn -0.6560 0.1378 -0.7421 vn -0.6896 0.3732 -0.6206 vn -0.7524 0.6456 0.1309 vn -0.9753 0.1505 0.1615 vn -0.8638 0.3430 -0.3690 vn -0.5655 0.7304 -0.3831 vn -0.5624 -0.6249 -0.5414 vn -0.7048 -0.6454 -0.2943 vn -0.7107 -0.6772 -0.1906 vn -0.8405 -0.3589 -0.4058 vn -0.9377 -0.1126 -0.3287 vn -0.8638 0.0416 -0.5022 vn -0.8558 0.1565 -0.4930 vn -0.9433 0.1945 -0.2690 vn -0.8660 0.2596 -0.4273 vn -0.8078 0.3493 -0.4748 vn -0.6197 0.1748 -0.7652 vn -0.7932 0.3257 -0.5145 vn 0.5186 0.5624 -0.6440 vn -0.8474 0.1716 -0.5025 vn -0.7792 0.2751 -0.5631 vn -0.7477 0.4807 -0.4580 vn -0.6452 0.7450 0.1695 vn -0.6212 0.7832 0.0273 vn -0.9871 0.0674 0.1455 vn -0.5774 0.6480 -0.4967 vn -0.5314 0.7340 -0.4229 vn -0.3884 0.9114 -0.1359 vn -0.9172 0.3130 -0.2465 vn -0.9186 0.3019 -0.2549 vn -0.9942 0.0722 -0.0792 vn 0.3390 -0.2428 -0.9089 vn -0.0425 -0.9270 0.3725 vn -0.7729 -0.5929 -0.2261 vn -0.8119 -0.5488 -0.1991 vn -0.8950 -0.3511 -0.2752 vn -0.8678 0.0473 -0.4947 vn -0.9951 -0.0516 -0.0845 vn -0.6869 -0.3796 -0.6198 vn -0.6492 -0.4636 -0.6030 vn -0.8095 -0.3143 -0.4959 vn -0.8529 0.2289 -0.4693 vn -0.7014 0.1568 -0.6953 vn -0.6113 0.2822 -0.7394 vn 0.9658 -0.2426 -0.0913 vn -0.5583 0.4428 -0.7016 vn -0.8458 0.0126 -0.5333 vn -0.8448 0.0175 -0.5348 vn -0.7352 0.4056 -0.5431 vn -0.7613 0.2622 -0.5931 vn -0.6971 0.6599 -0.2805 vn -0.8832 0.4440 0.1512 vn -0.9895 0.1419 0.0274 vn -0.7183 -0.6201 -0.3154 vn -0.6108 -0.6769 -0.4108 vn -0.6295 -0.6033 -0.4896 vn -0.8279 -0.4339 -0.3554 vn -0.8623 -0.3651 -0.3509 vn -0.8543 0.2820 -0.4366 vn -0.8876 0.1481 -0.4361 vn -0.7974 0.3003 -0.5233 vn -0.6474 -0.4543 -0.6120 vn -0.8908 0.0254 -0.4536 vn -0.6847 -0.4593 -0.5659 vn -0.6366 -0.5439 -0.5468 vn -0.8754 -0.1284 -0.4660 vn -0.6987 -0.3506 -0.6237 vn -0.9184 0.0395 -0.3936 vn -0.9164 0.1655 -0.3646 vn -0.5375 0.4486 -0.7140 vn -0.8507 0.2281 -0.4737 vn -0.6169 -0.3171 -0.7203 vn 0.3884 0.1376 -0.9112 vn -0.6638 0.4065 -0.6278 vn -0.6978 0.7149 -0.0432 vn -0.7055 0.7071 -0.0476 vn -0.4370 0.7597 0.4815 vn -0.3884 0.8993 -0.2008 vn -0.3725 0.9112 -0.1758 vn -0.7294 -0.6585 -0.1855 vn -0.6391 0.4023 -0.6555 vn -0.0843 -0.2857 -0.9546 vn -0.8288 0.2481 -0.5016 vn -0.8395 -0.2624 -0.4757 vn -0.8881 -0.1868 -0.4199 vn -0.9099 0.1857 -0.3710 vn -0.9013 0.3727 -0.2206 vn -0.9610 0.1253 -0.2465 vn -0.9057 0.2673 -0.3289 vn -0.9090 0.2346 -0.3444 vn -0.9398 0.1424 -0.3106 vn -0.9399 0.0846 -0.3308 vn -0.8480 -0.0301 -0.5292 vn -0.6876 0.3728 -0.6231 vn -0.8197 0.1235 -0.5593 vn -0.6715 0.1285 -0.7298 vn -0.4834 0.8720 -0.0771 vn -0.8789 0.4224 0.2216 vn -0.6479 0.7458 -0.1551 vn -0.7344 0.6771 0.0466 vn -0.6275 0.7772 -0.0466 vn 0.2524 -0.8354 -0.4882 vn -0.5296 0.8466 -0.0521 vn -0.9367 0.3352 0.1011 vn -0.9688 -0.2409 0.0589 vn -0.1930 -0.4428 -0.8756 vn -0.7870 -0.5961 -0.1593 vn -0.9493 -0.0595 -0.3087 vn -0.9429 -0.0704 -0.3255 vn -0.9913 -0.1290 -0.0275 vn -0.9846 -0.1622 -0.0652 vn -0.0139 -0.9999 0.0079 vn 0.8213 0.4361 -0.3680 vn 0.5092 0.7070 -0.4907 vn 0.6480 0.5629 -0.5131 vn 0.2617 0.5764 -0.7741 vn 0.0980 -0.7998 -0.5923 vn 0.6376 0.6791 -0.3636 vn -0.4943 -0.1211 -0.8608 vn -0.2546 0.6480 -0.7178 vn 0.7927 0.5089 -0.3357 vn 0.0934 0.5729 -0.8143 vn -0.4165 0.4699 -0.7783 vn -0.6944 -0.5996 -0.3979 vn 0.0888 0.6731 -0.7342 vn 0.1469 -0.9780 -0.1484 vn 0.4022 0.6797 -0.6134 vn -0.1349 0.7567 -0.6397 vn -0.3451 0.8923 -0.2912 vn -0.3154 0.2292 -0.9209 vn -0.3213 0.8100 -0.4906 vn 0.8802 -0.0926 -0.4654 vn 0.6745 0.1087 -0.7302 vn -0.1271 0.8440 -0.5210 vn 0.2415 0.5840 -0.7750 vn 0.0200 0.4165 -0.9089 vn -0.0790 0.7331 -0.6755 vn 0.0164 -0.9970 0.0761 vn 0.5929 -0.7692 0.2383 vn -0.4569 0.1526 -0.8763 vn 0.1644 -0.9756 -0.1455 vn 0.3642 0.6972 -0.6175 vn -0.0384 0.7598 -0.6490 vn -0.7076 0.5028 -0.4965 vn 0.1734 -0.5382 -0.8248 vn -0.1926 0.9308 -0.3106 vn -0.2582 0.8552 -0.4494 vn 0.9238 -0.1191 -0.3638 vn 0.5350 0.3337 -0.7762 vn -0.1080 0.6891 -0.7166 vn 0.1629 0.3214 -0.9328 vn -0.0757 0.7455 -0.6621 vn 0.8877 0.0160 -0.4601 vn 0.5996 0.4187 -0.6820 vn 0.8663 -0.1322 -0.4816 vn 0.7008 -0.2395 -0.6719 vn 0.6540 0.1336 -0.7446 vn 0.3624 0.8402 -0.4034 vn 0.0820 0.2386 -0.9677 vn 0.3667 0.6045 -0.7072 vn 0.4013 0.6710 -0.6235 vn 0.4263 0.4266 -0.7976 vn 0.6058 -0.2040 -0.7690 vn 0.6416 0.4908 -0.5895 vn 0.3825 0.5115 -0.7694 vn 0.6760 0.5908 -0.4404 vn -0.4002 0.5384 -0.7416 vn 0.1715 0.4831 -0.8586 vn 0.4471 0.7374 -0.5063 vn -0.2141 0.3943 -0.8937 vn 0.5880 0.1209 -0.7998 vn 0.7786 -0.1673 -0.6048 vn 0.6514 0.3500 -0.6732 vn -0.5352 0.0827 -0.8407 vn -0.1560 0.5982 -0.7860 vn 0.5265 0.3915 -0.7547 vn 0.1234 0.4438 -0.8876 vn 0.6188 0.2950 -0.7281 vn 0.0812 -0.9794 0.1849 vn 0.7373 0.4450 -0.5083 vn 0.7371 0.4453 -0.5084 vn 0.4994 0.6925 -0.5206 vn -0.2291 -0.9732 0.0193 vn 0.6763 0.3912 -0.6242 vn 0.3472 0.2380 -0.9071 vn 0.4893 0.1846 -0.8523 vn -0.2695 0.5476 -0.7921 vn 0.2410 0.7021 -0.6700 vn -0.1318 0.2587 -0.9569 vn 0.2105 0.4535 -0.8660 vn 0.4030 0.4172 -0.8146 vn -0.6195 0.7193 0.3145 vn -0.1075 0.4564 -0.8833 vn 0.4097 0.5915 -0.6944 vn 0.0918 0.8755 -0.4744 vn 0.3577 0.8075 -0.4690 vn 0.5853 0.6432 -0.4936 vn 0.5565 0.2715 -0.7853 vn 0.4412 0.4619 -0.7694 vn -0.1611 0.8401 -0.5180 vn 0.4987 0.2923 -0.8160 vn 0.1528 -0.8350 0.5286 vn 0.8019 0.5456 -0.2435 vn -0.2250 0.6301 -0.7432 vn -0.3982 0.8564 -0.3286 vn 0.4802 0.3149 -0.8187 vn 0.3757 -0.9152 -0.1460 vn 0.7950 0.4583 -0.3975 vn 0.2244 0.0616 -0.9726 vn 0.4846 0.5469 -0.6827 vn 0.7605 0.1313 -0.6359 vn 0.7596 0.0898 -0.6442 vn 0.0382 0.6695 -0.7419 vn 0.3630 0.8831 -0.2974 vn 0.3547 0.7057 -0.6133 vn 0.8707 0.3571 -0.3381 vn 0.2560 0.5199 -0.8150 vn -0.0174 0.5147 -0.8572 vn 0.0171 -0.4102 0.9118 vn 0.3860 0.4538 -0.8032 vn -0.2962 0.9239 -0.2421 vn 0.1200 -0.9928 -0.0051 vn -0.1211 0.5537 -0.8239 vn 0.7657 0.2880 -0.5751 vn -0.0002 0.7031 -0.7111 vn 0.7502 0.4278 -0.5042 vn 0.4418 0.7883 -0.4283 vn 0.5391 0.0688 -0.8394 vn 0.7376 0.3102 -0.5998 vn -0.1903 0.9409 -0.2803 vn -0.6272 0.3169 -0.7114 vn 0.3452 0.3301 -0.8786 vn -0.0824 0.8852 -0.4578 vn 0.3505 0.4474 -0.8228 vn -0.2570 0.9482 -0.1865 vn 0.3520 0.8047 -0.4781 vn 0.6599 0.0894 -0.7461 vn -0.0020 -0.9999 0.0159 vn -0.0227 -0.9984 0.0519 vn 0.6280 0.0178 -0.7780 vn 0.3074 0.8314 -0.4630 vn -0.2469 0.9127 -0.3257 vn 0.4765 0.7439 -0.4686 vn 0.4198 0.6151 -0.6674 vn 0.0307 -0.0594 -0.9978 vn 0.0097 0.3451 -0.9385 vn 0.7652 0.1282 -0.6309 vn 0.7450 -0.6100 0.2700 vn 0.2263 0.0761 -0.9711 vn 0.6604 0.7217 -0.2076 vn 0.7805 0.1029 -0.6166 vn 0.3103 0.6943 -0.6493 vn -0.0070 0.8987 -0.4385 vn -0.1227 0.9212 -0.3692 vn -0.1182 0.3269 -0.9376 vn -0.0151 0.8523 -0.5228 vn 0.3379 0.2358 -0.9112 vn -0.0914 0.5854 -0.8056 vn -0.7327 0.5674 -0.3759 vn 0.5978 0.4933 -0.6319 vn -0.0147 0.9064 -0.4221 vn 0.1141 0.8030 -0.5850 vn 0.1265 0.8115 -0.5704 vn 0.7587 0.4825 -0.4377 vn -0.3919 0.8065 -0.4427 vn 0.2163 0.4838 -0.8480 vn 0.0072 0.9011 -0.4335 vn -0.0297 0.8149 -0.5789 vn -0.5050 0.8393 -0.2016 vn 0.9701 -0.2418 -0.0215 vn -0.2204 0.6624 -0.7160 vn -0.0111 0.6722 -0.7403 vn 0.4671 0.6363 -0.6140 vn 0.3316 0.6497 -0.6841 vn -0.6895 0.2432 -0.6822 vn 0.4915 0.7871 -0.3727 vn 0.1310 -0.9913 0.0116 vn -0.9015 -0.2457 -0.3563 vn -0.4458 0.6199 -0.6457 vn -0.3080 0.7555 -0.5782 vn 0.4589 0.5145 -0.7243 vn 0.5572 0.5622 -0.6112 vn 0.7201 0.3232 -0.6140 vn 0.3477 0.2411 -0.9061 vn 0.4513 0.5895 -0.6699 vn 0.0995 0.7302 -0.6759 vn 0.3865 0.6827 -0.6201 vn 0.1173 0.7677 -0.6299 vn 0.3134 0.3055 -0.8991 vn -0.4316 0.5804 -0.6906 vn -0.0937 0.5173 -0.8507 vn -0.1928 0.3227 -0.9267 vn 0.5473 0.4738 -0.6899 vn 0.0970 0.6500 -0.7537 vn 0.1079 0.5723 -0.8129 vn 0.0609 0.5365 -0.8417 vn -0.2584 0.8453 -0.4677 vn 0.1147 0.6019 -0.7903 vn -0.4779 0.8162 -0.3248 vn -0.7181 0.0872 -0.6905 vn -0.1905 0.5409 -0.8192 vn -0.2028 0.6123 -0.7642 vn -0.6481 0.5273 -0.5494 vn -0.6844 0.3723 -0.6270 vn -0.5345 0.1143 -0.8374 vn -0.5435 0.1880 -0.8181 vn 0.4781 -0.6003 -0.6412 vn 0.0415 0.8286 -0.5583 vn 0.8958 -0.0050 0.4444 vn -0.4504 0.8031 -0.3902 vn -0.1622 0.4657 -0.8700 vn 0.4424 -0.8965 -0.0255 vn 0.7087 -0.0343 -0.7047 vn -0.5524 0.5534 -0.6234 vn -0.2640 0.8089 -0.5254 vn 0.1014 0.7474 -0.6566 vn 0.2852 0.5696 -0.7708 vn 0.3153 0.2658 -0.9110 vn 0.1059 0.3190 -0.9418 vn -0.1480 0.7492 -0.6456 vn 0.0527 0.5164 -0.8547 vn -0.0598 0.6291 -0.7750 vn 0.0990 0.6969 -0.7103 vn -0.0574 -0.5987 -0.7989 vn -0.2071 0.4234 -0.8819 vn 0.4117 -0.7340 -0.5402 vn -0.0184 0.1820 -0.9831 vn 0.3104 0.2073 -0.9277 vn -0.3835 0.6481 -0.6580 vn 0.1699 -0.7928 -0.5854 vn -0.2396 0.8281 -0.5067 vn 0.0212 0.6680 -0.7439 vn 0.2577 -0.6557 -0.7097 vn -0.2522 0.9463 -0.2023 vn 0.3896 0.6134 -0.6870 vn -0.7087 -0.0202 -0.7052 vn 0.0182 -0.9998 0.0130 vn 0.3744 0.3938 -0.8395 vn -0.1357 -0.5164 0.8456 vn -0.1712 0.5303 -0.8303 vn 0.2387 0.4368 -0.8673 vn 0.1826 0.4168 -0.8904 vn 0.3579 0.4662 -0.8091 vn 0.2464 0.4948 -0.8333 vn -0.2026 0.7409 -0.6403 vn -0.1253 0.5538 -0.8231 vn -0.0262 0.9900 -0.1389 vn -0.1806 0.6644 -0.7252 vn 0.4170 -0.8753 0.2451 vn 0.7510 0.0545 -0.6580 vn -0.0813 -0.8072 0.5847 vn 0.4694 0.4054 -0.7844 vn -0.2246 0.7999 -0.5565 vn 0.3664 0.3647 -0.8560 vn 0.0394 0.4248 -0.9044 vn 0.1648 0.4280 -0.8886 vn -0.2563 0.6072 -0.7521 vn 0.4481 0.3236 -0.8334 vn 0.0479 0.0226 -0.9986 vn 0.4611 0.1964 -0.8653 vn 0.3096 0.5696 -0.7614 vn 0.1383 0.0017 -0.9904 vn 0.6906 0.1037 -0.7158 vn 0.7280 0.1065 -0.6772 vn -0.2313 0.6276 -0.7434 vn 0.5414 0.2063 -0.8151 vn -0.2016 0.8236 -0.5301 vn -0.1853 0.9413 -0.2823 vn 0.7303 0.0517 0.6812 vn 0.3073 0.2944 -0.9049 vn -0.2161 0.9340 -0.2845 vn -0.1894 0.5274 -0.8282 vn 0.2892 0.3385 -0.8954 vn -0.3141 0.6162 -0.7222 vn -0.6164 0.7740 0.1448 vn -0.2220 0.3835 -0.8965 vn 0.4136 0.0217 -0.9102 vn 0.6326 0.4650 -0.6194 vn -0.0620 0.5588 -0.8270 vn 0.1679 0.5435 -0.8225 vn 0.0279 0.8621 -0.5059 vn 0.3878 0.4849 -0.7839 vn -0.6664 -0.7430 0.0622 vn 0.2749 0.6753 -0.6844 vn -0.0367 0.5850 -0.8102 vn -0.0467 0.6098 -0.7912 vn -0.2760 0.7170 -0.6401 vn -0.1817 0.5144 -0.8381 vn 0.6754 0.4541 -0.5811 vn 0.2456 0.5128 -0.8227 vn 0.5177 0.2858 -0.8064 vn 0.1852 0.9117 -0.3667 vn 0.1017 0.7708 -0.6289 vn 0.2663 0.8882 -0.3745 vn 0.3850 0.5555 -0.7370 vn 0.7027 0.4766 -0.5283 vn 0.4853 0.0918 -0.8695 vn -0.2671 0.6644 -0.6980 vn -0.3104 0.1666 -0.9359 vn 0.1904 0.7897 -0.5831 vn 0.1698 0.9530 -0.2509 vn -0.0269 0.8208 -0.5706 vn 0.5853 0.1695 -0.7929 vn 0.0057 0.6112 -0.7915 vn -0.1950 0.6088 -0.7690 vn -0.1852 0.5111 -0.8393 vn -0.5648 0.8244 0.0374 vn -0.3278 0.8456 -0.4214 vn 0.1105 0.9584 -0.2631 vn 0.8257 0.3130 0.4693 vn -0.0244 0.7004 -0.7133 vn 0.3398 0.6446 -0.6848 vn 0.7139 0.3967 -0.5770 vn 0.4187 0.5112 -0.7506 vn -0.1119 0.4504 -0.8858 vn -0.2270 0.6215 -0.7498 vn -0.4896 0.6996 -0.5205 vn 0.3399 0.3158 -0.8858 vn 0.7173 0.2973 -0.6302 vn 0.4022 0.1446 -0.9040 vn -0.3883 0.9038 -0.1801 vn 0.1570 0.6230 -0.7663 vn -0.0846 0.2965 -0.9513 vn 0.0835 0.8876 -0.4530 vn 0.3915 0.8355 -0.3855 vn 0.0802 0.5780 -0.8121 vn 0.1130 0.8964 -0.4286 vn 0.9689 0.2026 0.1421 vn -0.1706 0.7689 -0.6162 vn -0.1705 0.7683 -0.6170 vn 0.1259 0.4791 -0.8687 vn 0.8639 0.3912 -0.3173 vn 0.3856 0.1669 -0.9074 vn -0.1287 0.8428 -0.5226 vn -0.0495 0.7713 -0.6346 vn -0.0859 0.7239 -0.6845 vn 0.1757 0.7143 -0.6774 vn 0.0516 0.7647 -0.6423 vn 0.5817 0.4098 -0.7026 vn 0.2316 0.8499 -0.4733 vn -0.1487 0.7696 -0.6209 vn -0.0448 0.5879 -0.8077 vn 0.1345 0.4929 -0.8596 vn 0.5937 0.4106 -0.6920 vn -0.2052 0.8504 -0.4844 vn -0.0958 0.8283 -0.5520 vn 0.5806 -0.1635 -0.7976 vn -0.5422 0.5433 -0.6410 vn -0.3827 0.0426 0.9229 vn 0.0493 0.9004 -0.4323 vn 0.4359 0.2904 -0.8518 vn 0.7483 0.5560 -0.3618 vn 0.7661 0.4540 -0.4550 vn -0.1888 0.3124 -0.9310 vn 0.0278 0.2817 -0.9591 vn 0.6207 0.3193 -0.7160 vn 0.0020 0.2580 -0.9661 vn 0.1594 0.8255 -0.5415 vn -0.0737 0.6784 -0.7310 vn 0.2444 0.6290 -0.7380 vn -0.2455 0.5331 -0.8096 vn 0.6120 0.1772 -0.7708 vn -0.1226 0.8956 -0.4275 vn -0.0772 0.8389 -0.5387 vn -0.0158 0.6708 -0.7415 vn -0.0495 0.5855 -0.8092 vn -0.1049 0.5617 -0.8206 vn -0.0367 0.9049 -0.4239 vn 0.6290 0.1880 -0.7543 vn -0.2349 0.9135 -0.3321 vn -0.0081 0.8534 -0.5212 vn -0.2562 0.7633 -0.5931 vn -0.3742 -0.5424 -0.7522 vn 0.3995 0.8288 -0.3918 vn 0.2771 0.9246 -0.2615 vn 0.1068 0.8552 -0.5071 vn -0.0015 0.2301 -0.9732 vn -0.1160 0.8229 -0.5563 vn -0.4098 0.6769 -0.6114 vn 0.2415 0.3956 -0.8861 vn -0.0423 0.7258 -0.6866 vn -0.3057 0.9218 -0.2386 vn 0.1750 0.9432 -0.2823 vn 0.5694 0.1163 -0.8138 vn 0.1412 0.9581 -0.2494 vn 0.0287 0.5363 -0.8435 vn 0.0820 0.7215 -0.6875 vn 0.0189 0.9053 -0.4243 vn -0.0607 0.6562 -0.7522 vn -0.3821 0.8559 -0.3484 vn 0.0403 -0.7073 -0.7058 vn 0.2406 0.8837 -0.4014 vn -0.0536 0.6176 -0.7847 vn 0.3271 0.8275 -0.4564 vn -0.0629 0.5965 -0.8001 vn 0.4761 -0.8794 0.0041 vn -0.0754 0.0556 -0.9956 vn 0.1139 0.9601 -0.2554 vn 0.0665 0.6944 -0.7165 vn 0.1621 0.4501 -0.8781 vn 0.1707 0.3322 -0.9277 vn -0.0696 0.8377 -0.5417 vn 0.2328 0.6919 -0.6834 vn 0.3056 -0.2379 0.9219 vn -0.1158 0.9237 -0.3651 vn -0.3353 0.7305 -0.5949 vn 0.2809 0.8233 -0.4933 vn 0.1465 0.4232 -0.8941 vn 0.1265 0.8473 -0.5159 vn 0.1427 0.8014 -0.5808 vn -0.1095 -0.9907 0.0803 vn 0.2999 0.3929 -0.8693 vn -0.0970 0.9474 -0.3050 vn 0.2050 -0.0719 0.9761 vn 0.1138 0.6974 0.7076 vn 0.0338 0.6891 -0.7239 vn 0.5385 0.2750 -0.7965 vn 0.3641 0.5184 -0.7738 vn 0.6015 0.3590 -0.7137 vn -0.1673 0.6139 -0.7715 vn -0.1577 0.5326 -0.8316 vn -0.1607 0.5503 -0.8194 vn -0.0438 0.7662 -0.6411 vn 0.2325 0.2799 -0.9314 vn 0.0364 0.9186 -0.3934 vn 0.0644 -0.0623 -0.9960 vn 0.3482 0.4849 -0.8023 vn -0.3503 0.2615 -0.8994 vn 0.5895 0.7616 -0.2693 vn 0.2912 0.5617 -0.7744 vn 0.6279 0.2884 -0.7229 vn 0.4583 0.8076 -0.3711 vn -0.2166 0.6403 -0.7370 vn -0.5197 0.4573 -0.7217 vn -0.3754 0.7296 -0.5716 vn 0.2115 0.9124 -0.3504 vn 0.2660 0.4952 -0.8271 vn 0.0202 0.6189 -0.7852 vn -0.0858 0.4772 -0.8746 vn 0.1471 0.5692 -0.8090 vn -0.4221 0.6347 -0.6473 vn -0.2542 0.5692 -0.7819 vn -0.6432 0.2177 -0.7341 vn -0.1689 0.4368 -0.8836 vn -0.3490 0.2409 -0.9056 vn -0.0129 0.7116 -0.7025 vn 0.1771 0.9413 -0.2874 vn 0.2216 0.5084 -0.8321 vn 0.0718 0.8136 -0.5770 vn -0.0947 0.9423 -0.3212 vn 0.7459 0.2830 -0.6030 vn -0.0470 0.6324 -0.7732 vn 0.2733 0.3666 -0.8893 vn 0.2478 0.5582 -0.7918 vn 0.6898 0.6129 -0.3854 vn 0.2322 0.6683 -0.7067 vn 0.4966 0.7028 -0.5093 vn -0.1858 0.6272 -0.7564 vn 0.3575 0.4665 -0.8090 vn -0.0830 0.6042 -0.7925 vn -0.0511 0.7412 -0.6693 vn -0.3797 0.5352 -0.7546 vn 0.3326 -0.9381 0.0964 vn -0.0051 0.8993 -0.4372 vn -0.3581 0.8366 -0.4146 vn -0.6309 0.7636 -0.1376 vn 0.3486 0.4334 -0.8310 vn 0.2983 0.2756 -0.9138 vn -0.6391 -0.7387 -0.2143 vn 0.3677 0.8393 -0.4005 vn 0.3201 0.6596 -0.6801 vn 0.4670 0.5935 -0.6555 vn 0.0138 0.6215 -0.7833 vn -0.0159 0.5045 -0.8632 vn 0.0222 0.7629 -0.6461 vn 0.3170 0.3378 -0.8862 vn -0.0050 0.7621 -0.6474 vn 0.3853 0.4084 -0.8275 vn -0.4997 -0.7873 -0.3612 vn -0.3041 0.3030 -0.9032 vn -0.3540 0.7612 -0.5434 vn -0.2613 0.9086 -0.3258 vn 0.5115 0.2682 -0.8164 vn 0.1072 0.6723 -0.7325 vn 0.2623 0.7276 -0.6339 vn 0.0041 0.8976 -0.4407 vn 0.8804 -0.4694 -0.0676 vn -0.6343 0.3194 -0.7040 vn 0.3675 0.2458 -0.8970 vn -0.0689 0.1451 -0.9870 vn -0.2855 0.3156 -0.9049 vn -0.2574 -0.1034 -0.9608 vn -0.4892 0.3476 -0.7999 vn -0.4150 0.0734 -0.9069 vn 0.0278 -0.9747 -0.2216 vn -0.2173 -0.2696 -0.9382 vn -0.3975 -0.0395 -0.9167 vn -0.3963 0.3616 -0.8439 vn -0.3461 0.3238 -0.8805 vn -0.4374 0.3601 -0.8240 vn 0.0431 0.7559 0.6533 vn -0.0781 0.0523 -0.9956 vn -0.4651 0.0564 -0.8835 vn -0.4154 0.5280 -0.7407 vn -0.3675 -0.0643 -0.9278 vn -0.3355 0.3133 -0.8884 vn 0.6378 -0.1516 -0.7551 vn 0.5305 -0.6780 -0.5088 vn -0.5646 -0.0721 -0.8222 vn -0.5857 0.1418 -0.7980 vn 0.0817 -0.8702 -0.4859 vn 0.5785 -0.1506 -0.8016 vn -0.5768 -0.7856 -0.2240 vn -0.7042 -0.0062 -0.7100 vn -0.4113 0.2821 -0.8667 vn -0.5660 -0.6539 -0.5020 vn 0.4166 0.0162 -0.9090 vn -0.2664 0.7633 -0.5885 vn -0.0626 0.0578 -0.9964 vn -0.1492 0.3070 -0.9399 vn -0.3632 0.0792 -0.9283 vn -0.4643 0.2453 -0.8510 vn 0.4066 -0.6906 0.5981 vn 0.5199 -0.3210 -0.7917 vn -0.4375 -0.0329 -0.8986 vn -0.5631 -0.6777 -0.4729 vn 0.3965 -0.2718 -0.8769 vn 0.3101 -0.0512 -0.9493 vn -0.2809 -0.4507 -0.8473 vn 0.0109 -0.9992 -0.0389 vn -0.6911 -0.7227 -0.0044 vn -0.4032 -0.3365 -0.8510 vn -0.5707 0.2578 -0.7796 vn -0.6588 0.7014 -0.2721 vn 0.3799 -0.7118 -0.5908 vn -0.7426 -0.3811 -0.5507 vn 0.6785 -0.0765 -0.7306 vn -0.3356 0.3533 -0.8732 vn 0.2725 0.1107 -0.9558 vn 0.3134 -0.5280 -0.7893 vn 0.3685 -0.2870 -0.8842 vn 0.0515 0.1464 -0.9879 vn 0.2584 0.2209 -0.9404 vn -0.4076 -0.8355 -0.3686 vn -0.1730 0.2318 -0.9573 vn -0.5329 -0.6047 -0.5918 vn 0.5378 -0.6802 -0.4981 vn -0.1389 0.2052 -0.9688 vn -0.4610 -0.5246 -0.7157 vn -0.8850 -0.0341 -0.4642 vn -0.1090 0.9859 -0.1268 vn -0.3799 -0.6341 -0.6735 vn -0.5759 -0.5835 -0.5726 vn 0.3601 -0.7863 -0.5020 vn 0.2847 -0.5455 -0.7883 vn 0.1519 -0.1625 -0.9749 vn -0.5469 0.0577 -0.8352 vn 0.0832 -0.5898 -0.8032 vn -0.0954 -0.3235 -0.9414 vn -0.3617 -0.4019 -0.8412 vn 0.8307 0.3665 -0.4191 vn -0.1323 -0.7175 -0.6839 vn 0.1116 -0.1669 -0.9796 vn -0.0611 0.3458 -0.9363 vn -0.0744 0.4022 -0.9125 vn -0.0321 0.4818 -0.8757 vn 0.2496 -0.9276 -0.2780 vn 0.0520 0.1274 -0.9905 vn 0.0885 -0.9044 -0.4174 vn -0.0695 0.7287 -0.6813 vn 0.0524 -0.8849 -0.4628 vn -0.0743 -0.9954 -0.0606 vn -0.0175 0.1544 -0.9879 vn -0.6916 0.3147 -0.6501 vn -0.8199 -0.0928 -0.5650 vn 0.1033 -0.5200 -0.8479 vn -0.0160 -0.0779 -0.9968 vn -0.1012 0.2937 -0.9505 vn -0.1930 -0.0319 -0.9807 vn 0.0940 -0.4492 -0.8885 vn -0.3555 0.3061 -0.8831 vn -0.8297 0.0755 -0.5531 vn -0.5221 -0.4171 -0.7439 vn -0.4887 -0.0620 -0.8702 vn -0.4975 -0.0419 -0.8665 vn -0.1643 -0.1515 -0.9747 vn -0.4275 -0.6877 -0.5867 vn -0.5990 -0.7017 -0.3857 vn -0.1152 0.2310 -0.9661 vn 0.1099 -0.6280 -0.7704 vn 0.0304 -0.0061 -0.9995 vn 0.0272 -0.9992 -0.0306 vn -0.8170 0.5051 -0.2782 vn -0.7586 0.2977 -0.5796 vn -0.1633 -0.1465 -0.9756 vn 0.3715 -0.6315 -0.6806 vn 0.2617 -0.5054 -0.8222 vn 0.2927 -0.4226 -0.8578 vn 0.0143 0.2104 -0.9775 vn 0.1475 0.3868 -0.9103 vn 0.1058 -0.0315 -0.9939 vn -0.5385 -0.0754 -0.8392 vn -0.5974 0.1570 -0.7865 vn -0.4824 -0.6181 -0.6207 vn -0.1563 0.0222 -0.9875 vn -0.4010 -0.0422 -0.9151 vn -0.1396 0.0712 -0.9876 vn -0.0958 0.1960 -0.9759 vn -0.2762 0.1604 -0.9476 vn -0.4138 0.5280 -0.7416 vn -0.3820 0.3750 -0.8447 vn -0.3488 0.1349 -0.9274 vn 0.2886 0.1654 -0.9431 vn -0.5766 0.1867 -0.7954 vn -0.3704 -0.1023 -0.9232 vn -0.0997 0.0637 -0.9930 vn -0.6010 -0.4800 -0.6390 vn -0.0849 0.0071 -0.9964 vn -0.0208 -0.1406 -0.9898 vn -0.5282 0.1285 -0.8394 vn -0.0307 -0.0882 -0.9956 vn -0.7634 -0.5912 -0.2602 vn 0.5065 0.0656 -0.8598 vn -0.1938 0.0649 -0.9789 vn -0.2825 0.1976 -0.9387 vn -0.2921 0.3287 -0.8981 vn -0.0910 -0.2578 -0.9619 vn -0.1891 0.0697 -0.9795 vn -0.1641 0.0879 -0.9825 vn 0.2223 -0.7125 -0.6655 vn 0.1173 -0.1109 -0.9869 vn 0.1109 -0.0830 -0.9904 vn -0.1871 0.1353 -0.9730 vn -0.3007 -0.0057 -0.9537 vn 0.0619 0.4287 -0.9013 vn -0.2542 0.1672 -0.9526 vn 0.1303 -0.2308 -0.9642 vn 0.0393 -0.9826 0.1816 vn -0.1213 0.4117 -0.9032 vn -0.3404 0.3433 -0.8754 vn -0.7499 0.0716 -0.6576 vn -0.6299 0.1819 -0.7551 vn -0.7987 -0.1142 -0.5908 vn -0.8340 -0.2429 -0.4954 vn 0.1367 -0.5413 -0.8296 vn -0.4968 0.8517 0.1666 vn -0.2339 -0.1735 -0.9566 vn -0.2121 0.2694 -0.9394 vn 0.0918 -0.5260 -0.8455 vn 0.0072 -0.1282 -0.9917 vn -0.0175 -0.1581 -0.9873 vn -0.4515 0.3448 -0.8230 vn -0.5948 0.1184 -0.7951 vn -0.0473 -0.0858 -0.9952 vn -0.0315 -0.3456 -0.9378 vn 0.1508 -0.3838 -0.9110 vn 0.1543 -0.3971 -0.9047 vn 0.3826 0.5115 0.7694 vn 0.5597 -0.3899 -0.7312 vn 0.2736 -0.8790 -0.3905 vn 0.1474 -0.4823 -0.8635 vn -0.6823 -0.2008 -0.7030 vn -0.1815 0.1498 -0.9719 vn 0.5168 -0.3502 -0.7812 vn 0.1622 -0.0481 -0.9856 vn 0.3823 0.5786 -0.7205 vn 0.6078 -0.7886 -0.0935 vn 0.2040 -0.6878 0.6966 vn -0.0134 -0.9999 0.0079 vn -0.6565 0.3423 -0.6722 vn -0.0544 0.4532 -0.8897 vn -0.6128 -0.0687 -0.7872 vn 0.3094 -0.7497 -0.5850 vn 0.2281 -0.4824 -0.8457 vn -0.6472 -0.2018 -0.7351 vn -0.3067 0.1816 -0.9343 vn 0.3555 0.0425 -0.9337 vn 0.3687 -0.0310 -0.9290 vn 0.4170 0.4775 -0.7733 vn 0.1795 -0.2277 -0.9570 vn -0.3662 0.0841 -0.9267 vn 0.4785 -0.4129 -0.7750 vn -0.4176 -0.0191 -0.9084 vn -0.2598 -0.4605 -0.8488 vn -0.3787 -0.5646 -0.7333 vn -0.5703 0.2575 -0.7800 vn 0.1026 -0.9025 -0.4184 vn -0.0079 -0.4437 -0.8961 vn -0.0149 -0.4530 -0.8914 vn -0.1096 -0.8463 -0.5214 vn 0.2089 -0.3717 -0.9046 vn -0.6609 -0.3651 -0.6557 vn -0.6473 0.2830 -0.7078 vn -0.2685 -0.7487 -0.6061 vn -0.1082 -0.5796 -0.8077 vn -0.0810 0.2922 -0.9529 vn -0.4555 -0.2710 -0.8480 vn 0.6208 -0.0694 -0.7809 vn -0.1114 -0.7653 -0.6340 vn -0.2300 -0.2114 -0.9500 vn -0.3337 -0.2720 -0.9026 vn -0.2758 -0.6617 -0.6972 vn -0.4811 -0.8764 -0.0206 vn -0.4453 -0.4408 -0.7794 vn -0.9818 0.1516 0.1144 vn 0.1962 -0.4658 -0.8629 vn -0.4553 0.7592 0.4650 vn -0.5476 -0.3744 -0.7483 vn -0.2951 -0.2606 -0.9192 vn -0.4140 -0.2908 -0.8625 vn -0.1845 -0.5249 -0.8309 vn 0.7288 0.1757 -0.6619 vn 0.6599 -0.2152 -0.7199 vn 0.5530 -0.0003 -0.8332 vn 0.0572 -0.1327 -0.9895 vn -0.3474 0.2048 -0.9151 vn -0.5141 0.4783 -0.7120 vn -0.0337 -0.6400 -0.7676 vn -0.5098 0.4541 -0.7307 vn -0.6413 -0.6262 -0.4434 vn -0.3356 0.3175 -0.8869 vn -0.1905 -0.7902 -0.5825 vn 0.2532 -0.6244 -0.7389 vn 0.2430 -0.4590 -0.8546 vn -0.0177 -0.9337 0.3576 vn -0.8111 0.2037 -0.5482 vn 0.5753 0.1576 -0.8026 vn 0.4124 -0.7732 -0.4817 vn -0.3335 -0.2716 -0.9028 vn -0.5543 -0.2636 -0.7894 vn -0.3805 -0.4504 -0.8077 vn 0.5509 0.1364 -0.8234 vn -0.0248 -0.2072 -0.9780 vn -0.5080 -0.6500 -0.5652 vn 0.4923 -0.1646 -0.8547 vn 0.6583 0.0875 -0.7476 vn -0.3621 0.1469 0.9205 vn 0.2174 -0.9216 -0.3214 vn -0.0286 -0.2761 -0.9607 vn -0.1494 -0.5061 -0.8494 vn -0.2591 -0.3035 -0.9169 vn 0.1415 -0.3970 -0.9068 vn -0.5939 -0.1999 -0.7793 vn -0.4052 -0.6112 -0.6799 vn 0.2335 0.0433 -0.9714 vn 0.2822 -0.6618 -0.6946 vn -0.4730 -0.2390 0.8480 vn -0.6878 -0.0977 -0.7193 vn -0.0238 0.1251 0.9919 vn 0.6657 -0.2094 -0.7163 vn 0.5385 0.0574 -0.8406 vn -0.9627 0.0192 -0.2699 vn 0.9200 -0.1313 -0.3693 vn -0.0591 -0.2408 -0.9688 vn 0.1004 0.0880 -0.9911 vn -0.0494 -0.6830 -0.7288 vn -0.0117 -0.9984 0.0558 vn 0.5081 -0.4890 -0.7090 vn 0.5390 -0.2297 -0.8104 vn 0.8061 -0.2750 -0.5240 vn 0.0475 -0.2531 -0.9663 vn -0.0435 -0.0127 -0.9990 vn 0.6499 -0.2587 -0.7146 vn 0.5199 -0.0463 -0.8530 vn 0.4076 0.0886 -0.9088 vn -0.2906 0.1339 -0.9474 vn -0.1706 0.4225 -0.8902 vn -0.3841 -0.2731 -0.8820 vn 0.2384 0.0634 -0.9691 vn 0.3760 -0.7368 -0.5619 vn -0.5501 0.2174 -0.8063 vn 0.3353 0.0483 -0.9409 vn -0.6796 0.4181 -0.6027 vn -0.2223 0.0399 -0.9742 vn 0.1755 -0.9801 -0.0932 vn 0.4825 0.0144 -0.8758 vn 0.1506 -0.4646 -0.8726 vn 0.1088 0.2269 -0.9678 vn 0.2304 0.0568 -0.9714 vn -0.7757 -0.5860 -0.2342 vn -0.7375 -0.1752 -0.6522 vn -0.4361 -0.2295 -0.8701 vn -0.2499 -0.3125 -0.9165 vn -0.5439 -0.7489 -0.3786 vn -0.3559 0.4368 -0.8262 vn 0.0217 -0.1136 -0.9933 vn -0.5437 -0.6882 -0.4803 vn -0.5687 0.3954 -0.7213 vn 0.3717 -0.6379 -0.6744 vn 0.6501 -0.4424 -0.6177 vn 0.6722 -0.1168 -0.7311 vn 0.7468 -0.1864 -0.6383 vn 0.7743 -0.1960 -0.6016 vn 0.4934 -0.0470 -0.8686 vn 0.0265 -0.3521 -0.9356 vn -0.0554 -0.4367 -0.8979 vn 0.0242 -0.2932 -0.9557 vn -0.0687 -0.2548 -0.9645 vn -0.2128 -0.1063 -0.9713 vn 0.0220 -0.6169 -0.7867 vn 0.7985 0.4583 -0.3903 vn 0.4530 -0.4431 -0.7736 vn 0.5248 -0.4901 -0.6960 vn 0.3759 0.0862 -0.9227 vn 0.6137 0.0102 -0.7895 vn 0.6131 0.1083 -0.7826 vn 0.3368 0.0666 -0.9392 vn 0.3851 0.1476 -0.9110 vn 0.3227 0.0919 -0.9420 vn -0.5157 0.0191 -0.8565 vn -0.3806 -0.4081 -0.8298 vn 0.0458 0.1964 -0.9795 vn -0.7093 0.5028 -0.4941 vn -0.8735 -0.2698 -0.4052 vn -0.3275 -0.7749 -0.5406 vn -0.2507 0.1644 -0.9540 vn -0.5281 -0.0589 -0.8471 vn -0.2467 -0.7547 -0.6079 vn -0.7992 0.4947 -0.3413 vn 0.3962 -0.6386 -0.6597 vn 0.5362 -0.0863 -0.8397 vn 0.4536 -0.0386 -0.8904 vn 0.0125 -0.9726 0.2323 vn 0.5942 -0.7112 -0.3756 vn -0.4476 0.3030 -0.8413 vn -0.0084 0.1453 -0.9894 vn 0.4767 -0.4306 -0.7663 vn 0.4825 -0.4149 -0.7714 vn 0.2565 -0.6779 -0.6890 vn 0.3319 0.1009 -0.9379 vn 0.4216 -0.2910 -0.8589 vn 0.4620 -0.2341 -0.8555 vn 0.4305 -0.1787 -0.8847 vn 0.4634 0.0174 -0.8860 vn 0.4468 0.0421 -0.8936 vn -0.4786 0.8726 0.0981 vn -0.1412 -0.1117 -0.9837 vn -0.2607 -0.9521 -0.1598 vn 0.5374 -0.6410 -0.5481 vn 0.1390 -0.1961 -0.9707 vn -0.4446 0.3498 -0.8246 vn -0.0096 -0.8271 -0.5619 vn -0.8188 0.5013 -0.2796 vn -0.5777 -0.0440 -0.8151 vn -0.6226 -0.4272 -0.6556 vn 0.6593 -0.0589 -0.7495 vn 0.2752 -0.5065 -0.8171 vn 0.2571 -0.1143 -0.9596 vn 0.4472 0.1883 -0.8744 vn -0.6175 -0.1063 -0.7793 vn -0.1146 -0.8415 -0.5279 vn -0.1099 -0.5714 -0.8133 vn 0.2097 -0.6428 -0.7367 vn 0.2172 -0.5528 -0.8045 vn 0.3133 -0.1549 -0.9369 vn 0.3157 -0.1365 -0.9390 vn 0.4378 0.2021 -0.8760 vn 0.4383 0.1995 -0.8764 vn 0.4191 0.1505 -0.8954 vn 0.4641 -0.0308 -0.8852 vn 0.4146 0.1175 -0.9024 vn 0.0476 -0.1281 -0.9906 vn -0.0893 -0.1037 0.9906 vn 0.0851 0.1706 -0.9817 vn -0.7432 0.1471 -0.6527 vn 0.1864 -0.9748 0.1225 vn 0.1442 0.0063 -0.9895 vn 0.3955 -0.2664 -0.8790 vn 0.3723 -0.2565 -0.8920 vn 0.3638 -0.1183 -0.9239 vn 0.3544 -0.1365 -0.9251 vn -0.2121 -0.2109 -0.9542 vn -0.1709 -0.4855 -0.8574 vn 0.0260 0.1856 -0.9823 vn -0.2201 0.2995 -0.9283 vn -0.3592 0.4813 -0.7996 vn -0.1504 0.1118 -0.9823 vn 0.4399 -0.0079 -0.8980 vn 0.5355 -0.5445 -0.6456 vn 0.4734 -0.4210 -0.7737 vn 0.5870 -0.3997 -0.7041 vn 0.2040 -0.5481 -0.8112 vn 0.4383 -0.2047 -0.8752 vn 0.4275 0.0058 -0.9040 vn 0.4847 -0.0469 -0.8734 vn 0.4621 0.1303 -0.8772 vn 0.4228 0.0366 -0.9055 vn 0.7826 -0.2763 -0.5578 vn -0.6118 0.6652 -0.4280 vn 0.2835 0.2771 -0.9181 vn 0.1307 0.4658 -0.8752 vn -0.2930 -0.1902 -0.9370 vn -0.0356 0.2535 -0.9667 vn -0.1992 -0.5296 -0.8245 vn 0.3803 -0.4043 -0.8318 vn 0.3628 -0.1921 -0.9118 vn 0.1394 -0.4309 -0.8916 vn 0.2489 -0.1180 -0.9613 vn 0.2771 0.1498 -0.9491 vn 0.2056 0.0373 -0.9779 vn 0.4758 -0.0296 -0.8790 vn 0.9210 0.3113 -0.2340 vn -0.3724 0.5979 -0.7098 vn 0.2146 -0.4369 -0.8735 vn -0.3090 -0.4042 -0.8609 vn 0.8928 0.3021 0.3341 vn -0.2368 -0.1467 -0.9604 vn -0.3092 0.2296 -0.9229 vn -0.0846 -0.8423 0.5323 vn -0.1333 0.2814 -0.9503 vn -0.2002 -0.4898 -0.8486 vn -0.4182 0.2901 -0.8608 vn -0.1928 -0.2098 -0.9586 vn 0.4784 -0.4236 -0.7692 vn 0.4064 -0.2197 -0.8869 vn 0.2242 -0.3345 -0.9153 vn 0.3116 0.0601 -0.9483 vn 0.3608 0.2275 -0.9045 vn 0.3234 -0.1889 -0.9272 vn -0.0885 0.4776 -0.8741 vn -0.0430 0.2891 -0.9563 vn -0.0229 0.0081 -0.9997 vn 0.0142 -0.3418 -0.9397 vn -0.2606 0.1263 -0.9572 vn -0.5243 -0.1357 -0.8407 vn -0.1620 -0.4212 -0.8924 vn -0.1756 0.3917 -0.9032 vn -0.5418 -0.2767 -0.7937 vn 0.1555 -0.4437 -0.8826 vn 0.1898 -0.2187 -0.9572 vn 0.1185 -0.1034 -0.9876 vn 0.0162 -0.3990 -0.9168 vn 0.2935 0.1827 -0.9383 vn 0.3481 0.1951 -0.9169 vn 0.2589 -0.0655 -0.9637 vn 0.1867 -0.0343 -0.9818 vn -0.5291 -0.0310 -0.8480 vn -0.4709 -0.0564 -0.8804 vn -0.1586 0.4588 -0.8743 vn -0.7857 -0.4136 0.4600 vn 0.7077 0.0794 -0.7021 vn 0.3254 -0.1869 -0.9269 vn 0.1383 -0.4313 -0.8915 vn 0.1164 -0.1519 -0.9815 vn 0.1774 -0.6731 -0.7180 vn 0.2741 -0.5765 -0.7698 vn 0.3439 -0.3231 -0.8816 vn 0.2694 -0.2440 -0.9316 vn 0.2884 -0.4017 -0.8692 vn 0.3452 0.1184 -0.9310 vn 0.0163 -0.3992 -0.9167 vn -0.2482 -0.2037 -0.9470 vn -0.1857 0.1485 -0.9713 vn -0.6780 0.3579 -0.6421 vn -0.3739 0.0255 -0.9271 vn -0.2658 -0.3644 -0.8925 vn -0.5650 -0.2280 -0.7929 vn 0.3275 -0.3684 -0.8701 vn 0.1922 0.0315 -0.9809 vn 0.6666 0.0036 -0.7454 vn 0.4109 0.0734 -0.9087 vn 0.6648 -0.2145 -0.7156 vn 0.4199 0.1644 -0.8926 vn 0.4682 0.2161 -0.8568 vn 0.4434 0.0099 -0.8963 vn -0.2547 -0.5164 -0.8176 vn -0.0553 -0.4440 -0.8943 vn -0.0608 -0.9964 0.0597 vn 0.2354 0.2594 -0.9366 vn 0.2172 0.1793 -0.9595 vn -0.6499 0.1727 -0.7402 vn -0.0115 -0.3720 -0.9282 vn 0.0695 -0.1017 -0.9924 vn 0.0074 -0.4527 -0.8916 vn 0.0723 -0.6396 -0.7653 vn 0.3793 -0.0430 -0.9243 vn 0.3652 -0.1091 -0.9245 vn -0.7939 -0.2739 -0.5428 vn -0.2552 0.0721 -0.9642 vn -0.3337 0.0244 -0.9424 vn -0.0392 -0.2602 -0.9648 vn -0.2360 0.0685 -0.9693 vn -0.5391 0.1934 -0.8198 vn 0.2274 0.2481 -0.9417 vn -0.3839 -0.1902 -0.9036 vn -0.1794 0.0051 -0.9838 vn 0.3529 -0.4876 -0.7986 vn 0.4522 0.3548 -0.8183 vn 0.0317 -0.4451 -0.8949 vn 0.2102 0.0738 -0.9749 vn 0.1846 -0.3762 -0.9080 vn 0.2337 -0.4238 -0.8751 vn 0.3376 -0.3636 -0.8682 vn 0.4795 -0.1405 -0.8662 vn 0.5748 0.0978 -0.8124 vn 0.4203 0.0286 -0.9069 vn 0.0280 -0.9996 0.0086 vn 0.3767 -0.9242 -0.0629 vn -0.0804 0.0313 -0.9963 vn 0.0107 -0.2401 -0.9707 vn -0.3468 -0.3035 -0.8875 vn 0.1974 -0.8540 -0.4813 vn -0.0796 -0.3695 -0.9258 vn 0.1453 -0.4666 -0.8725 vn 0.3169 0.1243 -0.9403 vn 0.3763 0.0215 -0.9263 vn 0.3224 -0.3750 -0.8692 vn 0.4175 0.1641 -0.8937 vn 0.4054 0.1514 -0.9015 vn -0.3084 0.2313 -0.9227 vn 0.0712 0.0914 -0.9933 vn -0.5438 0.2749 -0.7929 vn 0.2254 0.1204 -0.9668 vn 0.6032 0.0427 -0.7965 vn 0.1934 -0.5625 -0.8039 vn 0.2022 0.0036 -0.9793 vn 0.0487 -0.3849 -0.9217 vn 0.2313 -0.5633 -0.7932 vn -0.0393 -0.3231 -0.9456 vn 0.3236 -0.1607 -0.9325 vn 0.1053 0.0818 -0.9911 vn 0.2350 -0.0277 -0.9716 vn -0.0953 -0.7741 -0.6259 vn -0.6244 -0.3274 -0.7092 vn 0.0571 0.0252 -0.9980 vn -0.4298 0.4727 -0.7693 vn -0.6157 0.0494 -0.7864 vn -0.2197 -0.9591 -0.1786 vn 0.1973 -0.3203 -0.9265 vn 0.1523 0.0703 -0.9858 vn 0.0791 -0.3325 -0.9398 vn 0.2463 -0.6807 -0.6899 vn -0.1208 -0.2863 -0.9505 vn 0.0249 0.0074 -0.9997 vn 0.3226 -0.3751 -0.8690 vn 0.2322 -0.1160 -0.9657 vn 0.2255 -0.1030 -0.9688 vn 0.2185 0.1760 -0.9598 vn -0.5826 0.2997 -0.7555 vn -0.2042 -0.2195 -0.9540 vn -0.9530 0.0655 -0.2956 vn 0.1727 -0.2171 -0.9607 vn 0.3932 -0.6078 -0.6899 vn 0.3587 -0.2993 -0.8842 vn 0.1131 -0.2656 -0.9574 vn 0.1231 -0.4347 -0.8921 vn 0.0814 -0.3862 -0.9188 vn 0.2525 -0.0265 -0.9672 vn 0.3349 0.2486 -0.9089 vn 0.2447 -0.0174 -0.9695 vn -0.2509 0.0022 -0.9680 vn 0.2288 0.1813 -0.9564 vn 0.0984 0.4071 -0.9081 vn 0.0498 0.3386 -0.9396 vn 0.0362 -0.0148 -0.9992 vn -0.3751 -0.2239 -0.8995 vn -0.5383 0.0839 -0.8386 vn 0.2696 0.2642 -0.9260 vn 0.0053 -0.4154 -0.9096 vn 0.3748 0.1630 -0.9127 vn 0.3671 -0.3040 -0.8791 vn 0.3587 -0.0809 -0.9300 vn 0.4073 -0.3198 -0.8555 vn 0.4020 -0.2468 -0.8817 vn 0.5194 -0.1512 -0.8410 vn 0.4634 -0.3461 -0.8158 vn 0.3463 -0.2152 -0.9131 vn 0.2864 0.1975 -0.9375 vn 0.0859 0.0814 -0.9930 vn -0.0290 0.0506 -0.9983 vn -0.1482 0.5178 -0.8426 vn -0.2997 0.4276 -0.8529 vn -0.2588 0.0262 -0.9656 vn 0.1432 -0.5885 -0.7957 vn 0.1918 -0.7929 -0.5785 vn 0.1698 -0.2188 -0.9609 vn 0.1901 0.0266 -0.9814 vn 0.3292 0.1787 -0.9272 vn 0.2912 0.1531 -0.9443 vn 0.3180 0.0193 -0.9479 vn 0.2091 0.0327 -0.9773 vn 0.3573 0.3006 -0.8843 vn -0.2810 -0.4656 -0.8392 vn -0.7797 -0.0960 0.6188 vn -0.9727 0.2273 -0.0464 vn 0.0234 0.3236 -0.9459 vn 0.1370 0.4376 -0.8887 vn -0.2495 0.5184 -0.8179 vn -0.5537 -0.4735 -0.6850 vn -0.3389 0.4350 -0.8342 vn 0.0917 -0.6050 -0.7909 vn 0.1210 -0.7910 -0.5998 vn 0.0938 -0.7728 -0.6276 vn 0.1961 0.0624 -0.9786 vn 0.0537 -0.4738 -0.8790 vn -0.1258 -0.6195 -0.7748 vn 0.1353 -0.3917 -0.9101 vn -0.1802 0.4927 -0.8513 vn -0.4190 -0.2647 -0.8685 vn 0.5901 0.1129 -0.7994 vn -0.0102 0.0693 -0.9975 vn -0.2368 0.3827 -0.8930 vn 0.0397 -0.1187 -0.9921 vn 0.1504 -0.1876 -0.9707 vn 0.1628 0.0755 -0.9838 vn 0.1003 -0.6019 -0.7923 vn 0.1724 -0.4568 -0.8727 vn 0.0183 -0.4528 -0.8914 vn 0.0802 -0.2864 -0.9548 vn 0.2388 0.2063 -0.9489 vn 0.1461 -0.0582 -0.9875 vn 0.5285 -0.1823 -0.8291 vn 0.1963 0.3916 -0.8990 vn 0.0200 -0.9993 -0.0309 vn 0.0521 -0.5585 -0.8278 vn 0.0801 -0.2338 -0.9690 vn 0.0640 -0.3227 -0.9443 vn 0.0357 -0.6817 -0.7308 vn 0.2311 0.0727 -0.9702 vn 0.1017 -0.3020 -0.9479 vn 0.1304 -0.2719 -0.9535 vn 0.2282 -0.3630 -0.9034 vn 0.4655 0.1335 -0.8749 vn 0.4807 0.2039 -0.8528 vn 0.4042 0.3835 -0.8304 vn 0.3646 0.1509 -0.9188 vn -0.5503 -0.2593 -0.7937 vn 0.1735 0.1988 -0.9646 vn -0.6827 -0.4308 -0.5902 vn -0.6343 0.0135 -0.7730 vn 0.1950 0.1728 -0.9655 vn 0.1796 0.0594 -0.9819 vn 0.1794 -0.0529 -0.9824 vn 0.2978 -0.7181 -0.6290 vn 0.3482 -0.2883 -0.8920 vn -0.0127 0.0272 -0.9996 vn 0.1117 -0.2814 -0.9531 vn 0.1395 -0.0607 -0.9884 vn -0.3942 -0.6511 -0.6486 vn -0.4150 -0.7553 -0.5072 vn -0.3006 -0.2445 -0.9219 vn -0.2721 -0.3570 -0.8936 vn -0.4179 0.3461 -0.8400 vn 0.0443 -0.0525 -0.9976 vn -0.1005 0.0777 -0.9919 vn 0.0743 -0.5224 -0.8495 vn 0.1414 0.0256 -0.9896 vn 0.2608 -0.2159 -0.9409 vn 0.1786 -0.7475 -0.6398 vn 0.0730 -0.2718 -0.9596 vn 0.3606 -0.3223 -0.8753 vn 0.1979 -0.3720 -0.9069 vn 0.1634 0.0480 -0.9854 vn 0.3761 -0.1674 -0.9113 vn 0.2623 -0.2146 -0.9408 vn 0.2428 -0.1711 -0.9549 vn 0.3184 0.0352 -0.9473 vn -0.4686 0.0580 -0.8815 vn -0.6802 0.1059 -0.7254 vn 0.1003 -0.3989 -0.9115 vn -0.1599 0.2750 -0.9480 vn 0.3883 -0.2061 -0.8982 vn -0.5095 0.1428 0.8485 vn -0.8523 -0.1529 -0.5001 vn -0.3795 -0.1911 -0.9052 vn 0.2252 -0.7581 -0.6121 vn 0.0080 -0.4145 -0.9100 vn 0.1943 -0.6113 -0.7672 vn 0.0345 -0.2967 -0.9543 vn 0.2110 -0.2631 -0.9414 vn 0.3618 -0.3007 -0.8824 vn 0.3849 -0.1696 -0.9072 vn 0.3524 -0.0092 -0.9358 vn 0.2089 0.2547 -0.9442 vn 0.0688 0.0523 -0.9963 vn -0.4140 -0.3367 -0.8457 vn 0.0322 0.0608 -0.9976 vn 0.0764 -0.2295 -0.9703 vn 0.2637 -0.2544 -0.9305 vn 0.3229 -0.3641 -0.8736 vn 0.2115 0.1308 -0.9686 vn 0.2097 -0.2766 -0.9378 vn 0.9085 -0.4078 -0.0915 vn -0.3464 0.0143 -0.9380 vn -0.1872 0.2027 -0.9612 vn 0.3055 0.2494 -0.9189 vn 0.2102 0.2284 -0.9506 vn 0.2116 -0.4431 -0.8711 vn 0.0956 -0.1741 -0.9801 vn 0.1049 -0.4712 -0.8758 vn 0.1498 -0.0498 -0.9875 vn 0.2398 -0.2259 -0.9442 vn 0.2081 0.1131 -0.9715 vn 0.0809 -0.1917 -0.9781 vn 0.1490 0.2752 -0.9498 vn 0.1458 0.3533 -0.9241 vn 0.0156 0.2406 -0.9705 vn -0.1496 0.0658 -0.9866 vn 0.3709 -0.1517 -0.9162 vn -0.4157 -0.3047 -0.8570 vn -0.3737 -0.2593 -0.8906 vn 0.3551 -0.2064 -0.9118 vn 0.1351 -0.5085 -0.8504 vn 0.1345 -0.3942 -0.9091 vn -0.0508 -0.4167 -0.9076 vn 0.1404 0.1027 -0.9847 vn 0.0501 -0.0411 -0.9979 vn 0.1421 0.2226 -0.9645 vn -0.8165 0.5055 -0.2789 vn -0.3079 -0.2513 -0.9176 vn 0.2029 -0.9753 -0.0873 vn -0.2245 -0.3644 -0.9038 vn -0.2185 -0.2782 -0.9354 vn 0.1103 0.0662 -0.9917 vn 0.0350 -0.2622 -0.9644 vn 0.0238 -0.8034 -0.5950 vn 0.0350 -0.8112 -0.5837 vn 0.2603 -0.1534 -0.9533 vn 0.0323 -0.1654 -0.9857 vn 0.1315 -0.3267 -0.9359 vn 0.1316 0.3749 -0.9177 vn 0.1528 0.2450 -0.9574 vn -0.6938 -0.6671 -0.2713 vn 0.0188 0.2390 -0.9708 vn -0.0080 0.0520 -0.9986 vn -0.4159 0.3347 -0.8456 vn -0.9256 0.0914 -0.3674 vn 0.1795 -0.0817 -0.9804 vn 0.0609 -0.3294 -0.9422 vn 0.1756 0.0398 -0.9837 vn 0.0693 -0.2393 -0.9685 vn 0.5026 -0.3086 -0.8076 vn 0.2195 -0.0593 -0.9738 vn 0.0158 -0.2274 -0.9737 vn 0.4709 -0.7328 -0.4912 vn -0.4474 -0.6719 -0.5903 vn -0.1703 0.3578 -0.9181 vn -0.4001 -0.4986 -0.7690 vn 0.3882 0.1810 -0.9036 vn -0.2387 0.3990 -0.8853 vn -0.6828 0.2643 -0.6811 vn 0.1507 -0.2677 -0.9516 vn -0.1316 -0.7522 -0.6457 vn -0.1242 -0.2695 -0.9550 vn 0.0314 -0.4808 -0.8763 vn 0.1142 -0.6615 -0.7412 vn 0.1667 -0.2976 -0.9400 vn -0.0282 -0.0296 -0.9992 vn 0.1862 0.3956 -0.8993 vn -0.2321 -0.1022 -0.9673 vn -0.3610 -0.7549 -0.5476 vn 0.1556 -0.4583 -0.8751 vn 0.1126 0.0684 -0.9913 vn 0.0391 -0.4480 -0.8932 vn 0.2012 -0.0564 -0.9779 vn 0.3628 -0.3430 -0.8664 vn 0.1991 -0.0584 -0.9782 vn 0.1117 -0.0243 -0.9934 vn 0.2558 -0.0438 -0.9657 vn -0.1357 0.2000 -0.9703 vn 0.0302 0.9275 -0.3727 vn -0.8092 0.4713 -0.3507 vn 0.1110 -0.6497 -0.7521 vn 0.1766 0.0733 -0.9815 vn -0.8508 -0.4974 0.1694 vn 0.4553 0.1399 -0.8793 vn 0.1189 -0.8141 -0.5684 vn 0.0700 0.3607 -0.9301 vn 0.2521 -0.3678 -0.8951 vn 0.0024 -0.4615 -0.8871 vn -0.0300 -0.1599 -0.9867 vn 0.3086 -0.2716 -0.9116 vn 0.3136 -0.0165 -0.9494 vn 0.3731 -0.3095 -0.8747 vn 0.3218 -0.2372 -0.9166 vn 0.1162 0.0806 -0.9899 vn -0.1667 0.0041 -0.9860 vn 0.1551 -0.0745 -0.9851 vn -0.4898 0.2663 -0.8302 vn 0.6326 0.0923 -0.7690 vn -0.0608 -0.8340 -0.5483 vn 0.0201 -0.0129 -0.9997 vn -0.5481 -0.1475 -0.8233 vn -0.5706 0.3940 -0.7206 vn -0.1201 0.2126 -0.9697 vn -0.0222 -0.9377 0.3467 vn 0.3644 -0.9106 0.1949 vn 0.1000 -0.1952 -0.9757 vn 0.1670 0.0197 -0.9858 vn -0.0734 -0.7538 -0.6530 vn 0.0812 -0.6780 -0.7306 vn -0.2733 -0.4614 -0.8440 vn 0.3225 -0.3620 -0.8746 vn 0.2514 -0.1177 -0.9607 vn 0.3045 -0.2391 -0.9220 vn -0.1913 0.1262 -0.9734 vn -0.3614 -0.3539 -0.8626 vn 0.0412 0.7554 0.6540 vn -0.4014 0.5912 -0.6996 vn 0.0432 0.0131 -0.9990 vn -0.1212 -0.7718 -0.6242 vn -0.0807 0.2956 -0.9519 vn -0.4742 0.2311 -0.8496 vn 0.2124 -0.2299 -0.9498 vn -0.4389 -0.8580 -0.2667 vn -0.5128 -0.4556 -0.7276 vn -0.5176 0.1832 -0.8358 vn -0.5847 -0.2724 -0.7642 vn 0.3039 0.2491 -0.9196 vn 0.2516 -0.2053 -0.9458 vn 0.0860 0.1127 -0.9899 vn -0.5828 -0.2409 -0.7761 vn -0.3131 0.6470 -0.6952 vn 0.0009 0.1476 -0.9890 vn -0.0361 -0.6392 -0.7682 vn -0.2665 0.2968 -0.9170 vn -0.1264 0.4700 -0.8736 vn -0.3290 -0.0392 -0.9435 vn 0.7085 -0.6497 0.2756 vn 0.7466 -0.6145 0.2551 vn -0.7377 -0.3581 0.5723 vn 0.2474 -0.1892 -0.9502 vn -0.0678 -0.6616 -0.7468 vn -0.1583 -0.5133 -0.8435 vn -0.0211 -0.4563 -0.8896 vn 0.1633 -0.3088 -0.9370 vn 0.0976 -0.4734 -0.8754 vn 0.2218 -0.1117 -0.9687 vn 0.2200 -0.1694 -0.9607 vn 0.1000 -0.1983 -0.9750 vn -0.2216 -0.2711 -0.9367 vn 0.1148 -0.3730 -0.9207 vn 0.0627 -0.8773 -0.4758 vn -0.2884 -0.3253 -0.9005 vn -0.1031 -0.0513 -0.9934 vn -0.7160 -0.1311 -0.6857 vn 0.2160 -0.9625 0.1643 vn 0.0128 -0.9969 0.0773 vn 0.7326 -0.6765 0.0756 vn -0.5173 -0.4723 -0.7137 vn -0.5868 -0.2754 -0.7614 vn -0.4345 -0.5786 -0.6903 vn 0.2508 0.0530 -0.9666 vn 0.1397 -0.4495 -0.8823 vn -0.0159 -0.4308 -0.9023 vn 0.0004 -0.4390 -0.8985 vn 0.2028 -0.0564 -0.9776 vn 0.1273 0.0942 -0.9874 vn 0.0154 0.2909 -0.9566 vn -0.1805 0.1835 -0.9663 vn -0.3801 -0.6689 -0.6388 vn 0.6139 -0.0631 0.7868 vn -0.3237 -0.5203 -0.7902 vn -0.0378 -0.0057 -0.9993 vn -0.5364 -0.4068 -0.7394 vn 0.2176 -0.9681 0.1244 vn -0.5496 -0.2971 -0.7808 vn -0.6630 -0.0131 -0.7485 vn 0.3828 -0.3563 -0.8523 vn -0.4706 0.7898 -0.3934 vn -0.0650 -0.1323 -0.9891 vn -0.0013 -0.2736 -0.9619 vn -0.0730 -0.3115 -0.9474 vn -0.5262 0.2468 -0.8138 vn -0.3347 -0.7280 -0.5983 vn -0.6497 0.2547 -0.7163 vn -0.3803 0.0561 -0.9231 vn -0.3011 -0.2450 -0.9216 vn -0.4939 -0.3229 -0.8074 vn -0.7661 0.1924 -0.6132 vn -0.4795 0.4265 -0.7670 vn 0.2408 -0.1352 -0.9611 vn -0.8021 -0.0995 -0.5888 vn 0.2816 0.0931 -0.9550 vn -0.2145 -0.5013 -0.8383 vn -0.3273 -0.4221 -0.8454 vn -0.1310 -0.2131 -0.9682 vn -0.2208 -0.3717 -0.9017 vn -0.1971 -0.4016 -0.8943 vn -0.2280 -0.4570 -0.8597 vn -0.0668 0.0417 -0.9969 vn 0.5292 0.3151 -0.7878 vn -0.5282 0.4015 -0.7482 vn -0.4302 -0.6423 -0.6343 vn -0.6192 -0.1701 -0.7666 vn -0.8444 0.4917 0.2128 vn 0.0263 0.3351 -0.9418 vn 0.3109 -0.7109 -0.6309 vn -0.1468 -0.3178 -0.9367 vn -0.1867 -0.4825 -0.8558 vn -0.2977 -0.3916 -0.8706 vn -0.3525 -0.4028 -0.8447 vn -0.3532 -0.3536 -0.8662 vn 0.1728 0.0785 -0.9818 vn -0.1927 0.1252 -0.9732 vn -0.1732 0.2269 -0.9584 vn -0.1558 -0.5260 -0.8361 vn -0.3613 0.3161 -0.8772 vn -0.5312 -0.5810 -0.6166 vn 0.2250 0.4311 -0.8738 vn 0.0152 -0.9974 0.0707 vn -0.0697 0.2108 -0.9750 vn -0.5605 0.1942 -0.8051 vn -0.5460 0.1221 -0.8289 vn -0.8293 -0.0077 -0.5588 vn 0.0035 -0.9985 0.0554 vn -0.3807 -0.4727 -0.7948 vn -0.3769 -0.4626 -0.8025 vn -0.6595 -0.0662 -0.7488 vn -0.6461 0.0079 -0.7632 vn -0.2996 -0.7995 -0.5207 vn -0.2036 -0.2892 -0.9354 vn 0.0231 -0.0023 -0.9997 vn -0.0192 0.2173 -0.9759 vn 0.0160 -0.9974 0.0705 vn -0.0456 0.1480 -0.9879 vn -0.3937 -0.6588 -0.6411 vn -0.4944 0.3317 -0.8034 vn 0.4217 -0.8516 0.3112 vn -0.9166 0.0205 -0.3993 vn -0.4548 -0.2488 -0.8551 vn -0.4814 -0.0434 -0.8754 vn -0.4167 -0.3267 -0.8483 vn -0.4204 0.1660 -0.8920 vn 0.0152 0.1566 -0.9875 vn 0.1051 0.3952 -0.9126 vn 0.0176 0.0309 -0.9994 vn -0.1126 0.4135 -0.9035 vn -0.4893 -0.1318 -0.8621 vn -0.3987 0.7977 -0.4524 vn -0.3371 -0.9102 -0.2408 vn -0.5636 0.0171 -0.8259 vn 0.2393 -0.1355 -0.9615 vn 0.1452 0.2585 -0.9550 vn 0.0129 -0.0975 -0.9951 vn -0.4076 -0.3755 -0.8324 vn -0.4110 -0.3952 -0.8215 vn -0.2659 -0.1460 -0.9529 vn -0.0584 0.0091 -0.9983 vn -0.0242 -0.5123 -0.8584 vn -0.3274 0.3098 -0.8926 vn -0.5608 0.0384 -0.8270 vn -0.5108 0.1852 -0.8395 vn -0.3672 0.1468 -0.9185 vn -0.0977 -0.9872 0.1260 vn -0.0224 -0.9970 -0.0738 vn -0.4692 -0.7948 -0.3848 vn -0.5781 -0.1352 -0.8047 vn -0.7535 0.5799 -0.3097 vn -0.5393 0.4427 -0.7164 vn 0.1865 -0.2341 -0.9542 vn -0.1257 0.1199 -0.9848 vn -0.4590 -0.2220 -0.8602 vn -0.5323 -0.3212 -0.7833 vn -0.5067 -0.4393 -0.7418 vn -0.5068 -0.4440 -0.7389 vn -0.4253 -0.3741 -0.8241 vn -0.2311 -0.0222 -0.9727 vn -0.8005 -0.0820 -0.5936 vn -0.6905 -0.4943 -0.5281 vn -0.4497 0.1246 -0.8845 vn 0.3728 0.1071 -0.9217 vn -0.7622 0.5795 -0.2885 vn 0.0318 -0.9994 -0.0164 vn -0.2440 -0.4294 -0.8695 vn -0.3942 -0.0559 -0.9173 vn 0.0475 -0.9859 0.1606 vn 0.1654 -0.0994 -0.9812 vn -0.5254 -0.2441 -0.8151 vn -0.6205 -0.3264 -0.7131 vn -0.5542 -0.2751 -0.7856 vn -0.5257 -0.3417 -0.7790 vn 0.0793 0.1453 -0.9862 vn 0.8313 -0.3308 -0.4468 vn -0.0408 0.1323 -0.9904 vn -0.1402 0.1018 -0.9849 vn -0.4503 0.1799 -0.8746 vn -0.4584 0.8038 -0.3793 vn -0.1772 -0.5246 -0.8327 vn -0.2029 -0.3503 -0.9144 vn -0.3959 -0.0953 -0.9134 vn 0.0140 -0.0073 -0.9999 vn 0.0600 0.2346 -0.9702 vn -0.0964 0.5646 -0.8197 vn -0.3604 -0.0328 -0.9322 vn -0.3954 0.1910 -0.8984 vn -0.5264 -0.2452 -0.8141 vn -0.5222 -0.2365 -0.8194 vn -0.4540 0.0464 -0.8898 vn -0.3441 0.1791 -0.9217 vn -0.3067 0.3643 -0.8793 vn -0.8036 -0.5539 -0.2178 vn -0.5126 0.0316 -0.8580 vn -0.1664 0.3465 -0.9232 vn -0.0562 0.1440 -0.9880 vn 0.8003 -0.5385 -0.2636 vn -0.1444 0.0025 -0.9895 vn 0.1571 -0.0990 -0.9826 vn -0.1723 -0.7215 -0.6707 vn -0.2740 0.3654 -0.8896 vn 0.0036 -1.0000 -0.0058 vn 0.0843 -0.8081 0.5830 vn -0.3074 -0.6087 -0.7314 vn 0.1096 0.3230 -0.9400 vn -0.6875 -0.4229 -0.5903 vn -0.3309 0.9430 -0.0363 vn -0.6066 -0.3971 -0.6887 vn -0.5494 -0.0136 -0.8355 vn -0.3494 -0.0396 -0.9361 vn -0.3515 0.1876 -0.9172 vn 0.0540 -0.2458 -0.9678 vn -0.6913 -0.3568 -0.6283 vn -0.5060 -0.0335 -0.8619 vn -0.4821 -0.3252 -0.8135 vn 0.4525 -0.3145 -0.8345 vn -0.1121 -0.9936 0.0171 vn -0.5668 0.0869 -0.8193 vn -0.5897 0.2630 -0.7636 vn 0.5614 0.1628 -0.8114 vn -0.7661 0.1042 -0.6342 vn 0.1336 0.2936 -0.9466 vn -0.0285 0.2747 -0.9611 vn -0.1615 0.3424 -0.9256 vn 0.0806 -0.9966 -0.0173 vn 0.0558 -0.9984 -0.0006 vn 0.1895 -0.0896 0.9778 vn -0.2602 -0.8377 -0.4802 vn -0.1312 -0.9882 -0.0787 vn 0.4257 -0.8620 0.2752 vn -0.5476 -0.8069 -0.2216 vn 0.4351 -0.2650 0.8605 vn -0.0567 -0.9937 -0.0963 vn 0.0228 -0.9971 0.0720 vn 0.4500 -0.8761 0.1730 vn -0.5538 -0.8178 0.1569 vn -0.5581 -0.8092 0.1836 vn 0.2239 -0.9094 -0.3506 vn 0.2669 -0.8824 -0.3874 vn 0.1322 -0.9857 -0.1048 vn -0.4463 -0.8034 0.3941 vn -0.5362 -0.8274 -0.1670 vn 0.0947 -0.7306 0.6762 vn 0.2240 -0.9408 -0.2544 vn 0.0040 -0.9959 0.0905 vn 0.0311 -0.9941 0.1035 vn -0.9331 -0.2289 0.2775 vn -0.5334 -0.8218 -0.2003 vn -0.5070 -0.7467 -0.4306 vn 0.0344 -0.9945 -0.0992 vn 0.1007 -0.8355 -0.5402 vn 0.5521 -0.3442 0.7594 vn -0.3097 -0.9501 -0.0361 vn 0.0845 -0.9907 0.1065 vn 0.0256 -0.9989 0.0390 vn 0.0806 -0.9966 -0.0185 vn 0.0876 -0.9921 0.0903 vn -0.0105 -0.9984 -0.0557 vn 0.0849 -0.9915 0.0982 vn 0.1855 -0.8514 0.4906 vn 0.4886 -0.8703 0.0623 vn 0.0872 -0.9238 -0.3729 vn 0.4114 -0.9015 0.1340 vn 0.4206 -0.8638 0.2775 vn -0.4188 0.2834 0.8627 vn 0.1240 -0.9897 -0.0721 vn -0.4498 -0.8913 0.0573 vn 0.0090 -0.9812 -0.1926 vn 0.0614 -0.9847 -0.1634 vn -0.1243 -0.9815 -0.1455 vn -0.4851 -0.8617 -0.1489 vn 0.8318 -0.5370 0.1405 vn 0.0129 -0.9986 0.0507 vn 0.1794 -0.9687 -0.1716 vn -0.5941 -0.7996 0.0876 vn -0.4238 -0.8817 -0.2073 vn -0.9647 0.1039 -0.2420 vn 0.1274 -0.9890 -0.0746 vn 0.1249 -0.9894 -0.0737 vn 0.0682 -0.9943 0.0823 vn -0.0973 -0.9870 -0.1281 vn 0.0880 -0.9950 0.0470 vn 0.0190 -0.9987 -0.0482 vn -0.1936 -0.9810 0.0141 vn 0.0339 -0.9989 -0.0328 vn 0.1203 -0.9616 -0.2466 vn -0.5834 -0.8107 -0.0495 vn 0.0076 -0.9940 -0.1095 vn -0.7023 0.0570 0.7096 vn 0.3508 -0.8888 0.2948 vn -0.0414 -0.9462 0.3208 vn 0.0272 -0.9995 -0.0186 vn 0.2038 -0.8639 0.4606 vn 0.0479 -0.9930 0.1078 vn 0.1441 0.0414 0.9887 vn 0.2989 -0.7991 -0.5216 vn 0.0075 -0.9999 -0.0110 vn -0.1086 0.9521 0.2858 vn 0.6829 -0.4435 0.5805 vn -0.8729 -0.4503 0.1881 vn 0.0351 -0.9981 -0.0511 vn -0.4273 -0.8462 0.3184 vn -0.5183 -0.6346 -0.5732 vn -0.5379 -0.6303 0.5598 vn 0.0014 -0.9975 -0.0707 vn -0.0960 -0.9908 0.0959 vn 0.0402 -0.9990 -0.0183 vn -0.5375 -0.6521 0.5347 vn -0.0387 -0.9986 0.0372 vn -0.6918 -0.5307 -0.4896 vn 0.0180 -0.9961 0.0862 vn 0.0281 -0.9967 0.0763 vn -0.7549 -0.6527 -0.0640 vn 0.0124 -0.9992 0.0378 vn -0.5228 -0.7762 0.3524 vn 0.1840 -0.8502 0.4932 vn -0.1829 -0.4956 0.8491 vn -0.4683 -0.8585 0.2088 vn 0.4875 -0.8722 -0.0394 vn 0.1648 -0.0099 0.9863 vn -0.6295 -0.6540 0.4196 vn 0.0044 -0.9989 -0.0461 vn 0.0994 -0.9950 0.0031 vn -0.7863 -0.6179 -0.0024 vn -0.8081 -0.1416 0.5718 vn 0.0843 -0.9907 0.1067 vn 0.0415 -0.9991 -0.0096 vn 0.3984 -0.9071 -0.1360 vn -0.6121 -0.7831 0.1104 vn -0.3737 -0.3872 0.8429 vn -0.5944 -0.7322 0.3324 vn 0.8264 -0.4905 0.2767 vn 0.0594 -0.1957 0.9789 vn 0.2675 -0.8288 0.4915 vn -0.7310 0.0210 0.6821 vn 0.1059 -0.8296 0.5482 vn 0.9712 -0.1526 0.1830 vn 0.1234 -0.8638 0.4884 vn -0.5693 -0.7742 0.2768 vn -0.6402 -0.7499 0.1668 vn 0.0139 -0.9994 -0.0325 vn 0.3864 -0.9220 -0.0237 vn 0.0936 -0.9924 -0.0796 vn -0.2800 -0.8483 0.4495 vn 0.0298 -0.9648 0.2615 vn -0.0218 -0.9940 -0.1071 vn 0.2590 -0.9620 0.0860 vn -0.7047 -0.6745 0.2200 vn 0.1586 -0.6332 0.7576 vn -0.7433 -0.3855 -0.5468 vn 0.1154 -0.9631 0.2430 vn 0.0024 -0.9975 0.0712 vn -0.3404 0.8118 0.4745 vn 0.0586 -0.9955 0.0740 vn -0.1879 -0.9515 0.2435 vn 0.1113 -0.9935 0.0245 vn -0.1487 -0.4582 0.8763 vn 0.2388 -0.0355 0.9704 vn 0.1072 -0.9886 0.1053 vn 0.4561 -0.8439 0.2826 vn -0.0136 -0.9991 0.0392 vn 0.4748 -0.8740 0.1030 vn -0.4167 -0.7269 0.5458 vn -0.2552 -0.4548 0.8533 vn -0.0218 -0.9997 -0.0116 vn 0.1055 -0.9923 0.0657 vn 0.3643 -0.9024 0.2300 vn 0.0931 -0.9884 -0.1200 vn 0.3020 -0.8279 0.4725 vn -0.7066 -0.6894 -0.1595 vn 0.0897 -0.9959 -0.0091 vn -0.0510 -0.9961 -0.0721 vn 0.0554 -0.9983 0.0181 vn 0.0095 -0.9989 0.0449 vn -0.2937 -0.3663 0.8829 vn -0.6501 -0.7436 0.1562 vn -0.5792 -0.7640 -0.2844 vn -0.8245 -0.5526 -0.1220 vn -0.7488 -0.6624 -0.0240 vn -0.7109 -0.6475 -0.2747 vn 0.0926 -0.7760 0.6239 vn -0.0396 -0.9821 0.1841 vn 0.0137 -0.9979 -0.0641 vn -0.5278 -0.8080 -0.2619 vn 0.0222 -0.9993 -0.0286 vn 0.3519 -0.8022 0.4823 vn 0.0521 -0.9933 0.1029 vn 0.2110 -0.9455 -0.2481 vn -0.3877 -0.9139 -0.1203 vn -0.4561 -0.8512 -0.2595 vn -0.6664 -0.5567 -0.4960 vn -0.6642 -0.5465 -0.5102 vn 0.2094 -0.9778 -0.0078 vn 0.1099 -0.9938 0.0151 vn 0.4058 -0.7709 0.4910 vn 0.0101 -0.9994 -0.0341 vn -0.2330 -0.9673 0.0999 vn -0.4711 -0.8413 -0.2652 vn -0.4200 -0.8790 -0.2258 vn -0.8178 -0.5726 -0.0581 vn 0.4697 -0.8354 0.2854 vn 0.1462 -0.9524 0.2676 vn -0.7470 -0.6480 -0.1485 vn -0.6583 -0.7525 -0.0193 vn 0.3930 -0.9086 0.1412 vn 0.5670 -0.8145 0.1228 vn -0.0513 -0.9978 0.0409 vn -0.7912 -0.6040 -0.0956 vn 0.1217 -0.8384 0.5313 vn 0.0139 -0.8544 0.5195 vn 0.0430 -0.5897 0.8064 vn -0.0512 -0.9985 -0.0213 vn 0.0196 -0.9921 -0.1239 vn 0.0362 -0.9964 0.0768 vn -0.3893 -0.8221 0.4154 vn 0.3761 -0.8981 0.2280 vn -0.6373 -0.7642 0.0995 vn -0.3585 -0.9086 -0.2143 vn -0.7536 -0.5424 0.3713 vn -0.2707 -0.9070 0.3227 vn 0.0473 -0.9970 0.0610 vn 0.0558 -0.9982 -0.0200 vn -0.0127 -0.9999 0.0004 vn 0.0347 -0.9976 0.0600 vn -0.0777 -0.9595 0.2708 vn -0.0177 -0.9995 -0.0268 vn -0.4329 -0.8340 0.3422 vn -0.5392 -0.8411 0.0410 vn -0.0078 -0.9943 -0.1063 vn -0.4252 -0.8861 0.1844 vn 0.2547 -0.8209 0.5111 vn 0.0389 -0.9992 -0.0112 vn 0.0074 -0.5975 0.8018 vn -0.0374 -0.9817 0.1867 vn 0.2985 -0.8887 0.3480 vn -0.0010 -0.9575 0.2885 vn -0.0139 -0.9980 -0.0618 vn -0.4442 -0.8578 0.2588 vn -0.4672 -0.8780 -0.1044 vn -0.6274 -0.6656 0.4042 vn -0.5403 0.4285 -0.7242 vn 0.4534 -0.8462 0.2800 vn 0.2575 -0.9151 0.3102 vn 0.0584 -0.9959 0.0694 vn 0.0143 -0.9998 -0.0164 vn -0.2548 -0.8912 0.3753 vn 0.0325 -0.9978 0.0573 vn -0.6198 -0.7270 -0.2955 vn 0.0300 -0.9982 -0.0522 vn -0.8227 0.0184 0.5682 vn 0.0560 -0.9984 0.0010 vn 0.4041 -0.8083 0.4282 vn -0.0296 -0.9813 0.1900 vn -0.3238 -0.9349 -0.1457 vn -0.4216 -0.9064 0.0256 vn 0.0391 -0.9990 0.0215 vn 0.1733 -0.9276 0.3310 vn -0.0424 -0.9988 0.0225 vn 0.0366 -0.4822 0.8753 vn 0.0653 -0.8978 0.4356 vn -0.8411 -0.3089 -0.4439 vn -0.0617 -0.9911 -0.1179 vn -0.1044 -0.9647 0.2418 vn -0.5393 0.8297 0.1440 vn -0.7751 -0.5158 0.3649 vn 0.0191 -0.9977 -0.0652 vn 0.0229 -0.9973 0.0691 vn 0.3573 -0.8384 0.4116 vn -0.3422 -0.8179 0.4625 vn 0.3839 -0.9137 0.1331 vn 0.2640 -0.3125 0.9125 vn -0.3776 -0.9246 -0.0498 vn -0.2884 -0.9469 -0.1420 vn -0.3023 -0.9413 0.1503 vn 0.0262 -0.9996 0.0106 vn -0.5789 -0.7738 -0.2569 vn -0.6291 -0.6612 0.4087 vn -0.1399 -0.4237 -0.8949 vn 0.0206 -0.9995 -0.0232 vn 0.1692 -0.9852 0.0281 vn -0.0440 0.7238 0.6886 vn 0.0261 -0.9992 0.0291 vn -0.5735 -0.8191 0.0135 vn -0.3162 -0.8752 0.3660 vn -0.4439 -0.7169 0.5376 vn -0.4403 -0.7201 0.5363 vn -0.4661 -0.6042 0.6463 vn 0.0394 -0.9586 0.2819 vn 0.0262 -0.9992 -0.0295 vn 0.2945 -0.9320 -0.2112 vn 0.1569 -0.9857 -0.0611 vn -0.7691 -0.6314 -0.0989 vn -0.6141 -0.7731 -0.1584 vn -0.8455 -0.4214 -0.3279 vn 0.0287 -0.9996 -0.0030 vn -0.6714 -0.7220 0.1671 vn -0.7930 0.2138 0.5705 vn 0.0532 -0.9948 0.0873 vn 0.0012 -0.9974 0.0718 vn 0.0062 -0.9978 0.0661 vn 0.0044 -0.9955 0.0950 vn -0.1055 -0.9856 0.1324 vn 0.1125 -0.5587 0.8217 vn 0.1093 -0.9914 0.0718 vn 0.2953 -0.6279 0.7201 vn 0.0285 -0.9988 -0.0390 vn 0.3994 -0.7318 -0.5522 vn -0.7199 -0.4397 0.5370 vn 0.2493 0.5973 0.7623 vn -0.7835 -0.6214 -0.0088 vn -0.7781 -0.6104 0.1483 vn -0.4879 -0.4307 0.7592 vn 0.0457 -0.9984 0.0333 vn -0.0451 -0.9473 0.3172 vn 0.0754 -0.6208 0.7803 vn 0.2069 -0.8104 0.5481 vn 0.0490 -0.8875 0.4582 vn -0.7122 -0.6994 -0.0606 vn -0.3311 -0.9434 0.0211 vn -0.3828 -0.9234 -0.0277 vn 0.0931 -0.9956 0.0064 vn -0.0020 -0.9979 0.0654 vn 0.0094 -0.9999 -0.0127 vn -0.7460 -0.6659 -0.0108 vn -0.6228 -0.7817 -0.0341 vn -0.8112 -0.4427 0.3821 vn -0.4530 -0.8895 0.0603 vn -0.4788 -0.8763 0.0542 vn -0.4739 -0.8768 0.0813 vn 0.1503 -0.9852 0.0822 vn -0.5393 -0.7854 -0.3039 vn 0.1337 -0.0720 0.9884 vn -0.5887 -0.7989 -0.1231 vn -0.7728 -0.5565 0.3050 vn -0.7304 -0.4510 0.5130 vn 0.1418 -0.3466 -0.9272 vn -0.2110 -0.9587 0.1905 vn -0.6474 -0.7443 -0.1640 vn 0.5749 -0.3259 0.7505 vn -0.7125 -0.6998 -0.0502 vn -0.7710 -0.6366 -0.0158 vn -0.0266 -0.9996 0.0026 vn -0.8256 -0.2081 0.5244 vn -0.5020 -0.7732 0.3874 vn -0.1600 -0.9510 0.2645 vn -0.2504 -0.8980 0.3618 vn -0.2433 -0.7625 0.5995 vn 0.0592 -0.4236 0.9039 vn 0.0472 -0.5431 0.8383 vn 0.0118 -0.4994 0.8663 vn 0.0280 -0.9983 0.0504 vn -0.1309 -0.5859 0.7997 vn 0.2110 -0.7615 0.6129 vn 0.5285 -0.8371 0.1413 vn 0.5416 -0.8225 0.1739 vn -0.6833 -0.6907 0.2369 vn -0.7769 -0.5791 0.2471 vn -0.8026 -0.5834 0.1249 vn -0.7992 -0.5025 0.3299 vn -0.0972 -0.4480 0.8887 vn -0.1683 -0.5555 0.8143 vn 0.0399 -0.9992 0.0062 vn -0.1830 -0.9667 0.1789 vn 0.0028 -0.9991 0.0432 vn -0.0529 -0.9148 0.4005 vn 0.0018 -0.9957 0.0921 vn -0.0432 -0.9485 0.3138 vn 0.5520 -0.7663 0.3287 vn -0.5831 -0.7422 -0.3304 vn 0.5303 -0.6368 0.5597 vn -0.5976 -0.8018 0.0070 vn -0.5773 -0.7890 0.2103 vn -0.6136 -0.6635 0.4281 vn 0.0277 -0.9996 -0.0115 vn -0.5134 -0.8384 0.1833 vn -0.2158 -0.8441 0.4908 vn -0.5959 -0.5708 0.5649 vn 0.0057 -1.0000 -0.0080 vn -0.4264 -0.8466 0.3184 vn -0.6325 -0.7581 -0.1591 vn -0.7563 -0.6523 0.0501 vn -0.0265 -0.8723 0.4883 vn 0.2414 -0.9702 0.0220 vn 0.0051 -0.9997 0.0259 vn -0.7040 -0.4090 0.5806 vn -0.8034 -0.1076 0.5856 vn -0.0017 -0.9996 0.0274 vn 0.0140 -0.9987 0.0500 vn -0.4618 -0.8868 -0.0172 vn 0.0486 -0.9971 0.0589 vn 0.1574 0.1309 0.9788 vn -0.4276 -0.1363 0.8936 vn -0.6351 -0.7548 -0.1639 vn -0.6900 -0.7214 -0.0594 vn -0.6873 -0.7018 0.1872 vn -0.6257 -0.7720 0.1123 vn -0.6456 -0.7453 0.1667 vn -0.6921 -0.6673 0.2751 vn -0.7658 -0.4632 0.4460 vn 0.0143 -0.9994 -0.0302 vn 0.1087 -0.9938 -0.0217 vn 0.4190 -0.9041 0.0842 vn -0.6004 -0.7138 0.3606 vn -0.2120 -0.1376 0.9675 vn -0.1096 -0.3944 0.9124 vn -0.4027 -0.7900 0.4623 vn 0.1020 -0.9652 0.2407 vn -0.1336 -0.8192 0.5577 vn -0.1516 -0.4255 0.8922 vn -0.4298 -0.7666 0.4771 vn 0.5958 -0.7462 0.2969 vn -0.1757 -0.9468 0.2696 vn -0.0338 -0.9987 0.0392 vn -0.5396 -0.6253 0.5637 vn 0.0087 -0.9961 0.0876 vn -0.6296 -0.7592 -0.1648 vn -0.7972 -0.5768 0.1783 vn -0.6243 -0.7543 0.2033 vn 0.0865 -0.4524 0.8876 vn -0.7037 -0.6937 -0.1538 vn -0.2446 -0.9329 0.2644 vn 0.0384 -0.9628 0.2676 vn 0.1162 -0.8961 0.4284 vn -0.2177 -0.8071 0.5488 vn -0.3175 -0.7758 0.5453 vn -0.1238 0.7206 0.6822 vn -0.0907 -0.9957 -0.0200 vn -0.0097 -0.9938 -0.1105 vn -0.4507 -0.8481 -0.2787 vn -0.7762 -0.6279 0.0572 vn -0.7247 -0.6833 -0.0883 vn -0.7299 -0.6631 -0.1660 vn -0.5801 -0.7853 0.2165 vn -0.0797 -0.8329 0.5476 vn -0.0219 -0.9732 0.2290 vn -0.0079 -0.9283 0.3717 vn -0.4037 -0.4952 0.7693 vn 0.4512 -0.8756 -0.1725 vn -0.7297 -0.6838 -0.0008 vn -0.7046 -0.7063 -0.0678 vn 0.4546 -0.8436 0.2860 vn -0.6273 -0.5043 0.5934 vn -0.3133 -0.9461 -0.0825 vn -0.3981 -0.8674 -0.2986 vn -0.4186 -0.8658 -0.2742 vn -0.6939 -0.6311 0.3467 vn -0.7105 -0.5086 0.4864 vn 0.0324 -0.9993 0.0166 vn -0.0161 -0.9997 0.0167 vn 0.1656 -0.9856 -0.0343 vn 0.2042 -0.9389 0.2770 vn -0.0259 -0.9361 0.3507 vn -0.5715 -0.5817 0.5788 vn -0.4570 -0.8684 -0.1923 vn -0.7234 -0.6898 -0.0304 vn 0.1496 -0.9878 0.0426 vn -0.3068 -0.9407 -0.1447 vn -0.3401 -0.9403 0.0124 vn -0.5769 -0.8123 0.0862 vn -0.6560 -0.6651 0.3567 vn -0.5951 -0.6888 0.4140 vn -0.5989 -0.6642 0.4473 vn 0.6187 -0.7637 0.1845 vn 0.0041 -0.9999 -0.0150 vn -0.6573 -0.7450 0.1135 vn 0.2247 -0.9381 0.2635 vn 0.1994 -0.9291 0.3113 vn 0.1206 -0.9914 0.0500 vn 0.0842 -0.9896 -0.1163 vn -0.3522 -0.9315 -0.0905 vn 0.2456 -0.9450 0.2161 vn -0.8862 0.2654 0.3797 vn -0.2708 -0.9506 -0.1518 vn -0.3938 -0.8978 -0.1973 vn -0.5383 -0.8259 0.1678 vn -0.5180 -0.8472 0.1178 vn -0.5290 -0.8440 0.0885 vn -0.5180 -0.7977 0.3086 vn -0.2545 -0.8900 0.3784 vn -0.0780 -0.9723 0.2202 vn 0.3081 -0.8891 0.3386 vn 0.5572 -0.8277 0.0674 vn 0.0418 -0.7260 0.6865 vn 0.1351 -0.9868 -0.0899 vn -0.0143 -0.9961 -0.0874 vn -0.0397 -0.9979 -0.0510 vn -0.1352 -0.9908 0.0085 vn -0.1381 -0.9904 0.0012 vn -0.4493 -0.8841 0.1288 vn -0.7148 -0.1414 0.6849 vn -0.2263 -0.9491 -0.2193 vn -0.5154 -0.7799 0.3552 vn 0.0568 -0.9982 -0.0217 vn 0.0005 -0.9980 -0.0631 vn 0.6532 -0.7135 0.2537 vn 0.2817 -0.9266 0.2491 vn 0.2663 -0.8986 0.3486 vn 0.2897 -0.8606 0.4188 vn -0.3808 -0.8906 -0.2486 vn -0.3960 -0.8342 0.3837 vn -0.4398 -0.7408 0.5078 vn -0.8688 0.3874 -0.3085 vn -0.0569 -0.9953 -0.0783 vn -0.0634 -0.9968 -0.0481 vn -0.2216 -0.9354 -0.2754 vn -0.2624 -0.9241 -0.2778 vn -0.2211 -0.9629 -0.1546 vn -0.2874 -0.9310 -0.2252 vn -0.4391 -0.8775 0.1927 vn -0.5081 -0.6830 0.5247 vn 0.4757 -0.4825 0.7354 vn 0.0125 -0.9998 -0.0155 vn -0.9922 -0.0300 0.1212 vn -0.0910 -0.9901 0.1072 vn 0.4722 -0.8468 0.2450 vn 0.1510 -0.7496 0.6444 vn -0.0655 -0.9944 -0.0830 vn -0.2973 -0.9369 0.1839 vn -0.7504 -0.3127 -0.5824 vn -0.3321 -0.9345 -0.1281 vn -0.3191 -0.9477 -0.0031 vn -0.5916 -0.6933 0.4115 vn -0.3529 0.0429 0.9347 vn 0.0134 -0.9999 -0.0030 vn -0.3135 -0.5815 0.7507 vn -0.0871 -0.9581 0.2728 vn -0.7307 -0.6200 0.2857 vn -0.4977 -0.2685 -0.8247 vn -0.0330 0.2373 -0.9709 vn -0.0799 -0.9936 -0.0798 vn -0.0515 -0.9972 0.0542 vn -0.3611 -0.8685 0.3396 vn -0.2396 -0.9598 -0.1462 vn -0.4118 -0.8165 0.4046 vn 0.1138 0.0195 0.9933 vn 0.0322 -0.9986 0.0410 vn -0.6672 -0.5920 0.4521 vn 0.0321 -0.9993 -0.0186 vn 0.1372 -0.9858 0.0965 vn -0.0471 -0.9434 0.3284 vn -0.3847 -0.8780 -0.2848 vn -0.0676 -0.9965 -0.0488 vn -0.4564 -0.7513 0.4766 vn -0.4796 -0.8516 -0.2115 vn -0.2511 -0.9630 0.0979 vn -0.3318 -0.9159 0.2259 vn -0.3009 -0.9111 0.2817 vn -0.4321 -0.8086 0.3992 vn -0.4521 -0.7893 0.4155 vn -0.4407 -0.4416 0.7816 vn -0.7468 -0.2161 0.6289 vn -0.0359 -0.9993 0.0108 vn 0.0046 -0.9996 0.0291 vn -0.2459 0.6566 -0.7130 vn -0.0767 -0.9906 0.1133 vn 0.2604 -0.9425 0.2095 vn 0.3011 -0.8874 0.3490 vn 0.0169 -0.9995 0.0274 vn -0.0441 -0.9975 0.0546 vn -0.3764 -0.8785 0.2941 vn -0.3256 -0.9192 -0.2213 vn -0.3000 -0.9414 -0.1543 vn -0.3568 -0.9310 0.0774 vn -0.4362 -0.7257 0.5321 vn -0.2744 0.3729 -0.8864 vn -0.2851 -0.8460 0.4505 vn 0.1060 -0.9927 -0.0578 vn 0.1864 -0.8497 0.4932 vn -0.0435 -0.9967 -0.0681 vn -0.0731 -0.9857 -0.1515 vn 0.0644 -0.9977 -0.0223 vn -0.7144 -0.6770 -0.1770 vn -0.3077 -0.9436 -0.1221 vn 0.0346 -0.9977 0.0586 vn -0.0108 -0.9998 -0.0146 vn -0.2507 -0.9604 -0.1211 vn -0.3859 -0.8153 0.4317 vn -0.4015 -0.8281 0.3911 vn -0.2420 -0.9700 0.0252 vn 0.0240 -0.9997 -0.0040 vn 0.2156 0.1482 0.9652 vn -0.4743 -0.8595 0.1905 vn -0.3013 -0.8616 0.4085 vn 0.1554 -0.9671 -0.2013 vn -0.0753 -0.9971 -0.0108 vn -0.0244 -0.9996 -0.0173 vn -0.0121 -0.9996 0.0261 vn -0.6715 0.7151 0.1942 vn 0.6047 -0.7853 0.1329 vn -0.2400 -0.9700 -0.0392 vn -0.1796 -0.9531 0.2437 vn -0.3304 -0.9197 0.2120 vn -0.2947 -0.9121 0.2848 vn -0.3882 -0.4712 0.7920 vn -0.7611 0.0063 0.6486 vn 0.4767 -0.7013 0.5300 vn -0.6606 -0.2480 -0.7086 vn -0.0937 -0.9793 -0.1793 vn -0.0463 -0.9976 0.0514 vn -0.2540 -0.9325 0.2566 vn -0.0178 -0.9998 -0.0014 vn -0.8257 -0.5459 0.1418 vn -0.2700 -0.8820 0.3861 vn -0.3811 -0.7194 0.5807 vn -0.0828 -0.9936 -0.0769 vn -0.0806 -0.9963 0.0291 vn -0.5393 -0.4426 0.7164 vn 0.3153 -0.9207 -0.2299 vn 0.3154 -0.9239 -0.2168 vn 0.0098 -1.0000 0.0017 vn 0.0385 -0.9983 0.0430 vn -0.0224 -0.9995 0.0209 vn -0.7314 -0.2690 -0.6267 vn -0.2081 -0.9217 0.3274 vn -0.2192 -0.8852 0.4102 vn -0.2581 -0.8606 0.4390 vn -0.2753 -0.8507 0.4478 vn -0.3364 -0.7569 0.5602 vn -0.3055 -0.6252 0.7182 vn -0.2201 -0.9753 0.0178 vn -0.0000 -0.9995 0.0320 vn 0.2634 -0.9415 0.2102 vn 0.2505 -0.9172 0.3099 vn 0.1891 -0.9173 0.3506 vn -0.0901 -0.9918 -0.0904 vn -0.0319 -0.9908 -0.1316 vn 0.0062 -1.0000 0.0033 vn 0.0650 -0.9979 0.0079 vn 0.1660 -0.2214 0.9610 vn -0.1774 -0.9830 0.0480 vn -0.2162 -0.9128 0.3466 vn 0.0410 -0.9962 0.0766 vn 0.0327 -0.9978 0.0571 vn -0.0006 -0.9997 -0.0246 vn 0.3910 -0.8280 0.4018 vn -0.0343 -0.9981 0.0520 vn 0.3342 0.9411 0.0515 vn -0.3062 -0.8377 0.4522 vn -0.5103 -0.8213 -0.2552 vn -0.4523 -0.8063 0.3811 vn -0.1245 -0.7536 0.6455 vn 0.3901 -0.5808 -0.7145 vn 0.0260 -0.9945 -0.1011 vn -0.0071 -0.9972 -0.0741 vn -0.0567 -0.9981 0.0248 vn -0.1574 -0.9797 0.1245 vn -0.7817 -0.6130 -0.1144 vn -0.5404 -0.8361 -0.0940 vn -0.9285 -0.2878 -0.2348 vn -0.0928 -0.9908 0.0990 vn 0.1961 -0.0912 0.9763 vn -0.6818 0.2162 -0.6988 vn 0.1616 -0.9834 0.0824 vn 0.0390 -0.9940 -0.1021 vn -0.4518 -0.8594 -0.2395 vn -0.7569 -0.5947 -0.2711 vn -0.5986 -0.7935 -0.1098 vn -0.5775 -0.6961 -0.4265 vn 0.0117 -0.9999 0.0068 vn -0.0187 -0.9996 0.0209 vn -0.1590 -0.9814 0.1074 vn -0.4407 -0.8849 -0.1507 vn 0.6452 -0.7398 0.1909 vn 0.7151 -0.6762 0.1770 vn -0.4414 -0.8938 -0.0786 vn -0.5016 -0.8639 0.0462 vn 0.0071 -0.9997 -0.0213 vn -0.2370 -0.7139 0.6589 vn -0.2676 -0.6358 0.7240 vn -0.2772 -0.6304 0.7251 vn 0.0350 -0.9993 -0.0124 vn -0.2795 -0.9199 -0.2751 vn -0.2447 -0.9689 -0.0365 vn -0.1933 -0.9579 -0.2123 vn -0.1261 -0.9919 -0.0173 vn -0.0707 -0.9904 -0.1187 vn -0.0061 -1.0000 0.0063 vn -0.0550 -0.9982 0.0251 vn -0.4270 -0.8918 -0.1495 vn 0.0278 -0.9972 0.0690 vn -0.7389 0.3966 0.5447 vn -0.2005 -0.9527 -0.2284 vn -0.0985 -0.9881 -0.1184 vn -0.1386 -0.9829 -0.1209 vn 0.0033 -1.0000 0.0032 vn 0.0377 -0.9992 -0.0112 vn 0.0286 -0.9995 0.0114 vn 0.0477 -0.9986 -0.0215 vn -0.0240 -0.9996 0.0125 vn 0.0030 -0.9995 0.0326 vn 0.0184 -0.9994 -0.0279 vn -0.0641 -0.9979 0.0109 vn -0.0478 -0.9980 0.0405 vn -0.1050 -0.9935 0.0435 vn -0.0372 -0.9962 -0.0791 vn -0.2815 -0.9545 0.0987 vn -0.2391 -0.9333 0.2679 vn -0.2222 -0.8362 0.5014 vn -0.1902 -0.7576 0.6244 vn 0.1054 0.2526 -0.9618 vn 0.4193 -0.9024 -0.0990 vn 0.0504 -0.9981 0.0358 vn 0.0229 -0.9995 0.0231 vn 0.0004 -0.9994 0.0358 vn 0.0201 -0.9989 -0.0413 vn 0.0151 -0.9998 0.0151 vn -0.0419 -0.9990 0.0182 vn -0.8253 -0.4619 0.3250 vn -0.3849 -0.7432 -0.5473 vn 0.5276 -0.8484 -0.0426 vn 0.0301 -0.5740 0.8183 vn 0.0155 -0.9999 -0.0041 vn 0.0343 -0.9993 -0.0127 vn -0.1822 -0.4683 0.8646 vn -0.1348 -0.9724 0.1904 vn 0.0240 -0.9990 0.0372 vn 0.0014 -0.9958 -0.0919 vn -0.0186 -0.9980 -0.0606 vn 0.0509 -0.9987 0.0090 vn -0.0206 -0.9995 0.0255 vn 0.0002 -0.9986 0.0521 vn -0.3030 -0.9484 0.0935 vn -0.4641 -0.8516 0.2437 vn -0.1827 -0.8564 0.4830 vn -0.3145 -0.9486 0.0339 vn -0.0003 -0.9999 -0.0138 vn 0.0283 -0.9993 0.0234 vn 0.0456 -0.9987 -0.0218 vn 0.5594 -0.8031 0.2049 vn -0.0885 -0.9950 0.0471 vn -0.0916 -0.9957 0.0165 vn -0.1163 -0.8452 0.5217 vn -0.2504 -0.5641 0.7868 vn -0.4333 -0.8801 -0.1942 vn -0.0056 -0.9956 0.0939 vn -0.6797 -0.6096 -0.4079 vn 0.0579 -0.9964 0.0614 vn -0.2195 -0.9682 -0.1204 vn -0.0558 -0.9958 -0.0720 vn 0.0244 -0.9994 0.0257 vn 0.0691 -0.9961 0.0553 vn 0.1306 -0.9914 -0.0122 vn 0.0237 -0.9995 0.0195 vn 0.0492 -0.9986 -0.0187 vn 0.2384 -0.9599 0.1472 vn -0.1215 -0.9712 0.2051 vn 0.2245 -0.8229 0.5220 vn -0.4974 -0.8675 -0.0049 vn -0.3508 -0.9008 0.2558 vn -0.0309 -0.9994 0.0174 vn 0.0035 -0.9968 0.0802 vn -0.2675 -0.8458 -0.4616 vn -0.1595 -0.7588 0.6314 vn -0.6772 -0.6312 -0.3780 vn 0.3818 -0.9174 -0.1124 vn 0.3778 -0.9212 -0.0932 vn 0.2053 -0.9656 0.1598 vn 0.2457 -0.9663 0.0764 vn 0.1765 -0.9842 0.0130 vn 0.0513 -0.9985 0.0186 vn 0.0099 -0.9994 0.0346 vn -0.2066 -0.9057 0.3702 vn -0.7923 -0.5684 0.2216 vn -0.0690 -0.6976 0.7131 vn 0.0492 -0.4910 0.8698 vn -0.0166 -0.5454 0.8380 vn 0.0365 -0.5726 0.8190 vn 0.4688 -0.8394 0.2751 vn 0.1162 -0.9652 0.2342 vn 0.5231 -0.8341 0.1749 vn 0.6211 -0.7386 0.2621 vn 0.5465 -0.8373 0.0155 vn 0.1563 -0.9842 -0.0827 vn 0.0324 -0.9994 0.0101 vn 0.0095 -0.9990 -0.0447 vn 0.0091 -0.9983 -0.0572 vn -0.0274 -0.9990 -0.0362 vn 0.3840 -0.7524 0.5353 vn 0.3793 -0.7443 0.5496 vn -0.0330 -0.9956 0.0876 vn -0.2641 -0.9521 0.1540 vn -0.4177 0.3847 -0.8231 vn -0.2514 -0.6011 0.7586 vn -0.2324 -0.6848 0.6907 vn 0.0496 -0.9988 -0.0023 vn 0.6249 -0.7315 0.2727 vn 0.0085 -0.9998 0.0171 vn -0.0014 -0.9998 0.0196 vn 0.0800 -0.9647 0.2508 vn 0.7631 -0.6240 0.1680 vn 0.0020 -0.9996 0.0269 vn 0.0063 -0.9997 0.0215 vn -0.5396 -0.4081 0.7364 vn 0.4177 -0.7344 0.5350 vn -0.6118 -0.0585 -0.7888 vn -0.0548 -0.6960 0.7159 vn 0.1472 0.1297 0.9806 vn 0.5340 -0.7291 0.4280 vn 0.3546 -0.8373 0.4160 vn 0.5941 -0.6572 0.4639 vn 0.5944 -0.6581 0.4622 vn 0.6930 -0.6626 0.2841 vn 0.6981 -0.6583 0.2816 vn 0.7844 -0.5993 0.1597 vn 0.0513 -0.9908 0.1252 vn -0.0993 -0.6349 0.7662 vn -0.0738 -0.9946 0.0732 vn -0.0484 -0.9795 0.1958 vn -0.0929 -0.9804 0.1735 vn -0.1142 -0.9191 0.3770 vn -0.6274 -0.3493 0.6960 vn -0.7224 0.0478 0.6898 vn 0.2171 -0.7596 0.6130 vn -0.7173 -0.6468 0.2593 vn -0.1338 -0.7545 0.6426 vn -0.0054 -0.9999 0.0157 vn -0.0440 -0.9984 0.0359 vn 0.4330 -0.6782 0.5937 vn 0.3834 -0.6483 0.6578 vn 0.0046 -0.9998 0.0192 vn -0.1342 -0.9859 0.1001 vn -0.0631 -0.4759 0.8772 vn -0.4561 -0.4729 0.7539 vn -0.5159 -0.3874 0.7640 vn -0.4962 -0.3339 0.8014 vn 0.0742 -0.9970 -0.0206 vn 0.0379 -0.9992 -0.0125 vn 0.0469 -0.9681 0.2463 vn -0.3715 -0.1219 0.9204 vn -0.0270 -0.9991 0.0326 vn -0.0184 -0.9998 0.0062 vn 0.0292 -0.9993 0.0253 vn -0.8978 -0.3122 -0.3105 vn 0.4706 -0.0236 0.8820 vn 0.0485 -0.9983 -0.0310 vn 0.0264 -0.9974 0.0673 vn 0.0735 -0.8901 0.4498 vn 0.0240 -0.7852 0.6188 vn 0.2881 -0.6677 0.6864 vn 0.1557 -0.9847 0.0784 vn 0.1127 -0.9871 0.1140 vn 0.1105 -0.9938 0.0152 vn 0.0132 -0.9985 -0.0529 vn -0.2163 -0.7490 0.6262 vn 0.0360 -0.9989 0.0288 vn -0.0174 -0.8368 0.5472 vn 0.2669 -0.8900 -0.3696 vn -0.3773 -0.3601 0.8532 vn 0.0278 -0.9996 -0.0108 vn -0.8780 0.2303 -0.4197 vn 0.4087 -0.9123 0.0254 vn 0.3071 -0.9223 0.2346 vn 0.0901 -0.9937 0.0667 vn 0.0361 -0.9990 -0.0252 vn 0.0250 -0.9997 0.0085 vn -0.1112 -0.9733 0.2009 vn 0.0363 -0.9991 0.0222 vn 0.2995 -0.9366 0.1821 vn 0.3690 -0.9075 0.2009 vn -0.4060 -0.3709 0.8352 vn 0.0307 -0.9993 0.0227 vn 0.0308 -0.9957 0.0879 vn 0.0205 -0.9938 0.1091 vn -0.4707 -0.6511 0.5954 vn 0.0086 -0.9989 0.0463 vn 0.0791 -0.5222 0.8491 vn 0.0560 -0.9034 0.4251 vn 0.0375 -0.9989 -0.0298 vn -0.2665 -0.7020 0.6604 vn -0.0338 -0.9806 0.1929 vn -0.0847 -0.9612 0.2627 vn 0.1117 -0.9890 -0.0967 vn 0.3627 -0.7465 0.5579 vn 0.1374 -0.9905 -0.0012 vn 0.2600 -0.7949 0.5483 vn 0.0500 -0.9987 -0.0119 vn 0.4934 -0.6512 0.5766 vn -0.0892 -0.8003 0.5929 vn 0.0548 -0.5419 0.8386 vn 0.1136 -0.9111 0.3963 vn -0.0400 -0.9989 -0.0244 vn 0.0128 -0.9999 0.0095 vn -0.4772 -0.6454 0.5964 vn -0.0340 -0.9983 0.0471 vn 0.0283 -0.9991 -0.0311 vn -0.0073 -0.9982 0.0591 vn -0.1048 -0.7512 0.6517 vn 0.0254 -0.9968 0.0757 vn -0.0096 -0.9986 -0.0527 vn 0.0271 -0.9996 0.0085 vn -0.2907 -0.7162 0.6345 vn 0.0119 -0.9997 0.0230 vn 0.0078 -0.9996 0.0268 vn -0.0062 -0.9999 0.0107 vn 0.0379 -0.8292 0.5577 vn -0.7795 -0.5304 0.3334 vn -0.5143 -0.7884 -0.3375 vn 0.4547 -0.8903 -0.0245 vn -0.0238 -0.9996 -0.0133 vn 0.0395 -0.9988 -0.0282 vn 0.4386 -0.7755 0.4542 vn 0.0240 -0.9975 0.0669 vn -0.4490 -0.8893 0.0863 vn 0.0977 -0.5426 0.8343 vn -0.0051 -0.9994 -0.0328 vn 0.2600 -0.8161 0.5161 vn -0.0597 -0.5402 0.8394 vn 0.0036 -0.9632 0.2689 vn -0.0200 -0.9996 -0.0215 vn 0.0196 -0.9986 -0.0501 vn 0.0176 -0.9998 0.0010 vn 0.0138 -0.9998 -0.0170 vn -0.5514 -0.6358 0.5401 vn 0.1266 -0.9713 0.2013 vn -0.1615 -0.9869 0.0020 vn 0.0251 -0.9991 -0.0336 vn -0.2997 -0.4743 0.8278 vn 0.0402 -0.9991 -0.0119 vn 0.0468 -0.9978 0.0479 vn -0.1632 -0.9856 -0.0452 vn 0.0260 -0.9993 0.0261 vn -0.0229 -0.9983 0.0531 vn -0.0912 -0.8012 0.5915 vn -0.0817 -0.5049 0.8593 vn -0.0922 -0.8393 0.5358 vn 0.0414 -0.9989 -0.0239 vn -0.0077 -0.9999 -0.0088 vn -0.5913 -0.6970 0.4057 vn 0.0708 -0.9804 0.1841 vn 0.0225 -0.9645 0.2631 vn 0.0039 -1.0000 0.0000 vn -0.3233 -0.4238 0.8461 vn 0.0299 -0.9984 0.0482 vn -0.0175 -0.9986 0.0490 vn 0.0107 -0.9995 -0.0287 vn -0.0208 -0.9991 -0.0377 vn -0.6208 -0.6793 0.3914 vn -0.0187 -0.9995 0.0266 vn -0.9951 0.0193 0.0969 usemtl Material.001 s off f 2826/1/1 2535/2/1 2060/3/1 f 1095/4/2 228/5/2 1078/6/2 f 429/7/3 456/8/3 385/9/3 f 2331/10/4 456/8/4 429/7/4 f 1229/11/5 476/12/5 1456/13/5 f 1402/14/6 1373/15/6 9/16/6 f 1334/17/7 444/18/7 1243/19/7 f 3464/20/8 3508/21/8 3446/22/8 f 1243/19/9 444/18/9 1345/23/9 f 1530/24/10 36/25/10 1540/26/10 f 1287/27/11 1227/28/11 1261/29/11 f 228/5/12 1095/4/12 1214/30/12 f 471/31/13 312/32/13 1241/33/13 f 1434/34/14 13/35/14 352/36/14 f 294/37/15 1345/23/15 552/38/15 f 1403/39/16 1402/14/16 9/16/16 f 1459/40/17 1602/41/17 1138/42/17 f 2341/43/18 1225/44/18 1219/45/18 f 1461/46/19 1906/47/19 251/48/19 f 1229/11/20 325/49/20 414/50/20 f 1292/51/21 1338/52/21 1370/53/21 f 1421/54/22 1450/55/22 104/56/22 f 1766/57/23 1981/58/23 1869/59/23 f 1338/52/24 1381/60/24 1370/53/24 f 1416/61/25 1433/62/25 1418/63/25 f 2298/64/26 2968/65/26 2978/66/26 f 3033/67/27 2972/68/27 2952/69/27 f 1539/70/28 265/71/28 1701/72/28 f 173/73/29 1356/74/29 1352/75/29 f 1332/76/30 1331/77/30 1254/78/30 f 1806/79/31 158/80/31 1747/81/31 f 1138/42/32 1602/41/32 1179/82/32 f 1419/83/33 1434/34/33 352/36/33 f 298/84/34 328/85/34 191/86/34 f 2030/87/35 2016/88/35 2042/89/35 f 1451/90/36 1456/13/36 476/12/36 f 3506/91/37 3427/92/37 3444/93/37 f 2331/10/38 429/7/38 345/94/38 f 3084/95/39 2438/96/39 2428/97/39 f 1456/13/40 1334/17/40 1234/98/40 f 47/99/41 1277/100/41 1141/101/41 f 1299/102/42 1234/98/42 1243/19/42 f 156/103/43 1229/11/43 414/50/43 f 1234/98/44 1334/17/44 1243/19/44 f 1372/104/45 1234/98/45 1299/102/45 f 3294/105/46 3279/106/46 3280/107/46 f 1974/108/47 1976/109/47 1975/110/47 f 1088/111/48 1108/112/48 1855/113/48 f 737/114/49 1348/115/49 2103/116/49 f 2015/117/50 2016/88/50 2030/87/50 f 1334/17/51 1310/118/51 444/18/51 f 1456/13/52 1234/98/52 1372/104/52 f 174/119/53 1627/120/53 2819/121/53 f 459/122/54 514/123/54 1265/124/54 f 2292/125/55 1120/126/55 2343/127/55 f 1441/128/56 1386/129/56 10/130/56 f 104/56/57 1450/55/57 1441/128/57 f 480/131/58 1421/54/58 382/132/58 f 2292/133/59 964/134/59 1120/135/59 f 1285/136/60 1292/51/60 1370/53/60 f 1374/137/61 1399/138/61 1113/139/61 f 1162/140/62 783/141/62 823/142/62 f 113/143/63 902/144/63 365/145/63 f 1262/146/64 365/145/64 1435/147/64 f 1346/148/65 1423/149/65 1300/150/65 f 1380/151/66 396/152/66 1403/39/66 f 1358/153/67 1263/154/67 1452/155/67 f 1358/153/68 1315/156/68 1263/154/68 f 1275/157/69 1316/158/69 1305/159/69 f 2198/160/70 2227/161/70 2203/162/70 f 1381/60/71 1419/83/71 352/36/71 f 1348/115/72 1204/163/72 1308/164/72 f 3342/165/73 3326/166/73 3305/167/73 f 118/168/74 119/169/74 1644/170/74 f 1409/171/75 1321/172/75 1406/173/75 f 1869/59/76 1862/174/76 1377/175/76 f 1799/176/77 1817/177/77 1845/178/77 f 197/179/78 1249/180/78 44/181/78 f 1232/182/79 1231/183/79 1260/184/79 f 577/185/80 2120/186/80 2088/187/80 f 1979/188/81 1978/189/81 2071/190/81 f 1267/191/82 1285/192/82 1217/193/82 f 183/194/83 296/195/83 118/168/83 f 296/195/84 119/169/84 118/168/84 f 446/196/85 394/197/85 1550/198/85 f 158/80/86 1325/199/86 1319/200/86 f 1747/81/87 1158/201/87 1806/79/87 f 42/202/88 1372/104/88 134/203/88 f 271/204/89 1241/33/89 1593/205/89 f 2750/206/90 2793/207/90 2762/208/90 f 80/209/91 664/210/91 58/211/91 f 16/212/92 394/197/92 446/196/92 f 159/213/93 1685/214/93 1682/215/93 f 382/132/94 1321/172/94 1409/171/94 f 445/216/95 282/217/95 1685/218/95 f 2016/88/96 2057/219/96 2042/89/96 f 1842/220/97 2549/221/97 2574/222/97 f 352/36/98 13/35/98 12/223/98 f 2858/224/99 3429/225/99 2767/226/99 f 1440/227/100 1424/228/100 1332/76/100 f 346/229/101 382/132/101 21/230/101 f 21/230/102 382/132/102 270/231/102 f 1974/108/103 1958/232/103 1976/109/103 f 1543/233/104 1493/234/104 48/235/104 f 9/16/105 1256/236/105 1227/28/105 f 2005/237/106 2016/88/106 2015/117/106 f 2761/238/107 2791/239/107 2790/240/107 f 296/195/108 446/196/108 119/169/108 f 16/212/109 159/213/109 394/197/109 f 2034/241/110 1570/242/110 1895/243/110 f 3437/244/111 2424/245/111 3504/246/111 f 1429/247/112 1295/248/112 1231/249/112 f 2887/250/113 1703/251/113 1769/252/113 f 2810/253/114 2809/254/114 2775/255/114 f 1451/90/115 299/256/115 1456/13/115 f 104/56/116 1441/128/116 1346/148/116 f 1232/182/117 1258/257/117 1230/258/117 f 982/259/118 182/260/118 1147/261/118 f 10/130/119 1386/129/119 77/262/119 f 2735/263/120 2699/264/120 2674/265/120 f 2609/266/121 2434/267/121 2600/268/121 f 3472/269/122 3461/270/122 2548/271/122 f 1988/272/123 1439/273/123 2021/274/123 f 446/196/124 903/275/124 16/212/124 f 492/276/125 1685/214/125 159/213/125 f 1093/277/126 1211/278/126 1212/279/126 f 1163/280/127 3470/281/127 986/282/127 f 1321/172/128 104/56/128 1406/173/128 f 1467/283/129 1346/148/129 1300/150/129 f 1719/284/130 931/285/130 1620/286/130 f 2615/287/131 2781/288/131 2467/289/131 f 1593/205/132 1440/290/132 271/204/132 f 1458/291/133 480/131/133 346/229/133 f 3024/292/134 3046/293/134 2962/294/134 f 443/295/135 527/296/135 296/195/135 f 296/195/136 527/296/136 446/196/136 f 527/296/137 891/297/137 446/196/137 f 446/196/138 891/297/138 903/275/138 f 3511/298/139 3437/299/139 3463/300/139 f 903/275/140 159/213/140 16/212/140 f 986/282/141 3470/281/141 1132/301/141 f 700/302/142 1076/303/142 719/304/142 f 1093/277/143 1039/305/143 1211/278/143 f 346/229/144 480/131/144 382/132/144 f 1441/128/145 10/130/145 1346/148/145 f 2117/306/146 737/114/146 2082/307/146 f 3190/308/147 3241/309/147 3173/310/147 f 1697/311/148 3479/312/148 3425/313/148 f 3336/314/149 407/315/149 443/295/149 f 76/316/150 527/296/150 443/295/150 f 903/275/151 261/317/151 159/213/151 f 2161/318/152 985/319/152 1026/320/152 f 429/7/153 385/9/153 480/131/153 f 2069/321/154 2048/322/154 2121/323/154 f 1180/324/155 3500/325/155 3485/326/155 f 493/327/156 507/328/156 481/329/156 f 407/315/157 76/316/157 443/295/157 f 76/316/158 376/330/158 527/296/158 f 376/330/159 886/331/159 527/296/159 f 527/296/160 886/331/160 891/297/160 f 1208/332/161 1207/333/161 1193/334/161 f 3246/335/162 3262/336/162 3216/337/162 f 2093/338/163 2085/339/163 1978/340/163 f 315/341/164 409/342/164 814/343/164 f 1353/344/165 1357/345/165 1238/346/165 f 2345/347/166 346/229/166 1472/348/166 f 1204/163/167 1348/115/167 737/114/167 f 346/229/168 21/230/168 1472/348/168 f 1406/173/169 1346/148/169 1467/283/169 f 3433/349/170 3501/350/170 3443/351/170 f 261/317/171 727/352/171 159/213/171 f 159/213/172 727/352/172 492/276/172 f 3505/353/173 3445/354/173 3476/355/173 f 316/356/174 362/357/174 783/141/174 f 1002/358/175 3495/359/175 1153/360/175 f 2594/361/176 2634/362/176 2607/363/176 f 1321/172/177 1421/54/177 104/56/177 f 1981/58/178 1154/364/178 1869/59/178 f 1564/365/179 516/366/179 493/327/179 f 516/366/180 3222/367/180 493/327/180 f 478/368/181 488/369/181 468/370/181 f 2812/371/182 2844/372/182 2828/373/182 f 90/374/183 91/375/183 112/376/183 f 154/377/184 136/378/184 103/379/184 f 345/94/185 429/7/185 1458/291/185 f 429/7/186 480/131/186 1458/291/186 f 447/380/187 1564/365/187 1640/381/187 f 2096/382/188 1894/383/188 2857/384/188 f 516/366/189 531/385/189 3222/367/189 f 469/386/190 478/368/190 468/370/190 f 376/330/191 76/316/191 407/315/191 f 65/387/192 89/388/192 111/389/192 f 66/390/193 67/391/193 90/374/193 f 38/392/194 39/393/194 66/394/194 f 39/395/195 38/396/195 27/397/195 f 3471/398/196 3493/399/196 3456/400/196 f 347/401/197 911/402/197 405/403/197 f 1018/404/198 1045/405/198 1013/406/198 f 1762/407/199 1724/408/199 1981/58/199 f 385/9/200 1229/11/200 156/103/200 f 2120/409/201 1978/189/201 1979/188/201 f 1409/171/202 1406/173/202 1375/410/202 f 1375/410/203 1406/173/203 1467/283/203 f 397/411/204 398/412/204 1640/381/204 f 542/413/205 531/385/205 516/366/205 f 171/414/206 281/415/206 490/416/206 f 1207/417/207 1181/418/207 1175/419/207 f 1041/420/208 1319/200/208 1215/421/208 f 3474/422/209 3446/22/209 3489/423/209 f 1123/424/210 1146/425/210 1115/426/210 f 1042/427/211 3478/428/211 1148/429/211 f 382/132/212 1421/54/212 1321/172/212 f 396/152/213 1402/14/213 1403/39/213 f 1472/348/214 21/230/214 1471/430/214 f 399/431/215 398/412/215 397/411/215 f 447/380/216 516/366/216 1564/365/216 f 653/432/217 542/413/217 516/366/217 f 310/433/218 258/434/218 259/435/218 f 181/436/219 157/437/219 703/438/219 f 133/439/220 153/440/220 132/441/220 f 490/416/221 237/442/221 1300/443/221 f 40/444/222 67/445/222 39/393/222 f 33/446/223 40/447/223 27/397/223 f 67/445/224 66/394/224 39/393/224 f 40/447/225 39/395/225 27/397/225 f 988/448/226 998/449/226 978/450/226 f 112/376/227 89/388/227 90/374/227 f 1211/278/228 1039/305/228 922/451/228 f 1156/452/229 1195/453/229 1146/425/229 f 456/8/230 190/454/230 476/12/230 f 664/455/231 1811/456/231 1525/457/231 f 1909/458/232 2442/459/232 2414/460/232 f 460/461/233 1640/381/233 398/412/233 f 1640/381/234 460/461/234 447/380/234 f 482/462/235 516/366/235 447/380/235 f 260/463/236 293/464/236 240/465/236 f 489/466/237 899/467/237 525/468/237 f 186/469/238 212/470/238 200/471/238 f 240/465/239 266/472/239 247/473/239 f 324/474/240 359/475/240 323/476/240 f 588/477/241 38/396/241 53/478/241 f 196/479/242 200/471/242 224/480/242 f 123/481/243 131/482/243 116/483/243 f 157/437/244 181/436/244 187/484/244 f 266/472/245 324/474/245 310/433/245 f 703/438/246 157/437/246 153/440/246 f 703/438/247 153/440/247 133/439/247 f 726/485/248 946/486/248 1330/487/248 f 1083/488/249 438/489/249 1127/490/249 f 1176/491/250 1155/492/250 1199/493/250 f 783/141/251 362/357/251 120/494/251 f 1456/13/252 299/256/252 1334/17/252 f 325/49/253 1372/104/253 42/202/253 f 137/495/254 290/496/254 3/497/254 f 341/498/255 354/499/255 399/431/255 f 400/500/256 398/412/256 399/431/256 f 482/462/257 447/380/257 460/461/257 f 482/462/258 653/432/258 516/366/258 f 293/464/259 266/472/259 240/465/259 f 142/501/260 152/502/260 151/503/260 f 153/440/261 152/502/261 132/441/261 f 248/504/262 171/414/262 227/505/262 f 123/481/263 151/503/263 168/506/263 f 133/439/264 132/441/264 124/507/264 f 101/508/265 124/507/265 91/375/265 f 260/463/266 225/509/266 840/510/266 f 1201/511/267 1093/277/267 1212/279/267 f 1093/277/268 1143/512/268 1091/513/268 f 595/514/269 697/515/269 842/516/269 f 1013/406/270 1061/517/270 1037/518/270 f 299/256/271 1228/519/271 1334/17/271 f 1314/520/272 444/18/272 1310/118/272 f 1314/520/273 213/521/273 444/18/273 f 3103/522/274 3145/523/274 3144/524/274 f 341/498/275 331/525/275 354/499/275 f 354/499/276 400/500/276 399/431/276 f 400/500/277 460/461/277 398/412/277 f 151/503/278 152/502/278 180/526/278 f 2964/527/279 2983/528/279 2974/529/279 f 2458/530/280 979/531/280 2488/532/280 f 117/533/281 123/481/281 116/483/281 f 454/534/282 441/535/282 468/536/282 f 911/402/283 938/537/283 406/538/283 f 406/538/284 938/537/284 418/539/284 f 1605/540/285 1617/541/285 1854/542/285 f 1237/543/286 506/544/286 106/545/286 f 331/525/287 355/546/287 354/499/287 f 420/547/288 460/461/288 400/500/288 f 103/379/289 3218/548/289 661/549/289 f 310/433/290 323/476/290 309/550/290 f 636/551/291 101/508/291 75/552/291 f 425/553/292 470/554/292 442/555/292 f 501/556/293 547/557/293 513/558/293 f 1394/559/294 1408/560/294 1404/561/294 f 3182/562/295 2043/563/295 1489/564/295 f 2709/565/296 263/566/296 3386/567/296 f 355/546/297 400/500/297 354/499/297 f 483/568/298 482/462/298 460/461/298 f 483/568/299 517/569/299 482/462/299 f 517/569/300 653/432/300 482/462/300 f 517/569/301 532/570/301 653/432/301 f 1162/140/302 823/142/302 377/571/302 f 547/557/303 125/572/303 79/573/303 f 1384/574/304 501/556/304 680/575/304 f 959/576/305 954/577/305 3029/578/305 f 424/579/306 441/535/306 454/534/306 f 2696/580/307 964/581/307 2292/125/307 f 556/582/308 162/583/308 548/584/308 f 393/585/309 440/586/309 416/587/309 f 1379/588/310 182/260/310 982/259/310 f 1785/589/311 1575/590/311 1796/591/311 f 2104/592/312 2047/593/312 1378/594/312 f 1243/19/313 1345/23/313 268/595/313 f 284/596/314 331/525/314 263/566/314 f 284/596/315 332/597/315 331/525/315 f 332/597/316 355/546/316 331/525/316 f 420/547/317 483/568/317 460/461/317 f 488/369/318 537/598/318 477/599/318 f 248/504/319 227/505/319 554/600/319 f 1195/453/320 1194/601/320 1166/602/320 f 101/508/321 91/375/321 75/552/321 f 162/583/322 1389/603/322 782/604/322 f 2082/307/323 737/114/323 2103/116/323 f 328/605/324 329/606/324 1335/607/324 f 385/9/325 156/103/325 1421/54/325 f 190/454/326 456/8/326 2361/608/326 f 366/609/327 400/500/327 355/546/327 f 421/610/328 420/547/328 400/500/328 f 430/611/329 483/568/329 420/547/329 f 508/612/330 517/569/330 483/568/330 f 517/569/331 564/613/331 532/570/331 f 532/570/332 564/613/332 563/614/332 f 124/507/333 112/376/333 91/375/333 f 3503/615/334 3502/616/334 1042/427/334 f 53/617/335 54/618/335 74/619/335 f 1372/104/336 1299/102/336 134/203/336 f 244/620/337 274/621/337 263/566/337 f 263/566/338 274/621/338 284/596/338 f 274/621/339 332/597/339 284/596/339 f 421/610/340 430/611/340 420/547/340 f 680/575/341 513/558/341 522/622/341 f 488/623/342 477/624/342 1354/625/342 f 323/476/343 359/475/343 393/585/343 f 455/626/344 470/554/344 469/386/344 f 1631/627/345 1912/628/345 1531/629/345 f 227/505/346 171/414/346 326/630/346 f 74/619/347 65/631/347 53/617/347 f 998/449/348 968/632/348 954/577/348 f 478/633/349 523/634/349 488/623/349 f 316/356/350 558/635/350 2393/636/350 f 1433/62/351 1463/637/351 1462/638/351 f 329/606/352 1380/151/352 1287/27/352 f 356/639/353 355/546/353 332/597/353 f 356/639/354 366/609/354 355/546/354 f 366/609/355 386/640/355 400/500/355 f 494/641/356 483/568/356 430/611/356 f 543/642/357 564/613/357 517/569/357 f 528/643/358 563/614/358 564/613/358 f 417/644/359 424/645/359 440/586/359 f 468/370/360 488/369/360 1354/646/360 f 911/402/361 406/538/361 405/403/361 f 609/647/362 67/445/362 40/444/362 f 123/481/363 142/501/363 151/503/363 f 1441/128/364 42/202/364 1386/129/364 f 1287/27/365 1380/151/365 1403/39/365 f 2592/648/366 2424/245/366 3437/244/366 f 1657/649/367 2625/650/367 1662/651/367 f 2753/652/368 2723/653/368 2640/654/368 f 366/609/369 378/655/369 386/640/369 f 400/500/370 386/640/370 421/610/370 f 494/641/371 508/612/371 483/568/371 f 508/612/372 543/642/372 517/569/372 f 212/470/373 224/480/373 200/471/373 f 3445/354/374 3511/298/374 3497/656/374 f 1171/657/375 558/635/375 316/356/375 f 90/658/376 89/659/376 74/619/376 f 168/506/377 180/526/377 167/660/377 f 154/377/378 160/661/378 136/378/378 f 3506/91/379 2768/662/379 3427/92/379 f 3494/663/380 3475/664/380 3459/665/380 f 251/48/381 1906/47/381 262/666/381 f 1525/667/382 1549/668/382 58/211/382 f 1228/519/383 1310/118/383 1334/17/383 f 2769/669/384 2615/287/384 2467/289/384 f 252/670/385 244/620/385 3287/671/385 f 274/621/386 285/672/386 332/597/386 f 332/597/387 285/672/387 356/639/387 f 356/639/388 378/655/388 366/609/388 f 421/610/389 431/673/389 430/611/389 f 431/673/390 494/641/390 430/611/390 f 240/465/391 247/473/391 212/470/391 f 125/572/392 281/415/392 171/414/392 f 310/433/393 324/474/393 323/476/393 f 202/674/394 756/675/394 144/676/394 f 2643/677/395 1928/678/395 2879/679/395 f 2894/680/396 2615/287/396 2766/681/396 f 3287/671/397 3095/682/397 252/670/397 f 3371/683/398 3381/684/398 3370/685/398 f 300/686/399 274/621/399 244/620/399 f 274/621/400 300/686/400 285/672/400 f 342/687/401 378/655/401 356/639/401 f 285/672/402 342/687/402 356/639/402 f 494/641/403 543/642/403 508/612/403 f 543/642/404 544/688/404 564/613/404 f 544/688/405 541/689/405 564/613/405 f 564/613/406 541/689/406 528/643/406 f 470/690/407 524/691/407 469/692/407 f 418/539/408 442/555/408 441/693/408 f 201/694/409 2168/695/409 427/696/409 f 454/534/410 1313/697/410 424/579/410 f 225/509/411 260/463/411 181/436/411 f 2264/698/412 3479/312/412 2253/699/412 f 425/553/413 426/700/413 470/554/413 f 142/501/414 123/481/414 117/533/414 f 2552/701/415 1071/702/415 1059/703/415 f 3457/704/416 2754/705/416 3482/706/416 f 20/707/417 2067/708/417 2047/593/417 f 126/709/418 155/710/418 154/377/418 f 583/711/419 22/712/419 1488/713/419 f 23/714/420 22/712/420 583/711/420 f 22/712/421 23/714/421 36/715/421 f 155/710/422 172/716/422 154/377/422 f 1540/26/423 36/25/423 1549/668/423 f 252/670/424 300/686/424 244/620/424 f 300/686/425 342/687/425 285/672/425 f 386/640/426 411/717/426 421/610/426 f 421/610/427 411/717/427 431/673/427 f 111/389/428 89/388/428 116/483/428 f 470/690/429 489/718/429 524/691/429 f 524/719/430 489/466/430 556/582/430 f 548/584/431 162/583/431 782/604/431 f 203/720/432 437/721/432 750/722/432 f 1127/490/433 438/489/433 1133/723/433 f 2607/363/434 2634/362/434 2652/724/434 f 1804/725/435 1778/726/435 1779/727/435 f 361/728/436 426/700/436 425/553/436 f 1494/729/437 2469/730/437 1693/731/437 f 2721/732/438 2750/733/438 2720/734/438 f 2107/735/439 1666/736/439 1350/737/439 f 286/738/440 300/686/440 252/670/440 f 301/739/441 342/687/441 300/686/441 f 342/687/442 387/740/442 378/655/442 f 378/655/443 387/740/443 386/640/443 f 386/640/444 387/740/444 411/717/444 f 431/673/445 448/741/445 494/641/445 f 494/641/446 448/741/446 543/642/446 f 543/642/447 533/742/447 544/688/447 f 789/743/448 914/744/448 541/689/448 f 65/631/449 74/619/449 89/659/449 f 180/526/450 200/471/450 196/479/450 f 682/745/451 680/575/451 522/622/451 f 1142/746/452 1208/332/452 1193/334/452 f 132/441/453 152/502/453 142/501/453 f 186/469/454 200/471/454 180/526/454 f 1125/747/455 1129/748/455 1106/749/455 f 1117/750/456 1015/751/456 1092/752/456 f 1747/81/457 1041/420/457 182/260/457 f 3489/753/458 3508/754/458 3500/325/458 f 59/755/459 80/209/459 58/211/459 f 3207/756/460 174/757/460 2819/758/460 f 2894/680/461 2766/681/461 3428/759/461 f 252/670/462 234/760/462 286/738/462 f 301/739/463 300/686/463 286/738/463 f 387/740/464 388/761/464 411/717/464 f 411/717/465 448/741/465 431/673/465 f 495/762/466 533/742/466 543/642/466 f 448/741/467 495/762/467 543/642/467 f 180/526/468 157/437/468 186/469/468 f 556/763/469 539/764/469 524/691/469 f 782/604/470 1389/603/470 756/675/470 f 1252/765/471 1242/766/471 1267/767/471 f 1242/766/472 1292/51/472 1285/136/472 f 2182/768/473 2006/769/473 2141/770/473 f 379/771/474 387/740/474 342/687/474 f 388/761/475 432/772/475 411/717/475 f 432/772/476 473/773/476 411/717/476 f 473/773/477 448/741/477 411/717/477 f 473/773/478 495/762/478 448/741/478 f 496/774/479 544/688/479 533/742/479 f 544/688/480 550/775/480 541/689/480 f 664/210/481 80/209/481 1653/776/481 f 187/484/482 260/463/482 186/469/482 f 3498/777/483 3430/778/483 3445/354/483 f 186/469/484 260/463/484 240/465/484 f 393/585/485 359/475/485 417/644/485 f 538/779/486 548/584/486 645/780/486 f 3464/20/487 1830/781/487 3469/782/487 f 23/783/488 60/784/488 59/755/488 f 68/785/489 1578/786/489 80/787/489 f 1456/13/490 1372/104/490 325/49/490 f 1229/11/491 1456/13/491 325/49/491 f 3433/349/492 3477/788/492 3501/350/492 f 234/760/493 275/789/493 286/738/493 f 301/739/494 333/790/494 342/687/494 f 333/790/495 379/771/495 342/687/495 f 387/740/496 379/771/496 388/761/496 f 495/762/497 496/774/497 533/742/497 f 123/481/498 168/506/498 150/791/498 f 454/534/499 1354/625/499 1313/697/499 f 337/792/500 359/475/500 324/474/500 f 540/793/501 948/794/501 549/795/501 f 103/379/502 136/378/502 102/796/502 f 145/797/503 155/710/503 126/709/503 f 548/584/504 782/604/504 645/780/504 f 2977/798/505 956/799/505 2429/800/505 f 937/801/506 55/802/506 313/803/506 f 93/804/507 103/379/507 102/796/507 f 385/9/508 476/12/508 1229/11/508 f 2656/805/509 2691/806/509 2668/807/509 f 275/789/510 287/808/510 286/738/510 f 287/808/511 301/739/511 286/738/511 f 287/808/512 333/790/512 301/739/512 f 379/771/513 389/809/513 388/761/513 f 389/809/514 432/772/514 388/761/514 f 473/773/515 474/810/515 495/762/515 f 495/762/516 474/810/516 496/774/516 f 550/775/517 789/743/517 541/689/517 f 78/811/518 93/804/518 102/796/518 f 197/812/519 203/720/519 172/716/519 f 3228/813/520 3241/309/520 3190/308/520 f 54/618/521 66/394/521 74/619/521 f 793/814/522 794/815/522 847/816/522 f 60/784/523 81/817/523 68/818/523 f 81/819/524 1578/786/524 68/785/524 f 2083/820/525 2117/306/525 2065/821/525 f 1747/81/526 158/80/526 1041/420/526 f 20/707/527 2087/822/527 2067/708/527 f 1458/291/528 346/229/528 2345/347/528 f 245/823/529 234/760/529 235/824/529 f 245/823/530 275/789/530 234/760/530 f 319/825/531 333/790/531 287/808/531 f 367/826/532 379/771/532 333/790/532 f 474/810/533 545/827/533 496/774/533 f 545/827/534 544/688/534 496/774/534 f 545/827/535 550/775/535 544/688/535 f 550/775/536 55/802/536 789/743/536 f 563/614/537 914/744/537 757/828/537 f 79/573/538 125/572/538 171/414/538 f 38/396/539 66/390/539 54/829/539 f 112/376/540 117/533/540 89/388/540 f 271/204/541 668/830/541 811/831/541 f 271/204/542 811/831/542 1241/33/542 f 226/832/543 1224/833/543 1100/834/543 f 94/835/544 1578/786/544 81/819/544 f 94/835/545 1607/836/545 1578/786/545 f 3502/837/546 3465/838/546 3455/839/546 f 302/840/547 287/808/547 275/789/547 f 319/825/548 367/826/548 333/790/548 f 367/826/549 389/809/549 379/771/549 f 433/841/550 432/772/550 389/809/550 f 432/772/551 449/842/551 473/773/551 f 473/773/552 449/842/552 474/810/552 f 406/538/553 441/693/553 424/645/553 f 2872/843/554 2198/844/554 2454/845/554 f 2290/846/555 2193/847/555 2443/848/555 f 2917/849/556 2927/850/556 2916/851/556 f 162/583/557 948/794/557 890/852/557 f 359/475/558 405/403/558 417/644/558 f 549/795/559 948/794/559 162/583/559 f 609/647/560 75/853/560 67/445/560 f 361/728/561 915/854/561 426/700/561 f 1320/855/562 1593/205/562 312/32/562 f 1142/746/563 964/581/563 1208/332/563 f 3453/856/564 2669/857/564 1897/858/564 f 606/859/565 593/860/565 60/861/565 f 593/860/566 81/819/566 60/861/566 f 480/131/567 385/9/567 1421/54/567 f 1669/862/568 443/295/568 183/194/568 f 276/863/569 275/789/569 245/823/569 f 276/863/570 302/840/570 275/789/570 f 319/825/571 287/808/571 302/840/571 f 369/864/572 433/841/572 389/809/572 f 432/772/573 433/841/573 449/842/573 f 449/842/574 497/865/574 474/810/574 f 497/865/575 545/827/575 474/810/575 f 2174/866/576 977/867/576 2178/868/576 f 3434/869/577 3441/870/577 3468/871/577 f 2768/662/578 3461/270/578 3473/872/578 f 74/873/579 66/390/579 90/374/579 f 811/831/580 471/31/580 1241/33/580 f 406/538/581 418/539/581 441/693/581 f 501/556/582 537/598/582 547/557/582 f 82/874/583 81/819/583 593/860/583 f 82/874/584 94/835/584 81/819/584 f 270/231/585 382/132/585 1409/171/585 f 235/824/586 217/875/586 245/823/586 f 367/826/587 369/864/587 389/809/587 f 497/865/588 518/876/588 545/827/588 f 518/876/589 546/877/589 545/827/589 f 545/827/590 546/877/590 550/775/590 f 339/878/591 55/802/591 550/775/591 f 489/718/592 525/879/592 556/763/592 f 153/440/593 157/437/593 152/502/593 f 347/401/594 337/792/594 858/880/594 f 525/468/595 540/793/595 549/795/595 f 151/503/596 180/526/596 168/506/596 f 2277/881/597 1120/126/597 1025/882/597 f 3469/782/598 3493/399/598 3508/21/598 f 127/883/599 94/835/599 82/874/599 f 1262/146/600 113/143/600 365/145/600 f 1960/884/601 833/885/601 1935/886/601 f 1687/887/602 206/888/602 217/875/602 f 217/875/603 236/889/603 245/823/603 f 245/823/604 236/889/604 276/863/604 f 303/890/605 302/840/605 276/863/605 f 368/891/606 319/825/606 302/840/606 f 303/890/607 368/891/607 302/840/607 f 368/891/608 367/826/608 319/825/608 f 367/826/609 368/891/609 369/864/609 f 433/841/610 484/892/610 449/842/610 f 449/842/611 484/892/611 497/865/611 f 383/893/612 339/878/612 550/775/612 f 546/877/613 383/893/613 550/775/613 f 339/894/614 313/895/614 55/896/614 f 968/632/615 996/897/615 3063/898/615 f 629/899/616 75/552/616 609/900/616 f 471/31/617 360/901/617 312/32/617 f 1489/564/618 2016/88/618 2005/237/618 f 556/582/619 525/468/619 162/583/619 f 127/883/620 146/902/620 138/903/620 f 206/888/621 236/889/621 217/875/621 f 236/889/622 264/904/622 276/863/622 f 264/904/623 303/890/623 276/863/623 f 433/841/624 461/905/624 484/892/624 f 484/892/625 518/876/625 497/865/625 f 339/894/626 479/906/626 1328/907/626 f 1037/518/627 1067/908/627 1044/909/627 f 1199/493/628 1194/601/628 1211/278/628 f 197/179/629 44/181/629 203/910/629 f 1384/574/630 477/599/630 501/556/630 f 360/901/631 1320/855/631 312/32/631 f 1567/911/632 1798/912/632 1597/913/632 f 1014/914/633 803/915/633 1161/916/633 f 593/860/634 32/917/634 82/874/634 f 83/918/635 127/883/635 82/874/635 f 146/902/636 175/919/636 1639/920/636 f 1687/887/637 1639/920/637 175/919/637 f 175/919/638 206/888/638 1687/887/638 f 303/890/639 334/921/639 368/891/639 f 334/921/640 370/922/640 368/891/640 f 368/891/641 370/922/641 369/864/641 f 370/922/642 401/923/642 433/841/642 f 369/864/643 370/922/643 433/841/643 f 401/923/644 461/905/644 433/841/644 f 484/892/645 509/924/645 518/876/645 f 479/925/646 339/878/646 383/893/646 f 1055/926/647 1061/517/647 1045/405/647 f 316/356/648 2393/636/648 362/357/648 f 348/927/649 915/854/649 361/728/649 f 1320/855/650 327/928/650 106/929/650 f 83/918/651 82/874/651 32/917/651 f 83/918/652 95/930/652 127/883/652 f 127/883/653 95/930/653 146/902/653 f 288/931/654 303/890/654 264/904/654 f 288/931/655 334/921/655 303/890/655 f 334/921/656 357/932/656 370/922/656 f 461/905/657 509/924/657 484/892/657 f 518/876/658 534/933/658 546/877/658 f 157/437/659 187/484/659 186/469/659 f 1120/126/660 964/581/660 1142/746/660 f 89/388/661 117/533/661 116/483/661 f 556/582/662 548/584/662 539/934/662 f 852/935/663 41/936/663 1320/855/663 f 360/901/664 852/935/664 1320/855/664 f 41/936/665 327/928/665 1320/855/665 f 1831/937/666 1577/938/666 1599/939/666 f 293/464/667 858/880/667 266/472/667 f 1375/410/668 237/940/668 1255/941/668 f 1979/942/669 2122/943/669 1206/944/669 f 32/917/670 45/945/670 83/918/670 f 95/930/671 139/946/671 146/902/671 f 146/902/672 139/946/672 175/919/672 f 175/919/673 192/947/673 206/888/673 f 192/947/674 193/948/674 206/888/674 f 193/948/675 246/949/675 206/888/675 f 246/949/676 236/889/676 206/888/676 f 246/949/677 264/904/677 236/889/677 f 288/931/678 304/950/678 334/921/678 f 334/921/679 304/950/679 357/932/679 f 304/950/680 358/951/680 357/932/680 f 357/932/681 401/923/681 370/922/681 f 401/923/682 434/952/682 461/905/682 f 518/876/683 509/924/683 534/933/683 f 2696/953/684 2767/226/684 964/134/684 f 2005/237/685 1976/109/685 1489/564/685 f 1025/882/686 1120/126/686 1142/746/686 f 139/946/687 176/954/687 175/919/687 f 176/954/688 192/947/688 175/919/688 f 246/949/689 277/955/689 264/904/689 f 277/955/690 288/931/690 264/904/690 f 534/933/691 383/893/691 546/877/691 f 523/956/692 539/934/692 538/779/692 f 1237/957/693 106/929/693 19/958/693 f 37/959/694 46/960/694 45/945/694 f 46/960/695 83/918/695 45/945/695 f 128/961/696 139/946/696 95/930/696 f 193/948/697 253/962/697 246/949/697 f 358/951/698 371/963/698 357/932/698 f 357/932/699 371/963/699 401/923/699 f 371/963/700 412/964/700 401/923/700 f 412/964/701 434/952/701 401/923/701 f 434/952/702 450/965/702 461/905/702 f 450/965/703 509/924/703 461/905/703 f 450/965/704 498/966/704 509/924/704 f 509/924/705 498/966/705 534/933/705 f 75/552/706 91/375/706 67/391/706 f 41/936/707 297/967/707 327/928/707 f 1551/968/708 84/969/708 83/918/708 f 83/918/709 84/969/709 95/930/709 f 176/954/710 193/948/710 192/947/710 f 278/970/711 277/955/711 246/949/711 f 305/971/712 288/931/712 277/955/712 f 288/931/713 305/971/713 304/950/713 f 304/950/714 305/971/714 358/951/714 f 412/964/715 451/972/715 434/952/715 f 451/972/716 450/965/716 434/952/716 f 534/933/717 565/973/717 383/893/717 f 565/973/718 135/974/718 383/893/718 f 383/893/719 135/974/719 479/925/719 f 213/975/720 502/976/720 479/925/720 f 971/977/721 970/978/721 961/979/721 f 337/792/722 405/403/722 359/475/722 f 539/934/723 548/584/723 538/779/723 f 326/630/724 170/980/724 227/505/724 f 297/967/725 18/981/725 327/928/725 f 327/928/726 18/981/726 19/958/726 f 1153/360/727 3447/982/727 1064/983/727 f 385/9/728 456/8/728 476/12/728 f 84/969/729 128/961/729 95/930/729 f 147/984/730 176/954/730 139/946/730 f 253/962/731 278/970/731 246/949/731 f 278/970/732 305/971/732 277/955/732 f 335/985/733 380/986/733 371/963/733 f 358/951/734 335/985/734 371/963/734 f 371/963/735 390/987/735 412/964/735 f 462/988/736 498/966/736 450/965/736 f 267/989/737 479/925/737 135/974/737 f 267/989/738 213/975/738 479/925/738 f 132/441/739 142/501/739 117/533/739 f 247/473/740 259/435/740 224/480/740 f 19/958/741 18/981/741 1237/957/741 f 2332/990/742 1458/291/742 2345/347/742 f 129/991/743 139/946/743 128/961/743 f 129/991/744 147/984/744 139/946/744 f 207/992/745 253/962/745 193/948/745 f 335/985/746 358/951/746 305/971/746 f 343/993/747 380/986/747 335/985/747 f 371/963/748 380/986/748 390/987/748 f 451/972/749 462/988/749 450/965/749 f 18/981/750 559/994/750 1237/957/750 f 562/995/751 608/996/751 2/997/751 f 2093/338/752 2120/186/752 577/185/752 f 306/998/753 305/971/753 278/970/753 f 306/998/754 335/985/754 305/971/754 f 390/987/755 435/999/755 412/964/755 f 463/1000/756 451/972/756 412/964/756 f 435/999/757 463/1000/757 412/964/757 f 519/1001/758 534/933/758 498/966/758 f 519/1001/759 565/973/759 534/933/759 f 67/391/760 91/375/760 90/374/760 f 3424/1002/761 3492/1003/761 3426/1004/761 f 441/693/762 442/555/762 455/626/762 f 18/981/763 562/1005/763 559/994/763 f 943/1006/764 1297/1007/764 684/1008/764 f 3470/281/765 3497/656/765 3490/1009/765 f 84/969/766 1580/1010/766 128/961/766 f 164/1011/767 176/954/767 147/984/767 f 164/1011/768 193/948/768 176/954/768 f 164/1011/769 207/992/769 193/948/769 f 289/1012/770 306/998/770 278/970/770 f 343/993/771 390/987/771 380/986/771 f 499/1013/772 462/988/772 451/972/772 f 463/1000/773 499/1013/773 451/972/773 f 552/1014/774 135/974/774 565/973/774 f 552/1014/775 267/989/775 135/974/775 f 959/576/776 998/449/776 954/577/776 f 454/534/777 468/536/777 1354/625/777 f 524/691/778 539/764/778 523/634/778 f 181/436/779 260/463/779 187/484/779 f 1300/150/780 1423/149/780 326/1015/780 f 2030/87/781 2041/1016/781 2040/1017/781 f 218/1018/782 207/992/782 164/1011/782 f 218/1018/783 230/1019/783 207/992/783 f 230/1019/784 253/962/784 207/992/784 f 230/1019/785 254/1020/785 253/962/785 f 253/962/786 254/1020/786 278/970/786 f 344/1021/787 335/985/787 306/998/787 f 344/1021/788 343/993/788 335/985/788 f 344/1021/789 372/1022/789 343/993/789 f 343/993/790 372/1022/790 390/987/790 f 390/987/791 413/1023/791 435/999/791 f 519/1001/792 498/966/792 462/988/792 f 499/1013/793 519/1001/793 462/988/793 f 535/1024/794 565/973/794 519/1001/794 f 1199/493/795 1211/278/795 922/451/795 f 998/449/796 1018/1025/796 997/1026/796 f 1018/404/797 1013/406/797 997/1027/797 f 152/502/798 157/437/798 180/526/798 f 54/829/799 53/478/799 38/396/799 f 143/1028/800 133/439/800 124/507/800 f 524/691/801 523/634/801 478/633/801 f 559/994/802 2/1029/802 419/1030/802 f 353/1031/803 560/1032/803 25/1033/803 f 1183/1034/804 1465/1035/804 1438/1036/804 f 1805/1037/805 1838/1038/805 3510/1039/805 f 42/202/806 134/203/806 1386/129/806 f 114/1040/807 129/991/807 128/961/807 f 148/1041/808 147/984/808 129/991/808 f 148/1041/809 164/1011/809 147/984/809 f 254/1020/810 289/1012/810 278/970/810 f 289/1012/811 344/1021/811 306/998/811 f 391/1042/812 413/1023/812 390/987/812 f 1149/1043/813 922/451/813 594/1044/813 f 198/1045/814 197/812/814 172/716/814 f 1772/1046/815 1733/1047/815 1734/1048/815 f 2/1029/816 560/1032/816 419/1030/816 f 419/1049/817 560/1050/817 353/1051/817 f 2967/1052/818 957/1053/818 956/1054/818 f 167/660/819 180/526/819 196/479/819 f 414/50/820 42/202/820 1441/128/820 f 1450/55/821 414/50/821 1441/128/821 f 165/1055/822 218/1018/822 164/1011/822 f 255/1056/823 230/1019/823 218/1018/823 f 255/1056/824 254/1020/824 230/1019/824 f 289/1012/825 307/1057/825 344/1021/825 f 307/1057/826 372/1022/826 344/1021/826 f 391/1042/827 390/987/827 372/1022/827 f 402/1058/828 413/1023/828 391/1042/828 f 413/1023/829 436/1059/829 435/999/829 f 435/999/830 436/1059/830 463/1000/830 f 485/1060/831 499/1013/831 463/1000/831 f 485/1060/832 519/1001/832 499/1013/832 f 485/1060/833 535/1024/833 519/1001/833 f 552/1014/834 565/973/834 535/1024/834 f 680/575/835 774/1061/835 1384/574/835 f 102/796/836 670/1062/836 92/1063/836 f 56/1064/837 554/600/837 280/1065/837 f 323/476/838 375/1066/838 322/1067/838 f 469/386/839 524/719/839 478/368/839 f 2005/237/840 2015/117/840 1975/110/840 f 148/1041/841 129/991/841 114/1040/841 f 165/1055/842 164/1011/842 148/1041/842 f 165/1055/843 208/1068/843 218/1018/843 f 208/1068/844 255/1056/844 218/1018/844 f 255/1056/845 219/1069/845 254/1020/845 f 289/1070/846 1661/1071/846 307/1072/846 f 1661/1071/847 1720/1073/847 307/1072/847 f 1197/1074/848 3486/1075/848 2702/1076/848 f 1720/1073/849 1594/1077/849 307/1072/849 f 1594/1078/850 391/1042/850 372/1022/850 f 436/1059/851 464/1079/851 463/1000/851 f 463/1000/852 464/1079/852 485/1060/852 f 559/1080/853 419/1049/853 353/1051/853 f 2499/1081/854 2161/1082/854 2096/382/854 f 289/1070/855 254/1083/855 1661/1071/855 f 212/470/856 247/473/856 224/480/856 f 455/626/857 469/386/857 441/693/857 f 469/386/858 468/370/858 441/693/858 f 1981/58/859 1378/594/859 1154/364/859 f 156/103/860 414/50/860 1450/55/860 f 1406/173/861 104/56/861 1346/148/861 f 1222/1084/862 1224/833/862 226/832/862 f 3476/355/863 3445/354/863 3497/656/863 f 402/1058/864 403/1085/864 413/1023/864 f 413/1023/865 403/1085/865 436/1059/865 f 1/1086/866 552/1014/866 535/1024/866 f 1/1086/867 26/1087/867 552/1014/867 f 26/1087/868 294/1088/868 552/1014/868 f 1772/1046/869 1771/1089/869 1733/1047/869 f 1771/1089/870 1770/1090/870 1733/1047/870 f 2976/1091/871 956/799/871 2977/798/871 f 168/506/872 167/660/872 150/791/872 f 393/585/873 417/644/873 440/586/873 f 996/897/874 987/1092/874 3063/898/874 f 754/1093/875 272/1094/875 1462/1095/875 f 1267/191/876 1100/834/876 1252/1096/876 f 3496/1097/877 3503/1098/877 3452/1099/877 f 148/1041/878 114/1040/878 122/1100/878 f 148/1041/879 177/1101/879 165/1055/879 f 165/1055/880 177/1101/880 208/1068/880 f 177/1101/881 209/1102/881 208/1068/881 f 209/1102/882 219/1069/882 255/1056/882 f 208/1068/883 209/1102/883 255/1056/883 f 1937/1103/884 1651/1104/884 1633/1105/884 f 3448/1106/885 3473/1107/885 3481/1108/885 f 1375/410/886 1467/283/886 237/940/886 f 402/1058/887 1610/1109/887 403/1085/887 f 465/1110/888 485/1060/888 464/1079/888 f 2358/1111/889 2134/1112/889 2221/1113/889 f 59/755/890 60/784/890 80/209/890 f 112/376/891 132/441/891 117/533/891 f 3236/1114/892 3264/1115/892 3460/1116/892 f 1118/1117/893 1180/324/893 3485/326/893 f 554/600/894 227/505/894 280/1065/894 f 323/476/895 393/585/895 375/1066/895 f 1421/54/896 156/103/896 1450/55/896 f 69/1118/897 1553/1119/897 1543/1120/897 f 69/1118/898 1583/1121/898 1553/1119/898 f 177/1122/899 1680/1123/899 209/1124/899 f 21/230/900 270/231/900 514/123/900 f 1771/1089/901 1800/1125/901 1770/1090/901 f 1471/430/902 21/230/902 1457/1126/902 f 1240/1127/903 1261/29/903 2206/1128/903 f 2768/662/904 3473/872/904 3427/92/904 f 403/1085/905 422/1129/905 436/1059/905 f 436/1059/906 422/1129/906 464/1079/906 f 465/1110/907 520/1130/907 485/1060/907 f 520/1130/908 535/1024/908 485/1060/908 f 3430/778/909 3511/298/909 3445/354/909 f 2248/1131/910 2309/1132/910 2297/1133/910 f 858/880/911 324/474/911 266/472/911 f 196/479/912 224/480/912 239/1134/912 f 522/622/913 513/558/913 56/1064/913 f 247/473/914 266/472/914 310/433/914 f 1771/1089/915 1808/1135/915 1800/1125/915 f 49/1136/916 61/1137/916 48/235/916 f 61/1137/917 1543/233/917 48/235/917 f 1517/1138/918 49/1136/918 1527/1139/918 f 652/1140/919 1920/1141/919 2229/1142/919 f 1453/1143/920 1381/60/920 330/1144/920 f 237/940/921 1467/283/921 1300/150/921 f 492/1145/922 1466/1146/922 1685/218/922 f 1808/1147/923 1817/177/923 1800/1148/923 f 1370/53/924 1381/60/924 1395/1149/924 f 422/1129/925 1664/1150/925 464/1079/925 f 1664/1150/926 465/1110/926 464/1079/926 f 520/1130/927 5/1151/927 535/1024/927 f 5/1151/928 1/1086/928 535/1024/928 f 268/1152/929 294/1088/929 26/1087/929 f 268/1152/930 1345/1153/930 294/1088/930 f 28/1154/931 634/1155/931 340/1156/931 f 92/1063/932 78/811/932 102/796/932 f 523/956/933 538/779/933 537/598/933 f 61/1157/934 69/1118/934 1543/1120/934 f 85/1158/935 1583/1121/935 69/1118/935 f 85/1158/936 98/1159/936 97/1160/936 f 1583/1121/937 85/1158/937 97/1160/937 f 1614/1161/938 1601/1162/938 97/1160/938 f 98/1159/939 1614/1161/939 97/1160/939 f 946/486/940 121/1163/940 1330/487/940 f 1274/1164/941 270/231/941 1409/171/941 f 1373/15/942 1417/1165/942 273/1166/942 f 514/123/943 270/231/943 1274/1164/943 f 1230/1167/944 1252/1096/944 1224/833/944 f 1610/1109/945 422/1129/945 403/1085/945 f 510/1168/946 520/1130/946 465/1110/946 f 311/1169/947 268/1152/947 26/1087/947 f 1094/1170/948 1102/1171/948 1114/1172/948 f 1091/513/949 558/635/949 1171/657/949 f 3170/1173/950 78/811/950 92/1063/950 f 124/507/951 132/441/951 112/376/951 f 1389/603/952 890/852/952 604/1174/952 f 1077/1175/953 1067/908/953 1094/1170/953 f 61/1157/954 85/1158/954 69/1118/954 f 2065/821/955 2117/306/955 2082/307/955 f 1986/1176/956 2030/87/956 2004/1177/956 f 352/36/957 12/223/957 457/1178/957 f 1303/1179/958 768/1180/958 1291/1181/958 f 465/1110/959 452/1182/959 510/1168/959 f 26/1183/960 1/1184/960 311/1185/960 f 311/1169/961 1/1086/961 5/1151/961 f 240/465/962 212/470/962 186/469/962 f 2223/1186/963 2157/1187/963 2302/1188/963 f 162/583/964 890/852/964 1389/603/964 f 259/435/965 247/473/965 310/433/965 f 537/598/966 125/572/966 547/557/966 f 50/1189/967 61/1137/967 49/1136/967 f 61/1157/968 86/1190/968 85/1158/968 f 86/1190/969 98/1159/969 85/1158/969 f 108/1191/970 1614/1192/970 98/1193/970 f 2153/1194/971 349/1195/971 1507/1196/971 f 3498/1197/972 1674/1198/972 3430/1199/972 f 1817/177/973 1846/1200/973 1845/178/973 f 2689/1201/974 1969/1202/974 2688/1203/974 f 553/1204/975 5/1151/975 520/1130/975 f 311/1185/976 555/1205/976 268/595/976 f 782/604/977 756/675/977 202/674/977 f 442/555/978 470/554/978 455/626/978 f 1299/102/979 555/1205/979 134/203/979 f 50/1206/980 62/1207/980 61/1157/980 f 62/1207/981 86/1190/981 61/1157/981 f 99/1208/982 98/1159/982 86/1190/982 f 99/1209/983 108/1210/983 98/1211/983 f 2087/822/984 57/1212/984 1989/1213/984 f 1960/884/985 577/185/985 833/885/985 f 6/1214/986 410/1215/986 1389/603/986 f 452/1182/987 1544/1216/987 510/1168/987 f 553/1204/988 520/1130/988 510/1168/988 f 249/1217/989 311/1169/989 5/1151/989 f 3140/1218/990 3128/1219/990 3113/1220/990 f 144/676/991 237/442/991 490/416/991 f 79/573/992 171/414/992 248/504/992 f 1193/334/993 1207/333/993 1175/1221/993 f 155/710/994 161/1222/994 172/716/994 f 161/1222/995 198/1045/995 172/716/995 f 1253/1223/996 1330/1224/996 617/1225/996 f 1472/348/997 1471/430/997 1413/1226/997 f 190/454/998 173/73/998 1451/90/998 f 577/185/999 2088/187/999 833/885/999 f 21/230/1000 514/123/1000 1457/1126/1000 f 1381/60/1001 352/36/1001 330/1144/1001 f 1788/1227/1002 1810/1228/1002 1787/1229/1002 f 1332/76/1003 1254/78/1003 1358/1230/1003 f 1544/1216/1004 486/1231/1004 510/1168/1004 f 486/1231/1005 521/1232/1005 510/1168/1005 f 521/1232/1006 553/1204/1006 510/1168/1006 f 553/1204/1007 249/1217/1007 5/1151/1007 f 363/1233/1008 555/1205/1008 311/1185/1008 f 620/1234/1009 767/1235/1009 243/1236/1009 f 1195/453/1010 1201/511/1010 1200/1237/1010 f 62/1207/1011 70/1238/1011 86/1190/1011 f 100/1239/1012 99/1208/1012 86/1190/1012 f 70/1240/1013 100/1241/1013 86/1242/1013 f 100/1243/1014 1616/1244/1014 108/1191/1014 f 99/1209/1015 100/1241/1015 108/1210/1015 f 108/1191/1016 1616/1244/1016 1615/1245/1016 f 1285/192/1017 1370/1246/1017 1217/193/1017 f 1705/1247/1018 1576/1248/1018 320/1249/1018 f 1545/1250/1019 1558/1251/1019 1294/1252/1019 f 363/1253/1020 311/1169/1020 249/1217/1020 f 1123/424/1021 1156/452/1021 1146/425/1021 f 690/1254/1022 143/1028/1022 124/507/1022 f 525/468/1023 549/795/1023 162/583/1023 f 1661/1255/1024 254/1020/1024 219/1069/1024 f 1383/1256/1025 273/1166/1025 1245/1257/1025 f 1088/111/1026 1855/113/1026 1147/261/1026 f 1539/70/1027 256/1258/1027 265/71/1027 f 265/71/1028 279/1259/1028 1576/1248/1028 f 1413/1226/1029 1427/1260/1029 1362/1261/1029 f 1413/1226/1030 1471/430/1030 1427/1260/1030 f 1668/1262/1031 500/1263/1031 486/1231/1031 f 500/1263/1032 521/1232/1032 486/1231/1032 f 17/1264/1033 553/1204/1033 521/1232/1033 f 241/1265/1034 363/1253/1034 249/1217/1034 f 1094/1170/1035 1067/908/1035 1102/1171/1035 f 1002/358/1036 3449/1266/1036 3495/359/1036 f 2689/1201/1037 2730/1267/1037 1969/1202/1037 f 1243/19/1038 555/1205/1038 1299/102/1038 f 840/510/1039 858/880/1039 293/464/1039 f 260/463/1040 840/510/1040 293/464/1040 f 50/1189/1041 63/1268/1041 62/1269/1041 f 63/1270/1042 70/1238/1042 62/1207/1042 f 70/1240/1043 87/1271/1043 100/1241/1043 f 100/1241/1044 109/1272/1044 1616/1273/1044 f 1417/1165/1045 137/495/1045 273/1166/1045 f 1472/348/1046 1413/1226/1046 2346/1274/1046 f 265/71/1047 256/1258/1047 279/1259/1047 f 279/1259/1048 320/1249/1048 1576/1248/1048 f 321/1275/1049 1698/1276/1049 320/1249/1049 f 3427/92/1050 3448/1277/1050 3444/93/1050 f 500/1263/1051 487/1278/1051 521/1232/1051 f 487/1278/1052 17/1264/1052 521/1232/1052 f 15/1279/1053 249/1217/1053 553/1204/1053 f 3469/782/1054 3508/21/1054 3464/20/1054 f 525/468/1055 899/467/1055 540/793/1055 f 33/446/1056 581/1280/1056 610/1281/1056 f 610/1281/1057 40/447/1057 33/446/1057 f 101/508/1058 690/1254/1058 124/507/1058 f 309/550/1059 323/476/1059 322/1067/1059 f 3456/400/1060 3493/399/1060 3469/782/1060 f 172/716/1061 203/720/1061 160/661/1061 f 100/1241/1062 87/1271/1062 109/1272/1062 f 2150/1282/1063 2414/460/1063 2407/1283/1063 f 210/1284/1064 221/1285/1064 1539/70/1064 f 221/1285/1065 256/1258/1065 1539/70/1065 f 308/1286/1066 279/1259/1066 256/1258/1066 f 404/1287/1067 1698/1276/1067 321/1275/1067 f 404/1287/1068 392/1288/1068 1698/1276/1068 f 17/1264/1069 15/1279/1069 553/1204/1069 f 241/1265/1070 249/1217/1070 15/1279/1070 f 316/356/1071 783/141/1071 1162/140/1071 f 554/600/1072 79/573/1072 248/504/1072 f 547/557/1073 79/573/1073 554/600/1073 f 3511/298/1074 3463/300/1074 3497/656/1074 f 172/716/1075 160/661/1075 154/377/1075 f 749/1289/1076 3426/1004/1076 105/1290/1076 f 50/1189/1077 51/1291/1077 63/1268/1077 f 63/1268/1078 71/1292/1078 70/1240/1078 f 70/1240/1079 71/1292/1079 87/1271/1079 f 109/1272/1080 1622/1293/1080 1643/1294/1080 f 1622/1293/1081 166/1295/1081 1643/1294/1081 f 194/1296/1082 211/1297/1082 210/1284/1082 f 211/1297/1083 221/1285/1083 210/1284/1083 f 221/1285/1084 238/1298/1084 256/1258/1084 f 279/1259/1085 308/1286/1085 320/1249/1085 f 308/1286/1086 321/1275/1086 320/1249/1086 f 373/1299/1087 404/1287/1087 321/1275/1087 f 2120/186/1088 1979/942/1088 1206/944/1088 f 3480/1300/1089 3454/1301/1089 3424/1002/1089 f 511/1302/1090 17/1264/1090 487/1278/1090 f 269/1303/1091 363/1253/1091 241/1265/1091 f 1146/425/1092 1195/453/1092 1166/602/1092 f 126/709/1093 154/377/1093 103/379/1093 f 337/792/1094 347/401/1094 405/403/1094 f 87/1271/1095 110/1304/1095 109/1272/1095 f 1274/1164/1096 1409/171/1096 1375/410/1096 f 3494/1305/1097 3485/326/1097 3500/325/1097 f 1565/1306/1098 13/1307/1098 1434/1308/1098 f 3486/1075/1099 3488/1309/1099 3479/312/1099 f 238/1298/1100 308/1286/1100 256/1258/1100 f 1545/1310/1101 1650/1311/1101 500/1263/1101 f 500/1263/1102 1650/1311/1102 487/1278/1102 f 269/1303/1103 241/1265/1103 15/1279/1103 f 269/1312/1104 1386/129/1104 363/1233/1104 f 998/449/1105 997/1026/1105 968/632/1105 f 580/1313/1106 27/397/1106 38/396/1106 f 417/644/1107 406/538/1107 424/645/1107 f 51/1291/1108 72/1314/1108 63/1268/1108 f 63/1268/1109 72/1314/1109 71/1292/1109 f 72/1314/1110 88/1315/1110 87/1271/1110 f 71/1292/1111 72/1314/1111 87/1271/1111 f 87/1271/1112 88/1315/1112 110/1304/1112 f 110/1304/1113 1622/1293/1113 109/1272/1113 f 775/1316/1114 1004/1317/1114 683/1318/1114 f 199/1319/1115 211/1297/1115 194/1296/1115 f 178/1320/1116 199/1319/1116 194/1296/1116 f 199/1319/1117 222/1321/1117 211/1297/1117 f 222/1321/1118 221/1285/1118 211/1297/1118 f 222/1321/1119 223/1322/1119 221/1285/1119 f 223/1322/1120 238/1298/1120 221/1285/1120 f 336/1323/1121 321/1275/1121 308/1286/1121 f 336/1323/1122 373/1299/1122 321/1275/1122 f 381/1324/1123 404/1287/1123 373/1299/1123 f 922/451/1124 1171/657/1124 594/1044/1124 f 526/1325/1125 856/1326/1125 540/793/1125 f 540/793/1126 856/1326/1126 948/794/1126 f 405/403/1127 406/538/1127 417/644/1127 f 88/1315/1128 115/1327/1128 1622/1293/1128 f 110/1304/1129 88/1315/1129 1622/1293/1129 f 349/1195/1130 184/1328/1130 1507/1196/1130 f 199/1319/1131 223/1322/1131 222/1321/1131 f 238/1298/1132 291/1329/1132 308/1286/1132 f 291/1329/1133 336/1323/1133 308/1286/1133 f 381/1324/1134 415/1330/1134 404/1287/1134 f 3457/1331/1135 3482/1332/1135 3424/1002/1135 f 514/123/1136 459/122/1136 1457/1126/1136 f 536/1333/1137 17/1264/1137 511/1302/1137 f 15/1279/1138 17/1264/1138 536/1333/1138 f 1932/1334/1139 1115/426/1139 1146/425/1139 f 202/674/1140 144/676/1140 490/416/1140 f 202/674/1141 490/416/1141 281/415/1141 f 72/1314/1142 73/1335/1142 88/1315/1142 f 199/1319/1143 195/1336/1143 223/1322/1143 f 336/1323/1144 374/1337/1144 373/1299/1144 f 374/1337/1145 381/1324/1145 373/1299/1145 f 415/1338/1146 1302/1339/1146 404/1340/1146 f 1064/983/1147 1100/834/1147 1153/360/1147 f 3508/21/1148 3494/663/1148 3500/1341/1148 f 295/1342/1149 15/1279/1149 536/1333/1149 f 295/1342/1150 269/1303/1150 15/1279/1150 f 295/1342/1151 170/980/1151 269/1303/1151 f 170/1343/1152 77/262/1152 269/1312/1152 f 77/262/1153 1386/129/1153 269/1312/1153 f 3443/351/1154 3501/350/1154 3452/1099/1154 f 123/481/1155 150/791/1155 131/482/1155 f 73/1335/1156 111/389/1156 88/1315/1156 f 88/1315/1157 111/389/1157 115/1327/1157 f 141/1344/1158 167/660/1158 179/1345/1158 f 140/1346/1159 141/1344/1159 179/1345/1159 f 167/660/1160 195/1336/1160 179/1345/1160 f 223/1322/1161 257/1347/1161 238/1298/1161 f 257/1347/1162 291/1329/1162 238/1298/1162 f 292/1348/1163 336/1323/1163 291/1329/1163 f 292/1348/1164 322/1067/1164 336/1323/1164 f 322/1067/1165 374/1337/1165 336/1323/1165 f 475/1349/1166 1650/1350/1166 466/1351/1166 f 1650/1311/1167 475/1352/1167 512/1353/1167 f 512/1353/1168 536/1333/1168 511/1302/1168 f 3495/359/1169 3450/1354/1169 3447/982/1169 f 999/1355/1170 1038/1356/1170 1018/404/1170 f 51/1291/1171 52/1357/1171 72/1314/1171 f 52/1357/1172 64/1358/1172 72/1314/1172 f 72/1359/1173 64/1360/1173 73/1361/1173 f 111/389/1174 131/482/1174 115/1327/1174 f 115/1327/1175 131/482/1175 140/1346/1175 f 1811/1362/1176 1802/1363/1176 1525/667/1176 f 375/1066/1177 374/1337/1177 322/1067/1177 f 375/1066/1178 381/1324/1178 374/1337/1178 f 1061/517/1179 1067/908/1179 1037/518/1179 f 1251/1364/1180 475/1349/1180 466/1351/1180 f 522/622/1181 536/1333/1181 512/1353/1181 f 1091/513/1182 1143/512/1182 558/635/1182 f 477/599/1183 537/598/1183 501/556/1183 f 858/880/1184 337/792/1184 324/474/1184 f 523/956/1185 537/598/1185 488/369/1185 f 513/558/1186 547/557/1186 554/600/1186 f 51/1291/1187 588/477/1187 52/1357/1187 f 131/482/1188 141/1344/1188 140/1346/1188 f 195/1336/1189 239/1134/1189 223/1322/1189 f 223/1322/1190 239/1134/1190 257/1347/1190 f 257/1347/1191 292/1348/1191 291/1329/1191 f 381/1324/1192 416/587/1192 415/1330/1192 f 415/1330/1193 416/587/1193 423/1365/1193 f 2781/288/1194 2144/1366/1194 2467/289/1194 f 57/1367/1195 1311/1368/1195 1989/1369/1195 f 198/1045/1196 724/1370/1196 197/812/1196 f 195/1336/1197 196/479/1197 239/1134/1197 f 258/434/1198 292/1348/1198 257/1347/1198 f 393/585/1199 416/587/1199 381/1324/1199 f 3485/326/1200 3443/1371/1200 3436/1372/1200 f 513/558/1201 554/600/1201 56/1064/1201 f 682/745/1202 522/622/1202 512/1353/1202 f 56/1064/1203 536/1333/1203 522/622/1203 f 56/1064/1204 295/1342/1204 536/1333/1204 f 280/1065/1205 227/505/1205 295/1342/1205 f 295/1342/1206 227/505/1206 170/980/1206 f 170/980/1207 1423/1373/1207 77/1374/1207 f 2015/117/1208 2030/87/1208 1986/1176/1208 f 588/477/1209 53/478/1209 52/1357/1209 f 53/617/1210 65/631/1210 64/1360/1210 f 52/1357/1211 53/478/1211 64/1358/1211 f 64/1360/1212 65/631/1212 73/1361/1212 f 65/387/1213 111/389/1213 73/1335/1213 f 141/1344/1214 150/791/1214 167/660/1214 f 195/1336/1215 167/660/1215 196/479/1215 f 259/435/1216 257/1347/1216 239/1134/1216 f 259/435/1217 258/434/1217 257/1347/1217 f 258/434/1218 309/550/1218 292/1348/1218 f 309/550/1219 322/1067/1219 292/1348/1219 f 393/585/1220 381/1324/1220 375/1066/1220 f 1974/108/1221 1986/1176/1221 3390/1375/1221 f 56/1064/1222 280/1065/1222 295/1342/1222 f 423/1376/1223 439/1377/1223 1251/1364/1223 f 111/389/1224 116/483/1224 131/482/1224 f 150/791/1225 141/1344/1225 131/482/1225 f 224/480/1226 259/435/1226 239/1134/1226 f 258/434/1227 310/433/1227 309/550/1227 f 145/797/1228 126/709/1228 661/549/1228 f 598/1378/1229 597/1379/1229 581/1280/1229 f 840/510/1230 859/1380/1230 858/880/1230 f 855/1381/1231 731/1382/1231 747/1383/1231 f 677/1384/1232 694/1385/1232 693/1386/1232 f 822/1387/1233 707/1388/1233 769/1389/1233 f 769/1389/1234 932/1390/1234 822/1387/1234 f 710/1391/1235 720/1392/1235 703/438/1235 f 859/1380/1236 912/1393/1236 347/401/1236 f 654/1394/1237 425/553/1237 442/555/1237 f 608/996/1238 810/1395/1238 674/1396/1238 f 1194/601/1239 1200/1237/1239 1211/278/1239 f 2083/820/1240 2065/821/1240 2042/89/1240 f 793/814/1241 847/816/1241 817/1397/1241 f 597/1379/1242 629/899/1242 610/1281/1242 f 2776/1398/1243 2792/1399/1243 2731/1400/1243 f 651/1401/1244 650/1402/1244 614/1403/1244 f 735/1404/1245 722/1405/1245 717/1406/1245 f 1194/601/1246 1195/453/1246 1200/1237/1246 f 651/1401/1247 663/1407/1247 650/1402/1247 f 663/1407/1248 681/1408/1248 650/1402/1248 f 663/1407/1249 719/304/1249 681/1408/1249 f 3087/1409/1250 3101/1410/1250 3057/1411/1250 f 268/595/1251 555/1205/1251 1243/19/1251 f 1490/1412/1252 585/1413/1252 3402/1414/1252 f 2869/1415/1253 2841/1416/1253 2809/254/1253 f 2652/724/1254 2687/1417/1254 1908/1418/1254 f 797/1419/1255 841/1420/1255 829/1421/1255 f 610/1281/1256 629/899/1256 609/900/1256 f 3218/548/1257 639/1422/1257 661/549/1257 f 659/1423/1258 646/1424/1258 691/1425/1258 f 2817/1426/1259 2619/1427/1259 2060/3/1259 f 601/1428/1260 92/1063/1260 649/1429/1260 f 126/709/1261 103/379/1261 661/549/1261 f 1200/1237/1262 1212/279/1262 1211/278/1262 f 1166/602/1263 1194/601/1263 1155/492/1263 f 2967/1052/1264 956/1054/1264 2976/1430/1264 f 1124/1431/1265 1104/1432/1265 1096/1433/1265 f 669/1434/1266 693/1386/1266 692/1435/1266 f 772/1436/1267 744/1437/1267 745/1438/1267 f 777/1439/1268 817/1397/1268 816/1440/1268 f 2227/1441/1269 2158/1442/1269 2289/1443/1269 f 2968/65/1270 2298/64/1270 2446/1444/1270 f 891/297/1271 261/317/1271 903/275/1271 f 3473/1107/1272 3472/1445/1272 3458/1446/1272 f 1002/358/1273 3458/1446/1273 3449/1266/1273 f 610/1447/1274 609/647/1274 40/444/1274 f 817/1397/1275 840/510/1275 816/1440/1275 f 809/1448/1276 628/1449/1276 683/1450/1276 f 941/1451/1277 900/1452/1277 891/297/1277 f 900/1452/1278 261/317/1278 891/297/1278 f 638/1453/1279 660/1454/1279 599/1455/1279 f 997/1027/1280 1013/406/1280 1006/1456/1280 f 3459/1457/1281 3443/1371/1281 3485/326/1281 f 758/1458/1282 816/1440/1282 225/509/1282 f 851/1459/1283 741/1460/1283 748/1461/1283 f 376/330/1284 605/1462/1284 886/331/1284 f 605/1462/1285 815/1463/1285 886/331/1285 f 886/331/1286 815/1463/1286 941/1451/1286 f 941/1464/1287 815/1465/1287 900/1466/1287 f 3510/1467/1288 3444/93/1288 3455/839/1288 f 593/860/1289 606/859/1289 578/1468/1289 f 703/438/1290 720/1392/1290 181/436/1290 f 3434/1469/1291 3468/1470/1291 3438/1471/1291 f 653/432/1292 866/1472/1292 542/413/1292 f 701/1473/1293 626/1474/1293 674/1475/1293 f 872/1476/1294 912/1393/1294 859/1380/1294 f 741/1460/1295 920/1477/1295 748/1461/1295 f 748/1461/1296 920/1477/1296 376/330/1296 f 376/330/1297 920/1477/1297 605/1462/1297 f 900/1452/1298 702/1478/1298 261/317/1298 f 559/994/1299 562/1005/1299 2/1029/1299 f 203/720/1300 750/722/1300 735/1479/1300 f 786/1480/1301 777/1439/1301 759/1481/1301 f 843/1482/1302 851/1483/1302 853/1484/1302 f 843/1482/1303 741/1485/1303 851/1483/1303 f 605/1486/1304 826/1487/1304 815/1465/1304 f 702/1478/1305 727/352/1305 261/317/1305 f 2619/1427/1306 2826/1/1306 2060/3/1306 f 925/1488/1307 949/1489/1307 695/1490/1307 f 750/1491/1308 762/1492/1308 735/1404/1308 f 750/1491/1309 763/1493/1309 762/1492/1309 f 763/1493/1310 808/1494/1310 762/1492/1310 f 791/1495/1311 626/1474/1311 845/1496/1311 f 526/1497/1312 540/1498/1312 899/1499/1312 f 843/1500/1313 853/1501/1313 3388/1502/1313 f 900/1466/1314 815/1465/1314 702/1503/1314 f 702/1478/1315 726/485/1315 727/352/1315 f 2277/881/1316 1025/882/1316 1083/488/1316 f 491/1504/1317 582/1505/1317 925/1488/1317 f 824/1506/1318 873/1507/1318 926/1508/1318 f 808/1494/1319 800/1509/1319 820/1510/1319 f 605/1486/1320 935/1511/1320 826/1487/1320 f 815/1465/1321 643/1512/1321 702/1503/1321 f 1827/1513/1322 2560/1514/1322 2549/1515/1322 f 925/1488/1323 695/1490/1323 897/1516/1323 f 967/1517/1324 1793/1518/1324 35/1519/1324 f 827/1520/1325 741/1485/1325 843/1482/1325 f 827/1520/1326 920/1521/1326 741/1485/1326 f 827/1520/1327 696/1522/1327 920/1521/1327 f 696/1522/1328 935/1511/1328 920/1521/1328 f 920/1521/1329 935/1511/1329 605/1486/1329 f 643/1512/1330 928/1523/1330 702/1503/1330 f 702/1478/1331 928/1524/1331 726/485/1331 f 786/1480/1332 794/815/1332 793/814/1332 f 1014/914/1333 1084/1525/1333 1191/1526/1333 f 871/1527/1334 671/1528/1334 930/1529/1334 f 35/1519/1335 1793/1518/1335 2619/1427/1335 f 770/1530/1336 843/1500/1336 894/1531/1336 f 770/1532/1337 827/1520/1337 843/1482/1337 f 826/1487/1338 906/1533/1338 815/1465/1338 f 906/1533/1339 643/1512/1339 815/1465/1339 f 726/485/1340 928/1524/1340 946/486/1340 f 60/861/1341 23/714/1341 606/859/1341 f 725/1534/1342 724/1370/1342 161/1222/1342 f 3477/788/1343 3496/1097/1343 3501/350/1343 f 621/1535/1344 871/1536/1344 865/1537/1344 f 785/1538/1345 850/1539/1345 621/1540/1345 f 777/1439/1346 786/1480/1346 793/814/1346 f 935/1511/1347 752/1541/1347 826/1487/1347 f 643/1512/1348 909/1542/1348 928/1523/1348 f 3270/1543/1349 953/1544/1349 573/1545/1349 f 866/1546/1350 894/1531/1350 3333/1547/1350 f 877/1548/1351 827/1520/1351 770/1532/1351 f 752/1541/1352 906/1533/1352 826/1487/1352 f 906/1533/1353 723/1549/1353 643/1512/1353 f 909/1542/1354 868/1550/1354 928/1523/1354 f 928/1523/1355 868/1550/1355 946/1551/1355 f 683/1450/1356 623/1552/1356 855/1553/1356 f 662/1554/1357 650/1555/1357 681/1556/1357 f 721/1557/1358 714/1558/1358 676/1559/1358 f 808/1494/1359 761/1560/1359 722/1405/1359 f 790/1561/1360 764/1562/1360 655/1563/1360 f 881/1564/1361 658/1565/1361 633/1566/1361 f 2149/1567/1362 1102/1171/1362 1061/517/1362 f 897/1516/1363 695/1490/1363 896/1568/1363 f 653/432/1364 904/1569/1364 866/1472/1364 f 904/1569/1365 894/1570/1365 866/1472/1365 f 877/1548/1366 696/1522/1366 827/1520/1366 f 696/1522/1367 907/1571/1367 935/1511/1367 f 935/1511/1368 907/1571/1368 752/1541/1368 f 752/1541/1369 723/1549/1369 906/1533/1369 f 723/1549/1370 909/1542/1370 643/1512/1370 f 1021/1572/1371 1037/518/1371 1031/1573/1371 f 1879/1574/1372 1188/1575/1372 1128/1576/1372 f 2935/1577/1373 2928/1578/1373 2939/1579/1373 f 896/1568/1374 695/1490/1374 641/1580/1374 f 939/1581/1375 615/1582/1375 628/1449/1375 f 686/1583/1376 809/1448/1376 683/1450/1376 f 3487/1584/1377 1207/333/1377 1208/332/1377 f 1067/908/1378 1061/517/1378 1102/1171/1378 f 867/1585/1379 696/1522/1379 877/1548/1379 f 867/1585/1380 907/1571/1380 696/1522/1380 f 723/1549/1381 687/1586/1381 909/1542/1381 f 946/486/1382 738/1587/1382 121/1163/1382 f 766/1588/1383 791/1589/1383 822/1590/1383 f 660/1454/1384 638/1453/1384 677/1384/1384 f 3467/1591/1385 1015/751/1385 1117/750/1385 f 591/1592/1386 622/1593/1386 611/1594/1386 f 2506/1595/1387 1009/1596/1387 1010/1597/1387 f 904/1569/1388 844/1598/1388 894/1570/1388 f 844/1599/1389 770/1530/1389 894/1531/1389 f 770/1532/1390 944/1600/1390 877/1548/1390 f 944/1600/1391 867/1585/1391 877/1548/1391 f 907/1571/1392 718/1601/1392 752/1541/1392 f 718/1602/1393 921/1603/1393 752/1604/1393 f 752/1604/1394 921/1603/1394 723/1605/1394 f 880/1606/1395 868/1550/1395 909/1542/1395 f 687/1586/1396 880/1606/1396 909/1542/1396 f 946/486/1397 868/1607/1397 738/1587/1397 f 2652/724/1398 1908/1418/1398 2621/1608/1398 f 3508/21/1399 3475/664/1399 3494/663/1399 f 384/1609/1400 686/1610/1400 1160/1611/1400 f 904/1569/1401 532/570/1401 844/1598/1401 f 757/1612/1402 770/1532/1402 844/1613/1402 f 757/1612/1403 944/1600/1403 770/1532/1403 f 723/1605/1404 921/1603/1404 687/1614/1404 f 840/510/1405 872/1476/1405 859/1380/1405 f 805/1615/1406 898/1616/1406 932/1390/1406 f 872/1476/1407 860/1617/1407 913/1618/1407 f 1041/420/1408 1088/111/1408 1147/261/1408 f 695/1490/1409 885/1619/1409 641/1580/1409 f 779/1620/1410 796/1621/1410 744/1622/1410 f 899/467/1411 489/466/1411 947/1623/1411 f 809/1624/1412 384/1609/1412 918/1625/1412 f 563/614/1413 757/828/1413 844/1598/1413 f 944/1626/1414 672/1627/1414 867/1628/1414 f 867/1628/1415 836/1629/1415 907/1630/1415 f 836/1629/1416 792/1631/1416 907/1630/1416 f 792/1631/1417 718/1602/1417 907/1630/1417 f 868/1607/1418 574/1632/1418 738/1587/1418 f 2826/1/1419 1710/1633/1419 2535/2/1419 f 2711/1634/1420 2838/1635/1420 2019/1636/1420 f 3189/1637/1421 3152/1638/1421 3140/1218/1421 f 628/1449/1422 615/1582/1422 623/1552/1422 f 3483/1639/1423 1897/858/1423 2839/1640/1423 f 641/1580/1424 885/1619/1424 850/1641/1424 f 841/1642/1425 830/1643/1425 862/1644/1425 f 913/1618/1426 860/1617/1426 654/1394/1426 f 624/1645/1427 890/852/1427 948/794/1427 f 918/1646/1428 939/1581/1428 628/1449/1428 f 757/828/1429 914/744/1429 944/1626/1429 f 672/1627/1430 836/1629/1430 867/1628/1430 f 688/1647/1431 687/1614/1431 921/1603/1431 f 934/1648/1432 733/1649/1432 868/1607/1432 f 880/1650/1433 934/1648/1433 868/1607/1433 f 868/1607/1434 733/1649/1434 574/1632/1434 f 2500/1651/1435 578/1468/1435 583/711/1435 f 1210/1652/1436 1199/493/1436 1149/1043/1436 f 3332/1653/1437 576/1654/1437 581/1280/1437 f 620/1655/1438 634/1656/1438 917/1657/1438 f 1037/518/1439 1044/909/1439 1031/1573/1439 f 855/1553/1440 887/1658/1440 731/1659/1440 f 1415/1660/1441 2100/1661/1441 1178/1662/1441 f 792/1631/1442 892/1663/1442 718/1602/1442 f 892/1663/1443 921/1603/1443 718/1602/1443 f 892/1663/1444 688/1647/1444 921/1603/1444 f 698/1664/1445 880/1606/1445 687/1586/1445 f 698/1664/1446 934/1665/1446 880/1606/1446 f 733/1649/1447 919/1666/1447 574/1632/1447 f 738/1587/1448 574/1632/1448 121/1163/1448 f 3487/1667/1449 3505/353/1449 3467/1591/1449 f 683/1668/1450 855/1381/1450 736/1669/1450 f 850/1641/1451 885/1619/1451 621/1535/1451 f 779/1670/1452 787/1671/1452 807/1672/1452 f 630/1673/1453 637/1674/1453 659/1423/1453 f 914/744/1454 672/1627/1454 944/1626/1454 f 698/1675/1455 687/1614/1455 688/1647/1455 f 586/1676/1456 587/1677/1456 51/1291/1456 f 606/859/1457 23/714/1457 583/711/1457 f 578/1468/1458 606/859/1458 583/711/1458 f 2139/1678/1459 2136/1679/1459 1291/1680/1459 f 852/935/1460 685/1681/1460 825/1682/1460 f 693/1386/1461 694/1385/1461 715/1683/1461 f 2149/1567/1462 2133/1684/1462 1102/1171/1462 f 743/1685/1463 771/1686/1463 778/1687/1463 f 929/1688/1464 834/1689/1464 595/514/1464 f 1435/147/1465 1172/1690/1465 1315/156/1465 f 836/1629/1466 640/1691/1466 792/1631/1466 f 792/1631/1467 640/1691/1467 892/1663/1467 f 910/1692/1468 698/1675/1468 688/1647/1468 f 910/1692/1469 839/1693/1469 698/1675/1469 f 839/1694/1470 934/1665/1470 698/1664/1470 f 839/1694/1471 408/1695/1471 934/1665/1471 f 408/1695/1472 733/1696/1472 934/1665/1472 f 408/1695/1473 919/1697/1473 733/1696/1473 f 408/1695/1474 902/144/1474 919/1697/1474 f 617/1698/1475 902/1699/1475 113/1700/1475 f 919/1666/1476 902/1699/1476 617/1698/1476 f 1125/747/1477 2770/1701/1477 1129/748/1477 f 700/302/1478 719/304/1478 663/1407/1478 f 621/1535/1479 885/1619/1479 824/1506/1479 f 3509/1702/1480 805/1703/1480 7/1704/1480 f 712/1705/1481 713/1706/1481 743/1685/1481 f 778/1687/1482 771/1686/1482 795/1707/1482 f 740/1708/1483 736/1709/1483 627/1710/1483 f 709/1711/1484 836/1629/1484 672/1627/1484 f 892/1663/1485 910/1692/1485 688/1647/1485 f 3488/1712/1486 3466/1713/1486 3479/1714/1486 f 348/927/1487 860/1617/1487 818/1715/1487 f 214/1716/1488 2797/1717/1488 2183/1718/1488 f 861/1719/1489 828/1720/1489 807/1721/1489 f 775/1722/1490 736/1709/1490 740/1708/1490 f 3429/1723/1491 3505/353/1491 3487/1667/1491 f 676/1559/1492 691/1425/1492 646/1424/1492 f 917/1657/1493 634/1656/1493 28/1724/1493 f 631/1725/1494 630/1673/1494 598/1378/1494 f 740/1708/1495 627/1710/1495 749/1726/1495 f 736/1669/1496 855/1381/1496 627/1727/1496 f 765/1728/1497 836/1629/1497 709/1711/1497 f 836/1729/1498 923/1730/1498 640/1731/1498 f 910/1692/1499 804/1732/1499 839/1693/1499 f 839/1693/1500 838/1733/1500 408/1734/1500 f 3298/1735/1501 3313/1736/1501 3284/1737/1501 f 575/1738/1502 584/1739/1502 578/1468/1502 f 1013/406/1503 1021/1572/1503 1006/1456/1503 f 834/1689/1504 929/1688/1504 917/1740/1504 f 181/436/1505 758/1458/1505 225/509/1505 f 648/1741/1506 647/1742/1506 622/1743/1506 f 861/1744/1507 874/1745/1507 828/1746/1507 f 775/1722/1508 683/1450/1508 736/1709/1508 f 953/1544/1509 3234/1747/1509 975/1748/1509 f 160/661/1510 203/720/1510 735/1479/1510 f 1766/57/1511 1869/59/1511 1108/112/1511 f 528/643/1512 541/689/1512 914/744/1512 f 709/1749/1513 672/1750/1513 914/1751/1513 f 836/1729/1514 765/1752/1514 923/1730/1514 f 923/1753/1515 689/1754/1515 640/1691/1515 f 640/1691/1516 689/1754/1516 892/1663/1516 f 892/1663/1517 835/1755/1517 910/1692/1517 f 804/1732/1518 619/1756/1518 839/1693/1518 f 838/1733/1519 839/1693/1519 619/1756/1519 f 719/304/1520 1076/303/1520 730/1757/1520 f 930/1529/1521 624/1645/1521 948/794/1521 f 778/1687/1522 795/1707/1522 794/815/1522 f 611/1594/1523 598/1378/1523 589/1758/1523 f 714/1558/1524 713/1706/1524 704/1759/1524 f 590/1760/1525 611/1594/1525 589/1758/1525 f 2670/1761/1526 3437/244/1526 3511/1762/1526 f 789/743/1527 945/1763/1527 914/744/1527 f 945/1763/1528 709/1711/1528 914/744/1528 f 689/1754/1529 835/1755/1529 892/1663/1529 f 838/1764/1530 942/1765/1530 408/1695/1530 f 365/145/1531 902/144/1531 408/1695/1531 f 942/1765/1532 365/145/1532 408/1695/1532 f 1039/305/1533 1171/657/1533 922/451/1533 f 753/1766/1534 754/1093/1534 25/1033/1534 f 593/860/1535 578/1468/1535 584/1739/1535 f 407/315/1536 851/1459/1536 748/1461/1536 f 730/1757/1537 1076/303/1537 1454/1767/1537 f 1054/1768/1538 1044/909/1538 1086/1769/1538 f 676/1559/1539 714/1558/1539 704/1759/1539 f 691/1425/1540 676/1559/1540 704/1759/1540 f 749/1770/1541 627/1771/1541 893/1772/1541 f 923/1730/1542 765/1752/1542 709/1749/1542 f 3402/1414/1543 584/1739/1543 575/1738/1543 f 649/1773/1544 678/1774/1544 638/1775/1544 f 1132/301/1545 927/1776/1545 986/282/1545 f 1005/1777/1546 1021/1572/1546 1031/1573/1546 f 573/1778/1547 591/1592/1547 590/1760/1547 f 895/1779/1548 915/854/1548 348/927/1548 f 887/1658/1549 595/514/1549 842/516/1549 f 782/604/1550 202/674/1550 645/780/1550 f 3428/759/1551 2754/705/1551 3457/704/1551 f 654/1394/1552 442/555/1552 418/539/1552 f 3483/1780/1553 3434/1469/1553 453/1781/1553 f 749/1289/1554 893/1782/1554 857/1783/1554 f 489/466/1555 470/554/1555 947/1623/1555 f 615/1582/1556 929/1688/1556 595/514/1556 f 910/1692/1557 835/1755/1557 804/1732/1557 f 616/1784/1558 365/145/1558 942/1765/1558 f 2548/271/1559 2744/1785/1559 3450/1786/1559 f 585/1413/1560 593/860/1560 584/1739/1560 f 3437/244/1561 2670/1761/1561 2592/648/1561 f 3054/1787/1562 3091/1788/1562 3062/1789/1562 f 729/1790/1563 760/1791/1563 773/1792/1563 f 786/1480/1564 778/1687/1564 794/815/1564 f 340/1156/1565 272/1094/1565 28/1154/1565 f 591/1592/1566 611/1594/1566 590/1760/1566 f 1530/1793/1567 22/712/1567 36/715/1567 f 861/1744/1568 895/1779/1568 874/1745/1568 f 38/396/1569 588/477/1569 580/1313/1569 f 895/1779/1570 940/1794/1570 915/854/1570 f 832/1795/1571 923/1730/1571 709/1749/1571 f 923/1730/1572 879/1796/1572 689/1797/1572 f 689/1754/1573 788/1798/1573 835/1755/1573 f 917/1657/1574 28/1724/1574 596/1799/1574 f 1335/607/1575 1287/27/1575 1261/29/1575 f 514/123/1576 1274/1164/1576 1265/124/1576 f 407/315/1577 2279/1800/1577 851/1459/1577 f 3504/246/1578 3428/759/1578 3457/704/1578 f 1517/1138/1579 50/1189/1579 49/1136/1579 f 834/1689/1580 596/1801/1580 697/515/1580 f 1134/1802/1581 918/1625/1581 384/1609/1581 f 715/1683/1582 773/1792/1582 745/1438/1582 f 712/1705/1583 743/1685/1583 778/1687/1583 f 694/1385/1584 716/1803/1584 729/1790/1584 f 654/1804/1585 361/1805/1585 425/1806/1585 f 615/1582/1586 595/514/1586 623/1552/1586 f 739/1807/1587 917/1740/1587 929/1688/1587 f 940/1794/1588 655/1563/1588 607/1808/1588 f 655/1809/1589 526/1497/1589 899/1499/1589 f 789/743/1590 936/1810/1590 945/1763/1590 f 832/1795/1591 709/1749/1591 945/1811/1591 f 936/1810/1592 832/1812/1592 945/1763/1592 f 832/1795/1593 879/1796/1593 923/1730/1593 f 835/1813/1594 1119/1814/1594 804/1815/1594 f 1119/1814/1595 846/1816/1595 619/1817/1595 f 804/1815/1596 1119/1814/1596 619/1817/1596 f 829/1818/1597 875/1819/1597 861/1719/1597 f 272/1094/1598 340/1156/1598 1462/1095/1598 f 876/1820/1599 491/1504/1599 925/1488/1599 f 949/1489/1600 824/1506/1600 885/1619/1600 f 670/1821/1601 678/1774/1601 649/1773/1601 f 816/1440/1602 840/510/1602 225/509/1602 f 865/1822/1603 948/794/1603 856/1326/1603 f 746/1823/1604 785/1538/1604 764/1562/1604 f 607/1808/1605 655/1563/1605 899/467/1605 f 807/1721/1606 796/1621/1606 779/1620/1606 f 936/1810/1607 789/743/1607 55/802/1607 f 879/1796/1608 776/1824/1608 689/1797/1608 f 755/1825/1609 788/1826/1609 689/1797/1609 f 629/899/1610 630/1673/1610 659/1423/1610 f 623/1552/1611 887/1658/1611 855/1553/1611 f 834/1689/1612 917/1740/1612 596/1801/1612 f 857/1783/1613 893/1782/1613 805/1703/1613 f 929/1688/1614 615/1582/1614 881/1564/1614 f 675/1827/1615 690/1254/1615 659/1423/1615 f 927/1828/1616 1132/1829/1616 769/1389/1616 f 1006/1456/1617 1021/1572/1617 1005/1777/1617 f 760/1791/1618 799/1830/1618 773/1792/1618 f 842/516/1619 674/1475/1619 626/1474/1619 f 763/1493/1620 800/1509/1620 808/1494/1620 f 818/1715/1621 828/1746/1621 348/927/1621 f 800/1509/1622 831/1831/1622 820/1510/1622 f 798/1832/1623 797/1419/1623 780/1833/1623 f 895/1779/1624 916/1834/1624 940/1794/1624 f 874/1745/1625 895/1779/1625 348/927/1625 f 599/1835/1626 591/1836/1626 974/1837/1626 f 612/1838/1627 660/1454/1627 648/1839/1627 f 648/1839/1628 660/1454/1628 669/1434/1628 f 936/1840/1629 706/1841/1629 832/1795/1629 f 706/1841/1630 776/1824/1630 879/1796/1630 f 832/1795/1631 706/1841/1631 879/1796/1631 f 776/1824/1632 755/1825/1632 689/1797/1632 f 629/899/1633 659/1423/1633 636/551/1633 f 875/1842/1634 848/1843/1634 916/1834/1634 f 315/341/1635 823/142/1635 1444/1844/1635 f 831/1831/1636 863/1845/1636 820/1510/1636 f 2047/593/1637 2068/1846/1637 1154/364/1637 f 2303/1847/1638 1710/1633/1638 2890/1848/1638 f 887/1658/1639 842/516/1639 731/1659/1639 f 659/1423/1640 691/1425/1640 675/1827/1640 f 829/1421/1641 861/1744/1641 807/1672/1641 f 831/1831/1642 876/1820/1642 863/1845/1642 f 788/1826/1643 755/1825/1643 1357/345/1643 f 680/575/1644 682/745/1644 774/1061/1644 f 607/1808/1645 947/1623/1645 426/700/1645 f 862/1644/1646 883/1849/1646 848/1850/1646 f 591/1592/1647 599/1455/1647 612/1838/1647 f 864/1851/1648 641/1852/1648 746/1823/1648 f 930/1529/1649 665/1853/1649 624/1645/1649 f 2552/1854/1650 1047/1855/1650 1023/1856/1650 f 1042/427/1651 1218/1857/1651 3507/1858/1651 f 936/1840/1652 937/1859/1652 706/1841/1652 f 50/1189/1653 1517/1138/1653 579/1860/1653 f 51/1291/1654 587/1677/1654 588/477/1654 f 791/1589/1655 845/1861/1655 888/1862/1655 f 297/967/1656 41/936/1656 889/1863/1656 f 3470/281/1657 1163/280/1657 3476/355/1657 f 2592/648/1658 1689/1864/1658 2424/245/1658 f 1834/1865/1659 2515/1866/1659 1835/1867/1659 f 761/1560/1660 799/1868/1660 760/1869/1660 f 3484/1870/1661 3474/1871/1661 3486/1075/1661 f 772/1436/1662 787/1671/1662 779/1670/1662 f 589/1758/1663 598/1378/1663 581/1280/1663 f 772/1436/1664 780/1833/1664 787/1671/1664 f 943/1872/1665 706/1873/1665 313/803/1665 f 776/1824/1666 684/1008/1666 755/1825/1666 f 1357/345/1667 755/1825/1667 1238/346/1667 f 1407/1874/1668 340/1875/1668 634/1656/1668 f 862/1644/1669 896/1568/1669 883/1849/1669 f 1092/1876/1670 666/1877/1670 1117/1878/1670 f 3332/1653/1671 581/1280/1671 33/446/1671 f 538/779/1672 125/572/1672 537/598/1672 f 2992/1879/1673 2991/1880/1673 2440/1881/1673 f 678/1774/1674 677/1882/1674 638/1775/1674 f 615/1582/1675 1189/1883/1675 658/1565/1675 f 2989/1884/1676 2977/1885/1676 2429/1886/1676 f 819/1887/1677 884/1888/1677 897/1516/1677 f 576/1654/1678 573/1778/1678 590/1760/1678 f 828/1746/1679 874/1745/1679 348/927/1679 f 780/1833/1680 772/1436/1680 745/1438/1680 f 684/1008/1681 776/1824/1681 706/1841/1681 f 2261/1889/1682 2335/1890/1682 1887/1891/1682 f 181/436/1683 742/1892/1683 758/1458/1683 f 50/1189/1684 586/1676/1684 51/1291/1684 f 912/1393/1685 911/402/1685 347/401/1685 f 805/1703/1686 932/1893/1686 7/1704/1686 f 747/1383/1687 791/1589/1687 766/1588/1687 f 898/1616/1688 766/1894/1688 822/1387/1688 f 1298/1895/1689 1119/1814/1689 1357/345/1689 f 2761/238/1690 2731/1400/1690 2791/239/1690 f 648/1741/1691 669/1896/1691 647/1742/1691 f 717/1406/1692 722/1405/1692 699/1897/1692 f 897/1516/1693 896/1568/1693 862/1644/1693 f 863/1845/1694 884/1888/1694 819/1887/1694 f 693/1898/1695 715/1899/1695 705/1900/1695 f 715/1683/1696 745/1438/1696 705/1901/1696 f 706/1873/1697 937/801/1697 313/803/1697 f 806/1902/1698 828/1746/1698 818/1715/1698 f 985/319/1699 2027/1903/1699 1222/1084/1699 f 731/1659/1700 842/516/1700 791/1495/1700 f 651/1401/1701 1043/1904/1701 663/1407/1701 f 659/1423/1702 690/1254/1702 636/551/1702 f 597/1379/1703 598/1378/1703 630/1673/1703 f 581/1280/1704 590/1760/1704 589/1758/1704 f 818/1715/1705 860/1617/1705 847/816/1705 f 1076/303/1706 1399/138/1706 1454/1767/1706 f 808/1494/1707 819/1887/1707 761/1560/1707 f 2719/1905/1708 2706/1906/1708 2691/1907/1708 f 717/1406/1709 699/1897/1709 679/1908/1709 f 1988/272/1710 1284/1909/1710 1439/273/1710 f 684/1008/1711 1297/1007/1711 755/1825/1711 f 755/1825/1712 1297/1007/1712 1238/346/1712 f 1039/305/1713 1091/513/1713 1171/657/1713 f 938/537/1714 911/402/1714 912/1393/1714 f 857/1783/1715 3499/1910/1715 3426/1004/1715 f 699/1897/1716 694/1911/1716 677/1882/1716 f 14/1912/1717 1714/1913/1717 13/1307/1717 f 1854/1914/1718 1861/1915/1718 1853/1916/1718 f 1283/1917/1719 1291/1181/1719 768/1180/1719 f 898/1616/1720 893/1918/1720 627/1710/1720 f 721/1557/1721 705/1901/1721 745/1438/1721 f 860/1919/1722 361/1805/1722 654/1804/1722 f 2298/64/1723 2480/1920/1723 2464/1921/1723 f 125/572/1724 645/780/1724 281/415/1724 f 758/1458/1725 777/1439/1725 816/1440/1725 f 607/1808/1726 899/467/1726 947/1623/1726 f 721/1557/1727 745/1438/1727 744/1437/1727 f 3450/1354/1728 3435/1922/1728 3447/982/1728 f 1176/491/1729 1199/493/1729 1210/1652/1729 f 745/1438/1730 773/1792/1730 780/1833/1730 f 996/897/1731 1006/1923/1731 1005/1924/1731 f 2197/1925/1732 2192/1926/1732 2257/1927/1732 f 799/1830/1733 798/1832/1733 773/1792/1733 f 799/1830/1734 830/1928/1734 798/1832/1734 f 1132/301/1735 3451/1929/1735 7/1704/1735 f 596/1799/1736 784/1930/1736 608/996/1736 f 784/1930/1737 753/1931/1737 608/996/1737 f 3195/1932/1738 639/1933/1738 3218/1934/1738 f 1465/1035/1739 1183/1034/1739 831/1831/1739 f 712/1705/1740 778/1687/1740 759/1481/1740 f 893/1918/1741 898/1616/1741 805/1615/1741 f 2543/1935/1742 1830/1936/1742 1197/1074/1742 f 791/1495/1743 842/516/1743 626/1474/1743 f 3228/813/1744 3242/1937/1744 3241/309/1744 f 876/1820/1745 831/1831/1745 1198/1938/1745 f 762/1492/1746 808/1494/1746 722/1405/1746 f 3355/1939/1747 1922/1940/1747 3321/1941/1747 f 852/935/1748 889/1863/1748 41/936/1748 f 1005/1777/1749 1031/1573/1749 1017/1942/1749 f 1132/1829/1750 932/1390/1750 769/1389/1750 f 621/1535/1751 824/1506/1751 871/1536/1751 f 693/1386/1752 705/1901/1752 692/1435/1752 f 2164/1943/1753 1250/1944/1753 2174/1945/1753 f 627/1710/1754 766/1894/1754 898/1616/1754 f 1872/1946/1755 3506/1947/1755 3510/1039/1755 f 453/1948/1756 1134/1802/1756 384/1609/1756 f 627/1727/1757 747/1383/1757 766/1588/1757 f 747/1383/1758 731/1382/1758 791/1589/1758 f 681/1556/1759 725/1534/1759 161/1222/1759 f 1043/1904/1760 700/302/1760 663/1407/1760 f 613/1949/1761 662/1554/1761 639/1422/1761 f 746/1950/1762 850/1641/1762 785/1951/1762 f 916/1834/1763 864/1851/1763 878/1952/1763 f 787/1671/1764 797/1419/1764 807/1672/1764 f 997/1026/1765 996/897/1765 968/632/1765 f 795/1707/1766 818/1715/1766 794/815/1766 f 2161/1082/1767 3442/1953/1767 1894/383/1767 f 817/1397/1768 872/1476/1768 840/510/1768 f 681/1556/1769 719/1954/1769 725/1534/1769 f 780/1833/1770 797/1419/1770 787/1671/1770 f 143/1028/1771 710/1391/1771 703/438/1771 f 1263/154/1772 1161/916/1772 803/915/1772 f 803/915/1773 1452/155/1773 1263/154/1773 f 1810/1228/1774 1811/1362/1774 1577/1955/1774 f 724/1370/1775 198/1045/1775 161/1222/1775 f 3480/1300/1776 3499/1910/1776 3509/1702/1776 f 2347/1956/1777 813/1957/1777 214/1716/1777 f 3508/21/1778 3493/399/1778 3475/664/1778 f 1193/334/1779 1014/914/1779 438/489/1779 f 1651/1958/1780 1371/1959/1780 1355/1960/1780 f 2708/1961/1781 2424/245/1781 1689/1864/1781 f 841/1642/1782 862/1644/1782 848/1850/1782 f 809/1448/1783 918/1646/1783 628/1449/1783 f 697/515/1784 595/514/1784 834/1689/1784 f 883/1849/1785 896/1568/1785 641/1580/1785 f 1155/492/1786 1194/601/1786 1199/493/1786 f 27/397/1787 580/1313/1787 572/1962/1787 f 949/1489/1788 1030/1963/1788 824/1506/1788 f 691/1425/1789 704/1759/1789 675/1827/1789 f 962/1964/1790 961/979/1790 951/1965/1790 f 3478/428/1791 3448/1106/1791 3481/1108/1791 f 1993/1966/1792 586/1676/1792 579/1860/1792 f 654/1394/1793 418/539/1793 938/537/1793 f 1267/191/1794 1217/193/1794 242/1967/1794 f 662/1554/1795 681/1556/1795 145/797/1795 f 785/1538/1796 865/1822/1796 526/1325/1796 f 734/1968/1797 181/436/1797 720/1392/1797 f 830/1643/1798 841/1642/1798 797/1969/1798 f 780/1833/1799 773/1792/1799 798/1832/1799 f 913/1618/1800 654/1394/1800 938/537/1800 f 1013/406/1801 1037/518/1801 1021/1572/1801 f 668/830/1802 271/204/1802 1452/1970/1802 f 1142/746/1803 1193/334/1803 438/489/1803 f 977/867/1804 1111/1971/1804 3462/1972/1804 f 858/880/1805 859/1380/1805 347/401/1805 f 596/1799/1806 28/1724/1806 784/1930/1806 f 318/1973/1807 475/1349/1807 1251/1364/1807 f 1465/1035/1808 831/1831/1808 800/1509/1808 f 649/1773/1809 600/1974/1809 601/1975/1809 f 1958/232/1810 2712/1976/1810 2724/1977/1810 f 791/1589/1811 888/1862/1811 822/1590/1811 f 977/867/1812 965/1978/1812 1111/1971/1812 f 614/1403/1813 994/1979/1813 651/1401/1813 f 803/1980/1814 668/830/1814 1452/1970/1814 f 513/558/1815 680/575/1815 501/556/1815 f 975/1981/1816 3204/1982/1816 3205/1983/1816 f 3428/759/1817 2766/681/1817 2669/857/1817 f 1076/303/1818 1085/1984/1818 1399/138/1818 f 1200/1237/1819 1201/511/1819 1212/279/1819 f 819/1887/1820 830/1643/1820 799/1868/1820 f 601/1975/1821 600/1974/1821 975/1748/1821 f 597/1379/1822 630/1673/1822 629/899/1822 f 101/508/1823 636/551/1823 690/1254/1823 f 983/1985/1824 1189/1986/1824 939/1987/1824 f 679/1988/1825 670/1062/1825 136/378/1825 f 201/694/1826 120/494/1826 362/357/1826 f 999/1989/1827 988/448/1827 2505/1990/1827 f 160/661/1828 735/1479/1828 717/1991/1828 f 3498/777/1829 3445/354/1829 3505/353/1829 f 1014/914/1830 1191/1526/1830 438/489/1830 f 722/1405/1831 716/1992/1831 699/1897/1831 f 912/1993/1832 913/1994/1832 938/1995/1832 f 913/1618/1833 912/1393/1833 872/1476/1833 f 145/797/1834 681/1556/1834 161/1222/1834 f 876/1820/1835 884/1888/1835 863/1845/1835 f 798/1996/1836 830/1643/1836 797/1969/1836 f 716/1803/1837 761/1997/1837 760/1791/1837 f 2458/1998/1838 2440/1881/1838 969/1999/1838 f 711/2000/1839 742/1892/1839 734/1968/1839 f 710/1391/1840 711/2000/1840 734/1968/1840 f 924/2001/1841 803/915/1841 1175/1221/1841 f 1014/914/1842 1175/1221/1842 803/915/1842 f 635/2002/1843 668/830/1843 803/1980/1843 f 2322/2003/1844 2220/2004/1844 2382/2005/1844 f 722/1405/1845 761/1560/1845 716/1992/1845 f 662/1554/1846 661/549/1846 639/1422/1846 f 860/1617/1847 872/1476/1847 817/1397/1847 f 847/816/1848 860/1617/1848 817/1397/1848 f 1094/1170/1849 1113/139/1849 1086/1769/1849 f 848/1843/1850 875/1842/1850 829/1421/1850 f 649/1773/1851 638/1775/1851 600/1974/1851 f 848/1843/1852 883/2006/1852 916/1834/1852 f 865/1822/1853 856/1326/1853 526/1325/1853 f 3479/312/1854 2264/698/1854 3425/313/1854 f 829/1421/1855 841/1420/1855 848/1843/1855 f 597/1379/1856 610/1281/1856 581/1280/1856 f 924/2001/1857 635/2007/1857 803/915/1857 f 635/2007/1858 625/2008/1858 811/2009/1858 f 668/830/1859 635/2002/1859 811/831/1859 f 532/570/1860 563/614/1860 844/1598/1860 f 608/996/1861 560/2010/1861 2/997/1861 f 1452/1970/1862 271/204/1862 1440/290/1862 f 570/2011/1863 3406/2012/1863 586/1676/1863 f 819/1887/1864 897/1516/1864 862/1644/1864 f 596/1799/1865 608/996/1865 751/2013/1865 f 670/1821/1866 679/1908/1866 678/1774/1866 f 777/1439/1867 793/814/1867 817/1397/1867 f 2552/1854/1868 1059/2014/1868 1047/1855/1868 f 675/1827/1869 704/1759/1869 711/2000/1869 f 742/1892/1870 759/1481/1870 758/1458/1870 f 685/1681/1871 811/831/1871 625/2015/1871 f 642/2016/1872 685/2017/1872 625/2008/1872 f 711/2000/1873 712/1705/1873 742/1892/1873 f 822/1590/1874 888/1862/1874 707/2018/1874 f 3405/2019/1875 570/2011/1875 586/1676/1875 f 3406/2012/1876 587/1677/1876 586/1676/1876 f 768/1180/1877 767/2020/1877 869/2021/1877 f 864/1851/1878 790/1561/1878 878/1952/1878 f 819/1887/1879 862/1644/1879 830/1643/1879 f 925/1488/1880 582/1505/1880 949/1489/1880 f 943/1872/1881 684/2022/1881 706/1873/1881 f 679/1908/1882 699/1897/1882 678/1774/1882 f 1189/1883/1883 633/1566/1883 658/1565/1883 f 888/1862/1884 644/2023/1884 707/2018/1884 f 883/2006/1885 864/1851/1885 916/1834/1885 f 985/319/1886 1064/983/1886 1026/320/1886 f 712/1705/1887 759/1481/1887 742/1892/1887 f 901/2024/1888 635/2002/1888 924/2025/1888 f 802/2026/1889 625/2015/1889 635/2002/1889 f 802/2026/1890 642/2027/1890 625/2015/1890 f 769/1389/1891 854/2028/1891 927/1828/1891 f 775/1316/1892 105/2029/1892 1004/1317/1892 f 2423/2030/1893 1307/2031/1893 130/2032/1893 f 761/1560/1894 819/1887/1894 799/1868/1894 f 3205/2033/1895 601/1975/1895 975/1748/1895 f 599/1455/1896 660/1454/1896 612/1838/1896 f 1324/2034/1897 1460/2035/1897 1308/164/1897 f 778/1687/1898 786/1480/1898 759/1481/1898 f 2246/2036/1899 2335/1890/1899 2261/1889/1899 f 940/1794/1900 790/1561/1900 655/1563/1900 f 930/1529/1901 948/794/1901 865/1822/1901 f 426/700/1902 915/854/1902 607/1808/1902 f 1291/1680/1903 2136/1679/1903 1303/2037/1903 f 871/1536/1904 926/1508/1904 671/2038/1904 f 734/1968/1905 742/1892/1905 181/436/1905 f 1030/1963/1906 873/1507/1906 824/1506/1906 f 692/1435/1907 705/1901/1907 721/1557/1907 f 1199/493/1908 922/451/1908 1149/1043/1908 f 2498/2039/1909 2515/2040/1909 2478/2041/1909 f 649/1429/1910 92/1063/1910 670/1062/1910 f 758/1458/1911 759/1481/1911 777/1439/1911 f 576/1654/1912 590/1760/1912 581/1280/1912 f 3455/2042/1913 3444/2043/1913 3478/428/1913 f 666/2044/1914 924/2001/1914 1117/2045/1914 f 666/1877/1915 901/2024/1915 924/2025/1915 f 825/2046/1916 685/2017/1916 642/2016/1916 f 685/1681/1917 852/935/1917 471/31/1917 f 1167/2047/1918 1195/453/1918 1156/452/1918 f 898/1616/1919 822/1387/1919 932/1390/1919 f 615/1582/1920 658/1565/1920 881/1564/1920 f 807/1672/1921 797/1419/1921 829/1421/1921 f 697/2048/1922 596/1799/1922 751/2013/1922 f 1015/751/1923 1163/280/1923 1092/752/1923 f 772/1436/1924 779/1670/1924 744/1437/1924 f 1465/1035/1925 800/1509/1925 763/1493/1925 f 751/2013/1926 608/996/1926 674/1396/1926 f 1038/1356/1927 1045/405/1927 1018/404/1927 f 635/2002/1928 901/2024/1928 802/2026/1928 f 656/2049/1929 642/2027/1929 802/2026/1929 f 656/2049/1930 825/1682/1930 642/2027/1930 f 864/1851/1931 746/1823/1931 790/1561/1931 f 1167/2047/1932 1201/511/1932 1195/453/1932 f 3406/2012/1933 588/477/1933 587/1677/1933 f 662/1554/1934 145/797/1934 661/549/1934 f 145/797/1935 161/1222/1935 155/710/1935 f 1210/1652/1936 1149/1043/1936 8/2050/1936 f 694/1385/1937 729/1790/1937 715/1683/1937 f 715/1683/1938 729/1790/1938 773/1792/1938 f 881/2051/1939 633/2052/1939 869/2021/1939 f 1083/488/1940 1025/882/1940 1142/746/1940 f 669/1434/1941 692/1435/1941 647/2053/1941 f 796/2054/1942 806/1902/1942 795/1707/1942 f 764/2055/1943 526/1497/1943 655/1809/1943 f 883/2006/1944 641/1852/1944 864/1851/1944 f 1317/2056/1945 1094/1170/1945 1114/1172/1945 f 695/1490/1946 949/1489/1946 885/1619/1946 f 682/745/1947 318/2057/1947 774/1061/1947 f 667/2058/1948 802/2026/1948 901/2024/1948 f 667/2058/1949 656/2049/1949 802/2026/1949 f 732/2059/1950 825/2060/1950 656/2061/1950 f 849/2062/1951 852/2063/1951 825/2046/1951 f 633/2052/1952 728/2064/1952 869/2021/1952 f 869/2021/1953 728/2064/1953 768/1180/1953 f 974/1837/1954 591/1836/1954 573/1545/1954 f 744/1622/1955 771/2065/1955 743/2066/1955 f 929/1688/1956 881/1564/1956 869/2067/1956 f 869/2021/1957 620/1655/1957 739/2068/1957 f 2797/1717/1958 2816/2069/1958 2183/1718/1958 f 824/1506/1959 926/1508/1959 871/1536/1959 f 2422/2070/1960 2459/2071/1960 2517/2072/1960 f 538/779/1961 645/780/1961 125/572/1961 f 2483/2073/1962 988/448/1962 978/450/1962 f 908/2074/1963 1093/277/1963 1201/511/1963 f 901/2024/1964 666/1877/1964 667/2058/1964 f 667/2075/1965 732/2059/1965 656/2061/1965 f 732/2076/1966 849/2077/1966 825/1682/1966 f 889/1863/1967 852/935/1967 849/2077/1967 f 908/2074/1968 1143/512/1968 1093/277/1968 f 3483/1639/1969 3453/856/1969 1897/858/1969 f 717/1991/1970 679/1988/1970 136/378/1970 f 875/1819/1971 916/2078/1971 895/2079/1971 f 863/1845/1972 819/1887/1972 808/1494/1972 f 568/2080/1973 665/1853/1973 930/1529/1973 f 622/1593/1974 647/2053/1974 631/1725/1974 f 647/2081/1975 646/2082/1975 631/2083/1975 f 622/1593/1976 631/1725/1976 611/1594/1976 f 692/2084/1977 676/2085/1977 647/1742/1977 f 865/1822/1978 871/1527/1978 930/1529/1978 f 869/2021/1979 767/2020/1979 620/1655/1979 f 624/1645/1980 604/1174/1980 890/852/1980 f 471/31/1981 811/831/1981 685/1681/1981 f 897/1516/1982 884/1888/1982 925/1488/1982 f 933/2086/1983 732/2076/1983 667/2058/1983 f 3406/2012/1984 571/2087/1984 588/477/1984 f 820/1510/1985 863/1845/1985 808/1494/1985 f 794/815/1986 818/1715/1986 847/816/1986 f 941/1451/1987 891/297/1987 886/331/1987 f 591/1592/1988 612/1838/1988 622/1593/1988 f 714/1558/1989 721/1557/1989 713/1706/1989 f 721/1557/1990 744/1437/1990 713/1706/1990 f 744/1622/1991 796/1621/1991 771/2065/1991 f 878/1952/1992 790/1561/1992 940/1794/1992 f 2478/2088/1993 2515/1866/1993 1834/1865/1993 f 997/1026/1994 1006/1923/1994 996/897/1994 f 842/516/1995 697/515/1995 751/2089/1995 f 854/2028/1996 933/2086/1996 667/2058/1996 f 632/2090/1997 732/2059/1997 933/2091/1997 f 732/2076/1998 632/2092/1998 849/2077/1998 f 674/1475/1999 842/516/1999 751/2089/1999 f 1862/174/2000 1893/2093/2000 2093/338/2000 f 18/2094/2001 810/1395/2001 562/995/2001 f 571/2087/2002 3406/2012/2002 3376/2095/2002 f 68/818/2003 80/209/2003 60/784/2003 f 645/780/2004 202/674/2004 281/415/2004 f 1036/2096/2005 1209/2097/2005 504/2098/2005 f 1155/492/2006 2197/1925/2006 2257/1927/2006 f 647/1742/2007 676/2085/2007 646/2099/2007 f 2096/2100/2008 2651/2101/2008 2499/2102/2008 f 641/1580/2009 850/1641/2009 746/1950/2009 f 1175/419/2010 1181/418/2010 812/2103/2010 f 927/1828/2011 667/2058/2011 666/1877/2011 f 927/1828/2012 854/2028/2012 667/2058/2012 f 905/2104/2013 889/2105/2013 849/2062/2013 f 749/1770/2014 105/2029/2014 740/2106/2014 f 1083/488/2015 1142/746/2015 438/489/2015 f 762/1492/2016 722/1405/2016 735/1404/2016 f 744/1622/2017 743/2066/2017 713/2107/2017 f 631/2083/2018 646/2082/2018 637/2108/2018 f 796/2054/2019 795/1707/2019 771/1686/2019 f 719/1954/2020 730/2109/2020 725/1534/2020 f 612/1838/2021 648/1839/2021 622/1593/2021 f 360/901/2022 471/31/2022 852/935/2022 f 971/977/2023 990/2110/2023 970/978/2023 f 690/1254/2024 711/2000/2024 710/1391/2024 f 600/1974/2025 599/1835/2025 975/1748/2025 f 884/1888/2026 876/1820/2026 925/1488/2026 f 949/1489/2027 582/1505/2027 1030/1963/2027 f 1163/2111/2028 666/2044/2028 1092/2112/2028 f 854/2028/2029 882/2113/2029 933/2086/2029 f 882/2114/2030 632/2090/2030 933/2091/2030 f 644/2115/2031 849/2077/2031 632/2092/2031 f 849/2077/2032 644/2115/2032 905/2116/2032 f 637/1674/2033 646/1424/2033 659/1423/2033 f 2548/2117/2034 2852/2118/2034 2744/2119/2034 f 3439/2120/2035 3493/399/2035 3471/398/2035 f 904/1569/2036 653/432/2036 532/570/2036 f 624/1645/2037 665/1853/2037 604/1174/2037 f 475/1352/2038 682/745/2038 512/1353/2038 f 929/2121/2039 869/2021/2039 739/2068/2039 f 614/2122/2040 650/1555/2040 662/1554/2040 f 614/1403/2041 662/2123/2041 613/2124/2041 f 3279/106/2042 3294/105/2042 3342/165/2042 f 707/2018/2043 632/2090/2043 882/2114/2043 f 707/2018/2044 644/2023/2044 632/2090/2044 f 810/1395/2045 297/2125/2045 889/2105/2045 f 905/2104/2046 810/1395/2046 889/2105/2046 f 2976/2126/2047 2977/1885/2047 2989/1884/2047 f 1355/1960/2048 1633/2127/2048 1651/1958/2048 f 571/2087/2049 580/1313/2049 588/477/2049 f 1964/2128/2050 3236/2129/2050 3439/2130/2050 f 1328/2131/2051 943/1872/2051 313/803/2051 f 785/1538/2052 621/1540/2052 865/1822/2052 f 611/1594/2053 631/1725/2053 598/1378/2053 f 627/1727/2054 855/1381/2054 747/1383/2054 f 1171/657/2055 316/356/2055 594/1044/2055 f 878/1952/2056 940/1794/2056 916/1834/2056 f 699/1897/2057 677/1882/2057 678/1774/2057 f 1067/908/2058 1077/1175/2058 1044/909/2058 f 600/1974/2059 638/1775/2059 599/1835/2059 f 699/1897/2060 716/1992/2060 694/1911/2060 f 915/854/2061 940/1794/2061 607/1808/2061 f 1454/2132/2062 724/1370/2062 730/2109/2062 f 845/1496/2063 905/2116/2063 644/2115/2063 f 297/2125/2064 810/1395/2064 18/2094/2064 f 3390/1375/2065 1986/1176/2065 2004/1177/2065 f 1267/191/2066 1242/2133/2066 1285/192/2066 f 1898/2134/2067 2808/2135/2067 2062/2136/2067 f 1246/2137/2068 1083/488/2068 1127/490/2068 f 407/315/2069 3336/314/2069 2279/1800/2069 f 704/1759/2070 712/1705/2070 711/2000/2070 f 796/2054/2071 807/1672/2071 806/1902/2071 f 630/1673/2072 631/1725/2072 637/1674/2072 f 560/1032/2073 608/2138/2073 753/1766/2073 f 739/2068/2074 620/1655/2074 917/1657/2074 f 713/1706/2075 712/1705/2075 704/1759/2075 f 716/1803/2076 760/1791/2076 729/1790/2076 f 608/996/2077 562/995/2077 810/1395/2077 f 1386/129/2078 134/203/2078 363/1233/2078 f 790/1561/2079 746/1823/2079 764/1562/2079 f 660/1454/2080 677/1384/2080 669/1434/2080 f 854/2028/2081 769/1389/2081 882/2113/2081 f 769/1389/2082 707/1388/2082 882/2113/2082 f 674/1396/2083 810/1395/2083 905/2104/2083 f 888/2139/2084 845/1496/2084 644/2115/2084 f 690/1254/2085 675/1827/2085 711/2000/2085 f 999/1989/2086 1018/1025/2086 988/448/2086 f 710/2140/2087 734/2141/2087 720/2142/2087 f 785/1538/2088 526/1325/2088 764/1562/2088 f 807/1672/2089 828/1746/2089 806/1902/2089 f 623/1552/2090 595/514/2090 887/1658/2090 f 795/1707/2091 806/1902/2091 818/1715/2091 f 692/2084/2092 721/2143/2092 676/2085/2092 f 875/1819/2093 895/2079/2093 861/1719/2093 f 628/1449/2094 623/1552/2094 683/1450/2094 f 2481/2144/2095 2465/2145/2095 2503/2146/2095 f 669/1434/2096 677/1384/2096 693/1386/2096 f 701/1473/2097 905/2116/2097 845/1496/2097 f 905/2116/2098 701/1473/2098 674/1475/2098 f 580/1313/2099 571/2087/2099 3348/2147/2099 f 781/2148/2100 3252/2149/2100 1572/2150/2100 f 636/551/2101 75/552/2101 629/899/2101 f 1367/2151/2102 767/2020/2102 1303/1179/2102 f 626/1474/2103 701/1473/2103 845/1496/2103 f 1112/2152/2104 1040/2153/2104 1011/2154/2104 f 2045/2155/2105 2044/2156/2105 2017/2157/2105 f 2045/2155/2106 2058/2158/2106 2044/2156/2106 f 1906/47/2107 1896/2159/2107 1514/2160/2107 f 232/2161/2108 1138/42/2108 1170/2162/2108 f 1016/2163/2109 1035/2164/2109 3436/1372/2109 f 1016/2163/2110 1011/2154/2110 1035/2164/2110 f 749/1289/2111 857/1783/2111 3426/1004/2111 f 1360/2165/2112 1359/2166/2112 120/494/2112 f 3189/1637/2113 3212/2167/2113 3211/2168/2113 f 1788/1227/2114 1787/1229/2114 1773/2169/2114 f 1041/420/2115 158/80/2115 1319/200/2115 f 1415/2170/2116 1158/2171/2116 2100/2172/2116 f 2090/2173/2117 515/2174/2117 1461/46/2117 f 955/2175/2118 2993/2176/2118 960/2177/2118 f 1487/2178/2119 1479/2179/2119 3397/2180/2119 f 1839/2181/2120 1626/2182/2120 1846/1200/2120 f 3507/1858/2121 1016/2163/2121 3436/1372/2121 f 1855/113/2122 1377/175/2122 1960/884/2122 f 1011/2154/2123 950/2183/2123 1112/2152/2123 f 988/448/2124 1018/1025/2124 998/449/2124 f 1459/40/2125 1634/2184/2125 1602/41/2125 f 2031/2185/2126 1311/2186/2126 1968/2187/2126 f 1319/200/2127 1325/199/2127 1995/2188/2127 f 1995/2188/2128 1724/408/2128 1762/407/2128 f 1792/2189/2129 2275/2190/2129 1791/2191/2129 f 2373/2192/2130 2135/2193/2130 2334/2194/2130 f 1218/1857/2131 1016/2163/2131 3507/1858/2131 f 955/2175/2132 960/2177/2132 959/576/2132 f 1218/1857/2133 950/2183/2133 1016/2163/2133 f 1724/408/2134 1137/2195/2134 1981/58/2134 f 1011/2154/2135 1040/2153/2135 1035/2164/2135 f 3436/1372/2136 1035/2164/2136 1101/2196/2136 f 980/2197/2137 1010/2198/2137 1001/2199/2137 f 1107/2200/2138 1125/747/2138 1106/749/2138 f 1814/2201/2139 2294/2202/2139 1827/1513/2139 f 633/2052/2140 1189/1986/2140 965/1978/2140 f 1378/594/2141 1137/2195/2141 2104/592/2141 f 2275/2190/2142 2294/2202/2142 1791/2191/2142 f 1082/2203/2143 1087/2204/2143 1071/702/2143 f 2104/592/2144 20/707/2144 2047/593/2144 f 20/707/2145 1571/2205/2145 2087/822/2145 f 3280/107/2146 3279/106/2146 3213/2206/2146 f 1193/334/2147 1175/1221/2147 1014/914/2147 f 2087/822/2148 1571/2205/2148 2061/2207/2148 f 2859/2208/2149 2064/2209/2149 2218/2210/2149 f 2898/2211/2150 2882/2212/2150 2867/2213/2150 f 1925/2214/2151 1568/2215/2151 1711/2216/2151 f 1501/2217/2152 1735/2218/2152 1734/2219/2152 f 1725/2220/2153 1501/2217/2153 1734/2219/2153 f 1027/2221/2154 1012/2222/2154 3468/2223/2154 f 1138/42/2155 1179/82/2155 1178/1662/2155 f 1188/1575/2156 2121/323/2156 1128/1576/2156 f 2784/2224/2157 2770/2225/2157 1125/2226/2157 f 1101/2196/2158 1118/1117/2158 3485/326/2158 f 1065/2227/2159 1209/2097/2159 1036/2096/2159 f 3241/309/2160 3280/107/2160 3213/2206/2160 f 2925/2228/2161 2926/2229/2161 2944/2230/2161 f 467/2231/2162 1379/588/2162 1131/2232/2162 f 1188/1575/2163 2069/321/2163 2121/323/2163 f 1288/2233/2164 2031/2185/2164 1978/340/2164 f 2687/2234/2165 1931/2235/2165 1908/2236/2165 f 1059/2014/2166 1070/2237/2166 1046/2238/2166 f 1216/2239/2167 1112/2152/2167 950/2183/2167 f 1027/2221/2168 1111/1971/2168 1012/2222/2168 f 1097/2240/2169 1139/2241/2169 1105/2242/2169 f 1369/2243/2170 1393/2244/2170 243/2245/2170 f 1216/2239/2171 1217/193/2171 1112/2152/2171 f 1047/2246/2172 1046/2247/2172 1033/2248/2172 f 3426/1004/2173 1004/2249/2173 105/1290/2173 f 1263/154/2174 1315/156/2174 1172/1690/2174 f 1820/2250/2175 1992/2251/2175 1561/2252/2175 f 2372/2253/2176 963/2254/2176 2910/2255/2176 f 1118/1117/2177 1101/2196/2177 1073/2256/2177 f 1073/2256/2178 1040/2153/2178 976/2257/2178 f 985/319/2179 1222/1084/2179 226/832/2179 f 226/832/2180 1100/834/2180 1064/983/2180 f 1140/2258/2181 1157/2259/2181 1169/2260/2181 f 1072/2261/2182 1071/702/2182 2552/701/2182 f 3212/2167/2183 3213/2206/2183 3227/2262/2183 f 1072/2261/2184 1082/2203/2184 1071/702/2184 f 1134/1802/2185 3438/2263/2185 983/1985/2185 f 1012/2222/2186 1189/1986/2186 983/1985/2186 f 2723/653/2187 2753/652/2187 2601/2264/2187 f 781/2148/2188 2046/2265/2188 2017/2157/2188 f 2031/2185/2189 2071/2266/2189 1978/340/2189 f 2103/116/2190 2116/2267/2190 2102/2268/2190 f 992/2269/2191 1173/2270/2191 908/2074/2191 f 3175/2271/2192 3197/2272/2192 3174/2273/2192 f 502/2274/2193 1328/907/2193 479/906/2193 f 1029/2275/2194 1116/2276/2194 3489/753/2194 f 3045/2277/2195 3087/1409/2195 3057/1411/2195 f 1203/2278/2196 2137/2279/2196 1202/2280/2196 f 1139/2241/2197 1140/2258/2197 1169/2260/2197 f 1810/1228/2198 1577/1955/2198 1831/2281/2198 f 1139/2282/2199 1124/1431/2199 1105/2283/2199 f 2137/2279/2200 992/2269/2200 1202/2280/2200 f 2488/2284/2201 989/2285/2201 1007/2286/2201 f 992/2269/2202 1050/2287/2202 1173/2270/2202 f 3355/2288/2203 3414/2289/2203 1957/2290/2203 f 1568/2215/2204 1925/2214/2204 1159/2291/2204 f 1035/2164/2205 1073/2256/2205 1101/2196/2205 f 2209/2292/2206 2377/2293/2206 2215/2294/2206 f 1218/1857/2207 1148/429/2207 950/2183/2207 f 1148/429/2208 1216/2239/2208 950/2183/2208 f 2436/2295/2209 3019/2296/2209 3030/2297/2209 f 2276/2298/2210 2231/2299/2210 2230/2300/2210 f 2839/1640/2211 3434/869/2211 3483/1639/2211 f 3482/1332/2212 3453/2301/2212 3492/1003/2212 f 2085/339/2213 1807/2302/2213 1288/2233/2213 f 1807/2302/2214 2085/339/2214 2068/1846/2214 f 1246/2137/2215 2277/881/2215 1083/488/2215 f 1831/937/2216 1818/2303/2216 1809/2304/2216 f 1766/57/2217 1088/111/2217 1215/421/2217 f 2634/362/2218 2653/2305/2218 2652/724/2218 f 1151/2306/2219 1777/2307/2219 364/2308/2219 f 1081/2309/2220 1105/2242/2220 1080/2310/2220 f 1105/2242/2221 1096/2311/2221 1080/2310/2221 f 1239/2312/2222 1311/1368/2222 57/1367/2222 f 2221/2313/2223 2248/1131/2223 2287/2314/2223 f 1784/2315/2224 1555/2316/2224 1785/589/2224 f 2040/1017/2225 2081/2317/2225 2056/2318/2225 f 1379/588/2226 1747/81/2226 182/260/2226 f 2424/245/2227 2673/2319/2227 3428/759/2227 f 1348/115/2228 1308/164/2228 1289/2320/2228 f 2084/2321/2229 2068/1846/2229 2085/339/2229 f 1893/2093/2230 2085/339/2230 2093/338/2230 f 1800/1148/2231 1799/176/2231 1786/2322/2231 f 2653/2305/2232 2689/1201/2232 2652/724/2232 f 1029/2275/2233 1180/324/2233 1036/2096/2233 f 1008/2323/2234 1007/2324/2234 989/2325/2234 f 2153/1194/2235 2677/2326/2235 2482/2327/2235 f 1757/2328/2236 1770/1090/2236 1764/2329/2236 f 1024/2330/2237 2377/2293/2237 2209/2292/2237 f 1869/59/2238 1377/175/2238 1108/112/2238 f 2201/2331/2239 2191/2332/2239 2302/2333/2239 f 1124/2334/2240 1139/2241/2240 1169/2260/2240 f 1855/113/2241 1062/2335/2241 1147/261/2241 f 1460/2035/2242 1078/6/2242 1414/2336/2242 f 1214/2337/2243 1286/2338/2243 1777/2339/2243 f 1286/2340/2244 1379/588/2244 1777/2307/2244 f 1081/2309/2245 1080/2310/2245 1070/2341/2245 f 1377/175/2246 1862/174/2246 1960/884/2246 f 1269/2342/2247 1415/1660/2247 1122/2343/2247 f 2524/2344/2248 3462/2345/2248 3441/870/2248 f 1269/2346/2249 3352/2347/2249 1415/2170/2249 f 2795/2348/2250 2012/2349/2250 2847/2350/2250 f 1322/2351/2251 1828/2352/2251 2049/2353/2251 f 1000/2354/2252 1008/2323/2252 989/2325/2252 f 2406/2355/2253 2405/2356/2253 2911/2357/2253 f 846/1816/2254 838/1764/2254 619/1817/2254 f 1218/1857/2255 1042/427/2255 1148/429/2255 f 2713/2358/2256 1125/2226/2256 1107/2359/2256 f 1026/320/2257 1064/983/2257 708/2360/2257 f 561/2361/2258 1325/199/2258 158/80/2258 f 1096/2311/2259 1104/2362/2259 1103/2363/2259 f 2120/186/2260 2093/338/2260 1978/340/2260 f 1033/2248/2261 1046/2247/2261 1022/2364/2261 f 1845/178/2262 1619/2365/2262 1612/2366/2262 f 2713/2358/2263 1107/2359/2263 2662/2367/2263 f 1097/2240/2264 1105/2242/2264 1081/2309/2264 f 599/1835/2265 974/1837/2265 975/1748/2265 f 1044/909/2266 1054/1768/2266 1031/1573/2266 f 384/1609/2267 809/1624/2267 686/1610/2267 f 1004/1317/2268 3431/2368/2268 686/1610/2268 f 1105/2242/2269 1124/2334/2269 1096/2311/2269 f 970/978/2270 979/2369/2270 969/2370/2270 f 1612/2366/2271 1617/541/2271 1844/2371/2271 f 1189/1883/2272 615/1582/2272 939/1581/2272 f 1378/594/2273 2047/593/2273 1154/364/2273 f 1020/2372/2274 1033/2248/2274 1022/2364/2274 f 1862/174/2275 577/185/2275 1960/884/2275 f 1010/1597/2276 1009/1596/2276 1001/2373/2276 f 2119/2374/2277 1621/2375/2277 20/707/2277 f 1180/324/2278 1065/2227/2278 1036/2096/2278 f 2145/2376/2279 1291/1680/2279 1283/2377/2279 f 983/1985/2280 991/2378/2280 1012/2222/2280 f 3500/325/2281 1180/324/2281 1029/2275/2281 f 1862/174/2282 2093/338/2282 577/185/2282 f 970/2379/2283 989/2325/2283 979/2380/2283 f 1460/2035/2284 1414/2336/2284 1289/2320/2284 f 1070/2341/2285 1069/2381/2285 1058/2382/2285 f 980/2197/2286 1001/2199/2286 971/977/2286 f 962/1964/2287 980/2197/2287 971/977/2287 f 1111/1971/2288 1189/1986/2288 1012/2222/2288 f 2044/2156/2289 2043/563/2289 3182/562/2289 f 1124/1431/2290 1169/2383/2290 1168/2384/2290 f 3251/2385/2291 953/2386/2291 3270/2387/2291 f 1151/2388/2292 1214/2337/2292 1777/2339/2292 f 1968/2187/2293 1988/2389/2293 2071/2266/2293 f 982/259/2294 1147/261/2294 1062/2335/2294 f 1069/2381/2295 1103/2363/2295 1068/2390/2295 f 1078/6/2296 228/5/2296 1414/2336/2296 f 1203/2278/2297 1202/2280/2297 1196/2391/2297 f 1762/407/2298 1766/57/2298 1215/421/2298 f 2044/2156/2299 2057/219/2299 2043/563/2299 f 1798/912/2300 1605/540/2300 1597/913/2300 f 1017/1942/2301 1031/1573/2301 1054/1768/2301 f 2289/1443/2302 2158/1442/2302 2862/2392/2302 f 1059/703/2303 1081/2309/2303 1070/2341/2303 f 1020/2372/2304 1022/2364/2304 1008/2393/2304 f 1020/2394/2305 1008/2323/2305 1009/1596/2305 f 821/2395/2306 1214/30/2306 1151/2306/2306 f 652/1140/2307 2229/1142/2307 657/2396/2307 f 1032/2397/2308 2551/2398/2308 2527/2399/2308 f 1855/113/2309 1935/886/2309 1062/2335/2309 f 1070/2341/2310 1058/2382/2310 1032/2397/2310 f 1022/2364/2311 1032/2397/2311 1007/2286/2311 f 1008/2393/2312 1022/2364/2312 1007/2286/2312 f 961/979/2313 970/978/2313 969/2370/2313 f 3451/1929/2314 870/2400/2314 3480/1300/2314 f 1126/2401/2315 1216/2239/2315 1148/429/2315 f 242/1967/2316 1217/193/2316 1216/2239/2316 f 1126/2401/2317 242/1967/2317 1216/2239/2317 f 3501/350/2318 3496/1097/2318 3452/1099/2318 f 2250/2402/2319 2242/2403/2319 2382/2005/2319 f 1157/2259/2320 1185/2404/2320 1184/2405/2320 f 1185/2404/2321 1203/2278/2321 1184/2405/2321 f 2242/2406/2322 2250/2407/2322 2282/2408/2322 f 953/1544/2323 975/1748/2323 974/1837/2323 f 3452/2409/2324 3507/1858/2324 3436/1372/2324 f 1001/2199/2325 990/2110/2325 971/977/2325 f 1916/2410/2326 2171/2411/2326 1449/2412/2326 f 1784/2315/2327 1785/589/2327 1796/591/2327 f 970/2379/2328 1000/2354/2328 989/2325/2328 f 3391/2413/2329 1974/108/2329 3390/1375/2329 f 3438/2263/2330 991/2378/2330 983/1985/2330 f 3431/2368/2331 1160/1611/2331 686/1610/2331 f 1035/2164/2332 1040/2153/2332 1073/2256/2332 f 3371/683/2333 3372/2414/2333 3381/684/2333 f 3481/1108/2334 1148/429/2334 3478/428/2334 f 2911/2357/2335 2405/2356/2335 2909/2415/2335 f 1920/2416/2336 2360/2417/2336 2225/2418/2336 f 1484/2419/2337 1502/2420/2337 1501/2217/2337 f 2616/2421/2338 1866/2422/2338 2581/2423/2338 f 1996/2424/2339 2364/2425/2339 2307/2426/2339 f 3449/1266/2340 3450/1354/2340 3495/359/2340 f 652/1140/2341 657/2396/2341 837/2427/2341 f 1032/2397/2342 1058/2382/2342 2551/2398/2342 f 857/1783/2343 805/1703/2343 3509/1702/2343 f 1694/2428/2344 3335/2429/2344 1669/862/2344 f 2419/2430/2345 981/2431/2345 963/2432/2345 f 2377/2293/2346 2339/2433/2346 2215/2294/2346 f 2909/2415/2347 2405/2356/2347 2404/2434/2347 f 1286/2340/2348 1747/81/2348 1379/588/2348 f 1118/1117/2349 1065/2227/2349 1180/324/2349 f 3329/2435/2350 3374/2436/2350 3328/2437/2350 f 1166/602/2351 1155/492/2351 2257/1927/2351 f 947/1623/2352 470/554/2352 426/700/2352 f 2377/2293/2353 2132/2438/2353 2339/2433/2353 f 1090/2439/2354 242/1967/2354 1126/2401/2354 f 1389/603/2355 410/1215/2355 756/675/2355 f 1617/541/2356 1612/2366/2356 1618/2440/2356 f 1104/2362/2357 1123/424/2357 1103/2363/2357 f 1800/1125/2358 1786/2441/2358 1764/2329/2358 f 1213/2442/2359 908/2074/2359 1201/511/2359 f 558/635/2360 652/1140/2360 837/2427/2360 f 1168/2443/2361 1213/2442/2361 1167/2047/2361 f 1096/2311/2362 1103/2363/2362 1069/2381/2362 f 3214/2444/2363 3243/2445/2363 3228/2446/2363 f 1104/2362/2364 1124/2334/2364 1168/2443/2364 f 1118/1117/2365 976/2257/2365 1065/2227/2365 f 2104/592/2366 2119/2374/2366 20/707/2366 f 1910/2447/2367 1889/2448/2367 3288/2449/2367 f 1066/2450/2368 1148/429/2368 3481/1108/2368 f 1066/2450/2369 1126/2401/2369 1148/429/2369 f 1411/2451/2370 1183/1034/2370 1438/1036/2370 f 1095/4/2371 2100/1661/2371 1214/30/2371 f 976/2257/2372 1040/2153/2372 24/2452/2372 f 1855/113/2373 1960/884/2373 1935/886/2373 f 1103/2363/2374 1079/2453/2374 1068/2390/2374 f 1786/2322/2375 1798/912/2375 1567/911/2375 f 1066/2450/2376 1090/2439/2376 1126/2401/2376 f 2403/2454/2377 2909/2415/2377 2404/2434/2377 f 1129/2455/2378 2770/2225/2378 1140/2456/2378 f 2770/1701/2379 1185/2404/2379 1157/2259/2379 f 2907/2457/2380 2916/851/2380 2906/2458/2380 f 3496/1097/2381 3465/838/2381 3502/837/2381 f 2339/2433/2382 2328/2459/2382 2138/2460/2382 f 1156/452/2383 1168/2443/2383 1167/2047/2383 f 1923/2461/2384 1507/1196/2384 2896/2462/2384 f 1029/2275/2385 229/2463/2385 1116/2276/2385 f 1029/2275/2386 1036/2096/2386 229/2463/2386 f 1036/2096/2387 504/2098/2387 229/2463/2387 f 1169/2260/2388 1184/2405/2388 1168/2443/2388 f 1157/2259/2389 1184/2405/2389 1169/2260/2389 f 812/2464/2390 924/2001/2390 1175/1221/2390 f 136/378/2391 670/1062/2391 102/796/2391 f 2939/2465/2392 2964/527/2392 2974/529/2392 f 3382/2466/2393 3372/2414/2393 3342/165/2393 f 3382/2466/2394 3342/165/2394 3294/105/2394 f 1805/2467/2395 3510/1467/2395 3491/2468/2395 f 2770/1701/2396 1157/2259/2396 1140/2258/2396 f 3494/1305/2397 3459/1457/2397 3485/326/2397 f 1843/2469/2398 1853/2470/2398 1816/2471/2398 f 961/979/2399 969/2370/2399 957/1053/2399 f 3503/615/2400 1042/427/2400 3507/1858/2400 f 3482/1332/2401 3492/1003/2401 3424/1002/2401 f 3465/838/2402 3491/2468/2402 3455/839/2402 f 961/979/2403 957/1053/2403 2956/2472/2403 f 985/319/2404 226/832/2404 1064/983/2404 f 1202/2280/2405 992/2269/2405 908/2074/2405 f 1744/2473/2406 1734/2219/2406 1735/2218/2406 f 1202/2280/2407 908/2074/2407 1213/2442/2407 f 3045/2277/2408 3057/1411/2408 2998/2474/2408 f 1023/2475/2409 1033/2248/2409 2506/2476/2409 f 1023/2475/2410 1047/2246/2410 1033/2248/2410 f 962/1964/2411 971/977/2411 961/979/2411 f 1744/2477/2412 1772/1046/2412 1734/1048/2412 f 1756/2478/2413 1757/2328/2413 1764/2329/2413 f 1844/2371/2414 1845/178/2414 1612/2366/2414 f 1772/1046/2415 1801/2479/2415 1771/1089/2415 f 1801/2480/2416 1808/1147/2416 1771/2481/2416 f 1057/2482/2417 1069/2381/2417 1063/2483/2417 f 1129/2455/2418 1140/2456/2418 1139/2282/2418 f 2984/2484/2419 3025/2485/2419 2983/528/2419 f 1818/2303/2420 1817/177/2420 1808/1147/2420 f 3242/1937/2421 3280/107/2421 3241/309/2421 f 1032/2397/2422 2527/2399/2422 1007/2286/2422 f 1777/2307/2423 467/2231/2423 364/2308/2423 f 1103/2363/2424 1123/424/2424 1079/2453/2424 f 2371/2486/2425 1887/1891/2425 2902/2487/2425 f 2336/2488/2426 2190/2489/2426 2003/2490/2426 f 1106/2491/2427 1129/2455/2427 1097/2492/2427 f 1002/358/2428 1066/2450/2428 3481/1108/2428 f 1460/2035/2429 1289/2320/2429 1308/164/2429 f 1214/2337/2430 2100/2172/2430 1286/2338/2430 f 1071/2493/2431 1081/2494/2431 1059/2014/2431 f 1001/2373/2432 1000/2354/2432 990/2495/2432 f 1213/2442/2433 1201/511/2433 1167/2047/2433 f 1196/2391/2434 1202/2280/2434 1213/2442/2434 f 951/1965/2435 961/979/2435 2956/2472/2435 f 1817/177/2436 1818/2303/2436 1846/1200/2436 f 1770/1090/2437 1800/1125/2437 1764/2329/2437 f 2031/2185/2438 1968/2187/2438 2071/2266/2438 f 1069/2381/2439 1068/2390/2439 1063/2483/2439 f 1936/2496/2440 1864/2497/2440 1912/628/2440 f 2770/2225/2441 2830/2498/2441 1185/2499/2441 f 1066/2450/2442 1002/358/2442 1090/2439/2442 f 1090/2439/2443 1100/834/2443 242/1967/2443 f 1905/2500/2444 2069/321/2444 1188/1575/2444 f 1289/2320/2445 1414/2336/2445 1152/2501/2445 f 992/2269/2446 2137/2279/2446 1050/2287/2446 f 1203/2278/2447 1196/2391/2447 1184/2405/2447 f 228/5/2448 1214/30/2448 821/2395/2448 f 969/2502/2449 979/531/2449 2458/530/2449 f 1295/2503/2450 1260/184/2450 1231/183/2450 f 2268/2504/2451 2252/2505/2451 2213/2506/2451 f 963/2254/2452 958/2507/2452 2929/2508/2452 f 1009/1596/2453 1008/2323/2453 1000/2354/2453 f 2956/2472/2454 957/1053/2454 2967/1052/2454 f 969/1999/2455 2440/1881/2455 957/2509/2455 f 1077/1175/2456 1094/1170/2456 1086/1769/2456 f 908/2074/2457 1173/2270/2457 1143/512/2457 f 1123/424/2458 1104/2362/2458 1156/452/2458 f 1080/2510/2459 1096/1433/2459 1069/2511/2459 f 2402/2512/2460 2372/2253/2460 2910/2255/2460 f 3375/2513/2461 3385/2514/2461 3374/2436/2461 f 931/285/2462 1159/2291/2462 1277/100/2462 f 2085/339/2463 1288/2233/2463 1978/340/2463 f 1799/176/2464 1845/178/2464 1844/2371/2464 f 775/1316/2465 740/2106/2465 105/2029/2465 f 666/2515/2466 1163/280/2466 927/1776/2466 f 616/1784/2467 942/1765/2467 846/1816/2467 f 950/2183/2468 1011/2154/2468 1016/2163/2468 f 2506/2476/2469 1033/2248/2469 1020/2372/2469 f 1905/2500/2470 1925/2214/2470 1711/2216/2470 f 1087/2516/2471 1097/2492/2471 1081/2494/2471 f 972/2517/2472 980/2197/2472 962/1964/2472 f 576/1654/2473 3270/2518/2473 573/1778/2473 f 1653/776/2474 1811/1362/2474 664/210/2474 f 860/1617/2475 348/927/2475 361/728/2475 f 314/2519/2476 873/1507/2476 1030/1963/2476 f 2810/253/2477 2869/1415/2477 2809/254/2477 f 1001/2373/2478 1009/1596/2478 1000/2354/2478 f 1766/57/2479 1108/112/2479 1088/111/2479 f 1097/2492/2480 1129/2455/2480 1139/2282/2480 f 1183/1034/2481 1210/1652/2481 8/2050/2481 f 963/2254/2482 2929/2508/2482 2910/2255/2482 f 1163/2520/2483 986/2521/2483 927/1828/2483 f 1579/2522/2484 2066/2523/2484 2058/2158/2484 f 2477/2524/2485 2498/2525/2485 2478/2526/2485 f 2443/848/2486 2193/847/2486 2498/2525/2486 f 1071/2493/2487 1087/2516/2487 1081/2494/2487 f 2402/2512/2488 2410/2527/2488 2372/2253/2488 f 972/2517/2489 962/1964/2489 958/2528/2489 f 1132/301/2490 3470/281/2490 870/2400/2490 f 725/1534/2491 730/2109/2491 724/1370/2491 f 314/2519/2492 1030/1963/2492 582/1505/2492 f 2869/1415/2493 2868/2529/2493 2841/1416/2493 f 924/2001/2494 812/2464/2494 1117/2045/2494 f 963/2530/2495 972/2517/2495 958/2528/2495 f 3492/1003/2496 3483/1780/2496 3432/2531/2496 f 1119/1814/2497 1121/2532/2497 846/1816/2497 f 1034/2533/2498 616/1784/2498 846/1816/2498 f 616/1784/2499 1034/2533/2499 1172/1690/2499 f 2285/2534/2500 2316/2535/2500 2254/2536/2500 f 1022/2364/2501 1046/2247/2501 1032/2397/2501 f 1196/2391/2502 1213/2442/2502 1168/2443/2502 f 1184/2405/2503 1196/2391/2503 1168/2443/2503 f 1104/2362/2504 1168/2443/2504 1156/452/2504 f 1046/2247/2505 1070/2341/2505 1032/2397/2505 f 2490/2537/2506 1010/2198/2506 980/2197/2506 f 1198/1938/2507 491/1504/2507 876/1820/2507 f 3440/2538/2508 3433/349/2508 3459/665/2508 f 7/1704/2509 932/1893/2509 1132/301/2509 f 996/897/2510 1005/1924/2510 987/1092/2510 f 2403/2454/2511 2410/2527/2511 2402/2512/2511 f 1117/750/2512 812/2103/2512 3467/1591/2512 f 2490/2539/2513 2506/1595/2513 1010/1597/2513 f 1121/2532/2514 1034/2533/2514 846/1816/2514 f 1068/2390/2515 2329/2540/2515 2599/2541/2515 f 2697/2542/2516 977/2543/2516 3462/2345/2516 f 1070/2341/2517 1080/2310/2517 1069/2381/2517 f 3063/898/2518 954/577/2518 968/632/2518 f 491/1504/2519 351/2544/2519 582/1505/2519 f 351/2544/2520 314/2519/2520 582/1505/2520 f 2346/1274/2521 1413/1226/2521 1362/1261/2521 f 438/489/2522 1191/1526/2522 1133/723/2522 f 3463/300/2523 3437/299/2523 3504/2545/2523 f 3246/335/2524 3216/337/2524 3192/2546/2524 f 3481/1108/2525 3458/1446/2525 1002/358/2525 f 1165/2547/2526 1121/2532/2526 1119/1814/2526 f 1079/2453/2527 1123/424/2527 1115/426/2527 f 1764/2329/2528 1548/2548/2528 1756/2478/2528 f 1002/358/2529 1153/360/2529 1090/2439/2529 f 3194/2549/2530 78/811/2530 3170/1173/2530 f 1058/2382/2531 1069/2381/2531 1057/2482/2531 f 990/2495/2532 1000/2354/2532 970/2379/2532 f 1073/2256/2533 976/2257/2533 1118/1117/2533 f 453/1948/2534 3438/2263/2534 1134/1802/2534 f 1183/1034/2535 1198/1938/2535 831/1831/2535 f 814/343/2536 873/1507/2536 314/2519/2536 f 1173/2270/2537 558/635/2537 1143/512/2537 f 1165/2547/2538 1119/1814/2538 1298/1895/2538 f 1034/2533/2539 1075/2550/2539 1172/1690/2539 f 1045/405/2540 1061/517/2540 1013/406/2540 f 1047/2246/2541 1059/703/2541 1046/2247/2541 f 1084/1525/2542 1014/914/2542 1161/916/2542 f 2046/2265/2543 2045/2155/2543 2017/2157/2543 f 8/2050/2544 491/1504/2544 1198/1938/2544 f 558/635/2545 837/2427/2545 2393/636/2545 f 3477/788/2546 3433/349/2546 3460/1116/2546 f 594/1044/2547 1162/140/2547 1053/2551/2547 f 1034/2533/2548 1121/2532/2548 1075/2550/2548 f 2178/2552/2549 2164/2553/2549 2174/2554/2549 f 974/1837/2550 573/1545/2550 953/1544/2550 f 651/1401/2551 1017/1942/2551 1043/1904/2551 f 1076/303/2552 700/302/2552 1085/1984/2552 f 981/2555/2553 980/2197/2553 972/2517/2553 f 2901/2556/2554 2903/2557/2554 2370/2558/2554 f 2673/2319/2555 2894/680/2555 3428/759/2555 f 703/438/2556 133/439/2556 143/1028/2556 f 8/2050/2557 1198/1938/2557 1183/1034/2557 f 1053/2551/2558 351/2544/2558 491/1504/2558 f 1153/360/2559 1100/834/2559 1090/2439/2559 f 995/2559/2560 1017/1942/2560 651/1401/2560 f 994/1979/2561 995/2559/2561 651/1401/2561 f 1054/1768/2562 1085/1984/2562 700/302/2562 f 2991/1880/2563 2990/2560/2563 2440/1881/2563 f 981/2555/2564 2490/2537/2564 980/2197/2564 f 1149/1043/2565 491/1504/2565 8/2050/2565 f 315/341/2566 314/2519/2566 351/2544/2566 f 377/571/2567 315/341/2567 351/2544/2567 f 315/341/2568 814/343/2568 314/2519/2568 f 2515/2040/2569 2231/2299/2569 1813/2561/2569 f 963/2530/2570 981/2555/2570 972/2517/2570 f 594/1044/2571 1053/2551/2571 1149/1043/2571 f 1133/723/2572 1165/2547/2572 1298/1895/2572 f 1084/1525/2573 1121/2532/2573 1165/2547/2573 f 1121/2532/2574 1084/1525/2574 1075/2550/2574 f 1043/1904/2575 1054/1768/2575 700/302/2575 f 1153/360/2576 3495/359/2576 3447/982/2576 f 1149/1043/2577 1053/2551/2577 491/1504/2577 f 1053/2551/2578 377/571/2578 351/2544/2578 f 1162/140/2579 377/571/2579 1053/2551/2579 f 987/1092/2580 1005/1924/2580 995/2562/2580 f 1044/909/2581 1077/1175/2581 1086/1769/2581 f 823/142/2582 315/341/2582 377/571/2582 f 838/1764/2583 846/1816/2583 942/1765/2583 f 959/576/2584 978/450/2584 998/449/2584 f 1133/723/2585 1191/1526/2585 1165/2547/2585 f 1191/1526/2586 1084/1525/2586 1165/2547/2586 f 1161/916/2587 1263/154/2587 1075/2550/2587 f 120/494/2588 427/696/2588 1360/2165/2588 f 987/1092/2589 995/2562/2589 994/2563/2589 f 3149/2564/2590 987/1092/2590 994/2563/2590 f 1017/1942/2591 1054/1768/2591 1043/1904/2591 f 1054/1768/2592 1086/1769/2592 1085/1984/2592 f 1113/139/2593 1399/138/2593 1085/1984/2593 f 594/1044/2594 316/356/2594 1162/140/2594 f 2043/563/2595 2057/219/2595 2016/88/2595 f 353/1051/2596 251/48/2596 1237/543/2596 f 1390/2565/2597 1373/15/2597 1402/14/2597 f 2898/2211/2598 2897/2566/2598 2882/2212/2598 f 35/1519/2599 1923/2461/2599 967/1517/2599 f 1086/1769/2600 1113/139/2600 1085/1984/2600 f 3348/2147/2601 571/2087/2601 3377/2567/2601 f 1513/2568/2602 1500/2569/2602 1733/2570/2602 f 1093/277/2603 1091/513/2603 1039/305/2603 f 1084/1525/2604 1161/916/2604 1075/2550/2604 f 995/2559/2605 1005/1777/2605 1017/1942/2605 f 1380/151/2606 1442/2571/2606 396/152/2606 f 1337/2572/2607 1383/1256/2607 1235/2573/2607 f 1383/1256/2608 1247/2574/2608 1235/2573/2608 f 1390/2565/2609 1417/1165/2609 1373/15/2609 f 504/2098/2610 191/86/2610 1240/2575/2610 f 1258/257/2611 1242/766/2611 1230/258/2611 f 1219/2576/2612 1224/833/2612 1222/1084/2612 f 1296/2577/2613 290/496/2613 137/495/2613 f 1352/75/2614 31/2578/2614 1248/2579/2614 f 1258/257/2615 1260/184/2615 1259/2580/2615 f 1224/833/2616 1252/1096/2616 1100/834/2616 f 1287/27/2617 9/16/2617 1227/28/2617 f 3439/2120/2618 3236/1114/2618 3460/1116/2618 f 1489/564/2619 2043/563/2619 2016/88/2619 f 1382/2581/2620 1371/1959/2620 1434/34/2620 f 1975/110/2621 1986/1176/2621 1974/108/2621 f 1309/2582/2622 1871/2583/2622 1724/408/2622 f 3453/2301/2623 3483/1780/2623 3492/1003/2623 f 1094/1170/2624 1317/2056/2624 1113/139/2624 f 574/1632/2625 919/1666/2625 121/1163/2625 f 1410/2584/2626 1454/2585/2626 1399/2586/2626 f 3442/2587/2627 1026/320/2627 708/2360/2627 f 103/379/2628 93/804/2628 3218/548/2628 f 1266/2588/2629 1283/1917/2629 728/2064/2629 f 48/2589/2630 1493/2590/2630 1527/2591/2630 f 1113/2592/2631 1317/2593/2631 1374/2594/2631 f 1374/2594/2632 1410/2584/2632 1399/2586/2632 f 1436/2595/2633 1454/2585/2633 1410/2584/2633 f 1317/2593/2634 1342/2596/2634 1374/2594/2634 f 1599/939/2635 1613/2597/2635 1638/2598/2635 f 1318/2599/2636 1342/2596/2636 1317/2593/2636 f 1374/2594/2637 1342/2596/2637 1410/2584/2637 f 1410/2584/2638 1455/2600/2638 1436/2595/2638 f 472/2601/2639 505/2602/2639 283/2603/2639 f 11/2604/2640 472/2601/2640 283/2603/2640 f 1318/2599/2641 1317/2593/2641 1114/2605/2641 f 1342/2596/2642 1455/2600/2642 1410/2584/2642 f 1436/2595/2643 1455/2600/2643 1249/180/2643 f 1340/2606/2644 1341/2607/2644 329/606/2644 f 1443/2608/2645 1257/2609/2645 1353/344/2645 f 1385/2610/2646 1342/2596/2646 1318/2599/2646 f 1342/2596/2647 1385/2610/2647 1455/2600/2647 f 1343/2611/2648 1385/2610/2648 1318/2599/2648 f 1455/2600/2649 1464/2612/2649 1249/180/2649 f 1464/2612/2650 437/2613/2650 44/181/2650 f 1249/180/2651 1464/2612/2651 44/181/2651 f 1249/2614/2652 197/812/2652 724/1370/2652 f 1439/273/2653 1402/14/2653 396/152/2653 f 166/1295/2654 1681/2615/2654 1643/1294/2654 f 1400/2616/2655 1385/2610/2655 1343/2611/2655 f 1385/2610/2656 1400/2616/2656 1455/2600/2656 f 1437/2617/2657 1464/2612/2657 1455/2600/2657 f 220/2618/2658 763/1493/2658 437/2619/2658 f 1257/2609/2659 1127/490/2659 1353/344/2659 f 1108/112/2660 1377/175/2660 1855/113/2660 f 1400/2616/2661 1437/2617/2661 1455/2600/2661 f 220/2620/2662 1464/2612/2662 1437/2617/2662 f 220/2621/2663 437/721/2663 1464/2622/2663 f 414/50/2664 325/49/2664 42/202/2664 f 1239/2312/2665 1296/2577/2665 1417/1165/2665 f 1810/1228/2666 1809/2623/2666 1787/1229/2666 f 1344/2624/2667 1400/2616/2667 1343/2611/2667 f 1400/2616/2668 1422/2625/2668 1437/2617/2668 f 1438/1036/2669 220/2618/2669 1437/2626/2669 f 1422/2627/2670 1438/1036/2670 1437/2626/2670 f 1438/1036/2671 1465/1035/2671 220/2618/2671 f 345/94/2672 1458/291/2672 2332/990/2672 f 1593/2628/2673 1673/2629/2673 1424/228/2673 f 1424/228/2674 1331/77/2674 1332/76/2674 f 1417/1165/2675 1296/2577/2675 137/495/2675 f 1773/2169/2676 1765/2630/2676 1744/2477/2676 f 1188/1575/2677 1879/1574/2677 2018/2631/2677 f 1400/2616/2678 1344/2624/2678 1422/2625/2678 f 416/2632/2679 439/1377/2679 423/1376/2679 f 1254/78/2680 1408/560/2680 1358/1230/2680 f 504/2098/2681 1240/2575/2681 2206/2633/2681 f 1736/2634/2682 1773/2635/2682 1744/2473/2682 f 1178/1662/2683 2100/1661/2683 1095/4/2683 f 1343/2611/2684 2143/2636/2684 1344/2624/2684 f 2197/2637/2685 1411/2638/2685 1344/2624/2685 f 1344/2639/2686 1411/2451/2686 1422/2627/2686 f 1422/2627/2687 1411/2451/2687 1438/1036/2687 f 1391/2640/2688 2277/881/2688 1246/2137/2688 f 1435/147/2689 365/145/2689 1172/1690/2689 f 1261/29/2690 1227/28/2690 2180/2641/2690 f 3475/664/2691 3440/2538/2691 3459/665/2691 f 1178/1662/2692 1095/4/2692 1170/2162/2692 f 2197/1925/2693 1176/491/2693 1411/2451/2693 f 2397/2642/2694 569/2643/2694 190/454/2694 f 788/1826/2695 1357/345/2695 835/1813/2695 f 1395/2644/2696 1244/2645/2696 24/2452/2696 f 2197/1925/2697 1155/492/2697 1176/491/2697 f 1277/100/2698 1159/2291/2698 1141/101/2698 f 1244/2645/2699 298/84/2699 24/2452/2699 f 3238/2646/2700 3352/2347/2700 1269/2346/2700 f 1244/2647/2701 205/2648/2701 298/2649/2701 f 531/385/2702 542/413/2702 866/1472/2702 f 1420/2650/2703 1276/2651/2703 1394/559/2703 f 1383/1256/2704 1373/15/2704 273/1166/2704 f 173/73/2705 1352/75/2705 1451/90/2705 f 229/2463/2706 504/2098/2706 163/2652/2706 f 783/141/2707 1359/2166/2707 823/142/2707 f 1330/1224/2708 1351/2653/2708 492/1145/2708 f 1304/2654/2709 1376/2655/2709 1356/74/2709 f 1232/182/2710 1230/258/2710 1225/44/2710 f 1222/1084/2711 2384/2656/2711 1219/2576/2711 f 814/343/2712 409/342/2712 873/1507/2712 f 1365/2657/2713 1404/561/2713 1408/560/2713 f 3510/1467/2714 3455/839/2714 3491/2468/2714 f 505/2602/2715 282/217/2715 445/216/2715 f 1683/2658/2716 1647/2659/2716 1728/2660/2716 f 2396/2661/2717 1220/2662/2717 43/2663/2717 f 1275/157/2718 1292/51/2718 1242/766/2718 f 43/2663/2719 1304/2654/2719 569/2643/2719 f 182/260/2720 1041/420/2720 1147/261/2720 f 1376/2655/2721 317/2664/2721 31/2578/2721 f 1675/2665/2722 1473/2666/2722 2735/263/2722 f 1734/2667/2723 1733/2668/2723 1500/2669/2723 f 2693/2670/2724 2719/1905/2724 2692/2671/2724 f 1308/164/2725 1204/163/2725 1324/2034/2725 f 1220/2662/2726 1304/2654/2726 43/2663/2726 f 43/2663/2727 569/2643/2727 34/2672/2727 f 113/2673/2728 1394/559/2728 1268/2674/2728 f 1119/1814/2729 835/1813/2729 1357/345/2729 f 1100/834/2730 1267/191/2730 242/1967/2730 f 2396/2661/2731 34/2672/2731 1130/2675/2731 f 1293/2676/2732 1683/2658/2732 1882/2677/2732 f 1253/1223/2733 1397/2678/2733 1351/2653/2733 f 1305/159/2734 1382/2581/2734 1338/52/2734 f 1376/2655/2735 1443/2679/2735 1425/2680/2735 f 1443/2679/2736 1301/2681/2736 1425/2680/2736 f 1233/2682/2737 1271/2683/2737 428/2684/2737 f 1271/2683/2738 1443/2679/2738 428/2684/2738 f 1287/27/2739 1403/39/2739 9/16/2739 f 1141/101/2740 1325/199/2740 561/2361/2740 f 106/545/2741 1236/2685/2741 1320/2686/2741 f 1397/2678/2742 1466/1146/2742 1351/2653/2742 f 2057/219/2743 2083/820/2743 2042/89/2743 f 1226/2687/2744 1232/182/2744 1225/44/2744 f 1408/560/2745 1387/2688/2745 1315/2689/2745 f 1301/2690/2746 1282/2691/2746 1425/2692/2746 f 317/2664/2747 1376/2655/2747 1425/2680/2747 f 977/867/2748 2174/866/2748 965/1978/2748 f 205/2648/2749 1340/2606/2749 328/605/2749 f 1276/2651/2750 1397/2678/2750 1253/1223/2750 f 1178/1662/2751 1170/2162/2751 1138/42/2751 f 1340/2606/2752 1692/2693/2752 1341/2607/2752 f 10/130/2753 77/262/2753 1423/149/2753 f 3504/2545/2754 3457/1331/2754 3454/1301/2754 f 1284/1909/2755 1402/14/2755 1439/273/2755 f 1284/1909/2756 1390/2565/2756 1402/14/2756 f 1443/2608/2757 1353/344/2757 1366/2694/2757 f 1351/2653/2758 1466/1146/2758 492/1145/2758 f 504/2098/2759 2206/2633/2759 163/2652/2759 f 2087/822/2760 2061/2207/2760 57/1212/2760 f 1239/2312/2761 1417/1165/2761 1390/2565/2761 f 1284/1909/2762 1239/2312/2762 1390/2565/2762 f 1225/44/2763 1224/2695/2763 1219/45/2763 f 1241/33/2764 312/32/2764 1593/205/2764 f 1296/2577/2765 2061/2696/2765 290/496/2765 f 283/2603/2766 505/2602/2766 445/216/2766 f 1233/2697/2767 1257/2609/2767 1271/2698/2767 f 1325/199/2768 1309/2582/2768 1995/2188/2768 f 1366/2694/2769 1353/344/2769 1238/346/2769 f 1245/1257/2770 137/495/2770 472/2601/2770 f 1247/2574/2771 11/2604/2771 1279/2699/2771 f 1418/63/2772 1407/2700/2772 1393/2244/2772 f 1127/490/2773 1133/723/2773 1353/344/2773 f 2341/43/2774 1226/2687/2774 1225/44/2774 f 1309/2582/2775 1724/408/2775 1995/2188/2775 f 1401/2701/2776 1425/2680/2776 1312/2702/2776 f 262/666/2777 506/544/2777 1237/543/2777 f 1547/2703/2778 12/223/2778 13/35/2778 f 1316/158/2779 1355/1960/2779 1305/159/2779 f 555/1205/2780 363/1233/2780 134/203/2780 f 1316/158/2781 1633/2127/2781 1355/1960/2781 f 340/2704/2782 1407/2700/2782 1418/63/2782 f 1313/697/2783 440/2705/2783 424/579/2783 f 1356/74/2784 1376/2655/2784 31/2578/2784 f 964/581/2785 3487/1584/2785 1208/332/2785 f 1312/2702/2786 943/2706/2786 1328/907/2786 f 1549/668/2787 1789/2707/2787 1540/26/2787 f 1395/1149/2788 1453/1143/2788 1244/2647/2788 f 1431/2708/2789 1365/2657/2789 1254/78/2789 f 1268/2674/2790 1276/2651/2790 1253/1223/2790 f 1246/2137/2791 1127/490/2791 1257/2609/2791 f 2837/2709/2792 2073/2710/2792 2880/2711/2792 f 3459/665/2793 3433/349/2793 3443/351/2793 f 1335/607/2794 329/606/2794 1287/27/2794 f 326/630/2795 171/414/2795 1300/443/2795 f 1337/2572/2796 1373/15/2796 1383/1256/2796 f 1331/77/2797 1431/2708/2797 1254/78/2797 f 428/2684/2798 1443/2679/2798 1376/2655/2798 f 1209/2097/2799 191/86/2799 504/2098/2799 f 1365/2657/2800 1408/560/2800 1254/78/2800 f 1304/2654/2801 1356/74/2801 569/2643/2801 f 34/2672/2802 569/2643/2802 2397/2642/2802 f 43/2663/2803 34/2672/2803 2396/2661/2803 f 2173/2712/2804 1874/2713/2804 2780/2714/2804 f 1337/2572/2805 1235/2573/2805 1339/2715/2805 f 1404/561/2806 1339/2715/2806 1420/2650/2806 f 457/1178/2807 1340/2606/2807 205/2648/2807 f 1420/2650/2808 1339/2715/2808 1276/2651/2808 f 1433/62/2809 2090/2173/2809 1463/637/2809 f 107/2716/2810 298/84/2810 1209/2097/2810 f 1387/2688/2811 1394/559/2811 113/2673/2811 f 1338/52/2812 1382/2581/2812 1381/60/2812 f 1440/2717/2813 1358/153/2813 1452/155/2813 f 1210/1652/2814 1411/2451/2814 1176/491/2814 f 12/223/2815 1560/2718/2815 1692/2693/2815 f 191/86/2816 1335/2719/2816 1240/2575/2816 f 1977/2720/2817 1976/109/2817 1958/232/2817 f 1304/2654/2818 428/2684/2818 1376/2655/2818 f 1352/75/2819 1356/74/2819 31/2578/2819 f 754/2721/2820 784/1930/2820 272/2722/2820 f 1303/1179/2821 767/2020/2821 768/1180/2821 f 2170/2723/2822 30/2724/2822 1449/2725/2822 f 31/2578/2823 317/2664/2823 1228/519/2823 f 1401/2701/2824 502/2274/2824 1314/520/2824 f 1356/74/2825 173/73/2825 569/2643/2825 f 1879/1574/2826 2104/592/2826 1137/2195/2826 f 2083/820/2827 2066/2523/2827 2117/306/2827 f 1137/2195/2828 1378/594/2828 1981/58/2828 f 873/1507/2829 409/342/2829 926/1508/2829 f 1463/637/2830 251/48/2830 353/1051/2830 f 1401/2701/2831 1312/2702/2831 1328/907/2831 f 3489/753/2832 1116/2276/2832 3488/1712/2832 f 317/2664/2833 1401/2701/2833 1228/519/2833 f 317/2664/2834 1425/2680/2834 1401/2701/2834 f 2677/2326/2835 2817/1426/2835 2482/2327/2835 f 728/2064/2836 633/2052/2836 1266/2588/2836 f 3/497/2837 1329/2726/2837 505/2602/2837 f 1225/44/2838 1230/258/2838 1224/2695/2838 f 1348/115/2839 1289/2320/2839 1270/2727/2839 f 2948/2728/2840 2986/2729/2840 2965/2730/2840 f 9/16/2841 1373/15/2841 1256/236/2841 f 1713/2731/2842 2061/2207/2842 1571/2205/2842 f 2344/2732/2843 1220/2662/2843 2396/2661/2843 f 1250/1944/2844 2164/1943/2844 1266/2733/2844 f 1340/2606/2845 457/1178/2845 12/223/2845 f 2767/226/2846 3487/2734/2846 964/134/2846 f 1279/2699/2847 11/2604/2847 283/2603/2847 f 3092/2735/2848 3054/1787/2848 954/577/2848 f 1366/2694/2849 1282/2736/2849 1301/2737/2849 f 1425/2680/2850 1282/2738/2850 1312/2702/2850 f 444/2739/2851 213/975/2851 267/989/2851 f 315/341/2852 1444/1844/2852 409/342/2852 f 503/2740/2853 926/1508/2853 409/342/2853 f 1223/2741/2854 1233/2682/2854 2344/2732/2854 f 506/544/2855 1236/2685/2855 106/545/2855 f 1253/1223/2856 1351/2653/2856 1330/1224/2856 f 1235/2573/2857 1247/2574/2857 1279/2699/2857 f 1424/228/2858 29/2742/2858 1331/77/2858 f 1549/668/2859 1802/1363/2859 1789/2707/2859 f 1228/519/2860 1314/520/2860 1310/118/2860 f 143/1028/2861 690/1254/2861 710/1391/2861 f 1401/2701/2862 1328/907/2862 502/2274/2862 f 634/1155/2863 620/1234/2863 1407/2743/2863 f 3484/2744/2864 3446/22/2864 3474/422/2864 f 1240/1127/2865 1335/607/2865 1261/29/2865 f 1244/2647/2866 330/1144/2866 205/2648/2866 f 783/141/2867 120/494/2867 1359/2166/2867 f 2293/2745/2868 1391/2746/2868 1223/2741/2868 f 1383/1256/2869 1245/1257/2869 1247/2574/2869 f 1869/59/2870 1154/364/2870 1893/2093/2870 f 1264/2747/2871 29/2742/2871 1424/228/2871 f 29/2742/2872 1431/2708/2872 1331/77/2872 f 1404/561/2873 1337/2572/2873 1339/2715/2873 f 1340/2606/2874 12/223/2874 1692/2693/2874 f 1337/2572/2875 1404/561/2875 1365/2657/2875 f 1882/2677/2876 1633/1105/2876 1293/2676/2876 f 1651/1104/2877 1937/1103/2877 2106/2748/2877 f 763/1493/2878 220/2618/2878 1465/1035/2878 f 1444/1844/2879 1468/2749/2879 409/342/2879 f 409/342/2880 1468/2749/2880 503/2740/2880 f 1284/1909/2881 1968/2750/2881 1239/2312/2881 f 1968/2750/2882 1311/1368/2882 1239/2312/2882 f 1256/236/2883 1337/2572/2883 1431/2708/2883 f 338/2751/2884 926/1508/2884 503/2740/2884 f 338/2751/2885 671/2038/2885 926/1508/2885 f 1545/1250/2886 1294/1252/2886 1251/1364/2886 f 1366/2694/2887 1238/346/2887 1297/1007/2887 f 1282/2736/2888 1366/2694/2888 1297/1007/2888 f 2174/866/2889 1250/2752/2889 965/1978/2889 f 1391/2640/2890 1246/2137/2890 1257/2609/2890 f 1337/2572/2891 1365/2657/2891 1431/2708/2891 f 1258/257/2892 1275/157/2892 1242/766/2892 f 1373/15/2893 1337/2572/2893 1256/236/2893 f 1394/559/2894 1276/2651/2894 1268/2674/2894 f 1239/2312/2895 57/1367/2895 1296/2577/2895 f 1305/159/2896 1355/1960/2896 1382/2581/2896 f 1358/1230/2897 1408/560/2897 1315/2689/2897 f 1844/2371/2898 1617/541/2898 1605/540/2898 f 2117/306/2899 1204/163/2899 737/114/2899 f 472/2601/2900 137/495/2900 3/497/2900 f 29/2742/2901 30/2724/2901 1431/2708/2901 f 1305/159/2902 1292/51/2902 1275/157/2902 f 410/1215/2903 144/676/2903 756/675/2903 f 568/2753/2904 671/2038/2904 338/2751/2904 f 1282/2738/2905 1297/2754/2905 1312/2702/2905 f 1297/1007/2906 943/1006/2906 1312/2755/2906 f 1789/2707/2907 1788/1227/2907 1773/2169/2907 f 2397/2642/2908 190/454/2908 2398/2756/2908 f 1418/63/2909 1462/638/2909 340/2704/2909 f 1065/2227/2910 976/2257/2910 107/2716/2910 f 30/2724/2911 1256/236/2911 1431/2708/2911 f 1449/2725/2912 30/2724/2912 29/2742/2912 f 1276/2651/2913 1279/2699/2913 1397/2678/2913 f 1440/227/2914 1332/76/2914 1358/1230/2914 f 2501/2757/2915 2524/2344/2915 3441/870/2915 f 1326/2758/2916 1277/100/2916 47/99/2916 f 568/2080/2917 930/1529/2917 671/1528/2917 f 1360/2165/2918 1445/2759/2918 1359/2166/2918 f 1444/1844/2919 1445/2759/2919 1468/2749/2919 f 1468/2749/2920 96/2760/2920 503/2740/2920 f 1443/2608/2921 1366/2694/2921 1301/2737/2921 f 299/256/2922 1248/2579/2922 1228/519/2922 f 1451/90/2923 1352/75/2923 1248/2579/2923 f 127/883/2924 1607/836/2924 94/835/2924 f 1259/2580/2925 1316/158/2925 1275/157/2925 f 1733/1047/2926 1757/2328/2926 1513/2761/2926 f 1258/257/2927 1259/2580/2927 1275/157/2927 f 2810/253/2928 2775/255/2928 1969/1202/2928 f 1359/2166/2929 1445/2759/2929 1444/1844/2929 f 503/2740/2930 96/2760/2930 338/2751/2930 f 569/2643/2931 173/73/2931 190/454/2931 f 1230/1167/2932 1242/2133/2932 1252/1096/2932 f 1348/115/2933 1270/2727/2933 2116/2267/2933 f 283/2603/2934 445/216/2934 1466/1146/2934 f 1112/2152/2935 1370/1246/2935 1395/2644/2935 f 1828/2352/2936 1360/2165/2936 427/696/2936 f 1445/2759/2937 96/2760/2937 1468/2749/2937 f 1382/2581/2938 1434/34/2938 1419/83/2938 f 1233/2682/2939 428/2684/2939 1304/2654/2939 f 1292/51/2940 1305/159/2940 1338/52/2940 f 502/2274/2941 213/521/2941 1314/520/2941 f 1339/2715/2942 1235/2573/2942 1276/2651/2942 f 330/1144/2943 1244/2647/2943 1453/1143/2943 f 250/2762/2944 568/2763/2944 338/2764/2944 f 250/2762/2945 665/2765/2945 568/2763/2945 f 3469/782/2946 2007/2766/2946 3456/400/2946 f 1233/2682/2947 1304/2654/2947 1220/2662/2947 f 1245/1257/2948 273/1166/2948 137/495/2948 f 1271/2683/2949 1257/2767/2949 1443/2679/2949 f 1295/2503/2950 1647/2768/2950 1260/184/2950 f 330/1144/2951 457/1178/2951 205/2648/2951 f 1360/2165/2952 1446/2769/2952 1445/2759/2952 f 1445/2759/2953 1446/2769/2953 96/2760/2953 f 1446/2769/2954 1469/2770/2954 96/2760/2954 f 96/2771/2955 185/2772/2955 338/2764/2955 f 1854/542/2956 1596/2773/2956 1605/540/2956 f 1316/158/2957 1293/2774/2957 1633/2127/2957 f 1268/2674/2958 1253/1223/2958 617/1225/2958 f 1279/2699/2959 283/2603/2959 1397/2678/2959 f 1276/2651/2960 1235/2573/2960 1279/2699/2960 f 3181/2775/2961 614/2776/2961 613/2777/2961 f 1322/2351/2962 1360/2165/2962 1828/2352/2962 f 1360/2165/2963 1322/2351/2963 1446/2769/2963 f 250/2762/2964 338/2764/2964 185/2772/2964 f 298/84/2965 191/86/2965 1209/2097/2965 f 617/1698/2966 121/1163/2966 919/1666/2966 f 3479/312/2967 1697/311/2967 3486/1075/2967 f 1469/2778/2968 185/2772/2968 96/2771/2968 f 1432/2779/2969 665/2765/2969 250/2762/2969 f 328/605/2970 1335/607/2970 191/2780/2970 f 1233/2682/2971 1220/2662/2971 2344/2732/2971 f 1248/2579/2972 31/2578/2972 1228/519/2972 f 121/1163/2973 617/1698/2973 1330/487/2973 f 1226/2687/2974 2341/43/2974 1099/2781/2974 f 190/454/2975 2361/608/2975 2398/2756/2975 f 1665/2782/2976 1668/1262/2976 1544/1216/2976 f 1315/2689/2977 1387/2688/2977 1435/2783/2977 f 392/2784/2978 1302/1339/2978 1667/2785/2978 f 1466/1146/2979 445/216/2979 1685/218/2979 f 1065/2227/2980 107/2716/2980 1209/2097/2980 f 1223/2741/2981 1391/2746/2981 1233/2682/2981 f 1353/344/2982 1298/1895/2982 1357/345/2982 f 993/2786/2983 586/1676/2983 1993/1966/2983 f 1387/2688/2984 1408/560/2984 1394/559/2984 f 251/48/2985 262/666/2985 1237/543/2985 f 25/2787/2986 754/2788/2986 1462/638/2986 f 1245/1257/2987 472/2601/2987 11/2604/2987 f 1435/2783/2988 1387/2688/2988 1262/2789/2988 f 1387/2688/2989 113/2673/2989 1262/2789/2989 f 1283/1917/2990 768/1180/2990 728/2064/2990 f 2501/2757/2991 3441/870/2991 3434/869/2991 f 1381/60/2992 1382/2581/2992 1419/83/2992 f 1391/2640/2993 2293/2790/2993 2277/881/2993 f 1717/2791/2994 1661/1071/2994 219/2792/2994 f 748/1461/2995 376/330/2995 407/315/2995 f 1268/2674/2996 617/1225/2996 113/2673/2996 f 1112/2152/2997 1217/193/2997 1370/1246/2997 f 1379/588/2998 982/259/2998 1131/2232/2998 f 1322/2793/2999 1426/2794/2999 1446/2795/2999 f 1446/2795/3000 1426/2794/3000 1469/2778/3000 f 185/2772/3001 395/2796/3001 250/2762/3001 f 395/2796/3002 1432/2779/3002 250/2762/3002 f 1392/2797/3003 604/2798/3003 1432/2779/3003 f 1449/2725/3004 29/2742/3004 1264/2747/3004 f 3012/2799/3005 3050/2800/3005 3036/2801/3005 f 1354/625/3006 1412/2802/3006 1313/697/3006 f 171/414/3007 490/416/3007 1300/443/3007 f 2029/2803/3008 2030/87/3008 2040/1017/3008 f 3492/1003/3009 3431/2804/3009 3426/1004/3009 f 1426/2794/3010 1447/2805/3010 1469/2778/3010 f 1210/1652/3011 1183/1034/3011 1411/2451/3011 f 937/1859/3012 936/1840/3012 55/2806/3012 f 1384/2807/3013 1354/625/3013 477/624/3013 f 1354/625/3014 1384/2807/3014 1412/2802/3014 f 472/2601/3015 3/497/3015 505/2602/3015 f 3472/1445/3016 3449/1266/3016 3458/1446/3016 f 2004/1177/3017 2030/87/3017 2029/2803/3017 f 1322/2793/3018 2076/2808/3018 1426/2794/3018 f 1432/2779/3019 1396/2809/3019 1392/2797/3019 f 1392/2797/3020 6/2810/3020 1389/2811/3020 f 1313/697/3021 1412/2802/3021 439/1377/3021 f 3336/314/3022 443/295/3022 1669/862/3022 f 1397/2678/3023 283/2603/3023 1466/1146/3023 f 467/2231/3024 1777/2307/3024 1379/588/3024 f 1469/2778/3025 1447/2805/3025 185/2772/3025 f 395/2796/3026 1396/2809/3026 1432/2779/3026 f 1396/2809/3027 6/2810/3027 1392/2797/3027 f 604/2798/3028 665/2765/3028 1432/2779/3028 f 416/2632/3029 440/2705/3029 439/1377/3029 f 2754/2812/3030 3453/2301/3030 3482/1332/3030 f 1784/2315/3031 1536/2813/3031 1555/2316/3031 f 530/2814/3032 1396/2809/3032 395/2796/3032 f 1451/90/3033 1248/2579/3033 299/256/3033 f 1394/559/3034 1404/561/3034 1420/2650/3034 f 1384/2807/3035 774/2815/3035 1412/2802/3035 f 3473/872/3036 3461/270/3036 3472/269/3036 f 1341/2607/3037 1380/151/3037 329/606/3037 f 328/605/3038 1340/2606/3038 329/606/3038 f 1418/63/3039 1433/62/3039 1462/638/3039 f 2076/2808/3040 1361/2816/3040 1426/2794/3040 f 1426/2794/3041 1361/2816/3041 1447/2805/3041 f 1447/2805/3042 1470/2817/3042 185/2772/3042 f 529/2818/3043 395/2796/3043 185/2772/3043 f 529/2818/3044 530/2814/3044 395/2796/3044 f 476/12/3045 190/454/3045 1451/90/3045 f 272/1094/3046 784/2819/3046 28/1154/3046 f 1412/2802/3047 1251/1364/3047 439/1377/3047 f 10/130/3048 1423/149/3048 1346/148/3048 f 1260/184/3049 1683/2820/3049 1259/2580/3049 f 1809/2304/3050 1810/2821/3050 1831/937/3050 f 1854/542/3051 1853/2470/3051 1843/2469/3051 f 205/2648/3052 328/605/3052 298/2649/3052 f 25/1033/3053 560/1032/3053 753/1766/3053 f 2103/116/3054 1348/115/3054 2116/2267/3054 f 185/2772/3055 1470/2817/3055 529/2818/3055 f 1255/941/3056 6/2810/3056 1396/2809/3056 f 1255/941/3057 410/2822/3057 6/2810/3057 f 1233/2682/3058 1391/2746/3058 1257/2767/3058 f 774/2815/3059 318/1973/3059 1412/2802/3059 f 2081/2317/3060 2082/307/3060 2103/116/3060 f 1265/124/3061 1396/2809/3061 530/2814/3061 f 1462/638/3062 1463/637/3062 25/2787/3062 f 318/1973/3063 1251/1364/3063 1412/2802/3063 f 1393/2823/3064 1369/2824/3064 1948/2825/3064 f 24/2452/3065 298/84/3065 107/2716/3065 f 1504/2826/3066 1758/2827/3066 1478/2828/3066 f 1979/942/3067 2071/2266/3067 1988/2389/3067 f 2118/2829/3068 1979/942/3068 1988/2389/3068 f 1361/2816/3069 2390/2830/3069 1362/1261/3069 f 529/2818/3070 1265/124/3070 530/2814/3070 f 1398/2831/3071 1396/2809/3071 1265/124/3071 f 1398/2831/3072 1255/941/3072 1396/2809/3072 f 423/1376/3073 1302/1339/3073 415/1338/3073 f 24/2452/3074 107/2716/3074 976/2257/3074 f 1381/60/3075 1453/1143/3075 1395/1149/3075 f 1979/942/3076 2118/2829/3076 2122/943/3076 f 982/259/3077 1062/2335/3077 1327/2832/3077 f 3141/2833/3078 3173/310/3078 3189/1637/3078 f 1362/1261/3079 1427/1260/3079 1361/2816/3079 f 1427/1260/3080 1447/2805/3080 1361/2816/3080 f 1427/1260/3081 1457/1126/3081 1447/2805/3081 f 1470/2817/3082 459/122/3082 529/2818/3082 f 459/122/3083 1265/124/3083 529/2818/3083 f 1255/941/3084 144/2834/3084 410/2822/3084 f 1463/637/3085 1461/46/3085 251/48/3085 f 1489/564/3086 3364/2835/3086 3182/562/3086 f 1040/2153/3087 1395/2644/3087 24/2452/3087 f 1266/2588/3088 633/2052/3088 1250/2752/3088 f 1251/1364/3089 1294/1252/3089 423/1376/3089 f 423/1376/3090 1294/1252/3090 1302/1339/3090 f 1463/637/3091 353/1051/3091 25/2787/3091 f 1709/2836/3092 2890/1848/3092 2826/1/3092 f 952/2837/3093 958/2528/3093 962/1964/3093 f 1457/1126/3094 1470/2817/3094 1447/2805/3094 f 1328/907/3095 313/895/3095 339/894/3095 f 870/2400/3096 3490/1009/3096 3454/1301/3096 f 1355/1960/3097 1371/1959/3097 1382/2581/3097 f 1298/1895/3098 1353/344/3098 1133/723/3098 f 352/36/3099 457/1178/3099 330/1144/3099 f 1228/519/3100 1401/2701/3100 1314/520/3100 f 44/2838/3101 437/721/3101 203/720/3101 f 1294/1252/3102 1667/2785/3102 1302/1339/3102 f 1327/2832/3103 1062/2335/3103 1935/886/3103 f 2120/186/3104 1206/944/3104 2088/187/3104 f 2876/2839/3105 2289/1443/3105 2862/2392/3105 f 1457/1126/3106 459/122/3106 1470/2817/3106 f 1274/1164/3107 1375/410/3107 1398/2831/3107 f 1265/124/3108 1274/1164/3108 1398/2831/3108 f 1255/941/3109 237/940/3109 144/2834/3109 f 3489/423/3110 3488/2840/3110 3474/422/3110 f 1259/2580/3111 1683/2820/3111 1316/158/3111 f 1528/2841/3112 1708/2842/3112 1640/381/3112 f 1247/2574/3113 1245/1257/3113 11/2604/3113 f 1389/603/3114 604/1174/3114 1392/2843/3114 f 1316/158/3115 1683/2820/3115 1293/2774/3115 f 2894/680/3116 215/2844/3116 2615/287/3116 f 3413/2845/3117 1958/232/3117 1974/108/3117 f 2890/1848/3118 1710/1633/3118 2826/1/3118 f 2730/1267/3119 2810/253/3119 1969/1202/3119 f 1398/2831/3120 1375/410/3120 1255/941/3120 f 1197/1074/3121 3484/1870/3121 3486/1075/3121 f 1975/110/3122 2015/117/3122 1986/1176/3122 f 1232/182/3123 1260/184/3123 1258/257/3123 f 1593/205/3124 1424/2846/3124 1440/290/3124 f 106/929/3125 327/928/3125 19/958/3125 f 2040/1017/3126 2041/1016/3126 2081/2317/3126 f 2041/1016/3127 2082/307/3127 2081/2317/3127 f 1471/430/3128 1457/1126/3128 1427/1260/3128 f 1614/1192/3129 1615/1245/3129 1641/2847/3129 f 1582/2848/3130 1591/2849/3130 1581/2850/3130 f 1716/2851/3131 1539/70/3131 1701/72/3131 f 1642/2852/3132 1628/2853/3132 1681/2854/3132 f 1659/2855/3133 1698/1276/3133 392/1288/3133 f 1592/2856/3134 1601/1162/3134 1600/2857/3134 f 1505/2858/3135 1530/2859/3135 1504/2826/3135 f 1559/2860/3136 1581/2850/3136 1533/2861/3136 f 122/1100/3137 114/1040/3137 1600/2862/3137 f 1708/2842/3138 397/411/3138 1640/381/3138 f 1380/151/3139 1341/2607/3139 1606/2863/3139 f 1492/2864/3140 1493/234/3140 1516/2865/3140 f 1633/1105/3141 1882/2677/3141 1937/1103/3141 f 487/1278/3142 1650/1311/3142 511/1302/3142 f 1551/968/3143 1580/1010/3143 84/969/3143 f 2743/2866/3144 2787/2867/3144 2806/2868/3144 f 3454/1301/3145 3457/1331/3145 3424/1002/3145 f 1546/2869/3146 1927/2870/3146 1711/2216/3146 f 1705/1247/3147 1574/2871/3147 1671/2872/3147 f 1615/1245/3148 1642/2852/3148 1641/2847/3148 f 444/18/3149 267/2873/3149 1345/23/3149 f 1679/2874/3150 1659/2875/3150 1667/2785/3150 f 149/2876/3151 177/1101/3151 148/1041/3151 f 1664/1150/3152 1665/2782/3152 452/1182/3152 f 3435/1922/3153 3442/2587/3153 3447/982/3153 f 1479/2179/3154 1504/2826/3154 1486/2877/3154 f 1641/2847/3155 1642/2852/3155 1680/1123/3155 f 2708/1961/3156 215/2844/3156 2673/2319/3156 f 3440/2538/3157 3460/1116/3157 3433/349/3157 f 296/195/3158 183/194/3158 443/295/3158 f 2669/857/3159 3453/856/3159 2754/705/3159 f 2767/2878/3160 3429/1723/3160 3487/1667/3160 f 2671/2879/3161 2184/2880/3161 2697/2542/3161 f 1371/2881/3162 1651/1104/3162 2106/2748/3162 f 320/1249/3163 1698/1276/3163 1705/1247/3163 f 2692/2671/3164 2719/1905/3164 2691/1907/3164 f 2659/2882/3165 2694/2883/3165 2658/2884/3165 f 1526/2885/3166 1543/1120/3166 1553/1119/3166 f 1578/2886/3167 1599/939/3167 1577/938/3167 f 585/1413/3168 45/945/3168 32/917/3168 f 1599/939/3169 1607/2887/3169 1613/2597/3169 f 1336/2888/3170 1369/2243/3170 1368/2889/3170 f 1712/2890/3171 1684/2891/3171 1603/2892/3171 f 1531/629/3172 1912/628/3172 1864/2497/3172 f 1549/668/3173 1525/667/3173 1802/1363/3173 f 3128/2893/3174 3152/2894/3174 3162/2895/3174 f 1627/120/3175 1639/2896/3175 1656/2897/3175 f 2489/2898/3176 1769/252/3176 2422/2070/3176 f 1696/2899/3177 1712/2890/3177 1566/2900/3177 f 1827/1513/3178 2294/2202/3178 2536/2901/3178 f 1610/2902/3179 1586/2903/3179 1664/2904/3179 f 563/614/3180 528/643/3180 914/744/3180 f 3018/2905/3181 2992/1879/3181 2439/2906/3181 f 149/2907/3182 1641/2847/3182 177/1122/3182 f 1592/2856/3183 97/1160/3183 1601/1162/3183 f 1906/47/3184 1514/2160/3184 262/666/3184 f 13/1307/3185 1565/1306/3185 14/1912/3185 f 2607/363/3186 2652/724/3186 2621/1608/3186 f 32/917/3187 593/860/3187 585/1413/3187 f 3474/2908/3188 3488/1712/3188 3486/2909/3188 f 341/498/3189 399/431/3189 1718/2910/3189 f 2615/287/3190 2769/669/3190 2416/2911/3190 f 1714/1913/3191 1547/2912/3191 13/1307/3191 f 493/327/3192 481/329/3192 1564/365/3192 f 2787/2867/3193 2837/2709/3193 2806/2868/3193 f 1495/2913/3194 1494/729/3194 1693/731/3194 f 148/1041/3195 122/1100/3195 1609/2914/3195 f 108/1191/3196 1615/1245/3196 1614/1192/3196 f 1600/2862/3197 1601/2915/3197 1609/2914/3197 f 1645/2916/3198 3396/2917/3198 1584/2918/3198 f 1207/417/3199 3487/1667/3199 3467/1591/3199 f 1903/2919/3200 515/2920/3200 2781/288/3200 f 1506/2921/3201 1542/2922/3201 1533/2923/3201 f 1614/1192/3202 1641/2847/3202 149/2907/3202 f 1547/2912/3203 1714/1913/3203 1961/2924/3203 f 1588/2925/3204 1547/2912/3204 1961/2924/3204 f 1576/1248/3205 1705/1247/3205 1684/2926/3205 f 1542/2922/3206 1559/2927/3206 1533/2923/3206 f 1574/2928/3207 1721/2929/3207 1671/2930/3207 f 1566/2900/3208 1712/2890/3208 1603/2892/3208 f 1896/2159/3209 1604/2931/3209 1514/2160/3209 f 1559/2860/3210 1582/2848/3210 1581/2850/3210 f 1480/2932/3211 1491/2933/3211 1506/2934/3211 f 372/2935/3212 307/1072/3212 1594/1077/3212 f 2962/294/3213 2980/2936/3213 2961/2937/3213 f 1560/2938/3214 1588/2925/3214 1895/243/3214 f 12/223/3215 1547/2703/3215 1588/2939/3215 f 1560/2718/3216 12/223/3216 1588/2939/3216 f 1681/2854/3217 1715/2940/3217 1691/2941/3217 f 585/1413/3218 1490/1412/3218 37/959/3218 f 1552/2942/3219 1559/2927/3219 1542/2922/3219 f 1526/2943/3220 1542/2944/3220 1515/2945/3220 f 2702/1076/3221 2543/1935/3221 1197/1074/3221 f 1585/2946/3222 1721/2929/3222 391/2947/3222 f 341/498/3223 1718/2910/3223 1623/2948/3223 f 3386/567/3224 341/498/3224 1623/2948/3224 f 1570/242/3225 1560/2938/3225 1895/243/3225 f 3502/616/3226 3455/2042/3226 1042/427/3226 f 3431/2804/3227 1004/2249/3227 3426/1004/3227 f 1487/2949/3228 22/712/3228 1505/2950/3228 f 1505/2950/3229 22/712/3229 1530/1793/3229 f 1581/2850/3230 1551/2951/3230 1533/2861/3230 f 1603/2892/3231 1585/2946/3231 1594/1077/3231 f 36/25/3232 58/211/3232 1549/668/3232 f 1671/2930/3233 1721/2929/3233 1585/2946/3233 f 1656/2952/3234 3378/2953/3234 2819/2954/3234 f 3443/1371/3235 3452/2409/3235 3436/1372/3235 f 1527/2591/3236 49/2955/3236 48/2589/3236 f 1638/2598/3237 1613/2597/3237 1627/120/3237 f 1627/2956/3238 1656/2952/3238 2819/2954/3238 f 209/1124/3239 1672/2957/3239 219/2792/3239 f 177/1122/3240 1641/2847/3240 1680/1123/3240 f 1526/2885/3241 1552/2958/3241 1542/2959/3241 f 1846/1200/3242 1626/2182/3242 1625/2960/3242 f 3504/2545/3243 3454/1301/3243 3490/1009/3243 f 3016/2961/3244 3028/2962/3244 3001/2963/3244 f 1526/2943/3245 1515/2945/3245 1516/2964/3245 f 1236/2685/3246 506/544/3246 1604/2931/3246 f 2780/2714/3247 2708/1961/3247 1689/1864/3247 f 140/1346/3248 179/1345/3248 1622/1293/3248 f 1586/2903/3249 1665/2965/3249 1664/2904/3249 f 614/2776/3250 3149/2564/3250 994/2563/3250 f 2161/318/3251 1026/320/3251 3442/2587/3251 f 1626/2966/3252 1646/2967/3252 1636/2968/3252 f 1619/2365/3253 1846/1200/3253 1625/2960/3253 f 1625/2969/3254 1626/2966/3254 1636/2968/3254 f 2927/850/3255 2926/2970/3255 2916/851/3255 f 2991/1880/3256 3001/2963/3256 2990/2560/3256 f 1865/2971/3257 2737/2972/3257 1875/2973/3257 f 1566/2900/3258 1720/1073/3258 1661/1071/3258 f 3492/1003/3259 3432/2531/3259 3431/2804/3259 f 1506/2934/3260 1533/2974/3260 1532/2975/3260 f 1638/2598/3261 1627/120/3261 174/119/3261 f 2561/2976/3262 2594/361/3262 2593/2977/3262 f 1696/2899/3263 1716/2978/3263 1701/2979/3263 f 1329/2726/3264 290/496/3264 1713/2980/3264 f 1615/1245/3265 1616/1244/3265 1628/2853/3265 f 1721/2981/3266 1574/2982/3266 1679/2874/3266 f 115/1327/3267 140/1346/3267 1622/1293/3267 f 1638/2598/3268 174/119/3268 1637/2983/3268 f 683/1450/3269 1004/2984/3269 686/1583/3269 f 1606/2985/3270 1570/242/3270 1797/2986/3270 f 1606/2985/3271 1692/2987/3271 1570/242/3271 f 1694/2428/3272 1669/862/3272 1704/2988/3272 f 3174/2989/3273 3190/308/3273 3173/310/3273 f 1720/1073/3274 1603/2892/3274 1594/1077/3274 f 3402/1414/3275 585/1413/3275 584/1739/3275 f 127/883/3276 138/903/3276 1607/836/3276 f 3152/2894/3277 3188/2990/3277 3162/2895/3277 f 1679/2874/3278 1665/2965/3278 1586/2903/3278 f 2708/1961/3279 1598/2991/3279 215/2844/3279 f 265/71/3280 1684/2926/3280 1712/2992/3280 f 1679/2874/3281 1586/2903/3281 1721/2981/3281 f 3234/2993/3282 3204/1982/3282 975/1981/3282 f 3467/1591/3283 3505/353/3283 1015/751/3283 f 402/1058/3284 391/1042/3284 1610/1109/3284 f 174/757/3285 3392/2994/3285 1637/2995/3285 f 1478/2828/3286 1758/2827/3286 1503/2996/3286 f 1656/2952/3287 1639/920/3287 1687/887/3287 f 1614/1192/3288 1609/2997/3288 1601/2998/3288 f 1487/2949/3289 1488/713/3289 22/712/3289 f 1583/1121/3290 1582/2848/3290 1552/2958/3290 f 404/1287/3291 1302/2999/3291 392/1288/3291 f 399/431/3292 397/411/3292 1718/2910/3292 f 2457/3000/3293 2992/3001/3293 2468/3002/3293 f 1682/215/3294 1685/214/3294 1563/3003/3294 f 3264/1115/3295 3477/788/3295 3460/1116/3295 f 1993/1966/3296 579/1860/3296 1495/2913/3296 f 119/169/3297 446/196/3297 1550/198/3297 f 1704/2988/3298 1669/862/3298 183/194/3298 f 45/945/3299 585/1413/3299 37/959/3299 f 1566/2900/3300 1603/2892/3300 1720/1073/3300 f 166/1295/3301 194/1296/3301 1681/2615/3301 f 466/1351/3302 1545/1250/3302 1251/1364/3302 f 1528/2841/3303 1640/381/3303 1564/365/3303 f 1585/2946/3304 391/2947/3304 1594/1077/3304 f 119/169/3305 1550/198/3305 1644/170/3305 f 1687/887/3306 3272/3004/3306 1656/2952/3306 f 1645/2916/3307 1636/2968/3307 1646/2967/3307 f 1533/2974/3308 46/3005/3308 1532/2975/3308 f 1591/2849/3309 1580/3006/3309 1581/2850/3309 f 1718/2910/3310 1655/3007/3310 1623/2948/3310 f 1478/2828/3311 1485/3008/3311 3367/3009/3311 f 3429/1723/3312 3498/777/3312 3505/353/3312 f 1614/1192/3313 149/2907/3313 1609/2997/3313 f 1695/3010/3314 1587/3011/3314 1658/3012/3314 f 2624/3013/3315 1697/311/3315 566/3014/3315 f 639/1933/3316 3195/1932/3316 613/2777/3316 f 1667/2785/3317 1665/2965/3317 1679/2874/3317 f 1630/3015/3318 1644/170/3318 1550/198/3318 f 1644/170/3319 1630/3015/3319 1658/3012/3319 f 3208/3016/3320 1646/2967/3320 3392/2994/3320 f 1680/1123/3321 1642/2852/3321 1691/2941/3321 f 1591/2849/3322 1600/2857/3322 1580/3006/3322 f 209/1124/3323 1691/2941/3323 1672/2957/3323 f 1802/1363/3324 1810/1228/3324 1788/1227/3324 f 194/1296/3325 1715/3017/3325 1681/2615/3325 f 1680/1123/3326 1691/2941/3326 209/1124/3326 f 1495/2913/3327 1517/1138/3327 1494/729/3327 f 1539/70/3328 1716/2851/3328 1715/3017/3328 f 2780/2714/3329 1598/2991/3329 2708/1961/3329 f 2422/2070/3330 2517/2072/3330 2489/2898/3330 f 1704/2988/3331 1587/3011/3331 1688/3018/3331 f 2818/3019/3332 2591/3020/3332 2783/3021/3332 f 1624/3022/3333 1625/2969/3333 1584/2918/3333 f 1619/3023/3334 1625/2969/3334 1624/3022/3334 f 1618/3024/3335 1619/3023/3335 1624/3022/3335 f 2600/268/3336 2434/267/3336 2543/1935/3336 f 3468/1470/3337 991/3025/3337 3438/1471/3337 f 3155/3026/3338 3165/3027/3338 3154/3028/3338 f 1576/1248/3339 1684/2926/3339 265/71/3339 f 572/1962/3340 580/1313/3340 3348/2147/3340 f 1520/3029/3341 2456/3030/3341 3124/3031/3341 f 1922/3032/3342 3355/2288/3342 1943/3033/3342 f 2808/3034/3343 1898/3035/3343 2548/2117/3343 f 1533/2974/3344 1551/3036/3344 46/3005/3344 f 2817/1426/3345 2060/3/3345 1028/3037/3345 f 1654/3038/3346 1658/3012/3346 1590/3039/3346 f 1600/2862/3347 1609/2914/3347 122/1100/3347 f 1563/3040/3348 1685/218/3348 282/217/3348 f 1623/2948/3349 1655/3007/3349 1595/3041/3349 f 1688/3018/3350 1695/3010/3350 3387/3042/3350 f 118/168/3351 1658/3012/3351 1587/3011/3351 f 1599/939/3352 1578/2886/3352 1607/2887/3352 f 1519/3043/3353 1682/215/3353 1678/3044/3353 f 1718/2910/3354 1708/2842/3354 1655/3007/3354 f 1497/3045/3355 1520/3029/3355 3124/3031/3355 f 1526/2885/3356 1553/1119/3356 1552/2958/3356 f 1889/2448/3357 2695/3046/3357 2660/3047/3357 f 1323/3048/3358 3471/398/3358 3456/400/3358 f 2960/3049/3359 3033/67/3359 2952/69/3359 f 183/194/3360 118/168/3360 1587/3011/3360 f 724/1370/3361 1454/2132/3361 1249/2614/3361 f 2561/2976/3362 2560/3050/3362 2537/3051/3362 f 2852/2118/3363 1272/3052/3363 2857/384/3363 f 3435/3053/3364 2744/2119/3364 2857/384/3364 f 575/3054/3365 2500/3055/3365 3417/3056/3365 f 2749/3057/3366 2731/1400/3366 2761/238/3366 f 1683/2820/3367 1260/184/3367 1647/2768/3367 f 1684/2891/3368 1671/2930/3368 1603/2892/3368 f 2538/3058/3369 2561/2976/3369 2537/3051/3369 f 179/1345/3370 166/1295/3370 1622/1293/3370 f 3150/3059/3371 1497/3045/3371 3124/3031/3371 f 1510/3060/3372 1520/3029/3372 1497/3045/3372 f 1511/3061/3373 1510/3060/3373 1497/3045/3373 f 1510/3060/3374 1521/3062/3374 1520/3029/3374 f 1521/3062/3375 1753/3063/3375 1520/3029/3375 f 1671/2930/3376 1585/2946/3376 1603/2892/3376 f 1582/2848/3377 1583/1121/3377 97/1160/3377 f 481/329/3378 507/328/3378 1670/3064/3378 f 1477/3065/3379 1484/2419/3379 1476/3066/3379 f 1480/3067/3380 3381/3068/3380 3372/3069/3380 f 1491/2933/3381 1516/2964/3381 1515/2945/3381 f 2852/2118/3382 2857/384/3382 2744/2119/3382 f 1494/729/3383 1517/1138/3383 1527/1139/3383 f 3276/3070/3384 1562/3071/3384 1595/3072/3384 f 1630/3015/3385 1550/198/3385 1519/3043/3385 f 2560/1514/3386 1827/1513/3386 2536/2901/3386 f 2879/679/3387 1928/678/3387 1832/3073/3387 f 1691/2941/3388 1696/2899/3388 1672/2957/3388 f 1504/2826/3389 1478/2828/3389 1486/2877/3389 f 1643/3074/3390 1681/2854/3390 1628/2853/3390 f 1497/3045/3391 3150/3059/3391 1511/3061/3391 f 1511/3061/3392 1521/3062/3392 1510/3060/3392 f 1506/2934/3393 1532/2975/3393 1490/3075/3393 f 1717/2791/3394 1566/2900/3394 1661/1071/3394 f 2814/3076/3395 2854/3077/3395 2796/3078/3395 f 2561/2976/3396 2582/3079/3396 2594/361/3396 f 1695/3010/3397 1658/3012/3397 1654/3038/3397 f 1516/2865/3398 1543/233/3398 1526/3080/3398 f 1057/2482/3399 2551/2398/3399 1058/2382/3399 f 1636/2968/3400 1645/2916/3400 1584/2918/3400 f 1636/2968/3401 1584/2918/3401 1625/2969/3401 f 1593/2628/3402 1236/2685/3402 1561/2252/3402 f 210/1284/3403 1715/3017/3403 194/1296/3403 f 1658/3081/3404 1630/3082/3404 1590/3083/3404 f 2594/361/3405 2582/3079/3405 2634/362/3405 f 1528/2841/3406 1564/365/3406 481/329/3406 f 219/2792/3407 1672/2957/3407 1717/2791/3407 f 138/903/3408 1639/920/3408 1607/836/3408 f 1512/3084/3409 1511/3061/3409 1481/3085/3409 f 1529/3086/3410 1521/3062/3410 1511/3061/3410 f 1512/3084/3411 1529/3086/3411 1511/3061/3411 f 1743/3087/3412 2456/3030/3412 1520/3029/3412 f 2549/3088/3413 2560/3050/3413 2574/3089/3413 f 2887/250/3414 1911/3090/3414 2870/3091/3414 f 1550/198/3415 394/197/3415 1682/215/3415 f 3173/310/3416 3213/2206/3416 3212/2167/3416 f 1529/3092/3417 1536/2813/3417 1535/3093/3417 f 1705/3094/3418 1671/2930/3418 1684/2891/3418 f 1405/3095/3419 2107/3096/3419 1350/3097/3419 f 1345/23/3420 267/2873/3420 552/38/3420 f 1484/2419/3421 1483/3098/3421 1476/3066/3421 f 1550/198/3422 1682/215/3422 1519/3043/3422 f 1705/1247/3423 1698/1276/3423 1574/2871/3423 f 1708/2842/3424 1528/2841/3424 1655/3007/3424 f 1524/3099/3425 1528/2841/3425 481/329/3425 f 3427/92/3426 3473/872/3426 3448/1277/3426 f 3113/1220/3427 3128/1219/3427 3139/3100/3427 f 1693/731/3428 2585/3101/3428 1495/2913/3428 f 2653/2305/3429 2704/3102/3429 2689/1201/3429 f 183/194/3430 1587/3011/3430 1704/2988/3430 f 2896/2462/3431 1507/1196/3431 184/1328/3431 f 1688/3018/3432 1587/3011/3432 1695/3010/3432 f 2593/2977/3433 2581/3103/3433 2574/3089/3433 f 1595/3041/3434 1655/3007/3434 1541/3104/3434 f 939/1987/3435 918/1625/3435 983/1985/3435 f 1634/2184/3436 1459/40/3436 1707/3105/3436 f 1769/252/3437 2567/3106/3437 2422/2070/3437 f 265/71/3438 1712/2992/3438 1701/72/3438 f 2536/2901/3439 2537/3107/3439 2560/1514/3439 f 3367/3009/3440 1485/3008/3440 1477/3065/3440 f 1476/3066/3441 3324/3108/3441 1477/3065/3441 f 2708/1961/3442 2673/2319/3442 2424/245/3442 f 1519/3109/3443 1690/3110/3443 1630/3082/3443 f 2704/3102/3444 2730/1267/3444 2689/1201/3444 f 3340/3111/3445 3368/3112/3445 1486/2877/3445 f 1512/3084/3446 1537/3113/3446 1529/3086/3446 f 1537/3114/3447 1536/2813/3447 1529/3092/3447 f 1535/3093/3448 1536/2813/3448 1784/2315/3448 f 2560/3050/3449 2593/2977/3449 2574/3089/3449 f 1626/2966/3450 1637/2995/3450 1646/2967/3450 f 1557/3115/3451 1567/3116/3451 1597/3117/3451 f 1579/2522/3452 1573/3118/3452 1707/3105/3452 f 1506/2934/3453 1490/3075/3453 1480/2932/3453 f 1736/2634/3454 1503/2996/3454 1773/2635/3454 f 3476/355/3455 1163/280/3455 1015/751/3455 f 1721/2929/3456 1610/3119/3456 391/2947/3456 f 1650/1350/3457 1545/1250/3457 466/1351/3457 f 1485/3008/3458 1484/2419/3458 1477/3065/3458 f 1621/2375/3459 1571/2205/3459 20/707/3459 f 1567/3120/3460 1557/3121/3460 1764/2329/3460 f 1667/2785/3461 1294/1252/3461 1558/1251/3461 f 1559/2860/3462 1552/2958/3462 1582/2848/3462 f 1642/2852/3463 1681/2854/3463 1691/2941/3463 f 1717/2791/3464 1672/2957/3464 1566/2900/3464 f 1491/2933/3465 1515/2945/3465 1506/2934/3465 f 290/496/3466 1329/2726/3466 3/497/3466 f 2045/2155/3467 1573/3118/3467 1579/2522/3467 f 1573/3118/3468 1660/3122/3468 1707/3105/3468 f 1660/3122/3469 1634/2184/3469 1707/3105/3469 f 397/411/3470 1708/2842/3470 1718/2910/3470 f 1591/2849/3471 1592/2856/3471 1600/2857/3471 f 1606/2863/3472 1341/2607/3472 1692/2693/3472 f 486/1231/3473 1544/1216/3473 1668/1262/3473 f 1503/2996/3474 1736/2634/3474 1502/2420/3474 f 1485/3008/3475 1502/2420/3475 1484/2419/3475 f 146/902/3476 1639/920/3476 138/903/3476 f 1519/3109/3477 1678/3123/3477 1690/3110/3477 f 1678/3044/3478 1682/215/3478 1563/3003/3478 f 2500/1651/3479 583/711/3479 1488/713/3479 f 1512/3124/3480 1481/3125/3480 1537/3126/3480 f 1610/1109/3481 1664/1150/3481 422/1129/3481 f 1607/2887/3482 1639/2896/3482 1613/2597/3482 f 1613/2597/3483 1639/2896/3483 1627/120/3483 f 118/168/3484 1644/170/3484 1658/3012/3484 f 3441/870/3485 1027/3127/3485 3468/871/3485 f 1134/1802/3486 983/1985/3486 918/1625/3486 f 318/2057/3487 682/745/3487 475/1352/3487 f 3392/2994/3488 1646/2967/3488 1637/2995/3488 f 1495/2913/3489 579/1860/3489 1517/1138/3489 f 1060/3128/3490 1693/731/3490 2469/730/3490 f 586/1676/3491 50/1189/3491 579/1860/3491 f 1503/2996/3492 1502/2420/3492 1485/3008/3492 f 1695/3010/3493 1654/3038/3493 3387/3042/3493 f 3463/300/3494 3504/2545/3494 3490/1009/3494 f 1380/151/3495 1606/2863/3495 1442/2571/3495 f 1482/3129/3496 1481/3085/3496 3184/3130/3496 f 1482/3129/3497 1537/3113/3497 1481/3085/3497 f 1534/3131/3498 2898/2211/3498 2868/2529/3498 f 2869/1415/3499 1534/3131/3499 2868/2529/3499 f 754/2721/3500 753/1931/3500 784/1930/3500 f 2791/239/3501 2812/371/3501 2828/373/3501 f 1573/3118/3502 1554/3132/3502 1660/3122/3502 f 1660/3122/3503 1602/41/3503 1634/2184/3503 f 959/576/3504 3029/578/3504 955/2175/3504 f 1696/2899/3505 1701/2979/3505 1712/2890/3505 f 3059/3133/3506 3074/3134/3506 3035/3135/3506 f 1478/2828/3507 1503/2996/3507 1485/3008/3507 f 2048/322/3508 1621/2375/3508 2121/323/3508 f 2048/322/3509 1699/3136/3509 1621/2375/3509 f 1699/3136/3510 1571/2205/3510 1621/2375/3510 f 1434/1308/3511 1371/2881/3511 1565/1306/3511 f 1599/939/3512 1638/2598/3512 1839/2181/3512 f 1558/1251/3513 1668/3137/3513 1665/2965/3513 f 3435/3053/3514 2857/384/3514 1894/383/3514 f 2560/3050/3515 2561/2976/3515 2593/2977/3515 f 2816/2069/3516 2817/1426/3516 1028/3037/3516 f 1490/1412/3517 3402/1414/3517 3381/3068/3517 f 1630/3082/3518 1690/3110/3518 1590/3083/3518 f 1713/2731/3519 1571/2205/3519 1699/3136/3519 f 1896/2159/3520 1906/47/3520 1904/3138/3520 f 3402/3139/3521 575/3054/3521 3401/3140/3521 f 1522/3141/3522 1537/3113/3522 1482/3129/3522 f 1515/3142/3523 1542/2922/3523 1506/2921/3523 f 1582/2848/3524 1592/2856/3524 1591/2849/3524 f 1561/2252/3525 1236/2685/3525 1604/2931/3525 f 215/2844/3526 2781/288/3526 2615/287/3526 f 2593/2977/3527 2617/3143/3527 2581/3103/3527 f 3387/3042/3528 1654/3038/3528 1608/3144/3528 f 2046/2265/3529 1635/3145/3529 2045/2155/3529 f 2045/2155/3530 1632/3146/3530 1573/3118/3530 f 1632/3146/3531 1554/3132/3531 1573/3118/3531 f 1652/3147/3532 1602/41/3532 1660/3122/3532 f 664/210/3533 1525/667/3533 58/211/3533 f 1581/2850/3534 1580/3006/3534 1551/2951/3534 f 1600/2862/3535 114/1040/3535 1580/1010/3535 f 2415/3148/3536 2433/3149/3536 2409/3150/3536 f 1524/3099/3537 481/329/3537 1670/3064/3537 f 1672/2957/3538 1696/2899/3538 1566/2900/3538 f 1479/3151/3539 1487/2949/3539 1505/2950/3539 f 2897/2566/3540 967/1517/3540 1923/2461/3540 f 1572/2150/3541 1635/3145/3541 2046/2265/3541 f 1635/3145/3542 1632/3146/3542 2045/2155/3542 f 1652/3147/3543 3334/3152/3543 1602/41/3543 f 109/1272/3544 1643/1294/3544 1628/3153/3544 f 3313/1736/3545 3312/3154/3545 3284/1737/3545 f 1582/2848/3546 97/1160/3546 1592/2856/3546 f 1667/2785/3547 1558/1251/3547 1665/2965/3547 f 1715/2940/3548 1716/2978/3548 1696/2899/3548 f 2930/3155/3549 1723/3156/3549 1722/3157/3549 f 2809/3158/3550 2841/3159/3550 2026/3160/3550 f 394/197/3551 159/213/3551 1682/215/3551 f 1522/3161/3552 1538/3162/3552 1537/3114/3552 f 1537/3114/3553 1538/3162/3553 1555/2316/3553 f 1574/2982/3554 1659/2875/3554 1679/2874/3554 f 1698/1276/3555 1659/2855/3555 1574/2871/3555 f 1793/1518/3556 2829/3163/3556 2619/1427/3556 f 1659/2875/3557 392/2784/3557 1667/2785/3557 f 2290/846/3558 2246/2036/3558 2193/847/3558 f 2677/2326/3559 2619/1427/3559 2817/1426/3559 f 1604/2931/3560 506/544/3560 1514/2160/3560 f 2926/2229/3561 2927/3164/3561 2945/3165/3561 f 1486/2877/3562 3397/2180/3562 1479/2179/3562 f 1544/1216/3563 452/1182/3563 1665/2782/3563 f 1691/2941/3564 1715/2940/3564 1696/2899/3564 f 2139/1678/3565 1368/2889/3565 2136/1679/3565 f 1839/2181/3566 1638/2598/3566 1626/2182/3566 f 1668/3137/3567 1558/1251/3567 1545/1250/3567 f 1482/3166/3568 1498/3167/3568 1522/3168/3568 f 2829/3163/3569 1709/2836/3569 2826/1/3569 f 2619/1427/3570 2829/3163/3570 2826/1/3570 f 1507/1196/3571 35/1519/3571 2677/2326/3571 f 870/2400/3572 3454/1301/3572 3480/1300/3572 f 1632/3146/3573 1706/3169/3573 1554/3132/3573 f 1554/3132/3574 1518/3170/3574 1660/3122/3574 f 1516/2865/3575 1493/234/3575 1543/233/3575 f 1623/2948/3576 1595/3041/3576 1562/3171/3576 f 1596/2773/3577 1597/913/3577 1605/540/3577 f 507/328/3578 3302/3172/3578 1670/3064/3578 f 1518/3173/3579 1524/3099/3579 1670/3064/3579 f 1569/3174/3580 1699/3136/3580 2048/322/3580 f 1569/3174/3581 1649/3175/3581 1699/3136/3581 f 1649/3175/3582 1713/2731/3582 1699/3136/3582 f 2593/2977/3583 2594/361/3583 2607/363/3583 f 1475/3176/3584 3196/3177/3584 1498/3167/3584 f 1498/3167/3585 1538/3178/3585 1522/3168/3585 f 1538/3162/3586 1548/2548/3586 1555/2316/3586 f 1555/2316/3587 1548/2548/3587 1556/3179/3587 f 1589/3180/3588 1843/2469/3588 1575/3181/3588 f 1530/2859/3589 1540/3182/3589 1774/3183/3589 f 2175/3184/3590 2409/3185/3590 2904/3186/3590 f 2779/3187/3591 2564/3188/3591 2624/3013/3591 f 1635/3145/3592 1706/3169/3592 1632/3146/3592 f 1652/3147/3593 1660/3122/3593 1518/3170/3593 f 2434/267/3594 2838/1635/3594 2711/1634/3594 f 1530/2859/3595 1774/3183/3595 1504/2826/3595 f 1626/2182/3596 1638/2598/3596 1637/2983/3596 f 178/1320/3597 179/1345/3597 195/1336/3597 f 1540/26/3598 1789/2707/3598 1774/3189/3598 f 1916/3190/3599 1264/2747/3599 1673/2629/3599 f 1721/2981/3600 1586/2903/3600 1610/2902/3600 f 1589/3191/3601 1575/590/3601 1556/3179/3601 f 1596/2773/3602 1843/2469/3602 1589/3180/3602 f 2425/3192/3603 2436/2295/3603 3030/2297/3603 f 2370/2558/3604 2175/3193/3604 2901/2556/3604 f 1635/3145/3605 1541/3194/3605 1706/3169/3605 f 83/918/3606 46/960/3606 1551/968/3606 f 2697/2542/3607 3462/2345/3607 2524/2344/3607 f 465/1110/3608 1664/1150/3608 452/1182/3608 f 1424/228/3609 1673/2629/3609 1264/2747/3609 f 1673/2629/3610 1992/2251/3610 1916/3190/3610 f 1553/1119/3611 1583/1121/3611 1552/2958/3611 f 1498/3195/3612 1523/3196/3612 1538/3197/3612 f 1538/3162/3613 1523/3198/3613 1548/2548/3613 f 1548/2548/3614 1557/3121/3614 1556/3179/3614 f 1557/3199/3615 1589/3180/3615 1556/3200/3615 f 2706/3201/3616 2719/3202/3616 2749/3057/3616 f 184/3203/3617 2111/3204/3617 2896/3205/3617 f 2466/3206/3618 2255/3207/3618 2455/3208/3618 f 2615/287/3619 2416/2911/3619 2766/681/3619 f 1572/2150/3620 1595/3072/3620 1635/3145/3620 f 1706/3169/3621 1518/3170/3621 1554/3132/3621 f 3206/3209/3622 601/1428/3622 3205/3210/3622 f 2900/3211/3623 2335/1890/3623 2342/3212/3623 f 3442/2587/3624 708/2360/3624 3447/982/3624 f 2677/2326/3625 35/1519/3625 2619/1427/3625 f 931/285/3626 1719/284/3626 1568/2215/3626 f 2121/323/3627 1621/2375/3627 2119/2374/3627 f 1677/3213/3628 1838/1038/3628 1805/1037/3628 f 1546/2869/3629 1569/3174/3629 1927/2870/3629 f 128/961/3630 1580/1010/3630 114/1040/3630 f 1505/2858/3631 1504/2826/3631 1479/2179/3631 f 1329/2726/3632 1649/3214/3632 282/217/3632 f 2335/1890/3633 2900/3211/3633 1019/3215/3633 f 1635/3145/3634 1595/3072/3634 1541/3194/3634 f 2034/241/3635 1797/2986/3635 1570/242/3635 f 2516/3216/3636 2523/3217/3636 2583/3218/3636 f 1364/3219/3637 1648/3220/3637 1620/286/3637 f 1608/3221/3638 1654/3222/3638 1620/286/3638 f 1654/3222/3639 1719/284/3639 1620/286/3639 f 1569/3174/3640 1563/3223/3640 1649/3175/3640 f 1164/3224/3641 2500/1651/3641 1488/713/3641 f 1609/2914/3642 149/2876/3642 148/1041/3642 f 1593/2628/3643 1561/2252/3643 1673/2629/3643 f 1673/2629/3644 1561/2252/3644 1992/2251/3644 f 1820/2250/3645 1561/2252/3645 1604/2931/3645 f 1513/2761/3646 1756/2478/3646 1548/2548/3646 f 1523/3198/3647 1513/2761/3647 1548/2548/3647 f 1676/3225/3648 592/3226/3648 1686/3227/3648 f 2073/2710/3649 2837/2709/3649 2787/2867/3649 f 1541/3194/3650 1655/3228/3650 1706/3169/3650 f 1648/3220/3651 1608/3221/3651 1620/286/3651 f 1719/284/3652 1590/3083/3652 1711/2216/3652 f 1563/3223/3653 1569/3174/3653 1546/2869/3653 f 1678/3123/3654 1563/3223/3654 1546/2869/3654 f 1560/2938/3655 1570/242/3655 1692/2987/3655 f 1615/1245/3656 1628/2853/3656 1642/2852/3656 f 1629/3229/3657 1179/82/3657 3334/3152/3657 f 1499/3230/3658 1523/3196/3658 1498/3195/3658 f 1499/3231/3659 1513/2761/3659 1523/3198/3659 f 1513/2761/3660 1757/2328/3660 1756/2478/3660 f 1548/2548/3661 1764/2329/3661 1557/3121/3661 f 2617/3143/3662 2616/3232/3662 2581/3103/3662 f 2896/2462/3663 2882/2212/3663 1923/2461/3663 f 1272/3052/3664 2096/382/3664 2857/384/3664 f 1655/3228/3665 1524/3233/3665 1706/3169/3665 f 1524/3099/3666 1518/3173/3666 1706/3234/3666 f 2591/3020/3667 2818/3019/3667 2798/3235/3667 f 3387/3236/3668 1608/3221/3668 1648/3220/3668 f 1590/3083/3669 1690/3110/3669 1711/2216/3669 f 1690/3110/3670 1546/2869/3670 1711/2216/3670 f 1563/3040/3671 282/217/3671 1649/3214/3671 f 1038/1356/3672 1055/926/3672 1045/405/3672 f 1494/729/3673 1527/1139/3673 1493/234/3673 f 1628/3153/3674 1616/1273/3674 109/1272/3674 f 1499/3237/3675 1500/2669/3675 1513/3238/3675 f 506/544/3676 262/666/3676 1514/2160/3676 f 1557/3115/3677 1597/3117/3677 1589/3239/3677 f 1589/3239/3678 1597/3117/3678 1596/3240/3678 f 602/3241/3679 2813/3242/3679 2846/3243/3679 f 2617/3143/3680 2621/1608/3680 2616/3232/3680 f 1528/3244/3681 1524/3233/3681 1655/3228/3681 f 1518/3170/3682 1670/3245/3682 1652/3147/3682 f 1529/3086/3683 1535/3246/3683 1521/3062/3683 f 1923/2461/3684 35/1519/3684 1507/1196/3684 f 3046/293/3685 3045/2277/3685 2980/2936/3685 f 215/2844/3686 2894/680/3686 2673/2319/3686 f 1590/3083/3687 1719/284/3687 1654/3222/3687 f 1690/3110/3688 1678/3123/3688 1546/2869/3688 f 2096/382/3689 2161/1082/3689 1894/383/3689 f 2142/3247/3690 2309/1132/3690 2248/1131/3690 f 2384/3248/3691 2027/3249/3691 2815/3250/3691 f 2142/3251/3692 2251/3252/3692 2167/3253/3692 f 2309/3254/3693 2142/3251/3693 2167/3253/3693 f 2222/3255/3694 2140/3256/3694 973/3257/3694 f 1028/3037/3695 2060/3/3695 1833/3258/3695 f 2167/3253/3696 2251/3252/3696 1888/3259/3696 f 2723/653/3697 1928/678/3697 2643/677/3697 f 2345/347/3698 2346/1274/3698 2380/3260/3698 f 1272/3261/3699 1738/3262/3699 2096/2100/3699 f 2651/2101/3700 2096/2100/3700 1738/3262/3700 f 2147/3263/3701 2200/3264/3701 2220/2004/3701 f 2380/3260/3702 2381/3265/3702 2401/3266/3702 f 2228/3267/3703 2200/3264/3703 2147/3263/3703 f 1738/3262/3704 1967/3268/3704 2651/2101/3704 f 1429/247/3705 1099/3269/3705 1849/3270/3705 f 1818/2303/3706 1839/2181/3706 1846/1200/3706 f 1967/3268/3707 1926/3271/3707 1849/3272/3707 f 1926/3273/3708 801/3274/3708 1429/247/3708 f 1849/3270/3709 1926/3273/3709 1429/247/3709 f 801/3274/3710 1428/3275/3710 1429/247/3710 f 3499/1910/3711 3480/1300/3711 3424/1002/3711 f 2108/3276/3712 1272/3261/3712 1898/2134/3712 f 2108/3276/3713 1738/3262/3713 1272/3261/3713 f 1428/3275/3714 1295/248/3714 1429/247/3714 f 1226/2687/3715 1099/2781/3715 1232/182/3715 f 2108/3276/3716 1967/3268/3716 1738/3262/3716 f 801/3274/3717 1740/3277/3717 1428/3275/3717 f 1740/3277/3718 1295/248/3718 1428/3275/3718 f 2108/3276/3719 1938/3278/3719 1967/3268/3719 f 1967/3268/3720 1726/3279/3720 1926/3271/3720 f 1726/3279/3721 1803/3280/3721 1926/3271/3721 f 1926/3271/3722 1803/3280/3722 801/3281/3722 f 801/3282/3723 1803/3283/3723 1740/3284/3723 f 1728/2660/3724 1647/2659/3724 1740/3285/3724 f 1938/3278/3725 1726/3279/3725 1967/3268/3725 f 1803/3286/3726 1739/3287/3726 1740/3277/3726 f 1740/3285/3727 1739/3288/3727 1728/2660/3727 f 3444/2043/3728 3448/1106/3728 3478/428/3728 f 3502/837/3729 3503/1098/3729 3496/1097/3729 f 1980/3289/3730 1982/3290/3730 2062/2136/3730 f 1982/3290/3731 2108/3276/3731 2062/2136/3731 f 1848/3291/3732 204/3292/3732 1739/3288/3732 f 1803/3283/3733 1848/3293/3733 1739/3294/3733 f 1739/3288/3734 204/3292/3734 1728/2660/3734 f 2274/3295/3735 2454/845/3735 2191/3296/3735 f 1726/3279/3736 1881/3297/3736 1803/3280/3736 f 1803/3283/3737 1881/3298/3737 1848/3293/3737 f 1872/1946/3738 1982/3290/3738 1980/3289/3738 f 2108/3276/3739 1982/3290/3739 1938/3278/3739 f 1938/3278/3740 2024/3299/3740 1726/3279/3740 f 1881/3298/3741 1873/3300/3741 1848/3293/3741 f 1873/3301/3742 1882/2677/3742 204/3292/3742 f 1848/3291/3743 1873/3301/3743 204/3292/3743 f 1683/2658/3744 204/3292/3744 1882/2677/3744 f 1982/3290/3745 1182/3302/3745 1938/3278/3745 f 1182/3302/3746 2024/3299/3746 1938/3278/3746 f 2024/3299/3747 1881/3297/3747 1726/3279/3747 f 1881/3298/3748 1947/3303/3748 1873/3300/3748 f 2034/241/3749 1994/3304/3749 1797/2986/3749 f 2024/3305/3750 1947/3303/3750 1881/3298/3750 f 1946/3306/3751 1883/3307/3751 1873/3301/3751 f 1947/3303/3752 1946/3308/3752 1873/3300/3752 f 2024/3309/3753 1946/3310/3753 1947/3311/3753 f 1946/3306/3754 1882/2677/3754 1883/3307/3754 f 1838/1038/3755 2097/3312/3755 1872/1946/3755 f 2097/3312/3756 1982/3290/3756 1872/1946/3756 f 2024/3305/3757 2008/3313/3757 1946/3308/3757 f 1915/3314/3758 1937/1103/3758 1882/2677/3758 f 1946/3306/3759 1915/3314/3759 1882/2677/3759 f 2097/3312/3760 1182/3302/3760 1982/3290/3760 f 1182/3302/3761 1812/3315/3761 2024/3299/3761 f 2024/3299/3762 1812/3315/3762 2008/3316/3762 f 2008/3313/3763 1863/3317/3763 1946/3308/3763 f 1946/3306/3764 1863/3318/3764 1915/3314/3764 f 1371/2881/3765 2106/2748/3765 1565/1306/3765 f 1736/2634/3766 1735/2218/3766 1501/2217/3766 f 1810/1228/3767 1802/1363/3767 1811/1362/3767 f 1870/3319/3768 2106/2748/3768 1937/1103/3768 f 1883/3320/3769 1882/3321/3769 1873/3300/3769 f 1871/2583/3770 1925/2214/3770 1003/3322/3770 f 1847/3323/3771 1182/3302/3771 2097/3312/3771 f 1812/3315/3772 1767/3324/3772 2008/3316/3772 f 1863/3318/3773 1870/3319/3773 1915/3314/3773 f 1870/3319/3774 1937/1103/3774 1915/3314/3774 f 1787/1229/3775 1809/2623/3775 1801/2479/3775 f 1484/3325/3776 1501/3326/3776 1483/3327/3776 f 3455/2042/3777 3478/428/3777 1042/427/3777 f 2357/3328/3778 2064/2209/3778 1990/3329/3778 f 2363/3330/3779 2262/3331/3779 2378/3332/3779 f 1758/2827/3780 1504/2826/3780 1774/3183/3780 f 2820/3333/3781 966/3334/3781 2435/3335/3781 f 1847/3323/3782 1812/3315/3782 1182/3302/3782 f 1767/3336/3783 1737/3337/3783 2008/3313/3783 f 1737/3338/3784 1870/3319/3784 1863/3318/3784 f 2008/3313/3785 1737/3337/3785 1863/3317/3785 f 2284/3339/3786 2211/3340/3786 2310/3341/3786 f 2143/3342/3787 2197/1925/3787 1344/2639/3787 f 1838/1038/3788 1847/3323/3788 2097/3312/3788 f 1727/3343/3789 1906/47/3789 1461/46/3789 f 1595/3072/3790 1572/2150/3790 3276/3070/3790 f 2287/3344/3791 2248/3345/3791 2310/3341/3791 f 1893/2093/3792 1154/364/3792 2084/2321/3792 f 2084/2321/3793 1154/364/3793 2068/1846/3793 f 1847/3323/3794 2023/3346/3794 1812/3315/3794 f 1737/3338/3795 1775/3347/3795 1870/3319/3795 f 2955/3348/3796 2948/2728/3796 2965/2730/3796 f 2214/3349/3797 2383/3350/3797 2188/3351/3797 f 1677/3213/3798 1936/2496/3798 1838/1038/3798 f 1936/2496/3799 1847/3323/3799 1838/1038/3799 f 2023/3346/3800 1984/3352/3800 1812/3315/3800 f 1812/3315/3801 1984/3352/3801 1767/3324/3801 f 1984/3353/3802 2072/3354/3802 1737/3337/3802 f 1767/3336/3803 1984/3353/3803 1737/3337/3803 f 1737/3338/3804 2072/3355/3804 1775/3347/3804 f 2106/2748/3805 1870/3319/3805 1775/3347/3805 f 2363/3330/3806 2379/3356/3806 2262/3331/3806 f 2025/3357/3807 2787/2867/3807 2743/2866/3807 f 2025/3358/3808 2053/3359/3808 2787/3360/3808 f 2053/3359/3809 2073/3361/3809 2787/3360/3809 f 2110/3362/3810 2880/3363/3810 2073/3361/3810 f 3274/3364/3811 1864/3365/3811 1677/3366/3811 f 1677/3213/3812 1864/2497/3812 1936/2496/3812 f 1098/3367/3813 1847/3323/3813 1936/2496/3813 f 2365/3368/3814 2386/3369/3814 2374/3370/3814 f 2345/347/3815 1472/348/3815 2346/1274/3815 f 2686/3371/3816 2633/3372/3816 1950/3373/3816 f 2686/3374/3817 1998/3375/3817 1997/3376/3817 f 2010/3377/3818 2053/3359/3818 2025/3358/3818 f 2053/3359/3819 2089/3378/3819 2073/3361/3819 f 2110/3362/3820 231/3379/3820 1145/3380/3820 f 1507/1196/3821 2677/2326/3821 2153/1194/3821 f 1098/3367/3822 2052/3381/3822 1847/3323/3822 f 1847/3323/3823 2052/3381/3823 2023/3346/3823 f 2072/3355/3824 1821/3382/3824 1775/3347/3824 f 1775/3347/3825 1821/3382/3825 2106/2748/3825 f 2132/3383/3826 2320/3384/3826 2312/3385/3826 f 1929/3386/3827 1998/3375/3827 2686/3374/3827 f 1950/3387/3828 1929/3386/3828 2686/3374/3828 f 1997/3376/3829 1998/3375/3829 2025/3358/3829 f 2025/3358/3830 1998/3375/3830 2010/3377/3830 f 2089/3378/3831 2110/3362/3831 2073/3361/3831 f 3057/1411/3832 3032/3388/3832 2998/2474/3832 f 1984/3353/3833 2095/3389/3833 2072/3354/3833 f 2095/3390/3834 1821/3382/3834 2072/3355/3834 f 2035/3391/3835 2224/3392/3835 2141/770/3835 f 1899/3393/3836 1929/3386/3836 1950/3387/3836 f 2089/3378/3837 2111/3204/3837 2110/3362/3837 f 1912/628/3838 1098/3367/3838 1936/2496/3838 f 1966/3394/3839 2095/3389/3839 1984/3353/3839 f 2023/3346/3840 1966/3395/3840 1984/3352/3840 f 1821/3382/3841 1565/1306/3841 2106/2748/3841 f 1555/2316/3842 1556/3179/3842 1785/589/3842 f 2224/3392/3843 2035/3391/3843 2140/3256/3843 f 2606/3396/3844 1885/3397/3844 1899/3398/3844 f 1899/3393/3845 1917/3399/3845 1929/3386/3845 f 1917/3399/3846 1930/3400/3846 1929/3386/3846 f 1929/3386/3847 1951/3401/3847 1998/3375/3847 f 1951/3401/3848 1999/3402/3848 1998/3375/3848 f 1998/3375/3849 1999/3402/3849 2010/3377/3849 f 1999/3402/3850 2054/3403/3850 2010/3377/3850 f 2054/3403/3851 2074/3404/3851 2053/3359/3851 f 2010/3377/3852 2054/3403/3852 2053/3359/3852 f 2074/3404/3853 2089/3378/3853 2053/3359/3853 f 243/2245/3854 767/3405/3854 1368/2889/3854 f 1098/3367/3855 1983/3406/3855 2052/3381/3855 f 2052/3381/3856 1966/3395/3856 2023/3346/3856 f 1831/937/3857 1839/2181/3857 1818/2303/3857 f 2222/3255/3858 2224/3392/3858 2140/3256/3858 f 2262/3331/3859 2148/3407/3859 2358/1111/3859 f 1856/3408/3860 1876/3409/3860 1885/3410/3860 f 1876/3409/3861 1917/3399/3861 1885/3410/3861 f 1885/3410/3862 1917/3399/3862 1899/3393/3862 f 1930/3400/3863 1951/3401/3863 1929/3386/3863 f 2111/3204/3864 2089/3378/3864 2074/3404/3864 f 350/3411/3865 231/3379/3865 2110/3362/3865 f 2111/3204/3866 350/3411/3866 2110/3362/3866 f 349/3412/3867 2153/3413/3867 231/3414/3867 f 767/1235/3868 1367/3415/3868 1368/3416/3868 f 1983/3406/3869 1098/3367/3869 1912/628/3869 f 1204/163/3870 1349/3417/3870 1707/3105/3870 f 2358/1111/3871 973/3418/3871 2392/3419/3871 f 2148/3407/3872 973/3418/3872 2358/1111/3872 f 1999/3402/3873 2000/3420/3873 2054/3403/3873 f 2099/3421/3874 2111/3204/3874 2074/3404/3874 f 2075/3422/3875 2099/3421/3875 2074/3404/3875 f 349/3423/3876 231/3379/3876 350/3411/3876 f 1755/3424/3877 1912/628/3877 1631/627/3877 f 1755/3424/3878 1983/3406/3878 1912/628/3878 f 1983/3406/3879 2127/3425/3879 2052/3381/3879 f 2052/3381/3880 2127/3425/3880 1966/3395/3880 f 2095/3390/3881 1745/3426/3881 1821/3382/3881 f 1745/3426/3882 14/1912/3882 1565/1306/3882 f 1821/3382/3883 1745/3426/3883 1565/1306/3883 f 2689/1201/3884 2688/1203/3884 2687/1417/3884 f 440/2705/3885 1313/697/3885 439/1377/3885 f 1864/3365/3886 3274/3364/3886 1531/3427/3886 f 531/385/3887 3275/3428/3887 3222/367/3887 f 1787/1229/3888 1801/2479/3888 1765/2630/3888 f 2232/3429/3889 2147/3430/3889 2387/3431/3889 f 1940/3432/3890 1985/3433/3890 1951/3401/3890 f 1930/3400/3891 1940/3432/3891 1951/3401/3891 f 1951/3401/3892 2001/3434/3892 1999/3402/3892 f 1999/3402/3893 2001/3434/3893 2000/3420/3893 f 2000/3420/3894 2075/3422/3894 2054/3403/3894 f 2054/3403/3895 2075/3422/3895 2074/3404/3895 f 350/3411/3896 2111/3204/3896 184/3203/3896 f 1631/627/3897 1448/3435/3897 1755/3424/3897 f 1966/3394/3898 2009/3436/3898 2095/3389/3898 f 2009/3437/3899 1745/3426/3899 2095/3390/3899 f 1579/2522/3900 2058/2158/3900 2045/2155/3900 f 500/1263/3901 1668/1262/3901 1545/1310/3901 f 2200/3264/3902 2203/162/3902 2220/2004/3902 f 2220/2004/3903 2203/162/3903 2382/2005/3903 f 1830/781/3904 3464/20/3904 1197/3438/3904 f 2912/3439/3905 1748/3440/3905 2319/3441/3905 f 1748/3440/3906 1741/3442/3906 2319/3441/3906 f 1748/3440/3907 2233/3443/3907 1741/3442/3907 f 2382/3444/3908 2203/3445/3908 2250/2407/3908 f 1857/3446/3909 1877/3447/3909 1876/3409/3909 f 1856/3408/3910 1857/3446/3910 1876/3409/3910 f 1917/3399/3911 1900/3448/3911 1930/3400/3911 f 1951/3401/3912 1985/3433/3912 2001/3434/3912 f 2001/3434/3913 2011/3449/3913 2000/3420/3913 f 1843/2469/3914 1596/2773/3914 1854/542/3914 f 1532/3450/3915 46/960/3915 37/959/3915 f 1768/3451/3916 2233/3443/3916 1748/3440/3916 f 1768/3451/3917 2276/3452/3917 2233/3443/3917 f 1160/1611/3918 453/1948/3918 384/1609/3918 f 1768/3451/3919 1778/3453/3919 2276/3452/3919 f 1876/3409/3920 1877/3447/3920 1917/3399/3920 f 1900/3448/3921 1940/3432/3921 1930/3400/3921 f 2036/3454/3922 2075/3422/3922 2000/3420/3922 f 2075/3455/3923 2882/2212/3923 2099/3456/3923 f 3189/1637/3924 3188/3457/3924 3152/1638/3924 f 2308/3458/3925 2244/3459/3925 2185/3460/3925 f 1579/2522/3926 1349/3417/3926 2066/2523/3926 f 1722/3157/3927 1768/3451/3927 1748/3440/3927 f 1807/2302/3928 2087/822/3928 1288/2233/3928 f 1917/3399/3929 1877/3447/3929 1900/3448/3929 f 1877/3447/3930 1918/3461/3930 1900/3448/3930 f 1900/3448/3931 1952/3462/3931 1940/3432/3931 f 1940/3432/3932 1952/3462/3932 1985/3433/3932 f 1985/3433/3933 2002/3463/3933 2001/3434/3933 f 2001/3434/3934 2002/3463/3934 2011/3449/3934 f 2011/3449/3935 2036/3454/3935 2000/3420/3935 f 2075/3422/3936 2867/3464/3936 2882/3465/3936 f 229/2463/3937 163/2652/3937 1116/2276/3937 f 2908/3466/3938 2306/3467/3938 2406/3468/3938 f 1983/3406/3939 2086/3469/3939 2127/3425/3939 f 2086/3470/3940 1776/3471/3940 1966/3394/3940 f 2127/3425/3941 2086/3469/3941 1966/3395/3941 f 1966/3394/3942 1776/3471/3942 2009/3436/3942 f 1776/3472/3943 1745/3426/3943 2009/3437/3943 f 2389/3473/3944 2399/3474/3944 2235/3475/3944 f 1888/3476/3945 2307/2426/3945 2167/3477/3945 f 1056/3478/3946 1141/101/3946 561/2361/3946 f 2930/3155/3947 1722/3157/3947 2912/3439/3947 f 1729/3479/3948 1768/3480/3948 1722/3481/3948 f 1729/3479/3949 1779/3482/3949 1768/3480/3949 f 1779/3482/3950 1778/3483/3950 1768/3480/3950 f 1835/1867/3951 1857/3446/3951 1834/1865/3951 f 1835/1867/3952 1850/3484/3952 1857/3446/3952 f 1857/3446/3953 1850/3484/3953 1877/3447/3953 f 2026/3160/3954 2841/3159/3954 2036/3454/3954 f 2011/3449/3955 2026/3160/3955 2036/3454/3955 f 2362/3485/3956 2284/3339/3956 2199/3486/3956 f 3236/1114/3957 1964/3487/3957 1448/3488/3957 f 1448/3435/3958 2022/3489/3958 1755/3424/3958 f 2022/3489/3959 1754/3490/3959 1755/3424/3959 f 1754/3490/3960 1983/3406/3960 1755/3424/3960 f 1754/3490/3961 2086/3469/3961 1983/3406/3961 f 1955/3491/3962 1941/3492/3962 1956/3493/3962 f 188/3494/3963 2145/3495/3963 1939/3496/3963 f 1723/3156/3964 1730/3497/3964 1722/3157/3964 f 1730/3497/3965 1729/3498/3965 1722/3157/3965 f 1749/3499/3966 1779/3500/3966 1729/3498/3966 f 1824/3501/3967 1835/3502/3967 1813/2561/3967 f 1814/2201/3968 1824/3501/3968 1813/2561/3968 f 1824/3503/3969 1836/3504/3969 1835/1867/3969 f 1835/1867/3970 1836/3504/3970 1850/3484/3970 f 1900/3448/3971 1918/3461/3971 1952/3462/3971 f 1985/3433/3972 1952/3462/3972 2002/3463/3972 f 2775/3505/3973 2026/3160/3973 2002/3463/3973 f 2002/3463/3974 2026/3160/3974 2011/3449/3974 f 2775/3505/3975 2809/3158/3975 2026/3160/3975 f 1724/408/3976 2018/2631/3976 1137/2195/3976 f 2018/2631/3977 1879/1574/3977 1137/2195/3977 f 1776/3472/3978 557/3506/3978 1745/3426/3978 f 1745/3426/3979 1714/1913/3979 14/1912/3979 f 982/259/3980 1327/2832/3980 1131/2232/3980 f 2300/3507/3981 1145/3508/3981 231/3414/3981 f 1865/3509/3982 188/3494/3982 1939/3496/3982 f 2908/3510/3983 2907/2457/3983 2413/3511/3983 f 1730/3497/3984 1749/3499/3984 1729/3498/3984 f 1324/2034/3985 232/2161/3985 1460/2035/3985 f 1919/3512/3986 1931/2235/3986 1952/3462/3986 f 1918/3461/3987 1919/3512/3987 1952/3462/3987 f 1952/3462/3988 1931/2235/3988 2002/3463/3988 f 2339/2433/3989 2179/3513/3989 2328/2459/3989 f 2017/2157/3990 2044/2156/3990 3182/562/3990 f 1159/2291/3991 1925/2214/3991 1871/2583/3991 f 2370/2558/3992 2903/2557/3992 2342/3212/3992 f 1964/2128/3993 2105/3514/3993 1448/3435/3993 f 1448/3435/3994 2105/3514/3994 2022/3489/3994 f 3273/3515/3995 1629/3229/3995 3334/3152/3995 f 1136/3516/3996 1333/3517/3996 1350/3097/3996 f 1875/2973/3997 188/3518/3997 1865/2971/3997 f 1750/3519/3998 1749/3499/3998 1730/3497/3998 f 1749/3520/3999 1804/725/3999 1779/727/3999 f 1825/3521/4000 1824/3501/4000 1814/2201/4000 f 1825/3521/4001 1836/3522/4001 1824/3501/4001 f 1836/3504/4002 1840/3523/4002 1850/3484/4002 f 1850/3484/4003 1878/3524/4003 1877/3447/4003 f 1877/3447/4004 1878/3524/4004 1918/3461/4004 f 1931/2235/4005 2703/3525/4005 2002/3463/4005 f 2351/3526/4006 2465/2145/4006 2481/2144/4006 f 1736/2634/4007 1744/2473/4007 1735/2218/4007 f 1765/2630/4008 1772/1046/4008 1744/2477/4008 f 3483/1780/4009 453/1781/4009 3432/2531/4009 f 1765/2630/4010 1801/2479/4010 1772/1046/4010 f 1801/2479/4011 1809/2623/4011 1808/1135/4011 f 1809/2304/4012 1818/2303/4012 1808/1147/4012 f 3469/782/4013 1174/3527/4013 2007/2766/4013 f 2086/3470/4014 2125/3528/4014 1776/3471/4014 f 1776/3472/4015 2125/3529/4015 557/3506/4015 f 557/3506/4016 1961/2924/4016 1745/3426/4016 f 3136/3530/4017 47/99/4017 1056/3478/4017 f 1141/101/4018 1159/2291/4018 1309/2582/4018 f 1742/3531/4019 1730/3497/4019 2949/3532/4019 f 2930/3155/4020 2949/3532/4020 1723/3156/4020 f 1742/3531/4021 1750/3519/4021 1730/3497/4021 f 1791/3533/4022 1804/3534/4022 1749/3499/4022 f 1869/59/4023 1893/2093/4023 1862/174/4023 f 1850/3484/4024 1840/3523/4024 1878/3524/4024 f 1918/3461/4025 1878/3524/4025 1919/3512/4025 f 2703/3525/4026 1969/3535/4026 2002/3463/4026 f 2221/2313/4027 2142/3247/4027 2248/1131/4027 f 1575/590/4028 1785/589/4028 1556/3179/4028 f 1905/2500/4029 1188/1575/4029 1003/3322/4029 f 2063/3536/4030 1754/3490/4030 2022/3489/4030 f 2063/3536/4031 2050/3537/4031 1754/3490/4031 f 2050/3538/4032 2125/3528/4032 2086/3470/4032 f 1754/3490/4033 2050/3537/4033 2086/3469/4033 f 1826/3539/4034 1814/2201/4034 1827/1513/4034 f 2688/1203/4035 2703/3540/4035 2687/1417/4035 f 2669/857/4036 2754/705/4036 3428/759/4036 f 1791/3533/4037 1749/3499/4037 1750/3519/4037 f 1826/3539/4038 1825/3521/4038 1814/2201/4038 f 2294/2202/4039 1814/2201/4039 1804/725/4039 f 1837/3541/4040 1836/3522/4040 1825/3521/4040 f 1826/3542/4041 1837/3543/4041 1825/3544/4041 f 1837/3543/4042 1840/3523/4042 1836/3504/4042 f 2482/2327/4043 2817/1426/4043 2816/2069/4043 f 1128/1576/4044 2121/323/4044 2119/2374/4044 f 1160/3545/4045 3432/2531/4045 453/1781/4045 f 2087/822/4046 1989/1213/4046 1288/2233/4046 f 1884/3546/4047 188/3494/4047 1875/3547/4047 f 1884/3546/4048 1336/3548/4048 188/3494/4048 f 2949/3532/4049 1731/3549/4049 1742/3531/4049 f 3141/2833/4050 3189/1637/4050 3140/1218/4050 f 1840/3523/4051 1858/3550/4051 1878/3524/4051 f 1886/3551/4052 1908/2236/4052 1919/3512/4052 f 1878/3524/4053 1886/3551/4053 1919/3512/4053 f 1919/3512/4054 1908/2236/4054 1931/2235/4054 f 2401/3266/4055 2172/3552/4055 973/3418/4055 f 2259/3553/4056 2895/3554/4056 2368/3555/4056 f 1602/41/4057 3334/3152/4057 1179/82/4057 f 1056/3478/4058 47/99/4058 1141/101/4058 f 1758/2827/4059 1773/2635/4059 1503/2996/4059 f 1733/1047/4060 1770/1090/4060 1757/2328/4060 f 1629/3229/4061 1122/2343/4061 1179/82/4061 f 1629/3229/4062 1269/2342/4062 1122/2343/4062 f 1629/3229/4063 3407/3556/4063 1269/2342/4063 f 2656/805/4064 2668/807/4064 2655/3557/4064 f 1964/2128/4065 1363/3558/4065 2105/3514/4065 f 2126/3559/4066 2022/3489/4066 2105/3514/4066 f 2022/3489/4067 2126/3559/4067 2063/3536/4067 f 2063/3536/4068 2094/3560/4068 2125/3529/4068 f 2050/3538/4069 2063/3561/4069 2125/3528/4069 f 2125/3529/4070 2094/3560/4070 557/3506/4070 f 557/3506/4071 1895/243/4071 1961/2924/4071 f 1520/3029/4072 1753/3063/4072 1743/3087/4072 f 1736/2634/4073 1501/2217/4073 1502/2420/4073 f 1751/3562/4074 1750/3519/4074 1742/3531/4074 f 1751/3562/4075 1780/3563/4075 1750/3519/4075 f 1780/3563/4076 1791/3533/4076 1750/3519/4076 f 1827/1513/4077 1837/3541/4077 1826/3539/4077 f 1841/3564/4078 1840/3523/4078 1837/3543/4078 f 1840/3523/4079 1841/3564/4079 1858/3550/4079 f 1858/3550/4080 1866/2422/4080 1878/3524/4080 f 1878/3524/4081 1866/2422/4081 1886/3551/4081 f 1764/2329/4082 1786/2441/4082 1567/3120/4082 f 1800/1148/4083 1817/177/4083 1799/176/4083 f 1799/176/4084 1798/912/4084 1786/2322/4084 f 2868/2529/4085 2898/2211/4085 2867/2213/4085 f 1363/3558/4086 2126/3559/4086 2105/3514/4086 f 1895/243/4087 1588/2925/4087 1961/2924/4087 f 1948/2825/4088 1875/3547/4088 2144/3565/4088 f 1948/2825/4089 1884/3546/4089 1875/3547/4089 f 1369/2824/4090 1336/3548/4090 1884/3546/4090 f 2407/3566/4091 2907/2457/4091 2906/2458/4091 f 2949/3532/4092 2446/3567/4092 1731/3549/4092 f 1141/101/4093 1309/2582/4093 1325/199/4093 f 1842/3568/4094 1837/3541/4094 1827/1513/4094 f 1842/220/4095 1841/3564/4095 1837/3543/4095 f 1886/3569/4096 1901/3570/4096 1908/1418/4096 f 2283/3571/4097 2337/3572/4097 2368/3555/4097 f 2155/3573/4098 2271/3574/4098 2391/3575/4098 f 1798/912/4099 1799/176/4099 1844/2371/4099 f 1989/1213/4100 1311/2186/4100 2031/2185/4100 f 1846/1200/4101 1619/2365/4101 1845/178/4101 f 57/1367/4102 2061/2696/4102 1296/2577/4102 f 3471/3576/4103 1323/3577/4103 1363/3558/4103 f 1895/243/4104 557/3506/4104 2094/3560/4104 f 1807/2302/4105 2067/708/4105 2087/822/4105 f 2068/1846/4106 2067/708/4106 1807/2302/4106 f 1977/2720/4107 1958/232/4107 2724/1977/4107 f 1369/2824/4108 1884/3546/4108 1948/2825/4108 f 727/352/4109 726/485/4109 492/276/4109 f 1751/3562/4110 1742/3531/4110 1731/3549/4110 f 1792/3578/4111 1791/3533/4111 1780/3563/4111 f 1842/220/4112 1866/2422/4112 1858/3550/4112 f 1841/3564/4113 1842/220/4113 1858/3550/4113 f 2574/222/4114 2581/2423/4114 1842/220/4114 f 1866/2422/4115 2616/2421/4115 1886/3551/4115 f 1886/3551/4116 2616/2421/4116 1901/3579/4116 f 2337/3572/4117 2259/3553/4117 2368/3555/4117 f 1961/2924/4118 1714/1913/4118 1745/3426/4118 f 2212/3580/4119 2368/3555/4119 1048/3581/4119 f 2916/851/4120 2915/3582/4120 2906/2458/4120 f 2274/3295/4121 2247/3583/4121 2350/3584/4121 f 1170/2162/4122 1078/6/4122 1460/2035/4122 f 1288/2233/4123 1989/1213/4123 2031/2185/4123 f 1893/3585/4124 2084/3586/4124 2085/3587/4124 f 3456/400/4125 2007/2766/4125 1323/3048/4125 f 1280/3588/4126 2063/3536/4126 2126/3559/4126 f 2098/3589/4127 1280/3588/4127 2126/3559/4127 f 2063/3536/4128 1280/3588/4128 2094/3560/4128 f 1416/3590/4129 1948/2825/4129 2144/3565/4129 f 2048/322/4130 2069/321/4130 1569/3174/4130 f 2183/1718/4131 2347/1956/4131 214/1716/4131 f 2226/3591/4132 2131/3592/4132 2338/3593/4132 f 3025/3594/4133 3011/3595/4133 3049/3596/4133 f 2055/3597/4134 2078/3598/4134 2077/3599/4134 f 2078/3600/4135 4/3601/4135 2112/3602/4135 f 232/2161/4136 1170/2162/4136 1460/2035/4136 f 1078/6/4137 1170/2162/4137 1095/4/4137 f 2100/2172/4138 1158/2171/4138 1286/2338/4138 f 1128/1576/4139 2119/2374/4139 2104/592/4139 f 1012/2222/4140 991/2378/4140 3468/2223/4140 f 1323/3577/4141 2123/3603/4141 1363/3558/4141 f 2123/3603/4142 1051/3604/4142 2126/3559/4142 f 1363/3558/4143 2123/3603/4143 2126/3559/4143 f 2126/3559/4144 1051/3604/4144 2098/3589/4144 f 1280/3588/4145 2034/241/4145 2094/3560/4145 f 2034/241/4146 1895/243/4146 2094/3560/4146 f 1277/100/4147 1364/3219/4147 931/285/4147 f 1879/1574/4148 1128/1576/4148 2104/592/4148 f 2067/708/4149 2068/1846/4149 2047/593/4149 f 1393/2244/4150 1948/3605/4150 1416/61/4150 f 2552/1854/4151 1023/1856/4151 2544/3606/4151 f 1320/2686/4152 1236/2685/4152 1593/2628/4152 f 1027/3127/4153 3441/870/4153 1111/3607/4153 f 4/3608/4154 1190/3609/4154 1307/3610/4154 f 1190/3611/4155 130/2032/4155 1307/2031/4155 f 2548/271/4156 3450/1786/4156 3449/3612/4156 f 2252/2505/4157 2165/3613/4157 2131/3614/4157 f 2058/2158/4158 2066/2523/4158 2057/219/4158 f 2058/2158/4159 2057/219/4159 2044/2156/4159 f 2897/2566/4160 1923/2461/4160 2882/2212/4160 f 2007/3615/4161 1174/3616/4161 1323/3577/4161 f 1323/3577/4162 1174/3616/4162 2123/3603/4162 f 1280/3588/4163 2098/3589/4163 2034/241/4163 f 1988/272/4164 1968/2750/4164 1284/1909/4164 f 602/3241/4165 2887/250/4165 2813/3242/4165 f 1766/57/4166 1762/407/4166 1981/58/4166 f 2781/3617/4167 2090/3618/4167 2144/3565/4167 f 2090/2173/4168 1416/61/4168 2144/3619/4168 f 1418/63/4169 1393/2244/4169 1416/61/4169 f 1349/3417/4170 2117/306/4170 2066/2523/4170 f 2322/2003/4171 2266/3620/4171 2254/3621/4171 f 2055/3597/4172 2037/3622/4172 2078/3598/4172 f 2030/87/4173 2042/89/4173 2041/1016/4173 f 1324/2034/4174 1459/40/4174 232/2161/4174 f 1534/3131/4175 2897/2566/4175 2898/2211/4175 f 1535/3246/4176 1753/3063/4176 1521/3062/4176 f 1326/2758/4177 1364/3219/4177 1277/100/4177 f 30/2724/4178 2170/2723/4178 1227/28/4178 f 3213/2206/4179 3279/106/4179 3227/2262/4179 f 2090/2173/4180 1433/62/4180 1416/61/4180 f 1122/2343/4181 1178/1662/4181 1179/82/4181 f 1215/421/4182 1995/2188/4182 1762/407/4182 f 1319/200/4183 1995/2188/4183 1215/421/4183 f 561/2361/4184 158/80/4184 1806/79/4184 f 1575/3181/4185 1843/2469/4185 1816/2471/4185 f 2381/3265/4186 2172/3552/4186 2401/3266/4186 f 2167/3477/4187 2244/3623/4187 2309/1132/4187 f 2003/2490/4188 2190/2489/4188 2247/3583/4188 f 2037/3622/4189 2113/3624/4189 2078/3598/4189 f 2078/3598/4190 2113/3624/4190 4/3608/4190 f 1052/3625/4191 130/3626/4191 1190/3609/4191 f 2575/3627/4192 130/2032/4192 1430/3628/4192 f 2061/2696/4193 1713/2980/4193 290/496/4193 f 1719/284/4194 1711/2216/4194 1568/2215/4194 f 2768/3629/4195 1980/3289/4195 2062/2136/4195 f 1927/2870/4196 1569/3174/4196 2069/321/4196 f 1003/3322/4197 1188/1575/4197 2018/2631/4197 f 2066/2523/4198 2083/820/4198 2057/219/4198 f 2117/306/4199 1349/3417/4199 1204/163/4199 f 2204/3630/4200 2147/3263/4200 2322/2003/4200 f 3173/310/4201 3212/2167/4201 3189/1637/4201 f 2390/2830/4202 1970/3631/4202 1362/1261/4202 f 2370/2558/4203 2342/3212/4203 2246/2036/4203 f 2304/3632/4204 2281/3633/4204 2076/3634/4204 f 2168/695/4205 2169/3635/4205 2340/3636/4205 f 2204/3630/4206 2322/2003/4206 2254/3621/4206 f 2167/3477/4207 2610/3637/4207 2244/3623/4207 f 2179/3638/4208 2132/3383/4208 2245/3639/4208 f 2610/3637/4209 1954/3640/4209 2244/3623/4209 f 2055/3641/4210 2854/3077/4210 2037/3642/4210 f 2037/3622/4211 2038/3643/4211 2113/3624/4211 f 2113/3644/4212 2114/3645/4212 4/3601/4212 f 4/3608/4213 2114/3646/4213 1190/3609/4213 f 1052/3625/4214 1430/3647/4214 130/3626/4214 f 2389/3473/4215 2235/3475/4215 1823/3648/4215 f 973/3418/4216 2172/3552/4216 2222/3649/4216 f 2041/1016/4217 2065/821/4217 2082/307/4217 f 1215/421/4218 1088/111/4218 1041/420/4218 f 1579/2522/4219 1707/3105/4219 1349/3417/4219 f 2502/3650/4220 2522/3651/4220 1792/3652/4220 f 1830/3653/4221 2123/3603/4221 1174/3616/4221 f 1135/3654/4222 1763/3655/4222 1051/3604/4222 f 2123/3603/4223 1135/3654/4223 1051/3604/4223 f 1763/3655/4224 2098/3589/4224 1051/3604/4224 f 1763/3655/4225 1994/3304/4225 2034/241/4225 f 2098/3589/4226 1763/3655/4226 2034/241/4226 f 931/285/4227 1568/2215/4227 1159/2291/4227 f 1122/2343/4228 1415/1660/4228 1178/1662/4228 f 1324/2034/4229 1707/3105/4229 1459/40/4229 f 232/2161/4230 1459/40/4230 1138/42/4230 f 2166/3656/4231 1880/3657/4231 2232/3429/4231 f 2872/843/4232 2315/3658/4232 2158/1442/4232 f 2252/2505/4233 1833/3258/4233 2165/3613/4233 f 2502/3659/4234 1792/3578/4234 1780/3563/4234 f 2111/3204/4235 2099/3421/4235 2896/3205/4235 f 3402/3139/4236 3401/3140/4236 3370/685/4236 f 2854/3660/4237 2038/3643/4237 2037/3622/4237 f 2113/3644/4238 2091/3661/4238 2114/3645/4238 f 2114/3646/4239 2130/3662/4239 1190/3609/4239 f 1359/2166/4240 1444/1844/4240 823/142/4240 f 1395/2644/4241 1040/2153/4241 1112/2152/4241 f 2309/1132/4242 2244/3623/4242 2297/1133/4242 f 2348/3663/4243 2224/3392/4243 2222/3255/4243 f 1830/3653/4244 2070/3664/4244 2123/3603/4244 f 2070/3664/4245 1135/3654/4245 2123/3603/4245 f 1759/3665/4246 1604/2931/4246 1896/2159/4246 f 1707/3105/4247 1324/2034/4247 1204/163/4247 f 1874/2713/4248 1903/2919/4248 1598/2991/4248 f 1727/3666/4249 515/3667/4249 1903/3668/4249 f 1871/2583/4250 1003/3322/4250 2018/2631/4250 f 1158/201/4251 1747/81/4251 1286/2340/4251 f 33/446/4252 3350/3669/4252 3332/1653/4252 f 2595/3670/4253 1851/3671/4253 2655/3672/4253 f 1851/3671/4254 1867/3673/4254 2638/3674/4254 f 2655/3672/4255 1851/3671/4255 2638/3674/4255 f 1577/1955/4256 1811/1362/4256 1653/776/4256 f 2003/2490/4257 2247/3583/4257 2274/3295/4257 f 2763/3675/4258 2814/3076/4258 2796/3078/4258 f 1052/3625/4259 1190/3609/4259 2130/3662/4259 f 2998/2474/4260 3032/3388/4260 3033/67/4260 f 3057/1411/4261 3080/3676/4261 3032/3388/4261 f 2340/3677/4262 2169/3678/4262 2386/3369/4262 f 2266/3679/4263 2285/2534/4263 2254/2536/4263 f 2165/3613/4264 1833/3258/4264 2535/2/4264 f 2711/1634/4265 2019/1636/4265 1830/1936/4265 f 2019/3680/4266 2070/3664/4266 1830/3653/4266 f 1773/2169/4267 1787/1229/4267 1765/2630/4267 f 515/2174/4268 1727/3343/4268 1461/46/4268 f 1905/2500/4269 1003/3322/4269 1925/2214/4269 f 1904/3681/4270 1903/3668/4270 1874/3682/4270 f 1904/3681/4271 1727/3666/4271 1903/3668/4271 f 2288/3683/4272 2243/3684/4272 2312/3385/4272 f 2321/3685/4273 1833/3686/4273 2252/3687/4273 f 1955/3491/4274 1956/3493/4274 2763/3688/4274 f 2814/3689/4275 2013/3690/4275 2854/3660/4275 f 2013/3690/4276 2039/3691/4276 2038/3643/4276 f 2854/3660/4277 2013/3690/4277 2038/3643/4277 f 2039/3692/4278 2091/3661/4278 2113/3644/4278 f 2038/3643/4279 2039/3691/4279 2113/3624/4279 f 2114/3646/4280 1306/3693/4280 2130/3662/4280 f 1333/3517/4281 1136/3516/4281 2109/3694/4281 f 2347/1956/4282 2183/1718/4282 2268/2504/4282 f 2366/3695/4283 2308/3458/4283 2213/3696/4283 f 2225/2418/4284 2360/2417/4284 2357/3328/4284 f 1130/2675/4285 2375/3697/4285 2217/3698/4285 f 2070/3664/4286 2020/3699/4286 1135/3654/4286 f 1945/3700/4287 1763/3655/4287 1135/3654/4287 f 1945/3700/4288 1797/2986/4288 1994/3304/4288 f 1763/3655/4289 1945/3700/4289 1994/3304/4289 f 1159/2291/4290 1871/2583/4290 1309/2582/4290 f 1965/3701/4291 1904/3681/4291 1874/3682/4291 f 1906/47/4292 1727/3343/4292 1904/3138/4292 f 1781/3702/4293 1829/3703/4293 2503/3704/4293 f 2595/3705/4294 1829/3706/4294 1851/3707/4294 f 1956/3493/4295 1971/3708/4295 2763/3688/4295 f 2763/3709/4296 1971/3710/4296 2814/3689/4296 f 2013/3690/4297 2028/3711/4297 2039/3691/4297 f 1306/3693/4298 1177/3712/4298 2130/3662/4298 f 1177/3712/4299 1052/3625/4299 2130/3662/4299 f 1177/3712/4300 1186/3713/4300 1052/3625/4300 f 1186/3713/4301 1430/3647/4301 1052/3625/4301 f 984/3714/4302 1333/3517/4302 2109/3694/4302 f 2415/3148/4303 2175/3193/4303 2370/2558/4303 f 2331/10/4304 2362/3485/4304 2399/3474/4304 f 2020/3699/4305 2070/3664/4305 2019/3680/4305 f 2020/3699/4306 2032/3715/4306 1135/3654/4306 f 2124/3716/4307 1797/2986/4307 1945/3700/4307 f 2051/3717/4308 1874/3682/4308 2173/3718/4308 f 2051/3717/4309 1965/3701/4309 1874/3682/4309 f 1896/2159/4310 1904/3138/4310 1965/3719/4310 f 1024/3720/4311 2320/3384/4311 2377/3721/4311 f 1760/3722/4312 1781/3723/4312 2256/3724/4312 f 1782/3725/4313 1781/3726/4313 1760/3727/4313 f 2228/3728/4314 2232/3429/4314 2330/3729/4314 f 2722/3730/4315 1942/3731/4315 1941/3492/4315 f 1942/3731/4316 1962/3732/4316 1956/3493/4316 f 1941/3492/4317 1942/3731/4317 1956/3493/4317 f 1956/3493/4318 1962/3732/4318 1971/3708/4318 f 1971/3710/4319 1972/3733/4319 2814/3689/4319 f 2814/3689/4320 1972/3733/4320 2013/3690/4320 f 2028/3711/4321 2079/3734/4321 2039/3691/4321 f 2079/3734/4322 2092/3735/4322 2091/3736/4322 f 2039/3691/4323 2079/3734/4323 2091/3736/4323 f 2092/3735/4324 1306/3693/4324 2114/3646/4324 f 2091/3736/4325 2092/3735/4325 2114/3646/4325 f 1907/3737/4326 2389/3473/4326 1823/3648/4326 f 2398/2756/4327 2389/3473/4327 1907/3737/4327 f 3307/3738/4328 3215/3739/4328 3281/3740/4328 f 2204/3741/4329 1024/2330/4329 2151/3742/4329 f 2387/3431/4330 2204/3741/4330 2151/3742/4330 f 2960/3049/4331 2952/69/4331 2944/3743/4331 f 2019/1636/4332 1819/3744/4332 2020/3745/4332 f 2032/3746/4333 2020/3745/4333 1819/3744/4333 f 2032/3715/4334 1944/3747/4334 1135/3654/4334 f 1944/3747/4335 2124/3716/4335 1945/3700/4335 f 1135/3654/4336 1944/3747/4336 1945/3700/4336 f 1797/2986/4337 2124/3716/4337 1606/2985/4337 f 2868/2529/4338 2867/2213/4338 2841/1416/4338 f 2330/3729/4339 2198/844/4339 2228/3728/4339 f 2228/3267/4340 2198/160/4340 2200/3264/4340 f 1752/3748/4341 1760/3727/4341 2255/3749/4341 f 2041/1016/4342 2042/89/4342 2065/821/4342 f 1795/3750/4343 1781/3726/4343 1782/3725/4343 f 1795/3751/4344 1829/3703/4344 1781/3702/4344 f 1829/3703/4345 1852/3752/4345 1851/3671/4345 f 2695/3046/4346 1910/2447/4346 2722/3730/4346 f 2722/3753/4347 1910/3754/4347 1942/3755/4347 f 1962/3756/4348 1972/3733/4348 1971/3710/4348 f 1972/3733/4349 2014/3757/4349 2013/3690/4349 f 2013/3690/4350 2014/3757/4350 2028/3711/4350 f 2014/3757/4351 2079/3734/4351 2028/3711/4351 f 1186/3713/4352 984/3714/4352 1430/3647/4352 f 1350/3097/4353 1333/3517/4353 984/3714/4353 f 2781/288/4354 1598/2991/4354 1903/2919/4354 f 2275/2190/4355 2537/3107/4355 2536/2901/4355 f 2237/3758/4356 2318/3759/4356 2176/3760/4356 f 2283/3571/4357 2368/3555/4357 2212/3580/4357 f 2215/2294/4358 2339/2433/4358 2138/2460/4358 f 2132/2438/4359 2179/3513/4359 2339/2433/4359 f 1620/286/4360 931/285/4360 1364/3219/4360 f 2289/3761/4361 2267/3762/4361 2219/3763/4361 f 1832/3764/4362 1819/3765/4362 2838/3766/4362 f 1278/3767/4363 2032/3715/4363 1819/3765/4363 f 3446/22/4364 3508/21/4364 3489/423/4364 f 2689/1201/4365 2687/1417/4365 2652/724/4365 f 2173/3718/4366 1924/3768/4366 2051/3717/4366 f 1759/3769/4367 1965/3701/4367 2051/3717/4367 f 1303/2037/4368 2136/1679/4368 1367/3770/4368 f 1752/3771/4369 2255/3207/4369 2466/3206/4369 f 3185/3772/4370 3224/3773/4370 3196/3774/4370 f 1815/3775/4371 1829/3703/4371 1795/3751/4371 f 1851/3671/4372 1868/3776/4372 1867/3673/4372 f 1889/2448/4373 1910/2447/4373 2695/3046/4373 f 2980/2936/4374 2998/2474/4374 3033/67/4374 f 1942/3731/4375 1943/3777/4375 1962/3732/4375 f 2092/3735/4376 2101/3778/4376 1306/3693/4376 f 2101/3778/4377 1347/3779/4377 1306/3693/4377 f 1347/3779/4378 1177/3712/4378 1306/3693/4378 f 1187/3780/4379 1186/3713/4379 1177/3712/4379 f 1347/3779/4380 1187/3780/4380 1177/3712/4380 f 1822/3781/4381 984/3714/4381 1186/3713/4381 f 1205/3782/4382 1732/3783/4382 2765/3784/4382 f 2318/3759/4383 2245/3639/4383 2176/3760/4383 f 1278/3785/4384 1944/3786/4384 2032/3746/4384 f 1944/3747/4385 2033/3787/4385 2124/3716/4385 f 2033/3787/4386 1606/2985/4386 2124/3716/4386 f 2980/2936/4387 3033/67/4387 2960/3049/4387 f 1790/3788/4388 2051/3717/4388 1924/3768/4388 f 1790/3789/4389 1820/2250/4389 2051/3790/4389 f 1820/3791/4390 1759/3769/4390 2051/3717/4390 f 1965/3719/4391 1759/3665/4391 1896/2159/4391 f 1743/3792/4392 1752/3748/4392 2466/3793/4392 f 1612/2366/4393 1619/2365/4393 1618/2440/4393 f 1815/3775/4394 1852/3752/4394 1829/3703/4394 f 1852/3752/4395 1859/3794/4395 1851/3671/4395 f 1851/3671/4396 1859/3794/4396 1868/3776/4396 f 1921/3795/4397 1943/3777/4397 1942/3731/4397 f 1910/3754/4398 1921/3796/4398 1942/3755/4398 f 1943/3777/4399 1963/3797/4399 1962/3732/4399 f 1963/3798/4400 1972/3733/4400 1962/3756/4400 f 1972/3733/4401 1973/3799/4401 2014/3757/4401 f 2079/3734/4402 2101/3778/4402 2092/3735/4402 f 1822/3781/4403 1350/3097/4403 984/3714/4403 f 551/3800/4404 1144/3801/4404 169/3802/4404 f 1144/3801/4405 1205/3782/4405 169/3802/4405 f 1928/678/4406 2723/653/4406 1732/3803/4406 f 1278/3767/4407 1819/3765/4407 1832/3764/4407 f 1089/3804/4408 1944/3786/4408 1278/3785/4408 f 2021/3805/4409 2033/3787/4409 1944/3747/4409 f 1442/3806/4410 1606/2985/4410 2033/3787/4410 f 1905/2500/4411 1927/2870/4411 2069/321/4411 f 1647/2659/4412 1295/3807/4412 1740/3285/4412 f 1783/3808/4413 1795/3750/4413 1782/3725/4413 f 1921/3795/4414 1922/1940/4414 1943/3777/4414 f 1943/3033/4415 1957/2290/4415 1963/3798/4415 f 1963/3798/4416 1973/3799/4416 1972/3733/4416 f 1973/3799/4417 2004/1177/4417 2014/3757/4417 f 2004/1177/4418 2029/2803/4418 2014/3757/4418 f 2079/3734/4419 2080/3809/4419 2101/3778/4419 f 1347/3779/4420 618/3810/4420 1187/3780/4420 f 1388/3811/4421 1186/3713/4421 1187/3780/4421 f 618/3810/4422 1388/3811/4422 1187/3780/4422 f 1388/3811/4423 1822/3781/4423 1186/3713/4423 f 1822/3812/4424 1405/3813/4424 1350/737/4424 f 1746/3814/4425 1928/3815/4425 1732/3783/4425 f 2386/3369/4426 2169/3678/4426 2323/3816/4426 f 1206/944/4427 1278/3767/4427 1832/3764/4427 f 2856/3817/4428 2059/3818/4428 1924/3768/4428 f 2059/3818/4429 1790/3788/4429 1924/3768/4429 f 1820/2250/4430 1604/2931/4430 1759/3665/4430 f 1774/3189/4431 1789/2707/4431 1773/2169/4431 f 1798/912/4432 1844/2371/4432 1605/540/4432 f 1753/3819/4433 1752/3748/4433 1743/3792/4433 f 1753/3819/4434 1761/3820/4434 1752/3748/4434 f 1796/591/4435 1795/3750/4435 1783/3808/4435 f 1796/3821/4436 1815/3775/4436 1795/3751/4436 f 1796/3821/4437 1816/2471/4437 1815/3775/4437 f 1816/2471/4438 1852/3752/4438 1815/3775/4438 f 2430/3822/4439 2419/2430/4439 2372/3823/4439 f 2926/2970/4440 2925/3824/4440 2915/3582/4440 f 2029/2803/4441 2056/2318/4441 2079/3734/4441 f 2014/3757/4442 2029/2803/4442 2079/3734/4442 f 2079/3734/4443 2056/2318/4443 2080/3809/4443 f 2080/3809/4444 2102/2268/4444 2101/3778/4444 f 2101/3778/4445 2115/3825/4445 1347/3779/4445 f 2107/3096/4446 364/2308/4446 2128/3826/4446 f 2128/3826/4447 364/2308/4447 551/3800/4447 f 364/2308/4448 1144/3801/4448 551/3800/4448 f 1746/3814/4449 1732/3783/4449 1205/3782/4449 f 1935/886/4450 1928/3815/4450 1746/3814/4450 f 2088/3827/4451 2129/3828/4451 1928/678/4451 f 3500/325/4452 1029/2275/4452 3489/753/4452 f 2129/3828/4453 1206/3829/4453 1832/3073/4453 f 1206/944/4454 2122/943/4454 1278/3767/4454 f 1278/3767/4455 2122/943/4455 1089/3830/4455 f 2118/2829/4456 1944/3747/4456 1089/3830/4456 f 2118/2829/4457 2021/3805/4457 1944/3747/4457 f 1439/3831/4458 2033/3787/4458 2021/3805/4458 f 1683/2658/4459 1728/2660/4459 204/3292/4459 f 1816/2471/4460 1853/2470/4460 1852/3752/4460 f 1943/3033/4461 3355/2288/4461 1957/2290/4461 f 1957/3832/4462 3390/3833/4462 1963/3797/4462 f 1963/3798/4463 3390/1375/4463 1973/3799/4463 f 1973/3799/4464 3390/1375/4464 2004/1177/4464 f 2056/2318/4465 2081/2317/4465 2080/3809/4465 f 2102/2268/4466 2115/3825/4466 2101/3778/4466 f 1281/3834/4467 618/3810/4467 1347/3779/4467 f 821/2395/4468 1822/3781/4468 1388/3811/4468 f 821/2395/4469 1151/2306/4469 1405/3095/4469 f 1822/3781/4470 821/2395/4470 1405/3095/4470 f 1151/2306/4471 364/2308/4471 2107/3096/4471 f 1405/3095/4472 1151/2306/4472 2107/3096/4472 f 467/2231/4473 1131/2232/4473 1144/3801/4473 f 364/2308/4474 467/2231/4474 1144/3801/4474 f 1131/2232/4475 1205/3782/4475 1144/3801/4475 f 1327/2832/4476 1746/3814/4476 1205/3782/4476 f 2088/3827/4477 1206/3829/4477 2129/3828/4477 f 2122/943/4478 2118/2829/4478 1089/3830/4478 f 2688/1203/4479 1969/1202/4479 2703/3540/4479 f 1990/3329/4480 2891/3835/4480 2241/3836/4480 f 2059/3818/4481 2856/3817/4481 2159/3837/4481 f 1992/2251/4482 1790/3789/4482 2059/3838/4482 f 1790/3789/4483 1992/2251/4483 1820/2250/4483 f 1537/3114/4484 1555/2316/4484 1536/2813/4484 f 1784/2315/4485 1783/3808/4485 1761/3820/4485 f 1784/2315/4486 1796/591/4486 1783/3808/4486 f 3265/3839/4487 1859/3794/4487 1860/3840/4487 f 2466/3841/4488 2447/3842/4488 1743/3843/4488 f 2593/2977/4489 2607/363/4489 2617/3143/4489 f 2116/2267/4490 2115/3825/4490 2102/2268/4490 f 2115/3825/4491 2116/2267/4491 1347/3779/4491 f 1347/3779/4492 2116/2267/4492 1281/3834/4492 f 1289/2320/4493 618/3810/4493 1281/3834/4493 f 1289/2320/4494 1152/2501/4494 618/3810/4494 f 1152/2501/4495 1414/2336/4495 618/3810/4495 f 1414/2336/4496 1388/3811/4496 618/3810/4496 f 1414/2336/4497 228/5/4497 1388/3811/4497 f 228/5/4498 821/2395/4498 1388/3811/4498 f 1327/2832/4499 1205/3782/4499 1131/2232/4499 f 1327/2832/4500 1935/886/4500 1746/3814/4500 f 833/885/4501 1928/3815/4501 1935/886/4501 f 833/885/4502 2088/187/4502 1928/3815/4502 f 1988/3844/4503 2021/3845/4503 2118/3846/4503 f 1461/46/4504 1463/637/4504 2090/2173/4504 f 1724/408/4505 1871/2583/4505 2018/2631/4505 f 1916/3190/4506 1992/2251/4506 2059/3838/4506 f 1758/2827/4507 1774/3183/4507 1773/2635/4507 f 1535/3093/4508 1761/3820/4508 1753/3819/4508 f 3497/656/4509 3463/300/4509 3490/1009/4509 f 1535/3093/4510 1784/2315/4510 1761/3820/4510 f 1796/3821/4511 1575/3181/4511 1816/2471/4511 f 1852/3752/4512 1853/2470/4512 1859/3794/4512 f 2607/363/4513 2621/1608/4513 2617/3143/4513 f 2029/2803/4514 2040/1017/4514 2056/2318/4514 f 2081/2317/4515 2103/116/4515 2102/2268/4515 f 2080/3809/4516 2081/2317/4516 2102/2268/4516 f 2116/2267/4517 1270/2727/4517 1281/3834/4517 f 1270/2727/4518 1289/2320/4518 1281/3834/4518 f 3361/3847/4519 3422/3848/4519 3383/3849/4519 f 1828/2352/4520 427/696/4520 2168/695/4520 f 2076/2808/4521 2281/3850/4521 2390/2830/4521 f 2304/3632/4522 2214/3851/4522 2281/3633/4522 f 2201/3852/4523 2302/1188/4523 2157/1187/4523 f 2413/3511/4524 2907/2457/4524 2407/3566/4524 f 2384/3853/4525 1221/3854/4525 1219/45/4525 f 2335/1890/4526 1019/3215/4526 1887/1891/4526 f 1835/3855/4527 2515/3856/4527 1813/3857/4527 f 1222/1084/4528 2027/1903/4528 2384/2656/4528 f 216/3858/4529 2283/3571/4529 2243/3859/4529 f 2699/264/4530 2296/3860/4530 2674/265/4530 f 3011/3595/4531 3072/3861/4531 3049/3596/4531 f 2223/1186/4532 2302/1188/4532 2311/3862/4532 f 3146/3863/4533 3132/3864/4533 3119/3865/4533 f 2373/2192/4534 2152/3866/4534 2135/2193/4534 f 2358/1111/4535 2392/3419/4535 2134/1112/4535 f 2153/3413/4536 2237/3758/4536 2176/3760/4536 f 2351/3526/4537 2481/2144/4537 2205/3867/4537 f 2399/3474/4538 2362/3485/4538 2199/3486/4538 f 2257/1927/4539 1932/1334/4539 1166/602/4539 f 985/3868/4540 2161/1082/4540 2027/3249/4540 f 1823/3648/4541 1110/3869/4541 2194/3870/4541 f 2140/3256/4542 2035/3391/4542 2260/3871/4542 f 2295/3872/4543 2599/3873/4543 2329/3874/4543 f 2310/3341/4544 2297/3875/4544 2263/3876/4544 f 2917/849/4545 2916/851/4545 2908/3510/4545 f 3174/2989/4546 3173/310/4546 3141/2833/4546 f 2423/2030/4547 2584/3877/4547 1307/2031/4547 f 3493/399/4548 3440/2538/4548 3475/664/4548 f 2217/3698/4549 2375/3697/4549 2226/3591/4549 f 2301/3878/4550 2179/3638/4550 2318/3759/4550 f 188/3494/4551 2139/3879/4551 2145/3495/4551 f 2342/3212/4552 2903/2557/4552 2900/3211/4552 f 345/94/4553 2400/3880/4553 2362/3485/4553 f 2362/3485/4554 2400/3880/4554 2284/3339/4554 f 1932/1334/4555 1146/425/4555 1166/602/4555 f 2267/3881/4556 2289/1443/4556 2876/2839/4556 f 2338/3882/4557 2131/3614/4557 2165/3613/4557 f 233/3883/4558 2242/2406/4558 2282/2408/4558 f 2392/3419/4559 2260/3884/4559 2134/1112/4559 f 1932/1334/4560 2333/3885/4560 1115/426/4560 f 2333/3886/4561 2385/3887/4561 1079/3888/4561 f 1115/426/4562 2333/3885/4562 1079/2453/4562 f 1079/2453/4563 2385/3889/4563 2329/2540/4563 f 1107/2359/4564 1106/2491/4564 1082/3890/4564 f 1130/2675/4565 2217/3698/4565 2396/2661/4565 f 233/3883/4566 2282/2408/4566 2877/3891/4566 f 2365/3368/4567 2383/3350/4567 2304/3892/4567 f 2365/3893/4568 2304/3894/4568 2076/2808/4568 f 2391/3575/4569 2271/3574/4569 2596/3895/4569 f 2830/2498/4570 2859/2208/4570 1185/2499/4570 f 652/1140/4571 2286/3896/4571 1920/1141/4571 f 2386/3369/4572 2323/3816/4572 2336/2488/4572 f 362/357/4573 2393/636/4573 201/694/4573 f 2246/2036/4574 2342/3212/4574 2335/1890/4574 f 2336/2488/4575 2201/3852/4575 2208/3897/4575 f 2281/3850/4576 2334/2194/4576 2390/2830/4576 f 2178/2552/4577 2184/2880/4577 2164/2553/4577 f 2218/2210/4578 2137/3898/4578 2859/2208/4578 f 2329/2540/4579 1068/2390/4579 1079/2453/4579 f 2190/2489/4580 1920/2416/4580 2225/2418/4580 f 2583/3218/4581 2523/3217/4581 2595/3705/4581 f 2287/2314/4582 2310/3899/4582 2211/3900/4582 f 2247/3583/4583 2190/2489/4583 2225/2418/4583 f 2035/3391/4584 2299/3901/4584 2260/3871/4584 f 2286/3902/4585 2218/2210/4585 2360/2417/4585 f 3227/2262/4586 3305/167/4586 3240/3903/4586 f 2238/3904/4587 1828/2352/4587 2340/3636/4587 f 1828/2352/4588 2168/695/4588 2340/3636/4588 f 2049/3905/4589 2238/3906/4589 2365/3893/4589 f 1060/3907/4590 2469/3908/4590 3422/3848/4590 f 2214/3851/4591 2304/3632/4591 2383/3909/4591 f 2359/3910/4592 2208/3897/4592 2201/3852/4592 f 2360/2417/4593 2218/2210/4593 2064/2209/4593 f 2134/3911/4594 2251/3912/4594 2221/2313/4594 f 2265/3913/4595 2133/3914/4595 2155/3915/4595 f 2815/3250/4596 1221/3916/4596 2384/3248/4596 f 2385/3887/4597 2295/3872/4597 2329/3874/4597 f 2349/3917/4598 2214/3349/4598 1794/3918/4598 f 1653/776/4599 1578/3919/4599 1577/1955/4599 f 2598/3920/4600 2295/3872/4600 2278/3921/4600 f 2373/3922/4601 2214/3349/4601 2349/3917/4601 f 1343/2611/4602 2265/3913/4602 1509/3923/4602 f 1970/3631/4603 2334/2194/4603 2381/3265/4603 f 2049/3905/4604 2365/3893/4604 2076/2808/4604 f 2225/2418/4605 2357/3328/4605 1990/3329/4605 f 2374/3370/4606 2386/3369/4606 2336/2488/4606 f 2353/3924/4607 2245/3639/4607 1048/3925/4607 f 2862/2392/4608 2158/1442/4608 2861/3926/4608 f 3381/684/4609 3402/3139/4609 3370/685/4609 f 201/694/4610 2393/636/4610 2168/695/4610 f 2183/1718/4611 1028/3037/4611 1833/3258/4611 f 1783/3808/4612 1782/3725/4612 1752/3748/4612 f 2323/3816/4613 2190/2489/4613 2336/2488/4613 f 3470/281/4614 3490/1009/4614 870/2400/4614 f 2169/3635/4615 2168/695/4615 837/2427/4615 f 2443/848/4616 2415/3148/4616 2290/846/4616 f 2227/1441/4617 2289/1443/4617 2219/3927/4617 f 2257/1927/4618 2327/3928/4618 1932/1334/4618 f 1932/1334/4619 2327/3928/4619 2333/3885/4619 f 2327/3929/4620 2270/3930/4620 2333/3886/4620 f 1261/29/4621 2180/2641/4621 2206/1128/4621 f 2334/2194/4622 2281/3850/4622 2373/2192/4622 f 2324/3931/4623 1120/126/4623 2277/881/4623 f 2374/3370/4624 2336/2488/4624 2208/3897/4624 f 2270/3930/4625 2385/3887/4625 2333/3886/4625 f 78/811/4626 3218/548/4626 93/804/4626 f 1794/3918/4627 2214/3349/4627 2188/3351/4627 f 1814/2201/4628 1813/2561/4628 2305/3932/4628 f 2921/3933/4629 2936/3934/4629 2929/2508/4629 f 2278/3921/4630 2295/3872/4630 2385/3887/4630 f 2271/3935/4631 1061/517/4631 1055/926/4631 f 2262/3936/4632 2358/3937/4632 2272/3938/4632 f 1102/1171/4633 2133/1684/4633 1114/1172/4633 f 2390/2830/4634 2334/2194/4634 1970/3631/4634 f 2064/2209/4635 2891/3835/4635 1990/3329/4635 f 837/2427/4636 657/2396/4636 2229/1142/4636 f 2398/2756/4637 2361/608/4637 2389/3473/4637 f 2144/1366/4638 1875/2973/4638 2467/289/4638 f 2872/843/4639 2350/3584/4639 2315/3658/4639 f 2399/3474/4640 2199/3486/4640 2235/3475/4640 f 2155/3573/4641 2149/3939/4641 2271/3574/4641 f 456/8/4642 2331/10/4642 2361/608/4642 f 2334/2194/4643 2135/2193/4643 2381/3265/4643 f 2325/3940/4644 2269/3941/4644 2326/3942/4644 f 3279/106/4645 3342/165/4645 3305/167/4645 f 3279/106/4646 3305/167/4646 3227/2262/4646 f 2149/3939/4647 1061/3943/4647 2271/3574/4647 f 2380/3260/4648 2346/1274/4648 2381/3265/4648 f 2331/10/4649 2399/3474/4649 2361/608/4649 f 1114/2605/4650 2133/3914/4650 2265/3913/4650 f 2214/3349/4651 2373/3922/4651 2281/3944/4651 f 2178/2552/4652 977/2543/4652 2697/2542/4652 f 2138/2460/4653 2328/2459/4653 813/1957/4653 f 2257/1927/4654 2192/1926/4654 2327/3928/4654 f 3243/2445/4655 3242/3945/4655 3228/2446/4655 f 2290/846/4656 2415/3148/4656 2370/2558/4656 f 2180/2641/4657 2195/3946/4657 2206/1128/4657 f 3466/1713/4658 2253/3947/4658 3479/1714/4658 f 2201/2331/4659 2003/3948/4659 2191/2332/4659 f 2363/3330/4660 2332/990/4660 2379/3356/4660 f 2132/3383/4661 2312/3385/4661 2245/3639/4661 f 2807/3949/4662 2138/2460/4662 813/1957/4662 f 1907/3737/4663 1823/3648/4663 2375/3697/4663 f 2359/3910/4664 2201/3852/4664 2157/1187/4664 f 2270/3930/4665 2278/3921/4665 2385/3887/4665 f 1916/2410/4666 2159/3837/4666 2171/2411/4666 f 1920/2416/4667 2286/3902/4667 2360/2417/4667 f 1227/28/4668 2170/2723/4668 2180/2641/4668 f 2170/2723/4669 2189/3950/4669 2180/2641/4669 f 2180/2641/4670 2189/3950/4670 2195/3946/4670 f 2195/3951/4671 163/2652/4671 2206/2633/4671 f 1760/3727/4672 1752/3748/4672 1782/3725/4672 f 2228/3728/4673 2147/3430/4673 2232/3429/4673 f 2320/3384/4674 2288/3683/4674 2312/3385/4674 f 2375/3697/4675 1823/3648/4675 2194/3870/4675 f 2171/3952/4676 2170/2723/4676 1449/2725/4676 f 3485/326/4677 3436/1372/4677 1101/2196/4677 f 1048/3581/4678 2317/3953/4678 2300/3954/4678 f 1110/3955/4679 2213/2506/4679 2194/3956/4679 f 2219/3957/4680 2267/3958/4680 2203/162/4680 f 2152/3959/4681 2222/3255/4681 2172/3960/4681 f 2173/3718/4682 2856/3817/4682 1924/3768/4682 f 2076/2808/4683 2390/2830/4683 1361/2816/4683 f 3141/2833/4684 3140/1218/4684 3113/1220/4684 f 3506/1947/4685 1980/3289/4685 2768/3629/4685 f 2171/3961/4686 2181/3962/4686 2170/3963/4686 f 2170/2723/4687 2181/3964/4687 2189/3950/4687 f 2207/3965/4688 2195/3966/4688 2189/3967/4688 f 2207/3965/4689 163/3968/4689 2195/3966/4689 f 2286/3896/4690 1050/2287/4690 2137/2279/4690 f 2188/3351/4691 2208/3897/4691 2359/3910/4691 f 2227/1441/4692 2219/3927/4692 2203/3445/4692 f 2154/3969/4693 1283/2377/4693 1266/2733/4693 f 2135/2193/4694 2152/3866/4694 2172/3552/4694 f 1509/3923/4695 2265/3913/4695 2155/3915/4695 f 1794/3918/4696 2188/3351/4696 2359/3910/4696 f 2300/3954/4697 2317/3953/4697 1145/3970/4697 f 2186/3971/4698 2189/3967/4698 2181/3962/4698 f 2186/3971/4699 2207/3965/4699 2189/3967/4699 f 163/3968/4700 2207/3965/4700 3466/3972/4700 f 2272/3938/4701 2221/2313/4701 2287/2314/4701 f 2272/3938/4702 2287/2314/4702 2211/3900/4702 f 216/3858/4703 2337/3572/4703 2283/3571/4703 f 2236/3973/4704 2310/3341/4704 2263/3876/4704 f 2316/2535/4705 2243/3859/4705 2254/2536/4705 f 2153/3413/4706 2176/3760/4706 231/3414/4706 f 1205/3782/4707 2765/3784/4707 169/3802/4707 f 2498/2525/4708 2193/847/4708 2230/3974/4708 f 2498/2525/4709 2230/3974/4709 2231/3975/4709 f 2856/3817/4710 2181/3976/4710 2171/2411/4710 f 2159/3837/4711 2856/3817/4711 2171/2411/4711 f 2856/3977/4712 2871/3978/4712 2181/3962/4712 f 2871/3978/4713 2186/3971/4713 2181/3962/4713 f 999/3979/4714 2505/3980/4714 2541/3981/4714 f 2226/3591/4715 2375/3697/4715 2194/3870/4715 f 1172/1690/4716 365/145/4716 616/1784/4716 f 2300/3507/4717 231/3414/4717 2176/3760/4717 f 2368/3555/4718 2895/3554/4718 2317/3953/4718 f 3505/353/4719 3476/355/4719 1015/751/4719 f 2859/3982/4720 2137/2279/4720 1203/2278/4720 f 2233/3983/4721 2276/3984/4721 2230/3974/4721 f 2305/3932/4722 2231/2299/4722 2276/2298/4722 f 2379/3356/4723 2401/3266/4723 2148/3407/4723 f 2152/3959/4724 2349/3917/4724 2348/3663/4724 f 2196/3985/4725 2307/2426/4725 2364/2425/4725 f 2807/3949/4726 2209/2292/4726 2215/2294/4726 f 2310/3341/4727 2248/3345/4727 2297/3875/4727 f 2244/3623/4728 2308/3986/4728 2297/1133/4728 f 2221/2313/4729 2251/3912/4729 2142/3247/4729 f 2291/3987/4730 2131/3614/4730 2194/3956/4730 f 3428/759/4731 3504/246/4731 2424/245/4731 f 2318/3988/4732 2237/3989/4732 2301/3990/4732 f 2440/1881/4733 2429/1886/4733 957/2509/4733 f 2179/3513/4734 2301/3990/4734 2328/2459/4734 f 2239/3991/4735 2253/699/4735 2207/3965/4735 f 2199/3992/4736 2284/3993/4736 2236/3994/4736 f 2993/2176/4737 2439/2906/4737 2457/3995/4737 f 2305/3932/4738 1813/2561/4738 2231/2299/4738 f 1110/3955/4739 2366/3996/4739 2213/2506/4739 f 2744/2119/4740 3435/3053/4740 3450/3997/4740 f 2536/2901/4741 2294/2202/4741 2275/2190/4741 f 2152/3959/4742 2373/3922/4742 2349/3917/4742 f 4/3608/4743 1307/3610/4743 2112/3998/4743 f 2961/2937/4744 2980/2936/4744 2960/3049/4744 f 2264/698/4745 2313/3999/4745 3425/313/4745 f 2926/2229/4746 2945/3165/4746 2944/2230/4746 f 1954/3640/4747 2807/3949/4747 813/1957/4747 f 813/1957/4748 2347/1956/4748 1954/3640/4748 f 2244/3623/4749 1954/3640/4749 2185/4000/4749 f 2133/4001/4750 2149/3939/4750 2155/3573/4750 f 1888/3476/4751 1996/2424/4751 2307/2426/4751 f 2252/3687/4752 2268/4002/4752 2321/3685/4752 f 2260/3871/4753 2707/4003/4753 2134/3911/4753 f 30/2724/4754 1227/28/4754 1256/236/4754 f 2268/2504/4755 2183/1718/4755 2321/4004/4755 f 1132/301/4756 870/2400/4756 3451/1929/4756 f 2207/4005/4757 2253/3947/4757 3466/1713/4757 f 2945/4006/4758 2960/3049/4758 2944/3743/4758 f 2642/4007/4759 2314/4008/4759 2376/4009/4759 f 2353/3924/4760 1048/3925/4760 2300/3507/4760 f 2225/2418/4761 1990/3329/4761 2350/3584/4761 f 2498/2525/4762 2477/2524/4762 2443/848/4762 f 2881/4010/4763 2273/4011/4763 1934/4012/4763 f 2273/4011/4764 2367/4013/4764 2296/3860/4764 f 2241/3836/4765 2891/3835/4765 2861/3926/4765 f 2370/2558/4766 2246/2036/4766 2290/846/4766 f 2360/2417/4767 2064/2209/4767 2357/3328/4767 f 2224/3392/4768 2182/768/4768 2141/770/4768 f 2873/4014/4769 2239/3991/4769 2207/3965/4769 f 1082/3890/4770 1106/2491/4770 1087/2516/4770 f 2313/4015/4771 2292/125/4771 2314/4016/4771 f 2367/4013/4772 2273/4011/4772 2881/4010/4772 f 2891/3835/4773 2326/3942/4773 2861/3926/4773 f 2284/3339/4774 2400/3880/4774 2211/3340/4774 f 2361/608/4775 2399/3474/4775 2389/3473/4775 f 763/1493/4776 750/1491/4776 437/2619/4776 f 2151/3742/4777 1024/2330/4777 2209/2292/4777 f 2331/10/4778 345/94/4778 2362/3485/4778 f 2223/1186/4779 2311/3862/4779 2330/3729/4779 f 2314/4008/4780 2343/4017/4780 2376/4009/4780 f 2234/4018/4781 2296/3860/4781 2367/4013/4781 f 1578/3919/4782 1653/776/4782 80/209/4782 f 2866/4019/4783 2317/3953/4783 2895/3554/4783 f 1087/2516/4784 1106/2491/4784 1097/2492/4784 f 2365/4020/4785 2238/3904/4785 2340/3636/4785 f 2213/2506/4786 2252/2505/4786 2291/3987/4786 f 2147/3430/4787 2204/3741/4787 2387/3431/4787 f 2401/3266/4788 973/3418/4788 2148/3407/4788 f 2292/133/4789 2343/4017/4789 2314/4008/4789 f 3223/4021/4790 1498/4022/4790 3224/3773/4790 f 2336/2488/4791 2003/2490/4791 2201/3852/4791 f 2177/4023/4792 2187/4024/4792 2881/4010/4792 f 2881/4010/4793 2187/4024/4793 2367/4013/4793 f 2187/4025/4794 2369/4026/4794 2367/4027/4794 f 1913/4028/4795 2718/4029/4795 2234/4018/4795 f 652/1140/4796 1050/2287/4796 2286/3896/4796 f 233/3883/4797 2285/2534/4797 2266/3679/4797 f 2188/3351/4798 2383/3350/4798 2208/3897/4798 f 2147/3263/4799 2220/2004/4799 2322/2003/4799 f 2200/3264/4800 2198/160/4800 2203/162/4800 f 2143/2636/4801 2192/4030/4801 2197/2637/4801 f 2365/3368/4802 2374/3370/4802 2383/3350/4802 f 558/635/4803 1050/2287/4803 652/1140/4803 f 2376/4009/4804 2388/4031/4804 2177/4023/4804 f 2369/4032/4805 2234/4018/4805 2367/4013/4805 f 2246/2036/4806 2261/1889/4806 2193/847/4806 f 2380/3260/4807 2401/3266/4807 2379/3356/4807 f 2143/2636/4808 1509/3923/4808 2192/4030/4808 f 2288/3683/4809 2254/3621/4809 2243/3684/4809 f 2343/4017/4810 2388/4031/4810 2376/4009/4810 f 2187/4024/4811 2177/4023/4811 2388/4031/4811 f 2258/4033/4812 2234/4018/4812 2369/4032/4812 f 2258/4033/4813 1913/4028/4813 2234/4018/4813 f 2549/1515/4814 1842/3568/4814 1827/1513/4814 f 2176/3760/4815 2353/3924/4815 2300/3507/4815 f 2397/2642/4816 1907/3737/4816 1130/2675/4816 f 633/2052/4817 965/1978/4817 1250/2752/4817 f 2192/4034/4818 1509/4035/4818 2327/3929/4818 f 2250/2407/4819 2203/3445/4819 2267/3881/4819 f 1120/126/4820 2324/3931/4820 2343/127/4820 f 2355/4036/4821 2187/4024/4821 2388/4031/4821 f 2162/4037/4822 2718/4029/4822 1913/4028/4822 f 1833/3258/4823 2321/4004/4823 2183/1718/4823 f 1804/725/4824 2305/3932/4824 1778/726/4824 f 2267/3881/4825 1959/4038/4825 2250/2407/4825 f 2324/3931/4826 2355/4039/4826 2343/127/4826 f 2343/4017/4827 2355/4036/4827 2388/4031/4827 f 1804/725/4828 1791/2191/4828 2294/2202/4828 f 1954/3640/4829 2347/1956/4829 2268/2504/4829 f 2185/4000/4830 1954/3640/4830 2268/2504/4830 f 2288/3683/4831 2204/3630/4831 2254/3621/4831 f 1362/1261/4832 1970/3631/4832 2346/1274/4832 f 2316/2535/4833 216/3858/4833 2243/3859/4833 f 2345/347/4834 2380/3260/4834 2379/3356/4834 f 1075/2550/4835 1263/154/4835 1172/1690/4835 f 2355/4040/4836 1290/4041/4836 2187/4025/4836 f 2187/4025/4837 1290/4041/4837 2369/4026/4837 f 2160/4042/4838 1913/4028/4838 2258/4033/4838 f 427/696/4839 120/494/4839 201/694/4839 f 2225/2418/4840 2350/3584/4840 2247/3583/4840 f 1823/3648/4841 2235/3475/4841 1110/3869/4841 f 2312/3385/4842 2283/4043/4842 2212/4044/4842 f 2263/3876/4843 2297/3875/4843 2308/3458/4843 f 2217/3698/4844 2226/3591/4844 2352/4045/4844 f 2199/3486/4845 2236/3973/4845 1110/3869/4845 f 2324/4046/4846 2356/4047/4846 2355/4036/4846 f 2355/4040/4847 2356/4048/4847 1290/4041/4847 f 1290/4041/4848 1953/4049/4848 2369/4026/4848 f 2369/4032/4849 1949/4050/4849 2258/4033/4849 f 2160/4042/4850 2162/4037/4850 1913/4028/4850 f 2365/3368/4851 2340/3677/4851 2386/3369/4851 f 2236/3973/4852 2263/3876/4852 2366/3695/4852 f 2245/3639/4853 2212/4044/4853 1048/3925/4853 f 1063/4051/4854 1068/4052/4854 2599/3873/4854 f 2781/288/4855 515/2920/4855 2090/4053/4855 f 195/1336/4856 199/1319/4856 178/1320/4856 f 2320/3384/4857 2204/3630/4857 2288/3683/4857 f 1794/3918/4858 2359/3910/4858 2182/768/4858 f 2293/2790/4859 2324/3931/4859 2277/881/4859 f 2293/2790/4860 2356/4054/4860 2324/3931/4860 f 1949/4050/4861 2160/4042/4861 2258/4033/4861 f 2237/3989/4862 2153/1194/4862 2482/2327/4862 f 2271/3574/4863 1055/4055/4863 2596/3895/4863 f 2301/3990/4864 2237/3989/4864 2482/2327/4864 f 2322/2003/4865 2382/2005/4865 2266/3620/4865 f 2272/3938/4866 2358/3937/4866 2221/2313/4866 f 1996/2424/4867 1888/3476/4867 2251/3912/4867 f 2707/4003/4868 2251/3912/4868 2134/3911/4868 f 2860/4056/4869 2770/2225/4869 2269/3941/4869 f 2356/4048/4870 2394/4057/4870 1290/4041/4870 f 2394/4057/4871 1953/4049/4871 1290/4041/4871 f 2280/4058/4872 2369/4032/4872 1953/4059/4872 f 2280/4058/4873 1949/4050/4873 2369/4032/4873 f 2320/4060/4874 2132/2438/4874 2377/2293/4874 f 1130/2675/4875 1907/3737/4875 2375/3697/4875 f 2891/3835/4876 2325/3940/4876 2326/3942/4876 f 2176/3760/4877 2245/3639/4877 2353/3924/4877 f 2400/3880/4878 2378/3332/4878 2211/3340/4878 f 2263/3876/4879 2308/3458/4879 2366/3695/4879 f 2711/1634/4880 1830/1936/4880 2543/1935/4880 f 2293/2745/4881 1223/2741/4881 2356/4048/4881 f 2356/4048/4882 1223/2741/4882 2394/4057/4882 f 2394/4057/4883 2395/4061/4883 1953/4049/4883 f 2146/4062/4884 2160/4042/4884 1949/4050/4884 f 2245/3639/4885 2312/3385/4885 2212/4044/4885 f 2236/3973/4886 2284/3339/4886 2310/3341/4886 f 1833/3258/4887 2060/3/4887 2535/2/4887 f 1509/3923/4888 2155/3915/4888 2327/4063/4888 f 1804/725/4889 1814/2201/4889 2305/3932/4889 f 34/2672/4890 2397/2642/4890 1130/2675/4890 f 2190/2489/4891 2229/4064/4891 1920/2416/4891 f 1223/2741/4892 2395/4061/4892 2394/4057/4892 f 2146/4062/4893 2303/1847/4893 2160/4042/4893 f 1110/3869/4894 2236/3973/4894 2366/3695/4894 f 2332/990/4895 2345/347/4895 2379/3356/4895 f 2155/3573/4896 2270/3930/4896 2327/3929/4896 f 1752/3748/4897 1761/3820/4897 1783/3808/4897 f 2150/4065/4898 2407/3566/4898 2906/2458/4898 f 1318/2599/4899 2265/3913/4899 1343/2611/4899 f 2213/2506/4900 2291/3987/4900 2194/3956/4900 f 1970/3631/4901 2381/3265/4901 2346/1274/4901 f 2391/3575/4902 2278/3921/4902 2270/3930/4902 f 7/1704/4903 3451/1929/4903 3480/1300/4903 f 2707/4003/4904 2364/2425/4904 1996/2424/4904 f 2344/2732/4905 2395/4061/4905 1223/2741/4905 f 1953/4059/4906 1914/4066/4906 2280/4058/4906 f 2156/4067/4907 1949/4050/4907 2280/4058/4907 f 2156/4067/4908 2146/4062/4908 1949/4050/4908 f 2235/3475/4909 2199/3486/4909 1110/3869/4909 f 2378/3332/4910 2272/4068/4910 2211/3340/4910 f 576/1654/4911 3315/4069/4911 3301/4070/4911 f 345/94/4912 2332/990/4912 2363/3330/4912 f 1760/3727/4913 2163/4071/4913 2255/3749/4913 f 2381/3265/4914 2135/2193/4914 2172/3552/4914 f 2872/843/4915 2158/1442/4915 2227/1441/4915 f 2395/4061/4916 1273/4072/4916 1953/4049/4916 f 1273/4072/4917 1914/4073/4917 1953/4049/4917 f 3128/1219/4918 3140/1218/4918 3152/1638/4918 f 2391/3575/4919 2596/3895/4919 2278/3921/4919 f 2397/2642/4920 2398/2756/4920 1907/3737/4920 f 3315/4069/4921 576/1654/4921 3332/1653/4921 f 1249/2614/4922 1454/2132/4922 1436/4074/4922 f 2302/1188/4923 2191/3296/4923 2311/3862/4923 f 2323/3816/4924 2229/4064/4924 2190/2489/4924 f 2152/3959/4925 2348/3663/4925 2222/3255/4925 f 2169/3678/4926 2229/4064/4926 2323/3816/4926 f 2368/3555/4927 2317/3953/4927 1048/3581/4927 f 2202/4075/4928 2146/4062/4928 2156/4067/4928 f 2202/4075/4929 2303/1847/4929 2146/4062/4929 f 2379/3356/4930 2148/3407/4930 2262/3331/4930 f 1794/3918/4931 2224/3392/4931 2348/3663/4931 f 1024/3720/4932 2204/3630/4932 2320/3384/4932 f 2151/3742/4933 2209/2292/4933 2764/4076/4933 f 2003/2490/4934 2274/3295/4934 2191/3296/4934 f 2216/4077/4935 3019/2296/4935 2436/2295/4935 f 2076/2808/4936 1322/2793/4936 2049/3905/4936 f 2224/3392/4937 1794/3918/4937 2182/768/4937 f 2286/3902/4938 2137/3898/4938 2218/2210/4938 f 1318/2599/4939 1114/2605/4939 2265/3913/4939 f 2308/3986/4940 2268/2504/4940 2213/2506/4940 f 1741/4078/4941 2233/3983/4941 2261/1889/4941 f 1760/3727/4942 2256/4079/4942 2163/4071/4942 f 2395/4061/4943 2396/2661/4943 1273/4072/4943 f 1914/4066/4944 2156/4067/4944 2280/4058/4944 f 2240/4080/4945 2202/4075/4945 2156/4067/4945 f 2202/4075/4946 1710/1633/4946 2303/1847/4946 f 2291/3987/4947 2252/2505/4947 2131/3614/4947 f 2503/2146/4948 2256/3724/4948 1781/3723/4948 f 2465/2145/4949 2163/4081/4949 2256/3724/4949 f 2780/2714/4950 1874/2713/4950 1598/2991/4950 f 3002/4082/4951 2216/4077/4951 2436/2295/4951 f 2351/3526/4952 3002/4082/4952 2436/2295/4952 f 2378/3332/4953 2262/3331/4953 2272/4068/4953 f 2344/2732/4954 2396/2661/4954 2395/4061/4954 f 2338/3882/4955 2156/4067/4955 1914/4066/4955 f 2338/3593/4956 2240/4083/4956 2156/4084/4956 f 345/94/4957 2363/3330/4957 2400/3880/4957 f 2169/3635/4958 837/2427/4958 2229/1142/4958 f 2391/3575/4959 2270/3930/4959 2155/3573/4959 f 1959/4038/4960 2267/3881/4960 2876/2839/4960 f 2383/3350/4961 2374/3370/4961 2208/3897/4961 f 1828/2352/4962 2238/3904/4962 2049/2353/4962 f 2242/2406/4963 2266/3679/4963 2382/3444/4963 f 2352/4045/4964 1914/4073/4964 1273/4072/4964 f 2185/4000/4965 2268/2504/4965 2308/3986/4965 f 2864/4085/4966 2259/3553/4966 2354/4086/4966 f 973/3257/4967 2140/3256/4967 2392/4087/4967 f 2226/3591/4968 2194/3870/4968 2131/3592/4968 f 2503/2146/4969 2465/2145/4969 2256/3724/4969 f 7/1704/4970 3480/1300/4970 3509/1702/4970 f 2143/2636/4971 1343/2611/4971 1509/3923/4971 f 2139/1678/4972 1291/1680/4972 2145/2376/4972 f 1336/2888/4973 1368/2889/4973 2139/1678/4973 f 2349/3917/4974 1794/3918/4974 2348/3663/4974 f 2315/3658/4975 1990/3329/4975 2241/3836/4975 f 3211/2168/4976 3212/2167/4976 3226/4088/4976 f 2217/3698/4977 1273/4072/4977 2396/2661/4977 f 1273/4089/4978 2217/4090/4978 2352/4091/4978 f 1914/4066/4979 2352/4091/4979 2338/3882/4979 f 2165/3613/4980 2202/4075/4980 2240/4080/4980 f 2165/3613/4981 2535/2/4981 2202/4075/4981 f 2392/3419/4982 2140/4092/4982 2260/3884/4982 f 2350/3584/4983 1990/3329/4983 2315/3658/4983 f 2312/3385/4984 2243/3684/4984 2283/4043/4984 f 2337/3572/4985 2354/4086/4985 2259/3553/4985 f 3288/2449/4986 3337/4093/4986 1921/3795/4986 f 2205/3867/4987 2994/4094/4987 2351/3526/4987 f 2145/2376/4988 1283/2377/4988 2154/3969/4988 f 2318/3759/4989 2179/3638/4989 2245/3639/4989 f 2315/3658/4990 2241/3836/4990 2158/1442/4990 f 2352/4091/4991 2226/4095/4991 2338/3882/4991 f 2338/3593/4992 2165/4096/4992 2240/4083/4992 f 2363/3330/4993 2378/3332/4993 2400/3880/4993 f 3473/1107/4994 3458/1446/4994 3481/1108/4994 f 2575/3627/4995 1430/3628/4995 2109/4097/4995 f 2445/4098/4996 2177/4023/4996 2881/4010/4996 f 1793/1518/4997 2408/4099/4997 2829/3163/4997 f 2436/2295/4998 2425/3192/4998 2163/4081/4998 f 1657/649/4999 1662/651/4999 1136/4100/4999 f 1473/2666/5000 2109/4097/5000 2799/4101/5000 f 2422/2070/5001 2479/4102/5001 1675/2665/5001 f 956/4103/5002 957/2509/5002 2429/1886/5002 f 2792/1399/5003 2845/4104/5003 2812/371/5003 f 2870/3091/5004 1700/4105/5004 2886/4106/5004 f 2479/4102/5005 2855/4107/5005 1473/2666/5005 f 2799/4101/5006 1702/4108/5006 2435/3335/5006 f 1473/2666/5007 2799/4101/5007 2699/264/5007 f 58/211/5008 23/783/5008 59/755/5008 f 2886/4106/5009 1700/4105/5009 2885/4109/5009 f 2427/4110/5010 2425/3192/5010 2426/4111/5010 f 2699/264/5011 2799/4101/5011 2210/4112/5011 f 2625/650/5012 2421/4113/5012 2752/4114/5012 f 2210/4112/5013 2799/4101/5013 2435/3335/5013 f 1038/4115/5014 2596/3895/5014 1055/4055/5014 f 2506/1595/5015 1020/2394/5015 1009/1596/5015 f 2874/4116/5016 2871/3978/5016 2818/3019/5016 f 2818/3019/5017 2871/3978/5017 2856/3977/5017 f 2409/3185/5018 2905/4117/5018 2904/3186/5018 f 1038/4115/5019 2576/4118/5019 2596/3895/5019 f 3288/2449/5020 1921/3795/5020 1910/2447/5020 f 2077/4119/5021 2078/3600/5021 2112/3602/5021 f 2584/3877/5022 2423/2030/5022 2479/4102/5022 f 3212/2167/5023 3227/2262/5023 3226/4088/5023 f 2576/4118/5024 2597/4120/5024 2596/3895/5024 f 2275/2190/5025 2522/4121/5025 2537/3107/5025 f 2710/4122/5026 2779/3187/5026 2820/3333/5026 f 2676/4123/5027 2718/4029/5027 2162/4037/5027 f 1902/4124/5028 2112/3602/5028 2584/3877/5028 f 2609/266/5029 2879/679/5029 2434/267/5029 f 3195/1932/5030 3218/1934/5030 3194/4125/5030 f 2541/3981/5031 2576/4118/5031 1038/4115/5031 f 2434/267/5032 2879/679/5032 2838/1635/5032 f 3469/782/5033 1830/781/5033 1174/3527/5033 f 2541/3981/5034 2550/4126/5034 2576/4118/5034 f 2550/4126/5035 2597/4120/5035 2576/4118/5035 f 3498/1197/5036 2783/3021/5036 1674/1198/5036 f 3057/1411/5037 3100/4127/5037 3080/3676/5037 f 3236/1114/5038 1448/3488/5038 1631/4128/5038 f 2706/3201/5039 2705/4129/5039 2636/4130/5039 f 1496/4131/5040 2489/2898/5040 2644/4132/5040 f 2033/4133/5041 1439/273/5041 1442/2571/5041 f 959/576/5042 2483/2073/5042 978/450/5042 f 2796/4134/5043 2012/2349/5043 2795/2348/5043 f 1072/4135/5044 2602/4136/5044 1082/3890/5044 f 2698/4137/5045 2674/265/5045 2676/4123/5045 f 1697/311/5046 3425/313/5046 2642/4007/5046 f 2505/3980/5047 2525/4138/5047 2541/3981/5047 f 2541/3981/5048 2525/4138/5048 2550/4126/5048 f 2598/3920/5049 2597/4120/5049 2550/4126/5049 f 2565/4139/5050 2598/3920/5050 2550/4126/5050 f 2983/528/5051 3025/2485/5051 3048/4140/5051 f 966/3334/5052 1934/4012/5052 2888/4141/5052 f 2722/3730/5053 2721/732/5053 2695/3046/5053 f 959/576/5054 960/2177/5054 2483/2073/5054 f 2564/3188/5055 2600/268/5055 1987/4142/5055 f 2763/3675/5056 2796/3078/5056 2751/4143/5056 f 1842/220/5057 2581/2423/5057 1866/2422/5057 f 1231/183/5058 1232/182/5058 1099/2781/5058 f 2763/3675/5059 2751/4143/5059 1955/4144/5059 f 2751/4145/5060 2795/4146/5060 2778/4147/5060 f 2483/2073/5061 2484/4148/5061 2505/1990/5061 f 2505/3980/5062 2484/4149/5062 2525/4138/5062 f 2525/4138/5063 2565/4139/5063 2550/4126/5063 f 1700/4105/5064 1911/3090/5064 1892/4150/5064 f 2748/4151/5065 2761/238/5065 2790/240/5065 f 2792/1399/5066 2812/371/5066 2791/239/5066 f 2672/4152/5067 2592/648/5067 2670/1761/5067 f 1173/2270/5068 1050/2287/5068 558/635/5068 f 2658/2884/5069 2693/2670/5069 2692/2671/5069 f 2525/4138/5070 2542/4153/5070 2565/4139/5070 f 2565/4139/5071 2577/4154/5071 2598/3920/5071 f 2577/4154/5072 2599/3873/5072 2598/3920/5072 f 2598/3920/5073 2599/3873/5073 2295/3872/5073 f 2901/4155/5074 2175/3184/5074 2904/3186/5074 f 2417/4156/5075 592/3226/5075 1676/3225/5075 f 2905/4117/5076 1909/4157/5076 2906/2458/5076 f 2498/2039/5077 2231/2299/5077 2515/2040/5077 f 1909/4157/5078 2905/4117/5078 2409/3185/5078 f 3030/4158/5079 3019/4159/5079 3020/4160/5079 f 1887/1891/5080 1019/3215/5080 2902/2487/5080 f 2154/4161/5081 1939/3496/5081 2145/3495/5081 f 2036/3454/5082 2841/3159/5082 2867/3464/5082 f 2484/4149/5083 2542/4153/5083 2525/4138/5083 f 2542/4153/5084 2566/4162/5084 2565/4139/5084 f 2566/4162/5085 2577/4154/5085 2565/4139/5085 f 2752/4114/5086 2710/4122/5086 2820/3333/5086 f 2827/4163/5087 2828/373/5087 2843/4164/5087 f 2676/4123/5088 2674/265/5088 2718/4029/5088 f 2428/97/5089 2437/4165/5089 2427/4166/5089 f 1350/737/5090 1657/649/5090 1136/4100/5090 f 2601/2264/5091 2421/4113/5091 2625/650/5091 f 2601/2264/5092 2753/652/5092 2421/4113/5092 f 2752/4114/5093 2820/3333/5093 2435/3335/5093 f 2778/4147/5094 2750/733/5094 2733/4167/5094 f 2734/4168/5095 2778/4147/5095 2733/4167/5095 f 1891/4169/5096 1769/252/5096 2489/2898/5096 f 2811/4170/5097 2828/373/5097 2827/4163/5097 f 966/3334/5098 2820/3333/5098 2779/3187/5098 f 3034/4171/5099 3058/4172/5099 3024/292/5099 f 2437/4165/5100 2447/4173/5100 2455/3208/5100 f 2427/4166/5101 2437/4165/5101 2455/3208/5101 f 2752/4114/5102 2435/3335/5102 1702/4108/5102 f 960/4174/5103 2486/4175/5103 2484/4149/5103 f 2486/4175/5104 2485/4176/5104 2484/4149/5104 f 2484/4149/5105 2485/4176/5105 2542/4153/5105 f 2566/4162/5106 1063/4051/5106 2577/4154/5106 f 1063/4051/5107 2599/3873/5107 2577/4154/5107 f 2415/3148/5108 2443/848/5108 2452/4177/5108 f 2753/652/5109 2645/4178/5109 2421/4113/5109 f 2753/652/5110 2640/654/5110 2645/4178/5110 f 2778/4179/5111 2794/4180/5111 2750/206/5111 f 1769/252/5112 1891/4169/5112 1911/3090/5112 f 169/4181/5113 2765/4182/5113 2601/2264/5113 f 2644/4132/5114 2848/4183/5114 2641/4184/5114 f 2641/4184/5115 2848/4183/5115 2453/4185/5115 f 2453/4185/5116 2698/4137/5116 2676/4123/5116 f 2699/264/5117 2210/4112/5117 2296/3860/5117 f 2848/4183/5118 2459/2071/5118 2698/4137/5118 f 2517/2072/5119 2459/2071/5119 2848/4183/5119 f 1934/4012/5120 2445/4098/5120 2881/4010/5120 f 2645/4178/5121 2640/654/5121 2609/266/5121 f 2853/4186/5122 602/3241/5122 2846/3243/5122 f 2887/250/5123 1769/252/5123 1911/3090/5123 f 2706/3201/5124 2636/4130/5124 2668/807/5124 f 2884/4187/5125 1686/3227/5125 1991/4188/5125 f 2883/4189/5126 2884/4187/5126 1991/4188/5126 f 2640/654/5127 2879/679/5127 2609/266/5127 f 2485/4176/5128 2566/4162/5128 2542/4153/5128 f 1964/2128/5129 3439/2130/5129 3471/3576/5129 f 2566/4162/5130 1057/4190/5130 1063/4051/5130 f 967/1517/5131 1611/4191/5131 1890/4192/5131 f 1892/4150/5132 1496/4131/5132 2417/4156/5132 f 1496/4131/5133 2641/4184/5133 2417/4156/5133 f 2777/4193/5134 2813/3242/5134 2776/1398/5134 f 2584/3877/5135 2567/3106/5135 1703/251/5135 f 1902/4124/5136 2584/3877/5136 1703/251/5136 f 2993/2176/5137 2457/3995/5137 2486/4194/5137 f 2485/4176/5138 2551/4195/5138 2566/4162/5138 f 2551/4195/5139 1057/4190/5139 2566/4162/5139 f 602/3241/5140 1902/4124/5140 1703/251/5140 f 1700/4105/5141 1892/4150/5141 1676/3225/5141 f 2299/3901/5142 2707/4003/5142 2260/3871/5142 f 2645/4178/5143 2609/266/5143 2600/268/5143 f 2788/4196/5144 2842/4197/5144 2810/253/5144 f 3371/683/5145 3370/685/5145 3359/4198/5145 f 2675/4199/5146 2160/4042/5146 2303/1847/5146 f 2425/3192/5147 2455/4200/5147 2163/4081/5147 f 2595/3670/5148 2523/4201/5148 1829/3703/5148 f 2780/2714/5149 2798/3235/5149 2173/2712/5149 f 2638/3674/5150 2657/4202/5150 2655/3672/5150 f 2657/4202/5151 2656/4203/5151 2655/3672/5151 f 2457/3000/5152 2485/4176/5152 2486/4175/5152 f 1393/2244/5153 1407/2700/5153 243/2245/5153 f 1700/4105/5154 1676/3225/5154 2885/4109/5154 f 1221/3916/5155 2815/3250/5155 2249/4204/5155 f 2457/3000/5156 2487/4205/5156 2485/4176/5156 f 2487/4205/5157 2526/4206/5157 2485/4176/5157 f 2526/4206/5158 2551/4195/5158 2485/4176/5158 f 1675/2665/5159 2479/4102/5159 1473/2666/5159 f 1911/3090/5160 1891/4169/5160 1892/4150/5160 f 2844/372/5161 2886/4106/5161 2843/4164/5161 f 2842/4197/5162 2883/4189/5162 2869/1415/5162 f 2791/239/5163 2828/373/5163 2811/4170/5163 f 2790/240/5164 2791/239/5164 2811/4170/5164 f 1407/2743/5165 620/1234/5165 243/1236/5165 f 999/3979/5166 2541/3981/5166 1038/4115/5166 f 2439/2906/5167 2993/2176/5167 955/2175/5167 f 2749/3057/5168 2761/238/5168 2748/4151/5168 f 1849/3270/5169 2499/1081/5169 2651/4207/5169 f 2567/3106/5170 2584/3877/5170 2422/2070/5170 f 2526/4206/5171 2527/4208/5171 2551/4195/5171 f 2582/3079/5172 2561/2976/5172 2538/3058/5172 f 2253/699/5173 2696/953/5173 2264/698/5173 f 3214/4209/5174 3228/813/5174 3197/4210/5174 f 3362/4211/5175 3348/2147/5175 3377/2567/5175 f 3383/3849/5176 3422/3848/5176 3421/4212/5176 f 984/4213/5177 2109/4097/5177 1430/3628/5177 f 2626/4214/5178 2623/4215/5178 1933/4216/5178 f 1849/3270/5179 2815/3250/5179 2499/1081/5179 f 2439/2906/5180 2992/1879/5180 2457/3995/5180 f 2457/3000/5181 2468/3002/5181 2487/4205/5181 f 2025/3357/5182 2743/2866/5182 1997/4217/5182 f 2873/4014/5183 2186/3971/5183 2782/4218/5183 f 2860/4056/5184 2859/2208/5184 2830/2498/5184 f 2859/2208/5185 2860/4056/5185 2064/2209/5185 f 2313/3999/5186 2264/698/5186 2696/953/5186 f 2730/1267/5187 2745/4219/5187 2810/253/5187 f 2112/3602/5188 1902/4124/5188 602/3241/5188 f 2527/4208/5189 2526/4206/5189 1007/4220/5189 f 2112/3602/5190 602/3241/5190 2853/4186/5190 f 2726/4221/5191 2670/1761/5191 1674/1198/5191 f 2692/4222/5192 2691/806/5192 2656/805/5192 f 2799/4101/5193 1136/4100/5193 1702/4108/5193 f 3227/2262/5194 3240/3903/5194 3226/4088/5194 f 2747/4223/5195 2811/4170/5195 2789/4224/5195 f 2811/4170/5196 2827/4163/5196 2789/4224/5196 f 2659/2882/5197 2639/4225/5197 2660/3047/5197 f 3435/3053/5198 1894/383/5198 3442/1953/5198 f 2796/4134/5199 2854/3660/5199 2012/2349/5199 f 2129/3828/5200 1832/3073/5200 1928/678/5200 f 2660/3047/5201 2694/2883/5201 2659/2882/5201 f 3511/1762/5202 1674/1198/5202 2670/1761/5202 f 2454/845/5203 2198/844/5203 2330/3729/5203 f 2690/4226/5204 2747/4223/5204 2746/4227/5204 f 2860/4056/5205 2325/3940/5205 2064/2209/5205 f 2548/271/5206 3461/270/5206 2808/4228/5206 f 2608/4229/5207 2562/4230/5207 2563/4231/5207 f 2636/4130/5208 2654/4232/5208 2635/4233/5208 f 2658/4234/5209 2692/4222/5209 2657/4235/5209 f 3188/3457/5210 3189/1637/5210 3211/2168/5210 f 2847/4236/5211 2853/4186/5211 2846/3243/5211 f 1905/2500/5212 1711/2216/5212 1927/2870/5212 f 2488/532/5213 2487/4205/5213 2468/3002/5213 f 1329/2726/5214 1713/2980/5214 1649/3214/5214 f 2795/4237/5215 2847/4236/5215 2794/4180/5215 f 2845/4104/5216 2886/4106/5216 2844/372/5216 f 551/4238/5217 2601/2264/5217 1666/736/5217 f 2636/4130/5218 2690/4226/5218 2654/4232/5218 f 2292/125/5219 2313/4015/5219 2696/580/5219 f 2859/2208/5220 1203/4239/5220 1185/2499/5220 f 2325/3940/5221 2891/3835/5221 2064/2209/5221 f 2883/4189/5222 1991/4188/5222 2899/4240/5222 f 2502/3650/5223 2539/4241/5223 2522/3651/5223 f 1751/4242/5224 2464/1921/5224 2502/3650/5224 f 2732/4243/5225 2731/1400/5225 2719/3202/5225 f 2459/2071/5226 2735/263/5226 2698/4137/5226 f 1867/3673/5227 2658/4244/5227 2638/3674/5227 f 2351/3526/5228 2436/2295/5228 2465/2145/5228 f 2659/2882/5229 2658/2884/5229 1867/4245/5229 f 2992/3001/5230 2440/4246/5230 2468/3002/5230 f 2468/3002/5231 2458/530/5231 2488/532/5231 f 2585/4247/5232 1060/3907/5232 3422/3848/5232 f 2249/4248/5233 1849/3272/5233 2341/4249/5233 f 1082/3890/5234 2602/4136/5234 2662/2367/5234 f 2505/1990/5235 988/448/5235 2483/2073/5235 f 2636/4130/5236 2635/4233/5236 2618/4250/5236 f 2595/3705/5237 2655/3557/5237 2608/4229/5237 f 2658/4234/5238 2657/4235/5238 2638/4251/5238 f 1082/3890/5239 2662/2367/5239 1107/2359/5239 f 603/4252/5240 592/3226/5240 1508/4253/5240 f 2734/4168/5241 2721/732/5241 2722/3730/5241 f 1125/2226/5242 2713/2358/5242 2784/2224/5242 f 2326/3942/5243 2269/3941/5243 2784/2224/5243 f 37/959/5244 1490/1412/5244 1532/3450/5244 f 3499/1910/5245 3424/1002/5245 3426/1004/5245 f 2827/4163/5246 2842/4197/5246 2788/4196/5246 f 2789/4224/5247 2827/4163/5247 2788/4196/5247 f 2608/4229/5248 2637/4254/5248 2618/4250/5248 f 2827/4163/5249 2843/4164/5249 2883/4189/5249 f 2595/3705/5250 2608/4229/5250 2583/3218/5250 f 2501/2757/5251 3434/869/5251 2839/1640/5251 f 2624/3013/5252 566/3014/5252 2445/4098/5252 f 2440/4246/5253 2458/530/5253 2468/3002/5253 f 1715/3017/5254 210/1284/5254 1539/70/5254 f 2912/4255/5255 2319/4256/5255 2371/2486/5255 f 1650/1311/5256 512/1353/5256 511/1302/5256 f 2713/2358/5257 2700/4257/5257 2784/2224/5257 f 2755/4258/5258 2326/3942/5258 2784/2224/5258 f 2621/4259/5259 1908/2236/5259 1901/3579/5259 f 1116/2276/5260 3466/1713/5260 3488/1712/5260 f 2562/4230/5261 2618/4250/5261 2582/3079/5261 f 1933/4216/5262 2408/4099/5262 603/4252/5262 f 1955/4144/5263 2751/4143/5263 1941/4260/5263 f 3360/4261/5264 3383/3849/5264 3421/4212/5264 f 2506/4262/5265 2528/4263/5265 1023/1856/5265 f 1023/1856/5266 2528/4263/5266 2544/3606/5266 f 1072/2261/5267 2552/701/5267 2544/4264/5267 f 2432/4265/5268 2412/4266/5268 2406/3468/5268 f 1686/3227/5269 592/3226/5269 603/4252/5269 f 2662/2367/5270 2700/4257/5270 2713/2358/5270 f 2700/4257/5271 2755/4258/5271 2784/2224/5271 f 2831/4267/5272 2326/3942/5272 2755/4258/5272 f 1890/4192/5273 603/4252/5273 2408/4099/5273 f 2890/1848/5274 1933/4216/5274 2675/4199/5274 f 2591/3020/5275 2672/4152/5275 2726/4221/5275 f 2779/3187/5276 2624/3013/5276 2445/4098/5276 f 2990/2560/5277 2429/1886/5277 2440/1881/5277 f 1598/2991/5278 2781/288/5278 215/2844/5278 f 2445/4098/5279 566/3014/5279 2177/4023/5279 f 1145/3380/5280 2880/3363/5280 2110/3362/5280 f 2027/3249/5281 2161/1082/5281 2499/1081/5281 f 2988/4268/5282 2987/4269/5282 2966/4270/5282 f 2326/3942/5283 2831/4267/5283 2861/3926/5283 f 2828/373/5284 2844/372/5284 2843/4164/5284 f 2873/4014/5285 2207/3965/5285 2186/3971/5285 f 1880/3657/5286 2223/1186/5286 2232/3429/5286 f 3221/4271/5287 47/99/5287 3136/3530/5287 f 1898/2134/5288 1272/3261/5288 2852/4272/5288 f 2747/4223/5289 2789/4224/5289 2746/4227/5289 f 2608/4229/5290 2618/4250/5290 2562/4230/5290 f 2734/4168/5291 2733/4167/5291 2721/732/5291 f 2840/4273/5292 2641/4184/5292 2623/4215/5292 f 2710/4122/5293 2564/3188/5293 2779/3187/5293 f 2751/4145/5294 2778/4147/5294 1941/3492/5294 f 2855/4107/5295 2575/3627/5295 1473/2666/5295 f 2506/4262/5296 2507/4274/5296 2528/4263/5296 f 2528/4275/5297 2568/4276/5297 2544/4264/5297 f 2568/4277/5298 2602/4136/5298 1072/4135/5298 f 2627/4278/5299 2678/4279/5299 2700/4280/5299 f 2662/4281/5300 2627/4278/5300 2700/4280/5300 f 2700/4257/5301 2756/4282/5301 2755/4258/5301 f 2618/4250/5302 2635/4233/5302 2622/4283/5302 f 2690/4226/5303 2704/3102/5303 2622/4283/5303 f 2635/4233/5304 2654/4232/5304 2622/4283/5304 f 2582/3079/5305 2618/4250/5305 2622/4283/5305 f 2645/4178/5306 2564/3188/5306 2710/4122/5306 f 2731/1400/5307 2749/3057/5307 2719/3202/5307 f 2393/636/5308 837/2427/5308 2168/695/5308 f 2545/4284/5309 2553/4285/5309 2568/4277/5309 f 2528/4263/5310 2545/4284/5310 2568/4277/5310 f 2553/4285/5311 2627/4286/5311 2602/4136/5311 f 2678/4287/5312 2679/4288/5312 2700/4257/5312 f 2679/4288/5313 2756/4282/5313 2700/4257/5313 f 2771/4289/5314 2831/4267/5314 2755/4258/5314 f 2756/4282/5315 2771/4289/5315 2755/4258/5315 f 2274/3295/5316 2350/3584/5316 2872/843/5316 f 2591/3020/5317 2798/3235/5317 2672/4152/5317 f 1662/651/5318 2625/650/5318 1702/4108/5318 f 2829/3163/5319 1933/4216/5319 2890/1848/5319 f 2139/3879/5320 188/3494/5320 1336/3548/5320 f 2775/3505/5321 2002/3463/5321 1969/3535/5321 f 1868/4290/5322 2639/4225/5322 1867/4245/5322 f 2564/3188/5323 2645/4178/5323 2600/268/5323 f 2077/4119/5324 2112/3602/5324 2853/4186/5324 f 2695/3046/5325 2694/2883/5325 2660/3047/5325 f 1780/3563/5326 1751/3562/5326 2502/3659/5326 f 2507/4274/5327 2545/4284/5327 2528/4263/5327 f 2568/4277/5328 2553/4285/5328 2602/4136/5328 f 2771/4289/5329 2832/4291/5329 2831/4267/5329 f 3372/2414/5330 3371/683/5330 3342/165/5330 f 989/2325/5331 2488/4292/5331 979/2380/5331 f 2516/3216/5332 2503/2146/5332 2523/3217/5332 f 2624/3013/5333 2564/3188/5333 1987/4142/5333 f 2490/4293/5334 2508/4294/5334 2507/4274/5334 f 2508/4294/5335 2518/4295/5335 2507/4274/5335 f 2507/4274/5336 2518/4295/5336 2545/4284/5336 f 2586/4296/5337 2627/4286/5337 2553/4285/5337 f 2586/4296/5338 2663/4297/5338 2627/4286/5338 f 2627/4286/5339 2663/4297/5339 2678/4287/5339 f 2678/4287/5340 2663/4297/5340 2679/4288/5340 f 2831/4267/5341 2832/4291/5341 2861/3926/5341 f 2832/4291/5342 2862/2392/5342 2861/3926/5342 f 396/152/5343 1442/2571/5343 1439/273/5343 f 2562/4230/5344 2582/3079/5344 2538/3058/5344 f 2660/3047/5345 3253/4298/5345 1889/2448/5345 f 2483/2073/5346 960/2177/5346 2484/4148/5346 f 2745/4219/5347 2788/4196/5347 2810/253/5347 f 2480/1920/5348 2503/2146/5348 2516/3216/5348 f 3506/91/5349 3444/93/5349 3510/1467/5349 f 2455/3208/5350 2447/4173/5350 2466/3206/5350 f 1891/4169/5351 1496/4131/5351 1892/4150/5351 f 2854/3077/5352 2055/3641/5352 2012/4299/5352 f 2490/4293/5353 2470/4300/5353 2508/4294/5353 f 2545/4284/5354 2554/4301/5354 2553/4285/5354 f 2554/4301/5355 2578/4302/5355 2553/4285/5355 f 2578/4302/5356 2586/4296/5356 2553/4285/5356 f 2351/3526/5357 2994/4094/5357 3003/4303/5357 f 2732/4304/5358 2693/2670/5358 2694/2883/5358 f 1674/1198/5359 3511/1762/5359 3430/1199/5359 f 2518/4295/5360 2529/4305/5360 2545/4284/5360 f 2545/4284/5361 2529/4305/5361 2554/4301/5361 f 2663/4297/5362 2680/4306/5362 2679/4288/5362 f 2727/4307/5363 2679/4288/5363 2680/4306/5363 f 2727/4307/5364 2756/4282/5364 2679/4288/5364 f 2727/4307/5365 2772/4308/5365 2756/4282/5365 f 2772/4308/5366 2771/4289/5366 2756/4282/5366 f 2771/4289/5367 2772/4308/5367 2832/4291/5367 f 2770/2225/5368 2860/4056/5368 2830/2498/5368 f 2869/1415/5369 2883/4189/5369 2899/4240/5369 f 194/1296/5370 166/1295/5370 178/1320/5370 f 2454/845/5371 2274/3295/5371 2872/843/5371 f 1429/4309/5372 1231/4310/5372 1099/4311/5372 f 3241/309/5373 3213/2206/5373 3173/310/5373 f 3002/4082/5374 2351/3526/5374 3003/4303/5374 f 981/2431/5375 2460/4312/5375 2470/4300/5375 f 2586/4296/5376 2628/4313/5376 2663/4297/5376 f 2628/4313/5377 2664/4314/5377 2663/4297/5377 f 2663/4297/5378 2664/4314/5378 2680/4306/5378 f 2746/4227/5379 2788/4196/5379 2745/4219/5379 f 2746/4227/5380 2745/4219/5380 2704/3102/5380 f 2624/3013/5381 1987/4142/5381 1697/311/5381 f 2464/1921/5382 2480/1920/5382 2502/3650/5382 f 2481/2144/5383 2503/2146/5383 2480/1920/5383 f 1987/4142/5384 2600/268/5384 2702/1076/5384 f 2470/4300/5385 2509/4315/5385 2508/4294/5385 f 2509/4315/5386 2519/4316/5386 2518/4295/5386 f 2508/4294/5387 2509/4315/5387 2518/4295/5387 f 2518/4295/5388 2519/4316/5388 2529/4305/5388 f 2529/4305/5389 2530/4317/5389 2554/4301/5389 f 2664/4314/5390 2681/4318/5390 2680/4306/5390 f 2681/4318/5391 2727/4307/5391 2680/4306/5391 f 2772/4308/5392 2785/4319/5392 2832/4291/5392 f 2785/4319/5393 2833/4320/5393 2832/4291/5393 f 2832/4291/5394 2833/4320/5394 2862/2392/5394 f 1072/2261/5395 2544/4264/5395 2568/4276/5395 f 349/3412/5396 350/4321/5396 184/4322/5396 f 2597/4120/5397 2278/3921/5397 2596/3895/5397 f 2872/843/5398 2227/1441/5398 2198/844/5398 f 2789/4224/5399 2788/4196/5399 2746/4227/5399 f 2298/64/5400 2205/3867/5400 2480/1920/5400 f 2762/208/5401 2731/1400/5401 2732/4243/5401 f 981/2431/5402 2419/2430/5402 2460/4312/5402 f 2460/4312/5403 2509/4315/5403 2470/4300/5403 f 2530/4317/5404 2569/4323/5404 2554/4301/5404 f 2554/4301/5405 2569/4323/5405 2578/4302/5405 f 2603/4324/5406 2586/4296/5406 2578/4302/5406 f 2569/4323/5407 2603/4324/5407 2578/4302/5407 f 2833/4320/5408 2876/2839/5408 2862/2392/5408 f 1116/2276/5409 163/2652/5409 3466/1713/5409 f 2273/4011/5410 2296/3860/5410 2210/4112/5410 f 2704/3102/5411 2745/4219/5411 2730/1267/5411 f 1534/3131/5412 1611/4191/5412 2897/2566/5412 f 1189/1986/5413 1111/1971/5413 965/1978/5413 f 2645/4178/5414 2710/4122/5414 2421/4113/5414 f 2502/3650/5415 2516/3216/5415 2539/4241/5415 f 2961/2937/5416 2960/3049/5416 2945/4006/5416 f 2205/3867/5417 2481/2144/5417 2480/1920/5417 f 2762/208/5418 2776/1398/5418 2731/1400/5418 f 2423/2030/5419 2855/4107/5419 2479/4102/5419 f 2417/4156/5420 1508/4253/5420 592/3226/5420 f 2372/3823/5421 2419/2430/5421 963/2432/5421 f 2519/4316/5422 2530/4317/5422 2529/4305/5422 f 2586/4296/5423 2603/4324/5423 2628/4313/5423 f 2681/4318/5424 2738/4325/5424 2727/4307/5424 f 2757/4326/5425 2772/4308/5425 2727/4307/5425 f 2757/4326/5426 2785/4319/5426 2772/4308/5426 f 1710/1633/5427 2202/4075/5427 2535/2/5427 f 1890/4192/5428 2408/4099/5428 1793/1518/5428 f 2843/4164/5429 2886/4106/5429 2885/4109/5429 f 2842/4197/5430 2827/4163/5430 2883/4189/5430 f 2516/3216/5431 2583/3218/5431 2539/4241/5431 f 2637/4254/5432 2668/807/5432 2636/4130/5432 f 2783/3021/5433 3498/1197/5433 3429/225/5433 f 2215/2294/5434 2138/2460/5434 2807/3949/5434 f 1666/736/5435 2625/650/5435 1657/649/5435 f 2419/2430/5436 2448/4327/5436 2460/4312/5436 f 2460/4312/5437 2471/4328/5437 2509/4315/5437 f 2628/4313/5438 2646/4329/5438 2664/4314/5438 f 2664/4314/5439 2646/4329/5439 2681/4318/5439 f 2757/4326/5440 2727/4307/5440 2738/4325/5440 f 2834/4330/5441 2833/4320/5441 2785/4319/5441 f 2833/4320/5442 2834/4330/5442 2876/2839/5442 f 2834/4330/5443 1959/4038/5443 2876/2839/5443 f 2798/3235/5444 2780/2714/5444 2672/4152/5444 f 1662/651/5445 1702/4108/5445 1136/4100/5445 f 2675/4199/5446 2303/1847/5446 2890/1848/5446 f 2017/2157/5447 3182/562/5447 3364/2835/5447 f 2325/4331/5448 2860/4332/5448 2269/4333/5448 f 2419/2430/5449 2430/3822/5449 2448/4327/5449 f 2448/4327/5450 2471/4328/5450 2460/4312/5450 f 2471/4328/5451 2491/4334/5451 2509/4315/5451 f 2491/4334/5452 2510/4335/5452 2509/4315/5452 f 2509/4315/5453 2510/4335/5453 2519/4316/5453 f 2510/4335/5454 2555/4336/5454 2530/4317/5454 f 2519/4316/5455 2510/4335/5455 2530/4317/5455 f 2603/4324/5456 2647/4337/5456 2628/4313/5456 f 2647/4337/5457 2646/4329/5457 2628/4313/5457 f 2646/4329/5458 2738/4325/5458 2681/4318/5458 f 2563/4231/5459 2562/4230/5459 2538/3058/5459 f 2563/4231/5460 2538/3058/5460 2522/3651/5460 f 1743/3087/5461 2447/4173/5461 2456/3030/5461 f 2583/3218/5462 2563/4231/5462 2539/4241/5462 f 2845/4104/5463 2844/372/5463 2812/371/5463 f 1666/736/5464 2601/2264/5464 2625/650/5464 f 2530/4317/5465 2555/4336/5465 2569/4323/5465 f 2555/4336/5466 2603/4324/5466 2569/4323/5466 f 2738/4325/5467 2773/4338/5467 2757/4326/5467 f 2773/4338/5468 2800/4339/5468 2785/4319/5468 f 2757/4326/5469 2773/4338/5469 2785/4319/5469 f 2800/4339/5470 2821/4340/5470 2785/4319/5470 f 2821/4340/5471 2834/4330/5471 2785/4319/5471 f 2821/4340/5472 1959/4038/5472 2834/4330/5472 f 2654/4232/5473 2690/4226/5473 2622/4283/5473 f 2690/4226/5474 2746/4227/5474 2704/3102/5474 f 3342/165/5475 3371/683/5475 3326/166/5475 f 2006/769/5476 2157/1187/5476 2223/1186/5476 f 2006/769/5477 2182/768/5477 2157/1187/5477 f 2173/2712/5478 2798/3235/5478 2856/3977/5478 f 2810/253/5479 2842/4197/5479 2869/1415/5479 f 2430/3822/5480 2441/4341/5480 2448/4327/5480 f 2441/4341/5481 2471/4328/5481 2448/4327/5481 f 2491/4334/5482 2511/4342/5482 2510/4335/5482 f 2555/4336/5483 2556/4343/5483 2603/4324/5483 f 2714/4344/5484 2773/4338/5484 2738/4325/5484 f 1967/3268/5485 1849/3272/5485 2651/2101/5485 f 1611/4191/5486 603/4252/5486 1890/4192/5486 f 1991/4188/5487 603/4252/5487 1611/4191/5487 f 1991/4188/5488 1611/4191/5488 2899/4240/5488 f 2027/3249/5489 2499/1081/5489 2815/3250/5489 f 2371/2486/5490 1741/4078/5490 1887/1891/5490 f 1880/3657/5491 2006/769/5491 2223/1186/5491 f 2874/4116/5492 2818/3019/5492 2783/3021/5492 f 2417/4156/5493 2840/4273/5493 1508/4253/5493 f 2490/4293/5494 2507/4274/5494 2506/4262/5494 f 1959/4038/5495 2282/2408/5495 2250/2407/5495 f 2510/4335/5496 2511/4342/5496 2555/4336/5496 f 2556/4343/5497 2604/4345/5497 2603/4324/5497 f 2604/4345/5498 2648/4346/5498 2647/4337/5498 f 2603/4324/5499 2604/4345/5499 2647/4337/5499 f 2646/4329/5500 2714/4344/5500 2738/4325/5500 f 2714/4344/5501 2739/4347/5501 2773/4338/5501 f 2739/4347/5502 2800/4339/5502 2773/4338/5502 f 1959/4038/5503 2821/4340/5503 2282/2408/5503 f 3371/683/5504 3359/4198/5504 3326/166/5504 f 857/1783/5505 3509/1702/5505 3499/1910/5505 f 1686/3227/5506 603/4252/5506 1991/4188/5506 f 2885/4109/5507 1676/3225/5507 2884/4187/5507 f 2583/3218/5508 2608/4229/5508 2563/4231/5508 f 1160/3545/5509 3431/2804/5509 3432/2531/5509 f 2441/4341/5510 2491/4334/5510 2471/4328/5510 f 2511/4342/5511 2531/4348/5511 2555/4336/5511 f 2648/4346/5512 2646/4329/5512 2647/4337/5512 f 2648/4346/5513 2682/4349/5513 2646/4329/5513 f 2646/4329/5514 2682/4349/5514 2714/4344/5514 f 2850/4350/5515 2821/4340/5515 2800/4339/5515 f 2739/4347/5516 2850/4350/5516 2800/4339/5516 f 1996/2424/5517 2251/3912/5517 2707/4003/5517 f 1987/4142/5518 2702/1076/5518 1697/311/5518 f 2698/4137/5519 2735/263/5519 2674/265/5519 f 2299/3901/5520 2141/770/5520 2006/769/5520 f 2313/3999/5521 2314/4008/5521 2642/4007/5521 f 2488/532/5522 1007/4220/5522 2487/4205/5522 f 2430/3822/5523 2431/4351/5523 2441/4341/5523 f 2441/4341/5524 2461/4352/5524 2491/4334/5524 f 2491/4334/5525 2492/4353/5525 2511/4342/5525 f 2555/4336/5526 2531/4348/5526 2556/4343/5526 f 2714/4344/5527 2701/4354/5527 2739/4347/5527 f 2801/4355/5528 2850/4350/5528 2739/4347/5528 f 2821/4340/5529 2877/3891/5529 2282/2408/5529 f 3434/1469/5530 3438/1471/5530 453/1781/5530 f 3002/4082/5531 3020/4356/5531 2216/4077/5531 f 2006/769/5532 1663/4357/5532 2299/3901/5532 f 2880/2711/5533 1145/3970/5533 2317/3953/5533 f 2818/3019/5534 2856/3977/5534 2798/3235/5534 f 3460/1116/5535 3440/2538/5535 3439/2120/5535 f 2372/3823/5536 2410/4358/5536 2430/3822/5536 f 2431/4351/5537 2449/4359/5537 2441/4341/5537 f 2441/4341/5538 2449/4359/5538 2461/4352/5538 f 2461/4352/5539 2492/4353/5539 2491/4334/5539 f 2570/4360/5540 2556/4343/5540 2531/4348/5540 f 2570/4360/5541 2604/4345/5541 2556/4343/5541 f 2682/4349/5542 2701/4354/5542 2714/4344/5542 f 2701/4354/5543 2759/4361/5543 2739/4347/5543 f 2759/4361/5544 2758/4362/5544 2739/4347/5544 f 2758/4362/5545 2801/4355/5545 2739/4347/5545 f 2423/2030/5546 2575/3627/5546 2855/4107/5546 f 2637/4254/5547 2636/4130/5547 2618/4250/5547 f 1898/2134/5548 2062/2136/5548 2108/3276/5548 f 2410/4358/5549 2431/4351/5549 2430/3822/5549 f 2492/4353/5550 2512/4363/5550 2511/4342/5550 f 2511/4342/5551 2512/4363/5551 2531/4348/5551 f 2557/4364/5552 2570/4360/5552 2531/4348/5552 f 2682/4349/5553 2683/4365/5553 2701/4354/5553 f 2683/4365/5554 2759/4361/5554 2701/4354/5554 f 2801/4355/5555 2835/4366/5555 2850/4350/5555 f 2863/4367/5556 2821/4340/5556 2850/4350/5556 f 2863/4367/5557 2877/3891/5557 2821/4340/5557 f 2434/267/5558 2711/1634/5558 2543/1935/5558 f 2387/3431/5559 2166/3656/5559 2232/3429/5559 f 2364/2425/5560 1880/3657/5560 2166/3656/5560 f 2364/2425/5561 2006/769/5561 1880/3657/5561 f 2006/769/5562 2364/2425/5562 1663/4357/5562 f 2858/224/5563 2874/4116/5563 2783/3021/5563 f 1700/4105/5564 2870/3091/5564 1911/3090/5564 f 1697/311/5565 2642/4007/5565 566/3014/5565 f 2995/4368/5566 2994/4094/5566 2205/3867/5566 f 2376/4009/5567 566/3014/5567 2642/4007/5567 f 2512/4363/5568 2520/4369/5568 2531/4348/5568 f 2520/4369/5569 2557/4364/5569 2531/4348/5569 f 2557/4364/5570 2571/4370/5570 2570/4360/5570 f 2571/4370/5571 2605/4371/5571 2570/4360/5571 f 2570/4360/5572 2605/4371/5572 2604/4345/5572 f 2604/4345/5573 2605/4371/5573 2648/4346/5573 f 2605/4371/5574 2629/4372/5574 2648/4346/5574 f 2835/4366/5575 2863/4367/5575 2850/4350/5575 f 1508/4253/5576 1933/4216/5576 603/4252/5576 f 2707/4003/5577 2299/3901/5577 1663/4357/5577 f 2232/3429/5578 2223/1186/5578 2330/3729/5578 f 2626/4214/5579 2840/4273/5579 2623/4215/5579 f 2421/4113/5580 2710/4122/5580 2752/4114/5580 f 2404/4373/5581 2411/4374/5581 2410/4358/5581 f 2403/2454/5582 2404/2434/5582 2410/2527/5582 f 2410/4358/5583 2411/4374/5583 2431/4351/5583 f 2683/4365/5584 2682/4349/5584 2648/4346/5584 f 2629/4372/5585 2683/4365/5585 2648/4346/5585 f 2822/4375/5586 2801/4355/5586 2758/4362/5586 f 2801/4355/5587 2822/4375/5587 2835/4366/5587 f 2863/4367/5588 2285/2534/5588 2877/3891/5588 f 2285/2534/5589 233/3883/5589 2877/3891/5589 f 2783/3021/5590 2726/4221/5590 1674/1198/5590 f 3420/4376/5591 1491/2933/5591 3404/4377/5591 f 1751/3562/5592 1731/3549/5592 2446/3567/5592 f 2598/3920/5593 2278/3921/5593 2597/4120/5593 f 2242/2406/5594 233/3883/5594 2266/3679/5594 f 2234/4018/5595 2718/4029/5595 2296/3860/5595 f 2128/4378/5596 551/4238/5596 1666/736/5596 f 2674/265/5597 2296/3860/5597 2718/4029/5597 f 2472/4379/5598 2492/4353/5598 2461/4352/5598 f 2472/4380/5599 2493/4381/5599 2512/4382/5599 f 2492/4383/5600 2472/4380/5600 2512/4382/5600 f 2520/4369/5601 2558/4384/5601 2557/4364/5601 f 2557/4364/5602 2558/4384/5602 2571/4370/5602 f 2748/4151/5603 2790/240/5603 2747/4223/5603 f 2790/240/5604 2811/4170/5604 2747/4223/5604 f 2167/3477/5605 2307/2426/5605 2610/3637/5605 f 551/4238/5606 169/4181/5606 2601/2264/5606 f 2269/3941/5607 2770/2225/5607 2784/2224/5607 f 2364/2425/5608 2707/4003/5608 1663/4357/5608 f 2502/3650/5609 2480/1920/5609 2516/3216/5609 f 2873/4014/5610 2782/4218/5610 2858/224/5610 f 2411/4374/5611 2420/4385/5611 2431/4351/5611 f 2420/4385/5612 2449/4359/5612 2431/4351/5612 f 2493/4386/5613 2513/4387/5613 2512/4363/5613 f 2512/4363/5614 2513/4387/5614 2520/4369/5614 f 2558/4384/5615 2587/4388/5615 2571/4370/5615 f 2571/4370/5616 2587/4388/5616 2605/4371/5616 f 2665/4389/5617 2683/4365/5617 2629/4372/5617 f 2759/4361/5618 2822/4375/5618 2758/4362/5618 f 2822/4375/5619 2836/4390/5619 2835/4366/5619 f 2141/770/5620 2299/3901/5620 2035/3391/5620 f 3101/1410/5621 3100/4127/5621 3057/1411/5621 f 2404/4373/5622 2412/4266/5622 2411/4374/5622 f 2411/4374/5623 2412/4266/5623 2420/4385/5623 f 2449/4359/5624 2462/4391/5624 2461/4352/5624 f 2461/4352/5625 2462/4391/5625 2472/4379/5625 f 2520/4369/5626 2546/4392/5626 2558/4384/5626 f 2587/4388/5627 2611/4393/5627 2605/4371/5627 f 2605/4371/5628 2611/4393/5628 2629/4372/5628 f 2683/4365/5629 2665/4389/5629 2759/4361/5629 f 2836/4390/5630 2878/4394/5630 2835/4366/5630 f 2878/4394/5631 2863/4367/5631 2835/4366/5631 f 2878/4394/5632 2893/4395/5632 2863/4367/5632 f 2893/4395/5633 2285/2534/5633 2863/4367/5633 f 2655/3557/5634 2637/4254/5634 2608/4229/5634 f 2196/3985/5635 2166/3656/5635 2387/3431/5635 f 2055/3597/5636 2853/4396/5636 2012/2349/5636 f 1891/4169/5637 2489/2898/5637 1496/4131/5637 f 2779/3187/5638 2445/4098/5638 1934/4012/5638 f 2450/4397/5639 2449/4359/5639 2420/4385/5639 f 2449/4359/5640 2450/4397/5640 2462/4391/5640 f 2462/4398/5641 2493/4381/5641 2472/4380/5641 f 2587/4388/5642 2630/4399/5642 2611/4393/5642 f 2629/4372/5643 2611/4393/5643 2665/4389/5643 f 2665/4389/5644 2760/4400/5644 2759/4361/5644 f 2759/4361/5645 2760/4400/5645 2822/4375/5645 f 2721/732/5646 2694/2883/5646 2695/3046/5646 f 2721/732/5647 2720/734/5647 2694/2883/5647 f 2846/3243/5648 2813/3242/5648 2777/4193/5648 f 2726/4221/5649 2672/4152/5649 2670/1761/5649 f 1496/4131/5650 2644/4132/5650 2641/4184/5650 f 2873/4014/5651 2858/224/5651 2239/3991/5651 f 2600/268/5652 2543/1935/5652 2702/1076/5652 f 2404/4373/5653 2405/4401/5653 2412/4266/5653 f 2432/4265/5654 2450/4397/5654 2420/4385/5654 f 2450/4397/5655 2463/4402/5655 2462/4391/5655 f 2462/4398/5656 2463/4403/5656 2493/4381/5656 f 2513/4387/5657 2546/4392/5657 2520/4369/5657 f 2558/4384/5658 2546/4392/5658 2587/4388/5658 f 2587/4388/5659 2588/4404/5659 2630/4399/5659 f 2611/4393/5660 2666/4405/5660 2665/4389/5660 f 2760/4400/5661 2824/4406/5661 2822/4375/5661 f 2822/4375/5662 2823/4407/5662 2836/4390/5662 f 2823/4407/5663 2851/4408/5663 2836/4390/5663 f 2836/4390/5664 2851/4408/5664 2878/4394/5664 f 2782/4218/5665 2871/3978/5665 2874/4116/5665 f 2765/4182/5666 1732/3803/5666 2723/653/5666 f 2634/362/5667 2622/4283/5667 2653/2305/5667 f 2319/4256/5668 1741/4078/5668 2371/2486/5668 f 2151/3742/5669 2764/4076/5669 2196/3985/5669 f 179/1345/5670 178/1320/5670 166/1295/5670 f 2687/2234/5671 2703/3525/5671 1931/2235/5671 f 2870/3091/5672 2886/4106/5672 2845/4104/5672 f 2463/4403/5673 2494/4409/5673 2493/4381/5673 f 2494/4410/5674 2521/4411/5674 2513/4387/5674 f 2493/4386/5675 2494/4410/5675 2513/4387/5675 f 2521/4411/5676 2546/4392/5676 2513/4387/5676 f 2546/4392/5677 2588/4404/5677 2587/4388/5677 f 2666/4405/5678 2684/4412/5678 2665/4389/5678 f 2665/4389/5679 2684/4412/5679 2760/4400/5679 f 2822/4375/5680 2824/4406/5680 2823/4407/5680 f 2316/2535/5681 2285/2534/5681 2893/4395/5681 f 567/4413/5682 2307/2426/5682 2196/3985/5682 f 2636/4130/5683 2705/4129/5683 2690/4226/5683 f 2702/1076/5684 3486/1075/5684 1697/311/5684 f 2420/4385/5685 2412/4266/5685 2432/4265/5685 f 2546/4392/5686 2559/4414/5686 2588/4404/5686 f 2588/4404/5687 2612/4415/5687 2630/4399/5687 f 2630/4399/5688 2666/4405/5688 2611/4393/5688 f 2740/4416/5689 2824/4406/5689 2760/4400/5689 f 951/1965/5690 952/2837/5690 962/1964/5690 f 2539/4241/5691 2563/4231/5691 2522/3651/5691 f 2298/64/5692 2464/1921/5692 2446/1444/5692 f 2239/3991/5693 2767/226/5693 2696/953/5693 f 2829/3163/5694 2890/1848/5694 1709/2836/5694 f 2521/4411/5695 2559/4414/5695 2546/4392/5695 f 2559/4414/5696 2589/4417/5696 2588/4404/5696 f 2588/4404/5697 2589/4417/5697 2612/4415/5697 f 2684/4412/5698 2715/4418/5698 2760/4400/5698 f 2760/4400/5699 2715/4418/5699 2740/4416/5699 f 2824/4406/5700 2825/4419/5700 2823/4407/5700 f 2823/4407/5701 2825/4419/5701 2851/4408/5701 f 2864/4085/5702 2878/4394/5702 2851/4408/5702 f 2864/4085/5703 2893/4395/5703 2878/4394/5703 f 2764/4076/5704 2209/2292/5704 567/4413/5704 f 2644/4132/5705 2517/2072/5705 2848/4183/5705 f 2415/3148/5706 2409/3150/5706 2175/3193/5706 f 2783/3021/5707 2591/3020/5707 2726/4221/5707 f 2705/4129/5708 2747/4223/5708 2690/4226/5708 f 2767/226/5709 2239/3991/5709 2858/224/5709 f 2405/4401/5710 2406/3468/5710 2412/4266/5710 f 2494/4410/5711 2473/4420/5711 2521/4411/5711 f 2589/4417/5712 2613/4421/5712 2612/4415/5712 f 2620/4422/5713 2666/4405/5713 2630/4399/5713 f 2825/4419/5714 2864/4085/5714 2851/4408/5714 f 2316/2535/5715 2893/4395/5715 216/3858/5715 f 2437/4165/5716 2438/96/5716 2447/4173/5716 f 2625/650/5717 2752/4114/5717 1702/4108/5717 f 2966/4270/5718 2987/4269/5718 2940/4423/5718 f 2705/4129/5719 2748/4151/5719 2747/4223/5719 f 2782/4218/5720 2874/4116/5720 2858/224/5720 f 2432/4265/5721 2451/4424/5721 2450/4397/5721 f 2450/4397/5722 2451/4424/5722 2463/4402/5722 f 2451/4425/5723 2473/4426/5723 2494/4409/5723 f 2463/4403/5724 2451/4425/5724 2494/4409/5724 f 2559/4414/5725 2547/4427/5725 2589/4417/5725 f 2612/4415/5726 2613/4421/5726 2630/4399/5726 f 2666/4405/5727 2685/4428/5727 2684/4412/5727 f 2354/4086/5728 2893/4395/5728 2864/4085/5728 f 2354/4086/5729 216/3858/5729 2893/4395/5729 f 1901/3579/5730 2616/2421/5730 2621/4259/5730 f 2209/2292/5731 2807/3949/5731 567/4413/5731 f 567/4413/5732 2807/3949/5732 2307/2426/5732 f 2735/263/5733 1473/2666/5733 2699/264/5733 f 2438/96/5734 2437/4165/5734 2428/97/5734 f 2547/4427/5735 2579/4429/5735 2589/4417/5735 f 2620/4422/5736 2630/4399/5736 2613/4421/5736 f 2685/4428/5737 2666/4405/5737 2620/4422/5737 f 2684/4412/5738 2685/4428/5738 2715/4418/5738 f 2715/4418/5739 2728/4430/5739 2740/4416/5739 f 2728/4430/5740 2802/4431/5740 2740/4416/5740 f 2740/4416/5741 2802/4431/5741 2824/4406/5741 f 1909/4157/5742 2150/4065/5742 2906/2458/5742 f 1941/3492/5743 2734/4168/5743 2722/3730/5743 f 2807/3949/5744 2610/3637/5744 2307/2426/5744 f 2691/806/5745 2706/3201/5745 2668/807/5745 f 2157/1187/5746 2182/768/5746 2359/3910/5746 f 2453/4185/5747 2848/4183/5747 2698/4137/5747 f 2438/96/5748 2456/3030/5748 2447/4173/5748 f 2406/3468/5749 2306/3467/5749 2432/4265/5749 f 2514/4432/5750 2473/4426/5750 2451/4425/5750 f 2514/4433/5751 2521/4411/5751 2473/4420/5751 f 2521/4411/5752 2532/4434/5752 2559/4414/5752 f 2532/4434/5753 2547/4427/5753 2559/4414/5753 f 2589/4417/5754 2579/4429/5754 2613/4421/5754 f 2802/4431/5755 2825/4419/5755 2824/4406/5755 f 2166/3656/5756 2196/3985/5756 2364/2425/5756 f 2489/2898/5757 2517/2072/5757 2644/4132/5757 f 2720/734/5758 2732/4304/5758 2694/2883/5758 f 2622/4283/5759 2704/3102/5759 2653/2305/5759 f 2442/459/5760 2451/4424/5760 2432/4265/5760 f 2514/4433/5761 2532/4434/5761 2521/4411/5761 f 2716/4435/5762 2741/4436/5762 2728/4430/5762 f 2715/4418/5763 2716/4435/5763 2728/4430/5763 f 2728/4430/5764 2741/4436/5764 2802/4431/5764 f 2802/4431/5765 2786/4437/5765 2825/4419/5765 f 2825/4419/5766 2803/4438/5766 2864/4085/5766 f 2623/4215/5767 2676/4123/5767 2162/4037/5767 f 2164/1943/5768 2154/3969/5768 1266/2733/5768 f 1916/2410/5769 2059/3818/5769 2159/3837/5769 f 2216/4077/5770 3020/4356/5770 3019/2296/5770 f 2864/4085/5771 2803/4438/5771 2259/3553/5771 f 3367/3009/5772 3340/3111/5772 1486/2877/5772 f 3425/313/5773 2313/3999/5773 2642/4007/5773 f 2406/2355/5774 2911/2357/5774 2908/3510/5774 f 2311/3862/5775 2191/3296/5775 2454/845/5775 f 2306/3467/5776 2413/4439/5776 2432/4265/5776 f 2474/4440/5777 2532/4434/5777 2514/4433/5777 f 2547/4427/5778 2572/4441/5778 2579/4429/5778 f 2613/4421/5779 2614/4442/5779 2620/4422/5779 f 2620/4422/5780 2649/4443/5780 2685/4428/5780 f 2649/4443/5781 2716/4435/5781 2715/4418/5781 f 2685/4428/5782 2649/4443/5782 2715/4418/5782 f 2741/4436/5783 2786/4437/5783 2802/4431/5783 f 1611/4191/5784 967/1517/5784 2897/2566/5784 f 2869/1415/5785 2899/4240/5785 1534/3131/5785 f 2261/1889/5786 1887/1891/5786 1741/4078/5786 f 2490/4293/5787 981/2431/5787 2470/4300/5787 f 2732/4304/5788 2719/1905/5788 2693/2670/5788 f 2843/4164/5789 2884/4187/5789 2883/4189/5789 f 2655/3557/5790 2668/807/5790 2637/4254/5790 f 1829/3706/5791 2523/3217/5791 2503/2146/5791 f 2888/4141/5792 1934/4012/5792 2273/4011/5792 f 2916/851/5793 2926/2970/5793 2915/3582/5793 f 3091/1788/5794 3135/4444/5794 3062/1789/5794 f 2413/4439/5795 2442/459/5795 2432/4265/5795 f 2475/4445/5796 2451/4424/5796 2442/459/5796 f 2474/4446/5797 2514/4432/5797 2451/4425/5797 f 2475/4445/5798 2474/4440/5798 2451/4424/5798 f 2532/4434/5799 2572/4441/5799 2547/4427/5799 f 2579/4429/5800 2614/4442/5800 2613/4421/5800 f 2631/4447/5801 2649/4443/5801 2620/4422/5801 f 2786/4437/5802 2803/4438/5802 2825/4419/5802 f 2623/4215/5803 2453/4185/5803 2676/4123/5803 f 2672/4152/5804 1689/1864/5804 2592/648/5804 f 23/783/5805 58/211/5805 36/25/5805 f 2163/4081/5806 2455/4200/5806 2255/4448/5806 f 2408/4099/5807 1933/4216/5807 2829/3163/5807 f 3461/270/5808 2768/662/5808 2808/4228/5808 f 2311/3862/5809 2454/845/5809 2330/3729/5809 f 2425/3192/5810 2427/4110/5810 2455/4200/5810 f 2582/3079/5811 2622/4283/5811 2634/362/5811 f 2964/527/5812 2984/2484/5812 2983/528/5812 f 2501/2757/5813 2875/4449/5813 2524/2344/5813 f 2464/1921/5814 1751/4242/5814 2446/1444/5814 f 2671/2879/5815 2697/2542/5815 2524/2344/5815 f 2696/953/5816 2253/699/5816 2239/3991/5816 f 2614/4442/5817 2631/4447/5817 2620/4422/5817 f 2803/4438/5818 2865/4450/5818 2259/3553/5818 f 2128/4378/5819 1666/736/5819 2107/735/5819 f 1792/3652/5820 2522/3651/5820 2275/4451/5820 f 2623/4215/5821 2162/4037/5821 2675/4199/5821 f 2706/3201/5822 2749/3057/5822 2705/4129/5822 f 2422/2070/5823 2584/3877/5823 2479/4102/5823 f 1028/3037/5824 2183/1718/5824 2816/2069/5824 f 3030/2297/5825 2426/4111/5825 2425/3192/5825 f 3295/4452/5826 3280/4453/5826 3242/3945/5826 f 3243/2445/5827 3295/4452/5827 3242/3945/5827 f 3404/4377/5828 1480/2932/5828 3372/4454/5828 f 2413/4439/5829 2414/460/5829 2442/459/5829 f 2495/4455/5830 2474/4440/5830 2475/4445/5830 f 2495/4455/5831 2573/4456/5831 2474/4440/5831 f 2474/4440/5832 2573/4456/5832 2532/4434/5832 f 2572/4441/5833 2590/4457/5833 2579/4429/5833 f 2579/4429/5834 2590/4457/5834 2614/4442/5834 f 2631/4447/5835 2667/4458/5835 2649/4443/5835 f 2667/4458/5836 2774/4459/5836 2649/4443/5836 f 2649/4443/5837 2774/4459/5837 2716/4435/5837 f 2813/3242/5838 2845/4104/5838 2792/1399/5838 f 2705/4129/5839 2749/3057/5839 2748/4151/5839 f 3464/20/5840 3446/22/5840 3484/2744/5840 f 2776/1398/5841 2813/3242/5841 2792/1399/5841 f 2813/3242/5842 2870/3091/5842 2845/4104/5842 f 3084/95/5843 3124/3031/5843 2438/96/5843 f 3013/4460/5844 3037/4461/5844 3012/2799/5844 f 2911/2357/5845 2917/849/5845 2908/3510/5845 f 3295/4452/5846 3294/4462/5846 3280/4453/5846 f 2839/1640/5847 2875/4449/5847 2501/2757/5847 f 2671/2879/5848 2524/2344/5848 2875/4449/5848 f 1898/3035/5849 2852/2118/5849 2548/2117/5849 f 2476/4463/5850 2475/4445/5850 2442/459/5850 f 2476/4463/5851 2495/4455/5851 2475/4445/5851 f 2532/4434/5852 2573/4456/5852 2572/4441/5852 f 2572/4441/5853 2573/4456/5853 2590/4457/5853 f 2716/4435/5854 2774/4459/5854 2741/4436/5854 f 2774/4459/5855 2786/4437/5855 2741/4436/5855 f 2895/3554/5856 2259/3553/5856 2865/4450/5856 f 2641/4184/5857 2453/4185/5857 2623/4215/5857 f 2750/733/5858 2762/4464/5858 2720/734/5858 f 717/1991/5859 136/378/5859 160/661/5859 f 2793/207/5860 2777/4193/5860 2762/208/5860 f 2843/4164/5861 2885/4109/5861 2884/4187/5861 f 1666/736/5862 1657/649/5862 1350/737/5862 f 3013/4460/5863 3012/2799/5863 2975/4465/5863 f 2892/4466/5864 2671/2879/5864 2875/4449/5864 f 1939/4467/5865 2184/2880/5865 2671/2879/5865 f 2414/460/5866 2150/1282/5866 1909/458/5866 f 1778/726/5867 2305/3932/5867 2276/2298/5867 f 2667/4458/5868 2729/4468/5868 2774/4459/5868 f 2729/4468/5869 2717/4469/5869 2774/4459/5869 f 2804/4470/5870 2803/4438/5870 2786/4437/5870 f 2099/3456/5871 2882/2212/5871 2896/2462/5871 f 2733/4167/5872 2750/733/5872 2721/732/5872 f 2154/4471/5873 2184/2880/5873 1939/4467/5873 f 2782/4218/5874 2186/3971/5874 2871/3978/5874 f 2793/207/5875 2846/3243/5875 2777/4193/5875 f 2847/4236/5876 2846/3243/5876 2794/4180/5876 f 2456/3030/5877 2438/96/5877 3124/3031/5877 f 2154/4471/5878 2164/2553/5878 2184/2880/5878 f 1909/458/5879 2452/4177/5879 2442/459/5879 f 1857/3446/5880 1856/3408/5880 1834/1865/5880 f 2442/459/5881 2452/4177/5881 2476/4463/5881 f 2533/4472/5882 2573/4456/5882 2495/4455/5882 f 2580/4473/5883 2590/4457/5883 2573/4456/5883 f 2632/4474/5884 2614/4442/5884 2590/4457/5884 f 2632/4474/5885 2631/4447/5885 2614/4442/5885 f 2650/4475/5886 2667/4458/5886 2631/4447/5886 f 2632/4474/5887 2650/4475/5887 2631/4447/5887 f 2803/4438/5888 2804/4470/5888 2865/4450/5888 f 2241/3836/5889 2861/3926/5889 2158/1442/5889 f 2109/4097/5890 1136/4100/5890 2799/4101/5890 f 2720/734/5891 2762/4464/5891 2732/4304/5891 f 3239/4476/5892 3254/4477/5892 1499/3237/5892 f 1499/3230/5893 3223/4478/5893 3239/4479/5893 f 2328/2459/5894 214/1716/5894 813/1957/5894 f 960/2177/5895 2993/2176/5895 2486/4194/5895 f 2496/4480/5896 2495/4455/5896 2476/4463/5896 f 2496/4480/5897 2533/4472/5897 2495/4455/5897 f 2533/4472/5898 2580/4473/5898 2573/4456/5898 f 2606/3396/5899 2590/4457/5899 2580/4473/5899 f 2606/3396/5900 2632/4474/5900 2590/4457/5900 f 2804/4470/5901 2786/4437/5901 2774/4459/5901 f 2804/4470/5902 2866/4019/5902 2865/4450/5902 f 2865/4450/5903 2866/4019/5903 2895/3554/5903 f 2777/4193/5904 2776/1398/5904 2762/208/5904 f 2723/653/5905 2643/677/5905 2640/654/5905 f 2795/4237/5906 2794/4180/5906 2778/4179/5906 f 2160/4042/5907 2675/4199/5907 2162/4037/5907 f 3309/4481/5908 3344/4482/5908 3229/4483/5908 f 1933/4216/5909 2840/4273/5909 2626/4214/5909 f 2417/4156/5910 2641/4184/5910 2840/4273/5910 f 2640/654/5911 2643/677/5911 2879/679/5911 f 1725/2220/5912 1734/2219/5912 1500/2569/5912 f 2908/3510/5913 2916/851/5913 2907/2457/5913 f 2540/4484/5914 2839/1640/5914 1897/858/5914 f 2540/4484/5915 2875/4449/5915 2839/1640/5915 f 1865/2971/5916 2671/2879/5916 2892/4466/5916 f 2671/2879/5917 1865/2971/5917 1939/4467/5917 f 1941/3492/5918 2778/4147/5918 2734/4168/5918 f 2650/4475/5919 2729/4468/5919 2667/4458/5919 f 2774/4459/5920 2717/4469/5920 2804/4470/5920 f 2804/4470/5921 2805/4485/5921 2866/4019/5921 f 3230/4486/5922 3309/4481/5922 3229/4483/5922 f 1508/4253/5923 2840/4273/5923 1933/4216/5923 f 2692/2671/5924 2656/4487/5924 2657/4488/5924 f 2575/3627/5925 2109/4097/5925 1473/2666/5925 f 3158/4489/5926 3157/4490/5926 3123/4491/5926 f 3266/4492/5927 1476/3066/5927 1483/3098/5927 f 2540/4484/5928 2892/4466/5928 2875/4449/5928 f 2780/2714/5929 1689/1864/5929 2672/4152/5929 f 2633/3372/5930 2632/4474/5930 2606/3396/5930 f 2887/250/5931 602/3241/5931 1703/251/5931 f 2301/3990/5932 2797/1717/5932 2328/2459/5932 f 2797/1717/5933 214/1716/5933 2328/2459/5933 f 2522/3651/5934 2538/3058/5934 2537/3051/5934 f 1933/4216/5935 2623/4215/5935 2675/4199/5935 f 2765/4182/5936 2723/653/5936 2601/2264/5936 f 1483/3327/5937 1501/3326/5937 1725/4493/5937 f 2986/2729/5938 3036/2801/5938 3011/4494/5938 f 2737/2972/5939 1865/2971/5939 2892/4466/5939 f 1909/458/5940 2433/3149/5940 2452/4177/5940 f 2497/4495/5941 2476/4463/5941 2452/4177/5941 f 2476/4463/5942 2497/4495/5942 2496/4480/5942 f 2496/4480/5943 2534/4496/5943 2533/4472/5943 f 2633/3372/5944 2650/4475/5944 2632/4474/5944 f 2729/4468/5945 2742/4497/5945 2717/4469/5945 f 2717/4469/5946 2805/4485/5946 2804/4470/5946 f 2792/1399/5947 2791/239/5947 2731/1400/5947 f 2163/4081/5948 2465/2145/5948 2436/2295/5948 f 1675/2665/5949 2459/2071/5949 2422/2070/5949 f 2838/1635/5950 1819/3744/5950 2019/1636/5950 f 3266/4498/5951 1483/4499/5951 1725/4500/5951 f 2928/4501/5952 2935/4502/5952 2920/4503/5952 f 3268/4504/5953 3298/1735/5953 3284/1737/5953 f 2985/4505/5954 2986/2729/5954 3011/4494/5954 f 2737/2972/5955 2892/4466/5955 2540/4484/5955 f 1725/2220/5956 1499/3230/5956 3254/4506/5956 f 2459/2071/5957 1675/2665/5957 2735/263/5957 f 2409/3150/5958 2433/3149/5958 1909/458/5958 f 2497/4495/5959 2534/4496/5959 2496/4480/5959 f 1856/4507/5960 2533/4472/5960 2534/4496/5960 f 1856/4507/5961 2580/4473/5961 2533/4472/5961 f 1856/4507/5962 1885/3397/5962 2580/4473/5962 f 1885/3397/5963 2606/3396/5963 2580/4473/5963 f 2633/3372/5964 2729/4468/5964 2650/4475/5964 f 2742/4497/5965 2805/4485/5965 2717/4469/5965 f 2036/3454/5966 2867/3464/5966 2075/3422/5966 f 2796/4134/5967 2795/2348/5967 2751/4508/5967 f 1307/2031/5968 2584/3877/5968 2112/3602/5968 f 566/3014/5969 2376/4009/5969 2177/4023/5969 f 3266/4492/5970 1725/2220/5970 3254/4506/5970 f 3070/4509/5971 3081/4510/5971 3058/4172/5971 f 2416/2911/5972 2540/4484/5972 1897/858/5972 f 2769/669/5973 2737/2972/5973 2540/4484/5973 f 3370/685/5974 3401/3140/5974 3359/4198/5974 f 2433/3149/5975 2415/3148/5975 2452/4177/5975 f 1834/4511/5976 1856/4507/5976 2534/4496/5976 f 1950/3373/5977 2633/3372/5977 2606/3396/5977 f 1899/3398/5978 1950/3373/5978 2606/3396/5978 f 1997/4217/5979 2729/4468/5979 2633/3372/5979 f 2196/3985/5980 2387/3431/5980 2151/3742/5980 f 1111/1971/5981 3441/4512/5981 3462/1972/5981 f 2301/3990/5982 2482/2327/5982 2797/1717/5982 f 1676/3225/5983 1892/4150/5983 2417/4156/5983 f 1099/3269/5984 2341/4513/5984 1849/3270/5984 f 1500/4514/5985 1499/3231/5985 1725/4493/5985 f 2766/681/5986 1897/858/5986 2669/857/5986 f 2766/681/5987 2416/2911/5987 1897/858/5987 f 2416/2911/5988 2769/669/5988 2540/4484/5988 f 2779/3187/5989 1934/4012/5989 966/3334/5989 f 2452/4177/5990 2477/2524/5990 2497/4495/5990 f 2477/2524/5991 2478/2526/5991 2497/4495/5991 f 2497/4495/5992 2478/2526/5992 2534/4496/5992 f 2478/2526/5993 1834/4511/5993 2534/4496/5993 f 1997/4217/5994 2743/2866/5994 2729/4468/5994 f 2743/2866/5995 2742/4497/5995 2729/4468/5995 f 2806/2868/5996 2805/4485/5996 2742/4497/5996 f 2805/4485/5997 2837/2709/5997 2866/4019/5997 f 2866/4019/5998 2880/2711/5998 2317/3953/5998 f 3471/3576/5999 1363/3558/5999 1964/2128/5999 f 1703/251/6000 2567/3106/6000 1769/252/6000 f 2210/4112/6001 966/3334/6001 2888/4141/6001 f 2482/2327/6002 2816/2069/6002 2797/1717/6002 f 3452/2409/6003 3503/615/6003 3507/1858/6003 f 2887/250/6004 2870/3091/6004 2813/3242/6004 f 2884/4187/6005 1676/3225/6005 1686/3227/6005 f 2694/2883/6006 2693/2670/6006 2658/2884/6006 f 2435/3335/6007 966/3334/6007 2210/4112/6007 f 3047/4515/6008 3088/4516/6008 3045/2277/6008 f 3375/2513/6009 570/4517/6009 3385/2514/6009 f 2794/4180/6010 2793/207/6010 2750/206/6010 f 2443/848/6011 2477/2524/6011 2452/4177/6011 f 2012/2349/6012 2853/4396/6012 2847/2350/6012 f 1802/1363/6013 1788/1227/6013 1789/2707/6013 f 2686/3371/6014 1997/4217/6014 2633/3372/6014 f 2742/4497/6015 2743/2866/6015 2806/2868/6015 f 2837/2709/6016 2805/4485/6016 2806/2868/6016 f 2837/2709/6017 2880/2711/6017 2866/4019/6017 f 2899/4240/6018 1611/4191/6018 1534/3131/6018 f 2853/4396/6019 2055/3597/6019 2077/3599/6019 f 2697/2542/6020 2184/2880/6020 2178/2552/6020 f 2794/4180/6021 2846/3243/6021 2793/207/6021 f 2526/4206/6022 2487/4205/6022 1007/4220/6022 f 3059/3133/6023 3035/3135/6023 3036/2801/6023 f 2769/669/6024 2467/289/6024 2737/2972/6024 f 2737/2972/6025 2467/289/6025 1875/2973/6025 f 2627/4286/6026 2662/2367/6026 2602/4136/6026 f 1832/3764/6027 2838/3766/6027 2879/4518/6027 f 2764/4076/6028 567/4413/6028 2196/3985/6028 f 967/1517/6029 1890/4192/6029 1793/1518/6029 f 2273/4011/6030 2210/4112/6030 2888/4141/6030 f 3203/4519/6031 3217/4520/6031 3168/4521/6031 f 3250/4522/6032 3249/4523/6032 3217/4520/6032 f 3314/4524/6033 3332/1653/6033 3331/4525/6033 f 3105/4526/6034 3121/4527/6034 3134/4528/6034 f 2948/2728/6035 2975/4465/6035 2986/2729/6035 f 3181/2775/6036 3158/4489/6036 3093/4529/6036 f 3060/4530/6037 3105/4526/6037 3089/4531/6037 f 3375/4532/6038 3406/2012/6038 570/2011/6038 f 3284/1737/6039 3312/3154/6039 3297/4533/6039 f 3267/4534/6040 3309/4481/6040 3230/4486/6040 f 3092/2735/6041 3123/4491/6041 3091/1788/6041 f 3052/4535/6042 3060/4530/6042 3089/4531/6042 f 3116/4536/6043 3130/4537/6043 3129/4538/6043 f 3018/2905/6044 3001/2963/6044 2991/1880/6044 f 2992/1879/6045 3018/2905/6045 2991/1880/6045 f 3017/4539/6046 3016/2961/6046 3001/2963/6046 f 3420/4540/6047 3421/4212/6047 2469/3908/6047 f 1677/3366/6048 1805/2467/6048 3274/3364/6048 f 3423/4541/6049 3405/4542/6049 993/4543/6049 f 3018/2905/6050 3017/4539/6050 3001/2963/6050 f 3300/4544/6051 3299/4545/6051 3285/4546/6051 f 3345/4547/6052 3344/4482/6052 3309/4481/6052 f 1481/3085/6053 3150/3059/6053 1474/4548/6053 f 3060/4530/6054 3090/4549/6054 3105/4526/6054 f 3090/4549/6055 3121/4527/6055 3105/4526/6055 f 3249/4523/6056 3285/4546/6056 3248/4550/6056 f 3464/20/6057 3484/2744/6057 1197/3438/6057 f 3037/4551/6058 3051/4552/6058 3050/4553/6058 f 3178/4554/6059 3168/4521/6059 3233/4555/6059 f 3122/4556/6060 3134/4528/6060 3121/4527/6060 f 3134/4528/6061 3168/4521/6061 3133/4557/6061 f 3203/4519/6062 3250/4522/6062 3217/4520/6062 f 3250/4522/6063 3286/4558/6063 3249/4523/6063 f 3028/2962/6064 3027/4559/6064 3000/4560/6064 f 3286/4558/6065 3300/4544/6065 3249/4523/6065 f 3315/4561/6066 3314/4562/6066 3300/4544/6066 f 3063/898/6067 3094/4563/6067 3092/2735/6067 f 3001/2963/6068 3000/4560/6068 2990/2560/6068 f 3094/4563/6069 3093/4529/6069 3092/2735/6069 f 3094/4563/6070 3181/2775/6070 3093/4529/6070 f 3381/3068/6071 1480/3067/6071 1490/1412/6071 f 3001/2963/6072 3028/2962/6072 3000/4560/6072 f 3038/4564/6073 3060/4530/6073 3052/4535/6073 f 3290/4565/6074 3274/3364/6074 3465/838/6074 f 3274/3364/6075 3491/2468/6075 3465/838/6075 f 3290/4565/6076 1109/4566/6076 3274/3364/6076 f 3274/3364/6077 1109/4566/6077 1531/3427/6077 f 3190/4567/6078 3197/2272/6078 3228/2446/6078 f 3165/3027/6079 3261/4568/6079 3201/4569/6079 f 3496/1097/6080 3290/4565/6080 3465/838/6080 f 1109/4566/6081 3264/1115/6081 1631/4128/6081 f 3236/1114/6082 1631/4128/6082 3264/1115/6082 f 1730/3497/6083 1723/3156/6083 2949/3532/6083 f 3061/4570/6084 3016/2961/6084 3017/4539/6084 f 3061/4570/6085 3038/4564/6085 3016/2961/6085 f 3061/4570/6086 3060/4530/6086 3038/4564/6086 f 3264/1115/6087 1109/4566/6087 3290/4565/6087 f 3122/4556/6088 3169/4571/6088 3134/4528/6088 f 2982/4572/6089 3048/4140/6089 2981/4573/6089 f 3217/4520/6090 3233/4555/6090 3168/4521/6090 f 2980/2936/6091 3045/2277/6091 2998/2474/6091 f 3496/1097/6092 3477/788/6092 3290/4565/6092 f 1531/3427/6093 1109/4566/6093 1631/4128/6093 f 3290/4565/6094 3477/788/6094 3264/1115/6094 f 1493/234/6095 2469/730/6095 1494/729/6095 f 3123/4491/6096 3157/4490/6096 3135/4444/6096 f 2934/4574/6097 2938/4575/6097 2918/4576/6097 f 3088/4516/6098 3087/1409/6098 3045/2277/6098 f 3286/4558/6099 3315/4561/6099 3300/4544/6099 f 3285/4546/6100 3299/4545/6100 3298/1735/6100 f 27/397/6101 572/1962/6101 3350/3669/6101 f 2990/2560/6102 2989/1884/6102 2429/1886/6102 f 2402/2512/6103 2919/4577/6103 2403/2454/6103 f 2136/1679/6104 1368/2889/6104 1367/3770/6104 f 3013/4578/6105 3051/4579/6105 3037/4580/6105 f 3364/2835/6106 781/2148/6106 2017/2157/6106 f 3374/2436/6107 3346/4581/6107 3328/2437/6107 f 3131/4582/6108 3166/4583/6108 3130/4537/6108 f 3232/4584/6109 3233/4555/6109 3248/4550/6109 f 3166/4583/6110 3176/4585/6110 3165/3027/6110 f 3075/4586/6111 3082/4587/6111 3104/4588/6111 f 3104/4588/6112 3131/4582/6112 3130/4537/6112 f 3142/4589/6113 3101/1410/6113 3087/1409/6113 f 3165/3027/6114 3176/4585/6114 3191/4590/6114 f 3306/4591/6115 3382/2466/6115 3294/105/6115 f 2965/4592/6116 2985/4593/6116 2984/4594/6116 f 3296/4595/6117 3310/4596/6117 3267/4534/6117 f 3260/4597/6118 3296/4595/6118 3267/4534/6118 f 3178/4598/6119 3233/4599/6119 3232/4600/6119 f 3165/3027/6120 3201/4569/6120 3154/3028/6120 f 3028/2962/6121 3052/4535/6121 3026/4601/6121 f 3376/4602/6122 3375/2513/6122 3347/4603/6122 f 2927/3164/6123 2933/4604/6123 2945/3165/6123 f 3027/4559/6124 3028/2962/6124 3026/4601/6124 f 2990/2560/6125 3000/4560/6125 2989/1884/6125 f 3331/4525/6126 3332/1653/6126 3350/3669/6126 f 3129/4538/6127 3166/4583/6127 3155/3026/6127 f 3048/4140/6128 3034/4171/6128 2981/4573/6128 f 3163/4605/6129 3175/4606/6129 3101/1410/6129 f 3414/2289/6130 3355/2288/6130 3393/4607/6130 f 1491/2933/6131 3420/4376/6131 1492/4608/6131 f 3090/4549/6132 3122/4556/6132 3121/4527/6132 f 3142/4589/6133 3153/4609/6133 3101/1410/6133 f 958/2507/6134 2921/3933/6134 2929/2508/6134 f 1158/2171/6135 1415/2170/6135 1806/4610/6135 f 3386/567/6136 331/525/6136 341/498/6136 f 1806/4610/6137 3352/2347/6137 561/4611/6137 f 3197/2272/6138 3190/4567/6138 3174/2273/6138 f 3375/4532/6139 3376/2095/6139 3406/2012/6139 f 3301/4612/6140 3315/4561/6140 3286/4558/6140 f 3318/4613/6141 1652/3147/6141 1670/3245/6141 f 3299/4545/6142 3314/4562/6142 3331/4614/6142 f 3447/982/6143 708/2360/6143 1064/983/6143 f 3300/4544/6144 3314/4562/6144 3299/4545/6144 f 1415/2170/6145 3352/2347/6145 1806/4610/6145 f 3352/2347/6146 3136/4615/6146 561/4611/6146 f 3102/4616/6147 3070/4509/6147 3058/4172/6147 f 3119/3865/6148 3132/3864/6148 3118/4617/6148 f 3016/2961/6149 3038/4564/6149 3028/2962/6149 f 3038/4564/6150 3052/4535/6150 3028/2962/6150 f 3037/4461/6151 3050/2800/6151 3012/2799/6151 f 3248/4550/6152 3285/4546/6152 3263/4618/6152 f 3307/3738/6153 3327/4619/6153 3215/3739/6153 f 3116/4620/6154 3129/4621/6154 3145/4622/6154 f 3194/2549/6155 3218/548/6155 78/811/6155 f 3232/4600/6156 3248/4623/6156 3247/4624/6156 f 3362/4625/6157 3347/4603/6157 3312/3154/6157 f 3282/4626/6158 3296/4595/6158 3260/4597/6158 f 1329/2726/6159 282/217/6159 505/2602/6159 f 3061/4570/6160 3106/4627/6160 3060/4530/6160 f 3168/4521/6161 3178/4554/6161 3167/4628/6161 f 3106/4627/6162 3090/4549/6162 3060/4530/6162 f 2938/4629/6163 2934/4630/6163 2947/4631/6163 f 3331/4525/6164 3350/3669/6164 3349/4632/6164 f 3106/4627/6165 3122/4556/6165 3090/4549/6165 f 3179/4633/6166 3169/4571/6166 3122/4556/6166 f 3168/4521/6167 3167/4628/6167 3133/4557/6167 f 3179/4633/6168 3203/4519/6168 3169/4571/6168 f 3392/2994/6169 174/757/6169 3207/756/6169 f 244/620/6170 2709/565/6170 3287/671/6170 f 3143/4634/6171 3164/4635/6171 3114/4636/6171 f 3215/3739/6172 3327/4619/6172 3295/4637/6172 f 3269/4638/6173 3286/4558/6173 3250/4522/6173 f 2989/1884/6174 3000/4560/6174 2976/2126/6174 f 3269/4638/6175 3301/4612/6175 3286/4558/6175 f 3071/4639/6176 3072/3861/6176 3103/4640/6176 f 3163/4605/6177 3214/4209/6177 3197/4210/6177 f 3285/4546/6178 3298/1735/6178 3263/4618/6178 f 3203/4519/6179 3168/4521/6179 3169/4571/6179 f 3244/4641/6180 3230/4486/6180 3200/4642/6180 f 263/566/6181 2709/565/6181 244/620/6181 f 3352/2347/6182 3238/2646/6182 3136/4615/6182 f 3238/2646/6183 3221/4643/6183 3136/4615/6183 f 1326/2758/6184 47/99/6184 3221/4271/6184 f 3073/4644/6185 3116/4620/6185 3145/4622/6185 f 2964/4645/6186 2965/4592/6186 2984/4594/6186 f 3347/4603/6187 3362/4625/6187 3377/4646/6187 f 2999/4647/6188 3013/4460/6188 2975/4465/6188 f 3046/293/6189 3047/4515/6189 3045/2277/6189 f 3238/2646/6190 3220/4648/6190 3221/4643/6190 f 2962/294/6191 3046/293/6191 2980/2936/6191 f 3181/2775/6192 3195/1932/6192 3158/4489/6192 f 3299/4545/6193 3313/1736/6193 3298/1735/6193 f 952/4649/6194 2921/3933/6194 958/2507/6194 f 3072/4650/6195 3035/3135/6195 3073/4651/6195 f 3011/4494/6196 3035/3135/6196 3072/4650/6196 f 2985/4593/6197 3011/3595/6197 3025/3594/6197 f 2984/4594/6198 2985/4593/6198 3025/3594/6198 f 2966/4270/6199 2940/4423/6199 2921/3933/6199 f 952/4649/6200 2966/4270/6200 2921/3933/6200 f 3195/1932/6201 3194/4125/6201 3157/4490/6201 f 2999/4647/6202 2975/4465/6202 2940/4423/6202 f 3117/4652/6203 3131/4582/6203 3104/4588/6203 f 3238/2646/6204 3319/4653/6204 3220/4648/6204 f 2418/4654/6205 3076/4655/6205 2428/4656/6205 f 3231/4657/6206 3232/4600/6206 3247/4624/6206 f 3180/4658/6207 3179/4633/6207 3122/4556/6207 f 3331/4614/6208 3330/4659/6208 3313/1736/6208 f 2955/4660/6209 2965/4592/6209 2964/4645/6209 f 3221/4643/6210 3220/4648/6210 3412/4661/6210 f 3251/2385/6211 3250/4522/6211 3203/4519/6211 f 3234/2993/6212 3251/2385/6212 3203/4519/6212 f 3082/4587/6213 3117/4652/6213 3104/4588/6213 f 3178/4598/6214 3232/4600/6214 3231/4657/6214 f 3400/4662/6215 3401/3140/6215 575/3054/6215 f 3299/4545/6216 3331/4614/6216 3313/1736/6216 f 3330/4663/6217 3331/4525/6217 3349/4632/6217 f 3071/4664/6218 3102/4616/6218 3058/4172/6218 f 2929/2508/6219 2920/4503/6219 2910/2255/6219 f 3229/4483/6220 3344/4482/6220 3259/4665/6220 f 2988/4268/6221 3027/4559/6221 3026/4601/6221 f 3251/2385/6222 3269/4638/6222 3250/4522/6222 f 1269/2346/6223 3319/4653/6223 3238/2646/6223 f 3319/4653/6224 3354/4666/6224 3220/4648/6224 f 1648/3220/6225 1364/3219/6225 3412/4667/6225 f 1645/2916/6226 1646/2967/6226 3208/3016/6226 f 3245/4668/6227 3283/4669/6227 3261/4568/6227 f 3027/4559/6228 2988/4268/6228 3000/4560/6228 f 3373/4670/6229 3384/4671/6229 3361/3847/6229 f 3216/337/6230 3245/4668/6230 3202/4672/6230 f 2935/4502/6231 2934/4574/6231 2919/4577/6231 f 3144/524/6232 3115/4673/6232 3102/4616/6232 f 3382/2466/6233 3421/4212/6233 3404/4674/6233 f 3220/4648/6234 3304/4675/6234 3412/4661/6234 f 3312/3154/6235 3329/2435/6235 3297/4533/6235 f 3145/523/6236 3155/3026/6236 3154/3028/6236 f 3157/4490/6237 3170/4676/6237 3148/4677/6237 f 2963/4678/6238 2973/4679/6238 2953/4680/6238 f 2938/4629/6239 2947/4631/6239 2946/4681/6239 f 2963/4678/6240 2953/4680/6240 2946/4682/6240 f 3157/4490/6241 3148/4677/6241 3135/4444/6241 f 3347/4603/6242 3375/2513/6242 3374/2436/6242 f 3071/4664/6243 3058/4172/6243 3034/4171/6243 f 1269/2346/6244 3407/4683/6244 3319/4653/6244 f 3319/4653/6245 3407/4683/6245 3354/4666/6245 f 3304/4675/6246 1648/4684/6246 3412/4661/6246 f 2230/3974/6247 2261/1889/6247 2233/3983/6247 f 3093/4529/6248 3158/4489/6248 3123/4491/6248 f 570/4517/6249 3405/4542/6249 3385/2514/6249 f 3202/4672/6250 3261/4568/6250 3165/3027/6250 f 3114/4636/6251 3142/4589/6251 3088/4516/6251 f 3167/4628/6252 3177/4685/6252 3156/4686/6252 f 3262/336/6253 3283/4669/6253 3245/4668/6253 f 1957/3832/6254 3391/4687/6254 3390/3833/6254 f 3075/4586/6255 3104/4588/6255 3074/3134/6255 f 1491/2933/6256 1492/4608/6256 1516/2964/6256 f 3113/1220/6257 3139/3100/6257 3099/4688/6257 f 3015/4689/6258 3014/4690/6258 2999/4647/6258 f 2974/529/6259 2982/4572/6259 2954/4691/6259 f 3354/4666/6260 3237/4692/6260 3220/4648/6260 f 3220/4648/6261 3237/4692/6261 3304/4675/6261 f 3153/4609/6262 3198/4693/6262 3163/4605/6262 f 3405/4542/6263 3423/4541/6263 3385/2514/6263 f 3059/3133/6264 3075/4586/6264 3074/3134/6264 f 3014/4694/6265 3015/4695/6265 3013/4696/6265 f 2725/4697/6266 2585/4247/6266 3384/4671/6266 f 1872/1946/6267 1980/3289/6267 3506/1947/6267 f 2975/4465/6268 3036/2801/6268 2986/2729/6268 f 2954/4691/6269 2963/4678/6269 2946/4682/6269 f 1369/2243/6270 243/2245/6270 1368/2889/6270 f 3273/3515/6271 3407/3556/6271 1629/3229/6271 f 3024/292/6272 3047/4515/6272 3046/293/6272 f 2953/4680/6273 2962/294/6273 2961/2937/6273 f 3118/4617/6274 3131/4582/6274 3117/4652/6274 f 3372/2414/6275 3382/2466/6275 3404/4674/6275 f 3093/4529/6276 3123/4491/6276 3092/2735/6276 f 1993/1966/6277 2725/4698/6277 993/2786/6277 f 3407/4683/6278 3183/4699/6278 3354/4666/6278 f 3354/4666/6279 3183/4699/6279 3237/4692/6279 f 3237/4692/6280 3353/4700/6280 3304/4675/6280 f 3201/4569/6281 3200/4642/6281 3115/4673/6281 f 3391/4687/6282 1957/3832/6282 3414/4701/6282 f 3166/4583/6283 3165/3027/6283 3155/3026/6283 f 3429/225/6284 2858/224/6284 2783/3021/6284 f 3070/4509/6285 3143/4634/6285 3114/4636/6285 f 3308/4702/6286 3327/4619/6286 3307/3738/6286 f 559/1080/6287 353/1051/6287 1237/543/6287 f 3423/4541/6288 3384/4671/6288 3373/4670/6288 f 3407/4683/6289 3273/4703/6289 3183/4699/6289 f 3353/4700/6290 1150/4704/6290 3304/4675/6290 f 3403/4705/6291 1648/4684/6291 3304/4675/6291 f 1150/4704/6292 3403/4705/6292 3304/4675/6292 f 3403/4706/6293 3387/3042/6293 1648/4707/6293 f 3330/4659/6294 3362/4625/6294 3312/3154/6294 f 3034/4171/6295 3024/292/6295 2973/4679/6295 f 3039/4708/6296 3017/4539/6296 3018/2905/6296 f 3039/4708/6297 3061/4570/6297 3017/4539/6297 f 1974/108/6298 3391/2413/6298 3413/2845/6298 f 3391/4687/6299 3414/4701/6299 3413/4709/6299 f 1477/3065/6300 3324/3108/6300 3367/3009/6300 f 3200/4642/6301 3199/4710/6301 3164/4635/6301 f 1976/4711/6302 3364/4712/6302 1489/4713/6302 f 1652/3147/6303 3318/4613/6303 3334/3152/6303 f 3259/4665/6304 3281/3740/6304 3215/3739/6304 f 2918/4576/6305 2917/849/6305 2911/2357/6305 f 2909/2415/6306 2918/4576/6306 2911/2357/6306 f 3344/4482/6307 3308/4702/6307 3281/3740/6307 f 3353/4700/6308 3237/4692/6308 3183/4699/6308 f 2585/3101/6309 1993/1966/6309 1495/2913/6309 f 3083/4714/6310 3106/4627/6310 3061/4570/6310 f 853/4715/6311 851/1459/6311 2279/1800/6311 f 3101/1410/6312 3175/4606/6312 3100/4127/6312 f 3472/269/6313 2548/271/6313 3449/3612/6313 f 3273/3515/6314 3334/3152/6314 3318/4613/6314 f 1330/487/6315 492/276/6315 726/485/6315 f 3393/4607/6316 2504/4716/6316 3414/2289/6316 f 1976/109/6317 1977/2720/6317 3364/2835/6317 f 3335/2429/6318 3336/314/6318 1669/862/6318 f 3163/4605/6319 3259/4665/6319 3215/3739/6319 f 2918/4576/6320 2938/4575/6320 2917/849/6320 f 3170/1173/6321 3206/3209/6321 3193/4717/6321 f 3170/4676/6322 3193/4718/6322 3148/4677/6322 f 3423/4541/6323 2725/4697/6323 3384/4671/6323 f 3356/4719/6324 3393/4607/6324 3355/2288/6324 f 3411/4720/6325 3353/4700/6325 3183/4699/6325 f 2936/3934/6326 2948/2728/6326 2955/3348/6326 f 3163/4605/6327 3197/4210/6327 3175/4606/6327 f 3360/4261/6328 3421/4212/6328 3382/2466/6328 f 2975/4465/6329 3012/2799/6329 3036/2801/6329 f 3412/4667/6330 1326/2758/6330 3221/4271/6330 f 3413/4709/6331 2504/4721/6331 2712/4722/6331 f 2724/1977/6332 3410/4723/6332 1977/2720/6332 f 3073/4651/6333 3130/4537/6333 3116/4536/6333 f 3273/4703/6334 3302/4724/6334 3183/4699/6334 f 3183/4699/6335 3302/4724/6335 3411/4720/6335 f 3214/4209/6336 3215/3739/6336 3243/4725/6336 f 1921/3795/6337 3321/1941/6337 1922/1940/6337 f 575/1738/6338 578/1468/6338 2500/1651/6338 f 3414/4701/6339 2504/4721/6339 3413/4709/6339 f 3252/2149/6340 781/2148/6340 3364/2835/6340 f 3302/4726/6341 3273/3515/6341 3318/4613/6341 f 2414/460/6342 2413/4439/6342 2407/1283/6342 f 3411/4720/6343 3389/4727/6343 3353/4700/6343 f 3321/1941/6344 3356/4728/6344 3355/1939/6344 f 576/1654/6345 3301/4070/6345 3270/2518/6345 f 2005/237/6346 1975/110/6346 1976/109/6346 f 3413/2845/6347 2712/1976/6347 1958/232/6347 f 3384/4671/6348 3422/3848/6348 3361/3847/6348 f 1670/3245/6349 3302/4726/6349 3318/4613/6349 f 3363/4729/6350 3320/4730/6350 3302/4724/6350 f 3320/4730/6351 3411/4720/6351 3302/4724/6351 f 3389/4727/6352 1150/4704/6352 3353/4700/6352 f 1150/4704/6353 3040/4731/6353 3403/4705/6353 f 3040/4732/6354 3351/4733/6354 3403/4706/6354 f 3351/4733/6355 1694/2428/6355 3403/4706/6355 f 3403/4706/6356 1694/2428/6356 1688/3018/6356 f 3361/3847/6357 3383/3849/6357 3360/4261/6357 f 2927/3164/6358 2938/4629/6358 2933/4604/6358 f 3349/4734/6359 3348/4735/6359 3330/4659/6359 f 3180/4658/6360 3203/4519/6360 3179/4633/6360 f 3180/4658/6361 3234/2993/6361 3203/4519/6361 f 2712/4722/6362 3410/4736/6362 2724/4737/6362 f 3410/4723/6363 3316/4738/6363 3364/2835/6363 f 1977/2720/6364 3410/4723/6364 3364/2835/6364 f 3316/4738/6365 3252/2149/6365 3364/2835/6365 f 2933/4604/6366 2938/4629/6366 2945/3165/6366 f 2938/4629/6367 2946/4681/6367 2945/3165/6367 f 3164/4635/6368 3199/4710/6368 3153/4609/6368 f 3320/4730/6369 3389/4727/6369 3411/4720/6369 f 2967/4739/6370 2966/4270/6370 2956/4740/6370 f 3384/4671/6371 2585/4247/6371 3422/3848/6371 f 3360/4261/6372 3382/2466/6372 3343/4741/6372 f 2938/4575/6373 2927/850/6373 2917/849/6373 f 3270/2387/6374 3269/4638/6374 3251/2385/6374 f 3337/4093/6375 3321/1941/6375 1921/3795/6375 f 3269/4638/6376 3270/2387/6376 3301/4612/6376 f 2504/4721/6377 673/4742/6377 2712/4722/6377 f 673/4742/6378 3410/4736/6378 2712/4722/6378 f 3276/4743/6379 1572/4744/6379 3252/4745/6379 f 3088/4516/6380 3142/4589/6380 3087/1409/6380 f 3145/523/6381 3154/3028/6381 3144/524/6381 f 3040/4731/6382 1150/4704/6382 3389/4727/6382 f 3335/4746/6383 1694/4747/6383 3351/4748/6383 f 3347/4603/6384 3374/2436/6384 3329/2435/6384 f 3129/4538/6385 3130/4537/6385 3166/4583/6385 f 3321/1941/6386 3337/4093/6386 3356/4728/6386 f 3393/4607/6387 673/4749/6387 2504/4716/6387 f 2946/4682/6388 2953/4680/6388 2945/4006/6388 f 951/4750/6389 2966/4270/6389 952/4649/6389 f 3154/3028/6390 3201/4569/6390 3144/524/6390 f 507/4751/6391 3363/4752/6391 3302/4726/6391 f 1474/4548/6392 3184/3130/6392 1481/3085/6392 f 3385/2514/6393 3423/4541/6393 3373/4670/6393 f 3261/4568/6394 3260/4597/6394 3201/4569/6394 f 3246/335/6395 3231/4753/6395 3247/4754/6395 f 3245/4668/6396 3261/4568/6396 3202/4672/6396 f 572/1962/6397 3349/4632/6397 3350/3669/6397 f 1492/2864/6398 2469/730/6398 1493/234/6398 f 3337/4093/6399 3357/4755/6399 3356/4728/6399 f 3356/4728/6400 3357/4755/6400 3393/4756/6400 f 3357/4755/6401 3394/4757/6401 3393/4756/6401 f 3393/4756/6402 3394/4757/6402 673/4742/6402 f 673/4742/6403 3171/4758/6403 3410/4736/6403 f 3410/4723/6404 2444/4759/6404 3316/4738/6404 f 3316/4738/6405 3276/3070/6405 3252/2149/6405 f 2940/4423/6406 2975/4465/6406 2948/2728/6406 f 2940/4423/6407 2936/3934/6407 2921/3933/6407 f 3092/2735/6408 3091/1788/6408 3054/1787/6408 f 3192/2546/6409 3178/4554/6409 3231/4753/6409 f 3222/367/6410 3363/4760/6410 507/328/6410 f 3222/367/6411 3275/3428/6411 3320/4761/6411 f 3363/4729/6412 3222/4762/6412 3320/4730/6412 f 3219/4763/6413 3389/4727/6413 3320/4730/6413 f 3271/4764/6414 3040/4731/6414 3389/4727/6414 f 3040/4732/6415 3271/4765/6415 3351/4733/6415 f 3271/4764/6416 3335/4766/6416 3351/4767/6416 f 843/1500/6417 3388/1502/6417 894/1531/6417 f 3192/2546/6418 3216/337/6418 3191/4590/6418 f 3343/4741/6419 3382/2466/6419 3306/4591/6419 f 3177/4685/6420 3178/4554/6420 3192/2546/6420 f 3249/4523/6421 3300/4544/6421 3285/4546/6421 f 3337/4093/6422 3338/4768/6422 3357/4755/6422 f 673/4749/6423 1192/4769/6423 3171/4770/6423 f 3171/4758/6424 2444/4771/6424 3410/4736/6424 f 3170/1173/6425 92/1063/6425 3206/3209/6425 f 3072/3861/6426 3073/4644/6426 3103/4640/6426 f 3178/4554/6427 3177/4685/6427 3167/4628/6427 f 3275/4772/6428 3219/4763/6428 3320/4730/6428 f 3219/4763/6429 3271/4764/6429 3389/4727/6429 f 3303/4773/6430 3317/4774/6430 3271/4764/6430 f 3271/4764/6431 3317/4774/6431 3335/4766/6431 f 326/1015/6432 1423/149/6432 170/1343/6432 f 3133/4557/6433 3167/4628/6433 3146/3863/6433 f 3297/4533/6434 3329/2435/6434 3311/4775/6434 f 3288/2449/6435 3338/4768/6435 3337/4093/6435 f 3357/4776/6436 3395/4777/6436 3394/4778/6436 f 3395/4777/6437 1192/4769/6437 673/4749/6437 f 3394/4778/6438 3395/4777/6438 673/4749/6438 f 3171/4758/6439 3419/4779/6439 2444/4771/6439 f 2953/4680/6440 2961/2937/6440 2945/4006/6440 f 3014/4690/6441 3013/4460/6441 2999/4647/6441 f 2925/3824/6442 2914/4780/6442 2915/3582/6442 f 3335/2429/6443 3317/4781/6443 3336/314/6443 f 3470/281/6444 3476/355/6444 3497/656/6444 f 3103/4640/6445 3073/4644/6445 3145/4622/6445 f 3084/4782/6446 3108/4783/6446 3124/4784/6446 f 3149/2564/6447 3181/2775/6447 3094/4563/6447 f 3224/4785/6448 1498/3195/6448 3196/4786/6448 f 1889/2448/6449 3253/4298/6449 3288/2449/6449 f 3253/4298/6450 3277/4787/6450 3288/2449/6450 f 3288/2449/6451 3277/4787/6451 3338/4768/6451 f 3419/4788/6452 3171/4770/6452 1192/4769/6452 f 1562/3071/6453 3276/3070/6453 3316/4738/6453 f 3115/4673/6454 3200/4642/6454 3143/4634/6454 f 3144/524/6455 3201/4569/6455 3115/4673/6455 f 3053/4789/6456 3061/4570/6456 3039/4708/6456 f 3333/1547/6457 3219/4763/6457 3275/4772/6457 f 3303/4773/6458 3271/4764/6458 3219/4763/6458 f 3184/4790/6459 3196/3774/6459 1475/4791/6459 f 2428/4656/6460 3076/4655/6460 3084/4782/6460 f 3108/4792/6461 3150/3059/6461 3124/3031/6461 f 3053/4789/6462 3083/4714/6462 3061/4570/6462 f 3277/4787/6463 3322/4793/6463 3338/4768/6463 f 3338/4768/6464 3322/4793/6464 3357/4755/6464 f 3357/4755/6465 3365/4794/6465 3395/4795/6465 f 2889/4796/6466 3419/4779/6466 1192/4797/6466 f 2444/4771/6467 3409/4798/6467 3316/4799/6467 f 3409/4798/6468 1562/4800/6468 3316/4799/6468 f 953/2386/6469 3251/2385/6469 3234/2993/6469 f 2920/4503/6470 2919/4577/6470 2402/2512/6470 f 2939/2465/6471 2955/3348/6471 2964/527/6471 f 531/4801/6472 3333/1547/6472 3275/4772/6472 f 3333/1547/6473 3303/4773/6473 3219/4763/6473 f 3118/4617/6474 3117/4652/6474 3082/4587/6474 f 3000/4560/6475 2988/4268/6475 2976/2126/6475 f 3076/4655/6476 3108/4783/6476 3084/4782/6476 f 3107/4802/6477 3122/4556/6477 3106/4627/6477 f 1831/937/6478 1599/939/6478 1839/2181/6478 f 3277/4787/6479 3289/4803/6479 3322/4793/6479 f 3322/4793/6480 3365/4794/6480 3357/4755/6480 f 3365/4794/6481 3358/4804/6481 3395/4795/6481 f 3358/4804/6482 2889/4796/6482 1192/4797/6482 f 3395/4795/6483 3358/4804/6483 1192/4797/6483 f 3419/4779/6484 3379/4805/6484 2444/4771/6484 f 3422/3848/6485 2469/3908/6485 3421/4212/6485 f 3191/4590/6486 3216/337/6486 3202/4672/6486 f 3147/4806/6487 3180/4658/6487 3122/4556/6487 f 3063/898/6488 987/1092/6488 3094/4563/6488 f 3303/4773/6489 2279/4807/6489 3317/4774/6489 f 2967/4739/6490 2988/4268/6490 2966/4270/6490 f 3064/4808/6491 2418/4654/6491 2426/4809/6491 f 3085/4810/6492 3076/4655/6492 2418/4654/6492 f 3085/4810/6493 3108/4783/6493 3076/4655/6493 f 3085/4810/6494 3109/4811/6494 3108/4783/6494 f 3109/4811/6495 3150/4812/6495 3108/4783/6495 f 3404/4377/6496 1491/2933/6496 1480/2932/6496 f 3253/4298/6497 3289/4803/6497 3277/4787/6497 f 3379/4805/6498 3409/4798/6498 2444/4771/6498 f 3081/4510/6499 3047/4515/6499 3024/292/6499 f 3048/4140/6500 3071/4664/6500 3034/4171/6500 f 3204/1982/6501 3234/2993/6501 3180/4658/6501 f 3333/1547/6502 531/4801/6502 866/1546/6502 f 3388/1502/6503 3303/4773/6503 3333/1547/6503 f 3388/1502/6504 853/1501/6504 3303/4773/6504 f 3265/4813/6505 2639/4225/6505 1868/4290/6505 f 3156/4686/6506 3166/4583/6506 3131/4582/6506 f 3156/4686/6507 3176/4585/6507 3166/4583/6507 f 2949/3532/6508 2968/4814/6508 2446/3567/6508 f 3030/4158/6509 3064/4808/6509 2426/4809/6509 f 3064/4808/6510 3085/4810/6510 2418/4654/6510 f 3493/399/6511 3439/2120/6511 3440/2538/6511 f 2639/4225/6512 3265/4813/6512 3253/4298/6512 f 2660/3047/6513 2639/4225/6513 3253/4298/6513 f 3253/4298/6514 3265/4813/6514 3289/4803/6514 f 3358/4804/6515 2849/4815/6515 2889/4796/6515 f 2661/4816/6516 1562/4800/6516 3409/4798/6516 f 92/1063/6517 601/1428/6517 3206/3209/6517 f 3081/4510/6518 3114/4636/6518 3088/4516/6518 f 1511/3061/6519 3150/3059/6519 1481/3085/6519 f 3167/4628/6520 3156/4686/6520 3132/3864/6520 f 894/1531/6521 3388/1502/6521 3333/1547/6521 f 3303/4773/6522 853/1501/6522 2279/4807/6522 f 3077/4817/6523 3064/4808/6523 3030/4158/6523 f 3151/4818/6524 1474/4819/6524 3109/4811/6524 f 2768/3629/6525 2062/2136/6525 2808/2135/6525 f 3322/4793/6526 3323/4820/6526 3365/4794/6526 f 3323/4820/6527 3358/4804/6527 3365/4794/6527 f 2889/4796/6528 3379/4805/6528 3419/4779/6528 f 493/327/6529 3222/367/6529 507/328/6529 f 3081/4510/6530 3088/4516/6530 3047/4515/6530 f 2935/1577/6531 2939/1579/6531 2954/4821/6531 f 2920/4503/6532 2935/4502/6532 2919/4577/6532 f 3129/4621/6533 3155/4822/6533 3145/4622/6533 f 2978/66/6534 2995/4368/6534 2205/3867/6534 f 2298/64/6535 2978/66/6535 2205/3867/6535 f 3020/4160/6536 3077/4817/6536 3030/4158/6536 f 3151/4818/6537 3109/4811/6537 3085/4810/6537 f 1474/4819/6538 3151/4818/6538 3184/4790/6538 f 3265/4813/6539 3322/4793/6539 3289/4803/6539 f 2849/4815/6540 3379/4805/6540 2889/4796/6540 f 3350/3669/6541 33/446/6541 27/397/6541 f 3229/4483/6542 3259/4665/6542 3198/4693/6542 f 2955/4660/6543 2939/4823/6543 2928/4824/6543 f 3115/4673/6544 3143/4634/6544 3070/4509/6544 f 3215/3739/6545 3295/4637/6545 3243/4725/6545 f 2919/4577/6546 2934/4574/6546 2918/4576/6546 f 3048/4140/6547 3025/2485/6547 3049/4825/6547 f 3077/4817/6548 3085/4810/6548 3064/4808/6548 f 3177/4685/6549 3176/4585/6549 3156/4686/6549 f 3324/4826/6550 3266/4827/6550 3255/4828/6550 f 3323/4820/6551 3380/4829/6551 3358/4804/6551 f 3358/4804/6552 3380/4829/6552 2849/4815/6552 f 3380/4829/6553 1074/4830/6553 2849/4815/6553 f 1074/4830/6554 3379/4805/6554 2849/4815/6554 f 3379/4805/6555 1049/4831/6555 3409/4798/6555 f 2661/4832/6556 3386/567/6556 1623/2948/6556 f 1492/4608/6557 3420/4376/6557 2469/4833/6557 f 3312/3154/6558 3347/4603/6558 3329/2435/6558 f 3200/4642/6559 3229/4483/6559 3199/4710/6559 f 2249/4204/6560 2341/4513/6560 1221/3916/6560 f 3132/3864/6561 3156/4686/6561 3131/4582/6561 f 3083/4714/6562 3107/4802/6562 3106/4627/6562 f 3147/4806/6563 3122/4556/6563 3107/4802/6563 f 3159/4834/6564 3085/4810/6564 3077/4817/6564 f 3159/4834/6565 3151/4818/6565 3085/4810/6565 f 3151/4818/6566 3196/3774/6566 3184/4790/6566 f 3265/4813/6567 1860/4835/6567 3322/4793/6567 f 3322/4793/6568 1860/4835/6568 3323/4820/6568 f 3323/4820/6569 3366/4836/6569 3380/4829/6569 f 1049/4831/6570 2661/4816/6570 3409/4798/6570 f 1954/3640/6571 2610/3637/6571 2807/3949/6571 f 2939/2465/6572 2974/529/6572 2954/4691/6572 f 2910/2255/6573 2920/4503/6573 2402/2512/6573 f 3377/4646/6574 3376/4602/6574 3347/4603/6574 f 3263/4618/6575 3298/1735/6575 3268/4504/6575 f 3003/4837/6576 3020/4160/6576 3002/4838/6576 f 3110/4839/6577 3077/4817/6577 3020/4160/6577 f 1860/3840/6578 1859/3794/6578 1853/2470/6578 f 3246/335/6579 3247/4754/6579 3262/336/6579 f 3283/4669/6580 3282/4626/6580 3260/4597/6580 f 3110/4839/6581 3020/4160/6581 3003/4837/6581 f 1860/4835/6582 1861/1915/6582 3323/4820/6582 f 1074/4830/6583 2736/4840/6583 3379/4805/6583 f 2736/4840/6584 1049/4831/6584 3379/4805/6584 f 2983/528/6585 2982/4572/6585 2974/529/6585 f 3153/4609/6586 3163/4605/6586 3101/1410/6586 f 3377/2567/6587 571/2087/6587 3376/2095/6587 f 3192/2546/6588 3231/4753/6588 3246/335/6588 f 3015/4689/6589 2988/4268/6589 3026/4601/6589 f 2994/4841/6590 3004/4842/6590 3003/4837/6590 f 3004/4842/6591 3065/4843/6591 3003/4837/6591 f 3065/4843/6592 3110/4839/6592 3003/4837/6592 f 3110/4839/6593 3159/4834/6593 3077/4817/6593 f 1916/3190/6594 1449/2725/6594 1264/2747/6594 f 987/1092/6595 3149/2564/6595 3094/4563/6595 f 1861/1915/6596 3366/4836/6596 3323/4820/6596 f 3415/4844/6597 3380/4829/6597 3366/4836/6597 f 3339/4845/6598 3415/4844/6598 3366/4836/6598 f 3380/4829/6599 3415/4844/6599 1074/4830/6599 f 2661/4832/6600 2709/565/6600 3386/567/6600 f 3184/3130/6601 1475/4846/6601 1482/3129/6601 f 613/2777/6602 3195/1932/6602 3181/2775/6602 f 2427/4110/6603 2418/4847/6603 2428/4848/6603 f 2995/4849/6604 3004/4842/6604 2994/4841/6604 f 3185/3772/6605 3151/4818/6605 3159/4834/6605 f 3185/3772/6606 3196/3774/6606 3151/4818/6606 f 3200/4642/6607 3164/4635/6607 3143/4634/6607 f 1326/2758/6608 3412/4667/6608 1364/3219/6608 f 2736/4840/6609 1074/4830/6609 3415/4844/6609 f 1049/4831/6610 189/4850/6610 2661/4816/6610 f 2983/528/6611 3048/4140/6611 2982/4572/6611 f 3132/3864/6612 3131/4582/6612 3118/4617/6612 f 1562/3171/6613 2661/4832/6613 1623/2948/6613 f 3029/578/6614 3018/2905/6614 955/2175/6614 f 3029/578/6615 3039/4708/6615 3018/2905/6615 f 3041/4851/6616 3065/4843/6616 3004/4842/6616 f 3065/4843/6617 3096/4852/6617 3110/4839/6617 f 3160/4853/6618 3159/4834/6618 3110/4839/6618 f 2427/4166/6619 2426/4854/6619 2418/4855/6619 f 3339/4845/6620 3396/2917/6620 3415/4844/6620 f 1645/2916/6621 2736/4840/6621 3415/4844/6621 f 3396/2917/6622 1645/2916/6622 3415/4844/6622 f 2736/4840/6623 3235/4856/6623 1049/4831/6623 f 3235/4856/6624 189/4850/6624 1049/4831/6624 f 189/4857/6625 2709/565/6625 2661/4832/6625 f 3104/4588/6626 3130/4537/6626 3073/4651/6626 f 2940/4423/6627 2948/2728/6627 2936/3934/6627 f 3135/4444/6628 3107/4802/6628 3083/4714/6628 f 3135/4444/6629 3148/4677/6629 3107/4802/6629 f 3148/4677/6630 3147/4806/6630 3107/4802/6630 f 2978/4858/6631 3021/4859/6631 2995/4849/6631 f 3021/4859/6632 3004/4842/6632 2995/4849/6632 f 3021/4859/6633 3041/4851/6633 3004/4842/6633 f 3096/4852/6634 3160/4853/6634 3110/4839/6634 f 1704/2988/6635 1688/3018/6635 1694/2428/6635 f 1861/1915/6636 3339/4845/6636 3366/4836/6636 f 3208/3016/6637 2736/4840/6637 1645/2916/6637 f 3344/4482/6638 3281/3740/6638 3259/4665/6638 f 3262/336/6639 3245/4668/6639 3216/337/6639 f 2956/4740/6640 2966/4270/6640 951/4750/6640 f 3193/4718/6641 3180/4658/6641 3147/4806/6641 f 3160/4853/6642 3185/3772/6642 3159/4834/6642 f 1219/45/6643 1221/3854/6643 2341/43/6643 f 3208/3016/6644 3235/4856/6644 2736/4840/6644 f 3048/4140/6645 3049/4825/6645 3071/4664/6645 f 3404/4674/6646 3421/4212/6646 3420/4540/6646 f 2954/4691/6647 2946/4682/6647 2947/4860/6647 f 2413/4439/6648 2306/3467/6648 2908/3466/6648 f 2968/4861/6649 3005/4862/6649 2978/4858/6649 f 3005/4862/6650 3021/4859/6650 2978/4858/6650 f 3209/4863/6651 3185/3772/6651 3160/4853/6651 f 3209/4863/6652 3224/3773/6652 3185/3772/6652 f 3224/4785/6653 3239/4479/6653 3223/4478/6653 f 3254/4864/6654 3255/4828/6654 3266/4827/6654 f 1476/3066/6655 3266/4492/6655 3324/3108/6655 f 3191/4590/6656 3202/4672/6656 3165/3027/6656 f 3314/4524/6657 3315/4069/6657 3332/1653/6657 f 2423/2030/6658 130/2032/6658 2575/3627/6658 f 3163/4605/6659 3215/3739/6659 3214/4209/6659 f 3249/4523/6660 3248/4550/6660 3233/4555/6660 f 2912/4865/6661 2931/4866/6661 2930/4867/6661 f 2931/4868/6662 2957/4869/6662 2949/3532/6662 f 2930/4867/6663 2931/4866/6663 2949/4870/6663 f 2949/4870/6664 2957/4871/6664 2968/4861/6664 f 3041/4851/6665 3111/4872/6665 3065/4843/6665 f 3111/4872/6666 3096/4852/6666 3065/4843/6666 f 3209/4863/6667 3239/4873/6667 3224/3773/6667 f 3239/4873/6668 3255/4828/6668 3254/4864/6668 f 1181/418/6669 3467/1591/6669 812/2103/6669 f 1181/4874/6670 1207/333/6670 3467/4875/6670 f 3341/4876/6671 3340/4877/6671 3367/4878/6671 f 3324/4826/6672 3341/4876/6672 3367/4878/6672 f 2953/4680/6673 3024/292/6673 2962/294/6673 f 3235/4856/6674 3418/4879/6674 189/4850/6674 f 3418/4880/6675 3287/671/6675 189/4857/6675 f 189/4857/6676 3287/671/6676 2709/565/6676 f 2982/4572/6677 2981/4573/6677 2963/4678/6677 f 3011/4494/6678 3036/2801/6678 3035/3135/6678 f 2922/4881/6679 2912/4865/6679 2371/4882/6679 f 2912/4865/6680 2922/4881/6680 2931/4866/6680 f 2958/4883/6681 2968/4861/6681 2957/4871/6681 f 2958/4883/6682 3005/4862/6682 2968/4861/6682 f 3111/4872/6683 3160/4853/6683 3096/4852/6683 f 3172/4884/6684 3209/4863/6684 3160/4853/6684 f 3209/4863/6685 3255/4828/6685 3239/4873/6685 f 3283/4669/6686 3260/4597/6686 3261/4568/6686 f 1498/3195/6687 3223/4478/6687 1499/3230/6687 f 1805/2467/6688 3491/2468/6688 3274/3364/6688 f 2922/4881/6689 2371/4882/6689 2902/4885/6689 f 1019/4886/6690 2922/4881/6690 2902/4885/6690 f 3042/4887/6691 3005/4862/6691 2958/4883/6691 f 3042/4887/6692 3021/4859/6692 3005/4862/6692 f 3021/4859/6693 3055/4888/6693 3041/4851/6693 f 3055/4888/6694 3078/4889/6694 3041/4851/6694 f 3078/4889/6695 3111/4872/6695 3041/4851/6695 f 3161/4890/6696 3160/4853/6696 3111/4872/6696 f 3161/4890/6697 3172/4884/6697 3160/4853/6697 f 3172/4884/6698 3225/4891/6698 3209/4863/6698 f 3278/4892/6699 3255/4828/6699 3209/4863/6699 f 3291/4893/6700 3324/4826/6700 3255/4828/6700 f 3291/4893/6701 3341/4876/6701 3324/4826/6701 f 3341/4876/6702 3368/4894/6702 3340/4877/6702 f 2928/4501/6703 2936/3934/6703 2955/3348/6703 f 458/4895/6704 3235/4856/6704 3208/3016/6704 f 458/4895/6705 3418/4879/6705 3235/4856/6705 f 216/3858/6706 2354/4086/6706 2337/3572/6706 f 954/577/6707 3054/1787/6707 3029/578/6707 f 3199/4710/6708 3229/4483/6708 3198/4693/6708 f 2941/4896/6709 2931/4866/6709 2922/4881/6709 f 2941/4896/6710 2957/4871/6710 2931/4866/6710 f 2941/4896/6711 2958/4883/6711 2957/4871/6711 f 3042/4887/6712 3055/4888/6712 3021/4859/6712 f 3278/4892/6713 3291/4893/6713 3255/4828/6713 f 3368/3112/6714 3397/2180/6714 1486/2877/6714 f 3105/4526/6715 3134/4528/6715 3120/4897/6715 f 3050/2800/6716 3059/3133/6716 3036/2801/6716 f 3418/4880/6717 3095/682/6717 3287/671/6717 f 3114/4636/6718 3164/4635/6718 3142/4589/6718 f 3164/4635/6719 3153/4609/6719 3142/4589/6719 f 2934/4630/6720 2935/1577/6720 2947/4631/6720 f 2982/4572/6721 2963/4678/6721 2954/4691/6721 f 3198/4693/6722 3259/4665/6722 3163/4605/6722 f 2900/4898/6723 2913/4899/6723 1019/4886/6723 f 2913/4899/6724 2922/4881/6724 1019/4886/6724 f 3006/4900/6725 3042/4887/6725 2958/4883/6725 f 3186/4901/6726 3225/4891/6726 3172/4884/6726 f 3291/4893/6727 3398/4902/6727 3341/4876/6727 f 3398/4902/6728 3368/4894/6728 3341/4876/6728 f 3368/4894/6729 3398/4902/6729 3397/4903/6729 f 3392/2994/6730 458/4895/6730 3208/3016/6730 f 3103/522/6731 3144/524/6731 3102/4616/6731 f 3102/4616/6732 3115/4673/6732 3070/4509/6732 f 2937/4904/6733 2941/4896/6733 2922/4881/6733 f 3066/4905/6734 3078/4889/6734 3055/4888/6734 f 3137/4906/6735 3161/4890/6735 3111/4872/6735 f 3225/4891/6736 3278/4892/6736 3209/4863/6736 f 3291/4893/6737 3399/4907/6737 3398/4902/6737 f 3392/2994/6738 3207/756/6738 458/4895/6738 f 2935/1577/6739 2954/4821/6739 2947/4631/6739 f 3071/4664/6740 3103/522/6740 3102/4616/6740 f 3281/3740/6741 3308/4702/6741 3307/3738/6741 f 3049/3596/6742 3072/3861/6742 3071/4639/6742 f 3169/4571/6743 3168/4521/6743 3134/4528/6743 f 3217/4520/6744 3249/4523/6744 3233/4555/6744 f 2903/4908/6745 2913/4899/6745 2900/4898/6745 f 2937/4904/6746 2922/4881/6746 2913/4899/6746 f 3007/4909/6747 2958/4883/6747 2941/4896/6747 f 3007/4909/6748 3006/4900/6748 2958/4883/6748 f 3066/4905/6749 3055/4888/6749 3042/4887/6749 f 3097/4910/6750 3078/4889/6750 3066/4905/6750 f 3125/4911/6751 3111/4872/6751 3078/4889/6751 f 3097/4910/6752 3125/4911/6752 3078/4889/6752 f 3125/4911/6753 3137/4906/6753 3111/4872/6753 f 3187/4912/6754 3186/4901/6754 3172/4884/6754 f 3187/4912/6755 3210/4913/6755 3186/4901/6755 f 3210/4913/6756 3225/4891/6756 3186/4901/6756 f 3256/4914/6757 3278/4892/6757 3225/4891/6757 f 1867/4245/6758 2639/4225/6758 2659/2882/6758 f 458/4895/6759 3207/756/6759 3418/4879/6759 f 1868/3776/6760 1859/3794/6760 3265/3839/6760 f 3054/1787/6761 3039/4708/6761 3029/578/6761 f 3054/1787/6762 3053/4789/6762 3039/4708/6762 f 2937/4904/6763 2969/4915/6763 2941/4896/6763 f 2969/4915/6764 3007/4909/6764 2941/4896/6764 f 3007/4909/6765 3008/4916/6765 3006/4900/6765 f 3006/4900/6766 3066/4905/6766 3042/4887/6766 f 3256/4914/6767 3291/4893/6767 3278/4892/6767 f 3399/4907/6768 3397/4903/6768 3398/4902/6768 f 781/2148/6769 1572/2150/6769 2046/2265/6769 f 3207/4917/6770 3378/2953/6770 3418/4880/6770 f 3378/2953/6771 3408/4918/6771 3095/682/6771 f 3418/4880/6772 3378/2953/6772 3095/682/6772 f 3095/682/6773 3408/4918/6773 252/670/6773 f 2970/4919/6774 2969/4915/6774 2937/4904/6774 f 2950/4920/6775 2970/4919/6775 2937/4904/6775 f 2970/4919/6776 3007/4909/6776 2969/4915/6776 f 2970/4919/6777 3009/4921/6777 3007/4909/6777 f 3009/4921/6778 3008/4916/6778 3007/4909/6778 f 3008/4916/6779 3043/4922/6779 3006/4900/6779 f 3043/4922/6780 3066/4905/6780 3006/4900/6780 f 3043/4922/6781 3056/4923/6781 3066/4905/6781 f 3056/4923/6782 3086/4924/6782 3066/4905/6782 f 3086/4924/6783 3097/4910/6783 3066/4905/6783 f 3126/4925/6784 3125/4911/6784 3097/4910/6784 f 3126/4925/6785 3137/4906/6785 3125/4911/6785 f 3256/4914/6786 3225/4891/6786 3210/4913/6786 f 3416/4926/6787 3397/4903/6787 3399/4907/6787 f 2261/1889/6788 2230/3974/6788 2193/847/6788 f 2819/2954/6789 3378/2953/6789 3207/4917/6789 f 3408/4918/6790 234/760/6790 252/670/6790 f 2403/2454/6791 2919/4577/6791 2909/2415/6791 f 3205/1983/6792 3204/1982/6792 3180/4658/6792 f 2923/4927/6793 2913/4899/6793 2903/4908/6793 f 2923/4927/6794 2937/4904/6794 2913/4899/6794 f 2923/4927/6795 2950/4920/6795 2937/4904/6795 f 3009/4928/6796 3022/4929/6796 3008/4930/6796 f 3256/4914/6797 3325/4931/6797 3291/4893/6797 f 3325/4931/6798 3399/4907/6798 3291/4893/6798 f 3416/4932/6799 1487/2949/6799 3397/4933/6799 f 3193/4718/6800 3205/1983/6800 3180/4658/6800 f 1849/3270/6801 2249/4204/6801 2815/3250/6801 f 3408/4918/6802 235/824/6802 234/760/6802 f 572/1962/6803 3348/2147/6803 3349/4632/6803 f 3149/2564/6804 614/2776/6804 3181/2775/6804 f 2942/4934/6805 2950/4920/6805 2923/4927/6805 f 2979/4935/6806 2970/4919/6806 2950/4920/6806 f 2979/4935/6807 2996/4936/6807 2970/4919/6807 f 3031/4937/6808 3009/4928/6808 2970/4938/6808 f 2996/4939/6809 3031/4937/6809 2970/4938/6809 f 3031/4937/6810 3022/4929/6810 3009/4928/6810 f 3112/4940/6811 3097/4910/6811 3086/4924/6811 f 3097/4941/6812 3112/4942/6812 3126/4943/6812 f 3257/4944/6813 3256/4914/6813 3210/4913/6813 f 3257/4944/6814 3292/4945/6814 3256/4914/6814 f 3417/3056/6815 3416/4926/6815 3399/4907/6815 f 3417/3056/6816 1164/4946/6816 3416/4926/6816 f 1164/3224/6817 1487/2949/6817 3416/4932/6817 f 1482/3129/6818 1475/4846/6818 1498/3195/6818 f 3348/4735/6819 3362/4625/6819 3330/4659/6819 f 1853/2470/6820 1861/4947/6820 1860/3840/6820 f 2585/4247/6821 1693/4948/6821 1060/3907/6821 f 2924/4949/6822 2923/4927/6822 2903/4908/6822 f 2901/4155/6823 2924/4949/6823 2903/4908/6823 f 2971/4950/6824 2979/4935/6824 2950/4920/6824 f 2942/4951/6825 2971/4952/6825 2950/4953/6825 f 3325/4931/6826 3417/3056/6826 3399/4907/6826 f 2920/4503/6827 2936/3934/6827 2928/4501/6827 f 2279/1800/6828 3336/314/6828 3317/4781/6828 f 1656/2952/6829 3272/3004/6829 3378/2953/6829 f 3272/3004/6830 3408/4918/6830 3378/2953/6830 f 3272/3004/6831 235/824/6831 3408/4918/6831 f 2929/2508/6832 2936/3934/6832 2920/4503/6832 f 2963/4678/6833 2981/4573/6833 2973/4679/6833 f 3313/1736/6834 3330/4659/6834 3312/3154/6834 f 1488/713/6835 1487/2949/6835 1164/3224/6835 f 2904/3186/6836 2924/4949/6836 2901/4155/6836 f 3044/4954/6837 3031/4955/6837 2996/4936/6837 f 3292/4945/6838 3325/4931/6838 3256/4914/6838 f 1872/1946/6839 3510/1039/6839 1838/1038/6839 f 586/1676/6840 993/2786/6840 3405/2019/6840 f 2981/4573/6841 3034/4171/6841 2973/4679/6841 f 3244/4641/6842 3267/4534/6842 3230/4486/6842 f 2932/4956/6843 2923/4927/6843 2924/4949/6843 f 2932/4956/6844 2942/4934/6844 2923/4927/6844 f 2942/4951/6845 2951/4957/6845 2971/4952/6845 f 2997/4958/6846 2979/4935/6846 2971/4950/6846 f 2997/4958/6847 2996/4936/6847 2979/4935/6847 f 2997/4958/6848 3044/4954/6848 2996/4936/6848 f 3067/4959/6849 3086/4924/6849 3056/4923/6849 f 3112/4940/6850 3127/4960/6850 3126/4925/6850 f 3292/4945/6851 3369/4961/6851 3325/4931/6851 f 2500/3055/6852 1164/4946/6852 3417/3056/6852 f 955/2175/6853 3018/2905/6853 2439/2906/6853 f 3272/3004/6854 1687/887/6854 235/824/6854 f 3070/4509/6855 3114/4636/6855 3081/4510/6855 f 1722/3157/6856 1748/3440/6856 2912/3439/6856 f 3054/1787/6857 3062/1789/6857 3053/4789/6857 f 3062/1789/6858 3083/4714/6858 3053/4789/6858 f 2959/4962/6859 2997/4958/6859 2971/4950/6859 f 3010/4963/6860 3044/4954/6860 2997/4958/6860 f 3098/4964/6861 3086/4924/6861 3067/4959/6861 f 3098/4964/6862 3112/4940/6862 3086/4924/6862 f 3369/4961/6863 3417/3056/6863 3325/4931/6863 f 3062/1789/6864 3135/4444/6864 3083/4714/6864 f 3123/4491/6865 3135/4444/6865 3091/1788/6865 f 1687/887/6866 217/875/6866 235/824/6866 f 3199/4710/6867 3198/4693/6867 3153/4609/6867 f 3267/4534/6868 3310/4596/6868 3309/4481/6868 f 3310/4596/6869 3345/4547/6869 3309/4481/6869 f 3177/4685/6870 3192/2546/6870 3176/4585/6870 f 2905/4117/6871 2924/4949/6871 2904/3186/6871 f 2942/4951/6872 2932/4965/6872 2951/4957/6872 f 2959/4962/6873 2971/4950/6873 2951/4966/6873 f 3010/4963/6874 3068/4967/6874 3044/4954/6874 f 3127/4960/6875 3112/4940/6875 3098/4964/6875 f 3293/4968/6876 3292/4945/6876 3257/4944/6876 f 3258/4969/6877 3293/4968/6877 3257/4944/6877 f 2976/2126/6878 2988/4268/6878 2967/4739/6878 f 993/4543/6879 2725/4697/6879 3423/4541/6879 f 3146/3863/6880 3167/4628/6880 3132/3864/6880 f 3148/4677/6881 3193/4718/6881 3147/4806/6881 f 2988/4268/6882 2999/4647/6882 2987/4269/6882 f 3193/4718/6883 3206/4970/6883 3205/1983/6883 f 2914/4780/6884 2932/4956/6884 2924/4949/6884 f 2932/4965/6885 2943/4971/6885 2951/4957/6885 f 2943/4972/6886 2959/4962/6886 2951/4966/6886 f 3023/4973/6887 3010/4963/6887 2997/4958/6887 f 3400/4662/6888 3417/3056/6888 3369/4961/6888 f 3192/2546/6889 3191/4590/6889 3176/4585/6889 f 3374/2436/6890 3385/2514/6890 3373/4670/6890 f 3024/292/6891 3058/4172/6891 3081/4510/6891 f 2919/4577/6892 2918/4576/6892 2909/2415/6892 f 2988/4268/6893 3015/4689/6893 2999/4647/6893 f 2905/4117/6894 2914/4780/6894 2924/4949/6894 f 2959/4962/6895 3023/4973/6895 2997/4958/6895 f 3079/4974/6896 3098/4964/6896 3067/4959/6896 f 3127/4960/6897 3098/4964/6897 3138/4975/6897 f 3326/166/6898 3292/4945/6898 3293/4968/6898 f 3326/166/6899 3369/4961/6899 3292/4945/6899 f 3359/4198/6900 3400/4662/6900 3369/4961/6900 f 575/3054/6901 3417/3056/6901 3400/4662/6901 f 1056/3478/6902 561/2361/6902 3136/3530/6902 f 2965/2730/6903 2986/2729/6903 2985/4505/6903 f 3063/898/6904 3092/2735/6904 954/577/6904 f 3069/4976/6905 3010/4963/6905 3023/4973/6905 f 3069/4976/6906 3068/4967/6906 3010/4963/6906 f 3158/4489/6907 3195/1932/6907 3157/4490/6907 f 3260/4597/6908 3267/4534/6908 3244/4641/6908 f 1474/4819/6909 3150/4812/6909 3109/4811/6909 f 2585/3101/6910 2725/4698/6910 1993/1966/6910 f 3374/2436/6911 3373/4670/6911 3346/4581/6911 f 3157/4490/6912 3194/4125/6912 3170/4676/6912 f 2932/4965/6913 2944/2230/6913 2943/4971/6913 f 2952/69/6914 2959/4962/6914 2943/4972/6914 f 2952/69/6915 2972/68/6915 2959/4962/6915 f 2972/68/6916 3023/4973/6916 2959/4962/6916 f 3099/4688/6917 3098/4964/6917 3079/4974/6917 f 3099/4688/6918 3139/3100/6918 3098/4964/6918 f 3098/4964/6919 3139/3100/6919 3138/4975/6919 f 3401/3140/6920 3400/4662/6920 3359/4198/6920 f 3074/3134/6921 3073/4651/6921 3035/3135/6921 f 2987/4269/6922 2999/4647/6922 2940/4423/6922 f 331/525/6923 3386/567/6923 263/566/6923 f 2973/4679/6924 3024/292/6924 2953/4680/6924 f 3260/4597/6925 3244/4641/6925 3201/4569/6925 f 3074/3134/6926 3104/4588/6926 3073/4651/6926 f 3201/4569/6927 3244/4641/6927 3200/4642/6927 f 2915/3582/6928 2914/4780/6928 2905/4117/6928 f 2914/4780/6929 2925/3824/6929 2932/4956/6929 f 2932/4965/6930 2925/2228/6930 2944/2230/6930 f 2952/69/6931 2943/4972/6931 2944/3743/6931 f 3032/3388/6932 3023/4973/6932 2972/68/6932 f 3032/3388/6933 3069/4976/6933 3023/4973/6933 f 3139/3100/6934 3162/4977/6934 3138/4975/6934 f 3305/167/6935 3258/4969/6935 3240/3903/6935 f 3305/167/6936 3293/4968/6936 3258/4969/6936 f 3326/166/6937 3359/4198/6937 3369/4961/6937 f 1688/3018/6938 3387/3042/6938 3403/4706/6938 f 3230/4486/6939 3229/4483/6939 3200/4642/6939 f 2906/2458/6940 2915/3582/6940 2905/4117/6940 f 3033/67/6941 3032/3388/6941 2972/68/6941 f 3032/3388/6942 3080/3676/6942 3069/4976/6942 f 3139/3100/6943 3128/1219/6943 3162/4977/6943 f 3305/167/6944 3326/166/6944 3293/4968/6944 f 1478/2828/6945 3367/3009/6945 1486/2877/6945 ================================================ FILE: libs/potree/resources/textures/LICENSE ================================================ brick_pavement.jpg: http://www.wildtextures.com/terms-of-use/ ============================== All textures at wildtextures.com are completely free for both, personal and commercial use, however you can’t: host textures for download on any other website or server, direct link to texture file from any other website ( however you can link to texture page ), sell them as a stock materials, ============================== ================================================ FILE: libs/potree/resources/textures/matcap/blender_matcap_license.txt ================================================ These matcap images are licensed as CC0 or public domain. Thanks to the Blender community for contributing these matcaps. (Matcap images from /Blender/2.80/datafiles/studiolights/matcap/*") ================================================ FILE: libs/potree/resources/textures/skybox/skyboxsun25degtest.txt ================================================ http://reije081.home.xs4all.nl/skyboxes/ ================================================ FILE: libs/potree/resources/textures/skybox2/README.TXT ================================================ THIS SKY WAS UPDATED AT THE 27TH THE ORIG HAD SOME ERRORS MIRAMAR high res 1024^2 environment map ships as TGA. By Jockum Skoglund aka hipshot hipshot@zfight.com www.zfight.com Stockholm, 2005 08 25 Modify however you like, just cred me for my work, maybe link to my page. ================================================ FILE: libs/potree/resources/textures/skyboxsun25degtest.txt ================================================ http://reije081.home.xs4all.nl/skyboxes/ ================================================ FILE: libs/potree/sidebar.html ================================================ ================================================ FILE: libs/potree/workers/2.0/DecoderWorker.js ================================================ /** * Some types of possible point attribute data formats * * @class */ const PointAttributeTypes = { DATA_TYPE_DOUBLE: {ordinal: 0, name: "double", size: 8}, DATA_TYPE_FLOAT: {ordinal: 1, name: "float", size: 4}, DATA_TYPE_INT8: {ordinal: 2, name: "int8", size: 1}, DATA_TYPE_UINT8: {ordinal: 3, name: "uint8", size: 1}, DATA_TYPE_INT16: {ordinal: 4, name: "int16", size: 2}, DATA_TYPE_UINT16: {ordinal: 5, name: "uint16", size: 2}, DATA_TYPE_INT32: {ordinal: 6, name: "int32", size: 4}, DATA_TYPE_UINT32: {ordinal: 7, name: "uint32", size: 4}, DATA_TYPE_INT64: {ordinal: 8, name: "int64", size: 8}, DATA_TYPE_UINT64: {ordinal: 9, name: "uint64", size: 8} }; let i = 0; for (let obj in PointAttributeTypes) { PointAttributeTypes[i] = PointAttributeTypes[obj]; i++; } class PointAttribute{ constructor(name, type, numElements){ this.name = name; this.type = type; this.numElements = numElements; this.byteSize = this.numElements * this.type.size; this.description = ""; this.range = [Infinity, -Infinity]; } } PointAttribute.POSITION_CARTESIAN = new PointAttribute( "POSITION_CARTESIAN", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.RGBA_PACKED = new PointAttribute( "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 4); PointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED; PointAttribute.RGB_PACKED = new PointAttribute( "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 3); PointAttribute.NORMAL_FLOATS = new PointAttribute( "NORMAL_FLOATS", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.INTENSITY = new PointAttribute( "INTENSITY", PointAttributeTypes.DATA_TYPE_UINT16, 1); PointAttribute.CLASSIFICATION = new PointAttribute( "CLASSIFICATION", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute( "NORMAL_SPHEREMAPPED", PointAttributeTypes.DATA_TYPE_UINT8, 2); PointAttribute.NORMAL_OCT16 = new PointAttribute( "NORMAL_OCT16", PointAttributeTypes.DATA_TYPE_UINT8, 2); PointAttribute.NORMAL = new PointAttribute( "NORMAL", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.RETURN_NUMBER = new PointAttribute( "RETURN_NUMBER", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.NUMBER_OF_RETURNS = new PointAttribute( "NUMBER_OF_RETURNS", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.SOURCE_ID = new PointAttribute( "SOURCE_ID", PointAttributeTypes.DATA_TYPE_UINT16, 1); PointAttribute.INDICES = new PointAttribute( "INDICES", PointAttributeTypes.DATA_TYPE_UINT32, 1); PointAttribute.SPACING = new PointAttribute( "SPACING", PointAttributeTypes.DATA_TYPE_FLOAT, 1); PointAttribute.GPS_TIME = new PointAttribute( "GPS_TIME", PointAttributeTypes.DATA_TYPE_DOUBLE, 1); const typedArrayMapping = { "int8": Int8Array, "int16": Int16Array, "int32": Int32Array, "int64": Float64Array, "uint8": Uint8Array, "uint16": Uint16Array, "uint32": Uint32Array, "uint64": Float64Array, "float": Float32Array, "double": Float64Array, }; Potree = {}; onmessage = function (event) { let {buffer, pointAttributes, scale, name, min, max, size, offset, numPoints} = event.data; let tStart = performance.now(); let view = new DataView(buffer); let attributeBuffers = {}; let attributeOffset = 0; let bytesPerPoint = 0; for (let pointAttribute of pointAttributes.attributes) { bytesPerPoint += pointAttribute.byteSize; } let gridSize = 32; let grid = new Uint32Array(gridSize ** 3); let toIndex = (x, y, z) => { // let dx = gridSize * (x - min.x) / size.x; // let dy = gridSize * (y - min.y) / size.y; // let dz = gridSize * (z - min.z) / size.z; // min is already subtracted let dx = gridSize * x / size.x; let dy = gridSize * y / size.y; let dz = gridSize * z / size.z; let ix = Math.min(parseInt(dx), gridSize - 1); let iy = Math.min(parseInt(dy), gridSize - 1); let iz = Math.min(parseInt(dz), gridSize - 1); let index = ix + iy * gridSize + iz * gridSize * gridSize; return index; }; let numOccupiedCells = 0; for (let pointAttribute of pointAttributes.attributes) { if(["POSITION_CARTESIAN", "position"].includes(pointAttribute.name)){ let buff = new ArrayBuffer(numPoints * 4 * 3); let positions = new Float32Array(buff); for (let j = 0; j < numPoints; j++) { let pointOffset = j * bytesPerPoint; let x = (view.getInt32(pointOffset + attributeOffset + 0, true) * scale[0]) + offset[0] - min.x; let y = (view.getInt32(pointOffset + attributeOffset + 4, true) * scale[1]) + offset[1] - min.y; let z = (view.getInt32(pointOffset + attributeOffset + 8, true) * scale[2]) + offset[2] - min.z; let index = toIndex(x, y, z); let count = grid[index]++; if(count === 0){ numOccupiedCells++; } positions[3 * j + 0] = x; positions[3 * j + 1] = y; positions[3 * j + 2] = z; } attributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute }; }else if(["RGBA", "rgba"].includes(pointAttribute.name)){ let buff = new ArrayBuffer(numPoints * 4); let colors = new Uint8Array(buff); for (let j = 0; j < numPoints; j++) { let pointOffset = j * bytesPerPoint; let r = view.getUint16(pointOffset + attributeOffset + 0, true); let g = view.getUint16(pointOffset + attributeOffset + 2, true); let b = view.getUint16(pointOffset + attributeOffset + 4, true); colors[4 * j + 0] = r > 255 ? r / 256 : r; colors[4 * j + 1] = g > 255 ? g / 256 : g; colors[4 * j + 2] = b > 255 ? b / 256 : b; } attributeBuffers[pointAttribute.name] = { buffer: buff, attribute: pointAttribute }; }else { let buff = new ArrayBuffer(numPoints * 4); let f32 = new Float32Array(buff); let TypedArray = typedArrayMapping[pointAttribute.type.name]; preciseBuffer = new TypedArray(numPoints); let [offset, scale] = [0, 1]; const getterMap = { "int8": view.getInt8, "int16": view.getInt16, "int32": view.getInt32, // "int64": view.getInt64, "uint8": view.getUint8, "uint16": view.getUint16, "uint32": view.getUint32, // "uint64": view.getUint64, "float": view.getFloat32, "double": view.getFloat64, }; const getter = getterMap[pointAttribute.type.name].bind(view); // compute offset and scale to pack larger types into 32 bit floats if(pointAttribute.type.size > 4){ let [amin, amax] = pointAttribute.range; offset = amin; scale = 1 / (amax - amin); } for(let j = 0; j < numPoints; j++){ let pointOffset = j * bytesPerPoint; let value = getter(pointOffset + attributeOffset, true); f32[j] = (value - offset) * scale; preciseBuffer[j] = value; } attributeBuffers[pointAttribute.name] = { buffer: buff, preciseBuffer: preciseBuffer, attribute: pointAttribute, offset: offset, scale: scale, }; } attributeOffset += pointAttribute.byteSize; } let occupancy = parseInt(numPoints / numOccupiedCells); // console.log(`${name}: #points: ${numPoints}: #occupiedCells: ${numOccupiedCells}, occupancy: ${occupancy} points/cell`); { // add indices let buff = new ArrayBuffer(numPoints * 4); let indices = new Uint32Array(buff); for (let i = 0; i < numPoints; i++) { indices[i] = i; } attributeBuffers["INDICES"] = { buffer: buff, attribute: PointAttribute.INDICES }; } { // handle attribute vectors let vectors = pointAttributes.vectors; for(let vector of vectors){ let {name, attributes} = vector; let numVectorElements = attributes.length; let buffer = new ArrayBuffer(numVectorElements * numPoints * 4); let f32 = new Float32Array(buffer); let iElement = 0; for(let sourceName of attributes){ let sourceBuffer = attributeBuffers[sourceName]; let {offset, scale} = sourceBuffer; let view = new DataView(sourceBuffer.buffer); const getter = view.getFloat32.bind(view); for(let j = 0; j < numPoints; j++){ let value = getter(j * 4, true); f32[j * numVectorElements + iElement] = (value / scale) + offset; } iElement++; } let vecAttribute = new PointAttribute(name, PointAttributeTypes.DATA_TYPE_FLOAT, 3); attributeBuffers[name] = { buffer: buffer, attribute: vecAttribute, }; } } // let duration = performance.now() - tStart; // let pointsPerMs = numPoints / duration; // console.log(`duration: ${duration.toFixed(1)}ms, #points: ${numPoints}, points/ms: ${pointsPerMs.toFixed(1)}`); let message = { buffer: buffer, attributeBuffers: attributeBuffers, density: occupancy, }; let transferables = []; for (let property in message.attributeBuffers) { transferables.push(message.attributeBuffers[property].buffer); } transferables.push(buffer); postMessage(message, transferables); }; ================================================ FILE: libs/potree/workers/2.0/DecoderWorker_brotli.js ================================================ /** * Some types of possible point attribute data formats * * @class */ const PointAttributeTypes = { DATA_TYPE_DOUBLE: {ordinal: 0, name: "double", size: 8}, DATA_TYPE_FLOAT: {ordinal: 1, name: "float", size: 4}, DATA_TYPE_INT8: {ordinal: 2, name: "int8", size: 1}, DATA_TYPE_UINT8: {ordinal: 3, name: "uint8", size: 1}, DATA_TYPE_INT16: {ordinal: 4, name: "int16", size: 2}, DATA_TYPE_UINT16: {ordinal: 5, name: "uint16", size: 2}, DATA_TYPE_INT32: {ordinal: 6, name: "int32", size: 4}, DATA_TYPE_UINT32: {ordinal: 7, name: "uint32", size: 4}, DATA_TYPE_INT64: {ordinal: 8, name: "int64", size: 8}, DATA_TYPE_UINT64: {ordinal: 9, name: "uint64", size: 8} }; let i = 0; for (let obj in PointAttributeTypes) { PointAttributeTypes[i] = PointAttributeTypes[obj]; i++; } class PointAttribute{ constructor(name, type, numElements){ this.name = name; this.type = type; this.numElements = numElements; this.byteSize = this.numElements * this.type.size; this.description = ""; this.range = [Infinity, -Infinity]; } } PointAttribute.POSITION_CARTESIAN = new PointAttribute( "POSITION_CARTESIAN", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.RGBA_PACKED = new PointAttribute( "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 4); PointAttribute.COLOR_PACKED = PointAttribute.RGBA_PACKED; PointAttribute.RGB_PACKED = new PointAttribute( "COLOR_PACKED", PointAttributeTypes.DATA_TYPE_INT8, 3); PointAttribute.NORMAL_FLOATS = new PointAttribute( "NORMAL_FLOATS", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.INTENSITY = new PointAttribute( "INTENSITY", PointAttributeTypes.DATA_TYPE_UINT16, 1); PointAttribute.CLASSIFICATION = new PointAttribute( "CLASSIFICATION", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.NORMAL_SPHEREMAPPED = new PointAttribute( "NORMAL_SPHEREMAPPED", PointAttributeTypes.DATA_TYPE_UINT8, 2); PointAttribute.NORMAL_OCT16 = new PointAttribute( "NORMAL_OCT16", PointAttributeTypes.DATA_TYPE_UINT8, 2); PointAttribute.NORMAL = new PointAttribute( "NORMAL", PointAttributeTypes.DATA_TYPE_FLOAT, 3); PointAttribute.RETURN_NUMBER = new PointAttribute( "RETURN_NUMBER", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.NUMBER_OF_RETURNS = new PointAttribute( "NUMBER_OF_RETURNS", PointAttributeTypes.DATA_TYPE_UINT8, 1); PointAttribute.SOURCE_ID = new PointAttribute( "SOURCE_ID", PointAttributeTypes.DATA_TYPE_UINT16, 1); PointAttribute.INDICES = new PointAttribute( "INDICES", PointAttributeTypes.DATA_TYPE_UINT32, 1); PointAttribute.SPACING = new PointAttribute( "SPACING", PointAttributeTypes.DATA_TYPE_FLOAT, 1); PointAttribute.GPS_TIME = new PointAttribute( "GPS_TIME", PointAttributeTypes.DATA_TYPE_DOUBLE, 1); /* Copyright 2017 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** @return {function(!Int8Array):!Int8Array} */ function BrotliDecodeClosure() { /** @type {!Int8Array} */ var DICTIONARY_DATA = new Int8Array(0); /** * @constructor * @param {!Int8Array} bytes * @struct */ function InputStream(bytes) { /** @type {!Int8Array} */ this.data = bytes; /** @type {!number} */ this.offset = 0; } var MAX_HUFFMAN_TABLE_SIZE = Int32Array.from([256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822, 854, 886, 920, 952, 984, 1016, 1048, 1080]); var CODE_LENGTH_CODE_ORDER = Int32Array.from([1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15]); var DISTANCE_SHORT_CODE_INDEX_OFFSET = Int32Array.from([0, 3, 2, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3]); var DISTANCE_SHORT_CODE_VALUE_OFFSET = Int32Array.from([0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3]); var FIXED_TABLE = Int32Array.from([0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040001, 0x020000, 0x020004, 0x020003, 0x030002, 0x020000, 0x020004, 0x020003, 0x040005]); var DICTIONARY_OFFSETS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280, 122016]); var DICTIONARY_SIZE_BITS_BY_LENGTH = Int32Array.from([0, 0, 0, 0, 10, 10, 11, 11, 10, 10, 10, 10, 10, 9, 9, 8, 7, 7, 8, 7, 7, 6, 6, 5, 5]); var BLOCK_LENGTH_OFFSET = Int32Array.from([1, 5, 9, 13, 17, 25, 33, 41, 49, 65, 81, 97, 113, 145, 177, 209, 241, 305, 369, 497, 753, 1265, 2289, 4337, 8433, 16625]); var BLOCK_LENGTH_N_BITS = Int32Array.from([2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 7, 8, 9, 10, 11, 12, 13, 24]); var INSERT_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0C, 0x0E, 0x18]); var COPY_LENGTH_N_BITS = Int16Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x04, 0x04, 0x05, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x18]); var CMD_LOOKUP = new Int16Array(2816); { unpackCommandLookupTable(CMD_LOOKUP); } /** * @param {number} i * @return {number} */ function log2floor(i) { var /** number */ result = -1; var /** number */ step = 16; while (step > 0) { if ((i >>> step) != 0) { result += step; i = i >>> step; } step = step >> 1; } return result + i; } /** * @param {number} npostfix * @param {number} ndirect * @param {number} maxndistbits * @return {number} */ function calculateDistanceAlphabetSize(npostfix, ndirect, maxndistbits) { return 16 + ndirect + 2 * (maxndistbits << npostfix); } /** * @param {number} maxDistance * @param {number} npostfix * @param {number} ndirect * @return {number} */ function calculateDistanceAlphabetLimit(maxDistance, npostfix, ndirect) { if (maxDistance < ndirect + (2 << npostfix)) { throw "maxDistance is too small"; } var /** number */ offset = ((maxDistance - ndirect) >> npostfix) + 4; var /** number */ ndistbits = log2floor(offset) - 1; var /** number */ group = ((ndistbits - 1) << 1) | ((offset >> ndistbits) & 1); return ((group - 1) << npostfix) + (1 << npostfix) + ndirect + 16; } /** * @param {!Int16Array} cmdLookup * @return {void} */ function unpackCommandLookupTable(cmdLookup) { var /** !Int16Array */ insertLengthOffsets = new Int16Array(24); var /** !Int16Array */ copyLengthOffsets = new Int16Array(24); copyLengthOffsets[0] = 2; for (var /** number */ i = 0; i < 23; ++i) { insertLengthOffsets[i + 1] = (insertLengthOffsets[i] + (1 << INSERT_LENGTH_N_BITS[i])); copyLengthOffsets[i + 1] = (copyLengthOffsets[i] + (1 << COPY_LENGTH_N_BITS[i])); } for (var /** number */ cmdCode = 0; cmdCode < 704; ++cmdCode) { var /** number */ rangeIdx = cmdCode >>> 6; var /** number */ distanceContextOffset = -4; if (rangeIdx >= 2) { rangeIdx -= 2; distanceContextOffset = 0; } var /** number */ insertCode = (((0x29850 >>> (rangeIdx * 2)) & 0x3) << 3) | ((cmdCode >>> 3) & 7); var /** number */ copyCode = (((0x26244 >>> (rangeIdx * 2)) & 0x3) << 3) | (cmdCode & 7); var /** number */ copyLengthOffset = copyLengthOffsets[copyCode]; var /** number */ distanceContext = distanceContextOffset + (copyLengthOffset > 4 ? 3 : copyLengthOffset - 2); var /** number */ index = cmdCode * 4; cmdLookup[index + 0] = (INSERT_LENGTH_N_BITS[insertCode] | (COPY_LENGTH_N_BITS[copyCode] << 8)); cmdLookup[index + 1] = insertLengthOffsets[insertCode]; cmdLookup[index + 2] = copyLengthOffsets[copyCode]; cmdLookup[index + 3] = distanceContext; } } /** * @param {!State} s * @return {number} */ function decodeWindowBits(s) { var /** number */ largeWindowEnabled = s.isLargeWindow; s.isLargeWindow = 0; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) == 0) { return 16; } var /** number */ n = readFewBits(s, 3); if (n != 0) { return 17 + n; } n = readFewBits(s, 3); if (n != 0) { if (n == 1) { if (largeWindowEnabled == 0) { return -1; } s.isLargeWindow = 1; if (readFewBits(s, 1) == 1) { return -1; } n = readFewBits(s, 6); if (n < 10 || n > 30) { return -1; } return n; } else { return 8 + n; } } return 17; } /** * @param {!State} s * @param {!InputStream} input * @return {void} */ function initState(s, input) { if (s.runningState != 0) { throw "State MUST be uninitialized"; } s.blockTrees = new Int32Array(3091); s.blockTrees[0] = 7; s.distRbIdx = 3; var /** number */ maxDistanceAlphabetLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, 3, 15 << 3); s.distExtraBits = new Int8Array(maxDistanceAlphabetLimit); s.distOffset = new Int32Array(maxDistanceAlphabetLimit); s.input = input; initBitReader(s); s.runningState = 1; } /** * @param {!State} s * @return {void} */ function close(s) { if (s.runningState == 0) { throw "State MUST be initialized"; } if (s.runningState == 11) { return; } s.runningState = 11; if (s.input != null) { closeInput(s.input); s.input = null; } } /** * @param {!State} s * @return {number} */ function decodeVarLenUnsignedByte(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) != 0) { var /** number */ n = readFewBits(s, 3); if (n == 0) { return 1; } else { return readFewBits(s, n) + (1 << n); } } return 0; } /** * @param {!State} s * @return {void} */ function decodeMetaBlockLength(s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.inputEnd = readFewBits(s, 1); s.metaBlockLength = 0; s.isUncompressed = 0; s.isMetadata = 0; if ((s.inputEnd != 0) && readFewBits(s, 1) != 0) { return; } var /** number */ sizeNibbles = readFewBits(s, 2) + 4; if (sizeNibbles == 7) { s.isMetadata = 1; if (readFewBits(s, 1) != 0) { throw "Corrupted reserved bit"; } var /** number */ sizeBytes = readFewBits(s, 2); if (sizeBytes == 0) { return; } for (var /** number */ i = 0; i < sizeBytes; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ bits = readFewBits(s, 8); if (bits == 0 && i + 1 == sizeBytes && sizeBytes > 1) { throw "Exuberant nibble"; } s.metaBlockLength |= bits << (i * 8); } } else { for (var /** number */ i = 0; i < sizeNibbles; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ bits = readFewBits(s, 4); if (bits == 0 && i + 1 == sizeNibbles && sizeNibbles > 4) { throw "Exuberant nibble"; } s.metaBlockLength |= bits << (i * 4); } } s.metaBlockLength++; if (s.inputEnd == 0) { s.isUncompressed = readFewBits(s, 1); } } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSymbol(tableGroup, tableIdx, s) { var /** number */ offset = tableGroup[tableIdx]; var /** number */ val = (s.accumulator32 >>> s.bitOffset); offset += val & 0xFF; var /** number */ bits = tableGroup[offset] >> 16; var /** number */ sym = tableGroup[offset] & 0xFFFF; if (bits <= 8) { s.bitOffset += bits; return sym; } offset += sym; var /** number */ mask = (1 << bits) - 1; offset += (val & mask) >>> 8; s.bitOffset += ((tableGroup[offset] >> 16) + 8); return tableGroup[offset] & 0xFFFF; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readBlockLength(tableGroup, tableIdx, s) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ code = readSymbol(tableGroup, tableIdx, s); var /** number */ n = BLOCK_LENGTH_N_BITS[code]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } return BLOCK_LENGTH_OFFSET[code] + ((n <= 16) ? readFewBits(s, n) : readManyBits(s, n)); } /** * @param {!Int32Array} v * @param {number} index * @return {void} */ function moveToFront(v, index) { var /** number */ value = v[index]; for (; index > 0; index--) { v[index] = v[index - 1]; } v[0] = value; } /** * @param {!Int8Array} v * @param {number} vLen * @return {void} */ function inverseMoveToFrontTransform(v, vLen) { var /** !Int32Array */ mtf = new Int32Array(256); for (var /** number */ i = 0; i < 256; i++) { mtf[i] = i; } for (var /** number */ i = 0; i < vLen; i++) { var /** number */ index = v[i] & 0xFF; v[i] = mtf[index]; if (index != 0) { moveToFront(mtf, index); } } } /** * @param {!Int32Array} codeLengthCodeLengths * @param {number} numSymbols * @param {!Int32Array} codeLengths * @param {!State} s * @return {void} */ function readHuffmanCodeLengths(codeLengthCodeLengths, numSymbols, codeLengths, s) { var /** number */ symbol = 0; var /** number */ prevCodeLen = 8; var /** number */ repeat = 0; var /** number */ repeatCodeLen = 0; var /** number */ space = 32768; var /** !Int32Array */ table = new Int32Array(32 + 1); var /** number */ tableIdx = table.length - 1; buildHuffmanTable(table, tableIdx, 5, codeLengthCodeLengths, 18); while (symbol < numSymbols && space > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 31; s.bitOffset += table[p] >> 16; var /** number */ codeLen = table[p] & 0xFFFF; if (codeLen < 16) { repeat = 0; codeLengths[symbol++] = codeLen; if (codeLen != 0) { prevCodeLen = codeLen; space -= 32768 >> codeLen; } } else { var /** number */ extraBits = codeLen - 14; var /** number */ newLen = 0; if (codeLen == 16) { newLen = prevCodeLen; } if (repeatCodeLen != newLen) { repeat = 0; repeatCodeLen = newLen; } var /** number */ oldRepeat = repeat; if (repeat > 0) { repeat -= 2; repeat <<= extraBits; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } repeat += readFewBits(s, extraBits) + 3; var /** number */ repeatDelta = repeat - oldRepeat; if (symbol + repeatDelta > numSymbols) { throw "symbol + repeatDelta > numSymbols"; } for (var /** number */ i = 0; i < repeatDelta; i++) { codeLengths[symbol++] = repeatCodeLen; } if (repeatCodeLen != 0) { space -= repeatDelta << (15 - repeatCodeLen); } } } if (space != 0) { throw "Unused space"; } codeLengths.fill(0, symbol, numSymbols); } /** * @param {!Int32Array} symbols * @param {number} length * @return {void} */ function checkDupes(symbols, length) { for (var /** number */ i = 0; i < length - 1; ++i) { for (var /** number */ j = i + 1; j < length; ++j) { if (symbols[i] == symbols[j]) { throw "Duplicate simple Huffman code symbol"; } } } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); var /** !Int32Array */ symbols = new Int32Array(4); var /** number */ maxBits = 1 + log2floor(alphabetSizeMax - 1); var /** number */ numSymbols = readFewBits(s, 2) + 1; for (var /** number */ i = 0; i < numSymbols; i++) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ symbol = readFewBits(s, maxBits); if (symbol >= alphabetSizeLimit) { throw "Can't readHuffmanCode"; } symbols[i] = symbol; } checkDupes(symbols, numSymbols); var /** number */ histogramId = numSymbols; if (numSymbols == 4) { histogramId += readFewBits(s, 1); } switch(histogramId) { case 1: codeLengths[symbols[0]] = 1; break; case 2: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 1; break; case 3: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; break; case 4: codeLengths[symbols[0]] = 2; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 2; codeLengths[symbols[3]] = 2; break; case 5: codeLengths[symbols[0]] = 1; codeLengths[symbols[1]] = 2; codeLengths[symbols[2]] = 3; codeLengths[symbols[3]] = 3; break; } return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeLimit * @param {number} skip * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readComplexHuffmanCode(alphabetSizeLimit, skip, tableGroup, tableIdx, s) { var /** !Int32Array */ codeLengths = new Int32Array(alphabetSizeLimit); var /** !Int32Array */ codeLengthCodeLengths = new Int32Array(18); var /** number */ space = 32; var /** number */ numCodes = 0; for (var /** number */ i = skip; i < 18 && space > 0; i++) { var /** number */ codeLenIdx = CODE_LENGTH_CODE_ORDER[i]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ p = (s.accumulator32 >>> s.bitOffset) & 15; s.bitOffset += FIXED_TABLE[p] >> 16; var /** number */ v = FIXED_TABLE[p] & 0xFFFF; codeLengthCodeLengths[codeLenIdx] = v; if (v != 0) { space -= (32 >> v); numCodes++; } } if (space != 0 && numCodes != 1) { throw "Corrupted Huffman code histogram"; } readHuffmanCodeLengths(codeLengthCodeLengths, alphabetSizeLimit, codeLengths, s); return buildHuffmanTable(tableGroup, tableIdx, 8, codeLengths, alphabetSizeLimit); } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {!State} s * @return {number} */ function readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ simpleCodeOrSkip = readFewBits(s, 2); if (simpleCodeOrSkip == 1) { return readSimpleHuffmanCode(alphabetSizeMax, alphabetSizeLimit, tableGroup, tableIdx, s); } else { return readComplexHuffmanCode(alphabetSizeLimit, simpleCodeOrSkip, tableGroup, tableIdx, s); } } /** * @param {number} contextMapSize * @param {!Int8Array} contextMap * @param {!State} s * @return {number} */ function decodeContextMap(contextMapSize, contextMap, s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } var /** number */ numTrees = decodeVarLenUnsignedByte(s) + 1; if (numTrees == 1) { contextMap.fill(0, 0, contextMapSize); return numTrees; } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ useRleForZeros = readFewBits(s, 1); var /** number */ maxRunLengthPrefix = 0; if (useRleForZeros != 0) { maxRunLengthPrefix = readFewBits(s, 4) + 1; } var /** number */ alphabetSize = numTrees + maxRunLengthPrefix; var /** number */ tableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSize + 31) >> 5]; var /** !Int32Array */ table = new Int32Array(tableSize + 1); var /** number */ tableIdx = table.length - 1; readHuffmanCode(alphabetSize, alphabetSize, table, tableIdx, s); for (var /** number */ i = 0; i < contextMapSize; ) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ code = readSymbol(table, tableIdx, s); if (code == 0) { contextMap[i] = 0; i++; } else if (code <= maxRunLengthPrefix) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ reps = (1 << code) + readFewBits(s, code); while (reps != 0) { if (i >= contextMapSize) { throw "Corrupted context map"; } contextMap[i] = 0; i++; reps--; } } else { contextMap[i] = (code - maxRunLengthPrefix); i++; } } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } if (readFewBits(s, 1) == 1) { inverseMoveToFrontTransform(contextMap, contextMapSize); } return numTrees; } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function decodeBlockTypeAndLength(s, treeType, numBlockTypes) { var /** !Int32Array */ ringBuffers = s.rings; var /** number */ offset = 4 + treeType * 2; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ blockType = readSymbol(s.blockTrees, 2 * treeType, s); var /** number */ result = readBlockLength(s.blockTrees, 2 * treeType + 1, s); if (blockType == 1) { blockType = ringBuffers[offset + 1] + 1; } else if (blockType == 0) { blockType = ringBuffers[offset]; } else { blockType -= 2; } if (blockType >= numBlockTypes) { blockType -= numBlockTypes; } ringBuffers[offset] = ringBuffers[offset + 1]; ringBuffers[offset + 1] = blockType; return result; } /** * @param {!State} s * @return {void} */ function decodeLiteralBlockSwitch(s) { s.literalBlockLength = decodeBlockTypeAndLength(s, 0, s.numLiteralBlockTypes); var /** number */ literalBlockType = s.rings[5]; s.contextMapSlice = literalBlockType << 6; s.literalTreeIdx = s.contextMap[s.contextMapSlice] & 0xFF; var /** number */ contextMode = s.contextModes[literalBlockType]; s.contextLookupOffset1 = contextMode << 9; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; } /** * @param {!State} s * @return {void} */ function decodeCommandBlockSwitch(s) { s.commandBlockLength = decodeBlockTypeAndLength(s, 1, s.numCommandBlockTypes); s.commandTreeIdx = s.rings[7]; } /** * @param {!State} s * @return {void} */ function decodeDistanceBlockSwitch(s) { s.distanceBlockLength = decodeBlockTypeAndLength(s, 2, s.numDistanceBlockTypes); s.distContextMapSlice = s.rings[9] << 2; } /** * @param {!State} s * @return {void} */ function maybeReallocateRingBuffer(s) { var /** number */ newSize = s.maxRingBufferSize; if (newSize > s.expectedTotalSize) { var /** number */ minimalNewSize = s.expectedTotalSize; while ((newSize >> 1) > minimalNewSize) { newSize >>= 1; } if ((s.inputEnd == 0) && newSize < 16384 && s.maxRingBufferSize >= 16384) { newSize = 16384; } } if (newSize <= s.ringBufferSize) { return; } var /** number */ ringBufferSizeWithSlack = newSize + 37; var /** !Int8Array */ newBuffer = new Int8Array(ringBufferSizeWithSlack); if (s.ringBuffer.length != 0) { newBuffer.set(s.ringBuffer.subarray(0, 0 + s.ringBufferSize), 0); } s.ringBuffer = newBuffer; s.ringBufferSize = newSize; } /** * @param {!State} s * @return {void} */ function readNextMetablockHeader(s) { if (s.inputEnd != 0) { s.nextRunningState = 10; s.runningState = 12; return; } s.literalTreeGroup = new Int32Array(0); s.commandTreeGroup = new Int32Array(0); s.distanceTreeGroup = new Int32Array(0); if (s.halfOffset > 2030) { doReadMoreInput(s); } decodeMetaBlockLength(s); if ((s.metaBlockLength == 0) && (s.isMetadata == 0)) { return; } if ((s.isUncompressed != 0) || (s.isMetadata != 0)) { jumpToByteBoundary(s); s.runningState = (s.isMetadata != 0) ? 5 : 6; } else { s.runningState = 3; } if (s.isMetadata != 0) { return; } s.expectedTotalSize += s.metaBlockLength; if (s.expectedTotalSize > 1 << 30) { s.expectedTotalSize = 1 << 30; } if (s.ringBufferSize < s.maxRingBufferSize) { maybeReallocateRingBuffer(s); } } /** * @param {!State} s * @param {number} treeType * @param {number} numBlockTypes * @return {number} */ function readMetablockPartition(s, treeType, numBlockTypes) { var /** number */ offset = s.blockTrees[2 * treeType]; if (numBlockTypes <= 1) { s.blockTrees[2 * treeType + 1] = offset; s.blockTrees[2 * treeType + 2] = offset; return 1 << 28; } var /** number */ blockTypeAlphabetSize = numBlockTypes + 2; offset += readHuffmanCode(blockTypeAlphabetSize, blockTypeAlphabetSize, s.blockTrees, 2 * treeType, s); s.blockTrees[2 * treeType + 1] = offset; var /** number */ blockLengthAlphabetSize = 26; offset += readHuffmanCode(blockLengthAlphabetSize, blockLengthAlphabetSize, s.blockTrees, 2 * treeType + 1, s); s.blockTrees[2 * treeType + 2] = offset; return readBlockLength(s.blockTrees, 2 * treeType + 1, s); } /** * @param {!State} s * @param {number} alphabetSizeLimit * @return {void} */ function calculateDistanceLut(s, alphabetSizeLimit) { var /** !Int8Array */ distExtraBits = s.distExtraBits; var /** !Int32Array */ distOffset = s.distOffset; var /** number */ npostfix = s.distancePostfixBits; var /** number */ ndirect = s.numDirectDistanceCodes; var /** number */ postfix = 1 << npostfix; var /** number */ bits = 1; var /** number */ half = 0; var /** number */ i = 16; for (var /** number */ j = 0; j < ndirect; ++j) { distExtraBits[i] = 0; distOffset[i] = j + 1; ++i; } while (i < alphabetSizeLimit) { var /** number */ base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1; for (var /** number */ j = 0; j < postfix; ++j) { distExtraBits[i] = bits; distOffset[i] = base + j; ++i; } bits = bits + half; half = half ^ 1; } } /** * @param {!State} s * @return {void} */ function readMetablockHuffmanCodesAndContextMaps(s) { s.numLiteralBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.literalBlockLength = readMetablockPartition(s, 0, s.numLiteralBlockTypes); s.numCommandBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.commandBlockLength = readMetablockPartition(s, 1, s.numCommandBlockTypes); s.numDistanceBlockTypes = decodeVarLenUnsignedByte(s) + 1; s.distanceBlockLength = readMetablockPartition(s, 2, s.numDistanceBlockTypes); if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.distancePostfixBits = readFewBits(s, 2); s.numDirectDistanceCodes = readFewBits(s, 4) << s.distancePostfixBits; s.distancePostfixMask = (1 << s.distancePostfixBits) - 1; s.contextModes = new Int8Array(s.numLiteralBlockTypes); for (var /** number */ i = 0; i < s.numLiteralBlockTypes; ) { var /** number */ limit = min(i + 96, s.numLiteralBlockTypes); for (; i < limit; ++i) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } s.contextModes[i] = readFewBits(s, 2); } if (s.halfOffset > 2030) { doReadMoreInput(s); } } s.contextMap = new Int8Array(s.numLiteralBlockTypes << 6); var /** number */ numLiteralTrees = decodeContextMap(s.numLiteralBlockTypes << 6, s.contextMap, s); s.trivialLiteralContext = 1; for (var /** number */ j = 0; j < s.numLiteralBlockTypes << 6; j++) { if (s.contextMap[j] != j >> 6) { s.trivialLiteralContext = 0; break; } } s.distContextMap = new Int8Array(s.numDistanceBlockTypes << 2); var /** number */ numDistTrees = decodeContextMap(s.numDistanceBlockTypes << 2, s.distContextMap, s); s.literalTreeGroup = decodeHuffmanTreeGroup(256, 256, numLiteralTrees, s); s.commandTreeGroup = decodeHuffmanTreeGroup(704, 704, s.numCommandBlockTypes, s); var /** number */ distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 24); var /** number */ distanceAlphabetSizeLimit = distanceAlphabetSizeMax; if (s.isLargeWindow == 1) { distanceAlphabetSizeMax = calculateDistanceAlphabetSize(s.distancePostfixBits, s.numDirectDistanceCodes, 62); distanceAlphabetSizeLimit = calculateDistanceAlphabetLimit(0x7FFFFFFC, s.distancePostfixBits, s.numDirectDistanceCodes); } s.distanceTreeGroup = decodeHuffmanTreeGroup(distanceAlphabetSizeMax, distanceAlphabetSizeLimit, numDistTrees, s); calculateDistanceLut(s, distanceAlphabetSizeLimit); s.contextMapSlice = 0; s.distContextMapSlice = 0; s.contextLookupOffset1 = s.contextModes[0] * 512; s.contextLookupOffset2 = s.contextLookupOffset1 + 256; s.literalTreeIdx = 0; s.commandTreeIdx = 0; s.rings[4] = 1; s.rings[5] = 0; s.rings[6] = 1; s.rings[7] = 0; s.rings[8] = 1; s.rings[9] = 0; } /** * @param {!State} s * @return {void} */ function copyUncompressedData(s) { var /** !Int8Array */ ringBuffer = s.ringBuffer; if (s.metaBlockLength <= 0) { reload(s); s.runningState = 2; return; } var /** number */ chunkLength = min(s.ringBufferSize - s.pos, s.metaBlockLength); copyBytes(s, ringBuffer, s.pos, chunkLength); s.metaBlockLength -= chunkLength; s.pos += chunkLength; if (s.pos == s.ringBufferSize) { s.nextRunningState = 6; s.runningState = 12; return; } reload(s); s.runningState = 2; } /** * @param {!State} s * @return {number} */ function writeRingBuffer(s) { var /** number */ toWrite = min(s.outputLength - s.outputUsed, s.ringBufferBytesReady - s.ringBufferBytesWritten); if (toWrite != 0) { s.output.set(s.ringBuffer.subarray(s.ringBufferBytesWritten, s.ringBufferBytesWritten + toWrite), s.outputOffset + s.outputUsed); s.outputUsed += toWrite; s.ringBufferBytesWritten += toWrite; } if (s.outputUsed < s.outputLength) { return 1; } else { return 0; } } /** * @param {number} alphabetSizeMax * @param {number} alphabetSizeLimit * @param {number} n * @param {!State} s * @return {!Int32Array} */ function decodeHuffmanTreeGroup(alphabetSizeMax, alphabetSizeLimit, n, s) { var /** number */ maxTableSize = MAX_HUFFMAN_TABLE_SIZE[(alphabetSizeLimit + 31) >> 5]; var /** !Int32Array */ group = new Int32Array(n + n * maxTableSize); var /** number */ next = n; for (var /** number */ i = 0; i < n; ++i) { group[i] = next; next += readHuffmanCode(alphabetSizeMax, alphabetSizeLimit, group, i, s); } return group; } /** * @param {!State} s * @return {number} */ function calculateFence(s) { var /** number */ result = s.ringBufferSize; if (s.isEager != 0) { result = min(result, s.ringBufferBytesWritten + s.outputLength - s.outputUsed); } return result; } /** * @param {!State} s * @return {void} */ function decompress(s) { if (s.runningState == 0) { throw "Can't decompress until initialized"; } if (s.runningState == 11) { throw "Can't decompress after close"; } if (s.runningState == 1) { var /** number */ windowBits = decodeWindowBits(s); if (windowBits == -1) { throw "Invalid 'windowBits' code"; } s.maxRingBufferSize = 1 << windowBits; s.maxBackwardDistance = s.maxRingBufferSize - 16; s.runningState = 2; } var /** number */ fence = calculateFence(s); var /** number */ ringBufferMask = s.ringBufferSize - 1; var /** !Int8Array */ ringBuffer = s.ringBuffer; while (s.runningState != 10) { switch(s.runningState) { case 2: if (s.metaBlockLength < 0) { throw "Invalid metablock length"; } readNextMetablockHeader(s); fence = calculateFence(s); ringBufferMask = s.ringBufferSize - 1; ringBuffer = s.ringBuffer; continue; case 3: readMetablockHuffmanCodesAndContextMaps(s); s.runningState = 4; case 4: if (s.metaBlockLength <= 0) { s.runningState = 2; continue; } if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.commandBlockLength == 0) { decodeCommandBlockSwitch(s); } s.commandBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ cmdCode = readSymbol(s.commandTreeGroup, s.commandTreeIdx, s) << 2; var /** number */ insertAndCopyExtraBits = CMD_LOOKUP[cmdCode]; var /** number */ insertLengthOffset = CMD_LOOKUP[cmdCode + 1]; var /** number */ copyLengthOffset = CMD_LOOKUP[cmdCode + 2]; s.distanceCode = CMD_LOOKUP[cmdCode + 3]; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ extraBits = insertAndCopyExtraBits & 0xFF; s.insertLength = insertLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ extraBits = insertAndCopyExtraBits >> 8; s.copyLength = copyLengthOffset + ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); s.j = 0; s.runningState = 7; case 7: if (s.trivialLiteralContext != 0) { while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength == 0) { decodeLiteralBlockSwitch(s); } s.literalBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } ringBuffer[s.pos] = readSymbol(s.literalTreeGroup, s.literalTreeIdx, s); s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } else { var /** number */ prevByte1 = ringBuffer[(s.pos - 1) & ringBufferMask] & 0xFF; var /** number */ prevByte2 = ringBuffer[(s.pos - 2) & ringBufferMask] & 0xFF; while (s.j < s.insertLength) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.literalBlockLength == 0) { decodeLiteralBlockSwitch(s); } var /** number */ literalContext = LOOKUP[s.contextLookupOffset1 + prevByte1] | LOOKUP[s.contextLookupOffset2 + prevByte2]; var /** number */ literalTreeIdx = s.contextMap[s.contextMapSlice + literalContext] & 0xFF; s.literalBlockLength--; prevByte2 = prevByte1; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } prevByte1 = readSymbol(s.literalTreeGroup, literalTreeIdx, s); ringBuffer[s.pos] = prevByte1; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 7; s.runningState = 12; break; } } } if (s.runningState != 7) { continue; } s.metaBlockLength -= s.insertLength; if (s.metaBlockLength <= 0) { s.runningState = 4; continue; } var /** number */ distanceCode = s.distanceCode; if (distanceCode < 0) { s.distance = s.rings[s.distRbIdx]; } else { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.distanceBlockLength == 0) { decodeDistanceBlockSwitch(s); } s.distanceBlockLength--; if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } var /** number */ distTreeIdx = s.distContextMap[s.distContextMapSlice + distanceCode] & 0xFF; distanceCode = readSymbol(s.distanceTreeGroup, distTreeIdx, s); if (distanceCode < 16) { var /** number */ index = (s.distRbIdx + DISTANCE_SHORT_CODE_INDEX_OFFSET[distanceCode]) & 0x3; s.distance = s.rings[index] + DISTANCE_SHORT_CODE_VALUE_OFFSET[distanceCode]; if (s.distance < 0) { throw "Negative distance"; } } else { var /** number */ extraBits = s.distExtraBits[distanceCode]; var /** number */ bits; if (s.bitOffset + extraBits <= 32) { bits = readFewBits(s, extraBits); } else { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } bits = ((extraBits <= 16) ? readFewBits(s, extraBits) : readManyBits(s, extraBits)); } s.distance = s.distOffset[distanceCode] + (bits << s.distancePostfixBits); } } if (s.maxDistance != s.maxBackwardDistance && s.pos < s.maxBackwardDistance) { s.maxDistance = s.pos; } else { s.maxDistance = s.maxBackwardDistance; } if (s.distance > s.maxDistance) { s.runningState = 9; continue; } if (distanceCode > 0) { s.distRbIdx = (s.distRbIdx + 1) & 0x3; s.rings[s.distRbIdx] = s.distance; } if (s.copyLength > s.metaBlockLength) { throw "Invalid backward reference"; } s.j = 0; s.runningState = 8; case 8: var /** number */ src = (s.pos - s.distance) & ringBufferMask; var /** number */ dst = s.pos; var /** number */ copyLength = s.copyLength - s.j; var /** number */ srcEnd = src + copyLength; var /** number */ dstEnd = dst + copyLength; if ((srcEnd < ringBufferMask) && (dstEnd < ringBufferMask)) { if (copyLength < 12 || (srcEnd > dst && dstEnd > src)) { for (var /** number */ k = 0; k < copyLength; k += 4) { ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; ringBuffer[dst++] = ringBuffer[src++]; } } else { ringBuffer.copyWithin(dst, src, srcEnd); } s.j += copyLength; s.metaBlockLength -= copyLength; s.pos += copyLength; } else { for (; s.j < s.copyLength; ) { ringBuffer[s.pos] = ringBuffer[(s.pos - s.distance) & ringBufferMask]; s.metaBlockLength--; s.pos++; s.j++; if (s.pos >= fence) { s.nextRunningState = 8; s.runningState = 12; break; } } } if (s.runningState == 8) { s.runningState = 4; } continue; case 9: if (s.distance > 0x7FFFFFFC) { throw "Invalid backward reference"; } if (s.copyLength >= 4 && s.copyLength <= 24) { var /** number */ offset = DICTIONARY_OFFSETS_BY_LENGTH[s.copyLength]; var /** number */ wordId = s.distance - s.maxDistance - 1; var /** number */ shift = DICTIONARY_SIZE_BITS_BY_LENGTH[s.copyLength]; var /** number */ mask = (1 << shift) - 1; var /** number */ wordIdx = wordId & mask; var /** number */ transformIdx = wordId >>> shift; offset += wordIdx * s.copyLength; if (transformIdx < 121) { var /** number */ len = transformDictionaryWord(ringBuffer, s.pos, DICTIONARY_DATA, offset, s.copyLength, RFC_TRANSFORMS, transformIdx); s.pos += len; s.metaBlockLength -= len; if (s.pos >= fence) { s.nextRunningState = 4; s.runningState = 12; continue; } } else { throw "Invalid backward reference"; } } else { throw "Invalid backward reference"; } s.runningState = 4; continue; case 5: while (s.metaBlockLength > 0) { if (s.halfOffset > 2030) { doReadMoreInput(s); } if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } readFewBits(s, 8); s.metaBlockLength--; } s.runningState = 2; continue; case 6: copyUncompressedData(s); continue; case 12: s.ringBufferBytesReady = min(s.pos, s.ringBufferSize); s.runningState = 13; case 13: if (writeRingBuffer(s) == 0) { return; } if (s.pos >= s.maxBackwardDistance) { s.maxDistance = s.maxBackwardDistance; } if (s.pos >= s.ringBufferSize) { if (s.pos > s.ringBufferSize) { ringBuffer.copyWithin(0, s.ringBufferSize, s.pos); } s.pos &= ringBufferMask; s.ringBufferBytesWritten = 0; } s.runningState = s.nextRunningState; continue; default: throw "Unexpected state " + s.runningState; } } if (s.runningState == 10) { if (s.metaBlockLength < 0) { throw "Invalid metablock length"; } jumpToByteBoundary(s); checkHealth(s, 1); } } /** * @constructor * @param {number} numTransforms * @param {number} prefixSuffixLen * @param {number} prefixSuffixCount * @struct */ function Transforms(numTransforms, prefixSuffixLen, prefixSuffixCount) { /** @type {!number} */ this.numTransforms = 0; /** @type {!Int32Array} */ this.triplets = new Int32Array(0); /** @type {!Int8Array} */ this.prefixSuffixStorage = new Int8Array(0); /** @type {!Int32Array} */ this.prefixSuffixHeads = new Int32Array(0); /** @type {!Int16Array} */ this.params = new Int16Array(0); this.numTransforms = numTransforms; this.triplets = new Int32Array(numTransforms * 3); this.params = new Int16Array(numTransforms); this.prefixSuffixStorage = new Int8Array(prefixSuffixLen); this.prefixSuffixHeads = new Int32Array(prefixSuffixCount + 1); } var RFC_TRANSFORMS = new Transforms(121, 167, 50); /** * @param {!Int8Array} prefixSuffix * @param {!Int32Array} prefixSuffixHeads * @param {!Int32Array} transforms * @param {!string} prefixSuffixSrc * @param {!string} transformsSrc * @return {void} */ function unpackTransforms(prefixSuffix, prefixSuffixHeads, transforms, prefixSuffixSrc, transformsSrc) { var /** number */ n = prefixSuffixSrc.length; var /** number */ index = 1; var /** number */ j = 0; for (var /** number */ i = 0; i < n; ++i) { var /** number */ c = prefixSuffixSrc.charCodeAt(i); if (c == 35) { prefixSuffixHeads[index++] = j; } else { prefixSuffix[j++] = c; } } for (var /** number */ i = 0; i < 363; ++i) { transforms[i] = transformsSrc.charCodeAt(i) - 32; } } { unpackTransforms(RFC_TRANSFORMS.prefixSuffixStorage, RFC_TRANSFORMS.prefixSuffixHeads, RFC_TRANSFORMS.triplets, "# #s #, #e #.# the #.com/#\u00C2\u00A0# of # and # in # to #\"#\">#\n#]# for # a # that #. # with #'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #=\"# of the #. This #,# not #er #al #='#ful #ive #less #est #ize #ous #", " !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K"); } /** * @param {!Int8Array} dst * @param {number} dstOffset * @param {!Int8Array} src * @param {number} srcOffset * @param {number} len * @param {!Transforms} transforms * @param {number} transformIndex * @return {number} */ function transformDictionaryWord(dst, dstOffset, src, srcOffset, len, transforms, transformIndex) { var /** number */ offset = dstOffset; var /** !Int32Array */ triplets = transforms.triplets; var /** !Int8Array */ prefixSuffixStorage = transforms.prefixSuffixStorage; var /** !Int32Array */ prefixSuffixHeads = transforms.prefixSuffixHeads; var /** number */ transformOffset = 3 * transformIndex; var /** number */ prefixIdx = triplets[transformOffset]; var /** number */ transformType = triplets[transformOffset + 1]; var /** number */ suffixIdx = triplets[transformOffset + 2]; var /** number */ prefix = prefixSuffixHeads[prefixIdx]; var /** number */ prefixEnd = prefixSuffixHeads[prefixIdx + 1]; var /** number */ suffix = prefixSuffixHeads[suffixIdx]; var /** number */ suffixEnd = prefixSuffixHeads[suffixIdx + 1]; var /** number */ omitFirst = transformType - 11; var /** number */ omitLast = transformType - 0; if (omitFirst < 1 || omitFirst > 9) { omitFirst = 0; } if (omitLast < 1 || omitLast > 9) { omitLast = 0; } while (prefix != prefixEnd) { dst[offset++] = prefixSuffixStorage[prefix++]; } if (omitFirst > len) { omitFirst = len; } srcOffset += omitFirst; len -= omitFirst; len -= omitLast; var /** number */ i = len; while (i > 0) { dst[offset++] = src[srcOffset++]; i--; } if (transformType == 10 || transformType == 11) { var /** number */ uppercaseOffset = offset - len; if (transformType == 10) { len = 1; } while (len > 0) { var /** number */ c0 = dst[uppercaseOffset] & 0xFF; if (c0 < 0xC0) { if (c0 >= 97 && c0 <= 122) { dst[uppercaseOffset] ^= 32; } uppercaseOffset += 1; len -= 1; } else if (c0 < 0xE0) { dst[uppercaseOffset + 1] ^= 32; uppercaseOffset += 2; len -= 2; } else { dst[uppercaseOffset + 2] ^= 5; uppercaseOffset += 3; len -= 3; } } } else if (transformType == 21 || transformType == 22) { var /** number */ shiftOffset = offset - len; var /** number */ param = transforms.params[transformIndex]; var /** number */ scalar = (param & 0x7FFF) + (0x1000000 - (param & 0x8000)); while (len > 0) { var /** number */ step = 1; var /** number */ c0 = dst[shiftOffset] & 0xFF; if (c0 < 0x80) { scalar += c0; dst[shiftOffset] = (scalar & 0x7F); } else if (c0 < 0xC0) ; else if (c0 < 0xE0) { if (len >= 2) { var /** number */ c1 = dst[shiftOffset + 1]; scalar += (c1 & 0x3F) | ((c0 & 0x1F) << 6); dst[shiftOffset] = (0xC0 | ((scalar >> 6) & 0x1F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | (scalar & 0x3F)); step = 2; } else { step = len; } } else if (c0 < 0xF0) { if (len >= 3) { var /** number */ c1 = dst[shiftOffset + 1]; var /** number */ c2 = dst[shiftOffset + 2]; scalar += (c2 & 0x3F) | ((c1 & 0x3F) << 6) | ((c0 & 0x0F) << 12); dst[shiftOffset] = (0xE0 | ((scalar >> 12) & 0x0F)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | (scalar & 0x3F)); step = 3; } else { step = len; } } else if (c0 < 0xF8) { if (len >= 4) { var /** number */ c1 = dst[shiftOffset + 1]; var /** number */ c2 = dst[shiftOffset + 2]; var /** number */ c3 = dst[shiftOffset + 3]; scalar += (c3 & 0x3F) | ((c2 & 0x3F) << 6) | ((c1 & 0x3F) << 12) | ((c0 & 0x07) << 18); dst[shiftOffset] = (0xF0 | ((scalar >> 18) & 0x07)); dst[shiftOffset + 1] = ((c1 & 0xC0) | ((scalar >> 12) & 0x3F)); dst[shiftOffset + 2] = ((c2 & 0xC0) | ((scalar >> 6) & 0x3F)); dst[shiftOffset + 3] = ((c3 & 0xC0) | (scalar & 0x3F)); step = 4; } else { step = len; } } shiftOffset += step; len -= step; if (transformType == 21) { len = 0; } } } while (suffix != suffixEnd) { dst[offset++] = prefixSuffixStorage[suffix++]; } return offset - dstOffset; } /** * @param {number} key * @param {number} len * @return {number} */ function getNextKey(key, len) { var /** number */ step = 1 << (len - 1); while ((key & step) != 0) { step >>= 1; } return (key & (step - 1)) + step; } /** * @param {!Int32Array} table * @param {number} offset * @param {number} step * @param {number} end * @param {number} item * @return {void} */ function replicateValue(table, offset, step, end, item) { do { end -= step; table[offset + end] = item; } while (end > 0); } /** * @param {!Int32Array} count * @param {number} len * @param {number} rootBits * @return {number} */ function nextTableBitSize(count, len, rootBits) { var /** number */ left = 1 << (len - rootBits); while (len < 15) { left -= count[len]; if (left <= 0) { break; } len++; left <<= 1; } return len - rootBits; } /** * @param {!Int32Array} tableGroup * @param {number} tableIdx * @param {number} rootBits * @param {!Int32Array} codeLengths * @param {number} codeLengthsSize * @return {number} */ function buildHuffmanTable(tableGroup, tableIdx, rootBits, codeLengths, codeLengthsSize) { var /** number */ tableOffset = tableGroup[tableIdx]; var /** number */ key; var /** !Int32Array */ sorted = new Int32Array(codeLengthsSize); var /** !Int32Array */ count = new Int32Array(16); var /** !Int32Array */ offset = new Int32Array(16); var /** number */ symbol; for (symbol = 0; symbol < codeLengthsSize; symbol++) { count[codeLengths[symbol]]++; } offset[1] = 0; for (var /** number */ len = 1; len < 15; len++) { offset[len + 1] = offset[len] + count[len]; } for (symbol = 0; symbol < codeLengthsSize; symbol++) { if (codeLengths[symbol] != 0) { sorted[offset[codeLengths[symbol]]++] = symbol; } } var /** number */ tableBits = rootBits; var /** number */ tableSize = 1 << tableBits; var /** number */ totalSize = tableSize; if (offset[15] == 1) { for (key = 0; key < totalSize; key++) { tableGroup[tableOffset + key] = sorted[0]; } return totalSize; } key = 0; symbol = 0; for (var /** number */ len = 1, step = 2; len <= rootBits; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { replicateValue(tableGroup, tableOffset + key, step, tableSize, len << 16 | sorted[symbol++]); key = getNextKey(key, len); } } var /** number */ mask = totalSize - 1; var /** number */ low = -1; var /** number */ currentOffset = tableOffset; for (var /** number */ len = rootBits + 1, step = 2; len <= 15; len++, step <<= 1) { for (; count[len] > 0; count[len]--) { if ((key & mask) != low) { currentOffset += tableSize; tableBits = nextTableBitSize(count, len, rootBits); tableSize = 1 << tableBits; totalSize += tableSize; low = key & mask; tableGroup[tableOffset + low] = (tableBits + rootBits) << 16 | (currentOffset - tableOffset - low); } replicateValue(tableGroup, currentOffset + (key >> rootBits), step, tableSize, (len - rootBits) << 16 | sorted[symbol++]); key = getNextKey(key, len); } } return totalSize; } /** * @param {!State} s * @return {void} */ function doReadMoreInput(s) { if (s.endOfStreamReached != 0) { if (halfAvailable(s) >= -2) { return; } throw "No more input"; } var /** number */ readOffset = s.halfOffset << 1; var /** number */ bytesInBuffer = 4096 - readOffset; s.byteBuffer.copyWithin(0, readOffset, 4096); s.halfOffset = 0; while (bytesInBuffer < 4096) { var /** number */ spaceLeft = 4096 - bytesInBuffer; var /** number */ len = readInput(s.input, s.byteBuffer, bytesInBuffer, spaceLeft); if (len <= 0) { s.endOfStreamReached = 1; s.tailBytes = bytesInBuffer; bytesInBuffer += 1; break; } bytesInBuffer += len; } bytesToNibbles(s, bytesInBuffer); } /** * @param {!State} s * @param {number} endOfStream * @return {void} */ function checkHealth(s, endOfStream) { if (s.endOfStreamReached == 0) { return; } var /** number */ byteOffset = (s.halfOffset << 1) + ((s.bitOffset + 7) >> 3) - 4; if (byteOffset > s.tailBytes) { throw "Read after end"; } if ((endOfStream != 0) && (byteOffset != s.tailBytes)) { throw "Unused bytes after end"; } } /** * @param {!State} s * @param {number} n * @return {number} */ function readFewBits(s, n) { var /** number */ val = (s.accumulator32 >>> s.bitOffset) & ((1 << n) - 1); s.bitOffset += n; return val; } /** * @param {!State} s * @param {number} n * @return {number} */ function readManyBits(s, n) { var /** number */ low = readFewBits(s, 16); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; return low | (readFewBits(s, n - 16) << 16); } /** * @param {!State} s * @return {void} */ function initBitReader(s) { s.byteBuffer = new Int8Array(4160); s.accumulator32 = 0; s.shortBuffer = new Int16Array(2080); s.bitOffset = 32; s.halfOffset = 2048; s.endOfStreamReached = 0; prepare(s); } /** * @param {!State} s * @return {void} */ function prepare(s) { if (s.halfOffset > 2030) { doReadMoreInput(s); } checkHealth(s, 0); s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } /** * @param {!State} s * @return {void} */ function reload(s) { if (s.bitOffset == 32) { prepare(s); } } /** * @param {!State} s * @return {void} */ function jumpToByteBoundary(s) { var /** number */ padding = (32 - s.bitOffset) & 7; if (padding != 0) { var /** number */ paddingBits = readFewBits(s, padding); if (paddingBits != 0) { throw "Corrupted padding bits"; } } } /** * @param {!State} s * @return {number} */ function halfAvailable(s) { var /** number */ limit = 2048; if (s.endOfStreamReached != 0) { limit = (s.tailBytes + 1) >> 1; } return limit - s.halfOffset; } /** * @param {!State} s * @param {!Int8Array} data * @param {number} offset * @param {number} length * @return {void} */ function copyBytes(s, data, offset, length) { if ((s.bitOffset & 7) != 0) { throw "Unaligned copyBytes"; } while ((s.bitOffset != 32) && (length != 0)) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } if (length == 0) { return; } var /** number */ copyNibbles = min(halfAvailable(s), length >> 1); if (copyNibbles > 0) { var /** number */ readOffset = s.halfOffset << 1; var /** number */ delta = copyNibbles << 1; data.set(s.byteBuffer.subarray(readOffset, readOffset + delta), offset); offset += delta; length -= delta; s.halfOffset += copyNibbles; } if (length == 0) { return; } if (halfAvailable(s) > 0) { if (s.bitOffset >= 16) { s.accumulator32 = (s.shortBuffer[s.halfOffset++] << 16) | (s.accumulator32 >>> 16); s.bitOffset -= 16; } while (length != 0) { data[offset++] = (s.accumulator32 >>> s.bitOffset); s.bitOffset += 8; length--; } checkHealth(s, 0); return; } while (length > 0) { var /** number */ len = readInput(s.input, data, offset, length); if (len == -1) { throw "Unexpected end of input"; } offset += len; length -= len; } } /** * @param {!State} s * @param {number} byteLen * @return {void} */ function bytesToNibbles(s, byteLen) { var /** !Int8Array */ byteBuffer = s.byteBuffer; var /** number */ halfLen = byteLen >> 1; var /** !Int16Array */ shortBuffer = s.shortBuffer; for (var /** number */ i = 0; i < halfLen; ++i) { shortBuffer[i] = ((byteBuffer[i * 2] & 0xFF) | ((byteBuffer[(i * 2) + 1] & 0xFF) << 8)); } } var LOOKUP = new Int32Array(2048); /** * @param {!Int32Array} lookup * @param {!string} map * @param {!string} rle * @return {void} */ function unpackLookupTable(lookup, map, rle) { for (var /** number */ i = 0; i < 256; ++i) { lookup[i] = i & 0x3F; lookup[512 + i] = i >> 2; lookup[1792 + i] = 2 + (i >> 6); } for (var /** number */ i = 0; i < 128; ++i) { lookup[1024 + i] = 4 * (map.charCodeAt(i) - 32); } for (var /** number */ i = 0; i < 64; ++i) { lookup[1152 + i] = i & 1; lookup[1216 + i] = 2 + (i & 1); } var /** number */ offset = 1280; for (var /** number */ k = 0; k < 19; ++k) { var /** number */ value = k & 3; var /** number */ rep = rle.charCodeAt(k) - 32; for (var /** number */ i = 0; i < rep; ++i) { lookup[offset++] = value; } } for (var /** number */ i = 0; i < 16; ++i) { lookup[1792 + i] = 1; lookup[2032 + i] = 6; } lookup[1792] = 0; lookup[2047] = 7; for (var /** number */ i = 0; i < 256; ++i) { lookup[1536 + i] = lookup[1792 + i] << 3; } } { unpackLookupTable(LOOKUP, " !! ! \"#$##%#$&'##(#)#++++++++++((&*'##,---,---,-----,-----,-----&#'###.///.///./////./////./////&#'# ", "A/* ': & : $ \u0081 @"); } /** * @constructor * @struct */ function State() { /** @type {!Int8Array} */ this.ringBuffer = new Int8Array(0); /** @type {!Int8Array} */ this.contextModes = new Int8Array(0); /** @type {!Int8Array} */ this.contextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distContextMap = new Int8Array(0); /** @type {!Int8Array} */ this.distExtraBits = new Int8Array(0); /** @type {!Int8Array} */ this.output = new Int8Array(0); /** @type {!Int8Array} */ this.byteBuffer = new Int8Array(0); /** @type {!Int16Array} */ this.shortBuffer = new Int16Array(0); /** @type {!Int32Array} */ this.intBuffer = new Int32Array(0); /** @type {!Int32Array} */ this.rings = new Int32Array(0); /** @type {!Int32Array} */ this.blockTrees = new Int32Array(0); /** @type {!Int32Array} */ this.literalTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.commandTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distanceTreeGroup = new Int32Array(0); /** @type {!Int32Array} */ this.distOffset = new Int32Array(0); /** @type {!number} */ this.runningState = 0; /** @type {!number} */ this.nextRunningState = 0; /** @type {!number} */ this.accumulator32 = 0; /** @type {!number} */ this.bitOffset = 0; /** @type {!number} */ this.halfOffset = 0; /** @type {!number} */ this.tailBytes = 0; /** @type {!number} */ this.endOfStreamReached = 0; /** @type {!number} */ this.metaBlockLength = 0; /** @type {!number} */ this.inputEnd = 0; /** @type {!number} */ this.isUncompressed = 0; /** @type {!number} */ this.isMetadata = 0; /** @type {!number} */ this.literalBlockLength = 0; /** @type {!number} */ this.numLiteralBlockTypes = 0; /** @type {!number} */ this.commandBlockLength = 0; /** @type {!number} */ this.numCommandBlockTypes = 0; /** @type {!number} */ this.distanceBlockLength = 0; /** @type {!number} */ this.numDistanceBlockTypes = 0; /** @type {!number} */ this.pos = 0; /** @type {!number} */ this.maxDistance = 0; /** @type {!number} */ this.distRbIdx = 0; /** @type {!number} */ this.trivialLiteralContext = 0; /** @type {!number} */ this.literalTreeIdx = 0; /** @type {!number} */ this.commandTreeIdx = 0; /** @type {!number} */ this.j = 0; /** @type {!number} */ this.insertLength = 0; /** @type {!number} */ this.contextMapSlice = 0; /** @type {!number} */ this.distContextMapSlice = 0; /** @type {!number} */ this.contextLookupOffset1 = 0; /** @type {!number} */ this.contextLookupOffset2 = 0; /** @type {!number} */ this.distanceCode = 0; /** @type {!number} */ this.numDirectDistanceCodes = 0; /** @type {!number} */ this.distancePostfixMask = 0; /** @type {!number} */ this.distancePostfixBits = 0; /** @type {!number} */ this.distance = 0; /** @type {!number} */ this.copyLength = 0; /** @type {!number} */ this.maxBackwardDistance = 0; /** @type {!number} */ this.maxRingBufferSize = 0; /** @type {!number} */ this.ringBufferSize = 0; /** @type {!number} */ this.expectedTotalSize = 0; /** @type {!number} */ this.outputOffset = 0; /** @type {!number} */ this.outputLength = 0; /** @type {!number} */ this.outputUsed = 0; /** @type {!number} */ this.ringBufferBytesWritten = 0; /** @type {!number} */ this.ringBufferBytesReady = 0; /** @type {!number} */ this.isEager = 0; /** @type {!number} */ this.isLargeWindow = 0; /** @type {!InputStream|null} */ this.input = null; this.ringBuffer = new Int8Array(0); this.rings = new Int32Array(10); this.rings[0] = 16; this.rings[1] = 15; this.rings[2] = 11; this.rings[3] = 4; } /** * @param {!Int8Array} dictionary * @param {!string} data0 * @param {!string} data1 * @param {!string} skipFlip * @return {void} */ function unpackDictionaryData(dictionary, data0, data1, skipFlip) { var /** !Int8Array */ dict = toUsAsciiBytes(data0 + data1); if (dict.length != dictionary.length) { throw "Corrupted brotli dictionary"; } var /** number */ offset = 0; var /** number */ n = skipFlip.length; for (var /** number */ i = 0; i < n; i += 2) { var /** number */ skip = skipFlip.charCodeAt(i) - 36; var /** number */ flip = skipFlip.charCodeAt(i + 1) - 36; offset += skip; for (var /** number */ j = 0; j < flip; ++j) { dict[offset] |= 0x80; offset++; } } dictionary.set(dict); } { var /** !Int8Array */ dictionary = new Int8Array(122784); unpackDictionaryData(dictionary, "timedownlifeleftbackcodedatashowonlysitecityopenjustlikefreeworktextyearoverbodyloveformbookplaylivelinehelphomesidemorewordlongthemviewfindpagedaysfullheadtermeachareafromtruemarkableuponhighdatelandnewsevennextcasebothpostusedmadehandherewhatnameLinkblogsizebaseheldmakemainuser') +holdendswithNewsreadweresigntakehavegameseencallpathwellplusmenufilmpartjointhislistgoodneedwayswestjobsmindalsologorichuseslastteamarmyfoodkingwilleastwardbestfirePageknowaway.pngmovethanloadgiveselfnotemuchfeedmanyrockicononcelookhidediedHomerulehostajaxinfoclublawslesshalfsomesuchzone100%onescareTimeracebluefourweekfacehopegavehardlostwhenparkkeptpassshiproomHTMLplanTypedonesavekeepflaglinksoldfivetookratetownjumpthusdarkcardfilefearstaykillthatfallautoever.comtalkshopvotedeepmoderestturnbornbandfellroseurl(skinrolecomeactsagesmeetgold.jpgitemvaryfeltthensenddropViewcopy1.0\"stopelseliestourpack.gifpastcss?graymean>rideshotlatesaidroadvar feeljohnrickportfast'UA-deadpoorbilltypeU.S.woodmust2px;Inforankwidewantwalllead[0];paulwavesure$('#waitmassarmsgoesgainlangpaid!-- lockunitrootwalkfirmwifexml\"songtest20pxkindrowstoolfontmailsafestarmapscorerainflowbabyspansays4px;6px;artsfootrealwikiheatsteptriporg/lakeweaktoldFormcastfansbankveryrunsjulytask1px;goalgrewslowedgeid=\"sets5px;.js?40pxif (soonseatnonetubezerosentreedfactintogiftharm18pxcamehillboldzoomvoideasyringfillpeakinitcost3px;jacktagsbitsrolleditknewnearironfreddiskwentsoilputs/js/holyT22:ISBNT20:adamsees

      json', 'contT21: RSSloopasiamoon

      soulLINEfortcartT14:

      80px!--<9px;T04:mike:46ZniceinchYorkricezh:d'));puremageparatonebond:37Z_of_']);000,zh:gtankyardbowlbush:56ZJava30px\n|}\n%C3%:34ZjeffEXPIcashvisagolfsnowzh:iquer.csssickmeatmin.binddellhirepicsrent:36ZHTTP-201fotowolfEND xbox:54ZBODYdick;\n}\nexit:35Zvarsbeat'});diet999;anne}}sonyguysfuckpipe|-\n!002)ndow[1];[];\nLog salt\r\n\t\tbangtrimbath){\r\n00px\n});ko:lfeesad>\rs:// [];tollplug(){\n{\r\n .js'200pdualboat.JPG);\n}quot);\n\n');\n\r\n}\r201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037201320122011201020092008200720062005200420032002200120001999199819971996199519941993199219911990198919881987198619851984198319821981198019791978197719761975197419731972197119701969196819671966196519641963196219611960195919581957195619551954195319521951195010001024139400009999comomC!sesteestaperotodohacecadaaC1obiendC-aasC-vidacasootroforosolootracualdijosidograntipotemadebealgoquC)estonadatrespococasabajotodasinoaguapuesunosantediceluisellamayozonaamorpisoobraclicellodioshoracasiP7P0P=P0P>PP>Q\u0002P8P7P=P>P4P>Q\u0002P>P6P5P>P=P8Q\u0005P\u001DP0P5P5P1Q\u000BPP2Q\u000BP2P>P\u001DP>P>P1P\u001FP>P;P8P=P8P P$P\u001DP5P\u001CQ\u000BQ\u0002Q\u000BP\u001EP=P8Pthing.org/multiheardPowerstandtokensolid(thisbringshipsstafftriedcallsfullyfactsagentThis //-->adminegyptEvent15px;Emailtrue\"crossspentblogsbox\">notedleavechinasizesguest

      robotheavytrue,sevengrandcrimesignsawaredancephase>\n\n\r\nname=diegopage swiss-->\n\n#fff;\">Log.com\"treatsheet) && 14px;sleepntentfiledja:c\u0003id=\"cName\"worseshots-box-delta\n<bears:48Z spendbakershops= \"\";php\">ction13px;brianhellosize=o=%2F joinmaybe, fjsimg\" \")[0]MTopBType\"newlyDanskczechtrailknowsfaq\">zh-cn10);\n-1\");type=bluestrulydavis.js';>\r\n\r\nform jesus100% menu.\r\n\t\r\nwalesrisksumentddingb-likteachgif\" vegasdanskeestishqipsuomisobredesdeentretodospuedeaC1osestC!tienehastaotrospartedondenuevohacerformamismomejormundoaquC-dC-assC3loayudafechatodastantomenosdatosotrassitiomuchoahoralugarmayorestoshorastenerantesfotosestaspaC-snuevasaludforosmedioquienmesespoderchileserC!vecesdecirjosC)estarventagrupohechoellostengoamigocosasnivelgentemismaairesjuliotemashaciafavorjuniolibrepuntobuenoautorabrilbuenatextomarzosaberlistaluegocC3moenerojuegoperC:haberestoynuncamujervalorfueralibrogustaigualvotoscasosguC-apuedosomosavisousteddebennochebuscafaltaeurosseriedichocursoclavecasasleC3nplazolargoobrasvistaapoyojuntotratavistocrearcampohemoscincocargopisosordenhacenC!readiscopedrocercapuedapapelmenorC:tilclarojorgecalleponertardenadiemarcasigueellassiglocochemotosmadreclaserestoniC1oquedapasarbancohijosviajepabloC)stevienereinodejarfondocanalnorteletracausatomarmanoslunesautosvillavendopesartipostengamarcollevapadreunidovamoszonasambosbandamariaabusomuchasubirriojavivirgradochicaallC-jovendichaestantalessalirsuelopesosfinesllamabuscoC)stalleganegroplazahumorpagarjuntadobleislasbolsabaC1ohablaluchaC\u0001readicenjugarnotasvalleallC!cargadolorabajoestC)gustomentemariofirmacostofichaplatahogarartesleyesaquelmuseobasespocosmitadcielochicomiedoganarsantoetapadebesplayaredessietecortecoreadudasdeseoviejodeseaaguas"domaincommonstatuseventsmastersystemactionbannerremovescrollupdateglobalmediumfilternumberchangeresultpublicscreenchoosenormaltravelissuessourcetargetspringmodulemobileswitchphotosborderregionitselfsocialactivecolumnrecordfollowtitle>eitherlengthfamilyfriendlayoutauthorcreatereviewsummerserverplayedplayerexpandpolicyformatdoublepointsseriespersonlivingdesignmonthsforcesuniqueweightpeopleenergynaturesearchfigurehavingcustomoffsetletterwindowsubmitrendergroupsuploadhealthmethodvideosschoolfutureshadowdebatevaluesObjectothersrightsleaguechromesimplenoticesharedendingseasonreportonlinesquarebuttonimagesenablemovinglatestwinterFranceperiodstrongrepeatLondondetailformeddemandsecurepassedtoggleplacesdevicestaticcitiesstreamyellowattackstreetflighthiddeninfo\">openedusefulvalleycausesleadersecretseconddamagesportsexceptratingsignedthingseffectfieldsstatesofficevisualeditorvolumeReportmuseummoviesparentaccessmostlymother\" id=\"marketgroundchancesurveybeforesymbolmomentspeechmotioninsidematterCenterobjectexistsmiddleEuropegrowthlegacymannerenoughcareeransweroriginportalclientselectrandomclosedtopicscomingfatheroptionsimplyraisedescapechosenchurchdefinereasoncorneroutputmemoryiframepolicemodelsNumberduringoffersstyleskilledlistedcalledsilvermargindeletebetterbrowselimitsGlobalsinglewidgetcenterbudgetnowrapcreditclaimsenginesafetychoicespirit-stylespreadmakingneededrussiapleaseextentScriptbrokenallowschargedividefactormember-basedtheoryconfigaroundworkedhelpedChurchimpactshouldalwayslogo\" bottomlist\">){var prefixorangeHeader.push(couplegardenbridgelaunchReviewtakingvisionlittledatingButtonbeautythemesforgotSearchanchoralmostloadedChangereturnstringreloadMobileincomesupplySourceordersviewed courseAbout island: The dialoghousesBEGIN MexicostartscentreheightaddingIslandassetsEmpireSchooleffortdirectnearlymanualSelect.\n\nOnejoinedmenu\">PhilipawardshandleimportOfficeregardskillsnationSportsdegreeweekly (e.g.behinddoctorloggedunitedbeyond-scaleacceptservedmarineFootercamera\n_form\"leavesstress\" />\r\n.gif\" onloadloaderOxfordsistersurvivlistenfemaleDesignsize=\"appealtext\">levelsthankshigherforcedanimalanyoneAfricaagreedrecentPeople
      wonderpricesturned|| {};main\">inlinesundaywrap\">failedcensusminutebeaconquotes150px|estateremoteemail\"linkedright;signalformal1.htmlsignupprincefloat:.png\" forum.AccesspaperssoundsextendHeightsliderUTF-8\"& Before. WithstudioownersmanageprofitjQueryannualparamsboughtfamousgooglelongeri++) {israelsayingdecidehome\">headerensurebranchpiecesblock;statedtop\">boston.test(avatartested_countforumsschemaindex,filledsharesreaderalert(appearSubmitline\">body\">\n* TheThoughseeingjerseyNews\nSystem DavidcancertablesprovedApril reallydriveritem\">more\">boardscolorscampusfirst || [];media.guitarfinishwidth:showedOther .php\" assumelayerswilsonstoresreliefswedenCustomeasily your String\n\nWhiltaylorclear:resortfrenchthough\") + \"buyingbrandsMembername\">oppingsector5px;\">vspacepostermajor coffeemartinmaturehappenkansaslink\">Images=falsewhile hspace0& \n\nIn powerPolski-colorjordanBottomStart -count2.htmlnews\">01.jpgOnline-rightmillerseniorISBN 00,000 guidesvalue)ectionrepair.xml\" rights.html-blockregExp:hoverwithinvirginphones\rusing \n\tvar >');\n\t\n\nbahasabrasilgalegomagyarpolskisrpskiX1X/Y\u0008d8-f\u0016\u0007g.\u0000d=\u0013g9\u0001i+\u0014d?!f\u0001/d8-e\u001B=f\u0008\u0011d;,d8\u0000d8*e\u0005,e\u000F8g.!g\u0010\u0006h.:e\u001D\u001Be\u000F/d;%f\u001C\re\n!f\u00176i\u00174d8*d::d:'e\u0013\u0001h\u0007*e71d<\u0001d8\u001Af\u001F%g\u001C\u000Be7%d=\u001Ch\u0001\u0014g3;f2!f\u001C\tg=\u0011g+\u0019f\t\u0000f\u001C\th/\u0004h.:d8-e?\u0003f\u0016\u0007g+ g\u0014(f\u00087i&\u0016i!5d=\u001Ch\u0000\u0005f\n\u0000f\u001C/i\u0017.i\"\u0018g\u001B8e\u00053d8\u000Bh==f\u0010\u001Cg4\"d=?g\u0014(h=/d;6e\u001C(g:?d8;i\"\u0018h5\u0004f\u0016\u0019h'\u0006i\"\u0011e\u001B\u001Ee$\rf3(e\u0006\u000Cg=\u0011g;\u001Cf\u00146h\u0017\u000Fe\u0006\u0005e.9f\u000E(h\r\u0010e8\u0002e\u001C:f6\u0008f\u0001/g):i\u00174e\u000F\u0011e8\u0003d;\u0000d9\u0008e%=e\u000F\u000Bg\u0014\u001Ff4;e\u001B>g\t\u0007e\u000F\u0011e1\u0015e&\u0002f\u001E\u001Cf\t\u000Bf\u001C:f\u00160i\u0017;f\u001C\u0000f\u00160f\u00169e<\u000Fe\u000C\u0017d:,f\u000F\u0010d>\u001Be\u00053d:\u000Ef\u001B4e$\u001Ah?\u0019d8*g3;g;\u001Fg\u001F%i\u0001\u0013f88f\u0008\u000Fe9?e\u0011\ne\u00056d;\u0016e\u000F\u0011h!(e.\te\u0005(g,,d8\u0000d<\u001Ae\u0011\u0018h?\u001Bh!\u000Cg\u00029e\u0007;g\t\u0008f\u001D\u0003g\u00145e-\u0010d8\u0016g\u0015\u000Ch.>h.!e\u0005\rh49f\u0015\u0019h\u00022e\n e\u0005%f4;e\n(d;\u0016d;,e\u0015\u0006e\u0013\u0001e\r\u001Ae.\"g\u000E0e\u001C(d8\nf57e&\u0002d=\u0015e72g;\u000Fg\u0015\u0019h(\u0000h/&g;\u0006g$>e\u000C:g\u0019;e=\u0015f\u001C,g+\u0019i\u001C\u0000h&\u0001d;7f f\u000E%e\u001B=e.6e;:h.>f\u001C\u000Be\u000F\u000Bi\u0018\u0005h/;f3\u0015e>\u000Bd=\rg=.g;\u000Ff5\u000Ei\u0000\tf\u000B)h?\u0019f 7e=\u0013e\t\re\u0008\u0006g1;f\u000E\u0012h!\u000Ce\u001B d8:d:$f\u0018\u0013f\u001C\u0000e\u0010\u000Ei\u001F3d9\u0010d8\rh\u0003=i\u0000\u001Ah?\u0007h!\u000Cd8\u001Ag'\u0011f\n\u0000e\u000F/h\u0003=h.>e$\u0007e\u0010\u0008d=\u001Ce$'e.6g$>d<\u001Ag \u0014g)6d8\u0013d8\u001Ae\u0005(i\u0003(i!9g\u001B.h?\u0019i\u0007\u000Ch?\u0018f\u0018/e<\u0000e'\u000Bf\u0003\u0005e\u00065g\u00145h\u0004\u0011f\u0016\u0007d;6e\u0013\u0001g\t\u000Ce8.e\n)f\u0016\u0007e\u000C\u0016h5\u0004f:\u0010e$'e-&e-&d9 e\u001C0e\u001D\u0000f5\u000Fh'\u0008f\n\u0015h5\u0004e7%g(\u000Bh&\u0001f1\u0002f\u0000\u000Ed9\u0008f\u00176e\u0000\u0019e\n\u001Fh\u0003=d8;h&\u0001g\u001B.e\t\rh5\u0004h./e\u001F\u000Ee8\u0002f\u00169f3\u0015g\u00145e=1f\u000B\u001Bh\u0001\u0018e#0f\u0018\u000Ed;;d=\u0015e\u0001%e:7f\u00150f\r.g>\u000Ee\u001B=f1=h=&d;\u000Bg;\rd=\u0006f\u0018/d:$f5\u0001g\u0014\u001Fd:'f\t\u0000d;%g\u00145h/\u001Df\u0018>g$:d8\u0000d:\u001Be\r\u0015d=\rd::e\u0011\u0018e\u0008\u0006f\u001E\u0010e\u001C0e\u001B>f\u0017\u0005f88e7%e\u00057e-&g\u0014\u001Fg3;e\u0008\u0017g=\u0011e\u000F\u000Be8\u0016e-\u0010e/\u0006g \u0001i\"\u0011i\u0001\u0013f\u000E'e\u00086e\u001C0e\u000C:e\u001F:f\u001C,e\u0005(e\u001B=g=\u0011d8\ni\u0007\rh&\u0001g,,d:\u000Ce\u0016\u001Cf,\"h?\u001Be\u0005%e\u000F\u000Bf\u0003\u0005h?\u0019d:\u001Bh\u0000\u0003h/\u0015e\u000F\u0011g\u000E0e\u001F9h.-d;%d8\nf\u0014?e:\u001Cf\u0008\u0010d8:g\u000E/e\"\u0003i&\u0019f8/e\u0010\u000Cf\u00176e(1d9\u0010e\u000F\u0011i\u0000\u0001d8\u0000e.\u001Ae<\u0000e\u000F\u0011d=\u001Ce\u0013\u0001f \u0007e\u0007\u0006f,\"h?\u000Eh'#e\u00063e\u001C0f\u00169d8\u0000d8\u000Bd;%e\u000F\nh4#d;;f\u0008\u0016h\u0000\u0005e.\"f\u00087d;#h!(g'/e\u0008\u0006e%3d::f\u00150g \u0001i\u0014\u0000e\u0014.e\u0007:g\u000E0g&;g:?e:\u0014g\u0014(e\u0008\u0017h!(d8\re\u0010\u000Cg<\u0016h>\u0011g;\u001Fh.!f\u001F%h/\"d8\rh&\u0001f\u001C\te\u00053f\u001C:f\u001E\u0004e>\u0008e$\u001Af\u0012-f\u0014>g;\u0004g;\u0007f\u0014?g-\u0016g\u001B4f\u000E%h\u0003=e\n\u001Bf\u001D%f:\u0010f\u0019\u0002i\u0016\u0013g\u001C\u000Be\u00080g\u0003-i\u0017(e\u00053i\u0014.d8\u0013e\u000C:i\u001D\u001Ee88h\u000B1h/-g\u0019>e:&e8\u000Cf\u001C\u001Bg>\u000Ee%3f/\u0014h>\u0003g\u001F%h/\u0006h'\u0004e.\u001Ae;:h..i\u0003(i\u0017(f\u0004\u000Fh'\u0001g2>e=)f\u0017%f\u001C,f\u000F\u0010i+\u0018e\u000F\u0011h(\u0000f\u00169i\u001D\"e\u001F:i\u0007\u0011e$\u0004g\u0010\u0006f\u001D\u0003i\u0019\u0010e=1g\t\u0007i\u00136h!\u000Ch?\u0018f\u001C\te\u0008\u0006d:+g\t)e\u0013\u0001g;\u000Fh\u0010%f7;e\n d8\u0013e.6h?\u0019g'\rh/\u001Di\"\u0018h57f\u001D%d8\u001Ae\n!e\u0005,e\u0011\nh.0e=\u0015g.\u0000d;\u000Bh4(i\u0007\u000Fg\u00147d::e=1e\u0013\re<\u0015g\u0014(f\n%e\u0011\ni\u0003(e\u0008\u0006e?+i\u0000\u001Fe\u0012(h/\"f\u00176e0\u001Af3(f\u0004\u000Fg\u00143h/7e-&f !e:\u0014h/%e\u000E\u0006e\u000F2e\u000F*f\u0018/h?\u0014e\u001B\u001Eh4-d90e\u0010\rg'0d8:d:\u0006f\u0008\u0010e\n\u001Fh/4f\u0018\u000Ed>\u001Be:\u0014e-)e-\u0010d8\u0013i\"\u0018g(\u000Be:\u000Fd8\u0000h\u0008,f\u001C\u0003e\u0013!e\u000F*f\u001C\te\u00056e.\u0003d?\u001Df\n$h\u0000\u000Cd8\u0014d;\ne$)g*\u0017e\u000F#e\n(f\u0000\u0001g\n6f\u0000\u0001g\t9e\u0008+h.$d8:e?\u0005i!;f\u001B4f\u00160e0\u000Fh/4f\u0008\u0011e\u0000\u0011d=\u001Cd8:e*\u0012d=\u0013e\u000C\u0005f\u000B,i\u0002#d9\u0008d8\u0000f 7e\u001B=e\u0006\u0005f\u0018/e\u0010&f 9f\r.g\u00145h'\u0006e-&i\u0019\"e\u00057f\u001C\th?\u0007g(\u000Bg\u00141d:\u000Ed::f\t\re\u0007:f\u001D%d8\rh?\u0007f-#e\u001C(f\u0018\u000Ef\u0018\u001Ff\u0015\u0005d:\u000Be\u00053g3;f \u0007i\"\u0018e\u0015\u0006e\n!h>\u0013e\u0005%d8\u0000g\u001B4e\u001F:g!\u0000f\u0015\u0019e-&d:\u0006h'#e;:g-\u0011g;\u0013f\u001E\u001Ce\u0005(g\u0010\u0003i\u0000\u001Ag\u001F%h.!e\u0008\u0012e/9d:\u000Eh\t:f\u001C/g\u001B8e\u0006\u000Ce\u000F\u0011g\u0014\u001Fg\u001C\u001Fg\u001A\u0004e;:g+\u000Bg-\tg:'g1;e\u001E\u000Bg;\u000Fi*\u000Ce.\u001Eg\u000E0e\u00086d=\u001Cf\u001D%h\u0007*f \u0007g->d;%d8\u000Be\u000E\u001Fe\u0008\u001Bf\u0017 f3\u0015e\u00056d8-e\u0000\u000Bd::d8\u0000e\u0008\u0007f\u000C\u0007e\r\u0017e\u00053i\u0017-i\u001B\u0006e\u001B\"g,,d8\te\u00053f3(e\u001B f-$g\u0005'g\t\u0007f71e\u001C3e\u0015\u0006d8\u001Ae9?e7\u001Ef\u0017%f\u001C\u001Fi+\u0018g:'f\u001C\u0000h?\u0011g;\u0011h!\u000Cd8:d:$i\u0000\u001Ah/\u0004d;7h'\te>\u0017g2>e\r\u000Ee.6e:-e.\u000Cf\u0008\u0010f\u0004\u001Fh'\te.\th#\u0005e>\u0017e\u00080i\u0002.d;6e\u00086e:&i#\u001Fe\u0013\u0001h\u0019=g\u00046h=,h==f\n%d;7h.0h\u0000\u0005f\u00169f!\u0008h!\u000Cf\u0014?d::f0\u0011g\u0014(e\u0013\u0001d8\u001Ch%?f\u000F\u0010e\u0007:i\u0005\u0012e:\u0017g\u00046e\u0010\u000Ed;\u0018f,>g\u0003-g\u00029d;%e\t\re.\u000Ce\u0005(e\u000F\u0011e8\u0016h.>g=.i\"\u0006e/g%\u001Eh\u000E7e>\u0017e\u0008)g\u0014(g;'g;-d= d;,h?\u0019d9\u0008f(!e<\u000Fh/-h(\u0000h\u0003=e$\u001Fi\u001B\u0005h\u0019\u000Ef\u0013\rd=\u001Ci#\u000Ef d9&f\u001C\tf\u0015\u0008f5\u000Bh/\u0015g';e\n(f\t\rh\u0003=e\u00063e.\u001Ah\u0002!g%(d8\rf\u0016-i\u001C\u0000f1\u0002d8\re>\u0017e\n\u001Ef3\u0015d9\u000Bi\u00174i\u0007\u0007g\u0014(h\u0010%i\u0014\u0000f\n\u0015h/\tg\u001B.f \u0007g\u00081f\u0003\u0005f\u0011\u0004e=1f\u001C\td:\u001Bh$\u0007h#=f\u0016\u0007e-&f\u001C:d<\u001Af\u00150e-\u0017h#\u0005d?.h4-g\t)e\u0006\u001Cf\u001D\u0011e\u0005(i\u001D\"g2>e\u0013\u0001e\u00056e.\u001Ed:\u000Bf\u0003\u0005f04e93f\u000F\u0010g$:d8\ne8\u0002h0\"h0\"f\u0019.i\u0000\u001Af\u0015\u0019e8\u0008d8\nd< g1;e\u0008+f-\u000Cf\u001B2f\u000B%f\u001C\te\u0008\u001Bf\u00160i\u0005\rd;6e\u000F*h&\u0001f\u00176d;#h3\u0007h(\nh>>e\u00080d::g\u0014\u001Fh.\"i\u0018\u0005h\u0000\u0001e8\u0008e1\u0015g$:e?\u0003g\u0010\u0006h44e-\u0010g62g+\u0019d8;i!\u000Ch\u0007*g\u00046g:'e\u0008+g.\u0000e\r\u0015f\u00149i\u001D)i\u0002#d:\u001Bf\u001D%h/4f\t\u0013e<\u0000d;#g \u0001e\u0008 i\u0019$h/\u0001e\u00088h\n\u0002g\u001B.i\u0007\rg\u00029f,!f\u00158e$\u001Ae0\u0011h'\u0004e\u0008\u0012h5\u0004i\u0007\u0011f\t>e\u00080d;%e\u0010\u000Ee$'e\u0005(d8;i!5f\u001C\u0000d=3e\u001B\u001Eg-\u0014e$)d8\u000Bd?\u001Di\u001A\u001Cg\u000E0d;#f#\u0000f\u001F%f\n\u0015g%(e0\u000Ff\u00176f2\u0012f\u001C\tf-#e88g\u0014\u001Ah\u00073d;#g\u0010\u0006g\u001B.e=\u0015e\u0005,e<\u0000e$\re\u00086i\u0007\u0011h\u001E\re98g&\u000Fg\t\u0008f\u001C,e=\"f\u0008\u0010e\u0007\u0006e$\u0007h!\u000Cf\u0003\u0005e\u001B\u001Ee\u00080f\u0000\u001Df\u00033f\u0000\u000Ef 7e\r\u000Fh..h.$h/\u0001f\u001C\u0000e%=d:'g\u0014\u001Ff\u000C\tg\u0005'f\u001C\rh#\u0005e9?d8\u001Ce\n(f<+i\u0007\u0007h4-f\u00160f\t\u000Bg;\u0004e\u001B>i\u001D\"f\u001D?e\u000F\u0002h\u0000\u0003f\u0014?f2;e.9f\u0018\u0013e$)e\u001C0e\n*e\n\u001Bd::d;,e\r\u0007g:'i\u0000\u001Fe:&d::g\t)h0\u0003f\u00154f5\u0001h!\u000Ci\u0000 f\u0008\u0010f\u0016\u0007e-\u0017i\u001F)e\u001B=h48f\u0018\u0013e<\u0000e1\u0015g\u001B8i\u0017\u001Ch!(g\u000E0e=1h'\u0006e&\u0002f-$g>\u000Ee.9e$'e0\u000Ff\n%i\u0001\u0013f\u001D!f,>e?\u0003f\u0003\u0005h.8e$\u001Af3\u0015h'\u0004e.6e1\u0005d9&e:\u0017h?\u001Ef\u000E%g+\u000Be\r3d8>f\n%f\n\u0000e7'e%%h?\u0010g\u0019;e\u0005%d;%f\u001D%g\u0010\u0006h.:d:\u000Bd;6h\u0007*g\u00141d8-e\r\u000Ee\n\u001Ee\u0005,e&\u0008e&\u0008g\u001C\u001Ff-#d8\ri\u0014\u0019e\u0005(f\u0016\u0007e\u0010\u0008e\u0010\u000Cd;7e\u0000e7&e\u000F3h\u0002!d;=g-\u0014f!\u0008e.\u001Ei\u0019\u0005g\u00145d?!g;\u000Fg\u0010\u0006g\u0014\u001Fe\u0011=e.#d< d;;e\n!f-#e<\u000Fg\t9h\t2d8\u000Bf\u001D%e\r\u000Fd<\u001Ae\u000F*h\u0003=e=\u0013g\u00046i\u0007\rf\u00160e\u0005'e.9f\u000C\u0007e/g(\u000Be\u000C;g\u0016\u0017g;\u000Fh?\u0007h?\u0007e\u000E;d9\u000Be\t\rf\u00146e\u0005%e94e:&f\u001D\u0002e?\u0017g>\u000Ed8=f\u001C\u0000i+\u0018g\u0019;i\u0019\u0006f\u001C*f\u001D%e\n e7%e\u0005\rh4#f\u0015\u0019g(\u000Bg\t\u0008e\u001D\u0017h:+d=\u0013i\u0007\re:\u0006e\u0007:e\u0014.f\u0008\u0010f\u001C,e=\"e<\u000Fe\u001C\u001Fh1\u0006e\u0007:e\u00039d8\u001Cf\u00169i\u0002.g.1e\r\u0017d:,f1\u0002h\u0001\u000Ce\u000F\u0016e>\u0017h\u0001\u000Cd=\rg\u001B8d?!i!5i\u001D\"e\u0008\u0006i\u0012\u001Fg=\u0011i!5g!.e.\u001Ae\u001B>d>\u000Bg=\u0011e\u001D\u0000g'/f\u001E\u0001i\u0014\u0019h//g\u001B.g\u001A\u0004e.\u001Dh4\u001Df\u001C:e\u00053i#\u000Ei\u0019)f\u000E\u0008f\u001D\u0003g\u0017\u0005f/\u0012e. g\t)i\u0019$d:\u0006h)\u0015h+\u0016g\u0016>g\u0017\u0005e\u000F\nf\u00176f1\u0002h4-g+\u0019g\u00029e\u0004?g+%f/\u000Fe$)d8-e$.h.$h/\u0006f/\u000Fd8*e$)f4%e-\u0017d=\u0013e\u000F0g\u0001#g;4f\n$f\u001C,i!5d8*f\u0000'e.\u0018f\u00169e88h'\u0001g\u001B8f\u001C:f\u0008\u0018g\u0015%e:\u0014e=\u0013e>\u000Be8\u0008f\u00169d>?f !e\u001B-h\u0002!e8\u0002f\u0008?e1\u000Bf \u000Fg\u001B.e\u0011\u0018e7%e/\u000Ee\u0005\u0003e<\u0015h57f\u00149e\u000F\u0018g,,e\u001B\u001Bd<\u001Ah.!h**f\u0018\u000Ei\u001A\u0010g'\u0001e.\u001De.\u001Dh'\u0004h\u000C\u0003f6\u0008h49e\u00051e\u0010\u000Ce?\u0018h.0d=\u0013g3;e8&f\u001D%e\u0010\re-\u0017g\u0019e\n g\u001B\u001Fe\u000F\u0017e\u00080d:\u000Cf\t\u000Be$'i\u0007\u000Ff\u0008\u0010d::f\u00150i\u0007\u000Fe\u00051d:+e\u000C:e\u001F\u001Fe%3e-)e\u000E\u001Fe\u0008\u0019f\t\u0000e\u001C(g;\u0013f\u001D\u001Fi\u0000\u001Ad?!h6\u0005g:'i\u0005\rg=.e=\u0013f\u00176d<\u0018g'\u0000f\u0000'f\u0004\u001Ff\u0008?d:'i\u0001\nf\u00082e\u0007:e\u000F#f\u000F\u0010d:$e01d8\u001Ad?\u001De\u0001%g(\u000Be:&e\u000F\u0002f\u00150d:\u000Bd8\u001Af\u00154d8*e11d8\u001Cf\u0003\u0005f\u0004\u001Fg\t9f.\ne\u0008\u0006i!\u001Ef\u0010\u001Ce0\u000Be1\u001Ed:\u000Ei\u0017(f\u00087h4\"e\n!e#0i\u001F3e\u000F\ne\u00056h4\"g;\u000Fe\u001D\u001Af\u000C\u0001e92i\u0003(f\u0008\u0010g+\u000Be\u0008)g\u001B\nh\u0000\u0003h\u0019\u0011f\u0008\u0010i\u0003=e\u000C\u0005h#\u0005g\u0014(f\u00086f/\u0014h5\u001Bf\u0016\u0007f\u0018\u000Ef\u000B\u001Be\u0015\u0006e.\u000Cf\u00154g\u001C\u001Ff\u0018/g\u001Ce/\u0006g\"\u000Ei#\u001Fg;?h\t2g(3e.\u001Ag;\u0008d:\u000Eg\u0014\u001Fg\t)d>\u001Bf1\u0002f\u0010\u001Cg\u000B\u0010e\n\u001Bi\u0007\u000Fd8%i\u0007\rf08h?\u001Ce\u0006\u0019g\u001C\u001Ff\u001C\ti\u0019\u0010g+\u001Ed:\te/9h1!h49g\u0014(d8\re%=g;\u001De/9e\r\u0001e\u0008\u0006d?\u0003h?\u001Bg\u00029h/\u0004e=1i\u001F3d<\u0018e\n?d8\re0\u0011f,#h5\u000Fe96d8\u0014f\u001C\tg\u00029f\u00169e\u0010\u0011e\u0005(f\u00160d?!g\u0014(h.>f\u0016=e=\"h1!h5\u0004f \u000Ee\u0015\u0006e\u001F\u000Eg;\u001Fd8\u0000e\u0007:g\t\u0008f\t\u0013i\u0000 g\u0014\"e\u0013\u0001f&\u0002e\u00065g\u0014(d:\u000Ed?\u001Dg\u0015\u0019e\u001B g4 d8-e\u001C\u000Be-\u0018e\u0002(h44e\u001B>f\u001C\u0000f\u0004\u001Bi\u0015?f\u001C\u001Fe\u000F#d;7g\u0010\u0006h4\"e\u001F:e\u001C0e.\tf\u000E\u0012f-&f1\ti\u0007\u000Ci\u001D\"e\u0008\u001Be;:e$)g):i&\u0016e\u0005\u0008e.\u000Ce\u0016\u0004i)1e\n(d8\u000Bi\u001D\"d8\re\u0006\rh/\u001Ad?!f\u0004\u000Fd9\ti\u00183e\u0005\th\u000B1e\u001B=f<\u0002d:.e\u0006\u001Bd:\u000Bg\u000E)e.6g>$d<\u0017e\u0006\u001Cf0\u0011e\r3e\u000F/e\u0010\rg(1e.6e\u00057e\n(g\u0014;f\u00033e\u00080f3(f\u0018\u000Ee0\u000Fe-&f\u0000'h\u0003=h\u0000\u0003g \u0014g!,d;6h'\u0002g\u001C\u000Bf8\u0005f%\u001Af\u0010\u001Eg,\u0011i&\u0016i \u0001i;\u0004i\u0007\u0011i\u0000\u0002g\u0014(f1\u001Fh\u000B\u000Fg\u001C\u001Fe.\u001Ed8;g.!i\u00186f.5h(;e\u0006\ng?;h/\u0011f\u001D\u0003e\u0008)e\u0001\u001Ae%=d<P:P0P:P8P;P8Q\rQ\u0002P>P2Q\u0001P5P5P3P>P?Q\u0000P8Q\u0002P0P:P5Q\tP5Q\u0003P6P5P\u001AP0P:P1P5P7P1Q\u000BP;P>P=P8P\u0012Q\u0001P5P?P>P4P-Q\u0002P>Q\u0002P>PP=P0P3P4P5PP3P>P4P2P>Q\u0002Q\u0002P0PP2P0Q\u0001P2P0PQ\u0002Q\u0003Q\u0002P=P0P4P4P=Q\u000FP\u0012P>Q\u0002Q\u0002Q\u0000P8P=P5P9P\u0012P0Q\u0001P=P8PQ\u0002Q\u0000Q\u0003P1P\u001EP=P8PPP9P4P2P5P>P=P>Q\u0001Q\u0003P4`$\u0015`%\u0007`$9`%\u0008`$\u0015`%\u0000`$8`%\u0007`$\u0015`$>`$\u0015`%\u000B`$\u0014`$0`$*`$0`$(`%\u0007`$\u000F`$\u0015`$\u0015`$?`$-`%\u0000`$\u0007`$8`$\u0015`$0`$$`%\u000B`$9`%\u000B`$\u0006`$*`$9`%\u0000`$/`$9`$/`$>`$$`$\u0015`$%`$>jagran`$\u0006`$\u001C`$\u001C`%\u000B`$\u0005`$,`$&`%\u000B`$\u0017`$\u0008`$\u001C`$>`$\u0017`$\u000F`$9`$.`$\u0007`$(`$5`$9`$/`%\u0007`$%`%\u0007`$%`%\u0000`$\u0018`$0`$\u001C`$,`$&`%\u0000`$\u0015`$\u0008`$\u001C`%\u0000`$5`%\u0007`$(`$\u0008`$(`$\u000F`$9`$0`$\t`$8`$.`%\u0007`$\u0015`$.`$5`%\u000B`$2`%\u0007`$8`$,`$.`$\u0008`$&`%\u0007`$\u0013`$0`$\u0006`$.`$,`$8`$-`$0`$,`$(`$\u001A`$2`$.`$(`$\u0006`$\u0017`$8`%\u0000`$2`%\u0000X9Y\u0004Y\tX%Y\u0004Y\tY\u0007X0X'X\"X.X1X9X/X/X'Y\u0004Y\tY\u0007X0Y\u0007X5Y\u0008X1X:Y\nX1Y\u0003X'Y\u0006Y\u0008Y\u0004X'X(Y\nY\u0006X9X1X6X0Y\u0004Y\u0003Y\u0007Y\u0006X'Y\nY\u0008Y\u0005Y\u0002X'Y\u0004X9Y\u0004Y\nX'Y\u0006X'Y\u0004Y\u0003Y\u0006X-X*Y\tY\u0002X(Y\u0004Y\u0008X-X)X'X.X1Y\u0001Y\u0002X7X9X(X/X1Y\u0003Y\u0006X%X0X'Y\u0003Y\u0005X'X'X-X/X%Y\u0004X'Y\u0001Y\nY\u0007X(X9X6Y\u0003Y\nY\u0001X(X-X+Y\u0008Y\u0005Y\u0006Y\u0008Y\u0007Y\u0008X#Y\u0006X'X,X/X'Y\u0004Y\u0007X'X3Y\u0004Y\u0005X9Y\u0006X/Y\u0004Y\nX3X9X(X1X5Y\u0004Y\tY\u0005Y\u0006X0X(Y\u0007X'X#Y\u0006Y\u0007Y\u0005X+Y\u0004Y\u0003Y\u0006X*X'Y\u0004X'X-Y\nX+Y\u0005X5X1X4X1X-X-Y\u0008Y\u0004Y\u0008Y\u0001Y\nX'X0X'Y\u0004Y\u0003Y\u0004Y\u0005X1X)X'Y\u0006X*X'Y\u0004Y\u0001X#X(Y\u0008X.X'X5X#Y\u0006X*X'Y\u0006Y\u0007X'Y\u0004Y\nX9X6Y\u0008Y\u0008Y\u0002X/X'X(Y\u0006X.Y\nX1X(Y\u0006X*Y\u0004Y\u0003Y\u0005X4X'X!Y\u0008Y\u0007Y\nX'X(Y\u0008Y\u0002X5X5Y\u0008Y\u0005X'X1Y\u0002Y\u0005X#X-X/Y\u0006X-Y\u0006X9X/Y\u0005X1X#Y\nX'X-X)Y\u0003X*X(X/Y\u0008Y\u0006Y\nX,X(Y\u0005Y\u0006Y\u0007X*X-X*X,Y\u0007X)X3Y\u0006X)Y\nX*Y\u0005Y\u0003X1X)X:X2X)Y\u0006Y\u0001X3X(Y\nX*Y\u0004Y\u0004Y\u0007Y\u0004Y\u0006X'X*Y\u0004Y\u0003Y\u0002Y\u0004X(Y\u0004Y\u0005X'X9Y\u0006Y\u0007X#Y\u0008Y\u0004X4Y\nX!Y\u0006Y\u0008X1X#Y\u0005X'Y\u0001Y\nY\u0003X(Y\u0003Y\u0004X0X'X*X1X*X(X(X#Y\u0006Y\u0007Y\u0005X3X'Y\u0006Y\u0003X(Y\nX9Y\u0001Y\u0002X/X-X3Y\u0006Y\u0004Y\u0007Y\u0005X4X9X1X#Y\u0007Y\u0004X4Y\u0007X1Y\u0002X7X1X7Y\u0004X(profileservicedefaulthimselfdetailscontentsupportstartedmessagesuccessfashioncountryaccountcreatedstoriesresultsrunningprocesswritingobjectsvisiblewelcomearticleunknownnetworkcompanydynamicbrowserprivacyproblemServicerespectdisplayrequestreservewebsitehistoryfriendsoptionsworkingversionmillionchannelwindow.addressvisitedweathercorrectproductedirectforwardyou canremovedsubjectcontrolarchivecurrentreadinglibrarylimitedmanagerfurthersummarymachineminutesprivatecontextprogramsocietynumberswrittenenabledtriggersourcesloadingelementpartnerfinallyperfectmeaningsystemskeepingculture",journalprojectsurfaces"expiresreviewsbalanceEnglishContentthroughPlease opinioncontactaverageprimaryvillageSpanishgallerydeclinemeetingmissionpopularqualitymeasuregeneralspeciessessionsectionwriterscounterinitialreportsfiguresmembersholdingdisputeearlierexpressdigitalpictureAnothermarriedtrafficleadingchangedcentralvictoryimages/reasonsstudiesfeaturelistingmust beschoolsVersionusuallyepisodeplayinggrowingobviousoverlaypresentactions</ul>\r\nwrapperalreadycertainrealitystorageanotherdesktopofferedpatternunusualDigitalcapitalWebsitefailureconnectreducedAndroiddecadesregular & animalsreleaseAutomatgettingmethodsnothingPopularcaptionletterscapturesciencelicensechangesEngland=1&History = new CentralupdatedSpecialNetworkrequirecommentwarningCollegetoolbarremainsbecauseelectedDeutschfinanceworkersquicklybetweenexactlysettingdiseaseSocietyweaponsexhibit<!--Controlclassescoveredoutlineattacksdevices(windowpurposetitle=\"Mobile killingshowingItaliandroppedheavilyeffects-1']);\nconfirmCurrentadvancesharingopeningdrawingbillionorderedGermanyrelated</form>includewhetherdefinedSciencecatalogArticlebuttonslargestuniformjourneysidebarChicagoholidayGeneralpassage,"animatefeelingarrivedpassingnaturalroughly.\n\nThe but notdensityBritainChineselack oftributeIreland\" data-factorsreceivethat isLibraryhusbandin factaffairsCharlesradicalbroughtfindinglanding:lang=\"return leadersplannedpremiumpackageAmericaEdition]"Messageneed tovalue=\"complexlookingstationbelievesmaller-mobilerecordswant tokind ofFirefoxyou aresimilarstudiedmaximumheadingrapidlyclimatekingdomemergedamountsfoundedpioneerformuladynastyhow to SupportrevenueeconomyResultsbrothersoldierlargelycalling."AccountEdward segmentRobert effortsPacificlearnedup withheight:we haveAngelesnations_searchappliedacquiremassivegranted: falsetreatedbiggestbenefitdrivingStudiesminimumperhapsmorningsellingis usedreversevariant role=\"missingachievepromotestudentsomeoneextremerestorebottom:evolvedall thesitemapenglishway to AugustsymbolsCompanymattersmusicalagainstserving})();\r\npaymenttroubleconceptcompareparentsplayersregionsmonitor ''The winningexploreadaptedGalleryproduceabilityenhancecareers). The collectSearch ancientexistedfooter handlerprintedconsoleEasternexportswindowsChannelillegalneutralsuggest_headersigning.html\">settledwesterncausing-webkitclaimedJusticechaptervictimsThomas mozillapromisepartieseditionoutside:false,hundredOlympic_buttonauthorsreachedchronicdemandssecondsprotectadoptedprepareneithergreatlygreateroverallimprovecommandspecialsearch.worshipfundingthoughthighestinsteadutilityquarterCulturetestingclearlyexposedBrowserliberal} catchProjectexamplehide();FloridaanswersallowedEmperordefenseseriousfreedomSeveral-buttonFurtherout of != nulltrainedDenmarkvoid(0)/all.jspreventRequestStephen\n\nWhen observe</h2>\r\nModern provide\" alt=\"borders.\n\nFor \n\nMany artistspoweredperformfictiontype ofmedicalticketsopposedCouncilwitnessjusticeGeorge Belgium...</a>twitternotablywaitingwarfare Other rankingphrasesmentionsurvivescholar</p>\r\n Countryignoredloss ofjust asGeorgiastrange<head><stopped1']);\r\nislandsnotableborder:list ofcarried100,000</h3>\n severalbecomesselect wedding00.htmlmonarchoff theteacherhighly biologylife ofor evenrise of»plusonehunting(thoughDouglasjoiningcirclesFor theAncientVietnamvehiclesuch ascrystalvalue =Windowsenjoyeda smallassumed<a id=\"foreign All rihow theDisplayretiredhoweverhidden;battlesseekingcabinetwas notlook atconductget theJanuaryhappensturninga:hoverOnline French lackingtypicalextractenemieseven ifgeneratdecidedare not/searchbeliefs-image:locatedstatic.login\">convertviolententeredfirst\">circuitFinlandchemistshe was10px;\">as suchdivided</span>will beline ofa greatmystery/index.fallingdue to railwaycollegemonsterdescentit withnuclearJewish protestBritishflowerspredictreformsbutton who waslectureinstantsuicidegenericperiodsmarketsSocial fishingcombinegraphicwinners<br /><by the NaturalPrivacycookiesoutcomeresolveSwedishbrieflyPersianso muchCenturydepictscolumnshousingscriptsnext tobearingmappingrevisedjQuery(-width:title\">tooltipSectiondesignsTurkishyounger.match(})();\n\nburningoperatedegreessource=Richardcloselyplasticentries</tr>\r\ncolor:#ul id=\"possessrollingphysicsfailingexecutecontestlink toDefault<br />\n: true,chartertourismclassicproceedexplain</h1>\r\nonline.?xml vehelpingdiamonduse theairlineend -->).attr(readershosting#ffffffrealizeVincentsignals src=\"/ProductdespitediversetellingPublic held inJoseph theatreaffects<style>a largedoesn'tlater, ElementfaviconcreatorHungaryAirportsee theso thatMichaelSystemsPrograms, and width=e"tradingleft\">\npersonsGolden Affairsgrammarformingdestroyidea ofcase ofoldest this is.src = cartoonregistrCommonsMuslimsWhat isin manymarkingrevealsIndeed,equally/show_aoutdoorescape(Austriageneticsystem,In the sittingHe alsoIslandsAcademy\n\t\t<!--Daniel bindingblock\">imposedutilizeAbraham(except{width:putting).html(|| [];\nDATA[ *kitchenmountedactual dialectmainly _blank'installexpertsif(typeIt also© \">Termsborn inOptionseasterntalkingconcerngained ongoingjustifycriticsfactoryits ownassaultinvitedlastinghis ownhref=\"/\" rel=\"developconcertdiagramdollarsclusterphp?id=alcohol);})();using a><span>vesselsrevivalAddressamateurandroidallegedillnesswalkingcentersqualifymatchesunifiedextinctDefensedied in\n\t<!-- customslinkingLittle Book ofeveningmin.js?are thekontakttoday's.html\" target=wearingAll Rig;\n})();raising Also, crucialabout\">declare-->\n<scfirefoxas muchappliesindex, s, but type = \n\r\n<!--towardsRecordsPrivateForeignPremierchoicesVirtualreturnsCommentPoweredinline;povertychamberLiving volumesAnthonylogin\" RelatedEconomyreachescuttinggravitylife inChapter-shadowNotable</td>\r\n returnstadiumwidgetsvaryingtravelsheld bywho arework infacultyangularwho hadairporttown of\n\nSome 'click'chargeskeywordit willcity of(this);Andrew unique checkedor more300px; return;rsion=\"pluginswithin herselfStationFederalventurepublishsent totensionactresscome tofingersDuke ofpeople,exploitwhat isharmonya major\":\"httpin his menu\">\nmonthlyofficercouncilgainingeven inSummarydate ofloyaltyfitnessand wasemperorsupremeSecond hearingRussianlongestAlbertalateralset of small\">.appenddo withfederalbank ofbeneathDespiteCapitalgrounds), and percentit fromclosingcontainInsteadfifteenas well.yahoo.respondfighterobscurereflectorganic= Math.editingonline paddinga wholeonerroryear ofend of barrierwhen itheader home ofresumedrenamedstrong>heatingretainscloudfrway of March 1knowingin partBetweenlessonsclosestvirtuallinks\">crossedEND -->famous awardedLicenseHealth fairly wealthyminimalAfricancompetelabel\">singingfarmersBrasil)discussreplaceGregoryfont copursuedappearsmake uproundedboth ofblockedsaw theofficescoloursif(docuwhen heenforcepush(fuAugust UTF-8\">Fantasyin mostinjuredUsuallyfarmingclosureobject defenceuse of Medical<body>\nevidentbe usedkeyCodesixteenIslamic#000000entire widely active (typeofone cancolor =speakerextendsPhysicsterrain<tbody>funeralviewingmiddle cricketprophetshifteddoctorsRussell targetcompactalgebrasocial-bulk ofman and</td>\n he left).val()false);logicalbankinghome tonaming Arizonacredits);\n});\nfounderin turnCollinsbefore But thechargedTitle\">CaptainspelledgoddessTag -->Adding:but wasRecent patientback in=false&Lincolnwe knowCounterJudaismscript altered']);\n has theunclearEvent',both innot all\n\n<!-- placinghard to centersort ofclientsstreetsBernardassertstend tofantasydown inharbourFreedomjewelry/about..searchlegendsis mademodern only ononly toimage\" linear painterand notrarely acronymdelivershorter00&as manywidth=\"/* <![Ctitle =of the lowest picked escapeduses ofpeoples PublicMatthewtacticsdamagedway forlaws ofeasy to windowstrong simple}catch(seventhinfoboxwent topaintedcitizenI don'tretreat. Some ww.\");\nbombingmailto:made in. Many carries||{};wiwork ofsynonymdefeatsfavoredopticalpageTraunless sendingleft\"><comScorAll thejQuery.touristClassicfalse\" Wilhelmsuburbsgenuinebishops.split(global followsbody ofnominalContactsecularleft tochiefly-hidden-banner</li>\n\n. When in bothdismissExplorealways via thespaC1olwelfareruling arrangecaptainhis sonrule ofhe tookitself,=0&(calledsamplesto makecom/pagMartin Kennedyacceptsfull ofhandledBesides//--></able totargetsessencehim to its by common.mineralto takeways tos.org/ladvisedpenaltysimple:if theyLettersa shortHerbertstrikes groups.lengthflightsoverlapslowly lesser social </p>\n\t\tit intoranked rate oful>\r\n attemptpair ofmake itKontaktAntoniohaving ratings activestreamstrapped\").css(hostilelead tolittle groups,Picture-->\r\n\r\n rows=\" objectinverse<footerCustomV><\\/scrsolvingChamberslaverywoundedwhereas!= 'undfor allpartly -right:Arabianbacked centuryunit ofmobile-Europe,is homerisk ofdesiredClintoncost ofage of become none ofp"Middle ead')[0Criticsstudios>©group\">assemblmaking pressedwidget.ps:\" ? rebuiltby someFormer editorsdelayedCanonichad thepushingclass=\"but arepartialBabylonbottom carrierCommandits useAs withcoursesa thirddenotesalso inHouston20px;\">accuseddouble goal ofFamous ).bind(priests Onlinein Julyst + \"gconsultdecimalhelpfulrevivedis veryr'+'iptlosing femalesis alsostringsdays ofarrivalfuture <objectforcingString(\" />\n\t\there isencoded. The balloondone by/commonbgcolorlaw of Indianaavoidedbut the2px 3pxjquery.after apolicy.men andfooter-= true;for usescreen.Indian image =family,http://  driverseternalsame asnoticedviewers})();\n is moreseasonsformer the newis justconsent Searchwas thewhy theshippedbr><br>width: height=made ofcuisineis thata very Admiral fixed;normal MissionPress, ontariocharsettry to invaded=\"true\"spacingis mosta more totallyfall of});\r\n immensetime inset outsatisfyto finddown tolot of Playersin Junequantumnot thetime todistantFinnishsrc = (single help ofGerman law andlabeledforestscookingspace\">header-well asStanleybridges/globalCroatia About [0];\n it, andgroupedbeing a){throwhe madelighterethicalFFFFFF\"bottom\"like a employslive inas seenprintermost ofub-linkrejectsand useimage\">succeedfeedingNuclearinformato helpWomen'sNeitherMexicanprotein<table by manyhealthylawsuitdevised.push({sellerssimply Through.cookie Image(older\">us.js\"> Since universlarger open to!-- endlies in']);\r\n marketwho is (\"DOMComanagedone fortypeof Kingdomprofitsproposeto showcenter;made itdressedwere inmixtureprecisearisingsrc = 'make a securedBaptistvoting \n\t\tvar March 2grew upClimate.removeskilledway the</head>face ofacting right\">to workreduceshas haderectedshow();action=book ofan area== \"htt<header\n<html>conformfacing cookie.rely onhosted .customhe wentbut forspread Family a meansout theforums.footage\">MobilClements\" id=\"as highintense--><!--female is seenimpliedset thea stateand hisfastestbesidesbutton_bounded\"><img Infoboxevents,a youngand areNative cheaperTimeoutand hasengineswon the(mostlyright: find a -bottomPrince area ofmore ofsearch_nature,legallyperiod,land ofor withinducedprovingmissilelocallyAgainstthe wayk"px;\">\r\npushed abandonnumeralCertainIn thismore inor somename isand, incrownedISBN 0-createsOctobermay notcenter late inDefenceenactedwish tobroadlycoolingonload=it. TherecoverMembersheight assumes<html>\npeople.in one =windowfooter_a good reklamaothers,to this_cookiepanel\">London,definescrushedbaptismcoastalstatus title\" move tolost inbetter impliesrivalryservers SystemPerhapses and contendflowinglasted rise inGenesisview ofrising seem tobut in backinghe willgiven agiving cities.flow of Later all butHighwayonly bysign ofhe doesdiffersbattery&lasinglesthreatsintegertake onrefusedcalled =US&See thenativesby thissystem.head of:hover,lesbiansurnameand allcommon/header__paramsHarvard/pixel.removalso longrole ofjointlyskyscraUnicodebr />\r\nAtlantanucleusCounty,purely count\">easily build aonclicka givenpointerh"events else {\nditionsnow the, with man whoorg/Webone andcavalryHe diedseattle00,000 {windowhave toif(windand itssolely m"renewedDetroitamongsteither them inSenatorUs</a><King ofFrancis-produche usedart andhim andused byscoringat hometo haverelatesibilityfactionBuffalolink\"><what hefree toCity ofcome insectorscountedone daynervoussquare };if(goin whatimg\" alis onlysearch/tuesdaylooselySolomonsexual - <a hrmedium\"DO NOT France,with a war andsecond take a >\r\n\r\n\r\nmarket.highwaydone inctivity\"last\">obligedrise to\"undefimade to Early praisedin its for hisathleteJupiterYahoo! termed so manyreally s. The a woman?value=direct right\" bicycleacing=\"day andstatingRather,higher Office are nowtimes, when a pay foron this-link\">;borderaround annual the Newput the.com\" takin toa brief(in thegroups.; widthenzymessimple in late{returntherapya pointbanninginks\">\n();\" rea place\\u003Caabout atr>\r\n\t\tccount gives a<SCRIPTRailwaythemes/toolboxById(\"xhumans,watchesin some if (wicoming formats Under but hashanded made bythan infear ofdenoted/iframeleft involtagein eacha"base ofIn manyundergoregimesaction </p>\r\n<ustomVa;></importsor thatmostly &re size=\"</a></ha classpassiveHost = WhetherfertileVarious=[];(fucameras/></td>acts asIn some>\r\n\r\n<!organis <br />BeijingcatalC deutscheuropeueuskaragaeilgesvenskaespaC1amensajeusuariotrabajomC)xicopC!ginasiempresistemaoctubreduranteaC1adirempresamomentonuestroprimeratravC)sgraciasnuestraprocesoestadoscalidadpersonanC:meroacuerdomC:sicamiembroofertasalgunospaC-sesejemploderechoademC!sprivadoagregarenlacesposiblehotelessevillaprimeroC:ltimoeventosarchivoculturamujeresentradaanuncioembargomercadograndesestudiomejoresfebrerodiseC1oturismocC3digoportadaespaciofamiliaantoniopermiteguardaralgunaspreciosalguiensentidovisitastC-tuloconocersegundoconsejofranciaminutossegundatenemosefectosmC!lagasesiC3nrevistagranadacompraringresogarcC-aacciC3necuadorquienesinclusodeberC!materiahombresmuestrapodrC-amaC1anaC:ltimaestamosoficialtambienningC:nsaludospodemosmejorarpositionbusinesshomepagesecuritylanguagestandardcampaignfeaturescategoryexternalchildrenreservedresearchexchangefavoritetemplatemilitaryindustryservicesmaterialproductsz-index:commentssoftwarecompletecalendarplatformarticlesrequiredmovementquestionbuildingpoliticspossiblereligionphysicalfeedbackregisterpicturesdisabledprotocolaudiencesettingsactivityelementslearninganythingabstractprogressoverviewmagazineeconomictrainingpressurevarious <strong>propertyshoppingtogetheradvancedbehaviordownloadfeaturedfootballselectedLanguagedistanceremembertrackingpasswordmodifiedstudentsdirectlyfightingnortherndatabasefestivalbreakinglocationinternetdropdownpracticeevidencefunctionmarriageresponseproblemsnegativeprogramsanalysisreleasedbanner\">purchasepoliciesregionalcreativeargumentbookmarkreferrerchemicaldivisioncallbackseparateprojectsconflicthardwareinterestdeliverymountainobtained= false;for(var acceptedcapacitycomputeridentityaircraftemployedproposeddomesticincludesprovidedhospitalverticalcollapseapproachpartnerslogo\"><adaughterauthor\" culturalfamilies/images/assemblypowerfulteachingfinisheddistrictcriticalcgi-bin/purposesrequireselectionbecomingprovidesacademicexerciseactuallymedicineconstantaccidentMagazinedocumentstartingbottom\">observed: "extendedpreviousSoftwarecustomerdecisionstrengthdetailedslightlyplanningtextareacurrencyeveryonestraighttransferpositiveproducedheritageshippingabsolutereceivedrelevantbutton\" violenceanywherebenefitslaunchedrecentlyalliancefollowedmultiplebulletinincludedoccurredinternal$(this).republic><tr><tdcongressrecordedultimatesolution<ul id=\"discoverHome</a>websitesnetworksalthoughentirelymemorialmessagescontinueactive\">somewhatvictoriaWestern title=\"LocationcontractvisitorsDownloadwithout right\">\nmeasureswidth = variableinvolvedvirginianormallyhappenedaccountsstandingnationalRegisterpreparedcontrolsaccuratebirthdaystrategyofficialgraphicscriminalpossiblyconsumerPersonalspeakingvalidateachieved.jpg\" />machines</h2>\n keywordsfriendlybrotherscombinedoriginalcomposedexpectedadequatepakistanfollow\" valuable</label>relativebringingincreasegovernorplugins/List of Header\">\" name=\" ("graduate</head>\ncommercemalaysiadirectormaintain;height:schedulechangingback to catholicpatternscolor: #greatestsuppliesreliable</ul>\n\t\t<select citizensclothingwatching<li id=\"specificcarryingsentence<center>contrastthinkingcatch(e)southernMichael merchantcarouselpadding:interior.split(\"lizationOctober ){returnimproved-->\n\ncoveragechairman.png\" />subjectsRichard whateverprobablyrecoverybaseballjudgmentconnect..css\" /> websitereporteddefault\"/></a>\r\nelectricscotlandcreationquantity. ISBN 0did not instance-search-\" lang=\"speakersComputercontainsarchivesministerreactiondiscountItalianocriteriastrongly: 'http:'script'coveringofferingappearedBritish identifyFacebooknumerousvehiclesconcernsAmericanhandlingdiv id=\"William provider_contentaccuracysection andersonflexibleCategorylawrence<script>layout=\"approved maximumheader\"></table>Serviceshamiltoncurrent canadianchannels/themes//articleoptionalportugalvalue=\"\"intervalwirelessentitledagenciesSearch\" measuredthousandspending…new Date\" size=\"pageNamemiddle\" \" /></a>hidden\">sequencepersonaloverflowopinionsillinoislinks\">\n\t<title>versionssaturdayterminalitempropengineersectionsdesignerproposal=\"false\"EspaC1olreleasessubmit\" er"additionsymptomsorientedresourceright\"><pleasurestationshistory.leaving border=contentscenter\">.\n\nSome directedsuitablebulgaria.show();designedGeneral conceptsExampleswilliamsOriginal\"><span>search\">operatorrequestsa "allowingDocumentrevision. \n\nThe yourselfContact michiganEnglish columbiapriorityprintingdrinkingfacilityreturnedContent officersRussian generate-8859-1\"indicatefamiliar qualitymargin:0 contentviewportcontacts-title\">portable.length eligibleinvolvesatlanticonload=\"default.suppliedpaymentsglossary\n\nAfter guidance</td><tdencodingmiddle\">came to displaysscottishjonathanmajoritywidgets.clinicalthailandteachers<head>\n\taffectedsupportspointer;toString</small>oklahomawill be investor0\" alt=\"holidaysResourcelicensed (which . After considervisitingexplorerprimary search\" android\"quickly meetingsestimate;return ;color:# height=approval, " checked.min.js\"magnetic></a></hforecast. While thursdaydvertiseéhasClassevaluateorderingexistingpatients Online coloradoOptions\"campbell<!-- end</span><<br />\r\n_popups|sciences," quality Windows assignedheight: <b classle" value=\" Companyexamples<iframe believespresentsmarshallpart of properly).\n\nThe taxonomymuch of </span>\n\" data-srtuguC*sscrollTo project<head>\r\nattorneyemphasissponsorsfancyboxworld's wildlifechecked=sessionsprogrammpx;font- Projectjournalsbelievedvacationthompsonlightingand the special border=0checking</tbody><button Completeclearfix\n<head>\narticle <sectionfindingsrole in popular Octoberwebsite exposureused to changesoperatedclickingenteringcommandsinformed numbers </div>creatingonSubmitmarylandcollegesanalyticlistingscontact.loggedInadvisorysiblingscontent\"s")s. This packagescheckboxsuggestspregnanttomorrowspacing=icon.pngjapanesecodebasebutton\">gamblingsuch as , while </span> missourisportingtop:1px .</span>tensionswidth=\"2lazyloadnovemberused in height=\"cript\">\n </<tr><td height:2/productcountry include footer\" <!-- title\"></jquery.</form>\n(g.\u0000d=\u0013)(g9\u0001i+\u0014)hrvatskiitalianoromC\"nD\u0003tC<rkC'eX'X1X/Y\u0008tambiC)nnoticiasmensajespersonasderechosnacionalserviciocontactousuariosprogramagobiernoempresasanunciosvalenciacolombiadespuC)sdeportesproyectoproductopC:bliconosotroshistoriapresentemillonesmediantepreguntaanteriorrecursosproblemasantiagonuestrosopiniC3nimprimirmientrasamC)ricavendedorsociedadrespectorealizarregistropalabrasinterC)sentoncesespecialmiembrosrealidadcC3rdobazaragozapC!ginassocialesbloqueargestiC3nalquilersistemascienciascompletoversiC3ncompletaestudiospC:blicaobjetivoalicantebuscadorcantidadentradasaccionesarchivossuperiormayorC-aalemaniafunciC3nC:ltimoshaciendoaquellosediciC3nfernandoambientefacebooknuestrasclientesprocesosbastantepresentareportarcongresopublicarcomerciocontratojC3venesdistritotC)cnicaconjuntoenergC-atrabajarasturiasrecienteutilizarboletC-nsalvadorcorrectatrabajosprimerosnegocioslibertaddetallespantallaprC3ximoalmerC-aanimalesquiC)nescorazC3nsecciC3nbuscandoopcionesexteriorconceptotodavC-agalerC-aescribirmedicinalicenciaconsultaaspectoscrC-ticadC3laresjusticiadeberC!nperC-odonecesitamantenerpequeC1orecibidatribunaltenerifecanciC3ncanariasdescargadiversosmallorcarequieretC)cnicodeberC-aviviendafinanzasadelantefuncionaconsejosdifC-cilciudadesantiguasavanzadatC)rminounidadessC!nchezcampaC1asoftonicrevistascontienesectoresmomentosfacultadcrC)ditodiversassupuestofactoressegundospequeC1aP3P>P4P0P5Q\u0001P;P8P5Q\u0001Q\u0002Q\u000CP1Q\u000BP;P>P1Q\u000BQ\u0002Q\u000CQ\rQ\u0002P>P<P\u0015Q\u0001P;P8Q\u0002P>P3P>P<P5P=Q\u000FP2Q\u0001P5Q\u0005Q\rQ\u0002P>P9P4P0P6P5P1Q\u000BP;P8P3P>P4Q\u0003P4P5P=Q\u000CQ\rQ\u0002P>Q\u0002P1Q\u000BP;P0Q\u0001P5P1Q\u000FP>P4P8P=Q\u0001P5P1P5P=P0P4P>Q\u0001P0P9Q\u0002Q\u0004P>Q\u0002P>P=P5P3P>Q\u0001P2P>P8Q\u0001P2P>P9P8P3Q\u0000Q\u000BQ\u0002P>P6P5P2Q\u0001P5P<Q\u0001P2P>Q\u000EP;P8Q\u0008Q\u000CQ\rQ\u0002P8Q\u0005P?P>P:P0P4P=P5P9P4P>P<P0P<P8Q\u0000P0P;P8P1P>Q\u0002P5P<Q\u0003Q\u0005P>Q\u0002Q\u000FP4P2Q\u0003Q\u0005Q\u0001P5Q\u0002P8P;Q\u000EP4P8P4P5P;P>P<P8Q\u0000P5Q\u0002P5P1Q\u000FQ\u0001P2P>P5P2P8P4P5Q\u0007P5P3P>Q\rQ\u0002P8P<Q\u0001Q\u0007P5Q\u0002Q\u0002P5P<Q\u000BQ\u0006P5P=Q\u000BQ\u0001Q\u0002P0P;P2P5P4Q\u000CQ\u0002P5P<P5P2P>P4Q\u000BQ\u0002P5P1P5P2Q\u000BQ\u0008P5P=P0P<P8Q\u0002P8P?P0Q\u0002P>P<Q\u0003P?Q\u0000P0P2P;P8Q\u0006P0P>P4P=P0P3P>P4Q\u000BP7P=P0Q\u000EP<P>P3Q\u0003P4Q\u0000Q\u0003P3P2Q\u0001P5P9P8P4P5Q\u0002P:P8P=P>P>P4P=P>P4P5P;P0P4P5P;P5Q\u0001Q\u0000P>P:P8Q\u000EP=Q\u000FP2P5Q\u0001Q\u000CP\u0015Q\u0001Q\u0002Q\u000CQ\u0000P0P7P0P=P0Q\u0008P8X'Y\u0004Y\u0004Y\u0007X'Y\u0004X*Y\nX,Y\u0005Y\nX9X.X'X5X)X'Y\u0004X0Y\nX9Y\u0004Y\nY\u0007X,X/Y\nX/X'Y\u0004X\"Y\u0006X'Y\u0004X1X/X*X-Y\u0003Y\u0005X5Y\u0001X-X)Y\u0003X'Y\u0006X*X'Y\u0004Y\u0004Y\nY\nY\u0003Y\u0008Y\u0006X4X(Y\u0003X)Y\u0001Y\nY\u0007X'X(Y\u0006X'X*X-Y\u0008X'X!X#Y\u0003X+X1X.Y\u0004X'Y\u0004X'Y\u0004X-X(X/Y\u0004Y\nY\u0004X/X1Y\u0008X3X'X6X:X7X*Y\u0003Y\u0008Y\u0006Y\u0007Y\u0006X'Y\u0003X3X'X-X)Y\u0006X'X/Y\nX'Y\u0004X7X(X9Y\u0004Y\nY\u0003X4Y\u0003X1X'Y\nY\u0005Y\u0003Y\u0006Y\u0005Y\u0006Y\u0007X'X4X1Y\u0003X)X1X&Y\nX3Y\u0006X4Y\nX7Y\u0005X'X0X'X'Y\u0004Y\u0001Y\u0006X4X(X'X(X*X9X(X1X1X-Y\u0005X)Y\u0003X'Y\u0001X)Y\nY\u0002Y\u0008Y\u0004Y\u0005X1Y\u0003X2Y\u0003Y\u0004Y\u0005X)X#X-Y\u0005X/Y\u0002Y\u0004X(Y\nY\nX9Y\u0006Y\nX5Y\u0008X1X)X7X1Y\nY\u0002X4X'X1Y\u0003X,Y\u0008X'Y\u0004X#X.X1Y\tY\u0005X9Y\u0006X'X'X(X-X+X9X1Y\u0008X6X(X4Y\u0003Y\u0004Y\u0005X3X,Y\u0004X(Y\u0006X'Y\u0006X.X'Y\u0004X/Y\u0003X*X'X(Y\u0003Y\u0004Y\nX)X(X/Y\u0008Y\u0006X#Y\nX6X'Y\nY\u0008X,X/Y\u0001X1Y\nY\u0002Y\u0003X*X(X*X#Y\u0001X6Y\u0004Y\u0005X7X(X.X'Y\u0003X+X1X(X'X1Y\u0003X'Y\u0001X6Y\u0004X'X-Y\u0004Y\tY\u0006Y\u0001X3Y\u0007X#Y\nX'Y\u0005X1X/Y\u0008X/X#Y\u0006Y\u0007X'X/Y\nY\u0006X'X'Y\u0004X'Y\u0006Y\u0005X9X1X6X*X9Y\u0004Y\u0005X/X'X.Y\u0004Y\u0005Y\u0005Y\u0003Y\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0002\u0000\u0004\u0000\u0004\u0000\u0004\u0000\u0004\u0000\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0007\u0006\u0005\u0004\u0003\u0002\u0001\u0000\u0008\t\n\u000B\u000C\r\u000E\u000F\u000F\u000E\r\u000C\u000B\n\t\u0008\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0017\u0016\u0015\u0014\u0013\u0012\u0011\u0010\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F\u001F\u001E\u001D\u001C\u001B\u001A\u0019\u0018\u007F\u007F\u007F\u007F\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u007F\u007F\u007F\u007F\u0001\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u007F\u007F\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u007F\u007F\u0000\u0001\u0000\u0000\u0000\u0008\u0000\u0008\u0000\u0008\u0000\u0008\u0000\u0000\u0000\u0001\u0000\u0002\u0000\u0003\u0000\u0004\u0000\u0005\u0000\u0006\u0000\u0007resourcescountriesquestionsequipmentcommunityavailablehighlightDTD/xhtmlmarketingknowledgesomethingcontainerdirectionsubscribeadvertisecharacter\" value=\"</select>Australia\" class=\"situationauthorityfollowingprimarilyoperationchallengedevelopedanonymousfunction functionscompaniesstructureagreement\" title=\"potentialeducationargumentssecondarycopyrightlanguagesexclusivecondition</form>\r\nstatementattentionBiography} else {\nsolutionswhen the Analyticstemplatesdangeroussatellitedocumentspublisherimportantprototypeinfluence»</effectivegenerallytransformbeautifultransportorganizedpublishedprominentuntil thethumbnailNational .focus();over the migrationannouncedfooter\">\nexceptionless thanexpensiveformationframeworkterritoryndicationcurrentlyclassNamecriticismtraditionelsewhereAlexanderappointedmaterialsbroadcastmentionedaffiliate</option>treatmentdifferent/default.Presidentonclick=\"biographyotherwisepermanentFranC'aisHollywoodexpansionstandards</style>\nreductionDecember preferredCambridgeopponentsBusiness confusion>\n<title>presentedexplaineddoes not worldwideinterfacepositionsnewspaper</table>\nmountainslike the essentialfinancialselectionaction=\"/abandonedEducationparseInt(stabilityunable to\nrelationsNote thatefficientperformedtwo yearsSince thethereforewrapper\">alternateincreasedBattle ofperceivedtrying tonecessaryportrayedelectionsElizabethdiscoveryinsurances.length;legendaryGeographycandidatecorporatesometimesservices.inheritedCommunityreligiouslocationsCommitteebuildingsthe worldno longerbeginningreferencecannot befrequencytypicallyinto the relative;recordingpresidentinitiallytechniquethe otherit can beexistenceunderlinethis timetelephoneitemscopepracticesadvantage);return For otherprovidingdemocracyboth the extensivesufferingsupportedcomputers functionpracticalsaid thatit may beEnglish\nsuspectedmargin: 0spiritual\n\nmicrosoftgraduallydiscussedhe becameexecutivejquery.jshouseholdconfirmedpurchasedliterallydestroyedup to thevariationremainingit is notcenturiesJapanese among thecompletedalgorithminterestsrebellionundefinedencourageresizableinvolvingsensitiveuniversalprovision(althoughfeaturingconducted), which continued-header\">February numerous overflow:componentfragmentsexcellentcolspan=\"technicalnear the Advanced source ofexpressedHong Kong Facebookmultiple mechanismelevationoffensive\n\tsponsoreddocument.or "there arethose whomovementsprocessesdifficultsubmittedrecommendconvincedpromoting\" width=\".replace(classicalcoalitionhis firstdecisionsassistantindicatedevolution-wrapper\"enough toalong thedelivered-->\r\n\n\r\n
      Archbishop class=\"nobeing usedapproachesprivilegesnoscript>\nresults inmay be theEaster eggmechanismsreasonablePopulationCollectionselected\">noscript>\r/index.phparrival of-jssdk'));managed toincompletecasualtiescompletionChristiansSeptember arithmeticproceduresmight haveProductionit appearsPhilosophyfriendshipleading togiving thetoward theguaranteeddocumentedcolor:#000video gamecommissionreflectingchange theassociatedsans-serifonkeypress; padding:He was theunderlyingtypically , and the srcElementsuccessivesince the should be networkingaccountinguse of thelower thanshows that\n\t\tcomplaintscontinuousquantitiesastronomerhe did notdue to itsapplied toan averageefforts tothe futureattempt toTherefore,capabilityRepublicanwas formedElectronickilometerschallengespublishingthe formerindigenousdirectionssubsidiaryconspiracydetails ofand in theaffordablesubstancesreason forconventionitemtype=\"absolutelysupposedlyremained aattractivetravellingseparatelyfocuses onelementaryapplicablefound thatstylesheetmanuscriptstands for no-repeat(sometimesCommercialin Americaundertakenquarter ofan examplepersonallyindex.php?\npercentagebest-knowncreating a\" dir=\"ltrLieutenant\n
      is said tostructuralreferendummost oftena separate->\n
      soundtracksearchFormtend to beinput id=\"opening ofrestrictedadopted byaddressingtheologianmethods ofvariant ofChristian very largeautomotiveby far therange frompursuit offollow thebrought toin Englandagree thataccused ofcomes frompreventingdiv style=his or hertremendousfreedom ofconcerning0 1em 1em;Basketball/style.cssan earliereven after/\" title=\".com/indextaking thepittsburghcontent\">\rimplementedcan be seenthere was ademonstratecontainer\">connectionsthe Britishwas written!important;px; margin-followed byability to complicatedduring the immigrationalso called

      \n

      acquisitioncalled the persecutiondesignation{font-size:appeared ininvestigateexperiencedmost likelywidely useddiscussionspresence of (document.extensivelyIt has beenit does notcontrary toinhabitantsimprovementscholarshipconsumptioninstructionfor exampleone or morepx; paddingthe currenta series ofare usuallyrole in thepreviously derivativesevidence ofexperiencescolorschemestated thatcertificate
      \n selected=\"high schoolresponse tocomfortableadoption ofthree yearsthe countryin Februaryso that thepeople who provided by\nhaving been\r\n\r\n< "The compilationhe had beenproduced byphilosopherconstructedintended toamong othercompared toto say thatEngineeringa differentreferred todifferencesbelief thatphotographsidentifyingHistory of Republic ofnecessarilyprobabilitytechnicallyleaving thespectacularfraction ofelectricityhead of therestaurantspartnershipemphasis onmost recentshare with saying thatfilled withdesigned toit is often\">as follows:merged withthrough thecommercial pointed outopportunityview of therequirementdivision ofprogramminghe receivedsetInterval\">maintainingChristopherMuch of thewritings of\" height=\"2size of theversion of mixture of between theExamples ofeducationalcompetitive onsubmit=\"director ofdistinctive/DTD XHTML relating totendency toprovince ofwhich woulddespite thescientific legislature.innerHTML allegationsAgriculturewas used inapproach tointelligentyears later,sans-serifdeterminingPerformanceappearances, which is foundationsabbreviatedhigher thans from the individual composed ofsupposed toclaims thatattributionfont-size:1elements ofHistorical his brotherat the timeanniversarygoverned byrelated to ultimately innovationsit is stillcan only bedefinitionstoGMTStringA number ofimg class=\"Eventually,was changedoccurred inneighboringdistinguishwhen he wasintroducingterrestrialMany of theargues thatan Americanconquest ofwidespread were killedscreen and In order toexpected todescendantsare locatedlegislativegenerations backgroundmost peopleyears afterthere is nothe highestfrequently they do notargued thatshowed thatpredominanttheologicalby the timeconsideringshort-livedcan be usedvery littleone of the had alreadyinterpretedcommunicatefeatures ofgovernment,entered the\" height=\"3Independentpopulationslarge-scale. Although used in thedestructionpossibilitystarting intwo or moreexpressionssubordinatelarger thanhistory and\r\nContinentaleliminatingwill not bepractice ofin front ofsite of theensure thatto create amississippipotentiallyoutstandingbetter thanwhat is nowsituated inmeta name=\"TraditionalsuggestionsTranslationthe form ofatmosphericideologicalenterprisescalculatingeast of theremnants ofpluginspage/index.php?remained intransformedHe was alsowas alreadystatisticalin favor ofMinistry ofmovement offormulationis required\nquestion ofwas electedto become abecause of some peopleinspired bysuccessful a time whenmore commonamongst thean officialwidth:100%;technology,was adoptedto keep thesettlementslive birthsindex.html\"Connecticutassigned to&times;account foralign=rightthe companyalways beenreturned toinvolvementBecause thethis period\" name=\"q\" confined toa result ofvalue=\"\" />is actuallyEnvironment\r\n\r\nConversely,>\n
      this is notthe presentif they areand finallya matter of\r\n\t
      \r\n\r\nfaster thanmajority ofafter whichcomparativeto maintainimprove theawarded theer\" class=\"frameborderrestorationin the sameanalysis oftheir firstDuring the continentalsequence offunction(){font-size: work on the\nadopted theproperty ofdirected byeffectivelywas broughtchildren ofProgramminglonger thanmanuscriptswar againstby means ofand most ofsimilar to proprietaryoriginatingprestigiousgrammaticalexperience.to make theIt was alsois found incompetitorsin the U.S.replace thebrought thecalculationfall of thethe generalpracticallyin honor ofreleased inresidentialand some ofking of thereaction to1st Earl ofculture andprincipally\n they can beback to thesome of hisexposure toare similarform of theaddFavoritecitizenshippart in thepeople within practiceto continue&minus;approved by the first allowed theand for thefunctioningplaying thesolution toheight=\"0\" in his bookmore than afollows thecreated thepresence in nationalistthe idea ofa characterwere forced class=\"btndays of thefeatured inshowing theinterest inin place ofturn of thethe head ofLord of thepoliticallyhas its ownEducationalapproval ofsome of theeach other,behavior ofand becauseand anotherappeared onrecorded inblack"may includethe world'scan lead torefers to aborder=\"0\" government winning theresulted in while the Washington,the subjectcity in the>
      \r\n\t\treflect theto completebecame moreradioactiverejected bywithout anyhis father,which couldcopy of theto indicatea politicalaccounts ofconstitutesworked witherof his lifeaccompaniedclientWidthprevent theLegislativedifferentlytogether inhas severalfor anothertext of thefounded thee with the is used forchanged theusually theplace wherewhereas the> \nHowever thelead to the\tThe currentthe site ofsubstantialexperience,in the Westthey shouldslovenD\rinacomentariosuniversidadcondicionesactividadesexperienciatecnologC-aproducciC3npuntuaciC3naplicaciC3ncontraseC1acategorC-asregistrarseprofesionaltratamientoregC-stratesecretarC-aprincipalesprotecciC3nimportantesimportanciaposibilidadinteresantecrecimientonecesidadessuscribirseasociaciC3ndisponiblesevaluaciC3nestudiantesresponsableresoluciC3nguadalajararegistradosoportunidadcomercialesfotografC-aautoridadesingenierC-atelevisiC3ncompetenciaoperacionesestablecidosimplementeactualmentenavegaciC3nconformidadline-height:font-family:\" : \"http://applicationslink\" href=\"specifically//\n/index.html\"window.open( !important;application/independence//www.googleorganizationautocompleterequirementsconservative
      most notably/>notification'undefined')Furthermore,believe thatinnerHTML = prior to thedramaticallyreferring tonegotiationsheadquartersSouth AfricaunsuccessfulPennsylvaniaAs a result,\npadding-top:experimentalgetAttributeinstructionstechnologiespart of the =function(){subscriptionl.dtd\">\r\nEnglish (US)appendChild(transmissions. However, intelligence\" tabindex=\"float:right;Commonwealthranging fromin which theat least onereproductionencyclopedia;font-size:1jurisdictionat that time\">compensationchampionshipmedia=\"all\" violation ofreference toreturn true;Strict//EN\" transactionsinterventionverificationInformation difficultiesChampionshipcapabilities}\n\nChristianityfor example,Professionalrestrictionssuggest thatwas released(such as theremoveClass(unemploymentthe Americanstructure of/index.html published inspan class=\"\">\n\nf (document.border: 1px {font-size:1treatment of0\" height=\"1modificationIndependencedivided intogreater thanachievementsestablishingJavaScript\" neverthelesssignificanceBroadcasting> container\">\nsuch as the influence ofa particularsrc='http://navigation\" half of the substantial  advantage ofdiscovery offundamental metropolitanthe opposite\" xml:lang=\"deliberatelyalign=centerevolution ofpreservationimprovementsbeginning inJesus ChristPublicationsdisagreementtext-align:r, function()similaritiesbody>is currentlyalphabeticalis sometimestype=\"image/many of the flow:hidden;available indescribe theexistence ofall over thethe Internet\t